Built motion from commit (unavailable).|2.3.91 2.3.91
authorAndrea Bianco <andrea.bianco@xcally.com>
Thu, 7 Nov 2019 17:52:41 +0000 (18:52 +0100)
committerAndrea Bianco <andrea.bianco@xcally.com>
Thu, 7 Nov 2019 17:52:41 +0000 (18:52 +0100)
1070 files changed:
apidoc/api_project.js
apidoc/api_project.json
package.json
public/app/forgot/i18n/es.json
public/app/login/i18n/es.json
public/app/main/apps/analytics/i18n/es.json
public/app/main/apps/callysquare/i18n/es.json
public/app/main/apps/chat/i18n/es.json
public/app/main/apps/contactmanager/i18n/es.json
public/app/main/apps/dashboards/i18n/es.json
public/app/main/apps/fax/i18n/es.json
public/app/main/apps/integrations/i18n/es.json
public/app/main/apps/jscripty/i18n/es.json
public/app/main/apps/mail/i18n/es.json
public/app/main/apps/motiondialer/i18n/es.json
public/app/main/apps/openchannel/i18n/es.json
public/app/main/apps/settings/i18n/es.json
public/app/main/apps/sms/i18n/es.json
public/app/main/apps/staff/i18n/es.json
public/app/main/apps/tools/i18n/es.json
public/app/main/apps/voice/i18n/es.json
public/app/quick-panel/i18n/es.json
public/app/reset/i18n/es.json
public/app/toolbar/i18n/es.json
public/index.html
public/scripts/app.19882861.js [moved from public/scripts/app.95fc445c.js with 55% 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/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.3.91.js [new file with mode: 0644]
server/mysqldb/index.js
server/routes.js
server/rpc/index.js
server/services/agi/channel.js
server/services/agi/error.js
server/services/agi/graph/index.js
server/services/agi/index.js
server/services/agi/mailRpc/index.js
server/services/agi/reply.js
server/services/agi/rpc/index.js
server/services/agi/scripts/aws/index.js
server/services/agi/scripts/aws/lex/index.js
server/services/agi/scripts/aws/lex/lib/api.js
server/services/agi/scripts/aws/polly/index.js
server/services/agi/scripts/aws/polly/lib/api.js
server/services/agi/scripts/google/asr/index.js
server/services/agi/scripts/google/asr/lib/api.js
server/services/agi/scripts/google/index.js
server/services/agi/scripts/index.js
server/services/agi/scripts/sestek/index.js
server/services/agi/scripts/sestek/nda/index.js
server/services/agi/scripts/tilde/asr/index.js
server/services/agi/scripts/tilde/asr/lib/api.js
server/services/agi/scripts/tilde/index.js
server/services/agi/server.js
server/services/agi/vertices.js
server/services/ami/acw/index.js
server/services/ami/ami.js
server/services/ami/client.js
server/services/ami/dialer/action.js
server/services/ami/dialer/agentComplete.js
server/services/ami/dialer/final.js
server/services/ami/dialer/hangup.js
server/services/ami/dialer/history.js
server/services/ami/dialer/index.js
server/services/ami/dialer/queueCallerAbandon.js
server/services/ami/fax/action.js
server/services/ami/fax/index.js
server/services/ami/fax/rpcDb.js
server/services/ami/fax/util/gs.js
server/services/ami/fax/util/util.js
server/services/ami/index.js
server/services/ami/model/agent.js
server/services/ami/model/campaign.js
server/services/ami/model/channel.js
server/services/ami/model/deskAccount.js
server/services/ami/model/dynamics365Account.js
server/services/ami/model/faxAccount.js
server/services/ami/model/freshdeskAccount.js
server/services/ami/model/queueReport.js
server/services/ami/model/salesforceAccount.js
server/services/ami/model/servicenowAccount.js
server/services/ami/model/sugarcrmAccount.js
server/services/ami/model/telephone.js
server/services/ami/model/template.js
server/services/ami/model/trigger.js
server/services/ami/model/trunk.js
server/services/ami/model/voiceExtension.js
server/services/ami/model/voiceQueue.js
server/services/ami/model/vtigerAccount.js
server/services/ami/model/zendeskAccount.js
server/services/ami/model/zohoAccount.js
server/services/ami/preview/action.js
server/services/ami/preview/index.js
server/services/ami/preview/rpcDb.js
server/services/ami/preview/util/util.js
server/services/ami/properties.js
server/services/ami/realtime/index.js
server/services/ami/report/index.js
server/services/ami/report/userReport.js
server/services/ami/report/voiceAgentReport.js
server/services/ami/report/voiceCallReport.js
server/services/ami/report/voiceDialReport.js
server/services/ami/report/voiceQueueReport.js
server/services/ami/rpc/agentReportPreview.js
server/services/ami/rpc/attachment.js
server/services/ami/rpc/campaign.js
server/services/ami/rpc/cmContact.js
server/services/ami/rpc/cmHopper.js
server/services/ami/rpc/cmHopperBlack.js
server/services/ami/rpc/cmHopperFinal.js
server/services/ami/rpc/cmHopperHistory.js
server/services/ami/rpc/faxAccount.js
server/services/ami/rpc/faxMessage.js
server/services/ami/rpc/integrations/desk.js
server/services/ami/rpc/integrations/dynamics365.js
server/services/ami/rpc/integrations/freshdesk.js
server/services/ami/rpc/integrations/salesforce.js
server/services/ami/rpc/integrations/servicenow.js
server/services/ami/rpc/integrations/sugarcrm.js
server/services/ami/rpc/integrations/vtiger.js
server/services/ami/rpc/integrations/zendesk.js
server/services/ami/rpc/integrations/zoho.js
server/services/ami/rpc/memberReport.js
server/services/ami/rpc/template.js
server/services/ami/rpc/trigger.js
server/services/ami/rpc/trunk.js
server/services/ami/rpc/user.js
server/services/ami/rpc/voiceAgentReport.js
server/services/ami/rpc/voiceCallReport.js
server/services/ami/rpc/voiceDialReport.js
server/services/ami/rpc/voiceExtension.js
server/services/ami/rpc/voiceQueue.js
server/services/ami/rpc/voiceQueueReport.js
server/services/ami/rpc/voiceQueueRt.js
server/services/ami/rpc/voiceRecording.js
server/services/ami/rpc/voiceTransferReport.js
server/services/ami/server/index.js
server/services/ami/trigger/cmContact/index.js
server/services/ami/trigger/index.js
server/services/ami/trigger/integration/desk.js
server/services/ami/trigger/integration/dynamics365.js
server/services/ami/trigger/integration/freshdesk.js
server/services/ami/trigger/integration/index.js
server/services/ami/trigger/integration/salesforce.js
server/services/ami/trigger/integration/servicenow.js
server/services/ami/trigger/integration/sugarcrm.js
server/services/ami/trigger/integration/util.js
server/services/ami/trigger/integration/vtiger.js
server/services/ami/trigger/integration/zendesk.js
server/services/ami/trigger/integration/zoho.js
server/services/ami/trigger/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 d991f36..5559286 100644 (file)
@@ -1 +1 @@
-define({\r  "name": "xCALLY Motion API",\r  "version": "2.3.10",\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 -u admin:password 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": "2019-11-04T21:03:14.502Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r});
+define({\r  "name": "xCALLY Motion API",\r  "version": "2.3.91",\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 -u admin:password 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": "2019-11-07T17:46:23.969Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r});
index 723b51f..b27fd17 100644 (file)
@@ -1 +1 @@
-{\r  "name": "xCALLY Motion API",\r  "version": "2.3.10",\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 -u admin:password 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": "2019-11-04T21:03:14.502Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r}
+{\r  "name": "xCALLY Motion API",\r  "version": "2.3.91",\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 -u admin:password 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": "2019-11-07T17:46:23.969Z",\r    "url": "http://apidocjs.com",\r    "version": "0.17.7"\r  }\r}
index 32c85ec..39b7035 100644 (file)
@@ -1,6 +1,6 @@
 {
     "name": "motion",
-    "version": "2.3.10",
+    "version": "2.3.91",
     "description": "xCALLY Motion is the new Realtime asynchronous solution for your multichannel contact center over Asterisk.",
     "main": "server/app.js",
     "engines": {
index 28c661b..13a2737 100644 (file)
@@ -1,15 +1,15 @@
 {
     "FORGOTPASSWORD": {
         "ERRORS": {
-            "EMAIL_MUST_VALID": "Formato erróneo",
-            "EMAIL_REQUIRED": "Campo obligatorio"
+            "EMAIL_MUST_VALID": "Formato Erróneo",
+            "EMAIL_REQUIRED": "Campo Obligatorio"
         },
-        "EMAIL_ADRESS": "Dirección de correo electrónico",
-        "GO_BACK": "Regrese para iniciar sesión",
-        "LINK_SENT": "Enlace enviado",
-        "LINNK_SENT_MESSAGE": "¡Se ha enviado a su dirección un correo electrónico que contiene un enlace para restablecer su contraseña!",
-        "PASSWORD_RESET_ERROR": "Error de restablecimiento de contraseña",
+        "EMAIL_ADRESS": "Dirección de Correo Electrónico",
+        "GO_BACK": "Regrese para iniciar Sesión",
+        "LINK_SENT": "Enlace Enviado",
+        "LINNK_SENT_MESSAGE": "¡Se ha enviado a su dirección de correo electrónico  un enlace para restablecer su contraseña!",
+        "PASSWORD_RESET_ERROR": "Error de Restablecimiento de Contraseña",
         "SEND_RESET_LINK": "ENVIAR RESET LINK",
-        "TITLE": "recupera tu contraseña"
+        "TITLE": "Recupera Tu Contraseña"
     }
 }
\ No newline at end of file
index 5150ef6..ae8f5f0 100644 (file)
@@ -9,7 +9,7 @@
         "CREATE_ACCOUNT": "Crea una cuenta",
         "DONT_HAVE_ACCOUNT": "Sin cuenta?",
         "EMAIL": "Email",
-        "FORGOT_PASSWORD": "¿Se te olvidó tu contraseña?",
+        "FORGOT_PASSWORD": "¿Ha Olvidado su Contraseña?",
         "LOG_IN": "INICIAR SESIÓN",
         "OR": "O",
         "PASSWORD": "Contraseña",
@@ -17,7 +17,7 @@
         "TITLE": "Ingrese a su cuenta",
         "USERNAME": "Nombre de usuario",
         "WITH_FACEBOOK": "Iniciar sesión con Facebook",
-        "WITH_GOOGLE": "Inicia sesión con Google",
+        "WITH_GOOGLE": "Iniciar sesión con Google",
         "CANCEL": "Cancelar",
         "SELECT": "Seleccionar",
         "TELEPHONES": "Telefonos"
index e9951ed..4863d73 100644 (file)
@@ -13,8 +13,8 @@
         "ADD_REPORTFIELD": "Agregue campo",
         "ALIAS": "Alias",
         "ANALYTICS": "Analítica",
-        "BACK": "Espalda",
-        "CLOSE": "Cerca",
+        "BACK": "Atrás",
+        "CLOSE": "Cerrar",
         "COLUMN": "Columna",
         "CONDITION": "Condición",
         "CONDITIONS": "Condiciones",
@@ -22,8 +22,8 @@
         "CREATE": "Crear carpeta",
         "CREATED_AT": "Creado en",
         "CUSTOM_METRIC": "Métrica personalizada",
-        "DATE_RANGE_FROM": "Rango de fechas desde",
-        "DATE_RANGE_TO": "Rango de fechas a",
+        "DATE_RANGE_FROM": "Rango de Fechas Desde",
+        "DATE_RANGE_TO": "Rango de Fechas Hasta",
         "DELETE": "Borrar",
         "DELETE_EXTRACTEDREPORT": "Eliminar informe extraído",
         "DELETE_METRIC": "Eliminar métrica",
@@ -31,7 +31,7 @@
         "DELETE_REPORTFIELD": "Eliminar campo",
         "DESCRIPTION": "Descripción",
         "DOWNLOAD_EXTRACTEDREPORT": "Descargar el informe extraído",
-        "DOWNLOAD_JSON_REPORT": "Informe de exportación JSON",
+        "DOWNLOAD_JSON_REPORT": "Exportar Informe JSON",
         "EDIT_EXTRACTEDREPORT": "Editar informe extraído",
         "EDIT_METRIC": "Editar métrica",
         "EDIT_REPORT": "Editar informe",
@@ -62,7 +62,7 @@
         "ORDER_BY": "Ordenar por",
         "OUTPUT": "Salida",
         "PAGE": "Página",
-        "PREVIEW": "Avance",
+        "PREVIEW": "Vista Previa",
         "PREVIEW_REPORT": "Informe de vista previa",
         "QUERY_ERROR": "Error de consulta",
         "REMOVE": "Eliminar carpeta",
         "REPORTNAME": "Reportar nombre",
         "REPORTS": "Informes",
         "ROWSPERPAGE": "Filas por página",
-        "RUN_REPORT": "Sacar un reporte",
+        "RUN_REPORT": "Ejecutar un Reporte",
         "SAVE": "Salvar",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SEARCH_FOR_FOLDER": "Buscar carpeta",
         "SELECTED": "Seleccionado",
         "SELECT_ALL": "Seleccionar todo",
-        "SELECT_NODE": "Seleccione la carpeta",
+        "SELECT_NODE": "Seleccione Carpeta",
         "SELECT_NONE": "Seleccione Ninguno",
         "SETTINGS": "Configuraciones",
         "STATUS": "Estado",
-        "TABLE": "Mesa",
+        "TABLE": "Tabla",
         "TYPE": "Tipo",
         "VALUE": "Valor",
         "SEND_IF_EMPTY": "Enviar si está vacío"
index 651ab70..ba816e2 100644 (file)
@@ -14,7 +14,7 @@
             "BCC": "Puede agregar varias direcciones separadas por comas (por ejemplo, john.doe@xcally.com, jane.miller@xcally.com)",
             "CC": "Puede agregar varias direcciones separadas por comas (por ejemplo, john.doe@xcally.com, jane.miller@xcally.com)",
             "DSN": "Ejemplo: DRIVER = MySQL; SERVER = 127.0.0.1; UID = xcall; PWD = contraseña; DATABASE = Motion",
-            "MAILBOX": "buzón @ contexto",
+            "MAILBOX": "buzón@contexto",
             "TO": "Puede agregar varias direcciones separadas por comas (por ejemplo, john.doe@xcally.com, jane.miller@xcally.com)"
         },
         "ACCOUNT_ID": "Cuenta",
         "ATTACHMENT_TYPE": "Tipo de Adjunto",
         "AUDIO": "Audio",
         "AWSPOLLY": "AWS Polly",
-        "AWS_ACCESS_KEY_ID": "ID de clave de acceso",
+        "AWS_ACCESS_KEY_ID": "Acceso Key ID",
         "AWS_POLLY_REGION": "Región",
         "AWS_POLLY_VOICE": "Voz",
         "AWS_SECRET_ACCESS_KEY": "Clave de acceso secreta",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BCC": "BCC",
         "BEEP": "Bip",
-        "CALLBACK": "Llamar de vuelta",
+        "CALLBACK": "Callback",
         "CALLBACK_PRIORITY": "Prioridad",
         "CALLYSQUARE": "Cally Square",
         "CC": "CC",
-        "CHOOSE_ATTACHMENT": "Elija Adjunto",
-        "CLOSE": "Cerca",
-        "COMMAND": "Mando",
+        "CHOOSE_ATTACHMENT": "Elegir Adjunto",
+        "CLOSE": "Cerrar",
+        "COMMAND": "Comando",
         "CONDITION": "Condición",
         "CONTEXT": "Contexto",
-        "COPY": "Dupdo",
+        "COPY": "Copiar",
         "COPY_PROJECT": "Copiar proyecto",
         "CREATED_AT": "Creado en",
         "CUSTOM_APP": "Aplicación personalizada",
         "DELETE_SQUARERECORDING": "Eliminar grabación",
         "DESCRIPTION": "Descripción",
         "DIAL": "Marcar",
-        "DIGIT": "Max Digits",
+        "DIGIT": "Max Dígitos",
         "DIGITS": "Dígitos",
-        "DOWNLOAD_SQUARERECORDING": "Descargar Recording",
-        "DROP_TO_UPLOAD": "DROP TO UPLOAD",
+        "DOWNLOAD_SQUARERECORDING": "Descargar Grabaciones",
+        "DROP_TO_UPLOAD": "DROP PARA CARGAR",
         "DROP_TO_UPLOAD_MESSAGE": "También puede soltar archivos aquí para cargarlos. Solo XML - Max. 5 MB",
         "DSN": "DSN",
         "EDIT": "Editar",
         "ESCAPE_DIGITS": "Dígitos de escape",
         "EXTEN": "Exten",
         "EXTENSION": "Extensión",
-        "EXT_DIAL": "Dial externo",
+        "EXT_DIAL": "Discado Externo",
         "FILE": "Nombre del archivo",
         "FILENAME": "Nombre del archivo",
         "FILE_ID": "Audio",
         "FINALLY": "Finalmente",
         "FINDBY": "Encontrar por",
-        "GETDIGITS": "Obtenga Dígitos",
-        "GETSECRETDIGITS": "Obtenga dígitos secretos",
-        "GOAL": "Gol",
-        "GOALNAME": "Nombre del objetivo",
+        "GETDIGITS": "Ver Dígitos ",
+        "GETSECRETDIGITS": "Dígitos Dígitos Secretos",
+        "GOAL": "Ir-Al",
+        "GOALNAME": "Ir-Al-Nombre",
         "GOOGLEASR": "GoogleASR",
         "GOOGLE_ASR_LANGUAGE": "Idioma",
         "GOOGLE_TTS_LANGUAGE": "Idioma",
         "GOSUB": "GoSub",
-        "GOTOC": "Ir",
+        "GOTOC": "GoTo",
         "GOTOIF": "GoToIf",
         "GOTOIFTIME": "GoToIfTime",
         "GO_TO_PROJECTS": "Ir a proyectos",
         "QUEUE_ID": "Cola",
         "RECORD": "Grabar",
         "RECORDINGFORMAT": "Formato de grabación",
-        "RESPONSE": "Tiempo de espera de respuesta",
+        "RESPONSE": "Tiempo de Espera",
         "RETRY": "Reintentos",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "Salvar",
-        "SAYDIGITS": "Say Digits",
+        "SAVE": "Guardar",
+        "SAYDIGITS": "Decir Dígitos",
         "SAYNUMBER": "Decir número",
         "SAYPHONETIC": "Decir Fonética",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SELECTED": "Seleccionado",
         "SELECT_ALL": "Seleccionar todo",
-        "SELECT_NONE": "Seleccione Ninguno",
+        "SELECT_NONE": "Seleccionar Ninguno",
         "SENDFAX": "Enviar fax",
         "SENDMAIL": "Enviar correo electrónico",
         "SENDSMS": "Enviar SMS",
-        "SET": "Conjunto",
-        "SIP_ID": "sorbo",
+        "SET": "Establecer",
+        "SIP_ID": "SIP",
         "SMS_ACCOUNT_ID": "Cuenta",
         "SMS_TEXT": "Texto",
         "SPEED": "Velocidad",
         "SQUARERECORDINGS": "Grabaciones",
-        "START": "comienzo",
-        "SUBJECT": "Tema",
+        "START": "Empezar",
+        "SUBJECT": "Sujeto",
         "SUBPROJECT": "Sub proyecto",
         "SYSTEM": "Sistema",
         "TELEPHONES": "Teléfonos",
         "TEST_ODBC": "Prueba ODBC",
         "TEXT": "Texto",
         "TILDEASR": "Tilde ASR",
-        "TIMEOUT": "Se acabó el tiempo",
+        "TIMEOUT": "Timeout",
         "TO": "A",
-        "TRUNK_NAME": "Truncal",
+        "TRUNK_NAME": "Troncal",
         "TTS": "Google Text-To-Speech",
-        "UNIQUEID": "Identificación única",
+        "UNIQUEID": "ID Unico",
         "UNPAUSE": "Fin de pausa",
         "UPDATE_DESCRIPTION": "Descripción de la actualización",
         "UPDATE_INFO": "Actualizar información",
         "ALL_USERS": "Todos los usuarios",
         "PERMISSIONADD_PROJECTS": "Añadir usuarios al proyecto",
         "SELECTED_USERS": "Usuarios seleccionados",
-        "AWS_BOT_NAME": "Nombre del bot",
+        "AWS_BOT_NAME": "Nombre Bot",
         "AWS_LEX_REGION": "Región",
         "NDASSISTANT_URL": "NDASSISTANT Url",
         "NDAUTH_URL": "NDAUTH Url",
         "USERNAME": "Nombre de usuario",
         "NDAGENERATE_AUDIO": "Generar archivo de audio",
         "CUSTOM_ACTION": "Acción personalizada",
-        "CUSTOM_ACTION_DATA": "Datos de acción personalizados",
+        "CUSTOM_ACTION_DATA": "Datos Personalizados de Acción",
         "NDAACTIVITY_TYPE": "Tipo de actividad"
     }
 }
\ No newline at end of file
index 8da1306..4011624 100644 (file)
             "AUTOCLOSE": "Habilítelo si desea que las sesiones de chat se cierren como No gestionadas si no hay ningún agente disponible. Obtenga más información al respecto en: https://wiki.xcallymotion.com/display/XMV/Chat Websites",
             "COPYSCRIPTTOCLIPBOARD": "Copie y pegue el texto del script en su sitio web",
             "ENABLECUSTOMERWRITING": "Habilítelo si desea que el chat comience sin esperar un agente disponible (preste atención: si lo habilita, sus chats nunca se administrarán). Obtenga más información en: https://wiki.xcallymotion.com/display/XMV/Chat Websites",
-            "ENABLEFEEDBACK": "Habilítelo si desea que el visitante web pueda enviar comentarios (hasta 150 caracteres) al final",
+            "ENABLEFEEDBACK": "Habilitar si desea que el visitante web pueda enviar comentarios",
             "ENABLERATING": "Habilítelo si desea que el visitante web pueda calificar la interacción al final",
             "ENABLEUNMANAGEDNOTE": "Habilítelo si desea que se muestre un mensaje al visitante cuando todos los agentes estén ocupados y el chat no se administre",
             "FORWARDTRANSCRIPT": "Habilítelo si desea que el visitante web reciba una transcripción de la conversación por correo electrónico",
             "FORWARD_OFFLINE": "Puede agregar varias direcciones separadas por comas (por ejemplo, john.doe@xcally.com, jane.miller@xcally.com)",
             "FROMKEY": "Se mapeará en su fragmento de chat de Motion como:",
-            "HIDEWHENOFFLINE": "Oculta el fragmento cuando está fuera de línea",
+            "HIDEWHENOFFLINE": "Ocultar",
             "INTERVAL": "Seleccione uno de la lista",
             "INTEVAL": "Para ser seleccionado de la lista de los intervalos disponibles",
             "KEY": "Nombre abreviado del sitio web (5 caracteres) que se muestra en la pestaña del agente",
             "MANDATORYDISPOSITIONPAUSEID": "Pausa para usar si la disposición obligatoria está habilitada"
         },
         "ACCEPT": "Aceptar",
-        "ACCEPTMETHOD": "Aceptar el método",
+        "ACCEPTMETHOD": "Aceptar Método",
         "ACCEPTURL": "Aceptar URL",
         "ACCOUNT": "Cuenta",
-        "ACTIONS": "Comportamiento",
+        "ACTIONS": "Acciones",
         "ADDRESS": "Dirección",
         "ADD_CHATCANNEDANSWER": "Agregar respuesta enlatada",
         "ADD_CHATDISPOSITION": "Agregar disposición de chat",
         "APPEARANCE": "Apariencia",
         "AUTOCLOSE": "Habilitar cierre automático",
         "AUTOREPLY": "Respuesta automática",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BUILDER": "Constructor",
         "BUSY": "Ocupado",
-        "BUTTONCOLOR": "Color del boton",
+        "BUTTONCOLOR": "Color del Botón",
         "CAPACITY": "Capacidad",
         "CHAT": "Chat",
         "CHATDISPOSITIONS": "Disposiciones de chat",
         "CHATPROACTIVEACTIONS": "Acciones proactivas",
         "CHATQUEUES": "Colas de chat",
         "CHATWEBSITES": "Sitios web de chat",
-        "CLOSE": "Cerca",
+        "CLOSE": "Cerrar",
         "CLOSED": "Cerrado",
         "CLOSEDAT": "Cerrado en",
-        "CLOSEMETHOD": "Método cercano",
+        "CLOSEMETHOD": "Cerrar Método",
         "CLOSEURL": "Cerrar URL",
         "CLOSINGFORM": "Formulario de cierre",
         "CLOSINGMESSAGE": "Mensaje de cierre",
         "CLOSINGMESSAGEBUTTON": "Botón Cerrar mensaje",
         "CLOSINGQUESTION": "Pregunta de cierre",
-        "CM_FIELD": "Contact Manager Field",
+        "CM_FIELD": "Campo Contacto Encargado",
         "COLLAPSE": "Colapso",
-        "COMMAND": "Mando",
+        "COMMAND": "Comando",
         "CONDITION": "Condición",
         "CONDITION_AGREEMENT": "Acuerdo de Condición",
         "CONTACT": "Contacto",
         "DEFAULT_PAUSE": "Pausa por defecto",
         "DELETE": "Borrar",
         "DELETE_CHATCANNEDANSWER": "Borrar",
-        "DELETE_CHATDISPOSITION": "Eliminar la disposición de chat",
+        "DELETE_CHATDISPOSITION": "Eliminar Disposición de Chat",
         "DELETE_CHATPROACTIVEACTION": "Eliminar acción proactiva",
         "DELETE_CHATQUEUE": "Eliminar cola de chat",
         "DELETE_CHATWEBSITE": "Eliminar el sitio web de chat",
         "DELETE_OFFLINEMESSAGE": "Borrar",
         "DESCRIPTION": "Descripción",
         "DISPOSITION": "Disposición",
-        "DISPOSITIONS": "Plan",
+        "DISPOSITIONS": "Disposiciones",
         "DOWN": "Abajo",
         "DOWNLOADTRANSCRIPT": "Descargar la transcripción",
         "EDIT_AGENT": "Editar agente",
         "EDIT_AUTOREPLY": "Editar respuesta automática",
         "EDIT_CHATCANNEDANSWER": "Editar",
-        "EDIT_CHATDISPOSITION": "Editar la disposición de chat",
+        "EDIT_CHATDISPOSITION": "Editar Disposición de Chat",
         "EDIT_CHATPROACTIVEACTION": "Editar acción proactiva",
         "EDIT_CHATQUEUE": "Editar cola de chat",
         "EDIT_CHATWEBSITE": "Editar sitio web de chat",
         "EDIT_CLOSE": "Editar Cerrar",
-        "EDIT_GOTO": "Editar Goto",
-        "EDIT_GOTOIF": "Editar GotoIf",
-        "EDIT_GOTOIf": "Editar GotoIf",
-        "EDIT_GOTOP": "Editar Gotop",
+        "EDIT_GOTO": "Edit Goto",
+        "EDIT_GOTOIF": "Edit GotoIf",
+        "EDIT_GOTOIf": "Edit Gotoif",
+        "EDIT_GOTOP": "Edit Gotop",
         "EDIT_MESSAGE": "Editar mensaje",
         "EDIT_NOOP": "Editar Noop",
         "EDIT_QUEUE": "Editar cola",
         "EMAIL_PLACEHOLDER": "Marcador de entrada de correo electrónico",
         "EMAIL_TITLE": "Etiqueta de entrada de correo electrónico",
         "EMBEDDING": "Incrustar",
-        "ENABLECUSTOMERATTACHMENT": "Habilitar los datos adjuntos del cliente",
+        "ENABLECUSTOMERATTACHMENT": "Habilitar Datos Adjuntos del Cliente",
         "ENABLECUSTOMERWRITING": "Permita que el cliente escriba antes de que el agente acepte",
         "ENABLEFEEDBACK": "Habilitar comentarios",
         "ENABLERATING": "Habilitar calificación",
         "ENABLEUNMANAGEDNOTE": "Habilitar mensaje no administrado",
-        "ENQUIRY": "Investigación",
+        "ENQUIRY": "Consulta",
         "ENQUIRY_BUTTON": "Texto del botón de consulta",
-        "ENQUIRY_ENABLE": "Habilitación de consulta",
+        "ENQUIRY_ENABLE": "Habilitar Consulta",
         "ENQUIRY_FORWARDING": "Solicitud de reenvío",
         "ENQUIRY_FORWARDING_ADDRESS": "Dirección de reenvío de consulta",
-        "ENQUIRY_MESSAGE_PLACEHOLDER": "Mensaje de pregunta Entrada Placeholder",
+        "ENQUIRY_MESSAGE_PLACEHOLDER": "Marcador de Mensaje de Entrada",
         "FALSEPRIORITY": "Falsa prioridad",
         "FAX": "Fax",
         "FIDELITY": "Fidelidad",
         "FORWARD_OFFLINE_ADDRESS": "Dirección fuera de línea",
         "FULLNAME": "Nombre completo",
         "GENERAL": "General",
-        "GOTO": "Ir",
-        "GOTOIF": "Ir aIf",
-        "GOTOP": "Ve arriba",
-        "GOTOREALTIME_CHATQUEUE": "Ir a cola de chat en tiempo real",
+        "GOTO": "Goto",
+        "GOTOIF": "GotoIf",
+        "GOTOP": "GotoP",
+        "GOTOREALTIME_CHATQUEUE": "Ir a Cola de Chat en Tempo Real",
         "HEADERSHAPE": "Forma del encabezado",
         "HEADER_OFFLINE": "Encabezado fuera de línea",
         "HEADER_ONLINE": "Encabezado en línea",
         "HIDEWHENOFFLINE": "Esconder",
         "ID": "Id",
-        "IDLE": "Ocioso",
+        "IDLE": "Inactivo",
         "INFO": "Información",
-        "INSERT_MESSAGE_HERE": "Inserta tu mensaje de texto aquí",
+        "INSERT_MESSAGE_HERE": "Inserta su mensaje de texto aquí",
         "INTERACTION": "Interacción",
         "INTERACTIONS": "Interacciones",
         "INTERACTIONS_CHATWEBSITE": "Ir a Interacciones",
         "MAINCOLOR": "Color principal",
         "MESSAGE": "Mensaje",
         "MESSAGE_TITLE": "Etiqueta de mensaje",
-        "MOTIONADDRESS": "Sitio web de dominio",
+        "MOTIONADDRESS": "Dominio Sitio Web",
         "MOTIONPROXY": "Dominio proxy o Motion",
         "MOUSEOVER": "Ratón sobre",
         "NAME": "Nombre",
         "NOTES": "Notas",
         "NOTETITLE": "Título de la nota",
         "NOTIFICATION": "Notificación",
-        "NOTIFICATIONSHAKE": "Sacudir",
+        "NOTIFICATIONSHAKE": "Vibrar",
         "NOTIFICATIONSOUND": "Sonar",
         "NOTIFICATIONTEMPLATE": "Modelo",
         "NOT_INUSE": "No esta en uso",
         "QUEUE": "Cola",
         "QUEUES": "Colas",
         "RATING": "Clasificación",
-        "RATINGSTARSNUMBER": "Estrellas de calificación Número",
+        "RATINGSTARSNUMBER": "Numero de Estrellas de Calificación",
         "RATINGSTATE": "Estado de calificación",
         "RATINGTYPE": "Tipo de clasificación",
         "RATING_MESSAGE": "Mensaje de clasificación",
         "REJECTURL": "Rechazar URL",
         "ROUNDED": "Redondeado",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "Salvar",
-        "SCRIPT": "Guión",
+        "SAVE": "Guardar",
+        "SCRIPT": "Guion",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SELECTED": "Seleccionado",
         "SELECTED_AGENTS": "Agentes seleccionados",
         "SENDUNMANAGED": "Enviar mensaje",
         "SETTINGS": "Configuraciones",
         "SHOWAGENTAVATAR": "Mostrar avatar de agente personal",
-        "SHOW_OFFLINEMESSAGE": "Espectáculo",
+        "SHOW_OFFLINEMESSAGE": "Mostrar",
         "SKIPMESSAGEBUTTON": "Saltar el botón de mensaje",
         "SKIPUNMANAGED": "Omitir mensaje",
         "SMS": "SMS",
         "TEXT": "Texto",
         "TEXTCOLOR": "Color de texto",
         "TIMEOUT": "Se acabó el tiempo",
-        "TIMER": "Minutero",
+        "TIMER": "Temporizador",
         "TIMES": "Cantidad de veces por interacción",
         "TIMEZONE": "Zona horaria",
         "TOKEN": "Simbólico",
         "TRUEPRIORITY": "Verdadera prioridad",
         "TYPE": "Tipo",
-        "UNAVAILABLE": "Indisponible",
+        "UNAVAILABLE": "No Disponible",
         "UNKNOWN": "Desconocido",
         "UNMANAGEDMESSAGE": "Mensaje",
         "UNMANAGEDSTATUS": "Estado no administrado",
         "WEBSCRIPT": "Web Script",
         "WEBSITE": "Sitio web",
         "WEBSITEALIAS": "Alias \200b\200bdel sitio web",
-        "WEBSITESCRIPT": "Guion del sitio",
+        "WEBSITESCRIPT": "Guion del Sitio WEB",
         "WHITELABEL": "Etiqueta blanca",
         "WRITING": "Escritura",
         "AGENTALIAS": "Agente Alias",
         "AGENTFULLNAME": "Nombre completo del agente",
         "AGENTIDENTIFIER": "Identificador",
-        "WAITFORTHEASSIGNEDAGENT": "Espere al agente asignado",
+        "WAITFORTHEASSIGNEDAGENT": "Esperar agente asignado",
         "ALIGNMENT": "Alineación",
         "BOTTOM_RIGHT": "Abajo a la derecha",
         "LEFT": "Izquierda",
         "POSITION": "Posición",
         "VERTICALPOSITION": "Posición vertical",
         "SNIPPETSWIPEOUT": "El fragmento se desliza hacia afuera",
-        "ALTERNATE": "Alterno",
+        "ALTERNATE": "Alternativo",
         "CENTERED": "Centrado",
         "CUSTOMERAVATAR": "Cliente Avatar",
         "DEFAULTTITLE": "Título predeterminado",
         "EDIT_TAG": "Editar etiqueta",
         "TAG": "Etiqueta",
         "AGENTADD_CHATWEBSITE": "Agregar agente al sitio web de chat",
-        "BACKGROUNDCOLOR": "Color de fondo",
+        "BACKGROUNDCOLOR": "Color del Fondo",
         "MESSAGEFONTSIZE": "Tamaño de fuente del mensaje",
         "AGENTTRANSFER": "Transferencia de agente",
-        "AGENTTRANSFERTIMEOUT": "Tiempo de espera de transferencia de agente",
+        "AGENTTRANSFERTIMEOUT": "Transferencia Agente Timeout",
         "DIALOGFLOW": "Flujo de diálogo",
         "EDIT_DIALOGFLOW": "Editar Dialogflow",
         "LANGUAGE": "Idioma",
index ad5d9f9..0cc52ad 100644 (file)
@@ -28,7 +28,7 @@
         "ALIAS": "Alias",
         "ALL_AGENTS": "Todos los agentes",
         "ALL_CONTACTS": "Todos los contactos",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "CAMPAIGNID": "ID de campaña",
         "CHECK_DUPLICATES": "Verificar duplicados",
         "CITY": "Ciudad",
@@ -50,7 +50,7 @@
         "DELETE_CONTACT": "Borrar contacto",
         "DELETE_CUSTOMFIELD": "Eliminar campo personalizado",
         "DELETE_GLOBALCUSTOMFIELD": "Eliminar campo personalizado",
-        "DELETE_HOPPER": "Eliminar tolva",
+        "DELETE_HOPPER": "Eliminar Contenedor",
         "DELETE_LIST": "Eliminar lista",
         "DELETE_VOICEDISPOSITION": "Eliminar la disposición de voz",
         "DESCRIPTION": "Descripción",
@@ -63,7 +63,7 @@
         "EDIT_CONTACT": "Editar contacto",
         "EDIT_CUSTOMFIELD": "Editar campo personalizado",
         "EDIT_GLOBALCUSTOMFIELD": "Editar campo personalizado",
-        "EDIT_HOPPER": "Editar tolva",
+        "EDIT_HOPPER": "Editar Contenador",
         "EDIT_LIST": "Lista de edición",
         "EDIT_VOICEDISPOSITION": "Editar Disposición de Voz",
         "EMAIL": "Email",
@@ -71,7 +71,7 @@
         "ENDTIME": "Hora de finalización",
         "EXPORTCSVCONTACTS_LIST": "Exportar a CSV",
         "EXPORT_ERRORS": "Errores de exportación",
-        "FAILURE": "Fracaso",
+        "FAILURE": "Fallo",
         "FAX": "Fax",
         "FEWER_FIELDS": "Mostrar menos campos",
         "FINAL": "Hopper Final",
@@ -85,7 +85,7 @@
         "GOTO_COMPANY": "Mostrar contactos",
         "GOTO_LIST": "Mostrar contactos",
         "HISTORY": "Historia de Hopper",
-        "HOPPER": "Tolva",
+        "HOPPER": "Contenedor",
         "ID": "Id",
         "IMPORT_CONTACTS": "Importar contactos",
         "JSCRIPTY": "Jscripty",
         "NO_AVAILABLE_ITEMS": "No hay elementos disponibles",
         "NO_COMPANIES": "Sin empresas",
         "NO_CUSTOMFIELD_AVAILABLE": "No hay campos personalizados disponibles",
-        "NO_TAG": "No etiquetas",
+        "NO_TAG": "Sin etiquetas",
         "NO_VOICEDISPOSITION_AVAILABLE": "No hay Disposiciones de voz disponibles",
         "OF": "de",
         "PAGE": "Página",
         "PRIORITY": "Prioridad",
         "PROJECT": "Proyecto",
         "RELOAD": "Recargar",
-        "REQUIRED": "Necesario",
+        "REQUIRED": "Requerido",
         "ROW": "Fila",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SCHEDULEDAT": "Programado en",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SELECTED": "Seleccionado",
         "STATUS": "Estado",
         "STOP": "Detener",
         "STREET": "Calle",
-        "SUCCESS": "Éxito",
+        "SUCCESS": "Exitoso",
         "TAG": "Etiqueta",
         "TAGS": "Etiquetas",
         "TYPE": "Tipo",
-        "UNIQUEID": "Identificación única",
+        "UNIQUEID": "Identificación Unica",
         "UPLOAD": "Subir",
-        "UPLOAD_COMPLETED": "Subir completado",
-        "UPLOAD_CONTACTS": "Subir contactos",
-        "UPLOAD_CSV": "Subir CSV",
+        "UPLOAD_COMPLETED": "Carga Completada",
+        "UPLOAD_CONTACTS": "Cargar Contactos",
+        "UPLOAD_CSV": "Cargar CSV",
         "USERID": "Llamar a la identificación del agente",
         "VALUE": "Valor",
-        "VAT": "TINA",
+        "VAT": "IVA",
         "VOICEDISPOSITIONS": "Disposiciones de voz",
-        "VOICEQUEUEID": "ID de VoiceQueue",
+        "VOICEQUEUEID": "ID de Cola de Voz",
         "WEBSITE": "Sitio web",
         "CUSTOMER_JOURNEY": "Viaje del cliente",
         "SELECT_TAG": "Seleccionar etiquetas"
index 264f4be..65dd31e 100644 (file)
@@ -6,34 +6,34 @@
         "SMS": "Sms",
         "OPENCHANNEL": "Open Channel",
         "FAX": "Fax",
-        "RATING": "Rating",
+        "RATING": "Clasificación",
         "FEEDBACK": "Comentarios",
         "SUBJECT": "Asunto",
         "CUSTOMER_IP": "IP del cliente",
         "REFERER": "Referer",
         "ACCOUNT": "Cuenta",
         "WEBSITE": "Sitio web",
-        "AGENT": "Agent",
+        "AGENT": "Agente",
         "CREATED_AT": "Creado en",
         "CLOSED_AT": "Cerrado a",
         "DISPOSITION": "Disposición",
         "CONTACT": "Contacto",
         "INTERACTION": "Interacción",
-        "BROWSER_NAME": "Nombre del explorador",
+        "BROWSER_NAME": "Nombre del Navegador",
         "BROWSER_VERSION": "Versión del navegador",
         "OS_NAME": "Nombre del sistema operativo",
         "OS_VERSION": "Versión del sistema operativo",
         "DEVICE_MODEL": "Modelo de dispositivo",
         "DEVICE_VENDOR": "Proveedor del dispositivo",
         "DEVICE_TYPE": "Tipo de dispositivo",
-        "RECALLME": "Me recuerdo",
-        "DROP_RATE": "Tasa de caída",
-        "DROPPED": "Descendido",
-        "DROPPED_TEXT": "Cayó la cola de llamadas",
+        "RECALLME": "Recordar",
+        "DROP_RATE": "Tasa de Llamadas Asignadas a Colas",
+        "DROPPED": "Asignado",
+        "DROPPED_TEXT": "Llamadas Asignadas a Colas",
         "DETAIL": "Detalle",
         "MOTION_BULL": "Motion Bull",
-        "LIMITED": "Limited",
-        "LIMITED_TEXT": "Las llamadas que se realizan campañas/Limited",
+        "LIMITED": "Limite",
+        "LIMITED_TEXT": "Campaña IVR Realizadas/Limit",
         "DASHBOARDS": "Cuadro de Mando",
         "RECORDINGS": "Grabaciones",
         "TODAY_MOTION_BULL_STATS": "Estadística Diaria Campañas Bull",
         "UPDATE": "Actualizar",
         "MORE": "Más",
         "MOTIONDIALER": "Motion Bull",
-        "DISPOSE": "Deseche",
+        "DISPOSE": "Disponer",
         "QUEUES": "Colas",
-        "DIALER_CALL": "Llamada por marcador",
+        "DIALER_CALL": "Numero Marcado",
         "ELAPSED_TIME": "Tiempo transcurrido",
         "EDIT": "Editar",
         "MERGE": "Combinar",
         "DUPLICATE": "Duplicar",
-        "UNIQUEID": "Uniqueid",
+        "UNIQUEID": "ID Único",
         "CAMPAIGN": "Campaña",
         "NONE": "Ninguno",
         "NAME": "Nombre",
         "ANSWER_MACHINE": "Contestador",
         "INTERESTED": "Interesados",
-        "NOT_INTERESTED": "No interesa",
+        "NOT_INTERESTED": "No Interesado",
         "PERSONAL_INFO": "Información personal",
-        "SOLD": "Se vende",
+        "SOLD": "Vendido",
         "SPECIAL": "Especial",
         "BLACKLIST": "Lista negra",
         "RESCHEDULE": "Reprogramar",
-        "FIRSTNAME": "Firstname",
-        "LASTNAME": "Lastname",
-        "MOBILE": "Mobile",
+        "FIRSTNAME": "Primer Nombre",
+        "LASTNAME": "Apellido",
+        "MOBILE": "Celular",
         "DATE_OF_BIRTH": "Fecha de nacimiento",
         "COMPANY": "Compañía",
         "TAG": "Tag",
         "COUNTRY": "País",
         "CITY": "Ciudad",
-        "STREET": "Street",
+        "STREET": "Calle",
         "POSTALCODE": "Código postal",
         "CUSTOM_FIELDS": "Campos personalizados",
         "GENERAL": "General",
         "VOICE": "Voz",
         "TODAY_IVR_CAMPAIGNS_STATS": "Estadística Diaria Campañas Ivr",
-        "TODAY_INBOUND_STATS": "Estadística Diaria de Entrantes",
-        "TODAY_OUTBOUND_STATS": "Estadística Diaria de Salientes",
+        "TODAY_INBOUND_STATS": "Estadística Diaria Llamadas Entrantes",
+        "TODAY_OUTBOUND_STATS": "Estadística Diaria de Llamadas Salientes",
         "WAITING": "Esperando",
         "TALKING": "Hablando",
         "INBOUND_ANSWERED": "Contestadas",
         "INBOUND_ANSWER_RATE": "Tasa de respuesta",
         "OUTBOUND_ANSWER_RATE": "Tasa de respuesta",
         "ABANDON_RATE": "Índice de abandono",
-        "UNMANAGED": "Unmanaged",
+        "UNMANAGED": "No Administrado",
         "TOTAL": "Total",
         "TOT_DURATION": "Duración total",
         "AVG_DURATION": "Duración media",
         "HELP": {
-            "ORIGINATEDLIMITED": "Las llamadas que se realizan campañas/Limited",
+            "ORIGINATEDLIMITED": "Llamadas de Campañas de IVR",
             "DROPPED": "El número total de llamadas de cola cayó, considerando todas las colas creadas.",
             "DROP_RATE": "La tasa de caída de todas las llamadas de la cola",
             "WAITING": "El número total de llamadas de la cola de espera, considerando todas las colas creadas",
-            "OUTBOUND_ANSWERED": "Completado el número total de llamadas salientes",
+            "OUTBOUND_ANSWERED": "Tasa de Todas las Llamadas Salientes",
             "ABANDONED": "El número total de llamadas abandonadas en cola, considerando todas las colas creadas. Tenga en cuenta que las llamadas abandonadas por timeout y joinempty no cuentan en este valor",
             "TOTAL_OFFERED": "El número total de llamadas de cola (completado) abandonados. Tenga en cuenta que las llamadas que se terminó en el IVR, sin entrar en la cola, no se cuentan en este valor",
             "AVG_HOLD_TIME": "El promedio de tiempo de espera de cola, que representa la media hora de la llamada que se dedica a la espera de una respuesta del agente, considerando todas las colas",
-            "OUTBOUND_ANSWER_RATE": "La tasa de respuesta de todas las llamadas salientes",
+            "OUTBOUND_ANSWER_RATE": "Tasa de Todas las Llamadas Salientes Contestadas",
             "ABANDON_RATE": "El índice de abandono de toda la cola de llamadas",
             "UNMANAGED": "El número total de llamadas de cola no administrado, considerando todas las colas creadas. Incluye las llamadas abandonadas de timeout, y exitwithkey leavewhenempty joinempty,",
             "TOTAL": "El número total de llamadas salientes",
         "WELCOME_TO_MOTION": "Bienvenido a Motion",
         "WELCOME_MESSAGE": "Utilice la barra lateral izquierda para navegar a través de las secciones.",
         "ADD": "Agregar",
-        "CONTACTMANAGER": "Contact Manager",
+        "CONTACTMANAGER": "Contacto Encargado",
         "DASHBOARD": "Cuadro de Mando",
         "EDIT_CONTACT": "Editar contacto",
         "EMAIL": "Correo electrónico",
-        "FULLNAME": "Fullname",
+        "FULLNAME": "Nombre Completo",
         "LIST": "Lista",
         "NEW_CONTACT": "Nuevo contacto",
         "PHONE": "Teléfono",
         "SAVE": "Guardar",
-        "INBOUND_WAITING_CALLS": "Esperando llamadas entrantes",
+        "INBOUND_WAITING_CALLS": "Llamadas en Espera Entrantes",
         "CONTACTS": "Contactos",
         "MYCONTACTS": "Mis contactos",
         "ADD_CONTACT": "Agregar contacto",
         "RELOAD": "Recargar",
-        "WAITING_TEXT": "Cola de espera de llamadas",
-        "TALKING_TEXT": "Las llamadas de la cola activa",
-        "INBOUND_ANSWERED_TEXT": "Cola de llamadas contestadas",
+        "WAITING_TEXT": "Esperando Interacción",
+        "TALKING_TEXT": "Llamadas Activas en Cola",
+        "INBOUND_ANSWERED_TEXT": "Llamadas de Colas Contestadas",
         "ABANDONED_TEXT": "Las llamadas abandonadas en cola",
-        "DROP_RATE_TEXT": "La tasa de caída de llamadas de cola",
-        "TOTAL_OFFERED_TEXT": "Llamadas en cola total",
+        "DROP_RATE_TEXT": "Tasa de Asignación",
+        "TOTAL_OFFERED_TEXT": "Total Llamadas en Cola",
         "AVG_HOLD_TIME_TEXT": "Tiempo promedio en espera: Llamadas de cola",
-        "AVG_TALK_TIME_TEXT": "Tiempo de conversación de las llamadas de la cola",
-        "INBOUND_ANSWER_RATE_TEXT": "La tasa de respuesta de llamadas de cola",
-        "UNMANAGED_TEXT": "Llamadas de cola no administrado",
-        "TOTAL_TEXT": "Total de llamadas salientes",
-        "OUTBOUND_ANSWERED_TEXT": "Contestaron las llamadas salientes",
+        "AVG_TALK_TIME_TEXT": "Tiempo de Conversación de Cola de Llamadas",
+        "INBOUND_ANSWER_RATE_TEXT": "Tasa de Respuesta de Llamadas de Cola",
+        "UNMANAGED_TEXT": "Interacciones No Administradas",
+        "TOTAL_TEXT": "Total Llamadas Salientes",
+        "OUTBOUND_ANSWERED_TEXT": "Llamadas Salientes Contestadas",
         "TOT_DURATION_TEXT": "Duración total de llamadas salientes",
         "AVG_DURATION_TEXT": "Duración promedio de llamadas salientes",
-        "OUTBOUND_ANSWER_RATE_TEXT": "La tasa de respuesta de llamadas salientes",
+        "OUTBOUND_ANSWER_RATE_TEXT": "Tasa de Llamadas Salientes Contestadas",
         "PAGE": "Página",
         "ROWSPERPAGE": "Filas por página",
         "OF": "De",
-        "REPLY_PLACEHOLDER": "Escriba y pulse Intro para enviar un mensaje",
+        "REPLY_PLACEHOLDER": "Escriba y pulse entre para enviar un mensaje",
         "CONTACT_INFO": "Información de contacto",
-        "CLOSE_AND_DISPOSE": "Close y Dispose.",
+        "CLOSE_AND_DISPOSE": "Cerrar y Disponer",
         "DISPOSITIONS": "Disposiciones",
-        "CLOSE_WITHOUT_DISPOSE": "Cerrar sin disponer",
+        "CLOSE_WITHOUT_DISPOSE": "Cerrar sin Disponer",
         "ACCEPT": "Aceptar",
         "REJECT": "Rechazar",
         "CLOSED": "Cerrado",
         "NO_JSCRIPTY_PROJECTS_AVAILABLE": "No Jscripty proyectos disponibles",
         "OPENED": "Abrir",
         "FILTER": "Filtrar",
-        "SELECT_STATUS": "Seleccione Estado",
+        "SELECT_STATUS": "Seleccionar Estado",
         "SELECT_ACCOUNT": "Seleccione Cuenta",
-        "SELECT_WEBSITE": "Seleccione Sitio Web",
+        "SELECT_WEBSITE": "Seleccionar Sitio Web",
         "ALL": "Todos",
         "INTERACTIONS": "Interacciones",
         "STARTEDAT": "Comenzó a",
-        "STATUS": "El estado",
+        "STATUS": "Estado",
         "OPEN": "Abrir",
         "SHOW": "Mostrar",
         "ME": "Yo",
         "NOT_ASSIGNED": "No asignada",
         "UNKNOWN": "Desconocida",
-        "SELECT_USER": "Seleccione un usuario",
+        "SELECT_USER": "Seleccionar un Usuario",
         "LAST_MESSAGE": "Último mensaje",
         "USER": "Usuario",
         "TAGS": "Tags",
         "PENDING": "Pendiente",
         "CANNED_ANSWER_NOT_FOUND": "No se encontraron respuestas enlatadas",
         "CANNED_ANSWER_SEARCH": "Introduzca un texto para buscar una respuesta enlatada",
-        "NO_MAIL_ACCOUNTS_AVAILABLE": "No hay ninguna cuenta de correo electrónico disponible",
+        "NO_MAIL_ACCOUNTS_AVAILABLE": "Correo Electrónico No Disponible",
         "NO_FAX_ACCOUNTS_AVAILABLE": "No se dispone de cuentas de fax",
         "NO_SMS_ACCOUNTS_AVAILABLE": "No hay cuentas SMS disponible",
         "FILTER_VOICE_QUEUES": "Filtrar colas de voz",
         "THU": "Jue",
         "FRI": "Vie",
         "SAT": "Sab",
-        "SUN": "Sol",
+        "SUN": "Dom",
         "DELETE": "Borrar",
         "LAST_3_DAYS": "Últimos 3 días",
         "LAST_YEAR": "El año pasado",
         "THIS_YEAR": "Este año",
-        "LAST_MONTH": "El mes pasado",
+        "LAST_MONTH": "El Mes Masado",
         "THIS_MONTH": "Este mes",
         "LAST_WEEK": "La semana pasada",
         "THIS_WEEK": "Esta semana",
         "YESTERDAY": "Ayer",
         "TODAY": "Hoy",
-        "SELECT_DATE": "Seleccione la fecha de inicio",
+        "SELECT_DATE": "Seleccione Fecha de Inicio",
         "SELECT_DATE_RANGE": "Seleccionar rango de fechas",
         "CLEAR": "Claro",
         "CALL_NUMBER": "Llamada",
         "MARK_AS_UNREAD": "marcar como no leído",
         "SELECT_AGENT": "Seleccionar agente",
         "READ": "Leer",
-        "SELECT_READ_UNREAD": "Seleccione Leer / No leído",
-        "SELECT_SUBSTATUS": "Seleccione Substatus",
+        "SELECT_READ_UNREAD": "Seleccionar leído / No leído",
+        "SELECT_SUBSTATUS": "Seleccionar Sub Estado",
         "UNREAD": "No leído",
         "ABANDONAT": "Abandonado",
         "ABANDONEDQUEUECALLS": "Llamadas abandonadas",
-        "FREE": "Gratis",
+        "FREE": "Libre",
         "LASTASSIGNEDTO": "Último asignado a",
         "QUEUE": "Cola",
-        "QUEUECALLEREXITAT": "Caído",
+        "QUEUECALLEREXITAT": "Asignado",
         "QUEUECALLEREXITREASON": "Razón",
         "RESERVED": "Reservado",
         "SELECT_CAMPAIGN": "Seleccione una cola",
         "AVG_MANAGED_TIME": "Tiempo de gestión de AVG",
         "AVG_MANAGED_TIME_TEXT": "Interacciones AVG Management Time",
         "MANAGED": "Administrado",
-        "MANAGED_RATE": "Tasa administrada",
+        "MANAGED_RATE": "Tasa de Interacciones Administrada",
         "MANAGED_RATE_TEXT": "Interacciones de tarifa administrada",
         "MANAGED_TEXT": "Interacciones Gestionadas",
         "OPENED_TEXT": "Interacciones abiertas",
-        "TODAY_INTERACTIONS_STATS": "Interacciones estadísticas diarias",
-        "UNMANAGED_RATE": "Tarifa no administrada",
-        "UNMANAGED_RATE_TEXT": "Interacciones tasa no gestionada",
+        "TODAY_INTERACTIONS_STATS": "Estadísticas Diarias Interacciones",
+        "UNMANAGED_RATE": "Tasa No Administrada",
+        "UNMANAGED_RATE_TEXT": "Tasa Interacciones No Gestionadas",
         "VOICE_ABANDONED": "ABANDONADO",
         "VOICE_ABANDONED_TEXT": "LLAMADAS DE COLA ABANDONADAS",
         "VOICE_ABANDON_RATE": "TASA DE ABANDON",
-        "VOICE_ABANDON_RATE_TEXT": "TASA DE LLAMADA ABANDON TARIFA",
+        "VOICE_ABANDON_RATE_TEXT": "TASA DE LLAMADA ABANDONADAS",
         "VOICE_ANSWERED": "CONTESTADO",
-        "VOICE_ANSWERED_TEXT": "Llamadas de cola contestadas",
-        "VOICE_ANSWER_RATE": "TASA DE RESPUESTA",
-        "VOICE_ANSWER_RATE_TEXT": "TASA DE LLAMADAS RESPUESTA TARIFA",
-        "VOICE_AVG_HOLD_TIME": "Tiempo promedio de espera",
-        "VOICE_AVG_HOLD_TIME_TEXT": "QUEUE CALLS AVG HOLD TIME",
-        "VOICE_AVG_TALK_TIME": "TIEMPO MEDIO DE HABLAR",
-        "VOICE_AVG_TALK_TIME_TEXT": "LLAMADAS QUEUE HABLAR HORA",
+        "VOICE_ANSWERED_TEXT": "LLAMADAS CONTESTADAS COLA",
+        "VOICE_ANSWER_RATE": "TASA DE LLAMADAS RESPONDIDAS",
+        "VOICE_ANSWER_RATE_TEXT": "COLA TASA DE LLAMADAS RESPONDIDAS",
+        "VOICE_AVG_HOLD_TIME": "PROMEDIO TIEMPO EN ESPERA",
+        "VOICE_AVG_HOLD_TIME_TEXT": "PROMEDIO AVG TIEMPO EN ESPERA",
+        "VOICE_AVG_TALK_TIME": "PROMEDIO DE LLAMADA",
+        "VOICE_AVG_TALK_TIME_TEXT": "COLA PROMEDIO DE LLAMADA",
         "VOICE_TALKING": "HABLANDO",
-        "VOICE_TALKING_TEXT": "LLAMADAS DE COLA ACTIVA",
+        "VOICE_TALKING_TEXT": "COLA LLAMADAS ACTIVAS",
         "VOICE_TOTAL_OFFERED": "TOTAL OFRECIDO",
-        "VOICE_TOTAL_OFFERED_TEXT": "LLAMADAS DE COLAS TOTALES",
-        "VOICE_UNMANAGED": "UNMANAGED",
-        "VOICE_UNMANAGED_TEXT": "LLAMADAS QUEJAS NO MANEJADAS",
+        "VOICE_TOTAL_OFFERED_TEXT": "COLAS TOTAL LLAMADAS",
+        "VOICE_UNMANAGED": "NO ADMINISTRADO",
+        "VOICE_UNMANAGED_TEXT": "COLAS NO ADMINISTRADAS",
         "VOICE_WAITING": "ESPERANDO",
-        "VOICE_WAITING_TEXT": "LLAMADAS EN ESPERA EN ESPERA",
+        "VOICE_WAITING_TEXT": "COLAS LLAMADAS EN ESPERA",
         "DOWNLOAD": "Descargar",
         "SCHEDULED_CALLS": "Llamadas programadas",
         "PRIVATE": "Privado",
         "PUBLIC_INTERACTION": "La interacción es pública.",
         "VISIBILITY": "Visibilidad",
         "INTERACTION_CLOSED": "Interacción correctamente cerrada",
-        "INTERACTION_CLOSED_DISPOSED": "Interacción debidamente cerrada y desechada",
+        "INTERACTION_CLOSED_DISPOSED": "Interacción debidamente cerrada y disponibles",
         "INTERACTION_DISPOSED": "Interacción adecuadamente eliminada"
     }
 }
\ No newline at end of file
index fb293f0..5f35888 100644 (file)
@@ -66,7 +66,7 @@
         "ACCEPTURL": "Aceptar URL",
         "ACCOUNT": "Cuenta",
         "ACCOUNTS": "Cuentas",
-        "ACTIONS": "Comportamiento",
+        "ACTIONS": "Acciones",
         "ADD_FAXACCOUNT": "Añadir cuenta de fax",
         "ADD_FAXCANNEDANSWER": "Agregar respuesta enlatada",
         "ADD_FAXDISPOSITION": "Agregar disposición de fax",
         "AGENTADD_QUEUE": "Añadir cola de agente a fax",
         "AGENTS": "Agentes",
         "AGENTSADD_QUEUE": "Agregar agentes a la cola de fax",
-        "AGENT_TIMEOUT": "Tiempo de espera del agente",
+        "AGENT_TIMEOUT": "Timeout del Agente",
         "ALL": "Todas",
         "ALL_AGENTS": "Todos los agentes",
         "ALL_TEAMS": "Todos los equipos",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BUSY": "Ocupado",
         "CAPACITY": "Capacidad",
         "CHAT": "Chat",
-        "CLOSE": "Cerca",
+        "CLOSE": "Cerrar",
         "CLOSED": "Cerrado",
         "CLOSEDAT": "Cerrado en",
-        "CLOSEMETHOD": "Método cercano",
+        "CLOSEMETHOD": "Método Cerrado",
         "CLOSEURL": "Cerrar URL",
-        "COMMAND": "Mando",
+        "COMMAND": "Comando",
         "CONDITION": "Condición",
         "CONTACT": "Contacto",
         "CREATED_AT": "Creado en",
         "DEFAULT_PAUSE": "Pausa por defecto",
         "DELETE": "Borrar",
-        "DELETE_CHATCANNEDANSWER": "Eliminar la respuesta almacenada",
+        "DELETE_CHATCANNEDANSWER": "Eliminar la  Respuesta Almacenada",
         "DELETE_FAXACCOUNT": "Borrar cuenta de fax",
-        "DELETE_FAXDISPOSITION": "Eliminar la disposición del fax",
+        "DELETE_FAXDISPOSITION": "Eliminar Disposición de Fax",
         "DELETE_FAXQUEUE": "Eliminar cola de fax",
         "DELETE_INTERACTION": "Eliminar interacción",
         "DESCRIPTION": "Descripción",
-        "DISPOSITION": "Disposición",
+        "DISPOSITION": "Disposiciones",
         "DISPOSITIONS": "Plan",
         "ECM": "ECM",
         "EDIT_ACCOUNT": "Editar cuenta de fax",
         "FILTER": "Filtrar",
         "FROM": "De",
         "FULLNAME": "Nombre completo",
-        "GATEWAY": "Puerta",
+        "GATEWAY": "Gateway",
         "GENERAL": "General",
-        "GOTOIF": "Ir aIf",
-        "GOTOP": "Ve arriba",
+        "GOTOIF": "GotoIf",
+        "GOTOP": "GotoP",
         "GOTOREALTIME_FAXACCOUNT": "Ir a fax en tiempo real",
         "GOTOREALTIME_FAXQUEUE": "Ir a cola de fax en tiempo real",
         "GOTO_FAXACCOUNT": "Ir a fax en tiempo real",
         "HEADERINFO": "Información del encabezado",
         "ID": "Id",
-        "IDLE": "Ocioso",
+        "IDLE": "Disponible",
         "IN": "En",
         "INFO": "Información",
         "INTERACTIONS": "Interacciones",
         "MAXRATE": "Máxima calificación",
         "MINRATE": "Tasa mínima",
         "MODEM": "Módem",
-        "MOTIONADDRESS": "Motion Address",
+        "MOTIONADDRESS": "Dirección Motion",
         "NAME": "Nombre",
         "NEW_FAXACCOUNT": "Nueva cuenta de fax",
         "NEW_FAXCANNEDANSWER": "Nueva respuesta enlatada",
         "NOOP": "Noop",
         "NOTES": "Notas",
         "NOTIFICATION": "Notificación",
-        "NOTIFICATIONSHAKE": "Sacudir",
+        "NOTIFICATIONSHAKE": "Vibrar",
         "NOTIFICATIONSOUND": "Sonar",
         "NOTIFICATIONTEMPLATE": "Modelo",
         "NOT_INUSE": "No esta en uso",
         "NO_REGISTRY": "Sin registro",
         "OF": "de",
         "OPENCHANNEL": "Canal abierto",
-        "OPENED": "Abrió",
+        "OPENED": "Abierto",
         "OUT": "Fuera",
         "PAGE": "Página",
         "PARTIALPAUSE": "Pausa parcial",
         "REJECTURL": "Rechazar URL",
         "REPLY": "Respuesta",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SELECTED": "Seleccionado",
         "SELECTED_AGENTS": "Agentes seleccionados",
         "T38TIMEOUT": "Tiempo de espera T.38",
         "TAGS": "Etiquetas",
         "TEAMADD_FAXQUEUE": "Agregar equipo a cola de fax",
-        "TIMEOUT": "Se acabó el tiempo",
-        "TIMER": "Minutero",
+        "TIMEOUT": "Timeout",
+        "TIMER": "Temporizador",
         "TO": "A",
         "TOTAL": "Total",
         "TRUEPRIORITY": "Verdadera prioridad",
-        "TRUNK": "Truncal",
-        "TRUNKS": "Truncal",
-        "TRUNK_STATUS": "Estado del truncal",
-        "UNAVAILABLE": "Indisponible",
+        "TRUNK": "Troncal",
+        "TRUNKS": "Troncal",
+        "TRUNK_STATUS": "Estado de Troncal",
+        "UNAVAILABLE": "No Disponible",
         "UNKNOWN": "Desconocido",
         "UNPAUSE": "Fin de pausa",
         "UNREGISTERED": "No registrado",
         "EDIT_TAG": "Editar etiqueta",
         "TAG": "Etiqueta",
         "AGENTADD_FAXACCOUNT": "Agregar agente a cuenta de fax",
-        "AGENTTRANSFER": "Transferencia de agente",
-        "AGENTTRANSFERTIMEOUT": "Tiempo de espera de transferencia de agente",
+        "AGENTTRANSFER": "Transferencia Agente",
+        "AGENTTRANSFERTIMEOUT": "Timeout de Transferencia de Agente",
         "QUEUETRANSFER": "Transferencia de cola",
         "QUEUETRANSFERTIMEOUT": "Tiempo de espera de transferencia de cola",
         "TRANSFER": "Transferir",
index 7a99740..6e3f9ac 100644 (file)
         "FRESHDESKACCOUNTS": "Cuentas Freshdesk",
         "FRESHDESKCONFIGURATIONS": "Configuraciones Freshdesk",
         "GENERAL": "General",
-        "HOST": "Anfitrión",
+        "HOST": "Host",
         "ID": "Id",
         "INBOUND_IN_QUEUE": "Entrante en cola",
         "INTEGRATIONS": "Integraciones",
         "INTEGRATION_TAB": "Pestaña Integración",
         "KEY": "Llave",
         "MAIL": "Email",
-        "MODULE_CREATE": "Módulo Crear",
+        "MODULE_CREATE": "Crear Módulo",
         "MODULE_SEARCH": "Búsqueda de módulo",
-        "MOTIONPROXYADDRESS": "Address IP de Motion o proxy",
+        "MOTIONPROXYADDRESS": "Dirección IP de Motion o proxy",
         "NAME": "Nombre",
         "NEW_CONFIGURATION": "Nueva configuración",
         "NEW_DESCRIPTION": "Nueva descripción",
         "ROWSPERPAGE": "Filas por página",
         "SALESFORCEACCOUNTS": "Cuentas de Salesforce",
         "SALESFORCECONFIGURATIONS": "Configuraciones de Salesforce",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SECURITYTOKEN": "Token de seguridad",
         "SELECTED": "Seleccionado",
         "TEST_ZENDESKACCOUNT": "Pruebe la cuenta de Zendesk",
         "TEST_ZOHOACCOUNT": "Prueba Zoho Account",
         "TOKEN": "Simbólico",
-        "TOKENSECRET": "Token Secret",
+        "TOKENSECRET": "Token Secreto",
         "TYPE": "Tipo",
         "URI": "URL",
         "USERNAME": "Nombre de usuario",
index 0a2e3b7..a8a9718 100644 (file)
@@ -17,7 +17,7 @@
         "BACK": "Espalda",
         "BUILDER": "Constructor",
         "CALLERIDNUM": "Número de llamada",
-        "CLONE_PROJECT": "Proyecto Clon",
+        "CLONE_PROJECT": "Clonar Proyecto",
         "COMPLETE": "Completar",
         "CREATED_AT": "Creado en",
         "DELETE_PROJECT": "Eliminar proyecto",
     },
     "mwForm": {
         "form": {
-            "name": "Title",
-            "name.placeholder": "Form title",
-            "description": "Description"
+            "name": "Titulo",
+            "name.placeholder": "Titulo Formulario",
+            "description": "Descripción"
         },
         "buttons": {
-            "addPage": "Add page",
-            "moveDown": "Move down",
-            "moveUp": "Move up",
-            "removePage": "Remove page",
-            "remove": "Remove",
-            "addElement": "Add element",
-            "questionReady": "Ready",
-            "next": "Next",
-            "back": "Back",
-            "submit": "Submit",
-            "begin": "Begin",
-            "fold": "Fold",
-            "unfold": "Unfold",
-            "edit": "Edit",
-            "clone": "Clone",
-            "view": "View"
+            "addPage": "Agregar Pagina",
+            "moveDown": "Mover Abajo",
+            "moveUp": "Mover Arriba",
+            "removePage": "Eliminar Pagina",
+            "remove": "Eliminar",
+            "addElement": "Agregar Elemento",
+            "questionReady": "Listo",
+            "next": "Próximo",
+            "back": "Atrás",
+            "submit": "Enviar",
+            "begin": "Comenzar",
+            "fold": "Duplicar",
+            "unfold": "No Duplicar",
+            "edit": "Editar",
+            "clone": "Clonar",
+            "view": "Ver"
         },
         "page": {
             "tab": {
-                "heading": "Page {{page}} of {{allPages}}"
+                "heading": "Pagina {{page}} de {{allPages}}"
             },
             "elements": {
-                "empty": "Empty page"
+                "empty": "Empty"
             },
-            "pageWithNameCheckbox": "named",
-            "name": "Page name"
+            "pageWithNameCheckbox": "Nombrada",
+            "name": "Nombre Pagina"
         },
         "pageFlow": {
-            "afterPage": "After page {{page}}:",
-            "afterQuestionAnswer": "Go to page based on answer",
-            "goToPage": "Go to page {{page.number}}",
-            "goToNextPage": "Continue to next page",
-            "submitForm": "Submit form"
+            "afterPage": "Después de Pagina {{page}}:",
+            "afterQuestionAnswer": "Ir a pagina según en respuesta",
+            "goToPage": "Ir a Pagina {{page.number}}",
+            "goToNextPage": "Continúe a la siguiente pagina",
+            "submitForm": "Enviar Formulario"
         },
         "elements": {
-            "question": "Question",
-            "image": "Image",
-            "paragraph": "Paragraph"
+            "question": "Pregunta",
+            "image": "Imagen",
+            "paragraph": "Párrafo"
         },
         "question": {
             "types": {
                 "text": {
-                    "name": "Short text"
+                    "name": "Texto Corto"
                 },
                 "textarea": {
-                    "name": "Long text"
+                    "name": "Texto Largo"
                 },
                 "radio": {
                     "name": "Radio"
                 },
                 "select": {
-                    "name": "Select"
+                    "name": "Seleccionar"
                 },
                 "checkbox": {
                     "name": "Checkboxes"
                 },
                 "grid": {
-                    "name": "Grid"
+                    "name": "Cuadricula"
                 },
                 "priority": {
-                    "name": "Priority"
+                    "name": "Prioridad"
                 },
                 "division": {
-                    "name": "Division"
+                    "name": "División"
                 },
                 "number": {
-                    "name": "Number"
+                    "name": "Numero"
                 },
                 "date": {
-                    "name": "Date"
+                    "name": "Fecha"
                 },
                 "datetime": {
-                    "name": "Datetime"
+                    "name": "FechaTiempo"
                 },
                 "time": {
-                    "name": "Time"
+                    "name": "Tiempo"
                 },
                 "email": {
                     "name": "Email"
                 },
                 "range": {
-                    "name": "Range"
+                    "name": "Rango"
                 },
                 "url": {
                     "name": "URL"
                 }
             },
-            "text": "Question text",
-            "type": "Question type",
-            "required": "Required",
+            "text": "Texto Pregunta",
+            "type": "Tipo Pregunta",
+            "required": "Requerido",
             "preview": {
-                "text": "Short answer text",
-                "textarea": "Long answer text",
-                "otherAnswer": "Other"
+                "text": "Texto Respuesta Corta",
+                "textarea": "Texto Respuesta Larga",
+                "otherAnswer": "Otro:"
             },
             "division": {
-                "quantity": "Quantity",
-                "unit": "Unit label",
-                "assignedSumLabel": "Assigned",
-                "fromRequiredLabel": "from required"
+                "quantity": "Cantidad",
+                "unit": "Etiqueta de Unidad",
+                "assignedSumLabel": "Asignado",
+                "fromRequiredLabel": "Formulario Requerido"
             },
             "priority": {
-                "sorted": "Sorted",
-                "available": "Available",
-                "clickToAddItem": "Click to add item"
+                "sorted": "Ordenar",
+                "available": "Disponible",
+                "clickToAddItem": "Click para agregar"
             },
             "grid": {
-                "cellInputType": "Cell input type",
+                "cellInputType": "Tipo de Entrada de Celda",
                 "cellInputTypes": {
                     "radio": "Radio",
                     "checkbox": "Checkbox",
-                    "text": "Text",
-                    "number": "Number",
-                    "date": "Date",
-                    "time": "Time"
+                    "text": "Texto",
+                    "number": "Numero",
+                    "date": "Fecha",
+                    "time": "Tiempo"
                 },
-                "rowLabel": "Row {{row}}",
-                "clickToAddRow": "Click to add row",
-                "columnLabel": "Column {{col}}",
-                "clickToAddColumn": "Click to add column"
+                "rowLabel": "Fila {{row}}",
+                "clickToAddRow": "Click para agregar fila",
+                "columnLabel": "Columna {{col}}",
+                "clickToAddColumn": "Click para agregar columna"
             },
             "range": {
-                "from": "Range from",
-                "to": "to"
+                "from": "Rango Desde",
+                "to": "A"
             },
             "number": {
                 "min": "Min",
                 "max": "Max"
             },
-            "orLabel": "or ",
-            "otherLabel": "Other: ",
-            "userAnswer": "User answer",
+            "orLabel": "o ",
+            "otherLabel": "Otro: ",
+            "userAnswer": "Respuesta Usuario",
             "buttons": {
-                "addOption": "Click to add option",
-                "addOther": "Add 'Other'"
+                "addOption": "Click para agregar opción",
+                "addOther": "agregar 'Otro'"
             }
         },
         "image": {
-            "selectImageButton": "Select image",
-            "caption": "Image caption"
+            "selectImageButton": "Seleccionar Imagen",
+            "caption": "Captura de Imagen"
         },
         "paragraph": {
-            "placeholder": "Enter paragraph text"
+            "placeholder": "Introducir texto de párrafo"
         },
         "confirmationPage": {
-            "title": "Confirmation page",
-            "customMessage": "Custom confirmation message",
-            "defaultMessage": "Your response has been saved",
-            "errorMessage": "Error! Your response has not been saved",
-            "pendingMessage": "Your response is being saved."
+            "title": "Pagina Configuración",
+            "customMessage": "Configuración Mensaje Personalizado",
+            "defaultMessage": "Su respuesta ha sido guardada",
+            "errorMessage": "Error! su respuesta no ha sido guardada",
+            "pendingMessage": "Su respuesta ha sido guardada"
         }
     }
 }
\ No newline at end of file
index fb712f2..a625adf 100644 (file)
@@ -20,7 +20,7 @@
             "CLOSEURL_MUST_VALID_URL": "Formato erróneo",
             "COMMAND_REQUIRED": "Campo obligatorio",
             "CONDITION_REQUIRED": "Campo obligatorio",
-            "CONFIRM_NOT_MATCH": "Las contraseñas insertadas no coinciden",
+            "CONFIRM_NOT_MATCH": "Las contraseñas ingresadas no coinciden",
             "CONNTIMEOUT_REQUIRED": "Campo obligatorio",
             "DISPOSITION_REQUIRED": "Campo obligatorio",
             "EMAIL_ADDRESS_MUST_VALID": "Formato erróneo",
         "ADD_MAILDISPOSITION": "Agregar disposición de correo electrónico",
         "ADD_MAILQUEUE": "Agregar cola de correo electrónico",
         "ADD_MAILSUBSTATUS": "Agregar sub estado",
-        "ADD_NOTE": "Añadir la nota",
+        "ADD_NOTE": "Añadir Nota",
         "AGENT": "Agente",
         "AGENTADD_MAILQUEUE": "Agregar agente a cola de correo electrónico",
         "AGENTADD_QUEUE": "Agregar agente a la cola de correo electrónico",
         "AGENTS": "Agentes",
         "AGENTSADD_QUEUE": "Agregar agentes a la cola de correo electrónico",
         "AGENT_TIMEOUT": "Tiempo de espera del agente",
-        "ALL": "Todas",
+        "ALL": "Todos",
         "ALL_AGENTS": "Todos los agentes",
         "ALL_TEAMS": "Todos los equipos",
         "ATTACHMENT": "Adjunto archivo",
@@ -97,7 +97,7 @@
         "AUTHENTICATION": "Autenticación",
         "AUTHTIMEOUT": "Tiempo de espera de autenticación [seg]",
         "AUTOREPLY": "Respuesta automática",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BCC": "Bcc",
         "BUSY": "Ocupado",
         "CANNED_ANSWER_NOT_FOUND": "No se encontraron respuestas enlatadas",
         "CAPACITY": "Capacidad",
         "CC": "CC",
         "CHAT": "Chat",
-        "CLOSE": "Cerca",
+        "CLOSE": "Cerrar",
         "CLOSED": "Cerrado",
         "CLOSEDAT": "Cerrado en",
-        "CLOSEMETHOD": "Método cercano",
+        "CLOSEMETHOD": "Método Cerrado",
         "CLOSEURL": "Cerrar URL",
-        "COMMAND": "Mando",
+        "COMMAND": "Comando",
         "CONDITION": "Condición",
         "CONFIRM_PASSWORD": "Confirmar contraseña",
         "CONNECTED": "Conectado",
         "DELETE_MAILQUEUE": "Eliminar cola de correo electrónico",
         "DELETE_MAILSUBSTATUS": "Borrar",
         "DESCRIPTION": "Descripción",
-        "DISABLED": "Discapacitado",
-        "DISPOSITION": "Disposición",
+        "DISABLED": "Deshabilitado",
+        "DISPOSITION": "Disposiciones",
         "DISPOSITIONS": "Plan",
         "EDIT_ACCOUNT": "Editar cuenta",
         "EDIT_AGENT": "Editar agente",
         "EDIT_AUTOREPLY": "Editar respuesta automática",
         "EDIT_CLOSE": "Editar Cerrar",
-        "EDIT_GOTOIF": "Editar GotoIf",
-        "EDIT_GOTOP": "Editar GotoP",
+        "EDIT_GOTOIF": "Edit GotoIf",
+        "EDIT_GOTOP": "Edit GotoP",
         "EDIT_MAILACCOUNT": "Editar cuenta de correo electrónico",
         "EDIT_MAILCANNEDANSWER": "Editar respuesta enlatada",
         "EDIT_MAILDISPOSITION": "Editar la disposición del correo electrónico",
         "FROM": "De",
         "FULLNAME": "Nombre completo",
         "GENERAL": "General",
-        "GOTOIF": "Ir aIf",
-        "GOTOP": "Ve arriba",
+        "GOTOIF": "GotoIf",
+        "GOTOP": "GotoP",
         "GOTOREALTIME_MAILACCOUNT": "Ir a la cuenta de correo electrónico en tiempo real",
         "GOTOREALTIME_MAILQUEUE": "Ir a cola de correo en tiempo real",
         "GOTO_MAILACCOUNT": "Ir a la cuenta de correo electrónico en tiempo real",
         "HIDE_DETAILS": "Ocultar detalles",
-        "HOST": "Anfitrión",
+        "HOST": "Host",
         "ID": "Id",
-        "IDLE": "Ocioso",
+        "IDLE": "Disponible",
         "IMAP": "IMAP",
         "IMAP_HOST": "Host IMAP",
         "IMAP_PORT": "Puerto IMAP",
         "MAILSUBSTATUSES": "Subestaciones de correo electrónico",
         "MARK_AS_UNREAD": "marcar como no leído",
         "NAME": "Nombre",
-        "NEVER_VERIFIED": "Nunca verificado",
+        "NEVER_VERIFIED": "Nunca Verificar",
         "NEW_MAILACCOUNT": "Nueva cuenta de correo electrónico",
         "NEW_MAILCANNEDANSWER": "Nueva respuesta enlatada",
         "NEW_MAILDISPOSITION": "Nueva disposición de correo electrónico",
         "NEW_MAILQUEUE": "Nueva cola de correo electrónico",
-        "NEW_MAILSUBSTATUS": "Nuevo Sub Status",
+        "NEW_MAILSUBSTATUS": "Nuevo Sub Estado",
         "NOOP": "Noop",
         "NOTE": "Nota",
         "NOTES": "Notas",
         "NOTIFICATION": "Notificación",
-        "NOTIFICATIONSHAKE": "Sacudir",
+        "NOTIFICATIONSHAKE": "Vibrar",
         "NOTIFICATIONSOUND": "Sonar",
         "NOTIFICATIONTEMPLATE": "Modelo",
         "NOT_INUSE": "No esta en uso",
         "REPLY": "Respuesta",
         "REPLY_ALL": "Responder a todos",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SECURE": "Seguro",
         "SELECTED": "Seleccionado",
         "STARTEDAT": "Empezó a las",
         "STATUS": "Estado",
         "STRATEGY": "Estrategia",
-        "SUBJECT": "Tema",
+        "SUBJECT": "Sujeto",
         "SYSTEM": "Sistema",
         "TAGS": "Etiquetas",
         "TEAMADD_MAILQUEUE": "Agregar equipo a la cola de correo electrónico",
         "TEMPLATE": "Modelo",
         "TEXT": "Texto",
-        "TIMEOUT": "Se acabó el tiempo",
-        "TIMER": "Minutero",
+        "TIMEOUT": "Timeout",
+        "TIMER": "Temporizador",
         "TIMES": "Cantidad de veces por interacción",
         "TO": "A",
         "TOTAL": "Total",
         "TRUEPRIORITY": "Verdadera prioridad",
-        "UNAVAILABLE": "Indisponible",
+        "UNAVAILABLE": "No Disponible",
         "UNKNOWN": "Desconocido",
         "UNPAUSE": "Fin de pausa",
         "UNREGISTERED": "No registrado",
         "WAITING": "Esperando",
         "WEBHOOKS": "WebHooks",
         "WHITELABEL": "Etiqueta blanca",
-        "WAITFORTHEASSIGNEDAGENT": "Espere al agente asignado",
+        "WAITFORTHEASSIGNEDAGENT": "Esperar al Agente Asignado",
         "EDIT_TAG": "Editar etiqueta",
         "TAG": "Etiqueta",
         "AGENTTRANSFER": "Transferencia de agente",
index 21b1e1f..10e2143 100644 (file)
@@ -32,9 +32,9 @@
             "CONGESTIONMAXRETRY": "Número máximo de veces que se llama a un contacto antes de considerarlo cerrado, cuando la llamada falló por congestión",
             "CONGESTIONRETRYTIME": "Tiempo en minutos antes de tratar de volver a llamar a un contacto fallido debido a la congestión",
             "CONTEXT": "Permite que una persona que llama salga de la cola presionando un solo dígito DTMF. Si se especifica un contexto y la persona que llama ingresa un número, ese dígito intentará coincidir en el contexto especificado, y la ejecución del plan de marcado continuará allí.",
-            "DIALORDERBYSCHEDULEDAT": "Obtener contactos de la tolva (descendente o ascendente).",
+            "DIALORDERBYSCHEDULEDAT": "Obtener contactos de la Contenedor (descendente o ascendente)",
             "DIALRECALLINQUEUE": "Reprogramar la convocatoria de agentes en la cola",
-            "DIALRECALLMETIMEOUT": "Intervalo de tiempo (en minutos) para el período de validez de Recall Me",
+            "DIALRECALLMETIMEOUT": "Intervalo de tiempo (en minutos) para el período de validez de Recordar Me",
             "ESTIMATEDHOLDTIMEANNOUNCE": "Elija un sonido definido en Herramientas. Predeterminado = \"El tiempo de espera estimado actual es\". Indefinido = sin anuncio",
             "GLOBALINTERVAL": "Intervalo de tiempo global durante el cual el marcador puede llamar a contactos. Rechazamos la responsabilidad: preste atención cuando modifique este campo, ya que puede incumplir las Leyes y Reglamentos nacionales de Autodialer.",
             "GLOBALMAXRETRY": "Número máximo de veces que se llama a un contacto antes de considerarlo cerrado",
         "ABANDONED": "Abandonado",
         "ABANDONEDCALLS": "Llamadas de cola abandonadas",
         "ABANDONED_CALLS": "Llamadas abandonadas",
-        "ACTIONS": "Comportamiento",
+        "ACTIONS": "Acciones",
         "ACTIVE": "Activo",
         "ADD_AGENT_TO_VOICEQUEUE": "Agregar agente a cola de voz",
         "ADD_CHANSPY": "Añadir ChanSpy",
         "ADD_VOICEQUEUE": "Agregar cola de voz",
         "ADVANCE": "Avanzado",
         "ADVANCED": "Avanzado",
-        "ADVANCEDPREVIEW": "Preview Avanzado",
-        "AFTERCALLWORK": "Después del trabajo de llamada",
-        "AFTERCALLWORKDURATION": "Después de la duración del trabajo de llamada",
+        "ADVANCEDPREVIEW": "Vista Previa Avanzada",
+        "AFTERCALLWORK": "Después de Llamada",
+        "AFTERCALLWORKDURATION": "Duración Después de Llamada",
         "AGENT": "Agente",
-        "AGENTADD_QUEUE": "Agregar agente para hacer cola de campaña",
+        "AGENTADD_QUEUE": "Agregar Agente a Cola de Campaña",
         "AGENTADD_QUEUECAMPAIGN": "Agregar agente",
-        "AGENTBUSYFACTOR": "Agente ocupado Factor",
+        "AGENTBUSYFACTOR": "Factor Agente Ocupado",
         "AGENTS": "Agentes",
-        "AGENTSADD_QUEUE": "Agregar agentes para hacer cola de campaña",
+        "AGENTSADD_QUEUE": "Agregar agentes a cola de campaña",
         "AGENTS_NOT_LOGGED": "Agente no registrado",
-        "AGENTTIMEOUT": "Tiempo de espera del agente",
+        "AGENTTIMEOUT": "Agente Timeout",
         "AGI": "AGI",
-        "ALL": "Todas",
+        "ALL": "Todos",
         "ALL_AGENTS": "Todos los agentes",
         "ALL_LISTS": "Todas las listas",
         "ALL_TEAMS": "Todos los equipos",
         "ALPHABETICAL": "Alfabético",
         "ALWAYS": "Siempre",
-        "AMD": "Detección de contestador automático Asterisk (AMD)",
+        "AMD": "Detección de contestador automático (AMD)",
         "AMDACTIVE": "AMD",
         "AMDAFTERGREETINGSILENCE": "Silencio después del saludo",
         "AMDBETWEENWORDSSILENCE": "Silencio entre palabras",
         "ANNOUNCE_OVERRIDES": "Anunciar anulaciones",
         "ANSWER": "Responder",
         "ANSWERED": "Contestada",
-        "APPLICATION_NAME": "Nombre de la aplicación",
+        "APPLICATION_NAME": "Nombre de Aplicación",
         "ARGUMENTS": "Argumentos",
         "ASC": "ASC",
         "ATTACH": "Adjuntar",
         "AVG_BILLABLE": "Avg Billable",
         "AVG_DURATION": "Duración media",
         "AVG_HOLD_TIME": "Tiempo promedio de espera",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BACKUPTRUNK": "Troncal de respaldo",
         "BLACKLIST": "Lista negra",
         "BLACKLISTADD_IVRCAMPAIGN": "Agregar lista negra",
         "BLACKLISTADD_QUEUECAMPAIGN": "Agregar lista negra",
         "BUSY": "Ocupado",
-        "BUSYMAXRETRY": "Max Retries",
+        "BUSYMAXRETRY": "Max Reintentos",
         "BUSYRETRYTIME": "Tiempo de reintento [min]",
         "CALLED": "Llamado",
         "CALLER": "Llamador",
         "CALLER_ID": "Identificador de llamadas",
         "CALLYSQUAREPROJECT": "Proyecto Cally Square",
-        "CALLYSQUAREPROJECT2": "Proyecto Cally Square After Queue",
+        "CALLYSQUAREPROJECT2": "Proyecto Cally Square Despues de Cola",
         "CALLYSQUAREPROJECTPREVIEW": "Vista previa del proyecto Cally Square",
         "CALLYSQUAREPROJECTPREVIEW2": "Proyecto Cally Square después de la vista previa",
         "CAMPAIGN": "Campaña",
         "CHAT": "Chat",
         "CHECKDUPLICATE": "Verificar duplicado",
         "CLOSED": "Cerrado",
-        "CLOSING": "Clausura",
-        "CONCURRENTCALLS": "Llamadas concurrentes máximas",
+        "CLOSING": "Cerrando",
+        "CONCURRENTCALLS": "Max Llamadas Concurrentes",
         "CONFIRM_PASSWORD": "Confirmar contraseña",
-        "CONGESTION": "Congestión",
-        "CONGESTIONMAXRETRY": "Max Retries",
+        "CONGESTION": "Ocupado",
+        "CONGESTIONMAXRETRY": "Max Reintentos",
         "CONGESTIONRETRYTIME": "Tiempo de reintento [min]",
         "CONNECTED": "Conectado",
         "CONTACTID": "ID de contacto",
         "DELETE_APP": "Eliminar aplicación",
         "DELETE_CHANSPY": "Eliminar ChanSpy",
         "DELETE_CONTEXT": "Eliminar contexto",
-        "DELETE_HOPPER": "Eliminar tolva",
+        "DELETE_HOPPER": "Eliminar Contenedor",
         "DELETE_HOPPERFINAL": "Borrar",
         "DELETE_HOPPERHISTORY": "Borrar",
-        "DELETE_INBOUNDROUTE": "Eliminar la ruta de entrada",
+        "DELETE_INBOUNDROUTE": "Eliminar Ruta de Entrada",
         "DELETE_INTERNALROUTE": "Eliminar ruta interna",
         "DELETE_IVRCAMPAIGN": "Eliminar Campaña",
-        "DELETE_MOHSOUND": "Eliminar música en espera sonido",
-        "DELETE_MUSICONHOLD": "Eliminar música en espera",
+        "DELETE_MOHSOUND": "Eliminar Sonido Música de Espera",
+        "DELETE_MUSICONHOLD": "Eliminar Música de Espera",
         "DELETE_OUTBOUNDROUTE": "Eliminar ruta de salida",
         "DELETE_QUEUECAMPAIGN": "Eliminar Campaña",
         "DELETE_VOICEDISPOSITION": "Eliminar la disposición de voz",
         "DESTINATION": "Destino",
         "DESTINATIONPATTERN": "Patrón de destino",
         "DIAL": "Marcar",
-        "DIALORDERBYSCHEDULEDAT": "Ordenar por scheduledat",
+        "DIALORDERBYSCHEDULEDAT": "Ordenar por Programa",
         "DIALRECALLINQUEUE": "Recordar en cola",
-        "DIALRECALLMETIMEOUT": "Recall Me Timeout [min]",
-        "DID": "HIZO",
+        "DIALRECALLMETIMEOUT": "Recordar Timeout [min]",
+        "DID": "HECHO",
         "DIRECTORY": "Directorio",
         "DISPOSITION": "Disposición",
-        "DOWNLOAD_MOHSOUND": "Descargar Music On Hold sound",
+        "DOWNLOAD_MOHSOUND": "Descargar Sonido Música en Espera",
         "DOWNLOAD_VOICERECORDING": "Descargar grabación de voz",
-        "DROPPED": "Caído",
+        "DROPPED": "Asignado",
         "DROPRATE": "Tasa de abandono",
         "DURATION": "Duración",
         "EDIT_AGI": "Editar AGI",
         "EDIT_CAMPAIGN": "Editar Campaña",
         "EDIT_CHANSPY": "Editar ChanSpy",
         "EDIT_CONTEXT": "Editar contexto",
-        "EDIT_CUSTOM": "Editar personalizado",
+        "EDIT_CUSTOM": "Edición Personalizada",
         "EDIT_DIAL": "Editar marcación",
         "EDIT_EXTERNALDIAL": "Editar marcación externa",
-        "EDIT_GOTO": "Editar GoTo",
-        "EDIT_HANGUP": "Editar Hangup",
-        "EDIT_HOPPER": "Editar tolva",
+        "EDIT_GOTO": "Edit GoTo",
+        "EDIT_HANGUP": "Editar Colgar",
+        "EDIT_HOPPER": "Editar Contenedor",
         "EDIT_INBOUNDROUTE": "Editar ruta de entrada",
-        "EDIT_INTERNALDIAL": "Editar dial interno",
+        "EDIT_INTERNALDIAL": "Editar Marcado Interno",
         "EDIT_INTERNALROUTE": "Editar ruta interna",
         "EDIT_INTERVAL": "Intervalo de edición",
         "EDIT_IVRCAMPAIGN": "Editar Campaña",
-        "EDIT_MUSICONHOLD": "Editar música en espera",
+        "EDIT_MUSICONHOLD": "Editar Música de Espera",
         "EDIT_OUTBOUNDROUTE": "Editar ruta de salida",
         "EDIT_PLAYBACK": "Editar reproducción",
         "EDIT_QUEUE": "Editar cola",
         "EDIT_VOICEQUEUE": "Editar cola de voz",
         "EDIT_VOICERECORDING": "Editar grabación de voz",
         "EMAIL": "Email",
-        "EMAILBODY": "Cuerpo del correo electronico",
+        "EMAILBODY": "Cuerpo del Correo Electrónico",
         "EMAILSUBJECT": "Asunto del email",
         "ENABLED": "Habilitado",
         "ENDTIME": "Hora de finalización",
         "ENVELOPE": "Sobre",
         "ESTIMATEDHOLDTIMEANNOUNCE": "Anuncio estimado de tiempo de espera",
         "EXTENSION": "Extensión",
-        "EXTERNALDIAL": "Dial externo",
+        "EXTERNALDIAL": "Discado Externo",
         "FAILED": "Ha fallado",
         "FAX": "Fax",
         "FILE": "Archivo",
         "GENERAL": "General",
         "GLOBAL": "Global",
         "GLOBALINTERVAL": "Intervalo global",
-        "GLOBALMAXRETRY": "Max Retries",
+        "GLOBALMAXRETRY": "Max Reintentos",
         "GLOBAL_INTERVAL_IS_OVERTIME": "Fuera del intervalo (global)",
         "GOSUB": "GoSub",
-        "GOTO": "Ir",
-        "GOTOREALTIME_IVRCAMPAIGN": "Ir a campañas de IVR en tiempo real",
-        "GOTOREALTIME_QUEUECAMPAIGN": "Ir a campañas de cola en tiempo real",
-        "GOTO_IVRCAMPAIGN": "Ir a campañas de IVR en tiempo real",
-        "GOTO_QUEUECAMPAIGN": "Ir a campañas de cola en tiempo real",
+        "GOTO": "GoTo",
+        "GOTOREALTIME_IVRCAMPAIGN": "Ir a Tiempo Real Campañas IVR",
+        "GOTOREALTIME_QUEUECAMPAIGN": "Ir a Cola en Tiempo Real de Campaña",
+        "GOTO_IVRCAMPAIGN": "Ir a Tiempo Real Campañas de IVR",
+        "GOTO_QUEUECAMPAIGN": "Ir a Tiempo Real de Cola de Campañas",
         "HANGUP": "Colgar",
         "HANGUPCAUSE_1": "1 = número sin asignar",
         "HANGUPCAUSE_16": "16 = Limpieza de llamada normal",
         "HANGUPCAUSE_27": "27 = Destino fuera de servicio",
         "HANGUPCAUSE_38": "38 = Red fuera de servicio",
         "HANGUPCAUSE_41": "41 = falla temporal",
-        "HANGUP_CAUSE": "Causa de Hangup",
+        "HANGUP_CAUSE": "Causa de Colgado",
         "HISTORY": "Historia",
         "HOLDTIMEANNOUNCE": "Anunciar el tiempo de espera",
-        "HOPPERBLACKS": "Hopper Blacklist",
-        "HOPPERFINALS": "Hopper Final",
+        "HOPPERBLACKS": "Contenedor Lista Negra",
+        "HOPPERFINALS": "Contenedor Final",
         "HOPPERHISTORIES": "Historial de llamadas",
-        "HOPPERS": "Tolva",
+        "HOPPERS": "Contenedor",
         "HOPPERWIDGET": "Resumen",
         "ID": "Id",
-        "IDLE": "Ocioso",
+        "IDLE": "Disponible",
         "INBOUNDROUTES": "Rutas de entrada",
         "INFO": "Información",
         "INTERNAL": "Interno",
-        "INTERNALDIAL": "Dial interno",
+        "INTERNALDIAL": "Discado Interno",
         "INTERNALROUTES": "Rutas internas",
         "INTERVAL": "Intervalo de tiempo",
         "INTERVALS": "Intervalos",
         "IS_DISACTIVED": "Desactivado",
         "IVRCAMPAIGNS": "Campañas de IVR",
         "IVR_CAMPAIGNS": "Campañas de IVR",
-        "JOINWHENEMPTY": "Únete cuando estés vacío",
+        "JOINWHENEMPTY": "Unirse Cuando Esté Vacío",
         "LAGGED": "Lagged",
-        "LEAVEWHENEMPTY": "Deje cuando esté vacío",
+        "LEAVEWHENEMPTY": "Dejar Cuando Esté Vacío",
         "LIMITED": "Limitado",
         "LISTADD_IVRCAMPAIGN": "Añadir lista",
         "LISTADD_QUEUECAMPAIGN": "Añadir lista",
         "MACRO": "Macro",
         "MAIL": "Email",
         "MAILBOX": "Buzón",
-        "MAILBOX@CONTEXT": "Buzón @ Contexto",
+        "MAILBOX@CONTEXT": "Buzón@Contexto",
         "MANAGED": "Administrado",
         "MAXCONCURRENTCALLS": "Llamadas concurrentes máximas",
         "MAXLENGTH": "Longitud máxima",
         "MESSAGES": "Mensajes",
         "METHOD": "Método",
         "MINANNOUNCEFREQUENCY": "Frecuencia de anuncio mínimo",
-        "MINUTEANNOUNCE": "Minuto anuncia",
-        "MINUTESANNOUNCE": "Minutos anuncian",
+        "MINUTEANNOUNCE": "Minuto anuncio",
+        "MINUTESANNOUNCE": "Minutos anuncios",
         "MOHSOUNDS": "Sonidos de Moh",
         "MONITORFORMAT": "Formato de grabación",
         "MOTIONDIALER": "Motion Bull",
         "NEW_IVRCAMPAIGN": "Nueva campaña de IVR",
         "NEW_MUSICONHOLD": "Nueva música en espera",
         "NEW_OUTBOUNDROUTE": "Nueva ruta de salida",
-        "NEW_QUEUECAMPAIGN": "Nueva campaña de cola",
+        "NEW_QUEUECAMPAIGN": "Nueva Cola de Campaña",
         "NEW_VOICEMAIL": "Nuevo mensaje de voz",
         "NEW_VOICEQUEUE": "Nueva cola de voz",
         "NO": "No",
         "NOANSWER": "Sin respuesta",
-        "NOANSWERMAXRETRY": "Max Retries",
+        "NOANSWERMAXRETRY": "Max Reintentos",
         "NOANSWERRETRYTIME": "Tiempo de reintento [min]",
         "NOT_ACTIVE": "No activo",
         "NOT_INUSE": "No esta en uso",
         "NO_RATING": "Sin evaluar",
         "NO_REGISTRY": "Sin registro",
         "NO_SOUND_AVAILABLE": "No hay sonidos disponibles",
-        "NO_SUCH_NUMBER": "No hay tal cantidad",
+        "NO_SUCH_NUMBER": "No Existe Numero",
         "OF": "de",
         "ONHOLD": "En espera",
         "ONLY_IF_OPEN": "Solo si está abierto",
         "OPTIONS": "Opciones",
         "ORIGINATE": "Originar",
         "ORIGINATECALLERIDNAME": "Nombre de identificación de llamada",
-        "ORIGINATECALLERIDNUMBER": "Número de identificación de llamada",
+        "ORIGINATECALLERIDNUMBER": "Numero de Identificación de Llamada",
         "ORIGINATED": "Originada",
-        "ORIGINATETIMEOUT": "Originate Timeout",
+        "ORIGINATETIMEOUT": "Originada Timeout",
         "OUTBOUNDDIAL": "Marcación de salida",
         "OUTBOUNDROUTES": "Rutas de salida",
         "OUTBOUND_CALLS": "Llamadas salientes",
         "REACHABLE": "Accesible",
         "READY": "Listo",
         "REALTIME": "Tiempo real",
-        "RECALLAGENT": "Recall Agent",
+        "RECALLAGENT": "Recordar Agente",
         "RECALLFAILEDTIMEOUT": "Recuperar error",
-        "RECALLME": "Recordarme",
+        "RECALLME": "Recordar",
         "RECEIVED_AT": "Recibido en",
         "RECORDING": "Grabación",
         "RECORDINGFORMAT": "Formato de grabación",
         "REGISTERED": "Registrado",
         "REGISTRY": "Registro",
         "REJECTED": "Rechazado",
-        "REPORTHOLDTIMEAGENT": "Tiempo de espera del agente de informes",
+        "REPORTHOLDTIMEAGENT": "Reporte Agente Tiempo de Espera",
         "RESCHEDULED_CONTACTS": "Contactos reprogramados",
-        "RESET": "Reiniciar",
+        "RESET": "Reintentar",
         "RESETLIST": "Restablecer listas",
         "RESETLIST_IVRCAMPAIGN": "Restablecer listas",
         "RESETLIST_QUEUECAMPAIGN": "Restablecer listas",
         "RESTORECONTACTS": "Restaurar contactos",
         "RETRY": "Rever",
         "RETRYANDFREQUENCY": "Política de Reintentos",
-        "RING": "anillo",
-        "RINGGROUP": "Grupo de anillos",
+        "RING": "Ring",
+        "RINGGROUP": "Grupo de Ring",
         "RINGING": "Zumbido",
-        "RINGINUSE": "Anillo en uso",
+        "RINGINUSE": "Ring en uso",
         "ROWSPERPAGE": "Filas por página",
         "RULE": "Regla",
         "RUNIFHANGUPAGENT": "Ejecute el Proyecto Cally Square Después de incluso si el agente cuelga la llamada",
         "RUNNING": "Corriendo",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SCHEDULEDAT": "Programado en",
         "SEARCH_FOR_ANYONE": "Buscar",
-        "SECONDSANNOUNCE": "Segundos anuncian",
+        "SECONDSANNOUNCE": "Segundos Anunciar",
         "SELECTALL": "Seleccionar todo",
         "SELECTED": "Seleccionado",
         "SELECTED_AGENTS": "Agentes seleccionados",
         "STRATEGY": "Estrategia",
         "TALKING": "Hablando",
         "TEAMADD_QUEUECAMPAIGN": "Agregar equipo",
-        "TECHNOLOGY/RESOURCE": "Tecnología / Recurso",
+        "TECHNOLOGY/RESOURCE": "Tecnología/Recurso",
         "TELEPHONES": "Teléfonos",
         "THANKYOUANNOUNCE": "'Gracias' Anuncie",
         "THEREAREANNOUNCE": "'Hay' Anuncio",
         "TIMEOUT": "Se acabó el tiempo",
         "TIMEOUTRESTART": "Tiempo de reinicio",
-        "TIMER": "Minutero",
-        "TIMEZONE": "Zona horaria",
+        "TIMER": "Temporizador",
+        "TIMEZONE": "Tiempo Fuera",
         "TIMEZONE_UNKNOW": "Zona horaria Desconocida",
         "TOTAL": "Total",
         "TOTAL_MANAGED": "Total administrado",
         "TOTAL_OFFERED": "Total ofrecido",
         "TRUNK": "Troncal",
         "TRUNKS": "Troncal",
-        "TRUNK_IS_NOT_REACHABLE": "Troncal no es accesible",
+        "TRUNK_IS_NOT_REACHABLE": "El Troncal No Es Accesible",
         "TYPE": "Tipo",
-        "UNAVAILABLE": "Indisponible",
-        "UNIQUEID": "Identificación única",
+        "UNAVAILABLE": "No Disponible",
+        "UNIQUEID": "ID Único",
         "UNKNOWN": "Desconocido",
         "UNMANAGED": "No administrado",
         "UNPAUSE": "Fin de pausa",
         "VOICEQUEUES": "Colas de voz",
         "VOICERECORDINGS": "Grabaciones de voz",
         "WAITING": "Esperando",
-        "WAITINGCALLSANNOUNCE": "Llamadas en espera anuncian",
+        "WAITINGCALLSANNOUNCE": "Anunciar Llamadas En Espera",
         "WAITING_FOR_AGENT": "Esperando al agente",
         "WEIGHT": "Peso",
         "WRAPUPTIME": "Tiempo de envolvimiento",
         "YES": "Sí",
         "YOUARENEXTANNOUNCE": "'Eres el próximo' Anunciar",
-        "CLONE_QUEUECAMPAIGN": "Campaña Clone Queue",
-        "CLONE_IVRCAMPAIGN": "Campaña Clon",
-        "RANDOMLASTDIGITCALLERIDNUMBER": "Número de identificador de llamadas salientes al azar",
+        "CLONE_QUEUECAMPAIGN": "Duplicar Cola Campaña",
+        "CLONE_IVRCAMPAIGN": "Duplicar Campaña",
+        "RANDOMLASTDIGITCALLERIDNUMBER": "Número de Identificador de Llamadas salientes al Aleatorio",
         "CUTDIGIT": "Cortar dígitos",
         "LOGIN_TIME": "Hora de inicio de sesión",
         "PAUSE_TIME": "Tiempo de pausa",
index a4350b1..207f7eb 100644 (file)
         "BUSY": "Ocupado",
         "CAPACITY": "Capacidad",
         "CHAT": "Chat",
-        "CLOSE": "Cerca",
+        "CLOSE": "Cerrar",
         "CLOSED": "Cerrado",
         "CLOSEDAT": "Cerrado en",
-        "CLOSEMETHOD": "Método cercano",
+        "CLOSEMETHOD": "Método Cerrado",
         "CLOSEURL": "Cerrar URL",
-        "COMMAND": "Mando",
+        "COMMAND": "Comando",
         "CONDITION": "Condición",
         "CONTACT": "Contacto",
         "CREATED_AT": "Creado en",
         "DELETE_OPENCHANNELQUEUE": "Eliminar la cola de canales abiertos",
         "DELIVERYREPORTURL": "URL del informe de entrega",
         "DESCRIPTION": "Descripción",
-        "DISPOSITION": "Disposición",
+        "DISPOSITION": "Disposiciones",
         "DISPOSITIONS": "Plan",
         "EDIT_AGENT": "Editar agente",
         "EDIT_AUTOREPLY": "Editar respuesta automática",
         "EDIT_CLOSE": "Editar Cerrar",
-        "EDIT_GOTO": "Editar Goto",
-        "EDIT_GOTOIF": "Editar Gotoif",
-        "EDIT_GOTOP": "Editar Gotop",
-        "EDIT_NOOP": "Editar Noop",
+        "EDIT_GOTO": "Edit Goto",
+        "EDIT_GOTOIF": "Edit Gotoif",
+        "EDIT_GOTOP": "Edit Gotop",
+        "EDIT_NOOP": "Edit Noop",
         "EDIT_OPENCHANNELACCOUNT": "Editar cuenta de canal abierto",
         "EDIT_OPENCHANNELCANNEDANSWER": "Editar",
         "EDIT_OPENCHANNELDISPOSITION": "Editar disposición de canal abierto",
         "FILTERS": "Filtros",
         "FULLNAME": "Nombre completo",
         "GENERAL": "General",
-        "GOTO": "Ir",
+        "GOTO": "Goto",
         "GOTOIF": "Gotoif",
-        "GOTOP": "Ve arriba",
+        "GOTOP": "GotoP",
         "GOTOREALTIME_OPENCHANNELQUEUE": "Ir a la cola de canales abiertos en tiempo real",
         "ID": "Id",
-        "IDLE": "Ocioso",
+        "IDLE": "Disponible",
         "INFO": "Información",
-        "INSERT_MESSAGE_HERE": "Inserta tu mensaje de texto aquí",
+        "INSERT_MESSAGE_HERE": "Insertar su mensaje de texto aquí",
         "INTERACTION": "Interacción",
         "INTERACTIONS": "Interacciones",
         "INTERACTIONS_OPENCHANNELACCOUNT": "Ir a Interacciones",
         "NOOP": "Noop",
         "NOTES": "Notas",
         "NOTIFICATION": "Notificación",
-        "NOTIFICATIONSHAKE": "Sacudir",
+        "NOTIFICATIONSHAKE": "Vibrar",
         "NOTIFICATIONSOUND": "Sonar",
         "NOTIFICATIONTEMPLATE": "Modelo",
         "NOT_INUSE": "No esta en uso",
         "REJECTURL": "Rechazar URL",
         "REPLYURI": "URL de respuesta",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SELECTED": "Seleccionado",
         "SELECTED_AGENTS": "Agentes seleccionados",
         "TAGS": "Etiquetas",
         "TEAMADD_OPENCHANNELQUEUE": "Agregar equipo para abrir la cola de canales",
         "TEXT": "Texto",
-        "TIMEOUT": "Se acabó el tiempo",
-        "TIMER": "Minutero",
+        "TIMEOUT": "Timeout",
+        "TIMER": "Temporizador",
         "TIMES": "Cantidad de veces por interacción",
         "TRUEPRIORITY": "Verdadera prioridad",
-        "UNAVAILABLE": "Indisponible",
+        "UNAVAILABLE": "No Disponible",
         "UNKNOWN": "Desconocido",
         "UNPAUSE": "Fin de pausa",
         "UNREGISTERED": "No registrado",
         "VOICE": "Voz",
         "WAITING": "Esperando",
         "WEBHOOKS": "WebHooks",
-        "WAITFORTHEASSIGNEDAGENT": "Espere al agente asignado",
+        "WAITFORTHEASSIGNEDAGENT": "Esperar al Agente Asignado",
         "ADVANCED": "Avanzado",
-        "PROXY": "Apoderado",
+        "PROXY": "Proxy",
         "TOKEN": "Simbólico",
         "EDIT_TAG": "Editar etiqueta",
         "TAG": "Etiqueta",
index 0f2448a..457e1c0 100644 (file)
@@ -1,16 +1,16 @@
 {
     "SETTINGS": {
-        "PREFERRED": "Preferred Logo",
-        "DEFAULT_PREFERRED": "Default Preferred Logo",
+        "PREFERRED": "Logo Preferido",
+        "DEFAULT_PREFERRED": "Logo Preferido por Defecto",
         "HELP": {
             "ADDRESS": "Dirección IP externa (pública)",
             "EMAILADDRESS": "La dirección de correo electrónico de origen del mensaje (desde)",
-            "LOCALNETADDRESS": "Dirección ip local / subred",
+            "LOCALNETADDRESS": "Dirección IP Local/Mascara",
             "SECURITY_SUITE": "Habilita el formato de contraseña segura, el restablecimiento obligatorio de la contraseña después del primer inicio de sesión y la caducidad de la contraseña después de 90 días",
             "SMTP_PASSWORD": "Contraseña utilizada para autenticación",
             "SMTP_SECURE": "Si es verdadero, la conexión al servidor usará TLS",
             "SMTP_USERNAME": "Nombre de usuario utilizado para autenticación",
-            "MOTIONBARREMEMBERME": "Habilitar / deshabilitar la función Recordarme en Motion Phonebar",
+            "MOTIONBARREMEMBERME": "Habilitar/Deshabilitar la función Recordarme en Motion Phonebar",
             "RTLSUPPORT": "Habilita el soporte RTL para los idiomas árabe, persa y hebreo."
         },
         "ERRORS": {
         "AGENTS": "Agentes",
         "ANNUALLY": "Anualmente",
         "AVG_LOAD": "Carga AVG",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "CALLYSQUARE": "Cally Square",
         "CALL_RECORDING_ENCRYPTION": "Cifrado de grabación de voz",
         "CHANGELOG": "Changelog",
         "CHANNELS": "Canales",
         "CHAT": "Chat",
         "CM": "Gestor de contactos",
-        "COMMAND": "Mando",
+        "COMMAND": "Comando",
         "CREATED_AT": "Creado en",
         "CURRENT_VERSION": "Versión actual",
         "CUSTOM": "Personalización",
         "CUSTOMIZATIONS": "Personalizaciones",
-        "DEFAULT_HEADER_WHITELABEL": "Etiqueta blanca del encabezado predeterminado",
+        "DEFAULT_HEADER_WHITELABEL": "Etiqueta Blanca de Encabezado Predeterminado",
         "DEFAULT_LOGIN_LOGO": "Logotipo de inicio de sesión predeterminado",
         "DEFAULT_LOGO": "Logotipo predeterminado",
-        "DEFAULT_PAGE_TITLE": "Título predeterminado de la página",
+        "DEFAULT_PAGE_TITLE": "Título Predeterminado de Página",
         "DELETE_NETWORK": "Eliminar red",
         "DESCRIPTION": "Descripción",
         "DIALER": "Marcador",
-        "DISABLED": "Discapacitado",
+        "DISABLED": "Deshabilitado",
         "EDIT_GENERAL": "Editar General",
         "EDIT_NETWORK": "Editar red",
         "EMAIL": "Email",
         "EMAILADDRESS": "Dirección de correo electrónico",
         "ENABLED": "Habilitado",
-        "EXPIRATION_DATE": "Fecha de caducidad",
-        "EXPIRATION_GRAY_PERIOD": "Periodo de Periodo Gris",
-        "EXPIRATION_REASON": "Razón de caducidad",
+        "EXPIRATION_DATE": "Fecha de Expiracion",
+        "EXPIRATION_GRAY_PERIOD": "Periodo Gris de Expiracion",
+        "EXPIRATION_REASON": "Razón de Expiracion",
         "EXPIRATION_REASON_MESSAGE_CHANGED": "La ID única de su máquina se ha actualizado debido a un cambio en su sistema. Póngase en contacto con el equipo de soporte de Motion de xCALLY enviando su viejo y nuevo uuid.",
         "FAX": "Fax",
         "FILE_SYSTEM": "Sistema de archivos",
         "FREE": "Gratis",
         "GENERAL": "General",
         "GLOBAL": "Global",
-        "HEADER_WHITELABEL": "Encabezado Etiqueta blanca",
+        "HEADER_WHITELABEL": "Etiqueta Blanca de Encabezado",
         "ID": "Id",
         "INSTALLED_AT": "Instalado en",
         "INTERFACE": "Interfaz",
         "MOTIONBAR": "Motionbar",
         "MOTIONBARAUTOUPDATER": "Actualizador automático",
         "MOTIONBARAUTOUPDATERURL": "URL de actualización automática",
-        "MOTION_PROCESS_MANAGEMENT": "Gestión de procesos de Motion",
+        "MOTION_PROCESS_MANAGEMENT": "Procesos Gestión de Motion",
         "MOUNT_POINT": "Montar",
         "NAME": "Nombre",
         "NETWORKS": "Redes",
         "NEW_NETWORK": "Nueva red",
-        "NEW_TOKEN": "Token nuevo",
+        "NEW_TOKEN": "Nuevo Token",
         "NEW_TOKEN_DETECTED": "Nuevo token detectado",
         "NEW_VERSION": "Nueva versión",
         "NO_AVAILABLE_INFO": "No hay información disponible",
         "NO_NEW_VERSION_AVAILABLE": "No hay una nueva versión disponible",
         "OF": "de",
-        "OLD_TOKEN": "Old Token",
+        "OLD_TOKEN": "Token Antiguo",
         "OPENCHANNEL": "Canal abierto",
         "OTHERS": "Otros",
         "PAGE": "Página",
-        "PAGE_TITLE": "Título de la página",
+        "PAGE_TITLE": "Título de Página",
         "PASSWORD": "Contraseña",
         "PERPETUAL": "Perpetuo",
         "PLAN": "Plan",
         "REMOTE_VERSION": "Versión remota",
         "REQUEST_LICENSE": "Solicitud de licencia",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SECURE_PASSWORD": "Contraseña segura",
         "SECURITY_SUITE": "Suite de seguridad",
         "SELECT_ALL": "Seleccionar todo",
         "SELECT_NONE": "Seleccione Ninguno",
         "SEND": "Enviar",
-        "SEND_EMAIL_TO": "Enviar el email a",
+        "SEND_EMAIL_TO": "Enviar Email A",
         "SETTINGS": "Configuraciones",
         "SMTP": "SMTP",
         "SMTP_AUTHENTICATION": "Autenticación",
         "SMTP_SERVICE": "Servicio",
         "SMTP_SSL": "SMTP SSL",
         "SMTP_USERNAME": "Nombre de usuario",
-        "STAFF": "Personal",
+        "STAFF": "Grupo de Trabajo",
         "STATE": "Estado",
-        "STUNADDR": "Dirección de STUN",
+        "STUNADDR": "Dirección STUN",
         "SYSTEM": "Sistema",
         "TELEPHONES": "Teléfonos",
         "TOKEN": "Token",
         "UPDATE_LICENSE": "Actualizar licencia",
         "UPDATING": "Actualizando",
         "USED": "Usado",
-        "USEFUL_COMMANDS": "Comandos útiles",
+        "USEFUL_COMMANDS": "Comandos Utiles",
         "USERS": "Usuarios",
         "VERIFY": "Verificar",
         "WEBRTC": "WebRTC",
         "SPLITSIZECSV": "Tamaño de informe dividido [Registros CSV]",
         "SPLITSIZEPDF": "Tamaño del informe dividido [Registros PDF]",
         "SPLITSIZEXLSX": "Tamaño del informe dividido [Registros XLSX]",
-        "AGENTOMNIDESKTOPINTERFACE": "Agent Omni Desktop Interface",
-        "MESSAGESALIGNMENT": "Alineación de mensajes",
+        "AGENTOMNIDESKTOPINTERFACE": "Interface de Escritorio Omnidesktop",
+        "MESSAGESALIGNMENT": "Mensaje de Alineación",
         "ENTER_LICENSE": "Ingrese su licencia",
         "EXPIRATION_CHANGED_ADVISE": "Comuníquese con el Equipo de licencias de xCALLY Motion para enviar su antiguo u nuevo uuid.",
         "EXPIRATION_REASON_MESSAGE_DISABLED": "Su licencia ha sido deshabilitada.",
-        "UPDATE_LICENSE_MANUALLY": "¿Quieres actualizar tu licencia manualmente?",
+        "UPDATE_LICENSE_MANUALLY": "¿Quiere actualizar su licencia manualmente?",
         "ADDONS": "Complementos",
         "SESSIONS": "Sesiones",
-        "VIRTUAL": "Charla",
+        "VIRTUAL": "Chat",
         "VOICE": "Voz",
         "CHATTIMEOUT": "Tiempo de espera de interacción de cierre de chat",
         "MOTIONBARREMEMBERME": "Recuérdame",
index 71e36ba..bb5b53a 100644 (file)
@@ -2,7 +2,7 @@
     "SMS": {
         "HELP": {
             "DELIVERYREPORTURL": "Esta es la cadena de API generada automáticamente que necesita usar para recibir el informe de entrega de los mensajes enviados desde su proveedor de SMS (se debe usar el método POST): haga clic en el botón del portapapeles para copiarlo",
-            "LIST": "Lista de contactos de contacto utilizada para asociar contactos",
+            "LIST": "Lista de Gestor de Contactos Utilizada para Asociar Contactos",
             "MOTIONPROXY": "El campo debe tener el siguiente formato: <protocolo>: // <direccionip> [: <puerto>]. Ejemplo: https: //X.Y.Z.W",
             "NAME": "Solo se admiten números, letras y caracteres específicos (._)",
             "RECEIVEURL": "Esta es la cadena de la API generada automáticamente que necesita usar para recibir los mensajes dentro de su cuenta de su proveedor de SMS (se debe usar el método POST): haga clic en el botón del portapapeles para copiarlo",
             "MANDATORYDISPOSITIONPAUSEID_REQUIRED": "Campo obligatorio"
         },
         "ACCEPT": "Aceptar",
-        "ACCEPTMETHOD": "Aceptar el método",
+        "ACCEPTMETHOD": "Aceptar Método",
         "ACCEPTURL": "Aceptar URL",
         "ACCOUNT": "Cuenta",
-        "ACCOUNTSID": "SID de la cuenta",
+        "ACCOUNTSID": "SID de Cuenta",
         "ACTIONS": "Comportamiento",
-        "ADD_NOTE": "Añadir la nota",
-        "ADD_SMSACCOUNT": "Agregar cuenta de SMS",
+        "ADD_NOTE": "Añadir Nota",
+        "ADD_SMSACCOUNT": "Agregar Agente a Cuenta de SMS",
         "ADD_SMSCANNEDANSWER": "Agregar respuesta enlatada",
         "ADD_SMSDISPOSITION": "Agregar Disposición de SMS",
         "ADD_SMSQUEUE": "Agregar Cola de SMS",
         "ADVANCED": "Avanzado",
         "AGENT": "Agente",
         "AGENTADD_QUEUE": "Agregar agente a cola de SMS",
-        "AGENTADD_SMSQUEUE": "Agregar agente a la cola de SMS",
+        "AGENTADD_SMSQUEUE": "Agregar Agente a Cola de SMS",
         "AGENTS": "Agentes",
-        "AGENTSADD_QUEUE": "Agregar agentes a la cola de SMS",
+        "AGENTSADD_QUEUE": "Agregar Agentes a Cola de SMS",
         "AGENT_TIMEOUT": "Tiempo de espera del agente",
         "ALL": "Todas",
         "ALL_AGENTS": "Todos los agentes",
         "AUTHID": "ID de autenticación",
         "AUTHTOKEN": "Token de autenticación",
         "AUTOREPLY": "Respuesta automática",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BUSY": "Ocupado",
         "CANNED_ANSWER_NOT_FOUND": "No se encontraron respuestas enlatadas",
         "CANNED_ANSWER_SEARCH": "Ingrese un texto para buscar una respuesta enlatada",
         "CAPACITY": "Capacidad",
-        "CHAT": "Charla",
+        "CHAT": "Chat",
         "CLOSE": "Cerca",
-        "CLOSED": "Cerrado",
+        "CLOSED": "Cerrar",
         "CLOSEDAT": "Cerrado en",
-        "CLOSEMETHOD": "Método cercano",
+        "CLOSEMETHOD": "Método de Cerrado",
         "CLOSEURL": "Cerrar URL",
-        "COMMAND": "Mando",
+        "COMMAND": "Comando",
         "CONDITION": "Condición",
         "CONFIRM_PASSWORD": "Confirmar contraseña",
         "CONTACT": "Contacto",
         "DELIVERYREPORTURL": "URL del informe de entrega",
         "DESCRIPTION": "Descripción",
         "DISPOSITION": "Disposición",
-        "DISPOSITIONS": "Plan",
+        "DISPOSITIONS": "Disposiciones",
         "EDIT_AGENT": "Editar agente",
         "EDIT_AUTOREPLY": "Editar respuesta automática",
         "EDIT_CLOSE": "Editar Cerrar",
-        "EDIT_GOTO": "Editar Goto",
-        "EDIT_GOTOIF": "Editar Gotoif",
-        "EDIT_GOTOP": "Editar Gotop",
-        "EDIT_NOOP": "Editar Noop",
+        "EDIT_GOTO": "Edit Goto",
+        "EDIT_GOTOIF": "Edit Gotoif",
+        "EDIT_GOTOP": "Edit Gotop",
+        "EDIT_NOOP": "Edit Noop",
         "EDIT_QUEUE": "Editar cola",
         "EDIT_SMSACCOUNT": "Editar cuenta SMS",
         "EDIT_SMSCANNEDANSWER": "Editar",
-        "EDIT_SMSDISPOSITION": "Editar la disposición de SMS",
+        "EDIT_SMSDISPOSITION": "Editar Disposición de SMS",
         "EDIT_SMSQUEUE": "Editar cola de SMS",
         "EDIT_SYSTEM": "Editar sistema",
         "FALSEPRIORITY": "Falsa prioridad",
         "FILTER": "Filtrar",
         "FULLNAME": "Nombre completo",
         "GENERAL": "General",
-        "GOTO": "Ir",
+        "GOTO": "Goto",
         "GOTOIF": "Gotoif",
-        "GOTOP": "Ve arriba",
+        "GOTOP": "Gotop",
         "GOTOREALTIME_SMSQUEUE": "Ir a cola Sms en tiempo real",
         "ID": "Id",
-        "IDLE": "Ocioso",
+        "IDLE": "Disponibile",
         "INFO": "Información",
-        "INSERT_MESSAGE_HERE": "Inserta tu mensaje de texto aquí",
+        "INSERT_MESSAGE_HERE": "Insertar su mensaje de texto aquí",
         "INTERACTION": "Interacción",
         "INTERACTIONS": "Interacciones",
         "INTERACTIONS_SMSACCOUNT": "Ir a Interacciones",
         "MAIL": "Email",
         "MESSAGE": "Mensaje",
         "METHOD": "Método",
-        "MOTIONADDRESS": "Motion Address",
-        "MOTIONPROXY": "Dominio proxy o Motion",
+        "MOTIONADDRESS": "Dirección Motion",
+        "MOTIONPROXY": "Dominio o Proxy Motion",
         "NAME": "Nombre",
         "NEW_SMSACCOUNT": "Nueva cuenta SMS",
         "NEW_SMSCANNEDANSWER": "Nueva respuesta enlatada",
         "NOTE": "Nota",
         "NOTES": "Notas",
         "NOTIFICATION": "Notificación",
-        "NOTIFICATIONSHAKE": "Sacudir",
+        "NOTIFICATIONSHAKE": "Vibrar",
         "NOTIFICATIONSOUND": "Sonar",
         "NOTIFICATIONTEMPLATE": "Modelo",
         "NOT_INUSE": "No esta en uso",
         "PAUSE": "Pausa",
         "PAUSED": "Pausado",
         "PHONE": "Teléfono",
-        "PHONE_STATE": "Estado del teléfono",
-        "PHONE_STATUS": "Estado del teléfono",
+        "PHONE_STATE": "Estado de Teléfono",
+        "PHONE_STATUS": "Estado de Teléfono",
         "PRIORITY": "Prioridad",
-        "PROXY": "Apoderado",
+        "PROXY": "Proxy",
         "QUEUE": "Cola",
         "QUEUES": "Colas",
         "REACHABLE": "Accesible",
         "RECEIVEURL": "Recibir URL",
         "REFRESH_INTERACTIONS": "Actualizar interacciones",
         "REJECT": "Rechazar",
-        "REJECTMETHOD": "Método de rechazo",
+        "REJECTMETHOD": "Método Rechazo",
         "REJECTURL": "Rechazar URL",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SELECTED": "Seleccionado",
         "SELECTED_AGENTS": "Agentes seleccionados",
         "SELECTED_TEAMS": "Equipos seleccionados",
-        "SELECT_ACCOUNT": "Seleccione una cuenta",
+        "SELECT_ACCOUNT": "Seleccionar una Cuenta",
         "SELECT_ALL": "Seleccionar todo",
-        "SELECT_NONE": "Seleccione Ninguno",
-        "SELECT_STATUS": "Seleccione un estado",
+        "SELECT_NONE": "Seleccionar Ninguno",
+        "SELECT_STATUS": "Seleccionar un Estado",
         "SEND": "Enviar",
         "SENDERSTRING": "Cadena del remitente",
         "SETTINGS": "Configuraciones",
         "STRATEGY": "Estrategia",
         "SYSTEM": "Sistema",
         "TAGS": "Etiquetas",
-        "TEAMADD_SMSQUEUE": "Agregar cola de equipo a SMS",
+        "TEAMADD_SMSQUEUE": "Agregar Cola a Equipo de SMS",
         "TEXT": "Texto",
-        "TIMEOUT": "Se acabó el tiempo",
-        "TIMER": "Minutero",
+        "TIMEOUT": "Se acabó el tiempoTimer",
+        "TIMER": "Temporizador",
         "TIMES": "Cantidad de veces por interacción",
         "TO": "A",
-        "TOKEN": "Simbólico",
-        "TRUEPRIORITY": "Verdadera prioridad",
+        "TOKEN": "Token",
+        "TRUEPRIORITY": "Prioridad Verdadera",
         "TYPE": "Tipo",
-        "UNAVAILABLE": "Indisponible",
+        "UNAVAILABLE": "No Disponible",
         "UNKNOWN": "Desconocido",
         "UNPAUSE": "Fin de pausa",
         "UNREGISTERED": "No registrado",
         "WAITFORTHEASSIGNEDAGENT": "Espere al agente asignado",
         "EDIT_TAG": "Editar etiqueta",
         "TAG": "Etiqueta",
-        "AGENTADD_SMSACCOUNT": "Agregar agente a la cuenta de SMS",
-        "AGENTTRANSFER": "Transferencia de agente",
+        "AGENTADD_SMSACCOUNT": "Agregar Agente a Cuenta de SMS",
+        "AGENTTRANSFER": "Transferencia Agente",
         "AGENTTRANSFERTIMEOUT": "Tiempo de espera de transferencia de agente",
-        "QUEUETRANSFER": "Transferencia de cola",
-        "QUEUETRANSFERTIMEOUT": "Tiempo de espera de transferencia de cola",
+        "QUEUETRANSFER": "Transferencia a Cola",
+        "QUEUETRANSFERTIMEOUT": "Tiempo de Espera  transferencia a Cola",
         "TRANSFER": "Transferir",
         "CANNEDANSWERS": "Respuestas enlatadas",
         "DOWNLOAD_INTERACTION": "Descargar",
index 79780e2..39d40cb 100644 (file)
@@ -1,7 +1,7 @@
 {
     "STAFF": {
         "HELP": {
-            "ALLOWCODECS": "Codecs permitidos en orden de preferencia",
+            "ALLOWCODECS": "Códecs Permitidos en Orden de Preferencia",
             "CALLGROUP": "El grupo de llamada del agente",
             "CHATCAPACITY": "Número máximo de interacciones de canal simultáneas por agente (0 = ilimitado)",
             "DTLSCERTFILE": "Enlace al certificado válido de TLS (archivo .crt). Valor predeterminado: '/etc/pki/tls/certs/motion.crt'.",
@@ -18,7 +18,7 @@
             "SIPPORT": "Por defecto: 5060",
             "SMSCAPACITY": "Número máximo de interacciones de canal simultáneas por agente (0 = ilimitado)",
             "TRANSPORT": "Establezca los transportes predeterminados en orden de preferencia",
-            "TYPE": "Determina el rol de SIP dentro de un asterisco. Usuario: utilizado para autenticar entrantes - Peer: para llamadas salientes - Amigo: cubre ambas características de las anteriores",
+            "TYPE": "Determina el rol de SIP dentro de Asterisk. Usuario: utilizado para autenticar entrantes - Peer: para llamadas salientes - Amigo: cubre ambas características de las anteriores",
             "USERNAME": "Solo se admiten números, letras y caracteres específicos (._)",
             "SAVE_PERMISSIONS": "Se guardarán todas las secciones que contengan cambios pendientes.",
             "CUSTOM_DASHBOARDS_PERMISSIONS": "Los permisos de paneles personalizados se administran en el módulo Herramientas",
@@ -62,9 +62,9 @@
             "USERPROFILE_REQUIRED": "Campo obligatorio"
         },
         "ACCOUNT": "Cuenta",
-        "ACCOUNTNAME": "Nombre de la cuenta",
+        "ACCOUNTNAME": "Nombre de Cuenta",
         "ADD_AGENT": "AGREGAR AGENTE",
-        "ADD_AGENT_TO_QUEUE": "Agregar agente a la cola",
+        "ADD_AGENT_TO_QUEUE": "Agregar Agente a Cola",
         "ADD_AGENT_TO_TEAM": "Agregar agente al equipo",
         "ADD_TEAM": "Agregar equipo",
         "ADD_TELEPHONE": "Agregar teléfono",
         "ALL_MODULES_AVAILABLE": "Todos los módulos disponibles",
         "ALL_QUEUES_CHAT_INBOUND": "Todas las colas de chat",
         "ALL_QUEUES_FAX_INBOUND": "Todas las colas de fax",
-        "ALL_QUEUES_MAIL_INBOUND": "Todas las colas de correo electrónico",
+        "ALL_QUEUES_MAIL_INBOUND": "Todas Las Colas de Correo Electrónico",
         "ALL_QUEUES_OPENCHANNEL_INBOUND": "Todas las colas de canales abiertos",
-        "ALL_QUEUES_SMS_INBOUND": "Todas las colas SMS",
+        "ALL_QUEUES_SMS_INBOUND": "Todas las Colas de SMS",
         "ALL_QUEUES_VOICE_INBOUND": "Todas las colas de voz",
-        "ALL_QUEUES_VOICE_OUTBOUND": "Es Es> here>>>> Es here> Es>> States>>> Es>>>>>",
+        "ALL_QUEUES_VOICE_OUTBOUND": "Todas Las Colas de Campañas",
         "ALL_TEAMS": "Todos los equipos",
         "ALL_USERS": "Todos los usuarios",
         "AUTOANSWER": "Respuesta automática",
         "AUTOANSWERDELAY": "Demora de respuesta automática [s]",
         "AUTOINTERNAL": "Auto generar número interno",
         "A_TO_Z": "(De la A a la Z)",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BUSY": "Ocupado",
         "BUSYNUMBER": "Número Ocupado",
         "CALLERID": "Identificador de llamadas",
         "CALLGROUP": "Grupo de llamadas",
         "CALL_FORWARDING": "Reenvío de llamadas",
         "CAPACITY": "Capacidad",
-        "CHANGEPASSWORD_AGENT": "Cambia la contraseña",
-        "CHANGEPASSWORD_TELEPHONE": "Cambia la contraseña",
-        "CHANGEPASSWORD_USER": "Cambia la contraseña",
-        "CHANGE_AVATAR": "Cambiar avatar",
+        "CHANGEPASSWORD_AGENT": "Cambiar La Contraseña",
+        "CHANGEPASSWORD_TELEPHONE": "Cambiar La Contraseña",
+        "CHANGEPASSWORD_USER": "Cambiar La Contraseña",
+        "CHANGE_AVATAR": "Cambiar Avatar",
         "CHANGE_PASSWORD": "Cambia la contraseña",
         "CHANNELS": "Canales",
-        "CHANSPY": "ChanSpy",
-        "CHAT": "Charla",
+        "CHANSPY": "Espiar",
+        "CHAT": "Chat",
         "CHATCAPACITY": "Capacidad de chat",
         "CLOSE_DIALOG": "Cerrar el diálogo",
         "CONFIRM_PASSWORD": "Confirmar contraseña",
         "EDIT_USER": "editar usuario",
         "EMAIL": "Email",
         "ENABLEDTMFTONE": "Habilitar tonos Dtmf",
-        "ENABLEMESSENGER": "Habilitar Messenger interno",
-        "ENABLERECORDING": "Habilitar la grabación",
+        "ENABLEMESSENGER": "Habilitar Mensajería Interna",
+        "ENABLERECORDING": "Habilitar Grabación",
         "ENABLESETTINGS": "Habilitar configuración",
         "ENCRYPTION": "Cifrado",
         "EXPORT_SELECTED": "Exportar seleccionado",
         "FULLNAME": "Nombre completo",
         "GENERAL": "General",
         "GENERAL_PERMISSIONS": "General",
-        "HOST": "Anfitrión",
+        "HOST": "Staff",
         "ID": "Id",
         "INTERNAL": "Interno",
-        "JOIN_QUEUE": "Únete a Queue",
+        "JOIN_QUEUE": "Unirse a Cola",
         "LAST_PASSWORD_RESET_AT": "Último restablecimiento de contraseña en",
         "LOGININPAUSE": "Iniciar sesión en pausa",
         "MAILCAPACITY": "Capacidad de correo electrónico",
-        "MOBILE": "Móvil",
+        "MOBILE": "Celular",
         "MONITOREXTENSION": "Grabar llamadas a la extensión de usuario",
         "MORE": "Más",
         "MOTIONBAR": "Motion Bar",
-        "MULTI_SELECT_TOGGLE": "multi selección alternar",
+        "MULTI_SELECT_TOGGLE": "alternar multi selección",
         "NAME": "Nombre",
         "NAME_REQUIRED": "Nombre (requerido)",
         "NAT": "NAT",
         "NEW_AGENT": "Nuevo agente",
         "NEW_PASSWORD": "Nueva contraseña",
-        "NEW_TEAM": "Nuevo equipo",
+        "NEW_TEAM": "Nuevo Equipo",
         "NEW_TELEPHONE": "Nuevo teléfono",
-        "NEW_USER": "Nuevo usuario",
+        "NEW_USER": "Nuevo Usuario",
         "NOREPLY": "Sin respuesta",
         "NOREPLYNUMBER": "Sin número de respuesta",
-        "NO_AVAILABLE_INFO": "No hay información disponible",
-        "NO_PASSWORD_CHANGE": "Sin cambio de contraseña",
-        "NO_RESULTS": "No hay resultados..",
+        "NO_AVAILABLE_INFO": "Sin información disponible",
+        "NO_PASSWORD_CHANGE": "Contraseña no Cambiada",
+        "NO_RESULTS": "Sin Resultados..",
         "OF": "de",
-        "OPENCHANNEL": "Canal abierto",
-        "OPENCHANNELCAPACITY": "Capacidad de canal abierto",
+        "OPENCHANNEL": "Canal Abierto",
+        "OPENCHANNELCAPACITY": "Capacidad Canal Abierto",
         "OTHER_CHANNELS": "Otros canales",
-        "OUTBOUNDPROXY": "Oubound Proxy",
+        "OUTBOUNDPROXY": "Proxy Saliente",
         "PAGE": "Página",
         "PASSWORD": "Contraseña",
-        "PENALTY": "Pena",
+        "PENALTY": "Penal",
         "PERMISSIONS": "Permisos",
         "PERSONAL_INFO": "Información personal",
         "PHONE": "Teléfono",
         "PHONE_NUMBER": "Número de teléfono",
-        "PICKUPGROUP": "Grupo de recogida",
-        "QUEUEADD_AGENT_CHAT_INBOUND": "Agregar agente a las colas de chat",
-        "QUEUEADD_AGENT_FAX_INBOUND": "Añadir agente a las colas de fax",
-        "QUEUEADD_AGENT_MAIL_INBOUND": "Agregar agente a las colas de correo electrónico",
-        "QUEUEADD_AGENT_OPENCHANNEL_INBOUND": "Agregar agente para abrir colas de canales",
-        "QUEUEADD_AGENT_SMS_INBOUND": "Agregar agente a colas SMS",
-        "QUEUEADD_AGENT_VOICE_INBOUND": "Agregar agente a colas de voz",
-        "QUEUEADD_AGENT_VOICE_OUTBOUND": "Agregar agente a las campañas de cola",
-        "QUEUEADD_USER_CHAT_INBOUND": "Agregar usuario a colas de chat",
-        "QUEUEADD_USER_FAX_INBOUND": "Agregar colas de usuario a fax",
-        "QUEUEADD_USER_MAIL_INBOUND": "Agregar usuario a colas de correo electrónico",
-        "QUEUEADD_USER_OPENCHANNEL_INBOUND": "Agregar usuario para abrir colas de canales",
-        "QUEUEADD_USER_SMS_INBOUND": "Agregar usuario a colas SMS",
-        "QUEUEADD_USER_VOICE_INBOUND": "Agregar colas de usuario a voz",
-        "QUEUEADD_USER_VOICE_OUTBOUND": "Agregar campañas de usuario a cola",
+        "PICKUPGROUP": "Grupo de pickup",
+        "QUEUEADD_AGENT_CHAT_INBOUND": "Agregar Agente a Cola de Chat",
+        "QUEUEADD_AGENT_FAX_INBOUND": "Agregar Agente a Cola de FAX",
+        "QUEUEADD_AGENT_MAIL_INBOUND": "Agregar Agente a Cola de Correo Electrónico",
+        "QUEUEADD_AGENT_OPENCHANNEL_INBOUND": "Agregar Agente a Cola de Canales Abiertos",
+        "QUEUEADD_AGENT_SMS_INBOUND": "Agregar agente a cola SMS",
+        "QUEUEADD_AGENT_VOICE_INBOUND": "Agregar Agente a cola de voz",
+        "QUEUEADD_AGENT_VOICE_OUTBOUND": "Agregar Agente a Colas de Campañas",
+        "QUEUEADD_USER_CHAT_INBOUND": "Agregar Usuario a Cola de Chat",
+        "QUEUEADD_USER_FAX_INBOUND": "Agregar Usuario a Cola de Fax",
+        "QUEUEADD_USER_MAIL_INBOUND": "Agregar Usuario a Cola de Correo Electrónico",
+        "QUEUEADD_USER_OPENCHANNEL_INBOUND": "Agregar Usuario a Cola Canal Abierto",
+        "QUEUEADD_USER_SMS_INBOUND": "Agregar Usuario a Cola SMS",
+        "QUEUEADD_USER_VOICE_INBOUND": "Agregar Usuario a Cola de Voz",
+        "QUEUEADD_USER_VOICE_OUTBOUND": "Agregar Usuario a Cola de Campañas",
         "READANDEDIT": "Leer, Editar",
         "READANDEDITANDDELETE": "Leer, Editar, Eliminar",
         "REMOTECONTROL": "Control remoto",
-        "REMOTECONTROLPORT": "Puerto de control remoto",
+        "REMOTECONTROLPORT": "Puerto control remoto",
         "REMOTE_CONTROL": "Control remoto",
-        "RINGINUSE": "Anillo en uso",
-        "ROLE": "Papel",
+        "RINGINUSE": "Sonido en Uso",
+        "ROLE": "Rol",
         "ROWSPERPAGE": "Filas por página",
-        "SAVE": "SALVAR",
+        "SAVE": "GUARDAR",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SECURITY_SUITE": "Suite de seguridad",
         "SELECTED": "Seleccionado",
         "SELECTED_AGENTS": "Agentes seleccionados",
-        "SELECTED_QUEUES_CHAT_INBOUND": "Colas de chat seleccionadas",
-        "SELECTED_QUEUES_FAX_INBOUND": "Colas de fax seleccionadas",
-        "SELECTED_QUEUES_MAIL_INBOUND": "Colas de correo electrónico seleccionadas",
-        "SELECTED_QUEUES_OPENCHANNEL_INBOUND": "Colas de canal abierto seleccionadas",
+        "SELECTED_QUEUES_CHAT_INBOUND": "Colas de Chat seleccionadas",
+        "SELECTED_QUEUES_FAX_INBOUND": "Colas de Fax seleccionadas",
+        "SELECTED_QUEUES_MAIL_INBOUND": "Colas de Correo Electrónico seleccionadas",
+        "SELECTED_QUEUES_OPENCHANNEL_INBOUND": "Colas de Canal Abierto seleccionadas",
         "SELECTED_QUEUES_SMS_INBOUND": "Colas SMS seleccionadas",
         "SELECTED_QUEUES_VOICE_INBOUND": "Colas de voz seleccionadas",
         "SELECTED_QUEUES_VOICE_OUTBOUND": "Campañas de cola seleccionadas",
         "SELECTED_TEAMS": "Equipos seleccionados",
-        "SELECT_ALL": "Seleccionar todo",
-        "SELECT_NONE": "Seleccione Ninguno",
+        "SELECT_ALL": "Seleccionar Todo",
+        "SELECT_NONE": "No Seleccionar",
         "SETTINGS": "Configuraciones",
         "SETTINGS_WEBRTC": "Configuraciones",
         "SHOWWEBCONTROL": "Tipología",
-        "SHOW_ALL_FIELDS": "Mostrar todos los campos",
-        "SIP": "sorbo",
-        "SIPEXPIRES": "SIP expira [sec]",
+        "SHOW_ALL_FIELDS": "Mostrar todas las Filas",
+        "SIP": "SIP",
+        "SIPEXPIRES": "SIP Expira [sec]",
         "SIPPORT": "Puerto SIP",
-        "SIP_WEBRTC": "Sorbo",
+        "SIP_WEBRTC": "SIP",
         "SMS": "SMS",
         "SMSCAPACITY": "Capacidad SMS",
-        "SORT": "ordenar",
+        "SORT": "Corto",
         "STAFF": "Personal",
         "TEAMADD_AGENT": "Agregar agente al equipo",
         "TEAMS": "Equipos",
         "TELEPHONES": "Teléfonos",
-        "TOGGLE_SIDENAV": "Alternar sidenav",
+        "TOGGLE_SIDENAV": "Alternar Navegador",
         "TRANSPORT": "Transporte",
         "TYPE": "Tipo",
         "UNANSWEREDCALLBADGE": "Mostrar distintivo de llamada sin respuesta",
         "UNCONDITIONAL": "Incondicional",
-        "UNCONDITIONALNUMBER": "Número incondicional",
-        "USERNAME": "Nombre de usuario",
+        "UNCONDITIONALNUMBER": "Reenvío Incondicional",
+        "USERNAME": "Nombre de Usuario",
         "USERS": "Usuarios",
         "VOICE": "Voz",
-        "VOICEMAIL": "Mensaje de voz",
+        "VOICEMAIL": "Buzón de Voz",
         "WEBRTC": "WebRTC",
-        "Z_TO_A": "(Z a A)",
-        "ENABLEJAWSINTEGRATION": "Habilitar la integración de mandíbulas",
+        "Z_TO_A": "(Z to A)",
+        "ENABLEJAWSINTEGRATION": "Habilitar integración JAWS",
         "PREFIXREQUIRED": "Prefijo requerido",
-        "ENABLEVIDEORECORDING": "Habilite la grabación de video",
-        "OLD_PASSWORD": "Contraseña anterior",
+        "ENABLEVIDEORECORDING": "Habilitar Grabación de Video",
+        "OLD_PASSWORD": "Contraseña Antigua",
         "ALL_CHATQUEUES": "Todas las colas de chat",
         "ALL_CHATWEBSITES": "Todos los sitios web de chat",
         "ALL_FAXACCOUNTS": "Todas las cuentas de fax",
         "ALL_OPENCHANNELACCOUNTS": "Todas las cuentas de canal abierto",
         "ALL_OPENCHANNELQUEUES": "Todas las colas de canal abierto",
         "ALL_PROJECTS": "Todos los proyectos de Cally Square",
-        "ALL_QUEUECAMPAIGNS": "Todas las campañas de cola",
+        "ALL_QUEUECAMPAIGNS": "Todas Las Colas de Campañas",
         "ALL_SMSACCOUNTS": "Todas las cuentas de SMS",
         "ALL_SMSQUEUES": "Todas las colas de SMS",
         "ALL_VOICEQUEUES": "Todas las colas de voz",
         "SELECTED_SMSACCOUNTS": "Cuentas SMS seleccionadas",
         "SELECTED_SMSQUEUES": "Colas de SMS seleccionadas",
         "SELECTED_VOICEQUEUES": "Colas de voz seleccionadas",
-        "USERADD_CHATQUEUES": "Agregar la cola de chat al usuario",
-        "USERADD_CHATWEBSITES": "Añadir el sitio web de chat al usuario",
+        "USERADD_CHATQUEUES": "Agregar Cola de Chat a Usuario",
+        "USERADD_CHATWEBSITES": "Agregar Cuenta de Chat a Usuario",
         "USERADD_FAXACCOUNTS": "Agregar cuenta de fax al usuario",
-        "USERADD_FAXQUEUES": "Agregar cola de fax al usuario",
-        "USERADD_MAILACCOUNTS": "Agregar cuenta de correo electrónico al usuario",
-        "USERADD_MAILQUEUES": "Agregar cola de correo electrónico al usuario",
-        "USERADD_OPENCHANNELACCOUNTS": "Añadir cuenta de canal abierto al usuario",
-        "USERADD_OPENCHANNELQUEUES": "Agregar cola de canal abierto al usuario",
-        "USERADD_PROJECTS": "Añadir Proyecto Cally Square a Usuario",
-        "USERADD_QUEUECAMPAIGNS": "Añadir campaña de cola al usuario",
-        "USERADD_SMSACCOUNTS": "Añadir cuenta de SMS al usuario",
-        "USERADD_SMSQUEUES": "Agregar la cola de SMS al usuario",
-        "USERADD_VOICEQUEUES": "Agregar cola de voz al usuario",
+        "USERADD_FAXQUEUES": "Agregar Cola de Fax a Usuario",
+        "USERADD_MAILACCOUNTS": "Agregar Cuenta de Correo Electrónico a Usuario",
+        "USERADD_MAILQUEUES": "Agregar Cola de Correo Electrónico a Usuario",
+        "USERADD_OPENCHANNELACCOUNTS": "Agregar Cuenta de Canal Abierto a Usuario",
+        "USERADD_OPENCHANNELQUEUES": "Agregar Cola de Canal Abierto a Usuario",
+        "USERADD_PROJECTS": "Agregar Proyecto Cally Square a Usuario",
+        "USERADD_QUEUECAMPAIGNS": "Agregar Cola de Campaña a Usuario",
+        "USERADD_SMSACCOUNTS": "Agregar Cuenta de SMS a Usuario",
+        "USERADD_SMSQUEUES": "Agregar Cola de SMS a Usuario",
+        "USERADD_VOICEQUEUES": "Agregar Cola de Voz a Usuario",
         "HOTDESK": "Escritorio caliente",
         "ADD_USERPROFILE": "Añadir perfil de usuario",
         "CANCEL": "Cancelar",
-        "CLONE_USERPROFILE": "Perfil de usuario de Clone",
+        "CLONE_USERPROFILE": "Clonar Perfil de Usuario",
         "CLOSE": "Cerrar",
         "CONFIRM": "Confirmar",
         "CRUDPERMISSIONS": "Tipo de permiso",
         "MODULES": "Módulos",
         "NEW_USERPROFILE": "Nuevo perfil de usuario",
         "PERMISSIONS_ALL_RESOURCES": "Todos los recursos",
-        "PERMISSIONS_AUTO_ASSOCIATION_INFO": "Asocie automáticamente todos los recursos actuales y futuros de esta sección al perfil de usuario",
+        "PERMISSIONS_AUTO_ASSOCIATION_INFO": "Asociar automáticamente cada recurso actual y futuro de esta sección al perfil de usuario",
         "PERMISSIONS_MANAGE": "Gestionar",
-        "PERMISSIONS_PLACEHOLDER_SEARCH": "Buscar...",
-        "PERMISSIONS_SECTION_HIDE": "Ocultar sección al usuario",
+        "PERMISSIONS_PLACEHOLDER_SEARCH": "Buscando...",
+        "PERMISSIONS_SECTION_HIDE": "Esconder sección al usuario",
         "PERMISSIONS_SECTION_SHOW": "Mostrar sección al Usuario",
         "PERMISSIONS_SECTION_TITLE": "{{sectionName}} Permisos",
         "PERMISSIONS_SELECTED_RESOURCES": "Recursos seleccionados",
-        "PERMISSIONS_SELECT_REPORT_TYPE": "Seleccione el tipo de informe",
-        "PERMISSIONS_SELECT_SECTION": "Selecciona una seccion",
-        "PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE": "No está permitido acceder a la sección seleccionada.",
+        "PERMISSIONS_SELECT_REPORT_TYPE": "Seleccionar Tipo de Reportes",
+        "PERMISSIONS_SELECT_SECTION": "Seleccionar Sesión",
+        "PERMISSIONS_UNAUTHORIZED_REDIRECT_MESSAGE": "No está permitido acceder a la sección seleccionada",
         "PERMISSIONS_UNAUTHORIZED_REDIRECT_TITLE": "Acción no autorizada",
-        "PERMISSIONS_WARNING_CLOSE": "Usted tiene cambios no guardados. ¿Seguro que quieres salir sin guardar?",
-        "PERMISSIONS_WARNING_ENABLE_ALL": "Se habilitarán todas las subsecciones {{sectionName}} y sus recursos. Estás seguro de que quieres continuar?",
-        "QUEUES_ASSOCIATION": "{{canal}} Asociación de colas",
+        "PERMISSIONS_WARNING_CLOSE": "Seguro Que Desea Salir Sin Guardad?",
+        "PERMISSIONS_WARNING_ENABLE_ALL": "Todas las subsecciones {{sectionName}} y sus recursos estarán habilitados. Estás seguro de que quieres continuar?",
+        "QUEUES_ASSOCIATION": "{{channel}} Asociar Cola",
         "READ_PERMISSION": "Leer",
-        "REPORT_TYPE": "Tipo de informe",
+        "REPORT_TYPE": "Tipo Reporte",
         "SECTIONS": "Secciones",
         "SUMMARY": "Resumen",
-        "TEAMS_ASSOCIATION": "Asociación de equipos",
-        "USERPROFILE": "Perfil del usuario",
-        "USERPROFILES": "Perfiles de usuario",
-        "PERMISSIONS_UNAUTHORIZED_CREATION_MESSAGE": "No tienes permiso para crear el recurso",
+        "TEAMS_ASSOCIATION": "Asociar Equipo",
+        "USERPROFILE": "Perfil de Usuario",
+        "USERPROFILES": "Perfiles de Usuarios",
+        "PERMISSIONS_UNAUTHORIZED_CREATION_MESSAGE": "Usted No Esta Autorizado Para Crear Recursos",
         "VIDEOSUPPORT": "Soporte de video",
         "APIKEY": "Clave API",
         "APIKEYMANAGER_USER": "API Key Manager",
-        "GENERATE": "(Regenerado",
+        "GENERATE": "(Re)generado",
         "MANAGE_API_KEY": "Administrador de claves API",
-        "REMOVE": "retirar"
+        "REMOVE": "Eliminar"
     }
 }
\ No newline at end of file
index ab98445..665dc08 100644 (file)
@@ -7,7 +7,7 @@
             "CALLCOUNTER": "Habilitar contadores de llamadas en dispositivos",
             "CALLERID": "El identificador de llamadas, en el formato \"nombre\" <número>",
             "CALL_LIMIT": "El número límite de las llamadas concurrentes entrantes y salientes",
-            "CONTEXT": "El contexto para el tronco",
+            "CONTEXT": "El contexto para la troncal",
             "DEFAULTUSER": "Nombre de usuario de autenticación",
             "DIRECTMEDIA": "Asterisk de forma predeterminada intenta redirigir la transmisión de medios RTP para ir directamente de la persona que llama al destinatario. Algunos dispositivos no son compatibles con esto (especialmente si uno de ellos está detrás de un NAT). La configuración predeterminada es SÍ. Si tiene todos los clientes detrás de una NAT, o por alguna otra razón desea que Asterisk permanezca en la ruta de audio, es posible que desee desactivarlo.",
             "DTMFMODE": "Cómo se envían DTMF (Dual-Tone Multi-Frequency). RFC2833: el modo predeterminado, los DTMF se envían con RTP pero fuera de la transmisión de audio. INBAND: El DTMF se envía en audio de la conversación actual, siendo audible desde los altavoces. Requiere una alta carga de CPU. INFORMACIÓN: Aunque este método es muy confiable, no es compatible con todos los dispositivos PBX y muchos enlaces troncales SIP.",
@@ -20,7 +20,7 @@
             "INSECURE": "Especifique cómo manejar las conexiones con el par, permitiendo configuraciones inseguras",
             "NAME": "Solo se admiten números, letras y caracteres específicos (._)",
             "NAT": "Cambia el comportamiento de Asterisk para clientes detrás de un firewall. Si alguna de las opciones separadas por comas es 'no', Asterisk ignorará cualquier otra configuración y establecerá nat = no.",
-            "OTHERFIELDS": "Otros campos para agregar en los troncos conf archivos. Siga el formato de asterisco predeterminado (clave = valor), cada campo en una sola fila",
+            "OTHERFIELDS": "Otros campos para agregar en las troncales conf archivos. Siga el formato de Asterisk predeterminado (clave = valor), cada campo en una sola fila ",
             "OUTBOUNDPROXY": "Dirección IP o nombre DNS SRV (excluyendo el prefijo _sip._udp): nombre SRV, nombre de host o dirección IP del SIP Proxy saliente. Envíe la señalización saliente a este proxy, no directamente a los dispositivos. Válido solo para type = peer.",
             "PORT": "El número de puerto SIP",
             "QUALIFY": "Determinar cuándo se puede lograr el SIP",
@@ -97,7 +97,7 @@
         "ABANDONED": "Abandonado",
         "ACCOUNT": "Cuenta",
         "ACTION": "Acción",
-        "ACTIONS": "Comportamiento:",
+        "ACTIONS": "Acciones:",
         "ACTIVE": "Activo",
         "ADD_ACTION": "Agregar acción",
         "ADD_ALLCONDITION": "Agregar condición",
         "ADD_AUTOMATION": "Añadir automatización",
         "ADD_CANNEDANSWER": "Agregar respuesta enlatada",
         "ADD_CUSTOMDASHBOARD": "Agregar cuadro de mando personalizado",
-        "ADD_DASHBOARDITEM": "Agregar Widget del tablero",
+        "ADD_DASHBOARDITEM": "Agregar Widget de Tablero",
         "ADD_INTERVAL": "Añadir intervalo",
         "ADD_PAUSE": "Añadir Pausa",
         "ADD_PHONE_TO_URI": "Agregar teléfono a URL",
         "AUG": "agosto",
         "AUTOCREATECONTACT": "Crear contacto automáticamente",
         "AUTOMATIONS": "Automatizaciones",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BACKGROUND": "Fondo",
         "BACKGROUND_COLOR": "Color de fondo",
         "BROWSER": "Navegador",
         "CALL_LIMIT": "Límite de llamadas",
         "CALL_STATUS": "Estado de llamada",
         "CHANNEL": "Canal",
-        "CHAT": "Charla",
+        "CHAT": "Chat",
         "CLOCK": "Reloj",
-        "CLONE_CUSTOMDASHBOARD": "Clone Cuadro de Mando",
+        "CLONE_CUSTOMDASHBOARD": "Clonar Cuadro de Mando",
         "COLOR": "Color",
-        "CONDITIONS&ACTIONS": "Condiciones",
+        "CONDITIONS&ACTIONS": "Condiciones y Acciones",
         "CONFIGURATION": "Configuración",
         "CONFIRM_PASSWORD": "Confirmar contraseña",
         "CONTACT_MANAGER": "Administrador de contactos",
         "CSV": "CSV",
         "CURRENTDAY": "Día actual",
         "CUSTOMDASHBOARDS": "Cuadro de Mando Personalizado",
-        "CUSTOMTYPE": "Custom [ruta]",
+        "CUSTOMTYPE": "Personalizado [ruta]",
         "DAILY": "Diario",
         "DARK": "Oscuro",
         "DASHBOARD": "Cuadro de Mando",
         "FROMDOMAIN": "Del dominio",
         "FROMUSER": "Del usuario",
         "GENERAL": "General",
-        "GOTODASHBOARD_CUSTOMDASHBOARD": "Ir al cuadro de vista previa",
+        "GOTODASHBOARD_CUSTOMDASHBOARD": "Ir a vista Previa de Cuadro de Mando",
         "GOTOREALTIME_TRUNK": "Ir a Troncal en tiempo real",
-        "GOTO_CUSTOMDASHBOARD": "Ir al cuadro de vista previa",
-        "GOTO_TRUNK": "Ir al truncal",
-        "HOST": "Anfitrión",
+        "GOTO_CUSTOMDASHBOARD": "Ir a vista Previa de Cuadro de Mando",
+        "GOTO_TRUNK": "Ir a Troncal",
+        "HOST": "Host",
         "HOUR": "Hora",
         "HOURLY": "Cada hora",
         "HOUR_ON_MINUTE": "Hora en minuto",
         "LASTUNIT": "Unidad",
         "LAST_MONTH": "El mes pasado",
         "LAST_SEVEN_DAYS": "Los últimos siete días",
-        "LAST_THIRTY_DAYS": "Últimos Thirthy Days",
+        "LAST_THIRTY_DAYS": "Últimos 30 Días",
         "LAYOUT": "Diseño",
         "LIGHT": "Ligero",
-        "LINK": "Enlace [https: //]",
+        "LINK": "Enlace [https://]",
         "LIST": "Lista",
         "LOCATION": "Ubicación",
         "MAIL": "Email",
         "MONTH_AT": "Mes en",
         "MONTH_DAYS": "Mes días",
         "MOTION_BAR": "Motion Bar",
-        "MOVE_WIDGET": "Move Widget",
+        "MOVE_WIDGET": "Mover Widget",
         "MULTIBARCHART": "Gráfico Multibar",
         "NAME": "Nombre",
         "NAT": "NAT",
         "NEW_ANYCONDITION": "Nueva condición",
         "NEW_AUTOMATION": "Nueva automatización",
         "NEW_CANNEDANSWER": "Nueva respuesta enlatada",
-        "NEW_CUSTOMDASHBOARD": "Nuevo cuadro personalizado",
-        "NEW_DASHBOARDITEM": "Nuevo widget para el cuadro",
+        "NEW_CUSTOMDASHBOARD": "Nuevo Cuadro de Mando Personalizado",
+        "NEW_DASHBOARDITEM": "Nuevo Widget Para Cuadro de Mando",
         "NEW_INTERVAL": "Nuevo intervalo",
         "NEW_PAUSE": "Nueva pausa",
         "NEW_SCHEDULE": "Nuevo horario",
         "REPORTTYPE": "Tipo de informe",
         "ROWSPERPAGE": "Filas por página",
         "SAT": "sábado",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SCHEDULER": "Programador",
         "SEARCH_FOR_ANYONE": "Buscar",
         "SECRET": "Secreto",
         "TEMPLATES": "Plantillas",
         "THEME": "Tema",
         "THU": "jueves",
-        "TIMEOUT": "Se acabó el tiempo",
+        "TIMEOUT": "Timeout",
         "TIMEZONE": "Zona horaria",
         "TIME_RANGE": "Intervalo de tiempo",
         "TITLE": "Título",
         "WED": "miércoles",
         "WEEK": "Semana",
         "WEEKDAY": "Día laborable",
-        "WEEKDAYS": "Días de semana",
+        "WEEKDAYS": "Días de la Semana",
         "WEEKLY": "Semanal",
-        "WEEK_DAYS": "Días de semana",
+        "WEEK_DAYS": "Días de la Semana",
         "WHERE": "Dónde",
         "WINDOWHEIGHT": "Altura de la ventana (px)",
         "WINDOWWIDTH": "Ancho de ventana (px)",
         "DISPOSITIONS": "Plan",
         "EDIT_DISPOSITION": "Editar disposición",
         "NEW_DISPOSITION": "Nueva disposición",
-        "CLONE_TRUNK": "Clon Trunk",
+        "CLONE_TRUNK": "Clonar Troncal",
         "BODY": "Cuerpo",
         "CANNEDANSWERS": "Respuestas enlatadas",
         "REPORTFOLDER": "Carpeta de informes",
index f0e6eda..33a9cba 100644 (file)
@@ -6,12 +6,12 @@
         "HELP": {
             "AFTERCALLWORK": "Si está habilitado, el agente se configurará en Pausa después de completar una llamada",
             "AFTERCALLWORKDURATION": "Longitud de pausa activada por la opción de trabajo posterior a la llamada",
-            "ANNOUNCECALLERPOSITION": "Se usa para definir si se debe anunciar la posición de la persona que llama en la cola: No = nunca; Sí = siempre; Límite = solo si está dentro del límite definido por announce-position-limit; Más = solo si está más allá del valor definido por announce-position-limit",
-            "ANNOUNCEFREQUENCY": "Con qué frecuencia se anuncia la posición de la persona que llama y / o el tiempo de espera estimado en la cola (cero para deshabilitar)",
-            "ANNOUNCEHOLDTIME": "Reproduce el tiempo de espera estimado junto con los anuncios periódicos (Sí / No / Una vez)",
+            "ANNOUNCECALLERPOSITION": "Se usa para definir si se debe anunciar la posición de la persona que llama en la cola: No=nunca; Sí=siempre; Límite=solo si está dentro del límite definido por announce-position-limit; Más=solo si está más allá del valor definido por announce-position-limit",
+            "ANNOUNCEFREQUENCY": "Con qué frecuencia se anuncia la posición de la persona que llama y/o el tiempo de espera estimado en la cola (cero para deshabilitar)",
+            "ANNOUNCEHOLDTIME": "Reproduce el tiempo de espera estimado junto con los anuncios periódicos (Sí/No/Una vez)",
             "ANNOUNCEPOSITIONLIMIT": "Se usa si la posición de anuncio se define como 'límite' o 'más'",
             "ANNOUNCETOAGENT": "Reproduzca un anuncio para el agente que contesta la llamada (generalmente para informarle de qué cola proviene la persona que llama)",
-            "AUTOPAUSE": "Habilita / deshabilita la pausa automática de los agentes que no responden una llamada. Si está habilitado, hace que el agente se pause en todas las colas a las que pertenece",
+            "AUTOPAUSE": "Habilita/Deshabilita la pausa automática de los agentes que no responden una llamada. Si está habilitado, hace que el agente se pause en todas las colas a las que pertenece",
             "CONTEXT": "Permite que una persona que llama salga de la cola presionando un solo dígito DTMF. Si se especifica un contexto y la persona que llama ingresa un número, ese dígito intentará coincidir en el contexto especificado, y la ejecución del plan de marcado continuará allí.",
             "ESTIMATEDHOLDTIMEANNOUNCE": "Elija un sonido definido en Herramientas. Predeterminado = \"El tiempo de espera estimado actual es\". Indefinido = sin anuncio",
             "HOLDTIMEANNOUNCE": "Elija un sonido definido en Herramientas. Predeterminado = \"Tiempo de espera\". Indefinido = sin anuncio",
             "RECORDING": "Habilitar grabación de llamadas",
             "REPORTHOLDTIMEAGENT": "Permite informar el tiempo de espera del llamante al agente en la cola antes de la conexión",
             "RETRY": "Tiempo en segundos de espera antes de llamar al siguiente agente en la cola cuando el tiempo de espera ha expirado",
-            "RINGINUSE": "Para evitar / permitir el envío de llamadas a miembros cuyo estado sea En uso",
+            "RINGINUSE": "Para evitar/permitir el envío de llamadas a miembros cuyo estado sea En uso",
             "SECONDSANNOUNCE": "Elija un sonido definido en Herramientas. Predeterminado = \"segundos\". Indefinido = sin anuncio",
             "SETINTERFACEVARIABLES": "Si se establece en sí, justo antes de que la persona que llama se conecte con un agente de cola, se establecerán algunas variables (para más información, consulte los documentos wiki)",
             "SETQUEUEENTRYVARIABLES": "Si se establece en sí, justo antes de que la persona que llama se conecte con un agente de cola se establecerán algunas variables (para más información, vea los documentos wiki)",
             "SETQUEUEVARIABLES": "Si se establece en sí, justo antes de que la persona que llama se conecte con un agente de cola y abandone la cola, se establecerán algunas variables (para obtener más información, consulte los documentos wiki)",
             "THANKYOUANNOUNCE": "Elija un sonido definido en Herramientas. Predeterminado = \"Gracias por su paciencia\". Indefinido = sin anuncio",
             "THEREAREANNOUNCE": "Elija un sonido definido en Herramientas. Predeterminado = \"Hay\". Indefinido = sin anuncio",
-            "TIMEOUT": "Cuántos segundos para sonar un dispositivo",
+            "TIMEOUT": "Cuántos segundos para sonar en dispositivo",
             "TIMEOUTRESTART": "En caso afirmativo, esto restablece el tiempo de espera para que un agente responda cuando se recibe un estado OCUPADO o CONGESTIÓN del canal",
             "VOICEMAIL_CONTEXT": "El contexto de la extensión relativa",
             "WAITINGCALLSANNOUNCE": "Elija un sonido definido en Herramientas. Predeterminado = \"llamadas en espera\". Indefinido = sin anuncio",
         "ABANDONED": "Abandonado",
         "ABANDONEDCALLS": "Llamadas de cola abandonadas",
         "ABANDONED_CALLS": "Llamadas abandonadas",
-        "ACCOUNTNAME": "Nombre de la cuenta",
+        "ACCOUNTNAME": "Nombre de Cuenta",
         "ACTIONS": "Comportamiento",
         "ACTIVE": "Activo",
-        "ADD_AGENT_TO_QUEUE": "Agregar agente a la cola",
+        "ADD_AGENT_TO_QUEUE": "Agregar Agente a Cola",
         "ADD_AGENT_TO_VOICEQUEUE": "Agregar agente a cola de voz",
         "ADD_CHANSPY": "Añadir ChanSpy",
         "ADD_CONTEXT": "Agregar contexto",
         "ADD_VOICEMAIL": "Añadir correo de voz",
         "ADD_VOICEQUEUE": "Agregar cola de voz",
         "ADVANCED": "Avanzado",
-        "AFTERCALLWORK": "Después del trabajo de llamada",
-        "AFTERCALLWORKDURATION": "Después de la duración del trabajo de llamada",
+        "AFTERCALLWORK": "Trabajo Después de Llamada",
+        "AFTERCALLWORKDURATION": "Duración de Trabajo Después de Llamada",
         "AGENT": "Agente",
         "AGENTADD_QUEUE": "Agregar cola de agente a voz",
         "AGENTADD_VOICEQUEUE": "Agregar cola de agente a voz",
         "AUDIO": "Audio",
         "AUDIOFILES": "Archivos de sonido",
         "AUDIO_FILES": "Archivos de sonido",
-        "AUTH": "Auth",
+        "AUTH": "Autenticación",
         "AUTOPAUSE": "Pausa Automática",
-        "AVG_BILLABLE": "Avg Billable",
+        "AVG_BILLABLE": "AVG Facturable",
         "AVG_DURATION": "Duración de Av",
         "AVG_HOLD_TIME": "Tiempo promedio de espera",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "BILLABLESECONDS": "Segundos facturables",
         "BUSY": "Ocupado",
         "CALLED": "Llamado",
         "CANT_PLAY_GSM_AUDIO_FILES": "No se pueden reproducir archivos de audio gsm o wav49",
         "CHANSPIES": "ChanSpy",
         "CHANSPY": "ChanSpy",
-        "CHAT": "Charla",
-        "CLEAR": "Claro",
-        "CLOSE": "Cerca",
-        "CLOSING": "Clausura",
+        "CHAT": "Chat",
+        "CLEAR": "Limpiar",
+        "CLOSE": "Cerrar",
+        "CLOSING": "Cerrando",
         "CONFIRM_PASSWORD": "Confirmar contraseña",
         "CONNECTED": "Conectado",
         "CONTEXT": "Contexto",
         "DELETE_INBOUNDROUTE": "Eliminar la ruta de entrada",
         "DELETE_INTERNALROUTE": "Eliminar ruta interna",
         "DELETE_MESSAGE": "Borrar",
-        "DELETE_MOHSOUND": "Eliminar música en espera sonido",
+        "DELETE_MOHSOUND": "Eliminar Sonido de Música en Espera",
         "DELETE_MUSICONHOLD": "Eliminar música en espera",
         "DELETE_OUTBOUNDROUTE": "Eliminar ruta de salida",
-        "DELETE_VOICEDISPOSITION": "Eliminar la disposición de voz",
+        "DELETE_VOICEDISPOSITION": "Eliminar Disposición de Voz",
         "DELETE_VOICEMAIL": "Eliminar correo de voz",
         "DELETE_VOICEQUEUE": "Eliminar cola de voz",
         "DELETE_VOICERECORDING": "Eliminar grabación de voz",
         "DESTINATIONPATTERN": "Patrón de destino",
         "DETAILS": "Detalles",
         "DIAL": "Marcar",
-        "DID": "HIZO",
+        "DID": "DID",
         "DIRECTORY": "Directorio",
         "DISPOSITION": "Disposición",
         "DOWNLOAD_MESSAGE": "Descargar",
-        "DOWNLOAD_MOHSOUND": "Descargar Music On Hold sound",
+        "DOWNLOAD_MOHSOUND": "Descargar Sonido de Música en Espera",
         "DOWNLOAD_VOICERECORDING": "Descargar grabación de voz",
         "DURATION": "Duración",
         "EDIT_AGI": "Editar AGI",
         "EDIT_CUSTOM": "Editar personalizado",
         "EDIT_DIAL": "Editar marcación",
         "EDIT_EXTERNALDIAL": "Editar marcación externa",
-        "EDIT_GOTO": "Editar GoTo",
-        "EDIT_HANGUP": "Editar Hangup",
+        "EDIT_GOTO": "Edit GoTo",
+        "EDIT_HANGUP": "Editar Colgar",
         "EDIT_INBOUNDROUTE": "Editar ruta de entrada",
-        "EDIT_INTERNALDIAL": "Editar dial interno",
+        "EDIT_INTERNALDIAL": "Editar Discado Interno",
         "EDIT_INTERNALROUTE": "Editar ruta interna",
         "EDIT_INTERVAL": "Intervalo de edición",
         "EDIT_MUSICONHOLD": "Editar música en espera",
-        "EDIT_OUTBOUNDDIAL": "Editar marcador de salida",
+        "EDIT_OUTBOUNDDIAL": "Editar Discado de Salida",
         "EDIT_OUTBOUNDROUTE": "Editar ruta de salida",
         "EDIT_PLAYBACK": "Editar reproducción",
         "EDIT_QUEUE": "Editar cola",
         "EDIT_VOICEQUEUE": "Editar cola de voz",
         "EDIT_VOICERECORDING": "Editar grabación de voz",
         "EMAIL": "Email",
-        "EMAILBODY": "Cuerpo del correo electronico",
+        "EMAILBODY": "Cuerpo del Correo Electrónico",
         "EMAILSUBJECT": "Asunto del email",
         "ENDEDAT": "Terminado en",
         "ENVELOPE": "Sobre",
         "ESTIMATEDHOLDTIMEANNOUNCE": "Anuncio estimado de tiempo de espera",
         "EXTENSION": "Extensión",
-        "EXTERNALDIAL": "Dial externo",
+        "EXTERNALDIAL": "Discado Externo",
         "FAILED": "Ha fallado",
         "FAX": "Fax",
         "FILE": "Archivo",
         "FULLNAME": "Nombre completo",
         "GENERAL": "General",
         "GOSUB": "GoSub",
-        "GOTO": "Ir",
+        "GOTO": "Goto",
         "GOTOREALTIME_VOICEQUEUE": "Ir a colas de voz en tiempo real",
         "GOTO_VOICEQUEUE": "Ir a colas de voz en tiempo real",
         "HANGUP": "Colgar",
         "HANGUPCAUSE_27": "27 = Destino fuera de servicio",
         "HANGUPCAUSE_38": "38 = Red fuera de servicio",
         "HANGUPCAUSE_41": "41 = falla temporal",
-        "HANGUP_CAUSE": "Causa de Hangup",
+        "HANGUP_CAUSE": "Causa de Colgado",
         "HOLDTIMEANNOUNCE": "Anunciar el tiempo de espera",
         "ID": "Id",
-        "IDLE": "Ocioso",
+        "IDLE": "Idle",
         "INBOUNDROUTES": "Rutas de entrada",
         "INFO": "Información",
         "INTERNAL": "Interno",
-        "INTERNALDIAL": "Dial interno",
+        "INTERNALDIAL": "Discado Interno",
         "INTERNALROUTES": "Rutas internas",
         "INTERVALS": "Intervalos",
         "INUSE": "En uso",
         "MACRO": "Macro",
         "MAIL": "Email",
         "MAILBOX": "Buzón",
-        "MAILBOX@CONTEXT": "Buzón @ Contexto",
+        "MAILBOX@CONTEXT": "Buzón@Contexto",
         "MAXLENGTH": "Longitud máxima",
         "MAXMESSAGES": "Mensajes máximos",
         "MAXSECONDS": "Max segundos",
         "NEW_CONTEXT": "Nuevo contexto",
         "NEW_INBOUNDROUTE": "Nueva ruta de entrada",
         "NEW_INTERNALROUTE": "Nueva ruta interna",
-        "NEW_MOHSOUND": "Nuevo sonido de Music On Hold",
+        "NEW_MOHSOUND": "Nuevo Sonido de Música en Espera",
         "NEW_MUSICONHOLD": "Nueva música en espera",
         "NEW_OUTBOUNDROUTE": "Nueva ruta de salida",
         "NEW_VOICEMAIL": "Nuevo mensaje de voz",
         "ONHOLD": "En espera",
         "OPENCHANNEL": "Canal abierto",
         "OPTIONS": "Opciones",
-        "OUTBOUNDDIAL": "Marcación de salida",
+        "OUTBOUNDDIAL": "Discado Saliente",
         "OUTBOUNDROUTES": "Rutas de salida",
         "OUTBOUND_CALLS": "Llamadas salientes",
         "PAGE": "Página",
         "REGISTERED": "Registrado",
         "REGISTRY": "Registro",
         "REJECTED": "Rechazado",
-        "REPORTHOLDTIMEAGENT": "Tiempo de espera del agente de informes",
-        "RETRY": "Rever",
-        "RING": "anillo",
-        "RINGGROUP": "Grupo de anillos",
+        "REPORTHOLDTIMEAGENT": "Reporte Tiempo de Espera Agente",
+        "RETRY": "Retry",
+        "RING": "Ring",
+        "RINGGROUP": "Grupo de Ring",
         "RINGING": "Zumbido",
-        "RINGINUSE": "Anillo en uso",
+        "RINGINUSE": "Ring en uso",
         "ROWSPERPAGE": "Filas por página",
         "RULE": "Regla",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH_FOR_ANYONE": "Buscar",
-        "SECONDSANNOUNCE": "Segundos anuncian",
+        "SECONDSANNOUNCE": "Anuncio Segundos",
         "SELECTED": "Seleccionado",
         "SELECTED_AGENTS": "Agentes seleccionados",
         "SELECTED_TEAMS": "Equipos seleccionados",
         "TAGS": "Etiquetas",
         "TALKING": "Hablando",
         "TEAMADD_VOICEQUEUE": "Agregar cola de equipo a voz",
-        "TECHNOLOGY/RESOURCE": "Tecnología / Recurso",
+        "TECHNOLOGY/RESOURCE": "Tecnología/Recurso",
         "TELEPHONES": "Teléfonos",
-        "THANKYOUANNOUNCE": "'Gracias' Anuncie",
+        "THANKYOUANNOUNCE": "'Gracias' Anuncio",
         "THEREAREANNOUNCE": "'Hay' Anuncio",
-        "TIMEOUT": "Se acabó el tiempo",
+        "TIMEOUT": "Timeout",
         "TIMEOUTRESTART": "Tiempo de reinicio",
-        "TIMER": "Minutero",
+        "TIMER": "Temporizador",
         "TIMEZONE": "Zona horaria",
         "TOTAL": "Total",
         "TOTAL_OFFERED": "Total ofrecido",
         "TRUNKS": "Troncal",
         "TRUNK_STATUS": "Estado del Troncal",
         "TYPE": "Tipo",
-        "UNAVAILABLE": "Indisponible",
+        "UNAVAILABLE": "No Disponible",
         "UNIQUEID": "Identificación única",
         "UNKNOWN": "Desconocido",
         "UNMANAGED": "No administrado",
         "VOICEQUEUES": "Colas de voz",
         "VOICERECORDINGS": "Grabaciones de voz",
         "WAITING": "Esperando",
-        "WAITINGCALLSANNOUNCE": "Llamadas en espera anuncian",
+        "WAITINGCALLSANNOUNCE": "Anuncio Llamadas en Espera",
         "WAITING_FOR_AGENT": "Agentes en espera",
         "WAITING_FOR_AGENTS": "Esperando agentes",
         "WEIGHT": "Peso",
         "WRAPUPTIME": "Tiempo de envolvimiento",
         "YES": "Sí",
-        "YOUARENEXTANNOUNCE": "'Eres el próximo' Anunciar",
+        "YOUARENEXTANNOUNCE": "'Eres el Próximo' Anuncio",
         "ADD_VOICEPREFIX": "Añadir Prefijo",
         "AGENTADD_VOICEPREFIX": "Agregar agente a prefijo",
         "DELETE_VOICEPREFIX": "Eliminar prefijo",
         "PAUSE_TIME": "Tiempo de pausa",
         "DIALER": "Marcador",
         "INBOUND": "Entrante",
-        "OUTBOUND": "De salida",
+        "OUTBOUND": "Saliente",
         "MANDATORYDISPOSITION": "Disposición obligatoria",
         "MANDATORYDISPOSITIONPAUSEID": "Estado de pausa de disposición obligatoria"
     }
index 905d92d..de37234 100644 (file)
@@ -7,25 +7,25 @@
         "APP_SERVERS": "Servidores de aplicaciones",
         "APRIL": "abril",
         "AUGUST": "agosto",
-        "BACK": "Espalda",
+        "BACK": "Atrás",
         "CALL": "Llamada",
-        "CHAT": "CHARLA",
+        "CHAT": "CHAT",
         "CLOUD_SYNC": "Cloud Sync",
-        "CONTACT_XCALLY_MOTION_SUPPORT": "Póngase en contacto con el soporte de xCALLY Motion",
+        "CONTACT_XCALLY_MOTION_SUPPORT": "Contactar a soporte  xCALLY Motion",
         "DECEMBER": "diciembre",
         "DELETE": "Borrar",
         "ENABLE_WRITING": "Habilitar escritura",
         "EVENTS": "Eventos",
-        "EXPIRATION_DATE": "Fecha de caducidad",
-        "EXPIRATION_GRAY_PERIOD": "Período gris caducidad",
-        "EXPIRATION_REASON": "Razón de caducidad",
+        "EXPIRATION_DATE": "Fecha de Expiración",
+        "EXPIRATION_GRAY_PERIOD": "Período Gris de Expiración",
+        "EXPIRATION_REASON": "Razón de Expiración",
         "EXPIRATION_REASON_MESSAGE": "Su licencia ha expirado o su ID única de la máquina se ha actualizado debido a un cambio en su sistema. Póngase en contacto con el equipo de soporte de Motion de xCALLY enviando su viejo y nuevo uuid.",
         "EXPIRATION_REASON_MESSAGE_CHANGED": "La ID única de su máquina se ha actualizado debido a un cambio en su sistema. Póngase en contacto con el equipo de soporte de Motion de xCALLY enviando su viejo y nuevo uuid.",
         "EXPIRATION_REASON_MESSAGE_GRAY": "Su licencia ha expirado o ha sido desactivada. Póngase en contacto con el equipo de soporte de Motion de xCALLY.",
         "FEBRUARY": "febrero",
         "FRIDAY": "viernes",
         "FRIENDS": "Amigos",
-        "GRAY_PERIOD_EXPIRATION": "Periodo de Periodo Gris",
+        "GRAY_PERIOD_EXPIRATION": "Expiración de Periodo Gris",
         "GROUPS": "Grupos",
         "INFO": "Información",
         "JANUARY": "enero",
         "NOVEMBER": "noviembre",
         "NO_AVAILABLE_GROUPS": "No hay grupos disponibles",
         "OCTOBER": "octubre",
-        "OLD_TOKEN": "Old Token",
+        "OLD_TOKEN": "Token Antiguo",
         "QUICK_SETTINGS": "Ajustes rápidos",
         "RECENT": "Reciente",
         "REPLY_PLACEHOLDER": "Escribe y presiona enter para enviar el mensaje",
         "RETRO_THRUSTERS": "Retro Thrusters",
         "SATURDAY": "sábado",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH": "Buscar",
-        "SEND_EMAIL_TO": "Enviar el email a",
+        "SEND_EMAIL_TO": "Enviar Email a",
         "SEND_MESSAGE": "Enviar mensaje",
         "SEPTEMBER": "septiembre",
         "START_NEW_CHAT": "Comenzar un nuevo chat",
         "SUNDAY": "domingo",
         "THURSDAY": "jueves",
         "TODAY": "HOY",
-        "TOKEN": "Simbólico",
+        "TOKEN": "Token",
         "TUESDAY": "martes",
         "USERS": "Usuarios",
         "USER_STATS": "Estadísticas del usuario",
         "WARNING": "Advertencia",
         "WEDNESDAY": "miércoles",
-        "YOU": "Usted {{participantes}}"
+        "YOU": "Usted + {{participantes}}"
     }
 }
\ No newline at end of file
index 6d72776..f741315 100644 (file)
@@ -10,8 +10,8 @@
         "EMAIL_ADRESS": "Dirección de correo electrónico",
         "GO_BACK": "Regrese para iniciar sesión",
         "PASSWORD": "Contraseña",
-        "PASSWORD_CONFIRM": "Contraseña confirmada)",
-        "PASSWORD_RESET": "Restablecimiento de contraseña",
+        "PASSWORD_CONFIRM": "Contraseña (Confirmada)",
+        "PASSWORD_RESET": "Restablecer Contraseña",
         "PASSWORD_RESET_ERROR": "Error de restablecimiento de contraseña",
         "PASSWORD_RESET_MESSAGE": "Su contraseña ha sido restablecida correctamente, ¡ahora puede iniciar sesión!",
         "TITLE": "Restablecer su contraseña",
index a16561d..0d073d4 100644 (file)
@@ -6,8 +6,8 @@
             "PASSWORD_REQUIRED": "Campo obligatorio",
             "SECURE_PASSWORD_PATTERN": "La contraseña debe tener al menos 8 caracteres de longitud y tener 1 carácter en minúscula, 1 carácter en mayúscula, 1 número y 1 carácter especial ~! @"
         },
-        "ACTIONS": "Comportamiento",
-        "ATTENDED_TRANSFER": "Asistió a Tranfer",
+        "ACTIONS": "Acciones",
+        "ATTENDED_TRANSFER": "Transferencia Asistida",
         "AUDIO": "Audio",
         "AUTOANSWER": "Respuesta automática",
         "BROWSER": "Navegador",
@@ -20,7 +20,7 @@
         "DANISH": "danés",
         "DUTCH": "holandés",
         "ENGLISH": "Inglés",
-        "FILENAME": "Nombre del archivo",
+        "FILENAME": "Nombre de Archivo",
         "FINNISH": "finlandés",
         "FRENCH": "francés",
         "FULLNAME": "Nombre completo",
@@ -32,7 +32,7 @@
         "ITALIAN": "italiano",
         "JAPANESE": "japonés",
         "KOREAN": "coreano",
-        "LATVIAN": "letón",
+        "LATVIAN": "latvian",
         "LICENSE": "Licencia",
         "LOGIN_TIME": "Hora de inicio",
         "MICROPHONE": "Micrófono",
         "RECORDING": "Grabación",
         "REGISTERED": "Registrado",
         "REQUIREMENTS": "Requisitos",
-        "RESETPASSWORD": "Restablecer la contraseña",
+        "RESETPASSWORD": "Restablecer Contraseña",
         "RESUME": "Fin de pausa",
         "RINGING": "Tono de llamada",
         "RINGINGDEVICE": "Dispositivo de llamada",
         "RUSSIAN": "ruso",
-        "SAVE": "Salvar",
+        "SAVE": "Guardar",
         "SEARCH": "Buscar",
         "SERVICES": "Servicios",
         "SETTINGS": "Configuraciones",
@@ -72,8 +72,8 @@
         "STAY_LOGGED": "Permanecer conectado",
         "SWEDISH": "sueco",
         "TARGET": "Objetivo",
-        "TOGGLE_NAVIGATION": "Navegación de palanca",
-        "TOGGLE_NAVIGATION_FOLD": "Alternar pliegue de navegación",
+        "TOGGLE_NAVIGATION": "Palanca de Navegación",
+        "TOGGLE_NAVIGATION_FOLD": "Alternar Palanca de Navegación",
         "TOGGLE_NAVIGATION_MODE": "Alternar el modo de navegación",
         "TOGGLE_QUICK_PANEL": "Alternar panel rápido",
         "TRANSFER": "Transferir",
@@ -91,7 +91,7 @@
         "ESTONIAN": "Estonio",
         "CZECH": "checo",
         "BRAZILIAN": "brasileño",
-        "CONFERENCE": "Conferencia con 2 sesiones activas.",
+        "CONFERENCE": "Conferencia con 2 Sesiones Activas",
         "CHANGE_LANGUAGE_MESSAGE": "Recuerde actualizar la página para aplicar el soporte RTL (si está habilitado)",
         "CHANGE_LANGUAGE_TITLE": "Cambiar idioma"
     }
index 89eefab..0611ce0 100644 (file)
@@ -58,7 +58,7 @@
 
     <script src="scripts/vendor.ac8b62eb.js"></script>
 
-    <script src="scripts/app.95fc445c.js"></script>
+    <script src="scripts/app.19882861.js"></script>
 
     <!-- CKEDITOR -->
     <script src="assets/plugins/ckeditor/ckeditor.js"></script>
similarity index 55%
rename from public/scripts/app.95fc445c.js
rename to public/scripts/app.19882861.js
index 9474afa..708192a 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.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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",limit:10,offset: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",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Tags",fields:"id,name",sort:"name",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: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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",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",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",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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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,phoneBarAutoUpdaterUrl,enableEmailPreview,split,splitSizeCsv,splitSizePdf,splitSizeXlsx,messagesAlignment,phoneBarRememberMeEnabled,rtlSupport",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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",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",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,phoneBarEnableVideoRecording",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,phoneBarEnableVideoRecording",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,phoneBarEnableVideoRecording",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){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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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("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";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(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(f).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(f).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.sessions[t].unmute();f();break;default:console.log("unknown device")}}function v(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 h(){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 f(){p.webrtc=_.pick(m.conf,u),t.localStorage.setItem("motion2.user:"+m.conf.id,JSON.stringify(p))}function b(e){this.remotePlayer.srcObject=e.stream,this.remotePlayer.play()}function E(e){var t,n,a=e.session;switch(e.originator){case"local":a.outgoing=!0,a.name=e.request.ruri.user,a.user=e.request.ruri.user,v(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)}),v(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=b.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=b.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),g("speaker"),g("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,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)&&I(),_.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)&&I(),_.remove(this.sessions,{id:e.id}),2!==m.sessions.length&&(m.canGoInConference=!1)}.bind(this,a)),this.sessions.push(a),i.$$phase||i.$root.$$phase||i.$apply()}function A(){m.target="",document.getElementById("ms-target").blur(),document.getElementById("ms-target").value="",i.$broadcast("angucomplete-alt:clearInput","ms-target-wrap")}function y(e,t,n,a){return function(){o.show(o.simple().textContent(t).position(n).hideDelay(a)),e.terminate()}}function S(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 T(){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 I(){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),n.bind("keyup",function(e){switch(e.keyCode){case 27:s(function(){m.showDialpad=!1})}}),m.$onInit=function(){g("ringing"),g("speaker"),this.ua.on("registered",function(){console.log("registered"),this.registered=!0}.bind(this)),this.ua.on("unregistered",function(){console.log("unregistered"),this.registered=!1}.bind(this)),this.ua.on("newRTCSession",E.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,h()?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 S(e=(e=e.replace(/\(/g,"")).replace(/\)/g,"")).then(function(e){e&&m.ua.call(e,m.sessionConf)}).then(function(){A()})}},m.hold=function(e){e.hold({useUpdate:!1})},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 S(e)}).then(function(e){t.refer(e,{eventHandlers:{requestSucceeded:y(t,"requestSucceeded","top right",3e3),requestFailed:y(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.answer=function(e){m.conf.microphoneId?m.sessionConf.mediaConstraints.audio={deviceId:m.conf.microphoneId}:m.sessionConf.mediaConstraints.audio=!0,e.answer(m.sessionConf)},m.terminate=function(e){e.terminate()},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=g,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):A():A()},m.targetSelected=function(e){e&&(m.target=e.originalObject.target,m.call(),A())},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(){T()},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(){T()},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=T,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,g("ringing"),g("speaker"))})}),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 S(t.target).then(function(e){e&&m.sessions[n].refer(e,{eventHandlers:{requestSucceeded:y(m.sessions[n],"requestSucceeded","top right",3e3),requestFailed:y(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="",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.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())}},s.$watch("MsSearchBar.query",function(e,t){if(!angular.isUndefined(e)&&!angular.equals(e,t)&&!o.collapsed){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}))}})}function t(i){return{restrict:"E",scope:{},require:"msSearchBar",controller:"MsSearchBarController as MsSearchBar",bindToController:{debounce:"=?",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"),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"},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.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E(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 A(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:E}:{select_node:A}}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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,a,i,e,n,s,o,r,l,d,c,m,u,p,g,v,h,f,b,E,A,y,S,T,I,C,w,O,x,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=_.find(N.attributes,{name:"sip_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(l,{id:Number(e.value)}))return a.user.get({id:_.find(N.attributes,{name:"sip_id"}).value,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){i.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=_.find(N.attributes,{name:"list_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(E,{id:Number(e.value)}))return a.cmList.get({id:_.find(N.attributes,{name:"list_id"}).value,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,E.push(t),N.values.list_id=k(E,"id","name")}).catch(function(e){i.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(E,"id","name")}}function F(n){var e=_.find(N.attributes,{name:n});if(!_.some(N.attributes,{id:e.value})){if(!_.some(d,{id:Number(e.value)}))return a.trunk.get({id:_.find(N.attributes,{name:n}).value,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,d.push(t),N.values[n]=k(d,"id","name")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_TRUNK",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values[n]=k(d,"id","name")}}function $(){var e=_.find(N.attributes,{name:"queue_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(c,{id:Number(e.value)}))return a.voiceQueue.get({id:_.find(N.attributes,{name:"queue_id"}).value,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){i.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 q(){var e=_.find(N.attributes,{name:"file_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(m,{id:Number(e.value)}))return a.sound.get({id:_.find(N.attributes,{name:"file_id"}).value,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){i.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 G(){var e=_.find(N.attributes,{name:"variable_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(u,{id:Number(e.value)}))return a.variable.get({id:_.find(N.attributes,{name:"variable_id"}).value,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){i.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 H(){var e=_.find(N.attributes,{name:"odbc_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(p,{id:Number(e.value)}))return a.squareOdbc.get({id:_.find(N.attributes,{name:"odbc_id"}).value,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){i.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 V(){var e=_.find(N.attributes,{name:"project_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(g,{id:Number(e.value)}))return a.squareProject.get({id:_.find(N.attributes,{name:"project_id"}).value,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){i.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=_.find(N.attributes,{name:"context"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(v,{id:Number(e.value)}))return a.voiceContext.get({id:_.find(N.attributes,{name:"context"}).value,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){i.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 B(){var e=_.find(N.attributes,{name:"interval_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(h,{id:Number(e.value)}))return a.interval.get({id:_.find(N.attributes,{name:"interval_id"}).value,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){i.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 W(){var e=_.find(N.attributes,{name:"account_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(f,{id:Number(e.value)}))return a.mailAccount.get({id:_.find(N.attributes,{name:"account_id"}).value,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){i.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 Y(){var e=_.find(N.attributes,{name:"sms_account_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(I,{id:Number(e.value)}))return a.smsAccount.get({id:_.find(N.attributes,{name:"sms_account_id"}).value,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){i.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 j(){var e=_.find(N.attributes,{name:"template_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(b,{id:Number(e.value)}))return a.template.get({id:_.find(N.attributes,{name:"template_id"}).value,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){i.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 z(){var e=_.find(N.attributes,{name:"pause_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(C,{id:Number(e.value)}))return a.pause.get({id:_.find(N.attributes,{name:"pause_id"}).value,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){i.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=A.tagName,N.attributes=_.map(A.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:n,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:w,aws_lex_region:O},N.crudPermissions=R,N.onInit=function(){x.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(E,"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":case"trunk_id":F(N.attributes[t].name);break;case"queue_id":$();break;case"file_id":q();break;case"variable_id":G();break;case"odbc_id":H();break;case"project_id":V();break;case"context":Q();break;case"interval_id":B();break;case"account_id":W();break;case"template_id":j();break;case"list_id":U();break;case"sms_account_id":Y();break;case"pause_id":z()}}();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,E,A,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:A.rows||[],pauses:y.rows||[],templates:b.rows||[],lists:E.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="Projects",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(s,e){return m.squareRecording.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.uniqueid+".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++)p.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.chatQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="ChatQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=this;E.currentUser=f.getCurrentUser(),E.license=b,E.userProfile=r,E.userProfileSection=l&&1==l.count?l.rows[0]:null,E.crudPermissions=f.parseCrudPermissions(E.userProfileSection?E.userProfileSection.crudPermissions:null);var A=60,y=1024*A*1024;E.ngFlowOptions={target:"api/cm/contacts/upload",singleFile:!0,maxChunkRetries:1,chunkSize:y,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},E.contacts=c||{count:0,rows:[]},E.options={hidden:!1,hover:!1,isOpen:!1},E.table="cm_contacts",E.selectedContacts=[],E.lists=m||{rows:[],count:0},E.companies=p||{rows:[],count:0},E.tags=v||{rows:[],count:0},E.listsMap=u,E.companiesMap=g,E.selectedTags=[],E.selectedList=null,E.selectedCompany=null,E.query=_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0,page:1},e),E.editdialog=function(e,t){a.go("app.contactmanager.contacts.edit",{id:e.id,crudPermissions:E.crudPermissions})},E.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)})},E.success=I,E.getContacts=function(){E.query.offset=(E.query.page-1)*E.query.limit,f.hasRole("admin")?E.promise=d.cmContact.get(E.query,I).$promise:(E.query.id=E.userProfile.id,E.query.section="Contacts",E.promise=d.userProfile.getResources(E.query,I).$promise)},E.getAssignedCompanies=function(){if(!f.hasRole("admin")){var e=_(E.contacts.rows).map(function(e){return{id:e.CompanyId}}).uniqBy("id").pullAllBy(E.companies.rows,"id").value();if(!_.isEmpty(e)){for(var t=[],n=0;n<e.length;n++)t.push(d.cmCompany.get({id:e[n].id,fields:"id,name"}).$promise);o.all(t).then(function(e){e.forEach(function(e){var t=e.toJSON();t.canSelect=!1,E.companies.rows.push(t);var n={};n[t.id]=t.name,E.companiesMap=_.assignIn(E.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()})})}}},E.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:E.contacts.rows}})},E.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:E.contacts.rows}})},E.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:E.query.ListId||a.params.ListId,CompanyId:E.query.CompanyId||a.params.CompanyId,contact:t,contacts:E.contacts.rows,setting:null,crudPermissions:E.crudPermissions},resolve:{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})}],companies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmCompany@get",{fields:"id,name"}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Companies",fields:"id,name"})}]}})},E.deleteContact=C,E.exportSelectedContacts=function(){var e=angular.copy(E.selectedContacts);return E.selectedContacts=[],e},E.deleteSelectedContacts=function(e){var t=s.confirm().title("Are you sure want to delete the selected contacts?").htmlContent("<b>"+E.selectedContacts.length+" selected</b> will be deleted.").ariaLabel("delete Contacts").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){E.selectedContacts.forEach(function(e){C(e)}),E.selectedContacts=[]})},E.deselectContacts=function(){E.selectedContacts=[]},E.selectAllContacts=function(){E.selectedContacts=E.contacts.rows},E.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&&(E.tags.rows.push(e),h.success({title:"Tag properly created!",msg:e.tag?e.name+" has been created!":""}))})},E.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&&(E.lists.rows.push(e),h.success({title:"List properly created!",msg:e.name?e.name+" has been created!":""}))})},E.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&&(E.companies.rows.push(e),h.success({title:"Company properly created!",msg:e.name?e.name+" has been created!":""}))})},E.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:E.license}}).then(function(){E.getContacts()}).catch(function(e){console.error()})},E.hasPermission=function(){return f.hasPermission(303)||f.hasRole("admin")},E.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 "+A+"MB"}),!1;return!0},a.params.ListId&&(E.selectedList=a.params.ListId),a.params.CompanyId&&(E.selectedCompany=a.params.CompanyId),t.$watch("vm.options.isOpen",function(e){e?n(function(){t.tooltipVisible=E.options.isOpen},600):t.tooltipVisible=E.options.isOpen});var S=!0,T=1;function I(e){E.contacts=e||{count:0,rows:[]}}function C(e){d.cmContact.delete({id:e.id}).$promise.then(function(){_.remove(E.contacts.rows,{id:e.id}),E.contacts.count-=1,E.contacts.rows.length||E.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){E.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=E.query.page),e!==t&&(E.query.page=1),e||(E.query.page=T),E.getContacts())},!0),t.$watch("vm.selectedList",function(e,t){e!==t&&(E.query.ListId=E.selectedList||void 0,E.getContacts())}),t.$watch("vm.selectedCompany",function(e,t){e!==t&&(E.query.CompanyId=E.selectedCompany||void 0,E.getContacts())}),t.$watch("vm.selectedTags",function(e,t){(e.length||t.length)&&E.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,E){var A=this;A.currentUser=b.getCurrentUser(),A.license=f,A.journey=[],A.contact=r||{},A.hoppers=l||{rows:[],count:0},A.finals=d||{rows:[],count:0},A.histories=c||{rows:[],count:0},A.companies=u||{rows:[],count:0},A.lists=p||{rows:[],count:0},A.customFields=g||{rows:[],count:0},A.tags=v||{rows:[],count:0},A.jscriptySessions=h||{rows:[],count:0},A.timelineOptions={scrollEl:"#interaction-content"},A.userProfileSection=E&&1==E.count?E.rows[0]:null,A.crudPermissions=b.parseCrudPermissions(A.userProfileSection?A.userProfileSection.crudPermissions:null),A.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"),"")}),A.queryHopper={fields:"id,phone,scheduledat,priority,recallme,VoiceQueueId,CampaignId,UserId",sort:"-updatedAt",limit:10,page:1},A.queryFinal={fields:"id,uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-id",limit:10,page:1},A.queryHistory={fields:"id,uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-id",limit:10,page:1},A.queryJscriptySession={fields:"id,starttime,endtime,membername,projectname",sort:"-starttime",limit:10,page:1},A.selectedTab=t.params.tab||0,A.onInit=function(){b.hasRole("admin")||(function(){if(!_.some(A.companies.rows,{id:A.contact.CompanyId}))o.cmCompany.get({id:A.contact.CompanyId,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,A.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(A.contact.Tags,function(e){return{id:e.id,name:e.name}});if(!_.isEmpty(e))for(var t=0;t<e.length;t++)_.some(A.tags.rows,{id:e.id})||(e[t].canSelect=!1,A.tags.rows.push(e[t]))}());return o.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){A.users=e||{count:0,rows:[]},A.usersMap=_.mapValues(_.keyBy(A.users.rows,"id"),"fullname"),A.Tags=_.map(A.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({fields:"id,uniqueid,type,source,destination,callerid,starttime,endtime,duration,disposition,amaflags,note,UserId,ContactId",ContactId:e.id,includeAll:!0}).$promise.then(I).catch(function(e){console.error(e)})}}(r))},A.gotoContacts=function(){t.go("app.contactmanager.contacts",{},{reload:!0,notify:!0})},A.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:A.currentUser.userProfileId,section:"Lists",fields:"id,name"})}]},locals:{contacts:m.rows,contact:r}})},A.saveContact=function(){o.cmContact.update({id:A.contact.id},A.contact).$promise.then(function(){s.success({title:"Contact updated!",msg:A.contact.name?A.contact.name+" has been updated!":""})}).then(function(){return o.cmContact.setTags({id:A.contact.id,ids:A.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()})})},A.editCompany=function(e,t){var n=_.find(A.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:A.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})}]}})},A.onSelectList=function(e){if(A.contact.ListId){var t=i.confirm().title("You are selecting the list number: "+A.contact.ListId).textContent("Warning! You won't select a different list for the contact "+A.contact.firstName||A.contact.lastName||A.contact.id).targetEvent(e).ok("Ok").cancel("Cancel");return i.show(t).then(A.onSelectListSuccess).catch(function(){A.contact.ListId=null})}},A.onSelectListSuccess=function(){return o.cmList.getCustomFields({id:A.contact.ListId}).$promise.then(function(e){A.customFields=e||{rows:[],count:0}}).catch(function(e){console.error(e)})},A.getDateFromString=function(e){return null===e?void 0:new Date(e)},A.getHoppers=function(){A.queryHopper.offset=(A.queryHopper.page-1)*A.queryHopper.limit,A.queryHopper.id=A.contact.id,A.promise=o.cmContact.getHoppers(A.queryHopper,T("hoppers")).$promise},A.getFinals=function(){A.queryFinal.offset=(A.queryFinal.page-1)*A.queryFinal.limit,A.queryFinal.id=A.contact.id,A.promise=o.cmContact.getHopperFinals(A.queryFinal,T("finals")).$promise},A.getHistories=function(){A.queryHistory.offset=(A.queryHistory.page-1)*A.queryHistory.limit,A.queryHistory.id=A.contact.id,A.promise=o.cmContact.getHopperHistories(A.queryHistory,T("histories")).$promise},A.getJscriptySessions=function(){A.queryJscriptySession.offset=(A.queryJscriptySession.page-1)*A.queryJscriptySession.limit,A.queryJscriptySession.id=A.contact.id,A.promise=o.cmContact.getJscriptySessions(A.queryJscriptySession,T("jscriptySessions")).$promise},A.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(A.hoppers.rows,{id:e.id}),A.hoppers.count--,A.hoppers.rows.length||A.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")})},A.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:A.hoppers.rows,license:null,setting:null,crudPermissions:A.crudPermissions}})},A.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:A.hoppers.rows,license:null,setting:null,crudPermissions:A.crudPermissions}})},A.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){A[t]=e||{count:0,rows:[]}}}function I(e){e&&e.count&&e.rows.length&&(A.journey=_.concat(A.journey,e.rows))}e.$watch("vm.queryHopper.filter",function(e,t){y?n(function(){y=!1}):(t||(S=A.queryHopper.page),e!==t&&(A.queryHopper.page=1),e||(A.queryHopper.page=S),A.getHoppers())}),e.$watch("vm.queryFinal.filter",function(e,t){y?n(function(){y=!1}):(t||(S=A.queryFinal.page),e!==t&&(A.queryFinal.page=1),e||(A.queryFinal.page=S),A.getFinals())}),e.$watch("vm.queryHistory.filter",function(e,t){y?n(function(){y=!1}):(t||(S=A.queryHistory.page),e!==t&&(A.queryHistory.page=1),e||(A.queryHistory.page=S),A.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,a,i,o,s,t,r,n,l,d,c,m,u,p,g,v,h){var f=this;f.license=p,f.setting=g;function b(e){var t={};for(var n in f.tabs)f.tabs.hasOwnProperty(n)&&(t[n]=f.tabs[n],f.tabs[n].interaction&&(t[n].interaction=_.pick(f.tabs[n].interaction,["id","OpenchannelAccountId","MailAccountId","ChatWebsiteId","FaxAccountId","SmsAccountId","closed","draft"])));i.localStorage.setItem("motion2.user:"+f.user.id,JSON.stringify({tabs:t,currentTab:f.currentTab})),E(e)}function E(e){if(_.isNil(e)||e&&"interaction"===e.type){var t={id:f.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 f.tabs)f.tabs.hasOwnProperty(n)&&t.capacity.hasOwnProperty(f.tabs[n].channel)&&f.tabs[n].interaction&&!f.tabs[n].interaction.closed&&(t.capacity[f.tabs[n].channel]+=1,t.interaction[f.tabs[n].channel].push(f.tabs[n].interaction.id));if(!_.isEqual(f.agentCapacity,t.capacity))return f.agentCapacity=t.capacity,r.rpc.setAgentCapacity(t)}}function A(t){if(f.tabs[t.id]&&(function(e){if(e.channel&&e.interaction)r.user["remove"+_.upperFirst(e.channel)+"Interactions"]({id:f.user.id,ids:[e.interaction.id]}).$promise.catch(function(e){console.error(e)})}(f.tabs[t.id]),delete f.tabs[t.id],f.currentTab=0,b(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:f.user.id,ids:[e.id]}).$promise}).catch(function(e){console.error(e)})}function y(e){e.id=_.random(1e10),e.openedAt=new Date,e.saved=!1,e.badges=0,f.tabs[e.id]=e,f.currentTab=e.id,b(e)}function S(t,n){var 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},a=_.find(f.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id===n.id&&e.channel===t});a?f.currentTab=a.id:y(e)}function T(e){e&&e.uniqueid&&f.notifications[e.uniqueid]&&(l.clear(f.notifications[e.uniqueid]),delete f.notifications[e.uniqueid])}function I(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 C(e,t){return 0<=t&&(e.calls[t].disposedAt=new Date,!0)}function w(){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){f.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()})}}f.detectBrowser=h.detectBrowser(),f.user=t.getCurrentUser(),f.currentTab=0,f.notifications={},f.tabs={},f.agentCapacity={},f.globalUserLists=d||{count:0,rows:[]},f.globalLists=c||{count:0,rows:[]},f.globalCompanies=m||{count:0,rows:[]},f.globalTags=u||{count:0,rows:[]},f.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&&f.addContactTab(e,t):e.count&&e.rows[0]?f.addContactTab(e.rows[0],t):f.addContactTab({firstName:a,ListId:t.ListId,phone:i},t)}).catch(w())},f.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:f.user,contact:e}))}catch(e){console.error(e)}y({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n,contact:e})}).catch(w());try{t.formData=Mustache.render(t.formData,_.merge(n,{user:f.user}))}catch(e){console.error(e)}y({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n})}}).catch(w())},f.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&&y({type:"bot",title:n+" <"+a+">",icon:"fas fa-robot",color:"pink",data:{uniqueid:t.uniqueid}})})},f.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":i.open(e.uri);break;case"1":i.open(e.uri,"_blank","width="+(e.windowWidth||"800")+",height="+e.windowHeight||"600");break;default:i.open(e.uri)}else i.open(e.uri)},f.onBrowserPopup=function(e){e&&e.html&&y({type:"popup",title:e.calleridnum||"popup",icon:"icon-tablet",color:"grey",html:e.html})},f.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=f.alreadyExistsTab(e);if(t){if(r[e.channel+"Message"])return f.currentTab!==t.id&&(t.badges+=1),r[e.channel+"Message"].accept({id:e.id,UserId:f.user.id}).$promise.catch(w())}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(){f.notifications[e.uniqueid]=this.id},onAccept:function(){if(T(e),r[e.channel+"Message"])return r[e.channel+"Message"].accept({id:e.id,UserId:f.user.id,manual:!0}).$promise.then(function(e){S(e.channel,e.interaction),l.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(w())},onReject:function(){if(T(e),r[e.channel+"Message"])return r[e.channel+"Message"].reject({id:e.id,UserId:f.user.id}).$promise.then(function(e){l.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(w())}})}var n},f.onNotificationRemove=T,f.onVoiceChannelRemove=function(t){for(var e in f.tabs)if(f.tabs.hasOwnProperty(e)){var n=f.tabs[e],a=_.findLastIndex(n.calls,function(e){return e.uniqueid===t.uniqueid});if(!C(n,a)){var i=_.find(f.tabs,{calls:[{uniqueid:t.uniqueid}]});if(i){var s=_.findLastIndex(i.calls,function(e){return e.uniqueid===t.uniqueid});C(i,s)}}f.contact&&f.contact.id&&$timeout(I(t.uniqueid,f.contact.id,n),1e3)}},f.onClickTab=function(e){f.currentTab=e,b(f.tabs[e])},f.isActiveTab=function(e){return e===f.currentTab},f.alreadyExistsTab=function(t){return _.find(f.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id==t.interactionId&&e.channel==t.channel})},f.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(f.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];f.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(w()).finally(function(){y(a)});y(a)}}else y(a)},f.addInteractionTab=S,f.addTab=y,f.removeTab=A,f.updateLocalStorage=b,f.closeTab=function(e){var t=a.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)return a.show(t).then(function(){"interaction"===e.type&&a.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!0,locals:{user:f.user,channel:e.channel,interaction:e.interaction}}),A(e)}).catch(function(){"interaction"===e.type&&A(e)});var n=!1;if(_.forEach(e.calls,function(e){e.mandatoryDisposition&&(n=!0)}),"contact"===e.type&&0<e.calls.length){if(!n)return t._options.textContent="There is a call that hasn't been disposed yet.",a.show(t).then(function(){A(e)});alert=a.alert().title("Warning").textContent("There is a call that hasn't been disposed yet.").ok("OK"),a.show(alert).finally(function(){alert=void 0})}else A(e)}},n.on("trigger:contactmanager",f.onContactManager),n.on("trigger:jscripty",f.onJscripty),n.on("trigger:bot",f.onBot),n.on("trigger:browser:url",f.onBrowserUrl),n.on("trigger:browser:popup",f.onBrowserPopup),n.on("notification:save",f.onNotificationSave),n.on("notification:remove",f.onNotificationRemove),n.on("voice_queue_channel:remove",f.onVoiceChannelRemove),n.on("voice_outbound_channel:remove",f.onVoiceChannelRemove),function(){var e=i.localStorage.getItem("motion2.user:"+f.user.id);if(e)try{e=JSON.parse(e),f.tabs=e.tabs?e.tabs:{},f.currentTab=e.currentTab?e.currentTab:0,E(f.tabs[f.currentTab])}catch(e){console.error(e)}}(),e.$on("$destroy",function(){for(var e in f.notifications)f.notifications.hasOwnProperty(e)&&T({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")})}e.$inject=["$scope","$mdDialog","$window","$translate","$document","Auth","api","socket","toasty","globalUserLists","globalLists","globalCompanies","globalTags","license","setting","desktopNotification","msUtils"],angular.module("app.dashboards").controller("AgentDashboardGeneralController",e)}(),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(o,r,n,l,d,c,t,e,i,a){var m=this;function s(e){e&&e.count&&e.rows.length&&(m.journey=_.concat(m.journey,e.rows))}m.user=t.getCurrentUser(),m.detectBrowser=a.detectBrowser(),m.journey=[],m.queryHopper={fields:"id,phone,scheduledat",sort:"-updatedAt",limit:10,page:1},m.queryFinal={fields:"uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-updatedAt",limit:10,page:1},m.queryHistory={fields:"uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-updatedAt",limit:10,page:1},m.hoppers={rows:[],count:0},m.finals={rows:[],count:0},m.histories={rows:[],count:0},m.addNewContact=function(){m.errors=[],d.cmContact.save(m.contact).$promise.then(function(e){return m.contact.id=e.id,m.newContact=!1,m.tab.title=e.firstName||e.phone,m.tab.contact=m.contact,d.user.addContacts({id:t.getCurrentUser().id,ids:[e.id]})}).then(function(){m.detailForm.$pristine=!0,m.customFieldsForm.$pristine=!0,c.success({title:"Contact properly created",msg:m.contact.firstName?m.contact.firstName+" has been created!":""})}).then(function(){return d.cmContact.setTags({id:m.contact.id,ids:m.tab.Tags}).$promise}).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)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:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.saveContact=function(){m.errors=[],d.cmContact.update({id:m.contact.id},m.contact).$promise.then(function(e){return m.tab.title=e.firstName||e.phone,m.tab.contact=m.contact,l.$parent.vm.updateLocalStorage(),d.user.addContacts({id:t.getCurrentUser().id,ids:[e.id]})}).then(function(){return d.cmContact.setTags({id:m.contact.id,ids:m.tab.Tags}).$promise}).then(function(){m.detailForm.$pristine=!0,m.customFieldsForm.$pristine=!0,c.success({title:"Contact properly updated!",msg:m.contact.name?m.contact.name+" has been updated!":""})}).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)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:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getCustomFields=function(e){return d.cmList.getCustomFields({id:e}).$promise.then(function(e){m.tab.customFields=e}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"LIST:GETCustomFields",msg:e.data?JSON.stringify(e.data):e.toString()})})},m.call=l.$parent.vm.call,m.disposeCall=function(e,a){if(m.newContact)return void c.error({title:"ATTENTION",msg:"Please save the contact before disposing!"});o.show({controller:"DisposeCallDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/contact/dispose/dialog.html",parent:angular.element(r.body),targetEvent:a,clickOutsideToClose:!1,resolve:{globalDispositions:["apiResolver",function(e){return e.resolve("disposition@get",{MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null"})}]},locals:{dispositions:m.tab.dispositions,contact:m.contact,call:a}}).then(function(e){for(var t in e&&("BLACKLIST"===e?c.success({title:i.instant("DASHBOARDS.INFO"),msg:i.instant("DASHBOARDS.CALL_DISPOSED")+" "+e}):"RECALLME"===e||"RESCHEDULE"===e||c.success({title:i.instant("DASHBOARDS.INFO"),msg:i.instant("DASHBOARDS.CALL_SAVED")})),l.$parent.$parent.$parent.vm.tabs)if(l.$parent.$parent.$parent.vm.tabs.hasOwnProperty(t)){var n=l.$parent.$parent.$parent.vm.tabs[t];_.remove(n.calls,function(e){return e.uniqueid===a.uniqueid})}})},m.duplicateContact=function(e){o.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(r.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:m.contact.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:t.getCurrentUser().id,fields:"id,name"})}]},locals:{contacts:[]}})},m.mergeContact=function(e){o.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(r.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:m.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 l.$parent.$parent.$parent.vm.tabs)if(l.$parent.$parent.$parent.vm.tabs.hasOwnProperty(t)){var n=l.$parent.$parent.$parent.vm.tabs[t];n&&n.contact&&(e.from&&e.from.id&&e.from.id===n.contact.id&&l.$parent.$parent.$parent.vm.removeTab(n),e.to&&e.to.id&&e.to.id===n.contact.id&&l.$parent.$parent.$parent.vm.removeTab(n))}e.new&&l.$parent.$parent.$parent.vm.addContactTab(e.new)}})},m.getDateFromString=function(e){return null===e?void 0:new Date(e)},m.addJscriptyTab=function(e){try{e.formData=Mustache.render(e.formData,{contact:m.contact,user:m.user})}catch(e){console.error(e)}try{l.$parent.$parent.$parent.vm.addTab({type:"jscripty",title:e.name,icon:"icon-script",color:"grey",project:e,contact:m.contact})}catch(e){c.error({title:"ERROR OPENING JSCRIPTY PROJECT",msg:"The project cannot be started"+JSON.stringify(e)})}},m.getHoppers=function(){m.contact&&m.contact.id&&(m.queryHopper.ContactId=m.contact.id,m.queryHopper.offset=(m.queryHopper.page-1)*m.queryHopper.limit,m.promise=d.cmHopper.get(m.queryHopper,g("hoppers")).$promise)},m.getFinals=function(){m.contact&&m.contact.id&&(m.queryFinal.ContactId=m.contact.id,m.queryFinal.offset=(m.queryFinal.page-1)*m.queryFinal.limit,m.promise=d.cmHopperFinal.get(m.queryFinal,g("finals")).$promise)},m.getHistories=function(){m.contact&&m.contact.id&&(m.queryHistory.ContactId=m.contact.id,m.queryHistory.offset=(m.queryHistory.page-1)*m.queryHistory.limit,m.promise=d.cmHopperHistory.get(m.queryHistory,g("histories")).$promise)},m.getJscriptyProjects=function(){d.jscriptyProject.get({fields:"createdAt,updatedAt,id,name,description,createdAt,formData,enableUncompleteSave",sort:"-updatedAt",nolimit:!0}).$promise.then(function(e){m.jscriptyProjects=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.jscripty.account"}];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:"api.jscripty.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getMailAccounts=function(){d.user.getMailAccounts({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.mailAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.mail.account"}];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:"api.mail.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getFaxAccounts=function(){d.user.getFaxAccounts({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.faxAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.fax.account"}];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:"api.fax.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getSmsAccounts=function(){d.user.getSmsAccounts({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.smsAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.sms.account"}];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:"api.sms.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getOpenchannelAccounts=function(){d.user.getOpenchannelAccounts({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.openchannelAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.sms.account"}];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:"api.openchannel.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getChatWebsites=function(){d.user.getChatWebsites({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.chatAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.chatAccounts.account"}];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:"api.chatAccounts.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getLists=function(){d.user.getLists({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.lists=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.cm.lists"}];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:"api.cm.lists",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.composeInteraction=function(e,i,t,n){var s=i.toLowerCase();o.show({controller:"Compose"+i+"InteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/compose"+i+"/dialog.html",parent:angular.element(r.body),clickOutsideToClose:!1,locals:{account:t,message:{to:"mail"==s?n:n.split(",")},type:"new",interaction:{Contact:m.contact}},fullscreen:!0}).then(function(a){return d[s+"Account"].send({id:t.id},a).$promise.then(function(e){if("Mail"===i){var t=e;if(t&&t.Messages&&t.Messages.length){if(a.attachments&&a.attachments.length)for(var n=0;n<a.attachments.length;n+=1)d.attachment.update({id:a.attachments[n].id},{MailMessageId:_.head(t.Messages).id});c.success({title:"Message properly sent!",msg:"Message has been sent!"}),t.closed?(t.disposition=null,o.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(r.body),clickOutsideToClose:!0,locals:{user:m.user,channel:"mail",interaction:t}})):l.$parent.vm.addInteractionTab("mail",t)}}else c.success({title:"Message properly sent!",msg:"Message has been sent!"}),l.$parent.vm.addInteractionTab(s,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)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else"fax"===s?c.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()}):c.error({title:e.status?"API:"+e.status+" - "+e.statusText:i.toUpperCase()+"ACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})})},m.init=function(e,t){m.tab=e,l.$watchGroup(["vm.detailForm.$pristine","vm.customFieldsForm.$pristine"],function(e){m.tab.saved=e[0]&&e[1]}),m.license=t,m.contact=m.tab.contact,m.newContact=!1,m.currentTab=0,m.contact&&m.contact.id?(d.user.addContacts({id:m.user.id,ids:[m.contact.id]}),m.contact.ListId&&(m.tab.userLists.rows=_.unionBy(m.tab.userLists.rows,_.filter(m.tab.lists.rows,{id:m.contact.ListId}),"id"),m.list=_.find(m.tab.userLists.rows,{id:m.contact.ListId})),m.getHoppers(),m.getFinals(),m.getHistories(),m.getMailAccounts(),m.getFaxAccounts(),m.getSmsAccounts(),m.getOpenchannelAccounts(),m.getChatWebsites(),m.getLists()):(m.newContact=!0,e.autoCreate&&(console.log("autoCreate"),m.addNewContact()));d.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){m.users=e||{count:0,rows:[]},m.usersMap=_.mapValues(_.keyBy(m.users.rows,"id"),"fullname")}).then(function(){if(m.contact&&m.contact.id)return d.cmContact.getTags({id:m.contact.id}).$promise}).then(function(e){e&&(m.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++)d[t[n]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(s);d.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(s).catch(function(e){console.error(e)})}}(m.contact))},m.hasPermission=function(e){return t.hasPermission(e)},m.openInteraction=function(e,t){try{if(t.MailAccountId)return l.$parent.$parent.$parent.vm.addInteractionTab("mail",t);if(t.ChatWebsiteId)return l.$parent.$parent.$parent.vm.addInteractionTab("chat",t);if(t.SmsAccountId)return l.$parent.$parent.$parent.vm.addInteractionTab("sms",t);if(t.OpenchannelAccountId)return l.$parent.$parent.$parent.vm.addInteractionTab("openchannel",t);if(t.FaxAccountId)return l.$parent.$parent.$parent.vm.addInteractionTab("fax",t)}catch(e){c.error({title:"ERROR OPEN INTERACTION",msg:"Customer Journey can't open the interaction"})}},m.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)},m.isMyAccount=function(e){{if(e.FaxAccountId)return _.includes(_.map(m.faxAccounts?m.faxAccounts.rows:[],"id"),e.FaxAccountId);if(e.OpenchannelAccountId)return _.includes(_.map(m.openchannelAccounts?m.openchannelAccounts.rows:[],"id"),e.OpenchannelAccountId);if(e.SmsAccountId)return _.includes(_.map(m.smsAccounts?m.smsAccounts.rows:[],"id"),e.SmsAccountId);if(e.MailAccountId)return _.includes(_.map(m.mailAccounts?m.mailAccounts.rows:[],"id"),e.MailAccountId);if(e.ChatWebsiteId)return _.includes(_.map(m.chatAccounts?m.chatAccounts.rows:[],"id"),e.ChatWebsiteId);if(e.amaflags)return!0}return!1},m.getJscriptyProjects(),l.$watch("currentTab",function(e,t){1===m.currentTab&&(m.getHoppers(),m.getFinals(),m.getHistories())});var u=!0,p=1;function g(t){return function(e){m[t]=e||{count:0,rows:[]}}}l.$watch("queryHopper.filter",function(e,t){u?n(function(){u=!1}):(t||(p=m.queryHopper.page),e!==t&&(m.queryHopper.page=1),e||(m.queryHopper.page=p),m.getHoppers())}),l.$watch("queryFinal.filter",function(e,t){u?n(function(){u=!1}):(t||(p=m.queryFinal.page),e!==t&&(m.queryFinal.page=1),e||(m.queryFinal.page=p),m.getFinals())}),l.$watch("queryHistory.filter",function(e,t){u?n(function(){u=!1}):(t||(p=m.queryHistory.page),e!==t&&(m.queryHistory.page=1),e||(m.queryHistory.page=p),m.getHistories())}),l.$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.user.unpause({id:l.getCurrentUser().id}).$promise.then(function(e){}).catch(function(e){console.error(e)}),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.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,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.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,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){var r=this;r.user=i.getCurrentUser(),r.license={},r.plugin={},r.setting={},r.sidebar="dashboard",r.navigation=o.getNavigation(),r.addContactTab=t.$parent.vm.addContactTab,r.addInteractionTab=t.$parent.vm.addInteractionTab,r.init=function(e,t){r.license=e,r.setting=t;var n=a.localStorage.getItem("motion2.home:"+r.user.id);if(n)try{n=JSON.parse(n),r.sidebar=n.currentSidebarTab?n.currentSidebarTab:"dashboard"}catch(e){console.error(e),r.sidebar="dashboard"}},r.changeSidebarTab=function(e){r.sidebar=e.view,"plugin"===r.sidebar&&(r.plugin=e.stateParams,r.pluginId=e.id,t.$broadcast("pluginUpdated",{plugin:r.plugin}));a.localStorage.setItem("motion2.home:"+r.user.id,JSON.stringify({currentSidebarTab:e.view}))},r.hasPermission=function(e){return i.hasPermission(e)}}e.$inject=["$scope","$timeout","$window","api","Auth","socket","msNavigationAgentService"],angular.module("app.dashboards").controller("AgentGeneralHomeController",e)}(),function(){"use strict";function e(n,a,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(){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.chatAccounts.rows.length?(_.includes(_.map(m.chatAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.ChatWebsiteId=m.query.account||_.map(m.chatAccounts.rows,"id").join()):m.query.ChatWebsiteId=-1,m.query.offset=(m.query.page-1)*m.query.limit,i.localStorage.setItem("motion2.home.chat:"+m.user.id,JSON.stringify({query:m.query})),m.promise=o.chatInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}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,account:null},m.success=u,m.getChatInteractions=p,m.showChatInteraction=function(e,t){n.$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=function(e){if(e.Contact){var t="";t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||"");var n=e.Account?e.Account.mapKey:void 0;return t+=n&&e.Contact[n]?" <"+e.Contact[n]+">":""}return s.instant("DASHBOARDS.UNKNOWN")},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.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},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)}catch(e){console.error(e)}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.onChatInteractionSave=function(e){if(e){var t=_.find(m.chatInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},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=[]),t.Messages.push(e)),g(t)}}},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.localizationMap=c,m.pickerModel={dateStart:null};var v=!0,h=1;n.$watch("vm.query.filter",function(e,t){v?a(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getChatInteractions())}),n.$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,a,i,e,s,o,r){var l=this;l.currentUser=s.getCurrentUser(),l.lists={},l.contacts={count:0,rows:[]},l.tags={count:0,rows:[]},l.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1},l.getContacts=function(){l.query.ListId=l.getListId(),l.query.offset=(l.query.page-1)*l.query.limit,r.localStorage.setItem("motion2.home.contacts:"+l.currentUser.id,JSON.stringify({query:l.query})),l.promise=o.cmContact.get(l.query,m).$promise},l.refreshContacts=function(){l.getContacts()},l.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:l.currentUser.id,fields:"id,name"})}]},locals:{contacts:l.contacts.rows}})},l.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:l.currentUser.id,fields:"id,name"})}]},locals:{contacts:l.contacts.rows}})},l.openContact=function(e){return o.cmContact.get({id:e}).$promise.then(function(e){t.$parent.vm.addContactTab(e)})},l.call=t.$parent.vm.call,l.onInit=u,l.getListId=function(){var e=_.toString(l.query.ListId);if(e){var t=e.split(","),n=l.defaultLists.split(",");_.isEqual(t,n)||(1<t.length?e=l.defaultLists:_.indexOf(n,t[0])<0&&(e=l.defaultLists))}else e=l.defaultLists;return e},u();var d=!0,c=1;function m(e){l.contacts=e||{count:0,rows:[]}}function u(){var e=r.localStorage.getItem("motion2.home.contacts:"+l.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(l.query=_.merge(l.query,e.query),l.query=_.omit(l.query,"filter")),o.user.getLists({id:l.currentUser.id,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"),l.defaultLists=l.lists.rows?_.map(l.lists.rows,"id").join(","):void 0,o.tag.get().$promise}).then(function(e){l.tags=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){l.getContacts()})}t.$watch("vm.query.filter",function(e,t){d?a(function(){d=!1}):(t||(c=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=c),l.getContacts())})}e.$inject=["$document","$scope","$timeout","$mdDialog","$stateParams","Auth","api","$window"],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(n,a,i,s,o,r,l,t,d,c,e){var m=this;function u(e){m.faxInteractions=e||{count:0,rows:[]};for(var t=0;t<m.faxInteractions.rows.length;t+=1)g(m.faxInteractions.rows[t])}function p(){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.faxAccounts.rows.length?(_.includes(_.map(m.faxAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.FaxAccountId=m.query.account||_.map(m.faxAccounts.rows,"id").join()):m.query.FaxAccountId=-1,m.query.offset=(m.query.page-1)*m.query.limit,o.localStorage.setItem("motion2.home.fax:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.faxInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}m.user=t.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.faxInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},m.success=u,m.getFaxInteractions=p,m.showFaxInteraction=function(e,t){n.$parent.vm.addInteractionTab("fax",t)},m.downloadFaxInteraction=function(e,s,t){l.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()})})},m.getContactLabel=function(e){if(e.Contact){var t="";return t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||""),t+=" <"+(e.Contact.fax||"unknown")+">"}return r.instant("DASHBOARDS.UNKNOWN")},m.getUserLabel=function(e){if(e.UserId)return e.UserId===t.getCurrentUser().id?r.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return r.instant("DASHBOARDS.NOT_ASSIGNED")},m.getFaxAccountLabel=function(e){if(e.Account)return e.Account.key;return r.instant("DASHBOARDS.UNKNOWN")},m.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getFaxInteractions()},m.composeFaxInteraction=function(e,t){i.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:t,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){return l.faxAccount.send({id:t.id},e).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),n.$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()})})})},m.onInit=function(e,t){return m.license=e,m.setting=t,l.user["get"+_.upperFirst("faxAccounts")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.faxAccounts=e||{count:0,rows:[]},l.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return l.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=o.localStorage.getItem("motion2.home.fax:"+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)}catch(e){console.error(e)}d.on("faxInteraction:save",m.onFaxInteractionSave),d.on("faxInteraction:update",m.onFaxInteractionSave),d.on("faxInteractionTags:save",m.onFaxInteractionTagsSave),d.on("faxMessage:save",m.onFaxMessageSave),d.on("faxMessage:update",m.onFaxMessageSave),d.on("user_has_fax_interactions:save",m.onFaxInteractionOpen),d.on("user_has_fax_interactions:remove",m.onFaxInteractionClose),m.getFaxInteractions()})},m.onFaxInteractionSave=function(e){if(e){var t=_.find(m.faxInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},m.onFaxInteractionTagsSave=function(e){if(e){var t=_.find(m.faxInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onFaxMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.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=[]),t.Messages.push(e)),g(t)}}},m.onFaxInteractionOpen=function(e){var t=_.find(m.faxInteractions.rows,{id:e.FaxInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onFaxInteractionClose=function(e){var t=_.find(m.faxInteractions.rows,{id:e.FaxInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.localizationMap=e,m.pickerModel={dateStart:null};var v=!0,h=1;n.$watch("vm.query.filter",function(e,t){v?a(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getFaxInteractions())}),n.$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"],angular.module("app.dashboards").controller("AgentHomeFaxController",e)}(),function(){"use strict";function e(a,n,i,s,o,r,l,t,d,c,e){var m=this;function u(e){m.mailInteractions=e||{count:0,rows:[]};for(var t=0;t<m.mailInteractions.rows.length;t+=1)g(m.mailInteractions.rows[t])}function p(){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.mailAccounts.rows.length?(_.includes(_.map(m.mailAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.MailAccountId=m.query.account||_.map(m.mailAccounts.rows,"id").join()):m.query.MailAccountId=-1,m.query.offset=(m.query.page-1)*m.query.limit,o.localStorage.setItem("motion2.home.mail:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.mailInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}m.user=t.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.mailInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},m.success=u,m.getMailInteractions=p,m.showMailInteraction=function(e,t){a.$parent.vm.addInteractionTab("mail",t)},m.downloadMailInteraction=function(e,s,t){l.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()})})},m.getContactLabel=function(e){if(e.Contact){var t="";return t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||""),e.to&&e.Account&&e.to.indexOf(e.Account.email)<0?t=e.to:t+=" <"+(e.Contact.email||"unknown")+">",t}return r.instant("DASHBOARDS.UNKNOWN")},m.getUserLabel=function(e){if(e.UserId)return e.UserId===t.getCurrentUser().id?r.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return r.instant("DASHBOARDS.NOT_ASSIGNED")},m.getMailAccountLabel=function(e){if(e.Account)return e.Account.key;return r.instant("DASHBOARDS.UNKNOWN")},m.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getMailInteractions()},m.composeMailInteraction=function(e,t){i.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:t,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(n){return l.mailAccount.send({id:t.id},n).$promise.then(function(e){if(e&&e.Messages&&e.Messages.length){if(n.attachments&&n.attachments.length)for(var t=0;t<n.attachments.length;t+=1)l.attachment.update({id:n.attachments[t].id},{MailMessageId:_.head(e.Messages).id});c.success({title:"Message properly sent!",msg:"Message has been sent!"}),e.closed?(e.disposition=null,i.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!0,locals:{user:m.user,channel:"mail",interaction:e}})):a.$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()})})})},m.onInit=function(e,t){return m.license=e,m.setting=t,l.user["get"+_.upperFirst("mailAccounts")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.mailAccounts=e||{count:0,rows:[]},l.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return l.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){m.usersByKey=_.keyBy(e.rows,"id")}).then(function(){return l.mailSubstatus.get({nolimit:!0}).$promise}).then(function(e){m.subStatuses=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){var e=o.localStorage.getItem("motion2.home.mail:"+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)}catch(e){console.error(e)}d.on("mailInteraction:save",m.onMailInteractionSave),d.on("mailInteraction:update",m.onMailInteractionSave),d.on("mailInteractionTags:save",m.onMailInteractionTagsSave),d.on("mailMessage:save",m.onMailMessageSave),d.on("mailMessage:update",m.onMailMessageSave),d.on("user_has_mail_interactions:save",m.onMailInteractionOpen),d.on("user_has_mail_interactions:remove",m.onMailInteractionClose),m.getMailInteractions()})},m.onMailInteractionSave=function(e){if(e){var t=_.find(m.mailInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},m.onMailInteractionTagsSave=function(e){if(e){var t=_.find(m.mailInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onMailMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.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=[]),t.Messages.push(e)),g(t)}}},m.onMailInteractionOpen=function(e){var t=_.find(m.mailInteractions.rows,{id:e.MailInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onMailInteractionClose=function(e){var t=_.find(m.mailInteractions.rows,{id:e.MailInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.localizationMap=e,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.getMailInteractions())}),a.$on("$destroy",function(){d.removeAllListeners("mailMessage:save"),d.removeAllListeners("mailMessage:update"),d.removeAllListeners("mailInteraction:save"),d.removeAllListeners("mailInteractionTags:save"),d.removeAllListeners("mailInteraction:update"),d.removeAllListeners("user_has_mail_interactions:save"),d.removeAllListeners("user_has_mail_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeMailController",e)}(),function(){"use strict";function e(n,a,i,s,e,t,o){var r=this;r.currentUser=e.getCurrentUser(),r.lists={},r.contacts={count:0,rows:[]},r.tags={count:0,rows:[]},r.query={includeAll:!0,id:r.currentUser.id,sort:"-updatedAt",limit:10,page:1},r.getContacts=function(){r.query.ListId=r.getListId(),r.query.offset=(r.query.page-1)*r.query.limit,o.localStorage.setItem("motion2.home.mycontacts:"+r.currentUser.id,JSON.stringify({query:r.query})),r.promise=t.user.getContacts(r.query,c).$promise},r.refreshContacts=function(){r.getContacts()},r.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:r.currentUser.id,fields:"id,name"})}]},locals:{contacts:r.contacts.rows}})},r.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:r.currentUser.id,fields:"id,name"})}]},locals:{contacts:r.contacts.rows}})},r.openContact=function(e,t){a.$parent.vm.addContactTab(t)},r.call=a.$parent.vm.call,r.onInit=function(){var e=o.localStorage.getItem("motion2.home.mycontacts:"+r.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(r.query=_.omit(e.query,"filter"))}catch(e){console.error(e)}t.cmList.get({fields:"id,name,dialPrefix",sort:"name",nolimit:!0}).$promise.then(function(e){return r.lists=e||{count:0,rows:[]},r.listsMap=_.keyBy(r.lists.rows,"id"),r.defaultLists=r.lists.rows?_.map(r.lists.rows,"id").join(","):void 0,t.tag.get().$promise}).then(function(e){r.tags=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){r.getContacts()})},r.getListId=function(){var e=_.toString(r.query.ListId);if(e){var t=e.split(","),n=r.defaultLists.split(",");_.isEqual(t,n)||(1<t.length?e=r.defaultLists:_.indexOf(n,t[0])<0&&(e=r.defaultLists))}else e=r.defaultLists;return e};var l=!0,d=1;function c(e){r.contacts=e||{count:0,rows:[]}}a.$watch("vm.query.filter",function(e,t){l?i(function(){l=!1}):(t||(d=r.query.page),e!==t&&(r.query.page=1),e||(r.query.page=d),r.getContacts())})}e.$inject=["$document","$scope","$timeout","$mdDialog","Auth","api","$window"],angular.module("app.dashboards").controller("AgentHomeMyContactsController",e)}(),function(){"use strict";function e(n,a,i,s,o,r,l,t,d,c,e){var m=this;function u(e){m.openchannelInteractions=e||{count:0,rows:[]};for(var t=0;t<m.openchannelInteractions.rows.length;t+=1)g(m.openchannelInteractions.rows[t])}function p(){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.openchannelAccounts.rows.length?(_.includes(_.map(m.openchannelAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.OpenchannelAccountId=m.query.account||_.map(m.openchannelAccounts.rows,"id").join()):m.query.OpenchannelAccountId=-1,m.query.offset=(m.query.page-1)*m.query.limit,o.localStorage.setItem("motion2.home.openchannel:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.openchannelInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}m.user=t.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.openchannelInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},m.success=u,m.getOpenchannelInteractions=p,m.showOpenchannelInteraction=function(e,t){n.$parent.vm.addInteractionTab("openchannel",t)},m.downloadOpenchannelInteraction=function(e,s,t){l.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()})})},m.getContactLabel=function(e){if(e.Contact){var t="";return t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||""),e.from&&(t=e.from),t}return r.instant("DASHBOARDS.UNKNOWN")},m.getUserLabel=function(e){if(e.UserId)return e.UserId===t.getCurrentUser().id?r.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return r.instant("DASHBOARDS.NOT_ASSIGNED")},m.getOpenchannelAccountLabel=function(e){if(e.Account)return e.Account.key;return r.instant("DASHBOARDS.UNKNOWN")},m.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getOpenchannelInteractions()},m.composeOpenchannelInteraction=function(e,t){i.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:t,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){return l.openchannelAccount.send({id:t.id},e).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),n.$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()})})})},m.onInit=function(e,t){return m.license=e,m.setting=t,l.user["get"+_.upperFirst("openchannelAccounts")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.openchannelAccounts=e||{count:0,rows:[]},l.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return l.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=o.localStorage.getItem("motion2.home.openchannel:"+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)}catch(e){console.error(e)}d.on("openchannelInteraction:save",m.onOpenchannelInteractionSave),d.on("openchannelInteraction:update",m.onOpenchannelInteractionSave),d.on("openchannelInteractionTags:save",m.onOpenchannelInteractionTagsSave),d.on("openchannelMessage:save",m.onOpenchannelMessageSave),d.on("openchannelMessage:update",m.onOpenchannelMessageSave),d.on("user_has_openchannel_interactions:save",m.onOpenchannelInteractionOpen),d.on("user_has_openchannel_interactions:remove",m.onOpenchannelInteractionClose),m.getOpenchannelInteractions()})},m.onOpenchannelInteractionSave=function(e){if(e){var t=_.find(m.openchannelInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},m.onOpenchannelInteractionTagsSave=function(e){if(e){var t=_.find(m.openchannelInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onOpenchannelMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.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=[]),t.Messages.push(e)),g(t)}}},m.onOpenchannelInteractionOpen=function(e){var t=_.find(m.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onOpenchannelInteractionClose=function(e){var t=_.find(m.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.localizationMap=e,m.pickerModel={dateStart:null};var v=!0,h=1;n.$watch("vm.query.filter",function(e,t){v?a(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getOpenchannelInteractions())}),n.$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"],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(){if(p.pickerModel.dateStart){var e=moment(p.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();p.query.createdAt={$gte:p.pickerModel.dateStart,$lte:e}}else 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.getVoiceRecordings()},p.clearAll=function(){p.pickerModel={dateStart:null},p.getVoiceRecordings()};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.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(){if(d.pickerModel.dateStart){var e=moment(d.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();d.query.scheduledat={$gte:d.pickerModel.dateStart,$lte:e}}else 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}})},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(n,a,i,s,o,r,l,t,d,c,e){var m=this;function u(e){m.smsInteractions=e||{count:0,rows:[]};for(var t=0;t<m.smsInteractions.rows.length;t+=1)g(m.smsInteractions.rows[t])}function p(){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.smsAccounts.rows.length?(_.includes(_.map(m.smsAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.SmsAccountId=m.query.account||_.map(m.smsAccounts.rows,"id").join()):m.query.SmsAccountId=-1,m.query.offset=(m.query.page-1)*m.query.limit,o.localStorage.setItem("motion2.home.sms:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.smsInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}m.user=t.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.smsInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},m.success=u,m.getSmsInteractions=p,m.showSmsInteraction=function(e,t){n.$parent.vm.addInteractionTab("sms",t)},m.downloadSmsInteraction=function(e,s,t){l.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()})})},m.getContactLabel=function(e){if(e.Contact){var t="";return t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||""),t+=" <"+(e.Contact.mobile||"unknown")+">"}return r.instant("DASHBOARDS.UNKNOWN")},m.getUserLabel=function(e){if(e.UserId)return e.UserId===t.getCurrentUser().id?r.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return r.instant("DASHBOARDS.NOT_ASSIGNED")},m.getSmsAccountLabel=function(e){if(e.Account)return e.Account.key;return r.instant("DASHBOARDS.UNKNOWN")},m.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getSmsInteractions()},m.composeSmsInteraction=function(e,t){i.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:t,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){return l.smsAccount.send({id:t.id},e).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),n.$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()})})})},m.onInit=function(e,t){return m.license=e,m.setting=t,l.user["get"+_.upperFirst("smsAccounts")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.smsAccounts=e||{count:0,rows:[]},l.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return l.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=o.localStorage.getItem("motion2.home.sms:"+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)}catch(e){console.error(e)}d.on("smsInteraction:save",m.onSmsInteractionSave),d.on("smsInteraction:update",m.onSmsInteractionSave),d.on("smsInteractionTags:save",m.onSmsInteractionTagsSave),d.on("smsMessage:save",m.onSmsMessageSave),d.on("smsMessage:update",m.onSmsMessageSave),d.on("user_has_sms_interactions:save",m.onSmsInteractionOpen),d.on("user_has_sms_interactions:remove",m.onSmsInteractionClose),m.getSmsInteractions()})},m.onSmsInteractionSave=function(e){if(e){var t=_.find(m.smsInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},m.onSmsInteractionTagsSave=function(e){if(e){var t=_.find(m.smsInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onSmsMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.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=[]),t.Messages.push(e)),g(t)}}},m.onSmsInteractionOpen=function(e){var t=_.find(m.smsInteractions.rows,{id:e.SmsInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onSmsInteractionClose=function(e){var t=_.find(m.smsInteractions.rows,{id:e.SmsInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.localizationMap=e,m.pickerModel={dateStart:null};var v=!0,h=1;n.$watch("vm.query.filter",function(e,t){v?a(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getSmsInteractions())}),n.$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"],angular.module("app.dashboards").controller("AgentHomeSmsController",e)}(),function(){"use strict";function e(t,n,a,i,e,s,o,r,l,d){var c=this;function m(e){c.voiceCalls=e||{count:0,rows:[]}}c.currentUser=e.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(){if(c.pickerModel.dateStart){var e=moment(c.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();c.query.createdAt={$gte:c.pickerModel.dateStart,$lte:e}}else 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=a.voiceCallReport.get(c.query,m).$promise},c.onInit=function(){return a.tag.get().$promise.then(function(e){c.tags=e||{count:0,rows:[]}}).catch(function(e){i.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()};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,n,a,i,s,o,r,l,d,c,m,u){var p=this,g=25,v=1024*g*1024;function h(){i.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{user:p.user,channel:p.tab.channel,interaction:p.tab.interaction}}).then(function(e){p.tab.saved=Boolean(e),e&&a.$parent.$parent.$parent.vm.closeTab(p.tab)})}function f(e,t){p.tab.message||(p.tab.message=t),i.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!1,locals:{account:p.account,message:p.tab.message,type:e,interaction:p.interaction},fullscreen:!0,skipHide:Boolean(p.tab.spy)}).then(function(t){t&&E(t),t.Interaction&&p.interaction&&p.interaction.id&&(t.Interaction.id=p.interaction.id,l.mailInteraction.update(t.Interaction).$promise.then(function(e){e&&e.closed?(p.tab.saved=!0,p.interaction.closed=!0,h()):null!==t.Interaction.substatus&&(p.tab.saved=!0,p.tab.interaction.substatus=t.Interaction.substatus,a.$parent.$parent.$parent.vm.closeTab(p.tab))}).catch(function(e){console.error(e)}))})}function b(){"mail"!==p.tab.channel&&t(function(){var e=angular.element(n.find("md-content[name*='interaction-content-"+p.tab.id+"']"));e&&e[0]&&(e[0].scrollTop=e[0].scrollHeight)},0)}function E(n){if(n)return n["chat"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId"]=p.interaction["chat"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId"],n[_.capitalize(p.tab.channel)+"InteractionId"]=p.interaction.id,n.UserId=p.user.id,n.ContactId=p.interaction.ContactId,n.direction="out",n.secret=Boolean(p.tab.spy||n.secret),l[p.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(){p.tab.areaText="",b()})}function A(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 y(e){e&&e.count&&e.rows.length&&(p.journey=_.concat(p.journey,e.rows))}p.showFooter=!1,p.showInteraction=!1,p.user=c.getCurrentUser(),p.detectBrowser=u.detectBrowser(),p.journey=[],p.acceptedMessages=[],p.omniChannels=["mail","chat","sms","openchannel","fax"],p.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:v,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},p.ngFlow={flow:{}},p.selectedMailShowDetails={},p.selectedMailShowSystemMessage={},p.setting={},p.ctrlMethods={},p.embedOptions={fontSmiley:!0,sanitizeHtml:!0,emoji:!0,link:!0,linkTarget:"_blank"},p.init=function(e,t){p.tab=e,p.tab.saved=!0,p.tab.badges=0,p.setting=t||{},p.tab&&p.tab.channel&&p.tab.interaction&&(p.interaction=p.tab.interaction,l[p.tab.channel+"Interaction"].get({id:p.tab.interaction.id,includeAll:!0}).$promise.then(function(e){return e&&(p.interaction=e,p.tab.interaction=e),p.tab.saved=p.interaction.closed,p.queryMessage={id:p.interaction.id,includeAll:!0},"mail"===p.tab.channel?(p.queryMessage.sort="-id",p.queryMessage.offset=0,p.queryMessage.limit=3):(p.queryMessage.sort="id",p.queryMessage.nolimit=!0),l[p.tab.channel+"Interaction"].getMessages(p.queryMessage).$promise}).then(function(e){return p.messages=e||{count:0,rows:[]},l["chat"===p.tab.channel?"chatWebsite":p.tab.channel+"Account"].get({id:p.interaction["chat"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId"]}).$promise}).then(function(e){if(p.account=e,p.tab.title=p.account.key||p.account.name,p.interaction.ContactId)return l.cmContact.get({id:p.interaction.ContactId}).$promise}).then(function(e){return e&&(p.contact=e),p.showInteraction=!0,p.contact?(!function(e){if(e&&e.id){for(var t=0;t<p.omniChannels.length;t++)l[p.omniChannels[t]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(y);l.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(y)}}(p.contact),p.tab.title+=" - "+p.contact.firstName):p.tab.title+=" - "+r.instant(p.tab.channel.toUpperCase()+".UNKNOWN"),l.user.get({fields:"id,fullname",nolimit:!0}).$promise}).then(function(e){p.users=e||{count:0,rows:[]},p.usersMap=_.mapValues(_.keyBy(p.users.rows,"id"),"fullname")}).then(function(){if(p.tab.channel&&p.interaction)return l.user["add"+_.upperFirst(p.tab.channel)+"Interactions"]({id:p.user.id,ids:[p.interaction.id]})}).then(function(){return l.mailSubstatus.get({nolimit:!0}).$promise}).then(function(e){p.subStatuses=e||{count:0,rows:[]}}).then(function(){return p.getMailAccounts()}).then(function(){return p.getFaxAccounts()}).then(function(){return p.getSmsAccounts()}).then(function(){return p.getOpenchannelAccounts()}).then(function(){return p.getChatWebsites()}).then(function(){return p.getLists()}).catch(function(e){p.showInteraction=!0}).finally(function(){!function(){if(!p.tab.spy&&!p.interaction.closed)for(var e=0;e<p.messages.rows.length;e+=1)"in"!==p.messages.rows[e].direction||p.messages.rows[e].read||(l[p.tab.channel+"Message"].accept({id:p.messages.rows[e].id,UserId:p.user.id}),p.acceptedMessages.push(p.messages.rows[e].id))}(),b(),m.on(p.tab.channel+"Message:save",p.onMessageSave),m.on(p.tab.channel+"Message:update",p.onMessageSave),m.on(p.tab.channel+"Interaction:save",p.onInteractionSave),m.on(p.tab.channel+"Interaction:update",p.onInteractionSave),m.on("user_has_"+p.tab.channel+"_interactions:save",p.onInteractionOpen),m.on("user_has_"+p.tab.channel+"_interactions:remove",p.onInteractionClose),p.tab.areaText=p.tab.areaText?p.tab.areaText:"",p.showFooter=!0}))},p.getLabelByMessage=function(e){var t="loading...";if(e)return"in"===e.direction?e.Contact?e.Contact.firstName||"Anonymous":t:e.UserId?p.usersMap?p.usersMap[e.UserId]:t:"System"},p.openContact=function(e,t){try{p.tab&&!p.tab.spy&&a.$parent.$parent.$parent.vm.addContactTab(t||p.contact)}catch(e){d.error({title:"ERROR OPEN CONTACT",msg:"Unable to open the contact"})}},p.openInteraction=function(e,t){try{if(t.MailAccountId)return a.$parent.$parent.$parent.vm.addInteractionTab("mail",t);if(t.ChatWebsiteId)return a.$parent.$parent.$parent.vm.addInteractionTab("chat",t);if(t.SmsAccountId)return a.$parent.$parent.$parent.vm.addInteractionTab("sms",t);if(t.OpenchannelAccountId)return a.$parent.$parent.$parent.vm.addInteractionTab("openchannel",t);if(t.FaxAccountId)return a.$parent.$parent.$parent.vm.addInteractionTab("fax",t)}catch(e){d.error({title:"ERROR OPEN INTERACTION",msg:"Customer Journey can't open the interaction"})}},p.disposeInteraction=h,p.tagInteraction=function(){i.show({controller:"TagInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/tag/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,skipHide:Boolean(p.tab.spy),resolve:{tags:["apiResolver",function(e){return e.resolve("tag@get",{nolimit:!0,fields:"id,name,color"})}]},locals:{channel:p.tab.channel,interaction:p.tab.interaction}})},p.composeMailInteraction=function(t,e){if(e.inReplyTo){var n=_.find(p.messages.rows,{messageId:e.inReplyTo});if(!n)return l.mailMessage.get({messageId:e.inReplyTo}).$promise.then(function(e){f(t,e&&e.count?e.rows[0]:void 0)}).catch(function(e){console.error(e),f(t,void 0)});f(t,n)}else f(t,e)},p.composeFaxInteraction=function(e){var t={to:[]};t.to.push(p.contact.fax),i.show({controller:"ComposeFaxInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!1,locals:{account:p.account,message:t,type:e},fullscreen:!0}).then(function(e){return l.faxAccount.send({id:p.account.id},e).$promise.then(function(e){d.success({title:"Message properly sent!",msg:"Message has been sent!"}),a.$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()})})})},p.composeSmsInteraction=function(e,t){i.show({controller:"ComposeSmsInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!1,locals:{account:p.account,message:t,type:e},fullscreen:!0,skipHide:Boolean(p.tab.spy)}).then(function(e){e&&E(e)})},p.transferLastMessage=function(){if(p.interaction){var e=_.findLast(p.messages.rows,function(e){return"in"===e.direction});e?i.show({controller:"TransferMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/transfer/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!1,locals:{account:p.account,interaction:p.interaction,message:e,channel:p.tab.channel}}).then(function(e){p.tab.saved=Boolean(e),e&&a.$parent.$parent.$parent.vm.closeTab(p.tab)}):d.error({title:"Invalid transfer",msg:"Message not found!"})}},p.downloadMessage=function(s,e){p.tab.channel&&s.id&&l[p.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=p.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()})})},p.downloadInteraction=function(s,e){p.tab.channel&&s.id&&l[p.tab.channel+"Interaction"].download({id:s.id,attachments:e}).$promise.then(function(e){var t=[e.buffer],n=p.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()})})},p.getMailAccounts=function(){l.user.getMailAccounts({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.mailAccounts=e||{count:0,rows:[]}})},p.getFaxAccounts=function(){l.user.getFaxAccounts({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.faxAccounts=e||{count:0,rows:[]}})},p.getSmsAccounts=function(){l.user.getSmsAccounts({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.smsAccounts=e||{count:0,rows:[]}})},p.getOpenchannelAccounts=function(){l.user.getOpenchannelAccounts({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.openchannelAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.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()})})},p.getChatWebsites=function(){l.user.getChatWebsites({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.chatAccounts=e||{count:0,rows:[]}})},p.getLists=function(){l.user.getLists({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.voiceAccounts=e||{count:0,rows:[]}})},p.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"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId";t[n]=p.interaction[n].toString(),t[_.capitalize(p.tab.channel)+"InteractionId"]=p.interaction.id,"sms"===p.tab.channel&&(t.phone=p.interaction.phone);e&&(t.UserId=p.user.id,t.ContactId=p.interaction.ContactId,t.body=e,t.createdAt=Date.now());return t}(t.replace(/\n$/,"")))},p.upload=function(){p.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},p.ngFlow.flow.upload()},p.fileAdded=function(e){if(e.size>v)return d.error({title:"File too big",msg:"The max allowed size is "+g+"MB"}),!1;return!0},p.fileSuccess=function(e,t){var n=JSON.parse(t),a=n.name;"chat"===p.tab.channel&&(a='<a href="'+(p.account.remote?p.account.remote:o.protocol()+"://"+o.host())+"/api/chat/interactions/"+p.interaction.id+"/attachment_download?attachId="+n.id+"&token="+p.account.token+'" target="_self">'+n.name+"</a>");E({body:a,AttachmentId:n.id})},p.onMessageSave=function(e){if(e&&p.interaction.id!=e[_.capitalize(p.tab.channel)+"InteractionId"])return;var t=!1;p.messages?t=_.find(p.messages.rows,{id:e.id}):p.messages={rows:[],count:0};t?_.merge(t,e):("mail"===p.tab.channel?p.messages.rows.unshift(e):p.messages.rows.push(e),b())},p.onInteractionSave=function(e){if(e&&p.interaction.id!==e.id)return;e.closed&&(p.tab.saved=!0);_.merge(p.interaction,e)},p.searchTextChange=function(t){var n=s.defer(),a=[],e={},i="chat"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId";return e.filter=t,e[i]=p.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},p.selectedItemChange=function(t){if(t){try{_.templateSettings.interpolate=/{{([\s\S]+?)}}/g;var e=_.template(t.value),n={user:p.user,account:p.account,interaction:p.interaction,contact:p.interaction&&p.interaction.Contact?p.interaction.Contact:{}};p.tab.areaText+=" "+e(n),p.ctrlMethods.setText(p.tab.areaText)}catch(e){p.tab.areaText+=" "+t.value,p.ctrlMethods.setText(p.tab.areaText)}p.selectedItem=null,p.changeDisplayCannedAnswerInputValue()}},p.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"}},p.getColorByChannel=A,p.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 A(t)},p.getMessagesAlignment=function(e){if(e.secret&&p.user.id!=e.UserId)return"in";switch(p.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}},p.displayCannedAnswerInput=!1,p.changeDisplayCannedAnswerInputValue=function(){p.displayCannedAnswerInput=!p.displayCannedAnswerInput},p.setAs=function(e){p.tab.channel&&p.interaction&&p.interaction.id&&l[p.tab.channel+"Interaction"].update({id:p.interaction.id,substatus:e}).$promise.catch(function(e){console.error(e)})},p.markAsUnread=function(){if(p.tab.channel&&p.interaction&&p.interaction.id)if(p.acceptedMessages.length)for(var e=0;e<p.acceptedMessages.length;e+=1)l[p.tab.channel+"Message"].update({id:p.acceptedMessages[e],read:!1,UserId:null});else for(var t=0;t<p.messages.rows.length;t+=1)if("in"===p.messages.rows[t].direction){p.messages.rows[t].UserId===p.user.id?l[p.tab.channel+"Message"].update({id:p.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}p.tab.saved=!0,a.$parent.$parent.$parent.vm.closeTab(p.tab)},p.isMyAccount=function(e){{if(e.FaxAccountId)return _.includes(_.map(p.faxAccounts?p.faxAccounts.rows:[],"id"),e.FaxAccountId);if(e.OpenchannelAccountId)return _.includes(_.map(p.openchannelAccounts?p.openchannelAccounts.rows:[],"id"),e.OpenchannelAccountId);if(e.SmsAccountId)return _.includes(_.map(p.smsAccounts?p.smsAccounts.rows:[],"id"),e.SmsAccountId);if(e.MailAccountId)return _.includes(_.map(p.mailAccounts?p.mailAccounts.rows:[],"id"),e.MailAccountId);if(e.ChatWebsiteId)return _.includes(_.map(p.chatAccounts?p.chatAccounts.rows:[],"id"),e.ChatWebsiteId);if(e.amaflags)return!0}return!1},p.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()})})},p.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()})})},p.htmlToPlaintext=function(e){return e?String(e).replace(/<[^>]+>/gm,""):""},p.onInteractionOpen=function(e){var t;p.interaction.id==e[_.upperFirst(p.tab.channel)+"InteractionId"]&&(p.interaction.Users&&(t=_.find(p.interaction.Users,{id:e.UserId})),t||p.interaction.Users.push({id:e.UserId}))},p.onInteractionClose=function(e){p.interaction.id==e[_.upperFirst(p.tab.channel)+"InteractionId"]&&p.interaction.Users&&_.remove(p.interaction.Users,{id:e.UserId})},p.loadNextPage=function(){var n=s.defer();if(p.queryMessage)return p.queryMessage.offset=p.messages.rows.length,l[p.tab.channel+"Interaction"].getMessages(p.queryMessage).$promise.then(function(e){for(var t=0;t<e.rows.length;t+=1)p.messages.rows.push(e.rows[t]),p.interaction.closed||"in"!==e.rows[t].direction||e.rows[t].read||(l[p.tab.channel+"Message"].accept({id:e.rows[t].id,UserId:p.user.id}),p.acceptedMessages.push(e.rows[t].id));return n.resolve(e)}).catch(function(e){return n.reject(e)});return n.reject()},p.timelineOptions={scrollEl:"#interaction-content"},a.$on("$destroy",function(){m.removeAllListeners(p.tab.channel+"Message:save"),m.removeAllListeners(p.tab.channel+"Message:update"),m.removeAllListeners(p.tab.channel+"Interaction:save"),m.removeAllListeners(p.tab.channel+"Interaction:update"),m.removeAllListeners("user_has_"+p.tab.channel+"_interactions:save"),m.removeAllListeners("user_has_"+p.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"],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(n,a)),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,s,o,a,r,l,d,c,m){var u=this,p=25,g=1024*p*1024;u.currentUser=c.getCurrentUser(),u.secret="note"===a,u.hiddenCC=!0,u.hiddenBCC=!0,u.verifySmtp=!0,u.errors=[],u.separatorKeys=[n.KEY_CODE.ENTER,n.KEY_CODE.COMMA,n.KEY_CODE.TAB],u.searchTextChange=function(t){var n=d.defer(),a=[];return r.cannedAnswer.get({filter:t,MailAccountId:s.id}).$promise.then(function(e){return a=_.concat(a,e.rows),r.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},u.selectedItemChange=function(t){if(t&&t.value&&u.ckEditorInstance)try{var e=_.template(t.value),n={user:u.currentUser,account:s,interaction:m,contact:m&&m.Contact?m.Contact:{}};u.ckEditorInstance.insertHtml(e(n))}catch(e){console.error(e),u.ckEditorInstance.insertHtml(t.value)}document.getElementById("html-area").focus(),u.selectedItem=null},u.onReadyEditor=function(e){try{u.ckEditorInstance=CKEDITOR.instances["html-area"]}catch(e){console.error("Unable to get Html Editor instance",e)}},_.templateSettings.interpolate=/{{([\s\S]+?)}}/g,u.fromTemplate=_.template("{{ name }} <{{ email }}>"),u.replyTemplate=_.template("On {{ date }}, at {{ time }}, {{ from }} wrote:"),u.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 }}"),u.message={from:u.fromTemplate({name:s.name,email:s.email||s.Smtp.user}),to:[],cc:[],bcc:[],body:E(),type:a,attachments:[],showLastMessage:!0},u.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:u.secret?160:300,autoGrow_maxHeight:e.innerHeight-400,autocorrect_enabled:!0,disableNativeSpellChecker:!1,font_defaultLabel:s.fontFamily?s.fontFamily.split(",")[0]:"Arial",fontSize_defaultLabel:s.fontSize||"12",removePlugins:"magicline"};for(var v=[],h=8;h<=72;h++)v.push(h+"/"+h+"pt");switch(u.ckeditor.fontSize_sizes=v.join(";"),u.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:g,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},u.ngFlow={flow:{}},u.reply=function(e){angular.isDefined(o)&&(u.message.type="reply",u.message.to="in"===o.direction?o.from.split(","):o.to.split(","),u.message.subject=_.startsWith(o.subject,"Re:")?o.subject:"Re: "+o.subject,u.message.inReplyTo=o.messageId,u.message.body=o.draft&&o.draft.inReplyTo?o.draft.body:E(),u.message.attachments=o.draft?o.draft.attachments:[],e&&o.cc&&(u.hiddenCC=!1,u.message.cc=o.cc.split(",")),u.message.showLastMessage=!!o.draft&&o.draft.showLastMessage)},u.newMail=function(){angular.isDefined(o)&&(u.message.type="new",u.message.to=o.to?o.to.split(","):[])},u.forward=function(){if(angular.isDefined(o)){if(u.message.type="forward",u.message.subject=_.startsWith(o.subject,"Fwd:")?o.subject:"Fwd: "+o.subject,u.message.body=o.draft&&!o.draft.inReplyTo?o.draft.body:E(),o.Attachments&&o.Attachments.length)for(var e=0;e<o.Attachments.length;e++)u.message.attachments.push(o.Attachments[e]);u.message.showLastMessage=!!o.draft&&o.draft.showLastMessage}},u.send=function(e,t,n){if(u.message.to&&u.message.body)if(u.message.to.length)if(o.draft=void 0,_.isEmpty(u.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(){f(t,n)})}else f(t,n);else l.error("To is mandatory")},u.note=function(){u.type="note",u.secret=!0,u.message.body='<div style="font-family:'+s.fontFamily+";font-size:"+s.fontSize+'pt"><p></p></div>'},u.addNote=function(){u.message.body&&(u.message.draft=void 0,i.hide({secret:!0,body:u.message.body,attach:u.message.attachments.length,attachments:u.message.attachments}))},u.upload=function(e){u.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+t.get("motion.token")},u.ngFlow.flow.upload()},u.fileSuccess=function(e,t){try{(t=JSON.parse(t)).size=e.size,u.message.attachments.push(t)}catch(e){console.error(e)}},u.deleteAttachment=function(e){u.message.attachments=_.reject(u.message.attachments,{id:e.id}),r.attachment.delete({id:e.id}).$promise.then(function(){l.success({title:"Attachment deleted!",msg:e.name?e.name+" has been deleted!":""})})},u.fileAdded=function(e){if(e.size>g)return l.error({title:"File too big",msg:"The max allowed size is "+p+"MB"}),!1;return!0},u.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+">"},u.contactSearch=function(e){return s&&s.ListId?r.cmContact.get({ListId:s.ListId,nolimit:!0,filter:e,fields:"firstName,lastName,email"}).$promise.then(function(e){return e.rows}):[]},u.transformContact=function(e,t){if(_.isObject(e))return e.email;if(_.isString(e)){if(b(e))return e;for(var n=e.split(","),a=0;a<n.length;a+=1)b(n[a])?_.isArray(t)&&_.indexOf(t,n[a])<0&&t.push(n[a]):l.error("Email "+n[a]+" is not valid");return null}return l.error("Email field is not valid"),null},u.closeDialog=function(){angular.isDefined(o)&&(o.draft=u.message);i.cancel()},u.loadLastMessage=function(){u.message.body+=A(u.message.type)},a){case"reply":u.reply(!1);break;case"replyAll":u.reply(!0);break;case"forward":u.forward();break;case"new":u.newMail();break;case"note":u.note()}function f(e,t){var n={from:u.message.from,to:u.message.to.join(","),cc:u.message.cc.join(","),bcc:u.message.bcc.join(","),subject:u.message.subject,body:u.message.showLastMessage?u.message.body:u.message.body+A(u.message.type),inReplyTo:u.message.inReplyTo,attach:u.message.attachments.length,attachments:u.message.attachments,Interaction:{lastMsgDirection:"out",lastMsgBody:u.message.body,substatus:t}};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 b(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 E(){return'<div style="font-family:'+s.fontFamily+";font-size:"+s.fontSize+'pt">'+function(){if(_.isNil(s.template))return"";try{return _.template(s.template)({user:u.currentUser,account:s,interaction:m,contact:m&&m.Contact?m.Contact:{}})}catch(e){return console.error(e),""}}()+"</div>"}function A(e){var t,n,a='<div id="xm-mail-content"><blockquote type="cite">';switch(e){case"reply":case"replyAll":a+=u.replyTemplate({date:moment(o.createdAt).format("D MMM YYYY")||"",time:moment(o.createdAt).format("HH:mm")||"",from:_.escape(o.from)||""});break;case"forward":a+=u.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:""}r.mailSubstatus.get({nolimit:!0}).$promise.then(function(e){u.subStatuses=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}),u.secret||r.mailAccount.verifySmtp({id:s.id}).$promise.catch(function(e){u.verifySmtp=!1,u.errors.push({message:e.data,type:e.status}),u.errors.push({message:"You can't reply or send an email. Please contact the administrator!",type:"500"})})}e.$inject=["$cookies","$window","$mdDialog","$mdConstant","account","message","type","api","toasty","$q","Auth","interaction"],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,i,s,o){var r=this;function l(){r.mandatoryDisposition&&a.user.pause({id:o.id,type:r.mandatoryDispositionPause||"DEFAULT PAUSE"}).$promise.then(function(e){}).catch(function(e){console.error(e)})}function d(e){r.mandatoryDisposition&&a.user.unpause({id:o.id}).$promise.catch(function(e){console.error(e)}),t.hide(e)}r.errors=[],r.interaction=angular.copy(i),r.dispositions={count:0,rows:[]},r.globalDispositions={count:0,rows:[]},r.channel=s,r.apiRoute=r.channel+"Interaction",r.interaction.disposition||(r.interaction.disposition=null),r.mandatoryDisposition=!0,r.mandatoryDispositionPause="",r.saveDisposition=function(e){r.errors=[],r.interaction.UserId=o.id,r.interaction.closed=!0,r.interaction.closeReason="agent",a[r.apiRoute]?a[r.apiRoute].update(_.pick(r.interaction,["MailAccountId","FaxAccountId","SmsAccountId","ChatWebsiteId","OpenchannelAccountId","closed","closeReason","disposition","id","note","UserId"])).$promise.then(function(e){r.interaction=e,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){r.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)},r.closeDialog=d,function(){var e={fields:"id,name",sort:"name",nolimit:!0};switch(s){case"chat":e.ChatWebsiteId=i.ChatWebsiteId,a.chatWebsite.get({id:i.ChatWebsiteId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()});break;case"mail":e[t=_.capitalize(s)+"AccountId"]=i[t],a.mailAccount.get({id:i.MailAccountId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()});break;case"sms":e[t=_.capitalize(s)+"AccountId"]=i[t],a.smsAccount.get({id:i.SmsAccountId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()});break;case"fax":e[t=_.capitalize(s)+"AccountId"]=i[t],a.faxAccount.get({id:i.FaxAccountId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()});break;case"openchannel":var t;e[t=_.capitalize(s)+"AccountId"]=i[t],a.faxAccount.get({id:i.OpenchannelAccountId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()})}a.disposition.get(e).$promise.then(function(e){r.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){r.globalDispositions=e}).catch(function(e){console.error(e)})}()}e.$inject=["$mdDialog","toasty","api","interaction","channel","user"],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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.faxQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="FaxQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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.startingAllowedItems=angular.copy(l.allowedItems),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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.mailQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="MailQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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},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:!i,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,l,a,d,t,n,i,s){var c=this;function o(){return l(function(n,t){return l(function(t,n){return d.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],i.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:i.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});i.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.voiceQueue.getTeams({id:c.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:[];c.selectedItems=_.map(t,function(e){return _.find(c.items,{id:e.id})}),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=i.getCurrentUser(),c.queueCampaign=t,c.crudPermissions=s,c.penalty=0,c.items=[],c.allowedItems=[],c.selectedItems=[],c.addedItems=[],c.removedItems=[],c.pendingChanges=!1,c.dualMultiselectOptions={readOnly:!c.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?c.removedItems=_.unionBy(e,c.removedItems,"id"):(e.forEach(function(e){e.penalty="penalty "+c.penalty}),c.addedItems=_.unionBy(e,c.addedItems,"id")),c.pendingChanges=!0}},c.onInit=function(){return i.hasRole("admin")?o().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(function(n,t){d.userProfileSection.get({userProfileId:c.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 c.section=e,o()}).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()})})},c.saveTeams=function(){var e=c.removedItems,t=c.addedItems;return(n=e,l(function(e,t){_.isEmpty(n)?e():d.voiceQueue.removeTeams({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.addTeams({id:c.queueCampaign.id,ids:_.map(o,"id"),penalty:_.trim(s,"penalty ")}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}});var r}).then(function(){c.pendingChanges=!1,c.addedItems=[],c.removedItems=[],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},c.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",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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=1;e.$watch("vm.query.filter",function(e,t){E?n(function(){E=!1}):(t||(A=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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"];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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.voiceQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="QueueCampaigns",g.promise=l.userProfile.getResources(g.query,E).$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.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))},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 E(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";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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.openchannelQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="OpenchannelQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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:10,phoneBarAutoUpdater:!0,phoneBarAutoUpdaterUrl:"https://www.xcally.com/bar/phonebar/autoupdater.xml",splitSizeCsv:5e3,splitSizePdf:1e3,splitSizeXlsx:5e3,messagesAlignment:"alternate",phoneBarRememberMeEnabled:!0},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"}],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(){A(e)},function(){console.log("CANCEL")})},h.success=E,h.getNetworks=function(){h.query.offset=(h.query.page-1)*h.query.limit,u.hasRole("admin")?h.promise=d.network.get(h.query,E).$promise:(h.query.id=h.userProfile.id,h.query.section="Networks",h.promise=d.userProfile.getResources(h.query,E).$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=A,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){A(e)}),h.selectedNetworks=[]})},h.deselectNetworks=function(){h.selectedNetworks=[]},h.selectAllNetworks=function(){h.selectedNetworks=h.networks.rows};var f=!0,b=1;function E(e){h.networks=e||{count:0,rows:[]}}function A(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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.smsQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="SmsQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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.startingAllowedItems=angular.copy(l.allowedItems),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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,phoneBarEnableVideoRecording",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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.currentUser=s.getCurrentUser(),o.errors=[],o.setting=i,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",o.agent=a,o.password="",o.oldPassword="",o.savePassword=function(){o.errors=[];var e={id:o.agent.id,newPassword:o.password};o.currentUser.id==o.agent.id&&(e.oldPassword=o.oldPassword);n.user.changePassword(e).$promise.then(function(){t.success({title:"Agent password properly updated!"}),r()}).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()}),o.errors=e.data.errors||[{message:e.toString(),type:"api.agent.changePassword"}]})},o.closeDialog=r}e.$inject=["$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.startingAllowedItems=angular.copy(l.allowedItems),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,ids:_.map(n,"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.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:!o,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.currentUser=s.getCurrentUser(),o.errors=[],o.setting=i,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",o.telephone=a,o.password="",o.oldPassword="",o.savePassword=function(){o.errors=[];var e={id:o.telephone.id,newPassword:o.password};o.currentUser.id==o.telephone.id&&(e.oldPassword=o.oldPassword);n.user.changePassword(e).$promise.then(function(){t.success({title:"Telephone password properly updated!"}),r()}).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()}),o.errors=e.data.errors||[{message:e.toString(),type:"api.telephone.changePassword"}]})},o.closeDialog=r}e.$inject=["$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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,s,o,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){o.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?o.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 o[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)switch(c.selectedSection.reportType){case"default":c.selectedSection.route="analyticDefaultReport";break;case"custom":c.selectedSection.route="analyticCustomReport"}if("Dashboards"!==c.selectedSection.title)return o[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 a=void 0!==c.selectedSection.pending&&c.selectedSection.pending,i=[];return u().then(function(e){return i=e&&e.rows?e.rows:[],"Reports"===c.selectedSection.title&&(c.associatedReports=c.associatedReports?c.associatedReports:i,i=function(e){var t=[];switch(c.selectedSection.reportType){case"default":t=_.filter(e,{type:"DefaultReports"});break;case"custom":t=_.filter(e,{type:"CustomReports"})}return t}(c.associatedReports)),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}):[],a||(c.selectedSection.selectedItems=_.map(i,function(e){return _.find(c.items,{id:e.resourceId})}));var t=_.differenceBy(c.selectedSection.selectedItems,c.items,"id");switch(_.isEmpty(t)||(c.selectedSection.selectedItems=_.pullAllBy(c.selectedSection.selectedItems,t,"id")),c.selectedSection.title){case"Contexts":c.selectedSection.selectedItems=_.filter(c.items,function(e){return e.defaultEntry?(e.isValid=!1,e):void 0!==_.find(i,{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(i,{resourceId:e.id})?(e.isValid=!0,e):void 0});break;case"Reports":var n=function(e){var t=[];switch(c.selectedSection.reportType){case"default":t=_.filter(e,function(e){return _.startsWith(e.parent,"motion")});break;case"custom":t=_.filter(e,function(e){return _.startsWith(e.parent,"custom")})}return t}(c.allReportsSelected);c.selectedSection.selectedItems=b(c.selectedSection.selectedItems),c.selectedSection.selectedItems=_.unionBy(c.selectedSection.selectedItems,n,"id")}c.dualMultiselectOptions.selectedItems=c.selectedSection.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.items,c.dualMultiselectOptions.selectedItems,"id")}).catch(function(e){s.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){var t=[];switch(c.selectedSection.reportType){case"default":t=_.remove(e,function(e){return _.startsWith(e.parent,"motion")});break;case"custom":t=_.remove(e,function(e){return _.startsWith(e.parent,"custom")})}return t}function E(){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){o.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){s.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){s.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=function(){var e={};switch(c.selectedSection.reportType){case"default":e=c.treeReports[0]?angular.fromJson(c.treeReports[0].tree):[];break;case"custom":e=c.treeReports[1]?angular.fromJson(c.treeReports[1].tree):[]}return e}(),c.selectedSection.selectedItems&&(c.allReportsSelected=b(c.allReportsSelected),E());g()},c.setPermission=function(e){switch(e){case"edit":c.selectedSection.allowEdit=!c.selectedSection.allowEdit;break;case"delete":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 o.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(),s.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){s.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&&E()}}}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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.currentUser=s.getCurrentUser(),o.errors=[],o.setting=i,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",o.user=a,o.password="",o.oldPassword="",o.savePassword=function(){o.errors=[];var e={id:o.user.id,newPassword:o.password};o.currentUser.id==o.user.id&&(e.oldPassword=o.oldPassword);n.user.changePassword(e).$promise.then(function(){t.success({title:"User password properly updated!"}),r()}).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()}),o.errors=e.data.errors||[{message:e.toString(),type:"api.user.changePassword"}]})},o.closeDialog=r}e.$inject=["$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",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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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.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:A,select_node:b}:{loaded:y,select_node:E}}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 E(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 A(){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);E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:E,select_node:f}:{loaded:A,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 E(){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 A(){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.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,data7,data3,data4,data5,data6",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'"}],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'"}],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:"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(){h(e)},function(){console.log("CANCEL")})},c.success=v,c.getTriggerAllConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAllConditions(c.query,v).$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=h,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){h(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()})});var p=!0,g=1;function v(e){c.triggerAllConditions=e||{count:0,rows:[]}}function h(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){p?a(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),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!":""}),b(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!":""}),b(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!"}),b(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=b,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;function b(e){a.hide(e)}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()})})}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:"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(){h(e)},function(){console.log("CANCEL")})},c.success=v,c.getTriggerAnyConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAnyConditions(c.query,v).$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=h,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){h(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()})});var p=!0,g=1;function v(e){c.triggerAnyConditions=e||{count:0,rows:[]}}function h(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){p?a(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),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!":""}),b(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!":""}),b(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!"}),b(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=b,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;function b(e){a.hide(e)}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()})})}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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=this;function o(e,t){if(E.outboundrouteApps.rows.length){var n=E.outboundrouteApps.rows[t]?E.outboundrouteApps.rows[t]:E.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:E.outboundroute,crudPermissions:E.crudPermissions}}).then(function(e){e&&(e.id?E.outboundrouteApps.rows[t]=e:E.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:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"CDR(destination)="+(E.outboundroute.cutdigits?"${EXTEN:"+E.outboundroute.cutdigits+"}":"${EXTEN}"),context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"CDR(routeid)="+E.outboundroute.id,context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id});var a=t++;n.push({type:"outbound",app:"ExecIf",appdata:"$[${LEN(${CDR(prefix)})} > 0]?Goto("+(a+2)+"):Goto("+(a+1)+")",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:a,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:E.outboundroute.cutdigits?"CDR(prefix)=${EXTEN:0:"+E.outboundroute.cutdigits+"}":"CDR(prefix)=noprefix",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+E.outboundroute.id,context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),E.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==E.outboundroute.recordingFormat&&(n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+E.outboundroute.recordingFormat||"wav",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}));for(var i=0,s=0;i<E.outboundrouteApps.rows.length;i++,s=0){var o=E.outboundrouteApps.rows[i],r=[],l=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(E.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=E.outboundroute.context,o.exten=E.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:E.outboundroute.context,exten:E.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:E.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:E.outboundroute.context,exten:E.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:E.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:E.outboundroute.context,exten:E.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:E.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]+"?"+E.outboundroute.context+",${EXTEN},"+c+":"+E.outboundroute.context+",${EXTEN},"+m,exten:E.outboundroute.exten,context:E.outboundroute.context,priority:t+d,VoiceExtensionId:E.outboundroute.id})}if(e&&"outboundDial"===o.appType){var u=_.find(E.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=E.outboundroute.cutdigits?(p.prefix||"")+"${EXTEN:"+E.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"!==E.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:E.outboundroute.exten,context:E.outboundroute.context,priority:t,VoiceExtensionId:E.outboundroute.id}),b.voiceExtension.addApplications({id:E.outboundroute.id},_.sortBy(n,"priority")).$promise.then(function(e){E.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function l(e){E.outboundrouteApps=e||{count:0,rows:[]}}E.currentUser=t.getCurrentUser(),E.outboundroute={},E.outboundrouteApps={count:0,rows:[]},E.selectedOutboundRouteApps=[],E.crudPermissions,E.query={sort:"priority"},E.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}),E.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},E.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){o(e,e.newIndex)},onSort:function(e){r()}},E.init=function(e,t){E.outboundroute=e,E.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},E.applications.disabled=!E.crudPermissions.canEdit,n.on("voiceExtension:update",E.onVoiceExtensionUpdate),E.query.VoiceExtensionId=e.id,E.query.isApp=!0,E.query.nolimit=!0,E.getOutboundRouteApps(),E.getIntervals()},E.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(){E.outboundrouteApps.rows.splice(t,1),r()},function(){console.log("CANCEL")})},E.getOutboundRouteApps=function(){E.promise=b.voiceExtension.get(E.query,l).$promise},E.editOutboundRouteApp=o,E.editInterval=function(e,t){if(E.outboundrouteApps.rows.length){var n=E.outboundrouteApps.rows[t]?E.outboundrouteApps.rows[t]:E.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:E.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,r())})}},E.deleteOutboundRouteApp=function(e){_.remove(E.outboundrouteApps.rows,{id:e.id}),r(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},E.deleteSelectedOutboundRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+E.selectedOutboundRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){E.selectedOutboundRouteApps.forEach(function(e){_.remove(E.outboundrouteApps.rows,{id:e.id})}),E.selectedOutboundRouteApps=[],r()})},E.rewriteRouting=r,E.getIntervals=function(){return b.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){E.intervals=e}).catch(function(e){console.error(e)})},E.onVoiceExtensionUpdate=function(e){e.VoiceExtensionId===E.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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=1;e.$watch("vm.query.filter",function(e,t){E?n(function(){E=!1}):(t||(A=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.voiceQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="VoiceQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!i,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,l,a,d,t,n,i,s){var c=this;function o(){return l(function(n,t){return l(function(t,n){return d.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],i.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:i.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});i.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.voiceQueue.getTeams({id:c.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:[];c.selectedItems=_.map(t,function(e){return _.find(c.items,{id:e.id})}),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=i.getCurrentUser(),c.voiceQueue=t,c.crudPermissions=s,c.penalty=0,c.items=[],c.allowedItems=[],c.selectedItems=[],c.addedItems=[],c.removedItems=[],c.pendingChanges=!1,c.dualMultiselectOptions={readOnly:!c.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?c.removedItems=_.unionBy(e,c.removedItems,"id"):(e.forEach(function(e){e.penalty="penalty "+c.penalty}),c.addedItems=_.unionBy(e,c.addedItems,"id")),c.pendingChanges=!0}},c.onInit=function(){return i.hasRole("admin")?o().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(function(n,t){d.userProfileSection.get({userProfileId:c.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 c.section=e,o()}).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()})})},c.saveTeams=function(){var e=c.removedItems,t=c.addedItems;return(n=e,l(function(e,t){_.isEmpty(n)?e():d.voiceQueue.removeTeams({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.addTeams({id:c.voiceQueue.id,ids:_.map(o,"id"),penalty:_.trim(s,"penalty ")}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}});var r}).then(function(){c.pendingChanges=!1,c.addedItems=[],c.removedItems=[],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},c.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,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.voiceRecordings=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="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(s,e){return m.voiceRecording.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.uniqueid+s.format;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.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(){if(b.pickerModel.dateStart){var e=moment(b.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();b.query.createdAt={$gte:b.pickerModel.dateStart,$lte:e}}else 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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:11,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",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.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(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.errors=[],o.user=a,o.setting=i,o.reset=s,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",o.savePassword=function(){o.errors=[],n.user.changePassword({id:o.user.id},{oldPassword:o.oldPassword,newPassword:o.password}).$promise.then(function(){t.show(t.simple().textContent("Your password properly updated").position("top right").hideDelay(5e3)),r()}).catch(function(e){console.error(e),o.errors=e.data.errors&&e.data.errors.length?e.data.errors:[{message:e.data.message||"Authorization error",type:"api.user.changePassword"}]})},o.closeDialog=r}e.$inject=["$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,E,A){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=A(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=E,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 w(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 O(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:E,reset:t}})}S.toggleSidenav=function(e){i(e).toggle()},S.logout=w,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=O,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){w(!0)}).finally(function(){_.merge(S.user,e),v.updateCurrentUser(S.user)})}else w(!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)?O(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 O(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&&(A.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)/(E=a*a))?(n*=Math.sqrt(v),a*=Math.sqrt(v),0):(v=1,s===o&&(v=-1),v*Math.sqrt((g*E-g*p-E*c)/(g*p+E*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=E=0,h=[],f=0;f<o;++f){s+=i;var b,E=c*(u=Math.cos(s))-a*(b=Math.sin(s))+r,A=(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(E-A+e),h[b+3]=Number(v-u+t),h[b+4]=Number(E+e),h[b+5]=Number(v+t),p=E+A,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 E=this.states[b];null!=E&&(this.horizontal&&(e.call(this,E.getCenterX()),e.call(this,E.x),e.call(this,E.x+E.width)),this.vertical&&(f.call(this,E.getCenterY()),f.call(this,E.y),f.call(this,E.y+E.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,E){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!=E?E: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),E=(m=[],u=[],0);E<f.length;E++)m[E]=f[E].getGeneralPurposeVariable(s+1);for(E=0;E<b.length;E++)u[E]=b[E].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=[],E=0;E<d.length;E++)p[E]=d[E].getGeneralPurposeVariable(s+1);for(E=0;E<c.length;E++)g[E]=c[E].getGeneralPurposeVariable(s-1);var A=0,y=0;for(E=0;E<m.length;E++)for(var S=0;S<p.length;S++)m[E]>p[S]&&A++,m[E]<p[S]&&y++;for(E=0;E<u.length;E++)for(S=0;S<g.length;S++)u[E]>g[S]&&A++,u[E]<g[S]&&y++;(y<A||y==A&&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 E=f;f=b,b=E}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,E=g*m+f+1;(n=this.renderPage(this.pageFormat.width,this.pageFormat.height,mxUtils.bind(this,function(e){this.addGraphFragment(-b,-h,this.scale,E,e)}))).setAttribute("id","mxPage-"+E),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};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}()),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 E=i.createDiv("p");E.className="help-block",mxUtils.write(E,mxResources.get("help_"+p)),b.appendChild(E)}h.appendChild(b),c.appendChild(h)}n.appendChild(c);var A=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()}));A.className="btn blue";var y=mxUtils.button(mxResources.get("cancel"),function(){i.hideDialog()});y.className="btn default",a.appendChild(A),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-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">\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="icon-google-plus" 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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(extractedReport, $event)" translate="ANALYTICS.EDIT_EXTRACTEDREPORT">\n                                                    Edit ExtractedReport\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.downloadfile2(extractedReport, $event)" translate="ANALYTICS.DOWNLOAD_EXTRACTEDREPORT">\n                                                    Download ExtractedReport\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(extractedReport, $event)" translate="ANALYTICS.DELETE_EXTRACTEDREPORT">\n                                                    Delete ExtractedReport\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.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                                <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="ANALYTICS.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.editdialog(metric, $event)" translate="ANALYTICS.EDIT_METRIC">\n                                                    Edit Metric\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(metric, $event)" translate="ANALYTICS.DELETE_METRIC">\n                                                    Delete Metric\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.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                                <td md-cell class="actions">\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.editdialog(odbc, $event)" translate="CALLYSQUARE.EDIT_ODBC">\n                                                    Edit Odbc\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestOdbc(odbc, $event)" translate="CALLYSQUARE.TEST_ODBC">\n                                                    Test Odbc\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(odbc, $event)" translate="CALLYSQUARE.DELETE_ODBC">\n                                                    Delete Odbc\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.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                                <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                                <td md-cell class="actions">\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>\n                                                <md-button ng-click="vm.downloadfile2(squareRecording, $event)" translate="CALLYSQUARE.DOWNLOAD_SQUARERECORDING">\n                                                    Download SquareRecording\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(squareRecording, $event)" translate="CALLYSQUARE.DELETE_SQUARERECORDING">\n                                                    Delete SquareRecording\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(chatQueue, $event)" translate="CHAT.EDIT_CHATQUEUE">\n                                                    Edit ChatQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(chatQueue, $event)" translate="CHAT.TEAMADD_CHATQUEUE">\n                                                    teamadd ChatQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(chatQueue, $event)" translate="CHAT.AGENTADD_CHATQUEUE">\n                                                    agentadd ChatQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(chatQueue, $event)" translate="CHAT.DELETE_CHATQUEUE">\n                                                    Delete ChatQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(chatQueue, $event)" translate="CHAT.GOTOREALTIME_CHATQUEUE">\n                                                    goToRealtime ChatQueue\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(chatWebsite, $event)" translate="CHAT.EDIT_CHATWEBSITE">\n                                                    Edit ChatWebsite\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(chatWebsite, $event)" translate="CHAT.INTERACTIONS_CHATWEBSITE">\n                                                    Interactions ChatWebsite\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.offlinemessagesgoto(chatWebsite, $event)" translate="CHAT.OFFLINEMESSAGES_CHATWEBSITE">\n                                                    OfflineMessages ChatWebsite\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(chatWebsite, $event)" translate="CHAT.AGENTADD_CHATWEBSITE">\n                                                    AgentAdd ChatWebsite\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(chatWebsite, $event)" translate="CHAT.DELETE_CHATWEBSITE">\n                                                    Delete ChatWebsite\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.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                            </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                            </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                            </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                            </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            </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                    </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                    </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                        <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                    </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                    </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                    </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                    </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                    </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                    </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                    </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                    </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                    </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                    </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="4">{{ \'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" 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">\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                            <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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(company, $event)" translate="CONTACTMANAGER.EDIT_COMPANY">\n                                                    Edit Company\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotocontactsgoto(company, $event)" translate="CONTACTMANAGER.GOTOCONTACTS_COMPANY">\n                                                    goToContacts Company\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(company, $event)" translate="CONTACTMANAGER.DELETE_COMPANY">\n                                                    Delete Company\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.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">\n                                    <md-optgroup label="Lists">\n                                        <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                                    </md-optgroup>\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 companie" flex="100" ng-model="vm.selectedCompany">\n                                    <md-optgroup label="Companies">\n                                        <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows">{{company.name}}</md-option>\n                                    </md-optgroup>\n                                </md-select>\n                            </md-input-container>\n\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 placeholder="Select one or more tags" flex="100" ng-model="vm.query.tag" ng-change="vm.getContacts()" multiple>\n                                    <md-optgroup label="Tags">\n                                        <md-option ng-value="tag.id" ng-repeat="tag in vm.tags.rows">{{tag.name}}</md-option>\n                                    </md-optgroup>\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-optgroup label="Companies">\n                        <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows">{{company.name}}</md-option>\n                    </md-optgroup>\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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(globalCustomField, $event)" translate="CONTACTMANAGER.EDIT_GLOBALCUSTOMFIELD">\n                                                    Edit GlobalCustomField\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(globalCustomField, $event)" translate="CONTACTMANAGER.DELETE_GLOBALCUSTOMFIELD">\n                                                    Delete GlobalCustomField\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.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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(list, $event)" translate="CONTACTMANAGER.EDIT_LIST">\n                                                    Edit List\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotocontactsgoto(list, $event)" translate="CONTACTMANAGER.GOTOCONTACTS_LIST">\n                                                    goToContacts List\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.exportcsvcontactsexport(list, $event)" translate="CONTACTMANAGER.EXPORTCSVCONTACTS_LIST">\n                                                    exportCsvContacts List\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(list, $event)" translate="CONTACTMANAGER.AGENTADD_LIST">\n                                                    AgentAdd List\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(list, $event)" translate="CONTACTMANAGER.DELETE_LIST">\n                                                    Delete List\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.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)"></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()">\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\'" class="md-padding">\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\'" class="md-padding">\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">\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.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_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">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="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">\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.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_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">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="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></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 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\'"></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\'"></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\'"></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\'"></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\'"></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\'"></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)"></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\'"></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)"></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\'"></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)"></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\'"></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)"></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\'"></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)"></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\'"></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\'"></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\'"></div>\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" ng-class="vm.getColorByChannel(\'chat\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getChatInteractions()">\n                    <md-option ng-value="chatAccount.id" ng-repeat="chatAccount in vm.chatAccounts.rows">{{chatAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getChatInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getChatInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.WEBSITE\' | 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.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.unread}">\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 ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!chatInteraction.closed && chatInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'chat\')" layout-margin>{{chatInteraction.unread}}</span>\n                                <md-icon ng-if="chatInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(chatInteraction)}}</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 </div> <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" style="width:120px">{{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 ng-if="chatInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': chatInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{chatInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="chatInteraction.Tags.length > 1" 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"></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="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>\n    <md-toolbar class="md-table-toolbar md-default table-header red-bg">\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.query.filter = undefined" debounce="300"></ms-search-bar>\n            <div flex></div>\n            <div layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_LIST">Select a list</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.ListId" ng-change="vm.getContacts()">\n                    <md-option ng-value="vm.defaultLists" ng-if="vm.lists.count > 1"><em translate="CONTACTMANAGER.ALL_CONTACTS">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            </div>\n            <div layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_TAG">Select a tag</span>\n                <md-select id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getContacts()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <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="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="Voice">\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="Bull">\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="Chat">\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="Email">\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="Sms">\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="Open Channel">\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="Fax">\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" ng-class="vm.getColorByChannel(\'fax\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getFaxInteractions()">\n                    <md-option ng-value="faxAccount.id" ng-repeat="faxAccount in vm.faxAccounts.rows">{{faxAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getFaxInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getFaxInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | 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.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.unread}">\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 ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!faxInteraction.closed && faxInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'fax\')" layout-margin>{{faxInteraction.unread}}</span>\n                                <md-icon ng-if="faxInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(faxInteraction)}}</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 </div> <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" style="width:120px">{{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 ng-if="faxInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': faxInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{faxInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="faxInteraction.Tags.length > 1" 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"></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="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" ng-class="vm.getColorByChannel(\'mail\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getMailInteractions()">\n                    <md-option ng-value="mailAccount.id" ng-repeat="mailAccount in vm.mailAccounts.rows">{{mailAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getMailInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getMailInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="subject" style="width:200px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | 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.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.unread}">\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 ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!mailInteraction.closed && mailInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'mail\')" layout-margin>{{mailInteraction.unread}}</span>\n                                <md-icon ng-if="mailInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(mailInteraction)}}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div ng-if="vm.setting.enableEmailPreview && mailInteraction.lastMsgBody" class="tooltip-preview">\n                            <span class="text-truncate font-size-12" style="width:200px">{{mailInteraction.subject}}</span>\n                            <md-card class="tooltip-preview-text" ng-style="{top: \'-\' + ((($index % 10) + 1) * 18) + \'px\'}">\n                                <md-card-content>{{mailInteraction.lastMsgBody}}<br>...</md-card-content>\n                            </md-card>\n                        </div>\n                        <span ng-if="!mailInteraction.lastMsgBody || !vm.setting.enableEmailPreview" class="text-truncate font-size-12" style="width:200px">{{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 </div> <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" style="width:120px">{{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 ng-if="mailInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': mailInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{mailInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="mailInteraction.Tags.length > 1" 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"></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="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">\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.query.filter = undefined" debounce="300"></ms-search-bar>\n            <div flex></div>\n            <div layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_LIST">Select a list</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.ListId" ng-change="vm.getContacts()">\n                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                    <md-option ng-value="vm.defaultLists" ng-if="vm.lists.count > 1"><em translate="CONTACTMANAGER.ALL_CONTACTS">All</em></md-option>\n                </md-select>\n            </div>\n            <div layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_TAG">Select a tag</span>\n                <md-select id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getContacts()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <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="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" ng-class="vm.getColorByChannel(\'openchannel\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getOpenchannelInteractions()">\n                    <md-option ng-value="openchannelAccount.id" ng-repeat="openchannelAccount in vm.openchannelAccounts.rows">{{openchannelAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getOpenchannelInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getOpenchannelInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | 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.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.unread}">\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 ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!openchannelInteraction.closed && openchannelInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'openchannel\')" layout-margin>{{openchannelInteraction.unread}}</span>\n                                <md-icon ng-if="openchannelInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(openchannelInteraction)}}</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 </div> <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" style="width:120px">{{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 ng-if="openchannelInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': openchannelInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{openchannelInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="openchannelInteraction.Tags.length > 1" 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"></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="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">\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.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="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()">\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            \x3c!-- <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.query.filter = undefined" debounce="300"></ms-search-bar> --\x3e\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" ng-class="vm.getColorByChannel(\'sms\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getSmsInteractions()">\n                    <md-option ng-value="smsAccount.id" ng-repeat="smsAccount in vm.smsAccounts.rows">{{smsAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getSmsInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getSmsInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | 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.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.unread}">\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 ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!smsInteraction.closed && smsInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'sms\')" layout-margin>{{smsInteraction.unread}}</span>\n                                <md-icon ng-if="smsInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(smsInteraction)}}</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 </div> <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" style="width:120px">{{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 ng-if="smsInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': smsInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{smsInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="smsInteraction.Tags.length > 1" 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"></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="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">\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.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="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">ID</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 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"></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 }} - {{ 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()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-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                    \x3c!-- <md-select ng-disabled="vm.interaction.closed && vm.interaction.disposition" name="disposition" ng-model="vm.interaction.disposition" required> --\x3e\n                    <md-option ng-value="null">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                \x3c!-- <textarea ng-disabled="vm.interaction.closed && vm.interaction.disposition" ng-model="vm.interaction.note" md-maxlength="255" max-rows="5" autofocus></textarea> --\x3e\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        \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.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 && !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" aria-label="DISPOSE" translate="DASHBOARDS.DISPOSE" translate-attr-aria-label="DASHBOARDS.DISPOSE">\n                    DISPOSE\n                </md-button>\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></md-tooltip>\n                        <div layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="icon s24"></md-icon><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)">{{ 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]">[{{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)"><strong>{{message.from}}</strong>\n                                        <md-icon ng-if="message.attach" md-font-icon="icon-paperclip" class="s16"></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></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"><em><span class="blue-grey" translate="MAIL.YOU_ARE_REGISTERED_AS_A">You are 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"><em><span class="red-fg" translate="MAIL.YOU_ARE_REGISTERED_AS_A">You are 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                            <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></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></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></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></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><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)">{{ 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",'<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                            </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                            </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                            </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                            </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                            </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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(faxAccount, $event)" translate="FAX.EDIT_FAXACCOUNT">\n                                                    Edit FaxAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(faxAccount, $event)" translate="FAX.INTERACTIONS_FAXACCOUNT">\n                                                    Interactions FaxAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(faxAccount, $event)" translate="FAX.GOTOREALTIME_FAXACCOUNT">\n                                                    goToRealtime FaxAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(faxAccount, $event)" translate="FAX.AGENTADD_FAXACCOUNT">\n                                                    AgentAdd FaxAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(faxAccount, $event)" translate="FAX.DELETE_FAXACCOUNT">\n                                                    Delete FaxAccount\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(faxQueue, $event)" translate="FAX.EDIT_FAXQUEUE">\n                                                    Edit FaxQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(faxQueue, $event)" translate="FAX.TEAMADD_FAXQUEUE">\n                                                    teamadd FaxQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(faxQueue, $event)" translate="FAX.AGENTADD_FAXQUEUE">\n                                                    agentadd FaxQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(faxQueue, $event)" translate="FAX.DELETE_FAXQUEUE">\n                                                    Delete FaxQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(faxQueue, $event)" translate="FAX.GOTOREALTIME_FAXQUEUE">\n                                                    goToRealtime FaxQueue\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.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="4">{{ \'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" 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">\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                            <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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(deskAccount, $event)" translate="INTEGRATIONS.EDIT_DESKACCOUNT">\n                                                    Edit DeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(deskAccount, $event)" translate="INTEGRATIONS.TEST_DESKACCOUNT">\n                                                    Test DeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(deskAccount, $event)" translate="INTEGRATIONS.DELETE_DESKACCOUNT">\n                                                    Delete DeskAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(dynamics365Account, $event)" translate="INTEGRATIONS.EDIT_DYNAMICS365ACCOUNT">\n                                                    Edit Dynamics365Account\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(dynamics365Account, $event)" translate="INTEGRATIONS.TEST_DYNAMICS365ACCOUNT">\n                                                    Test Dynamics365Account\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(dynamics365Account, $event)" translate="INTEGRATIONS.DELETE_DYNAMICS365ACCOUNT">\n                                                    Delete Dynamics365Account\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(freshdeskAccount, $event)" translate="INTEGRATIONS.EDIT_FRESHDESKACCOUNT">\n                                                    Edit FreshdeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(freshdeskAccount, $event)" translate="INTEGRATIONS.TEST_FRESHDESKACCOUNT">\n                                                    Test FreshdeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(freshdeskAccount, $event)" translate="INTEGRATIONS.DELETE_FRESHDESKACCOUNT">\n                                                    Delete FreshdeskAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(salesforceAccount, $event)" translate="INTEGRATIONS.EDIT_SALESFORCEACCOUNT">\n                                                    Edit SalesforceAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(salesforceAccount, $event)" translate="INTEGRATIONS.TEST_SALESFORCEACCOUNT">\n                                                    Test SalesforceAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(salesforceAccount, $event)" translate="INTEGRATIONS.DELETE_SALESFORCEACCOUNT">\n                                                    Delete SalesforceAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(servicenowAccount, $event)" translate="INTEGRATIONS.EDIT_SERVICENOWACCOUNT">\n                                                    Edit ServicenowAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(servicenowAccount, $event)" translate="INTEGRATIONS.TEST_SERVICENOWACCOUNT">\n                                                    Test ServicenowAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(servicenowAccount, $event)" translate="INTEGRATIONS.DELETE_SERVICENOWACCOUNT">\n                                                    Delete ServicenowAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(sugarcrmAccount, $event)" translate="INTEGRATIONS.EDIT_SUGARCRMACCOUNT">\n                                                    Edit SugarcrmAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(sugarcrmAccount, $event)" translate="INTEGRATIONS.TEST_SUGARCRMACCOUNT">\n                                                    Test SugarcrmAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(sugarcrmAccount, $event)" translate="INTEGRATIONS.DELETE_SUGARCRMACCOUNT">\n                                                    Delete SugarcrmAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(vtigerAccount, $event)" translate="INTEGRATIONS.EDIT_VTIGERACCOUNT">\n                                                    Edit VtigerAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(vtigerAccount, $event)" translate="INTEGRATIONS.TEST_VTIGERACCOUNT">\n                                                    Test VtigerAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(vtigerAccount, $event)" translate="INTEGRATIONS.DELETE_VTIGERACCOUNT">\n                                                    Delete VtigerAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(zendeskAccount, $event)" translate="INTEGRATIONS.EDIT_ZENDESKACCOUNT">\n                                                    Edit ZendeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(zendeskAccount, $event)" translate="INTEGRATIONS.TEST_ZENDESKACCOUNT">\n                                                    Test ZendeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(zendeskAccount, $event)" translate="INTEGRATIONS.DELETE_ZENDESKACCOUNT">\n                                                    Delete ZendeskAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(zohoAccount, $event)" translate="INTEGRATIONS.EDIT_ZOHOACCOUNT">\n                                                    Edit ZohoAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(zohoAccount, $event)" translate="INTEGRATIONS.TEST_ZOHOACCOUNT">\n                                                    Test ZohoAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(zohoAccount, $event)" translate="INTEGRATIONS.DELETE_ZOHOACCOUNT">\n                                                    Delete ZohoAccount\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: \'{{\'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                                <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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(project, $event)" translate="JSCRIPTY.EDIT_PROJECT">\n                                                    Edit Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(project, $event)" translate="JSCRIPTY.CLONE_PROJECT">\n                                                    clone Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.sessionsgoto(project, $event)" translate="JSCRIPTY.SESSIONS_PROJECT">\n                                                    Sessions Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(project, $event)" translate="JSCRIPTY.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: \'{{\'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            </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            </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                            </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                                <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                            </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                            </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                            </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                            </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                            </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                            </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                                <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                            </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                            </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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(mailAccount, $event)" translate="MAIL.EDIT_MAILACCOUNT">\n                                                    Edit MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.verifysmtpverifysmtp(mailAccount, $event)" translate="MAIL.VERIFYSMTP_MAILACCOUNT">\n                                                    verifysmtp MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(mailAccount, $event)" translate="MAIL.INTERACTIONS_MAILACCOUNT">\n                                                    Interactions MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(mailAccount, $event)" translate="MAIL.GOTOREALTIME_MAILACCOUNT">\n                                                    goToRealtime MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(mailAccount, $event)" translate="MAIL.AGENTADD_MAILACCOUNT">\n                                                    AgentAdd MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(mailAccount, $event)" translate="MAIL.DELETE_MAILACCOUNT">\n                                                    Delete MailAccount\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(mailQueue, $event)" translate="MAIL.EDIT_MAILQUEUE">\n                                                    Edit MailQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(mailQueue, $event)" translate="MAIL.TEAMADD_MAILQUEUE">\n                                                    teamadd MailQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(mailQueue, $event)" translate="MAIL.AGENTADD_MAILQUEUE">\n                                                    agentadd MailQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(mailQueue, $event)" translate="MAIL.DELETE_MAILQUEUE">\n                                                    Delete MailQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(mailQueue, $event)" translate="MAIL.GOTOREALTIME_MAILQUEUE">\n                                                    goToRealtime MailQueue\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.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                                <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="MAIL.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.editdialog(mailSubstatus, $event)" translate="MAIL.EDIT_MAILSUBSTATUS">\n                                                    Edit MailSubstatus\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(mailSubstatus, $event)" translate="MAIL.DELETE_MAILSUBSTATUS">\n                                                    Delete MailSubstatus\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.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="4">{{ \'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" 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">\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                            <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            </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                            </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                                <td md-cell class="actions">\n                                    <md-menu>\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && !plugin.active">\n                                                <md-button ng-click="vm.installplugin(plugin, $event)" translate="MARKETPLACE.INSTALL_PLUGIN">\n                                                    Install Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(plugin, $event)" translate="MARKETPLACE.EDIT_PLUGIN">\n                                                    Edit Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active && plugin.type == \'script\'">\n                                                <md-button ng-click="vm.stopplugin(plugin, $event)" translate="MARKETPLACE.STOP_PLUGIN">\n                                                    Stop Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active && plugin.type == \'script\'">\n                                                <md-button ng-click="vm.restartplugin(plugin, $event)" translate="MARKETPLACE.RESTART_PLUGIN">\n                                                    Restart Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.downloadfile2(plugin, $event)" translate="MARKETPLACE.DOWNLOAD_PLUGIN">\n                                                    Download Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active">\n                                                <md-button ng-click="vm.uninstallplugin(plugin, $event)" translate="MARKETPLACE.UNINSTALL_PLUGIN">\n                                                    Uninstall Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(plugin, $event)" translate="MARKETPLACE.DELETE_PLUGIN">\n                                                    Delete Plugin\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: \'{{\'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            </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                            </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                <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})[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})[0].name }}</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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(ivrCampaign, $event)" translate="MOTIONDIALER.EDIT_IVRCAMPAIGN">\n                                                    Edit IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(ivrCampaign, $event)" translate="MOTIONDIALER.CLONE_IVRCAMPAIGN">\n                                                    clone IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.listadddialog(ivrCampaign, $event)" translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN">\n                                                    listadd IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.blacklistadddialog(ivrCampaign, $event)" translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN">\n                                                    blacklistadd IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(ivrCampaign, $event)" translate="MOTIONDIALER.DELETE_IVRCAMPAIGN">\n                                                    Delete IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(ivrCampaign, $event)" translate="MOTIONDIALER.GOTOREALTIME_IVRCAMPAIGN">\n                                                    goToRealtime IvrCampaign\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.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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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            </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) || (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                            </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                                <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                                <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                            </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                                <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                            </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 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                                <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                <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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(queueCampaign, $event)" translate="MOTIONDIALER.EDIT_QUEUECAMPAIGN">\n                                                    Edit QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(queueCampaign, $event)" translate="MOTIONDIALER.CLONE_QUEUECAMPAIGN">\n                                                    clone QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.listadddialog(queueCampaign, $event)" translate="MOTIONDIALER.LISTADD_QUEUECAMPAIGN">\n                                                    listadd QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.blacklistadddialog(queueCampaign, $event)" translate="MOTIONDIALER.BLACKLISTADD_QUEUECAMPAIGN">\n                                                    blacklistadd QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(queueCampaign, $event)" translate="MOTIONDIALER.TEAMADD_QUEUECAMPAIGN">\n                                                    teamadd QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(queueCampaign, $event)" translate="MOTIONDIALER.AGENTADD_QUEUECAMPAIGN">\n                                                    agentadd QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(queueCampaign, $event)" translate="MOTIONDIALER.DELETE_QUEUECAMPAIGN">\n                                                    Delete QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(queueCampaign, $event)" translate="MOTIONDIALER.GOTOREALTIME_QUEUECAMPAIGN">\n                                                    goToRealtime QueueCampaign\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.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="4">{{ \'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" 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">\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                            <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/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>\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                            </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                            </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                            </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                            </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                            </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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(openchannelAccount, $event)" translate="OPENCHANNEL.EDIT_OPENCHANNELACCOUNT">\n                                                    Edit OpenchannelAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(openchannelAccount, $event)" translate="OPENCHANNEL.INTERACTIONS_OPENCHANNELACCOUNT">\n                                                    Interactions OpenchannelAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(openchannelAccount, $event)" translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT">\n                                                    AgentAdd OpenchannelAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(openchannelAccount, $event)" translate="OPENCHANNEL.DELETE_OPENCHANNELACCOUNT">\n                                                    Delete OpenchannelAccount\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(openchannelQueue, $event)" translate="OPENCHANNEL.EDIT_OPENCHANNELQUEUE">\n                                                    Edit OpenchannelQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(openchannelQueue, $event)" translate="OPENCHANNEL.TEAMADD_OPENCHANNELQUEUE">\n                                                    teamadd OpenchannelQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(openchannelQueue, $event)" translate="OPENCHANNEL.AGENTADD_OPENCHANNELQUEUE">\n                                                    agentadd OpenchannelQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(openchannelQueue, $event)" translate="OPENCHANNEL.DELETE_OPENCHANNELQUEUE">\n                                                    Delete OpenchannelQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(openchannelQueue, $event)" translate="OPENCHANNEL.GOTOREALTIME_OPENCHANNELQUEUE">\n                                                    goToRealtime OpenchannelQueue\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.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="4">{{ \'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" 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">\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                            <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            </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            </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            </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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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                    </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                    </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                    </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                    </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                    </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            <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="generalForm[\'min_internal\'].$error" ng-show="generalForm[\'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                <md-switch ng-model="vm.general.securePassword" aria-label="Security_Suite"><span translate="SETTINGS.SECURITY_SUITE">Security_Suite</span></md-switch>\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            </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="generalForm[\'chatTimeout\'].$error" ng-show="generalForm[\'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="generalForm[\'stunaddr\'].$error" ng-show="generalForm[\'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="generalForm[\'turnaddr\'].$error" ng-show="generalForm[\'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="generalForm[\'turnusername\'].$error" ng-show="generalForm[\'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="generalForm[\'turnpassword\'].$error" ng-show="generalForm[\'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.split" aria-label="Split"><span translate="SETTINGS.SPLIT">Split</span></md-switch>\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="generalForm[\'splitSizeCsv\'].$error" ng-show="generalForm[\'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="generalForm[\'splitSizePdf\'].$error" ng-show="generalForm[\'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="generalForm[\'splitSizeXlsx\'].$error" ng-show="generalForm[\'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            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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) || (globalForm.$invalid || motionbarForm.$invalid || reportForm.$invalid || agentOmniDesktopInterfaceForm.$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                        <md-switch ng-model="vm.general.securePassword" aria-label="Security_Suite"><span translate="SETTINGS.SECURITY_SUITE">Security_Suite</span></md-switch>\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                    </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                        <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                    </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                        <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                    </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                    </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>\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        <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>\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>\n                                <a href="https://www.xcally.com/en/index.html#pricing-table2-h" 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" 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" 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" 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                                <td md-cell class="actions">\n                                    <md-menu>\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                                        <md-menu-content width="3">\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.editdialog(network, $event)" translate="SETTINGS.EDIT_NETWORK">\n                                                    Edit Network\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(network, $event)" translate="SETTINGS.DELETE_NETWORK">\n                                                    Delete Network\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: \'{{\'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                <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            </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                        <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                    </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="4">{{ \'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" 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">\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                            <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 == \'skebby\' && vm.smsAccount.smsMethod == \'GP\') || 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                            </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                            </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                            </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                            </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                            </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                            </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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(smsAccount, $event)" translate="SMS.EDIT_SMSACCOUNT">\n                                                    Edit SmsAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(smsAccount, $event)" translate="SMS.INTERACTIONS_SMSACCOUNT">\n                                                    Interactions SmsAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(smsAccount, $event)" translate="SMS.AGENTADD_SMSACCOUNT">\n                                                    AgentAdd SmsAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(smsAccount, $event)" translate="SMS.DELETE_SMSACCOUNT">\n                                                    Delete SmsAccount\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(smsQueue, $event)" translate="SMS.EDIT_SMSQUEUE">\n                                                    Edit SmsQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(smsQueue, $event)" translate="SMS.TEAMADD_SMSQUEUE">\n                                                    teamadd SmsQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(smsQueue, $event)" translate="SMS.AGENTADD_SMSQUEUE">\n                                                    agentadd SmsQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(smsQueue, $event)" translate="SMS.DELETE_SMSQUEUE">\n                                                    Delete SmsQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(smsQueue, $event)" translate="SMS.GOTOREALTIME_SMSQUEUE">\n                                                    goToRealtime SmsQueue\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.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 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="8">\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 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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(agent, $event)" translate="STAFF.EDIT_AGENT">\n                                                    Edit Agent\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(agent, $event)" translate="STAFF.TEAMADD_AGENT">\n                                                    teamadd Agent\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(agent, $event)" translate="STAFF.DELETE_AGENT">\n                                                    Delete Agent\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: \'{{\'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            </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            </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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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.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>\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                    <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\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                            </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                            </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\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                            </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                            </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                            </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                            </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                            </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                            </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                            </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                            </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                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0" class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableVideoRecording" aria-label="EnableVideoRecording" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEVIDEORECORDING">EnableVideoRecording</span></md-switch>\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                            </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                            </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                            </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                            </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                            </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                            </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                            </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                            </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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(team, $event)" translate="STAFF.EDIT_TEAM">\n                                                    Edit Team\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(team, $event)" translate="STAFF.AGENTADD_TEAM">\n                                                    AgentAdd Team\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(team, $event)" translate="STAFF.DELETE_TEAM">\n                                                    Delete Team\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: \'{{\'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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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.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>\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                    <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\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                                <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="STAFF.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(telephone, $event)" translate="STAFF.EDIT_TELEPHONE">\n                                                    Edit Telephone\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(telephone, $event)" translate="STAFF.DELETE_TELEPHONE">\n                                                    Delete Telephone\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: \'{{\'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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(userProfile, $event)" translate="STAFF.EDIT_USERPROFILE">\n                                                    Edit UserProfile\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(userProfile, $event)" translate="STAFF.CLONE_USERPROFILE">\n                                                    clone UserProfile\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(userProfile, $event)" translate="STAFF.DELETE_USERPROFILE">\n                                                    Delete UserProfile\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: \'{{\'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            </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.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>\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                    <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\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\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 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="9">\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})[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 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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(user, $event)" translate="STAFF.EDIT_USER">\n                                                    Edit User\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(user, $event)" translate="STAFF.DELETE_USER">\n                                                    Delete User\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: \'{{\'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                                <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="TOOLS.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.editdialog(cannedAnswer, $event)" translate="TOOLS.EDIT_CANNEDANSWER">\n                                                    Edit CannedAnswer\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(cannedAnswer, $event)" translate="TOOLS.DELETE_CANNEDANSWER">\n                                                    Delete CannedAnswer\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(customDashboard, $event)" translate="TOOLS.EDIT_CUSTOMDASHBOARD">\n                                                    Edit CustomDashboard\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(customDashboard, $event)" translate="TOOLS.CLONE_CUSTOMDASHBOARD">\n                                                    clone CustomDashboard\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotodashboardgoto(customDashboard, $event)" translate="TOOLS.GOTODASHBOARD_CUSTOMDASHBOARD">\n                                                    goToDashboard CustomDashboard\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(customDashboard, $event)" translate="TOOLS.DELETE_CUSTOMDASHBOARD">\n                                                    Delete CustomDashboard\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: \'{{\'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                                <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="TOOLS.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.editdialog(disposition, $event)" translate="TOOLS.EDIT_DISPOSITION">\n                                                    Edit Disposition\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(disposition, $event)" translate="TOOLS.DELETE_DISPOSITION">\n                                                    Delete Disposition\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: \'{{\'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                                <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="TOOLS.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(interval, $event)" translate="TOOLS.EDIT_INTERVAL">\n                                                    Edit Interval\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.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                        </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                                <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="TOOLS.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.editdialog(pause, $event)" translate="TOOLS.EDIT_PAUSE">\n                                                    Edit Pause\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(pause, $event)" translate="TOOLS.DELETE_PAUSE">\n                                                    Delete Pause\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: \'{{\'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            </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            </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            </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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(schedule, $event)" translate="TOOLS.EDIT_SCHEDULE">\n                                                    Edit Schedule\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.runconfirm(schedule, $event)" translate="TOOLS.RUN_SCHEDULE">\n                                                    Run Schedule\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(schedule, $event)" translate="TOOLS.DELETE_SCHEDULE">\n                                                    Delete Schedule\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: \'{{\'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                                <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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(sound, $event)" translate="TOOLS.EDIT_SOUND">\n                                                    Edit Sound\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.downloadfile2(sound, $event)" translate="TOOLS.DOWNLOAD_SOUND">\n                                                    Download Sound\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(sound, $event)" translate="TOOLS.DELETE_SOUND">\n                                                    Delete Sound\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: \'{{\'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                                <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="TOOLS.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.editdialog(tag, $event)" translate="TOOLS.EDIT_TAG">\n                                                    Edit Tag\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(tag, $event)" translate="TOOLS.DELETE_TAG">\n                                                    Delete Tag\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: \'{{\'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                                <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="TOOLS.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.editdialog(template, $event)" translate="TOOLS.EDIT_TEMPLATE">\n                                                    Edit Template\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(template, $event)" translate="TOOLS.DELETE_TEMPLATE">\n                                                    Delete Template\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: \'{{\'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            </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                </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-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\' && vm.action.data1 == \'POST\'" 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 == \'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="\'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 == \'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="\'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 == \'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                            </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 == \'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="17">\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 == \'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="17">\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 == \'urlForward\' && action.data1 == \'POST\'" md-cell>{{action.data7}}</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="44">\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                                <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="TOOLS.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(trigger, $event)" translate="TOOLS.EDIT_TRIGGER">\n                                                    Edit Trigger\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(trigger, $event)" translate="TOOLS.DELETE_TRIGGER">\n                                                    Delete Trigger\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: \'{{\'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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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                            </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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(trunk, $event)" translate="TOOLS.EDIT_TRUNK">\n                                                    Edit Trunk\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(trunk, $event)" translate="TOOLS.CLONE_TRUNK">\n                                                    clone Trunk\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(trunk, $event)" translate="TOOLS.GOTOREALTIME_TRUNK">\n                                                    goToRealtime Trunk\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(trunk, $event)" translate="TOOLS.DELETE_TRUNK">\n                                                    Delete 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: \'{{\'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                                <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="TOOLS.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.editdialog(variable, $event)" translate="TOOLS.EDIT_VARIABLE">\n                                                    Edit Variable\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(variable, $event)" translate="TOOLS.DELETE_VARIABLE">\n                                                    Delete Variable\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: \'{{\'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/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                                <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="VOICE.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.editdialog(chanSpy, $event)" translate="VOICE.EDIT_CHANSPY">\n                                                    Edit chanSpy\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(chanSpy, $event)" translate="VOICE.DELETE_CHANSPY">\n                                                    Delete chanSpy\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.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            </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            </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                                <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="VOICE.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.editdialog(context, $event)" translate="VOICE.EDIT_CONTEXT">\n                                                    Edit Context\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(context, $event)" translate="VOICE.DELETE_CONTEXT">\n                                                    Delete Context\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.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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="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                                <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="VOICE.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(inboundroute, $event)" translate="VOICE.EDIT_INBOUNDROUTE">\n                                                    Edit InboundRoute\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(inboundroute, $event)" translate="VOICE.DELETE_INBOUNDROUTE">\n                                                    Delete InboundRoute\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.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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="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                                <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="VOICE.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(internalroute, $event)" translate="VOICE.EDIT_INTERNALROUTE">\n                                                    Edit InternalRoute\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(internalroute, $event)" translate="VOICE.DELETE_INTERNALROUTE">\n                                                    Delete InternalRoute\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.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                                <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="VOICE.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(musiconhold, $event)" translate="VOICE.EDIT_MUSICONHOLD">\n                                                    Edit MusicOnHold\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(musiconhold, $event)" translate="VOICE.DELETE_MUSICONHOLD">\n                                                    Delete MusicOnHold\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.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                                <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="VOICE.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(outboundroute, $event)" translate="VOICE.EDIT_OUTBOUNDROUTE">\n                                                    Edit OutboundRoute\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(outboundroute, $event)" translate="VOICE.DELETE_OUTBOUNDROUTE">\n                                                    Delete OutboundRoute\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.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="4">{{ \'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" 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">\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                            <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                                <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="VOICE.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(voicemail, $event)" translate="VOICE.EDIT_VOICEMAIL">\n                                                    Edit Voicemail\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(voicemail, $event)" translate="VOICE.DELETE_VOICEMAIL">\n                                                    Delete Voicemail\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.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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(voicePrefix, $event)" translate="VOICE.EDIT_VOICEPREFIX">\n                                                    Edit voicePrefix\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(voicePrefix, $event)" translate="VOICE.AGENTADD_VOICEPREFIX">\n                                                    AgentAdd voicePrefix\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(voicePrefix, $event)" translate="VOICE.DELETE_VOICEPREFIX">\n                                                    Delete voicePrefix\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.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                                <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                            </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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(voiceQueue, $event)" translate="VOICE.EDIT_VOICEQUEUE">\n                                                    Edit VoiceQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(voiceQueue, $event)" translate="VOICE.TEAMADD_VOICEQUEUE">\n                                                    teamadd VoiceQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(voiceQueue, $event)" translate="VOICE.AGENTADD_VOICEQUEUE">\n                                                    agentadd VoiceQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(voiceQueue, $event)" translate="VOICE.DELETE_VOICEQUEUE">\n                                                    Delete VoiceQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(voiceQueue, $event)" translate="VOICE.GOTOREALTIME_VOICEQUEUE">\n                                                    goToRealtime VoiceQueue\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.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                                <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                                <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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.downloadfile2(voiceRecording, $event)" translate="VOICE.DOWNLOAD_VOICERECORDING">\n                                                    Download VoiceRecording\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(voiceRecording, $event)" translate="VOICE.DELETE_VOICERECORDING">\n                                                    Delete 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-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.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>\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>\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.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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",limit:10,offset: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",limit:10,offset:0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Tags",fields:"id,name",sort:"name",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: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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",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",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",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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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,phoneBarAutoUpdaterUrl,enableEmailPreview,split,splitSizeCsv,splitSizePdf,splitSizeXlsx,messagesAlignment,phoneBarRememberMeEnabled,rtlSupport",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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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",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",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,phoneBarEnableVideoRecording",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,phoneBarEnableVideoRecording",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,phoneBarEnableVideoRecording",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){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",role:"agent",sort:"fullname",nolimit:!0}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Agents",fields:"id,fullname,role,userpic,internal,online,voicePause,openchannelPause,faxPause,chatPause,smsPause,mailPause,pauseType,lastLoginAt,lastPauseAt,chatCapacity,mailCapacity,openchannelCapacity,faxCapacity,smsCapacity",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("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";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(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(f).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(f).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.sessions[t].unmute();f();break;default:console.log("unknown device")}}function v(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 h(){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 f(){p.webrtc=_.pick(m.conf,u),t.localStorage.setItem("motion2.user:"+m.conf.id,JSON.stringify(p))}function b(e){this.remotePlayer.srcObject=e.stream,this.remotePlayer.play()}function E(e){var t,n,a=e.session;switch(e.originator){case"local":a.outgoing=!0,a.name=e.request.ruri.user,a.user=e.request.ruri.user,v(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)}),v(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=b.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=b.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),g("speaker"),g("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,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)&&I(),_.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)&&I(),_.remove(this.sessions,{id:e.id}),2!==m.sessions.length&&(m.canGoInConference=!1)}.bind(this,a)),this.sessions.push(a),i.$$phase||i.$root.$$phase||i.$apply()}function A(){m.target="",document.getElementById("ms-target").blur(),document.getElementById("ms-target").value="",i.$broadcast("angucomplete-alt:clearInput","ms-target-wrap")}function y(e,t,n,a){return function(){o.show(o.simple().textContent(t).position(n).hideDelay(a)),e.terminate()}}function S(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 T(){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 I(){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),n.bind("keyup",function(e){switch(e.keyCode){case 27:s(function(){m.showDialpad=!1})}}),m.$onInit=function(){g("ringing"),g("speaker"),this.ua.on("registered",function(){console.log("registered"),this.registered=!0}.bind(this)),this.ua.on("unregistered",function(){console.log("unregistered"),this.registered=!1}.bind(this)),this.ua.on("newRTCSession",E.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,h()?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 S(e=(e=e.replace(/\(/g,"")).replace(/\)/g,"")).then(function(e){e&&m.ua.call(e,m.sessionConf)}).then(function(){A()})}},m.hold=function(e){e.hold({useUpdate:!1})},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 S(e)}).then(function(e){t.refer(e,{eventHandlers:{requestSucceeded:y(t,"requestSucceeded","top right",3e3),requestFailed:y(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.answer=function(e){m.conf.microphoneId?m.sessionConf.mediaConstraints.audio={deviceId:m.conf.microphoneId}:m.sessionConf.mediaConstraints.audio=!0,e.answer(m.sessionConf)},m.terminate=function(e){e.terminate()},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=g,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):A():A()},m.targetSelected=function(e){e&&(m.target=e.originalObject.target,m.call(),A())},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(){T()},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(){T()},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=T,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,g("ringing"),g("speaker"))})}),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 S(t.target).then(function(e){e&&m.sessions[n].refer(e,{eventHandlers:{requestSucceeded:y(m.sessions[n],"requestSucceeded","top right",3e3),requestFailed:y(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="",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.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())}},s.$watch("MsSearchBar.query",function(e,t){if(!angular.isUndefined(e)&&!angular.equals(e,t)&&!o.collapsed){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}))}})}function t(i){return{restrict:"E",scope:{},require:"msSearchBar",controller:"MsSearchBarController as MsSearchBar",bindToController:{debounce:"=?",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"),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"},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.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E(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 A(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:E}:{select_node:A}}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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,a,i,e,n,s,o,r,l,d,c,m,u,p,g,v,h,f,b,E,A,y,S,T,I,C,w,O,x,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=_.find(N.attributes,{name:"sip_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(l,{id:Number(e.value)}))return a.user.get({id:_.find(N.attributes,{name:"sip_id"}).value,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){i.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=_.find(N.attributes,{name:"list_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(E,{id:Number(e.value)}))return a.cmList.get({id:_.find(N.attributes,{name:"list_id"}).value,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,E.push(t),N.values.list_id=k(E,"id","name")}).catch(function(e){i.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(E,"id","name")}}function F(n){var e=_.find(N.attributes,{name:n});if(!_.some(N.attributes,{id:e.value})){if(!_.some(d,{id:Number(e.value)}))return a.trunk.get({id:_.find(N.attributes,{name:n}).value,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,d.push(t),N.values[n]=k(d,"id","name")}).catch(function(e){i.error({title:e.status?"API:"+e.status+" - "+e.statusText:"GET_TRUNK",msg:e.data?JSON.stringify(e.data.message):e.toString()})});N.values[n]=k(d,"id","name")}}function $(){var e=_.find(N.attributes,{name:"queue_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(c,{id:Number(e.value)}))return a.voiceQueue.get({id:_.find(N.attributes,{name:"queue_id"}).value,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){i.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 q(){var e=_.find(N.attributes,{name:"file_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(m,{id:Number(e.value)}))return a.sound.get({id:_.find(N.attributes,{name:"file_id"}).value,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){i.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 G(){var e=_.find(N.attributes,{name:"variable_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(u,{id:Number(e.value)}))return a.variable.get({id:_.find(N.attributes,{name:"variable_id"}).value,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){i.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 H(){var e=_.find(N.attributes,{name:"odbc_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(p,{id:Number(e.value)}))return a.squareOdbc.get({id:_.find(N.attributes,{name:"odbc_id"}).value,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){i.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 V(){var e=_.find(N.attributes,{name:"project_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(g,{id:Number(e.value)}))return a.squareProject.get({id:_.find(N.attributes,{name:"project_id"}).value,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){i.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=_.find(N.attributes,{name:"context"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(v,{id:Number(e.value)}))return a.voiceContext.get({id:_.find(N.attributes,{name:"context"}).value,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){i.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 B(){var e=_.find(N.attributes,{name:"interval_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(h,{id:Number(e.value)}))return a.interval.get({id:_.find(N.attributes,{name:"interval_id"}).value,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){i.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 W(){var e=_.find(N.attributes,{name:"account_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(f,{id:Number(e.value)}))return a.mailAccount.get({id:_.find(N.attributes,{name:"account_id"}).value,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){i.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 Y(){var e=_.find(N.attributes,{name:"sms_account_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(I,{id:Number(e.value)}))return a.smsAccount.get({id:_.find(N.attributes,{name:"sms_account_id"}).value,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){i.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 j(){var e=_.find(N.attributes,{name:"template_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(b,{id:Number(e.value)}))return a.template.get({id:_.find(N.attributes,{name:"template_id"}).value,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){i.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 z(){var e=_.find(N.attributes,{name:"pause_id"});if(!_.some(N.attributes,{id:e.value})){if(!_.some(C,{id:Number(e.value)}))return a.pause.get({id:_.find(N.attributes,{name:"pause_id"}).value,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){i.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=A.tagName,N.attributes=_.map(A.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:n,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:w,aws_lex_region:O},N.crudPermissions=R,N.onInit=function(){x.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(E,"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":case"trunk_id":F(N.attributes[t].name);break;case"queue_id":$();break;case"file_id":q();break;case"variable_id":G();break;case"odbc_id":H();break;case"project_id":V();break;case"context":Q();break;case"interval_id":B();break;case"account_id":W();break;case"template_id":j();break;case"list_id":U();break;case"sms_account_id":Y();break;case"pause_id":z()}}();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,E,A,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:A.rows||[],pauses:y.rows||[],templates:b.rows||[],lists:E.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(s,e){return m.squareRecording.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.uniqueid+".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++)p.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.chatQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="ChatQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=this;E.currentUser=f.getCurrentUser(),E.license=b,E.userProfile=r,E.userProfileSection=l&&1==l.count?l.rows[0]:null,E.crudPermissions=f.parseCrudPermissions(E.userProfileSection?E.userProfileSection.crudPermissions:null);var A=60,y=1024*A*1024;E.ngFlowOptions={target:"api/cm/contacts/upload",singleFile:!0,maxChunkRetries:1,chunkSize:y,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},E.contacts=c||{count:0,rows:[]},E.options={hidden:!1,hover:!1,isOpen:!1},E.table="cm_contacts",E.selectedContacts=[],E.lists=m||{rows:[],count:0},E.companies=p||{rows:[],count:0},E.tags=v||{rows:[],count:0},E.listsMap=u,E.companiesMap=g,E.selectedTags=[],E.selectedList=null,E.selectedCompany=null,E.query=_.merge({includeAll:!0,sort:"-updatedAt",limit:10,offset:0,page:1},e),E.editdialog=function(e,t){a.go("app.contactmanager.contacts.edit",{id:e.id,crudPermissions:E.crudPermissions})},E.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)})},E.success=I,E.getContacts=function(){E.query.offset=(E.query.page-1)*E.query.limit,f.hasRole("admin")?E.promise=d.cmContact.get(E.query,I).$promise:(E.query.id=E.userProfile.id,E.query.section="Contacts",E.promise=d.userProfile.getResources(E.query,I).$promise)},E.getAssignedCompanies=function(){if(!f.hasRole("admin")){var e=_(E.contacts.rows).map(function(e){return{id:e.CompanyId}}).uniqBy("id").pullAllBy(E.companies.rows,"id").value();if(!_.isEmpty(e)){for(var t=[],n=0;n<e.length;n++)t.push(d.cmCompany.get({id:e[n].id,fields:"id,name"}).$promise);o.all(t).then(function(e){e.forEach(function(e){var t=e.toJSON();t.canSelect=!1,E.companies.rows.push(t);var n={};n[t.id]=t.name,E.companiesMap=_.assignIn(E.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()})})}}},E.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:E.contacts.rows}})},E.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:E.contacts.rows}})},E.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:E.query.ListId||a.params.ListId,CompanyId:E.query.CompanyId||a.params.CompanyId,contact:t,contacts:E.contacts.rows,setting:null,crudPermissions:E.crudPermissions},resolve:{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})}],companies:["apiResolver","Auth",function(e,t){return t.hasRole("admin")?e.resolve("cmCompany@get",{fields:"id,name"}):e.resolve("userProfile@getResources",{id:t.getCurrentUser().userProfileId,section:"Companies",fields:"id,name"})}]}})},E.deleteContact=C,E.exportSelectedContacts=function(){var e=angular.copy(E.selectedContacts);return E.selectedContacts=[],e},E.deleteSelectedContacts=function(e){var t=s.confirm().title("Are you sure want to delete the selected contacts?").htmlContent("<b>"+E.selectedContacts.length+" selected</b> will be deleted.").ariaLabel("delete Contacts").targetEvent(e).ok("OK").cancel("CANCEL");s.show(t).then(function(){E.selectedContacts.forEach(function(e){C(e)}),E.selectedContacts=[]})},E.deselectContacts=function(){E.selectedContacts=[]},E.selectAllContacts=function(){E.selectedContacts=E.contacts.rows},E.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&&(E.tags.rows.push(e),h.success({title:"Tag properly created!",msg:e.tag?e.name+" has been created!":""}))})},E.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&&(E.lists.rows.push(e),h.success({title:"List properly created!",msg:e.name?e.name+" has been created!":""}))})},E.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&&(E.companies.rows.push(e),h.success({title:"Company properly created!",msg:e.name?e.name+" has been created!":""}))})},E.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:E.license}}).then(function(){E.getContacts()}).catch(function(e){console.error()})},E.hasPermission=function(){return f.hasPermission(303)||f.hasRole("admin")},E.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 "+A+"MB"}),!1;return!0},a.params.ListId&&(E.selectedList=a.params.ListId),a.params.CompanyId&&(E.selectedCompany=a.params.CompanyId),t.$watch("vm.options.isOpen",function(e){e?n(function(){t.tooltipVisible=E.options.isOpen},600):t.tooltipVisible=E.options.isOpen});var S=!0,T=1;function I(e){E.contacts=e||{count:0,rows:[]}}function C(e){d.cmContact.delete({id:e.id}).$promise.then(function(){_.remove(E.contacts.rows,{id:e.id}),E.contacts.count-=1,E.contacts.rows.length||E.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){E.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=E.query.page),e!==t&&(E.query.page=1),e||(E.query.page=T),E.getContacts())},!0),t.$watch("vm.selectedList",function(e,t){e!==t&&(E.query.ListId=E.selectedList||void 0,E.getContacts())}),t.$watch("vm.selectedCompany",function(e,t){e!==t&&(E.query.CompanyId=E.selectedCompany||void 0,E.getContacts())}),t.$watch("vm.selectedTags",function(e,t){(e.length||t.length)&&E.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,E){var A=this;A.currentUser=b.getCurrentUser(),A.license=f,A.journey=[],A.contact=r||{},A.hoppers=l||{rows:[],count:0},A.finals=d||{rows:[],count:0},A.histories=c||{rows:[],count:0},A.companies=u||{rows:[],count:0},A.lists=p||{rows:[],count:0},A.customFields=g||{rows:[],count:0},A.tags=v||{rows:[],count:0},A.jscriptySessions=h||{rows:[],count:0},A.timelineOptions={scrollEl:"#interaction-content"},A.userProfileSection=E&&1==E.count?E.rows[0]:null,A.crudPermissions=b.parseCrudPermissions(A.userProfileSection?A.userProfileSection.crudPermissions:null),A.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"),"")}),A.queryHopper={fields:"id,phone,scheduledat,priority,recallme,VoiceQueueId,CampaignId,UserId",sort:"-updatedAt",limit:10,page:1},A.queryFinal={fields:"id,uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-id",limit:10,page:1},A.queryHistory={fields:"id,uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-id",limit:10,page:1},A.queryJscriptySession={fields:"id,starttime,endtime,membername,projectname",sort:"-starttime",limit:10,page:1},A.selectedTab=t.params.tab||0,A.onInit=function(){b.hasRole("admin")||(function(){if(!_.some(A.companies.rows,{id:A.contact.CompanyId}))o.cmCompany.get({id:A.contact.CompanyId,fields:"id,name"}).$promise.then(function(e){var t=e.toJSON();t.canSelect=!1,A.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(A.contact.Tags,function(e){return{id:e.id,name:e.name}});if(!_.isEmpty(e))for(var t=0;t<e.length;t++)_.some(A.tags.rows,{id:e.id})||(e[t].canSelect=!1,A.tags.rows.push(e[t]))}());return o.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){A.users=e||{count:0,rows:[]},A.usersMap=_.mapValues(_.keyBy(A.users.rows,"id"),"fullname"),A.Tags=_.map(A.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({fields:"id,uniqueid,type,source,destination,callerid,starttime,endtime,duration,disposition,amaflags,note,UserId,ContactId",ContactId:e.id,includeAll:!0}).$promise.then(I).catch(function(e){console.error(e)})}}(r))},A.gotoContacts=function(){t.go("app.contactmanager.contacts",{},{reload:!0,notify:!0})},A.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:A.currentUser.userProfileId,section:"Lists",fields:"id,name"})}]},locals:{contacts:m.rows,contact:r}})},A.saveContact=function(){o.cmContact.update({id:A.contact.id},A.contact).$promise.then(function(){s.success({title:"Contact updated!",msg:A.contact.name?A.contact.name+" has been updated!":""})}).then(function(){return o.cmContact.setTags({id:A.contact.id,ids:A.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()})})},A.editCompany=function(e,t){var n=_.find(A.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:A.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})}]}})},A.onSelectList=function(e){if(A.contact.ListId){var t=i.confirm().title("You are selecting the list number: "+A.contact.ListId).textContent("Warning! You won't select a different list for the contact "+A.contact.firstName||A.contact.lastName||A.contact.id).targetEvent(e).ok("Ok").cancel("Cancel");return i.show(t).then(A.onSelectListSuccess).catch(function(){A.contact.ListId=null})}},A.onSelectListSuccess=function(){return o.cmList.getCustomFields({id:A.contact.ListId}).$promise.then(function(e){A.customFields=e||{rows:[],count:0}}).catch(function(e){console.error(e)})},A.getDateFromString=function(e){return null===e?void 0:new Date(e)},A.getHoppers=function(){A.queryHopper.offset=(A.queryHopper.page-1)*A.queryHopper.limit,A.queryHopper.id=A.contact.id,A.promise=o.cmContact.getHoppers(A.queryHopper,T("hoppers")).$promise},A.getFinals=function(){A.queryFinal.offset=(A.queryFinal.page-1)*A.queryFinal.limit,A.queryFinal.id=A.contact.id,A.promise=o.cmContact.getHopperFinals(A.queryFinal,T("finals")).$promise},A.getHistories=function(){A.queryHistory.offset=(A.queryHistory.page-1)*A.queryHistory.limit,A.queryHistory.id=A.contact.id,A.promise=o.cmContact.getHopperHistories(A.queryHistory,T("histories")).$promise},A.getJscriptySessions=function(){A.queryJscriptySession.offset=(A.queryJscriptySession.page-1)*A.queryJscriptySession.limit,A.queryJscriptySession.id=A.contact.id,A.promise=o.cmContact.getJscriptySessions(A.queryJscriptySession,T("jscriptySessions")).$promise},A.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(A.hoppers.rows,{id:e.id}),A.hoppers.count--,A.hoppers.rows.length||A.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")})},A.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:A.hoppers.rows,license:null,setting:null,crudPermissions:A.crudPermissions}})},A.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:A.hoppers.rows,license:null,setting:null,crudPermissions:A.crudPermissions}})},A.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){A[t]=e||{count:0,rows:[]}}}function I(e){e&&e.count&&e.rows.length&&(A.journey=_.concat(A.journey,e.rows))}e.$watch("vm.queryHopper.filter",function(e,t){y?n(function(){y=!1}):(t||(S=A.queryHopper.page),e!==t&&(A.queryHopper.page=1),e||(A.queryHopper.page=S),A.getHoppers())}),e.$watch("vm.queryFinal.filter",function(e,t){y?n(function(){y=!1}):(t||(S=A.queryFinal.page),e!==t&&(A.queryFinal.page=1),e||(A.queryFinal.page=S),A.getFinals())}),e.$watch("vm.queryHistory.filter",function(e,t){y?n(function(){y=!1}):(t||(S=A.queryHistory.page),e!==t&&(A.queryHistory.page=1),e||(A.queryHistory.page=S),A.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,a,i,o,s,t,r,n,l,d,c,m,u,p,g,v,h){var f=this;f.license=p,f.setting=g;function b(e){var t={};for(var n in f.tabs)f.tabs.hasOwnProperty(n)&&(t[n]=f.tabs[n],f.tabs[n].interaction&&(t[n].interaction=_.pick(f.tabs[n].interaction,["id","OpenchannelAccountId","MailAccountId","ChatWebsiteId","FaxAccountId","SmsAccountId","closed","draft"])));i.localStorage.setItem("motion2.user:"+f.user.id,JSON.stringify({tabs:t,currentTab:f.currentTab})),E(e)}function E(e){if(_.isNil(e)||e&&"interaction"===e.type){var t={id:f.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 f.tabs)f.tabs.hasOwnProperty(n)&&t.capacity.hasOwnProperty(f.tabs[n].channel)&&f.tabs[n].interaction&&!f.tabs[n].interaction.closed&&(t.capacity[f.tabs[n].channel]+=1,t.interaction[f.tabs[n].channel].push(f.tabs[n].interaction.id));if(!_.isEqual(f.agentCapacity,t.capacity))return f.agentCapacity=t.capacity,r.rpc.setAgentCapacity(t)}}function A(t){if(f.tabs[t.id]&&(function(e){if(e.channel&&e.interaction)r.user["remove"+_.upperFirst(e.channel)+"Interactions"]({id:f.user.id,ids:[e.interaction.id]}).$promise.catch(function(e){console.error(e)})}(f.tabs[t.id]),delete f.tabs[t.id],f.currentTab=0,b(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:f.user.id,ids:[e.id]}).$promise}).catch(function(e){console.error(e)})}function y(e){e.id=_.random(1e10),e.openedAt=new Date,e.saved=!1,e.badges=0,f.tabs[e.id]=e,f.currentTab=e.id,b(e)}function S(t,n){var 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},a=_.find(f.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id===n.id&&e.channel===t});a?f.currentTab=a.id:y(e)}function T(e){e&&e.uniqueid&&f.notifications[e.uniqueid]&&(l.clear(f.notifications[e.uniqueid]),delete f.notifications[e.uniqueid])}function I(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 C(e,t){return 0<=t&&(e.calls[t].disposedAt=new Date,!0)}function w(){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){f.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()})}}f.detectBrowser=h.detectBrowser(),f.user=t.getCurrentUser(),f.currentTab=0,f.notifications={},f.tabs={},f.agentCapacity={},f.globalUserLists=d||{count:0,rows:[]},f.globalLists=c||{count:0,rows:[]},f.globalCompanies=m||{count:0,rows:[]},f.globalTags=u||{count:0,rows:[]},f.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&&f.addContactTab(e,t):e.count&&e.rows[0]?f.addContactTab(e.rows[0],t):f.addContactTab({firstName:a,ListId:t.ListId,phone:i},t)}).catch(w())},f.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:f.user,contact:e}))}catch(e){console.error(e)}y({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n,contact:e})}).catch(w());try{t.formData=Mustache.render(t.formData,_.merge(n,{user:f.user}))}catch(e){console.error(e)}y({type:"jscripty",title:t.name,icon:"icon-script",color:"grey",project:t,call:n})}}).catch(w())},f.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&&y({type:"bot",title:n+" <"+a+">",icon:"fas fa-robot",color:"pink",data:{uniqueid:t.uniqueid}})})},f.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":i.open(e.uri);break;case"1":i.open(e.uri,"_blank","width="+(e.windowWidth||"800")+",height="+e.windowHeight||"600");break;default:i.open(e.uri)}else i.open(e.uri)},f.onBrowserPopup=function(e){e&&e.html&&y({type:"popup",title:e.calleridnum||"popup",icon:"icon-tablet",color:"grey",html:e.html})},f.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=f.alreadyExistsTab(e);if(t){if(r[e.channel+"Message"])return f.currentTab!==t.id&&(t.badges+=1),r[e.channel+"Message"].accept({id:e.id,UserId:f.user.id}).$promise.catch(w())}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(){f.notifications[e.uniqueid]=this.id},onAccept:function(){if(T(e),r[e.channel+"Message"])return r[e.channel+"Message"].accept({id:e.id,UserId:f.user.id,manual:!0}).$promise.then(function(e){S(e.channel,e.interaction),l.success({title:"Message properly accepted!",msg:"Message has been accepted!"})}).catch(w())},onReject:function(){if(T(e),r[e.channel+"Message"])return r[e.channel+"Message"].reject({id:e.id,UserId:f.user.id}).$promise.then(function(e){l.success({title:"Message properly rejected!",msg:"Message has been rejected!"})}).catch(w())}})}var n},f.onNotificationRemove=T,f.onVoiceChannelRemove=function(t){for(var e in f.tabs)if(f.tabs.hasOwnProperty(e)){var n=f.tabs[e],a=_.findLastIndex(n.calls,function(e){return e.uniqueid===t.uniqueid});if(!C(n,a)){var i=_.find(f.tabs,{calls:[{uniqueid:t.uniqueid}]});if(i){var s=_.findLastIndex(i.calls,function(e){return e.uniqueid===t.uniqueid});C(i,s)}}f.contact&&f.contact.id&&$timeout(I(t.uniqueid,f.contact.id,n),1e3)}},f.onClickTab=function(e){f.currentTab=e,b(f.tabs[e])},f.isActiveTab=function(e){return e===f.currentTab},f.alreadyExistsTab=function(t){return _.find(f.tabs,function(e){return"interaction"===e.type&&e.interaction&&e.interaction.id==t.interactionId&&e.channel==t.channel})},f.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(f.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];f.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(w()).finally(function(){y(a)});y(a)}}else y(a)},f.addInteractionTab=S,f.addTab=y,f.removeTab=A,f.updateLocalStorage=b,f.closeTab=function(e){var t=a.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)return a.show(t).then(function(){"interaction"===e.type&&a.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!0,locals:{user:f.user,channel:e.channel,interaction:e.interaction}}),A(e)}).catch(function(){"interaction"===e.type&&A(e)});var n=!1;if(_.forEach(e.calls,function(e){e.mandatoryDisposition&&(n=!0)}),"contact"===e.type&&0<e.calls.length){if(!n)return t._options.textContent="There is a call that hasn't been disposed yet.",a.show(t).then(function(){A(e)});alert=a.alert().title("Warning").textContent("There is a call that hasn't been disposed yet.").ok("OK"),a.show(alert).finally(function(){alert=void 0})}else A(e)}},n.on("trigger:contactmanager",f.onContactManager),n.on("trigger:jscripty",f.onJscripty),n.on("trigger:bot",f.onBot),n.on("trigger:browser:url",f.onBrowserUrl),n.on("trigger:browser:popup",f.onBrowserPopup),n.on("notification:save",f.onNotificationSave),n.on("notification:remove",f.onNotificationRemove),n.on("voice_queue_channel:remove",f.onVoiceChannelRemove),n.on("voice_outbound_channel:remove",f.onVoiceChannelRemove),function(){var e=i.localStorage.getItem("motion2.user:"+f.user.id);if(e)try{e=JSON.parse(e),f.tabs=e.tabs?e.tabs:{},f.currentTab=e.currentTab?e.currentTab:0,E(f.tabs[f.currentTab])}catch(e){console.error(e)}}(),e.$on("$destroy",function(){for(var e in f.notifications)f.notifications.hasOwnProperty(e)&&T({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")})}e.$inject=["$scope","$mdDialog","$window","$translate","$document","Auth","api","socket","toasty","globalUserLists","globalLists","globalCompanies","globalTags","license","setting","desktopNotification","msUtils"],angular.module("app.dashboards").controller("AgentDashboardGeneralController",e)}(),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(o,r,n,l,d,c,t,e,i,a){var m=this;function s(e){e&&e.count&&e.rows.length&&(m.journey=_.concat(m.journey,e.rows))}m.user=t.getCurrentUser(),m.detectBrowser=a.detectBrowser(),m.journey=[],m.queryHopper={fields:"id,phone,scheduledat",sort:"-updatedAt",limit:10,page:1},m.queryFinal={fields:"uniqueid,calleridnum,statedesc,starttime,disposition",sort:"-updatedAt",limit:10,page:1},m.queryHistory={fields:"uniqueid,calleridnum,statedesc,scheduledat,starttime,endtime",sort:"-updatedAt",limit:10,page:1},m.hoppers={rows:[],count:0},m.finals={rows:[],count:0},m.histories={rows:[],count:0},m.addNewContact=function(){m.errors=[],d.cmContact.save(m.contact).$promise.then(function(e){return m.contact.id=e.id,m.newContact=!1,m.tab.title=e.firstName||e.phone,m.tab.contact=m.contact,d.user.addContacts({id:t.getCurrentUser().id,ids:[e.id]})}).then(function(){m.detailForm.$pristine=!0,m.customFieldsForm.$pristine=!0,c.success({title:"Contact properly created",msg:m.contact.firstName?m.contact.firstName+" has been created!":""})}).then(function(){return d.cmContact.setTags({id:m.contact.id,ids:m.tab.Tags}).$promise}).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)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:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.saveContact=function(){m.errors=[],d.cmContact.update({id:m.contact.id},m.contact).$promise.then(function(e){return m.tab.title=e.firstName||e.phone,m.tab.contact=m.contact,l.$parent.vm.updateLocalStorage(),d.user.addContacts({id:t.getCurrentUser().id,ids:[e.id]})}).then(function(){return d.cmContact.setTags({id:m.contact.id,ids:m.tab.Tags}).$promise}).then(function(){m.detailForm.$pristine=!0,m.customFieldsForm.$pristine=!0,c.success({title:"Contact properly updated!",msg:m.contact.name?m.contact.name+" has been updated!":""})}).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)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:"api.contact.save",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getCustomFields=function(e){return d.cmList.getCustomFields({id:e}).$promise.then(function(e){m.tab.customFields=e}).catch(function(e){c.error({title:e.status?"API:"+e.status+" - "+e.statusText:"LIST:GETCustomFields",msg:e.data?JSON.stringify(e.data):e.toString()})})},m.call=l.$parent.vm.call,m.disposeCall=function(e,a){if(m.newContact)return void c.error({title:"ATTENTION",msg:"Please save the contact before disposing!"});o.show({controller:"DisposeCallDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/contact/dispose/dialog.html",parent:angular.element(r.body),targetEvent:a,clickOutsideToClose:!1,resolve:{globalDispositions:["apiResolver",function(e){return e.resolve("disposition@get",{MailAccountId:"null",FaxAccountId:"null",SmsAccountId:"null",OpenchannelAccountId:"null",ChatWebsiteId:"null",ListId:"null"})}]},locals:{dispositions:m.tab.dispositions,contact:m.contact,call:a}}).then(function(e){for(var t in e&&("BLACKLIST"===e?c.success({title:i.instant("DASHBOARDS.INFO"),msg:i.instant("DASHBOARDS.CALL_DISPOSED")+" "+e}):"RECALLME"===e||"RESCHEDULE"===e||c.success({title:i.instant("DASHBOARDS.INFO"),msg:i.instant("DASHBOARDS.CALL_SAVED")})),l.$parent.$parent.$parent.vm.tabs)if(l.$parent.$parent.$parent.vm.tabs.hasOwnProperty(t)){var n=l.$parent.$parent.$parent.vm.tabs[t];_.remove(n.calls,function(e){return e.uniqueid===a.uniqueid})}})},m.duplicateContact=function(e){o.show({controller:"DuplicateContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/duplicate/dialog.html",parent:angular.element(r.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:m.contact.id})}],lists:["apiResolver",function(e){return e.resolve("user@getLists",{id:t.getCurrentUser().id,fields:"id,name"})}]},locals:{contacts:[]}})},m.mergeContact=function(e){o.show({controller:"MergeContactDialogController",controllerAs:"vm",templateUrl:"app/main/apps/contactmanager/views/contacts/merge/dialog.html",parent:angular.element(r.body),targetEvent:e,clickOutsideToClose:!0,resolve:{contact:["apiResolver",function(e){return e.resolve("cmContact@get",{id:m.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 l.$parent.$parent.$parent.vm.tabs)if(l.$parent.$parent.$parent.vm.tabs.hasOwnProperty(t)){var n=l.$parent.$parent.$parent.vm.tabs[t];n&&n.contact&&(e.from&&e.from.id&&e.from.id===n.contact.id&&l.$parent.$parent.$parent.vm.removeTab(n),e.to&&e.to.id&&e.to.id===n.contact.id&&l.$parent.$parent.$parent.vm.removeTab(n))}e.new&&l.$parent.$parent.$parent.vm.addContactTab(e.new)}})},m.getDateFromString=function(e){return null===e?void 0:new Date(e)},m.addJscriptyTab=function(e){try{e.formData=Mustache.render(e.formData,{contact:m.contact,user:m.user})}catch(e){console.error(e)}try{l.$parent.$parent.$parent.vm.addTab({type:"jscripty",title:e.name,icon:"icon-script",color:"grey",project:e,contact:m.contact})}catch(e){c.error({title:"ERROR OPENING JSCRIPTY PROJECT",msg:"The project cannot be started"+JSON.stringify(e)})}},m.getHoppers=function(){m.contact&&m.contact.id&&(m.queryHopper.ContactId=m.contact.id,m.queryHopper.offset=(m.queryHopper.page-1)*m.queryHopper.limit,m.promise=d.cmHopper.get(m.queryHopper,g("hoppers")).$promise)},m.getFinals=function(){m.contact&&m.contact.id&&(m.queryFinal.ContactId=m.contact.id,m.queryFinal.offset=(m.queryFinal.page-1)*m.queryFinal.limit,m.promise=d.cmHopperFinal.get(m.queryFinal,g("finals")).$promise)},m.getHistories=function(){m.contact&&m.contact.id&&(m.queryHistory.ContactId=m.contact.id,m.queryHistory.offset=(m.queryHistory.page-1)*m.queryHistory.limit,m.promise=d.cmHopperHistory.get(m.queryHistory,g("histories")).$promise)},m.getJscriptyProjects=function(){d.jscriptyProject.get({fields:"createdAt,updatedAt,id,name,description,createdAt,formData,enableUncompleteSave",sort:"-updatedAt",nolimit:!0}).$promise.then(function(e){m.jscriptyProjects=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.jscripty.account"}];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:"api.jscripty.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getMailAccounts=function(){d.user.getMailAccounts({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.mailAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.mail.account"}];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:"api.mail.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getFaxAccounts=function(){d.user.getFaxAccounts({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.faxAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.fax.account"}];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:"api.fax.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getSmsAccounts=function(){d.user.getSmsAccounts({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.smsAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.sms.account"}];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:"api.sms.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getOpenchannelAccounts=function(){d.user.getOpenchannelAccounts({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.openchannelAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.sms.account"}];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:"api.openchannel.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getChatWebsites=function(){d.user.getChatWebsites({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.chatAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.chatAccounts.account"}];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:"api.chatAccounts.account",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.getLists=function(){d.user.getLists({id:m.user.id,nolimit:!0}).$promise.then(function(e){m.lists=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){m.errors=e.data.errors||[{message:e.toString(),type:"api.cm.lists"}];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:"api.cm.lists",msg:e.data?JSON.stringify(e.data.message):e.toString()})})},m.composeInteraction=function(e,i,t,n){var s=i.toLowerCase();o.show({controller:"Compose"+i+"InteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/compose"+i+"/dialog.html",parent:angular.element(r.body),clickOutsideToClose:!1,locals:{account:t,message:{to:"mail"==s?n:n.split(",")},type:"new",interaction:{Contact:m.contact}},fullscreen:!0}).then(function(a){return d[s+"Account"].send({id:t.id},a).$promise.then(function(e){if("Mail"===i){var t=e;if(t&&t.Messages&&t.Messages.length){if(a.attachments&&a.attachments.length)for(var n=0;n<a.attachments.length;n+=1)d.attachment.update({id:a.attachments[n].id},{MailMessageId:_.head(t.Messages).id});c.success({title:"Message properly sent!",msg:"Message has been sent!"}),t.closed?(t.disposition=null,o.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(r.body),clickOutsideToClose:!0,locals:{user:m.user,channel:"mail",interaction:t}})):l.$parent.vm.addInteractionTab("mail",t)}}else c.success({title:"Message properly sent!",msg:"Message has been sent!"}),l.$parent.vm.addInteractionTab(s,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)c.error({title:e.data.errors[t].type,msg:e.data.errors[t].message});else"fax"===s?c.error({title:"FAX:SEND",msg:e.data?JSON.stringify(e.data):e.message||e.toString()}):c.error({title:e.status?"API:"+e.status+" - "+e.statusText:i.toUpperCase()+"ACCOUNT:SEND",msg:e.data?JSON.stringify(e.data.message):e.message||e.toString()})})})},m.init=function(e,t){m.tab=e,l.$watchGroup(["vm.detailForm.$pristine","vm.customFieldsForm.$pristine"],function(e){m.tab.saved=e[0]&&e[1]}),m.license=t,m.contact=m.tab.contact,m.newContact=!1,m.currentTab=0,m.contact&&m.contact.id?(d.user.addContacts({id:m.user.id,ids:[m.contact.id]}),m.contact.ListId&&(m.tab.userLists.rows=_.unionBy(m.tab.userLists.rows,_.filter(m.tab.lists.rows,{id:m.contact.ListId}),"id"),m.list=_.find(m.tab.userLists.rows,{id:m.contact.ListId})),m.getHoppers(),m.getFinals(),m.getHistories(),m.getMailAccounts(),m.getFaxAccounts(),m.getSmsAccounts(),m.getOpenchannelAccounts(),m.getChatWebsites(),m.getLists()):(m.newContact=!0,e.autoCreate&&(console.log("autoCreate"),m.addNewContact()));d.user.get({fields:"id,fullname",nolimit:!0}).$promise.then(function(e){m.users=e||{count:0,rows:[]},m.usersMap=_.mapValues(_.keyBy(m.users.rows,"id"),"fullname")}).then(function(){if(m.contact&&m.contact.id)return d.cmContact.getTags({id:m.contact.id}).$promise}).then(function(e){e&&(m.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++)d[t[n]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(s);d.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(s).catch(function(e){console.error(e)})}}(m.contact))},m.hasPermission=function(e){return t.hasPermission(e)},m.openInteraction=function(e,t){try{if(t.MailAccountId)return l.$parent.$parent.$parent.vm.addInteractionTab("mail",t);if(t.ChatWebsiteId)return l.$parent.$parent.$parent.vm.addInteractionTab("chat",t);if(t.SmsAccountId)return l.$parent.$parent.$parent.vm.addInteractionTab("sms",t);if(t.OpenchannelAccountId)return l.$parent.$parent.$parent.vm.addInteractionTab("openchannel",t);if(t.FaxAccountId)return l.$parent.$parent.$parent.vm.addInteractionTab("fax",t)}catch(e){c.error({title:"ERROR OPEN INTERACTION",msg:"Customer Journey can't open the interaction"})}},m.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)},m.isMyAccount=function(e){{if(e.FaxAccountId)return _.includes(_.map(m.faxAccounts?m.faxAccounts.rows:[],"id"),e.FaxAccountId);if(e.OpenchannelAccountId)return _.includes(_.map(m.openchannelAccounts?m.openchannelAccounts.rows:[],"id"),e.OpenchannelAccountId);if(e.SmsAccountId)return _.includes(_.map(m.smsAccounts?m.smsAccounts.rows:[],"id"),e.SmsAccountId);if(e.MailAccountId)return _.includes(_.map(m.mailAccounts?m.mailAccounts.rows:[],"id"),e.MailAccountId);if(e.ChatWebsiteId)return _.includes(_.map(m.chatAccounts?m.chatAccounts.rows:[],"id"),e.ChatWebsiteId);if(e.amaflags)return!0}return!1},m.getJscriptyProjects(),l.$watch("currentTab",function(e,t){1===m.currentTab&&(m.getHoppers(),m.getFinals(),m.getHistories())});var u=!0,p=1;function g(t){return function(e){m[t]=e||{count:0,rows:[]}}}l.$watch("queryHopper.filter",function(e,t){u?n(function(){u=!1}):(t||(p=m.queryHopper.page),e!==t&&(m.queryHopper.page=1),e||(m.queryHopper.page=p),m.getHoppers())}),l.$watch("queryFinal.filter",function(e,t){u?n(function(){u=!1}):(t||(p=m.queryFinal.page),e!==t&&(m.queryFinal.page=1),e||(m.queryFinal.page=p),m.getFinals())}),l.$watch("queryHistory.filter",function(e,t){u?n(function(){u=!1}):(t||(p=m.queryHistory.page),e!==t&&(m.queryHistory.page=1),e||(m.queryHistory.page=p),m.getHistories())}),l.$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.user.unpause({id:l.getCurrentUser().id}).$promise.then(function(e){}).catch(function(e){console.error(e)}),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.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,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.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,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){var r=this;r.user=i.getCurrentUser(),r.license={},r.plugin={},r.setting={},r.sidebar="dashboard",r.navigation=o.getNavigation(),r.addContactTab=t.$parent.vm.addContactTab,r.addInteractionTab=t.$parent.vm.addInteractionTab,r.init=function(e,t){r.license=e,r.setting=t;var n=a.localStorage.getItem("motion2.home:"+r.user.id);if(n)try{n=JSON.parse(n),r.sidebar=n.currentSidebarTab?n.currentSidebarTab:"dashboard"}catch(e){console.error(e),r.sidebar="dashboard"}},r.changeSidebarTab=function(e){r.sidebar=e.view,"plugin"===r.sidebar&&(r.plugin=e.stateParams,r.pluginId=e.id,t.$broadcast("pluginUpdated",{plugin:r.plugin}));a.localStorage.setItem("motion2.home:"+r.user.id,JSON.stringify({currentSidebarTab:e.view}))},r.hasPermission=function(e){return i.hasPermission(e)}}e.$inject=["$scope","$timeout","$window","api","Auth","socket","msNavigationAgentService"],angular.module("app.dashboards").controller("AgentGeneralHomeController",e)}(),function(){"use strict";function e(n,a,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(){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.chatAccounts.rows.length?(_.includes(_.map(m.chatAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.ChatWebsiteId=m.query.account||_.map(m.chatAccounts.rows,"id").join()):m.query.ChatWebsiteId=-1,m.query.offset=(m.query.page-1)*m.query.limit,i.localStorage.setItem("motion2.home.chat:"+m.user.id,JSON.stringify({query:m.query})),m.promise=o.chatInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}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,account:null},m.success=u,m.getChatInteractions=p,m.showChatInteraction=function(e,t){n.$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=function(e){if(e.Contact){var t="";t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||"");var n=e.Account?e.Account.mapKey:void 0;return t+=n&&e.Contact[n]?" <"+e.Contact[n]+">":""}return s.instant("DASHBOARDS.UNKNOWN")},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.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},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)}catch(e){console.error(e)}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.onChatInteractionSave=function(e){if(e){var t=_.find(m.chatInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},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=[]),t.Messages.push(e)),g(t)}}},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.localizationMap=c,m.pickerModel={dateStart:null};var v=!0,h=1;n.$watch("vm.query.filter",function(e,t){v?a(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getChatInteractions())}),n.$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,a,i,e,s,o,r){var l=this;l.currentUser=s.getCurrentUser(),l.lists={},l.contacts={count:0,rows:[]},l.tags={count:0,rows:[]},l.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1},l.getContacts=function(){l.query.ListId=l.getListId(),l.query.offset=(l.query.page-1)*l.query.limit,r.localStorage.setItem("motion2.home.contacts:"+l.currentUser.id,JSON.stringify({query:l.query})),l.promise=o.cmContact.get(l.query,m).$promise},l.refreshContacts=function(){l.getContacts()},l.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:l.currentUser.id,fields:"id,name"})}]},locals:{contacts:l.contacts.rows}})},l.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:l.currentUser.id,fields:"id,name"})}]},locals:{contacts:l.contacts.rows}})},l.openContact=function(e){return o.cmContact.get({id:e}).$promise.then(function(e){t.$parent.vm.addContactTab(e)})},l.call=t.$parent.vm.call,l.onInit=u,l.getListId=function(){var e=_.toString(l.query.ListId);if(e){var t=e.split(","),n=l.defaultLists.split(",");_.isEqual(t,n)||(1<t.length?e=l.defaultLists:_.indexOf(n,t[0])<0&&(e=l.defaultLists))}else e=l.defaultLists;return e},u();var d=!0,c=1;function m(e){l.contacts=e||{count:0,rows:[]}}function u(){var e=r.localStorage.getItem("motion2.home.contacts:"+l.currentUser.id);e&&(e=JSON.parse(e))&&e.query&&(l.query=_.merge(l.query,e.query),l.query=_.omit(l.query,"filter")),o.user.getLists({id:l.currentUser.id,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"),l.defaultLists=l.lists.rows?_.map(l.lists.rows,"id").join(","):void 0,o.tag.get().$promise}).then(function(e){l.tags=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){l.getContacts()})}t.$watch("vm.query.filter",function(e,t){d?a(function(){d=!1}):(t||(c=l.query.page),e!==t&&(l.query.page=1),e||(l.query.page=c),l.getContacts())})}e.$inject=["$document","$scope","$timeout","$mdDialog","$stateParams","Auth","api","$window"],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(n,a,i,s,o,r,l,t,d,c,e){var m=this;function u(e){m.faxInteractions=e||{count:0,rows:[]};for(var t=0;t<m.faxInteractions.rows.length;t+=1)g(m.faxInteractions.rows[t])}function p(){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.faxAccounts.rows.length?(_.includes(_.map(m.faxAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.FaxAccountId=m.query.account||_.map(m.faxAccounts.rows,"id").join()):m.query.FaxAccountId=-1,m.query.offset=(m.query.page-1)*m.query.limit,o.localStorage.setItem("motion2.home.fax:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.faxInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}m.user=t.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.faxInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},m.success=u,m.getFaxInteractions=p,m.showFaxInteraction=function(e,t){n.$parent.vm.addInteractionTab("fax",t)},m.downloadFaxInteraction=function(e,s,t){l.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()})})},m.getContactLabel=function(e){if(e.Contact){var t="";return t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||""),t+=" <"+(e.Contact.fax||"unknown")+">"}return r.instant("DASHBOARDS.UNKNOWN")},m.getUserLabel=function(e){if(e.UserId)return e.UserId===t.getCurrentUser().id?r.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return r.instant("DASHBOARDS.NOT_ASSIGNED")},m.getFaxAccountLabel=function(e){if(e.Account)return e.Account.key;return r.instant("DASHBOARDS.UNKNOWN")},m.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getFaxInteractions()},m.composeFaxInteraction=function(e,t){i.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:t,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){return l.faxAccount.send({id:t.id},e).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),n.$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()})})})},m.onInit=function(e,t){return m.license=e,m.setting=t,l.user["get"+_.upperFirst("faxAccounts")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.faxAccounts=e||{count:0,rows:[]},l.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return l.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=o.localStorage.getItem("motion2.home.fax:"+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)}catch(e){console.error(e)}d.on("faxInteraction:save",m.onFaxInteractionSave),d.on("faxInteraction:update",m.onFaxInteractionSave),d.on("faxInteractionTags:save",m.onFaxInteractionTagsSave),d.on("faxMessage:save",m.onFaxMessageSave),d.on("faxMessage:update",m.onFaxMessageSave),d.on("user_has_fax_interactions:save",m.onFaxInteractionOpen),d.on("user_has_fax_interactions:remove",m.onFaxInteractionClose),m.getFaxInteractions()})},m.onFaxInteractionSave=function(e){if(e){var t=_.find(m.faxInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},m.onFaxInteractionTagsSave=function(e){if(e){var t=_.find(m.faxInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onFaxMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.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=[]),t.Messages.push(e)),g(t)}}},m.onFaxInteractionOpen=function(e){var t=_.find(m.faxInteractions.rows,{id:e.FaxInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onFaxInteractionClose=function(e){var t=_.find(m.faxInteractions.rows,{id:e.FaxInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.localizationMap=e,m.pickerModel={dateStart:null};var v=!0,h=1;n.$watch("vm.query.filter",function(e,t){v?a(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getFaxInteractions())}),n.$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"],angular.module("app.dashboards").controller("AgentHomeFaxController",e)}(),function(){"use strict";function e(a,n,i,s,o,r,l,t,d,c,e){var m=this;function u(e){m.mailInteractions=e||{count:0,rows:[]};for(var t=0;t<m.mailInteractions.rows.length;t+=1)g(m.mailInteractions.rows[t])}function p(){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.mailAccounts.rows.length?(_.includes(_.map(m.mailAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.MailAccountId=m.query.account||_.map(m.mailAccounts.rows,"id").join()):m.query.MailAccountId=-1,m.query.offset=(m.query.page-1)*m.query.limit,o.localStorage.setItem("motion2.home.mail:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.mailInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}m.user=t.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.mailInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},m.success=u,m.getMailInteractions=p,m.showMailInteraction=function(e,t){a.$parent.vm.addInteractionTab("mail",t)},m.downloadMailInteraction=function(e,s,t){l.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()})})},m.getContactLabel=function(e){if(e.Contact){var t="";return t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||""),e.to&&e.Account&&e.to.indexOf(e.Account.email)<0?t=e.to:t+=" <"+(e.Contact.email||"unknown")+">",t}return r.instant("DASHBOARDS.UNKNOWN")},m.getUserLabel=function(e){if(e.UserId)return e.UserId===t.getCurrentUser().id?r.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return r.instant("DASHBOARDS.NOT_ASSIGNED")},m.getMailAccountLabel=function(e){if(e.Account)return e.Account.key;return r.instant("DASHBOARDS.UNKNOWN")},m.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getMailInteractions()},m.composeMailInteraction=function(e,t){i.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!1,locals:{account:t,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(n){return l.mailAccount.send({id:t.id},n).$promise.then(function(e){if(e&&e.Messages&&e.Messages.length){if(n.attachments&&n.attachments.length)for(var t=0;t<n.attachments.length;t+=1)l.attachment.update({id:n.attachments[t].id},{MailMessageId:_.head(e.Messages).id});c.success({title:"Message properly sent!",msg:"Message has been sent!"}),e.closed?(e.disposition=null,i.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(s.body),clickOutsideToClose:!0,locals:{user:m.user,channel:"mail",interaction:e}})):a.$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()})})})},m.onInit=function(e,t){return m.license=e,m.setting=t,l.user["get"+_.upperFirst("mailAccounts")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.mailAccounts=e||{count:0,rows:[]},l.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return l.user.get({nolimit:!0,fields:"id,fullname,userpic,internal"}).$promise}).then(function(e){m.usersByKey=_.keyBy(e.rows,"id")}).then(function(){return l.mailSubstatus.get({nolimit:!0}).$promise}).then(function(e){m.subStatuses=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){var e=o.localStorage.getItem("motion2.home.mail:"+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)}catch(e){console.error(e)}d.on("mailInteraction:save",m.onMailInteractionSave),d.on("mailInteraction:update",m.onMailInteractionSave),d.on("mailInteractionTags:save",m.onMailInteractionTagsSave),d.on("mailMessage:save",m.onMailMessageSave),d.on("mailMessage:update",m.onMailMessageSave),d.on("user_has_mail_interactions:save",m.onMailInteractionOpen),d.on("user_has_mail_interactions:remove",m.onMailInteractionClose),m.getMailInteractions()})},m.onMailInteractionSave=function(e){if(e){var t=_.find(m.mailInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},m.onMailInteractionTagsSave=function(e){if(e){var t=_.find(m.mailInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onMailMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.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=[]),t.Messages.push(e)),g(t)}}},m.onMailInteractionOpen=function(e){var t=_.find(m.mailInteractions.rows,{id:e.MailInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onMailInteractionClose=function(e){var t=_.find(m.mailInteractions.rows,{id:e.MailInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.localizationMap=e,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.getMailInteractions())}),a.$on("$destroy",function(){d.removeAllListeners("mailMessage:save"),d.removeAllListeners("mailMessage:update"),d.removeAllListeners("mailInteraction:save"),d.removeAllListeners("mailInteractionTags:save"),d.removeAllListeners("mailInteraction:update"),d.removeAllListeners("user_has_mail_interactions:save"),d.removeAllListeners("user_has_mail_interactions:remove")})}e.$inject=["$scope","$timeout","$mdDialog","$document","$window","$translate","api","Auth","socket","toasty","dateFilterLocalizationFactory"],angular.module("app.dashboards").controller("AgentHomeMailController",e)}(),function(){"use strict";function e(n,a,i,s,e,t,o){var r=this;r.currentUser=e.getCurrentUser(),r.lists={},r.contacts={count:0,rows:[]},r.tags={count:0,rows:[]},r.query={includeAll:!0,id:r.currentUser.id,sort:"-updatedAt",limit:10,page:1},r.getContacts=function(){r.query.ListId=r.getListId(),r.query.offset=(r.query.page-1)*r.query.limit,o.localStorage.setItem("motion2.home.mycontacts:"+r.currentUser.id,JSON.stringify({query:r.query})),r.promise=t.user.getContacts(r.query,c).$promise},r.refreshContacts=function(){r.getContacts()},r.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:r.currentUser.id,fields:"id,name"})}]},locals:{contacts:r.contacts.rows}})},r.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:r.currentUser.id,fields:"id,name"})}]},locals:{contacts:r.contacts.rows}})},r.openContact=function(e,t){a.$parent.vm.addContactTab(t)},r.call=a.$parent.vm.call,r.onInit=function(){var e=o.localStorage.getItem("motion2.home.mycontacts:"+r.currentUser.id);if(e)try{(e=JSON.parse(e)).query&&(r.query=_.omit(e.query,"filter"))}catch(e){console.error(e)}t.cmList.get({fields:"id,name,dialPrefix",sort:"name",nolimit:!0}).$promise.then(function(e){return r.lists=e||{count:0,rows:[]},r.listsMap=_.keyBy(r.lists.rows,"id"),r.defaultLists=r.lists.rows?_.map(r.lists.rows,"id").join(","):void 0,t.tag.get().$promise}).then(function(e){r.tags=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}).finally(function(){r.getContacts()})},r.getListId=function(){var e=_.toString(r.query.ListId);if(e){var t=e.split(","),n=r.defaultLists.split(",");_.isEqual(t,n)||(1<t.length?e=r.defaultLists:_.indexOf(n,t[0])<0&&(e=r.defaultLists))}else e=r.defaultLists;return e};var l=!0,d=1;function c(e){r.contacts=e||{count:0,rows:[]}}a.$watch("vm.query.filter",function(e,t){l?i(function(){l=!1}):(t||(d=r.query.page),e!==t&&(r.query.page=1),e||(r.query.page=d),r.getContacts())})}e.$inject=["$document","$scope","$timeout","$mdDialog","Auth","api","$window"],angular.module("app.dashboards").controller("AgentHomeMyContactsController",e)}(),function(){"use strict";function e(n,a,i,s,o,r,l,t,d,c,e){var m=this;function u(e){m.openchannelInteractions=e||{count:0,rows:[]};for(var t=0;t<m.openchannelInteractions.rows.length;t+=1)g(m.openchannelInteractions.rows[t])}function p(){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.openchannelAccounts.rows.length?(_.includes(_.map(m.openchannelAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.OpenchannelAccountId=m.query.account||_.map(m.openchannelAccounts.rows,"id").join()):m.query.OpenchannelAccountId=-1,m.query.offset=(m.query.page-1)*m.query.limit,o.localStorage.setItem("motion2.home.openchannel:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.openchannelInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}m.user=t.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.openchannelInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},m.success=u,m.getOpenchannelInteractions=p,m.showOpenchannelInteraction=function(e,t){n.$parent.vm.addInteractionTab("openchannel",t)},m.downloadOpenchannelInteraction=function(e,s,t){l.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()})})},m.getContactLabel=function(e){if(e.Contact){var t="";return t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||""),e.from&&(t=e.from),t}return r.instant("DASHBOARDS.UNKNOWN")},m.getUserLabel=function(e){if(e.UserId)return e.UserId===t.getCurrentUser().id?r.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return r.instant("DASHBOARDS.NOT_ASSIGNED")},m.getOpenchannelAccountLabel=function(e){if(e.Account)return e.Account.key;return r.instant("DASHBOARDS.UNKNOWN")},m.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getOpenchannelInteractions()},m.composeOpenchannelInteraction=function(e,t){i.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:t,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){return l.openchannelAccount.send({id:t.id},e).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),n.$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()})})})},m.onInit=function(e,t){return m.license=e,m.setting=t,l.user["get"+_.upperFirst("openchannelAccounts")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.openchannelAccounts=e||{count:0,rows:[]},l.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return l.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=o.localStorage.getItem("motion2.home.openchannel:"+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)}catch(e){console.error(e)}d.on("openchannelInteraction:save",m.onOpenchannelInteractionSave),d.on("openchannelInteraction:update",m.onOpenchannelInteractionSave),d.on("openchannelInteractionTags:save",m.onOpenchannelInteractionTagsSave),d.on("openchannelMessage:save",m.onOpenchannelMessageSave),d.on("openchannelMessage:update",m.onOpenchannelMessageSave),d.on("user_has_openchannel_interactions:save",m.onOpenchannelInteractionOpen),d.on("user_has_openchannel_interactions:remove",m.onOpenchannelInteractionClose),m.getOpenchannelInteractions()})},m.onOpenchannelInteractionSave=function(e){if(e){var t=_.find(m.openchannelInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},m.onOpenchannelInteractionTagsSave=function(e){if(e){var t=_.find(m.openchannelInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onOpenchannelMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.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=[]),t.Messages.push(e)),g(t)}}},m.onOpenchannelInteractionOpen=function(e){var t=_.find(m.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onOpenchannelInteractionClose=function(e){var t=_.find(m.openchannelInteractions.rows,{id:e.OpenchannelInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.localizationMap=e,m.pickerModel={dateStart:null};var v=!0,h=1;n.$watch("vm.query.filter",function(e,t){v?a(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getOpenchannelInteractions())}),n.$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"],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(){if(p.pickerModel.dateStart){var e=moment(p.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();p.query.createdAt={$gte:p.pickerModel.dateStart,$lte:e}}else 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.getVoiceRecordings()},p.clearAll=function(){p.pickerModel={dateStart:null},p.getVoiceRecordings()};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.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(){if(d.pickerModel.dateStart){var e=moment(d.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();d.query.scheduledat={$gte:d.pickerModel.dateStart,$lte:e}}else 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}})},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(n,a,i,s,o,r,l,t,d,c,e){var m=this;function u(e){m.smsInteractions=e||{count:0,rows:[]};for(var t=0;t<m.smsInteractions.rows.length;t+=1)g(m.smsInteractions.rows[t])}function p(){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.smsAccounts.rows.length?(_.includes(_.map(m.smsAccounts.rows,"id"),m.query.account)||(m.query.account=null),m.query.SmsAccountId=m.query.account||_.map(m.smsAccounts.rows,"id").join()):m.query.SmsAccountId=-1,m.query.offset=(m.query.page-1)*m.query.limit,o.localStorage.setItem("motion2.home.sms:"+m.user.id,JSON.stringify({query:m.query})),m.promise=l.smsInteraction.get(m.query,u).$promise}function g(e){e&&e.Messages?e.unread=_.filter(e.Messages||[],{direction:"in",read:!1}).length:e.unread=0}m.user=t.getCurrentUser(),m.license={},m.setting={},m.tags={count:0,rows:[]},m.smsInteractions={count:0,rows:[]},m.query={includeAll:!0,sort:"-updatedAt",limit:10,page:1,read:null,closed:null,account:null},m.success=u,m.getSmsInteractions=p,m.showSmsInteraction=function(e,t){n.$parent.vm.addInteractionTab("sms",t)},m.downloadSmsInteraction=function(e,s,t){l.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()})})},m.getContactLabel=function(e){if(e.Contact){var t="";return t+=(e.Contact.firstName||"")+""+(e.Contact.lastName||""),t+=" <"+(e.Contact.mobile||"unknown")+">"}return r.instant("DASHBOARDS.UNKNOWN")},m.getUserLabel=function(e){if(e.UserId)return e.UserId===t.getCurrentUser().id?r.instant("DASHBOARDS.ME"):m.usersByKey[e.UserId].fullname+" <"+m.usersByKey[e.UserId].internal+">";return r.instant("DASHBOARDS.NOT_ASSIGNED")},m.getSmsAccountLabel=function(e){if(e.Account)return e.Account.key;return r.instant("DASHBOARDS.UNKNOWN")},m.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"}},m.clearAll=function(){m.calendarModel={dateStart:null},m.pickerModel={dateStart:null},m.serviceModel={dateStart:null},m.getSmsInteractions()},m.composeSmsInteraction=function(e,t){i.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:t,message:{},type:"new",interaction:{}},fullscreen:!0}).then(function(e){return l.smsAccount.send({id:t.id},e).$promise.then(function(e){c.success({title:"Message properly sent!",msg:"Message has been sent!"}),n.$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()})})})},m.onInit=function(e,t){return m.license=e,m.setting=t,l.user["get"+_.upperFirst("smsAccounts")]({id:m.user.id,nolimit:!0}).$promise.then(function(e){return m.smsAccounts=e||{count:0,rows:[]},l.tag.get().$promise}).then(function(e){m.tags=e||{count:0,rows:[]}}).then(function(){return l.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=o.localStorage.getItem("motion2.home.sms:"+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)}catch(e){console.error(e)}d.on("smsInteraction:save",m.onSmsInteractionSave),d.on("smsInteraction:update",m.onSmsInteractionSave),d.on("smsInteractionTags:save",m.onSmsInteractionTagsSave),d.on("smsMessage:save",m.onSmsMessageSave),d.on("smsMessage:update",m.onSmsMessageSave),d.on("user_has_sms_interactions:save",m.onSmsInteractionOpen),d.on("user_has_sms_interactions:remove",m.onSmsInteractionClose),m.getSmsInteractions()})},m.onSmsInteractionSave=function(e){if(e){var t=_.find(m.smsInteractions.rows,{id:e.id});t?_.merge(t,_.pick(e,_.keys(t))):p(),g(e)}},m.onSmsInteractionTagsSave=function(e){if(e){var t=_.find(m.smsInteractions.rows,{id:e.id});t&&(t.Tags=e.tags||[],_.merge(t,_.pick(e,_.keys(t))))}},m.onSmsMessageSave=function(e){if(e&&!e.secret){var t=_.find(m.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=[]),t.Messages.push(e)),g(t)}}},m.onSmsInteractionOpen=function(e){var t=_.find(m.smsInteractions.rows,{id:e.SmsInteractionId});t&&t.Users&&(_.find(t.Users,{id:e.UserId})||t.Users.push({id:e.UserId}))},m.onSmsInteractionClose=function(e){var t=_.find(m.smsInteractions.rows,{id:e.SmsInteractionId});t&&t.Users&&_.remove(t.Users,{id:e.UserId})},m.localizationMap=e,m.pickerModel={dateStart:null};var v=!0,h=1;n.$watch("vm.query.filter",function(e,t){v?a(function(){v=!1}):(t||(h=m.query.page),e!==t&&(m.query.page=1),e||(m.query.page=h),m.getSmsInteractions())}),n.$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"],angular.module("app.dashboards").controller("AgentHomeSmsController",e)}(),function(){"use strict";function e(t,n,a,i,e,s,o,r,l,d){var c=this;function m(e){c.voiceCalls=e||{count:0,rows:[]}}c.currentUser=e.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(){if(c.pickerModel.dateStart){var e=moment(c.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();c.query.createdAt={$gte:c.pickerModel.dateStart,$lte:e}}else 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=a.voiceCallReport.get(c.query,m).$promise},c.onInit=function(){return a.tag.get().$promise.then(function(e){c.tags=e||{count:0,rows:[]}}).catch(function(e){i.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()};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,n,a,i,s,o,r,l,d,c,m,u){var p=this,g=25,v=1024*g*1024;function h(){i.show({controller:"DisposeInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/dispose/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,locals:{user:p.user,channel:p.tab.channel,interaction:p.tab.interaction}}).then(function(e){p.tab.saved=Boolean(e),e&&a.$parent.$parent.$parent.vm.closeTab(p.tab)})}function f(e,t){p.tab.message||(p.tab.message=t),i.show({controller:"ComposeMailInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeMail/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!1,locals:{account:p.account,message:p.tab.message,type:e,interaction:p.interaction},fullscreen:!0,skipHide:Boolean(p.tab.spy)}).then(function(t){t&&E(t),t.Interaction&&p.interaction&&p.interaction.id&&(t.Interaction.id=p.interaction.id,l.mailInteraction.update(t.Interaction).$promise.then(function(e){e&&e.closed?(p.tab.saved=!0,p.interaction.closed=!0,h()):null!==t.Interaction.substatus&&(p.tab.saved=!0,p.tab.interaction.substatus=t.Interaction.substatus,a.$parent.$parent.$parent.vm.closeTab(p.tab))}).catch(function(e){console.error(e)}))})}function b(){"mail"!==p.tab.channel&&t(function(){var e=angular.element(n.find("md-content[name*='interaction-content-"+p.tab.id+"']"));e&&e[0]&&(e[0].scrollTop=e[0].scrollHeight)},0)}function E(n){if(n)return n["chat"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId"]=p.interaction["chat"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId"],n[_.capitalize(p.tab.channel)+"InteractionId"]=p.interaction.id,n.UserId=p.user.id,n.ContactId=p.interaction.ContactId,n.direction="out",n.secret=Boolean(p.tab.spy||n.secret),l[p.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(){p.tab.areaText="",b()})}function A(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 y(e){e&&e.count&&e.rows.length&&(p.journey=_.concat(p.journey,e.rows))}p.showFooter=!1,p.showInteraction=!1,p.user=c.getCurrentUser(),p.detectBrowser=u.detectBrowser(),p.journey=[],p.acceptedMessages=[],p.omniChannels=["mail","chat","sms","openchannel","fax"],p.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:v,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},p.ngFlow={flow:{}},p.selectedMailShowDetails={},p.selectedMailShowSystemMessage={},p.setting={},p.ctrlMethods={},p.embedOptions={fontSmiley:!0,sanitizeHtml:!0,emoji:!0,link:!0,linkTarget:"_blank"},p.init=function(e,t){p.tab=e,p.tab.saved=!0,p.tab.badges=0,p.setting=t||{},p.tab&&p.tab.channel&&p.tab.interaction&&(p.interaction=p.tab.interaction,l[p.tab.channel+"Interaction"].get({id:p.tab.interaction.id,includeAll:!0}).$promise.then(function(e){return e&&(p.interaction=e,p.tab.interaction=e),p.tab.saved=p.interaction.closed,p.queryMessage={id:p.interaction.id,includeAll:!0},"mail"===p.tab.channel?(p.queryMessage.sort="-id",p.queryMessage.offset=0,p.queryMessage.limit=3):(p.queryMessage.sort="id",p.queryMessage.nolimit=!0),l[p.tab.channel+"Interaction"].getMessages(p.queryMessage).$promise}).then(function(e){return p.messages=e||{count:0,rows:[]},l["chat"===p.tab.channel?"chatWebsite":p.tab.channel+"Account"].get({id:p.interaction["chat"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId"]}).$promise}).then(function(e){if(p.account=e,p.tab.title=p.account.key||p.account.name,p.interaction.ContactId)return l.cmContact.get({id:p.interaction.ContactId}).$promise}).then(function(e){return e&&(p.contact=e),p.showInteraction=!0,p.contact?(!function(e){if(e&&e.id){for(var t=0;t<p.omniChannels.length;t++)l[p.omniChannels[t]+"Interaction"].get({ContactId:e.id,includeAll:!0}).$promise.then(y);l.voiceCallReport.get({ContactId:e.id,includeAll:!0}).$promise.then(y)}}(p.contact),p.tab.title+=" - "+p.contact.firstName):p.tab.title+=" - "+r.instant(p.tab.channel.toUpperCase()+".UNKNOWN"),l.user.get({fields:"id,fullname",nolimit:!0}).$promise}).then(function(e){p.users=e||{count:0,rows:[]},p.usersMap=_.mapValues(_.keyBy(p.users.rows,"id"),"fullname")}).then(function(){if(p.tab.channel&&p.interaction)return l.user["add"+_.upperFirst(p.tab.channel)+"Interactions"]({id:p.user.id,ids:[p.interaction.id]})}).then(function(){return l.mailSubstatus.get({nolimit:!0}).$promise}).then(function(e){p.subStatuses=e||{count:0,rows:[]}}).then(function(){return p.getMailAccounts()}).then(function(){return p.getFaxAccounts()}).then(function(){return p.getSmsAccounts()}).then(function(){return p.getOpenchannelAccounts()}).then(function(){return p.getChatWebsites()}).then(function(){return p.getLists()}).catch(function(e){p.showInteraction=!0}).finally(function(){!function(){if(!p.tab.spy&&!p.interaction.closed)for(var e=0;e<p.messages.rows.length;e+=1)"in"!==p.messages.rows[e].direction||p.messages.rows[e].read||(l[p.tab.channel+"Message"].accept({id:p.messages.rows[e].id,UserId:p.user.id}),p.acceptedMessages.push(p.messages.rows[e].id))}(),b(),m.on(p.tab.channel+"Message:save",p.onMessageSave),m.on(p.tab.channel+"Message:update",p.onMessageSave),m.on(p.tab.channel+"Interaction:save",p.onInteractionSave),m.on(p.tab.channel+"Interaction:update",p.onInteractionSave),m.on("user_has_"+p.tab.channel+"_interactions:save",p.onInteractionOpen),m.on("user_has_"+p.tab.channel+"_interactions:remove",p.onInteractionClose),p.tab.areaText=p.tab.areaText?p.tab.areaText:"",p.showFooter=!0}))},p.getLabelByMessage=function(e){var t="loading...";if(e)return"in"===e.direction?e.Contact?e.Contact.firstName||"Anonymous":t:e.UserId?p.usersMap?p.usersMap[e.UserId]:t:"System"},p.openContact=function(e,t){try{p.tab&&!p.tab.spy&&a.$parent.$parent.$parent.vm.addContactTab(t||p.contact)}catch(e){d.error({title:"ERROR OPEN CONTACT",msg:"Unable to open the contact"})}},p.openInteraction=function(e,t){try{if(t.MailAccountId)return a.$parent.$parent.$parent.vm.addInteractionTab("mail",t);if(t.ChatWebsiteId)return a.$parent.$parent.$parent.vm.addInteractionTab("chat",t);if(t.SmsAccountId)return a.$parent.$parent.$parent.vm.addInteractionTab("sms",t);if(t.OpenchannelAccountId)return a.$parent.$parent.$parent.vm.addInteractionTab("openchannel",t);if(t.FaxAccountId)return a.$parent.$parent.$parent.vm.addInteractionTab("fax",t)}catch(e){d.error({title:"ERROR OPEN INTERACTION",msg:"Customer Journey can't open the interaction"})}},p.disposeInteraction=h,p.tagInteraction=function(){i.show({controller:"TagInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/tag/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!0,skipHide:Boolean(p.tab.spy),resolve:{tags:["apiResolver",function(e){return e.resolve("tag@get",{nolimit:!0,fields:"id,name,color"})}]},locals:{channel:p.tab.channel,interaction:p.tab.interaction}})},p.composeMailInteraction=function(t,e){if(e.inReplyTo){var n=_.find(p.messages.rows,{messageId:e.inReplyTo});if(!n)return l.mailMessage.get({messageId:e.inReplyTo}).$promise.then(function(e){f(t,e&&e.count?e.rows[0]:void 0)}).catch(function(e){console.error(e),f(t,void 0)});f(t,n)}else f(t,e)},p.composeFaxInteraction=function(e){var t={to:[]};t.to.push(p.contact.fax),i.show({controller:"ComposeFaxInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeFax/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!1,locals:{account:p.account,message:t,type:e},fullscreen:!0}).then(function(e){return l.faxAccount.send({id:p.account.id},e).$promise.then(function(e){d.success({title:"Message properly sent!",msg:"Message has been sent!"}),a.$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()})})})},p.composeSmsInteraction=function(e,t){i.show({controller:"ComposeSmsInteractionDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/composeSms/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!1,locals:{account:p.account,message:t,type:e},fullscreen:!0,skipHide:Boolean(p.tab.spy)}).then(function(e){e&&E(e)})},p.transferLastMessage=function(){if(p.interaction){var e=_.findLast(p.messages.rows,function(e){return"in"===e.direction});e?i.show({controller:"TransferMessageDialogController",controllerAs:"vm",templateUrl:"app/main/apps/dashboards/views/general/agent/interaction/transfer/dialog.html",parent:angular.element(n.body),clickOutsideToClose:!1,locals:{account:p.account,interaction:p.interaction,message:e,channel:p.tab.channel}}).then(function(e){p.tab.saved=Boolean(e),e&&a.$parent.$parent.$parent.vm.closeTab(p.tab)}):d.error({title:"Invalid transfer",msg:"Message not found!"})}},p.downloadMessage=function(s,e){p.tab.channel&&s.id&&l[p.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=p.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()})})},p.downloadInteraction=function(s,e){p.tab.channel&&s.id&&l[p.tab.channel+"Interaction"].download({id:s.id,attachments:e}).$promise.then(function(e){var t=[e.buffer],n=p.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()})})},p.getMailAccounts=function(){l.user.getMailAccounts({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.mailAccounts=e||{count:0,rows:[]}})},p.getFaxAccounts=function(){l.user.getFaxAccounts({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.faxAccounts=e||{count:0,rows:[]}})},p.getSmsAccounts=function(){l.user.getSmsAccounts({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.smsAccounts=e||{count:0,rows:[]}})},p.getOpenchannelAccounts=function(){l.user.getOpenchannelAccounts({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.openchannelAccounts=e||{count:0,rows:[]}}).catch(function(e){if(e.data&&e.data.errors&&e.data.errors.length){p.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()})})},p.getChatWebsites=function(){l.user.getChatWebsites({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.chatAccounts=e||{count:0,rows:[]}})},p.getLists=function(){l.user.getLists({id:p.user.id,nolimit:!0}).$promise.then(function(e){p.voiceAccounts=e||{count:0,rows:[]}})},p.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"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId";t[n]=p.interaction[n].toString(),t[_.capitalize(p.tab.channel)+"InteractionId"]=p.interaction.id,"sms"===p.tab.channel&&(t.phone=p.interaction.phone);e&&(t.UserId=p.user.id,t.ContactId=p.interaction.ContactId,t.body=e,t.createdAt=Date.now());return t}(t.replace(/\n$/,"")))},p.upload=function(){p.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+e.get("motion.token")},p.ngFlow.flow.upload()},p.fileAdded=function(e){if(e.size>v)return d.error({title:"File too big",msg:"The max allowed size is "+g+"MB"}),!1;return!0},p.fileSuccess=function(e,t){var n=JSON.parse(t),a=n.name;"chat"===p.tab.channel&&(a='<a href="'+(p.account.remote?p.account.remote:o.protocol()+"://"+o.host())+"/api/chat/interactions/"+p.interaction.id+"/attachment_download?attachId="+n.id+"&token="+p.account.token+'" target="_self">'+n.name+"</a>");E({body:a,AttachmentId:n.id})},p.onMessageSave=function(e){if(e&&p.interaction.id!=e[_.capitalize(p.tab.channel)+"InteractionId"])return;var t=!1;p.messages?t=_.find(p.messages.rows,{id:e.id}):p.messages={rows:[],count:0};t?_.merge(t,e):("mail"===p.tab.channel?p.messages.rows.unshift(e):p.messages.rows.push(e),b())},p.onInteractionSave=function(e){if(e&&p.interaction.id!==e.id)return;e.closed&&(p.tab.saved=!0);_.merge(p.interaction,e)},p.searchTextChange=function(t){var n=s.defer(),a=[],e={},i="chat"===p.tab.channel?"ChatWebsiteId":_.capitalize(p.tab.channel)+"AccountId";return e.filter=t,e[i]=p.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},p.selectedItemChange=function(t){if(t){try{_.templateSettings.interpolate=/{{([\s\S]+?)}}/g;var e=_.template(t.value),n={user:p.user,account:p.account,interaction:p.interaction,contact:p.interaction&&p.interaction.Contact?p.interaction.Contact:{}};p.tab.areaText+=" "+e(n),p.ctrlMethods.setText(p.tab.areaText)}catch(e){p.tab.areaText+=" "+t.value,p.ctrlMethods.setText(p.tab.areaText)}p.selectedItem=null,p.changeDisplayCannedAnswerInputValue()}},p.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"}},p.getColorByChannel=A,p.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 A(t)},p.getMessagesAlignment=function(e){if(e.secret&&p.user.id!=e.UserId)return"in";switch(p.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}},p.displayCannedAnswerInput=!1,p.changeDisplayCannedAnswerInputValue=function(){p.displayCannedAnswerInput=!p.displayCannedAnswerInput},p.setAs=function(e){p.tab.channel&&p.interaction&&p.interaction.id&&l[p.tab.channel+"Interaction"].update({id:p.interaction.id,substatus:e}).$promise.catch(function(e){console.error(e)})},p.markAsUnread=function(){if(p.tab.channel&&p.interaction&&p.interaction.id)if(p.acceptedMessages.length)for(var e=0;e<p.acceptedMessages.length;e+=1)l[p.tab.channel+"Message"].update({id:p.acceptedMessages[e],read:!1,UserId:null});else for(var t=0;t<p.messages.rows.length;t+=1)if("in"===p.messages.rows[t].direction){p.messages.rows[t].UserId===p.user.id?l[p.tab.channel+"Message"].update({id:p.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}p.tab.saved=!0,a.$parent.$parent.$parent.vm.closeTab(p.tab)},p.isMyAccount=function(e){{if(e.FaxAccountId)return _.includes(_.map(p.faxAccounts?p.faxAccounts.rows:[],"id"),e.FaxAccountId);if(e.OpenchannelAccountId)return _.includes(_.map(p.openchannelAccounts?p.openchannelAccounts.rows:[],"id"),e.OpenchannelAccountId);if(e.SmsAccountId)return _.includes(_.map(p.smsAccounts?p.smsAccounts.rows:[],"id"),e.SmsAccountId);if(e.MailAccountId)return _.includes(_.map(p.mailAccounts?p.mailAccounts.rows:[],"id"),e.MailAccountId);if(e.ChatWebsiteId)return _.includes(_.map(p.chatAccounts?p.chatAccounts.rows:[],"id"),e.ChatWebsiteId);if(e.amaflags)return!0}return!1},p.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()})})},p.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()})})},p.htmlToPlaintext=function(e){return e?String(e).replace(/<[^>]+>/gm,""):""},p.onInteractionOpen=function(e){var t;p.interaction.id==e[_.upperFirst(p.tab.channel)+"InteractionId"]&&(p.interaction.Users&&(t=_.find(p.interaction.Users,{id:e.UserId})),t||p.interaction.Users.push({id:e.UserId}))},p.onInteractionClose=function(e){p.interaction.id==e[_.upperFirst(p.tab.channel)+"InteractionId"]&&p.interaction.Users&&_.remove(p.interaction.Users,{id:e.UserId})},p.loadNextPage=function(){var n=s.defer();if(p.queryMessage)return p.queryMessage.offset=p.messages.rows.length,l[p.tab.channel+"Interaction"].getMessages(p.queryMessage).$promise.then(function(e){for(var t=0;t<e.rows.length;t+=1)p.messages.rows.push(e.rows[t]),p.interaction.closed||"in"!==e.rows[t].direction||e.rows[t].read||(l[p.tab.channel+"Message"].accept({id:e.rows[t].id,UserId:p.user.id}),p.acceptedMessages.push(e.rows[t].id));return n.resolve(e)}).catch(function(e){return n.reject(e)});return n.reject()},p.timelineOptions={scrollEl:"#interaction-content"},a.$on("$destroy",function(){m.removeAllListeners(p.tab.channel+"Message:save"),m.removeAllListeners(p.tab.channel+"Message:update"),m.removeAllListeners(p.tab.channel+"Interaction:save"),m.removeAllListeners(p.tab.channel+"Interaction:update"),m.removeAllListeners("user_has_"+p.tab.channel+"_interactions:save"),m.removeAllListeners("user_has_"+p.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"],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(n,a)),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,s,o,a,r,l,d,c,m){var u=this,p=25,g=1024*p*1024;u.currentUser=c.getCurrentUser(),u.secret="note"===a,u.hiddenCC=!0,u.hiddenBCC=!0,u.verifySmtp=!0,u.errors=[],u.separatorKeys=[n.KEY_CODE.ENTER,n.KEY_CODE.COMMA,n.KEY_CODE.TAB],u.searchTextChange=function(t){var n=d.defer(),a=[];return r.cannedAnswer.get({filter:t,MailAccountId:s.id}).$promise.then(function(e){return a=_.concat(a,e.rows),r.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},u.selectedItemChange=function(t){if(t&&t.value&&u.ckEditorInstance)try{var e=_.template(t.value),n={user:u.currentUser,account:s,interaction:m,contact:m&&m.Contact?m.Contact:{}};u.ckEditorInstance.insertHtml(e(n))}catch(e){console.error(e),u.ckEditorInstance.insertHtml(t.value)}document.getElementById("html-area").focus(),u.selectedItem=null},u.onReadyEditor=function(e){try{u.ckEditorInstance=CKEDITOR.instances["html-area"]}catch(e){console.error("Unable to get Html Editor instance",e)}},_.templateSettings.interpolate=/{{([\s\S]+?)}}/g,u.fromTemplate=_.template("{{ name }} <{{ email }}>"),u.replyTemplate=_.template("On {{ date }}, at {{ time }}, {{ from }} wrote:"),u.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 }}"),u.message={from:u.fromTemplate({name:s.name,email:s.email||s.Smtp.user}),to:[],cc:[],bcc:[],body:E(),type:a,attachments:[],showLastMessage:!0},u.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:u.secret?160:300,autoGrow_maxHeight:e.innerHeight-400,autocorrect_enabled:!0,disableNativeSpellChecker:!1,font_defaultLabel:s.fontFamily?s.fontFamily.split(",")[0]:"Arial",fontSize_defaultLabel:s.fontSize||"12",removePlugins:"magicline"};for(var v=[],h=8;h<=72;h++)v.push(h+"/"+h+"pt");switch(u.ckeditor.fontSize_sizes=v.join(";"),u.ngFlowOptions={target:"api/attachments",singleFile:!0,maxChunkRetries:1,chunkSize:g,simultaneousUploads:1,testChunks:!1,progressCallbacksInterval:1e3,allowDuplicateUploads:!0},u.ngFlow={flow:{}},u.reply=function(e){angular.isDefined(o)&&(u.message.type="reply",u.message.to="in"===o.direction?o.from.split(","):o.to.split(","),u.message.subject=_.startsWith(o.subject,"Re:")?o.subject:"Re: "+o.subject,u.message.inReplyTo=o.messageId,u.message.body=o.draft&&o.draft.inReplyTo?o.draft.body:E(),u.message.attachments=o.draft?o.draft.attachments:[],e&&o.cc&&(u.hiddenCC=!1,u.message.cc=o.cc.split(",")),u.message.showLastMessage=!!o.draft&&o.draft.showLastMessage)},u.newMail=function(){angular.isDefined(o)&&(u.message.type="new",u.message.to=o.to?o.to.split(","):[])},u.forward=function(){if(angular.isDefined(o)){if(u.message.type="forward",u.message.subject=_.startsWith(o.subject,"Fwd:")?o.subject:"Fwd: "+o.subject,u.message.body=o.draft&&!o.draft.inReplyTo?o.draft.body:E(),o.Attachments&&o.Attachments.length)for(var e=0;e<o.Attachments.length;e++)u.message.attachments.push(o.Attachments[e]);u.message.showLastMessage=!!o.draft&&o.draft.showLastMessage}},u.send=function(e,t,n){if(u.message.to&&u.message.body)if(u.message.to.length)if(o.draft=void 0,_.isEmpty(u.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(){f(t,n)})}else f(t,n);else l.error("To is mandatory")},u.note=function(){u.type="note",u.secret=!0,u.message.body='<div style="font-family:'+s.fontFamily+";font-size:"+s.fontSize+'pt"><p></p></div>'},u.addNote=function(){u.message.body&&(u.message.draft=void 0,i.hide({secret:!0,body:u.message.body,attach:u.message.attachments.length,attachments:u.message.attachments}))},u.upload=function(e){u.ngFlow.flow.opts.headers={"X-Requested-With":"XMLHttpRequest",Authorization:"Bearer "+t.get("motion.token")},u.ngFlow.flow.upload()},u.fileSuccess=function(e,t){try{(t=JSON.parse(t)).size=e.size,u.message.attachments.push(t)}catch(e){console.error(e)}},u.deleteAttachment=function(e){u.message.attachments=_.reject(u.message.attachments,{id:e.id}),r.attachment.delete({id:e.id}).$promise.then(function(){l.success({title:"Attachment deleted!",msg:e.name?e.name+" has been deleted!":""})})},u.fileAdded=function(e){if(e.size>g)return l.error({title:"File too big",msg:"The max allowed size is "+p+"MB"}),!1;return!0},u.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+">"},u.contactSearch=function(e){return s&&s.ListId?r.cmContact.get({ListId:s.ListId,nolimit:!0,filter:e,fields:"firstName,lastName,email"}).$promise.then(function(e){return e.rows}):[]},u.transformContact=function(e,t){if(_.isObject(e))return e.email;if(_.isString(e)){if(b(e))return e;for(var n=e.split(","),a=0;a<n.length;a+=1)b(n[a])?_.isArray(t)&&_.indexOf(t,n[a])<0&&t.push(n[a]):l.error("Email "+n[a]+" is not valid");return null}return l.error("Email field is not valid"),null},u.closeDialog=function(){angular.isDefined(o)&&(o.draft=u.message);i.cancel()},u.loadLastMessage=function(){u.message.body+=A(u.message.type)},a){case"reply":u.reply(!1);break;case"replyAll":u.reply(!0);break;case"forward":u.forward();break;case"new":u.newMail();break;case"note":u.note()}function f(e,t){var n={from:u.message.from,to:u.message.to.join(","),cc:u.message.cc.join(","),bcc:u.message.bcc.join(","),subject:u.message.subject,body:u.message.showLastMessage?u.message.body:u.message.body+A(u.message.type),inReplyTo:u.message.inReplyTo,attach:u.message.attachments.length,attachments:u.message.attachments,Interaction:{lastMsgDirection:"out",lastMsgBody:u.message.body,substatus:t}};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 b(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 E(){return'<div style="font-family:'+s.fontFamily+";font-size:"+s.fontSize+'pt">'+function(){if(_.isNil(s.template))return"";try{return _.template(s.template)({user:u.currentUser,account:s,interaction:m,contact:m&&m.Contact?m.Contact:{}})}catch(e){return console.error(e),""}}()+"</div>"}function A(e){var t,n,a='<div id="xm-mail-content"><blockquote type="cite">';switch(e){case"reply":case"replyAll":a+=u.replyTemplate({date:moment(o.createdAt).format("D MMM YYYY")||"",time:moment(o.createdAt).format("HH:mm")||"",from:_.escape(o.from)||""});break;case"forward":a+=u.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:""}r.mailSubstatus.get({nolimit:!0}).$promise.then(function(e){u.subStatuses=e||{count:0,rows:[]}}).catch(function(e){console.error(e)}),u.secret||r.mailAccount.verifySmtp({id:s.id}).$promise.catch(function(e){u.verifySmtp=!1,u.errors.push({message:e.data,type:e.status}),u.errors.push({message:"You can't reply or send an email. Please contact the administrator!",type:"500"})})}e.$inject=["$cookies","$window","$mdDialog","$mdConstant","account","message","type","api","toasty","$q","Auth","interaction"],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,i,s,o){var r=this;function l(){r.mandatoryDisposition&&a.user.pause({id:o.id,type:r.mandatoryDispositionPause||"DEFAULT PAUSE"}).$promise.then(function(e){}).catch(function(e){console.error(e)})}function d(e){r.mandatoryDisposition&&a.user.unpause({id:o.id}).$promise.catch(function(e){console.error(e)}),t.hide(e)}r.errors=[],r.interaction=angular.copy(i),r.dispositions={count:0,rows:[]},r.globalDispositions={count:0,rows:[]},r.channel=s,r.apiRoute=r.channel+"Interaction",r.interaction.disposition||(r.interaction.disposition=null),r.mandatoryDisposition=!0,r.mandatoryDispositionPause="",r.saveDisposition=function(e){r.errors=[],r.interaction.UserId=o.id,r.interaction.closed=!0,r.interaction.closeReason="agent",a[r.apiRoute]?a[r.apiRoute].update(_.pick(r.interaction,["MailAccountId","FaxAccountId","SmsAccountId","ChatWebsiteId","OpenchannelAccountId","closed","closeReason","disposition","id","note","UserId"])).$promise.then(function(e){r.interaction=e,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){r.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)},r.closeDialog=d,function(){var e={fields:"id,name",sort:"name",nolimit:!0};switch(s){case"chat":e.ChatWebsiteId=i.ChatWebsiteId,a.chatWebsite.get({id:i.ChatWebsiteId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()});break;case"mail":e[t=_.capitalize(s)+"AccountId"]=i[t],a.mailAccount.get({id:i.MailAccountId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()});break;case"sms":e[t=_.capitalize(s)+"AccountId"]=i[t],a.smsAccount.get({id:i.SmsAccountId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()});break;case"fax":e[t=_.capitalize(s)+"AccountId"]=i[t],a.faxAccount.get({id:i.FaxAccountId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()});break;case"openchannel":var t;e[t=_.capitalize(s)+"AccountId"]=i[t],a.faxAccount.get({id:i.OpenchannelAccountId}).$promise.then(function(e){r.mandatoryDisposition=e.mandatoryDisposition,r.mandatoryDisposition&&(r.mandatoryDispositionPause=e.mandatoryDispositionPause.name)}).then(function(){l()})}a.disposition.get(e).$promise.then(function(e){r.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){r.globalDispositions=e}).catch(function(e){console.error(e)})}()}e.$inject=["$mdDialog","toasty","api","interaction","channel","user"],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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.faxQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="FaxQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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.startingAllowedItems=angular.copy(l.allowedItems),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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.mailQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="MailQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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},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:!i,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,l,a,d,t,n,i,s){var c=this;function o(){return l(function(n,t){return l(function(t,n){return d.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],i.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:i.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});i.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.voiceQueue.getTeams({id:c.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:[];c.selectedItems=_.map(t,function(e){return _.find(c.items,{id:e.id})}),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=i.getCurrentUser(),c.queueCampaign=t,c.crudPermissions=s,c.penalty=0,c.items=[],c.allowedItems=[],c.selectedItems=[],c.addedItems=[],c.removedItems=[],c.pendingChanges=!1,c.dualMultiselectOptions={readOnly:!c.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?c.removedItems=_.unionBy(e,c.removedItems,"id"):(e.forEach(function(e){e.penalty="penalty "+c.penalty}),c.addedItems=_.unionBy(e,c.addedItems,"id")),c.pendingChanges=!0}},c.onInit=function(){return i.hasRole("admin")?o().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(function(n,t){d.userProfileSection.get({userProfileId:c.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 c.section=e,o()}).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()})})},c.saveTeams=function(){var e=c.removedItems,t=c.addedItems;return(n=e,l(function(e,t){_.isEmpty(n)?e():d.voiceQueue.removeTeams({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.addTeams({id:c.queueCampaign.id,ids:_.map(o,"id"),penalty:_.trim(s,"penalty ")}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}});var r}).then(function(){c.pendingChanges=!1,c.addedItems=[],c.removedItems=[],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},c.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",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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=1;e.$watch("vm.query.filter",function(e,t){E?n(function(){E=!1}):(t||(A=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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"];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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.voiceQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="QueueCampaigns",g.promise=l.userProfile.getResources(g.query,E).$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.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))},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 E(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";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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.openchannelQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="OpenchannelQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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:10,phoneBarAutoUpdater:!0,phoneBarAutoUpdaterUrl:"https://www.xcally.com/bar/phonebar/autoupdater.xml",splitSizeCsv:5e3,splitSizePdf:1e3,splitSizeXlsx:5e3,messagesAlignment:"alternate",phoneBarRememberMeEnabled:!0},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"}],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(){A(e)},function(){console.log("CANCEL")})},h.success=E,h.getNetworks=function(){h.query.offset=(h.query.page-1)*h.query.limit,u.hasRole("admin")?h.promise=d.network.get(h.query,E).$promise:(h.query.id=h.userProfile.id,h.query.section="Networks",h.promise=d.userProfile.getResources(h.query,E).$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=A,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){A(e)}),h.selectedNetworks=[]})},h.deselectNetworks=function(){h.selectedNetworks=[]},h.selectAllNetworks=function(){h.selectedNetworks=h.networks.rows};var f=!0,b=1;function E(e){h.networks=e||{count:0,rows:[]}}function A(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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.smsQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="SmsQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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:!o,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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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.startingAllowedItems=angular.copy(l.allowedItems),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,ids:_.map(n,"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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,phoneBarEnableVideoRecording",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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.currentUser=s.getCurrentUser(),o.errors=[],o.setting=i,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",o.agent=a,o.password="",o.oldPassword="",o.savePassword=function(){o.errors=[];var e={id:o.agent.id,newPassword:o.password};o.currentUser.id==o.agent.id&&(e.oldPassword=o.oldPassword);n.user.changePassword(e).$promise.then(function(){t.success({title:"Agent password properly updated!"}),r()}).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()}),o.errors=e.data.errors||[{message:e.toString(),type:"api.agent.changePassword"}]})},o.closeDialog=r}e.$inject=["$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.startingAllowedItems=angular.copy(l.allowedItems),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,ids:_.map(n,"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.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:!o,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.currentUser=s.getCurrentUser(),o.errors=[],o.setting=i,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",o.telephone=a,o.password="",o.oldPassword="",o.savePassword=function(){o.errors=[];var e={id:o.telephone.id,newPassword:o.password};o.currentUser.id==o.telephone.id&&(e.oldPassword=o.oldPassword);n.user.changePassword(e).$promise.then(function(){t.success({title:"Telephone password properly updated!"}),r()}).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()}),o.errors=e.data.errors||[{message:e.toString(),type:"api.telephone.changePassword"}]})},o.closeDialog=r}e.$inject=["$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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,s,o,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){o.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?o.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 o[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)switch(c.selectedSection.reportType){case"default":c.selectedSection.route="analyticDefaultReport";break;case"custom":c.selectedSection.route="analyticCustomReport"}if("Dashboards"!==c.selectedSection.title)return o[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 a=void 0!==c.selectedSection.pending&&c.selectedSection.pending,i=[];return u().then(function(e){return i=e&&e.rows?e.rows:[],"Reports"===c.selectedSection.title&&(c.associatedReports=c.associatedReports?c.associatedReports:i,i=function(e){var t=[];switch(c.selectedSection.reportType){case"default":t=_.filter(e,{type:"DefaultReports"});break;case"custom":t=_.filter(e,{type:"CustomReports"})}return t}(c.associatedReports)),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}):[],a||(c.selectedSection.selectedItems=_.map(i,function(e){return _.find(c.items,{id:e.resourceId})}));var t=_.differenceBy(c.selectedSection.selectedItems,c.items,"id");switch(_.isEmpty(t)||(c.selectedSection.selectedItems=_.pullAllBy(c.selectedSection.selectedItems,t,"id")),c.selectedSection.title){case"Contexts":c.selectedSection.selectedItems=_.filter(c.items,function(e){return e.defaultEntry?(e.isValid=!1,e):void 0!==_.find(i,{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(i,{resourceId:e.id})?(e.isValid=!0,e):void 0});break;case"Reports":var n=function(e){var t=[];switch(c.selectedSection.reportType){case"default":t=_.filter(e,function(e){return _.startsWith(e.parent,"motion")});break;case"custom":t=_.filter(e,function(e){return _.startsWith(e.parent,"custom")})}return t}(c.allReportsSelected);c.selectedSection.selectedItems=b(c.selectedSection.selectedItems),c.selectedSection.selectedItems=_.unionBy(c.selectedSection.selectedItems,n,"id")}c.dualMultiselectOptions.selectedItems=c.selectedSection.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.items,c.dualMultiselectOptions.selectedItems,"id")}).catch(function(e){s.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){var t=[];switch(c.selectedSection.reportType){case"default":t=_.remove(e,function(e){return _.startsWith(e.parent,"motion")});break;case"custom":t=_.remove(e,function(e){return _.startsWith(e.parent,"custom")})}return t}function E(){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){o.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){s.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){s.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=function(){var e={};switch(c.selectedSection.reportType){case"default":e=c.treeReports[0]?angular.fromJson(c.treeReports[0].tree):[];break;case"custom":e=c.treeReports[1]?angular.fromJson(c.treeReports[1].tree):[]}return e}(),c.selectedSection.selectedItems&&(c.allReportsSelected=b(c.allReportsSelected),E());g()},c.setPermission=function(e){switch(e){case"edit":c.selectedSection.allowEdit=!c.selectedSection.allowEdit;break;case"delete":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 o.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(),s.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){s.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&&E()}}}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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.currentUser=s.getCurrentUser(),o.errors=[],o.setting=i,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",o.user=a,o.password="",o.oldPassword="",o.savePassword=function(){o.errors=[];var e={id:o.user.id,newPassword:o.password};o.currentUser.id==o.user.id&&(e.oldPassword=o.oldPassword);n.user.changePassword(e).$promise.then(function(){t.success({title:"User password properly updated!"}),r()}).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()}),o.errors=e.data.errors||[{message:e.toString(),type:"api.user.changePassword"}]})},o.closeDialog=r}e.$inject=["$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",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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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.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:A,select_node:b}:{loaded:y,select_node:E}}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 E(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 A(){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);E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:E,select_node:f}:{loaded:A,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 E(){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 A(){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.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,data7,data3,data4,data5,data6",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'"}],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'"}],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:"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(){h(e)},function(){console.log("CANCEL")})},c.success=v,c.getTriggerAllConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAllConditions(c.query,v).$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=h,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){h(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()})});var p=!0,g=1;function v(e){c.triggerAllConditions=e||{count:0,rows:[]}}function h(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){p?a(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),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!":""}),b(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!":""}),b(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!"}),b(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=b,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;function b(e){a.hide(e)}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()})})}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:"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(){h(e)},function(){console.log("CANCEL")})},c.success=v,c.getTriggerAnyConditions=function(){c.query.offset=(c.query.page-1)*c.query.limit,c.promise=l.trigger.getAnyConditions(c.query,v).$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=h,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){h(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()})});var p=!0,g=1;function v(e){c.triggerAnyConditions=e||{count:0,rows:[]}}function h(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){p?a(function(){p=!1}):(t||(g=c.query.page),e!==t&&(c.query.page=1),e||(c.query.page=g),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!":""}),b(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!":""}),b(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!"}),b(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=b,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;function b(e){a.hide(e)}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()})})}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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=this;function o(e,t){if(E.outboundrouteApps.rows.length){var n=E.outboundrouteApps.rows[t]?E.outboundrouteApps.rows[t]:E.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:E.outboundroute,crudPermissions:E.crudPermissions}}).then(function(e){e&&(e.id?E.outboundrouteApps.rows[t]=e:E.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:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"CDR(destination)="+(E.outboundroute.cutdigits?"${EXTEN:"+E.outboundroute.cutdigits+"}":"${EXTEN}"),context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"CDR(routeid)="+E.outboundroute.id,context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id});var a=t++;n.push({type:"outbound",app:"ExecIf",appdata:"$[${LEN(${CDR(prefix)})} > 0]?Goto("+(a+2)+"):Goto("+(a+1)+")",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:a,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:E.outboundroute.cutdigits?"CDR(prefix)=${EXTEN:0:"+E.outboundroute.cutdigits+"}":"CDR(prefix)=noprefix",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-ANSWER=0",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"XCALLY-MOTION-PROGRESS=0",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"MONITOR_OPTIONS=ab",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"outboundrouteid="+E.outboundroute.id,context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),E.outboundroute.hasOwnProperty("recordingFormat")&&"none"!==E.outboundroute.recordingFormat&&(n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}),n.push({type:"outbound",app:"Set",appdata:"_XCALLY_MIXMONITOR_FORMAT="+E.outboundroute.recordingFormat||"wav",context:E.outboundroute.context,exten:E.outboundroute.exten,priority:t++,VoiceExtensionId:E.outboundroute.id}));for(var i=0,s=0;i<E.outboundrouteApps.rows.length;i++,s=0){var o=E.outboundrouteApps.rows[i],r=[],l=[];o.intervals="*,*,*,*"!==o.interval?[o.interval]:o.IntervalId?_.map(_.filter(E.intervals.rows,{IntervalId:o.IntervalId}),"interval"):[],o.context=E.outboundroute.context,o.exten=E.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:E.outboundroute.context,exten:E.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:E.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:E.outboundroute.context,exten:E.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:E.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:E.outboundroute.context,exten:E.outboundroute.exten,priority:o.intervals.length+t+s++,VoiceExtensionId:E.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]+"?"+E.outboundroute.context+",${EXTEN},"+c+":"+E.outboundroute.context+",${EXTEN},"+m,exten:E.outboundroute.exten,context:E.outboundroute.context,priority:t+d,VoiceExtensionId:E.outboundroute.id})}if(e&&"outboundDial"===o.appType){var u=_.find(E.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=E.outboundroute.cutdigits?(p.prefix||"")+"${EXTEN:"+E.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"!==E.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:E.outboundroute.exten,context:E.outboundroute.context,priority:t,VoiceExtensionId:E.outboundroute.id}),b.voiceExtension.addApplications({id:E.outboundroute.id},_.sortBy(n,"priority")).$promise.then(function(e){E.outboundrouteApps.rows=e.rows}).catch(function(e){console.error(e)})}function l(e){E.outboundrouteApps=e||{count:0,rows:[]}}E.currentUser=t.getCurrentUser(),E.outboundroute={},E.outboundrouteApps={count:0,rows:[]},E.selectedOutboundRouteApps=[],E.crudPermissions,E.query={sort:"priority"},E.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}),E.list={group:{name:"opt1",pull:"clone"},animation:100,sort:!1},E.applications={group:{name:"opt2",put:"opt1"},animation:100,onAdd:function(e){o(e,e.newIndex)},onSort:function(e){r()}},E.init=function(e,t){E.outboundroute=e,E.crudPermissions=void 0!==t?t:{readOnly:!0,canEdit:!1,canDelete:!1},E.applications.disabled=!E.crudPermissions.canEdit,n.on("voiceExtension:update",E.onVoiceExtensionUpdate),E.query.VoiceExtensionId=e.id,E.query.isApp=!0,E.query.nolimit=!0,E.getOutboundRouteApps(),E.getIntervals()},E.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(){E.outboundrouteApps.rows.splice(t,1),r()},function(){console.log("CANCEL")})},E.getOutboundRouteApps=function(){E.promise=b.voiceExtension.get(E.query,l).$promise},E.editOutboundRouteApp=o,E.editInterval=function(e,t){if(E.outboundrouteApps.rows.length){var n=E.outboundrouteApps.rows[t]?E.outboundrouteApps.rows[t]:E.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:E.crudPermissions}}).then(function(e){e&&(n.interval=e.interval||"*,*,*,*",n.IntervalId=e.IntervalId||null,r())})}},E.deleteOutboundRouteApp=function(e){_.remove(E.outboundrouteApps.rows,{id:e.id}),r(),s.success({title:"App deleted!",msg:e.app?e.app+" has been deleted!":""})},E.deleteSelectedOutboundRouteApps=function(e){var t=i.confirm().title("Are you sure want to delete the selected applications?").htmlContent("<b>"+E.selectedOutboundRouteApps.length+" selected</b> will be deleted.").ariaLabel("delete applications").targetEvent(e).ok("OK").cancel("CANCEL");i.show(t).then(function(){E.selectedOutboundRouteApps.forEach(function(e){_.remove(E.outboundrouteApps.rows,{id:e.id})}),E.selectedOutboundRouteApps=[],r()})},E.rewriteRouting=r,E.getIntervals=function(){return b.interval.get({fields:"id,interval,IntervalId"}).$promise.then(function(e){E.intervals=e}).catch(function(e){console.error(e)})},E.onVoiceExtensionUpdate=function(e){e.VoiceExtensionId===E.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 E(){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 A(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=E(),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!":""}),A()}).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=E(),c.interval.application?("list"!==c.type&&(c.interval.IntervalId=null),A(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!"}),A()}).catch(function(e){console.error(e),c.errors=e.data.errors||[{message:e.toString(),type:"api.interval.update"}]})},c.closeDialog=A,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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 E=!0,A=1;e.$watch("vm.query.filter",function(e,t){E?n(function(){E=!1}):(t||(A=v.query.page),e!==t&&(v.query.page=1),e||(v.query.page=A),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,E=["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","onhold"],A=["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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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,E)),b.rpcAgents[t.id]&&_.merge(b.rpcAgents[t.id],_.pick(e,E)),O(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=w,b.getAgentGlobalStatus=O,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,A),E)),_.merge(b.rpcAgents[e.id],_.pick(_.omit(e,A),E)),O(b.agents[e.id]))},b.onUpdate=function(e){b.agents[e.id]&&(_.merge(b.agents[e.id],_.pick(e,E)),_.merge(b.rpcAgents[e.id],_.pick(e,E)),e.lastPauseAt&&(b.agents[e.id].globalStatusTime=e.lastPauseAt,b.rpcAgents[e.id].globalStatusTime=e.lastPauseAt),O(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"]))},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],A),E)),O(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 w(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 O(e){var t="unknown";t=_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"pause":_.some([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(e,"fax")],I)?"*pause":_.every([w(e,"voice"),w(e,"chat"),w(e,"mail"),w(e,"openchannel"),w(e,"sms"),w(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=E,g.getQueues=function(){g.query.offset=(g.query.page-1)*g.query.limit,p.hasRole("admin")?g.promise=l.voiceQueue.get(g.query,E).$promise:(g.query.id=g.userProfile.id,g.query.section="VoiceQueues",g.promise=l.userProfile.getResources(g.query,E).$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 E(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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!o,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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:!i,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,l,a,d,t,n,i,s){var c=this;function o(){return l(function(n,t){return l(function(t,n){return d.team.get({fields:"id,name",nolimit:!0}).$promise.then(function(e){t(e)}).catch(function(e){n(e)})}).then(function(e){return c.items=e.rows?e.rows:[],i.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:i.hasRole("admin")||c.section.autoAssociation?e.id:e.resourceId})}),c.items.forEach(function(e){var t=_.find(c.allowedItems,{id:e.id});i.hasRole("admin")?e.isValid=!0:e.isValid=void 0!==t}),l(function(t,n){return d.voiceQueue.getTeams({id:c.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:[];c.selectedItems=_.map(t,function(e){return _.find(c.items,{id:e.id})}),c.dualMultiselectOptions.selectedItems=c.selectedItems,c.dualMultiselectOptions.items=_.differenceBy(c.allowedItems,c.dualMultiselectOptions.selectedItems,"id"),n()}).catch(function(e){t(e)})})}c.currentUser=i.getCurrentUser(),c.voiceQueue=t,c.crudPermissions=s,c.penalty=0,c.items=[],c.allowedItems=[],c.selectedItems=[],c.addedItems=[],c.removedItems=[],c.pendingChanges=!1,c.dualMultiselectOptions={readOnly:!c.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?c.removedItems=_.unionBy(e,c.removedItems,"id"):(e.forEach(function(e){e.penalty="penalty "+c.penalty}),c.addedItems=_.unionBy(e,c.addedItems,"id")),c.pendingChanges=!0}},c.onInit=function(){return i.hasRole("admin")?o().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(function(n,t){d.userProfileSection.get({userProfileId:c.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 c.section=e,o()}).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()})})},c.saveTeams=function(){var e=c.removedItems,t=c.addedItems;return(n=e,l(function(e,t){_.isEmpty(n)?e():d.voiceQueue.removeTeams({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.addTeams({id:c.voiceQueue.id,ids:_.map(o,"id"),penalty:_.trim(s,"penalty ")}).$promise)}l.all(n).then(function(){e()}).catch(function(e){t(e)})}});var r}).then(function(){c.pendingChanges=!1,c.addedItems=[],c.removedItems=[],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},c.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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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,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.voiceRecordings=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="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(s,e){return m.voiceRecording.download({id:s.id}).$promise.then(function(e){var t=[e.buffer],n="download",a=new Blob(t,{type:e.type});n=s.uniqueid+s.format;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.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(){if(b.pickerModel.dateStart){var e=moment(b.pickerModel.dateEnd).add(23,"hours").add(59,"minutes").add(59,"seconds").format();b.query.createdAt={$gte:b.pickerModel.dateStart,$lte:e}}else 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 E=!0,A=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){E?o(function(){E=!1}):(t||(A=b.query.page),e!==t&&(b.query.page=1),e||(b.query.page=A),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:11,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",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.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(e,t,n,a,i,s){var o=this;function r(){e.hide()}o.errors=[],o.user=a,o.setting=i,o.reset=s,o.passwordPattern=o.setting.securePassword?/(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])(?=.*[?!@#\$%\^&\*~\-_=+[{\]\}])(?=.{8,})/:"",o.savePassword=function(){o.errors=[],n.user.changePassword({id:o.user.id},{oldPassword:o.oldPassword,newPassword:o.password}).$promise.then(function(){t.show(t.simple().textContent("Your password properly updated").position("top right").hideDelay(5e3)),r()}).catch(function(e){console.error(e),o.errors=e.data.errors&&e.data.errors.length?e.data.errors:[{message:e.data.message||"Authorization error",type:"api.user.changePassword"}]})},o.closeDialog=r}e.$inject=["$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,E,A){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=A(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=E,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 w(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 O(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:E,reset:t}})}S.toggleSidenav=function(e){i(e).toggle()},S.logout=w,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=O,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){w(!0)}).finally(function(){_.merge(S.user,e),v.updateCurrentUser(S.user)})}else w(!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)?O(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 O(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&&(A.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)/(E=a*a))?(n*=Math.sqrt(v),a*=Math.sqrt(v),0):(v=1,s===o&&(v=-1),v*Math.sqrt((g*E-g*p-E*c)/(g*p+E*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=E=0,h=[],f=0;f<o;++f){s+=i;var b,E=c*(u=Math.cos(s))-a*(b=Math.sin(s))+r,A=(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(E-A+e),h[b+3]=Number(v-u+t),h[b+4]=Number(E+e),h[b+5]=Number(v+t),p=E+A,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 E=this.states[b];null!=E&&(this.horizontal&&(e.call(this,E.getCenterX()),e.call(this,E.x),e.call(this,E.x+E.width)),this.vertical&&(f.call(this,E.getCenterY()),f.call(this,E.y),f.call(this,E.y+E.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,E){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!=E?E: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),E=(m=[],u=[],0);E<f.length;E++)m[E]=f[E].getGeneralPurposeVariable(s+1);for(E=0;E<b.length;E++)u[E]=b[E].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=[],E=0;E<d.length;E++)p[E]=d[E].getGeneralPurposeVariable(s+1);for(E=0;E<c.length;E++)g[E]=c[E].getGeneralPurposeVariable(s-1);var A=0,y=0;for(E=0;E<m.length;E++)for(var S=0;S<p.length;S++)m[E]>p[S]&&A++,m[E]<p[S]&&y++;for(E=0;E<u.length;E++)for(S=0;S<g.length;S++)u[E]>g[S]&&A++,u[E]<g[S]&&y++;(y<A||y==A&&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 E=f;f=b,b=E}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,E=g*m+f+1;(n=this.renderPage(this.pageFormat.width,this.pageFormat.height,mxUtils.bind(this,function(e){this.addGraphFragment(-b,-h,this.scale,E,e)}))).setAttribute("id","mxPage-"+E),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};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}()),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 E=i.createDiv("p");E.className="help-block",mxUtils.write(E,mxResources.get("help_"+p)),b.appendChild(E)}h.appendChild(b),c.appendChild(h)}n.appendChild(c);var A=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()}));A.className="btn blue";var y=mxUtils.button(mxResources.get("cancel"),function(){i.hideDialog()});y.className="btn default",a.appendChild(A),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-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">\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="icon-google-plus" 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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(extractedReport, $event)" translate="ANALYTICS.EDIT_EXTRACTEDREPORT">\n                                                    Edit ExtractedReport\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.downloadfile2(extractedReport, $event)" translate="ANALYTICS.DOWNLOAD_EXTRACTEDREPORT">\n                                                    Download ExtractedReport\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(extractedReport, $event)" translate="ANALYTICS.DELETE_EXTRACTEDREPORT">\n                                                    Delete ExtractedReport\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.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                                <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="ANALYTICS.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.editdialog(metric, $event)" translate="ANALYTICS.EDIT_METRIC">\n                                                    Edit Metric\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(metric, $event)" translate="ANALYTICS.DELETE_METRIC">\n                                                    Delete Metric\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.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                                <td md-cell class="actions">\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.editdialog(odbc, $event)" translate="CALLYSQUARE.EDIT_ODBC">\n                                                    Edit Odbc\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestOdbc(odbc, $event)" translate="CALLYSQUARE.TEST_ODBC">\n                                                    Test Odbc\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(odbc, $event)" translate="CALLYSQUARE.DELETE_ODBC">\n                                                    Delete Odbc\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.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                                <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                                <td md-cell class="actions">\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>\n                                                <md-button ng-click="vm.downloadfile2(squareRecording, $event)" translate="CALLYSQUARE.DOWNLOAD_SQUARERECORDING">\n                                                    Download SquareRecording\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(squareRecording, $event)" translate="CALLYSQUARE.DELETE_SQUARERECORDING">\n                                                    Delete SquareRecording\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(chatQueue, $event)" translate="CHAT.EDIT_CHATQUEUE">\n                                                    Edit ChatQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(chatQueue, $event)" translate="CHAT.TEAMADD_CHATQUEUE">\n                                                    teamadd ChatQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(chatQueue, $event)" translate="CHAT.AGENTADD_CHATQUEUE">\n                                                    agentadd ChatQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(chatQueue, $event)" translate="CHAT.DELETE_CHATQUEUE">\n                                                    Delete ChatQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(chatQueue, $event)" translate="CHAT.GOTOREALTIME_CHATQUEUE">\n                                                    goToRealtime ChatQueue\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(chatWebsite, $event)" translate="CHAT.EDIT_CHATWEBSITE">\n                                                    Edit ChatWebsite\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(chatWebsite, $event)" translate="CHAT.INTERACTIONS_CHATWEBSITE">\n                                                    Interactions ChatWebsite\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.offlinemessagesgoto(chatWebsite, $event)" translate="CHAT.OFFLINEMESSAGES_CHATWEBSITE">\n                                                    OfflineMessages ChatWebsite\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(chatWebsite, $event)" translate="CHAT.AGENTADD_CHATWEBSITE">\n                                                    AgentAdd ChatWebsite\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(chatWebsite, $event)" translate="CHAT.DELETE_CHATWEBSITE">\n                                                    Delete ChatWebsite\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.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                            </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                            </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                            </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                            </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            </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                    </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                    </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                        <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                    </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                    </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                    </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                    </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                    </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                    </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                    </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                    </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                    </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                    </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="4">{{ \'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" 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">\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                            <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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(company, $event)" translate="CONTACTMANAGER.EDIT_COMPANY">\n                                                    Edit Company\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotocontactsgoto(company, $event)" translate="CONTACTMANAGER.GOTOCONTACTS_COMPANY">\n                                                    goToContacts Company\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(company, $event)" translate="CONTACTMANAGER.DELETE_COMPANY">\n                                                    Delete Company\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.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">\n                                    <md-optgroup label="Lists">\n                                        <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                                    </md-optgroup>\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 companie" flex="100" ng-model="vm.selectedCompany">\n                                    <md-optgroup label="Companies">\n                                        <md-option ng-value="null"><em translate="CONTACTMANAGER.NONE">None</em></md-option>\n                                        <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows">{{company.name}}</md-option>\n                                    </md-optgroup>\n                                </md-select>\n                            </md-input-container>\n\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 placeholder="Select one or more tags" flex="100" ng-model="vm.query.tag" ng-change="vm.getContacts()" multiple>\n                                    <md-optgroup label="Tags">\n                                        <md-option ng-value="tag.id" ng-repeat="tag in vm.tags.rows">{{tag.name}}</md-option>\n                                    </md-optgroup>\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-optgroup label="Companies">\n                        <md-option ng-value="company.id" ng-repeat="company in vm.companies.rows">{{company.name}}</md-option>\n                    </md-optgroup>\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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(globalCustomField, $event)" translate="CONTACTMANAGER.EDIT_GLOBALCUSTOMFIELD">\n                                                    Edit GlobalCustomField\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(globalCustomField, $event)" translate="CONTACTMANAGER.DELETE_GLOBALCUSTOMFIELD">\n                                                    Delete GlobalCustomField\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.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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(list, $event)" translate="CONTACTMANAGER.EDIT_LIST">\n                                                    Edit List\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotocontactsgoto(list, $event)" translate="CONTACTMANAGER.GOTOCONTACTS_LIST">\n                                                    goToContacts List\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.exportcsvcontactsexport(list, $event)" translate="CONTACTMANAGER.EXPORTCSVCONTACTS_LIST">\n                                                    exportCsvContacts List\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(list, $event)" translate="CONTACTMANAGER.AGENTADD_LIST">\n                                                    AgentAdd List\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(list, $event)" translate="CONTACTMANAGER.DELETE_LIST">\n                                                    Delete List\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.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)"></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()">\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\'" class="md-padding">\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\'" class="md-padding">\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">\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.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_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">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="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">\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.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_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">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="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></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 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\'"></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\'"></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\'"></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\'"></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\'"></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\'"></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)"></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\'"></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)"></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\'"></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)"></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\'"></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)"></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\'"></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)"></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\'"></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\'"></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\'"></div>\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" ng-class="vm.getColorByChannel(\'chat\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getChatInteractions()">\n                    <md-option ng-value="chatAccount.id" ng-repeat="chatAccount in vm.chatAccounts.rows">{{chatAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getChatInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getChatInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.WEBSITE\' | 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.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.unread}">\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 ng-click="vm.showChatInteraction($event, chatInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!chatInteraction.closed && chatInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'chat\')" layout-margin>{{chatInteraction.unread}}</span>\n                                <md-icon ng-if="chatInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(chatInteraction)}}</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 </div> <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" style="width:120px">{{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 ng-if="chatInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': chatInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{chatInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="chatInteraction.Tags.length > 1" 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"></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="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>\n    <md-toolbar class="md-table-toolbar md-default table-header red-bg">\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.query.filter = undefined" debounce="300"></ms-search-bar>\n            <div flex></div>\n            <div layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_LIST">Select a list</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.ListId" ng-change="vm.getContacts()">\n                    <md-option ng-value="vm.defaultLists" ng-if="vm.lists.count > 1"><em translate="CONTACTMANAGER.ALL_CONTACTS">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            </div>\n            <div layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_TAG">Select a tag</span>\n                <md-select id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getContacts()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <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="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="Voice">\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="Bull">\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="Chat">\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="Email">\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="Sms">\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="Open Channel">\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="Fax">\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" ng-class="vm.getColorByChannel(\'fax\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getFaxInteractions()">\n                    <md-option ng-value="faxAccount.id" ng-repeat="faxAccount in vm.faxAccounts.rows">{{faxAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getFaxInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getFaxInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | 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.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.unread}">\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 ng-click="vm.showFaxInteraction($event, faxInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!faxInteraction.closed && faxInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'fax\')" layout-margin>{{faxInteraction.unread}}</span>\n                                <md-icon ng-if="faxInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(faxInteraction)}}</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 </div> <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" style="width:120px">{{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 ng-if="faxInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': faxInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{faxInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="faxInteraction.Tags.length > 1" 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"></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="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" ng-class="vm.getColorByChannel(\'mail\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getMailInteractions()">\n                    <md-option ng-value="mailAccount.id" ng-repeat="mailAccount in vm.mailAccounts.rows">{{mailAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getMailInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getMailInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'DASHBOARDS.CONTACT\' | translate}}</th>\n                    <th md-column md-order-by="subject" style="width:200px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | 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.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.unread}">\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 ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!mailInteraction.closed && mailInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'mail\')" layout-margin>{{mailInteraction.unread}}</span>\n                                <md-icon ng-if="mailInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(mailInteraction)}}</span>\n                        </div>\n                    </td>\n                    <td ng-click="vm.showMailInteraction($event, mailInteraction)" md-cell>\n                        <div ng-if="vm.setting.enableEmailPreview && mailInteraction.lastMsgBody" class="tooltip-preview">\n                            <span class="text-truncate font-size-12" style="width:200px">{{mailInteraction.subject}}</span>\n                            <md-card class="tooltip-preview-text" ng-style="{top: \'-\' + ((($index % 10) + 1) * 18) + \'px\'}">\n                                <md-card-content>{{mailInteraction.lastMsgBody}}<br>...</md-card-content>\n                            </md-card>\n                        </div>\n                        <span ng-if="!mailInteraction.lastMsgBody || !vm.setting.enableEmailPreview" class="text-truncate font-size-12" style="width:200px">{{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 </div> <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" style="width:120px">{{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 ng-if="mailInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': mailInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{mailInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="mailInteraction.Tags.length > 1" 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"></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="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">\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.query.filter = undefined" debounce="300"></ms-search-bar>\n            <div flex></div>\n            <div layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_LIST">Select a list</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.ListId" ng-change="vm.getContacts()">\n                    <md-option ng-value="list.id" ng-repeat="list in vm.lists.rows">{{list.name}}</md-option>\n                    <md-option ng-value="vm.defaultLists" ng-if="vm.lists.count > 1"><em translate="CONTACTMANAGER.ALL_CONTACTS">All</em></md-option>\n                </md-select>\n            </div>\n            <div layout="column">\n                <span class="font-size-10" translate="CONTACTMANAGER.SELECT_TAG">Select a tag</span>\n                <md-select id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getContacts()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <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="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" ng-class="vm.getColorByChannel(\'openchannel\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getOpenchannelInteractions()">\n                    <md-option ng-value="openchannelAccount.id" ng-repeat="openchannelAccount in vm.openchannelAccounts.rows">{{openchannelAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getOpenchannelInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getOpenchannelInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | 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.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.unread}">\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 ng-click="vm.showOpenchannelInteraction($event, openchannelInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!openchannelInteraction.closed && openchannelInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'openchannel\')" layout-margin>{{openchannelInteraction.unread}}</span>\n                                <md-icon ng-if="openchannelInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(openchannelInteraction)}}</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 </div> <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" style="width:120px">{{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 ng-if="openchannelInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': openchannelInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{openchannelInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="openchannelInteraction.Tags.length > 1" 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"></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="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">\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.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="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()">\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            \x3c!-- <ms-search-bar on-search="vm.query.filter = query" on-collapse="vm.query.filter = undefined" debounce="300"></ms-search-bar> --\x3e\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" ng-class="vm.getColorByChannel(\'sms\')">\n        <div class="md-toolbar-tools">\n            <span class="md-subhead" translate="DASHBOARDS.INTERACTIONS">Interactions</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 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()">\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()">\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 class="font-size-12 no-margin" ng-model="vm.query.account" ng-change="vm.getSmsInteractions()">\n                    <md-option ng-value="smsAccount.id" ng-repeat="smsAccount in vm.smsAccounts.rows">{{smsAccount.name}}</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_AGENT">Select an agent</span>\n                <md-select class="font-size-12 no-margin" ng-model="vm.query.UserId" ng-change="vm.getSmsInteractions()">\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 id="tags" placeholder="Tags" multiple="true" class="font-size-12 no-margin" ng-model="vm.query.tag" ng-change="vm.getSmsInteractions()" style="color:white;">\n                    <md-option ng-repeat="tag in vm.tags.rows" ng-value="tag.id">{{tag.name}}</md-option>\n                </md-select>\n            </div>\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    <md-table-container>\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 md-column md-order-by="id">ID</th>\n                    <th md-column style="width:15px">\n                        <md-icon md-font-icon="icon-eye" class="s16"></md-icon>\n                    </th>\n                    <th md-column style="width:180px">{{\'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 style="width:80px">{{\'DASHBOARDS.AGENT\' | translate}}</th>\n                    <th md-column>{{\'DASHBOARDS.ACCOUNT\' | 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.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.unread}">\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 ng-click="vm.showSmsInteraction($event, smsInteraction)" md-cell>\n                        <div layout="row" layout-align="start center">\n                            <div layout="column">\n                                <span ng-if="!smsInteraction.closed && smsInteraction.unread" class="badge white-fg" ng-class="vm.getColorByChannel(\'sms\')" layout-margin>{{smsInteraction.unread}}</span>\n                                <md-icon ng-if="smsInteraction.attach" md-font-icon="icon-paperclip" class="s16"></md-icon>\n                            </div>\n                            <span class="font-size-12 text-truncate" style="width:180px" layout-margin>{{vm.getContactLabel(smsInteraction)}}</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 </div> <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" style="width:120px">{{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 ng-if="smsInteraction.Tags.length == 1" layout="column" layout-align="center center">\n                                <md-icon md-font-icon="icon-tag" ng-style="{\'color\': smsInteraction.Tags[0].color }"></md-icon>\n                                <span class="text-truncate">{{smsInteraction.Tags[0].name}}</span>\n                            </div>\n                            <div ng-if="smsInteraction.Tags.length > 1" 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"></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="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">\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.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="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">ID</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 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"></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 }} - {{ 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()">\n                    <md-icon md-font-icon="icon-close" aria-label="Close dialog"></md-icon>\n                </md-button>\n            </div>\n        </md-toolbar>\n\n        <md-dialog-content ms-scroll>\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-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                    \x3c!-- <md-select ng-disabled="vm.interaction.closed && vm.interaction.disposition" name="disposition" ng-model="vm.interaction.disposition" required> --\x3e\n                    <md-option ng-value="null">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                \x3c!-- <textarea ng-disabled="vm.interaction.closed && vm.interaction.disposition" ng-model="vm.interaction.note" md-maxlength="255" max-rows="5" autofocus></textarea> --\x3e\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        \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.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 && !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" aria-label="DISPOSE" translate="DASHBOARDS.DISPOSE" translate-attr-aria-label="DASHBOARDS.DISPOSE">\n                    DISPOSE\n                </md-button>\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></md-tooltip>\n                        <div layout="row" layout-align="start center">\n                            <md-icon md-font-icon="icon-paperclip" class="icon s24"></md-icon><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)">{{ 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]">[{{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)"><strong>{{message.from}}</strong>\n                                        <md-icon ng-if="message.attach" md-font-icon="icon-paperclip" class="s16"></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></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"><em><span class="blue-grey" translate="MAIL.YOU_ARE_REGISTERED_AS_A">You are 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"><em><span class="red-fg" translate="MAIL.YOU_ARE_REGISTERED_AS_A">You are 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                            <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></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></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></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></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><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)">{{ 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",'<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                            </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                            </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                            </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                            </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                            </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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(faxAccount, $event)" translate="FAX.EDIT_FAXACCOUNT">\n                                                    Edit FaxAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(faxAccount, $event)" translate="FAX.INTERACTIONS_FAXACCOUNT">\n                                                    Interactions FaxAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(faxAccount, $event)" translate="FAX.GOTOREALTIME_FAXACCOUNT">\n                                                    goToRealtime FaxAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(faxAccount, $event)" translate="FAX.AGENTADD_FAXACCOUNT">\n                                                    AgentAdd FaxAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(faxAccount, $event)" translate="FAX.DELETE_FAXACCOUNT">\n                                                    Delete FaxAccount\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(faxQueue, $event)" translate="FAX.EDIT_FAXQUEUE">\n                                                    Edit FaxQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(faxQueue, $event)" translate="FAX.TEAMADD_FAXQUEUE">\n                                                    teamadd FaxQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(faxQueue, $event)" translate="FAX.AGENTADD_FAXQUEUE">\n                                                    agentadd FaxQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(faxQueue, $event)" translate="FAX.DELETE_FAXQUEUE">\n                                                    Delete FaxQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(faxQueue, $event)" translate="FAX.GOTOREALTIME_FAXQUEUE">\n                                                    goToRealtime FaxQueue\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.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="4">{{ \'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" 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">\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                            <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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(deskAccount, $event)" translate="INTEGRATIONS.EDIT_DESKACCOUNT">\n                                                    Edit DeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(deskAccount, $event)" translate="INTEGRATIONS.TEST_DESKACCOUNT">\n                                                    Test DeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(deskAccount, $event)" translate="INTEGRATIONS.DELETE_DESKACCOUNT">\n                                                    Delete DeskAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(dynamics365Account, $event)" translate="INTEGRATIONS.EDIT_DYNAMICS365ACCOUNT">\n                                                    Edit Dynamics365Account\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(dynamics365Account, $event)" translate="INTEGRATIONS.TEST_DYNAMICS365ACCOUNT">\n                                                    Test Dynamics365Account\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(dynamics365Account, $event)" translate="INTEGRATIONS.DELETE_DYNAMICS365ACCOUNT">\n                                                    Delete Dynamics365Account\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(freshdeskAccount, $event)" translate="INTEGRATIONS.EDIT_FRESHDESKACCOUNT">\n                                                    Edit FreshdeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(freshdeskAccount, $event)" translate="INTEGRATIONS.TEST_FRESHDESKACCOUNT">\n                                                    Test FreshdeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(freshdeskAccount, $event)" translate="INTEGRATIONS.DELETE_FRESHDESKACCOUNT">\n                                                    Delete FreshdeskAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(salesforceAccount, $event)" translate="INTEGRATIONS.EDIT_SALESFORCEACCOUNT">\n                                                    Edit SalesforceAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(salesforceAccount, $event)" translate="INTEGRATIONS.TEST_SALESFORCEACCOUNT">\n                                                    Test SalesforceAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(salesforceAccount, $event)" translate="INTEGRATIONS.DELETE_SALESFORCEACCOUNT">\n                                                    Delete SalesforceAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(servicenowAccount, $event)" translate="INTEGRATIONS.EDIT_SERVICENOWACCOUNT">\n                                                    Edit ServicenowAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(servicenowAccount, $event)" translate="INTEGRATIONS.TEST_SERVICENOWACCOUNT">\n                                                    Test ServicenowAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(servicenowAccount, $event)" translate="INTEGRATIONS.DELETE_SERVICENOWACCOUNT">\n                                                    Delete ServicenowAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(sugarcrmAccount, $event)" translate="INTEGRATIONS.EDIT_SUGARCRMACCOUNT">\n                                                    Edit SugarcrmAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(sugarcrmAccount, $event)" translate="INTEGRATIONS.TEST_SUGARCRMACCOUNT">\n                                                    Test SugarcrmAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(sugarcrmAccount, $event)" translate="INTEGRATIONS.DELETE_SUGARCRMACCOUNT">\n                                                    Delete SugarcrmAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(vtigerAccount, $event)" translate="INTEGRATIONS.EDIT_VTIGERACCOUNT">\n                                                    Edit VtigerAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(vtigerAccount, $event)" translate="INTEGRATIONS.TEST_VTIGERACCOUNT">\n                                                    Test VtigerAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(vtigerAccount, $event)" translate="INTEGRATIONS.DELETE_VTIGERACCOUNT">\n                                                    Delete VtigerAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(zendeskAccount, $event)" translate="INTEGRATIONS.EDIT_ZENDESKACCOUNT">\n                                                    Edit ZendeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(zendeskAccount, $event)" translate="INTEGRATIONS.TEST_ZENDESKACCOUNT">\n                                                    Test ZendeskAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(zendeskAccount, $event)" translate="INTEGRATIONS.DELETE_ZENDESKACCOUNT">\n                                                    Delete ZendeskAccount\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(zohoAccount, $event)" translate="INTEGRATIONS.EDIT_ZOHOACCOUNT">\n                                                    Edit ZohoAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.testtestintegrationaccount(zohoAccount, $event)" translate="INTEGRATIONS.TEST_ZOHOACCOUNT">\n                                                    Test ZohoAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(zohoAccount, $event)" translate="INTEGRATIONS.DELETE_ZOHOACCOUNT">\n                                                    Delete ZohoAccount\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: \'{{\'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                                <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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(project, $event)" translate="JSCRIPTY.EDIT_PROJECT">\n                                                    Edit Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(project, $event)" translate="JSCRIPTY.CLONE_PROJECT">\n                                                    clone Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.sessionsgoto(project, $event)" translate="JSCRIPTY.SESSIONS_PROJECT">\n                                                    Sessions Project\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(project, $event)" translate="JSCRIPTY.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: \'{{\'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            </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            </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                            </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                                <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                            </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                            </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                            </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                            </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                            </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                            </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                                <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                            </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                            </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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(mailAccount, $event)" translate="MAIL.EDIT_MAILACCOUNT">\n                                                    Edit MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.verifysmtpverifysmtp(mailAccount, $event)" translate="MAIL.VERIFYSMTP_MAILACCOUNT">\n                                                    verifysmtp MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(mailAccount, $event)" translate="MAIL.INTERACTIONS_MAILACCOUNT">\n                                                    Interactions MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(mailAccount, $event)" translate="MAIL.GOTOREALTIME_MAILACCOUNT">\n                                                    goToRealtime MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(mailAccount, $event)" translate="MAIL.AGENTADD_MAILACCOUNT">\n                                                    AgentAdd MailAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(mailAccount, $event)" translate="MAIL.DELETE_MAILACCOUNT">\n                                                    Delete MailAccount\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(mailQueue, $event)" translate="MAIL.EDIT_MAILQUEUE">\n                                                    Edit MailQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(mailQueue, $event)" translate="MAIL.TEAMADD_MAILQUEUE">\n                                                    teamadd MailQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(mailQueue, $event)" translate="MAIL.AGENTADD_MAILQUEUE">\n                                                    agentadd MailQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(mailQueue, $event)" translate="MAIL.DELETE_MAILQUEUE">\n                                                    Delete MailQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(mailQueue, $event)" translate="MAIL.GOTOREALTIME_MAILQUEUE">\n                                                    goToRealtime MailQueue\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.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                                <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="MAIL.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.editdialog(mailSubstatus, $event)" translate="MAIL.EDIT_MAILSUBSTATUS">\n                                                    Edit MailSubstatus\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(mailSubstatus, $event)" translate="MAIL.DELETE_MAILSUBSTATUS">\n                                                    Delete MailSubstatus\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.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="4">{{ \'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" 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">\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                            <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            </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                            </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                                <td md-cell class="actions">\n                                    <md-menu>\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && !plugin.active">\n                                                <md-button ng-click="vm.installplugin(plugin, $event)" translate="MARKETPLACE.INSTALL_PLUGIN">\n                                                    Install Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(plugin, $event)" translate="MARKETPLACE.EDIT_PLUGIN">\n                                                    Edit Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active && plugin.type == \'script\'">\n                                                <md-button ng-click="vm.stopplugin(plugin, $event)" translate="MARKETPLACE.STOP_PLUGIN">\n                                                    Stop Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active && plugin.type == \'script\'">\n                                                <md-button ng-click="vm.restartplugin(plugin, $event)" translate="MARKETPLACE.RESTART_PLUGIN">\n                                                    Restart Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.downloadfile2(plugin, $event)" translate="MARKETPLACE.DOWNLOAD_PLUGIN">\n                                                    Download Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit && plugin.active">\n                                                <md-button ng-click="vm.uninstallplugin(plugin, $event)" translate="MARKETPLACE.UNINSTALL_PLUGIN">\n                                                    Uninstall Plugin\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(plugin, $event)" translate="MARKETPLACE.DELETE_PLUGIN">\n                                                    Delete Plugin\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: \'{{\'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            </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                            </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                <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})[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})[0].name }}</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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(ivrCampaign, $event)" translate="MOTIONDIALER.EDIT_IVRCAMPAIGN">\n                                                    Edit IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(ivrCampaign, $event)" translate="MOTIONDIALER.CLONE_IVRCAMPAIGN">\n                                                    clone IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.listadddialog(ivrCampaign, $event)" translate="MOTIONDIALER.LISTADD_IVRCAMPAIGN">\n                                                    listadd IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.blacklistadddialog(ivrCampaign, $event)" translate="MOTIONDIALER.BLACKLISTADD_IVRCAMPAIGN">\n                                                    blacklistadd IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(ivrCampaign, $event)" translate="MOTIONDIALER.DELETE_IVRCAMPAIGN">\n                                                    Delete IvrCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(ivrCampaign, $event)" translate="MOTIONDIALER.GOTOREALTIME_IVRCAMPAIGN">\n                                                    goToRealtime IvrCampaign\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.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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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            </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) || (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                            </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                                <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                                <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                            </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                                <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                            </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 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                                <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                <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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(queueCampaign, $event)" translate="MOTIONDIALER.EDIT_QUEUECAMPAIGN">\n                                                    Edit QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(queueCampaign, $event)" translate="MOTIONDIALER.CLONE_QUEUECAMPAIGN">\n                                                    clone QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.listadddialog(queueCampaign, $event)" translate="MOTIONDIALER.LISTADD_QUEUECAMPAIGN">\n                                                    listadd QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.blacklistadddialog(queueCampaign, $event)" translate="MOTIONDIALER.BLACKLISTADD_QUEUECAMPAIGN">\n                                                    blacklistadd QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(queueCampaign, $event)" translate="MOTIONDIALER.TEAMADD_QUEUECAMPAIGN">\n                                                    teamadd QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(queueCampaign, $event)" translate="MOTIONDIALER.AGENTADD_QUEUECAMPAIGN">\n                                                    agentadd QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(queueCampaign, $event)" translate="MOTIONDIALER.DELETE_QUEUECAMPAIGN">\n                                                    Delete QueueCampaign\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(queueCampaign, $event)" translate="MOTIONDIALER.GOTOREALTIME_QUEUECAMPAIGN">\n                                                    goToRealtime QueueCampaign\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.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="4">{{ \'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" 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">\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                            <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/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>\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                            </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                            </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                            </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                            </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                            </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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(openchannelAccount, $event)" translate="OPENCHANNEL.EDIT_OPENCHANNELACCOUNT">\n                                                    Edit OpenchannelAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(openchannelAccount, $event)" translate="OPENCHANNEL.INTERACTIONS_OPENCHANNELACCOUNT">\n                                                    Interactions OpenchannelAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(openchannelAccount, $event)" translate="OPENCHANNEL.AGENTADD_OPENCHANNELACCOUNT">\n                                                    AgentAdd OpenchannelAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(openchannelAccount, $event)" translate="OPENCHANNEL.DELETE_OPENCHANNELACCOUNT">\n                                                    Delete OpenchannelAccount\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(openchannelQueue, $event)" translate="OPENCHANNEL.EDIT_OPENCHANNELQUEUE">\n                                                    Edit OpenchannelQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(openchannelQueue, $event)" translate="OPENCHANNEL.TEAMADD_OPENCHANNELQUEUE">\n                                                    teamadd OpenchannelQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(openchannelQueue, $event)" translate="OPENCHANNEL.AGENTADD_OPENCHANNELQUEUE">\n                                                    agentadd OpenchannelQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(openchannelQueue, $event)" translate="OPENCHANNEL.DELETE_OPENCHANNELQUEUE">\n                                                    Delete OpenchannelQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(openchannelQueue, $event)" translate="OPENCHANNEL.GOTOREALTIME_OPENCHANNELQUEUE">\n                                                    goToRealtime OpenchannelQueue\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.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="4">{{ \'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" 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">\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                            <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            </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            </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            </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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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                    </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                    </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                    </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                    </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                    </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            <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="generalForm[\'min_internal\'].$error" ng-show="generalForm[\'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                <md-switch ng-model="vm.general.securePassword" aria-label="Security_Suite"><span translate="SETTINGS.SECURITY_SUITE">Security_Suite</span></md-switch>\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            </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="generalForm[\'chatTimeout\'].$error" ng-show="generalForm[\'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="generalForm[\'stunaddr\'].$error" ng-show="generalForm[\'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="generalForm[\'turnaddr\'].$error" ng-show="generalForm[\'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="generalForm[\'turnusername\'].$error" ng-show="generalForm[\'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="generalForm[\'turnpassword\'].$error" ng-show="generalForm[\'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.split" aria-label="Split"><span translate="SETTINGS.SPLIT">Split</span></md-switch>\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="generalForm[\'splitSizeCsv\'].$error" ng-show="generalForm[\'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="generalForm[\'splitSizePdf\'].$error" ng-show="generalForm[\'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="generalForm[\'splitSizeXlsx\'].$error" ng-show="generalForm[\'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            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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) || (globalForm.$invalid || motionbarForm.$invalid || reportForm.$invalid || agentOmniDesktopInterfaceForm.$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                        <md-switch ng-model="vm.general.securePassword" aria-label="Security_Suite"><span translate="SETTINGS.SECURITY_SUITE">Security_Suite</span></md-switch>\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                    </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                        <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                    </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                        <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                    </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                    </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>\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        <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>\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>\n                                <a href="https://www.xcally.com/en/index.html#pricing-table2-h" 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" 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" 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" 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                                <td md-cell class="actions">\n                                    <md-menu>\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                                        <md-menu-content width="3">\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.editdialog(network, $event)" translate="SETTINGS.EDIT_NETWORK">\n                                                    Edit Network\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(network, $event)" translate="SETTINGS.DELETE_NETWORK">\n                                                    Delete Network\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: \'{{\'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                <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            </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                        <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                    </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="4">{{ \'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" 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">\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                            <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 == \'skebby\' && vm.smsAccount.smsMethod == \'GP\') || 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                            </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                            </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                            </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                            </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                            </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                            </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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(smsAccount, $event)" translate="SMS.EDIT_SMSACCOUNT">\n                                                    Edit SmsAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.interactionsgoto(smsAccount, $event)" translate="SMS.INTERACTIONS_SMSACCOUNT">\n                                                    Interactions SmsAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(smsAccount, $event)" translate="SMS.AGENTADD_SMSACCOUNT">\n                                                    AgentAdd SmsAccount\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(smsAccount, $event)" translate="SMS.DELETE_SMSACCOUNT">\n                                                    Delete SmsAccount\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.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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(smsQueue, $event)" translate="SMS.EDIT_SMSQUEUE">\n                                                    Edit SmsQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(smsQueue, $event)" translate="SMS.TEAMADD_SMSQUEUE">\n                                                    teamadd SmsQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(smsQueue, $event)" translate="SMS.AGENTADD_SMSQUEUE">\n                                                    agentadd SmsQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(smsQueue, $event)" translate="SMS.DELETE_SMSQUEUE">\n                                                    Delete SmsQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(smsQueue, $event)" translate="SMS.GOTOREALTIME_SMSQUEUE">\n                                                    goToRealtime SmsQueue\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.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 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="8">\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 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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(agent, $event)" translate="STAFF.EDIT_AGENT">\n                                                    Edit Agent\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(agent, $event)" translate="STAFF.TEAMADD_AGENT">\n                                                    teamadd Agent\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(agent, $event)" translate="STAFF.DELETE_AGENT">\n                                                    Delete Agent\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: \'{{\'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            </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            </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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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.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>\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                    <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\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                            </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                            </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\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                            </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                            </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                            </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                            </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                            </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                            </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                            </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                            </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                            </md-input-container>\n                            <md-input-container ng-if="vm.agent.showWebBar == 0" class="md-block">\n                                <md-switch ng-model="vm.agent.phoneBarEnableVideoRecording" aria-label="EnableVideoRecording" ng-disabled="!vm.crudPermissions.canEdit"><span translate="STAFF.ENABLEVIDEORECORDING">EnableVideoRecording</span></md-switch>\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                            </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                            </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                            </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                            </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                            </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                            </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                            </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                            </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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(team, $event)" translate="STAFF.EDIT_TEAM">\n                                                    Edit Team\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(team, $event)" translate="STAFF.AGENTADD_TEAM">\n                                                    AgentAdd Team\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(team, $event)" translate="STAFF.DELETE_TEAM">\n                                                    Delete Team\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: \'{{\'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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="space-between center" 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.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>\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                    <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\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                                <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="STAFF.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(telephone, $event)" translate="STAFF.EDIT_TELEPHONE">\n                                                    Edit Telephone\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(telephone, $event)" translate="STAFF.DELETE_TELEPHONE">\n                                                    Delete Telephone\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: \'{{\'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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(userProfile, $event)" translate="STAFF.EDIT_USERPROFILE">\n                                                    Edit UserProfile\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(userProfile, $event)" translate="STAFF.CLONE_USERPROFILE">\n                                                    clone UserProfile\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(userProfile, $event)" translate="STAFF.DELETE_USERPROFILE">\n                                                    Delete UserProfile\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: \'{{\'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            </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.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>\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                    <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\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\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 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="9">\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})[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 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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(user, $event)" translate="STAFF.EDIT_USER">\n                                                    Edit User\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.deleteconfirm(user, $event)" translate="STAFF.DELETE_USER">\n                                                    Delete User\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: \'{{\'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                                <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="TOOLS.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.editdialog(cannedAnswer, $event)" translate="TOOLS.EDIT_CANNEDANSWER">\n                                                    Edit CannedAnswer\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(cannedAnswer, $event)" translate="TOOLS.DELETE_CANNEDANSWER">\n                                                    Delete CannedAnswer\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: \'{{\'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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(customDashboard, $event)" translate="TOOLS.EDIT_CUSTOMDASHBOARD">\n                                                    Edit CustomDashboard\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(customDashboard, $event)" translate="TOOLS.CLONE_CUSTOMDASHBOARD">\n                                                    clone CustomDashboard\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotodashboardgoto(customDashboard, $event)" translate="TOOLS.GOTODASHBOARD_CUSTOMDASHBOARD">\n                                                    goToDashboard CustomDashboard\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(customDashboard, $event)" translate="TOOLS.DELETE_CUSTOMDASHBOARD">\n                                                    Delete CustomDashboard\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: \'{{\'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                                <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="TOOLS.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.editdialog(disposition, $event)" translate="TOOLS.EDIT_DISPOSITION">\n                                                    Edit Disposition\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(disposition, $event)" translate="TOOLS.DELETE_DISPOSITION">\n                                                    Delete Disposition\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: \'{{\'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                                <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="TOOLS.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(interval, $event)" translate="TOOLS.EDIT_INTERVAL">\n                                                    Edit Interval\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.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                        </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                                <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="TOOLS.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.editdialog(pause, $event)" translate="TOOLS.EDIT_PAUSE">\n                                                    Edit Pause\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(pause, $event)" translate="TOOLS.DELETE_PAUSE">\n                                                    Delete Pause\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: \'{{\'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            </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            </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            </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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(schedule, $event)" translate="TOOLS.EDIT_SCHEDULE">\n                                                    Edit Schedule\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.runconfirm(schedule, $event)" translate="TOOLS.RUN_SCHEDULE">\n                                                    Run Schedule\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(schedule, $event)" translate="TOOLS.DELETE_SCHEDULE">\n                                                    Delete Schedule\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: \'{{\'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                                <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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(sound, $event)" translate="TOOLS.EDIT_SOUND">\n                                                    Edit Sound\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.downloadfile2(sound, $event)" translate="TOOLS.DOWNLOAD_SOUND">\n                                                    Download Sound\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(sound, $event)" translate="TOOLS.DELETE_SOUND">\n                                                    Delete Sound\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: \'{{\'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                                <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="TOOLS.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.editdialog(tag, $event)" translate="TOOLS.EDIT_TAG">\n                                                    Edit Tag\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(tag, $event)" translate="TOOLS.DELETE_TAG">\n                                                    Delete Tag\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: \'{{\'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                                <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="TOOLS.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.editdialog(template, $event)" translate="TOOLS.EDIT_TEMPLATE">\n                                                    Edit Template\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(template, $event)" translate="TOOLS.DELETE_TEMPLATE">\n                                                    Delete Template\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: \'{{\'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            </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                </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-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\' && vm.action.data1 == \'POST\'" 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 == \'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="\'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 == \'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="\'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 == \'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                            </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 == \'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="17">\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 == \'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="17">\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 == \'urlForward\' && action.data1 == \'POST\'" md-cell>{{action.data7}}</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="44">\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                                <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="TOOLS.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(trigger, $event)" translate="TOOLS.EDIT_TRIGGER">\n                                                    Edit Trigger\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(trigger, $event)" translate="TOOLS.DELETE_TRIGGER">\n                                                    Delete Trigger\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: \'{{\'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            </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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\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                            </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                                <td md-cell class="actions">\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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(trunk, $event)" translate="TOOLS.EDIT_TRUNK">\n                                                    Edit Trunk\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.clonedialog(trunk, $event)" translate="TOOLS.CLONE_TRUNK">\n                                                    clone Trunk\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(trunk, $event)" translate="TOOLS.GOTOREALTIME_TRUNK">\n                                                    goToRealtime Trunk\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(trunk, $event)" translate="TOOLS.DELETE_TRUNK">\n                                                    Delete 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: \'{{\'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                                <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="TOOLS.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.editdialog(variable, $event)" translate="TOOLS.EDIT_VARIABLE">\n                                                    Edit Variable\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(variable, $event)" translate="TOOLS.DELETE_VARIABLE">\n                                                    Delete Variable\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: \'{{\'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/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                                <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="VOICE.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.editdialog(chanSpy, $event)" translate="VOICE.EDIT_CHANSPY">\n                                                    Edit chanSpy\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(chanSpy, $event)" translate="VOICE.DELETE_CHANSPY">\n                                                    Delete chanSpy\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.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            </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            </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                                <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="VOICE.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.editdialog(context, $event)" translate="VOICE.EDIT_CONTEXT">\n                                                    Edit Context\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(context, $event)" translate="VOICE.DELETE_CONTEXT">\n                                                    Delete Context\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.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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="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                                <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="VOICE.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(inboundroute, $event)" translate="VOICE.EDIT_INBOUNDROUTE">\n                                                    Edit InboundRoute\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(inboundroute, $event)" translate="VOICE.DELETE_INBOUNDROUTE">\n                                                    Delete InboundRoute\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.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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="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            </md-input-container>\n\n            <div class="error-list">\n                <div ng-repeat="error in vm.errors" class="error" layout="row" layout-align="space-between center">\n                    <div>\n                        <span class="message">{{error.message}}</span>\n                        <span class="type">({{error.type}})</span>\n                    </div>\n                    <md-button class="md-icon-button">\n                        <md-icon md-font-icon="icon-alert-box" aria-label="alert error" class="s16"></md-icon>\n                    </md-button>\n                </div>\n            </div>\n        </md-dialog-content>\n\n        <md-dialog-actions layout="row" layout-align="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                                <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="VOICE.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(internalroute, $event)" translate="VOICE.EDIT_INTERNALROUTE">\n                                                    Edit InternalRoute\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(internalroute, $event)" translate="VOICE.DELETE_INTERNALROUTE">\n                                                    Delete InternalRoute\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.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                                <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="VOICE.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(musiconhold, $event)" translate="VOICE.EDIT_MUSICONHOLD">\n                                                    Edit MusicOnHold\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(musiconhold, $event)" translate="VOICE.DELETE_MUSICONHOLD">\n                                                    Delete MusicOnHold\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.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                                <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="VOICE.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(outboundroute, $event)" translate="VOICE.EDIT_OUTBOUNDROUTE">\n                                                    Edit OutboundRoute\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(outboundroute, $event)" translate="VOICE.DELETE_OUTBOUNDROUTE">\n                                                    Delete OutboundRoute\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.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="4">{{ \'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" 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">\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                            <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                                <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="VOICE.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(voicemail, $event)" translate="VOICE.EDIT_VOICEMAIL">\n                                                    Edit Voicemail\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(voicemail, $event)" translate="VOICE.DELETE_VOICEMAIL">\n                                                    Delete Voicemail\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.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})[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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editdialog(voicePrefix, $event)" translate="VOICE.EDIT_VOICEPREFIX">\n                                                    Edit voicePrefix\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(voicePrefix, $event)" translate="VOICE.AGENTADD_VOICEPREFIX">\n                                                    AgentAdd voicePrefix\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(voicePrefix, $event)" translate="VOICE.DELETE_VOICEPREFIX">\n                                                    Delete voicePrefix\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.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                                <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                            </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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item ng-if="vm.crudPermissions.canEdit">\n                                                <md-button ng-click="vm.editstate(voiceQueue, $event)" translate="VOICE.EDIT_VOICEQUEUE">\n                                                    Edit VoiceQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.teamadddialog(voiceQueue, $event)" translate="VOICE.TEAMADD_VOICEQUEUE">\n                                                    teamadd VoiceQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.agentadddialog(voiceQueue, $event)" translate="VOICE.AGENTADD_VOICEQUEUE">\n                                                    agentadd VoiceQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(voiceQueue, $event)" translate="VOICE.DELETE_VOICEQUEUE">\n                                                    Delete VoiceQueue\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.gotorealtimegoto(voiceQueue, $event)" translate="VOICE.GOTOREALTIME_VOICEQUEUE">\n                                                    goToRealtime VoiceQueue\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.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                                <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                                <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                                <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                                        <md-menu-content width="3">\n                                            <md-menu-item>\n                                                <md-button ng-click="vm.downloadfile2(voiceRecording, $event)" translate="VOICE.DOWNLOAD_VOICERECORDING">\n                                                    Download VoiceRecording\n                                                </md-button>\n                                            </md-menu-item>\n                                            <md-menu-item ng-if="vm.crudPermissions.canDelete">\n                                                <md-button ng-click="vm.deleteconfirm(voiceRecording, $event)" translate="VOICE.DELETE_VOICERECORDING">\n                                                    Delete 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-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.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>\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>\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 967594f..905d624 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7dfd=['jscripty','urlForward','browser','bot','Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser,\x20bot','integration[AccountId],\x20motionbar[TemplateId,URL,WinAppPath],\x20urlForward[URL]','motionbar[NULL,NULL,WinAppArguments]','TEXT','sequelize','exports','VIRTUAL','getDataValue','action','STRING','contactManager','integration','motionbar'];(function(_0x16629d,_0x492375){var _0x56ccee=function(_0xa982b7){while(--_0xa982b7){_0x16629d['push'](_0x16629d['shift']());}};_0x56ccee(++_0x492375);}(_0x7dfd,0x1c2));var _0xd7df=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7dfd[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xd7df('0x0'));module[_0xd7df('0x1')]={'name':{'type':Sequelize[_0xd7df('0x2')],'get':function(_0x2d48e6){return this[_0xd7df('0x3')](_0xd7df('0x4'));}},'action':{'type':Sequelize[_0xd7df('0x5')],'allowNull':![],'validate':{'isIn':{'args':[[_0xd7df('0x6'),_0xd7df('0x7'),_0xd7df('0x8'),_0xd7df('0x9'),_0xd7df('0xa'),_0xd7df('0xb'),_0xd7df('0xc')]],'msg':_0xd7df('0xd')}},'comment':_0xd7df('0xd')},'data1':{'type':Sequelize[_0xd7df('0x5')](0x1000),'comment':'contactManager[ListId],\x20integration[intName(zendesk)],\x20motionbar[Popup(0),URL(1),WinApp(2)],\x20urlForward[GET,POST],\x20browser[TemplateId(0),URL(1)]'},'data2':{'type':Sequelize[_0xd7df('0x5')](0x1000),'comment':_0xd7df('0xe')},'data3':{'type':Sequelize[_0xd7df('0x5')](0x1000),'comment':_0xd7df('0xf')},'data4':{'type':Sequelize['STRING'](0x1000)},'data5':{'type':Sequelize[_0xd7df('0x5')](0x1000)},'data6':{'type':Sequelize['STRING']},'data7':{'type':Sequelize[_0xd7df('0x10')]}};
\ No newline at end of file
+var _0x7da7=['urlForward','browser','Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser,\x20bot','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]','sequelize','exports','VIRTUAL','action','STRING','integration','motionbar'];(function(_0x1d4011,_0x4e372f){var _0x2fa657=function(_0x13d08b){while(--_0x13d08b){_0x1d4011['push'](_0x1d4011['shift']());}};_0x2fa657(++_0x4e372f);}(_0x7da7,0x10d));var _0x77da=function(_0x2baca1,_0x2f3557){_0x2baca1=_0x2baca1-0x0;var _0x9aa62a=_0x7da7[_0x2baca1];return _0x9aa62a;};'use strict';var Sequelize=require(_0x77da('0x0'));module[_0x77da('0x1')]={'name':{'type':Sequelize[_0x77da('0x2')],'get':function(_0x571213){return this['getDataValue'](_0x77da('0x3'));}},'action':{'type':Sequelize[_0x77da('0x4')],'allowNull':![],'validate':{'isIn':{'args':[['contactManager',_0x77da('0x5'),_0x77da('0x6'),'jscripty',_0x77da('0x7'),_0x77da('0x8'),'bot']],'msg':_0x77da('0x9')}},'comment':'Allowed\x20values:\x20contactManager,\x20integration,\x20motionbar,\x20jscripty,\x20urlForward,\x20browser,\x20bot'},'data1':{'type':Sequelize[_0x77da('0x4')](0x1000),'comment':_0x77da('0xa')},'data2':{'type':Sequelize[_0x77da('0x4')](0x1000),'comment':_0x77da('0xb')},'data3':{'type':Sequelize[_0x77da('0x4')](0x1000),'comment':'motionbar[NULL,NULL,WinAppArguments]'},'data4':{'type':Sequelize[_0x77da('0x4')](0x1000)},'data5':{'type':Sequelize[_0x77da('0x4')](0x1000)},'data6':{'type':Sequelize[_0x77da('0x4')]},'data7':{'type':Sequelize['TEXT']}};
\ No newline at end of file
index 96e36ca..4d18d24 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf0a5=['api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','set','apply','reject','save','update','then','destroy','error','stack','name','send','body','find','params','catch','Action','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','path','sox','to-csv','desk.js','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger'];(function(_0x69e29e,_0xe0d82){var _0x2b5343=function(_0x57eb5e){while(--_0x57eb5e){_0x69e29e['push'](_0x69e29e['shift']());}};_0x2b5343(++_0xe0d82);}(_0xf0a5,0x193));var _0x5f0a=function(_0x4f5556,_0x485819){_0x4f5556=_0x4f5556-0x0;var _0x57271a=_0xf0a5[_0x4f5556];return _0x57271a;};'use strict';var pdf=require(_0x5f0a('0x0'));var emlformat=require(_0x5f0a('0x1'));var rimraf=require(_0x5f0a('0x2'));var zipdir=require(_0x5f0a('0x3'));var jsonpatch=require(_0x5f0a('0x4'));var rp=require('request-promise');var moment=require(_0x5f0a('0x5'));var BPromise=require(_0x5f0a('0x6'));var Mustache=require(_0x5f0a('0x7'));var util=require('util');var path=require(_0x5f0a('0x8'));var sox=require(_0x5f0a('0x9'));var csv=require(_0x5f0a('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x5f0a('0xb'));var toCsv=require(_0x5f0a('0xa'));var querystring=require('querystring');var Papa=require(_0x5f0a('0xc'));var authService=require('../../components/auth/service');var hardwareService=require(_0x5f0a('0xd'));var Redis=require(_0x5f0a('0xe'));var qs=require(_0x5f0a('0xf'));var logger=require(_0x5f0a('0x10'))(_0x5f0a('0x11'));var utils=require(_0x5f0a('0x12'));var config=require(_0x5f0a('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x47c019,_0x267c13){_0x267c13=_0x267c13||0xcc;return function(_0x422aef){if(_0x422aef){return _0x47c019[_0x5f0a('0x14')](_0x267c13);}return _0x47c019['status'](_0x267c13)[_0x5f0a('0x15')]();};}function respondWithResult(_0x386b1d,_0x32a3b3){_0x32a3b3=_0x32a3b3||0xc8;return function(_0x1ea63c){if(_0x1ea63c){return _0x386b1d[_0x5f0a('0x16')](_0x32a3b3)[_0x5f0a('0x17')](_0x1ea63c);}};}function respondWithFilteredResult(_0x217219,_0x478989){return function(_0x4b344e){if(_0x4b344e){var _0x14b46b=_0x4b344e[_0x5f0a('0x18')],_0x45b8bc=_0x478989[_0x5f0a('0x19')],_0x5d704b=_0x478989[_0x5f0a('0x19')]+_0x478989['limit'],_0x2ec7af;if(_0x5d704b>=_0x14b46b){_0x5d704b=_0x14b46b;_0x2ec7af=0xc8;}else{_0x2ec7af=0xce;}_0x217219[_0x5f0a('0x16')](_0x2ec7af);return _0x217219[_0x5f0a('0x1a')]('Content-Range',_0x45b8bc+'-'+_0x5d704b+'/'+_0x14b46b)[_0x5f0a('0x17')](_0x4b344e);}return null;};}function patchUpdates(_0x41cd8e){return function(_0x51568b){try{jsonpatch[_0x5f0a('0x1b')](_0x51568b,_0x41cd8e,!![]);}catch(_0x4ee17c){return BPromise[_0x5f0a('0x1c')](_0x4ee17c);}return _0x51568b[_0x5f0a('0x1d')]();};}function saveUpdates(_0x1587c0,_0x54fd55){return function(_0x56a260){if(_0x56a260){return _0x56a260[_0x5f0a('0x1e')](_0x1587c0)[_0x5f0a('0x1f')](function(_0x99004){return _0x99004;});}return null;};}function removeEntity(_0xbd4c2b,_0x5274ee){return function(_0x285aa3){if(_0x285aa3){return _0x285aa3[_0x5f0a('0x20')]()[_0x5f0a('0x1f')](function(){_0xbd4c2b[_0x5f0a('0x16')](0xcc)[_0x5f0a('0x15')]();});}};}function handleEntityNotFound(_0xc89880,_0x5805de){return function(_0x4ea55d){if(!_0x4ea55d){_0xc89880['sendStatus'](0x194);}return _0x4ea55d;};}function handleError(_0x155074,_0x4346af){_0x4346af=_0x4346af||0x1f4;return function(_0x382f9c){logger[_0x5f0a('0x21')](_0x382f9c[_0x5f0a('0x22')]);if(_0x382f9c[_0x5f0a('0x23')]){delete _0x382f9c['name'];}_0x155074[_0x5f0a('0x16')](_0x4346af)[_0x5f0a('0x24')](_0x382f9c);};}exports['update']=function(_0x5dbe12,_0x320443){if(_0x5dbe12[_0x5f0a('0x25')]['id']){delete _0x5dbe12['body']['id'];}return db['Action'][_0x5f0a('0x26')]({'where':{'id':_0x5dbe12[_0x5f0a('0x27')]['id']}})[_0x5f0a('0x1f')](handleEntityNotFound(_0x320443,null))[_0x5f0a('0x1f')](saveUpdates(_0x5dbe12[_0x5f0a('0x25')],null))[_0x5f0a('0x1f')](respondWithResult(_0x320443,null))[_0x5f0a('0x28')](handleError(_0x320443,null));};exports['destroy']=function(_0x455de5,_0x177738){return db[_0x5f0a('0x29')][_0x5f0a('0x26')]({'where':{'id':_0x455de5['params']['id']}})[_0x5f0a('0x1f')](handleEntityNotFound(_0x177738,null))[_0x5f0a('0x1f')](removeEntity(_0x177738,null))['catch'](handleError(_0x177738,null));};
\ No newline at end of file
+var _0x1a2e=['status','json','offset','limit','set','Content-Range','apply','update','then','destroy','sendStatus','error','stack','name','send','body','find','params','catch','Action','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','end'];(function(_0xaf955e,_0x31af7d){var _0x44a66d=function(_0x5bfc46){while(--_0x5bfc46){_0xaf955e['push'](_0xaf955e['shift']());}};_0x44a66d(++_0x31af7d);}(_0x1a2e,0xa1));var _0xe1a2=function(_0x53589c,_0x5768fd){_0x53589c=_0x53589c-0x0;var _0x2726ed=_0x1a2e[_0x53589c];return _0x2726ed;};'use strict';var pdf=require(_0xe1a2('0x0'));var emlformat=require(_0xe1a2('0x1'));var rimraf=require(_0xe1a2('0x2'));var zipdir=require(_0xe1a2('0x3'));var jsonpatch=require(_0xe1a2('0x4'));var rp=require(_0xe1a2('0x5'));var moment=require(_0xe1a2('0x6'));var BPromise=require(_0xe1a2('0x7'));var Mustache=require(_0xe1a2('0x8'));var util=require(_0xe1a2('0x9'));var path=require('path');var sox=require(_0xe1a2('0xa'));var csv=require(_0xe1a2('0xb'));var ejs=require(_0xe1a2('0xc'));var fs=require('fs');var _=require(_0xe1a2('0xd'));var squel=require(_0xe1a2('0xe'));var crypto=require('crypto');var jsforce=require(_0xe1a2('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xe1a2('0xb'));var querystring=require(_0xe1a2('0x10'));var Papa=require(_0xe1a2('0x11'));var authService=require(_0xe1a2('0x12'));var hardwareService=require(_0xe1a2('0x13'));var Redis=require(_0xe1a2('0x14'));var qs=require(_0xe1a2('0x15'));var logger=require(_0xe1a2('0x16'))('api');var utils=require(_0xe1a2('0x17'));var config=require(_0xe1a2('0x18'));var db=require(_0xe1a2('0x19'))['db'];function respondWithStatusCode(_0x2787c8,_0x197ba0){_0x197ba0=_0x197ba0||0xcc;return function(_0x4dd177){if(_0x4dd177){return _0x2787c8['sendStatus'](_0x197ba0);}return _0x2787c8['status'](_0x197ba0)[_0xe1a2('0x1a')]();};}function respondWithResult(_0x593072,_0x3b1ba8){_0x3b1ba8=_0x3b1ba8||0xc8;return function(_0x434db8){if(_0x434db8){return _0x593072[_0xe1a2('0x1b')](_0x3b1ba8)[_0xe1a2('0x1c')](_0x434db8);}};}function respondWithFilteredResult(_0x4164f0,_0x23172f){return function(_0x584fd6){if(_0x584fd6){var _0x28be9d=_0x584fd6['count'],_0x2c6fba=_0x23172f[_0xe1a2('0x1d')],_0x256532=_0x23172f[_0xe1a2('0x1d')]+_0x23172f[_0xe1a2('0x1e')],_0x71f8c7;if(_0x256532>=_0x28be9d){_0x256532=_0x28be9d;_0x71f8c7=0xc8;}else{_0x71f8c7=0xce;}_0x4164f0[_0xe1a2('0x1b')](_0x71f8c7);return _0x4164f0[_0xe1a2('0x1f')](_0xe1a2('0x20'),_0x2c6fba+'-'+_0x256532+'/'+_0x28be9d)[_0xe1a2('0x1c')](_0x584fd6);}return null;};}function patchUpdates(_0x1f68f3){return function(_0x3daf67){try{jsonpatch[_0xe1a2('0x21')](_0x3daf67,_0x1f68f3,!![]);}catch(_0x4ec478){return BPromise['reject'](_0x4ec478);}return _0x3daf67['save']();};}function saveUpdates(_0x28115d,_0x30c18e){return function(_0x45bf9a){if(_0x45bf9a){return _0x45bf9a[_0xe1a2('0x22')](_0x28115d)[_0xe1a2('0x23')](function(_0xde0ff9){return _0xde0ff9;});}return null;};}function removeEntity(_0x1e6330,_0x7f0313){return function(_0x48f23d){if(_0x48f23d){return _0x48f23d[_0xe1a2('0x24')]()[_0xe1a2('0x23')](function(){_0x1e6330[_0xe1a2('0x1b')](0xcc)[_0xe1a2('0x1a')]();});}};}function handleEntityNotFound(_0xc6b484,_0x485232){return function(_0x3d6e93){if(!_0x3d6e93){_0xc6b484[_0xe1a2('0x25')](0x194);}return _0x3d6e93;};}function handleError(_0x395430,_0x1b803d){_0x1b803d=_0x1b803d||0x1f4;return function(_0x18609c){logger[_0xe1a2('0x26')](_0x18609c[_0xe1a2('0x27')]);if(_0x18609c[_0xe1a2('0x28')]){delete _0x18609c[_0xe1a2('0x28')];}_0x395430['status'](_0x1b803d)[_0xe1a2('0x29')](_0x18609c);};}exports['update']=function(_0x35f5fd,_0x28364c){if(_0x35f5fd['body']['id']){delete _0x35f5fd[_0xe1a2('0x2a')]['id'];}return db['Action'][_0xe1a2('0x2b')]({'where':{'id':_0x35f5fd[_0xe1a2('0x2c')]['id']}})['then'](handleEntityNotFound(_0x28364c,null))['then'](saveUpdates(_0x35f5fd['body'],null))[_0xe1a2('0x23')](respondWithResult(_0x28364c,null))[_0xe1a2('0x2d')](handleError(_0x28364c,null));};exports[_0xe1a2('0x24')]=function(_0x24e4bf,_0x4daa60){return db[_0xe1a2('0x2e')][_0xe1a2('0x2b')]({'where':{'id':_0x24e4bf['params']['id']}})[_0xe1a2('0x23')](handleEntityNotFound(_0x4daa60,null))[_0xe1a2('0x23')](removeEntity(_0x4daa60,null))[_0xe1a2('0x2d')](handleError(_0x4daa60,null));};
\ No newline at end of file
index 709f411..d983c84 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5a95=['tools_actions','util','api','moment','bluebird','./action.attributes','exports','define','Action'];(function(_0xbd206c,_0x25e02e){var _0x35d6a4=function(_0x1db36b){while(--_0x1db36b){_0xbd206c['push'](_0xbd206c['shift']());}};_0x35d6a4(++_0x25e02e);}(_0x5a95,0x19f));var _0x55a9=function(_0x2beec8,_0xb3adc5){_0x2beec8=_0x2beec8-0x0;var _0x1e1973=_0x5a95[_0x2beec8];return _0x1e1973;};'use strict';var _=require('lodash');var util=require(_0x55a9('0x0'));var logger=require('../../config/logger')(_0x55a9('0x1'));var moment=require(_0x55a9('0x2'));var BPromise=require(_0x55a9('0x3'));var rp=require('request-promise');var attributes=require(_0x55a9('0x4'));module[_0x55a9('0x5')]=function(_0x32aaa2,_0x644a8c){return _0x32aaa2[_0x55a9('0x6')](_0x55a9('0x7'),attributes,{'tableName':_0x55a9('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfeb7=['exports','define','Action','tools_actions','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./action.attributes'];(function(_0x5a4643,_0x2781fe){var _0xcac8e2=function(_0xb765d9){while(--_0xb765d9){_0x5a4643['push'](_0x5a4643['shift']());}};_0xcac8e2(++_0x2781fe);}(_0xfeb7,0xf4));var _0x7feb=function(_0x46c59d,_0x3820c4){_0x46c59d=_0x46c59d-0x0;var _0x22fa29=_0xfeb7[_0x46c59d];return _0x22fa29;};'use strict';var _=require(_0x7feb('0x0'));var util=require(_0x7feb('0x1'));var logger=require(_0x7feb('0x2'))(_0x7feb('0x3'));var moment=require(_0x7feb('0x4'));var BPromise=require(_0x7feb('0x5'));var rp=require(_0x7feb('0x6'));var attributes=require(_0x7feb('0x7'));module[_0x7feb('0x8')]=function(_0x14be24,_0x59b48d){return _0x14be24[_0x7feb('0x9')](_0x7feb('0xa'),attributes,{'tableName':_0x7feb('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 31ade71..69aa607 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc874=['bluebird','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request','info','Action,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','lodash','moment'];(function(_0x3f4c2d,_0x18ccc1){var _0x30e8a9=function(_0x8eb321){while(--_0x8eb321){_0x3f4c2d['push'](_0x3f4c2d['shift']());}};_0x30e8a9(++_0x18ccc1);}(_0xc874,0x154));var _0x4c87=function(_0x424501,_0x42096d){_0x424501=_0x424501-0x0;var _0xb719af=_0xc874[_0x424501];return _0xb719af;};'use strict';var _=require(_0x4c87('0x0'));var util=require('util');var moment=require(_0x4c87('0x1'));var BPromise=require(_0x4c87('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x4c87('0x3'))['db'];var utils=require(_0x4c87('0x4'));var logger=require(_0x4c87('0x5'))('rpc');var config=require(_0x4c87('0x6'));var jayson=require(_0x4c87('0x7'));var client=jayson['client'][_0x4c87('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3dafe0,_0x30c939,_0xdc4a29){return new BPromise(function(_0x116649,_0x5b7720){return client[_0x4c87('0x9')](_0x3dafe0,_0xdc4a29)['then'](function(_0x384268){logger[_0x4c87('0xa')](_0x4c87('0xb'),_0x30c939,_0x4c87('0xc'));logger[_0x4c87('0xd')]('Action,\x20%s,\x20%s,\x20%s',_0x30c939,_0x4c87('0xc'),JSON[_0x4c87('0xe')](_0x384268));if(_0x384268['error']){if(_0x384268[_0x4c87('0xf')][_0x4c87('0x10')]===0x1f4){logger[_0x4c87('0xf')](_0x4c87('0xb'),_0x30c939,_0x384268[_0x4c87('0xf')]['message']);return _0x5b7720(_0x384268['error']['message']);}logger[_0x4c87('0xf')](_0x4c87('0xb'),_0x30c939,_0x384268[_0x4c87('0xf')][_0x4c87('0x11')]);return _0x116649(_0x384268[_0x4c87('0xf')][_0x4c87('0x11')]);}else{logger[_0x4c87('0xa')](_0x4c87('0xb'),_0x30c939,'request\x20sent');_0x116649(_0x384268[_0x4c87('0x12')][_0x4c87('0x11')]);}})['catch'](function(_0x575de5){logger[_0x4c87('0xf')](_0x4c87('0xb'),_0x30c939,_0x575de5);_0x5b7720(_0x575de5);});});}
\ No newline at end of file
+var _0xfd7b=['Action,\x20%s,\x20%s','message','result','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','stringify','error','code'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xfd7b,0x1df));var _0xbfd7=function(_0x34843e,_0x4c4224){_0x34843e=_0x34843e-0x0;var _0x598f7f=_0xfd7b[_0x34843e];return _0x598f7f;};'use strict';var _=require('lodash');var util=require(_0xbfd7('0x0'));var moment=require(_0xbfd7('0x1'));var BPromise=require(_0xbfd7('0x2'));var rs=require(_0xbfd7('0x3'));var fs=require('fs');var Redis=require(_0xbfd7('0x4'));var db=require(_0xbfd7('0x5'))['db'];var utils=require(_0xbfd7('0x6'));var logger=require(_0xbfd7('0x7'))(_0xbfd7('0x8'));var config=require(_0xbfd7('0x9'));var jayson=require(_0xbfd7('0xa'));var client=jayson[_0xbfd7('0xb')][_0xbfd7('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x5f3067,_0x38b1ef,_0x48f2aa){return new BPromise(function(_0x33dab1,_0x5cee3d){return client[_0xbfd7('0xd')](_0x5f3067,_0x48f2aa)[_0xbfd7('0xe')](function(_0x5a3d78){logger[_0xbfd7('0xf')]('Action,\x20%s,\x20%s',_0x38b1ef,_0xbfd7('0x10'));logger[_0xbfd7('0x11')]('Action,\x20%s,\x20%s,\x20%s',_0x38b1ef,'request\x20sent',JSON[_0xbfd7('0x12')](_0x5a3d78));if(_0x5a3d78[_0xbfd7('0x13')]){if(_0x5a3d78[_0xbfd7('0x13')][_0xbfd7('0x14')]===0x1f4){logger[_0xbfd7('0x13')]('Action,\x20%s,\x20%s',_0x38b1ef,_0x5a3d78[_0xbfd7('0x13')]['message']);return _0x5cee3d(_0x5a3d78[_0xbfd7('0x13')]['message']);}logger['error'](_0xbfd7('0x15'),_0x38b1ef,_0x5a3d78[_0xbfd7('0x13')][_0xbfd7('0x16')]);return _0x33dab1(_0x5a3d78[_0xbfd7('0x13')]['message']);}else{logger['info']('Action,\x20%s,\x20%s',_0x38b1ef,_0xbfd7('0x10'));_0x33dab1(_0x5a3d78[_0xbfd7('0x17')][_0xbfd7('0x16')]);}})[_0xbfd7('0x18')](function(_0x30c721){logger[_0xbfd7('0x13')](_0xbfd7('0x15'),_0x38b1ef,_0x30c721);_0x5cee3d(_0x30c721);});});}
\ No newline at end of file
index 3ce0b0f..9f931de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa769=['delete','/:id','destroy','exports','multer','path','connect-timeout','express','../../components/auth/service','./action.controller','put','isAuthenticated','update'];(function(_0x162bc9,_0x5c117e){var _0x475e2d=function(_0x18c0e7){while(--_0x18c0e7){_0x162bc9['push'](_0x162bc9['shift']());}};_0x475e2d(++_0x5c117e);}(_0xa769,0xfb));var _0x9a76=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xa769[_0xa464c9];return _0x3d73c4;};'use strict';var multer=require(_0x9a76('0x0'));var util=require('util');var path=require(_0x9a76('0x1'));var timeout=require(_0x9a76('0x2'));var express=require(_0x9a76('0x3'));var router=express['Router']();var auth=require(_0x9a76('0x4'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x9a76('0x5'));router[_0x9a76('0x6')]('/:id',auth[_0x9a76('0x7')](),controller[_0x9a76('0x8')]);router[_0x9a76('0x9')](_0x9a76('0xa'),auth[_0x9a76('0x7')](),controller[_0x9a76('0xb')]);module[_0x9a76('0xc')]=router;
\ No newline at end of file
+var _0xcce8=['delete','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./action.controller','/:id','isAuthenticated','update'];(function(_0x37b851,_0x469969){var _0x574599=function(_0x4e6ab8){while(--_0x4e6ab8){_0x37b851['push'](_0x37b851['shift']());}};_0x574599(++_0x469969);}(_0xcce8,0x1a5));var _0x8cce=function(_0x346258,_0x57c028){_0x346258=_0x346258-0x0;var _0x5093a9=_0xcce8[_0x346258];return _0x5093a9;};'use strict';var multer=require(_0x8cce('0x0'));var util=require(_0x8cce('0x1'));var path=require(_0x8cce('0x2'));var timeout=require(_0x8cce('0x3'));var express=require(_0x8cce('0x4'));var router=express[_0x8cce('0x5')]();var auth=require(_0x8cce('0x6'));var interaction=require(_0x8cce('0x7'));var config=require(_0x8cce('0x8'));var controller=require(_0x8cce('0x9'));router['put'](_0x8cce('0xa'),auth[_0x8cce('0xb')](),controller[_0x8cce('0xc')]);router[_0x8cce('0xd')](_0x8cce('0xa'),auth[_0x8cce('0xb')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index ad4d367..ad50003 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x18b4=['STRING','TEXT','sequelize','exports'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x18b4,0x17a));var _0x418b=function(_0x4b5dd9,_0x3980e2){_0x4b5dd9=_0x4b5dd9-0x0;var _0x37dc4c=_0x18b4[_0x4b5dd9];return _0x37dc4c;};'use strict';var Sequelize=require(_0x418b('0x0'));module[_0x418b('0x1')]={'name':{'type':Sequelize[_0x418b('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x418b('0x2')]},'parent':{'type':Sequelize[_0x418b('0x2')]},'table':{'type':Sequelize['STRING']},'conditions':{'type':Sequelize[_0x418b('0x3')]},'joins':{'type':Sequelize['TEXT']}};
\ No newline at end of file
+var _0x286c=['TEXT','sequelize','exports','STRING'];(function(_0x369243,_0x35cbf7){var _0x446f31=function(_0x3a2afa){while(--_0x3a2afa){_0x369243['push'](_0x369243['shift']());}};_0x446f31(++_0x35cbf7);}(_0x286c,0xe9));var _0xc286=function(_0x5c9394,_0x327edc){_0x5c9394=_0x5c9394-0x0;var _0xb245b=_0x286c[_0x5c9394];return _0xb245b;};'use strict';var Sequelize=require(_0xc286('0x0'));module[_0xc286('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize[_0xc286('0x2')]},'parent':{'type':Sequelize[_0xc286('0x2')]},'table':{'type':Sequelize['STRING']},'conditions':{'type':Sequelize[_0xc286('0x3')]},'joins':{'type':Sequelize[_0xc286('0x3')]}};
\ No newline at end of file
index 347324b..6b3e051 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7497=['alias','joins','parentKey','foreignTable','%s.%s\x20=\x20%s.%s','table','conditions','parse','clone','Limited\x20Query:','sequelize','toString','QueryTypes','SELECT','HOUR(%s)','DESC','foreignKey','debug','No\x20available\x20data','output','web','fullPath','%s-%s.%s','generate','csv','custom','AnalyticExtractedReport','cdr','.calldate\x20BETWEEN\x20?\x20AND\x20?','startDate','endDate','.createdAt\x20BETWEEN\x20?\x20AND\x20?','info','Run\x20Query:','child_process','fork','../../components/export/','savename','countTable','run','SUM(%s)','html-pdf','eml-format','rimraf','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','get','end','name','send','index','AnalyticCustomReport','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','map','type','field','merge','options','includeAll','include','findAll','rows','catch','show','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','Reports','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','CustomReports','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','preview','join','left_join','right_join','cross_join','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)','ROUND(%s)','UNIX_TIMESTAMP(%s)','includes','IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','rules','operator','group','condition','value','getFields','Sequelize','ValidationErrorItem','Please\x20insert\x20at\x20least\x20one\x20field','AnalyticMetric','keyBy','select','from','MetricId','metric','function','replace','format','groupBy','orderBy'];(function(_0x2984ed,_0x2c6070){var _0xe2f603=function(_0x67b060){while(--_0x67b060){_0x2984ed['push'](_0x2984ed['shift']());}};_0xe2f603(++_0x2c6070);}(_0x7497,0xd0));var _0x7749=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7497[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0x7749('0x0'));var emlformat=require(_0x7749('0x1'));var rimraf=require(_0x7749('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x7749('0x3'));var BPromise=require(_0x7749('0x4'));var Mustache=require('mustache');var util=require(_0x7749('0x5'));var path=require(_0x7749('0x6'));var sox=require(_0x7749('0x7'));var csv=require(_0x7749('0x8'));var ejs=require(_0x7749('0x9'));var fs=require('fs');var _=require(_0x7749('0xa'));var squel=require(_0x7749('0xb'));var crypto=require(_0x7749('0xc'));var jsforce=require(_0x7749('0xd'));var deskjs=require(_0x7749('0xe'));var toCsv=require(_0x7749('0x8'));var querystring=require('querystring');var Papa=require(_0x7749('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0x7749('0x10'));var Redis=require(_0x7749('0x11'));var qs=require(_0x7749('0x12'));var logger=require(_0x7749('0x13'))(_0x7749('0x14'));var utils=require(_0x7749('0x15'));var config=require(_0x7749('0x16'));var db=require(_0x7749('0x17'))['db'];function respondWithStatusCode(_0x3587f7,_0x51b2d7){_0x51b2d7=_0x51b2d7||0xcc;return function(_0x4d3608){if(_0x4d3608){return _0x3587f7[_0x7749('0x18')](_0x51b2d7);}return _0x3587f7['status'](_0x51b2d7)['end']();};}function respondWithResult(_0x3e54bc,_0x406ed2){_0x406ed2=_0x406ed2||0xc8;return function(_0x165837){if(_0x165837){return _0x3e54bc[_0x7749('0x19')](_0x406ed2)[_0x7749('0x1a')](_0x165837);}};}function respondWithFilteredResult(_0x70699a,_0x49ef77){return function(_0x4ecd00){if(_0x4ecd00){var _0x209ba6=_0x4ecd00[_0x7749('0x1b')],_0x427943=_0x49ef77[_0x7749('0x1c')],_0x5f4a55=_0x49ef77[_0x7749('0x1c')]+_0x49ef77[_0x7749('0x1d')],_0x3a6223;if(_0x5f4a55>=_0x209ba6){_0x5f4a55=_0x209ba6;_0x3a6223=0xc8;}else{_0x3a6223=0xce;}_0x70699a[_0x7749('0x19')](_0x3a6223);return _0x70699a[_0x7749('0x1e')](_0x7749('0x1f'),_0x427943+'-'+_0x5f4a55+'/'+_0x209ba6)[_0x7749('0x1a')](_0x4ecd00);}return null;};}function patchUpdates(_0x3c6ed3){return function(_0x5c89d0){try{jsonpatch[_0x7749('0x20')](_0x5c89d0,_0x3c6ed3,!![]);}catch(_0x16f276){return BPromise['reject'](_0x16f276);}return _0x5c89d0[_0x7749('0x21')]();};}function saveUpdates(_0x544c8e,_0x753986){return function(_0x11013a){if(_0x11013a){return _0x11013a[_0x7749('0x22')](_0x544c8e)[_0x7749('0x23')](function(_0x356f3b){return _0x356f3b;});}return null;};}function removeEntity(_0x4208a9,_0x31f0c7){return function(_0x397a24){if(_0x397a24){return _0x397a24[_0x7749('0x24')]()[_0x7749('0x23')](function(){var _0x4892f1=_0x397a24[_0x7749('0x25')]({'plain':!![]});var _0x9a2283='CustomReports';return db['UserProfileResource'][_0x7749('0x24')]({'where':{'type':_0x9a2283,'resourceId':_0x4892f1['id']}})['then'](function(){return _0x397a24;});})[_0x7749('0x23')](function(){_0x4208a9[_0x7749('0x19')](0xcc)[_0x7749('0x26')]();});}};}function handleEntityNotFound(_0x40f84b,_0x5bdc61){return function(_0x21f09e){if(!_0x21f09e){_0x40f84b['sendStatus'](0x194);}return _0x21f09e;};}function handleError(_0x50c2a6,_0x4f9d48){_0x4f9d48=_0x4f9d48||0x1f4;return function(_0x493cec){logger['error'](_0x493cec['stack']);if(_0x493cec[_0x7749('0x27')]){delete _0x493cec[_0x7749('0x27')];}_0x50c2a6['status'](_0x4f9d48)[_0x7749('0x28')](_0x493cec);};}exports[_0x7749('0x29')]=function(_0x8112c9,_0x274c77){var _0x3bb878={},_0xd70729={},_0x5cdc03={'count':0x0,'rows':[]};var _0x1d7454=db[_0x7749('0x2a')][_0x7749('0x2b')];_0xd70729['model']=_[_0x7749('0x2c')](_0x1d7454);_0xd70729[_0x7749('0x2d')]=_[_0x7749('0x2c')](_0x8112c9[_0x7749('0x2d')]);_0xd70729[_0x7749('0x2e')]=_[_0x7749('0x2f')](_0xd70729[_0x7749('0x30')],_0xd70729[_0x7749('0x2d')]);_0x3bb878[_0x7749('0x31')]=_[_0x7749('0x2f')](_0xd70729[_0x7749('0x30')],qs[_0x7749('0x32')](_0x8112c9[_0x7749('0x2d')][_0x7749('0x32')]));_0x3bb878[_0x7749('0x31')]=_0x3bb878[_0x7749('0x31')][_0x7749('0x33')]?_0x3bb878['attributes']:_0xd70729[_0x7749('0x30')];if(!_0x8112c9[_0x7749('0x2d')][_0x7749('0x34')](_0x7749('0x35'))){_0x3bb878['limit']=qs['limit'](_0x8112c9['query'][_0x7749('0x1d')]);_0x3bb878[_0x7749('0x1c')]=qs[_0x7749('0x1c')](_0x8112c9[_0x7749('0x2d')]['offset']);}_0x3bb878[_0x7749('0x36')]=qs[_0x7749('0x37')](_0x8112c9[_0x7749('0x2d')]['sort']);_0x3bb878[_0x7749('0x38')]=qs[_0x7749('0x2e')](_['pick'](_0x8112c9[_0x7749('0x2d')],_0xd70729['filters']));if(_0x8112c9[_0x7749('0x2d')][_0x7749('0x39')]){_0x3bb878[_0x7749('0x38')]=_['merge'](_0x3bb878[_0x7749('0x38')],{'$or':_[_0x7749('0x3a')](_0x1d7454,function(_0x48f3f6){if(_0x48f3f6[_0x7749('0x3b')]['key']!=='VIRTUAL'){var _0x5bf936={};_0x5bf936[_0x48f3f6[_0x7749('0x3c')]]={'$like':'%'+_0x8112c9[_0x7749('0x2d')][_0x7749('0x39')]+'%'};return _0x5bf936;}})});}_0x3bb878=_[_0x7749('0x3d')]({},_0x3bb878,_0x8112c9[_0x7749('0x3e')]);var _0x2d72b4={'where':_0x3bb878[_0x7749('0x38')]};return db[_0x7749('0x2a')]['count'](_0x2d72b4)[_0x7749('0x23')](function(_0x2e0775){_0x5cdc03[_0x7749('0x1b')]=_0x2e0775;if(_0x8112c9[_0x7749('0x2d')][_0x7749('0x3f')]){_0x3bb878[_0x7749('0x40')]=[{'all':!![]}];}return db[_0x7749('0x2a')][_0x7749('0x41')](_0x3bb878);})[_0x7749('0x23')](function(_0xf13593){_0x5cdc03[_0x7749('0x42')]=_0xf13593;return _0x5cdc03;})[_0x7749('0x23')](respondWithFilteredResult(_0x274c77,_0x3bb878))[_0x7749('0x43')](handleError(_0x274c77,null));};exports[_0x7749('0x44')]=function(_0x2ffbd9,_0x5f3947){var _0x1e2238={'raw':![],'where':{'id':_0x2ffbd9['params']['id']}},_0x2cfd7a={};_0x2cfd7a['model']=_[_0x7749('0x2c')](db[_0x7749('0x2a')][_0x7749('0x2b')]);_0x2cfd7a[_0x7749('0x2d')]=_['keys'](_0x2ffbd9[_0x7749('0x2d')]);_0x2cfd7a[_0x7749('0x2e')]=_[_0x7749('0x2f')](_0x2cfd7a['model'],_0x2cfd7a[_0x7749('0x2d')]);_0x1e2238[_0x7749('0x31')]=_['intersection'](_0x2cfd7a[_0x7749('0x30')],qs[_0x7749('0x32')](_0x2ffbd9[_0x7749('0x2d')][_0x7749('0x32')]));_0x1e2238['attributes']=_0x1e2238[_0x7749('0x31')][_0x7749('0x33')]?_0x1e2238[_0x7749('0x31')]:_0x2cfd7a[_0x7749('0x30')];if(_0x2ffbd9[_0x7749('0x2d')]['includeAll']){_0x1e2238[_0x7749('0x40')]=[{'all':!![]}];}_0x1e2238=_['merge']({},_0x1e2238,_0x2ffbd9['options']);return db[_0x7749('0x2a')][_0x7749('0x45')](_0x1e2238)[_0x7749('0x23')](handleEntityNotFound(_0x5f3947,null))['then'](respondWithResult(_0x5f3947,null))[_0x7749('0x43')](handleError(_0x5f3947,null));};exports[_0x7749('0x46')]=function(_0x3c8cdb,_0x44a734){return db[_0x7749('0x2a')][_0x7749('0x46')](_0x3c8cdb[_0x7749('0x47')],{})[_0x7749('0x23')](function(_0x32d596){var _0x33cc10=_0x3c8cdb['user'][_0x7749('0x25')]({'plain':!![]});if(!_0x33cc10)throw new Error(_0x7749('0x48'));if(_0x33cc10[_0x7749('0x49')]===_0x7749('0x4a')){var _0x2fde3d=_0x32d596[_0x7749('0x25')]({'plain':!![]});var _0x53f224=_0x7749('0x4b');return db[_0x7749('0x4c')][_0x7749('0x45')]({'where':{'name':_0x53f224,'userProfileId':_0x33cc10[_0x7749('0x4d')]},'raw':!![]})[_0x7749('0x23')](function(_0x9b58f4){if(_0x9b58f4&&_0x9b58f4[_0x7749('0x4e')]===0x0){return db[_0x7749('0x4f')][_0x7749('0x46')]({'name':_0x2fde3d['name'],'resourceId':_0x2fde3d['id'],'type':_0x7749('0x50'),'sectionId':_0x9b58f4['id']},{})[_0x7749('0x23')](function(){return _0x32d596;});}else{return _0x32d596;}})[_0x7749('0x43')](function(_0x5eb2cf){logger[_0x7749('0x51')](_0x7749('0x52'),_0x5eb2cf);throw _0x5eb2cf;});}return _0x32d596;})[_0x7749('0x23')](respondWithResult(_0x44a734,0xc9))[_0x7749('0x43')](handleError(_0x44a734,null));};exports[_0x7749('0x22')]=function(_0x464a18,_0x2a0a48){if(_0x464a18[_0x7749('0x47')]['id']){delete _0x464a18[_0x7749('0x47')]['id'];}return db[_0x7749('0x2a')][_0x7749('0x45')]({'where':{'id':_0x464a18['params']['id']}})[_0x7749('0x23')](handleEntityNotFound(_0x2a0a48,null))[_0x7749('0x23')](saveUpdates(_0x464a18[_0x7749('0x47')],null))[_0x7749('0x23')](respondWithResult(_0x2a0a48,null))['catch'](handleError(_0x2a0a48,null));};exports['destroy']=function(_0x5c32e4,_0x4db113){return db[_0x7749('0x2a')]['find']({'where':{'id':_0x5c32e4[_0x7749('0x53')]['id']}})[_0x7749('0x23')](handleEntityNotFound(_0x4db113,null))['then'](removeEntity(_0x4db113,null))['catch'](handleError(_0x4db113,null));};exports[_0x7749('0x54')]=function(_0x58b943,_0x24df7a){var _0x7ab764=0xa;var _0x2cf251=[_0x7749('0x55'),_0x7749('0x56'),_0x7749('0x57'),_0x7749('0x58')];var _0x59966d={'SUM':'SUM(%s)','COUNT':_0x7749('0x59'),'COUNT DISTINCT':_0x7749('0x5a'),'MAX':_0x7749('0x5b'),'MIN':_0x7749('0x5c'),'AVG':_0x7749('0x5d'),'GROUP_CONCAT':_0x7749('0x5e'),'GROUP_CONCAT ASC':_0x7749('0x5f'),'GROUP_CONCAT DESC':_0x7749('0x60')};var _0x35aaa9={'SEC_TO_TIME':_0x7749('0x61'),'DATE':_0x7749('0x62'),'HOUR':'HOUR(%s)','ROUND':_0x7749('0x63'),'UNIX_TIMESTAMP':_0x7749('0x64')};var _0x23eff0=function(_0x139c85){return!_[_0x7749('0x65')]([_0x7749('0x66'),_0x7749('0x67'),_0x7749('0x68'),_0x7749('0x69')],_0x139c85);};var _0x4ef72d=function(_0x2f8b0a){if(!_0x2f8b0a||!_0x2f8b0a[_0x7749('0x6a')]['length']){return'';}for(var _0x165314='(',_0x2a6f14=0x0;_0x2a6f14<_0x2f8b0a[_0x7749('0x6a')]['length'];_0x2a6f14+=0x1){_0x2a6f14>0x0&&(_0x165314+='\x20'+_0x2f8b0a[_0x7749('0x6b')]+'\x20');_0x165314+=_0x2f8b0a[_0x7749('0x6a')][_0x2a6f14][_0x7749('0x6c')]?_0x4ef72d(_0x2f8b0a['rules'][_0x2a6f14][_0x7749('0x6c')]):_0x2f8b0a[_0x7749('0x6a')][_0x2a6f14]['field']+'\x20'+_0x2f8b0a[_0x7749('0x6a')][_0x2a6f14][_0x7749('0x6d')]+(_0x23eff0(_0x2f8b0a[_0x7749('0x6a')][_0x2a6f14]['condition'])?'\x20'+_0x2f8b0a[_0x7749('0x6a')][_0x2a6f14][_0x7749('0x6e')]:'');}return _0x165314+')';};var _0x84b131={'where':{'id':_0x58b943[_0x7749('0x53')]['id']}},_0x33b41d,_0x581c71,_0x4bc393,_0x2a17cd,_0x560bf2;_0x84b131=_['merge']({},_0x84b131,_0x58b943[_0x7749('0x3e')]);return db[_0x7749('0x2a')][_0x7749('0x45')](_0x84b131)['then'](function(_0x57b9ad){if(_0x57b9ad){_0x33b41d=_0x57b9ad;return _0x57b9ad[_0x7749('0x6f')]();}return null;})[_0x7749('0x23')](function(_0x356809){if(_0x356809){if(!_0x356809[_0x7749('0x33')]){throw new db[(_0x7749('0x70'))][(_0x7749('0x71'))](_0x7749('0x72'),0x193);}_0x581c71=_0x356809;return db[_0x7749('0x73')][_0x7749('0x41')]({'raw':!![]});}return null;})['then'](function(_0x13c12f){if(_0x13c12f){_0x4bc393=_[_0x7749('0x74')](_0x13c12f,'id');var _0xd11960;var _0x287d8e=squel[_0x7749('0x75')]();_0x287d8e[_0x7749('0x76')](_0x33b41d['table']);for(var _0x32c68a=0x0;_0x32c68a<_0x581c71['length'];_0x32c68a+=0x1){_0xd11960=_0x581c71[_0x32c68a][_0x7749('0x77')]?_0x4bc393[_0x581c71[_0x32c68a][_0x7749('0x77')]][_0x7749('0x78')]:_0x581c71[_0x32c68a][_0x7749('0x3c')];_0xd11960=_0x581c71[_0x32c68a][_0x7749('0x79')]?_[_0x7749('0x7a')](_0x59966d[_0x581c71[_0x32c68a][_0x7749('0x79')]],'%s',_0xd11960):_0xd11960;_0xd11960=_0x581c71[_0x32c68a][_0x7749('0x7b')]?_[_0x7749('0x7a')](_0x35aaa9[_0x581c71[_0x32c68a][_0x7749('0x7b')]],'%s',_0xd11960):_0xd11960;if(_0x581c71[_0x32c68a][_0x7749('0x7c')]){_0x287d8e[_0x7749('0x6c')](_0xd11960);}_0x581c71[_0x32c68a]['orderBy']&&_0x287d8e[_0x7749('0x36')](_0xd11960,_0x581c71[_0x32c68a][_0x7749('0x7d')]==='DESC'?![]:!![]);_0x287d8e[_0x7749('0x3c')](_0xd11960,_0x581c71[_0x32c68a][_0x7749('0x7e')]||_0xd11960);}if(_0x33b41d[_0x7749('0x7f')]){_0x33b41d[_0x7749('0x7f')]=JSON['parse'](_0x33b41d[_0x7749('0x7f')]);for(var _0xe54e0e=0x0;_0xe54e0e<_0x33b41d[_0x7749('0x7f')][_0x7749('0x33')];_0xe54e0e+=0x1){if(_0x33b41d[_0x7749('0x7f')][_0xe54e0e][_0x7749('0x3b')]&&_[_0x7749('0x65')](_0x2cf251,_0x33b41d[_0x7749('0x7f')][_0xe54e0e][_0x7749('0x3b')])&&_0x33b41d[_0x7749('0x7f')][_0xe54e0e][_0x7749('0x80')]&&_0x33b41d['joins'][_0xe54e0e][_0x7749('0x81')]&&_0x33b41d[_0x7749('0x7f')][_0xe54e0e]['foreignKey']){_0x287d8e[_0x33b41d['joins'][_0xe54e0e][_0x7749('0x3b')]](_0x33b41d[_0x7749('0x7f')][_0xe54e0e][_0x7749('0x81')],null,util[_0x7749('0x7b')](_0x7749('0x82'),_0x33b41d[_0x7749('0x83')],_0x33b41d[_0x7749('0x7f')][_0xe54e0e][_0x7749('0x80')],_0x33b41d[_0x7749('0x7f')][_0xe54e0e][_0x7749('0x81')],_0x33b41d[_0x7749('0x7f')][_0xe54e0e]['foreignKey']));}}}if(_0x33b41d[_0x7749('0x84')]){_0x33b41d[_0x7749('0x84')]=JSON[_0x7749('0x85')](_0x33b41d[_0x7749('0x84')]);_0x287d8e[_0x7749('0x38')](_0x4ef72d(_0x33b41d[_0x7749('0x84')][_0x7749('0x6c')]));}_0x560bf2=_0x287d8e[_0x7749('0x86')]();_0x287d8e[_0x7749('0x1d')](_0x7ab764);_0x287d8e[_0x7749('0x1c')](0x0);logger['debug'](_0x7749('0x87'),_0x287d8e['toString']());return db[_0x7749('0x88')]['query'](_0x287d8e[_0x7749('0x89')](),{'type':db[_0x7749('0x88')][_0x7749('0x8a')][_0x7749('0x8b')]});}})[_0x7749('0x23')](respondWithResult(_0x24df7a,null))[_0x7749('0x43')](handleError(_0x24df7a,null));};function runReport(_0x381ae8,_0x5a4a03,_0x87f932){var _0x4e4d06=_0x5a4a03[_0x7749('0x27')];var _0xa63516=0xa;var _0x487d80=[_0x7749('0x55'),'left_join',_0x7749('0x57'),_0x7749('0x58')];var _0x948b6f={'SUM':'SUM(%s)','COUNT':_0x7749('0x59'),'COUNT DISTINCT':_0x7749('0x5a'),'MAX':'MAX(%s)','MIN':_0x7749('0x5c'),'AVG':'AVG(%s)','GROUP_CONCAT':_0x7749('0x5e'),'GROUP_CONCAT ASC':_0x7749('0x5f'),'GROUP_CONCAT DESC':_0x7749('0x60')};var _0x4a9631={'SEC_TO_TIME':_0x7749('0x61'),'DATE':_0x7749('0x62'),'HOUR':_0x7749('0x8c'),'ROUND':'ROUND(%s)','UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x27c8f5=function(_0x2f177a){return!_[_0x7749('0x65')](['IS\x20NULL',_0x7749('0x67'),_0x7749('0x68'),_0x7749('0x69')],_0x2f177a);};var _0x305896=function(_0x14f4cd){if(!_0x14f4cd||!_0x14f4cd[_0x7749('0x6a')][_0x7749('0x33')]){return'';}for(var _0x5c4134='(',_0x3dfe83=0x0;_0x3dfe83<_0x14f4cd[_0x7749('0x6a')][_0x7749('0x33')];_0x3dfe83+=0x1){_0x3dfe83>0x0&&(_0x5c4134+='\x20'+_0x14f4cd[_0x7749('0x6b')]+'\x20');_0x5c4134+=_0x14f4cd[_0x7749('0x6a')][_0x3dfe83]['group']?_0x305896(_0x14f4cd['rules'][_0x3dfe83][_0x7749('0x6c')]):_0x14f4cd[_0x7749('0x6a')][_0x3dfe83][_0x7749('0x3c')]+'\x20'+_0x14f4cd['rules'][_0x3dfe83][_0x7749('0x6d')]+(_0x27c8f5(_0x14f4cd[_0x7749('0x6a')][_0x3dfe83][_0x7749('0x6d')])?'\x20'+_0x14f4cd['rules'][_0x3dfe83][_0x7749('0x6e')]:'');}return _0x5c4134+')';};var _0x1c42a1={'where':{'id':_0x381ae8['id']}},_0xde69bd,_0x174495,_0x41b9a8,_0x2bb667,_0x497dbc;_0x1c42a1=_[_0x7749('0x3d')]({},_0x1c42a1,_0x87f932);return db[_0x7749('0x2a')]['find'](_0x1c42a1)[_0x7749('0x23')](function(_0x5335ba){if(_0x5335ba){_0xde69bd=_0x5335ba;return _0x5335ba['getFields']();}return null;})[_0x7749('0x23')](function(_0x22db0b){if(_0x22db0b){if(!_0x22db0b[_0x7749('0x33')]){throw new db['Sequelize']['ValidationErrorItem'](_0x7749('0x72'),0x193);}_0x174495=_0x22db0b;return db[_0x7749('0x73')][_0x7749('0x41')]({'raw':!![]});}return null;})[_0x7749('0x23')](function(_0x3976bd){if(_0x3976bd){_0x41b9a8=_['keyBy'](_0x3976bd,'id');var _0x5aa8f0;var _0x3c8ac8=squel[_0x7749('0x75')]();_0x3c8ac8['from'](_0xde69bd[_0x7749('0x83')]);for(var _0x5254ff=0x0;_0x5254ff<_0x174495[_0x7749('0x33')];_0x5254ff+=0x1){_0x5aa8f0=_0x174495[_0x5254ff][_0x7749('0x77')]?_0x41b9a8[_0x174495[_0x5254ff][_0x7749('0x77')]][_0x7749('0x78')]:_0x174495[_0x5254ff]['field'];_0x5aa8f0=_0x174495[_0x5254ff][_0x7749('0x79')]?_[_0x7749('0x7a')](_0x948b6f[_0x174495[_0x5254ff][_0x7749('0x79')]],'%s',_0x5aa8f0):_0x5aa8f0;_0x5aa8f0=_0x174495[_0x5254ff][_0x7749('0x7b')]?_['replace'](_0x4a9631[_0x174495[_0x5254ff][_0x7749('0x7b')]],'%s',_0x5aa8f0):_0x5aa8f0;if(_0x174495[_0x5254ff]['groupBy']){_0x3c8ac8[_0x7749('0x6c')](_0x5aa8f0);}_0x174495[_0x5254ff][_0x7749('0x7d')]&&_0x3c8ac8[_0x7749('0x36')](_0x5aa8f0,_0x174495[_0x5254ff][_0x7749('0x7d')]===_0x7749('0x8d')?![]:!![]);_0x3c8ac8[_0x7749('0x3c')](_0x5aa8f0,_0x174495[_0x5254ff][_0x7749('0x7e')]||_0x5aa8f0);}if(_0xde69bd['joins']){_0xde69bd['joins']=JSON[_0x7749('0x85')](_0xde69bd['joins']);for(var _0x413b22=0x0;_0x413b22<_0xde69bd[_0x7749('0x7f')][_0x7749('0x33')];_0x413b22+=0x1){if(_0xde69bd[_0x7749('0x7f')][_0x413b22]['type']&&_[_0x7749('0x65')](_0x487d80,_0xde69bd['joins'][_0x413b22]['type'])&&_0xde69bd[_0x7749('0x7f')][_0x413b22][_0x7749('0x80')]&&_0xde69bd[_0x7749('0x7f')][_0x413b22][_0x7749('0x81')]&&_0xde69bd['joins'][_0x413b22][_0x7749('0x8e')]){_0x3c8ac8[_0xde69bd[_0x7749('0x7f')][_0x413b22][_0x7749('0x3b')]](_0xde69bd[_0x7749('0x7f')][_0x413b22][_0x7749('0x81')],null,util['format'](_0x7749('0x82'),_0xde69bd[_0x7749('0x83')],_0xde69bd['joins'][_0x413b22][_0x7749('0x80')],_0xde69bd[_0x7749('0x7f')][_0x413b22]['foreignTable'],_0xde69bd['joins'][_0x413b22][_0x7749('0x8e')]));}}}if(_0xde69bd[_0x7749('0x84')]){_0xde69bd[_0x7749('0x84')]=JSON[_0x7749('0x85')](_0xde69bd['conditions']);_0x3c8ac8[_0x7749('0x38')](_0x305896(_0xde69bd[_0x7749('0x84')][_0x7749('0x6c')]));}_0x497dbc=_0x3c8ac8[_0x7749('0x86')]();_0x3c8ac8[_0x7749('0x1d')](_0xa63516);_0x3c8ac8['offset'](0x0);logger[_0x7749('0x8f')](_0x7749('0x87'),_0x3c8ac8['toString']());return db[_0x7749('0x88')][_0x7749('0x2d')](_0x3c8ac8[_0x7749('0x89')](),{'type':db[_0x7749('0x88')]['QueryTypes'][_0x7749('0x8b')]});}})[_0x7749('0x23')](function(_0xd9355c){if(!_0xd9355c[_0x7749('0x33')]){throw new db[(_0x7749('0x70'))][(_0x7749('0x71'))](_0x7749('0x90'),0xcc);}if(_0x5a4a03[_0x7749('0x91')]===_0x7749('0x92')){return null;}var _0x2b1e3f=_[_0x7749('0x3d')](_0x5a4a03,{'name':_0x5a4a03[_0x7749('0x93')]||_0x5a4a03[_0x7749('0x27')]||_0xde69bd[_0x7749('0x27')],'basename':_0x4e4d06,'savename':util[_0x7749('0x7b')](_0x7749('0x94'),_0x5a4a03['name']||_0xde69bd['name'],require('randomstring')[_0x7749('0x95')](0x4),_0x5a4a03[_0x7749('0x91')]||_0x7749('0x96')),'reportId':_0xde69bd['id'],'reportType':_0x7749('0x97')});return db[_0x7749('0x98')][_0x7749('0x46')](_0x2b1e3f,{'raw':!![]});})['then'](function(_0x1c865c){if(_0xde69bd['table']===_0x7749('0x99')){_0x497dbc[_0x7749('0x38')](_0xde69bd[_0x7749('0x83')]+_0x7749('0x9a'),_0x5a4a03[_0x7749('0x9b')],_0x5a4a03[_0x7749('0x9c')]);}else{_0x497dbc[_0x7749('0x38')](_0xde69bd[_0x7749('0x83')]+_0x7749('0x9d'),_0x5a4a03[_0x7749('0x9b')],_0x5a4a03[_0x7749('0x9c')]);}if(_0x1c865c){logger[_0x7749('0x9e')](_0x7749('0x9f'),_0x497dbc[_0x7749('0x89')]());require(_0x7749('0xa0'))[_0x7749('0xa1')](path[_0x7749('0x55')](__dirname,_0x7749('0xa2'),_0x1c865c[_0x7749('0x91')]),[_0x1c865c['id'],_0x497dbc[_0x7749('0x89')](),path[_0x7749('0x55')](__dirname,'../../files/reports',_0x1c865c[_0x7749('0xa3')]),_0x4e4d06]);return _0x1c865c;}else{var _0x15e307=squel[_0x7749('0x75')]();_0x15e307[_0x7749('0x76')]('('+_0x497dbc[_0x7749('0x89')]()+')',_0x7749('0xa4'));_0x15e307[_0x7749('0x3c')]('COUNT(*)',_0x7749('0x1b'));_0x497dbc[_0x7749('0x1d')](_0x5a4a03[_0x7749('0x1d')]||_0xa63516);_0x497dbc['offset'](_0x5a4a03[_0x7749('0x1c')]||0x0);return db[_0x7749('0x88')][_0x7749('0x2d')](_0x15e307[_0x7749('0x89')](),{'type':db[_0x7749('0x88')][_0x7749('0x8a')][_0x7749('0x8b')]})[_0x7749('0x23')](function(_0x3637a1){if(!_0x3637a1[_0x7749('0x33')]){_0x2bb667=0x0;}else{_0x2bb667=_0x3637a1[0x0][_0x7749('0x1b')]||0x0;}return db[_0x7749('0x88')]['query'](_0x497dbc[_0x7749('0x89')](),{'type':db[_0x7749('0x88')]['QueryTypes'][_0x7749('0x8b')]});})[_0x7749('0x23')](function(_0x11c793){return{'rows':_0x11c793||[],'count':_0x2bb667};});}});}exports[_0x7749('0xa5')]=function(_0x1136d6,_0x239c9){return runReport(_0x1136d6[_0x7749('0x53')],_0x1136d6[_0x7749('0x2d')],_0x1136d6['options'])[_0x7749('0x23')](respondWithResult(_0x239c9,null))[_0x7749('0x43')](handleError(_0x239c9,null));};exports['runReport']=runReport;exports[_0x7749('0x2d')]=function(_0x13ff2c,_0x128341){var _0x3996c6=0xa;var _0xed903a=[_0x7749('0x55'),_0x7749('0x56'),_0x7749('0x57'),_0x7749('0x58')];var _0x4fe481={'SUM':_0x7749('0xa6'),'COUNT':_0x7749('0x59'),'COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0x7749('0x5b'),'MIN':_0x7749('0x5c'),'AVG':'AVG(%s)','GROUP_CONCAT':_0x7749('0x5e'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0x7749('0x60')};var _0xbbc5de={'SEC_TO_TIME':_0x7749('0x61'),'DATE':_0x7749('0x62'),'HOUR':_0x7749('0x8c'),'ROUND':'ROUND(%s)','UNIX_TIMESTAMP':_0x7749('0x64')};var _0x574155=function(_0x520726){return!_['includes']([_0x7749('0x66'),_0x7749('0x67'),'IS\x20EMPTY',_0x7749('0x69')],_0x520726);};var _0x2dd95e=function(_0x2faae7){if(!_0x2faae7||!_0x2faae7[_0x7749('0x6a')][_0x7749('0x33')]){return'';}for(var _0x3a8be2='(',_0x47205c=0x0;_0x47205c<_0x2faae7[_0x7749('0x6a')][_0x7749('0x33')];_0x47205c+=0x1){_0x47205c>0x0&&(_0x3a8be2+='\x20'+_0x2faae7[_0x7749('0x6b')]+'\x20');_0x3a8be2+=_0x2faae7[_0x7749('0x6a')][_0x47205c][_0x7749('0x6c')]?_0x2dd95e(_0x2faae7['rules'][_0x47205c][_0x7749('0x6c')]):_0x2faae7[_0x7749('0x6a')][_0x47205c][_0x7749('0x3c')]+'\x20'+_0x2faae7[_0x7749('0x6a')][_0x47205c][_0x7749('0x6d')]+(_0x574155(_0x2faae7[_0x7749('0x6a')][_0x47205c][_0x7749('0x6d')])?'\x20'+_0x2faae7[_0x7749('0x6a')][_0x47205c][_0x7749('0x6e')]:'');}return _0x3a8be2+')';};var _0x5f52d1={'where':{'id':_0x13ff2c[_0x7749('0x53')]['id']}},_0x5cb65b,_0x5dbe87,_0x141008,_0x1581e4,_0x5475cc;_0x5f52d1=_[_0x7749('0x3d')]({},_0x5f52d1,_0x13ff2c['options']);return db['AnalyticCustomReport'][_0x7749('0x45')](_0x5f52d1)[_0x7749('0x23')](function(_0x5bebc9){if(_0x5bebc9){_0x5cb65b=_0x5bebc9;return _0x5bebc9[_0x7749('0x6f')]();}return null;})['then'](function(_0x5cb406){if(_0x5cb406){if(!_0x5cb406[_0x7749('0x33')]){throw new db['Sequelize'][(_0x7749('0x71'))](_0x7749('0x72'),0x193);}_0x5dbe87=_0x5cb406;return db[_0x7749('0x73')][_0x7749('0x41')]({'raw':!![]});}return null;})[_0x7749('0x23')](function(_0x9565a7){if(_0x9565a7){_0x141008=_[_0x7749('0x74')](_0x9565a7,'id');var _0x5da734;var _0x3f4cf0=squel[_0x7749('0x75')]();_0x3f4cf0['from'](_0x5cb65b['table']);for(var _0x445c36=0x0;_0x445c36<_0x5dbe87[_0x7749('0x33')];_0x445c36+=0x1){_0x5da734=_0x5dbe87[_0x445c36]['MetricId']?_0x141008[_0x5dbe87[_0x445c36]['MetricId']]['metric']:_0x5dbe87[_0x445c36][_0x7749('0x3c')];_0x5da734=_0x5dbe87[_0x445c36]['function']?_[_0x7749('0x7a')](_0x4fe481[_0x5dbe87[_0x445c36][_0x7749('0x79')]],'%s',_0x5da734):_0x5da734;_0x5da734=_0x5dbe87[_0x445c36]['format']?_[_0x7749('0x7a')](_0xbbc5de[_0x5dbe87[_0x445c36]['format']],'%s',_0x5da734):_0x5da734;if(_0x5dbe87[_0x445c36][_0x7749('0x7c')]){_0x3f4cf0[_0x7749('0x6c')](_0x5da734);}_0x5dbe87[_0x445c36][_0x7749('0x7d')]&&_0x3f4cf0[_0x7749('0x36')](_0x5da734,_0x5dbe87[_0x445c36][_0x7749('0x7d')]===_0x7749('0x8d')?![]:!![]);_0x3f4cf0[_0x7749('0x3c')](_0x5da734,_0x5dbe87[_0x445c36][_0x7749('0x7e')]||_0x5da734);}if(_0x5cb65b[_0x7749('0x7f')]){_0x5cb65b['joins']=JSON[_0x7749('0x85')](_0x5cb65b[_0x7749('0x7f')]);for(var _0x39e596=0x0;_0x39e596<_0x5cb65b[_0x7749('0x7f')][_0x7749('0x33')];_0x39e596+=0x1){if(_0x5cb65b[_0x7749('0x7f')][_0x39e596]['type']&&_['includes'](_0xed903a,_0x5cb65b[_0x7749('0x7f')][_0x39e596]['type'])&&_0x5cb65b[_0x7749('0x7f')][_0x39e596]['parentKey']&&_0x5cb65b[_0x7749('0x7f')][_0x39e596][_0x7749('0x81')]&&_0x5cb65b[_0x7749('0x7f')][_0x39e596][_0x7749('0x8e')]){_0x3f4cf0[_0x5cb65b[_0x7749('0x7f')][_0x39e596][_0x7749('0x3b')]](_0x5cb65b[_0x7749('0x7f')][_0x39e596][_0x7749('0x81')],null,util['format']('%s.%s\x20=\x20%s.%s',_0x5cb65b['table'],_0x5cb65b['joins'][_0x39e596]['parentKey'],_0x5cb65b['joins'][_0x39e596]['foreignTable'],_0x5cb65b[_0x7749('0x7f')][_0x39e596][_0x7749('0x8e')]));}}}if(_0x5cb65b[_0x7749('0x84')]){_0x5cb65b[_0x7749('0x84')]=JSON[_0x7749('0x85')](_0x5cb65b['conditions']);_0x3f4cf0[_0x7749('0x38')](_0x2dd95e(_0x5cb65b['conditions'][_0x7749('0x6c')]));}_0x5475cc=_0x3f4cf0['clone']();_0x3f4cf0[_0x7749('0x1d')](_0x3996c6);_0x3f4cf0[_0x7749('0x1c')](0x0);logger[_0x7749('0x8f')](_0x7749('0x87'),_0x3f4cf0[_0x7749('0x89')]());return db[_0x7749('0x88')][_0x7749('0x2d')](_0x3f4cf0['toString'](),{'type':db[_0x7749('0x88')][_0x7749('0x8a')][_0x7749('0x8b')]});}})[_0x7749('0x23')](function(){return{'sql':_0x5475cc[_0x7749('0x89')]()};})[_0x7749('0x23')](respondWithResult(_0x128341,null))[_0x7749('0x43')](handleError(_0x128341,null));};
\ No newline at end of file
+var _0x6f18=['then','get','CustomReports','destroy','error','stack','send','index','AnalyticCustomReport','rawAttributes','model','query','filters','intersection','fields','attributes','order','sort','where','filter','merge','map','VIRTUAL','options','includeAll','include','rows','catch','show','params','keys','length','find','create','body','user','UserProfileSection','userProfileId','name','preview','join','left_join','right_join','cross_join','SUM(%s)','COUNT(%s)','COUNT(DISTINCT\x20%s)','MAX(%s)','MIN(%s)','AVG(%s)','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','HOUR(%s)','ROUND(%s)','IS\x20NULL','IS\x20NOT\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','rules','operator','condition','value','Sequelize','ValidationErrorItem','Please\x20insert\x20at\x20least\x20one\x20field','AnalyticMetric','select','MetricId','metric','field','function','replace','format','groupBy','group','orderBy','DESC','alias','joins','parse','type','parentKey','foreignTable','table','foreignKey','conditions','clone','debug','Limited\x20Query:','toString','sequelize','QueryTypes','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','DATE(%s)','UNIX_TIMESTAMP(%s)','includes','getFields','%s.%s\x20=\x20%s.%s','No\x20available\x20data','output','web','generate','csv','custom','cdr','.calldate\x20BETWEEN\x20?\x20AND\x20?','startDate','.createdAt\x20BETWEEN\x20?\x20AND\x20?','endDate','info','Run\x20Query:','child_process','../../components/export/','savename','from','countTable','SELECT','run','runReport','SEC_TO_TIME(%s)','findAll','keyBy','html-pdf','rimraf','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','update'];(function(_0x5b5357,_0x90a7bc){var _0x38e038=function(_0x2785b0){while(--_0x2785b0){_0x5b5357['push'](_0x5b5357['shift']());}};_0x38e038(++_0x90a7bc);}(_0x6f18,0x1b4));var _0x86f1=function(_0x533990,_0x21fe8d){_0x533990=_0x533990-0x0;var _0x5a5e2a=_0x6f18[_0x533990];return _0x5a5e2a;};'use strict';var pdf=require(_0x86f1('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x86f1('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x86f1('0x2'));var rp=require(_0x86f1('0x3'));var moment=require('moment');var BPromise=require(_0x86f1('0x4'));var Mustache=require(_0x86f1('0x5'));var util=require('util');var path=require(_0x86f1('0x6'));var sox=require(_0x86f1('0x7'));var csv=require(_0x86f1('0x8'));var ejs=require(_0x86f1('0x9'));var fs=require('fs');var _=require(_0x86f1('0xa'));var squel=require('squel');var crypto=require(_0x86f1('0xb'));var jsforce=require(_0x86f1('0xc'));var deskjs=require(_0x86f1('0xd'));var toCsv=require(_0x86f1('0x8'));var querystring=require(_0x86f1('0xe'));var Papa=require('papaparse');var authService=require(_0x86f1('0xf'));var hardwareService=require(_0x86f1('0x10'));var Redis=require(_0x86f1('0x11'));var qs=require(_0x86f1('0x12'));var logger=require(_0x86f1('0x13'))(_0x86f1('0x14'));var utils=require(_0x86f1('0x15'));var config=require(_0x86f1('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x64a3c1,_0x452b3d){_0x452b3d=_0x452b3d||0xcc;return function(_0x2a0a3c){if(_0x2a0a3c){return _0x64a3c1[_0x86f1('0x17')](_0x452b3d);}return _0x64a3c1[_0x86f1('0x18')](_0x452b3d)[_0x86f1('0x19')]();};}function respondWithResult(_0x56d974,_0x45c038){_0x45c038=_0x45c038||0xc8;return function(_0x1c6aa6){if(_0x1c6aa6){return _0x56d974[_0x86f1('0x18')](_0x45c038)[_0x86f1('0x1a')](_0x1c6aa6);}};}function respondWithFilteredResult(_0x2a2281,_0x32ccd1){return function(_0x117cc4){if(_0x117cc4){var _0x2a05b5=_0x117cc4[_0x86f1('0x1b')],_0x512cde=_0x32ccd1[_0x86f1('0x1c')],_0x2cae10=_0x32ccd1[_0x86f1('0x1c')]+_0x32ccd1[_0x86f1('0x1d')],_0x15abcb;if(_0x2cae10>=_0x2a05b5){_0x2cae10=_0x2a05b5;_0x15abcb=0xc8;}else{_0x15abcb=0xce;}_0x2a2281[_0x86f1('0x18')](_0x15abcb);return _0x2a2281[_0x86f1('0x1e')](_0x86f1('0x1f'),_0x512cde+'-'+_0x2cae10+'/'+_0x2a05b5)['json'](_0x117cc4);}return null;};}function patchUpdates(_0x144018){return function(_0x31ded6){try{jsonpatch[_0x86f1('0x20')](_0x31ded6,_0x144018,!![]);}catch(_0x48136b){return BPromise['reject'](_0x48136b);}return _0x31ded6[_0x86f1('0x21')]();};}function saveUpdates(_0x27d172,_0x17cf5c){return function(_0xa990c){if(_0xa990c){return _0xa990c[_0x86f1('0x22')](_0x27d172)[_0x86f1('0x23')](function(_0x2b7e68){return _0x2b7e68;});}return null;};}function removeEntity(_0xe937bc,_0x2ba4e5){return function(_0x12acde){if(_0x12acde){return _0x12acde['destroy']()[_0x86f1('0x23')](function(){var _0x22e66f=_0x12acde[_0x86f1('0x24')]({'plain':!![]});var _0x49910d=_0x86f1('0x25');return db['UserProfileResource'][_0x86f1('0x26')]({'where':{'type':_0x49910d,'resourceId':_0x22e66f['id']}})[_0x86f1('0x23')](function(){return _0x12acde;});})[_0x86f1('0x23')](function(){_0xe937bc[_0x86f1('0x18')](0xcc)[_0x86f1('0x19')]();});}};}function handleEntityNotFound(_0x2efae9,_0x282155){return function(_0x3b3809){if(!_0x3b3809){_0x2efae9[_0x86f1('0x17')](0x194);}return _0x3b3809;};}function handleError(_0x20aa1b,_0x12a0b7){_0x12a0b7=_0x12a0b7||0x1f4;return function(_0x51d99b){logger[_0x86f1('0x27')](_0x51d99b[_0x86f1('0x28')]);if(_0x51d99b['name']){delete _0x51d99b['name'];}_0x20aa1b[_0x86f1('0x18')](_0x12a0b7)[_0x86f1('0x29')](_0x51d99b);};}exports[_0x86f1('0x2a')]=function(_0x5f18ad,_0x16e3b3){var _0x210ed8={},_0x4f4e25={},_0x3bfcf5={'count':0x0,'rows':[]};var _0x1d60c4=db[_0x86f1('0x2b')][_0x86f1('0x2c')];_0x4f4e25[_0x86f1('0x2d')]=_['keys'](_0x1d60c4);_0x4f4e25['query']=_['keys'](_0x5f18ad[_0x86f1('0x2e')]);_0x4f4e25[_0x86f1('0x2f')]=_[_0x86f1('0x30')](_0x4f4e25[_0x86f1('0x2d')],_0x4f4e25[_0x86f1('0x2e')]);_0x210ed8['attributes']=_[_0x86f1('0x30')](_0x4f4e25['model'],qs[_0x86f1('0x31')](_0x5f18ad['query'][_0x86f1('0x31')]));_0x210ed8[_0x86f1('0x32')]=_0x210ed8[_0x86f1('0x32')]['length']?_0x210ed8[_0x86f1('0x32')]:_0x4f4e25[_0x86f1('0x2d')];if(!_0x5f18ad[_0x86f1('0x2e')]['hasOwnProperty']('nolimit')){_0x210ed8[_0x86f1('0x1d')]=qs[_0x86f1('0x1d')](_0x5f18ad[_0x86f1('0x2e')][_0x86f1('0x1d')]);_0x210ed8[_0x86f1('0x1c')]=qs[_0x86f1('0x1c')](_0x5f18ad[_0x86f1('0x2e')][_0x86f1('0x1c')]);}_0x210ed8[_0x86f1('0x33')]=qs[_0x86f1('0x34')](_0x5f18ad[_0x86f1('0x2e')][_0x86f1('0x34')]);_0x210ed8[_0x86f1('0x35')]=qs['filters'](_['pick'](_0x5f18ad[_0x86f1('0x2e')],_0x4f4e25['filters']));if(_0x5f18ad['query'][_0x86f1('0x36')]){_0x210ed8[_0x86f1('0x35')]=_[_0x86f1('0x37')](_0x210ed8[_0x86f1('0x35')],{'$or':_[_0x86f1('0x38')](_0x1d60c4,function(_0x7a30de){if(_0x7a30de['type']['key']!==_0x86f1('0x39')){var _0x103203={};_0x103203[_0x7a30de['field']]={'$like':'%'+_0x5f18ad['query']['filter']+'%'};return _0x103203;}})});}_0x210ed8=_[_0x86f1('0x37')]({},_0x210ed8,_0x5f18ad[_0x86f1('0x3a')]);var _0x295c94={'where':_0x210ed8[_0x86f1('0x35')]};return db['AnalyticCustomReport'][_0x86f1('0x1b')](_0x295c94)[_0x86f1('0x23')](function(_0xfb6d2){_0x3bfcf5[_0x86f1('0x1b')]=_0xfb6d2;if(_0x5f18ad[_0x86f1('0x2e')][_0x86f1('0x3b')]){_0x210ed8[_0x86f1('0x3c')]=[{'all':!![]}];}return db[_0x86f1('0x2b')]['findAll'](_0x210ed8);})[_0x86f1('0x23')](function(_0x1a1062){_0x3bfcf5[_0x86f1('0x3d')]=_0x1a1062;return _0x3bfcf5;})[_0x86f1('0x23')](respondWithFilteredResult(_0x16e3b3,_0x210ed8))[_0x86f1('0x3e')](handleError(_0x16e3b3,null));};exports[_0x86f1('0x3f')]=function(_0x1d57d2,_0x618ad9){var _0x87d715={'raw':![],'where':{'id':_0x1d57d2[_0x86f1('0x40')]['id']}},_0x40a069={};_0x40a069[_0x86f1('0x2d')]=_[_0x86f1('0x41')](db['AnalyticCustomReport']['rawAttributes']);_0x40a069[_0x86f1('0x2e')]=_[_0x86f1('0x41')](_0x1d57d2[_0x86f1('0x2e')]);_0x40a069[_0x86f1('0x2f')]=_[_0x86f1('0x30')](_0x40a069[_0x86f1('0x2d')],_0x40a069[_0x86f1('0x2e')]);_0x87d715['attributes']=_[_0x86f1('0x30')](_0x40a069['model'],qs[_0x86f1('0x31')](_0x1d57d2['query'][_0x86f1('0x31')]));_0x87d715[_0x86f1('0x32')]=_0x87d715[_0x86f1('0x32')][_0x86f1('0x42')]?_0x87d715[_0x86f1('0x32')]:_0x40a069[_0x86f1('0x2d')];if(_0x1d57d2[_0x86f1('0x2e')][_0x86f1('0x3b')]){_0x87d715[_0x86f1('0x3c')]=[{'all':!![]}];}_0x87d715=_[_0x86f1('0x37')]({},_0x87d715,_0x1d57d2[_0x86f1('0x3a')]);return db[_0x86f1('0x2b')][_0x86f1('0x43')](_0x87d715)['then'](handleEntityNotFound(_0x618ad9,null))[_0x86f1('0x23')](respondWithResult(_0x618ad9,null))[_0x86f1('0x3e')](handleError(_0x618ad9,null));};exports[_0x86f1('0x44')]=function(_0x3e4b7a,_0x374fae){return db['AnalyticCustomReport'][_0x86f1('0x44')](_0x3e4b7a[_0x86f1('0x45')],{})[_0x86f1('0x23')](function(_0x2857ed){var _0x151720=_0x3e4b7a[_0x86f1('0x46')][_0x86f1('0x24')]({'plain':!![]});if(!_0x151720)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x151720['role']===_0x86f1('0x46')){var _0x56d733=_0x2857ed[_0x86f1('0x24')]({'plain':!![]});var _0x2fe07b='Reports';return db[_0x86f1('0x47')][_0x86f1('0x43')]({'where':{'name':_0x2fe07b,'userProfileId':_0x151720[_0x86f1('0x48')]},'raw':!![]})[_0x86f1('0x23')](function(_0x32ad7c){if(_0x32ad7c&&_0x32ad7c['autoAssociation']===0x0){return db['UserProfileResource'][_0x86f1('0x44')]({'name':_0x56d733[_0x86f1('0x49')],'resourceId':_0x56d733['id'],'type':_0x86f1('0x25'),'sectionId':_0x32ad7c['id']},{})[_0x86f1('0x23')](function(){return _0x2857ed;});}else{return _0x2857ed;}})[_0x86f1('0x3e')](function(_0x2cb1d3){logger[_0x86f1('0x27')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x2cb1d3);throw _0x2cb1d3;});}return _0x2857ed;})[_0x86f1('0x23')](respondWithResult(_0x374fae,0xc9))[_0x86f1('0x3e')](handleError(_0x374fae,null));};exports[_0x86f1('0x22')]=function(_0x15838a,_0x18f1d1){if(_0x15838a[_0x86f1('0x45')]['id']){delete _0x15838a[_0x86f1('0x45')]['id'];}return db[_0x86f1('0x2b')]['find']({'where':{'id':_0x15838a[_0x86f1('0x40')]['id']}})['then'](handleEntityNotFound(_0x18f1d1,null))['then'](saveUpdates(_0x15838a[_0x86f1('0x45')],null))[_0x86f1('0x23')](respondWithResult(_0x18f1d1,null))['catch'](handleError(_0x18f1d1,null));};exports[_0x86f1('0x26')]=function(_0x1f2374,_0xb5c3db){return db[_0x86f1('0x2b')]['find']({'where':{'id':_0x1f2374['params']['id']}})[_0x86f1('0x23')](handleEntityNotFound(_0xb5c3db,null))[_0x86f1('0x23')](removeEntity(_0xb5c3db,null))[_0x86f1('0x3e')](handleError(_0xb5c3db,null));};exports[_0x86f1('0x4a')]=function(_0x4bc340,_0xd6b242){var _0x40bf42=0xa;var _0x1832b0=[_0x86f1('0x4b'),_0x86f1('0x4c'),_0x86f1('0x4d'),_0x86f1('0x4e')];var _0x33da10={'SUM':_0x86f1('0x4f'),'COUNT':_0x86f1('0x50'),'COUNT DISTINCT':_0x86f1('0x51'),'MAX':_0x86f1('0x52'),'MIN':_0x86f1('0x53'),'AVG':_0x86f1('0x54'),'GROUP_CONCAT':_0x86f1('0x55'),'GROUP_CONCAT ASC':_0x86f1('0x56'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x2a43b7={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':'DATE(%s)','HOUR':_0x86f1('0x57'),'ROUND':_0x86f1('0x58'),'UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x5a65a5=function(_0xb2e276){return!_['includes']([_0x86f1('0x59'),_0x86f1('0x5a'),_0x86f1('0x5b'),_0x86f1('0x5c')],_0xb2e276);};var _0x3a203a=function(_0x59b7dd){if(!_0x59b7dd||!_0x59b7dd['rules'][_0x86f1('0x42')]){return'';}for(var _0x2de29e='(',_0x319713=0x0;_0x319713<_0x59b7dd[_0x86f1('0x5d')][_0x86f1('0x42')];_0x319713+=0x1){_0x319713>0x0&&(_0x2de29e+='\x20'+_0x59b7dd[_0x86f1('0x5e')]+'\x20');_0x2de29e+=_0x59b7dd['rules'][_0x319713]['group']?_0x3a203a(_0x59b7dd[_0x86f1('0x5d')][_0x319713]['group']):_0x59b7dd[_0x86f1('0x5d')][_0x319713]['field']+'\x20'+_0x59b7dd[_0x86f1('0x5d')][_0x319713]['condition']+(_0x5a65a5(_0x59b7dd[_0x86f1('0x5d')][_0x319713][_0x86f1('0x5f')])?'\x20'+_0x59b7dd[_0x86f1('0x5d')][_0x319713][_0x86f1('0x60')]:'');}return _0x2de29e+')';};var _0x4ec953={'where':{'id':_0x4bc340[_0x86f1('0x40')]['id']}},_0x2703c9,_0x209710,_0x273626,_0x6dd836,_0x5d6ef6;_0x4ec953=_[_0x86f1('0x37')]({},_0x4ec953,_0x4bc340[_0x86f1('0x3a')]);return db[_0x86f1('0x2b')][_0x86f1('0x43')](_0x4ec953)['then'](function(_0x909e9b){if(_0x909e9b){_0x2703c9=_0x909e9b;return _0x909e9b['getFields']();}return null;})[_0x86f1('0x23')](function(_0x1457bf){if(_0x1457bf){if(!_0x1457bf[_0x86f1('0x42')]){throw new db[(_0x86f1('0x61'))][(_0x86f1('0x62'))](_0x86f1('0x63'),0x193);}_0x209710=_0x1457bf;return db[_0x86f1('0x64')]['findAll']({'raw':!![]});}return null;})['then'](function(_0x3f5e9f){if(_0x3f5e9f){_0x273626=_['keyBy'](_0x3f5e9f,'id');var _0x314d95;var _0x2d5cc6=squel[_0x86f1('0x65')]();_0x2d5cc6['from'](_0x2703c9['table']);for(var _0x14bec1=0x0;_0x14bec1<_0x209710[_0x86f1('0x42')];_0x14bec1+=0x1){_0x314d95=_0x209710[_0x14bec1][_0x86f1('0x66')]?_0x273626[_0x209710[_0x14bec1]['MetricId']][_0x86f1('0x67')]:_0x209710[_0x14bec1][_0x86f1('0x68')];_0x314d95=_0x209710[_0x14bec1][_0x86f1('0x69')]?_[_0x86f1('0x6a')](_0x33da10[_0x209710[_0x14bec1][_0x86f1('0x69')]],'%s',_0x314d95):_0x314d95;_0x314d95=_0x209710[_0x14bec1][_0x86f1('0x6b')]?_[_0x86f1('0x6a')](_0x2a43b7[_0x209710[_0x14bec1][_0x86f1('0x6b')]],'%s',_0x314d95):_0x314d95;if(_0x209710[_0x14bec1][_0x86f1('0x6c')]){_0x2d5cc6[_0x86f1('0x6d')](_0x314d95);}_0x209710[_0x14bec1][_0x86f1('0x6e')]&&_0x2d5cc6['order'](_0x314d95,_0x209710[_0x14bec1]['orderBy']===_0x86f1('0x6f')?![]:!![]);_0x2d5cc6[_0x86f1('0x68')](_0x314d95,_0x209710[_0x14bec1][_0x86f1('0x70')]||_0x314d95);}if(_0x2703c9['joins']){_0x2703c9[_0x86f1('0x71')]=JSON[_0x86f1('0x72')](_0x2703c9[_0x86f1('0x71')]);for(var _0x52c8ed=0x0;_0x52c8ed<_0x2703c9[_0x86f1('0x71')][_0x86f1('0x42')];_0x52c8ed+=0x1){if(_0x2703c9[_0x86f1('0x71')][_0x52c8ed][_0x86f1('0x73')]&&_['includes'](_0x1832b0,_0x2703c9[_0x86f1('0x71')][_0x52c8ed][_0x86f1('0x73')])&&_0x2703c9[_0x86f1('0x71')][_0x52c8ed][_0x86f1('0x74')]&&_0x2703c9['joins'][_0x52c8ed][_0x86f1('0x75')]&&_0x2703c9[_0x86f1('0x71')][_0x52c8ed]['foreignKey']){_0x2d5cc6[_0x2703c9[_0x86f1('0x71')][_0x52c8ed][_0x86f1('0x73')]](_0x2703c9['joins'][_0x52c8ed][_0x86f1('0x75')],null,util[_0x86f1('0x6b')]('%s.%s\x20=\x20%s.%s',_0x2703c9[_0x86f1('0x76')],_0x2703c9['joins'][_0x52c8ed]['parentKey'],_0x2703c9[_0x86f1('0x71')][_0x52c8ed]['foreignTable'],_0x2703c9['joins'][_0x52c8ed][_0x86f1('0x77')]));}}}if(_0x2703c9[_0x86f1('0x78')]){_0x2703c9['conditions']=JSON[_0x86f1('0x72')](_0x2703c9[_0x86f1('0x78')]);_0x2d5cc6[_0x86f1('0x35')](_0x3a203a(_0x2703c9[_0x86f1('0x78')][_0x86f1('0x6d')]));}_0x5d6ef6=_0x2d5cc6[_0x86f1('0x79')]();_0x2d5cc6[_0x86f1('0x1d')](_0x40bf42);_0x2d5cc6['offset'](0x0);logger[_0x86f1('0x7a')](_0x86f1('0x7b'),_0x2d5cc6[_0x86f1('0x7c')]());return db['sequelize'][_0x86f1('0x2e')](_0x2d5cc6['toString'](),{'type':db[_0x86f1('0x7d')][_0x86f1('0x7e')]['SELECT']});}})['then'](respondWithResult(_0xd6b242,null))[_0x86f1('0x3e')](handleError(_0xd6b242,null));};function runReport(_0x17274c,_0x1d181b,_0x4e3314){var _0x226157=_0x1d181b[_0x86f1('0x49')];var _0x5d6b19=0xa;var _0x4682c4=[_0x86f1('0x4b'),_0x86f1('0x4c'),_0x86f1('0x4d'),'cross_join'];var _0x450447={'SUM':'SUM(%s)','COUNT':_0x86f1('0x50'),'COUNT DISTINCT':_0x86f1('0x51'),'MAX':_0x86f1('0x52'),'MIN':_0x86f1('0x53'),'AVG':_0x86f1('0x54'),'GROUP_CONCAT':_0x86f1('0x55'),'GROUP_CONCAT ASC':_0x86f1('0x56'),'GROUP_CONCAT DESC':_0x86f1('0x7f')};var _0x3f0ddf={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0x86f1('0x80'),'HOUR':'HOUR(%s)','ROUND':'ROUND(%s)','UNIX_TIMESTAMP':_0x86f1('0x81')};var _0xc8fee2=function(_0x1db42c){return!_[_0x86f1('0x82')]([_0x86f1('0x59'),_0x86f1('0x5a'),'IS\x20EMPTY',_0x86f1('0x5c')],_0x1db42c);};var _0x3003f1=function(_0x12a163){if(!_0x12a163||!_0x12a163[_0x86f1('0x5d')]['length']){return'';}for(var _0x5296b4='(',_0x405569=0x0;_0x405569<_0x12a163['rules']['length'];_0x405569+=0x1){_0x405569>0x0&&(_0x5296b4+='\x20'+_0x12a163[_0x86f1('0x5e')]+'\x20');_0x5296b4+=_0x12a163[_0x86f1('0x5d')][_0x405569][_0x86f1('0x6d')]?_0x3003f1(_0x12a163[_0x86f1('0x5d')][_0x405569][_0x86f1('0x6d')]):_0x12a163['rules'][_0x405569][_0x86f1('0x68')]+'\x20'+_0x12a163['rules'][_0x405569][_0x86f1('0x5f')]+(_0xc8fee2(_0x12a163[_0x86f1('0x5d')][_0x405569]['condition'])?'\x20'+_0x12a163[_0x86f1('0x5d')][_0x405569][_0x86f1('0x60')]:'');}return _0x5296b4+')';};var _0x56090b={'where':{'id':_0x17274c['id']}},_0x412b6a,_0x375d80,_0x151f38,_0x3a3acd,_0x9fae58;_0x56090b=_[_0x86f1('0x37')]({},_0x56090b,_0x4e3314);return db[_0x86f1('0x2b')][_0x86f1('0x43')](_0x56090b)[_0x86f1('0x23')](function(_0x40c508){if(_0x40c508){_0x412b6a=_0x40c508;return _0x40c508[_0x86f1('0x83')]();}return null;})[_0x86f1('0x23')](function(_0x30168a){if(_0x30168a){if(!_0x30168a[_0x86f1('0x42')]){throw new db['Sequelize'][(_0x86f1('0x62'))]('Please\x20insert\x20at\x20least\x20one\x20field',0x193);}_0x375d80=_0x30168a;return db[_0x86f1('0x64')]['findAll']({'raw':!![]});}return null;})[_0x86f1('0x23')](function(_0x1c4543){if(_0x1c4543){_0x151f38=_['keyBy'](_0x1c4543,'id');var _0x41e2dc;var _0x535836=squel[_0x86f1('0x65')]();_0x535836['from'](_0x412b6a[_0x86f1('0x76')]);for(var _0x512329=0x0;_0x512329<_0x375d80['length'];_0x512329+=0x1){_0x41e2dc=_0x375d80[_0x512329]['MetricId']?_0x151f38[_0x375d80[_0x512329][_0x86f1('0x66')]][_0x86f1('0x67')]:_0x375d80[_0x512329][_0x86f1('0x68')];_0x41e2dc=_0x375d80[_0x512329][_0x86f1('0x69')]?_[_0x86f1('0x6a')](_0x450447[_0x375d80[_0x512329][_0x86f1('0x69')]],'%s',_0x41e2dc):_0x41e2dc;_0x41e2dc=_0x375d80[_0x512329][_0x86f1('0x6b')]?_[_0x86f1('0x6a')](_0x3f0ddf[_0x375d80[_0x512329][_0x86f1('0x6b')]],'%s',_0x41e2dc):_0x41e2dc;if(_0x375d80[_0x512329][_0x86f1('0x6c')]){_0x535836[_0x86f1('0x6d')](_0x41e2dc);}_0x375d80[_0x512329][_0x86f1('0x6e')]&&_0x535836[_0x86f1('0x33')](_0x41e2dc,_0x375d80[_0x512329][_0x86f1('0x6e')]==='DESC'?![]:!![]);_0x535836[_0x86f1('0x68')](_0x41e2dc,_0x375d80[_0x512329][_0x86f1('0x70')]||_0x41e2dc);}if(_0x412b6a[_0x86f1('0x71')]){_0x412b6a[_0x86f1('0x71')]=JSON[_0x86f1('0x72')](_0x412b6a['joins']);for(var _0x4fc156=0x0;_0x4fc156<_0x412b6a[_0x86f1('0x71')][_0x86f1('0x42')];_0x4fc156+=0x1){if(_0x412b6a[_0x86f1('0x71')][_0x4fc156][_0x86f1('0x73')]&&_[_0x86f1('0x82')](_0x4682c4,_0x412b6a[_0x86f1('0x71')][_0x4fc156][_0x86f1('0x73')])&&_0x412b6a[_0x86f1('0x71')][_0x4fc156][_0x86f1('0x74')]&&_0x412b6a['joins'][_0x4fc156][_0x86f1('0x75')]&&_0x412b6a['joins'][_0x4fc156][_0x86f1('0x77')]){_0x535836[_0x412b6a[_0x86f1('0x71')][_0x4fc156][_0x86f1('0x73')]](_0x412b6a[_0x86f1('0x71')][_0x4fc156][_0x86f1('0x75')],null,util[_0x86f1('0x6b')](_0x86f1('0x84'),_0x412b6a[_0x86f1('0x76')],_0x412b6a[_0x86f1('0x71')][_0x4fc156][_0x86f1('0x74')],_0x412b6a[_0x86f1('0x71')][_0x4fc156][_0x86f1('0x75')],_0x412b6a[_0x86f1('0x71')][_0x4fc156][_0x86f1('0x77')]));}}}if(_0x412b6a[_0x86f1('0x78')]){_0x412b6a[_0x86f1('0x78')]=JSON[_0x86f1('0x72')](_0x412b6a['conditions']);_0x535836['where'](_0x3003f1(_0x412b6a[_0x86f1('0x78')][_0x86f1('0x6d')]));}_0x9fae58=_0x535836[_0x86f1('0x79')]();_0x535836['limit'](_0x5d6b19);_0x535836[_0x86f1('0x1c')](0x0);logger[_0x86f1('0x7a')](_0x86f1('0x7b'),_0x535836[_0x86f1('0x7c')]());return db[_0x86f1('0x7d')][_0x86f1('0x2e')](_0x535836[_0x86f1('0x7c')](),{'type':db['sequelize'][_0x86f1('0x7e')]['SELECT']});}})[_0x86f1('0x23')](function(_0x1ab35b){if(!_0x1ab35b[_0x86f1('0x42')]){throw new db[(_0x86f1('0x61'))][(_0x86f1('0x62'))](_0x86f1('0x85'),0xcc);}if(_0x1d181b[_0x86f1('0x86')]===_0x86f1('0x87')){return null;}var _0x5bb1d1=_[_0x86f1('0x37')](_0x1d181b,{'name':_0x1d181b['fullPath']||_0x1d181b[_0x86f1('0x49')]||_0x412b6a['name'],'basename':_0x226157,'savename':util[_0x86f1('0x6b')]('%s-%s.%s',_0x1d181b[_0x86f1('0x49')]||_0x412b6a[_0x86f1('0x49')],require('randomstring')[_0x86f1('0x88')](0x4),_0x1d181b[_0x86f1('0x86')]||_0x86f1('0x89')),'reportId':_0x412b6a['id'],'reportType':_0x86f1('0x8a')});return db['AnalyticExtractedReport'][_0x86f1('0x44')](_0x5bb1d1,{'raw':!![]});})[_0x86f1('0x23')](function(_0x4344b0){if(_0x412b6a[_0x86f1('0x76')]===_0x86f1('0x8b')){_0x9fae58[_0x86f1('0x35')](_0x412b6a[_0x86f1('0x76')]+_0x86f1('0x8c'),_0x1d181b[_0x86f1('0x8d')],_0x1d181b['endDate']);}else{_0x9fae58[_0x86f1('0x35')](_0x412b6a[_0x86f1('0x76')]+_0x86f1('0x8e'),_0x1d181b[_0x86f1('0x8d')],_0x1d181b[_0x86f1('0x8f')]);}if(_0x4344b0){logger[_0x86f1('0x90')](_0x86f1('0x91'),_0x9fae58['toString']());require(_0x86f1('0x92'))['fork'](path[_0x86f1('0x4b')](__dirname,_0x86f1('0x93'),_0x4344b0[_0x86f1('0x86')]),[_0x4344b0['id'],_0x9fae58[_0x86f1('0x7c')](),path[_0x86f1('0x4b')](__dirname,'../../files/reports',_0x4344b0[_0x86f1('0x94')]),_0x226157]);return _0x4344b0;}else{var _0x582f0b=squel[_0x86f1('0x65')]();_0x582f0b[_0x86f1('0x95')]('('+_0x9fae58[_0x86f1('0x7c')]()+')',_0x86f1('0x96'));_0x582f0b[_0x86f1('0x68')]('COUNT(*)','count');_0x9fae58[_0x86f1('0x1d')](_0x1d181b['limit']||_0x5d6b19);_0x9fae58[_0x86f1('0x1c')](_0x1d181b[_0x86f1('0x1c')]||0x0);return db[_0x86f1('0x7d')][_0x86f1('0x2e')](_0x582f0b[_0x86f1('0x7c')](),{'type':db['sequelize'][_0x86f1('0x7e')][_0x86f1('0x97')]})[_0x86f1('0x23')](function(_0x2884bf){if(!_0x2884bf[_0x86f1('0x42')]){_0x3a3acd=0x0;}else{_0x3a3acd=_0x2884bf[0x0]['count']||0x0;}return db[_0x86f1('0x7d')][_0x86f1('0x2e')](_0x9fae58[_0x86f1('0x7c')](),{'type':db[_0x86f1('0x7d')][_0x86f1('0x7e')][_0x86f1('0x97')]});})['then'](function(_0x5534a7){return{'rows':_0x5534a7||[],'count':_0x3a3acd};});}});}exports[_0x86f1('0x98')]=function(_0x2104f1,_0x1d5048){return runReport(_0x2104f1[_0x86f1('0x40')],_0x2104f1[_0x86f1('0x2e')],_0x2104f1[_0x86f1('0x3a')])[_0x86f1('0x23')](respondWithResult(_0x1d5048,null))[_0x86f1('0x3e')](handleError(_0x1d5048,null));};exports[_0x86f1('0x99')]=runReport;exports[_0x86f1('0x2e')]=function(_0x20fbd0,_0x293903){var _0x24b231=0xa;var _0x4fde03=[_0x86f1('0x4b'),'left_join',_0x86f1('0x4d'),_0x86f1('0x4e')];var _0x5dcdfc={'SUM':_0x86f1('0x4f'),'COUNT':'COUNT(%s)','COUNT DISTINCT':_0x86f1('0x51'),'MAX':_0x86f1('0x52'),'MIN':_0x86f1('0x53'),'AVG':_0x86f1('0x54'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0x86f1('0x56'),'GROUP_CONCAT DESC':_0x86f1('0x7f')};var _0x391740={'SEC_TO_TIME':_0x86f1('0x9a'),'DATE':'DATE(%s)','HOUR':_0x86f1('0x57'),'ROUND':'ROUND(%s)','UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x4a8a60=function(_0x88c024){return!_[_0x86f1('0x82')]([_0x86f1('0x59'),'IS\x20NOT\x20NULL',_0x86f1('0x5b'),_0x86f1('0x5c')],_0x88c024);};var _0x310199=function(_0x3d6234){if(!_0x3d6234||!_0x3d6234[_0x86f1('0x5d')][_0x86f1('0x42')]){return'';}for(var _0x379782='(',_0x2a0551=0x0;_0x2a0551<_0x3d6234['rules'][_0x86f1('0x42')];_0x2a0551+=0x1){_0x2a0551>0x0&&(_0x379782+='\x20'+_0x3d6234[_0x86f1('0x5e')]+'\x20');_0x379782+=_0x3d6234[_0x86f1('0x5d')][_0x2a0551]['group']?_0x310199(_0x3d6234[_0x86f1('0x5d')][_0x2a0551][_0x86f1('0x6d')]):_0x3d6234[_0x86f1('0x5d')][_0x2a0551][_0x86f1('0x68')]+'\x20'+_0x3d6234[_0x86f1('0x5d')][_0x2a0551][_0x86f1('0x5f')]+(_0x4a8a60(_0x3d6234[_0x86f1('0x5d')][_0x2a0551][_0x86f1('0x5f')])?'\x20'+_0x3d6234['rules'][_0x2a0551]['value']:'');}return _0x379782+')';};var _0x1103f6={'where':{'id':_0x20fbd0['params']['id']}},_0x47a136,_0x4d9658,_0x5cdeef,_0x1f75b4,_0x3ffe19;_0x1103f6=_[_0x86f1('0x37')]({},_0x1103f6,_0x20fbd0['options']);return db[_0x86f1('0x2b')][_0x86f1('0x43')](_0x1103f6)[_0x86f1('0x23')](function(_0x4ba52a){if(_0x4ba52a){_0x47a136=_0x4ba52a;return _0x4ba52a['getFields']();}return null;})[_0x86f1('0x23')](function(_0x26accb){if(_0x26accb){if(!_0x26accb[_0x86f1('0x42')]){throw new db['Sequelize']['ValidationErrorItem'](_0x86f1('0x63'),0x193);}_0x4d9658=_0x26accb;return db[_0x86f1('0x64')][_0x86f1('0x9b')]({'raw':!![]});}return null;})[_0x86f1('0x23')](function(_0x1c4c75){if(_0x1c4c75){_0x5cdeef=_[_0x86f1('0x9c')](_0x1c4c75,'id');var _0x2f2338;var _0x3fdc9a=squel[_0x86f1('0x65')]();_0x3fdc9a[_0x86f1('0x95')](_0x47a136[_0x86f1('0x76')]);for(var _0x337935=0x0;_0x337935<_0x4d9658[_0x86f1('0x42')];_0x337935+=0x1){_0x2f2338=_0x4d9658[_0x337935][_0x86f1('0x66')]?_0x5cdeef[_0x4d9658[_0x337935][_0x86f1('0x66')]]['metric']:_0x4d9658[_0x337935][_0x86f1('0x68')];_0x2f2338=_0x4d9658[_0x337935][_0x86f1('0x69')]?_['replace'](_0x5dcdfc[_0x4d9658[_0x337935]['function']],'%s',_0x2f2338):_0x2f2338;_0x2f2338=_0x4d9658[_0x337935][_0x86f1('0x6b')]?_[_0x86f1('0x6a')](_0x391740[_0x4d9658[_0x337935][_0x86f1('0x6b')]],'%s',_0x2f2338):_0x2f2338;if(_0x4d9658[_0x337935][_0x86f1('0x6c')]){_0x3fdc9a[_0x86f1('0x6d')](_0x2f2338);}_0x4d9658[_0x337935]['orderBy']&&_0x3fdc9a['order'](_0x2f2338,_0x4d9658[_0x337935][_0x86f1('0x6e')]==='DESC'?![]:!![]);_0x3fdc9a[_0x86f1('0x68')](_0x2f2338,_0x4d9658[_0x337935][_0x86f1('0x70')]||_0x2f2338);}if(_0x47a136[_0x86f1('0x71')]){_0x47a136[_0x86f1('0x71')]=JSON['parse'](_0x47a136[_0x86f1('0x71')]);for(var _0x426678=0x0;_0x426678<_0x47a136['joins'][_0x86f1('0x42')];_0x426678+=0x1){if(_0x47a136[_0x86f1('0x71')][_0x426678]['type']&&_[_0x86f1('0x82')](_0x4fde03,_0x47a136[_0x86f1('0x71')][_0x426678][_0x86f1('0x73')])&&_0x47a136['joins'][_0x426678][_0x86f1('0x74')]&&_0x47a136['joins'][_0x426678][_0x86f1('0x75')]&&_0x47a136[_0x86f1('0x71')][_0x426678][_0x86f1('0x77')]){_0x3fdc9a[_0x47a136[_0x86f1('0x71')][_0x426678][_0x86f1('0x73')]](_0x47a136['joins'][_0x426678][_0x86f1('0x75')],null,util[_0x86f1('0x6b')]('%s.%s\x20=\x20%s.%s',_0x47a136[_0x86f1('0x76')],_0x47a136['joins'][_0x426678][_0x86f1('0x74')],_0x47a136[_0x86f1('0x71')][_0x426678]['foreignTable'],_0x47a136[_0x86f1('0x71')][_0x426678]['foreignKey']));}}}if(_0x47a136[_0x86f1('0x78')]){_0x47a136[_0x86f1('0x78')]=JSON[_0x86f1('0x72')](_0x47a136[_0x86f1('0x78')]);_0x3fdc9a[_0x86f1('0x35')](_0x310199(_0x47a136['conditions'][_0x86f1('0x6d')]));}_0x3ffe19=_0x3fdc9a['clone']();_0x3fdc9a['limit'](_0x24b231);_0x3fdc9a[_0x86f1('0x1c')](0x0);logger[_0x86f1('0x7a')](_0x86f1('0x7b'),_0x3fdc9a['toString']());return db[_0x86f1('0x7d')][_0x86f1('0x2e')](_0x3fdc9a['toString'](),{'type':db['sequelize'][_0x86f1('0x7e')][_0x86f1('0x97')]});}})[_0x86f1('0x23')](function(){return{'sql':_0x3ffe19[_0x86f1('0x7c')]()};})[_0x86f1('0x23')](respondWithResult(_0x293903,null))['catch'](handleError(_0x293903,null));};
\ No newline at end of file
index 6898222..91c3ecb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x535f=['../../config/logger','moment','bluebird','request-promise','./analyticCustomReport.attributes','define','analytics_custom_reports'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x535f,0x18f));var _0xf535=function(_0x23f19e,_0x4d583b){_0x23f19e=_0x23f19e-0x0;var _0x2a95d4=_0x535f[_0x23f19e];return _0x2a95d4;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xf535('0x0'))('api');var moment=require(_0xf535('0x1'));var BPromise=require(_0xf535('0x2'));var rp=require(_0xf535('0x3'));var attributes=require(_0xf535('0x4'));module['exports']=function(_0x33ff81,_0x53c914){return _0x33ff81[_0xf535('0x5')]('AnalyticCustomReport',attributes,{'tableName':_0xf535('0x6'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x772f=['bluebird','request-promise','./analyticCustomReport.attributes','exports','define','AnalyticCustomReport','util','../../config/logger','api','moment'];(function(_0x447cfd,_0x499376){var _0x1ca3d6=function(_0x33faa8){while(--_0x33faa8){_0x447cfd['push'](_0x447cfd['shift']());}};_0x1ca3d6(++_0x499376);}(_0x772f,0xc4));var _0xf772=function(_0xd8a8af,_0x1e93f0){_0xd8a8af=_0xd8a8af-0x0;var _0x5b7278=_0x772f[_0xd8a8af];return _0x5b7278;};'use strict';var _=require('lodash');var util=require(_0xf772('0x0'));var logger=require(_0xf772('0x1'))(_0xf772('0x2'));var moment=require(_0xf772('0x3'));var BPromise=require(_0xf772('0x4'));var rp=require(_0xf772('0x5'));var attributes=require(_0xf772('0x6'));module[_0xf772('0x7')]=function(_0x16c862,_0x5ee972){return _0x16c862[_0xf772('0x8')](_0xf772('0x9'),attributes,{'tableName':'analytics_custom_reports','paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 9ff0deb..9492611 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(_0x9bca53,_0x59b4f8){var _0x3894bc=function(_0x1ae67d){while(--_0x1ae67d){_0x9bca53['push'](_0x9bca53['shift']());}};_0x3894bc(++_0x59b4f8);}(_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(_0x2b441f,_0x249bac){var _0x1cc771=function(_0x33b705){while(--_0x33b705){_0x2b441f['push'](_0x2b441f['shift']());}};_0x1cc771(++_0x249bac);}(_0xd8b0,0xad));var _0x0d8b=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xd8b0[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0x0d8b('0x0'));var util=require(_0x0d8b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x0d8b('0x2'));var db=require(_0x0d8b('0x3'))['db'];var utils=require(_0x0d8b('0x4'));var logger=require(_0x0d8b('0x5'))(_0x0d8b('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x0d8b('0x7')][_0x0d8b('0x8')]({'port':0x232a});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 17efa68..973d6cb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x63a5=['/:id/query','query','post','create','update','delete','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticCustomReport.controller','index','/:id','isAuthenticated','/:id/preview','preview','get','/:id/run','run'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x63a5,0x18e));var _0x563a=function(_0x12f688,_0x585c25){_0x12f688=_0x12f688-0x0;var _0x59c3de=_0x63a5[_0x12f688];return _0x59c3de;};'use strict';var multer=require(_0x563a('0x0'));var util=require(_0x563a('0x1'));var path=require(_0x563a('0x2'));var timeout=require('connect-timeout');var express=require(_0x563a('0x3'));var router=express['Router']();var auth=require(_0x563a('0x4'));var interaction=require(_0x563a('0x5'));var config=require(_0x563a('0x6'));var controller=require(_0x563a('0x7'));router['get']('/',auth['isAuthenticated'](),controller[_0x563a('0x8')]);router['get'](_0x563a('0x9'),auth[_0x563a('0xa')](),controller['show']);router['get'](_0x563a('0xb'),auth[_0x563a('0xa')](),controller[_0x563a('0xc')]);router[_0x563a('0xd')](_0x563a('0xe'),auth[_0x563a('0xa')](),controller[_0x563a('0xf')]);router[_0x563a('0xd')](_0x563a('0x10'),auth[_0x563a('0xa')](),controller[_0x563a('0x11')]);router[_0x563a('0x12')]('/',auth[_0x563a('0xa')](),controller[_0x563a('0x13')]);router['put'](_0x563a('0x9'),auth[_0x563a('0xa')](),controller[_0x563a('0x14')]);router[_0x563a('0x15')](_0x563a('0x9'),auth[_0x563a('0xa')](),controller['destroy']);module[_0x563a('0x16')]=router;
\ No newline at end of file
+var _0xda2d=['query','post','update','delete','destroy','exports','util','path','connect-timeout','express','Router','./analyticCustomReport.controller','get','isAuthenticated','index','/:id','show','/:id/preview','preview','run','/:id/query'];(function(_0x25d6ae,_0x24d098){var _0x2b8d7b=function(_0x320c9d){while(--_0x320c9d){_0x25d6ae['push'](_0x25d6ae['shift']());}};_0x2b8d7b(++_0x24d098);}(_0xda2d,0x102));var _0xdda2=function(_0x10d78a,_0x52dfae){_0x10d78a=_0x10d78a-0x0;var _0x2bedf1=_0xda2d[_0x10d78a];return _0x2bedf1;};'use strict';var multer=require('multer');var util=require(_0xdda2('0x0'));var path=require(_0xdda2('0x1'));var timeout=require(_0xdda2('0x2'));var express=require(_0xdda2('0x3'));var router=express[_0xdda2('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xdda2('0x5'));router[_0xdda2('0x6')]('/',auth[_0xdda2('0x7')](),controller[_0xdda2('0x8')]);router[_0xdda2('0x6')](_0xdda2('0x9'),auth[_0xdda2('0x7')](),controller[_0xdda2('0xa')]);router[_0xdda2('0x6')](_0xdda2('0xb'),auth['isAuthenticated'](),controller[_0xdda2('0xc')]);router[_0xdda2('0x6')]('/:id/run',auth[_0xdda2('0x7')](),controller[_0xdda2('0xd')]);router[_0xdda2('0x6')](_0xdda2('0xe'),auth[_0xdda2('0x7')](),controller[_0xdda2('0xf')]);router[_0xdda2('0x10')]('/',auth[_0xdda2('0x7')](),controller['create']);router['put']('/:id',auth[_0xdda2('0x7')](),controller[_0xdda2('0x11')]);router[_0xdda2('0x12')](_0xdda2('0x9'),auth[_0xdda2('0x7')](),controller[_0xdda2('0x13')]);module[_0xdda2('0x14')]=router;
\ No newline at end of file
index 6e66264..b8991f0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9886=['exports','STRING','TEXT'];(function(_0x4ed1d4,_0x512d9a){var _0x28e363=function(_0x2bdfb7){while(--_0x2bdfb7){_0x4ed1d4['push'](_0x4ed1d4['shift']());}};_0x28e363(++_0x512d9a);}(_0x9886,0x69));var _0x6988=function(_0x134a0d,_0x1c26b9){_0x134a0d=_0x134a0d-0x0;var _0x23957f=_0x9886[_0x134a0d];return _0x23957f;};'use strict';var Sequelize=require('sequelize');module[_0x6988('0x0')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize['STRING']},'parent':{'type':Sequelize[_0x6988('0x1')]},'table':{'type':Sequelize[_0x6988('0x1')]},'conditions':{'type':Sequelize[_0x6988('0x2')]},'joins':{'type':Sequelize['TEXT']}};
\ No newline at end of file
+var _0x2d44=['exports','STRING','TEXT','sequelize'];(function(_0x113337,_0x3157b0){var _0x5cdd4b=function(_0x9c843){while(--_0x9c843){_0x113337['push'](_0x113337['shift']());}};_0x5cdd4b(++_0x3157b0);}(_0x2d44,0xcf));var _0x42d4=function(_0x1db338,_0x47798){_0x1db338=_0x1db338-0x0;var _0x526a23=_0x2d44[_0x1db338];return _0x526a23;};'use strict';var Sequelize=require(_0x42d4('0x0'));module[_0x42d4('0x1')]={'name':{'type':Sequelize[_0x42d4('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x42d4('0x2')]},'parent':{'type':Sequelize[_0x42d4('0x2')]},'table':{'type':Sequelize[_0x42d4('0x2')]},'conditions':{'type':Sequelize['TEXT']},'joins':{'type':Sequelize[_0x42d4('0x3')]}};
\ No newline at end of file
index cecb76d..4a671a3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x19ec=['sort','where','pick','filters','filter','merge','map','type','key','options','count','includeAll','findAll','rows','catch','params','rawAttributes','fields','length','include','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','preview','join','left_join','right_join','SUM(%s)','COUNT(%s)','COUNT(DISTINCT\x20%s)','MIN(%s)','GROUP_CONCAT(%s)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)','DATE(%s)','HOUR(%s)','ROUND(%s)','UNIX_TIMESTAMP(%s)','IS\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','rules','operator','group','field','condition','value','getFields','Sequelize','ValidationErrorItem','Please\x20insert\x20at\x20least\x20one\x20field','select','from','MetricId','function','replace','format','orderBy','DESC','joins','parse','parentKey','foreignTable','%s.%s\x20=\x20%s.%s','table','foreignKey','conditions','clone','Limited\x20Query:','toString','sequelize','QueryTypes','SELECT','MAX(%s)','SEC_TO_TIME(%s)','includes','AnalyticMetric','keyBy','metric','No\x20available\x20data','output','web','fullPath','%s-%s.%s','randomstring','generate','csv','AnalyticExtractedReport','cdr','.calldate\x20BETWEEN\x20?\x20AND\x20?','endDate','child_process','fork','../../components/export/','../../files/reports','countTable','COUNT(*)','runReport','AVG(%s)','IS\x20NOT\x20NULL','debug','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','ejs','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','end','status','json','offset','limit','set','Content-Range','reject','save','update','then','destroy','get','DefaultReports','UserProfileResource','error','stack','name','send','AnalyticDefaultReport','model','keys','query','intersection','attributes','hasOwnProperty','nolimit','order'];(function(_0x278bb0,_0x1bc3d2){var _0x2c9508=function(_0x2070e7){while(--_0x2070e7){_0x278bb0['push'](_0x278bb0['shift']());}};_0x2c9508(++_0x1bc3d2);}(_0x19ec,0x1a5));var _0xc19e=function(_0x273c39,_0x1052e6){_0x273c39=_0x273c39-0x0;var _0x46d6b5=_0x19ec[_0x273c39];return _0x46d6b5;};'use strict';var pdf=require(_0xc19e('0x0'));var emlformat=require(_0xc19e('0x1'));var rimraf=require(_0xc19e('0x2'));var zipdir=require(_0xc19e('0x3'));var jsonpatch=require(_0xc19e('0x4'));var rp=require(_0xc19e('0x5'));var moment=require('moment');var BPromise=require(_0xc19e('0x6'));var Mustache=require(_0xc19e('0x7'));var util=require(_0xc19e('0x8'));var path=require(_0xc19e('0x9'));var sox=require('sox');var csv=require(_0xc19e('0xa'));var ejs=require(_0xc19e('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xc19e('0xc'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xc19e('0xd'));var toCsv=require(_0xc19e('0xa'));var querystring=require('querystring');var Papa=require(_0xc19e('0xe'));var authService=require(_0xc19e('0xf'));var hardwareService=require(_0xc19e('0x10'));var Redis=require(_0xc19e('0x11'));var qs=require(_0xc19e('0x12'));var logger=require(_0xc19e('0x13'))('api');var utils=require(_0xc19e('0x14'));var config=require('../../config/environment');var db=require(_0xc19e('0x15'))['db'];function respondWithStatusCode(_0x599c8c,_0x3eb347){_0x3eb347=_0x3eb347||0xcc;return function(_0xdf6451){if(_0xdf6451){return _0x599c8c['sendStatus'](_0x3eb347);}return _0x599c8c['status'](_0x3eb347)[_0xc19e('0x16')]();};}function respondWithResult(_0x151a78,_0x38771b){_0x38771b=_0x38771b||0xc8;return function(_0x3aedfa){if(_0x3aedfa){return _0x151a78[_0xc19e('0x17')](_0x38771b)[_0xc19e('0x18')](_0x3aedfa);}};}function respondWithFilteredResult(_0x22cdcd,_0x1a46ae){return function(_0x37e104){if(_0x37e104){var _0xe45c23=_0x37e104['count'],_0x3bd490=_0x1a46ae[_0xc19e('0x19')],_0x160f03=_0x1a46ae[_0xc19e('0x19')]+_0x1a46ae[_0xc19e('0x1a')],_0x41ad4b;if(_0x160f03>=_0xe45c23){_0x160f03=_0xe45c23;_0x41ad4b=0xc8;}else{_0x41ad4b=0xce;}_0x22cdcd[_0xc19e('0x17')](_0x41ad4b);return _0x22cdcd[_0xc19e('0x1b')](_0xc19e('0x1c'),_0x3bd490+'-'+_0x160f03+'/'+_0xe45c23)[_0xc19e('0x18')](_0x37e104);}return null;};}function patchUpdates(_0x13a23d){return function(_0x40d435){try{jsonpatch['apply'](_0x40d435,_0x13a23d,!![]);}catch(_0x1fccd7){return BPromise[_0xc19e('0x1d')](_0x1fccd7);}return _0x40d435[_0xc19e('0x1e')]();};}function saveUpdates(_0x4fc1d1,_0x11ca66){return function(_0xa261){if(_0xa261){return _0xa261[_0xc19e('0x1f')](_0x4fc1d1)[_0xc19e('0x20')](function(_0x395719){return _0x395719;});}return null;};}function removeEntity(_0x4d7050,_0x154052){return function(_0x3ce40e){if(_0x3ce40e){return _0x3ce40e[_0xc19e('0x21')]()[_0xc19e('0x20')](function(){var _0x5c41ec=_0x3ce40e[_0xc19e('0x22')]({'plain':!![]});var _0xcd8752=_0xc19e('0x23');return db[_0xc19e('0x24')]['destroy']({'where':{'type':_0xcd8752,'resourceId':_0x5c41ec['id']}})[_0xc19e('0x20')](function(){return _0x3ce40e;});})[_0xc19e('0x20')](function(){_0x4d7050[_0xc19e('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x64259f,_0x178e7e){return function(_0x5debac){if(!_0x5debac){_0x64259f['sendStatus'](0x194);}return _0x5debac;};}function handleError(_0x16eacf,_0x1684ee){_0x1684ee=_0x1684ee||0x1f4;return function(_0x421120){logger[_0xc19e('0x25')](_0x421120[_0xc19e('0x26')]);if(_0x421120[_0xc19e('0x27')]){delete _0x421120[_0xc19e('0x27')];}_0x16eacf[_0xc19e('0x17')](_0x1684ee)[_0xc19e('0x28')](_0x421120);};}exports['index']=function(_0x5ebf57,_0x3e247e){var _0xcd96cb={},_0x21da10={},_0x30d9a0={'count':0x0,'rows':[]};var _0x3b4f6c=db[_0xc19e('0x29')]['rawAttributes'];_0x21da10[_0xc19e('0x2a')]=_[_0xc19e('0x2b')](_0x3b4f6c);_0x21da10[_0xc19e('0x2c')]=_[_0xc19e('0x2b')](_0x5ebf57[_0xc19e('0x2c')]);_0x21da10['filters']=_[_0xc19e('0x2d')](_0x21da10[_0xc19e('0x2a')],_0x21da10['query']);_0xcd96cb['attributes']=_[_0xc19e('0x2d')](_0x21da10[_0xc19e('0x2a')],qs['fields'](_0x5ebf57['query']['fields']));_0xcd96cb[_0xc19e('0x2e')]=_0xcd96cb[_0xc19e('0x2e')]['length']?_0xcd96cb[_0xc19e('0x2e')]:_0x21da10['model'];if(!_0x5ebf57[_0xc19e('0x2c')][_0xc19e('0x2f')](_0xc19e('0x30'))){_0xcd96cb[_0xc19e('0x1a')]=qs[_0xc19e('0x1a')](_0x5ebf57[_0xc19e('0x2c')][_0xc19e('0x1a')]);_0xcd96cb[_0xc19e('0x19')]=qs[_0xc19e('0x19')](_0x5ebf57[_0xc19e('0x2c')][_0xc19e('0x19')]);}_0xcd96cb[_0xc19e('0x31')]=qs[_0xc19e('0x32')](_0x5ebf57[_0xc19e('0x2c')][_0xc19e('0x32')]);_0xcd96cb[_0xc19e('0x33')]=qs['filters'](_[_0xc19e('0x34')](_0x5ebf57[_0xc19e('0x2c')],_0x21da10[_0xc19e('0x35')]));if(_0x5ebf57['query'][_0xc19e('0x36')]){_0xcd96cb[_0xc19e('0x33')]=_[_0xc19e('0x37')](_0xcd96cb['where'],{'$or':_[_0xc19e('0x38')](_0x3b4f6c,function(_0x3e9bb2){if(_0x3e9bb2[_0xc19e('0x39')][_0xc19e('0x3a')]!=='VIRTUAL'){var _0x2f3b59={};_0x2f3b59[_0x3e9bb2['field']]={'$like':'%'+_0x5ebf57[_0xc19e('0x2c')][_0xc19e('0x36')]+'%'};return _0x2f3b59;}})});}_0xcd96cb=_[_0xc19e('0x37')]({},_0xcd96cb,_0x5ebf57[_0xc19e('0x3b')]);var _0xfaf412={'where':_0xcd96cb[_0xc19e('0x33')]};return db[_0xc19e('0x29')][_0xc19e('0x3c')](_0xfaf412)[_0xc19e('0x20')](function(_0x43a424){_0x30d9a0[_0xc19e('0x3c')]=_0x43a424;if(_0x5ebf57['query'][_0xc19e('0x3d')]){_0xcd96cb['include']=[{'all':!![]}];}return db[_0xc19e('0x29')][_0xc19e('0x3e')](_0xcd96cb);})['then'](function(_0x1c5cec){_0x30d9a0[_0xc19e('0x3f')]=_0x1c5cec;return _0x30d9a0;})['then'](respondWithFilteredResult(_0x3e247e,_0xcd96cb))[_0xc19e('0x40')](handleError(_0x3e247e,null));};exports['show']=function(_0x5a8f3b,_0x1118a7){var _0x2dd6ab={'raw':!![],'where':{'id':_0x5a8f3b[_0xc19e('0x41')]['id']}},_0x63c5d1={};_0x63c5d1[_0xc19e('0x2a')]=_[_0xc19e('0x2b')](db[_0xc19e('0x29')][_0xc19e('0x42')]);_0x63c5d1[_0xc19e('0x2c')]=_[_0xc19e('0x2b')](_0x5a8f3b[_0xc19e('0x2c')]);_0x63c5d1[_0xc19e('0x35')]=_[_0xc19e('0x2d')](_0x63c5d1[_0xc19e('0x2a')],_0x63c5d1[_0xc19e('0x2c')]);_0x2dd6ab[_0xc19e('0x2e')]=_[_0xc19e('0x2d')](_0x63c5d1['model'],qs[_0xc19e('0x43')](_0x5a8f3b['query'][_0xc19e('0x43')]));_0x2dd6ab[_0xc19e('0x2e')]=_0x2dd6ab['attributes'][_0xc19e('0x44')]?_0x2dd6ab[_0xc19e('0x2e')]:_0x63c5d1[_0xc19e('0x2a')];if(_0x5a8f3b['query']['includeAll']){_0x2dd6ab[_0xc19e('0x45')]=[{'all':!![]}];}_0x2dd6ab=_['merge']({},_0x2dd6ab,_0x5a8f3b[_0xc19e('0x3b')]);return db[_0xc19e('0x29')][_0xc19e('0x46')](_0x2dd6ab)[_0xc19e('0x20')](handleEntityNotFound(_0x1118a7,null))[_0xc19e('0x20')](respondWithResult(_0x1118a7,null))['catch'](handleError(_0x1118a7,null));};exports[_0xc19e('0x47')]=function(_0x32d615,_0x48edc3){return db['AnalyticDefaultReport']['create'](_0x32d615[_0xc19e('0x48')],{})[_0xc19e('0x20')](function(_0x3ef209){var _0x5ee7b4=_0x32d615['user'][_0xc19e('0x22')]({'plain':!![]});if(!_0x5ee7b4)throw new Error(_0xc19e('0x49'));if(_0x5ee7b4[_0xc19e('0x4a')]==='user'){var _0x358cfb=_0x3ef209[_0xc19e('0x22')]({'plain':!![]});var _0x55ea39='Reports';return db[_0xc19e('0x4b')][_0xc19e('0x46')]({'where':{'name':_0x55ea39,'userProfileId':_0x5ee7b4[_0xc19e('0x4c')]},'raw':!![]})[_0xc19e('0x20')](function(_0x300ee6){if(_0x300ee6&&_0x300ee6[_0xc19e('0x4d')]===0x0){return db[_0xc19e('0x24')][_0xc19e('0x47')]({'name':_0x358cfb[_0xc19e('0x27')],'resourceId':_0x358cfb['id'],'type':_0xc19e('0x23'),'sectionId':_0x300ee6['id']},{})['then'](function(){return _0x3ef209;});}else{return _0x3ef209;}})[_0xc19e('0x40')](function(_0xac6632){logger['error'](_0xc19e('0x4e'),_0xac6632);throw _0xac6632;});}return _0x3ef209;})[_0xc19e('0x20')](respondWithResult(_0x48edc3,0xc9))[_0xc19e('0x40')](handleError(_0x48edc3,null));};exports['update']=function(_0xd589a9,_0x4994a7){if(_0xd589a9[_0xc19e('0x48')]['id']){delete _0xd589a9[_0xc19e('0x48')]['id'];}return db[_0xc19e('0x29')][_0xc19e('0x46')]({'where':{'id':_0xd589a9[_0xc19e('0x41')]['id']}})[_0xc19e('0x20')](handleEntityNotFound(_0x4994a7,null))[_0xc19e('0x20')](saveUpdates(_0xd589a9[_0xc19e('0x48')],null))[_0xc19e('0x20')](respondWithResult(_0x4994a7,null))[_0xc19e('0x40')](handleError(_0x4994a7,null));};exports[_0xc19e('0x21')]=function(_0x259719,_0x1ad146){return db[_0xc19e('0x29')]['find']({'where':{'id':_0x259719['params']['id']}})[_0xc19e('0x20')](handleEntityNotFound(_0x1ad146,null))[_0xc19e('0x20')](removeEntity(_0x1ad146,null))[_0xc19e('0x40')](handleError(_0x1ad146,null));};exports[_0xc19e('0x4f')]=function(_0x59d270,_0x12790f){var _0x342639=0xa;var _0x13afb3=[_0xc19e('0x50'),_0xc19e('0x51'),_0xc19e('0x52'),'cross_join'];var _0x2220e2={'SUM':_0xc19e('0x53'),'COUNT':_0xc19e('0x54'),'COUNT DISTINCT':_0xc19e('0x55'),'MAX':'MAX(%s)','MIN':_0xc19e('0x56'),'AVG':'AVG(%s)','GROUP_CONCAT':_0xc19e('0x57'),'GROUP_CONCAT ASC':_0xc19e('0x58'),'GROUP_CONCAT DESC':_0xc19e('0x59')};var _0x146bee={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0xc19e('0x5a'),'HOUR':_0xc19e('0x5b'),'ROUND':_0xc19e('0x5c'),'UNIX_TIMESTAMP':_0xc19e('0x5d')};var _0x2a109f=function(_0x4ef2ca){return!_['includes']([_0xc19e('0x5e'),'IS\x20NOT\x20NULL',_0xc19e('0x5f'),_0xc19e('0x60')],_0x4ef2ca);};var _0x2a25bd=function(_0x44ec0f){if(!_0x44ec0f||!_0x44ec0f[_0xc19e('0x61')][_0xc19e('0x44')]){return'';}for(var _0x436bd1='(',_0x3afe98=0x0;_0x3afe98<_0x44ec0f['rules'][_0xc19e('0x44')];_0x3afe98+=0x1){_0x3afe98>0x0&&(_0x436bd1+='\x20'+_0x44ec0f[_0xc19e('0x62')]+'\x20');_0x436bd1+=_0x44ec0f['rules'][_0x3afe98][_0xc19e('0x63')]?_0x2a25bd(_0x44ec0f['rules'][_0x3afe98]['group']):_0x44ec0f[_0xc19e('0x61')][_0x3afe98][_0xc19e('0x64')]+'\x20'+_0x44ec0f[_0xc19e('0x61')][_0x3afe98][_0xc19e('0x65')]+(_0x2a109f(_0x44ec0f[_0xc19e('0x61')][_0x3afe98]['condition'])?'\x20'+_0x44ec0f[_0xc19e('0x61')][_0x3afe98][_0xc19e('0x66')]:'');}return _0x436bd1+')';};var _0xbef991={'where':{'id':_0x59d270[_0xc19e('0x41')]['id']}},_0x34b383,_0x53f667,_0x2a8f22,_0x42cad0,_0x43e7db;_0xbef991=_[_0xc19e('0x37')]({},_0xbef991,_0x59d270['options']);return db[_0xc19e('0x29')]['find'](_0xbef991)[_0xc19e('0x20')](function(_0x2a1410){if(_0x2a1410){_0x34b383=_0x2a1410;return _0x2a1410[_0xc19e('0x67')]();}return null;})[_0xc19e('0x20')](function(_0x392e96){if(_0x392e96){if(!_0x392e96[_0xc19e('0x44')]){throw new db[(_0xc19e('0x68'))][(_0xc19e('0x69'))](_0xc19e('0x6a'),0x193);}_0x53f667=_0x392e96;return db['AnalyticMetric'][_0xc19e('0x3e')]({'raw':!![]});}return null;})[_0xc19e('0x20')](function(_0x19c11e){if(_0x19c11e){_0x2a8f22=_['keyBy'](_0x19c11e,'id');var _0x5de6ac;var _0x5522a3=squel[_0xc19e('0x6b')]();_0x5522a3[_0xc19e('0x6c')](_0x34b383['table']);for(var _0x22228f=0x0;_0x22228f<_0x53f667[_0xc19e('0x44')];_0x22228f+=0x1){_0x5de6ac=_0x53f667[_0x22228f][_0xc19e('0x6d')]?_0x2a8f22[_0x53f667[_0x22228f][_0xc19e('0x6d')]]['metric']:_0x53f667[_0x22228f][_0xc19e('0x64')];_0x5de6ac=_0x53f667[_0x22228f][_0xc19e('0x6e')]?_[_0xc19e('0x6f')](_0x2220e2[_0x53f667[_0x22228f]['function']],'%s',_0x5de6ac):_0x5de6ac;_0x5de6ac=_0x53f667[_0x22228f]['format']?_[_0xc19e('0x6f')](_0x146bee[_0x53f667[_0x22228f][_0xc19e('0x70')]],'%s',_0x5de6ac):_0x5de6ac;if(_0x53f667[_0x22228f]['groupBy']){_0x5522a3[_0xc19e('0x63')](_0x5de6ac);}_0x53f667[_0x22228f]['orderBy']&&_0x5522a3[_0xc19e('0x31')](_0x5de6ac,_0x53f667[_0x22228f][_0xc19e('0x71')]===_0xc19e('0x72')?![]:!![]);_0x5522a3[_0xc19e('0x64')](_0x5de6ac,_0x53f667[_0x22228f]['alias']||_0x5de6ac);}if(_0x34b383['joins']){_0x34b383[_0xc19e('0x73')]=JSON[_0xc19e('0x74')](_0x34b383['joins']);for(var _0x6c63af=0x0;_0x6c63af<_0x34b383[_0xc19e('0x73')][_0xc19e('0x44')];_0x6c63af+=0x1){if(_0x34b383[_0xc19e('0x73')][_0x6c63af][_0xc19e('0x39')]&&_['includes'](_0x13afb3,_0x34b383[_0xc19e('0x73')][_0x6c63af][_0xc19e('0x39')])&&_0x34b383[_0xc19e('0x73')][_0x6c63af][_0xc19e('0x75')]&&_0x34b383[_0xc19e('0x73')][_0x6c63af][_0xc19e('0x76')]&&_0x34b383[_0xc19e('0x73')][_0x6c63af]['foreignKey']){_0x5522a3[_0x34b383[_0xc19e('0x73')][_0x6c63af][_0xc19e('0x39')]](_0x34b383['joins'][_0x6c63af][_0xc19e('0x76')],null,util[_0xc19e('0x70')](_0xc19e('0x77'),_0x34b383[_0xc19e('0x78')],_0x34b383[_0xc19e('0x73')][_0x6c63af]['parentKey'],_0x34b383[_0xc19e('0x73')][_0x6c63af][_0xc19e('0x76')],_0x34b383[_0xc19e('0x73')][_0x6c63af][_0xc19e('0x79')]));}}}if(_0x34b383[_0xc19e('0x7a')]){_0x34b383['conditions']=JSON['parse'](_0x34b383[_0xc19e('0x7a')]);_0x5522a3[_0xc19e('0x33')](_0x2a25bd(_0x34b383[_0xc19e('0x7a')]['group']));}_0x43e7db=_0x5522a3[_0xc19e('0x7b')]();_0x5522a3[_0xc19e('0x1a')](_0x342639);_0x5522a3[_0xc19e('0x19')](0x0);logger['debug'](_0xc19e('0x7c'),_0x5522a3[_0xc19e('0x7d')]());return db[_0xc19e('0x7e')][_0xc19e('0x2c')](_0x5522a3[_0xc19e('0x7d')](),{'type':db[_0xc19e('0x7e')][_0xc19e('0x7f')][_0xc19e('0x80')]});}})[_0xc19e('0x20')](respondWithResult(_0x12790f,null))['catch'](handleError(_0x12790f,null));};function runReport(_0x38a4a3,_0x29fe7d,_0x33de78){var _0x50663b=_0x29fe7d[_0xc19e('0x27')];var _0x57ea06=0xa;var _0xc93df5=[_0xc19e('0x50'),_0xc19e('0x51'),_0xc19e('0x52'),'cross_join'];var _0x12d8c9={'SUM':_0xc19e('0x53'),'COUNT':'COUNT(%s)','COUNT DISTINCT':'COUNT(DISTINCT\x20%s)','MAX':_0xc19e('0x81'),'MIN':_0xc19e('0x56'),'AVG':'AVG(%s)','GROUP_CONCAT':_0xc19e('0x57'),'GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0xc19e('0x59')};var _0x4613ed={'SEC_TO_TIME':_0xc19e('0x82'),'DATE':_0xc19e('0x5a'),'HOUR':_0xc19e('0x5b'),'ROUND':_0xc19e('0x5c'),'UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x2b9124=function(_0x526429){return!_[_0xc19e('0x83')](['IS\x20NULL','IS\x20NOT\x20NULL',_0xc19e('0x5f'),_0xc19e('0x60')],_0x526429);};var _0x27354e=function(_0x59a018){if(!_0x59a018||!_0x59a018[_0xc19e('0x61')][_0xc19e('0x44')]){return'';}for(var _0x4dff87='(',_0x16da92=0x0;_0x16da92<_0x59a018[_0xc19e('0x61')][_0xc19e('0x44')];_0x16da92+=0x1){_0x16da92>0x0&&(_0x4dff87+='\x20'+_0x59a018[_0xc19e('0x62')]+'\x20');_0x4dff87+=_0x59a018[_0xc19e('0x61')][_0x16da92][_0xc19e('0x63')]?_0x27354e(_0x59a018[_0xc19e('0x61')][_0x16da92][_0xc19e('0x63')]):_0x59a018['rules'][_0x16da92][_0xc19e('0x64')]+'\x20'+_0x59a018[_0xc19e('0x61')][_0x16da92][_0xc19e('0x65')]+(_0x2b9124(_0x59a018[_0xc19e('0x61')][_0x16da92][_0xc19e('0x65')])?'\x20'+_0x59a018['rules'][_0x16da92]['value']:'');}return _0x4dff87+')';};var _0x56f635={'where':{'id':_0x38a4a3['id']}},_0x3bae1a,_0x3144cd,_0x3847b7,_0x202605,_0x506709;_0x56f635=_[_0xc19e('0x37')]({},_0x56f635,_0x33de78);return db['AnalyticDefaultReport'][_0xc19e('0x46')](_0x56f635)[_0xc19e('0x20')](function(_0x5026da){if(_0x5026da){_0x3bae1a=_0x5026da;return _0x5026da[_0xc19e('0x67')]();}return null;})[_0xc19e('0x20')](function(_0x13c952){if(_0x13c952){if(!_0x13c952[_0xc19e('0x44')]){throw new db['Sequelize'][(_0xc19e('0x69'))](_0xc19e('0x6a'),0x193);}_0x3144cd=_0x13c952;return db[_0xc19e('0x84')]['findAll']({'raw':!![]});}return null;})[_0xc19e('0x20')](function(_0x5d3f39){if(_0x5d3f39){_0x3847b7=_[_0xc19e('0x85')](_0x5d3f39,'id');var _0x102bc1;var _0x1a0ad8=squel['select']();_0x1a0ad8[_0xc19e('0x6c')](_0x3bae1a[_0xc19e('0x78')]);for(var _0xb42c3d=0x0;_0xb42c3d<_0x3144cd[_0xc19e('0x44')];_0xb42c3d+=0x1){_0x102bc1=_0x3144cd[_0xb42c3d][_0xc19e('0x6d')]?_0x3847b7[_0x3144cd[_0xb42c3d][_0xc19e('0x6d')]][_0xc19e('0x86')]:_0x3144cd[_0xb42c3d][_0xc19e('0x64')];_0x102bc1=_0x3144cd[_0xb42c3d][_0xc19e('0x6e')]?_['replace'](_0x12d8c9[_0x3144cd[_0xb42c3d]['function']],'%s',_0x102bc1):_0x102bc1;_0x102bc1=_0x3144cd[_0xb42c3d][_0xc19e('0x70')]?_[_0xc19e('0x6f')](_0x4613ed[_0x3144cd[_0xb42c3d][_0xc19e('0x70')]],'%s',_0x102bc1):_0x102bc1;if(_0x3144cd[_0xb42c3d]['groupBy']){_0x1a0ad8['group'](_0x102bc1);}_0x3144cd[_0xb42c3d][_0xc19e('0x71')]&&_0x1a0ad8[_0xc19e('0x31')](_0x102bc1,_0x3144cd[_0xb42c3d][_0xc19e('0x71')]===_0xc19e('0x72')?![]:!![]);_0x1a0ad8[_0xc19e('0x64')](_0x102bc1,_0x3144cd[_0xb42c3d]['alias']||_0x102bc1);}if(_0x3bae1a[_0xc19e('0x73')]){_0x3bae1a[_0xc19e('0x73')]=JSON[_0xc19e('0x74')](_0x3bae1a[_0xc19e('0x73')]);for(var _0x1cff63=0x0;_0x1cff63<_0x3bae1a[_0xc19e('0x73')]['length'];_0x1cff63+=0x1){if(_0x3bae1a[_0xc19e('0x73')][_0x1cff63]['type']&&_[_0xc19e('0x83')](_0xc93df5,_0x3bae1a['joins'][_0x1cff63][_0xc19e('0x39')])&&_0x3bae1a[_0xc19e('0x73')][_0x1cff63][_0xc19e('0x75')]&&_0x3bae1a[_0xc19e('0x73')][_0x1cff63][_0xc19e('0x76')]&&_0x3bae1a['joins'][_0x1cff63]['foreignKey']){_0x1a0ad8[_0x3bae1a['joins'][_0x1cff63][_0xc19e('0x39')]](_0x3bae1a[_0xc19e('0x73')][_0x1cff63][_0xc19e('0x76')],null,util[_0xc19e('0x70')](_0xc19e('0x77'),_0x3bae1a['table'],_0x3bae1a[_0xc19e('0x73')][_0x1cff63][_0xc19e('0x75')],_0x3bae1a[_0xc19e('0x73')][_0x1cff63][_0xc19e('0x76')],_0x3bae1a[_0xc19e('0x73')][_0x1cff63]['foreignKey']));}}}if(_0x3bae1a[_0xc19e('0x7a')]){_0x3bae1a[_0xc19e('0x7a')]=JSON[_0xc19e('0x74')](_0x3bae1a['conditions']);_0x1a0ad8[_0xc19e('0x33')](_0x27354e(_0x3bae1a['conditions']['group']));}_0x506709=_0x1a0ad8[_0xc19e('0x7b')]();_0x1a0ad8['limit'](_0x57ea06);_0x1a0ad8[_0xc19e('0x19')](0x0);logger['debug'](_0xc19e('0x7c'),_0x1a0ad8[_0xc19e('0x7d')]());return db[_0xc19e('0x7e')]['query'](_0x1a0ad8[_0xc19e('0x7d')](),{'type':db['sequelize'][_0xc19e('0x7f')][_0xc19e('0x80')]});}})[_0xc19e('0x20')](function(_0x238dbf){if(!_0x238dbf[_0xc19e('0x44')]){throw new db[(_0xc19e('0x68'))]['ValidationErrorItem'](_0xc19e('0x87'),0xcc);}if(_0x29fe7d[_0xc19e('0x88')]===_0xc19e('0x89')){return null;}var _0x1f4109=_['merge'](_0x29fe7d,{'name':_0x29fe7d[_0xc19e('0x8a')]||_0x29fe7d[_0xc19e('0x27')]||_0x3bae1a[_0xc19e('0x27')],'basename':_0x50663b,'savename':util[_0xc19e('0x70')](_0xc19e('0x8b'),_0x29fe7d[_0xc19e('0x27')]||_0x3bae1a[_0xc19e('0x27')],require(_0xc19e('0x8c'))[_0xc19e('0x8d')](0x4),_0x29fe7d[_0xc19e('0x88')]||_0xc19e('0x8e')),'reportId':_0x3bae1a['id'],'reportType':'default'});return db[_0xc19e('0x8f')][_0xc19e('0x47')](_0x1f4109,{'raw':!![]});})['then'](function(_0x3220b8){if(_0x3bae1a['table']===_0xc19e('0x90')){_0x506709[_0xc19e('0x33')](_0x3bae1a[_0xc19e('0x78')]+_0xc19e('0x91'),_0x29fe7d['startDate'],_0x29fe7d[_0xc19e('0x92')]);}else{_0x506709[_0xc19e('0x33')](_0x3bae1a[_0xc19e('0x78')]+'.createdAt\x20BETWEEN\x20?\x20AND\x20?',_0x29fe7d['startDate'],_0x29fe7d[_0xc19e('0x92')]);}if(_0x3220b8){logger['info']('Run\x20Query:',_0x506709[_0xc19e('0x7d')]());require(_0xc19e('0x93'))[_0xc19e('0x94')](path[_0xc19e('0x50')](__dirname,_0xc19e('0x95'),_0x3220b8['output']),[_0x3220b8['id'],_0x506709['toString'](),path[_0xc19e('0x50')](__dirname,_0xc19e('0x96'),_0x3220b8['savename']),_0x50663b]);return _0x3220b8;}else{var _0x332d7d=squel[_0xc19e('0x6b')]();_0x332d7d['from']('('+_0x506709[_0xc19e('0x7d')]()+')',_0xc19e('0x97'));_0x332d7d[_0xc19e('0x64')](_0xc19e('0x98'),_0xc19e('0x3c'));_0x506709[_0xc19e('0x1a')](_0x29fe7d[_0xc19e('0x1a')]||_0x57ea06);_0x506709[_0xc19e('0x19')](_0x29fe7d[_0xc19e('0x19')]||0x0);return db[_0xc19e('0x7e')][_0xc19e('0x2c')](_0x332d7d['toString'](),{'type':db[_0xc19e('0x7e')][_0xc19e('0x7f')][_0xc19e('0x80')]})[_0xc19e('0x20')](function(_0x4a1282){if(!_0x4a1282[_0xc19e('0x44')]){_0x202605=0x0;}else{_0x202605=_0x4a1282[0x0][_0xc19e('0x3c')]||0x0;}return db[_0xc19e('0x7e')][_0xc19e('0x2c')](_0x506709[_0xc19e('0x7d')](),{'type':db[_0xc19e('0x7e')][_0xc19e('0x7f')][_0xc19e('0x80')]});})['then'](function(_0x363749){return{'rows':_0x363749||[],'count':_0x202605};});}});}exports['run']=function(_0x2635f9,_0x2c4f06){return runReport(_0x2635f9[_0xc19e('0x41')],_0x2635f9[_0xc19e('0x2c')],_0x2635f9[_0xc19e('0x3b')])[_0xc19e('0x20')](respondWithResult(_0x2c4f06,null))['catch'](handleError(_0x2c4f06,null));};exports[_0xc19e('0x99')]=runReport;exports[_0xc19e('0x2c')]=function(_0x210d92,_0x5f3e8c){var _0xb0a59=0xa;var _0x291aba=[_0xc19e('0x50'),_0xc19e('0x51'),_0xc19e('0x52'),'cross_join'];var _0xa8ae21={'SUM':_0xc19e('0x53'),'COUNT':_0xc19e('0x54'),'COUNT DISTINCT':_0xc19e('0x55'),'MAX':_0xc19e('0x81'),'MIN':_0xc19e('0x56'),'AVG':_0xc19e('0x9a'),'GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20ASC)','GROUP_CONCAT DESC':_0xc19e('0x59')};var _0x5ae225={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0xc19e('0x5a'),'HOUR':'HOUR(%s)','ROUND':_0xc19e('0x5c'),'UNIX_TIMESTAMP':_0xc19e('0x5d')};var _0x5889ba=function(_0x53a3c7){return!_[_0xc19e('0x83')]([_0xc19e('0x5e'),_0xc19e('0x9b'),_0xc19e('0x5f'),_0xc19e('0x60')],_0x53a3c7);};var _0x538e2b=function(_0x2702c6){if(!_0x2702c6||!_0x2702c6[_0xc19e('0x61')][_0xc19e('0x44')]){return'';}for(var _0x4b876c='(',_0x3bfe7a=0x0;_0x3bfe7a<_0x2702c6['rules'][_0xc19e('0x44')];_0x3bfe7a+=0x1){_0x3bfe7a>0x0&&(_0x4b876c+='\x20'+_0x2702c6['operator']+'\x20');_0x4b876c+=_0x2702c6['rules'][_0x3bfe7a][_0xc19e('0x63')]?_0x538e2b(_0x2702c6[_0xc19e('0x61')][_0x3bfe7a][_0xc19e('0x63')]):_0x2702c6[_0xc19e('0x61')][_0x3bfe7a][_0xc19e('0x64')]+'\x20'+_0x2702c6[_0xc19e('0x61')][_0x3bfe7a]['condition']+(_0x5889ba(_0x2702c6[_0xc19e('0x61')][_0x3bfe7a][_0xc19e('0x65')])?'\x20'+_0x2702c6[_0xc19e('0x61')][_0x3bfe7a][_0xc19e('0x66')]:'');}return _0x4b876c+')';};var _0x3a2865={'where':{'id':_0x210d92['params']['id']}},_0xab5ff,_0xb871f7,_0x15124c,_0x1cdac9,_0x5c6459;_0x3a2865=_[_0xc19e('0x37')]({},_0x3a2865,_0x210d92[_0xc19e('0x3b')]);return db[_0xc19e('0x29')][_0xc19e('0x46')](_0x3a2865)[_0xc19e('0x20')](function(_0x45f7f0){if(_0x45f7f0){_0xab5ff=_0x45f7f0;return _0x45f7f0[_0xc19e('0x67')]();}return null;})[_0xc19e('0x20')](function(_0x1144f7){if(_0x1144f7){if(!_0x1144f7['length']){throw new db[(_0xc19e('0x68'))][(_0xc19e('0x69'))](_0xc19e('0x6a'),0x193);}_0xb871f7=_0x1144f7;return db[_0xc19e('0x84')]['findAll']({'raw':!![]});}return null;})[_0xc19e('0x20')](function(_0x46b94c){if(_0x46b94c){_0x15124c=_[_0xc19e('0x85')](_0x46b94c,'id');var _0x2f081b;var _0x19580c=squel[_0xc19e('0x6b')]();_0x19580c[_0xc19e('0x6c')](_0xab5ff[_0xc19e('0x78')]);for(var _0x2a1a75=0x0;_0x2a1a75<_0xb871f7[_0xc19e('0x44')];_0x2a1a75+=0x1){_0x2f081b=_0xb871f7[_0x2a1a75]['MetricId']?_0x15124c[_0xb871f7[_0x2a1a75][_0xc19e('0x6d')]][_0xc19e('0x86')]:_0xb871f7[_0x2a1a75][_0xc19e('0x64')];_0x2f081b=_0xb871f7[_0x2a1a75][_0xc19e('0x6e')]?_[_0xc19e('0x6f')](_0xa8ae21[_0xb871f7[_0x2a1a75][_0xc19e('0x6e')]],'%s',_0x2f081b):_0x2f081b;_0x2f081b=_0xb871f7[_0x2a1a75]['format']?_[_0xc19e('0x6f')](_0x5ae225[_0xb871f7[_0x2a1a75][_0xc19e('0x70')]],'%s',_0x2f081b):_0x2f081b;if(_0xb871f7[_0x2a1a75]['groupBy']){_0x19580c['group'](_0x2f081b);}_0xb871f7[_0x2a1a75][_0xc19e('0x71')]&&_0x19580c[_0xc19e('0x31')](_0x2f081b,_0xb871f7[_0x2a1a75][_0xc19e('0x71')]===_0xc19e('0x72')?![]:!![]);_0x19580c['field'](_0x2f081b,_0xb871f7[_0x2a1a75]['alias']||_0x2f081b);}if(_0xab5ff['joins']){_0xab5ff[_0xc19e('0x73')]=JSON['parse'](_0xab5ff[_0xc19e('0x73')]);for(var _0x2bc52d=0x0;_0x2bc52d<_0xab5ff[_0xc19e('0x73')]['length'];_0x2bc52d+=0x1){if(_0xab5ff['joins'][_0x2bc52d]['type']&&_[_0xc19e('0x83')](_0x291aba,_0xab5ff['joins'][_0x2bc52d]['type'])&&_0xab5ff[_0xc19e('0x73')][_0x2bc52d]['parentKey']&&_0xab5ff[_0xc19e('0x73')][_0x2bc52d][_0xc19e('0x76')]&&_0xab5ff[_0xc19e('0x73')][_0x2bc52d][_0xc19e('0x79')]){_0x19580c[_0xab5ff[_0xc19e('0x73')][_0x2bc52d][_0xc19e('0x39')]](_0xab5ff[_0xc19e('0x73')][_0x2bc52d][_0xc19e('0x76')],null,util[_0xc19e('0x70')]('%s.%s\x20=\x20%s.%s',_0xab5ff[_0xc19e('0x78')],_0xab5ff[_0xc19e('0x73')][_0x2bc52d]['parentKey'],_0xab5ff['joins'][_0x2bc52d][_0xc19e('0x76')],_0xab5ff[_0xc19e('0x73')][_0x2bc52d][_0xc19e('0x79')]));}}}if(_0xab5ff[_0xc19e('0x7a')]){_0xab5ff[_0xc19e('0x7a')]=JSON[_0xc19e('0x74')](_0xab5ff[_0xc19e('0x7a')]);_0x19580c[_0xc19e('0x33')](_0x538e2b(_0xab5ff[_0xc19e('0x7a')]['group']));}_0x5c6459=_0x19580c['clone']();_0x19580c[_0xc19e('0x1a')](_0xb0a59);_0x19580c[_0xc19e('0x19')](0x0);logger[_0xc19e('0x9c')]('Limited\x20Query:',_0x19580c[_0xc19e('0x7d')]());return db[_0xc19e('0x7e')][_0xc19e('0x2c')](_0x19580c[_0xc19e('0x7d')](),{'type':db[_0xc19e('0x7e')][_0xc19e('0x7f')][_0xc19e('0x80')]});}})['then'](function(){return{'sql':_0x5c6459['toString']()};})[_0xc19e('0x20')](respondWithResult(_0x5f3e8c,null))[_0xc19e('0x40')](handleError(_0x5f3e8c,null));};
\ No newline at end of file
+var _0x56ff=['order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','show','params','include','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Reports','autoAssociation','update','body','join','left_join','right_join','cross_join','SUM(%s)','COUNT(%s)','COUNT(DISTINCT\x20%s)','MAX(%s)','MIN(%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)','includes','IS\x20NOT\x20NULL','IS\x20EMPTY','IS\x20NOT\x20EMPTY','length','operator','rules','group','condition','value','Sequelize','Please\x20insert\x20at\x20least\x20one\x20field','AnalyticMetric','keyBy','from','table','MetricId','function','replace','format','groupBy','orderBy','DESC','joins','parse','parentKey','foreignTable','%s.%s\x20=\x20%s.%s','foreignKey','conditions','Limited\x20Query:','toString','SELECT','GROUP_CONCAT(%s)','UNIX_TIMESTAMP(%s)','IS\x20NULL','getFields','select','metric','alias','clone','debug','sequelize','QueryTypes','ValidationErrorItem','No\x20available\x20data','web','fullPath','%s-%s.%s','randomstring','csv','default','AnalyticExtractedReport','.calldate\x20BETWEEN\x20?\x20AND\x20?','endDate','.createdAt\x20BETWEEN\x20?\x20AND\x20?','startDate','info','Run\x20Query:','fork','../../components/export/','output','../../files/reports','savename','COUNT(*)','run','runReport','AVG(%s)','ROUND(%s)','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../mysqldb','sendStatus','status','json','count','offset','limit','set','apply','reject','save','destroy','get','DefaultReports','UserProfileResource','then','end','error','stack','name','send','index','AnalyticDefaultReport','rawAttributes','query','keys','filters','intersection','model','fields','attributes','hasOwnProperty','nolimit'];(function(_0x74892f,_0x1e981b){var _0x10ee61=function(_0x3c480a){while(--_0x3c480a){_0x74892f['push'](_0x74892f['shift']());}};_0x10ee61(++_0x1e981b);}(_0x56ff,0x6e));var _0xf56f=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x56ff[_0x20a584];return _0x4b41a8;};'use strict';var pdf=require(_0xf56f('0x0'));var emlformat=require(_0xf56f('0x1'));var rimraf=require(_0xf56f('0x2'));var zipdir=require(_0xf56f('0x3'));var jsonpatch=require(_0xf56f('0x4'));var rp=require(_0xf56f('0x5'));var moment=require(_0xf56f('0x6'));var BPromise=require(_0xf56f('0x7'));var Mustache=require(_0xf56f('0x8'));var util=require(_0xf56f('0x9'));var path=require(_0xf56f('0xa'));var sox=require(_0xf56f('0xb'));var csv=require(_0xf56f('0xc'));var ejs=require(_0xf56f('0xd'));var fs=require('fs');var _=require(_0xf56f('0xe'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xf56f('0xf'));var deskjs=require(_0xf56f('0x10'));var toCsv=require(_0xf56f('0xc'));var querystring=require(_0xf56f('0x11'));var Papa=require(_0xf56f('0x12'));var authService=require(_0xf56f('0x13'));var hardwareService=require(_0xf56f('0x14'));var Redis=require(_0xf56f('0x15'));var qs=require(_0xf56f('0x16'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0xf56f('0x17'))['db'];function respondWithStatusCode(_0x1b79ca,_0x51ed31){_0x51ed31=_0x51ed31||0xcc;return function(_0x2140c6){if(_0x2140c6){return _0x1b79ca[_0xf56f('0x18')](_0x51ed31);}return _0x1b79ca['status'](_0x51ed31)['end']();};}function respondWithResult(_0x3e2d61,_0x1517e3){_0x1517e3=_0x1517e3||0xc8;return function(_0x384df2){if(_0x384df2){return _0x3e2d61[_0xf56f('0x19')](_0x1517e3)[_0xf56f('0x1a')](_0x384df2);}};}function respondWithFilteredResult(_0x54aa34,_0xd7fab2){return function(_0x1602cf){if(_0x1602cf){var _0x38ce00=_0x1602cf[_0xf56f('0x1b')],_0x3dd421=_0xd7fab2[_0xf56f('0x1c')],_0x5bdbc7=_0xd7fab2[_0xf56f('0x1c')]+_0xd7fab2[_0xf56f('0x1d')],_0x7f22a2;if(_0x5bdbc7>=_0x38ce00){_0x5bdbc7=_0x38ce00;_0x7f22a2=0xc8;}else{_0x7f22a2=0xce;}_0x54aa34[_0xf56f('0x19')](_0x7f22a2);return _0x54aa34[_0xf56f('0x1e')]('Content-Range',_0x3dd421+'-'+_0x5bdbc7+'/'+_0x38ce00)[_0xf56f('0x1a')](_0x1602cf);}return null;};}function patchUpdates(_0x15706b){return function(_0x17c624){try{jsonpatch[_0xf56f('0x1f')](_0x17c624,_0x15706b,!![]);}catch(_0x4d75b9){return BPromise[_0xf56f('0x20')](_0x4d75b9);}return _0x17c624[_0xf56f('0x21')]();};}function saveUpdates(_0x3456a4,_0xdb85f9){return function(_0x55af9b){if(_0x55af9b){return _0x55af9b['update'](_0x3456a4)['then'](function(_0x416d64){return _0x416d64;});}return null;};}function removeEntity(_0x1eae14,_0x2b3dfb){return function(_0x5540a8){if(_0x5540a8){return _0x5540a8[_0xf56f('0x22')]()['then'](function(){var _0x531d87=_0x5540a8[_0xf56f('0x23')]({'plain':!![]});var _0x45c3d1=_0xf56f('0x24');return db[_0xf56f('0x25')]['destroy']({'where':{'type':_0x45c3d1,'resourceId':_0x531d87['id']}})[_0xf56f('0x26')](function(){return _0x5540a8;});})[_0xf56f('0x26')](function(){_0x1eae14[_0xf56f('0x19')](0xcc)[_0xf56f('0x27')]();});}};}function handleEntityNotFound(_0x49e9ed,_0x5b81a6){return function(_0x1b9b67){if(!_0x1b9b67){_0x49e9ed[_0xf56f('0x18')](0x194);}return _0x1b9b67;};}function handleError(_0x37009f,_0x46a840){_0x46a840=_0x46a840||0x1f4;return function(_0x356200){logger[_0xf56f('0x28')](_0x356200[_0xf56f('0x29')]);if(_0x356200[_0xf56f('0x2a')]){delete _0x356200['name'];}_0x37009f[_0xf56f('0x19')](_0x46a840)[_0xf56f('0x2b')](_0x356200);};}exports[_0xf56f('0x2c')]=function(_0x2cb0f1,_0x2a5649){var _0x3f4ad3={},_0x3fb4ad={},_0x15abbe={'count':0x0,'rows':[]};var _0x807eb3=db[_0xf56f('0x2d')][_0xf56f('0x2e')];_0x3fb4ad['model']=_['keys'](_0x807eb3);_0x3fb4ad[_0xf56f('0x2f')]=_[_0xf56f('0x30')](_0x2cb0f1[_0xf56f('0x2f')]);_0x3fb4ad[_0xf56f('0x31')]=_[_0xf56f('0x32')](_0x3fb4ad['model'],_0x3fb4ad['query']);_0x3f4ad3['attributes']=_[_0xf56f('0x32')](_0x3fb4ad[_0xf56f('0x33')],qs[_0xf56f('0x34')](_0x2cb0f1['query'][_0xf56f('0x34')]));_0x3f4ad3[_0xf56f('0x35')]=_0x3f4ad3[_0xf56f('0x35')]['length']?_0x3f4ad3[_0xf56f('0x35')]:_0x3fb4ad[_0xf56f('0x33')];if(!_0x2cb0f1[_0xf56f('0x2f')][_0xf56f('0x36')](_0xf56f('0x37'))){_0x3f4ad3[_0xf56f('0x1d')]=qs[_0xf56f('0x1d')](_0x2cb0f1['query'][_0xf56f('0x1d')]);_0x3f4ad3['offset']=qs[_0xf56f('0x1c')](_0x2cb0f1[_0xf56f('0x2f')][_0xf56f('0x1c')]);}_0x3f4ad3[_0xf56f('0x38')]=qs[_0xf56f('0x39')](_0x2cb0f1[_0xf56f('0x2f')][_0xf56f('0x39')]);_0x3f4ad3[_0xf56f('0x3a')]=qs[_0xf56f('0x31')](_[_0xf56f('0x3b')](_0x2cb0f1[_0xf56f('0x2f')],_0x3fb4ad[_0xf56f('0x31')]));if(_0x2cb0f1[_0xf56f('0x2f')][_0xf56f('0x3c')]){_0x3f4ad3[_0xf56f('0x3a')]=_[_0xf56f('0x3d')](_0x3f4ad3[_0xf56f('0x3a')],{'$or':_['map'](_0x807eb3,function(_0x5aa7b8){if(_0x5aa7b8[_0xf56f('0x3e')][_0xf56f('0x3f')]!==_0xf56f('0x40')){var _0x58f580={};_0x58f580[_0x5aa7b8[_0xf56f('0x41')]]={'$like':'%'+_0x2cb0f1['query'][_0xf56f('0x3c')]+'%'};return _0x58f580;}})});}_0x3f4ad3=_[_0xf56f('0x3d')]({},_0x3f4ad3,_0x2cb0f1[_0xf56f('0x42')]);var _0xe377c2={'where':_0x3f4ad3['where']};return db['AnalyticDefaultReport'][_0xf56f('0x1b')](_0xe377c2)[_0xf56f('0x26')](function(_0x45e4b7){_0x15abbe['count']=_0x45e4b7;if(_0x2cb0f1['query'][_0xf56f('0x43')]){_0x3f4ad3['include']=[{'all':!![]}];}return db[_0xf56f('0x2d')][_0xf56f('0x44')](_0x3f4ad3);})['then'](function(_0x33d410){_0x15abbe[_0xf56f('0x45')]=_0x33d410;return _0x15abbe;})[_0xf56f('0x26')](respondWithFilteredResult(_0x2a5649,_0x3f4ad3))[_0xf56f('0x46')](handleError(_0x2a5649,null));};exports[_0xf56f('0x47')]=function(_0xc2df46,_0x2733e5){var _0x1edaa2={'raw':!![],'where':{'id':_0xc2df46[_0xf56f('0x48')]['id']}},_0x4cd247={};_0x4cd247[_0xf56f('0x33')]=_[_0xf56f('0x30')](db[_0xf56f('0x2d')][_0xf56f('0x2e')]);_0x4cd247[_0xf56f('0x2f')]=_['keys'](_0xc2df46['query']);_0x4cd247[_0xf56f('0x31')]=_['intersection'](_0x4cd247[_0xf56f('0x33')],_0x4cd247[_0xf56f('0x2f')]);_0x1edaa2[_0xf56f('0x35')]=_['intersection'](_0x4cd247['model'],qs[_0xf56f('0x34')](_0xc2df46[_0xf56f('0x2f')][_0xf56f('0x34')]));_0x1edaa2['attributes']=_0x1edaa2['attributes']['length']?_0x1edaa2[_0xf56f('0x35')]:_0x4cd247['model'];if(_0xc2df46[_0xf56f('0x2f')][_0xf56f('0x43')]){_0x1edaa2[_0xf56f('0x49')]=[{'all':!![]}];}_0x1edaa2=_[_0xf56f('0x3d')]({},_0x1edaa2,_0xc2df46['options']);return db[_0xf56f('0x2d')][_0xf56f('0x4a')](_0x1edaa2)[_0xf56f('0x26')](handleEntityNotFound(_0x2733e5,null))[_0xf56f('0x26')](respondWithResult(_0x2733e5,null))[_0xf56f('0x46')](handleError(_0x2733e5,null));};exports[_0xf56f('0x4b')]=function(_0x34d7dd,_0x2c37d8){return db['AnalyticDefaultReport'][_0xf56f('0x4b')](_0x34d7dd['body'],{})[_0xf56f('0x26')](function(_0x14139b){var _0x309504=_0x34d7dd[_0xf56f('0x4c')][_0xf56f('0x23')]({'plain':!![]});if(!_0x309504)throw new Error(_0xf56f('0x4d'));if(_0x309504[_0xf56f('0x4e')]===_0xf56f('0x4c')){var _0x1a38d4=_0x14139b[_0xf56f('0x23')]({'plain':!![]});var _0x5dcd42=_0xf56f('0x4f');return db['UserProfileSection'][_0xf56f('0x4a')]({'where':{'name':_0x5dcd42,'userProfileId':_0x309504['userProfileId']},'raw':!![]})[_0xf56f('0x26')](function(_0x4cd3e6){if(_0x4cd3e6&&_0x4cd3e6[_0xf56f('0x50')]===0x0){return db[_0xf56f('0x25')][_0xf56f('0x4b')]({'name':_0x1a38d4[_0xf56f('0x2a')],'resourceId':_0x1a38d4['id'],'type':_0xf56f('0x24'),'sectionId':_0x4cd3e6['id']},{})[_0xf56f('0x26')](function(){return _0x14139b;});}else{return _0x14139b;}})['catch'](function(_0x4db317){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x4db317);throw _0x4db317;});}return _0x14139b;})[_0xf56f('0x26')](respondWithResult(_0x2c37d8,0xc9))[_0xf56f('0x46')](handleError(_0x2c37d8,null));};exports[_0xf56f('0x51')]=function(_0x1a210f,_0xbde250){if(_0x1a210f[_0xf56f('0x52')]['id']){delete _0x1a210f[_0xf56f('0x52')]['id'];}return db['AnalyticDefaultReport']['find']({'where':{'id':_0x1a210f['params']['id']}})['then'](handleEntityNotFound(_0xbde250,null))[_0xf56f('0x26')](saveUpdates(_0x1a210f[_0xf56f('0x52')],null))[_0xf56f('0x26')](respondWithResult(_0xbde250,null))[_0xf56f('0x46')](handleError(_0xbde250,null));};exports[_0xf56f('0x22')]=function(_0x536dc8,_0x3a68cf){return db[_0xf56f('0x2d')]['find']({'where':{'id':_0x536dc8[_0xf56f('0x48')]['id']}})['then'](handleEntityNotFound(_0x3a68cf,null))[_0xf56f('0x26')](removeEntity(_0x3a68cf,null))['catch'](handleError(_0x3a68cf,null));};exports['preview']=function(_0x5a5a58,_0x4ac254){var _0x1ccd23=0xa;var _0x3114f2=[_0xf56f('0x53'),_0xf56f('0x54'),_0xf56f('0x55'),_0xf56f('0x56')];var _0x54d6c1={'SUM':_0xf56f('0x57'),'COUNT':_0xf56f('0x58'),'COUNT DISTINCT':_0xf56f('0x59'),'MAX':_0xf56f('0x5a'),'MIN':_0xf56f('0x5b'),'AVG':'AVG(%s)','GROUP_CONCAT':'GROUP_CONCAT(%s)','GROUP_CONCAT ASC':_0xf56f('0x5c'),'GROUP_CONCAT DESC':_0xf56f('0x5d')};var _0x1cf8c0={'SEC_TO_TIME':_0xf56f('0x5e'),'DATE':_0xf56f('0x5f'),'HOUR':_0xf56f('0x60'),'ROUND':'ROUND(%s)','UNIX_TIMESTAMP':'UNIX_TIMESTAMP(%s)'};var _0x49235b=function(_0x15fd07){return!_[_0xf56f('0x61')](['IS\x20NULL',_0xf56f('0x62'),_0xf56f('0x63'),_0xf56f('0x64')],_0x15fd07);};var _0x469881=function(_0x38e187){if(!_0x38e187||!_0x38e187['rules'][_0xf56f('0x65')]){return'';}for(var _0x2688bc='(',_0x371ac1=0x0;_0x371ac1<_0x38e187['rules'][_0xf56f('0x65')];_0x371ac1+=0x1){_0x371ac1>0x0&&(_0x2688bc+='\x20'+_0x38e187[_0xf56f('0x66')]+'\x20');_0x2688bc+=_0x38e187[_0xf56f('0x67')][_0x371ac1][_0xf56f('0x68')]?_0x469881(_0x38e187[_0xf56f('0x67')][_0x371ac1][_0xf56f('0x68')]):_0x38e187[_0xf56f('0x67')][_0x371ac1]['field']+'\x20'+_0x38e187[_0xf56f('0x67')][_0x371ac1][_0xf56f('0x69')]+(_0x49235b(_0x38e187[_0xf56f('0x67')][_0x371ac1][_0xf56f('0x69')])?'\x20'+_0x38e187['rules'][_0x371ac1][_0xf56f('0x6a')]:'');}return _0x2688bc+')';};var _0x1a2893={'where':{'id':_0x5a5a58['params']['id']}},_0x4c3a0e,_0x127c35,_0xc88ad3,_0xff4d8a,_0x1da0d8;_0x1a2893=_[_0xf56f('0x3d')]({},_0x1a2893,_0x5a5a58[_0xf56f('0x42')]);return db[_0xf56f('0x2d')][_0xf56f('0x4a')](_0x1a2893)[_0xf56f('0x26')](function(_0xc9e6aa){if(_0xc9e6aa){_0x4c3a0e=_0xc9e6aa;return _0xc9e6aa['getFields']();}return null;})['then'](function(_0x5724c0){if(_0x5724c0){if(!_0x5724c0['length']){throw new db[(_0xf56f('0x6b'))]['ValidationErrorItem'](_0xf56f('0x6c'),0x193);}_0x127c35=_0x5724c0;return db[_0xf56f('0x6d')][_0xf56f('0x44')]({'raw':!![]});}return null;})[_0xf56f('0x26')](function(_0x2e6277){if(_0x2e6277){_0xc88ad3=_[_0xf56f('0x6e')](_0x2e6277,'id');var _0x29590c;var _0x5eca07=squel['select']();_0x5eca07[_0xf56f('0x6f')](_0x4c3a0e[_0xf56f('0x70')]);for(var _0x7023e=0x0;_0x7023e<_0x127c35[_0xf56f('0x65')];_0x7023e+=0x1){_0x29590c=_0x127c35[_0x7023e][_0xf56f('0x71')]?_0xc88ad3[_0x127c35[_0x7023e][_0xf56f('0x71')]]['metric']:_0x127c35[_0x7023e]['field'];_0x29590c=_0x127c35[_0x7023e][_0xf56f('0x72')]?_[_0xf56f('0x73')](_0x54d6c1[_0x127c35[_0x7023e][_0xf56f('0x72')]],'%s',_0x29590c):_0x29590c;_0x29590c=_0x127c35[_0x7023e][_0xf56f('0x74')]?_[_0xf56f('0x73')](_0x1cf8c0[_0x127c35[_0x7023e]['format']],'%s',_0x29590c):_0x29590c;if(_0x127c35[_0x7023e][_0xf56f('0x75')]){_0x5eca07[_0xf56f('0x68')](_0x29590c);}_0x127c35[_0x7023e][_0xf56f('0x76')]&&_0x5eca07[_0xf56f('0x38')](_0x29590c,_0x127c35[_0x7023e][_0xf56f('0x76')]===_0xf56f('0x77')?![]:!![]);_0x5eca07[_0xf56f('0x41')](_0x29590c,_0x127c35[_0x7023e]['alias']||_0x29590c);}if(_0x4c3a0e[_0xf56f('0x78')]){_0x4c3a0e[_0xf56f('0x78')]=JSON[_0xf56f('0x79')](_0x4c3a0e[_0xf56f('0x78')]);for(var _0x2deaf4=0x0;_0x2deaf4<_0x4c3a0e[_0xf56f('0x78')]['length'];_0x2deaf4+=0x1){if(_0x4c3a0e['joins'][_0x2deaf4][_0xf56f('0x3e')]&&_['includes'](_0x3114f2,_0x4c3a0e[_0xf56f('0x78')][_0x2deaf4][_0xf56f('0x3e')])&&_0x4c3a0e['joins'][_0x2deaf4][_0xf56f('0x7a')]&&_0x4c3a0e[_0xf56f('0x78')][_0x2deaf4]['foreignTable']&&_0x4c3a0e[_0xf56f('0x78')][_0x2deaf4]['foreignKey']){_0x5eca07[_0x4c3a0e[_0xf56f('0x78')][_0x2deaf4]['type']](_0x4c3a0e[_0xf56f('0x78')][_0x2deaf4][_0xf56f('0x7b')],null,util[_0xf56f('0x74')](_0xf56f('0x7c'),_0x4c3a0e[_0xf56f('0x70')],_0x4c3a0e[_0xf56f('0x78')][_0x2deaf4]['parentKey'],_0x4c3a0e[_0xf56f('0x78')][_0x2deaf4][_0xf56f('0x7b')],_0x4c3a0e[_0xf56f('0x78')][_0x2deaf4][_0xf56f('0x7d')]));}}}if(_0x4c3a0e[_0xf56f('0x7e')]){_0x4c3a0e[_0xf56f('0x7e')]=JSON[_0xf56f('0x79')](_0x4c3a0e[_0xf56f('0x7e')]);_0x5eca07[_0xf56f('0x3a')](_0x469881(_0x4c3a0e[_0xf56f('0x7e')]['group']));}_0x1da0d8=_0x5eca07['clone']();_0x5eca07[_0xf56f('0x1d')](_0x1ccd23);_0x5eca07[_0xf56f('0x1c')](0x0);logger['debug'](_0xf56f('0x7f'),_0x5eca07[_0xf56f('0x80')]());return db['sequelize'][_0xf56f('0x2f')](_0x5eca07['toString'](),{'type':db['sequelize']['QueryTypes'][_0xf56f('0x81')]});}})[_0xf56f('0x26')](respondWithResult(_0x4ac254,null))[_0xf56f('0x46')](handleError(_0x4ac254,null));};function runReport(_0x23224d,_0x24cf54,_0x38dbc1){var _0xcdd25=_0x24cf54['name'];var _0x142e2f=0xa;var _0x2660c4=[_0xf56f('0x53'),_0xf56f('0x54'),'right_join','cross_join'];var _0x1ec795={'SUM':_0xf56f('0x57'),'COUNT':_0xf56f('0x58'),'COUNT DISTINCT':_0xf56f('0x59'),'MAX':_0xf56f('0x5a'),'MIN':_0xf56f('0x5b'),'AVG':'AVG(%s)','GROUP_CONCAT':_0xf56f('0x82'),'GROUP_CONCAT ASC':_0xf56f('0x5c'),'GROUP_CONCAT DESC':_0xf56f('0x5d')};var _0x2fa56d={'SEC_TO_TIME':_0xf56f('0x5e'),'DATE':_0xf56f('0x5f'),'HOUR':_0xf56f('0x60'),'ROUND':'ROUND(%s)','UNIX_TIMESTAMP':_0xf56f('0x83')};var _0xfc616b=function(_0x6411ee){return!_[_0xf56f('0x61')]([_0xf56f('0x84'),_0xf56f('0x62'),_0xf56f('0x63'),_0xf56f('0x64')],_0x6411ee);};var _0x948578=function(_0x18f91b){if(!_0x18f91b||!_0x18f91b['rules'][_0xf56f('0x65')]){return'';}for(var _0x2a8274='(',_0x9e2613=0x0;_0x9e2613<_0x18f91b['rules']['length'];_0x9e2613+=0x1){_0x9e2613>0x0&&(_0x2a8274+='\x20'+_0x18f91b[_0xf56f('0x66')]+'\x20');_0x2a8274+=_0x18f91b['rules'][_0x9e2613][_0xf56f('0x68')]?_0x948578(_0x18f91b[_0xf56f('0x67')][_0x9e2613][_0xf56f('0x68')]):_0x18f91b[_0xf56f('0x67')][_0x9e2613]['field']+'\x20'+_0x18f91b['rules'][_0x9e2613]['condition']+(_0xfc616b(_0x18f91b['rules'][_0x9e2613][_0xf56f('0x69')])?'\x20'+_0x18f91b[_0xf56f('0x67')][_0x9e2613][_0xf56f('0x6a')]:'');}return _0x2a8274+')';};var _0x305e6f={'where':{'id':_0x23224d['id']}},_0x5278f1,_0x16938d,_0x1f7a09,_0x5ea512,_0x343aa0;_0x305e6f=_['merge']({},_0x305e6f,_0x38dbc1);return db[_0xf56f('0x2d')][_0xf56f('0x4a')](_0x305e6f)['then'](function(_0x54776f){if(_0x54776f){_0x5278f1=_0x54776f;return _0x54776f[_0xf56f('0x85')]();}return null;})[_0xf56f('0x26')](function(_0x436a85){if(_0x436a85){if(!_0x436a85['length']){throw new db[(_0xf56f('0x6b'))]['ValidationErrorItem'](_0xf56f('0x6c'),0x193);}_0x16938d=_0x436a85;return db[_0xf56f('0x6d')][_0xf56f('0x44')]({'raw':!![]});}return null;})[_0xf56f('0x26')](function(_0x3da8f9){if(_0x3da8f9){_0x1f7a09=_['keyBy'](_0x3da8f9,'id');var _0x2475d1;var _0x388126=squel[_0xf56f('0x86')]();_0x388126[_0xf56f('0x6f')](_0x5278f1['table']);for(var _0x21521d=0x0;_0x21521d<_0x16938d[_0xf56f('0x65')];_0x21521d+=0x1){_0x2475d1=_0x16938d[_0x21521d]['MetricId']?_0x1f7a09[_0x16938d[_0x21521d]['MetricId']][_0xf56f('0x87')]:_0x16938d[_0x21521d][_0xf56f('0x41')];_0x2475d1=_0x16938d[_0x21521d][_0xf56f('0x72')]?_['replace'](_0x1ec795[_0x16938d[_0x21521d]['function']],'%s',_0x2475d1):_0x2475d1;_0x2475d1=_0x16938d[_0x21521d]['format']?_[_0xf56f('0x73')](_0x2fa56d[_0x16938d[_0x21521d]['format']],'%s',_0x2475d1):_0x2475d1;if(_0x16938d[_0x21521d][_0xf56f('0x75')]){_0x388126['group'](_0x2475d1);}_0x16938d[_0x21521d][_0xf56f('0x76')]&&_0x388126[_0xf56f('0x38')](_0x2475d1,_0x16938d[_0x21521d]['orderBy']==='DESC'?![]:!![]);_0x388126['field'](_0x2475d1,_0x16938d[_0x21521d][_0xf56f('0x88')]||_0x2475d1);}if(_0x5278f1[_0xf56f('0x78')]){_0x5278f1['joins']=JSON['parse'](_0x5278f1['joins']);for(var _0x30ebcf=0x0;_0x30ebcf<_0x5278f1['joins'][_0xf56f('0x65')];_0x30ebcf+=0x1){if(_0x5278f1[_0xf56f('0x78')][_0x30ebcf][_0xf56f('0x3e')]&&_[_0xf56f('0x61')](_0x2660c4,_0x5278f1[_0xf56f('0x78')][_0x30ebcf][_0xf56f('0x3e')])&&_0x5278f1['joins'][_0x30ebcf][_0xf56f('0x7a')]&&_0x5278f1[_0xf56f('0x78')][_0x30ebcf][_0xf56f('0x7b')]&&_0x5278f1['joins'][_0x30ebcf][_0xf56f('0x7d')]){_0x388126[_0x5278f1['joins'][_0x30ebcf][_0xf56f('0x3e')]](_0x5278f1[_0xf56f('0x78')][_0x30ebcf][_0xf56f('0x7b')],null,util[_0xf56f('0x74')](_0xf56f('0x7c'),_0x5278f1[_0xf56f('0x70')],_0x5278f1[_0xf56f('0x78')][_0x30ebcf][_0xf56f('0x7a')],_0x5278f1[_0xf56f('0x78')][_0x30ebcf]['foreignTable'],_0x5278f1['joins'][_0x30ebcf][_0xf56f('0x7d')]));}}}if(_0x5278f1['conditions']){_0x5278f1[_0xf56f('0x7e')]=JSON[_0xf56f('0x79')](_0x5278f1[_0xf56f('0x7e')]);_0x388126[_0xf56f('0x3a')](_0x948578(_0x5278f1['conditions'][_0xf56f('0x68')]));}_0x343aa0=_0x388126[_0xf56f('0x89')]();_0x388126['limit'](_0x142e2f);_0x388126[_0xf56f('0x1c')](0x0);logger[_0xf56f('0x8a')](_0xf56f('0x7f'),_0x388126['toString']());return db[_0xf56f('0x8b')][_0xf56f('0x2f')](_0x388126[_0xf56f('0x80')](),{'type':db[_0xf56f('0x8b')][_0xf56f('0x8c')][_0xf56f('0x81')]});}})[_0xf56f('0x26')](function(_0x28a480){if(!_0x28a480[_0xf56f('0x65')]){throw new db[(_0xf56f('0x6b'))][(_0xf56f('0x8d'))](_0xf56f('0x8e'),0xcc);}if(_0x24cf54['output']===_0xf56f('0x8f')){return null;}var _0xf3faf8=_['merge'](_0x24cf54,{'name':_0x24cf54[_0xf56f('0x90')]||_0x24cf54[_0xf56f('0x2a')]||_0x5278f1[_0xf56f('0x2a')],'basename':_0xcdd25,'savename':util[_0xf56f('0x74')](_0xf56f('0x91'),_0x24cf54[_0xf56f('0x2a')]||_0x5278f1[_0xf56f('0x2a')],require(_0xf56f('0x92'))['generate'](0x4),_0x24cf54['output']||_0xf56f('0x93')),'reportId':_0x5278f1['id'],'reportType':_0xf56f('0x94')});return db[_0xf56f('0x95')][_0xf56f('0x4b')](_0xf3faf8,{'raw':!![]});})[_0xf56f('0x26')](function(_0x4045bb){if(_0x5278f1[_0xf56f('0x70')]==='cdr'){_0x343aa0[_0xf56f('0x3a')](_0x5278f1[_0xf56f('0x70')]+_0xf56f('0x96'),_0x24cf54['startDate'],_0x24cf54[_0xf56f('0x97')]);}else{_0x343aa0[_0xf56f('0x3a')](_0x5278f1[_0xf56f('0x70')]+_0xf56f('0x98'),_0x24cf54[_0xf56f('0x99')],_0x24cf54[_0xf56f('0x97')]);}if(_0x4045bb){logger[_0xf56f('0x9a')](_0xf56f('0x9b'),_0x343aa0[_0xf56f('0x80')]());require('child_process')[_0xf56f('0x9c')](path[_0xf56f('0x53')](__dirname,_0xf56f('0x9d'),_0x4045bb[_0xf56f('0x9e')]),[_0x4045bb['id'],_0x343aa0[_0xf56f('0x80')](),path[_0xf56f('0x53')](__dirname,_0xf56f('0x9f'),_0x4045bb[_0xf56f('0xa0')]),_0xcdd25]);return _0x4045bb;}else{var _0x3ab161=squel[_0xf56f('0x86')]();_0x3ab161[_0xf56f('0x6f')]('('+_0x343aa0[_0xf56f('0x80')]()+')','countTable');_0x3ab161[_0xf56f('0x41')](_0xf56f('0xa1'),'count');_0x343aa0['limit'](_0x24cf54[_0xf56f('0x1d')]||_0x142e2f);_0x343aa0[_0xf56f('0x1c')](_0x24cf54[_0xf56f('0x1c')]||0x0);return db[_0xf56f('0x8b')][_0xf56f('0x2f')](_0x3ab161[_0xf56f('0x80')](),{'type':db['sequelize'][_0xf56f('0x8c')][_0xf56f('0x81')]})[_0xf56f('0x26')](function(_0x48ec11){if(!_0x48ec11[_0xf56f('0x65')]){_0x5ea512=0x0;}else{_0x5ea512=_0x48ec11[0x0][_0xf56f('0x1b')]||0x0;}return db[_0xf56f('0x8b')]['query'](_0x343aa0[_0xf56f('0x80')](),{'type':db['sequelize']['QueryTypes'][_0xf56f('0x81')]});})[_0xf56f('0x26')](function(_0x342d8f){return{'rows':_0x342d8f||[],'count':_0x5ea512};});}});}exports[_0xf56f('0xa2')]=function(_0x3e30c9,_0x3f0728){return runReport(_0x3e30c9[_0xf56f('0x48')],_0x3e30c9[_0xf56f('0x2f')],_0x3e30c9[_0xf56f('0x42')])[_0xf56f('0x26')](respondWithResult(_0x3f0728,null))['catch'](handleError(_0x3f0728,null));};exports[_0xf56f('0xa3')]=runReport;exports[_0xf56f('0x2f')]=function(_0x55fa6c,_0x52a99e){var _0x26ed08=0xa;var _0x16add3=[_0xf56f('0x53'),_0xf56f('0x54'),_0xf56f('0x55'),_0xf56f('0x56')];var _0x31b220={'SUM':'SUM(%s)','COUNT':'COUNT(%s)','COUNT DISTINCT':_0xf56f('0x59'),'MAX':_0xf56f('0x5a'),'MIN':_0xf56f('0x5b'),'AVG':_0xf56f('0xa4'),'GROUP_CONCAT':_0xf56f('0x82'),'GROUP_CONCAT ASC':_0xf56f('0x5c'),'GROUP_CONCAT DESC':'GROUP_CONCAT(%s\x20ORDER\x20BY\x20%s\x20DESC)'};var _0x1e1d0a={'SEC_TO_TIME':'SEC_TO_TIME(%s)','DATE':_0xf56f('0x5f'),'HOUR':_0xf56f('0x60'),'ROUND':_0xf56f('0xa5'),'UNIX_TIMESTAMP':_0xf56f('0x83')};var _0x5db590=function(_0xc7fe0e){return!_[_0xf56f('0x61')]([_0xf56f('0x84'),'IS\x20NOT\x20NULL',_0xf56f('0x63'),'IS\x20NOT\x20EMPTY'],_0xc7fe0e);};var _0x3578f4=function(_0x128ed9){if(!_0x128ed9||!_0x128ed9['rules'][_0xf56f('0x65')]){return'';}for(var _0x4d2513='(',_0x4e7f4a=0x0;_0x4e7f4a<_0x128ed9['rules'][_0xf56f('0x65')];_0x4e7f4a+=0x1){_0x4e7f4a>0x0&&(_0x4d2513+='\x20'+_0x128ed9['operator']+'\x20');_0x4d2513+=_0x128ed9[_0xf56f('0x67')][_0x4e7f4a][_0xf56f('0x68')]?_0x3578f4(_0x128ed9[_0xf56f('0x67')][_0x4e7f4a][_0xf56f('0x68')]):_0x128ed9[_0xf56f('0x67')][_0x4e7f4a][_0xf56f('0x41')]+'\x20'+_0x128ed9[_0xf56f('0x67')][_0x4e7f4a][_0xf56f('0x69')]+(_0x5db590(_0x128ed9['rules'][_0x4e7f4a]['condition'])?'\x20'+_0x128ed9[_0xf56f('0x67')][_0x4e7f4a][_0xf56f('0x6a')]:'');}return _0x4d2513+')';};var _0x32c130={'where':{'id':_0x55fa6c[_0xf56f('0x48')]['id']}},_0x44a77c,_0x14ee53,_0x170631,_0x474451,_0x236175;_0x32c130=_['merge']({},_0x32c130,_0x55fa6c[_0xf56f('0x42')]);return db[_0xf56f('0x2d')]['find'](_0x32c130)[_0xf56f('0x26')](function(_0x241c2c){if(_0x241c2c){_0x44a77c=_0x241c2c;return _0x241c2c['getFields']();}return null;})['then'](function(_0x2691ce){if(_0x2691ce){if(!_0x2691ce[_0xf56f('0x65')]){throw new db[(_0xf56f('0x6b'))][(_0xf56f('0x8d'))](_0xf56f('0x6c'),0x193);}_0x14ee53=_0x2691ce;return db[_0xf56f('0x6d')]['findAll']({'raw':!![]});}return null;})[_0xf56f('0x26')](function(_0x225d15){if(_0x225d15){_0x170631=_[_0xf56f('0x6e')](_0x225d15,'id');var _0x45ef88;var _0xd5ec4a=squel[_0xf56f('0x86')]();_0xd5ec4a['from'](_0x44a77c[_0xf56f('0x70')]);for(var _0x1faeb3=0x0;_0x1faeb3<_0x14ee53[_0xf56f('0x65')];_0x1faeb3+=0x1){_0x45ef88=_0x14ee53[_0x1faeb3][_0xf56f('0x71')]?_0x170631[_0x14ee53[_0x1faeb3]['MetricId']][_0xf56f('0x87')]:_0x14ee53[_0x1faeb3][_0xf56f('0x41')];_0x45ef88=_0x14ee53[_0x1faeb3][_0xf56f('0x72')]?_[_0xf56f('0x73')](_0x31b220[_0x14ee53[_0x1faeb3]['function']],'%s',_0x45ef88):_0x45ef88;_0x45ef88=_0x14ee53[_0x1faeb3][_0xf56f('0x74')]?_['replace'](_0x1e1d0a[_0x14ee53[_0x1faeb3]['format']],'%s',_0x45ef88):_0x45ef88;if(_0x14ee53[_0x1faeb3][_0xf56f('0x75')]){_0xd5ec4a[_0xf56f('0x68')](_0x45ef88);}_0x14ee53[_0x1faeb3]['orderBy']&&_0xd5ec4a['order'](_0x45ef88,_0x14ee53[_0x1faeb3]['orderBy']===_0xf56f('0x77')?![]:!![]);_0xd5ec4a['field'](_0x45ef88,_0x14ee53[_0x1faeb3][_0xf56f('0x88')]||_0x45ef88);}if(_0x44a77c[_0xf56f('0x78')]){_0x44a77c[_0xf56f('0x78')]=JSON[_0xf56f('0x79')](_0x44a77c[_0xf56f('0x78')]);for(var _0xe1c9d6=0x0;_0xe1c9d6<_0x44a77c[_0xf56f('0x78')][_0xf56f('0x65')];_0xe1c9d6+=0x1){if(_0x44a77c['joins'][_0xe1c9d6][_0xf56f('0x3e')]&&_[_0xf56f('0x61')](_0x16add3,_0x44a77c[_0xf56f('0x78')][_0xe1c9d6]['type'])&&_0x44a77c[_0xf56f('0x78')][_0xe1c9d6]['parentKey']&&_0x44a77c['joins'][_0xe1c9d6]['foreignTable']&&_0x44a77c[_0xf56f('0x78')][_0xe1c9d6][_0xf56f('0x7d')]){_0xd5ec4a[_0x44a77c[_0xf56f('0x78')][_0xe1c9d6][_0xf56f('0x3e')]](_0x44a77c[_0xf56f('0x78')][_0xe1c9d6][_0xf56f('0x7b')],null,util[_0xf56f('0x74')]('%s.%s\x20=\x20%s.%s',_0x44a77c[_0xf56f('0x70')],_0x44a77c[_0xf56f('0x78')][_0xe1c9d6][_0xf56f('0x7a')],_0x44a77c[_0xf56f('0x78')][_0xe1c9d6]['foreignTable'],_0x44a77c[_0xf56f('0x78')][_0xe1c9d6][_0xf56f('0x7d')]));}}}if(_0x44a77c[_0xf56f('0x7e')]){_0x44a77c['conditions']=JSON[_0xf56f('0x79')](_0x44a77c[_0xf56f('0x7e')]);_0xd5ec4a[_0xf56f('0x3a')](_0x3578f4(_0x44a77c[_0xf56f('0x7e')]['group']));}_0x236175=_0xd5ec4a[_0xf56f('0x89')]();_0xd5ec4a[_0xf56f('0x1d')](_0x26ed08);_0xd5ec4a[_0xf56f('0x1c')](0x0);logger[_0xf56f('0x8a')](_0xf56f('0x7f'),_0xd5ec4a[_0xf56f('0x80')]());return db[_0xf56f('0x8b')][_0xf56f('0x2f')](_0xd5ec4a['toString'](),{'type':db[_0xf56f('0x8b')][_0xf56f('0x8c')]['SELECT']});}})[_0xf56f('0x26')](function(){return{'sql':_0x236175[_0xf56f('0x80')]()};})[_0xf56f('0x26')](respondWithResult(_0x52a99e,null))['catch'](handleError(_0x52a99e,null));};
\ No newline at end of file
index 607c488..28e76f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd119=['./analyticDefaultReport.attributes','define','AnalyticDefaultReport','analytics_default_reports','util','../../config/logger','moment','request-promise'];(function(_0x432682,_0x253044){var _0x463d05=function(_0xa73403){while(--_0xa73403){_0x432682['push'](_0x432682['shift']());}};_0x463d05(++_0x253044);}(_0xd119,0x74));var _0x9d11=function(_0x5de214,_0x107e9d){_0x5de214=_0x5de214-0x0;var _0x4df627=_0xd119[_0x5de214];return _0x4df627;};'use strict';var _=require('lodash');var util=require(_0x9d11('0x0'));var logger=require(_0x9d11('0x1'))('api');var moment=require(_0x9d11('0x2'));var BPromise=require('bluebird');var rp=require(_0x9d11('0x3'));var attributes=require(_0x9d11('0x4'));module['exports']=function(_0x35558b,_0x1ae91b){return _0x35558b[_0x9d11('0x5')](_0x9d11('0x6'),attributes,{'tableName':_0x9d11('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xeed3=['exports','define','AnalyticDefaultReport','analytics_default_reports','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./analyticDefaultReport.attributes'];(function(_0x5b47f1,_0x1aa4bc){var _0x5befec=function(_0x7f1a00){while(--_0x7f1a00){_0x5b47f1['push'](_0x5b47f1['shift']());}};_0x5befec(++_0x1aa4bc);}(_0xeed3,0x148));var _0x3eed=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0xeed3[_0x4565bf];return _0x5610ba;};'use strict';var _=require(_0x3eed('0x0'));var util=require(_0x3eed('0x1'));var logger=require(_0x3eed('0x2'))(_0x3eed('0x3'));var moment=require(_0x3eed('0x4'));var BPromise=require(_0x3eed('0x5'));var rp=require(_0x3eed('0x6'));var attributes=require(_0x3eed('0x7'));module[_0x3eed('0x8')]=function(_0x117f9b,_0x16d3b1){return _0x117f9b[_0x3eed('0x9')](_0x3eed('0xa'),attributes,{'tableName':_0x3eed('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bc6e7af..8bf6613 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbdb7=['request\x20sent','debug','AnalyticDefaultReport,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','http','info','AnalyticDefaultReport,\x20%s,\x20%s'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xbdb7,0x12e));var _0x7bdb=function(_0x5834bc,_0x3d4801){_0x5834bc=_0x5834bc-0x0;var _0x3e183a=_0xbdb7[_0x5834bc];return _0x3e183a;};'use strict';var _=require(_0x7bdb('0x0'));var util=require(_0x7bdb('0x1'));var moment=require(_0x7bdb('0x2'));var BPromise=require(_0x7bdb('0x3'));var rs=require(_0x7bdb('0x4'));var fs=require('fs');var Redis=require(_0x7bdb('0x5'));var db=require(_0x7bdb('0x6'))['db'];var utils=require(_0x7bdb('0x7'));var logger=require(_0x7bdb('0x8'))('rpc');var config=require(_0x7bdb('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0x7bdb('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x1e23a3,_0x493bde,_0x513cba){return new BPromise(function(_0x468041,_0x11a877){return client['request'](_0x1e23a3,_0x513cba)['then'](function(_0xdc2ffc){logger[_0x7bdb('0xb')](_0x7bdb('0xc'),_0x493bde,_0x7bdb('0xd'));logger[_0x7bdb('0xe')](_0x7bdb('0xf'),_0x493bde,_0x7bdb('0xd'),JSON[_0x7bdb('0x10')](_0xdc2ffc));if(_0xdc2ffc['error']){if(_0xdc2ffc['error']['code']===0x1f4){logger[_0x7bdb('0x11')](_0x7bdb('0xc'),_0x493bde,_0xdc2ffc['error'][_0x7bdb('0x12')]);return _0x11a877(_0xdc2ffc['error']['message']);}logger[_0x7bdb('0x11')](_0x7bdb('0xc'),_0x493bde,_0xdc2ffc['error']['message']);return _0x468041(_0xdc2ffc['error'][_0x7bdb('0x12')]);}else{logger[_0x7bdb('0xb')](_0x7bdb('0xc'),_0x493bde,_0x7bdb('0xd'));_0x468041(_0xdc2ffc[_0x7bdb('0x13')][_0x7bdb('0x12')]);}})[_0x7bdb('0x14')](function(_0x1b2d9b){logger['error'](_0x7bdb('0xc'),_0x493bde,_0x1b2d9b);_0x11a877(_0x1b2d9b);});});}
\ No newline at end of file
+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(_0x15b45d,_0x3c397f){var _0x1feecb=function(_0x13a295){while(--_0x13a295){_0x15b45d['push'](_0x15b45d['shift']());}};_0x1feecb(++_0x3c397f);}(_0xedd9,0xfc));var _0x9edd=function(_0x1b9feb,_0x2751d3){_0x1b9feb=_0x1b9feb-0x0;var _0x3746fc=_0xedd9[_0x1b9feb];return _0x3746fc;};'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
index bf71e0f..64635e0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d54=['preview','/:id/run','run','/:id/query','query','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./analyticDefaultReport.controller','get','index','/:id','isAuthenticated'];(function(_0x24e069,_0x82e11b){var _0x1ee847=function(_0x4efeba){while(--_0x4efeba){_0x24e069['push'](_0x24e069['shift']());}};_0x1ee847(++_0x82e11b);}(_0x5d54,0x1ce));var _0x45d5=function(_0x6c0de0,_0x5995f5){_0x6c0de0=_0x6c0de0-0x0;var _0x462484=_0x5d54[_0x6c0de0];return _0x462484;};'use strict';var multer=require(_0x45d5('0x0'));var util=require(_0x45d5('0x1'));var path=require(_0x45d5('0x2'));var timeout=require(_0x45d5('0x3'));var express=require(_0x45d5('0x4'));var router=express[_0x45d5('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x45d5('0x6'));var config=require(_0x45d5('0x7'));var controller=require(_0x45d5('0x8'));router[_0x45d5('0x9')]('/',auth['isAuthenticated'](),controller[_0x45d5('0xa')]);router[_0x45d5('0x9')](_0x45d5('0xb'),auth[_0x45d5('0xc')](),controller['show']);router[_0x45d5('0x9')]('/:id/preview',auth[_0x45d5('0xc')](),controller[_0x45d5('0xd')]);router[_0x45d5('0x9')](_0x45d5('0xe'),auth[_0x45d5('0xc')](),controller[_0x45d5('0xf')]);router[_0x45d5('0x9')](_0x45d5('0x10'),auth[_0x45d5('0xc')](),controller[_0x45d5('0x11')]);router[_0x45d5('0x12')]('/',auth['isAuthenticated'](),controller[_0x45d5('0x13')]);router[_0x45d5('0x14')](_0x45d5('0xb'),auth[_0x45d5('0xc')](),controller[_0x45d5('0x15')]);router[_0x45d5('0x16')](_0x45d5('0xb'),auth['isAuthenticated'](),controller[_0x45d5('0x17')]);module[_0x45d5('0x18')]=router;
\ No newline at end of file
+var _0x2afe=['exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticDefaultReport.controller','get','isAuthenticated','index','/:id','show','/:id/preview','run','query','post','create','put','update','delete','destroy'];(function(_0x2c3951,_0x4bc1d8){var _0x5e9d6b=function(_0x2e01e0){while(--_0x2e01e0){_0x2c3951['push'](_0x2c3951['shift']());}};_0x5e9d6b(++_0x4bc1d8);}(_0x2afe,0xc1));var _0xe2af=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x2afe[_0x5b644e];return _0x49c6bf;};'use strict';var multer=require(_0xe2af('0x0'));var util=require('util');var path=require(_0xe2af('0x1'));var timeout=require(_0xe2af('0x2'));var express=require(_0xe2af('0x3'));var router=express[_0xe2af('0x4')]();var auth=require(_0xe2af('0x5'));var interaction=require(_0xe2af('0x6'));var config=require(_0xe2af('0x7'));var controller=require(_0xe2af('0x8'));router[_0xe2af('0x9')]('/',auth[_0xe2af('0xa')](),controller[_0xe2af('0xb')]);router[_0xe2af('0x9')](_0xe2af('0xc'),auth[_0xe2af('0xa')](),controller[_0xe2af('0xd')]);router[_0xe2af('0x9')](_0xe2af('0xe'),auth[_0xe2af('0xa')](),controller['preview']);router[_0xe2af('0x9')]('/:id/run',auth[_0xe2af('0xa')](),controller[_0xe2af('0xf')]);router[_0xe2af('0x9')]('/:id/query',auth[_0xe2af('0xa')](),controller[_0xe2af('0x10')]);router[_0xe2af('0x11')]('/',auth[_0xe2af('0xa')](),controller[_0xe2af('0x12')]);router[_0xe2af('0x13')]('/:id',auth[_0xe2af('0xa')](),controller[_0xe2af('0x14')]);router[_0xe2af('0x15')]('/:id',auth['isAuthenticated'](),controller[_0xe2af('0x16')]);module[_0xe2af('0x17')]=router;
\ No newline at end of file
index 6f02097..24e9382 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x197a=['Loading','manual','scheduled','INTEGER','UNSIGNED','sequelize','exports','STRING','ENUM','csv','xlsx','DATE'];(function(_0x4caa4e,_0x228bce){var _0x341d1f=function(_0x29040b){while(--_0x29040b){_0x4caa4e['push'](_0x4caa4e['shift']());}};_0x341d1f(++_0x228bce);}(_0x197a,0x1e5));var _0xa197=function(_0x5350ec,_0x316fd1){_0x5350ec=_0x5350ec-0x0;var _0x47da97=_0x197a[_0x5350ec];return _0x47da97;};'use strict';var Sequelize=require(_0xa197('0x0'));var moment=require('moment');module[_0xa197('0x1')]={'name':{'type':Sequelize[_0xa197('0x2')],'allowNull':![]},'basename':{'type':Sequelize['STRING'],'allowNull':![]},'output':{'type':Sequelize[_0xa197('0x3')](_0xa197('0x4'),'pdf',_0xa197('0x5')),'allowNull':![],'defaultValue':_0xa197('0x4')},'savename':{'type':Sequelize[_0xa197('0x2')],'allowNull':![]},'startDate':{'type':Sequelize[_0xa197('0x6')]},'endDate':{'type':Sequelize[_0xa197('0x6')]},'status':{'type':Sequelize[_0xa197('0x2')],'defaultValue':_0xa197('0x7')},'type':{'type':Sequelize[_0xa197('0x3')](_0xa197('0x8'),_0xa197('0x9')),'allowNull':![],'defaultValue':'manual'},'reportId':{'type':Sequelize[_0xa197('0xa')](0xb)[_0xa197('0xb')]},'reportType':{'type':Sequelize[_0xa197('0x2')]}};
\ No newline at end of file
+var _0x0b20=['exports','pdf','xlsx','csv','STRING','DATE','ENUM','manual','scheduled','INTEGER','UNSIGNED','sequelize'];(function(_0x4812ac,_0x5912b9){var _0x7c5363=function(_0x5e1b69){while(--_0x5e1b69){_0x4812ac['push'](_0x4812ac['shift']());}};_0x7c5363(++_0x5912b9);}(_0x0b20,0xbf));var _0x00b2=function(_0x252307,_0x2b3c99){_0x252307=_0x252307-0x0;var _0x5c3b5a=_0x0b20[_0x252307];return _0x5c3b5a;};'use strict';var Sequelize=require(_0x00b2('0x0'));var moment=require('moment');module[_0x00b2('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'basename':{'type':Sequelize['STRING'],'allowNull':![]},'output':{'type':Sequelize['ENUM']('csv',_0x00b2('0x2'),_0x00b2('0x3')),'allowNull':![],'defaultValue':_0x00b2('0x4')},'savename':{'type':Sequelize[_0x00b2('0x5')],'allowNull':![]},'startDate':{'type':Sequelize[_0x00b2('0x6')]},'endDate':{'type':Sequelize[_0x00b2('0x6')]},'status':{'type':Sequelize[_0x00b2('0x5')],'defaultValue':'Loading'},'type':{'type':Sequelize[_0x00b2('0x7')](_0x00b2('0x8'),_0x00b2('0x9')),'allowNull':![],'defaultValue':_0x00b2('0x8')},'reportId':{'type':Sequelize[_0x00b2('0xa')](0xb)[_0x00b2('0xb')]},'reportType':{'type':Sequelize[_0x00b2('0x5')]}};
\ No newline at end of file
index 1d03fee..ba7b1b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6e94=['VIRTUAL','field','filter','count','includeAll','include','rows','catch','show','rawAttributes','find','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','autoAssociation','create','body','params','download','basename','savename','join','root','server/files/reports','Sequelize','ValidationError','Report\x20not\x20found\x20or\x20empty','exists','output','html-pdf','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','offset','limit','Content-Range','apply','reject','save','update','then','get','ExtractedReports','UserProfileResource','destroy','error','stack','name','index','AnalyticExtractedReport','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','merge','map','key'];(function(_0x53c9f0,_0x530873){var _0x2eeda9=function(_0x3a9e18){while(--_0x3a9e18){_0x53c9f0['push'](_0x53c9f0['shift']());}};_0x2eeda9(++_0x530873);}(_0x6e94,0x135));var _0x46e9=function(_0x5a130d,_0x5a9e96){_0x5a130d=_0x5a130d-0x0;var _0x1822f2=_0x6e94[_0x5a130d];return _0x1822f2;};'use strict';var pdf=require(_0x46e9('0x0'));var emlformat=require(_0x46e9('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x46e9('0x2'));var jsonpatch=require(_0x46e9('0x3'));var rp=require('request-promise');var moment=require(_0x46e9('0x4'));var BPromise=require(_0x46e9('0x5'));var Mustache=require(_0x46e9('0x6'));var util=require(_0x46e9('0x7'));var path=require(_0x46e9('0x8'));var sox=require(_0x46e9('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x46e9('0xa'));var squel=require(_0x46e9('0xb'));var crypto=require(_0x46e9('0xc'));var jsforce=require(_0x46e9('0xd'));var deskjs=require(_0x46e9('0xe'));var toCsv=require(_0x46e9('0xf'));var querystring=require(_0x46e9('0x10'));var Papa=require('papaparse');var authService=require(_0x46e9('0x11'));var hardwareService=require(_0x46e9('0x12'));var Redis=require(_0x46e9('0x13'));var qs=require(_0x46e9('0x14'));var logger=require(_0x46e9('0x15'))(_0x46e9('0x16'));var utils=require(_0x46e9('0x17'));var config=require(_0x46e9('0x18'));var db=require(_0x46e9('0x19'))['db'];function respondWithStatusCode(_0x17ca5e,_0x18db1d){_0x18db1d=_0x18db1d||0xcc;return function(_0x271758){if(_0x271758){return _0x17ca5e[_0x46e9('0x1a')](_0x18db1d);}return _0x17ca5e['status'](_0x18db1d)[_0x46e9('0x1b')]();};}function respondWithResult(_0x295a9f,_0x152997){_0x152997=_0x152997||0xc8;return function(_0x912cd4){if(_0x912cd4){return _0x295a9f[_0x46e9('0x1c')](_0x152997)[_0x46e9('0x1d')](_0x912cd4);}};}function respondWithFilteredResult(_0x3a0e78,_0x2a1a08){return function(_0x18e6c0){if(_0x18e6c0){var _0x472f9c=_0x18e6c0['count'],_0x54663d=_0x2a1a08[_0x46e9('0x1e')],_0x54a6df=_0x2a1a08[_0x46e9('0x1e')]+_0x2a1a08[_0x46e9('0x1f')],_0x20f65d;if(_0x54a6df>=_0x472f9c){_0x54a6df=_0x472f9c;_0x20f65d=0xc8;}else{_0x20f65d=0xce;}_0x3a0e78[_0x46e9('0x1c')](_0x20f65d);return _0x3a0e78['set'](_0x46e9('0x20'),_0x54663d+'-'+_0x54a6df+'/'+_0x472f9c)[_0x46e9('0x1d')](_0x18e6c0);}return null;};}function patchUpdates(_0x404738){return function(_0x11867c){try{jsonpatch[_0x46e9('0x21')](_0x11867c,_0x404738,!![]);}catch(_0x343a10){return BPromise[_0x46e9('0x22')](_0x343a10);}return _0x11867c[_0x46e9('0x23')]();};}function saveUpdates(_0x3411ff,_0x5c2254){return function(_0x2a4025){if(_0x2a4025){return _0x2a4025[_0x46e9('0x24')](_0x3411ff)[_0x46e9('0x25')](function(_0x18ae14){return _0x18ae14;});}return null;};}function removeEntity(_0x587c4a,_0x52758d){return function(_0x144af1){if(_0x144af1){return _0x144af1['destroy']()[_0x46e9('0x25')](function(){var _0x392460=_0x144af1[_0x46e9('0x26')]({'plain':!![]});var _0x1e77fc=_0x46e9('0x27');return db[_0x46e9('0x28')][_0x46e9('0x29')]({'where':{'type':_0x1e77fc,'resourceId':_0x392460['id']}})[_0x46e9('0x25')](function(){return _0x144af1;});})[_0x46e9('0x25')](function(){_0x587c4a[_0x46e9('0x1c')](0xcc)[_0x46e9('0x1b')]();});}};}function handleEntityNotFound(_0x438d32,_0x16d570){return function(_0x183fbd){if(!_0x183fbd){_0x438d32[_0x46e9('0x1a')](0x194);}return _0x183fbd;};}function handleError(_0x472af5,_0x2448b0){_0x2448b0=_0x2448b0||0x1f4;return function(_0x2b07a3){logger[_0x46e9('0x2a')](_0x2b07a3[_0x46e9('0x2b')]);if(_0x2b07a3['name']){delete _0x2b07a3[_0x46e9('0x2c')];}_0x472af5[_0x46e9('0x1c')](_0x2448b0)['send'](_0x2b07a3);};}exports[_0x46e9('0x2d')]=function(_0x38dcf7,_0x7a6c8d){var _0xe9464d={},_0x590ba0={},_0x4f3267={'count':0x0,'rows':[]};var _0x124061=db[_0x46e9('0x2e')]['rawAttributes'];_0x590ba0['model']=_[_0x46e9('0x2f')](_0x124061);_0x590ba0[_0x46e9('0x30')]=_[_0x46e9('0x2f')](_0x38dcf7['query']);_0x590ba0[_0x46e9('0x31')]=_[_0x46e9('0x32')](_0x590ba0[_0x46e9('0x33')],_0x590ba0[_0x46e9('0x30')]);_0xe9464d[_0x46e9('0x34')]=_[_0x46e9('0x32')](_0x590ba0['model'],qs[_0x46e9('0x35')](_0x38dcf7['query'][_0x46e9('0x35')]));_0xe9464d[_0x46e9('0x34')]=_0xe9464d[_0x46e9('0x34')][_0x46e9('0x36')]?_0xe9464d[_0x46e9('0x34')]:_0x590ba0[_0x46e9('0x33')];if(!_0x38dcf7[_0x46e9('0x30')][_0x46e9('0x37')](_0x46e9('0x38'))){_0xe9464d['limit']=qs[_0x46e9('0x1f')](_0x38dcf7[_0x46e9('0x30')]['limit']);_0xe9464d[_0x46e9('0x1e')]=qs[_0x46e9('0x1e')](_0x38dcf7[_0x46e9('0x30')]['offset']);}_0xe9464d[_0x46e9('0x39')]=qs[_0x46e9('0x3a')](_0x38dcf7['query']['sort']);_0xe9464d['where']=qs[_0x46e9('0x31')](_['pick'](_0x38dcf7[_0x46e9('0x30')],_0x590ba0[_0x46e9('0x31')]));if(_0x38dcf7[_0x46e9('0x30')]['filter']){_0xe9464d[_0x46e9('0x3b')]=_[_0x46e9('0x3c')](_0xe9464d[_0x46e9('0x3b')],{'$or':_[_0x46e9('0x3d')](_0x124061,function(_0x429853){if(_0x429853['type'][_0x46e9('0x3e')]!==_0x46e9('0x3f')){var _0x39b3f6={};_0x39b3f6[_0x429853[_0x46e9('0x40')]]={'$like':'%'+_0x38dcf7[_0x46e9('0x30')][_0x46e9('0x41')]+'%'};return _0x39b3f6;}})});}_0xe9464d=_[_0x46e9('0x3c')]({},_0xe9464d,_0x38dcf7['options']);var _0x4c948c={'where':_0xe9464d[_0x46e9('0x3b')]};return db[_0x46e9('0x2e')][_0x46e9('0x42')](_0x4c948c)[_0x46e9('0x25')](function(_0x30756e){_0x4f3267['count']=_0x30756e;if(_0x38dcf7['query'][_0x46e9('0x43')]){_0xe9464d[_0x46e9('0x44')]=[{'all':!![]}];}return db['AnalyticExtractedReport']['findAll'](_0xe9464d);})[_0x46e9('0x25')](function(_0x188a07){_0x4f3267[_0x46e9('0x45')]=_0x188a07;return _0x4f3267;})[_0x46e9('0x25')](respondWithFilteredResult(_0x7a6c8d,_0xe9464d))[_0x46e9('0x46')](handleError(_0x7a6c8d,null));};exports[_0x46e9('0x47')]=function(_0x19f2ee,_0x27295c){var _0x3aef2a={'raw':!![],'where':{'id':_0x19f2ee['params']['id']}},_0x3c5f74={};_0x3c5f74[_0x46e9('0x33')]=_[_0x46e9('0x2f')](db[_0x46e9('0x2e')][_0x46e9('0x48')]);_0x3c5f74[_0x46e9('0x30')]=_[_0x46e9('0x2f')](_0x19f2ee[_0x46e9('0x30')]);_0x3c5f74['filters']=_[_0x46e9('0x32')](_0x3c5f74[_0x46e9('0x33')],_0x3c5f74[_0x46e9('0x30')]);_0x3aef2a[_0x46e9('0x34')]=_[_0x46e9('0x32')](_0x3c5f74[_0x46e9('0x33')],qs[_0x46e9('0x35')](_0x19f2ee['query'][_0x46e9('0x35')]));_0x3aef2a['attributes']=_0x3aef2a[_0x46e9('0x34')]['length']?_0x3aef2a[_0x46e9('0x34')]:_0x3c5f74['model'];if(_0x19f2ee['query'][_0x46e9('0x43')]){_0x3aef2a[_0x46e9('0x44')]=[{'all':!![]}];}_0x3aef2a=_['merge']({},_0x3aef2a,_0x19f2ee['options']);return db[_0x46e9('0x2e')][_0x46e9('0x49')](_0x3aef2a)[_0x46e9('0x25')](handleEntityNotFound(_0x27295c,null))['then'](respondWithResult(_0x27295c,null))[_0x46e9('0x46')](handleError(_0x27295c,null));};exports['create']=function(_0x3d4ba2,_0xd609ef){return db['AnalyticExtractedReport']['create'](_0x3d4ba2['body'],{})[_0x46e9('0x25')](function(_0x35af0d){var _0x5c5fa3=_0x3d4ba2['user'][_0x46e9('0x26')]({'plain':!![]});if(!_0x5c5fa3)throw new Error(_0x46e9('0x4a'));if(_0x5c5fa3[_0x46e9('0x4b')]===_0x46e9('0x4c')){var _0xf0147f=_0x35af0d[_0x46e9('0x26')]({'plain':!![]});var _0x5d1813=_0x46e9('0x27');return db[_0x46e9('0x4d')][_0x46e9('0x49')]({'where':{'name':_0x5d1813,'userProfileId':_0x5c5fa3['userProfileId']},'raw':!![]})[_0x46e9('0x25')](function(_0x1b3753){if(_0x1b3753&&_0x1b3753[_0x46e9('0x4e')]===0x0){return db[_0x46e9('0x28')][_0x46e9('0x4f')]({'name':_0xf0147f[_0x46e9('0x2c')],'resourceId':_0xf0147f['id'],'type':_0x1b3753['name'],'sectionId':_0x1b3753['id']},{})[_0x46e9('0x25')](function(){return _0x35af0d;});}else{return _0x35af0d;}})['catch'](function(_0xc7b924){logger[_0x46e9('0x2a')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0xc7b924);throw _0xc7b924;});}return _0x35af0d;})['then'](respondWithResult(_0xd609ef,0xc9))[_0x46e9('0x46')](handleError(_0xd609ef,null));};exports['update']=function(_0x24440f,_0x31967a){if(_0x24440f[_0x46e9('0x50')]['id']){delete _0x24440f[_0x46e9('0x50')]['id'];}return db[_0x46e9('0x2e')][_0x46e9('0x49')]({'where':{'id':_0x24440f[_0x46e9('0x51')]['id']}})[_0x46e9('0x25')](handleEntityNotFound(_0x31967a,null))[_0x46e9('0x25')](saveUpdates(_0x24440f['body'],null))[_0x46e9('0x25')](respondWithResult(_0x31967a,null))[_0x46e9('0x46')](handleError(_0x31967a,null));};exports[_0x46e9('0x29')]=function(_0x224f9c,_0x108756){return db[_0x46e9('0x2e')][_0x46e9('0x49')]({'where':{'id':_0x224f9c[_0x46e9('0x51')]['id']}})[_0x46e9('0x25')](handleEntityNotFound(_0x108756,null))['then'](removeEntity(_0x108756,null))[_0x46e9('0x46')](handleError(_0x108756,null));};exports[_0x46e9('0x52')]=function(_0x58b45e,_0x538982,_0xa3cb72){return db[_0x46e9('0x2e')][_0x46e9('0x49')]({'where':{'id':_0x58b45e['params']['id']},'attributes':[_0x46e9('0x2c'),_0x46e9('0x53'),_0x46e9('0x54'),'output'],'raw':!![]})[_0x46e9('0x25')](handleEntityNotFound(_0x538982,null))[_0x46e9('0x25')](function(_0x3b8016){if(_0x3b8016){if(!fs['existsSync'](path[_0x46e9('0x55')](config[_0x46e9('0x56')],_0x46e9('0x57'),_0x3b8016[_0x46e9('0x54')]))){throw new db[(_0x46e9('0x58'))][(_0x46e9('0x59'))](_0x46e9('0x5a'));}if(_0x58b45e[_0x46e9('0x30')][_0x46e9('0x5b')]){return _0x538982[_0x46e9('0x1a')](0xc8);}return _0x538982['download'](path[_0x46e9('0x55')](config[_0x46e9('0x56')],'server/files/reports',_0x3b8016[_0x46e9('0x54')]),util['format']('%s.%s',_0x3b8016['basename']||_0x3b8016[_0x46e9('0x2c')],_0x3b8016[_0x46e9('0x5c')]['toLowerCase']()));}})[_0x46e9('0x46')](handleError(_0x538982,null));};
\ No newline at end of file
+var _0xb56e=['UserProfileResource','error','stack','name','send','index','rawAttributes','keys','query','model','attributes','intersection','fields','hasOwnProperty','nolimit','order','sort','filters','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','AnalyticExtractedReport','count','includeAll','findAll','catch','show','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','params','download','basename','output','existsSync','server/files/reports','savename','Sequelize','ValidationError','exists','root','format','%s.%s','toLowerCase','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/utils','../../config/environment','sendStatus','status','end','json','offset','limit','set','apply','reject','save','then','destroy','get','ExtractedReports'];(function(_0x116f55,_0x4f4b44){var _0x292153=function(_0x94482b){while(--_0x94482b){_0x116f55['push'](_0x116f55['shift']());}};_0x292153(++_0x4f4b44);}(_0xb56e,0x90));var _0xeb56=function(_0x2395be,_0x15844){_0x2395be=_0x2395be-0x0;var _0x48dddc=_0xb56e[_0x2395be];return _0x48dddc;};'use strict';var pdf=require(_0xeb56('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xeb56('0x1'));var zipdir=require(_0xeb56('0x2'));var jsonpatch=require(_0xeb56('0x3'));var rp=require('request-promise');var moment=require(_0xeb56('0x4'));var BPromise=require(_0xeb56('0x5'));var Mustache=require(_0xeb56('0x6'));var util=require(_0xeb56('0x7'));var path=require(_0xeb56('0x8'));var sox=require(_0xeb56('0x9'));var csv=require(_0xeb56('0xa'));var ejs=require(_0xeb56('0xb'));var fs=require('fs');var _=require(_0xeb56('0xc'));var squel=require(_0xeb56('0xd'));var crypto=require(_0xeb56('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xeb56('0xa'));var querystring=require('querystring');var Papa=require(_0xeb56('0xf'));var authService=require(_0xeb56('0x10'));var hardwareService=require(_0xeb56('0x11'));var Redis=require(_0xeb56('0x12'));var qs=require(_0xeb56('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0xeb56('0x14'));var config=require(_0xeb56('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1bedfa,_0x405057){_0x405057=_0x405057||0xcc;return function(_0x485ef7){if(_0x485ef7){return _0x1bedfa[_0xeb56('0x16')](_0x405057);}return _0x1bedfa[_0xeb56('0x17')](_0x405057)[_0xeb56('0x18')]();};}function respondWithResult(_0x1ae871,_0xa1e6af){_0xa1e6af=_0xa1e6af||0xc8;return function(_0x2f836b){if(_0x2f836b){return _0x1ae871[_0xeb56('0x17')](_0xa1e6af)[_0xeb56('0x19')](_0x2f836b);}};}function respondWithFilteredResult(_0x118fc3,_0x585b9f){return function(_0x253c6b){if(_0x253c6b){var _0x1473ea=_0x253c6b['count'],_0x541a15=_0x585b9f['offset'],_0x1fe5e8=_0x585b9f[_0xeb56('0x1a')]+_0x585b9f[_0xeb56('0x1b')],_0x3382b9;if(_0x1fe5e8>=_0x1473ea){_0x1fe5e8=_0x1473ea;_0x3382b9=0xc8;}else{_0x3382b9=0xce;}_0x118fc3['status'](_0x3382b9);return _0x118fc3[_0xeb56('0x1c')]('Content-Range',_0x541a15+'-'+_0x1fe5e8+'/'+_0x1473ea)['json'](_0x253c6b);}return null;};}function patchUpdates(_0x21027f){return function(_0x5c280b){try{jsonpatch[_0xeb56('0x1d')](_0x5c280b,_0x21027f,!![]);}catch(_0x136a34){return BPromise[_0xeb56('0x1e')](_0x136a34);}return _0x5c280b[_0xeb56('0x1f')]();};}function saveUpdates(_0x16ed86,_0x3816){return function(_0x4ff39e){if(_0x4ff39e){return _0x4ff39e['update'](_0x16ed86)[_0xeb56('0x20')](function(_0x51d89e){return _0x51d89e;});}return null;};}function removeEntity(_0xbf4e3b,_0x316ede){return function(_0x12fdd8){if(_0x12fdd8){return _0x12fdd8[_0xeb56('0x21')]()[_0xeb56('0x20')](function(){var _0x4e67a3=_0x12fdd8[_0xeb56('0x22')]({'plain':!![]});var _0x7dd6d6=_0xeb56('0x23');return db[_0xeb56('0x24')]['destroy']({'where':{'type':_0x7dd6d6,'resourceId':_0x4e67a3['id']}})[_0xeb56('0x20')](function(){return _0x12fdd8;});})[_0xeb56('0x20')](function(){_0xbf4e3b[_0xeb56('0x17')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5d211c,_0x158cfb){return function(_0x4dff22){if(!_0x4dff22){_0x5d211c[_0xeb56('0x16')](0x194);}return _0x4dff22;};}function handleError(_0x20562c,_0x2a940e){_0x2a940e=_0x2a940e||0x1f4;return function(_0x46e835){logger[_0xeb56('0x25')](_0x46e835[_0xeb56('0x26')]);if(_0x46e835[_0xeb56('0x27')]){delete _0x46e835[_0xeb56('0x27')];}_0x20562c['status'](_0x2a940e)[_0xeb56('0x28')](_0x46e835);};}exports[_0xeb56('0x29')]=function(_0x4c0dbe,_0x42f5d1){var _0x21fee6={},_0x180257={},_0x5e8b4f={'count':0x0,'rows':[]};var _0x34a542=db['AnalyticExtractedReport'][_0xeb56('0x2a')];_0x180257['model']=_[_0xeb56('0x2b')](_0x34a542);_0x180257[_0xeb56('0x2c')]=_['keys'](_0x4c0dbe[_0xeb56('0x2c')]);_0x180257['filters']=_['intersection'](_0x180257[_0xeb56('0x2d')],_0x180257['query']);_0x21fee6[_0xeb56('0x2e')]=_[_0xeb56('0x2f')](_0x180257[_0xeb56('0x2d')],qs['fields'](_0x4c0dbe['query'][_0xeb56('0x30')]));_0x21fee6[_0xeb56('0x2e')]=_0x21fee6[_0xeb56('0x2e')]['length']?_0x21fee6['attributes']:_0x180257[_0xeb56('0x2d')];if(!_0x4c0dbe[_0xeb56('0x2c')][_0xeb56('0x31')](_0xeb56('0x32'))){_0x21fee6['limit']=qs[_0xeb56('0x1b')](_0x4c0dbe['query'][_0xeb56('0x1b')]);_0x21fee6[_0xeb56('0x1a')]=qs['offset'](_0x4c0dbe[_0xeb56('0x2c')][_0xeb56('0x1a')]);}_0x21fee6[_0xeb56('0x33')]=qs[_0xeb56('0x34')](_0x4c0dbe[_0xeb56('0x2c')][_0xeb56('0x34')]);_0x21fee6['where']=qs[_0xeb56('0x35')](_[_0xeb56('0x36')](_0x4c0dbe['query'],_0x180257[_0xeb56('0x35')]));if(_0x4c0dbe[_0xeb56('0x2c')][_0xeb56('0x37')]){_0x21fee6[_0xeb56('0x38')]=_[_0xeb56('0x39')](_0x21fee6['where'],{'$or':_[_0xeb56('0x3a')](_0x34a542,function(_0x4d89cd){if(_0x4d89cd[_0xeb56('0x3b')][_0xeb56('0x3c')]!==_0xeb56('0x3d')){var _0x202dd8={};_0x202dd8[_0x4d89cd[_0xeb56('0x3e')]]={'$like':'%'+_0x4c0dbe[_0xeb56('0x2c')][_0xeb56('0x37')]+'%'};return _0x202dd8;}})});}_0x21fee6=_[_0xeb56('0x39')]({},_0x21fee6,_0x4c0dbe[_0xeb56('0x3f')]);var _0x56a8d0={'where':_0x21fee6[_0xeb56('0x38')]};return db[_0xeb56('0x40')][_0xeb56('0x41')](_0x56a8d0)['then'](function(_0x891d6){_0x5e8b4f[_0xeb56('0x41')]=_0x891d6;if(_0x4c0dbe[_0xeb56('0x2c')][_0xeb56('0x42')]){_0x21fee6['include']=[{'all':!![]}];}return db[_0xeb56('0x40')][_0xeb56('0x43')](_0x21fee6);})[_0xeb56('0x20')](function(_0xf2a9d2){_0x5e8b4f['rows']=_0xf2a9d2;return _0x5e8b4f;})['then'](respondWithFilteredResult(_0x42f5d1,_0x21fee6))[_0xeb56('0x44')](handleError(_0x42f5d1,null));};exports[_0xeb56('0x45')]=function(_0xbc217a,_0xa97a87){var _0x568623={'raw':!![],'where':{'id':_0xbc217a['params']['id']}},_0x387a29={};_0x387a29[_0xeb56('0x2d')]=_[_0xeb56('0x2b')](db['AnalyticExtractedReport'][_0xeb56('0x2a')]);_0x387a29[_0xeb56('0x2c')]=_[_0xeb56('0x2b')](_0xbc217a[_0xeb56('0x2c')]);_0x387a29[_0xeb56('0x35')]=_[_0xeb56('0x2f')](_0x387a29[_0xeb56('0x2d')],_0x387a29[_0xeb56('0x2c')]);_0x568623[_0xeb56('0x2e')]=_[_0xeb56('0x2f')](_0x387a29[_0xeb56('0x2d')],qs[_0xeb56('0x30')](_0xbc217a[_0xeb56('0x2c')][_0xeb56('0x30')]));_0x568623[_0xeb56('0x2e')]=_0x568623[_0xeb56('0x2e')]['length']?_0x568623['attributes']:_0x387a29['model'];if(_0xbc217a[_0xeb56('0x2c')][_0xeb56('0x42')]){_0x568623['include']=[{'all':!![]}];}_0x568623=_[_0xeb56('0x39')]({},_0x568623,_0xbc217a[_0xeb56('0x3f')]);return db['AnalyticExtractedReport'][_0xeb56('0x46')](_0x568623)['then'](handleEntityNotFound(_0xa97a87,null))['then'](respondWithResult(_0xa97a87,null))[_0xeb56('0x44')](handleError(_0xa97a87,null));};exports[_0xeb56('0x47')]=function(_0x135334,_0x13c174){return db[_0xeb56('0x40')][_0xeb56('0x47')](_0x135334['body'],{})[_0xeb56('0x20')](function(_0x1462e){var _0xd281b=_0x135334[_0xeb56('0x48')][_0xeb56('0x22')]({'plain':!![]});if(!_0xd281b)throw new Error(_0xeb56('0x49'));if(_0xd281b['role']===_0xeb56('0x48')){var _0x4197b2=_0x1462e[_0xeb56('0x22')]({'plain':!![]});var _0x4298d3=_0xeb56('0x23');return db['UserProfileSection'][_0xeb56('0x46')]({'where':{'name':_0x4298d3,'userProfileId':_0xd281b['userProfileId']},'raw':!![]})[_0xeb56('0x20')](function(_0x29bb04){if(_0x29bb04&&_0x29bb04['autoAssociation']===0x0){return db[_0xeb56('0x24')][_0xeb56('0x47')]({'name':_0x4197b2[_0xeb56('0x27')],'resourceId':_0x4197b2['id'],'type':_0x29bb04[_0xeb56('0x27')],'sectionId':_0x29bb04['id']},{})[_0xeb56('0x20')](function(){return _0x1462e;});}else{return _0x1462e;}})[_0xeb56('0x44')](function(_0x3bb8a8){logger['error'](_0xeb56('0x4a'),_0x3bb8a8);throw _0x3bb8a8;});}return _0x1462e;})[_0xeb56('0x20')](respondWithResult(_0x13c174,0xc9))[_0xeb56('0x44')](handleError(_0x13c174,null));};exports['update']=function(_0x131bcf,_0x3c4932){if(_0x131bcf[_0xeb56('0x4b')]['id']){delete _0x131bcf[_0xeb56('0x4b')]['id'];}return db[_0xeb56('0x40')]['find']({'where':{'id':_0x131bcf[_0xeb56('0x4c')]['id']}})[_0xeb56('0x20')](handleEntityNotFound(_0x3c4932,null))[_0xeb56('0x20')](saveUpdates(_0x131bcf[_0xeb56('0x4b')],null))[_0xeb56('0x20')](respondWithResult(_0x3c4932,null))[_0xeb56('0x44')](handleError(_0x3c4932,null));};exports[_0xeb56('0x21')]=function(_0x28af17,_0x4d8dc2){return db[_0xeb56('0x40')]['find']({'where':{'id':_0x28af17[_0xeb56('0x4c')]['id']}})['then'](handleEntityNotFound(_0x4d8dc2,null))['then'](removeEntity(_0x4d8dc2,null))[_0xeb56('0x44')](handleError(_0x4d8dc2,null));};exports[_0xeb56('0x4d')]=function(_0x189a4f,_0x1ac2f4,_0x5b6ce4){return db[_0xeb56('0x40')][_0xeb56('0x46')]({'where':{'id':_0x189a4f[_0xeb56('0x4c')]['id']},'attributes':[_0xeb56('0x27'),_0xeb56('0x4e'),'savename',_0xeb56('0x4f')],'raw':!![]})[_0xeb56('0x20')](handleEntityNotFound(_0x1ac2f4,null))[_0xeb56('0x20')](function(_0x4aaa53){if(_0x4aaa53){if(!fs[_0xeb56('0x50')](path['join'](config['root'],_0xeb56('0x51'),_0x4aaa53[_0xeb56('0x52')]))){throw new db[(_0xeb56('0x53'))][(_0xeb56('0x54'))]('Report\x20not\x20found\x20or\x20empty');}if(_0x189a4f[_0xeb56('0x2c')][_0xeb56('0x55')]){return _0x1ac2f4[_0xeb56('0x16')](0xc8);}return _0x1ac2f4[_0xeb56('0x4d')](path['join'](config[_0xeb56('0x56')],'server/files/reports',_0x4aaa53[_0xeb56('0x52')]),util[_0xeb56('0x57')](_0xeb56('0x58'),_0x4aaa53[_0xeb56('0x4e')]||_0x4aaa53['name'],_0x4aaa53[_0xeb56('0x4f')][_0xeb56('0x59')]()));}})['catch'](handleError(_0x1ac2f4,null));};
\ No newline at end of file
index a46e5fa..bd3c7b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf2e2=['AnalyticExtractedReport','analytics_extracted_reports','lodash','util','../../config/logger','moment','request-promise','./analyticExtractedReport.attributes','exports','define'];(function(_0x5baf22,_0x21fe88){var _0x5789ad=function(_0x3284e8){while(--_0x3284e8){_0x5baf22['push'](_0x5baf22['shift']());}};_0x5789ad(++_0x21fe88);}(_0xf2e2,0x1ce));var _0x2f2e=function(_0x5d9732,_0x234727){_0x5d9732=_0x5d9732-0x0;var _0x154e9d=_0xf2e2[_0x5d9732];return _0x154e9d;};'use strict';var _=require(_0x2f2e('0x0'));var util=require(_0x2f2e('0x1'));var logger=require(_0x2f2e('0x2'))('api');var moment=require(_0x2f2e('0x3'));var BPromise=require('bluebird');var rp=require(_0x2f2e('0x4'));var attributes=require(_0x2f2e('0x5'));module[_0x2f2e('0x6')]=function(_0xfac41d,_0x3067e8){return _0xfac41d[_0x2f2e('0x7')](_0x2f2e('0x8'),attributes,{'tableName':_0x2f2e('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfdf1=['util','api','bluebird','request-promise','exports','AnalyticExtractedReport'];(function(_0x103331,_0x2b3656){var _0x3282e1=function(_0x2294cb){while(--_0x2294cb){_0x103331['push'](_0x103331['shift']());}};_0x3282e1(++_0x2b3656);}(_0xfdf1,0xba));var _0x1fdf=function(_0x28722d,_0x49baaf){_0x28722d=_0x28722d-0x0;var _0x4ad9ef=_0xfdf1[_0x28722d];return _0x4ad9ef;};'use strict';var _=require('lodash');var util=require(_0x1fdf('0x0'));var logger=require('../../config/logger')(_0x1fdf('0x1'));var moment=require('moment');var BPromise=require(_0x1fdf('0x2'));var rp=require(_0x1fdf('0x3'));var attributes=require('./analyticExtractedReport.attributes');module[_0x1fdf('0x4')]=function(_0x187af3,_0x3380d9){return _0x187af3['define'](_0x1fdf('0x5'),attributes,{'tableName':'analytics_extracted_reports','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ee9754c..be6a0ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee64=['catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','jayson/promise','http','request','AnalyticExtractedReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result'];(function(_0x51b0dc,_0x5307b7){var _0x13fa89=function(_0x2c880f){while(--_0x2c880f){_0x51b0dc['push'](_0x51b0dc['shift']());}};_0x13fa89(++_0x5307b7);}(_0xee64,0xa1));var _0x4ee6=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0xee64[_0x3bf83f];return _0x22c4a9;};'use strict';var _=require('lodash');var util=require(_0x4ee6('0x0'));var moment=require(_0x4ee6('0x1'));var BPromise=require(_0x4ee6('0x2'));var rs=require(_0x4ee6('0x3'));var fs=require('fs');var Redis=require(_0x4ee6('0x4'));var db=require(_0x4ee6('0x5'))['db'];var utils=require(_0x4ee6('0x6'));var logger=require('../../config/logger')(_0x4ee6('0x7'));var config=require('../../config/environment');var jayson=require(_0x4ee6('0x8'));var client=jayson['client'][_0x4ee6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x28c0da,_0x34c4f9,_0x349f33){return new BPromise(function(_0x1a8cda,_0x396f01){return client[_0x4ee6('0xa')](_0x28c0da,_0x349f33)['then'](function(_0x105656){logger['info'](_0x4ee6('0xb'),_0x34c4f9,_0x4ee6('0xc'));logger[_0x4ee6('0xd')]('AnalyticExtractedReport,\x20%s,\x20%s,\x20%s',_0x34c4f9,'request\x20sent',JSON[_0x4ee6('0xe')](_0x105656));if(_0x105656[_0x4ee6('0xf')]){if(_0x105656[_0x4ee6('0xf')][_0x4ee6('0x10')]===0x1f4){logger[_0x4ee6('0xf')](_0x4ee6('0xb'),_0x34c4f9,_0x105656[_0x4ee6('0xf')]['message']);return _0x396f01(_0x105656[_0x4ee6('0xf')]['message']);}logger[_0x4ee6('0xf')](_0x4ee6('0xb'),_0x34c4f9,_0x105656[_0x4ee6('0xf')][_0x4ee6('0x11')]);return _0x1a8cda(_0x105656[_0x4ee6('0xf')][_0x4ee6('0x11')]);}else{logger['info'](_0x4ee6('0xb'),_0x34c4f9,'request\x20sent');_0x1a8cda(_0x105656[_0x4ee6('0x12')][_0x4ee6('0x11')]);}})[_0x4ee6('0x13')](function(_0x2af29c){logger[_0x4ee6('0xf')](_0x4ee6('0xb'),_0x34c4f9,_0x2af29c);_0x396f01(_0x2af29c);});});}
\ No newline at end of file
+var _0x02b4=['randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','AnalyticExtractedReport,\x20%s,\x20%s','request\x20sent','AnalyticExtractedReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util','moment','bluebird'];(function(_0x557fd2,_0x2c0a7a){var _0x1b54a2=function(_0x2e439b){while(--_0x2e439b){_0x557fd2['push'](_0x557fd2['shift']());}};_0x1b54a2(++_0x2c0a7a);}(_0x02b4,0x110));var _0x402b=function(_0x5e6199,_0x40ab25){_0x5e6199=_0x5e6199-0x0;var _0x2d0e54=_0x02b4[_0x5e6199];return _0x2d0e54;};'use strict';var _=require(_0x402b('0x0'));var util=require(_0x402b('0x1'));var moment=require(_0x402b('0x2'));var BPromise=require(_0x402b('0x3'));var rs=require(_0x402b('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x402b('0x5'))['db'];var utils=require(_0x402b('0x6'));var logger=require(_0x402b('0x7'))(_0x402b('0x8'));var config=require(_0x402b('0x9'));var jayson=require(_0x402b('0xa'));var client=jayson[_0x402b('0xb')][_0x402b('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x3d9511,_0x3d6ebe,_0x15be6f){return new BPromise(function(_0x5140a8,_0x21382f){return client['request'](_0x3d9511,_0x15be6f)[_0x402b('0xd')](function(_0x214f23){logger[_0x402b('0xe')](_0x402b('0xf'),_0x3d6ebe,_0x402b('0x10'));logger['debug'](_0x402b('0x11'),_0x3d6ebe,_0x402b('0x10'),JSON[_0x402b('0x12')](_0x214f23));if(_0x214f23[_0x402b('0x13')]){if(_0x214f23['error'][_0x402b('0x14')]===0x1f4){logger[_0x402b('0x13')](_0x402b('0xf'),_0x3d6ebe,_0x214f23[_0x402b('0x13')][_0x402b('0x15')]);return _0x21382f(_0x214f23[_0x402b('0x13')][_0x402b('0x15')]);}logger[_0x402b('0x13')](_0x402b('0xf'),_0x3d6ebe,_0x214f23['error'][_0x402b('0x15')]);return _0x5140a8(_0x214f23[_0x402b('0x13')][_0x402b('0x15')]);}else{logger['info'](_0x402b('0xf'),_0x3d6ebe,_0x402b('0x10'));_0x5140a8(_0x214f23[_0x402b('0x16')][_0x402b('0x15')]);}})['catch'](function(_0x146025){logger['error'](_0x402b('0xf'),_0x3d6ebe,_0x146025);_0x21382f(_0x146025);});});}
\ No newline at end of file
index 34f01d7..e56334c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4956=['./analyticExtractedReport.controller','index','get','/:id','isAuthenticated','download','post','create','put','update','delete','destroy','exports','multer','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x47f2c7,_0x3c7195){var _0x3b0cae=function(_0x6ed4d7){while(--_0x6ed4d7){_0x47f2c7['push'](_0x47f2c7['shift']());}};_0x3b0cae(++_0x3c7195);}(_0x4956,0x71));var _0x6495=function(_0x460ef7,_0xff6f18){_0x460ef7=_0x460ef7-0x0;var _0x216b3a=_0x4956[_0x460ef7];return _0x216b3a;};'use strict';var multer=require(_0x6495('0x0'));var util=require('util');var path=require(_0x6495('0x1'));var timeout=require(_0x6495('0x2'));var express=require(_0x6495('0x3'));var router=express['Router']();var auth=require(_0x6495('0x4'));var interaction=require(_0x6495('0x5'));var config=require(_0x6495('0x6'));var controller=require(_0x6495('0x7'));router['get']('/',auth['isAuthenticated'](),controller[_0x6495('0x8')]);router[_0x6495('0x9')](_0x6495('0xa'),auth['isAuthenticated'](),controller['show']);router[_0x6495('0x9')]('/:id/download',auth[_0x6495('0xb')](),controller[_0x6495('0xc')]);router[_0x6495('0xd')]('/',auth[_0x6495('0xb')](),controller[_0x6495('0xe')]);router[_0x6495('0xf')](_0x6495('0xa'),auth[_0x6495('0xb')](),controller[_0x6495('0x10')]);router[_0x6495('0x11')](_0x6495('0xa'),auth['isAuthenticated'](),controller[_0x6495('0x12')]);module[_0x6495('0x13')]=router;
\ No newline at end of file
+var _0xcdc7=['../../components/auth/service','../../components/interaction/service','./analyticExtractedReport.controller','get','isAuthenticated','index','show','/:id/download','download','post','create','put','/:id','update','delete','destroy','exports','util','path','connect-timeout','Router'];(function(_0x246f0c,_0x39f734){var _0x30fe50=function(_0x9a975c){while(--_0x9a975c){_0x246f0c['push'](_0x246f0c['shift']());}};_0x30fe50(++_0x39f734);}(_0xcdc7,0x65));var _0x7cdc=function(_0x38fff9,_0x53e042){_0x38fff9=_0x38fff9-0x0;var _0x3064c0=_0xcdc7[_0x38fff9];return _0x3064c0;};'use strict';var multer=require('multer');var util=require(_0x7cdc('0x0'));var path=require(_0x7cdc('0x1'));var timeout=require(_0x7cdc('0x2'));var express=require('express');var router=express[_0x7cdc('0x3')]();var auth=require(_0x7cdc('0x4'));var interaction=require(_0x7cdc('0x5'));var config=require('../../config/environment');var controller=require(_0x7cdc('0x6'));router[_0x7cdc('0x7')]('/',auth[_0x7cdc('0x8')](),controller[_0x7cdc('0x9')]);router['get']('/:id',auth[_0x7cdc('0x8')](),controller[_0x7cdc('0xa')]);router[_0x7cdc('0x7')](_0x7cdc('0xb'),auth['isAuthenticated'](),controller[_0x7cdc('0xc')]);router[_0x7cdc('0xd')]('/',auth[_0x7cdc('0x8')](),controller[_0x7cdc('0xe')]);router[_0x7cdc('0xf')](_0x7cdc('0x10'),auth[_0x7cdc('0x8')](),controller[_0x7cdc('0x11')]);router[_0x7cdc('0x12')]('/:id',auth[_0x7cdc('0x8')](),controller[_0x7cdc('0x13')]);module[_0x7cdc('0x14')]=router;
\ No newline at end of file
index 89fcc84..9065fa5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcee2=['exports','TEXT','STRING','BOOLEAN','sequelize'];(function(_0x1f6835,_0xff3520){var _0x10aee2=function(_0x5600f0){while(--_0x5600f0){_0x1f6835['push'](_0x1f6835['shift']());}};_0x10aee2(++_0xff3520);}(_0xcee2,0x18f));var _0x2cee=function(_0x4d47b1,_0x381c7b){_0x4d47b1=_0x4d47b1-0x0;var _0x4f3633=_0xcee2[_0x4d47b1];return _0x4f3633;};'use strict';var Sequelize=require(_0x2cee('0x0'));module[_0x2cee('0x1')]={'field':{'type':Sequelize[_0x2cee('0x2')]},'alias':{'type':Sequelize['STRING']},'function':{'type':Sequelize['STRING']},'format':{'type':Sequelize[_0x2cee('0x3')]},'groupBy':{'type':Sequelize[_0x2cee('0x4')],'defaultValue':![]},'orderBy':{'type':Sequelize[_0x2cee('0x3')]},'custom':{'type':Sequelize[_0x2cee('0x4')],'defaultValue':![]}};
\ No newline at end of file
+var _0x99e6=['STRING','BOOLEAN','sequelize','exports'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0x99e6,0x152));var _0x699e=function(_0x109371,_0x441c8e){_0x109371=_0x109371-0x0;var _0x4fd858=_0x99e6[_0x109371];return _0x4fd858;};'use strict';var Sequelize=require(_0x699e('0x0'));module[_0x699e('0x1')]={'field':{'type':Sequelize['TEXT']},'alias':{'type':Sequelize['STRING']},'function':{'type':Sequelize[_0x699e('0x2')]},'format':{'type':Sequelize[_0x699e('0x2')]},'groupBy':{'type':Sequelize[_0x699e('0x3')],'defaultValue':![]},'orderBy':{'type':Sequelize[_0x699e('0x2')]},'custom':{'type':Sequelize[_0x699e('0x3')],'defaultValue':![]}};
\ No newline at end of file
index c5fc6c1..37b5e40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2819=['map','type','key','field','findAll','rows','then','catch','show','params','includeAll','options','find','create','body','bulkCreate','bulkDestroy','ids','addFields','AnalyticCustomReport','sequelize','transaction','CustomReportId','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','update','destroy','stack','name','send','AnalyticFieldReport','rawAttributes','model','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge'];(function(_0x5228da,_0x16dd7c){var _0x408556=function(_0x8c5ca3){while(--_0x8c5ca3){_0x5228da['push'](_0x5228da['shift']());}};_0x408556(++_0x16dd7c);}(_0x2819,0x153));var _0x9281=function(_0x3d0a26,_0x2de874){_0x3d0a26=_0x3d0a26-0x0;var _0x2081ce=_0x2819[_0x3d0a26];return _0x2081ce;};'use strict';var pdf=require(_0x9281('0x0'));var emlformat=require(_0x9281('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x9281('0x2'));var rp=require(_0x9281('0x3'));var moment=require(_0x9281('0x4'));var BPromise=require(_0x9281('0x5'));var Mustache=require(_0x9281('0x6'));var util=require('util');var path=require(_0x9281('0x7'));var sox=require('sox');var csv=require(_0x9281('0x8'));var ejs=require(_0x9281('0x9'));var fs=require('fs');var _=require(_0x9281('0xa'));var squel=require(_0x9281('0xb'));var crypto=require(_0x9281('0xc'));var jsforce=require(_0x9281('0xd'));var deskjs=require(_0x9281('0xe'));var toCsv=require(_0x9281('0x8'));var querystring=require(_0x9281('0xf'));var Papa=require(_0x9281('0x10'));var authService=require(_0x9281('0x11'));var hardwareService=require(_0x9281('0x12'));var Redis=require(_0x9281('0x13'));var qs=require(_0x9281('0x14'));var logger=require(_0x9281('0x15'))('api');var utils=require(_0x9281('0x16'));var config=require(_0x9281('0x17'));var db=require(_0x9281('0x18'))['db'];function respondWithStatusCode(_0x10f23e,_0x115037){_0x115037=_0x115037||0xcc;return function(_0x177feb){if(_0x177feb){return _0x10f23e[_0x9281('0x19')](_0x115037);}return _0x10f23e[_0x9281('0x1a')](_0x115037)[_0x9281('0x1b')]();};}function respondWithResult(_0x34212e,_0x321b24){_0x321b24=_0x321b24||0xc8;return function(_0x45e0c4){if(_0x45e0c4){return _0x34212e[_0x9281('0x1a')](_0x321b24)[_0x9281('0x1c')](_0x45e0c4);}};}function respondWithFilteredResult(_0x193d58,_0x2592b3){return function(_0x2ecf88){if(_0x2ecf88){var _0x2f8634=_0x2ecf88[_0x9281('0x1d')],_0x18405f=_0x2592b3[_0x9281('0x1e')],_0x3cb1db=_0x2592b3[_0x9281('0x1e')]+_0x2592b3[_0x9281('0x1f')],_0x36b6cb;if(_0x3cb1db>=_0x2f8634){_0x3cb1db=_0x2f8634;_0x36b6cb=0xc8;}else{_0x36b6cb=0xce;}_0x193d58[_0x9281('0x1a')](_0x36b6cb);return _0x193d58[_0x9281('0x20')]('Content-Range',_0x18405f+'-'+_0x3cb1db+'/'+_0x2f8634)[_0x9281('0x1c')](_0x2ecf88);}return null;};}function patchUpdates(_0x35d052){return function(_0x4e00bf){try{jsonpatch[_0x9281('0x21')](_0x4e00bf,_0x35d052,!![]);}catch(_0x410834){return BPromise['reject'](_0x410834);}return _0x4e00bf['save']();};}function saveUpdates(_0x1fa4a5,_0x569d65){return function(_0x4a0ba2){if(_0x4a0ba2){return _0x4a0ba2[_0x9281('0x22')](_0x1fa4a5)['then'](function(_0xb4942f){return _0xb4942f;});}return null;};}function removeEntity(_0x3c7559,_0x54eb3c){return function(_0x13bd8c){if(_0x13bd8c){return _0x13bd8c[_0x9281('0x23')]()['then'](function(){_0x3c7559[_0x9281('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x19d956,_0x410a72){return function(_0x2fa185){if(!_0x2fa185){_0x19d956[_0x9281('0x19')](0x194);}return _0x2fa185;};}function handleError(_0x249c36,_0x42f403){_0x42f403=_0x42f403||0x1f4;return function(_0x2761f1){logger['error'](_0x2761f1[_0x9281('0x24')]);if(_0x2761f1[_0x9281('0x25')]){delete _0x2761f1['name'];}_0x249c36[_0x9281('0x1a')](_0x42f403)[_0x9281('0x26')](_0x2761f1);};}exports['index']=function(_0x4a062a,_0x23e432){var _0x32e909={},_0xb358fd={},_0x4171c9={'count':0x0,'rows':[]};var _0x3e1ab9=db[_0x9281('0x27')][_0x9281('0x28')];_0xb358fd[_0x9281('0x29')]=_['keys'](_0x3e1ab9);_0xb358fd[_0x9281('0x2a')]=_[_0x9281('0x2b')](_0x4a062a[_0x9281('0x2a')]);_0xb358fd[_0x9281('0x2c')]=_['intersection'](_0xb358fd[_0x9281('0x29')],_0xb358fd[_0x9281('0x2a')]);_0x32e909[_0x9281('0x2d')]=_[_0x9281('0x2e')](_0xb358fd['model'],qs[_0x9281('0x2f')](_0x4a062a['query'][_0x9281('0x2f')]));_0x32e909[_0x9281('0x2d')]=_0x32e909[_0x9281('0x2d')][_0x9281('0x30')]?_0x32e909[_0x9281('0x2d')]:_0xb358fd[_0x9281('0x29')];if(!_0x4a062a[_0x9281('0x2a')][_0x9281('0x31')](_0x9281('0x32'))){_0x32e909[_0x9281('0x1f')]=qs[_0x9281('0x1f')](_0x4a062a[_0x9281('0x2a')]['limit']);_0x32e909[_0x9281('0x1e')]=qs[_0x9281('0x1e')](_0x4a062a['query'][_0x9281('0x1e')]);}_0x32e909[_0x9281('0x33')]=qs['sort'](_0x4a062a[_0x9281('0x2a')][_0x9281('0x34')]);_0x32e909[_0x9281('0x35')]=qs['filters'](_['pick'](_0x4a062a[_0x9281('0x2a')],_0xb358fd['filters']));if(_0x4a062a['query'][_0x9281('0x36')]){_0x32e909[_0x9281('0x35')]=_[_0x9281('0x37')](_0x32e909[_0x9281('0x35')],{'$or':_[_0x9281('0x38')](_0x3e1ab9,function(_0x131b52){if(_0x131b52[_0x9281('0x39')][_0x9281('0x3a')]!=='VIRTUAL'){var _0x506393={};_0x506393[_0x131b52[_0x9281('0x3b')]]={'$like':'%'+_0x4a062a[_0x9281('0x2a')][_0x9281('0x36')]+'%'};return _0x506393;}})});}_0x32e909=_['merge']({},_0x32e909,_0x4a062a['options']);var _0x362ec1={'where':_0x32e909['where']};return db[_0x9281('0x27')][_0x9281('0x1d')](_0x362ec1)['then'](function(_0x1aca34){_0x4171c9[_0x9281('0x1d')]=_0x1aca34;if(_0x4a062a['query']['includeAll']){_0x32e909['include']=[{'all':!![]}];}return db[_0x9281('0x27')][_0x9281('0x3c')](_0x32e909);})['then'](function(_0x253f86){_0x4171c9[_0x9281('0x3d')]=_0x253f86;return _0x4171c9;})[_0x9281('0x3e')](respondWithFilteredResult(_0x23e432,_0x32e909))[_0x9281('0x3f')](handleError(_0x23e432,null));};exports[_0x9281('0x40')]=function(_0x4434ac,_0x56762a){var _0x53d3d9={'raw':![],'where':{'id':_0x4434ac[_0x9281('0x41')]['id']}},_0x52b937={};_0x52b937['model']=_['keys'](db[_0x9281('0x27')][_0x9281('0x28')]);_0x52b937[_0x9281('0x2a')]=_[_0x9281('0x2b')](_0x4434ac['query']);_0x52b937[_0x9281('0x2c')]=_[_0x9281('0x2e')](_0x52b937['model'],_0x52b937[_0x9281('0x2a')]);_0x53d3d9[_0x9281('0x2d')]=_[_0x9281('0x2e')](_0x52b937[_0x9281('0x29')],qs[_0x9281('0x2f')](_0x4434ac[_0x9281('0x2a')][_0x9281('0x2f')]));_0x53d3d9[_0x9281('0x2d')]=_0x53d3d9['attributes'][_0x9281('0x30')]?_0x53d3d9[_0x9281('0x2d')]:_0x52b937[_0x9281('0x29')];if(_0x4434ac[_0x9281('0x2a')][_0x9281('0x42')]){_0x53d3d9['include']=[{'all':!![]}];}_0x53d3d9=_[_0x9281('0x37')]({},_0x53d3d9,_0x4434ac[_0x9281('0x43')]);return db[_0x9281('0x27')][_0x9281('0x44')](_0x53d3d9)[_0x9281('0x3e')](handleEntityNotFound(_0x56762a,null))[_0x9281('0x3e')](respondWithResult(_0x56762a,null))[_0x9281('0x3f')](handleError(_0x56762a,null));};exports['create']=function(_0x190db5,_0x4493c8){return db[_0x9281('0x27')][_0x9281('0x45')](_0x190db5[_0x9281('0x46')],{})[_0x9281('0x3e')](respondWithResult(_0x4493c8,0xc9))[_0x9281('0x3f')](handleError(_0x4493c8,null));};exports['bulkCreate']=function(_0x3570e5,_0x3d1c8b){return db[_0x9281('0x27')][_0x9281('0x47')](_0x3570e5[_0x9281('0x46')],{'raw':![],'individualHooks':!![]})[_0x9281('0x3e')](respondWithResult(_0x3d1c8b,0xc9))[_0x9281('0x3f')](handleError(_0x3d1c8b,null));};exports[_0x9281('0x22')]=function(_0x1c7fda,_0xa36d10){if(_0x1c7fda[_0x9281('0x46')]['id']){delete _0x1c7fda[_0x9281('0x46')]['id'];}return db[_0x9281('0x27')]['find']({'where':{'id':_0x1c7fda[_0x9281('0x41')]['id']}})[_0x9281('0x3e')](handleEntityNotFound(_0xa36d10,null))[_0x9281('0x3e')](saveUpdates(_0x1c7fda[_0x9281('0x46')],null))[_0x9281('0x3e')](respondWithResult(_0xa36d10,null))[_0x9281('0x3f')](handleError(_0xa36d10,null));};exports['destroy']=function(_0x263618,_0x467dc6){return db['AnalyticFieldReport'][_0x9281('0x44')]({'where':{'id':_0x263618[_0x9281('0x41')]['id']}})[_0x9281('0x3e')](handleEntityNotFound(_0x467dc6,null))[_0x9281('0x3e')](removeEntity(_0x467dc6,null))['catch'](handleError(_0x467dc6,null));};exports[_0x9281('0x48')]=function(_0x4daf56,_0x13b5b5){return db[_0x9281('0x27')][_0x9281('0x23')]({'where':{'id':_0x4daf56['query'][_0x9281('0x49')]||[]},'raw':![],'individualHooks':!![]})[_0x9281('0x3e')](respondWithResult(_0x13b5b5,0xcc))[_0x9281('0x3f')](handleError(_0x13b5b5,null));};exports[_0x9281('0x4a')]=function(_0x449c26,_0xd03f3f,_0x596204){return db[_0x9281('0x4b')]['findOne']({'where':{'id':_0x449c26[_0x9281('0x41')]['id']}})[_0x9281('0x3e')](handleEntityNotFound(_0xd03f3f,null))[_0x9281('0x3e')](function(_0x3b00f9){if(_0x3b00f9){return db[_0x9281('0x4c')][_0x9281('0x4d')](function(_0x2804ed){return db[_0x9281('0x27')][_0x9281('0x23')]({'where':{'CustomReportId':_0x449c26['params']['id']},'transaction':_0x2804ed})[_0x9281('0x3e')](function(_0x12a7b6){var _0x36924d=_[_0x9281('0x38')](_0x449c26['body'],function(_0x333635){delete _0x333635['id'];_0x333635[_0x9281('0x4e')]=_0x449c26[_0x9281('0x41')]['id'];return _0x333635;});return db['AnalyticFieldReport']['bulkCreate'](_0x36924d,{'transaction':_0x2804ed});});})[_0x9281('0x3e')](function(){return db[_0x9281('0x27')][_0x9281('0x3c')]({'where':{'CustomReportId':_0x449c26[_0x9281('0x41')]['id']}});});}})[_0x9281('0x3e')](respondWithResult(_0xd03f3f,null))[_0x9281('0x3f')](handleError(_0xd03f3f,null));};
\ No newline at end of file
+var _0xe874=['fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../mysqldb','sendStatus','status','count','offset','limit','set','Content-Range','json','apply','then','destroy','error','stack','send','index','AnalyticFieldReport','rawAttributes','model','keys','query','intersection','attributes','hasOwnProperty','nolimit','order','sort','filters','pick','filter','where','merge','map','type','VIRTUAL','field','options','findAll','rows','catch','show','fields','includeAll','include','find','body','bulkCreate','params','addFields','AnalyticCustomReport','findOne','sequelize','transaction','html-pdf','eml-format','zip-dir'];(function(_0x4b075e,_0x57874c){var _0x31385c=function(_0x3ab6ef){while(--_0x3ab6ef){_0x4b075e['push'](_0x4b075e['shift']());}};_0x31385c(++_0x57874c);}(_0xe874,0x131));var _0x4e87=function(_0x4dca38,_0x5dfae1){_0x4dca38=_0x4dca38-0x0;var _0x44656c=_0xe874[_0x4dca38];return _0x44656c;};'use strict';var pdf=require(_0x4e87('0x0'));var emlformat=require(_0x4e87('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x4e87('0x2'));var jsonpatch=require(_0x4e87('0x3'));var rp=require(_0x4e87('0x4'));var moment=require(_0x4e87('0x5'));var BPromise=require(_0x4e87('0x6'));var Mustache=require(_0x4e87('0x7'));var util=require(_0x4e87('0x8'));var path=require(_0x4e87('0x9'));var sox=require(_0x4e87('0xa'));var csv=require(_0x4e87('0xb'));var ejs=require(_0x4e87('0xc'));var fs=require('fs');var _=require(_0x4e87('0xd'));var squel=require(_0x4e87('0xe'));var crypto=require(_0x4e87('0xf'));var jsforce=require(_0x4e87('0x10'));var deskjs=require('desk.js');var toCsv=require(_0x4e87('0xb'));var querystring=require(_0x4e87('0x11'));var Papa=require(_0x4e87('0x12'));var authService=require(_0x4e87('0x13'));var hardwareService=require(_0x4e87('0x14'));var Redis=require(_0x4e87('0x15'));var qs=require(_0x4e87('0x16'));var logger=require(_0x4e87('0x17'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x4e87('0x18'))['db'];function respondWithStatusCode(_0x5a43d3,_0x253ca0){_0x253ca0=_0x253ca0||0xcc;return function(_0x1b22d4){if(_0x1b22d4){return _0x5a43d3[_0x4e87('0x19')](_0x253ca0);}return _0x5a43d3[_0x4e87('0x1a')](_0x253ca0)['end']();};}function respondWithResult(_0x104a10,_0x3348c3){_0x3348c3=_0x3348c3||0xc8;return function(_0x41b003){if(_0x41b003){return _0x104a10[_0x4e87('0x1a')](_0x3348c3)['json'](_0x41b003);}};}function respondWithFilteredResult(_0x18326d,_0x10e3c8){return function(_0x42dafd){if(_0x42dafd){var _0x286453=_0x42dafd[_0x4e87('0x1b')],_0x51fb28=_0x10e3c8[_0x4e87('0x1c')],_0x459976=_0x10e3c8[_0x4e87('0x1c')]+_0x10e3c8[_0x4e87('0x1d')],_0x2c4606;if(_0x459976>=_0x286453){_0x459976=_0x286453;_0x2c4606=0xc8;}else{_0x2c4606=0xce;}_0x18326d[_0x4e87('0x1a')](_0x2c4606);return _0x18326d[_0x4e87('0x1e')](_0x4e87('0x1f'),_0x51fb28+'-'+_0x459976+'/'+_0x286453)[_0x4e87('0x20')](_0x42dafd);}return null;};}function patchUpdates(_0x234fa2){return function(_0x5976ef){try{jsonpatch[_0x4e87('0x21')](_0x5976ef,_0x234fa2,!![]);}catch(_0x274933){return BPromise['reject'](_0x274933);}return _0x5976ef['save']();};}function saveUpdates(_0x5c8067,_0x13014c){return function(_0x3761d1){if(_0x3761d1){return _0x3761d1['update'](_0x5c8067)[_0x4e87('0x22')](function(_0x15f614){return _0x15f614;});}return null;};}function removeEntity(_0x2ea3f6,_0x10d9dc){return function(_0x1a50dd){if(_0x1a50dd){return _0x1a50dd[_0x4e87('0x23')]()[_0x4e87('0x22')](function(){_0x2ea3f6[_0x4e87('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x49527f,_0x2c8a3c){return function(_0x1be550){if(!_0x1be550){_0x49527f['sendStatus'](0x194);}return _0x1be550;};}function handleError(_0x2edc30,_0x95ffd1){_0x95ffd1=_0x95ffd1||0x1f4;return function(_0x4013b3){logger[_0x4e87('0x24')](_0x4013b3[_0x4e87('0x25')]);if(_0x4013b3['name']){delete _0x4013b3['name'];}_0x2edc30[_0x4e87('0x1a')](_0x95ffd1)[_0x4e87('0x26')](_0x4013b3);};}exports[_0x4e87('0x27')]=function(_0x4b0a9a,_0x4cda60){var _0x9ca017={},_0x115e77={},_0x53b678={'count':0x0,'rows':[]};var _0x2dcbe0=db[_0x4e87('0x28')][_0x4e87('0x29')];_0x115e77[_0x4e87('0x2a')]=_[_0x4e87('0x2b')](_0x2dcbe0);_0x115e77['query']=_[_0x4e87('0x2b')](_0x4b0a9a[_0x4e87('0x2c')]);_0x115e77['filters']=_[_0x4e87('0x2d')](_0x115e77[_0x4e87('0x2a')],_0x115e77[_0x4e87('0x2c')]);_0x9ca017[_0x4e87('0x2e')]=_['intersection'](_0x115e77[_0x4e87('0x2a')],qs['fields'](_0x4b0a9a[_0x4e87('0x2c')]['fields']));_0x9ca017[_0x4e87('0x2e')]=_0x9ca017[_0x4e87('0x2e')]['length']?_0x9ca017[_0x4e87('0x2e')]:_0x115e77[_0x4e87('0x2a')];if(!_0x4b0a9a[_0x4e87('0x2c')][_0x4e87('0x2f')](_0x4e87('0x30'))){_0x9ca017[_0x4e87('0x1d')]=qs[_0x4e87('0x1d')](_0x4b0a9a[_0x4e87('0x2c')][_0x4e87('0x1d')]);_0x9ca017[_0x4e87('0x1c')]=qs['offset'](_0x4b0a9a[_0x4e87('0x2c')]['offset']);}_0x9ca017[_0x4e87('0x31')]=qs[_0x4e87('0x32')](_0x4b0a9a['query'][_0x4e87('0x32')]);_0x9ca017['where']=qs[_0x4e87('0x33')](_[_0x4e87('0x34')](_0x4b0a9a[_0x4e87('0x2c')],_0x115e77[_0x4e87('0x33')]));if(_0x4b0a9a['query'][_0x4e87('0x35')]){_0x9ca017[_0x4e87('0x36')]=_[_0x4e87('0x37')](_0x9ca017[_0x4e87('0x36')],{'$or':_[_0x4e87('0x38')](_0x2dcbe0,function(_0x390261){if(_0x390261[_0x4e87('0x39')]['key']!==_0x4e87('0x3a')){var _0x48cf2b={};_0x48cf2b[_0x390261[_0x4e87('0x3b')]]={'$like':'%'+_0x4b0a9a[_0x4e87('0x2c')][_0x4e87('0x35')]+'%'};return _0x48cf2b;}})});}_0x9ca017=_[_0x4e87('0x37')]({},_0x9ca017,_0x4b0a9a[_0x4e87('0x3c')]);var _0x337e9d={'where':_0x9ca017[_0x4e87('0x36')]};return db[_0x4e87('0x28')][_0x4e87('0x1b')](_0x337e9d)['then'](function(_0x29a3e4){_0x53b678['count']=_0x29a3e4;if(_0x4b0a9a[_0x4e87('0x2c')]['includeAll']){_0x9ca017['include']=[{'all':!![]}];}return db[_0x4e87('0x28')][_0x4e87('0x3d')](_0x9ca017);})['then'](function(_0x1e097d){_0x53b678[_0x4e87('0x3e')]=_0x1e097d;return _0x53b678;})[_0x4e87('0x22')](respondWithFilteredResult(_0x4cda60,_0x9ca017))[_0x4e87('0x3f')](handleError(_0x4cda60,null));};exports[_0x4e87('0x40')]=function(_0x4d82c,_0x232a67){var _0x239220={'raw':![],'where':{'id':_0x4d82c['params']['id']}},_0x2a0801={};_0x2a0801[_0x4e87('0x2a')]=_['keys'](db[_0x4e87('0x28')][_0x4e87('0x29')]);_0x2a0801[_0x4e87('0x2c')]=_[_0x4e87('0x2b')](_0x4d82c[_0x4e87('0x2c')]);_0x2a0801[_0x4e87('0x33')]=_[_0x4e87('0x2d')](_0x2a0801['model'],_0x2a0801['query']);_0x239220[_0x4e87('0x2e')]=_[_0x4e87('0x2d')](_0x2a0801['model'],qs['fields'](_0x4d82c[_0x4e87('0x2c')][_0x4e87('0x41')]));_0x239220[_0x4e87('0x2e')]=_0x239220[_0x4e87('0x2e')]['length']?_0x239220[_0x4e87('0x2e')]:_0x2a0801['model'];if(_0x4d82c[_0x4e87('0x2c')][_0x4e87('0x42')]){_0x239220[_0x4e87('0x43')]=[{'all':!![]}];}_0x239220=_[_0x4e87('0x37')]({},_0x239220,_0x4d82c[_0x4e87('0x3c')]);return db[_0x4e87('0x28')][_0x4e87('0x44')](_0x239220)[_0x4e87('0x22')](handleEntityNotFound(_0x232a67,null))[_0x4e87('0x22')](respondWithResult(_0x232a67,null))[_0x4e87('0x3f')](handleError(_0x232a67,null));};exports['create']=function(_0x5ad779,_0x19d5fb){return db[_0x4e87('0x28')]['create'](_0x5ad779[_0x4e87('0x45')],{})[_0x4e87('0x22')](respondWithResult(_0x19d5fb,0xc9))[_0x4e87('0x3f')](handleError(_0x19d5fb,null));};exports['bulkCreate']=function(_0x42fd92,_0x5ee85e){return db[_0x4e87('0x28')][_0x4e87('0x46')](_0x42fd92[_0x4e87('0x45')],{'raw':![],'individualHooks':!![]})['then'](respondWithResult(_0x5ee85e,0xc9))['catch'](handleError(_0x5ee85e,null));};exports['update']=function(_0x1ef080,_0x1a151c){if(_0x1ef080['body']['id']){delete _0x1ef080[_0x4e87('0x45')]['id'];}return db[_0x4e87('0x28')][_0x4e87('0x44')]({'where':{'id':_0x1ef080[_0x4e87('0x47')]['id']}})[_0x4e87('0x22')](handleEntityNotFound(_0x1a151c,null))[_0x4e87('0x22')](saveUpdates(_0x1ef080[_0x4e87('0x45')],null))[_0x4e87('0x22')](respondWithResult(_0x1a151c,null))[_0x4e87('0x3f')](handleError(_0x1a151c,null));};exports[_0x4e87('0x23')]=function(_0x512b41,_0x552363){return db['AnalyticFieldReport'][_0x4e87('0x44')]({'where':{'id':_0x512b41[_0x4e87('0x47')]['id']}})[_0x4e87('0x22')](handleEntityNotFound(_0x552363,null))[_0x4e87('0x22')](removeEntity(_0x552363,null))[_0x4e87('0x3f')](handleError(_0x552363,null));};exports['bulkDestroy']=function(_0x366fe5,_0x5d1d8d){return db[_0x4e87('0x28')][_0x4e87('0x23')]({'where':{'id':_0x366fe5['query']['ids']||[]},'raw':![],'individualHooks':!![]})['then'](respondWithResult(_0x5d1d8d,0xcc))[_0x4e87('0x3f')](handleError(_0x5d1d8d,null));};exports[_0x4e87('0x48')]=function(_0x239ce5,_0x35c78c,_0x523127){return db[_0x4e87('0x49')][_0x4e87('0x4a')]({'where':{'id':_0x239ce5[_0x4e87('0x47')]['id']}})['then'](handleEntityNotFound(_0x35c78c,null))[_0x4e87('0x22')](function(_0x352d27){if(_0x352d27){return db[_0x4e87('0x4b')][_0x4e87('0x4c')](function(_0x3a69ac){return db[_0x4e87('0x28')][_0x4e87('0x23')]({'where':{'CustomReportId':_0x239ce5[_0x4e87('0x47')]['id']},'transaction':_0x3a69ac})['then'](function(_0x4ceb97){var _0xf82393=_['map'](_0x239ce5[_0x4e87('0x45')],function(_0x37ab4c){delete _0x37ab4c['id'];_0x37ab4c['CustomReportId']=_0x239ce5['params']['id'];return _0x37ab4c;});return db[_0x4e87('0x28')][_0x4e87('0x46')](_0xf82393,{'transaction':_0x3a69ac});});})[_0x4e87('0x22')](function(){return db[_0x4e87('0x28')][_0x4e87('0x3d')]({'where':{'CustomReportId':_0x239ce5[_0x4e87('0x47')]['id']}});});}})[_0x4e87('0x22')](respondWithResult(_0x35c78c,null))[_0x4e87('0x3f')](handleError(_0x35c78c,null));};
\ No newline at end of file
index 4834689..5085903 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x012a=['moment','bluebird','request-promise','./analyticFieldReport.attributes','exports','define','AnalyticFieldReport','analytics_report_fields','util','../../config/logger'];(function(_0x16f8f9,_0x16282d){var _0x9519d0=function(_0x2103a4){while(--_0x2103a4){_0x16f8f9['push'](_0x16f8f9['shift']());}};_0x9519d0(++_0x16282d);}(_0x012a,0x184));var _0xa012=function(_0x4ec920,_0x4b9ef0){_0x4ec920=_0x4ec920-0x0;var _0x518cf3=_0x012a[_0x4ec920];return _0x518cf3;};'use strict';var _=require('lodash');var util=require(_0xa012('0x0'));var logger=require(_0xa012('0x1'))('api');var moment=require(_0xa012('0x2'));var BPromise=require(_0xa012('0x3'));var rp=require(_0xa012('0x4'));var attributes=require(_0xa012('0x5'));module[_0xa012('0x6')]=function(_0x391475,_0xc6f8a1){return _0x391475[_0xa012('0x7')](_0xa012('0x8'),attributes,{'tableName':_0xa012('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xee3d=['util','../../config/logger','api','moment','bluebird','request-promise','./analyticFieldReport.attributes','exports','define','AnalyticFieldReport','analytics_report_fields','lodash'];(function(_0x4e0b8c,_0x443f31){var _0x633ecc=function(_0x1f1f36){while(--_0x1f1f36){_0x4e0b8c['push'](_0x4e0b8c['shift']());}};_0x633ecc(++_0x443f31);}(_0xee3d,0x167));var _0xdee3=function(_0x4f0a65,_0x12d9da){_0x4f0a65=_0x4f0a65-0x0;var _0x4ce646=_0xee3d[_0x4f0a65];return _0x4ce646;};'use strict';var _=require(_0xdee3('0x0'));var util=require(_0xdee3('0x1'));var logger=require(_0xdee3('0x2'))(_0xdee3('0x3'));var moment=require(_0xdee3('0x4'));var BPromise=require(_0xdee3('0x5'));var rp=require(_0xdee3('0x6'));var attributes=require(_0xdee3('0x7'));module[_0xdee3('0x8')]=function(_0x11bb7c,_0x49378f){return _0x11bb7c[_0xdee3('0x9')](_0xdee3('0xa'),attributes,{'tableName':_0xdee3('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 287f69e..8baf4b3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a8f=['../../mysqldb','jayson/promise','client','http','request','AnalyticFieldReport,\x20%s,\x20%s','debug','AnalyticFieldReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','result','catch','lodash','moment','bluebird','randomstring','ioredis'];(function(_0x15219f,_0x186010){var _0x49270d=function(_0xe50488){while(--_0xe50488){_0x15219f['push'](_0x15219f['shift']());}};_0x49270d(++_0x186010);}(_0x1a8f,0x87));var _0xf1a8=function(_0x3926ba,_0x237901){_0x3926ba=_0x3926ba-0x0;var _0x18756e=_0x1a8f[_0x3926ba];return _0x18756e;};'use strict';var _=require(_0xf1a8('0x0'));var util=require('util');var moment=require(_0xf1a8('0x1'));var BPromise=require(_0xf1a8('0x2'));var rs=require(_0xf1a8('0x3'));var fs=require('fs');var Redis=require(_0xf1a8('0x4'));var db=require(_0xf1a8('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0xf1a8('0x6'));var client=jayson[_0xf1a8('0x7')][_0xf1a8('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x540101,_0x3f2b04,_0x4bf52d){return new BPromise(function(_0xea1eb2,_0xa74b7f){return client[_0xf1a8('0x9')](_0x540101,_0x4bf52d)['then'](function(_0x3e0a25){logger['info'](_0xf1a8('0xa'),_0x3f2b04,'request\x20sent');logger[_0xf1a8('0xb')](_0xf1a8('0xc'),_0x3f2b04,_0xf1a8('0xd'),JSON[_0xf1a8('0xe')](_0x3e0a25));if(_0x3e0a25['error']){if(_0x3e0a25[_0xf1a8('0xf')]['code']===0x1f4){logger[_0xf1a8('0xf')]('AnalyticFieldReport,\x20%s,\x20%s',_0x3f2b04,_0x3e0a25[_0xf1a8('0xf')][_0xf1a8('0x10')]);return _0xa74b7f(_0x3e0a25[_0xf1a8('0xf')][_0xf1a8('0x10')]);}logger[_0xf1a8('0xf')](_0xf1a8('0xa'),_0x3f2b04,_0x3e0a25[_0xf1a8('0xf')][_0xf1a8('0x10')]);return _0xea1eb2(_0x3e0a25[_0xf1a8('0xf')]['message']);}else{logger[_0xf1a8('0x11')](_0xf1a8('0xa'),_0x3f2b04,_0xf1a8('0xd'));_0xea1eb2(_0x3e0a25[_0xf1a8('0x12')][_0xf1a8('0x10')]);}})[_0xf1a8('0x13')](function(_0x671ef3){logger[_0xf1a8('0xf')](_0xf1a8('0xa'),_0x3f2b04,_0x671ef3);_0xa74b7f(_0x671ef3);});});}
\ No newline at end of file
+var _0x29eb=['client','http','request','info','AnalyticFieldReport,\x20%s,\x20%s','debug','AnalyticFieldReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise'];(function(_0x39f719,_0xee6259){var _0x1d6e34=function(_0x617d7e){while(--_0x617d7e){_0x39f719['push'](_0x39f719['shift']());}};_0x1d6e34(++_0xee6259);}(_0x29eb,0x1c5));var _0xb29e=function(_0x513483,_0x105ccd){_0x513483=_0x513483-0x0;var _0x384a1e=_0x29eb[_0x513483];return _0x384a1e;};'use strict';var _=require(_0xb29e('0x0'));var util=require(_0xb29e('0x1'));var moment=require(_0xb29e('0x2'));var BPromise=require('bluebird');var rs=require(_0xb29e('0x3'));var fs=require('fs');var Redis=require(_0xb29e('0x4'));var db=require(_0xb29e('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xb29e('0x6'))('rpc');var config=require(_0xb29e('0x7'));var jayson=require(_0xb29e('0x8'));var client=jayson[_0xb29e('0x9')][_0xb29e('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4dde31,_0x3032c3,_0x5bf1ae){return new BPromise(function(_0x1995ab,_0x29758f){return client[_0xb29e('0xb')](_0x4dde31,_0x5bf1ae)['then'](function(_0x551851){logger[_0xb29e('0xc')](_0xb29e('0xd'),_0x3032c3,'request\x20sent');logger[_0xb29e('0xe')](_0xb29e('0xf'),_0x3032c3,'request\x20sent',JSON[_0xb29e('0x10')](_0x551851));if(_0x551851[_0xb29e('0x11')]){if(_0x551851[_0xb29e('0x11')][_0xb29e('0x12')]===0x1f4){logger[_0xb29e('0x11')]('AnalyticFieldReport,\x20%s,\x20%s',_0x3032c3,_0x551851[_0xb29e('0x11')]['message']);return _0x29758f(_0x551851['error']['message']);}logger[_0xb29e('0x11')](_0xb29e('0xd'),_0x3032c3,_0x551851[_0xb29e('0x11')][_0xb29e('0x13')]);return _0x1995ab(_0x551851[_0xb29e('0x11')][_0xb29e('0x13')]);}else{logger['info'](_0xb29e('0xd'),_0x3032c3,_0xb29e('0x14'));_0x1995ab(_0x551851[_0xb29e('0x15')][_0xb29e('0x13')]);}})['catch'](function(_0x523341){logger[_0xb29e('0x11')](_0xb29e('0xd'),_0x3032c3,_0x523341);_0x29758f(_0x523341);});});}
\ No newline at end of file
index 9c4556d..a7ceeeb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d2d=['multer','util','path','connect-timeout','express','../../components/auth/service','./analyticFieldReport.controller','get','isAuthenticated','index','/:id','show','post','create','/create_many','bulkCreate','/:id/create_many','addFields','put','update','delete','/destroy_many','bulkDestroy','destroy'];(function(_0x309ae,_0x33a143){var _0x3a6c8b=function(_0x530ceb){while(--_0x530ceb){_0x309ae['push'](_0x309ae['shift']());}};_0x3a6c8b(++_0x33a143);}(_0x1d2d,0xf0));var _0xd1d2=function(_0x2993f0,_0x60cbd6){_0x2993f0=_0x2993f0-0x0;var _0x3890f8=_0x1d2d[_0x2993f0];return _0x3890f8;};'use strict';var multer=require(_0xd1d2('0x0'));var util=require(_0xd1d2('0x1'));var path=require(_0xd1d2('0x2'));var timeout=require(_0xd1d2('0x3'));var express=require(_0xd1d2('0x4'));var router=express['Router']();var auth=require(_0xd1d2('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xd1d2('0x6'));router[_0xd1d2('0x7')]('/',auth[_0xd1d2('0x8')](),controller[_0xd1d2('0x9')]);router[_0xd1d2('0x7')](_0xd1d2('0xa'),auth['isAuthenticated'](),controller[_0xd1d2('0xb')]);router[_0xd1d2('0xc')]('/',auth[_0xd1d2('0x8')](),controller[_0xd1d2('0xd')]);router[_0xd1d2('0xc')](_0xd1d2('0xe'),auth[_0xd1d2('0x8')](),controller[_0xd1d2('0xf')]);router[_0xd1d2('0xc')](_0xd1d2('0x10'),auth[_0xd1d2('0x8')](),controller[_0xd1d2('0x11')]);router[_0xd1d2('0x12')]('/:id',auth[_0xd1d2('0x8')](),controller[_0xd1d2('0x13')]);router[_0xd1d2('0x14')](_0xd1d2('0x15'),auth[_0xd1d2('0x8')](),controller[_0xd1d2('0x16')]);router[_0xd1d2('0x14')](_0xd1d2('0xa'),auth[_0xd1d2('0x8')](),controller[_0xd1d2('0x17')]);module['exports']=router;
\ No newline at end of file
+var _0x2750=['/destroy_many','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticFieldReport.controller','get','isAuthenticated','/:id','show','create','post','bulkCreate','/:id/create_many','addFields','put','update','delete'];(function(_0x23a771,_0x24bab5){var _0x515671=function(_0xe72831){while(--_0xe72831){_0x23a771['push'](_0x23a771['shift']());}};_0x515671(++_0x24bab5);}(_0x2750,0x13b));var _0x0275=function(_0x4a2d97,_0x472f9e){_0x4a2d97=_0x4a2d97-0x0;var _0x53f071=_0x2750[_0x4a2d97];return _0x53f071;};'use strict';var multer=require(_0x0275('0x0'));var util=require('util');var path=require(_0x0275('0x1'));var timeout=require(_0x0275('0x2'));var express=require(_0x0275('0x3'));var router=express[_0x0275('0x4')]();var auth=require(_0x0275('0x5'));var interaction=require(_0x0275('0x6'));var config=require(_0x0275('0x7'));var controller=require(_0x0275('0x8'));router[_0x0275('0x9')]('/',auth[_0x0275('0xa')](),controller['index']);router[_0x0275('0x9')](_0x0275('0xb'),auth[_0x0275('0xa')](),controller[_0x0275('0xc')]);router['post']('/',auth[_0x0275('0xa')](),controller[_0x0275('0xd')]);router[_0x0275('0xe')]('/create_many',auth['isAuthenticated'](),controller[_0x0275('0xf')]);router['post'](_0x0275('0x10'),auth[_0x0275('0xa')](),controller[_0x0275('0x11')]);router[_0x0275('0x12')](_0x0275('0xb'),auth['isAuthenticated'](),controller[_0x0275('0x13')]);router[_0x0275('0x14')](_0x0275('0x15'),auth['isAuthenticated'](),controller['bulkDestroy']);router[_0x0275('0x14')](_0x0275('0xb'),auth[_0x0275('0xa')](),controller[_0x0275('0x16')]);module[_0x0275('0x17')]=router;
\ No newline at end of file
index e98a656..741b23e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x184d=['exports','STRING'];(function(_0x2c2dd8,_0xeaf1f7){var _0x11ac1d=function(_0x2fabfe){while(--_0x2fabfe){_0x2c2dd8['push'](_0x2c2dd8['shift']());}};_0x11ac1d(++_0xeaf1f7);}(_0x184d,0x1d0));var _0xd184=function(_0x7e2eb0,_0x17cd58){_0x7e2eb0=_0x7e2eb0-0x0;var _0xd92de4=_0x184d[_0x7e2eb0];return _0xd92de4;};'use strict';var Sequelize=require('sequelize');module[_0xd184('0x0')]={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':'name'},'table':{'type':Sequelize['STRING']},'metric':{'type':Sequelize['TEXT']},'description':{'type':Sequelize[_0xd184('0x1')]}};
\ No newline at end of file
+var _0xf986=['sequelize','exports','STRING','name','TEXT'];(function(_0x4c2782,_0x392020){var _0x59f31c=function(_0x52fb4c){while(--_0x52fb4c){_0x4c2782['push'](_0x4c2782['shift']());}};_0x59f31c(++_0x392020);}(_0xf986,0xb9));var _0x6f98=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xf986[_0x14add3];return _0x4a174f;};'use strict';var Sequelize=require(_0x6f98('0x0'));module[_0x6f98('0x1')]={'name':{'type':Sequelize[_0x6f98('0x2')],'allowNull':![],'unique':_0x6f98('0x3')},'table':{'type':Sequelize[_0x6f98('0x2')]},'metric':{'type':Sequelize[_0x6f98('0x4')]},'description':{'type':Sequelize[_0x6f98('0x2')]}};
\ No newline at end of file
index d18908a..33d6fd1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a85=['UserProfileResource','then','sendStatus','error','name','send','AnalyticMetric','rawAttributes','model','keys','query','filters','intersection','attributes','fields','order','sort','where','filter','merge','map','type','key','field','options','includeAll','include','catch','show','params','length','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','util','path','sox','to-csv','ejs','lodash','crypto','desk.js','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','save','update','destroy','get','Metrics'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x1a85,0x1a4));var _0x51a8=function(_0x481bdf,_0x231538){_0x481bdf=_0x481bdf-0x0;var _0x281a12=_0x1a85[_0x481bdf];return _0x281a12;};'use strict';var pdf=require(_0x51a8('0x0'));var emlformat=require(_0x51a8('0x1'));var rimraf=require(_0x51a8('0x2'));var zipdir=require(_0x51a8('0x3'));var jsonpatch=require(_0x51a8('0x4'));var rp=require('request-promise');var moment=require(_0x51a8('0x5'));var BPromise=require(_0x51a8('0x6'));var Mustache=require('mustache');var util=require(_0x51a8('0x7'));var path=require(_0x51a8('0x8'));var sox=require(_0x51a8('0x9'));var csv=require(_0x51a8('0xa'));var ejs=require(_0x51a8('0xb'));var fs=require('fs');var _=require(_0x51a8('0xc'));var squel=require('squel');var crypto=require(_0x51a8('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x51a8('0xe'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x51a8('0xf'));var Redis=require(_0x51a8('0x10'));var qs=require(_0x51a8('0x11'));var logger=require(_0x51a8('0x12'))(_0x51a8('0x13'));var utils=require(_0x51a8('0x14'));var config=require(_0x51a8('0x15'));var db=require(_0x51a8('0x16'))['db'];function respondWithStatusCode(_0x11320a,_0x4ced05){_0x4ced05=_0x4ced05||0xcc;return function(_0x3a31f2){if(_0x3a31f2){return _0x11320a['sendStatus'](_0x4ced05);}return _0x11320a[_0x51a8('0x17')](_0x4ced05)[_0x51a8('0x18')]();};}function respondWithResult(_0x3e2817,_0x19b1b2){_0x19b1b2=_0x19b1b2||0xc8;return function(_0x247834){if(_0x247834){return _0x3e2817['status'](_0x19b1b2)[_0x51a8('0x19')](_0x247834);}};}function respondWithFilteredResult(_0x140687,_0xa262d4){return function(_0x6e5bc4){if(_0x6e5bc4){var _0x2fc244=_0x6e5bc4[_0x51a8('0x1a')],_0x4f92a0=_0xa262d4[_0x51a8('0x1b')],_0x2cb849=_0xa262d4[_0x51a8('0x1b')]+_0xa262d4[_0x51a8('0x1c')],_0x1b8b09;if(_0x2cb849>=_0x2fc244){_0x2cb849=_0x2fc244;_0x1b8b09=0xc8;}else{_0x1b8b09=0xce;}_0x140687[_0x51a8('0x17')](_0x1b8b09);return _0x140687[_0x51a8('0x1d')](_0x51a8('0x1e'),_0x4f92a0+'-'+_0x2cb849+'/'+_0x2fc244)[_0x51a8('0x19')](_0x6e5bc4);}return null;};}function patchUpdates(_0x459858){return function(_0x42e837){try{jsonpatch['apply'](_0x42e837,_0x459858,!![]);}catch(_0x3596d2){return BPromise['reject'](_0x3596d2);}return _0x42e837[_0x51a8('0x1f')]();};}function saveUpdates(_0x4b2c1c,_0xdcbbe){return function(_0x1e80a6){if(_0x1e80a6){return _0x1e80a6[_0x51a8('0x20')](_0x4b2c1c)['then'](function(_0x187f88){return _0x187f88;});}return null;};}function removeEntity(_0x2fcd52,_0x39c79d){return function(_0x120302){if(_0x120302){return _0x120302[_0x51a8('0x21')]()['then'](function(){var _0x46960a=_0x120302[_0x51a8('0x22')]({'plain':!![]});var _0x2ce17e=_0x51a8('0x23');return db[_0x51a8('0x24')][_0x51a8('0x21')]({'where':{'type':_0x2ce17e,'resourceId':_0x46960a['id']}})[_0x51a8('0x25')](function(){return _0x120302;});})[_0x51a8('0x25')](function(){_0x2fcd52[_0x51a8('0x17')](0xcc)[_0x51a8('0x18')]();});}};}function handleEntityNotFound(_0x503d58,_0x22bba2){return function(_0x27f72c){if(!_0x27f72c){_0x503d58[_0x51a8('0x26')](0x194);}return _0x27f72c;};}function handleError(_0x3d0617,_0x421e5a){_0x421e5a=_0x421e5a||0x1f4;return function(_0x1484eb){logger[_0x51a8('0x27')](_0x1484eb['stack']);if(_0x1484eb[_0x51a8('0x28')]){delete _0x1484eb['name'];}_0x3d0617['status'](_0x421e5a)[_0x51a8('0x29')](_0x1484eb);};}exports['index']=function(_0x1046f7,_0x39343b){var _0x53cb31={},_0x1fcc5e={},_0x5d1203={'count':0x0,'rows':[]};var _0x5c67fd=db[_0x51a8('0x2a')][_0x51a8('0x2b')];_0x1fcc5e[_0x51a8('0x2c')]=_[_0x51a8('0x2d')](_0x5c67fd);_0x1fcc5e[_0x51a8('0x2e')]=_['keys'](_0x1046f7[_0x51a8('0x2e')]);_0x1fcc5e[_0x51a8('0x2f')]=_[_0x51a8('0x30')](_0x1fcc5e[_0x51a8('0x2c')],_0x1fcc5e[_0x51a8('0x2e')]);_0x53cb31[_0x51a8('0x31')]=_[_0x51a8('0x30')](_0x1fcc5e[_0x51a8('0x2c')],qs[_0x51a8('0x32')](_0x1046f7['query'][_0x51a8('0x32')]));_0x53cb31[_0x51a8('0x31')]=_0x53cb31[_0x51a8('0x31')]['length']?_0x53cb31['attributes']:_0x1fcc5e[_0x51a8('0x2c')];if(!_0x1046f7['query']['hasOwnProperty']('nolimit')){_0x53cb31[_0x51a8('0x1c')]=qs[_0x51a8('0x1c')](_0x1046f7['query'][_0x51a8('0x1c')]);_0x53cb31[_0x51a8('0x1b')]=qs[_0x51a8('0x1b')](_0x1046f7['query']['offset']);}_0x53cb31[_0x51a8('0x33')]=qs[_0x51a8('0x34')](_0x1046f7[_0x51a8('0x2e')][_0x51a8('0x34')]);_0x53cb31[_0x51a8('0x35')]=qs[_0x51a8('0x2f')](_['pick'](_0x1046f7[_0x51a8('0x2e')],_0x1fcc5e[_0x51a8('0x2f')]));if(_0x1046f7[_0x51a8('0x2e')][_0x51a8('0x36')]){_0x53cb31[_0x51a8('0x35')]=_[_0x51a8('0x37')](_0x53cb31['where'],{'$or':_[_0x51a8('0x38')](_0x5c67fd,function(_0x5b87e8){if(_0x5b87e8[_0x51a8('0x39')][_0x51a8('0x3a')]!=='VIRTUAL'){var _0x57264b={};_0x57264b[_0x5b87e8[_0x51a8('0x3b')]]={'$like':'%'+_0x1046f7['query'][_0x51a8('0x36')]+'%'};return _0x57264b;}})});}_0x53cb31=_['merge']({},_0x53cb31,_0x1046f7[_0x51a8('0x3c')]);var _0x62584c={'where':_0x53cb31[_0x51a8('0x35')]};return db['AnalyticMetric'][_0x51a8('0x1a')](_0x62584c)[_0x51a8('0x25')](function(_0x53a3c3){_0x5d1203[_0x51a8('0x1a')]=_0x53a3c3;if(_0x1046f7['query'][_0x51a8('0x3d')]){_0x53cb31[_0x51a8('0x3e')]=[{'all':!![]}];}return db['AnalyticMetric']['findAll'](_0x53cb31);})[_0x51a8('0x25')](function(_0x4f8b17){_0x5d1203['rows']=_0x4f8b17;return _0x5d1203;})[_0x51a8('0x25')](respondWithFilteredResult(_0x39343b,_0x53cb31))[_0x51a8('0x3f')](handleError(_0x39343b,null));};exports[_0x51a8('0x40')]=function(_0x4e4138,_0x2c18c4){var _0xa60dc={'raw':!![],'where':{'id':_0x4e4138[_0x51a8('0x41')]['id']}},_0x5683b0={};_0x5683b0[_0x51a8('0x2c')]=_[_0x51a8('0x2d')](db['AnalyticMetric'][_0x51a8('0x2b')]);_0x5683b0[_0x51a8('0x2e')]=_['keys'](_0x4e4138['query']);_0x5683b0['filters']=_['intersection'](_0x5683b0['model'],_0x5683b0['query']);_0xa60dc[_0x51a8('0x31')]=_[_0x51a8('0x30')](_0x5683b0['model'],qs['fields'](_0x4e4138[_0x51a8('0x2e')][_0x51a8('0x32')]));_0xa60dc[_0x51a8('0x31')]=_0xa60dc[_0x51a8('0x31')][_0x51a8('0x42')]?_0xa60dc[_0x51a8('0x31')]:_0x5683b0[_0x51a8('0x2c')];if(_0x4e4138[_0x51a8('0x2e')][_0x51a8('0x3d')]){_0xa60dc[_0x51a8('0x3e')]=[{'all':!![]}];}_0xa60dc=_[_0x51a8('0x37')]({},_0xa60dc,_0x4e4138[_0x51a8('0x3c')]);return db[_0x51a8('0x2a')][_0x51a8('0x43')](_0xa60dc)[_0x51a8('0x25')](handleEntityNotFound(_0x2c18c4,null))[_0x51a8('0x25')](respondWithResult(_0x2c18c4,null))[_0x51a8('0x3f')](handleError(_0x2c18c4,null));};exports[_0x51a8('0x44')]=function(_0x35da64,_0x476faf){return db[_0x51a8('0x2a')]['create'](_0x35da64['body'],{})['then'](function(_0xba9645){var _0x13a1da=_0x35da64[_0x51a8('0x45')][_0x51a8('0x22')]({'plain':!![]});if(!_0x13a1da)throw new Error(_0x51a8('0x46'));if(_0x13a1da[_0x51a8('0x47')]===_0x51a8('0x45')){var _0x321a65=_0xba9645[_0x51a8('0x22')]({'plain':!![]});var _0x157548=_0x51a8('0x23');return db['UserProfileSection'][_0x51a8('0x43')]({'where':{'name':_0x157548,'userProfileId':_0x13a1da[_0x51a8('0x48')]},'raw':!![]})[_0x51a8('0x25')](function(_0x4657f1){if(_0x4657f1&&_0x4657f1[_0x51a8('0x49')]===0x0){return db['UserProfileResource']['create']({'name':_0x321a65['name'],'resourceId':_0x321a65['id'],'type':_0x4657f1[_0x51a8('0x28')],'sectionId':_0x4657f1['id']},{})[_0x51a8('0x25')](function(){return _0xba9645;});}else{return _0xba9645;}})[_0x51a8('0x3f')](function(_0xe24d16){logger['error'](_0x51a8('0x4a'),_0xe24d16);throw _0xe24d16;});}return _0xba9645;})['then'](respondWithResult(_0x476faf,0xc9))[_0x51a8('0x3f')](handleError(_0x476faf,null));};exports[_0x51a8('0x20')]=function(_0x2de644,_0x827183){if(_0x2de644[_0x51a8('0x4b')]['id']){delete _0x2de644[_0x51a8('0x4b')]['id'];}return db[_0x51a8('0x2a')]['find']({'where':{'id':_0x2de644[_0x51a8('0x41')]['id']}})[_0x51a8('0x25')](handleEntityNotFound(_0x827183,null))[_0x51a8('0x25')](saveUpdates(_0x2de644['body'],null))[_0x51a8('0x25')](respondWithResult(_0x827183,null))[_0x51a8('0x3f')](handleError(_0x827183,null));};exports[_0x51a8('0x21')]=function(_0x31b903,_0x446539){return db[_0x51a8('0x2a')][_0x51a8('0x43')]({'where':{'id':_0x31b903[_0x51a8('0x41')]['id']}})[_0x51a8('0x25')](handleEntityNotFound(_0x446539,null))['then'](removeEntity(_0x446539,null))[_0x51a8('0x3f')](handleError(_0x446539,null));};
\ No newline at end of file
+var _0x705d=['moment','bluebird','mustache','path','sox','ejs','lodash','squel','crypto','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','count','offset','limit','json','apply','update','destroy','Metrics','UserProfileResource','then','status','end','sendStatus','stack','name','index','AnalyticMetric','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','where','filters','pick','filter','merge','map','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','html-pdf','eml-format','fast-json-patch','request-promise'];(function(_0x195b70,_0x1810c2){var _0x2ec970=function(_0x35f8e4){while(--_0x35f8e4){_0x195b70['push'](_0x195b70['shift']());}};_0x2ec970(++_0x1810c2);}(_0x705d,0x98));var _0xd705=function(_0x19646d,_0x30725d){_0x19646d=_0x19646d-0x0;var _0x22e565=_0x705d[_0x19646d];return _0x22e565;};'use strict';var pdf=require(_0xd705('0x0'));var emlformat=require(_0xd705('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xd705('0x2'));var rp=require(_0xd705('0x3'));var moment=require(_0xd705('0x4'));var BPromise=require(_0xd705('0x5'));var Mustache=require(_0xd705('0x6'));var util=require('util');var path=require(_0xd705('0x7'));var sox=require(_0xd705('0x8'));var csv=require('to-csv');var ejs=require(_0xd705('0x9'));var fs=require('fs');var _=require(_0xd705('0xa'));var squel=require(_0xd705('0xb'));var crypto=require(_0xd705('0xc'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xd705('0xd'));var Papa=require(_0xd705('0xe'));var authService=require(_0xd705('0xf'));var hardwareService=require(_0xd705('0x10'));var Redis=require(_0xd705('0x11'));var qs=require(_0xd705('0x12'));var logger=require('../../config/logger')(_0xd705('0x13'));var utils=require(_0xd705('0x14'));var config=require(_0xd705('0x15'));var db=require(_0xd705('0x16'))['db'];function respondWithStatusCode(_0x5e9f35,_0x46672e){_0x46672e=_0x46672e||0xcc;return function(_0x2d5921){if(_0x2d5921){return _0x5e9f35['sendStatus'](_0x46672e);}return _0x5e9f35['status'](_0x46672e)['end']();};}function respondWithResult(_0xb87bca,_0x2c3f28){_0x2c3f28=_0x2c3f28||0xc8;return function(_0x2288d3){if(_0x2288d3){return _0xb87bca['status'](_0x2c3f28)['json'](_0x2288d3);}};}function respondWithFilteredResult(_0x3f9234,_0x264df1){return function(_0x3681a9){if(_0x3681a9){var _0x6c848a=_0x3681a9[_0xd705('0x17')],_0x34f733=_0x264df1[_0xd705('0x18')],_0x27775b=_0x264df1['offset']+_0x264df1[_0xd705('0x19')],_0x2ee74a;if(_0x27775b>=_0x6c848a){_0x27775b=_0x6c848a;_0x2ee74a=0xc8;}else{_0x2ee74a=0xce;}_0x3f9234['status'](_0x2ee74a);return _0x3f9234['set']('Content-Range',_0x34f733+'-'+_0x27775b+'/'+_0x6c848a)[_0xd705('0x1a')](_0x3681a9);}return null;};}function patchUpdates(_0x397890){return function(_0x21eb98){try{jsonpatch[_0xd705('0x1b')](_0x21eb98,_0x397890,!![]);}catch(_0x47d526){return BPromise['reject'](_0x47d526);}return _0x21eb98['save']();};}function saveUpdates(_0x25667,_0x3fe109){return function(_0xc52ca3){if(_0xc52ca3){return _0xc52ca3[_0xd705('0x1c')](_0x25667)['then'](function(_0x4d6250){return _0x4d6250;});}return null;};}function removeEntity(_0x614053,_0x6c4c09){return function(_0x4861c0){if(_0x4861c0){return _0x4861c0[_0xd705('0x1d')]()['then'](function(){var _0x137ca7=_0x4861c0['get']({'plain':!![]});var _0x349a2e=_0xd705('0x1e');return db[_0xd705('0x1f')][_0xd705('0x1d')]({'where':{'type':_0x349a2e,'resourceId':_0x137ca7['id']}})[_0xd705('0x20')](function(){return _0x4861c0;});})[_0xd705('0x20')](function(){_0x614053[_0xd705('0x21')](0xcc)[_0xd705('0x22')]();});}};}function handleEntityNotFound(_0x1cd506,_0x143167){return function(_0x8f3517){if(!_0x8f3517){_0x1cd506[_0xd705('0x23')](0x194);}return _0x8f3517;};}function handleError(_0x332f6d,_0x7b5d29){_0x7b5d29=_0x7b5d29||0x1f4;return function(_0x41893f){logger['error'](_0x41893f[_0xd705('0x24')]);if(_0x41893f['name']){delete _0x41893f[_0xd705('0x25')];}_0x332f6d[_0xd705('0x21')](_0x7b5d29)['send'](_0x41893f);};}exports[_0xd705('0x26')]=function(_0x39e74e,_0x2cdcd8){var _0x28a60e={},_0x5a1885={},_0x5639a8={'count':0x0,'rows':[]};var _0x113832=db[_0xd705('0x27')][_0xd705('0x28')];_0x5a1885[_0xd705('0x29')]=_[_0xd705('0x2a')](_0x113832);_0x5a1885[_0xd705('0x2b')]=_[_0xd705('0x2a')](_0x39e74e[_0xd705('0x2b')]);_0x5a1885['filters']=_[_0xd705('0x2c')](_0x5a1885[_0xd705('0x29')],_0x5a1885[_0xd705('0x2b')]);_0x28a60e[_0xd705('0x2d')]=_['intersection'](_0x5a1885[_0xd705('0x29')],qs[_0xd705('0x2e')](_0x39e74e[_0xd705('0x2b')][_0xd705('0x2e')]));_0x28a60e[_0xd705('0x2d')]=_0x28a60e[_0xd705('0x2d')][_0xd705('0x2f')]?_0x28a60e[_0xd705('0x2d')]:_0x5a1885[_0xd705('0x29')];if(!_0x39e74e[_0xd705('0x2b')][_0xd705('0x30')]('nolimit')){_0x28a60e['limit']=qs[_0xd705('0x19')](_0x39e74e[_0xd705('0x2b')]['limit']);_0x28a60e['offset']=qs[_0xd705('0x18')](_0x39e74e['query'][_0xd705('0x18')]);}_0x28a60e[_0xd705('0x31')]=qs['sort'](_0x39e74e[_0xd705('0x2b')]['sort']);_0x28a60e[_0xd705('0x32')]=qs[_0xd705('0x33')](_[_0xd705('0x34')](_0x39e74e[_0xd705('0x2b')],_0x5a1885[_0xd705('0x33')]));if(_0x39e74e[_0xd705('0x2b')][_0xd705('0x35')]){_0x28a60e['where']=_[_0xd705('0x36')](_0x28a60e[_0xd705('0x32')],{'$or':_[_0xd705('0x37')](_0x113832,function(_0x56c7ef){if(_0x56c7ef['type'][_0xd705('0x38')]!==_0xd705('0x39')){var _0xcbf273={};_0xcbf273[_0x56c7ef[_0xd705('0x3a')]]={'$like':'%'+_0x39e74e[_0xd705('0x2b')][_0xd705('0x35')]+'%'};return _0xcbf273;}})});}_0x28a60e=_[_0xd705('0x36')]({},_0x28a60e,_0x39e74e[_0xd705('0x3b')]);var _0x13c448={'where':_0x28a60e[_0xd705('0x32')]};return db[_0xd705('0x27')][_0xd705('0x17')](_0x13c448)[_0xd705('0x20')](function(_0x2c03d0){_0x5639a8[_0xd705('0x17')]=_0x2c03d0;if(_0x39e74e['query'][_0xd705('0x3c')]){_0x28a60e[_0xd705('0x3d')]=[{'all':!![]}];}return db[_0xd705('0x27')][_0xd705('0x3e')](_0x28a60e);})[_0xd705('0x20')](function(_0x406b2c){_0x5639a8[_0xd705('0x3f')]=_0x406b2c;return _0x5639a8;})[_0xd705('0x20')](respondWithFilteredResult(_0x2cdcd8,_0x28a60e))[_0xd705('0x40')](handleError(_0x2cdcd8,null));};exports[_0xd705('0x41')]=function(_0x26e58e,_0x4eb0f4){var _0x34d65d={'raw':!![],'where':{'id':_0x26e58e[_0xd705('0x42')]['id']}},_0x56c8b3={};_0x56c8b3[_0xd705('0x29')]=_[_0xd705('0x2a')](db[_0xd705('0x27')][_0xd705('0x28')]);_0x56c8b3[_0xd705('0x2b')]=_[_0xd705('0x2a')](_0x26e58e[_0xd705('0x2b')]);_0x56c8b3['filters']=_[_0xd705('0x2c')](_0x56c8b3['model'],_0x56c8b3['query']);_0x34d65d['attributes']=_['intersection'](_0x56c8b3[_0xd705('0x29')],qs[_0xd705('0x2e')](_0x26e58e[_0xd705('0x2b')]['fields']));_0x34d65d[_0xd705('0x2d')]=_0x34d65d[_0xd705('0x2d')][_0xd705('0x2f')]?_0x34d65d[_0xd705('0x2d')]:_0x56c8b3[_0xd705('0x29')];if(_0x26e58e[_0xd705('0x2b')][_0xd705('0x3c')]){_0x34d65d['include']=[{'all':!![]}];}_0x34d65d=_['merge']({},_0x34d65d,_0x26e58e[_0xd705('0x3b')]);return db['AnalyticMetric'][_0xd705('0x43')](_0x34d65d)[_0xd705('0x20')](handleEntityNotFound(_0x4eb0f4,null))['then'](respondWithResult(_0x4eb0f4,null))[_0xd705('0x40')](handleError(_0x4eb0f4,null));};exports[_0xd705('0x44')]=function(_0xbac86b,_0x5c7cc0){return db[_0xd705('0x27')][_0xd705('0x44')](_0xbac86b['body'],{})['then'](function(_0x1fba8f){var _0x5b8594=_0xbac86b[_0xd705('0x45')][_0xd705('0x46')]({'plain':!![]});if(!_0x5b8594)throw new Error(_0xd705('0x47'));if(_0x5b8594[_0xd705('0x48')]===_0xd705('0x45')){var _0x8be873=_0x1fba8f[_0xd705('0x46')]({'plain':!![]});var _0x2d3a8f='Metrics';return db[_0xd705('0x49')][_0xd705('0x43')]({'where':{'name':_0x2d3a8f,'userProfileId':_0x5b8594['userProfileId']},'raw':!![]})[_0xd705('0x20')](function(_0x400d6d){if(_0x400d6d&&_0x400d6d[_0xd705('0x4a')]===0x0){return db[_0xd705('0x1f')][_0xd705('0x44')]({'name':_0x8be873['name'],'resourceId':_0x8be873['id'],'type':_0x400d6d[_0xd705('0x25')],'sectionId':_0x400d6d['id']},{})[_0xd705('0x20')](function(){return _0x1fba8f;});}else{return _0x1fba8f;}})[_0xd705('0x40')](function(_0xa51ffe){logger[_0xd705('0x4b')](_0xd705('0x4c'),_0xa51ffe);throw _0xa51ffe;});}return _0x1fba8f;})[_0xd705('0x20')](respondWithResult(_0x5c7cc0,0xc9))[_0xd705('0x40')](handleError(_0x5c7cc0,null));};exports[_0xd705('0x1c')]=function(_0x2eaf72,_0x542827){if(_0x2eaf72[_0xd705('0x4d')]['id']){delete _0x2eaf72[_0xd705('0x4d')]['id'];}return db[_0xd705('0x27')][_0xd705('0x43')]({'where':{'id':_0x2eaf72[_0xd705('0x42')]['id']}})[_0xd705('0x20')](handleEntityNotFound(_0x542827,null))[_0xd705('0x20')](saveUpdates(_0x2eaf72['body'],null))[_0xd705('0x20')](respondWithResult(_0x542827,null))['catch'](handleError(_0x542827,null));};exports[_0xd705('0x1d')]=function(_0x14c6c1,_0x34c182){return db[_0xd705('0x27')][_0xd705('0x43')]({'where':{'id':_0x14c6c1[_0xd705('0x42')]['id']}})[_0xd705('0x20')](handleEntityNotFound(_0x34c182,null))[_0xd705('0x20')](removeEntity(_0x34c182,null))[_0xd705('0x40')](handleError(_0x34c182,null));};
\ No newline at end of file
index 2ba46dd..04d1a22 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x29d2=['AnalyticMetric','lodash','../../config/logger','api','moment','bluebird','request-promise','./analyticMetric.attributes','exports'];(function(_0x3718f8,_0x188b62){var _0x1d68ee=function(_0x2eb533){while(--_0x2eb533){_0x3718f8['push'](_0x3718f8['shift']());}};_0x1d68ee(++_0x188b62);}(_0x29d2,0xe2));var _0x229d=function(_0x413e2d,_0x9cec9c){_0x413e2d=_0x413e2d-0x0;var _0x5ea403=_0x29d2[_0x413e2d];return _0x5ea403;};'use strict';var _=require(_0x229d('0x0'));var util=require('util');var logger=require(_0x229d('0x1'))(_0x229d('0x2'));var moment=require(_0x229d('0x3'));var BPromise=require(_0x229d('0x4'));var rp=require(_0x229d('0x5'));var attributes=require(_0x229d('0x6'));module[_0x229d('0x7')]=function(_0x50e07e,_0x1c00b3){return _0x50e07e['define'](_0x229d('0x8'),attributes,{'tableName':'analytics_metrics','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2afe=['exports','analytics_metrics','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./analyticMetric.attributes'];(function(_0x4cf765,_0xc7a6bf){var _0x473760=function(_0x2d501d){while(--_0x2d501d){_0x4cf765['push'](_0x4cf765['shift']());}};_0x473760(++_0xc7a6bf);}(_0x2afe,0x66));var _0xe2af=function(_0x167cc1,_0x56ef5a){_0x167cc1=_0x167cc1-0x0;var _0x10bc4b=_0x2afe[_0x167cc1];return _0x10bc4b;};'use strict';var _=require(_0xe2af('0x0'));var util=require(_0xe2af('0x1'));var logger=require(_0xe2af('0x2'))(_0xe2af('0x3'));var moment=require(_0xe2af('0x4'));var BPromise=require(_0xe2af('0x5'));var rp=require(_0xe2af('0x6'));var attributes=require(_0xe2af('0x7'));module[_0xe2af('0x8')]=function(_0x5a3514,_0x567134){return _0x5a3514['define']('AnalyticMetric',attributes,{'tableName':_0xe2af('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 49aaad8..da4fadc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8128=['message','lodash','bluebird','randomstring','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','info','AnalyticMetric,\x20%s,\x20%s','request\x20sent','debug','AnalyticMetric,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x10bcc4,_0x4400e2){var _0x2da988=function(_0x2ee849){while(--_0x2ee849){_0x10bcc4['push'](_0x10bcc4['shift']());}};_0x2da988(++_0x4400e2);}(_0x8128,0x1b1));var _0x8812=function(_0x5608a3,_0x5b33c5){_0x5608a3=_0x5608a3-0x0;var _0x1ed50a=_0x8128[_0x5608a3];return _0x1ed50a;};'use strict';var _=require(_0x8812('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x8812('0x1'));var rs=require(_0x8812('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x8812('0x3'));var logger=require(_0x8812('0x4'))(_0x8812('0x5'));var config=require('../../config/environment');var jayson=require(_0x8812('0x6'));var client=jayson[_0x8812('0x7')][_0x8812('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x16bafa,_0x480d1f,_0xfdd696){return new BPromise(function(_0x3d030b,_0x4e5012){return client['request'](_0x16bafa,_0xfdd696)['then'](function(_0x2bc882){logger[_0x8812('0x9')](_0x8812('0xa'),_0x480d1f,_0x8812('0xb'));logger[_0x8812('0xc')](_0x8812('0xd'),_0x480d1f,_0x8812('0xb'),JSON[_0x8812('0xe')](_0x2bc882));if(_0x2bc882[_0x8812('0xf')]){if(_0x2bc882['error'][_0x8812('0x10')]===0x1f4){logger[_0x8812('0xf')](_0x8812('0xa'),_0x480d1f,_0x2bc882[_0x8812('0xf')][_0x8812('0x11')]);return _0x4e5012(_0x2bc882[_0x8812('0xf')]['message']);}logger[_0x8812('0xf')](_0x8812('0xa'),_0x480d1f,_0x2bc882[_0x8812('0xf')]['message']);return _0x3d030b(_0x2bc882['error'][_0x8812('0x11')]);}else{logger[_0x8812('0x9')]('AnalyticMetric,\x20%s,\x20%s',_0x480d1f,'request\x20sent');_0x3d030b(_0x2bc882['result']['message']);}})['catch'](function(_0xa2a8cc){logger['error'](_0x8812('0xa'),_0x480d1f,_0xa2a8cc);_0x4e5012(_0xa2a8cc);});});}
\ No newline at end of file
+var _0x34e5=['jayson/promise','client','http','request','info','request\x20sent','AnalyticMetric,\x20%s,\x20%s,\x20%s','stringify','error','code','AnalyticMetric,\x20%s,\x20%s','message','result','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment'];(function(_0x35a274,_0x98b399){var _0x40d905=function(_0x5c8455){while(--_0x5c8455){_0x35a274['push'](_0x35a274['shift']());}};_0x40d905(++_0x98b399);}(_0x34e5,0x172));var _0x534e=function(_0x3aff64,_0xbf77c8){_0x3aff64=_0x3aff64-0x0;var _0x1bf838=_0x34e5[_0x3aff64];return _0x1bf838;};'use strict';var _=require('lodash');var util=require(_0x534e('0x0'));var moment=require('moment');var BPromise=require(_0x534e('0x1'));var rs=require(_0x534e('0x2'));var fs=require('fs');var Redis=require(_0x534e('0x3'));var db=require(_0x534e('0x4'))['db'];var utils=require(_0x534e('0x5'));var logger=require('../../config/logger')(_0x534e('0x6'));var config=require(_0x534e('0x7'));var jayson=require(_0x534e('0x8'));var client=jayson[_0x534e('0x9')][_0x534e('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2d0370,_0x2760e7,_0x5620d4){return new BPromise(function(_0x24d562,_0x929597){return client[_0x534e('0xb')](_0x2d0370,_0x5620d4)['then'](function(_0x59fcff){logger[_0x534e('0xc')]('AnalyticMetric,\x20%s,\x20%s',_0x2760e7,_0x534e('0xd'));logger['debug'](_0x534e('0xe'),_0x2760e7,_0x534e('0xd'),JSON[_0x534e('0xf')](_0x59fcff));if(_0x59fcff['error']){if(_0x59fcff[_0x534e('0x10')][_0x534e('0x11')]===0x1f4){logger[_0x534e('0x10')](_0x534e('0x12'),_0x2760e7,_0x59fcff[_0x534e('0x10')]['message']);return _0x929597(_0x59fcff[_0x534e('0x10')][_0x534e('0x13')]);}logger[_0x534e('0x10')](_0x534e('0x12'),_0x2760e7,_0x59fcff[_0x534e('0x10')][_0x534e('0x13')]);return _0x24d562(_0x59fcff[_0x534e('0x10')][_0x534e('0x13')]);}else{logger[_0x534e('0xc')]('AnalyticMetric,\x20%s,\x20%s',_0x2760e7,_0x534e('0xd'));_0x24d562(_0x59fcff[_0x534e('0x14')]['message']);}})['catch'](function(_0x2de9d0){logger[_0x534e('0x10')](_0x534e('0x12'),_0x2760e7,_0x2de9d0);_0x929597(_0x2de9d0);});});}
\ No newline at end of file
index 3837d80..428bd44 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a37=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./analyticMetric.controller','isAuthenticated','get','/:id','show','update','delete','destroy','exports'];(function(_0x58b0cf,_0x1aa276){var _0x2f64a4=function(_0x21d069){while(--_0x21d069){_0x58b0cf['push'](_0x58b0cf['shift']());}};_0x2f64a4(++_0x1aa276);}(_0x1a37,0xb4));var _0x71a3=function(_0x2d7f0e,_0x3e6fbd){_0x2d7f0e=_0x2d7f0e-0x0;var _0x110b07=_0x1a37[_0x2d7f0e];return _0x110b07;};'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['put'](_0x71a3('0xc'),auth[_0x71a3('0xa')](),controller[_0x71a3('0xe')]);router[_0x71a3('0xf')](_0x71a3('0xc'),auth[_0x71a3('0xa')](),controller[_0x71a3('0x10')]);module[_0x71a3('0x11')]=router;
\ No newline at end of file
+var _0x5fdc=['./analyticMetric.controller','get','isAuthenticated','index','/:id','create','put','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x1b461f,_0x4b51f0){var _0x2d4689=function(_0x20dc7c){while(--_0x20dc7c){_0x1b461f['push'](_0x1b461f['shift']());}};_0x2d4689(++_0x4b51f0);}(_0x5fdc,0x127));var _0xc5fd=function(_0x13ba2d,_0x2ada7c){_0x13ba2d=_0x13ba2d-0x0;var _0x502830=_0x5fdc[_0x13ba2d];return _0x502830;};'use strict';var multer=require(_0xc5fd('0x0'));var util=require(_0xc5fd('0x1'));var path=require(_0xc5fd('0x2'));var timeout=require(_0xc5fd('0x3'));var express=require(_0xc5fd('0x4'));var router=express[_0xc5fd('0x5')]();var auth=require(_0xc5fd('0x6'));var interaction=require(_0xc5fd('0x7'));var config=require(_0xc5fd('0x8'));var controller=require(_0xc5fd('0x9'));router[_0xc5fd('0xa')]('/',auth[_0xc5fd('0xb')](),controller[_0xc5fd('0xc')]);router[_0xc5fd('0xa')](_0xc5fd('0xd'),auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0xc5fd('0xb')](),controller[_0xc5fd('0xe')]);router[_0xc5fd('0xf')](_0xc5fd('0xd'),auth['isAuthenticated'](),controller['update']);router[_0xc5fd('0x10')](_0xc5fd('0xd'),auth[_0xc5fd('0xb')](),controller[_0xc5fd('0x11')]);module[_0xc5fd('0x12')]=router;
\ No newline at end of file
index 4dd9300..c5037c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x36c3=['sequelize','exports','TEXT'];(function(_0x36ed48,_0x1ee0d4){var _0x51c63a=function(_0x2d0a40){while(--_0x2d0a40){_0x36ed48['push'](_0x36ed48['shift']());}};_0x51c63a(++_0x1ee0d4);}(_0x36c3,0xe1));var _0x336c=function(_0x117a06,_0x3860e4){_0x117a06=_0x117a06-0x0;var _0x53bfc2=_0x36c3[_0x117a06];return _0x53bfc2;};'use strict';var Sequelize=require(_0x336c('0x0'));module[_0x336c('0x1')]={'tree':{'type':Sequelize[_0x336c('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0xf0d3=['exports','TEXT'];(function(_0x2d3f32,_0xb531aa){var _0x26ab09=function(_0x4256c2){while(--_0x4256c2){_0x2d3f32['push'](_0x2d3f32['shift']());}};_0x26ab09(++_0xb531aa);}(_0xf0d3,0x1ee));var _0x3f0d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xf0d3[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require('sequelize');module[_0x3f0d('0x0')]={'tree':{'type':Sequelize[_0x3f0d('0x1')],'allowNull':![]}};
\ No newline at end of file
index 4531231..2145165 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c95=['send','index','AnalyticTreeReport','rawAttributes','keys','query','intersection','model','attributes','fields','length','order','sort','where','filters','pick','filter','merge','type','key','VIRTUAL','field','includeAll','include','catch','show','find','create','body','params','eml-format','rimraf','zip-dir','fast-json-patch','moment','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','name'];(function(_0x45a544,_0x4f2347){var _0x38ac5a=function(_0x3374ce){while(--_0x3374ce){_0x45a544['push'](_0x45a544['shift']());}};_0x38ac5a(++_0x4f2347);}(_0x4c95,0xed));var _0x54c9=function(_0x8c62df,_0x5a9504){_0x8c62df=_0x8c62df-0x0;var _0x4df4ca=_0x4c95[_0x8c62df];return _0x4df4ca;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x54c9('0x0'));var rimraf=require(_0x54c9('0x1'));var zipdir=require(_0x54c9('0x2'));var jsonpatch=require(_0x54c9('0x3'));var rp=require('request-promise');var moment=require(_0x54c9('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x54c9('0x5'));var util=require(_0x54c9('0x6'));var path=require(_0x54c9('0x7'));var sox=require(_0x54c9('0x8'));var csv=require(_0x54c9('0x9'));var ejs=require(_0x54c9('0xa'));var fs=require('fs');var _=require(_0x54c9('0xb'));var squel=require('squel');var crypto=require(_0x54c9('0xc'));var jsforce=require(_0x54c9('0xd'));var deskjs=require(_0x54c9('0xe'));var toCsv=require(_0x54c9('0x9'));var querystring=require(_0x54c9('0xf'));var Papa=require('papaparse');var authService=require(_0x54c9('0x10'));var hardwareService=require(_0x54c9('0x11'));var Redis=require(_0x54c9('0x12'));var qs=require('../../components/parsers/qs');var logger=require(_0x54c9('0x13'))(_0x54c9('0x14'));var utils=require(_0x54c9('0x15'));var config=require(_0x54c9('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x85e53d,_0x19ad00){_0x19ad00=_0x19ad00||0xcc;return function(_0x405657){if(_0x405657){return _0x85e53d[_0x54c9('0x17')](_0x19ad00);}return _0x85e53d[_0x54c9('0x18')](_0x19ad00)[_0x54c9('0x19')]();};}function respondWithResult(_0x449083,_0x555871){_0x555871=_0x555871||0xc8;return function(_0x54ab59){if(_0x54ab59){return _0x449083['status'](_0x555871)[_0x54c9('0x1a')](_0x54ab59);}};}function respondWithFilteredResult(_0x1c5ef5,_0xd7eba1){return function(_0x9e462){if(_0x9e462){var _0x5008a3=_0x9e462[_0x54c9('0x1b')],_0x990624=_0xd7eba1[_0x54c9('0x1c')],_0x528fd1=_0xd7eba1[_0x54c9('0x1c')]+_0xd7eba1[_0x54c9('0x1d')],_0x3caf1f;if(_0x528fd1>=_0x5008a3){_0x528fd1=_0x5008a3;_0x3caf1f=0xc8;}else{_0x3caf1f=0xce;}_0x1c5ef5[_0x54c9('0x18')](_0x3caf1f);return _0x1c5ef5[_0x54c9('0x1e')](_0x54c9('0x1f'),_0x990624+'-'+_0x528fd1+'/'+_0x5008a3)[_0x54c9('0x1a')](_0x9e462);}return null;};}function patchUpdates(_0x274075){return function(_0x28ec47){try{jsonpatch[_0x54c9('0x20')](_0x28ec47,_0x274075,!![]);}catch(_0xa4df21){return BPromise[_0x54c9('0x21')](_0xa4df21);}return _0x28ec47['save']();};}function saveUpdates(_0x4e2ca6,_0x1c2e4f){return function(_0x15aa05){if(_0x15aa05){return _0x15aa05[_0x54c9('0x22')](_0x4e2ca6)[_0x54c9('0x23')](function(_0x28b222){return _0x28b222;});}return null;};}function removeEntity(_0x4a79f5,_0x40a5c4){return function(_0x1180f2){if(_0x1180f2){return _0x1180f2[_0x54c9('0x24')]()[_0x54c9('0x23')](function(){_0x4a79f5['status'](0xcc)[_0x54c9('0x19')]();});}};}function handleEntityNotFound(_0x14d070,_0x2a3e7b){return function(_0x519918){if(!_0x519918){_0x14d070['sendStatus'](0x194);}return _0x519918;};}function handleError(_0x874c8a,_0x2825ea){_0x2825ea=_0x2825ea||0x1f4;return function(_0x486aee){logger[_0x54c9('0x25')](_0x486aee['stack']);if(_0x486aee[_0x54c9('0x26')]){delete _0x486aee[_0x54c9('0x26')];}_0x874c8a[_0x54c9('0x18')](_0x2825ea)[_0x54c9('0x27')](_0x486aee);};}exports[_0x54c9('0x28')]=function(_0x121332,_0x3ad414){var _0x2d091a={},_0x417a4f={},_0x370b40={'count':0x0,'rows':[]};var _0x24a8e2=db[_0x54c9('0x29')][_0x54c9('0x2a')];_0x417a4f['model']=_[_0x54c9('0x2b')](_0x24a8e2);_0x417a4f[_0x54c9('0x2c')]=_[_0x54c9('0x2b')](_0x121332[_0x54c9('0x2c')]);_0x417a4f['filters']=_[_0x54c9('0x2d')](_0x417a4f[_0x54c9('0x2e')],_0x417a4f[_0x54c9('0x2c')]);_0x2d091a[_0x54c9('0x2f')]=_[_0x54c9('0x2d')](_0x417a4f[_0x54c9('0x2e')],qs[_0x54c9('0x30')](_0x121332['query'][_0x54c9('0x30')]));_0x2d091a[_0x54c9('0x2f')]=_0x2d091a[_0x54c9('0x2f')][_0x54c9('0x31')]?_0x2d091a['attributes']:_0x417a4f['model'];if(!_0x121332[_0x54c9('0x2c')]['hasOwnProperty']('nolimit')){_0x2d091a['limit']=qs['limit'](_0x121332[_0x54c9('0x2c')]['limit']);_0x2d091a[_0x54c9('0x1c')]=qs[_0x54c9('0x1c')](_0x121332[_0x54c9('0x2c')]['offset']);}_0x2d091a[_0x54c9('0x32')]=qs[_0x54c9('0x33')](_0x121332['query'][_0x54c9('0x33')]);_0x2d091a[_0x54c9('0x34')]=qs[_0x54c9('0x35')](_[_0x54c9('0x36')](_0x121332[_0x54c9('0x2c')],_0x417a4f['filters']));if(_0x121332['query'][_0x54c9('0x37')]){_0x2d091a[_0x54c9('0x34')]=_[_0x54c9('0x38')](_0x2d091a[_0x54c9('0x34')],{'$or':_['map'](_0x24a8e2,function(_0x4938bd){if(_0x4938bd[_0x54c9('0x39')][_0x54c9('0x3a')]!==_0x54c9('0x3b')){var _0x12b2d5={};_0x12b2d5[_0x4938bd[_0x54c9('0x3c')]]={'$like':'%'+_0x121332[_0x54c9('0x2c')][_0x54c9('0x37')]+'%'};return _0x12b2d5;}})});}_0x2d091a=_['merge']({},_0x2d091a,_0x121332['options']);var _0x1934e8={'where':_0x2d091a[_0x54c9('0x34')]};return db[_0x54c9('0x29')][_0x54c9('0x1b')](_0x1934e8)[_0x54c9('0x23')](function(_0x4707eb){_0x370b40[_0x54c9('0x1b')]=_0x4707eb;if(_0x121332[_0x54c9('0x2c')][_0x54c9('0x3d')]){_0x2d091a[_0x54c9('0x3e')]=[{'all':!![]}];}return db[_0x54c9('0x29')]['findAll'](_0x2d091a);})[_0x54c9('0x23')](function(_0xa5286e){_0x370b40['rows']=_0xa5286e;return _0x370b40;})['then'](respondWithFilteredResult(_0x3ad414,_0x2d091a))[_0x54c9('0x3f')](handleError(_0x3ad414,null));};exports[_0x54c9('0x40')]=function(_0x47ceee,_0x9de36){var _0x5ab0be={'raw':!![],'where':{'id':_0x47ceee['params']['id']}},_0xc084dd={};_0xc084dd[_0x54c9('0x2e')]=_[_0x54c9('0x2b')](db[_0x54c9('0x29')][_0x54c9('0x2a')]);_0xc084dd[_0x54c9('0x2c')]=_[_0x54c9('0x2b')](_0x47ceee[_0x54c9('0x2c')]);_0xc084dd['filters']=_[_0x54c9('0x2d')](_0xc084dd[_0x54c9('0x2e')],_0xc084dd['query']);_0x5ab0be[_0x54c9('0x2f')]=_['intersection'](_0xc084dd['model'],qs[_0x54c9('0x30')](_0x47ceee[_0x54c9('0x2c')][_0x54c9('0x30')]));_0x5ab0be['attributes']=_0x5ab0be[_0x54c9('0x2f')][_0x54c9('0x31')]?_0x5ab0be[_0x54c9('0x2f')]:_0xc084dd['model'];if(_0x47ceee['query'][_0x54c9('0x3d')]){_0x5ab0be[_0x54c9('0x3e')]=[{'all':!![]}];}_0x5ab0be=_[_0x54c9('0x38')]({},_0x5ab0be,_0x47ceee['options']);return db[_0x54c9('0x29')][_0x54c9('0x41')](_0x5ab0be)[_0x54c9('0x23')](handleEntityNotFound(_0x9de36,null))[_0x54c9('0x23')](respondWithResult(_0x9de36,null))['catch'](handleError(_0x9de36,null));};exports[_0x54c9('0x42')]=function(_0x700852,_0x3ab52a){return db['AnalyticTreeReport'][_0x54c9('0x42')](_0x700852['body'],{})[_0x54c9('0x23')](respondWithResult(_0x3ab52a,0xc9))[_0x54c9('0x3f')](handleError(_0x3ab52a,null));};exports[_0x54c9('0x22')]=function(_0x2ca575,_0x2fdeb7){if(_0x2ca575['body']['id']){delete _0x2ca575[_0x54c9('0x43')]['id'];}return db[_0x54c9('0x29')][_0x54c9('0x41')]({'where':{'id':_0x2ca575['params']['id']}})[_0x54c9('0x23')](handleEntityNotFound(_0x2fdeb7,null))[_0x54c9('0x23')](saveUpdates(_0x2ca575['body'],null))['then'](respondWithResult(_0x2fdeb7,null))[_0x54c9('0x3f')](handleError(_0x2fdeb7,null));};exports[_0x54c9('0x24')]=function(_0x124dd5,_0x5d0391){return db['AnalyticTreeReport'][_0x54c9('0x41')]({'where':{'id':_0x124dd5[_0x54c9('0x44')]['id']}})[_0x54c9('0x23')](handleEntityNotFound(_0x5d0391,null))[_0x54c9('0x23')](removeEntity(_0x5d0391,null))[_0x54c9('0x3f')](handleError(_0x5d0391,null));};
\ No newline at end of file
+var _0x0182=['attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','where','merge','map','type','key','VIRTUAL','field','filter','AnalyticTreeReport','include','findAll','rows','catch','params','includeAll','options','find','create','body','update','destroy','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/environment','../../mysqldb','json','count','offset','limit','status','set','apply','reject','then','end','sendStatus','stack','name','send','index','rawAttributes','model','query','keys','filters','intersection'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x0182,0x18a));var _0x2018=function(_0x17c8cc,_0x5e5647){_0x17c8cc=_0x17c8cc-0x0;var _0x3db4eb=_0x0182[_0x17c8cc];return _0x3db4eb;};'use strict';var pdf=require(_0x2018('0x0'));var emlformat=require(_0x2018('0x1'));var rimraf=require(_0x2018('0x2'));var zipdir=require(_0x2018('0x3'));var jsonpatch=require(_0x2018('0x4'));var rp=require(_0x2018('0x5'));var moment=require(_0x2018('0x6'));var BPromise=require(_0x2018('0x7'));var Mustache=require('mustache');var util=require(_0x2018('0x8'));var path=require('path');var sox=require(_0x2018('0x9'));var csv=require('to-csv');var ejs=require(_0x2018('0xa'));var fs=require('fs');var _=require(_0x2018('0xb'));var squel=require(_0x2018('0xc'));var crypto=require(_0x2018('0xd'));var jsforce=require(_0x2018('0xe'));var deskjs=require(_0x2018('0xf'));var toCsv=require(_0x2018('0x10'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x2018('0x11'));var Redis=require(_0x2018('0x12'));var qs=require(_0x2018('0x13'));var logger=require('../../config/logger')(_0x2018('0x14'));var utils=require('../../config/utils');var config=require(_0x2018('0x15'));var db=require(_0x2018('0x16'))['db'];function respondWithStatusCode(_0x241c55,_0x4bbea9){_0x4bbea9=_0x4bbea9||0xcc;return function(_0x51e80c){if(_0x51e80c){return _0x241c55['sendStatus'](_0x4bbea9);}return _0x241c55['status'](_0x4bbea9)['end']();};}function respondWithResult(_0x4b79c9,_0x52f0a3){_0x52f0a3=_0x52f0a3||0xc8;return function(_0x4e15f9){if(_0x4e15f9){return _0x4b79c9['status'](_0x52f0a3)[_0x2018('0x17')](_0x4e15f9);}};}function respondWithFilteredResult(_0x1d992e,_0x367070){return function(_0x2134db){if(_0x2134db){var _0x2ee467=_0x2134db[_0x2018('0x18')],_0x47d4fb=_0x367070[_0x2018('0x19')],_0x3f7194=_0x367070[_0x2018('0x19')]+_0x367070[_0x2018('0x1a')],_0x39d2a6;if(_0x3f7194>=_0x2ee467){_0x3f7194=_0x2ee467;_0x39d2a6=0xc8;}else{_0x39d2a6=0xce;}_0x1d992e[_0x2018('0x1b')](_0x39d2a6);return _0x1d992e[_0x2018('0x1c')]('Content-Range',_0x47d4fb+'-'+_0x3f7194+'/'+_0x2ee467)['json'](_0x2134db);}return null;};}function patchUpdates(_0x220386){return function(_0xecf6ff){try{jsonpatch[_0x2018('0x1d')](_0xecf6ff,_0x220386,!![]);}catch(_0x169296){return BPromise[_0x2018('0x1e')](_0x169296);}return _0xecf6ff['save']();};}function saveUpdates(_0x4062f5,_0x5d2bb7){return function(_0x5ea914){if(_0x5ea914){return _0x5ea914['update'](_0x4062f5)[_0x2018('0x1f')](function(_0x4b665e){return _0x4b665e;});}return null;};}function removeEntity(_0x1ff897,_0x323d1d){return function(_0x293105){if(_0x293105){return _0x293105['destroy']()[_0x2018('0x1f')](function(){_0x1ff897[_0x2018('0x1b')](0xcc)[_0x2018('0x20')]();});}};}function handleEntityNotFound(_0x4a426b,_0x682e35){return function(_0x23249c){if(!_0x23249c){_0x4a426b[_0x2018('0x21')](0x194);}return _0x23249c;};}function handleError(_0x420201,_0x2ed644){_0x2ed644=_0x2ed644||0x1f4;return function(_0x2bf6df){logger['error'](_0x2bf6df[_0x2018('0x22')]);if(_0x2bf6df[_0x2018('0x23')]){delete _0x2bf6df[_0x2018('0x23')];}_0x420201[_0x2018('0x1b')](_0x2ed644)[_0x2018('0x24')](_0x2bf6df);};}exports[_0x2018('0x25')]=function(_0x67ec31,_0x566a02){var _0x1c1bd0={},_0x5f14ea={},_0xb63f99={'count':0x0,'rows':[]};var _0x2e3ede=db['AnalyticTreeReport'][_0x2018('0x26')];_0x5f14ea[_0x2018('0x27')]=_['keys'](_0x2e3ede);_0x5f14ea[_0x2018('0x28')]=_[_0x2018('0x29')](_0x67ec31[_0x2018('0x28')]);_0x5f14ea[_0x2018('0x2a')]=_[_0x2018('0x2b')](_0x5f14ea['model'],_0x5f14ea[_0x2018('0x28')]);_0x1c1bd0[_0x2018('0x2c')]=_[_0x2018('0x2b')](_0x5f14ea[_0x2018('0x27')],qs[_0x2018('0x2d')](_0x67ec31[_0x2018('0x28')][_0x2018('0x2d')]));_0x1c1bd0['attributes']=_0x1c1bd0['attributes'][_0x2018('0x2e')]?_0x1c1bd0[_0x2018('0x2c')]:_0x5f14ea[_0x2018('0x27')];if(!_0x67ec31[_0x2018('0x28')][_0x2018('0x2f')](_0x2018('0x30'))){_0x1c1bd0[_0x2018('0x1a')]=qs[_0x2018('0x1a')](_0x67ec31[_0x2018('0x28')][_0x2018('0x1a')]);_0x1c1bd0['offset']=qs[_0x2018('0x19')](_0x67ec31[_0x2018('0x28')]['offset']);}_0x1c1bd0[_0x2018('0x31')]=qs[_0x2018('0x32')](_0x67ec31['query']['sort']);_0x1c1bd0['where']=qs['filters'](_[_0x2018('0x33')](_0x67ec31[_0x2018('0x28')],_0x5f14ea[_0x2018('0x2a')]));if(_0x67ec31[_0x2018('0x28')]['filter']){_0x1c1bd0[_0x2018('0x34')]=_[_0x2018('0x35')](_0x1c1bd0['where'],{'$or':_[_0x2018('0x36')](_0x2e3ede,function(_0x19d1fe){if(_0x19d1fe[_0x2018('0x37')][_0x2018('0x38')]!==_0x2018('0x39')){var _0x5823f5={};_0x5823f5[_0x19d1fe[_0x2018('0x3a')]]={'$like':'%'+_0x67ec31['query'][_0x2018('0x3b')]+'%'};return _0x5823f5;}})});}_0x1c1bd0=_['merge']({},_0x1c1bd0,_0x67ec31['options']);var _0x460be0={'where':_0x1c1bd0[_0x2018('0x34')]};return db[_0x2018('0x3c')][_0x2018('0x18')](_0x460be0)[_0x2018('0x1f')](function(_0x523f22){_0xb63f99[_0x2018('0x18')]=_0x523f22;if(_0x67ec31[_0x2018('0x28')]['includeAll']){_0x1c1bd0[_0x2018('0x3d')]=[{'all':!![]}];}return db['AnalyticTreeReport'][_0x2018('0x3e')](_0x1c1bd0);})[_0x2018('0x1f')](function(_0x694512){_0xb63f99[_0x2018('0x3f')]=_0x694512;return _0xb63f99;})[_0x2018('0x1f')](respondWithFilteredResult(_0x566a02,_0x1c1bd0))[_0x2018('0x40')](handleError(_0x566a02,null));};exports['show']=function(_0x435ad3,_0x2ac3cf){var _0x3edb11={'raw':!![],'where':{'id':_0x435ad3[_0x2018('0x41')]['id']}},_0x27dd94={};_0x27dd94[_0x2018('0x27')]=_['keys'](db['AnalyticTreeReport'][_0x2018('0x26')]);_0x27dd94[_0x2018('0x28')]=_[_0x2018('0x29')](_0x435ad3[_0x2018('0x28')]);_0x27dd94[_0x2018('0x2a')]=_[_0x2018('0x2b')](_0x27dd94['model'],_0x27dd94[_0x2018('0x28')]);_0x3edb11['attributes']=_[_0x2018('0x2b')](_0x27dd94['model'],qs[_0x2018('0x2d')](_0x435ad3[_0x2018('0x28')]['fields']));_0x3edb11[_0x2018('0x2c')]=_0x3edb11[_0x2018('0x2c')][_0x2018('0x2e')]?_0x3edb11[_0x2018('0x2c')]:_0x27dd94[_0x2018('0x27')];if(_0x435ad3[_0x2018('0x28')][_0x2018('0x42')]){_0x3edb11[_0x2018('0x3d')]=[{'all':!![]}];}_0x3edb11=_[_0x2018('0x35')]({},_0x3edb11,_0x435ad3[_0x2018('0x43')]);return db[_0x2018('0x3c')][_0x2018('0x44')](_0x3edb11)[_0x2018('0x1f')](handleEntityNotFound(_0x2ac3cf,null))[_0x2018('0x1f')](respondWithResult(_0x2ac3cf,null))[_0x2018('0x40')](handleError(_0x2ac3cf,null));};exports[_0x2018('0x45')]=function(_0x14f320,_0x8ed0df){return db[_0x2018('0x3c')][_0x2018('0x45')](_0x14f320[_0x2018('0x46')],{})[_0x2018('0x1f')](respondWithResult(_0x8ed0df,0xc9))['catch'](handleError(_0x8ed0df,null));};exports[_0x2018('0x47')]=function(_0x116474,_0x3109a5){if(_0x116474[_0x2018('0x46')]['id']){delete _0x116474[_0x2018('0x46')]['id'];}return db['AnalyticTreeReport'][_0x2018('0x44')]({'where':{'id':_0x116474[_0x2018('0x41')]['id']}})[_0x2018('0x1f')](handleEntityNotFound(_0x3109a5,null))[_0x2018('0x1f')](saveUpdates(_0x116474['body'],null))[_0x2018('0x1f')](respondWithResult(_0x3109a5,null))[_0x2018('0x40')](handleError(_0x3109a5,null));};exports[_0x2018('0x48')]=function(_0x96d3db,_0x4d4aae){return db['AnalyticTreeReport'][_0x2018('0x44')]({'where':{'id':_0x96d3db[_0x2018('0x41')]['id']}})[_0x2018('0x1f')](handleEntityNotFound(_0x4d4aae,null))['then'](removeEntity(_0x4d4aae,null))[_0x2018('0x40')](handleError(_0x4d4aae,null));};
\ No newline at end of file
index 39b398b..bfcbdb8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc2ef=['moment','bluebird','request-promise','./analyticTreeReport.attributes','exports','define','lodash','util','../../config/logger'];(function(_0xb4353c,_0x2e59b6){var _0x8a8680=function(_0x136070){while(--_0x136070){_0xb4353c['push'](_0xb4353c['shift']());}};_0x8a8680(++_0x2e59b6);}(_0xc2ef,0x9f));var _0xfc2e=function(_0x5b3474,_0x4c5318){_0x5b3474=_0x5b3474-0x0;var _0x10c0d5=_0xc2ef[_0x5b3474];return _0x10c0d5;};'use strict';var _=require(_0xfc2e('0x0'));var util=require(_0xfc2e('0x1'));var logger=require(_0xfc2e('0x2'))('api');var moment=require(_0xfc2e('0x3'));var BPromise=require(_0xfc2e('0x4'));var rp=require(_0xfc2e('0x5'));var attributes=require(_0xfc2e('0x6'));module[_0xfc2e('0x7')]=function(_0x29c3e7,_0x2076ea){return _0x29c3e7[_0xfc2e('0x8')]('AnalyticTreeReport',attributes,{'tableName':'analytics_report_trees','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe7db=['exports','define','AnalyticTreeReport','analytics_report_trees','lodash','util','api','moment','request-promise','./analyticTreeReport.attributes'];(function(_0x5cf7dc,_0x45d005){var _0x1fba32=function(_0xa8da84){while(--_0xa8da84){_0x5cf7dc['push'](_0x5cf7dc['shift']());}};_0x1fba32(++_0x45d005);}(_0xe7db,0x108));var _0xbe7d=function(_0x22205c,_0x473493){_0x22205c=_0x22205c-0x0;var _0x3f5efe=_0xe7db[_0x22205c];return _0x3f5efe;};'use strict';var _=require(_0xbe7d('0x0'));var util=require(_0xbe7d('0x1'));var logger=require('../../config/logger')(_0xbe7d('0x2'));var moment=require(_0xbe7d('0x3'));var BPromise=require('bluebird');var rp=require(_0xbe7d('0x4'));var attributes=require(_0xbe7d('0x5'));module[_0xbe7d('0x6')]=function(_0x5879f6,_0x11237d){return _0x5879f6[_0xbe7d('0x7')](_0xbe7d('0x8'),attributes,{'tableName':_0xbe7d('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 31d561a..74a5f71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6dcb=['result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','info','AnalyticTreeReport,\x20%s,\x20%s','AnalyticTreeReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message'];(function(_0x10f3db,_0x54d266){var _0x102c46=function(_0x1267ff){while(--_0x1267ff){_0x10f3db['push'](_0x10f3db['shift']());}};_0x102c46(++_0x54d266);}(_0x6dcb,0x189));var _0xb6dc=function(_0x4385f6,_0x32cdf9){_0x4385f6=_0x4385f6-0x0;var _0x2b3dc2=_0x6dcb[_0x4385f6];return _0x2b3dc2;};'use strict';var _=require(_0xb6dc('0x0'));var util=require(_0xb6dc('0x1'));var moment=require(_0xb6dc('0x2'));var BPromise=require(_0xb6dc('0x3'));var rs=require(_0xb6dc('0x4'));var fs=require('fs');var Redis=require(_0xb6dc('0x5'));var db=require(_0xb6dc('0x6'))['db'];var utils=require(_0xb6dc('0x7'));var logger=require('../../config/logger')(_0xb6dc('0x8'));var config=require(_0xb6dc('0x9'));var jayson=require(_0xb6dc('0xa'));var client=jayson[_0xb6dc('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x14f281,_0x1070ac,_0x1d9bf4){return new BPromise(function(_0x2db9cb,_0x385a52){return client[_0xb6dc('0xc')](_0x14f281,_0x1d9bf4)['then'](function(_0x412551){logger[_0xb6dc('0xd')](_0xb6dc('0xe'),_0x1070ac,'request\x20sent');logger['debug'](_0xb6dc('0xf'),_0x1070ac,_0xb6dc('0x10'),JSON[_0xb6dc('0x11')](_0x412551));if(_0x412551[_0xb6dc('0x12')]){if(_0x412551['error'][_0xb6dc('0x13')]===0x1f4){logger[_0xb6dc('0x12')](_0xb6dc('0xe'),_0x1070ac,_0x412551[_0xb6dc('0x12')]['message']);return _0x385a52(_0x412551[_0xb6dc('0x12')][_0xb6dc('0x14')]);}logger[_0xb6dc('0x12')]('AnalyticTreeReport,\x20%s,\x20%s',_0x1070ac,_0x412551[_0xb6dc('0x12')][_0xb6dc('0x14')]);return _0x2db9cb(_0x412551[_0xb6dc('0x12')][_0xb6dc('0x14')]);}else{logger[_0xb6dc('0xd')](_0xb6dc('0xe'),_0x1070ac,_0xb6dc('0x10'));_0x2db9cb(_0x412551[_0xb6dc('0x15')][_0xb6dc('0x14')]);}})[_0xb6dc('0x16')](function(_0x66e37f){logger[_0xb6dc('0x12')]('AnalyticTreeReport,\x20%s,\x20%s',_0x1070ac,_0x66e37f);_0x385a52(_0x66e37f);});});}
\ No newline at end of file
+var _0x01a4=['stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','AnalyticTreeReport,\x20%s,\x20%s','request\x20sent','debug','AnalyticTreeReport,\x20%s,\x20%s,\x20%s'];(function(_0x28dc36,_0xc45d91){var _0x2b3617=function(_0x34f03a){while(--_0x34f03a){_0x28dc36['push'](_0x28dc36['shift']());}};_0x2b3617(++_0xc45d91);}(_0x01a4,0x13e));var _0x401a=function(_0x3e6d5d,_0x264c7a){_0x3e6d5d=_0x3e6d5d-0x0;var _0x238923=_0x01a4[_0x3e6d5d];return _0x238923;};'use strict';var _=require(_0x401a('0x0'));var util=require(_0x401a('0x1'));var moment=require(_0x401a('0x2'));var BPromise=require(_0x401a('0x3'));var rs=require(_0x401a('0x4'));var fs=require('fs');var Redis=require(_0x401a('0x5'));var db=require(_0x401a('0x6'))['db'];var utils=require(_0x401a('0x7'));var logger=require(_0x401a('0x8'))(_0x401a('0x9'));var config=require(_0x401a('0xa'));var jayson=require(_0x401a('0xb'));var client=jayson[_0x401a('0xc')][_0x401a('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x30ac3a,_0xd75884,_0x3b2b1f){return new BPromise(function(_0x404c3b,_0x352b37){return client['request'](_0x30ac3a,_0x3b2b1f)[_0x401a('0xe')](function(_0x4c8119){logger[_0x401a('0xf')](_0x401a('0x10'),_0xd75884,_0x401a('0x11'));logger[_0x401a('0x12')](_0x401a('0x13'),_0xd75884,_0x401a('0x11'),JSON[_0x401a('0x14')](_0x4c8119));if(_0x4c8119[_0x401a('0x15')]){if(_0x4c8119[_0x401a('0x15')][_0x401a('0x16')]===0x1f4){logger['error'](_0x401a('0x10'),_0xd75884,_0x4c8119[_0x401a('0x15')][_0x401a('0x17')]);return _0x352b37(_0x4c8119[_0x401a('0x15')][_0x401a('0x17')]);}logger[_0x401a('0x15')](_0x401a('0x10'),_0xd75884,_0x4c8119[_0x401a('0x15')][_0x401a('0x17')]);return _0x404c3b(_0x4c8119[_0x401a('0x15')][_0x401a('0x17')]);}else{logger['info'](_0x401a('0x10'),_0xd75884,_0x401a('0x11'));_0x404c3b(_0x4c8119[_0x401a('0x18')]['message']);}})[_0x401a('0x19')](function(_0x1669c6){logger[_0x401a('0x15')](_0x401a('0x10'),_0xd75884,_0x1669c6);_0x352b37(_0x1669c6);});});}
\ No newline at end of file
index 99d0780..8a0855f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe731=['put','update','delete','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./analyticTreeReport.controller','get','isAuthenticated','index','/:id','show','post','create'];(function(_0x32b993,_0x1c5989){var _0x482780=function(_0x404179){while(--_0x404179){_0x32b993['push'](_0x32b993['shift']());}};_0x482780(++_0x1c5989);}(_0xe731,0x193));var _0x1e73=function(_0x197fd4,_0x21a08){_0x197fd4=_0x197fd4-0x0;var _0x34a04a=_0xe731[_0x197fd4];return _0x34a04a;};'use strict';var multer=require(_0x1e73('0x0'));var util=require(_0x1e73('0x1'));var path=require('path');var timeout=require(_0x1e73('0x2'));var express=require(_0x1e73('0x3'));var router=express[_0x1e73('0x4')]();var auth=require(_0x1e73('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x1e73('0x6'));var controller=require(_0x1e73('0x7'));router[_0x1e73('0x8')]('/',auth[_0x1e73('0x9')](),controller[_0x1e73('0xa')]);router[_0x1e73('0x8')](_0x1e73('0xb'),auth[_0x1e73('0x9')](),controller[_0x1e73('0xc')]);router[_0x1e73('0xd')]('/',auth[_0x1e73('0x9')](),controller[_0x1e73('0xe')]);router[_0x1e73('0xf')](_0x1e73('0xb'),auth['isAuthenticated'](),controller[_0x1e73('0x10')]);router[_0x1e73('0x11')]('/:id',auth[_0x1e73('0x9')](),controller['destroy']);module[_0x1e73('0x12')]=router;
\ No newline at end of file
+var _0xc6df=['delete','destroy','exports','multer','util','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./analyticTreeReport.controller','get','isAuthenticated','index','/:id','show','create','put','update'];(function(_0x3452f5,_0x266c12){var _0x3ce340=function(_0x3ec58f){while(--_0x3ec58f){_0x3452f5['push'](_0x3452f5['shift']());}};_0x3ce340(++_0x266c12);}(_0xc6df,0x1a5));var _0xfc6d=function(_0x406b57,_0x54510f){_0x406b57=_0x406b57-0x0;var _0x3ad17f=_0xc6df[_0x406b57];return _0x3ad17f;};'use strict';var multer=require(_0xfc6d('0x0'));var util=require(_0xfc6d('0x1'));var path=require('path');var timeout=require(_0xfc6d('0x2'));var express=require(_0xfc6d('0x3'));var router=express[_0xfc6d('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xfc6d('0x5'));var config=require(_0xfc6d('0x6'));var controller=require(_0xfc6d('0x7'));router[_0xfc6d('0x8')]('/',auth[_0xfc6d('0x9')](),controller[_0xfc6d('0xa')]);router['get'](_0xfc6d('0xb'),auth[_0xfc6d('0x9')](),controller[_0xfc6d('0xc')]);router['post']('/',auth[_0xfc6d('0x9')](),controller[_0xfc6d('0xd')]);router[_0xfc6d('0xe')]('/:id',auth[_0xfc6d('0x9')](),controller[_0xfc6d('0xf')]);router[_0xfc6d('0x10')](_0xfc6d('0xb'),auth[_0xfc6d('0x9')](),controller[_0xfc6d('0x11')]);module[_0xfc6d('0x12')]=router;
\ No newline at end of file
index fa1a124..b6e2efa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2649=['exports','STRING'];(function(_0x1f581e,_0x29d222){var _0x26992f=function(_0x368026){while(--_0x368026){_0x1f581e['push'](_0x1f581e['shift']());}};_0x26992f(++_0x29d222);}(_0x2649,0x180));var _0x9264=function(_0x12fc8d,_0x19ee33){_0x12fc8d=_0x12fc8d-0x0;var _0x3f9d04=_0x2649[_0x12fc8d];return _0x3f9d04;};'use strict';var Sequelize=require('sequelize');module[_0x9264('0x0')]={'name':{'type':Sequelize['STRING']},'basename':{'type':Sequelize[_0x9264('0x1')]},'type':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x77cd=['exports','STRING'];(function(_0x471005,_0x5f1696){var _0x206d73=function(_0x15000b){while(--_0x15000b){_0x471005['push'](_0x471005['shift']());}};_0x206d73(++_0x5f1696);}(_0x77cd,0xd2));var _0xd77c=function(_0x42678b,_0x1ce9cc){_0x42678b=_0x42678b-0x0;var _0x1d899f=_0x77cd[_0x42678b];return _0x1d899f;};'use strict';var Sequelize=require('sequelize');module[_0xd77c('0x0')]={'name':{'type':Sequelize[_0xd77c('0x1')]},'basename':{'type':Sequelize[_0xd77c('0x1')]},'type':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 1655c27..c8ce43e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xddb3=['index','Attachment','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','VIRTUAL','field','includeAll','include','findAll','catch','params','length','options','body','create','file','originalname','basename','filename','type','mimetype','findOne','download','join','server/files/attachments/','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','name'];(function(_0x174308,_0x361b54){var _0x377144=function(_0x2d4bfa){while(--_0x2d4bfa){_0x174308['push'](_0x174308['shift']());}};_0x377144(++_0x361b54);}(_0xddb3,0x112));var _0x3ddb=function(_0x1d6b78,_0x544cb3){_0x1d6b78=_0x1d6b78-0x0;var _0x23f59d=_0xddb3[_0x1d6b78];return _0x23f59d;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x3ddb('0x0'));var rimraf=require(_0x3ddb('0x1'));var zipdir=require(_0x3ddb('0x2'));var jsonpatch=require(_0x3ddb('0x3'));var rp=require(_0x3ddb('0x4'));var moment=require('moment');var BPromise=require(_0x3ddb('0x5'));var Mustache=require('mustache');var util=require(_0x3ddb('0x6'));var path=require(_0x3ddb('0x7'));var sox=require(_0x3ddb('0x8'));var csv=require('to-csv');var ejs=require(_0x3ddb('0x9'));var fs=require('fs');var _=require(_0x3ddb('0xa'));var squel=require(_0x3ddb('0xb'));var crypto=require(_0x3ddb('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x3ddb('0xd'));var toCsv=require(_0x3ddb('0xe'));var querystring=require(_0x3ddb('0xf'));var Papa=require(_0x3ddb('0x10'));var authService=require(_0x3ddb('0x11'));var hardwareService=require(_0x3ddb('0x12'));var Redis=require(_0x3ddb('0x13'));var qs=require(_0x3ddb('0x14'));var logger=require(_0x3ddb('0x15'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x32f9da,_0x509f27){_0x509f27=_0x509f27||0xcc;return function(_0x5bcb45){if(_0x5bcb45){return _0x32f9da[_0x3ddb('0x16')](_0x509f27);}return _0x32f9da['status'](_0x509f27)[_0x3ddb('0x17')]();};}function respondWithResult(_0x4282da,_0x3c352a){_0x3c352a=_0x3c352a||0xc8;return function(_0x9784cf){if(_0x9784cf){return _0x4282da[_0x3ddb('0x18')](_0x3c352a)[_0x3ddb('0x19')](_0x9784cf);}};}function respondWithFilteredResult(_0x5f7998,_0x165b4a){return function(_0x587cc9){if(_0x587cc9){var _0x5b26c3=_0x587cc9[_0x3ddb('0x1a')],_0x18ea8d=_0x165b4a[_0x3ddb('0x1b')],_0xb67774=_0x165b4a[_0x3ddb('0x1b')]+_0x165b4a[_0x3ddb('0x1c')],_0x23c8c6;if(_0xb67774>=_0x5b26c3){_0xb67774=_0x5b26c3;_0x23c8c6=0xc8;}else{_0x23c8c6=0xce;}_0x5f7998['status'](_0x23c8c6);return _0x5f7998[_0x3ddb('0x1d')](_0x3ddb('0x1e'),_0x18ea8d+'-'+_0xb67774+'/'+_0x5b26c3)[_0x3ddb('0x19')](_0x587cc9);}return null;};}function patchUpdates(_0x755d31){return function(_0x5786bf){try{jsonpatch[_0x3ddb('0x1f')](_0x5786bf,_0x755d31,!![]);}catch(_0x463f10){return BPromise[_0x3ddb('0x20')](_0x463f10);}return _0x5786bf['save']();};}function saveUpdates(_0x6ad1fc,_0x366d3b){return function(_0x26c360){if(_0x26c360){return _0x26c360[_0x3ddb('0x21')](_0x6ad1fc)[_0x3ddb('0x22')](function(_0x4815fa){return _0x4815fa;});}return null;};}function removeEntity(_0x7f92da,_0x493d02){return function(_0x35cbf8){if(_0x35cbf8){return _0x35cbf8[_0x3ddb('0x23')]()['then'](function(){_0x7f92da['status'](0xcc)[_0x3ddb('0x17')]();});}};}function handleEntityNotFound(_0x20af79,_0x3b9fc9){return function(_0x277948){if(!_0x277948){_0x20af79[_0x3ddb('0x16')](0x194);}return _0x277948;};}function handleError(_0x1aa792,_0x3fe0dd){_0x3fe0dd=_0x3fe0dd||0x1f4;return function(_0x2005c7){logger[_0x3ddb('0x24')](_0x2005c7['stack']);if(_0x2005c7['name']){delete _0x2005c7[_0x3ddb('0x25')];}_0x1aa792[_0x3ddb('0x18')](_0x3fe0dd)['send'](_0x2005c7);};}exports[_0x3ddb('0x26')]=function(_0x2ec05b,_0x143514){var _0x3aac36={},_0x567257={},_0x36e62f={'count':0x0,'rows':[]};var _0xd41dd7=db[_0x3ddb('0x27')][_0x3ddb('0x28')];_0x567257[_0x3ddb('0x29')]=_[_0x3ddb('0x2a')](_0xd41dd7);_0x567257['query']=_[_0x3ddb('0x2a')](_0x2ec05b[_0x3ddb('0x2b')]);_0x567257[_0x3ddb('0x2c')]=_[_0x3ddb('0x2d')](_0x567257[_0x3ddb('0x29')],_0x567257[_0x3ddb('0x2b')]);_0x3aac36[_0x3ddb('0x2e')]=_[_0x3ddb('0x2d')](_0x567257['model'],qs[_0x3ddb('0x2f')](_0x2ec05b[_0x3ddb('0x2b')][_0x3ddb('0x2f')]));_0x3aac36[_0x3ddb('0x2e')]=_0x3aac36[_0x3ddb('0x2e')]['length']?_0x3aac36[_0x3ddb('0x2e')]:_0x567257['model'];if(!_0x2ec05b[_0x3ddb('0x2b')][_0x3ddb('0x30')](_0x3ddb('0x31'))){_0x3aac36[_0x3ddb('0x1c')]=qs[_0x3ddb('0x1c')](_0x2ec05b[_0x3ddb('0x2b')][_0x3ddb('0x1c')]);_0x3aac36[_0x3ddb('0x1b')]=qs['offset'](_0x2ec05b[_0x3ddb('0x2b')][_0x3ddb('0x1b')]);}_0x3aac36[_0x3ddb('0x32')]=qs[_0x3ddb('0x33')](_0x2ec05b[_0x3ddb('0x2b')][_0x3ddb('0x33')]);_0x3aac36[_0x3ddb('0x34')]=qs['filters'](_[_0x3ddb('0x35')](_0x2ec05b['query'],_0x567257[_0x3ddb('0x2c')]));if(_0x2ec05b[_0x3ddb('0x2b')][_0x3ddb('0x36')]){_0x3aac36[_0x3ddb('0x34')]=_[_0x3ddb('0x37')](_0x3aac36[_0x3ddb('0x34')],{'$or':_[_0x3ddb('0x38')](_0xd41dd7,function(_0x33123){if(_0x33123['type']['key']!==_0x3ddb('0x39')){var _0x2056fe={};_0x2056fe[_0x33123[_0x3ddb('0x3a')]]={'$like':'%'+_0x2ec05b[_0x3ddb('0x2b')][_0x3ddb('0x36')]+'%'};return _0x2056fe;}})});}_0x3aac36=_[_0x3ddb('0x37')]({},_0x3aac36,_0x2ec05b['options']);var _0xc27333={'where':_0x3aac36[_0x3ddb('0x34')]};return db[_0x3ddb('0x27')][_0x3ddb('0x1a')](_0xc27333)[_0x3ddb('0x22')](function(_0x31bb00){_0x36e62f[_0x3ddb('0x1a')]=_0x31bb00;if(_0x2ec05b['query'][_0x3ddb('0x3b')]){_0x3aac36[_0x3ddb('0x3c')]=[{'all':!![]}];}return db[_0x3ddb('0x27')][_0x3ddb('0x3d')](_0x3aac36);})[_0x3ddb('0x22')](function(_0x122bea){_0x36e62f['rows']=_0x122bea;return _0x36e62f;})['then'](respondWithFilteredResult(_0x143514,_0x3aac36))[_0x3ddb('0x3e')](handleError(_0x143514,null));};exports['show']=function(_0x1dc010,_0x292321){var _0x3ee082={'raw':!![],'where':{'id':_0x1dc010[_0x3ddb('0x3f')]['id']}},_0x4be1c9={};_0x4be1c9[_0x3ddb('0x29')]=_[_0x3ddb('0x2a')](db[_0x3ddb('0x27')][_0x3ddb('0x28')]);_0x4be1c9['query']=_['keys'](_0x1dc010[_0x3ddb('0x2b')]);_0x4be1c9[_0x3ddb('0x2c')]=_['intersection'](_0x4be1c9[_0x3ddb('0x29')],_0x4be1c9[_0x3ddb('0x2b')]);_0x3ee082[_0x3ddb('0x2e')]=_[_0x3ddb('0x2d')](_0x4be1c9[_0x3ddb('0x29')],qs['fields'](_0x1dc010[_0x3ddb('0x2b')]['fields']));_0x3ee082['attributes']=_0x3ee082['attributes'][_0x3ddb('0x40')]?_0x3ee082[_0x3ddb('0x2e')]:_0x4be1c9[_0x3ddb('0x29')];if(_0x1dc010[_0x3ddb('0x2b')][_0x3ddb('0x3b')]){_0x3ee082[_0x3ddb('0x3c')]=[{'all':!![]}];}_0x3ee082=_[_0x3ddb('0x37')]({},_0x3ee082,_0x1dc010[_0x3ddb('0x41')]);return db[_0x3ddb('0x27')]['find'](_0x3ee082)['then'](handleEntityNotFound(_0x292321,null))['then'](respondWithResult(_0x292321,null))[_0x3ddb('0x3e')](handleError(_0x292321,null));};exports[_0x3ddb('0x21')]=function(_0x74dd43,_0x3b5e52){if(_0x74dd43[_0x3ddb('0x42')]['id']){delete _0x74dd43[_0x3ddb('0x42')]['id'];}return db['Attachment']['find']({'where':{'id':_0x74dd43[_0x3ddb('0x3f')]['id']}})[_0x3ddb('0x22')](handleEntityNotFound(_0x3b5e52,null))[_0x3ddb('0x22')](saveUpdates(_0x74dd43[_0x3ddb('0x42')],null))[_0x3ddb('0x22')](respondWithResult(_0x3b5e52,null))[_0x3ddb('0x3e')](handleError(_0x3b5e52,null));};exports[_0x3ddb('0x23')]=function(_0x4f3fb4,_0x499c34){return db[_0x3ddb('0x27')]['find']({'where':{'id':_0x4f3fb4[_0x3ddb('0x3f')]['id']}})['then'](handleEntityNotFound(_0x499c34,null))[_0x3ddb('0x22')](removeEntity(_0x499c34,null))[_0x3ddb('0x3e')](handleError(_0x499c34,null));};exports[_0x3ddb('0x43')]=function(_0x5950b7,_0xda4913,_0x18d5cf){_0x5950b7[_0x3ddb('0x42')][_0x3ddb('0x25')]=_0x5950b7[_0x3ddb('0x44')][_0x3ddb('0x45')];_0x5950b7[_0x3ddb('0x42')][_0x3ddb('0x46')]=_0x5950b7['file'][_0x3ddb('0x47')];_0x5950b7[_0x3ddb('0x42')][_0x3ddb('0x48')]=_0x5950b7[_0x3ddb('0x44')][_0x3ddb('0x49')];return db['Attachment'][_0x3ddb('0x43')](_0x5950b7[_0x3ddb('0x42')])[_0x3ddb('0x22')](respondWithResult(_0xda4913,0xc9))['catch'](handleError(_0xda4913,null));};exports['download']=function(_0x4994cc,_0x2f4074,_0x3cf230){return db[_0x3ddb('0x27')][_0x3ddb('0x4a')]({'where':{'id':_0x4994cc[_0x3ddb('0x3f')]['id']},'raw':!![]})[_0x3ddb('0x22')](handleEntityNotFound(_0x2f4074,null))[_0x3ddb('0x22')](function(_0xa41068){if(_0xa41068){return _0x2f4074[_0x3ddb('0x4b')](path[_0x3ddb('0x4c')](config['root'],_0x3ddb('0x4d'),_0xa41068[_0x3ddb('0x46')]));}})['catch'](handleError(_0x2f4074,null));};
\ No newline at end of file
+var _0xa541=['save','destroy','then','stack','name','send','index','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','Attachment','findAll','rows','catch','show','params','intersection','update','body','find','create','file','originalname','basename','filename','mimetype','download','findOne','join','root','server/files/attachments/','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','../../components/auth/service','ioredis','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject'];(function(_0x167f1f,_0x156679){var _0x940f1c=function(_0x167927){while(--_0x167927){_0x167f1f['push'](_0x167f1f['shift']());}};_0x940f1c(++_0x156679);}(_0xa541,0x87));var _0x1a54=function(_0x107273,_0x4006bc){_0x107273=_0x107273-0x0;var _0x118868=_0xa541[_0x107273];return _0x118868;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x1a54('0x0'));var rimraf=require(_0x1a54('0x1'));var zipdir=require(_0x1a54('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x1a54('0x3'));var moment=require(_0x1a54('0x4'));var BPromise=require(_0x1a54('0x5'));var Mustache=require(_0x1a54('0x6'));var util=require(_0x1a54('0x7'));var path=require(_0x1a54('0x8'));var sox=require(_0x1a54('0x9'));var csv=require(_0x1a54('0xa'));var ejs=require(_0x1a54('0xb'));var fs=require('fs');var _=require(_0x1a54('0xc'));var squel=require(_0x1a54('0xd'));var crypto=require('crypto');var jsforce=require(_0x1a54('0xe'));var deskjs=require(_0x1a54('0xf'));var toCsv=require('to-csv');var querystring=require(_0x1a54('0x10'));var Papa=require('papaparse');var authService=require(_0x1a54('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x1a54('0x12'));var qs=require('../../components/parsers/qs');var logger=require(_0x1a54('0x13'))(_0x1a54('0x14'));var utils=require(_0x1a54('0x15'));var config=require(_0x1a54('0x16'));var db=require(_0x1a54('0x17'))['db'];function respondWithStatusCode(_0x326b0a,_0x4fcce8){_0x4fcce8=_0x4fcce8||0xcc;return function(_0x364c76){if(_0x364c76){return _0x326b0a[_0x1a54('0x18')](_0x4fcce8);}return _0x326b0a[_0x1a54('0x19')](_0x4fcce8)[_0x1a54('0x1a')]();};}function respondWithResult(_0x1930a6,_0x45619e){_0x45619e=_0x45619e||0xc8;return function(_0x12895d){if(_0x12895d){return _0x1930a6[_0x1a54('0x19')](_0x45619e)[_0x1a54('0x1b')](_0x12895d);}};}function respondWithFilteredResult(_0x1b1813,_0x56bddb){return function(_0x1528d3){if(_0x1528d3){var _0x5160b5=_0x1528d3[_0x1a54('0x1c')],_0x37cff2=_0x56bddb[_0x1a54('0x1d')],_0x3d93a6=_0x56bddb[_0x1a54('0x1d')]+_0x56bddb[_0x1a54('0x1e')],_0x199b89;if(_0x3d93a6>=_0x5160b5){_0x3d93a6=_0x5160b5;_0x199b89=0xc8;}else{_0x199b89=0xce;}_0x1b1813[_0x1a54('0x19')](_0x199b89);return _0x1b1813[_0x1a54('0x1f')](_0x1a54('0x20'),_0x37cff2+'-'+_0x3d93a6+'/'+_0x5160b5)[_0x1a54('0x1b')](_0x1528d3);}return null;};}function patchUpdates(_0x1e222b){return function(_0x2c5ff7){try{jsonpatch[_0x1a54('0x21')](_0x2c5ff7,_0x1e222b,!![]);}catch(_0x9ddf73){return BPromise[_0x1a54('0x22')](_0x9ddf73);}return _0x2c5ff7[_0x1a54('0x23')]();};}function saveUpdates(_0x4bd473,_0x123c01){return function(_0x13f864){if(_0x13f864){return _0x13f864['update'](_0x4bd473)['then'](function(_0x35f099){return _0x35f099;});}return null;};}function removeEntity(_0x267342,_0x3be827){return function(_0x346567){if(_0x346567){return _0x346567[_0x1a54('0x24')]()[_0x1a54('0x25')](function(){_0x267342['status'](0xcc)[_0x1a54('0x1a')]();});}};}function handleEntityNotFound(_0x4aaad1,_0x1b8679){return function(_0x20a5c8){if(!_0x20a5c8){_0x4aaad1[_0x1a54('0x18')](0x194);}return _0x20a5c8;};}function handleError(_0x53c123,_0x830ba7){_0x830ba7=_0x830ba7||0x1f4;return function(_0x2a734a){logger['error'](_0x2a734a[_0x1a54('0x26')]);if(_0x2a734a[_0x1a54('0x27')]){delete _0x2a734a['name'];}_0x53c123['status'](_0x830ba7)[_0x1a54('0x28')](_0x2a734a);};}exports[_0x1a54('0x29')]=function(_0x38c1e7,_0x17c008){var _0xc824fc={},_0x348a08={},_0x3da53e={'count':0x0,'rows':[]};var _0x368c29=db['Attachment'][_0x1a54('0x2a')];_0x348a08[_0x1a54('0x2b')]=_[_0x1a54('0x2c')](_0x368c29);_0x348a08[_0x1a54('0x2d')]=_[_0x1a54('0x2c')](_0x38c1e7['query']);_0x348a08[_0x1a54('0x2e')]=_['intersection'](_0x348a08['model'],_0x348a08[_0x1a54('0x2d')]);_0xc824fc[_0x1a54('0x2f')]=_['intersection'](_0x348a08[_0x1a54('0x2b')],qs[_0x1a54('0x30')](_0x38c1e7[_0x1a54('0x2d')][_0x1a54('0x30')]));_0xc824fc[_0x1a54('0x2f')]=_0xc824fc[_0x1a54('0x2f')][_0x1a54('0x31')]?_0xc824fc[_0x1a54('0x2f')]:_0x348a08[_0x1a54('0x2b')];if(!_0x38c1e7[_0x1a54('0x2d')][_0x1a54('0x32')]('nolimit')){_0xc824fc[_0x1a54('0x1e')]=qs[_0x1a54('0x1e')](_0x38c1e7[_0x1a54('0x2d')][_0x1a54('0x1e')]);_0xc824fc[_0x1a54('0x1d')]=qs['offset'](_0x38c1e7[_0x1a54('0x2d')][_0x1a54('0x1d')]);}_0xc824fc['order']=qs[_0x1a54('0x33')](_0x38c1e7[_0x1a54('0x2d')][_0x1a54('0x33')]);_0xc824fc[_0x1a54('0x34')]=qs[_0x1a54('0x2e')](_[_0x1a54('0x35')](_0x38c1e7[_0x1a54('0x2d')],_0x348a08['filters']));if(_0x38c1e7[_0x1a54('0x2d')][_0x1a54('0x36')]){_0xc824fc[_0x1a54('0x34')]=_[_0x1a54('0x37')](_0xc824fc['where'],{'$or':_[_0x1a54('0x38')](_0x368c29,function(_0x409662){if(_0x409662[_0x1a54('0x39')][_0x1a54('0x3a')]!==_0x1a54('0x3b')){var _0x57947a={};_0x57947a[_0x409662[_0x1a54('0x3c')]]={'$like':'%'+_0x38c1e7[_0x1a54('0x2d')][_0x1a54('0x36')]+'%'};return _0x57947a;}})});}_0xc824fc=_['merge']({},_0xc824fc,_0x38c1e7[_0x1a54('0x3d')]);var _0x1f5486={'where':_0xc824fc[_0x1a54('0x34')]};return db['Attachment'][_0x1a54('0x1c')](_0x1f5486)[_0x1a54('0x25')](function(_0x870e17){_0x3da53e['count']=_0x870e17;if(_0x38c1e7[_0x1a54('0x2d')][_0x1a54('0x3e')]){_0xc824fc[_0x1a54('0x3f')]=[{'all':!![]}];}return db[_0x1a54('0x40')][_0x1a54('0x41')](_0xc824fc);})[_0x1a54('0x25')](function(_0x39a2d3){_0x3da53e[_0x1a54('0x42')]=_0x39a2d3;return _0x3da53e;})[_0x1a54('0x25')](respondWithFilteredResult(_0x17c008,_0xc824fc))[_0x1a54('0x43')](handleError(_0x17c008,null));};exports[_0x1a54('0x44')]=function(_0x5b3025,_0x2dbc2a){var _0x33b398={'raw':!![],'where':{'id':_0x5b3025[_0x1a54('0x45')]['id']}},_0x1fce51={};_0x1fce51['model']=_[_0x1a54('0x2c')](db[_0x1a54('0x40')][_0x1a54('0x2a')]);_0x1fce51[_0x1a54('0x2d')]=_['keys'](_0x5b3025[_0x1a54('0x2d')]);_0x1fce51[_0x1a54('0x2e')]=_[_0x1a54('0x46')](_0x1fce51[_0x1a54('0x2b')],_0x1fce51[_0x1a54('0x2d')]);_0x33b398[_0x1a54('0x2f')]=_[_0x1a54('0x46')](_0x1fce51[_0x1a54('0x2b')],qs[_0x1a54('0x30')](_0x5b3025[_0x1a54('0x2d')]['fields']));_0x33b398[_0x1a54('0x2f')]=_0x33b398[_0x1a54('0x2f')][_0x1a54('0x31')]?_0x33b398['attributes']:_0x1fce51['model'];if(_0x5b3025[_0x1a54('0x2d')]['includeAll']){_0x33b398[_0x1a54('0x3f')]=[{'all':!![]}];}_0x33b398=_['merge']({},_0x33b398,_0x5b3025[_0x1a54('0x3d')]);return db[_0x1a54('0x40')]['find'](_0x33b398)[_0x1a54('0x25')](handleEntityNotFound(_0x2dbc2a,null))['then'](respondWithResult(_0x2dbc2a,null))['catch'](handleError(_0x2dbc2a,null));};exports[_0x1a54('0x47')]=function(_0x3f4114,_0x4ca9e2){if(_0x3f4114[_0x1a54('0x48')]['id']){delete _0x3f4114[_0x1a54('0x48')]['id'];}return db[_0x1a54('0x40')][_0x1a54('0x49')]({'where':{'id':_0x3f4114[_0x1a54('0x45')]['id']}})[_0x1a54('0x25')](handleEntityNotFound(_0x4ca9e2,null))[_0x1a54('0x25')](saveUpdates(_0x3f4114[_0x1a54('0x48')],null))[_0x1a54('0x25')](respondWithResult(_0x4ca9e2,null))[_0x1a54('0x43')](handleError(_0x4ca9e2,null));};exports[_0x1a54('0x24')]=function(_0x4df2bb,_0x17b6b5){return db[_0x1a54('0x40')][_0x1a54('0x49')]({'where':{'id':_0x4df2bb[_0x1a54('0x45')]['id']}})['then'](handleEntityNotFound(_0x17b6b5,null))[_0x1a54('0x25')](removeEntity(_0x17b6b5,null))[_0x1a54('0x43')](handleError(_0x17b6b5,null));};exports[_0x1a54('0x4a')]=function(_0x451601,_0xd33081,_0x34c03b){_0x451601[_0x1a54('0x48')][_0x1a54('0x27')]=_0x451601[_0x1a54('0x4b')][_0x1a54('0x4c')];_0x451601[_0x1a54('0x48')][_0x1a54('0x4d')]=_0x451601[_0x1a54('0x4b')][_0x1a54('0x4e')];_0x451601[_0x1a54('0x48')][_0x1a54('0x39')]=_0x451601['file'][_0x1a54('0x4f')];return db['Attachment'][_0x1a54('0x4a')](_0x451601[_0x1a54('0x48')])['then'](respondWithResult(_0xd33081,0xc9))[_0x1a54('0x43')](handleError(_0xd33081,null));};exports[_0x1a54('0x50')]=function(_0x6001c9,_0x5d6b36,_0x50b296){return db[_0x1a54('0x40')][_0x1a54('0x51')]({'where':{'id':_0x6001c9[_0x1a54('0x45')]['id']},'raw':!![]})[_0x1a54('0x25')](handleEntityNotFound(_0x5d6b36,null))[_0x1a54('0x25')](function(_0x7cbdd0){if(_0x7cbdd0){return _0x5d6b36['download'](path[_0x1a54('0x52')](config[_0x1a54('0x53')],_0x1a54('0x54'),_0x7cbdd0['basename']));}})[_0x1a54('0x43')](handleError(_0x5d6b36,null));};
\ No newline at end of file
index 3c15d93..a0d943c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7217=['lodash','../../config/logger','api','moment','bluebird','request-promise','define','Attachment','attachments'];(function(_0xd6f0e9,_0x1d8517){var _0x1e56d2=function(_0x9c3a53){while(--_0x9c3a53){_0xd6f0e9['push'](_0xd6f0e9['shift']());}};_0x1e56d2(++_0x1d8517);}(_0x7217,0x19e));var _0x7721=function(_0x47b58b,_0x41a189){_0x47b58b=_0x47b58b-0x0;var _0x46bebe=_0x7217[_0x47b58b];return _0x46bebe;};'use strict';var _=require(_0x7721('0x0'));var util=require('util');var logger=require(_0x7721('0x1'))(_0x7721('0x2'));var moment=require(_0x7721('0x3'));var BPromise=require(_0x7721('0x4'));var rp=require(_0x7721('0x5'));var attributes=require('./attachment.attributes');module['exports']=function(_0x472a96,_0xce17f9){return _0x472a96[_0x7721('0x6')](_0x7721('0x7'),attributes,{'tableName':_0x7721('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xabce=['./attachment.attributes','exports','Attachment','lodash','util','../../config/logger','api','moment'];(function(_0x310d08,_0x398c56){var _0x1e5976=function(_0x24bd56){while(--_0x24bd56){_0x310d08['push'](_0x310d08['shift']());}};_0x1e5976(++_0x398c56);}(_0xabce,0x103));var _0xeabc=function(_0x18cd5b,_0x10240b){_0x18cd5b=_0x18cd5b-0x0;var _0x5eaa52=_0xabce[_0x18cd5b];return _0x5eaa52;};'use strict';var _=require(_0xeabc('0x0'));var util=require(_0xeabc('0x1'));var logger=require(_0xeabc('0x2'))(_0xeabc('0x3'));var moment=require(_0xeabc('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xeabc('0x5'));module[_0xeabc('0x6')]=function(_0x1a88a7,_0x5e9e2d){return _0x1a88a7['define'](_0xeabc('0x7'),attributes,{'tableName':'attachments','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2ff56eb..d026f64 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca91=['request','info','Attachment,\x20%s,\x20%s','request\x20sent','debug','Attachment,\x20%s,\x20%s,\x20%s','stringify','error','message','CreateAttachment','Attachment','body','options','raw','then','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x3c4737,_0x2329ec){var _0x2bb926=function(_0x3b9605){while(--_0x3b9605){_0x3c4737['push'](_0x3c4737['shift']());}};_0x2bb926(++_0x2329ec);}(_0xca91,0x1d2));var _0x1ca9=function(_0x427d3a,_0x23724c){_0x427d3a=_0x427d3a-0x0;var _0xe5c521=_0xca91[_0x427d3a];return _0xe5c521;};'use strict';var _=require(_0x1ca9('0x0'));var util=require(_0x1ca9('0x1'));var moment=require(_0x1ca9('0x2'));var BPromise=require(_0x1ca9('0x3'));var rs=require(_0x1ca9('0x4'));var fs=require('fs');var Redis=require(_0x1ca9('0x5'));var db=require(_0x1ca9('0x6'))['db'];var utils=require(_0x1ca9('0x7'));var logger=require(_0x1ca9('0x8'))(_0x1ca9('0x9'));var config=require(_0x1ca9('0xa'));var jayson=require(_0x1ca9('0xb'));var client=jayson[_0x1ca9('0xc')][_0x1ca9('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x3471fe,_0x48a209,_0x41d468){return new BPromise(function(_0x1eb56b,_0x4e5483){return client[_0x1ca9('0xe')](_0x3471fe,_0x41d468)['then'](function(_0xd7d069){logger[_0x1ca9('0xf')](_0x1ca9('0x10'),_0x48a209,_0x1ca9('0x11'));logger[_0x1ca9('0x12')](_0x1ca9('0x13'),_0x48a209,'request\x20sent',JSON[_0x1ca9('0x14')](_0xd7d069));if(_0xd7d069['error']){if(_0xd7d069[_0x1ca9('0x15')]['code']===0x1f4){logger[_0x1ca9('0x15')](_0x1ca9('0x10'),_0x48a209,_0xd7d069['error'][_0x1ca9('0x16')]);return _0x4e5483(_0xd7d069['error'][_0x1ca9('0x16')]);}logger['error'](_0x1ca9('0x10'),_0x48a209,_0xd7d069[_0x1ca9('0x15')][_0x1ca9('0x16')]);return _0x1eb56b(_0xd7d069[_0x1ca9('0x15')][_0x1ca9('0x16')]);}else{logger[_0x1ca9('0xf')](_0x1ca9('0x10'),_0x48a209,_0x1ca9('0x11'));_0x1eb56b(_0xd7d069['result'][_0x1ca9('0x16')]);}})['catch'](function(_0x5a07ff){logger[_0x1ca9('0x15')](_0x1ca9('0x10'),_0x48a209,_0x5a07ff);_0x4e5483(_0x5a07ff);});});}exports[_0x1ca9('0x17')]=function(_0xe26b4e){var _0x3eedbf=this;return new Promise(function(_0xb8db41,_0x3ce9ae){return db[_0x1ca9('0x18')]['create'](_0xe26b4e[_0x1ca9('0x19')],{'raw':_0xe26b4e[_0x1ca9('0x1a')]?_0xe26b4e[_0x1ca9('0x1a')][_0x1ca9('0x1b')]===undefined?!![]:![]:!![]})[_0x1ca9('0x1c')](function(_0x11cee8){logger[_0x1ca9('0xf')](_0x1ca9('0x17'),_0xe26b4e);logger[_0x1ca9('0x12')](_0x1ca9('0x17'),_0xe26b4e,JSON['stringify'](_0x11cee8));_0xb8db41(_0x11cee8);})[_0x1ca9('0x1d')](function(_0x4022ef){logger[_0x1ca9('0x15')](_0x1ca9('0x17'),_0x4022ef[_0x1ca9('0x16')],_0xe26b4e);_0x3ce9ae(_0x3eedbf[_0x1ca9('0x15')](0x1f4,_0x4022ef[_0x1ca9('0x16')]));});});};
\ No newline at end of file
+var _0xf6f7=['lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','request\x20sent','debug','stringify','error','code','Attachment,\x20%s,\x20%s','message','result','catch','CreateAttachment','Attachment','create','body','options'];(function(_0x263898,_0x1c2199){var _0x1953b2=function(_0x4dc964){while(--_0x4dc964){_0x263898['push'](_0x263898['shift']());}};_0x1953b2(++_0x1c2199);}(_0xf6f7,0xae));var _0x7f6f=function(_0x5dbb84,_0x1bbce9){_0x5dbb84=_0x5dbb84-0x0;var _0x1d6eae=_0xf6f7[_0x5dbb84];return _0x1d6eae;};'use strict';var _=require(_0x7f6f('0x0'));var util=require(_0x7f6f('0x1'));var moment=require(_0x7f6f('0x2'));var BPromise=require(_0x7f6f('0x3'));var rs=require(_0x7f6f('0x4'));var fs=require('fs');var Redis=require(_0x7f6f('0x5'));var db=require(_0x7f6f('0x6'))['db'];var utils=require(_0x7f6f('0x7'));var logger=require(_0x7f6f('0x8'))('rpc');var config=require(_0x7f6f('0x9'));var jayson=require(_0x7f6f('0xa'));var client=jayson[_0x7f6f('0xb')][_0x7f6f('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x6d1ca8,_0x4eb08d,_0x2770bb){return new BPromise(function(_0x5547ee,_0x2bcbc9){return client[_0x7f6f('0xd')](_0x6d1ca8,_0x2770bb)['then'](function(_0x4b3896){logger[_0x7f6f('0xe')]('Attachment,\x20%s,\x20%s',_0x4eb08d,_0x7f6f('0xf'));logger[_0x7f6f('0x10')]('Attachment,\x20%s,\x20%s,\x20%s',_0x4eb08d,'request\x20sent',JSON[_0x7f6f('0x11')](_0x4b3896));if(_0x4b3896[_0x7f6f('0x12')]){if(_0x4b3896[_0x7f6f('0x12')][_0x7f6f('0x13')]===0x1f4){logger[_0x7f6f('0x12')](_0x7f6f('0x14'),_0x4eb08d,_0x4b3896[_0x7f6f('0x12')]['message']);return _0x2bcbc9(_0x4b3896[_0x7f6f('0x12')][_0x7f6f('0x15')]);}logger[_0x7f6f('0x12')](_0x7f6f('0x14'),_0x4eb08d,_0x4b3896[_0x7f6f('0x12')][_0x7f6f('0x15')]);return _0x5547ee(_0x4b3896['error'][_0x7f6f('0x15')]);}else{logger[_0x7f6f('0xe')](_0x7f6f('0x14'),_0x4eb08d,'request\x20sent');_0x5547ee(_0x4b3896[_0x7f6f('0x16')][_0x7f6f('0x15')]);}})[_0x7f6f('0x17')](function(_0x3664dd){logger[_0x7f6f('0x12')](_0x7f6f('0x14'),_0x4eb08d,_0x3664dd);_0x2bcbc9(_0x3664dd);});});}exports[_0x7f6f('0x18')]=function(_0xffac6){var _0x568fa0=this;return new Promise(function(_0x5eccb0,_0x4077a4){return db[_0x7f6f('0x19')][_0x7f6f('0x1a')](_0xffac6[_0x7f6f('0x1b')],{'raw':_0xffac6[_0x7f6f('0x1c')]?_0xffac6['options']['raw']===undefined?!![]:![]:!![]})['then'](function(_0x308019){logger[_0x7f6f('0xe')](_0x7f6f('0x18'),_0xffac6);logger[_0x7f6f('0x10')](_0x7f6f('0x18'),_0xffac6,JSON[_0x7f6f('0x11')](_0x308019));_0x5eccb0(_0x308019);})[_0x7f6f('0x17')](function(_0x475d58){logger[_0x7f6f('0x12')](_0x7f6f('0x18'),_0x475d58[_0x7f6f('0x15')],_0xffac6);_0x4077a4(_0x568fa0[_0x7f6f('0x12')](0x1f4,_0x475d58[_0x7f6f('0x15')]));});});};
\ No newline at end of file
index f5f6161..1fe9247 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2dae=['post','single','file','create','put','destroy','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./attachment.controller','get','isAuthenticated','/:id','show','/:id/download','download','diskStorage','join','root','server/files/attachments/','%s-%s','originalname','replace'];(function(_0x12a17c,_0x54d2c1){var _0x2b5648=function(_0x378afb){while(--_0x378afb){_0x12a17c['push'](_0x12a17c['shift']());}};_0x2b5648(++_0x54d2c1);}(_0x2dae,0xc3));var _0xe2da=function(_0x1992f1,_0x5c61f0){_0x1992f1=_0x1992f1-0x0;var _0x413dfe=_0x2dae[_0x1992f1];return _0x413dfe;};'use strict';var multer=require(_0xe2da('0x0'));var util=require('util');var path=require(_0xe2da('0x1'));var timeout=require(_0xe2da('0x2'));var express=require(_0xe2da('0x3'));var router=express[_0xe2da('0x4')]();var auth=require(_0xe2da('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xe2da('0x6'));var controller=require(_0xe2da('0x7'));router[_0xe2da('0x8')]('/',auth[_0xe2da('0x9')](),controller['index']);router[_0xe2da('0x8')](_0xe2da('0xa'),auth[_0xe2da('0x9')](),controller[_0xe2da('0xb')]);router[_0xe2da('0x8')](_0xe2da('0xc'),auth[_0xe2da('0x9')](),controller[_0xe2da('0xd')]);var upload=multer({'storage':multer[_0xe2da('0xe')]({'destination':function(_0x5a2fc5,_0x52e650,_0x3baaa8){_0x3baaa8(null,path[_0xe2da('0xf')](config[_0xe2da('0x10')],_0xe2da('0x11')));},'filename':function(_0x44ec3e,_0x1a29b9,_0x173244){_0x173244(null,util['format'](_0xe2da('0x12'),Date['now'](),_0x1a29b9[_0xe2da('0x13')][_0xe2da('0x14')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0xe2da('0x15')]('/',upload[_0xe2da('0x16')](_0xe2da('0x17')),controller[_0xe2da('0x18')]);router[_0xe2da('0x19')]('/:id',auth[_0xe2da('0x9')](),controller['update']);router['delete'](_0xe2da('0xa'),auth[_0xe2da('0x9')](),controller[_0xe2da('0x1a')]);module['exports']=router;
\ No newline at end of file
+var _0x18e0=['create','put','/:id','update','destroy','exports','util','connect-timeout','express','Router','../../components/interaction/service','get','isAuthenticated','index','show','/:id/download','download','diskStorage','join','format','%s-%s','now','originalname','replace','post','single'];(function(_0x2f9676,_0x36741c){var _0x38d663=function(_0x2cb041){while(--_0x2cb041){_0x2f9676['push'](_0x2f9676['shift']());}};_0x38d663(++_0x36741c);}(_0x18e0,0xa2));var _0x018e=function(_0x500419,_0x549162){_0x500419=_0x500419-0x0;var _0x241c1a=_0x18e0[_0x500419];return _0x241c1a;};'use strict';var multer=require('multer');var util=require(_0x018e('0x0'));var path=require('path');var timeout=require(_0x018e('0x1'));var express=require(_0x018e('0x2'));var router=express[_0x018e('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x018e('0x4'));var config=require('../../config/environment');var controller=require('./attachment.controller');router[_0x018e('0x5')]('/',auth[_0x018e('0x6')](),controller[_0x018e('0x7')]);router['get']('/:id',auth[_0x018e('0x6')](),controller[_0x018e('0x8')]);router['get'](_0x018e('0x9'),auth[_0x018e('0x6')](),controller[_0x018e('0xa')]);var upload=multer({'storage':multer[_0x018e('0xb')]({'destination':function(_0x20c76c,_0x53344a,_0x4e205a){_0x4e205a(null,path[_0x018e('0xc')](config['root'],'server/files/attachments/'));},'filename':function(_0x522de0,_0xa44f64,_0x2f61a0){_0x2f61a0(null,util[_0x018e('0xd')](_0x018e('0xe'),Date[_0x018e('0xf')](),_0xa44f64[_0x018e('0x10')][_0x018e('0x11')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x018e('0x12')]('/',upload[_0x018e('0x13')]('file'),controller[_0x018e('0x14')]);router[_0x018e('0x15')](_0x018e('0x16'),auth[_0x018e('0x6')](),controller[_0x018e('0x17')]);router['delete'](_0x018e('0x16'),auth[_0x018e('0x6')](),controller[_0x018e('0x18')]);module[_0x018e('0x19')]=router;
\ No newline at end of file
index b3abfd8..c243143 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed08=['user','then','catch','passport','passport-google-oauth20','Strategy','../../mysqldb','../../config/environment','../../components/auth/service','signToken','login','authenticate','google','/login','profile','callback','use','clientSecret','secret','callbackURL','User','find','map','emails','admin'];(function(_0x4491d9,_0x5856ec){var _0x3e9dba=function(_0x2a6302){while(--_0x2a6302){_0x4491d9['push'](_0x4491d9['shift']());}};_0x3e9dba(++_0x5856ec);}(_0xed08,0x67));var _0x8ed0=function(_0x49afa5,_0x1ec68f){_0x49afa5=_0x49afa5-0x0;var _0xd4ea0a=_0xed08[_0x49afa5];return _0xd4ea0a;};'use strict';var _=require('lodash');var passport=require(_0x8ed0('0x0'));var GoogleStrategy=require(_0x8ed0('0x1'))[_0x8ed0('0x2')];var db=require(_0x8ed0('0x3'))['db'];var config=require(_0x8ed0('0x4'));var signToken=require(_0x8ed0('0x5'))[_0x8ed0('0x6')];exports[_0x8ed0('0x7')]=passport[_0x8ed0('0x8')](_0x8ed0('0x9'),{'failureRedirect':_0x8ed0('0xa'),'scope':[_0x8ed0('0xb'),'email'],'session':![]});exports[_0x8ed0('0xc')]=passport[_0x8ed0('0x8')](_0x8ed0('0x9'),{'failureRedirect':_0x8ed0('0xa'),'session':![]});passport[_0x8ed0('0xd')](new GoogleStrategy({'clientID':config[_0x8ed0('0x9')]?config[_0x8ed0('0x9')]['clientID']:'id','clientSecret':config[_0x8ed0('0x9')]?config[_0x8ed0('0x9')][_0x8ed0('0xe')]:_0x8ed0('0xf'),'callbackURL':config['google']?config[_0x8ed0('0x9')][_0x8ed0('0x10')]:''},function(_0x1ab513,_0x3a48ff,_0x395384,_0x20b360){db[_0x8ed0('0x11')][_0x8ed0('0x12')]({'where':{'email':_[_0x8ed0('0x13')](_0x395384[_0x8ed0('0x14')],'value'),'role':{'$or':[_0x8ed0('0x15'),_0x8ed0('0x16'),'agent']}}})[_0x8ed0('0x17')](function(_0x2c38eb){if(_0x2c38eb){return _0x20b360(null,_0x2c38eb);}_0x20b360('Incorrect\x20username\x20and/or\x20password');})[_0x8ed0('0x18')](function(_0x21f4fd){_0x20b360(_0x21f4fd);});}));
\ No newline at end of file
+var _0x714c=['../../mysqldb','../../config/environment','signToken','login','/login','profile','email','callback','use','google','clientID','clientSecret','secret','User','map','emails','value','admin','agent','then','Incorrect\x20username\x20and/or\x20password','catch','passport','passport-google-oauth20','Strategy'];(function(_0x12cd8f,_0x597400){var _0xd454bc=function(_0x4c061c){while(--_0x4c061c){_0x12cd8f['push'](_0x12cd8f['shift']());}};_0xd454bc(++_0x597400);}(_0x714c,0x18d));var _0xc714=function(_0x5e5c4c,_0x21abba){_0x5e5c4c=_0x5e5c4c-0x0;var _0x176148=_0x714c[_0x5e5c4c];return _0x176148;};'use strict';var _=require('lodash');var passport=require(_0xc714('0x0'));var GoogleStrategy=require(_0xc714('0x1'))[_0xc714('0x2')];var db=require(_0xc714('0x3'))['db'];var config=require(_0xc714('0x4'));var signToken=require('../../components/auth/service')[_0xc714('0x5')];exports[_0xc714('0x6')]=passport['authenticate']('google',{'failureRedirect':_0xc714('0x7'),'scope':[_0xc714('0x8'),_0xc714('0x9')],'session':![]});exports[_0xc714('0xa')]=passport['authenticate']('google',{'failureRedirect':_0xc714('0x7'),'session':![]});passport[_0xc714('0xb')](new GoogleStrategy({'clientID':config[_0xc714('0xc')]?config[_0xc714('0xc')][_0xc714('0xd')]:'id','clientSecret':config['google']?config[_0xc714('0xc')][_0xc714('0xe')]:_0xc714('0xf'),'callbackURL':config[_0xc714('0xc')]?config[_0xc714('0xc')]['callbackURL']:''},function(_0xaa2acc,_0x3060eb,_0x5cc07f,_0x4dd735){db[_0xc714('0x10')]['find']({'where':{'email':_[_0xc714('0x11')](_0x5cc07f[_0xc714('0x12')],_0xc714('0x13')),'role':{'$or':[_0xc714('0x14'),'user',_0xc714('0x15')]}}})[_0xc714('0x16')](function(_0x30b839){if(_0x30b839){return _0x4dd735(null,_0x30b839);}_0x4dd735(_0xc714('0x17'));})[_0xc714('0x18')](function(_0xf5b54){_0x4dd735(_0xf5b54);});}));
\ No newline at end of file
index 965a7ca..b215aa6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda0b=['exports','express','passport','Router','./authGoogle.controller','../../components/auth/service','setTokenCookie','get','/callback','callback'];(function(_0x5657bb,_0x55d70f){var _0x51d6e7=function(_0x59ab15){while(--_0x59ab15){_0x5657bb['push'](_0x5657bb['shift']());}};_0x51d6e7(++_0x55d70f);}(_0xda0b,0x79));var _0xbda0=function(_0x47f36b,_0x259ef2){_0x47f36b=_0x47f36b-0x0;var _0xd16e7d=_0xda0b[_0x47f36b];return _0xd16e7d;};'use strict';var express=require(_0xbda0('0x0'));var passport=require(_0xbda0('0x1'));var router=express[_0xbda0('0x2')]();var controller=require(_0xbda0('0x3'));var setTokenCookie=require(_0xbda0('0x4'))[_0xbda0('0x5')];router['get']('/',controller['login']);router[_0xbda0('0x6')](_0xbda0('0x7'),controller[_0xbda0('0x8')],setTokenCookie);module[_0xbda0('0x9')]=router;
\ No newline at end of file
+var _0x8a6b=['/callback','callback','exports','express','Router','./authGoogle.controller','../../components/auth/service','login','get'];(function(_0x5e9fe1,_0x4ae900){var _0x58923e=function(_0x4284be){while(--_0x4284be){_0x5e9fe1['push'](_0x5e9fe1['shift']());}};_0x58923e(++_0x4ae900);}(_0x8a6b,0x198));var _0xb8a6=function(_0x43fec1,_0x29404b){_0x43fec1=_0x43fec1-0x0;var _0x176d52=_0x8a6b[_0x43fec1];return _0x176d52;};'use strict';var express=require(_0xb8a6('0x0'));var passport=require('passport');var router=express[_0xb8a6('0x1')]();var controller=require(_0xb8a6('0x2'));var setTokenCookie=require(_0xb8a6('0x3'))['setTokenCookie'];router['get']('/',controller[_0xb8a6('0x4')]);router[_0xb8a6('0x5')](_0xb8a6('0x6'),controller[_0xb8a6('0x7')],setTokenCookie);module[_0xb8a6('0x8')]=router;
\ No newline at end of file
index 96a3e9a..60b6bbe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x94d4=['json','online','forgot','body','Email\x20parameter\x20is\x20missing','trim','toLowerCase','This\x20email\x20is\x20not\x20registered.','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','headers','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','Reset\x20Email\x20sent!','reset','token','Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.','password','Password\x20reset!','util','passport','Strategy','bluebird','jayson/promise','../../config/logger','api','randomstring','../../mysqldb','../../components/auth/service','signToken','client','User','count','then','../../config/license/util','getLicense','agents','find','admin','user','agent','Incorrect\x20username\x20and/or\x20password','authenticate','catch','MailAccount','name','email','MailServerOut','Smtp','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','service','host','port','secure','authentication','auth','merge','request','SendMail','error','format','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','message','status','send','login','local'];(function(_0x101eb4,_0x3ac61e){var _0x415b53=function(_0x4351fd){while(--_0x4351fd){_0x101eb4['push'](_0x101eb4['shift']());}};_0x415b53(++_0x3ac61e);}(_0x94d4,0xa5));var _0x494d=function(_0x27d402,_0x26a705){_0x27d402=_0x27d402-0x0;var _0x383012=_0x94d4[_0x27d402];return _0x383012;};'use strict';var util=require(_0x494d('0x0'));var passport=require(_0x494d('0x1'));var LocalStrategy=require('passport-local')[_0x494d('0x2')];var BPromise=require(_0x494d('0x3'));var jayson=require(_0x494d('0x4'));var _=require('lodash');var logger=require(_0x494d('0x5'))(_0x494d('0x6'));var rs=require(_0x494d('0x7'));var db=require(_0x494d('0x8'))['db'];var signToken=require(_0x494d('0x9'))[_0x494d('0xa')];var client=jayson[_0x494d('0xb')]['http']({'port':0x232b});var getLicense=function(_0x4f4576){return new BPromise(function(_0x5269db,_0x396280){var _0x3f6b68=0x0;_0x4f4576['role']!=='agent'&&_0x5269db(_0x4f4576);return db[_0x494d('0xc')][_0x494d('0xd')]({'where':{'role':'agent','online':!![],'id':{'$ne':_0x4f4576['id']}}})[_0x494d('0xe')](function(_0x28bff7){_0x3f6b68=_0x28bff7;return require(_0x494d('0xf'))[_0x494d('0x10')]();})['then'](function(_0x28d3d1){if(_0x28d3d1&&_0x28d3d1[_0x494d('0x11')]&&_0x3f6b68>=_0x28d3d1['agents']){return _0x396280({'message':'Maximum\x20login\x20has\x20been\x20reached'});}return _0x5269db(_0x4f4576);})['catch'](function(_0x12ca37){return _0x396280(_0x12ca37);});});};function localAuthenticate(_0x41e92f,_0xfba01a,_0x25f188,_0x3bc5c9){_0x41e92f[_0x494d('0x12')]({'where':{'name':_0xfba01a,'role':{'$or':[_0x494d('0x13'),_0x494d('0x14'),_0x494d('0x15')]}}})[_0x494d('0xe')](function(_0x263405){if(!_0x263405||_0x263405&&_0x263405['name']!==_0xfba01a){return _0x3bc5c9(null,![],{'message':_0x494d('0x16')});}return getLicense(_0x263405);})[_0x494d('0xe')](function(_0x2a2917){_0x2a2917[_0x494d('0x17')](_0x25f188,function(_0x120488,_0x1680a3){if(_0x120488){return _0x3bc5c9(_0x120488);}if(!_0x1680a3){return _0x3bc5c9(null,![],{'message':_0x494d('0x16')});}else{return _0x3bc5c9(null,_0x2a2917);}});})[_0x494d('0x18')](function(_0x4301fc){_0x3bc5c9(_0x4301fc);});}function sendServiceMail(_0x1552bb){return db[_0x494d('0x19')][_0x494d('0x12')]({'where':{'service':!![]},'attributes':['id',_0x494d('0x1a'),_0x494d('0x1b')],'include':[{'model':db[_0x494d('0x1c')],'as':_0x494d('0x1d')}]})[_0x494d('0xe')](function(_0x5bf90b){if(!_0x5bf90b){throw new Error(_0x494d('0x1e'));}var _0x172763={'tls':{'rejectUnauthorized':![]}};if(_0x5bf90b[_0x494d('0x1d')][_0x494d('0x1f')]){_0x172763['service']=_0x5bf90b['Smtp'][_0x494d('0x1f')];}else{_0x172763[_0x494d('0x20')]=_0x5bf90b['Smtp']['host'];_0x172763[_0x494d('0x21')]=_0x5bf90b['Smtp'][_0x494d('0x21')];_0x172763['secure']=_0x5bf90b[_0x494d('0x1d')][_0x494d('0x22')];}if(_0x5bf90b['Smtp'][_0x494d('0x23')]){_0x172763[_0x494d('0x24')]={'user':_0x5bf90b[_0x494d('0x1d')][_0x494d('0x14')],'pass':_0x5bf90b[_0x494d('0x1d')]['pass']};}var _0x17d65a={'account':_0x172763,'message':_[_0x494d('0x25')]({'from':util['format']('\x22%s\x22\x20<%s>',_0x5bf90b[_0x494d('0x1a')],_0x5bf90b[_0x494d('0x1b')]||_0x5bf90b[_0x494d('0x1d')][_0x494d('0x14')])},_0x1552bb)};return client[_0x494d('0x26')](_0x494d('0x27'),_0x17d65a);})[_0x494d('0xe')](function(_0x347c58){if(_0x347c58[_0x494d('0x28')]){throw new Error(util[_0x494d('0x29')](_0x494d('0x2a'),_0x347c58[_0x494d('0x28')][_0x494d('0x2b')]||JSON['stringify'](_0x347c58[_0x494d('0x28')])));}return!![];});}function handleError(_0xa78384,_0x3606c9,_0x18dfae){return _0xa78384[_0x494d('0x2c')](_0x3606c9||0x1f4)[_0x494d('0x2d')]({'message':_0x18dfae?_0x18dfae[_0x494d('0x2b')]||_0x18dfae:''});}exports[_0x494d('0x2e')]=function(_0x44de07,_0x22e06c,_0x4ceaf6){passport[_0x494d('0x17')](_0x494d('0x2f'),function(_0x5de360,_0x3bd0fe,_0x4a8ed1){var _0x50519a=_0x5de360||_0x4a8ed1;if(_0x50519a){return handleError(_0x22e06c,0x191,_0x50519a);}if(!_0x3bd0fe){return handleError(_0x22e06c,0x194,{'message':'Something\x20went\x20wrong,\x20please\x20try\x20again.'});}var _0x530117=signToken(_0x3bd0fe['id'],_0x3bd0fe['role']);_0x22e06c[_0x494d('0x30')]({'id':_0x3bd0fe['id'],'token':_0x530117,'statusCall':'','isAlreadyLogged':_0x3bd0fe[_0x494d('0x31')]});})(_0x44de07,_0x22e06c,_0x4ceaf6);};exports[_0x494d('0x32')]=function(_0x36c157,_0x5db6cd,_0x57d2b4){if(!_0x36c157[_0x494d('0x33')][_0x494d('0x1b')]){return handleError(_0x5db6cd,0x1f4,{'message':_0x494d('0x34')});}var _0x4e735c=rs['generate']();_0x36c157[_0x494d('0x33')][_0x494d('0x1b')]=_0x36c157['body'][_0x494d('0x1b')][_0x494d('0x35')]()[_0x494d('0x36')]();return db['User']['find']({'where':{'email':_0x36c157['body'][_0x494d('0x1b')]}})['then'](function(_0x50e740){if(!_0x50e740){throw new Error(_0x494d('0x37'));}_0x50e740[_0x494d('0x38')]=_0x4e735c;_0x50e740[_0x494d('0x39')]=Date[_0x494d('0x3a')]()+0x36ee80;return _0x50e740[_0x494d('0x3b')]();})['then'](function(){return sendServiceMail({'to':_0x36c157[_0x494d('0x33')][_0x494d('0x1b')],'subject':_0x494d('0x3c'),'text':_0x494d('0x3d')+_0x494d('0x3e')+'http://'+_0x36c157[_0x494d('0x3f')][_0x494d('0x20')]+'/reset/'+_0x4e735c+'\x0a\x0a'+_0x494d('0x40')});})[_0x494d('0xe')](function(){_0x5db6cd[_0x494d('0x2c')](0xc8)['send']({'message':_0x494d('0x41')});})[_0x494d('0x18')](function(_0x58eade){return handleError(_0x5db6cd,0x1f4,_0x58eade);});};exports[_0x494d('0x42')]=function(_0x20fd5e,_0x3691c1,_0x554239){return db['User'][_0x494d('0x12')]({'where':{'resetPasswordToken':_0x20fd5e['params'][_0x494d('0x43')],'resetPasswordExpires':{'$gt':Date[_0x494d('0x3a')]()}}})[_0x494d('0xe')](function(_0x5ce269){if(!_0x5ce269){throw new Error(_0x494d('0x44'));}_0x5ce269[_0x494d('0x45')]=_0x20fd5e['body'][_0x494d('0x45')];_0x5ce269[_0x494d('0x38')]=null;_0x5ce269['resetPasswordExpires']=null;return _0x5ce269[_0x494d('0x3b')]();})[_0x494d('0xe')](function(){_0x3691c1['status'](0xc8)[_0x494d('0x2d')]({'message':_0x494d('0x46')});})[_0x494d('0x18')](function(_0x368d18){return handleError(_0x3691c1,0x1f4,_0x368d18);});};passport['use'](new LocalStrategy({'usernameField':_0x494d('0x1a'),'passwordField':_0x494d('0x45')},function(_0x24212e,_0x10006e,_0x51e72a){return localAuthenticate(db['User'],_0x24212e,_0x10006e,_0x51e72a);}));
\ No newline at end of file
+var _0xea28=['Email\x20parameter\x20is\x20missing','generate','trim','toLowerCase','This\x20email\x20is\x20not\x20registered.','resetPasswordToken','resetPasswordExpires','save','You\x20are\x20receiving\x20this\x20because\x20you\x20(or\x20someone\x20else)\x20have\x20requested\x20the\x20reset\x20of\x20the\x20password\x20for\x20your\x20account.\x0a\x0a','Please\x20click\x20on\x20the\x20following\x20link,\x20or\x20paste\x20this\x20into\x20your\x20browser\x20to\x20complete\x20the\x20process:\x0a\x0a','http://','headers','If\x20you\x20did\x20not\x20request\x20this,\x20please\x20ignore\x20this\x20email\x20and\x20your\x20password\x20will\x20remain\x20unchanged.\x0a','send','Reset\x20Email\x20sent!','reset','params','token','now','Password\x20reset!','use','password','util','passport','passport-local','Strategy','bluebird','jayson/promise','lodash','../../config/logger','randomstring','../../mysqldb','../../components/auth/service','client','http','role','agent','User','count','then','getLicense','agents','Maximum\x20login\x20has\x20been\x20reached','catch','admin','user','name','Incorrect\x20username\x20and/or\x20password','authenticate','MailAccount','find','email','MailServerOut','Smtp','Unable\x20to\x20find\x20a\x20configured\x20SMTP\x20service!','service','host','port','secure','authentication','merge','\x22%s\x22\x20<%s>','request','format','SendMail\x20error:\x20%s.\x20Please\x20contact\x20your\x20Administrator!','error','message','stringify','status','login','Something\x20went\x20wrong,\x20please\x20try\x20again.','forgot','body'];(function(_0x49d3b7,_0x4362f6){var _0x4ba2b3=function(_0x304776){while(--_0x304776){_0x49d3b7['push'](_0x49d3b7['shift']());}};_0x4ba2b3(++_0x4362f6);}(_0xea28,0x13a));var _0x8ea2=function(_0x45719b,_0x103707){_0x45719b=_0x45719b-0x0;var _0x58441c=_0xea28[_0x45719b];return _0x58441c;};'use strict';var util=require(_0x8ea2('0x0'));var passport=require(_0x8ea2('0x1'));var LocalStrategy=require(_0x8ea2('0x2'))[_0x8ea2('0x3')];var BPromise=require(_0x8ea2('0x4'));var jayson=require(_0x8ea2('0x5'));var _=require(_0x8ea2('0x6'));var logger=require(_0x8ea2('0x7'))('api');var rs=require(_0x8ea2('0x8'));var db=require(_0x8ea2('0x9'))['db'];var signToken=require(_0x8ea2('0xa'))['signToken'];var client=jayson[_0x8ea2('0xb')][_0x8ea2('0xc')]({'port':0x232b});var getLicense=function(_0xb7f278){return new BPromise(function(_0x39b1fa,_0x28b5b8){var _0x929304=0x0;_0xb7f278[_0x8ea2('0xd')]!==_0x8ea2('0xe')&&_0x39b1fa(_0xb7f278);return db[_0x8ea2('0xf')][_0x8ea2('0x10')]({'where':{'role':_0x8ea2('0xe'),'online':!![],'id':{'$ne':_0xb7f278['id']}}})[_0x8ea2('0x11')](function(_0x500b82){_0x929304=_0x500b82;return require('../../config/license/util')[_0x8ea2('0x12')]();})[_0x8ea2('0x11')](function(_0x374973){if(_0x374973&&_0x374973['agents']&&_0x929304>=_0x374973[_0x8ea2('0x13')]){return _0x28b5b8({'message':_0x8ea2('0x14')});}return _0x39b1fa(_0xb7f278);})[_0x8ea2('0x15')](function(_0x10aead){return _0x28b5b8(_0x10aead);});});};function localAuthenticate(_0xe47c0e,_0x5e662e,_0x2879d6,_0x553154){_0xe47c0e['find']({'where':{'name':_0x5e662e,'role':{'$or':[_0x8ea2('0x16'),_0x8ea2('0x17'),_0x8ea2('0xe')]}}})[_0x8ea2('0x11')](function(_0x393faf){if(!_0x393faf||_0x393faf&&_0x393faf[_0x8ea2('0x18')]!==_0x5e662e){return _0x553154(null,![],{'message':_0x8ea2('0x19')});}return getLicense(_0x393faf);})[_0x8ea2('0x11')](function(_0x474873){_0x474873[_0x8ea2('0x1a')](_0x2879d6,function(_0x2dfa7c,_0x1c1715){if(_0x2dfa7c){return _0x553154(_0x2dfa7c);}if(!_0x1c1715){return _0x553154(null,![],{'message':_0x8ea2('0x19')});}else{return _0x553154(null,_0x474873);}});})[_0x8ea2('0x15')](function(_0x1b64cf){_0x553154(_0x1b64cf);});}function sendServiceMail(_0x174ef2){return db[_0x8ea2('0x1b')][_0x8ea2('0x1c')]({'where':{'service':!![]},'attributes':['id',_0x8ea2('0x18'),_0x8ea2('0x1d')],'include':[{'model':db[_0x8ea2('0x1e')],'as':_0x8ea2('0x1f')}]})['then'](function(_0x4be7c9){if(!_0x4be7c9){throw new Error(_0x8ea2('0x20'));}var _0x248c18={'tls':{'rejectUnauthorized':![]}};if(_0x4be7c9[_0x8ea2('0x1f')]['service']){_0x248c18[_0x8ea2('0x21')]=_0x4be7c9[_0x8ea2('0x1f')]['service'];}else{_0x248c18[_0x8ea2('0x22')]=_0x4be7c9[_0x8ea2('0x1f')][_0x8ea2('0x22')];_0x248c18[_0x8ea2('0x23')]=_0x4be7c9[_0x8ea2('0x1f')][_0x8ea2('0x23')];_0x248c18[_0x8ea2('0x24')]=_0x4be7c9[_0x8ea2('0x1f')][_0x8ea2('0x24')];}if(_0x4be7c9['Smtp'][_0x8ea2('0x25')]){_0x248c18['auth']={'user':_0x4be7c9[_0x8ea2('0x1f')][_0x8ea2('0x17')],'pass':_0x4be7c9[_0x8ea2('0x1f')]['pass']};}var _0x53ed43={'account':_0x248c18,'message':_[_0x8ea2('0x26')]({'from':util['format'](_0x8ea2('0x27'),_0x4be7c9['name'],_0x4be7c9[_0x8ea2('0x1d')]||_0x4be7c9[_0x8ea2('0x1f')][_0x8ea2('0x17')])},_0x174ef2)};return client[_0x8ea2('0x28')]('SendMail',_0x53ed43);})['then'](function(_0xacaa6c){if(_0xacaa6c['error']){throw new Error(util[_0x8ea2('0x29')](_0x8ea2('0x2a'),_0xacaa6c[_0x8ea2('0x2b')][_0x8ea2('0x2c')]||JSON[_0x8ea2('0x2d')](_0xacaa6c[_0x8ea2('0x2b')])));}return!![];});}function handleError(_0x32e225,_0x316707,_0x19e868){return _0x32e225[_0x8ea2('0x2e')](_0x316707||0x1f4)['send']({'message':_0x19e868?_0x19e868['message']||_0x19e868:''});}exports[_0x8ea2('0x2f')]=function(_0x188553,_0x53d71c,_0x4a110f){passport[_0x8ea2('0x1a')]('local',function(_0x64475b,_0x1b9471,_0x53fd06){var _0x17b21c=_0x64475b||_0x53fd06;if(_0x17b21c){return handleError(_0x53d71c,0x191,_0x17b21c);}if(!_0x1b9471){return handleError(_0x53d71c,0x194,{'message':_0x8ea2('0x30')});}var _0x33abc8=signToken(_0x1b9471['id'],_0x1b9471['role']);_0x53d71c['json']({'id':_0x1b9471['id'],'token':_0x33abc8,'statusCall':'','isAlreadyLogged':_0x1b9471['online']});})(_0x188553,_0x53d71c,_0x4a110f);};exports[_0x8ea2('0x31')]=function(_0x233e12,_0x3fc785,_0x5ef924){if(!_0x233e12[_0x8ea2('0x32')][_0x8ea2('0x1d')]){return handleError(_0x3fc785,0x1f4,{'message':_0x8ea2('0x33')});}var _0x278e5d=rs[_0x8ea2('0x34')]();_0x233e12[_0x8ea2('0x32')][_0x8ea2('0x1d')]=_0x233e12[_0x8ea2('0x32')]['email'][_0x8ea2('0x35')]()[_0x8ea2('0x36')]();return db[_0x8ea2('0xf')][_0x8ea2('0x1c')]({'where':{'email':_0x233e12['body'][_0x8ea2('0x1d')]}})['then'](function(_0x1e03f2){if(!_0x1e03f2){throw new Error(_0x8ea2('0x37'));}_0x1e03f2[_0x8ea2('0x38')]=_0x278e5d;_0x1e03f2[_0x8ea2('0x39')]=Date['now']()+0x36ee80;return _0x1e03f2[_0x8ea2('0x3a')]();})['then'](function(){return sendServiceMail({'to':_0x233e12['body'][_0x8ea2('0x1d')],'subject':'xCally\x20Motion\x20Password\x20Reset','text':_0x8ea2('0x3b')+_0x8ea2('0x3c')+_0x8ea2('0x3d')+_0x233e12[_0x8ea2('0x3e')][_0x8ea2('0x22')]+'/reset/'+_0x278e5d+'\x0a\x0a'+_0x8ea2('0x3f')});})['then'](function(){_0x3fc785[_0x8ea2('0x2e')](0xc8)[_0x8ea2('0x40')]({'message':_0x8ea2('0x41')});})[_0x8ea2('0x15')](function(_0x4f9a8c){return handleError(_0x3fc785,0x1f4,_0x4f9a8c);});};exports[_0x8ea2('0x42')]=function(_0x57a6b8,_0x3f0c78,_0x5ba351){return db[_0x8ea2('0xf')][_0x8ea2('0x1c')]({'where':{'resetPasswordToken':_0x57a6b8[_0x8ea2('0x43')][_0x8ea2('0x44')],'resetPasswordExpires':{'$gt':Date[_0x8ea2('0x45')]()}}})[_0x8ea2('0x11')](function(_0x2f4fa8){if(!_0x2f4fa8){throw new Error('Password\x20reset\x20token\x20is\x20invalid\x20or\x20has\x20expired.');}_0x2f4fa8['password']=_0x57a6b8[_0x8ea2('0x32')]['password'];_0x2f4fa8['resetPasswordToken']=null;_0x2f4fa8['resetPasswordExpires']=null;return _0x2f4fa8[_0x8ea2('0x3a')]();})['then'](function(){_0x3f0c78[_0x8ea2('0x2e')](0xc8)[_0x8ea2('0x40')]({'message':_0x8ea2('0x46')});})[_0x8ea2('0x15')](function(_0x989d9b){return handleError(_0x3f0c78,0x1f4,_0x989d9b);});};passport[_0x8ea2('0x47')](new LocalStrategy({'usernameField':_0x8ea2('0x18'),'passwordField':_0x8ea2('0x48')},function(_0x5352b9,_0x3afb80,_0x1ef615){return localAuthenticate(db[_0x8ea2('0xf')],_0x5352b9,_0x3afb80,_0x1ef615);}));
\ No newline at end of file
index 5919583..b3b6043 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x598e=['./authLocal.controller','post','login','forgot','/reset/:token','reset','express','Router'];(function(_0x5e2bb0,_0x5e28e8){var _0x295515=function(_0x51cfc7){while(--_0x51cfc7){_0x5e2bb0['push'](_0x5e2bb0['shift']());}};_0x295515(++_0x5e28e8);}(_0x598e,0x156));var _0xe598=function(_0x362b50,_0x54d110){_0x362b50=_0x362b50-0x0;var _0x561801=_0x598e[_0x362b50];return _0x561801;};'use strict';var express=require(_0xe598('0x0'));var router=express[_0xe598('0x1')]();var controller=require(_0xe598('0x2'));router[_0xe598('0x3')]('/',controller[_0xe598('0x4')]);router[_0xe598('0x3')]('/forgot',controller[_0xe598('0x5')]);router[_0xe598('0x3')](_0xe598('0x6'),controller[_0xe598('0x7')]);module['exports']=router;
\ No newline at end of file
+var _0x7fc7=['forgot','/reset/:token','reset','exports','express','Router','./authLocal.controller','post'];(function(_0x339129,_0x86dcc6){var _0x1570df=function(_0x3b537e){while(--_0x3b537e){_0x339129['push'](_0x339129['shift']());}};_0x1570df(++_0x86dcc6);}(_0x7fc7,0x11c));var _0x77fc=function(_0x4cdb90,_0x142bb9){_0x4cdb90=_0x4cdb90-0x0;var _0x40ac97=_0x7fc7[_0x4cdb90];return _0x40ac97;};'use strict';var express=require(_0x77fc('0x0'));var router=express[_0x77fc('0x1')]();var controller=require(_0x77fc('0x2'));router[_0x77fc('0x3')]('/',controller['login']);router['post']('/forgot',controller[_0x77fc('0x4')]);router[_0x77fc('0x3')](_0x77fc('0x5'),controller[_0x77fc('0x6')]);module[_0x77fc('0x7')]=router;
\ No newline at end of file
index d042d62..f5a3e12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf79b=['exports','STRING','BOOLEAN','INTEGER'];(function(_0x3b62a5,_0xd36c6e){var _0x382504=function(_0x1eadb6){while(--_0x1eadb6){_0x3b62a5['push'](_0x3b62a5['shift']());}};_0x382504(++_0xd36c6e);}(_0xf79b,0xa0));var _0xbf79=function(_0x191d47,_0x3f1f0e){_0x191d47=_0x191d47-0x0;var _0x482bfa=_0xf79b[_0x191d47];return _0x482bfa;};'use strict';var Sequelize=require('sequelize');module[_0xbf79('0x0')]={'name':{'type':Sequelize[_0xbf79('0x1')],'allowNull':![]},'channel':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xbf79('0x1')]},'status':{'type':Sequelize[_0xbf79('0x2')],'defaultValue':![]},'timeout':{'type':Sequelize[_0xbf79('0x3')],'defaultValue':0xa}};
\ No newline at end of file
+var _0x5689=['sequelize','STRING','BOOLEAN','INTEGER'];(function(_0x5d7212,_0x1732eb){var _0xa3ca4b=function(_0x49fbee){while(--_0x49fbee){_0x5d7212['push'](_0x5d7212['shift']());}};_0xa3ca4b(++_0x1732eb);}(_0x5689,0xe0));var _0x9568=function(_0xa49c14,_0x26c05f){_0xa49c14=_0xa49c14-0x0;var _0x5a5179=_0x5689[_0xa49c14];return _0x5a5179;};'use strict';var Sequelize=require(_0x9568('0x0'));module['exports']={'name':{'type':Sequelize[_0x9568('0x1')],'allowNull':![]},'channel':{'type':Sequelize[_0x9568('0x1')]},'description':{'type':Sequelize['STRING']},'status':{'type':Sequelize[_0x9568('0x2')],'defaultValue':![]},'timeout':{'type':Sequelize[_0x9568('0x3')],'defaultValue':0xa}};
\ No newline at end of file
index 6e11efb..a55c32b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x40ba=['offset','limit','set','json','reject','save','update','then','destroy','end','error','stack','name','send','Automation','rawAttributes','model','query','filters','intersection','fields','attributes','length','sort','where','pick','merge','type','VIRTUAL','field','filter','includeAll','include','findAll','rows','catch','show','params','find','create','body','Condition','addConditions','ids','omit','getConditions','findOne','keys','order','map','options','hasOwnProperty','nolimit','Action','addActions','getActions','html-pdf','eml-format','zip-dir','moment','mustache','util','sox','to-csv','lodash','crypto','jsforce','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','count'];(function(_0x9117df,_0x7bef51){var _0x1decd5=function(_0x45051f){while(--_0x45051f){_0x9117df['push'](_0x9117df['shift']());}};_0x1decd5(++_0x7bef51);}(_0x40ba,0xd0));var _0xa40b=function(_0x28db4a,_0x6d6d5a){_0x28db4a=_0x28db4a-0x0;var _0x3bf87e=_0x40ba[_0x28db4a];return _0x3bf87e;};'use strict';var pdf=require(_0xa40b('0x0'));var emlformat=require(_0xa40b('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xa40b('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xa40b('0x3'));var BPromise=require('bluebird');var Mustache=require(_0xa40b('0x4'));var util=require(_0xa40b('0x5'));var path=require('path');var sox=require(_0xa40b('0x6'));var csv=require(_0xa40b('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xa40b('0x8'));var squel=require('squel');var crypto=require(_0xa40b('0x9'));var jsforce=require(_0xa40b('0xa'));var deskjs=require('desk.js');var toCsv=require(_0xa40b('0x7'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0xa40b('0xb'));var Redis=require(_0xa40b('0xc'));var qs=require('../../components/parsers/qs');var logger=require(_0xa40b('0xd'))(_0xa40b('0xe'));var utils=require(_0xa40b('0xf'));var config=require(_0xa40b('0x10'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xe1f3fc,_0x1fa193){_0x1fa193=_0x1fa193||0xcc;return function(_0x4a3e28){if(_0x4a3e28){return _0xe1f3fc[_0xa40b('0x11')](_0x1fa193);}return _0xe1f3fc[_0xa40b('0x12')](_0x1fa193)['end']();};}function respondWithResult(_0xa38bf3,_0x10d456){_0x10d456=_0x10d456||0xc8;return function(_0x170d6b){if(_0x170d6b){return _0xa38bf3[_0xa40b('0x12')](_0x10d456)['json'](_0x170d6b);}};}function respondWithFilteredResult(_0x5b603c,_0x45761e){return function(_0x36ba9c){if(_0x36ba9c){var _0x596d1f=_0x36ba9c[_0xa40b('0x13')],_0x356750=_0x45761e[_0xa40b('0x14')],_0x5a42ed=_0x45761e[_0xa40b('0x14')]+_0x45761e[_0xa40b('0x15')],_0x1b3a92;if(_0x5a42ed>=_0x596d1f){_0x5a42ed=_0x596d1f;_0x1b3a92=0xc8;}else{_0x1b3a92=0xce;}_0x5b603c['status'](_0x1b3a92);return _0x5b603c[_0xa40b('0x16')]('Content-Range',_0x356750+'-'+_0x5a42ed+'/'+_0x596d1f)[_0xa40b('0x17')](_0x36ba9c);}return null;};}function patchUpdates(_0x2c5b71){return function(_0x4595ee){try{jsonpatch['apply'](_0x4595ee,_0x2c5b71,!![]);}catch(_0x132615){return BPromise[_0xa40b('0x18')](_0x132615);}return _0x4595ee[_0xa40b('0x19')]();};}function saveUpdates(_0x26122b,_0x5bb701){return function(_0xa53032){if(_0xa53032){return _0xa53032[_0xa40b('0x1a')](_0x26122b)[_0xa40b('0x1b')](function(_0x1e7950){return _0x1e7950;});}return null;};}function removeEntity(_0x39c8b4,_0x5d9452){return function(_0x5bb256){if(_0x5bb256){return _0x5bb256[_0xa40b('0x1c')]()[_0xa40b('0x1b')](function(){_0x39c8b4['status'](0xcc)[_0xa40b('0x1d')]();});}};}function handleEntityNotFound(_0x376884,_0xa095ee){return function(_0x12c3c3){if(!_0x12c3c3){_0x376884[_0xa40b('0x11')](0x194);}return _0x12c3c3;};}function handleError(_0x8896e8,_0x5f5e36){_0x5f5e36=_0x5f5e36||0x1f4;return function(_0x28d300){logger[_0xa40b('0x1e')](_0x28d300[_0xa40b('0x1f')]);if(_0x28d300[_0xa40b('0x20')]){delete _0x28d300[_0xa40b('0x20')];}_0x8896e8['status'](_0x5f5e36)[_0xa40b('0x21')](_0x28d300);};}exports['index']=function(_0x27d880,_0x773581){var _0x5010a1={},_0x276363={},_0x28eedc={'count':0x0,'rows':[]};var _0x2c6951=db[_0xa40b('0x22')][_0xa40b('0x23')];_0x276363[_0xa40b('0x24')]=_['keys'](_0x2c6951);_0x276363[_0xa40b('0x25')]=_['keys'](_0x27d880['query']);_0x276363[_0xa40b('0x26')]=_['intersection'](_0x276363['model'],_0x276363[_0xa40b('0x25')]);_0x5010a1['attributes']=_[_0xa40b('0x27')](_0x276363['model'],qs[_0xa40b('0x28')](_0x27d880['query'][_0xa40b('0x28')]));_0x5010a1['attributes']=_0x5010a1[_0xa40b('0x29')][_0xa40b('0x2a')]?_0x5010a1[_0xa40b('0x29')]:_0x276363[_0xa40b('0x24')];if(!_0x27d880[_0xa40b('0x25')]['hasOwnProperty']('nolimit')){_0x5010a1[_0xa40b('0x15')]=qs['limit'](_0x27d880['query'][_0xa40b('0x15')]);_0x5010a1[_0xa40b('0x14')]=qs['offset'](_0x27d880[_0xa40b('0x25')]['offset']);}_0x5010a1['order']=qs[_0xa40b('0x2b')](_0x27d880[_0xa40b('0x25')][_0xa40b('0x2b')]);_0x5010a1[_0xa40b('0x2c')]=qs[_0xa40b('0x26')](_[_0xa40b('0x2d')](_0x27d880['query'],_0x276363['filters']));if(_0x27d880['query']['filter']){_0x5010a1[_0xa40b('0x2c')]=_[_0xa40b('0x2e')](_0x5010a1[_0xa40b('0x2c')],{'$or':_['map'](_0x2c6951,function(_0x27032f){if(_0x27032f[_0xa40b('0x2f')]['key']!==_0xa40b('0x30')){var _0x376d35={};_0x376d35[_0x27032f[_0xa40b('0x31')]]={'$like':'%'+_0x27d880['query'][_0xa40b('0x32')]+'%'};return _0x376d35;}})});}_0x5010a1=_[_0xa40b('0x2e')]({},_0x5010a1,_0x27d880['options']);var _0x28bd51={'where':_0x5010a1[_0xa40b('0x2c')]};return db[_0xa40b('0x22')][_0xa40b('0x13')](_0x28bd51)[_0xa40b('0x1b')](function(_0x3d5065){_0x28eedc[_0xa40b('0x13')]=_0x3d5065;if(_0x27d880[_0xa40b('0x25')][_0xa40b('0x33')]){_0x5010a1[_0xa40b('0x34')]=[{'all':!![]}];}return db[_0xa40b('0x22')][_0xa40b('0x35')](_0x5010a1);})[_0xa40b('0x1b')](function(_0x3f0dfd){_0x28eedc[_0xa40b('0x36')]=_0x3f0dfd;return _0x28eedc;})[_0xa40b('0x1b')](respondWithFilteredResult(_0x773581,_0x5010a1))[_0xa40b('0x37')](handleError(_0x773581,null));};exports[_0xa40b('0x38')]=function(_0x42b0d6,_0x59e539){var _0x4103b6={'raw':![],'where':{'id':_0x42b0d6[_0xa40b('0x39')]['id']}},_0x16f2cc={};_0x16f2cc[_0xa40b('0x24')]=_['keys'](db['Automation'][_0xa40b('0x23')]);_0x16f2cc['query']=_['keys'](_0x42b0d6[_0xa40b('0x25')]);_0x16f2cc[_0xa40b('0x26')]=_['intersection'](_0x16f2cc['model'],_0x16f2cc[_0xa40b('0x25')]);_0x4103b6[_0xa40b('0x29')]=_[_0xa40b('0x27')](_0x16f2cc[_0xa40b('0x24')],qs[_0xa40b('0x28')](_0x42b0d6[_0xa40b('0x25')][_0xa40b('0x28')]));_0x4103b6[_0xa40b('0x29')]=_0x4103b6[_0xa40b('0x29')][_0xa40b('0x2a')]?_0x4103b6['attributes']:_0x16f2cc['model'];if(_0x42b0d6[_0xa40b('0x25')][_0xa40b('0x33')]){_0x4103b6[_0xa40b('0x34')]=[{'all':!![]}];}_0x4103b6=_[_0xa40b('0x2e')]({},_0x4103b6,_0x42b0d6['options']);return db[_0xa40b('0x22')][_0xa40b('0x3a')](_0x4103b6)['then'](handleEntityNotFound(_0x59e539,null))['then'](respondWithResult(_0x59e539,null))[_0xa40b('0x37')](handleError(_0x59e539,null));};exports[_0xa40b('0x3b')]=function(_0x43128d,_0x8637d2){return db[_0xa40b('0x22')]['create'](_0x43128d[_0xa40b('0x3c')],{})[_0xa40b('0x1b')](respondWithResult(_0x8637d2,0xc9))['catch'](handleError(_0x8637d2,null));};exports[_0xa40b('0x1a')]=function(_0x5d2028,_0x415f56){if(_0x5d2028['body']['id']){delete _0x5d2028[_0xa40b('0x3c')]['id'];}return db[_0xa40b('0x22')][_0xa40b('0x3a')]({'where':{'id':_0x5d2028['params']['id']}})[_0xa40b('0x1b')](handleEntityNotFound(_0x415f56,null))[_0xa40b('0x1b')](saveUpdates(_0x5d2028[_0xa40b('0x3c')],null))[_0xa40b('0x1b')](respondWithResult(_0x415f56,null))[_0xa40b('0x37')](handleError(_0x415f56,null));};exports[_0xa40b('0x1c')]=function(_0x52397b,_0x4d3a8f){return db[_0xa40b('0x22')]['find']({'where':{'id':_0x52397b['params']['id']}})[_0xa40b('0x1b')](handleEntityNotFound(_0x4d3a8f,null))['then'](removeEntity(_0x4d3a8f,null))[_0xa40b('0x37')](handleError(_0x4d3a8f,null));};exports['addConditions']=function(_0x1978d8,_0x405882,_0x308829){return db[_0xa40b('0x3d')][_0xa40b('0x3a')]({'where':{'id':_0x1978d8[_0xa40b('0x39')]['id']}})[_0xa40b('0x1b')](handleEntityNotFound(_0x405882,null))[_0xa40b('0x1b')](function(_0x4fe27e){if(_0x4fe27e){return _0x4fe27e[_0xa40b('0x3e')](_0x1978d8['body'][_0xa40b('0x3f')],_[_0xa40b('0x40')](_0x1978d8[_0xa40b('0x3c')],['ids','id'])||{});}})[_0xa40b('0x1b')](respondWithResult(_0x405882,null))['catch'](handleError(_0x405882,null));};exports[_0xa40b('0x41')]=function(_0x7dd207,_0x2e21ae,_0xc43965){var _0x18319f={};var _0x1868b0={};var _0x6ee8a9;var _0x352308;return db['Automation'][_0xa40b('0x42')]({'where':{'id':_0x7dd207[_0xa40b('0x39')]['id']}})[_0xa40b('0x1b')](handleEntityNotFound(_0x2e21ae,null))[_0xa40b('0x1b')](function(_0x3570db){if(_0x3570db){_0x6ee8a9=_0x3570db;_0x1868b0[_0xa40b('0x24')]=_[_0xa40b('0x43')](db[_0xa40b('0x3d')][_0xa40b('0x23')]);_0x1868b0[_0xa40b('0x25')]=_[_0xa40b('0x43')](_0x7dd207['query']);_0x1868b0['filters']=_['intersection'](_0x1868b0[_0xa40b('0x24')],_0x1868b0[_0xa40b('0x25')]);_0x18319f['attributes']=_['intersection'](_0x1868b0[_0xa40b('0x24')],qs[_0xa40b('0x28')](_0x7dd207[_0xa40b('0x25')]['fields']));_0x18319f[_0xa40b('0x29')]=_0x18319f['attributes'][_0xa40b('0x2a')]?_0x18319f[_0xa40b('0x29')]:_0x1868b0[_0xa40b('0x24')];_0x18319f[_0xa40b('0x44')]=qs[_0xa40b('0x2b')](_0x7dd207[_0xa40b('0x25')]['sort']);_0x18319f[_0xa40b('0x2c')]=qs['filters'](_[_0xa40b('0x2d')](_0x7dd207[_0xa40b('0x25')],_0x1868b0[_0xa40b('0x26')]));if(_0x7dd207[_0xa40b('0x25')]['filter']){_0x18319f[_0xa40b('0x2c')]=_[_0xa40b('0x2e')](_0x18319f['where'],{'$or':_[_0xa40b('0x45')](_0x18319f['attributes'],function(_0x49be4e){var _0xed5c91={};_0xed5c91[_0x49be4e]={'$like':'%'+_0x7dd207[_0xa40b('0x25')][_0xa40b('0x32')]+'%'};return _0xed5c91;})});}_0x18319f=_[_0xa40b('0x2e')]({},_0x18319f,_0x7dd207[_0xa40b('0x46')]);return _0x6ee8a9[_0xa40b('0x41')](_0x18319f);}})[_0xa40b('0x1b')](function(_0x2a1e80){if(_0x2a1e80){_0x352308=_0x2a1e80[_0xa40b('0x2a')];if(!_0x7dd207[_0xa40b('0x25')][_0xa40b('0x47')](_0xa40b('0x48'))){_0x18319f[_0xa40b('0x15')]=qs[_0xa40b('0x15')](_0x7dd207[_0xa40b('0x25')]['limit']);_0x18319f[_0xa40b('0x14')]=qs[_0xa40b('0x14')](_0x7dd207[_0xa40b('0x25')][_0xa40b('0x14')]);}return _0x6ee8a9[_0xa40b('0x41')](_0x18319f);}})[_0xa40b('0x1b')](function(_0x2a99fa){if(_0x2a99fa){return _0x2a99fa?{'count':_0x352308,'rows':_0x2a99fa}:null;}})[_0xa40b('0x1b')](respondWithResult(_0x2e21ae,null))[_0xa40b('0x37')](handleError(_0x2e21ae,null));};exports['addActions']=function(_0x37c6b4,_0x40a599,_0x47e544){return db[_0xa40b('0x49')][_0xa40b('0x3a')]({'where':{'id':_0x37c6b4[_0xa40b('0x39')]['id']}})[_0xa40b('0x1b')](handleEntityNotFound(_0x40a599,null))['then'](function(_0x1f172b){if(_0x1f172b){return _0x1f172b[_0xa40b('0x4a')](_0x37c6b4[_0xa40b('0x3c')][_0xa40b('0x3f')],_[_0xa40b('0x40')](_0x37c6b4['body'],[_0xa40b('0x3f'),'id'])||{});}})[_0xa40b('0x1b')](respondWithResult(_0x40a599,null))[_0xa40b('0x37')](handleError(_0x40a599,null));};exports['getActions']=function(_0x1e1100,_0x37aa53,_0x4bbeb9){var _0x4e8fac={};var _0x4c7318={};var _0x57ad6c;var _0x4d6aa9;return db[_0xa40b('0x22')][_0xa40b('0x42')]({'where':{'id':_0x1e1100[_0xa40b('0x39')]['id']}})['then'](handleEntityNotFound(_0x37aa53,null))[_0xa40b('0x1b')](function(_0x2b959c){if(_0x2b959c){_0x57ad6c=_0x2b959c;_0x4c7318['model']=_['keys'](db[_0xa40b('0x49')][_0xa40b('0x23')]);_0x4c7318[_0xa40b('0x25')]=_['keys'](_0x1e1100[_0xa40b('0x25')]);_0x4c7318[_0xa40b('0x26')]=_[_0xa40b('0x27')](_0x4c7318[_0xa40b('0x24')],_0x4c7318[_0xa40b('0x25')]);_0x4e8fac[_0xa40b('0x29')]=_[_0xa40b('0x27')](_0x4c7318[_0xa40b('0x24')],qs[_0xa40b('0x28')](_0x1e1100[_0xa40b('0x25')][_0xa40b('0x28')]));_0x4e8fac['attributes']=_0x4e8fac[_0xa40b('0x29')][_0xa40b('0x2a')]?_0x4e8fac[_0xa40b('0x29')]:_0x4c7318['model'];_0x4e8fac[_0xa40b('0x44')]=qs[_0xa40b('0x2b')](_0x1e1100[_0xa40b('0x25')][_0xa40b('0x2b')]);_0x4e8fac['where']=qs[_0xa40b('0x26')](_[_0xa40b('0x2d')](_0x1e1100['query'],_0x4c7318[_0xa40b('0x26')]));if(_0x1e1100['query'][_0xa40b('0x32')]){_0x4e8fac['where']=_[_0xa40b('0x2e')](_0x4e8fac[_0xa40b('0x2c')],{'$or':_[_0xa40b('0x45')](_0x4e8fac['attributes'],function(_0x3cd7ed){var _0x48fd5b={};_0x48fd5b[_0x3cd7ed]={'$like':'%'+_0x1e1100[_0xa40b('0x25')][_0xa40b('0x32')]+'%'};return _0x48fd5b;})});}_0x4e8fac=_[_0xa40b('0x2e')]({},_0x4e8fac,_0x1e1100[_0xa40b('0x46')]);return _0x57ad6c[_0xa40b('0x4b')](_0x4e8fac);}})[_0xa40b('0x1b')](function(_0x17e0be){if(_0x17e0be){_0x4d6aa9=_0x17e0be[_0xa40b('0x2a')];if(!_0x1e1100['query'][_0xa40b('0x47')](_0xa40b('0x48'))){_0x4e8fac[_0xa40b('0x15')]=qs['limit'](_0x1e1100[_0xa40b('0x25')][_0xa40b('0x15')]);_0x4e8fac[_0xa40b('0x14')]=qs[_0xa40b('0x14')](_0x1e1100[_0xa40b('0x25')][_0xa40b('0x14')]);}return _0x57ad6c[_0xa40b('0x4b')](_0x4e8fac);}})['then'](function(_0xed02e3){if(_0xed02e3){return _0xed02e3?{'count':_0x4d6aa9,'rows':_0xed02e3}:null;}})[_0xa40b('0x1b')](respondWithResult(_0x37aa53,null))[_0xa40b('0x37')](handleError(_0x37aa53,null));};
\ No newline at end of file
+var _0x701b=['rawAttributes','find','create','body','params','addConditions','Condition','ids','getConditions','findOne','order','pick','addActions','getActions','Action','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','path','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','update','then','destroy','sendStatus','error','stack','name','send','Automation','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','filter','merge','map','type','field','options','includeAll','include','findAll','rows','catch','show'];(function(_0xc7c78d,_0x1dd9fb){var _0x175f3d=function(_0x1966cf){while(--_0x1966cf){_0xc7c78d['push'](_0xc7c78d['shift']());}};_0x175f3d(++_0x1dd9fb);}(_0x701b,0xa9));var _0xb701=function(_0x3992b8,_0x265071){_0x3992b8=_0x3992b8-0x0;var _0x2b8316=_0x701b[_0x3992b8];return _0x2b8316;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xb701('0x0'));var rimraf=require(_0xb701('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xb701('0x2'));var rp=require(_0xb701('0x3'));var moment=require(_0xb701('0x4'));var BPromise=require(_0xb701('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0xb701('0x6'));var sox=require('sox');var csv=require(_0xb701('0x7'));var ejs=require(_0xb701('0x8'));var fs=require('fs');var _=require(_0xb701('0x9'));var squel=require(_0xb701('0xa'));var crypto=require('crypto');var jsforce=require(_0xb701('0xb'));var deskjs=require(_0xb701('0xc'));var toCsv=require(_0xb701('0x7'));var querystring=require(_0xb701('0xd'));var Papa=require(_0xb701('0xe'));var authService=require(_0xb701('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xb701('0x10'));var qs=require(_0xb701('0x11'));var logger=require(_0xb701('0x12'))('api');var utils=require(_0xb701('0x13'));var config=require('../../config/environment');var db=require(_0xb701('0x14'))['db'];function respondWithStatusCode(_0x42feba,_0x349aa3){_0x349aa3=_0x349aa3||0xcc;return function(_0x562eca){if(_0x562eca){return _0x42feba['sendStatus'](_0x349aa3);}return _0x42feba[_0xb701('0x15')](_0x349aa3)[_0xb701('0x16')]();};}function respondWithResult(_0x27b145,_0x535bb5){_0x535bb5=_0x535bb5||0xc8;return function(_0x39002f){if(_0x39002f){return _0x27b145[_0xb701('0x15')](_0x535bb5)[_0xb701('0x17')](_0x39002f);}};}function respondWithFilteredResult(_0x4f470a,_0x4fe0b4){return function(_0x5ada7b){if(_0x5ada7b){var _0x5c01aa=_0x5ada7b[_0xb701('0x18')],_0x3b952f=_0x4fe0b4[_0xb701('0x19')],_0x1cef74=_0x4fe0b4[_0xb701('0x19')]+_0x4fe0b4[_0xb701('0x1a')],_0x4a43a8;if(_0x1cef74>=_0x5c01aa){_0x1cef74=_0x5c01aa;_0x4a43a8=0xc8;}else{_0x4a43a8=0xce;}_0x4f470a[_0xb701('0x15')](_0x4a43a8);return _0x4f470a[_0xb701('0x1b')](_0xb701('0x1c'),_0x3b952f+'-'+_0x1cef74+'/'+_0x5c01aa)['json'](_0x5ada7b);}return null;};}function patchUpdates(_0x19b07f){return function(_0x3814ff){try{jsonpatch['apply'](_0x3814ff,_0x19b07f,!![]);}catch(_0x84d51a){return BPromise['reject'](_0x84d51a);}return _0x3814ff['save']();};}function saveUpdates(_0x540724,_0x57ddfd){return function(_0x3b326b){if(_0x3b326b){return _0x3b326b[_0xb701('0x1d')](_0x540724)[_0xb701('0x1e')](function(_0x35f6e5){return _0x35f6e5;});}return null;};}function removeEntity(_0x2f170a,_0x39c9bd){return function(_0x51789a){if(_0x51789a){return _0x51789a[_0xb701('0x1f')]()['then'](function(){_0x2f170a[_0xb701('0x15')](0xcc)[_0xb701('0x16')]();});}};}function handleEntityNotFound(_0x87cf17,_0x29d22e){return function(_0x45e63c){if(!_0x45e63c){_0x87cf17[_0xb701('0x20')](0x194);}return _0x45e63c;};}function handleError(_0x2c5e06,_0x4e376d){_0x4e376d=_0x4e376d||0x1f4;return function(_0x3e782a){logger[_0xb701('0x21')](_0x3e782a[_0xb701('0x22')]);if(_0x3e782a[_0xb701('0x23')]){delete _0x3e782a[_0xb701('0x23')];}_0x2c5e06['status'](_0x4e376d)[_0xb701('0x24')](_0x3e782a);};}exports['index']=function(_0xe5b249,_0x5a8961){var _0x2df69a={},_0x29b278={},_0x584859={'count':0x0,'rows':[]};var _0x1dbf9e=db[_0xb701('0x25')]['rawAttributes'];_0x29b278[_0xb701('0x26')]=_[_0xb701('0x27')](_0x1dbf9e);_0x29b278[_0xb701('0x28')]=_[_0xb701('0x27')](_0xe5b249['query']);_0x29b278[_0xb701('0x29')]=_[_0xb701('0x2a')](_0x29b278['model'],_0x29b278['query']);_0x2df69a[_0xb701('0x2b')]=_['intersection'](_0x29b278[_0xb701('0x26')],qs[_0xb701('0x2c')](_0xe5b249[_0xb701('0x28')]['fields']));_0x2df69a[_0xb701('0x2b')]=_0x2df69a[_0xb701('0x2b')][_0xb701('0x2d')]?_0x2df69a['attributes']:_0x29b278[_0xb701('0x26')];if(!_0xe5b249['query'][_0xb701('0x2e')](_0xb701('0x2f'))){_0x2df69a[_0xb701('0x1a')]=qs['limit'](_0xe5b249[_0xb701('0x28')]['limit']);_0x2df69a[_0xb701('0x19')]=qs[_0xb701('0x19')](_0xe5b249[_0xb701('0x28')][_0xb701('0x19')]);}_0x2df69a['order']=qs['sort'](_0xe5b249[_0xb701('0x28')][_0xb701('0x30')]);_0x2df69a[_0xb701('0x31')]=qs[_0xb701('0x29')](_['pick'](_0xe5b249[_0xb701('0x28')],_0x29b278[_0xb701('0x29')]));if(_0xe5b249['query'][_0xb701('0x32')]){_0x2df69a[_0xb701('0x31')]=_[_0xb701('0x33')](_0x2df69a[_0xb701('0x31')],{'$or':_[_0xb701('0x34')](_0x1dbf9e,function(_0xabc539){if(_0xabc539[_0xb701('0x35')]['key']!=='VIRTUAL'){var _0x41d994={};_0x41d994[_0xabc539[_0xb701('0x36')]]={'$like':'%'+_0xe5b249[_0xb701('0x28')][_0xb701('0x32')]+'%'};return _0x41d994;}})});}_0x2df69a=_[_0xb701('0x33')]({},_0x2df69a,_0xe5b249[_0xb701('0x37')]);var _0x42403d={'where':_0x2df69a[_0xb701('0x31')]};return db[_0xb701('0x25')][_0xb701('0x18')](_0x42403d)[_0xb701('0x1e')](function(_0x56bac9){_0x584859[_0xb701('0x18')]=_0x56bac9;if(_0xe5b249[_0xb701('0x28')][_0xb701('0x38')]){_0x2df69a[_0xb701('0x39')]=[{'all':!![]}];}return db[_0xb701('0x25')][_0xb701('0x3a')](_0x2df69a);})[_0xb701('0x1e')](function(_0x2bcf04){_0x584859[_0xb701('0x3b')]=_0x2bcf04;return _0x584859;})[_0xb701('0x1e')](respondWithFilteredResult(_0x5a8961,_0x2df69a))[_0xb701('0x3c')](handleError(_0x5a8961,null));};exports[_0xb701('0x3d')]=function(_0x2c0632,_0x4a769a){var _0xaf709d={'raw':![],'where':{'id':_0x2c0632['params']['id']}},_0x3cf665={};_0x3cf665[_0xb701('0x26')]=_[_0xb701('0x27')](db[_0xb701('0x25')][_0xb701('0x3e')]);_0x3cf665[_0xb701('0x28')]=_[_0xb701('0x27')](_0x2c0632[_0xb701('0x28')]);_0x3cf665[_0xb701('0x29')]=_[_0xb701('0x2a')](_0x3cf665['model'],_0x3cf665[_0xb701('0x28')]);_0xaf709d[_0xb701('0x2b')]=_['intersection'](_0x3cf665[_0xb701('0x26')],qs[_0xb701('0x2c')](_0x2c0632[_0xb701('0x28')][_0xb701('0x2c')]));_0xaf709d[_0xb701('0x2b')]=_0xaf709d[_0xb701('0x2b')][_0xb701('0x2d')]?_0xaf709d[_0xb701('0x2b')]:_0x3cf665[_0xb701('0x26')];if(_0x2c0632[_0xb701('0x28')][_0xb701('0x38')]){_0xaf709d[_0xb701('0x39')]=[{'all':!![]}];}_0xaf709d=_[_0xb701('0x33')]({},_0xaf709d,_0x2c0632[_0xb701('0x37')]);return db['Automation'][_0xb701('0x3f')](_0xaf709d)[_0xb701('0x1e')](handleEntityNotFound(_0x4a769a,null))[_0xb701('0x1e')](respondWithResult(_0x4a769a,null))[_0xb701('0x3c')](handleError(_0x4a769a,null));};exports[_0xb701('0x40')]=function(_0x4e1d30,_0x2f402e){return db['Automation'][_0xb701('0x40')](_0x4e1d30[_0xb701('0x41')],{})[_0xb701('0x1e')](respondWithResult(_0x2f402e,0xc9))['catch'](handleError(_0x2f402e,null));};exports[_0xb701('0x1d')]=function(_0x1899f9,_0x1e13c3){if(_0x1899f9[_0xb701('0x41')]['id']){delete _0x1899f9['body']['id'];}return db[_0xb701('0x25')][_0xb701('0x3f')]({'where':{'id':_0x1899f9[_0xb701('0x42')]['id']}})['then'](handleEntityNotFound(_0x1e13c3,null))[_0xb701('0x1e')](saveUpdates(_0x1899f9[_0xb701('0x41')],null))['then'](respondWithResult(_0x1e13c3,null))[_0xb701('0x3c')](handleError(_0x1e13c3,null));};exports[_0xb701('0x1f')]=function(_0x293403,_0x28d747){return db['Automation'][_0xb701('0x3f')]({'where':{'id':_0x293403[_0xb701('0x42')]['id']}})[_0xb701('0x1e')](handleEntityNotFound(_0x28d747,null))['then'](removeEntity(_0x28d747,null))['catch'](handleError(_0x28d747,null));};exports[_0xb701('0x43')]=function(_0x263d44,_0x3e50de,_0x2a486a){return db[_0xb701('0x44')]['find']({'where':{'id':_0x263d44[_0xb701('0x42')]['id']}})['then'](handleEntityNotFound(_0x3e50de,null))[_0xb701('0x1e')](function(_0x499e08){if(_0x499e08){return _0x499e08[_0xb701('0x43')](_0x263d44['body'][_0xb701('0x45')],_['omit'](_0x263d44[_0xb701('0x41')],[_0xb701('0x45'),'id'])||{});}})[_0xb701('0x1e')](respondWithResult(_0x3e50de,null))['catch'](handleError(_0x3e50de,null));};exports[_0xb701('0x46')]=function(_0x1f9eae,_0x1a2ba3,_0x16f722){var _0x494535={};var _0x37d511={};var _0x32648c;var _0x30a337;return db[_0xb701('0x25')][_0xb701('0x47')]({'where':{'id':_0x1f9eae[_0xb701('0x42')]['id']}})[_0xb701('0x1e')](handleEntityNotFound(_0x1a2ba3,null))[_0xb701('0x1e')](function(_0x22fe7f){if(_0x22fe7f){_0x32648c=_0x22fe7f;_0x37d511['model']=_[_0xb701('0x27')](db['Condition'][_0xb701('0x3e')]);_0x37d511['query']=_[_0xb701('0x27')](_0x1f9eae[_0xb701('0x28')]);_0x37d511[_0xb701('0x29')]=_[_0xb701('0x2a')](_0x37d511['model'],_0x37d511[_0xb701('0x28')]);_0x494535[_0xb701('0x2b')]=_[_0xb701('0x2a')](_0x37d511[_0xb701('0x26')],qs[_0xb701('0x2c')](_0x1f9eae[_0xb701('0x28')]['fields']));_0x494535[_0xb701('0x2b')]=_0x494535['attributes']['length']?_0x494535[_0xb701('0x2b')]:_0x37d511[_0xb701('0x26')];_0x494535[_0xb701('0x48')]=qs[_0xb701('0x30')](_0x1f9eae['query']['sort']);_0x494535[_0xb701('0x31')]=qs['filters'](_[_0xb701('0x49')](_0x1f9eae[_0xb701('0x28')],_0x37d511['filters']));if(_0x1f9eae[_0xb701('0x28')][_0xb701('0x32')]){_0x494535[_0xb701('0x31')]=_['merge'](_0x494535[_0xb701('0x31')],{'$or':_['map'](_0x494535[_0xb701('0x2b')],function(_0x33852c){var _0x5c70a3={};_0x5c70a3[_0x33852c]={'$like':'%'+_0x1f9eae['query'][_0xb701('0x32')]+'%'};return _0x5c70a3;})});}_0x494535=_[_0xb701('0x33')]({},_0x494535,_0x1f9eae[_0xb701('0x37')]);return _0x32648c[_0xb701('0x46')](_0x494535);}})[_0xb701('0x1e')](function(_0x72ae0f){if(_0x72ae0f){_0x30a337=_0x72ae0f['length'];if(!_0x1f9eae[_0xb701('0x28')]['hasOwnProperty'](_0xb701('0x2f'))){_0x494535[_0xb701('0x1a')]=qs[_0xb701('0x1a')](_0x1f9eae['query'][_0xb701('0x1a')]);_0x494535[_0xb701('0x19')]=qs[_0xb701('0x19')](_0x1f9eae[_0xb701('0x28')][_0xb701('0x19')]);}return _0x32648c['getConditions'](_0x494535);}})['then'](function(_0x36befc){if(_0x36befc){return _0x36befc?{'count':_0x30a337,'rows':_0x36befc}:null;}})[_0xb701('0x1e')](respondWithResult(_0x1a2ba3,null))[_0xb701('0x3c')](handleError(_0x1a2ba3,null));};exports[_0xb701('0x4a')]=function(_0x3e824d,_0x3744d8,_0x3efc30){return db['Action'][_0xb701('0x3f')]({'where':{'id':_0x3e824d[_0xb701('0x42')]['id']}})[_0xb701('0x1e')](handleEntityNotFound(_0x3744d8,null))[_0xb701('0x1e')](function(_0x323d8b){if(_0x323d8b){return _0x323d8b[_0xb701('0x4a')](_0x3e824d[_0xb701('0x41')]['ids'],_['omit'](_0x3e824d['body'],[_0xb701('0x45'),'id'])||{});}})[_0xb701('0x1e')](respondWithResult(_0x3744d8,null))['catch'](handleError(_0x3744d8,null));};exports[_0xb701('0x4b')]=function(_0x2de20d,_0x43f493,_0x3aaf5a){var _0x4a7782={};var _0x286b9a={};var _0x4811f0;var _0x4d159d;return db[_0xb701('0x25')][_0xb701('0x47')]({'where':{'id':_0x2de20d[_0xb701('0x42')]['id']}})['then'](handleEntityNotFound(_0x43f493,null))[_0xb701('0x1e')](function(_0x4b0c6c){if(_0x4b0c6c){_0x4811f0=_0x4b0c6c;_0x286b9a['model']=_[_0xb701('0x27')](db[_0xb701('0x4c')][_0xb701('0x3e')]);_0x286b9a['query']=_[_0xb701('0x27')](_0x2de20d[_0xb701('0x28')]);_0x286b9a[_0xb701('0x29')]=_[_0xb701('0x2a')](_0x286b9a[_0xb701('0x26')],_0x286b9a[_0xb701('0x28')]);_0x4a7782[_0xb701('0x2b')]=_[_0xb701('0x2a')](_0x286b9a[_0xb701('0x26')],qs[_0xb701('0x2c')](_0x2de20d[_0xb701('0x28')][_0xb701('0x2c')]));_0x4a7782['attributes']=_0x4a7782[_0xb701('0x2b')][_0xb701('0x2d')]?_0x4a7782[_0xb701('0x2b')]:_0x286b9a['model'];_0x4a7782[_0xb701('0x48')]=qs['sort'](_0x2de20d[_0xb701('0x28')]['sort']);_0x4a7782[_0xb701('0x31')]=qs[_0xb701('0x29')](_[_0xb701('0x49')](_0x2de20d[_0xb701('0x28')],_0x286b9a[_0xb701('0x29')]));if(_0x2de20d[_0xb701('0x28')]['filter']){_0x4a7782[_0xb701('0x31')]=_['merge'](_0x4a7782[_0xb701('0x31')],{'$or':_[_0xb701('0x34')](_0x4a7782[_0xb701('0x2b')],function(_0x320a63){var _0xa6882a={};_0xa6882a[_0x320a63]={'$like':'%'+_0x2de20d[_0xb701('0x28')][_0xb701('0x32')]+'%'};return _0xa6882a;})});}_0x4a7782=_[_0xb701('0x33')]({},_0x4a7782,_0x2de20d[_0xb701('0x37')]);return _0x4811f0[_0xb701('0x4b')](_0x4a7782);}})[_0xb701('0x1e')](function(_0xfbd0f3){if(_0xfbd0f3){_0x4d159d=_0xfbd0f3['length'];if(!_0x2de20d['query'][_0xb701('0x2e')](_0xb701('0x2f'))){_0x4a7782[_0xb701('0x1a')]=qs['limit'](_0x2de20d[_0xb701('0x28')][_0xb701('0x1a')]);_0x4a7782[_0xb701('0x19')]=qs[_0xb701('0x19')](_0x2de20d[_0xb701('0x28')]['offset']);}return _0x4811f0[_0xb701('0x4b')](_0x4a7782);}})[_0xb701('0x1e')](function(_0x39ccd7){if(_0x39ccd7){return _0x39ccd7?{'count':_0x4d159d,'rows':_0x39ccd7}:null;}})[_0xb701('0x1e')](respondWithResult(_0x43f493,null))[_0xb701('0x3c')](handleError(_0x43f493,null));};
\ No newline at end of file
index 5cf9173..b3ab1a4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1b65=['bluebird','request-promise','./automation.attributes','exports','define','tools_automations','lodash','util','../../config/logger','api'];(function(_0x538378,_0xd08dbb){var _0x330472=function(_0x3b6dbb){while(--_0x3b6dbb){_0x538378['push'](_0x538378['shift']());}};_0x330472(++_0xd08dbb);}(_0x1b65,0x1b4));var _0x51b6=function(_0xb82c98,_0x4aff60){_0xb82c98=_0xb82c98-0x0;var _0x1ec3d1=_0x1b65[_0xb82c98];return _0x1ec3d1;};'use strict';var _=require(_0x51b6('0x0'));var util=require(_0x51b6('0x1'));var logger=require(_0x51b6('0x2'))(_0x51b6('0x3'));var moment=require('moment');var BPromise=require(_0x51b6('0x4'));var rp=require(_0x51b6('0x5'));var attributes=require(_0x51b6('0x6'));module[_0x51b6('0x7')]=function(_0x1a1c26,_0x1ba2e9){return _0x1a1c26[_0x51b6('0x8')]('Automation',attributes,{'tableName':_0x51b6('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x111b=['request-promise','./automation.attributes','exports','Automation','lodash','util','../../config/logger','moment'];(function(_0x54f4c9,_0x1c8650){var _0x117c37=function(_0x4f367d){while(--_0x4f367d){_0x54f4c9['push'](_0x54f4c9['shift']());}};_0x117c37(++_0x1c8650);}(_0x111b,0xec));var _0xb111=function(_0x348465,_0x50cfcc){_0x348465=_0x348465-0x0;var _0x5b537e=_0x111b[_0x348465];return _0x5b537e;};'use strict';var _=require(_0xb111('0x0'));var util=require(_0xb111('0x1'));var logger=require(_0xb111('0x2'))('api');var moment=require(_0xb111('0x3'));var BPromise=require('bluebird');var rp=require(_0xb111('0x4'));var attributes=require(_0xb111('0x5'));module[_0xb111('0x6')]=function(_0x237d0f,_0x1ac07f){return _0x237d0f['define'](_0xb111('0x7'),attributes,{'tableName':'tools_automations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 570b575..8b40a7a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc971=['util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','request','info','Automation,\x20%s,\x20%s','debug','stringify','error','code','message','request\x20sent','lodash'];(function(_0xbfd2d7,_0x270013){var _0x111e15=function(_0x141cf0){while(--_0x141cf0){_0xbfd2d7['push'](_0xbfd2d7['shift']());}};_0x111e15(++_0x270013);}(_0xc971,0x17b));var _0x1c97=function(_0x3054be,_0x1bdc8b){_0x3054be=_0x3054be-0x0;var _0x3df150=_0xc971[_0x3054be];return _0x3df150;};'use strict';var _=require(_0x1c97('0x0'));var util=require(_0x1c97('0x1'));var moment=require(_0x1c97('0x2'));var BPromise=require(_0x1c97('0x3'));var rs=require(_0x1c97('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1c97('0x5'))['db'];var utils=require(_0x1c97('0x6'));var logger=require(_0x1c97('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0x1c97('0x8'));var client=jayson[_0x1c97('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4a03ec,_0x1bc56d,_0x29006a){return new BPromise(function(_0x58f7f0,_0x211dff){return client[_0x1c97('0xa')](_0x4a03ec,_0x29006a)['then'](function(_0x1806d8){logger[_0x1c97('0xb')](_0x1c97('0xc'),_0x1bc56d,'request\x20sent');logger[_0x1c97('0xd')]('Automation,\x20%s,\x20%s,\x20%s',_0x1bc56d,'request\x20sent',JSON[_0x1c97('0xe')](_0x1806d8));if(_0x1806d8[_0x1c97('0xf')]){if(_0x1806d8['error'][_0x1c97('0x10')]===0x1f4){logger[_0x1c97('0xf')](_0x1c97('0xc'),_0x1bc56d,_0x1806d8[_0x1c97('0xf')]['message']);return _0x211dff(_0x1806d8[_0x1c97('0xf')][_0x1c97('0x11')]);}logger[_0x1c97('0xf')](_0x1c97('0xc'),_0x1bc56d,_0x1806d8[_0x1c97('0xf')][_0x1c97('0x11')]);return _0x58f7f0(_0x1806d8[_0x1c97('0xf')]['message']);}else{logger[_0x1c97('0xb')](_0x1c97('0xc'),_0x1bc56d,_0x1c97('0x12'));_0x58f7f0(_0x1806d8['result']['message']);}})['catch'](function(_0x59f8e4){logger[_0x1c97('0xf')](_0x1c97('0xc'),_0x1bc56d,_0x59f8e4);_0x211dff(_0x59f8e4);});});}
\ No newline at end of file
+var _0x5031=['then','info','Automation,\x20%s,\x20%s','request\x20sent','debug','Automation,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x20c447,_0x5a32b6){var _0x5974df=function(_0x57e2c4){while(--_0x57e2c4){_0x20c447['push'](_0x20c447['shift']());}};_0x5974df(++_0x5a32b6);}(_0x5031,0x144));var _0x1503=function(_0x33056a,_0x514f72){_0x33056a=_0x33056a-0x0;var _0x28445e=_0x5031[_0x33056a];return _0x28445e;};'use strict';var _=require(_0x1503('0x0'));var util=require(_0x1503('0x1'));var moment=require(_0x1503('0x2'));var BPromise=require(_0x1503('0x3'));var rs=require(_0x1503('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x1503('0x5'));var logger=require(_0x1503('0x6'))(_0x1503('0x7'));var config=require(_0x1503('0x8'));var jayson=require(_0x1503('0x9'));var client=jayson[_0x1503('0xa')][_0x1503('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x114bec,_0x2db96e,_0x4c93e7){return new BPromise(function(_0x2007d0,_0x2dddb6){return client['request'](_0x114bec,_0x4c93e7)[_0x1503('0xc')](function(_0x466900){logger[_0x1503('0xd')](_0x1503('0xe'),_0x2db96e,_0x1503('0xf'));logger[_0x1503('0x10')](_0x1503('0x11'),_0x2db96e,_0x1503('0xf'),JSON[_0x1503('0x12')](_0x466900));if(_0x466900[_0x1503('0x13')]){if(_0x466900['error'][_0x1503('0x14')]===0x1f4){logger[_0x1503('0x13')](_0x1503('0xe'),_0x2db96e,_0x466900[_0x1503('0x13')][_0x1503('0x15')]);return _0x2dddb6(_0x466900['error'][_0x1503('0x15')]);}logger[_0x1503('0x13')](_0x1503('0xe'),_0x2db96e,_0x466900[_0x1503('0x13')][_0x1503('0x15')]);return _0x2007d0(_0x466900[_0x1503('0x13')][_0x1503('0x15')]);}else{logger[_0x1503('0xd')](_0x1503('0xe'),_0x2db96e,_0x1503('0xf'));_0x2007d0(_0x466900[_0x1503('0x16')][_0x1503('0x15')]);}})[_0x1503('0x17')](function(_0x33dae9){logger[_0x1503('0x13')](_0x1503('0xe'),_0x2db96e,_0x33dae9);_0x2dddb6(_0x33dae9);});});}
\ No newline at end of file
index 1633911..8e9d666 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x10f4=['/:id/conditions','getConditions','getActions','post','create','addActions','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./automation.controller','get','/:id','isAuthenticated','show'];(function(_0xf62a4d,_0x16c026){var _0x446eb9=function(_0xb15497){while(--_0xb15497){_0xf62a4d['push'](_0xf62a4d['shift']());}};_0x446eb9(++_0x16c026);}(_0x10f4,0x77));var _0x410f=function(_0x51ee2c,_0x24ce75){_0x51ee2c=_0x51ee2c-0x0;var _0x5d76c2=_0x10f4[_0x51ee2c];return _0x5d76c2;};'use strict';var multer=require(_0x410f('0x0'));var util=require(_0x410f('0x1'));var path=require(_0x410f('0x2'));var timeout=require('connect-timeout');var express=require(_0x410f('0x3'));var router=express[_0x410f('0x4')]();var auth=require(_0x410f('0x5'));var interaction=require(_0x410f('0x6'));var config=require(_0x410f('0x7'));var controller=require(_0x410f('0x8'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x410f('0x9')](_0x410f('0xa'),auth[_0x410f('0xb')](),controller[_0x410f('0xc')]);router[_0x410f('0x9')](_0x410f('0xd'),auth['isAuthenticated'](),controller[_0x410f('0xe')]);router[_0x410f('0x9')]('/:id/actions',auth[_0x410f('0xb')](),controller[_0x410f('0xf')]);router[_0x410f('0x10')]('/',auth[_0x410f('0xb')](),controller[_0x410f('0x11')]);router[_0x410f('0x10')]('/:id/conditions',auth[_0x410f('0xb')](),controller['addConditions']);router[_0x410f('0x10')]('/:id/actions',auth['isAuthenticated'](),controller[_0x410f('0x12')]);router['put'](_0x410f('0xa'),auth['isAuthenticated'](),controller['update']);router[_0x410f('0x13')](_0x410f('0xa'),auth[_0x410f('0xb')](),controller[_0x410f('0x14')]);module[_0x410f('0x15')]=router;
\ No newline at end of file
+var _0xe0a8=['update','delete','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./automation.controller','get','index','/:id','show','/:id/conditions','isAuthenticated','getConditions','/:id/actions','getActions','post','create','addConditions','put'];(function(_0x154ec1,_0xd97348){var _0x1dec87=function(_0x5a6694){while(--_0x5a6694){_0x154ec1['push'](_0x154ec1['shift']());}};_0x1dec87(++_0xd97348);}(_0xe0a8,0x161));var _0x8e0a=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0xe0a8[_0x4565bf];return _0x5610ba;};'use strict';var multer=require('multer');var util=require(_0x8e0a('0x0'));var path=require(_0x8e0a('0x1'));var timeout=require(_0x8e0a('0x2'));var express=require(_0x8e0a('0x3'));var router=express[_0x8e0a('0x4')]();var auth=require(_0x8e0a('0x5'));var interaction=require(_0x8e0a('0x6'));var config=require(_0x8e0a('0x7'));var controller=require(_0x8e0a('0x8'));router[_0x8e0a('0x9')]('/',auth['isAuthenticated'](),controller[_0x8e0a('0xa')]);router[_0x8e0a('0x9')](_0x8e0a('0xb'),auth['isAuthenticated'](),controller[_0x8e0a('0xc')]);router['get'](_0x8e0a('0xd'),auth[_0x8e0a('0xe')](),controller[_0x8e0a('0xf')]);router[_0x8e0a('0x9')](_0x8e0a('0x10'),auth['isAuthenticated'](),controller[_0x8e0a('0x11')]);router[_0x8e0a('0x12')]('/',auth[_0x8e0a('0xe')](),controller[_0x8e0a('0x13')]);router['post']('/:id/conditions',auth[_0x8e0a('0xe')](),controller[_0x8e0a('0x14')]);router[_0x8e0a('0x12')](_0x8e0a('0x10'),auth[_0x8e0a('0xe')](),controller['addActions']);router[_0x8e0a('0x15')]('/:id',auth['isAuthenticated'](),controller[_0x8e0a('0x16')]);router[_0x8e0a('0x17')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x8e0a('0x18')]=router;
\ No newline at end of file
index 6a1e4a5..94d9bf9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3bb=['Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','ENUM','always','never','onlyIfOpen','BOOLEAN','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20After\x20Greeting\x20Silence','#AMD\x20Min\x20Word\x20Length','#AMD\x20Between\x20Words\x20Silence','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Maximum\x20Word\x20Length','DESC','ASC','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','sequelize','name','ivr','STRING','Active/Disactive\x20Campaign','INTEGER','Max\x20200\x20calls.','Originate\x20Timeout\x20Seconds\x20(min:1,\x20max:999)','UNSIGNED','#Congestion\x20Retry\x20(min:1,\x20max:999)','#Busy\x20Retry\x20(min:1,\x20max:999)'];(function(_0x556844,_0x1cccd1){var _0x589e3e=function(_0x303999){while(--_0x303999){_0x556844['push'](_0x556844['shift']());}};_0x589e3e(++_0x1cccd1);}(_0xf3bb,0xb9));var _0xbf3b=function(_0x2d9b01,_0x223b28){_0x2d9b01=_0x2d9b01-0x0;var _0x5cc833=_0xf3bb[_0x2d9b01];return _0x5cc833;};'use strict';var Sequelize=require(_0xbf3b('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'unique':_0xbf3b('0x1'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'type':{'type':Sequelize['ENUM'](_0xbf3b('0x2')),'allowNull':![],'defaultValue':_0xbf3b('0x2')},'description':{'type':Sequelize[_0xbf3b('0x3')]},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':_0xbf3b('0x4')},'limitCalls':{'type':Sequelize[_0xbf3b('0x5')](0x4)['UNSIGNED'],'defaultValue':0x1e,'validate':{'min':0x1,'max':0xc8},'comment':_0xbf3b('0x6')},'dialOriginateCallerIdName':{'type':Sequelize[_0xbf3b('0x3')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0xbf3b('0x3')]},'dialOriginateTimeout':{'type':Sequelize[_0xbf3b('0x5')](0x3)['UNSIGNED'],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0xbf3b('0x7')},'dialCongestionMaxRetry':{'type':Sequelize[_0xbf3b('0x5')](0x3)[_0xbf3b('0x8')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xbf3b('0x9')},'dialCongestionRetryFrequency':{'type':Sequelize[_0xbf3b('0x5')](0x5)[_0xbf3b('0x8')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialBusyMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0xbf3b('0x8')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xbf3b('0xa')},'dialBusyRetryFrequency':{'type':Sequelize['INTEGER'](0x5)[_0xbf3b('0x8')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xbf3b('0xb')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0xbf3b('0x5')](0x3)[_0xbf3b('0x8')],'defaultValue':0x3,'comment':'#NoAnswer\x20Retry\x20(min:1,\x20max:999)'},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0xbf3b('0x5')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xbf3b('0xc')},'dialGlobalMaxRetry':{'type':Sequelize[_0xbf3b('0x5')](0x3)[_0xbf3b('0x8')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':'#Global\x20Max\x20Retry\x20(min:1,\x20max:999)'},'dialTimezone':{'type':Sequelize[_0xbf3b('0x3')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize['STRING'],'defaultValue':'07:00-22:00,*,*,*'},'dialCheckDuplicateType':{'type':Sequelize[_0xbf3b('0xd')](_0xbf3b('0xe'),_0xbf3b('0xf'),_0xbf3b('0x10')),'defaultValue':_0xbf3b('0xe')},'dialAMDActive':{'type':Sequelize[_0xbf3b('0x11')],'defaultValue':0x0,'comment':'Active/Disactive\x20AMD'},'dialAMDInitialSilence':{'type':Sequelize['INTEGER'](0x9)[_0xbf3b('0x8')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0xbf3b('0x12')},'dialAMDGreeting':{'type':Sequelize[_0xbf3b('0x5')](0x9)[_0xbf3b('0x8')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0xbf3b('0x13')},'dialAMDAfterGreetingSilence':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x320,'validate':{'min':0x0},'comment':_0xbf3b('0x14')},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0xbf3b('0x5')](0x9)['UNSIGNED'],'defaultValue':0x1388,'validate':{'min':0x0},'comment':'#AMD\x20Total\x20Analysis\x20Time'},'dialAMDMinWordLength':{'type':Sequelize[_0xbf3b('0x5')](0x9)['UNSIGNED'],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0xbf3b('0x15')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0xbf3b('0x5')](0x9)['UNSIGNED'],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0xbf3b('0x16')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0xbf3b('0x5')](0x9)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0xbf3b('0x17')},'dialAMDSilenceThreshold':{'type':Sequelize[_0xbf3b('0x5')](0x5)[_0xbf3b('0x8')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':'#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)'},'dialAMDMaximumWordLength':{'type':Sequelize['INTEGER'](0x9)[_0xbf3b('0x8')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xbf3b('0x18')},'dialOrderByScheduledAt':{'type':Sequelize[_0xbf3b('0xd')](_0xbf3b('0x19'),_0xbf3b('0x1a')),'defaultValue':_0xbf3b('0x19')},'dialPrefix':{'type':Sequelize[_0xbf3b('0x3')],'defaultValue':null},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0xbf3b('0x5')](0x3)[_0xbf3b('0x8')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xbf3b('0x1b')},'dialCutDigit':{'type':Sequelize[_0xbf3b('0x5')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':'Cut\x20Digit\x20(min:1,\x20max:15)'}};
\ No newline at end of file
+var _0xb311=['Active/Disactive\x20AMD','#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','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','Cut\x20Digit\x20(min:1,\x20max:15)','exports','STRING','name','ENUM','ivr','BOOLEAN','Active/Disactive\x20Campaign','UNSIGNED','Max\x20200\x20calls.','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)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','never','always'];(function(_0x57a4ba,_0x301832){var _0x5c8a1f=function(_0x3ffd72){while(--_0x3ffd72){_0x57a4ba['push'](_0x57a4ba['shift']());}};_0x5c8a1f(++_0x301832);}(_0xb311,0xec));var _0x1b31=function(_0x6695d6,_0x19ba5f){_0x6695d6=_0x6695d6-0x0;var _0x446c46=_0xb311[_0x6695d6];return _0x446c46;};'use strict';var Sequelize=require('sequelize');module[_0x1b31('0x0')]={'name':{'type':Sequelize[_0x1b31('0x1')],'unique':_0x1b31('0x2'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'type':{'type':Sequelize[_0x1b31('0x3')](_0x1b31('0x4')),'allowNull':![],'defaultValue':'ivr'},'description':{'type':Sequelize[_0x1b31('0x1')]},'active':{'type':Sequelize[_0x1b31('0x5')],'defaultValue':0x0,'comment':_0x1b31('0x6')},'limitCalls':{'type':Sequelize['INTEGER'](0x4)[_0x1b31('0x7')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0xc8},'comment':_0x1b31('0x8')},'dialOriginateCallerIdName':{'type':Sequelize[_0x1b31('0x1')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0x1b31('0x1')]},'dialOriginateTimeout':{'type':Sequelize[_0x1b31('0x9')](0x3)[_0x1b31('0x7')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0x1b31('0xa')},'dialCongestionMaxRetry':{'type':Sequelize[_0x1b31('0x9')](0x3)[_0x1b31('0x7')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x1b31('0xb')},'dialCongestionRetryFrequency':{'type':Sequelize[_0x1b31('0x9')](0x5)[_0x1b31('0x7')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x1b31('0xc')},'dialBusyMaxRetry':{'type':Sequelize[_0x1b31('0x9')](0x3)[_0x1b31('0x7')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x1b31('0xd')},'dialBusyRetryFrequency':{'type':Sequelize[_0x1b31('0x9')](0x5)[_0x1b31('0x7')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialNoAnswerMaxRetry':{'type':Sequelize[_0x1b31('0x9')](0x3)[_0x1b31('0x7')],'defaultValue':0x3,'comment':_0x1b31('0xe')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x1b31('0x9')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x1b31('0xf')},'dialGlobalMaxRetry':{'type':Sequelize[_0x1b31('0x9')](0x3)[_0x1b31('0x7')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0x1b31('0x10')},'dialTimezone':{'type':Sequelize[_0x1b31('0x1')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0x1b31('0x1')],'defaultValue':_0x1b31('0x11')},'dialCheckDuplicateType':{'type':Sequelize[_0x1b31('0x3')]('always',_0x1b31('0x12'),'onlyIfOpen'),'defaultValue':_0x1b31('0x13')},'dialAMDActive':{'type':Sequelize[_0x1b31('0x5')],'defaultValue':0x0,'comment':_0x1b31('0x14')},'dialAMDInitialSilence':{'type':Sequelize[_0x1b31('0x9')](0x9)[_0x1b31('0x7')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0x1b31('0x15')},'dialAMDGreeting':{'type':Sequelize[_0x1b31('0x9')](0x9)[_0x1b31('0x7')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0x1b31('0x16')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0x1b31('0x9')](0x9)[_0x1b31('0x7')],'defaultValue':0x320,'validate':{'min':0x0},'comment':'#AMD\x20After\x20Greeting\x20Silence'},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0x1b31('0x9')](0x9)[_0x1b31('0x7')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x1b31('0x17')},'dialAMDMinWordLength':{'type':Sequelize['INTEGER'](0x9)[_0x1b31('0x7')],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x1b31('0x18')},'dialAMDBetweenWordsSilence':{'type':Sequelize['INTEGER'](0x9)[_0x1b31('0x7')],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0x1b31('0x19')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0x1b31('0x9')](0x9)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0x1b31('0x1a')},'dialAMDSilenceThreshold':{'type':Sequelize[_0x1b31('0x9')](0x5)['UNSIGNED'],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0x1b31('0x1b')},'dialAMDMaximumWordLength':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x1b31('0x1c')},'dialOrderByScheduledAt':{'type':Sequelize['ENUM']('DESC','ASC'),'defaultValue':_0x1b31('0x1d')},'dialPrefix':{'type':Sequelize['STRING'],'defaultValue':null},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize['INTEGER'](0x3)[_0x1b31('0x7')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x1b31('0x1e')},'dialCutDigit':{'type':Sequelize[_0x1b31('0x9')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x1b31('0x1f')}};
\ No newline at end of file
index 13163f3..8aa314d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4bcf=['request-promise','moment','bluebird','mustache','util','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','limit','set','Content-Range','apply','save','update','IvrCampaigns','destroy','then','error','name','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','order','sort','where','filters','merge','map','type','key','VIRTUAL','field','options','Campaign','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','omit','updatedAt','createdAt','UserProfileResource','getHoppers','findOne','CmHopper','hasOwnProperty','CampaignId','filter','getHopperHistories','pick','CmHopperHistory','getHopperFinals','CmHopperFinal','getHopperBlacks','CmHopperBlack','getLists','ids','dialCheckDuplicateType','always','insert','cm_hopper','fromQuery','phone','scheduledAt','ContactId','select','CmListId','toString','ListId','NOW()','from','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','COALESCE(calleridnum,\x27\x27)','cm_hopper_final','COALESCE(phone,\x27\x27)','CampaignId\x20=\x20?','onlyIfOpen','into','sequelize','all','removeLists','CmList','addBlackLists','spread','cm_hopper_black','push','removeBlackLists','html-pdf','eml-format','rimraf','fast-json-patch'];(function(_0x4b73a2,_0x40b5fe){var _0x383c66=function(_0x3917ae){while(--_0x3917ae){_0x4b73a2['push'](_0x4b73a2['shift']());}};_0x383c66(++_0x40b5fe);}(_0x4bcf,0x188));var _0xf4bc=function(_0x1c5142,_0x30ea72){_0x1c5142=_0x1c5142-0x0;var _0x1268cb=_0x4bcf[_0x1c5142];return _0x1268cb;};'use strict';var pdf=require(_0xf4bc('0x0'));var emlformat=require(_0xf4bc('0x1'));var rimraf=require(_0xf4bc('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xf4bc('0x3'));var rp=require(_0xf4bc('0x4'));var moment=require(_0xf4bc('0x5'));var BPromise=require(_0xf4bc('0x6'));var Mustache=require(_0xf4bc('0x7'));var util=require(_0xf4bc('0x8'));var path=require('path');var sox=require('sox');var csv=require(_0xf4bc('0x9'));var ejs=require(_0xf4bc('0xa'));var fs=require('fs');var _=require(_0xf4bc('0xb'));var squel=require(_0xf4bc('0xc'));var crypto=require(_0xf4bc('0xd'));var jsforce=require(_0xf4bc('0xe'));var deskjs=require(_0xf4bc('0xf'));var toCsv=require(_0xf4bc('0x9'));var querystring=require('querystring');var Papa=require(_0xf4bc('0x10'));var authService=require(_0xf4bc('0x11'));var hardwareService=require(_0xf4bc('0x12'));var Redis=require(_0xf4bc('0x13'));var qs=require(_0xf4bc('0x14'));var logger=require(_0xf4bc('0x15'))('api');var utils=require(_0xf4bc('0x16'));var config=require(_0xf4bc('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2a92dd,_0x4091e1){_0x4091e1=_0x4091e1||0xcc;return function(_0x1b8087){if(_0x1b8087){return _0x2a92dd[_0xf4bc('0x18')](_0x4091e1);}return _0x2a92dd[_0xf4bc('0x19')](_0x4091e1)[_0xf4bc('0x1a')]();};}function respondWithResult(_0x1c87eb,_0x2a60a4){_0x2a60a4=_0x2a60a4||0xc8;return function(_0x6c531){if(_0x6c531){return _0x1c87eb[_0xf4bc('0x19')](_0x2a60a4)['json'](_0x6c531);}};}function respondWithFilteredResult(_0x4b1bb9,_0x434aaf){return function(_0x46df86){if(_0x46df86){var _0x313e22=_0x46df86[_0xf4bc('0x1b')],_0x115fa3=_0x434aaf[_0xf4bc('0x1c')],_0x52f155=_0x434aaf[_0xf4bc('0x1c')]+_0x434aaf[_0xf4bc('0x1d')],_0x251371;if(_0x52f155>=_0x313e22){_0x52f155=_0x313e22;_0x251371=0xc8;}else{_0x251371=0xce;}_0x4b1bb9[_0xf4bc('0x19')](_0x251371);return _0x4b1bb9[_0xf4bc('0x1e')](_0xf4bc('0x1f'),_0x115fa3+'-'+_0x52f155+'/'+_0x313e22)['json'](_0x46df86);}return null;};}function patchUpdates(_0xe75baa){return function(_0x226d26){try{jsonpatch[_0xf4bc('0x20')](_0x226d26,_0xe75baa,!![]);}catch(_0x4e598d){return BPromise['reject'](_0x4e598d);}return _0x226d26[_0xf4bc('0x21')]();};}function saveUpdates(_0x2aee05,_0x3464b3){return function(_0x5d5ece){if(_0x5d5ece){return _0x5d5ece[_0xf4bc('0x22')](_0x2aee05)['then'](function(_0x495f32){return _0x495f32;});}return null;};}function removeEntity(_0x3821dc,_0x2f800d){return function(_0x18058c){if(_0x18058c){return _0x18058c['destroy']()['then'](function(){var _0x51773c=_0x18058c['get']({'plain':!![]});var _0x53dc59=_0xf4bc('0x23');return db['UserProfileResource'][_0xf4bc('0x24')]({'where':{'type':_0x53dc59,'resourceId':_0x51773c['id']}})[_0xf4bc('0x25')](function(){return _0x18058c;});})[_0xf4bc('0x25')](function(){_0x3821dc[_0xf4bc('0x19')](0xcc)[_0xf4bc('0x1a')]();});}};}function handleEntityNotFound(_0x50d076,_0x15269d){return function(_0x32878d){if(!_0x32878d){_0x50d076[_0xf4bc('0x18')](0x194);}return _0x32878d;};}function handleError(_0x209183,_0x282161){_0x282161=_0x282161||0x1f4;return function(_0x5794ca){logger[_0xf4bc('0x26')](_0x5794ca['stack']);if(_0x5794ca[_0xf4bc('0x27')]){delete _0x5794ca[_0xf4bc('0x27')];}_0x209183[_0xf4bc('0x19')](_0x282161)['send'](_0x5794ca);};}exports['index']=function(_0x20a328,_0x168124){var _0x3513ab={},_0xc1f8ae={},_0x883aea={'count':0x0,'rows':[]};var _0x11e556=db['Campaign'][_0xf4bc('0x28')];_0xc1f8ae[_0xf4bc('0x29')]=_[_0xf4bc('0x2a')](_0x11e556);_0xc1f8ae[_0xf4bc('0x2b')]=_[_0xf4bc('0x2a')](_0x20a328['query']);_0xc1f8ae['filters']=_[_0xf4bc('0x2c')](_0xc1f8ae[_0xf4bc('0x29')],_0xc1f8ae[_0xf4bc('0x2b')]);_0x3513ab[_0xf4bc('0x2d')]=_[_0xf4bc('0x2c')](_0xc1f8ae[_0xf4bc('0x29')],qs[_0xf4bc('0x2e')](_0x20a328[_0xf4bc('0x2b')][_0xf4bc('0x2e')]));_0x3513ab[_0xf4bc('0x2d')]=_0x3513ab['attributes'][_0xf4bc('0x2f')]?_0x3513ab[_0xf4bc('0x2d')]:_0xc1f8ae['model'];if(!_0x20a328[_0xf4bc('0x2b')]['hasOwnProperty'](_0xf4bc('0x30'))){_0x3513ab['limit']=qs[_0xf4bc('0x1d')](_0x20a328['query']['limit']);_0x3513ab[_0xf4bc('0x1c')]=qs[_0xf4bc('0x1c')](_0x20a328['query'][_0xf4bc('0x1c')]);}_0x3513ab[_0xf4bc('0x31')]=qs['sort'](_0x20a328['query'][_0xf4bc('0x32')]);_0x3513ab[_0xf4bc('0x33')]=qs[_0xf4bc('0x34')](_['pick'](_0x20a328[_0xf4bc('0x2b')],_0xc1f8ae['filters']));if(_0x20a328[_0xf4bc('0x2b')]['filter']){_0x3513ab[_0xf4bc('0x33')]=_[_0xf4bc('0x35')](_0x3513ab[_0xf4bc('0x33')],{'$or':_[_0xf4bc('0x36')](_0x11e556,function(_0x41be6){if(_0x41be6[_0xf4bc('0x37')][_0xf4bc('0x38')]!==_0xf4bc('0x39')){var _0x2fc0a1={};_0x2fc0a1[_0x41be6[_0xf4bc('0x3a')]]={'$like':'%'+_0x20a328[_0xf4bc('0x2b')]['filter']+'%'};return _0x2fc0a1;}})});}_0x3513ab=_[_0xf4bc('0x35')]({},_0x3513ab,_0x20a328[_0xf4bc('0x3b')]);var _0x1b5608={'where':_0x3513ab[_0xf4bc('0x33')]};return db[_0xf4bc('0x3c')][_0xf4bc('0x1b')](_0x1b5608)[_0xf4bc('0x25')](function(_0x4e6768){_0x883aea[_0xf4bc('0x1b')]=_0x4e6768;if(_0x20a328['query'][_0xf4bc('0x3d')]){_0x3513ab[_0xf4bc('0x3e')]=[{'all':!![]}];}return db[_0xf4bc('0x3c')][_0xf4bc('0x3f')](_0x3513ab);})[_0xf4bc('0x25')](function(_0x287af6){_0x883aea[_0xf4bc('0x40')]=_0x287af6;return _0x883aea;})[_0xf4bc('0x25')](respondWithFilteredResult(_0x168124,_0x3513ab))[_0xf4bc('0x41')](handleError(_0x168124,null));};exports[_0xf4bc('0x42')]=function(_0x425d93,_0x13fbeb){var _0x48bac5={'raw':![],'where':{'id':_0x425d93[_0xf4bc('0x43')]['id']}},_0x367cfb={};_0x367cfb[_0xf4bc('0x29')]=_[_0xf4bc('0x2a')](db[_0xf4bc('0x3c')][_0xf4bc('0x28')]);_0x367cfb[_0xf4bc('0x2b')]=_[_0xf4bc('0x2a')](_0x425d93[_0xf4bc('0x2b')]);_0x367cfb[_0xf4bc('0x34')]=_[_0xf4bc('0x2c')](_0x367cfb[_0xf4bc('0x29')],_0x367cfb[_0xf4bc('0x2b')]);_0x48bac5[_0xf4bc('0x2d')]=_[_0xf4bc('0x2c')](_0x367cfb[_0xf4bc('0x29')],qs[_0xf4bc('0x2e')](_0x425d93['query'][_0xf4bc('0x2e')]));_0x48bac5[_0xf4bc('0x2d')]=_0x48bac5[_0xf4bc('0x2d')][_0xf4bc('0x2f')]?_0x48bac5['attributes']:_0x367cfb[_0xf4bc('0x29')];if(_0x425d93['query'][_0xf4bc('0x3d')]){_0x48bac5['include']=[{'all':!![]}];}_0x48bac5=_[_0xf4bc('0x35')]({},_0x48bac5,_0x425d93['options']);return db[_0xf4bc('0x3c')][_0xf4bc('0x44')](_0x48bac5)[_0xf4bc('0x25')](handleEntityNotFound(_0x13fbeb,null))[_0xf4bc('0x25')](respondWithResult(_0x13fbeb,null))['catch'](handleError(_0x13fbeb,null));};exports[_0xf4bc('0x45')]=function(_0x449b5f,_0x16b007){return db[_0xf4bc('0x3c')][_0xf4bc('0x45')](_0x449b5f[_0xf4bc('0x46')],{})[_0xf4bc('0x25')](function(_0x4571c6){var _0x48aa9a=_0x449b5f[_0xf4bc('0x47')][_0xf4bc('0x48')]({'plain':!![]});if(!_0x48aa9a)throw new Error(_0xf4bc('0x49'));if(_0x48aa9a[_0xf4bc('0x4a')]===_0xf4bc('0x47')){var _0x3869bd=_0x4571c6[_0xf4bc('0x48')]({'plain':!![]});var _0x470ebe=_0xf4bc('0x23');return db[_0xf4bc('0x4b')][_0xf4bc('0x44')]({'where':{'name':_0x470ebe,'userProfileId':_0x48aa9a[_0xf4bc('0x4c')]},'raw':!![]})['then'](function(_0x207a52){if(_0x207a52&&_0x207a52[_0xf4bc('0x4d')]===0x0){return db['UserProfileResource'][_0xf4bc('0x45')]({'name':_0x3869bd[_0xf4bc('0x27')],'resourceId':_0x3869bd['id'],'type':_0x207a52[_0xf4bc('0x27')],'sectionId':_0x207a52['id']},{})[_0xf4bc('0x25')](function(){return _0x4571c6;});}else{return _0x4571c6;}})[_0xf4bc('0x41')](function(_0x51e100){logger[_0xf4bc('0x26')](_0xf4bc('0x4e'),_0x51e100);throw _0x51e100;});}return _0x4571c6;})[_0xf4bc('0x25')](respondWithResult(_0x16b007,0xc9))[_0xf4bc('0x41')](handleError(_0x16b007,null));};exports['clone']=function(_0x5e6693,_0x17287a){var _0x6345c1={'raw':![],'where':{'id':_0x5e6693[_0xf4bc('0x43')]['id']}},_0x55f717={};_0x55f717['model']=_['keys'](db[_0xf4bc('0x3c')][_0xf4bc('0x28')]);_0x6345c1['attributes']=_[_0xf4bc('0x2c')](_0x55f717['model'],qs[_0xf4bc('0x2e')](_0x5e6693[_0xf4bc('0x2b')][_0xf4bc('0x2e')]));_0x6345c1['attributes']=_0x6345c1['attributes'][_0xf4bc('0x2f')]?_0x6345c1['attributes']:_0x55f717[_0xf4bc('0x29')];if(_0x5e6693[_0xf4bc('0x2b')]['includeAll']){_0x6345c1[_0xf4bc('0x3e')]=[{'all':!![]}];}_0x6345c1=_[_0xf4bc('0x35')]({},_0x6345c1,_0x5e6693[_0xf4bc('0x3b')]);return db[_0xf4bc('0x3c')][_0xf4bc('0x44')](_0x6345c1)['then'](handleEntityNotFound(_0x17287a,null))[_0xf4bc('0x25')](function(_0x4fbc9e){if(_0x4fbc9e){var _0x50e312=_0x4fbc9e[_0xf4bc('0x48')]({'plain':!![]});_0x50e312=qs[_0xf4bc('0x4f')](_0x50e312,['id','createdAt',_0xf4bc('0x50')]);_0x5e6693[_0xf4bc('0x46')]=_[_0xf4bc('0x4f')](_0x5e6693[_0xf4bc('0x46')],['id',_0xf4bc('0x51'),_0xf4bc('0x50')]);return db[_0xf4bc('0x3c')][_0xf4bc('0x45')](_[_0xf4bc('0x35')](_0x50e312,_0x5e6693[_0xf4bc('0x46')]),{'include':_0x5e6693[_0xf4bc('0x2b')][_0xf4bc('0x3d')]?[{'all':!![]}]:undefined})[_0xf4bc('0x25')](function(_0x58cb36){var _0x35bae7=_0x5e6693[_0xf4bc('0x47')][_0xf4bc('0x48')]({'plain':!![]});if(!_0x35bae7)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x35bae7[_0xf4bc('0x4a')]===_0xf4bc('0x47')){var _0x313daa=_0x58cb36['get']({'plain':!![]});var _0x390bb0=_0xf4bc('0x23');return db['UserProfileSection']['find']({'where':{'name':_0x390bb0,'userProfileId':_0x35bae7[_0xf4bc('0x4c')]},'raw':!![]})[_0xf4bc('0x25')](function(_0xfde022){if(_0xfde022&&_0xfde022[_0xf4bc('0x4d')]===0x0){return db[_0xf4bc('0x52')][_0xf4bc('0x45')]({'name':_0x313daa['name'],'resourceId':_0x313daa['id'],'type':_0xfde022[_0xf4bc('0x27')],'sectionId':_0xfde022['id']},{})[_0xf4bc('0x25')](function(){return _0x58cb36;});}else{return _0x58cb36;}})['catch'](function(_0x53af44){logger[_0xf4bc('0x26')](_0xf4bc('0x4e'),_0x53af44);throw _0x53af44;});}return _0x58cb36;});}})[_0xf4bc('0x25')](respondWithResult(_0x17287a,0xc9))[_0xf4bc('0x41')](handleError(_0x17287a,null));};exports[_0xf4bc('0x22')]=function(_0x44d69b,_0x541f0a){if(_0x44d69b[_0xf4bc('0x46')]['id']){delete _0x44d69b['body']['id'];}return db[_0xf4bc('0x3c')][_0xf4bc('0x44')]({'where':{'id':_0x44d69b[_0xf4bc('0x43')]['id']}})['then'](handleEntityNotFound(_0x541f0a,null))[_0xf4bc('0x25')](saveUpdates(_0x44d69b['body'],null))[_0xf4bc('0x25')](respondWithResult(_0x541f0a,null))[_0xf4bc('0x41')](handleError(_0x541f0a,null));};exports[_0xf4bc('0x24')]=function(_0x4ee3f2,_0x49626b){return db[_0xf4bc('0x3c')]['find']({'where':{'id':_0x4ee3f2[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x49626b,null))[_0xf4bc('0x25')](removeEntity(_0x49626b,null))[_0xf4bc('0x41')](handleError(_0x49626b,null));};exports[_0xf4bc('0x53')]=function(_0xc9b3d,_0xd08651,_0x266315){var _0x1bbefc={'raw':!![],'where':{}};var _0xdcfb93={};var _0x978fa={'count':0x0,'rows':[]};return db['Campaign'][_0xf4bc('0x54')]({'where':{'id':_0xc9b3d['params']['id']}})['then'](handleEntityNotFound(_0xd08651,null))[_0xf4bc('0x25')](function(_0x47f574){if(_0x47f574){_0xdcfb93[_0xf4bc('0x29')]=_[_0xf4bc('0x2a')](db[_0xf4bc('0x55')][_0xf4bc('0x28')]);_0xdcfb93['query']=_[_0xf4bc('0x2a')](_0xc9b3d[_0xf4bc('0x2b')]);_0xdcfb93[_0xf4bc('0x34')]=_['intersection'](_0xdcfb93[_0xf4bc('0x29')],_0xdcfb93[_0xf4bc('0x2b')]);_0x1bbefc[_0xf4bc('0x2d')]=_['intersection'](_0xdcfb93[_0xf4bc('0x29')],qs['fields'](_0xc9b3d[_0xf4bc('0x2b')][_0xf4bc('0x2e')]));_0x1bbefc[_0xf4bc('0x2d')]=_0x1bbefc['attributes'][_0xf4bc('0x2f')]?_0x1bbefc[_0xf4bc('0x2d')]:_0xdcfb93[_0xf4bc('0x29')];if(!_0xc9b3d[_0xf4bc('0x2b')][_0xf4bc('0x56')](_0xf4bc('0x30'))){_0x1bbefc[_0xf4bc('0x1d')]=qs[_0xf4bc('0x1d')](_0xc9b3d[_0xf4bc('0x2b')][_0xf4bc('0x1d')]);_0x1bbefc['offset']=qs['offset'](_0xc9b3d[_0xf4bc('0x2b')][_0xf4bc('0x1c')]);}_0x1bbefc[_0xf4bc('0x31')]=qs[_0xf4bc('0x32')](_0xc9b3d[_0xf4bc('0x2b')][_0xf4bc('0x32')]);_0x1bbefc[_0xf4bc('0x33')]=qs[_0xf4bc('0x34')](_['pick'](_0xc9b3d[_0xf4bc('0x2b')],_0xdcfb93[_0xf4bc('0x34')]));_0x1bbefc[_0xf4bc('0x33')][_0xf4bc('0x57')]=_0x47f574['id'];if(_0xc9b3d['query']['filter']){_0x1bbefc[_0xf4bc('0x33')]=_['merge'](_0x1bbefc['where'],{'$or':_['map'](_0x1bbefc[_0xf4bc('0x2d')],function(_0x1f6a05){var _0x218ce7={};_0x218ce7[_0x1f6a05]={'$like':'%'+_0xc9b3d[_0xf4bc('0x2b')][_0xf4bc('0x58')]+'%'};return _0x218ce7;})});}_0x1bbefc=_[_0xf4bc('0x35')]({},_0x1bbefc,_0xc9b3d['options']);return db[_0xf4bc('0x55')][_0xf4bc('0x1b')]({'where':_0x1bbefc['where']})[_0xf4bc('0x25')](function(_0x513233){_0x978fa[_0xf4bc('0x1b')]=_0x513233;if(_0xc9b3d['query']['includeAll']){_0x1bbefc['include']=[{'all':!![]}];}return db[_0xf4bc('0x55')][_0xf4bc('0x3f')](_0x1bbefc);})['then'](function(_0x5d328e){_0x978fa[_0xf4bc('0x40')]=_0x5d328e;return _0x978fa;});}})[_0xf4bc('0x25')](respondWithFilteredResult(_0xd08651,_0x1bbefc))['catch'](handleError(_0xd08651,null));};exports[_0xf4bc('0x59')]=function(_0x24e424,_0x7a0a88,_0x441875){var _0x120ef1={'raw':!![],'where':{}};var _0x46d20c={};var _0x7ea513={'count':0x0,'rows':[]};return db[_0xf4bc('0x3c')][_0xf4bc('0x54')]({'where':{'id':_0x24e424[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x7a0a88,null))[_0xf4bc('0x25')](function(_0x198623){if(_0x198623){_0x46d20c['model']=_[_0xf4bc('0x2a')](db['CmHopperHistory'][_0xf4bc('0x28')]);_0x46d20c[_0xf4bc('0x2b')]=_[_0xf4bc('0x2a')](_0x24e424[_0xf4bc('0x2b')]);_0x46d20c['filters']=_[_0xf4bc('0x2c')](_0x46d20c[_0xf4bc('0x29')],_0x46d20c[_0xf4bc('0x2b')]);_0x120ef1['attributes']=_[_0xf4bc('0x2c')](_0x46d20c[_0xf4bc('0x29')],qs[_0xf4bc('0x2e')](_0x24e424[_0xf4bc('0x2b')][_0xf4bc('0x2e')]));_0x120ef1['attributes']=_0x120ef1[_0xf4bc('0x2d')]['length']?_0x120ef1['attributes']:_0x46d20c['model'];if(!_0x24e424[_0xf4bc('0x2b')][_0xf4bc('0x56')](_0xf4bc('0x30'))){_0x120ef1[_0xf4bc('0x1d')]=qs[_0xf4bc('0x1d')](_0x24e424[_0xf4bc('0x2b')][_0xf4bc('0x1d')]);_0x120ef1['offset']=qs['offset'](_0x24e424['query'][_0xf4bc('0x1c')]);}_0x120ef1['order']=qs['sort'](_0x24e424[_0xf4bc('0x2b')][_0xf4bc('0x32')]);_0x120ef1[_0xf4bc('0x33')]=qs['filters'](_[_0xf4bc('0x5a')](_0x24e424[_0xf4bc('0x2b')],_0x46d20c[_0xf4bc('0x34')]));_0x120ef1['where'][_0xf4bc('0x57')]=_0x198623['id'];if(_0x24e424[_0xf4bc('0x2b')]['filter']){_0x120ef1[_0xf4bc('0x33')]=_[_0xf4bc('0x35')](_0x120ef1[_0xf4bc('0x33')],{'$or':_[_0xf4bc('0x36')](_0x120ef1['attributes'],function(_0x58269c){var _0x8393e4={};_0x8393e4[_0x58269c]={'$like':'%'+_0x24e424[_0xf4bc('0x2b')]['filter']+'%'};return _0x8393e4;})});}_0x120ef1=_[_0xf4bc('0x35')]({},_0x120ef1,_0x24e424['options']);return db[_0xf4bc('0x5b')][_0xf4bc('0x1b')]({'where':_0x120ef1[_0xf4bc('0x33')]})[_0xf4bc('0x25')](function(_0x114dc5){_0x7ea513[_0xf4bc('0x1b')]=_0x114dc5;if(_0x24e424[_0xf4bc('0x2b')][_0xf4bc('0x3d')]){_0x120ef1[_0xf4bc('0x3e')]=[{'all':!![]}];}return db[_0xf4bc('0x5b')][_0xf4bc('0x3f')](_0x120ef1);})[_0xf4bc('0x25')](function(_0x51b564){_0x7ea513['rows']=_0x51b564;return _0x7ea513;});}})[_0xf4bc('0x25')](respondWithFilteredResult(_0x7a0a88,_0x120ef1))['catch'](handleError(_0x7a0a88,null));};exports[_0xf4bc('0x5c')]=function(_0xc7fcf9,_0x9f03b5,_0x2cfe2c){var _0x4c44a5={'raw':!![],'where':{}};var _0x364c44={};var _0x45bdf6={'count':0x0,'rows':[]};return db[_0xf4bc('0x3c')]['findOne']({'where':{'id':_0xc7fcf9[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x9f03b5,null))[_0xf4bc('0x25')](function(_0x273352){if(_0x273352){_0x364c44[_0xf4bc('0x29')]=_[_0xf4bc('0x2a')](db[_0xf4bc('0x5d')]['rawAttributes']);_0x364c44[_0xf4bc('0x2b')]=_[_0xf4bc('0x2a')](_0xc7fcf9['query']);_0x364c44[_0xf4bc('0x34')]=_[_0xf4bc('0x2c')](_0x364c44[_0xf4bc('0x29')],_0x364c44[_0xf4bc('0x2b')]);_0x4c44a5['attributes']=_[_0xf4bc('0x2c')](_0x364c44['model'],qs[_0xf4bc('0x2e')](_0xc7fcf9[_0xf4bc('0x2b')][_0xf4bc('0x2e')]));_0x4c44a5[_0xf4bc('0x2d')]=_0x4c44a5[_0xf4bc('0x2d')][_0xf4bc('0x2f')]?_0x4c44a5[_0xf4bc('0x2d')]:_0x364c44[_0xf4bc('0x29')];if(!_0xc7fcf9[_0xf4bc('0x2b')][_0xf4bc('0x56')](_0xf4bc('0x30'))){_0x4c44a5[_0xf4bc('0x1d')]=qs['limit'](_0xc7fcf9['query']['limit']);_0x4c44a5['offset']=qs[_0xf4bc('0x1c')](_0xc7fcf9[_0xf4bc('0x2b')][_0xf4bc('0x1c')]);}_0x4c44a5[_0xf4bc('0x31')]=qs[_0xf4bc('0x32')](_0xc7fcf9[_0xf4bc('0x2b')]['sort']);_0x4c44a5[_0xf4bc('0x33')]=qs['filters'](_[_0xf4bc('0x5a')](_0xc7fcf9['query'],_0x364c44[_0xf4bc('0x34')]));_0x4c44a5[_0xf4bc('0x33')][_0xf4bc('0x57')]=_0x273352['id'];if(_0xc7fcf9[_0xf4bc('0x2b')][_0xf4bc('0x58')]){_0x4c44a5[_0xf4bc('0x33')]=_[_0xf4bc('0x35')](_0x4c44a5['where'],{'$or':_['map'](_0x4c44a5['attributes'],function(_0x4a3211){var _0x3fab83={};_0x3fab83[_0x4a3211]={'$like':'%'+_0xc7fcf9[_0xf4bc('0x2b')][_0xf4bc('0x58')]+'%'};return _0x3fab83;})});}_0x4c44a5=_[_0xf4bc('0x35')]({},_0x4c44a5,_0xc7fcf9[_0xf4bc('0x3b')]);return db['CmHopperFinal'][_0xf4bc('0x1b')]({'where':_0x4c44a5['where']})[_0xf4bc('0x25')](function(_0x4c24cf){_0x45bdf6[_0xf4bc('0x1b')]=_0x4c24cf;if(_0xc7fcf9[_0xf4bc('0x2b')][_0xf4bc('0x3d')]){_0x4c44a5[_0xf4bc('0x3e')]=[{'all':!![]}];}return db[_0xf4bc('0x5d')][_0xf4bc('0x3f')](_0x4c44a5);})[_0xf4bc('0x25')](function(_0x563d6d){_0x45bdf6[_0xf4bc('0x40')]=_0x563d6d;return _0x45bdf6;});}})[_0xf4bc('0x25')](respondWithFilteredResult(_0x9f03b5,_0x4c44a5))['catch'](handleError(_0x9f03b5,null));};exports[_0xf4bc('0x5e')]=function(_0x4fd163,_0x56b64d,_0xbe8e0d){var _0x33da89={'raw':!![],'where':{}};var _0x4e4333={};var _0x4bd54a={'count':0x0,'rows':[]};return db[_0xf4bc('0x3c')][_0xf4bc('0x54')]({'where':{'id':_0x4fd163['params']['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x56b64d,null))['then'](function(_0x4cff85){if(_0x4cff85){_0x4e4333['model']=_[_0xf4bc('0x2a')](db[_0xf4bc('0x5f')][_0xf4bc('0x28')]);_0x4e4333[_0xf4bc('0x2b')]=_[_0xf4bc('0x2a')](_0x4fd163[_0xf4bc('0x2b')]);_0x4e4333[_0xf4bc('0x34')]=_[_0xf4bc('0x2c')](_0x4e4333['model'],_0x4e4333['query']);_0x33da89[_0xf4bc('0x2d')]=_[_0xf4bc('0x2c')](_0x4e4333[_0xf4bc('0x29')],qs['fields'](_0x4fd163['query'][_0xf4bc('0x2e')]));_0x33da89[_0xf4bc('0x2d')]=_0x33da89[_0xf4bc('0x2d')]['length']?_0x33da89[_0xf4bc('0x2d')]:_0x4e4333[_0xf4bc('0x29')];if(!_0x4fd163[_0xf4bc('0x2b')][_0xf4bc('0x56')](_0xf4bc('0x30'))){_0x33da89[_0xf4bc('0x1d')]=qs[_0xf4bc('0x1d')](_0x4fd163[_0xf4bc('0x2b')][_0xf4bc('0x1d')]);_0x33da89['offset']=qs['offset'](_0x4fd163[_0xf4bc('0x2b')][_0xf4bc('0x1c')]);}_0x33da89[_0xf4bc('0x31')]=qs['sort'](_0x4fd163[_0xf4bc('0x2b')][_0xf4bc('0x32')]);_0x33da89[_0xf4bc('0x33')]=qs['filters'](_['pick'](_0x4fd163[_0xf4bc('0x2b')],_0x4e4333[_0xf4bc('0x34')]));_0x33da89['where']['CampaignId']=_0x4cff85['id'];if(_0x4fd163[_0xf4bc('0x2b')][_0xf4bc('0x58')]){_0x33da89[_0xf4bc('0x33')]=_[_0xf4bc('0x35')](_0x33da89[_0xf4bc('0x33')],{'$or':_[_0xf4bc('0x36')](_0x33da89[_0xf4bc('0x2d')],function(_0x3abea6){var _0x2c87d6={};_0x2c87d6[_0x3abea6]={'$like':'%'+_0x4fd163['query'][_0xf4bc('0x58')]+'%'};return _0x2c87d6;})});}_0x33da89=_[_0xf4bc('0x35')]({},_0x33da89,_0x4fd163[_0xf4bc('0x3b')]);return db['CmHopperBlack']['count']({'where':_0x33da89[_0xf4bc('0x33')]})[_0xf4bc('0x25')](function(_0x1dca85){_0x4bd54a['count']=_0x1dca85;if(_0x4fd163[_0xf4bc('0x2b')][_0xf4bc('0x3d')]){_0x33da89[_0xf4bc('0x3e')]=[{'all':!![]}];}return db[_0xf4bc('0x5f')]['findAll'](_0x33da89);})[_0xf4bc('0x25')](function(_0x40484a){_0x4bd54a[_0xf4bc('0x40')]=_0x40484a;return _0x4bd54a;});}})[_0xf4bc('0x25')](respondWithFilteredResult(_0x56b64d,_0x33da89))[_0xf4bc('0x41')](handleError(_0x56b64d,null));};exports[_0xf4bc('0x60')]=function(_0x5d23c8,_0x57aea4,_0x335a75){var _0x40afda={};var _0x57aba7={};var _0x245dc7;var _0x259467;return db[_0xf4bc('0x3c')][_0xf4bc('0x54')]({'where':{'id':_0x5d23c8[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x57aea4,null))[_0xf4bc('0x25')](function(_0x2daf87){if(_0x2daf87){_0x245dc7=_0x2daf87;_0x57aba7[_0xf4bc('0x29')]=_[_0xf4bc('0x2a')](db['CmList']['rawAttributes']);_0x57aba7[_0xf4bc('0x2b')]=_[_0xf4bc('0x2a')](_0x5d23c8[_0xf4bc('0x2b')]);_0x57aba7[_0xf4bc('0x34')]=_[_0xf4bc('0x2c')](_0x57aba7[_0xf4bc('0x29')],_0x57aba7['query']);_0x40afda[_0xf4bc('0x2d')]=_[_0xf4bc('0x2c')](_0x57aba7[_0xf4bc('0x29')],qs[_0xf4bc('0x2e')](_0x5d23c8['query'][_0xf4bc('0x2e')]));_0x40afda[_0xf4bc('0x2d')]=_0x40afda[_0xf4bc('0x2d')][_0xf4bc('0x2f')]?_0x40afda[_0xf4bc('0x2d')]:_0x57aba7[_0xf4bc('0x29')];_0x40afda[_0xf4bc('0x31')]=qs[_0xf4bc('0x32')](_0x5d23c8[_0xf4bc('0x2b')]['sort']);_0x40afda[_0xf4bc('0x33')]=qs['filters'](_[_0xf4bc('0x5a')](_0x5d23c8[_0xf4bc('0x2b')],_0x57aba7[_0xf4bc('0x34')]));if(_0x5d23c8[_0xf4bc('0x2b')][_0xf4bc('0x58')]){_0x40afda[_0xf4bc('0x33')]=_[_0xf4bc('0x35')](_0x40afda[_0xf4bc('0x33')],{'$or':_[_0xf4bc('0x36')](_0x40afda[_0xf4bc('0x2d')],function(_0x3d7b25){var _0x5f8873={};_0x5f8873[_0x3d7b25]={'$like':'%'+_0x5d23c8[_0xf4bc('0x2b')][_0xf4bc('0x58')]+'%'};return _0x5f8873;})});}_0x40afda=_['merge']({},_0x40afda,_0x5d23c8['options']);return _0x245dc7[_0xf4bc('0x60')](_0x40afda);}})['then'](function(_0x2eac55){if(_0x2eac55){_0x259467=_0x2eac55[_0xf4bc('0x2f')];if(!_0x5d23c8[_0xf4bc('0x2b')][_0xf4bc('0x56')](_0xf4bc('0x30'))){_0x40afda[_0xf4bc('0x1d')]=qs[_0xf4bc('0x1d')](_0x5d23c8['query'][_0xf4bc('0x1d')]);_0x40afda['offset']=qs['offset'](_0x5d23c8['query']['offset']);}return _0x245dc7[_0xf4bc('0x60')](_0x40afda);}})['then'](function(_0x55dd10){if(_0x55dd10){return _0x55dd10?{'count':_0x259467,'rows':_0x55dd10}:null;}})['then'](respondWithResult(_0x57aea4,null))[_0xf4bc('0x41')](handleError(_0x57aea4,null));};exports['addLists']=function(_0x30aedc,_0x591389,_0x46d1a0){var _0x28c795,_0x41ca60;return db[_0xf4bc('0x3c')]['find']({'where':{'id':_0x30aedc[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x591389,null))['then'](function(_0x2551c8){if(_0x2551c8){_0x41ca60=_0x2551c8;return _0x2551c8['addLists'](_0x30aedc['body']['ids'],_[_0xf4bc('0x4f')](_0x30aedc['body'],[_0xf4bc('0x61'),'id'])||{});}return null;})['spread'](function(_0x563c8f){var _0x2b72db;_0x28c795=_0x563c8f||[];var _0x2b1158=[];if(_0x563c8f){for(var _0x2fc81d=0x0;_0x2fc81d<_0x563c8f[_0xf4bc('0x2f')];_0x2fc81d+=0x1){var _0x5bb602=_0x563c8f[_0x2fc81d][_0xf4bc('0x48')]({'plain':!![]});_0x41ca60['dialCheckDuplicateType']=_0x30aedc['body'][_0xf4bc('0x62')]?_0x30aedc[_0xf4bc('0x46')][_0xf4bc('0x62')]:_0x41ca60['dialCheckDuplicateType'];switch(_0x41ca60[_0xf4bc('0x62')]){case _0xf4bc('0x63'):_0x2b72db=squel[_0xf4bc('0x64')]()['into'](_0xf4bc('0x65'))[_0xf4bc('0x66')]([_0xf4bc('0x67'),_0xf4bc('0x68'),_0xf4bc('0x69'),'ListId',_0xf4bc('0x57'),_0xf4bc('0x51'),'updatedAt'],squel[_0xf4bc('0x6a')]()[_0xf4bc('0x3a')](_0xf4bc('0x67'),_0xf4bc('0x67'))[_0xf4bc('0x3a')]('NOW()',_0xf4bc('0x68'))[_0xf4bc('0x3a')]('id',_0xf4bc('0x69'))[_0xf4bc('0x3a')](_0x5bb602[_0xf4bc('0x6b')][_0xf4bc('0x6c')](),_0xf4bc('0x6d'))[_0xf4bc('0x3a')](_0x30aedc[_0xf4bc('0x43')]['id']['toString'](),_0xf4bc('0x57'))[_0xf4bc('0x3a')](_0xf4bc('0x6e'),_0xf4bc('0x51'))[_0xf4bc('0x3a')](_0xf4bc('0x6e'),_0xf4bc('0x50'))[_0xf4bc('0x6f')](_0xf4bc('0x70'))[_0xf4bc('0x33')](_0xf4bc('0x71'))[_0xf4bc('0x33')](_0xf4bc('0x72'),_0x5bb602['CmListId'][_0xf4bc('0x6c')]())['where'](_0xf4bc('0x73'))['where'](_0xf4bc('0x74'),squel['select']()[_0xf4bc('0x3a')](_0xf4bc('0x75'))[_0xf4bc('0x6f')](_0xf4bc('0x76'))[_0xf4bc('0x33')]('CampaignId\x20=\x20?',_0x30aedc[_0xf4bc('0x43')]['id']['toString']()))[_0xf4bc('0x33')](_0xf4bc('0x74'),squel[_0xf4bc('0x6a')]()[_0xf4bc('0x3a')](_0xf4bc('0x77'))[_0xf4bc('0x6f')](_0xf4bc('0x65'))[_0xf4bc('0x33')](_0xf4bc('0x78'),_0x30aedc[_0xf4bc('0x43')]['id'][_0xf4bc('0x6c')]())))[_0xf4bc('0x6c')]();break;case _0xf4bc('0x79'):_0x2b72db=squel[_0xf4bc('0x64')]()[_0xf4bc('0x7a')](_0xf4bc('0x65'))['fromQuery'](['phone',_0xf4bc('0x68'),_0xf4bc('0x69'),_0xf4bc('0x6d'),'CampaignId',_0xf4bc('0x51'),_0xf4bc('0x50')],squel[_0xf4bc('0x6a')]()[_0xf4bc('0x3a')](_0xf4bc('0x67'),_0xf4bc('0x67'))[_0xf4bc('0x3a')]('NOW()','scheduledAt')['field']('id',_0xf4bc('0x69'))[_0xf4bc('0x3a')](_0x5bb602[_0xf4bc('0x6b')][_0xf4bc('0x6c')](),_0xf4bc('0x6d'))[_0xf4bc('0x3a')](_0x30aedc[_0xf4bc('0x43')]['id'][_0xf4bc('0x6c')](),_0xf4bc('0x57'))['field'](_0xf4bc('0x6e'),_0xf4bc('0x51'))[_0xf4bc('0x3a')](_0xf4bc('0x6e'),_0xf4bc('0x50'))[_0xf4bc('0x6f')](_0xf4bc('0x70'))[_0xf4bc('0x33')]('deletedAt\x20IS\x20NULL')[_0xf4bc('0x33')](_0xf4bc('0x72'),_0x5bb602[_0xf4bc('0x6b')][_0xf4bc('0x6c')]())[_0xf4bc('0x33')]('phone\x20IS\x20NOT\x20NULL')[_0xf4bc('0x33')](_0xf4bc('0x74'),squel['select']()[_0xf4bc('0x3a')]('COALESCE(phone,\x27\x27)')[_0xf4bc('0x6f')](_0xf4bc('0x65'))[_0xf4bc('0x33')](_0xf4bc('0x78'),_0x30aedc[_0xf4bc('0x43')]['id'][_0xf4bc('0x6c')]())))[_0xf4bc('0x6c')]();break;default:_0x2b72db=squel[_0xf4bc('0x64')]()[_0xf4bc('0x7a')](_0xf4bc('0x65'))['fromQuery']([_0xf4bc('0x67'),'scheduledAt','ContactId',_0xf4bc('0x6d'),_0xf4bc('0x57'),_0xf4bc('0x51'),_0xf4bc('0x50')],squel['select']()[_0xf4bc('0x3a')](_0xf4bc('0x67'),_0xf4bc('0x67'))[_0xf4bc('0x3a')](_0xf4bc('0x6e'),_0xf4bc('0x68'))[_0xf4bc('0x3a')]('id',_0xf4bc('0x69'))[_0xf4bc('0x3a')](_0x5bb602[_0xf4bc('0x6b')][_0xf4bc('0x6c')](),_0xf4bc('0x6d'))[_0xf4bc('0x3a')](_0x30aedc[_0xf4bc('0x43')]['id'][_0xf4bc('0x6c')](),_0xf4bc('0x57'))[_0xf4bc('0x3a')]('NOW()','createdAt')['field'](_0xf4bc('0x6e'),_0xf4bc('0x50'))['from'](_0xf4bc('0x70'))[_0xf4bc('0x33')](_0xf4bc('0x71'))['where']('ListId\x20=\x20?',_0x5bb602[_0xf4bc('0x6b')][_0xf4bc('0x6c')]())['where'](_0xf4bc('0x73')))[_0xf4bc('0x6c')]();}_0x2b1158['push'](db[_0xf4bc('0x7b')][_0xf4bc('0x2b')](_0x2b72db));}return BPromise[_0xf4bc('0x7c')](_0x2b1158);}})[_0xf4bc('0x25')](function(){return _0x28c795;})['then'](respondWithResult(_0x591389,null))[_0xf4bc('0x41')](handleError(_0x591389,null));};exports[_0xf4bc('0x7d')]=function(_0x4d81e5,_0x21e9f5,_0xa5276d){var _0x3b3a10;return db['Campaign'][_0xf4bc('0x44')]({'where':{'id':_0x4d81e5[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x21e9f5,null))[_0xf4bc('0x25')](function(_0x25dd89){if(_0x25dd89){return _0x25dd89[_0xf4bc('0x7d')](_0x4d81e5['query'][_0xf4bc('0x61')]);}})[_0xf4bc('0x25')](function(_0x37beef){if(_0x37beef){_0x3b3a10=_0x37beef;return db[_0xf4bc('0x55')]['destroy']({'where':{'ListId':_0x4d81e5[_0xf4bc('0x2b')][_0xf4bc('0x61')],'CampaignId':_0x4d81e5[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](function(){return _0x3b3a10;});}})['then'](respondWithStatusCode(_0x21e9f5,null))[_0xf4bc('0x41')](handleError(_0x21e9f5,null));};exports['getBlackLists']=function(_0x4aaa27,_0x36e895,_0x396f2c){var _0x415edf={'raw':!![],'where':{}};var _0x5c672a={};var _0x51a0d9={'count':0x0,'rows':[]};return db[_0xf4bc('0x3c')][_0xf4bc('0x54')]({'where':{'id':_0x4aaa27[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x36e895,null))[_0xf4bc('0x25')](function(_0xf64b82){if(_0xf64b82){_0x5c672a['model']=_[_0xf4bc('0x2a')](db[_0xf4bc('0x7e')][_0xf4bc('0x28')]);_0x5c672a[_0xf4bc('0x2b')]=_[_0xf4bc('0x2a')](_0x4aaa27[_0xf4bc('0x2b')]);_0x5c672a[_0xf4bc('0x34')]=_[_0xf4bc('0x2c')](_0x5c672a[_0xf4bc('0x29')],_0x5c672a[_0xf4bc('0x2b')]);_0x415edf['attributes']=_[_0xf4bc('0x2c')](_0x5c672a['model'],qs[_0xf4bc('0x2e')](_0x4aaa27[_0xf4bc('0x2b')][_0xf4bc('0x2e')]));_0x415edf[_0xf4bc('0x2d')]=_0x415edf[_0xf4bc('0x2d')]['length']?_0x415edf[_0xf4bc('0x2d')]:_0x5c672a['model'];if(!_0x4aaa27['query']['hasOwnProperty'](_0xf4bc('0x30'))){_0x415edf['limit']=qs['limit'](_0x4aaa27['query']['limit']);_0x415edf[_0xf4bc('0x1c')]=qs[_0xf4bc('0x1c')](_0x4aaa27[_0xf4bc('0x2b')][_0xf4bc('0x1c')]);}_0x415edf['order']=qs[_0xf4bc('0x32')](_0x4aaa27[_0xf4bc('0x2b')]['sort']);_0x415edf[_0xf4bc('0x33')]=qs[_0xf4bc('0x34')](_[_0xf4bc('0x5a')](_0x4aaa27[_0xf4bc('0x2b')],_0x5c672a[_0xf4bc('0x34')]));_0x415edf[_0xf4bc('0x33')]['CampaignId']=_0xf64b82['id'];if(_0x4aaa27[_0xf4bc('0x2b')][_0xf4bc('0x58')]){_0x415edf['where']=_['merge'](_0x415edf[_0xf4bc('0x33')],{'$or':_[_0xf4bc('0x36')](_0x415edf[_0xf4bc('0x2d')],function(_0x1239c3){var _0x488f1f={};_0x488f1f[_0x1239c3]={'$like':'%'+_0x4aaa27[_0xf4bc('0x2b')][_0xf4bc('0x58')]+'%'};return _0x488f1f;})});}_0x415edf=_[_0xf4bc('0x35')]({},_0x415edf,_0x4aaa27[_0xf4bc('0x3b')]);return db[_0xf4bc('0x7e')][_0xf4bc('0x1b')]({'where':_0x415edf[_0xf4bc('0x33')]})[_0xf4bc('0x25')](function(_0x30d01f){_0x51a0d9[_0xf4bc('0x1b')]=_0x30d01f;if(_0x4aaa27[_0xf4bc('0x2b')]['includeAll']){_0x415edf['include']=[{'all':!![]}];}return db[_0xf4bc('0x7e')]['findAll'](_0x415edf);})['then'](function(_0x39e837){_0x51a0d9[_0xf4bc('0x40')]=_0x39e837;return _0x51a0d9;});}})[_0xf4bc('0x25')](respondWithFilteredResult(_0x36e895,_0x415edf))[_0xf4bc('0x41')](handleError(_0x36e895,null));};exports[_0xf4bc('0x7f')]=function(_0x222b45,_0x3783d2,_0x591a78){var _0x33486a,_0x67b992;return db[_0xf4bc('0x3c')][_0xf4bc('0x44')]({'where':{'id':_0x222b45[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x3783d2,null))[_0xf4bc('0x25')](function(_0x50bc38){if(_0x50bc38){_0x67b992=_0x50bc38;return _0x50bc38[_0xf4bc('0x7f')](_0x222b45[_0xf4bc('0x46')][_0xf4bc('0x61')],_[_0xf4bc('0x4f')](_0x222b45[_0xf4bc('0x46')],[_0xf4bc('0x61'),'id'])||{});}return null;})[_0xf4bc('0x80')](function(_0x459f7d){var _0x6566a8;_0x33486a=_0x459f7d||[];var _0x2e1657=[];if(_0x459f7d){for(var _0x5d93a5=0x0;_0x5d93a5<_0x459f7d[_0xf4bc('0x2f')];_0x5d93a5+=0x1){var _0xa9014c=_0x459f7d[_0x5d93a5][_0xf4bc('0x48')]({'plain':!![]});_0x6566a8=squel[_0xf4bc('0x64')]()[_0xf4bc('0x7a')](_0xf4bc('0x81'))[_0xf4bc('0x66')](['phone',_0xf4bc('0x69'),'ListId',_0xf4bc('0x57'),_0xf4bc('0x51'),_0xf4bc('0x50')],squel[_0xf4bc('0x6a')]()[_0xf4bc('0x3a')](_0xf4bc('0x67'),_0xf4bc('0x67'))[_0xf4bc('0x3a')]('id',_0xf4bc('0x69'))[_0xf4bc('0x3a')](_0xa9014c[_0xf4bc('0x6b')][_0xf4bc('0x6c')](),_0xf4bc('0x6d'))[_0xf4bc('0x3a')](_0x222b45['params']['id'][_0xf4bc('0x6c')](),'CampaignId')[_0xf4bc('0x3a')]('NOW()','createdAt')[_0xf4bc('0x3a')]('NOW()',_0xf4bc('0x50'))[_0xf4bc('0x6f')](_0xf4bc('0x70'))[_0xf4bc('0x33')](_0xf4bc('0x71'))['where']('ListId\x20=\x20?',_0xa9014c['CmListId']['toString']())[_0xf4bc('0x33')](_0xf4bc('0x73')))[_0xf4bc('0x6c')]();_0x2e1657[_0xf4bc('0x82')](db[_0xf4bc('0x7b')][_0xf4bc('0x2b')](_0x6566a8));}return BPromise[_0xf4bc('0x7c')](_0x2e1657);}})[_0xf4bc('0x25')](function(){return _0x33486a;})['then'](respondWithResult(_0x3783d2,null))[_0xf4bc('0x41')](handleError(_0x3783d2,null));};exports[_0xf4bc('0x83')]=function(_0x5ec7c4,_0x13b476,_0x497eb9){var _0x4bf806;return db['Campaign'][_0xf4bc('0x44')]({'where':{'id':_0x5ec7c4[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](handleEntityNotFound(_0x13b476,null))[_0xf4bc('0x25')](function(_0x35e782){if(_0x35e782){return _0x35e782[_0xf4bc('0x83')](_0x5ec7c4['query'][_0xf4bc('0x61')]);}})[_0xf4bc('0x25')](function(_0x406b7b){if(_0x406b7b){_0x4bf806=_0x406b7b;return db['CmHopperBlack'][_0xf4bc('0x24')]({'where':{'ListId':_0x5ec7c4[_0xf4bc('0x2b')][_0xf4bc('0x61')],'CampaignId':_0x5ec7c4[_0xf4bc('0x43')]['id']}})[_0xf4bc('0x25')](function(){return _0x4bf806;});}})['then'](respondWithStatusCode(_0x13b476,null))[_0xf4bc('0x41')](handleError(_0x13b476,null));};
\ No newline at end of file
+var _0xc4bd=['CampaignId','CmHopperFinal','CmHopperBlack','getLists','CmList','addLists','ids','spread','dialCheckDuplicateType','always','insert','into','cm_hopper','scheduledAt','ContactId','ListId','select','phone','NOW()','toString','from','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','CmListId','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','COALESCE(calleridnum,\x27\x27)','cm_hopper_final','COALESCE(phone,\x27\x27)','CampaignId\x20=\x20?','onlyIfOpen','fromQuery','push','all','removeLists','getBlackLists','addBlackLists','cm_hopper_black','sequelize','removeBlackLists','html-pdf','rimraf','zip-dir','fast-json-patch','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','update','then','destroy','get','IvrCampaigns','UserProfileResource','error','stack','name','Campaign','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','limit','order','sort','where','filter','merge','map','type','key','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','omit','createdAt','updatedAt','autoAssociation','getHoppers','CmHopper','pick','getHopperHistories','findOne','CmHopperHistory','nolimit'];(function(_0x1ac20e,_0x113882){var _0xbc245c=function(_0x57df5d){while(--_0x57df5d){_0x1ac20e['push'](_0x1ac20e['shift']());}};_0xbc245c(++_0x113882);}(_0xc4bd,0x1bb));var _0xdc4b=function(_0x55c768,_0x518feb){_0x55c768=_0x55c768-0x0;var _0x25f245=_0xc4bd[_0x55c768];return _0x25f245;};'use strict';var pdf=require(_0xdc4b('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xdc4b('0x1'));var zipdir=require(_0xdc4b('0x2'));var jsonpatch=require(_0xdc4b('0x3'));var rp=require('request-promise');var moment=require(_0xdc4b('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xdc4b('0x5'));var util=require(_0xdc4b('0x6'));var path=require(_0xdc4b('0x7'));var sox=require(_0xdc4b('0x8'));var csv=require(_0xdc4b('0x9'));var ejs=require(_0xdc4b('0xa'));var fs=require('fs');var _=require(_0xdc4b('0xb'));var squel=require(_0xdc4b('0xc'));var crypto=require(_0xdc4b('0xd'));var jsforce=require(_0xdc4b('0xe'));var deskjs=require(_0xdc4b('0xf'));var toCsv=require(_0xdc4b('0x9'));var querystring=require(_0xdc4b('0x10'));var Papa=require(_0xdc4b('0x11'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0xdc4b('0x12'));var qs=require(_0xdc4b('0x13'));var logger=require(_0xdc4b('0x14'))(_0xdc4b('0x15'));var utils=require(_0xdc4b('0x16'));var config=require(_0xdc4b('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1832a6,_0x2f0c9b){_0x2f0c9b=_0x2f0c9b||0xcc;return function(_0x119a16){if(_0x119a16){return _0x1832a6[_0xdc4b('0x18')](_0x2f0c9b);}return _0x1832a6[_0xdc4b('0x19')](_0x2f0c9b)[_0xdc4b('0x1a')]();};}function respondWithResult(_0x171541,_0x5e82a5){_0x5e82a5=_0x5e82a5||0xc8;return function(_0x2e3ffc){if(_0x2e3ffc){return _0x171541[_0xdc4b('0x19')](_0x5e82a5)[_0xdc4b('0x1b')](_0x2e3ffc);}};}function respondWithFilteredResult(_0x45e697,_0x4d45bf){return function(_0x57363d){if(_0x57363d){var _0x46b119=_0x57363d[_0xdc4b('0x1c')],_0x583330=_0x4d45bf[_0xdc4b('0x1d')],_0x81b282=_0x4d45bf[_0xdc4b('0x1d')]+_0x4d45bf['limit'],_0x2b34f8;if(_0x81b282>=_0x46b119){_0x81b282=_0x46b119;_0x2b34f8=0xc8;}else{_0x2b34f8=0xce;}_0x45e697[_0xdc4b('0x19')](_0x2b34f8);return _0x45e697[_0xdc4b('0x1e')](_0xdc4b('0x1f'),_0x583330+'-'+_0x81b282+'/'+_0x46b119)[_0xdc4b('0x1b')](_0x57363d);}return null;};}function patchUpdates(_0x287840){return function(_0x177bcc){try{jsonpatch['apply'](_0x177bcc,_0x287840,!![]);}catch(_0x186b46){return BPromise[_0xdc4b('0x20')](_0x186b46);}return _0x177bcc[_0xdc4b('0x21')]();};}function saveUpdates(_0xfe0d1b,_0x2f2889){return function(_0x2b2e81){if(_0x2b2e81){return _0x2b2e81[_0xdc4b('0x22')](_0xfe0d1b)[_0xdc4b('0x23')](function(_0x4f8a3d){return _0x4f8a3d;});}return null;};}function removeEntity(_0x3cbc57,_0x285112){return function(_0x1e830e){if(_0x1e830e){return _0x1e830e[_0xdc4b('0x24')]()[_0xdc4b('0x23')](function(){var _0x3d7eb3=_0x1e830e[_0xdc4b('0x25')]({'plain':!![]});var _0x504eee=_0xdc4b('0x26');return db[_0xdc4b('0x27')]['destroy']({'where':{'type':_0x504eee,'resourceId':_0x3d7eb3['id']}})[_0xdc4b('0x23')](function(){return _0x1e830e;});})[_0xdc4b('0x23')](function(){_0x3cbc57['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x33a89e,_0x5a27b4){return function(_0x599d0c){if(!_0x599d0c){_0x33a89e[_0xdc4b('0x18')](0x194);}return _0x599d0c;};}function handleError(_0x29393c,_0x28b14d){_0x28b14d=_0x28b14d||0x1f4;return function(_0x244ba0){logger[_0xdc4b('0x28')](_0x244ba0[_0xdc4b('0x29')]);if(_0x244ba0[_0xdc4b('0x2a')]){delete _0x244ba0[_0xdc4b('0x2a')];}_0x29393c['status'](_0x28b14d)['send'](_0x244ba0);};}exports['index']=function(_0x4ca4a8,_0x1cc039){var _0x484118={},_0x1bbf73={},_0x35ce6b={'count':0x0,'rows':[]};var _0xfa180e=db[_0xdc4b('0x2b')][_0xdc4b('0x2c')];_0x1bbf73['model']=_[_0xdc4b('0x2d')](_0xfa180e);_0x1bbf73[_0xdc4b('0x2e')]=_[_0xdc4b('0x2d')](_0x4ca4a8['query']);_0x1bbf73[_0xdc4b('0x2f')]=_[_0xdc4b('0x30')](_0x1bbf73[_0xdc4b('0x31')],_0x1bbf73[_0xdc4b('0x2e')]);_0x484118[_0xdc4b('0x32')]=_[_0xdc4b('0x30')](_0x1bbf73[_0xdc4b('0x31')],qs[_0xdc4b('0x33')](_0x4ca4a8[_0xdc4b('0x2e')][_0xdc4b('0x33')]));_0x484118[_0xdc4b('0x32')]=_0x484118[_0xdc4b('0x32')][_0xdc4b('0x34')]?_0x484118[_0xdc4b('0x32')]:_0x1bbf73['model'];if(!_0x4ca4a8['query'][_0xdc4b('0x35')]('nolimit')){_0x484118[_0xdc4b('0x36')]=qs[_0xdc4b('0x36')](_0x4ca4a8[_0xdc4b('0x2e')][_0xdc4b('0x36')]);_0x484118[_0xdc4b('0x1d')]=qs[_0xdc4b('0x1d')](_0x4ca4a8['query'][_0xdc4b('0x1d')]);}_0x484118[_0xdc4b('0x37')]=qs[_0xdc4b('0x38')](_0x4ca4a8[_0xdc4b('0x2e')][_0xdc4b('0x38')]);_0x484118[_0xdc4b('0x39')]=qs['filters'](_['pick'](_0x4ca4a8[_0xdc4b('0x2e')],_0x1bbf73[_0xdc4b('0x2f')]));if(_0x4ca4a8['query'][_0xdc4b('0x3a')]){_0x484118['where']=_[_0xdc4b('0x3b')](_0x484118['where'],{'$or':_[_0xdc4b('0x3c')](_0xfa180e,function(_0x196a7b){if(_0x196a7b[_0xdc4b('0x3d')][_0xdc4b('0x3e')]!=='VIRTUAL'){var _0x44d4e6={};_0x44d4e6[_0x196a7b[_0xdc4b('0x3f')]]={'$like':'%'+_0x4ca4a8['query'][_0xdc4b('0x3a')]+'%'};return _0x44d4e6;}})});}_0x484118=_[_0xdc4b('0x3b')]({},_0x484118,_0x4ca4a8[_0xdc4b('0x40')]);var _0x11173c={'where':_0x484118['where']};return db[_0xdc4b('0x2b')]['count'](_0x11173c)['then'](function(_0x521a8b){_0x35ce6b[_0xdc4b('0x1c')]=_0x521a8b;if(_0x4ca4a8[_0xdc4b('0x2e')][_0xdc4b('0x41')]){_0x484118[_0xdc4b('0x42')]=[{'all':!![]}];}return db['Campaign'][_0xdc4b('0x43')](_0x484118);})[_0xdc4b('0x23')](function(_0x20a8de){_0x35ce6b[_0xdc4b('0x44')]=_0x20a8de;return _0x35ce6b;})[_0xdc4b('0x23')](respondWithFilteredResult(_0x1cc039,_0x484118))[_0xdc4b('0x45')](handleError(_0x1cc039,null));};exports[_0xdc4b('0x46')]=function(_0x341615,_0x1cf727){var _0x1c4a2e={'raw':![],'where':{'id':_0x341615[_0xdc4b('0x47')]['id']}},_0x212b48={};_0x212b48[_0xdc4b('0x31')]=_[_0xdc4b('0x2d')](db[_0xdc4b('0x2b')][_0xdc4b('0x2c')]);_0x212b48[_0xdc4b('0x2e')]=_[_0xdc4b('0x2d')](_0x341615[_0xdc4b('0x2e')]);_0x212b48[_0xdc4b('0x2f')]=_[_0xdc4b('0x30')](_0x212b48[_0xdc4b('0x31')],_0x212b48[_0xdc4b('0x2e')]);_0x1c4a2e[_0xdc4b('0x32')]=_['intersection'](_0x212b48['model'],qs[_0xdc4b('0x33')](_0x341615[_0xdc4b('0x2e')][_0xdc4b('0x33')]));_0x1c4a2e[_0xdc4b('0x32')]=_0x1c4a2e['attributes'][_0xdc4b('0x34')]?_0x1c4a2e['attributes']:_0x212b48[_0xdc4b('0x31')];if(_0x341615[_0xdc4b('0x2e')]['includeAll']){_0x1c4a2e[_0xdc4b('0x42')]=[{'all':!![]}];}_0x1c4a2e=_[_0xdc4b('0x3b')]({},_0x1c4a2e,_0x341615['options']);return db['Campaign'][_0xdc4b('0x48')](_0x1c4a2e)['then'](handleEntityNotFound(_0x1cf727,null))['then'](respondWithResult(_0x1cf727,null))[_0xdc4b('0x45')](handleError(_0x1cf727,null));};exports[_0xdc4b('0x49')]=function(_0x4124b7,_0xc17393){return db['Campaign'][_0xdc4b('0x49')](_0x4124b7[_0xdc4b('0x4a')],{})['then'](function(_0x4c3641){var _0x20d620=_0x4124b7[_0xdc4b('0x4b')][_0xdc4b('0x25')]({'plain':!![]});if(!_0x20d620)throw new Error(_0xdc4b('0x4c'));if(_0x20d620[_0xdc4b('0x4d')]===_0xdc4b('0x4b')){var _0xe60f33=_0x4c3641[_0xdc4b('0x25')]({'plain':!![]});var _0x2d0046='IvrCampaigns';return db[_0xdc4b('0x4e')][_0xdc4b('0x48')]({'where':{'name':_0x2d0046,'userProfileId':_0x20d620[_0xdc4b('0x4f')]},'raw':!![]})[_0xdc4b('0x23')](function(_0xf19e47){if(_0xf19e47&&_0xf19e47['autoAssociation']===0x0){return db[_0xdc4b('0x27')][_0xdc4b('0x49')]({'name':_0xe60f33[_0xdc4b('0x2a')],'resourceId':_0xe60f33['id'],'type':_0xf19e47[_0xdc4b('0x2a')],'sectionId':_0xf19e47['id']},{})[_0xdc4b('0x23')](function(){return _0x4c3641;});}else{return _0x4c3641;}})[_0xdc4b('0x45')](function(_0x63f0d2){logger['error'](_0xdc4b('0x50'),_0x63f0d2);throw _0x63f0d2;});}return _0x4c3641;})[_0xdc4b('0x23')](respondWithResult(_0xc17393,0xc9))[_0xdc4b('0x45')](handleError(_0xc17393,null));};exports[_0xdc4b('0x51')]=function(_0x1e214d,_0x8d1c0e){var _0x47a0c0={'raw':![],'where':{'id':_0x1e214d[_0xdc4b('0x47')]['id']}},_0x1a10d0={};_0x1a10d0[_0xdc4b('0x31')]=_[_0xdc4b('0x2d')](db[_0xdc4b('0x2b')][_0xdc4b('0x2c')]);_0x47a0c0[_0xdc4b('0x32')]=_[_0xdc4b('0x30')](_0x1a10d0['model'],qs['fields'](_0x1e214d['query'][_0xdc4b('0x33')]));_0x47a0c0[_0xdc4b('0x32')]=_0x47a0c0[_0xdc4b('0x32')][_0xdc4b('0x34')]?_0x47a0c0[_0xdc4b('0x32')]:_0x1a10d0['model'];if(_0x1e214d[_0xdc4b('0x2e')]['includeAll']){_0x47a0c0[_0xdc4b('0x42')]=[{'all':!![]}];}_0x47a0c0=_[_0xdc4b('0x3b')]({},_0x47a0c0,_0x1e214d['options']);return db[_0xdc4b('0x2b')][_0xdc4b('0x48')](_0x47a0c0)['then'](handleEntityNotFound(_0x8d1c0e,null))[_0xdc4b('0x23')](function(_0x2cf01a){if(_0x2cf01a){var _0x45c39b=_0x2cf01a[_0xdc4b('0x25')]({'plain':!![]});_0x45c39b=qs[_0xdc4b('0x52')](_0x45c39b,['id',_0xdc4b('0x53'),'updatedAt']);_0x1e214d[_0xdc4b('0x4a')]=_[_0xdc4b('0x52')](_0x1e214d[_0xdc4b('0x4a')],['id',_0xdc4b('0x53'),_0xdc4b('0x54')]);return db[_0xdc4b('0x2b')][_0xdc4b('0x49')](_['merge'](_0x45c39b,_0x1e214d['body']),{'include':_0x1e214d[_0xdc4b('0x2e')][_0xdc4b('0x41')]?[{'all':!![]}]:undefined})[_0xdc4b('0x23')](function(_0x421a48){var _0x14c20d=_0x1e214d['user'][_0xdc4b('0x25')]({'plain':!![]});if(!_0x14c20d)throw new Error(_0xdc4b('0x4c'));if(_0x14c20d[_0xdc4b('0x4d')]===_0xdc4b('0x4b')){var _0x4b74fa=_0x421a48[_0xdc4b('0x25')]({'plain':!![]});var _0x3a51a8=_0xdc4b('0x26');return db['UserProfileSection'][_0xdc4b('0x48')]({'where':{'name':_0x3a51a8,'userProfileId':_0x14c20d[_0xdc4b('0x4f')]},'raw':!![]})[_0xdc4b('0x23')](function(_0x3a6dd3){if(_0x3a6dd3&&_0x3a6dd3[_0xdc4b('0x55')]===0x0){return db[_0xdc4b('0x27')][_0xdc4b('0x49')]({'name':_0x4b74fa[_0xdc4b('0x2a')],'resourceId':_0x4b74fa['id'],'type':_0x3a6dd3[_0xdc4b('0x2a')],'sectionId':_0x3a6dd3['id']},{})['then'](function(){return _0x421a48;});}else{return _0x421a48;}})['catch'](function(_0x1c7fad){logger[_0xdc4b('0x28')](_0xdc4b('0x50'),_0x1c7fad);throw _0x1c7fad;});}return _0x421a48;});}})['then'](respondWithResult(_0x8d1c0e,0xc9))[_0xdc4b('0x45')](handleError(_0x8d1c0e,null));};exports[_0xdc4b('0x22')]=function(_0x5f428b,_0x45c71a){if(_0x5f428b[_0xdc4b('0x4a')]['id']){delete _0x5f428b['body']['id'];}return db[_0xdc4b('0x2b')][_0xdc4b('0x48')]({'where':{'id':_0x5f428b[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x45c71a,null))[_0xdc4b('0x23')](saveUpdates(_0x5f428b[_0xdc4b('0x4a')],null))['then'](respondWithResult(_0x45c71a,null))[_0xdc4b('0x45')](handleError(_0x45c71a,null));};exports[_0xdc4b('0x24')]=function(_0x1d90d7,_0x1dbda3){return db['Campaign']['find']({'where':{'id':_0x1d90d7[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x1dbda3,null))[_0xdc4b('0x23')](removeEntity(_0x1dbda3,null))[_0xdc4b('0x45')](handleError(_0x1dbda3,null));};exports[_0xdc4b('0x56')]=function(_0x2414c9,_0x417972,_0x3ba191){var _0x286c5b={'raw':!![],'where':{}};var _0x26f13f={};var _0x2677f2={'count':0x0,'rows':[]};return db['Campaign']['findOne']({'where':{'id':_0x2414c9['params']['id']}})['then'](handleEntityNotFound(_0x417972,null))[_0xdc4b('0x23')](function(_0x4ea892){if(_0x4ea892){_0x26f13f[_0xdc4b('0x31')]=_['keys'](db[_0xdc4b('0x57')][_0xdc4b('0x2c')]);_0x26f13f[_0xdc4b('0x2e')]=_['keys'](_0x2414c9[_0xdc4b('0x2e')]);_0x26f13f['filters']=_['intersection'](_0x26f13f['model'],_0x26f13f['query']);_0x286c5b[_0xdc4b('0x32')]=_[_0xdc4b('0x30')](_0x26f13f[_0xdc4b('0x31')],qs[_0xdc4b('0x33')](_0x2414c9[_0xdc4b('0x2e')][_0xdc4b('0x33')]));_0x286c5b['attributes']=_0x286c5b[_0xdc4b('0x32')]['length']?_0x286c5b['attributes']:_0x26f13f['model'];if(!_0x2414c9[_0xdc4b('0x2e')][_0xdc4b('0x35')]('nolimit')){_0x286c5b['limit']=qs[_0xdc4b('0x36')](_0x2414c9[_0xdc4b('0x2e')]['limit']);_0x286c5b['offset']=qs[_0xdc4b('0x1d')](_0x2414c9[_0xdc4b('0x2e')][_0xdc4b('0x1d')]);}_0x286c5b[_0xdc4b('0x37')]=qs['sort'](_0x2414c9['query'][_0xdc4b('0x38')]);_0x286c5b[_0xdc4b('0x39')]=qs[_0xdc4b('0x2f')](_[_0xdc4b('0x58')](_0x2414c9[_0xdc4b('0x2e')],_0x26f13f[_0xdc4b('0x2f')]));_0x286c5b[_0xdc4b('0x39')]['CampaignId']=_0x4ea892['id'];if(_0x2414c9[_0xdc4b('0x2e')][_0xdc4b('0x3a')]){_0x286c5b[_0xdc4b('0x39')]=_['merge'](_0x286c5b[_0xdc4b('0x39')],{'$or':_[_0xdc4b('0x3c')](_0x286c5b[_0xdc4b('0x32')],function(_0x253af9){var _0x11bd97={};_0x11bd97[_0x253af9]={'$like':'%'+_0x2414c9[_0xdc4b('0x2e')][_0xdc4b('0x3a')]+'%'};return _0x11bd97;})});}_0x286c5b=_['merge']({},_0x286c5b,_0x2414c9[_0xdc4b('0x40')]);return db[_0xdc4b('0x57')]['count']({'where':_0x286c5b['where']})['then'](function(_0x29bfa2){_0x2677f2['count']=_0x29bfa2;if(_0x2414c9[_0xdc4b('0x2e')]['includeAll']){_0x286c5b[_0xdc4b('0x42')]=[{'all':!![]}];}return db[_0xdc4b('0x57')]['findAll'](_0x286c5b);})[_0xdc4b('0x23')](function(_0x1f359f){_0x2677f2[_0xdc4b('0x44')]=_0x1f359f;return _0x2677f2;});}})[_0xdc4b('0x23')](respondWithFilteredResult(_0x417972,_0x286c5b))['catch'](handleError(_0x417972,null));};exports[_0xdc4b('0x59')]=function(_0x1559bd,_0x45b66d,_0x2ca2e0){var _0x956f07={'raw':!![],'where':{}};var _0x1a9653={};var _0x5bbeb8={'count':0x0,'rows':[]};return db[_0xdc4b('0x2b')][_0xdc4b('0x5a')]({'where':{'id':_0x1559bd[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x45b66d,null))['then'](function(_0x5afabd){if(_0x5afabd){_0x1a9653[_0xdc4b('0x31')]=_[_0xdc4b('0x2d')](db[_0xdc4b('0x5b')][_0xdc4b('0x2c')]);_0x1a9653[_0xdc4b('0x2e')]=_['keys'](_0x1559bd[_0xdc4b('0x2e')]);_0x1a9653[_0xdc4b('0x2f')]=_[_0xdc4b('0x30')](_0x1a9653['model'],_0x1a9653[_0xdc4b('0x2e')]);_0x956f07[_0xdc4b('0x32')]=_[_0xdc4b('0x30')](_0x1a9653[_0xdc4b('0x31')],qs[_0xdc4b('0x33')](_0x1559bd[_0xdc4b('0x2e')][_0xdc4b('0x33')]));_0x956f07['attributes']=_0x956f07[_0xdc4b('0x32')]['length']?_0x956f07[_0xdc4b('0x32')]:_0x1a9653[_0xdc4b('0x31')];if(!_0x1559bd[_0xdc4b('0x2e')]['hasOwnProperty'](_0xdc4b('0x5c'))){_0x956f07[_0xdc4b('0x36')]=qs[_0xdc4b('0x36')](_0x1559bd[_0xdc4b('0x2e')][_0xdc4b('0x36')]);_0x956f07[_0xdc4b('0x1d')]=qs[_0xdc4b('0x1d')](_0x1559bd[_0xdc4b('0x2e')][_0xdc4b('0x1d')]);}_0x956f07[_0xdc4b('0x37')]=qs[_0xdc4b('0x38')](_0x1559bd['query'][_0xdc4b('0x38')]);_0x956f07[_0xdc4b('0x39')]=qs[_0xdc4b('0x2f')](_[_0xdc4b('0x58')](_0x1559bd[_0xdc4b('0x2e')],_0x1a9653['filters']));_0x956f07[_0xdc4b('0x39')][_0xdc4b('0x5d')]=_0x5afabd['id'];if(_0x1559bd['query']['filter']){_0x956f07[_0xdc4b('0x39')]=_['merge'](_0x956f07[_0xdc4b('0x39')],{'$or':_[_0xdc4b('0x3c')](_0x956f07['attributes'],function(_0xec08cd){var _0x2ec7d7={};_0x2ec7d7[_0xec08cd]={'$like':'%'+_0x1559bd[_0xdc4b('0x2e')][_0xdc4b('0x3a')]+'%'};return _0x2ec7d7;})});}_0x956f07=_['merge']({},_0x956f07,_0x1559bd[_0xdc4b('0x40')]);return db[_0xdc4b('0x5b')][_0xdc4b('0x1c')]({'where':_0x956f07[_0xdc4b('0x39')]})['then'](function(_0x497467){_0x5bbeb8[_0xdc4b('0x1c')]=_0x497467;if(_0x1559bd[_0xdc4b('0x2e')]['includeAll']){_0x956f07['include']=[{'all':!![]}];}return db[_0xdc4b('0x5b')][_0xdc4b('0x43')](_0x956f07);})[_0xdc4b('0x23')](function(_0x15db4c){_0x5bbeb8[_0xdc4b('0x44')]=_0x15db4c;return _0x5bbeb8;});}})[_0xdc4b('0x23')](respondWithFilteredResult(_0x45b66d,_0x956f07))[_0xdc4b('0x45')](handleError(_0x45b66d,null));};exports['getHopperFinals']=function(_0x419c61,_0x355d9e,_0xcfe0cd){var _0x28ef2c={'raw':!![],'where':{}};var _0x2f630d={};var _0x421ffd={'count':0x0,'rows':[]};return db[_0xdc4b('0x2b')][_0xdc4b('0x5a')]({'where':{'id':_0x419c61[_0xdc4b('0x47')]['id']}})['then'](handleEntityNotFound(_0x355d9e,null))[_0xdc4b('0x23')](function(_0x354746){if(_0x354746){_0x2f630d[_0xdc4b('0x31')]=_['keys'](db[_0xdc4b('0x5e')][_0xdc4b('0x2c')]);_0x2f630d[_0xdc4b('0x2e')]=_[_0xdc4b('0x2d')](_0x419c61[_0xdc4b('0x2e')]);_0x2f630d[_0xdc4b('0x2f')]=_['intersection'](_0x2f630d[_0xdc4b('0x31')],_0x2f630d[_0xdc4b('0x2e')]);_0x28ef2c[_0xdc4b('0x32')]=_[_0xdc4b('0x30')](_0x2f630d[_0xdc4b('0x31')],qs[_0xdc4b('0x33')](_0x419c61[_0xdc4b('0x2e')][_0xdc4b('0x33')]));_0x28ef2c[_0xdc4b('0x32')]=_0x28ef2c[_0xdc4b('0x32')]['length']?_0x28ef2c[_0xdc4b('0x32')]:_0x2f630d[_0xdc4b('0x31')];if(!_0x419c61[_0xdc4b('0x2e')]['hasOwnProperty']('nolimit')){_0x28ef2c[_0xdc4b('0x36')]=qs[_0xdc4b('0x36')](_0x419c61[_0xdc4b('0x2e')][_0xdc4b('0x36')]);_0x28ef2c[_0xdc4b('0x1d')]=qs['offset'](_0x419c61[_0xdc4b('0x2e')]['offset']);}_0x28ef2c[_0xdc4b('0x37')]=qs['sort'](_0x419c61[_0xdc4b('0x2e')][_0xdc4b('0x38')]);_0x28ef2c[_0xdc4b('0x39')]=qs['filters'](_[_0xdc4b('0x58')](_0x419c61[_0xdc4b('0x2e')],_0x2f630d[_0xdc4b('0x2f')]));_0x28ef2c[_0xdc4b('0x39')][_0xdc4b('0x5d')]=_0x354746['id'];if(_0x419c61[_0xdc4b('0x2e')]['filter']){_0x28ef2c[_0xdc4b('0x39')]=_[_0xdc4b('0x3b')](_0x28ef2c[_0xdc4b('0x39')],{'$or':_[_0xdc4b('0x3c')](_0x28ef2c[_0xdc4b('0x32')],function(_0x1d32cb){var _0x3002fd={};_0x3002fd[_0x1d32cb]={'$like':'%'+_0x419c61[_0xdc4b('0x2e')]['filter']+'%'};return _0x3002fd;})});}_0x28ef2c=_['merge']({},_0x28ef2c,_0x419c61[_0xdc4b('0x40')]);return db[_0xdc4b('0x5e')][_0xdc4b('0x1c')]({'where':_0x28ef2c['where']})['then'](function(_0x1aa47f){_0x421ffd['count']=_0x1aa47f;if(_0x419c61[_0xdc4b('0x2e')]['includeAll']){_0x28ef2c[_0xdc4b('0x42')]=[{'all':!![]}];}return db[_0xdc4b('0x5e')][_0xdc4b('0x43')](_0x28ef2c);})[_0xdc4b('0x23')](function(_0x4a2f95){_0x421ffd[_0xdc4b('0x44')]=_0x4a2f95;return _0x421ffd;});}})[_0xdc4b('0x23')](respondWithFilteredResult(_0x355d9e,_0x28ef2c))[_0xdc4b('0x45')](handleError(_0x355d9e,null));};exports['getHopperBlacks']=function(_0x1f1aaf,_0x593074,_0xca3a11){var _0x2425ce={'raw':!![],'where':{}};var _0x476d2f={};var _0x3aa4a2={'count':0x0,'rows':[]};return db[_0xdc4b('0x2b')]['findOne']({'where':{'id':_0x1f1aaf[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x593074,null))[_0xdc4b('0x23')](function(_0x3c78e9){if(_0x3c78e9){_0x476d2f[_0xdc4b('0x31')]=_[_0xdc4b('0x2d')](db['CmHopperBlack'][_0xdc4b('0x2c')]);_0x476d2f[_0xdc4b('0x2e')]=_['keys'](_0x1f1aaf[_0xdc4b('0x2e')]);_0x476d2f[_0xdc4b('0x2f')]=_[_0xdc4b('0x30')](_0x476d2f['model'],_0x476d2f[_0xdc4b('0x2e')]);_0x2425ce['attributes']=_['intersection'](_0x476d2f[_0xdc4b('0x31')],qs['fields'](_0x1f1aaf['query'][_0xdc4b('0x33')]));_0x2425ce['attributes']=_0x2425ce[_0xdc4b('0x32')][_0xdc4b('0x34')]?_0x2425ce[_0xdc4b('0x32')]:_0x476d2f['model'];if(!_0x1f1aaf['query'][_0xdc4b('0x35')](_0xdc4b('0x5c'))){_0x2425ce['limit']=qs[_0xdc4b('0x36')](_0x1f1aaf[_0xdc4b('0x2e')]['limit']);_0x2425ce[_0xdc4b('0x1d')]=qs[_0xdc4b('0x1d')](_0x1f1aaf[_0xdc4b('0x2e')][_0xdc4b('0x1d')]);}_0x2425ce['order']=qs[_0xdc4b('0x38')](_0x1f1aaf[_0xdc4b('0x2e')][_0xdc4b('0x38')]);_0x2425ce[_0xdc4b('0x39')]=qs[_0xdc4b('0x2f')](_[_0xdc4b('0x58')](_0x1f1aaf[_0xdc4b('0x2e')],_0x476d2f[_0xdc4b('0x2f')]));_0x2425ce[_0xdc4b('0x39')]['CampaignId']=_0x3c78e9['id'];if(_0x1f1aaf[_0xdc4b('0x2e')]['filter']){_0x2425ce[_0xdc4b('0x39')]=_[_0xdc4b('0x3b')](_0x2425ce[_0xdc4b('0x39')],{'$or':_['map'](_0x2425ce[_0xdc4b('0x32')],function(_0x3cfa40){var _0x504ba0={};_0x504ba0[_0x3cfa40]={'$like':'%'+_0x1f1aaf[_0xdc4b('0x2e')][_0xdc4b('0x3a')]+'%'};return _0x504ba0;})});}_0x2425ce=_['merge']({},_0x2425ce,_0x1f1aaf[_0xdc4b('0x40')]);return db[_0xdc4b('0x5f')][_0xdc4b('0x1c')]({'where':_0x2425ce[_0xdc4b('0x39')]})[_0xdc4b('0x23')](function(_0x2a17a1){_0x3aa4a2[_0xdc4b('0x1c')]=_0x2a17a1;if(_0x1f1aaf[_0xdc4b('0x2e')][_0xdc4b('0x41')]){_0x2425ce[_0xdc4b('0x42')]=[{'all':!![]}];}return db[_0xdc4b('0x5f')][_0xdc4b('0x43')](_0x2425ce);})[_0xdc4b('0x23')](function(_0x50118d){_0x3aa4a2[_0xdc4b('0x44')]=_0x50118d;return _0x3aa4a2;});}})[_0xdc4b('0x23')](respondWithFilteredResult(_0x593074,_0x2425ce))[_0xdc4b('0x45')](handleError(_0x593074,null));};exports[_0xdc4b('0x60')]=function(_0x323ed2,_0x4acef6,_0x2e6b1f){var _0x444dbb={};var _0x315f2f={};var _0x2d664d;var _0x8a3aa5;return db['Campaign'][_0xdc4b('0x5a')]({'where':{'id':_0x323ed2[_0xdc4b('0x47')]['id']}})['then'](handleEntityNotFound(_0x4acef6,null))['then'](function(_0x4640a5){if(_0x4640a5){_0x2d664d=_0x4640a5;_0x315f2f['model']=_[_0xdc4b('0x2d')](db[_0xdc4b('0x61')][_0xdc4b('0x2c')]);_0x315f2f[_0xdc4b('0x2e')]=_[_0xdc4b('0x2d')](_0x323ed2[_0xdc4b('0x2e')]);_0x315f2f[_0xdc4b('0x2f')]=_[_0xdc4b('0x30')](_0x315f2f[_0xdc4b('0x31')],_0x315f2f['query']);_0x444dbb[_0xdc4b('0x32')]=_[_0xdc4b('0x30')](_0x315f2f['model'],qs[_0xdc4b('0x33')](_0x323ed2['query'][_0xdc4b('0x33')]));_0x444dbb[_0xdc4b('0x32')]=_0x444dbb[_0xdc4b('0x32')][_0xdc4b('0x34')]?_0x444dbb[_0xdc4b('0x32')]:_0x315f2f[_0xdc4b('0x31')];_0x444dbb[_0xdc4b('0x37')]=qs[_0xdc4b('0x38')](_0x323ed2[_0xdc4b('0x2e')][_0xdc4b('0x38')]);_0x444dbb['where']=qs[_0xdc4b('0x2f')](_[_0xdc4b('0x58')](_0x323ed2['query'],_0x315f2f['filters']));if(_0x323ed2[_0xdc4b('0x2e')][_0xdc4b('0x3a')]){_0x444dbb[_0xdc4b('0x39')]=_[_0xdc4b('0x3b')](_0x444dbb[_0xdc4b('0x39')],{'$or':_[_0xdc4b('0x3c')](_0x444dbb[_0xdc4b('0x32')],function(_0x3ef30c){var _0x23b33d={};_0x23b33d[_0x3ef30c]={'$like':'%'+_0x323ed2[_0xdc4b('0x2e')][_0xdc4b('0x3a')]+'%'};return _0x23b33d;})});}_0x444dbb=_[_0xdc4b('0x3b')]({},_0x444dbb,_0x323ed2[_0xdc4b('0x40')]);return _0x2d664d['getLists'](_0x444dbb);}})[_0xdc4b('0x23')](function(_0x330227){if(_0x330227){_0x8a3aa5=_0x330227['length'];if(!_0x323ed2[_0xdc4b('0x2e')][_0xdc4b('0x35')](_0xdc4b('0x5c'))){_0x444dbb[_0xdc4b('0x36')]=qs['limit'](_0x323ed2['query'][_0xdc4b('0x36')]);_0x444dbb['offset']=qs['offset'](_0x323ed2[_0xdc4b('0x2e')][_0xdc4b('0x1d')]);}return _0x2d664d[_0xdc4b('0x60')](_0x444dbb);}})['then'](function(_0x2c04c1){if(_0x2c04c1){return _0x2c04c1?{'count':_0x8a3aa5,'rows':_0x2c04c1}:null;}})[_0xdc4b('0x23')](respondWithResult(_0x4acef6,null))['catch'](handleError(_0x4acef6,null));};exports[_0xdc4b('0x62')]=function(_0x399ad7,_0x542619,_0x2a4fbd){var _0x441ec8,_0x35d935;return db[_0xdc4b('0x2b')]['find']({'where':{'id':_0x399ad7[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x542619,null))[_0xdc4b('0x23')](function(_0x3292f4){if(_0x3292f4){_0x35d935=_0x3292f4;return _0x3292f4[_0xdc4b('0x62')](_0x399ad7[_0xdc4b('0x4a')][_0xdc4b('0x63')],_[_0xdc4b('0x52')](_0x399ad7[_0xdc4b('0x4a')],['ids','id'])||{});}return null;})[_0xdc4b('0x64')](function(_0x30fe2f){var _0x1e4ace;_0x441ec8=_0x30fe2f||[];var _0x3491a7=[];if(_0x30fe2f){for(var _0x31697d=0x0;_0x31697d<_0x30fe2f[_0xdc4b('0x34')];_0x31697d+=0x1){var _0x5179d9=_0x30fe2f[_0x31697d][_0xdc4b('0x25')]({'plain':!![]});_0x35d935['dialCheckDuplicateType']=_0x399ad7[_0xdc4b('0x4a')][_0xdc4b('0x65')]?_0x399ad7[_0xdc4b('0x4a')][_0xdc4b('0x65')]:_0x35d935['dialCheckDuplicateType'];switch(_0x35d935[_0xdc4b('0x65')]){case _0xdc4b('0x66'):_0x1e4ace=squel[_0xdc4b('0x67')]()[_0xdc4b('0x68')](_0xdc4b('0x69'))['fromQuery'](['phone',_0xdc4b('0x6a'),_0xdc4b('0x6b'),_0xdc4b('0x6c'),_0xdc4b('0x5d'),_0xdc4b('0x53'),_0xdc4b('0x54')],squel[_0xdc4b('0x6d')]()[_0xdc4b('0x3f')](_0xdc4b('0x6e'),_0xdc4b('0x6e'))['field'](_0xdc4b('0x6f'),_0xdc4b('0x6a'))['field']('id','ContactId')['field'](_0x5179d9['CmListId']['toString'](),_0xdc4b('0x6c'))[_0xdc4b('0x3f')](_0x399ad7[_0xdc4b('0x47')]['id'][_0xdc4b('0x70')](),_0xdc4b('0x5d'))[_0xdc4b('0x3f')](_0xdc4b('0x6f'),_0xdc4b('0x53'))['field'](_0xdc4b('0x6f'),_0xdc4b('0x54'))[_0xdc4b('0x71')](_0xdc4b('0x72'))['where'](_0xdc4b('0x73'))[_0xdc4b('0x39')](_0xdc4b('0x74'),_0x5179d9[_0xdc4b('0x75')][_0xdc4b('0x70')]())[_0xdc4b('0x39')](_0xdc4b('0x76'))[_0xdc4b('0x39')](_0xdc4b('0x77'),squel[_0xdc4b('0x6d')]()[_0xdc4b('0x3f')](_0xdc4b('0x78'))[_0xdc4b('0x71')](_0xdc4b('0x79'))[_0xdc4b('0x39')]('CampaignId\x20=\x20?',_0x399ad7['params']['id']['toString']()))[_0xdc4b('0x39')](_0xdc4b('0x77'),squel[_0xdc4b('0x6d')]()[_0xdc4b('0x3f')](_0xdc4b('0x7a'))[_0xdc4b('0x71')]('cm_hopper')[_0xdc4b('0x39')](_0xdc4b('0x7b'),_0x399ad7[_0xdc4b('0x47')]['id'][_0xdc4b('0x70')]())))['toString']();break;case _0xdc4b('0x7c'):_0x1e4ace=squel[_0xdc4b('0x67')]()[_0xdc4b('0x68')](_0xdc4b('0x69'))[_0xdc4b('0x7d')]([_0xdc4b('0x6e'),'scheduledAt',_0xdc4b('0x6b'),_0xdc4b('0x6c'),_0xdc4b('0x5d'),_0xdc4b('0x53'),_0xdc4b('0x54')],squel['select']()[_0xdc4b('0x3f')]('phone',_0xdc4b('0x6e'))[_0xdc4b('0x3f')](_0xdc4b('0x6f'),_0xdc4b('0x6a'))[_0xdc4b('0x3f')]('id',_0xdc4b('0x6b'))[_0xdc4b('0x3f')](_0x5179d9[_0xdc4b('0x75')][_0xdc4b('0x70')](),_0xdc4b('0x6c'))[_0xdc4b('0x3f')](_0x399ad7[_0xdc4b('0x47')]['id'][_0xdc4b('0x70')](),'CampaignId')[_0xdc4b('0x3f')]('NOW()','createdAt')[_0xdc4b('0x3f')](_0xdc4b('0x6f'),_0xdc4b('0x54'))[_0xdc4b('0x71')](_0xdc4b('0x72'))['where'](_0xdc4b('0x73'))[_0xdc4b('0x39')]('ListId\x20=\x20?',_0x5179d9[_0xdc4b('0x75')][_0xdc4b('0x70')]())[_0xdc4b('0x39')]('phone\x20IS\x20NOT\x20NULL')[_0xdc4b('0x39')]('phone\x20NOT\x20IN\x20(?)',squel['select']()[_0xdc4b('0x3f')](_0xdc4b('0x7a'))['from'](_0xdc4b('0x69'))[_0xdc4b('0x39')](_0xdc4b('0x7b'),_0x399ad7['params']['id'][_0xdc4b('0x70')]())))['toString']();break;default:_0x1e4ace=squel['insert']()[_0xdc4b('0x68')](_0xdc4b('0x69'))[_0xdc4b('0x7d')]([_0xdc4b('0x6e'),_0xdc4b('0x6a'),_0xdc4b('0x6b'),_0xdc4b('0x6c'),_0xdc4b('0x5d'),_0xdc4b('0x53'),'updatedAt'],squel[_0xdc4b('0x6d')]()['field'](_0xdc4b('0x6e'),'phone')['field'](_0xdc4b('0x6f'),'scheduledAt')[_0xdc4b('0x3f')]('id',_0xdc4b('0x6b'))[_0xdc4b('0x3f')](_0x5179d9[_0xdc4b('0x75')]['toString'](),'ListId')['field'](_0x399ad7[_0xdc4b('0x47')]['id'][_0xdc4b('0x70')](),_0xdc4b('0x5d'))['field'](_0xdc4b('0x6f'),_0xdc4b('0x53'))['field'](_0xdc4b('0x6f'),_0xdc4b('0x54'))[_0xdc4b('0x71')]('cm_contacts')['where'](_0xdc4b('0x73'))[_0xdc4b('0x39')](_0xdc4b('0x74'),_0x5179d9[_0xdc4b('0x75')]['toString']())[_0xdc4b('0x39')]('phone\x20IS\x20NOT\x20NULL'))['toString']();}_0x3491a7[_0xdc4b('0x7e')](db['sequelize'][_0xdc4b('0x2e')](_0x1e4ace));}return BPromise[_0xdc4b('0x7f')](_0x3491a7);}})[_0xdc4b('0x23')](function(){return _0x441ec8;})[_0xdc4b('0x23')](respondWithResult(_0x542619,null))[_0xdc4b('0x45')](handleError(_0x542619,null));};exports[_0xdc4b('0x80')]=function(_0x2429bb,_0x2ec85b,_0x2c1b5d){var _0x28a315;return db[_0xdc4b('0x2b')][_0xdc4b('0x48')]({'where':{'id':_0x2429bb[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x2ec85b,null))[_0xdc4b('0x23')](function(_0xf35e3){if(_0xf35e3){return _0xf35e3[_0xdc4b('0x80')](_0x2429bb[_0xdc4b('0x2e')]['ids']);}})[_0xdc4b('0x23')](function(_0x5ac75e){if(_0x5ac75e){_0x28a315=_0x5ac75e;return db['CmHopper'][_0xdc4b('0x24')]({'where':{'ListId':_0x2429bb[_0xdc4b('0x2e')][_0xdc4b('0x63')],'CampaignId':_0x2429bb[_0xdc4b('0x47')]['id']}})['then'](function(){return _0x28a315;});}})[_0xdc4b('0x23')](respondWithStatusCode(_0x2ec85b,null))['catch'](handleError(_0x2ec85b,null));};exports[_0xdc4b('0x81')]=function(_0x52c2ce,_0x4907ee,_0x474b5b){var _0x34b91b={'raw':!![],'where':{}};var _0x22aad4={};var _0x49e04c={'count':0x0,'rows':[]};return db['Campaign'][_0xdc4b('0x5a')]({'where':{'id':_0x52c2ce[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x4907ee,null))[_0xdc4b('0x23')](function(_0x488184){if(_0x488184){_0x22aad4['model']=_['keys'](db[_0xdc4b('0x61')][_0xdc4b('0x2c')]);_0x22aad4[_0xdc4b('0x2e')]=_[_0xdc4b('0x2d')](_0x52c2ce['query']);_0x22aad4[_0xdc4b('0x2f')]=_['intersection'](_0x22aad4[_0xdc4b('0x31')],_0x22aad4[_0xdc4b('0x2e')]);_0x34b91b[_0xdc4b('0x32')]=_[_0xdc4b('0x30')](_0x22aad4['model'],qs['fields'](_0x52c2ce[_0xdc4b('0x2e')][_0xdc4b('0x33')]));_0x34b91b[_0xdc4b('0x32')]=_0x34b91b['attributes']['length']?_0x34b91b['attributes']:_0x22aad4[_0xdc4b('0x31')];if(!_0x52c2ce[_0xdc4b('0x2e')][_0xdc4b('0x35')](_0xdc4b('0x5c'))){_0x34b91b[_0xdc4b('0x36')]=qs[_0xdc4b('0x36')](_0x52c2ce[_0xdc4b('0x2e')][_0xdc4b('0x36')]);_0x34b91b['offset']=qs[_0xdc4b('0x1d')](_0x52c2ce[_0xdc4b('0x2e')][_0xdc4b('0x1d')]);}_0x34b91b[_0xdc4b('0x37')]=qs[_0xdc4b('0x38')](_0x52c2ce['query']['sort']);_0x34b91b[_0xdc4b('0x39')]=qs['filters'](_['pick'](_0x52c2ce[_0xdc4b('0x2e')],_0x22aad4['filters']));_0x34b91b[_0xdc4b('0x39')][_0xdc4b('0x5d')]=_0x488184['id'];if(_0x52c2ce['query'][_0xdc4b('0x3a')]){_0x34b91b[_0xdc4b('0x39')]=_[_0xdc4b('0x3b')](_0x34b91b[_0xdc4b('0x39')],{'$or':_[_0xdc4b('0x3c')](_0x34b91b[_0xdc4b('0x32')],function(_0x41aa11){var _0x448f0b={};_0x448f0b[_0x41aa11]={'$like':'%'+_0x52c2ce['query'][_0xdc4b('0x3a')]+'%'};return _0x448f0b;})});}_0x34b91b=_[_0xdc4b('0x3b')]({},_0x34b91b,_0x52c2ce[_0xdc4b('0x40')]);return db['CmList']['count']({'where':_0x34b91b[_0xdc4b('0x39')]})['then'](function(_0x1ee0c7){_0x49e04c['count']=_0x1ee0c7;if(_0x52c2ce['query'][_0xdc4b('0x41')]){_0x34b91b[_0xdc4b('0x42')]=[{'all':!![]}];}return db[_0xdc4b('0x61')][_0xdc4b('0x43')](_0x34b91b);})[_0xdc4b('0x23')](function(_0x5e2be5){_0x49e04c[_0xdc4b('0x44')]=_0x5e2be5;return _0x49e04c;});}})[_0xdc4b('0x23')](respondWithFilteredResult(_0x4907ee,_0x34b91b))[_0xdc4b('0x45')](handleError(_0x4907ee,null));};exports[_0xdc4b('0x82')]=function(_0x529c3d,_0x195bd1,_0x265971){var _0xd49b3c,_0x178188;return db[_0xdc4b('0x2b')][_0xdc4b('0x48')]({'where':{'id':_0x529c3d[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x195bd1,null))[_0xdc4b('0x23')](function(_0xd05473){if(_0xd05473){_0x178188=_0xd05473;return _0xd05473[_0xdc4b('0x82')](_0x529c3d[_0xdc4b('0x4a')][_0xdc4b('0x63')],_[_0xdc4b('0x52')](_0x529c3d['body'],[_0xdc4b('0x63'),'id'])||{});}return null;})[_0xdc4b('0x64')](function(_0xc56320){var _0x28e954;_0xd49b3c=_0xc56320||[];var _0x36299e=[];if(_0xc56320){for(var _0x303246=0x0;_0x303246<_0xc56320[_0xdc4b('0x34')];_0x303246+=0x1){var _0xcc2ac5=_0xc56320[_0x303246][_0xdc4b('0x25')]({'plain':!![]});_0x28e954=squel[_0xdc4b('0x67')]()['into'](_0xdc4b('0x83'))[_0xdc4b('0x7d')]([_0xdc4b('0x6e'),_0xdc4b('0x6b'),_0xdc4b('0x6c'),_0xdc4b('0x5d'),'createdAt',_0xdc4b('0x54')],squel[_0xdc4b('0x6d')]()[_0xdc4b('0x3f')](_0xdc4b('0x6e'),_0xdc4b('0x6e'))['field']('id',_0xdc4b('0x6b'))['field'](_0xcc2ac5[_0xdc4b('0x75')][_0xdc4b('0x70')](),_0xdc4b('0x6c'))['field'](_0x529c3d[_0xdc4b('0x47')]['id']['toString'](),_0xdc4b('0x5d'))['field'](_0xdc4b('0x6f'),'createdAt')[_0xdc4b('0x3f')](_0xdc4b('0x6f'),_0xdc4b('0x54'))[_0xdc4b('0x71')](_0xdc4b('0x72'))[_0xdc4b('0x39')]('deletedAt\x20IS\x20NULL')['where'](_0xdc4b('0x74'),_0xcc2ac5[_0xdc4b('0x75')][_0xdc4b('0x70')]())[_0xdc4b('0x39')](_0xdc4b('0x76')))['toString']();_0x36299e[_0xdc4b('0x7e')](db[_0xdc4b('0x84')][_0xdc4b('0x2e')](_0x28e954));}return BPromise['all'](_0x36299e);}})[_0xdc4b('0x23')](function(){return _0xd49b3c;})['then'](respondWithResult(_0x195bd1,null))[_0xdc4b('0x45')](handleError(_0x195bd1,null));};exports['removeBlackLists']=function(_0x52fefa,_0x35c080,_0x4ecdbf){var _0x43de8b;return db['Campaign'][_0xdc4b('0x48')]({'where':{'id':_0x52fefa[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](handleEntityNotFound(_0x35c080,null))[_0xdc4b('0x23')](function(_0x5aad61){if(_0x5aad61){return _0x5aad61[_0xdc4b('0x85')](_0x52fefa[_0xdc4b('0x2e')]['ids']);}})[_0xdc4b('0x23')](function(_0x21dcc1){if(_0x21dcc1){_0x43de8b=_0x21dcc1;return db[_0xdc4b('0x5f')][_0xdc4b('0x24')]({'where':{'ListId':_0x52fefa[_0xdc4b('0x2e')][_0xdc4b('0x63')],'CampaignId':_0x52fefa[_0xdc4b('0x47')]['id']}})[_0xdc4b('0x23')](function(){return _0x43de8b;});}})[_0xdc4b('0x23')](respondWithStatusCode(_0x35c080,null))[_0xdc4b('0x45')](handleError(_0x35c080,null));};
\ No newline at end of file
index 1e60f84..15aeae2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee2c=['lodash','../../config/logger','api','moment','bluebird','request-promise','./campaign.attributes','define','Campaign','campaigns'];(function(_0x36ed3c,_0x44a00a){var _0x52a2e0=function(_0x3f7af9){while(--_0x3f7af9){_0x36ed3c['push'](_0x36ed3c['shift']());}};_0x52a2e0(++_0x44a00a);}(_0xee2c,0x64));var _0xcee2=function(_0x47aa64,_0xfb8a07){_0x47aa64=_0x47aa64-0x0;var _0x549c7a=_0xee2c[_0x47aa64];return _0x549c7a;};'use strict';var _=require(_0xcee2('0x0'));var util=require('util');var logger=require(_0xcee2('0x1'))(_0xcee2('0x2'));var moment=require(_0xcee2('0x3'));var BPromise=require(_0xcee2('0x4'));var rp=require(_0xcee2('0x5'));var attributes=require(_0xcee2('0x6'));module['exports']=function(_0x384eda,_0x5c80d3){return _0x384eda[_0xcee2('0x7')](_0xcee2('0x8'),attributes,{'tableName':_0xcee2('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe7ac=['campaigns','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./campaign.attributes','define','Campaign'];(function(_0xcf88b4,_0xac682f){var _0x42984c=function(_0x25869e){while(--_0x25869e){_0xcf88b4['push'](_0xcf88b4['shift']());}};_0x42984c(++_0xac682f);}(_0xe7ac,0xf3));var _0xce7a=function(_0x5e105f,_0x547c21){_0x5e105f=_0x5e105f-0x0;var _0x24c37e=_0xe7ac[_0x5e105f];return _0x24c37e;};'use strict';var _=require(_0xce7a('0x0'));var util=require(_0xce7a('0x1'));var logger=require(_0xce7a('0x2'))(_0xce7a('0x3'));var moment=require(_0xce7a('0x4'));var BPromise=require(_0xce7a('0x5'));var rp=require(_0xce7a('0x6'));var attributes=require(_0xce7a('0x7'));module['exports']=function(_0x1c036c,_0xb15944){return _0x1c036c[_0xce7a('0x8')](_0xce7a('0x9'),attributes,{'tableName':_0xce7a('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8f1fbd2..99ded8d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd09b=['error','message','result','catch','GetCampaign','Campaign','findAll','options','raw','where','attributes','map','model','include','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','Campaign,\x20%s,\x20%s','request\x20sent','debug','Campaign,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x104069,_0x396369){var _0x355f81=function(_0x21e0c3){while(--_0x21e0c3){_0x104069['push'](_0x104069['shift']());}};_0x355f81(++_0x396369);}(_0xd09b,0x162));var _0xbd09=function(_0x3af5f7,_0x42300b){_0x3af5f7=_0x3af5f7-0x0;var _0x96e207=_0xd09b[_0x3af5f7];return _0x96e207;};'use strict';var _=require(_0xbd09('0x0'));var util=require(_0xbd09('0x1'));var moment=require(_0xbd09('0x2'));var BPromise=require(_0xbd09('0x3'));var rs=require(_0xbd09('0x4'));var fs=require('fs');var Redis=require(_0xbd09('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xbd09('0x6'));var logger=require(_0xbd09('0x7'))('rpc');var config=require(_0xbd09('0x8'));var jayson=require(_0xbd09('0x9'));var client=jayson[_0xbd09('0xa')][_0xbd09('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x14fa71,_0x4d5926,_0x3cf34c){return new BPromise(function(_0x1cd178,_0x20a7be){return client[_0xbd09('0xc')](_0x14fa71,_0x3cf34c)[_0xbd09('0xd')](function(_0x57ff6f){logger[_0xbd09('0xe')](_0xbd09('0xf'),_0x4d5926,_0xbd09('0x10'));logger[_0xbd09('0x11')](_0xbd09('0x12'),_0x4d5926,_0xbd09('0x10'),JSON[_0xbd09('0x13')](_0x57ff6f));if(_0x57ff6f['error']){if(_0x57ff6f['error']['code']===0x1f4){logger[_0xbd09('0x14')](_0xbd09('0xf'),_0x4d5926,_0x57ff6f[_0xbd09('0x14')][_0xbd09('0x15')]);return _0x20a7be(_0x57ff6f[_0xbd09('0x14')][_0xbd09('0x15')]);}logger[_0xbd09('0x14')]('Campaign,\x20%s,\x20%s',_0x4d5926,_0x57ff6f[_0xbd09('0x14')][_0xbd09('0x15')]);return _0x1cd178(_0x57ff6f[_0xbd09('0x14')]['message']);}else{logger[_0xbd09('0xe')](_0xbd09('0xf'),_0x4d5926,_0xbd09('0x10'));_0x1cd178(_0x57ff6f[_0xbd09('0x16')][_0xbd09('0x15')]);}})[_0xbd09('0x17')](function(_0x44e14d){logger[_0xbd09('0x14')](_0xbd09('0xf'),_0x4d5926,_0x44e14d);_0x20a7be(_0x44e14d);});});}exports[_0xbd09('0x18')]=function(_0x18a787){var _0x924fa4=this;return new Promise(function(_0x482e16,_0x5ed167){return db[_0xbd09('0x19')][_0xbd09('0x1a')]({'raw':_0x18a787[_0xbd09('0x1b')]?_0x18a787[_0xbd09('0x1b')][_0xbd09('0x1c')]===undefined?!![]:![]:!![],'where':_0x18a787[_0xbd09('0x1b')]?_0x18a787[_0xbd09('0x1b')][_0xbd09('0x1d')]||null:null,'attributes':_0x18a787[_0xbd09('0x1b')]?_0x18a787[_0xbd09('0x1b')][_0xbd09('0x1e')]||null:null,'limit':_0x18a787[_0xbd09('0x1b')]?_0x18a787[_0xbd09('0x1b')]['limit']||null:null,'include':_0x18a787['options']?_0x18a787[_0xbd09('0x1b')]['include']?_[_0xbd09('0x1f')](_0x18a787[_0xbd09('0x1b')]['include'],function(_0x546232){return{'model':db[_0x546232[_0xbd09('0x20')]],'as':_0x546232['as'],'attributes':_0x546232[_0xbd09('0x1e')],'include':_0x546232[_0xbd09('0x21')]?_['map'](_0x546232[_0xbd09('0x21')],function(_0x19b5c2){return{'model':db[_0x19b5c2[_0xbd09('0x20')]],'as':_0x19b5c2['as'],'attributes':_0x19b5c2[_0xbd09('0x1e')],'include':_0x19b5c2[_0xbd09('0x21')]?_[_0xbd09('0x1f')](_0x19b5c2['include'],function(_0x18efdd){return{'model':db[_0x18efdd['model']],'as':_0x18efdd['as'],'attributes':_0x18efdd[_0xbd09('0x1e')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x71d29a){logger[_0xbd09('0xe')](_0xbd09('0x18'),_0x18a787);logger['debug'](_0xbd09('0x18'),_0x18a787,JSON[_0xbd09('0x13')](_0x71d29a));_0x482e16(_0x71d29a);})[_0xbd09('0x17')](function(_0x5cbfe4){logger[_0xbd09('0x14')](_0xbd09('0x18'),_0x5cbfe4[_0xbd09('0x15')],_0x18a787);_0x5ed167(_0x924fa4[_0xbd09('0x14')](0x1f4,_0x5cbfe4[_0xbd09('0x15')]));});});};
\ No newline at end of file
+var _0xb6ac=['findAll','options','where','attributes','include','map','model','GetCampaign','stringify','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','Campaign,\x20%s,\x20%s,\x20%s','error','Campaign,\x20%s,\x20%s','message','result','catch'];(function(_0x4e9628,_0x250573){var _0x27bc8c=function(_0xb3b7ae){while(--_0xb3b7ae){_0x4e9628['push'](_0x4e9628['shift']());}};_0x27bc8c(++_0x250573);}(_0xb6ac,0x69));var _0xcb6a=function(_0x337c27,_0x2a4000){_0x337c27=_0x337c27-0x0;var _0x37bafd=_0xb6ac[_0x337c27];return _0x37bafd;};'use strict';var _=require(_0xcb6a('0x0'));var util=require('util');var moment=require(_0xcb6a('0x1'));var BPromise=require(_0xcb6a('0x2'));var rs=require(_0xcb6a('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xcb6a('0x4'))['db'];var utils=require(_0xcb6a('0x5'));var logger=require(_0xcb6a('0x6'))(_0xcb6a('0x7'));var config=require(_0xcb6a('0x8'));var jayson=require(_0xcb6a('0x9'));var client=jayson[_0xcb6a('0xa')][_0xcb6a('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x274a82,_0x7d4b38,_0x2d7168){return new BPromise(function(_0x34ad27,_0x365f08){return client[_0xcb6a('0xc')](_0x274a82,_0x2d7168)[_0xcb6a('0xd')](function(_0x504062){logger[_0xcb6a('0xe')]('Campaign,\x20%s,\x20%s',_0x7d4b38,_0xcb6a('0xf'));logger[_0xcb6a('0x10')](_0xcb6a('0x11'),_0x7d4b38,_0xcb6a('0xf'),JSON['stringify'](_0x504062));if(_0x504062[_0xcb6a('0x12')]){if(_0x504062[_0xcb6a('0x12')]['code']===0x1f4){logger[_0xcb6a('0x12')](_0xcb6a('0x13'),_0x7d4b38,_0x504062[_0xcb6a('0x12')]['message']);return _0x365f08(_0x504062[_0xcb6a('0x12')][_0xcb6a('0x14')]);}logger[_0xcb6a('0x12')]('Campaign,\x20%s,\x20%s',_0x7d4b38,_0x504062[_0xcb6a('0x12')][_0xcb6a('0x14')]);return _0x34ad27(_0x504062[_0xcb6a('0x12')][_0xcb6a('0x14')]);}else{logger[_0xcb6a('0xe')](_0xcb6a('0x13'),_0x7d4b38,_0xcb6a('0xf'));_0x34ad27(_0x504062[_0xcb6a('0x15')][_0xcb6a('0x14')]);}})[_0xcb6a('0x16')](function(_0x241abb){logger['error'](_0xcb6a('0x13'),_0x7d4b38,_0x241abb);_0x365f08(_0x241abb);});});}exports['GetCampaign']=function(_0x340a6a){var _0x3471ff=this;return new Promise(function(_0x456acb,_0x3ef404){return db['Campaign'][_0xcb6a('0x17')]({'raw':_0x340a6a[_0xcb6a('0x18')]?_0x340a6a['options']['raw']===undefined?!![]:![]:!![],'where':_0x340a6a['options']?_0x340a6a[_0xcb6a('0x18')][_0xcb6a('0x19')]||null:null,'attributes':_0x340a6a[_0xcb6a('0x18')]?_0x340a6a[_0xcb6a('0x18')][_0xcb6a('0x1a')]||null:null,'limit':_0x340a6a[_0xcb6a('0x18')]?_0x340a6a[_0xcb6a('0x18')]['limit']||null:null,'include':_0x340a6a['options']?_0x340a6a[_0xcb6a('0x18')][_0xcb6a('0x1b')]?_[_0xcb6a('0x1c')](_0x340a6a['options'][_0xcb6a('0x1b')],function(_0x149804){return{'model':db[_0x149804[_0xcb6a('0x1d')]],'as':_0x149804['as'],'attributes':_0x149804['attributes'],'include':_0x149804[_0xcb6a('0x1b')]?_[_0xcb6a('0x1c')](_0x149804[_0xcb6a('0x1b')],function(_0x5e3ef2){return{'model':db[_0x5e3ef2[_0xcb6a('0x1d')]],'as':_0x5e3ef2['as'],'attributes':_0x5e3ef2[_0xcb6a('0x1a')],'include':_0x5e3ef2[_0xcb6a('0x1b')]?_[_0xcb6a('0x1c')](_0x5e3ef2[_0xcb6a('0x1b')],function(_0x5d77cc){return{'model':db[_0x5d77cc['model']],'as':_0x5d77cc['as'],'attributes':_0x5d77cc[_0xcb6a('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x399db3){logger[_0xcb6a('0xe')]('GetCampaign',_0x340a6a);logger[_0xcb6a('0x10')](_0xcb6a('0x1e'),_0x340a6a,JSON[_0xcb6a('0x1f')](_0x399db3));_0x456acb(_0x399db3);})[_0xcb6a('0x16')](function(_0x3e6589){logger[_0xcb6a('0x12')](_0xcb6a('0x1e'),_0x3e6589[_0xcb6a('0x14')],_0x340a6a);_0x3ef404(_0x3471ff[_0xcb6a('0x12')](0x1f4,_0x3e6589[_0xcb6a('0x14')]));});});};
\ No newline at end of file
index bf3051b..de45328 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x708f=['/:id/lists','getLists','/:id/blacklists','getBlackLists','create','post','/:id/clone','addLists','addBlackLists','put','update','delete','destroy','removeLists','removeBlackLists','exports','util','path','connect-timeout','Router','../../components/auth/service','../../config/environment','./campaign.controller','get','index','/:id','isAuthenticated','show','/:id/hoppers','getHoppers','/:id/hopper_finals','getHopperFinals','getHopperBlacks'];(function(_0x3e0dc4,_0x13971b){var _0x586111=function(_0x123c53){while(--_0x123c53){_0x3e0dc4['push'](_0x3e0dc4['shift']());}};_0x586111(++_0x13971b);}(_0x708f,0x73));var _0xf708=function(_0x4aa71a,_0x58800f){_0x4aa71a=_0x4aa71a-0x0;var _0x17bb3=_0x708f[_0x4aa71a];return _0x17bb3;};'use strict';var multer=require('multer');var util=require(_0xf708('0x0'));var path=require(_0xf708('0x1'));var timeout=require(_0xf708('0x2'));var express=require('express');var router=express[_0xf708('0x3')]();var auth=require(_0xf708('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xf708('0x5'));var controller=require(_0xf708('0x6'));router[_0xf708('0x7')]('/',auth['isAuthenticated'](),controller[_0xf708('0x8')]);router[_0xf708('0x7')](_0xf708('0x9'),auth[_0xf708('0xa')](),controller[_0xf708('0xb')]);router[_0xf708('0x7')](_0xf708('0xc'),auth[_0xf708('0xa')](),controller[_0xf708('0xd')]);router[_0xf708('0x7')]('/:id/hopper_histories',auth[_0xf708('0xa')](),controller['getHopperHistories']);router[_0xf708('0x7')](_0xf708('0xe'),auth[_0xf708('0xa')](),controller[_0xf708('0xf')]);router['get']('/:id/hopper_black',auth['isAuthenticated'](),controller[_0xf708('0x10')]);router['get'](_0xf708('0x11'),auth[_0xf708('0xa')](),controller[_0xf708('0x12')]);router['get'](_0xf708('0x13'),auth[_0xf708('0xa')](),controller[_0xf708('0x14')]);router['post']('/',auth[_0xf708('0xa')](),controller[_0xf708('0x15')]);router[_0xf708('0x16')](_0xf708('0x17'),auth[_0xf708('0xa')](),controller['clone']);router[_0xf708('0x16')]('/:id/lists',auth[_0xf708('0xa')](),controller[_0xf708('0x18')]);router[_0xf708('0x16')](_0xf708('0x13'),auth[_0xf708('0xa')](),controller[_0xf708('0x19')]);router[_0xf708('0x1a')]('/:id',auth[_0xf708('0xa')](),controller[_0xf708('0x1b')]);router[_0xf708('0x1c')](_0xf708('0x9'),auth['isAuthenticated'](),controller[_0xf708('0x1d')]);router[_0xf708('0x1c')](_0xf708('0x11'),auth[_0xf708('0xa')](),controller[_0xf708('0x1e')]);router[_0xf708('0x1c')]('/:id/blacklists',auth['isAuthenticated'](),controller[_0xf708('0x1f')]);module[_0xf708('0x20')]=router;
\ No newline at end of file
+var _0x55c0=['/:id/hopper_histories','getHopperHistories','getHopperFinals','/:id/hopper_black','/:id/lists','/:id/blacklists','post','/:id/clone','clone','put','update','destroy','removeLists','delete','exports','multer','util','path','../../components/auth/service','../../components/interaction/service','./campaign.controller','isAuthenticated','index','get','/:id','show'];(function(_0x15951f,_0x4019b3){var _0x40a1fa=function(_0x3810e8){while(--_0x3810e8){_0x15951f['push'](_0x15951f['shift']());}};_0x40a1fa(++_0x4019b3);}(_0x55c0,0x91));var _0x055c=function(_0x45138b,_0xec2bd6){_0x45138b=_0x45138b-0x0;var _0x398884=_0x55c0[_0x45138b];return _0x398884;};'use strict';var multer=require(_0x055c('0x0'));var util=require(_0x055c('0x1'));var path=require(_0x055c('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0x055c('0x3'));var interaction=require(_0x055c('0x4'));var config=require('../../config/environment');var controller=require(_0x055c('0x5'));router['get']('/',auth[_0x055c('0x6')](),controller[_0x055c('0x7')]);router[_0x055c('0x8')](_0x055c('0x9'),auth[_0x055c('0x6')](),controller[_0x055c('0xa')]);router[_0x055c('0x8')]('/:id/hoppers',auth[_0x055c('0x6')](),controller['getHoppers']);router[_0x055c('0x8')](_0x055c('0xb'),auth[_0x055c('0x6')](),controller[_0x055c('0xc')]);router[_0x055c('0x8')]('/:id/hopper_finals',auth[_0x055c('0x6')](),controller[_0x055c('0xd')]);router[_0x055c('0x8')](_0x055c('0xe'),auth[_0x055c('0x6')](),controller['getHopperBlacks']);router[_0x055c('0x8')](_0x055c('0xf'),auth[_0x055c('0x6')](),controller['getLists']);router[_0x055c('0x8')](_0x055c('0x10'),auth[_0x055c('0x6')](),controller['getBlackLists']);router[_0x055c('0x11')]('/',auth['isAuthenticated'](),controller['create']);router[_0x055c('0x11')](_0x055c('0x12'),auth['isAuthenticated'](),controller[_0x055c('0x13')]);router[_0x055c('0x11')]('/:id/lists',auth[_0x055c('0x6')](),controller['addLists']);router[_0x055c('0x11')](_0x055c('0x10'),auth[_0x055c('0x6')](),controller['addBlackLists']);router[_0x055c('0x14')](_0x055c('0x9'),auth['isAuthenticated'](),controller[_0x055c('0x15')]);router['delete'](_0x055c('0x9'),auth[_0x055c('0x6')](),controller[_0x055c('0x16')]);router['delete']('/:id/lists',auth[_0x055c('0x6')](),controller[_0x055c('0x17')]);router[_0x055c('0x18')]('/:id/blacklists',auth[_0x055c('0x6')](),controller['removeBlackLists']);module[_0x055c('0x19')]=router;
\ No newline at end of file
index 561c20b..2982a0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1555=['VIRTUAL','key','exports','STRING'];(function(_0x30721b,_0x2cd060){var _0x3c9f84=function(_0x366620){while(--_0x366620){_0x30721b['push'](_0x30721b['shift']());}};_0x3c9f84(++_0x2cd060);}(_0x1555,0x1e6));var _0x5155=function(_0x247c03,_0x1c0f0b){_0x247c03=_0x247c03-0x0;var _0xc489d7=_0x1555[_0x247c03];return _0xc489d7;};'use strict';var Sequelize=require('sequelize');module[_0x5155('0x0')]={'key':{'type':Sequelize[_0x5155('0x1')],'allowNull':![]},'value':{'type':Sequelize['TEXT'],'allowNull':![]},'description':{'type':Sequelize['STRING']},'name':{'type':Sequelize[_0x5155('0x2')],'get':function(){return this['getDataValue'](_0x5155('0x3'));}}};
\ No newline at end of file
+var _0x29d5=['TEXT','STRING','VIRTUAL','key','sequelize','exports'];(function(_0x41bdd4,_0x3d5c76){var _0x5c03a6=function(_0x59634a){while(--_0x59634a){_0x41bdd4['push'](_0x41bdd4['shift']());}};_0x5c03a6(++_0x3d5c76);}(_0x29d5,0x124));var _0x529d=function(_0x4bd981,_0x62d763){_0x4bd981=_0x4bd981-0x0;var _0x24d58e=_0x29d5[_0x4bd981];return _0x24d58e;};'use strict';var Sequelize=require(_0x529d('0x0'));module[_0x529d('0x1')]={'key':{'type':Sequelize['STRING'],'allowNull':![]},'value':{'type':Sequelize[_0x529d('0x2')],'allowNull':![]},'description':{'type':Sequelize[_0x529d('0x3')]},'name':{'type':Sequelize[_0x529d('0x4')],'get':function(){return this['getDataValue'](_0x529d('0x5'));}}};
\ No newline at end of file
index 86175a5..9824d3a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf3e6=['sort','where','filter','merge','map','type','VIRTUAL','options','includeAll','include','rows','show','params','CannedAnswer','find','body','create','key','MailAccountId','SmsAccountId','OpenchannelAccountId','ChatWebsiteId','Sequelize','ValidationError','The\x20inserted\x20key\x20already\x20exists.','get','role','user','UserProfileSection','CannedAnswers','userProfileId','autoAssociation','catch','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','rimraf','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','desk.js','querystring','papaparse','../../config/license/hardware','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','sendStatus','end','status','count','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','then','UserProfileResource','error','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order'];(function(_0x338aef,_0x4c1eba){var _0xcb3fd4=function(_0x10feba){while(--_0x10feba){_0x338aef['push'](_0x338aef['shift']());}};_0xcb3fd4(++_0x4c1eba);}(_0xf3e6,0xce));var _0x6f3e=function(_0x13d8d8,_0x3dc476){_0x13d8d8=_0x13d8d8-0x0;var _0x5870d5=_0xf3e6[_0x13d8d8];return _0x5870d5;};'use strict';var pdf=require(_0x6f3e('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x6f3e('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x6f3e('0x2'));var moment=require(_0x6f3e('0x3'));var BPromise=require(_0x6f3e('0x4'));var Mustache=require(_0x6f3e('0x5'));var util=require(_0x6f3e('0x6'));var path=require(_0x6f3e('0x7'));var sox=require(_0x6f3e('0x8'));var csv=require(_0x6f3e('0x9'));var ejs=require(_0x6f3e('0xa'));var fs=require('fs');var _=require(_0x6f3e('0xb'));var squel=require(_0x6f3e('0xc'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x6f3e('0xd'));var toCsv=require(_0x6f3e('0x9'));var querystring=require(_0x6f3e('0xe'));var Papa=require(_0x6f3e('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0x6f3e('0x10'));var Redis=require('ioredis');var qs=require(_0x6f3e('0x11'));var logger=require(_0x6f3e('0x12'))('api');var utils=require('../../config/utils');var config=require(_0x6f3e('0x13'));var db=require(_0x6f3e('0x14'))['db'];function respondWithStatusCode(_0x476313,_0x133b48){_0x133b48=_0x133b48||0xcc;return function(_0x583d6b){if(_0x583d6b){return _0x476313[_0x6f3e('0x15')](_0x133b48);}return _0x476313['status'](_0x133b48)[_0x6f3e('0x16')]();};}function respondWithResult(_0x5bd1d6,_0x5b9ea9){_0x5b9ea9=_0x5b9ea9||0xc8;return function(_0x46b385){if(_0x46b385){return _0x5bd1d6[_0x6f3e('0x17')](_0x5b9ea9)['json'](_0x46b385);}};}function respondWithFilteredResult(_0x217d83,_0xbe48de){return function(_0x141837){if(_0x141837){var _0x462844=_0x141837[_0x6f3e('0x18')],_0x89acf4=_0xbe48de['offset'],_0x2cdc20=_0xbe48de[_0x6f3e('0x19')]+_0xbe48de[_0x6f3e('0x1a')],_0x1adb15;if(_0x2cdc20>=_0x462844){_0x2cdc20=_0x462844;_0x1adb15=0xc8;}else{_0x1adb15=0xce;}_0x217d83[_0x6f3e('0x17')](_0x1adb15);return _0x217d83[_0x6f3e('0x1b')](_0x6f3e('0x1c'),_0x89acf4+'-'+_0x2cdc20+'/'+_0x462844)[_0x6f3e('0x1d')](_0x141837);}return null;};}function patchUpdates(_0x54c257){return function(_0x5b1a00){try{jsonpatch[_0x6f3e('0x1e')](_0x5b1a00,_0x54c257,!![]);}catch(_0x448d10){return BPromise[_0x6f3e('0x1f')](_0x448d10);}return _0x5b1a00[_0x6f3e('0x20')]();};}function saveUpdates(_0x587595,_0x5739a8){return function(_0x196740){if(_0x196740){return _0x196740[_0x6f3e('0x21')](_0x587595)['then'](function(_0x23d595){return _0x23d595;});}return null;};}function removeEntity(_0x2787cf,_0x56c91c){return function(_0xfd277b){if(_0xfd277b){return _0xfd277b[_0x6f3e('0x22')]()[_0x6f3e('0x23')](function(){var _0x280f8d=_0xfd277b['get']({'plain':!![]});var _0x1dd62c='CannedAnswers';return db[_0x6f3e('0x24')]['destroy']({'where':{'type':_0x1dd62c,'resourceId':_0x280f8d['id']}})[_0x6f3e('0x23')](function(){return _0xfd277b;});})[_0x6f3e('0x23')](function(){_0x2787cf[_0x6f3e('0x17')](0xcc)[_0x6f3e('0x16')]();});}};}function handleEntityNotFound(_0x51ec5d,_0x59a256){return function(_0x3171a5){if(!_0x3171a5){_0x51ec5d[_0x6f3e('0x15')](0x194);}return _0x3171a5;};}function handleError(_0x8a7773,_0x299744){_0x299744=_0x299744||0x1f4;return function(_0x108dbe){logger[_0x6f3e('0x25')](_0x108dbe['stack']);if(_0x108dbe[_0x6f3e('0x26')]){delete _0x108dbe[_0x6f3e('0x26')];}_0x8a7773[_0x6f3e('0x17')](_0x299744)[_0x6f3e('0x27')](_0x108dbe);};}exports[_0x6f3e('0x28')]=function(_0x4954bf,_0x509af9){var _0x26b928={},_0x3157f4={},_0x7653fe={'count':0x0,'rows':[]};var _0x5e1cb8=db['CannedAnswer'][_0x6f3e('0x29')];_0x3157f4[_0x6f3e('0x2a')]=_[_0x6f3e('0x2b')](_0x5e1cb8);_0x3157f4[_0x6f3e('0x2c')]=_['keys'](_0x4954bf[_0x6f3e('0x2c')]);_0x3157f4[_0x6f3e('0x2d')]=_[_0x6f3e('0x2e')](_0x3157f4[_0x6f3e('0x2a')],_0x3157f4[_0x6f3e('0x2c')]);_0x26b928[_0x6f3e('0x2f')]=_[_0x6f3e('0x2e')](_0x3157f4[_0x6f3e('0x2a')],qs[_0x6f3e('0x30')](_0x4954bf['query'][_0x6f3e('0x30')]));_0x26b928['attributes']=_0x26b928['attributes'][_0x6f3e('0x31')]?_0x26b928[_0x6f3e('0x2f')]:_0x3157f4[_0x6f3e('0x2a')];if(!_0x4954bf[_0x6f3e('0x2c')]['hasOwnProperty'](_0x6f3e('0x32'))){_0x26b928[_0x6f3e('0x1a')]=qs[_0x6f3e('0x1a')](_0x4954bf[_0x6f3e('0x2c')][_0x6f3e('0x1a')]);_0x26b928[_0x6f3e('0x19')]=qs[_0x6f3e('0x19')](_0x4954bf[_0x6f3e('0x2c')][_0x6f3e('0x19')]);}_0x26b928[_0x6f3e('0x33')]=qs[_0x6f3e('0x34')](_0x4954bf[_0x6f3e('0x2c')][_0x6f3e('0x34')]);_0x26b928[_0x6f3e('0x35')]=qs[_0x6f3e('0x2d')](_['pick'](_0x4954bf['query'],_0x3157f4[_0x6f3e('0x2d')]));if(_0x4954bf['query'][_0x6f3e('0x36')]){_0x26b928[_0x6f3e('0x35')]=_[_0x6f3e('0x37')](_0x26b928[_0x6f3e('0x35')],{'$or':_[_0x6f3e('0x38')](_0x5e1cb8,function(_0x24cf7d){if(_0x24cf7d[_0x6f3e('0x39')]['key']!==_0x6f3e('0x3a')){var _0x259fd9={};_0x259fd9[_0x24cf7d['field']]={'$like':'%'+_0x4954bf[_0x6f3e('0x2c')][_0x6f3e('0x36')]+'%'};return _0x259fd9;}})});}_0x26b928=_['merge']({},_0x26b928,_0x4954bf[_0x6f3e('0x3b')]);var _0x90ca24={'where':_0x26b928[_0x6f3e('0x35')]};return db['CannedAnswer'][_0x6f3e('0x18')](_0x90ca24)['then'](function(_0xfd2d94){_0x7653fe[_0x6f3e('0x18')]=_0xfd2d94;if(_0x4954bf[_0x6f3e('0x2c')][_0x6f3e('0x3c')]){_0x26b928[_0x6f3e('0x3d')]=[{'all':!![]}];}return db['CannedAnswer']['findAll'](_0x26b928);})[_0x6f3e('0x23')](function(_0x4c885d){_0x7653fe[_0x6f3e('0x3e')]=_0x4c885d;return _0x7653fe;})[_0x6f3e('0x23')](respondWithFilteredResult(_0x509af9,_0x26b928))['catch'](handleError(_0x509af9,null));};exports[_0x6f3e('0x3f')]=function(_0x123b9d,_0x34a921){var _0x1b749b={'raw':!![],'where':{'id':_0x123b9d[_0x6f3e('0x40')]['id']}},_0x1a6d72={};_0x1a6d72[_0x6f3e('0x2a')]=_[_0x6f3e('0x2b')](db[_0x6f3e('0x41')][_0x6f3e('0x29')]);_0x1a6d72[_0x6f3e('0x2c')]=_[_0x6f3e('0x2b')](_0x123b9d['query']);_0x1a6d72[_0x6f3e('0x2d')]=_['intersection'](_0x1a6d72['model'],_0x1a6d72[_0x6f3e('0x2c')]);_0x1b749b[_0x6f3e('0x2f')]=_[_0x6f3e('0x2e')](_0x1a6d72[_0x6f3e('0x2a')],qs[_0x6f3e('0x30')](_0x123b9d['query'][_0x6f3e('0x30')]));_0x1b749b[_0x6f3e('0x2f')]=_0x1b749b[_0x6f3e('0x2f')][_0x6f3e('0x31')]?_0x1b749b[_0x6f3e('0x2f')]:_0x1a6d72[_0x6f3e('0x2a')];if(_0x123b9d[_0x6f3e('0x2c')][_0x6f3e('0x3c')]){_0x1b749b[_0x6f3e('0x3d')]=[{'all':!![]}];}_0x1b749b=_[_0x6f3e('0x37')]({},_0x1b749b,_0x123b9d[_0x6f3e('0x3b')]);return db['CannedAnswer'][_0x6f3e('0x42')](_0x1b749b)[_0x6f3e('0x23')](handleEntityNotFound(_0x34a921,null))[_0x6f3e('0x23')](respondWithResult(_0x34a921,null))['catch'](handleError(_0x34a921,null));};exports[_0x6f3e('0x21')]=function(_0xa2183f,_0x372377){if(_0xa2183f[_0x6f3e('0x43')]['id']){delete _0xa2183f[_0x6f3e('0x43')]['id'];}return db[_0x6f3e('0x41')][_0x6f3e('0x42')]({'where':{'id':_0xa2183f[_0x6f3e('0x40')]['id']}})[_0x6f3e('0x23')](handleEntityNotFound(_0x372377,null))[_0x6f3e('0x23')](saveUpdates(_0xa2183f[_0x6f3e('0x43')],null))[_0x6f3e('0x23')](respondWithResult(_0x372377,null))['catch'](handleError(_0x372377,null));};exports[_0x6f3e('0x22')]=function(_0x328405,_0x21f26e){return db[_0x6f3e('0x41')]['find']({'where':{'id':_0x328405[_0x6f3e('0x40')]['id']}})[_0x6f3e('0x23')](handleEntityNotFound(_0x21f26e,null))[_0x6f3e('0x23')](removeEntity(_0x21f26e,null))['catch'](handleError(_0x21f26e,null));};exports[_0x6f3e('0x44')]=function(_0x338cd5,_0x48e477){var _0x39b2da={'key':_0x338cd5[_0x6f3e('0x43')][_0x6f3e('0x45')]};if(_0x338cd5['body'][_0x6f3e('0x46')]){_0x39b2da['MailAccountId']=_0x338cd5['body'][_0x6f3e('0x46')];}else if(_0x338cd5[_0x6f3e('0x43')][_0x6f3e('0x47')]){_0x39b2da[_0x6f3e('0x47')]=_0x338cd5[_0x6f3e('0x43')][_0x6f3e('0x47')];}else if(_0x338cd5[_0x6f3e('0x43')][_0x6f3e('0x48')]){_0x39b2da[_0x6f3e('0x48')]=_0x338cd5['body'][_0x6f3e('0x48')];}else if(_0x338cd5[_0x6f3e('0x43')]['ChatWebsiteId']){_0x39b2da['ChatWebsiteId']=_0x338cd5['body'][_0x6f3e('0x49')];}return db[_0x6f3e('0x41')]['find']({'where':_0x39b2da})['then'](function(_0x502d30){if(_0x502d30){throw new db[(_0x6f3e('0x4a'))][(_0x6f3e('0x4b'))](_0x6f3e('0x4c'));}return db['CannedAnswer'][_0x6f3e('0x44')](_0x338cd5['body']);})['then'](function(_0x4204e6){var _0x2f59fb=_0x338cd5['user'][_0x6f3e('0x4d')]({'plain':!![]});if(!_0x2f59fb)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x2f59fb[_0x6f3e('0x4e')]===_0x6f3e('0x4f')){var _0x249169=_0x4204e6[_0x6f3e('0x4d')]({'plain':!![]});return db[_0x6f3e('0x50')][_0x6f3e('0x42')]({'where':{'name':_0x6f3e('0x51'),'userProfileId':_0x2f59fb[_0x6f3e('0x52')]},'raw':!![]})[_0x6f3e('0x23')](function(_0x1eeeb1){if(_0x1eeeb1&&_0x1eeeb1[_0x6f3e('0x53')]===0x0){return db['UserProfileResource'][_0x6f3e('0x44')]({'name':_0x249169[_0x6f3e('0x26')],'resourceId':_0x249169['id'],'type':_0x1eeeb1[_0x6f3e('0x26')],'sectionId':_0x1eeeb1['id']},{})[_0x6f3e('0x23')](function(){return _0x4204e6;});}else{return _0x4204e6;}})[_0x6f3e('0x54')](function(_0x321b42){logger[_0x6f3e('0x25')](_0x6f3e('0x55'),_0x321b42);throw _0x321b42;});}return _0x4204e6;})[_0x6f3e('0x23')](respondWithResult(_0x48e477,0xc9))[_0x6f3e('0x54')](handleError(_0x48e477,null));};
\ No newline at end of file
+var _0x2b06=['attributes','hasOwnProperty','nolimit','offset','order','sort','pick','where','merge','type','field','filter','options','includeAll','include','findAll','rows','catch','params','intersection','length','find','body','key','MailAccountId','SmsAccountId','OpenchannelAccountId','ChatWebsiteId','Sequelize','ValidationError','The\x20inserted\x20key\x20already\x20exists.','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','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','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','limit','set','apply','reject','save','update','then','destroy','get','CannedAnswers','UserProfileResource','error','stack','name','send','index','CannedAnswer','rawAttributes','model','keys','query','filters','fields'];(function(_0x5e7d0c,_0x56ba7b){var _0xc24371=function(_0x1754d4){while(--_0x1754d4){_0x5e7d0c['push'](_0x5e7d0c['shift']());}};_0xc24371(++_0x56ba7b);}(_0x2b06,0x19b));var _0x62b0=function(_0x130d82,_0x25f49b){_0x130d82=_0x130d82-0x0;var _0x112070=_0x2b06[_0x130d82];return _0x112070;};'use strict';var pdf=require(_0x62b0('0x0'));var emlformat=require(_0x62b0('0x1'));var rimraf=require(_0x62b0('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x62b0('0x3'));var rp=require(_0x62b0('0x4'));var moment=require(_0x62b0('0x5'));var BPromise=require(_0x62b0('0x6'));var Mustache=require(_0x62b0('0x7'));var util=require(_0x62b0('0x8'));var path=require(_0x62b0('0x9'));var sox=require(_0x62b0('0xa'));var csv=require(_0x62b0('0xb'));var ejs=require(_0x62b0('0xc'));var fs=require('fs');var _=require(_0x62b0('0xd'));var squel=require(_0x62b0('0xe'));var crypto=require('crypto');var jsforce=require(_0x62b0('0xf'));var deskjs=require(_0x62b0('0x10'));var toCsv=require(_0x62b0('0xb'));var querystring=require(_0x62b0('0x11'));var Papa=require('papaparse');var authService=require(_0x62b0('0x12'));var hardwareService=require(_0x62b0('0x13'));var Redis=require('ioredis');var qs=require(_0x62b0('0x14'));var logger=require(_0x62b0('0x15'))(_0x62b0('0x16'));var utils=require(_0x62b0('0x17'));var config=require(_0x62b0('0x18'));var db=require(_0x62b0('0x19'))['db'];function respondWithStatusCode(_0x1a147a,_0x554077){_0x554077=_0x554077||0xcc;return function(_0x100d47){if(_0x100d47){return _0x1a147a[_0x62b0('0x1a')](_0x554077);}return _0x1a147a[_0x62b0('0x1b')](_0x554077)[_0x62b0('0x1c')]();};}function respondWithResult(_0x12233d,_0x120bf0){_0x120bf0=_0x120bf0||0xc8;return function(_0x5b1023){if(_0x5b1023){return _0x12233d[_0x62b0('0x1b')](_0x120bf0)[_0x62b0('0x1d')](_0x5b1023);}};}function respondWithFilteredResult(_0x29e22d,_0x2b9303){return function(_0x51e5a6){if(_0x51e5a6){var _0x9c5a94=_0x51e5a6[_0x62b0('0x1e')],_0xd23a6e=_0x2b9303['offset'],_0x2cbffd=_0x2b9303['offset']+_0x2b9303[_0x62b0('0x1f')],_0x216f9c;if(_0x2cbffd>=_0x9c5a94){_0x2cbffd=_0x9c5a94;_0x216f9c=0xc8;}else{_0x216f9c=0xce;}_0x29e22d['status'](_0x216f9c);return _0x29e22d[_0x62b0('0x20')]('Content-Range',_0xd23a6e+'-'+_0x2cbffd+'/'+_0x9c5a94)['json'](_0x51e5a6);}return null;};}function patchUpdates(_0x2ec369){return function(_0x171926){try{jsonpatch[_0x62b0('0x21')](_0x171926,_0x2ec369,!![]);}catch(_0x59311b){return BPromise[_0x62b0('0x22')](_0x59311b);}return _0x171926[_0x62b0('0x23')]();};}function saveUpdates(_0xd12995,_0x3af86b){return function(_0xfd7a3e){if(_0xfd7a3e){return _0xfd7a3e[_0x62b0('0x24')](_0xd12995)[_0x62b0('0x25')](function(_0x523221){return _0x523221;});}return null;};}function removeEntity(_0x3ecbc6,_0x197330){return function(_0x1af856){if(_0x1af856){return _0x1af856[_0x62b0('0x26')]()[_0x62b0('0x25')](function(){var _0x58136a=_0x1af856[_0x62b0('0x27')]({'plain':!![]});var _0x24643d=_0x62b0('0x28');return db[_0x62b0('0x29')][_0x62b0('0x26')]({'where':{'type':_0x24643d,'resourceId':_0x58136a['id']}})[_0x62b0('0x25')](function(){return _0x1af856;});})[_0x62b0('0x25')](function(){_0x3ecbc6[_0x62b0('0x1b')](0xcc)[_0x62b0('0x1c')]();});}};}function handleEntityNotFound(_0x24279c,_0x4d3b2b){return function(_0x2ead8f){if(!_0x2ead8f){_0x24279c[_0x62b0('0x1a')](0x194);}return _0x2ead8f;};}function handleError(_0x1e18fa,_0x445543){_0x445543=_0x445543||0x1f4;return function(_0x3df866){logger[_0x62b0('0x2a')](_0x3df866[_0x62b0('0x2b')]);if(_0x3df866['name']){delete _0x3df866[_0x62b0('0x2c')];}_0x1e18fa[_0x62b0('0x1b')](_0x445543)[_0x62b0('0x2d')](_0x3df866);};}exports[_0x62b0('0x2e')]=function(_0x4cdb5c,_0x501408){var _0x4982aa={},_0x5b1bee={},_0x498597={'count':0x0,'rows':[]};var _0x5e6622=db[_0x62b0('0x2f')][_0x62b0('0x30')];_0x5b1bee[_0x62b0('0x31')]=_[_0x62b0('0x32')](_0x5e6622);_0x5b1bee[_0x62b0('0x33')]=_[_0x62b0('0x32')](_0x4cdb5c[_0x62b0('0x33')]);_0x5b1bee[_0x62b0('0x34')]=_['intersection'](_0x5b1bee[_0x62b0('0x31')],_0x5b1bee[_0x62b0('0x33')]);_0x4982aa['attributes']=_['intersection'](_0x5b1bee[_0x62b0('0x31')],qs[_0x62b0('0x35')](_0x4cdb5c[_0x62b0('0x33')]['fields']));_0x4982aa[_0x62b0('0x36')]=_0x4982aa[_0x62b0('0x36')]['length']?_0x4982aa[_0x62b0('0x36')]:_0x5b1bee[_0x62b0('0x31')];if(!_0x4cdb5c[_0x62b0('0x33')][_0x62b0('0x37')](_0x62b0('0x38'))){_0x4982aa['limit']=qs[_0x62b0('0x1f')](_0x4cdb5c[_0x62b0('0x33')]['limit']);_0x4982aa[_0x62b0('0x39')]=qs[_0x62b0('0x39')](_0x4cdb5c['query']['offset']);}_0x4982aa[_0x62b0('0x3a')]=qs[_0x62b0('0x3b')](_0x4cdb5c['query'][_0x62b0('0x3b')]);_0x4982aa['where']=qs[_0x62b0('0x34')](_[_0x62b0('0x3c')](_0x4cdb5c['query'],_0x5b1bee['filters']));if(_0x4cdb5c['query']['filter']){_0x4982aa[_0x62b0('0x3d')]=_[_0x62b0('0x3e')](_0x4982aa[_0x62b0('0x3d')],{'$or':_['map'](_0x5e6622,function(_0x39ac79){if(_0x39ac79[_0x62b0('0x3f')]['key']!=='VIRTUAL'){var _0xfc879b={};_0xfc879b[_0x39ac79[_0x62b0('0x40')]]={'$like':'%'+_0x4cdb5c['query'][_0x62b0('0x41')]+'%'};return _0xfc879b;}})});}_0x4982aa=_[_0x62b0('0x3e')]({},_0x4982aa,_0x4cdb5c[_0x62b0('0x42')]);var _0x1bb977={'where':_0x4982aa['where']};return db[_0x62b0('0x2f')][_0x62b0('0x1e')](_0x1bb977)[_0x62b0('0x25')](function(_0x553b45){_0x498597[_0x62b0('0x1e')]=_0x553b45;if(_0x4cdb5c[_0x62b0('0x33')][_0x62b0('0x43')]){_0x4982aa[_0x62b0('0x44')]=[{'all':!![]}];}return db[_0x62b0('0x2f')][_0x62b0('0x45')](_0x4982aa);})[_0x62b0('0x25')](function(_0xcfa957){_0x498597[_0x62b0('0x46')]=_0xcfa957;return _0x498597;})[_0x62b0('0x25')](respondWithFilteredResult(_0x501408,_0x4982aa))[_0x62b0('0x47')](handleError(_0x501408,null));};exports['show']=function(_0xbda5e2,_0x20b1a6){var _0x3ee9e5={'raw':!![],'where':{'id':_0xbda5e2[_0x62b0('0x48')]['id']}},_0x2870f3={};_0x2870f3[_0x62b0('0x31')]=_[_0x62b0('0x32')](db[_0x62b0('0x2f')][_0x62b0('0x30')]);_0x2870f3[_0x62b0('0x33')]=_[_0x62b0('0x32')](_0xbda5e2[_0x62b0('0x33')]);_0x2870f3['filters']=_[_0x62b0('0x49')](_0x2870f3[_0x62b0('0x31')],_0x2870f3[_0x62b0('0x33')]);_0x3ee9e5[_0x62b0('0x36')]=_[_0x62b0('0x49')](_0x2870f3[_0x62b0('0x31')],qs[_0x62b0('0x35')](_0xbda5e2[_0x62b0('0x33')][_0x62b0('0x35')]));_0x3ee9e5['attributes']=_0x3ee9e5[_0x62b0('0x36')][_0x62b0('0x4a')]?_0x3ee9e5['attributes']:_0x2870f3[_0x62b0('0x31')];if(_0xbda5e2[_0x62b0('0x33')]['includeAll']){_0x3ee9e5[_0x62b0('0x44')]=[{'all':!![]}];}_0x3ee9e5=_[_0x62b0('0x3e')]({},_0x3ee9e5,_0xbda5e2[_0x62b0('0x42')]);return db['CannedAnswer'][_0x62b0('0x4b')](_0x3ee9e5)[_0x62b0('0x25')](handleEntityNotFound(_0x20b1a6,null))[_0x62b0('0x25')](respondWithResult(_0x20b1a6,null))[_0x62b0('0x47')](handleError(_0x20b1a6,null));};exports[_0x62b0('0x24')]=function(_0x5460ac,_0x11faa2){if(_0x5460ac[_0x62b0('0x4c')]['id']){delete _0x5460ac[_0x62b0('0x4c')]['id'];}return db[_0x62b0('0x2f')][_0x62b0('0x4b')]({'where':{'id':_0x5460ac[_0x62b0('0x48')]['id']}})[_0x62b0('0x25')](handleEntityNotFound(_0x11faa2,null))[_0x62b0('0x25')](saveUpdates(_0x5460ac[_0x62b0('0x4c')],null))['then'](respondWithResult(_0x11faa2,null))[_0x62b0('0x47')](handleError(_0x11faa2,null));};exports[_0x62b0('0x26')]=function(_0x354626,_0x2f1ae0){return db[_0x62b0('0x2f')][_0x62b0('0x4b')]({'where':{'id':_0x354626['params']['id']}})[_0x62b0('0x25')](handleEntityNotFound(_0x2f1ae0,null))[_0x62b0('0x25')](removeEntity(_0x2f1ae0,null))[_0x62b0('0x47')](handleError(_0x2f1ae0,null));};exports['create']=function(_0x51bcc4,_0x489dff){var _0x284f7f={'key':_0x51bcc4[_0x62b0('0x4c')][_0x62b0('0x4d')]};if(_0x51bcc4[_0x62b0('0x4c')]['MailAccountId']){_0x284f7f[_0x62b0('0x4e')]=_0x51bcc4[_0x62b0('0x4c')][_0x62b0('0x4e')];}else if(_0x51bcc4[_0x62b0('0x4c')][_0x62b0('0x4f')]){_0x284f7f[_0x62b0('0x4f')]=_0x51bcc4[_0x62b0('0x4c')][_0x62b0('0x4f')];}else if(_0x51bcc4[_0x62b0('0x4c')]['OpenchannelAccountId']){_0x284f7f[_0x62b0('0x50')]=_0x51bcc4['body'][_0x62b0('0x50')];}else if(_0x51bcc4['body'][_0x62b0('0x51')]){_0x284f7f[_0x62b0('0x51')]=_0x51bcc4[_0x62b0('0x4c')][_0x62b0('0x51')];}return db[_0x62b0('0x2f')][_0x62b0('0x4b')]({'where':_0x284f7f})['then'](function(_0x2d75c1){if(_0x2d75c1){throw new db[(_0x62b0('0x52'))][(_0x62b0('0x53'))](_0x62b0('0x54'));}return db[_0x62b0('0x2f')][_0x62b0('0x55')](_0x51bcc4[_0x62b0('0x4c')]);})[_0x62b0('0x25')](function(_0x356f36){var _0x39cac5=_0x51bcc4[_0x62b0('0x56')][_0x62b0('0x27')]({'plain':!![]});if(!_0x39cac5)throw new Error(_0x62b0('0x57'));if(_0x39cac5[_0x62b0('0x58')]===_0x62b0('0x56')){var _0x221729=_0x356f36[_0x62b0('0x27')]({'plain':!![]});return db[_0x62b0('0x59')][_0x62b0('0x4b')]({'where':{'name':_0x62b0('0x28'),'userProfileId':_0x39cac5[_0x62b0('0x5a')]},'raw':!![]})[_0x62b0('0x25')](function(_0x3451d2){if(_0x3451d2&&_0x3451d2[_0x62b0('0x5b')]===0x0){return db['UserProfileResource'][_0x62b0('0x55')]({'name':_0x221729[_0x62b0('0x2c')],'resourceId':_0x221729['id'],'type':_0x3451d2['name'],'sectionId':_0x3451d2['id']},{})[_0x62b0('0x25')](function(){return _0x356f36;});}else{return _0x356f36;}})['catch'](function(_0x2085ed){logger[_0x62b0('0x2a')](_0x62b0('0x5c'),_0x2085ed);throw _0x2085ed;});}return _0x356f36;})[_0x62b0('0x25')](respondWithResult(_0x489dff,0xc9))[_0x62b0('0x47')](handleError(_0x489dff,null));};
\ No newline at end of file
index 1177bff..7aea436 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd357=['moment','bluebird','request-promise','./cannedAnswer.attributes','define','CannedAnswer','tools_canned_answers','utf8mb4','lodash','util','api'];(function(_0x1f0275,_0x2cb67e){var _0x8f4ab3=function(_0x5c240e){while(--_0x5c240e){_0x1f0275['push'](_0x1f0275['shift']());}};_0x8f4ab3(++_0x2cb67e);}(_0xd357,0xc3));var _0x7d35=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0xd357[_0x42cae2];return _0x5f256f;};'use strict';var _=require(_0x7d35('0x0'));var util=require(_0x7d35('0x1'));var logger=require('../../config/logger')(_0x7d35('0x2'));var moment=require(_0x7d35('0x3'));var BPromise=require(_0x7d35('0x4'));var rp=require(_0x7d35('0x5'));var attributes=require(_0x7d35('0x6'));module['exports']=function(_0x2b6a9a,_0x46542a){return _0x2b6a9a[_0x7d35('0x7')](_0x7d35('0x8'),attributes,{'tableName':_0x7d35('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x7d35('0xa'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
+var _0xcfe4=['util','../../config/logger','api','bluebird','request-promise','define','CannedAnswer','tools_canned_answers','utf8mb4_unicode_ci','lodash'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xcfe4,0x103));var _0x4cfe=function(_0x360659,_0x8e3dc8){_0x360659=_0x360659-0x0;var _0x5b3df9=_0xcfe4[_0x360659];return _0x5b3df9;};'use strict';var _=require(_0x4cfe('0x0'));var util=require(_0x4cfe('0x1'));var logger=require(_0x4cfe('0x2'))(_0x4cfe('0x3'));var moment=require('moment');var BPromise=require(_0x4cfe('0x4'));var rp=require(_0x4cfe('0x5'));var attributes=require('./cannedAnswer.attributes');module['exports']=function(_0x412857,_0x5dfc67){return _0x412857[_0x4cfe('0x6')](_0x4cfe('0x7'),attributes,{'tableName':_0x4cfe('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':'utf8mb4','collate':_0x4cfe('0x9')});};
\ No newline at end of file
index bb8e51c..95e0bf8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ea7=['code','CannedAnswer,\x20%s,\x20%s','message','result','catch','lodash','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','debug','request\x20sent','error'];(function(_0x5235dd,_0x3f91cf){var _0x13059d=function(_0x355a98){while(--_0x355a98){_0x5235dd['push'](_0x5235dd['shift']());}};_0x13059d(++_0x3f91cf);}(_0x5ea7,0x11d));var _0x75ea=function(_0x1c6ef2,_0x8d926a){_0x1c6ef2=_0x1c6ef2-0x0;var _0x404b8c=_0x5ea7[_0x1c6ef2];return _0x404b8c;};'use strict';var _=require(_0x75ea('0x0'));var util=require('util');var moment=require(_0x75ea('0x1'));var BPromise=require(_0x75ea('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x75ea('0x3'))['db'];var utils=require(_0x75ea('0x4'));var logger=require(_0x75ea('0x5'))(_0x75ea('0x6'));var config=require(_0x75ea('0x7'));var jayson=require(_0x75ea('0x8'));var client=jayson['client'][_0x75ea('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x44d5c0,_0x1fec8c,_0x10d26f){return new BPromise(function(_0x19085b,_0x1969cd){return client[_0x75ea('0xa')](_0x44d5c0,_0x10d26f)[_0x75ea('0xb')](function(_0x3bdae5){logger['info']('CannedAnswer,\x20%s,\x20%s',_0x1fec8c,'request\x20sent');logger[_0x75ea('0xc')]('CannedAnswer,\x20%s,\x20%s,\x20%s',_0x1fec8c,_0x75ea('0xd'),JSON['stringify'](_0x3bdae5));if(_0x3bdae5[_0x75ea('0xe')]){if(_0x3bdae5[_0x75ea('0xe')][_0x75ea('0xf')]===0x1f4){logger['error'](_0x75ea('0x10'),_0x1fec8c,_0x3bdae5[_0x75ea('0xe')][_0x75ea('0x11')]);return _0x1969cd(_0x3bdae5[_0x75ea('0xe')][_0x75ea('0x11')]);}logger[_0x75ea('0xe')](_0x75ea('0x10'),_0x1fec8c,_0x3bdae5['error'][_0x75ea('0x11')]);return _0x19085b(_0x3bdae5[_0x75ea('0xe')]['message']);}else{logger['info']('CannedAnswer,\x20%s,\x20%s',_0x1fec8c,_0x75ea('0xd'));_0x19085b(_0x3bdae5[_0x75ea('0x12')][_0x75ea('0x11')]);}})[_0x75ea('0x13')](function(_0x2d8aa9){logger[_0x75ea('0xe')](_0x75ea('0x10'),_0x1fec8c,_0x2d8aa9);_0x1969cd(_0x2d8aa9);});});}
\ No newline at end of file
+var _0x7821=['../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','CannedAnswer,\x20%s,\x20%s','request\x20sent','debug','CannedAnswer,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','util','moment','bluebird','randomstring','ioredis'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x7821,0xb3));var _0x1782=function(_0x4f217f,_0x313163){_0x4f217f=_0x4f217f-0x0;var _0x3b583a=_0x7821[_0x4f217f];return _0x3b583a;};'use strict';var _=require('lodash');var util=require(_0x1782('0x0'));var moment=require(_0x1782('0x1'));var BPromise=require(_0x1782('0x2'));var rs=require(_0x1782('0x3'));var fs=require('fs');var Redis=require(_0x1782('0x4'));var db=require(_0x1782('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x1782('0x6'))('rpc');var config=require(_0x1782('0x7'));var jayson=require(_0x1782('0x8'));var client=jayson[_0x1782('0x9')][_0x1782('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x479809,_0x5b3534,_0x1c3274){return new BPromise(function(_0x44169c,_0x55e8c6){return client[_0x1782('0xb')](_0x479809,_0x1c3274)[_0x1782('0xc')](function(_0x59b33b){logger[_0x1782('0xd')](_0x1782('0xe'),_0x5b3534,_0x1782('0xf'));logger[_0x1782('0x10')](_0x1782('0x11'),_0x5b3534,_0x1782('0xf'),JSON['stringify'](_0x59b33b));if(_0x59b33b[_0x1782('0x12')]){if(_0x59b33b['error'][_0x1782('0x13')]===0x1f4){logger['error'](_0x1782('0xe'),_0x5b3534,_0x59b33b[_0x1782('0x12')][_0x1782('0x14')]);return _0x55e8c6(_0x59b33b[_0x1782('0x12')][_0x1782('0x14')]);}logger[_0x1782('0x12')]('CannedAnswer,\x20%s,\x20%s',_0x5b3534,_0x59b33b['error'][_0x1782('0x14')]);return _0x44169c(_0x59b33b[_0x1782('0x12')]['message']);}else{logger[_0x1782('0xd')](_0x1782('0xe'),_0x5b3534,_0x1782('0xf'));_0x44169c(_0x59b33b[_0x1782('0x15')][_0x1782('0x14')]);}})[_0x1782('0x16')](function(_0x197a8d){logger['error']('CannedAnswer,\x20%s,\x20%s',_0x5b3534,_0x197a8d);_0x55e8c6(_0x197a8d);});});}
\ No newline at end of file
index c530e4b..38bc98c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1660=['exports','multer','path','express','Router','../../components/auth/service','../../config/environment','./cannedAnswer.controller','get','index','/:id','show','isAuthenticated','put','update','delete'];(function(_0x492c60,_0x1adea4){var _0x390ae8=function(_0x4119f7){while(--_0x4119f7){_0x492c60['push'](_0x492c60['shift']());}};_0x390ae8(++_0x1adea4);}(_0x1660,0xe1));var _0x0166=function(_0x4ae6ef,_0xc2af80){_0x4ae6ef=_0x4ae6ef-0x0;var _0x3cbb4e=_0x1660[_0x4ae6ef];return _0x3cbb4e;};'use strict';var multer=require(_0x0166('0x0'));var util=require('util');var path=require(_0x0166('0x1'));var timeout=require('connect-timeout');var express=require(_0x0166('0x2'));var router=express[_0x0166('0x3')]();var auth=require(_0x0166('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x0166('0x5'));var controller=require(_0x0166('0x6'));router[_0x0166('0x7')]('/',auth['isAuthenticated'](),controller[_0x0166('0x8')]);router['get'](_0x0166('0x9'),auth['isAuthenticated'](),controller[_0x0166('0xa')]);router['post']('/',auth[_0x0166('0xb')](),controller['create']);router[_0x0166('0xc')](_0x0166('0x9'),auth['isAuthenticated'](),controller[_0x0166('0xd')]);router[_0x0166('0xe')](_0x0166('0x9'),auth['isAuthenticated'](),controller['destroy']);module[_0x0166('0xf')]=router;
\ No newline at end of file
+var _0x8547=['isAuthenticated','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./cannedAnswer.controller','get'];(function(_0x214b38,_0x54a8fc){var _0xedb26e=function(_0x1cada1){while(--_0x1cada1){_0x214b38['push'](_0x214b38['shift']());}};_0xedb26e(++_0x54a8fc);}(_0x8547,0x1ae));var _0x7854=function(_0x362670,_0xbf1841){_0x362670=_0x362670-0x0;var _0x3022c3=_0x8547[_0x362670];return _0x3022c3;};'use strict';var multer=require(_0x7854('0x0'));var util=require(_0x7854('0x1'));var path=require(_0x7854('0x2'));var timeout=require(_0x7854('0x3'));var express=require(_0x7854('0x4'));var router=express[_0x7854('0x5')]();var auth=require(_0x7854('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x7854('0x7'));var controller=require(_0x7854('0x8'));router[_0x7854('0x9')]('/',auth[_0x7854('0xa')](),controller['index']);router[_0x7854('0x9')](_0x7854('0xb'),auth[_0x7854('0xa')](),controller[_0x7854('0xc')]);router[_0x7854('0xd')]('/',auth[_0x7854('0xa')](),controller[_0x7854('0xe')]);router[_0x7854('0xf')](_0x7854('0xb'),auth['isAuthenticated'](),controller[_0x7854('0x10')]);router[_0x7854('0x11')](_0x7854('0xb'),auth['isAuthenticated'](),controller[_0x7854('0x12')]);module[_0x7854('0x13')]=router;
\ No newline at end of file
index b4d3ade..df7dac4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x330b=['sequelize','exports','DATE','1970-01-01\x2000:00:01','STRING','INTEGER'];(function(_0x4e1d03,_0x786f3a){var _0x362d4b=function(_0x1924d2){while(--_0x1924d2){_0x4e1d03['push'](_0x4e1d03['shift']());}};_0x362d4b(++_0x786f3a);}(_0x330b,0xc6));var _0xb330=function(_0x595e1f,_0x3c3c87){_0x595e1f=_0x595e1f-0x0;var _0x396b4d=_0x330b[_0x595e1f];return _0x396b4d;};'use strict';var Sequelize=require(_0xb330('0x0'));module[_0xb330('0x1')]={'calldate':{'type':Sequelize[_0xb330('0x2')],'allowNull':![],'defaultValue':_0xb330('0x3')},'clid':{'type':Sequelize[_0xb330('0x4')]},'src':{'type':Sequelize[_0xb330('0x4')]},'dst':{'type':Sequelize[_0xb330('0x4')]},'dcontext':{'type':Sequelize[_0xb330('0x4')]},'channel':{'type':Sequelize[_0xb330('0x4')]},'dstchannel':{'type':Sequelize[_0xb330('0x4')]},'lastapp':{'type':Sequelize['STRING']},'lastdata':{'type':Sequelize[_0xb330('0x4')]},'duration':{'type':Sequelize[_0xb330('0x5')],'allowNull':![],'defaultValue':0x0},'billsec':{'type':Sequelize[_0xb330('0x5')],'allowNull':![],'defaultValue':0x0},'disposition':{'type':Sequelize[_0xb330('0x4')]},'amaflags':{'type':Sequelize[_0xb330('0x5')],'allowNull':![],'defaultValue':0x0},'accountcode':{'type':Sequelize[_0xb330('0x4')]},'userfield':{'type':Sequelize[_0xb330('0x4')]},'uniqueid':{'type':Sequelize['STRING']},'linkedid':{'type':Sequelize[_0xb330('0x4')]},'sequence':{'type':Sequelize['STRING']},'peeraccount':{'type':Sequelize[_0xb330('0x4')]},'type':{'type':Sequelize[_0xb330('0x4')]},'tag':{'type':Sequelize[_0xb330('0x4')]}};
\ No newline at end of file
+var _0xb704=['STRING','INTEGER','sequelize','exports','DATE','1970-01-01\x2000:00:01'];(function(_0x36eaaa,_0x326732){var _0x461349=function(_0x4e4180){while(--_0x4e4180){_0x36eaaa['push'](_0x36eaaa['shift']());}};_0x461349(++_0x326732);}(_0xb704,0x170));var _0x4b70=function(_0x149899,_0x2e3551){_0x149899=_0x149899-0x0;var _0x424525=_0xb704[_0x149899];return _0x424525;};'use strict';var Sequelize=require(_0x4b70('0x0'));module[_0x4b70('0x1')]={'calldate':{'type':Sequelize[_0x4b70('0x2')],'allowNull':![],'defaultValue':_0x4b70('0x3')},'clid':{'type':Sequelize[_0x4b70('0x4')]},'src':{'type':Sequelize[_0x4b70('0x4')]},'dst':{'type':Sequelize[_0x4b70('0x4')]},'dcontext':{'type':Sequelize[_0x4b70('0x4')]},'channel':{'type':Sequelize[_0x4b70('0x4')]},'dstchannel':{'type':Sequelize[_0x4b70('0x4')]},'lastapp':{'type':Sequelize[_0x4b70('0x4')]},'lastdata':{'type':Sequelize[_0x4b70('0x4')]},'duration':{'type':Sequelize[_0x4b70('0x5')],'allowNull':![],'defaultValue':0x0},'billsec':{'type':Sequelize[_0x4b70('0x5')],'allowNull':![],'defaultValue':0x0},'disposition':{'type':Sequelize[_0x4b70('0x4')]},'amaflags':{'type':Sequelize[_0x4b70('0x5')],'allowNull':![],'defaultValue':0x0},'accountcode':{'type':Sequelize['STRING']},'userfield':{'type':Sequelize[_0x4b70('0x4')]},'uniqueid':{'type':Sequelize[_0x4b70('0x4')]},'linkedid':{'type':Sequelize[_0x4b70('0x4')]},'sequence':{'type':Sequelize['STRING']},'peeraccount':{'type':Sequelize[_0x4b70('0x4')]},'type':{'type':Sequelize[_0x4b70('0x4')]},'tag':{'type':Sequelize[_0x4b70('0x4')]}};
\ No newline at end of file
index 87a3778..9c58694 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3ec=['lodash','squel','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','set','Content-Range','reject','save','update','then','error','stack','name','send','rawAttributes','model','keys','query','filters','attributes','intersection','fields','hasOwnProperty','nolimit','limit','offset','order','sort','where','filter','map','type','key','VIRTUAL','field','merge','options','Cdr','includeAll','include','findAll','rows','catch','params','create','body','find','describe','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','ejs'];(function(_0x42e75c,_0x136223){var _0x42b0b8=function(_0x4bbc58){while(--_0x4bbc58){_0x42e75c['push'](_0x42e75c['shift']());}};_0x42b0b8(++_0x136223);}(_0xe3ec,0x119));var _0xce3e=function(_0x56e605,_0x54f862){_0x56e605=_0x56e605-0x0;var _0x414252=_0xe3ec[_0x56e605];return _0x414252;};'use strict';var pdf=require(_0xce3e('0x0'));var emlformat=require(_0xce3e('0x1'));var rimraf=require(_0xce3e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xce3e('0x3'));var rp=require(_0xce3e('0x4'));var moment=require('moment');var BPromise=require(_0xce3e('0x5'));var Mustache=require(_0xce3e('0x6'));var util=require(_0xce3e('0x7'));var path=require(_0xce3e('0x8'));var sox=require('sox');var csv=require(_0xce3e('0x9'));var ejs=require(_0xce3e('0xa'));var fs=require('fs');var _=require(_0xce3e('0xb'));var squel=require(_0xce3e('0xc'));var crypto=require('crypto');var jsforce=require(_0xce3e('0xd'));var deskjs=require(_0xce3e('0xe'));var toCsv=require(_0xce3e('0x9'));var querystring=require('querystring');var Papa=require(_0xce3e('0xf'));var authService=require(_0xce3e('0x10'));var hardwareService=require(_0xce3e('0x11'));var Redis=require(_0xce3e('0x12'));var qs=require('../../components/parsers/qs');var logger=require(_0xce3e('0x13'))(_0xce3e('0x14'));var utils=require(_0xce3e('0x15'));var config=require(_0xce3e('0x16'));var db=require(_0xce3e('0x17'))['db'];function respondWithStatusCode(_0x4e6073,_0x58bf57){_0x58bf57=_0x58bf57||0xcc;return function(_0x5e9321){if(_0x5e9321){return _0x4e6073[_0xce3e('0x18')](_0x58bf57);}return _0x4e6073[_0xce3e('0x19')](_0x58bf57)[_0xce3e('0x1a')]();};}function respondWithResult(_0xf5d58f,_0x1623aa){_0x1623aa=_0x1623aa||0xc8;return function(_0xc01c3d){if(_0xc01c3d){return _0xf5d58f['status'](_0x1623aa)[_0xce3e('0x1b')](_0xc01c3d);}};}function respondWithFilteredResult(_0x2d9d97,_0x26cc6d){return function(_0x29eb36){if(_0x29eb36){var _0x282b8e=_0x29eb36[_0xce3e('0x1c')],_0x22eba5=_0x26cc6d['offset'],_0x8c44c4=_0x26cc6d['offset']+_0x26cc6d['limit'],_0x55e53a;if(_0x8c44c4>=_0x282b8e){_0x8c44c4=_0x282b8e;_0x55e53a=0xc8;}else{_0x55e53a=0xce;}_0x2d9d97['status'](_0x55e53a);return _0x2d9d97[_0xce3e('0x1d')](_0xce3e('0x1e'),_0x22eba5+'-'+_0x8c44c4+'/'+_0x282b8e)['json'](_0x29eb36);}return null;};}function patchUpdates(_0x40de18){return function(_0x108e3b){try{jsonpatch['apply'](_0x108e3b,_0x40de18,!![]);}catch(_0x1e2483){return BPromise[_0xce3e('0x1f')](_0x1e2483);}return _0x108e3b[_0xce3e('0x20')]();};}function saveUpdates(_0xd7fe44,_0x9c85c2){return function(_0x153b42){if(_0x153b42){return _0x153b42[_0xce3e('0x21')](_0xd7fe44)['then'](function(_0x16381d){return _0x16381d;});}return null;};}function removeEntity(_0xa10370,_0x4a7c00){return function(_0x229286){if(_0x229286){return _0x229286['destroy']()[_0xce3e('0x22')](function(){_0xa10370[_0xce3e('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x35279c,_0x2ea5c5){return function(_0x554d09){if(!_0x554d09){_0x35279c[_0xce3e('0x18')](0x194);}return _0x554d09;};}function handleError(_0x223815,_0x3e5f7e){_0x3e5f7e=_0x3e5f7e||0x1f4;return function(_0x49dd64){logger[_0xce3e('0x23')](_0x49dd64[_0xce3e('0x24')]);if(_0x49dd64[_0xce3e('0x25')]){delete _0x49dd64[_0xce3e('0x25')];}_0x223815[_0xce3e('0x19')](_0x3e5f7e)[_0xce3e('0x26')](_0x49dd64);};}exports['index']=function(_0x39c5a0,_0x47cfb5){var _0x48eb3f={},_0x3839f3={},_0x35c2f4={'count':0x0,'rows':[]};var _0x58fd31=db['Cdr'][_0xce3e('0x27')];_0x3839f3[_0xce3e('0x28')]=_[_0xce3e('0x29')](_0x58fd31);_0x3839f3[_0xce3e('0x2a')]=_[_0xce3e('0x29')](_0x39c5a0[_0xce3e('0x2a')]);_0x3839f3[_0xce3e('0x2b')]=_['intersection'](_0x3839f3[_0xce3e('0x28')],_0x3839f3[_0xce3e('0x2a')]);_0x48eb3f[_0xce3e('0x2c')]=_[_0xce3e('0x2d')](_0x3839f3['model'],qs[_0xce3e('0x2e')](_0x39c5a0[_0xce3e('0x2a')][_0xce3e('0x2e')]));_0x48eb3f[_0xce3e('0x2c')]=_0x48eb3f[_0xce3e('0x2c')]['length']?_0x48eb3f[_0xce3e('0x2c')]:_0x3839f3[_0xce3e('0x28')];if(!_0x39c5a0[_0xce3e('0x2a')][_0xce3e('0x2f')](_0xce3e('0x30'))){_0x48eb3f['limit']=qs[_0xce3e('0x31')](_0x39c5a0[_0xce3e('0x2a')][_0xce3e('0x31')]);_0x48eb3f[_0xce3e('0x32')]=qs['offset'](_0x39c5a0[_0xce3e('0x2a')][_0xce3e('0x32')]);}_0x48eb3f[_0xce3e('0x33')]=qs['sort'](_0x39c5a0[_0xce3e('0x2a')][_0xce3e('0x34')]);_0x48eb3f[_0xce3e('0x35')]=qs['filters'](_['pick'](_0x39c5a0[_0xce3e('0x2a')],_0x3839f3[_0xce3e('0x2b')]));if(_0x39c5a0[_0xce3e('0x2a')][_0xce3e('0x36')]){_0x48eb3f[_0xce3e('0x35')]=_['merge'](_0x48eb3f[_0xce3e('0x35')],{'$or':_[_0xce3e('0x37')](_0x58fd31,function(_0x57adff){if(_0x57adff[_0xce3e('0x38')][_0xce3e('0x39')]!==_0xce3e('0x3a')){var _0x484429={};_0x484429[_0x57adff[_0xce3e('0x3b')]]={'$like':'%'+_0x39c5a0[_0xce3e('0x2a')]['filter']+'%'};return _0x484429;}})});}_0x48eb3f=_[_0xce3e('0x3c')]({},_0x48eb3f,_0x39c5a0[_0xce3e('0x3d')]);var _0x153e7f={'where':_0x48eb3f['where']};return db[_0xce3e('0x3e')]['count'](_0x153e7f)['then'](function(_0x513637){_0x35c2f4[_0xce3e('0x1c')]=_0x513637;if(_0x39c5a0[_0xce3e('0x2a')][_0xce3e('0x3f')]){_0x48eb3f[_0xce3e('0x40')]=[{'all':!![]}];}return db[_0xce3e('0x3e')][_0xce3e('0x41')](_0x48eb3f);})[_0xce3e('0x22')](function(_0x1c26b1){_0x35c2f4[_0xce3e('0x42')]=_0x1c26b1;return _0x35c2f4;})[_0xce3e('0x22')](respondWithFilteredResult(_0x47cfb5,_0x48eb3f))[_0xce3e('0x43')](handleError(_0x47cfb5,null));};exports['show']=function(_0x52093b,_0x26d82b){var _0x3069cc={'raw':!![],'where':{'id':_0x52093b[_0xce3e('0x44')]['id']}},_0x383c07={};_0x383c07[_0xce3e('0x28')]=_['keys'](db[_0xce3e('0x3e')]['rawAttributes']);_0x383c07[_0xce3e('0x2a')]=_[_0xce3e('0x29')](_0x52093b[_0xce3e('0x2a')]);_0x383c07[_0xce3e('0x2b')]=_[_0xce3e('0x2d')](_0x383c07[_0xce3e('0x28')],_0x383c07[_0xce3e('0x2a')]);_0x3069cc[_0xce3e('0x2c')]=_['intersection'](_0x383c07[_0xce3e('0x28')],qs[_0xce3e('0x2e')](_0x52093b[_0xce3e('0x2a')][_0xce3e('0x2e')]));_0x3069cc[_0xce3e('0x2c')]=_0x3069cc[_0xce3e('0x2c')]['length']?_0x3069cc['attributes']:_0x383c07[_0xce3e('0x28')];if(_0x52093b['query'][_0xce3e('0x3f')]){_0x3069cc['include']=[{'all':!![]}];}_0x3069cc=_[_0xce3e('0x3c')]({},_0x3069cc,_0x52093b[_0xce3e('0x3d')]);return db[_0xce3e('0x3e')]['find'](_0x3069cc)[_0xce3e('0x22')](handleEntityNotFound(_0x26d82b,null))[_0xce3e('0x22')](respondWithResult(_0x26d82b,null))['catch'](handleError(_0x26d82b,null));};exports[_0xce3e('0x45')]=function(_0x43ed41,_0x21c23c){return db[_0xce3e('0x3e')][_0xce3e('0x45')](_0x43ed41['body'],{})[_0xce3e('0x22')](respondWithResult(_0x21c23c,0xc9))[_0xce3e('0x43')](handleError(_0x21c23c,null));};exports[_0xce3e('0x21')]=function(_0x145274,_0x2f6254){if(_0x145274[_0xce3e('0x46')]['id']){delete _0x145274[_0xce3e('0x46')]['id'];}return db['Cdr'][_0xce3e('0x47')]({'where':{'id':_0x145274['params']['id']}})[_0xce3e('0x22')](handleEntityNotFound(_0x2f6254,null))[_0xce3e('0x22')](saveUpdates(_0x145274[_0xce3e('0x46')],null))[_0xce3e('0x22')](respondWithResult(_0x2f6254,null))[_0xce3e('0x43')](handleError(_0x2f6254,null));};exports['destroy']=function(_0xfa67e7,_0x5ea9a8){return db[_0xce3e('0x3e')][_0xce3e('0x47')]({'where':{'id':_0xfa67e7['params']['id']}})[_0xce3e('0x22')](handleEntityNotFound(_0x5ea9a8,null))[_0xce3e('0x22')](removeEntity(_0x5ea9a8,null))[_0xce3e('0x43')](handleError(_0x5ea9a8,null));};exports[_0xce3e('0x48')]=function(_0x51ac02,_0x17ee93){return db[_0xce3e('0x3e')][_0xce3e('0x48')]()[_0xce3e('0x22')](respondWithResult(_0x17ee93,null))['catch'](handleError(_0x17ee93,null));};
\ No newline at end of file
+var _0x1d9c=['fields','attributes','length','hasOwnProperty','order','sort','where','filter','merge','map','options','includeAll','include','findAll','catch','show','params','Cdr','find','create','update','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','destroy','sendStatus','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection'];(function(_0x4eb55f,_0x3a30cb){var _0x12312b=function(_0x3ce06a){while(--_0x3ce06a){_0x4eb55f['push'](_0x4eb55f['shift']());}};_0x12312b(++_0x3a30cb);}(_0x1d9c,0xa5));var _0xc1d9=function(_0x4ac4d4,_0xe094f9){_0x4ac4d4=_0x4ac4d4-0x0;var _0x575808=_0x1d9c[_0x4ac4d4];return _0x575808;};'use strict';var pdf=require(_0xc1d9('0x0'));var emlformat=require(_0xc1d9('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xc1d9('0x2'));var jsonpatch=require(_0xc1d9('0x3'));var rp=require(_0xc1d9('0x4'));var moment=require('moment');var BPromise=require(_0xc1d9('0x5'));var Mustache=require(_0xc1d9('0x6'));var util=require(_0xc1d9('0x7'));var path=require('path');var sox=require(_0xc1d9('0x8'));var csv=require(_0xc1d9('0x9'));var ejs=require(_0xc1d9('0xa'));var fs=require('fs');var _=require(_0xc1d9('0xb'));var squel=require(_0xc1d9('0xc'));var crypto=require(_0xc1d9('0xd'));var jsforce=require('jsforce');var deskjs=require(_0xc1d9('0xe'));var toCsv=require(_0xc1d9('0x9'));var querystring=require(_0xc1d9('0xf'));var Papa=require(_0xc1d9('0x10'));var authService=require(_0xc1d9('0x11'));var hardwareService=require(_0xc1d9('0x12'));var Redis=require(_0xc1d9('0x13'));var qs=require(_0xc1d9('0x14'));var logger=require(_0xc1d9('0x15'))('api');var utils=require(_0xc1d9('0x16'));var config=require('../../config/environment');var db=require(_0xc1d9('0x17'))['db'];function respondWithStatusCode(_0x333252,_0x48aee3){_0x48aee3=_0x48aee3||0xcc;return function(_0x1c495d){if(_0x1c495d){return _0x333252['sendStatus'](_0x48aee3);}return _0x333252[_0xc1d9('0x18')](_0x48aee3)[_0xc1d9('0x19')]();};}function respondWithResult(_0x52b496,_0x1ff1e6){_0x1ff1e6=_0x1ff1e6||0xc8;return function(_0x50b8a0){if(_0x50b8a0){return _0x52b496[_0xc1d9('0x18')](_0x1ff1e6)[_0xc1d9('0x1a')](_0x50b8a0);}};}function respondWithFilteredResult(_0x4e513c,_0x5e1c48){return function(_0x29f6a3){if(_0x29f6a3){var _0x1559e0=_0x29f6a3[_0xc1d9('0x1b')],_0x22ba42=_0x5e1c48['offset'],_0x1e2ae8=_0x5e1c48[_0xc1d9('0x1c')]+_0x5e1c48[_0xc1d9('0x1d')],_0x445cb2;if(_0x1e2ae8>=_0x1559e0){_0x1e2ae8=_0x1559e0;_0x445cb2=0xc8;}else{_0x445cb2=0xce;}_0x4e513c['status'](_0x445cb2);return _0x4e513c[_0xc1d9('0x1e')](_0xc1d9('0x1f'),_0x22ba42+'-'+_0x1e2ae8+'/'+_0x1559e0)[_0xc1d9('0x1a')](_0x29f6a3);}return null;};}function patchUpdates(_0x10677a){return function(_0x3e1856){try{jsonpatch[_0xc1d9('0x20')](_0x3e1856,_0x10677a,!![]);}catch(_0x5c968a){return BPromise[_0xc1d9('0x21')](_0x5c968a);}return _0x3e1856[_0xc1d9('0x22')]();};}function saveUpdates(_0x54e63f,_0x1e11d8){return function(_0x1ae4d4){if(_0x1ae4d4){return _0x1ae4d4['update'](_0x54e63f)[_0xc1d9('0x23')](function(_0x3a0e03){return _0x3a0e03;});}return null;};}function removeEntity(_0x4601e9,_0x1d516d){return function(_0x4774ee){if(_0x4774ee){return _0x4774ee[_0xc1d9('0x24')]()[_0xc1d9('0x23')](function(){_0x4601e9[_0xc1d9('0x18')](0xcc)[_0xc1d9('0x19')]();});}};}function handleEntityNotFound(_0x4a343d,_0x1d63a7){return function(_0x80375f){if(!_0x80375f){_0x4a343d[_0xc1d9('0x25')](0x194);}return _0x80375f;};}function handleError(_0x4ebd7a,_0x3fb7b1){_0x3fb7b1=_0x3fb7b1||0x1f4;return function(_0x430b82){logger['error'](_0x430b82[_0xc1d9('0x26')]);if(_0x430b82[_0xc1d9('0x27')]){delete _0x430b82[_0xc1d9('0x27')];}_0x4ebd7a['status'](_0x3fb7b1)[_0xc1d9('0x28')](_0x430b82);};}exports[_0xc1d9('0x29')]=function(_0x3c5438,_0x53e0b5){var _0x1dcfec={},_0x4b8583={},_0x3d9eb3={'count':0x0,'rows':[]};var _0x4cf143=db['Cdr'][_0xc1d9('0x2a')];_0x4b8583[_0xc1d9('0x2b')]=_[_0xc1d9('0x2c')](_0x4cf143);_0x4b8583['query']=_[_0xc1d9('0x2c')](_0x3c5438[_0xc1d9('0x2d')]);_0x4b8583[_0xc1d9('0x2e')]=_[_0xc1d9('0x2f')](_0x4b8583[_0xc1d9('0x2b')],_0x4b8583['query']);_0x1dcfec['attributes']=_[_0xc1d9('0x2f')](_0x4b8583['model'],qs[_0xc1d9('0x30')](_0x3c5438[_0xc1d9('0x2d')]['fields']));_0x1dcfec[_0xc1d9('0x31')]=_0x1dcfec[_0xc1d9('0x31')][_0xc1d9('0x32')]?_0x1dcfec['attributes']:_0x4b8583[_0xc1d9('0x2b')];if(!_0x3c5438[_0xc1d9('0x2d')][_0xc1d9('0x33')]('nolimit')){_0x1dcfec[_0xc1d9('0x1d')]=qs[_0xc1d9('0x1d')](_0x3c5438[_0xc1d9('0x2d')][_0xc1d9('0x1d')]);_0x1dcfec[_0xc1d9('0x1c')]=qs[_0xc1d9('0x1c')](_0x3c5438[_0xc1d9('0x2d')][_0xc1d9('0x1c')]);}_0x1dcfec[_0xc1d9('0x34')]=qs['sort'](_0x3c5438[_0xc1d9('0x2d')][_0xc1d9('0x35')]);_0x1dcfec[_0xc1d9('0x36')]=qs[_0xc1d9('0x2e')](_['pick'](_0x3c5438[_0xc1d9('0x2d')],_0x4b8583[_0xc1d9('0x2e')]));if(_0x3c5438['query'][_0xc1d9('0x37')]){_0x1dcfec[_0xc1d9('0x36')]=_[_0xc1d9('0x38')](_0x1dcfec[_0xc1d9('0x36')],{'$or':_[_0xc1d9('0x39')](_0x4cf143,function(_0xc4aab2){if(_0xc4aab2['type']['key']!=='VIRTUAL'){var _0x223d69={};_0x223d69[_0xc4aab2['field']]={'$like':'%'+_0x3c5438[_0xc1d9('0x2d')]['filter']+'%'};return _0x223d69;}})});}_0x1dcfec=_[_0xc1d9('0x38')]({},_0x1dcfec,_0x3c5438[_0xc1d9('0x3a')]);var _0x2790ce={'where':_0x1dcfec['where']};return db['Cdr'][_0xc1d9('0x1b')](_0x2790ce)['then'](function(_0x277c9c){_0x3d9eb3[_0xc1d9('0x1b')]=_0x277c9c;if(_0x3c5438['query'][_0xc1d9('0x3b')]){_0x1dcfec[_0xc1d9('0x3c')]=[{'all':!![]}];}return db['Cdr'][_0xc1d9('0x3d')](_0x1dcfec);})[_0xc1d9('0x23')](function(_0x2080f7){_0x3d9eb3['rows']=_0x2080f7;return _0x3d9eb3;})[_0xc1d9('0x23')](respondWithFilteredResult(_0x53e0b5,_0x1dcfec))[_0xc1d9('0x3e')](handleError(_0x53e0b5,null));};exports[_0xc1d9('0x3f')]=function(_0x1450d7,_0x4f8636){var _0x5944dc={'raw':!![],'where':{'id':_0x1450d7[_0xc1d9('0x40')]['id']}},_0x92008c={};_0x92008c[_0xc1d9('0x2b')]=_['keys'](db[_0xc1d9('0x41')][_0xc1d9('0x2a')]);_0x92008c['query']=_['keys'](_0x1450d7[_0xc1d9('0x2d')]);_0x92008c[_0xc1d9('0x2e')]=_[_0xc1d9('0x2f')](_0x92008c[_0xc1d9('0x2b')],_0x92008c[_0xc1d9('0x2d')]);_0x5944dc[_0xc1d9('0x31')]=_[_0xc1d9('0x2f')](_0x92008c[_0xc1d9('0x2b')],qs[_0xc1d9('0x30')](_0x1450d7[_0xc1d9('0x2d')][_0xc1d9('0x30')]));_0x5944dc['attributes']=_0x5944dc[_0xc1d9('0x31')][_0xc1d9('0x32')]?_0x5944dc[_0xc1d9('0x31')]:_0x92008c[_0xc1d9('0x2b')];if(_0x1450d7['query'][_0xc1d9('0x3b')]){_0x5944dc[_0xc1d9('0x3c')]=[{'all':!![]}];}_0x5944dc=_['merge']({},_0x5944dc,_0x1450d7[_0xc1d9('0x3a')]);return db[_0xc1d9('0x41')][_0xc1d9('0x42')](_0x5944dc)[_0xc1d9('0x23')](handleEntityNotFound(_0x4f8636,null))[_0xc1d9('0x23')](respondWithResult(_0x4f8636,null))[_0xc1d9('0x3e')](handleError(_0x4f8636,null));};exports[_0xc1d9('0x43')]=function(_0x55d91b,_0x2787a6){return db[_0xc1d9('0x41')]['create'](_0x55d91b['body'],{})[_0xc1d9('0x23')](respondWithResult(_0x2787a6,0xc9))[_0xc1d9('0x3e')](handleError(_0x2787a6,null));};exports[_0xc1d9('0x44')]=function(_0x3d03fd,_0x5ac21e){if(_0x3d03fd[_0xc1d9('0x45')]['id']){delete _0x3d03fd[_0xc1d9('0x45')]['id'];}return db[_0xc1d9('0x41')]['find']({'where':{'id':_0x3d03fd[_0xc1d9('0x40')]['id']}})['then'](handleEntityNotFound(_0x5ac21e,null))[_0xc1d9('0x23')](saveUpdates(_0x3d03fd[_0xc1d9('0x45')],null))[_0xc1d9('0x23')](respondWithResult(_0x5ac21e,null))[_0xc1d9('0x3e')](handleError(_0x5ac21e,null));};exports['destroy']=function(_0x4dbfe0,_0x3600d2){return db[_0xc1d9('0x41')]['find']({'where':{'id':_0x4dbfe0[_0xc1d9('0x40')]['id']}})['then'](handleEntityNotFound(_0x3600d2,null))[_0xc1d9('0x23')](removeEntity(_0x3600d2,null))[_0xc1d9('0x3e')](handleError(_0x3600d2,null));};exports[_0xc1d9('0x46')]=function(_0xa50bc7,_0x3e8f72){return db[_0xc1d9('0x41')]['describe']()[_0xc1d9('0x23')](respondWithResult(_0x3e8f72,null))['catch'](handleError(_0x3e8f72,null));};
\ No newline at end of file
index 4864197..92dcf21 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3c4=['calldate','dst','src','uniqueid','lodash','util','../../config/logger','api','moment','./cdr.attributes','define','cdr','accountcode'];(function(_0x209487,_0x21ae21){var _0x226983=function(_0x98901){while(--_0x98901){_0x209487['push'](_0x209487['shift']());}};_0x226983(++_0x21ae21);}(_0xe3c4,0x1be));var _0x4e3c=function(_0xcb7b80,_0x2d328f){_0xcb7b80=_0xcb7b80-0x0;var _0x72edf0=_0xe3c4[_0xcb7b80];return _0x72edf0;};'use strict';var _=require(_0x4e3c('0x0'));var util=require(_0x4e3c('0x1'));var logger=require(_0x4e3c('0x2'))(_0x4e3c('0x3'));var moment=require(_0x4e3c('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x4e3c('0x5'));module['exports']=function(_0x4a4c02,_0x122aa5){return _0x4a4c02[_0x4e3c('0x6')]('Cdr',attributes,{'tableName':_0x4e3c('0x7'),'paranoid':![],'indexes':[{'name':_0x4e3c('0x8'),'fields':[_0x4e3c('0x8')]},{'name':'calldate','fields':[_0x4e3c('0x9')]},{'name':'disposition','fields':['disposition']},{'name':_0x4e3c('0xa'),'fields':[_0x4e3c('0xa')]},{'name':_0x4e3c('0xb'),'fields':[_0x4e3c('0xb')]},{'name':_0x4e3c('0xc'),'fields':[_0x4e3c('0xc')]}],'timestamps':![]});};
\ No newline at end of file
+var _0xf0f7=['accountcode','calldate','disposition','dst','src','uniqueid','lodash','../../config/logger','api','request-promise','./cdr.attributes','exports','define','Cdr','cdr'];(function(_0x1d3577,_0x17a32e){var _0x277d9a=function(_0x4b4144){while(--_0x4b4144){_0x1d3577['push'](_0x1d3577['shift']());}};_0x277d9a(++_0x17a32e);}(_0xf0f7,0x17d));var _0x7f0f=function(_0x286ca5,_0x2c8291){_0x286ca5=_0x286ca5-0x0;var _0x3d9477=_0xf0f7[_0x286ca5];return _0x3d9477;};'use strict';var _=require(_0x7f0f('0x0'));var util=require('util');var logger=require(_0x7f0f('0x1'))(_0x7f0f('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7f0f('0x3'));var attributes=require(_0x7f0f('0x4'));module[_0x7f0f('0x5')]=function(_0xe8efff,_0x3a87d7){return _0xe8efff[_0x7f0f('0x6')](_0x7f0f('0x7'),attributes,{'tableName':_0x7f0f('0x8'),'paranoid':![],'indexes':[{'name':_0x7f0f('0x9'),'fields':['accountcode']},{'name':_0x7f0f('0xa'),'fields':[_0x7f0f('0xa')]},{'name':_0x7f0f('0xb'),'fields':[_0x7f0f('0xb')]},{'name':_0x7f0f('0xc'),'fields':[_0x7f0f('0xc')]},{'name':_0x7f0f('0xd'),'fields':[_0x7f0f('0xd')]},{'name':_0x7f0f('0xe'),'fields':[_0x7f0f('0xe')]}],'timestamps':![]});};
\ No newline at end of file
index ddfdede..9a70bef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2aba=['message','Cdr,\x20%s,\x20%s','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','jayson/promise','client','request','request\x20sent','debug','error','code'];(function(_0x35d4e9,_0x298c61){var _0x5c2770=function(_0x2f326a){while(--_0x2f326a){_0x35d4e9['push'](_0x35d4e9['shift']());}};_0x5c2770(++_0x298c61);}(_0x2aba,0x112));var _0xa2ab=function(_0x5c456c,_0x1ef290){_0x5c456c=_0x5c456c-0x0;var _0x4f2ee3=_0x2aba[_0x5c456c];return _0x4f2ee3;};'use strict';var _=require(_0xa2ab('0x0'));var util=require('util');var moment=require(_0xa2ab('0x1'));var BPromise=require(_0xa2ab('0x2'));var rs=require(_0xa2ab('0x3'));var fs=require('fs');var Redis=require(_0xa2ab('0x4'));var db=require(_0xa2ab('0x5'))['db'];var utils=require(_0xa2ab('0x6'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0xa2ab('0x7'));var client=jayson[_0xa2ab('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5916e2,_0x42c4b1,_0x3667dd){return new BPromise(function(_0xa3bf6b,_0x22fae9){return client[_0xa2ab('0x9')](_0x5916e2,_0x3667dd)['then'](function(_0x379863){logger['info']('Cdr,\x20%s,\x20%s',_0x42c4b1,_0xa2ab('0xa'));logger[_0xa2ab('0xb')]('Cdr,\x20%s,\x20%s,\x20%s',_0x42c4b1,_0xa2ab('0xa'),JSON['stringify'](_0x379863));if(_0x379863[_0xa2ab('0xc')]){if(_0x379863[_0xa2ab('0xc')][_0xa2ab('0xd')]===0x1f4){logger[_0xa2ab('0xc')]('Cdr,\x20%s,\x20%s',_0x42c4b1,_0x379863['error'][_0xa2ab('0xe')]);return _0x22fae9(_0x379863[_0xa2ab('0xc')][_0xa2ab('0xe')]);}logger[_0xa2ab('0xc')](_0xa2ab('0xf'),_0x42c4b1,_0x379863[_0xa2ab('0xc')][_0xa2ab('0xe')]);return _0xa3bf6b(_0x379863[_0xa2ab('0xc')][_0xa2ab('0xe')]);}else{logger['info'](_0xa2ab('0xf'),_0x42c4b1,_0xa2ab('0xa'));_0xa3bf6b(_0x379863[_0xa2ab('0x10')][_0xa2ab('0xe')]);}})[_0xa2ab('0x11')](function(_0x4bad40){logger['error'](_0xa2ab('0xf'),_0x42c4b1,_0x4bad40);_0x22fae9(_0x4bad40);});});}
\ No newline at end of file
+var _0x7429=['code','message','info','result','lodash','util','bluebird','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','http','then','Cdr,\x20%s,\x20%s','request\x20sent','debug','Cdr,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x626b19,_0x40f131){var _0x436852=function(_0x139d2c){while(--_0x139d2c){_0x626b19['push'](_0x626b19['shift']());}};_0x436852(++_0x40f131);}(_0x7429,0xa4));var _0x9742=function(_0x10af74,_0x426634){_0x10af74=_0x10af74-0x0;var _0x2334f0=_0x7429[_0x10af74];return _0x2334f0;};'use strict';var _=require(_0x9742('0x0'));var util=require(_0x9742('0x1'));var moment=require('moment');var BPromise=require(_0x9742('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9742('0x3'));var db=require(_0x9742('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x9742('0x5'))('rpc');var config=require(_0x9742('0x6'));var jayson=require(_0x9742('0x7'));var client=jayson['client'][_0x9742('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x3fc778,_0x28366c,_0x51a8bc){return new BPromise(function(_0x1bff5e,_0x32c587){return client['request'](_0x3fc778,_0x51a8bc)[_0x9742('0x9')](function(_0xeaa84d){logger['info'](_0x9742('0xa'),_0x28366c,_0x9742('0xb'));logger[_0x9742('0xc')](_0x9742('0xd'),_0x28366c,'request\x20sent',JSON[_0x9742('0xe')](_0xeaa84d));if(_0xeaa84d['error']){if(_0xeaa84d[_0x9742('0xf')][_0x9742('0x10')]===0x1f4){logger['error'](_0x9742('0xa'),_0x28366c,_0xeaa84d[_0x9742('0xf')][_0x9742('0x11')]);return _0x32c587(_0xeaa84d[_0x9742('0xf')][_0x9742('0x11')]);}logger[_0x9742('0xf')](_0x9742('0xa'),_0x28366c,_0xeaa84d[_0x9742('0xf')][_0x9742('0x11')]);return _0x1bff5e(_0xeaa84d[_0x9742('0xf')][_0x9742('0x11')]);}else{logger[_0x9742('0x12')](_0x9742('0xa'),_0x28366c,_0x9742('0xb'));_0x1bff5e(_0xeaa84d[_0x9742('0x13')][_0x9742('0x11')]);}})['catch'](function(_0x5ebccd){logger[_0x9742('0xf')](_0x9742('0xa'),_0x28366c,_0x5ebccd);_0x32c587(_0x5ebccd);});});}
\ No newline at end of file
index eb66353..4cb36bd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x468f=['./cdr.controller','get','index','isAuthenticated','/:id','show','post','create','put','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x10ec8f,_0x309f45){var _0xe56d8=function(_0x8f7973){while(--_0x8f7973){_0x10ec8f['push'](_0x10ec8f['shift']());}};_0xe56d8(++_0x309f45);}(_0x468f,0x97));var _0xf468=function(_0x4ee799,_0x22e2c2){_0x4ee799=_0x4ee799-0x0;var _0x26fe5b=_0x468f[_0x4ee799];return _0x26fe5b;};'use strict';var multer=require(_0xf468('0x0'));var util=require(_0xf468('0x1'));var path=require(_0xf468('0x2'));var timeout=require(_0xf468('0x3'));var express=require(_0xf468('0x4'));var router=express[_0xf468('0x5')]();var auth=require(_0xf468('0x6'));var interaction=require(_0xf468('0x7'));var config=require(_0xf468('0x8'));var controller=require(_0xf468('0x9'));router[_0xf468('0xa')]('/',auth['isAuthenticated'](),controller[_0xf468('0xb')]);router[_0xf468('0xa')]('/describe',auth[_0xf468('0xc')](),controller['describe']);router[_0xf468('0xa')](_0xf468('0xd'),auth['isAuthenticated'](),controller[_0xf468('0xe')]);router[_0xf468('0xf')]('/',auth[_0xf468('0xc')](),controller[_0xf468('0x10')]);router[_0xf468('0x11')](_0xf468('0xd'),auth[_0xf468('0xc')](),controller['update']);router['delete'](_0xf468('0xd'),auth[_0xf468('0xc')](),controller[_0xf468('0x12')]);module[_0xf468('0x13')]=router;
\ No newline at end of file
+var _0x3eee=['delete','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./cdr.controller','get','isAuthenticated','describe','/:id','show','post','update'];(function(_0x2dd6ea,_0x5c205c){var _0x2c4cc0=function(_0x27217f){while(--_0x27217f){_0x2dd6ea['push'](_0x2dd6ea['shift']());}};_0x2c4cc0(++_0x5c205c);}(_0x3eee,0x101));var _0xe3ee=function(_0x5e9ff2,_0x4cdb8b){_0x5e9ff2=_0x5e9ff2-0x0;var _0x544f24=_0x3eee[_0x5e9ff2];return _0x544f24;};'use strict';var multer=require('multer');var util=require(_0xe3ee('0x0'));var path=require(_0xe3ee('0x1'));var timeout=require(_0xe3ee('0x2'));var express=require(_0xe3ee('0x3'));var router=express[_0xe3ee('0x4')]();var auth=require(_0xe3ee('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xe3ee('0x6'));var controller=require(_0xe3ee('0x7'));router[_0xe3ee('0x8')]('/',auth[_0xe3ee('0x9')](),controller['index']);router[_0xe3ee('0x8')]('/describe',auth[_0xe3ee('0x9')](),controller[_0xe3ee('0xa')]);router[_0xe3ee('0x8')](_0xe3ee('0xb'),auth[_0xe3ee('0x9')](),controller[_0xe3ee('0xc')]);router[_0xe3ee('0xd')]('/',auth['isAuthenticated'](),controller['create']);router['put'](_0xe3ee('0xb'),auth[_0xe3ee('0x9')](),controller[_0xe3ee('0xe')]);router[_0xe3ee('0xf')]('/:id',auth[_0xe3ee('0x9')](),controller['destroy']);module[_0xe3ee('0x10')]=router;
\ No newline at end of file
index 1c84123..fa0eb3a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2bab=['STRING','TEXT','sequelize','exports','INTEGER'];(function(_0x13ea00,_0x12f610){var _0x1f7347=function(_0x34ae63){while(--_0x34ae63){_0x13ea00['push'](_0x13ea00['shift']());}};_0x1f7347(++_0x12f610);}(_0x2bab,0x1ba));var _0xb2ba=function(_0x242345,_0x3d64ec){_0x242345=_0x242345-0x0;var _0x414565=_0x2bab[_0x242345];return _0x414565;};'use strict';var Sequelize=require(_0xb2ba('0x0'));module[_0xb2ba('0x1')]={'priority':{'type':Sequelize[_0xb2ba('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0xb2ba('0x3')],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize[_0xb2ba('0x4')]()},'description':{'type':Sequelize[_0xb2ba('0x3')]},'interval':{'type':Sequelize[_0xb2ba('0x3')],'defaultValue':'*,*,*,*'}};
\ No newline at end of file
+var _0xacc6=['sequelize','exports','INTEGER','STRING','noop','*,*,*,*'];(function(_0x7b76e7,_0x1b2b07){var _0xd877b=function(_0x168376){while(--_0x168376){_0x7b76e7['push'](_0x7b76e7['shift']());}};_0xd877b(++_0x1b2b07);}(_0xacc6,0x150));var _0x6acc=function(_0x590851,_0x496bee){_0x590851=_0x590851-0x0;var _0x3b0115=_0xacc6[_0x590851];return _0x3b0115;};'use strict';var Sequelize=require(_0x6acc('0x0'));module[_0x6acc('0x1')]={'priority':{'type':Sequelize[_0x6acc('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0x6acc('0x3')],'allowNull':![],'defaultValue':_0x6acc('0x4')},'appdata':{'type':Sequelize['TEXT']()},'description':{'type':Sequelize[_0x6acc('0x3')]},'interval':{'type':Sequelize[_0x6acc('0x3')],'defaultValue':_0x6acc('0x5')}};
\ No newline at end of file
index f4cdfa6..1e39d3e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc856=['mustache','util','sox','to-csv','ejs','lodash','squel','crypto','querystring','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','sendStatus','end','status','count','offset','limit','set','json','apply','reject','save','then','destroy','error','send','show','model','keys','ChatApplication','rawAttributes','query','intersection','attributes','fields','length','includeAll','include','merge','find','update','body','params','catch','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird'];(function(_0x2e6c19,_0x131233){var _0x52885d=function(_0x38f224){while(--_0x38f224){_0x2e6c19['push'](_0x2e6c19['shift']());}};_0x52885d(++_0x131233);}(_0xc856,0x1a9));var _0x6c85=function(_0x5d6456,_0x58ecc7){_0x5d6456=_0x5d6456-0x0;var _0x4d66c1=_0xc856[_0x5d6456];return _0x4d66c1;};'use strict';var pdf=require(_0x6c85('0x0'));var emlformat=require(_0x6c85('0x1'));var rimraf=require(_0x6c85('0x2'));var zipdir=require(_0x6c85('0x3'));var jsonpatch=require(_0x6c85('0x4'));var rp=require(_0x6c85('0x5'));var moment=require('moment');var BPromise=require(_0x6c85('0x6'));var Mustache=require(_0x6c85('0x7'));var util=require(_0x6c85('0x8'));var path=require('path');var sox=require(_0x6c85('0x9'));var csv=require(_0x6c85('0xa'));var ejs=require(_0x6c85('0xb'));var fs=require('fs');var _=require(_0x6c85('0xc'));var squel=require(_0x6c85('0xd'));var crypto=require(_0x6c85('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x6c85('0xa'));var querystring=require(_0x6c85('0xf'));var Papa=require('papaparse');var authService=require(_0x6c85('0x10'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0x6c85('0x11'));var logger=require(_0x6c85('0x12'))(_0x6c85('0x13'));var utils=require(_0x6c85('0x14'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5babb5,_0x9da1c2){_0x9da1c2=_0x9da1c2||0xcc;return function(_0x51c1d7){if(_0x51c1d7){return _0x5babb5[_0x6c85('0x15')](_0x9da1c2);}return _0x5babb5['status'](_0x9da1c2)[_0x6c85('0x16')]();};}function respondWithResult(_0x24ffe6,_0x5cee65){_0x5cee65=_0x5cee65||0xc8;return function(_0x232178){if(_0x232178){return _0x24ffe6[_0x6c85('0x17')](_0x5cee65)['json'](_0x232178);}};}function respondWithFilteredResult(_0x3adc05,_0x4ea9d1){return function(_0x12c385){if(_0x12c385){var _0x30c479=_0x12c385[_0x6c85('0x18')],_0x10c31d=_0x4ea9d1['offset'],_0x553344=_0x4ea9d1[_0x6c85('0x19')]+_0x4ea9d1[_0x6c85('0x1a')],_0x50c182;if(_0x553344>=_0x30c479){_0x553344=_0x30c479;_0x50c182=0xc8;}else{_0x50c182=0xce;}_0x3adc05[_0x6c85('0x17')](_0x50c182);return _0x3adc05[_0x6c85('0x1b')]('Content-Range',_0x10c31d+'-'+_0x553344+'/'+_0x30c479)[_0x6c85('0x1c')](_0x12c385);}return null;};}function patchUpdates(_0x12d180){return function(_0x33725f){try{jsonpatch[_0x6c85('0x1d')](_0x33725f,_0x12d180,!![]);}catch(_0x544649){return BPromise[_0x6c85('0x1e')](_0x544649);}return _0x33725f[_0x6c85('0x1f')]();};}function saveUpdates(_0x9e089e,_0x345af0){return function(_0x5ca02b){if(_0x5ca02b){return _0x5ca02b['update'](_0x9e089e)[_0x6c85('0x20')](function(_0x3dcda3){return _0x3dcda3;});}return null;};}function removeEntity(_0x2ff684,_0x21da4c){return function(_0x34c186){if(_0x34c186){return _0x34c186[_0x6c85('0x21')]()[_0x6c85('0x20')](function(){_0x2ff684['status'](0xcc)[_0x6c85('0x16')]();});}};}function handleEntityNotFound(_0x243e6f,_0x48c9f2){return function(_0x2a6f52){if(!_0x2a6f52){_0x243e6f[_0x6c85('0x15')](0x194);}return _0x2a6f52;};}function handleError(_0x201b91,_0x43968d){_0x43968d=_0x43968d||0x1f4;return function(_0x31ebc7){logger[_0x6c85('0x22')](_0x31ebc7['stack']);if(_0x31ebc7['name']){delete _0x31ebc7['name'];}_0x201b91[_0x6c85('0x17')](_0x43968d)[_0x6c85('0x23')](_0x31ebc7);};}exports[_0x6c85('0x24')]=function(_0xc3b2fa,_0x43c577){var _0x182231={'raw':!![],'where':{'id':_0xc3b2fa['params']['id']}},_0x1d7f19={};_0x1d7f19[_0x6c85('0x25')]=_[_0x6c85('0x26')](db[_0x6c85('0x27')][_0x6c85('0x28')]);_0x1d7f19[_0x6c85('0x29')]=_[_0x6c85('0x26')](_0xc3b2fa['query']);_0x1d7f19['filters']=_[_0x6c85('0x2a')](_0x1d7f19[_0x6c85('0x25')],_0x1d7f19['query']);_0x182231[_0x6c85('0x2b')]=_[_0x6c85('0x2a')](_0x1d7f19[_0x6c85('0x25')],qs[_0x6c85('0x2c')](_0xc3b2fa[_0x6c85('0x29')]['fields']));_0x182231['attributes']=_0x182231[_0x6c85('0x2b')][_0x6c85('0x2d')]?_0x182231['attributes']:_0x1d7f19[_0x6c85('0x25')];if(_0xc3b2fa['query'][_0x6c85('0x2e')]){_0x182231[_0x6c85('0x2f')]=[{'all':!![]}];}_0x182231=_[_0x6c85('0x30')]({},_0x182231,_0xc3b2fa['options']);return db[_0x6c85('0x27')][_0x6c85('0x31')](_0x182231)[_0x6c85('0x20')](handleEntityNotFound(_0x43c577,null))[_0x6c85('0x20')](respondWithResult(_0x43c577,null))['catch'](handleError(_0x43c577,null));};exports[_0x6c85('0x32')]=function(_0x598f1b,_0x5c1512){if(_0x598f1b[_0x6c85('0x33')]['id']){delete _0x598f1b[_0x6c85('0x33')]['id'];}return db[_0x6c85('0x27')][_0x6c85('0x31')]({'where':{'id':_0x598f1b[_0x6c85('0x34')]['id']}})[_0x6c85('0x20')](handleEntityNotFound(_0x5c1512,null))[_0x6c85('0x20')](saveUpdates(_0x598f1b[_0x6c85('0x33')],null))[_0x6c85('0x20')](respondWithResult(_0x5c1512,null))[_0x6c85('0x35')](handleError(_0x5c1512,null));};exports[_0x6c85('0x21')]=function(_0x4c5380,_0x208d2f){return db[_0x6c85('0x27')][_0x6c85('0x31')]({'where':{'id':_0x4c5380['params']['id']}})[_0x6c85('0x20')](handleEntityNotFound(_0x208d2f,null))[_0x6c85('0x20')](removeEntity(_0x208d2f,null))[_0x6c85('0x35')](handleError(_0x208d2f,null));};
\ No newline at end of file
+var _0x37f7=['keys','ChatApplication','rawAttributes','query','filters','intersection','attributes','fields','length','include','merge','options','catch','update','body','find','destroy','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','then','end','error','name','show','params','model'];(function(_0x2a7692,_0x48b251){var _0x90722=function(_0x59bf67){while(--_0x59bf67){_0x2a7692['push'](_0x2a7692['shift']());}};_0x90722(++_0x48b251);}(_0x37f7,0x1b5));var _0x737f=function(_0x3b23f6,_0x5e239c){_0x3b23f6=_0x3b23f6-0x0;var _0x28e319=_0x37f7[_0x3b23f6];return _0x28e319;};'use strict';var pdf=require(_0x737f('0x0'));var emlformat=require(_0x737f('0x1'));var rimraf=require(_0x737f('0x2'));var zipdir=require(_0x737f('0x3'));var jsonpatch=require(_0x737f('0x4'));var rp=require(_0x737f('0x5'));var moment=require(_0x737f('0x6'));var BPromise=require(_0x737f('0x7'));var Mustache=require(_0x737f('0x8'));var util=require(_0x737f('0x9'));var path=require(_0x737f('0xa'));var sox=require(_0x737f('0xb'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x737f('0xc'));var squel=require(_0x737f('0xd'));var crypto=require(_0x737f('0xe'));var jsforce=require(_0x737f('0xf'));var deskjs=require(_0x737f('0x10'));var toCsv=require(_0x737f('0x11'));var querystring=require(_0x737f('0x12'));var Papa=require(_0x737f('0x13'));var authService=require(_0x737f('0x14'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x737f('0x15'));var qs=require(_0x737f('0x16'));var logger=require('../../config/logger')('api');var utils=require(_0x737f('0x17'));var config=require(_0x737f('0x18'));var db=require(_0x737f('0x19'))['db'];function respondWithStatusCode(_0x229ee5,_0x28f43f){_0x28f43f=_0x28f43f||0xcc;return function(_0x3c7ebc){if(_0x3c7ebc){return _0x229ee5[_0x737f('0x1a')](_0x28f43f);}return _0x229ee5['status'](_0x28f43f)['end']();};}function respondWithResult(_0x2af18a,_0x3a27a6){_0x3a27a6=_0x3a27a6||0xc8;return function(_0x1b5098){if(_0x1b5098){return _0x2af18a[_0x737f('0x1b')](_0x3a27a6)[_0x737f('0x1c')](_0x1b5098);}};}function respondWithFilteredResult(_0x926866,_0x73847a){return function(_0x36ef91){if(_0x36ef91){var _0x23e9c1=_0x36ef91[_0x737f('0x1d')],_0x508626=_0x73847a[_0x737f('0x1e')],_0x3a34e5=_0x73847a[_0x737f('0x1e')]+_0x73847a[_0x737f('0x1f')],_0x44564a;if(_0x3a34e5>=_0x23e9c1){_0x3a34e5=_0x23e9c1;_0x44564a=0xc8;}else{_0x44564a=0xce;}_0x926866[_0x737f('0x1b')](_0x44564a);return _0x926866[_0x737f('0x20')](_0x737f('0x21'),_0x508626+'-'+_0x3a34e5+'/'+_0x23e9c1)[_0x737f('0x1c')](_0x36ef91);}return null;};}function patchUpdates(_0x4bf700){return function(_0x1e9e05){try{jsonpatch[_0x737f('0x22')](_0x1e9e05,_0x4bf700,!![]);}catch(_0x2f4fe2){return BPromise[_0x737f('0x23')](_0x2f4fe2);}return _0x1e9e05['save']();};}function saveUpdates(_0x57c3d1,_0x5d7ad2){return function(_0x3e3822){if(_0x3e3822){return _0x3e3822['update'](_0x57c3d1)['then'](function(_0x12946a){return _0x12946a;});}return null;};}function removeEntity(_0x593f18,_0x37d1d4){return function(_0x4d901a){if(_0x4d901a){return _0x4d901a['destroy']()[_0x737f('0x24')](function(){_0x593f18[_0x737f('0x1b')](0xcc)[_0x737f('0x25')]();});}};}function handleEntityNotFound(_0xcc42c4,_0x3f2dd2){return function(_0x5b2d4d){if(!_0x5b2d4d){_0xcc42c4[_0x737f('0x1a')](0x194);}return _0x5b2d4d;};}function handleError(_0x41bbe3,_0x5525c8){_0x5525c8=_0x5525c8||0x1f4;return function(_0x48b547){logger[_0x737f('0x26')](_0x48b547['stack']);if(_0x48b547[_0x737f('0x27')]){delete _0x48b547[_0x737f('0x27')];}_0x41bbe3['status'](_0x5525c8)['send'](_0x48b547);};}exports[_0x737f('0x28')]=function(_0x7cdee9,_0xac25fa){var _0x1c9450={'raw':!![],'where':{'id':_0x7cdee9[_0x737f('0x29')]['id']}},_0x35ef17={};_0x35ef17[_0x737f('0x2a')]=_[_0x737f('0x2b')](db[_0x737f('0x2c')][_0x737f('0x2d')]);_0x35ef17[_0x737f('0x2e')]=_[_0x737f('0x2b')](_0x7cdee9[_0x737f('0x2e')]);_0x35ef17[_0x737f('0x2f')]=_[_0x737f('0x30')](_0x35ef17[_0x737f('0x2a')],_0x35ef17[_0x737f('0x2e')]);_0x1c9450[_0x737f('0x31')]=_[_0x737f('0x30')](_0x35ef17[_0x737f('0x2a')],qs[_0x737f('0x32')](_0x7cdee9[_0x737f('0x2e')][_0x737f('0x32')]));_0x1c9450[_0x737f('0x31')]=_0x1c9450[_0x737f('0x31')][_0x737f('0x33')]?_0x1c9450['attributes']:_0x35ef17[_0x737f('0x2a')];if(_0x7cdee9[_0x737f('0x2e')]['includeAll']){_0x1c9450[_0x737f('0x34')]=[{'all':!![]}];}_0x1c9450=_[_0x737f('0x35')]({},_0x1c9450,_0x7cdee9[_0x737f('0x36')]);return db['ChatApplication']['find'](_0x1c9450)[_0x737f('0x24')](handleEntityNotFound(_0xac25fa,null))[_0x737f('0x24')](respondWithResult(_0xac25fa,null))[_0x737f('0x37')](handleError(_0xac25fa,null));};exports[_0x737f('0x38')]=function(_0x2edc18,_0x281396){if(_0x2edc18[_0x737f('0x39')]['id']){delete _0x2edc18[_0x737f('0x39')]['id'];}return db[_0x737f('0x2c')][_0x737f('0x3a')]({'where':{'id':_0x2edc18[_0x737f('0x29')]['id']}})['then'](handleEntityNotFound(_0x281396,null))[_0x737f('0x24')](saveUpdates(_0x2edc18[_0x737f('0x39')],null))['then'](respondWithResult(_0x281396,null))['catch'](handleError(_0x281396,null));};exports[_0x737f('0x3b')]=function(_0x5d356e,_0x23217b){return db[_0x737f('0x2c')][_0x737f('0x3a')]({'where':{'id':_0x5d356e[_0x737f('0x29')]['id']}})[_0x737f('0x24')](handleEntityNotFound(_0x23217b,null))[_0x737f('0x24')](removeEntity(_0x23217b,null))[_0x737f('0x37')](handleError(_0x23217b,null));};
\ No newline at end of file
index 8f1cda4..5bdcfe6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8085=['./chatApplication.attributes','exports','ChatApplication','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x2ebcaa,_0x4b813d){var _0x27a3c2=function(_0x5b6fb6){while(--_0x5b6fb6){_0x2ebcaa['push'](_0x2ebcaa['shift']());}};_0x27a3c2(++_0x4b813d);}(_0x8085,0x16b));var _0x5808=function(_0xc0a3d3,_0x2c8d00){_0xc0a3d3=_0xc0a3d3-0x0;var _0x3386e8=_0x8085[_0xc0a3d3];return _0x3386e8;};'use strict';var _=require(_0x5808('0x0'));var util=require(_0x5808('0x1'));var logger=require(_0x5808('0x2'))(_0x5808('0x3'));var moment=require(_0x5808('0x4'));var BPromise=require(_0x5808('0x5'));var rp=require(_0x5808('0x6'));var attributes=require(_0x5808('0x7'));module[_0x5808('0x8')]=function(_0x4d792e,_0x2b201a){return _0x4d792e['define'](_0x5808('0x9'),attributes,{'tableName':'chat_applications','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0e0c=['util','moment','bluebird','request-promise','./chatApplication.attributes','exports','define','ChatApplication','chat_applications','lodash'];(function(_0x4fa166,_0x58b7fb){var _0x5dd974=function(_0x342886){while(--_0x342886){_0x4fa166['push'](_0x4fa166['shift']());}};_0x5dd974(++_0x58b7fb);}(_0x0e0c,0x135));var _0xc0e0=function(_0x512a2a,_0x3f0b9c){_0x512a2a=_0x512a2a-0x0;var _0x19717f=_0x0e0c[_0x512a2a];return _0x19717f;};'use strict';var _=require(_0xc0e0('0x0'));var util=require(_0xc0e0('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xc0e0('0x2'));var BPromise=require(_0xc0e0('0x3'));var rp=require(_0xc0e0('0x4'));var attributes=require(_0xc0e0('0x5'));module[_0xc0e0('0x6')]=function(_0x5e596a,_0x48b257){return _0x5e596a[_0xc0e0('0x7')](_0xc0e0('0x8'),attributes,{'tableName':_0xc0e0('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 686cac1..b31469b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc5e6=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','request\x20sent','debug','ChatApplication,\x20%s,\x20%s,\x20%s','error','ChatApplication,\x20%s,\x20%s','message','info','result','catch','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils'];(function(_0x188c86,_0x2bf8ef){var _0xff6c14=function(_0x1ad99a){while(--_0x1ad99a){_0x188c86['push'](_0x188c86['shift']());}};_0xff6c14(++_0x2bf8ef);}(_0xc5e6,0x186));var _0x6c5e=function(_0x241424,_0x25eb5d){_0x241424=_0x241424-0x0;var _0x3da798=_0xc5e6[_0x241424];return _0x3da798;};'use strict';var _=require(_0x6c5e('0x0'));var util=require('util');var moment=require(_0x6c5e('0x1'));var BPromise=require(_0x6c5e('0x2'));var rs=require(_0x6c5e('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x6c5e('0x4'))['db'];var utils=require(_0x6c5e('0x5'));var logger=require(_0x6c5e('0x6'))(_0x6c5e('0x7'));var config=require(_0x6c5e('0x8'));var jayson=require(_0x6c5e('0x9'));var client=jayson[_0x6c5e('0xa')][_0x6c5e('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x2de46c,_0x256929,_0x530e84){return new BPromise(function(_0x5df12d,_0x4f78e7){return client['request'](_0x2de46c,_0x530e84)[_0x6c5e('0xc')](function(_0x5e897b){logger['info']('ChatApplication,\x20%s,\x20%s',_0x256929,_0x6c5e('0xd'));logger[_0x6c5e('0xe')](_0x6c5e('0xf'),_0x256929,_0x6c5e('0xd'),JSON['stringify'](_0x5e897b));if(_0x5e897b[_0x6c5e('0x10')]){if(_0x5e897b['error']['code']===0x1f4){logger[_0x6c5e('0x10')](_0x6c5e('0x11'),_0x256929,_0x5e897b[_0x6c5e('0x10')][_0x6c5e('0x12')]);return _0x4f78e7(_0x5e897b[_0x6c5e('0x10')][_0x6c5e('0x12')]);}logger['error'](_0x6c5e('0x11'),_0x256929,_0x5e897b[_0x6c5e('0x10')]['message']);return _0x5df12d(_0x5e897b[_0x6c5e('0x10')][_0x6c5e('0x12')]);}else{logger[_0x6c5e('0x13')](_0x6c5e('0x11'),_0x256929,'request\x20sent');_0x5df12d(_0x5e897b[_0x6c5e('0x14')]['message']);}})[_0x6c5e('0x15')](function(_0x227bd2){logger[_0x6c5e('0x10')](_0x6c5e('0x11'),_0x256929,_0x227bd2);_0x4f78e7(_0x227bd2);});});}
\ No newline at end of file
+var _0xf9fd=['util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','request\x20sent','debug','ChatApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message','ChatApplication,\x20%s,\x20%s','info','catch','lodash'];(function(_0x83e4db,_0x3450d8){var _0x34bb03=function(_0x578c83){while(--_0x578c83){_0x83e4db['push'](_0x83e4db['shift']());}};_0x34bb03(++_0x3450d8);}(_0xf9fd,0x14f));var _0xdf9f=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xf9fd[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0xdf9f('0x0'));var util=require(_0xdf9f('0x1'));var moment=require(_0xdf9f('0x2'));var BPromise=require(_0xdf9f('0x3'));var rs=require(_0xdf9f('0x4'));var fs=require('fs');var Redis=require(_0xdf9f('0x5'));var db=require(_0xdf9f('0x6'))['db'];var utils=require(_0xdf9f('0x7'));var logger=require(_0xdf9f('0x8'))(_0xdf9f('0x9'));var config=require(_0xdf9f('0xa'));var jayson=require(_0xdf9f('0xb'));var client=jayson['client'][_0xdf9f('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x281269,_0x1e3d1a,_0x43f735){return new BPromise(function(_0xe19f46,_0x2afdd2){return client[_0xdf9f('0xd')](_0x281269,_0x43f735)['then'](function(_0x182430){logger['info']('ChatApplication,\x20%s,\x20%s',_0x1e3d1a,_0xdf9f('0xe'));logger[_0xdf9f('0xf')](_0xdf9f('0x10'),_0x1e3d1a,'request\x20sent',JSON[_0xdf9f('0x11')](_0x182430));if(_0x182430[_0xdf9f('0x12')]){if(_0x182430[_0xdf9f('0x12')][_0xdf9f('0x13')]===0x1f4){logger[_0xdf9f('0x12')]('ChatApplication,\x20%s,\x20%s',_0x1e3d1a,_0x182430[_0xdf9f('0x12')][_0xdf9f('0x14')]);return _0x2afdd2(_0x182430[_0xdf9f('0x12')][_0xdf9f('0x14')]);}logger[_0xdf9f('0x12')](_0xdf9f('0x15'),_0x1e3d1a,_0x182430[_0xdf9f('0x12')][_0xdf9f('0x14')]);return _0xe19f46(_0x182430[_0xdf9f('0x12')]['message']);}else{logger[_0xdf9f('0x16')](_0xdf9f('0x15'),_0x1e3d1a,'request\x20sent');_0xe19f46(_0x182430['result']['message']);}})[_0xdf9f('0x17')](function(_0x51303f){logger['error'](_0xdf9f('0x15'),_0x1e3d1a,_0x51303f);_0x2afdd2(_0x51303f);});});}
\ No newline at end of file
index 57e91ea..19c429e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x19c0=['connect-timeout','../../components/auth/service','../../components/interaction/service','./chatApplication.controller','get','/:id','isAuthenticated','show','put','update','delete','destroy','exports','util'];(function(_0x479746,_0x574758){var _0x36d2aa=function(_0x27e29d){while(--_0x27e29d){_0x479746['push'](_0x479746['shift']());}};_0x36d2aa(++_0x574758);}(_0x19c0,0x133));var _0x019c=function(_0x1d1e94,_0x2eebc3){_0x1d1e94=_0x1d1e94-0x0;var _0x3c4162=_0x19c0[_0x1d1e94];return _0x3c4162;};'use strict';var multer=require('multer');var util=require(_0x019c('0x0'));var path=require('path');var timeout=require(_0x019c('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0x019c('0x2'));var interaction=require(_0x019c('0x3'));var config=require('../../config/environment');var controller=require(_0x019c('0x4'));router[_0x019c('0x5')](_0x019c('0x6'),auth[_0x019c('0x7')](),controller[_0x019c('0x8')]);router[_0x019c('0x9')](_0x019c('0x6'),auth[_0x019c('0x7')](),controller[_0x019c('0xa')]);router[_0x019c('0xb')]('/:id',auth[_0x019c('0x7')](),controller[_0x019c('0xc')]);module[_0x019c('0xd')]=router;
\ No newline at end of file
+var _0x4a5d=['isAuthenticated','put','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./chatApplication.controller','get','/:id'];(function(_0x19950b,_0x53d0d7){var _0x3c6b41=function(_0x3924ad){while(--_0x3924ad){_0x19950b['push'](_0x19950b['shift']());}};_0x3c6b41(++_0x53d0d7);}(_0x4a5d,0x145));var _0xd4a5=function(_0x34aec4,_0x3801da){_0x34aec4=_0x34aec4-0x0;var _0x51e1a7=_0x4a5d[_0x34aec4];return _0x51e1a7;};'use strict';var multer=require(_0xd4a5('0x0'));var util=require(_0xd4a5('0x1'));var path=require(_0xd4a5('0x2'));var timeout=require(_0xd4a5('0x3'));var express=require(_0xd4a5('0x4'));var router=express[_0xd4a5('0x5')]();var auth=require(_0xd4a5('0x6'));var interaction=require(_0xd4a5('0x7'));var config=require('../../config/environment');var controller=require(_0xd4a5('0x8'));router[_0xd4a5('0x9')](_0xd4a5('0xa'),auth[_0xd4a5('0xb')](),controller['show']);router[_0xd4a5('0xc')]('/:id',auth[_0xd4a5('0xb')](),controller['update']);router[_0xd4a5('0xd')](_0xd4a5('0xa'),auth[_0xd4a5('0xb')](),controller[_0xd4a5('0xe')]);module[_0xd4a5('0xf')]=router;
\ No newline at end of file
index 674dd0b..b805aec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xae1c=['STRING','BOOLEAN'];(function(_0x5d43f5,_0x8c9030){var _0x453144=function(_0x3d6f93){while(--_0x3d6f93){_0x5d43f5['push'](_0x5d43f5['shift']());}};_0x453144(++_0x8c9030);}(_0xae1c,0x78));var _0xcae1=function(_0x170bc7,_0x24250f){_0x170bc7=_0x170bc7-0x0;var _0x5be0bb=_0xae1c[_0x170bc7];return _0x5be0bb;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xcae1('0x0')],'allowNull':![]},'description':{'type':Sequelize[_0xcae1('0x0')]},'write':{'type':Sequelize[_0xcae1('0x1')],'defaultValue':!![]}};
\ No newline at end of file
+var _0x830c=['STRING','sequelize','exports'];(function(_0x2db029,_0xcbe0c7){var _0x28e2eb=function(_0x3e0927){while(--_0x3e0927){_0x2db029['push'](_0x2db029['shift']());}};_0x28e2eb(++_0xcbe0c7);}(_0x830c,0x178));var _0xc830=function(_0x7fca1f,_0x473f71){_0x7fca1f=_0x7fca1f-0x0;var _0x1ca49a=_0x830c[_0x7fca1f];return _0x1ca49a;};'use strict';var Sequelize=require(_0xc830('0x0'));module[_0xc830('0x1')]={'name':{'type':Sequelize[_0xc830('0x2')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'write':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
index 90bfd09..8bdb7c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0cf5=['fields','length','hasOwnProperty','nolimit','limit','sort','pick','filter','merge','where','map','type','key','VIRTUAL','field','options','ChatGroup','includeAll','include','findAll','rows','show','params','create','body','find','describe','getUnread','ChatInternalMessage','user','ids','getMembers','findOne','order','removeMembers','addMessage','ChatGroupId','getMessages','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','defaults','socket.io-emitter','redis','./chatGroup.socket','register','client','http','request','info','request\x20sent','debug','ChatGroup,\x20%s,\x20%s,\x20%s','error','ChatGroup,\x20%s,\x20%s','message','catch','status','end','count','offset','set','Content-Range','json','apply','reject','save','update','then','destroy','name','send','rawAttributes','model','keys','query','filters','intersection','attributes'];(function(_0x1f20ef,_0x53f040){var _0x1b1a1f=function(_0x3c8d9d){while(--_0x3c8d9d){_0x1f20ef['push'](_0x1f20ef['shift']());}};_0x1b1a1f(++_0x53f040);}(_0x0cf5,0x94));var _0x50cf=function(_0x2530da,_0x3cc048){_0x2530da=_0x2530da-0x0;var _0x3e525d=_0x0cf5[_0x2530da];return _0x3e525d;};'use strict';var pdf=require(_0x50cf('0x0'));var emlformat=require(_0x50cf('0x1'));var rimraf=require(_0x50cf('0x2'));var zipdir=require(_0x50cf('0x3'));var jsonpatch=require(_0x50cf('0x4'));var rp=require(_0x50cf('0x5'));var moment=require('moment');var BPromise=require(_0x50cf('0x6'));var Mustache=require('mustache');var util=require(_0x50cf('0x7'));var path=require(_0x50cf('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x50cf('0x9'));var fs=require('fs');var _=require(_0x50cf('0xa'));var squel=require(_0x50cf('0xb'));var crypto=require(_0x50cf('0xc'));var jsforce=require(_0x50cf('0xd'));var deskjs=require(_0x50cf('0xe'));var toCsv=require(_0x50cf('0xf'));var querystring=require('querystring');var Papa=require(_0x50cf('0x10'));var authService=require(_0x50cf('0x11'));var hardwareService=require(_0x50cf('0x12'));var Redis=require(_0x50cf('0x13'));var qs=require(_0x50cf('0x14'));var logger=require(_0x50cf('0x15'))(_0x50cf('0x16'));var utils=require(_0x50cf('0x17'));var config=require(_0x50cf('0x18'));var db=require(_0x50cf('0x19'))['db'];config['redis']=_[_0x50cf('0x1a')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x50cf('0x1b'))(new Redis(config[_0x50cf('0x1c')]));require(_0x50cf('0x1d'))[_0x50cf('0x1e')](socket);var jayson=require('jayson/promise');var client=jayson[_0x50cf('0x1f')][_0x50cf('0x20')]({'port':0x232a});function respondWithRpcPromise(_0x4b1b90,_0x5e996f,_0x1e13a7,_0x3f068e){return new BPromise(function(_0x1397c2,_0x16aded){var _0x444df0=_0x3f068e||client;return _0x444df0[_0x50cf('0x21')](_0x4b1b90,_0x1e13a7)['then'](function(_0x5c914e){logger[_0x50cf('0x22')]('ChatGroup,\x20%s,\x20%s',_0x5e996f,_0x50cf('0x23'));logger[_0x50cf('0x24')](_0x50cf('0x25'),_0x5e996f,_0x50cf('0x23'),JSON['stringify'](_0x5c914e));if(_0x5c914e[_0x50cf('0x26')]){if(_0x5c914e[_0x50cf('0x26')]['code']===0x1f4){logger['error'](_0x50cf('0x27'),_0x5e996f,_0x5c914e[_0x50cf('0x26')][_0x50cf('0x28')]);return _0x16aded(_0x5c914e[_0x50cf('0x26')]['message']);}logger[_0x50cf('0x26')](_0x50cf('0x27'),_0x5e996f,_0x5c914e[_0x50cf('0x26')][_0x50cf('0x28')]);return _0x1397c2(_0x5c914e[_0x50cf('0x26')]['message']);}else{logger[_0x50cf('0x22')](_0x50cf('0x27'),_0x5e996f,_0x50cf('0x23'));_0x1397c2(_0x5c914e['result'][_0x50cf('0x28')]);}})[_0x50cf('0x29')](function(_0x1a7e8c){logger[_0x50cf('0x26')](_0x50cf('0x27'),_0x5e996f,_0x1a7e8c);_0x16aded(_0x1a7e8c);});});}function respondWithStatusCode(_0x445573,_0x290dcf){_0x290dcf=_0x290dcf||0xcc;return function(_0x5d527d){if(_0x5d527d){return _0x445573['sendStatus'](_0x290dcf);}return _0x445573[_0x50cf('0x2a')](_0x290dcf)[_0x50cf('0x2b')]();};}function respondWithResult(_0x12c425,_0x3b4d96){_0x3b4d96=_0x3b4d96||0xc8;return function(_0x3274fe){if(_0x3274fe){return _0x12c425['status'](_0x3b4d96)['json'](_0x3274fe);}};}function respondWithFilteredResult(_0x18700a,_0x1d3a20){return function(_0x4a3d42){if(_0x4a3d42){var _0x4fa2f7=_0x4a3d42[_0x50cf('0x2c')],_0x5f79ae=_0x1d3a20[_0x50cf('0x2d')],_0x506815=_0x1d3a20[_0x50cf('0x2d')]+_0x1d3a20['limit'],_0x44905c;if(_0x506815>=_0x4fa2f7){_0x506815=_0x4fa2f7;_0x44905c=0xc8;}else{_0x44905c=0xce;}_0x18700a[_0x50cf('0x2a')](_0x44905c);return _0x18700a[_0x50cf('0x2e')](_0x50cf('0x2f'),_0x5f79ae+'-'+_0x506815+'/'+_0x4fa2f7)[_0x50cf('0x30')](_0x4a3d42);}return null;};}function patchUpdates(_0x4db3dd){return function(_0x302545){try{jsonpatch[_0x50cf('0x31')](_0x302545,_0x4db3dd,!![]);}catch(_0x58f36e){return BPromise[_0x50cf('0x32')](_0x58f36e);}return _0x302545[_0x50cf('0x33')]();};}function saveUpdates(_0x257d73,_0x409fb4){return function(_0x1be32e){if(_0x1be32e){return _0x1be32e[_0x50cf('0x34')](_0x257d73)[_0x50cf('0x35')](function(_0x471862){return _0x471862;});}return null;};}function removeEntity(_0x40acdd,_0x307ccc){return function(_0x4303b4){if(_0x4303b4){return _0x4303b4[_0x50cf('0x36')]()[_0x50cf('0x35')](function(){_0x40acdd['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x489a62,_0x1cff7e){return function(_0x511875){if(!_0x511875){_0x489a62['sendStatus'](0x194);}return _0x511875;};}function handleError(_0x5b5bf0,_0x3ac9cb){_0x3ac9cb=_0x3ac9cb||0x1f4;return function(_0x57a2ba){logger[_0x50cf('0x26')](_0x57a2ba['stack']);if(_0x57a2ba['name']){delete _0x57a2ba[_0x50cf('0x37')];}_0x5b5bf0['status'](_0x3ac9cb)[_0x50cf('0x38')](_0x57a2ba);};}exports['index']=function(_0x23a027,_0x401d8d){var _0x2eb232={},_0x366706={},_0x3168e4={'count':0x0,'rows':[]};var _0x2ce81a=db['ChatGroup'][_0x50cf('0x39')];_0x366706[_0x50cf('0x3a')]=_[_0x50cf('0x3b')](_0x2ce81a);_0x366706[_0x50cf('0x3c')]=_['keys'](_0x23a027[_0x50cf('0x3c')]);_0x366706[_0x50cf('0x3d')]=_[_0x50cf('0x3e')](_0x366706[_0x50cf('0x3a')],_0x366706['query']);_0x2eb232[_0x50cf('0x3f')]=_[_0x50cf('0x3e')](_0x366706[_0x50cf('0x3a')],qs[_0x50cf('0x40')](_0x23a027['query'][_0x50cf('0x40')]));_0x2eb232['attributes']=_0x2eb232[_0x50cf('0x3f')][_0x50cf('0x41')]?_0x2eb232[_0x50cf('0x3f')]:_0x366706[_0x50cf('0x3a')];if(!_0x23a027[_0x50cf('0x3c')][_0x50cf('0x42')](_0x50cf('0x43'))){_0x2eb232[_0x50cf('0x44')]=qs[_0x50cf('0x44')](_0x23a027[_0x50cf('0x3c')]['limit']);_0x2eb232[_0x50cf('0x2d')]=qs[_0x50cf('0x2d')](_0x23a027[_0x50cf('0x3c')]['offset']);}_0x2eb232['order']=qs['sort'](_0x23a027[_0x50cf('0x3c')][_0x50cf('0x45')]);_0x2eb232['where']=qs[_0x50cf('0x3d')](_[_0x50cf('0x46')](_0x23a027['query'],_0x366706[_0x50cf('0x3d')]));if(_0x23a027[_0x50cf('0x3c')][_0x50cf('0x47')]){_0x2eb232['where']=_[_0x50cf('0x48')](_0x2eb232[_0x50cf('0x49')],{'$or':_[_0x50cf('0x4a')](_0x2ce81a,function(_0x4adfd5){if(_0x4adfd5[_0x50cf('0x4b')][_0x50cf('0x4c')]!==_0x50cf('0x4d')){var _0x4d3577={};_0x4d3577[_0x4adfd5[_0x50cf('0x4e')]]={'$like':'%'+_0x23a027[_0x50cf('0x3c')]['filter']+'%'};return _0x4d3577;}})});}_0x2eb232=_[_0x50cf('0x48')]({},_0x2eb232,_0x23a027[_0x50cf('0x4f')]);var _0x595ec6={'where':_0x2eb232[_0x50cf('0x49')]};return db[_0x50cf('0x50')][_0x50cf('0x2c')](_0x595ec6)[_0x50cf('0x35')](function(_0x29d216){_0x3168e4[_0x50cf('0x2c')]=_0x29d216;if(_0x23a027[_0x50cf('0x3c')][_0x50cf('0x51')]){_0x2eb232[_0x50cf('0x52')]=[{'all':!![]}];}return db[_0x50cf('0x50')][_0x50cf('0x53')](_0x2eb232);})['then'](function(_0x3f82e0){_0x3168e4[_0x50cf('0x54')]=_0x3f82e0;return _0x3168e4;})[_0x50cf('0x35')](respondWithFilteredResult(_0x401d8d,_0x2eb232))[_0x50cf('0x29')](handleError(_0x401d8d,null));};exports[_0x50cf('0x55')]=function(_0xe3539d,_0xa23501){var _0x1fc99c={'raw':!![],'where':{'id':_0xe3539d[_0x50cf('0x56')]['id']}},_0x543c21={};_0x543c21['model']=_[_0x50cf('0x3b')](db[_0x50cf('0x50')][_0x50cf('0x39')]);_0x543c21['query']=_['keys'](_0xe3539d[_0x50cf('0x3c')]);_0x543c21[_0x50cf('0x3d')]=_[_0x50cf('0x3e')](_0x543c21[_0x50cf('0x3a')],_0x543c21[_0x50cf('0x3c')]);_0x1fc99c[_0x50cf('0x3f')]=_[_0x50cf('0x3e')](_0x543c21['model'],qs[_0x50cf('0x40')](_0xe3539d[_0x50cf('0x3c')]['fields']));_0x1fc99c[_0x50cf('0x3f')]=_0x1fc99c[_0x50cf('0x3f')][_0x50cf('0x41')]?_0x1fc99c[_0x50cf('0x3f')]:_0x543c21[_0x50cf('0x3a')];if(_0xe3539d[_0x50cf('0x3c')][_0x50cf('0x51')]){_0x1fc99c[_0x50cf('0x52')]=[{'all':!![]}];}_0x1fc99c=_[_0x50cf('0x48')]({},_0x1fc99c,_0xe3539d['options']);return db['ChatGroup']['find'](_0x1fc99c)[_0x50cf('0x35')](handleEntityNotFound(_0xa23501,null))[_0x50cf('0x35')](respondWithResult(_0xa23501,null))[_0x50cf('0x29')](handleError(_0xa23501,null));};exports['create']=function(_0x5d1aaa,_0x46072c){return db['ChatGroup'][_0x50cf('0x57')](_0x5d1aaa[_0x50cf('0x58')],{})[_0x50cf('0x35')](respondWithResult(_0x46072c,0xc9))['catch'](handleError(_0x46072c,null));};exports[_0x50cf('0x34')]=function(_0x4d5979,_0x426015){if(_0x4d5979[_0x50cf('0x58')]['id']){delete _0x4d5979[_0x50cf('0x58')]['id'];}return db['ChatGroup'][_0x50cf('0x59')]({'where':{'id':_0x4d5979[_0x50cf('0x56')]['id']}})[_0x50cf('0x35')](handleEntityNotFound(_0x426015,null))[_0x50cf('0x35')](saveUpdates(_0x4d5979['body'],null))[_0x50cf('0x35')](respondWithResult(_0x426015,null))['catch'](handleError(_0x426015,null));};exports[_0x50cf('0x36')]=function(_0x2dee46,_0x47d1a9){return db[_0x50cf('0x50')][_0x50cf('0x59')]({'where':{'id':_0x2dee46['params']['id']}})[_0x50cf('0x35')](handleEntityNotFound(_0x47d1a9,null))['then'](removeEntity(_0x47d1a9,null))[_0x50cf('0x29')](handleError(_0x47d1a9,null));};exports[_0x50cf('0x5a')]=function(_0x2558d6,_0x3f11d6){return db['ChatGroup'][_0x50cf('0x5a')]()['then'](respondWithResult(_0x3f11d6,null))['catch'](handleError(_0x3f11d6,null));};exports[_0x50cf('0x5b')]=function(_0x37ede2,_0xf84701,_0x4c3e43){return db[_0x50cf('0x5c')]['count']({'where':{'ChatGroupId':_0x37ede2[_0x50cf('0x56')]['id'],'ToId':_0x37ede2[_0x50cf('0x5d')]['id'],'read':![]}})['then'](function(_0x45e21f){return{'id':_['toInteger'](_0x37ede2[_0x50cf('0x56')]['id']),'count':_0x45e21f};})[_0x50cf('0x35')](respondWithResult(_0xf84701,null))['catch'](handleError(_0xf84701,null));};exports['addMembers']=function(_0x355d6e,_0x254752,_0x3bb11d){return db[_0x50cf('0x50')][_0x50cf('0x59')]({'where':{'id':_0x355d6e[_0x50cf('0x56')]['id']}})[_0x50cf('0x35')](handleEntityNotFound(_0x254752,null))[_0x50cf('0x35')](function(_0x25ffe2){if(_0x25ffe2){return _0x25ffe2['addMembers'](_0x355d6e['body'][_0x50cf('0x5e')],_['omit'](_0x355d6e[_0x50cf('0x58')],['ids','id'])||{});}})['then'](respondWithResult(_0x254752,null))[_0x50cf('0x29')](handleError(_0x254752,null));};exports[_0x50cf('0x5f')]=function(_0x5b0ce8,_0x2e3f24,_0x33142d){var _0x312621={};var _0x300437={};var _0x22973b;var _0x576228;return db['ChatGroup'][_0x50cf('0x60')]({'where':{'id':_0x5b0ce8[_0x50cf('0x56')]['id']}})[_0x50cf('0x35')](handleEntityNotFound(_0x2e3f24,null))['then'](function(_0x92e8ec){if(_0x92e8ec){_0x22973b=_0x92e8ec;_0x300437[_0x50cf('0x3a')]=_[_0x50cf('0x3b')](db['User'][_0x50cf('0x39')]);_0x300437[_0x50cf('0x3c')]=_[_0x50cf('0x3b')](_0x5b0ce8[_0x50cf('0x3c')]);_0x300437[_0x50cf('0x3d')]=_[_0x50cf('0x3e')](_0x300437[_0x50cf('0x3a')],_0x300437[_0x50cf('0x3c')]);_0x312621['attributes']=_['intersection'](_0x300437[_0x50cf('0x3a')],qs[_0x50cf('0x40')](_0x5b0ce8['query'][_0x50cf('0x40')]));_0x312621[_0x50cf('0x3f')]=_0x312621[_0x50cf('0x3f')][_0x50cf('0x41')]?_0x312621[_0x50cf('0x3f')]:_0x300437['model'];_0x312621[_0x50cf('0x61')]=qs[_0x50cf('0x45')](_0x5b0ce8[_0x50cf('0x3c')][_0x50cf('0x45')]);_0x312621['where']=qs[_0x50cf('0x3d')](_['pick'](_0x5b0ce8[_0x50cf('0x3c')],_0x300437[_0x50cf('0x3d')]));if(_0x5b0ce8[_0x50cf('0x3c')]['filter']){_0x312621[_0x50cf('0x49')]=_[_0x50cf('0x48')](_0x312621[_0x50cf('0x49')],{'$or':_[_0x50cf('0x4a')](_0x312621[_0x50cf('0x3f')],function(_0x12f19e){var _0x2672bc={};_0x2672bc[_0x12f19e]={'$like':'%'+_0x5b0ce8['query'][_0x50cf('0x47')]+'%'};return _0x2672bc;})});}_0x312621=_[_0x50cf('0x48')]({},_0x312621,_0x5b0ce8[_0x50cf('0x4f')]);return _0x22973b[_0x50cf('0x5f')](_0x312621);}})[_0x50cf('0x35')](function(_0x53065e){if(_0x53065e){_0x576228=_0x53065e[_0x50cf('0x41')];if(!_0x5b0ce8[_0x50cf('0x3c')][_0x50cf('0x42')](_0x50cf('0x43'))){_0x312621['limit']=qs[_0x50cf('0x44')](_0x5b0ce8[_0x50cf('0x3c')][_0x50cf('0x44')]);_0x312621['offset']=qs[_0x50cf('0x2d')](_0x5b0ce8[_0x50cf('0x3c')][_0x50cf('0x2d')]);}return _0x22973b['getMembers'](_0x312621);}})[_0x50cf('0x35')](function(_0x344a25){if(_0x344a25){return _0x344a25?{'count':_0x576228,'rows':_0x344a25}:null;}})['then'](respondWithResult(_0x2e3f24,null))['catch'](handleError(_0x2e3f24,null));};exports[_0x50cf('0x62')]=function(_0x45f3b6,_0x1316e0,_0x3c1ec2){var _0x23f954;return db[_0x50cf('0x50')][_0x50cf('0x59')]({'where':{'id':_0x45f3b6[_0x50cf('0x56')]['id']}})[_0x50cf('0x35')](handleEntityNotFound(_0x1316e0,null))[_0x50cf('0x35')](function(_0x362fe7){if(_0x362fe7){return _0x362fe7[_0x50cf('0x62')](_0x45f3b6['query'][_0x50cf('0x5e')]);}})[_0x50cf('0x35')](respondWithStatusCode(_0x1316e0,null))[_0x50cf('0x29')](handleError(_0x1316e0,null));};exports[_0x50cf('0x63')]=function(_0x1ce96e,_0x5bac32,_0x4e55b7){if(_0x1ce96e[_0x50cf('0x58')]['id']){delete _0x1ce96e[_0x50cf('0x58')]['id'];}return db[_0x50cf('0x50')][_0x50cf('0x59')]({'where':{'id':_0x1ce96e['params']['id']}})['then'](handleEntityNotFound(_0x5bac32,null))['then'](function(_0x18ff50){if(_0x18ff50){_0x1ce96e[_0x50cf('0x58')][_0x50cf('0x64')]=_0x18ff50['id'];return db[_0x50cf('0x5c')][_0x50cf('0x57')](_0x1ce96e[_0x50cf('0x58')]);}})[_0x50cf('0x35')](respondWithResult(_0x5bac32,null))[_0x50cf('0x29')](handleError(_0x5bac32,null));};exports[_0x50cf('0x65')]=function(_0x509cde,_0x50b57a,_0x5e7af0){var _0x354a33={};var _0x2c0ab7={};var _0x2cea30;var _0x9901fc;return db['ChatGroup'][_0x50cf('0x60')]({'where':{'id':_0x509cde['params']['id']}})[_0x50cf('0x35')](handleEntityNotFound(_0x50b57a,null))[_0x50cf('0x35')](function(_0x780b35){if(_0x780b35){_0x2cea30=_0x780b35;_0x2c0ab7[_0x50cf('0x3a')]=_[_0x50cf('0x3b')](db[_0x50cf('0x5c')][_0x50cf('0x39')]);_0x2c0ab7[_0x50cf('0x3c')]=_[_0x50cf('0x3b')](_0x509cde['query']);_0x2c0ab7['filters']=_[_0x50cf('0x3e')](_0x2c0ab7['model'],_0x2c0ab7['query']);_0x354a33[_0x50cf('0x3f')]=_[_0x50cf('0x3e')](_0x2c0ab7[_0x50cf('0x3a')],qs['fields'](_0x509cde[_0x50cf('0x3c')]['fields']));_0x354a33[_0x50cf('0x3f')]=_0x354a33[_0x50cf('0x3f')][_0x50cf('0x41')]?_0x354a33['attributes']:_0x2c0ab7[_0x50cf('0x3a')];_0x354a33['order']=qs[_0x50cf('0x45')](_0x509cde[_0x50cf('0x3c')]['sort']);_0x354a33['where']=qs[_0x50cf('0x3d')](_[_0x50cf('0x46')](_0x509cde['query'],_0x2c0ab7[_0x50cf('0x3d')]));if(_0x509cde['query'][_0x50cf('0x47')]){_0x354a33[_0x50cf('0x49')]=_[_0x50cf('0x48')](_0x354a33[_0x50cf('0x49')],{'$or':_[_0x50cf('0x4a')](_0x354a33[_0x50cf('0x3f')],function(_0x4d0afe){var _0x5ac12e={};_0x5ac12e[_0x4d0afe]={'$like':'%'+_0x509cde[_0x50cf('0x3c')]['filter']+'%'};return _0x5ac12e;})});}if(_0x509cde[_0x50cf('0x3c')][_0x50cf('0x66')]){var _0x24883b=_0x509cde['query'][_0x50cf('0x66')][_0x50cf('0x67')](',');var _0x4a6d5e={};_0x4a6d5e[_0x24883b[0x0]]={'$gte':moment(_0x24883b[0x1])[_0x50cf('0x68')](_0x50cf('0x69'))};_0x354a33[_0x50cf('0x49')]=_[_0x50cf('0x48')](_0x354a33[_0x50cf('0x49')],_0x4a6d5e);}_0x354a33=_[_0x50cf('0x48')]({},_0x354a33,_0x509cde[_0x50cf('0x4f')]);return _0x2cea30[_0x50cf('0x65')](_0x354a33);}})[_0x50cf('0x35')](function(_0x2552fc){if(_0x2552fc){_0x9901fc=_0x2552fc[_0x50cf('0x41')];if(!_0x509cde[_0x50cf('0x3c')]['hasOwnProperty']('nolimit')){_0x354a33[_0x50cf('0x44')]=qs[_0x50cf('0x44')](_0x509cde[_0x50cf('0x3c')][_0x50cf('0x44')]);_0x354a33[_0x50cf('0x2d')]=qs[_0x50cf('0x2d')](_0x509cde[_0x50cf('0x3c')]['offset']);}return _0x2cea30[_0x50cf('0x65')](_0x354a33);}})[_0x50cf('0x35')](function(_0x20d594){if(_0x20d594){return _0x20d594?{'count':_0x9901fc,'rows':_0x20d594}:null;}})[_0x50cf('0x35')](respondWithResult(_0x50b57a,null))['catch'](handleError(_0x50b57a,null));};
\ No newline at end of file
+var _0x644c=['message','info','result','catch','sendStatus','status','end','json','count','offset','limit','set','apply','save','update','then','stack','name','send','index','ChatGroup','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','order','sort','pick','filter','merge','where','map','key','VIRTUAL','field','include','findAll','rows','show','includeAll','find','create','body','destroy','params','describe','getUnread','ChatInternalMessage','user','toInteger','addMembers','ids','omit','getMembers','findOne','options','hasOwnProperty','removeMembers','ChatGroupId','getMessages','$gte','YYYY-MM-DD\x20HH:mm:ss','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','squel','jsforce','querystring','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','socket.io-emitter','./chatGroup.socket','jayson/promise','client','http','request','ChatGroup,\x20%s,\x20%s','debug','ChatGroup,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x511de1,_0x5c669c){var _0x3a5261=function(_0x9c02e7){while(--_0x9c02e7){_0x511de1['push'](_0x511de1['shift']());}};_0x3a5261(++_0x5c669c);}(_0x644c,0x17c));var _0xc644=function(_0x5b803b,_0x1d0489){_0x5b803b=_0x5b803b-0x0;var _0xf7731=_0x644c[_0x5b803b];return _0xf7731;};'use strict';var pdf=require(_0xc644('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xc644('0x1'));var jsonpatch=require(_0xc644('0x2'));var rp=require(_0xc644('0x3'));var moment=require(_0xc644('0x4'));var BPromise=require(_0xc644('0x5'));var Mustache=require('mustache');var util=require(_0xc644('0x6'));var path=require(_0xc644('0x7'));var sox=require(_0xc644('0x8'));var csv=require(_0xc644('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xc644('0xa'));var squel=require(_0xc644('0xb'));var crypto=require('crypto');var jsforce=require(_0xc644('0xc'));var deskjs=require('desk.js');var toCsv=require(_0xc644('0x9'));var querystring=require(_0xc644('0xd'));var Papa=require('papaparse');var authService=require(_0xc644('0xe'));var hardwareService=require(_0xc644('0xf'));var Redis=require('ioredis');var qs=require(_0xc644('0x10'));var logger=require('../../config/logger')(_0xc644('0x11'));var utils=require(_0xc644('0x12'));var config=require(_0xc644('0x13'));var db=require(_0xc644('0x14'))['db'];config['redis']=_[_0xc644('0x15')](config[_0xc644('0x16')],{'host':'localhost','port':0x18eb});var socket=require(_0xc644('0x17'))(new Redis(config[_0xc644('0x16')]));require(_0xc644('0x18'))['register'](socket);var jayson=require(_0xc644('0x19'));var client=jayson[_0xc644('0x1a')][_0xc644('0x1b')]({'port':0x232a});function respondWithRpcPromise(_0x1a6ffa,_0x57e56f,_0x58ebf0,_0x1bc63b){return new BPromise(function(_0x567f8b,_0x436d69){var _0x1a0fbf=_0x1bc63b||client;return _0x1a0fbf[_0xc644('0x1c')](_0x1a6ffa,_0x58ebf0)['then'](function(_0x4e0ea5){logger['info'](_0xc644('0x1d'),_0x57e56f,'request\x20sent');logger[_0xc644('0x1e')](_0xc644('0x1f'),_0x57e56f,_0xc644('0x20'),JSON[_0xc644('0x21')](_0x4e0ea5));if(_0x4e0ea5[_0xc644('0x22')]){if(_0x4e0ea5[_0xc644('0x22')][_0xc644('0x23')]===0x1f4){logger[_0xc644('0x22')](_0xc644('0x1d'),_0x57e56f,_0x4e0ea5['error'][_0xc644('0x24')]);return _0x436d69(_0x4e0ea5[_0xc644('0x22')][_0xc644('0x24')]);}logger['error'](_0xc644('0x1d'),_0x57e56f,_0x4e0ea5[_0xc644('0x22')][_0xc644('0x24')]);return _0x567f8b(_0x4e0ea5['error']['message']);}else{logger[_0xc644('0x25')](_0xc644('0x1d'),_0x57e56f,_0xc644('0x20'));_0x567f8b(_0x4e0ea5[_0xc644('0x26')][_0xc644('0x24')]);}})[_0xc644('0x27')](function(_0xb2737f){logger['error']('ChatGroup,\x20%s,\x20%s',_0x57e56f,_0xb2737f);_0x436d69(_0xb2737f);});});}function respondWithStatusCode(_0xa604fa,_0x42ab34){_0x42ab34=_0x42ab34||0xcc;return function(_0x8b84e3){if(_0x8b84e3){return _0xa604fa[_0xc644('0x28')](_0x42ab34);}return _0xa604fa[_0xc644('0x29')](_0x42ab34)[_0xc644('0x2a')]();};}function respondWithResult(_0x328bac,_0x10c56c){_0x10c56c=_0x10c56c||0xc8;return function(_0x37f3a9){if(_0x37f3a9){return _0x328bac[_0xc644('0x29')](_0x10c56c)[_0xc644('0x2b')](_0x37f3a9);}};}function respondWithFilteredResult(_0x2a76e7,_0x8cd2dc){return function(_0x538c0c){if(_0x538c0c){var _0xf2d45b=_0x538c0c[_0xc644('0x2c')],_0x46b199=_0x8cd2dc[_0xc644('0x2d')],_0x3e8eba=_0x8cd2dc[_0xc644('0x2d')]+_0x8cd2dc[_0xc644('0x2e')],_0x47e5d2;if(_0x3e8eba>=_0xf2d45b){_0x3e8eba=_0xf2d45b;_0x47e5d2=0xc8;}else{_0x47e5d2=0xce;}_0x2a76e7[_0xc644('0x29')](_0x47e5d2);return _0x2a76e7[_0xc644('0x2f')]('Content-Range',_0x46b199+'-'+_0x3e8eba+'/'+_0xf2d45b)[_0xc644('0x2b')](_0x538c0c);}return null;};}function patchUpdates(_0x138df0){return function(_0xd7eae7){try{jsonpatch[_0xc644('0x30')](_0xd7eae7,_0x138df0,!![]);}catch(_0x596aff){return BPromise['reject'](_0x596aff);}return _0xd7eae7[_0xc644('0x31')]();};}function saveUpdates(_0x52f938,_0xc6d408){return function(_0x4893fa){if(_0x4893fa){return _0x4893fa[_0xc644('0x32')](_0x52f938)[_0xc644('0x33')](function(_0x27aec7){return _0x27aec7;});}return null;};}function removeEntity(_0x88cd0f,_0x56602c){return function(_0x182097){if(_0x182097){return _0x182097['destroy']()[_0xc644('0x33')](function(){_0x88cd0f['status'](0xcc)[_0xc644('0x2a')]();});}};}function handleEntityNotFound(_0x1cd1b3,_0x426d9d){return function(_0x16cc85){if(!_0x16cc85){_0x1cd1b3['sendStatus'](0x194);}return _0x16cc85;};}function handleError(_0x2bb368,_0x55c9a1){_0x55c9a1=_0x55c9a1||0x1f4;return function(_0x13503c){logger[_0xc644('0x22')](_0x13503c[_0xc644('0x34')]);if(_0x13503c[_0xc644('0x35')]){delete _0x13503c[_0xc644('0x35')];}_0x2bb368[_0xc644('0x29')](_0x55c9a1)[_0xc644('0x36')](_0x13503c);};}exports[_0xc644('0x37')]=function(_0x5ac5ad,_0x13fdb2){var _0xe07bde={},_0x5b1d94={},_0x4e8ea8={'count':0x0,'rows':[]};var _0xa49075=db[_0xc644('0x38')][_0xc644('0x39')];_0x5b1d94[_0xc644('0x3a')]=_[_0xc644('0x3b')](_0xa49075);_0x5b1d94['query']=_[_0xc644('0x3b')](_0x5ac5ad[_0xc644('0x3c')]);_0x5b1d94[_0xc644('0x3d')]=_[_0xc644('0x3e')](_0x5b1d94['model'],_0x5b1d94[_0xc644('0x3c')]);_0xe07bde['attributes']=_['intersection'](_0x5b1d94[_0xc644('0x3a')],qs[_0xc644('0x3f')](_0x5ac5ad[_0xc644('0x3c')][_0xc644('0x3f')]));_0xe07bde[_0xc644('0x40')]=_0xe07bde['attributes'][_0xc644('0x41')]?_0xe07bde[_0xc644('0x40')]:_0x5b1d94[_0xc644('0x3a')];if(!_0x5ac5ad[_0xc644('0x3c')]['hasOwnProperty'](_0xc644('0x42'))){_0xe07bde[_0xc644('0x2e')]=qs['limit'](_0x5ac5ad[_0xc644('0x3c')]['limit']);_0xe07bde[_0xc644('0x2d')]=qs[_0xc644('0x2d')](_0x5ac5ad[_0xc644('0x3c')][_0xc644('0x2d')]);}_0xe07bde[_0xc644('0x43')]=qs[_0xc644('0x44')](_0x5ac5ad[_0xc644('0x3c')][_0xc644('0x44')]);_0xe07bde['where']=qs[_0xc644('0x3d')](_[_0xc644('0x45')](_0x5ac5ad['query'],_0x5b1d94['filters']));if(_0x5ac5ad[_0xc644('0x3c')][_0xc644('0x46')]){_0xe07bde['where']=_[_0xc644('0x47')](_0xe07bde[_0xc644('0x48')],{'$or':_[_0xc644('0x49')](_0xa49075,function(_0x3ea98a){if(_0x3ea98a['type'][_0xc644('0x4a')]!==_0xc644('0x4b')){var _0x24c4b4={};_0x24c4b4[_0x3ea98a[_0xc644('0x4c')]]={'$like':'%'+_0x5ac5ad['query']['filter']+'%'};return _0x24c4b4;}})});}_0xe07bde=_[_0xc644('0x47')]({},_0xe07bde,_0x5ac5ad['options']);var _0x2880c0={'where':_0xe07bde[_0xc644('0x48')]};return db['ChatGroup']['count'](_0x2880c0)[_0xc644('0x33')](function(_0x3e8ae1){_0x4e8ea8[_0xc644('0x2c')]=_0x3e8ae1;if(_0x5ac5ad[_0xc644('0x3c')]['includeAll']){_0xe07bde[_0xc644('0x4d')]=[{'all':!![]}];}return db[_0xc644('0x38')][_0xc644('0x4e')](_0xe07bde);})[_0xc644('0x33')](function(_0x49ff64){_0x4e8ea8[_0xc644('0x4f')]=_0x49ff64;return _0x4e8ea8;})['then'](respondWithFilteredResult(_0x13fdb2,_0xe07bde))[_0xc644('0x27')](handleError(_0x13fdb2,null));};exports[_0xc644('0x50')]=function(_0x1a2af7,_0x3e58df){var _0x5e3b4f={'raw':!![],'where':{'id':_0x1a2af7['params']['id']}},_0x4ea4ac={};_0x4ea4ac[_0xc644('0x3a')]=_['keys'](db[_0xc644('0x38')][_0xc644('0x39')]);_0x4ea4ac['query']=_[_0xc644('0x3b')](_0x1a2af7[_0xc644('0x3c')]);_0x4ea4ac['filters']=_[_0xc644('0x3e')](_0x4ea4ac[_0xc644('0x3a')],_0x4ea4ac[_0xc644('0x3c')]);_0x5e3b4f['attributes']=_[_0xc644('0x3e')](_0x4ea4ac[_0xc644('0x3a')],qs[_0xc644('0x3f')](_0x1a2af7[_0xc644('0x3c')][_0xc644('0x3f')]));_0x5e3b4f[_0xc644('0x40')]=_0x5e3b4f[_0xc644('0x40')][_0xc644('0x41')]?_0x5e3b4f[_0xc644('0x40')]:_0x4ea4ac[_0xc644('0x3a')];if(_0x1a2af7[_0xc644('0x3c')][_0xc644('0x51')]){_0x5e3b4f[_0xc644('0x4d')]=[{'all':!![]}];}_0x5e3b4f=_[_0xc644('0x47')]({},_0x5e3b4f,_0x1a2af7['options']);return db[_0xc644('0x38')][_0xc644('0x52')](_0x5e3b4f)[_0xc644('0x33')](handleEntityNotFound(_0x3e58df,null))[_0xc644('0x33')](respondWithResult(_0x3e58df,null))[_0xc644('0x27')](handleError(_0x3e58df,null));};exports[_0xc644('0x53')]=function(_0x4c147e,_0x1c4af0){return db[_0xc644('0x38')][_0xc644('0x53')](_0x4c147e[_0xc644('0x54')],{})[_0xc644('0x33')](respondWithResult(_0x1c4af0,0xc9))[_0xc644('0x27')](handleError(_0x1c4af0,null));};exports[_0xc644('0x32')]=function(_0x1424fb,_0x4774e5){if(_0x1424fb['body']['id']){delete _0x1424fb[_0xc644('0x54')]['id'];}return db[_0xc644('0x38')][_0xc644('0x52')]({'where':{'id':_0x1424fb['params']['id']}})[_0xc644('0x33')](handleEntityNotFound(_0x4774e5,null))[_0xc644('0x33')](saveUpdates(_0x1424fb['body'],null))[_0xc644('0x33')](respondWithResult(_0x4774e5,null))[_0xc644('0x27')](handleError(_0x4774e5,null));};exports[_0xc644('0x55')]=function(_0x225086,_0x556491){return db[_0xc644('0x38')][_0xc644('0x52')]({'where':{'id':_0x225086[_0xc644('0x56')]['id']}})['then'](handleEntityNotFound(_0x556491,null))['then'](removeEntity(_0x556491,null))[_0xc644('0x27')](handleError(_0x556491,null));};exports['describe']=function(_0x197729,_0x307e1a){return db['ChatGroup'][_0xc644('0x57')]()['then'](respondWithResult(_0x307e1a,null))['catch'](handleError(_0x307e1a,null));};exports[_0xc644('0x58')]=function(_0x425ee8,_0x52065d,_0x26bf64){return db[_0xc644('0x59')][_0xc644('0x2c')]({'where':{'ChatGroupId':_0x425ee8[_0xc644('0x56')]['id'],'ToId':_0x425ee8[_0xc644('0x5a')]['id'],'read':![]}})[_0xc644('0x33')](function(_0x2cba7c){return{'id':_[_0xc644('0x5b')](_0x425ee8[_0xc644('0x56')]['id']),'count':_0x2cba7c};})[_0xc644('0x33')](respondWithResult(_0x52065d,null))[_0xc644('0x27')](handleError(_0x52065d,null));};exports[_0xc644('0x5c')]=function(_0x51b06e,_0x26e01a,_0x4b6670){return db[_0xc644('0x38')]['find']({'where':{'id':_0x51b06e[_0xc644('0x56')]['id']}})['then'](handleEntityNotFound(_0x26e01a,null))['then'](function(_0x113b82){if(_0x113b82){return _0x113b82[_0xc644('0x5c')](_0x51b06e[_0xc644('0x54')][_0xc644('0x5d')],_[_0xc644('0x5e')](_0x51b06e[_0xc644('0x54')],[_0xc644('0x5d'),'id'])||{});}})[_0xc644('0x33')](respondWithResult(_0x26e01a,null))[_0xc644('0x27')](handleError(_0x26e01a,null));};exports[_0xc644('0x5f')]=function(_0xd38d6d,_0x3ea0c0,_0x34b1d4){var _0x5d7b90={};var _0x1a361c={};var _0x2d229c;var _0x5b89e2;return db[_0xc644('0x38')][_0xc644('0x60')]({'where':{'id':_0xd38d6d[_0xc644('0x56')]['id']}})['then'](handleEntityNotFound(_0x3ea0c0,null))['then'](function(_0x57972b){if(_0x57972b){_0x2d229c=_0x57972b;_0x1a361c[_0xc644('0x3a')]=_[_0xc644('0x3b')](db['User']['rawAttributes']);_0x1a361c[_0xc644('0x3c')]=_[_0xc644('0x3b')](_0xd38d6d[_0xc644('0x3c')]);_0x1a361c[_0xc644('0x3d')]=_[_0xc644('0x3e')](_0x1a361c[_0xc644('0x3a')],_0x1a361c['query']);_0x5d7b90['attributes']=_['intersection'](_0x1a361c[_0xc644('0x3a')],qs[_0xc644('0x3f')](_0xd38d6d[_0xc644('0x3c')][_0xc644('0x3f')]));_0x5d7b90[_0xc644('0x40')]=_0x5d7b90[_0xc644('0x40')]['length']?_0x5d7b90['attributes']:_0x1a361c[_0xc644('0x3a')];_0x5d7b90[_0xc644('0x43')]=qs[_0xc644('0x44')](_0xd38d6d['query'][_0xc644('0x44')]);_0x5d7b90[_0xc644('0x48')]=qs[_0xc644('0x3d')](_['pick'](_0xd38d6d[_0xc644('0x3c')],_0x1a361c['filters']));if(_0xd38d6d[_0xc644('0x3c')][_0xc644('0x46')]){_0x5d7b90[_0xc644('0x48')]=_[_0xc644('0x47')](_0x5d7b90['where'],{'$or':_[_0xc644('0x49')](_0x5d7b90[_0xc644('0x40')],function(_0x9f15a0){var _0x357646={};_0x357646[_0x9f15a0]={'$like':'%'+_0xd38d6d[_0xc644('0x3c')][_0xc644('0x46')]+'%'};return _0x357646;})});}_0x5d7b90=_[_0xc644('0x47')]({},_0x5d7b90,_0xd38d6d[_0xc644('0x61')]);return _0x2d229c[_0xc644('0x5f')](_0x5d7b90);}})['then'](function(_0x2eec7c){if(_0x2eec7c){_0x5b89e2=_0x2eec7c[_0xc644('0x41')];if(!_0xd38d6d[_0xc644('0x3c')][_0xc644('0x62')](_0xc644('0x42'))){_0x5d7b90[_0xc644('0x2e')]=qs['limit'](_0xd38d6d[_0xc644('0x3c')][_0xc644('0x2e')]);_0x5d7b90['offset']=qs['offset'](_0xd38d6d[_0xc644('0x3c')][_0xc644('0x2d')]);}return _0x2d229c[_0xc644('0x5f')](_0x5d7b90);}})['then'](function(_0x3ff55f){if(_0x3ff55f){return _0x3ff55f?{'count':_0x5b89e2,'rows':_0x3ff55f}:null;}})[_0xc644('0x33')](respondWithResult(_0x3ea0c0,null))[_0xc644('0x27')](handleError(_0x3ea0c0,null));};exports[_0xc644('0x63')]=function(_0x15c088,_0x316e00,_0x8c9669){var _0x462577;return db[_0xc644('0x38')][_0xc644('0x52')]({'where':{'id':_0x15c088[_0xc644('0x56')]['id']}})[_0xc644('0x33')](handleEntityNotFound(_0x316e00,null))[_0xc644('0x33')](function(_0x3ee12b){if(_0x3ee12b){return _0x3ee12b[_0xc644('0x63')](_0x15c088['query'][_0xc644('0x5d')]);}})[_0xc644('0x33')](respondWithStatusCode(_0x316e00,null))[_0xc644('0x27')](handleError(_0x316e00,null));};exports['addMessage']=function(_0x163f74,_0x1ce361,_0x13f632){if(_0x163f74[_0xc644('0x54')]['id']){delete _0x163f74[_0xc644('0x54')]['id'];}return db[_0xc644('0x38')][_0xc644('0x52')]({'where':{'id':_0x163f74['params']['id']}})[_0xc644('0x33')](handleEntityNotFound(_0x1ce361,null))[_0xc644('0x33')](function(_0x17b58a){if(_0x17b58a){_0x163f74['body'][_0xc644('0x64')]=_0x17b58a['id'];return db[_0xc644('0x59')][_0xc644('0x53')](_0x163f74['body']);}})[_0xc644('0x33')](respondWithResult(_0x1ce361,null))[_0xc644('0x27')](handleError(_0x1ce361,null));};exports[_0xc644('0x65')]=function(_0x497948,_0x4094f1,_0x17311f){var _0x51b4c7={};var _0x1b7053={};var _0x216fe5;var _0x52122d;return db[_0xc644('0x38')][_0xc644('0x60')]({'where':{'id':_0x497948[_0xc644('0x56')]['id']}})[_0xc644('0x33')](handleEntityNotFound(_0x4094f1,null))['then'](function(_0x2aecd7){if(_0x2aecd7){_0x216fe5=_0x2aecd7;_0x1b7053['model']=_[_0xc644('0x3b')](db[_0xc644('0x59')]['rawAttributes']);_0x1b7053[_0xc644('0x3c')]=_['keys'](_0x497948[_0xc644('0x3c')]);_0x1b7053['filters']=_[_0xc644('0x3e')](_0x1b7053['model'],_0x1b7053[_0xc644('0x3c')]);_0x51b4c7['attributes']=_[_0xc644('0x3e')](_0x1b7053[_0xc644('0x3a')],qs[_0xc644('0x3f')](_0x497948[_0xc644('0x3c')][_0xc644('0x3f')]));_0x51b4c7['attributes']=_0x51b4c7[_0xc644('0x40')][_0xc644('0x41')]?_0x51b4c7[_0xc644('0x40')]:_0x1b7053[_0xc644('0x3a')];_0x51b4c7[_0xc644('0x43')]=qs[_0xc644('0x44')](_0x497948['query']['sort']);_0x51b4c7[_0xc644('0x48')]=qs[_0xc644('0x3d')](_[_0xc644('0x45')](_0x497948[_0xc644('0x3c')],_0x1b7053[_0xc644('0x3d')]));if(_0x497948['query']['filter']){_0x51b4c7['where']=_['merge'](_0x51b4c7['where'],{'$or':_[_0xc644('0x49')](_0x51b4c7[_0xc644('0x40')],function(_0x158f4c){var _0x1343ee={};_0x1343ee[_0x158f4c]={'$like':'%'+_0x497948[_0xc644('0x3c')][_0xc644('0x46')]+'%'};return _0x1343ee;})});}if(_0x497948['query']['$gte']){var _0x1852d0=_0x497948[_0xc644('0x3c')][_0xc644('0x66')]['split'](',');var _0x25973c={};_0x25973c[_0x1852d0[0x0]]={'$gte':moment(_0x1852d0[0x1])['format'](_0xc644('0x67'))};_0x51b4c7[_0xc644('0x48')]=_[_0xc644('0x47')](_0x51b4c7['where'],_0x25973c);}_0x51b4c7=_['merge']({},_0x51b4c7,_0x497948['options']);return _0x216fe5[_0xc644('0x65')](_0x51b4c7);}})[_0xc644('0x33')](function(_0x1df384){if(_0x1df384){_0x52122d=_0x1df384[_0xc644('0x41')];if(!_0x497948[_0xc644('0x3c')]['hasOwnProperty'](_0xc644('0x42'))){_0x51b4c7['limit']=qs[_0xc644('0x2e')](_0x497948[_0xc644('0x3c')][_0xc644('0x2e')]);_0x51b4c7[_0xc644('0x2d')]=qs[_0xc644('0x2d')](_0x497948[_0xc644('0x3c')]['offset']);}return _0x216fe5[_0xc644('0x65')](_0x51b4c7);}})['then'](function(_0x374b21){if(_0x374b21){return _0x374b21?{'count':_0x52122d,'rows':_0x374b21}:null;}})[_0xc644('0x33')](respondWithResult(_0x4094f1,null))[_0xc644('0x27')](handleError(_0x4094f1,null));};
\ No newline at end of file
index 4232c72..47fb0c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a5c=['exports','events','../../mysqldb','ChatGroup','setMaxListeners','save','update','remove','emit','hook'];(function(_0x3eb326,_0x222cbf){var _0x116843=function(_0x50c178){while(--_0x50c178){_0x3eb326['push'](_0x3eb326['shift']());}};_0x116843(++_0x222cbf);}(_0x7a5c,0x79));var _0xc7a5=function(_0x5f51d0,_0x2cd6c3){_0x5f51d0=_0x5f51d0-0x0;var _0x306d27=_0x7a5c[_0x5f51d0];return _0x306d27;};'use strict';var EventEmitter=require(_0xc7a5('0x0'));var ChatGroup=require(_0xc7a5('0x1'))['db'][_0xc7a5('0x2')];var ChatGroupEvents=new EventEmitter();ChatGroupEvents[_0xc7a5('0x3')](0x0);var events={'afterCreate':_0xc7a5('0x4'),'afterUpdate':_0xc7a5('0x5'),'afterDestroy':_0xc7a5('0x6')};function emitEvent(_0x12dd24){return function(_0x34013d,_0x387532,_0x50465b){ChatGroupEvents['emit'](_0x12dd24+':'+_0x34013d['id'],_0x34013d);ChatGroupEvents[_0xc7a5('0x7')](_0x12dd24,_0x34013d);_0x50465b(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];ChatGroup[_0xc7a5('0x8')](e,emitEvent(event));}}module[_0xc7a5('0x9')]=ChatGroupEvents;
\ No newline at end of file
+var _0xcb25=['hasOwnProperty','hook','save','update','emit'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xcb25,0xbb));var _0x5cb2=function(_0x3042c5,_0x36cb88){_0x3042c5=_0x3042c5-0x0;var _0x7cd140=_0xcb25[_0x3042c5];return _0x7cd140;};'use strict';var EventEmitter=require('events');var ChatGroup=require('../../mysqldb')['db']['ChatGroup'];var ChatGroupEvents=new EventEmitter();ChatGroupEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x5cb2('0x0'),'afterUpdate':_0x5cb2('0x1'),'afterDestroy':'remove'};function emitEvent(_0xf415f6){return function(_0x53be7f,_0x22d4cc,_0x5747f8){ChatGroupEvents[_0x5cb2('0x2')](_0xf415f6+':'+_0x53be7f['id'],_0x53be7f);ChatGroupEvents['emit'](_0xf415f6,_0x53be7f);_0x5747f8(null);};}for(var e in events){if(events[_0x5cb2('0x3')](e)){var event=events[e];ChatGroup[_0x5cb2('0x4')](e,emitEvent(event));}}module['exports']=ChatGroupEvents;
\ No newline at end of file
index d8459c9..8202f6d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa22a=['define','lodash','util','../../config/logger','moment','bluebird','request-promise','./chatGroup.attributes'];(function(_0x2e9ced,_0x2a4a95){var _0x2713ac=function(_0x4afd1f){while(--_0x4afd1f){_0x2e9ced['push'](_0x2e9ced['shift']());}};_0x2713ac(++_0x2a4a95);}(_0xa22a,0x69));var _0xaa22=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0xa22a[_0x5b644e];return _0x49c6bf;};'use strict';var _=require(_0xaa22('0x0'));var util=require(_0xaa22('0x1'));var logger=require(_0xaa22('0x2'))('api');var moment=require(_0xaa22('0x3'));var BPromise=require(_0xaa22('0x4'));var rp=require(_0xaa22('0x5'));var attributes=require(_0xaa22('0x6'));module['exports']=function(_0x3d7d9a,_0x239530){return _0x3d7d9a[_0xaa22('0x7')]('ChatGroup',attributes,{'tableName':'chat_groups','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd69a=['bluebird','request-promise','./chatGroup.attributes','exports','define','ChatGroup','chat_groups','lodash','util','../../config/logger'];(function(_0x7cf8eb,_0x5a470e){var _0x24e417=function(_0x10caea){while(--_0x10caea){_0x7cf8eb['push'](_0x7cf8eb['shift']());}};_0x24e417(++_0x5a470e);}(_0xd69a,0x1b5));var _0xad69=function(_0x4850c4,_0x2f9f08){_0x4850c4=_0x4850c4-0x0;var _0x386318=_0xd69a[_0x4850c4];return _0x386318;};'use strict';var _=require(_0xad69('0x0'));var util=require(_0xad69('0x1'));var logger=require(_0xad69('0x2'))('api');var moment=require('moment');var BPromise=require(_0xad69('0x3'));var rp=require(_0xad69('0x4'));var attributes=require(_0xad69('0x5'));module[_0xad69('0x6')]=function(_0x2d6b37,_0x2f8c23){return _0x2d6b37[_0xad69('0x7')](_0xad69('0x8'),attributes,{'tableName':_0xad69('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 883b423..aac7ee7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a2c=['error','code','message','result','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','redis','localhost','socket.io-emitter','register','request','then','ChatGroup,\x20%s,\x20%s','request\x20sent','debug','stringify'];(function(_0x33565e,_0x3ea918){var _0x5af73e=function(_0x4baaaa){while(--_0x4baaaa){_0x33565e['push'](_0x33565e['shift']());}};_0x5af73e(++_0x3ea918);}(_0x7a2c,0x17b));var _0xc7a2=function(_0x5d2141,_0x1ea74b){_0x5d2141=_0x5d2141-0x0;var _0x57429f=_0x7a2c[_0x5d2141];return _0x57429f;};'use strict';var _=require(_0xc7a2('0x0'));var util=require('util');var moment=require(_0xc7a2('0x1'));var BPromise=require(_0xc7a2('0x2'));var rs=require(_0xc7a2('0x3'));var fs=require('fs');var Redis=require(_0xc7a2('0x4'));var db=require(_0xc7a2('0x5'))['db'];var utils=require(_0xc7a2('0x6'));var logger=require(_0xc7a2('0x7'))(_0xc7a2('0x8'));var config=require('../../config/environment');var jayson=require(_0xc7a2('0x9'));var client=jayson[_0xc7a2('0xa')]['http']({'port':0x232a});config['redis']=_['defaults'](config[_0xc7a2('0xb')],{'host':_0xc7a2('0xc'),'port':0x18eb});var socket=require(_0xc7a2('0xd'))(new Redis(config[_0xc7a2('0xb')]));require('./chatGroup.socket')[_0xc7a2('0xe')](socket);function respondWithRpcPromise(_0x27aa8c,_0x2cb74c,_0x558839){return new BPromise(function(_0x2c3f86,_0x4a44c7){return client[_0xc7a2('0xf')](_0x27aa8c,_0x558839)[_0xc7a2('0x10')](function(_0x1a9b38){logger['info'](_0xc7a2('0x11'),_0x2cb74c,_0xc7a2('0x12'));logger[_0xc7a2('0x13')]('ChatGroup,\x20%s,\x20%s,\x20%s',_0x2cb74c,_0xc7a2('0x12'),JSON[_0xc7a2('0x14')](_0x1a9b38));if(_0x1a9b38[_0xc7a2('0x15')]){if(_0x1a9b38[_0xc7a2('0x15')][_0xc7a2('0x16')]===0x1f4){logger[_0xc7a2('0x15')](_0xc7a2('0x11'),_0x2cb74c,_0x1a9b38[_0xc7a2('0x15')][_0xc7a2('0x17')]);return _0x4a44c7(_0x1a9b38[_0xc7a2('0x15')][_0xc7a2('0x17')]);}logger[_0xc7a2('0x15')](_0xc7a2('0x11'),_0x2cb74c,_0x1a9b38[_0xc7a2('0x15')][_0xc7a2('0x17')]);return _0x2c3f86(_0x1a9b38['error'][_0xc7a2('0x17')]);}else{logger['info'](_0xc7a2('0x11'),_0x2cb74c,_0xc7a2('0x12'));_0x2c3f86(_0x1a9b38[_0xc7a2('0x18')][_0xc7a2('0x17')]);}})['catch'](function(_0x5a10ab){logger[_0xc7a2('0x15')](_0xc7a2('0x11'),_0x2cb74c,_0x5a10ab);_0x4a44c7(_0x5a10ab);});});}
\ No newline at end of file
+var _0xa41a=['util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','redis','localhost','./chatGroup.socket','register','request','info','debug','request\x20sent','stringify','error','code','ChatGroup,\x20%s,\x20%s','message','result','catch','lodash'];(function(_0x2a8b24,_0xb25f90){var _0x2a2aa4=function(_0xc1aa83){while(--_0xc1aa83){_0x2a8b24['push'](_0x2a8b24['shift']());}};_0x2a2aa4(++_0xb25f90);}(_0xa41a,0x6b));var _0xaa41=function(_0x321206,_0x22269d){_0x321206=_0x321206-0x0;var _0xb3746b=_0xa41a[_0x321206];return _0xb3746b;};'use strict';var _=require(_0xaa41('0x0'));var util=require(_0xaa41('0x1'));var moment=require('moment');var BPromise=require(_0xaa41('0x2'));var rs=require(_0xaa41('0x3'));var fs=require('fs');var Redis=require(_0xaa41('0x4'));var db=require(_0xaa41('0x5'))['db'];var utils=require(_0xaa41('0x6'));var logger=require(_0xaa41('0x7'))(_0xaa41('0x8'));var config=require(_0xaa41('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xaa41('0xa')][_0xaa41('0xb')]({'port':0x232a});config['redis']=_['defaults'](config[_0xaa41('0xc')],{'host':_0xaa41('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xaa41('0xc')]));require(_0xaa41('0xe'))[_0xaa41('0xf')](socket);function respondWithRpcPromise(_0x1cc344,_0x4263d6,_0x38d930){return new BPromise(function(_0x806f08,_0x423a19){return client[_0xaa41('0x10')](_0x1cc344,_0x38d930)['then'](function(_0x1d3aac){logger[_0xaa41('0x11')]('ChatGroup,\x20%s,\x20%s',_0x4263d6,'request\x20sent');logger[_0xaa41('0x12')]('ChatGroup,\x20%s,\x20%s,\x20%s',_0x4263d6,_0xaa41('0x13'),JSON[_0xaa41('0x14')](_0x1d3aac));if(_0x1d3aac[_0xaa41('0x15')]){if(_0x1d3aac[_0xaa41('0x15')][_0xaa41('0x16')]===0x1f4){logger['error'](_0xaa41('0x17'),_0x4263d6,_0x1d3aac[_0xaa41('0x15')][_0xaa41('0x18')]);return _0x423a19(_0x1d3aac[_0xaa41('0x15')][_0xaa41('0x18')]);}logger[_0xaa41('0x15')](_0xaa41('0x17'),_0x4263d6,_0x1d3aac['error'][_0xaa41('0x18')]);return _0x806f08(_0x1d3aac[_0xaa41('0x15')][_0xaa41('0x18')]);}else{logger[_0xaa41('0x11')](_0xaa41('0x17'),_0x4263d6,_0xaa41('0x13'));_0x806f08(_0x1d3aac[_0xaa41('0x19')][_0xaa41('0x18')]);}})[_0xaa41('0x1a')](function(_0x4fe1a4){logger['error'](_0xaa41('0x17'),_0x4263d6,_0x4fe1a4);_0x423a19(_0x4fe1a4);});});}
\ No newline at end of file
index d8fbd8a..2e6dc3d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffe1=['length','./chatGroup.events','save','removeListener'];(function(_0x303d18,_0x216807){var _0x5daa73=function(_0x4e37f6){while(--_0x4e37f6){_0x303d18['push'](_0x303d18['shift']());}};_0x5daa73(++_0x216807);}(_0xffe1,0x175));var _0x1ffe=function(_0x5cf4ea,_0x220a45){_0x5cf4ea=_0x5cf4ea-0x0;var _0x56708b=_0xffe1[_0x5cf4ea];return _0x56708b;};'use strict';var ChatGroupEvents=require(_0x1ffe('0x0'));var events=[_0x1ffe('0x1'),'remove','update'];function createListener(_0x37f22a,_0x100207){return function(_0x38121){_0x100207['emit'](_0x37f22a,_0x38121);};}function removeListener(_0x2be98c,_0x21ba54){return function(){ChatGroupEvents[_0x1ffe('0x2')](_0x2be98c,_0x21ba54);};}exports['register']=function(_0x219223){for(var _0x22d421=0x0,_0x6bc1ed=events[_0x1ffe('0x3')];_0x22d421<_0x6bc1ed;_0x22d421++){var _0xb34112=events[_0x22d421];var _0x8eee2b=createListener('chatGroup:'+_0xb34112,_0x219223);ChatGroupEvents['on'](_0xb34112,_0x8eee2b);}};
\ No newline at end of file
+var _0x9221=['emit','removeListener','register','length','save','remove'];(function(_0x710815,_0x520da8){var _0x5b3b89=function(_0x2e1a8e){while(--_0x2e1a8e){_0x710815['push'](_0x710815['shift']());}};_0x5b3b89(++_0x520da8);}(_0x9221,0x64));var _0x1922=function(_0x57de35,_0x2ef99a){_0x57de35=_0x57de35-0x0;var _0x2a94eb=_0x9221[_0x57de35];return _0x2a94eb;};'use strict';var ChatGroupEvents=require('./chatGroup.events');var events=[_0x1922('0x0'),_0x1922('0x1'),'update'];function createListener(_0x23df25,_0x1099ca){return function(_0x5f14f2){_0x1099ca[_0x1922('0x2')](_0x23df25,_0x5f14f2);};}function removeListener(_0x43c8a3,_0x459eee){return function(){ChatGroupEvents[_0x1922('0x3')](_0x43c8a3,_0x459eee);};}exports[_0x1922('0x4')]=function(_0x1944a5){for(var _0x1351a0=0x0,_0x5aa05c=events[_0x1922('0x5')];_0x1351a0<_0x5aa05c;_0x1351a0++){var _0x3cfd98=events[_0x1351a0];var _0x195fa4=createListener('chatGroup:'+_0x3cfd98,_0x1944a5);ChatGroupEvents['on'](_0x3cfd98,_0x195fa4);}};
\ No newline at end of file
index c703f29..11d9794 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3f47=['./chatGroup.controller','isAuthenticated','index','get','/describe','show','/:id/unread','getUnread','/:id/members','getMembers','/:id/messages','post','create','addMembers','put','/:id','delete','removeMembers','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment'];(function(_0x1e3f6b,_0x5427b6){var _0x3c7557=function(_0x37213f){while(--_0x37213f){_0x1e3f6b['push'](_0x1e3f6b['shift']());}};_0x3c7557(++_0x5427b6);}(_0x3f47,0x64));var _0x73f4=function(_0xfa0e9c,_0x3d32ed){_0xfa0e9c=_0xfa0e9c-0x0;var _0x596682=_0x3f47[_0xfa0e9c];return _0x596682;};'use strict';var multer=require(_0x73f4('0x0'));var util=require(_0x73f4('0x1'));var path=require(_0x73f4('0x2'));var timeout=require(_0x73f4('0x3'));var express=require(_0x73f4('0x4'));var router=express[_0x73f4('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x73f4('0x6'));var config=require(_0x73f4('0x7'));var controller=require(_0x73f4('0x8'));router['get']('/',auth[_0x73f4('0x9')](),controller[_0x73f4('0xa')]);router[_0x73f4('0xb')](_0x73f4('0xc'),auth[_0x73f4('0x9')](),controller['describe']);router['get']('/:id',auth[_0x73f4('0x9')](),controller[_0x73f4('0xd')]);router[_0x73f4('0xb')](_0x73f4('0xe'),auth[_0x73f4('0x9')](),controller[_0x73f4('0xf')]);router[_0x73f4('0xb')](_0x73f4('0x10'),auth[_0x73f4('0x9')](),controller[_0x73f4('0x11')]);router[_0x73f4('0xb')](_0x73f4('0x12'),auth[_0x73f4('0x9')](),controller['getMessages']);router[_0x73f4('0x13')]('/',auth[_0x73f4('0x9')](),controller[_0x73f4('0x14')]);router[_0x73f4('0x13')]('/:id/members',auth['isAuthenticated'](),controller[_0x73f4('0x15')]);router['post'](_0x73f4('0x12'),auth['isAuthenticated'](),controller['addMessage']);router[_0x73f4('0x16')]('/:id',auth[_0x73f4('0x9')](),controller['update']);router['delete'](_0x73f4('0x17'),auth[_0x73f4('0x9')](),controller['destroy']);router[_0x73f4('0x18')](_0x73f4('0x10'),auth['isAuthenticated'](),controller[_0x73f4('0x19')]);module[_0x73f4('0x1a')]=router;
\ No newline at end of file
+var _0x4893=['/:id/messages','getMessages','post','create','addMessage','update','delete','destroy','removeMembers','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./chatGroup.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/unread','/:id/members','getMembers'];(function(_0x1d8e92,_0x15e106){var _0x35b280=function(_0x4782b1){while(--_0x4782b1){_0x1d8e92['push'](_0x1d8e92['shift']());}};_0x35b280(++_0x15e106);}(_0x4893,0x149));var _0x3489=function(_0x2892da,_0x191a40){_0x2892da=_0x2892da-0x0;var _0x28cff2=_0x4893[_0x2892da];return _0x28cff2;};'use strict';var multer=require(_0x3489('0x0'));var util=require(_0x3489('0x1'));var path=require(_0x3489('0x2'));var timeout=require(_0x3489('0x3'));var express=require(_0x3489('0x4'));var router=express[_0x3489('0x5')]();var auth=require(_0x3489('0x6'));var interaction=require(_0x3489('0x7'));var config=require('../../config/environment');var controller=require(_0x3489('0x8'));router[_0x3489('0x9')]('/',auth[_0x3489('0xa')](),controller[_0x3489('0xb')]);router[_0x3489('0x9')](_0x3489('0xc'),auth[_0x3489('0xa')](),controller[_0x3489('0xd')]);router[_0x3489('0x9')](_0x3489('0xe'),auth[_0x3489('0xa')](),controller[_0x3489('0xf')]);router[_0x3489('0x9')](_0x3489('0x10'),auth[_0x3489('0xa')](),controller['getUnread']);router[_0x3489('0x9')](_0x3489('0x11'),auth['isAuthenticated'](),controller[_0x3489('0x12')]);router[_0x3489('0x9')](_0x3489('0x13'),auth[_0x3489('0xa')](),controller[_0x3489('0x14')]);router[_0x3489('0x15')]('/',auth['isAuthenticated'](),controller[_0x3489('0x16')]);router[_0x3489('0x15')](_0x3489('0x11'),auth[_0x3489('0xa')](),controller['addMembers']);router['post'](_0x3489('0x13'),auth[_0x3489('0xa')](),controller[_0x3489('0x17')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0x3489('0x18')]);router[_0x3489('0x19')](_0x3489('0xe'),auth['isAuthenticated'](),controller[_0x3489('0x1a')]);router[_0x3489('0x19')]('/:id/members',auth[_0x3489('0xa')](),controller[_0x3489('0x1b')]);module[_0x3489('0x1c')]=router;
\ No newline at end of file
index bd87005..b9418e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed3c=['ENUM','out','sequelize','exports','BOOLEAN','INTEGER','star','thumb','STRING','DATE','TEXT','long'];(function(_0x42efd9,_0x10c005){var _0x1ba855=function(_0x5d78f0){while(--_0x5d78f0){_0x42efd9['push'](_0x42efd9['shift']());}};_0x1ba855(++_0x10c005);}(_0xed3c,0x1a6));var _0xced3=function(_0x2e8660,_0x5ca0c2){_0x2e8660=_0x2e8660-0x0;var _0x3dc331=_0xed3c[_0x2e8660];return _0x3dc331;};'use strict';var Sequelize=require(_0xced3('0x0'));module[_0xced3('0x1')]={'closed':{'type':Sequelize[_0xced3('0x2')],'defaultValue':![]},'ratingValue':{'type':Sequelize[_0xced3('0x3')]},'ratingType':{'type':Sequelize['ENUM'](_0xced3('0x4'),_0xced3('0x5')),'defaultValue':_0xced3('0x4')},'ratingMessage':{'type':Sequelize['TEXT']},'pathTranscript':{'type':Sequelize['TEXT']},'mailTranscript':{'type':Sequelize[_0xced3('0x6')],'validate':{'isEmail':!![]}},'closedAt':{'type':Sequelize[_0xced3('0x7')]},'disposition':{'type':Sequelize[_0xced3('0x6')]},'note':{'type':Sequelize[_0xced3('0x6')]},'browserName':{'type':Sequelize['STRING']},'browserVersion':{'type':Sequelize['STRING']},'osName':{'type':Sequelize['STRING']},'osVersion':{'type':Sequelize[_0xced3('0x6')]},'deviceModel':{'type':Sequelize['STRING']},'deviceVendor':{'type':Sequelize['STRING']},'deviceType':{'type':Sequelize['STRING']},'referer':{'type':Sequelize[_0xced3('0x6')]},'customerIp':{'type':Sequelize[_0xced3('0x6')]},'formData':{'type':Sequelize[_0xced3('0x8')](_0xced3('0x9'))},'read1stAt':{'type':Sequelize[_0xced3('0x7')]},'lastMsgAt':{'type':Sequelize['DATE']},'lastMsgDirection':{'type':Sequelize[_0xced3('0xa')]('in',_0xced3('0xb')),'defaultValue':'in','allowNull':![]},'closeReason':{'type':Sequelize[_0xced3('0x6')]}};
\ No newline at end of file
+var _0x9c00=['long','out','sequelize','exports','ENUM','star','TEXT','STRING','DATE'];(function(_0x1e24bb,_0x51900f){var _0x6591fe=function(_0x345767){while(--_0x345767){_0x1e24bb['push'](_0x1e24bb['shift']());}};_0x6591fe(++_0x51900f);}(_0x9c00,0x1a0));var _0x09c0=function(_0x1b6c0c,_0x51ef20){_0x1b6c0c=_0x1b6c0c-0x0;var _0x178991=_0x9c00[_0x1b6c0c];return _0x178991;};'use strict';var Sequelize=require(_0x09c0('0x0'));module[_0x09c0('0x1')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'ratingValue':{'type':Sequelize['INTEGER']},'ratingType':{'type':Sequelize[_0x09c0('0x2')](_0x09c0('0x3'),'thumb'),'defaultValue':_0x09c0('0x3')},'ratingMessage':{'type':Sequelize[_0x09c0('0x4')]},'pathTranscript':{'type':Sequelize[_0x09c0('0x4')]},'mailTranscript':{'type':Sequelize[_0x09c0('0x5')],'validate':{'isEmail':!![]}},'closedAt':{'type':Sequelize[_0x09c0('0x6')]},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize['STRING']},'browserName':{'type':Sequelize[_0x09c0('0x5')]},'browserVersion':{'type':Sequelize[_0x09c0('0x5')]},'osName':{'type':Sequelize[_0x09c0('0x5')]},'osVersion':{'type':Sequelize[_0x09c0('0x5')]},'deviceModel':{'type':Sequelize[_0x09c0('0x5')]},'deviceVendor':{'type':Sequelize['STRING']},'deviceType':{'type':Sequelize[_0x09c0('0x5')]},'referer':{'type':Sequelize[_0x09c0('0x5')]},'customerIp':{'type':Sequelize[_0x09c0('0x5')]},'formData':{'type':Sequelize[_0x09c0('0x4')](_0x09c0('0x7'))},'read1stAt':{'type':Sequelize[_0x09c0('0x6')]},'lastMsgAt':{'type':Sequelize[_0x09c0('0x6')]},'lastMsgDirection':{'type':Sequelize[_0x09c0('0x2')]('in',_0x09c0('0x8')),'defaultValue':'in','allowNull':![]},'closeReason':{'type':Sequelize[_0x09c0('0x5')]}};
\ No newline at end of file
index 161f22e..5fdf32d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x816e=['unlinkSync','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','../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','redis','localhost','./chatInteraction.socket','register','jayson/promise','client','http','request','then','info','ChatInteraction,\x20%s,\x20%s','ChatInteraction,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','destroy','sendStatus','stack','name','send','index','ChatInteraction','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','include','tag','push','Tags','distinct','read','ChatMessage','Messages','direction','createdAt','includeAll','User','fullname','CmContact','Contact','internal','ChatWebsite','Tag','color','findAll','rows','show','params','find','create','body','describe','customUpdate','abandon','abandonInteraction,\x20%s,\x20%s,\x20%s','UserId','Sequelize','ValidationError','closed','disposition','AbandonInteraction','attachmentUpload','file','originalname','basename','filename','mimetype','Attachment','attachmentDownload','findOne','Unauthorized','attachId','download','root','server/files/attachments/','mailTranscript','join','server/files/chat/upload/','format','pathTranscript','ChatWebsiteId','ContactId','%s%d','agentAlias','System','customer','Visitor','agentIdentifier','website_alias','agent_alias','agent_fullname','[%s]\x20%s:\x20%s\x0a','MM/DD/YYYY\x20HH:mm:ss','secret','appendFileSync','Smtp','service','port','secure','auth','user','pass','SendMail','sendMail','email','Mail\x20Transcript','Hi\x20%s,\x20attached\x20you\x20can\x20find\x20your\x20transcript\x20file.\x20\x0a\x0aRegards.\x20\x0a\x0a','addMessage','ids','omit','getMessages','sort','ChatInteractionId','$gte','YYYY-MM-DD\x20HH:mm:ss','getMyMessages','includeAgent','alias','addTags','setTags','spread','emit','removeTags','toString','server','files','tmp','attachments','interaction-%s.zip','firstName','Letter','1cm','mkdirSync','<h1>Chat\x20Interaction:\x20#%d</h1>','<h2>Date:\x20%s</h2>','MMMM\x20Do\x20YYYY,\x20HH:mm:ss','<hr>','<div\x20style=\x22border-style:\x20solid;\x20border-width:\x201px;\x20margin:\x203px;\x22>','<p\x20style=\x22margin:\x203px;\x22>%s:\x20%s</p>','</div>','existsSync','createReadStream','pipe','createWriteStream','toFile','interaction-','.pdf','log','err'];(function(_0x6d4c7d,_0x48f168){var _0x53229e=function(_0x4d1788){while(--_0x4d1788){_0x6d4c7d['push'](_0x6d4c7d['shift']());}};_0x53229e(++_0x48f168);}(_0x816e,0x19f));var _0xe816=function(_0x48961c,_0x280e9d){_0x48961c=_0x48961c-0x0;var _0x1d895d=_0x816e[_0x48961c];return _0x1d895d;};'use strict';var pdf=require(_0xe816('0x0'));var emlformat=require(_0xe816('0x1'));var rimraf=require(_0xe816('0x2'));var zipdir=require(_0xe816('0x3'));var jsonpatch=require(_0xe816('0x4'));var rp=require(_0xe816('0x5'));var moment=require(_0xe816('0x6'));var BPromise=require(_0xe816('0x7'));var Mustache=require(_0xe816('0x8'));var util=require(_0xe816('0x9'));var path=require(_0xe816('0xa'));var sox=require(_0xe816('0xb'));var csv=require(_0xe816('0xc'));var ejs=require(_0xe816('0xd'));var fs=require('fs');var _=require(_0xe816('0xe'));var squel=require(_0xe816('0xf'));var crypto=require(_0xe816('0x10'));var jsforce=require(_0xe816('0x11'));var deskjs=require('desk.js');var toCsv=require(_0xe816('0xc'));var querystring=require('querystring');var Papa=require(_0xe816('0x12'));var authService=require('../../components/auth/service');var hardwareService=require(_0xe816('0x13'));var Redis=require('ioredis');var qs=require(_0xe816('0x14'));var logger=require('../../config/logger')(_0xe816('0x15'));var utils=require(_0xe816('0x16'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0xe816('0x17')]=_['defaults'](config[_0xe816('0x17')],{'host':_0xe816('0x18'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xe816('0x17')]));require(_0xe816('0x19'))[_0xe816('0x1a')](socket);var jayson=require(_0xe816('0x1b'));var client=jayson[_0xe816('0x1c')][_0xe816('0x1d')]({'port':0x232b});var client9004=jayson[_0xe816('0x1c')][_0xe816('0x1d')]({'port':0x232c});function respondWithRpcPromise(_0xe9ad64,_0xfc4fba,_0x3a0ace,_0x4d3bd4){return new BPromise(function(_0x52a9ae,_0x1ec909){var _0x58652d=_0x4d3bd4||client;return _0x58652d[_0xe816('0x1e')](_0xe9ad64,_0x3a0ace)[_0xe816('0x1f')](function(_0x1b3f72){logger[_0xe816('0x20')](_0xe816('0x21'),_0xfc4fba,'request\x20sent');logger['debug'](_0xe816('0x22'),_0xfc4fba,_0xe816('0x23'),JSON[_0xe816('0x24')](_0x1b3f72));if(_0x1b3f72[_0xe816('0x25')]){if(_0x1b3f72[_0xe816('0x25')][_0xe816('0x26')]===0x1f4){logger[_0xe816('0x25')](_0xe816('0x21'),_0xfc4fba,_0x1b3f72[_0xe816('0x25')]['message']);return _0x1ec909(_0x1b3f72[_0xe816('0x25')][_0xe816('0x27')]);}logger[_0xe816('0x25')](_0xe816('0x21'),_0xfc4fba,_0x1b3f72[_0xe816('0x25')][_0xe816('0x27')]);return _0x52a9ae(_0x1b3f72[_0xe816('0x25')][_0xe816('0x27')]);}else{logger[_0xe816('0x20')](_0xe816('0x21'),_0xfc4fba,_0xe816('0x23'));_0x52a9ae(_0x1b3f72[_0xe816('0x28')][_0xe816('0x27')]);}})[_0xe816('0x29')](function(_0x4b4d16){logger[_0xe816('0x25')](_0xe816('0x21'),_0xfc4fba,_0x4b4d16);_0x1ec909(_0x4b4d16);});});}function respondWithStatusCode(_0x5b06f7,_0x4b9665){_0x4b9665=_0x4b9665||0xcc;return function(_0x4edb07){if(_0x4edb07){return _0x5b06f7['sendStatus'](_0x4b9665);}return _0x5b06f7[_0xe816('0x2a')](_0x4b9665)[_0xe816('0x2b')]();};}function respondWithResult(_0x4b328c,_0x46d961){_0x46d961=_0x46d961||0xc8;return function(_0x402dda){if(_0x402dda){return _0x4b328c[_0xe816('0x2a')](_0x46d961)[_0xe816('0x2c')](_0x402dda);}};}function respondWithFilteredResult(_0x3a0e62,_0x2710bc){return function(_0x42dedc){if(_0x42dedc){var _0x1a408d=_0x42dedc[_0xe816('0x2d')],_0x3a2101=_0x2710bc['offset'],_0x4f402b=_0x2710bc[_0xe816('0x2e')]+_0x2710bc[_0xe816('0x2f')],_0x494383;if(_0x4f402b>=_0x1a408d){_0x4f402b=_0x1a408d;_0x494383=0xc8;}else{_0x494383=0xce;}_0x3a0e62[_0xe816('0x2a')](_0x494383);return _0x3a0e62[_0xe816('0x30')](_0xe816('0x31'),_0x3a2101+'-'+_0x4f402b+'/'+_0x1a408d)[_0xe816('0x2c')](_0x42dedc);}return null;};}function patchUpdates(_0x3a77dc){return function(_0x205ddd){try{jsonpatch['apply'](_0x205ddd,_0x3a77dc,!![]);}catch(_0x435d7b){return BPromise[_0xe816('0x32')](_0x435d7b);}return _0x205ddd[_0xe816('0x33')]();};}function saveUpdates(_0xbba3f6,_0x4af965){return function(_0x1bf13d){if(_0x1bf13d){return _0x1bf13d[_0xe816('0x34')](_0xbba3f6)['then'](function(_0x5a3a0d){return _0x5a3a0d;});}return null;};}function removeEntity(_0x2c9185,_0x414c6c){return function(_0x591ae1){if(_0x591ae1){return _0x591ae1[_0xe816('0x35')]()[_0xe816('0x1f')](function(){_0x2c9185[_0xe816('0x2a')](0xcc)[_0xe816('0x2b')]();});}};}function handleEntityNotFound(_0x31d7bc,_0x39e14f){return function(_0x1e892c){if(!_0x1e892c){_0x31d7bc[_0xe816('0x36')](0x194);}return _0x1e892c;};}function handleError(_0x28c2b8,_0x109885){_0x109885=_0x109885||0x1f4;return function(_0x4147aa){logger['error'](_0x4147aa[_0xe816('0x37')]);if(_0x4147aa['name']){delete _0x4147aa[_0xe816('0x38')];}_0x28c2b8[_0xe816('0x2a')](_0x109885)[_0xe816('0x39')](_0x4147aa);};}exports[_0xe816('0x3a')]=function(_0x1fc8c8,_0x36137b){var _0x5b8874={},_0x18c999={},_0x27dc3a={'count':0x0,'rows':[]};var _0x18aa29=db[_0xe816('0x3b')][_0xe816('0x3c')];_0x18c999[_0xe816('0x3d')]=_['keys'](_0x18aa29);_0x18c999[_0xe816('0x3e')]=_[_0xe816('0x3f')](_0x1fc8c8['query']);_0x18c999[_0xe816('0x40')]=_[_0xe816('0x41')](_0x18c999['model'],_0x18c999[_0xe816('0x3e')]);_0x5b8874[_0xe816('0x42')]=_['intersection'](_0x18c999[_0xe816('0x3d')],qs['fields'](_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x43')]));_0x5b8874[_0xe816('0x42')]=_0x5b8874[_0xe816('0x42')][_0xe816('0x44')]?_0x5b8874[_0xe816('0x42')]:_0x18c999[_0xe816('0x3d')];if(!_0x1fc8c8['query'][_0xe816('0x45')](_0xe816('0x46'))){_0x5b8874[_0xe816('0x2f')]=qs[_0xe816('0x2f')](_0x1fc8c8['query'][_0xe816('0x2f')]);_0x5b8874[_0xe816('0x2e')]=qs['offset'](_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x2e')]);}_0x5b8874[_0xe816('0x47')]=qs['sort'](_0x1fc8c8[_0xe816('0x3e')]['sort']);_0x5b8874[_0xe816('0x48')]=qs[_0xe816('0x40')](_[_0xe816('0x49')](_0x1fc8c8[_0xe816('0x3e')],_0x18c999['filters']));if(_0x1fc8c8[_0xe816('0x3e')]['filter']){_0x5b8874[_0xe816('0x48')]=_[_0xe816('0x4a')](_0x5b8874['where'],{'$or':_[_0xe816('0x4b')](_0x18aa29,function(_0x58a9b0){if(_0x58a9b0[_0xe816('0x4c')][_0xe816('0x4d')]!==_0xe816('0x4e')){var _0x2a1063={};_0x2a1063[_0x58a9b0[_0xe816('0x4f')]]={'$like':'%'+_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x50')]+'%'};return _0x2a1063;}})});}_0x5b8874=_['merge']({},_0x5b8874,_0x1fc8c8[_0xe816('0x51')]);var _0x207871={'where':_0x5b8874[_0xe816('0x48')]};_0x207871[_0xe816('0x52')]=[];if(_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x53')]){_0x207871[_0xe816('0x52')][_0xe816('0x54')]({'model':db['Tag'],'as':_0xe816('0x55'),'attributes':['id'],'where':{'id':_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x53')]},'required':!![]});_0x207871[_0xe816('0x56')]=!![];}if(_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x57')]){_0x207871[_0xe816('0x52')][_0xe816('0x54')]({'model':db[_0xe816('0x58')],'as':_0xe816('0x59'),'attributes':['id',_0xe816('0x5a'),_0xe816('0x5b'),_0xe816('0x57')],'where':{'direction':'in','read':_0x1fc8c8[_0xe816('0x3e')]['read']||![]},'required':!![]});_0x207871[_0xe816('0x56')]=!![];}return db[_0xe816('0x3b')][_0xe816('0x2d')](_0x207871)[_0xe816('0x1f')](function(_0x20ba27){_0x27dc3a['count']=_0x20ba27;if(_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x5c')]){_0x5b8874[_0xe816('0x52')]=[{'model':db[_0xe816('0x5d')],'as':'Users','required':![],'attributes':['id','name',_0xe816('0x5e')]},{'model':db[_0xe816('0x5f')],'as':_0xe816('0x60'),'required':![]},{'model':db[_0xe816('0x5d')],'as':'Owner','attributes':[_0xe816('0x38'),_0xe816('0x5e'),_0xe816('0x61')],'required':![]},{'model':db[_0xe816('0x62')],'as':'Account','attributes':[_0xe816('0x38'),_0xe816('0x4d')],'required':![]},{'model':db[_0xe816('0x58')],'as':_0xe816('0x59'),'attributes':['id',_0xe816('0x5a'),_0xe816('0x5b'),_0xe816('0x57')],'where':{'direction':'in','read':_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x57')]||![]},'required':_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x57')]||![]},{'model':db[_0xe816('0x63')],'as':'Tags','attributes':['id','name',_0xe816('0x64')],'required':_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x53')]?!![]:![]},{'model':db[_0xe816('0x63')],'as':'ThroughTags','attributes':['id',_0xe816('0x38'),_0xe816('0x64')],'through':_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x53')]?{'attributes':[],'where':{'TagId':_0x1fc8c8['query'][_0xe816('0x53')]||undefined}}:{},'required':_0x1fc8c8[_0xe816('0x3e')][_0xe816('0x53')]?!![]:![]}];}return db[_0xe816('0x3b')][_0xe816('0x65')](_0x5b8874);})[_0xe816('0x1f')](function(_0x1b701b){_0x27dc3a[_0xe816('0x66')]=_0x1b701b;return _0x27dc3a;})['then'](respondWithFilteredResult(_0x36137b,_0x5b8874))['catch'](handleError(_0x36137b,null));};exports[_0xe816('0x67')]=function(_0x2b99b7,_0x2b36b2){var _0x53e7b5={'raw':![],'where':{'id':_0x2b99b7[_0xe816('0x68')]['id']}},_0x5e5f99={};_0x5e5f99[_0xe816('0x3d')]=_[_0xe816('0x3f')](db[_0xe816('0x3b')][_0xe816('0x3c')]);_0x5e5f99['query']=_[_0xe816('0x3f')](_0x2b99b7[_0xe816('0x3e')]);_0x5e5f99[_0xe816('0x40')]=_[_0xe816('0x41')](_0x5e5f99['model'],_0x5e5f99[_0xe816('0x3e')]);_0x53e7b5[_0xe816('0x42')]=_[_0xe816('0x41')](_0x5e5f99['model'],qs[_0xe816('0x43')](_0x2b99b7[_0xe816('0x3e')][_0xe816('0x43')]));_0x53e7b5[_0xe816('0x42')]=_0x53e7b5[_0xe816('0x42')]['length']?_0x53e7b5[_0xe816('0x42')]:_0x5e5f99[_0xe816('0x3d')];if(_0x2b99b7['query']['includeAll']){_0x53e7b5['include']=[{'all':!![]}];}_0x53e7b5=_[_0xe816('0x4a')]({},_0x53e7b5,_0x2b99b7['options']);return db[_0xe816('0x3b')][_0xe816('0x69')](_0x53e7b5)['then'](handleEntityNotFound(_0x2b36b2,null))['then'](respondWithResult(_0x2b36b2,null))[_0xe816('0x29')](handleError(_0x2b36b2,null));};exports['create']=function(_0x3e7d4c,_0x92bdaa){return db[_0xe816('0x3b')][_0xe816('0x6a')](_0x3e7d4c['body'],{})['then'](respondWithResult(_0x92bdaa,0xc9))[_0xe816('0x29')](handleError(_0x92bdaa,null));};exports[_0xe816('0x34')]=function(_0x275632,_0x4c1c2a){if(_0x275632[_0xe816('0x6b')]['id']){delete _0x275632[_0xe816('0x6b')]['id'];}return db[_0xe816('0x3b')][_0xe816('0x69')]({'where':{'id':_0x275632['params']['id']}})[_0xe816('0x1f')](handleEntityNotFound(_0x4c1c2a,null))['then'](saveUpdates(_0x275632[_0xe816('0x6b')],null))[_0xe816('0x1f')](respondWithResult(_0x4c1c2a,null))['catch'](handleError(_0x4c1c2a,null));};exports[_0xe816('0x35')]=function(_0x2ca231,_0x1b73ce){return db[_0xe816('0x3b')][_0xe816('0x69')]({'where':{'id':_0x2ca231[_0xe816('0x68')]['id']}})['then'](handleEntityNotFound(_0x1b73ce,null))[_0xe816('0x1f')](removeEntity(_0x1b73ce,null))[_0xe816('0x29')](handleError(_0x1b73ce,null));};exports[_0xe816('0x6c')]=function(_0x183112,_0x348ef5){return db['ChatInteraction'][_0xe816('0x6c')]()[_0xe816('0x1f')](respondWithResult(_0x348ef5,null))[_0xe816('0x29')](handleError(_0x348ef5,null));};exports[_0xe816('0x6d')]=function(_0x639b3f,_0x342360){if(_0x639b3f[_0xe816('0x6b')]['id']){delete _0x639b3f['body']['id'];}return db['ChatInteraction'][_0xe816('0x69')]({'where':{'id':_0x639b3f[_0xe816('0x68')]['id']}})['then'](handleEntityNotFound(_0x342360,null))[_0xe816('0x1f')](saveUpdates(_0x639b3f['body'],null))[_0xe816('0x1f')](respondWithResult(_0x342360,null))[_0xe816('0x29')](handleError(_0x342360,null));};exports[_0xe816('0x6e')]=function(_0x35a221,_0x371b4a,_0x2a4c49){if(_0x35a221[_0xe816('0x6b')]['id']){delete _0x35a221[_0xe816('0x6b')]['id'];}return db[_0xe816('0x3b')]['find']({'where':{'id':_0x35a221['params']['id']}})[_0xe816('0x1f')](function(_0x2c88fb){if(!_0x2c88fb){logger['error'](_0xe816('0x6f'),'abandon',0x194,'entity\x20not\x20found');_0x371b4a[_0xe816('0x36')](0x194);}else{if(_0x2c88fb[_0xe816('0x70')]){throw new db[(_0xe816('0x71'))][(_0xe816('0x72'))]('Interaction\x20already\x20assigned');}}return _0x2c88fb;})[_0xe816('0x1f')](function(_0x13d640){if(_0x13d640){return _0x13d640[_0xe816('0x34')]({'closed':_0x35a221[_0xe816('0x6b')][_0xe816('0x73')],'disposition':_0x35a221['body'][_0xe816('0x74')]})[_0xe816('0x1f')](function(_0x52038f){return _0x52038f;});}})['then'](function(_0x1635c9){return respondWithRpcPromise(_0xe816('0x75'),_0xe816('0x6e'),_0x35a221[_0xe816('0x6b')],client9004);})['then'](respondWithResult(_0x371b4a,null))[_0xe816('0x29')](handleError(_0x371b4a,null));};exports[_0xe816('0x76')]=function(_0x569d7f,_0x1d2403,_0x18181d){_0x569d7f[_0xe816('0x6b')][_0xe816('0x38')]=_0x569d7f[_0xe816('0x77')][_0xe816('0x78')];_0x569d7f[_0xe816('0x6b')][_0xe816('0x79')]=_0x569d7f[_0xe816('0x77')][_0xe816('0x7a')];_0x569d7f[_0xe816('0x6b')]['type']=_0x569d7f[_0xe816('0x77')][_0xe816('0x7b')];return db[_0xe816('0x7c')][_0xe816('0x6a')](_0x569d7f['body'])[_0xe816('0x1f')](respondWithResult(_0x1d2403,0xc9))[_0xe816('0x29')](handleError(_0x1d2403,null));};exports[_0xe816('0x7d')]=function(_0x258af8,_0x1c94ea,_0x49c402){return db[_0xe816('0x3b')][_0xe816('0x7e')]({'where':{'id':_0x258af8['params']['id']},'raw':!![]})[_0xe816('0x1f')](handleEntityNotFound(_0x1c94ea,null))[_0xe816('0x1f')](function(_0x36b904){if(_0x36b904){if(_0x36b904[_0xe816('0x73')]){return _0x1c94ea[_0xe816('0x2a')](0x193)['json']({'status':0x193,'message':_0xe816('0x7f')});}return db[_0xe816('0x7c')][_0xe816('0x7e')]({'where':{'id':_0x258af8[_0xe816('0x3e')][_0xe816('0x80')]},'raw':!![]})[_0xe816('0x1f')](handleEntityNotFound(_0x1c94ea,null));}})[_0xe816('0x1f')](function(_0x2f6236){if(_0x2f6236){return _0x1c94ea[_0xe816('0x81')](path['join'](config[_0xe816('0x82')],_0xe816('0x83'),_0x2f6236['basename']));}})[_0xe816('0x29')](handleError(_0x1c94ea,null));};exports['close']=function(_0x489f8e,_0x322714){var _0x4fb9c1=null;var _0x2aa02b=null;var _0x495036=null;var _0x3f4b16=null;if(_0x489f8e[_0xe816('0x6b')]['id']){delete _0x489f8e[_0xe816('0x6b')]['id'];}if(_0x489f8e['body'][_0xe816('0x84')]){_0x3f4b16=path[_0xe816('0x85')](config[_0xe816('0x82')],_0xe816('0x86'),util[_0xe816('0x87')]('transcript-%s.txt',Date['now']()));_0x489f8e[_0xe816('0x6b')][_0xe816('0x88')]=_0x3f4b16;}return db[_0xe816('0x3b')]['find']({'where':{'id':_0x489f8e['params']['id']},'include':[{'model':db['ChatMessage'],'as':_0xe816('0x59'),'include':[{'model':db['User'],'as':_0xe816('0x5d')}]}]})[_0xe816('0x1f')](handleEntityNotFound(_0x322714,null))['then'](saveUpdates(_0x489f8e[_0xe816('0x6b')],null))[_0xe816('0x1f')](function(_0x23ebaf){if(_0x23ebaf){_0x4fb9c1=_0x23ebaf;return db[_0xe816('0x62')][_0xe816('0x69')]({'where':{'id':_0x4fb9c1[_0xe816('0x89')]}});}})[_0xe816('0x1f')](function(_0x3d29dc){if(_0x3d29dc){_0x495036=_0x3d29dc;return db[_0xe816('0x5f')][_0xe816('0x69')]({'where':{'id':_0x4fb9c1[_0xe816('0x8a')]}});}})['then'](function(_0x312874){if(_0x312874){_0x2aa02b=_0x312874;if(_0x3f4b16){var _0x543413=null;for(var _0x199b10=0x1;_0x199b10<_0x4fb9c1[_0xe816('0x59')][_0xe816('0x44')];++_0x199b10){_0x543413=_0x4fb9c1[_0xe816('0x59')][_0x199b10];var _0x33b956=_0x543413['UserId']?util[_0xe816('0x87')](_0xe816('0x8b'),_0x495036[_0xe816('0x8c')],_0x543413['UserId']):_0xe816('0x8d');var _0xe5ed2d=_0x489f8e[_0xe816('0x6b')][_0xe816('0x8e')]||util['format'](_0xe816('0x8b'),_0xe816('0x8f'),_0x543413[_0xe816('0x8a')]);switch(_0x495036[_0xe816('0x90')]){case _0xe816('0x91'):_0x33b956=_0x543413[_0xe816('0x70')]?util[_0xe816('0x87')]('%s%d',_0x495036['agentAlias'],_0x543413[_0xe816('0x70')]):_0xe816('0x8d');break;case _0xe816('0x92'):_0x33b956=_0x543413[_0xe816('0x70')]?_0x543413[_0xe816('0x5d')]['alias']||_0x543413['User']['fullname']:'System';break;case _0xe816('0x93'):_0x33b956=_0x543413['UserId']?_0x543413[_0xe816('0x5d')][_0xe816('0x5e')]:_0xe816('0x8d');break;default:_0x33b956=_0x543413[_0xe816('0x70')]?util[_0xe816('0x87')]('%s%d',_0x495036['agentAlias'],_0x543413['UserId']):_0xe816('0x8d');}var _0x3d03bc=util[_0xe816('0x87')](_0xe816('0x94'),moment(_0x543413[_0xe816('0x5b')])[_0xe816('0x87')](_0xe816('0x95')),_0x543413[_0xe816('0x5a')]==='in'?_0xe5ed2d:_0x33b956,_0x543413['body']);if(!_0x543413[_0xe816('0x96')]){fs[_0xe816('0x97')](_0x3f4b16,_0x3d03bc);}}return db['MailAccount'][_0xe816('0x7e')]({'where':{'service':!![]},'include':[{'model':db['MailServerOut'],'as':_0xe816('0x98'),'raw':!![]}]});}}})[_0xe816('0x1f')](function(_0x5552d7){if(_0x5552d7&&_0x5552d7[_0xe816('0x98')]&&_0x489f8e[_0xe816('0x6b')]){var _0x5c38b2={'tls':{'rejectUnauthorized':![]}};if(_0x5552d7[_0xe816('0x98')]['service']){_0x5c38b2[_0xe816('0x99')]=_0x5552d7[_0xe816('0x98')][_0xe816('0x99')];}else{_0x5c38b2['host']=_0x5552d7[_0xe816('0x98')]['host'];_0x5c38b2[_0xe816('0x9a')]=_0x5552d7[_0xe816('0x98')][_0xe816('0x9a')];_0x5c38b2['secure']=_0x5552d7[_0xe816('0x98')][_0xe816('0x9b')];}if(_0x5552d7['Smtp']['authentication']){_0x5c38b2[_0xe816('0x9c')]={'user':_0x5552d7[_0xe816('0x98')][_0xe816('0x9d')],'pass':_0x5552d7[_0xe816('0x98')][_0xe816('0x9e')]};}return respondWithRpcPromise(_0xe816('0x9f'),_0xe816('0xa0'),{'account':_0x5c38b2,'message':{'from':util['format']('\x22%s\x22\x20<%s>',_0x5552d7[_0xe816('0x38')],_0x5552d7[_0xe816('0xa1')]||_0x5552d7[_0xe816('0x98')][_0xe816('0x9d')]),'to':_0x489f8e[_0xe816('0x6b')]['mailTranscript'],'subject':_0xe816('0xa2'),'text':util[_0xe816('0x87')](_0xe816('0xa3'),_0x489f8e['body'][_0xe816('0x84')]),'attachments':[{'path':_0x3f4b16}]}})['then'](function(){return _0x4fb9c1;})[_0xe816('0x29')](function(_0x9b8621){console['error'](_0x9b8621);});}else{return _0x4fb9c1;}})[_0xe816('0x1f')](respondWithStatusCode(_0x322714,0xc8))[_0xe816('0x29')](handleError(_0x322714,null));};exports['addMessage']=function(_0x122481,_0x34f724,_0x3434bf){return db['ChatMessage'][_0xe816('0x69')]({'where':{'id':_0x122481[_0xe816('0x68')]['id']}})['then'](handleEntityNotFound(_0x34f724,null))[_0xe816('0x1f')](function(_0x5346c3){if(_0x5346c3){return _0x5346c3[_0xe816('0xa4')](_0x122481[_0xe816('0x6b')][_0xe816('0xa5')],_[_0xe816('0xa6')](_0x122481['body'],[_0xe816('0xa5'),'id'])||{});}})[_0xe816('0x1f')](respondWithResult(_0x34f724,null))[_0xe816('0x29')](handleError(_0x34f724,null));};exports[_0xe816('0xa7')]=function(_0x16839f,_0x5c4e27,_0x21107d){var _0x372b4a={'raw':![],'where':{}};var _0x25f08a={};var _0x5e0045={'count':0x0,'rows':[]};return db[_0xe816('0x3b')][_0xe816('0x7e')]({'where':{'id':_0x16839f[_0xe816('0x68')]['id']}})[_0xe816('0x1f')](handleEntityNotFound(_0x5c4e27,null))['then'](function(_0x357382){if(_0x357382){_0x25f08a[_0xe816('0x3d')]=_[_0xe816('0x3f')](db['ChatMessage'][_0xe816('0x3c')]);_0x25f08a[_0xe816('0x3e')]=_[_0xe816('0x3f')](_0x16839f[_0xe816('0x3e')]);_0x25f08a[_0xe816('0x40')]=_[_0xe816('0x41')](_0x25f08a[_0xe816('0x3d')],_0x25f08a[_0xe816('0x3e')]);_0x372b4a[_0xe816('0x42')]=_[_0xe816('0x41')](_0x25f08a['model'],qs[_0xe816('0x43')](_0x16839f['query']['fields']));_0x372b4a[_0xe816('0x42')]=_0x372b4a[_0xe816('0x42')]['length']?_0x372b4a[_0xe816('0x42')]:_0x25f08a[_0xe816('0x3d')];if(!_0x16839f[_0xe816('0x3e')]['hasOwnProperty'](_0xe816('0x46'))){_0x372b4a[_0xe816('0x2f')]=qs[_0xe816('0x2f')](_0x16839f[_0xe816('0x3e')][_0xe816('0x2f')]);_0x372b4a[_0xe816('0x2e')]=qs['offset'](_0x16839f['query']['offset']);}_0x372b4a['order']=qs['sort'](_0x16839f[_0xe816('0x3e')][_0xe816('0xa8')]);_0x372b4a[_0xe816('0x48')]=qs[_0xe816('0x40')](_[_0xe816('0x49')](_0x16839f['query'],_0x25f08a[_0xe816('0x40')]));_0x372b4a[_0xe816('0x48')][_0xe816('0xa9')]=_0x357382['id'];if(_0x16839f['query'][_0xe816('0x50')]){_0x372b4a[_0xe816('0x48')]=_['merge'](_0x372b4a[_0xe816('0x48')],{'$or':_[_0xe816('0x4b')](_0x372b4a[_0xe816('0x42')],function(_0x4eecfc){var _0xd6e193={};_0xd6e193[_0x4eecfc]={'$like':'%'+_0x16839f['query'][_0xe816('0x50')]+'%'};return _0xd6e193;})});}if(_0x16839f[_0xe816('0x3e')][_0xe816('0xaa')]){var _0x592e0f=_0x16839f[_0xe816('0x3e')][_0xe816('0xaa')]['split'](',');var _0x240e9c={};_0x240e9c[_0x592e0f[0x0]]={'$gte':moment(_0x592e0f[0x1])[_0xe816('0x87')](_0xe816('0xab'))};_0x372b4a[_0xe816('0x48')]=_[_0xe816('0x4a')](_0x372b4a['where'],_0x240e9c);}_0x372b4a=_[_0xe816('0x4a')]({},_0x372b4a,_0x16839f[_0xe816('0x51')]);return db[_0xe816('0x58')]['count']({'where':_0x372b4a[_0xe816('0x48')]})[_0xe816('0x1f')](function(_0xf61346){_0x5e0045['count']=_0xf61346;if(_0x16839f['query'][_0xe816('0x5c')]){_0x372b4a[_0xe816('0x52')]=[{'all':!![]}];}return db['ChatMessage']['findAll'](_0x372b4a);})[_0xe816('0x1f')](function(_0x5205e8){_0x5e0045[_0xe816('0x66')]=_0x5205e8;return _0x5e0045;});}})[_0xe816('0x1f')](respondWithFilteredResult(_0x5c4e27,_0x372b4a))[_0xe816('0x29')](handleError(_0x5c4e27,null));};exports[_0xe816('0xac')]=function(_0x2a9680,_0x156963,_0x32e353){var _0x2e86cf={'where':{}},_0x32b09b={},_0x184233={'count':0x0,'rows':[]};return db[_0xe816('0x3b')]['findOne']({'where':{'id':_0x2a9680['params']['id']}})[_0xe816('0x1f')](handleEntityNotFound(_0x156963,null))[_0xe816('0x1f')](function(_0x5c9d37){if(_0x5c9d37){_0x32b09b[_0xe816('0x3d')]=_[_0xe816('0x3f')](db[_0xe816('0x58')]['rawAttributes']);_0x32b09b[_0xe816('0x3e')]=_['keys'](_0x2a9680[_0xe816('0x3e')]);_0x32b09b['filters']=_['intersection'](_0x32b09b[_0xe816('0x3d')],_0x32b09b[_0xe816('0x3e')]);_0x2e86cf[_0xe816('0x42')]=_[_0xe816('0x41')](_0x32b09b['model'],qs['fields'](_0x2a9680['query'][_0xe816('0x43')]));_0x2e86cf[_0xe816('0x42')]=_0x2e86cf[_0xe816('0x42')][_0xe816('0x44')]?_0x2e86cf[_0xe816('0x42')]:_0x32b09b[_0xe816('0x3d')];if(!_0x2a9680[_0xe816('0x3e')]['hasOwnProperty'](_0xe816('0x46'))){_0x2e86cf[_0xe816('0x2f')]=qs[_0xe816('0x2f')](_0x2a9680[_0xe816('0x3e')]['limit']);_0x2e86cf['offset']=qs[_0xe816('0x2e')](_0x2a9680[_0xe816('0x3e')]['offset']);}_0x2e86cf[_0xe816('0x47')]=qs['sort'](_0x2a9680[_0xe816('0x3e')][_0xe816('0xa8')]);_0x2e86cf[_0xe816('0x48')]=qs[_0xe816('0x40')](_[_0xe816('0x49')](_0x2a9680[_0xe816('0x3e')],_0x32b09b['filters']));_0x2e86cf['where'][_0xe816('0xa9')]=_0x5c9d37['id'];if(_0x2a9680[_0xe816('0x3e')][_0xe816('0x50')]){_0x2e86cf[_0xe816('0x48')]=_['merge'](_0x2e86cf[_0xe816('0x48')],{'$or':_[_0xe816('0x4b')](_0x2e86cf[_0xe816('0x42')],function(_0x379a69){var _0x4850e4={};_0x4850e4[_0x379a69]={'$like':'%'+_0x2a9680['query'][_0xe816('0x50')]+'%'};return _0x4850e4;})});}_0x2e86cf[_0xe816('0x48')][_0xe816('0x96')]=![];if(_0x2a9680[_0xe816('0x3e')]['id']){_0x2e86cf['where']['id']={'$gt':_0x2a9680[_0xe816('0x3e')]['id']};}_0x2e86cf=_[_0xe816('0x4a')]({},_0x2e86cf,_0x2a9680[_0xe816('0x51')]);return db[_0xe816('0x58')][_0xe816('0x2d')]({'where':_0x2e86cf['where']})[_0xe816('0x1f')](function(_0x437a73){_0x184233['count']=_0x437a73;_0x2e86cf[_0xe816('0x52')]=[];if(_0x2a9680[_0xe816('0x3e')][_0xe816('0xad')]){_0x2e86cf[_0xe816('0x52')][_0xe816('0x54')]({'model':db[_0xe816('0x5d')],'as':'User','attributes':['id',_0xe816('0x5e'),_0xe816('0xae')]});}if(_0x2a9680[_0xe816('0x3e')][_0xe816('0x5c')]){_0x2e86cf[_0xe816('0x52')]=[{'all':!![]}];}return db[_0xe816('0x58')]['findAll'](_0x2e86cf);})[_0xe816('0x1f')](function(_0x5bb292){_0x184233[_0xe816('0x66')]=_0x5bb292;return _0x184233;});}})[_0xe816('0x1f')](respondWithFilteredResult(_0x156963,_0x2e86cf))[_0xe816('0x29')](handleError(_0x156963,null));};exports[_0xe816('0xaf')]=function(_0x3935d1,_0x3b9d32,_0x28a3c1){return db['ChatInteraction'][_0xe816('0x69')]({'where':{'id':_0x3935d1[_0xe816('0x68')]['id']}})[_0xe816('0x1f')](handleEntityNotFound(_0x3b9d32,null))['then'](function(_0x442560){if(_0x442560){return _0x442560[_0xe816('0xb0')](_0x3935d1['body']['ids'],_[_0xe816('0xa6')](_0x3935d1[_0xe816('0x6b')],[_0xe816('0xa5'),'id'])||{})[_0xe816('0xb1')](function(){return db[_0xe816('0x63')]['findAll']({'attributes':['id',_0xe816('0x38'),_0xe816('0x64')],'where':{'id':_0x3935d1[_0xe816('0x6b')][_0xe816('0xa5')]}});})[_0xe816('0x1f')](function(_0x25bb4e){socket[_0xe816('0xb2')]('chatInteractionTags:save',{'id':Number(_0x3935d1[_0xe816('0x68')]['id']),'tags':_0x25bb4e||[]});return{'id':Number(_0x3935d1[_0xe816('0x68')]['id']),'tags':_0x25bb4e||[]};});}})[_0xe816('0x1f')](respondWithResult(_0x3b9d32,null))[_0xe816('0x29')](handleError(_0x3b9d32,null));};exports[_0xe816('0xb3')]=function(_0x3e43f4,_0x495af4,_0xe09061){var _0x4d7288;return db[_0xe816('0x3b')][_0xe816('0x69')]({'where':{'id':_0x3e43f4['params']['id']}})['then'](handleEntityNotFound(_0x495af4,null))[_0xe816('0x1f')](function(_0x1fbfed){if(_0x1fbfed){return _0x1fbfed[_0xe816('0xb3')](_0x3e43f4[_0xe816('0x3e')]['ids']);}})[_0xe816('0x1f')](respondWithStatusCode(_0x495af4,null))[_0xe816('0x29')](handleError(_0x495af4,null));};exports[_0xe816('0x81')]=function(_0x19a7c3,_0x36a161){var _0x5952e0=moment()['unix']()[_0xe816('0xb4')]();var _0x14961a=path[_0xe816('0x85')](config[_0xe816('0x82')],_0xe816('0xb5'),_0xe816('0xb6'),_0xe816('0xb7'));var _0x2c9e67=path[_0xe816('0x85')](config[_0xe816('0x82')],'server',_0xe816('0xb6'),_0xe816('0xb8'));var _0x229cb8=path['join'](_0x14961a,_0x5952e0);var _0x198280=util['format'](_0xe816('0xb9'),_0x5952e0);var _0xc2b6c3=path[_0xe816('0x85')](_0x14961a,_0x198280);var _0x48c2fe=![];return db[_0xe816('0x3b')][_0xe816('0x69')]({'where':{'id':_0x19a7c3[_0xe816('0x68')]['id']},'include':[{'model':db['ChatMessage'],'as':_0xe816('0x59'),'attributes':['id',_0xe816('0x6b')],'include':[{'model':db[_0xe816('0x5d')],'as':'User','attributes':['id',_0xe816('0x5e')],'raw':!![]},{'model':db[_0xe816('0x5f')],'as':_0xe816('0x60'),'attributes':['id',_0xe816('0xba')],'raw':!![]},{'model':db[_0xe816('0x7c')],'as':_0xe816('0x7c'),'raw':!![]}]}]})[_0xe816('0x1f')](handleEntityNotFound(_0x36a161,null))[_0xe816('0x1f')](function(_0xd894eb){if(_0xd894eb){_0x48c2fe=!![];var _0x1c4e09='';var _0x32ada9={'format':_0xe816('0xbb'),'border':_0xe816('0xbc')};fs[_0xe816('0xbd')](_0x229cb8);_0x1c4e09+=util[_0xe816('0x87')](_0xe816('0xbe'),_0xd894eb['id']);_0x1c4e09+=util[_0xe816('0x87')](_0xe816('0xbf'),moment()[_0xe816('0x87')](_0xe816('0xc0'))[_0xe816('0xb4')]());_0x1c4e09+=_0xe816('0xc1');for(var _0x47dee5=0x1;_0x47dee5<_0xd894eb[_0xe816('0x59')]['length'];_0x47dee5++){var _0x8045=_0xd894eb[_0xe816('0x59')][_0x47dee5];_0x1c4e09+=_0xe816('0xc2');_0x1c4e09+=util[_0xe816('0x87')](_0xe816('0xc3'),_0x8045[_0xe816('0x5d')]?_0x8045[_0xe816('0x5d')][_0xe816('0x5e')]:_0x8045[_0xe816('0x60')][_0xe816('0xba')],_0x8045['body']);_0x1c4e09+=_0xe816('0xc4');if(_0x8045[_0xe816('0x7c')]){var _0xfc6234=_0x8045[_0xe816('0x7c')];var _0x43d178=path['join'](_0x2c9e67,_0xfc6234[_0xe816('0x79')]);if(fs[_0xe816('0xc5')](_0x43d178)){fs[_0xe816('0xc6')](_0x43d178)[_0xe816('0xc7')](fs[_0xe816('0xc8')](path[_0xe816('0x85')](_0x229cb8,_0xfc6234[_0xe816('0x79')])));}}}return new BPromise(function(_0x2fbd6a,_0x5ed92d){pdf[_0xe816('0x6a')](_0x1c4e09,_0x32ada9)[_0xe816('0xc9')](path[_0xe816('0x85')](_0x229cb8,_0xe816('0xca')+_0x5952e0+_0xe816('0xcb')),function(_0x52bc5b,_0x4839e2){if(_0x52bc5b)return _0x5ed92d(_0x52bc5b);_0x2fbd6a(_0x4839e2);});});}})[_0xe816('0x1f')](function(){if(_0x48c2fe){return new BPromise(function(_0x45e163,_0x14f181){zipdir(_0x229cb8,{'saveTo':_0xc2b6c3},function(_0x25fbe6,_0xaeed0c){if(_0x25fbe6)return _0x14f181(_0x25fbe6);return _0x45e163(_0xaeed0c);});});}})[_0xe816('0x1f')](function(){if(_0x48c2fe){return new BPromise(function(_0x49c956,_0xd44169){rimraf(_0x229cb8,function(_0x1040b5){if(_0x1040b5)_0xd44169(_0x1040b5);return _0x49c956();});});}})[_0xe816('0x1f')](function(){if(_0x48c2fe){return _0x36a161[_0xe816('0x81')](_0xc2b6c3,_0x198280,function(_0x8ed100){if(_0x8ed100){console[_0xe816('0xcc')](_0xe816('0xcd'),_0x8ed100);}else{fs[_0xe816('0xce')](_0xc2b6c3);}});}else{return _0x36a161['sendStatus'](0xc8);}})['catch'](handleError(_0x36a161,null));};
\ No newline at end of file
+var _0x6ceb=['where','pick','filter','merge','map','type','key','VIRTUAL','field','tag','include','push','Tag','distinct','read','ChatMessage','Messages','direction','includeAll','User','Users','fullname','CmContact','Contact','Owner','ChatWebsite','Account','color','findAll','catch','params','intersection','find','create','body','describe','customUpdate','abandon','abandonInteraction,\x20%s,\x20%s,\x20%s','UserId','Sequelize','ValidationError','Interaction\x20already\x20assigned','disposition','AbandonInteraction','attachmentUpload','file','originalname','filename','mimetype','Attachment','attachmentDownload','closed','Unauthorized','findOne','download','root','server/files/attachments/','close','mailTranscript','join','server/files/chat/upload/','transcript-%s.txt','now','ContactId','format','System','customer','%s%d','Visitor','agentIdentifier','agentAlias','agent_alias','alias','agent_fullname','[%s]\x20%s:\x20%s\x0a','appendFileSync','MailAccount','MailServerOut','Smtp','service','host','port','secure','authentication','auth','user','pass','SendMail','sendMail','\x22%s\x22\x20<%s>','Mail\x20Transcript','Hi\x20%s,\x20attached\x20you\x20can\x20find\x20your\x20transcript\x20file.\x20\x0a\x0aRegards.\x20\x0a\x0a','addMessage','ids','getMessages','ChatInteractionId','$gte','split','YYYY-MM-DD\x20HH:mm:ss','options','rows','getMyMessages','addTags','setTags','omit','emit','chatInteractionTags:save','removeTags','toString','files','tmp','attachments','interaction-%s.zip','firstName','Letter','1cm','<h1>Chat\x20Interaction:\x20#%d</h1>','<h2>Date:\x20%s</h2>','<div\x20style=\x22border-style:\x20solid;\x20border-width:\x201px;\x20margin:\x203px;\x22>','<p\x20style=\x22margin:\x203px;\x22>%s:\x20%s</p>','basename','existsSync','createReadStream','pipe','interaction-','.pdf','log','err','unlinkSync','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/utils','../../mysqldb','redis','defaults','localhost','socket.io-emitter','register','jayson/promise','client','http','request','then','info','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','ChatInteraction,\x20%s,\x20%s,\x20%s','stringify','code','error','message','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','destroy','name','send','index','ChatInteraction','rawAttributes','keys','query','filters','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort'];(function(_0x3fba9f,_0x3b7b9b){var _0x192cf1=function(_0x557290){while(--_0x557290){_0x3fba9f['push'](_0x3fba9f['shift']());}};_0x192cf1(++_0x3b7b9b);}(_0x6ceb,0x14b));var _0xb6ce=function(_0x25e3b9,_0x1af82f){_0x25e3b9=_0x25e3b9-0x0;var _0x204a5b=_0x6ceb[_0x25e3b9];return _0x204a5b;};'use strict';var pdf=require(_0xb6ce('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xb6ce('0x1'));var zipdir=require(_0xb6ce('0x2'));var jsonpatch=require(_0xb6ce('0x3'));var rp=require(_0xb6ce('0x4'));var moment=require(_0xb6ce('0x5'));var BPromise=require(_0xb6ce('0x6'));var Mustache=require(_0xb6ce('0x7'));var util=require('util');var path=require(_0xb6ce('0x8'));var sox=require('sox');var csv=require(_0xb6ce('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xb6ce('0xa'));var crypto=require(_0xb6ce('0xb'));var jsforce=require(_0xb6ce('0xc'));var deskjs=require(_0xb6ce('0xd'));var toCsv=require(_0xb6ce('0x9'));var querystring=require(_0xb6ce('0xe'));var Papa=require(_0xb6ce('0xf'));var authService=require(_0xb6ce('0x10'));var hardwareService=require(_0xb6ce('0x11'));var Redis=require(_0xb6ce('0x12'));var qs=require(_0xb6ce('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0xb6ce('0x14'));var config=require('../../config/environment');var db=require(_0xb6ce('0x15'))['db'];config[_0xb6ce('0x16')]=_[_0xb6ce('0x17')](config[_0xb6ce('0x16')],{'host':_0xb6ce('0x18'),'port':0x18eb});var socket=require(_0xb6ce('0x19'))(new Redis(config['redis']));require('./chatInteraction.socket')[_0xb6ce('0x1a')](socket);var jayson=require(_0xb6ce('0x1b'));var client=jayson[_0xb6ce('0x1c')]['http']({'port':0x232b});var client9004=jayson[_0xb6ce('0x1c')][_0xb6ce('0x1d')]({'port':0x232c});function respondWithRpcPromise(_0x368826,_0x3311f9,_0x615c28,_0x3c5424){return new BPromise(function(_0x4d43ad,_0x349144){var _0x339ba2=_0x3c5424||client;return _0x339ba2[_0xb6ce('0x1e')](_0x368826,_0x615c28)[_0xb6ce('0x1f')](function(_0x142287){logger[_0xb6ce('0x20')](_0xb6ce('0x21'),_0x3311f9,_0xb6ce('0x22'));logger[_0xb6ce('0x23')](_0xb6ce('0x24'),_0x3311f9,_0xb6ce('0x22'),JSON[_0xb6ce('0x25')](_0x142287));if(_0x142287['error']){if(_0x142287['error'][_0xb6ce('0x26')]===0x1f4){logger[_0xb6ce('0x27')](_0xb6ce('0x21'),_0x3311f9,_0x142287['error'][_0xb6ce('0x28')]);return _0x349144(_0x142287[_0xb6ce('0x27')]['message']);}logger[_0xb6ce('0x27')](_0xb6ce('0x21'),_0x3311f9,_0x142287[_0xb6ce('0x27')]['message']);return _0x4d43ad(_0x142287['error'][_0xb6ce('0x28')]);}else{logger['info'](_0xb6ce('0x21'),_0x3311f9,'request\x20sent');_0x4d43ad(_0x142287['result'][_0xb6ce('0x28')]);}})['catch'](function(_0x176cf9){logger[_0xb6ce('0x27')]('ChatInteraction,\x20%s,\x20%s',_0x3311f9,_0x176cf9);_0x349144(_0x176cf9);});});}function respondWithStatusCode(_0x43a870,_0x54a8b1){_0x54a8b1=_0x54a8b1||0xcc;return function(_0x264e74){if(_0x264e74){return _0x43a870[_0xb6ce('0x29')](_0x54a8b1);}return _0x43a870[_0xb6ce('0x2a')](_0x54a8b1)[_0xb6ce('0x2b')]();};}function respondWithResult(_0x197a3b,_0x315b8d){_0x315b8d=_0x315b8d||0xc8;return function(_0x25ec0d){if(_0x25ec0d){return _0x197a3b[_0xb6ce('0x2a')](_0x315b8d)[_0xb6ce('0x2c')](_0x25ec0d);}};}function respondWithFilteredResult(_0x1964ad,_0x415f67){return function(_0x10c299){if(_0x10c299){var _0x5c4035=_0x10c299[_0xb6ce('0x2d')],_0x118296=_0x415f67[_0xb6ce('0x2e')],_0x512bbb=_0x415f67[_0xb6ce('0x2e')]+_0x415f67['limit'],_0x5a135d;if(_0x512bbb>=_0x5c4035){_0x512bbb=_0x5c4035;_0x5a135d=0xc8;}else{_0x5a135d=0xce;}_0x1964ad[_0xb6ce('0x2a')](_0x5a135d);return _0x1964ad[_0xb6ce('0x2f')](_0xb6ce('0x30'),_0x118296+'-'+_0x512bbb+'/'+_0x5c4035)[_0xb6ce('0x2c')](_0x10c299);}return null;};}function patchUpdates(_0x29dd86){return function(_0x15956e){try{jsonpatch[_0xb6ce('0x31')](_0x15956e,_0x29dd86,!![]);}catch(_0x2f0836){return BPromise[_0xb6ce('0x32')](_0x2f0836);}return _0x15956e[_0xb6ce('0x33')]();};}function saveUpdates(_0x39a614,_0x56ca71){return function(_0x11f631){if(_0x11f631){return _0x11f631[_0xb6ce('0x34')](_0x39a614)['then'](function(_0x125155){return _0x125155;});}return null;};}function removeEntity(_0x3211fa,_0x4e8c7e){return function(_0x53ac70){if(_0x53ac70){return _0x53ac70[_0xb6ce('0x35')]()[_0xb6ce('0x1f')](function(){_0x3211fa[_0xb6ce('0x2a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5b1304,_0x466b07){return function(_0x794e09){if(!_0x794e09){_0x5b1304[_0xb6ce('0x29')](0x194);}return _0x794e09;};}function handleError(_0x12b278,_0x4a903c){_0x4a903c=_0x4a903c||0x1f4;return function(_0x5cc5b2){logger[_0xb6ce('0x27')](_0x5cc5b2['stack']);if(_0x5cc5b2[_0xb6ce('0x36')]){delete _0x5cc5b2[_0xb6ce('0x36')];}_0x12b278[_0xb6ce('0x2a')](_0x4a903c)[_0xb6ce('0x37')](_0x5cc5b2);};}exports[_0xb6ce('0x38')]=function(_0x597693,_0x4b99a5){var _0xa489ff={},_0x15ada8={},_0x5bbfd7={'count':0x0,'rows':[]};var _0x2c2c1c=db[_0xb6ce('0x39')][_0xb6ce('0x3a')];_0x15ada8['model']=_[_0xb6ce('0x3b')](_0x2c2c1c);_0x15ada8['query']=_[_0xb6ce('0x3b')](_0x597693[_0xb6ce('0x3c')]);_0x15ada8[_0xb6ce('0x3d')]=_['intersection'](_0x15ada8[_0xb6ce('0x3e')],_0x15ada8[_0xb6ce('0x3c')]);_0xa489ff[_0xb6ce('0x3f')]=_['intersection'](_0x15ada8[_0xb6ce('0x3e')],qs[_0xb6ce('0x40')](_0x597693['query'][_0xb6ce('0x40')]));_0xa489ff[_0xb6ce('0x3f')]=_0xa489ff[_0xb6ce('0x3f')][_0xb6ce('0x41')]?_0xa489ff[_0xb6ce('0x3f')]:_0x15ada8[_0xb6ce('0x3e')];if(!_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x42')](_0xb6ce('0x43'))){_0xa489ff[_0xb6ce('0x44')]=qs['limit'](_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x44')]);_0xa489ff[_0xb6ce('0x2e')]=qs[_0xb6ce('0x2e')](_0x597693['query'][_0xb6ce('0x2e')]);}_0xa489ff[_0xb6ce('0x45')]=qs['sort'](_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x46')]);_0xa489ff[_0xb6ce('0x47')]=qs[_0xb6ce('0x3d')](_[_0xb6ce('0x48')](_0x597693[_0xb6ce('0x3c')],_0x15ada8[_0xb6ce('0x3d')]));if(_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x49')]){_0xa489ff[_0xb6ce('0x47')]=_[_0xb6ce('0x4a')](_0xa489ff[_0xb6ce('0x47')],{'$or':_[_0xb6ce('0x4b')](_0x2c2c1c,function(_0x27178f){if(_0x27178f[_0xb6ce('0x4c')][_0xb6ce('0x4d')]!==_0xb6ce('0x4e')){var _0x4ff14f={};_0x4ff14f[_0x27178f[_0xb6ce('0x4f')]]={'$like':'%'+_0x597693['query'][_0xb6ce('0x49')]+'%'};return _0x4ff14f;}})});}_0xa489ff=_[_0xb6ce('0x4a')]({},_0xa489ff,_0x597693['options']);var _0x539d46={'where':_0xa489ff[_0xb6ce('0x47')]};_0x539d46['include']=[];if(_0x597693['query'][_0xb6ce('0x50')]){_0x539d46[_0xb6ce('0x51')][_0xb6ce('0x52')]({'model':db[_0xb6ce('0x53')],'as':'Tags','attributes':['id'],'where':{'id':_0x597693['query']['tag']},'required':!![]});_0x539d46[_0xb6ce('0x54')]=!![];}if(_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x55')]){_0x539d46[_0xb6ce('0x51')][_0xb6ce('0x52')]({'model':db[_0xb6ce('0x56')],'as':_0xb6ce('0x57'),'attributes':['id',_0xb6ce('0x58'),'createdAt','read'],'where':{'direction':'in','read':_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x55')]||![]},'required':!![]});_0x539d46['distinct']=!![];}return db[_0xb6ce('0x39')][_0xb6ce('0x2d')](_0x539d46)[_0xb6ce('0x1f')](function(_0x516cd1){_0x5bbfd7[_0xb6ce('0x2d')]=_0x516cd1;if(_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x59')]){_0xa489ff['include']=[{'model':db[_0xb6ce('0x5a')],'as':_0xb6ce('0x5b'),'required':![],'attributes':['id',_0xb6ce('0x36'),_0xb6ce('0x5c')]},{'model':db[_0xb6ce('0x5d')],'as':_0xb6ce('0x5e'),'required':![]},{'model':db[_0xb6ce('0x5a')],'as':_0xb6ce('0x5f'),'attributes':[_0xb6ce('0x36'),_0xb6ce('0x5c'),'internal'],'required':![]},{'model':db[_0xb6ce('0x60')],'as':_0xb6ce('0x61'),'attributes':[_0xb6ce('0x36'),_0xb6ce('0x4d')],'required':![]},{'model':db[_0xb6ce('0x56')],'as':_0xb6ce('0x57'),'attributes':['id',_0xb6ce('0x58'),'createdAt',_0xb6ce('0x55')],'where':{'direction':'in','read':_0x597693[_0xb6ce('0x3c')]['read']||![]},'required':_0x597693['query'][_0xb6ce('0x55')]||![]},{'model':db[_0xb6ce('0x53')],'as':'Tags','attributes':['id','name',_0xb6ce('0x62')],'required':_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x50')]?!![]:![]},{'model':db['Tag'],'as':'ThroughTags','attributes':['id',_0xb6ce('0x36'),_0xb6ce('0x62')],'through':_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x50')]?{'attributes':[],'where':{'TagId':_0x597693['query']['tag']||undefined}}:{},'required':_0x597693[_0xb6ce('0x3c')][_0xb6ce('0x50')]?!![]:![]}];}return db['ChatInteraction'][_0xb6ce('0x63')](_0xa489ff);})[_0xb6ce('0x1f')](function(_0x25fd18){_0x5bbfd7['rows']=_0x25fd18;return _0x5bbfd7;})['then'](respondWithFilteredResult(_0x4b99a5,_0xa489ff))[_0xb6ce('0x64')](handleError(_0x4b99a5,null));};exports['show']=function(_0x1ddd8d,_0x573051){var _0x157cee={'raw':![],'where':{'id':_0x1ddd8d[_0xb6ce('0x65')]['id']}},_0x1cbf40={};_0x1cbf40[_0xb6ce('0x3e')]=_[_0xb6ce('0x3b')](db[_0xb6ce('0x39')][_0xb6ce('0x3a')]);_0x1cbf40['query']=_[_0xb6ce('0x3b')](_0x1ddd8d[_0xb6ce('0x3c')]);_0x1cbf40[_0xb6ce('0x3d')]=_[_0xb6ce('0x66')](_0x1cbf40[_0xb6ce('0x3e')],_0x1cbf40[_0xb6ce('0x3c')]);_0x157cee[_0xb6ce('0x3f')]=_[_0xb6ce('0x66')](_0x1cbf40['model'],qs[_0xb6ce('0x40')](_0x1ddd8d[_0xb6ce('0x3c')][_0xb6ce('0x40')]));_0x157cee[_0xb6ce('0x3f')]=_0x157cee['attributes'][_0xb6ce('0x41')]?_0x157cee[_0xb6ce('0x3f')]:_0x1cbf40[_0xb6ce('0x3e')];if(_0x1ddd8d['query']['includeAll']){_0x157cee[_0xb6ce('0x51')]=[{'all':!![]}];}_0x157cee=_['merge']({},_0x157cee,_0x1ddd8d['options']);return db[_0xb6ce('0x39')][_0xb6ce('0x67')](_0x157cee)[_0xb6ce('0x1f')](handleEntityNotFound(_0x573051,null))[_0xb6ce('0x1f')](respondWithResult(_0x573051,null))['catch'](handleError(_0x573051,null));};exports['create']=function(_0x3e164b,_0x913c75){return db[_0xb6ce('0x39')][_0xb6ce('0x68')](_0x3e164b[_0xb6ce('0x69')],{})['then'](respondWithResult(_0x913c75,0xc9))['catch'](handleError(_0x913c75,null));};exports[_0xb6ce('0x34')]=function(_0x4aafb0,_0x14e20e){if(_0x4aafb0[_0xb6ce('0x69')]['id']){delete _0x4aafb0[_0xb6ce('0x69')]['id'];}return db[_0xb6ce('0x39')][_0xb6ce('0x67')]({'where':{'id':_0x4aafb0['params']['id']}})[_0xb6ce('0x1f')](handleEntityNotFound(_0x14e20e,null))[_0xb6ce('0x1f')](saveUpdates(_0x4aafb0[_0xb6ce('0x69')],null))[_0xb6ce('0x1f')](respondWithResult(_0x14e20e,null))[_0xb6ce('0x64')](handleError(_0x14e20e,null));};exports[_0xb6ce('0x35')]=function(_0x64b85b,_0x479fdc){return db[_0xb6ce('0x39')][_0xb6ce('0x67')]({'where':{'id':_0x64b85b['params']['id']}})[_0xb6ce('0x1f')](handleEntityNotFound(_0x479fdc,null))[_0xb6ce('0x1f')](removeEntity(_0x479fdc,null))[_0xb6ce('0x64')](handleError(_0x479fdc,null));};exports[_0xb6ce('0x6a')]=function(_0xbc1e44,_0x375182){return db[_0xb6ce('0x39')][_0xb6ce('0x6a')]()[_0xb6ce('0x1f')](respondWithResult(_0x375182,null))[_0xb6ce('0x64')](handleError(_0x375182,null));};exports[_0xb6ce('0x6b')]=function(_0x52bd32,_0x58cebe){if(_0x52bd32[_0xb6ce('0x69')]['id']){delete _0x52bd32[_0xb6ce('0x69')]['id'];}return db[_0xb6ce('0x39')][_0xb6ce('0x67')]({'where':{'id':_0x52bd32[_0xb6ce('0x65')]['id']}})['then'](handleEntityNotFound(_0x58cebe,null))[_0xb6ce('0x1f')](saveUpdates(_0x52bd32['body'],null))[_0xb6ce('0x1f')](respondWithResult(_0x58cebe,null))['catch'](handleError(_0x58cebe,null));};exports[_0xb6ce('0x6c')]=function(_0xab1fc5,_0x5ce5e4,_0x42611f){if(_0xab1fc5['body']['id']){delete _0xab1fc5[_0xb6ce('0x69')]['id'];}return db['ChatInteraction'][_0xb6ce('0x67')]({'where':{'id':_0xab1fc5[_0xb6ce('0x65')]['id']}})[_0xb6ce('0x1f')](function(_0x5a1f9f){if(!_0x5a1f9f){logger[_0xb6ce('0x27')](_0xb6ce('0x6d'),_0xb6ce('0x6c'),0x194,'entity\x20not\x20found');_0x5ce5e4[_0xb6ce('0x29')](0x194);}else{if(_0x5a1f9f[_0xb6ce('0x6e')]){throw new db[(_0xb6ce('0x6f'))][(_0xb6ce('0x70'))](_0xb6ce('0x71'));}}return _0x5a1f9f;})[_0xb6ce('0x1f')](function(_0x2993be){if(_0x2993be){return _0x2993be['update']({'closed':_0xab1fc5[_0xb6ce('0x69')]['closed'],'disposition':_0xab1fc5['body'][_0xb6ce('0x72')]})[_0xb6ce('0x1f')](function(_0x58ae9b){return _0x58ae9b;});}})[_0xb6ce('0x1f')](function(_0x1fffb9){return respondWithRpcPromise(_0xb6ce('0x73'),_0xb6ce('0x6c'),_0xab1fc5[_0xb6ce('0x69')],client9004);})[_0xb6ce('0x1f')](respondWithResult(_0x5ce5e4,null))[_0xb6ce('0x64')](handleError(_0x5ce5e4,null));};exports[_0xb6ce('0x74')]=function(_0xc96002,_0x47248e,_0x231a63){_0xc96002[_0xb6ce('0x69')]['name']=_0xc96002[_0xb6ce('0x75')][_0xb6ce('0x76')];_0xc96002['body']['basename']=_0xc96002[_0xb6ce('0x75')][_0xb6ce('0x77')];_0xc96002[_0xb6ce('0x69')][_0xb6ce('0x4c')]=_0xc96002[_0xb6ce('0x75')][_0xb6ce('0x78')];return db[_0xb6ce('0x79')][_0xb6ce('0x68')](_0xc96002[_0xb6ce('0x69')])['then'](respondWithResult(_0x47248e,0xc9))[_0xb6ce('0x64')](handleError(_0x47248e,null));};exports[_0xb6ce('0x7a')]=function(_0x34185d,_0x3f520f,_0x17f8b7){return db[_0xb6ce('0x39')]['findOne']({'where':{'id':_0x34185d[_0xb6ce('0x65')]['id']},'raw':!![]})['then'](handleEntityNotFound(_0x3f520f,null))[_0xb6ce('0x1f')](function(_0x1ee7a1){if(_0x1ee7a1){if(_0x1ee7a1[_0xb6ce('0x7b')]){return _0x3f520f[_0xb6ce('0x2a')](0x193)[_0xb6ce('0x2c')]({'status':0x193,'message':_0xb6ce('0x7c')});}return db[_0xb6ce('0x79')][_0xb6ce('0x7d')]({'where':{'id':_0x34185d[_0xb6ce('0x3c')]['attachId']},'raw':!![]})[_0xb6ce('0x1f')](handleEntityNotFound(_0x3f520f,null));}})[_0xb6ce('0x1f')](function(_0x1c17ab){if(_0x1c17ab){return _0x3f520f[_0xb6ce('0x7e')](path['join'](config[_0xb6ce('0x7f')],_0xb6ce('0x80'),_0x1c17ab['basename']));}})[_0xb6ce('0x64')](handleError(_0x3f520f,null));};exports[_0xb6ce('0x81')]=function(_0x12e540,_0x5b4594){var _0x99cf2e=null;var _0xde524=null;var _0x3e17b1=null;var _0x556d23=null;if(_0x12e540['body']['id']){delete _0x12e540[_0xb6ce('0x69')]['id'];}if(_0x12e540[_0xb6ce('0x69')][_0xb6ce('0x82')]){_0x556d23=path[_0xb6ce('0x83')](config['root'],_0xb6ce('0x84'),util['format'](_0xb6ce('0x85'),Date[_0xb6ce('0x86')]()));_0x12e540[_0xb6ce('0x69')]['pathTranscript']=_0x556d23;}return db[_0xb6ce('0x39')][_0xb6ce('0x67')]({'where':{'id':_0x12e540[_0xb6ce('0x65')]['id']},'include':[{'model':db['ChatMessage'],'as':_0xb6ce('0x57'),'include':[{'model':db[_0xb6ce('0x5a')],'as':_0xb6ce('0x5a')}]}]})[_0xb6ce('0x1f')](handleEntityNotFound(_0x5b4594,null))['then'](saveUpdates(_0x12e540[_0xb6ce('0x69')],null))[_0xb6ce('0x1f')](function(_0x2d6326){if(_0x2d6326){_0x99cf2e=_0x2d6326;return db[_0xb6ce('0x60')]['find']({'where':{'id':_0x99cf2e['ChatWebsiteId']}});}})['then'](function(_0x48c76b){if(_0x48c76b){_0x3e17b1=_0x48c76b;return db[_0xb6ce('0x5d')]['find']({'where':{'id':_0x99cf2e[_0xb6ce('0x87')]}});}})[_0xb6ce('0x1f')](function(_0x57cf73){if(_0x57cf73){_0xde524=_0x57cf73;if(_0x556d23){var _0x4513a9=null;for(var _0x4acb8d=0x1;_0x4acb8d<_0x99cf2e[_0xb6ce('0x57')]['length'];++_0x4acb8d){_0x4513a9=_0x99cf2e['Messages'][_0x4acb8d];var _0x7621a4=_0x4513a9[_0xb6ce('0x6e')]?util[_0xb6ce('0x88')]('%s%d',_0x3e17b1['agentAlias'],_0x4513a9[_0xb6ce('0x6e')]):_0xb6ce('0x89');var _0x57d1b3=_0x12e540[_0xb6ce('0x69')][_0xb6ce('0x8a')]||util[_0xb6ce('0x88')](_0xb6ce('0x8b'),_0xb6ce('0x8c'),_0x4513a9['ContactId']);switch(_0x3e17b1[_0xb6ce('0x8d')]){case'website_alias':_0x7621a4=_0x4513a9[_0xb6ce('0x6e')]?util[_0xb6ce('0x88')](_0xb6ce('0x8b'),_0x3e17b1[_0xb6ce('0x8e')],_0x4513a9[_0xb6ce('0x6e')]):'System';break;case _0xb6ce('0x8f'):_0x7621a4=_0x4513a9[_0xb6ce('0x6e')]?_0x4513a9[_0xb6ce('0x5a')][_0xb6ce('0x90')]||_0x4513a9['User']['fullname']:_0xb6ce('0x89');break;case _0xb6ce('0x91'):_0x7621a4=_0x4513a9['UserId']?_0x4513a9[_0xb6ce('0x5a')][_0xb6ce('0x5c')]:_0xb6ce('0x89');break;default:_0x7621a4=_0x4513a9['UserId']?util[_0xb6ce('0x88')]('%s%d',_0x3e17b1[_0xb6ce('0x8e')],_0x4513a9['UserId']):_0xb6ce('0x89');}var _0x246b9b=util[_0xb6ce('0x88')](_0xb6ce('0x92'),moment(_0x4513a9['createdAt'])[_0xb6ce('0x88')]('MM/DD/YYYY\x20HH:mm:ss'),_0x4513a9[_0xb6ce('0x58')]==='in'?_0x57d1b3:_0x7621a4,_0x4513a9[_0xb6ce('0x69')]);if(!_0x4513a9['secret']){fs[_0xb6ce('0x93')](_0x556d23,_0x246b9b);}}return db[_0xb6ce('0x94')][_0xb6ce('0x7d')]({'where':{'service':!![]},'include':[{'model':db[_0xb6ce('0x95')],'as':'Smtp','raw':!![]}]});}}})['then'](function(_0x208766){if(_0x208766&&_0x208766[_0xb6ce('0x96')]&&_0x12e540['body']){var _0x547b36={'tls':{'rejectUnauthorized':![]}};if(_0x208766[_0xb6ce('0x96')][_0xb6ce('0x97')]){_0x547b36[_0xb6ce('0x97')]=_0x208766[_0xb6ce('0x96')][_0xb6ce('0x97')];}else{_0x547b36['host']=_0x208766[_0xb6ce('0x96')][_0xb6ce('0x98')];_0x547b36[_0xb6ce('0x99')]=_0x208766['Smtp'][_0xb6ce('0x99')];_0x547b36[_0xb6ce('0x9a')]=_0x208766[_0xb6ce('0x96')][_0xb6ce('0x9a')];}if(_0x208766[_0xb6ce('0x96')][_0xb6ce('0x9b')]){_0x547b36[_0xb6ce('0x9c')]={'user':_0x208766['Smtp'][_0xb6ce('0x9d')],'pass':_0x208766[_0xb6ce('0x96')][_0xb6ce('0x9e')]};}return respondWithRpcPromise(_0xb6ce('0x9f'),_0xb6ce('0xa0'),{'account':_0x547b36,'message':{'from':util[_0xb6ce('0x88')](_0xb6ce('0xa1'),_0x208766[_0xb6ce('0x36')],_0x208766['email']||_0x208766[_0xb6ce('0x96')][_0xb6ce('0x9d')]),'to':_0x12e540[_0xb6ce('0x69')][_0xb6ce('0x82')],'subject':_0xb6ce('0xa2'),'text':util[_0xb6ce('0x88')](_0xb6ce('0xa3'),_0x12e540['body'][_0xb6ce('0x82')]),'attachments':[{'path':_0x556d23}]}})[_0xb6ce('0x1f')](function(){return _0x99cf2e;})['catch'](function(_0x10df1a){console[_0xb6ce('0x27')](_0x10df1a);});}else{return _0x99cf2e;}})[_0xb6ce('0x1f')](respondWithStatusCode(_0x5b4594,0xc8))['catch'](handleError(_0x5b4594,null));};exports[_0xb6ce('0xa4')]=function(_0xf43447,_0x590d8a,_0x430c41){return db[_0xb6ce('0x56')][_0xb6ce('0x67')]({'where':{'id':_0xf43447[_0xb6ce('0x65')]['id']}})[_0xb6ce('0x1f')](handleEntityNotFound(_0x590d8a,null))['then'](function(_0x5ad315){if(_0x5ad315){return _0x5ad315[_0xb6ce('0xa4')](_0xf43447[_0xb6ce('0x69')]['ids'],_['omit'](_0xf43447['body'],[_0xb6ce('0xa5'),'id'])||{});}})[_0xb6ce('0x1f')](respondWithResult(_0x590d8a,null))['catch'](handleError(_0x590d8a,null));};exports[_0xb6ce('0xa6')]=function(_0x164dfa,_0x57163a,_0x515c97){var _0x223c47={'raw':![],'where':{}};var _0x48df25={};var _0x388f85={'count':0x0,'rows':[]};return db[_0xb6ce('0x39')][_0xb6ce('0x7d')]({'where':{'id':_0x164dfa[_0xb6ce('0x65')]['id']}})[_0xb6ce('0x1f')](handleEntityNotFound(_0x57163a,null))[_0xb6ce('0x1f')](function(_0x29881d){if(_0x29881d){_0x48df25[_0xb6ce('0x3e')]=_[_0xb6ce('0x3b')](db['ChatMessage'][_0xb6ce('0x3a')]);_0x48df25[_0xb6ce('0x3c')]=_[_0xb6ce('0x3b')](_0x164dfa[_0xb6ce('0x3c')]);_0x48df25['filters']=_[_0xb6ce('0x66')](_0x48df25[_0xb6ce('0x3e')],_0x48df25['query']);_0x223c47[_0xb6ce('0x3f')]=_[_0xb6ce('0x66')](_0x48df25[_0xb6ce('0x3e')],qs[_0xb6ce('0x40')](_0x164dfa[_0xb6ce('0x3c')][_0xb6ce('0x40')]));_0x223c47[_0xb6ce('0x3f')]=_0x223c47[_0xb6ce('0x3f')][_0xb6ce('0x41')]?_0x223c47['attributes']:_0x48df25[_0xb6ce('0x3e')];if(!_0x164dfa[_0xb6ce('0x3c')][_0xb6ce('0x42')](_0xb6ce('0x43'))){_0x223c47[_0xb6ce('0x44')]=qs[_0xb6ce('0x44')](_0x164dfa[_0xb6ce('0x3c')]['limit']);_0x223c47[_0xb6ce('0x2e')]=qs[_0xb6ce('0x2e')](_0x164dfa[_0xb6ce('0x3c')][_0xb6ce('0x2e')]);}_0x223c47[_0xb6ce('0x45')]=qs['sort'](_0x164dfa[_0xb6ce('0x3c')][_0xb6ce('0x46')]);_0x223c47[_0xb6ce('0x47')]=qs['filters'](_['pick'](_0x164dfa['query'],_0x48df25[_0xb6ce('0x3d')]));_0x223c47['where'][_0xb6ce('0xa7')]=_0x29881d['id'];if(_0x164dfa['query'][_0xb6ce('0x49')]){_0x223c47['where']=_[_0xb6ce('0x4a')](_0x223c47['where'],{'$or':_[_0xb6ce('0x4b')](_0x223c47[_0xb6ce('0x3f')],function(_0x418118){var _0x4aed04={};_0x4aed04[_0x418118]={'$like':'%'+_0x164dfa[_0xb6ce('0x3c')][_0xb6ce('0x49')]+'%'};return _0x4aed04;})});}if(_0x164dfa[_0xb6ce('0x3c')][_0xb6ce('0xa8')]){var _0x454c7a=_0x164dfa['query'][_0xb6ce('0xa8')][_0xb6ce('0xa9')](',');var _0x3017d5={};_0x3017d5[_0x454c7a[0x0]]={'$gte':moment(_0x454c7a[0x1])[_0xb6ce('0x88')](_0xb6ce('0xaa'))};_0x223c47[_0xb6ce('0x47')]=_[_0xb6ce('0x4a')](_0x223c47[_0xb6ce('0x47')],_0x3017d5);}_0x223c47=_[_0xb6ce('0x4a')]({},_0x223c47,_0x164dfa[_0xb6ce('0xab')]);return db[_0xb6ce('0x56')][_0xb6ce('0x2d')]({'where':_0x223c47[_0xb6ce('0x47')]})[_0xb6ce('0x1f')](function(_0x26648f){_0x388f85['count']=_0x26648f;if(_0x164dfa[_0xb6ce('0x3c')][_0xb6ce('0x59')]){_0x223c47['include']=[{'all':!![]}];}return db[_0xb6ce('0x56')]['findAll'](_0x223c47);})[_0xb6ce('0x1f')](function(_0x3baed1){_0x388f85[_0xb6ce('0xac')]=_0x3baed1;return _0x388f85;});}})[_0xb6ce('0x1f')](respondWithFilteredResult(_0x57163a,_0x223c47))['catch'](handleError(_0x57163a,null));};exports[_0xb6ce('0xad')]=function(_0x5f284,_0xb523fe,_0x308624){var _0x3a3fd8={'where':{}},_0x2422d4={},_0x47806e={'count':0x0,'rows':[]};return db['ChatInteraction'][_0xb6ce('0x7d')]({'where':{'id':_0x5f284['params']['id']}})[_0xb6ce('0x1f')](handleEntityNotFound(_0xb523fe,null))[_0xb6ce('0x1f')](function(_0x5f1f33){if(_0x5f1f33){_0x2422d4[_0xb6ce('0x3e')]=_[_0xb6ce('0x3b')](db[_0xb6ce('0x56')][_0xb6ce('0x3a')]);_0x2422d4[_0xb6ce('0x3c')]=_['keys'](_0x5f284[_0xb6ce('0x3c')]);_0x2422d4['filters']=_[_0xb6ce('0x66')](_0x2422d4[_0xb6ce('0x3e')],_0x2422d4[_0xb6ce('0x3c')]);_0x3a3fd8[_0xb6ce('0x3f')]=_[_0xb6ce('0x66')](_0x2422d4[_0xb6ce('0x3e')],qs[_0xb6ce('0x40')](_0x5f284[_0xb6ce('0x3c')][_0xb6ce('0x40')]));_0x3a3fd8['attributes']=_0x3a3fd8[_0xb6ce('0x3f')][_0xb6ce('0x41')]?_0x3a3fd8[_0xb6ce('0x3f')]:_0x2422d4[_0xb6ce('0x3e')];if(!_0x5f284[_0xb6ce('0x3c')]['hasOwnProperty']('nolimit')){_0x3a3fd8[_0xb6ce('0x44')]=qs[_0xb6ce('0x44')](_0x5f284[_0xb6ce('0x3c')][_0xb6ce('0x44')]);_0x3a3fd8[_0xb6ce('0x2e')]=qs[_0xb6ce('0x2e')](_0x5f284['query'][_0xb6ce('0x2e')]);}_0x3a3fd8[_0xb6ce('0x45')]=qs[_0xb6ce('0x46')](_0x5f284[_0xb6ce('0x3c')]['sort']);_0x3a3fd8[_0xb6ce('0x47')]=qs['filters'](_['pick'](_0x5f284['query'],_0x2422d4[_0xb6ce('0x3d')]));_0x3a3fd8[_0xb6ce('0x47')][_0xb6ce('0xa7')]=_0x5f1f33['id'];if(_0x5f284[_0xb6ce('0x3c')][_0xb6ce('0x49')]){_0x3a3fd8[_0xb6ce('0x47')]=_[_0xb6ce('0x4a')](_0x3a3fd8['where'],{'$or':_[_0xb6ce('0x4b')](_0x3a3fd8[_0xb6ce('0x3f')],function(_0x4f541a){var _0x48db23={};_0x48db23[_0x4f541a]={'$like':'%'+_0x5f284['query'][_0xb6ce('0x49')]+'%'};return _0x48db23;})});}_0x3a3fd8[_0xb6ce('0x47')]['secret']=![];if(_0x5f284[_0xb6ce('0x3c')]['id']){_0x3a3fd8[_0xb6ce('0x47')]['id']={'$gt':_0x5f284[_0xb6ce('0x3c')]['id']};}_0x3a3fd8=_[_0xb6ce('0x4a')]({},_0x3a3fd8,_0x5f284['options']);return db[_0xb6ce('0x56')]['count']({'where':_0x3a3fd8[_0xb6ce('0x47')]})[_0xb6ce('0x1f')](function(_0x363c10){_0x47806e[_0xb6ce('0x2d')]=_0x363c10;_0x3a3fd8[_0xb6ce('0x51')]=[];if(_0x5f284['query']['includeAgent']){_0x3a3fd8[_0xb6ce('0x51')]['push']({'model':db[_0xb6ce('0x5a')],'as':_0xb6ce('0x5a'),'attributes':['id',_0xb6ce('0x5c'),_0xb6ce('0x90')]});}if(_0x5f284[_0xb6ce('0x3c')][_0xb6ce('0x59')]){_0x3a3fd8[_0xb6ce('0x51')]=[{'all':!![]}];}return db[_0xb6ce('0x56')]['findAll'](_0x3a3fd8);})[_0xb6ce('0x1f')](function(_0x50c5b9){_0x47806e[_0xb6ce('0xac')]=_0x50c5b9;return _0x47806e;});}})['then'](respondWithFilteredResult(_0xb523fe,_0x3a3fd8))[_0xb6ce('0x64')](handleError(_0xb523fe,null));};exports[_0xb6ce('0xae')]=function(_0x4cb89a,_0x22eb22,_0x57ebff){return db[_0xb6ce('0x39')][_0xb6ce('0x67')]({'where':{'id':_0x4cb89a[_0xb6ce('0x65')]['id']}})[_0xb6ce('0x1f')](handleEntityNotFound(_0x22eb22,null))[_0xb6ce('0x1f')](function(_0x27ca42){if(_0x27ca42){return _0x27ca42[_0xb6ce('0xaf')](_0x4cb89a[_0xb6ce('0x69')]['ids'],_[_0xb6ce('0xb0')](_0x4cb89a[_0xb6ce('0x69')],[_0xb6ce('0xa5'),'id'])||{})['spread'](function(){return db[_0xb6ce('0x53')]['findAll']({'attributes':['id','name',_0xb6ce('0x62')],'where':{'id':_0x4cb89a['body'][_0xb6ce('0xa5')]}});})['then'](function(_0x3379f6){socket[_0xb6ce('0xb1')](_0xb6ce('0xb2'),{'id':Number(_0x4cb89a['params']['id']),'tags':_0x3379f6||[]});return{'id':Number(_0x4cb89a['params']['id']),'tags':_0x3379f6||[]};});}})[_0xb6ce('0x1f')](respondWithResult(_0x22eb22,null))['catch'](handleError(_0x22eb22,null));};exports[_0xb6ce('0xb3')]=function(_0x16bb32,_0x47d51c,_0x55b766){var _0x275e41;return db[_0xb6ce('0x39')][_0xb6ce('0x67')]({'where':{'id':_0x16bb32[_0xb6ce('0x65')]['id']}})[_0xb6ce('0x1f')](handleEntityNotFound(_0x47d51c,null))[_0xb6ce('0x1f')](function(_0x52dc49){if(_0x52dc49){return _0x52dc49[_0xb6ce('0xb3')](_0x16bb32['query'][_0xb6ce('0xa5')]);}})[_0xb6ce('0x1f')](respondWithStatusCode(_0x47d51c,null))[_0xb6ce('0x64')](handleError(_0x47d51c,null));};exports['download']=function(_0x2a7f08,_0x51be78){var _0x41edce=moment()['unix']()[_0xb6ce('0xb4')]();var _0x452c19=path[_0xb6ce('0x83')](config[_0xb6ce('0x7f')],'server',_0xb6ce('0xb5'),_0xb6ce('0xb6'));var _0x4818f4=path[_0xb6ce('0x83')](config['root'],'server',_0xb6ce('0xb5'),_0xb6ce('0xb7'));var _0x5de70c=path[_0xb6ce('0x83')](_0x452c19,_0x41edce);var _0x579c56=util[_0xb6ce('0x88')](_0xb6ce('0xb8'),_0x41edce);var _0xbcac63=path[_0xb6ce('0x83')](_0x452c19,_0x579c56);var _0x981279=![];return db[_0xb6ce('0x39')][_0xb6ce('0x67')]({'where':{'id':_0x2a7f08['params']['id']},'include':[{'model':db[_0xb6ce('0x56')],'as':_0xb6ce('0x57'),'attributes':['id',_0xb6ce('0x69')],'include':[{'model':db[_0xb6ce('0x5a')],'as':_0xb6ce('0x5a'),'attributes':['id',_0xb6ce('0x5c')],'raw':!![]},{'model':db['CmContact'],'as':_0xb6ce('0x5e'),'attributes':['id',_0xb6ce('0xb9')],'raw':!![]},{'model':db['Attachment'],'as':'Attachment','raw':!![]}]}]})[_0xb6ce('0x1f')](handleEntityNotFound(_0x51be78,null))[_0xb6ce('0x1f')](function(_0xcb032e){if(_0xcb032e){_0x981279=!![];var _0x5f1198='';var _0x41b0cf={'format':_0xb6ce('0xba'),'border':_0xb6ce('0xbb')};fs['mkdirSync'](_0x5de70c);_0x5f1198+=util['format'](_0xb6ce('0xbc'),_0xcb032e['id']);_0x5f1198+=util['format'](_0xb6ce('0xbd'),moment()[_0xb6ce('0x88')]('MMMM\x20Do\x20YYYY,\x20HH:mm:ss')['toString']());_0x5f1198+='<hr>';for(var _0x13ab27=0x1;_0x13ab27<_0xcb032e[_0xb6ce('0x57')]['length'];_0x13ab27++){var _0x4abb57=_0xcb032e[_0xb6ce('0x57')][_0x13ab27];_0x5f1198+=_0xb6ce('0xbe');_0x5f1198+=util[_0xb6ce('0x88')](_0xb6ce('0xbf'),_0x4abb57['User']?_0x4abb57[_0xb6ce('0x5a')][_0xb6ce('0x5c')]:_0x4abb57[_0xb6ce('0x5e')]['firstName'],_0x4abb57[_0xb6ce('0x69')]);_0x5f1198+='</div>';if(_0x4abb57[_0xb6ce('0x79')]){var _0x4a23db=_0x4abb57['Attachment'];var _0x425059=path['join'](_0x4818f4,_0x4a23db[_0xb6ce('0xc0')]);if(fs[_0xb6ce('0xc1')](_0x425059)){fs[_0xb6ce('0xc2')](_0x425059)[_0xb6ce('0xc3')](fs['createWriteStream'](path[_0xb6ce('0x83')](_0x5de70c,_0x4a23db[_0xb6ce('0xc0')])));}}}return new BPromise(function(_0x53d561,_0x3327ac){pdf[_0xb6ce('0x68')](_0x5f1198,_0x41b0cf)['toFile'](path[_0xb6ce('0x83')](_0x5de70c,_0xb6ce('0xc4')+_0x41edce+_0xb6ce('0xc5')),function(_0x20be70,_0x2af786){if(_0x20be70)return _0x3327ac(_0x20be70);_0x53d561(_0x2af786);});});}})[_0xb6ce('0x1f')](function(){if(_0x981279){return new BPromise(function(_0x1372cd,_0x3e0a24){zipdir(_0x5de70c,{'saveTo':_0xbcac63},function(_0x10e8f5,_0x4d63d5){if(_0x10e8f5)return _0x3e0a24(_0x10e8f5);return _0x1372cd(_0x4d63d5);});});}})[_0xb6ce('0x1f')](function(){if(_0x981279){return new BPromise(function(_0x5961ca,_0x310bb9){rimraf(_0x5de70c,function(_0x5919e7){if(_0x5919e7)_0x310bb9(_0x5919e7);return _0x5961ca();});});}})[_0xb6ce('0x1f')](function(){if(_0x981279){return _0x51be78[_0xb6ce('0x7e')](_0xbcac63,_0x579c56,function(_0x2224c5){if(_0x2224c5){console[_0xb6ce('0xc6')](_0xb6ce('0xc7'),_0x2224c5);}else{fs[_0xb6ce('0xc8')](_0xbcac63);}});}else{return _0x51be78[_0xb6ce('0x29')](0xc8);}})[_0xb6ce('0x64')](handleError(_0x51be78,null));};
\ No newline at end of file
index aa0a4b9..a5dc3d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3923=['hook','exports','events','../../mysqldb','ChatInteraction','setMaxListeners','update','remove','hasOwnProperty'];(function(_0x113ac3,_0x4c8735){var _0x59f07c=function(_0x524898){while(--_0x524898){_0x113ac3['push'](_0x113ac3['shift']());}};_0x59f07c(++_0x4c8735);}(_0x3923,0xc8));var _0x3392=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x3923[_0x19e35c];return _0x3e1fe8;};'use strict';var EventEmitter=require(_0x3392('0x0'));var ChatInteraction=require(_0x3392('0x1'))['db'][_0x3392('0x2')];var ChatInteractionEvents=new EventEmitter();ChatInteractionEvents[_0x3392('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x3392('0x4'),'afterDestroy':_0x3392('0x5')};function emitEvent(_0x9c206d){return function(_0x5c0371,_0x17b88c,_0x5904b0){ChatInteractionEvents['emit'](_0x9c206d+':'+_0x5c0371['id'],_0x5c0371);ChatInteractionEvents['emit'](_0x9c206d,_0x5c0371);_0x5904b0(null);};}for(var e in events){if(events[_0x3392('0x6')](e)){var event=events[e];ChatInteraction[_0x3392('0x7')](e,emitEvent(event));}}module[_0x3392('0x8')]=ChatInteractionEvents;
\ No newline at end of file
+var _0x514d=['save','update','remove','emit','hasOwnProperty','exports','events','../../mysqldb','ChatInteraction'];(function(_0x543b70,_0x2a4e2b){var _0x3489b3=function(_0x1f7083){while(--_0x1f7083){_0x543b70['push'](_0x543b70['shift']());}};_0x3489b3(++_0x2a4e2b);}(_0x514d,0x1e3));var _0xd514=function(_0x287428,_0x5a62c2){_0x287428=_0x287428-0x0;var _0x5169c2=_0x514d[_0x287428];return _0x5169c2;};'use strict';var EventEmitter=require(_0xd514('0x0'));var ChatInteraction=require(_0xd514('0x1'))['db'][_0xd514('0x2')];var ChatInteractionEvents=new EventEmitter();ChatInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xd514('0x3'),'afterUpdate':_0xd514('0x4'),'afterDestroy':_0xd514('0x5')};function emitEvent(_0x1befa1){return function(_0x21522a,_0x40dce5,_0xc7afe8){ChatInteractionEvents[_0xd514('0x6')](_0x1befa1+':'+_0x21522a['id'],_0x21522a);ChatInteractionEvents[_0xd514('0x6')](_0x1befa1,_0x21522a);_0xc7afe8(null);};}for(var e in events){if(events[_0xd514('0x7')](e)){var event=events[e];ChatInteraction['hook'](e,emitEvent(event));}}module[_0xd514('0x8')]=ChatInteractionEvents;
\ No newline at end of file
index 841c6f6..6174a4e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaa30=['chat_interactions','closed','closedAt','YYYY-MM-DD\x20HH:mm:ss','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','moment','bluebird','./chatInteraction.attributes','exports','define'];(function(_0x1cf287,_0x246f4d){var _0xb2cd59=function(_0x5bea43){while(--_0x5bea43){_0x1cf287['push'](_0x1cf287['shift']());}};_0xb2cd59(++_0x246f4d);}(_0xaa30,0x18d));var _0x0aa3=function(_0x12d033,_0x25fa2f){_0x12d033=_0x12d033-0x0;var _0x3b4e80=_0xaa30[_0x12d033];return _0x3b4e80;};'use strict';var _=require(_0x0aa3('0x0'));var util=require(_0x0aa3('0x1'));var logger=require(_0x0aa3('0x2'))(_0x0aa3('0x3'));var moment=require(_0x0aa3('0x4'));var BPromise=require(_0x0aa3('0x5'));var rp=require('request-promise');var attributes=require(_0x0aa3('0x6'));module[_0x0aa3('0x7')]=function(_0x6ac4dd,_0x5ab9fb){return _0x6ac4dd[_0x0aa3('0x8')]('ChatInteraction',attributes,{'tableName':_0x0aa3('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0xbe5edc,_0x4b83a9,_0x298475){if(_0xbe5edc['changed'](_0x0aa3('0xa'))){_0xbe5edc[_0x0aa3('0xb')]=moment()['format'](_0x0aa3('0xc'));}_0x298475(null,_0xbe5edc);}},'charset':'utf8mb4','collate':_0x0aa3('0xd')});};
\ No newline at end of file
+var _0x1f3b=['util','../../config/logger','api','moment','request-promise','exports','define','chat_interactions','changed','closed','closedAt','format','YYYY-MM-DD\x20HH:mm:ss','utf8mb4_unicode_ci','lodash'];(function(_0x3785ad,_0x6071ef){var _0x14d378=function(_0x9bd7a5){while(--_0x9bd7a5){_0x3785ad['push'](_0x3785ad['shift']());}};_0x14d378(++_0x6071ef);}(_0x1f3b,0x1a3));var _0xb1f3=function(_0x133968,_0x5ca58b){_0x133968=_0x133968-0x0;var _0x14a75a=_0x1f3b[_0x133968];return _0x14a75a;};'use strict';var _=require(_0xb1f3('0x0'));var util=require(_0xb1f3('0x1'));var logger=require(_0xb1f3('0x2'))(_0xb1f3('0x3'));var moment=require(_0xb1f3('0x4'));var BPromise=require('bluebird');var rp=require(_0xb1f3('0x5'));var attributes=require('./chatInteraction.attributes');module[_0xb1f3('0x6')]=function(_0x20ecfd,_0x3c06c1){return _0x20ecfd[_0xb1f3('0x7')]('ChatInteraction',attributes,{'tableName':_0xb1f3('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x567b85,_0x25edcb,_0x544264){if(_0x567b85[_0xb1f3('0x9')](_0xb1f3('0xa'))){_0x567b85[_0xb1f3('0xb')]=moment()[_0xb1f3('0xc')](_0xb1f3('0xd'));}_0x544264(null,_0x567b85);}},'charset':'utf8mb4','collate':_0xb1f3('0xe')});};
\ No newline at end of file
index 0269406..848504d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9dbe=['rpc','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','./chatInteraction.socket','register','request','then','ChatInteraction,\x20%s,\x20%s','request\x20sent','debug','code','error','message','result','catch','UpdateChatInteraction','ChatInteraction','update','body','options','attributes','info','stringify','AddTagsToChatInteraction','where','addTags','ids','omit','AddTags','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x47b6c0,_0x500c61){var _0x1dfd8c=function(_0x2d7213){while(--_0x2d7213){_0x47b6c0['push'](_0x47b6c0['shift']());}};_0x1dfd8c(++_0x500c61);}(_0x9dbe,0x147));var _0xe9db=function(_0x2b18e5,_0x1a141c){_0x2b18e5=_0x2b18e5-0x0;var _0x12e52c=_0x9dbe[_0x2b18e5];return _0x12e52c;};'use strict';var _=require(_0xe9db('0x0'));var util=require(_0xe9db('0x1'));var moment=require(_0xe9db('0x2'));var BPromise=require(_0xe9db('0x3'));var rs=require(_0xe9db('0x4'));var fs=require('fs');var Redis=require(_0xe9db('0x5'));var db=require(_0xe9db('0x6'))['db'];var utils=require(_0xe9db('0x7'));var logger=require(_0xe9db('0x8'))(_0xe9db('0x9'));var config=require('../../config/environment');var jayson=require(_0xe9db('0xa'));var client=jayson[_0xe9db('0xb')]['http']({'port':0x232a});config[_0xe9db('0xc')]=_[_0xe9db('0xd')](config[_0xe9db('0xc')],{'host':_0xe9db('0xe'),'port':0x18eb});var socket=require(_0xe9db('0xf'))(new Redis(config[_0xe9db('0xc')]));require(_0xe9db('0x10'))[_0xe9db('0x11')](socket);function respondWithRpcPromise(_0x34f1e3,_0x2fd091,_0x26fbaa){return new BPromise(function(_0xb568cd,_0x32f814){return client[_0xe9db('0x12')](_0x34f1e3,_0x26fbaa)[_0xe9db('0x13')](function(_0x35a42a){logger['info'](_0xe9db('0x14'),_0x2fd091,_0xe9db('0x15'));logger[_0xe9db('0x16')]('ChatInteraction,\x20%s,\x20%s,\x20%s',_0x2fd091,_0xe9db('0x15'),JSON['stringify'](_0x35a42a));if(_0x35a42a['error']){if(_0x35a42a['error'][_0xe9db('0x17')]===0x1f4){logger[_0xe9db('0x18')](_0xe9db('0x14'),_0x2fd091,_0x35a42a[_0xe9db('0x18')][_0xe9db('0x19')]);return _0x32f814(_0x35a42a[_0xe9db('0x18')][_0xe9db('0x19')]);}logger[_0xe9db('0x18')](_0xe9db('0x14'),_0x2fd091,_0x35a42a['error'][_0xe9db('0x19')]);return _0xb568cd(_0x35a42a['error']['message']);}else{logger['info']('ChatInteraction,\x20%s,\x20%s',_0x2fd091,_0xe9db('0x15'));_0xb568cd(_0x35a42a[_0xe9db('0x1a')][_0xe9db('0x19')]);}})[_0xe9db('0x1b')](function(_0x429b76){logger['error'](_0xe9db('0x14'),_0x2fd091,_0x429b76);_0x32f814(_0x429b76);});});}exports[_0xe9db('0x1c')]=function(_0x5d1ef7){var _0x2991c3=this;return new Promise(function(_0x4773af,_0x57c278){return db[_0xe9db('0x1d')][_0xe9db('0x1e')](_0x5d1ef7[_0xe9db('0x1f')],{'raw':_0x5d1ef7[_0xe9db('0x20')]?_0x5d1ef7['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5d1ef7[_0xe9db('0x20')]?_0x5d1ef7[_0xe9db('0x20')]['where']||null:null,'attributes':_0x5d1ef7[_0xe9db('0x20')]?_0x5d1ef7[_0xe9db('0x20')][_0xe9db('0x21')]||null:null,'limit':_0x5d1ef7[_0xe9db('0x20')]?_0x5d1ef7['options']['limit']||null:null})[_0xe9db('0x13')](function(_0x1b95ee){logger[_0xe9db('0x22')](_0xe9db('0x1c'),_0x5d1ef7);logger['debug'](_0xe9db('0x1c'),_0x5d1ef7,JSON[_0xe9db('0x23')](_0x1b95ee));_0x4773af(_0x1b95ee);})[_0xe9db('0x1b')](function(_0x2c1160){logger[_0xe9db('0x18')](_0xe9db('0x1c'),_0x2c1160[_0xe9db('0x19')],_0x5d1ef7);_0x57c278(_0x2991c3[_0xe9db('0x18')](0x1f4,_0x2c1160['message']));});});};exports[_0xe9db('0x24')]=function(_0x11ada6){return new Promise(function(_0x3e91bc,_0xbdd9ce){return db['ChatInteraction']['find']({'where':_0x11ada6[_0xe9db('0x20')]?_0x11ada6[_0xe9db('0x20')][_0xe9db('0x25')]||null:null})[_0xe9db('0x13')](function(_0x27e83a){if(_0x27e83a){return _0x27e83a[_0xe9db('0x26')](_0x11ada6['body'][_0xe9db('0x27')],_[_0xe9db('0x28')](_0x11ada6[_0xe9db('0x1f')],[_0xe9db('0x27'),'id'])||{});}})['spread'](function(_0x2634b5){logger[_0xe9db('0x22')](_0xe9db('0x29'),_0x11ada6);logger[_0xe9db('0x16')](_0xe9db('0x29'),_0x11ada6,JSON[_0xe9db('0x23')](_0x2634b5));_0x3e91bc(_0x2634b5);})[_0xe9db('0x1b')](function(_0x9b5cdf){logger[_0xe9db('0x18')](_0xe9db('0x29'),_0x9b5cdf['message'],_0x11ada6);_0xbdd9ce(_this[_0xe9db('0x18')](0x1f4,_0x9b5cdf['message']));});});};
\ No newline at end of file
+var _0x73fa=['spread','AddTags','debug','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','defaults','localhost','redis','./chatInteraction.socket','request','info','ChatInteraction,\x20%s,\x20%s','request\x20sent','error','message','result','UpdateChatInteraction','update','body','options','where','attributes','limit','then','stringify','catch','find','addTags','ids','omit'];(function(_0x2aa0e7,_0x4e5145){var _0x1472c0=function(_0x4deaeb){while(--_0x4deaeb){_0x2aa0e7['push'](_0x2aa0e7['shift']());}};_0x1472c0(++_0x4e5145);}(_0x73fa,0xf3));var _0xa73f=function(_0x39d89b,_0x413243){_0x39d89b=_0x39d89b-0x0;var _0x477b21=_0x73fa[_0x39d89b];return _0x477b21;};'use strict';var _=require('lodash');var util=require(_0xa73f('0x0'));var moment=require(_0xa73f('0x1'));var BPromise=require(_0xa73f('0x2'));var rs=require(_0xa73f('0x3'));var fs=require('fs');var Redis=require(_0xa73f('0x4'));var db=require(_0xa73f('0x5'))['db'];var utils=require(_0xa73f('0x6'));var logger=require(_0xa73f('0x7'))(_0xa73f('0x8'));var config=require(_0xa73f('0x9'));var jayson=require(_0xa73f('0xa'));var client=jayson[_0xa73f('0xb')]['http']({'port':0x232a});config['redis']=_[_0xa73f('0xc')](config['redis'],{'host':_0xa73f('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xa73f('0xe')]));require(_0xa73f('0xf'))['register'](socket);function respondWithRpcPromise(_0x24ed81,_0x4fdbcc,_0x4e6b85){return new BPromise(function(_0x3fd2fb,_0x3f64db){return client[_0xa73f('0x10')](_0x24ed81,_0x4e6b85)['then'](function(_0x472476){logger[_0xa73f('0x11')](_0xa73f('0x12'),_0x4fdbcc,_0xa73f('0x13'));logger['debug']('ChatInteraction,\x20%s,\x20%s,\x20%s',_0x4fdbcc,_0xa73f('0x13'),JSON['stringify'](_0x472476));if(_0x472476[_0xa73f('0x14')]){if(_0x472476[_0xa73f('0x14')]['code']===0x1f4){logger['error'](_0xa73f('0x12'),_0x4fdbcc,_0x472476[_0xa73f('0x14')][_0xa73f('0x15')]);return _0x3f64db(_0x472476[_0xa73f('0x14')][_0xa73f('0x15')]);}logger[_0xa73f('0x14')](_0xa73f('0x12'),_0x4fdbcc,_0x472476[_0xa73f('0x14')]['message']);return _0x3fd2fb(_0x472476['error']['message']);}else{logger[_0xa73f('0x11')](_0xa73f('0x12'),_0x4fdbcc,_0xa73f('0x13'));_0x3fd2fb(_0x472476[_0xa73f('0x16')][_0xa73f('0x15')]);}})['catch'](function(_0x25264b){logger[_0xa73f('0x14')]('ChatInteraction,\x20%s,\x20%s',_0x4fdbcc,_0x25264b);_0x3f64db(_0x25264b);});});}exports[_0xa73f('0x17')]=function(_0x405dcf){var _0x21a07b=this;return new Promise(function(_0x541a23,_0x4d87b2){return db['ChatInteraction'][_0xa73f('0x18')](_0x405dcf[_0xa73f('0x19')],{'raw':_0x405dcf[_0xa73f('0x1a')]?_0x405dcf[_0xa73f('0x1a')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x405dcf[_0xa73f('0x1a')]?_0x405dcf[_0xa73f('0x1a')][_0xa73f('0x1b')]||null:null,'attributes':_0x405dcf[_0xa73f('0x1a')]?_0x405dcf[_0xa73f('0x1a')][_0xa73f('0x1c')]||null:null,'limit':_0x405dcf[_0xa73f('0x1a')]?_0x405dcf['options'][_0xa73f('0x1d')]||null:null})[_0xa73f('0x1e')](function(_0x13ab52){logger[_0xa73f('0x11')]('UpdateChatInteraction',_0x405dcf);logger['debug'](_0xa73f('0x17'),_0x405dcf,JSON[_0xa73f('0x1f')](_0x13ab52));_0x541a23(_0x13ab52);})[_0xa73f('0x20')](function(_0x24c661){logger[_0xa73f('0x14')](_0xa73f('0x17'),_0x24c661[_0xa73f('0x15')],_0x405dcf);_0x4d87b2(_0x21a07b['error'](0x1f4,_0x24c661[_0xa73f('0x15')]));});});};exports['AddTagsToChatInteraction']=function(_0x211f7e){return new Promise(function(_0x16cce3,_0x1b8442){return db['ChatInteraction'][_0xa73f('0x21')]({'where':_0x211f7e[_0xa73f('0x1a')]?_0x211f7e[_0xa73f('0x1a')][_0xa73f('0x1b')]||null:null})[_0xa73f('0x1e')](function(_0x252759){if(_0x252759){return _0x252759[_0xa73f('0x22')](_0x211f7e[_0xa73f('0x19')][_0xa73f('0x23')],_[_0xa73f('0x24')](_0x211f7e['body'],['ids','id'])||{});}})[_0xa73f('0x25')](function(_0x43744a){logger[_0xa73f('0x11')](_0xa73f('0x26'),_0x211f7e);logger[_0xa73f('0x27')](_0xa73f('0x26'),_0x211f7e,JSON[_0xa73f('0x1f')](_0x43744a));_0x16cce3(_0x43744a);})['catch'](function(_0x3495c6){logger[_0xa73f('0x14')](_0xa73f('0x26'),_0x3495c6[_0xa73f('0x15')],_0x211f7e);_0x1b8442(_this['error'](0x1f4,_0x3495c6[_0xa73f('0x15')]));});});};
\ No newline at end of file
index 3391477..6b7d2e5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2904=['register','length','chatInteraction:','./chatInteraction.events','save','remove'];(function(_0x582269,_0x529ef3){var _0x506c1f=function(_0x361bc0){while(--_0x361bc0){_0x582269['push'](_0x582269['shift']());}};_0x506c1f(++_0x529ef3);}(_0x2904,0x9f));var _0x4290=function(_0x18c688,_0x4461c6){_0x18c688=_0x18c688-0x0;var _0x27ab37=_0x2904[_0x18c688];return _0x27ab37;};'use strict';var ChatInteractionEvents=require(_0x4290('0x0'));var events=[_0x4290('0x1'),_0x4290('0x2'),'update'];function createListener(_0x552c28,_0x823cd6){return function(_0x31c447){_0x823cd6['emit'](_0x552c28,_0x31c447);};}function removeListener(_0x351142,_0x4fb6d4){return function(){ChatInteractionEvents['removeListener'](_0x351142,_0x4fb6d4);};}exports[_0x4290('0x3')]=function(_0x5674ef){for(var _0x3d1833=0x0,_0x2a963a=events[_0x4290('0x4')];_0x3d1833<_0x2a963a;_0x3d1833++){var _0x140e6e=events[_0x3d1833];var _0x427caa=createListener(_0x4290('0x5')+_0x140e6e,_0x5674ef);ChatInteractionEvents['on'](_0x140e6e,_0x427caa);}};
\ No newline at end of file
+var _0xe72f=['length','chatInteraction:','./chatInteraction.events','update','emit','removeListener','register'];(function(_0x1600ba,_0x5c9945){var _0x2e5781=function(_0x500cbd){while(--_0x500cbd){_0x1600ba['push'](_0x1600ba['shift']());}};_0x2e5781(++_0x5c9945);}(_0xe72f,0x128));var _0xfe72=function(_0x21f6f2,_0x2b7be4){_0x21f6f2=_0x21f6f2-0x0;var _0x4fd2a7=_0xe72f[_0x21f6f2];return _0x4fd2a7;};'use strict';var ChatInteractionEvents=require(_0xfe72('0x0'));var events=['save','remove',_0xfe72('0x1')];function createListener(_0x3a2ab3,_0x5bd041){return function(_0x59bb85){_0x5bd041[_0xfe72('0x2')](_0x3a2ab3,_0x59bb85);};}function removeListener(_0x4dcc60,_0x51cfea){return function(){ChatInteractionEvents[_0xfe72('0x3')](_0x4dcc60,_0x51cfea);};}exports[_0xfe72('0x4')]=function(_0x3c78dc){for(var _0x373afb=0x0,_0x1d9b8f=events[_0xfe72('0x5')];_0x373afb<_0x1d9b8f;_0x373afb++){var _0x20f4c0=events[_0x373afb];var _0x495459=createListener(_0xfe72('0x6')+_0x20f4c0,_0x3c78dc);ChatInteractionEvents['on'](_0x20f4c0,_0x495459);}};
\ No newline at end of file
index 0ba9a7f..099cddb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd914=['/:id/messages','/:id/my_messages','getMyMessages','/:id/download','post','create','diskStorage','root','server/files/attachments/','%s-%s','now','originalname','replace','/:id/attachment_upload','single','file','addMessage','/:id/tags','tracked','chat','chatinteraction:addtags','put','chatinteraction:update','update','/:id/custom_update','customUpdate','abandon','/:id/close','close','delete','chatinteraction:destroy','destroy','removeTags','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/describe','isAuthenticated','describe','/:id','isChatInteractionAuthorized','/:id/attachment_download','attachmentDownload'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0xd914,0x17f));var _0x4d91=function(_0x9a3e0f,_0x2f796d){_0x9a3e0f=_0x9a3e0f-0x0;var _0x3d2a9a=_0xd914[_0x9a3e0f];return _0x3d2a9a;};'use strict';var multer=require(_0x4d91('0x0'));var util=require(_0x4d91('0x1'));var path=require('path');var timeout=require(_0x4d91('0x2'));var express=require(_0x4d91('0x3'));var router=express[_0x4d91('0x4')]();var auth=require(_0x4d91('0x5'));var interaction=require(_0x4d91('0x6'));var config=require(_0x4d91('0x7'));var controller=require('./chatInteraction.controller');router[_0x4d91('0x8')]('/',auth['isAuthenticated'](),controller[_0x4d91('0x9')]);router[_0x4d91('0x8')](_0x4d91('0xa'),auth[_0x4d91('0xb')](),controller[_0x4d91('0xc')]);router[_0x4d91('0x8')](_0x4d91('0xd'),auth[_0x4d91('0xe')](),controller['show']);router[_0x4d91('0x8')](_0x4d91('0xf'),auth[_0x4d91('0xe')](),controller[_0x4d91('0x10')]);router[_0x4d91('0x8')](_0x4d91('0x11'),auth['isAuthenticated'](),controller['getMessages']);router[_0x4d91('0x8')](_0x4d91('0x12'),auth[_0x4d91('0xe')](),controller[_0x4d91('0x13')]);router[_0x4d91('0x8')](_0x4d91('0x14'),auth['isAuthenticated'](),controller['download']);router[_0x4d91('0x15')]('/',auth[_0x4d91('0xb')](),controller[_0x4d91('0x16')]);var upload=multer({'storage':multer[_0x4d91('0x17')]({'destination':function(_0x33fbd4,_0x25bafc,_0x36f606){_0x36f606(null,path['join'](config[_0x4d91('0x18')],_0x4d91('0x19')));},'filename':function(_0x1e2ef7,_0xb92681,_0x280e80){_0x280e80(null,util['format'](_0x4d91('0x1a'),Date[_0x4d91('0x1b')](),_0xb92681[_0x4d91('0x1c')][_0x4d91('0x1d')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router['post'](_0x4d91('0x1e'),upload[_0x4d91('0x1f')](_0x4d91('0x20')),controller['attachmentUpload']);router[_0x4d91('0x15')](_0x4d91('0x11'),auth[_0x4d91('0xe')](),controller[_0x4d91('0x21')]);router[_0x4d91('0x15')](_0x4d91('0x22'),auth[_0x4d91('0xb')](),interaction[_0x4d91('0x23')](_0x4d91('0x24'),_0x4d91('0x25')),controller['addTags']);router[_0x4d91('0x26')]('/:id',auth['isAuthenticated'](),interaction[_0x4d91('0x23')](_0x4d91('0x24'),_0x4d91('0x27')),controller[_0x4d91('0x28')]);router[_0x4d91('0x26')](_0x4d91('0x29'),controller[_0x4d91('0x2a')]);router[_0x4d91('0x26')]('/:id/abandon',auth['isChatInteractionAuthorized'](),controller[_0x4d91('0x2b')]);router[_0x4d91('0x26')](_0x4d91('0x2c'),controller[_0x4d91('0x2d')]);router[_0x4d91('0x2e')](_0x4d91('0xd'),auth[_0x4d91('0xb')](),interaction['tracked'](_0x4d91('0x24'),_0x4d91('0x2f')),controller[_0x4d91('0x30')]);router['delete']('/:id/tags',auth[_0x4d91('0xb')](),controller[_0x4d91('0x31')]);module['exports']=router;
\ No newline at end of file
+var _0x3de3=['chat','update','/:id/custom_update','put','/:id/abandon','/:id/close','close','chatinteraction:destroy','destroy','delete','removeTags','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','describe','isChatInteractionAuthorized','show','attachmentDownload','/:id/messages','getMessages','/:id/my_messages','getMyMessages','download','create','diskStorage','join','root','format','now','originalname','post','/:id/attachment_upload','attachmentUpload','addMessage','/:id/tags','tracked','addTags','/:id'];(function(_0x242a4f,_0x369c57){var _0x122117=function(_0x55a797){while(--_0x55a797){_0x242a4f['push'](_0x242a4f['shift']());}};_0x122117(++_0x369c57);}(_0x3de3,0x1ce));var _0x33de=function(_0x53bc89,_0x368253){_0x53bc89=_0x53bc89-0x0;var _0x5211f8=_0x3de3[_0x53bc89];return _0x5211f8;};'use strict';var multer=require(_0x33de('0x0'));var util=require('util');var path=require(_0x33de('0x1'));var timeout=require(_0x33de('0x2'));var express=require('express');var router=express[_0x33de('0x3')]();var auth=require(_0x33de('0x4'));var interaction=require(_0x33de('0x5'));var config=require(_0x33de('0x6'));var controller=require('./chatInteraction.controller');router[_0x33de('0x7')]('/',auth[_0x33de('0x8')](),controller['index']);router[_0x33de('0x7')]('/describe',auth[_0x33de('0x8')](),controller[_0x33de('0x9')]);router[_0x33de('0x7')]('/:id',auth[_0x33de('0xa')](),controller[_0x33de('0xb')]);router[_0x33de('0x7')]('/:id/attachment_download',auth[_0x33de('0xa')](),controller[_0x33de('0xc')]);router[_0x33de('0x7')](_0x33de('0xd'),auth[_0x33de('0x8')](),controller[_0x33de('0xe')]);router[_0x33de('0x7')](_0x33de('0xf'),auth[_0x33de('0xa')](),controller[_0x33de('0x10')]);router[_0x33de('0x7')]('/:id/download',auth[_0x33de('0x8')](),controller[_0x33de('0x11')]);router['post']('/',auth['isAuthenticated'](),controller[_0x33de('0x12')]);var upload=multer({'storage':multer[_0x33de('0x13')]({'destination':function(_0x2b3748,_0x57a2a1,_0x57aa73){_0x57aa73(null,path[_0x33de('0x14')](config[_0x33de('0x15')],'server/files/attachments/'));},'filename':function(_0x4ff69f,_0x185849,_0x16c050){_0x16c050(null,util[_0x33de('0x16')]('%s-%s',Date[_0x33de('0x17')](),_0x185849[_0x33de('0x18')]['replace'](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-')));}})});router[_0x33de('0x19')](_0x33de('0x1a'),upload['single']('file'),controller[_0x33de('0x1b')]);router['post'](_0x33de('0xd'),auth[_0x33de('0xa')](),controller[_0x33de('0x1c')]);router[_0x33de('0x19')](_0x33de('0x1d'),auth[_0x33de('0x8')](),interaction[_0x33de('0x1e')]('chat','chatinteraction:addtags'),controller[_0x33de('0x1f')]);router['put'](_0x33de('0x20'),auth['isAuthenticated'](),interaction[_0x33de('0x1e')](_0x33de('0x21'),'chatinteraction:update'),controller[_0x33de('0x22')]);router['put'](_0x33de('0x23'),controller['customUpdate']);router[_0x33de('0x24')](_0x33de('0x25'),auth[_0x33de('0xa')](),controller['abandon']);router[_0x33de('0x24')](_0x33de('0x26'),controller[_0x33de('0x27')]);router['delete'](_0x33de('0x20'),auth['isAuthenticated'](),interaction['tracked'](_0x33de('0x21'),_0x33de('0x28')),controller[_0x33de('0x29')]);router[_0x33de('0x2a')](_0x33de('0x1d'),auth[_0x33de('0x8')](),controller[_0x33de('0x2b')]);module[_0x33de('0x2c')]=router;
\ No newline at end of file
index 72f79ef..0c37fcf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0adf=['INTEGER','sequelize','exports','TEXT','BOOLEAN'];(function(_0x56482c,_0x16118d){var _0x5aae7a=function(_0x52512f){while(--_0x52512f){_0x56482c['push'](_0x56482c['shift']());}};_0x5aae7a(++_0x16118d);}(_0x0adf,0x1d2));var _0xf0ad=function(_0x4a76c1,_0x3beee9){_0x4a76c1=_0x4a76c1-0x0;var _0x772f11=_0x0adf[_0x4a76c1];return _0x772f11;};'use strict';var Sequelize=require(_0xf0ad('0x0'));module[_0xf0ad('0x1')]={'body':{'type':Sequelize[_0xf0ad('0x2')]('medium'),'allowNull':![]},'read':{'type':Sequelize[_0xf0ad('0x3')],'defaultValue':![]},'ChatInternalMessageId':{'type':Sequelize[_0xf0ad('0x4')]}};
\ No newline at end of file
+var _0xbff5=['sequelize','exports','TEXT','medium','BOOLEAN','INTEGER'];(function(_0x5f25b3,_0x35481a){var _0x4ab9bf=function(_0x49baf7){while(--_0x49baf7){_0x5f25b3['push'](_0x5f25b3['shift']());}};_0x4ab9bf(++_0x35481a);}(_0xbff5,0x1bc));var _0x5bff=function(_0x5ea24f,_0x24ce57){_0x5ea24f=_0x5ea24f-0x0;var _0x1240e2=_0xbff5[_0x5ea24f];return _0x1240e2;};'use strict';var Sequelize=require(_0x5bff('0x0'));module[_0x5bff('0x1')]={'body':{'type':Sequelize[_0x5bff('0x2')](_0x5bff('0x3')),'allowNull':![]},'read':{'type':Sequelize[_0x5bff('0x4')],'defaultValue':![]},'ChatInternalMessageId':{'type':Sequelize[_0x5bff('0x5')]}};
\ No newline at end of file
index 3214e55..4f9443d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0296=['user','role','userpic','internal','online','lastLoginAt','allowmessenger','showWebBar','-online','VoiceQueue','VoiceQueues','Unable\x20to\x20retrieve\x20the\x20current\x20user','Agents','userProfileId','autoAssociation','UserProfileResource','isEmpty','resourceId','push','FromId','ToId','read','all','html-pdf','rimraf','moment','bluebird','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatInternalMessage.socket','sendStatus','status','json','count','offset','limit','set','reject','save','update','then','error','stack','name','send','index','ChatInternalMessage','rawAttributes','model','query','keys','attributes','fields','length','hasOwnProperty','nolimit','sort','where','filters','pick','filter','merge','type','key','VIRTUAL','options','includeAll','include','findAll','catch','params','intersection','find','create','body','destroy','describe','messages','lastMessageAt','createdAt','format','YYYY-MM-DD\x20HH:mm:ss','lastMessage','User','agent','admin'];(function(_0x1545d6,_0x39a599){var _0x63d515=function(_0x3d5ab6){while(--_0x3d5ab6){_0x1545d6['push'](_0x1545d6['shift']());}};_0x63d515(++_0x39a599);}(_0x0296,0x1bf));var _0x6029=function(_0x2067c1,_0x4ad413){_0x2067c1=_0x2067c1-0x0;var _0x4c2968=_0x0296[_0x2067c1];return _0x4c2968;};'use strict';var pdf=require(_0x6029('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x6029('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x6029('0x2'));var BPromise=require(_0x6029('0x3'));var Mustache=require('mustache');var util=require(_0x6029('0x4'));var path=require(_0x6029('0x5'));var sox=require(_0x6029('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x6029('0x7'));var squel=require(_0x6029('0x8'));var crypto=require(_0x6029('0x9'));var jsforce=require(_0x6029('0xa'));var deskjs=require(_0x6029('0xb'));var toCsv=require(_0x6029('0xc'));var querystring=require(_0x6029('0xd'));var Papa=require(_0x6029('0xe'));var authService=require(_0x6029('0xf'));var hardwareService=require(_0x6029('0x10'));var Redis=require(_0x6029('0x11'));var qs=require(_0x6029('0x12'));var logger=require('../../config/logger')(_0x6029('0x13'));var utils=require('../../config/utils');var config=require(_0x6029('0x14'));var db=require(_0x6029('0x15'))['db'];config[_0x6029('0x16')]=_[_0x6029('0x17')](config[_0x6029('0x16')],{'host':_0x6029('0x18'),'port':0x18eb});var socket=require(_0x6029('0x19'))(new Redis(config[_0x6029('0x16')]));require(_0x6029('0x1a'))['register'](socket);function respondWithStatusCode(_0xa307f,_0x1a946b){_0x1a946b=_0x1a946b||0xcc;return function(_0x35856c){if(_0x35856c){return _0xa307f[_0x6029('0x1b')](_0x1a946b);}return _0xa307f[_0x6029('0x1c')](_0x1a946b)['end']();};}function respondWithResult(_0x47b61a,_0x2db325){_0x2db325=_0x2db325||0xc8;return function(_0x2d07c8){if(_0x2d07c8){return _0x47b61a[_0x6029('0x1c')](_0x2db325)[_0x6029('0x1d')](_0x2d07c8);}};}function respondWithFilteredResult(_0x471772,_0x2ca6f0){return function(_0x1caa13){if(_0x1caa13){var _0x1ca84d=_0x1caa13[_0x6029('0x1e')],_0x63963b=_0x2ca6f0[_0x6029('0x1f')],_0x4fbbbb=_0x2ca6f0[_0x6029('0x1f')]+_0x2ca6f0[_0x6029('0x20')],_0x4cda88;if(_0x4fbbbb>=_0x1ca84d){_0x4fbbbb=_0x1ca84d;_0x4cda88=0xc8;}else{_0x4cda88=0xce;}_0x471772[_0x6029('0x1c')](_0x4cda88);return _0x471772[_0x6029('0x21')]('Content-Range',_0x63963b+'-'+_0x4fbbbb+'/'+_0x1ca84d)[_0x6029('0x1d')](_0x1caa13);}return null;};}function patchUpdates(_0xcb43c){return function(_0x43d82b){try{jsonpatch['apply'](_0x43d82b,_0xcb43c,!![]);}catch(_0x5229d5){return BPromise[_0x6029('0x22')](_0x5229d5);}return _0x43d82b[_0x6029('0x23')]();};}function saveUpdates(_0x4e0818,_0x159c61){return function(_0x493236){if(_0x493236){return _0x493236[_0x6029('0x24')](_0x4e0818)['then'](function(_0x35fa86){return _0x35fa86;});}return null;};}function removeEntity(_0x2f5b75,_0xd8b483){return function(_0x12d40b){if(_0x12d40b){return _0x12d40b['destroy']()[_0x6029('0x25')](function(){_0x2f5b75[_0x6029('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x29c066,_0xcc7335){return function(_0x31da07){if(!_0x31da07){_0x29c066['sendStatus'](0x194);}return _0x31da07;};}function handleError(_0x2252b5,_0x20d6e2){_0x20d6e2=_0x20d6e2||0x1f4;return function(_0x17a329){logger[_0x6029('0x26')](_0x17a329[_0x6029('0x27')]);if(_0x17a329[_0x6029('0x28')]){delete _0x17a329[_0x6029('0x28')];}_0x2252b5['status'](_0x20d6e2)[_0x6029('0x29')](_0x17a329);};}exports[_0x6029('0x2a')]=function(_0x3cb4b8,_0x3e227c){var _0x587616={},_0x4c3e48={},_0x18e891={'count':0x0,'rows':[]};var _0x5b0284=db[_0x6029('0x2b')][_0x6029('0x2c')];_0x4c3e48[_0x6029('0x2d')]=_['keys'](_0x5b0284);_0x4c3e48[_0x6029('0x2e')]=_[_0x6029('0x2f')](_0x3cb4b8[_0x6029('0x2e')]);_0x4c3e48['filters']=_['intersection'](_0x4c3e48['model'],_0x4c3e48[_0x6029('0x2e')]);_0x587616[_0x6029('0x30')]=_['intersection'](_0x4c3e48[_0x6029('0x2d')],qs[_0x6029('0x31')](_0x3cb4b8[_0x6029('0x2e')]['fields']));_0x587616['attributes']=_0x587616[_0x6029('0x30')][_0x6029('0x32')]?_0x587616[_0x6029('0x30')]:_0x4c3e48[_0x6029('0x2d')];if(!_0x3cb4b8[_0x6029('0x2e')][_0x6029('0x33')](_0x6029('0x34'))){_0x587616[_0x6029('0x20')]=qs[_0x6029('0x20')](_0x3cb4b8[_0x6029('0x2e')]['limit']);_0x587616[_0x6029('0x1f')]=qs[_0x6029('0x1f')](_0x3cb4b8[_0x6029('0x2e')][_0x6029('0x1f')]);}_0x587616['order']=qs[_0x6029('0x35')](_0x3cb4b8[_0x6029('0x2e')]['sort']);_0x587616[_0x6029('0x36')]=qs[_0x6029('0x37')](_[_0x6029('0x38')](_0x3cb4b8['query'],_0x4c3e48[_0x6029('0x37')]));if(_0x3cb4b8[_0x6029('0x2e')][_0x6029('0x39')]){_0x587616[_0x6029('0x36')]=_[_0x6029('0x3a')](_0x587616[_0x6029('0x36')],{'$or':_['map'](_0x5b0284,function(_0x38be6f){if(_0x38be6f[_0x6029('0x3b')][_0x6029('0x3c')]!==_0x6029('0x3d')){var _0x2c9153={};_0x2c9153[_0x38be6f['field']]={'$like':'%'+_0x3cb4b8[_0x6029('0x2e')]['filter']+'%'};return _0x2c9153;}})});}_0x587616=_[_0x6029('0x3a')]({},_0x587616,_0x3cb4b8[_0x6029('0x3e')]);var _0x531406={'where':_0x587616['where']};return db['ChatInternalMessage'][_0x6029('0x1e')](_0x531406)[_0x6029('0x25')](function(_0x761ab4){_0x18e891[_0x6029('0x1e')]=_0x761ab4;if(_0x3cb4b8[_0x6029('0x2e')][_0x6029('0x3f')]){_0x587616[_0x6029('0x40')]=[{'all':!![]}];}return db[_0x6029('0x2b')][_0x6029('0x41')](_0x587616);})['then'](function(_0x33e96b){_0x18e891['rows']=_0x33e96b;return _0x18e891;})[_0x6029('0x25')](respondWithFilteredResult(_0x3e227c,_0x587616))[_0x6029('0x42')](handleError(_0x3e227c,null));};exports['show']=function(_0x3ed6be,_0x4629a3){var _0x42f6fc={'raw':!![],'where':{'id':_0x3ed6be[_0x6029('0x43')]['id']}},_0x126137={};_0x126137[_0x6029('0x2d')]=_[_0x6029('0x2f')](db[_0x6029('0x2b')][_0x6029('0x2c')]);_0x126137['query']=_[_0x6029('0x2f')](_0x3ed6be[_0x6029('0x2e')]);_0x126137[_0x6029('0x37')]=_[_0x6029('0x44')](_0x126137[_0x6029('0x2d')],_0x126137[_0x6029('0x2e')]);_0x42f6fc[_0x6029('0x30')]=_['intersection'](_0x126137[_0x6029('0x2d')],qs[_0x6029('0x31')](_0x3ed6be[_0x6029('0x2e')][_0x6029('0x31')]));_0x42f6fc[_0x6029('0x30')]=_0x42f6fc[_0x6029('0x30')][_0x6029('0x32')]?_0x42f6fc[_0x6029('0x30')]:_0x126137[_0x6029('0x2d')];if(_0x3ed6be[_0x6029('0x2e')][_0x6029('0x3f')]){_0x42f6fc[_0x6029('0x40')]=[{'all':!![]}];}_0x42f6fc=_[_0x6029('0x3a')]({},_0x42f6fc,_0x3ed6be['options']);return db[_0x6029('0x2b')][_0x6029('0x45')](_0x42f6fc)[_0x6029('0x25')](handleEntityNotFound(_0x4629a3,null))[_0x6029('0x25')](respondWithResult(_0x4629a3,null))[_0x6029('0x42')](handleError(_0x4629a3,null));};exports['create']=function(_0xebcf27,_0x1e2391){return db[_0x6029('0x2b')][_0x6029('0x46')](_0xebcf27[_0x6029('0x47')],{})[_0x6029('0x25')](respondWithResult(_0x1e2391,0xc9))['catch'](handleError(_0x1e2391,null));};exports[_0x6029('0x24')]=function(_0xc4e3c1,_0x5db3b8){if(_0xc4e3c1['body']['id']){delete _0xc4e3c1[_0x6029('0x47')]['id'];}return db[_0x6029('0x2b')][_0x6029('0x45')]({'where':{'id':_0xc4e3c1[_0x6029('0x43')]['id']}})[_0x6029('0x25')](handleEntityNotFound(_0x5db3b8,null))['then'](saveUpdates(_0xc4e3c1[_0x6029('0x47')],null))[_0x6029('0x25')](respondWithResult(_0x5db3b8,null))['catch'](handleError(_0x5db3b8,null));};exports[_0x6029('0x48')]=function(_0x49ab89,_0x2c65a9){return db[_0x6029('0x2b')][_0x6029('0x45')]({'where':{'id':_0x49ab89[_0x6029('0x43')]['id']}})[_0x6029('0x25')](handleEntityNotFound(_0x2c65a9,null))[_0x6029('0x25')](removeEntity(_0x2c65a9,null))[_0x6029('0x42')](handleError(_0x2c65a9,null));};exports[_0x6029('0x49')]=function(_0x49cb4a,_0x5028c4){return db[_0x6029('0x2b')][_0x6029('0x49')]()[_0x6029('0x25')](respondWithResult(_0x5028c4,null))[_0x6029('0x42')](handleError(_0x5028c4,null));};function wrapUser(_0x28c7e7){return function(_0x5a9126){var _0x164775=_0x28c7e7['get']({'plain':!![]});_0x164775[_0x6029('0x4a')]=[];if(_0x5a9126){_0x164775[_0x6029('0x4b')]=_0x5a9126[_0x6029('0x4c')];_0x164775['lastMessage']=_0x5a9126;}else{_0x164775[_0x6029('0x4b')]=moment(0x0)[_0x6029('0x4d')](_0x6029('0x4e'));_0x164775[_0x6029('0x4f')]={};}return _0x164775;};}exports['getUsers']=function(_0x29ee95,_0x5f146d,_0x1328df){var _0x4aedfa=[];return db[_0x6029('0x50')][_0x6029('0x41')]({'where':{'role':[_0x6029('0x51'),_0x6029('0x52'),_0x6029('0x53')]},'attributes':['id','fullname',_0x6029('0x28'),_0x6029('0x54'),_0x6029('0x55'),_0x6029('0x56'),_0x6029('0x57'),_0x6029('0x58'),_0x6029('0x59'),_0x6029('0x5a')],'order':qs[_0x6029('0x35')](_0x6029('0x5b')),'include':[{'model':db[_0x6029('0x5c')],'as':_0x6029('0x5d'),'attributes':['id','name','type'],'through':{'attributes':[]}}]})[_0x6029('0x25')](function(_0x5d8495){if(_0x5d8495){var _0x43b92a=_0x29ee95[_0x6029('0x53')]['get']({'plain':!![]});if(!_0x43b92a)throw new Error(_0x6029('0x5e'));if(_0x43b92a[_0x6029('0x54')]===_0x6029('0x53')){return db['UserProfileSection'][_0x6029('0x45')]({'where':{'name':_0x6029('0x5f'),'userProfileId':_0x43b92a[_0x6029('0x60')]},'raw':!![]})[_0x6029('0x25')](function(_0x261081){if(_0x261081){if(_0x261081[_0x6029('0x61')]===0x0){return db[_0x6029('0x62')][_0x6029('0x41')]({'where':{'sectionId':_0x261081['id']},'raw':!![]})[_0x6029('0x25')](function(_0x1c2196){var _0x344cd3=[];if(_[_0x6029('0x63')](_0x1c2196)){_0x344cd3=_[_0x6029('0x39')](_0x5d8495,function(_0x29251b){if(_0x29251b['role']!==_0x6029('0x51')){return _0x29251b;}});return _0x344cd3;}else{for(var _0x16ae79=0x0;_0x16ae79<_0x5d8495[_0x6029('0x32')];_0x16ae79++){var _0x4d26c3=_0x5d8495[_0x16ae79];if(_0x4d26c3[_0x6029('0x54')]===_0x6029('0x51')){var _0x2c736a=_[_0x6029('0x45')](_0x1c2196,function(_0x4c85f2){return _0x4c85f2[_0x6029('0x64')]===_0x4d26c3['id'];});if(_0x2c736a)_0x344cd3[_0x6029('0x65')](_0x4d26c3);}else{_0x344cd3[_0x6029('0x65')](_0x4d26c3);}}return _0x344cd3;}});}else{return _0x5d8495;}}else{var _0x4ecc4a=_[_0x6029('0x39')](_0x5d8495,function(_0x2b1723){if(_0x2b1723['role']!==_0x6029('0x51')){return _0x2b1723;}});return _0x4ecc4a;}});}else{return _0x5d8495;}}})[_0x6029('0x25')](function(_0x1bf268){var _0x2f8262=[];if(_0x1bf268){_0x4aedfa=_0x1bf268;for(var _0x2f4f27=0x0;_0x2f4f27<_0x1bf268['length'];_0x2f4f27+=0x1){_0x4aedfa[_0x2f4f27][_0x6029('0x4a')]=[];_0x2f8262[_0x6029('0x65')](db[_0x6029('0x2b')][_0x6029('0x45')]({'where':{'FromId':[_0x29ee95[_0x6029('0x53')]['id'],_0x1bf268[_0x2f4f27]['id']],'ToId':[_0x29ee95['user']['id'],_0x1bf268[_0x2f4f27]['id']],'ChatGroupId':null},'attributes':['id',_0x6029('0x4c'),_0x6029('0x66'),_0x6029('0x67'),_0x6029('0x68'),_0x6029('0x47')],'order':qs['sort']('-createdAt'),'limit':0x1,'offset':0x0,'raw':!![]})[_0x6029('0x25')](wrapUser(_0x1bf268[_0x2f4f27])));}return BPromise[_0x6029('0x69')](_0x2f8262);}return[];})[_0x6029('0x25')](function(_0x527b8f){return{'rows':_0x527b8f,'count':_0x527b8f['length']};})[_0x6029('0x25')](respondWithResult(_0x5f146d,null))['catch'](handleError(_0x5f146d,null));};
\ No newline at end of file
+var _0xe784=['-online','VoiceQueues','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Agents','userProfileId','autoAssociation','UserProfileResource','push','FromId','ToId','-createdAt','all','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','redis','localhost','socket.io-emitter','./chatInternalMessage.socket','register','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','then','stack','name','send','index','ChatInternalMessage','rawAttributes','keys','query','attributes','intersection','fields','length','model','hasOwnProperty','nolimit','sort','filters','pick','where','merge','map','type','VIRTUAL','filter','options','includeAll','include','findAll','rows','show','params','find','catch','create','body','describe','get','messages','lastMessageAt','createdAt','lastMessage','format','YYYY-MM-DD\x20HH:mm:ss','User','agent','fullname','role','online','lastLoginAt','showWebBar'];(function(_0x5d01e7,_0x1fccbd){var _0x127418=function(_0x75ceb9){while(--_0x75ceb9){_0x5d01e7['push'](_0x5d01e7['shift']());}};_0x127418(++_0x1fccbd);}(_0xe784,0x1b9));var _0x4e78=function(_0x1b6186,_0x1ec7f2){_0x1b6186=_0x1b6186-0x0;var _0x186121=_0xe784[_0x1b6186];return _0x186121;};'use strict';var pdf=require(_0x4e78('0x0'));var emlformat=require(_0x4e78('0x1'));var rimraf=require(_0x4e78('0x2'));var zipdir=require(_0x4e78('0x3'));var jsonpatch=require(_0x4e78('0x4'));var rp=require('request-promise');var moment=require(_0x4e78('0x5'));var BPromise=require(_0x4e78('0x6'));var Mustache=require(_0x4e78('0x7'));var util=require(_0x4e78('0x8'));var path=require(_0x4e78('0x9'));var sox=require(_0x4e78('0xa'));var csv=require('to-csv');var ejs=require(_0x4e78('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x4e78('0xc'));var crypto=require(_0x4e78('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x4e78('0xe'));var querystring=require(_0x4e78('0xf'));var Papa=require(_0x4e78('0x10'));var authService=require(_0x4e78('0x11'));var hardwareService=require(_0x4e78('0x12'));var Redis=require(_0x4e78('0x13'));var qs=require(_0x4e78('0x14'));var logger=require(_0x4e78('0x15'))(_0x4e78('0x16'));var utils=require(_0x4e78('0x17'));var config=require('../../config/environment');var db=require(_0x4e78('0x18'))['db'];config[_0x4e78('0x19')]=_['defaults'](config[_0x4e78('0x19')],{'host':_0x4e78('0x1a'),'port':0x18eb});var socket=require(_0x4e78('0x1b'))(new Redis(config[_0x4e78('0x19')]));require(_0x4e78('0x1c'))[_0x4e78('0x1d')](socket);function respondWithStatusCode(_0x15555,_0x40dd52){_0x40dd52=_0x40dd52||0xcc;return function(_0xf95ea){if(_0xf95ea){return _0x15555[_0x4e78('0x1e')](_0x40dd52);}return _0x15555[_0x4e78('0x1f')](_0x40dd52)[_0x4e78('0x20')]();};}function respondWithResult(_0x275177,_0x556650){_0x556650=_0x556650||0xc8;return function(_0x3d15c6){if(_0x3d15c6){return _0x275177[_0x4e78('0x1f')](_0x556650)[_0x4e78('0x21')](_0x3d15c6);}};}function respondWithFilteredResult(_0x5b62b5,_0x138451){return function(_0x183c96){if(_0x183c96){var _0x44f0d2=_0x183c96[_0x4e78('0x22')],_0x11f2dd=_0x138451['offset'],_0x4214f3=_0x138451[_0x4e78('0x23')]+_0x138451[_0x4e78('0x24')],_0x49e127;if(_0x4214f3>=_0x44f0d2){_0x4214f3=_0x44f0d2;_0x49e127=0xc8;}else{_0x49e127=0xce;}_0x5b62b5[_0x4e78('0x1f')](_0x49e127);return _0x5b62b5[_0x4e78('0x25')]('Content-Range',_0x11f2dd+'-'+_0x4214f3+'/'+_0x44f0d2)[_0x4e78('0x21')](_0x183c96);}return null;};}function patchUpdates(_0x551d1a){return function(_0x127ec5){try{jsonpatch[_0x4e78('0x26')](_0x127ec5,_0x551d1a,!![]);}catch(_0x106cfa){return BPromise[_0x4e78('0x27')](_0x106cfa);}return _0x127ec5[_0x4e78('0x28')]();};}function saveUpdates(_0x387040,_0x3b9e2e){return function(_0xac7897){if(_0xac7897){return _0xac7897[_0x4e78('0x29')](_0x387040)['then'](function(_0x1cd49f){return _0x1cd49f;});}return null;};}function removeEntity(_0xbec7e7,_0x5ba03a){return function(_0x26c91d){if(_0x26c91d){return _0x26c91d[_0x4e78('0x2a')]()[_0x4e78('0x2b')](function(){_0xbec7e7[_0x4e78('0x1f')](0xcc)[_0x4e78('0x20')]();});}};}function handleEntityNotFound(_0x1942e9,_0xe18c4d){return function(_0x16d30d){if(!_0x16d30d){_0x1942e9['sendStatus'](0x194);}return _0x16d30d;};}function handleError(_0x5bd0bb,_0x5eac94){_0x5eac94=_0x5eac94||0x1f4;return function(_0x5baf02){logger['error'](_0x5baf02[_0x4e78('0x2c')]);if(_0x5baf02[_0x4e78('0x2d')]){delete _0x5baf02[_0x4e78('0x2d')];}_0x5bd0bb[_0x4e78('0x1f')](_0x5eac94)[_0x4e78('0x2e')](_0x5baf02);};}exports[_0x4e78('0x2f')]=function(_0xe69513,_0x38c584){var _0x18ab69={},_0x45b73a={},_0x393d94={'count':0x0,'rows':[]};var _0x43edf3=db[_0x4e78('0x30')][_0x4e78('0x31')];_0x45b73a['model']=_['keys'](_0x43edf3);_0x45b73a['query']=_[_0x4e78('0x32')](_0xe69513[_0x4e78('0x33')]);_0x45b73a['filters']=_['intersection'](_0x45b73a['model'],_0x45b73a[_0x4e78('0x33')]);_0x18ab69[_0x4e78('0x34')]=_[_0x4e78('0x35')](_0x45b73a['model'],qs[_0x4e78('0x36')](_0xe69513[_0x4e78('0x33')][_0x4e78('0x36')]));_0x18ab69[_0x4e78('0x34')]=_0x18ab69[_0x4e78('0x34')][_0x4e78('0x37')]?_0x18ab69[_0x4e78('0x34')]:_0x45b73a[_0x4e78('0x38')];if(!_0xe69513[_0x4e78('0x33')][_0x4e78('0x39')](_0x4e78('0x3a'))){_0x18ab69[_0x4e78('0x24')]=qs[_0x4e78('0x24')](_0xe69513[_0x4e78('0x33')]['limit']);_0x18ab69[_0x4e78('0x23')]=qs[_0x4e78('0x23')](_0xe69513[_0x4e78('0x33')][_0x4e78('0x23')]);}_0x18ab69['order']=qs['sort'](_0xe69513[_0x4e78('0x33')][_0x4e78('0x3b')]);_0x18ab69['where']=qs[_0x4e78('0x3c')](_[_0x4e78('0x3d')](_0xe69513[_0x4e78('0x33')],_0x45b73a[_0x4e78('0x3c')]));if(_0xe69513[_0x4e78('0x33')]['filter']){_0x18ab69[_0x4e78('0x3e')]=_[_0x4e78('0x3f')](_0x18ab69[_0x4e78('0x3e')],{'$or':_[_0x4e78('0x40')](_0x43edf3,function(_0x300994){if(_0x300994[_0x4e78('0x41')]['key']!==_0x4e78('0x42')){var _0x91d187={};_0x91d187[_0x300994['field']]={'$like':'%'+_0xe69513[_0x4e78('0x33')][_0x4e78('0x43')]+'%'};return _0x91d187;}})});}_0x18ab69=_['merge']({},_0x18ab69,_0xe69513[_0x4e78('0x44')]);var _0x4a9704={'where':_0x18ab69[_0x4e78('0x3e')]};return db['ChatInternalMessage'][_0x4e78('0x22')](_0x4a9704)[_0x4e78('0x2b')](function(_0x5a3039){_0x393d94[_0x4e78('0x22')]=_0x5a3039;if(_0xe69513[_0x4e78('0x33')][_0x4e78('0x45')]){_0x18ab69[_0x4e78('0x46')]=[{'all':!![]}];}return db[_0x4e78('0x30')][_0x4e78('0x47')](_0x18ab69);})['then'](function(_0x4d9f43){_0x393d94[_0x4e78('0x48')]=_0x4d9f43;return _0x393d94;})[_0x4e78('0x2b')](respondWithFilteredResult(_0x38c584,_0x18ab69))['catch'](handleError(_0x38c584,null));};exports[_0x4e78('0x49')]=function(_0x261b51,_0x324784){var _0x56abea={'raw':!![],'where':{'id':_0x261b51[_0x4e78('0x4a')]['id']}},_0x34d205={};_0x34d205[_0x4e78('0x38')]=_[_0x4e78('0x32')](db[_0x4e78('0x30')][_0x4e78('0x31')]);_0x34d205[_0x4e78('0x33')]=_['keys'](_0x261b51[_0x4e78('0x33')]);_0x34d205[_0x4e78('0x3c')]=_[_0x4e78('0x35')](_0x34d205[_0x4e78('0x38')],_0x34d205[_0x4e78('0x33')]);_0x56abea['attributes']=_[_0x4e78('0x35')](_0x34d205[_0x4e78('0x38')],qs[_0x4e78('0x36')](_0x261b51[_0x4e78('0x33')][_0x4e78('0x36')]));_0x56abea[_0x4e78('0x34')]=_0x56abea['attributes'][_0x4e78('0x37')]?_0x56abea['attributes']:_0x34d205[_0x4e78('0x38')];if(_0x261b51[_0x4e78('0x33')][_0x4e78('0x45')]){_0x56abea[_0x4e78('0x46')]=[{'all':!![]}];}_0x56abea=_['merge']({},_0x56abea,_0x261b51[_0x4e78('0x44')]);return db[_0x4e78('0x30')][_0x4e78('0x4b')](_0x56abea)[_0x4e78('0x2b')](handleEntityNotFound(_0x324784,null))['then'](respondWithResult(_0x324784,null))[_0x4e78('0x4c')](handleError(_0x324784,null));};exports[_0x4e78('0x4d')]=function(_0x5756ed,_0x4db1fd){return db['ChatInternalMessage'][_0x4e78('0x4d')](_0x5756ed[_0x4e78('0x4e')],{})['then'](respondWithResult(_0x4db1fd,0xc9))['catch'](handleError(_0x4db1fd,null));};exports[_0x4e78('0x29')]=function(_0x46bfc9,_0x49896e){if(_0x46bfc9[_0x4e78('0x4e')]['id']){delete _0x46bfc9[_0x4e78('0x4e')]['id'];}return db['ChatInternalMessage'][_0x4e78('0x4b')]({'where':{'id':_0x46bfc9['params']['id']}})[_0x4e78('0x2b')](handleEntityNotFound(_0x49896e,null))['then'](saveUpdates(_0x46bfc9['body'],null))[_0x4e78('0x2b')](respondWithResult(_0x49896e,null))[_0x4e78('0x4c')](handleError(_0x49896e,null));};exports['destroy']=function(_0xce9d81,_0x4c2767){return db[_0x4e78('0x30')]['find']({'where':{'id':_0xce9d81[_0x4e78('0x4a')]['id']}})[_0x4e78('0x2b')](handleEntityNotFound(_0x4c2767,null))['then'](removeEntity(_0x4c2767,null))[_0x4e78('0x4c')](handleError(_0x4c2767,null));};exports[_0x4e78('0x4f')]=function(_0x324446,_0x58aba0){return db[_0x4e78('0x30')]['describe']()[_0x4e78('0x2b')](respondWithResult(_0x58aba0,null))['catch'](handleError(_0x58aba0,null));};function wrapUser(_0x2b8c3d){return function(_0x268868){var _0xe6df02=_0x2b8c3d[_0x4e78('0x50')]({'plain':!![]});_0xe6df02[_0x4e78('0x51')]=[];if(_0x268868){_0xe6df02[_0x4e78('0x52')]=_0x268868[_0x4e78('0x53')];_0xe6df02[_0x4e78('0x54')]=_0x268868;}else{_0xe6df02[_0x4e78('0x52')]=moment(0x0)[_0x4e78('0x55')](_0x4e78('0x56'));_0xe6df02[_0x4e78('0x54')]={};}return _0xe6df02;};}exports['getUsers']=function(_0x306af7,_0x2f33c4,_0x2eb4d3){var _0x46a26b=[];return db[_0x4e78('0x57')][_0x4e78('0x47')]({'where':{'role':[_0x4e78('0x58'),'admin','user']},'attributes':['id',_0x4e78('0x59'),_0x4e78('0x2d'),_0x4e78('0x5a'),'userpic','internal',_0x4e78('0x5b'),_0x4e78('0x5c'),'allowmessenger',_0x4e78('0x5d')],'order':qs[_0x4e78('0x3b')](_0x4e78('0x5e')),'include':[{'model':db['VoiceQueue'],'as':_0x4e78('0x5f'),'attributes':['id',_0x4e78('0x2d'),'type'],'through':{'attributes':[]}}]})[_0x4e78('0x2b')](function(_0x4b671c){if(_0x4b671c){var _0x4363f7=_0x306af7[_0x4e78('0x60')][_0x4e78('0x50')]({'plain':!![]});if(!_0x4363f7)throw new Error(_0x4e78('0x61'));if(_0x4363f7[_0x4e78('0x5a')]===_0x4e78('0x60')){return db['UserProfileSection'][_0x4e78('0x4b')]({'where':{'name':_0x4e78('0x62'),'userProfileId':_0x4363f7[_0x4e78('0x63')]},'raw':!![]})[_0x4e78('0x2b')](function(_0x2cd9ed){if(_0x2cd9ed){if(_0x2cd9ed[_0x4e78('0x64')]===0x0){return db[_0x4e78('0x65')]['findAll']({'where':{'sectionId':_0x2cd9ed['id']},'raw':!![]})[_0x4e78('0x2b')](function(_0x5b34cb){var _0x16093a=[];if(_['isEmpty'](_0x5b34cb)){_0x16093a=_['filter'](_0x4b671c,function(_0x3dbee0){if(_0x3dbee0[_0x4e78('0x5a')]!==_0x4e78('0x58')){return _0x3dbee0;}});return _0x16093a;}else{for(var _0x5beeeb=0x0;_0x5beeeb<_0x4b671c[_0x4e78('0x37')];_0x5beeeb++){var _0x4a49ce=_0x4b671c[_0x5beeeb];if(_0x4a49ce[_0x4e78('0x5a')]===_0x4e78('0x58')){var _0x379309=_[_0x4e78('0x4b')](_0x5b34cb,function(_0x58348d){return _0x58348d['resourceId']===_0x4a49ce['id'];});if(_0x379309)_0x16093a[_0x4e78('0x66')](_0x4a49ce);}else{_0x16093a[_0x4e78('0x66')](_0x4a49ce);}}return _0x16093a;}});}else{return _0x4b671c;}}else{var _0x5d6348=_[_0x4e78('0x43')](_0x4b671c,function(_0x51b72f){if(_0x51b72f[_0x4e78('0x5a')]!=='agent'){return _0x51b72f;}});return _0x5d6348;}});}else{return _0x4b671c;}}})[_0x4e78('0x2b')](function(_0x5c2f37){var _0x2950f0=[];if(_0x5c2f37){_0x46a26b=_0x5c2f37;for(var _0x3aa9c7=0x0;_0x3aa9c7<_0x5c2f37['length'];_0x3aa9c7+=0x1){_0x46a26b[_0x3aa9c7][_0x4e78('0x51')]=[];_0x2950f0[_0x4e78('0x66')](db[_0x4e78('0x30')][_0x4e78('0x4b')]({'where':{'FromId':[_0x306af7[_0x4e78('0x60')]['id'],_0x5c2f37[_0x3aa9c7]['id']],'ToId':[_0x306af7[_0x4e78('0x60')]['id'],_0x5c2f37[_0x3aa9c7]['id']],'ChatGroupId':null},'attributes':['id',_0x4e78('0x53'),_0x4e78('0x67'),_0x4e78('0x68'),'read',_0x4e78('0x4e')],'order':qs[_0x4e78('0x3b')](_0x4e78('0x69')),'limit':0x1,'offset':0x0,'raw':!![]})[_0x4e78('0x2b')](wrapUser(_0x5c2f37[_0x3aa9c7])));}return BPromise[_0x4e78('0x6a')](_0x2950f0);}return[];})['then'](function(_0x26ece4){return{'rows':_0x26ece4,'count':_0x26ece4[_0x4e78('0x37')]};})[_0x4e78('0x2b')](respondWithResult(_0x2f33c4,null))[_0x4e78('0x4c')](handleError(_0x2f33c4,null));};
\ No newline at end of file
index 368ed9d..d864963 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6502=['hasOwnProperty','exports','save','update','remove','emit'];(function(_0x23e5fa,_0x1556f6){var _0x2f1aee=function(_0x23a4af){while(--_0x23a4af){_0x23e5fa['push'](_0x23e5fa['shift']());}};_0x2f1aee(++_0x1556f6);}(_0x6502,0xec));var _0x2650=function(_0x33a369,_0x12d2dc){_0x33a369=_0x33a369-0x0;var _0x4add12=_0x6502[_0x33a369];return _0x4add12;};'use strict';var EventEmitter=require('events');var ChatInternalMessage=require('../../mysqldb')['db']['ChatInternalMessage'];var ChatInternalMessageEvents=new EventEmitter();ChatInternalMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x2650('0x0'),'afterUpdate':_0x2650('0x1'),'afterDestroy':_0x2650('0x2')};function emitEvent(_0x25901b){return function(_0x1c7d99,_0x548ad6,_0x511ad5){ChatInternalMessageEvents[_0x2650('0x3')](_0x25901b+':'+_0x1c7d99['id'],_0x1c7d99);ChatInternalMessageEvents[_0x2650('0x3')](_0x25901b,_0x1c7d99);_0x511ad5(null);};}for(var e in events){if(events[_0x2650('0x4')](e)){var event=events[e];ChatInternalMessage['hook'](e,emitEvent(event));}}module[_0x2650('0x5')]=ChatInternalMessageEvents;
\ No newline at end of file
+var _0xfb58=['update','remove','emit','hasOwnProperty','hook','exports','events','ChatInternalMessage','setMaxListeners','save'];(function(_0x481bf7,_0x437f69){var _0x461787=function(_0xb3bc9d){while(--_0xb3bc9d){_0x481bf7['push'](_0x481bf7['shift']());}};_0x461787(++_0x437f69);}(_0xfb58,0x1f0));var _0x8fb5=function(_0x1b00fc,_0x4590dd){_0x1b00fc=_0x1b00fc-0x0;var _0x4d4fa2=_0xfb58[_0x1b00fc];return _0x4d4fa2;};'use strict';var EventEmitter=require(_0x8fb5('0x0'));var ChatInternalMessage=require('../../mysqldb')['db'][_0x8fb5('0x1')];var ChatInternalMessageEvents=new EventEmitter();ChatInternalMessageEvents[_0x8fb5('0x2')](0x0);var events={'afterCreate':_0x8fb5('0x3'),'afterUpdate':_0x8fb5('0x4'),'afterDestroy':_0x8fb5('0x5')};function emitEvent(_0xeb4ccf){return function(_0x4b33c8,_0x445ed9,_0xddfc91){ChatInternalMessageEvents[_0x8fb5('0x6')](_0xeb4ccf+':'+_0x4b33c8['id'],_0x4b33c8);ChatInternalMessageEvents[_0x8fb5('0x6')](_0xeb4ccf,_0x4b33c8);_0xddfc91(null);};}for(var e in events){if(events[_0x8fb5('0x7')](e)){var event=events[e];ChatInternalMessage[_0x8fb5('0x8')](e,emitEvent(event));}}module[_0x8fb5('0x9')]=ChatInternalMessageEvents;
\ No newline at end of file
index 1897afc..7c578ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ecf=['define','chat_internal_messages','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','moment','exports'];(function(_0x199572,_0x33e667){var _0x13cfa3=function(_0x53c075){while(--_0x53c075){_0x199572['push'](_0x199572['shift']());}};_0x13cfa3(++_0x33e667);}(_0x8ecf,0x1b4));var _0xf8ec=function(_0x2fb20,_0x1f2cb9){_0x2fb20=_0x2fb20-0x0;var _0x3aff15=_0x8ecf[_0x2fb20];return _0x3aff15;};'use strict';var _=require(_0xf8ec('0x0'));var util=require(_0xf8ec('0x1'));var logger=require(_0xf8ec('0x2'))('api');var moment=require(_0xf8ec('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require('./chatInternalMessage.attributes');module[_0xf8ec('0x4')]=function(_0x1232aa,_0x1d0d65){return _0x1232aa[_0xf8ec('0x5')]('ChatInternalMessage',attributes,{'tableName':_0xf8ec('0x6'),'paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xf8ec('0x7'),'collate':_0xf8ec('0x8')});};
\ No newline at end of file
+var _0x617f=['utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','bluebird','request-promise','./chatInternalMessage.attributes','exports','define','ChatInternalMessage'];(function(_0x15fc26,_0x5116b7){var _0x2f4962=function(_0x2306c4){while(--_0x2306c4){_0x15fc26['push'](_0x15fc26['shift']());}};_0x2f4962(++_0x5116b7);}(_0x617f,0xce));var _0xf617=function(_0x145af7,_0x6b0258){_0x145af7=_0x145af7-0x0;var _0x45e218=_0x617f[_0x145af7];return _0x45e218;};'use strict';var _=require(_0xf617('0x0'));var util=require(_0xf617('0x1'));var logger=require(_0xf617('0x2'))(_0xf617('0x3'));var moment=require('moment');var BPromise=require(_0xf617('0x4'));var rp=require(_0xf617('0x5'));var attributes=require(_0xf617('0x6'));module[_0xf617('0x7')]=function(_0x2e8b9e,_0x413779){return _0x2e8b9e[_0xf617('0x8')](_0xf617('0x9'),attributes,{'tableName':'chat_internal_messages','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xf617('0xa'),'collate':_0xf617('0xb')});};
\ No newline at end of file
index 0ed39f8..c0eb4df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfe11=['code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/logger','http','redis','defaults','socket.io-emitter','./chatInternalMessage.socket','register','request','info','ChatInternalMessage,\x20%s,\x20%s','ChatInternalMessage,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error'];(function(_0x1e21d0,_0xddd95a){var _0x5a8dc2=function(_0xf0795f){while(--_0xf0795f){_0x1e21d0['push'](_0x1e21d0['shift']());}};_0x5a8dc2(++_0xddd95a);}(_0xfe11,0x94));var _0x1fe1=function(_0x36a224,_0x23bb6a){_0x36a224=_0x36a224-0x0;var _0x509df2=_0xfe11[_0x36a224];return _0x509df2;};'use strict';var _=require(_0x1fe1('0x0'));var util=require(_0x1fe1('0x1'));var moment=require(_0x1fe1('0x2'));var BPromise=require(_0x1fe1('0x3'));var rs=require(_0x1fe1('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x1fe1('0x5'));var logger=require(_0x1fe1('0x6'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0x1fe1('0x7')]({'port':0x232a});config[_0x1fe1('0x8')]=_[_0x1fe1('0x9')](config[_0x1fe1('0x8')],{'host':'localhost','port':0x18eb});var socket=require(_0x1fe1('0xa'))(new Redis(config[_0x1fe1('0x8')]));require(_0x1fe1('0xb'))[_0x1fe1('0xc')](socket);function respondWithRpcPromise(_0x14b4a4,_0x260e96,_0x169ae6){return new BPromise(function(_0x5e2a94,_0x3db5ab){return client[_0x1fe1('0xd')](_0x14b4a4,_0x169ae6)['then'](function(_0x351f3){logger[_0x1fe1('0xe')](_0x1fe1('0xf'),_0x260e96,'request\x20sent');logger['debug'](_0x1fe1('0x10'),_0x260e96,_0x1fe1('0x11'),JSON[_0x1fe1('0x12')](_0x351f3));if(_0x351f3[_0x1fe1('0x13')]){if(_0x351f3[_0x1fe1('0x13')][_0x1fe1('0x14')]===0x1f4){logger[_0x1fe1('0x13')](_0x1fe1('0xf'),_0x260e96,_0x351f3[_0x1fe1('0x13')][_0x1fe1('0x15')]);return _0x3db5ab(_0x351f3[_0x1fe1('0x13')][_0x1fe1('0x15')]);}logger['error'](_0x1fe1('0xf'),_0x260e96,_0x351f3[_0x1fe1('0x13')][_0x1fe1('0x15')]);return _0x5e2a94(_0x351f3[_0x1fe1('0x13')][_0x1fe1('0x15')]);}else{logger[_0x1fe1('0xe')]('ChatInternalMessage,\x20%s,\x20%s',_0x260e96,_0x1fe1('0x11'));_0x5e2a94(_0x351f3[_0x1fe1('0x16')][_0x1fe1('0x15')]);}})[_0x1fe1('0x17')](function(_0x16c7ff){logger[_0x1fe1('0x13')](_0x1fe1('0xf'),_0x260e96,_0x16c7ff);_0x3db5ab(_0x16c7ff);});});}
\ No newline at end of file
+var _0x6088=['../../config/environment','jayson/promise','client','http','defaults','redis','socket.io-emitter','./chatInternalMessage.socket','register','request','request\x20sent','error','code','ChatInternalMessage,\x20%s,\x20%s','message','info','catch','lodash','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0xa4c85,_0x2b52a7){var _0x172c1f=function(_0x149473){while(--_0x149473){_0xa4c85['push'](_0xa4c85['shift']());}};_0x172c1f(++_0x2b52a7);}(_0x6088,0x188));var _0x8608=function(_0x46250e,_0xaa021f){_0x46250e=_0x46250e-0x0;var _0x2c03e3=_0x6088[_0x46250e];return _0x2c03e3;};'use strict';var _=require(_0x8608('0x0'));var util=require(_0x8608('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x8608('0x2'));var fs=require('fs');var Redis=require(_0x8608('0x3'));var db=require(_0x8608('0x4'))['db'];var utils=require(_0x8608('0x5'));var logger=require(_0x8608('0x6'))(_0x8608('0x7'));var config=require(_0x8608('0x8'));var jayson=require(_0x8608('0x9'));var client=jayson[_0x8608('0xa')][_0x8608('0xb')]({'port':0x232a});config['redis']=_[_0x8608('0xc')](config[_0x8608('0xd')],{'host':'localhost','port':0x18eb});var socket=require(_0x8608('0xe'))(new Redis(config[_0x8608('0xd')]));require(_0x8608('0xf'))[_0x8608('0x10')](socket);function respondWithRpcPromise(_0x2eb192,_0x274a80,_0x4f3b5d){return new BPromise(function(_0x20a2c1,_0x3b896e){return client[_0x8608('0x11')](_0x2eb192,_0x4f3b5d)['then'](function(_0x1de5b3){logger['info']('ChatInternalMessage,\x20%s,\x20%s',_0x274a80,_0x8608('0x12'));logger['debug']('ChatInternalMessage,\x20%s,\x20%s,\x20%s',_0x274a80,_0x8608('0x12'),JSON['stringify'](_0x1de5b3));if(_0x1de5b3[_0x8608('0x13')]){if(_0x1de5b3['error'][_0x8608('0x14')]===0x1f4){logger[_0x8608('0x13')](_0x8608('0x15'),_0x274a80,_0x1de5b3[_0x8608('0x13')]['message']);return _0x3b896e(_0x1de5b3['error'][_0x8608('0x16')]);}logger['error'](_0x8608('0x15'),_0x274a80,_0x1de5b3[_0x8608('0x13')]['message']);return _0x20a2c1(_0x1de5b3[_0x8608('0x13')][_0x8608('0x16')]);}else{logger[_0x8608('0x17')]('ChatInternalMessage,\x20%s,\x20%s',_0x274a80,_0x8608('0x12'));_0x20a2c1(_0x1de5b3['result']['message']);}})[_0x8608('0x18')](function(_0x292752){logger[_0x8608('0x13')](_0x8608('0x15'),_0x274a80,_0x292752);_0x3b896e(_0x292752);});});}
\ No newline at end of file
index 42fb9b2..1b7cdbb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5204=['register','length','chatInternalMessage:','save','remove','update','emit'];(function(_0x12c357,_0x2dba0f){var _0xa17de2=function(_0x11beff){while(--_0x11beff){_0x12c357['push'](_0x12c357['shift']());}};_0xa17de2(++_0x2dba0f);}(_0x5204,0x130));var _0x4520=function(_0xc67528,_0x24e2fb){_0xc67528=_0xc67528-0x0;var _0x38e26d=_0x5204[_0xc67528];return _0x38e26d;};'use strict';var ChatInternalMessageEvents=require('./chatInternalMessage.events');var events=[_0x4520('0x0'),_0x4520('0x1'),_0x4520('0x2')];function createListener(_0x270f94,_0x20c077){return function(_0x32977c){_0x20c077[_0x4520('0x3')](_0x270f94,_0x32977c);};}function removeListener(_0x2afe1f,_0x588cd2){return function(){ChatInternalMessageEvents['removeListener'](_0x2afe1f,_0x588cd2);};}exports[_0x4520('0x4')]=function(_0x863e8c){for(var _0x2783be=0x0,_0x263414=events[_0x4520('0x5')];_0x2783be<_0x263414;_0x2783be++){var _0x58158d=events[_0x2783be];var _0x4cf156=createListener(_0x4520('0x6')+_0x58158d,_0x863e8c);ChatInternalMessageEvents['on'](_0x58158d,_0x4cf156);}};
\ No newline at end of file
+var _0x9167=['remove','update','chatInternalMessage:','./chatInternalMessage.events','save'];(function(_0x2e6939,_0x2b9c38){var _0x158250=function(_0x27b692){while(--_0x27b692){_0x2e6939['push'](_0x2e6939['shift']());}};_0x158250(++_0x2b9c38);}(_0x9167,0xa3));var _0x7916=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x9167[_0x3dd15e];return _0x231fd0;};'use strict';var ChatInternalMessageEvents=require(_0x7916('0x0'));var events=[_0x7916('0x1'),_0x7916('0x2'),_0x7916('0x3')];function createListener(_0xcacb0e,_0x5eeefe){return function(_0x56457f){_0x5eeefe['emit'](_0xcacb0e,_0x56457f);};}function removeListener(_0x5a13fe,_0x40cb5a){return function(){ChatInternalMessageEvents['removeListener'](_0x5a13fe,_0x40cb5a);};}exports['register']=function(_0xf70e13){for(var _0xb44b9=0x0,_0x12f999=events['length'];_0xb44b9<_0x12f999;_0xb44b9++){var _0x42a4b1=events[_0xb44b9];var _0x38c127=createListener(_0x7916('0x4')+_0x42a4b1,_0xf70e13);ChatInternalMessageEvents['on'](_0x42a4b1,_0x38c127);}};
\ No newline at end of file
index aea9341..026e712 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaaee=['get','isAuthenticated','index','/describe','describe','getUsers','/:id','show','post','put','delete','destroy','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatInternalMessage.controller'];(function(_0x574ee8,_0x2aba93){var _0x4197a3=function(_0xf6b7c0){while(--_0xf6b7c0){_0x574ee8['push'](_0x574ee8['shift']());}};_0x4197a3(++_0x2aba93);}(_0xaaee,0x132));var _0xeaae=function(_0x2da32b,_0x2657c1){_0x2da32b=_0x2da32b-0x0;var _0xe8a562=_0xaaee[_0x2da32b];return _0xe8a562;};'use strict';var multer=require(_0xeaae('0x0'));var util=require(_0xeaae('0x1'));var path=require(_0xeaae('0x2'));var timeout=require(_0xeaae('0x3'));var express=require(_0xeaae('0x4'));var router=express['Router']();var auth=require(_0xeaae('0x5'));var interaction=require(_0xeaae('0x6'));var config=require(_0xeaae('0x7'));var controller=require(_0xeaae('0x8'));router[_0xeaae('0x9')]('/',auth[_0xeaae('0xa')](),controller[_0xeaae('0xb')]);router[_0xeaae('0x9')](_0xeaae('0xc'),auth[_0xeaae('0xa')](),controller[_0xeaae('0xd')]);router[_0xeaae('0x9')]('/users',auth[_0xeaae('0xa')](),controller[_0xeaae('0xe')]);router['get'](_0xeaae('0xf'),auth[_0xeaae('0xa')](),controller[_0xeaae('0x10')]);router[_0xeaae('0x11')]('/',auth['isAuthenticated'](),controller['create']);router[_0xeaae('0x12')](_0xeaae('0xf'),controller['update']);router[_0xeaae('0x13')](_0xeaae('0xf'),auth[_0xeaae('0xa')](),controller[_0xeaae('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0xbeff=['../../config/environment','./chatInternalMessage.controller','get','isAuthenticated','index','/describe','describe','/users','/:id','show','post','create','put','delete','destroy','exports','multer','connect-timeout','express','../../components/auth/service','../../components/interaction/service'];(function(_0x2e96d6,_0x42dbbb){var _0x6981a2=function(_0x3b7957){while(--_0x3b7957){_0x2e96d6['push'](_0x2e96d6['shift']());}};_0x6981a2(++_0x42dbbb);}(_0xbeff,0x14b));var _0xfbef=function(_0x1468a4,_0x3ce4cc){_0x1468a4=_0x1468a4-0x0;var _0x5205a6=_0xbeff[_0x1468a4];return _0x5205a6;};'use strict';var multer=require(_0xfbef('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xfbef('0x1'));var express=require(_0xfbef('0x2'));var router=express['Router']();var auth=require(_0xfbef('0x3'));var interaction=require(_0xfbef('0x4'));var config=require(_0xfbef('0x5'));var controller=require(_0xfbef('0x6'));router[_0xfbef('0x7')]('/',auth[_0xfbef('0x8')](),controller[_0xfbef('0x9')]);router[_0xfbef('0x7')](_0xfbef('0xa'),auth[_0xfbef('0x8')](),controller[_0xfbef('0xb')]);router['get'](_0xfbef('0xc'),auth[_0xfbef('0x8')](),controller['getUsers']);router[_0xfbef('0x7')](_0xfbef('0xd'),auth[_0xfbef('0x8')](),controller[_0xfbef('0xe')]);router[_0xfbef('0xf')]('/',auth['isAuthenticated'](),controller[_0xfbef('0x10')]);router[_0xfbef('0x11')](_0xfbef('0xd'),controller['update']);router[_0xfbef('0x12')](_0xfbef('0xd'),auth[_0xfbef('0x8')](),controller[_0xfbef('0x13')]);module[_0xfbef('0x14')]=router;
\ No newline at end of file
index 58e7d07..e098ed3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9cb4=['DATE','TEXT','medium','BOOLEAN','ENUM','out'];(function(_0x5a3cf0,_0x160a68){var _0x5a64ee=function(_0x34cd1d){while(--_0x34cd1d){_0x5a3cf0['push'](_0x5a3cf0['shift']());}};_0x5a64ee(++_0x160a68);}(_0x9cb4,0x133));var _0x49cb=function(_0x2fbb2b,_0x2016bb){_0x2fbb2b=_0x2fbb2b-0x0;var _0x10578b=_0x9cb4[_0x2fbb2b];return _0x10578b;};'use strict';var Sequelize=require('sequelize');module['exports']={'body':{'type':Sequelize[_0x49cb('0x0')](_0x49cb('0x1')),'allowNull':![]},'read':{'type':Sequelize[_0x49cb('0x2')],'defaultValue':![]},'secret':{'type':Sequelize[_0x49cb('0x2')],'defaultValue':![]},'direction':{'type':Sequelize[_0x49cb('0x3')]('in',_0x49cb('0x4')),'defaultValue':_0x49cb('0x4'),'allowNull':![]},'readAt':{'type':Sequelize[_0x49cb('0x5')]}};
\ No newline at end of file
+var _0x9a75=['TEXT','BOOLEAN','ENUM','out','DATE','sequelize','exports'];(function(_0x54d4a8,_0x585a59){var _0x3b321b=function(_0x245c6a){while(--_0x245c6a){_0x54d4a8['push'](_0x54d4a8['shift']());}};_0x3b321b(++_0x585a59);}(_0x9a75,0x101));var _0x59a7=function(_0xbb6d7d,_0x482059){_0xbb6d7d=_0xbb6d7d-0x0;var _0x5190c0=_0x9a75[_0xbb6d7d];return _0x5190c0;};'use strict';var Sequelize=require(_0x59a7('0x0'));module[_0x59a7('0x1')]={'body':{'type':Sequelize[_0x59a7('0x2')]('medium'),'allowNull':![]},'read':{'type':Sequelize[_0x59a7('0x3')],'defaultValue':![]},'secret':{'type':Sequelize[_0x59a7('0x3')],'defaultValue':![]},'direction':{'type':Sequelize[_0x59a7('0x4')]('in',_0x59a7('0x5')),'defaultValue':_0x59a7('0x5'),'allowNull':![]},'readAt':{'type':Sequelize[_0x59a7('0x6')]}};
\ No newline at end of file
index 80a7099..62dc2ea 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3d27=['formData','../../config/logger','chat-interactions','agent','[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','rejectMessage','rejectmessage','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','client','http','request','then','info','ChatMessage,\x20%s,\x20%s','request\x20sent','debug','ChatMessage,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','name','send','ChatMessage','model','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','map','key','filter','include','rows','show','params','rawAttributes','includeAll','options','find','create','body','describe','chat','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','Contact','get','ChatInteraction','ChatInteractionId','isNil','read1stAt','interaction','[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','stringify','acceptMessage','manual','interface','SIP/%s','channel','accept','EventManager','acceptmessage','parse'];(function(_0x4fa166,_0x58b7fb){var _0x5dd974=function(_0x342886){while(--_0x342886){_0x4fa166['push'](_0x4fa166['shift']());}};_0x5dd974(++_0x58b7fb);}(_0x3d27,0x7c));var _0x73d2=function(_0x324e86,_0x81b1cb){_0x324e86=_0x324e86-0x0;var _0x592846=_0x3d27[_0x324e86];return _0x592846;};'use strict';var pdf=require(_0x73d2('0x0'));var emlformat=require(_0x73d2('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x73d2('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x73d2('0x3'));var moment=require(_0x73d2('0x4'));var BPromise=require(_0x73d2('0x5'));var Mustache=require(_0x73d2('0x6'));var util=require(_0x73d2('0x7'));var path=require('path');var sox=require(_0x73d2('0x8'));var csv=require('to-csv');var ejs=require(_0x73d2('0x9'));var fs=require('fs');var _=require(_0x73d2('0xa'));var squel=require(_0x73d2('0xb'));var crypto=require(_0x73d2('0xc'));var jsforce=require(_0x73d2('0xd'));var deskjs=require(_0x73d2('0xe'));var toCsv=require(_0x73d2('0xf'));var querystring=require('querystring');var Papa=require(_0x73d2('0x10'));var authService=require(_0x73d2('0x11'));var hardwareService=require(_0x73d2('0x12'));var Redis=require('ioredis');var qs=require(_0x73d2('0x13'));var logger=require('../../config/logger')(_0x73d2('0x14'));var utils=require(_0x73d2('0x15'));var config=require('../../config/environment');var db=require(_0x73d2('0x16'))['db'];config[_0x73d2('0x17')]=_[_0x73d2('0x18')](config[_0x73d2('0x17')],{'host':_0x73d2('0x19'),'port':0x18eb});var socket=require(_0x73d2('0x1a'))(new Redis(config[_0x73d2('0x17')]));require(_0x73d2('0x1b'))['register'](socket);var jayson=require('jayson/promise');var client=jayson[_0x73d2('0x1c')][_0x73d2('0x1d')]({'port':0x232c});var client9002=jayson['client'][_0x73d2('0x1d')]({'port':0x232a});function respondWithRpcPromise(_0x48c7bb,_0x4eeb59,_0x27cd44,_0x2a7ec4){return new BPromise(function(_0x23c5f0,_0x3822c0){var _0x2037e6=_0x2a7ec4||client;return _0x2037e6[_0x73d2('0x1e')](_0x48c7bb,_0x27cd44)[_0x73d2('0x1f')](function(_0x68d81e){logger[_0x73d2('0x20')](_0x73d2('0x21'),_0x4eeb59,_0x73d2('0x22'));logger[_0x73d2('0x23')](_0x73d2('0x24'),_0x4eeb59,_0x73d2('0x22'),JSON['stringify'](_0x68d81e));if(_0x68d81e[_0x73d2('0x25')]){if(_0x68d81e[_0x73d2('0x25')][_0x73d2('0x26')]===0x1f4){logger[_0x73d2('0x25')](_0x73d2('0x21'),_0x4eeb59,_0x68d81e[_0x73d2('0x25')][_0x73d2('0x27')]);return _0x3822c0(_0x68d81e[_0x73d2('0x25')][_0x73d2('0x27')]);}logger['error'](_0x73d2('0x21'),_0x4eeb59,_0x68d81e[_0x73d2('0x25')]['message']);return _0x23c5f0(_0x68d81e[_0x73d2('0x25')][_0x73d2('0x27')]);}else{logger[_0x73d2('0x20')](_0x73d2('0x21'),_0x4eeb59,'request\x20sent');_0x23c5f0(_0x68d81e[_0x73d2('0x28')][_0x73d2('0x27')]);}})[_0x73d2('0x29')](function(_0x3a3351){logger[_0x73d2('0x25')](_0x73d2('0x21'),_0x4eeb59,_0x3a3351);_0x3822c0(_0x3a3351);});});}function respondWithStatusCode(_0x40898c,_0x325b54){_0x325b54=_0x325b54||0xcc;return function(_0x1efc56){if(_0x1efc56){return _0x40898c['sendStatus'](_0x325b54);}return _0x40898c[_0x73d2('0x2a')](_0x325b54)[_0x73d2('0x2b')]();};}function respondWithResult(_0x1f939b,_0x54a535){_0x54a535=_0x54a535||0xc8;return function(_0x165da1){if(_0x165da1){return _0x1f939b[_0x73d2('0x2a')](_0x54a535)[_0x73d2('0x2c')](_0x165da1);}};}function respondWithFilteredResult(_0x35e770,_0x418b90){return function(_0x2795e2){if(_0x2795e2){var _0x37c87f=_0x2795e2[_0x73d2('0x2d')],_0x2932b2=_0x418b90['offset'],_0x2c88b2=_0x418b90[_0x73d2('0x2e')]+_0x418b90[_0x73d2('0x2f')],_0x5598e0;if(_0x2c88b2>=_0x37c87f){_0x2c88b2=_0x37c87f;_0x5598e0=0xc8;}else{_0x5598e0=0xce;}_0x35e770[_0x73d2('0x2a')](_0x5598e0);return _0x35e770[_0x73d2('0x30')]('Content-Range',_0x2932b2+'-'+_0x2c88b2+'/'+_0x37c87f)[_0x73d2('0x2c')](_0x2795e2);}return null;};}function patchUpdates(_0x1cce1c){return function(_0x198a7b){try{jsonpatch[_0x73d2('0x31')](_0x198a7b,_0x1cce1c,!![]);}catch(_0x2e07ed){return BPromise[_0x73d2('0x32')](_0x2e07ed);}return _0x198a7b[_0x73d2('0x33')]();};}function saveUpdates(_0x1740c0,_0x1ffe68){return function(_0x464abe){if(_0x464abe){return _0x464abe[_0x73d2('0x34')](_0x1740c0)['then'](function(_0x2370c0){return _0x2370c0;});}return null;};}function removeEntity(_0x191fb3,_0x15ed4b){return function(_0x4fa3bd){if(_0x4fa3bd){return _0x4fa3bd[_0x73d2('0x35')]()[_0x73d2('0x1f')](function(){_0x191fb3[_0x73d2('0x2a')](0xcc)[_0x73d2('0x2b')]();});}};}function handleEntityNotFound(_0x243ed6,_0x67fb76){return function(_0x4a4c92){if(!_0x4a4c92){_0x243ed6['sendStatus'](0x194);}return _0x4a4c92;};}function handleError(_0x84e27c,_0x5a6e70){_0x5a6e70=_0x5a6e70||0x1f4;return function(_0x23d9f9){logger[_0x73d2('0x25')](_0x23d9f9['stack']);if(_0x23d9f9[_0x73d2('0x36')]){delete _0x23d9f9[_0x73d2('0x36')];}_0x84e27c[_0x73d2('0x2a')](_0x5a6e70)[_0x73d2('0x37')](_0x23d9f9);};}exports['index']=function(_0x27973d,_0x509774){var _0xeefd23={},_0x15121e={},_0x35a4c9={'count':0x0,'rows':[]};var _0x132678=db[_0x73d2('0x38')]['rawAttributes'];_0x15121e[_0x73d2('0x39')]=_['keys'](_0x132678);_0x15121e[_0x73d2('0x3a')]=_[_0x73d2('0x3b')](_0x27973d[_0x73d2('0x3a')]);_0x15121e[_0x73d2('0x3c')]=_['intersection'](_0x15121e[_0x73d2('0x39')],_0x15121e[_0x73d2('0x3a')]);_0xeefd23[_0x73d2('0x3d')]=_[_0x73d2('0x3e')](_0x15121e['model'],qs[_0x73d2('0x3f')](_0x27973d['query'][_0x73d2('0x3f')]));_0xeefd23[_0x73d2('0x3d')]=_0xeefd23[_0x73d2('0x3d')][_0x73d2('0x40')]?_0xeefd23[_0x73d2('0x3d')]:_0x15121e[_0x73d2('0x39')];if(!_0x27973d[_0x73d2('0x3a')][_0x73d2('0x41')](_0x73d2('0x42'))){_0xeefd23[_0x73d2('0x2f')]=qs[_0x73d2('0x2f')](_0x27973d['query'][_0x73d2('0x2f')]);_0xeefd23[_0x73d2('0x2e')]=qs[_0x73d2('0x2e')](_0x27973d[_0x73d2('0x3a')][_0x73d2('0x2e')]);}_0xeefd23['order']=qs[_0x73d2('0x43')](_0x27973d[_0x73d2('0x3a')]['sort']);_0xeefd23[_0x73d2('0x44')]=qs[_0x73d2('0x3c')](_[_0x73d2('0x45')](_0x27973d[_0x73d2('0x3a')],_0x15121e[_0x73d2('0x3c')]));if(_0x27973d[_0x73d2('0x3a')]['filter']){_0xeefd23[_0x73d2('0x44')]=_[_0x73d2('0x46')](_0xeefd23[_0x73d2('0x44')],{'$or':_[_0x73d2('0x47')](_0x132678,function(_0x5e8937){if(_0x5e8937['type'][_0x73d2('0x48')]!=='VIRTUAL'){var _0x44b9ae={};_0x44b9ae[_0x5e8937['field']]={'$like':'%'+_0x27973d[_0x73d2('0x3a')][_0x73d2('0x49')]+'%'};return _0x44b9ae;}})});}_0xeefd23=_[_0x73d2('0x46')]({},_0xeefd23,_0x27973d['options']);var _0x4f972d={'where':_0xeefd23['where']};return db[_0x73d2('0x38')][_0x73d2('0x2d')](_0x4f972d)[_0x73d2('0x1f')](function(_0xd6ad8a){_0x35a4c9[_0x73d2('0x2d')]=_0xd6ad8a;if(_0x27973d[_0x73d2('0x3a')]['includeAll']){_0xeefd23[_0x73d2('0x4a')]=[{'all':!![]}];}return db[_0x73d2('0x38')]['findAll'](_0xeefd23);})['then'](function(_0x5f574b){_0x35a4c9[_0x73d2('0x4b')]=_0x5f574b;return _0x35a4c9;})[_0x73d2('0x1f')](respondWithFilteredResult(_0x509774,_0xeefd23))[_0x73d2('0x29')](handleError(_0x509774,null));};exports[_0x73d2('0x4c')]=function(_0x346735,_0x574e0a){var _0x3782e8={'raw':!![],'where':{'id':_0x346735[_0x73d2('0x4d')]['id']}},_0x5e7a79={};_0x5e7a79[_0x73d2('0x39')]=_[_0x73d2('0x3b')](db[_0x73d2('0x38')][_0x73d2('0x4e')]);_0x5e7a79[_0x73d2('0x3a')]=_[_0x73d2('0x3b')](_0x346735['query']);_0x5e7a79[_0x73d2('0x3c')]=_['intersection'](_0x5e7a79['model'],_0x5e7a79[_0x73d2('0x3a')]);_0x3782e8['attributes']=_['intersection'](_0x5e7a79['model'],qs['fields'](_0x346735['query'][_0x73d2('0x3f')]));_0x3782e8[_0x73d2('0x3d')]=_0x3782e8[_0x73d2('0x3d')][_0x73d2('0x40')]?_0x3782e8[_0x73d2('0x3d')]:_0x5e7a79[_0x73d2('0x39')];if(_0x346735['query'][_0x73d2('0x4f')]){_0x3782e8[_0x73d2('0x4a')]=[{'all':!![]}];}_0x3782e8=_[_0x73d2('0x46')]({},_0x3782e8,_0x346735[_0x73d2('0x50')]);return db[_0x73d2('0x38')][_0x73d2('0x51')](_0x3782e8)[_0x73d2('0x1f')](handleEntityNotFound(_0x574e0a,null))[_0x73d2('0x1f')](respondWithResult(_0x574e0a,null))[_0x73d2('0x29')](handleError(_0x574e0a,null));};exports[_0x73d2('0x52')]=function(_0x56db91,_0x12bfe3){return db[_0x73d2('0x38')][_0x73d2('0x52')](_0x56db91['body'],{})[_0x73d2('0x1f')](respondWithResult(_0x12bfe3,0xc9))[_0x73d2('0x29')](handleError(_0x12bfe3,null));};exports[_0x73d2('0x34')]=function(_0xfbac81,_0x26d565){if(_0xfbac81[_0x73d2('0x53')]['id']){delete _0xfbac81[_0x73d2('0x53')]['id'];}return db[_0x73d2('0x38')][_0x73d2('0x51')]({'where':{'id':_0xfbac81[_0x73d2('0x4d')]['id']}})[_0x73d2('0x1f')](handleEntityNotFound(_0x26d565,null))['then'](saveUpdates(_0xfbac81[_0x73d2('0x53')],null))[_0x73d2('0x1f')](respondWithResult(_0x26d565,null))['catch'](handleError(_0x26d565,null));};exports['destroy']=function(_0x70c721,_0x417fbf){return db[_0x73d2('0x38')][_0x73d2('0x51')]({'where':{'id':_0x70c721[_0x73d2('0x4d')]['id']}})['then'](handleEntityNotFound(_0x417fbf,null))['then'](removeEntity(_0x417fbf,null))['catch'](handleError(_0x417fbf,null));};exports[_0x73d2('0x54')]=function(_0x3a8e90,_0x55824c){return db[_0x73d2('0x38')][_0x73d2('0x54')]()[_0x73d2('0x1f')](respondWithResult(_0x55824c,null))[_0x73d2('0x29')](handleError(_0x55824c,null));};var interaction_log=require('../../config/logger')('chat-interactions');exports['accept']=function(_0x5c0cf6,_0x102ca6,_0x4dc422){var _0x3db84c={'channel':_0x73d2('0x55')};if(_0x5c0cf6[_0x73d2('0x53')]['id']){delete _0x5c0cf6[_0x73d2('0x53')]['id'];}_0x5c0cf6[_0x73d2('0x53')]['read']=!![];_0x5c0cf6[_0x73d2('0x53')][_0x73d2('0x56')]=moment()[_0x73d2('0x57')](_0x73d2('0x58'));_0x5c0cf6[_0x73d2('0x53')]['UserId']=_0x5c0cf6[_0x73d2('0x53')][_0x73d2('0x59')]||_0x5c0cf6[_0x73d2('0x5a')]['id'];return db[_0x73d2('0x38')][_0x73d2('0x51')]({'where':{'id':_0x5c0cf6['params']['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0x73d2('0x5b')}]})[_0x73d2('0x1f')](handleEntityNotFound(_0x102ca6,null))[_0x73d2('0x1f')](saveUpdates(_0x5c0cf6['body'],null))[_0x73d2('0x1f')](function(_0x4bc544){if(_0x4bc544){_0x3db84c[_0x73d2('0x27')]=_0x4bc544[_0x73d2('0x5c')]({'plain':!![]});return db[_0x73d2('0x5d')]['find']({'where':{'id':_0x4bc544[_0x73d2('0x5e')]}});}return null;})[_0x73d2('0x1f')](handleEntityNotFound(_0x102ca6,null))[_0x73d2('0x1f')](function(_0x4dbe2d){if(_0x4dbe2d){return _0x4dbe2d['update']({'UserId':_0x5c0cf6['body'][_0x73d2('0x59')],'read1stAt':_[_0x73d2('0x5f')](_0x4dbe2d[_0x73d2('0x60')])?moment()[_0x73d2('0x57')](_0x73d2('0x58')):undefined});}return null;})[_0x73d2('0x1f')](function(_0x394848){if(_0x394848){_0x3db84c[_0x73d2('0x61')]=_0x394848[_0x73d2('0x5c')]({'plain':!![]});interaction_log['info'](_0x73d2('0x62'),_0x5c0cf6[_0x73d2('0x5a')]['id'],_0x5c0cf6[_0x73d2('0x5a')][_0x73d2('0x36')],_0x5c0cf6[_0x73d2('0x5a')][_0x73d2('0x63')],_0x3db84c['interaction']['id'],_0x5c0cf6[_0x73d2('0x53')]?JSON[_0x73d2('0x64')](_0x5c0cf6[_0x73d2('0x53')]):'null');return respondWithRpcPromise('AcceptMessage',_0x73d2('0x65'),_0x3db84c);}return null;})[_0x73d2('0x1f')](function(_0x21cb39){if(_0x21cb39){if(_0x5c0cf6[_0x73d2('0x53')][_0x73d2('0x66')]){_0x3db84c[_0x73d2('0x27')][_0x73d2('0x67')]=util[_0x73d2('0x57')](_0x73d2('0x68'),_0x5c0cf6[_0x73d2('0x5a')]['name']);_0x3db84c['message'][_0x73d2('0x69')]=_0x3db84c[_0x73d2('0x69')];_0x3db84c[_0x73d2('0x27')]['event']=_0x73d2('0x6a');return respondWithRpcPromise(_0x73d2('0x6b'),_0x73d2('0x6b'),{'event':_0x73d2('0x6c'),'message':_['merge'](_0x3db84c['message'],JSON[_0x73d2('0x6d')](_0x3db84c[_0x73d2('0x61')][_0x73d2('0x6e')]))},client9002)[_0x73d2('0x1f')](function(){return _0x3db84c;});}return _0x3db84c;}return null;})['then'](respondWithResult(_0x102ca6,null))[_0x73d2('0x29')](handleError(_0x102ca6,null));};var interaction_log=require(_0x73d2('0x6f'))(_0x73d2('0x70'));exports['reject']=function(_0x37acd7,_0x112c89,_0x5631e8){var _0x3b91e3={'agent':{},'channel':'chat'};if(_0x37acd7[_0x73d2('0x53')]['id']){delete _0x37acd7[_0x73d2('0x53')]['id'];}_0x37acd7[_0x73d2('0x53')][_0x73d2('0x59')]=_0x37acd7[_0x73d2('0x53')]['UserId']||_0x37acd7[_0x73d2('0x5a')]['id'];_0x3b91e3[_0x73d2('0x71')]['id']=_0x37acd7[_0x73d2('0x53')][_0x73d2('0x59')];return db[_0x73d2('0x38')]['find']({'where':{'id':_0x37acd7['params']['id'],'UserId':null}})['then'](handleEntityNotFound(_0x112c89,null))[_0x73d2('0x1f')](function(_0x2c94e1){if(_0x2c94e1){_0x3b91e3[_0x73d2('0x27')]=_0x2c94e1[_0x73d2('0x5c')]({'plain':!![]});return db[_0x73d2('0x5d')]['find']({'where':{'id':_0x2c94e1['ChatInteractionId']}});}return null;})[_0x73d2('0x1f')](handleEntityNotFound(_0x112c89,null))[_0x73d2('0x1f')](function(_0x5710c0){if(_0x5710c0){_0x3b91e3['interaction']=_0x5710c0[_0x73d2('0x5c')]({'plain':!![]});interaction_log[_0x73d2('0x20')](_0x73d2('0x72'),_0x37acd7['user']['id'],_0x37acd7[_0x73d2('0x5a')][_0x73d2('0x36')],_0x37acd7[_0x73d2('0x5a')][_0x73d2('0x63')],_0x3b91e3[_0x73d2('0x61')]['id'],_0x37acd7[_0x73d2('0x53')]?JSON[_0x73d2('0x64')](_0x37acd7[_0x73d2('0x53')]):'null');return respondWithRpcPromise('RejectMessage',_0x73d2('0x73'),_0x3b91e3);}return null;})[_0x73d2('0x1f')](function(_0x1f3049){if(_0x1f3049){_0x1f3049['message'][_0x73d2('0x67')]=util[_0x73d2('0x57')](_0x73d2('0x68'),_0x37acd7[_0x73d2('0x5a')][_0x73d2('0x36')]);_0x1f3049[_0x73d2('0x27')][_0x73d2('0x69')]=_0x3b91e3['channel'];_0x1f3049[_0x73d2('0x27')]['event']='reject';respondWithRpcPromise('EventManager',_0x73d2('0x6b'),{'event':_0x73d2('0x74'),'message':_0x1f3049[_0x73d2('0x27')]},client9002);return _0x3b91e3;}return null;})[_0x73d2('0x1f')](respondWithResult(_0x112c89,null))[_0x73d2('0x29')](handleError(_0x112c89,null));};
\ No newline at end of file
+var _0x5ec1=['sort','pick','filters','where','merge','map','type','key','VIRTUAL','field','filter','options','count','includeAll','include','findAll','show','params','create','body','find','describe','chat-interactions','chat','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','get','ChatInteraction','ChatInteractionId','isNil','read1stAt','interaction','[CHATMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','acceptMessage','manual','channel','event','EventManager','acceptmessage','formData','[CHATMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','rejectMessage','interface','reject','rejectmessage','html-pdf','zip-dir','request-promise','moment','mustache','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','jayson/promise','client','http','request','then','info','ChatMessage,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','status','end','offset','limit','set','Content-Range','json','apply','save','update','destroy','sendStatus','stack','name','send','index','ChatMessage','rawAttributes','model','keys','query','attributes','intersection','fields','length','hasOwnProperty','nolimit','order'];(function(_0x369534,_0x5557c4){var _0x524bf9=function(_0x24c6fb){while(--_0x24c6fb){_0x369534['push'](_0x369534['shift']());}};_0x524bf9(++_0x5557c4);}(_0x5ec1,0xa8));var _0x15ec=function(_0xef4cf0,_0x16c9c3){_0xef4cf0=_0xef4cf0-0x0;var _0x497ad2=_0x5ec1[_0xef4cf0];return _0x497ad2;};'use strict';var pdf=require(_0x15ec('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x15ec('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0x15ec('0x2'));var moment=require(_0x15ec('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x15ec('0x4'));var util=require('util');var path=require('path');var sox=require(_0x15ec('0x5'));var csv=require(_0x15ec('0x6'));var ejs=require(_0x15ec('0x7'));var fs=require('fs');var _=require(_0x15ec('0x8'));var squel=require('squel');var crypto=require(_0x15ec('0x9'));var jsforce=require(_0x15ec('0xa'));var deskjs=require(_0x15ec('0xb'));var toCsv=require(_0x15ec('0x6'));var querystring=require(_0x15ec('0xc'));var Papa=require(_0x15ec('0xd'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0x15ec('0xe'));var qs=require(_0x15ec('0xf'));var logger=require(_0x15ec('0x10'))(_0x15ec('0x11'));var utils=require(_0x15ec('0x12'));var config=require(_0x15ec('0x13'));var db=require(_0x15ec('0x14'))['db'];config[_0x15ec('0x15')]=_[_0x15ec('0x16')](config[_0x15ec('0x15')],{'host':_0x15ec('0x17'),'port':0x18eb});var socket=require(_0x15ec('0x18'))(new Redis(config[_0x15ec('0x15')]));require(_0x15ec('0x19'))['register'](socket);var jayson=require(_0x15ec('0x1a'));var client=jayson[_0x15ec('0x1b')][_0x15ec('0x1c')]({'port':0x232c});var client9002=jayson['client'][_0x15ec('0x1c')]({'port':0x232a});function respondWithRpcPromise(_0x583c8a,_0x392170,_0x24d660,_0x467ca1){return new BPromise(function(_0x59fe81,_0xa2711f){var _0x41f9c4=_0x467ca1||client;return _0x41f9c4[_0x15ec('0x1d')](_0x583c8a,_0x24d660)[_0x15ec('0x1e')](function(_0x1e4556){logger[_0x15ec('0x1f')](_0x15ec('0x20'),_0x392170,_0x15ec('0x21'));logger['debug']('ChatMessage,\x20%s,\x20%s,\x20%s',_0x392170,_0x15ec('0x21'),JSON[_0x15ec('0x22')](_0x1e4556));if(_0x1e4556['error']){if(_0x1e4556[_0x15ec('0x23')][_0x15ec('0x24')]===0x1f4){logger[_0x15ec('0x23')](_0x15ec('0x20'),_0x392170,_0x1e4556['error'][_0x15ec('0x25')]);return _0xa2711f(_0x1e4556[_0x15ec('0x23')][_0x15ec('0x25')]);}logger['error'](_0x15ec('0x20'),_0x392170,_0x1e4556[_0x15ec('0x23')][_0x15ec('0x25')]);return _0x59fe81(_0x1e4556[_0x15ec('0x23')][_0x15ec('0x25')]);}else{logger['info'](_0x15ec('0x20'),_0x392170,'request\x20sent');_0x59fe81(_0x1e4556[_0x15ec('0x26')][_0x15ec('0x25')]);}})[_0x15ec('0x27')](function(_0x8ed754){logger['error']('ChatMessage,\x20%s,\x20%s',_0x392170,_0x8ed754);_0xa2711f(_0x8ed754);});});}function respondWithStatusCode(_0x3303fe,_0x3427a5){_0x3427a5=_0x3427a5||0xcc;return function(_0x312772){if(_0x312772){return _0x3303fe['sendStatus'](_0x3427a5);}return _0x3303fe[_0x15ec('0x28')](_0x3427a5)[_0x15ec('0x29')]();};}function respondWithResult(_0x55448b,_0x1df478){_0x1df478=_0x1df478||0xc8;return function(_0x18fadc){if(_0x18fadc){return _0x55448b[_0x15ec('0x28')](_0x1df478)['json'](_0x18fadc);}};}function respondWithFilteredResult(_0x44dfb5,_0x2cd8ef){return function(_0x3bc56c){if(_0x3bc56c){var _0x3f1449=_0x3bc56c['count'],_0x51ef24=_0x2cd8ef[_0x15ec('0x2a')],_0x36175a=_0x2cd8ef['offset']+_0x2cd8ef[_0x15ec('0x2b')],_0xd3c14d;if(_0x36175a>=_0x3f1449){_0x36175a=_0x3f1449;_0xd3c14d=0xc8;}else{_0xd3c14d=0xce;}_0x44dfb5[_0x15ec('0x28')](_0xd3c14d);return _0x44dfb5[_0x15ec('0x2c')](_0x15ec('0x2d'),_0x51ef24+'-'+_0x36175a+'/'+_0x3f1449)[_0x15ec('0x2e')](_0x3bc56c);}return null;};}function patchUpdates(_0x6e9765){return function(_0x46eb79){try{jsonpatch[_0x15ec('0x2f')](_0x46eb79,_0x6e9765,!![]);}catch(_0x640d68){return BPromise['reject'](_0x640d68);}return _0x46eb79[_0x15ec('0x30')]();};}function saveUpdates(_0x26de4d,_0x50ffff){return function(_0x3f28ea){if(_0x3f28ea){return _0x3f28ea[_0x15ec('0x31')](_0x26de4d)[_0x15ec('0x1e')](function(_0x81799b){return _0x81799b;});}return null;};}function removeEntity(_0x223a65,_0x43202f){return function(_0x1b1a78){if(_0x1b1a78){return _0x1b1a78[_0x15ec('0x32')]()[_0x15ec('0x1e')](function(){_0x223a65[_0x15ec('0x28')](0xcc)[_0x15ec('0x29')]();});}};}function handleEntityNotFound(_0x4e0ac5,_0x2cf19e){return function(_0x27842f){if(!_0x27842f){_0x4e0ac5[_0x15ec('0x33')](0x194);}return _0x27842f;};}function handleError(_0x334142,_0xca0fa7){_0xca0fa7=_0xca0fa7||0x1f4;return function(_0x2b2b03){logger[_0x15ec('0x23')](_0x2b2b03[_0x15ec('0x34')]);if(_0x2b2b03[_0x15ec('0x35')]){delete _0x2b2b03['name'];}_0x334142[_0x15ec('0x28')](_0xca0fa7)[_0x15ec('0x36')](_0x2b2b03);};}exports[_0x15ec('0x37')]=function(_0x21ba21,_0xc07038){var _0x31ee4f={},_0x686b06={},_0xd2b74f={'count':0x0,'rows':[]};var _0x112e8e=db[_0x15ec('0x38')][_0x15ec('0x39')];_0x686b06[_0x15ec('0x3a')]=_[_0x15ec('0x3b')](_0x112e8e);_0x686b06[_0x15ec('0x3c')]=_[_0x15ec('0x3b')](_0x21ba21['query']);_0x686b06['filters']=_['intersection'](_0x686b06[_0x15ec('0x3a')],_0x686b06[_0x15ec('0x3c')]);_0x31ee4f[_0x15ec('0x3d')]=_[_0x15ec('0x3e')](_0x686b06[_0x15ec('0x3a')],qs[_0x15ec('0x3f')](_0x21ba21[_0x15ec('0x3c')]['fields']));_0x31ee4f['attributes']=_0x31ee4f['attributes'][_0x15ec('0x40')]?_0x31ee4f['attributes']:_0x686b06[_0x15ec('0x3a')];if(!_0x21ba21[_0x15ec('0x3c')][_0x15ec('0x41')](_0x15ec('0x42'))){_0x31ee4f[_0x15ec('0x2b')]=qs[_0x15ec('0x2b')](_0x21ba21['query'][_0x15ec('0x2b')]);_0x31ee4f[_0x15ec('0x2a')]=qs[_0x15ec('0x2a')](_0x21ba21[_0x15ec('0x3c')][_0x15ec('0x2a')]);}_0x31ee4f[_0x15ec('0x43')]=qs[_0x15ec('0x44')](_0x21ba21[_0x15ec('0x3c')]['sort']);_0x31ee4f['where']=qs['filters'](_[_0x15ec('0x45')](_0x21ba21[_0x15ec('0x3c')],_0x686b06[_0x15ec('0x46')]));if(_0x21ba21[_0x15ec('0x3c')]['filter']){_0x31ee4f[_0x15ec('0x47')]=_[_0x15ec('0x48')](_0x31ee4f[_0x15ec('0x47')],{'$or':_[_0x15ec('0x49')](_0x112e8e,function(_0x1be774){if(_0x1be774[_0x15ec('0x4a')][_0x15ec('0x4b')]!==_0x15ec('0x4c')){var _0x1bc61a={};_0x1bc61a[_0x1be774[_0x15ec('0x4d')]]={'$like':'%'+_0x21ba21[_0x15ec('0x3c')][_0x15ec('0x4e')]+'%'};return _0x1bc61a;}})});}_0x31ee4f=_[_0x15ec('0x48')]({},_0x31ee4f,_0x21ba21[_0x15ec('0x4f')]);var _0x4d7e81={'where':_0x31ee4f[_0x15ec('0x47')]};return db[_0x15ec('0x38')][_0x15ec('0x50')](_0x4d7e81)[_0x15ec('0x1e')](function(_0x3152be){_0xd2b74f['count']=_0x3152be;if(_0x21ba21['query'][_0x15ec('0x51')]){_0x31ee4f[_0x15ec('0x52')]=[{'all':!![]}];}return db[_0x15ec('0x38')][_0x15ec('0x53')](_0x31ee4f);})[_0x15ec('0x1e')](function(_0x1c68c5){_0xd2b74f['rows']=_0x1c68c5;return _0xd2b74f;})['then'](respondWithFilteredResult(_0xc07038,_0x31ee4f))[_0x15ec('0x27')](handleError(_0xc07038,null));};exports[_0x15ec('0x54')]=function(_0xad6742,_0x3dc97c){var _0x1c95b1={'raw':!![],'where':{'id':_0xad6742[_0x15ec('0x55')]['id']}},_0x387a1e={};_0x387a1e[_0x15ec('0x3a')]=_['keys'](db[_0x15ec('0x38')]['rawAttributes']);_0x387a1e[_0x15ec('0x3c')]=_['keys'](_0xad6742[_0x15ec('0x3c')]);_0x387a1e[_0x15ec('0x46')]=_[_0x15ec('0x3e')](_0x387a1e[_0x15ec('0x3a')],_0x387a1e[_0x15ec('0x3c')]);_0x1c95b1[_0x15ec('0x3d')]=_[_0x15ec('0x3e')](_0x387a1e[_0x15ec('0x3a')],qs[_0x15ec('0x3f')](_0xad6742['query']['fields']));_0x1c95b1[_0x15ec('0x3d')]=_0x1c95b1[_0x15ec('0x3d')]['length']?_0x1c95b1[_0x15ec('0x3d')]:_0x387a1e[_0x15ec('0x3a')];if(_0xad6742[_0x15ec('0x3c')][_0x15ec('0x51')]){_0x1c95b1[_0x15ec('0x52')]=[{'all':!![]}];}_0x1c95b1=_[_0x15ec('0x48')]({},_0x1c95b1,_0xad6742[_0x15ec('0x4f')]);return db[_0x15ec('0x38')]['find'](_0x1c95b1)['then'](handleEntityNotFound(_0x3dc97c,null))[_0x15ec('0x1e')](respondWithResult(_0x3dc97c,null))[_0x15ec('0x27')](handleError(_0x3dc97c,null));};exports[_0x15ec('0x56')]=function(_0x45d75e,_0x1d98ff){return db[_0x15ec('0x38')][_0x15ec('0x56')](_0x45d75e[_0x15ec('0x57')],{})['then'](respondWithResult(_0x1d98ff,0xc9))[_0x15ec('0x27')](handleError(_0x1d98ff,null));};exports['update']=function(_0x15e044,_0x1bfec9){if(_0x15e044['body']['id']){delete _0x15e044['body']['id'];}return db[_0x15ec('0x38')]['find']({'where':{'id':_0x15e044[_0x15ec('0x55')]['id']}})[_0x15ec('0x1e')](handleEntityNotFound(_0x1bfec9,null))[_0x15ec('0x1e')](saveUpdates(_0x15e044[_0x15ec('0x57')],null))[_0x15ec('0x1e')](respondWithResult(_0x1bfec9,null))['catch'](handleError(_0x1bfec9,null));};exports[_0x15ec('0x32')]=function(_0x4024ed,_0x1a77c7){return db[_0x15ec('0x38')][_0x15ec('0x58')]({'where':{'id':_0x4024ed['params']['id']}})[_0x15ec('0x1e')](handleEntityNotFound(_0x1a77c7,null))[_0x15ec('0x1e')](removeEntity(_0x1a77c7,null))[_0x15ec('0x27')](handleError(_0x1a77c7,null));};exports[_0x15ec('0x59')]=function(_0x4699f8,_0x2c39dc){return db[_0x15ec('0x38')][_0x15ec('0x59')]()[_0x15ec('0x1e')](respondWithResult(_0x2c39dc,null))[_0x15ec('0x27')](handleError(_0x2c39dc,null));};var interaction_log=require('../../config/logger')(_0x15ec('0x5a'));exports['accept']=function(_0x3dcff1,_0x38a94c,_0x2db78e){var _0x288b74={'channel':_0x15ec('0x5b')};if(_0x3dcff1[_0x15ec('0x57')]['id']){delete _0x3dcff1['body']['id'];}_0x3dcff1['body']['read']=!![];_0x3dcff1[_0x15ec('0x57')][_0x15ec('0x5c')]=moment()[_0x15ec('0x5d')](_0x15ec('0x5e'));_0x3dcff1['body'][_0x15ec('0x5f')]=_0x3dcff1[_0x15ec('0x57')]['UserId']||_0x3dcff1[_0x15ec('0x60')]['id'];return db[_0x15ec('0x38')][_0x15ec('0x58')]({'where':{'id':_0x3dcff1[_0x15ec('0x55')]['id'],'UserId':null},'include':[{'model':db[_0x15ec('0x61')],'as':_0x15ec('0x62')}]})[_0x15ec('0x1e')](handleEntityNotFound(_0x38a94c,null))[_0x15ec('0x1e')](saveUpdates(_0x3dcff1[_0x15ec('0x57')],null))[_0x15ec('0x1e')](function(_0x393980){if(_0x393980){_0x288b74[_0x15ec('0x25')]=_0x393980[_0x15ec('0x63')]({'plain':!![]});return db[_0x15ec('0x64')][_0x15ec('0x58')]({'where':{'id':_0x393980[_0x15ec('0x65')]}});}return null;})['then'](handleEntityNotFound(_0x38a94c,null))[_0x15ec('0x1e')](function(_0x39d92b){if(_0x39d92b){return _0x39d92b[_0x15ec('0x31')]({'UserId':_0x3dcff1[_0x15ec('0x57')][_0x15ec('0x5f')],'read1stAt':_[_0x15ec('0x66')](_0x39d92b[_0x15ec('0x67')])?moment()['format']('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})[_0x15ec('0x1e')](function(_0x1946df){if(_0x1946df){_0x288b74[_0x15ec('0x68')]=_0x1946df[_0x15ec('0x63')]({'plain':!![]});interaction_log[_0x15ec('0x1f')](_0x15ec('0x69'),_0x3dcff1[_0x15ec('0x60')]['id'],_0x3dcff1[_0x15ec('0x60')][_0x15ec('0x35')],_0x3dcff1[_0x15ec('0x60')]['role'],_0x288b74[_0x15ec('0x68')]['id'],_0x3dcff1[_0x15ec('0x57')]?JSON[_0x15ec('0x22')](_0x3dcff1[_0x15ec('0x57')]):'null');return respondWithRpcPromise('AcceptMessage',_0x15ec('0x6a'),_0x288b74);}return null;})[_0x15ec('0x1e')](function(_0x3bbf39){if(_0x3bbf39){if(_0x3dcff1[_0x15ec('0x57')][_0x15ec('0x6b')]){_0x288b74[_0x15ec('0x25')]['interface']=util['format']('SIP/%s',_0x3dcff1[_0x15ec('0x60')]['name']);_0x288b74[_0x15ec('0x25')][_0x15ec('0x6c')]=_0x288b74[_0x15ec('0x6c')];_0x288b74[_0x15ec('0x25')][_0x15ec('0x6d')]='accept';return respondWithRpcPromise(_0x15ec('0x6e'),_0x15ec('0x6e'),{'event':_0x15ec('0x6f'),'message':_[_0x15ec('0x48')](_0x288b74[_0x15ec('0x25')],JSON['parse'](_0x288b74[_0x15ec('0x68')][_0x15ec('0x70')]))},client9002)[_0x15ec('0x1e')](function(){return _0x288b74;});}return _0x288b74;}return null;})['then'](respondWithResult(_0x38a94c,null))[_0x15ec('0x27')](handleError(_0x38a94c,null));};var interaction_log=require(_0x15ec('0x10'))('chat-interactions');exports['reject']=function(_0x48360a,_0x4f379c,_0x35975a){var _0x3b1e2c={'agent':{},'channel':'chat'};if(_0x48360a[_0x15ec('0x57')]['id']){delete _0x48360a[_0x15ec('0x57')]['id'];}_0x48360a[_0x15ec('0x57')][_0x15ec('0x5f')]=_0x48360a['body'][_0x15ec('0x5f')]||_0x48360a[_0x15ec('0x60')]['id'];_0x3b1e2c['agent']['id']=_0x48360a[_0x15ec('0x57')][_0x15ec('0x5f')];return db['ChatMessage'][_0x15ec('0x58')]({'where':{'id':_0x48360a[_0x15ec('0x55')]['id'],'UserId':null}})[_0x15ec('0x1e')](handleEntityNotFound(_0x4f379c,null))[_0x15ec('0x1e')](function(_0x2b9d48){if(_0x2b9d48){_0x3b1e2c['message']=_0x2b9d48[_0x15ec('0x63')]({'plain':!![]});return db[_0x15ec('0x64')][_0x15ec('0x58')]({'where':{'id':_0x2b9d48[_0x15ec('0x65')]}});}return null;})['then'](handleEntityNotFound(_0x4f379c,null))['then'](function(_0x502de3){if(_0x502de3){_0x3b1e2c[_0x15ec('0x68')]=_0x502de3['get']({'plain':!![]});interaction_log['info'](_0x15ec('0x71'),_0x48360a[_0x15ec('0x60')]['id'],_0x48360a['user'][_0x15ec('0x35')],_0x48360a[_0x15ec('0x60')]['role'],_0x3b1e2c['interaction']['id'],_0x48360a[_0x15ec('0x57')]?JSON['stringify'](_0x48360a[_0x15ec('0x57')]):'null');return respondWithRpcPromise('RejectMessage',_0x15ec('0x72'),_0x3b1e2c);}return null;})[_0x15ec('0x1e')](function(_0x138329){if(_0x138329){_0x138329[_0x15ec('0x25')][_0x15ec('0x73')]=util[_0x15ec('0x5d')]('SIP/%s',_0x48360a[_0x15ec('0x60')][_0x15ec('0x35')]);_0x138329['message'][_0x15ec('0x6c')]=_0x3b1e2c[_0x15ec('0x6c')];_0x138329['message'][_0x15ec('0x6d')]=_0x15ec('0x74');respondWithRpcPromise(_0x15ec('0x6e'),'EventManager',{'event':_0x15ec('0x75'),'message':_0x138329[_0x15ec('0x25')]},client9002);return _0x3b1e2c;}return null;})['then'](respondWithResult(_0x4f379c,null))['catch'](handleError(_0x4f379c,null));};
\ No newline at end of file
index f101d63..7cc2459 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfd87=['save','update','emit','hasOwnProperty','exports','events','../../mysqldb','ChatMessage'];(function(_0x56e0a2,_0x3635c7){var _0x1a7963=function(_0x4d1c4e){while(--_0x4d1c4e){_0x56e0a2['push'](_0x56e0a2['shift']());}};_0x1a7963(++_0x3635c7);}(_0xfd87,0x1b5));var _0x7fd8=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xfd87[_0x3dd15e];return _0x231fd0;};'use strict';var EventEmitter=require(_0x7fd8('0x0'));var ChatMessage=require(_0x7fd8('0x1'))['db'][_0x7fd8('0x2')];var ChatMessageEvents=new EventEmitter();ChatMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x7fd8('0x3'),'afterUpdate':_0x7fd8('0x4'),'afterDestroy':'remove'};function emitEvent(_0x14f614){return function(_0x59adf6,_0x51323b,_0x1f72fd){ChatMessageEvents[_0x7fd8('0x5')](_0x14f614+':'+_0x59adf6['id'],_0x59adf6);ChatMessageEvents[_0x7fd8('0x5')](_0x14f614,_0x59adf6);_0x1f72fd(null);};}for(var e in events){if(events[_0x7fd8('0x6')](e)){var event=events[e];ChatMessage['hook'](e,emitEvent(event));}}module[_0x7fd8('0x7')]=ChatMessageEvents;
\ No newline at end of file
+var _0x6250=['../../mysqldb','setMaxListeners','update','emit','hasOwnProperty','hook'];(function(_0x2a178f,_0x4a9fc0){var _0xed3963=function(_0x465db3){while(--_0x465db3){_0x2a178f['push'](_0x2a178f['shift']());}};_0xed3963(++_0x4a9fc0);}(_0x6250,0x1b0));var _0x0625=function(_0x1fdbc6,_0x4534c1){_0x1fdbc6=_0x1fdbc6-0x0;var _0x357109=_0x6250[_0x1fdbc6];return _0x357109;};'use strict';var EventEmitter=require('events');var ChatMessage=require(_0x0625('0x0'))['db']['ChatMessage'];var ChatMessageEvents=new EventEmitter();ChatMessageEvents[_0x0625('0x1')](0x0);var events={'afterCreate':'save','afterUpdate':_0x0625('0x2'),'afterDestroy':'remove'};function emitEvent(_0x457b7c){return function(_0x367123,_0x529303,_0xeaa1a1){ChatMessageEvents['emit'](_0x457b7c+':'+_0x367123['id'],_0x367123);ChatMessageEvents[_0x0625('0x3')](_0x457b7c,_0x367123);_0xeaa1a1(null);};}for(var e in events){if(events[_0x0625('0x4')](e)){var event=events[e];ChatMessage[_0x0625('0x5')](e,emitEvent(event));}}module['exports']=ChatMessageEvents;
\ No newline at end of file
index 3cf3fc1..8c8b190 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa046=['toLowerCase','direction','out','secret','isNil','UserId','ChatInteraction','findOne','ChatInteractionId','then','createdAt','body','error','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','moment','./chatMessage.attributes','exports','define','ChatMessage','chat_messages','models','get'];(function(_0x36959d,_0x4cb1a){var _0x2083ff=function(_0x4945a2){while(--_0x4945a2){_0x36959d['push'](_0x36959d['shift']());}};_0x2083ff(++_0x4cb1a);}(_0xa046,0xab));var _0x6a04=function(_0xbcbd76,_0x25722b){_0xbcbd76=_0xbcbd76-0x0;var _0x503680=_0xa046[_0xbcbd76];return _0x503680;};'use strict';var _=require(_0x6a04('0x0'));var util=require(_0x6a04('0x1'));var logger=require(_0x6a04('0x2'))('api');var moment=require(_0x6a04('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x6a04('0x4'));module[_0x6a04('0x5')]=function(_0x33a6cc,_0x3157ba){return _0x33a6cc[_0x6a04('0x6')](_0x6a04('0x7'),attributes,{'tableName':_0x6a04('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x1a8aa1,_0xb2a445,_0x202bc6){var _0x49e89b=_0x33a6cc[_0x6a04('0x9')];var _0xbae26e=_0x1a8aa1[_0x6a04('0xa')]({'plain':!![]});if(_0xbae26e['direction'][_0x6a04('0xb')]()==='in'||_0xbae26e[_0x6a04('0xc')]['toLowerCase']()===_0x6a04('0xd')&&!_0xbae26e[_0x6a04('0xe')]&&!_[_0x6a04('0xf')](_0xbae26e[_0x6a04('0x10')])){_0x49e89b[_0x6a04('0x11')][_0x6a04('0x12')]({'where':{'id':_0xbae26e[_0x6a04('0x13')]}})[_0x6a04('0x14')](function(_0x3ebc12){if(_0x3ebc12){_0x3ebc12['update']({'lastMsgAt':_0xbae26e[_0x6a04('0x15')],'lastMsgDirection':_0xbae26e['direction']['toLowerCase'](),'lastMsgBody':_0xbae26e[_0x6a04('0x16')]});}})['catch'](function(_0x2bac9f){console[_0x6a04('0x17')](_0x2bac9f);});}_0x202bc6();}},'charset':_0x6a04('0x18'),'collate':_0x6a04('0x19')});};
\ No newline at end of file
+var _0x84db=['secret','isNil','ChatInteraction','then','update','createdAt','body','catch','utf8mb4','lodash','util','../../config/logger','api','moment','define','ChatMessage','chat_messages','models','get','direction','toLowerCase','out'];(function(_0x2e5923,_0x344e03){var _0x5723ce=function(_0x192db2){while(--_0x192db2){_0x2e5923['push'](_0x2e5923['shift']());}};_0x5723ce(++_0x344e03);}(_0x84db,0x195));var _0xb84d=function(_0x3de17f,_0xa310aa){_0x3de17f=_0x3de17f-0x0;var _0x234e91=_0x84db[_0x3de17f];return _0x234e91;};'use strict';var _=require(_0xb84d('0x0'));var util=require(_0xb84d('0x1'));var logger=require(_0xb84d('0x2'))(_0xb84d('0x3'));var moment=require(_0xb84d('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require('./chatMessage.attributes');module['exports']=function(_0x1f3c36,_0x2de01e){return _0x1f3c36[_0xb84d('0x5')](_0xb84d('0x6'),attributes,{'tableName':_0xb84d('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x7e8b1,_0x993268,_0x132018){var _0x2ebfe0=_0x1f3c36[_0xb84d('0x8')];var _0x3689fd=_0x7e8b1[_0xb84d('0x9')]({'plain':!![]});if(_0x3689fd['direction']['toLowerCase']()==='in'||_0x3689fd[_0xb84d('0xa')][_0xb84d('0xb')]()===_0xb84d('0xc')&&!_0x3689fd[_0xb84d('0xd')]&&!_[_0xb84d('0xe')](_0x3689fd['UserId'])){_0x2ebfe0[_0xb84d('0xf')]['findOne']({'where':{'id':_0x3689fd['ChatInteractionId']}})[_0xb84d('0x10')](function(_0x1c94b3){if(_0x1c94b3){_0x1c94b3[_0xb84d('0x11')]({'lastMsgAt':_0x3689fd[_0xb84d('0x12')],'lastMsgDirection':_0x3689fd['direction'][_0xb84d('0xb')](),'lastMsgBody':_0x3689fd[_0xb84d('0x13')]});}})[_0xb84d('0x14')](function(_0x5e85b3){console['error'](_0x5e85b3);});}_0x132018();}},'charset':_0xb84d('0x15'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index ce19179..987633f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39a8=['ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','create','body','options','CreateChatMessage','debug','catch','util','moment','bluebird','randomstring','ioredis','../../config/logger','../../config/environment','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','./chatMessage.socket','register','request','then','info','ChatMessage,\x20%s,\x20%s'];(function(_0x4f0c2b,_0x2c9d14){var _0x526436=function(_0x2e13b6){while(--_0x2e13b6){_0x4f0c2b['push'](_0x4f0c2b['shift']());}};_0x526436(++_0x2c9d14);}(_0x39a8,0xe5));var _0x839a=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x39a8[_0x321bb2];return _0x9c12ed;};'use strict';var _=require('lodash');var util=require(_0x839a('0x0'));var moment=require(_0x839a('0x1'));var BPromise=require(_0x839a('0x2'));var rs=require(_0x839a('0x3'));var fs=require('fs');var Redis=require(_0x839a('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x839a('0x5'))('rpc');var config=require(_0x839a('0x6'));var jayson=require(_0x839a('0x7'));var client=jayson[_0x839a('0x8')]['http']({'port':0x232a});config[_0x839a('0x9')]=_[_0x839a('0xa')](config['redis'],{'host':_0x839a('0xb'),'port':0x18eb});var socket=require(_0x839a('0xc'))(new Redis(config[_0x839a('0x9')]));require(_0x839a('0xd'))[_0x839a('0xe')](socket);function respondWithRpcPromise(_0x14420f,_0x565431,_0x1d6ead){return new BPromise(function(_0x556bf7,_0x5c91a8){return client[_0x839a('0xf')](_0x14420f,_0x1d6ead)[_0x839a('0x10')](function(_0x309e0e){logger[_0x839a('0x11')](_0x839a('0x12'),_0x565431,'request\x20sent');logger['debug'](_0x839a('0x13'),_0x565431,'request\x20sent',JSON[_0x839a('0x14')](_0x309e0e));if(_0x309e0e['error']){if(_0x309e0e[_0x839a('0x15')][_0x839a('0x16')]===0x1f4){logger[_0x839a('0x15')](_0x839a('0x12'),_0x565431,_0x309e0e[_0x839a('0x15')][_0x839a('0x17')]);return _0x5c91a8(_0x309e0e[_0x839a('0x15')][_0x839a('0x17')]);}logger[_0x839a('0x15')](_0x839a('0x12'),_0x565431,_0x309e0e[_0x839a('0x15')][_0x839a('0x17')]);return _0x556bf7(_0x309e0e['error'][_0x839a('0x17')]);}else{logger[_0x839a('0x11')](_0x839a('0x12'),_0x565431,'request\x20sent');_0x556bf7(_0x309e0e[_0x839a('0x18')][_0x839a('0x17')]);}})['catch'](function(_0x1994c7){logger[_0x839a('0x15')](_0x839a('0x12'),_0x565431,_0x1994c7);_0x5c91a8(_0x1994c7);});});}exports['CreateChatMessage']=function(_0x33d473){var _0x5da7bf=this;return new Promise(function(_0x2dc6d4,_0x404c2d){return db['ChatMessage'][_0x839a('0x19')](_0x33d473[_0x839a('0x1a')],{'raw':_0x33d473[_0x839a('0x1b')]?_0x33d473[_0x839a('0x1b')]['raw']===undefined?!![]:![]:!![]})[_0x839a('0x10')](function(_0x54663e){logger['info'](_0x839a('0x1c'),_0x33d473);logger[_0x839a('0x1d')](_0x839a('0x1c'),_0x33d473,JSON[_0x839a('0x14')](_0x54663e));_0x2dc6d4(_0x54663e);})[_0x839a('0x1e')](function(_0xa4899e){logger['error'](_0x839a('0x1c'),_0xa4899e[_0x839a('0x17')],_0x33d473);_0x404c2d(_0x5da7bf[_0x839a('0x15')](0x1f4,_0xa4899e[_0x839a('0x17')]));});});};
\ No newline at end of file
+var _0x8a51=['ChatMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','ChatMessage,\x20%s,\x20%s','result','CreateChatMessage','ChatMessage','create','body','options','catch','lodash','util','moment','../../mysqldb','../../config/logger','rpc','jayson/promise','client','defaults','redis','localhost','./chatMessage.socket','register','request','then','info','request\x20sent','debug'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0x8a51,0xe6));var _0x18a5=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x8a51[_0x57b54c];return _0x59cc19;};'use strict';var _=require(_0x18a5('0x0'));var util=require(_0x18a5('0x1'));var moment=require(_0x18a5('0x2'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x18a5('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x18a5('0x4'))(_0x18a5('0x5'));var config=require('../../config/environment');var jayson=require(_0x18a5('0x6'));var client=jayson[_0x18a5('0x7')]['http']({'port':0x232a});config['redis']=_[_0x18a5('0x8')](config[_0x18a5('0x9')],{'host':_0x18a5('0xa'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x18a5('0x9')]));require(_0x18a5('0xb'))[_0x18a5('0xc')](socket);function respondWithRpcPromise(_0x271bf2,_0x2e6cb3,_0x1a7b1e){return new BPromise(function(_0x1fe130,_0x44607f){return client[_0x18a5('0xd')](_0x271bf2,_0x1a7b1e)[_0x18a5('0xe')](function(_0x4b3572){logger[_0x18a5('0xf')]('ChatMessage,\x20%s,\x20%s',_0x2e6cb3,_0x18a5('0x10'));logger[_0x18a5('0x11')](_0x18a5('0x12'),_0x2e6cb3,_0x18a5('0x10'),JSON[_0x18a5('0x13')](_0x4b3572));if(_0x4b3572[_0x18a5('0x14')]){if(_0x4b3572[_0x18a5('0x14')][_0x18a5('0x15')]===0x1f4){logger[_0x18a5('0x14')]('ChatMessage,\x20%s,\x20%s',_0x2e6cb3,_0x4b3572[_0x18a5('0x14')][_0x18a5('0x16')]);return _0x44607f(_0x4b3572[_0x18a5('0x14')]['message']);}logger[_0x18a5('0x14')](_0x18a5('0x17'),_0x2e6cb3,_0x4b3572[_0x18a5('0x14')]['message']);return _0x1fe130(_0x4b3572[_0x18a5('0x14')]['message']);}else{logger[_0x18a5('0xf')]('ChatMessage,\x20%s,\x20%s',_0x2e6cb3,_0x18a5('0x10'));_0x1fe130(_0x4b3572[_0x18a5('0x18')][_0x18a5('0x16')]);}})['catch'](function(_0x132403){logger['error'](_0x18a5('0x17'),_0x2e6cb3,_0x132403);_0x44607f(_0x132403);});});}exports[_0x18a5('0x19')]=function(_0x27620b){var _0x3d8772=this;return new Promise(function(_0x41296a,_0x14bf67){return db[_0x18a5('0x1a')][_0x18a5('0x1b')](_0x27620b[_0x18a5('0x1c')],{'raw':_0x27620b[_0x18a5('0x1d')]?_0x27620b[_0x18a5('0x1d')]['raw']===undefined?!![]:![]:!![]})[_0x18a5('0xe')](function(_0x423d93){logger[_0x18a5('0xf')]('CreateChatMessage',_0x27620b);logger['debug'](_0x18a5('0x19'),_0x27620b,JSON['stringify'](_0x423d93));_0x41296a(_0x423d93);})[_0x18a5('0x1e')](function(_0xe1961){logger['error'](_0x18a5('0x19'),_0xe1961['message'],_0x27620b);_0x14bf67(_0x3d8772[_0x18a5('0x14')](0x1f4,_0xe1961[_0x18a5('0x16')]));});});};
\ No newline at end of file
index 3d5595d..dad89b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c44=['emit','removeListener','length','chatMessage:','remove','update'];(function(_0x38d2bd,_0x1e34ac){var _0x458c47=function(_0x5e5571){while(--_0x5e5571){_0x38d2bd['push'](_0x38d2bd['shift']());}};_0x458c47(++_0x1e34ac);}(_0x9c44,0x178));var _0x49c4=function(_0x4d613c,_0x55f220){_0x4d613c=_0x4d613c-0x0;var _0x301fe3=_0x9c44[_0x4d613c];return _0x301fe3;};'use strict';var ChatMessageEvents=require('./chatMessage.events');var events=['save',_0x49c4('0x0'),_0x49c4('0x1')];function createListener(_0x26844b,_0x1ba0bb){return function(_0x455700){_0x1ba0bb[_0x49c4('0x2')](_0x26844b,_0x455700);};}function removeListener(_0x4e0313,_0x4941f1){return function(){ChatMessageEvents[_0x49c4('0x3')](_0x4e0313,_0x4941f1);};}exports['register']=function(_0xc1278f){for(var _0x6030ae=0x0,_0x69bc41=events[_0x49c4('0x4')];_0x6030ae<_0x69bc41;_0x6030ae++){var _0x436234=events[_0x6030ae];var _0x511d53=createListener(_0x49c4('0x5')+_0x436234,_0xc1278f);ChatMessageEvents['on'](_0x436234,_0x511d53);}};
\ No newline at end of file
+var _0x9c44=['emit','removeListener','length','chatMessage:','remove','update'];(function(_0x1c308d,_0x1c45f7){var _0x8dc93f=function(_0x7f0f80){while(--_0x7f0f80){_0x1c308d['push'](_0x1c308d['shift']());}};_0x8dc93f(++_0x1c45f7);}(_0x9c44,0x178));var _0x49c4=function(_0x4b369d,_0x265eb8){_0x4b369d=_0x4b369d-0x0;var _0x571a98=_0x9c44[_0x4b369d];return _0x571a98;};'use strict';var ChatMessageEvents=require('./chatMessage.events');var events=['save',_0x49c4('0x0'),_0x49c4('0x1')];function createListener(_0x26844b,_0x1ba0bb){return function(_0x455700){_0x1ba0bb[_0x49c4('0x2')](_0x26844b,_0x455700);};}function removeListener(_0x4e0313,_0x4941f1){return function(){ChatMessageEvents[_0x49c4('0x3')](_0x4e0313,_0x4941f1);};}exports['register']=function(_0xc1278f){for(var _0x6030ae=0x0,_0x69bc41=events[_0x49c4('0x4')];_0x6030ae<_0x69bc41;_0x6030ae++){var _0x436234=events[_0x6030ae];var _0x511d53=createListener(_0x49c4('0x5')+_0x436234,_0xc1278f);ChatMessageEvents['on'](_0x436234,_0x511d53);}};
\ No newline at end of file
index 231a95e..ed02dc8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe6f9=['/:id/reject','reject','delete','destroy','multer','util','path','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatMessage.controller','get','index','/describe','isAuthenticated','tracked','chat','chatmessage:create','put','/:id','update'];(function(_0x5522ee,_0x2a1b03){var _0x4c54ad=function(_0x1ab432){while(--_0x1ab432){_0x5522ee['push'](_0x5522ee['shift']());}};_0x4c54ad(++_0x2a1b03);}(_0xe6f9,0x1bd));var _0x9e6f=function(_0x43ae2c,_0x153910){_0x43ae2c=_0x43ae2c-0x0;var _0x5b2df7=_0xe6f9[_0x43ae2c];return _0x5b2df7;};'use strict';var multer=require(_0x9e6f('0x0'));var util=require(_0x9e6f('0x1'));var path=require(_0x9e6f('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0x9e6f('0x3'));var interaction=require(_0x9e6f('0x4'));var config=require(_0x9e6f('0x5'));var controller=require(_0x9e6f('0x6'));router[_0x9e6f('0x7')]('/',auth['isAuthenticated'](),controller[_0x9e6f('0x8')]);router[_0x9e6f('0x7')](_0x9e6f('0x9'),auth['isAuthenticated'](),controller['describe']);router[_0x9e6f('0x7')]('/:id',auth[_0x9e6f('0xa')](),controller['show']);router['post']('/',auth[_0x9e6f('0xa')](),interaction[_0x9e6f('0xb')](_0x9e6f('0xc'),_0x9e6f('0xd')),controller['create']);router[_0x9e6f('0xe')](_0x9e6f('0xf'),controller[_0x9e6f('0x10')]);router[_0x9e6f('0xe')]('/:id/accept',auth[_0x9e6f('0xa')](),controller['accept']);router[_0x9e6f('0xe')](_0x9e6f('0x11'),auth[_0x9e6f('0xa')](),controller[_0x9e6f('0x12')]);router[_0x9e6f('0x13')](_0x9e6f('0xf'),auth['isAuthenticated'](),controller[_0x9e6f('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0x4583=['/describe','isAuthenticated','/:id','show','chat','chatmessage:create','create','put','update','/:id/accept','accept','reject','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','./chatMessage.controller','get','index'];(function(_0x403dce,_0x20f6a8){var _0x5d1c12=function(_0xcd82f2){while(--_0xcd82f2){_0x403dce['push'](_0x403dce['shift']());}};_0x5d1c12(++_0x20f6a8);}(_0x4583,0x1ee));var _0x3458=function(_0x55ff89,_0x1c7d8f){_0x55ff89=_0x55ff89-0x0;var _0x4def32=_0x4583[_0x55ff89];return _0x4def32;};'use strict';var multer=require(_0x3458('0x0'));var util=require(_0x3458('0x1'));var path=require(_0x3458('0x2'));var timeout=require(_0x3458('0x3'));var express=require('express');var router=express[_0x3458('0x4')]();var auth=require(_0x3458('0x5'));var interaction=require(_0x3458('0x6'));var config=require('../../config/environment');var controller=require(_0x3458('0x7'));router[_0x3458('0x8')]('/',auth['isAuthenticated'](),controller[_0x3458('0x9')]);router[_0x3458('0x8')](_0x3458('0xa'),auth[_0x3458('0xb')](),controller['describe']);router[_0x3458('0x8')](_0x3458('0xc'),auth['isAuthenticated'](),controller[_0x3458('0xd')]);router['post']('/',auth[_0x3458('0xb')](),interaction['tracked'](_0x3458('0xe'),_0x3458('0xf')),controller[_0x3458('0x10')]);router[_0x3458('0x11')](_0x3458('0xc'),controller[_0x3458('0x12')]);router[_0x3458('0x11')](_0x3458('0x13'),auth[_0x3458('0xb')](),controller[_0x3458('0x14')]);router['put']('/:id/reject',auth[_0x3458('0xb')](),controller[_0x3458('0x15')]);router['delete'](_0x3458('0xc'),auth[_0x3458('0xb')](),controller[_0x3458('0x16')]);module[_0x3458('0x17')]=router;
\ No newline at end of file
index 84e0540..372ce38 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9d54=['TEXT','exports'];(function(_0x4243a3,_0x447337){var _0x1b2a33=function(_0x6a8200){while(--_0x6a8200){_0x4243a3['push'](_0x4243a3['shift']());}};_0x1b2a33(++_0x447337);}(_0x9d54,0x155));var _0x49d5=function(_0x3a723b,_0x5c6259){_0x3a723b=_0x3a723b-0x0;var _0x50ddec=_0x9d54[_0x3a723b];return _0x50ddec;};'use strict';var Sequelize=require('sequelize');module[_0x49d5('0x0')]={'body':{'type':Sequelize[_0x49d5('0x1')]('medium'),'allowNull':![]}};
\ No newline at end of file
+var _0xe9b1=['exports','TEXT','medium','sequelize'];(function(_0x426f00,_0x4f7131){var _0x324a41=function(_0x30060c){while(--_0x30060c){_0x426f00['push'](_0x426f00['shift']());}};_0x324a41(++_0x4f7131);}(_0xe9b1,0x193));var _0x1e9b=function(_0x1df3e5,_0x2d37f1){_0x1df3e5=_0x1df3e5-0x0;var _0x422d0c=_0xe9b1[_0x1df3e5];return _0x422d0c;};'use strict';var Sequelize=require(_0x1e9b('0x0'));module[_0x1e9b('0x1')]={'body':{'type':Sequelize[_0x1e9b('0x2')](_0x1e9b('0x3')),'allowNull':![]}};
\ No newline at end of file
index 15dd562..e52a507 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x30b4=['hasOwnProperty','limit','sort','where','merge','type','key','VIRTUAL','field','filter','catch','show','includeAll','include','find','create','body','params','describe','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../mysqldb','sendStatus','status','json','count','offset','set','apply','save','update','then','destroy','end','stack','name','send','index','ChatOfflineMessage','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length'];(function(_0x291aaf,_0x4c6d8d){var _0x5571e6=function(_0x1b4fec){while(--_0x1b4fec){_0x291aaf['push'](_0x291aaf['shift']());}};_0x5571e6(++_0x4c6d8d);}(_0x30b4,0x127));var _0x430b=function(_0x23c3f4,_0x24f0b3){_0x23c3f4=_0x23c3f4-0x0;var _0x82f0f1=_0x30b4[_0x23c3f4];return _0x82f0f1;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x430b('0x0'));var jsonpatch=require(_0x430b('0x1'));var rp=require(_0x430b('0x2'));var moment=require(_0x430b('0x3'));var BPromise=require(_0x430b('0x4'));var Mustache=require('mustache');var util=require(_0x430b('0x5'));var path=require(_0x430b('0x6'));var sox=require(_0x430b('0x7'));var csv=require(_0x430b('0x8'));var ejs=require(_0x430b('0x9'));var fs=require('fs');var _=require(_0x430b('0xa'));var squel=require(_0x430b('0xb'));var crypto=require(_0x430b('0xc'));var jsforce=require(_0x430b('0xd'));var deskjs=require(_0x430b('0xe'));var toCsv=require(_0x430b('0x8'));var querystring=require(_0x430b('0xf'));var Papa=require(_0x430b('0x10'));var authService=require(_0x430b('0x11'));var hardwareService=require(_0x430b('0x12'));var Redis=require(_0x430b('0x13'));var qs=require(_0x430b('0x14'));var logger=require('../../config/logger')(_0x430b('0x15'));var utils=require(_0x430b('0x16'));var config=require('../../config/environment');var db=require(_0x430b('0x17'))['db'];function respondWithStatusCode(_0x33c443,_0x4b33cc){_0x4b33cc=_0x4b33cc||0xcc;return function(_0xda539c){if(_0xda539c){return _0x33c443[_0x430b('0x18')](_0x4b33cc);}return _0x33c443[_0x430b('0x19')](_0x4b33cc)['end']();};}function respondWithResult(_0x514bbf,_0x15c05c){_0x15c05c=_0x15c05c||0xc8;return function(_0x2da2ff){if(_0x2da2ff){return _0x514bbf['status'](_0x15c05c)[_0x430b('0x1a')](_0x2da2ff);}};}function respondWithFilteredResult(_0x556d55,_0xbb4d22){return function(_0x1fd145){if(_0x1fd145){var _0x3ccaa2=_0x1fd145[_0x430b('0x1b')],_0x7c447c=_0xbb4d22[_0x430b('0x1c')],_0x25c55d=_0xbb4d22[_0x430b('0x1c')]+_0xbb4d22['limit'],_0x429275;if(_0x25c55d>=_0x3ccaa2){_0x25c55d=_0x3ccaa2;_0x429275=0xc8;}else{_0x429275=0xce;}_0x556d55[_0x430b('0x19')](_0x429275);return _0x556d55[_0x430b('0x1d')]('Content-Range',_0x7c447c+'-'+_0x25c55d+'/'+_0x3ccaa2)[_0x430b('0x1a')](_0x1fd145);}return null;};}function patchUpdates(_0x5bbfaf){return function(_0x20df7b){try{jsonpatch[_0x430b('0x1e')](_0x20df7b,_0x5bbfaf,!![]);}catch(_0x55a794){return BPromise['reject'](_0x55a794);}return _0x20df7b[_0x430b('0x1f')]();};}function saveUpdates(_0x4c330e,_0x15e012){return function(_0x91754c){if(_0x91754c){return _0x91754c[_0x430b('0x20')](_0x4c330e)[_0x430b('0x21')](function(_0x57519d){return _0x57519d;});}return null;};}function removeEntity(_0x5213fe,_0x1f5fd4){return function(_0x224a7c){if(_0x224a7c){return _0x224a7c[_0x430b('0x22')]()['then'](function(){_0x5213fe['status'](0xcc)[_0x430b('0x23')]();});}};}function handleEntityNotFound(_0x1359bb,_0x16221d){return function(_0x304b38){if(!_0x304b38){_0x1359bb['sendStatus'](0x194);}return _0x304b38;};}function handleError(_0xb7503a,_0x3bb6a7){_0x3bb6a7=_0x3bb6a7||0x1f4;return function(_0x4dc1b1){logger['error'](_0x4dc1b1[_0x430b('0x24')]);if(_0x4dc1b1['name']){delete _0x4dc1b1[_0x430b('0x25')];}_0xb7503a[_0x430b('0x19')](_0x3bb6a7)[_0x430b('0x26')](_0x4dc1b1);};}exports[_0x430b('0x27')]=function(_0x2272c5,_0x212a1a){var _0x54ce55={},_0x59549d={},_0x4d06e0={'count':0x0,'rows':[]};var _0x3db434=db[_0x430b('0x28')][_0x430b('0x29')];_0x59549d[_0x430b('0x2a')]=_[_0x430b('0x2b')](_0x3db434);_0x59549d[_0x430b('0x2c')]=_[_0x430b('0x2b')](_0x2272c5[_0x430b('0x2c')]);_0x59549d[_0x430b('0x2d')]=_[_0x430b('0x2e')](_0x59549d[_0x430b('0x2a')],_0x59549d[_0x430b('0x2c')]);_0x54ce55[_0x430b('0x2f')]=_[_0x430b('0x2e')](_0x59549d[_0x430b('0x2a')],qs[_0x430b('0x30')](_0x2272c5[_0x430b('0x2c')]['fields']));_0x54ce55['attributes']=_0x54ce55[_0x430b('0x2f')][_0x430b('0x31')]?_0x54ce55[_0x430b('0x2f')]:_0x59549d[_0x430b('0x2a')];if(!_0x2272c5[_0x430b('0x2c')][_0x430b('0x32')]('nolimit')){_0x54ce55[_0x430b('0x33')]=qs['limit'](_0x2272c5[_0x430b('0x2c')][_0x430b('0x33')]);_0x54ce55[_0x430b('0x1c')]=qs['offset'](_0x2272c5['query'][_0x430b('0x1c')]);}_0x54ce55['order']=qs[_0x430b('0x34')](_0x2272c5['query']['sort']);_0x54ce55[_0x430b('0x35')]=qs['filters'](_['pick'](_0x2272c5[_0x430b('0x2c')],_0x59549d[_0x430b('0x2d')]));if(_0x2272c5[_0x430b('0x2c')]['filter']){_0x54ce55['where']=_[_0x430b('0x36')](_0x54ce55[_0x430b('0x35')],{'$or':_['map'](_0x3db434,function(_0x3675ee){if(_0x3675ee[_0x430b('0x37')][_0x430b('0x38')]!==_0x430b('0x39')){var _0xe28a51={};_0xe28a51[_0x3675ee[_0x430b('0x3a')]]={'$like':'%'+_0x2272c5[_0x430b('0x2c')][_0x430b('0x3b')]+'%'};return _0xe28a51;}})});}_0x54ce55=_[_0x430b('0x36')]({},_0x54ce55,_0x2272c5['options']);var _0x6ccfce={'where':_0x54ce55[_0x430b('0x35')]};return db['ChatOfflineMessage'][_0x430b('0x1b')](_0x6ccfce)[_0x430b('0x21')](function(_0x13f73a){_0x4d06e0[_0x430b('0x1b')]=_0x13f73a;if(_0x2272c5['query']['includeAll']){_0x54ce55['include']=[{'all':!![]}];}return db[_0x430b('0x28')]['findAll'](_0x54ce55);})[_0x430b('0x21')](function(_0x226d6e){_0x4d06e0['rows']=_0x226d6e;return _0x4d06e0;})[_0x430b('0x21')](respondWithFilteredResult(_0x212a1a,_0x54ce55))[_0x430b('0x3c')](handleError(_0x212a1a,null));};exports[_0x430b('0x3d')]=function(_0x45b2af,_0x49d022){var _0x2efca5={'raw':!![],'where':{'id':_0x45b2af['params']['id']}},_0x2d6d5a={};_0x2d6d5a[_0x430b('0x2a')]=_[_0x430b('0x2b')](db[_0x430b('0x28')][_0x430b('0x29')]);_0x2d6d5a['query']=_[_0x430b('0x2b')](_0x45b2af[_0x430b('0x2c')]);_0x2d6d5a['filters']=_[_0x430b('0x2e')](_0x2d6d5a[_0x430b('0x2a')],_0x2d6d5a[_0x430b('0x2c')]);_0x2efca5[_0x430b('0x2f')]=_[_0x430b('0x2e')](_0x2d6d5a[_0x430b('0x2a')],qs['fields'](_0x45b2af[_0x430b('0x2c')]['fields']));_0x2efca5[_0x430b('0x2f')]=_0x2efca5[_0x430b('0x2f')][_0x430b('0x31')]?_0x2efca5[_0x430b('0x2f')]:_0x2d6d5a[_0x430b('0x2a')];if(_0x45b2af[_0x430b('0x2c')][_0x430b('0x3e')]){_0x2efca5[_0x430b('0x3f')]=[{'all':!![]}];}_0x2efca5=_[_0x430b('0x36')]({},_0x2efca5,_0x45b2af['options']);return db[_0x430b('0x28')][_0x430b('0x40')](_0x2efca5)[_0x430b('0x21')](handleEntityNotFound(_0x49d022,null))[_0x430b('0x21')](respondWithResult(_0x49d022,null))[_0x430b('0x3c')](handleError(_0x49d022,null));};exports[_0x430b('0x41')]=function(_0x4f73ed,_0x42734d){return db[_0x430b('0x28')][_0x430b('0x41')](_0x4f73ed[_0x430b('0x42')],{})[_0x430b('0x21')](respondWithResult(_0x42734d,0xc9))['catch'](handleError(_0x42734d,null));};exports['update']=function(_0x5b1942,_0x1a7c44){if(_0x5b1942['body']['id']){delete _0x5b1942[_0x430b('0x42')]['id'];}return db[_0x430b('0x28')][_0x430b('0x40')]({'where':{'id':_0x5b1942[_0x430b('0x43')]['id']}})[_0x430b('0x21')](handleEntityNotFound(_0x1a7c44,null))['then'](saveUpdates(_0x5b1942[_0x430b('0x42')],null))[_0x430b('0x21')](respondWithResult(_0x1a7c44,null))[_0x430b('0x3c')](handleError(_0x1a7c44,null));};exports[_0x430b('0x22')]=function(_0x37e92a,_0x7200bb){return db[_0x430b('0x28')]['find']({'where':{'id':_0x37e92a[_0x430b('0x43')]['id']}})[_0x430b('0x21')](handleEntityNotFound(_0x7200bb,null))[_0x430b('0x21')](removeEntity(_0x7200bb,null))[_0x430b('0x3c')](handleError(_0x7200bb,null));};exports[_0x430b('0x44')]=function(_0x1b501f,_0xd170fc){return db[_0x430b('0x28')][_0x430b('0x44')]()[_0x430b('0x21')](respondWithResult(_0xd170fc,null))[_0x430b('0x3c')](handleError(_0xd170fc,null));};
\ No newline at end of file
+var _0x099a=['where','merge','map','type','key','VIRTUAL','field','options','includeAll','include','rows','catch','show','params','rawAttributes','find','create','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','crypto','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','sendStatus','status','end','json','count','limit','set','Content-Range','apply','save','update','then','destroy','error','stack','name','index','ChatOfflineMessage','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','offset','pick','filter'];(function(_0x53e3fa,_0x50c5f2){var _0xe8584a=function(_0x1771a5){while(--_0x1771a5){_0x53e3fa['push'](_0x53e3fa['shift']());}};_0xe8584a(++_0x50c5f2);}(_0x099a,0x9f));var _0xa099=function(_0x31adf9,_0x511868){_0x31adf9=_0x31adf9-0x0;var _0x4412b5=_0x099a[_0x31adf9];return _0x4412b5;};'use strict';var pdf=require(_0xa099('0x0'));var emlformat=require(_0xa099('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xa099('0x2'));var jsonpatch=require(_0xa099('0x3'));var rp=require(_0xa099('0x4'));var moment=require(_0xa099('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xa099('0x6'));var util=require(_0xa099('0x7'));var path=require(_0xa099('0x8'));var sox=require(_0xa099('0x9'));var csv=require(_0xa099('0xa'));var ejs=require(_0xa099('0xb'));var fs=require('fs');var _=require(_0xa099('0xc'));var squel=require('squel');var crypto=require(_0xa099('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xa099('0xa'));var querystring=require(_0xa099('0xe'));var Papa=require(_0xa099('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0xa099('0x10'));var Redis=require(_0xa099('0x11'));var qs=require(_0xa099('0x12'));var logger=require(_0xa099('0x13'))(_0xa099('0x14'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x533c72,_0x3b772f){_0x3b772f=_0x3b772f||0xcc;return function(_0x34e11c){if(_0x34e11c){return _0x533c72[_0xa099('0x15')](_0x3b772f);}return _0x533c72[_0xa099('0x16')](_0x3b772f)[_0xa099('0x17')]();};}function respondWithResult(_0x4cedd2,_0x528eaa){_0x528eaa=_0x528eaa||0xc8;return function(_0x327e22){if(_0x327e22){return _0x4cedd2['status'](_0x528eaa)[_0xa099('0x18')](_0x327e22);}};}function respondWithFilteredResult(_0x1d9496,_0x1616aa){return function(_0x45f478){if(_0x45f478){var _0x3875f7=_0x45f478[_0xa099('0x19')],_0x3e4cd5=_0x1616aa['offset'],_0x3eeb6b=_0x1616aa['offset']+_0x1616aa[_0xa099('0x1a')],_0x25fc03;if(_0x3eeb6b>=_0x3875f7){_0x3eeb6b=_0x3875f7;_0x25fc03=0xc8;}else{_0x25fc03=0xce;}_0x1d9496[_0xa099('0x16')](_0x25fc03);return _0x1d9496[_0xa099('0x1b')](_0xa099('0x1c'),_0x3e4cd5+'-'+_0x3eeb6b+'/'+_0x3875f7)[_0xa099('0x18')](_0x45f478);}return null;};}function patchUpdates(_0x33abb3){return function(_0x140a21){try{jsonpatch[_0xa099('0x1d')](_0x140a21,_0x33abb3,!![]);}catch(_0xd53b6e){return BPromise['reject'](_0xd53b6e);}return _0x140a21[_0xa099('0x1e')]();};}function saveUpdates(_0x4cdf6b,_0x465e86){return function(_0x59e48e){if(_0x59e48e){return _0x59e48e[_0xa099('0x1f')](_0x4cdf6b)[_0xa099('0x20')](function(_0x5efc9b){return _0x5efc9b;});}return null;};}function removeEntity(_0x1fba5f,_0x30e56c){return function(_0x284ea4){if(_0x284ea4){return _0x284ea4[_0xa099('0x21')]()[_0xa099('0x20')](function(){_0x1fba5f[_0xa099('0x16')](0xcc)[_0xa099('0x17')]();});}};}function handleEntityNotFound(_0x1fae23,_0x1dd5a3){return function(_0x1d842d){if(!_0x1d842d){_0x1fae23[_0xa099('0x15')](0x194);}return _0x1d842d;};}function handleError(_0x404f38,_0x108d16){_0x108d16=_0x108d16||0x1f4;return function(_0x267aff){logger[_0xa099('0x22')](_0x267aff[_0xa099('0x23')]);if(_0x267aff[_0xa099('0x24')]){delete _0x267aff[_0xa099('0x24')];}_0x404f38['status'](_0x108d16)['send'](_0x267aff);};}exports[_0xa099('0x25')]=function(_0x4d0775,_0x5c0d78){var _0x1d1bc5={},_0x49689c={},_0x4afde4={'count':0x0,'rows':[]};var _0x31a8c4=db[_0xa099('0x26')]['rawAttributes'];_0x49689c[_0xa099('0x27')]=_[_0xa099('0x28')](_0x31a8c4);_0x49689c[_0xa099('0x29')]=_['keys'](_0x4d0775[_0xa099('0x29')]);_0x49689c[_0xa099('0x2a')]=_[_0xa099('0x2b')](_0x49689c[_0xa099('0x27')],_0x49689c[_0xa099('0x29')]);_0x1d1bc5[_0xa099('0x2c')]=_['intersection'](_0x49689c[_0xa099('0x27')],qs['fields'](_0x4d0775[_0xa099('0x29')][_0xa099('0x2d')]));_0x1d1bc5[_0xa099('0x2c')]=_0x1d1bc5[_0xa099('0x2c')][_0xa099('0x2e')]?_0x1d1bc5[_0xa099('0x2c')]:_0x49689c['model'];if(!_0x4d0775[_0xa099('0x29')][_0xa099('0x2f')]('nolimit')){_0x1d1bc5['limit']=qs[_0xa099('0x1a')](_0x4d0775[_0xa099('0x29')]['limit']);_0x1d1bc5[_0xa099('0x30')]=qs[_0xa099('0x30')](_0x4d0775[_0xa099('0x29')]['offset']);}_0x1d1bc5['order']=qs['sort'](_0x4d0775['query']['sort']);_0x1d1bc5['where']=qs[_0xa099('0x2a')](_[_0xa099('0x31')](_0x4d0775[_0xa099('0x29')],_0x49689c[_0xa099('0x2a')]));if(_0x4d0775[_0xa099('0x29')][_0xa099('0x32')]){_0x1d1bc5[_0xa099('0x33')]=_[_0xa099('0x34')](_0x1d1bc5[_0xa099('0x33')],{'$or':_[_0xa099('0x35')](_0x31a8c4,function(_0x39d2ca){if(_0x39d2ca[_0xa099('0x36')][_0xa099('0x37')]!==_0xa099('0x38')){var _0x4027e7={};_0x4027e7[_0x39d2ca[_0xa099('0x39')]]={'$like':'%'+_0x4d0775[_0xa099('0x29')][_0xa099('0x32')]+'%'};return _0x4027e7;}})});}_0x1d1bc5=_[_0xa099('0x34')]({},_0x1d1bc5,_0x4d0775[_0xa099('0x3a')]);var _0x16388e={'where':_0x1d1bc5['where']};return db[_0xa099('0x26')]['count'](_0x16388e)['then'](function(_0x230f3c){_0x4afde4[_0xa099('0x19')]=_0x230f3c;if(_0x4d0775[_0xa099('0x29')][_0xa099('0x3b')]){_0x1d1bc5[_0xa099('0x3c')]=[{'all':!![]}];}return db[_0xa099('0x26')]['findAll'](_0x1d1bc5);})['then'](function(_0x29622b){_0x4afde4[_0xa099('0x3d')]=_0x29622b;return _0x4afde4;})[_0xa099('0x20')](respondWithFilteredResult(_0x5c0d78,_0x1d1bc5))[_0xa099('0x3e')](handleError(_0x5c0d78,null));};exports[_0xa099('0x3f')]=function(_0x574430,_0x1557c0){var _0x29a279={'raw':!![],'where':{'id':_0x574430[_0xa099('0x40')]['id']}},_0x471756={};_0x471756['model']=_[_0xa099('0x28')](db[_0xa099('0x26')][_0xa099('0x41')]);_0x471756['query']=_['keys'](_0x574430[_0xa099('0x29')]);_0x471756['filters']=_[_0xa099('0x2b')](_0x471756[_0xa099('0x27')],_0x471756[_0xa099('0x29')]);_0x29a279['attributes']=_['intersection'](_0x471756[_0xa099('0x27')],qs[_0xa099('0x2d')](_0x574430['query'][_0xa099('0x2d')]));_0x29a279['attributes']=_0x29a279['attributes'][_0xa099('0x2e')]?_0x29a279[_0xa099('0x2c')]:_0x471756[_0xa099('0x27')];if(_0x574430[_0xa099('0x29')][_0xa099('0x3b')]){_0x29a279[_0xa099('0x3c')]=[{'all':!![]}];}_0x29a279=_['merge']({},_0x29a279,_0x574430[_0xa099('0x3a')]);return db[_0xa099('0x26')][_0xa099('0x42')](_0x29a279)['then'](handleEntityNotFound(_0x1557c0,null))[_0xa099('0x20')](respondWithResult(_0x1557c0,null))[_0xa099('0x3e')](handleError(_0x1557c0,null));};exports[_0xa099('0x43')]=function(_0x4dc7fc,_0x5947b0){return db[_0xa099('0x26')][_0xa099('0x43')](_0x4dc7fc[_0xa099('0x44')],{})[_0xa099('0x20')](respondWithResult(_0x5947b0,0xc9))[_0xa099('0x3e')](handleError(_0x5947b0,null));};exports['update']=function(_0x2f880d,_0x321479){if(_0x2f880d[_0xa099('0x44')]['id']){delete _0x2f880d[_0xa099('0x44')]['id'];}return db[_0xa099('0x26')][_0xa099('0x42')]({'where':{'id':_0x2f880d[_0xa099('0x40')]['id']}})[_0xa099('0x20')](handleEntityNotFound(_0x321479,null))['then'](saveUpdates(_0x2f880d[_0xa099('0x44')],null))[_0xa099('0x20')](respondWithResult(_0x321479,null))[_0xa099('0x3e')](handleError(_0x321479,null));};exports[_0xa099('0x21')]=function(_0x57b8dc,_0x3ea5e9){return db[_0xa099('0x26')][_0xa099('0x42')]({'where':{'id':_0x57b8dc['params']['id']}})[_0xa099('0x20')](handleEntityNotFound(_0x3ea5e9,null))['then'](removeEntity(_0x3ea5e9,null))[_0xa099('0x3e')](handleError(_0x3ea5e9,null));};exports[_0xa099('0x45')]=function(_0x26f940,_0x379418){return db[_0xa099('0x26')]['describe']()[_0xa099('0x20')](respondWithResult(_0x379418,null))[_0xa099('0x3e')](handleError(_0x379418,null));};
\ No newline at end of file
index 3eeb9de..c3ad08c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3bf6=['define','ChatOfflineMessage','utf8mb4','utf8mb4_unicode_ci','util','../../config/logger','api','moment','./chatOfflineMessage.attributes','exports'];(function(_0x58d62c,_0x20985b){var _0x49516e=function(_0xe555b0){while(--_0xe555b0){_0x58d62c['push'](_0x58d62c['shift']());}};_0x49516e(++_0x20985b);}(_0x3bf6,0x11c));var _0x63bf=function(_0x53579e,_0x26db78){_0x53579e=_0x53579e-0x0;var _0x3911ee=_0x3bf6[_0x53579e];return _0x3911ee;};'use strict';var _=require('lodash');var util=require(_0x63bf('0x0'));var logger=require(_0x63bf('0x1'))(_0x63bf('0x2'));var moment=require(_0x63bf('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x63bf('0x4'));module[_0x63bf('0x5')]=function(_0x6619ee,_0x260c22){return _0x6619ee[_0x63bf('0x6')](_0x63bf('0x7'),attributes,{'tableName':'chat_offline_messages','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0x63bf('0x8'),'collate':_0x63bf('0x9')});};
\ No newline at end of file
+var _0xf38e=['./chatOfflineMessage.attributes','exports','ChatOfflineMessage','utf8mb4','utf8mb4_unicode_ci','lodash','../../config/logger','moment','bluebird'];(function(_0x2ec461,_0x5f588a){var _0x28603d=function(_0x21114b){while(--_0x21114b){_0x2ec461['push'](_0x2ec461['shift']());}};_0x28603d(++_0x5f588a);}(_0xf38e,0x101));var _0xef38=function(_0x35ce71,_0x661d21){_0x35ce71=_0x35ce71-0x0;var _0x5704b3=_0xf38e[_0x35ce71];return _0x5704b3;};'use strict';var _=require(_0xef38('0x0'));var util=require('util');var logger=require(_0xef38('0x1'))('api');var moment=require(_0xef38('0x2'));var BPromise=require(_0xef38('0x3'));var rp=require('request-promise');var attributes=require(_0xef38('0x4'));module[_0xef38('0x5')]=function(_0x31c2eb,_0x55dbc5){return _0x31c2eb['define'](_0xef38('0x6'),attributes,{'tableName':'chat_offline_messages','paranoid':![],'indexes':[],'timestamps':!![],'charset':_0xef38('0x7'),'collate':_0xef38('0x8')});};
\ No newline at end of file
index b9bbd72..748ae6a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd839=['code','message','ChatOfflineMessage,\x20%s,\x20%s','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/environment','jayson/promise','client','http','request','info','request\x20sent','debug','ChatOfflineMessage,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x38622b,_0x3cfdf7){var _0x2c1a7a=function(_0x5de9cc){while(--_0x5de9cc){_0x38622b['push'](_0x38622b['shift']());}};_0x2c1a7a(++_0x3cfdf7);}(_0xd839,0xb5));var _0x9d83=function(_0x35b50e,_0x2d7731){_0x35b50e=_0x35b50e-0x0;var _0x27e796=_0xd839[_0x35b50e];return _0x27e796;};'use strict';var _=require(_0x9d83('0x0'));var util=require('util');var moment=require(_0x9d83('0x1'));var BPromise=require(_0x9d83('0x2'));var rs=require(_0x9d83('0x3'));var fs=require('fs');var Redis=require(_0x9d83('0x4'));var db=require(_0x9d83('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')('rpc');var config=require(_0x9d83('0x6'));var jayson=require(_0x9d83('0x7'));var client=jayson[_0x9d83('0x8')][_0x9d83('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5f564a,_0x52c27d,_0x581bf4){return new BPromise(function(_0x4cf8e0,_0x3745d7){return client[_0x9d83('0xa')](_0x5f564a,_0x581bf4)['then'](function(_0x2bf42b){logger[_0x9d83('0xb')]('ChatOfflineMessage,\x20%s,\x20%s',_0x52c27d,_0x9d83('0xc'));logger[_0x9d83('0xd')](_0x9d83('0xe'),_0x52c27d,'request\x20sent',JSON[_0x9d83('0xf')](_0x2bf42b));if(_0x2bf42b[_0x9d83('0x10')]){if(_0x2bf42b[_0x9d83('0x10')][_0x9d83('0x11')]===0x1f4){logger[_0x9d83('0x10')]('ChatOfflineMessage,\x20%s,\x20%s',_0x52c27d,_0x2bf42b['error'][_0x9d83('0x12')]);return _0x3745d7(_0x2bf42b[_0x9d83('0x10')][_0x9d83('0x12')]);}logger['error'](_0x9d83('0x13'),_0x52c27d,_0x2bf42b['error'][_0x9d83('0x12')]);return _0x4cf8e0(_0x2bf42b[_0x9d83('0x10')]['message']);}else{logger[_0x9d83('0xb')](_0x9d83('0x13'),_0x52c27d,'request\x20sent');_0x4cf8e0(_0x2bf42b[_0x9d83('0x14')]['message']);}})[_0x9d83('0x15')](function(_0x975236){logger[_0x9d83('0x10')](_0x9d83('0x13'),_0x52c27d,_0x975236);_0x3745d7(_0x975236);});});}
\ No newline at end of file
+var _0xa300=['jayson/promise','client','http','request','ChatOfflineMessage,\x20%s,\x20%s','request\x20sent','debug','ChatOfflineMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x1cc892,_0x5ca49c){var _0x7e8263=function(_0x4abe8a){while(--_0x4abe8a){_0x1cc892['push'](_0x1cc892['shift']());}};_0x7e8263(++_0x5ca49c);}(_0xa300,0x15d));var _0x0a30=function(_0x3e6d29,_0xb28c03){_0x3e6d29=_0x3e6d29-0x0;var _0x47b278=_0xa300[_0x3e6d29];return _0x47b278;};'use strict';var _=require(_0x0a30('0x0'));var util=require('util');var moment=require(_0x0a30('0x1'));var BPromise=require('bluebird');var rs=require(_0x0a30('0x2'));var fs=require('fs');var Redis=require(_0x0a30('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x0a30('0x4'));var logger=require(_0x0a30('0x5'))(_0x0a30('0x6'));var config=require(_0x0a30('0x7'));var jayson=require(_0x0a30('0x8'));var client=jayson[_0x0a30('0x9')][_0x0a30('0xa')]({'port':0x232a});function respondWithRpcPromise(_0xe99daf,_0x5e8405,_0xe2a63b){return new BPromise(function(_0x27f660,_0x5e5571){return client[_0x0a30('0xb')](_0xe99daf,_0xe2a63b)['then'](function(_0x20c2fb){logger['info'](_0x0a30('0xc'),_0x5e8405,_0x0a30('0xd'));logger[_0x0a30('0xe')](_0x0a30('0xf'),_0x5e8405,_0x0a30('0xd'),JSON[_0x0a30('0x10')](_0x20c2fb));if(_0x20c2fb[_0x0a30('0x11')]){if(_0x20c2fb[_0x0a30('0x11')][_0x0a30('0x12')]===0x1f4){logger[_0x0a30('0x11')]('ChatOfflineMessage,\x20%s,\x20%s',_0x5e8405,_0x20c2fb[_0x0a30('0x11')][_0x0a30('0x13')]);return _0x5e5571(_0x20c2fb[_0x0a30('0x11')][_0x0a30('0x13')]);}logger['error'](_0x0a30('0xc'),_0x5e8405,_0x20c2fb[_0x0a30('0x11')][_0x0a30('0x13')]);return _0x27f660(_0x20c2fb['error'][_0x0a30('0x13')]);}else{logger['info'](_0x0a30('0xc'),_0x5e8405,_0x0a30('0xd'));_0x27f660(_0x20c2fb[_0x0a30('0x14')][_0x0a30('0x13')]);}})['catch'](function(_0x16a26f){logger['error'](_0x0a30('0xc'),_0x5e8405,_0x16a26f);_0x5e5571(_0x16a26f);});});}
\ No newline at end of file
index 3fde1f6..7573a1e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0269=['delete','destroy','exports','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatOfflineMessage.controller','isAuthenticated','index','describe','get','/:id','show','post','put'];(function(_0x486581,_0x4ca1c5){var _0x8c02b1=function(_0x1c8b68){while(--_0x1c8b68){_0x486581['push'](_0x486581['shift']());}};_0x8c02b1(++_0x4ca1c5);}(_0x0269,0x135));var _0x9026=function(_0x223460,_0x3bcadc){_0x223460=_0x223460-0x0;var _0x2aa9e6=_0x0269[_0x223460];return _0x2aa9e6;};'use strict';var multer=require(_0x9026('0x0'));var util=require('util');var path=require(_0x9026('0x1'));var timeout=require('connect-timeout');var express=require(_0x9026('0x2'));var router=express['Router']();var auth=require(_0x9026('0x3'));var interaction=require(_0x9026('0x4'));var config=require(_0x9026('0x5'));var controller=require(_0x9026('0x6'));router['get']('/',auth[_0x9026('0x7')](),controller[_0x9026('0x8')]);router['get']('/describe',auth[_0x9026('0x7')](),controller[_0x9026('0x9')]);router[_0x9026('0xa')](_0x9026('0xb'),auth['isAuthenticated'](),controller[_0x9026('0xc')]);router[_0x9026('0xd')]('/',auth[_0x9026('0x7')](),controller['create']);router[_0x9026('0xe')](_0x9026('0xb'),auth[_0x9026('0x7')](),controller['update']);router[_0x9026('0xf')]('/:id',auth[_0x9026('0x7')](),controller[_0x9026('0x10')]);module[_0x9026('0x11')]=router;
\ No newline at end of file
+var _0x1e69=['describe','/:id','create','put','update','delete','exports','util','path','connect-timeout','express','../../components/interaction/service','../../config/environment','./chatOfflineMessage.controller','get','isAuthenticated','index','/describe'];(function(_0x2612a9,_0x4c6f14){var _0x44fa28=function(_0x29cd1e){while(--_0x29cd1e){_0x2612a9['push'](_0x2612a9['shift']());}};_0x44fa28(++_0x4c6f14);}(_0x1e69,0x85));var _0x91e6=function(_0x43b487,_0x21893a){_0x43b487=_0x43b487-0x0;var _0x2f707a=_0x1e69[_0x43b487];return _0x2f707a;};'use strict';var multer=require('multer');var util=require(_0x91e6('0x0'));var path=require(_0x91e6('0x1'));var timeout=require(_0x91e6('0x2'));var express=require(_0x91e6('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x91e6('0x4'));var config=require(_0x91e6('0x5'));var controller=require(_0x91e6('0x6'));router[_0x91e6('0x7')]('/',auth[_0x91e6('0x8')](),controller[_0x91e6('0x9')]);router[_0x91e6('0x7')](_0x91e6('0xa'),auth[_0x91e6('0x8')](),controller[_0x91e6('0xb')]);router[_0x91e6('0x7')](_0x91e6('0xc'),auth[_0x91e6('0x8')](),controller['show']);router['post']('/',auth[_0x91e6('0x8')](),controller[_0x91e6('0xd')]);router[_0x91e6('0xe')](_0x91e6('0xc'),auth['isAuthenticated'](),controller[_0x91e6('0xf')]);router[_0x91e6('0x10')](_0x91e6('0xc'),auth[_0x91e6('0x8')](),controller['destroy']);module[_0x91e6('0x11')]=router;
\ No newline at end of file
index 66356bc..b9e9005 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeaec=['INTEGER','sequelize','ENUM','mouseOver','STRING'];(function(_0x57cce4,_0x503fda){var _0x166733=function(_0x4583db){while(--_0x4583db){_0x57cce4['push'](_0x57cce4['shift']());}};_0x166733(++_0x503fda);}(_0xeaec,0x191));var _0xceae=function(_0x173158,_0x1609cf){_0x173158=_0x173158-0x0;var _0x4ad038=_0xeaec[_0x173158];return _0x4ad038;};'use strict';var Sequelize=require(_0xceae('0x0'));module['exports']={'name':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize[_0xceae('0x1')](_0xceae('0x2'),'timeout'),'defaultValue':'mouseOver'},'selector':{'type':Sequelize[_0xceae('0x3')]},'timeout':{'type':Sequelize[_0xceae('0x4')]}};
\ No newline at end of file
+var _0x1036=['STRING','mouseOver','timeout','INTEGER','sequelize','exports'];(function(_0x158f01,_0x12af3e){var _0x5ef74e=function(_0x5e7adc){while(--_0x5e7adc){_0x158f01['push'](_0x158f01['shift']());}};_0x5ef74e(++_0x12af3e);}(_0x1036,0x196));var _0x6103=function(_0x1764cd,_0x5044a3){_0x1764cd=_0x1764cd-0x0;var _0x21e534=_0x1036[_0x1764cd];return _0x21e534;};'use strict';var Sequelize=require(_0x6103('0x0'));module[_0x6103('0x1')]={'name':{'type':Sequelize[_0x6103('0x2')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0x6103('0x3'),_0x6103('0x4')),'defaultValue':'mouseOver'},'selector':{'type':Sequelize[_0x6103('0x2')]},'timeout':{'type':Sequelize[_0x6103('0x5')]}};
\ No newline at end of file
index 5126a39..6774236 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa049=['count','offset','limit','set','Content-Range','json','apply','update','then','destroy','error','stack','name','send','show','params','model','keys','ChatProactiveAction','rawAttributes','query','filters','attributes','intersection','fields','length','includeAll','include','merge','options','find','create','body','catch','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end'];(function(_0x6c993a,_0x5ea3ab){var _0x27f547=function(_0x22df20){while(--_0x22df20){_0x6c993a['push'](_0x6c993a['shift']());}};_0x27f547(++_0x5ea3ab);}(_0xa049,0x1db));var _0x9a04=function(_0x3f4315,_0xd6ec89){_0x3f4315=_0x3f4315-0x0;var _0x5842e3=_0xa049[_0x3f4315];return _0x5842e3;};'use strict';var pdf=require(_0x9a04('0x0'));var emlformat=require(_0x9a04('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x9a04('0x2'));var jsonpatch=require(_0x9a04('0x3'));var rp=require(_0x9a04('0x4'));var moment=require(_0x9a04('0x5'));var BPromise=require(_0x9a04('0x6'));var Mustache=require(_0x9a04('0x7'));var util=require(_0x9a04('0x8'));var path=require(_0x9a04('0x9'));var sox=require(_0x9a04('0xa'));var csv=require('to-csv');var ejs=require(_0x9a04('0xb'));var fs=require('fs');var _=require(_0x9a04('0xc'));var squel=require('squel');var crypto=require(_0x9a04('0xd'));var jsforce=require(_0x9a04('0xe'));var deskjs=require(_0x9a04('0xf'));var toCsv=require(_0x9a04('0x10'));var querystring=require(_0x9a04('0x11'));var Papa=require(_0x9a04('0x12'));var authService=require('../../components/auth/service');var hardwareService=require(_0x9a04('0x13'));var Redis=require(_0x9a04('0x14'));var qs=require(_0x9a04('0x15'));var logger=require(_0x9a04('0x16'))(_0x9a04('0x17'));var utils=require(_0x9a04('0x18'));var config=require('../../config/environment');var db=require(_0x9a04('0x19'))['db'];function respondWithStatusCode(_0x38c55a,_0x37364e){_0x37364e=_0x37364e||0xcc;return function(_0x554fd7){if(_0x554fd7){return _0x38c55a[_0x9a04('0x1a')](_0x37364e);}return _0x38c55a[_0x9a04('0x1b')](_0x37364e)[_0x9a04('0x1c')]();};}function respondWithResult(_0x7a3be5,_0x7b3cc6){_0x7b3cc6=_0x7b3cc6||0xc8;return function(_0x551d17){if(_0x551d17){return _0x7a3be5[_0x9a04('0x1b')](_0x7b3cc6)['json'](_0x551d17);}};}function respondWithFilteredResult(_0xef2ada,_0x83b9ff){return function(_0x5f2e4a){if(_0x5f2e4a){var _0xd5159=_0x5f2e4a[_0x9a04('0x1d')],_0x12b723=_0x83b9ff[_0x9a04('0x1e')],_0x549aeb=_0x83b9ff[_0x9a04('0x1e')]+_0x83b9ff[_0x9a04('0x1f')],_0x8637bb;if(_0x549aeb>=_0xd5159){_0x549aeb=_0xd5159;_0x8637bb=0xc8;}else{_0x8637bb=0xce;}_0xef2ada['status'](_0x8637bb);return _0xef2ada[_0x9a04('0x20')](_0x9a04('0x21'),_0x12b723+'-'+_0x549aeb+'/'+_0xd5159)[_0x9a04('0x22')](_0x5f2e4a);}return null;};}function patchUpdates(_0x29fd7d){return function(_0x436c71){try{jsonpatch[_0x9a04('0x23')](_0x436c71,_0x29fd7d,!![]);}catch(_0xb7c3d6){return BPromise['reject'](_0xb7c3d6);}return _0x436c71['save']();};}function saveUpdates(_0x251813,_0xcf690){return function(_0x5b61fc){if(_0x5b61fc){return _0x5b61fc[_0x9a04('0x24')](_0x251813)[_0x9a04('0x25')](function(_0x1b51a2){return _0x1b51a2;});}return null;};}function removeEntity(_0x1933f1,_0x22fd4a){return function(_0x321741){if(_0x321741){return _0x321741[_0x9a04('0x26')]()['then'](function(){_0x1933f1[_0x9a04('0x1b')](0xcc)[_0x9a04('0x1c')]();});}};}function handleEntityNotFound(_0x563c27,_0x15702e){return function(_0xdbeafd){if(!_0xdbeafd){_0x563c27[_0x9a04('0x1a')](0x194);}return _0xdbeafd;};}function handleError(_0x4a949c,_0xbe2ae6){_0xbe2ae6=_0xbe2ae6||0x1f4;return function(_0x4a81f2){logger[_0x9a04('0x27')](_0x4a81f2[_0x9a04('0x28')]);if(_0x4a81f2['name']){delete _0x4a81f2[_0x9a04('0x29')];}_0x4a949c[_0x9a04('0x1b')](_0xbe2ae6)[_0x9a04('0x2a')](_0x4a81f2);};}exports[_0x9a04('0x2b')]=function(_0x13712e,_0x1c3cd1){var _0x5403ec={'raw':!![],'where':{'id':_0x13712e[_0x9a04('0x2c')]['id']}},_0x5879ee={};_0x5879ee[_0x9a04('0x2d')]=_[_0x9a04('0x2e')](db[_0x9a04('0x2f')][_0x9a04('0x30')]);_0x5879ee[_0x9a04('0x31')]=_[_0x9a04('0x2e')](_0x13712e[_0x9a04('0x31')]);_0x5879ee[_0x9a04('0x32')]=_['intersection'](_0x5879ee[_0x9a04('0x2d')],_0x5879ee[_0x9a04('0x31')]);_0x5403ec[_0x9a04('0x33')]=_[_0x9a04('0x34')](_0x5879ee[_0x9a04('0x2d')],qs[_0x9a04('0x35')](_0x13712e[_0x9a04('0x31')][_0x9a04('0x35')]));_0x5403ec[_0x9a04('0x33')]=_0x5403ec[_0x9a04('0x33')][_0x9a04('0x36')]?_0x5403ec[_0x9a04('0x33')]:_0x5879ee[_0x9a04('0x2d')];if(_0x13712e[_0x9a04('0x31')][_0x9a04('0x37')]){_0x5403ec[_0x9a04('0x38')]=[{'all':!![]}];}_0x5403ec=_[_0x9a04('0x39')]({},_0x5403ec,_0x13712e[_0x9a04('0x3a')]);return db[_0x9a04('0x2f')][_0x9a04('0x3b')](_0x5403ec)[_0x9a04('0x25')](handleEntityNotFound(_0x1c3cd1,null))[_0x9a04('0x25')](respondWithResult(_0x1c3cd1,null))['catch'](handleError(_0x1c3cd1,null));};exports[_0x9a04('0x3c')]=function(_0x20263a,_0xb93d26){return db[_0x9a04('0x2f')][_0x9a04('0x3c')](_0x20263a['body'],{})['then'](respondWithResult(_0xb93d26,0xc9))['catch'](handleError(_0xb93d26,null));};exports[_0x9a04('0x24')]=function(_0x213369,_0x141a0d){if(_0x213369[_0x9a04('0x3d')]['id']){delete _0x213369[_0x9a04('0x3d')]['id'];}return db[_0x9a04('0x2f')][_0x9a04('0x3b')]({'where':{'id':_0x213369[_0x9a04('0x2c')]['id']}})[_0x9a04('0x25')](handleEntityNotFound(_0x141a0d,null))[_0x9a04('0x25')](saveUpdates(_0x213369[_0x9a04('0x3d')],null))[_0x9a04('0x25')](respondWithResult(_0x141a0d,null))[_0x9a04('0x3e')](handleError(_0x141a0d,null));};exports['destroy']=function(_0x2d8b84,_0x3b4156){return db[_0x9a04('0x2f')][_0x9a04('0x3b')]({'where':{'id':_0x2d8b84[_0x9a04('0x2c')]['id']}})[_0x9a04('0x25')](handleEntityNotFound(_0x3b4156,null))['then'](removeEntity(_0x3b4156,null))[_0x9a04('0x3e')](handleError(_0x3b4156,null));};
\ No newline at end of file
+var _0xaee0=['save','then','end','error','stack','name','send','params','model','keys','ChatProactiveAction','rawAttributes','query','filters','intersection','attributes','fields','length','include','options','create','catch','body','find','destroy','html-pdf','eml-format','rimraf','zip-dir','moment','bluebird','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject'];(function(_0x23bc85,_0x19addc){var _0x177dfd=function(_0x134ab5){while(--_0x134ab5){_0x23bc85['push'](_0x23bc85['shift']());}};_0x177dfd(++_0x19addc);}(_0xaee0,0x17b));var _0x0aee=function(_0x16b1a5,_0x318267){_0x16b1a5=_0x16b1a5-0x0;var _0x475e25=_0xaee0[_0x16b1a5];return _0x475e25;};'use strict';var pdf=require(_0x0aee('0x0'));var emlformat=require(_0x0aee('0x1'));var rimraf=require(_0x0aee('0x2'));var zipdir=require(_0x0aee('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x0aee('0x4'));var BPromise=require(_0x0aee('0x5'));var Mustache=require('mustache');var util=require(_0x0aee('0x6'));var path=require(_0x0aee('0x7'));var sox=require(_0x0aee('0x8'));var csv=require(_0x0aee('0x9'));var ejs=require(_0x0aee('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x0aee('0xb'));var crypto=require(_0x0aee('0xc'));var jsforce=require(_0x0aee('0xd'));var deskjs=require(_0x0aee('0xe'));var toCsv=require(_0x0aee('0x9'));var querystring=require(_0x0aee('0xf'));var Papa=require(_0x0aee('0x10'));var authService=require(_0x0aee('0x11'));var hardwareService=require(_0x0aee('0x12'));var Redis=require('ioredis');var qs=require(_0x0aee('0x13'));var logger=require(_0x0aee('0x14'))(_0x0aee('0x15'));var utils=require(_0x0aee('0x16'));var config=require(_0x0aee('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x343175,_0x469e29){_0x469e29=_0x469e29||0xcc;return function(_0x175c30){if(_0x175c30){return _0x343175[_0x0aee('0x18')](_0x469e29);}return _0x343175[_0x0aee('0x19')](_0x469e29)['end']();};}function respondWithResult(_0x4c4b67,_0x320267){_0x320267=_0x320267||0xc8;return function(_0x5291bc){if(_0x5291bc){return _0x4c4b67[_0x0aee('0x19')](_0x320267)[_0x0aee('0x1a')](_0x5291bc);}};}function respondWithFilteredResult(_0x23343d,_0x504b1f){return function(_0x126cb0){if(_0x126cb0){var _0x337bca=_0x126cb0[_0x0aee('0x1b')],_0x14faed=_0x504b1f[_0x0aee('0x1c')],_0x283dea=_0x504b1f[_0x0aee('0x1c')]+_0x504b1f[_0x0aee('0x1d')],_0xa81375;if(_0x283dea>=_0x337bca){_0x283dea=_0x337bca;_0xa81375=0xc8;}else{_0xa81375=0xce;}_0x23343d['status'](_0xa81375);return _0x23343d[_0x0aee('0x1e')](_0x0aee('0x1f'),_0x14faed+'-'+_0x283dea+'/'+_0x337bca)[_0x0aee('0x1a')](_0x126cb0);}return null;};}function patchUpdates(_0x1b588d){return function(_0x241ec3){try{jsonpatch[_0x0aee('0x20')](_0x241ec3,_0x1b588d,!![]);}catch(_0x37eab3){return BPromise[_0x0aee('0x21')](_0x37eab3);}return _0x241ec3[_0x0aee('0x22')]();};}function saveUpdates(_0x6da9f1,_0x3a7a50){return function(_0x9daf1c){if(_0x9daf1c){return _0x9daf1c['update'](_0x6da9f1)[_0x0aee('0x23')](function(_0x20fbff){return _0x20fbff;});}return null;};}function removeEntity(_0x4450a2,_0x3e9cd3){return function(_0x1852a5){if(_0x1852a5){return _0x1852a5['destroy']()[_0x0aee('0x23')](function(){_0x4450a2['status'](0xcc)[_0x0aee('0x24')]();});}};}function handleEntityNotFound(_0x4cc776,_0x290589){return function(_0x43ac59){if(!_0x43ac59){_0x4cc776[_0x0aee('0x18')](0x194);}return _0x43ac59;};}function handleError(_0x27ee2d,_0x2db679){_0x2db679=_0x2db679||0x1f4;return function(_0x5e9782){logger[_0x0aee('0x25')](_0x5e9782[_0x0aee('0x26')]);if(_0x5e9782['name']){delete _0x5e9782[_0x0aee('0x27')];}_0x27ee2d[_0x0aee('0x19')](_0x2db679)[_0x0aee('0x28')](_0x5e9782);};}exports['show']=function(_0xe62b50,_0x2ff75a){var _0x383b40={'raw':!![],'where':{'id':_0xe62b50[_0x0aee('0x29')]['id']}},_0x1ef2ba={};_0x1ef2ba[_0x0aee('0x2a')]=_[_0x0aee('0x2b')](db[_0x0aee('0x2c')][_0x0aee('0x2d')]);_0x1ef2ba[_0x0aee('0x2e')]=_['keys'](_0xe62b50[_0x0aee('0x2e')]);_0x1ef2ba[_0x0aee('0x2f')]=_[_0x0aee('0x30')](_0x1ef2ba['model'],_0x1ef2ba[_0x0aee('0x2e')]);_0x383b40[_0x0aee('0x31')]=_[_0x0aee('0x30')](_0x1ef2ba[_0x0aee('0x2a')],qs[_0x0aee('0x32')](_0xe62b50['query'][_0x0aee('0x32')]));_0x383b40[_0x0aee('0x31')]=_0x383b40['attributes'][_0x0aee('0x33')]?_0x383b40['attributes']:_0x1ef2ba[_0x0aee('0x2a')];if(_0xe62b50['query']['includeAll']){_0x383b40[_0x0aee('0x34')]=[{'all':!![]}];}_0x383b40=_['merge']({},_0x383b40,_0xe62b50[_0x0aee('0x35')]);return db[_0x0aee('0x2c')]['find'](_0x383b40)[_0x0aee('0x23')](handleEntityNotFound(_0x2ff75a,null))[_0x0aee('0x23')](respondWithResult(_0x2ff75a,null))['catch'](handleError(_0x2ff75a,null));};exports['create']=function(_0x19068b,_0x38f00e){return db['ChatProactiveAction'][_0x0aee('0x36')](_0x19068b['body'],{})[_0x0aee('0x23')](respondWithResult(_0x38f00e,0xc9))[_0x0aee('0x37')](handleError(_0x38f00e,null));};exports['update']=function(_0x534012,_0x1280b3){if(_0x534012[_0x0aee('0x38')]['id']){delete _0x534012[_0x0aee('0x38')]['id'];}return db[_0x0aee('0x2c')][_0x0aee('0x39')]({'where':{'id':_0x534012[_0x0aee('0x29')]['id']}})[_0x0aee('0x23')](handleEntityNotFound(_0x1280b3,null))[_0x0aee('0x23')](saveUpdates(_0x534012['body'],null))[_0x0aee('0x23')](respondWithResult(_0x1280b3,null))[_0x0aee('0x37')](handleError(_0x1280b3,null));};exports[_0x0aee('0x3a')]=function(_0xc31a40,_0x10b445){return db['ChatProactiveAction'][_0x0aee('0x39')]({'where':{'id':_0xc31a40[_0x0aee('0x29')]['id']}})['then'](handleEntityNotFound(_0x10b445,null))[_0x0aee('0x23')](removeEntity(_0x10b445,null))[_0x0aee('0x37')](handleError(_0x10b445,null));};
\ No newline at end of file
index f5bc835..eddcf71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x66fa=['util','api','moment','bluebird','request-promise','./chatProactiveAction.attributes','exports','ChatProactiveAction','chat_proactive_actions','lodash'];(function(_0x15b192,_0x38c235){var _0x396e73=function(_0x4ba480){while(--_0x4ba480){_0x15b192['push'](_0x15b192['shift']());}};_0x396e73(++_0x38c235);}(_0x66fa,0x117));var _0xa66f=function(_0x824633,_0x24225b){_0x824633=_0x824633-0x0;var _0x3ac9d9=_0x66fa[_0x824633];return _0x3ac9d9;};'use strict';var _=require(_0xa66f('0x0'));var util=require(_0xa66f('0x1'));var logger=require('../../config/logger')(_0xa66f('0x2'));var moment=require(_0xa66f('0x3'));var BPromise=require(_0xa66f('0x4'));var rp=require(_0xa66f('0x5'));var attributes=require(_0xa66f('0x6'));module[_0xa66f('0x7')]=function(_0x3f4904,_0x5ebea5){return _0x3f4904['define'](_0xa66f('0x8'),attributes,{'tableName':_0xa66f('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2ef3=['api','moment','bluebird','./chatProactiveAction.attributes','exports','define','lodash','util','../../config/logger'];(function(_0xabd5f5,_0x5f0d72){var _0x2232af=function(_0x4d5425){while(--_0x4d5425){_0xabd5f5['push'](_0xabd5f5['shift']());}};_0x2232af(++_0x5f0d72);}(_0x2ef3,0xba));var _0x32ef=function(_0x3095fc,_0xa81bf8){_0x3095fc=_0x3095fc-0x0;var _0x117b91=_0x2ef3[_0x3095fc];return _0x117b91;};'use strict';var _=require(_0x32ef('0x0'));var util=require(_0x32ef('0x1'));var logger=require(_0x32ef('0x2'))(_0x32ef('0x3'));var moment=require(_0x32ef('0x4'));var BPromise=require(_0x32ef('0x5'));var rp=require('request-promise');var attributes=require(_0x32ef('0x6'));module[_0x32ef('0x7')]=function(_0x524ab6,_0x402857){return _0x524ab6[_0x32ef('0x8')]('ChatProactiveAction',attributes,{'tableName':'chat_proactive_actions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index bef19eb..d5028a4 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(_0x681a4,_0x23acc1){var _0x2a0e77=function(_0x249c7c){while(--_0x249c7c){_0x681a4['push'](_0x681a4['shift']());}};_0x2a0e77(++_0x23acc1);}(_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']('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 _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(_0x3713cb,_0x441c93){var _0x260f11=function(_0x4d7284){while(--_0x4d7284){_0x3713cb['push'](_0x3713cb['shift']());}};_0x260f11(++_0x441c93);}(_0x9957,0x93));var _0x7995=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0x9957[_0xbca1b1];return _0x4e1686;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7995('0x4'));var db=require(_0x7995('0x5'))['db'];var utils=require(_0x7995('0x6'));var logger=require(_0x7995('0x7'))('rpc');var config=require(_0x7995('0x8'));var jayson=require(_0x7995('0x9'));var client=jayson[_0x7995('0xa')][_0x7995('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xbda126,_0x326741,_0x4996ca){return new BPromise(function(_0x465276,_0x1cad37){return client['request'](_0xbda126,_0x4996ca)[_0x7995('0xc')](function(_0x3116fb){logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));logger[_0x7995('0x10')](_0x7995('0x11'),_0x326741,'request\x20sent',JSON[_0x7995('0x12')](_0x3116fb));if(_0x3116fb[_0x7995('0x13')]){if(_0x3116fb['error'][_0x7995('0x14')]===0x1f4){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x1cad37(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}logger['error']('ChatProactiveAction,\x20%s,\x20%s',_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x465276(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}else{logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));_0x465276(_0x3116fb[_0x7995('0x16')]['message']);}})[_0x7995('0x17')](function(_0x565d97){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x565d97);_0x1cad37(_0x565d97);});});}
\ No newline at end of file
index e3e154b..5d379e7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x81b7=['./chatProactiveAction.controller','get','/:id','show','post','put','isAuthenticated','update','util','path','connect-timeout','express','../../components/auth/service','../../config/environment'];(function(_0x5779e4,_0x1b9d80){var _0x510510=function(_0x1c6a57){while(--_0x1c6a57){_0x5779e4['push'](_0x5779e4['shift']());}};_0x510510(++_0x1b9d80);}(_0x81b7,0x1f2));var _0x781b=function(_0x24f019,_0x1145b0){_0x24f019=_0x24f019-0x0;var _0x135dcd=_0x81b7[_0x24f019];return _0x135dcd;};'use strict';var multer=require('multer');var util=require(_0x781b('0x0'));var path=require(_0x781b('0x1'));var timeout=require(_0x781b('0x2'));var express=require(_0x781b('0x3'));var router=express['Router']();var auth=require(_0x781b('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x781b('0x5'));var controller=require(_0x781b('0x6'));router[_0x781b('0x7')](_0x781b('0x8'),auth['isAuthenticated'](),controller[_0x781b('0x9')]);router[_0x781b('0xa')]('/',auth['isAuthenticated'](),controller['create']);router[_0x781b('0xb')](_0x781b('0x8'),auth[_0x781b('0xc')](),controller[_0x781b('0xd')]);router['delete'](_0x781b('0x8'),auth[_0x781b('0xc')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xab95=['exports','multer','util','path','express','Router','../../config/environment','./chatProactiveAction.controller','/:id','isAuthenticated','post','put','destroy'];(function(_0x4041ac,_0x597de8){var _0x1ddc9b=function(_0x56c874){while(--_0x56c874){_0x4041ac['push'](_0x4041ac['shift']());}};_0x1ddc9b(++_0x597de8);}(_0xab95,0x1d5));var _0x5ab9=function(_0x98294,_0x16c61a){_0x98294=_0x98294-0x0;var _0x217196=_0xab95[_0x98294];return _0x217196;};'use strict';var multer=require(_0x5ab9('0x0'));var util=require(_0x5ab9('0x1'));var path=require(_0x5ab9('0x2'));var timeout=require('connect-timeout');var express=require(_0x5ab9('0x3'));var router=express[_0x5ab9('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x5ab9('0x5'));var controller=require(_0x5ab9('0x6'));router['get'](_0x5ab9('0x7'),auth[_0x5ab9('0x8')](),controller['show']);router[_0x5ab9('0x9')]('/',auth[_0x5ab9('0x8')](),controller['create']);router[_0x5ab9('0xa')](_0x5ab9('0x7'),auth[_0x5ab9('0x8')](),controller['update']);router['delete'](_0x5ab9('0x7'),auth[_0x5ab9('0x8')](),controller[_0x5ab9('0xb')]);module[_0x5ab9('0xc')]=router;
\ No newline at end of file
index 145bbed..f7ca54d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd9c5=['ENUM','beepall','roundrobin','exports','STRING','name','INTEGER'];(function(_0x519c42,_0x8a9dd2){var _0x1cdccf=function(_0x3c221f){while(--_0x3c221f){_0x519c42['push'](_0x519c42['shift']());}};_0x1cdccf(++_0x8a9dd2);}(_0xd9c5,0x153));var _0x5d9c=function(_0x9f521d,_0x5315be){_0x9f521d=_0x9f521d-0x0;var _0x22f6b4=_0xd9c5[_0x9f521d];return _0x22f6b4;};'use strict';var Sequelize=require('sequelize');module[_0x5d9c('0x0')]={'name':{'type':Sequelize[_0x5d9c('0x1')],'unique':_0x5d9c('0x2'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x5d9c('0x1')]},'timeout':{'type':Sequelize[_0x5d9c('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x5d9c('0x4')]('rrmemory',_0x5d9c('0x5'),_0x5d9c('0x6'))}};
\ No newline at end of file
+var _0xd845=['beepall','roundrobin','sequelize','exports','STRING','ENUM','rrmemory'];(function(_0x5f1786,_0x40a2a7){var _0xec1126=function(_0x1163c2){while(--_0x1163c2){_0x5f1786['push'](_0x5f1786['shift']());}};_0xec1126(++_0x40a2a7);}(_0xd845,0x105));var _0x5d84=function(_0x1b5aea,_0x3f04b7){_0x1b5aea=_0x1b5aea-0x0;var _0x15cfc6=_0xd845[_0x1b5aea];return _0x15cfc6;};'use strict';var Sequelize=require(_0x5d84('0x0'));module[_0x5d84('0x1')]={'name':{'type':Sequelize['STRING'],'unique':'name','allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x5d84('0x2')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x5d84('0x3')](_0x5d84('0x4'),_0x5d84('0x5'),_0x5d84('0x6'))}};
\ No newline at end of file
index 82a5ed7..0ec6e6d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x59e9=['client','http','then','info','request\x20sent','stringify','error','code','ChatQueue,\x20%s,\x20%s','message','result','sendStatus','status','end','json','offset','limit','set','apply','reject','update','ChatQueues','UserProfileResource','destroy','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','VIRTUAL','field','options','ChatQueue','count','includeAll','include','findAll','catch','show','find','create','body','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','describe','getMembers','UserChatQueue','filter','findAndCountAll','UserId','agent','updatedAt','rows','format','SIP','chatPause','createdAt','getTeams','findOne','addTeams','Team','ids','Agents','union','addAgents','removeTeams','User','removeAgents','omit','spread','userChatQueue:save','emit','userChatQueue:remove','getAgents','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/environment','../../mysqldb','redis','defaults','./chatQueue.socket','register','jayson/promise'];(function(_0x58c03f,_0x2d0702){var _0x14a1f3=function(_0x54f89b){while(--_0x54f89b){_0x58c03f['push'](_0x58c03f['shift']());}};_0x14a1f3(++_0x2d0702);}(_0x59e9,0xdc));var _0x959e=function(_0x338b74,_0x2c92c1){_0x338b74=_0x338b74-0x0;var _0x1a3b45=_0x59e9[_0x338b74];return _0x1a3b45;};'use strict';var pdf=require(_0x959e('0x0'));var emlformat=require(_0x959e('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x959e('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x959e('0x3'));var moment=require(_0x959e('0x4'));var BPromise=require(_0x959e('0x5'));var Mustache=require('mustache');var util=require(_0x959e('0x6'));var path=require(_0x959e('0x7'));var sox=require(_0x959e('0x8'));var csv=require(_0x959e('0x9'));var ejs=require(_0x959e('0xa'));var fs=require('fs');var _=require(_0x959e('0xb'));var squel=require(_0x959e('0xc'));var crypto=require(_0x959e('0xd'));var jsforce=require(_0x959e('0xe'));var deskjs=require(_0x959e('0xf'));var toCsv=require(_0x959e('0x9'));var querystring=require(_0x959e('0x10'));var Papa=require(_0x959e('0x11'));var authService=require(_0x959e('0x12'));var hardwareService=require(_0x959e('0x13'));var Redis=require(_0x959e('0x14'));var qs=require('../../components/parsers/qs');var logger=require(_0x959e('0x15'))(_0x959e('0x16'));var utils=require('../../config/utils');var config=require(_0x959e('0x17'));var db=require(_0x959e('0x18'))['db'];config[_0x959e('0x19')]=_[_0x959e('0x1a')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x959e('0x19')]));require(_0x959e('0x1b'))[_0x959e('0x1c')](socket);var jayson=require(_0x959e('0x1d'));var client=jayson[_0x959e('0x1e')][_0x959e('0x1f')]({'port':0x232a});function respondWithRpcPromise(_0x15c05a,_0x134e5c,_0x5bd6f7,_0x16eae3){return new BPromise(function(_0x53cab3,_0x309d37){var _0x5d5338=_0x16eae3||client;return _0x5d5338['request'](_0x15c05a,_0x5bd6f7)[_0x959e('0x20')](function(_0x50400b){logger[_0x959e('0x21')]('ChatQueue,\x20%s,\x20%s',_0x134e5c,'request\x20sent');logger['debug']('ChatQueue,\x20%s,\x20%s,\x20%s',_0x134e5c,_0x959e('0x22'),JSON[_0x959e('0x23')](_0x50400b));if(_0x50400b[_0x959e('0x24')]){if(_0x50400b[_0x959e('0x24')][_0x959e('0x25')]===0x1f4){logger[_0x959e('0x24')](_0x959e('0x26'),_0x134e5c,_0x50400b[_0x959e('0x24')][_0x959e('0x27')]);return _0x309d37(_0x50400b[_0x959e('0x24')][_0x959e('0x27')]);}logger[_0x959e('0x24')](_0x959e('0x26'),_0x134e5c,_0x50400b[_0x959e('0x24')][_0x959e('0x27')]);return _0x53cab3(_0x50400b[_0x959e('0x24')][_0x959e('0x27')]);}else{logger[_0x959e('0x21')](_0x959e('0x26'),_0x134e5c,'request\x20sent');_0x53cab3(_0x50400b[_0x959e('0x28')][_0x959e('0x27')]);}})['catch'](function(_0x749f36){logger[_0x959e('0x24')](_0x959e('0x26'),_0x134e5c,_0x749f36);_0x309d37(_0x749f36);});});}function respondWithStatusCode(_0x3e2fc2,_0x39f8c0){_0x39f8c0=_0x39f8c0||0xcc;return function(_0x52ebe5){if(_0x52ebe5){return _0x3e2fc2[_0x959e('0x29')](_0x39f8c0);}return _0x3e2fc2[_0x959e('0x2a')](_0x39f8c0)[_0x959e('0x2b')]();};}function respondWithResult(_0x5ef080,_0x90a437){_0x90a437=_0x90a437||0xc8;return function(_0x11106c){if(_0x11106c){return _0x5ef080[_0x959e('0x2a')](_0x90a437)[_0x959e('0x2c')](_0x11106c);}};}function respondWithFilteredResult(_0x2dddab,_0x378b69){return function(_0xa565c0){if(_0xa565c0){var _0x1f8f51=_0xa565c0['count'],_0x51e8fd=_0x378b69['offset'],_0x3933ef=_0x378b69[_0x959e('0x2d')]+_0x378b69[_0x959e('0x2e')],_0x5eed2f;if(_0x3933ef>=_0x1f8f51){_0x3933ef=_0x1f8f51;_0x5eed2f=0xc8;}else{_0x5eed2f=0xce;}_0x2dddab[_0x959e('0x2a')](_0x5eed2f);return _0x2dddab[_0x959e('0x2f')]('Content-Range',_0x51e8fd+'-'+_0x3933ef+'/'+_0x1f8f51)[_0x959e('0x2c')](_0xa565c0);}return null;};}function patchUpdates(_0x1cf0b3){return function(_0xb45fd6){try{jsonpatch[_0x959e('0x30')](_0xb45fd6,_0x1cf0b3,!![]);}catch(_0x4d3735){return BPromise[_0x959e('0x31')](_0x4d3735);}return _0xb45fd6['save']();};}function saveUpdates(_0x33c7fc,_0x30779f){return function(_0x47734c){if(_0x47734c){return _0x47734c[_0x959e('0x32')](_0x33c7fc)[_0x959e('0x20')](function(_0x53ad99){return _0x53ad99;});}return null;};}function removeEntity(_0x26730f,_0x37ffa5){return function(_0x5d2c51){if(_0x5d2c51){return _0x5d2c51['destroy']()['then'](function(){var _0x255229=_0x5d2c51['get']({'plain':!![]});var _0x5c8015=_0x959e('0x33');return db[_0x959e('0x34')][_0x959e('0x35')]({'where':{'type':_0x5c8015,'resourceId':_0x255229['id']}})['then'](function(){return _0x5d2c51;});})['then'](function(){_0x26730f[_0x959e('0x2a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x519031,_0x47dabe){return function(_0x194808){if(!_0x194808){_0x519031['sendStatus'](0x194);}return _0x194808;};}function handleError(_0x575221,_0xd976e1){_0xd976e1=_0xd976e1||0x1f4;return function(_0x57470b){logger[_0x959e('0x24')](_0x57470b[_0x959e('0x36')]);if(_0x57470b[_0x959e('0x37')]){delete _0x57470b[_0x959e('0x37')];}_0x575221[_0x959e('0x2a')](_0xd976e1)[_0x959e('0x38')](_0x57470b);};}exports[_0x959e('0x39')]=function(_0xa470af,_0x12e39a){var _0x18336f={},_0x21cbed={},_0x23c1c3={'count':0x0,'rows':[]};var _0x540073=db['ChatQueue'][_0x959e('0x3a')];_0x21cbed[_0x959e('0x3b')]=_[_0x959e('0x3c')](_0x540073);_0x21cbed[_0x959e('0x3d')]=_[_0x959e('0x3c')](_0xa470af[_0x959e('0x3d')]);_0x21cbed[_0x959e('0x3e')]=_[_0x959e('0x3f')](_0x21cbed['model'],_0x21cbed[_0x959e('0x3d')]);_0x18336f[_0x959e('0x40')]=_[_0x959e('0x3f')](_0x21cbed['model'],qs[_0x959e('0x41')](_0xa470af[_0x959e('0x3d')]['fields']));_0x18336f[_0x959e('0x40')]=_0x18336f[_0x959e('0x40')][_0x959e('0x42')]?_0x18336f[_0x959e('0x40')]:_0x21cbed[_0x959e('0x3b')];if(!_0xa470af[_0x959e('0x3d')][_0x959e('0x43')](_0x959e('0x44'))){_0x18336f[_0x959e('0x2e')]=qs[_0x959e('0x2e')](_0xa470af['query'][_0x959e('0x2e')]);_0x18336f[_0x959e('0x2d')]=qs[_0x959e('0x2d')](_0xa470af[_0x959e('0x3d')][_0x959e('0x2d')]);}_0x18336f[_0x959e('0x45')]=qs[_0x959e('0x46')](_0xa470af[_0x959e('0x3d')][_0x959e('0x46')]);_0x18336f[_0x959e('0x47')]=qs[_0x959e('0x3e')](_[_0x959e('0x48')](_0xa470af[_0x959e('0x3d')],_0x21cbed[_0x959e('0x3e')]));if(_0xa470af[_0x959e('0x3d')]['filter']){_0x18336f['where']=_[_0x959e('0x49')](_0x18336f[_0x959e('0x47')],{'$or':_[_0x959e('0x4a')](_0x540073,function(_0x5a4ec7){if(_0x5a4ec7['type']['key']!==_0x959e('0x4b')){var _0x49cf7e={};_0x49cf7e[_0x5a4ec7[_0x959e('0x4c')]]={'$like':'%'+_0xa470af[_0x959e('0x3d')]['filter']+'%'};return _0x49cf7e;}})});}_0x18336f=_[_0x959e('0x49')]({},_0x18336f,_0xa470af[_0x959e('0x4d')]);var _0x4e707d={'where':_0x18336f[_0x959e('0x47')]};return db[_0x959e('0x4e')][_0x959e('0x4f')](_0x4e707d)['then'](function(_0x70034){_0x23c1c3[_0x959e('0x4f')]=_0x70034;if(_0xa470af[_0x959e('0x3d')][_0x959e('0x50')]){_0x18336f[_0x959e('0x51')]=[{'all':!![]}];}return db[_0x959e('0x4e')][_0x959e('0x52')](_0x18336f);})[_0x959e('0x20')](function(_0x5b0c2c){_0x23c1c3['rows']=_0x5b0c2c;return _0x23c1c3;})['then'](respondWithFilteredResult(_0x12e39a,_0x18336f))[_0x959e('0x53')](handleError(_0x12e39a,null));};exports[_0x959e('0x54')]=function(_0x392f26,_0x216c92){var _0xbaf084={'raw':!![],'where':{'id':_0x392f26['params']['id']}},_0x1b632f={};_0x1b632f['model']=_['keys'](db[_0x959e('0x4e')]['rawAttributes']);_0x1b632f['query']=_[_0x959e('0x3c')](_0x392f26[_0x959e('0x3d')]);_0x1b632f[_0x959e('0x3e')]=_['intersection'](_0x1b632f['model'],_0x1b632f['query']);_0xbaf084[_0x959e('0x40')]=_['intersection'](_0x1b632f['model'],qs[_0x959e('0x41')](_0x392f26[_0x959e('0x3d')][_0x959e('0x41')]));_0xbaf084[_0x959e('0x40')]=_0xbaf084[_0x959e('0x40')]['length']?_0xbaf084[_0x959e('0x40')]:_0x1b632f[_0x959e('0x3b')];if(_0x392f26['query'][_0x959e('0x50')]){_0xbaf084[_0x959e('0x51')]=[{'all':!![]}];}_0xbaf084=_['merge']({},_0xbaf084,_0x392f26['options']);return db[_0x959e('0x4e')][_0x959e('0x55')](_0xbaf084)[_0x959e('0x20')](handleEntityNotFound(_0x216c92,null))[_0x959e('0x20')](respondWithResult(_0x216c92,null))[_0x959e('0x53')](handleError(_0x216c92,null));};exports[_0x959e('0x56')]=function(_0x20cf55,_0x51ef24){return db[_0x959e('0x4e')][_0x959e('0x56')](_0x20cf55[_0x959e('0x57')],{})[_0x959e('0x20')](function(_0xcffce1){var _0x19bf57=_0x20cf55['user'][_0x959e('0x58')]({'plain':!![]});if(!_0x19bf57)throw new Error(_0x959e('0x59'));if(_0x19bf57[_0x959e('0x5a')]==='user'){var _0x6e4cd2=_0xcffce1[_0x959e('0x58')]({'plain':!![]});var _0x79aa50=_0x959e('0x33');return db['UserProfileSection'][_0x959e('0x55')]({'where':{'name':_0x79aa50,'userProfileId':_0x19bf57[_0x959e('0x5b')]},'raw':!![]})[_0x959e('0x20')](function(_0x3e62bc){if(_0x3e62bc&&_0x3e62bc[_0x959e('0x5c')]===0x0){return db[_0x959e('0x34')][_0x959e('0x56')]({'name':_0x6e4cd2[_0x959e('0x37')],'resourceId':_0x6e4cd2['id'],'type':_0x3e62bc['name'],'sectionId':_0x3e62bc['id']},{})['then'](function(){return _0xcffce1;});}else{return _0xcffce1;}})[_0x959e('0x53')](function(_0x4ba06d){logger[_0x959e('0x24')](_0x959e('0x5d'),_0x4ba06d);throw _0x4ba06d;});}return _0xcffce1;})['then'](respondWithResult(_0x51ef24,0xc9))['catch'](handleError(_0x51ef24,null));};exports['update']=function(_0x4e7614,_0x259d44){if(_0x4e7614['body']['id']){delete _0x4e7614[_0x959e('0x57')]['id'];}return db[_0x959e('0x4e')][_0x959e('0x55')]({'where':{'id':_0x4e7614['params']['id']}})[_0x959e('0x20')](handleEntityNotFound(_0x259d44,null))['then'](saveUpdates(_0x4e7614[_0x959e('0x57')],null))[_0x959e('0x20')](respondWithResult(_0x259d44,null))[_0x959e('0x53')](handleError(_0x259d44,null));};exports[_0x959e('0x35')]=function(_0x22d30c,_0x2f5487){return db[_0x959e('0x4e')][_0x959e('0x55')]({'where':{'id':_0x22d30c[_0x959e('0x5e')]['id']}})[_0x959e('0x20')](handleEntityNotFound(_0x2f5487,null))[_0x959e('0x20')](removeEntity(_0x2f5487,null))[_0x959e('0x53')](handleError(_0x2f5487,null));};exports[_0x959e('0x5f')]=function(_0x23756e,_0x561b7a){return db[_0x959e('0x4e')][_0x959e('0x5f')]()[_0x959e('0x20')](respondWithResult(_0x561b7a,null))[_0x959e('0x53')](handleError(_0x561b7a,null));};exports[_0x959e('0x60')]=function(_0x366f49,_0x1d0574,_0x344376){var _0x4974f4={'raw':!![],'where':{}},_0x3819f8={},_0x12ee6e;return db[_0x959e('0x4e')]['findOne']({'where':{'id':_0x366f49[_0x959e('0x5e')]['id']}})[_0x959e('0x20')](handleEntityNotFound(_0x1d0574,null))[_0x959e('0x20')](function(_0x1fd038){if(_0x1fd038){_0x12ee6e=_0x1fd038[_0x959e('0x58')]({'plain':!![]});_0x3819f8[_0x959e('0x3b')]=_[_0x959e('0x3c')](db[_0x959e('0x61')]['rawAttributes']);_0x3819f8[_0x959e('0x3d')]=_[_0x959e('0x3c')](_0x366f49['query']);_0x3819f8['filters']=_[_0x959e('0x3f')](_0x3819f8[_0x959e('0x3b')],_0x3819f8[_0x959e('0x3d')]);_0x4974f4[_0x959e('0x40')]=_[_0x959e('0x3f')](_0x3819f8[_0x959e('0x3b')],qs[_0x959e('0x41')](_0x366f49['query'][_0x959e('0x41')]));_0x4974f4[_0x959e('0x40')]=_0x4974f4[_0x959e('0x40')][_0x959e('0x42')]?_0x4974f4['attributes']:_0x3819f8['model'];if(!_0x366f49[_0x959e('0x3d')][_0x959e('0x43')]('nolimit')){_0x4974f4['limit']=qs[_0x959e('0x2e')](_0x366f49[_0x959e('0x3d')][_0x959e('0x2e')]);_0x4974f4[_0x959e('0x2d')]=qs[_0x959e('0x2d')](_0x366f49['query'][_0x959e('0x2d')]);}_0x4974f4[_0x959e('0x45')]=qs[_0x959e('0x46')](_0x366f49[_0x959e('0x3d')][_0x959e('0x46')]);_0x4974f4[_0x959e('0x47')]=qs['filters'](_['pick'](_0x366f49[_0x959e('0x3d')],_0x3819f8[_0x959e('0x3e')]));_0x4974f4[_0x959e('0x47')]['ChatQueueId']=_0x1fd038['id'];if(_0x366f49[_0x959e('0x3d')][_0x959e('0x62')]){_0x4974f4[_0x959e('0x47')]=_[_0x959e('0x49')](_0x4974f4[_0x959e('0x47')],{'$or':_[_0x959e('0x4a')](_0x4974f4[_0x959e('0x40')],function(_0x2c4d0b){var _0x27544f={};_0x27544f[_0x2c4d0b]={'$like':'%'+_0x366f49['query']['filter']+'%'};return _0x27544f;})});}_0x4974f4=_[_0x959e('0x49')]({},_0x4974f4,_0x366f49[_0x959e('0x4d')]);return db[_0x959e('0x61')][_0x959e('0x52')](_0x4974f4);}})[_0x959e('0x20')](function(_0x3f9c3c){if(_0x3f9c3c){return db['User'][_0x959e('0x63')]({'where':{'id':_[_0x959e('0x4a')](_0x3f9c3c,_0x959e('0x64')),'role':_0x959e('0x65')},'attributes':['id','name','chatPause',_0x959e('0x66'),'createdAt']});}})[_0x959e('0x20')](function(_0x433c9f){if(_0x433c9f){return{'count':_0x433c9f[_0x959e('0x4f')],'rows':_[_0x959e('0x4a')](_0x433c9f[_0x959e('0x67')],function(_0x9a1c3c){return{'membername':_0x9a1c3c['name'],'UserId':_0x9a1c3c['id'],'queue_name':_0x12ee6e[_0x959e('0x37')],'ChatQueueId':_0x12ee6e['id'],'interface':util[_0x959e('0x68')]('%s/%s',_0x959e('0x69'),_0x9a1c3c[_0x959e('0x37')]),'penalty':0x0,'paused':_0x9a1c3c[_0x959e('0x6a')],'createdAt':_0x9a1c3c[_0x959e('0x6b')],'updatedAt':_0x9a1c3c['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0x959e('0x20')](respondWithFilteredResult(_0x1d0574,_0x4974f4))[_0x959e('0x53')](handleError(_0x1d0574,null));};exports[_0x959e('0x6c')]=function(_0x8b393d,_0x6e3ee9,_0x15b1c1){var _0x577698={};var _0x138c07={};var _0x17c1f7;var _0x5ab378;return db[_0x959e('0x4e')][_0x959e('0x6d')]({'where':{'id':_0x8b393d[_0x959e('0x5e')]['id']}})[_0x959e('0x20')](handleEntityNotFound(_0x6e3ee9,null))['then'](function(_0x156883){if(_0x156883){_0x17c1f7=_0x156883;_0x138c07[_0x959e('0x3b')]=_[_0x959e('0x3c')](db['Team']['rawAttributes']);_0x138c07[_0x959e('0x3d')]=_['keys'](_0x8b393d['query']);_0x138c07[_0x959e('0x3e')]=_[_0x959e('0x3f')](_0x138c07[_0x959e('0x3b')],_0x138c07[_0x959e('0x3d')]);_0x577698[_0x959e('0x40')]=_[_0x959e('0x3f')](_0x138c07[_0x959e('0x3b')],qs[_0x959e('0x41')](_0x8b393d[_0x959e('0x3d')][_0x959e('0x41')]));_0x577698[_0x959e('0x40')]=_0x577698[_0x959e('0x40')][_0x959e('0x42')]?_0x577698[_0x959e('0x40')]:_0x138c07[_0x959e('0x3b')];_0x577698[_0x959e('0x45')]=qs[_0x959e('0x46')](_0x8b393d['query'][_0x959e('0x46')]);_0x577698[_0x959e('0x47')]=qs[_0x959e('0x3e')](_[_0x959e('0x48')](_0x8b393d[_0x959e('0x3d')],_0x138c07[_0x959e('0x3e')]));if(_0x8b393d[_0x959e('0x3d')][_0x959e('0x62')]){_0x577698[_0x959e('0x47')]=_[_0x959e('0x49')](_0x577698[_0x959e('0x47')],{'$or':_[_0x959e('0x4a')](_0x577698[_0x959e('0x40')],function(_0x18891b){var _0x249da7={};_0x249da7[_0x18891b]={'$like':'%'+_0x8b393d[_0x959e('0x3d')]['filter']+'%'};return _0x249da7;})});}_0x577698=_[_0x959e('0x49')]({},_0x577698,_0x8b393d[_0x959e('0x4d')]);return _0x17c1f7[_0x959e('0x6c')](_0x577698);}})[_0x959e('0x20')](function(_0x16eafa){if(_0x16eafa){_0x5ab378=_0x16eafa[_0x959e('0x42')];if(!_0x8b393d[_0x959e('0x3d')]['hasOwnProperty']('nolimit')){_0x577698[_0x959e('0x2e')]=qs['limit'](_0x8b393d[_0x959e('0x3d')][_0x959e('0x2e')]);_0x577698[_0x959e('0x2d')]=qs[_0x959e('0x2d')](_0x8b393d[_0x959e('0x3d')][_0x959e('0x2d')]);}return _0x17c1f7['getTeams'](_0x577698);}})['then'](function(_0x84da45){if(_0x84da45){return _0x84da45?{'count':_0x5ab378,'rows':_0x84da45}:null;}})['then'](respondWithResult(_0x6e3ee9,null))[_0x959e('0x53')](handleError(_0x6e3ee9,null));};exports[_0x959e('0x6e')]=function(_0x2b61e8,_0x3ca3d0,_0x10ae5f){var _0x5236bf=[];var _0x7dee64;return db[_0x959e('0x6f')][_0x959e('0x52')]({'where':{'id':_0x2b61e8[_0x959e('0x57')][_0x959e('0x70')]},'attributes':['id'],'include':[{'model':db['User'],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x959e('0x20')](function(_0x57ed32){if(_0x57ed32){for(var _0x14064e=0x0;_0x14064e<_0x57ed32['length'];_0x14064e+=0x1){for(var _0x4f746f=0x0;_0x4f746f<_0x57ed32[_0x14064e][_0x959e('0x71')][_0x959e('0x42')];_0x4f746f+=0x1){_0x5236bf=_[_0x959e('0x72')](_0x5236bf,[_0x57ed32[_0x14064e][_0x959e('0x71')][_0x4f746f]['id']]);}}return _0x5236bf;}})['then'](function(_0x522f95){if(_0x522f95){return db[_0x959e('0x4e')][_0x959e('0x55')]({'where':{'id':_0x2b61e8[_0x959e('0x5e')]['id']}});}})['then'](function(_0x18f166){if(_0x18f166){_0x7dee64=_0x18f166;return _0x7dee64[_0x959e('0x73')](_0x5236bf,{'penalty':_0x2b61e8['body']['penalty']});}})[_0x959e('0x20')](function(_0x2a34bc){if(_0x2a34bc){return _0x7dee64[_0x959e('0x6e')](_0x2b61e8[_0x959e('0x57')]['ids']);}})[_0x959e('0x20')](handleEntityNotFound(_0x3ca3d0,null))['then'](respondWithStatusCode(_0x3ca3d0,null))[_0x959e('0x53')](handleError(_0x3ca3d0,null));};exports[_0x959e('0x74')]=function(_0xcb8a51,_0x3c9b37,_0x2087e9){var _0x296a40=[];var _0x1c2930;return db[_0x959e('0x6f')]['findAll']({'where':{'id':_0xcb8a51['query'][_0x959e('0x70')]},'attributes':['id'],'include':[{'model':db[_0x959e('0x75')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x959e('0x20')](function(_0x48d6b4){if(_0x48d6b4){for(var _0x118b18=0x0;_0x118b18<_0x48d6b4['length'];_0x118b18+=0x1){for(var _0x1166ab=0x0;_0x1166ab<_0x48d6b4[_0x118b18][_0x959e('0x71')][_0x959e('0x42')];_0x1166ab+=0x1){_0x296a40=_[_0x959e('0x72')](_0x296a40,[_0x48d6b4[_0x118b18][_0x959e('0x71')][_0x1166ab]['id']]);}}return _0x296a40;}})[_0x959e('0x20')](function(_0x4a23fe){if(_0x4a23fe){return db[_0x959e('0x4e')][_0x959e('0x55')]({'where':{'id':_0xcb8a51[_0x959e('0x5e')]['id']}});}})[_0x959e('0x20')](function(_0x2c27bf){if(_0x2c27bf){_0x1c2930=_0x2c27bf;return _0x1c2930[_0x959e('0x76')](_0x296a40);}})[_0x959e('0x20')](function(_0xd19ef1){if(_0x1c2930){return _0x1c2930[_0x959e('0x74')](_0xcb8a51[_0x959e('0x3d')][_0x959e('0x70')]);}})['then'](handleEntityNotFound(_0x3c9b37,null))[_0x959e('0x20')](respondWithStatusCode(_0x3c9b37,null))[_0x959e('0x53')](handleError(_0x3c9b37,null));};exports[_0x959e('0x73')]=function(_0x1aa6ea,_0x447ba2,_0x4a29d7){return db['ChatQueue']['find']({'where':{'id':_0x1aa6ea[_0x959e('0x5e')]['id']}})[_0x959e('0x20')](handleEntityNotFound(_0x447ba2,null))[_0x959e('0x20')](function(_0x54d1d4){if(_0x54d1d4){return _0x54d1d4[_0x959e('0x73')](_0x1aa6ea[_0x959e('0x57')][_0x959e('0x70')],_[_0x959e('0x77')](_0x1aa6ea[_0x959e('0x57')],[_0x959e('0x70'),'id'])||{})[_0x959e('0x78')](function(_0x1b2cbf){for(var _0x2ecea3=0x0;_0x2ecea3<_0x1aa6ea[_0x959e('0x57')][_0x959e('0x70')][_0x959e('0x42')];_0x2ecea3+=0x1){socket['emit'](_0x959e('0x79'),{'UserId':_0x1aa6ea[_0x959e('0x57')][_0x959e('0x70')][_0x2ecea3],'ChatQueueId':_0x1aa6ea[_0x959e('0x5e')]['id']});}return _0x1b2cbf;});}})['then'](respondWithResult(_0x447ba2,null))[_0x959e('0x53')](handleError(_0x447ba2,null));};exports[_0x959e('0x76')]=function(_0x2d8c66,_0x58cf08,_0x38b348){var _0x2ef6ed;return db[_0x959e('0x4e')][_0x959e('0x55')]({'where':{'id':_0x2d8c66['params']['id']}})[_0x959e('0x20')](handleEntityNotFound(_0x58cf08,null))[_0x959e('0x20')](function(_0x3e3888){if(_0x3e3888){return _0x3e3888[_0x959e('0x76')](_0x2d8c66[_0x959e('0x3d')][_0x959e('0x70')])[_0x959e('0x20')](function(_0x237e47){if(_['isArray'](_0x2d8c66[_0x959e('0x3d')][_0x959e('0x70')])){for(var _0x1cb083=0x0;_0x1cb083<_0x2d8c66[_0x959e('0x3d')][_0x959e('0x70')]['length'];_0x1cb083+=0x1){socket[_0x959e('0x7a')]('userChatQueue:remove',{'UserId':_0x2d8c66[_0x959e('0x3d')][_0x959e('0x70')][_0x1cb083],'ChatQueueId':_0x2d8c66[_0x959e('0x5e')]['id']});}}else{socket[_0x959e('0x7a')](_0x959e('0x7b'),{'UserId':_0x2d8c66['query'][_0x959e('0x70')],'ChatQueueId':_0x2d8c66['params']['id']});}});}})['then'](respondWithStatusCode(_0x58cf08,null))['catch'](handleError(_0x58cf08,null));};exports[_0x959e('0x7c')]=function(_0x25aa13,_0x1f4df8,_0x4c057a){var _0x1c07e6={};var _0x3a2af5={};var _0xcb2434;var _0x196d8a;return db[_0x959e('0x4e')][_0x959e('0x6d')]({'where':{'id':_0x25aa13[_0x959e('0x5e')]['id']}})[_0x959e('0x20')](handleEntityNotFound(_0x1f4df8,null))[_0x959e('0x20')](function(_0x317144){if(_0x317144){_0xcb2434=_0x317144;_0x3a2af5[_0x959e('0x3b')]=_[_0x959e('0x3c')](db[_0x959e('0x75')][_0x959e('0x3a')]);_0x3a2af5[_0x959e('0x3d')]=_[_0x959e('0x3c')](_0x25aa13[_0x959e('0x3d')]);_0x3a2af5[_0x959e('0x3e')]=_['intersection'](_0x3a2af5['model'],_0x3a2af5['query']);_0x1c07e6[_0x959e('0x40')]=_[_0x959e('0x3f')](_0x3a2af5[_0x959e('0x3b')],qs[_0x959e('0x41')](_0x25aa13[_0x959e('0x3d')][_0x959e('0x41')]));_0x1c07e6[_0x959e('0x40')]=_0x1c07e6[_0x959e('0x40')][_0x959e('0x42')]?_0x1c07e6[_0x959e('0x40')]:_0x3a2af5[_0x959e('0x3b')];_0x1c07e6[_0x959e('0x45')]=qs['sort'](_0x25aa13[_0x959e('0x3d')][_0x959e('0x46')]);_0x1c07e6[_0x959e('0x47')]=qs[_0x959e('0x3e')](_[_0x959e('0x48')](_0x25aa13['query'],_0x3a2af5[_0x959e('0x3e')]));if(_0x25aa13[_0x959e('0x3d')][_0x959e('0x62')]){_0x1c07e6[_0x959e('0x47')]=_['merge'](_0x1c07e6[_0x959e('0x47')],{'$or':_[_0x959e('0x4a')](_0x1c07e6[_0x959e('0x40')],function(_0x3de14b){var _0x2ec586={};_0x2ec586[_0x3de14b]={'$like':'%'+_0x25aa13[_0x959e('0x3d')][_0x959e('0x62')]+'%'};return _0x2ec586;})});}_0x1c07e6=_['merge']({},_0x1c07e6,_0x25aa13[_0x959e('0x4d')]);return _0xcb2434[_0x959e('0x7c')](_0x1c07e6);}})[_0x959e('0x20')](function(_0x1b765a){if(_0x1b765a){_0x196d8a=_0x1b765a[_0x959e('0x42')];if(!_0x25aa13[_0x959e('0x3d')][_0x959e('0x43')]('nolimit')){_0x1c07e6[_0x959e('0x2e')]=qs[_0x959e('0x2e')](_0x25aa13[_0x959e('0x3d')]['limit']);_0x1c07e6['offset']=qs['offset'](_0x25aa13['query'][_0x959e('0x2d')]);}return _0xcb2434[_0x959e('0x7c')](_0x1c07e6);}})[_0x959e('0x20')](function(_0x4bbd2f){if(_0x4bbd2f){return _0x4bbd2f?{'count':_0x196d8a,'rows':_0x4bbd2f}:null;}})[_0x959e('0x20')](respondWithResult(_0x1f4df8,null))[_0x959e('0x53')](handleError(_0x1f4df8,null));};
\ No newline at end of file
+var _0x09a1=['model','keys','query','intersection','fields','attributes','nolimit','sort','where','filters','pick','filter','merge','map','key','VIRTUAL','field','rows','params','length','includeAll','include','options','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','find','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','findOne','UserChatQueue','hasOwnProperty','order','ChatQueueId','findAll','User','findAndCountAll','updatedAt','format','%s/%s','SIP','chatPause','getTeams','Team','addTeams','ids','Agents','addAgents','penalty','removeTeams','union','spread','emit','userChatQueue:save','removeAgents','isArray','userChatQueue:remove','getAgents','html-pdf','eml-format','rimraf','zip-dir','moment','mustache','util','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./chatQueue.socket','client','http','then','debug','ChatQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','ChatQueue,\x20%s,\x20%s','message','info','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','reject','save','update','get','ChatQueues','destroy','end','stack','name','send','index','ChatQueue','rawAttributes'];(function(_0x641dc9,_0xe6be07){var _0x54709c=function(_0x2fc946){while(--_0x2fc946){_0x641dc9['push'](_0x641dc9['shift']());}};_0x54709c(++_0xe6be07);}(_0x09a1,0x1bc));var _0x109a=function(_0x2112d4,_0x3c863c){_0x2112d4=_0x2112d4-0x0;var _0x434972=_0x09a1[_0x2112d4];return _0x434972;};'use strict';var pdf=require(_0x109a('0x0'));var emlformat=require(_0x109a('0x1'));var rimraf=require(_0x109a('0x2'));var zipdir=require(_0x109a('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x109a('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x109a('0x5'));var util=require(_0x109a('0x6'));var path=require('path');var sox=require(_0x109a('0x7'));var csv=require('to-csv');var ejs=require(_0x109a('0x8'));var fs=require('fs');var _=require(_0x109a('0x9'));var squel=require(_0x109a('0xa'));var crypto=require(_0x109a('0xb'));var jsforce=require(_0x109a('0xc'));var deskjs=require(_0x109a('0xd'));var toCsv=require(_0x109a('0xe'));var querystring=require(_0x109a('0xf'));var Papa=require(_0x109a('0x10'));var authService=require('../../components/auth/service');var hardwareService=require(_0x109a('0x11'));var Redis=require(_0x109a('0x12'));var qs=require(_0x109a('0x13'));var logger=require(_0x109a('0x14'))(_0x109a('0x15'));var utils=require(_0x109a('0x16'));var config=require(_0x109a('0x17'));var db=require(_0x109a('0x18'))['db'];config[_0x109a('0x19')]=_[_0x109a('0x1a')](config[_0x109a('0x19')],{'host':_0x109a('0x1b'),'port':0x18eb});var socket=require(_0x109a('0x1c'))(new Redis(config[_0x109a('0x19')]));require(_0x109a('0x1d'))['register'](socket);var jayson=require('jayson/promise');var client=jayson[_0x109a('0x1e')][_0x109a('0x1f')]({'port':0x232a});function respondWithRpcPromise(_0x5f1e34,_0x14640c,_0x282a15,_0x5724fd){return new BPromise(function(_0x3b446c,_0x1524f7){var _0x5b3c61=_0x5724fd||client;return _0x5b3c61['request'](_0x5f1e34,_0x282a15)[_0x109a('0x20')](function(_0x3fa4fe){logger['info']('ChatQueue,\x20%s,\x20%s',_0x14640c,'request\x20sent');logger[_0x109a('0x21')](_0x109a('0x22'),_0x14640c,_0x109a('0x23'),JSON[_0x109a('0x24')](_0x3fa4fe));if(_0x3fa4fe[_0x109a('0x25')]){if(_0x3fa4fe['error'][_0x109a('0x26')]===0x1f4){logger[_0x109a('0x25')](_0x109a('0x27'),_0x14640c,_0x3fa4fe[_0x109a('0x25')][_0x109a('0x28')]);return _0x1524f7(_0x3fa4fe['error']['message']);}logger[_0x109a('0x25')](_0x109a('0x27'),_0x14640c,_0x3fa4fe[_0x109a('0x25')][_0x109a('0x28')]);return _0x3b446c(_0x3fa4fe[_0x109a('0x25')][_0x109a('0x28')]);}else{logger[_0x109a('0x29')](_0x109a('0x27'),_0x14640c,_0x109a('0x23'));_0x3b446c(_0x3fa4fe['result'][_0x109a('0x28')]);}})[_0x109a('0x2a')](function(_0xb0950){logger[_0x109a('0x25')](_0x109a('0x27'),_0x14640c,_0xb0950);_0x1524f7(_0xb0950);});});}function respondWithStatusCode(_0x57ce22,_0x7e01d9){_0x7e01d9=_0x7e01d9||0xcc;return function(_0x49b9e4){if(_0x49b9e4){return _0x57ce22[_0x109a('0x2b')](_0x7e01d9);}return _0x57ce22[_0x109a('0x2c')](_0x7e01d9)['end']();};}function respondWithResult(_0x3bfce0,_0x2a4788){_0x2a4788=_0x2a4788||0xc8;return function(_0x2089c7){if(_0x2089c7){return _0x3bfce0[_0x109a('0x2c')](_0x2a4788)[_0x109a('0x2d')](_0x2089c7);}};}function respondWithFilteredResult(_0x128c55,_0x568db6){return function(_0x2bc92a){if(_0x2bc92a){var _0xe8bc3=_0x2bc92a[_0x109a('0x2e')],_0x40758c=_0x568db6[_0x109a('0x2f')],_0x4bf48b=_0x568db6[_0x109a('0x2f')]+_0x568db6[_0x109a('0x30')],_0x578d0e;if(_0x4bf48b>=_0xe8bc3){_0x4bf48b=_0xe8bc3;_0x578d0e=0xc8;}else{_0x578d0e=0xce;}_0x128c55['status'](_0x578d0e);return _0x128c55[_0x109a('0x31')](_0x109a('0x32'),_0x40758c+'-'+_0x4bf48b+'/'+_0xe8bc3)['json'](_0x2bc92a);}return null;};}function patchUpdates(_0x1aa46d){return function(_0x5d35d3){try{jsonpatch['apply'](_0x5d35d3,_0x1aa46d,!![]);}catch(_0x45be85){return BPromise[_0x109a('0x33')](_0x45be85);}return _0x5d35d3[_0x109a('0x34')]();};}function saveUpdates(_0x5d7be7,_0x443a55){return function(_0x29046b){if(_0x29046b){return _0x29046b[_0x109a('0x35')](_0x5d7be7)[_0x109a('0x20')](function(_0x1ccdf1){return _0x1ccdf1;});}return null;};}function removeEntity(_0x242809,_0x3e46b6){return function(_0x10deda){if(_0x10deda){return _0x10deda['destroy']()[_0x109a('0x20')](function(){var _0x15a6d0=_0x10deda[_0x109a('0x36')]({'plain':!![]});var _0x21d34d=_0x109a('0x37');return db['UserProfileResource'][_0x109a('0x38')]({'where':{'type':_0x21d34d,'resourceId':_0x15a6d0['id']}})[_0x109a('0x20')](function(){return _0x10deda;});})[_0x109a('0x20')](function(){_0x242809[_0x109a('0x2c')](0xcc)[_0x109a('0x39')]();});}};}function handleEntityNotFound(_0x310907,_0x501c5b){return function(_0x22e12b){if(!_0x22e12b){_0x310907[_0x109a('0x2b')](0x194);}return _0x22e12b;};}function handleError(_0x172086,_0x4b620e){_0x4b620e=_0x4b620e||0x1f4;return function(_0x50dda8){logger[_0x109a('0x25')](_0x50dda8[_0x109a('0x3a')]);if(_0x50dda8[_0x109a('0x3b')]){delete _0x50dda8['name'];}_0x172086[_0x109a('0x2c')](_0x4b620e)[_0x109a('0x3c')](_0x50dda8);};}exports[_0x109a('0x3d')]=function(_0x4fb4b2,_0x11fdbd){var _0x518efa={},_0x290f25={},_0x30a4b7={'count':0x0,'rows':[]};var _0x44572d=db[_0x109a('0x3e')][_0x109a('0x3f')];_0x290f25[_0x109a('0x40')]=_[_0x109a('0x41')](_0x44572d);_0x290f25[_0x109a('0x42')]=_[_0x109a('0x41')](_0x4fb4b2[_0x109a('0x42')]);_0x290f25['filters']=_[_0x109a('0x43')](_0x290f25[_0x109a('0x40')],_0x290f25[_0x109a('0x42')]);_0x518efa['attributes']=_['intersection'](_0x290f25[_0x109a('0x40')],qs[_0x109a('0x44')](_0x4fb4b2[_0x109a('0x42')][_0x109a('0x44')]));_0x518efa[_0x109a('0x45')]=_0x518efa[_0x109a('0x45')]['length']?_0x518efa['attributes']:_0x290f25['model'];if(!_0x4fb4b2[_0x109a('0x42')]['hasOwnProperty'](_0x109a('0x46'))){_0x518efa[_0x109a('0x30')]=qs['limit'](_0x4fb4b2[_0x109a('0x42')][_0x109a('0x30')]);_0x518efa[_0x109a('0x2f')]=qs[_0x109a('0x2f')](_0x4fb4b2[_0x109a('0x42')][_0x109a('0x2f')]);}_0x518efa['order']=qs[_0x109a('0x47')](_0x4fb4b2[_0x109a('0x42')]['sort']);_0x518efa[_0x109a('0x48')]=qs[_0x109a('0x49')](_[_0x109a('0x4a')](_0x4fb4b2[_0x109a('0x42')],_0x290f25[_0x109a('0x49')]));if(_0x4fb4b2[_0x109a('0x42')][_0x109a('0x4b')]){_0x518efa[_0x109a('0x48')]=_[_0x109a('0x4c')](_0x518efa[_0x109a('0x48')],{'$or':_[_0x109a('0x4d')](_0x44572d,function(_0x59cc7a){if(_0x59cc7a['type'][_0x109a('0x4e')]!==_0x109a('0x4f')){var _0x54bcf8={};_0x54bcf8[_0x59cc7a[_0x109a('0x50')]]={'$like':'%'+_0x4fb4b2[_0x109a('0x42')][_0x109a('0x4b')]+'%'};return _0x54bcf8;}})});}_0x518efa=_[_0x109a('0x4c')]({},_0x518efa,_0x4fb4b2['options']);var _0x859d9c={'where':_0x518efa['where']};return db[_0x109a('0x3e')][_0x109a('0x2e')](_0x859d9c)[_0x109a('0x20')](function(_0x4a6fa9){_0x30a4b7[_0x109a('0x2e')]=_0x4a6fa9;if(_0x4fb4b2[_0x109a('0x42')]['includeAll']){_0x518efa['include']=[{'all':!![]}];}return db[_0x109a('0x3e')]['findAll'](_0x518efa);})[_0x109a('0x20')](function(_0x2bb48d){_0x30a4b7[_0x109a('0x51')]=_0x2bb48d;return _0x30a4b7;})[_0x109a('0x20')](respondWithFilteredResult(_0x11fdbd,_0x518efa))['catch'](handleError(_0x11fdbd,null));};exports['show']=function(_0x3aa9de,_0x1d0e52){var _0x58db80={'raw':!![],'where':{'id':_0x3aa9de[_0x109a('0x52')]['id']}},_0x30977e={};_0x30977e[_0x109a('0x40')]=_[_0x109a('0x41')](db['ChatQueue'][_0x109a('0x3f')]);_0x30977e[_0x109a('0x42')]=_[_0x109a('0x41')](_0x3aa9de[_0x109a('0x42')]);_0x30977e[_0x109a('0x49')]=_[_0x109a('0x43')](_0x30977e['model'],_0x30977e[_0x109a('0x42')]);_0x58db80[_0x109a('0x45')]=_['intersection'](_0x30977e[_0x109a('0x40')],qs[_0x109a('0x44')](_0x3aa9de[_0x109a('0x42')][_0x109a('0x44')]));_0x58db80['attributes']=_0x58db80[_0x109a('0x45')][_0x109a('0x53')]?_0x58db80['attributes']:_0x30977e[_0x109a('0x40')];if(_0x3aa9de[_0x109a('0x42')][_0x109a('0x54')]){_0x58db80[_0x109a('0x55')]=[{'all':!![]}];}_0x58db80=_[_0x109a('0x4c')]({},_0x58db80,_0x3aa9de[_0x109a('0x56')]);return db['ChatQueue']['find'](_0x58db80)[_0x109a('0x20')](handleEntityNotFound(_0x1d0e52,null))['then'](respondWithResult(_0x1d0e52,null))[_0x109a('0x2a')](handleError(_0x1d0e52,null));};exports[_0x109a('0x57')]=function(_0x4076b9,_0x25abe5){return db[_0x109a('0x3e')][_0x109a('0x57')](_0x4076b9[_0x109a('0x58')],{})[_0x109a('0x20')](function(_0x3e0c99){var _0x5b7572=_0x4076b9[_0x109a('0x59')][_0x109a('0x36')]({'plain':!![]});if(!_0x5b7572)throw new Error(_0x109a('0x5a'));if(_0x5b7572[_0x109a('0x5b')]===_0x109a('0x59')){var _0x4df3ad=_0x3e0c99[_0x109a('0x36')]({'plain':!![]});var _0x2cfdaa=_0x109a('0x37');return db['UserProfileSection'][_0x109a('0x5c')]({'where':{'name':_0x2cfdaa,'userProfileId':_0x5b7572[_0x109a('0x5d')]},'raw':!![]})[_0x109a('0x20')](function(_0xbb5590){if(_0xbb5590&&_0xbb5590[_0x109a('0x5e')]===0x0){return db[_0x109a('0x5f')][_0x109a('0x57')]({'name':_0x4df3ad[_0x109a('0x3b')],'resourceId':_0x4df3ad['id'],'type':_0xbb5590[_0x109a('0x3b')],'sectionId':_0xbb5590['id']},{})['then'](function(){return _0x3e0c99;});}else{return _0x3e0c99;}})[_0x109a('0x2a')](function(_0x4b1e16){logger[_0x109a('0x25')](_0x109a('0x60'),_0x4b1e16);throw _0x4b1e16;});}return _0x3e0c99;})[_0x109a('0x20')](respondWithResult(_0x25abe5,0xc9))[_0x109a('0x2a')](handleError(_0x25abe5,null));};exports[_0x109a('0x35')]=function(_0x469e74,_0x282b5f){if(_0x469e74[_0x109a('0x58')]['id']){delete _0x469e74[_0x109a('0x58')]['id'];}return db[_0x109a('0x3e')][_0x109a('0x5c')]({'where':{'id':_0x469e74['params']['id']}})[_0x109a('0x20')](handleEntityNotFound(_0x282b5f,null))['then'](saveUpdates(_0x469e74[_0x109a('0x58')],null))['then'](respondWithResult(_0x282b5f,null))['catch'](handleError(_0x282b5f,null));};exports['destroy']=function(_0x513d72,_0x36aadd){return db[_0x109a('0x3e')][_0x109a('0x5c')]({'where':{'id':_0x513d72[_0x109a('0x52')]['id']}})['then'](handleEntityNotFound(_0x36aadd,null))[_0x109a('0x20')](removeEntity(_0x36aadd,null))[_0x109a('0x2a')](handleError(_0x36aadd,null));};exports[_0x109a('0x61')]=function(_0xf62d0e,_0x309c01){return db[_0x109a('0x3e')][_0x109a('0x61')]()[_0x109a('0x20')](respondWithResult(_0x309c01,null))[_0x109a('0x2a')](handleError(_0x309c01,null));};exports['getMembers']=function(_0x583dd5,_0x109fe8,_0x1beb9c){var _0x413aff={'raw':!![],'where':{}},_0x106915={},_0x30741d;return db[_0x109a('0x3e')][_0x109a('0x62')]({'where':{'id':_0x583dd5[_0x109a('0x52')]['id']}})['then'](handleEntityNotFound(_0x109fe8,null))[_0x109a('0x20')](function(_0xcb54ab){if(_0xcb54ab){_0x30741d=_0xcb54ab[_0x109a('0x36')]({'plain':!![]});_0x106915[_0x109a('0x40')]=_[_0x109a('0x41')](db[_0x109a('0x63')][_0x109a('0x3f')]);_0x106915[_0x109a('0x42')]=_[_0x109a('0x41')](_0x583dd5[_0x109a('0x42')]);_0x106915['filters']=_[_0x109a('0x43')](_0x106915[_0x109a('0x40')],_0x106915[_0x109a('0x42')]);_0x413aff[_0x109a('0x45')]=_[_0x109a('0x43')](_0x106915[_0x109a('0x40')],qs[_0x109a('0x44')](_0x583dd5[_0x109a('0x42')][_0x109a('0x44')]));_0x413aff['attributes']=_0x413aff[_0x109a('0x45')][_0x109a('0x53')]?_0x413aff[_0x109a('0x45')]:_0x106915[_0x109a('0x40')];if(!_0x583dd5[_0x109a('0x42')][_0x109a('0x64')](_0x109a('0x46'))){_0x413aff[_0x109a('0x30')]=qs[_0x109a('0x30')](_0x583dd5[_0x109a('0x42')][_0x109a('0x30')]);_0x413aff[_0x109a('0x2f')]=qs[_0x109a('0x2f')](_0x583dd5[_0x109a('0x42')][_0x109a('0x2f')]);}_0x413aff[_0x109a('0x65')]=qs[_0x109a('0x47')](_0x583dd5['query']['sort']);_0x413aff['where']=qs[_0x109a('0x49')](_[_0x109a('0x4a')](_0x583dd5[_0x109a('0x42')],_0x106915['filters']));_0x413aff[_0x109a('0x48')][_0x109a('0x66')]=_0xcb54ab['id'];if(_0x583dd5['query'][_0x109a('0x4b')]){_0x413aff['where']=_[_0x109a('0x4c')](_0x413aff[_0x109a('0x48')],{'$or':_[_0x109a('0x4d')](_0x413aff[_0x109a('0x45')],function(_0xe8e086){var _0x126ae6={};_0x126ae6[_0xe8e086]={'$like':'%'+_0x583dd5[_0x109a('0x42')]['filter']+'%'};return _0x126ae6;})});}_0x413aff=_[_0x109a('0x4c')]({},_0x413aff,_0x583dd5['options']);return db[_0x109a('0x63')][_0x109a('0x67')](_0x413aff);}})['then'](function(_0x4c6ffa){if(_0x4c6ffa){return db[_0x109a('0x68')][_0x109a('0x69')]({'where':{'id':_['map'](_0x4c6ffa,'UserId'),'role':'agent'},'attributes':['id',_0x109a('0x3b'),'chatPause',_0x109a('0x6a'),'createdAt']});}})[_0x109a('0x20')](function(_0xc86856){if(_0xc86856){return{'count':_0xc86856[_0x109a('0x2e')],'rows':_['map'](_0xc86856['rows'],function(_0xc1dad2){return{'membername':_0xc1dad2[_0x109a('0x3b')],'UserId':_0xc1dad2['id'],'queue_name':_0x30741d['name'],'ChatQueueId':_0x30741d['id'],'interface':util[_0x109a('0x6b')](_0x109a('0x6c'),_0x109a('0x6d'),_0xc1dad2[_0x109a('0x3b')]),'penalty':0x0,'paused':_0xc1dad2[_0x109a('0x6e')],'createdAt':_0xc1dad2['createdAt'],'updatedAt':_0xc1dad2[_0x109a('0x6a')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x109a('0x20')](respondWithFilteredResult(_0x109fe8,_0x413aff))[_0x109a('0x2a')](handleError(_0x109fe8,null));};exports[_0x109a('0x6f')]=function(_0x56256a,_0x239bd0,_0x1db206){var _0x28b7db={};var _0x48955f={};var _0x15652a;var _0x52d90f;return db[_0x109a('0x3e')]['findOne']({'where':{'id':_0x56256a[_0x109a('0x52')]['id']}})[_0x109a('0x20')](handleEntityNotFound(_0x239bd0,null))[_0x109a('0x20')](function(_0x15b754){if(_0x15b754){_0x15652a=_0x15b754;_0x48955f[_0x109a('0x40')]=_[_0x109a('0x41')](db[_0x109a('0x70')][_0x109a('0x3f')]);_0x48955f[_0x109a('0x42')]=_[_0x109a('0x41')](_0x56256a[_0x109a('0x42')]);_0x48955f['filters']=_[_0x109a('0x43')](_0x48955f[_0x109a('0x40')],_0x48955f[_0x109a('0x42')]);_0x28b7db['attributes']=_['intersection'](_0x48955f[_0x109a('0x40')],qs[_0x109a('0x44')](_0x56256a[_0x109a('0x42')][_0x109a('0x44')]));_0x28b7db[_0x109a('0x45')]=_0x28b7db[_0x109a('0x45')]['length']?_0x28b7db['attributes']:_0x48955f['model'];_0x28b7db['order']=qs[_0x109a('0x47')](_0x56256a[_0x109a('0x42')][_0x109a('0x47')]);_0x28b7db[_0x109a('0x48')]=qs[_0x109a('0x49')](_[_0x109a('0x4a')](_0x56256a['query'],_0x48955f[_0x109a('0x49')]));if(_0x56256a[_0x109a('0x42')][_0x109a('0x4b')]){_0x28b7db['where']=_[_0x109a('0x4c')](_0x28b7db['where'],{'$or':_[_0x109a('0x4d')](_0x28b7db[_0x109a('0x45')],function(_0x190032){var _0x3b6bb0={};_0x3b6bb0[_0x190032]={'$like':'%'+_0x56256a['query']['filter']+'%'};return _0x3b6bb0;})});}_0x28b7db=_[_0x109a('0x4c')]({},_0x28b7db,_0x56256a['options']);return _0x15652a[_0x109a('0x6f')](_0x28b7db);}})[_0x109a('0x20')](function(_0x1388d9){if(_0x1388d9){_0x52d90f=_0x1388d9[_0x109a('0x53')];if(!_0x56256a['query'][_0x109a('0x64')](_0x109a('0x46'))){_0x28b7db[_0x109a('0x30')]=qs[_0x109a('0x30')](_0x56256a[_0x109a('0x42')][_0x109a('0x30')]);_0x28b7db[_0x109a('0x2f')]=qs['offset'](_0x56256a[_0x109a('0x42')][_0x109a('0x2f')]);}return _0x15652a[_0x109a('0x6f')](_0x28b7db);}})[_0x109a('0x20')](function(_0x4a83a4){if(_0x4a83a4){return _0x4a83a4?{'count':_0x52d90f,'rows':_0x4a83a4}:null;}})[_0x109a('0x20')](respondWithResult(_0x239bd0,null))[_0x109a('0x2a')](handleError(_0x239bd0,null));};exports[_0x109a('0x71')]=function(_0x142476,_0x163f38,_0x5c3ef0){var _0x432855=[];var _0x5ca92b;return db[_0x109a('0x70')][_0x109a('0x67')]({'where':{'id':_0x142476['body'][_0x109a('0x72')]},'attributes':['id'],'include':[{'model':db[_0x109a('0x68')],'as':_0x109a('0x73'),'attributes':['id'],'raw':!![]}]})['then'](function(_0x23cb74){if(_0x23cb74){for(var _0x264bf6=0x0;_0x264bf6<_0x23cb74[_0x109a('0x53')];_0x264bf6+=0x1){for(var _0x12797a=0x0;_0x12797a<_0x23cb74[_0x264bf6][_0x109a('0x73')][_0x109a('0x53')];_0x12797a+=0x1){_0x432855=_['union'](_0x432855,[_0x23cb74[_0x264bf6]['Agents'][_0x12797a]['id']]);}}return _0x432855;}})['then'](function(_0x45c824){if(_0x45c824){return db['ChatQueue'][_0x109a('0x5c')]({'where':{'id':_0x142476[_0x109a('0x52')]['id']}});}})[_0x109a('0x20')](function(_0x4318bc){if(_0x4318bc){_0x5ca92b=_0x4318bc;return _0x5ca92b[_0x109a('0x74')](_0x432855,{'penalty':_0x142476['body'][_0x109a('0x75')]});}})[_0x109a('0x20')](function(_0x4f6fab){if(_0x4f6fab){return _0x5ca92b[_0x109a('0x71')](_0x142476[_0x109a('0x58')]['ids']);}})[_0x109a('0x20')](handleEntityNotFound(_0x163f38,null))[_0x109a('0x20')](respondWithStatusCode(_0x163f38,null))[_0x109a('0x2a')](handleError(_0x163f38,null));};exports[_0x109a('0x76')]=function(_0x58cb2d,_0x9f83ee,_0xebfdb8){var _0x4634ab=[];var _0x399a96;return db[_0x109a('0x70')][_0x109a('0x67')]({'where':{'id':_0x58cb2d['query']['ids']},'attributes':['id'],'include':[{'model':db['User'],'as':_0x109a('0x73'),'attributes':['id'],'raw':!![]}]})[_0x109a('0x20')](function(_0x407ac2){if(_0x407ac2){for(var _0x3fb229=0x0;_0x3fb229<_0x407ac2[_0x109a('0x53')];_0x3fb229+=0x1){for(var _0x17228e=0x0;_0x17228e<_0x407ac2[_0x3fb229][_0x109a('0x73')][_0x109a('0x53')];_0x17228e+=0x1){_0x4634ab=_[_0x109a('0x77')](_0x4634ab,[_0x407ac2[_0x3fb229][_0x109a('0x73')][_0x17228e]['id']]);}}return _0x4634ab;}})['then'](function(_0x55ab73){if(_0x55ab73){return db[_0x109a('0x3e')]['find']({'where':{'id':_0x58cb2d[_0x109a('0x52')]['id']}});}})[_0x109a('0x20')](function(_0x5e2361){if(_0x5e2361){_0x399a96=_0x5e2361;return _0x399a96['removeAgents'](_0x4634ab);}})[_0x109a('0x20')](function(_0x246045){if(_0x399a96){return _0x399a96[_0x109a('0x76')](_0x58cb2d[_0x109a('0x42')][_0x109a('0x72')]);}})[_0x109a('0x20')](handleEntityNotFound(_0x9f83ee,null))['then'](respondWithStatusCode(_0x9f83ee,null))[_0x109a('0x2a')](handleError(_0x9f83ee,null));};exports[_0x109a('0x74')]=function(_0x1dbfee,_0x2b0b0f,_0x5162d4){return db[_0x109a('0x3e')][_0x109a('0x5c')]({'where':{'id':_0x1dbfee[_0x109a('0x52')]['id']}})[_0x109a('0x20')](handleEntityNotFound(_0x2b0b0f,null))[_0x109a('0x20')](function(_0x33967c){if(_0x33967c){return _0x33967c[_0x109a('0x74')](_0x1dbfee['body'][_0x109a('0x72')],_['omit'](_0x1dbfee[_0x109a('0x58')],[_0x109a('0x72'),'id'])||{})[_0x109a('0x78')](function(_0x469cd7){for(var _0x1e864c=0x0;_0x1e864c<_0x1dbfee[_0x109a('0x58')]['ids'][_0x109a('0x53')];_0x1e864c+=0x1){socket[_0x109a('0x79')](_0x109a('0x7a'),{'UserId':_0x1dbfee[_0x109a('0x58')]['ids'][_0x1e864c],'ChatQueueId':_0x1dbfee[_0x109a('0x52')]['id']});}return _0x469cd7;});}})['then'](respondWithResult(_0x2b0b0f,null))[_0x109a('0x2a')](handleError(_0x2b0b0f,null));};exports[_0x109a('0x7b')]=function(_0x49ff71,_0x22ac53,_0x2cb36f){var _0x457002;return db[_0x109a('0x3e')][_0x109a('0x5c')]({'where':{'id':_0x49ff71[_0x109a('0x52')]['id']}})[_0x109a('0x20')](handleEntityNotFound(_0x22ac53,null))[_0x109a('0x20')](function(_0x34330b){if(_0x34330b){return _0x34330b[_0x109a('0x7b')](_0x49ff71[_0x109a('0x42')]['ids'])['then'](function(_0x40fbca){if(_[_0x109a('0x7c')](_0x49ff71[_0x109a('0x42')]['ids'])){for(var _0x30aa65=0x0;_0x30aa65<_0x49ff71[_0x109a('0x42')]['ids'][_0x109a('0x53')];_0x30aa65+=0x1){socket['emit']('userChatQueue:remove',{'UserId':_0x49ff71['query'][_0x109a('0x72')][_0x30aa65],'ChatQueueId':_0x49ff71[_0x109a('0x52')]['id']});}}else{socket[_0x109a('0x79')](_0x109a('0x7d'),{'UserId':_0x49ff71[_0x109a('0x42')][_0x109a('0x72')],'ChatQueueId':_0x49ff71[_0x109a('0x52')]['id']});}});}})[_0x109a('0x20')](respondWithStatusCode(_0x22ac53,null))[_0x109a('0x2a')](handleError(_0x22ac53,null));};exports[_0x109a('0x7e')]=function(_0x308154,_0x587acb,_0x58e3fa){var _0x50b2da={};var _0x1d2e40={};var _0x1b7a01;var _0x5b67aa;return db[_0x109a('0x3e')][_0x109a('0x62')]({'where':{'id':_0x308154[_0x109a('0x52')]['id']}})[_0x109a('0x20')](handleEntityNotFound(_0x587acb,null))[_0x109a('0x20')](function(_0x3cde4a){if(_0x3cde4a){_0x1b7a01=_0x3cde4a;_0x1d2e40[_0x109a('0x40')]=_['keys'](db[_0x109a('0x68')]['rawAttributes']);_0x1d2e40[_0x109a('0x42')]=_[_0x109a('0x41')](_0x308154[_0x109a('0x42')]);_0x1d2e40[_0x109a('0x49')]=_[_0x109a('0x43')](_0x1d2e40[_0x109a('0x40')],_0x1d2e40[_0x109a('0x42')]);_0x50b2da['attributes']=_[_0x109a('0x43')](_0x1d2e40['model'],qs[_0x109a('0x44')](_0x308154[_0x109a('0x42')][_0x109a('0x44')]));_0x50b2da[_0x109a('0x45')]=_0x50b2da[_0x109a('0x45')]['length']?_0x50b2da[_0x109a('0x45')]:_0x1d2e40[_0x109a('0x40')];_0x50b2da[_0x109a('0x65')]=qs[_0x109a('0x47')](_0x308154[_0x109a('0x42')][_0x109a('0x47')]);_0x50b2da[_0x109a('0x48')]=qs['filters'](_[_0x109a('0x4a')](_0x308154[_0x109a('0x42')],_0x1d2e40[_0x109a('0x49')]));if(_0x308154['query'][_0x109a('0x4b')]){_0x50b2da[_0x109a('0x48')]=_[_0x109a('0x4c')](_0x50b2da[_0x109a('0x48')],{'$or':_[_0x109a('0x4d')](_0x50b2da[_0x109a('0x45')],function(_0x1d26d7){var _0x52f33f={};_0x52f33f[_0x1d26d7]={'$like':'%'+_0x308154[_0x109a('0x42')][_0x109a('0x4b')]+'%'};return _0x52f33f;})});}_0x50b2da=_[_0x109a('0x4c')]({},_0x50b2da,_0x308154[_0x109a('0x56')]);return _0x1b7a01[_0x109a('0x7e')](_0x50b2da);}})[_0x109a('0x20')](function(_0x52018d){if(_0x52018d){_0x5b67aa=_0x52018d['length'];if(!_0x308154[_0x109a('0x42')][_0x109a('0x64')](_0x109a('0x46'))){_0x50b2da['limit']=qs[_0x109a('0x30')](_0x308154[_0x109a('0x42')]['limit']);_0x50b2da[_0x109a('0x2f')]=qs[_0x109a('0x2f')](_0x308154[_0x109a('0x42')]['offset']);}return _0x1b7a01[_0x109a('0x7e')](_0x50b2da);}})[_0x109a('0x20')](function(_0x5200b8){if(_0x5200b8){return _0x5200b8?{'count':_0x5b67aa,'rows':_0x5200b8}:null;}})['then'](respondWithResult(_0x587acb,null))['catch'](handleError(_0x587acb,null));};
\ No newline at end of file
index 2462d39..61d2a09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x105b=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','ChatQueue','setMaxListeners','save','update'];(function(_0x5bff85,_0x555fb4){var _0x1d085c=function(_0x13d3f6){while(--_0x13d3f6){_0x5bff85['push'](_0x5bff85['shift']());}};_0x1d085c(++_0x555fb4);}(_0x105b,0x1a7));var _0xb105=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x105b[_0x4cf98e];return _0x1623ac;};'use strict';var EventEmitter=require(_0xb105('0x0'));var ChatQueue=require(_0xb105('0x1'))['db'][_0xb105('0x2')];var ChatQueueEvents=new EventEmitter();ChatQueueEvents[_0xb105('0x3')](0x0);var events={'afterCreate':_0xb105('0x4'),'afterUpdate':_0xb105('0x5'),'afterDestroy':_0xb105('0x6')};function emitEvent(_0x4a2486){return function(_0xfb338f,_0xd09bee,_0x1c12d6){ChatQueueEvents['emit'](_0x4a2486+':'+_0xfb338f['id'],_0xfb338f);ChatQueueEvents[_0xb105('0x7')](_0x4a2486,_0xfb338f);_0x1c12d6(null);};}for(var e in events){if(events[_0xb105('0x8')](e)){var event=events[e];ChatQueue[_0xb105('0x9')](e,emitEvent(event));}}module[_0xb105('0xa')]=ChatQueueEvents;
\ No newline at end of file
+var _0xfe13=['setMaxListeners','save','update','remove','emit','hook','exports','events','ChatQueue'];(function(_0x4cad85,_0x4fd237){var _0x2bc689=function(_0x258cd6){while(--_0x258cd6){_0x4cad85['push'](_0x4cad85['shift']());}};_0x2bc689(++_0x4fd237);}(_0xfe13,0x178));var _0x3fe1=function(_0x47e93d,_0x26bbdd){_0x47e93d=_0x47e93d-0x0;var _0xe86c46=_0xfe13[_0x47e93d];return _0xe86c46;};'use strict';var EventEmitter=require(_0x3fe1('0x0'));var ChatQueue=require('../../mysqldb')['db'][_0x3fe1('0x1')];var ChatQueueEvents=new EventEmitter();ChatQueueEvents[_0x3fe1('0x2')](0x0);var events={'afterCreate':_0x3fe1('0x3'),'afterUpdate':_0x3fe1('0x4'),'afterDestroy':_0x3fe1('0x5')};function emitEvent(_0x86e8f){return function(_0x4b3537,_0x5074c4,_0x40401b){ChatQueueEvents[_0x3fe1('0x6')](_0x86e8f+':'+_0x4b3537['id'],_0x4b3537);ChatQueueEvents[_0x3fe1('0x6')](_0x86e8f,_0x4b3537);_0x40401b(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];ChatQueue[_0x3fe1('0x7')](e,emitEvent(event));}}module[_0x3fe1('0x8')]=ChatQueueEvents;
\ No newline at end of file
index 2f41c5c..d415289 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5292=['./chatQueue.attributes','exports','lodash','util','api','bluebird','request-promise'];(function(_0x4737a0,_0x36520e){var _0x4d558b=function(_0xaa9825){while(--_0xaa9825){_0x4737a0['push'](_0x4737a0['shift']());}};_0x4d558b(++_0x36520e);}(_0x5292,0xf7));var _0x2529=function(_0x222550,_0x3c0a0c){_0x222550=_0x222550-0x0;var _0x58ac61=_0x5292[_0x222550];return _0x58ac61;};'use strict';var _=require(_0x2529('0x0'));var util=require(_0x2529('0x1'));var logger=require('../../config/logger')(_0x2529('0x2'));var moment=require('moment');var BPromise=require(_0x2529('0x3'));var rp=require(_0x2529('0x4'));var attributes=require(_0x2529('0x5'));module[_0x2529('0x6')]=function(_0x5d25dc,_0x28c08d){return _0x5d25dc['define']('ChatQueue',attributes,{'tableName':'chat_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8958=['ChatQueue','chat_queues','util','request-promise','exports'];(function(_0x46ac2b,_0x55feb8){var _0x487244=function(_0x5d3481){while(--_0x5d3481){_0x46ac2b['push'](_0x46ac2b['shift']());}};_0x487244(++_0x55feb8);}(_0x8958,0x93));var _0x8895=function(_0x46ea1b,_0x48ec3a){_0x46ea1b=_0x46ea1b-0x0;var _0x5c5532=_0x8958[_0x46ea1b];return _0x5c5532;};'use strict';var _=require('lodash');var util=require(_0x8895('0x0'));var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x8895('0x1'));var attributes=require('./chatQueue.attributes');module[_0x8895('0x2')]=function(_0xce4955,_0x26d8e3){return _0xce4955['define'](_0x8895('0x3'),attributes,{'tableName':_0x8895('0x4'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 3e521fb..ed7fb90 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8e53=['defaults','localhost','socket.io-emitter','./chatQueue.socket','register','request','ChatQueue,\x20%s,\x20%s','debug','ChatQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','GetChatQueue','ChatQueue','findAll','options','raw','limit','include','attributes','map','model','then','info','catch','ShowChatQueue','where','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','../../config/environment','client','http','redis'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0x8e53,0x13d));var _0x38e5=function(_0x550847,_0x4b82a6){_0x550847=_0x550847-0x0;var _0x4e1f9d=_0x8e53[_0x550847];return _0x4e1f9d;};'use strict';var _=require(_0x38e5('0x0'));var util=require(_0x38e5('0x1'));var moment=require(_0x38e5('0x2'));var BPromise=require('bluebird');var rs=require(_0x38e5('0x3'));var fs=require('fs');var Redis=require(_0x38e5('0x4'));var db=require(_0x38e5('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x38e5('0x6'))('rpc');var config=require(_0x38e5('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x38e5('0x8')][_0x38e5('0x9')]({'port':0x232a});config[_0x38e5('0xa')]=_[_0x38e5('0xb')](config[_0x38e5('0xa')],{'host':_0x38e5('0xc'),'port':0x18eb});var socket=require(_0x38e5('0xd'))(new Redis(config[_0x38e5('0xa')]));require(_0x38e5('0xe'))[_0x38e5('0xf')](socket);function respondWithRpcPromise(_0x4405de,_0x36e2c9,_0x456468){return new BPromise(function(_0x11212e,_0x343901){return client[_0x38e5('0x10')](_0x4405de,_0x456468)['then'](function(_0xebffc1){logger['info'](_0x38e5('0x11'),_0x36e2c9,'request\x20sent');logger[_0x38e5('0x12')](_0x38e5('0x13'),_0x36e2c9,_0x38e5('0x14'),JSON[_0x38e5('0x15')](_0xebffc1));if(_0xebffc1['error']){if(_0xebffc1[_0x38e5('0x16')][_0x38e5('0x17')]===0x1f4){logger[_0x38e5('0x16')](_0x38e5('0x11'),_0x36e2c9,_0xebffc1['error'][_0x38e5('0x18')]);return _0x343901(_0xebffc1[_0x38e5('0x16')]['message']);}logger['error'](_0x38e5('0x11'),_0x36e2c9,_0xebffc1['error'][_0x38e5('0x18')]);return _0x11212e(_0xebffc1[_0x38e5('0x16')][_0x38e5('0x18')]);}else{logger['info']('ChatQueue,\x20%s,\x20%s',_0x36e2c9,'request\x20sent');_0x11212e(_0xebffc1[_0x38e5('0x19')]['message']);}})['catch'](function(_0x2e6f63){logger[_0x38e5('0x16')](_0x38e5('0x11'),_0x36e2c9,_0x2e6f63);_0x343901(_0x2e6f63);});});}exports[_0x38e5('0x1a')]=function(_0x455cdc){var _0x443041=this;return new Promise(function(_0x2c90ae,_0x4d46b2){return db[_0x38e5('0x1b')][_0x38e5('0x1c')]({'raw':_0x455cdc['options']?_0x455cdc[_0x38e5('0x1d')][_0x38e5('0x1e')]===undefined?!![]:![]:!![],'where':_0x455cdc[_0x38e5('0x1d')]?_0x455cdc['options']['where']||null:null,'attributes':_0x455cdc[_0x38e5('0x1d')]?_0x455cdc['options']['attributes']||null:null,'limit':_0x455cdc[_0x38e5('0x1d')]?_0x455cdc[_0x38e5('0x1d')][_0x38e5('0x1f')]||null:null,'include':_0x455cdc[_0x38e5('0x1d')]?_0x455cdc[_0x38e5('0x1d')][_0x38e5('0x20')]?_['map'](_0x455cdc[_0x38e5('0x1d')][_0x38e5('0x20')],function(_0x350551){return{'model':db[_0x350551['model']],'as':_0x350551['as'],'attributes':_0x350551[_0x38e5('0x21')],'include':_0x350551[_0x38e5('0x20')]?_[_0x38e5('0x22')](_0x350551[_0x38e5('0x20')],function(_0xa28f6a){return{'model':db[_0xa28f6a[_0x38e5('0x23')]],'as':_0xa28f6a['as'],'attributes':_0xa28f6a['attributes'],'include':_0xa28f6a[_0x38e5('0x20')]?_[_0x38e5('0x22')](_0xa28f6a['include'],function(_0x566e76){return{'model':db[_0x566e76['model']],'as':_0x566e76['as'],'attributes':_0x566e76[_0x38e5('0x21')]};}):[]};}):[]};}):[]:[]})[_0x38e5('0x24')](function(_0x14654c){logger[_0x38e5('0x25')](_0x38e5('0x1a'),_0x455cdc);logger['debug'](_0x38e5('0x1a'),_0x455cdc,JSON['stringify'](_0x14654c));_0x2c90ae(_0x14654c);})[_0x38e5('0x26')](function(_0x2caca9){logger[_0x38e5('0x16')](_0x38e5('0x1a'),_0x2caca9[_0x38e5('0x18')],_0x455cdc);_0x4d46b2(_0x443041[_0x38e5('0x16')](0x1f4,_0x2caca9[_0x38e5('0x18')]));});});};exports[_0x38e5('0x27')]=function(_0x29b7b7){var _0x3985fc=this;return new Promise(function(_0x53b548,_0x2bd2a3){return db['ChatQueue']['find']({'raw':_0x29b7b7[_0x38e5('0x1d')]?_0x29b7b7['options'][_0x38e5('0x1e')]===undefined?!![]:![]:!![],'where':_0x29b7b7[_0x38e5('0x1d')]?_0x29b7b7[_0x38e5('0x1d')][_0x38e5('0x28')]||null:null,'attributes':_0x29b7b7[_0x38e5('0x1d')]?_0x29b7b7[_0x38e5('0x1d')][_0x38e5('0x21')]||null:null,'include':_0x29b7b7[_0x38e5('0x1d')]?_0x29b7b7[_0x38e5('0x1d')]['include']?_[_0x38e5('0x22')](_0x29b7b7['options'][_0x38e5('0x20')],function(_0x12686e){return{'model':db[_0x12686e[_0x38e5('0x23')]],'as':_0x12686e['as'],'attributes':_0x12686e['attributes'],'include':_0x12686e[_0x38e5('0x20')]?_[_0x38e5('0x22')](_0x12686e[_0x38e5('0x20')],function(_0x1fc882){return{'model':db[_0x1fc882[_0x38e5('0x23')]],'as':_0x1fc882['as'],'attributes':_0x1fc882['attributes'],'include':_0x1fc882[_0x38e5('0x20')]?_[_0x38e5('0x22')](_0x1fc882['include'],function(_0x40c79b){return{'model':db[_0x40c79b[_0x38e5('0x23')]],'as':_0x40c79b['as'],'attributes':_0x40c79b[_0x38e5('0x21')]};}):[]};}):[]};}):[]:[]})[_0x38e5('0x24')](function(_0x441659){logger['info'](_0x38e5('0x27'),_0x29b7b7);logger[_0x38e5('0x12')](_0x38e5('0x27'),_0x29b7b7,JSON['stringify'](_0x441659));_0x53b548(_0x441659);})[_0x38e5('0x26')](function(_0x502d3f){logger[_0x38e5('0x16')]('ShowChatQueue',_0x502d3f[_0x38e5('0x18')],_0x29b7b7);_0x2bd2a3(_0x3985fc[_0x38e5('0x16')](0x1f4,_0x502d3f['message']));});});};
\ No newline at end of file
+var _0x586b=['../../config/environment','jayson/promise','http','socket.io-emitter','redis','register','request','info','ChatQueue,\x20%s,\x20%s','request\x20sent','ChatQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','GetChatQueue','findAll','options','raw','where','model','attributes','include','map','then','debug','ShowChatQueue','ChatQueue','find','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc'];(function(_0x141d83,_0x1a47be){var _0x29a592=function(_0x31bc05){while(--_0x31bc05){_0x141d83['push'](_0x141d83['shift']());}};_0x29a592(++_0x1a47be);}(_0x586b,0x90));var _0xb586=function(_0x53afec,_0x368871){_0x53afec=_0x53afec-0x0;var _0x2fc3a7=_0x586b[_0x53afec];return _0x2fc3a7;};'use strict';var _=require(_0xb586('0x0'));var util=require(_0xb586('0x1'));var moment=require(_0xb586('0x2'));var BPromise=require(_0xb586('0x3'));var rs=require(_0xb586('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb586('0x5'))['db'];var utils=require(_0xb586('0x6'));var logger=require('../../config/logger')(_0xb586('0x7'));var config=require(_0xb586('0x8'));var jayson=require(_0xb586('0x9'));var client=jayson['client'][_0xb586('0xa')]({'port':0x232a});config['redis']=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xb586('0xb'))(new Redis(config[_0xb586('0xc')]));require('./chatQueue.socket')[_0xb586('0xd')](socket);function respondWithRpcPromise(_0x200970,_0x17e752,_0x2f51b3){return new BPromise(function(_0x5965b7,_0x2b6e7f){return client[_0xb586('0xe')](_0x200970,_0x2f51b3)['then'](function(_0x13f274){logger[_0xb586('0xf')](_0xb586('0x10'),_0x17e752,_0xb586('0x11'));logger['debug'](_0xb586('0x12'),_0x17e752,'request\x20sent',JSON[_0xb586('0x13')](_0x13f274));if(_0x13f274[_0xb586('0x14')]){if(_0x13f274[_0xb586('0x14')][_0xb586('0x15')]===0x1f4){logger[_0xb586('0x14')](_0xb586('0x10'),_0x17e752,_0x13f274['error']['message']);return _0x2b6e7f(_0x13f274[_0xb586('0x14')]['message']);}logger[_0xb586('0x14')](_0xb586('0x10'),_0x17e752,_0x13f274[_0xb586('0x14')][_0xb586('0x16')]);return _0x5965b7(_0x13f274['error'][_0xb586('0x16')]);}else{logger[_0xb586('0xf')](_0xb586('0x10'),_0x17e752,_0xb586('0x11'));_0x5965b7(_0x13f274['result'][_0xb586('0x16')]);}})[_0xb586('0x17')](function(_0x3a47a5){logger[_0xb586('0x14')]('ChatQueue,\x20%s,\x20%s',_0x17e752,_0x3a47a5);_0x2b6e7f(_0x3a47a5);});});}exports[_0xb586('0x18')]=function(_0x1afb5f){var _0x2b271e=this;return new Promise(function(_0x542f31,_0x42b1c2){return db['ChatQueue'][_0xb586('0x19')]({'raw':_0x1afb5f['options']?_0x1afb5f[_0xb586('0x1a')][_0xb586('0x1b')]===undefined?!![]:![]:!![],'where':_0x1afb5f[_0xb586('0x1a')]?_0x1afb5f[_0xb586('0x1a')][_0xb586('0x1c')]||null:null,'attributes':_0x1afb5f['options']?_0x1afb5f[_0xb586('0x1a')]['attributes']||null:null,'limit':_0x1afb5f[_0xb586('0x1a')]?_0x1afb5f[_0xb586('0x1a')]['limit']||null:null,'include':_0x1afb5f[_0xb586('0x1a')]?_0x1afb5f[_0xb586('0x1a')]['include']?_['map'](_0x1afb5f[_0xb586('0x1a')]['include'],function(_0x1fa1d0){return{'model':db[_0x1fa1d0[_0xb586('0x1d')]],'as':_0x1fa1d0['as'],'attributes':_0x1fa1d0[_0xb586('0x1e')],'include':_0x1fa1d0[_0xb586('0x1f')]?_[_0xb586('0x20')](_0x1fa1d0[_0xb586('0x1f')],function(_0xb2100d){return{'model':db[_0xb2100d[_0xb586('0x1d')]],'as':_0xb2100d['as'],'attributes':_0xb2100d['attributes'],'include':_0xb2100d['include']?_[_0xb586('0x20')](_0xb2100d['include'],function(_0x204036){return{'model':db[_0x204036['model']],'as':_0x204036['as'],'attributes':_0x204036[_0xb586('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xb586('0x21')](function(_0x1a8b3a){logger[_0xb586('0xf')](_0xb586('0x18'),_0x1afb5f);logger[_0xb586('0x22')](_0xb586('0x18'),_0x1afb5f,JSON['stringify'](_0x1a8b3a));_0x542f31(_0x1a8b3a);})[_0xb586('0x17')](function(_0x4d1651){logger[_0xb586('0x14')](_0xb586('0x18'),_0x4d1651[_0xb586('0x16')],_0x1afb5f);_0x42b1c2(_0x2b271e[_0xb586('0x14')](0x1f4,_0x4d1651[_0xb586('0x16')]));});});};exports[_0xb586('0x23')]=function(_0x20adf2){var _0xd977b9=this;return new Promise(function(_0x5daec6,_0x49dcc2){return db[_0xb586('0x24')][_0xb586('0x25')]({'raw':_0x20adf2[_0xb586('0x1a')]?_0x20adf2['options'][_0xb586('0x1b')]===undefined?!![]:![]:!![],'where':_0x20adf2['options']?_0x20adf2['options'][_0xb586('0x1c')]||null:null,'attributes':_0x20adf2[_0xb586('0x1a')]?_0x20adf2[_0xb586('0x1a')][_0xb586('0x1e')]||null:null,'include':_0x20adf2[_0xb586('0x1a')]?_0x20adf2[_0xb586('0x1a')]['include']?_[_0xb586('0x20')](_0x20adf2['options'][_0xb586('0x1f')],function(_0x584cf8){return{'model':db[_0x584cf8[_0xb586('0x1d')]],'as':_0x584cf8['as'],'attributes':_0x584cf8[_0xb586('0x1e')],'include':_0x584cf8[_0xb586('0x1f')]?_[_0xb586('0x20')](_0x584cf8[_0xb586('0x1f')],function(_0x5dd52e){return{'model':db[_0x5dd52e[_0xb586('0x1d')]],'as':_0x5dd52e['as'],'attributes':_0x5dd52e[_0xb586('0x1e')],'include':_0x5dd52e[_0xb586('0x1f')]?_[_0xb586('0x20')](_0x5dd52e[_0xb586('0x1f')],function(_0x363e22){return{'model':db[_0x363e22[_0xb586('0x1d')]],'as':_0x363e22['as'],'attributes':_0x363e22[_0xb586('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xb586('0x21')](function(_0x316868){logger[_0xb586('0xf')](_0xb586('0x23'),_0x20adf2);logger[_0xb586('0x22')](_0xb586('0x23'),_0x20adf2,JSON[_0xb586('0x13')](_0x316868));_0x5daec6(_0x316868);})[_0xb586('0x17')](function(_0x661efc){logger['error']('ShowChatQueue',_0x661efc['message'],_0x20adf2);_0x49dcc2(_0xd977b9[_0xb586('0x14')](0x1f4,_0x661efc['message']));});});};
\ No newline at end of file
index 7e6e93d..c7ccaa3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['register','length','chatQueue:','./chatQueue.events','save','remove','emit','removeListener'];(function(_0x4a9fb1,_0x273043){var _0x348672=function(_0x142b69){while(--_0x142b69){_0x4a9fb1['push'](_0x4a9fb1['shift']());}};_0x348672(++_0x273043);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3e112d,_0x2bb132){_0x3e112d=_0x3e112d-0x0;var _0x531c31=_0xa9e0[_0x3e112d];return _0x531c31;};'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(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4baae2,_0x487ab6){_0x4baae2=_0x4baae2-0x0;var _0x1a2285=_0xa9e0[_0x4baae2];return _0x1a2285;};'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 081c61e..e54b24f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc028=['../../config/environment','get','index','/describe','isAuthenticated','/:id','show','/:id/members','getMembers','/:id/teams','getTeams','/:id/users','getAgents','post','create','addTeams','addAgents','put','update','delete','destroy','removeAgents','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0xe0261d,_0x3b0ea1){var _0x191f9c=function(_0x1e55c5){while(--_0x1e55c5){_0xe0261d['push'](_0xe0261d['shift']());}};_0x191f9c(++_0x3b0ea1);}(_0xc028,0x160));var _0x8c02=function(_0x2aba09,_0x12b3df){_0x2aba09=_0x2aba09-0x0;var _0x2fd2f7=_0xc028[_0x2aba09];return _0x2fd2f7;};'use strict';var multer=require(_0x8c02('0x0'));var util=require(_0x8c02('0x1'));var path=require(_0x8c02('0x2'));var timeout=require(_0x8c02('0x3'));var express=require(_0x8c02('0x4'));var router=express[_0x8c02('0x5')]();var auth=require(_0x8c02('0x6'));var interaction=require(_0x8c02('0x7'));var config=require(_0x8c02('0x8'));var controller=require('./chatQueue.controller');router[_0x8c02('0x9')]('/',auth['isAuthenticated'](),controller[_0x8c02('0xa')]);router[_0x8c02('0x9')](_0x8c02('0xb'),auth[_0x8c02('0xc')](),controller['describe']);router[_0x8c02('0x9')](_0x8c02('0xd'),auth[_0x8c02('0xc')](),controller[_0x8c02('0xe')]);router[_0x8c02('0x9')](_0x8c02('0xf'),auth[_0x8c02('0xc')](),controller[_0x8c02('0x10')]);router[_0x8c02('0x9')](_0x8c02('0x11'),auth[_0x8c02('0xc')](),controller[_0x8c02('0x12')]);router[_0x8c02('0x9')](_0x8c02('0x13'),auth[_0x8c02('0xc')](),controller[_0x8c02('0x14')]);router[_0x8c02('0x15')]('/',auth[_0x8c02('0xc')](),controller[_0x8c02('0x16')]);router['post'](_0x8c02('0x11'),auth[_0x8c02('0xc')](),controller[_0x8c02('0x17')]);router['post'](_0x8c02('0x13'),auth['isAuthenticated'](),controller[_0x8c02('0x18')]);router[_0x8c02('0x19')](_0x8c02('0xd'),auth[_0x8c02('0xc')](),controller[_0x8c02('0x1a')]);router[_0x8c02('0x1b')](_0x8c02('0xd'),auth[_0x8c02('0xc')](),controller[_0x8c02('0x1c')]);router['delete'](_0x8c02('0x11'),auth[_0x8c02('0xc')](),controller['removeTeams']);router[_0x8c02('0x1b')]('/:id/users',auth[_0x8c02('0xc')](),controller[_0x8c02('0x1d')]);module['exports']=router;
\ No newline at end of file
+var _0x0105=['put','update','delete','destroy','removeTeams','multer','util','connect-timeout','express','../../components/interaction/service','../../config/environment','get','index','/describe','isAuthenticated','describe','/:id','show','getMembers','getTeams','/:id/users','getAgents','post','/:id/teams','addTeams'];(function(_0x245ace,_0x1c1fbc){var _0x3bae32=function(_0x159474){while(--_0x159474){_0x245ace['push'](_0x245ace['shift']());}};_0x3bae32(++_0x1c1fbc);}(_0x0105,0xe6));var _0x5010=function(_0x3c7c46,_0x1b45ce){_0x3c7c46=_0x3c7c46-0x0;var _0x1e365e=_0x0105[_0x3c7c46];return _0x1e365e;};'use strict';var multer=require(_0x5010('0x0'));var util=require(_0x5010('0x1'));var path=require('path');var timeout=require(_0x5010('0x2'));var express=require(_0x5010('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x5010('0x4'));var config=require(_0x5010('0x5'));var controller=require('./chatQueue.controller');router[_0x5010('0x6')]('/',auth['isAuthenticated'](),controller[_0x5010('0x7')]);router['get'](_0x5010('0x8'),auth[_0x5010('0x9')](),controller[_0x5010('0xa')]);router[_0x5010('0x6')](_0x5010('0xb'),auth[_0x5010('0x9')](),controller[_0x5010('0xc')]);router[_0x5010('0x6')]('/:id/members',auth[_0x5010('0x9')](),controller[_0x5010('0xd')]);router['get']('/:id/teams',auth[_0x5010('0x9')](),controller[_0x5010('0xe')]);router[_0x5010('0x6')](_0x5010('0xf'),auth['isAuthenticated'](),controller[_0x5010('0x10')]);router[_0x5010('0x11')]('/',auth[_0x5010('0x9')](),controller['create']);router[_0x5010('0x11')](_0x5010('0x12'),auth['isAuthenticated'](),controller[_0x5010('0x13')]);router[_0x5010('0x11')](_0x5010('0xf'),auth['isAuthenticated'](),controller['addAgents']);router[_0x5010('0x14')](_0x5010('0xb'),auth[_0x5010('0x9')](),controller[_0x5010('0x15')]);router[_0x5010('0x16')](_0x5010('0xb'),auth[_0x5010('0x9')](),controller[_0x5010('0x17')]);router[_0x5010('0x16')](_0x5010('0x12'),auth['isAuthenticated'](),controller[_0x5010('0x18')]);router[_0x5010('0x16')](_0x5010('0xf'),auth['isAuthenticated'](),controller['removeAgents']);module['exports']=router;
\ No newline at end of file
index a656e75..ac8aa44 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa802=['STRING','DATE','sequelize','exports'];(function(_0x3e65dc,_0x3f8571){var _0x42df80=function(_0x35a118){while(--_0x35a118){_0x3e65dc['push'](_0x3e65dc['shift']());}};_0x42df80(++_0x3f8571);}(_0xa802,0x136));var _0x2a80=function(_0x2816c2,_0x343762){_0x2816c2=_0x2816c2-0x0;var _0x123777=_0xa802[_0x2816c2];return _0x123777;};'use strict';var moment=require('moment');var Sequelize=require(_0x2a80('0x0'));module[_0x2a80('0x1')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'from':{'type':Sequelize[_0x2a80('0x2')]},'joinAt':{'type':Sequelize[_0x2a80('0x3')]},'leaveAt':{'type':Sequelize[_0x2a80('0x3')]},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize[_0x2a80('0x3')]},'reason':{'type':Sequelize[_0x2a80('0x2')]}};
\ No newline at end of file
+var _0x8fbd=['sequelize','exports','STRING','DATE','moment'];(function(_0xafbcb3,_0x7915fd){var _0x5b2fbe=function(_0x139f09){while(--_0x139f09){_0xafbcb3['push'](_0xafbcb3['shift']());}};_0x5b2fbe(++_0x7915fd);}(_0x8fbd,0x135));var _0xd8fb=function(_0x453a7c,_0x45140e){_0x453a7c=_0x453a7c-0x0;var _0x16ab5d=_0x8fbd[_0x453a7c];return _0x16ab5d;};'use strict';var moment=require(_0xd8fb('0x0'));var Sequelize=require(_0xd8fb('0x1'));module[_0xd8fb('0x2')]={'uniqueid':{'type':Sequelize[_0xd8fb('0x3')],'allowNull':![]},'from':{'type':Sequelize[_0xd8fb('0x3')]},'joinAt':{'type':Sequelize[_0xd8fb('0x4')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize[_0xd8fb('0x4')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 59d45e3..3bb156b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa35a=['options','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','stack','name','send','index','ChatQueueReport','rawAttributes','model','keys','query','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','map','type','key','field','merge'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0xa35a,0xa4));var _0xaa35=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xa35a[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require(_0xaa35('0x0'));var emlformat=require(_0xaa35('0x1'));var rimraf=require(_0xaa35('0x2'));var zipdir=require(_0xaa35('0x3'));var jsonpatch=require(_0xaa35('0x4'));var rp=require('request-promise');var moment=require(_0xaa35('0x5'));var BPromise=require(_0xaa35('0x6'));var Mustache=require('mustache');var util=require(_0xaa35('0x7'));var path=require(_0xaa35('0x8'));var sox=require(_0xaa35('0x9'));var csv=require(_0xaa35('0xa'));var ejs=require(_0xaa35('0xb'));var fs=require('fs');var _=require(_0xaa35('0xc'));var squel=require(_0xaa35('0xd'));var crypto=require('crypto');var jsforce=require(_0xaa35('0xe'));var deskjs=require(_0xaa35('0xf'));var toCsv=require(_0xaa35('0xa'));var querystring=require(_0xaa35('0x10'));var Papa=require(_0xaa35('0x11'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0xaa35('0x12'));var logger=require(_0xaa35('0x13'))(_0xaa35('0x14'));var utils=require('../../config/utils');var config=require(_0xaa35('0x15'));var db=require(_0xaa35('0x16'))['db'];function respondWithStatusCode(_0x45b0fc,_0x35cb42){_0x35cb42=_0x35cb42||0xcc;return function(_0x499d08){if(_0x499d08){return _0x45b0fc[_0xaa35('0x17')](_0x35cb42);}return _0x45b0fc[_0xaa35('0x18')](_0x35cb42)[_0xaa35('0x19')]();};}function respondWithResult(_0x30af13,_0x34f6d0){_0x34f6d0=_0x34f6d0||0xc8;return function(_0x192f3d){if(_0x192f3d){return _0x30af13[_0xaa35('0x18')](_0x34f6d0)['json'](_0x192f3d);}};}function respondWithFilteredResult(_0x50ac0d,_0x51c6e6){return function(_0x422218){if(_0x422218){var _0x3069b7=_0x422218[_0xaa35('0x1a')],_0xf121e4=_0x51c6e6[_0xaa35('0x1b')],_0x26ce92=_0x51c6e6[_0xaa35('0x1b')]+_0x51c6e6[_0xaa35('0x1c')],_0x23c47e;if(_0x26ce92>=_0x3069b7){_0x26ce92=_0x3069b7;_0x23c47e=0xc8;}else{_0x23c47e=0xce;}_0x50ac0d['status'](_0x23c47e);return _0x50ac0d[_0xaa35('0x1d')](_0xaa35('0x1e'),_0xf121e4+'-'+_0x26ce92+'/'+_0x3069b7)[_0xaa35('0x1f')](_0x422218);}return null;};}function patchUpdates(_0x2860da){return function(_0x4fab6b){try{jsonpatch[_0xaa35('0x20')](_0x4fab6b,_0x2860da,!![]);}catch(_0x56011a){return BPromise[_0xaa35('0x21')](_0x56011a);}return _0x4fab6b[_0xaa35('0x22')]();};}function saveUpdates(_0x29b3cd,_0x2ec035){return function(_0x443a42){if(_0x443a42){return _0x443a42[_0xaa35('0x23')](_0x29b3cd)[_0xaa35('0x24')](function(_0x1953c3){return _0x1953c3;});}return null;};}function removeEntity(_0x5a676c,_0x46267d){return function(_0x4e3772){if(_0x4e3772){return _0x4e3772[_0xaa35('0x25')]()['then'](function(){_0x5a676c[_0xaa35('0x18')](0xcc)[_0xaa35('0x19')]();});}};}function handleEntityNotFound(_0x1217f5,_0x181209){return function(_0x553da4){if(!_0x553da4){_0x1217f5[_0xaa35('0x17')](0x194);}return _0x553da4;};}function handleError(_0x5a0069,_0x58863e){_0x58863e=_0x58863e||0x1f4;return function(_0x7cf4bc){logger['error'](_0x7cf4bc[_0xaa35('0x26')]);if(_0x7cf4bc['name']){delete _0x7cf4bc[_0xaa35('0x27')];}_0x5a0069[_0xaa35('0x18')](_0x58863e)[_0xaa35('0x28')](_0x7cf4bc);};}exports[_0xaa35('0x29')]=function(_0x43e075,_0x413905){var _0x1969e8={},_0x575dfa={},_0x35d7fe={'count':0x0,'rows':[]};var _0x42caaf=db[_0xaa35('0x2a')][_0xaa35('0x2b')];_0x575dfa[_0xaa35('0x2c')]=_[_0xaa35('0x2d')](_0x42caaf);_0x575dfa[_0xaa35('0x2e')]=_[_0xaa35('0x2d')](_0x43e075[_0xaa35('0x2e')]);_0x575dfa['filters']=_['intersection'](_0x575dfa[_0xaa35('0x2c')],_0x575dfa['query']);_0x1969e8[_0xaa35('0x2f')]=_[_0xaa35('0x30')](_0x575dfa[_0xaa35('0x2c')],qs['fields'](_0x43e075[_0xaa35('0x2e')][_0xaa35('0x31')]));_0x1969e8[_0xaa35('0x2f')]=_0x1969e8[_0xaa35('0x2f')][_0xaa35('0x32')]?_0x1969e8['attributes']:_0x575dfa['model'];if(!_0x43e075[_0xaa35('0x2e')][_0xaa35('0x33')](_0xaa35('0x34'))){_0x1969e8[_0xaa35('0x1c')]=qs['limit'](_0x43e075[_0xaa35('0x2e')][_0xaa35('0x1c')]);_0x1969e8[_0xaa35('0x1b')]=qs[_0xaa35('0x1b')](_0x43e075[_0xaa35('0x2e')]['offset']);}_0x1969e8[_0xaa35('0x35')]=qs[_0xaa35('0x36')](_0x43e075[_0xaa35('0x2e')][_0xaa35('0x36')]);_0x1969e8[_0xaa35('0x37')]=qs[_0xaa35('0x38')](_[_0xaa35('0x39')](_0x43e075[_0xaa35('0x2e')],_0x575dfa[_0xaa35('0x38')]));if(_0x43e075[_0xaa35('0x2e')][_0xaa35('0x3a')]){_0x1969e8[_0xaa35('0x37')]=_['merge'](_0x1969e8[_0xaa35('0x37')],{'$or':_[_0xaa35('0x3b')](_0x42caaf,function(_0x5af387){if(_0x5af387[_0xaa35('0x3c')][_0xaa35('0x3d')]!=='VIRTUAL'){var _0x4746d3={};_0x4746d3[_0x5af387[_0xaa35('0x3e')]]={'$like':'%'+_0x43e075['query']['filter']+'%'};return _0x4746d3;}})});}_0x1969e8=_[_0xaa35('0x3f')]({},_0x1969e8,_0x43e075[_0xaa35('0x40')]);var _0x3a34bd={'where':_0x1969e8[_0xaa35('0x37')]};return db[_0xaa35('0x2a')][_0xaa35('0x1a')](_0x3a34bd)[_0xaa35('0x24')](function(_0x36376e){_0x35d7fe['count']=_0x36376e;if(_0x43e075[_0xaa35('0x2e')][_0xaa35('0x41')]){_0x1969e8[_0xaa35('0x42')]=[{'all':!![]}];}return db[_0xaa35('0x2a')][_0xaa35('0x43')](_0x1969e8);})[_0xaa35('0x24')](function(_0x20e663){_0x35d7fe[_0xaa35('0x44')]=_0x20e663;return _0x35d7fe;})[_0xaa35('0x24')](respondWithFilteredResult(_0x413905,_0x1969e8))[_0xaa35('0x45')](handleError(_0x413905,null));};exports[_0xaa35('0x46')]=function(_0x4c77f1,_0x38064b){var _0x8556f5={'raw':!![],'where':{'id':_0x4c77f1[_0xaa35('0x47')]['id']}},_0x3dd7b4={};_0x3dd7b4[_0xaa35('0x2c')]=_['keys'](db[_0xaa35('0x2a')][_0xaa35('0x2b')]);_0x3dd7b4[_0xaa35('0x2e')]=_[_0xaa35('0x2d')](_0x4c77f1['query']);_0x3dd7b4[_0xaa35('0x38')]=_[_0xaa35('0x30')](_0x3dd7b4[_0xaa35('0x2c')],_0x3dd7b4[_0xaa35('0x2e')]);_0x8556f5['attributes']=_['intersection'](_0x3dd7b4[_0xaa35('0x2c')],qs['fields'](_0x4c77f1[_0xaa35('0x2e')][_0xaa35('0x31')]));_0x8556f5[_0xaa35('0x2f')]=_0x8556f5['attributes'][_0xaa35('0x32')]?_0x8556f5[_0xaa35('0x2f')]:_0x3dd7b4[_0xaa35('0x2c')];if(_0x4c77f1[_0xaa35('0x2e')][_0xaa35('0x41')]){_0x8556f5[_0xaa35('0x42')]=[{'all':!![]}];}_0x8556f5=_[_0xaa35('0x3f')]({},_0x8556f5,_0x4c77f1[_0xaa35('0x40')]);return db[_0xaa35('0x2a')][_0xaa35('0x48')](_0x8556f5)[_0xaa35('0x24')](handleEntityNotFound(_0x38064b,null))[_0xaa35('0x24')](respondWithResult(_0x38064b,null))['catch'](handleError(_0x38064b,null));};exports[_0xaa35('0x49')]=function(_0x2370d9,_0x5b51b0){return db[_0xaa35('0x2a')][_0xaa35('0x49')](_0x2370d9['body'],{})[_0xaa35('0x24')](respondWithResult(_0x5b51b0,0xc9))['catch'](handleError(_0x5b51b0,null));};exports[_0xaa35('0x23')]=function(_0x570177,_0x403ba3){if(_0x570177[_0xaa35('0x4a')]['id']){delete _0x570177[_0xaa35('0x4a')]['id'];}return db['ChatQueueReport'][_0xaa35('0x48')]({'where':{'id':_0x570177[_0xaa35('0x47')]['id']}})[_0xaa35('0x24')](handleEntityNotFound(_0x403ba3,null))[_0xaa35('0x24')](saveUpdates(_0x570177[_0xaa35('0x4a')],null))['then'](respondWithResult(_0x403ba3,null))[_0xaa35('0x45')](handleError(_0x403ba3,null));};exports[_0xaa35('0x25')]=function(_0x115ede,_0xd9a6f1){return db['ChatQueueReport'][_0xaa35('0x48')]({'where':{'id':_0x115ede[_0xaa35('0x47')]['id']}})[_0xaa35('0x24')](handleEntityNotFound(_0xd9a6f1,null))['then'](removeEntity(_0xd9a6f1,null))[_0xaa35('0x45')](handleError(_0xd9a6f1,null));};exports['describe']=function(_0x3d3586,_0x698073){return db['ChatQueueReport'][_0xaa35('0x4b')]()[_0xaa35('0x24')](respondWithResult(_0x698073,null))[_0xaa35('0x45')](handleError(_0x698073,null));};
\ No newline at end of file
+var _0x1716=['save','update','then','destroy','error','stack','send','ChatQueueReport','model','query','keys','filters','intersection','fields','attributes','length','nolimit','limit','order','sort','pick','where','merge','map','type','key','VIRTUAL','field','options','count','include','findAll','rows','catch','params','rawAttributes','includeAll','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','reject'];(function(_0x4c8c87,_0x53b955){var _0x34b970=function(_0x1f9ec4){while(--_0x1f9ec4){_0x4c8c87['push'](_0x4c8c87['shift']());}};_0x34b970(++_0x53b955);}(_0x1716,0x14d));var _0x6171=function(_0x4b7cc4,_0x30ecdc){_0x4b7cc4=_0x4b7cc4-0x0;var _0x284be7=_0x1716[_0x4b7cc4];return _0x284be7;};'use strict';var pdf=require(_0x6171('0x0'));var emlformat=require(_0x6171('0x1'));var rimraf=require(_0x6171('0x2'));var zipdir=require(_0x6171('0x3'));var jsonpatch=require(_0x6171('0x4'));var rp=require(_0x6171('0x5'));var moment=require('moment');var BPromise=require(_0x6171('0x6'));var Mustache=require(_0x6171('0x7'));var util=require('util');var path=require(_0x6171('0x8'));var sox=require(_0x6171('0x9'));var csv=require(_0x6171('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x6171('0xb'));var squel=require(_0x6171('0xc'));var crypto=require(_0x6171('0xd'));var jsforce=require(_0x6171('0xe'));var deskjs=require(_0x6171('0xf'));var toCsv=require('to-csv');var querystring=require(_0x6171('0x10'));var Papa=require(_0x6171('0x11'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0x6171('0x12'));var qs=require(_0x6171('0x13'));var logger=require(_0x6171('0x14'))(_0x6171('0x15'));var utils=require(_0x6171('0x16'));var config=require('../../config/environment');var db=require(_0x6171('0x17'))['db'];function respondWithStatusCode(_0x15927c,_0x4c032d){_0x4c032d=_0x4c032d||0xcc;return function(_0x19477a){if(_0x19477a){return _0x15927c[_0x6171('0x18')](_0x4c032d);}return _0x15927c[_0x6171('0x19')](_0x4c032d)[_0x6171('0x1a')]();};}function respondWithResult(_0x106fce,_0x433888){_0x433888=_0x433888||0xc8;return function(_0x111ce0){if(_0x111ce0){return _0x106fce['status'](_0x433888)[_0x6171('0x1b')](_0x111ce0);}};}function respondWithFilteredResult(_0x3cc3e6,_0x55c256){return function(_0x191807){if(_0x191807){var _0x15d2f2=_0x191807['count'],_0xf0a8da=_0x55c256[_0x6171('0x1c')],_0x2e5ae5=_0x55c256['offset']+_0x55c256['limit'],_0x82371d;if(_0x2e5ae5>=_0x15d2f2){_0x2e5ae5=_0x15d2f2;_0x82371d=0xc8;}else{_0x82371d=0xce;}_0x3cc3e6['status'](_0x82371d);return _0x3cc3e6[_0x6171('0x1d')](_0x6171('0x1e'),_0xf0a8da+'-'+_0x2e5ae5+'/'+_0x15d2f2)[_0x6171('0x1b')](_0x191807);}return null;};}function patchUpdates(_0x51cfce){return function(_0x536fb2){try{jsonpatch['apply'](_0x536fb2,_0x51cfce,!![]);}catch(_0x516c84){return BPromise[_0x6171('0x1f')](_0x516c84);}return _0x536fb2[_0x6171('0x20')]();};}function saveUpdates(_0x85328,_0x47ff02){return function(_0x3b264d){if(_0x3b264d){return _0x3b264d[_0x6171('0x21')](_0x85328)[_0x6171('0x22')](function(_0xd9b2ce){return _0xd9b2ce;});}return null;};}function removeEntity(_0x2b6e03,_0x775664){return function(_0x1cb5a2){if(_0x1cb5a2){return _0x1cb5a2[_0x6171('0x23')]()[_0x6171('0x22')](function(){_0x2b6e03[_0x6171('0x19')](0xcc)[_0x6171('0x1a')]();});}};}function handleEntityNotFound(_0x2eea9d,_0x25acb3){return function(_0x23d18e){if(!_0x23d18e){_0x2eea9d['sendStatus'](0x194);}return _0x23d18e;};}function handleError(_0xdb27b0,_0x6ffece){_0x6ffece=_0x6ffece||0x1f4;return function(_0x4b03c6){logger[_0x6171('0x24')](_0x4b03c6[_0x6171('0x25')]);if(_0x4b03c6['name']){delete _0x4b03c6['name'];}_0xdb27b0['status'](_0x6ffece)[_0x6171('0x26')](_0x4b03c6);};}exports['index']=function(_0x1076b4,_0x39603c){var _0x2bf4d4={},_0x5c2afd={},_0x3c924b={'count':0x0,'rows':[]};var _0x43ee3e=db[_0x6171('0x27')]['rawAttributes'];_0x5c2afd[_0x6171('0x28')]=_['keys'](_0x43ee3e);_0x5c2afd[_0x6171('0x29')]=_[_0x6171('0x2a')](_0x1076b4[_0x6171('0x29')]);_0x5c2afd[_0x6171('0x2b')]=_[_0x6171('0x2c')](_0x5c2afd['model'],_0x5c2afd['query']);_0x2bf4d4['attributes']=_[_0x6171('0x2c')](_0x5c2afd['model'],qs[_0x6171('0x2d')](_0x1076b4['query'][_0x6171('0x2d')]));_0x2bf4d4[_0x6171('0x2e')]=_0x2bf4d4[_0x6171('0x2e')][_0x6171('0x2f')]?_0x2bf4d4[_0x6171('0x2e')]:_0x5c2afd[_0x6171('0x28')];if(!_0x1076b4[_0x6171('0x29')]['hasOwnProperty'](_0x6171('0x30'))){_0x2bf4d4[_0x6171('0x31')]=qs[_0x6171('0x31')](_0x1076b4['query'][_0x6171('0x31')]);_0x2bf4d4[_0x6171('0x1c')]=qs[_0x6171('0x1c')](_0x1076b4[_0x6171('0x29')][_0x6171('0x1c')]);}_0x2bf4d4[_0x6171('0x32')]=qs[_0x6171('0x33')](_0x1076b4[_0x6171('0x29')]['sort']);_0x2bf4d4['where']=qs['filters'](_[_0x6171('0x34')](_0x1076b4[_0x6171('0x29')],_0x5c2afd[_0x6171('0x2b')]));if(_0x1076b4[_0x6171('0x29')]['filter']){_0x2bf4d4[_0x6171('0x35')]=_[_0x6171('0x36')](_0x2bf4d4[_0x6171('0x35')],{'$or':_[_0x6171('0x37')](_0x43ee3e,function(_0x155c23){if(_0x155c23[_0x6171('0x38')][_0x6171('0x39')]!==_0x6171('0x3a')){var _0x145f73={};_0x145f73[_0x155c23[_0x6171('0x3b')]]={'$like':'%'+_0x1076b4[_0x6171('0x29')]['filter']+'%'};return _0x145f73;}})});}_0x2bf4d4=_[_0x6171('0x36')]({},_0x2bf4d4,_0x1076b4[_0x6171('0x3c')]);var _0x47cc6c={'where':_0x2bf4d4[_0x6171('0x35')]};return db[_0x6171('0x27')][_0x6171('0x3d')](_0x47cc6c)[_0x6171('0x22')](function(_0x168eda){_0x3c924b['count']=_0x168eda;if(_0x1076b4[_0x6171('0x29')]['includeAll']){_0x2bf4d4[_0x6171('0x3e')]=[{'all':!![]}];}return db['ChatQueueReport'][_0x6171('0x3f')](_0x2bf4d4);})[_0x6171('0x22')](function(_0x409c34){_0x3c924b[_0x6171('0x40')]=_0x409c34;return _0x3c924b;})[_0x6171('0x22')](respondWithFilteredResult(_0x39603c,_0x2bf4d4))[_0x6171('0x41')](handleError(_0x39603c,null));};exports['show']=function(_0x5344a8,_0x525773){var _0x42469e={'raw':!![],'where':{'id':_0x5344a8[_0x6171('0x42')]['id']}},_0x50f1c6={};_0x50f1c6[_0x6171('0x28')]=_[_0x6171('0x2a')](db[_0x6171('0x27')][_0x6171('0x43')]);_0x50f1c6[_0x6171('0x29')]=_[_0x6171('0x2a')](_0x5344a8['query']);_0x50f1c6[_0x6171('0x2b')]=_[_0x6171('0x2c')](_0x50f1c6[_0x6171('0x28')],_0x50f1c6[_0x6171('0x29')]);_0x42469e[_0x6171('0x2e')]=_['intersection'](_0x50f1c6[_0x6171('0x28')],qs[_0x6171('0x2d')](_0x5344a8[_0x6171('0x29')][_0x6171('0x2d')]));_0x42469e[_0x6171('0x2e')]=_0x42469e[_0x6171('0x2e')][_0x6171('0x2f')]?_0x42469e['attributes']:_0x50f1c6[_0x6171('0x28')];if(_0x5344a8[_0x6171('0x29')][_0x6171('0x44')]){_0x42469e['include']=[{'all':!![]}];}_0x42469e=_[_0x6171('0x36')]({},_0x42469e,_0x5344a8[_0x6171('0x3c')]);return db[_0x6171('0x27')][_0x6171('0x45')](_0x42469e)[_0x6171('0x22')](handleEntityNotFound(_0x525773,null))[_0x6171('0x22')](respondWithResult(_0x525773,null))[_0x6171('0x41')](handleError(_0x525773,null));};exports[_0x6171('0x46')]=function(_0x5be7fb,_0x3eda5c){return db[_0x6171('0x27')][_0x6171('0x46')](_0x5be7fb[_0x6171('0x47')],{})[_0x6171('0x22')](respondWithResult(_0x3eda5c,0xc9))[_0x6171('0x41')](handleError(_0x3eda5c,null));};exports['update']=function(_0x56281c,_0x91b2ee){if(_0x56281c['body']['id']){delete _0x56281c['body']['id'];}return db['ChatQueueReport']['find']({'where':{'id':_0x56281c[_0x6171('0x42')]['id']}})[_0x6171('0x22')](handleEntityNotFound(_0x91b2ee,null))[_0x6171('0x22')](saveUpdates(_0x56281c[_0x6171('0x47')],null))[_0x6171('0x22')](respondWithResult(_0x91b2ee,null))['catch'](handleError(_0x91b2ee,null));};exports[_0x6171('0x23')]=function(_0x40fcc6,_0x160993){return db[_0x6171('0x27')][_0x6171('0x45')]({'where':{'id':_0x40fcc6[_0x6171('0x42')]['id']}})[_0x6171('0x22')](handleEntityNotFound(_0x160993,null))[_0x6171('0x22')](removeEntity(_0x160993,null))[_0x6171('0x41')](handleError(_0x160993,null));};exports[_0x6171('0x48')]=function(_0x14ac26,_0x5c8f82){return db[_0x6171('0x27')][_0x6171('0x48')]()['then'](respondWithResult(_0x5c8f82,null))[_0x6171('0x41')](handleError(_0x5c8f82,null));};
\ No newline at end of file
index 5eeca9e..67c249a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x55ca=['request-promise','exports','define','ChatQueueReport','report_chat_queue','uniqueid','lodash','util','bluebird'];(function(_0x26d6d9,_0x431cb8){var _0x1b4875=function(_0x41111f){while(--_0x41111f){_0x26d6d9['push'](_0x26d6d9['shift']());}};_0x1b4875(++_0x431cb8);}(_0x55ca,0x126));var _0xa55c=function(_0x132844,_0x98bc49){_0x132844=_0x132844-0x0;var _0x13c26f=_0x55ca[_0x132844];return _0x13c26f;};'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 attributes=require('./chatQueueReport.attributes');module[_0xa55c('0x4')]=function(_0x2db02a,_0xcb02e3){return _0x2db02a[_0xa55c('0x5')](_0xa55c('0x6'),attributes,{'tableName':_0xa55c('0x7'),'paranoid':![],'indexes':[{'name':_0xa55c('0x8'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x9957=['ChatQueueReport','report_chat_queue','uniqueid','lodash','util','../../config/logger','api','bluebird','request-promise','./chatQueueReport.attributes','exports','define'];(function(_0x158c5b,_0x12db1d){var _0x2a8031=function(_0x1945ca){while(--_0x1945ca){_0x158c5b['push'](_0x158c5b['shift']());}};_0x2a8031(++_0x12db1d);}(_0x9957,0x93));var _0x7995=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x9957[_0x6c993a];return _0x27f547;};'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 attributes=require(_0x7995('0x6'));module[_0x7995('0x7')]=function(_0x576d89,_0x744bea){return _0x576d89[_0x7995('0x8')](_0x7995('0x9'),attributes,{'tableName':_0x7995('0xa'),'paranoid':![],'indexes':[{'name':_0x7995('0xb'),'fields':[_0x7995('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 60bca98..e3e12be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c53=['raw','UpdateChatQueueReport','update','where','attributes','limit','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','request','then','debug','request\x20sent','stringify','error','code','ChatQueueReport,\x20%s,\x20%s','message','info','catch','CreateChatQueueReport','ChatQueueReport','create','body','options'];(function(_0x4f92ab,_0x2f7cf1){var _0x3f8091=function(_0x1f5afa){while(--_0x1f5afa){_0x4f92ab['push'](_0x4f92ab['shift']());}};_0x3f8091(++_0x2f7cf1);}(_0x4c53,0x126));var _0x34c5=function(_0x38e72f,_0x915c50){_0x38e72f=_0x38e72f-0x0;var _0x3f5df6=_0x4c53[_0x38e72f];return _0x3f5df6;};'use strict';var _=require(_0x34c5('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x34c5('0x1'));var rs=require(_0x34c5('0x2'));var fs=require('fs');var Redis=require(_0x34c5('0x3'));var db=require(_0x34c5('0x4'))['db'];var utils=require(_0x34c5('0x5'));var logger=require(_0x34c5('0x6'))(_0x34c5('0x7'));var config=require(_0x34c5('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0x34c5('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x179992,_0x1fbdca,_0x46d37e){return new BPromise(function(_0x1c01d7,_0x4a2ecf){return client[_0x34c5('0xa')](_0x179992,_0x46d37e)[_0x34c5('0xb')](function(_0x2c7b61){logger['info']('ChatQueueReport,\x20%s,\x20%s',_0x1fbdca,'request\x20sent');logger[_0x34c5('0xc')]('ChatQueueReport,\x20%s,\x20%s,\x20%s',_0x1fbdca,_0x34c5('0xd'),JSON[_0x34c5('0xe')](_0x2c7b61));if(_0x2c7b61[_0x34c5('0xf')]){if(_0x2c7b61[_0x34c5('0xf')][_0x34c5('0x10')]===0x1f4){logger['error'](_0x34c5('0x11'),_0x1fbdca,_0x2c7b61[_0x34c5('0xf')][_0x34c5('0x12')]);return _0x4a2ecf(_0x2c7b61[_0x34c5('0xf')]['message']);}logger[_0x34c5('0xf')]('ChatQueueReport,\x20%s,\x20%s',_0x1fbdca,_0x2c7b61[_0x34c5('0xf')][_0x34c5('0x12')]);return _0x1c01d7(_0x2c7b61['error']['message']);}else{logger[_0x34c5('0x13')](_0x34c5('0x11'),_0x1fbdca,_0x34c5('0xd'));_0x1c01d7(_0x2c7b61['result']['message']);}})[_0x34c5('0x14')](function(_0x43ae77){logger[_0x34c5('0xf')](_0x34c5('0x11'),_0x1fbdca,_0x43ae77);_0x4a2ecf(_0x43ae77);});});}exports[_0x34c5('0x15')]=function(_0x5f1052){var _0x372359=this;return new Promise(function(_0x105b54,_0x371977){return db[_0x34c5('0x16')][_0x34c5('0x17')](_0x5f1052[_0x34c5('0x18')],{'raw':_0x5f1052[_0x34c5('0x19')]?_0x5f1052['options'][_0x34c5('0x1a')]===undefined?!![]:![]:!![]})['then'](function(_0x1f604c){logger[_0x34c5('0x13')]('CreateChatQueueReport',_0x5f1052);logger[_0x34c5('0xc')]('CreateChatQueueReport',_0x5f1052,JSON[_0x34c5('0xe')](_0x1f604c));_0x105b54(_0x1f604c);})[_0x34c5('0x14')](function(_0xe93ef6){logger[_0x34c5('0xf')](_0x34c5('0x15'),_0xe93ef6[_0x34c5('0x12')],_0x5f1052);_0x371977(_0x372359[_0x34c5('0xf')](0x1f4,_0xe93ef6[_0x34c5('0x12')]));});});};exports[_0x34c5('0x1b')]=function(_0x5d61f7){var _0x57d689=this;return new Promise(function(_0x129f04,_0x471666){return db[_0x34c5('0x16')][_0x34c5('0x1c')](_0x5d61f7[_0x34c5('0x18')],{'raw':_0x5d61f7[_0x34c5('0x19')]?_0x5d61f7[_0x34c5('0x19')][_0x34c5('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5d61f7[_0x34c5('0x19')]?_0x5d61f7[_0x34c5('0x19')][_0x34c5('0x1d')]||null:null,'attributes':_0x5d61f7[_0x34c5('0x19')]?_0x5d61f7['options'][_0x34c5('0x1e')]||null:null,'limit':_0x5d61f7[_0x34c5('0x19')]?_0x5d61f7[_0x34c5('0x19')][_0x34c5('0x1f')]||null:null})['then'](function(_0x1894b6){logger['info'](_0x34c5('0x1b'),_0x5d61f7);logger[_0x34c5('0xc')]('UpdateChatQueueReport',_0x5d61f7,JSON[_0x34c5('0xe')](_0x1894b6));_0x129f04(_0x1894b6);})[_0x34c5('0x14')](function(_0x2ba05f){logger['error'](_0x34c5('0x1b'),_0x2ba05f[_0x34c5('0x12')],_0x5d61f7);_0x471666(_0x57d689[_0x34c5('0xf')](0x1f4,_0x2ba05f[_0x34c5('0x12')]));});});};
\ No newline at end of file
+var _0xbc11=['client','http','request','info','ChatQueueReport,\x20%s,\x20%s','debug','ChatQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','CreateChatQueueReport','ChatQueueReport','create','options','raw','update','body','attributes','limit','then','UpdateChatQueueReport','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0x609988,_0x507944){var _0x159984=function(_0x39d9ce){while(--_0x39d9ce){_0x609988['push'](_0x609988['shift']());}};_0x159984(++_0x507944);}(_0xbc11,0x14a));var _0x1bc1=function(_0x2b2796,_0x5ef78c){_0x2b2796=_0x2b2796-0x0;var _0x5517ab=_0xbc11[_0x2b2796];return _0x5517ab;};'use strict';var _=require(_0x1bc1('0x0'));var util=require(_0x1bc1('0x1'));var moment=require('moment');var BPromise=require(_0x1bc1('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x1bc1('0x3'));var db=require(_0x1bc1('0x4'))['db'];var utils=require(_0x1bc1('0x5'));var logger=require(_0x1bc1('0x6'))(_0x1bc1('0x7'));var config=require(_0x1bc1('0x8'));var jayson=require(_0x1bc1('0x9'));var client=jayson[_0x1bc1('0xa')][_0x1bc1('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x505962,_0x30f5af,_0xb7ddd3){return new BPromise(function(_0x3bfd71,_0x104ac0){return client[_0x1bc1('0xc')](_0x505962,_0xb7ddd3)['then'](function(_0x29c14b){logger[_0x1bc1('0xd')](_0x1bc1('0xe'),_0x30f5af,'request\x20sent');logger[_0x1bc1('0xf')](_0x1bc1('0x10'),_0x30f5af,_0x1bc1('0x11'),JSON[_0x1bc1('0x12')](_0x29c14b));if(_0x29c14b[_0x1bc1('0x13')]){if(_0x29c14b[_0x1bc1('0x13')][_0x1bc1('0x14')]===0x1f4){logger[_0x1bc1('0x13')]('ChatQueueReport,\x20%s,\x20%s',_0x30f5af,_0x29c14b[_0x1bc1('0x13')][_0x1bc1('0x15')]);return _0x104ac0(_0x29c14b[_0x1bc1('0x13')]['message']);}logger[_0x1bc1('0x13')](_0x1bc1('0xe'),_0x30f5af,_0x29c14b['error'][_0x1bc1('0x15')]);return _0x3bfd71(_0x29c14b['error']['message']);}else{logger[_0x1bc1('0xd')](_0x1bc1('0xe'),_0x30f5af,_0x1bc1('0x11'));_0x3bfd71(_0x29c14b['result'][_0x1bc1('0x15')]);}})[_0x1bc1('0x16')](function(_0xd300df){logger[_0x1bc1('0x13')]('ChatQueueReport,\x20%s,\x20%s',_0x30f5af,_0xd300df);_0x104ac0(_0xd300df);});});}exports[_0x1bc1('0x17')]=function(_0x3ea608){var _0x5bdad6=this;return new Promise(function(_0x474f3a,_0x52cd14){return db[_0x1bc1('0x18')][_0x1bc1('0x19')](_0x3ea608['body'],{'raw':_0x3ea608[_0x1bc1('0x1a')]?_0x3ea608[_0x1bc1('0x1a')][_0x1bc1('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x16ad07){logger[_0x1bc1('0xd')]('CreateChatQueueReport',_0x3ea608);logger[_0x1bc1('0xf')](_0x1bc1('0x17'),_0x3ea608,JSON['stringify'](_0x16ad07));_0x474f3a(_0x16ad07);})[_0x1bc1('0x16')](function(_0x338953){logger[_0x1bc1('0x13')](_0x1bc1('0x17'),_0x338953['message'],_0x3ea608);_0x52cd14(_0x5bdad6[_0x1bc1('0x13')](0x1f4,_0x338953[_0x1bc1('0x15')]));});});};exports['UpdateChatQueueReport']=function(_0x5b7040){var _0xe15168=this;return new Promise(function(_0x253c24,_0x1ac29a){return db[_0x1bc1('0x18')][_0x1bc1('0x1c')](_0x5b7040[_0x1bc1('0x1d')],{'raw':_0x5b7040[_0x1bc1('0x1a')]?_0x5b7040[_0x1bc1('0x1a')][_0x1bc1('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5b7040['options']?_0x5b7040[_0x1bc1('0x1a')]['where']||null:null,'attributes':_0x5b7040['options']?_0x5b7040['options'][_0x1bc1('0x1e')]||null:null,'limit':_0x5b7040[_0x1bc1('0x1a')]?_0x5b7040[_0x1bc1('0x1a')][_0x1bc1('0x1f')]||null:null})[_0x1bc1('0x20')](function(_0x29fdf1){logger[_0x1bc1('0xd')]('UpdateChatQueueReport',_0x5b7040);logger[_0x1bc1('0xf')](_0x1bc1('0x21'),_0x5b7040,JSON['stringify'](_0x29fdf1));_0x253c24(_0x29fdf1);})['catch'](function(_0x51b973){logger[_0x1bc1('0x13')](_0x1bc1('0x21'),_0x51b973['message'],_0x5b7040);_0x1ac29a(_0xe15168[_0x1bc1('0x13')](0x1f4,_0x51b973[_0x1bc1('0x15')]));});});};
\ No newline at end of file
index 48b1ed3..b6cdce2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda33=['isAuthenticated','/describe','describe','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatQueueReport.controller','get'];(function(_0x44f9e2,_0x4eafc0){var _0x6b7eb8=function(_0x5b4bcb){while(--_0x5b4bcb){_0x44f9e2['push'](_0x44f9e2['shift']());}};_0x6b7eb8(++_0x4eafc0);}(_0xda33,0x64));var _0x3da3=function(_0x44188a,_0x2a7376){_0x44188a=_0x44188a-0x0;var _0x1a4d26=_0xda33[_0x44188a];return _0x1a4d26;};'use strict';var multer=require(_0x3da3('0x0'));var util=require(_0x3da3('0x1'));var path=require(_0x3da3('0x2'));var timeout=require(_0x3da3('0x3'));var express=require('express');var router=express[_0x3da3('0x4')]();var auth=require(_0x3da3('0x5'));var interaction=require(_0x3da3('0x6'));var config=require(_0x3da3('0x7'));var controller=require(_0x3da3('0x8'));router[_0x3da3('0x9')]('/',auth[_0x3da3('0xa')](),controller['index']);router[_0x3da3('0x9')](_0x3da3('0xb'),auth[_0x3da3('0xa')](),controller[_0x3da3('0xc')]);router[_0x3da3('0x9')](_0x3da3('0xd'),auth['isAuthenticated'](),controller[_0x3da3('0xe')]);router[_0x3da3('0xf')]('/',auth[_0x3da3('0xa')](),controller[_0x3da3('0x10')]);router[_0x3da3('0x11')]('/:id',auth[_0x3da3('0xa')](),controller[_0x3da3('0x12')]);router[_0x3da3('0x13')](_0x3da3('0xd'),auth[_0x3da3('0xa')](),controller[_0x3da3('0x14')]);module[_0x3da3('0x15')]=router;
\ No newline at end of file
+var _0x2453=['create','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatQueueReport.controller','isAuthenticated','index','/describe','describe','get','/:id','post'];(function(_0x4ca855,_0xf90f63){var _0x829eaf=function(_0xce9e1e){while(--_0xce9e1e){_0x4ca855['push'](_0x4ca855['shift']());}};_0x829eaf(++_0xf90f63);}(_0x2453,0x144));var _0x3245=function(_0x24ee28,_0x586986){_0x24ee28=_0x24ee28-0x0;var _0x3381d0=_0x2453[_0x24ee28];return _0x3381d0;};'use strict';var multer=require(_0x3245('0x0'));var util=require(_0x3245('0x1'));var path=require(_0x3245('0x2'));var timeout=require(_0x3245('0x3'));var express=require('express');var router=express[_0x3245('0x4')]();var auth=require(_0x3245('0x5'));var interaction=require(_0x3245('0x6'));var config=require(_0x3245('0x7'));var controller=require(_0x3245('0x8'));router['get']('/',auth[_0x3245('0x9')](),controller[_0x3245('0xa')]);router['get'](_0x3245('0xb'),auth[_0x3245('0x9')](),controller[_0x3245('0xc')]);router[_0x3245('0xd')](_0x3245('0xe'),auth[_0x3245('0x9')](),controller['show']);router[_0x3245('0xf')]('/',auth['isAuthenticated'](),controller[_0x3245('0x10')]);router['put'](_0x3245('0xe'),auth[_0x3245('0x9')](),controller[_0x3245('0x11')]);router[_0x3245('0x12')](_0x3245('0xe'),auth[_0x3245('0x9')](),controller['destroy']);module[_0x3245('0x13')]=router;
\ No newline at end of file
index 0eaaf3f..ba04220 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1139=['moment','sequelize','exports','STRING','ENUM','account','agent','queue','NOW'];(function(_0x4b7fdc,_0x3e29ce){var _0x32a791=function(_0x387c32){while(--_0x387c32){_0x4b7fdc['push'](_0x4b7fdc['shift']());}};_0x32a791(++_0x3e29ce);}(_0x1139,0xcf));var _0x9113=function(_0x8c43de,_0x90ff31){_0x8c43de=_0x8c43de-0x0;var _0xa6591b=_0x1139[_0x8c43de];return _0xa6591b;};'use strict';var moment=require(_0x9113('0x0'));var Sequelize=require(_0x9113('0x1'));module[_0x9113('0x2')]={'uniqueid':{'type':Sequelize[_0x9113('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x9113('0x4')](_0x9113('0x5'),_0x9113('0x6'),_0x9113('0x7')),'allowNull':![],'defaultValue':_0x9113('0x7')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0x9113('0x8')]}};
\ No newline at end of file
+var _0x4152=['NOW','moment','sequelize','exports','STRING','account','agent','queue','DATE'];(function(_0x4deff,_0x42c328){var _0x440123=function(_0x2d7dde){while(--_0x2d7dde){_0x4deff['push'](_0x4deff['shift']());}};_0x440123(++_0x42c328);}(_0x4152,0x145));var _0x2415=function(_0x333fc8,_0x2b292c){_0x333fc8=_0x333fc8-0x0;var _0x432439=_0x4152[_0x333fc8];return _0x432439;};'use strict';var moment=require(_0x2415('0x0'));var Sequelize=require(_0x2415('0x1'));module[_0x2415('0x2')]={'uniqueid':{'type':Sequelize[_0x2415('0x3')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0x2415('0x4'),_0x2415('0x5'),_0x2415('0x6')),'allowNull':![],'defaultValue':_0x2415('0x6')},'transferredAt':{'type':Sequelize[_0x2415('0x7')],'allowNull':![],'defaultValue':Sequelize[_0x2415('0x8')]}};
\ No newline at end of file
index c150e67..8747835 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe6f1=['../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','error','name','send','index','ChatTransferReport','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','filters','pick','where','map','type','field','options','includeAll','include','findAll','rows','catch','show','params','merge','find','create','body','destroy','describe','html-pdf','rimraf','fast-json-patch','moment','mustache','util','path','sox','to-csv','jsforce','desk.js','querystring','papaparse','../../components/auth/service'];(function(_0x460b48,_0x50bfd7){var _0x35a827=function(_0xec5739){while(--_0xec5739){_0x460b48['push'](_0x460b48['shift']());}};_0x35a827(++_0x50bfd7);}(_0xe6f1,0x19c));var _0x1e6f=function(_0x56b886,_0x1ff474){_0x56b886=_0x56b886-0x0;var _0x164baf=_0xe6f1[_0x56b886];return _0x164baf;};'use strict';var pdf=require(_0x1e6f('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x1e6f('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x1e6f('0x2'));var rp=require('request-promise');var moment=require(_0x1e6f('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x1e6f('0x4'));var util=require(_0x1e6f('0x5'));var path=require(_0x1e6f('0x6'));var sox=require(_0x1e6f('0x7'));var csv=require(_0x1e6f('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x1e6f('0x9'));var deskjs=require(_0x1e6f('0xa'));var toCsv=require('to-csv');var querystring=require(_0x1e6f('0xb'));var Papa=require(_0x1e6f('0xc'));var authService=require(_0x1e6f('0xd'));var hardwareService=require(_0x1e6f('0xe'));var Redis=require('ioredis');var qs=require(_0x1e6f('0xf'));var logger=require('../../config/logger')(_0x1e6f('0x10'));var utils=require(_0x1e6f('0x11'));var config=require(_0x1e6f('0x12'));var db=require(_0x1e6f('0x13'))['db'];function respondWithStatusCode(_0x4b634f,_0x11692f){_0x11692f=_0x11692f||0xcc;return function(_0x4ab83a){if(_0x4ab83a){return _0x4b634f[_0x1e6f('0x14')](_0x11692f);}return _0x4b634f[_0x1e6f('0x15')](_0x11692f)[_0x1e6f('0x16')]();};}function respondWithResult(_0x40356b,_0x910c27){_0x910c27=_0x910c27||0xc8;return function(_0x4f2cf0){if(_0x4f2cf0){return _0x40356b[_0x1e6f('0x15')](_0x910c27)[_0x1e6f('0x17')](_0x4f2cf0);}};}function respondWithFilteredResult(_0x63fa5a,_0x370b28){return function(_0x344930){if(_0x344930){var _0x26b192=_0x344930[_0x1e6f('0x18')],_0x1deb79=_0x370b28['offset'],_0x344672=_0x370b28[_0x1e6f('0x19')]+_0x370b28[_0x1e6f('0x1a')],_0x4045a4;if(_0x344672>=_0x26b192){_0x344672=_0x26b192;_0x4045a4=0xc8;}else{_0x4045a4=0xce;}_0x63fa5a[_0x1e6f('0x15')](_0x4045a4);return _0x63fa5a[_0x1e6f('0x1b')](_0x1e6f('0x1c'),_0x1deb79+'-'+_0x344672+'/'+_0x26b192)['json'](_0x344930);}return null;};}function patchUpdates(_0x33f66b){return function(_0x334146){try{jsonpatch[_0x1e6f('0x1d')](_0x334146,_0x33f66b,!![]);}catch(_0x18574b){return BPromise[_0x1e6f('0x1e')](_0x18574b);}return _0x334146[_0x1e6f('0x1f')]();};}function saveUpdates(_0x23a952,_0x32b6be){return function(_0x323bc8){if(_0x323bc8){return _0x323bc8[_0x1e6f('0x20')](_0x23a952)[_0x1e6f('0x21')](function(_0x59bffe){return _0x59bffe;});}return null;};}function removeEntity(_0x448975,_0x9078c4){return function(_0x36f8fd){if(_0x36f8fd){return _0x36f8fd['destroy']()[_0x1e6f('0x21')](function(){_0x448975[_0x1e6f('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1f157e,_0x192365){return function(_0x2656fd){if(!_0x2656fd){_0x1f157e[_0x1e6f('0x14')](0x194);}return _0x2656fd;};}function handleError(_0x48df6d,_0x335205){_0x335205=_0x335205||0x1f4;return function(_0x2479d1){logger[_0x1e6f('0x22')](_0x2479d1['stack']);if(_0x2479d1['name']){delete _0x2479d1[_0x1e6f('0x23')];}_0x48df6d[_0x1e6f('0x15')](_0x335205)[_0x1e6f('0x24')](_0x2479d1);};}exports[_0x1e6f('0x25')]=function(_0x237cc8,_0x2a5d81){var _0x100684={},_0x3a856e={},_0x5caa63={'count':0x0,'rows':[]};var _0x48cbd4=db[_0x1e6f('0x26')][_0x1e6f('0x27')];_0x3a856e[_0x1e6f('0x28')]=_[_0x1e6f('0x29')](_0x48cbd4);_0x3a856e[_0x1e6f('0x2a')]=_[_0x1e6f('0x29')](_0x237cc8[_0x1e6f('0x2a')]);_0x3a856e['filters']=_[_0x1e6f('0x2b')](_0x3a856e['model'],_0x3a856e[_0x1e6f('0x2a')]);_0x100684[_0x1e6f('0x2c')]=_[_0x1e6f('0x2b')](_0x3a856e['model'],qs[_0x1e6f('0x2d')](_0x237cc8[_0x1e6f('0x2a')][_0x1e6f('0x2d')]));_0x100684[_0x1e6f('0x2c')]=_0x100684['attributes'][_0x1e6f('0x2e')]?_0x100684[_0x1e6f('0x2c')]:_0x3a856e[_0x1e6f('0x28')];if(!_0x237cc8['query'][_0x1e6f('0x2f')](_0x1e6f('0x30'))){_0x100684[_0x1e6f('0x1a')]=qs[_0x1e6f('0x1a')](_0x237cc8[_0x1e6f('0x2a')][_0x1e6f('0x1a')]);_0x100684[_0x1e6f('0x19')]=qs[_0x1e6f('0x19')](_0x237cc8[_0x1e6f('0x2a')][_0x1e6f('0x19')]);}_0x100684[_0x1e6f('0x31')]=qs[_0x1e6f('0x32')](_0x237cc8[_0x1e6f('0x2a')]['sort']);_0x100684['where']=qs[_0x1e6f('0x33')](_[_0x1e6f('0x34')](_0x237cc8[_0x1e6f('0x2a')],_0x3a856e['filters']));if(_0x237cc8[_0x1e6f('0x2a')]['filter']){_0x100684[_0x1e6f('0x35')]=_['merge'](_0x100684[_0x1e6f('0x35')],{'$or':_[_0x1e6f('0x36')](_0x48cbd4,function(_0x204898){if(_0x204898[_0x1e6f('0x37')]['key']!=='VIRTUAL'){var _0x13fbeb={};_0x13fbeb[_0x204898[_0x1e6f('0x38')]]={'$like':'%'+_0x237cc8[_0x1e6f('0x2a')]['filter']+'%'};return _0x13fbeb;}})});}_0x100684=_['merge']({},_0x100684,_0x237cc8[_0x1e6f('0x39')]);var _0xc2abbe={'where':_0x100684[_0x1e6f('0x35')]};return db[_0x1e6f('0x26')][_0x1e6f('0x18')](_0xc2abbe)[_0x1e6f('0x21')](function(_0x4a78e4){_0x5caa63[_0x1e6f('0x18')]=_0x4a78e4;if(_0x237cc8[_0x1e6f('0x2a')][_0x1e6f('0x3a')]){_0x100684[_0x1e6f('0x3b')]=[{'all':!![]}];}return db[_0x1e6f('0x26')][_0x1e6f('0x3c')](_0x100684);})[_0x1e6f('0x21')](function(_0x1ec6f0){_0x5caa63[_0x1e6f('0x3d')]=_0x1ec6f0;return _0x5caa63;})[_0x1e6f('0x21')](respondWithFilteredResult(_0x2a5d81,_0x100684))[_0x1e6f('0x3e')](handleError(_0x2a5d81,null));};exports[_0x1e6f('0x3f')]=function(_0x35b679,_0x5168ed){var _0x52e4db={'raw':!![],'where':{'id':_0x35b679[_0x1e6f('0x40')]['id']}},_0x1e39bf={};_0x1e39bf['model']=_[_0x1e6f('0x29')](db[_0x1e6f('0x26')][_0x1e6f('0x27')]);_0x1e39bf[_0x1e6f('0x2a')]=_[_0x1e6f('0x29')](_0x35b679[_0x1e6f('0x2a')]);_0x1e39bf[_0x1e6f('0x33')]=_[_0x1e6f('0x2b')](_0x1e39bf['model'],_0x1e39bf['query']);_0x52e4db[_0x1e6f('0x2c')]=_[_0x1e6f('0x2b')](_0x1e39bf[_0x1e6f('0x28')],qs[_0x1e6f('0x2d')](_0x35b679[_0x1e6f('0x2a')][_0x1e6f('0x2d')]));_0x52e4db[_0x1e6f('0x2c')]=_0x52e4db['attributes'][_0x1e6f('0x2e')]?_0x52e4db[_0x1e6f('0x2c')]:_0x1e39bf[_0x1e6f('0x28')];if(_0x35b679['query'][_0x1e6f('0x3a')]){_0x52e4db[_0x1e6f('0x3b')]=[{'all':!![]}];}_0x52e4db=_[_0x1e6f('0x41')]({},_0x52e4db,_0x35b679[_0x1e6f('0x39')]);return db[_0x1e6f('0x26')][_0x1e6f('0x42')](_0x52e4db)['then'](handleEntityNotFound(_0x5168ed,null))[_0x1e6f('0x21')](respondWithResult(_0x5168ed,null))['catch'](handleError(_0x5168ed,null));};exports[_0x1e6f('0x43')]=function(_0x24472f,_0x37f001){return db[_0x1e6f('0x26')]['create'](_0x24472f[_0x1e6f('0x44')],{})[_0x1e6f('0x21')](respondWithResult(_0x37f001,0xc9))[_0x1e6f('0x3e')](handleError(_0x37f001,null));};exports['update']=function(_0xc6f048,_0xc13efe){if(_0xc6f048['body']['id']){delete _0xc6f048[_0x1e6f('0x44')]['id'];}return db[_0x1e6f('0x26')][_0x1e6f('0x42')]({'where':{'id':_0xc6f048[_0x1e6f('0x40')]['id']}})[_0x1e6f('0x21')](handleEntityNotFound(_0xc13efe,null))[_0x1e6f('0x21')](saveUpdates(_0xc6f048['body'],null))[_0x1e6f('0x21')](respondWithResult(_0xc13efe,null))['catch'](handleError(_0xc13efe,null));};exports[_0x1e6f('0x45')]=function(_0x1ff109,_0x4df943){return db[_0x1e6f('0x26')][_0x1e6f('0x42')]({'where':{'id':_0x1ff109[_0x1e6f('0x40')]['id']}})[_0x1e6f('0x21')](handleEntityNotFound(_0x4df943,null))[_0x1e6f('0x21')](removeEntity(_0x4df943,null))[_0x1e6f('0x3e')](handleError(_0x4df943,null));};exports[_0x1e6f('0x46')]=function(_0xe03454,_0x3e6796){return db[_0x1e6f('0x26')]['describe']()[_0x1e6f('0x21')](respondWithResult(_0x3e6796,null))['catch'](handleError(_0x3e6796,null));};
\ No newline at end of file
+var _0x5ed0=['request-promise','moment','bluebird','mustache','path','ejs','lodash','squel','crypto','jsforce','to-csv','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','json','offset','status','Content-Range','reject','save','update','destroy','sendStatus','name','send','index','rawAttributes','keys','query','intersection','attributes','model','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','pick','filter','map','VIRTUAL','field','merge','options','ChatTransferReport','count','then','includeAll','include','findAll','rows','catch','params','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch'];(function(_0x35885a,_0x42fed7){var _0xe86249=function(_0x98edb3){while(--_0x98edb3){_0x35885a['push'](_0x35885a['shift']());}};_0xe86249(++_0x42fed7);}(_0x5ed0,0xcb));var _0x05ed=function(_0x54982f,_0x1a8c72){_0x54982f=_0x54982f-0x0;var _0x10e36a=_0x5ed0[_0x54982f];return _0x10e36a;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x05ed('0x0'));var rimraf=require(_0x05ed('0x1'));var zipdir=require(_0x05ed('0x2'));var jsonpatch=require(_0x05ed('0x3'));var rp=require(_0x05ed('0x4'));var moment=require(_0x05ed('0x5'));var BPromise=require(_0x05ed('0x6'));var Mustache=require(_0x05ed('0x7'));var util=require('util');var path=require(_0x05ed('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x05ed('0x9'));var fs=require('fs');var _=require(_0x05ed('0xa'));var squel=require(_0x05ed('0xb'));var crypto=require(_0x05ed('0xc'));var jsforce=require(_0x05ed('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x05ed('0xe'));var querystring=require('querystring');var Papa=require(_0x05ed('0xf'));var authService=require(_0x05ed('0x10'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x05ed('0x11'));var qs=require(_0x05ed('0x12'));var logger=require('../../config/logger')(_0x05ed('0x13'));var utils=require(_0x05ed('0x14'));var config=require(_0x05ed('0x15'));var db=require(_0x05ed('0x16'))['db'];function respondWithStatusCode(_0x1b3a61,_0x9dc03c){_0x9dc03c=_0x9dc03c||0xcc;return function(_0x2dec9f){if(_0x2dec9f){return _0x1b3a61['sendStatus'](_0x9dc03c);}return _0x1b3a61['status'](_0x9dc03c)['end']();};}function respondWithResult(_0x1dd501,_0x3d6273){_0x3d6273=_0x3d6273||0xc8;return function(_0x38f438){if(_0x38f438){return _0x1dd501['status'](_0x3d6273)[_0x05ed('0x17')](_0x38f438);}};}function respondWithFilteredResult(_0x22aa5c,_0x432d36){return function(_0x396c5f){if(_0x396c5f){var _0x5cc174=_0x396c5f['count'],_0x3b901f=_0x432d36[_0x05ed('0x18')],_0x3ccf0b=_0x432d36[_0x05ed('0x18')]+_0x432d36['limit'],_0x19dcff;if(_0x3ccf0b>=_0x5cc174){_0x3ccf0b=_0x5cc174;_0x19dcff=0xc8;}else{_0x19dcff=0xce;}_0x22aa5c[_0x05ed('0x19')](_0x19dcff);return _0x22aa5c['set'](_0x05ed('0x1a'),_0x3b901f+'-'+_0x3ccf0b+'/'+_0x5cc174)[_0x05ed('0x17')](_0x396c5f);}return null;};}function patchUpdates(_0x18e122){return function(_0x519124){try{jsonpatch['apply'](_0x519124,_0x18e122,!![]);}catch(_0xac60ea){return BPromise[_0x05ed('0x1b')](_0xac60ea);}return _0x519124[_0x05ed('0x1c')]();};}function saveUpdates(_0x1bdf4d,_0x397a45){return function(_0x3b023c){if(_0x3b023c){return _0x3b023c[_0x05ed('0x1d')](_0x1bdf4d)['then'](function(_0x1cc4fb){return _0x1cc4fb;});}return null;};}function removeEntity(_0x3ba2a5,_0x13eba9){return function(_0x5002b0){if(_0x5002b0){return _0x5002b0[_0x05ed('0x1e')]()['then'](function(){_0x3ba2a5[_0x05ed('0x19')](0xcc)['end']();});}};}function handleEntityNotFound(_0x48a8b1,_0x52fece){return function(_0x534041){if(!_0x534041){_0x48a8b1[_0x05ed('0x1f')](0x194);}return _0x534041;};}function handleError(_0x278678,_0x3acd60){_0x3acd60=_0x3acd60||0x1f4;return function(_0x45e18e){logger['error'](_0x45e18e['stack']);if(_0x45e18e[_0x05ed('0x20')]){delete _0x45e18e[_0x05ed('0x20')];}_0x278678[_0x05ed('0x19')](_0x3acd60)[_0x05ed('0x21')](_0x45e18e);};}exports[_0x05ed('0x22')]=function(_0x3c8516,_0x238d10){var _0x141c8f={},_0x41e6d1={},_0x5cecf7={'count':0x0,'rows':[]};var _0x59b2cd=db['ChatTransferReport'][_0x05ed('0x23')];_0x41e6d1['model']=_[_0x05ed('0x24')](_0x59b2cd);_0x41e6d1[_0x05ed('0x25')]=_[_0x05ed('0x24')](_0x3c8516['query']);_0x41e6d1['filters']=_[_0x05ed('0x26')](_0x41e6d1['model'],_0x41e6d1[_0x05ed('0x25')]);_0x141c8f[_0x05ed('0x27')]=_[_0x05ed('0x26')](_0x41e6d1[_0x05ed('0x28')],qs[_0x05ed('0x29')](_0x3c8516[_0x05ed('0x25')]['fields']));_0x141c8f['attributes']=_0x141c8f[_0x05ed('0x27')][_0x05ed('0x2a')]?_0x141c8f[_0x05ed('0x27')]:_0x41e6d1[_0x05ed('0x28')];if(!_0x3c8516[_0x05ed('0x25')][_0x05ed('0x2b')](_0x05ed('0x2c'))){_0x141c8f[_0x05ed('0x2d')]=qs[_0x05ed('0x2d')](_0x3c8516[_0x05ed('0x25')][_0x05ed('0x2d')]);_0x141c8f['offset']=qs['offset'](_0x3c8516['query'][_0x05ed('0x18')]);}_0x141c8f[_0x05ed('0x2e')]=qs['sort'](_0x3c8516[_0x05ed('0x25')][_0x05ed('0x2f')]);_0x141c8f[_0x05ed('0x30')]=qs[_0x05ed('0x31')](_[_0x05ed('0x32')](_0x3c8516[_0x05ed('0x25')],_0x41e6d1[_0x05ed('0x31')]));if(_0x3c8516[_0x05ed('0x25')][_0x05ed('0x33')]){_0x141c8f[_0x05ed('0x30')]=_['merge'](_0x141c8f['where'],{'$or':_[_0x05ed('0x34')](_0x59b2cd,function(_0xd764d0){if(_0xd764d0['type']['key']!==_0x05ed('0x35')){var _0x424fc9={};_0x424fc9[_0xd764d0[_0x05ed('0x36')]]={'$like':'%'+_0x3c8516[_0x05ed('0x25')][_0x05ed('0x33')]+'%'};return _0x424fc9;}})});}_0x141c8f=_[_0x05ed('0x37')]({},_0x141c8f,_0x3c8516[_0x05ed('0x38')]);var _0x218db6={'where':_0x141c8f[_0x05ed('0x30')]};return db[_0x05ed('0x39')][_0x05ed('0x3a')](_0x218db6)[_0x05ed('0x3b')](function(_0x41d840){_0x5cecf7[_0x05ed('0x3a')]=_0x41d840;if(_0x3c8516['query'][_0x05ed('0x3c')]){_0x141c8f[_0x05ed('0x3d')]=[{'all':!![]}];}return db[_0x05ed('0x39')][_0x05ed('0x3e')](_0x141c8f);})[_0x05ed('0x3b')](function(_0x2d51e7){_0x5cecf7[_0x05ed('0x3f')]=_0x2d51e7;return _0x5cecf7;})[_0x05ed('0x3b')](respondWithFilteredResult(_0x238d10,_0x141c8f))[_0x05ed('0x40')](handleError(_0x238d10,null));};exports['show']=function(_0x7423d0,_0x3ac08f){var _0x2afa7e={'raw':!![],'where':{'id':_0x7423d0[_0x05ed('0x41')]['id']}},_0x998fe1={};_0x998fe1[_0x05ed('0x28')]=_[_0x05ed('0x24')](db[_0x05ed('0x39')][_0x05ed('0x23')]);_0x998fe1[_0x05ed('0x25')]=_[_0x05ed('0x24')](_0x7423d0[_0x05ed('0x25')]);_0x998fe1[_0x05ed('0x31')]=_[_0x05ed('0x26')](_0x998fe1[_0x05ed('0x28')],_0x998fe1['query']);_0x2afa7e[_0x05ed('0x27')]=_[_0x05ed('0x26')](_0x998fe1[_0x05ed('0x28')],qs[_0x05ed('0x29')](_0x7423d0[_0x05ed('0x25')][_0x05ed('0x29')]));_0x2afa7e[_0x05ed('0x27')]=_0x2afa7e[_0x05ed('0x27')][_0x05ed('0x2a')]?_0x2afa7e[_0x05ed('0x27')]:_0x998fe1[_0x05ed('0x28')];if(_0x7423d0[_0x05ed('0x25')]['includeAll']){_0x2afa7e['include']=[{'all':!![]}];}_0x2afa7e=_[_0x05ed('0x37')]({},_0x2afa7e,_0x7423d0['options']);return db[_0x05ed('0x39')][_0x05ed('0x42')](_0x2afa7e)[_0x05ed('0x3b')](handleEntityNotFound(_0x3ac08f,null))[_0x05ed('0x3b')](respondWithResult(_0x3ac08f,null))[_0x05ed('0x40')](handleError(_0x3ac08f,null));};exports[_0x05ed('0x43')]=function(_0x3d5f4a,_0x2943a3){return db[_0x05ed('0x39')][_0x05ed('0x43')](_0x3d5f4a[_0x05ed('0x44')],{})[_0x05ed('0x3b')](respondWithResult(_0x2943a3,0xc9))['catch'](handleError(_0x2943a3,null));};exports[_0x05ed('0x1d')]=function(_0x18774e,_0x28da00){if(_0x18774e[_0x05ed('0x44')]['id']){delete _0x18774e[_0x05ed('0x44')]['id'];}return db[_0x05ed('0x39')]['find']({'where':{'id':_0x18774e[_0x05ed('0x41')]['id']}})['then'](handleEntityNotFound(_0x28da00,null))[_0x05ed('0x3b')](saveUpdates(_0x18774e[_0x05ed('0x44')],null))[_0x05ed('0x3b')](respondWithResult(_0x28da00,null))[_0x05ed('0x40')](handleError(_0x28da00,null));};exports[_0x05ed('0x1e')]=function(_0x39d033,_0x14d66f){return db[_0x05ed('0x39')][_0x05ed('0x42')]({'where':{'id':_0x39d033[_0x05ed('0x41')]['id']}})['then'](handleEntityNotFound(_0x14d66f,null))[_0x05ed('0x3b')](removeEntity(_0x14d66f,null))[_0x05ed('0x40')](handleError(_0x14d66f,null));};exports['describe']=function(_0x14dc1e,_0x54f295){return db[_0x05ed('0x39')]['describe']()[_0x05ed('0x3b')](respondWithResult(_0x54f295,null))[_0x05ed('0x40')](handleError(_0x54f295,null));};
\ No newline at end of file
index 52c91c4..6d1f116 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x659e=['uniqueid','lodash','../../config/logger','api','moment','bluebird','request-promise','./chatTransferReport.attributes','exports','ChatTransferReport','report_chat_transfer'];(function(_0x2c8de4,_0x48ecd7){var _0xa5f1d5=function(_0x521b2a){while(--_0x521b2a){_0x2c8de4['push'](_0x2c8de4['shift']());}};_0xa5f1d5(++_0x48ecd7);}(_0x659e,0xdd));var _0xe659=function(_0x2e054a,_0x217591){_0x2e054a=_0x2e054a-0x0;var _0x16056e=_0x659e[_0x2e054a];return _0x16056e;};'use strict';var _=require(_0xe659('0x0'));var util=require('util');var logger=require(_0xe659('0x1'))(_0xe659('0x2'));var moment=require(_0xe659('0x3'));var BPromise=require(_0xe659('0x4'));var rp=require(_0xe659('0x5'));var attributes=require(_0xe659('0x6'));module[_0xe659('0x7')]=function(_0xe1a908,_0x191c12){return _0xe1a908['define'](_0xe659('0x8'),attributes,{'tableName':_0xe659('0x9'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0xe659('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xc320=['util','../../config/logger','api','moment','request-promise','./chatTransferReport.attributes','define','report_chat_transfer','uniqueid','lodash'];(function(_0x41e287,_0x4ebc16){var _0x4e22bb=function(_0x44c2f5){while(--_0x44c2f5){_0x41e287['push'](_0x41e287['shift']());}};_0x4e22bb(++_0x4ebc16);}(_0xc320,0x149));var _0x0c32=function(_0xbf8ebe,_0x3b69a5){_0xbf8ebe=_0xbf8ebe-0x0;var _0x1e25e8=_0xc320[_0xbf8ebe];return _0x1e25e8;};'use strict';var _=require(_0x0c32('0x0'));var util=require(_0x0c32('0x1'));var logger=require(_0x0c32('0x2'))(_0x0c32('0x3'));var moment=require(_0x0c32('0x4'));var BPromise=require('bluebird');var rp=require(_0x0c32('0x5'));var attributes=require(_0x0c32('0x6'));module['exports']=function(_0x4bbb8f,_0x427ab5){return _0x4bbb8f[_0x0c32('0x7')]('ChatTransferReport',attributes,{'tableName':_0x0c32('0x8'),'paranoid':![],'indexes':[{'name':_0x0c32('0x9'),'fields':[_0x0c32('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index a60701f..ede33ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfc1e=['../../mysqldb','../../config/utils','rpc','../../config/environment','http','request','then','info','ChatTransferReport,\x20%s,\x20%s','debug','ChatTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','bluebird','randomstring','ioredis'];(function(_0x4d655f,_0x4e4a6a){var _0x59767c=function(_0xf52632){while(--_0xf52632){_0x4d655f['push'](_0x4d655f['shift']());}};_0x59767c(++_0x4e4a6a);}(_0xfc1e,0x1c9));var _0xefc1=function(_0x11dc39,_0x491115){_0x11dc39=_0x11dc39-0x0;var _0x457277=_0xfc1e[_0x11dc39];return _0x457277;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require(_0xefc1('0x0'));var rs=require(_0xefc1('0x1'));var fs=require('fs');var Redis=require(_0xefc1('0x2'));var db=require(_0xefc1('0x3'))['db'];var utils=require(_0xefc1('0x4'));var logger=require('../../config/logger')(_0xefc1('0x5'));var config=require(_0xefc1('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0xefc1('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x38927c,_0x44d15b,_0x3ff4a7){return new BPromise(function(_0x45bec4,_0x77f637){return client[_0xefc1('0x8')](_0x38927c,_0x3ff4a7)[_0xefc1('0x9')](function(_0x244927){logger[_0xefc1('0xa')](_0xefc1('0xb'),_0x44d15b,'request\x20sent');logger[_0xefc1('0xc')](_0xefc1('0xd'),_0x44d15b,_0xefc1('0xe'),JSON[_0xefc1('0xf')](_0x244927));if(_0x244927[_0xefc1('0x10')]){if(_0x244927[_0xefc1('0x10')][_0xefc1('0x11')]===0x1f4){logger[_0xefc1('0x10')](_0xefc1('0xb'),_0x44d15b,_0x244927[_0xefc1('0x10')][_0xefc1('0x12')]);return _0x77f637(_0x244927['error'][_0xefc1('0x12')]);}logger[_0xefc1('0x10')](_0xefc1('0xb'),_0x44d15b,_0x244927[_0xefc1('0x10')][_0xefc1('0x12')]);return _0x45bec4(_0x244927[_0xefc1('0x10')][_0xefc1('0x12')]);}else{logger[_0xefc1('0xa')]('ChatTransferReport,\x20%s,\x20%s',_0x44d15b,_0xefc1('0xe'));_0x45bec4(_0x244927[_0xefc1('0x13')][_0xefc1('0x12')]);}})['catch'](function(_0x159adb){logger[_0xefc1('0x10')](_0xefc1('0xb'),_0x44d15b,_0x159adb);_0x77f637(_0x159adb);});});}
\ No newline at end of file
+var _0x6183=['message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','request\x20sent','debug','ChatTransferReport,\x20%s,\x20%s,\x20%s','error','code','ChatTransferReport,\x20%s,\x20%s'];(function(_0x554782,_0x9d5cce){var _0x11c710=function(_0xa25b95){while(--_0xa25b95){_0x554782['push'](_0x554782['shift']());}};_0x11c710(++_0x9d5cce);}(_0x6183,0x1e2));var _0x3618=function(_0x5a6961,_0xd41ca6){_0x5a6961=_0x5a6961-0x0;var _0x4af0a6=_0x6183[_0x5a6961];return _0x4af0a6;};'use strict';var _=require(_0x3618('0x0'));var util=require(_0x3618('0x1'));var moment=require(_0x3618('0x2'));var BPromise=require(_0x3618('0x3'));var rs=require(_0x3618('0x4'));var fs=require('fs');var Redis=require(_0x3618('0x5'));var db=require(_0x3618('0x6'))['db'];var utils=require(_0x3618('0x7'));var logger=require(_0x3618('0x8'))(_0x3618('0x9'));var config=require(_0x3618('0xa'));var jayson=require(_0x3618('0xb'));var client=jayson[_0x3618('0xc')][_0x3618('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x5a4167,_0x39a6b2,_0x24be95){return new BPromise(function(_0x4b3a95,_0x29c084){return client['request'](_0x5a4167,_0x24be95)[_0x3618('0xe')](function(_0xe549b9){logger[_0x3618('0xf')]('ChatTransferReport,\x20%s,\x20%s',_0x39a6b2,_0x3618('0x10'));logger[_0x3618('0x11')](_0x3618('0x12'),_0x39a6b2,_0x3618('0x10'),JSON['stringify'](_0xe549b9));if(_0xe549b9[_0x3618('0x13')]){if(_0xe549b9[_0x3618('0x13')][_0x3618('0x14')]===0x1f4){logger[_0x3618('0x13')](_0x3618('0x15'),_0x39a6b2,_0xe549b9['error'][_0x3618('0x16')]);return _0x29c084(_0xe549b9[_0x3618('0x13')]['message']);}logger[_0x3618('0x13')](_0x3618('0x15'),_0x39a6b2,_0xe549b9['error'][_0x3618('0x16')]);return _0x4b3a95(_0xe549b9['error'][_0x3618('0x16')]);}else{logger[_0x3618('0xf')](_0x3618('0x15'),_0x39a6b2,'request\x20sent');_0x4b3a95(_0xe549b9['result']['message']);}})[_0x3618('0x17')](function(_0x4f47d9){logger[_0x3618('0x13')](_0x3618('0x15'),_0x39a6b2,_0x4f47d9);_0x29c084(_0x4f47d9);});});}
\ No newline at end of file
index 33bcc30..4ba119a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd9b5=['describe','show','post','create','put','/:id','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../config/environment','./chatTransferReport.controller','get','isAuthenticated','index'];(function(_0x525371,_0x3735fe){var _0x362930=function(_0x332e2c){while(--_0x332e2c){_0x525371['push'](_0x525371['shift']());}};_0x362930(++_0x3735fe);}(_0xd9b5,0x14b));var _0x5d9b=function(_0xdf0e26,_0x44146a){_0xdf0e26=_0xdf0e26-0x0;var _0x4ed538=_0xd9b5[_0xdf0e26];return _0x4ed538;};'use strict';var multer=require(_0x5d9b('0x0'));var util=require(_0x5d9b('0x1'));var path=require(_0x5d9b('0x2'));var timeout=require(_0x5d9b('0x3'));var express=require('express');var router=express[_0x5d9b('0x4')]();var auth=require(_0x5d9b('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x5d9b('0x6'));var controller=require(_0x5d9b('0x7'));router[_0x5d9b('0x8')]('/',auth[_0x5d9b('0x9')](),controller[_0x5d9b('0xa')]);router[_0x5d9b('0x8')]('/describe',auth['isAuthenticated'](),controller[_0x5d9b('0xb')]);router[_0x5d9b('0x8')]('/:id',auth[_0x5d9b('0x9')](),controller[_0x5d9b('0xc')]);router[_0x5d9b('0xd')]('/',auth[_0x5d9b('0x9')](),controller[_0x5d9b('0xe')]);router[_0x5d9b('0xf')](_0x5d9b('0x10'),auth[_0x5d9b('0x9')](),controller['update']);router['delete'](_0x5d9b('0x10'),auth[_0x5d9b('0x9')](),controller[_0x5d9b('0x11')]);module[_0x5d9b('0x12')]=router;
\ No newline at end of file
+var _0x10c9=['put','update','exports','util','path','../../components/interaction/service','../../config/environment','./chatTransferReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x10c9,0x83));var _0x910c=function(_0xfab3cb,_0xda8cc6){_0xfab3cb=_0xfab3cb-0x0;var _0xd541b4=_0x10c9[_0xfab3cb];return _0xd541b4;};'use strict';var multer=require('multer');var util=require(_0x910c('0x0'));var path=require(_0x910c('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x910c('0x2'));var config=require(_0x910c('0x3'));var controller=require(_0x910c('0x4'));router[_0x910c('0x5')]('/',auth[_0x910c('0x6')](),controller[_0x910c('0x7')]);router[_0x910c('0x5')](_0x910c('0x8'),auth[_0x910c('0x6')](),controller[_0x910c('0x9')]);router['get'](_0x910c('0xa'),auth[_0x910c('0x6')](),controller[_0x910c('0xb')]);router[_0x910c('0xc')]('/',auth['isAuthenticated'](),controller['create']);router[_0x910c('0xd')](_0x910c('0xa'),auth[_0x910c('0x6')](),controller[_0x910c('0xe')]);router['delete'](_0x910c('0xa'),auth[_0x910c('0x6')](),controller['destroy']);module[_0x910c('0xf')]=router;
\ No newline at end of file
index d20a846..f771417 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2383=['getDataValue','onlineForm','parse','setDataValue','textarea','Comments','Leave\x20your\x20comments','offlineForm','All\x20of\x20our\x20agents\x20are\x20busy\x20at\x20this\x20time.\x20Your\x20chat\x20is\x20very\x20important\x20to\x20us.','Please\x20hold\x20and\x20we\x20will\x20answer\x20your\x20request\x20as\x20soon\x20as\x20possible.','New\x20offline\x20message\x20from\x20websiteName','You\x20received\x20a\x20new\x20offline\x20message\x20from\x20websiteName.\x20Here\x20you\x20can\x20find\x20the\x20details\x20of\x20the\x20request:','Skip','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','website_alias','alternate','#fafafa','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDisposition','sequelize','randomstring','exports','STRING','address','email','#9f946a','INTEGER','BOOLEAN','ENUM','rounded','squared','Send','Contact\x20us','Powered\x20by\x20xCALLY','Do\x20you\x20want\x20to\x20close\x20the\x20interaction?','Form\x20properly\x20submitted','Form\x20submission\x20error','Type\x20a\x20message','Thanks\x20you\x20for\x20your\x20time!','thumb','TEXT','stringify','input','name','text'];(function(_0x13c70c,_0x546b34){var _0x50f0f2=function(_0x2a2991){while(--_0x2a2991){_0x13c70c['push'](_0x13c70c['shift']());}};_0x50f0f2(++_0x546b34);}(_0x2383,0x1b2));var _0x3238=function(_0xf7c2f5,_0x2f4635){_0xf7c2f5=_0xf7c2f5-0x0;var _0x36aadd=_0x2383[_0xf7c2f5];return _0x36aadd;};'use strict';var Sequelize=require(_0x3238('0x0'));var rs=require(_0x3238('0x1'));module[_0x3238('0x2')]={'name':{'type':Sequelize[_0x3238('0x3')],'allowNull':![]},'address':{'type':Sequelize[_0x3238('0x3')],'allowNull':![],'unique':_0x3238('0x4')},'description':{'type':Sequelize[_0x3238('0x3')]},'mapKey':{'type':Sequelize['STRING'],'defaultValue':_0x3238('0x5')},'mapKeyOffline':{'type':Sequelize['STRING'],'defaultValue':_0x3238('0x5')},'key':{'type':Sequelize[_0x3238('0x3')],'allowNull':![]},'agentAlias':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'Agent'},'customerAlias':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'Me'},'color':{'type':Sequelize[_0x3238('0x3')],'allowNull':![],'defaultValue':_0x3238('0x6'),'validate':{'notEmpty':!![]}},'color_button':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'#9f946a','validate':{'notEmpty':!![]}},'textColor':{'type':Sequelize[_0x3238('0x3')],'allowNull':![],'defaultValue':'#ffffff','validate':{'notEmpty':!![]}},'fontSize':{'type':Sequelize[_0x3238('0x7')],'defaultValue':0xf},'remote':{'type':Sequelize[_0x3238('0x3')]},'animation':{'type':Sequelize[_0x3238('0x8')],'defaultValue':!![]},'header_shape':{'type':Sequelize[_0x3238('0x9')](_0x3238('0xa'),_0x3238('0xb')),'defaultValue':_0x3238('0xa')},'header_online':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'We\x20are\x20here!'},'start_chat_button':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'Chat'},'offline_chat_button':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0xc')},'header_offline':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0xd')},'download_transcript':{'type':Sequelize[_0x3238('0x8')],'defaultValue':!![]},'timeout':{'type':Sequelize[_0x3238('0x7')],'defaultValue':0x0},'whiteLabel':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0xe')},'defaultWhiteLabel':{'type':Sequelize[_0x3238('0x8')],'defaultValue':!![]},'sitepic':{'type':Sequelize['TEXT']},'closingQuestion':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0xf')},'formSubmitSuccessMessage':{'type':Sequelize['STRING'],'defaultValue':_0x3238('0x10')},'formSubmitFailureMessage':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x11')},'noteTitle':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'Note'},'placeholderMessage':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x12')},'closingMessage':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x13')},'closingMessageButton':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'Send'},'skipMessageButton':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'Skip'},'conditionAgreement':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'enableRating':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'enableFeedback':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'ratingType':{'type':Sequelize[_0x3238('0x9')]('star',_0x3238('0x14')),'defaultValue':'star'},'ratingStarsNumber':{'type':Sequelize[_0x3238('0x7')],'defaultValue':0x5},'onlineForm':{'type':Sequelize[_0x3238('0x15')],'defaultValue':function(){return JSON[_0x3238('0x16')]({'items':[{'type':_0x3238('0x17'),'variable':null,'config':{'placeholder':_0x3238('0x18'),'type':_0x3238('0x19'),'required':!![]},'props':{'title':'name','helpText':''}},{'type':_0x3238('0x17'),'props':{'title':_0x3238('0x5'),'helpText':''},'config':{'required':!![],'placeholder':_0x3238('0x5'),'type':_0x3238('0x5')},'variable':null}],'fromKey':0x1});},'get':function(){return this[_0x3238('0x1a')](_0x3238('0x1b'))?JSON[_0x3238('0x1c')](this[_0x3238('0x1a')](_0x3238('0x1b'))):{};},'set':function(_0x200057){return this[_0x3238('0x1d')](_0x3238('0x1b'),JSON[_0x3238('0x16')](_0x200057));}},'offlineForm':{'type':Sequelize[_0x3238('0x15')],'defaultValue':function(){return JSON['stringify']({'items':[{'type':_0x3238('0x17'),'props':{'title':_0x3238('0x5'),'helpText':''},'config':{'required':!![],'placeholder':'email','type':_0x3238('0x5')},'variable':null},{'type':_0x3238('0x1e'),'config':{'placeholder':_0x3238('0x1f')},'props':{'title':_0x3238('0x1f'),'helpText':_0x3238('0x20')}}],'fromKey':0x0});},'get':function(){return this['getDataValue'](_0x3238('0x21'))?JSON['parse'](this[_0x3238('0x1a')]('offlineForm')):{};},'set':function(_0x1f7d08){return this[_0x3238('0x1d')]('offlineForm',JSON['stringify'](_0x1f7d08));}},'token':{'type':Sequelize[_0x3238('0x3')],'defaultValue':function(){return rs['generate']();}},'autoclose':{'type':Sequelize[_0x3238('0x8')],'defaultValue':!![]},'enableCustomerWriting':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'forwardTranscript':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'forwardTranscriptMessage':{'type':Sequelize[_0x3238('0x3')]},'forwardOffline':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'forwardOfflineAddress':{'type':Sequelize[_0x3238('0x3')]},'waitingTitle':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x22')},'waitingMessage':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x23')},'offlineMessageSubject':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x24')},'offlineMessageBody':{'type':Sequelize['STRING'],'defaultValue':_0x3238('0x25')},'enableUnmanagedNote':{'type':Sequelize[_0x3238('0x8')],'defaultValue':!![]},'unmanagedMessage':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'Your\x20request\x20has\x20not\x20been\x20processed.'},'skipUnmanaged':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x26')},'sendUnmanaged':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0xc')},'enableCustomerAttachment':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'enableCustomerCheckmarks':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'agentAvatar':{'type':Sequelize[_0x3238('0x15')]},'showAgentAvatar':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'timezone':{'type':Sequelize[_0x3238('0x3')]},'notificationTemplate':{'type':Sequelize[_0x3238('0x15')],'defaultValue':function(){return _0x3238('0x27');}},'notificationSound':{'type':Sequelize[_0x3238('0x8')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'hideWhenOffline':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'agentIdentifier':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x28')},'waitForTheAssignedAgent':{'type':Sequelize[_0x3238('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'alignment':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'bottom_right'},'verticalAlignment':{'type':Sequelize[_0x3238('0x7')],'defaultValue':0x1e},'messagesAlignment':{'type':Sequelize[_0x3238('0x3')],'defaultValue':_0x3238('0x29')},'defaultTitle':{'type':Sequelize[_0x3238('0x3')]},'customerAvatar':{'type':Sequelize[_0x3238('0x15')]},'showCustomerAvatar':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'messageFontSize':{'type':Sequelize[_0x3238('0x7')],'defaultValue':0xc},'backgroundColor':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x3238('0x2a'),'validate':{'notEmpty':!![]}},'queueTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x3238('0x8')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x3238('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'systemAlias':{'type':Sequelize[_0x3238('0x3')],'defaultValue':'System'},'systemAvatar':{'type':Sequelize[_0x3238('0x15')]},'mandatoryDispositionPauseId':{'type':Sequelize[_0x3238('0x7')],'comment':_0x3238('0x2b')},'mandatoryDisposition':{'type':Sequelize['BOOLEAN'],'defaultValue':![],'comment':_0x3238('0x2c'),'set':function(_0xb05242){if(!_0xb05242)this[_0x3238('0x1d')]('mandatoryDispositionPauseId',null);this[_0x3238('0x1d')](_0x3238('0x2d'),_0xb05242);}}};
\ No newline at end of file
+var _0x7e3c=['Chat','Send','Contact\x20us','Powered\x20by\x20xCALLY','TEXT','Form\x20properly\x20submitted','Form\x20submission\x20error','Thanks\x20you\x20for\x20your\x20time!','Skip','thumb','star','stringify','text','name','input','onlineForm','parse','getDataValue','textarea','Comments','Leave\x20your\x20comments','offlineForm','New\x20offline\x20message\x20from\x20websiteName','You\x20received\x20a\x20new\x20offline\x20message\x20from\x20websiteName.\x20Here\x20you\x20can\x20find\x20the\x20details\x20of\x20the\x20request:','Your\x20request\x20has\x20not\x20been\x20processed.','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','website_alias','bottom_right','alternate','#fafafa','System','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','setDataValue','mandatoryDispositionPauseId','sequelize','randomstring','exports','STRING','address','email','Agent','#9f946a','INTEGER','BOOLEAN','rounded','We\x20are\x20here!'];(function(_0x7abd7,_0x1ca3f9){var _0x3a2577=function(_0x18456d){while(--_0x18456d){_0x7abd7['push'](_0x7abd7['shift']());}};_0x3a2577(++_0x1ca3f9);}(_0x7e3c,0x136));var _0xc7e3=function(_0x27f48a,_0x5081e8){_0x27f48a=_0x27f48a-0x0;var _0x5a497b=_0x7e3c[_0x27f48a];return _0x5a497b;};'use strict';var Sequelize=require(_0xc7e3('0x0'));var rs=require(_0xc7e3('0x1'));module[_0xc7e3('0x2')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'address':{'type':Sequelize[_0xc7e3('0x3')],'allowNull':![],'unique':_0xc7e3('0x4')},'description':{'type':Sequelize[_0xc7e3('0x3')]},'mapKey':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x5')},'mapKeyOffline':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x5')},'key':{'type':Sequelize[_0xc7e3('0x3')],'allowNull':![]},'agentAlias':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x6')},'customerAlias':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':'Me'},'color':{'type':Sequelize[_0xc7e3('0x3')],'allowNull':![],'defaultValue':_0xc7e3('0x7'),'validate':{'notEmpty':!![]}},'color_button':{'type':Sequelize[_0xc7e3('0x3')],'allowNull':![],'defaultValue':'#9f946a','validate':{'notEmpty':!![]}},'textColor':{'type':Sequelize[_0xc7e3('0x3')],'allowNull':![],'defaultValue':'#ffffff','validate':{'notEmpty':!![]}},'fontSize':{'type':Sequelize[_0xc7e3('0x8')],'defaultValue':0xf},'remote':{'type':Sequelize[_0xc7e3('0x3')]},'animation':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':!![]},'header_shape':{'type':Sequelize['ENUM'](_0xc7e3('0xa'),'squared'),'defaultValue':'rounded'},'header_online':{'type':Sequelize['STRING'],'defaultValue':_0xc7e3('0xb')},'start_chat_button':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0xc')},'offline_chat_button':{'type':Sequelize['STRING'],'defaultValue':_0xc7e3('0xd')},'header_offline':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0xe')},'download_transcript':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':!![]},'timeout':{'type':Sequelize[_0xc7e3('0x8')],'defaultValue':0x0},'whiteLabel':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0xf')},'defaultWhiteLabel':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':!![]},'sitepic':{'type':Sequelize[_0xc7e3('0x10')]},'closingQuestion':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':'Do\x20you\x20want\x20to\x20close\x20the\x20interaction?'},'formSubmitSuccessMessage':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x11')},'formSubmitFailureMessage':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x12')},'noteTitle':{'type':Sequelize['STRING'],'defaultValue':'Note'},'placeholderMessage':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':'Type\x20a\x20message'},'closingMessage':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x13')},'closingMessageButton':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':'Send'},'skipMessageButton':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x14')},'conditionAgreement':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'enableRating':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'enableFeedback':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'ratingType':{'type':Sequelize['ENUM']('star',_0xc7e3('0x15')),'defaultValue':_0xc7e3('0x16')},'ratingStarsNumber':{'type':Sequelize['INTEGER'],'defaultValue':0x5},'onlineForm':{'type':Sequelize[_0xc7e3('0x10')],'defaultValue':function(){return JSON[_0xc7e3('0x17')]({'items':[{'type':'input','variable':null,'config':{'placeholder':'name','type':_0xc7e3('0x18'),'required':!![]},'props':{'title':_0xc7e3('0x19'),'helpText':''}},{'type':_0xc7e3('0x1a'),'props':{'title':_0xc7e3('0x5'),'helpText':''},'config':{'required':!![],'placeholder':'email','type':_0xc7e3('0x5')},'variable':null}],'fromKey':0x1});},'get':function(){return this['getDataValue'](_0xc7e3('0x1b'))?JSON[_0xc7e3('0x1c')](this[_0xc7e3('0x1d')](_0xc7e3('0x1b'))):{};},'set':function(_0x46934e){return this['setDataValue'](_0xc7e3('0x1b'),JSON[_0xc7e3('0x17')](_0x46934e));}},'offlineForm':{'type':Sequelize[_0xc7e3('0x10')],'defaultValue':function(){return JSON[_0xc7e3('0x17')]({'items':[{'type':_0xc7e3('0x1a'),'props':{'title':_0xc7e3('0x5'),'helpText':''},'config':{'required':!![],'placeholder':'email','type':'email'},'variable':null},{'type':_0xc7e3('0x1e'),'config':{'placeholder':_0xc7e3('0x1f')},'props':{'title':_0xc7e3('0x1f'),'helpText':_0xc7e3('0x20')}}],'fromKey':0x0});},'get':function(){return this[_0xc7e3('0x1d')]('offlineForm')?JSON[_0xc7e3('0x1c')](this[_0xc7e3('0x1d')](_0xc7e3('0x21'))):{};},'set':function(_0x2c12fd){return this['setDataValue'](_0xc7e3('0x21'),JSON[_0xc7e3('0x17')](_0x2c12fd));}},'token':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':function(){return rs['generate']();}},'autoclose':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'enableCustomerWriting':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'forwardTranscript':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'forwardTranscriptMessage':{'type':Sequelize['STRING']},'forwardOffline':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'forwardOfflineAddress':{'type':Sequelize[_0xc7e3('0x3')]},'waitingTitle':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':'All\x20of\x20our\x20agents\x20are\x20busy\x20at\x20this\x20time.\x20Your\x20chat\x20is\x20very\x20important\x20to\x20us.'},'waitingMessage':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':'Please\x20hold\x20and\x20we\x20will\x20answer\x20your\x20request\x20as\x20soon\x20as\x20possible.'},'offlineMessageSubject':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x22')},'offlineMessageBody':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x23')},'enableUnmanagedNote':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':!![]},'unmanagedMessage':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x24')},'skipUnmanaged':{'type':Sequelize['STRING'],'defaultValue':_0xc7e3('0x14')},'sendUnmanaged':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0xd')},'enableCustomerAttachment':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'enableCustomerCheckmarks':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentAvatar':{'type':Sequelize['TEXT']},'showAgentAvatar':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'timezone':{'type':Sequelize[_0xc7e3('0x3')]},'notificationTemplate':{'type':Sequelize['TEXT'],'defaultValue':function(){return _0xc7e3('0x25');}},'notificationSound':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':!![]},'notificationShake':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'hideWhenOffline':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'agentIdentifier':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x26')},'waitForTheAssignedAgent':{'type':Sequelize[_0xc7e3('0x8')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'alignment':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x27')},'verticalAlignment':{'type':Sequelize['INTEGER'],'defaultValue':0x1e},'messagesAlignment':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x28')},'defaultTitle':{'type':Sequelize[_0xc7e3('0x3')]},'customerAvatar':{'type':Sequelize[_0xc7e3('0x10')]},'showCustomerAvatar':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'messageFontSize':{'type':Sequelize[_0xc7e3('0x8')],'defaultValue':0xc},'backgroundColor':{'type':Sequelize[_0xc7e3('0x3')],'allowNull':![],'defaultValue':_0xc7e3('0x29'),'validate':{'notEmpty':!![]}},'queueTransfer':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xc7e3('0x8')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xc7e3('0x8')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'systemAlias':{'type':Sequelize[_0xc7e3('0x3')],'defaultValue':_0xc7e3('0x2a')},'systemAvatar':{'type':Sequelize['TEXT']},'mandatoryDispositionPauseId':{'type':Sequelize[_0xc7e3('0x8')],'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0xc7e3('0x9')],'defaultValue':![],'comment':_0xc7e3('0x2b'),'set':function(_0xe93d28){if(!_0xe93d28)this[_0xc7e3('0x2c')](_0xc7e3('0x2d'),null);this['setDataValue']('mandatoryDisposition',_0xe93d28);}}};
\ No newline at end of file
index 5ab5f5d..dbd8040 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x757a=['index','Pause','mandatoryDispositionPause','ChatWebsite','rawAttributes','model','query','keys','intersection','fields','attributes','length','limit','order','sort','where','pick','merge','map','key','VIRTUAL','field','filter','options','count','include','findAll','rows','show','params','filters','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','addDisposition','Disposition','getDispositions','findOne','hasOwnProperty','nolimit','ChatWebsiteId','includeAll','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','addLogo','file','filename','addAvatar','agentAvatar','addCustomerAvatar','customerAvatar','systemAvatar','join','root','../../config/license/util','getLicense','custom','sitepic','server/files/images/logos/','server/files/images/avatars/default_avatar.png','existsSync','server/files/images/avatars/','download','server/files/images/avatars/customer_avatar.png','showCustomerAvatar','server/files/images/avatars/system_avatar.png','isNil','notify','user-agent-parser','setUA','user-agent','getResult','chat','CmContact','Sequelize','ValidationError','difference','updatedAt','createdAt','ListId','from','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','ChatApplication','account','applications','Applications','list','priority','firstName','lastName','browser','version','%s\x20%s','unknown','format','device','vendor','%s\x20%s\x20%s','type','stringify','threadId','externalUrl','ChatInteraction','interaction','spread','contact','messageId','created','autoclose','push','close','unmanaged','*,*,*,*','ChatMessage','AttachmentId','UserId','User','agent','waitForTheAssignedAgent','forcedOwnership','startRouting','Start','EventManager','offline','no\x20available\x20attributes','CompanyId','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKeyOffline','defaults','readFileSync','server/files/templates/chatOfflineMessage.ejs','utf8','render','toPairs','offlineMessageBody','ChatOfflineMessage','MailAccount','MailServerOut','Smtp','forwardOfflineAddress','service','host','secure','authentication','auth','pass','sendMail','\x22%s\x22\x20<%s>','offlineMessageSubject','addInteraction','omit','Contact','Tag','Tags','tag','Command','getSnippet','timezone','iftime\x20%s,%s','interval','iftime\x20%s','indexOf','[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)','ONLINE','OFFLINE','No\x20timezone','inspect','Interval','Intervals','getProactiveActions','virtual','License','increment','chatLicenseExceeded','all','some','server/files/chat/iframe.js','remote','headers','x-forwarded-for','x-real-ip','connection','remoteAddress','referer','alignment','verticalAlignment','addApplications','sequelize','transaction','bulkCreate','getApplications','addProactiveActions','ChatProactiveAction','getFields','online','false','offlineForm','onlineForm','items','fromKey','emit','userChatWebsite:save','removeAgents','isArray','userChatWebsite:remove','getAgents','eml-format','rimraf','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','localhost','./chatWebsite.socket','client','http','request','info','ChatWebsite,\x20%s,\x20%s','request\x20sent','debug','ChatWebsite,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','status','end','offset','Content-Range','json','apply','reject','save','update','then','destroy','get','ChatWebsites','UserProfileResource','name','send'];(function(_0x27a196,_0x226638){var _0x1063fc=function(_0x596b9a){while(--_0x596b9a){_0x27a196['push'](_0x27a196['shift']());}};_0x1063fc(++_0x226638);}(_0x757a,0xde));var _0xa757=function(_0x16243e,_0x470c9c){_0x16243e=_0x16243e-0x0;var _0x35db81=_0x757a[_0x16243e];return _0x35db81;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xa757('0x0'));var rimraf=require(_0xa757('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xa757('0x2'));var BPromise=require(_0xa757('0x3'));var Mustache=require(_0xa757('0x4'));var util=require(_0xa757('0x5'));var path=require(_0xa757('0x6'));var sox=require(_0xa757('0x7'));var csv=require('to-csv');var ejs=require(_0xa757('0x8'));var fs=require('fs');var _=require(_0xa757('0x9'));var squel=require('squel');var crypto=require(_0xa757('0xa'));var jsforce=require(_0xa757('0xb'));var deskjs=require(_0xa757('0xc'));var toCsv=require(_0xa757('0xd'));var querystring=require(_0xa757('0xe'));var Papa=require('papaparse');var authService=require(_0xa757('0xf'));var hardwareService=require(_0xa757('0x10'));var Redis=require(_0xa757('0x11'));var qs=require(_0xa757('0x12'));var logger=require(_0xa757('0x13'))(_0xa757('0x14'));var utils=require(_0xa757('0x15'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config['redis']=_['defaults'](config['redis'],{'host':_0xa757('0x16'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xa757('0x17'))['register'](socket);var jayson=require('jayson/promise');var client=jayson[_0xa757('0x18')][_0xa757('0x19')]({'port':0x232c});var client9002=jayson[_0xa757('0x18')][_0xa757('0x19')]({'port':0x232a});var client9003=jayson[_0xa757('0x18')][_0xa757('0x19')]({'port':0x232b});function respondWithRpcPromise(_0xf12b68,_0x2f7947,_0x185011,_0x3df1f9){return new BPromise(function(_0x50aac1,_0x2e195b){var _0x44eab8=_0x3df1f9||client;return _0x44eab8[_0xa757('0x1a')](_0xf12b68,_0x185011)['then'](function(_0x54b305){logger[_0xa757('0x1b')](_0xa757('0x1c'),_0x2f7947,_0xa757('0x1d'));logger[_0xa757('0x1e')](_0xa757('0x1f'),_0x2f7947,_0xa757('0x1d'),JSON['stringify'](_0x54b305));if(_0x54b305[_0xa757('0x20')]){if(_0x54b305['error'][_0xa757('0x21')]===0x1f4){logger[_0xa757('0x20')](_0xa757('0x1c'),_0x2f7947,_0x54b305[_0xa757('0x20')]['message']);return _0x2e195b(_0x54b305['error'][_0xa757('0x22')]);}logger[_0xa757('0x20')](_0xa757('0x1c'),_0x2f7947,_0x54b305[_0xa757('0x20')][_0xa757('0x22')]);return _0x50aac1(_0x54b305[_0xa757('0x20')][_0xa757('0x22')]);}else{logger[_0xa757('0x1b')](_0xa757('0x1c'),_0x2f7947,'request\x20sent');_0x50aac1(_0x54b305[_0xa757('0x23')]['message']);}})[_0xa757('0x24')](function(_0x47903b){logger[_0xa757('0x20')](_0xa757('0x1c'),_0x2f7947,_0x47903b);_0x2e195b(_0x47903b);});});}function respondWithStatusCode(_0x37c7e6,_0x4d58a4){_0x4d58a4=_0x4d58a4||0xcc;return function(_0x2b19d5){if(_0x2b19d5){return _0x37c7e6[_0xa757('0x25')](_0x4d58a4);}return _0x37c7e6[_0xa757('0x26')](_0x4d58a4)[_0xa757('0x27')]();};}function respondWithResult(_0x5b4779,_0x449a7d){_0x449a7d=_0x449a7d||0xc8;return function(_0x54263b){if(_0x54263b){return _0x5b4779['status'](_0x449a7d)['json'](_0x54263b);}};}function respondWithFilteredResult(_0x4f8de2,_0xfdf69d){return function(_0x596ae2){if(_0x596ae2){var _0x2208f9=_0x596ae2['count'],_0x3bc24c=_0xfdf69d[_0xa757('0x28')],_0x55c5f8=_0xfdf69d[_0xa757('0x28')]+_0xfdf69d['limit'],_0x2a0c9a;if(_0x55c5f8>=_0x2208f9){_0x55c5f8=_0x2208f9;_0x2a0c9a=0xc8;}else{_0x2a0c9a=0xce;}_0x4f8de2[_0xa757('0x26')](_0x2a0c9a);return _0x4f8de2['set'](_0xa757('0x29'),_0x3bc24c+'-'+_0x55c5f8+'/'+_0x2208f9)[_0xa757('0x2a')](_0x596ae2);}return null;};}function patchUpdates(_0x458974){return function(_0x300dc4){try{jsonpatch[_0xa757('0x2b')](_0x300dc4,_0x458974,!![]);}catch(_0x2c1885){return BPromise[_0xa757('0x2c')](_0x2c1885);}return _0x300dc4[_0xa757('0x2d')]();};}function saveUpdates(_0x112282,_0x384424){return function(_0x1f5d5a){if(_0x1f5d5a){return _0x1f5d5a[_0xa757('0x2e')](_0x112282)[_0xa757('0x2f')](function(_0x2dfb33){return _0x2dfb33;});}return null;};}function removeEntity(_0x27be88,_0xc1cc20){return function(_0x3e64b7){if(_0x3e64b7){return _0x3e64b7[_0xa757('0x30')]()[_0xa757('0x2f')](function(){var _0x29a5ba=_0x3e64b7[_0xa757('0x31')]({'plain':!![]});var _0x170aa9=_0xa757('0x32');return db[_0xa757('0x33')]['destroy']({'where':{'type':_0x170aa9,'resourceId':_0x29a5ba['id']}})[_0xa757('0x2f')](function(){return _0x3e64b7;});})[_0xa757('0x2f')](function(){_0x27be88[_0xa757('0x26')](0xcc)[_0xa757('0x27')]();});}};}function handleEntityNotFound(_0x1c4c40,_0x51e2aa){return function(_0x1d4414){if(!_0x1d4414){_0x1c4c40[_0xa757('0x25')](0x194);}return _0x1d4414;};}function handleError(_0x37b1a3,_0x2c34b1){_0x2c34b1=_0x2c34b1||0x1f4;return function(_0xd54446){logger[_0xa757('0x20')](_0xd54446['stack']);if(_0xd54446[_0xa757('0x34')]){delete _0xd54446[_0xa757('0x34')];}_0x37b1a3[_0xa757('0x26')](_0x2c34b1)[_0xa757('0x35')](_0xd54446);};}exports[_0xa757('0x36')]=function(_0x111cfe,_0x24e280){var _0x3e12a5={'include':[{'model':db[_0xa757('0x37')],'as':_0xa757('0x38')}]},_0x13b699={},_0x4f9d98={'count':0x0,'rows':[]};var _0x9f73c6=db[_0xa757('0x39')][_0xa757('0x3a')];_0x13b699[_0xa757('0x3b')]=_['keys'](_0x9f73c6);_0x13b699[_0xa757('0x3c')]=_[_0xa757('0x3d')](_0x111cfe['query']);_0x13b699['filters']=_[_0xa757('0x3e')](_0x13b699[_0xa757('0x3b')],_0x13b699['query']);_0x3e12a5['attributes']=_[_0xa757('0x3e')](_0x13b699[_0xa757('0x3b')],qs[_0xa757('0x3f')](_0x111cfe['query'][_0xa757('0x3f')]));_0x3e12a5[_0xa757('0x40')]=_0x3e12a5[_0xa757('0x40')][_0xa757('0x41')]?_0x3e12a5[_0xa757('0x40')]:_0x13b699['model'];if(!_0x111cfe[_0xa757('0x3c')]['hasOwnProperty']('nolimit')){_0x3e12a5[_0xa757('0x42')]=qs[_0xa757('0x42')](_0x111cfe[_0xa757('0x3c')][_0xa757('0x42')]);_0x3e12a5[_0xa757('0x28')]=qs['offset'](_0x111cfe['query'][_0xa757('0x28')]);}_0x3e12a5[_0xa757('0x43')]=qs[_0xa757('0x44')](_0x111cfe[_0xa757('0x3c')][_0xa757('0x44')]);_0x3e12a5[_0xa757('0x45')]=qs['filters'](_[_0xa757('0x46')](_0x111cfe[_0xa757('0x3c')],_0x13b699['filters']));if(_0x111cfe[_0xa757('0x3c')]['filter']){_0x3e12a5[_0xa757('0x45')]=_[_0xa757('0x47')](_0x3e12a5['where'],{'$or':_[_0xa757('0x48')](_0x9f73c6,function(_0x23efad){if(_0x23efad['type'][_0xa757('0x49')]!==_0xa757('0x4a')){var _0x27ae35={};_0x27ae35[_0x23efad[_0xa757('0x4b')]]={'$like':'%'+_0x111cfe['query'][_0xa757('0x4c')]+'%'};return _0x27ae35;}})});}_0x3e12a5=_[_0xa757('0x47')]({},_0x3e12a5,_0x111cfe[_0xa757('0x4d')]);var _0xec4610={'where':_0x3e12a5['where']};return db[_0xa757('0x39')]['count'](_0xec4610)['then'](function(_0x2acf88){_0x4f9d98[_0xa757('0x4e')]=_0x2acf88;if(_0x111cfe[_0xa757('0x3c')]['includeAll']){_0x3e12a5[_0xa757('0x4f')]=[{'all':!![]}];}return db['ChatWebsite'][_0xa757('0x50')](_0x3e12a5);})[_0xa757('0x2f')](function(_0x265793){_0x4f9d98[_0xa757('0x51')]=_0x265793;return _0x4f9d98;})[_0xa757('0x2f')](respondWithFilteredResult(_0x24e280,_0x3e12a5))[_0xa757('0x24')](handleError(_0x24e280,null));};exports[_0xa757('0x52')]=function(_0x505cd,_0x581e95){var _0x2de226={'raw':![],'where':{'id':_0x505cd[_0xa757('0x53')]['id']},'include':[{'model':db[_0xa757('0x37')],'as':_0xa757('0x38')}]},_0x7411a3={};_0x7411a3[_0xa757('0x3b')]=_[_0xa757('0x3d')](db[_0xa757('0x39')][_0xa757('0x3a')]);_0x7411a3[_0xa757('0x3c')]=_[_0xa757('0x3d')](_0x505cd[_0xa757('0x3c')]);_0x7411a3[_0xa757('0x54')]=_[_0xa757('0x3e')](_0x7411a3[_0xa757('0x3b')],_0x7411a3[_0xa757('0x3c')]);_0x2de226['attributes']=_[_0xa757('0x3e')](_0x7411a3['model'],qs[_0xa757('0x3f')](_0x505cd[_0xa757('0x3c')][_0xa757('0x3f')]));_0x2de226[_0xa757('0x40')]=_0x2de226['attributes'][_0xa757('0x41')]?_0x2de226[_0xa757('0x40')]:_0x7411a3[_0xa757('0x3b')];if(_0x505cd[_0xa757('0x3c')]['includeAll']){_0x2de226[_0xa757('0x4f')]=[{'all':!![]}];}_0x2de226=_[_0xa757('0x47')]({},_0x2de226,_0x505cd[_0xa757('0x4d')]);return db[_0xa757('0x39')][_0xa757('0x55')](_0x2de226)[_0xa757('0x2f')](handleEntityNotFound(_0x581e95,null))['then'](respondWithResult(_0x581e95,null))['catch'](handleError(_0x581e95,null));};exports['create']=function(_0x5a49d0,_0x1d8742){return db[_0xa757('0x39')][_0xa757('0x56')](_0x5a49d0[_0xa757('0x57')],{})[_0xa757('0x2f')](function(_0x2d290b){var _0x5efb32=_0x5a49d0[_0xa757('0x58')][_0xa757('0x31')]({'plain':!![]});if(!_0x5efb32)throw new Error(_0xa757('0x59'));if(_0x5efb32[_0xa757('0x5a')]==='user'){var _0x26c74e=_0x2d290b[_0xa757('0x31')]({'plain':!![]});var _0x4af840=_0xa757('0x32');return db['UserProfileSection'][_0xa757('0x55')]({'where':{'name':_0x4af840,'userProfileId':_0x5efb32['userProfileId']},'raw':!![]})[_0xa757('0x2f')](function(_0x58633a){if(_0x58633a&&_0x58633a['autoAssociation']===0x0){return db[_0xa757('0x33')][_0xa757('0x56')]({'name':_0x26c74e[_0xa757('0x34')],'resourceId':_0x26c74e['id'],'type':_0x58633a[_0xa757('0x34')],'sectionId':_0x58633a['id']},{})[_0xa757('0x2f')](function(){return _0x2d290b;});}else{return _0x2d290b;}})[_0xa757('0x24')](function(_0x4c19a6){logger['error'](_0xa757('0x5b'),_0x4c19a6);throw _0x4c19a6;});}return _0x2d290b;})[_0xa757('0x2f')](respondWithResult(_0x1d8742,0xc9))[_0xa757('0x24')](handleError(_0x1d8742,null));};exports['update']=function(_0x55a7d2,_0x18dff7){if(_0x55a7d2[_0xa757('0x57')]['id']){delete _0x55a7d2[_0xa757('0x57')]['id'];}return db[_0xa757('0x39')][_0xa757('0x55')]({'where':{'id':_0x55a7d2[_0xa757('0x53')]['id']},'include':[{'model':db['Pause'],'as':_0xa757('0x38')}]})[_0xa757('0x2f')](handleEntityNotFound(_0x18dff7,null))[_0xa757('0x2f')](saveUpdates(_0x55a7d2[_0xa757('0x57')],null))[_0xa757('0x2f')](respondWithResult(_0x18dff7,null))[_0xa757('0x24')](handleError(_0x18dff7,null));};exports[_0xa757('0x30')]=function(_0x13dd81,_0xb45477){return db[_0xa757('0x39')]['find']({'where':{'id':_0x13dd81[_0xa757('0x53')]['id']}})['then'](handleEntityNotFound(_0xb45477,null))['then'](removeEntity(_0xb45477,null))[_0xa757('0x24')](handleError(_0xb45477,null));};exports[_0xa757('0x5c')]=function(_0x432856,_0x444417){return db[_0xa757('0x39')][_0xa757('0x5c')]()[_0xa757('0x2f')](respondWithResult(_0x444417,null))[_0xa757('0x24')](handleError(_0x444417,null));};exports[_0xa757('0x5d')]=function(_0x22a185,_0x42f2c0,_0x4fc507){if(_0x22a185[_0xa757('0x57')]['id']){delete _0x22a185[_0xa757('0x57')]['id'];}return db['ChatWebsite'][_0xa757('0x55')]({'where':{'id':_0x22a185[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x42f2c0,null))[_0xa757('0x2f')](function(_0x27d79b){if(_0x27d79b){_0x22a185[_0xa757('0x57')]['ChatWebsiteId']=_0x27d79b['id'];return db[_0xa757('0x5e')]['create'](_0x22a185[_0xa757('0x57')]);}})[_0xa757('0x2f')](respondWithResult(_0x42f2c0,null))[_0xa757('0x24')](handleError(_0x42f2c0,null));};exports[_0xa757('0x5f')]=function(_0x39ca41,_0x5c0870,_0x57ec52){var _0x1c8807={'raw':![],'where':{}};var _0x10a7cb={};var _0x2338e5={'count':0x0,'rows':[]};return db['ChatWebsite'][_0xa757('0x60')]({'where':{'id':_0x39ca41['params']['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x5c0870,null))[_0xa757('0x2f')](function(_0x2b0ad4){if(_0x2b0ad4){_0x10a7cb[_0xa757('0x3b')]=_[_0xa757('0x3d')](db[_0xa757('0x5e')]['rawAttributes']);_0x10a7cb[_0xa757('0x3c')]=_[_0xa757('0x3d')](_0x39ca41[_0xa757('0x3c')]);_0x10a7cb[_0xa757('0x54')]=_[_0xa757('0x3e')](_0x10a7cb['model'],_0x10a7cb[_0xa757('0x3c')]);_0x1c8807[_0xa757('0x40')]=_[_0xa757('0x3e')](_0x10a7cb[_0xa757('0x3b')],qs[_0xa757('0x3f')](_0x39ca41['query'][_0xa757('0x3f')]));_0x1c8807[_0xa757('0x40')]=_0x1c8807[_0xa757('0x40')]['length']?_0x1c8807[_0xa757('0x40')]:_0x10a7cb[_0xa757('0x3b')];if(!_0x39ca41[_0xa757('0x3c')][_0xa757('0x61')](_0xa757('0x62'))){_0x1c8807[_0xa757('0x42')]=qs[_0xa757('0x42')](_0x39ca41[_0xa757('0x3c')][_0xa757('0x42')]);_0x1c8807[_0xa757('0x28')]=qs[_0xa757('0x28')](_0x39ca41[_0xa757('0x3c')][_0xa757('0x28')]);}_0x1c8807[_0xa757('0x43')]=qs['sort'](_0x39ca41[_0xa757('0x3c')][_0xa757('0x44')]);_0x1c8807['where']=qs[_0xa757('0x54')](_[_0xa757('0x46')](_0x39ca41['query'],_0x10a7cb[_0xa757('0x54')]));_0x1c8807[_0xa757('0x45')][_0xa757('0x63')]=_0x2b0ad4['id'];if(_0x39ca41[_0xa757('0x3c')][_0xa757('0x4c')]){_0x1c8807[_0xa757('0x45')]=_[_0xa757('0x47')](_0x1c8807[_0xa757('0x45')],{'$or':_[_0xa757('0x48')](_0x1c8807[_0xa757('0x40')],function(_0x2649a2){var _0x189195={};_0x189195[_0x2649a2]={'$like':'%'+_0x39ca41[_0xa757('0x3c')][_0xa757('0x4c')]+'%'};return _0x189195;})});}_0x1c8807=_[_0xa757('0x47')]({},_0x1c8807,_0x39ca41[_0xa757('0x4d')]);return db['Disposition'][_0xa757('0x4e')]({'where':_0x1c8807['where']})[_0xa757('0x2f')](function(_0x20c444){_0x2338e5[_0xa757('0x4e')]=_0x20c444;if(_0x39ca41[_0xa757('0x3c')][_0xa757('0x64')]){_0x1c8807['include']=[{'all':!![]}];}return db[_0xa757('0x5e')][_0xa757('0x50')](_0x1c8807);})[_0xa757('0x2f')](function(_0x4a691d){_0x2338e5[_0xa757('0x51')]=_0x4a691d;return _0x2338e5;});}})[_0xa757('0x2f')](respondWithFilteredResult(_0x5c0870,_0x1c8807))[_0xa757('0x24')](handleError(_0x5c0870,null));};exports['removeDispositions']=function(_0x501134,_0x1f437d,_0x351e0e){var _0x388e6d;return db['ChatWebsite'][_0xa757('0x55')]({'where':{'id':_0x501134['params']['id']}})['then'](handleEntityNotFound(_0x1f437d,null))[_0xa757('0x2f')](function(_0x1adf5a){if(_0x1adf5a){return _0x1adf5a[_0xa757('0x65')](_0x501134['query'][_0xa757('0x66')]);}})[_0xa757('0x2f')](respondWithStatusCode(_0x1f437d,null))[_0xa757('0x24')](handleError(_0x1f437d,null));};exports[_0xa757('0x67')]=function(_0x3e5cf5,_0x2d0ce0,_0x26dcec){if(_0x3e5cf5[_0xa757('0x57')]['id']){delete _0x3e5cf5[_0xa757('0x57')]['id'];}return db[_0xa757('0x39')][_0xa757('0x55')]({'where':{'id':_0x3e5cf5[_0xa757('0x53')]['id']}})['then'](handleEntityNotFound(_0x2d0ce0,null))[_0xa757('0x2f')](function(_0x1b624f){if(_0x1b624f){_0x3e5cf5[_0xa757('0x57')][_0xa757('0x63')]=_0x1b624f['id'];return db[_0xa757('0x68')][_0xa757('0x56')](_0x3e5cf5[_0xa757('0x57')]);}})[_0xa757('0x2f')](respondWithResult(_0x2d0ce0,null))[_0xa757('0x24')](handleError(_0x2d0ce0,null));};exports[_0xa757('0x69')]=function(_0x3997f8,_0x2f5a0f,_0x132033){var _0x3a258f={'raw':![],'where':{}};var _0x1b6adb={};var _0x57dd90={'count':0x0,'rows':[]};return db[_0xa757('0x39')][_0xa757('0x60')]({'where':{'id':_0x3997f8[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x2f5a0f,null))[_0xa757('0x2f')](function(_0x20ea21){if(_0x20ea21){_0x1b6adb['model']=_[_0xa757('0x3d')](db[_0xa757('0x68')]['rawAttributes']);_0x1b6adb[_0xa757('0x3c')]=_['keys'](_0x3997f8[_0xa757('0x3c')]);_0x1b6adb[_0xa757('0x54')]=_['intersection'](_0x1b6adb[_0xa757('0x3b')],_0x1b6adb[_0xa757('0x3c')]);_0x3a258f[_0xa757('0x40')]=_[_0xa757('0x3e')](_0x1b6adb['model'],qs[_0xa757('0x3f')](_0x3997f8[_0xa757('0x3c')]['fields']));_0x3a258f[_0xa757('0x40')]=_0x3a258f[_0xa757('0x40')]['length']?_0x3a258f[_0xa757('0x40')]:_0x1b6adb[_0xa757('0x3b')];if(!_0x3997f8[_0xa757('0x3c')][_0xa757('0x61')](_0xa757('0x62'))){_0x3a258f[_0xa757('0x42')]=qs[_0xa757('0x42')](_0x3997f8[_0xa757('0x3c')][_0xa757('0x42')]);_0x3a258f['offset']=qs['offset'](_0x3997f8[_0xa757('0x3c')][_0xa757('0x28')]);}_0x3a258f[_0xa757('0x43')]=qs[_0xa757('0x44')](_0x3997f8[_0xa757('0x3c')][_0xa757('0x44')]);_0x3a258f[_0xa757('0x45')]=qs['filters'](_[_0xa757('0x46')](_0x3997f8['query'],_0x1b6adb[_0xa757('0x54')]));_0x3a258f[_0xa757('0x45')][_0xa757('0x63')]=_0x20ea21['id'];if(_0x3997f8[_0xa757('0x3c')][_0xa757('0x4c')]){_0x3a258f['where']=_[_0xa757('0x47')](_0x3a258f['where'],{'$or':_[_0xa757('0x48')](_0x3a258f[_0xa757('0x40')],function(_0x183097){var _0x219b11={};_0x219b11[_0x183097]={'$like':'%'+_0x3997f8['query'][_0xa757('0x4c')]+'%'};return _0x219b11;})});}_0x3a258f=_[_0xa757('0x47')]({},_0x3a258f,_0x3997f8[_0xa757('0x4d')]);return db[_0xa757('0x68')][_0xa757('0x4e')]({'where':_0x3a258f[_0xa757('0x45')]})[_0xa757('0x2f')](function(_0x26dff8){_0x57dd90['count']=_0x26dff8;if(_0x3997f8[_0xa757('0x3c')][_0xa757('0x64')]){_0x3a258f[_0xa757('0x4f')]=[{'all':!![]}];}return db[_0xa757('0x68')]['findAll'](_0x3a258f);})[_0xa757('0x2f')](function(_0x40f851){_0x57dd90[_0xa757('0x51')]=_0x40f851;return _0x57dd90;});}})[_0xa757('0x2f')](respondWithFilteredResult(_0x2f5a0f,_0x3a258f))[_0xa757('0x24')](handleError(_0x2f5a0f,null));};exports[_0xa757('0x6a')]=function(_0x37bc78,_0x5ac363,_0x4bd160){var _0x38d7b4;return db['ChatWebsite'][_0xa757('0x55')]({'where':{'id':_0x37bc78['params']['id']}})['then'](handleEntityNotFound(_0x5ac363,null))[_0xa757('0x2f')](function(_0x331775){if(_0x331775){return _0x331775[_0xa757('0x6a')](_0x37bc78[_0xa757('0x3c')][_0xa757('0x66')]);}})[_0xa757('0x2f')](respondWithStatusCode(_0x5ac363,null))[_0xa757('0x24')](handleError(_0x5ac363,null));};exports[_0xa757('0x6b')]=function(_0x14b610,_0xb903,_0x4da18a){_0x14b610[_0xa757('0x57')]['sitepic']=_0x14b610[_0xa757('0x6c')][_0xa757('0x6d')];return db[_0xa757('0x39')][_0xa757('0x55')]({'where':{'id':_0x14b610['params']['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0xb903,null))[_0xa757('0x2f')](saveUpdates(_0x14b610[_0xa757('0x57')],null))[_0xa757('0x2f')](respondWithResult(_0xb903,null))[_0xa757('0x24')](handleError(_0xb903,null));};exports[_0xa757('0x6e')]=function(_0x1c789c,_0xa4313f,_0x150b5c){_0x1c789c[_0xa757('0x57')][_0xa757('0x6f')]=_0x1c789c[_0xa757('0x6c')][_0xa757('0x6d')];return db[_0xa757('0x39')][_0xa757('0x55')]({'where':{'id':_0x1c789c['params']['id']}})['then'](handleEntityNotFound(_0xa4313f,null))[_0xa757('0x2f')](saveUpdates(_0x1c789c['body'],null))[_0xa757('0x2f')](respondWithResult(_0xa4313f,null))[_0xa757('0x24')](handleError(_0xa4313f,null));};exports[_0xa757('0x70')]=function(_0x1d03a7,_0x48c52f,_0x33995b){_0x1d03a7[_0xa757('0x57')][_0xa757('0x71')]=_0x1d03a7[_0xa757('0x6c')][_0xa757('0x6d')];return db[_0xa757('0x39')]['find']({'where':{'id':_0x1d03a7[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x48c52f,null))[_0xa757('0x2f')](saveUpdates(_0x1d03a7[_0xa757('0x57')],null))[_0xa757('0x2f')](respondWithResult(_0x48c52f,null))['catch'](handleError(_0x48c52f,null));};exports['addSystemAvatar']=function(_0x26954d,_0x531cba,_0x2b177c){_0x26954d['body'][_0xa757('0x72')]=_0x26954d[_0xa757('0x6c')][_0xa757('0x6d')];return db[_0xa757('0x39')][_0xa757('0x55')]({'where':{'id':_0x26954d[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x531cba,null))[_0xa757('0x2f')](saveUpdates(_0x26954d[_0xa757('0x57')],null))[_0xa757('0x2f')](respondWithResult(_0x531cba,null))[_0xa757('0x24')](handleError(_0x531cba,null));};exports['getLogo']=function(_0x289149,_0x38a6db,_0x3eb34f){var _0x3a1717=path[_0xa757('0x73')](config[_0xa757('0x74')],'server/files/images/logos/default_logo.png');var _0x30439a={'where':{'id':_0x289149[_0xa757('0x53')]['id']},'attributes':['id','sitepic'],'raw':!![]};var _0x133f0c=![];return require(_0xa757('0x75'))[_0xa757('0x76')]()['then'](function(_0x3ae3bf){if(_0x3ae3bf){_0x133f0c=_0x3ae3bf[_0xa757('0x77')];}})[_0xa757('0x2f')](function(){return db[_0xa757('0x39')][_0xa757('0x55')](_0x30439a);})['then'](handleEntityNotFound(_0x38a6db,null))[_0xa757('0x2f')](function(_0x5ddcab){if(_0x5ddcab){if(!_['isNil'](_0x5ddcab[_0xa757('0x78')])){if(fs['existsSync'](path['join'](config[_0xa757('0x74')],_0xa757('0x79'),_0x5ddcab[_0xa757('0x78')]))&&_0x133f0c){_0x3a1717=path[_0xa757('0x73')](config[_0xa757('0x74')],_0xa757('0x79'),_0x5ddcab['sitepic']);}}return _0x38a6db['download'](_0x3a1717);}})['catch'](handleError(_0x38a6db,null));};exports['getAvatar']=function(_0x5cd42d,_0x4e5e8f,_0x504367){var _0x1c9b81=path['join'](config[_0xa757('0x74')],_0xa757('0x7a'));var _0x146305={'where':{'id':_0x5cd42d[_0xa757('0x53')]['id']},'attributes':['id',_0xa757('0x6f')],'raw':!![]};return db[_0xa757('0x39')][_0xa757('0x55')](_0x146305)[_0xa757('0x2f')](handleEntityNotFound(_0x4e5e8f,null))[_0xa757('0x2f')](function(_0x49f3fe){if(_0x49f3fe){if(!_['isNil'](_0x49f3fe[_0xa757('0x6f')])){if(fs[_0xa757('0x7b')](path[_0xa757('0x73')](config[_0xa757('0x74')],'server/files/images/avatars/',_0x49f3fe[_0xa757('0x6f')]))){_0x1c9b81=path[_0xa757('0x73')](config[_0xa757('0x74')],_0xa757('0x7c'),_0x49f3fe[_0xa757('0x6f')]);}}return _0x4e5e8f[_0xa757('0x7d')](_0x1c9b81);}})[_0xa757('0x24')](handleError(_0x4e5e8f,null));};exports['getCustomerAvatar']=function(_0x2a6423,_0x2116a8,_0x494735){var _0x3799ce=path[_0xa757('0x73')](config[_0xa757('0x74')],_0xa757('0x7e'));var _0x1b61ba={'where':{'id':_0x2a6423['params']['id']},'attributes':['id',_0xa757('0x71'),_0xa757('0x7f')],'raw':!![]};return db[_0xa757('0x39')]['find'](_0x1b61ba)[_0xa757('0x2f')](handleEntityNotFound(_0x2116a8,null))[_0xa757('0x2f')](function(_0xb65657){if(_0xb65657){if(!_['isNil'](_0xb65657[_0xa757('0x71')])){if(fs[_0xa757('0x7b')](path[_0xa757('0x73')](config[_0xa757('0x74')],_0xa757('0x7c'),_0xb65657['customerAvatar']))&&_0xb65657[_0xa757('0x7f')]){_0x3799ce=path['join'](config['root'],_0xa757('0x7c'),_0xb65657[_0xa757('0x71')]);}}return _0x2116a8[_0xa757('0x7d')](_0x3799ce);}})[_0xa757('0x24')](handleError(_0x2116a8,null));};exports['getSystemAvatar']=function(_0xe88a0a,_0x36c462,_0x4735a9){var _0x2aa91b=path[_0xa757('0x73')](config[_0xa757('0x74')],_0xa757('0x80'));var _0xad41e1={'where':{'id':_0xe88a0a['params']['id']},'attributes':['id',_0xa757('0x72')],'raw':!![]};return db[_0xa757('0x39')][_0xa757('0x55')](_0xad41e1)[_0xa757('0x2f')](handleEntityNotFound(_0x36c462,null))[_0xa757('0x2f')](function(_0x182d71){if(_0x182d71){if(!_[_0xa757('0x81')](_0x182d71[_0xa757('0x72')])){if(fs[_0xa757('0x7b')](path['join'](config['root'],_0xa757('0x7c'),_0x182d71[_0xa757('0x72')]))){_0x2aa91b=path['join'](config[_0xa757('0x74')],'server/files/images/avatars/',_0x182d71[_0xa757('0x72')]);}}return _0x36c462[_0xa757('0x7d')](_0x2aa91b);}})[_0xa757('0x24')](handleError(_0x36c462,null));};exports[_0xa757('0x82')]=function(_0x4601de,_0x1bb681,_0x168bbd){var _0xaf735e=require(_0xa757('0x83'));var _0x5b89a4=new _0xaf735e();var _0x31ead6=_0x5b89a4[_0xa757('0x84')](_0x4601de['headers'][_0xa757('0x85')])[_0xa757('0x86')]();var _0x4598d0={'body':_0x4601de[_0xa757('0x57')],'channel':_0xa757('0x87')};var _0x210fcb=[];var _0x377de7=[];var _0x42ba86={};var _0x2ea80d=![];return db[_0xa757('0x88')][_0xa757('0x5c')]()[_0xa757('0x2f')](function(_0x4bc42c){if(!_0x4bc42c){throw new db[(_0xa757('0x89'))][(_0xa757('0x8a'))]('no\x20available\x20attributes');}_0x210fcb=_[_0xa757('0x8b')](_[_0xa757('0x3d')](_0x4bc42c),['createdAt',_0xa757('0x8c')]);_0x377de7=_[_0xa757('0x8b')](_[_0xa757('0x3d')](_0x4bc42c),[_0xa757('0x8d'),'updatedAt','CompanyId',_0xa757('0x8e')]);if(_0x4601de['body']['id']){delete _0x4601de[_0xa757('0x57')]['id'];}if(_['isNil'](_0x4601de[_0xa757('0x57')][_0xa757('0x8f')])){throw new db[(_0xa757('0x89'))][(_0xa757('0x8a'))](_0xa757('0x90'));}if(_['isNil'](_0x4601de['body'][_0xa757('0x57')])||_0x4601de[_0xa757('0x57')][_0xa757('0x57')]===''){throw new db[(_0xa757('0x89'))]['ValidationError']('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0xa757('0x81')](_0x4601de['body'][_0xa757('0x91')])){throw new db[(_0xa757('0x89'))][(_0xa757('0x8a'))](_0xa757('0x92')+_0x377de7);}if(!_[_0xa757('0x93')](_0x377de7,_0x4601de[_0xa757('0x57')][_0xa757('0x91')])){throw new db['Sequelize'][(_0xa757('0x8a'))](_0xa757('0x94')+_0x377de7);}_0x42ba86[_0x4601de[_0xa757('0x57')][_0xa757('0x91')]]=_0x4601de[_0xa757('0x57')][_0xa757('0x8f')];})[_0xa757('0x2f')](function(){return db['ChatWebsite']['find']({'where':{'id':_0x4601de[_0xa757('0x53')]['id']},'include':[{'model':db[_0xa757('0x95')],'as':_0xa757('0x96'),'include':[{'model':db[_0xa757('0x88')],'as':_0xa757('0x97'),'where':_0x42ba86,'limit':0x1,'order':[[_0xa757('0x8c'),'DESC']]}]},{'model':db[_0xa757('0x98')],'as':'Applications'}]});})[_0xa757('0x2f')](handleEntityNotFound(_0x1bb681,null))[_0xa757('0x2f')](function(_0x3c7e49){if(_0x3c7e49&&_0x3c7e49[_0xa757('0x96')]){_0x4598d0[_0xa757('0x99')]=_0x3c7e49;_0x4598d0[_0xa757('0x9a')]=_0x3c7e49[_0xa757('0x9b')];_0x4598d0[_0xa757('0x9c')]=_0x3c7e49[_0xa757('0x96')];_0x4598d0[_0xa757('0x9a')]=_['orderBy'](_0x4598d0['applications'],[_0xa757('0x9d')],['asc']);if(_0x4598d0['account'][_0xa757('0x9b')]){delete _0x4598d0[_0xa757('0x99')]['Applications'];}if(_0x4598d0[_0xa757('0x99')]['List']&&_0x4598d0[_0xa757('0x99')][_0xa757('0x96')][_0xa757('0x97')][_0xa757('0x41')]){return _0x4598d0[_0xa757('0x99')][_0xa757('0x96')][_0xa757('0x97')][0x0];}var _0x44d742=_['defaults'](_0x4601de['body'],{'firstName':_0x4601de[_0xa757('0x57')]['from'],'ListId':_0x3c7e49[_0xa757('0x8e')]});_0x44d742[_0x4601de[_0xa757('0x57')][_0xa757('0x91')]]=_0x4601de[_0xa757('0x57')][_0xa757('0x8f')];return db[_0xa757('0x88')][_0xa757('0x56')](_0x44d742,{'fields':_0x210fcb,'raw':!![]});}})[_0xa757('0x2f')](handleEntityNotFound(_0x1bb681,null))['then'](function(_0x2d0344){_0x4598d0['contact']=_0x2d0344;if(_0x2d0344){var _0x53dd5f={'ContactId':_0x2d0344['id'],'ChatWebsiteId':_0x4601de[_0xa757('0x53')]['id'],'from':(_0x2d0344[_0xa757('0x9e')]||'')+'\x20'+(_0x2d0344[_0xa757('0x9f')]||''),'customerIp':_0x4601de[_0xa757('0x57')]['customerIp'],'referer':_0x4601de[_0xa757('0x57')]['referer'],'browserName':_0x31ead6[_0xa757('0xa0')]['name']&&_0x31ead6[_0xa757('0xa0')][_0xa757('0xa1')]?util['format'](_0xa757('0xa2'),_0x31ead6[_0xa757('0xa0')]['name'],_0x31ead6[_0xa757('0xa0')][_0xa757('0xa1')]):_0xa757('0xa3'),'browserVersion':_0x31ead6[_0xa757('0xa0')][_0xa757('0xa1')]||_0xa757('0xa3'),'osName':util[_0xa757('0xa4')]('%s\x20%s',_0x31ead6['os'][_0xa757('0x34')],_0x31ead6['os'][_0xa757('0xa1')]),'osVersion':_0x31ead6['os']['version'],'deviceModel':_0x31ead6['device'][_0xa757('0x3b')]&&_0x31ead6[_0xa757('0xa5')][_0xa757('0xa6')]?util[_0xa757('0xa4')](_0xa757('0xa7'),_0x31ead6[_0xa757('0xa5')][_0xa757('0x3b')],_0x31ead6[_0xa757('0xa5')][_0xa757('0xa6')],_0x31ead6[_0xa757('0xa5')][_0xa757('0xa8')]):null,'deviceVendor':_0x31ead6[_0xa757('0xa5')][_0xa757('0xa6')],'deviceType':_0x31ead6['device'][_0xa757('0xa8')],'formData':JSON[_0xa757('0xa9')](_0x4601de[_0xa757('0x57')])};var _0x54edfb={'ChatWebsiteId':_0x4601de['params']['id'],'closed':![]};if(_0x4601de[_0xa757('0x57')][_0xa757('0xaa')]){_0x54edfb['threadId']=_0x4601de[_0xa757('0x57')][_0xa757('0xaa')];return db['ChatInteraction'][_0xa757('0x55')]({'where':_0x54edfb})['then'](function(_0x20b817){if(_0x20b817){return[_0x20b817,![]];}_0x53dd5f[_0xa757('0xaa')]=_0x4601de[_0xa757('0x57')][_0xa757('0xaa')];_0x53dd5f[_0xa757('0xab')]=_0x4601de[_0xa757('0x57')][_0xa757('0xab')];return db[_0xa757('0xac')]['create'](_0x53dd5f)[_0xa757('0x2f')](function(_0x54ae6f){return[_0x54ae6f,!![]];});});}_0x54edfb['ContactId']=_0x2d0344['id'];if(_0x4601de[_0xa757('0x57')][_0xa757('0xad')]&&_0x4601de['body']['interaction']['id']){_0x54edfb['id']=_0x4601de['body'][_0xa757('0xad')]['id'];return db[_0xa757('0xac')][_0xa757('0x55')]({'where':_0x54edfb})['then'](function(_0x1327f7){if(_0x1327f7){return[_0x1327f7,![]];}return db[_0xa757('0xac')][_0xa757('0x56')](_0x53dd5f)[_0xa757('0x2f')](function(_0x1caccc){return[_0x1caccc,!![]];});});}return db[_0xa757('0xac')][_0xa757('0x56')](_0x53dd5f)[_0xa757('0x2f')](function(_0x573b82){return[_0x573b82,!![]];});}})[_0xa757('0xae')](function(_0x485e4f,_0x4654e3){if(_0x485e4f){_0x2ea80d=_0x4654e3;if(!_0x4654e3){var _0x238e2b={'from':(_0x4598d0[_0xa757('0xaf')][_0xa757('0x9e')]||'')+'\x20'+(_0x4598d0[_0xa757('0xaf')]['lastName']||'')};if(_0x4601de[_0xa757('0x57')]['threadId']&&_0x4601de[_0xa757('0x57')][_0xa757('0xb0')]&&_0x4601de[_0xa757('0x57')][_0xa757('0xaa')]!=_0x4601de[_0xa757('0x57')][_0xa757('0xb0')]){_0x238e2b[_0xa757('0xaa')]=_0x4601de[_0xa757('0x57')][_0xa757('0xb0')];}return _0x485e4f['update'](_0x238e2b);}else{return _0x485e4f;}}})['then'](function(_0x2ef834){_0x4598d0[_0xa757('0xad')]=_0x2ef834['get']({'plain':!![]});_0x4598d0[_0xa757('0xad')][_0xa757('0xb1')]=_0x2ea80d;if(_0x4598d0['interaction'][_0xa757('0xb1')]){if(_0x4598d0['account'][_0xa757('0xb2')]){_0x4598d0[_0xa757('0x9a')][_0xa757('0xb3')]({'id':0x0,'priority':_0x4598d0[_0xa757('0x9a')][_0xa757('0x41')]+0x1,'app':_0xa757('0xb4'),'appdata':_0xa757('0xb5'),'interval':_0xa757('0xb6')});}}return db[_0xa757('0xb7')][_0xa757('0x56')]({'body':_0x4601de[_0xa757('0x57')][_0xa757('0x57')],'ChatWebsiteId':_0x4601de[_0xa757('0x53')]['id'],'ChatInteractionId':_0x2ef834['id'],'direction':'in','ContactId':_0x4598d0['contact']['id'],'AttachmentId':_0x4601de['body'][_0xa757('0xb8')]});})[_0xa757('0x2f')](function(_0x3199d6){_0x4598d0['message']=_0x3199d6;if(_0x4598d0[_0xa757('0xad')][_0xa757('0xb9')]){return db[_0xa757('0xba')][_0xa757('0x55')]({'attributes':['id',_0xa757('0x34')],'where':{'id':_0x4598d0['interaction']['UserId']}})[_0xa757('0x2f')](function(_0x4606e1){if(_0x4606e1){_0x4598d0[_0xa757('0x9a')]['unshift']({'id':0x0,'priority':0x0,'app':_0xa757('0xbb'),'appdata':_0x4606e1[_0xa757('0x34')]+','+(_0x4598d0['account'][_0xa757('0xbc')]||0xa),'interval':_0xa757('0xb6')});_0x4598d0[_0xa757('0xbd')]=!![];}return respondWithRpcPromise('Start',_0xa757('0xbe'),_0x4598d0);});}return respondWithRpcPromise(_0xa757('0xbf'),_0xa757('0xbe'),_0x4598d0);})[_0xa757('0x2f')](function(_0x22939e){respondWithRpcPromise(_0xa757('0xc0'),_0xa757('0xc0'),{'event':'notify','message':_0x22939e},client9002);return _0x22939e;})[_0xa757('0x2f')](respondWithResult(_0x1bb681,null))['catch'](handleError(_0x1bb681,null));};exports[_0xa757('0xc1')]=function(_0x439650,_0x319742,_0x3694bc){var _0x57f3fd,_0x4d033f,_0x10f936;var _0x488be0=[];var _0x36391a=[];var _0x4243db={};return db[_0xa757('0x88')]['describe']()['then'](function(_0x15ee4c){if(!_0x15ee4c){throw new db[(_0xa757('0x89'))][(_0xa757('0x8a'))](_0xa757('0xc2'));}_0x36391a=_[_0xa757('0x8b')](_[_0xa757('0x3d')](_0x15ee4c),['createdAt',_0xa757('0x8c')]);_0x488be0=_[_0xa757('0x8b')](_[_0xa757('0x3d')](_0x15ee4c),['createdAt',_0xa757('0x8c'),_0xa757('0xc3'),_0xa757('0x8e')]);if(_0x439650[_0xa757('0x57')]['id']){delete _0x439650[_0xa757('0x57')]['id'];}if(_[_0xa757('0x81')](_0x439650[_0xa757('0x57')]['from'])){throw _0x319742[_0xa757('0x26')](0x1f4)[_0xa757('0x35')](new db[(_0xa757('0x89'))][(_0xa757('0x8a'))](_0xa757('0x90')));}if(_[_0xa757('0x81')](_0x439650[_0xa757('0x57')]['body'])||_0x439650[_0xa757('0x57')]['body']===''){throw _0x319742[_0xa757('0x26')](0x1f4)['send'](new db[(_0xa757('0x89'))][(_0xa757('0x8a'))](_0xa757('0xc4')));}if(_['isNil'](_0x439650['body']['mapKeyOffline'])){throw _0x319742[_0xa757('0x26')](0x1f4)[_0xa757('0x35')](new db[(_0xa757('0x89'))][(_0xa757('0x8a'))]('mapKeyOffline\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x488be0));}if(!_[_0xa757('0x93')](_0x488be0,_0x439650['body'][_0xa757('0xc5')])){throw _0x319742[_0xa757('0x26')](0x1f4)[_0xa757('0x35')](new db['Sequelize'][(_0xa757('0x8a'))]('mapKeyOffline\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x488be0));}_0x4243db[_0x439650[_0xa757('0x57')][_0xa757('0xc5')]]=_0x439650['body'][_0xa757('0x8f')];})[_0xa757('0x2f')](function(){return db[_0xa757('0x39')]['find']({'where':{'id':_0x439650['params']['id']},'include':[{'model':db['CmList'],'as':_0xa757('0x96')}]});})[_0xa757('0x2f')](handleEntityNotFound(_0x319742,null))['then'](function(_0x500fbe){if(_0x500fbe&&_0x500fbe[_0xa757('0x96')]){_0x4d033f=_0x500fbe;var _0xdd7b4f=_[_0xa757('0xc6')](_0x439650['body'],{'firstName':_0x439650['body']['from'],'phone':_0x439650[_0xa757('0x57')][_0xa757('0x8f')],'ListId':_0x500fbe[_0xa757('0x8e')]});_0xdd7b4f[_0x439650[_0xa757('0x57')][_0xa757('0xc5')]]=_0x439650[_0xa757('0x57')][_0xa757('0x8f')];return db[_0xa757('0x88')]['findOrCreate']({'where':_0x4243db,'defaults':_0xdd7b4f});}})[_0xa757('0xae')](function(_0x468ae5){if(_0x468ae5){_0x10f936=_0x468ae5;var _0x530e8f=fs[_0xa757('0xc7')](path[_0xa757('0x73')](config[_0xa757('0x74')],_0xa757('0xc8')),_0xa757('0xc9'));var _0x9b7857=ejs[_0xa757('0xca')](_0x530e8f,{'body':_[_0xa757('0xcb')](_0x439650[_0xa757('0x57')][_0xa757('0x57')]),'bodyTitle':_0x4d033f[_0xa757('0xcc')]});return db[_0xa757('0xcd')]['create']({'body':_0x9b7857,'ContactId':_0x468ae5['id'],'ChatWebsiteId':_0x4d033f['id']});}})['then'](function(_0x2abae7){if(_0x2abae7){_0x57f3fd=_0x2abae7;return db[_0xa757('0xce')][_0xa757('0x60')]({'where':{'service':!![]},'include':[{'model':db[_0xa757('0xcf')],'as':_0xa757('0xd0'),'raw':!![]}]});}})[_0xa757('0x2f')](function(_0x25bcf0){if(_0x25bcf0&&_0x25bcf0['Smtp']&&_0x4d033f[_0xa757('0xd1')]){var _0x2266db={'tls':{'rejectUnauthorized':![]}};if(_0x25bcf0[_0xa757('0xd0')][_0xa757('0xd2')]){_0x2266db[_0xa757('0xd2')]=_0x25bcf0[_0xa757('0xd0')][_0xa757('0xd2')];}else{_0x2266db['host']=_0x25bcf0[_0xa757('0xd0')][_0xa757('0xd3')];_0x2266db['port']=_0x25bcf0['Smtp']['port'];_0x2266db[_0xa757('0xd4')]=_0x25bcf0['Smtp']['secure'];}if(_0x25bcf0[_0xa757('0xd0')][_0xa757('0xd5')]){_0x2266db[_0xa757('0xd6')]={'user':_0x25bcf0[_0xa757('0xd0')]['user'],'pass':_0x25bcf0[_0xa757('0xd0')][_0xa757('0xd7')]};}return respondWithRpcPromise('SendMail',_0xa757('0xd8'),{'account':_0x2266db,'message':{'from':util[_0xa757('0xa4')](_0xa757('0xd9'),_0x25bcf0[_0xa757('0x34')],_0x25bcf0['email']||_0x25bcf0[_0xa757('0xd0')][_0xa757('0x58')]),'to':_0x4d033f[_0xa757('0xd1')],'subject':_0x4d033f[_0xa757('0xda')],'text':_0x57f3fd[_0xa757('0x57')]}},client9003)[_0xa757('0x2f')](function(){return _0x57f3fd;})[_0xa757('0x24')](function(_0x321d9e){console[_0xa757('0x20')](_0x321d9e);});}})['then'](function(){if(_0x57f3fd){return _0x57f3fd;}})[_0xa757('0x2f')](respondWithResult(_0x319742,null))[_0xa757('0x24')](handleError(_0x319742,null));};exports[_0xa757('0xdb')]=function(_0x3b003d,_0x256da6,_0x3f6732){return db[_0xa757('0xac')]['find']({'where':{'id':_0x3b003d[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x256da6,null))[_0xa757('0x2f')](function(_0x13248a){if(_0x13248a){return _0x13248a[_0xa757('0xdb')](_0x3b003d[_0xa757('0x57')][_0xa757('0x66')],_[_0xa757('0xdc')](_0x3b003d[_0xa757('0x57')],['ids','id'])||{});}})[_0xa757('0x2f')](respondWithResult(_0x256da6,null))['catch'](handleError(_0x256da6,null));};exports['getInteractions']=function(_0x49e774,_0x48cf01,_0x1a60a2){var _0x40e0df={'raw':![],'where':{}};var _0x54f4ca={};var _0x4152da={'count':0x0,'rows':[]};return db['ChatWebsite']['findOne']({'where':{'id':_0x49e774[_0xa757('0x53')]['id']}})['then'](handleEntityNotFound(_0x48cf01,null))['then'](function(_0x59ff48){if(_0x59ff48){_0x54f4ca[_0xa757('0x3b')]=_['keys'](db[_0xa757('0xac')][_0xa757('0x3a')]);_0x54f4ca[_0xa757('0x3c')]=_[_0xa757('0x3d')](_0x49e774['query']);_0x54f4ca[_0xa757('0x54')]=_[_0xa757('0x3e')](_0x54f4ca[_0xa757('0x3b')],_0x54f4ca[_0xa757('0x3c')]);_0x40e0df[_0xa757('0x40')]=_[_0xa757('0x3e')](_0x54f4ca[_0xa757('0x3b')],qs['fields'](_0x49e774[_0xa757('0x3c')][_0xa757('0x3f')]));_0x40e0df['attributes']=_0x40e0df[_0xa757('0x40')][_0xa757('0x41')]?_0x40e0df['attributes']:_0x54f4ca[_0xa757('0x3b')];if(!_0x49e774[_0xa757('0x3c')][_0xa757('0x61')](_0xa757('0x62'))){_0x40e0df[_0xa757('0x42')]=qs[_0xa757('0x42')](_0x49e774[_0xa757('0x3c')]['limit']);_0x40e0df[_0xa757('0x28')]=qs[_0xa757('0x28')](_0x49e774[_0xa757('0x3c')][_0xa757('0x28')]);}_0x40e0df['order']=qs[_0xa757('0x44')](_0x49e774[_0xa757('0x3c')][_0xa757('0x44')]);_0x40e0df['where']=qs[_0xa757('0x54')](_[_0xa757('0x46')](_0x49e774['query'],_0x54f4ca[_0xa757('0x54')]));_0x40e0df['where'][_0xa757('0x63')]=_0x59ff48['id'];if(_0x49e774['query'][_0xa757('0x4c')]){_0x40e0df[_0xa757('0x45')]=_[_0xa757('0x47')](_0x40e0df['where'],{'$or':_[_0xa757('0x48')](_0x40e0df[_0xa757('0x40')],function(_0x28a72a){var _0x11a10a={};_0x11a10a[_0x28a72a]={'$like':'%'+_0x49e774[_0xa757('0x3c')]['filter']+'%'};return _0x11a10a;})});}_0x40e0df=_[_0xa757('0x47')]({},_0x40e0df,_0x49e774[_0xa757('0x4d')]);return db[_0xa757('0xac')][_0xa757('0x4e')]({'where':_0x40e0df[_0xa757('0x45')]})[_0xa757('0x2f')](function(_0x5b96ff){_0x4152da[_0xa757('0x4e')]=_0x5b96ff;if(_0x49e774[_0xa757('0x3c')][_0xa757('0x64')]){_0x40e0df[_0xa757('0x4f')]=[{'model':db[_0xa757('0x88')],'as':_0xa757('0xdd'),'required':![]},{'model':db[_0xa757('0xba')],'as':'Owner','attributes':[_0xa757('0x34'),'fullname','internal'],'required':![]},{'model':db[_0xa757('0xde')],'as':_0xa757('0xdf'),'attributes':['id',_0xa757('0x34'),'color'],'where':_0x49e774[_0xa757('0x3c')]['tag']?{'id':_0x49e774[_0xa757('0x3c')][_0xa757('0xe0')]}:undefined,'required':_0x49e774['query'][_0xa757('0xe0')]?!![]:![]}];}return db['ChatInteraction'][_0xa757('0x50')](_0x40e0df);})[_0xa757('0x2f')](function(_0x336cd1){_0x4152da[_0xa757('0x51')]=_0x336cd1;return _0x4152da;});}})[_0xa757('0x2f')](respondWithFilteredResult(_0x48cf01,_0x40e0df))[_0xa757('0x24')](handleError(_0x48cf01,null));};function iftimePromise(_0x998939,_0x243640){return respondWithRpcPromise(_0xa757('0xe1'),_0xa757('0xe2'),{'command':_0x243640[_0xa757('0xe3')]?util['format'](_0xa757('0xe4'),_0x998939[_0xa757('0xe5')],_0x243640[_0xa757('0xe3')]):util[_0xa757('0xa4')](_0xa757('0xe6'),_0x998939[_0xa757('0xe5')])},client9002)[_0xa757('0x2f')](function(_0x2b8680){var _0x571abe=_0x2b8680&&_0x2b8680[_0xa757('0xe7')]('true')>=0x0?!![]:![];logger[_0xa757('0x1b')](_0xa757('0xe8'),_0x243640['id'],_0x998939['id'],_0x998939[_0xa757('0xe5')],_0x571abe?_0xa757('0xe9'):_0xa757('0xea'),_0x243640['timezone']?_0x243640[_0xa757('0xe3')]:_0xa757('0xeb'));return _0x571abe;})[_0xa757('0x24')](function(_0x507af2){logger[_0xa757('0x20')]('[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)',_0x243640['id'],_0x998939['id'],_0x998939['interval'],util[_0xa757('0xec')](_0x507af2,{'showHidden':![],'depth':null}),_0x243640[_0xa757('0xe3')]?_0x243640[_0xa757('0xe3')]:_0xa757('0xeb'));return![];});}exports['getSnippet']=function(_0x3630ad,_0xdc5215,_0x41c5ec){var _0xa1bd24=0x0;var _0x367a3c=0x0;var _0x4e4067=![];var _0x535599;var _0x4e3fa6;return db['ChatWebsite'][_0xa757('0x55')]({'where':{'id':_0x3630ad['params']['id']},'include':[{'model':db[_0xa757('0xed')],'as':_0xa757('0xed'),'include':[{'model':db[_0xa757('0xed')],'as':_0xa757('0xee'),'attributes':['id',_0xa757('0xe5')],'raw':!![]}]}]})[_0xa757('0x2f')](handleEntityNotFound(_0xdc5215,null))[_0xa757('0x2f')](function(_0x3c32e2){if(_0x3c32e2){_0x535599=_0x3c32e2;return _0x3c32e2[_0xa757('0xef')]({'raw':!![]});}})[_0xa757('0x2f')](function(_0xa2a8d0){if(_0x535599){if(_0xa2a8d0){_0x4e3fa6=_0xa2a8d0;}}return require(_0xa757('0x75'))[_0xa757('0x76')]();})[_0xa757('0x2f')](function(_0x62d6d0){if(_0x62d6d0){_0x367a3c=_0x62d6d0[_0xa757('0xf0')];_0x4e4067=_0x62d6d0[_0xa757('0x77')];}})[_0xa757('0x2f')](function(){return db[_0xa757('0xac')][_0xa757('0x4e')]({'where':{'closed':![]}});})[_0xa757('0x2f')](function(_0x1c5163){_0xa1bd24=_0x1c5163;if(_0x367a3c&&_0x1c5163>_0x367a3c){return db[_0xa757('0xf1')][_0xa757('0x60')]({'where':{'id':0x1}})[_0xa757('0x2f')](function(_0x1f0f82){if(_0x1f0f82){_0x1f0f82[_0xa757('0xf2')](_0xa757('0xf3'));}});}})['then'](function(){if(_0x535599[_0xa757('0xed')]&&_0x535599[_0xa757('0xed')][_0xa757('0xee')]){var _0x27880f=[];for(var _0x4cd02d=0x0;_0x4cd02d<_0x535599[_0xa757('0xed')][_0xa757('0xee')][_0xa757('0x41')];_0x4cd02d++){var _0x1f2420=_0x535599[_0xa757('0xed')][_0xa757('0xee')][_0x4cd02d][_0xa757('0x31')]({'plain':!![]});_0x27880f[_0xa757('0xb3')](iftimePromise(_0x1f2420,_0x535599));}return BPromise[_0xa757('0xf4')](_0x27880f)[_0xa757('0x2f')](function(_0x43923c){return _[_0xa757('0xf5')](_0x43923c);});}else{return!![];}})[_0xa757('0x2f')](function(_0x211d2d){var _0x597b76=fs[_0xa757('0xc7')](path[_0xa757('0x73')](config['root'],_0xa757('0xf6')),_0xa757('0xc9'));var _0x103b0f={'remote':_0x535599[_0xa757('0xf7')],'query':querystring['stringify'](_[_0xa757('0x47')](_0x535599[_0xa757('0x31')]({'plain':!![]}),{'customerIp':_0x3630ad[_0xa757('0xf8')][_0xa757('0xf9')]||_0x3630ad[_0xa757('0xf8')][_0xa757('0xfa')]||_0x3630ad[_0xa757('0xfb')][_0xa757('0xfc')]||_0x3630ad['ip'],'referer':_0x3630ad[_0xa757('0xf8')][_0xa757('0xfd')],'openedInteractions':_0xa1bd24,'maxInteractions':_0x367a3c,'virtual':_0x4e4067[_0xa757('0xf0')],'online':_0x211d2d,'custom':_0x4e4067}))['replace'](/'/g,'\x5c\x27')};_0xdc5215['send'](ejs['render'](Mustache[_0xa757('0xca')](_0x597b76,_0x103b0f),{'proactiveActions':_0x4e3fa6,'alignment':_0x535599[_0xa757('0xfe')],'verticalAlignment':_0x535599[_0xa757('0xff')]}));})[_0xa757('0x24')](handleError(_0xdc5215,null));};exports[_0xa757('0x100')]=function(_0x269c15,_0x1e1866,_0x369976){return db[_0xa757('0x39')][_0xa757('0x60')]({'where':{'id':_0x269c15[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x1e1866,null))[_0xa757('0x2f')](function(_0x7af4cd){if(_0x7af4cd){return db[_0xa757('0x101')][_0xa757('0x102')](function(_0x45d722){return db[_0xa757('0x98')][_0xa757('0x30')]({'where':{'ChatWebsiteId':_0x269c15[_0xa757('0x53')]['id']},'transaction':_0x45d722})[_0xa757('0x2f')](function(_0x41ace9){var _0x195712=_[_0xa757('0x48')](_0x269c15[_0xa757('0x57')],function(_0x49f07c){_0x49f07c[_0xa757('0x63')]=_0x269c15[_0xa757('0x53')]['id'];return _0x49f07c;});return db[_0xa757('0x98')][_0xa757('0x103')](_0x195712,{'transaction':_0x45d722});});})['then'](function(){return db[_0xa757('0x98')]['findAndCountAll']({'where':{'ChatWebsiteId':_0x269c15[_0xa757('0x53')]['id']},'order':_0xa757('0x9d')});});}})[_0xa757('0x2f')](respondWithResult(_0x1e1866,null))['catch'](handleError(_0x1e1866,null));};exports[_0xa757('0x104')]=function(_0x49c0bd,_0x4f92ee,_0x411c88){var _0x38f40b={};var _0x5bab76={};var _0x1e2b34;var _0x230057;return db[_0xa757('0x39')][_0xa757('0x60')]({'where':{'id':_0x49c0bd[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x4f92ee,null))[_0xa757('0x2f')](function(_0x3ef371){if(_0x3ef371){_0x1e2b34=_0x3ef371;_0x5bab76[_0xa757('0x3b')]=_[_0xa757('0x3d')](db[_0xa757('0x98')][_0xa757('0x3a')]);_0x5bab76[_0xa757('0x3c')]=_[_0xa757('0x3d')](_0x49c0bd[_0xa757('0x3c')]);_0x5bab76[_0xa757('0x54')]=_[_0xa757('0x3e')](_0x5bab76[_0xa757('0x3b')],_0x5bab76[_0xa757('0x3c')]);_0x38f40b['attributes']=_['intersection'](_0x5bab76[_0xa757('0x3b')],qs[_0xa757('0x3f')](_0x49c0bd[_0xa757('0x3c')][_0xa757('0x3f')]));_0x38f40b[_0xa757('0x40')]=_0x38f40b[_0xa757('0x40')][_0xa757('0x41')]?_0x38f40b['attributes']:_0x5bab76[_0xa757('0x3b')];_0x38f40b[_0xa757('0x43')]=qs[_0xa757('0x44')](_0x49c0bd[_0xa757('0x3c')][_0xa757('0x44')]);_0x38f40b['where']=qs[_0xa757('0x54')](_['pick'](_0x49c0bd[_0xa757('0x3c')],_0x5bab76['filters']));if(_0x49c0bd[_0xa757('0x3c')][_0xa757('0x4c')]){_0x38f40b['where']=_['merge'](_0x38f40b[_0xa757('0x45')],{'$or':_[_0xa757('0x48')](_0x38f40b['attributes'],function(_0x7c4778){var _0xe21512={};_0xe21512[_0x7c4778]={'$like':'%'+_0x49c0bd[_0xa757('0x3c')][_0xa757('0x4c')]+'%'};return _0xe21512;})});}_0x38f40b=_[_0xa757('0x47')]({},_0x38f40b,_0x49c0bd[_0xa757('0x4d')]);return _0x1e2b34['getApplications'](_0x38f40b);}})[_0xa757('0x2f')](function(_0x25f59a){if(_0x25f59a){_0x230057=_0x25f59a[_0xa757('0x41')];if(!_0x49c0bd[_0xa757('0x3c')][_0xa757('0x61')](_0xa757('0x62'))){_0x38f40b[_0xa757('0x42')]=qs[_0xa757('0x42')](_0x49c0bd[_0xa757('0x3c')][_0xa757('0x42')]);_0x38f40b[_0xa757('0x28')]=qs[_0xa757('0x28')](_0x49c0bd['query'][_0xa757('0x28')]);}return _0x1e2b34[_0xa757('0x104')](_0x38f40b);}})[_0xa757('0x2f')](function(_0x3afa4b){if(_0x3afa4b){return _0x3afa4b?{'count':_0x230057,'rows':_0x3afa4b}:null;}})['then'](respondWithResult(_0x4f92ee,null))[_0xa757('0x24')](handleError(_0x4f92ee,null));};exports[_0xa757('0x105')]=function(_0x2903b7,_0x141d20,_0x3a53da){return db['chatProactiveAction'][_0xa757('0x55')]({'where':{'id':_0x2903b7[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x141d20,null))[_0xa757('0x2f')](function(_0x46d1b2){if(_0x46d1b2){return _0x46d1b2[_0xa757('0x105')](_0x2903b7[_0xa757('0x57')][_0xa757('0x66')],_[_0xa757('0xdc')](_0x2903b7['body'],[_0xa757('0x66'),'id'])||{});}})['then'](respondWithResult(_0x141d20,null))[_0xa757('0x24')](handleError(_0x141d20,null));};exports['getProactiveActions']=function(_0x35fe4e,_0x418eeb,_0xc25de1){var _0x327415={};var _0x5b60fe={};var _0xb76114;var _0x53eb8e;return db[_0xa757('0x39')][_0xa757('0x60')]({'where':{'id':_0x35fe4e[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x418eeb,null))[_0xa757('0x2f')](function(_0x3a1ddc){if(_0x3a1ddc){_0xb76114=_0x3a1ddc;_0x5b60fe[_0xa757('0x3b')]=_[_0xa757('0x3d')](db[_0xa757('0x106')][_0xa757('0x3a')]);_0x5b60fe[_0xa757('0x3c')]=_[_0xa757('0x3d')](_0x35fe4e[_0xa757('0x3c')]);_0x5b60fe[_0xa757('0x54')]=_[_0xa757('0x3e')](_0x5b60fe[_0xa757('0x3b')],_0x5b60fe[_0xa757('0x3c')]);_0x327415[_0xa757('0x40')]=_[_0xa757('0x3e')](_0x5b60fe[_0xa757('0x3b')],qs[_0xa757('0x3f')](_0x35fe4e['query'][_0xa757('0x3f')]));_0x327415[_0xa757('0x40')]=_0x327415[_0xa757('0x40')][_0xa757('0x41')]?_0x327415[_0xa757('0x40')]:_0x5b60fe[_0xa757('0x3b')];_0x327415[_0xa757('0x43')]=qs[_0xa757('0x44')](_0x35fe4e[_0xa757('0x3c')][_0xa757('0x44')]);_0x327415['where']=qs['filters'](_[_0xa757('0x46')](_0x35fe4e[_0xa757('0x3c')],_0x5b60fe[_0xa757('0x54')]));if(_0x35fe4e[_0xa757('0x3c')][_0xa757('0x4c')]){_0x327415['where']=_[_0xa757('0x47')](_0x327415[_0xa757('0x45')],{'$or':_[_0xa757('0x48')](_0x327415[_0xa757('0x40')],function(_0x823332){var _0x29cfca={};_0x29cfca[_0x823332]={'$like':'%'+_0x35fe4e[_0xa757('0x3c')]['filter']+'%'};return _0x29cfca;})});}_0x327415=_['merge']({},_0x327415,_0x35fe4e[_0xa757('0x4d')]);return _0xb76114[_0xa757('0xef')](_0x327415);}})['then'](function(_0x5e9161){if(_0x5e9161){_0x53eb8e=_0x5e9161['length'];if(!_0x35fe4e[_0xa757('0x3c')][_0xa757('0x61')](_0xa757('0x62'))){_0x327415[_0xa757('0x42')]=qs[_0xa757('0x42')](_0x35fe4e[_0xa757('0x3c')]['limit']);_0x327415[_0xa757('0x28')]=qs['offset'](_0x35fe4e[_0xa757('0x3c')][_0xa757('0x28')]);}return _0xb76114[_0xa757('0xef')](_0x327415);}})['then'](function(_0x34cd11){if(_0x34cd11){return _0x34cd11?{'count':_0x53eb8e,'rows':_0x34cd11}:null;}})[_0xa757('0x2f')](respondWithResult(_0x418eeb,null))[_0xa757('0x24')](handleError(_0x418eeb,null));};exports[_0xa757('0x107')]=function(_0x40fb82,_0x143a79,_0x848c98){var _0x5da427=_0x40fb82[_0xa757('0x3c')][_0xa757('0x108')]===_0xa757('0x109')?_0xa757('0x10a'):_0xa757('0x10b');return db[_0xa757('0x39')]['find']({'attributes':['id',_0x5da427],'where':{'id':_0x40fb82[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x143a79,null))[_0xa757('0x2f')](function(_0x2e8eb6){if(_0x2e8eb6){var _0x3e454d=_0x2e8eb6[_0x5da427];var _0x265365=_0x3e454d&&_0x3e454d[_0xa757('0x10c')]?_0x3e454d[_0xa757('0x10c')]:[];_0x143a79[_0xa757('0x35')]({'fromKey':_[_0xa757('0x81')](_0x3e454d[_0xa757('0x10d')])?undefined:_0x3e454d['fromKey'],'count':_0x265365[_0xa757('0x41')],'rows':_0x265365});}})[_0xa757('0x24')](handleError(_0x143a79,null));};exports['getOfflineMessages']=function(_0xa201d5,_0x361e67,_0x553682){var _0x595ef5={'raw':!![],'where':{}};var _0x4a949b={};var _0x1da1d4={'count':0x0,'rows':[]};return db[_0xa757('0x39')][_0xa757('0x60')]({'where':{'id':_0xa201d5[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x361e67,null))['then'](function(_0x41721d){if(_0x41721d){_0x4a949b[_0xa757('0x3b')]=_['keys'](db[_0xa757('0xcd')][_0xa757('0x3a')]);_0x4a949b['query']=_['keys'](_0xa201d5['query']);_0x4a949b[_0xa757('0x54')]=_[_0xa757('0x3e')](_0x4a949b['model'],_0x4a949b[_0xa757('0x3c')]);_0x595ef5['attributes']=_[_0xa757('0x3e')](_0x4a949b[_0xa757('0x3b')],qs['fields'](_0xa201d5['query'][_0xa757('0x3f')]));_0x595ef5[_0xa757('0x40')]=_0x595ef5[_0xa757('0x40')][_0xa757('0x41')]?_0x595ef5[_0xa757('0x40')]:_0x4a949b[_0xa757('0x3b')];if(!_0xa201d5['query'][_0xa757('0x61')](_0xa757('0x62'))){_0x595ef5['limit']=qs['limit'](_0xa201d5[_0xa757('0x3c')][_0xa757('0x42')]);_0x595ef5['offset']=qs['offset'](_0xa201d5['query'][_0xa757('0x28')]);}_0x595ef5[_0xa757('0x43')]=qs[_0xa757('0x44')](_0xa201d5[_0xa757('0x3c')][_0xa757('0x44')]);_0x595ef5[_0xa757('0x45')]=qs[_0xa757('0x54')](_[_0xa757('0x46')](_0xa201d5['query'],_0x4a949b['filters']));_0x595ef5[_0xa757('0x45')][_0xa757('0x63')]=_0x41721d['id'];if(_0xa201d5['query'][_0xa757('0x4c')]){_0x595ef5[_0xa757('0x45')]=_[_0xa757('0x47')](_0x595ef5[_0xa757('0x45')],{'$or':_[_0xa757('0x48')](_0x595ef5[_0xa757('0x40')],function(_0x41c254){var _0x26957f={};_0x26957f[_0x41c254]={'$like':'%'+_0xa201d5[_0xa757('0x3c')][_0xa757('0x4c')]+'%'};return _0x26957f;})});}_0x595ef5=_[_0xa757('0x47')]({},_0x595ef5,_0xa201d5['options']);return db[_0xa757('0xcd')][_0xa757('0x4e')]({'where':_0x595ef5[_0xa757('0x45')]})['then'](function(_0x3e50e4){_0x1da1d4[_0xa757('0x4e')]=_0x3e50e4;if(_0xa201d5[_0xa757('0x3c')][_0xa757('0x64')]){_0x595ef5[_0xa757('0x4f')]=[{'all':!![]}];}return db['ChatOfflineMessage'][_0xa757('0x50')](_0x595ef5);})[_0xa757('0x2f')](function(_0x451f46){_0x1da1d4[_0xa757('0x51')]=_0x451f46;return _0x1da1d4;});}})[_0xa757('0x2f')](respondWithFilteredResult(_0x361e67,_0x595ef5))[_0xa757('0x24')](handleError(_0x361e67,null));};exports['addAgents']=function(_0x39d99d,_0x3851cd,_0x2e51f2){return db[_0xa757('0x39')]['find']({'where':{'id':_0x39d99d[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x3851cd,null))[_0xa757('0x2f')](function(_0x58f8b2){if(_0x58f8b2){return _0x58f8b2['addAgents'](_0x39d99d[_0xa757('0x57')][_0xa757('0x66')],_['omit'](_0x39d99d['body'],[_0xa757('0x66'),'id'])||{})[_0xa757('0xae')](function(_0x3b76e7){for(var _0x473883=0x0;_0x473883<_0x39d99d['body'][_0xa757('0x66')][_0xa757('0x41')];_0x473883+=0x1){socket[_0xa757('0x10e')](_0xa757('0x10f'),{'UserId':_0x39d99d['body'][_0xa757('0x66')][_0x473883],'ChatWebsiteId':_0x39d99d[_0xa757('0x53')]['id']});}return _0x3b76e7;});}})[_0xa757('0x2f')](respondWithResult(_0x3851cd,null))[_0xa757('0x24')](handleError(_0x3851cd,null));};exports[_0xa757('0x110')]=function(_0x1fd749,_0x84bd95,_0x204c28){var _0x31430c;return db[_0xa757('0x39')][_0xa757('0x55')]({'where':{'id':_0x1fd749[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x84bd95,null))[_0xa757('0x2f')](function(_0xd559ce){if(_0xd559ce){return _0xd559ce[_0xa757('0x110')](_0x1fd749['query'][_0xa757('0x66')])[_0xa757('0x2f')](function(_0x4f2c2a){if(_[_0xa757('0x111')](_0x1fd749[_0xa757('0x3c')][_0xa757('0x66')])){for(var _0xa99a59=0x0;_0xa99a59<_0x1fd749['query'][_0xa757('0x66')][_0xa757('0x41')];_0xa99a59+=0x1){socket['emit'](_0xa757('0x112'),{'UserId':_0x1fd749[_0xa757('0x3c')][_0xa757('0x66')][_0xa99a59],'ChatWebsiteId':_0x1fd749[_0xa757('0x53')]['id']});}}else{socket['emit'](_0xa757('0x112'),{'UserId':_0x1fd749[_0xa757('0x3c')][_0xa757('0x66')],'ChatWebsiteId':_0x1fd749['params']['id']});}});}})['then'](respondWithStatusCode(_0x84bd95,null))[_0xa757('0x24')](handleError(_0x84bd95,null));};exports[_0xa757('0x113')]=function(_0x7cf039,_0x5df3a1,_0x3949b5){var _0x3de026={};var _0x39b61a={};var _0x510698;var _0xef0cf9;return db['ChatWebsite'][_0xa757('0x60')]({'where':{'id':_0x7cf039[_0xa757('0x53')]['id']}})[_0xa757('0x2f')](handleEntityNotFound(_0x5df3a1,null))[_0xa757('0x2f')](function(_0x153898){if(_0x153898){_0x510698=_0x153898;_0x39b61a['model']=_[_0xa757('0x3d')](db[_0xa757('0xba')]['rawAttributes']);_0x39b61a[_0xa757('0x3c')]=_[_0xa757('0x3d')](_0x7cf039[_0xa757('0x3c')]);_0x39b61a[_0xa757('0x54')]=_[_0xa757('0x3e')](_0x39b61a[_0xa757('0x3b')],_0x39b61a[_0xa757('0x3c')]);_0x3de026[_0xa757('0x40')]=_[_0xa757('0x3e')](_0x39b61a['model'],qs[_0xa757('0x3f')](_0x7cf039['query'][_0xa757('0x3f')]));_0x3de026['attributes']=_0x3de026[_0xa757('0x40')][_0xa757('0x41')]?_0x3de026[_0xa757('0x40')]:_0x39b61a[_0xa757('0x3b')];_0x3de026['order']=qs[_0xa757('0x44')](_0x7cf039[_0xa757('0x3c')][_0xa757('0x44')]);_0x3de026[_0xa757('0x45')]=qs[_0xa757('0x54')](_[_0xa757('0x46')](_0x7cf039[_0xa757('0x3c')],_0x39b61a['filters']));if(_0x7cf039[_0xa757('0x3c')][_0xa757('0x4c')]){_0x3de026[_0xa757('0x45')]=_[_0xa757('0x47')](_0x3de026[_0xa757('0x45')],{'$or':_['map'](_0x3de026[_0xa757('0x40')],function(_0xd0a33e){var _0x195b99={};_0x195b99[_0xd0a33e]={'$like':'%'+_0x7cf039[_0xa757('0x3c')][_0xa757('0x4c')]+'%'};return _0x195b99;})});}_0x3de026=_[_0xa757('0x47')]({},_0x3de026,_0x7cf039[_0xa757('0x4d')]);return _0x510698['getAgents'](_0x3de026);}})[_0xa757('0x2f')](function(_0xd2538c){if(_0xd2538c){_0xef0cf9=_0xd2538c[_0xa757('0x41')];if(!_0x7cf039[_0xa757('0x3c')][_0xa757('0x61')](_0xa757('0x62'))){_0x3de026[_0xa757('0x42')]=qs[_0xa757('0x42')](_0x7cf039['query'][_0xa757('0x42')]);_0x3de026[_0xa757('0x28')]=qs[_0xa757('0x28')](_0x7cf039['query']['offset']);}return _0x510698[_0xa757('0x113')](_0x3de026);}})[_0xa757('0x2f')](function(_0x26e01c){if(_0x26e01c){return _0x26e01c?{'count':_0xef0cf9,'rows':_0x26e01c}:null;}})[_0xa757('0x2f')](respondWithResult(_0x5df3a1,null))[_0xa757('0x24')](handleError(_0x5df3a1,null));};
\ No newline at end of file
+var _0xb10b=['findAndCountAll','getApplications','chatProactiveAction','ChatProactiveAction','false','offlineForm','onlineForm','getOfflineMessages','addAgents','emit','userChatWebsite:save','removeAgents','isArray','userChatWebsite:remove','getAgents','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./chatWebsite.socket','jayson/promise','client','http','request','then','info','ChatWebsite,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','status','end','json','offset','limit','set','Content-Range','apply','save','update','destroy','get','ChatWebsites','UserProfileResource','stack','name','send','mandatoryDispositionPause','ChatWebsite','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','count','includeAll','include','rows','show','rawAttributes','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','params','Pause','describe','addDisposition','ChatWebsiteId','Disposition','getDispositions','pick','findAll','removeDispositions','ids','CannedAnswer','getAnswers','findOne','removeAnswers','addLogo','file','filename','addAvatar','agentAvatar','addCustomerAvatar','customerAvatar','addSystemAvatar','systemAvatar','getLogo','join','root','server/files/images/logos/default_logo.png','sitepic','getLicense','custom','isNil','server/files/images/logos/','download','getAvatar','server/files/images/avatars/default_avatar.png','existsSync','server/files/images/avatars/','getCustomerAvatar','server/files/images/avatars/customer_avatar.png','getSystemAvatar','user-agent-parser','setUA','headers','user-agent','getResult','no\x20available\x20attributes','difference','updatedAt','ListId','from','Sequelize','ValidationError','from\x20is\x20mandatory','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey','CmList','List','CmContact','Contacts','DESC','ChatApplication','Applications','list','applications','priority','asc','account','contact','lastName','referer','browser','format','%s\x20%s','version','device','%s\x20%s\x20%s','vendor','threadId','ChatInteraction','externalUrl','ContactId','interaction','spread','firstName','messageId','created','autoclose','close','unmanaged','*,*,*,*','ChatMessage','AttachmentId','UserId','User','unshift','agent','waitForTheAssignedAgent','forcedOwnership','Start','startRouting','EventManager','offline','createdAt','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKeyOffline','mapKeyOffline\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','findOrCreate','server/files/templates/chatOfflineMessage.ejs','utf8','render','toPairs','offlineMessageBody','ChatOfflineMessage','MailServerOut','Smtp','forwardOfflineAddress','service','host','port','secure','authentication','auth','SendMail','sendMail','offlineMessageSubject','addInteraction','omit','getInteractions','Contact','Owner','fullname','internal','Tags','color','tag','getSnippet','iftime\x20%s,%s','interval','iftime\x20%s','indexOf','true','[%s][INTERVAL][%s]\x20%s\x20%s\x20(%s)','ONLINE','timezone','No\x20timezone','Interval','Intervals','getProactiveActions','../../config/license/util','virtual','License','increment','chatLicenseExceeded','all','some','readFileSync','server/files/chat/iframe.js','remote','x-forwarded-for','x-real-ip','connection','remoteAddress','replace','verticalAlignment','sequelize','transaction'];(function(_0x4f5d9c,_0x26d3de){var _0x3444a7=function(_0x2fa164){while(--_0x2fa164){_0x4f5d9c['push'](_0x4f5d9c['shift']());}};_0x3444a7(++_0x26d3de);}(_0xb10b,0x12a));var _0xbb10=function(_0x1c688b,_0x4df102){_0x1c688b=_0x1c688b-0x0;var _0x4d4577=_0xb10b[_0x1c688b];return _0x4d4577;};'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 authService=require(_0xbb10('0x12'));var hardwareService=require(_0xbb10('0x13'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0xbb10('0x14'))(_0xbb10('0x15'));var utils=require(_0xbb10('0x16'));var config=require('../../config/environment');var db=require(_0xbb10('0x17'))['db'];config['redis']=_[_0xbb10('0x18')](config[_0xbb10('0x19')],{'host':_0xbb10('0x1a'),'port':0x18eb});var socket=require(_0xbb10('0x1b'))(new Redis(config[_0xbb10('0x19')]));require(_0xbb10('0x1c'))['register'](socket);var jayson=require(_0xbb10('0x1d'));var client=jayson[_0xbb10('0x1e')][_0xbb10('0x1f')]({'port':0x232c});var client9002=jayson[_0xbb10('0x1e')][_0xbb10('0x1f')]({'port':0x232a});var client9003=jayson[_0xbb10('0x1e')][_0xbb10('0x1f')]({'port':0x232b});function respondWithRpcPromise(_0x36b5e8,_0x3e26f4,_0x2b184e,_0x4a2bfc){return new BPromise(function(_0x2eca0f,_0x1145f1){var _0x133ac2=_0x4a2bfc||client;return _0x133ac2[_0xbb10('0x20')](_0x36b5e8,_0x2b184e)[_0xbb10('0x21')](function(_0x1682a4){logger[_0xbb10('0x22')](_0xbb10('0x23'),_0x3e26f4,_0xbb10('0x24'));logger[_0xbb10('0x25')]('ChatWebsite,\x20%s,\x20%s,\x20%s',_0x3e26f4,_0xbb10('0x24'),JSON[_0xbb10('0x26')](_0x1682a4));if(_0x1682a4[_0xbb10('0x27')]){if(_0x1682a4[_0xbb10('0x27')][_0xbb10('0x28')]===0x1f4){logger[_0xbb10('0x27')]('ChatWebsite,\x20%s,\x20%s',_0x3e26f4,_0x1682a4[_0xbb10('0x27')][_0xbb10('0x29')]);return _0x1145f1(_0x1682a4['error']['message']);}logger[_0xbb10('0x27')](_0xbb10('0x23'),_0x3e26f4,_0x1682a4[_0xbb10('0x27')][_0xbb10('0x29')]);return _0x2eca0f(_0x1682a4[_0xbb10('0x27')][_0xbb10('0x29')]);}else{logger[_0xbb10('0x22')](_0xbb10('0x23'),_0x3e26f4,_0xbb10('0x24'));_0x2eca0f(_0x1682a4[_0xbb10('0x2a')][_0xbb10('0x29')]);}})[_0xbb10('0x2b')](function(_0x537898){logger['error']('ChatWebsite,\x20%s,\x20%s',_0x3e26f4,_0x537898);_0x1145f1(_0x537898);});});}function respondWithStatusCode(_0xc93a04,_0x3c5ae7){_0x3c5ae7=_0x3c5ae7||0xcc;return function(_0x2c89b9){if(_0x2c89b9){return _0xc93a04['sendStatus'](_0x3c5ae7);}return _0xc93a04[_0xbb10('0x2c')](_0x3c5ae7)[_0xbb10('0x2d')]();};}function respondWithResult(_0x6ed43b,_0x1d5e95){_0x1d5e95=_0x1d5e95||0xc8;return function(_0x1acce9){if(_0x1acce9){return _0x6ed43b[_0xbb10('0x2c')](_0x1d5e95)[_0xbb10('0x2e')](_0x1acce9);}};}function respondWithFilteredResult(_0x4aabb9,_0x3796c7){return function(_0x21ac54){if(_0x21ac54){var _0xfc3595=_0x21ac54['count'],_0x2e0249=_0x3796c7[_0xbb10('0x2f')],_0x1d30aa=_0x3796c7['offset']+_0x3796c7[_0xbb10('0x30')],_0x2ff4c1;if(_0x1d30aa>=_0xfc3595){_0x1d30aa=_0xfc3595;_0x2ff4c1=0xc8;}else{_0x2ff4c1=0xce;}_0x4aabb9['status'](_0x2ff4c1);return _0x4aabb9[_0xbb10('0x31')](_0xbb10('0x32'),_0x2e0249+'-'+_0x1d30aa+'/'+_0xfc3595)[_0xbb10('0x2e')](_0x21ac54);}return null;};}function patchUpdates(_0x491db4){return function(_0x518d47){try{jsonpatch[_0xbb10('0x33')](_0x518d47,_0x491db4,!![]);}catch(_0x34f65e){return BPromise['reject'](_0x34f65e);}return _0x518d47[_0xbb10('0x34')]();};}function saveUpdates(_0x37dde7,_0x2f653f){return function(_0x1c0b57){if(_0x1c0b57){return _0x1c0b57[_0xbb10('0x35')](_0x37dde7)[_0xbb10('0x21')](function(_0xf85197){return _0xf85197;});}return null;};}function removeEntity(_0x4975f5,_0x25acb3){return function(_0x1da9c9){if(_0x1da9c9){return _0x1da9c9[_0xbb10('0x36')]()[_0xbb10('0x21')](function(){var _0xfb2c5e=_0x1da9c9[_0xbb10('0x37')]({'plain':!![]});var _0x188cbd=_0xbb10('0x38');return db[_0xbb10('0x39')]['destroy']({'where':{'type':_0x188cbd,'resourceId':_0xfb2c5e['id']}})[_0xbb10('0x21')](function(){return _0x1da9c9;});})[_0xbb10('0x21')](function(){_0x4975f5[_0xbb10('0x2c')](0xcc)[_0xbb10('0x2d')]();});}};}function handleEntityNotFound(_0x570f5a,_0x111762){return function(_0x5de37b){if(!_0x5de37b){_0x570f5a['sendStatus'](0x194);}return _0x5de37b;};}function handleError(_0x3eb3cc,_0x40c164){_0x40c164=_0x40c164||0x1f4;return function(_0x26e76a){logger[_0xbb10('0x27')](_0x26e76a[_0xbb10('0x3a')]);if(_0x26e76a[_0xbb10('0x3b')]){delete _0x26e76a['name'];}_0x3eb3cc[_0xbb10('0x2c')](_0x40c164)[_0xbb10('0x3c')](_0x26e76a);};}exports['index']=function(_0x5e3fbd,_0x5cd55f){var _0x31bee3={'include':[{'model':db['Pause'],'as':_0xbb10('0x3d')}]},_0x2b0b45={},_0x2b658a={'count':0x0,'rows':[]};var _0x3e8538=db[_0xbb10('0x3e')]['rawAttributes'];_0x2b0b45[_0xbb10('0x3f')]=_[_0xbb10('0x40')](_0x3e8538);_0x2b0b45[_0xbb10('0x41')]=_[_0xbb10('0x40')](_0x5e3fbd['query']);_0x2b0b45[_0xbb10('0x42')]=_[_0xbb10('0x43')](_0x2b0b45['model'],_0x2b0b45[_0xbb10('0x41')]);_0x31bee3[_0xbb10('0x44')]=_[_0xbb10('0x43')](_0x2b0b45[_0xbb10('0x3f')],qs[_0xbb10('0x45')](_0x5e3fbd[_0xbb10('0x41')]['fields']));_0x31bee3[_0xbb10('0x44')]=_0x31bee3[_0xbb10('0x44')][_0xbb10('0x46')]?_0x31bee3[_0xbb10('0x44')]:_0x2b0b45['model'];if(!_0x5e3fbd[_0xbb10('0x41')][_0xbb10('0x47')](_0xbb10('0x48'))){_0x31bee3[_0xbb10('0x30')]=qs['limit'](_0x5e3fbd[_0xbb10('0x41')][_0xbb10('0x30')]);_0x31bee3['offset']=qs['offset'](_0x5e3fbd[_0xbb10('0x41')]['offset']);}_0x31bee3[_0xbb10('0x49')]=qs[_0xbb10('0x4a')](_0x5e3fbd['query'][_0xbb10('0x4a')]);_0x31bee3[_0xbb10('0x4b')]=qs[_0xbb10('0x42')](_['pick'](_0x5e3fbd[_0xbb10('0x41')],_0x2b0b45[_0xbb10('0x42')]));if(_0x5e3fbd[_0xbb10('0x41')][_0xbb10('0x4c')]){_0x31bee3[_0xbb10('0x4b')]=_[_0xbb10('0x4d')](_0x31bee3[_0xbb10('0x4b')],{'$or':_[_0xbb10('0x4e')](_0x3e8538,function(_0x205bb4){if(_0x205bb4[_0xbb10('0x4f')][_0xbb10('0x50')]!==_0xbb10('0x51')){var _0x4d30d6={};_0x4d30d6[_0x205bb4[_0xbb10('0x52')]]={'$like':'%'+_0x5e3fbd[_0xbb10('0x41')]['filter']+'%'};return _0x4d30d6;}})});}_0x31bee3=_[_0xbb10('0x4d')]({},_0x31bee3,_0x5e3fbd[_0xbb10('0x53')]);var _0x1a7df6={'where':_0x31bee3[_0xbb10('0x4b')]};return db[_0xbb10('0x3e')][_0xbb10('0x54')](_0x1a7df6)[_0xbb10('0x21')](function(_0x5be85e){_0x2b658a['count']=_0x5be85e;if(_0x5e3fbd[_0xbb10('0x41')][_0xbb10('0x55')]){_0x31bee3[_0xbb10('0x56')]=[{'all':!![]}];}return db['ChatWebsite']['findAll'](_0x31bee3);})[_0xbb10('0x21')](function(_0x34cf4e){_0x2b658a[_0xbb10('0x57')]=_0x34cf4e;return _0x2b658a;})[_0xbb10('0x21')](respondWithFilteredResult(_0x5cd55f,_0x31bee3))[_0xbb10('0x2b')](handleError(_0x5cd55f,null));};exports[_0xbb10('0x58')]=function(_0x2f2552,_0x460788){var _0x2626d8={'raw':![],'where':{'id':_0x2f2552['params']['id']},'include':[{'model':db['Pause'],'as':_0xbb10('0x3d')}]},_0x3d7e7e={};_0x3d7e7e[_0xbb10('0x3f')]=_[_0xbb10('0x40')](db[_0xbb10('0x3e')][_0xbb10('0x59')]);_0x3d7e7e[_0xbb10('0x41')]=_[_0xbb10('0x40')](_0x2f2552[_0xbb10('0x41')]);_0x3d7e7e[_0xbb10('0x42')]=_[_0xbb10('0x43')](_0x3d7e7e[_0xbb10('0x3f')],_0x3d7e7e[_0xbb10('0x41')]);_0x2626d8[_0xbb10('0x44')]=_[_0xbb10('0x43')](_0x3d7e7e[_0xbb10('0x3f')],qs['fields'](_0x2f2552[_0xbb10('0x41')]['fields']));_0x2626d8[_0xbb10('0x44')]=_0x2626d8[_0xbb10('0x44')][_0xbb10('0x46')]?_0x2626d8[_0xbb10('0x44')]:_0x3d7e7e[_0xbb10('0x3f')];if(_0x2f2552[_0xbb10('0x41')][_0xbb10('0x55')]){_0x2626d8[_0xbb10('0x56')]=[{'all':!![]}];}_0x2626d8=_[_0xbb10('0x4d')]({},_0x2626d8,_0x2f2552[_0xbb10('0x53')]);return db[_0xbb10('0x3e')][_0xbb10('0x5a')](_0x2626d8)[_0xbb10('0x21')](handleEntityNotFound(_0x460788,null))[_0xbb10('0x21')](respondWithResult(_0x460788,null))[_0xbb10('0x2b')](handleError(_0x460788,null));};exports['create']=function(_0x4571b6,_0x466eb7){return db[_0xbb10('0x3e')][_0xbb10('0x5b')](_0x4571b6[_0xbb10('0x5c')],{})[_0xbb10('0x21')](function(_0x4bedd0){var _0x120bda=_0x4571b6[_0xbb10('0x5d')][_0xbb10('0x37')]({'plain':!![]});if(!_0x120bda)throw new Error(_0xbb10('0x5e'));if(_0x120bda[_0xbb10('0x5f')]===_0xbb10('0x5d')){var _0x175872=_0x4bedd0[_0xbb10('0x37')]({'plain':!![]});var _0x205e01=_0xbb10('0x38');return db[_0xbb10('0x60')][_0xbb10('0x5a')]({'where':{'name':_0x205e01,'userProfileId':_0x120bda[_0xbb10('0x61')]},'raw':!![]})['then'](function(_0x4ea1a6){if(_0x4ea1a6&&_0x4ea1a6[_0xbb10('0x62')]===0x0){return db[_0xbb10('0x39')][_0xbb10('0x5b')]({'name':_0x175872[_0xbb10('0x3b')],'resourceId':_0x175872['id'],'type':_0x4ea1a6['name'],'sectionId':_0x4ea1a6['id']},{})['then'](function(){return _0x4bedd0;});}else{return _0x4bedd0;}})[_0xbb10('0x2b')](function(_0xaf2cc3){logger[_0xbb10('0x27')](_0xbb10('0x63'),_0xaf2cc3);throw _0xaf2cc3;});}return _0x4bedd0;})[_0xbb10('0x21')](respondWithResult(_0x466eb7,0xc9))[_0xbb10('0x2b')](handleError(_0x466eb7,null));};exports[_0xbb10('0x35')]=function(_0x4a5fb9,_0x117e84){if(_0x4a5fb9[_0xbb10('0x5c')]['id']){delete _0x4a5fb9['body']['id'];}return db['ChatWebsite']['find']({'where':{'id':_0x4a5fb9[_0xbb10('0x64')]['id']},'include':[{'model':db[_0xbb10('0x65')],'as':_0xbb10('0x3d')}]})['then'](handleEntityNotFound(_0x117e84,null))['then'](saveUpdates(_0x4a5fb9['body'],null))[_0xbb10('0x21')](respondWithResult(_0x117e84,null))[_0xbb10('0x2b')](handleError(_0x117e84,null));};exports[_0xbb10('0x36')]=function(_0x4e9fbd,_0xa1bbd9){return db[_0xbb10('0x3e')]['find']({'where':{'id':_0x4e9fbd['params']['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0xa1bbd9,null))[_0xbb10('0x21')](removeEntity(_0xa1bbd9,null))[_0xbb10('0x2b')](handleError(_0xa1bbd9,null));};exports[_0xbb10('0x66')]=function(_0x54b7c5,_0x43eaec){return db[_0xbb10('0x3e')][_0xbb10('0x66')]()['then'](respondWithResult(_0x43eaec,null))[_0xbb10('0x2b')](handleError(_0x43eaec,null));};exports[_0xbb10('0x67')]=function(_0x3e3617,_0x5b2bd4,_0x2ca491){if(_0x3e3617[_0xbb10('0x5c')]['id']){delete _0x3e3617[_0xbb10('0x5c')]['id'];}return db[_0xbb10('0x3e')]['find']({'where':{'id':_0x3e3617[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x5b2bd4,null))[_0xbb10('0x21')](function(_0x2d0f4b){if(_0x2d0f4b){_0x3e3617['body'][_0xbb10('0x68')]=_0x2d0f4b['id'];return db[_0xbb10('0x69')][_0xbb10('0x5b')](_0x3e3617[_0xbb10('0x5c')]);}})[_0xbb10('0x21')](respondWithResult(_0x5b2bd4,null))[_0xbb10('0x2b')](handleError(_0x5b2bd4,null));};exports[_0xbb10('0x6a')]=function(_0x4a30c5,_0x4a13d7,_0x5acd5e){var _0xdfbc0b={'raw':![],'where':{}};var _0x9c672d={};var _0x3eda96={'count':0x0,'rows':[]};return db['ChatWebsite']['findOne']({'where':{'id':_0x4a30c5[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x4a13d7,null))[_0xbb10('0x21')](function(_0x3a9677){if(_0x3a9677){_0x9c672d[_0xbb10('0x3f')]=_[_0xbb10('0x40')](db['Disposition'][_0xbb10('0x59')]);_0x9c672d[_0xbb10('0x41')]=_[_0xbb10('0x40')](_0x4a30c5[_0xbb10('0x41')]);_0x9c672d[_0xbb10('0x42')]=_['intersection'](_0x9c672d['model'],_0x9c672d['query']);_0xdfbc0b[_0xbb10('0x44')]=_[_0xbb10('0x43')](_0x9c672d[_0xbb10('0x3f')],qs[_0xbb10('0x45')](_0x4a30c5[_0xbb10('0x41')][_0xbb10('0x45')]));_0xdfbc0b['attributes']=_0xdfbc0b[_0xbb10('0x44')]['length']?_0xdfbc0b['attributes']:_0x9c672d['model'];if(!_0x4a30c5[_0xbb10('0x41')][_0xbb10('0x47')](_0xbb10('0x48'))){_0xdfbc0b[_0xbb10('0x30')]=qs['limit'](_0x4a30c5[_0xbb10('0x41')]['limit']);_0xdfbc0b['offset']=qs[_0xbb10('0x2f')](_0x4a30c5[_0xbb10('0x41')][_0xbb10('0x2f')]);}_0xdfbc0b[_0xbb10('0x49')]=qs[_0xbb10('0x4a')](_0x4a30c5['query'][_0xbb10('0x4a')]);_0xdfbc0b[_0xbb10('0x4b')]=qs[_0xbb10('0x42')](_[_0xbb10('0x6b')](_0x4a30c5[_0xbb10('0x41')],_0x9c672d[_0xbb10('0x42')]));_0xdfbc0b[_0xbb10('0x4b')]['ChatWebsiteId']=_0x3a9677['id'];if(_0x4a30c5[_0xbb10('0x41')][_0xbb10('0x4c')]){_0xdfbc0b[_0xbb10('0x4b')]=_[_0xbb10('0x4d')](_0xdfbc0b[_0xbb10('0x4b')],{'$or':_[_0xbb10('0x4e')](_0xdfbc0b[_0xbb10('0x44')],function(_0x312a08){var _0x5a4429={};_0x5a4429[_0x312a08]={'$like':'%'+_0x4a30c5[_0xbb10('0x41')][_0xbb10('0x4c')]+'%'};return _0x5a4429;})});}_0xdfbc0b=_[_0xbb10('0x4d')]({},_0xdfbc0b,_0x4a30c5['options']);return db['Disposition']['count']({'where':_0xdfbc0b[_0xbb10('0x4b')]})['then'](function(_0x4e3d6a){_0x3eda96[_0xbb10('0x54')]=_0x4e3d6a;if(_0x4a30c5[_0xbb10('0x41')][_0xbb10('0x55')]){_0xdfbc0b[_0xbb10('0x56')]=[{'all':!![]}];}return db[_0xbb10('0x69')][_0xbb10('0x6c')](_0xdfbc0b);})[_0xbb10('0x21')](function(_0x417304){_0x3eda96[_0xbb10('0x57')]=_0x417304;return _0x3eda96;});}})['then'](respondWithFilteredResult(_0x4a13d7,_0xdfbc0b))[_0xbb10('0x2b')](handleError(_0x4a13d7,null));};exports[_0xbb10('0x6d')]=function(_0x46b6d2,_0x35b811,_0x5c8eb8){var _0x4c0795;return db[_0xbb10('0x3e')][_0xbb10('0x5a')]({'where':{'id':_0x46b6d2[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x35b811,null))['then'](function(_0x17d596){if(_0x17d596){return _0x17d596[_0xbb10('0x6d')](_0x46b6d2[_0xbb10('0x41')][_0xbb10('0x6e')]);}})[_0xbb10('0x21')](respondWithStatusCode(_0x35b811,null))['catch'](handleError(_0x35b811,null));};exports['addAnswer']=function(_0x372636,_0x53c698,_0x22c030){if(_0x372636['body']['id']){delete _0x372636[_0xbb10('0x5c')]['id'];}return db[_0xbb10('0x3e')]['find']({'where':{'id':_0x372636['params']['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x53c698,null))[_0xbb10('0x21')](function(_0x177f77){if(_0x177f77){_0x372636['body'][_0xbb10('0x68')]=_0x177f77['id'];return db[_0xbb10('0x6f')][_0xbb10('0x5b')](_0x372636[_0xbb10('0x5c')]);}})[_0xbb10('0x21')](respondWithResult(_0x53c698,null))[_0xbb10('0x2b')](handleError(_0x53c698,null));};exports[_0xbb10('0x70')]=function(_0x226363,_0x3e6246,_0x479d51){var _0x3367d4={'raw':![],'where':{}};var _0x28cc46={};var _0x412fbf={'count':0x0,'rows':[]};return db[_0xbb10('0x3e')][_0xbb10('0x71')]({'where':{'id':_0x226363[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x3e6246,null))[_0xbb10('0x21')](function(_0x17ed20){if(_0x17ed20){_0x28cc46[_0xbb10('0x3f')]=_[_0xbb10('0x40')](db[_0xbb10('0x6f')]['rawAttributes']);_0x28cc46['query']=_[_0xbb10('0x40')](_0x226363[_0xbb10('0x41')]);_0x28cc46[_0xbb10('0x42')]=_[_0xbb10('0x43')](_0x28cc46[_0xbb10('0x3f')],_0x28cc46['query']);_0x3367d4[_0xbb10('0x44')]=_[_0xbb10('0x43')](_0x28cc46[_0xbb10('0x3f')],qs[_0xbb10('0x45')](_0x226363[_0xbb10('0x41')][_0xbb10('0x45')]));_0x3367d4['attributes']=_0x3367d4[_0xbb10('0x44')][_0xbb10('0x46')]?_0x3367d4['attributes']:_0x28cc46[_0xbb10('0x3f')];if(!_0x226363['query'][_0xbb10('0x47')](_0xbb10('0x48'))){_0x3367d4[_0xbb10('0x30')]=qs[_0xbb10('0x30')](_0x226363[_0xbb10('0x41')]['limit']);_0x3367d4[_0xbb10('0x2f')]=qs['offset'](_0x226363[_0xbb10('0x41')][_0xbb10('0x2f')]);}_0x3367d4['order']=qs['sort'](_0x226363[_0xbb10('0x41')][_0xbb10('0x4a')]);_0x3367d4[_0xbb10('0x4b')]=qs[_0xbb10('0x42')](_[_0xbb10('0x6b')](_0x226363[_0xbb10('0x41')],_0x28cc46[_0xbb10('0x42')]));_0x3367d4[_0xbb10('0x4b')][_0xbb10('0x68')]=_0x17ed20['id'];if(_0x226363[_0xbb10('0x41')][_0xbb10('0x4c')]){_0x3367d4['where']=_[_0xbb10('0x4d')](_0x3367d4[_0xbb10('0x4b')],{'$or':_[_0xbb10('0x4e')](_0x3367d4[_0xbb10('0x44')],function(_0xfe02f5){var _0x86a6ff={};_0x86a6ff[_0xfe02f5]={'$like':'%'+_0x226363[_0xbb10('0x41')][_0xbb10('0x4c')]+'%'};return _0x86a6ff;})});}_0x3367d4=_[_0xbb10('0x4d')]({},_0x3367d4,_0x226363[_0xbb10('0x53')]);return db[_0xbb10('0x6f')][_0xbb10('0x54')]({'where':_0x3367d4['where']})[_0xbb10('0x21')](function(_0x5e0741){_0x412fbf[_0xbb10('0x54')]=_0x5e0741;if(_0x226363[_0xbb10('0x41')][_0xbb10('0x55')]){_0x3367d4[_0xbb10('0x56')]=[{'all':!![]}];}return db[_0xbb10('0x6f')]['findAll'](_0x3367d4);})[_0xbb10('0x21')](function(_0x217107){_0x412fbf[_0xbb10('0x57')]=_0x217107;return _0x412fbf;});}})[_0xbb10('0x21')](respondWithFilteredResult(_0x3e6246,_0x3367d4))[_0xbb10('0x2b')](handleError(_0x3e6246,null));};exports[_0xbb10('0x72')]=function(_0x4970fe,_0x4bd470,_0x5cc9d7){var _0x11ab88;return db[_0xbb10('0x3e')]['find']({'where':{'id':_0x4970fe[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x4bd470,null))['then'](function(_0x2831de){if(_0x2831de){return _0x2831de[_0xbb10('0x72')](_0x4970fe['query'][_0xbb10('0x6e')]);}})['then'](respondWithStatusCode(_0x4bd470,null))[_0xbb10('0x2b')](handleError(_0x4bd470,null));};exports[_0xbb10('0x73')]=function(_0x5d82e4,_0x34a5a3,_0x28cc74){_0x5d82e4['body']['sitepic']=_0x5d82e4[_0xbb10('0x74')][_0xbb10('0x75')];return db[_0xbb10('0x3e')][_0xbb10('0x5a')]({'where':{'id':_0x5d82e4[_0xbb10('0x64')]['id']}})['then'](handleEntityNotFound(_0x34a5a3,null))[_0xbb10('0x21')](saveUpdates(_0x5d82e4[_0xbb10('0x5c')],null))[_0xbb10('0x21')](respondWithResult(_0x34a5a3,null))['catch'](handleError(_0x34a5a3,null));};exports[_0xbb10('0x76')]=function(_0x4f90e6,_0x248887,_0xa5391d){_0x4f90e6[_0xbb10('0x5c')][_0xbb10('0x77')]=_0x4f90e6[_0xbb10('0x74')][_0xbb10('0x75')];return db[_0xbb10('0x3e')]['find']({'where':{'id':_0x4f90e6['params']['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x248887,null))[_0xbb10('0x21')](saveUpdates(_0x4f90e6[_0xbb10('0x5c')],null))[_0xbb10('0x21')](respondWithResult(_0x248887,null))[_0xbb10('0x2b')](handleError(_0x248887,null));};exports[_0xbb10('0x78')]=function(_0x1cccec,_0x1674f7,_0x3ede66){_0x1cccec[_0xbb10('0x5c')][_0xbb10('0x79')]=_0x1cccec[_0xbb10('0x74')][_0xbb10('0x75')];return db['ChatWebsite'][_0xbb10('0x5a')]({'where':{'id':_0x1cccec[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x1674f7,null))[_0xbb10('0x21')](saveUpdates(_0x1cccec[_0xbb10('0x5c')],null))[_0xbb10('0x21')](respondWithResult(_0x1674f7,null))[_0xbb10('0x2b')](handleError(_0x1674f7,null));};exports[_0xbb10('0x7a')]=function(_0x3c6c45,_0x3c92f4,_0x2a1c53){_0x3c6c45['body'][_0xbb10('0x7b')]=_0x3c6c45['file'][_0xbb10('0x75')];return db[_0xbb10('0x3e')][_0xbb10('0x5a')]({'where':{'id':_0x3c6c45[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x3c92f4,null))[_0xbb10('0x21')](saveUpdates(_0x3c6c45['body'],null))[_0xbb10('0x21')](respondWithResult(_0x3c92f4,null))['catch'](handleError(_0x3c92f4,null));};exports[_0xbb10('0x7c')]=function(_0x2141e9,_0xda122,_0x576bb6){var _0x2b652c=path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],_0xbb10('0x7f'));var _0x25c5b2={'where':{'id':_0x2141e9[_0xbb10('0x64')]['id']},'attributes':['id',_0xbb10('0x80')],'raw':!![]};var _0xa09041=![];return require('../../config/license/util')[_0xbb10('0x81')]()['then'](function(_0xe70161){if(_0xe70161){_0xa09041=_0xe70161[_0xbb10('0x82')];}})[_0xbb10('0x21')](function(){return db[_0xbb10('0x3e')][_0xbb10('0x5a')](_0x25c5b2);})[_0xbb10('0x21')](handleEntityNotFound(_0xda122,null))[_0xbb10('0x21')](function(_0x5e9888){if(_0x5e9888){if(!_[_0xbb10('0x83')](_0x5e9888['sitepic'])){if(fs['existsSync'](path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],_0xbb10('0x84'),_0x5e9888[_0xbb10('0x80')]))&&_0xa09041){_0x2b652c=path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],'server/files/images/logos/',_0x5e9888[_0xbb10('0x80')]);}}return _0xda122[_0xbb10('0x85')](_0x2b652c);}})[_0xbb10('0x2b')](handleError(_0xda122,null));};exports[_0xbb10('0x86')]=function(_0x136520,_0x28127c,_0x528aff){var _0xdfdc42=path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],_0xbb10('0x87'));var _0x31718f={'where':{'id':_0x136520[_0xbb10('0x64')]['id']},'attributes':['id',_0xbb10('0x77')],'raw':!![]};return db['ChatWebsite'][_0xbb10('0x5a')](_0x31718f)['then'](handleEntityNotFound(_0x28127c,null))[_0xbb10('0x21')](function(_0x4a6660){if(_0x4a6660){if(!_['isNil'](_0x4a6660[_0xbb10('0x77')])){if(fs[_0xbb10('0x88')](path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],_0xbb10('0x89'),_0x4a6660['agentAvatar']))){_0xdfdc42=path[_0xbb10('0x7d')](config['root'],'server/files/images/avatars/',_0x4a6660['agentAvatar']);}}return _0x28127c[_0xbb10('0x85')](_0xdfdc42);}})[_0xbb10('0x2b')](handleError(_0x28127c,null));};exports[_0xbb10('0x8a')]=function(_0x8a7c27,_0x2882d1,_0x5abedf){var _0x125bcf=path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],_0xbb10('0x8b'));var _0x4b3b21={'where':{'id':_0x8a7c27[_0xbb10('0x64')]['id']},'attributes':['id',_0xbb10('0x79'),'showCustomerAvatar'],'raw':!![]};return db['ChatWebsite']['find'](_0x4b3b21)[_0xbb10('0x21')](handleEntityNotFound(_0x2882d1,null))[_0xbb10('0x21')](function(_0x2ae3c6){if(_0x2ae3c6){if(!_[_0xbb10('0x83')](_0x2ae3c6[_0xbb10('0x79')])){if(fs[_0xbb10('0x88')](path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],_0xbb10('0x89'),_0x2ae3c6[_0xbb10('0x79')]))&&_0x2ae3c6['showCustomerAvatar']){_0x125bcf=path['join'](config['root'],_0xbb10('0x89'),_0x2ae3c6[_0xbb10('0x79')]);}}return _0x2882d1[_0xbb10('0x85')](_0x125bcf);}})['catch'](handleError(_0x2882d1,null));};exports[_0xbb10('0x8c')]=function(_0x2f6be3,_0x2c638d,_0x290280){var _0x2a6589=path[_0xbb10('0x7d')](config['root'],'server/files/images/avatars/system_avatar.png');var _0x356660={'where':{'id':_0x2f6be3['params']['id']},'attributes':['id',_0xbb10('0x7b')],'raw':!![]};return db[_0xbb10('0x3e')][_0xbb10('0x5a')](_0x356660)[_0xbb10('0x21')](handleEntityNotFound(_0x2c638d,null))[_0xbb10('0x21')](function(_0x2dfa04){if(_0x2dfa04){if(!_[_0xbb10('0x83')](_0x2dfa04[_0xbb10('0x7b')])){if(fs[_0xbb10('0x88')](path[_0xbb10('0x7d')](config['root'],_0xbb10('0x89'),_0x2dfa04['systemAvatar']))){_0x2a6589=path[_0xbb10('0x7d')](config['root'],_0xbb10('0x89'),_0x2dfa04[_0xbb10('0x7b')]);}}return _0x2c638d[_0xbb10('0x85')](_0x2a6589);}})[_0xbb10('0x2b')](handleError(_0x2c638d,null));};exports['notify']=function(_0xcc246f,_0x4960b1,_0xfe1154){var _0x1b6b9f=require(_0xbb10('0x8d'));var _0x5388dc=new _0x1b6b9f();var _0x298167=_0x5388dc[_0xbb10('0x8e')](_0xcc246f[_0xbb10('0x8f')][_0xbb10('0x90')])[_0xbb10('0x91')]();var _0x309ec1={'body':_0xcc246f['body'],'channel':'chat'};var _0x522a88=[];var _0x26a752=[];var _0x5ad3f1={};var _0x318908=![];return db['CmContact'][_0xbb10('0x66')]()[_0xbb10('0x21')](function(_0x385ad3){if(!_0x385ad3){throw new db['Sequelize']['ValidationError'](_0xbb10('0x92'));}_0x522a88=_[_0xbb10('0x93')](_[_0xbb10('0x40')](_0x385ad3),['createdAt',_0xbb10('0x94')]);_0x26a752=_[_0xbb10('0x93')](_[_0xbb10('0x40')](_0x385ad3),['createdAt','updatedAt','CompanyId',_0xbb10('0x95')]);if(_0xcc246f['body']['id']){delete _0xcc246f[_0xbb10('0x5c')]['id'];}if(_[_0xbb10('0x83')](_0xcc246f[_0xbb10('0x5c')][_0xbb10('0x96')])){throw new db[(_0xbb10('0x97'))][(_0xbb10('0x98'))](_0xbb10('0x99'));}if(_[_0xbb10('0x83')](_0xcc246f[_0xbb10('0x5c')][_0xbb10('0x5c')])||_0xcc246f[_0xbb10('0x5c')]['body']===''){throw new db[(_0xbb10('0x97'))][(_0xbb10('0x98'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0xbb10('0x83')](_0xcc246f['body']['mapKey'])){throw new db[(_0xbb10('0x97'))][(_0xbb10('0x98'))](_0xbb10('0x9a')+_0x26a752);}if(!_[_0xbb10('0x9b')](_0x26a752,_0xcc246f[_0xbb10('0x5c')]['mapKey'])){throw new db[(_0xbb10('0x97'))][(_0xbb10('0x98'))]('mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x26a752);}_0x5ad3f1[_0xcc246f[_0xbb10('0x5c')][_0xbb10('0x9c')]]=_0xcc246f['body'][_0xbb10('0x96')];})['then'](function(){return db[_0xbb10('0x3e')][_0xbb10('0x5a')]({'where':{'id':_0xcc246f[_0xbb10('0x64')]['id']},'include':[{'model':db[_0xbb10('0x9d')],'as':_0xbb10('0x9e'),'include':[{'model':db[_0xbb10('0x9f')],'as':_0xbb10('0xa0'),'where':_0x5ad3f1,'limit':0x1,'order':[['updatedAt',_0xbb10('0xa1')]]}]},{'model':db[_0xbb10('0xa2')],'as':_0xbb10('0xa3')}]});})[_0xbb10('0x21')](handleEntityNotFound(_0x4960b1,null))[_0xbb10('0x21')](function(_0x1301e3){if(_0x1301e3&&_0x1301e3['List']){_0x309ec1['account']=_0x1301e3;_0x309ec1['applications']=_0x1301e3[_0xbb10('0xa3')];_0x309ec1[_0xbb10('0xa4')]=_0x1301e3[_0xbb10('0x9e')];_0x309ec1[_0xbb10('0xa5')]=_['orderBy'](_0x309ec1[_0xbb10('0xa5')],[_0xbb10('0xa6')],[_0xbb10('0xa7')]);if(_0x309ec1['account']['Applications']){delete _0x309ec1[_0xbb10('0xa8')]['Applications'];}if(_0x309ec1[_0xbb10('0xa8')][_0xbb10('0x9e')]&&_0x309ec1[_0xbb10('0xa8')][_0xbb10('0x9e')][_0xbb10('0xa0')][_0xbb10('0x46')]){return _0x309ec1[_0xbb10('0xa8')]['List'][_0xbb10('0xa0')][0x0];}var _0x1eca6c=_['defaults'](_0xcc246f[_0xbb10('0x5c')],{'firstName':_0xcc246f[_0xbb10('0x5c')][_0xbb10('0x96')],'ListId':_0x1301e3['ListId']});_0x1eca6c[_0xcc246f['body']['mapKey']]=_0xcc246f[_0xbb10('0x5c')][_0xbb10('0x96')];return db['CmContact'][_0xbb10('0x5b')](_0x1eca6c,{'fields':_0x522a88,'raw':!![]});}})[_0xbb10('0x21')](handleEntityNotFound(_0x4960b1,null))[_0xbb10('0x21')](function(_0x24b0ea){_0x309ec1[_0xbb10('0xa9')]=_0x24b0ea;if(_0x24b0ea){var _0x1fe91e={'ContactId':_0x24b0ea['id'],'ChatWebsiteId':_0xcc246f[_0xbb10('0x64')]['id'],'from':(_0x24b0ea['firstName']||'')+'\x20'+(_0x24b0ea[_0xbb10('0xaa')]||''),'customerIp':_0xcc246f['body']['customerIp'],'referer':_0xcc246f['body'][_0xbb10('0xab')],'browserName':_0x298167[_0xbb10('0xac')]['name']&&_0x298167[_0xbb10('0xac')]['version']?util[_0xbb10('0xad')](_0xbb10('0xae'),_0x298167[_0xbb10('0xac')]['name'],_0x298167['browser'][_0xbb10('0xaf')]):'unknown','browserVersion':_0x298167[_0xbb10('0xac')][_0xbb10('0xaf')]||'unknown','osName':util['format'](_0xbb10('0xae'),_0x298167['os'][_0xbb10('0x3b')],_0x298167['os'][_0xbb10('0xaf')]),'osVersion':_0x298167['os']['version'],'deviceModel':_0x298167[_0xbb10('0xb0')][_0xbb10('0x3f')]&&_0x298167[_0xbb10('0xb0')]['vendor']?util[_0xbb10('0xad')](_0xbb10('0xb1'),_0x298167[_0xbb10('0xb0')][_0xbb10('0x3f')],_0x298167[_0xbb10('0xb0')][_0xbb10('0xb2')],_0x298167[_0xbb10('0xb0')][_0xbb10('0x4f')]):null,'deviceVendor':_0x298167[_0xbb10('0xb0')][_0xbb10('0xb2')],'deviceType':_0x298167[_0xbb10('0xb0')][_0xbb10('0x4f')],'formData':JSON[_0xbb10('0x26')](_0xcc246f['body'])};var _0x5eea19={'ChatWebsiteId':_0xcc246f[_0xbb10('0x64')]['id'],'closed':![]};if(_0xcc246f['body'][_0xbb10('0xb3')]){_0x5eea19[_0xbb10('0xb3')]=_0xcc246f[_0xbb10('0x5c')]['threadId'];return db[_0xbb10('0xb4')][_0xbb10('0x5a')]({'where':_0x5eea19})[_0xbb10('0x21')](function(_0xe5f8e2){if(_0xe5f8e2){return[_0xe5f8e2,![]];}_0x1fe91e[_0xbb10('0xb3')]=_0xcc246f['body'][_0xbb10('0xb3')];_0x1fe91e[_0xbb10('0xb5')]=_0xcc246f[_0xbb10('0x5c')][_0xbb10('0xb5')];return db[_0xbb10('0xb4')][_0xbb10('0x5b')](_0x1fe91e)['then'](function(_0x3d8043){return[_0x3d8043,!![]];});});}_0x5eea19[_0xbb10('0xb6')]=_0x24b0ea['id'];if(_0xcc246f['body'][_0xbb10('0xb7')]&&_0xcc246f[_0xbb10('0x5c')][_0xbb10('0xb7')]['id']){_0x5eea19['id']=_0xcc246f[_0xbb10('0x5c')][_0xbb10('0xb7')]['id'];return db[_0xbb10('0xb4')][_0xbb10('0x5a')]({'where':_0x5eea19})[_0xbb10('0x21')](function(_0x1d45c5){if(_0x1d45c5){return[_0x1d45c5,![]];}return db[_0xbb10('0xb4')][_0xbb10('0x5b')](_0x1fe91e)[_0xbb10('0x21')](function(_0x1db646){return[_0x1db646,!![]];});});}return db[_0xbb10('0xb4')][_0xbb10('0x5b')](_0x1fe91e)['then'](function(_0x12e6cb){return[_0x12e6cb,!![]];});}})[_0xbb10('0xb8')](function(_0x5507f6,_0x5baeaa){if(_0x5507f6){_0x318908=_0x5baeaa;if(!_0x5baeaa){var _0x237258={'from':(_0x309ec1[_0xbb10('0xa9')][_0xbb10('0xb9')]||'')+'\x20'+(_0x309ec1[_0xbb10('0xa9')][_0xbb10('0xaa')]||'')};if(_0xcc246f[_0xbb10('0x5c')][_0xbb10('0xb3')]&&_0xcc246f[_0xbb10('0x5c')][_0xbb10('0xba')]&&_0xcc246f['body']['threadId']!=_0xcc246f['body']['messageId']){_0x237258['threadId']=_0xcc246f['body'][_0xbb10('0xba')];}return _0x5507f6[_0xbb10('0x35')](_0x237258);}else{return _0x5507f6;}}})[_0xbb10('0x21')](function(_0x395ac8){_0x309ec1['interaction']=_0x395ac8[_0xbb10('0x37')]({'plain':!![]});_0x309ec1[_0xbb10('0xb7')][_0xbb10('0xbb')]=_0x318908;if(_0x309ec1[_0xbb10('0xb7')]['created']){if(_0x309ec1['account'][_0xbb10('0xbc')]){_0x309ec1[_0xbb10('0xa5')]['push']({'id':0x0,'priority':_0x309ec1['applications'][_0xbb10('0x46')]+0x1,'app':_0xbb10('0xbd'),'appdata':_0xbb10('0xbe'),'interval':_0xbb10('0xbf')});}}return db[_0xbb10('0xc0')]['create']({'body':_0xcc246f[_0xbb10('0x5c')]['body'],'ChatWebsiteId':_0xcc246f['params']['id'],'ChatInteractionId':_0x395ac8['id'],'direction':'in','ContactId':_0x309ec1[_0xbb10('0xa9')]['id'],'AttachmentId':_0xcc246f[_0xbb10('0x5c')][_0xbb10('0xc1')]});})[_0xbb10('0x21')](function(_0x3b1e6f){_0x309ec1[_0xbb10('0x29')]=_0x3b1e6f;if(_0x309ec1['interaction'][_0xbb10('0xc2')]){return db[_0xbb10('0xc3')][_0xbb10('0x5a')]({'attributes':['id',_0xbb10('0x3b')],'where':{'id':_0x309ec1[_0xbb10('0xb7')][_0xbb10('0xc2')]}})[_0xbb10('0x21')](function(_0xce60f4){if(_0xce60f4){_0x309ec1[_0xbb10('0xa5')][_0xbb10('0xc4')]({'id':0x0,'priority':0x0,'app':_0xbb10('0xc5'),'appdata':_0xce60f4[_0xbb10('0x3b')]+','+(_0x309ec1[_0xbb10('0xa8')][_0xbb10('0xc6')]||0xa),'interval':_0xbb10('0xbf')});_0x309ec1[_0xbb10('0xc7')]=!![];}return respondWithRpcPromise(_0xbb10('0xc8'),_0xbb10('0xc9'),_0x309ec1);});}return respondWithRpcPromise(_0xbb10('0xc8'),_0xbb10('0xc9'),_0x309ec1);})[_0xbb10('0x21')](function(_0x1f84b0){respondWithRpcPromise('EventManager',_0xbb10('0xca'),{'event':'notify','message':_0x1f84b0},client9002);return _0x1f84b0;})[_0xbb10('0x21')](respondWithResult(_0x4960b1,null))[_0xbb10('0x2b')](handleError(_0x4960b1,null));};exports[_0xbb10('0xcb')]=function(_0x2b1f0f,_0x40bbf1,_0x4f5689){var _0x5997f3,_0x572b4d,_0x36be49;var _0x2fac6c=[];var _0x482f7d=[];var _0x31b7f9={};return db[_0xbb10('0x9f')][_0xbb10('0x66')]()['then'](function(_0xae8e0a){if(!_0xae8e0a){throw new db[(_0xbb10('0x97'))][(_0xbb10('0x98'))]('no\x20available\x20attributes');}_0x482f7d=_[_0xbb10('0x93')](_['keys'](_0xae8e0a),[_0xbb10('0xcc'),'updatedAt']);_0x2fac6c=_['difference'](_['keys'](_0xae8e0a),['createdAt','updatedAt','CompanyId',_0xbb10('0x95')]);if(_0x2b1f0f[_0xbb10('0x5c')]['id']){delete _0x2b1f0f[_0xbb10('0x5c')]['id'];}if(_[_0xbb10('0x83')](_0x2b1f0f['body'][_0xbb10('0x96')])){throw _0x40bbf1[_0xbb10('0x2c')](0x1f4)[_0xbb10('0x3c')](new db[(_0xbb10('0x97'))][(_0xbb10('0x98'))](_0xbb10('0x99')));}if(_[_0xbb10('0x83')](_0x2b1f0f[_0xbb10('0x5c')][_0xbb10('0x5c')])||_0x2b1f0f[_0xbb10('0x5c')]['body']===''){throw _0x40bbf1[_0xbb10('0x2c')](0x1f4)[_0xbb10('0x3c')](new db[(_0xbb10('0x97'))]['ValidationError'](_0xbb10('0xcd')));}if(_[_0xbb10('0x83')](_0x2b1f0f[_0xbb10('0x5c')][_0xbb10('0xce')])){throw _0x40bbf1['status'](0x1f4)[_0xbb10('0x3c')](new db[(_0xbb10('0x97'))][(_0xbb10('0x98'))](_0xbb10('0xcf')+_0x2fac6c));}if(!_[_0xbb10('0x9b')](_0x2fac6c,_0x2b1f0f[_0xbb10('0x5c')][_0xbb10('0xce')])){throw _0x40bbf1[_0xbb10('0x2c')](0x1f4)[_0xbb10('0x3c')](new db[(_0xbb10('0x97'))][(_0xbb10('0x98'))]('mapKeyOffline\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x2fac6c));}_0x31b7f9[_0x2b1f0f[_0xbb10('0x5c')][_0xbb10('0xce')]]=_0x2b1f0f['body']['from'];})[_0xbb10('0x21')](function(){return db[_0xbb10('0x3e')]['find']({'where':{'id':_0x2b1f0f[_0xbb10('0x64')]['id']},'include':[{'model':db[_0xbb10('0x9d')],'as':'List'}]});})[_0xbb10('0x21')](handleEntityNotFound(_0x40bbf1,null))[_0xbb10('0x21')](function(_0xb563e5){if(_0xb563e5&&_0xb563e5[_0xbb10('0x9e')]){_0x572b4d=_0xb563e5;var _0x3c92db=_['defaults'](_0x2b1f0f['body'],{'firstName':_0x2b1f0f['body'][_0xbb10('0x96')],'phone':_0x2b1f0f['body'][_0xbb10('0x96')],'ListId':_0xb563e5['ListId']});_0x3c92db[_0x2b1f0f['body'][_0xbb10('0xce')]]=_0x2b1f0f[_0xbb10('0x5c')][_0xbb10('0x96')];return db[_0xbb10('0x9f')][_0xbb10('0xd0')]({'where':_0x31b7f9,'defaults':_0x3c92db});}})[_0xbb10('0xb8')](function(_0x5b9d3f){if(_0x5b9d3f){_0x36be49=_0x5b9d3f;var _0x54d45b=fs['readFileSync'](path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],_0xbb10('0xd1')),_0xbb10('0xd2'));var _0x26bc1c=ejs[_0xbb10('0xd3')](_0x54d45b,{'body':_[_0xbb10('0xd4')](_0x2b1f0f['body'][_0xbb10('0x5c')]),'bodyTitle':_0x572b4d[_0xbb10('0xd5')]});return db[_0xbb10('0xd6')][_0xbb10('0x5b')]({'body':_0x26bc1c,'ContactId':_0x5b9d3f['id'],'ChatWebsiteId':_0x572b4d['id']});}})['then'](function(_0x287d4f){if(_0x287d4f){_0x5997f3=_0x287d4f;return db['MailAccount']['findOne']({'where':{'service':!![]},'include':[{'model':db[_0xbb10('0xd7')],'as':_0xbb10('0xd8'),'raw':!![]}]});}})[_0xbb10('0x21')](function(_0xf0c285){if(_0xf0c285&&_0xf0c285[_0xbb10('0xd8')]&&_0x572b4d[_0xbb10('0xd9')]){var _0x4b7bf8={'tls':{'rejectUnauthorized':![]}};if(_0xf0c285[_0xbb10('0xd8')][_0xbb10('0xda')]){_0x4b7bf8[_0xbb10('0xda')]=_0xf0c285[_0xbb10('0xd8')][_0xbb10('0xda')];}else{_0x4b7bf8[_0xbb10('0xdb')]=_0xf0c285[_0xbb10('0xd8')]['host'];_0x4b7bf8[_0xbb10('0xdc')]=_0xf0c285[_0xbb10('0xd8')][_0xbb10('0xdc')];_0x4b7bf8['secure']=_0xf0c285['Smtp'][_0xbb10('0xdd')];}if(_0xf0c285[_0xbb10('0xd8')][_0xbb10('0xde')]){_0x4b7bf8[_0xbb10('0xdf')]={'user':_0xf0c285[_0xbb10('0xd8')][_0xbb10('0x5d')],'pass':_0xf0c285[_0xbb10('0xd8')]['pass']};}return respondWithRpcPromise(_0xbb10('0xe0'),_0xbb10('0xe1'),{'account':_0x4b7bf8,'message':{'from':util[_0xbb10('0xad')]('\x22%s\x22\x20<%s>',_0xf0c285['name'],_0xf0c285['email']||_0xf0c285['Smtp'][_0xbb10('0x5d')]),'to':_0x572b4d[_0xbb10('0xd9')],'subject':_0x572b4d[_0xbb10('0xe2')],'text':_0x5997f3[_0xbb10('0x5c')]}},client9003)['then'](function(){return _0x5997f3;})[_0xbb10('0x2b')](function(_0x4f6b12){console[_0xbb10('0x27')](_0x4f6b12);});}})[_0xbb10('0x21')](function(){if(_0x5997f3){return _0x5997f3;}})[_0xbb10('0x21')](respondWithResult(_0x40bbf1,null))[_0xbb10('0x2b')](handleError(_0x40bbf1,null));};exports[_0xbb10('0xe3')]=function(_0x163fdd,_0x3c93d0,_0x4541f2){return db[_0xbb10('0xb4')][_0xbb10('0x5a')]({'where':{'id':_0x163fdd[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x3c93d0,null))['then'](function(_0x1bd6db){if(_0x1bd6db){return _0x1bd6db[_0xbb10('0xe3')](_0x163fdd[_0xbb10('0x5c')]['ids'],_[_0xbb10('0xe4')](_0x163fdd['body'],[_0xbb10('0x6e'),'id'])||{});}})[_0xbb10('0x21')](respondWithResult(_0x3c93d0,null))[_0xbb10('0x2b')](handleError(_0x3c93d0,null));};exports[_0xbb10('0xe5')]=function(_0x36a054,_0x533327,_0x5345df){var _0x842d94={'raw':![],'where':{}};var _0x4cf5cc={};var _0x553bb8={'count':0x0,'rows':[]};return db[_0xbb10('0x3e')]['findOne']({'where':{'id':_0x36a054[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x533327,null))[_0xbb10('0x21')](function(_0x4469c4){if(_0x4469c4){_0x4cf5cc[_0xbb10('0x3f')]=_[_0xbb10('0x40')](db[_0xbb10('0xb4')][_0xbb10('0x59')]);_0x4cf5cc['query']=_[_0xbb10('0x40')](_0x36a054['query']);_0x4cf5cc[_0xbb10('0x42')]=_['intersection'](_0x4cf5cc[_0xbb10('0x3f')],_0x4cf5cc[_0xbb10('0x41')]);_0x842d94['attributes']=_[_0xbb10('0x43')](_0x4cf5cc[_0xbb10('0x3f')],qs[_0xbb10('0x45')](_0x36a054['query'][_0xbb10('0x45')]));_0x842d94[_0xbb10('0x44')]=_0x842d94[_0xbb10('0x44')]['length']?_0x842d94[_0xbb10('0x44')]:_0x4cf5cc[_0xbb10('0x3f')];if(!_0x36a054[_0xbb10('0x41')]['hasOwnProperty'](_0xbb10('0x48'))){_0x842d94['limit']=qs[_0xbb10('0x30')](_0x36a054[_0xbb10('0x41')][_0xbb10('0x30')]);_0x842d94[_0xbb10('0x2f')]=qs[_0xbb10('0x2f')](_0x36a054[_0xbb10('0x41')][_0xbb10('0x2f')]);}_0x842d94[_0xbb10('0x49')]=qs[_0xbb10('0x4a')](_0x36a054[_0xbb10('0x41')]['sort']);_0x842d94['where']=qs[_0xbb10('0x42')](_[_0xbb10('0x6b')](_0x36a054[_0xbb10('0x41')],_0x4cf5cc['filters']));_0x842d94[_0xbb10('0x4b')][_0xbb10('0x68')]=_0x4469c4['id'];if(_0x36a054[_0xbb10('0x41')][_0xbb10('0x4c')]){_0x842d94[_0xbb10('0x4b')]=_[_0xbb10('0x4d')](_0x842d94[_0xbb10('0x4b')],{'$or':_[_0xbb10('0x4e')](_0x842d94[_0xbb10('0x44')],function(_0x4d2c8d){var _0xa7e6bd={};_0xa7e6bd[_0x4d2c8d]={'$like':'%'+_0x36a054[_0xbb10('0x41')][_0xbb10('0x4c')]+'%'};return _0xa7e6bd;})});}_0x842d94=_[_0xbb10('0x4d')]({},_0x842d94,_0x36a054['options']);return db[_0xbb10('0xb4')][_0xbb10('0x54')]({'where':_0x842d94[_0xbb10('0x4b')]})['then'](function(_0x59f9b2){_0x553bb8[_0xbb10('0x54')]=_0x59f9b2;if(_0x36a054['query'][_0xbb10('0x55')]){_0x842d94['include']=[{'model':db[_0xbb10('0x9f')],'as':_0xbb10('0xe6'),'required':![]},{'model':db[_0xbb10('0xc3')],'as':_0xbb10('0xe7'),'attributes':[_0xbb10('0x3b'),_0xbb10('0xe8'),_0xbb10('0xe9')],'required':![]},{'model':db['Tag'],'as':_0xbb10('0xea'),'attributes':['id',_0xbb10('0x3b'),_0xbb10('0xeb')],'where':_0x36a054[_0xbb10('0x41')][_0xbb10('0xec')]?{'id':_0x36a054[_0xbb10('0x41')]['tag']}:undefined,'required':_0x36a054[_0xbb10('0x41')][_0xbb10('0xec')]?!![]:![]}];}return db[_0xbb10('0xb4')][_0xbb10('0x6c')](_0x842d94);})[_0xbb10('0x21')](function(_0x16edac){_0x553bb8[_0xbb10('0x57')]=_0x16edac;return _0x553bb8;});}})['then'](respondWithFilteredResult(_0x533327,_0x842d94))[_0xbb10('0x2b')](handleError(_0x533327,null));};function iftimePromise(_0x183e57,_0x1e8713){return respondWithRpcPromise('Command',_0xbb10('0xed'),{'command':_0x1e8713['timezone']?util[_0xbb10('0xad')](_0xbb10('0xee'),_0x183e57[_0xbb10('0xef')],_0x1e8713['timezone']):util['format'](_0xbb10('0xf0'),_0x183e57[_0xbb10('0xef')])},client9002)[_0xbb10('0x21')](function(_0x27ea82){var _0x8ef7c1=_0x27ea82&&_0x27ea82[_0xbb10('0xf1')](_0xbb10('0xf2'))>=0x0?!![]:![];logger[_0xbb10('0x22')](_0xbb10('0xf3'),_0x1e8713['id'],_0x183e57['id'],_0x183e57[_0xbb10('0xef')],_0x8ef7c1?_0xbb10('0xf4'):'OFFLINE',_0x1e8713['timezone']?_0x1e8713[_0xbb10('0xf5')]:_0xbb10('0xf6'));return _0x8ef7c1;})['catch'](function(_0x576df0){logger[_0xbb10('0x27')](_0xbb10('0xf3'),_0x1e8713['id'],_0x183e57['id'],_0x183e57[_0xbb10('0xef')],util['inspect'](_0x576df0,{'showHidden':![],'depth':null}),_0x1e8713[_0xbb10('0xf5')]?_0x1e8713[_0xbb10('0xf5')]:'No\x20timezone');return![];});}exports[_0xbb10('0xed')]=function(_0x97224a,_0x544c9c,_0x5a5349){var _0x3eb533=0x0;var _0x26ec8e=0x0;var _0xfefdc=![];var _0x5cab64;var _0x5acd22;return db[_0xbb10('0x3e')][_0xbb10('0x5a')]({'where':{'id':_0x97224a['params']['id']},'include':[{'model':db[_0xbb10('0xf7')],'as':_0xbb10('0xf7'),'include':[{'model':db['Interval'],'as':_0xbb10('0xf8'),'attributes':['id',_0xbb10('0xef')],'raw':!![]}]}]})[_0xbb10('0x21')](handleEntityNotFound(_0x544c9c,null))[_0xbb10('0x21')](function(_0x5ac4e6){if(_0x5ac4e6){_0x5cab64=_0x5ac4e6;return _0x5ac4e6[_0xbb10('0xf9')]({'raw':!![]});}})['then'](function(_0x423253){if(_0x5cab64){if(_0x423253){_0x5acd22=_0x423253;}}return require(_0xbb10('0xfa'))[_0xbb10('0x81')]();})[_0xbb10('0x21')](function(_0x3b2ed0){if(_0x3b2ed0){_0x26ec8e=_0x3b2ed0[_0xbb10('0xfb')];_0xfefdc=_0x3b2ed0[_0xbb10('0x82')];}})[_0xbb10('0x21')](function(){return db['ChatInteraction'][_0xbb10('0x54')]({'where':{'closed':![]}});})[_0xbb10('0x21')](function(_0x6cdbe6){_0x3eb533=_0x6cdbe6;if(_0x26ec8e&&_0x6cdbe6>_0x26ec8e){return db[_0xbb10('0xfc')]['findOne']({'where':{'id':0x1}})['then'](function(_0xd23108){if(_0xd23108){_0xd23108[_0xbb10('0xfd')](_0xbb10('0xfe'));}});}})[_0xbb10('0x21')](function(){if(_0x5cab64['Interval']&&_0x5cab64[_0xbb10('0xf7')][_0xbb10('0xf8')]){var _0x4f0a22=[];for(var _0x327a34=0x0;_0x327a34<_0x5cab64['Interval']['Intervals'][_0xbb10('0x46')];_0x327a34++){var _0x18cede=_0x5cab64[_0xbb10('0xf7')][_0xbb10('0xf8')][_0x327a34][_0xbb10('0x37')]({'plain':!![]});_0x4f0a22['push'](iftimePromise(_0x18cede,_0x5cab64));}return BPromise[_0xbb10('0xff')](_0x4f0a22)[_0xbb10('0x21')](function(_0x356601){return _[_0xbb10('0x100')](_0x356601);});}else{return!![];}})[_0xbb10('0x21')](function(_0x344089){var _0xb90ba5=fs[_0xbb10('0x101')](path[_0xbb10('0x7d')](config[_0xbb10('0x7e')],_0xbb10('0x102')),_0xbb10('0xd2'));var _0x74ca46={'remote':_0x5cab64[_0xbb10('0x103')],'query':querystring[_0xbb10('0x26')](_[_0xbb10('0x4d')](_0x5cab64[_0xbb10('0x37')]({'plain':!![]}),{'customerIp':_0x97224a[_0xbb10('0x8f')][_0xbb10('0x104')]||_0x97224a[_0xbb10('0x8f')][_0xbb10('0x105')]||_0x97224a[_0xbb10('0x106')][_0xbb10('0x107')]||_0x97224a['ip'],'referer':_0x97224a[_0xbb10('0x8f')][_0xbb10('0xab')],'openedInteractions':_0x3eb533,'maxInteractions':_0x26ec8e,'virtual':_0xfefdc[_0xbb10('0xfb')],'online':_0x344089,'custom':_0xfefdc}))[_0xbb10('0x108')](/'/g,'\x5c\x27')};_0x544c9c['send'](ejs[_0xbb10('0xd3')](Mustache[_0xbb10('0xd3')](_0xb90ba5,_0x74ca46),{'proactiveActions':_0x5acd22,'alignment':_0x5cab64['alignment'],'verticalAlignment':_0x5cab64[_0xbb10('0x109')]}));})[_0xbb10('0x2b')](handleError(_0x544c9c,null));};exports['addApplications']=function(_0x3a20c0,_0x3b96dd,_0x4e97fd){return db[_0xbb10('0x3e')][_0xbb10('0x71')]({'where':{'id':_0x3a20c0[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x3b96dd,null))['then'](function(_0x170061){if(_0x170061){return db[_0xbb10('0x10a')][_0xbb10('0x10b')](function(_0x16ebc4){return db['ChatApplication'][_0xbb10('0x36')]({'where':{'ChatWebsiteId':_0x3a20c0[_0xbb10('0x64')]['id']},'transaction':_0x16ebc4})[_0xbb10('0x21')](function(_0x420a2e){var _0x385e4b=_[_0xbb10('0x4e')](_0x3a20c0[_0xbb10('0x5c')],function(_0x135604){_0x135604[_0xbb10('0x68')]=_0x3a20c0[_0xbb10('0x64')]['id'];return _0x135604;});return db[_0xbb10('0xa2')]['bulkCreate'](_0x385e4b,{'transaction':_0x16ebc4});});})[_0xbb10('0x21')](function(){return db[_0xbb10('0xa2')][_0xbb10('0x10c')]({'where':{'ChatWebsiteId':_0x3a20c0[_0xbb10('0x64')]['id']},'order':'priority'});});}})['then'](respondWithResult(_0x3b96dd,null))[_0xbb10('0x2b')](handleError(_0x3b96dd,null));};exports[_0xbb10('0x10d')]=function(_0x4785fb,_0x366ded,_0x5f0576){var _0x473cee={};var _0x3cf414={};var _0x2c5dd1;var _0x5df18b;return db['ChatWebsite'][_0xbb10('0x71')]({'where':{'id':_0x4785fb[_0xbb10('0x64')]['id']}})['then'](handleEntityNotFound(_0x366ded,null))['then'](function(_0x424bb1){if(_0x424bb1){_0x2c5dd1=_0x424bb1;_0x3cf414[_0xbb10('0x3f')]=_[_0xbb10('0x40')](db[_0xbb10('0xa2')][_0xbb10('0x59')]);_0x3cf414[_0xbb10('0x41')]=_['keys'](_0x4785fb[_0xbb10('0x41')]);_0x3cf414[_0xbb10('0x42')]=_[_0xbb10('0x43')](_0x3cf414[_0xbb10('0x3f')],_0x3cf414[_0xbb10('0x41')]);_0x473cee[_0xbb10('0x44')]=_[_0xbb10('0x43')](_0x3cf414[_0xbb10('0x3f')],qs[_0xbb10('0x45')](_0x4785fb[_0xbb10('0x41')]['fields']));_0x473cee[_0xbb10('0x44')]=_0x473cee[_0xbb10('0x44')]['length']?_0x473cee['attributes']:_0x3cf414['model'];_0x473cee['order']=qs['sort'](_0x4785fb['query']['sort']);_0x473cee['where']=qs[_0xbb10('0x42')](_[_0xbb10('0x6b')](_0x4785fb['query'],_0x3cf414[_0xbb10('0x42')]));if(_0x4785fb[_0xbb10('0x41')][_0xbb10('0x4c')]){_0x473cee[_0xbb10('0x4b')]=_[_0xbb10('0x4d')](_0x473cee[_0xbb10('0x4b')],{'$or':_[_0xbb10('0x4e')](_0x473cee[_0xbb10('0x44')],function(_0x405428){var _0x14d9e7={};_0x14d9e7[_0x405428]={'$like':'%'+_0x4785fb[_0xbb10('0x41')][_0xbb10('0x4c')]+'%'};return _0x14d9e7;})});}_0x473cee=_['merge']({},_0x473cee,_0x4785fb[_0xbb10('0x53')]);return _0x2c5dd1[_0xbb10('0x10d')](_0x473cee);}})[_0xbb10('0x21')](function(_0x3a6298){if(_0x3a6298){_0x5df18b=_0x3a6298[_0xbb10('0x46')];if(!_0x4785fb['query'][_0xbb10('0x47')]('nolimit')){_0x473cee['limit']=qs[_0xbb10('0x30')](_0x4785fb[_0xbb10('0x41')]['limit']);_0x473cee[_0xbb10('0x2f')]=qs[_0xbb10('0x2f')](_0x4785fb[_0xbb10('0x41')][_0xbb10('0x2f')]);}return _0x2c5dd1[_0xbb10('0x10d')](_0x473cee);}})['then'](function(_0x486a2f){if(_0x486a2f){return _0x486a2f?{'count':_0x5df18b,'rows':_0x486a2f}:null;}})[_0xbb10('0x21')](respondWithResult(_0x366ded,null))[_0xbb10('0x2b')](handleError(_0x366ded,null));};exports['addProactiveActions']=function(_0x108f23,_0x4cf976,_0x5a83de){return db[_0xbb10('0x10e')][_0xbb10('0x5a')]({'where':{'id':_0x108f23[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x4cf976,null))[_0xbb10('0x21')](function(_0x23bea4){if(_0x23bea4){return _0x23bea4['addProactiveActions'](_0x108f23[_0xbb10('0x5c')][_0xbb10('0x6e')],_[_0xbb10('0xe4')](_0x108f23[_0xbb10('0x5c')],['ids','id'])||{});}})[_0xbb10('0x21')](respondWithResult(_0x4cf976,null))[_0xbb10('0x2b')](handleError(_0x4cf976,null));};exports['getProactiveActions']=function(_0x49ef50,_0xeac82d,_0x5a4de3){var _0x40ff8e={};var _0x30ffca={};var _0x214dcb;var _0x3e19f4;return db['ChatWebsite'][_0xbb10('0x71')]({'where':{'id':_0x49ef50['params']['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0xeac82d,null))[_0xbb10('0x21')](function(_0x1d926f){if(_0x1d926f){_0x214dcb=_0x1d926f;_0x30ffca[_0xbb10('0x3f')]=_[_0xbb10('0x40')](db[_0xbb10('0x10f')][_0xbb10('0x59')]);_0x30ffca[_0xbb10('0x41')]=_[_0xbb10('0x40')](_0x49ef50['query']);_0x30ffca[_0xbb10('0x42')]=_[_0xbb10('0x43')](_0x30ffca[_0xbb10('0x3f')],_0x30ffca[_0xbb10('0x41')]);_0x40ff8e[_0xbb10('0x44')]=_['intersection'](_0x30ffca[_0xbb10('0x3f')],qs[_0xbb10('0x45')](_0x49ef50[_0xbb10('0x41')][_0xbb10('0x45')]));_0x40ff8e[_0xbb10('0x44')]=_0x40ff8e['attributes']['length']?_0x40ff8e['attributes']:_0x30ffca[_0xbb10('0x3f')];_0x40ff8e['order']=qs['sort'](_0x49ef50[_0xbb10('0x41')]['sort']);_0x40ff8e[_0xbb10('0x4b')]=qs[_0xbb10('0x42')](_['pick'](_0x49ef50[_0xbb10('0x41')],_0x30ffca[_0xbb10('0x42')]));if(_0x49ef50[_0xbb10('0x41')][_0xbb10('0x4c')]){_0x40ff8e['where']=_['merge'](_0x40ff8e['where'],{'$or':_[_0xbb10('0x4e')](_0x40ff8e[_0xbb10('0x44')],function(_0x551d64){var _0x31c019={};_0x31c019[_0x551d64]={'$like':'%'+_0x49ef50[_0xbb10('0x41')][_0xbb10('0x4c')]+'%'};return _0x31c019;})});}_0x40ff8e=_[_0xbb10('0x4d')]({},_0x40ff8e,_0x49ef50[_0xbb10('0x53')]);return _0x214dcb['getProactiveActions'](_0x40ff8e);}})[_0xbb10('0x21')](function(_0x7e9e52){if(_0x7e9e52){_0x3e19f4=_0x7e9e52[_0xbb10('0x46')];if(!_0x49ef50['query'][_0xbb10('0x47')]('nolimit')){_0x40ff8e[_0xbb10('0x30')]=qs[_0xbb10('0x30')](_0x49ef50[_0xbb10('0x41')]['limit']);_0x40ff8e[_0xbb10('0x2f')]=qs[_0xbb10('0x2f')](_0x49ef50['query'][_0xbb10('0x2f')]);}return _0x214dcb[_0xbb10('0xf9')](_0x40ff8e);}})[_0xbb10('0x21')](function(_0x2e03eb){if(_0x2e03eb){return _0x2e03eb?{'count':_0x3e19f4,'rows':_0x2e03eb}:null;}})[_0xbb10('0x21')](respondWithResult(_0xeac82d,null))['catch'](handleError(_0xeac82d,null));};exports['getFields']=function(_0x1ef039,_0x3fe59b,_0x22dd3d){var _0x1b0734=_0x1ef039[_0xbb10('0x41')]['online']===_0xbb10('0x110')?_0xbb10('0x111'):_0xbb10('0x112');return db[_0xbb10('0x3e')][_0xbb10('0x5a')]({'attributes':['id',_0x1b0734],'where':{'id':_0x1ef039['params']['id']}})['then'](handleEntityNotFound(_0x3fe59b,null))[_0xbb10('0x21')](function(_0x18f6b1){if(_0x18f6b1){var _0x1052f5=_0x18f6b1[_0x1b0734];var _0x119e8f=_0x1052f5&&_0x1052f5['items']?_0x1052f5['items']:[];_0x3fe59b[_0xbb10('0x3c')]({'fromKey':_['isNil'](_0x1052f5['fromKey'])?undefined:_0x1052f5['fromKey'],'count':_0x119e8f['length'],'rows':_0x119e8f});}})[_0xbb10('0x2b')](handleError(_0x3fe59b,null));};exports[_0xbb10('0x113')]=function(_0x8dfa5e,_0x1f0938,_0x11e17e){var _0x520856={'raw':!![],'where':{}};var _0x12829c={};var _0x10c2cb={'count':0x0,'rows':[]};return db[_0xbb10('0x3e')]['findOne']({'where':{'id':_0x8dfa5e[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x1f0938,null))[_0xbb10('0x21')](function(_0x45c642){if(_0x45c642){_0x12829c[_0xbb10('0x3f')]=_[_0xbb10('0x40')](db[_0xbb10('0xd6')][_0xbb10('0x59')]);_0x12829c[_0xbb10('0x41')]=_[_0xbb10('0x40')](_0x8dfa5e[_0xbb10('0x41')]);_0x12829c[_0xbb10('0x42')]=_[_0xbb10('0x43')](_0x12829c[_0xbb10('0x3f')],_0x12829c[_0xbb10('0x41')]);_0x520856['attributes']=_['intersection'](_0x12829c['model'],qs[_0xbb10('0x45')](_0x8dfa5e['query'][_0xbb10('0x45')]));_0x520856['attributes']=_0x520856[_0xbb10('0x44')]['length']?_0x520856['attributes']:_0x12829c[_0xbb10('0x3f')];if(!_0x8dfa5e[_0xbb10('0x41')]['hasOwnProperty'](_0xbb10('0x48'))){_0x520856[_0xbb10('0x30')]=qs[_0xbb10('0x30')](_0x8dfa5e[_0xbb10('0x41')]['limit']);_0x520856['offset']=qs[_0xbb10('0x2f')](_0x8dfa5e[_0xbb10('0x41')][_0xbb10('0x2f')]);}_0x520856[_0xbb10('0x49')]=qs[_0xbb10('0x4a')](_0x8dfa5e[_0xbb10('0x41')][_0xbb10('0x4a')]);_0x520856['where']=qs[_0xbb10('0x42')](_['pick'](_0x8dfa5e['query'],_0x12829c[_0xbb10('0x42')]));_0x520856['where'][_0xbb10('0x68')]=_0x45c642['id'];if(_0x8dfa5e[_0xbb10('0x41')][_0xbb10('0x4c')]){_0x520856[_0xbb10('0x4b')]=_[_0xbb10('0x4d')](_0x520856['where'],{'$or':_[_0xbb10('0x4e')](_0x520856[_0xbb10('0x44')],function(_0xf6f7ed){var _0x2701e8={};_0x2701e8[_0xf6f7ed]={'$like':'%'+_0x8dfa5e[_0xbb10('0x41')][_0xbb10('0x4c')]+'%'};return _0x2701e8;})});}_0x520856=_['merge']({},_0x520856,_0x8dfa5e['options']);return db[_0xbb10('0xd6')][_0xbb10('0x54')]({'where':_0x520856[_0xbb10('0x4b')]})[_0xbb10('0x21')](function(_0x38a9dc){_0x10c2cb['count']=_0x38a9dc;if(_0x8dfa5e['query'][_0xbb10('0x55')]){_0x520856[_0xbb10('0x56')]=[{'all':!![]}];}return db['ChatOfflineMessage']['findAll'](_0x520856);})[_0xbb10('0x21')](function(_0xed53e6){_0x10c2cb[_0xbb10('0x57')]=_0xed53e6;return _0x10c2cb;});}})[_0xbb10('0x21')](respondWithFilteredResult(_0x1f0938,_0x520856))[_0xbb10('0x2b')](handleError(_0x1f0938,null));};exports[_0xbb10('0x114')]=function(_0x5ca40a,_0x23fa34,_0x205784){return db[_0xbb10('0x3e')][_0xbb10('0x5a')]({'where':{'id':_0x5ca40a[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x23fa34,null))[_0xbb10('0x21')](function(_0x22e865){if(_0x22e865){return _0x22e865[_0xbb10('0x114')](_0x5ca40a['body']['ids'],_['omit'](_0x5ca40a[_0xbb10('0x5c')],[_0xbb10('0x6e'),'id'])||{})[_0xbb10('0xb8')](function(_0x270853){for(var _0x55265e=0x0;_0x55265e<_0x5ca40a['body']['ids'][_0xbb10('0x46')];_0x55265e+=0x1){socket[_0xbb10('0x115')](_0xbb10('0x116'),{'UserId':_0x5ca40a[_0xbb10('0x5c')][_0xbb10('0x6e')][_0x55265e],'ChatWebsiteId':_0x5ca40a[_0xbb10('0x64')]['id']});}return _0x270853;});}})[_0xbb10('0x21')](respondWithResult(_0x23fa34,null))[_0xbb10('0x2b')](handleError(_0x23fa34,null));};exports[_0xbb10('0x117')]=function(_0xb3139c,_0x332ea6,_0x1d227f){var _0x3e148f;return db[_0xbb10('0x3e')]['find']({'where':{'id':_0xb3139c[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x332ea6,null))[_0xbb10('0x21')](function(_0x2cf657){if(_0x2cf657){return _0x2cf657[_0xbb10('0x117')](_0xb3139c[_0xbb10('0x41')]['ids'])[_0xbb10('0x21')](function(_0x9d612b){if(_[_0xbb10('0x118')](_0xb3139c[_0xbb10('0x41')][_0xbb10('0x6e')])){for(var _0x425743=0x0;_0x425743<_0xb3139c[_0xbb10('0x41')][_0xbb10('0x6e')][_0xbb10('0x46')];_0x425743+=0x1){socket['emit'](_0xbb10('0x119'),{'UserId':_0xb3139c[_0xbb10('0x41')][_0xbb10('0x6e')][_0x425743],'ChatWebsiteId':_0xb3139c[_0xbb10('0x64')]['id']});}}else{socket[_0xbb10('0x115')](_0xbb10('0x119'),{'UserId':_0xb3139c[_0xbb10('0x41')][_0xbb10('0x6e')],'ChatWebsiteId':_0xb3139c[_0xbb10('0x64')]['id']});}});}})['then'](respondWithStatusCode(_0x332ea6,null))[_0xbb10('0x2b')](handleError(_0x332ea6,null));};exports['getAgents']=function(_0x15c71d,_0x2cd1b0,_0x57e0b2){var _0x57b52d={};var _0x366f28={};var _0x1157fb;var _0x2b355f;return db[_0xbb10('0x3e')][_0xbb10('0x71')]({'where':{'id':_0x15c71d[_0xbb10('0x64')]['id']}})[_0xbb10('0x21')](handleEntityNotFound(_0x2cd1b0,null))[_0xbb10('0x21')](function(_0x3108fc){if(_0x3108fc){_0x1157fb=_0x3108fc;_0x366f28[_0xbb10('0x3f')]=_[_0xbb10('0x40')](db[_0xbb10('0xc3')][_0xbb10('0x59')]);_0x366f28[_0xbb10('0x41')]=_[_0xbb10('0x40')](_0x15c71d['query']);_0x366f28[_0xbb10('0x42')]=_['intersection'](_0x366f28[_0xbb10('0x3f')],_0x366f28[_0xbb10('0x41')]);_0x57b52d[_0xbb10('0x44')]=_[_0xbb10('0x43')](_0x366f28[_0xbb10('0x3f')],qs[_0xbb10('0x45')](_0x15c71d[_0xbb10('0x41')][_0xbb10('0x45')]));_0x57b52d[_0xbb10('0x44')]=_0x57b52d['attributes']['length']?_0x57b52d[_0xbb10('0x44')]:_0x366f28[_0xbb10('0x3f')];_0x57b52d[_0xbb10('0x49')]=qs['sort'](_0x15c71d[_0xbb10('0x41')]['sort']);_0x57b52d[_0xbb10('0x4b')]=qs[_0xbb10('0x42')](_['pick'](_0x15c71d[_0xbb10('0x41')],_0x366f28[_0xbb10('0x42')]));if(_0x15c71d[_0xbb10('0x41')][_0xbb10('0x4c')]){_0x57b52d[_0xbb10('0x4b')]=_['merge'](_0x57b52d[_0xbb10('0x4b')],{'$or':_[_0xbb10('0x4e')](_0x57b52d['attributes'],function(_0x358e1c){var _0x1b0a9b={};_0x1b0a9b[_0x358e1c]={'$like':'%'+_0x15c71d['query'][_0xbb10('0x4c')]+'%'};return _0x1b0a9b;})});}_0x57b52d=_[_0xbb10('0x4d')]({},_0x57b52d,_0x15c71d[_0xbb10('0x53')]);return _0x1157fb[_0xbb10('0x11a')](_0x57b52d);}})['then'](function(_0xa0f8c3){if(_0xa0f8c3){_0x2b355f=_0xa0f8c3[_0xbb10('0x46')];if(!_0x15c71d[_0xbb10('0x41')]['hasOwnProperty']('nolimit')){_0x57b52d[_0xbb10('0x30')]=qs[_0xbb10('0x30')](_0x15c71d[_0xbb10('0x41')][_0xbb10('0x30')]);_0x57b52d['offset']=qs[_0xbb10('0x2f')](_0x15c71d[_0xbb10('0x41')][_0xbb10('0x2f')]);}return _0x1157fb[_0xbb10('0x11a')](_0x57b52d);}})[_0xbb10('0x21')](function(_0x5cfad3){if(_0x5cfad3){return _0x5cfad3?{'count':_0x2b355f,'rows':_0x5cfad3}:null;}})['then'](respondWithResult(_0x2cd1b0,null))[_0xbb10('0x2b')](handleError(_0x2cd1b0,null));};
\ No newline at end of file
index 57c0bd5..6bc9e1a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xab86=['ChatWebsite','update','emit','hasOwnProperty','hook','exports','events','../../mysqldb'];(function(_0x130b16,_0x21d0e8){var _0x3d3c91=function(_0x3432ac){while(--_0x3432ac){_0x130b16['push'](_0x130b16['shift']());}};_0x3d3c91(++_0x21d0e8);}(_0xab86,0x13e));var _0x6ab8=function(_0x38d309,_0x17e52d){_0x38d309=_0x38d309-0x0;var _0x2cc9b3=_0xab86[_0x38d309];return _0x2cc9b3;};'use strict';var EventEmitter=require(_0x6ab8('0x0'));var ChatWebsite=require(_0x6ab8('0x1'))['db'][_0x6ab8('0x2')];var ChatWebsiteEvents=new EventEmitter();ChatWebsiteEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0x6ab8('0x3'),'afterDestroy':'remove'};function emitEvent(_0x1193a1){return function(_0x48cb6a,_0xf27ba7,_0x40e2ad){ChatWebsiteEvents[_0x6ab8('0x4')](_0x1193a1+':'+_0x48cb6a['id'],_0x48cb6a);ChatWebsiteEvents[_0x6ab8('0x4')](_0x1193a1,_0x48cb6a);_0x40e2ad(null);};}for(var e in events){if(events[_0x6ab8('0x5')](e)){var event=events[e];ChatWebsite[_0x6ab8('0x6')](e,emitEvent(event));}}module[_0x6ab8('0x7')]=ChatWebsiteEvents;
\ No newline at end of file
+var _0xbe6f=['events','../../mysqldb','setMaxListeners','update','remove','emit','hasOwnProperty','hook','exports'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xbe6f,0x105));var _0xfbe6=function(_0x22a304,_0x1211e3){_0x22a304=_0x22a304-0x0;var _0x2191ac=_0xbe6f[_0x22a304];return _0x2191ac;};'use strict';var EventEmitter=require(_0xfbe6('0x0'));var ChatWebsite=require(_0xfbe6('0x1'))['db']['ChatWebsite'];var ChatWebsiteEvents=new EventEmitter();ChatWebsiteEvents[_0xfbe6('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0xfbe6('0x3'),'afterDestroy':_0xfbe6('0x4')};function emitEvent(_0x10113d){return function(_0x4ce7bb,_0x513e51,_0x56c99c){ChatWebsiteEvents[_0xfbe6('0x5')](_0x10113d+':'+_0x4ce7bb['id'],_0x4ce7bb);ChatWebsiteEvents[_0xfbe6('0x5')](_0x10113d,_0x4ce7bb);_0x56c99c(null);};}for(var e in events){if(events[_0xfbe6('0x6')](e)){var event=events[e];ChatWebsite[_0xfbe6('0x7')](e,emitEvent(event));}}module[_0xfbe6('0x8')]=ChatWebsiteEvents;
\ No newline at end of file
index 8353e86..6863e0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0eaa=['bluebird','./chatWebsite.attributes','exports','define','chat_websites','lodash','util','moment'];(function(_0x1bfcfc,_0x140f5b){var _0x1041ff=function(_0x2d48fc){while(--_0x2d48fc){_0x1bfcfc['push'](_0x1bfcfc['shift']());}};_0x1041ff(++_0x140f5b);}(_0x0eaa,0x1c5));var _0xa0ea=function(_0x4fcf10,_0x2db1c9){_0x4fcf10=_0x4fcf10-0x0;var _0x474d90=_0x0eaa[_0x4fcf10];return _0x474d90;};'use strict';var _=require(_0xa0ea('0x0'));var util=require(_0xa0ea('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xa0ea('0x2'));var BPromise=require(_0xa0ea('0x3'));var rp=require('request-promise');var attributes=require(_0xa0ea('0x4'));module[_0xa0ea('0x5')]=function(_0x30dd52,_0x1404ab){return _0x30dd52[_0xa0ea('0x6')]('ChatWebsite',attributes,{'tableName':_0xa0ea('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xfb3f=['chat_websites','lodash','util','api','request-promise','exports','define','ChatWebsite'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xfb3f,0xd9));var _0xffb3=function(_0x5f50fa,_0x17acea){_0x5f50fa=_0x5f50fa-0x0;var _0x2fe54b=_0xfb3f[_0x5f50fa];return _0x2fe54b;};'use strict';var _=require(_0xffb3('0x0'));var util=require(_0xffb3('0x1'));var logger=require('../../config/logger')(_0xffb3('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xffb3('0x3'));var attributes=require('./chatWebsite.attributes');module[_0xffb3('0x4')]=function(_0x4f28c4,_0xaecfd9){return _0x4f28c4[_0xffb3('0x5')](_0xffb3('0x6'),attributes,{'tableName':_0xffb3('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index cfb422d..7897735 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x99cd=['moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','defaults','socket.io-emitter','redis','./chatWebsite.socket','register','request','then','info','ChatWebsite,\x20%s,\x20%s','debug','ChatWebsite,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash'];(function(_0x46e024,_0x4ccc6c){var _0x2ad2e1=function(_0x572959){while(--_0x572959){_0x46e024['push'](_0x46e024['shift']());}};_0x2ad2e1(++_0x4ccc6c);}(_0x99cd,0x1df));var _0xd99c=function(_0x443fc9,_0x24fc48){_0x443fc9=_0x443fc9-0x0;var _0x13fdb4=_0x99cd[_0x443fc9];return _0x13fdb4;};'use strict';var _=require(_0xd99c('0x0'));var util=require('util');var moment=require(_0xd99c('0x1'));var BPromise=require(_0xd99c('0x2'));var rs=require(_0xd99c('0x3'));var fs=require('fs');var Redis=require(_0xd99c('0x4'));var db=require(_0xd99c('0x5'))['db'];var utils=require(_0xd99c('0x6'));var logger=require(_0xd99c('0x7'))(_0xd99c('0x8'));var config=require(_0xd99c('0x9'));var jayson=require(_0xd99c('0xa'));var client=jayson['client'][_0xd99c('0xb')]({'port':0x232a});config['redis']=_[_0xd99c('0xc')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xd99c('0xd'))(new Redis(config[_0xd99c('0xe')]));require(_0xd99c('0xf'))[_0xd99c('0x10')](socket);function respondWithRpcPromise(_0x27e3cf,_0x25b064,_0x3e593b){return new BPromise(function(_0x475cb9,_0x4ca596){return client[_0xd99c('0x11')](_0x27e3cf,_0x3e593b)[_0xd99c('0x12')](function(_0x317d53){logger[_0xd99c('0x13')](_0xd99c('0x14'),_0x25b064,'request\x20sent');logger[_0xd99c('0x15')](_0xd99c('0x16'),_0x25b064,_0xd99c('0x17'),JSON[_0xd99c('0x18')](_0x317d53));if(_0x317d53[_0xd99c('0x19')]){if(_0x317d53['error'][_0xd99c('0x1a')]===0x1f4){logger[_0xd99c('0x19')](_0xd99c('0x14'),_0x25b064,_0x317d53[_0xd99c('0x19')][_0xd99c('0x1b')]);return _0x4ca596(_0x317d53['error'][_0xd99c('0x1b')]);}logger[_0xd99c('0x19')](_0xd99c('0x14'),_0x25b064,_0x317d53[_0xd99c('0x19')][_0xd99c('0x1b')]);return _0x475cb9(_0x317d53[_0xd99c('0x19')][_0xd99c('0x1b')]);}else{logger[_0xd99c('0x13')]('ChatWebsite,\x20%s,\x20%s',_0x25b064,'request\x20sent');_0x475cb9(_0x317d53[_0xd99c('0x1c')][_0xd99c('0x1b')]);}})[_0xd99c('0x1d')](function(_0x24948d){logger[_0xd99c('0x19')](_0xd99c('0x14'),_0x25b064,_0x24948d);_0x4ca596(_0x24948d);});});}
\ No newline at end of file
+var _0x0a9e=['ChatWebsite,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./chatWebsite.socket','register','then','ChatWebsite,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x1a1dd7,_0x9e586a){var _0x5e5ac6=function(_0x6b7c37){while(--_0x6b7c37){_0x1a1dd7['push'](_0x1a1dd7['shift']());}};_0x5e5ac6(++_0x9e586a);}(_0x0a9e,0x1bb));var _0xe0a9=function(_0x185fbb,_0x1e3fbc){_0x185fbb=_0x185fbb-0x0;var _0x407540=_0x0a9e[_0x185fbb];return _0x407540;};'use strict';var _=require(_0xe0a9('0x0'));var util=require(_0xe0a9('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xe0a9('0x2'));var fs=require('fs');var Redis=require(_0xe0a9('0x3'));var db=require(_0xe0a9('0x4'))['db'];var utils=require(_0xe0a9('0x5'));var logger=require('../../config/logger')(_0xe0a9('0x6'));var config=require(_0xe0a9('0x7'));var jayson=require(_0xe0a9('0x8'));var client=jayson[_0xe0a9('0x9')][_0xe0a9('0xa')]({'port':0x232a});config[_0xe0a9('0xb')]=_[_0xe0a9('0xc')](config[_0xe0a9('0xb')],{'host':_0xe0a9('0xd'),'port':0x18eb});var socket=require(_0xe0a9('0xe'))(new Redis(config[_0xe0a9('0xb')]));require(_0xe0a9('0xf'))[_0xe0a9('0x10')](socket);function respondWithRpcPromise(_0x860ce3,_0x25a51e,_0x3d98e6){return new BPromise(function(_0x23307c,_0x2e7d53){return client['request'](_0x860ce3,_0x3d98e6)[_0xe0a9('0x11')](function(_0x100cff){logger['info'](_0xe0a9('0x12'),_0x25a51e,_0xe0a9('0x13'));logger[_0xe0a9('0x14')](_0xe0a9('0x15'),_0x25a51e,_0xe0a9('0x13'),JSON[_0xe0a9('0x16')](_0x100cff));if(_0x100cff[_0xe0a9('0x17')]){if(_0x100cff[_0xe0a9('0x17')][_0xe0a9('0x18')]===0x1f4){logger[_0xe0a9('0x17')](_0xe0a9('0x12'),_0x25a51e,_0x100cff[_0xe0a9('0x17')][_0xe0a9('0x19')]);return _0x2e7d53(_0x100cff[_0xe0a9('0x17')][_0xe0a9('0x19')]);}logger[_0xe0a9('0x17')](_0xe0a9('0x12'),_0x25a51e,_0x100cff[_0xe0a9('0x17')]['message']);return _0x23307c(_0x100cff[_0xe0a9('0x17')]['message']);}else{logger[_0xe0a9('0x1a')](_0xe0a9('0x12'),_0x25a51e,'request\x20sent');_0x23307c(_0x100cff[_0xe0a9('0x1b')][_0xe0a9('0x19')]);}})[_0xe0a9('0x1c')](function(_0x4f1be2){logger['error'](_0xe0a9('0x12'),_0x25a51e,_0x4f1be2);_0x2e7d53(_0x4f1be2);});});}
\ No newline at end of file
index ed63c9e..0a16701 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf0d9=['./chatWebsite.events','save','remove','emit','removeListener','register'];(function(_0x24392f,_0x15a3e5){var _0x591e33=function(_0xe0ccea){while(--_0xe0ccea){_0x24392f['push'](_0x24392f['shift']());}};_0x591e33(++_0x15a3e5);}(_0xf0d9,0x78));var _0x9f0d=function(_0x34ba22,_0x57c6ee){_0x34ba22=_0x34ba22-0x0;var _0x13ceff=_0xf0d9[_0x34ba22];return _0x13ceff;};'use strict';var ChatWebsiteEvents=require(_0x9f0d('0x0'));var events=[_0x9f0d('0x1'),_0x9f0d('0x2'),'update'];function createListener(_0x97699e,_0x3be06d){return function(_0x2a0844){_0x3be06d[_0x9f0d('0x3')](_0x97699e,_0x2a0844);};}function removeListener(_0x59fc33,_0x2623c5){return function(){ChatWebsiteEvents[_0x9f0d('0x4')](_0x59fc33,_0x2623c5);};}exports[_0x9f0d('0x5')]=function(_0x3a5f24){for(var _0x4f4ab4=0x0,_0x530e47=events['length'];_0x4f4ab4<_0x530e47;_0x4f4ab4++){var _0x59065a=events[_0x4f4ab4];var _0x50f7b6=createListener('chatWebsite:'+_0x59065a,_0x3a5f24);ChatWebsiteEvents['on'](_0x59065a,_0x50f7b6);}};
\ No newline at end of file
+var _0x3d0f=['emit','removeListener','register','chatWebsite:','./chatWebsite.events','save'];(function(_0x59c99d,_0x50f025){var _0x2bbf91=function(_0x227547){while(--_0x227547){_0x59c99d['push'](_0x59c99d['shift']());}};_0x2bbf91(++_0x50f025);}(_0x3d0f,0x1f0));var _0xf3d0=function(_0x4e1a49,_0x4da738){_0x4e1a49=_0x4e1a49-0x0;var _0x136aae=_0x3d0f[_0x4e1a49];return _0x136aae;};'use strict';var ChatWebsiteEvents=require(_0xf3d0('0x0'));var events=[_0xf3d0('0x1'),'remove','update'];function createListener(_0xaad82,_0x2bf0f1){return function(_0x3b1f80){_0x2bf0f1[_0xf3d0('0x2')](_0xaad82,_0x3b1f80);};}function removeListener(_0x40132f,_0x153c83){return function(){ChatWebsiteEvents[_0xf3d0('0x3')](_0x40132f,_0x153c83);};}exports[_0xf3d0('0x4')]=function(_0x4e23aa){for(var _0x554d11=0x0,_0x496d17=events['length'];_0x554d11<_0x496d17;_0x554d11++){var _0x2aee17=events[_0x554d11];var _0x2efa1a=createListener(_0xf3d0('0x5')+_0x2aee17,_0x4e23aa);ChatWebsiteEvents['on'](_0x2aee17,_0x2efa1a);}};
\ No newline at end of file
index 40955e3..3791cd2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0e9f=['express','../../components/interaction/service','get','isAuthenticated','describe','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','/:id/logo','getLogo','/:id/avatar','/:id/customer_avatar','/:id/system_avatar','getSystemAvatar','/:id/interactions','/:id/snippet','/:id/applications','getApplications','/:id/proactive_actions','getProactiveActions','/:id/offline_messages','/:id/users','post','create','addDisposition','addAnswer','join','root','server/files/images/logos/','format','originalname','file','addLogo','server/files/images/avatars/','%s-%s','now','addAvatar','diskStorage','single','addSystemAvatar','/:id/notify','/:id/offline','addInteraction','addApplications','addProactiveActions','put','delete','/:id','destroy','removeAnswers','removeAgents','exports','multer','util'];(function(_0x8c43de,_0x90ff31){var _0xa6591b=function(_0x469716){while(--_0x469716){_0x8c43de['push'](_0x8c43de['shift']());}};_0xa6591b(++_0x90ff31);}(_0x0e9f,0x116));var _0xf0e9=function(_0x42cf74,_0x408682){_0x42cf74=_0x42cf74-0x0;var _0x514b80=_0x0e9f[_0x42cf74];return _0x514b80;};'use strict';var multer=require(_0xf0e9('0x0'));var util=require(_0xf0e9('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xf0e9('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xf0e9('0x3'));var config=require('../../config/environment');var controller=require('./chatWebsite.controller');router[_0xf0e9('0x4')]('/',auth[_0xf0e9('0x5')](),controller['index']);router[_0xf0e9('0x4')]('/describe',auth[_0xf0e9('0x5')](),controller[_0xf0e9('0x6')]);router[_0xf0e9('0x4')]('/:id',auth['isAuthenticated'](),controller[_0xf0e9('0x7')]);router[_0xf0e9('0x4')](_0xf0e9('0x8'),auth['isAuthenticated'](),controller[_0xf0e9('0x9')]);router[_0xf0e9('0x4')](_0xf0e9('0xa'),auth['isAuthenticated'](),controller[_0xf0e9('0xb')]);router[_0xf0e9('0x4')](_0xf0e9('0xc'),controller[_0xf0e9('0xd')]);router['get'](_0xf0e9('0xe'),controller['getAvatar']);router[_0xf0e9('0x4')](_0xf0e9('0xf'),controller['getCustomerAvatar']);router[_0xf0e9('0x4')](_0xf0e9('0x10'),controller[_0xf0e9('0x11')]);router[_0xf0e9('0x4')](_0xf0e9('0x12'),auth[_0xf0e9('0x5')](),controller['getInteractions']);router[_0xf0e9('0x4')](_0xf0e9('0x13'),controller['getSnippet']);router[_0xf0e9('0x4')](_0xf0e9('0x14'),auth[_0xf0e9('0x5')](),controller[_0xf0e9('0x15')]);router['get'](_0xf0e9('0x16'),auth[_0xf0e9('0x5')](),controller[_0xf0e9('0x17')]);router[_0xf0e9('0x4')]('/:id/fields',controller['getFields']);router[_0xf0e9('0x4')](_0xf0e9('0x18'),auth[_0xf0e9('0x5')](),controller['getOfflineMessages']);router['get'](_0xf0e9('0x19'),auth[_0xf0e9('0x5')](),controller['getAgents']);router[_0xf0e9('0x1a')]('/',auth['isAuthenticated'](),controller[_0xf0e9('0x1b')]);router[_0xf0e9('0x1a')]('/:id/dispositions',auth['isAuthenticated'](),controller[_0xf0e9('0x1c')]);router[_0xf0e9('0x1a')]('/:id/canned_answers',auth[_0xf0e9('0x5')](),controller[_0xf0e9('0x1d')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x2f44ee,_0x2a31fc,_0x4c0d73){_0x4c0d73(null,path[_0xf0e9('0x1e')](config[_0xf0e9('0x1f')],_0xf0e9('0x20')));},'filename':function(_0x3a74fe,_0x33048a,_0x25eacb){_0x25eacb(null,util[_0xf0e9('0x21')]('%s-%s',Date['now'](),_0x33048a[_0xf0e9('0x22')]));}})});router['post']('/:id/logo',upload['single'](_0xf0e9('0x23')),controller[_0xf0e9('0x24')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x258927,_0xc4501a,_0x453195){_0x453195(null,path['join'](config[_0xf0e9('0x1f')],_0xf0e9('0x25')));},'filename':function(_0x439072,_0x187e71,_0x435252){_0x435252(null,util[_0xf0e9('0x21')](_0xf0e9('0x26'),Date[_0xf0e9('0x27')](),_0x187e71['originalname']));}})});router[_0xf0e9('0x1a')](_0xf0e9('0xe'),upload['single']('file'),controller[_0xf0e9('0x28')]);var upload=multer({'storage':multer[_0xf0e9('0x29')]({'destination':function(_0x5c365b,_0x35402d,_0x10ae6c){_0x10ae6c(null,path[_0xf0e9('0x1e')](config[_0xf0e9('0x1f')],_0xf0e9('0x25')));},'filename':function(_0x3ab6b9,_0x2009ba,_0x11812e){_0x11812e(null,util['format'](_0xf0e9('0x26'),Date[_0xf0e9('0x27')](),_0x2009ba['originalname']));}})});router[_0xf0e9('0x1a')]('/:id/customer_avatar',upload[_0xf0e9('0x2a')]('file'),controller['addCustomerAvatar']);var upload=multer({'storage':multer[_0xf0e9('0x29')]({'destination':function(_0x274bbb,_0x31199e,_0x4661bc){_0x4661bc(null,path[_0xf0e9('0x1e')](config[_0xf0e9('0x1f')],'server/files/images/avatars/'));},'filename':function(_0x233132,_0x5526b9,_0x1d35f1){_0x1d35f1(null,util['format'](_0xf0e9('0x26'),Date[_0xf0e9('0x27')](),_0x5526b9[_0xf0e9('0x22')]));}})});router[_0xf0e9('0x1a')](_0xf0e9('0x10'),upload[_0xf0e9('0x2a')](_0xf0e9('0x23')),controller[_0xf0e9('0x2b')]);router[_0xf0e9('0x1a')](_0xf0e9('0x2c'),controller['notify']);router[_0xf0e9('0x1a')](_0xf0e9('0x2d'),controller['offline']);router[_0xf0e9('0x1a')](_0xf0e9('0x12'),auth[_0xf0e9('0x5')](),controller[_0xf0e9('0x2e')]);router[_0xf0e9('0x1a')]('/:id/applications',auth[_0xf0e9('0x5')](),controller[_0xf0e9('0x2f')]);router['post'](_0xf0e9('0x16'),auth['isAuthenticated'](),controller[_0xf0e9('0x30')]);router['post'](_0xf0e9('0x19'),auth[_0xf0e9('0x5')](),controller['addAgents']);router[_0xf0e9('0x31')]('/:id',auth['isAuthenticated'](),controller['update']);router[_0xf0e9('0x32')](_0xf0e9('0x33'),auth[_0xf0e9('0x5')](),controller[_0xf0e9('0x34')]);router['delete'](_0xf0e9('0x8'),auth[_0xf0e9('0x5')](),controller['removeDispositions']);router['delete'](_0xf0e9('0xa'),auth[_0xf0e9('0x5')](),controller[_0xf0e9('0x35')]);router[_0xf0e9('0x32')](_0xf0e9('0x19'),auth['isAuthenticated'](),controller[_0xf0e9('0x36')]);module[_0xf0e9('0x37')]=router;
\ No newline at end of file
+var _0xcb18=['/:id/avatar','getAvatar','/:id/customer_avatar','getSystemAvatar','/:id/interactions','getInteractions','getSnippet','getApplications','/:id/proactive_actions','getProactiveActions','/:id/offline_messages','getOfflineMessages','/:id/users','post','create','addDisposition','addAnswer','join','server/files/images/logos/','format','now','originalname','/:id/logo','single','file','addLogo','diskStorage','root','server/files/images/avatars/','%s-%s','addCustomerAvatar','/:id/system_avatar','addSystemAvatar','/:id/notify','/:id/offline','offline','addInteraction','addApplications','addProactiveActions','put','update','delete','destroy','removeAnswers','removeAgents','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./chatWebsite.controller','get','isAuthenticated','/describe','describe','/:id','/:id/dispositions','getDispositions','getAnswers','getLogo'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xcb18,0x159));var _0x8cb1=function(_0x2df396,_0xde798c){_0x2df396=_0x2df396-0x0;var _0x5e9d96=_0xcb18[_0x2df396];return _0x5e9d96;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x8cb1('0x0'));var timeout=require('connect-timeout');var express=require(_0x8cb1('0x1'));var router=express['Router']();var auth=require(_0x8cb1('0x2'));var interaction=require(_0x8cb1('0x3'));var config=require(_0x8cb1('0x4'));var controller=require(_0x8cb1('0x5'));router[_0x8cb1('0x6')]('/',auth[_0x8cb1('0x7')](),controller['index']);router[_0x8cb1('0x6')](_0x8cb1('0x8'),auth['isAuthenticated'](),controller[_0x8cb1('0x9')]);router['get'](_0x8cb1('0xa'),auth[_0x8cb1('0x7')](),controller['show']);router[_0x8cb1('0x6')](_0x8cb1('0xb'),auth[_0x8cb1('0x7')](),controller[_0x8cb1('0xc')]);router[_0x8cb1('0x6')]('/:id/canned_answers',auth[_0x8cb1('0x7')](),controller[_0x8cb1('0xd')]);router[_0x8cb1('0x6')]('/:id/logo',controller[_0x8cb1('0xe')]);router[_0x8cb1('0x6')](_0x8cb1('0xf'),controller[_0x8cb1('0x10')]);router[_0x8cb1('0x6')](_0x8cb1('0x11'),controller['getCustomerAvatar']);router[_0x8cb1('0x6')]('/:id/system_avatar',controller[_0x8cb1('0x12')]);router[_0x8cb1('0x6')](_0x8cb1('0x13'),auth[_0x8cb1('0x7')](),controller[_0x8cb1('0x14')]);router[_0x8cb1('0x6')]('/:id/snippet',controller[_0x8cb1('0x15')]);router['get']('/:id/applications',auth['isAuthenticated'](),controller[_0x8cb1('0x16')]);router[_0x8cb1('0x6')](_0x8cb1('0x17'),auth['isAuthenticated'](),controller[_0x8cb1('0x18')]);router[_0x8cb1('0x6')]('/:id/fields',controller['getFields']);router['get'](_0x8cb1('0x19'),auth['isAuthenticated'](),controller[_0x8cb1('0x1a')]);router[_0x8cb1('0x6')](_0x8cb1('0x1b'),auth[_0x8cb1('0x7')](),controller['getAgents']);router[_0x8cb1('0x1c')]('/',auth['isAuthenticated'](),controller[_0x8cb1('0x1d')]);router[_0x8cb1('0x1c')](_0x8cb1('0xb'),auth['isAuthenticated'](),controller[_0x8cb1('0x1e')]);router['post']('/:id/canned_answers',auth['isAuthenticated'](),controller[_0x8cb1('0x1f')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x19886c,_0x22eb2d,_0x391653){_0x391653(null,path[_0x8cb1('0x20')](config['root'],_0x8cb1('0x21')));},'filename':function(_0x3f597a,_0x500106,_0x548707){_0x548707(null,util[_0x8cb1('0x22')]('%s-%s',Date[_0x8cb1('0x23')](),_0x500106[_0x8cb1('0x24')]));}})});router[_0x8cb1('0x1c')](_0x8cb1('0x25'),upload[_0x8cb1('0x26')](_0x8cb1('0x27')),controller[_0x8cb1('0x28')]);var upload=multer({'storage':multer[_0x8cb1('0x29')]({'destination':function(_0x26f399,_0x4255f4,_0x41bb77){_0x41bb77(null,path['join'](config[_0x8cb1('0x2a')],_0x8cb1('0x2b')));},'filename':function(_0x458759,_0x324b25,_0x2325f2){_0x2325f2(null,util[_0x8cb1('0x22')]('%s-%s',Date[_0x8cb1('0x23')](),_0x324b25[_0x8cb1('0x24')]));}})});router[_0x8cb1('0x1c')]('/:id/avatar',upload[_0x8cb1('0x26')](_0x8cb1('0x27')),controller['addAvatar']);var upload=multer({'storage':multer[_0x8cb1('0x29')]({'destination':function(_0x42b56e,_0x15faa6,_0x111d7f){_0x111d7f(null,path[_0x8cb1('0x20')](config[_0x8cb1('0x2a')],'server/files/images/avatars/'));},'filename':function(_0x1034b4,_0x286089,_0x421c21){_0x421c21(null,util['format'](_0x8cb1('0x2c'),Date[_0x8cb1('0x23')](),_0x286089[_0x8cb1('0x24')]));}})});router[_0x8cb1('0x1c')]('/:id/customer_avatar',upload[_0x8cb1('0x26')](_0x8cb1('0x27')),controller[_0x8cb1('0x2d')]);var upload=multer({'storage':multer[_0x8cb1('0x29')]({'destination':function(_0x136450,_0x15823d,_0xbb61fa){_0xbb61fa(null,path[_0x8cb1('0x20')](config['root'],_0x8cb1('0x2b')));},'filename':function(_0x34ef71,_0x525836,_0xd0d0c){_0xd0d0c(null,util['format'](_0x8cb1('0x2c'),Date[_0x8cb1('0x23')](),_0x525836['originalname']));}})});router['post'](_0x8cb1('0x2e'),upload[_0x8cb1('0x26')](_0x8cb1('0x27')),controller[_0x8cb1('0x2f')]);router[_0x8cb1('0x1c')](_0x8cb1('0x30'),controller['notify']);router[_0x8cb1('0x1c')](_0x8cb1('0x31'),controller[_0x8cb1('0x32')]);router[_0x8cb1('0x1c')]('/:id/interactions',auth[_0x8cb1('0x7')](),controller[_0x8cb1('0x33')]);router[_0x8cb1('0x1c')]('/:id/applications',auth[_0x8cb1('0x7')](),controller[_0x8cb1('0x34')]);router['post'](_0x8cb1('0x17'),auth['isAuthenticated'](),controller[_0x8cb1('0x35')]);router[_0x8cb1('0x1c')]('/:id/users',auth[_0x8cb1('0x7')](),controller['addAgents']);router[_0x8cb1('0x36')]('/:id',auth['isAuthenticated'](),controller[_0x8cb1('0x37')]);router[_0x8cb1('0x38')]('/:id',auth[_0x8cb1('0x7')](),controller[_0x8cb1('0x39')]);router[_0x8cb1('0x38')]('/:id/dispositions',auth['isAuthenticated'](),controller['removeDispositions']);router[_0x8cb1('0x38')]('/:id/canned_answers',auth[_0x8cb1('0x7')](),controller[_0x8cb1('0x3a')]);router[_0x8cb1('0x38')](_0x8cb1('0x1b'),auth[_0x8cb1('0x7')](),controller[_0x8cb1('0x3b')]);module['exports']=router;
\ No newline at end of file
index 3687ec5..f425fdc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe484=['name','STRING'];(function(_0x3dd9f6,_0x377c9b){var _0x4a4c41=function(_0x4a92a8){while(--_0x4a92a8){_0x3dd9f6['push'](_0x3dd9f6['shift']());}};_0x4a4c41(++_0x377c9b);}(_0xe484,0x116));var _0x4e48=function(_0x22f893,_0x2dc74a){_0x22f893=_0x22f893-0x0;var _0x5c3c60=_0xe484[_0x22f893];return _0x5c3c60;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize['STRING'],'unique':_0x4e48('0x0'),'allowNull':![],'validate':{'notEmpty':!![]}},'vat':{'type':Sequelize[_0x4e48('0x1')]},'companyId':{'type':Sequelize[_0x4e48('0x1')]},'website':{'type':Sequelize[_0x4e48('0x1')]},'phone':{'type':Sequelize[_0x4e48('0x1')]},'fax':{'type':Sequelize[_0x4e48('0x1')]},'type':{'type':Sequelize[_0x4e48('0x1')]},'street':{'type':Sequelize[_0x4e48('0x1')]},'postalCode':{'type':Sequelize['STRING']},'city':{'type':Sequelize[_0x4e48('0x1')]},'country':{'type':Sequelize['STRING']},'email':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]}},'emailDomain':{'type':Sequelize[_0x4e48('0x1')]},'sStreet':{'type':Sequelize['STRING']},'sPostalCode':{'type':Sequelize[_0x4e48('0x1')]},'sCity':{'type':Sequelize['STRING']},'sCountry':{'type':Sequelize[_0x4e48('0x1')]},'description':{'type':Sequelize[_0x4e48('0x1')]}};
\ No newline at end of file
+var _0xd203=['exports','STRING'];(function(_0x2f9467,_0x40576f){var _0x39894c=function(_0x13e344){while(--_0x13e344){_0x2f9467['push'](_0x2f9467['shift']());}};_0x39894c(++_0x40576f);}(_0xd203,0x8a));var _0x3d20=function(_0x2bad3a,_0xf514a4){_0x2bad3a=_0x2bad3a-0x0;var _0x2dcc80=_0xd203[_0x2bad3a];return _0x2dcc80;};'use strict';var Sequelize=require('sequelize');module[_0x3d20('0x0')]={'name':{'type':Sequelize['STRING'],'unique':'name','allowNull':![],'validate':{'notEmpty':!![]}},'vat':{'type':Sequelize[_0x3d20('0x1')]},'companyId':{'type':Sequelize['STRING']},'website':{'type':Sequelize['STRING']},'phone':{'type':Sequelize['STRING']},'fax':{'type':Sequelize[_0x3d20('0x1')]},'type':{'type':Sequelize[_0x3d20('0x1')]},'street':{'type':Sequelize['STRING']},'postalCode':{'type':Sequelize[_0x3d20('0x1')]},'city':{'type':Sequelize[_0x3d20('0x1')]},'country':{'type':Sequelize[_0x3d20('0x1')]},'email':{'type':Sequelize[_0x3d20('0x1')],'validate':{'isEmail':!![]}},'emailDomain':{'type':Sequelize[_0x3d20('0x1')]},'sStreet':{'type':Sequelize[_0x3d20('0x1')]},'sPostalCode':{'type':Sequelize[_0x3d20('0x1')]},'sCity':{'type':Sequelize[_0x3d20('0x1')]},'sCountry':{'type':Sequelize[_0x3d20('0x1')]},'description':{'type':Sequelize[_0x3d20('0x1')]}};
\ No newline at end of file
index d9a40c0..d80cd9f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeae8=['map','type','key','field','merge','count','includeAll','include','rows','show','params','length','options','catch','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','find','userProfileId','autoAssociation','addContacts','CmContact','omit','ids','findOne','getContacts','hasOwnProperty','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','sox','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','ioredis','../../config/utils','../../config/environment','../../mysqldb','status','end','json','offset','limit','set','Content-Range','apply','reject','save','then','destroy','get','Companies','UserProfileResource','error','stack','name','send','index','CmCompany','rawAttributes','model','keys','query','filters','intersection','attributes','fields','nolimit','order','sort','pick','filter','where'];(function(_0x34c1ac,_0x571dfe){var _0x16e2c1=function(_0x135b63){while(--_0x135b63){_0x34c1ac['push'](_0x34c1ac['shift']());}};_0x16e2c1(++_0x571dfe);}(_0xeae8,0x172));var _0x8eae=function(_0x10adbe,_0x2d8a12){_0x10adbe=_0x10adbe-0x0;var _0x51c463=_0xeae8[_0x10adbe];return _0x51c463;};'use strict';var pdf=require(_0x8eae('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x8eae('0x1'));var zipdir=require(_0x8eae('0x2'));var jsonpatch=require(_0x8eae('0x3'));var rp=require(_0x8eae('0x4'));var moment=require('moment');var BPromise=require(_0x8eae('0x5'));var Mustache=require(_0x8eae('0x6'));var util=require('util');var path=require('path');var sox=require(_0x8eae('0x7'));var csv=require(_0x8eae('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x8eae('0x9'));var squel=require(_0x8eae('0xa'));var crypto=require(_0x8eae('0xb'));var jsforce=require(_0x8eae('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x8eae('0xd'));var Papa=require(_0x8eae('0xe'));var authService=require(_0x8eae('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x8eae('0x10'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')('api');var utils=require(_0x8eae('0x11'));var config=require(_0x8eae('0x12'));var db=require(_0x8eae('0x13'))['db'];function respondWithStatusCode(_0x1f226f,_0x3927b3){_0x3927b3=_0x3927b3||0xcc;return function(_0x35bad7){if(_0x35bad7){return _0x1f226f['sendStatus'](_0x3927b3);}return _0x1f226f[_0x8eae('0x14')](_0x3927b3)[_0x8eae('0x15')]();};}function respondWithResult(_0x53a710,_0x548e78){_0x548e78=_0x548e78||0xc8;return function(_0x53ab82){if(_0x53ab82){return _0x53a710[_0x8eae('0x14')](_0x548e78)[_0x8eae('0x16')](_0x53ab82);}};}function respondWithFilteredResult(_0x406106,_0x16bee3){return function(_0x4b8246){if(_0x4b8246){var _0x58b5ff=_0x4b8246['count'],_0x187f1e=_0x16bee3[_0x8eae('0x17')],_0x2bd16e=_0x16bee3[_0x8eae('0x17')]+_0x16bee3[_0x8eae('0x18')],_0x8ab28a;if(_0x2bd16e>=_0x58b5ff){_0x2bd16e=_0x58b5ff;_0x8ab28a=0xc8;}else{_0x8ab28a=0xce;}_0x406106['status'](_0x8ab28a);return _0x406106[_0x8eae('0x19')](_0x8eae('0x1a'),_0x187f1e+'-'+_0x2bd16e+'/'+_0x58b5ff)[_0x8eae('0x16')](_0x4b8246);}return null;};}function patchUpdates(_0x1bec79){return function(_0x1a4b06){try{jsonpatch[_0x8eae('0x1b')](_0x1a4b06,_0x1bec79,!![]);}catch(_0x1053d6){return BPromise[_0x8eae('0x1c')](_0x1053d6);}return _0x1a4b06[_0x8eae('0x1d')]();};}function saveUpdates(_0x26a935,_0x10b9d7){return function(_0x5e0b83){if(_0x5e0b83){return _0x5e0b83['update'](_0x26a935)[_0x8eae('0x1e')](function(_0x456431){return _0x456431;});}return null;};}function removeEntity(_0x597e7b,_0x9f496d){return function(_0x26b492){if(_0x26b492){return _0x26b492[_0x8eae('0x1f')]()[_0x8eae('0x1e')](function(){var _0x4ed80e=_0x26b492[_0x8eae('0x20')]({'plain':!![]});var _0x2fbb8b=_0x8eae('0x21');return db[_0x8eae('0x22')][_0x8eae('0x1f')]({'where':{'type':_0x2fbb8b,'resourceId':_0x4ed80e['id']}})[_0x8eae('0x1e')](function(){return _0x26b492;});})[_0x8eae('0x1e')](function(){_0x597e7b[_0x8eae('0x14')](0xcc)[_0x8eae('0x15')]();});}};}function handleEntityNotFound(_0x518298,_0x1c425d){return function(_0x251df8){if(!_0x251df8){_0x518298['sendStatus'](0x194);}return _0x251df8;};}function handleError(_0x447753,_0x5e6348){_0x5e6348=_0x5e6348||0x1f4;return function(_0x877de4){logger[_0x8eae('0x23')](_0x877de4[_0x8eae('0x24')]);if(_0x877de4['name']){delete _0x877de4[_0x8eae('0x25')];}_0x447753[_0x8eae('0x14')](_0x5e6348)[_0x8eae('0x26')](_0x877de4);};}exports[_0x8eae('0x27')]=function(_0x22ff49,_0x464d8b){var _0x185fb7={},_0x2d392b={},_0x1bc425={'count':0x0,'rows':[]};var _0x18d73c=db[_0x8eae('0x28')][_0x8eae('0x29')];_0x2d392b[_0x8eae('0x2a')]=_[_0x8eae('0x2b')](_0x18d73c);_0x2d392b[_0x8eae('0x2c')]=_[_0x8eae('0x2b')](_0x22ff49[_0x8eae('0x2c')]);_0x2d392b[_0x8eae('0x2d')]=_[_0x8eae('0x2e')](_0x2d392b[_0x8eae('0x2a')],_0x2d392b['query']);_0x185fb7[_0x8eae('0x2f')]=_['intersection'](_0x2d392b[_0x8eae('0x2a')],qs[_0x8eae('0x30')](_0x22ff49['query'][_0x8eae('0x30')]));_0x185fb7[_0x8eae('0x2f')]=_0x185fb7[_0x8eae('0x2f')]['length']?_0x185fb7[_0x8eae('0x2f')]:_0x2d392b[_0x8eae('0x2a')];if(!_0x22ff49[_0x8eae('0x2c')]['hasOwnProperty'](_0x8eae('0x31'))){_0x185fb7[_0x8eae('0x18')]=qs[_0x8eae('0x18')](_0x22ff49[_0x8eae('0x2c')]['limit']);_0x185fb7[_0x8eae('0x17')]=qs[_0x8eae('0x17')](_0x22ff49['query'][_0x8eae('0x17')]);}_0x185fb7[_0x8eae('0x32')]=qs[_0x8eae('0x33')](_0x22ff49[_0x8eae('0x2c')]['sort']);_0x185fb7['where']=qs[_0x8eae('0x2d')](_[_0x8eae('0x34')](_0x22ff49['query'],_0x2d392b['filters']));if(_0x22ff49[_0x8eae('0x2c')][_0x8eae('0x35')]){_0x185fb7[_0x8eae('0x36')]=_['merge'](_0x185fb7[_0x8eae('0x36')],{'$or':_[_0x8eae('0x37')](_0x18d73c,function(_0xd72663){if(_0xd72663[_0x8eae('0x38')][_0x8eae('0x39')]!=='VIRTUAL'){var _0x421ee6={};_0x421ee6[_0xd72663[_0x8eae('0x3a')]]={'$like':'%'+_0x22ff49['query']['filter']+'%'};return _0x421ee6;}})});}_0x185fb7=_[_0x8eae('0x3b')]({},_0x185fb7,_0x22ff49['options']);var _0x2427e7={'where':_0x185fb7[_0x8eae('0x36')]};return db[_0x8eae('0x28')][_0x8eae('0x3c')](_0x2427e7)['then'](function(_0x17ed74){_0x1bc425['count']=_0x17ed74;if(_0x22ff49['query'][_0x8eae('0x3d')]){_0x185fb7[_0x8eae('0x3e')]=[{'all':!![]}];}return db[_0x8eae('0x28')]['findAll'](_0x185fb7);})[_0x8eae('0x1e')](function(_0x354d36){_0x1bc425[_0x8eae('0x3f')]=_0x354d36;return _0x1bc425;})[_0x8eae('0x1e')](respondWithFilteredResult(_0x464d8b,_0x185fb7))['catch'](handleError(_0x464d8b,null));};exports[_0x8eae('0x40')]=function(_0x33058a,_0x46f022){var _0x4a98a9={'raw':![],'where':{'id':_0x33058a[_0x8eae('0x41')]['id']}},_0xa44e70={};_0xa44e70[_0x8eae('0x2a')]=_[_0x8eae('0x2b')](db['CmCompany'][_0x8eae('0x29')]);_0xa44e70['query']=_[_0x8eae('0x2b')](_0x33058a[_0x8eae('0x2c')]);_0xa44e70[_0x8eae('0x2d')]=_['intersection'](_0xa44e70[_0x8eae('0x2a')],_0xa44e70[_0x8eae('0x2c')]);_0x4a98a9[_0x8eae('0x2f')]=_[_0x8eae('0x2e')](_0xa44e70[_0x8eae('0x2a')],qs[_0x8eae('0x30')](_0x33058a['query']['fields']));_0x4a98a9['attributes']=_0x4a98a9[_0x8eae('0x2f')][_0x8eae('0x42')]?_0x4a98a9[_0x8eae('0x2f')]:_0xa44e70[_0x8eae('0x2a')];if(_0x33058a['query'][_0x8eae('0x3d')]){_0x4a98a9[_0x8eae('0x3e')]=[{'all':!![]}];}_0x4a98a9=_['merge']({},_0x4a98a9,_0x33058a[_0x8eae('0x43')]);return db[_0x8eae('0x28')]['find'](_0x4a98a9)[_0x8eae('0x1e')](handleEntityNotFound(_0x46f022,null))[_0x8eae('0x1e')](respondWithResult(_0x46f022,null))[_0x8eae('0x44')](handleError(_0x46f022,null));};exports[_0x8eae('0x45')]=function(_0x20ca9b,_0x4621ca){return db[_0x8eae('0x28')][_0x8eae('0x45')](_0x20ca9b[_0x8eae('0x46')],{})[_0x8eae('0x1e')](function(_0x433729){var _0x21f903=_0x20ca9b['user']['get']({'plain':!![]});if(!_0x21f903)throw new Error(_0x8eae('0x47'));if(_0x21f903[_0x8eae('0x48')]===_0x8eae('0x49')){var _0x55a3f7=_0x433729['get']({'plain':!![]});var _0x49d595=_0x8eae('0x21');return db[_0x8eae('0x4a')][_0x8eae('0x4b')]({'where':{'name':_0x49d595,'userProfileId':_0x21f903[_0x8eae('0x4c')]},'raw':!![]})[_0x8eae('0x1e')](function(_0x2001bf){if(_0x2001bf&&_0x2001bf[_0x8eae('0x4d')]===0x0){return db[_0x8eae('0x22')][_0x8eae('0x45')]({'name':_0x55a3f7[_0x8eae('0x25')],'resourceId':_0x55a3f7['id'],'type':_0x2001bf[_0x8eae('0x25')],'sectionId':_0x2001bf['id']},{})[_0x8eae('0x1e')](function(){return _0x433729;});}else{return _0x433729;}})['catch'](function(_0x26f28c){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x26f28c);throw _0x26f28c;});}return _0x433729;})['then'](respondWithResult(_0x4621ca,0xc9))[_0x8eae('0x44')](handleError(_0x4621ca,null));};exports['update']=function(_0x488ba7,_0x1d3ab7){if(_0x488ba7[_0x8eae('0x46')]['id']){delete _0x488ba7['body']['id'];}return db[_0x8eae('0x28')][_0x8eae('0x4b')]({'where':{'id':_0x488ba7[_0x8eae('0x41')]['id']}})[_0x8eae('0x1e')](handleEntityNotFound(_0x1d3ab7,null))[_0x8eae('0x1e')](saveUpdates(_0x488ba7['body'],null))[_0x8eae('0x1e')](respondWithResult(_0x1d3ab7,null))['catch'](handleError(_0x1d3ab7,null));};exports[_0x8eae('0x1f')]=function(_0xc0df9b,_0x1a5d75){return db[_0x8eae('0x28')][_0x8eae('0x4b')]({'where':{'id':_0xc0df9b[_0x8eae('0x41')]['id']}})[_0x8eae('0x1e')](handleEntityNotFound(_0x1a5d75,null))[_0x8eae('0x1e')](removeEntity(_0x1a5d75,null))['catch'](handleError(_0x1a5d75,null));};exports[_0x8eae('0x4e')]=function(_0x5c992d,_0x51d47d,_0x13aa51){return db[_0x8eae('0x4f')][_0x8eae('0x4b')]({'where':{'id':_0x5c992d['params']['id']}})['then'](handleEntityNotFound(_0x51d47d,null))[_0x8eae('0x1e')](function(_0x3263d6){if(_0x3263d6){return _0x3263d6[_0x8eae('0x4e')](_0x5c992d[_0x8eae('0x46')]['ids'],_[_0x8eae('0x50')](_0x5c992d[_0x8eae('0x46')],[_0x8eae('0x51'),'id'])||{});}})[_0x8eae('0x1e')](respondWithResult(_0x51d47d,null))[_0x8eae('0x44')](handleError(_0x51d47d,null));};exports['getContacts']=function(_0x29db6f,_0x394b59,_0x4de8ea){var _0x28bce4={};var _0x46b87f={};var _0x5595d7;var _0x4b7d30;return db[_0x8eae('0x28')][_0x8eae('0x52')]({'where':{'id':_0x29db6f[_0x8eae('0x41')]['id']}})[_0x8eae('0x1e')](handleEntityNotFound(_0x394b59,null))['then'](function(_0x9a7083){if(_0x9a7083){_0x5595d7=_0x9a7083;_0x46b87f[_0x8eae('0x2a')]=_['keys'](db[_0x8eae('0x4f')][_0x8eae('0x29')]);_0x46b87f[_0x8eae('0x2c')]=_[_0x8eae('0x2b')](_0x29db6f['query']);_0x46b87f[_0x8eae('0x2d')]=_[_0x8eae('0x2e')](_0x46b87f[_0x8eae('0x2a')],_0x46b87f['query']);_0x28bce4[_0x8eae('0x2f')]=_[_0x8eae('0x2e')](_0x46b87f[_0x8eae('0x2a')],qs[_0x8eae('0x30')](_0x29db6f['query']['fields']));_0x28bce4[_0x8eae('0x2f')]=_0x28bce4[_0x8eae('0x2f')][_0x8eae('0x42')]?_0x28bce4[_0x8eae('0x2f')]:_0x46b87f['model'];_0x28bce4['order']=qs[_0x8eae('0x33')](_0x29db6f[_0x8eae('0x2c')][_0x8eae('0x33')]);_0x28bce4[_0x8eae('0x36')]=qs[_0x8eae('0x2d')](_[_0x8eae('0x34')](_0x29db6f[_0x8eae('0x2c')],_0x46b87f['filters']));if(_0x29db6f[_0x8eae('0x2c')][_0x8eae('0x35')]){_0x28bce4[_0x8eae('0x36')]=_[_0x8eae('0x3b')](_0x28bce4[_0x8eae('0x36')],{'$or':_[_0x8eae('0x37')](_0x28bce4[_0x8eae('0x2f')],function(_0x1e5c11){var _0x3a69fb={};_0x3a69fb[_0x1e5c11]={'$like':'%'+_0x29db6f[_0x8eae('0x2c')][_0x8eae('0x35')]+'%'};return _0x3a69fb;})});}_0x28bce4=_[_0x8eae('0x3b')]({},_0x28bce4,_0x29db6f['options']);return _0x5595d7[_0x8eae('0x53')](_0x28bce4);}})[_0x8eae('0x1e')](function(_0x1e5b29){if(_0x1e5b29){_0x4b7d30=_0x1e5b29['length'];if(!_0x29db6f[_0x8eae('0x2c')][_0x8eae('0x54')]('nolimit')){_0x28bce4[_0x8eae('0x18')]=qs[_0x8eae('0x18')](_0x29db6f['query'][_0x8eae('0x18')]);_0x28bce4[_0x8eae('0x17')]=qs[_0x8eae('0x17')](_0x29db6f[_0x8eae('0x2c')][_0x8eae('0x17')]);}return _0x5595d7[_0x8eae('0x53')](_0x28bce4);}})[_0x8eae('0x1e')](function(_0x52f070){if(_0x52f070){return _0x52f070?{'count':_0x4b7d30,'rows':_0x52f070}:null;}})['then'](respondWithResult(_0x394b59,null))[_0x8eae('0x44')](handleError(_0x394b59,null));};
\ No newline at end of file
+var _0x2218=['model','keys','query','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','map','key','VIRTUAL','field','options','includeAll','findAll','catch','params','rawAttributes','length','include','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Companies','UserProfileSection','userProfileId','autoAssociation','update','addContacts','CmContact','omit','ids','getContacts','findOne','html-pdf','eml-format','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','then','destroy','get','UserProfileResource','end','stack','name','send','index','CmCompany'];(function(_0x23e02e,_0x4d26cb){var _0x2a6db8=function(_0x46e7af){while(--_0x46e7af){_0x23e02e['push'](_0x23e02e['shift']());}};_0x2a6db8(++_0x4d26cb);}(_0x2218,0xdc));var _0x8221=function(_0x9fb081,_0x48f480){_0x9fb081=_0x9fb081-0x0;var _0x43f8b0=_0x2218[_0x9fb081];return _0x43f8b0;};'use strict';var pdf=require(_0x8221('0x0'));var emlformat=require(_0x8221('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x8221('0x2'));var rp=require(_0x8221('0x3'));var moment=require(_0x8221('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x8221('0x5'));var util=require(_0x8221('0x6'));var path=require(_0x8221('0x7'));var sox=require('sox');var csv=require(_0x8221('0x8'));var ejs=require(_0x8221('0x9'));var fs=require('fs');var _=require(_0x8221('0xa'));var squel=require(_0x8221('0xb'));var crypto=require(_0x8221('0xc'));var jsforce=require(_0x8221('0xd'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x8221('0xe'));var authService=require(_0x8221('0xf'));var hardwareService=require(_0x8221('0x10'));var Redis=require(_0x8221('0x11'));var qs=require(_0x8221('0x12'));var logger=require(_0x8221('0x13'))(_0x8221('0x14'));var utils=require(_0x8221('0x15'));var config=require(_0x8221('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xeb334e,_0x2427d6){_0x2427d6=_0x2427d6||0xcc;return function(_0xc35918){if(_0xc35918){return _0xeb334e[_0x8221('0x17')](_0x2427d6);}return _0xeb334e['status'](_0x2427d6)['end']();};}function respondWithResult(_0x3aa42c,_0x27a4c5){_0x27a4c5=_0x27a4c5||0xc8;return function(_0x36dfc5){if(_0x36dfc5){return _0x3aa42c[_0x8221('0x18')](_0x27a4c5)[_0x8221('0x19')](_0x36dfc5);}};}function respondWithFilteredResult(_0x5a76ef,_0x52a31e){return function(_0x25c274){if(_0x25c274){var _0x576239=_0x25c274[_0x8221('0x1a')],_0x4d596a=_0x52a31e[_0x8221('0x1b')],_0xfd6208=_0x52a31e['offset']+_0x52a31e[_0x8221('0x1c')],_0x3b3bee;if(_0xfd6208>=_0x576239){_0xfd6208=_0x576239;_0x3b3bee=0xc8;}else{_0x3b3bee=0xce;}_0x5a76ef[_0x8221('0x18')](_0x3b3bee);return _0x5a76ef[_0x8221('0x1d')](_0x8221('0x1e'),_0x4d596a+'-'+_0xfd6208+'/'+_0x576239)[_0x8221('0x19')](_0x25c274);}return null;};}function patchUpdates(_0xf5e8f7){return function(_0x34bba8){try{jsonpatch[_0x8221('0x1f')](_0x34bba8,_0xf5e8f7,!![]);}catch(_0x427679){return BPromise[_0x8221('0x20')](_0x427679);}return _0x34bba8[_0x8221('0x21')]();};}function saveUpdates(_0xced835,_0x29d700){return function(_0x4f98f4){if(_0x4f98f4){return _0x4f98f4['update'](_0xced835)[_0x8221('0x22')](function(_0x28d36d){return _0x28d36d;});}return null;};}function removeEntity(_0x546889,_0x59ac0b){return function(_0x2b98f8){if(_0x2b98f8){return _0x2b98f8[_0x8221('0x23')]()[_0x8221('0x22')](function(){var _0x5a812c=_0x2b98f8[_0x8221('0x24')]({'plain':!![]});var _0x44832c='Companies';return db[_0x8221('0x25')][_0x8221('0x23')]({'where':{'type':_0x44832c,'resourceId':_0x5a812c['id']}})['then'](function(){return _0x2b98f8;});})['then'](function(){_0x546889[_0x8221('0x18')](0xcc)[_0x8221('0x26')]();});}};}function handleEntityNotFound(_0x17c9ee,_0x897207){return function(_0x30d32c){if(!_0x30d32c){_0x17c9ee[_0x8221('0x17')](0x194);}return _0x30d32c;};}function handleError(_0x245b48,_0x5ecad7){_0x5ecad7=_0x5ecad7||0x1f4;return function(_0x4b82f1){logger['error'](_0x4b82f1[_0x8221('0x27')]);if(_0x4b82f1[_0x8221('0x28')]){delete _0x4b82f1[_0x8221('0x28')];}_0x245b48[_0x8221('0x18')](_0x5ecad7)[_0x8221('0x29')](_0x4b82f1);};}exports[_0x8221('0x2a')]=function(_0x153c5c,_0x497d11){var _0x485718={},_0x5b1c2e={},_0x20a903={'count':0x0,'rows':[]};var _0x2eee5f=db[_0x8221('0x2b')]['rawAttributes'];_0x5b1c2e[_0x8221('0x2c')]=_[_0x8221('0x2d')](_0x2eee5f);_0x5b1c2e[_0x8221('0x2e')]=_[_0x8221('0x2d')](_0x153c5c[_0x8221('0x2e')]);_0x5b1c2e['filters']=_[_0x8221('0x2f')](_0x5b1c2e['model'],_0x5b1c2e[_0x8221('0x2e')]);_0x485718['attributes']=_[_0x8221('0x2f')](_0x5b1c2e['model'],qs['fields'](_0x153c5c['query'][_0x8221('0x30')]));_0x485718[_0x8221('0x31')]=_0x485718['attributes']['length']?_0x485718[_0x8221('0x31')]:_0x5b1c2e[_0x8221('0x2c')];if(!_0x153c5c[_0x8221('0x2e')][_0x8221('0x32')](_0x8221('0x33'))){_0x485718['limit']=qs[_0x8221('0x1c')](_0x153c5c['query'][_0x8221('0x1c')]);_0x485718[_0x8221('0x1b')]=qs[_0x8221('0x1b')](_0x153c5c[_0x8221('0x2e')][_0x8221('0x1b')]);}_0x485718[_0x8221('0x34')]=qs[_0x8221('0x35')](_0x153c5c[_0x8221('0x2e')][_0x8221('0x35')]);_0x485718[_0x8221('0x36')]=qs[_0x8221('0x37')](_[_0x8221('0x38')](_0x153c5c[_0x8221('0x2e')],_0x5b1c2e[_0x8221('0x37')]));if(_0x153c5c[_0x8221('0x2e')][_0x8221('0x39')]){_0x485718[_0x8221('0x36')]=_[_0x8221('0x3a')](_0x485718['where'],{'$or':_[_0x8221('0x3b')](_0x2eee5f,function(_0x3cb7ca){if(_0x3cb7ca['type'][_0x8221('0x3c')]!==_0x8221('0x3d')){var _0x544f84={};_0x544f84[_0x3cb7ca[_0x8221('0x3e')]]={'$like':'%'+_0x153c5c[_0x8221('0x2e')][_0x8221('0x39')]+'%'};return _0x544f84;}})});}_0x485718=_[_0x8221('0x3a')]({},_0x485718,_0x153c5c[_0x8221('0x3f')]);var _0x24c69d={'where':_0x485718[_0x8221('0x36')]};return db[_0x8221('0x2b')]['count'](_0x24c69d)[_0x8221('0x22')](function(_0x57f13b){_0x20a903['count']=_0x57f13b;if(_0x153c5c[_0x8221('0x2e')][_0x8221('0x40')]){_0x485718['include']=[{'all':!![]}];}return db[_0x8221('0x2b')][_0x8221('0x41')](_0x485718);})[_0x8221('0x22')](function(_0x460669){_0x20a903['rows']=_0x460669;return _0x20a903;})[_0x8221('0x22')](respondWithFilteredResult(_0x497d11,_0x485718))[_0x8221('0x42')](handleError(_0x497d11,null));};exports['show']=function(_0x8d5aa6,_0x56af9e){var _0x24b2a6={'raw':![],'where':{'id':_0x8d5aa6[_0x8221('0x43')]['id']}},_0x35c368={};_0x35c368[_0x8221('0x2c')]=_['keys'](db['CmCompany'][_0x8221('0x44')]);_0x35c368[_0x8221('0x2e')]=_[_0x8221('0x2d')](_0x8d5aa6['query']);_0x35c368['filters']=_['intersection'](_0x35c368[_0x8221('0x2c')],_0x35c368[_0x8221('0x2e')]);_0x24b2a6[_0x8221('0x31')]=_[_0x8221('0x2f')](_0x35c368['model'],qs[_0x8221('0x30')](_0x8d5aa6[_0x8221('0x2e')]['fields']));_0x24b2a6['attributes']=_0x24b2a6[_0x8221('0x31')][_0x8221('0x45')]?_0x24b2a6[_0x8221('0x31')]:_0x35c368['model'];if(_0x8d5aa6[_0x8221('0x2e')][_0x8221('0x40')]){_0x24b2a6[_0x8221('0x46')]=[{'all':!![]}];}_0x24b2a6=_['merge']({},_0x24b2a6,_0x8d5aa6[_0x8221('0x3f')]);return db[_0x8221('0x2b')][_0x8221('0x47')](_0x24b2a6)['then'](handleEntityNotFound(_0x56af9e,null))[_0x8221('0x22')](respondWithResult(_0x56af9e,null))[_0x8221('0x42')](handleError(_0x56af9e,null));};exports[_0x8221('0x48')]=function(_0x3b71cc,_0x1b8bc8){return db['CmCompany'][_0x8221('0x48')](_0x3b71cc[_0x8221('0x49')],{})[_0x8221('0x22')](function(_0x2df540){var _0x6b0299=_0x3b71cc[_0x8221('0x4a')][_0x8221('0x24')]({'plain':!![]});if(!_0x6b0299)throw new Error(_0x8221('0x4b'));if(_0x6b0299[_0x8221('0x4c')]===_0x8221('0x4a')){var _0x352f76=_0x2df540[_0x8221('0x24')]({'plain':!![]});var _0x11c5fd=_0x8221('0x4d');return db[_0x8221('0x4e')][_0x8221('0x47')]({'where':{'name':_0x11c5fd,'userProfileId':_0x6b0299[_0x8221('0x4f')]},'raw':!![]})[_0x8221('0x22')](function(_0xcbcc89){if(_0xcbcc89&&_0xcbcc89[_0x8221('0x50')]===0x0){return db[_0x8221('0x25')]['create']({'name':_0x352f76[_0x8221('0x28')],'resourceId':_0x352f76['id'],'type':_0xcbcc89[_0x8221('0x28')],'sectionId':_0xcbcc89['id']},{})[_0x8221('0x22')](function(){return _0x2df540;});}else{return _0x2df540;}})[_0x8221('0x42')](function(_0x37512b){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x37512b);throw _0x37512b;});}return _0x2df540;})['then'](respondWithResult(_0x1b8bc8,0xc9))[_0x8221('0x42')](handleError(_0x1b8bc8,null));};exports[_0x8221('0x51')]=function(_0x1e970a,_0xd8b340){if(_0x1e970a['body']['id']){delete _0x1e970a[_0x8221('0x49')]['id'];}return db[_0x8221('0x2b')][_0x8221('0x47')]({'where':{'id':_0x1e970a[_0x8221('0x43')]['id']}})[_0x8221('0x22')](handleEntityNotFound(_0xd8b340,null))[_0x8221('0x22')](saveUpdates(_0x1e970a[_0x8221('0x49')],null))[_0x8221('0x22')](respondWithResult(_0xd8b340,null))[_0x8221('0x42')](handleError(_0xd8b340,null));};exports['destroy']=function(_0x424a37,_0x4e861f){return db[_0x8221('0x2b')][_0x8221('0x47')]({'where':{'id':_0x424a37['params']['id']}})['then'](handleEntityNotFound(_0x4e861f,null))['then'](removeEntity(_0x4e861f,null))['catch'](handleError(_0x4e861f,null));};exports[_0x8221('0x52')]=function(_0x1f1a52,_0x5db703,_0x2ec960){return db[_0x8221('0x53')][_0x8221('0x47')]({'where':{'id':_0x1f1a52[_0x8221('0x43')]['id']}})['then'](handleEntityNotFound(_0x5db703,null))[_0x8221('0x22')](function(_0xffd0bc){if(_0xffd0bc){return _0xffd0bc[_0x8221('0x52')](_0x1f1a52['body']['ids'],_[_0x8221('0x54')](_0x1f1a52['body'],[_0x8221('0x55'),'id'])||{});}})[_0x8221('0x22')](respondWithResult(_0x5db703,null))[_0x8221('0x42')](handleError(_0x5db703,null));};exports[_0x8221('0x56')]=function(_0x1e95ac,_0x26d5c7,_0x59528a){var _0x6f13e6={};var _0x214505={};var _0x9ae951;var _0x5e63cf;return db[_0x8221('0x2b')][_0x8221('0x57')]({'where':{'id':_0x1e95ac[_0x8221('0x43')]['id']}})[_0x8221('0x22')](handleEntityNotFound(_0x26d5c7,null))['then'](function(_0x306b68){if(_0x306b68){_0x9ae951=_0x306b68;_0x214505[_0x8221('0x2c')]=_['keys'](db[_0x8221('0x53')][_0x8221('0x44')]);_0x214505[_0x8221('0x2e')]=_['keys'](_0x1e95ac['query']);_0x214505[_0x8221('0x37')]=_[_0x8221('0x2f')](_0x214505['model'],_0x214505[_0x8221('0x2e')]);_0x6f13e6[_0x8221('0x31')]=_[_0x8221('0x2f')](_0x214505[_0x8221('0x2c')],qs[_0x8221('0x30')](_0x1e95ac[_0x8221('0x2e')][_0x8221('0x30')]));_0x6f13e6[_0x8221('0x31')]=_0x6f13e6[_0x8221('0x31')]['length']?_0x6f13e6['attributes']:_0x214505['model'];_0x6f13e6[_0x8221('0x34')]=qs[_0x8221('0x35')](_0x1e95ac[_0x8221('0x2e')][_0x8221('0x35')]);_0x6f13e6[_0x8221('0x36')]=qs[_0x8221('0x37')](_[_0x8221('0x38')](_0x1e95ac['query'],_0x214505['filters']));if(_0x1e95ac[_0x8221('0x2e')][_0x8221('0x39')]){_0x6f13e6[_0x8221('0x36')]=_[_0x8221('0x3a')](_0x6f13e6[_0x8221('0x36')],{'$or':_[_0x8221('0x3b')](_0x6f13e6[_0x8221('0x31')],function(_0x660b32){var _0x527e1e={};_0x527e1e[_0x660b32]={'$like':'%'+_0x1e95ac[_0x8221('0x2e')][_0x8221('0x39')]+'%'};return _0x527e1e;})});}_0x6f13e6=_[_0x8221('0x3a')]({},_0x6f13e6,_0x1e95ac[_0x8221('0x3f')]);return _0x9ae951[_0x8221('0x56')](_0x6f13e6);}})[_0x8221('0x22')](function(_0xee2f6){if(_0xee2f6){_0x5e63cf=_0xee2f6[_0x8221('0x45')];if(!_0x1e95ac['query'][_0x8221('0x32')](_0x8221('0x33'))){_0x6f13e6[_0x8221('0x1c')]=qs[_0x8221('0x1c')](_0x1e95ac[_0x8221('0x2e')]['limit']);_0x6f13e6[_0x8221('0x1b')]=qs[_0x8221('0x1b')](_0x1e95ac['query'][_0x8221('0x1b')]);}return _0x9ae951[_0x8221('0x56')](_0x6f13e6);}})[_0x8221('0x22')](function(_0xdef1a7){if(_0xdef1a7){return _0xdef1a7?{'count':_0x5e63cf,'rows':_0xdef1a7}:null;}})[_0x8221('0x22')](respondWithResult(_0x26d5c7,null))[_0x8221('0x42')](handleError(_0x26d5c7,null));};
\ No newline at end of file
index 4be937f..ec096d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0624=['request-promise','./cmCompany.attributes','exports','CmCompany','cm_companies','moment','bluebird'];(function(_0x40eadc,_0x37af8d){var _0x6963b4=function(_0x4c2c9){while(--_0x4c2c9){_0x40eadc['push'](_0x40eadc['shift']());}};_0x6963b4(++_0x37af8d);}(_0x0624,0x132));var _0x4062=function(_0x2f3091,_0x3b63f0){_0x2f3091=_0x2f3091-0x0;var _0x41e6d0=_0x0624[_0x2f3091];return _0x41e6d0;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0x4062('0x0'));var BPromise=require(_0x4062('0x1'));var rp=require(_0x4062('0x2'));var attributes=require(_0x4062('0x3'));module[_0x4062('0x4')]=function(_0x5d143e,_0x4bb157){return _0x5d143e['define'](_0x4062('0x5'),attributes,{'tableName':_0x4062('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x049e=['CmCompany','cm_companies','lodash','util','api','bluebird','request-promise','./cmCompany.attributes','exports','define'];(function(_0x2c3f37,_0x5a46b6){var _0x12a453=function(_0x506351){while(--_0x506351){_0x2c3f37['push'](_0x2c3f37['shift']());}};_0x12a453(++_0x5a46b6);}(_0x049e,0x16a));var _0xe049=function(_0x4d7f3f,_0x4d2803){_0x4d7f3f=_0x4d7f3f-0x0;var _0x5d67cc=_0x049e[_0x4d7f3f];return _0x5d67cc;};'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 attributes=require(_0xe049('0x5'));module[_0xe049('0x6')]=function(_0x2abd06,_0x50c6dc){return _0x2abd06[_0xe049('0x7')](_0xe049('0x8'),attributes,{'tableName':_0xe049('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 101c1d4..8b3984e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3f0=['message','result','lodash','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','info','request\x20sent','debug','error','CmCompany,\x20%s,\x20%s'];(function(_0x3c4737,_0x2329ec){var _0x2bb926=function(_0x3b9605){while(--_0x3b9605){_0x3c4737['push'](_0x3c4737['shift']());}};_0x2bb926(++_0x2329ec);}(_0xc3f0,0x1de));var _0x0c3f=function(_0x1059d6,_0x453521){_0x1059d6=_0x1059d6-0x0;var _0x48cb63=_0xc3f0[_0x1059d6];return _0x48cb63;};'use strict';var _=require(_0x0c3f('0x0'));var util=require(_0x0c3f('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x0c3f('0x2'));var fs=require('fs');var Redis=require(_0x0c3f('0x3'));var db=require(_0x0c3f('0x4'))['db'];var utils=require(_0x0c3f('0x5'));var logger=require(_0x0c3f('0x6'))('rpc');var config=require(_0x0c3f('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x0c3f('0x8')][_0x0c3f('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x246922,_0x1e1f46,_0x4f7e7c){return new BPromise(function(_0x24cadd,_0x2ddac2){return client['request'](_0x246922,_0x4f7e7c)['then'](function(_0x228eea){logger[_0x0c3f('0xa')]('CmCompany,\x20%s,\x20%s',_0x1e1f46,_0x0c3f('0xb'));logger[_0x0c3f('0xc')]('CmCompany,\x20%s,\x20%s,\x20%s',_0x1e1f46,_0x0c3f('0xb'),JSON['stringify'](_0x228eea));if(_0x228eea[_0x0c3f('0xd')]){if(_0x228eea['error']['code']===0x1f4){logger[_0x0c3f('0xd')](_0x0c3f('0xe'),_0x1e1f46,_0x228eea['error']['message']);return _0x2ddac2(_0x228eea[_0x0c3f('0xd')]['message']);}logger[_0x0c3f('0xd')](_0x0c3f('0xe'),_0x1e1f46,_0x228eea[_0x0c3f('0xd')][_0x0c3f('0xf')]);return _0x24cadd(_0x228eea[_0x0c3f('0xd')][_0x0c3f('0xf')]);}else{logger[_0x0c3f('0xa')](_0x0c3f('0xe'),_0x1e1f46,_0x0c3f('0xb'));_0x24cadd(_0x228eea[_0x0c3f('0x10')][_0x0c3f('0xf')]);}})['catch'](function(_0x3f40be){logger[_0x0c3f('0xd')](_0x0c3f('0xe'),_0x1e1f46,_0x3f40be);_0x2ddac2(_0x3f40be);});});}
\ No newline at end of file
+var _0x53c7=['debug','stringify','error','message','info','result','catch','util','bluebird','randomstring','../../mysqldb','rpc','../../config/environment','client','http','CmCompany,\x20%s,\x20%s','request\x20sent'];(function(_0x4ccc94,_0x25ff4c){var _0x480fdf=function(_0x2b8629){while(--_0x2b8629){_0x4ccc94['push'](_0x4ccc94['shift']());}};_0x480fdf(++_0x25ff4c);}(_0x53c7,0x1d2));var _0x753c=function(_0x344008,_0x39d282){_0x344008=_0x344008-0x0;var _0x5a5bc1=_0x53c7[_0x344008];return _0x5a5bc1;};'use strict';var _=require('lodash');var util=require(_0x753c('0x0'));var moment=require('moment');var BPromise=require(_0x753c('0x1'));var rs=require(_0x753c('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x753c('0x3'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x753c('0x4'));var config=require(_0x753c('0x5'));var jayson=require('jayson/promise');var client=jayson[_0x753c('0x6')][_0x753c('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x4a30cc,_0x2f6c37,_0x1ef0c8){return new BPromise(function(_0x5a8c0f,_0xd546c9){return client['request'](_0x4a30cc,_0x1ef0c8)['then'](function(_0x6b8528){logger['info'](_0x753c('0x8'),_0x2f6c37,_0x753c('0x9'));logger[_0x753c('0xa')]('CmCompany,\x20%s,\x20%s,\x20%s',_0x2f6c37,_0x753c('0x9'),JSON[_0x753c('0xb')](_0x6b8528));if(_0x6b8528[_0x753c('0xc')]){if(_0x6b8528[_0x753c('0xc')]['code']===0x1f4){logger['error'](_0x753c('0x8'),_0x2f6c37,_0x6b8528[_0x753c('0xc')][_0x753c('0xd')]);return _0xd546c9(_0x6b8528['error'][_0x753c('0xd')]);}logger['error'](_0x753c('0x8'),_0x2f6c37,_0x6b8528[_0x753c('0xc')][_0x753c('0xd')]);return _0x5a8c0f(_0x6b8528[_0x753c('0xc')][_0x753c('0xd')]);}else{logger[_0x753c('0xe')]('CmCompany,\x20%s,\x20%s',_0x2f6c37,'request\x20sent');_0x5a8c0f(_0x6b8528[_0x753c('0xf')][_0x753c('0xd')]);}})[_0x753c('0x10')](function(_0xac11f7){logger[_0x753c('0xc')](_0x753c('0x8'),_0x2f6c37,_0xac11f7);_0xd546c9(_0xac11f7);});});}
\ No newline at end of file
index e6e4cf8..d7e6337 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x849c=['destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./cmCompany.controller','get','isAuthenticated','index','/:id','show','/:id/contacts','create','post','update'];(function(_0x23d0a2,_0x38e7b4){var _0x1b5df7=function(_0x3152eb){while(--_0x3152eb){_0x23d0a2['push'](_0x23d0a2['shift']());}};_0x1b5df7(++_0x38e7b4);}(_0x849c,0x7a));var _0xc849=function(_0x1b8450,_0x548d0c){_0x1b8450=_0x1b8450-0x0;var _0x4a55e8=_0x849c[_0x1b8450];return _0x4a55e8;};'use strict';var multer=require(_0xc849('0x0'));var util=require(_0xc849('0x1'));var path=require(_0xc849('0x2'));var timeout=require(_0xc849('0x3'));var express=require(_0xc849('0x4'));var router=express[_0xc849('0x5')]();var auth=require(_0xc849('0x6'));var interaction=require(_0xc849('0x7'));var config=require('../../config/environment');var controller=require(_0xc849('0x8'));router[_0xc849('0x9')]('/',auth[_0xc849('0xa')](),controller[_0xc849('0xb')]);router[_0xc849('0x9')](_0xc849('0xc'),auth[_0xc849('0xa')](),controller[_0xc849('0xd')]);router[_0xc849('0x9')](_0xc849('0xe'),auth['isAuthenticated'](),controller['getContacts']);router['post']('/',auth['isAuthenticated'](),controller[_0xc849('0xf')]);router[_0xc849('0x10')]('/:id/contacts',auth[_0xc849('0xa')](),controller['addContacts']);router['put'](_0xc849('0xc'),auth[_0xc849('0xa')](),controller[_0xc849('0x11')]);router['delete'](_0xc849('0xc'),auth['isAuthenticated'](),controller[_0xc849('0x12')]);module[_0xc849('0x13')]=router;
\ No newline at end of file
+var _0xc543=['delete','exports','path','connect-timeout','Router','../../components/interaction/service','../../config/environment','./cmCompany.controller','get','isAuthenticated','/:id','show','/:id/contacts','getContacts','post','create','addContacts','put','update'];(function(_0x4811a5,_0x48fadc){var _0x1c6a8a=function(_0x2435e2){while(--_0x2435e2){_0x4811a5['push'](_0x4811a5['shift']());}};_0x1c6a8a(++_0x48fadc);}(_0xc543,0x74));var _0x3c54=function(_0x1ab21c,_0x446e99){_0x1ab21c=_0x1ab21c-0x0;var _0x53dcb1=_0xc543[_0x1ab21c];return _0x53dcb1;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x3c54('0x0'));var timeout=require(_0x3c54('0x1'));var express=require('express');var router=express[_0x3c54('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0x3c54('0x3'));var config=require(_0x3c54('0x4'));var controller=require(_0x3c54('0x5'));router[_0x3c54('0x6')]('/',auth[_0x3c54('0x7')](),controller['index']);router[_0x3c54('0x6')](_0x3c54('0x8'),auth[_0x3c54('0x7')](),controller[_0x3c54('0x9')]);router[_0x3c54('0x6')](_0x3c54('0xa'),auth['isAuthenticated'](),controller[_0x3c54('0xb')]);router[_0x3c54('0xc')]('/',auth[_0x3c54('0x7')](),controller[_0x3c54('0xd')]);router[_0x3c54('0xc')](_0x3c54('0xa'),auth['isAuthenticated'](),controller[_0x3c54('0xe')]);router[_0x3c54('0xf')]('/:id',auth[_0x3c54('0x7')](),controller[_0x3c54('0x10')]);router[_0x3c54('0x11')]('/:id',auth[_0x3c54('0x7')](),controller['destroy']);module[_0x3c54('0x12')]=router;
\ No newline at end of file
index f29bf65..6ea3d94 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdc5f=['sequelize','exports','STRING','TEXT','INTEGER','UNSIGNED','DATE','NOW','lodash'];(function(_0x456890,_0x15ed18){var _0xe7865d=function(_0xb7eb2a){while(--_0xb7eb2a){_0x456890['push'](_0x456890['shift']());}};_0xe7865d(++_0x15ed18);}(_0xdc5f,0x182));var _0xfdc5=function(_0x9cd4c3,_0x1c9b2c){_0x9cd4c3=_0x9cd4c3-0x0;var _0x4c9025=_0xdc5f[_0x9cd4c3];return _0x4c9025;};'use strict';var _=require(_0xfdc5('0x0'));var Sequelize=require(_0xfdc5('0x1'));module[_0xfdc5('0x2')]={'firstName':{'type':Sequelize[_0xfdc5('0x3')],'allowNull':![]},'lastName':{'type':Sequelize[_0xfdc5('0x3')]},'street':{'type':Sequelize[_0xfdc5('0x3')]},'postalCode':{'type':Sequelize['STRING']},'city':{'type':Sequelize['STRING']},'country':{'type':Sequelize['STRING']},'dateOfBirth':{'type':Sequelize[_0xfdc5('0x3')]},'description':{'type':Sequelize[_0xfdc5('0x4')]},'phone':{'type':Sequelize[_0xfdc5('0x3')]},'mobile':{'type':Sequelize[_0xfdc5('0x3')]},'fax':{'type':Sequelize[_0xfdc5('0x3')]},'email':{'type':Sequelize[_0xfdc5('0x3')]},'url':{'type':Sequelize[_0xfdc5('0x3')]},'facebook':{'type':Sequelize[_0xfdc5('0x3')]},'fb_data':{'type':Sequelize[_0xfdc5('0x3')]},'twitter':{'type':Sequelize['STRING']},'skype':{'type':Sequelize['STRING']},'teams':{'type':Sequelize[_0xfdc5('0x3')]},'viber':{'type':Sequelize[_0xfdc5('0x3')]},'line':{'type':Sequelize['STRING']},'wechat':{'type':Sequelize['STRING']},'telegram':{'type':Sequelize[_0xfdc5('0x3')]},'UserId':{'type':Sequelize[_0xfdc5('0x5')]},'priority':{'type':Sequelize[_0xfdc5('0x5')](0x2)[_0xfdc5('0x6')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'scheduledat':{'type':Sequelize[_0xfdc5('0x7')],'defaultValue':Sequelize[_0xfdc5('0x8')]}};
\ No newline at end of file
+var _0x7cfc=['UNSIGNED','DATE','lodash','exports','STRING','TEXT','INTEGER'];(function(_0x4670bc,_0x512d51){var _0x2a249e=function(_0x244c54){while(--_0x244c54){_0x4670bc['push'](_0x4670bc['shift']());}};_0x2a249e(++_0x512d51);}(_0x7cfc,0x12f));var _0xc7cf=function(_0x1af3b8,_0x3d62ab){_0x1af3b8=_0x1af3b8-0x0;var _0x6f9d7f=_0x7cfc[_0x1af3b8];return _0x6f9d7f;};'use strict';var _=require(_0xc7cf('0x0'));var Sequelize=require('sequelize');module[_0xc7cf('0x1')]={'firstName':{'type':Sequelize[_0xc7cf('0x2')],'allowNull':![]},'lastName':{'type':Sequelize[_0xc7cf('0x2')]},'street':{'type':Sequelize[_0xc7cf('0x2')]},'postalCode':{'type':Sequelize[_0xc7cf('0x2')]},'city':{'type':Sequelize['STRING']},'country':{'type':Sequelize[_0xc7cf('0x2')]},'dateOfBirth':{'type':Sequelize[_0xc7cf('0x2')]},'description':{'type':Sequelize[_0xc7cf('0x3')]},'phone':{'type':Sequelize[_0xc7cf('0x2')]},'mobile':{'type':Sequelize['STRING']},'fax':{'type':Sequelize[_0xc7cf('0x2')]},'email':{'type':Sequelize[_0xc7cf('0x2')]},'url':{'type':Sequelize[_0xc7cf('0x2')]},'facebook':{'type':Sequelize[_0xc7cf('0x2')]},'fb_data':{'type':Sequelize[_0xc7cf('0x2')]},'twitter':{'type':Sequelize[_0xc7cf('0x2')]},'skype':{'type':Sequelize[_0xc7cf('0x2')]},'teams':{'type':Sequelize[_0xc7cf('0x2')]},'viber':{'type':Sequelize[_0xc7cf('0x2')]},'line':{'type':Sequelize[_0xc7cf('0x2')]},'wechat':{'type':Sequelize['STRING']},'telegram':{'type':Sequelize['STRING']},'UserId':{'type':Sequelize[_0xc7cf('0x4')]},'priority':{'type':Sequelize[_0xc7cf('0x4')](0x2)[_0xc7cf('0x5')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'scheduledat':{'type':Sequelize[_0xc7cf('0x6')],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
index d2451ed..abcad80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe888=['count','offset','set','Content-Range','apply','reject','save','then','destroy','error','stack','name','index','CmContact','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','filters','pick','merge','map','filter','options','include','tag','push','Tags','includeAll','Tag','color','ThroughTags','findAll','rows','catch','find','describe','columnName','displayName','CmCustomField','alias','body','get','mergeWith','isArray','tags','join','[CmContact][merge]\x20to\x20%s\x20from\x20%s','from','CmHopper','info','[CmContact][merge][destroy][CmHopper],\x20%s','CmHopperBlack','[CmContact][merge][destroy][CmHopperBlack],\x20%s','create','ChatInteraction','update','ChatOfflineMessage','MailInteraction','MailMessage','SmsInteraction','FaxInteraction','FaxMessage','OpenchannelMessage','CmHopperFinal','CmHopperHistory','ReportAgentPreview','VoiceCallReport','ChatQueueReport','FaxQueueReport','SmsQueueReport','JscriptySessionReport','bulkCreate','each','duplicates','$or','ListId','spread','show','params','$and','omit','cf_%d','startsWith','cf_','isEmpty','cm_contacts','setFields','id\x20=\x20?','toParam','sequelize','phone','getTags','findOne','order','setTags','getHoppers','ContactId','getHopperHistories','rawAttributes','uploadCsv','binding_values','No\x20association\x20values\x20specified!','binding_keys','split','Incorrect\x20binding\x20parameters\x20passed!','No\x20phone\x20column\x20specified','firstName','No\x20firstName\x20column\x20specified','server/files/tmp','file','filename','0777','child_process','fork','../../components/import/cm/csv','CompanyId','socket_timestamp','File\x20uploaded\x20correctly!','pid','send','upload','import','User','agent','No\x20ListId\x20specified','binding','../../components/import/cm/csv2','stringify','message','exit','error\x20child\x20process','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./cmContact.socket','sendStatus','status','end','json'];(function(_0x57511,_0x5ec342){var _0x5c2caa=function(_0x319fe5){while(--_0x319fe5){_0x57511['push'](_0x57511['shift']());}};_0x5c2caa(++_0x5ec342);}(_0xe888,0x8c));var _0x8e88=function(_0x4dab14,_0x164ea0){_0x4dab14=_0x4dab14-0x0;var _0xf41aa=_0xe888[_0x4dab14];return _0xf41aa;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x8e88('0x0'));var rimraf=require(_0x8e88('0x1'));var zipdir=require(_0x8e88('0x2'));var jsonpatch=require(_0x8e88('0x3'));var rp=require(_0x8e88('0x4'));var moment=require(_0x8e88('0x5'));var BPromise=require(_0x8e88('0x6'));var Mustache=require(_0x8e88('0x7'));var util=require(_0x8e88('0x8'));var path=require(_0x8e88('0x9'));var sox=require(_0x8e88('0xa'));var csv=require(_0x8e88('0xb'));var ejs=require(_0x8e88('0xc'));var fs=require('fs');var _=require(_0x8e88('0xd'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x8e88('0xe'));var deskjs=require(_0x8e88('0xf'));var toCsv=require(_0x8e88('0xb'));var querystring=require(_0x8e88('0x10'));var Papa=require('papaparse');var authService=require(_0x8e88('0x11'));var hardwareService=require(_0x8e88('0x12'));var Redis=require(_0x8e88('0x13'));var qs=require(_0x8e88('0x14'));var logger=require(_0x8e88('0x15'))(_0x8e88('0x16'));var utils=require(_0x8e88('0x17'));var config=require(_0x8e88('0x18'));var db=require(_0x8e88('0x19'))['db'];config[_0x8e88('0x1a')]=_[_0x8e88('0x1b')](config[_0x8e88('0x1a')],{'host':_0x8e88('0x1c'),'port':0x18eb});var socket=require(_0x8e88('0x1d'))(new Redis(config[_0x8e88('0x1a')]));require(_0x8e88('0x1e'))['register'](socket);function respondWithStatusCode(_0x15e1dc,_0x136206){_0x136206=_0x136206||0xcc;return function(_0xba9c23){if(_0xba9c23){return _0x15e1dc[_0x8e88('0x1f')](_0x136206);}return _0x15e1dc[_0x8e88('0x20')](_0x136206)[_0x8e88('0x21')]();};}function respondWithResult(_0x50e97c,_0x113eec){_0x113eec=_0x113eec||0xc8;return function(_0x253cb7){if(_0x253cb7){return _0x50e97c['status'](_0x113eec)[_0x8e88('0x22')](_0x253cb7);}};}function respondWithFilteredResult(_0x188e10,_0x505209){return function(_0x5b03da){if(_0x5b03da){var _0x296496=_0x5b03da[_0x8e88('0x23')],_0x5a8378=_0x505209[_0x8e88('0x24')],_0x46fee6=_0x505209['offset']+_0x505209['limit'],_0x11c5d4;if(_0x46fee6>=_0x296496){_0x46fee6=_0x296496;_0x11c5d4=0xc8;}else{_0x11c5d4=0xce;}_0x188e10[_0x8e88('0x20')](_0x11c5d4);return _0x188e10[_0x8e88('0x25')](_0x8e88('0x26'),_0x5a8378+'-'+_0x46fee6+'/'+_0x296496)[_0x8e88('0x22')](_0x5b03da);}return null;};}function patchUpdates(_0x464dd4){return function(_0x514849){try{jsonpatch[_0x8e88('0x27')](_0x514849,_0x464dd4,!![]);}catch(_0x4a0602){return BPromise[_0x8e88('0x28')](_0x4a0602);}return _0x514849[_0x8e88('0x29')]();};}function saveUpdates(_0x452630,_0x2b68b0){return function(_0x13fc6a){if(_0x13fc6a){return _0x13fc6a['update'](_0x452630)[_0x8e88('0x2a')](function(_0x1a02d1){return _0x1a02d1;});}return null;};}function removeEntity(_0x34e918,_0x43876c){return function(_0xd3ce6c){if(_0xd3ce6c){return _0xd3ce6c[_0x8e88('0x2b')]()['then'](function(){_0x34e918[_0x8e88('0x20')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1ad7b9,_0x2ac164){return function(_0x82c0ef){if(!_0x82c0ef){_0x1ad7b9[_0x8e88('0x1f')](0x194);}return _0x82c0ef;};}function handleError(_0x56585d,_0x42c928){_0x42c928=_0x42c928||0x1f4;return function(_0x114766){logger[_0x8e88('0x2c')](_0x114766[_0x8e88('0x2d')]);if(_0x114766[_0x8e88('0x2e')]){delete _0x114766['name'];}_0x56585d[_0x8e88('0x20')](_0x42c928)['send'](_0x114766);};}exports[_0x8e88('0x2f')]=function(_0x3e1f5d,_0x24148b){var _0x257b2f={},_0xd36f9a={},_0x337a27={'count':0x0,'rows':[]};return db[_0x8e88('0x30')]['describe']()[_0x8e88('0x2a')](function(_0x5c2a37){_0xd36f9a[_0x8e88('0x31')]=_[_0x8e88('0x32')](_0x5c2a37);_0xd36f9a[_0x8e88('0x33')]=_[_0x8e88('0x32')](_0x3e1f5d[_0x8e88('0x33')]);_0xd36f9a['filters']=_[_0x8e88('0x34')](_0xd36f9a[_0x8e88('0x31')],_0xd36f9a['query']);_0x257b2f[_0x8e88('0x35')]=_[_0x8e88('0x34')](_0xd36f9a['model'],qs[_0x8e88('0x36')](_0x3e1f5d[_0x8e88('0x33')][_0x8e88('0x36')]));_0x257b2f[_0x8e88('0x35')]=_0x257b2f[_0x8e88('0x35')][_0x8e88('0x37')]?_0x257b2f[_0x8e88('0x35')]:_0xd36f9a[_0x8e88('0x31')];if(!_0x3e1f5d[_0x8e88('0x33')][_0x8e88('0x38')](_0x8e88('0x39'))){_0x257b2f['limit']=qs['limit'](_0x3e1f5d['query'][_0x8e88('0x3a')]);_0x257b2f[_0x8e88('0x24')]=qs[_0x8e88('0x24')](_0x3e1f5d[_0x8e88('0x33')]['offset']);}_0x257b2f['order']=qs['sort'](_0x3e1f5d[_0x8e88('0x33')][_0x8e88('0x3b')]);_0x257b2f[_0x8e88('0x3c')]=qs[_0x8e88('0x3d')](_[_0x8e88('0x3e')](_0x3e1f5d[_0x8e88('0x33')],_0xd36f9a[_0x8e88('0x3d')]));if(_0x3e1f5d[_0x8e88('0x33')]['filter']){_0x257b2f[_0x8e88('0x3c')]=_[_0x8e88('0x3f')](_0x257b2f[_0x8e88('0x3c')],{'$or':_[_0x8e88('0x40')](_0x257b2f[_0x8e88('0x35')],function(_0x5f5bab){var _0x1e2d3a={};_0x1e2d3a[_0x5f5bab]={'$like':'%'+_0x3e1f5d[_0x8e88('0x33')][_0x8e88('0x41')]+'%'};return _0x1e2d3a;})});}_0x257b2f=_['merge']({},_0x257b2f,_0x3e1f5d[_0x8e88('0x42')]);var _0x3548c9={'where':_0x257b2f[_0x8e88('0x3c')]};_0x3548c9[_0x8e88('0x43')]=[];if(_0x3e1f5d[_0x8e88('0x33')][_0x8e88('0x44')]){_0x3548c9[_0x8e88('0x43')][_0x8e88('0x45')]({'model':db['Tag'],'as':_0x8e88('0x46'),'attributes':['id'],'where':{'id':_0x3e1f5d[_0x8e88('0x33')][_0x8e88('0x44')]},'required':!![]});_0x3548c9['distinct']=!![];}return db[_0x8e88('0x30')]['count'](_0x3548c9)[_0x8e88('0x2a')](function(_0x96123a){_0x337a27['count']=_0x96123a;if(_0x3e1f5d[_0x8e88('0x33')][_0x8e88('0x47')]){_0x257b2f[_0x8e88('0x43')]=[{'model':db[_0x8e88('0x48')],'as':_0x8e88('0x46'),'attributes':['id',_0x8e88('0x2e'),_0x8e88('0x49')],'required':_0x3e1f5d[_0x8e88('0x33')]['tag']?!![]:![]},{'model':db[_0x8e88('0x48')],'as':_0x8e88('0x4a'),'attributes':['id',_0x8e88('0x2e'),_0x8e88('0x49')],'through':_0x3e1f5d[_0x8e88('0x33')][_0x8e88('0x44')]?{'attributes':[],'where':{'TagId':_0x3e1f5d[_0x8e88('0x33')]['tag']||undefined}}:{},'required':_0x3e1f5d['query'][_0x8e88('0x44')]?!![]:![]}];}return db[_0x8e88('0x30')][_0x8e88('0x4b')](_0x257b2f);})[_0x8e88('0x2a')](function(_0xc40c01){_0x337a27[_0x8e88('0x4c')]=_0xc40c01;return _0x337a27;})[_0x8e88('0x2a')](respondWithFilteredResult(_0x24148b,_0x257b2f))[_0x8e88('0x4d')](handleError(_0x24148b,null));});};exports['destroy']=function(_0x207873,_0x394cd3){return db[_0x8e88('0x30')][_0x8e88('0x4e')]({'where':{'id':_0x207873['params']['id']}})[_0x8e88('0x2a')](handleEntityNotFound(_0x394cd3,null))[_0x8e88('0x2a')](removeEntity(_0x394cd3,null))[_0x8e88('0x4d')](handleError(_0x394cd3,null));};exports[_0x8e88('0x4f')]=function(_0x1408cf,_0x2eac0a){return db[_0x8e88('0x30')][_0x8e88('0x4f')]()[_0x8e88('0x2a')](function(_0x9133dd){for(var _0x1f6251=0x0;_0x1f6251<Object[_0x8e88('0x32')](_0x9133dd)[_0x8e88('0x37')];_0x1f6251++){var _0x1f8dd1=Object['keys'](_0x9133dd)[_0x1f6251];if(!_['startsWith'](_0x1f8dd1,'cf_')){_0x9133dd[_0x1f8dd1][_0x8e88('0x50')]=_0x1f8dd1;_0x9133dd[_0x1f8dd1][_0x8e88('0x51')]=_0x1f8dd1;}}return _0x9133dd;})['then'](function(_0x346879){var _0x4162c1={'where':{'$or':[{'ListId':_0x1408cf['query']['id']},{'ListId':null}]},'raw':!![]};return db[_0x8e88('0x52')]['findAll'](_0x4162c1)[_0x8e88('0x2a')](function(_0x3547f2){for(var _0x5f479d=0x0;_0x5f479d<_0x3547f2[_0x8e88('0x37')];_0x5f479d++){var _0x26199b='cf_'+_0x3547f2[_0x5f479d]['id'];_0x346879[_0x26199b]['columnName']=_0x26199b;_0x346879[_0x26199b]['displayName']=_0x3547f2[_0x5f479d][_0x8e88('0x53')];}for(var _0x5f479d=0x0;_0x5f479d<Object[_0x8e88('0x32')](_0x346879)[_0x8e88('0x37')];_0x5f479d++){var _0x26199b=Object[_0x8e88('0x32')](_0x346879)[_0x5f479d];if(!_0x346879[_0x26199b][_0x8e88('0x38')](_0x8e88('0x50'))){delete _0x346879[_0x26199b];}}return _0x346879;});})[_0x8e88('0x2a')](respondWithResult(_0x2eac0a,null))['catch'](handleError(_0x2eac0a,null));};exports[_0x8e88('0x3f')]=function(_0x5dae0c,_0x4af35e){var _0x5c3a33;var _0x52558e;var _0xafd504;if(_0x5dae0c['body']['id']){delete _0x5dae0c[_0x8e88('0x54')]['id'];}return db[_0x8e88('0x30')][_0x8e88('0x4b')]({'where':{'id':[_0x5dae0c[_0x8e88('0x54')]['to'],_0x5dae0c['body']['from']]}})['then'](function(_0x2a0d44){if(_0x2a0d44){if(_0x2a0d44[_0x8e88('0x37')]!==0x2){return null;}_0x2a0d44[0x0]=_0x2a0d44[0x0][_0x8e88('0x55')]({'plain':!![]});_0x2a0d44[0x1]=_0x2a0d44[0x1][_0x8e88('0x55')]({'plain':!![]});delete _0x2a0d44[0x0]['id'];delete _0x2a0d44[0x1]['id'];return _[_0x8e88('0x56')](_0x2a0d44[0x0],_0x2a0d44[0x1],function(_0x1bbb7d,_0x19c4cc){if(Array[_0x8e88('0x57')](_0x19c4cc)&&!_0x19c4cc['length']){return _0x1bbb7d;}else if(!_0x19c4cc){return _0x1bbb7d;}});}})['then'](handleEntityNotFound(_0x4af35e,null))['then'](function(_0xcd7b9d){if(_0xcd7b9d){if(_0xcd7b9d[_0x8e88('0x58')]&&_[_0x8e88('0x57')](_0xcd7b9d['tags'])){_0xcd7b9d[_0x8e88('0x58')]=_0xcd7b9d[_0x8e88('0x58')][_0x8e88('0x59')]();}logger['info'](_0x8e88('0x5a'),_0x5dae0c[_0x8e88('0x54')]['to'],_0x5dae0c[_0x8e88('0x54')][_0x8e88('0x5b')]);return db[_0x8e88('0x5c')][_0x8e88('0x2b')]({'where':{'ContactId':[_0x5dae0c['body']['to'],_0x5dae0c[_0x8e88('0x54')]['from']]}})[_0x8e88('0x2a')](function(_0x70e313){logger[_0x8e88('0x5d')](_0x8e88('0x5e'),_0x70e313);return db[_0x8e88('0x5f')]['destroy']({'where':{'ContactId':[_0x5dae0c[_0x8e88('0x54')]['to'],_0x5dae0c[_0x8e88('0x54')][_0x8e88('0x5b')]]}})['then'](function(_0x11517f){logger['info'](_0x8e88('0x60'),_0x11517f);return db[_0x8e88('0x30')][_0x8e88('0x61')](_0xcd7b9d);});});}})['then'](function(_0xe04e39){if(_0xe04e39){_0x5c3a33=_0xe04e39;_0x52558e={'ContactId':_0x5c3a33['id']};_0xafd504={'where':{'ContactId':[_0x5dae0c['body']['to'],_0x5dae0c['body'][_0x8e88('0x5b')]]}};return db[_0x8e88('0x62')]['update'](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db['ChatMessage'][_0x8e88('0x63')](_0x52558e,_0xafd504);}})['then'](function(){if(_0x5c3a33){return db[_0x8e88('0x64')]['update'](_0x52558e,_0xafd504);}})['then'](function(){if(_0x5c3a33){return db[_0x8e88('0x65')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})['then'](function(){if(_0x5c3a33){return db[_0x8e88('0x66')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x65')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x66')]['update'](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x67')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db['SmsMessage'][_0x8e88('0x63')](_0x52558e,_0xafd504);}})['then'](function(){if(_0x5c3a33){return db[_0x8e88('0x68')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})['then'](function(){if(_0x5c3a33){return db[_0x8e88('0x69')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db['OpenchannelInteraction'][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x6a')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x6b')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})['then'](function(){if(_0x5c3a33){return db[_0x8e88('0x6c')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x6d')]['update'](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x6e')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x6f')]['update'](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x70')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db['MailQueueReport']['update'](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db['OpenchannelQueueReport'][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x71')]['update'](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x72')][_0x8e88('0x63')](_0x52558e,_0xafd504);}})[_0x8e88('0x2a')](function(){if(_0x5c3a33){return db[_0x8e88('0x30')][_0x8e88('0x2b')]({'where':{'id':[_0x5dae0c['body']['to'],_0x5dae0c[_0x8e88('0x54')][_0x8e88('0x5b')]]}});}})['then'](function(){if(_0x5c3a33){return _0x5c3a33;}})[_0x8e88('0x2a')](respondWithResult(_0x4af35e,null))[_0x8e88('0x4d')](handleError(_0x4af35e,null));};exports[_0x8e88('0x61')]=function(_0xfafec0,_0x45136a){return db[_0x8e88('0x30')][_0x8e88('0x4f')]()['then'](function(_0x12f377){if(_0xfafec0[_0x8e88('0x54')][_0x8e88('0x58')]&&_[_0x8e88('0x57')](_0xfafec0['body'][_0x8e88('0x58')])){if(_0xfafec0[_0x8e88('0x54')][_0x8e88('0x58')][_0x8e88('0x37')]){_0xfafec0[_0x8e88('0x54')][_0x8e88('0x58')]=_0xfafec0['body'][_0x8e88('0x58')][_0x8e88('0x59')](';')+';';}else{_0xfafec0['body'][_0x8e88('0x58')]=null;}}else{_0xfafec0[_0x8e88('0x54')][_0x8e88('0x58')]=null;}return db[_0x8e88('0x30')][_0x8e88('0x61')](_0xfafec0[_0x8e88('0x54')],{'fields':_['keys'](_0x12f377),'raw':!![]});})[_0x8e88('0x2a')](respondWithResult(_0x45136a,0xc9))[_0x8e88('0x4d')](handleError(_0x45136a,null));};exports[_0x8e88('0x73')]=function(_0x4e37fb,_0x25ac3d){var _0x237ce8=[];var _0x449d83=0x0;var _0x52c72d=0x0;var _0x3d92e2=0x0;return db[_0x8e88('0x30')]['describe']()[_0x8e88('0x2a')](function(_0x18f22c){return BPromise[_0x8e88('0x74')](_0x4e37fb[_0x8e88('0x54')],function(_0x3acdf3){var _0x39d136={'where':{'$or':[]},'defaults':_0x3acdf3,'fields':_[_0x8e88('0x32')](_0x18f22c),'raw':!![]};if(_0x3acdf3[_0x8e88('0x75')]){for(var _0x41e29c=0x0;_0x41e29c<_0x3acdf3['duplicates'][_0x8e88('0x37')];_0x41e29c++){var _0x10b6db={};_0x10b6db[_0x3acdf3['duplicates'][_0x41e29c]]=_0x3acdf3[_0x3acdf3[_0x8e88('0x75')][_0x41e29c]];_0x39d136[_0x8e88('0x3c')][_0x8e88('0x76')][_0x8e88('0x45')](_0x10b6db);}_0x39d136[_0x8e88('0x3c')][_0x8e88('0x77')]=_0x3acdf3[_0x8e88('0x77')];}return db[_0x8e88('0x30')]['findOrCreate'](_0x39d136)[_0x8e88('0x78')](function(_0x1d6f5c,_0xe9d3a6){if(_0xe9d3a6){_0x449d83++;}else{_0x3d92e2++;}})[_0x8e88('0x4d')](function(_0x5720e6){console[_0x8e88('0x2c')](_0x5720e6);_0x52c72d++;});});})['then'](function(_0x6c851f){if(_0x6c851f){return{'success':_0x449d83,'failure':_0x52c72d,'duplicates':_0x3d92e2};}})['then'](respondWithResult(_0x25ac3d,0xc9))[_0x8e88('0x4d')](handleError(_0x25ac3d,null));};exports[_0x8e88('0x79')]=function(_0x2826b6,_0x166b1a,_0x5518db){var _0x43575b;return db[_0x8e88('0x30')][_0x8e88('0x4f')]()[_0x8e88('0x2a')](function(_0xa97fc6){return db[_0x8e88('0x30')][_0x8e88('0x4e')]({'where':{'id':_0x2826b6[_0x8e88('0x7a')]['id']},'include':[{'model':db[_0x8e88('0x48')],'as':_0x8e88('0x46'),'attributes':['id',_0x8e88('0x2e'),_0x8e88('0x49')],'required':_0x2826b6[_0x8e88('0x33')]['tag']?!![]:![]}],'attributes':_[_0x8e88('0x32')](_0xa97fc6)});})['then'](function(_0x191502){_0x43575b=_0x191502['get']({'plain':!![]});var _0x48a1ab={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x191502&&_0x191502['ListId']){if(_0x191502[_0x8e88('0x77')]){_0x48a1ab['where'][_0x8e88('0x7b')][_0x8e88('0x45')]({'ListId':{'$ne':_0x191502[_0x8e88('0x77')]}});}}return db[_0x8e88('0x52')]['findAll'](_0x48a1ab);})['then'](function(_0x58c6c2){return _[_0x8e88('0x7c')](_0x43575b,_[_0x8e88('0x40')](_0x58c6c2,function(_0x4b2c4b){return util['format'](_0x8e88('0x7d'),_0x4b2c4b['id']);}));})[_0x8e88('0x2a')](handleEntityNotFound(_0x166b1a,null))['then'](respondWithResult(_0x166b1a,null))[_0x8e88('0x4d')](handleError(_0x166b1a,null));};exports['update']=function(_0x25260b,_0x5b5b59){var _0xefba64;if(_0x25260b[_0x8e88('0x54')]['id']){delete _0x25260b[_0x8e88('0x54')]['id'];}return db[_0x8e88('0x30')][_0x8e88('0x4e')]({'where':{'id':_0x25260b[_0x8e88('0x7a')]['id']}})[_0x8e88('0x2a')](handleEntityNotFound(_0x5b5b59,null))[_0x8e88('0x2a')](saveUpdates(_0x25260b[_0x8e88('0x54')],null))[_0x8e88('0x2a')](function(_0x1306fa){_0xefba64=_0x1306fa;var _0x5bddcb={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x1306fa&&_0x1306fa[_0x8e88('0x77')]){if(_0x1306fa['ListId']){_0x5bddcb[_0x8e88('0x3c')][_0x8e88('0x7b')][_0x8e88('0x45')]({'ListId':{'$ne':_0x1306fa[_0x8e88('0x77')]}});}}return db['CmCustomField']['findAll'](_0x5bddcb);})['then'](function(_0x27a103){if(_0x27a103){return _[_0x8e88('0x7c')](_['pickBy'](_0x25260b[_0x8e88('0x54')],function(_0x21e5c6,_0x49a1f2){return _[_0x8e88('0x7e')](_0x49a1f2,_0x8e88('0x7f'));}),_['map'](_0x27a103,function(_0x5cd1c4){return util['format']('cf_%d',_0x5cd1c4['id']);}));}})[_0x8e88('0x2a')](function(_0x534e90){if(_0x534e90&&!_[_0x8e88('0x80')](_0x534e90)){var _0x1334f2=squel[_0x8e88('0x63')]()['table'](_0x8e88('0x81'))[_0x8e88('0x82')](_0x534e90)[_0x8e88('0x3c')](_0x8e88('0x83'),_0x25260b[_0x8e88('0x7a')]['id'])[_0x8e88('0x84')]();return db[_0x8e88('0x85')][_0x8e88('0x33')](_0x1334f2['text'],{'replacements':_0x1334f2['values']});}})[_0x8e88('0x2a')](function(){if(_0x25260b[_0x8e88('0x54')][_0x8e88('0x86')]&&_0xefba64){return db[_0x8e88('0x5c')][_0x8e88('0x63')]({'phone':_0x25260b['body']['phone']},{'where':{'ContactId':_0xefba64['id']}});}})[_0x8e88('0x2a')](function(){return _0xefba64;})['then'](respondWithResult(_0x5b5b59,null))[_0x8e88('0x4d')](handleError(_0x5b5b59,null));};exports[_0x8e88('0x87')]=function(_0x1135dd,_0x39166c,_0x34f1e1){var _0x20c22c={};var _0xa5307a={};var _0x778e92;var _0x8b70e2;return db[_0x8e88('0x30')][_0x8e88('0x88')]({'where':{'id':_0x1135dd[_0x8e88('0x7a')]['id']}})[_0x8e88('0x2a')](handleEntityNotFound(_0x39166c,null))['then'](function(_0x34142d){if(_0x34142d){_0x778e92=_0x34142d;_0xa5307a[_0x8e88('0x31')]=_[_0x8e88('0x32')](db[_0x8e88('0x48')]['rawAttributes']);_0xa5307a[_0x8e88('0x33')]=_['keys'](_0x1135dd['query']);_0xa5307a[_0x8e88('0x3d')]=_[_0x8e88('0x34')](_0xa5307a[_0x8e88('0x31')],_0xa5307a['query']);_0x20c22c[_0x8e88('0x35')]=_[_0x8e88('0x34')](_0xa5307a[_0x8e88('0x31')],qs[_0x8e88('0x36')](_0x1135dd[_0x8e88('0x33')]['fields']));_0x20c22c[_0x8e88('0x35')]=_0x20c22c['attributes'][_0x8e88('0x37')]?_0x20c22c['attributes']:_0xa5307a['model'];_0x20c22c[_0x8e88('0x89')]=qs[_0x8e88('0x3b')](_0x1135dd[_0x8e88('0x33')][_0x8e88('0x3b')]);_0x20c22c[_0x8e88('0x3c')]=qs[_0x8e88('0x3d')](_[_0x8e88('0x3e')](_0x1135dd[_0x8e88('0x33')],_0xa5307a[_0x8e88('0x3d')]));if(_0x1135dd[_0x8e88('0x33')][_0x8e88('0x41')]){_0x20c22c[_0x8e88('0x3c')]=_[_0x8e88('0x3f')](_0x20c22c[_0x8e88('0x3c')],{'$or':_['map'](_0x20c22c['attributes'],function(_0x1af54f){var _0x5a7d37={};_0x5a7d37[_0x1af54f]={'$like':'%'+_0x1135dd[_0x8e88('0x33')][_0x8e88('0x41')]+'%'};return _0x5a7d37;})});}_0x20c22c=_['merge']({},_0x20c22c,_0x1135dd[_0x8e88('0x42')]);return _0x778e92[_0x8e88('0x87')](_0x20c22c);}})['then'](function(_0x3151a9){if(_0x3151a9){_0x8b70e2=_0x3151a9[_0x8e88('0x37')];if(!_0x1135dd[_0x8e88('0x33')][_0x8e88('0x38')](_0x8e88('0x39'))){_0x20c22c[_0x8e88('0x3a')]=qs[_0x8e88('0x3a')](_0x1135dd[_0x8e88('0x33')][_0x8e88('0x3a')]);_0x20c22c[_0x8e88('0x24')]=qs[_0x8e88('0x24')](_0x1135dd['query'][_0x8e88('0x24')]);}return _0x778e92[_0x8e88('0x87')](_0x20c22c);}})[_0x8e88('0x2a')](function(_0x3df37a){if(_0x3df37a){return _0x3df37a?{'count':_0x8b70e2,'rows':_0x3df37a}:null;}})[_0x8e88('0x2a')](respondWithResult(_0x39166c,null))[_0x8e88('0x4d')](handleError(_0x39166c,null));};exports['setTags']=function(_0x361d00,_0x39e105,_0x3ebde7){if(_0x361d00[_0x8e88('0x54')]['id']){delete _0x361d00[_0x8e88('0x54')]['id'];}return db['CmContact'][_0x8e88('0x88')]({'where':{'id':_0x361d00[_0x8e88('0x7a')]['id']}})[_0x8e88('0x2a')](handleEntityNotFound(_0x39e105,null))[_0x8e88('0x2a')](function(_0x174876){if(_0x174876){return _0x174876[_0x8e88('0x8a')](_0x361d00[_0x8e88('0x54')]['ids']||[]);}return null;})[_0x8e88('0x2a')](respondWithResult(_0x39e105,null))[_0x8e88('0x4d')](handleError(_0x39e105,null));};exports[_0x8e88('0x8b')]=function(_0xa7525f,_0x1b2b36,_0x2163f8){var _0x2094fb={'raw':![],'where':{}};var _0x39a4d1={};var _0x335600={'count':0x0,'rows':[]};return db[_0x8e88('0x30')][_0x8e88('0x88')]({'where':{'id':_0xa7525f[_0x8e88('0x7a')]['id']}})[_0x8e88('0x2a')](handleEntityNotFound(_0x1b2b36,null))['then'](function(_0x6ff80){if(_0x6ff80){_0x39a4d1[_0x8e88('0x31')]=_['keys'](db[_0x8e88('0x5c')]['rawAttributes']);_0x39a4d1[_0x8e88('0x33')]=_['keys'](_0xa7525f[_0x8e88('0x33')]);_0x39a4d1[_0x8e88('0x3d')]=_[_0x8e88('0x34')](_0x39a4d1[_0x8e88('0x31')],_0x39a4d1['query']);_0x2094fb[_0x8e88('0x35')]=_['intersection'](_0x39a4d1['model'],qs[_0x8e88('0x36')](_0xa7525f[_0x8e88('0x33')]['fields']));_0x2094fb[_0x8e88('0x35')]=_0x2094fb[_0x8e88('0x35')][_0x8e88('0x37')]?_0x2094fb['attributes']:_0x39a4d1[_0x8e88('0x31')];if(!_0xa7525f['query'][_0x8e88('0x38')](_0x8e88('0x39'))){_0x2094fb[_0x8e88('0x3a')]=qs['limit'](_0xa7525f[_0x8e88('0x33')][_0x8e88('0x3a')]);_0x2094fb['offset']=qs[_0x8e88('0x24')](_0xa7525f[_0x8e88('0x33')][_0x8e88('0x24')]);}_0x2094fb['order']=qs[_0x8e88('0x3b')](_0xa7525f[_0x8e88('0x33')][_0x8e88('0x3b')]);_0x2094fb[_0x8e88('0x3c')]=qs[_0x8e88('0x3d')](_[_0x8e88('0x3e')](_0xa7525f[_0x8e88('0x33')],_0x39a4d1[_0x8e88('0x3d')]));_0x2094fb[_0x8e88('0x3c')][_0x8e88('0x8c')]=_0x6ff80['id'];if(_0xa7525f['query'][_0x8e88('0x41')]){_0x2094fb[_0x8e88('0x3c')]=_[_0x8e88('0x3f')](_0x2094fb[_0x8e88('0x3c')],{'$or':_[_0x8e88('0x40')](_0x2094fb[_0x8e88('0x35')],function(_0x214434){var _0x4e5a06={};_0x4e5a06[_0x214434]={'$like':'%'+_0xa7525f[_0x8e88('0x33')][_0x8e88('0x41')]+'%'};return _0x4e5a06;})});}_0x2094fb=_[_0x8e88('0x3f')]({},_0x2094fb,_0xa7525f[_0x8e88('0x42')]);return db[_0x8e88('0x5c')][_0x8e88('0x23')]({'where':_0x2094fb[_0x8e88('0x3c')]})['then'](function(_0x277aa2){_0x335600[_0x8e88('0x23')]=_0x277aa2;if(_0xa7525f[_0x8e88('0x33')][_0x8e88('0x47')]){_0x2094fb['include']=[{'all':!![]}];}return db[_0x8e88('0x5c')][_0x8e88('0x4b')](_0x2094fb);})[_0x8e88('0x2a')](function(_0x84ebf2){_0x335600[_0x8e88('0x4c')]=_0x84ebf2;return _0x335600;});}})[_0x8e88('0x2a')](respondWithFilteredResult(_0x1b2b36,_0x2094fb))[_0x8e88('0x4d')](handleError(_0x1b2b36,null));};exports[_0x8e88('0x8d')]=function(_0x308683,_0x2e6a19,_0x3232f2){var _0x43315e={'raw':!![],'where':{}};var _0x2381ee={};var _0x4b6c1c={'count':0x0,'rows':[]};return db[_0x8e88('0x30')][_0x8e88('0x88')]({'where':{'id':_0x308683[_0x8e88('0x7a')]['id']}})[_0x8e88('0x2a')](handleEntityNotFound(_0x2e6a19,null))[_0x8e88('0x2a')](function(_0x3cdf78){if(_0x3cdf78){_0x2381ee['model']=_[_0x8e88('0x32')](db[_0x8e88('0x6c')][_0x8e88('0x8e')]);_0x2381ee['query']=_['keys'](_0x308683[_0x8e88('0x33')]);_0x2381ee[_0x8e88('0x3d')]=_[_0x8e88('0x34')](_0x2381ee[_0x8e88('0x31')],_0x2381ee[_0x8e88('0x33')]);_0x43315e[_0x8e88('0x35')]=_[_0x8e88('0x34')](_0x2381ee[_0x8e88('0x31')],qs[_0x8e88('0x36')](_0x308683['query'][_0x8e88('0x36')]));_0x43315e[_0x8e88('0x35')]=_0x43315e[_0x8e88('0x35')][_0x8e88('0x37')]?_0x43315e['attributes']:_0x2381ee[_0x8e88('0x31')];if(!_0x308683[_0x8e88('0x33')][_0x8e88('0x38')](_0x8e88('0x39'))){_0x43315e[_0x8e88('0x3a')]=qs[_0x8e88('0x3a')](_0x308683[_0x8e88('0x33')][_0x8e88('0x3a')]);_0x43315e[_0x8e88('0x24')]=qs[_0x8e88('0x24')](_0x308683[_0x8e88('0x33')][_0x8e88('0x24')]);}_0x43315e[_0x8e88('0x89')]=qs[_0x8e88('0x3b')](_0x308683[_0x8e88('0x33')][_0x8e88('0x3b')]);_0x43315e[_0x8e88('0x3c')]=qs[_0x8e88('0x3d')](_[_0x8e88('0x3e')](_0x308683[_0x8e88('0x33')],_0x2381ee[_0x8e88('0x3d')]));_0x43315e[_0x8e88('0x3c')]['ContactId']=_0x3cdf78['id'];if(_0x308683['query'][_0x8e88('0x41')]){_0x43315e[_0x8e88('0x3c')]=_[_0x8e88('0x3f')](_0x43315e[_0x8e88('0x3c')],{'$or':_['map'](_0x43315e[_0x8e88('0x35')],function(_0x4bde59){var _0x5c6988={};_0x5c6988[_0x4bde59]={'$like':'%'+_0x308683['query']['filter']+'%'};return _0x5c6988;})});}_0x43315e=_['merge']({},_0x43315e,_0x308683[_0x8e88('0x42')]);return db[_0x8e88('0x6c')][_0x8e88('0x23')]({'where':_0x43315e[_0x8e88('0x3c')]})['then'](function(_0x2bee6d){_0x4b6c1c[_0x8e88('0x23')]=_0x2bee6d;if(_0x308683[_0x8e88('0x33')]['includeAll']){_0x43315e[_0x8e88('0x43')]=[{'all':!![]}];}return db[_0x8e88('0x6c')][_0x8e88('0x4b')](_0x43315e);})[_0x8e88('0x2a')](function(_0x255512){_0x4b6c1c['rows']=_0x255512;return _0x4b6c1c;});}})[_0x8e88('0x2a')](respondWithFilteredResult(_0x2e6a19,_0x43315e))[_0x8e88('0x4d')](handleError(_0x2e6a19,null));};exports['getHopperFinals']=function(_0x55f6a6,_0x23d209,_0x3f1057){var _0x2c8313={'raw':!![],'where':{}};var _0x57ef15={};var _0x42fb90={'count':0x0,'rows':[]};return db[_0x8e88('0x30')][_0x8e88('0x88')]({'where':{'id':_0x55f6a6[_0x8e88('0x7a')]['id']}})[_0x8e88('0x2a')](handleEntityNotFound(_0x23d209,null))[_0x8e88('0x2a')](function(_0x10347a){if(_0x10347a){_0x57ef15[_0x8e88('0x31')]=_[_0x8e88('0x32')](db[_0x8e88('0x6b')][_0x8e88('0x8e')]);_0x57ef15[_0x8e88('0x33')]=_['keys'](_0x55f6a6['query']);_0x57ef15[_0x8e88('0x3d')]=_['intersection'](_0x57ef15[_0x8e88('0x31')],_0x57ef15[_0x8e88('0x33')]);_0x2c8313[_0x8e88('0x35')]=_[_0x8e88('0x34')](_0x57ef15['model'],qs[_0x8e88('0x36')](_0x55f6a6['query'][_0x8e88('0x36')]));_0x2c8313[_0x8e88('0x35')]=_0x2c8313[_0x8e88('0x35')][_0x8e88('0x37')]?_0x2c8313[_0x8e88('0x35')]:_0x57ef15['model'];if(!_0x55f6a6[_0x8e88('0x33')][_0x8e88('0x38')](_0x8e88('0x39'))){_0x2c8313[_0x8e88('0x3a')]=qs['limit'](_0x55f6a6[_0x8e88('0x33')]['limit']);_0x2c8313[_0x8e88('0x24')]=qs[_0x8e88('0x24')](_0x55f6a6[_0x8e88('0x33')][_0x8e88('0x24')]);}_0x2c8313[_0x8e88('0x89')]=qs['sort'](_0x55f6a6[_0x8e88('0x33')][_0x8e88('0x3b')]);_0x2c8313[_0x8e88('0x3c')]=qs[_0x8e88('0x3d')](_[_0x8e88('0x3e')](_0x55f6a6['query'],_0x57ef15[_0x8e88('0x3d')]));_0x2c8313['where']['ContactId']=_0x10347a['id'];if(_0x55f6a6[_0x8e88('0x33')][_0x8e88('0x41')]){_0x2c8313[_0x8e88('0x3c')]=_[_0x8e88('0x3f')](_0x2c8313[_0x8e88('0x3c')],{'$or':_[_0x8e88('0x40')](_0x2c8313[_0x8e88('0x35')],function(_0x26e433){var _0x1bbe69={};_0x1bbe69[_0x26e433]={'$like':'%'+_0x55f6a6[_0x8e88('0x33')][_0x8e88('0x41')]+'%'};return _0x1bbe69;})});}_0x2c8313=_[_0x8e88('0x3f')]({},_0x2c8313,_0x55f6a6['options']);return db[_0x8e88('0x6b')][_0x8e88('0x23')]({'where':_0x2c8313[_0x8e88('0x3c')]})[_0x8e88('0x2a')](function(_0x1648b5){_0x42fb90['count']=_0x1648b5;if(_0x55f6a6['query'][_0x8e88('0x47')]){_0x2c8313[_0x8e88('0x43')]=[{'all':!![]}];}return db[_0x8e88('0x6b')][_0x8e88('0x4b')](_0x2c8313);})[_0x8e88('0x2a')](function(_0x428d33){_0x42fb90[_0x8e88('0x4c')]=_0x428d33;return _0x42fb90;});}})[_0x8e88('0x2a')](respondWithFilteredResult(_0x23d209,_0x2c8313))['catch'](handleError(_0x23d209,null));};exports['getJscriptySessions']=function(_0x5e686b,_0x45a168,_0x5613f0){var _0x1f22d3={'raw':!![],'where':{}};var _0x1debd4={};var _0xb62379={'count':0x0,'rows':[]};return db[_0x8e88('0x30')][_0x8e88('0x88')]({'where':{'id':_0x5e686b[_0x8e88('0x7a')]['id']}})[_0x8e88('0x2a')](handleEntityNotFound(_0x45a168,null))[_0x8e88('0x2a')](function(_0x15d5fe){if(_0x15d5fe){_0x1debd4[_0x8e88('0x31')]=_[_0x8e88('0x32')](db['JscriptySessionReport']['rawAttributes']);_0x1debd4[_0x8e88('0x33')]=_[_0x8e88('0x32')](_0x5e686b[_0x8e88('0x33')]);_0x1debd4[_0x8e88('0x3d')]=_[_0x8e88('0x34')](_0x1debd4['model'],_0x1debd4[_0x8e88('0x33')]);_0x1f22d3[_0x8e88('0x35')]=_[_0x8e88('0x34')](_0x1debd4['model'],qs[_0x8e88('0x36')](_0x5e686b[_0x8e88('0x33')][_0x8e88('0x36')]));_0x1f22d3[_0x8e88('0x35')]=_0x1f22d3['attributes'][_0x8e88('0x37')]?_0x1f22d3[_0x8e88('0x35')]:_0x1debd4[_0x8e88('0x31')];if(!_0x5e686b[_0x8e88('0x33')][_0x8e88('0x38')](_0x8e88('0x39'))){_0x1f22d3[_0x8e88('0x3a')]=qs[_0x8e88('0x3a')](_0x5e686b[_0x8e88('0x33')][_0x8e88('0x3a')]);_0x1f22d3[_0x8e88('0x24')]=qs[_0x8e88('0x24')](_0x5e686b[_0x8e88('0x33')][_0x8e88('0x24')]);}_0x1f22d3['order']=qs[_0x8e88('0x3b')](_0x5e686b[_0x8e88('0x33')][_0x8e88('0x3b')]);_0x1f22d3[_0x8e88('0x3c')]=qs[_0x8e88('0x3d')](_[_0x8e88('0x3e')](_0x5e686b[_0x8e88('0x33')],_0x1debd4[_0x8e88('0x3d')]));_0x1f22d3[_0x8e88('0x3c')]['ContactId']=_0x15d5fe['id'];if(_0x5e686b[_0x8e88('0x33')][_0x8e88('0x41')]){_0x1f22d3[_0x8e88('0x3c')]=_[_0x8e88('0x3f')](_0x1f22d3[_0x8e88('0x3c')],{'$or':_['map'](_0x1f22d3[_0x8e88('0x35')],function(_0x5ba311){var _0x46fe40={};_0x46fe40[_0x5ba311]={'$like':'%'+_0x5e686b[_0x8e88('0x33')]['filter']+'%'};return _0x46fe40;})});}_0x1f22d3=_['merge']({},_0x1f22d3,_0x5e686b['options']);return db['JscriptySessionReport'][_0x8e88('0x23')]({'where':_0x1f22d3[_0x8e88('0x3c')]})[_0x8e88('0x2a')](function(_0x39fa4f){_0xb62379[_0x8e88('0x23')]=_0x39fa4f;if(_0x5e686b[_0x8e88('0x33')][_0x8e88('0x47')]){_0x1f22d3[_0x8e88('0x43')]=[{'all':!![]}];}return db[_0x8e88('0x72')][_0x8e88('0x4b')](_0x1f22d3);})['then'](function(_0x131339){_0xb62379['rows']=_0x131339;return _0xb62379;});}})[_0x8e88('0x2a')](respondWithFilteredResult(_0x45a168,_0x1f22d3))[_0x8e88('0x4d')](handleError(_0x45a168,null));};exports[_0x8e88('0x8f')]=function(_0x3f5cad,_0x3b6d59,_0x191acc){try{if(!_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x77')]){throw new Error('No\x20ListId\x20specified');}if(!_0x3f5cad[_0x8e88('0x54')]['binding_keys']){throw new Error('No\x20association\x20keys\x20specified!');}if(!_0x3f5cad['body'][_0x8e88('0x90')]){throw new Error(_0x8e88('0x91'));}if(!_0x3f5cad[_0x8e88('0x54')]['socket_timestamp']){throw new Error('Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed');}var _0x27ca8c=_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x92')][_0x8e88('0x93')](',');var _0x2bab50=_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x90')][_0x8e88('0x93')](',');if(!_0x27ca8c['length']||!_0x2bab50[_0x8e88('0x37')]||_0x27ca8c[_0x8e88('0x37')]!==_0x2bab50['length']){throw new Error(_0x8e88('0x94'));}_0x3f5cad[_0x8e88('0x54')]['fields']=_['zipObject'](_0x27ca8c,_0x2bab50);if(!_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x36')][_0x8e88('0x86')]){throw new Error(_0x8e88('0x95'));}if(!_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x36')][_0x8e88('0x96')]){throw new Error(_0x8e88('0x97'));}var _0x55ca29=path[_0x8e88('0x59')](config['root'],_0x8e88('0x98'),_0x3f5cad[_0x8e88('0x99')][_0x8e88('0x9a')]);fs['chmodSync'](_0x55ca29,parseInt(_0x8e88('0x9b'),0x8));var _0x5a9efa=require(_0x8e88('0x9c'))[_0x8e88('0x9d')](path[_0x8e88('0x59')](__dirname,_0x8e88('0x9e')),[_0x55ca29,_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x92')],_0x3f5cad[_0x8e88('0x54')]['binding_values'],_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x77')],_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x9f')],_0x3f5cad[_0x8e88('0x54')][_0x8e88('0x75')],_0x3f5cad[_0x8e88('0x54')][_0x8e88('0xa0')]]);return _0x3b6d59[_0x8e88('0x20')](0xc8)['json']({'message':_0x8e88('0xa1'),'pid':_0x5a9efa[_0x8e88('0xa2')]});}catch(_0x22d1ef){return _0x3b6d59[_0x8e88('0x20')](0x1f4)[_0x8e88('0xa3')](_0x22d1ef);}};exports[_0x8e88('0xa4')]=function(_0x33a187,_0x23e439,_0xc8ee9){var _0x5d028d=fs['createReadStream'](_0x33a187['file'][_0x8e88('0x9')]);Papa['parse'](_0x5d028d,{'header':!![],'skipEmptyLines':!![],'preview':0x1,'complete':function(_0x2be8ce){return _0x23e439[_0x8e88('0x20')](0xc8)[_0x8e88('0x22')]({'file':_0x33a187[_0x8e88('0x99')],'fields':_0x2be8ce['meta'][_0x8e88('0x36')]});}});};exports[_0x8e88('0xa5')]=function(_0x54e0be,_0x453997,_0x416be5){return db[_0x8e88('0xa6')][_0x8e88('0x4b')]({'raw':!![],'attributes':['id'],'where':{'role':_0x8e88('0xa7')}})['then'](function(_0x16ca51){var _0x24846e=![];if(!_0x54e0be[_0x8e88('0x54')][_0x8e88('0x77')]){throw new Error(_0x8e88('0xa8'));}if(!_0x54e0be[_0x8e88('0x54')][_0x8e88('0xa9')][_0x8e88('0x86')]){throw new Error(_0x8e88('0x95'));}if(!_0x54e0be[_0x8e88('0x54')][_0x8e88('0xa9')][_0x8e88('0x96')]){throw new Error('No\x20firstName\x20column\x20specified');}if(!_0x54e0be[_0x8e88('0x54')]['socket_timestamp']){throw new Error('Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed');}var _0x36a59f=require(_0x8e88('0x9c'))[_0x8e88('0x9d')](path[_0x8e88('0x59')](__dirname,_0x8e88('0xaa')),[_0x54e0be[_0x8e88('0x7a')]['id'],JSON[_0x8e88('0xab')](_0x54e0be['body']),JSON[_0x8e88('0xab')](_0x16ca51)]);_0x36a59f['on'](_0x8e88('0xac'),function(_0x768bcd){_0x24846e=!![];return _0x453997[_0x8e88('0x20')](0xc8)['json']({'message':'start\x20child\x20process\x20correctly!','pid':_0x36a59f[_0x8e88('0xa2')]});});_0x36a59f['on'](_0x8e88('0xad'),function(_0x50d097){if(_0x50d097&&!_0x24846e){return _0x453997[_0x8e88('0x20')](0x1f4)[_0x8e88('0x22')]({'message':_0x8e88('0xae'),'pid':_0x36a59f[_0x8e88('0xa2')]});}});})['catch'](handleError(_0x453997,null));};
\ No newline at end of file
+var _0xbf1b=['displayName','CmCustomField','alias','hasOwnProperty','body','from','get','mergeWith','isArray','tags','info','CmHopper','[CmContact][merge][destroy][CmHopper],\x20%s','CmHopperBlack','[CmContact][merge][destroy][CmHopperBlack],\x20%s','create','ChatInteraction','update','ChatOfflineMessage','MailMessage','MailInteraction','SmsInteraction','SmsMessage','FaxInteraction','FaxMessage','OpenchannelMessage','CmHopperFinal','CmHopperHistory','ReportAgentPreview','FaxQueueReport','MailQueueReport','OpenchannelQueueReport','JscriptySessionReport','join','bulkCreate','each','duplicates','ListId','findOrCreate','show','find','params','$and','omit','format','cf_%d','pickBy','table','cm_contacts','setFields','id\x20=\x20?','toParam','sequelize','getTags','findOne','sort','setTags','getHoppers','rawAttributes','ContactId','includeAll','getHopperHistories','getHopperFinals','rows','getJscriptySessions','binding_keys','No\x20association\x20keys\x20specified!','binding_values','No\x20association\x20values\x20specified!','socket_timestamp','split','Incorrect\x20binding\x20parameters\x20passed!','phone','No\x20phone\x20column\x20specified','firstName','No\x20firstName\x20column\x20specified','root','server/files/tmp','filename','chmodSync','0777','fork','../../components/import/cm/csv','CompanyId','pid','upload','createReadStream','file','parse','meta','User','No\x20ListId\x20specified','binding','Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed','child_process','message','start\x20child\x20process\x20correctly!','exit','error\x20child\x20process','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','socket.io-emitter','./cmContact.socket','sendStatus','status','end','json','count','offset','limit','apply','reject','then','destroy','error','stack','name','send','index','CmContact','describe','model','keys','query','intersection','attributes','fields','length','nolimit','order','where','filters','pick','merge','map','filter','options','tag','include','push','Tag','Tags','color','ThroughTags','findAll','catch','startsWith','cf_','columnName'];(function(_0x104c9b,_0x56944d){var _0x39ba4d=function(_0x5d81a1){while(--_0x5d81a1){_0x104c9b['push'](_0x104c9b['shift']());}};_0x39ba4d(++_0x56944d);}(_0xbf1b,0x1c1));var _0xbbf1=function(_0x50007c,_0x1cbf11){_0x50007c=_0x50007c-0x0;var _0x5c1ec7=_0xbf1b[_0x50007c];return _0x5c1ec7;};'use strict';var pdf=require(_0xbbf1('0x0'));var emlformat=require(_0xbbf1('0x1'));var rimraf=require(_0xbbf1('0x2'));var zipdir=require(_0xbbf1('0x3'));var jsonpatch=require(_0xbbf1('0x4'));var rp=require(_0xbbf1('0x5'));var moment=require(_0xbbf1('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xbbf1('0x7'));var util=require(_0xbbf1('0x8'));var path=require(_0xbbf1('0x9'));var sox=require(_0xbbf1('0xa'));var csv=require(_0xbbf1('0xb'));var ejs=require(_0xbbf1('0xc'));var fs=require('fs');var _=require(_0xbbf1('0xd'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xbbf1('0xe'));var deskjs=require(_0xbbf1('0xf'));var toCsv=require('to-csv');var querystring=require(_0xbbf1('0x10'));var Papa=require('papaparse');var authService=require(_0xbbf1('0x11'));var hardwareService=require(_0xbbf1('0x12'));var Redis=require(_0xbbf1('0x13'));var qs=require(_0xbbf1('0x14'));var logger=require(_0xbbf1('0x15'))(_0xbbf1('0x16'));var utils=require(_0xbbf1('0x17'));var config=require(_0xbbf1('0x18'));var db=require(_0xbbf1('0x19'))['db'];config[_0xbbf1('0x1a')]=_[_0xbbf1('0x1b')](config[_0xbbf1('0x1a')],{'host':'localhost','port':0x18eb});var socket=require(_0xbbf1('0x1c'))(new Redis(config[_0xbbf1('0x1a')]));require(_0xbbf1('0x1d'))['register'](socket);function respondWithStatusCode(_0x15ae8b,_0x2ebf14){_0x2ebf14=_0x2ebf14||0xcc;return function(_0x10a507){if(_0x10a507){return _0x15ae8b[_0xbbf1('0x1e')](_0x2ebf14);}return _0x15ae8b[_0xbbf1('0x1f')](_0x2ebf14)[_0xbbf1('0x20')]();};}function respondWithResult(_0x1f1fad,_0x19bba9){_0x19bba9=_0x19bba9||0xc8;return function(_0x12ab80){if(_0x12ab80){return _0x1f1fad['status'](_0x19bba9)[_0xbbf1('0x21')](_0x12ab80);}};}function respondWithFilteredResult(_0x2b243d,_0x18b201){return function(_0x198e48){if(_0x198e48){var _0x3710ef=_0x198e48[_0xbbf1('0x22')],_0x5d9c76=_0x18b201[_0xbbf1('0x23')],_0x4a5f7e=_0x18b201['offset']+_0x18b201[_0xbbf1('0x24')],_0x4b8428;if(_0x4a5f7e>=_0x3710ef){_0x4a5f7e=_0x3710ef;_0x4b8428=0xc8;}else{_0x4b8428=0xce;}_0x2b243d[_0xbbf1('0x1f')](_0x4b8428);return _0x2b243d['set']('Content-Range',_0x5d9c76+'-'+_0x4a5f7e+'/'+_0x3710ef)[_0xbbf1('0x21')](_0x198e48);}return null;};}function patchUpdates(_0x2cbd00){return function(_0x14c678){try{jsonpatch[_0xbbf1('0x25')](_0x14c678,_0x2cbd00,!![]);}catch(_0x440b31){return BPromise[_0xbbf1('0x26')](_0x440b31);}return _0x14c678['save']();};}function saveUpdates(_0x78b445,_0x1a9e04){return function(_0x5e2190){if(_0x5e2190){return _0x5e2190['update'](_0x78b445)[_0xbbf1('0x27')](function(_0x481d0f){return _0x481d0f;});}return null;};}function removeEntity(_0x3981ed,_0x514228){return function(_0xda9cf7){if(_0xda9cf7){return _0xda9cf7[_0xbbf1('0x28')]()[_0xbbf1('0x27')](function(){_0x3981ed[_0xbbf1('0x1f')](0xcc)[_0xbbf1('0x20')]();});}};}function handleEntityNotFound(_0xf6eaa3,_0x31fdb0){return function(_0x45eb5d){if(!_0x45eb5d){_0xf6eaa3[_0xbbf1('0x1e')](0x194);}return _0x45eb5d;};}function handleError(_0xadbd5,_0x2bda04){_0x2bda04=_0x2bda04||0x1f4;return function(_0x4adcf8){logger[_0xbbf1('0x29')](_0x4adcf8[_0xbbf1('0x2a')]);if(_0x4adcf8['name']){delete _0x4adcf8[_0xbbf1('0x2b')];}_0xadbd5[_0xbbf1('0x1f')](_0x2bda04)[_0xbbf1('0x2c')](_0x4adcf8);};}exports[_0xbbf1('0x2d')]=function(_0x33fd15,_0x307299){var _0x511ec7={},_0x3389fc={},_0x57739b={'count':0x0,'rows':[]};return db[_0xbbf1('0x2e')][_0xbbf1('0x2f')]()[_0xbbf1('0x27')](function(_0x4956c9){_0x3389fc[_0xbbf1('0x30')]=_[_0xbbf1('0x31')](_0x4956c9);_0x3389fc[_0xbbf1('0x32')]=_[_0xbbf1('0x31')](_0x33fd15[_0xbbf1('0x32')]);_0x3389fc['filters']=_[_0xbbf1('0x33')](_0x3389fc[_0xbbf1('0x30')],_0x3389fc[_0xbbf1('0x32')]);_0x511ec7[_0xbbf1('0x34')]=_[_0xbbf1('0x33')](_0x3389fc[_0xbbf1('0x30')],qs['fields'](_0x33fd15[_0xbbf1('0x32')][_0xbbf1('0x35')]));_0x511ec7['attributes']=_0x511ec7[_0xbbf1('0x34')][_0xbbf1('0x36')]?_0x511ec7['attributes']:_0x3389fc[_0xbbf1('0x30')];if(!_0x33fd15['query']['hasOwnProperty'](_0xbbf1('0x37'))){_0x511ec7[_0xbbf1('0x24')]=qs[_0xbbf1('0x24')](_0x33fd15[_0xbbf1('0x32')][_0xbbf1('0x24')]);_0x511ec7['offset']=qs[_0xbbf1('0x23')](_0x33fd15['query']['offset']);}_0x511ec7[_0xbbf1('0x38')]=qs['sort'](_0x33fd15[_0xbbf1('0x32')]['sort']);_0x511ec7[_0xbbf1('0x39')]=qs[_0xbbf1('0x3a')](_[_0xbbf1('0x3b')](_0x33fd15[_0xbbf1('0x32')],_0x3389fc['filters']));if(_0x33fd15[_0xbbf1('0x32')]['filter']){_0x511ec7[_0xbbf1('0x39')]=_[_0xbbf1('0x3c')](_0x511ec7[_0xbbf1('0x39')],{'$or':_[_0xbbf1('0x3d')](_0x511ec7['attributes'],function(_0x109526){var _0x5d1844={};_0x5d1844[_0x109526]={'$like':'%'+_0x33fd15[_0xbbf1('0x32')][_0xbbf1('0x3e')]+'%'};return _0x5d1844;})});}_0x511ec7=_[_0xbbf1('0x3c')]({},_0x511ec7,_0x33fd15[_0xbbf1('0x3f')]);var _0x3c48cb={'where':_0x511ec7[_0xbbf1('0x39')]};_0x3c48cb['include']=[];if(_0x33fd15[_0xbbf1('0x32')][_0xbbf1('0x40')]){_0x3c48cb[_0xbbf1('0x41')][_0xbbf1('0x42')]({'model':db[_0xbbf1('0x43')],'as':_0xbbf1('0x44'),'attributes':['id'],'where':{'id':_0x33fd15[_0xbbf1('0x32')][_0xbbf1('0x40')]},'required':!![]});_0x3c48cb['distinct']=!![];}return db[_0xbbf1('0x2e')][_0xbbf1('0x22')](_0x3c48cb)['then'](function(_0x5315a6){_0x57739b[_0xbbf1('0x22')]=_0x5315a6;if(_0x33fd15[_0xbbf1('0x32')]['includeAll']){_0x511ec7['include']=[{'model':db[_0xbbf1('0x43')],'as':_0xbbf1('0x44'),'attributes':['id',_0xbbf1('0x2b'),_0xbbf1('0x45')],'required':_0x33fd15[_0xbbf1('0x32')][_0xbbf1('0x40')]?!![]:![]},{'model':db[_0xbbf1('0x43')],'as':_0xbbf1('0x46'),'attributes':['id',_0xbbf1('0x2b'),_0xbbf1('0x45')],'through':_0x33fd15[_0xbbf1('0x32')]['tag']?{'attributes':[],'where':{'TagId':_0x33fd15[_0xbbf1('0x32')][_0xbbf1('0x40')]||undefined}}:{},'required':_0x33fd15[_0xbbf1('0x32')][_0xbbf1('0x40')]?!![]:![]}];}return db[_0xbbf1('0x2e')][_0xbbf1('0x47')](_0x511ec7);})['then'](function(_0xe5d1b2){_0x57739b['rows']=_0xe5d1b2;return _0x57739b;})[_0xbbf1('0x27')](respondWithFilteredResult(_0x307299,_0x511ec7))[_0xbbf1('0x48')](handleError(_0x307299,null));});};exports['destroy']=function(_0x32619d,_0x5b53e4){return db[_0xbbf1('0x2e')]['find']({'where':{'id':_0x32619d['params']['id']}})['then'](handleEntityNotFound(_0x5b53e4,null))[_0xbbf1('0x27')](removeEntity(_0x5b53e4,null))['catch'](handleError(_0x5b53e4,null));};exports[_0xbbf1('0x2f')]=function(_0x584e7e,_0x3d21a3){return db['CmContact'][_0xbbf1('0x2f')]()[_0xbbf1('0x27')](function(_0x5a7622){for(var _0x1a73d2=0x0;_0x1a73d2<Object['keys'](_0x5a7622)['length'];_0x1a73d2++){var _0x56248d=Object[_0xbbf1('0x31')](_0x5a7622)[_0x1a73d2];if(!_[_0xbbf1('0x49')](_0x56248d,_0xbbf1('0x4a'))){_0x5a7622[_0x56248d][_0xbbf1('0x4b')]=_0x56248d;_0x5a7622[_0x56248d][_0xbbf1('0x4c')]=_0x56248d;}}return _0x5a7622;})['then'](function(_0x5d4c95){var _0xdb02f3={'where':{'$or':[{'ListId':_0x584e7e['query']['id']},{'ListId':null}]},'raw':!![]};return db[_0xbbf1('0x4d')][_0xbbf1('0x47')](_0xdb02f3)['then'](function(_0x37775d){for(var _0x3148cd=0x0;_0x3148cd<_0x37775d[_0xbbf1('0x36')];_0x3148cd++){var _0x5e4e60=_0xbbf1('0x4a')+_0x37775d[_0x3148cd]['id'];_0x5d4c95[_0x5e4e60][_0xbbf1('0x4b')]=_0x5e4e60;_0x5d4c95[_0x5e4e60][_0xbbf1('0x4c')]=_0x37775d[_0x3148cd][_0xbbf1('0x4e')];}for(var _0x3148cd=0x0;_0x3148cd<Object[_0xbbf1('0x31')](_0x5d4c95)[_0xbbf1('0x36')];_0x3148cd++){var _0x5e4e60=Object[_0xbbf1('0x31')](_0x5d4c95)[_0x3148cd];if(!_0x5d4c95[_0x5e4e60][_0xbbf1('0x4f')](_0xbbf1('0x4b'))){delete _0x5d4c95[_0x5e4e60];}}return _0x5d4c95;});})[_0xbbf1('0x27')](respondWithResult(_0x3d21a3,null))[_0xbbf1('0x48')](handleError(_0x3d21a3,null));};exports['merge']=function(_0x424815,_0x51c0bc){var _0x5465f6;var _0x293a5c;var _0x195565;if(_0x424815[_0xbbf1('0x50')]['id']){delete _0x424815['body']['id'];}return db['CmContact'][_0xbbf1('0x47')]({'where':{'id':[_0x424815[_0xbbf1('0x50')]['to'],_0x424815[_0xbbf1('0x50')][_0xbbf1('0x51')]]}})[_0xbbf1('0x27')](function(_0x548034){if(_0x548034){if(_0x548034[_0xbbf1('0x36')]!==0x2){return null;}_0x548034[0x0]=_0x548034[0x0][_0xbbf1('0x52')]({'plain':!![]});_0x548034[0x1]=_0x548034[0x1][_0xbbf1('0x52')]({'plain':!![]});delete _0x548034[0x0]['id'];delete _0x548034[0x1]['id'];return _[_0xbbf1('0x53')](_0x548034[0x0],_0x548034[0x1],function(_0x1ef86c,_0x284cb2){if(Array[_0xbbf1('0x54')](_0x284cb2)&&!_0x284cb2['length']){return _0x1ef86c;}else if(!_0x284cb2){return _0x1ef86c;}});}})[_0xbbf1('0x27')](handleEntityNotFound(_0x51c0bc,null))[_0xbbf1('0x27')](function(_0xb774c1){if(_0xb774c1){if(_0xb774c1[_0xbbf1('0x55')]&&_['isArray'](_0xb774c1[_0xbbf1('0x55')])){_0xb774c1[_0xbbf1('0x55')]=_0xb774c1[_0xbbf1('0x55')]['join']();}logger[_0xbbf1('0x56')]('[CmContact][merge]\x20to\x20%s\x20from\x20%s',_0x424815['body']['to'],_0x424815[_0xbbf1('0x50')][_0xbbf1('0x51')]);return db[_0xbbf1('0x57')][_0xbbf1('0x28')]({'where':{'ContactId':[_0x424815['body']['to'],_0x424815[_0xbbf1('0x50')]['from']]}})[_0xbbf1('0x27')](function(_0x589323){logger[_0xbbf1('0x56')](_0xbbf1('0x58'),_0x589323);return db[_0xbbf1('0x59')]['destroy']({'where':{'ContactId':[_0x424815[_0xbbf1('0x50')]['to'],_0x424815[_0xbbf1('0x50')]['from']]}})[_0xbbf1('0x27')](function(_0x20a7fd){logger[_0xbbf1('0x56')](_0xbbf1('0x5a'),_0x20a7fd);return db['CmContact'][_0xbbf1('0x5b')](_0xb774c1);});});}})['then'](function(_0x399c46){if(_0x399c46){_0x5465f6=_0x399c46;_0x293a5c={'ContactId':_0x5465f6['id']};_0x195565={'where':{'ContactId':[_0x424815['body']['to'],_0x424815[_0xbbf1('0x50')][_0xbbf1('0x51')]]}};return db[_0xbbf1('0x5c')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db['ChatMessage']['update'](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x5e')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db['MailInteraction'][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x5f')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x60')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x5f')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})['then'](function(){if(_0x5465f6){return db[_0xbbf1('0x61')]['update'](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x62')]['update'](_0x293a5c,_0x195565);}})['then'](function(){if(_0x5465f6){return db[_0xbbf1('0x63')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x64')]['update'](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db['OpenchannelInteraction'][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x65')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})['then'](function(){if(_0x5465f6){return db[_0xbbf1('0x66')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x67')]['update'](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x68')]['update'](_0x293a5c,_0x195565);}})['then'](function(){if(_0x5465f6){return db['VoiceCallReport'][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db['ChatQueueReport'][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x69')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x6a')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x6b')]['update'](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db['SmsQueueReport']['update'](_0x293a5c,_0x195565);}})[_0xbbf1('0x27')](function(){if(_0x5465f6){return db[_0xbbf1('0x6c')][_0xbbf1('0x5d')](_0x293a5c,_0x195565);}})['then'](function(){if(_0x5465f6){return db[_0xbbf1('0x2e')][_0xbbf1('0x28')]({'where':{'id':[_0x424815[_0xbbf1('0x50')]['to'],_0x424815['body'][_0xbbf1('0x51')]]}});}})['then'](function(){if(_0x5465f6){return _0x5465f6;}})['then'](respondWithResult(_0x51c0bc,null))['catch'](handleError(_0x51c0bc,null));};exports['create']=function(_0x40de16,_0x52f6e0){return db[_0xbbf1('0x2e')][_0xbbf1('0x2f')]()[_0xbbf1('0x27')](function(_0xb61543){if(_0x40de16['body'][_0xbbf1('0x55')]&&_[_0xbbf1('0x54')](_0x40de16[_0xbbf1('0x50')][_0xbbf1('0x55')])){if(_0x40de16[_0xbbf1('0x50')][_0xbbf1('0x55')][_0xbbf1('0x36')]){_0x40de16['body'][_0xbbf1('0x55')]=_0x40de16['body'][_0xbbf1('0x55')][_0xbbf1('0x6d')](';')+';';}else{_0x40de16['body'][_0xbbf1('0x55')]=null;}}else{_0x40de16['body'][_0xbbf1('0x55')]=null;}return db[_0xbbf1('0x2e')][_0xbbf1('0x5b')](_0x40de16[_0xbbf1('0x50')],{'fields':_[_0xbbf1('0x31')](_0xb61543),'raw':!![]});})[_0xbbf1('0x27')](respondWithResult(_0x52f6e0,0xc9))[_0xbbf1('0x48')](handleError(_0x52f6e0,null));};exports[_0xbbf1('0x6e')]=function(_0x2b6308,_0x2c2fac){var _0x2c94ff=[];var _0x14181a=0x0;var _0x517fdf=0x0;var _0x5017c7=0x0;return db['CmContact'][_0xbbf1('0x2f')]()[_0xbbf1('0x27')](function(_0x27af85){return BPromise[_0xbbf1('0x6f')](_0x2b6308['body'],function(_0x12df71){var _0x509f8f={'where':{'$or':[]},'defaults':_0x12df71,'fields':_['keys'](_0x27af85),'raw':!![]};if(_0x12df71[_0xbbf1('0x70')]){for(var _0x246456=0x0;_0x246456<_0x12df71[_0xbbf1('0x70')]['length'];_0x246456++){var _0xc258e2={};_0xc258e2[_0x12df71[_0xbbf1('0x70')][_0x246456]]=_0x12df71[_0x12df71[_0xbbf1('0x70')][_0x246456]];_0x509f8f[_0xbbf1('0x39')]['$or']['push'](_0xc258e2);}_0x509f8f[_0xbbf1('0x39')][_0xbbf1('0x71')]=_0x12df71[_0xbbf1('0x71')];}return db[_0xbbf1('0x2e')][_0xbbf1('0x72')](_0x509f8f)['spread'](function(_0xfdf66c,_0x40d2ab){if(_0x40d2ab){_0x14181a++;}else{_0x5017c7++;}})[_0xbbf1('0x48')](function(_0x4d6f33){console[_0xbbf1('0x29')](_0x4d6f33);_0x517fdf++;});});})[_0xbbf1('0x27')](function(_0x58001f){if(_0x58001f){return{'success':_0x14181a,'failure':_0x517fdf,'duplicates':_0x5017c7};}})[_0xbbf1('0x27')](respondWithResult(_0x2c2fac,0xc9))[_0xbbf1('0x48')](handleError(_0x2c2fac,null));};exports[_0xbbf1('0x73')]=function(_0x941581,_0x3c6ab3,_0x232ff7){var _0x5783d2;return db[_0xbbf1('0x2e')][_0xbbf1('0x2f')]()[_0xbbf1('0x27')](function(_0xe665a1){return db[_0xbbf1('0x2e')][_0xbbf1('0x74')]({'where':{'id':_0x941581[_0xbbf1('0x75')]['id']},'include':[{'model':db['Tag'],'as':_0xbbf1('0x44'),'attributes':['id',_0xbbf1('0x2b'),_0xbbf1('0x45')],'required':_0x941581['query'][_0xbbf1('0x40')]?!![]:![]}],'attributes':_[_0xbbf1('0x31')](_0xe665a1)});})[_0xbbf1('0x27')](function(_0xe46956){_0x5783d2=_0xe46956[_0xbbf1('0x52')]({'plain':!![]});var _0xd8fa5={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0xe46956&&_0xe46956[_0xbbf1('0x71')]){if(_0xe46956[_0xbbf1('0x71')]){_0xd8fa5[_0xbbf1('0x39')][_0xbbf1('0x76')][_0xbbf1('0x42')]({'ListId':{'$ne':_0xe46956[_0xbbf1('0x71')]}});}}return db[_0xbbf1('0x4d')]['findAll'](_0xd8fa5);})[_0xbbf1('0x27')](function(_0x53390e){return _[_0xbbf1('0x77')](_0x5783d2,_[_0xbbf1('0x3d')](_0x53390e,function(_0x2a24e8){return util[_0xbbf1('0x78')](_0xbbf1('0x79'),_0x2a24e8['id']);}));})[_0xbbf1('0x27')](handleEntityNotFound(_0x3c6ab3,null))[_0xbbf1('0x27')](respondWithResult(_0x3c6ab3,null))[_0xbbf1('0x48')](handleError(_0x3c6ab3,null));};exports[_0xbbf1('0x5d')]=function(_0x2b955a,_0x1f2fed){var _0x352721;if(_0x2b955a[_0xbbf1('0x50')]['id']){delete _0x2b955a['body']['id'];}return db[_0xbbf1('0x2e')][_0xbbf1('0x74')]({'where':{'id':_0x2b955a[_0xbbf1('0x75')]['id']}})[_0xbbf1('0x27')](handleEntityNotFound(_0x1f2fed,null))[_0xbbf1('0x27')](saveUpdates(_0x2b955a[_0xbbf1('0x50')],null))[_0xbbf1('0x27')](function(_0x297843){_0x352721=_0x297843;var _0x5ae82e={'where':{'$and':[{'ListId':{'$ne':null}}]}};if(_0x297843&&_0x297843[_0xbbf1('0x71')]){if(_0x297843[_0xbbf1('0x71')]){_0x5ae82e[_0xbbf1('0x39')][_0xbbf1('0x76')][_0xbbf1('0x42')]({'ListId':{'$ne':_0x297843[_0xbbf1('0x71')]}});}}return db[_0xbbf1('0x4d')][_0xbbf1('0x47')](_0x5ae82e);})['then'](function(_0x2cce73){if(_0x2cce73){return _[_0xbbf1('0x77')](_[_0xbbf1('0x7a')](_0x2b955a['body'],function(_0x237a8a,_0x3c79b8){return _[_0xbbf1('0x49')](_0x3c79b8,_0xbbf1('0x4a'));}),_[_0xbbf1('0x3d')](_0x2cce73,function(_0x3613cd){return util[_0xbbf1('0x78')](_0xbbf1('0x79'),_0x3613cd['id']);}));}})['then'](function(_0x1b242b){if(_0x1b242b&&!_['isEmpty'](_0x1b242b)){var _0x1e1851=squel[_0xbbf1('0x5d')]()[_0xbbf1('0x7b')](_0xbbf1('0x7c'))[_0xbbf1('0x7d')](_0x1b242b)[_0xbbf1('0x39')](_0xbbf1('0x7e'),_0x2b955a['params']['id'])[_0xbbf1('0x7f')]();return db[_0xbbf1('0x80')][_0xbbf1('0x32')](_0x1e1851['text'],{'replacements':_0x1e1851['values']});}})[_0xbbf1('0x27')](function(){if(_0x2b955a[_0xbbf1('0x50')]['phone']&&_0x352721){return db[_0xbbf1('0x57')][_0xbbf1('0x5d')]({'phone':_0x2b955a[_0xbbf1('0x50')]['phone']},{'where':{'ContactId':_0x352721['id']}});}})['then'](function(){return _0x352721;})[_0xbbf1('0x27')](respondWithResult(_0x1f2fed,null))[_0xbbf1('0x48')](handleError(_0x1f2fed,null));};exports[_0xbbf1('0x81')]=function(_0x5a1e3a,_0x1023bd,_0x1dcad2){var _0xd92159={};var _0x52152c={};var _0x5473d6;var _0x504fab;return db[_0xbbf1('0x2e')][_0xbbf1('0x82')]({'where':{'id':_0x5a1e3a[_0xbbf1('0x75')]['id']}})['then'](handleEntityNotFound(_0x1023bd,null))['then'](function(_0x56618b){if(_0x56618b){_0x5473d6=_0x56618b;_0x52152c[_0xbbf1('0x30')]=_[_0xbbf1('0x31')](db[_0xbbf1('0x43')]['rawAttributes']);_0x52152c[_0xbbf1('0x32')]=_[_0xbbf1('0x31')](_0x5a1e3a['query']);_0x52152c['filters']=_['intersection'](_0x52152c['model'],_0x52152c[_0xbbf1('0x32')]);_0xd92159[_0xbbf1('0x34')]=_[_0xbbf1('0x33')](_0x52152c[_0xbbf1('0x30')],qs[_0xbbf1('0x35')](_0x5a1e3a[_0xbbf1('0x32')][_0xbbf1('0x35')]));_0xd92159[_0xbbf1('0x34')]=_0xd92159[_0xbbf1('0x34')][_0xbbf1('0x36')]?_0xd92159[_0xbbf1('0x34')]:_0x52152c[_0xbbf1('0x30')];_0xd92159[_0xbbf1('0x38')]=qs[_0xbbf1('0x83')](_0x5a1e3a[_0xbbf1('0x32')]['sort']);_0xd92159[_0xbbf1('0x39')]=qs['filters'](_['pick'](_0x5a1e3a[_0xbbf1('0x32')],_0x52152c[_0xbbf1('0x3a')]));if(_0x5a1e3a[_0xbbf1('0x32')][_0xbbf1('0x3e')]){_0xd92159[_0xbbf1('0x39')]=_[_0xbbf1('0x3c')](_0xd92159[_0xbbf1('0x39')],{'$or':_[_0xbbf1('0x3d')](_0xd92159[_0xbbf1('0x34')],function(_0x46e5a6){var _0x4b0394={};_0x4b0394[_0x46e5a6]={'$like':'%'+_0x5a1e3a[_0xbbf1('0x32')][_0xbbf1('0x3e')]+'%'};return _0x4b0394;})});}_0xd92159=_['merge']({},_0xd92159,_0x5a1e3a[_0xbbf1('0x3f')]);return _0x5473d6['getTags'](_0xd92159);}})[_0xbbf1('0x27')](function(_0x5ab110){if(_0x5ab110){_0x504fab=_0x5ab110['length'];if(!_0x5a1e3a[_0xbbf1('0x32')][_0xbbf1('0x4f')](_0xbbf1('0x37'))){_0xd92159[_0xbbf1('0x24')]=qs[_0xbbf1('0x24')](_0x5a1e3a[_0xbbf1('0x32')][_0xbbf1('0x24')]);_0xd92159[_0xbbf1('0x23')]=qs[_0xbbf1('0x23')](_0x5a1e3a['query']['offset']);}return _0x5473d6[_0xbbf1('0x81')](_0xd92159);}})[_0xbbf1('0x27')](function(_0x13c18f){if(_0x13c18f){return _0x13c18f?{'count':_0x504fab,'rows':_0x13c18f}:null;}})[_0xbbf1('0x27')](respondWithResult(_0x1023bd,null))[_0xbbf1('0x48')](handleError(_0x1023bd,null));};exports[_0xbbf1('0x84')]=function(_0x2839b1,_0xc15a5b,_0x24c46c){if(_0x2839b1['body']['id']){delete _0x2839b1['body']['id'];}return db['CmContact'][_0xbbf1('0x82')]({'where':{'id':_0x2839b1[_0xbbf1('0x75')]['id']}})[_0xbbf1('0x27')](handleEntityNotFound(_0xc15a5b,null))['then'](function(_0x29e3ca){if(_0x29e3ca){return _0x29e3ca[_0xbbf1('0x84')](_0x2839b1[_0xbbf1('0x50')]['ids']||[]);}return null;})[_0xbbf1('0x27')](respondWithResult(_0xc15a5b,null))[_0xbbf1('0x48')](handleError(_0xc15a5b,null));};exports[_0xbbf1('0x85')]=function(_0x520b08,_0x5716e3,_0x3cb68c){var _0x4b3a7c={'raw':![],'where':{}};var _0x59049c={};var _0x16b436={'count':0x0,'rows':[]};return db[_0xbbf1('0x2e')][_0xbbf1('0x82')]({'where':{'id':_0x520b08[_0xbbf1('0x75')]['id']}})[_0xbbf1('0x27')](handleEntityNotFound(_0x5716e3,null))['then'](function(_0x53f152){if(_0x53f152){_0x59049c[_0xbbf1('0x30')]=_[_0xbbf1('0x31')](db['CmHopper'][_0xbbf1('0x86')]);_0x59049c[_0xbbf1('0x32')]=_[_0xbbf1('0x31')](_0x520b08['query']);_0x59049c[_0xbbf1('0x3a')]=_[_0xbbf1('0x33')](_0x59049c['model'],_0x59049c[_0xbbf1('0x32')]);_0x4b3a7c[_0xbbf1('0x34')]=_[_0xbbf1('0x33')](_0x59049c[_0xbbf1('0x30')],qs[_0xbbf1('0x35')](_0x520b08[_0xbbf1('0x32')][_0xbbf1('0x35')]));_0x4b3a7c[_0xbbf1('0x34')]=_0x4b3a7c[_0xbbf1('0x34')]['length']?_0x4b3a7c['attributes']:_0x59049c['model'];if(!_0x520b08[_0xbbf1('0x32')]['hasOwnProperty']('nolimit')){_0x4b3a7c[_0xbbf1('0x24')]=qs['limit'](_0x520b08[_0xbbf1('0x32')][_0xbbf1('0x24')]);_0x4b3a7c[_0xbbf1('0x23')]=qs[_0xbbf1('0x23')](_0x520b08[_0xbbf1('0x32')][_0xbbf1('0x23')]);}_0x4b3a7c[_0xbbf1('0x38')]=qs[_0xbbf1('0x83')](_0x520b08['query'][_0xbbf1('0x83')]);_0x4b3a7c[_0xbbf1('0x39')]=qs[_0xbbf1('0x3a')](_[_0xbbf1('0x3b')](_0x520b08[_0xbbf1('0x32')],_0x59049c['filters']));_0x4b3a7c[_0xbbf1('0x39')][_0xbbf1('0x87')]=_0x53f152['id'];if(_0x520b08[_0xbbf1('0x32')][_0xbbf1('0x3e')]){_0x4b3a7c['where']=_[_0xbbf1('0x3c')](_0x4b3a7c[_0xbbf1('0x39')],{'$or':_['map'](_0x4b3a7c[_0xbbf1('0x34')],function(_0x5bc430){var _0x1f4042={};_0x1f4042[_0x5bc430]={'$like':'%'+_0x520b08['query'][_0xbbf1('0x3e')]+'%'};return _0x1f4042;})});}_0x4b3a7c=_[_0xbbf1('0x3c')]({},_0x4b3a7c,_0x520b08['options']);return db[_0xbbf1('0x57')][_0xbbf1('0x22')]({'where':_0x4b3a7c[_0xbbf1('0x39')]})['then'](function(_0x55cca8){_0x16b436[_0xbbf1('0x22')]=_0x55cca8;if(_0x520b08[_0xbbf1('0x32')][_0xbbf1('0x88')]){_0x4b3a7c['include']=[{'all':!![]}];}return db[_0xbbf1('0x57')][_0xbbf1('0x47')](_0x4b3a7c);})[_0xbbf1('0x27')](function(_0xf03eb0){_0x16b436['rows']=_0xf03eb0;return _0x16b436;});}})[_0xbbf1('0x27')](respondWithFilteredResult(_0x5716e3,_0x4b3a7c))[_0xbbf1('0x48')](handleError(_0x5716e3,null));};exports[_0xbbf1('0x89')]=function(_0x311397,_0x54afe8,_0x1d72cc){var _0x2a7f3e={'raw':!![],'where':{}};var _0x2861ce={};var _0xb67b74={'count':0x0,'rows':[]};return db['CmContact'][_0xbbf1('0x82')]({'where':{'id':_0x311397['params']['id']}})['then'](handleEntityNotFound(_0x54afe8,null))[_0xbbf1('0x27')](function(_0x401842){if(_0x401842){_0x2861ce[_0xbbf1('0x30')]=_[_0xbbf1('0x31')](db[_0xbbf1('0x67')][_0xbbf1('0x86')]);_0x2861ce[_0xbbf1('0x32')]=_[_0xbbf1('0x31')](_0x311397[_0xbbf1('0x32')]);_0x2861ce[_0xbbf1('0x3a')]=_[_0xbbf1('0x33')](_0x2861ce[_0xbbf1('0x30')],_0x2861ce[_0xbbf1('0x32')]);_0x2a7f3e[_0xbbf1('0x34')]=_['intersection'](_0x2861ce['model'],qs[_0xbbf1('0x35')](_0x311397[_0xbbf1('0x32')][_0xbbf1('0x35')]));_0x2a7f3e[_0xbbf1('0x34')]=_0x2a7f3e[_0xbbf1('0x34')][_0xbbf1('0x36')]?_0x2a7f3e[_0xbbf1('0x34')]:_0x2861ce[_0xbbf1('0x30')];if(!_0x311397[_0xbbf1('0x32')][_0xbbf1('0x4f')](_0xbbf1('0x37'))){_0x2a7f3e[_0xbbf1('0x24')]=qs['limit'](_0x311397[_0xbbf1('0x32')][_0xbbf1('0x24')]);_0x2a7f3e[_0xbbf1('0x23')]=qs[_0xbbf1('0x23')](_0x311397[_0xbbf1('0x32')][_0xbbf1('0x23')]);}_0x2a7f3e[_0xbbf1('0x38')]=qs[_0xbbf1('0x83')](_0x311397[_0xbbf1('0x32')][_0xbbf1('0x83')]);_0x2a7f3e[_0xbbf1('0x39')]=qs[_0xbbf1('0x3a')](_[_0xbbf1('0x3b')](_0x311397['query'],_0x2861ce[_0xbbf1('0x3a')]));_0x2a7f3e[_0xbbf1('0x39')]['ContactId']=_0x401842['id'];if(_0x311397[_0xbbf1('0x32')]['filter']){_0x2a7f3e['where']=_[_0xbbf1('0x3c')](_0x2a7f3e[_0xbbf1('0x39')],{'$or':_[_0xbbf1('0x3d')](_0x2a7f3e[_0xbbf1('0x34')],function(_0x1258fc){var _0x28d866={};_0x28d866[_0x1258fc]={'$like':'%'+_0x311397['query'][_0xbbf1('0x3e')]+'%'};return _0x28d866;})});}_0x2a7f3e=_[_0xbbf1('0x3c')]({},_0x2a7f3e,_0x311397[_0xbbf1('0x3f')]);return db['CmHopperHistory']['count']({'where':_0x2a7f3e[_0xbbf1('0x39')]})['then'](function(_0x232383){_0xb67b74['count']=_0x232383;if(_0x311397[_0xbbf1('0x32')][_0xbbf1('0x88')]){_0x2a7f3e['include']=[{'all':!![]}];}return db[_0xbbf1('0x67')][_0xbbf1('0x47')](_0x2a7f3e);})[_0xbbf1('0x27')](function(_0x5e32b9){_0xb67b74['rows']=_0x5e32b9;return _0xb67b74;});}})['then'](respondWithFilteredResult(_0x54afe8,_0x2a7f3e))['catch'](handleError(_0x54afe8,null));};exports[_0xbbf1('0x8a')]=function(_0x4d6c00,_0x5a2e37,_0x3a702c){var _0x3cdfe5={'raw':!![],'where':{}};var _0x33bf72={};var _0x5d18cc={'count':0x0,'rows':[]};return db['CmContact'][_0xbbf1('0x82')]({'where':{'id':_0x4d6c00[_0xbbf1('0x75')]['id']}})['then'](handleEntityNotFound(_0x5a2e37,null))['then'](function(_0x423e4e){if(_0x423e4e){_0x33bf72['model']=_[_0xbbf1('0x31')](db[_0xbbf1('0x66')][_0xbbf1('0x86')]);_0x33bf72[_0xbbf1('0x32')]=_[_0xbbf1('0x31')](_0x4d6c00[_0xbbf1('0x32')]);_0x33bf72[_0xbbf1('0x3a')]=_[_0xbbf1('0x33')](_0x33bf72[_0xbbf1('0x30')],_0x33bf72[_0xbbf1('0x32')]);_0x3cdfe5['attributes']=_['intersection'](_0x33bf72[_0xbbf1('0x30')],qs[_0xbbf1('0x35')](_0x4d6c00[_0xbbf1('0x32')][_0xbbf1('0x35')]));_0x3cdfe5['attributes']=_0x3cdfe5['attributes'][_0xbbf1('0x36')]?_0x3cdfe5[_0xbbf1('0x34')]:_0x33bf72[_0xbbf1('0x30')];if(!_0x4d6c00[_0xbbf1('0x32')][_0xbbf1('0x4f')](_0xbbf1('0x37'))){_0x3cdfe5[_0xbbf1('0x24')]=qs[_0xbbf1('0x24')](_0x4d6c00['query']['limit']);_0x3cdfe5[_0xbbf1('0x23')]=qs[_0xbbf1('0x23')](_0x4d6c00[_0xbbf1('0x32')][_0xbbf1('0x23')]);}_0x3cdfe5[_0xbbf1('0x38')]=qs[_0xbbf1('0x83')](_0x4d6c00[_0xbbf1('0x32')][_0xbbf1('0x83')]);_0x3cdfe5[_0xbbf1('0x39')]=qs[_0xbbf1('0x3a')](_[_0xbbf1('0x3b')](_0x4d6c00[_0xbbf1('0x32')],_0x33bf72['filters']));_0x3cdfe5['where']['ContactId']=_0x423e4e['id'];if(_0x4d6c00[_0xbbf1('0x32')][_0xbbf1('0x3e')]){_0x3cdfe5[_0xbbf1('0x39')]=_['merge'](_0x3cdfe5[_0xbbf1('0x39')],{'$or':_[_0xbbf1('0x3d')](_0x3cdfe5['attributes'],function(_0x396f62){var _0x4dd562={};_0x4dd562[_0x396f62]={'$like':'%'+_0x4d6c00['query'][_0xbbf1('0x3e')]+'%'};return _0x4dd562;})});}_0x3cdfe5=_[_0xbbf1('0x3c')]({},_0x3cdfe5,_0x4d6c00['options']);return db[_0xbbf1('0x66')]['count']({'where':_0x3cdfe5[_0xbbf1('0x39')]})[_0xbbf1('0x27')](function(_0x1eb953){_0x5d18cc['count']=_0x1eb953;if(_0x4d6c00[_0xbbf1('0x32')][_0xbbf1('0x88')]){_0x3cdfe5[_0xbbf1('0x41')]=[{'all':!![]}];}return db['CmHopperFinal'][_0xbbf1('0x47')](_0x3cdfe5);})[_0xbbf1('0x27')](function(_0x2fb402){_0x5d18cc[_0xbbf1('0x8b')]=_0x2fb402;return _0x5d18cc;});}})[_0xbbf1('0x27')](respondWithFilteredResult(_0x5a2e37,_0x3cdfe5))[_0xbbf1('0x48')](handleError(_0x5a2e37,null));};exports[_0xbbf1('0x8c')]=function(_0x282689,_0x28e1bf,_0x3ecb11){var _0x508a16={'raw':!![],'where':{}};var _0x49016f={};var _0x526f81={'count':0x0,'rows':[]};return db['CmContact'][_0xbbf1('0x82')]({'where':{'id':_0x282689['params']['id']}})[_0xbbf1('0x27')](handleEntityNotFound(_0x28e1bf,null))[_0xbbf1('0x27')](function(_0x1cac46){if(_0x1cac46){_0x49016f[_0xbbf1('0x30')]=_[_0xbbf1('0x31')](db[_0xbbf1('0x6c')]['rawAttributes']);_0x49016f['query']=_['keys'](_0x282689['query']);_0x49016f[_0xbbf1('0x3a')]=_[_0xbbf1('0x33')](_0x49016f[_0xbbf1('0x30')],_0x49016f[_0xbbf1('0x32')]);_0x508a16['attributes']=_[_0xbbf1('0x33')](_0x49016f[_0xbbf1('0x30')],qs['fields'](_0x282689[_0xbbf1('0x32')][_0xbbf1('0x35')]));_0x508a16[_0xbbf1('0x34')]=_0x508a16[_0xbbf1('0x34')][_0xbbf1('0x36')]?_0x508a16['attributes']:_0x49016f[_0xbbf1('0x30')];if(!_0x282689['query'][_0xbbf1('0x4f')](_0xbbf1('0x37'))){_0x508a16[_0xbbf1('0x24')]=qs[_0xbbf1('0x24')](_0x282689[_0xbbf1('0x32')][_0xbbf1('0x24')]);_0x508a16['offset']=qs[_0xbbf1('0x23')](_0x282689[_0xbbf1('0x32')]['offset']);}_0x508a16[_0xbbf1('0x38')]=qs[_0xbbf1('0x83')](_0x282689[_0xbbf1('0x32')]['sort']);_0x508a16[_0xbbf1('0x39')]=qs[_0xbbf1('0x3a')](_[_0xbbf1('0x3b')](_0x282689[_0xbbf1('0x32')],_0x49016f['filters']));_0x508a16[_0xbbf1('0x39')][_0xbbf1('0x87')]=_0x1cac46['id'];if(_0x282689['query'][_0xbbf1('0x3e')]){_0x508a16[_0xbbf1('0x39')]=_[_0xbbf1('0x3c')](_0x508a16[_0xbbf1('0x39')],{'$or':_['map'](_0x508a16['attributes'],function(_0x44d83a){var _0xd59218={};_0xd59218[_0x44d83a]={'$like':'%'+_0x282689['query'][_0xbbf1('0x3e')]+'%'};return _0xd59218;})});}_0x508a16=_['merge']({},_0x508a16,_0x282689['options']);return db[_0xbbf1('0x6c')][_0xbbf1('0x22')]({'where':_0x508a16[_0xbbf1('0x39')]})[_0xbbf1('0x27')](function(_0x126201){_0x526f81[_0xbbf1('0x22')]=_0x126201;if(_0x282689['query'][_0xbbf1('0x88')]){_0x508a16['include']=[{'all':!![]}];}return db[_0xbbf1('0x6c')]['findAll'](_0x508a16);})[_0xbbf1('0x27')](function(_0x3038b1){_0x526f81[_0xbbf1('0x8b')]=_0x3038b1;return _0x526f81;});}})[_0xbbf1('0x27')](respondWithFilteredResult(_0x28e1bf,_0x508a16))[_0xbbf1('0x48')](handleError(_0x28e1bf,null));};exports['uploadCsv']=function(_0x5ae07b,_0x2f5b34,_0x2456ad){try{if(!_0x5ae07b[_0xbbf1('0x50')]['ListId']){throw new Error('No\x20ListId\x20specified');}if(!_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x8d')]){throw new Error(_0xbbf1('0x8e'));}if(!_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x8f')]){throw new Error(_0xbbf1('0x90'));}if(!_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x91')]){throw new Error('Unable\x20to\x20synchronize\x20socket,\x20no\x20timestamp\x20passed');}var _0x150fe3=_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x8d')]['split'](',');var _0x14d2df=_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x8f')][_0xbbf1('0x92')](',');if(!_0x150fe3['length']||!_0x14d2df[_0xbbf1('0x36')]||_0x150fe3[_0xbbf1('0x36')]!==_0x14d2df[_0xbbf1('0x36')]){throw new Error(_0xbbf1('0x93'));}_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x35')]=_['zipObject'](_0x150fe3,_0x14d2df);if(!_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x35')][_0xbbf1('0x94')]){throw new Error(_0xbbf1('0x95'));}if(!_0x5ae07b[_0xbbf1('0x50')]['fields'][_0xbbf1('0x96')]){throw new Error(_0xbbf1('0x97'));}var _0x2ca2ae=path['join'](config[_0xbbf1('0x98')],_0xbbf1('0x99'),_0x5ae07b['file'][_0xbbf1('0x9a')]);fs[_0xbbf1('0x9b')](_0x2ca2ae,parseInt(_0xbbf1('0x9c'),0x8));var _0x49380c=require('child_process')[_0xbbf1('0x9d')](path[_0xbbf1('0x6d')](__dirname,_0xbbf1('0x9e')),[_0x2ca2ae,_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x8d')],_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x8f')],_0x5ae07b['body']['ListId'],_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x9f')],_0x5ae07b[_0xbbf1('0x50')][_0xbbf1('0x70')],_0x5ae07b[_0xbbf1('0x50')]['socket_timestamp']]);return _0x2f5b34[_0xbbf1('0x1f')](0xc8)[_0xbbf1('0x21')]({'message':'File\x20uploaded\x20correctly!','pid':_0x49380c[_0xbbf1('0xa0')]});}catch(_0x2b2e5f){return _0x2f5b34['status'](0x1f4)[_0xbbf1('0x2c')](_0x2b2e5f);}};exports[_0xbbf1('0xa1')]=function(_0x354026,_0x157d41,_0x14b59e){var _0x22be7e=fs[_0xbbf1('0xa2')](_0x354026[_0xbbf1('0xa3')][_0xbbf1('0x9')]);Papa[_0xbbf1('0xa4')](_0x22be7e,{'header':!![],'skipEmptyLines':!![],'preview':0x1,'complete':function(_0x552d78){return _0x157d41[_0xbbf1('0x1f')](0xc8)[_0xbbf1('0x21')]({'file':_0x354026[_0xbbf1('0xa3')],'fields':_0x552d78[_0xbbf1('0xa5')]['fields']});}});};exports['import']=function(_0x43c384,_0x43208a,_0x300c28){return db[_0xbbf1('0xa6')][_0xbbf1('0x47')]({'raw':!![],'attributes':['id'],'where':{'role':'agent'}})['then'](function(_0x384bf9){var _0x10a62d=![];if(!_0x43c384[_0xbbf1('0x50')]['ListId']){throw new Error(_0xbbf1('0xa7'));}if(!_0x43c384[_0xbbf1('0x50')][_0xbbf1('0xa8')][_0xbbf1('0x94')]){throw new Error(_0xbbf1('0x95'));}if(!_0x43c384[_0xbbf1('0x50')][_0xbbf1('0xa8')]['firstName']){throw new Error('No\x20firstName\x20column\x20specified');}if(!_0x43c384[_0xbbf1('0x50')][_0xbbf1('0x91')]){throw new Error(_0xbbf1('0xa9'));}var _0x42440a=require(_0xbbf1('0xaa'))[_0xbbf1('0x9d')](path[_0xbbf1('0x6d')](__dirname,'../../components/import/cm/csv2'),[_0x43c384[_0xbbf1('0x75')]['id'],JSON['stringify'](_0x43c384['body']),JSON['stringify'](_0x384bf9)]);_0x42440a['on'](_0xbbf1('0xab'),function(_0x1d45a2){_0x10a62d=!![];return _0x43208a[_0xbbf1('0x1f')](0xc8)[_0xbbf1('0x21')]({'message':_0xbbf1('0xac'),'pid':_0x42440a[_0xbbf1('0xa0')]});});_0x42440a['on'](_0xbbf1('0xad'),function(_0x79c037){if(_0x79c037&&!_0x10a62d){return _0x43208a[_0xbbf1('0x1f')](0x1f4)[_0xbbf1('0x21')]({'message':_0xbbf1('0xae'),'pid':_0x42440a['pid']});}});})['catch'](handleError(_0x43208a,null));};
\ No newline at end of file
index 2d6cd26..1652b24 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x571e=['emit','hasOwnProperty','hook','events','CmContact','setMaxListeners','save','update','remove'];(function(_0x20a822,_0x5dc295){var _0x3775d1=function(_0x5c53dd){while(--_0x5c53dd){_0x20a822['push'](_0x20a822['shift']());}};_0x3775d1(++_0x5dc295);}(_0x571e,0xed));var _0xe571=function(_0x50dfc5,_0x1281bc){_0x50dfc5=_0x50dfc5-0x0;var _0x5646fa=_0x571e[_0x50dfc5];return _0x5646fa;};'use strict';var EventEmitter=require(_0xe571('0x0'));var CmContact=require('../../mysqldb')['db'][_0xe571('0x1')];var CmContactEvents=new EventEmitter();CmContactEvents[_0xe571('0x2')](0x0);var events={'afterCreate':_0xe571('0x3'),'afterUpdate':_0xe571('0x4'),'afterDestroy':_0xe571('0x5')};function emitEvent(_0x5cf432){return function(_0x4f1a52,_0x1366e2,_0x5b250e){CmContactEvents['emit'](_0x5cf432+':'+_0x4f1a52['id'],_0x4f1a52);CmContactEvents[_0xe571('0x6')](_0x5cf432,_0x4f1a52);_0x5b250e(null);};}for(var e in events){if(events[_0xe571('0x7')](e)){var event=events[e];CmContact[_0xe571('0x8')](e,emitEvent(event));}}module['exports']=CmContactEvents;
\ No newline at end of file
+var _0x273e=['setMaxListeners','save','update','remove','emit','hasOwnProperty','hook','events','../../mysqldb'];(function(_0xd81e05,_0x45739a){var _0x269927=function(_0x335369){while(--_0x335369){_0xd81e05['push'](_0xd81e05['shift']());}};_0x269927(++_0x45739a);}(_0x273e,0x11e));var _0xe273=function(_0x1cdda5,_0x439ad7){_0x1cdda5=_0x1cdda5-0x0;var _0x621595=_0x273e[_0x1cdda5];return _0x621595;};'use strict';var EventEmitter=require(_0xe273('0x0'));var CmContact=require(_0xe273('0x1'))['db']['CmContact'];var CmContactEvents=new EventEmitter();CmContactEvents[_0xe273('0x2')](0x0);var events={'afterCreate':_0xe273('0x3'),'afterUpdate':_0xe273('0x4'),'afterDestroy':_0xe273('0x5')};function emitEvent(_0x1d0ff9){return function(_0x10f4bd,_0x47385a,_0x13f74f){CmContactEvents[_0xe273('0x6')](_0x1d0ff9+':'+_0x10f4bd['id'],_0x10f4bd);CmContactEvents[_0xe273('0x6')](_0x1d0ff9,_0x10f4bd);_0x13f74f(null);};}for(var e in events){if(events[_0xe273('0x7')](e)){var event=events[e];CmContact[_0xe273('0x8')](e,emitEvent(event));}}module['exports']=CmContactEvents;
\ No newline at end of file
index 9c4817c..fe94b5e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38b8=['\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20Campaign\x20','findAll','outbound','CmList','Lists','get','always','onlyIfOpen','BlackLists','length','CmHopperBlack','message','dialCheckDuplicateType','Campaign','List\x20not\x20found','isEmpty','destroy','ContactId','VoiceQueueId','CampaignId','info','[CmContact][afterDestroy][Succesfull]','[CmContact][afterDestroy][Error]','lodash','../../config/logger','api','bluebird','exports','CmContact','cm_contacts','phone','models','error','cmContact','afterCreate','inspect','CmHopper','findOne','then','isNil','cmContact,\x20afterCreate\x20','priority','scheduledat','format','callbackUniqueid','YYYY-MM-DD\x20HH:mm:ss','catch','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','CmHopperFinal','cmContact,\x20afterCreate,\x20','ListId','create'];(function(_0x45efbf,_0x13969f){var _0x23cbc8=function(_0x306423){while(--_0x306423){_0x45efbf['push'](_0x45efbf['shift']());}};_0x23cbc8(++_0x13969f);}(_0x38b8,0x7f));var _0x838b=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x38b8[_0x2dafbe];return _0x58a45a;};'use strict';var _=require(_0x838b('0x0'));var util=require('util');var logger=require(_0x838b('0x1'))(_0x838b('0x2'));var moment=require('moment');var BPromise=require(_0x838b('0x3'));var rp=require('request-promise');var attributes=require('./cmContact.attributes');module[_0x838b('0x4')]=function(_0xd8b053,_0x5a3cca){return _0xd8b053['define'](_0x838b('0x5'),attributes,{'tableName':_0x838b('0x6'),'paranoid':!![],'indexes':[{'name':'phone','fields':[_0x838b('0x7')]}],'timestamps':!![],'hooks':{'afterCreate':function(_0x15184b,_0x4b9530,_0x552245){var _0x1a6bc0=_0xd8b053[_0x838b('0x8')];var _0x31ba84=_0x15184b['get']({'plain':!![]});function _0x22cda4(){return function(_0x51cf71){logger[_0x838b('0x9')](_0x838b('0xa'),_0x838b('0xb'),util[_0x838b('0xc')](_0x51cf71,{'showHidden':![],'depth':null}));};}var _0x241e6a=function(_0x263a96){return new BPromise(function(_0x4d2c3b,_0x3a57cf){_0x1a6bc0[_0x838b('0xd')][_0x838b('0xe')]({'where':{'phone':_0x31ba84[_0x838b('0x7')],'VoiceQueueId':_0x263a96['id']}})[_0x838b('0xf')](function(_0x21cc45){if(!_[_0x838b('0x10')](_0x21cc45)){throw new Error(_0x838b('0x11')+_0x31ba84[_0x838b('0x7')]+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20VoiceQueue\x20'+_0x263a96['id']);}return _0x1a6bc0[_0x838b('0xd')]['create']({'phone':_0x31ba84['phone'],'ContactId':_0x31ba84['id'],'ListId':_0x31ba84['ListId'],'priority':_0x31ba84[_0x838b('0x12')]?_0x31ba84[_0x838b('0x12')]:0x2,'scheduledat':_0x31ba84[_0x838b('0x13')]?_0x31ba84[_0x838b('0x13')]:moment()[_0x838b('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x31ba84[_0x838b('0x15')]?!![]:![],'callbackuniqueid':_0x31ba84[_0x838b('0x15')]?_0x31ba84[_0x838b('0x15')]:undefined,'callbackat':_0x31ba84[_0x838b('0x15')]?moment()['format'](_0x838b('0x16')):undefined,'VoiceQueueId':_0x263a96['id']});})[_0x838b('0x17')](function(_0x49f209){_0x3a57cf(_0x49f209);});});};var _0x4c1251=function(_0x46eedc){return new BPromise(function(_0x4cab95,_0x3a9e2b){_0x1a6bc0[_0x838b('0xd')][_0x838b('0xe')]({'where':{'phone':_0x31ba84['phone'],'VoiceQueueId':_0x46eedc['id']}})[_0x838b('0xf')](function(_0x389a99){if(!_[_0x838b('0x10')](_0x389a99)){throw new Error(_0x838b('0x11')+_0x31ba84[_0x838b('0x7')]+_0x838b('0x18')+_0x46eedc['id']);}return _0x1a6bc0[_0x838b('0x19')][_0x838b('0xe')]({'where':{'calleridnum':_0x31ba84[_0x838b('0x7')],'VoiceQueueId':_0x46eedc['id']}});})[_0x838b('0xf')](function(_0x2eecf9){if(!_[_0x838b('0x10')](_0x2eecf9)){throw new Error(_0x838b('0x1a')+_0x31ba84[_0x838b('0x7')]+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20VoiceQueue\x20'+_0x46eedc['id']);}return _0x1a6bc0[_0x838b('0xd')]['create']({'phone':_0x31ba84['phone'],'ContactId':_0x31ba84['id'],'ListId':_0x31ba84[_0x838b('0x1b')],'priority':_0x31ba84[_0x838b('0x12')]?_0x31ba84[_0x838b('0x12')]:0x2,'scheduledat':_0x31ba84['scheduledat']?_0x31ba84[_0x838b('0x13')]:moment()[_0x838b('0x14')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x31ba84[_0x838b('0x15')]?!![]:![],'callbackuniqueid':_0x31ba84[_0x838b('0x15')]?_0x31ba84['callbackUniqueid']:undefined,'callbackat':_0x31ba84['callbackUniqueid']?moment()['format']('YYYY-MM-DD\x20HH:mm:ss'):undefined,'VoiceQueueId':_0x46eedc['id']});})['catch'](function(_0x4b46bc){_0x3a9e2b(_0x4b46bc);});});};function _0x1e74a6(){return function(_0x227876){logger['error']('cmContact',_0x838b('0xb'),util[_0x838b('0xc')](_0x227876,{'showHidden':![],'depth':null}));};}var _0x1fff30=function(_0x29e161){return new BPromise(function(_0x16c081,_0x3c6c08){_0x1a6bc0[_0x838b('0xd')][_0x838b('0xe')]({'where':{'phone':_0x31ba84[_0x838b('0x7')],'CampaignId':_0x29e161['id']}})['then'](function(_0xe392b1){if(!_[_0x838b('0x10')](_0xe392b1)){throw new Error(_0x838b('0x11')+_0x31ba84[_0x838b('0x7')]+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20Campaign\x20'+_0x29e161['id']);}return _0x1a6bc0[_0x838b('0xd')][_0x838b('0x1c')]({'phone':_0x31ba84[_0x838b('0x7')],'ContactId':_0x31ba84['id'],'ListId':_0x31ba84[_0x838b('0x1b')],'priority':_0x31ba84[_0x838b('0x12')]?_0x31ba84['priority']:0x2,'scheduledat':_0x31ba84[_0x838b('0x13')]?_0x31ba84[_0x838b('0x13')]:moment()[_0x838b('0x14')](_0x838b('0x16')),'callback':_0x31ba84['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x31ba84[_0x838b('0x15')]?_0x31ba84[_0x838b('0x15')]:undefined,'callbackat':_0x31ba84['callbackUniqueid']?moment()[_0x838b('0x14')](_0x838b('0x16')):undefined,'CampaignId':_0x29e161['id']});})[_0x838b('0x17')](function(_0x14b2be){_0x3c6c08(_0x14b2be);});});};var _0x3008fa=function(_0x4bf515){return new BPromise(function(_0x1e9405,_0x38c3a3){_0x1a6bc0['CmHopper'][_0x838b('0xe')]({'where':{'phone':_0x31ba84['phone'],'CampaignId':_0x4bf515['id']}})[_0x838b('0xf')](function(_0x57931c){if(!_[_0x838b('0x10')](_0x57931c)){throw new Error('cmContact,\x20afterCreate\x20'+_0x31ba84[_0x838b('0x7')]+_0x838b('0x1d')+_0x4bf515['id']);}return _0x1a6bc0[_0x838b('0x19')][_0x838b('0xe')]({'where':{'calleridnum':_0x31ba84[_0x838b('0x7')],'CampaignId':_0x4bf515['id']}});})[_0x838b('0xf')](function(_0x5f62f){if(!_[_0x838b('0x10')](_0x5f62f)){throw new Error(_0x838b('0x1a')+_0x31ba84[_0x838b('0x7')]+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20Campaign\x20'+_0x4bf515['id']);}return _0x1a6bc0[_0x838b('0xd')]['create']({'phone':_0x31ba84[_0x838b('0x7')],'ContactId':_0x31ba84['id'],'ListId':_0x31ba84[_0x838b('0x1b')],'priority':_0x31ba84[_0x838b('0x12')]?_0x31ba84[_0x838b('0x12')]:0x2,'scheduledat':_0x31ba84[_0x838b('0x13')]?_0x31ba84[_0x838b('0x13')]:moment()[_0x838b('0x14')](_0x838b('0x16')),'callback':_0x31ba84['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x31ba84[_0x838b('0x15')]?_0x31ba84[_0x838b('0x15')]:undefined,'callbackat':_0x31ba84[_0x838b('0x15')]?moment()[_0x838b('0x14')](_0x838b('0x16')):undefined,'CampaignId':_0x4bf515['id']});})[_0x838b('0x17')](function(_0x563ec9){_0x38c3a3(_0x563ec9);});});};if(_0x31ba84[_0x838b('0x1b')]){_0x1a6bc0['VoiceQueue'][_0x838b('0x1e')]({'where':{'type':_0x838b('0x1f')},'attributes':['id','dialCheckDuplicateType'],'include':[{'model':_0x1a6bc0[_0x838b('0x20')],'as':_0x838b('0x21'),'where':{'id':_0x31ba84[_0x838b('0x1b')]}}]})[_0x838b('0xf')](function(_0x4a66fb){if(_0x4a66fb){var _0x51689a=[];for(var _0x3e727d=0x0,_0x1a19eb;_0x3e727d<_0x4a66fb['length'];_0x3e727d+=0x1){_0x1a19eb=_0x4a66fb[_0x3e727d][_0x838b('0x22')]({'plain':!![]});switch(_0x1a19eb['dialCheckDuplicateType']){case _0x838b('0x23'):_0x4c1251(_0x1a19eb)[_0x838b('0x17')](_0x22cda4());break;case _0x838b('0x24'):_0x241e6a(_0x1a19eb)[_0x838b('0x17')](_0x22cda4());break;default:_0x1a6bc0[_0x838b('0xd')]['create']({'phone':_0x31ba84[_0x838b('0x7')],'ContactId':_0x31ba84['id'],'ListId':_0x31ba84['ListId'],'scheduledat':_0x31ba84[_0x838b('0x13')]?_0x31ba84['scheduledat']:moment()[_0x838b('0x14')](_0x838b('0x16')),'priority':_0x31ba84['priority']?_0x31ba84[_0x838b('0x12')]:0x2,'callback':_0x31ba84[_0x838b('0x15')]?!![]:![],'callbackuniqueid':_0x31ba84['callbackUniqueid']?_0x31ba84[_0x838b('0x15')]:undefined,'callbackat':_0x31ba84['callbackUniqueid']?moment()[_0x838b('0x14')](_0x838b('0x16')):undefined,'VoiceQueueId':_0x1a19eb['id']})['catch'](_0x22cda4());}}}})[_0x838b('0xf')](function(){return _0x1a6bc0['VoiceQueue']['findAll']({'where':{'type':'outbound'},'attributes':['id'],'include':[{'model':_0x1a6bc0['CmList'],'as':_0x838b('0x25'),'where':{'id':_0x31ba84[_0x838b('0x1b')]}}]})[_0x838b('0xf')](function(_0x19f691){if(_0x19f691){var _0x829aef=[];for(var _0x1aaeb2=0x0,_0x5ebde7;_0x1aaeb2<_0x19f691[_0x838b('0x26')];_0x1aaeb2+=0x1){_0x5ebde7=_0x19f691[_0x1aaeb2]['get']({'plain':!![]});_0x1a6bc0[_0x838b('0x27')]['create']({'phone':_0x31ba84[_0x838b('0x7')],'ContactId':_0x31ba84['id'],'ListId':_0x31ba84[_0x838b('0x1b')],'VoiceQueueId':_0x5ebde7['id']})[_0x838b('0x17')](function(_0x295d1c){logger[_0x838b('0x9')]('cmContact,\x20%s,\x20%s','afterCreate',_0x295d1c[_0x838b('0x28')]);});}}});})[_0x838b('0xf')](function(){return _0x1a6bc0['Campaign']['findAll']({'attributes':['id',_0x838b('0x29')],'include':[{'model':_0x1a6bc0[_0x838b('0x20')],'as':_0x838b('0x21'),'where':{'id':_0x31ba84[_0x838b('0x1b')]}}]})[_0x838b('0xf')](function(_0x1a370e){if(_0x1a370e){var _0xbef833=[];for(var _0x6d826d=0x0,_0x1a6f93;_0x6d826d<_0x1a370e[_0x838b('0x26')];_0x6d826d+=0x1){_0x1a6f93=_0x1a370e[_0x6d826d]['get']({'plain':!![]});switch(_0x1a6f93['dialCheckDuplicateType']){case'always':_0x3008fa(_0x1a6f93)[_0x838b('0x17')](_0x1e74a6());break;case _0x838b('0x24'):_0x1fff30(_0x1a6f93)[_0x838b('0x17')](_0x1e74a6());break;default:_0x1a6bc0[_0x838b('0xd')][_0x838b('0x1c')]({'phone':_0x31ba84['phone'],'ContactId':_0x31ba84['id'],'ListId':_0x31ba84[_0x838b('0x1b')],'scheduledat':_0x31ba84['scheduledat']?_0x31ba84['scheduledat']:moment()[_0x838b('0x14')](_0x838b('0x16')),'priority':_0x31ba84[_0x838b('0x12')]?_0x31ba84['priority']:0x2,'callback':_0x31ba84[_0x838b('0x15')]?!![]:![],'callbackuniqueid':_0x31ba84[_0x838b('0x15')]?_0x31ba84[_0x838b('0x15')]:undefined,'callbackat':_0x31ba84[_0x838b('0x15')]?moment()[_0x838b('0x14')](_0x838b('0x16')):undefined,'CampaignId':_0x1a6f93['id']})['catch'](_0x1e74a6());}}}});})[_0x838b('0xf')](function(){return _0x1a6bc0[_0x838b('0x2a')][_0x838b('0x1e')]({'attributes':['id'],'include':[{'model':_0x1a6bc0[_0x838b('0x20')],'as':_0x838b('0x25'),'where':{'id':_0x31ba84[_0x838b('0x1b')]}}]})[_0x838b('0xf')](function(_0x5d92d9){if(_0x5d92d9){var _0x14ae9e=[];for(var _0xf115f8=0x0,_0x6c68e2;_0xf115f8<_0x5d92d9[_0x838b('0x26')];_0xf115f8+=0x1){_0x6c68e2=_0x5d92d9[_0xf115f8][_0x838b('0x22')]({'plain':!![]});_0x1a6bc0[_0x838b('0x27')][_0x838b('0x1c')]({'phone':_0x31ba84[_0x838b('0x7')],'ContactId':_0x31ba84['id'],'ListId':_0x31ba84[_0x838b('0x1b')],'CampaignId':_0x6c68e2['id']})[_0x838b('0x17')](function(_0x4a170c){logger[_0x838b('0x9')]('cmContact,\x20%s,\x20%s',_0x838b('0xb'),_0x4a170c[_0x838b('0x28')]);});}}});})[_0x838b('0xf')](function(){_0x552245();})[_0x838b('0x17')](function(_0x21358c){logger[_0x838b('0x9')]('cmContact,\x20%s,\x20%s',_0x838b('0xb'),_0x21358c[_0x838b('0x28')]);_0x552245(_0x21358c);});}else{_0x552245(new Error(_0x838b('0x2b')));}},'afterDestroy':function(_0xf6b67b,_0x2e3e6d,_0x16e609){var _0xb374e3=_0xd8b053[_0x838b('0x8')];var _0xa56923=_0xf6b67b[_0x838b('0x22')]({'plain':!![]});return _0xb374e3[_0x838b('0xd')][_0x838b('0x1e')]({'raw':!![],'where':{'ListId':_0xa56923[_0x838b('0x1b')],'ContactId':_0xa56923['id']}})[_0x838b('0xf')](function(_0x5503c1){if(!_[_0x838b('0x2c')](_0x5503c1)){var _0x5f182c=[];for(var _0x4e377d=0x0;_0x4e377d<_0x5503c1[_0x838b('0x26')];_0x4e377d+=0x1){var _0x48c12a=_0xb374e3[_0x838b('0xd')][_0x838b('0x2d')]({'where':{'ListId':_0x5503c1[_0x4e377d][_0x838b('0x1b')],'ContactId':_0x5503c1[_0x4e377d][_0x838b('0x2e')],'VoiceQueueId':_0x5503c1[_0x4e377d][_0x838b('0x2f')],'CampaignId':_0x5503c1[_0x4e377d][_0x838b('0x30')]}});_0x5f182c['push'](_0x48c12a);}return BPromise['all'](_0x5f182c);}})[_0x838b('0xf')](function(_0x3ee3f7){logger[_0x838b('0x31')](_0x838b('0x32'),util['inspect'](_0x3ee3f7,{'showHidden':![],'depth':null}));_0x16e609();})['catch'](function(_0x4bc5ff){logger[_0x838b('0x9')](_0x838b('0x33'),util['inspect'](_0x4bc5ff,{'showHidden':![],'depth':null}));_0x16e609(_0x4bc5ff);});}}});};
\ No newline at end of file
+var _0x50e5=['info','[CmContact][afterDestroy][Succesfull]','[CmContact][afterDestroy][Error]','lodash','util','api','moment','bluebird','request-promise','./cmContact.attributes','exports','define','CmContact','cm_contacts','phone','models','cmContact','afterCreate','findOne','then','isNil','cmContact,\x20afterCreate\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20onlyIfOpen,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','CmHopper','priority','scheduledat','format','callbackUniqueid','YYYY-MM-DD\x20HH:mm:ss','catch','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopper\x20VoiceQueue\x20','cmContact,\x20afterCreate,\x20','\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20VoiceQueue\x20','create','ListId','error','inspect','\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','VoiceQueue','outbound','dialCheckDuplicateType','CmList','Lists','length','get','onlyIfOpen','findAll','BlackLists','CmHopperBlack','cmContact,\x20%s,\x20%s','message','Campaign','List\x20not\x20found','isEmpty','destroy','ContactId','VoiceQueueId','CampaignId'];(function(_0x16a713,_0x464de1){var _0x54f7b7=function(_0x3cf43f){while(--_0x3cf43f){_0x16a713['push'](_0x16a713['shift']());}};_0x54f7b7(++_0x464de1);}(_0x50e5,0xb7));var _0x550e=function(_0x260da6,_0x3194b0){_0x260da6=_0x260da6-0x0;var _0x349957=_0x50e5[_0x260da6];return _0x349957;};'use strict';var _=require(_0x550e('0x0'));var util=require(_0x550e('0x1'));var logger=require('../../config/logger')(_0x550e('0x2'));var moment=require(_0x550e('0x3'));var BPromise=require(_0x550e('0x4'));var rp=require(_0x550e('0x5'));var attributes=require(_0x550e('0x6'));module[_0x550e('0x7')]=function(_0x78e6c5,_0xafede5){return _0x78e6c5[_0x550e('0x8')](_0x550e('0x9'),attributes,{'tableName':_0x550e('0xa'),'paranoid':!![],'indexes':[{'name':_0x550e('0xb'),'fields':['phone']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x27ae27,_0x20707a,_0x51318e){var _0xebedae=_0x78e6c5[_0x550e('0xc')];var _0x1390a4=_0x27ae27['get']({'plain':!![]});function _0x1a1e3e(){return function(_0x49cc53){logger['error'](_0x550e('0xd'),_0x550e('0xe'),util['inspect'](_0x49cc53,{'showHidden':![],'depth':null}));};}var _0x13f7e9=function(_0x13b152){return new BPromise(function(_0x2e3852,_0x3fa395){_0xebedae['CmHopper'][_0x550e('0xf')]({'where':{'phone':_0x1390a4['phone'],'VoiceQueueId':_0x13b152['id']}})[_0x550e('0x10')](function(_0x4f5255){if(!_[_0x550e('0x11')](_0x4f5255)){throw new Error(_0x550e('0x12')+_0x1390a4[_0x550e('0xb')]+_0x550e('0x13')+_0x13b152['id']);}return _0xebedae[_0x550e('0x14')]['create']({'phone':_0x1390a4[_0x550e('0xb')],'ContactId':_0x1390a4['id'],'ListId':_0x1390a4['ListId'],'priority':_0x1390a4[_0x550e('0x15')]?_0x1390a4['priority']:0x2,'scheduledat':_0x1390a4['scheduledat']?_0x1390a4[_0x550e('0x16')]:moment()[_0x550e('0x17')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x1390a4['callbackUniqueid']?!![]:![],'callbackuniqueid':_0x1390a4['callbackUniqueid']?_0x1390a4[_0x550e('0x18')]:undefined,'callbackat':_0x1390a4['callbackUniqueid']?moment()['format'](_0x550e('0x19')):undefined,'VoiceQueueId':_0x13b152['id']});})[_0x550e('0x1a')](function(_0x6c7178){_0x3fa395(_0x6c7178);});});};var _0x846ad=function(_0x1ff0e9){return new BPromise(function(_0x29f2db,_0x3b4dca){_0xebedae[_0x550e('0x14')][_0x550e('0xf')]({'where':{'phone':_0x1390a4['phone'],'VoiceQueueId':_0x1ff0e9['id']}})[_0x550e('0x10')](function(_0x106c68){if(!_['isNil'](_0x106c68)){throw new Error('cmContact,\x20afterCreate\x20'+_0x1390a4[_0x550e('0xb')]+_0x550e('0x1b')+_0x1ff0e9['id']);}return _0xebedae['CmHopperFinal'][_0x550e('0xf')]({'where':{'calleridnum':_0x1390a4[_0x550e('0xb')],'VoiceQueueId':_0x1ff0e9['id']}});})[_0x550e('0x10')](function(_0x317249){if(!_[_0x550e('0x11')](_0x317249)){throw new Error(_0x550e('0x1c')+_0x1390a4['phone']+_0x550e('0x1d')+_0x1ff0e9['id']);}return _0xebedae[_0x550e('0x14')][_0x550e('0x1e')]({'phone':_0x1390a4[_0x550e('0xb')],'ContactId':_0x1390a4['id'],'ListId':_0x1390a4[_0x550e('0x1f')],'priority':_0x1390a4[_0x550e('0x15')]?_0x1390a4[_0x550e('0x15')]:0x2,'scheduledat':_0x1390a4[_0x550e('0x16')]?_0x1390a4[_0x550e('0x16')]:moment()[_0x550e('0x17')](_0x550e('0x19')),'callback':_0x1390a4[_0x550e('0x18')]?!![]:![],'callbackuniqueid':_0x1390a4['callbackUniqueid']?_0x1390a4[_0x550e('0x18')]:undefined,'callbackat':_0x1390a4[_0x550e('0x18')]?moment()['format'](_0x550e('0x19')):undefined,'VoiceQueueId':_0x1ff0e9['id']});})[_0x550e('0x1a')](function(_0x7ae242){_0x3b4dca(_0x7ae242);});});};function _0x33bc32(){return function(_0x1a4caa){logger[_0x550e('0x20')](_0x550e('0xd'),_0x550e('0xe'),util[_0x550e('0x21')](_0x1a4caa,{'showHidden':![],'depth':null}));};}var _0x43f7b2=function(_0x25c40a){return new BPromise(function(_0xec21fd,_0x32fd38){_0xebedae[_0x550e('0x14')]['findOne']({'where':{'phone':_0x1390a4[_0x550e('0xb')],'CampaignId':_0x25c40a['id']}})[_0x550e('0x10')](function(_0x5002b0){if(!_[_0x550e('0x11')](_0x5002b0)){throw new Error(_0x550e('0x12')+_0x1390a4['phone']+_0x550e('0x22')+_0x25c40a['id']);}return _0xebedae[_0x550e('0x14')][_0x550e('0x1e')]({'phone':_0x1390a4[_0x550e('0xb')],'ContactId':_0x1390a4['id'],'ListId':_0x1390a4[_0x550e('0x1f')],'priority':_0x1390a4[_0x550e('0x15')]?_0x1390a4[_0x550e('0x15')]:0x2,'scheduledat':_0x1390a4[_0x550e('0x16')]?_0x1390a4['scheduledat']:moment()[_0x550e('0x17')]('YYYY-MM-DD\x20HH:mm:ss'),'callback':_0x1390a4[_0x550e('0x18')]?!![]:![],'callbackuniqueid':_0x1390a4[_0x550e('0x18')]?_0x1390a4['callbackUniqueid']:undefined,'callbackat':_0x1390a4[_0x550e('0x18')]?moment()[_0x550e('0x17')]('YYYY-MM-DD\x20HH:mm:ss'):undefined,'CampaignId':_0x25c40a['id']});})['catch'](function(_0x5b2588){_0x32fd38(_0x5b2588);});});};var _0x5da318=function(_0xcf9fc){return new BPromise(function(_0x3b5365,_0x6c42c6){_0xebedae['CmHopper']['findOne']({'where':{'phone':_0x1390a4['phone'],'CampaignId':_0xcf9fc['id']}})[_0x550e('0x10')](function(_0x1e848b){if(!_['isNil'](_0x1e848b)){throw new Error('cmContact,\x20afterCreate\x20'+_0x1390a4['phone']+_0x550e('0x23')+_0xcf9fc['id']);}return _0xebedae[_0x550e('0x24')][_0x550e('0xf')]({'where':{'calleridnum':_0x1390a4['phone'],'CampaignId':_0xcf9fc['id']}});})['then'](function(_0x33a720){if(!_[_0x550e('0x11')](_0x33a720)){throw new Error(_0x550e('0x1c')+_0x1390a4[_0x550e('0xb')]+'\x20contact\x20not\x20insert\x20in\x20hopper,\x20check\x20duplicate\x20always,\x20exist\x20in\x20hopperFinal\x20Campaign\x20'+_0xcf9fc['id']);}return _0xebedae[_0x550e('0x14')][_0x550e('0x1e')]({'phone':_0x1390a4['phone'],'ContactId':_0x1390a4['id'],'ListId':_0x1390a4['ListId'],'priority':_0x1390a4[_0x550e('0x15')]?_0x1390a4[_0x550e('0x15')]:0x2,'scheduledat':_0x1390a4[_0x550e('0x16')]?_0x1390a4[_0x550e('0x16')]:moment()['format'](_0x550e('0x19')),'callback':_0x1390a4[_0x550e('0x18')]?!![]:![],'callbackuniqueid':_0x1390a4[_0x550e('0x18')]?_0x1390a4[_0x550e('0x18')]:undefined,'callbackat':_0x1390a4['callbackUniqueid']?moment()[_0x550e('0x17')](_0x550e('0x19')):undefined,'CampaignId':_0xcf9fc['id']});})[_0x550e('0x1a')](function(_0x459ca8){_0x6c42c6(_0x459ca8);});});};if(_0x1390a4[_0x550e('0x1f')]){_0xebedae[_0x550e('0x25')]['findAll']({'where':{'type':_0x550e('0x26')},'attributes':['id',_0x550e('0x27')],'include':[{'model':_0xebedae[_0x550e('0x28')],'as':_0x550e('0x29'),'where':{'id':_0x1390a4[_0x550e('0x1f')]}}]})['then'](function(_0x10f18f){if(_0x10f18f){var _0x2db9c9=[];for(var _0x5ca5fc=0x0,_0xe6352b;_0x5ca5fc<_0x10f18f[_0x550e('0x2a')];_0x5ca5fc+=0x1){_0xe6352b=_0x10f18f[_0x5ca5fc][_0x550e('0x2b')]({'plain':!![]});switch(_0xe6352b['dialCheckDuplicateType']){case'always':_0x846ad(_0xe6352b)[_0x550e('0x1a')](_0x1a1e3e());break;case _0x550e('0x2c'):_0x13f7e9(_0xe6352b)['catch'](_0x1a1e3e());break;default:_0xebedae[_0x550e('0x14')][_0x550e('0x1e')]({'phone':_0x1390a4['phone'],'ContactId':_0x1390a4['id'],'ListId':_0x1390a4[_0x550e('0x1f')],'scheduledat':_0x1390a4[_0x550e('0x16')]?_0x1390a4[_0x550e('0x16')]:moment()[_0x550e('0x17')](_0x550e('0x19')),'priority':_0x1390a4[_0x550e('0x15')]?_0x1390a4['priority']:0x2,'callback':_0x1390a4[_0x550e('0x18')]?!![]:![],'callbackuniqueid':_0x1390a4['callbackUniqueid']?_0x1390a4[_0x550e('0x18')]:undefined,'callbackat':_0x1390a4[_0x550e('0x18')]?moment()['format'](_0x550e('0x19')):undefined,'VoiceQueueId':_0xe6352b['id']})[_0x550e('0x1a')](_0x1a1e3e());}}}})[_0x550e('0x10')](function(){return _0xebedae[_0x550e('0x25')][_0x550e('0x2d')]({'where':{'type':_0x550e('0x26')},'attributes':['id'],'include':[{'model':_0xebedae['CmList'],'as':_0x550e('0x2e'),'where':{'id':_0x1390a4[_0x550e('0x1f')]}}]})[_0x550e('0x10')](function(_0x444c23){if(_0x444c23){var _0x5a9ef5=[];for(var _0xbfd031=0x0,_0x3e1c3e;_0xbfd031<_0x444c23[_0x550e('0x2a')];_0xbfd031+=0x1){_0x3e1c3e=_0x444c23[_0xbfd031][_0x550e('0x2b')]({'plain':!![]});_0xebedae[_0x550e('0x2f')][_0x550e('0x1e')]({'phone':_0x1390a4[_0x550e('0xb')],'ContactId':_0x1390a4['id'],'ListId':_0x1390a4[_0x550e('0x1f')],'VoiceQueueId':_0x3e1c3e['id']})[_0x550e('0x1a')](function(_0x2e619d){logger[_0x550e('0x20')](_0x550e('0x30'),_0x550e('0xe'),_0x2e619d[_0x550e('0x31')]);});}}});})[_0x550e('0x10')](function(){return _0xebedae[_0x550e('0x32')][_0x550e('0x2d')]({'attributes':['id','dialCheckDuplicateType'],'include':[{'model':_0xebedae[_0x550e('0x28')],'as':_0x550e('0x29'),'where':{'id':_0x1390a4[_0x550e('0x1f')]}}]})[_0x550e('0x10')](function(_0x3c47b2){if(_0x3c47b2){var _0x8a5c64=[];for(var _0x1e95c3=0x0,_0x4d2153;_0x1e95c3<_0x3c47b2[_0x550e('0x2a')];_0x1e95c3+=0x1){_0x4d2153=_0x3c47b2[_0x1e95c3][_0x550e('0x2b')]({'plain':!![]});switch(_0x4d2153[_0x550e('0x27')]){case'always':_0x5da318(_0x4d2153)['catch'](_0x33bc32());break;case'onlyIfOpen':_0x43f7b2(_0x4d2153)[_0x550e('0x1a')](_0x33bc32());break;default:_0xebedae[_0x550e('0x14')][_0x550e('0x1e')]({'phone':_0x1390a4[_0x550e('0xb')],'ContactId':_0x1390a4['id'],'ListId':_0x1390a4[_0x550e('0x1f')],'scheduledat':_0x1390a4[_0x550e('0x16')]?_0x1390a4['scheduledat']:moment()[_0x550e('0x17')](_0x550e('0x19')),'priority':_0x1390a4[_0x550e('0x15')]?_0x1390a4['priority']:0x2,'callback':_0x1390a4[_0x550e('0x18')]?!![]:![],'callbackuniqueid':_0x1390a4['callbackUniqueid']?_0x1390a4[_0x550e('0x18')]:undefined,'callbackat':_0x1390a4['callbackUniqueid']?moment()[_0x550e('0x17')](_0x550e('0x19')):undefined,'CampaignId':_0x4d2153['id']})['catch'](_0x33bc32());}}}});})[_0x550e('0x10')](function(){return _0xebedae['Campaign'][_0x550e('0x2d')]({'attributes':['id'],'include':[{'model':_0xebedae['CmList'],'as':_0x550e('0x2e'),'where':{'id':_0x1390a4[_0x550e('0x1f')]}}]})['then'](function(_0x130dfd){if(_0x130dfd){var _0x4c4643=[];for(var _0xbab6b9=0x0,_0x897986;_0xbab6b9<_0x130dfd[_0x550e('0x2a')];_0xbab6b9+=0x1){_0x897986=_0x130dfd[_0xbab6b9][_0x550e('0x2b')]({'plain':!![]});_0xebedae['CmHopperBlack']['create']({'phone':_0x1390a4[_0x550e('0xb')],'ContactId':_0x1390a4['id'],'ListId':_0x1390a4['ListId'],'CampaignId':_0x897986['id']})['catch'](function(_0x5392a1){logger[_0x550e('0x20')](_0x550e('0x30'),_0x550e('0xe'),_0x5392a1[_0x550e('0x31')]);});}}});})[_0x550e('0x10')](function(){_0x51318e();})['catch'](function(_0x223c85){logger[_0x550e('0x20')](_0x550e('0x30'),_0x550e('0xe'),_0x223c85[_0x550e('0x31')]);_0x51318e(_0x223c85);});}else{_0x51318e(new Error(_0x550e('0x33')));}},'afterDestroy':function(_0x2f0f70,_0x39d6e2,_0x27ddf5){var _0x527706=_0x78e6c5[_0x550e('0xc')];var _0x313245=_0x2f0f70[_0x550e('0x2b')]({'plain':!![]});return _0x527706[_0x550e('0x14')][_0x550e('0x2d')]({'raw':!![],'where':{'ListId':_0x313245[_0x550e('0x1f')],'ContactId':_0x313245['id']}})[_0x550e('0x10')](function(_0x16d2c0){if(!_[_0x550e('0x34')](_0x16d2c0)){var _0x368cd8=[];for(var _0x5094bb=0x0;_0x5094bb<_0x16d2c0[_0x550e('0x2a')];_0x5094bb+=0x1){var _0xf61f31=_0x527706[_0x550e('0x14')][_0x550e('0x35')]({'where':{'ListId':_0x16d2c0[_0x5094bb][_0x550e('0x1f')],'ContactId':_0x16d2c0[_0x5094bb][_0x550e('0x36')],'VoiceQueueId':_0x16d2c0[_0x5094bb][_0x550e('0x37')],'CampaignId':_0x16d2c0[_0x5094bb][_0x550e('0x38')]}});_0x368cd8['push'](_0xf61f31);}return BPromise['all'](_0x368cd8);}})[_0x550e('0x10')](function(_0x80d993){logger[_0x550e('0x39')](_0x550e('0x3a'),util[_0x550e('0x21')](_0x80d993,{'showHidden':![],'depth':null}));_0x27ddf5();})[_0x550e('0x1a')](function(_0x4c54b8){logger[_0x550e('0x20')](_0x550e('0x3b'),util['inspect'](_0x4c54b8,{'showHidden':![],'depth':null}));_0x27ddf5(_0x4c54b8);});}}});};
\ No newline at end of file
index cfac468..f201229 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf144=['rpc','../../config/environment','http','redis','defaults','localhost','./cmContact.socket','register','request','then','info','request\x20sent','debug','CmContact,\x20%s,\x20%s,\x20%s','stringify','code','error','message','CmContact,\x20%s,\x20%s','result','catch','ShowCmContact','CmContact','find','options','raw','where','attributes','include','map','model','CreateCmContact','create','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x5a6998,_0x3d78c6){var _0x21369c=function(_0x3026ef){while(--_0x3026ef){_0x5a6998['push'](_0x5a6998['shift']());}};_0x21369c(++_0x3d78c6);}(_0xf144,0x192));var _0x4f14=function(_0x4f95c5,_0x3d47c8){_0x4f95c5=_0x4f95c5-0x0;var _0x192ec2=_0xf144[_0x4f95c5];return _0x192ec2;};'use strict';var _=require(_0x4f14('0x0'));var util=require(_0x4f14('0x1'));var moment=require(_0x4f14('0x2'));var BPromise=require('bluebird');var rs=require(_0x4f14('0x3'));var fs=require('fs');var Redis=require(_0x4f14('0x4'));var db=require(_0x4f14('0x5'))['db'];var utils=require(_0x4f14('0x6'));var logger=require(_0x4f14('0x7'))(_0x4f14('0x8'));var config=require(_0x4f14('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0x4f14('0xa')]({'port':0x232a});config[_0x4f14('0xb')]=_[_0x4f14('0xc')](config['redis'],{'host':_0x4f14('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x4f14('0xb')]));require(_0x4f14('0xe'))[_0x4f14('0xf')](socket);function respondWithRpcPromise(_0xe010e4,_0x54348d,_0x2bf096){return new BPromise(function(_0xdab1c8,_0x5ca72c){return client[_0x4f14('0x10')](_0xe010e4,_0x2bf096)[_0x4f14('0x11')](function(_0x1adfb4){logger[_0x4f14('0x12')]('CmContact,\x20%s,\x20%s',_0x54348d,_0x4f14('0x13'));logger[_0x4f14('0x14')](_0x4f14('0x15'),_0x54348d,_0x4f14('0x13'),JSON[_0x4f14('0x16')](_0x1adfb4));if(_0x1adfb4['error']){if(_0x1adfb4['error'][_0x4f14('0x17')]===0x1f4){logger[_0x4f14('0x18')]('CmContact,\x20%s,\x20%s',_0x54348d,_0x1adfb4[_0x4f14('0x18')]['message']);return _0x5ca72c(_0x1adfb4[_0x4f14('0x18')][_0x4f14('0x19')]);}logger[_0x4f14('0x18')]('CmContact,\x20%s,\x20%s',_0x54348d,_0x1adfb4[_0x4f14('0x18')]['message']);return _0xdab1c8(_0x1adfb4[_0x4f14('0x18')][_0x4f14('0x19')]);}else{logger['info'](_0x4f14('0x1a'),_0x54348d,_0x4f14('0x13'));_0xdab1c8(_0x1adfb4[_0x4f14('0x1b')]['message']);}})[_0x4f14('0x1c')](function(_0x34a732){logger[_0x4f14('0x18')](_0x4f14('0x1a'),_0x54348d,_0x34a732);_0x5ca72c(_0x34a732);});});}exports[_0x4f14('0x1d')]=function(_0xdc595){var _0x5dcf77=this;return new Promise(function(_0x19d437,_0x360b55){return db[_0x4f14('0x1e')][_0x4f14('0x1f')]({'raw':_0xdc595[_0x4f14('0x20')]?_0xdc595['options'][_0x4f14('0x21')]===undefined?!![]:![]:!![],'where':_0xdc595[_0x4f14('0x20')]?_0xdc595[_0x4f14('0x20')][_0x4f14('0x22')]||null:null,'attributes':_0xdc595[_0x4f14('0x20')]?_0xdc595[_0x4f14('0x20')][_0x4f14('0x23')]||null:null,'include':_0xdc595[_0x4f14('0x20')]?_0xdc595[_0x4f14('0x20')][_0x4f14('0x24')]?_[_0x4f14('0x25')](_0xdc595['options'][_0x4f14('0x24')],function(_0xf1ed9a){return{'model':db[_0xf1ed9a[_0x4f14('0x26')]],'as':_0xf1ed9a['as'],'attributes':_0xf1ed9a['attributes'],'include':_0xf1ed9a['include']?_[_0x4f14('0x25')](_0xf1ed9a[_0x4f14('0x24')],function(_0x283f85){return{'model':db[_0x283f85[_0x4f14('0x26')]],'as':_0x283f85['as'],'attributes':_0x283f85['attributes'],'include':_0x283f85['include']?_[_0x4f14('0x25')](_0x283f85[_0x4f14('0x24')],function(_0x3ab803){return{'model':db[_0x3ab803[_0x4f14('0x26')]],'as':_0x3ab803['as'],'attributes':_0x3ab803[_0x4f14('0x23')]};}):[]};}):[]};}):[]:[]})[_0x4f14('0x11')](function(_0x2e1f69){logger[_0x4f14('0x12')](_0x4f14('0x1d'),_0xdc595);logger[_0x4f14('0x14')](_0x4f14('0x1d'),_0xdc595,JSON[_0x4f14('0x16')](_0x2e1f69));_0x19d437(_0x2e1f69);})[_0x4f14('0x1c')](function(_0x4458d5){logger[_0x4f14('0x18')](_0x4f14('0x1d'),_0x4458d5[_0x4f14('0x19')],_0xdc595);_0x360b55(_0x5dcf77['error'](0x1f4,_0x4458d5[_0x4f14('0x19')]));});});};exports[_0x4f14('0x27')]=function(_0x2b0ab1){var _0x110132=this;return new Promise(function(_0x2111b0,_0x3a61de){return db[_0x4f14('0x1e')][_0x4f14('0x28')](_0x2b0ab1['body'],{'raw':_0x2b0ab1[_0x4f14('0x20')]?_0x2b0ab1[_0x4f14('0x20')]['raw']===undefined?!![]:![]:!![]})[_0x4f14('0x11')](function(_0x16bf6d){logger[_0x4f14('0x12')](_0x4f14('0x27'),_0x2b0ab1);logger[_0x4f14('0x14')](_0x4f14('0x27'),_0x2b0ab1,JSON[_0x4f14('0x16')](_0x16bf6d));_0x2111b0(_0x16bf6d);})[_0x4f14('0x1c')](function(_0x52c323){logger[_0x4f14('0x18')](_0x4f14('0x27'),_0x52c323[_0x4f14('0x19')],_0x2b0ab1);_0x3a61de(_0x110132[_0x4f14('0x18')](0x1f4,_0x52c323[_0x4f14('0x19')]));});});};
\ No newline at end of file
+var _0xced9=['rpc','../../config/environment','jayson/promise','redis','localhost','socket.io-emitter','./cmContact.socket','register','request','then','request\x20sent','debug','CmContact,\x20%s,\x20%s,\x20%s','stringify','error','code','CmContact,\x20%s,\x20%s','message','info','catch','ShowCmContact','find','options','raw','where','attributes','include','map','CreateCmContact','create','body','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0xced9,0xfd));var _0x9ced=function(_0x6cf19c,_0x2f3f02){_0x6cf19c=_0x6cf19c-0x0;var _0xce14f3=_0xced9[_0x6cf19c];return _0xce14f3;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x9ced('0x0'));var BPromise=require('bluebird');var rs=require(_0x9ced('0x1'));var fs=require('fs');var Redis=require(_0x9ced('0x2'));var db=require(_0x9ced('0x3'))['db'];var utils=require(_0x9ced('0x4'));var logger=require(_0x9ced('0x5'))(_0x9ced('0x6'));var config=require(_0x9ced('0x7'));var jayson=require(_0x9ced('0x8'));var client=jayson['client']['http']({'port':0x232a});config[_0x9ced('0x9')]=_['defaults'](config[_0x9ced('0x9')],{'host':_0x9ced('0xa'),'port':0x18eb});var socket=require(_0x9ced('0xb'))(new Redis(config[_0x9ced('0x9')]));require(_0x9ced('0xc'))[_0x9ced('0xd')](socket);function respondWithRpcPromise(_0xe2c259,_0x4bf652,_0x1b2b29){return new BPromise(function(_0x1ca6ea,_0x51856f){return client[_0x9ced('0xe')](_0xe2c259,_0x1b2b29)[_0x9ced('0xf')](function(_0x55a9d5){logger['info']('CmContact,\x20%s,\x20%s',_0x4bf652,_0x9ced('0x10'));logger[_0x9ced('0x11')](_0x9ced('0x12'),_0x4bf652,_0x9ced('0x10'),JSON[_0x9ced('0x13')](_0x55a9d5));if(_0x55a9d5[_0x9ced('0x14')]){if(_0x55a9d5[_0x9ced('0x14')][_0x9ced('0x15')]===0x1f4){logger[_0x9ced('0x14')](_0x9ced('0x16'),_0x4bf652,_0x55a9d5[_0x9ced('0x14')][_0x9ced('0x17')]);return _0x51856f(_0x55a9d5[_0x9ced('0x14')][_0x9ced('0x17')]);}logger['error']('CmContact,\x20%s,\x20%s',_0x4bf652,_0x55a9d5['error']['message']);return _0x1ca6ea(_0x55a9d5[_0x9ced('0x14')][_0x9ced('0x17')]);}else{logger[_0x9ced('0x18')](_0x9ced('0x16'),_0x4bf652,_0x9ced('0x10'));_0x1ca6ea(_0x55a9d5['result'][_0x9ced('0x17')]);}})[_0x9ced('0x19')](function(_0x50c488){logger['error'](_0x9ced('0x16'),_0x4bf652,_0x50c488);_0x51856f(_0x50c488);});});}exports[_0x9ced('0x1a')]=function(_0x19dbda){var _0x46d932=this;return new Promise(function(_0x4595a0,_0x49a060){return db['CmContact'][_0x9ced('0x1b')]({'raw':_0x19dbda[_0x9ced('0x1c')]?_0x19dbda[_0x9ced('0x1c')][_0x9ced('0x1d')]===undefined?!![]:![]:!![],'where':_0x19dbda[_0x9ced('0x1c')]?_0x19dbda['options'][_0x9ced('0x1e')]||null:null,'attributes':_0x19dbda[_0x9ced('0x1c')]?_0x19dbda[_0x9ced('0x1c')][_0x9ced('0x1f')]||null:null,'include':_0x19dbda[_0x9ced('0x1c')]?_0x19dbda[_0x9ced('0x1c')][_0x9ced('0x20')]?_['map'](_0x19dbda[_0x9ced('0x1c')]['include'],function(_0x4c6f04){return{'model':db[_0x4c6f04['model']],'as':_0x4c6f04['as'],'attributes':_0x4c6f04['attributes'],'include':_0x4c6f04['include']?_[_0x9ced('0x21')](_0x4c6f04[_0x9ced('0x20')],function(_0x29bdce){return{'model':db[_0x29bdce['model']],'as':_0x29bdce['as'],'attributes':_0x29bdce[_0x9ced('0x1f')],'include':_0x29bdce[_0x9ced('0x20')]?_[_0x9ced('0x21')](_0x29bdce[_0x9ced('0x20')],function(_0x1a33a0){return{'model':db[_0x1a33a0['model']],'as':_0x1a33a0['as'],'attributes':_0x1a33a0[_0x9ced('0x1f')]};}):[]};}):[]};}):[]:[]})[_0x9ced('0xf')](function(_0x412df1){logger[_0x9ced('0x18')]('ShowCmContact',_0x19dbda);logger['debug']('ShowCmContact',_0x19dbda,JSON[_0x9ced('0x13')](_0x412df1));_0x4595a0(_0x412df1);})[_0x9ced('0x19')](function(_0x3cbc4b){logger[_0x9ced('0x14')](_0x9ced('0x1a'),_0x3cbc4b[_0x9ced('0x17')],_0x19dbda);_0x49a060(_0x46d932['error'](0x1f4,_0x3cbc4b[_0x9ced('0x17')]));});});};exports[_0x9ced('0x22')]=function(_0x470722){var _0x4ddb5c=this;return new Promise(function(_0x50f94a,_0x92673f){return db['CmContact'][_0x9ced('0x23')](_0x470722[_0x9ced('0x24')],{'raw':_0x470722[_0x9ced('0x1c')]?_0x470722[_0x9ced('0x1c')][_0x9ced('0x1d')]===undefined?!![]:![]:!![]})[_0x9ced('0xf')](function(_0x4b25a3){logger[_0x9ced('0x18')](_0x9ced('0x22'),_0x470722);logger[_0x9ced('0x11')](_0x9ced('0x22'),_0x470722,JSON[_0x9ced('0x13')](_0x4b25a3));_0x50f94a(_0x4b25a3);})[_0x9ced('0x19')](function(_0x165f0f){logger[_0x9ced('0x14')]('CreateCmContact',_0x165f0f[_0x9ced('0x17')],_0x470722);_0x92673f(_0x4ddb5c[_0x9ced('0x14')](0x1f4,_0x165f0f[_0x9ced('0x17')]));});});};
\ No newline at end of file
index 119f09e..e20d662 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb2a=['cmContact:','./cmContact.events','save','remove','removeListener','register'];(function(_0x2c91e9,_0x2fb965){var _0x13f0ff=function(_0xb39edf){while(--_0xb39edf){_0x2c91e9['push'](_0x2c91e9['shift']());}};_0x13f0ff(++_0x2fb965);}(_0xdb2a,0x16f));var _0xadb2=function(_0x3db7f1,_0x4257d7){_0x3db7f1=_0x3db7f1-0x0;var _0x1cddc2=_0xdb2a[_0x3db7f1];return _0x1cddc2;};'use strict';var CmContactEvents=require(_0xadb2('0x0'));var events=[_0xadb2('0x1'),_0xadb2('0x2'),'update'];function createListener(_0x5d822a,_0x15df55){return function(_0x4e731c){_0x15df55['emit'](_0x5d822a,_0x4e731c);};}function removeListener(_0x364980,_0x51f39a){return function(){CmContactEvents[_0xadb2('0x3')](_0x364980,_0x51f39a);};}exports[_0xadb2('0x4')]=function(_0x1f5c7e){for(var _0x297e69=0x0,_0x338460=events['length'];_0x297e69<_0x338460;_0x297e69++){var _0x25ef26=events[_0x297e69];var _0x51453d=createListener(_0xadb2('0x5')+_0x25ef26,_0x1f5c7e);CmContactEvents['on'](_0x25ef26,_0x51453d);}};
\ No newline at end of file
+var _0x8ece=['update','emit','removeListener','length','cmContact:','./cmContact.events','save','remove'];(function(_0x1408fd,_0x35554d){var _0x508b53=function(_0x34df96){while(--_0x34df96){_0x1408fd['push'](_0x1408fd['shift']());}};_0x508b53(++_0x35554d);}(_0x8ece,0x195));var _0xe8ec=function(_0x1ed354,_0x4bb5be){_0x1ed354=_0x1ed354-0x0;var _0x532757=_0x8ece[_0x1ed354];return _0x532757;};'use strict';var CmContactEvents=require(_0xe8ec('0x0'));var events=[_0xe8ec('0x1'),_0xe8ec('0x2'),_0xe8ec('0x3')];function createListener(_0x4dd5dd,_0x47b1c1){return function(_0xe18b82){_0x47b1c1[_0xe8ec('0x4')](_0x4dd5dd,_0xe18b82);};}function removeListener(_0x5047e7,_0x433734){return function(){CmContactEvents[_0xe8ec('0x5')](_0x5047e7,_0x433734);};}exports['register']=function(_0x346577){for(var _0x23fa35=0x0,_0x64ed4c=events[_0xe8ec('0x6')];_0x23fa35<_0x64ed4c;_0x23fa35++){var _0x3682cb=events[_0x23fa35];var _0x122f36=createListener(_0xe8ec('0x7')+_0x3682cb,_0x346577);CmContactEvents['on'](_0x3682cb,_0x122f36);}};
\ No newline at end of file
index 21d1a38..b4c192b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf5ba=['/:id/hopper_finals','/:id/jscripty_sessions','getJscriptySessions','post','/merge','merge','create','/create_many','bulkCreate','setTags','diskStorage','join','root','server/files/tmp','originalname','replace','%s-%s%s','basename','extname','/csv','single','file','format','now','/upload','upload','import','put','/:id','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','isAuthenticated','index','get','/describe','describe','show','/:id/tags','getTags','/:id/hoppers','getHoppers','getHopperHistories'];(function(_0x42f009,_0x5e27b1){var _0x22a1e0=function(_0x297993){while(--_0x297993){_0x42f009['push'](_0x42f009['shift']());}};_0x22a1e0(++_0x5e27b1);}(_0xf5ba,0xb1));var _0xaf5b=function(_0x91a3b4,_0xcaf598){_0x91a3b4=_0x91a3b4-0x0;var _0x1d569c=_0xf5ba[_0x91a3b4];return _0x1d569c;};'use strict';var multer=require(_0xaf5b('0x0'));var util=require(_0xaf5b('0x1'));var path=require(_0xaf5b('0x2'));var timeout=require(_0xaf5b('0x3'));var express=require(_0xaf5b('0x4'));var router=express[_0xaf5b('0x5')]();var auth=require(_0xaf5b('0x6'));var interaction=require(_0xaf5b('0x7'));var config=require('../../config/environment');var controller=require('./cmContact.controller');router['get']('/',auth[_0xaf5b('0x8')](),controller[_0xaf5b('0x9')]);router[_0xaf5b('0xa')](_0xaf5b('0xb'),auth[_0xaf5b('0x8')](),controller[_0xaf5b('0xc')]);router['get']('/:id',auth[_0xaf5b('0x8')](),controller[_0xaf5b('0xd')]);router[_0xaf5b('0xa')](_0xaf5b('0xe'),auth[_0xaf5b('0x8')](),controller[_0xaf5b('0xf')]);router[_0xaf5b('0xa')](_0xaf5b('0x10'),auth[_0xaf5b('0x8')](),controller[_0xaf5b('0x11')]);router[_0xaf5b('0xa')]('/:id/hopper_histories',auth[_0xaf5b('0x8')](),controller[_0xaf5b('0x12')]);router[_0xaf5b('0xa')](_0xaf5b('0x13'),auth['isAuthenticated'](),controller['getHopperFinals']);router[_0xaf5b('0xa')](_0xaf5b('0x14'),auth[_0xaf5b('0x8')](),controller[_0xaf5b('0x15')]);router[_0xaf5b('0x16')](_0xaf5b('0x17'),auth[_0xaf5b('0x8')](),controller[_0xaf5b('0x18')]);router[_0xaf5b('0x16')]('/',auth['isAuthenticated'](),controller[_0xaf5b('0x19')]);router[_0xaf5b('0x16')](_0xaf5b('0x1a'),auth[_0xaf5b('0x8')](),controller[_0xaf5b('0x1b')]);router[_0xaf5b('0x16')](_0xaf5b('0xe'),auth[_0xaf5b('0x8')](),controller[_0xaf5b('0x1c')]);var upload=multer({'storage':multer[_0xaf5b('0x1d')]({'destination':function(_0x305df3,_0x38e94e,_0x3e2a4c){_0x3e2a4c(null,path[_0xaf5b('0x1e')](config[_0xaf5b('0x1f')],_0xaf5b('0x20')));},'filename':function(_0x27f2ee,_0x1fea67,_0x164f08){_0x1fea67['originalname']=_0x1fea67[_0xaf5b('0x21')][_0xaf5b('0x22')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x164f08(null,util['format'](_0xaf5b('0x23'),path[_0xaf5b('0x24')](_0x1fea67[_0xaf5b('0x21')],path['extname'](_0x1fea67[_0xaf5b('0x21')])),Date['now'](),path[_0xaf5b('0x25')](_0x1fea67[_0xaf5b('0x21')])));}})});router[_0xaf5b('0x16')](_0xaf5b('0x26'),upload[_0xaf5b('0x27')](_0xaf5b('0x28')),controller['uploadCsv']);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x1381a1,_0x19ba32,_0x4bf2f5){_0x4bf2f5(null,path[_0xaf5b('0x1e')](config[_0xaf5b('0x1f')],_0xaf5b('0x20')));},'filename':function(_0x4e1eed,_0xa782bd,_0x5dc549){_0xa782bd['originalname']=_0xa782bd['originalname'][_0xaf5b('0x22')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x5dc549(null,util[_0xaf5b('0x29')](_0xaf5b('0x23'),path[_0xaf5b('0x24')](_0xa782bd[_0xaf5b('0x21')],path[_0xaf5b('0x25')](_0xa782bd['originalname'])),Date[_0xaf5b('0x2a')](),path[_0xaf5b('0x25')](_0xa782bd[_0xaf5b('0x21')])));}})});router[_0xaf5b('0x16')](_0xaf5b('0x2b'),upload[_0xaf5b('0x27')](_0xaf5b('0x28')),controller[_0xaf5b('0x2c')]);router['post']('/upload/:id',auth[_0xaf5b('0x8')](),controller[_0xaf5b('0x2d')]);router[_0xaf5b('0x2e')](_0xaf5b('0x2f'),auth['isAuthenticated'](),controller['update']);router['delete'](_0xaf5b('0x2f'),auth['isAuthenticated'](),controller[_0xaf5b('0x30')]);module['exports']=router;
\ No newline at end of file
+var _0x9d0f=['destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmContact.controller','isAuthenticated','index','get','describe','/:id','show','/:id/tags','getTags','/:id/hoppers','getHoppers','getHopperHistories','getHopperFinals','/:id/jscripty_sessions','getJscriptySessions','merge','create','post','/create_many','bulkCreate','diskStorage','join','root','server/files/tmp','originalname','replace','format','%s-%s%s','now','extname','/csv','file','uploadCsv','basename','single','upload','/upload/:id','put','update','delete'];(function(_0x173fd1,_0x28db53){var _0x36a3d1=function(_0x2f72a4){while(--_0x2f72a4){_0x173fd1['push'](_0x173fd1['shift']());}};_0x36a3d1(++_0x28db53);}(_0x9d0f,0x9b));var _0xf9d0=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x9d0f[_0x3947c9];return _0x2e7871;};'use strict';var multer=require(_0xf9d0('0x0'));var util=require(_0xf9d0('0x1'));var path=require(_0xf9d0('0x2'));var timeout=require(_0xf9d0('0x3'));var express=require(_0xf9d0('0x4'));var router=express[_0xf9d0('0x5')]();var auth=require(_0xf9d0('0x6'));var interaction=require(_0xf9d0('0x7'));var config=require(_0xf9d0('0x8'));var controller=require(_0xf9d0('0x9'));router['get']('/',auth[_0xf9d0('0xa')](),controller[_0xf9d0('0xb')]);router[_0xf9d0('0xc')]('/describe',auth['isAuthenticated'](),controller[_0xf9d0('0xd')]);router['get'](_0xf9d0('0xe'),auth[_0xf9d0('0xa')](),controller[_0xf9d0('0xf')]);router[_0xf9d0('0xc')](_0xf9d0('0x10'),auth[_0xf9d0('0xa')](),controller[_0xf9d0('0x11')]);router[_0xf9d0('0xc')](_0xf9d0('0x12'),auth[_0xf9d0('0xa')](),controller[_0xf9d0('0x13')]);router[_0xf9d0('0xc')]('/:id/hopper_histories',auth['isAuthenticated'](),controller[_0xf9d0('0x14')]);router[_0xf9d0('0xc')]('/:id/hopper_finals',auth[_0xf9d0('0xa')](),controller[_0xf9d0('0x15')]);router[_0xf9d0('0xc')](_0xf9d0('0x16'),auth['isAuthenticated'](),controller[_0xf9d0('0x17')]);router['post']('/merge',auth['isAuthenticated'](),controller[_0xf9d0('0x18')]);router['post']('/',auth[_0xf9d0('0xa')](),controller[_0xf9d0('0x19')]);router[_0xf9d0('0x1a')](_0xf9d0('0x1b'),auth[_0xf9d0('0xa')](),controller[_0xf9d0('0x1c')]);router['post'](_0xf9d0('0x10'),auth[_0xf9d0('0xa')](),controller['setTags']);var upload=multer({'storage':multer[_0xf9d0('0x1d')]({'destination':function(_0x5dd968,_0x427430,_0x1ef79f){_0x1ef79f(null,path[_0xf9d0('0x1e')](config[_0xf9d0('0x1f')],_0xf9d0('0x20')));},'filename':function(_0x7979cd,_0x2ee14e,_0x8b26d2){_0x2ee14e['originalname']=_0x2ee14e[_0xf9d0('0x21')][_0xf9d0('0x22')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x8b26d2(null,util[_0xf9d0('0x23')](_0xf9d0('0x24'),path['basename'](_0x2ee14e[_0xf9d0('0x21')],path['extname'](_0x2ee14e[_0xf9d0('0x21')])),Date[_0xf9d0('0x25')](),path[_0xf9d0('0x26')](_0x2ee14e[_0xf9d0('0x21')])));}})});router[_0xf9d0('0x1a')](_0xf9d0('0x27'),upload['single'](_0xf9d0('0x28')),controller[_0xf9d0('0x29')]);var upload=multer({'storage':multer[_0xf9d0('0x1d')]({'destination':function(_0x1bd966,_0x139617,_0x284b4c){_0x284b4c(null,path[_0xf9d0('0x1e')](config[_0xf9d0('0x1f')],_0xf9d0('0x20')));},'filename':function(_0xdd5f71,_0x438b77,_0x516f3b){_0x438b77['originalname']=_0x438b77[_0xf9d0('0x21')][_0xf9d0('0x22')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x516f3b(null,util[_0xf9d0('0x23')](_0xf9d0('0x24'),path[_0xf9d0('0x2a')](_0x438b77[_0xf9d0('0x21')],path[_0xf9d0('0x26')](_0x438b77[_0xf9d0('0x21')])),Date[_0xf9d0('0x25')](),path[_0xf9d0('0x26')](_0x438b77['originalname'])));}})});router['post']('/upload',upload[_0xf9d0('0x2b')](_0xf9d0('0x28')),controller[_0xf9d0('0x2c')]);router[_0xf9d0('0x1a')](_0xf9d0('0x2d'),auth[_0xf9d0('0xa')](),controller['import']);router[_0xf9d0('0x2e')]('/:id',auth[_0xf9d0('0xa')](),controller[_0xf9d0('0x2f')]);router[_0xf9d0('0x30')](_0xf9d0('0xe'),auth[_0xf9d0('0xa')](),controller[_0xf9d0('0x31')]);module[_0xf9d0('0x32')]=router;
\ No newline at end of file
index 45af1dd..ffadabd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda38=['alias','STRING','setDataValue','TEXT','type','select','parse','values','isArray','stringify','BOOLEAN','sequelize','lodash','exports','VIRTUAL','getDataValue'];(function(_0x133f2c,_0x54690c){var _0x2f2b07=function(_0xee56b4){while(--_0xee56b4){_0x133f2c['push'](_0x133f2c['shift']());}};_0x2f2b07(++_0x54690c);}(_0xda38,0x19b));var _0x8da3=function(_0xeb0035,_0x2c3d9a){_0xeb0035=_0xeb0035-0x0;var _0x190e57=_0xda38[_0xeb0035];return _0x190e57;};'use strict';var Sequelize=require(_0x8da3('0x0'));var _=require(_0x8da3('0x1'));module[_0x8da3('0x2')]={'name':{'type':Sequelize[_0x8da3('0x3')],'get':function(_0x220048){return this[_0x8da3('0x4')](_0x8da3('0x5'));}},'alias':{'type':Sequelize[_0x8da3('0x6')],'allowNull':![],'set':function(_0x5f42fa){this[_0x8da3('0x7')](_0x8da3('0x5'),_0x5f42fa?_0x5f42fa:this[_0x8da3('0x4')]('name'));}},'type':{'type':Sequelize['STRING'],'allowNull':![]},'values':{'type':Sequelize[_0x8da3('0x8')]('long'),'get':function(){if(this[_0x8da3('0x4')](_0x8da3('0x9'))===_0x8da3('0xa')){return JSON[_0x8da3('0xb')](this[_0x8da3('0x4')]('values'));}else{return this[_0x8da3('0x4')](_0x8da3('0xc'));}},'set':function(_0x131878){if(Array[_0x8da3('0xd')](_0x131878)){this[_0x8da3('0x7')]('values',JSON[_0x8da3('0xe')](_0x131878));}else{this[_0x8da3('0x7')](_0x8da3('0xc'),_0x131878);}}},'required':{'type':Sequelize[_0x8da3('0xf')],'defaultValue':![]}};
\ No newline at end of file
+var _0xad39=['alias','setDataValue','name','long','type','select','values','stringify','BOOLEAN','sequelize','lodash','exports','VIRTUAL','getDataValue'];(function(_0x2acce3,_0x521077){var _0x3e2e65=function(_0x941f32){while(--_0x941f32){_0x2acce3['push'](_0x2acce3['shift']());}};_0x3e2e65(++_0x521077);}(_0xad39,0x167));var _0x9ad3=function(_0x5a6961,_0xd41ca6){_0x5a6961=_0x5a6961-0x0;var _0x4af0a6=_0xad39[_0x5a6961];return _0x4af0a6;};'use strict';var Sequelize=require(_0x9ad3('0x0'));var _=require(_0x9ad3('0x1'));module[_0x9ad3('0x2')]={'name':{'type':Sequelize[_0x9ad3('0x3')],'get':function(_0x3b4776){return this[_0x9ad3('0x4')](_0x9ad3('0x5'));}},'alias':{'type':Sequelize['STRING'],'allowNull':![],'set':function(_0x5c5b68){this[_0x9ad3('0x6')](_0x9ad3('0x5'),_0x5c5b68?_0x5c5b68:this[_0x9ad3('0x4')](_0x9ad3('0x7')));}},'type':{'type':Sequelize['STRING'],'allowNull':![]},'values':{'type':Sequelize['TEXT'](_0x9ad3('0x8')),'get':function(){if(this[_0x9ad3('0x4')](_0x9ad3('0x9'))===_0x9ad3('0xa')){return JSON['parse'](this[_0x9ad3('0x4')](_0x9ad3('0xb')));}else{return this[_0x9ad3('0x4')]('values');}},'set':function(_0xb65ab8){if(Array['isArray'](_0xb65ab8)){this[_0x9ad3('0x6')]('values',JSON[_0x9ad3('0xc')](_0xb65ab8));}else{this[_0x9ad3('0x6')](_0x9ad3('0xb'),_0xb65ab8);}}},'required':{'type':Sequelize[_0x9ad3('0xd')],'defaultValue':![]}};
\ No newline at end of file
index e234f11..2e98c6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfb95=['querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','../../config/environment','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','then','destroy','stack','name','send','CmCustomField','rawAttributes','differenceBy','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','VIRTUAL','field','options','includeAll','findAll','rows','catch','show','params','include','find','body','create','sequelize','TEXT','text','Sequelize','INTEGER','switch','BOOLEAN','defaultValue','queryInterface','addColumn','cm_contacts','format','cf_%d','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','path','sox','to-csv','lodash','squel','crypto'];(function(_0x3d7327,_0x55326f){var _0x8adc5e=function(_0x28ee64){while(--_0x28ee64){_0x3d7327['push'](_0x3d7327['shift']());}};_0x8adc5e(++_0x55326f);}(_0xfb95,0x13e));var _0x5fb9=function(_0x1c3ec5,_0x2969d3){_0x1c3ec5=_0x1c3ec5-0x0;var _0x51b9f0=_0xfb95[_0x1c3ec5];return _0x51b9f0;};'use strict';var pdf=require(_0x5fb9('0x0'));var emlformat=require(_0x5fb9('0x1'));var rimraf=require(_0x5fb9('0x2'));var zipdir=require(_0x5fb9('0x3'));var jsonpatch=require(_0x5fb9('0x4'));var rp=require('request-promise');var moment=require(_0x5fb9('0x5'));var BPromise=require(_0x5fb9('0x6'));var Mustache=require(_0x5fb9('0x7'));var util=require('util');var path=require(_0x5fb9('0x8'));var sox=require(_0x5fb9('0x9'));var csv=require(_0x5fb9('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x5fb9('0xb'));var squel=require(_0x5fb9('0xc'));var crypto=require(_0x5fb9('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x5fb9('0xa'));var querystring=require(_0x5fb9('0xe'));var Papa=require(_0x5fb9('0xf'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0x5fb9('0x10'));var qs=require(_0x5fb9('0x11'));var logger=require(_0x5fb9('0x12'))('api');var utils=require('../../config/utils');var config=require(_0x5fb9('0x13'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xf7aa21,_0x35de4d){_0x35de4d=_0x35de4d||0xcc;return function(_0x2802af){if(_0x2802af){return _0xf7aa21[_0x5fb9('0x14')](_0x35de4d);}return _0xf7aa21[_0x5fb9('0x15')](_0x35de4d)[_0x5fb9('0x16')]();};}function respondWithResult(_0x230349,_0x557982){_0x557982=_0x557982||0xc8;return function(_0x26b20c){if(_0x26b20c){return _0x230349[_0x5fb9('0x15')](_0x557982)[_0x5fb9('0x17')](_0x26b20c);}};}function respondWithFilteredResult(_0x19a63d,_0x3da77e){return function(_0x4bd955){if(_0x4bd955){var _0x4ab54e=_0x4bd955[_0x5fb9('0x18')],_0x57866f=_0x3da77e[_0x5fb9('0x19')],_0x33eebe=_0x3da77e[_0x5fb9('0x19')]+_0x3da77e['limit'],_0x139bc6;if(_0x33eebe>=_0x4ab54e){_0x33eebe=_0x4ab54e;_0x139bc6=0xc8;}else{_0x139bc6=0xce;}_0x19a63d[_0x5fb9('0x15')](_0x139bc6);return _0x19a63d[_0x5fb9('0x1a')](_0x5fb9('0x1b'),_0x57866f+'-'+_0x33eebe+'/'+_0x4ab54e)['json'](_0x4bd955);}return null;};}function patchUpdates(_0x4279d6){return function(_0x1b967e){try{jsonpatch['apply'](_0x1b967e,_0x4279d6,!![]);}catch(_0x43d234){return BPromise[_0x5fb9('0x1c')](_0x43d234);}return _0x1b967e[_0x5fb9('0x1d')]();};}function saveUpdates(_0x1142ea,_0x5b151c){return function(_0x4ff259){if(_0x4ff259){return _0x4ff259['update'](_0x1142ea)[_0x5fb9('0x1e')](function(_0x3f51ee){return _0x3f51ee;});}return null;};}function removeEntity(_0x59f50e,_0x3eaae6){return function(_0x3ba515){if(_0x3ba515){return _0x3ba515[_0x5fb9('0x1f')]()[_0x5fb9('0x1e')](function(){_0x59f50e[_0x5fb9('0x15')](0xcc)[_0x5fb9('0x16')]();});}};}function handleEntityNotFound(_0x3b7e74,_0x1dac21){return function(_0x467b19){if(!_0x467b19){_0x3b7e74['sendStatus'](0x194);}return _0x467b19;};}function handleError(_0x54ac8f,_0x46e42e){_0x46e42e=_0x46e42e||0x1f4;return function(_0x194fb3){logger['error'](_0x194fb3[_0x5fb9('0x20')]);if(_0x194fb3['name']){delete _0x194fb3[_0x5fb9('0x21')];}_0x54ac8f[_0x5fb9('0x15')](_0x46e42e)[_0x5fb9('0x22')](_0x194fb3);};}exports['index']=function(_0x719c1d,_0x330b26){var _0x24e0c6={},_0x5cac2a={},_0x2271aa={'count':0x0,'rows':[]};var _0x447098=db[_0x5fb9('0x23')][_0x5fb9('0x24')];_0x5cac2a['model']=_[_0x5fb9('0x25')](_[_0x5fb9('0x26')](_0x447098),[_0x5fb9('0x21')]);_0x5cac2a[_0x5fb9('0x27')]=_['keys'](_0x719c1d[_0x5fb9('0x27')]);_0x5cac2a[_0x5fb9('0x28')]=_[_0x5fb9('0x29')](_0x5cac2a[_0x5fb9('0x2a')],_0x5cac2a[_0x5fb9('0x27')]);_0x24e0c6[_0x5fb9('0x2b')]=_[_0x5fb9('0x29')](_0x5cac2a[_0x5fb9('0x2a')],qs[_0x5fb9('0x2c')](_0x719c1d['query']['fields']));_0x24e0c6['attributes']=_0x24e0c6[_0x5fb9('0x2b')][_0x5fb9('0x2d')]?_0x24e0c6['attributes']:_0x5cac2a[_0x5fb9('0x2a')];if(!_0x719c1d[_0x5fb9('0x27')][_0x5fb9('0x2e')](_0x5fb9('0x2f'))){_0x24e0c6[_0x5fb9('0x30')]=qs[_0x5fb9('0x30')](_0x719c1d[_0x5fb9('0x27')][_0x5fb9('0x30')]);_0x24e0c6[_0x5fb9('0x19')]=qs['offset'](_0x719c1d[_0x5fb9('0x27')][_0x5fb9('0x19')]);}_0x24e0c6[_0x5fb9('0x31')]=qs[_0x5fb9('0x32')](_0x719c1d['query'][_0x5fb9('0x32')]);_0x24e0c6[_0x5fb9('0x33')]=qs[_0x5fb9('0x28')](_[_0x5fb9('0x34')](_0x719c1d[_0x5fb9('0x27')],_0x5cac2a[_0x5fb9('0x28')]));if(_0x719c1d[_0x5fb9('0x27')][_0x5fb9('0x35')]){_0x24e0c6['where']=_[_0x5fb9('0x36')](_0x24e0c6['where'],{'$or':_[_0x5fb9('0x37')](_0x447098,function(_0x31aa0b){if(_0x31aa0b[_0x5fb9('0x38')]['key']!==_0x5fb9('0x39')){var _0x241adf={};_0x241adf[_0x31aa0b[_0x5fb9('0x3a')]]={'$like':'%'+_0x719c1d['query'][_0x5fb9('0x35')]+'%'};return _0x241adf;}})});}_0x24e0c6=_['merge']({},_0x24e0c6,_0x719c1d[_0x5fb9('0x3b')]);var _0x961636={'where':_0x24e0c6['where']};return db[_0x5fb9('0x23')][_0x5fb9('0x18')](_0x961636)[_0x5fb9('0x1e')](function(_0x55fbf4){_0x2271aa[_0x5fb9('0x18')]=_0x55fbf4;if(_0x719c1d['query'][_0x5fb9('0x3c')]){_0x24e0c6['include']=[{'all':!![]}];}return db[_0x5fb9('0x23')][_0x5fb9('0x3d')](_0x24e0c6);})['then'](function(_0x3d24e7){_0x2271aa[_0x5fb9('0x3e')]=_0x3d24e7;return _0x2271aa;})['then'](respondWithFilteredResult(_0x330b26,_0x24e0c6))[_0x5fb9('0x3f')](handleError(_0x330b26,null));};exports[_0x5fb9('0x40')]=function(_0x34dd5f,_0x540f9d){var _0x573b5a={'raw':!![],'where':{'id':_0x34dd5f[_0x5fb9('0x41')]['id']}},_0x53b08c={};_0x53b08c[_0x5fb9('0x2a')]=_[_0x5fb9('0x26')](db[_0x5fb9('0x23')][_0x5fb9('0x24')]);_0x53b08c[_0x5fb9('0x27')]=_[_0x5fb9('0x26')](_0x34dd5f['query']);_0x53b08c[_0x5fb9('0x28')]=_[_0x5fb9('0x29')](_0x53b08c[_0x5fb9('0x2a')],_0x53b08c['query']);_0x573b5a[_0x5fb9('0x2b')]=_['intersection'](_0x53b08c[_0x5fb9('0x2a')],qs[_0x5fb9('0x2c')](_0x34dd5f[_0x5fb9('0x27')][_0x5fb9('0x2c')]));_0x573b5a[_0x5fb9('0x2b')]=_0x573b5a[_0x5fb9('0x2b')][_0x5fb9('0x2d')]?_0x573b5a[_0x5fb9('0x2b')]:_0x53b08c[_0x5fb9('0x2a')];if(_0x34dd5f[_0x5fb9('0x27')][_0x5fb9('0x3c')]){_0x573b5a[_0x5fb9('0x42')]=[{'all':!![]}];}_0x573b5a=_[_0x5fb9('0x36')]({},_0x573b5a,_0x34dd5f[_0x5fb9('0x3b')]);return db[_0x5fb9('0x23')][_0x5fb9('0x43')](_0x573b5a)[_0x5fb9('0x1e')](handleEntityNotFound(_0x540f9d,null))[_0x5fb9('0x1e')](respondWithResult(_0x540f9d,null))[_0x5fb9('0x3f')](handleError(_0x540f9d,null));};exports['update']=function(_0x1df44f,_0x35e7fb){if(_0x1df44f[_0x5fb9('0x44')]['id']){delete _0x1df44f[_0x5fb9('0x44')]['id'];}return db[_0x5fb9('0x23')][_0x5fb9('0x43')]({'where':{'id':_0x1df44f[_0x5fb9('0x41')]['id']}})[_0x5fb9('0x1e')](handleEntityNotFound(_0x35e7fb,null))[_0x5fb9('0x1e')](saveUpdates(_0x1df44f[_0x5fb9('0x44')],null))[_0x5fb9('0x1e')](respondWithResult(_0x35e7fb,null))[_0x5fb9('0x3f')](handleError(_0x35e7fb,null));};exports[_0x5fb9('0x1f')]=function(_0x563088,_0x1aebd9){return db['CmCustomField']['find']({'where':{'id':_0x563088[_0x5fb9('0x41')]['id']}})[_0x5fb9('0x1e')](handleEntityNotFound(_0x1aebd9,null))[_0x5fb9('0x1e')](removeEntity(_0x1aebd9,null))[_0x5fb9('0x3f')](handleError(_0x1aebd9,null));};exports[_0x5fb9('0x45')]=function(_0x5bd530,_0x1007f1){var _0x15a159;return db[_0x5fb9('0x46')]['transaction'](function(_0x22b8c3){return db[_0x5fb9('0x23')][_0x5fb9('0x45')](_0x5bd530[_0x5fb9('0x44')],{'transaction':_0x22b8c3})[_0x5fb9('0x1e')](function(_0x23a1f1){_0x15a159=_0x23a1f1;var _0x36a73a={'type':db['Sequelize'][_0x5fb9('0x47')],'transaction':_0x22b8c3};switch(_0x5bd530['body']['type']){case _0x5fb9('0x48'):_0x36a73a['type']=db[_0x5fb9('0x49')]['TEXT'];break;case'number':_0x36a73a['type']=db[_0x5fb9('0x49')][_0x5fb9('0x4a')];break;case _0x5fb9('0x4b'):_0x36a73a[_0x5fb9('0x38')]=db[_0x5fb9('0x49')][_0x5fb9('0x4c')];_0x36a73a[_0x5fb9('0x4d')]=![];break;default:}return db['sequelize'][_0x5fb9('0x4e')][_0x5fb9('0x4f')](_0x5fb9('0x50'),util[_0x5fb9('0x51')](_0x5fb9('0x52'),_0x15a159['id']),_0x36a73a);})[_0x5fb9('0x1e')](function(){return _0x15a159;});})[_0x5fb9('0x1e')](respondWithResult(_0x1007f1,0xc9))[_0x5fb9('0x3f')](handleError(_0x1007f1,null));};
\ No newline at end of file
+var _0xdd3c=['update','then','destroy','error','stack','name','index','CmCustomField','rawAttributes','model','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','map','key','VIRTUAL','field','merge','options','includeAll','findAll','rows','catch','params','include','find','body','create','transaction','Sequelize','type','text','TEXT','INTEGER','switch','BOOLEAN','defaultValue','sequelize','cm_contacts','cf_%d','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','lodash','squel','crypto','to-csv','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/utils','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save'];(function(_0x7f3354,_0x526e9e){var _0x3f6fea=function(_0x5673dc){while(--_0x5673dc){_0x7f3354['push'](_0x7f3354['shift']());}};_0x3f6fea(++_0x526e9e);}(_0xdd3c,0x127));var _0xcdd3=function(_0x1df224,_0x1da2e8){_0x1df224=_0x1df224-0x0;var _0x14662a=_0xdd3c[_0x1df224];return _0x14662a;};'use strict';var pdf=require(_0xcdd3('0x0'));var emlformat=require(_0xcdd3('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xcdd3('0x2'));var jsonpatch=require(_0xcdd3('0x3'));var rp=require(_0xcdd3('0x4'));var moment=require(_0xcdd3('0x5'));var BPromise=require(_0xcdd3('0x6'));var Mustache=require(_0xcdd3('0x7'));var util=require(_0xcdd3('0x8'));var path=require('path');var sox=require(_0xcdd3('0x9'));var csv=require('to-csv');var ejs=require(_0xcdd3('0xa'));var fs=require('fs');var _=require(_0xcdd3('0xb'));var squel=require(_0xcdd3('0xc'));var crypto=require(_0xcdd3('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xcdd3('0xe'));var querystring=require('querystring');var Papa=require(_0xcdd3('0xf'));var authService=require(_0xcdd3('0x10'));var hardwareService=require(_0xcdd3('0x11'));var Redis=require(_0xcdd3('0x12'));var qs=require(_0xcdd3('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0xcdd3('0x14'));var config=require('../../config/environment');var db=require(_0xcdd3('0x15'))['db'];function respondWithStatusCode(_0x3b7123,_0x1ca79e){_0x1ca79e=_0x1ca79e||0xcc;return function(_0x5484e4){if(_0x5484e4){return _0x3b7123['sendStatus'](_0x1ca79e);}return _0x3b7123[_0xcdd3('0x16')](_0x1ca79e)[_0xcdd3('0x17')]();};}function respondWithResult(_0x34ed31,_0x3bcd6e){_0x3bcd6e=_0x3bcd6e||0xc8;return function(_0x5dfa6c){if(_0x5dfa6c){return _0x34ed31[_0xcdd3('0x16')](_0x3bcd6e)[_0xcdd3('0x18')](_0x5dfa6c);}};}function respondWithFilteredResult(_0x57e394,_0x36f900){return function(_0x5d3d77){if(_0x5d3d77){var _0x28add8=_0x5d3d77[_0xcdd3('0x19')],_0x174356=_0x36f900[_0xcdd3('0x1a')],_0x111a68=_0x36f900[_0xcdd3('0x1a')]+_0x36f900[_0xcdd3('0x1b')],_0x581365;if(_0x111a68>=_0x28add8){_0x111a68=_0x28add8;_0x581365=0xc8;}else{_0x581365=0xce;}_0x57e394['status'](_0x581365);return _0x57e394[_0xcdd3('0x1c')](_0xcdd3('0x1d'),_0x174356+'-'+_0x111a68+'/'+_0x28add8)['json'](_0x5d3d77);}return null;};}function patchUpdates(_0x5a311e){return function(_0x5057b6){try{jsonpatch[_0xcdd3('0x1e')](_0x5057b6,_0x5a311e,!![]);}catch(_0x4ee6bf){return BPromise[_0xcdd3('0x1f')](_0x4ee6bf);}return _0x5057b6[_0xcdd3('0x20')]();};}function saveUpdates(_0x7f6aa0,_0x480287){return function(_0x5a2019){if(_0x5a2019){return _0x5a2019[_0xcdd3('0x21')](_0x7f6aa0)[_0xcdd3('0x22')](function(_0x592728){return _0x592728;});}return null;};}function removeEntity(_0x34b547,_0x3a4a64){return function(_0x12394c){if(_0x12394c){return _0x12394c[_0xcdd3('0x23')]()[_0xcdd3('0x22')](function(){_0x34b547[_0xcdd3('0x16')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1f9529,_0x522cac){return function(_0x11b062){if(!_0x11b062){_0x1f9529['sendStatus'](0x194);}return _0x11b062;};}function handleError(_0x2b2437,_0x1ab8a9){_0x1ab8a9=_0x1ab8a9||0x1f4;return function(_0x5addfc){logger[_0xcdd3('0x24')](_0x5addfc[_0xcdd3('0x25')]);if(_0x5addfc[_0xcdd3('0x26')]){delete _0x5addfc[_0xcdd3('0x26')];}_0x2b2437[_0xcdd3('0x16')](_0x1ab8a9)['send'](_0x5addfc);};}exports[_0xcdd3('0x27')]=function(_0x2a41bf,_0x40544f){var _0x55cf38={},_0x47d7fa={},_0x356ad2={'count':0x0,'rows':[]};var _0x484702=db[_0xcdd3('0x28')][_0xcdd3('0x29')];_0x47d7fa[_0xcdd3('0x2a')]=_['differenceBy'](_['keys'](_0x484702),[_0xcdd3('0x26')]);_0x47d7fa[_0xcdd3('0x2b')]=_[_0xcdd3('0x2c')](_0x2a41bf[_0xcdd3('0x2b')]);_0x47d7fa[_0xcdd3('0x2d')]=_['intersection'](_0x47d7fa[_0xcdd3('0x2a')],_0x47d7fa[_0xcdd3('0x2b')]);_0x55cf38[_0xcdd3('0x2e')]=_[_0xcdd3('0x2f')](_0x47d7fa[_0xcdd3('0x2a')],qs[_0xcdd3('0x30')](_0x2a41bf[_0xcdd3('0x2b')]['fields']));_0x55cf38[_0xcdd3('0x2e')]=_0x55cf38[_0xcdd3('0x2e')][_0xcdd3('0x31')]?_0x55cf38[_0xcdd3('0x2e')]:_0x47d7fa[_0xcdd3('0x2a')];if(!_0x2a41bf[_0xcdd3('0x2b')][_0xcdd3('0x32')](_0xcdd3('0x33'))){_0x55cf38['limit']=qs['limit'](_0x2a41bf[_0xcdd3('0x2b')]['limit']);_0x55cf38['offset']=qs[_0xcdd3('0x1a')](_0x2a41bf[_0xcdd3('0x2b')]['offset']);}_0x55cf38[_0xcdd3('0x34')]=qs[_0xcdd3('0x35')](_0x2a41bf[_0xcdd3('0x2b')][_0xcdd3('0x35')]);_0x55cf38[_0xcdd3('0x36')]=qs[_0xcdd3('0x2d')](_['pick'](_0x2a41bf['query'],_0x47d7fa[_0xcdd3('0x2d')]));if(_0x2a41bf[_0xcdd3('0x2b')]['filter']){_0x55cf38['where']=_['merge'](_0x55cf38[_0xcdd3('0x36')],{'$or':_[_0xcdd3('0x37')](_0x484702,function(_0x4d8feb){if(_0x4d8feb['type'][_0xcdd3('0x38')]!==_0xcdd3('0x39')){var _0x1aae88={};_0x1aae88[_0x4d8feb[_0xcdd3('0x3a')]]={'$like':'%'+_0x2a41bf[_0xcdd3('0x2b')]['filter']+'%'};return _0x1aae88;}})});}_0x55cf38=_[_0xcdd3('0x3b')]({},_0x55cf38,_0x2a41bf[_0xcdd3('0x3c')]);var _0xa0c058={'where':_0x55cf38[_0xcdd3('0x36')]};return db['CmCustomField'][_0xcdd3('0x19')](_0xa0c058)[_0xcdd3('0x22')](function(_0x5c55d9){_0x356ad2['count']=_0x5c55d9;if(_0x2a41bf['query'][_0xcdd3('0x3d')]){_0x55cf38['include']=[{'all':!![]}];}return db[_0xcdd3('0x28')][_0xcdd3('0x3e')](_0x55cf38);})['then'](function(_0x11eee3){_0x356ad2[_0xcdd3('0x3f')]=_0x11eee3;return _0x356ad2;})[_0xcdd3('0x22')](respondWithFilteredResult(_0x40544f,_0x55cf38))[_0xcdd3('0x40')](handleError(_0x40544f,null));};exports['show']=function(_0x46f789,_0x2f2179){var _0x2b05ae={'raw':!![],'where':{'id':_0x46f789[_0xcdd3('0x41')]['id']}},_0x322192={};_0x322192[_0xcdd3('0x2a')]=_[_0xcdd3('0x2c')](db['CmCustomField'][_0xcdd3('0x29')]);_0x322192[_0xcdd3('0x2b')]=_[_0xcdd3('0x2c')](_0x46f789['query']);_0x322192[_0xcdd3('0x2d')]=_[_0xcdd3('0x2f')](_0x322192['model'],_0x322192[_0xcdd3('0x2b')]);_0x2b05ae['attributes']=_[_0xcdd3('0x2f')](_0x322192[_0xcdd3('0x2a')],qs[_0xcdd3('0x30')](_0x46f789[_0xcdd3('0x2b')][_0xcdd3('0x30')]));_0x2b05ae[_0xcdd3('0x2e')]=_0x2b05ae['attributes'][_0xcdd3('0x31')]?_0x2b05ae['attributes']:_0x322192[_0xcdd3('0x2a')];if(_0x46f789['query'][_0xcdd3('0x3d')]){_0x2b05ae[_0xcdd3('0x42')]=[{'all':!![]}];}_0x2b05ae=_[_0xcdd3('0x3b')]({},_0x2b05ae,_0x46f789[_0xcdd3('0x3c')]);return db[_0xcdd3('0x28')][_0xcdd3('0x43')](_0x2b05ae)[_0xcdd3('0x22')](handleEntityNotFound(_0x2f2179,null))[_0xcdd3('0x22')](respondWithResult(_0x2f2179,null))['catch'](handleError(_0x2f2179,null));};exports[_0xcdd3('0x21')]=function(_0x29ab50,_0x4865e2){if(_0x29ab50['body']['id']){delete _0x29ab50[_0xcdd3('0x44')]['id'];}return db[_0xcdd3('0x28')][_0xcdd3('0x43')]({'where':{'id':_0x29ab50[_0xcdd3('0x41')]['id']}})['then'](handleEntityNotFound(_0x4865e2,null))[_0xcdd3('0x22')](saveUpdates(_0x29ab50[_0xcdd3('0x44')],null))[_0xcdd3('0x22')](respondWithResult(_0x4865e2,null))[_0xcdd3('0x40')](handleError(_0x4865e2,null));};exports[_0xcdd3('0x23')]=function(_0x24019d,_0x12314b){return db[_0xcdd3('0x28')][_0xcdd3('0x43')]({'where':{'id':_0x24019d[_0xcdd3('0x41')]['id']}})['then'](handleEntityNotFound(_0x12314b,null))[_0xcdd3('0x22')](removeEntity(_0x12314b,null))[_0xcdd3('0x40')](handleError(_0x12314b,null));};exports[_0xcdd3('0x45')]=function(_0x4d1a15,_0x12252f){var _0x46a815;return db['sequelize'][_0xcdd3('0x46')](function(_0x44f0cf){return db[_0xcdd3('0x28')][_0xcdd3('0x45')](_0x4d1a15[_0xcdd3('0x44')],{'transaction':_0x44f0cf})['then'](function(_0x4f7f4b){_0x46a815=_0x4f7f4b;var _0x339587={'type':db[_0xcdd3('0x47')]['TEXT'],'transaction':_0x44f0cf};switch(_0x4d1a15[_0xcdd3('0x44')][_0xcdd3('0x48')]){case _0xcdd3('0x49'):_0x339587[_0xcdd3('0x48')]=db['Sequelize'][_0xcdd3('0x4a')];break;case'number':_0x339587['type']=db['Sequelize'][_0xcdd3('0x4b')];break;case _0xcdd3('0x4c'):_0x339587[_0xcdd3('0x48')]=db[_0xcdd3('0x47')][_0xcdd3('0x4d')];_0x339587[_0xcdd3('0x4e')]=![];break;default:}return db[_0xcdd3('0x4f')]['queryInterface']['addColumn'](_0xcdd3('0x50'),util['format'](_0xcdd3('0x51'),_0x46a815['id']),_0x339587);})['then'](function(){return _0x46a815;});})['then'](respondWithResult(_0x12252f,0xc9))[_0xcdd3('0x40')](handleError(_0x12252f,null));};
\ No newline at end of file
index 10584e7..9e04fca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8abd=['moment','bluebird','request-promise','./cmCustomField.attributes','exports','define','cm_custom_fields','lodash','util','../../config/logger','api'];(function(_0x58f83c,_0x563967){var _0x5d2f70=function(_0x22d679){while(--_0x22d679){_0x58f83c['push'](_0x58f83c['shift']());}};_0x5d2f70(++_0x563967);}(_0x8abd,0x1b4));var _0xd8ab=function(_0x199616,_0x11dbbe){_0x199616=_0x199616-0x0;var _0x5c9b66=_0x8abd[_0x199616];return _0x5c9b66;};'use strict';var _=require(_0xd8ab('0x0'));var util=require(_0xd8ab('0x1'));var logger=require(_0xd8ab('0x2'))(_0xd8ab('0x3'));var moment=require(_0xd8ab('0x4'));var BPromise=require(_0xd8ab('0x5'));var rp=require(_0xd8ab('0x6'));var attributes=require(_0xd8ab('0x7'));module[_0xd8ab('0x8')]=function(_0x5e39af,_0x2a6582){return _0x5e39af[_0xd8ab('0x9')]('CmCustomField',attributes,{'tableName':_0xd8ab('0xa'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3d89=['util','../../config/logger','moment','bluebird','request-promise','./cmCustomField.attributes','define','CmCustomField','cm_custom_fields','lodash'];(function(_0x49b252,_0x23fa39){var _0x2f3d37=function(_0x231f32){while(--_0x231f32){_0x49b252['push'](_0x49b252['shift']());}};_0x2f3d37(++_0x23fa39);}(_0x3d89,0x153));var _0x93d8=function(_0x2eec72,_0xff4588){_0x2eec72=_0x2eec72-0x0;var _0x42bb48=_0x3d89[_0x2eec72];return _0x42bb48;};'use strict';var _=require(_0x93d8('0x0'));var util=require(_0x93d8('0x1'));var logger=require(_0x93d8('0x2'))('api');var moment=require(_0x93d8('0x3'));var BPromise=require(_0x93d8('0x4'));var rp=require(_0x93d8('0x5'));var attributes=require(_0x93d8('0x6'));module['exports']=function(_0x4e0d8b,_0x433a11){return _0x4e0d8b[_0x93d8('0x7')](_0x93d8('0x8'),attributes,{'tableName':_0x93d8('0x9'),'paranoid':!![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 9bb9c39..534401e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c22=['message','result','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','CmCustomField,\x20%s,\x20%s','request\x20sent','debug','CmCustomField,\x20%s,\x20%s,\x20%s','error','code'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x1c22,0x13b));var _0x21c2=function(_0x5b99d4,_0x512202){_0x5b99d4=_0x5b99d4-0x0;var _0x1731cd=_0x1c22[_0x5b99d4];return _0x1731cd;};'use strict';var _=require('lodash');var util=require(_0x21c2('0x0'));var moment=require(_0x21c2('0x1'));var BPromise=require(_0x21c2('0x2'));var rs=require(_0x21c2('0x3'));var fs=require('fs');var Redis=require(_0x21c2('0x4'));var db=require(_0x21c2('0x5'))['db'];var utils=require(_0x21c2('0x6'));var logger=require(_0x21c2('0x7'))(_0x21c2('0x8'));var config=require(_0x21c2('0x9'));var jayson=require(_0x21c2('0xa'));var client=jayson[_0x21c2('0xb')][_0x21c2('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x441ef5,_0x5a29bd,_0x2c099a){return new BPromise(function(_0x3265aa,_0x26ec5d){return client[_0x21c2('0xd')](_0x441ef5,_0x2c099a)['then'](function(_0x4b236c){logger[_0x21c2('0xe')](_0x21c2('0xf'),_0x5a29bd,_0x21c2('0x10'));logger[_0x21c2('0x11')](_0x21c2('0x12'),_0x5a29bd,'request\x20sent',JSON['stringify'](_0x4b236c));if(_0x4b236c['error']){if(_0x4b236c[_0x21c2('0x13')][_0x21c2('0x14')]===0x1f4){logger['error'](_0x21c2('0xf'),_0x5a29bd,_0x4b236c[_0x21c2('0x13')][_0x21c2('0x15')]);return _0x26ec5d(_0x4b236c['error'][_0x21c2('0x15')]);}logger[_0x21c2('0x13')](_0x21c2('0xf'),_0x5a29bd,_0x4b236c[_0x21c2('0x13')]['message']);return _0x3265aa(_0x4b236c[_0x21c2('0x13')][_0x21c2('0x15')]);}else{logger[_0x21c2('0xe')](_0x21c2('0xf'),_0x5a29bd,'request\x20sent');_0x3265aa(_0x4b236c[_0x21c2('0x16')]['message']);}})[_0x21c2('0x17')](function(_0x35bd54){logger[_0x21c2('0x13')](_0x21c2('0xf'),_0x5a29bd,_0x35bd54);_0x26ec5d(_0x35bd54);});});}
\ No newline at end of file
+var _0x224b=['catch','lodash','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','info','CmCustomField,\x20%s,\x20%s','request\x20sent','debug','error','message','result'];(function(_0x42a799,_0x2f72a9){var _0x146157=function(_0x9c3b23){while(--_0x9c3b23){_0x42a799['push'](_0x42a799['shift']());}};_0x146157(++_0x2f72a9);}(_0x224b,0x1cd));var _0xb224=function(_0x500ddb,_0x376d81){_0x500ddb=_0x500ddb-0x0;var _0x50ca55=_0x224b[_0x500ddb];return _0x50ca55;};'use strict';var _=require(_0xb224('0x0'));var util=require('util');var moment=require(_0xb224('0x1'));var BPromise=require('bluebird');var rs=require(_0xb224('0x2'));var fs=require('fs');var Redis=require(_0xb224('0x3'));var db=require(_0xb224('0x4'))['db'];var utils=require(_0xb224('0x5'));var logger=require(_0xb224('0x6'))(_0xb224('0x7'));var config=require(_0xb224('0x8'));var jayson=require(_0xb224('0x9'));var client=jayson['client'][_0xb224('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x38fcc9,_0x57461c,_0x3cfd66){return new BPromise(function(_0x4aff50,_0x324223){return client['request'](_0x38fcc9,_0x3cfd66)[_0xb224('0xb')](function(_0x20533b){logger[_0xb224('0xc')](_0xb224('0xd'),_0x57461c,_0xb224('0xe'));logger[_0xb224('0xf')]('CmCustomField,\x20%s,\x20%s,\x20%s',_0x57461c,_0xb224('0xe'),JSON['stringify'](_0x20533b));if(_0x20533b[_0xb224('0x10')]){if(_0x20533b['error']['code']===0x1f4){logger[_0xb224('0x10')]('CmCustomField,\x20%s,\x20%s',_0x57461c,_0x20533b[_0xb224('0x10')][_0xb224('0x11')]);return _0x324223(_0x20533b['error'][_0xb224('0x11')]);}logger[_0xb224('0x10')]('CmCustomField,\x20%s,\x20%s',_0x57461c,_0x20533b['error'][_0xb224('0x11')]);return _0x4aff50(_0x20533b[_0xb224('0x10')][_0xb224('0x11')]);}else{logger[_0xb224('0xc')](_0xb224('0xd'),_0x57461c,_0xb224('0xe'));_0x4aff50(_0x20533b[_0xb224('0x12')][_0xb224('0x11')]);}})[_0xb224('0x13')](function(_0x1bdb37){logger[_0xb224('0x10')](_0xb224('0xd'),_0x57461c,_0x1bdb37);_0x324223(_0x1bdb37);});});}
\ No newline at end of file
index 0d525de..3419b5c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x281d=['update','delete','destroy','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','./cmCustomField.controller','get','index','/:id','isAuthenticated','post','create'];(function(_0xeac30d,_0x4598e3){var _0x3ea96a=function(_0x58ec08){while(--_0x58ec08){_0xeac30d['push'](_0xeac30d['shift']());}};_0x3ea96a(++_0x4598e3);}(_0x281d,0x19c));var _0xd281=function(_0x21c7ce,_0x198892){_0x21c7ce=_0x21c7ce-0x0;var _0x17865a=_0x281d[_0x21c7ce];return _0x17865a;};'use strict';var multer=require(_0xd281('0x0'));var util=require('util');var path=require(_0xd281('0x1'));var timeout=require(_0xd281('0x2'));var express=require('express');var router=express[_0xd281('0x3')]();var auth=require(_0xd281('0x4'));var interaction=require(_0xd281('0x5'));var config=require('../../config/environment');var controller=require(_0xd281('0x6'));router[_0xd281('0x7')]('/',auth['isAuthenticated'](),controller[_0xd281('0x8')]);router[_0xd281('0x7')](_0xd281('0x9'),auth[_0xd281('0xa')](),controller['show']);router[_0xd281('0xb')]('/',auth[_0xd281('0xa')](),controller[_0xd281('0xc')]);router['put'](_0xd281('0x9'),auth[_0xd281('0xa')](),controller[_0xd281('0xd')]);router[_0xd281('0xe')]('/:id',auth[_0xd281('0xa')](),controller[_0xd281('0xf')]);module[_0xd281('0x10')]=router;
\ No newline at end of file
+var _0xd990=['../../components/auth/service','../../components/interaction/service','../../config/environment','index','get','/:id','isAuthenticated','show','post','create','put','update','delete','multer','util','path','connect-timeout','express','Router'];(function(_0x88e148,_0x5c1ef0){var _0xa75c3c=function(_0x153340){while(--_0x153340){_0x88e148['push'](_0x88e148['shift']());}};_0xa75c3c(++_0x5c1ef0);}(_0xd990,0x1e8));var _0x0d99=function(_0x512855,_0x585b30){_0x512855=_0x512855-0x0;var _0x2133c8=_0xd990[_0x512855];return _0x2133c8;};'use strict';var multer=require(_0x0d99('0x0'));var util=require(_0x0d99('0x1'));var path=require(_0x0d99('0x2'));var timeout=require(_0x0d99('0x3'));var express=require(_0x0d99('0x4'));var router=express[_0x0d99('0x5')]();var auth=require(_0x0d99('0x6'));var interaction=require(_0x0d99('0x7'));var config=require(_0x0d99('0x8'));var controller=require('./cmCustomField.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x0d99('0x9')]);router[_0x0d99('0xa')](_0x0d99('0xb'),auth[_0x0d99('0xc')](),controller[_0x0d99('0xd')]);router[_0x0d99('0xe')]('/',auth[_0x0d99('0xc')](),controller[_0x0d99('0xf')]);router[_0x0d99('0x10')](_0x0d99('0xb'),auth[_0x0d99('0xc')](),controller[_0x0d99('0x11')]);router[_0x0d99('0x12')](_0x0d99('0xb'),auth[_0x0d99('0xc')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 2ce607d..2f91e5c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5850=['BOOLEAN','format','YYYY-MM-DD\x20HH:mm:ss','INTEGER','contactListQueue','moment','exports','STRING'];(function(_0x2fc673,_0x3f8e10){var _0x46fd42=function(_0x15efd6){while(--_0x15efd6){_0x2fc673['push'](_0x2fc673['shift']());}};_0x46fd42(++_0x3f8e10);}(_0x5850,0x1cd));var _0x0585=function(_0x32623e,_0x4ae647){_0x32623e=_0x32623e-0x0;var _0x3f11bc=_0x5850[_0x32623e];return _0x3f11bc;};'use strict';var moment=require(_0x0585('0x0'));var Sequelize=require('sequelize');module[_0x0585('0x1')]={'phone':{'type':Sequelize[_0x0585('0x2')],'allowNull':![]},'active':{'type':Sequelize[_0x0585('0x3')],'defaultValue':![]},'scheduledat':{'type':Sequelize['DATE'],'defaultValue':moment()[_0x0585('0x4')](_0x0585('0x5'))},'countbusyretry':{'type':Sequelize[_0x0585('0x6')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x0585('0x6')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x0585('0x6')],'defaultValue':0x0},'callback':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize['STRING'],'defaultValue':null},'callbackat':{'type':Sequelize['DATE']},'priority':{'type':Sequelize[_0x0585('0x6')](0x2)['UNSIGNED'],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'recallme':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'ContactId':{'type':Sequelize[_0x0585('0x6')],'unique':_0x0585('0x7')},'ListId':{'type':Sequelize['INTEGER'],'unique':_0x0585('0x7')},'UserId':{'type':Sequelize['INTEGER']},'VoiceQueueId':{'type':Sequelize[_0x0585('0x6')],'unique':_0x0585('0x7')},'CampaignId':{'type':Sequelize['INTEGER']}};
\ No newline at end of file
+var _0xc896=['YYYY-MM-DD\x20HH:mm:ss','INTEGER','UNSIGNED','contactListQueue','moment','exports','STRING','BOOLEAN','DATE','format'];(function(_0x8a7d93,_0x45523e){var _0x28047b=function(_0x3df547){while(--_0x3df547){_0x8a7d93['push'](_0x8a7d93['shift']());}};_0x28047b(++_0x45523e);}(_0xc896,0x90));var _0x6c89=function(_0x59edcb,_0x2b128f){_0x59edcb=_0x59edcb-0x0;var _0x5dd98e=_0xc896[_0x59edcb];return _0x5dd98e;};'use strict';var moment=require(_0x6c89('0x0'));var Sequelize=require('sequelize');module[_0x6c89('0x1')]={'phone':{'type':Sequelize[_0x6c89('0x2')],'allowNull':![]},'active':{'type':Sequelize[_0x6c89('0x3')],'defaultValue':![]},'scheduledat':{'type':Sequelize[_0x6c89('0x4')],'defaultValue':moment()[_0x6c89('0x5')](_0x6c89('0x6'))},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x6c89('0x7')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'callback':{'type':Sequelize[_0x6c89('0x3')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize['STRING'],'defaultValue':null},'callbackat':{'type':Sequelize[_0x6c89('0x4')]},'priority':{'type':Sequelize[_0x6c89('0x7')](0x2)[_0x6c89('0x8')],'defaultValue':0x2,'validate':{'min':0x0,'max':0x4}},'recallme':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'ContactId':{'type':Sequelize['INTEGER'],'unique':_0x6c89('0x9')},'ListId':{'type':Sequelize[_0x6c89('0x7')],'unique':'contactListQueue'},'UserId':{'type':Sequelize['INTEGER']},'VoiceQueueId':{'type':Sequelize[_0x6c89('0x7')],'unique':_0x6c89('0x9')},'CampaignId':{'type':Sequelize[_0x6c89('0x7')]}};
\ No newline at end of file
index 16bac9d..715a003 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc1a0=['campaign','membername','user','deletedat','format','YYYY-MM-DD\x20HH:mm:ss','calleridnum','phone','queue','ContactId','firstName','isNil','lastName','calleridname','finally','CmHopperFinal','getPreview','CmContact','outbound','preview','dialOrderByScheduledAt','sequelize','transaction','isEmpty','hopperIds','priority','scheduledAt','ASC','DESC','literal','COALESCE(CmHopper.UserId,\x200)\x20DESC','findOne','scheduledat','LOCK','UPDATE','Contact','Company','List','Queue','dialActive','getOpenContacts','getVoiceQueues','isNumber','json','CmHopper,\x20%s,\x20%s,\x20%s','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','end','count','limit','Content-Range','apply','reject','save','update','destroy','error','stack','name','send','index','CmHopper','model','query','keys','filters','intersection','$gt','$lte','$ne','$between','$notBetween','$in','$notIn','$like','$notLike','$iLike','$notILike','$overlap','$contains','$contained','attributes','fields','hasOwnProperty','nolimit','offset','sort','where','merge','map','type','key','VIRTUAL','filter','options','then','includeAll','findAll','show','params','length','include','find','create','catch','body','describe','VoiceQueueId','VoiceQueue','Campaign','CampaignId','omit','dataValues','updatedAt','state','statedesc','deleted'];(function(_0x499aa3,_0x37159a){var _0x1e4368=function(_0x4e1210){while(--_0x4e1210){_0x499aa3['push'](_0x499aa3['shift']());}};_0x1e4368(++_0x37159a);}(_0xc1a0,0x147));var _0x0c1a=function(_0x46a38b,_0x16ffb5){_0x46a38b=_0x46a38b-0x0;var _0x346e75=_0xc1a0[_0x46a38b];return _0x346e75;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0c1a('0x0'));var rimraf=require(_0x0c1a('0x1'));var zipdir=require(_0x0c1a('0x2'));var jsonpatch=require(_0x0c1a('0x3'));var rp=require(_0x0c1a('0x4'));var moment=require(_0x0c1a('0x5'));var BPromise=require(_0x0c1a('0x6'));var Mustache=require('mustache');var util=require(_0x0c1a('0x7'));var path=require(_0x0c1a('0x8'));var sox=require(_0x0c1a('0x9'));var csv=require('to-csv');var ejs=require(_0x0c1a('0xa'));var fs=require('fs');var _=require(_0x0c1a('0xb'));var squel=require(_0x0c1a('0xc'));var crypto=require(_0x0c1a('0xd'));var jsforce=require(_0x0c1a('0xe'));var deskjs=require(_0x0c1a('0xf'));var toCsv=require('to-csv');var querystring=require(_0x0c1a('0x10'));var Papa=require(_0x0c1a('0x11'));var authService=require(_0x0c1a('0x12'));var hardwareService=require(_0x0c1a('0x13'));var Redis=require(_0x0c1a('0x14'));var qs=require('../../components/parsers/qs');var logger=require(_0x0c1a('0x15'))('api');var utils=require('../../config/utils');var config=require(_0x0c1a('0x16'));var db=require(_0x0c1a('0x17'))['db'];function respondWithStatusCode(_0x4e05c6,_0x3aa132){_0x3aa132=_0x3aa132||0xcc;return function(_0x1b3f1f){if(_0x1b3f1f){return _0x4e05c6[_0x0c1a('0x18')](_0x3aa132);}return _0x4e05c6[_0x0c1a('0x19')](_0x3aa132)[_0x0c1a('0x1a')]();};}function respondWithResult(_0x5e0bbe,_0x1a003f){_0x1a003f=_0x1a003f||0xc8;return function(_0x5866b8){if(_0x5866b8){return _0x5e0bbe[_0x0c1a('0x19')](_0x1a003f)['json'](_0x5866b8);}};}function respondWithFilteredResult(_0x14408a,_0x32abc){return function(_0x87433c){if(_0x87433c){var _0x10f6a5=_0x87433c[_0x0c1a('0x1b')],_0x2e95f3=_0x32abc['offset'],_0xc41e36=_0x32abc['offset']+_0x32abc[_0x0c1a('0x1c')],_0x34e887;if(_0xc41e36>=_0x10f6a5){_0xc41e36=_0x10f6a5;_0x34e887=0xc8;}else{_0x34e887=0xce;}_0x14408a['status'](_0x34e887);return _0x14408a['set'](_0x0c1a('0x1d'),_0x2e95f3+'-'+_0xc41e36+'/'+_0x10f6a5)['json'](_0x87433c);}return null;};}function patchUpdates(_0x410340){return function(_0x1ef7be){try{jsonpatch[_0x0c1a('0x1e')](_0x1ef7be,_0x410340,!![]);}catch(_0x1fcaab){return BPromise[_0x0c1a('0x1f')](_0x1fcaab);}return _0x1ef7be[_0x0c1a('0x20')]();};}function saveUpdates(_0x2f45ad,_0x2670ec){return function(_0x553a9e){if(_0x553a9e){return _0x553a9e[_0x0c1a('0x21')](_0x2f45ad)['then'](function(_0x263b14){return _0x263b14;});}return null;};}function removeEntity(_0x58a7a4,_0x2c763e){return function(_0x3835ee){if(_0x3835ee){return _0x3835ee[_0x0c1a('0x22')]()['then'](function(){_0x58a7a4['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x430d35,_0x50cdb8){return function(_0x386604){if(!_0x386604){_0x430d35[_0x0c1a('0x18')](0x194);}return _0x386604;};}function handleError(_0x4e891f,_0xe8972b){_0xe8972b=_0xe8972b||0x1f4;return function(_0x24836b){logger[_0x0c1a('0x23')](_0x24836b[_0x0c1a('0x24')]);if(_0x24836b[_0x0c1a('0x25')]){delete _0x24836b['name'];}_0x4e891f['status'](_0xe8972b)[_0x0c1a('0x26')](_0x24836b);};}exports[_0x0c1a('0x27')]=function(_0x69abf8,_0x5d0f5c){var _0x15b24d={},_0x35b78e={},_0x42a792={'count':0x0,'rows':[]};var _0x47577c=db[_0x0c1a('0x28')]['rawAttributes'];_0x35b78e[_0x0c1a('0x29')]=_['keys'](_0x47577c);_0x35b78e[_0x0c1a('0x2a')]=_[_0x0c1a('0x2b')](_0x69abf8['query']);_0x35b78e[_0x0c1a('0x2c')]=_[_0x0c1a('0x2d')](_0x35b78e[_0x0c1a('0x29')],_0x35b78e[_0x0c1a('0x2a')]);_0x35b78e[_0x0c1a('0x2c')]=_['concat'](_0x35b78e['filters'],['$and','$or',_0x0c1a('0x2e'),'$gte','$lt',_0x0c1a('0x2f'),_0x0c1a('0x30'),'$eq','$not',_0x0c1a('0x31'),_0x0c1a('0x32'),_0x0c1a('0x33'),_0x0c1a('0x34'),_0x0c1a('0x35'),_0x0c1a('0x36'),_0x0c1a('0x37'),_0x0c1a('0x38'),_0x0c1a('0x35'),_0x0c1a('0x39'),_0x0c1a('0x3a'),_0x0c1a('0x3b'),'$any']);_0x15b24d[_0x0c1a('0x3c')]=_[_0x0c1a('0x2d')](_0x35b78e[_0x0c1a('0x29')],qs[_0x0c1a('0x3d')](_0x69abf8[_0x0c1a('0x2a')]['fields']));_0x15b24d[_0x0c1a('0x3c')]=_0x15b24d[_0x0c1a('0x3c')]['length']?_0x15b24d[_0x0c1a('0x3c')]:_0x35b78e[_0x0c1a('0x29')];if(!_0x69abf8[_0x0c1a('0x2a')][_0x0c1a('0x3e')](_0x0c1a('0x3f'))){_0x15b24d[_0x0c1a('0x1c')]=qs[_0x0c1a('0x1c')](_0x69abf8['query'][_0x0c1a('0x1c')]);_0x15b24d[_0x0c1a('0x40')]=qs[_0x0c1a('0x40')](_0x69abf8['query']['offset']);}_0x15b24d['order']=qs[_0x0c1a('0x41')](_0x69abf8[_0x0c1a('0x2a')]['sort']);_0x15b24d[_0x0c1a('0x42')]=qs['filters'](_['pick'](_0x69abf8[_0x0c1a('0x2a')],_0x35b78e['filters']));if(_0x69abf8[_0x0c1a('0x2a')]['filter']){_0x15b24d[_0x0c1a('0x42')]=_[_0x0c1a('0x43')](_0x15b24d['where'],{'$or':_[_0x0c1a('0x44')](_0x47577c,function(_0x335266){if(_0x335266[_0x0c1a('0x45')][_0x0c1a('0x46')]!==_0x0c1a('0x47')){var _0x4dadc7={};_0x4dadc7[_0x335266['field']]={'$like':'%'+_0x69abf8[_0x0c1a('0x2a')][_0x0c1a('0x48')]+'%'};return _0x4dadc7;}})});}_0x15b24d=_[_0x0c1a('0x43')]({},_0x15b24d,_0x69abf8[_0x0c1a('0x49')]);var _0x3f61b2={'where':_0x15b24d[_0x0c1a('0x42')]};return db[_0x0c1a('0x28')][_0x0c1a('0x1b')](_0x3f61b2)[_0x0c1a('0x4a')](function(_0x74ce3c){_0x42a792[_0x0c1a('0x1b')]=_0x74ce3c;if(_0x69abf8[_0x0c1a('0x2a')][_0x0c1a('0x4b')]){_0x15b24d['include']=[{'all':!![]}];}return db[_0x0c1a('0x28')][_0x0c1a('0x4c')](_0x15b24d);})[_0x0c1a('0x4a')](function(_0x4ce196){_0x42a792['rows']=_0x4ce196;return _0x42a792;})['then'](respondWithFilteredResult(_0x5d0f5c,_0x15b24d))['catch'](handleError(_0x5d0f5c,null));};exports[_0x0c1a('0x4d')]=function(_0xb70e85,_0x2c1ae8){var _0x3f2940={'raw':!![],'where':{'id':_0xb70e85[_0x0c1a('0x4e')]['id']}},_0x263013={};_0x263013[_0x0c1a('0x29')]=_[_0x0c1a('0x2b')](db[_0x0c1a('0x28')]['rawAttributes']);_0x263013[_0x0c1a('0x2a')]=_[_0x0c1a('0x2b')](_0xb70e85[_0x0c1a('0x2a')]);_0x263013[_0x0c1a('0x2c')]=_[_0x0c1a('0x2d')](_0x263013[_0x0c1a('0x29')],_0x263013[_0x0c1a('0x2a')]);_0x3f2940[_0x0c1a('0x3c')]=_['intersection'](_0x263013[_0x0c1a('0x29')],qs['fields'](_0xb70e85['query']['fields']));_0x3f2940[_0x0c1a('0x3c')]=_0x3f2940['attributes'][_0x0c1a('0x4f')]?_0x3f2940[_0x0c1a('0x3c')]:_0x263013[_0x0c1a('0x29')];if(_0xb70e85[_0x0c1a('0x2a')][_0x0c1a('0x4b')]){_0x3f2940[_0x0c1a('0x50')]=[{'all':!![]}];}_0x3f2940=_['merge']({},_0x3f2940,_0xb70e85[_0x0c1a('0x49')]);return db[_0x0c1a('0x28')][_0x0c1a('0x51')](_0x3f2940)['then'](handleEntityNotFound(_0x2c1ae8,null))[_0x0c1a('0x4a')](respondWithResult(_0x2c1ae8,null))['catch'](handleError(_0x2c1ae8,null));};exports[_0x0c1a('0x52')]=function(_0x45f79c,_0x5e4eef){return db[_0x0c1a('0x28')][_0x0c1a('0x52')](_0x45f79c['body'],{})[_0x0c1a('0x4a')](respondWithResult(_0x5e4eef,0xc9))[_0x0c1a('0x53')](handleError(_0x5e4eef,null));};exports[_0x0c1a('0x21')]=function(_0x26f350,_0x2d18c7){if(_0x26f350[_0x0c1a('0x54')]['id']){delete _0x26f350[_0x0c1a('0x54')]['id'];}return db[_0x0c1a('0x28')][_0x0c1a('0x51')]({'where':{'id':_0x26f350[_0x0c1a('0x4e')]['id']}})[_0x0c1a('0x4a')](handleEntityNotFound(_0x2d18c7,null))[_0x0c1a('0x4a')](saveUpdates(_0x26f350[_0x0c1a('0x54')],null))[_0x0c1a('0x4a')](respondWithResult(_0x2d18c7,null))[_0x0c1a('0x53')](handleError(_0x2d18c7,null));};exports['describe']=function(_0x5ecb00,_0x42717a){return db[_0x0c1a('0x28')][_0x0c1a('0x55')]()[_0x0c1a('0x4a')](respondWithResult(_0x42717a,null))['catch'](handleError(_0x42717a,null));};exports['destroy']=function(_0x1dcb7d,_0x2ac635){var _0x15d88f;return db['CmHopper'][_0x0c1a('0x51')]({'where':{'id':_0x1dcb7d[_0x0c1a('0x4e')]['id']}})[_0x0c1a('0x4a')](handleEntityNotFound(_0x2ac635,null))[_0x0c1a('0x4a')](function(_0x4bf964){if(_0x4bf964){return _0x4bf964['destroy']()[_0x0c1a('0x4a')](function(_0x52a7f8){return _0x52a7f8;});}})['then'](function(_0x33abf6){_0x15d88f=_0x33abf6;if(_0x33abf6){if(_0x33abf6[_0x0c1a('0x56')]||_0x33abf6['CampaignId']){return db[_0x33abf6['VoiceQueueId']?_0x0c1a('0x57'):_0x0c1a('0x58')][_0x0c1a('0x51')]({'where':{'id':_0x33abf6[_0x0c1a('0x56')]?_0x33abf6[_0x0c1a('0x56')]:_0x33abf6[_0x0c1a('0x59')]},'attributes':['id',_0x0c1a('0x25')],'raw':!![]});}}})['then'](function(_0x5b7c22){var _0x5c8ff1={};if(_0x5b7c22){_[_0x0c1a('0x43')](_0x5c8ff1,_[_0x0c1a('0x5a')](_0x15d88f[_0x0c1a('0x5b')],['createdAt',_0x0c1a('0x5c'),'id']));_0x5c8ff1[_0x0c1a('0x5d')]=0x15;_0x5c8ff1[_0x0c1a('0x5e')]=_0x0c1a('0x5f');_0x5c8ff1[_0x0c1a('0x60')]=_0x5b7c22[_0x0c1a('0x25')];_0x5c8ff1[_0x0c1a('0x61')]=_0x1dcb7d['user'][_0x0c1a('0x25')];_0x5c8ff1['UserId']=_0x1dcb7d[_0x0c1a('0x62')]['id'];_0x5c8ff1[_0x0c1a('0x5f')]=!![];_0x5c8ff1[_0x0c1a('0x63')]=moment()[_0x0c1a('0x64')](_0x0c1a('0x65'));_0x5c8ff1[_0x0c1a('0x66')]=_0x15d88f[_0x0c1a('0x67')];_0x5c8ff1['campaigntype']=_0x15d88f[_0x0c1a('0x56')]?_0x0c1a('0x68'):'ivr';return db['CmContact'][_0x0c1a('0x51')]({'where':{'id':_0x5c8ff1[_0x0c1a('0x69')]},'attributes':[_0x0c1a('0x6a'),'lastName']})[_0x0c1a('0x4a')](function(_0x2cb7eb){if(!_[_0x0c1a('0x6b')](_0x2ac635)&&!_[_0x0c1a('0x6b')](_0x2cb7eb[_0x0c1a('0x6a')])){_0x5c8ff1['calleridname']=_0x2cb7eb['firstName'];if(!_['isNil'](_0x2cb7eb[_0x0c1a('0x6c')])){_0x5c8ff1[_0x0c1a('0x6d')]+='\x20'+_0x2cb7eb['lastName'];}}})[_0x0c1a('0x6e')](function(){return db[_0x0c1a('0x6f')][_0x0c1a('0x52')](_0x5c8ff1);});}})[_0x0c1a('0x4a')](function(){return _0x2ac635['status'](0xcc)[_0x0c1a('0x1a')]();})[_0x0c1a('0x53')](handleError(_0x2ac635,null));};exports[_0x0c1a('0x70')]=function(_0x10bb41,_0x276f1e,_0x1e41d8){var _0x19af1d=[];return db[_0x0c1a('0x71')][_0x0c1a('0x55')]()[_0x0c1a('0x4a')](function(_0x4957cd){_0x19af1d=_['keys'](_0x4957cd);return _0x10bb41[_0x0c1a('0x62')]['getVoiceQueues']({'where':{'type':_0x0c1a('0x72'),'dialActive':!![],'dialMethod':_0x0c1a('0x73')},'attributes':['id',_0x0c1a('0x74')],'raw':!![]});})[_0x0c1a('0x4a')](function(_0x4d7f95){if(_0x4d7f95&&_0x4d7f95[_0x0c1a('0x4f')]){return db[_0x0c1a('0x75')][_0x0c1a('0x76')](function(_0x320ebd){var _0x67dd9={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')},'VoiceQueueId':{'$in':_[_0x0c1a('0x44')](_0x4d7f95,'id')},'$or':[{'UserId':null},{'UserId':_0x10bb41[_0x0c1a('0x62')]['id']}]};var _0x309319=[];if(_0x10bb41['body']['direction']&&_0x10bb41[_0x0c1a('0x54')]['direction']==='prev'){if(!_[_0x0c1a('0x77')](_0x10bb41[_0x0c1a('0x54')][_0x0c1a('0x78')])){_0x67dd9['id']={'$in':_0x10bb41[_0x0c1a('0x54')][_0x0c1a('0x78')]};}_0x309319=[[_0x0c1a('0x79'),'ASC'],[_0x0c1a('0x7a'),_0x4d7f95[0x0][_0x0c1a('0x74')]===_0x0c1a('0x7b')?_0x0c1a('0x7c'):_0x0c1a('0x7b')],db[_0x0c1a('0x75')][_0x0c1a('0x7d')]('COALESCE(CmHopper.UserId,\x200)\x20ASC'),['id',_0x0c1a('0x7c')]];}else{if(!_[_0x0c1a('0x77')](_0x10bb41[_0x0c1a('0x54')][_0x0c1a('0x78')])){_0x67dd9['id']={'$notIn':_0x10bb41[_0x0c1a('0x54')][_0x0c1a('0x78')]};}_0x309319=[[_0x0c1a('0x79'),_0x0c1a('0x7c')],[_0x0c1a('0x7a'),_0x4d7f95[0x0][_0x0c1a('0x74')]],db['sequelize'][_0x0c1a('0x7d')](_0x0c1a('0x7e')),['id',_0x0c1a('0x7b')]];}return db[_0x0c1a('0x28')][_0x0c1a('0x7f')]({'attributes':['id',_0x0c1a('0x80')],'where':_0x67dd9,'order':_0x309319,'transaction':_0x320ebd,'lock':_0x320ebd[_0x0c1a('0x81')][_0x0c1a('0x82')],'include':[{'model':db['CmContact'],'as':_0x0c1a('0x83'),'attributes':_0x19af1d,'include':[{'model':db['CmCompany'],'as':_0x0c1a('0x84'),'attributes':['id',_0x0c1a('0x25')]}]},{'model':db['CmList'],'as':_0x0c1a('0x85'),'attributes':['id','name']},{'model':db[_0x0c1a('0x57')],'as':_0x0c1a('0x86'),'attributes':['id',_0x0c1a('0x25'),_0x0c1a('0x87')]}]})[_0x0c1a('0x4a')](function(_0x58e5e5){if(_0x58e5e5){return _0x58e5e5[_0x0c1a('0x21')]({'UserId':_0x10bb41['user']['id']},{'transaction':_0x320ebd});}});});}})[_0x0c1a('0x4a')](handleEntityNotFound(_0x276f1e,null))[_0x0c1a('0x4a')](respondWithResult(_0x276f1e,null))['catch'](handleError(_0x276f1e,null));};exports[_0x0c1a('0x88')]=function(_0x22f39e,_0x215b68,_0x144c38){return _0x22f39e['user'][_0x0c1a('0x89')]({'where':{'type':'outbound','dialActive':!![],'dialMethod':'preview'},'attributes':['id'],'raw':!![]})[_0x0c1a('0x4a')](function(_0x8f75da){if(_0x8f75da&&_0x8f75da[_0x0c1a('0x4f')]){return db[_0x0c1a('0x28')]['count']({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x0c1a('0x64')](_0x0c1a('0x65'))},'VoiceQueueId':{'$in':_[_0x0c1a('0x44')](_0x8f75da,'id')},'$or':[{'UserId':null},{'UserId':_0x22f39e[_0x0c1a('0x62')]['id']}]}});}return 0x0;})[_0x0c1a('0x4a')](function(_0x143eae){if(!_[_0x0c1a('0x6b')](_0x143eae)&&_[_0x0c1a('0x8a')](_0x143eae)){return _0x215b68['status'](0xc8)[_0x0c1a('0x8b')]({'contacts':_0x143eae});}else{logger[_0x0c1a('0x23')](_0x0c1a('0x8c'),'getOpenContacts',0x194,'entity\x20not\x20found');_0x215b68[_0x0c1a('0x18')](0x194);}})['catch'](handleError(_0x215b68,null));};
\ No newline at end of file
+var _0x4d81=['outbound','preview','sequelize','transaction','direction','isEmpty','hopperIds','priority','ASC','scheduledAt','dialOrderByScheduledAt','DESC','literal','COALESCE(CmHopper.UserId,\x200)\x20ASC','findOne','scheduledat','LOCK','UPDATE','CmCompany','Company','CmList','List','Queue','dialActive','getVoiceQueues','isNumber','CmHopper,\x20%s,\x20%s,\x20%s','getOpenContacts','entity\x20not\x20found','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','count','offset','limit','set','json','apply','update','then','error','name','send','index','CmHopper','rawAttributes','model','keys','query','filters','intersection','concat','$and','$gt','$gte','$lt','$lte','$eq','$not','$between','$notBetween','$in','$like','$notLike','$iLike','$notILike','$overlap','$contains','$contained','$any','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','type','includeAll','findAll','rows','show','params','include','options','find','catch','create','body','describe','destroy','VoiceQueueId','CampaignId','Campaign','omit','dataValues','createdAt','state','statedesc','campaign','membername','user','UserId','deleted','deletedat','format','YYYY-MM-DD\x20HH:mm:ss','calleridnum','phone','campaigntype','queue','ivr','ContactId','firstName','isNil','lastName','calleridname','finally','CmHopperFinal','CmContact'];(function(_0x34d114,_0x5a2007){var _0x2d3b5a=function(_0x3534ce){while(--_0x3534ce){_0x34d114['push'](_0x34d114['shift']());}};_0x2d3b5a(++_0x5a2007);}(_0x4d81,0x149));var _0x14d8=function(_0x529442,_0x6a893){_0x529442=_0x529442-0x0;var _0x2b4039=_0x4d81[_0x529442];return _0x2b4039;};'use strict';var pdf=require(_0x14d8('0x0'));var emlformat=require(_0x14d8('0x1'));var rimraf=require(_0x14d8('0x2'));var zipdir=require(_0x14d8('0x3'));var jsonpatch=require(_0x14d8('0x4'));var rp=require('request-promise');var moment=require(_0x14d8('0x5'));var BPromise=require(_0x14d8('0x6'));var Mustache=require(_0x14d8('0x7'));var util=require(_0x14d8('0x8'));var path=require(_0x14d8('0x9'));var sox=require('sox');var csv=require(_0x14d8('0xa'));var ejs=require(_0x14d8('0xb'));var fs=require('fs');var _=require(_0x14d8('0xc'));var squel=require(_0x14d8('0xd'));var crypto=require(_0x14d8('0xe'));var jsforce=require(_0x14d8('0xf'));var deskjs=require(_0x14d8('0x10'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x14d8('0x11'));var authService=require(_0x14d8('0x12'));var hardwareService=require(_0x14d8('0x13'));var Redis=require(_0x14d8('0x14'));var qs=require(_0x14d8('0x15'));var logger=require(_0x14d8('0x16'))(_0x14d8('0x17'));var utils=require(_0x14d8('0x18'));var config=require(_0x14d8('0x19'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2c9612,_0x16aac){_0x16aac=_0x16aac||0xcc;return function(_0x3a4ba7){if(_0x3a4ba7){return _0x2c9612[_0x14d8('0x1a')](_0x16aac);}return _0x2c9612[_0x14d8('0x1b')](_0x16aac)[_0x14d8('0x1c')]();};}function respondWithResult(_0x1085f6,_0x3348b1){_0x3348b1=_0x3348b1||0xc8;return function(_0x553d58){if(_0x553d58){return _0x1085f6['status'](_0x3348b1)['json'](_0x553d58);}};}function respondWithFilteredResult(_0x4139f1,_0x2623d6){return function(_0x333279){if(_0x333279){var _0x3c8f07=_0x333279[_0x14d8('0x1d')],_0x351cdb=_0x2623d6[_0x14d8('0x1e')],_0x3a31a8=_0x2623d6['offset']+_0x2623d6[_0x14d8('0x1f')],_0x53aa37;if(_0x3a31a8>=_0x3c8f07){_0x3a31a8=_0x3c8f07;_0x53aa37=0xc8;}else{_0x53aa37=0xce;}_0x4139f1[_0x14d8('0x1b')](_0x53aa37);return _0x4139f1[_0x14d8('0x20')]('Content-Range',_0x351cdb+'-'+_0x3a31a8+'/'+_0x3c8f07)[_0x14d8('0x21')](_0x333279);}return null;};}function patchUpdates(_0x7fa8b2){return function(_0x4b5cc8){try{jsonpatch[_0x14d8('0x22')](_0x4b5cc8,_0x7fa8b2,!![]);}catch(_0x40b66f){return BPromise['reject'](_0x40b66f);}return _0x4b5cc8['save']();};}function saveUpdates(_0x396c0f,_0x168919){return function(_0x2e43f3){if(_0x2e43f3){return _0x2e43f3[_0x14d8('0x23')](_0x396c0f)[_0x14d8('0x24')](function(_0x5322b5){return _0x5322b5;});}return null;};}function removeEntity(_0x3b29bb,_0x1250cd){return function(_0x4cc8bf){if(_0x4cc8bf){return _0x4cc8bf['destroy']()['then'](function(){_0x3b29bb[_0x14d8('0x1b')](0xcc)[_0x14d8('0x1c')]();});}};}function handleEntityNotFound(_0x5704fc,_0x362c87){return function(_0x491a38){if(!_0x491a38){_0x5704fc['sendStatus'](0x194);}return _0x491a38;};}function handleError(_0xf259e9,_0x275505){_0x275505=_0x275505||0x1f4;return function(_0x193794){logger[_0x14d8('0x25')](_0x193794['stack']);if(_0x193794['name']){delete _0x193794[_0x14d8('0x26')];}_0xf259e9[_0x14d8('0x1b')](_0x275505)[_0x14d8('0x27')](_0x193794);};}exports[_0x14d8('0x28')]=function(_0x1c96d5,_0xf2d08c){var _0xd91ad7={},_0x33dd83={},_0x2667bd={'count':0x0,'rows':[]};var _0xe85822=db[_0x14d8('0x29')][_0x14d8('0x2a')];_0x33dd83[_0x14d8('0x2b')]=_[_0x14d8('0x2c')](_0xe85822);_0x33dd83[_0x14d8('0x2d')]=_[_0x14d8('0x2c')](_0x1c96d5[_0x14d8('0x2d')]);_0x33dd83[_0x14d8('0x2e')]=_[_0x14d8('0x2f')](_0x33dd83[_0x14d8('0x2b')],_0x33dd83[_0x14d8('0x2d')]);_0x33dd83[_0x14d8('0x2e')]=_[_0x14d8('0x30')](_0x33dd83['filters'],[_0x14d8('0x31'),'$or',_0x14d8('0x32'),_0x14d8('0x33'),_0x14d8('0x34'),_0x14d8('0x35'),'$ne',_0x14d8('0x36'),_0x14d8('0x37'),_0x14d8('0x38'),_0x14d8('0x39'),_0x14d8('0x3a'),'$notIn',_0x14d8('0x3b'),_0x14d8('0x3c'),_0x14d8('0x3d'),_0x14d8('0x3e'),_0x14d8('0x3b'),_0x14d8('0x3f'),_0x14d8('0x40'),_0x14d8('0x41'),_0x14d8('0x42')]);_0xd91ad7[_0x14d8('0x43')]=_[_0x14d8('0x2f')](_0x33dd83[_0x14d8('0x2b')],qs[_0x14d8('0x44')](_0x1c96d5['query'][_0x14d8('0x44')]));_0xd91ad7[_0x14d8('0x43')]=_0xd91ad7[_0x14d8('0x43')][_0x14d8('0x45')]?_0xd91ad7[_0x14d8('0x43')]:_0x33dd83[_0x14d8('0x2b')];if(!_0x1c96d5['query'][_0x14d8('0x46')](_0x14d8('0x47'))){_0xd91ad7[_0x14d8('0x1f')]=qs[_0x14d8('0x1f')](_0x1c96d5[_0x14d8('0x2d')][_0x14d8('0x1f')]);_0xd91ad7['offset']=qs['offset'](_0x1c96d5['query'][_0x14d8('0x1e')]);}_0xd91ad7['order']=qs[_0x14d8('0x48')](_0x1c96d5[_0x14d8('0x2d')][_0x14d8('0x48')]);_0xd91ad7[_0x14d8('0x49')]=qs[_0x14d8('0x2e')](_[_0x14d8('0x4a')](_0x1c96d5[_0x14d8('0x2d')],_0x33dd83[_0x14d8('0x2e')]));if(_0x1c96d5[_0x14d8('0x2d')][_0x14d8('0x4b')]){_0xd91ad7['where']=_[_0x14d8('0x4c')](_0xd91ad7[_0x14d8('0x49')],{'$or':_[_0x14d8('0x4d')](_0xe85822,function(_0x41d393){if(_0x41d393[_0x14d8('0x4e')]['key']!=='VIRTUAL'){var _0x349e0d={};_0x349e0d[_0x41d393['field']]={'$like':'%'+_0x1c96d5[_0x14d8('0x2d')][_0x14d8('0x4b')]+'%'};return _0x349e0d;}})});}_0xd91ad7=_[_0x14d8('0x4c')]({},_0xd91ad7,_0x1c96d5['options']);var _0x328bec={'where':_0xd91ad7[_0x14d8('0x49')]};return db[_0x14d8('0x29')][_0x14d8('0x1d')](_0x328bec)['then'](function(_0x46b1d0){_0x2667bd['count']=_0x46b1d0;if(_0x1c96d5[_0x14d8('0x2d')][_0x14d8('0x4f')]){_0xd91ad7['include']=[{'all':!![]}];}return db[_0x14d8('0x29')][_0x14d8('0x50')](_0xd91ad7);})[_0x14d8('0x24')](function(_0x3f6e9d){_0x2667bd[_0x14d8('0x51')]=_0x3f6e9d;return _0x2667bd;})[_0x14d8('0x24')](respondWithFilteredResult(_0xf2d08c,_0xd91ad7))['catch'](handleError(_0xf2d08c,null));};exports[_0x14d8('0x52')]=function(_0x37f224,_0x358a5b){var _0x4ad781={'raw':!![],'where':{'id':_0x37f224[_0x14d8('0x53')]['id']}},_0x42a3f9={};_0x42a3f9[_0x14d8('0x2b')]=_[_0x14d8('0x2c')](db[_0x14d8('0x29')][_0x14d8('0x2a')]);_0x42a3f9[_0x14d8('0x2d')]=_[_0x14d8('0x2c')](_0x37f224['query']);_0x42a3f9[_0x14d8('0x2e')]=_[_0x14d8('0x2f')](_0x42a3f9['model'],_0x42a3f9[_0x14d8('0x2d')]);_0x4ad781[_0x14d8('0x43')]=_[_0x14d8('0x2f')](_0x42a3f9[_0x14d8('0x2b')],qs[_0x14d8('0x44')](_0x37f224[_0x14d8('0x2d')][_0x14d8('0x44')]));_0x4ad781['attributes']=_0x4ad781[_0x14d8('0x43')][_0x14d8('0x45')]?_0x4ad781[_0x14d8('0x43')]:_0x42a3f9[_0x14d8('0x2b')];if(_0x37f224[_0x14d8('0x2d')]['includeAll']){_0x4ad781[_0x14d8('0x54')]=[{'all':!![]}];}_0x4ad781=_[_0x14d8('0x4c')]({},_0x4ad781,_0x37f224[_0x14d8('0x55')]);return db['CmHopper'][_0x14d8('0x56')](_0x4ad781)[_0x14d8('0x24')](handleEntityNotFound(_0x358a5b,null))[_0x14d8('0x24')](respondWithResult(_0x358a5b,null))[_0x14d8('0x57')](handleError(_0x358a5b,null));};exports[_0x14d8('0x58')]=function(_0x5dc13e,_0x22cfef){return db['CmHopper'][_0x14d8('0x58')](_0x5dc13e[_0x14d8('0x59')],{})[_0x14d8('0x24')](respondWithResult(_0x22cfef,0xc9))[_0x14d8('0x57')](handleError(_0x22cfef,null));};exports[_0x14d8('0x23')]=function(_0x119dab,_0x26d930){if(_0x119dab[_0x14d8('0x59')]['id']){delete _0x119dab[_0x14d8('0x59')]['id'];}return db[_0x14d8('0x29')][_0x14d8('0x56')]({'where':{'id':_0x119dab[_0x14d8('0x53')]['id']}})['then'](handleEntityNotFound(_0x26d930,null))[_0x14d8('0x24')](saveUpdates(_0x119dab[_0x14d8('0x59')],null))['then'](respondWithResult(_0x26d930,null))[_0x14d8('0x57')](handleError(_0x26d930,null));};exports[_0x14d8('0x5a')]=function(_0x5b31f0,_0x27d936){return db[_0x14d8('0x29')][_0x14d8('0x5a')]()[_0x14d8('0x24')](respondWithResult(_0x27d936,null))[_0x14d8('0x57')](handleError(_0x27d936,null));};exports[_0x14d8('0x5b')]=function(_0x457686,_0x4592af){var _0x1e5fa6;return db['CmHopper'][_0x14d8('0x56')]({'where':{'id':_0x457686[_0x14d8('0x53')]['id']}})[_0x14d8('0x24')](handleEntityNotFound(_0x4592af,null))['then'](function(_0x55ae29){if(_0x55ae29){return _0x55ae29[_0x14d8('0x5b')]()[_0x14d8('0x24')](function(_0x307b71){return _0x307b71;});}})[_0x14d8('0x24')](function(_0x4056c3){_0x1e5fa6=_0x4056c3;if(_0x4056c3){if(_0x4056c3[_0x14d8('0x5c')]||_0x4056c3[_0x14d8('0x5d')]){return db[_0x4056c3[_0x14d8('0x5c')]?'VoiceQueue':_0x14d8('0x5e')]['find']({'where':{'id':_0x4056c3['VoiceQueueId']?_0x4056c3[_0x14d8('0x5c')]:_0x4056c3[_0x14d8('0x5d')]},'attributes':['id',_0x14d8('0x26')],'raw':!![]});}}})[_0x14d8('0x24')](function(_0x15d007){var _0x435101={};if(_0x15d007){_[_0x14d8('0x4c')](_0x435101,_[_0x14d8('0x5f')](_0x1e5fa6[_0x14d8('0x60')],[_0x14d8('0x61'),'updatedAt','id']));_0x435101[_0x14d8('0x62')]=0x15;_0x435101[_0x14d8('0x63')]='deleted';_0x435101[_0x14d8('0x64')]=_0x15d007[_0x14d8('0x26')];_0x435101[_0x14d8('0x65')]=_0x457686[_0x14d8('0x66')][_0x14d8('0x26')];_0x435101[_0x14d8('0x67')]=_0x457686['user']['id'];_0x435101[_0x14d8('0x68')]=!![];_0x435101[_0x14d8('0x69')]=moment()[_0x14d8('0x6a')](_0x14d8('0x6b'));_0x435101[_0x14d8('0x6c')]=_0x1e5fa6[_0x14d8('0x6d')];_0x435101[_0x14d8('0x6e')]=_0x1e5fa6[_0x14d8('0x5c')]?_0x14d8('0x6f'):_0x14d8('0x70');return db['CmContact']['find']({'where':{'id':_0x435101[_0x14d8('0x71')]},'attributes':[_0x14d8('0x72'),'lastName']})[_0x14d8('0x24')](function(_0x1bd949){if(!_[_0x14d8('0x73')](_0x4592af)&&!_[_0x14d8('0x73')](_0x1bd949['firstName'])){_0x435101['calleridname']=_0x1bd949[_0x14d8('0x72')];if(!_[_0x14d8('0x73')](_0x1bd949[_0x14d8('0x74')])){_0x435101[_0x14d8('0x75')]+='\x20'+_0x1bd949[_0x14d8('0x74')];}}})[_0x14d8('0x76')](function(){return db[_0x14d8('0x77')][_0x14d8('0x58')](_0x435101);});}})[_0x14d8('0x24')](function(){return _0x4592af['status'](0xcc)[_0x14d8('0x1c')]();})[_0x14d8('0x57')](handleError(_0x4592af,null));};exports['getPreview']=function(_0x570eb4,_0x55173a,_0x1e427b){var _0x21ad16=[];return db[_0x14d8('0x78')][_0x14d8('0x5a')]()[_0x14d8('0x24')](function(_0x3d6c20){_0x21ad16=_[_0x14d8('0x2c')](_0x3d6c20);return _0x570eb4[_0x14d8('0x66')]['getVoiceQueues']({'where':{'type':_0x14d8('0x79'),'dialActive':!![],'dialMethod':_0x14d8('0x7a')},'attributes':['id','dialOrderByScheduledAt'],'raw':!![]});})[_0x14d8('0x24')](function(_0x381759){if(_0x381759&&_0x381759[_0x14d8('0x45')]){return db[_0x14d8('0x7b')][_0x14d8('0x7c')](function(_0x257244){var _0x1839b8={'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x14d8('0x6a')](_0x14d8('0x6b'))},'VoiceQueueId':{'$in':_[_0x14d8('0x4d')](_0x381759,'id')},'$or':[{'UserId':null},{'UserId':_0x570eb4[_0x14d8('0x66')]['id']}]};var _0x275876=[];if(_0x570eb4[_0x14d8('0x59')][_0x14d8('0x7d')]&&_0x570eb4[_0x14d8('0x59')][_0x14d8('0x7d')]==='prev'){if(!_[_0x14d8('0x7e')](_0x570eb4['body'][_0x14d8('0x7f')])){_0x1839b8['id']={'$in':_0x570eb4['body'][_0x14d8('0x7f')]};}_0x275876=[[_0x14d8('0x80'),_0x14d8('0x81')],[_0x14d8('0x82'),_0x381759[0x0][_0x14d8('0x83')]===_0x14d8('0x81')?_0x14d8('0x84'):_0x14d8('0x81')],db[_0x14d8('0x7b')][_0x14d8('0x85')](_0x14d8('0x86')),['id',_0x14d8('0x84')]];}else{if(!_[_0x14d8('0x7e')](_0x570eb4['body'][_0x14d8('0x7f')])){_0x1839b8['id']={'$notIn':_0x570eb4[_0x14d8('0x59')][_0x14d8('0x7f')]};}_0x275876=[[_0x14d8('0x80'),_0x14d8('0x84')],[_0x14d8('0x82'),_0x381759[0x0]['dialOrderByScheduledAt']],db['sequelize'][_0x14d8('0x85')]('COALESCE(CmHopper.UserId,\x200)\x20DESC'),['id',_0x14d8('0x81')]];}return db[_0x14d8('0x29')][_0x14d8('0x87')]({'attributes':['id',_0x14d8('0x88')],'where':_0x1839b8,'order':_0x275876,'transaction':_0x257244,'lock':_0x257244[_0x14d8('0x89')][_0x14d8('0x8a')],'include':[{'model':db['CmContact'],'as':'Contact','attributes':_0x21ad16,'include':[{'model':db[_0x14d8('0x8b')],'as':_0x14d8('0x8c'),'attributes':['id','name']}]},{'model':db[_0x14d8('0x8d')],'as':_0x14d8('0x8e'),'attributes':['id',_0x14d8('0x26')]},{'model':db['VoiceQueue'],'as':_0x14d8('0x8f'),'attributes':['id',_0x14d8('0x26'),_0x14d8('0x90')]}]})[_0x14d8('0x24')](function(_0x2fcd80){if(_0x2fcd80){return _0x2fcd80[_0x14d8('0x23')]({'UserId':_0x570eb4[_0x14d8('0x66')]['id']},{'transaction':_0x257244});}});});}})['then'](handleEntityNotFound(_0x55173a,null))[_0x14d8('0x24')](respondWithResult(_0x55173a,null))[_0x14d8('0x57')](handleError(_0x55173a,null));};exports['getOpenContacts']=function(_0x1dbb3a,_0x1c21f9,_0x309d38){return _0x1dbb3a[_0x14d8('0x66')][_0x14d8('0x91')]({'where':{'type':_0x14d8('0x79'),'dialActive':!![],'dialMethod':_0x14d8('0x7a')},'attributes':['id'],'raw':!![]})[_0x14d8('0x24')](function(_0x4f5f1f){if(_0x4f5f1f&&_0x4f5f1f[_0x14d8('0x45')]){return db[_0x14d8('0x29')]['count']({'where':{'active':![],'recallme':![],'scheduledAt':{'$lte':moment()[_0x14d8('0x6a')]('YYYY-MM-DD\x20HH:mm:ss')},'VoiceQueueId':{'$in':_[_0x14d8('0x4d')](_0x4f5f1f,'id')},'$or':[{'UserId':null},{'UserId':_0x1dbb3a[_0x14d8('0x66')]['id']}]}});}return 0x0;})[_0x14d8('0x24')](function(_0x3849da){if(!_[_0x14d8('0x73')](_0x3849da)&&_[_0x14d8('0x92')](_0x3849da)){return _0x1c21f9[_0x14d8('0x1b')](0xc8)[_0x14d8('0x21')]({'contacts':_0x3849da});}else{logger['error'](_0x14d8('0x93'),_0x14d8('0x94'),0x194,_0x14d8('0x95'));_0x1c21f9['sendStatus'](0x194);}})[_0x14d8('0x57')](handleError(_0x1c21f9,null));};
\ No newline at end of file
index e4ba717..70a2b73 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7ea3=['define','CmHopper','scheduledat','phone','priority','lodash','api','moment','bluebird','request-promise','./cmHopper.attributes'];(function(_0x299717,_0x581968){var _0x42336d=function(_0x4cdec4){while(--_0x4cdec4){_0x299717['push'](_0x299717['shift']());}};_0x42336d(++_0x581968);}(_0x7ea3,0x19c));var _0x37ea=function(_0x3f2cfc,_0x2827b0){_0x3f2cfc=_0x3f2cfc-0x0;var _0x1d1e61=_0x7ea3[_0x3f2cfc];return _0x1d1e61;};'use strict';var _=require(_0x37ea('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x37ea('0x1'));var moment=require(_0x37ea('0x2'));var BPromise=require(_0x37ea('0x3'));var rp=require(_0x37ea('0x4'));var attributes=require(_0x37ea('0x5'));module['exports']=function(_0x1717f6,_0x2b7218){return _0x1717f6[_0x37ea('0x6')](_0x37ea('0x7'),attributes,{'tableName':'cm_hopper','paranoid':![],'indexes':[{'name':_0x37ea('0x8'),'fields':['scheduledat']},{'name':_0x37ea('0x9'),'fields':[_0x37ea('0x9')]},{'name':_0x37ea('0xa'),'fields':[_0x37ea('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x6396=['../../config/logger','api','bluebird','request-promise','./cmHopper.attributes','exports','define','CmHopper','cm_hopper','scheduledat','phone','priority','lodash','util'];(function(_0x56abc9,_0x4403e7){var _0x47956f=function(_0x5c6b02){while(--_0x5c6b02){_0x56abc9['push'](_0x56abc9['shift']());}};_0x47956f(++_0x4403e7);}(_0x6396,0xc2));var _0x6639=function(_0x3e531a,_0x28a82a){_0x3e531a=_0x3e531a-0x0;var _0x3c2574=_0x6396[_0x3e531a];return _0x3c2574;};'use strict';var _=require(_0x6639('0x0'));var util=require(_0x6639('0x1'));var logger=require(_0x6639('0x2'))(_0x6639('0x3'));var moment=require('moment');var BPromise=require(_0x6639('0x4'));var rp=require(_0x6639('0x5'));var attributes=require(_0x6639('0x6'));module[_0x6639('0x7')]=function(_0x404e50,_0x53d8f1){return _0x404e50[_0x6639('0x8')](_0x6639('0x9'),attributes,{'tableName':_0x6639('0xa'),'paranoid':![],'indexes':[{'name':_0x6639('0xb'),'fields':[_0x6639('0xb')]},{'name':'phone','fields':[_0x6639('0xc')]},{'name':_0x6639('0xd'),'fields':['priority']}],'timestamps':!![]});};
\ No newline at end of file
index d11cabb..854568d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda04=['describe','sequelize','transaction','order','LOCK','Contact','keys','length','MoveContactManagedDialer','CmHopperFinal','COUNT','literal','`scheduledat`\x20>=\x20','format','\x20,\x201,\x20null','contactsRescheduled','CountReScheduled','GetContactRecallMe','push','all','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','then','debug','CmHopper,\x20%s,\x20%s,\x20%s','error','code','message','CmHopper,\x20%s,\x20%s','info','request\x20sent','catch','GetCmHopper','CmHopper','findAll','options','raw','where','attributes','limit','include','map','model','ShowCmHopper','CreateCmHopper','body','stringify','UpdateCmHopper','update','DestroyCmHopper','destroy','GetContactDialer','CmContact'];(function(_0x9d1e6b,_0x3bdc22){var _0x2b3070=function(_0x4c4ced){while(--_0x4c4ced){_0x9d1e6b['push'](_0x9d1e6b['shift']());}};_0x2b3070(++_0x3bdc22);}(_0xda04,0x114));var _0x4da0=function(_0x1d2bbb,_0x202267){_0x1d2bbb=_0x1d2bbb-0x0;var _0x38082b=_0xda04[_0x1d2bbb];return _0x38082b;};'use strict';var _=require(_0x4da0('0x0'));var util=require(_0x4da0('0x1'));var moment=require(_0x4da0('0x2'));var BPromise=require(_0x4da0('0x3'));var rs=require(_0x4da0('0x4'));var fs=require('fs');var Redis=require(_0x4da0('0x5'));var db=require(_0x4da0('0x6'))['db'];var utils=require(_0x4da0('0x7'));var logger=require(_0x4da0('0x8'))(_0x4da0('0x9'));var config=require(_0x4da0('0xa'));var jayson=require(_0x4da0('0xb'));var client=jayson[_0x4da0('0xc')]['http']({'port':0x232a});function respondWithRpcPromise(_0x37e80b,_0x5398a8,_0xfca337){return new BPromise(function(_0x4b6ce3,_0x51f863){return client['request'](_0x37e80b,_0xfca337)[_0x4da0('0xd')](function(_0x23a72b){logger['info']('CmHopper,\x20%s,\x20%s',_0x5398a8,'request\x20sent');logger[_0x4da0('0xe')](_0x4da0('0xf'),_0x5398a8,'request\x20sent',JSON['stringify'](_0x23a72b));if(_0x23a72b['error']){if(_0x23a72b[_0x4da0('0x10')][_0x4da0('0x11')]===0x1f4){logger[_0x4da0('0x10')]('CmHopper,\x20%s,\x20%s',_0x5398a8,_0x23a72b[_0x4da0('0x10')][_0x4da0('0x12')]);return _0x51f863(_0x23a72b['error']['message']);}logger['error'](_0x4da0('0x13'),_0x5398a8,_0x23a72b[_0x4da0('0x10')]['message']);return _0x4b6ce3(_0x23a72b[_0x4da0('0x10')][_0x4da0('0x12')]);}else{logger[_0x4da0('0x14')](_0x4da0('0x13'),_0x5398a8,_0x4da0('0x15'));_0x4b6ce3(_0x23a72b['result'][_0x4da0('0x12')]);}})[_0x4da0('0x16')](function(_0x4e1268){logger[_0x4da0('0x10')]('CmHopper,\x20%s,\x20%s',_0x5398a8,_0x4e1268);_0x51f863(_0x4e1268);});});}exports[_0x4da0('0x17')]=function(_0x3b3cef){var _0x3d0a8b=this;return new Promise(function(_0x434e8d,_0x3d8ce6){return db[_0x4da0('0x18')][_0x4da0('0x19')]({'raw':_0x3b3cef[_0x4da0('0x1a')]?_0x3b3cef[_0x4da0('0x1a')][_0x4da0('0x1b')]===undefined?!![]:![]:!![],'where':_0x3b3cef[_0x4da0('0x1a')]?_0x3b3cef[_0x4da0('0x1a')][_0x4da0('0x1c')]||null:null,'attributes':_0x3b3cef[_0x4da0('0x1a')]?_0x3b3cef['options'][_0x4da0('0x1d')]||null:null,'limit':_0x3b3cef[_0x4da0('0x1a')]?_0x3b3cef[_0x4da0('0x1a')][_0x4da0('0x1e')]||null:null,'include':_0x3b3cef['options']?_0x3b3cef[_0x4da0('0x1a')][_0x4da0('0x1f')]?_['map'](_0x3b3cef[_0x4da0('0x1a')][_0x4da0('0x1f')],function(_0x24e37f){return{'model':db[_0x24e37f['model']],'as':_0x24e37f['as'],'attributes':_0x24e37f[_0x4da0('0x1d')],'include':_0x24e37f[_0x4da0('0x1f')]?_[_0x4da0('0x20')](_0x24e37f[_0x4da0('0x1f')],function(_0x23445c){return{'model':db[_0x23445c['model']],'as':_0x23445c['as'],'attributes':_0x23445c[_0x4da0('0x1d')],'include':_0x23445c['include']?_[_0x4da0('0x20')](_0x23445c[_0x4da0('0x1f')],function(_0x53e9eb){return{'model':db[_0x53e9eb[_0x4da0('0x21')]],'as':_0x53e9eb['as'],'attributes':_0x53e9eb[_0x4da0('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x4da0('0xd')](function(_0x302a80){logger['info'](_0x4da0('0x17'),_0x3b3cef);logger[_0x4da0('0xe')](_0x4da0('0x17'),_0x3b3cef,JSON['stringify'](_0x302a80));_0x434e8d(_0x302a80);})[_0x4da0('0x16')](function(_0x3879d4){logger[_0x4da0('0x10')](_0x4da0('0x17'),_0x3879d4['message'],_0x3b3cef);_0x3d8ce6(_0x3d0a8b[_0x4da0('0x10')](0x1f4,_0x3879d4['message']));});});};exports[_0x4da0('0x22')]=function(_0x22a72c){var _0x4010bc=this;return new Promise(function(_0x44b3ed,_0x5e861e){return db[_0x4da0('0x18')]['find']({'raw':_0x22a72c[_0x4da0('0x1a')]?_0x22a72c[_0x4da0('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x22a72c[_0x4da0('0x1a')]?_0x22a72c[_0x4da0('0x1a')][_0x4da0('0x1c')]||null:null,'attributes':_0x22a72c[_0x4da0('0x1a')]?_0x22a72c[_0x4da0('0x1a')][_0x4da0('0x1d')]||null:null,'include':_0x22a72c[_0x4da0('0x1a')]?_0x22a72c['options'][_0x4da0('0x1f')]?_[_0x4da0('0x20')](_0x22a72c['options'][_0x4da0('0x1f')],function(_0x81edba){return{'model':db[_0x81edba[_0x4da0('0x21')]],'as':_0x81edba['as'],'attributes':_0x81edba['attributes'],'include':_0x81edba['include']?_[_0x4da0('0x20')](_0x81edba[_0x4da0('0x1f')],function(_0x3e4bdc){return{'model':db[_0x3e4bdc[_0x4da0('0x21')]],'as':_0x3e4bdc['as'],'attributes':_0x3e4bdc[_0x4da0('0x1d')],'include':_0x3e4bdc[_0x4da0('0x1f')]?_['map'](_0x3e4bdc[_0x4da0('0x1f')],function(_0x156609){return{'model':db[_0x156609[_0x4da0('0x21')]],'as':_0x156609['as'],'attributes':_0x156609[_0x4da0('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x4da0('0xd')](function(_0x2df1fe){logger[_0x4da0('0x14')]('ShowCmHopper',_0x22a72c);logger[_0x4da0('0xe')](_0x4da0('0x22'),_0x22a72c,JSON['stringify'](_0x2df1fe));_0x44b3ed(_0x2df1fe);})[_0x4da0('0x16')](function(_0x9a9c9d){logger[_0x4da0('0x10')](_0x4da0('0x22'),_0x9a9c9d[_0x4da0('0x12')],_0x22a72c);_0x5e861e(_0x4010bc['error'](0x1f4,_0x9a9c9d[_0x4da0('0x12')]));});});};exports[_0x4da0('0x23')]=function(_0x2ffd72){var _0x5ba2dc=this;return new Promise(function(_0x1d49d7,_0x44f7f0){return db[_0x4da0('0x18')]['create'](_0x2ffd72[_0x4da0('0x24')],{'raw':_0x2ffd72[_0x4da0('0x1a')]?_0x2ffd72[_0x4da0('0x1a')][_0x4da0('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x32dd64){logger[_0x4da0('0x14')](_0x4da0('0x23'),_0x2ffd72);logger[_0x4da0('0xe')](_0x4da0('0x23'),_0x2ffd72,JSON[_0x4da0('0x25')](_0x32dd64));_0x1d49d7(_0x32dd64);})[_0x4da0('0x16')](function(_0x38f89e){logger['error'](_0x4da0('0x23'),_0x38f89e[_0x4da0('0x12')],_0x2ffd72);_0x44f7f0(_0x5ba2dc['error'](0x1f4,_0x38f89e['message']));});});};exports[_0x4da0('0x26')]=function(_0x387e82){var _0x4c01d3=this;return new Promise(function(_0x1447d0,_0x49a160){return db[_0x4da0('0x18')][_0x4da0('0x27')](_0x387e82['body'],{'raw':_0x387e82['options']?_0x387e82[_0x4da0('0x1a')][_0x4da0('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x387e82[_0x4da0('0x1a')]?_0x387e82[_0x4da0('0x1a')][_0x4da0('0x1c')]||null:null,'attributes':_0x387e82[_0x4da0('0x1a')]?_0x387e82[_0x4da0('0x1a')]['attributes']||null:null,'limit':_0x387e82[_0x4da0('0x1a')]?_0x387e82[_0x4da0('0x1a')][_0x4da0('0x1e')]||null:null})[_0x4da0('0xd')](function(_0x25c764){logger[_0x4da0('0x14')](_0x4da0('0x26'),_0x387e82);logger['debug']('UpdateCmHopper',_0x387e82,JSON[_0x4da0('0x25')](_0x25c764));_0x1447d0(_0x25c764);})[_0x4da0('0x16')](function(_0x53bda7){logger['error'](_0x4da0('0x26'),_0x53bda7[_0x4da0('0x12')],_0x387e82);_0x49a160(_0x4c01d3['error'](0x1f4,_0x53bda7[_0x4da0('0x12')]));});});};exports[_0x4da0('0x28')]=function(_0x176d4c){var _0x5be71b=this;return new Promise(function(_0x8e9ae7,_0x1b2561){return db[_0x4da0('0x18')][_0x4da0('0x29')]({'where':_0x176d4c[_0x4da0('0x1a')]?_0x176d4c[_0x4da0('0x1a')][_0x4da0('0x1c')]||null:null})[_0x4da0('0xd')](function(_0x798310){logger[_0x4da0('0x14')](_0x4da0('0x28'),_0x176d4c);logger[_0x4da0('0xe')](_0x4da0('0x28'),_0x176d4c,JSON['stringify'](_0x798310));_0x8e9ae7(_0x798310);})[_0x4da0('0x16')](function(_0x3c3fdd){logger[_0x4da0('0x10')](_0x4da0('0x28'),_0x3c3fdd['message'],_0x176d4c);_0x1b2561(_0x5be71b[_0x4da0('0x10')](0x1f4,_0x3c3fdd['message']));});});};exports[_0x4da0('0x2a')]=function(_0x4ae9e0){var _0x594546=this;return new Promise(function(_0x437287,_0x3d35a3){return db[_0x4da0('0x2b')][_0x4da0('0x2c')]()[_0x4da0('0xd')](function(_0xda674d){return db[_0x4da0('0x2d')][_0x4da0('0x2e')](function(_0x511480){return db['CmHopper'][_0x4da0('0x19')]({'where':_0x4ae9e0[_0x4da0('0x1a')]?_0x4ae9e0[_0x4da0('0x1a')][_0x4da0('0x1c')]||null:null,'attributes':_0x4ae9e0[_0x4da0('0x1a')]?_0x4ae9e0[_0x4da0('0x1a')][_0x4da0('0x1d')]||null:null,'limit':_0x4ae9e0['options']?_0x4ae9e0[_0x4da0('0x1a')][_0x4da0('0x1e')]||null:null,'order':_0x4ae9e0['options']?_0x4ae9e0[_0x4da0('0x1a')][_0x4da0('0x2f')]||null:null,'transaction':_0x511480,'lock':_0x511480[_0x4da0('0x30')]['UPDATE'],'include':[{'model':db[_0x4da0('0x2b')],'as':_0x4da0('0x31'),'attributes':_[_0x4da0('0x32')](_0xda674d)}]})[_0x4da0('0xd')](function(_0x5e290c){var _0x2f52a6=[];for(var _0xcacff=0x0;_0xcacff<_0x5e290c[_0x4da0('0x33')];_0xcacff+=0x1){_0x2f52a6['push'](_0x5e290c[_0xcacff][_0x4da0('0x27')](_0x4ae9e0['body'],{'transaction':_0x511480}));}return BPromise['all'](_0x2f52a6);});})[_0x4da0('0xd')](function(_0x5e521f){logger[_0x4da0('0x14')](_0x4da0('0x2a'),_0x4ae9e0);logger['debug'](_0x4da0('0x2a'),_0x4ae9e0,JSON['stringify'](_0x5e521f));_0x437287(_0x5e521f);})[_0x4da0('0x16')](function(_0x761992){logger['error'](_0x4da0('0x2a'),_0x761992[_0x4da0('0x12')],_0x4ae9e0);_0x3d35a3(_0x594546['error'](0x1f4,_0x761992[_0x4da0('0x12')]));});});});};exports[_0x4da0('0x34')]=function(_0xc5eda2){var _0x5a9e0f=this;return new Promise(function(_0x28f372,_0x7eea04){return db['sequelize'][_0x4da0('0x2e')](function(_0x3583d8){return db[_0x4da0('0x35')]['create'](_0xc5eda2[_0x4da0('0x24')],{'raw':_0xc5eda2[_0x4da0('0x1a')]?_0xc5eda2[_0x4da0('0x1a')][_0x4da0('0x1b')]===undefined?!![]:![]:!![],'transaction':_0x3583d8})[_0x4da0('0xd')](function(){return db['CmHopper']['destroy']({'where':_0xc5eda2[_0x4da0('0x1a')]?_0xc5eda2[_0x4da0('0x1a')][_0x4da0('0x1c')]||null:null,'transaction':_0x3583d8});});})[_0x4da0('0xd')](function(_0x2bdfba){logger[_0x4da0('0x14')](_0x4da0('0x34'),_0xc5eda2);logger[_0x4da0('0xe')](_0x4da0('0x34'),_0xc5eda2,JSON['stringify'](_0x2bdfba));_0x28f372(_0x2bdfba);})[_0x4da0('0x16')](function(_0x3195f4){logger[_0x4da0('0x10')](_0x4da0('0x34'),_0x3195f4[_0x4da0('0x12')],_0xc5eda2);_0x7eea04(_0x5a9e0f[_0x4da0('0x10')](0x1f4,_0x3195f4[_0x4da0('0x12')]));});});};exports['CountReScheduled']=function(_0x59c2a5){var _0x55517d=this;return new Promise(function(_0x3eb85f,_0x25d2c3){return db['CmHopper'][_0x4da0('0x19')]({'raw':_0x59c2a5[_0x4da0('0x1a')]?_0x59c2a5[_0x4da0('0x1a')][_0x4da0('0x1b')]===undefined?!![]:![]:!![],'where':_0x59c2a5[_0x4da0('0x1a')]?_0x59c2a5[_0x4da0('0x1a')]['where']||null:null,'attributes':[[db[_0x4da0('0x2d')]['fn'](_0x4da0('0x36'),db['sequelize']['fn']('IF',db[_0x4da0('0x2d')][_0x4da0('0x37')](_0x4da0('0x38')+util['format']('\x22%s\x22',moment()[_0x4da0('0x39')]('YYYY-MM-DD\x20HH:mm:ss'))+_0x4da0('0x3a')))),_0x4da0('0x3b')]]})[_0x4da0('0xd')](function(_0x808f81){logger[_0x4da0('0x14')](_0x4da0('0x3c'),_0x59c2a5);logger['debug']('CountReScheduled',_0x59c2a5,JSON[_0x4da0('0x25')](_0x808f81));_0x3eb85f(_0x808f81);})[_0x4da0('0x16')](function(_0x4cd471){logger[_0x4da0('0x10')](_0x4da0('0x3c'),_0x4cd471['message'],_0x59c2a5);_0x25d2c3(_0x55517d[_0x4da0('0x10')](0x1f4,_0x4cd471[_0x4da0('0x12')]));});});};exports[_0x4da0('0x3d')]=function(_0x21d1ed){var _0x4bb028=this;return new Promise(function(_0x1bed5f,_0x39d037){return db[_0x4da0('0x2b')][_0x4da0('0x2c')]()[_0x4da0('0xd')](function(_0x25e056){return db[_0x4da0('0x2d')][_0x4da0('0x2e')](function(_0x563bc0){return db['CmHopper'][_0x4da0('0x19')]({'where':_0x21d1ed['options']?_0x21d1ed['options'][_0x4da0('0x1c')]||null:null,'attributes':_0x21d1ed[_0x4da0('0x1a')]?_0x21d1ed[_0x4da0('0x1a')][_0x4da0('0x1d')]||null:null,'limit':0x1,'order':_0x21d1ed[_0x4da0('0x1a')]?_0x21d1ed[_0x4da0('0x1a')][_0x4da0('0x2f')]||null:null,'group':db[_0x4da0('0x18')]['UserId'],'transaction':_0x563bc0,'lock':_0x563bc0['LOCK']['UPDATE'],'include':_0x21d1ed['options']?_0x21d1ed[_0x4da0('0x1a')][_0x4da0('0x1f')]?_['map'](_0x21d1ed[_0x4da0('0x1a')][_0x4da0('0x1f')],function(_0x425eb4){return{'model':db[_0x425eb4[_0x4da0('0x21')]],'as':_0x425eb4['as'],'attributes':_0x425eb4[_0x4da0('0x1d')],'include':_0x425eb4[_0x4da0('0x1f')]?_[_0x4da0('0x20')](_0x425eb4[_0x4da0('0x1f')],function(_0x107c1f){return{'model':db[_0x107c1f['model']],'as':_0x107c1f['as'],'attributes':_0x107c1f['attributes'],'include':_0x107c1f[_0x4da0('0x1f')]?_['map'](_0x107c1f[_0x4da0('0x1f')],function(_0x596028){return{'model':db[_0x596028[_0x4da0('0x21')]],'as':_0x596028['as'],'attributes':_0x596028['attributes']};}):[]};}):[]};}):[]:[]})[_0x4da0('0xd')](function(_0x15a581){var _0x11953e=[];for(var _0x2fc3f6=0x0;_0x2fc3f6<_0x15a581[_0x4da0('0x33')];_0x2fc3f6+=0x1){_0x11953e[_0x4da0('0x3e')](_0x15a581[_0x2fc3f6]['update'](_0x21d1ed['body'],{'transaction':_0x563bc0}));}return BPromise[_0x4da0('0x3f')](_0x11953e);});})[_0x4da0('0xd')](function(_0xc41b81){logger[_0x4da0('0x14')](_0x4da0('0x3d'),_0x21d1ed);logger[_0x4da0('0xe')](_0x4da0('0x3d'),_0x21d1ed,JSON['stringify'](_0xc41b81));_0x1bed5f(_0xc41b81);})[_0x4da0('0x16')](function(_0x31461e){logger[_0x4da0('0x10')](_0x4da0('0x3d'),_0x31461e[_0x4da0('0x12')],_0x21d1ed);_0x39d037(_0x4bb028['error'](0x1f4,_0x31461e[_0x4da0('0x12')]));});});});};
\ No newline at end of file
+var _0x357c=['options','where','attributes','include','map','model','then','find','raw','create','body','CreateCmHopper','UpdateCmHopper','limit','DestroyCmHopper','destroy','CmContact','describe','sequelize','order','LOCK','Contact','keys','update','all','GetContactDialer','MoveContactManagedDialer','CmHopperFinal','CountReScheduled','COUNT','literal','format','YYYY-MM-DD\x20HH:mm:ss','\x20,\x201,\x20null','contactsRescheduled','GetContactRecallMe','transaction','UserId','UPDATE','length','push','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','info','CmHopper,\x20%s,\x20%s','debug','CmHopper,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','GetCmHopper','CmHopper','findAll'];(function(_0x185c70,_0x29c450){var _0x24d1cb=function(_0xa0580a){while(--_0xa0580a){_0x185c70['push'](_0x185c70['shift']());}};_0x24d1cb(++_0x29c450);}(_0x357c,0xb1));var _0xc357=function(_0x3a04ab,_0x31b9fd){_0x3a04ab=_0x3a04ab-0x0;var _0x4bff6d=_0x357c[_0x3a04ab];return _0x4bff6d;};'use strict';var _=require(_0xc357('0x0'));var util=require('util');var moment=require(_0xc357('0x1'));var BPromise=require(_0xc357('0x2'));var rs=require(_0xc357('0x3'));var fs=require('fs');var Redis=require(_0xc357('0x4'));var db=require(_0xc357('0x5'))['db'];var utils=require(_0xc357('0x6'));var logger=require(_0xc357('0x7'))(_0xc357('0x8'));var config=require('../../config/environment');var jayson=require(_0xc357('0x9'));var client=jayson[_0xc357('0xa')][_0xc357('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x2e2903,_0x4aa1c5,_0x2fc3b0){return new BPromise(function(_0xe223bf,_0xf59e06){return client[_0xc357('0xc')](_0x2e2903,_0x2fc3b0)['then'](function(_0x1d47fb){logger[_0xc357('0xd')](_0xc357('0xe'),_0x4aa1c5,'request\x20sent');logger[_0xc357('0xf')](_0xc357('0x10'),_0x4aa1c5,_0xc357('0x11'),JSON[_0xc357('0x12')](_0x1d47fb));if(_0x1d47fb[_0xc357('0x13')]){if(_0x1d47fb[_0xc357('0x13')][_0xc357('0x14')]===0x1f4){logger[_0xc357('0x13')](_0xc357('0xe'),_0x4aa1c5,_0x1d47fb[_0xc357('0x13')]['message']);return _0xf59e06(_0x1d47fb[_0xc357('0x13')][_0xc357('0x15')]);}logger[_0xc357('0x13')](_0xc357('0xe'),_0x4aa1c5,_0x1d47fb[_0xc357('0x13')][_0xc357('0x15')]);return _0xe223bf(_0x1d47fb[_0xc357('0x13')]['message']);}else{logger[_0xc357('0xd')]('CmHopper,\x20%s,\x20%s',_0x4aa1c5,'request\x20sent');_0xe223bf(_0x1d47fb[_0xc357('0x16')]['message']);}})[_0xc357('0x17')](function(_0x25622e){logger[_0xc357('0x13')]('CmHopper,\x20%s,\x20%s',_0x4aa1c5,_0x25622e);_0xf59e06(_0x25622e);});});}exports[_0xc357('0x18')]=function(_0x1aee90){var _0x4059ed=this;return new Promise(function(_0xc09bbe,_0x1c0abf){return db[_0xc357('0x19')][_0xc357('0x1a')]({'raw':_0x1aee90[_0xc357('0x1b')]?_0x1aee90[_0xc357('0x1b')]['raw']===undefined?!![]:![]:!![],'where':_0x1aee90[_0xc357('0x1b')]?_0x1aee90[_0xc357('0x1b')][_0xc357('0x1c')]||null:null,'attributes':_0x1aee90[_0xc357('0x1b')]?_0x1aee90[_0xc357('0x1b')][_0xc357('0x1d')]||null:null,'limit':_0x1aee90[_0xc357('0x1b')]?_0x1aee90['options']['limit']||null:null,'include':_0x1aee90['options']?_0x1aee90['options'][_0xc357('0x1e')]?_[_0xc357('0x1f')](_0x1aee90['options'][_0xc357('0x1e')],function(_0x7317bc){return{'model':db[_0x7317bc[_0xc357('0x20')]],'as':_0x7317bc['as'],'attributes':_0x7317bc[_0xc357('0x1d')],'include':_0x7317bc['include']?_['map'](_0x7317bc[_0xc357('0x1e')],function(_0x2bb78b){return{'model':db[_0x2bb78b[_0xc357('0x20')]],'as':_0x2bb78b['as'],'attributes':_0x2bb78b['attributes'],'include':_0x2bb78b[_0xc357('0x1e')]?_[_0xc357('0x1f')](_0x2bb78b[_0xc357('0x1e')],function(_0x355bc1){return{'model':db[_0x355bc1[_0xc357('0x20')]],'as':_0x355bc1['as'],'attributes':_0x355bc1[_0xc357('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xc357('0x21')](function(_0x4c9f4f){logger[_0xc357('0xd')]('GetCmHopper',_0x1aee90);logger['debug'](_0xc357('0x18'),_0x1aee90,JSON['stringify'](_0x4c9f4f));_0xc09bbe(_0x4c9f4f);})[_0xc357('0x17')](function(_0x421cfe){logger[_0xc357('0x13')]('GetCmHopper',_0x421cfe[_0xc357('0x15')],_0x1aee90);_0x1c0abf(_0x4059ed[_0xc357('0x13')](0x1f4,_0x421cfe['message']));});});};exports['ShowCmHopper']=function(_0x143dc6){var _0x2a6dc0=this;return new Promise(function(_0x3ee0b0,_0x3d1645){return db[_0xc357('0x19')][_0xc357('0x22')]({'raw':_0x143dc6[_0xc357('0x1b')]?_0x143dc6[_0xc357('0x1b')][_0xc357('0x23')]===undefined?!![]:![]:!![],'where':_0x143dc6[_0xc357('0x1b')]?_0x143dc6[_0xc357('0x1b')][_0xc357('0x1c')]||null:null,'attributes':_0x143dc6[_0xc357('0x1b')]?_0x143dc6[_0xc357('0x1b')][_0xc357('0x1d')]||null:null,'include':_0x143dc6[_0xc357('0x1b')]?_0x143dc6[_0xc357('0x1b')][_0xc357('0x1e')]?_[_0xc357('0x1f')](_0x143dc6[_0xc357('0x1b')][_0xc357('0x1e')],function(_0x174bfa){return{'model':db[_0x174bfa[_0xc357('0x20')]],'as':_0x174bfa['as'],'attributes':_0x174bfa['attributes'],'include':_0x174bfa[_0xc357('0x1e')]?_[_0xc357('0x1f')](_0x174bfa[_0xc357('0x1e')],function(_0x1ca578){return{'model':db[_0x1ca578[_0xc357('0x20')]],'as':_0x1ca578['as'],'attributes':_0x1ca578[_0xc357('0x1d')],'include':_0x1ca578['include']?_[_0xc357('0x1f')](_0x1ca578[_0xc357('0x1e')],function(_0x18f9e0){return{'model':db[_0x18f9e0['model']],'as':_0x18f9e0['as'],'attributes':_0x18f9e0['attributes']};}):[]};}):[]};}):[]:[]})[_0xc357('0x21')](function(_0x32eadd){logger[_0xc357('0xd')]('ShowCmHopper',_0x143dc6);logger[_0xc357('0xf')]('ShowCmHopper',_0x143dc6,JSON['stringify'](_0x32eadd));_0x3ee0b0(_0x32eadd);})[_0xc357('0x17')](function(_0x442420){logger[_0xc357('0x13')]('ShowCmHopper',_0x442420[_0xc357('0x15')],_0x143dc6);_0x3d1645(_0x2a6dc0[_0xc357('0x13')](0x1f4,_0x442420['message']));});});};exports['CreateCmHopper']=function(_0x2dceb0){var _0x227339=this;return new Promise(function(_0x183a65,_0x5df681){return db[_0xc357('0x19')][_0xc357('0x24')](_0x2dceb0[_0xc357('0x25')],{'raw':_0x2dceb0['options']?_0x2dceb0['options'][_0xc357('0x23')]===undefined?!![]:![]:!![]})[_0xc357('0x21')](function(_0x224f1d){logger[_0xc357('0xd')](_0xc357('0x26'),_0x2dceb0);logger[_0xc357('0xf')](_0xc357('0x26'),_0x2dceb0,JSON[_0xc357('0x12')](_0x224f1d));_0x183a65(_0x224f1d);})[_0xc357('0x17')](function(_0x40d7c8){logger[_0xc357('0x13')](_0xc357('0x26'),_0x40d7c8[_0xc357('0x15')],_0x2dceb0);_0x5df681(_0x227339[_0xc357('0x13')](0x1f4,_0x40d7c8[_0xc357('0x15')]));});});};exports[_0xc357('0x27')]=function(_0x2dcea4){var _0x2d5c5f=this;return new Promise(function(_0x5d6dd6,_0x350e36){return db[_0xc357('0x19')]['update'](_0x2dcea4['body'],{'raw':_0x2dcea4[_0xc357('0x1b')]?_0x2dcea4[_0xc357('0x1b')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2dcea4[_0xc357('0x1b')]?_0x2dcea4[_0xc357('0x1b')][_0xc357('0x1c')]||null:null,'attributes':_0x2dcea4[_0xc357('0x1b')]?_0x2dcea4[_0xc357('0x1b')][_0xc357('0x1d')]||null:null,'limit':_0x2dcea4[_0xc357('0x1b')]?_0x2dcea4[_0xc357('0x1b')][_0xc357('0x28')]||null:null})[_0xc357('0x21')](function(_0x5ef91e){logger[_0xc357('0xd')](_0xc357('0x27'),_0x2dcea4);logger[_0xc357('0xf')]('UpdateCmHopper',_0x2dcea4,JSON[_0xc357('0x12')](_0x5ef91e));_0x5d6dd6(_0x5ef91e);})[_0xc357('0x17')](function(_0x122da3){logger[_0xc357('0x13')](_0xc357('0x27'),_0x122da3[_0xc357('0x15')],_0x2dcea4);_0x350e36(_0x2d5c5f['error'](0x1f4,_0x122da3[_0xc357('0x15')]));});});};exports[_0xc357('0x29')]=function(_0x2cd96e){var _0x31ff11=this;return new Promise(function(_0x216871,_0x36805d){return db[_0xc357('0x19')][_0xc357('0x2a')]({'where':_0x2cd96e[_0xc357('0x1b')]?_0x2cd96e[_0xc357('0x1b')][_0xc357('0x1c')]||null:null})[_0xc357('0x21')](function(_0x5e1316){logger['info']('DestroyCmHopper',_0x2cd96e);logger[_0xc357('0xf')]('DestroyCmHopper',_0x2cd96e,JSON[_0xc357('0x12')](_0x5e1316));_0x216871(_0x5e1316);})[_0xc357('0x17')](function(_0x40c701){logger[_0xc357('0x13')](_0xc357('0x29'),_0x40c701[_0xc357('0x15')],_0x2cd96e);_0x36805d(_0x31ff11['error'](0x1f4,_0x40c701[_0xc357('0x15')]));});});};exports['GetContactDialer']=function(_0x2d7fb7){var _0xa0c6ab=this;return new Promise(function(_0x9a5efd,_0xc79f99){return db[_0xc357('0x2b')][_0xc357('0x2c')]()[_0xc357('0x21')](function(_0x243ef6){return db[_0xc357('0x2d')]['transaction'](function(_0x27757b){return db[_0xc357('0x19')]['findAll']({'where':_0x2d7fb7[_0xc357('0x1b')]?_0x2d7fb7[_0xc357('0x1b')]['where']||null:null,'attributes':_0x2d7fb7['options']?_0x2d7fb7['options'][_0xc357('0x1d')]||null:null,'limit':_0x2d7fb7[_0xc357('0x1b')]?_0x2d7fb7[_0xc357('0x1b')][_0xc357('0x28')]||null:null,'order':_0x2d7fb7['options']?_0x2d7fb7[_0xc357('0x1b')][_0xc357('0x2e')]||null:null,'transaction':_0x27757b,'lock':_0x27757b[_0xc357('0x2f')]['UPDATE'],'include':[{'model':db[_0xc357('0x2b')],'as':_0xc357('0x30'),'attributes':_[_0xc357('0x31')](_0x243ef6)}]})[_0xc357('0x21')](function(_0xb1352f){var _0x321533=[];for(var _0x5a3a59=0x0;_0x5a3a59<_0xb1352f['length'];_0x5a3a59+=0x1){_0x321533['push'](_0xb1352f[_0x5a3a59][_0xc357('0x32')](_0x2d7fb7[_0xc357('0x25')],{'transaction':_0x27757b}));}return BPromise[_0xc357('0x33')](_0x321533);});})['then'](function(_0x121c8a){logger[_0xc357('0xd')]('GetContactDialer',_0x2d7fb7);logger['debug']('GetContactDialer',_0x2d7fb7,JSON[_0xc357('0x12')](_0x121c8a));_0x9a5efd(_0x121c8a);})[_0xc357('0x17')](function(_0x2a29a3){logger[_0xc357('0x13')](_0xc357('0x34'),_0x2a29a3[_0xc357('0x15')],_0x2d7fb7);_0xc79f99(_0xa0c6ab[_0xc357('0x13')](0x1f4,_0x2a29a3[_0xc357('0x15')]));});});});};exports[_0xc357('0x35')]=function(_0x3654f0){var _0x8cfd01=this;return new Promise(function(_0x19f5f1,_0x50c64f){return db[_0xc357('0x2d')]['transaction'](function(_0x5aefa8){return db[_0xc357('0x36')][_0xc357('0x24')](_0x3654f0[_0xc357('0x25')],{'raw':_0x3654f0[_0xc357('0x1b')]?_0x3654f0[_0xc357('0x1b')][_0xc357('0x23')]===undefined?!![]:![]:!![],'transaction':_0x5aefa8})[_0xc357('0x21')](function(){return db[_0xc357('0x19')][_0xc357('0x2a')]({'where':_0x3654f0['options']?_0x3654f0[_0xc357('0x1b')]['where']||null:null,'transaction':_0x5aefa8});});})['then'](function(_0x2bdf07){logger[_0xc357('0xd')]('MoveContactManagedDialer',_0x3654f0);logger[_0xc357('0xf')]('MoveContactManagedDialer',_0x3654f0,JSON[_0xc357('0x12')](_0x2bdf07));_0x19f5f1(_0x2bdf07);})[_0xc357('0x17')](function(_0x3ebb28){logger[_0xc357('0x13')](_0xc357('0x35'),_0x3ebb28[_0xc357('0x15')],_0x3654f0);_0x50c64f(_0x8cfd01['error'](0x1f4,_0x3ebb28[_0xc357('0x15')]));});});};exports[_0xc357('0x37')]=function(_0xe67df0){var _0x4a2dfa=this;return new Promise(function(_0xb70a4,_0x19b787){return db[_0xc357('0x19')]['findAll']({'raw':_0xe67df0[_0xc357('0x1b')]?_0xe67df0[_0xc357('0x1b')][_0xc357('0x23')]===undefined?!![]:![]:!![],'where':_0xe67df0[_0xc357('0x1b')]?_0xe67df0['options'][_0xc357('0x1c')]||null:null,'attributes':[[db['sequelize']['fn'](_0xc357('0x38'),db['sequelize']['fn']('IF',db[_0xc357('0x2d')][_0xc357('0x39')]('`scheduledat`\x20>=\x20'+util[_0xc357('0x3a')]('\x22%s\x22',moment()[_0xc357('0x3a')](_0xc357('0x3b')))+_0xc357('0x3c')))),_0xc357('0x3d')]]})[_0xc357('0x21')](function(_0x10522b){logger[_0xc357('0xd')](_0xc357('0x37'),_0xe67df0);logger['debug'](_0xc357('0x37'),_0xe67df0,JSON['stringify'](_0x10522b));_0xb70a4(_0x10522b);})[_0xc357('0x17')](function(_0x8a461b){logger[_0xc357('0x13')](_0xc357('0x37'),_0x8a461b[_0xc357('0x15')],_0xe67df0);_0x19b787(_0x4a2dfa[_0xc357('0x13')](0x1f4,_0x8a461b['message']));});});};exports[_0xc357('0x3e')]=function(_0x11017d){var _0x5ce608=this;return new Promise(function(_0x4160de,_0xef3246){return db[_0xc357('0x2b')][_0xc357('0x2c')]()[_0xc357('0x21')](function(_0x515e28){return db[_0xc357('0x2d')][_0xc357('0x3f')](function(_0x174d97){return db['CmHopper'][_0xc357('0x1a')]({'where':_0x11017d['options']?_0x11017d['options'][_0xc357('0x1c')]||null:null,'attributes':_0x11017d['options']?_0x11017d['options'][_0xc357('0x1d')]||null:null,'limit':0x1,'order':_0x11017d[_0xc357('0x1b')]?_0x11017d[_0xc357('0x1b')][_0xc357('0x2e')]||null:null,'group':db[_0xc357('0x19')][_0xc357('0x40')],'transaction':_0x174d97,'lock':_0x174d97[_0xc357('0x2f')][_0xc357('0x41')],'include':_0x11017d[_0xc357('0x1b')]?_0x11017d[_0xc357('0x1b')][_0xc357('0x1e')]?_[_0xc357('0x1f')](_0x11017d[_0xc357('0x1b')][_0xc357('0x1e')],function(_0x6c9ea3){return{'model':db[_0x6c9ea3[_0xc357('0x20')]],'as':_0x6c9ea3['as'],'attributes':_0x6c9ea3[_0xc357('0x1d')],'include':_0x6c9ea3[_0xc357('0x1e')]?_[_0xc357('0x1f')](_0x6c9ea3[_0xc357('0x1e')],function(_0x22ef9d){return{'model':db[_0x22ef9d[_0xc357('0x20')]],'as':_0x22ef9d['as'],'attributes':_0x22ef9d[_0xc357('0x1d')],'include':_0x22ef9d[_0xc357('0x1e')]?_[_0xc357('0x1f')](_0x22ef9d[_0xc357('0x1e')],function(_0x6a6447){return{'model':db[_0x6a6447[_0xc357('0x20')]],'as':_0x6a6447['as'],'attributes':_0x6a6447[_0xc357('0x1d')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x2ef7bb){var _0x3a06e8=[];for(var _0x3ca597=0x0;_0x3ca597<_0x2ef7bb[_0xc357('0x42')];_0x3ca597+=0x1){_0x3a06e8[_0xc357('0x43')](_0x2ef7bb[_0x3ca597][_0xc357('0x32')](_0x11017d[_0xc357('0x25')],{'transaction':_0x174d97}));}return BPromise[_0xc357('0x33')](_0x3a06e8);});})['then'](function(_0x2df397){logger['info'](_0xc357('0x3e'),_0x11017d);logger['debug'](_0xc357('0x3e'),_0x11017d,JSON[_0xc357('0x12')](_0x2df397));_0x4160de(_0x2df397);})[_0xc357('0x17')](function(_0x7b6bd){logger[_0xc357('0x13')](_0xc357('0x3e'),_0x7b6bd[_0xc357('0x15')],_0x11017d);_0xef3246(_0x5ce608['error'](0x1f4,_0x7b6bd['message']));});});});};
\ No newline at end of file
index ee1b77f..210dcaf 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(_0x9fd887,_0x47f76c){var _0x1a54ab=function(_0xb65c08){while(--_0xb65c08){_0x9fd887['push'](_0x9fd887['shift']());}};_0x1a54ab(++_0x47f76c);}(_0x9957,0x93));var _0x7995=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x9957[_0x5b644e];return _0x49c6bf;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var timeout=require(_0x7995('0x3'));var express=require('express');var router=express[_0x7995('0x4')]();var auth=require(_0x7995('0x5'));var interaction=require(_0x7995('0x6'));var config=require(_0x7995('0x7'));var controller=require('./cmHopper.controller');router[_0x7995('0x8')]('/',auth[_0x7995('0x9')](),controller[_0x7995('0xa')]);router[_0x7995('0x8')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['describe']);router[_0x7995('0x8')](_0x7995('0xc'),auth['isAuthenticated'](),controller[_0x7995('0xd')]);router[_0x7995('0x8')](_0x7995('0xe'),auth[_0x7995('0x9')](),controller[_0x7995('0xf')]);router[_0x7995('0x10')]('/',auth[_0x7995('0x9')](),controller['create']);router[_0x7995('0x10')](_0x7995('0x11'),auth['isAuthenticated'](),controller[_0x7995('0x12')]);router[_0x7995('0x13')](_0x7995('0xe'),auth[_0x7995('0x9')](),controller[_0x7995('0x14')]);router[_0x7995('0x15')](_0x7995('0xe'),auth['isAuthenticated'](),controller['destroy']);module[_0x7995('0x16')]=router;
\ No newline at end of file
+var _0x9957=['/:id','show','post','/preview','getPreview','put','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','/opencontacts','getOpenContacts'];(function(_0x87b0ff,_0x314389){var _0x3bc0b2=function(_0x41682b){while(--_0x41682b){_0x87b0ff['push'](_0x87b0ff['shift']());}};_0x3bc0b2(++_0x314389);}(_0x9957,0x93));var _0x7995=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x9957[_0x2dafbe];return _0x58a45a;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var timeout=require(_0x7995('0x3'));var express=require('express');var router=express[_0x7995('0x4')]();var auth=require(_0x7995('0x5'));var interaction=require(_0x7995('0x6'));var config=require(_0x7995('0x7'));var controller=require('./cmHopper.controller');router[_0x7995('0x8')]('/',auth[_0x7995('0x9')](),controller[_0x7995('0xa')]);router[_0x7995('0x8')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['describe']);router[_0x7995('0x8')](_0x7995('0xc'),auth['isAuthenticated'](),controller[_0x7995('0xd')]);router[_0x7995('0x8')](_0x7995('0xe'),auth[_0x7995('0x9')](),controller[_0x7995('0xf')]);router[_0x7995('0x10')]('/',auth[_0x7995('0x9')](),controller['create']);router[_0x7995('0x10')](_0x7995('0x11'),auth['isAuthenticated'](),controller[_0x7995('0x12')]);router[_0x7995('0x13')](_0x7995('0xe'),auth[_0x7995('0x9')](),controller[_0x7995('0x14')]);router[_0x7995('0x15')](_0x7995('0xe'),auth['isAuthenticated'](),controller['destroy']);module[_0x7995('0x16')]=router;
\ No newline at end of file
index d76e06f..a16b911 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd9e3=['INTEGER','contactListQueue','sequelize','exports','STRING'];(function(_0x33e530,_0xd95d91){var _0x421a88=function(_0x418cc8){while(--_0x418cc8){_0x33e530['push'](_0x33e530['shift']());}};_0x421a88(++_0xd95d91);}(_0xd9e3,0x197));var _0x3d9e=function(_0x1da351,_0x257f2f){_0x1da351=_0x1da351-0x0;var _0x41dd3b=_0xd9e3[_0x1da351];return _0x41dd3b;};'use strict';var moment=require('moment');var Sequelize=require(_0x3d9e('0x0'));module[_0x3d9e('0x1')]={'phone':{'type':Sequelize[_0x3d9e('0x2')],'allowNull':![]},'ContactId':{'type':Sequelize[_0x3d9e('0x3')],'unique':'contactListQueue'},'ListId':{'type':Sequelize[_0x3d9e('0x3')],'unique':_0x3d9e('0x4')},'VoiceQueueId':{'type':Sequelize['INTEGER'],'unique':_0x3d9e('0x4')}};
\ No newline at end of file
+var _0xb8af=['STRING','INTEGER','contactListQueue','moment','sequelize'];(function(_0x56b12e,_0x3e8df3){var _0x1e7c79=function(_0x113708){while(--_0x113708){_0x56b12e['push'](_0x56b12e['shift']());}};_0x1e7c79(++_0x3e8df3);}(_0xb8af,0x11b));var _0xfb8a=function(_0x16cf9e,_0x3d3cfd){_0x16cf9e=_0x16cf9e-0x0;var _0x56aefd=_0xb8af[_0x16cf9e];return _0x56aefd;};'use strict';var moment=require(_0xfb8a('0x0'));var Sequelize=require(_0xfb8a('0x1'));module['exports']={'phone':{'type':Sequelize[_0xfb8a('0x2')],'allowNull':![]},'ContactId':{'type':Sequelize[_0xfb8a('0x3')],'unique':_0xfb8a('0x4')},'ListId':{'type':Sequelize[_0xfb8a('0x3')],'unique':_0xfb8a('0x4')},'VoiceQueueId':{'type':Sequelize['INTEGER'],'unique':_0xfb8a('0x4')}};
\ No newline at end of file
index 58abf73..932f40a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xac96=['ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','Content-Range','reject','save','update','destroy','then','error','stack','name','index','rawAttributes','query','keys','filters','intersection','model','fields','attributes','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','VIRTUAL','field','options','CmHopperBlack','count','includeAll','include','findAll','rows','catch','params','length','find','body','describe','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xac96,0xcb));var _0x6ac9=function(_0x287315,_0x1dbc5f){_0x287315=_0x287315-0x0;var _0x307723=_0xac96[_0x287315];return _0x307723;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x6ac9('0x0'));var rimraf=require(_0x6ac9('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6ac9('0x2'));var rp=require(_0x6ac9('0x3'));var moment=require(_0x6ac9('0x4'));var BPromise=require(_0x6ac9('0x5'));var Mustache=require(_0x6ac9('0x6'));var util=require(_0x6ac9('0x7'));var path=require(_0x6ac9('0x8'));var sox=require(_0x6ac9('0x9'));var csv=require(_0x6ac9('0xa'));var ejs=require(_0x6ac9('0xb'));var fs=require('fs');var _=require(_0x6ac9('0xc'));var squel=require(_0x6ac9('0xd'));var crypto=require(_0x6ac9('0xe'));var jsforce=require(_0x6ac9('0xf'));var deskjs=require('desk.js');var toCsv=require(_0x6ac9('0xa'));var querystring=require(_0x6ac9('0x10'));var Papa=require(_0x6ac9('0x11'));var authService=require(_0x6ac9('0x12'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x6ac9('0x13'));var qs=require(_0x6ac9('0x14'));var logger=require(_0x6ac9('0x15'))('api');var utils=require(_0x6ac9('0x16'));var config=require(_0x6ac9('0x17'));var db=require(_0x6ac9('0x18'))['db'];function respondWithStatusCode(_0x5f1b69,_0x4023a6){_0x4023a6=_0x4023a6||0xcc;return function(_0x40d8aa){if(_0x40d8aa){return _0x5f1b69[_0x6ac9('0x19')](_0x4023a6);}return _0x5f1b69[_0x6ac9('0x1a')](_0x4023a6)[_0x6ac9('0x1b')]();};}function respondWithResult(_0x1510c9,_0x5ee28c){_0x5ee28c=_0x5ee28c||0xc8;return function(_0x39790a){if(_0x39790a){return _0x1510c9[_0x6ac9('0x1a')](_0x5ee28c)[_0x6ac9('0x1c')](_0x39790a);}};}function respondWithFilteredResult(_0x2d972d,_0x4e18c2){return function(_0x29bd04){if(_0x29bd04){var _0xb29dde=_0x29bd04['count'],_0x505c40=_0x4e18c2[_0x6ac9('0x1d')],_0x13954e=_0x4e18c2[_0x6ac9('0x1d')]+_0x4e18c2[_0x6ac9('0x1e')],_0xf97ede;if(_0x13954e>=_0xb29dde){_0x13954e=_0xb29dde;_0xf97ede=0xc8;}else{_0xf97ede=0xce;}_0x2d972d['status'](_0xf97ede);return _0x2d972d[_0x6ac9('0x1f')](_0x6ac9('0x20'),_0x505c40+'-'+_0x13954e+'/'+_0xb29dde)['json'](_0x29bd04);}return null;};}function patchUpdates(_0x1d79a6){return function(_0x26296a){try{jsonpatch['apply'](_0x26296a,_0x1d79a6,!![]);}catch(_0x1271bd){return BPromise[_0x6ac9('0x21')](_0x1271bd);}return _0x26296a[_0x6ac9('0x22')]();};}function saveUpdates(_0x2cfbe7,_0x2b2616){return function(_0x4b67e7){if(_0x4b67e7){return _0x4b67e7[_0x6ac9('0x23')](_0x2cfbe7)['then'](function(_0x2b4229){return _0x2b4229;});}return null;};}function removeEntity(_0x1db512,_0x16f70c){return function(_0x309c99){if(_0x309c99){return _0x309c99[_0x6ac9('0x24')]()[_0x6ac9('0x25')](function(){_0x1db512['status'](0xcc)[_0x6ac9('0x1b')]();});}};}function handleEntityNotFound(_0x3c0033,_0x3d291d){return function(_0x6582c8){if(!_0x6582c8){_0x3c0033[_0x6ac9('0x19')](0x194);}return _0x6582c8;};}function handleError(_0x36bbb1,_0x35bec5){_0x35bec5=_0x35bec5||0x1f4;return function(_0x593bd1){logger[_0x6ac9('0x26')](_0x593bd1[_0x6ac9('0x27')]);if(_0x593bd1['name']){delete _0x593bd1[_0x6ac9('0x28')];}_0x36bbb1[_0x6ac9('0x1a')](_0x35bec5)['send'](_0x593bd1);};}exports[_0x6ac9('0x29')]=function(_0x366861,_0x1620ed){var _0x140718={},_0x445c97={},_0x52b014={'count':0x0,'rows':[]};var _0x50690f=db['CmHopperBlack'][_0x6ac9('0x2a')];_0x445c97['model']=_['keys'](_0x50690f);_0x445c97[_0x6ac9('0x2b')]=_[_0x6ac9('0x2c')](_0x366861[_0x6ac9('0x2b')]);_0x445c97[_0x6ac9('0x2d')]=_[_0x6ac9('0x2e')](_0x445c97[_0x6ac9('0x2f')],_0x445c97[_0x6ac9('0x2b')]);_0x140718['attributes']=_['intersection'](_0x445c97['model'],qs[_0x6ac9('0x30')](_0x366861[_0x6ac9('0x2b')][_0x6ac9('0x30')]));_0x140718['attributes']=_0x140718[_0x6ac9('0x31')]['length']?_0x140718[_0x6ac9('0x31')]:_0x445c97[_0x6ac9('0x2f')];if(!_0x366861['query'][_0x6ac9('0x32')](_0x6ac9('0x33'))){_0x140718['limit']=qs[_0x6ac9('0x1e')](_0x366861[_0x6ac9('0x2b')][_0x6ac9('0x1e')]);_0x140718['offset']=qs['offset'](_0x366861[_0x6ac9('0x2b')][_0x6ac9('0x1d')]);}_0x140718[_0x6ac9('0x34')]=qs[_0x6ac9('0x35')](_0x366861[_0x6ac9('0x2b')][_0x6ac9('0x35')]);_0x140718[_0x6ac9('0x36')]=qs['filters'](_[_0x6ac9('0x37')](_0x366861[_0x6ac9('0x2b')],_0x445c97[_0x6ac9('0x2d')]));if(_0x366861[_0x6ac9('0x2b')][_0x6ac9('0x38')]){_0x140718['where']=_['merge'](_0x140718['where'],{'$or':_[_0x6ac9('0x39')](_0x50690f,function(_0x531f66){if(_0x531f66[_0x6ac9('0x3a')]['key']!==_0x6ac9('0x3b')){var _0x472fc9={};_0x472fc9[_0x531f66[_0x6ac9('0x3c')]]={'$like':'%'+_0x366861[_0x6ac9('0x2b')][_0x6ac9('0x38')]+'%'};return _0x472fc9;}})});}_0x140718=_['merge']({},_0x140718,_0x366861[_0x6ac9('0x3d')]);var _0xcd96e0={'where':_0x140718[_0x6ac9('0x36')]};return db[_0x6ac9('0x3e')]['count'](_0xcd96e0)['then'](function(_0x2dec06){_0x52b014[_0x6ac9('0x3f')]=_0x2dec06;if(_0x366861[_0x6ac9('0x2b')][_0x6ac9('0x40')]){_0x140718[_0x6ac9('0x41')]=[{'all':!![]}];}return db[_0x6ac9('0x3e')][_0x6ac9('0x42')](_0x140718);})[_0x6ac9('0x25')](function(_0x5e6394){_0x52b014[_0x6ac9('0x43')]=_0x5e6394;return _0x52b014;})['then'](respondWithFilteredResult(_0x1620ed,_0x140718))[_0x6ac9('0x44')](handleError(_0x1620ed,null));};exports['show']=function(_0x4e38f1,_0x56da74){var _0x4ff5ab={'raw':!![],'where':{'id':_0x4e38f1[_0x6ac9('0x45')]['id']}},_0x26599e={};_0x26599e['model']=_[_0x6ac9('0x2c')](db[_0x6ac9('0x3e')][_0x6ac9('0x2a')]);_0x26599e[_0x6ac9('0x2b')]=_[_0x6ac9('0x2c')](_0x4e38f1[_0x6ac9('0x2b')]);_0x26599e['filters']=_[_0x6ac9('0x2e')](_0x26599e[_0x6ac9('0x2f')],_0x26599e[_0x6ac9('0x2b')]);_0x4ff5ab[_0x6ac9('0x31')]=_['intersection'](_0x26599e[_0x6ac9('0x2f')],qs['fields'](_0x4e38f1[_0x6ac9('0x2b')]['fields']));_0x4ff5ab[_0x6ac9('0x31')]=_0x4ff5ab[_0x6ac9('0x31')][_0x6ac9('0x46')]?_0x4ff5ab['attributes']:_0x26599e[_0x6ac9('0x2f')];if(_0x4e38f1[_0x6ac9('0x2b')][_0x6ac9('0x40')]){_0x4ff5ab[_0x6ac9('0x41')]=[{'all':!![]}];}_0x4ff5ab=_['merge']({},_0x4ff5ab,_0x4e38f1[_0x6ac9('0x3d')]);return db[_0x6ac9('0x3e')][_0x6ac9('0x47')](_0x4ff5ab)[_0x6ac9('0x25')](handleEntityNotFound(_0x56da74,null))[_0x6ac9('0x25')](respondWithResult(_0x56da74,null))[_0x6ac9('0x44')](handleError(_0x56da74,null));};exports['update']=function(_0x3ffb2c,_0x4204ae){if(_0x3ffb2c[_0x6ac9('0x48')]['id']){delete _0x3ffb2c[_0x6ac9('0x48')]['id'];}return db[_0x6ac9('0x3e')][_0x6ac9('0x47')]({'where':{'id':_0x3ffb2c[_0x6ac9('0x45')]['id']}})['then'](handleEntityNotFound(_0x4204ae,null))[_0x6ac9('0x25')](saveUpdates(_0x3ffb2c[_0x6ac9('0x48')],null))['then'](respondWithResult(_0x4204ae,null))[_0x6ac9('0x44')](handleError(_0x4204ae,null));};exports[_0x6ac9('0x24')]=function(_0x19352c,_0x341fb6){return db['CmHopperBlack'][_0x6ac9('0x47')]({'where':{'id':_0x19352c[_0x6ac9('0x45')]['id']}})[_0x6ac9('0x25')](handleEntityNotFound(_0x341fb6,null))[_0x6ac9('0x25')](removeEntity(_0x341fb6,null))['catch'](handleError(_0x341fb6,null));};exports[_0x6ac9('0x49')]=function(_0x1bb445,_0x22ad65){return db[_0x6ac9('0x3e')][_0x6ac9('0x49')]()[_0x6ac9('0x25')](respondWithResult(_0x22ad65,null))[_0x6ac9('0x44')](handleError(_0x22ad65,null));};
\ No newline at end of file
+var _0x804e=['offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','send','index','rawAttributes','keys','query','filters','model','fields','attributes','length','hasOwnProperty','order','sort','pick','filter','where','merge','map','key','field','CmHopperBlack','includeAll','include','findAll','rows','catch','show','intersection','options','find','body','params','describe','html-pdf','eml-format','zip-dir','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','end','status','json','count'];(function(_0xaf29da,_0x117f5a){var _0x295c51=function(_0x3feaf4){while(--_0x3feaf4){_0xaf29da['push'](_0xaf29da['shift']());}};_0x295c51(++_0x117f5a);}(_0x804e,0xc7));var _0xe804=function(_0x339701,_0x797c50){_0x339701=_0x339701-0x0;var _0x55c1f9=_0x804e[_0x339701];return _0x55c1f9;};'use strict';var pdf=require(_0xe804('0x0'));var emlformat=require(_0xe804('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xe804('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xe804('0x3'));var moment=require('moment');var BPromise=require(_0xe804('0x4'));var Mustache=require(_0xe804('0x5'));var util=require(_0xe804('0x6'));var path=require(_0xe804('0x7'));var sox=require(_0xe804('0x8'));var csv=require(_0xe804('0x9'));var ejs=require(_0xe804('0xa'));var fs=require('fs');var _=require(_0xe804('0xb'));var squel=require(_0xe804('0xc'));var crypto=require(_0xe804('0xd'));var jsforce=require(_0xe804('0xe'));var deskjs=require(_0xe804('0xf'));var toCsv=require(_0xe804('0x9'));var querystring=require(_0xe804('0x10'));var Papa=require(_0xe804('0x11'));var authService=require(_0xe804('0x12'));var hardwareService=require(_0xe804('0x13'));var Redis=require('ioredis');var qs=require(_0xe804('0x14'));var logger=require(_0xe804('0x15'))('api');var utils=require(_0xe804('0x16'));var config=require(_0xe804('0x17'));var db=require(_0xe804('0x18'))['db'];function respondWithStatusCode(_0x2e2634,_0xfba008){_0xfba008=_0xfba008||0xcc;return function(_0x26e495){if(_0x26e495){return _0x2e2634['sendStatus'](_0xfba008);}return _0x2e2634['status'](_0xfba008)[_0xe804('0x19')]();};}function respondWithResult(_0x34b62d,_0x46a39a){_0x46a39a=_0x46a39a||0xc8;return function(_0x22ed63){if(_0x22ed63){return _0x34b62d[_0xe804('0x1a')](_0x46a39a)[_0xe804('0x1b')](_0x22ed63);}};}function respondWithFilteredResult(_0x47b32e,_0x10971b){return function(_0x282ea6){if(_0x282ea6){var _0x19bb4a=_0x282ea6[_0xe804('0x1c')],_0x50bbf4=_0x10971b[_0xe804('0x1d')],_0x882f25=_0x10971b[_0xe804('0x1d')]+_0x10971b[_0xe804('0x1e')],_0x30ae5d;if(_0x882f25>=_0x19bb4a){_0x882f25=_0x19bb4a;_0x30ae5d=0xc8;}else{_0x30ae5d=0xce;}_0x47b32e[_0xe804('0x1a')](_0x30ae5d);return _0x47b32e[_0xe804('0x1f')](_0xe804('0x20'),_0x50bbf4+'-'+_0x882f25+'/'+_0x19bb4a)[_0xe804('0x1b')](_0x282ea6);}return null;};}function patchUpdates(_0xa47055){return function(_0x49f2ae){try{jsonpatch[_0xe804('0x21')](_0x49f2ae,_0xa47055,!![]);}catch(_0x293db9){return BPromise[_0xe804('0x22')](_0x293db9);}return _0x49f2ae[_0xe804('0x23')]();};}function saveUpdates(_0x111b96,_0x3c8530){return function(_0x4ad640){if(_0x4ad640){return _0x4ad640[_0xe804('0x24')](_0x111b96)[_0xe804('0x25')](function(_0x558b7e){return _0x558b7e;});}return null;};}function removeEntity(_0x278df4,_0x17cfde){return function(_0x322ad1){if(_0x322ad1){return _0x322ad1[_0xe804('0x26')]()[_0xe804('0x25')](function(){_0x278df4['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x5a8f9e,_0x142826){return function(_0x207e1e){if(!_0x207e1e){_0x5a8f9e[_0xe804('0x27')](0x194);}return _0x207e1e;};}function handleError(_0x3c5337,_0x48ab28){_0x48ab28=_0x48ab28||0x1f4;return function(_0x30fa5f){logger[_0xe804('0x28')](_0x30fa5f[_0xe804('0x29')]);if(_0x30fa5f[_0xe804('0x2a')]){delete _0x30fa5f['name'];}_0x3c5337[_0xe804('0x1a')](_0x48ab28)[_0xe804('0x2b')](_0x30fa5f);};}exports[_0xe804('0x2c')]=function(_0x87605d,_0x4b023d){var _0x350ff5={},_0x2aa4a7={},_0x243ac7={'count':0x0,'rows':[]};var _0x568c10=db['CmHopperBlack'][_0xe804('0x2d')];_0x2aa4a7['model']=_[_0xe804('0x2e')](_0x568c10);_0x2aa4a7[_0xe804('0x2f')]=_[_0xe804('0x2e')](_0x87605d[_0xe804('0x2f')]);_0x2aa4a7[_0xe804('0x30')]=_['intersection'](_0x2aa4a7[_0xe804('0x31')],_0x2aa4a7[_0xe804('0x2f')]);_0x350ff5['attributes']=_['intersection'](_0x2aa4a7[_0xe804('0x31')],qs[_0xe804('0x32')](_0x87605d[_0xe804('0x2f')][_0xe804('0x32')]));_0x350ff5[_0xe804('0x33')]=_0x350ff5[_0xe804('0x33')][_0xe804('0x34')]?_0x350ff5[_0xe804('0x33')]:_0x2aa4a7[_0xe804('0x31')];if(!_0x87605d[_0xe804('0x2f')][_0xe804('0x35')]('nolimit')){_0x350ff5[_0xe804('0x1e')]=qs[_0xe804('0x1e')](_0x87605d[_0xe804('0x2f')][_0xe804('0x1e')]);_0x350ff5[_0xe804('0x1d')]=qs[_0xe804('0x1d')](_0x87605d['query'][_0xe804('0x1d')]);}_0x350ff5[_0xe804('0x36')]=qs[_0xe804('0x37')](_0x87605d[_0xe804('0x2f')][_0xe804('0x37')]);_0x350ff5['where']=qs['filters'](_[_0xe804('0x38')](_0x87605d[_0xe804('0x2f')],_0x2aa4a7['filters']));if(_0x87605d[_0xe804('0x2f')][_0xe804('0x39')]){_0x350ff5[_0xe804('0x3a')]=_[_0xe804('0x3b')](_0x350ff5['where'],{'$or':_[_0xe804('0x3c')](_0x568c10,function(_0x5652bf){if(_0x5652bf['type'][_0xe804('0x3d')]!=='VIRTUAL'){var _0x20447b={};_0x20447b[_0x5652bf[_0xe804('0x3e')]]={'$like':'%'+_0x87605d['query'][_0xe804('0x39')]+'%'};return _0x20447b;}})});}_0x350ff5=_[_0xe804('0x3b')]({},_0x350ff5,_0x87605d['options']);var _0x7f793a={'where':_0x350ff5[_0xe804('0x3a')]};return db[_0xe804('0x3f')][_0xe804('0x1c')](_0x7f793a)['then'](function(_0x1ed515){_0x243ac7[_0xe804('0x1c')]=_0x1ed515;if(_0x87605d[_0xe804('0x2f')][_0xe804('0x40')]){_0x350ff5[_0xe804('0x41')]=[{'all':!![]}];}return db[_0xe804('0x3f')][_0xe804('0x42')](_0x350ff5);})['then'](function(_0x3b552a){_0x243ac7[_0xe804('0x43')]=_0x3b552a;return _0x243ac7;})[_0xe804('0x25')](respondWithFilteredResult(_0x4b023d,_0x350ff5))[_0xe804('0x44')](handleError(_0x4b023d,null));};exports[_0xe804('0x45')]=function(_0x322ea6,_0x4cb8cd){var _0x5e6381={'raw':!![],'where':{'id':_0x322ea6['params']['id']}},_0x3dc39c={};_0x3dc39c[_0xe804('0x31')]=_[_0xe804('0x2e')](db[_0xe804('0x3f')][_0xe804('0x2d')]);_0x3dc39c[_0xe804('0x2f')]=_['keys'](_0x322ea6[_0xe804('0x2f')]);_0x3dc39c[_0xe804('0x30')]=_[_0xe804('0x46')](_0x3dc39c[_0xe804('0x31')],_0x3dc39c['query']);_0x5e6381[_0xe804('0x33')]=_[_0xe804('0x46')](_0x3dc39c[_0xe804('0x31')],qs['fields'](_0x322ea6[_0xe804('0x2f')][_0xe804('0x32')]));_0x5e6381[_0xe804('0x33')]=_0x5e6381['attributes']['length']?_0x5e6381[_0xe804('0x33')]:_0x3dc39c['model'];if(_0x322ea6[_0xe804('0x2f')][_0xe804('0x40')]){_0x5e6381[_0xe804('0x41')]=[{'all':!![]}];}_0x5e6381=_['merge']({},_0x5e6381,_0x322ea6[_0xe804('0x47')]);return db[_0xe804('0x3f')][_0xe804('0x48')](_0x5e6381)[_0xe804('0x25')](handleEntityNotFound(_0x4cb8cd,null))[_0xe804('0x25')](respondWithResult(_0x4cb8cd,null))[_0xe804('0x44')](handleError(_0x4cb8cd,null));};exports['update']=function(_0x13e0aa,_0x3b455d){if(_0x13e0aa['body']['id']){delete _0x13e0aa[_0xe804('0x49')]['id'];}return db[_0xe804('0x3f')]['find']({'where':{'id':_0x13e0aa[_0xe804('0x4a')]['id']}})[_0xe804('0x25')](handleEntityNotFound(_0x3b455d,null))[_0xe804('0x25')](saveUpdates(_0x13e0aa['body'],null))[_0xe804('0x25')](respondWithResult(_0x3b455d,null))[_0xe804('0x44')](handleError(_0x3b455d,null));};exports['destroy']=function(_0x1363ef,_0x553715){return db[_0xe804('0x3f')]['find']({'where':{'id':_0x1363ef['params']['id']}})[_0xe804('0x25')](handleEntityNotFound(_0x553715,null))['then'](removeEntity(_0x553715,null))['catch'](handleError(_0x553715,null));};exports[_0xe804('0x4b')]=function(_0x3175cc,_0x1cae44){return db[_0xe804('0x3f')]['describe']()[_0xe804('0x25')](respondWithResult(_0x1cae44,null))[_0xe804('0x44')](handleError(_0x1cae44,null));};
\ No newline at end of file
index 7574991..380eab5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd6c3=['lodash','util','../../config/logger','api','bluebird','request-promise','./cmHopperBlack.attributes','exports','CmHopperBlack'];(function(_0x2ebf98,_0x386624){var _0x12527c=function(_0x29cf59){while(--_0x29cf59){_0x2ebf98['push'](_0x2ebf98['shift']());}};_0x12527c(++_0x386624);}(_0xd6c3,0x18c));var _0x3d6c=function(_0x112933,_0xdf0750){_0x112933=_0x112933-0x0;var _0x333294=_0xd6c3[_0x112933];return _0x333294;};'use strict';var _=require(_0x3d6c('0x0'));var util=require(_0x3d6c('0x1'));var logger=require(_0x3d6c('0x2'))(_0x3d6c('0x3'));var moment=require('moment');var BPromise=require(_0x3d6c('0x4'));var rp=require(_0x3d6c('0x5'));var attributes=require(_0x3d6c('0x6'));module[_0x3d6c('0x7')]=function(_0x258c39,_0x5216ba){return _0x258c39['define'](_0x3d6c('0x8'),attributes,{'tableName':'cm_hopper_black','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb780=['bluebird','./cmHopperBlack.attributes','define','CmHopperBlack','cm_hopper_black','lodash','util','../../config/logger','api','moment'];(function(_0x555887,_0x1557ed){var _0x2a9997=function(_0x45246e){while(--_0x45246e){_0x555887['push'](_0x555887['shift']());}};_0x2a9997(++_0x1557ed);}(_0xb780,0x127));var _0x0b78=function(_0x4c21bb,_0x3f10c2){_0x4c21bb=_0x4c21bb-0x0;var _0x51241c=_0xb780[_0x4c21bb];return _0x51241c;};'use strict';var _=require(_0x0b78('0x0'));var util=require(_0x0b78('0x1'));var logger=require(_0x0b78('0x2'))(_0x0b78('0x3'));var moment=require(_0x0b78('0x4'));var BPromise=require(_0x0b78('0x5'));var rp=require('request-promise');var attributes=require(_0x0b78('0x6'));module['exports']=function(_0x8c131e,_0x239917){return _0x8c131e[_0x0b78('0x7')](_0x0b78('0x8'),attributes,{'tableName':_0x0b78('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 18b69a5..9c7a9af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6034=['../../config/environment','jayson/promise','client','request','then','info','request\x20sent','debug','stringify','error','code','CmHopperBlack,\x20%s,\x20%s','message','catch','GetCmHopperBlack','CmHopperBlack','findAll','options','raw','where','attributes','limit','include','map','model','UpdateCmHopperBlack','update','body','DestroyCmHopperBlack','destroy','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x3fcf29,_0xbcf48e){var _0x1d8670=function(_0x914fb2){while(--_0x914fb2){_0x3fcf29['push'](_0x3fcf29['shift']());}};_0x1d8670(++_0xbcf48e);}(_0x6034,0x93));var _0x4603=function(_0x1f467d,_0x115ce8){_0x1f467d=_0x1f467d-0x0;var _0x23d398=_0x6034[_0x1f467d];return _0x23d398;};'use strict';var _=require(_0x4603('0x0'));var util=require(_0x4603('0x1'));var moment=require(_0x4603('0x2'));var BPromise=require('bluebird');var rs=require(_0x4603('0x3'));var fs=require('fs');var Redis=require(_0x4603('0x4'));var db=require(_0x4603('0x5'))['db'];var utils=require(_0x4603('0x6'));var logger=require(_0x4603('0x7'))(_0x4603('0x8'));var config=require(_0x4603('0x9'));var jayson=require(_0x4603('0xa'));var client=jayson[_0x4603('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2c3f43,_0x478972,_0x5c3008){return new BPromise(function(_0x37c511,_0x3c3799){return client[_0x4603('0xc')](_0x2c3f43,_0x5c3008)[_0x4603('0xd')](function(_0x4bd44b){logger[_0x4603('0xe')]('CmHopperBlack,\x20%s,\x20%s',_0x478972,_0x4603('0xf'));logger[_0x4603('0x10')]('CmHopperBlack,\x20%s,\x20%s,\x20%s',_0x478972,_0x4603('0xf'),JSON[_0x4603('0x11')](_0x4bd44b));if(_0x4bd44b[_0x4603('0x12')]){if(_0x4bd44b[_0x4603('0x12')][_0x4603('0x13')]===0x1f4){logger[_0x4603('0x12')](_0x4603('0x14'),_0x478972,_0x4bd44b[_0x4603('0x12')][_0x4603('0x15')]);return _0x3c3799(_0x4bd44b[_0x4603('0x12')][_0x4603('0x15')]);}logger[_0x4603('0x12')](_0x4603('0x14'),_0x478972,_0x4bd44b['error'][_0x4603('0x15')]);return _0x37c511(_0x4bd44b['error']['message']);}else{logger['info'](_0x4603('0x14'),_0x478972,_0x4603('0xf'));_0x37c511(_0x4bd44b['result'][_0x4603('0x15')]);}})[_0x4603('0x16')](function(_0x62fb40){logger[_0x4603('0x12')](_0x4603('0x14'),_0x478972,_0x62fb40);_0x3c3799(_0x62fb40);});});}exports[_0x4603('0x17')]=function(_0x25c03f){var _0x5cf0a9=this;return new Promise(function(_0x2bebb9,_0x164c51){return db[_0x4603('0x18')][_0x4603('0x19')]({'raw':_0x25c03f[_0x4603('0x1a')]?_0x25c03f['options'][_0x4603('0x1b')]===undefined?!![]:![]:!![],'where':_0x25c03f[_0x4603('0x1a')]?_0x25c03f[_0x4603('0x1a')][_0x4603('0x1c')]||null:null,'attributes':_0x25c03f[_0x4603('0x1a')]?_0x25c03f['options'][_0x4603('0x1d')]||null:null,'limit':_0x25c03f[_0x4603('0x1a')]?_0x25c03f[_0x4603('0x1a')][_0x4603('0x1e')]||null:null,'include':_0x25c03f[_0x4603('0x1a')]?_0x25c03f[_0x4603('0x1a')][_0x4603('0x1f')]?_[_0x4603('0x20')](_0x25c03f['options'][_0x4603('0x1f')],function(_0x231529){return{'model':db[_0x231529['model']],'as':_0x231529['as'],'attributes':_0x231529[_0x4603('0x1d')],'include':_0x231529[_0x4603('0x1f')]?_[_0x4603('0x20')](_0x231529[_0x4603('0x1f')],function(_0x2a38bd){return{'model':db[_0x2a38bd[_0x4603('0x21')]],'as':_0x2a38bd['as'],'attributes':_0x2a38bd[_0x4603('0x1d')],'include':_0x2a38bd[_0x4603('0x1f')]?_[_0x4603('0x20')](_0x2a38bd['include'],function(_0x160542){return{'model':db[_0x160542[_0x4603('0x21')]],'as':_0x160542['as'],'attributes':_0x160542[_0x4603('0x1d')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x24c841){logger[_0x4603('0xe')](_0x4603('0x17'),_0x25c03f);logger[_0x4603('0x10')](_0x4603('0x17'),_0x25c03f,JSON[_0x4603('0x11')](_0x24c841));_0x2bebb9(_0x24c841);})[_0x4603('0x16')](function(_0x74a360){logger[_0x4603('0x12')](_0x4603('0x17'),_0x74a360[_0x4603('0x15')],_0x25c03f);_0x164c51(_0x5cf0a9['error'](0x1f4,_0x74a360['message']));});});};exports[_0x4603('0x22')]=function(_0x443fb2){var _0x1c1bcb=this;return new Promise(function(_0x3d5347,_0x344718){return db[_0x4603('0x18')][_0x4603('0x23')](_0x443fb2[_0x4603('0x24')],{'raw':_0x443fb2[_0x4603('0x1a')]?_0x443fb2[_0x4603('0x1a')][_0x4603('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x443fb2[_0x4603('0x1a')]?_0x443fb2[_0x4603('0x1a')][_0x4603('0x1c')]||null:null,'attributes':_0x443fb2[_0x4603('0x1a')]?_0x443fb2[_0x4603('0x1a')][_0x4603('0x1d')]||null:null,'limit':_0x443fb2['options']?_0x443fb2[_0x4603('0x1a')][_0x4603('0x1e')]||null:null})[_0x4603('0xd')](function(_0x148f9d){logger[_0x4603('0xe')](_0x4603('0x22'),_0x443fb2);logger[_0x4603('0x10')](_0x4603('0x22'),_0x443fb2,JSON[_0x4603('0x11')](_0x148f9d));_0x3d5347(_0x148f9d);})[_0x4603('0x16')](function(_0x3b3f01){logger['error']('UpdateCmHopperBlack',_0x3b3f01[_0x4603('0x15')],_0x443fb2);_0x344718(_0x1c1bcb[_0x4603('0x12')](0x1f4,_0x3b3f01[_0x4603('0x15')]));});});};exports[_0x4603('0x25')]=function(_0x5207db){var _0x5e5d44=this;return new Promise(function(_0x3ba062,_0x5a0d11){return db[_0x4603('0x18')][_0x4603('0x26')]({'where':_0x5207db['options']?_0x5207db[_0x4603('0x1a')][_0x4603('0x1c')]||null:null})['then'](function(_0x24054e){logger['info'](_0x4603('0x25'),_0x5207db);logger['debug'](_0x4603('0x25'),_0x5207db,JSON[_0x4603('0x11')](_0x24054e));_0x3ba062(_0x24054e);})[_0x4603('0x16')](function(_0x1d1ab4){logger[_0x4603('0x12')]('DestroyCmHopperBlack',_0x1d1ab4[_0x4603('0x15')],_0x5207db);_0x5a0d11(_0x5e5d44[_0x4603('0x12')](0x1f4,_0x1d1ab4[_0x4603('0x15')]));});});};
\ No newline at end of file
+var _0x780f=['raw','where','limit','map','include','model','attributes','UpdateCmHopperBlack','update','body','DestroyCmHopperBlack','destroy','moment','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','CmHopperBlack,\x20%s,\x20%s','debug','CmHopperBlack,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','GetCmHopperBlack','CmHopperBlack','findAll','options'];(function(_0x5e370c,_0x5e0532){var _0x69c1b3=function(_0xb7084e){while(--_0xb7084e){_0x5e370c['push'](_0x5e370c['shift']());}};_0x69c1b3(++_0x5e0532);}(_0x780f,0xea));var _0xf780=function(_0x33c637,_0x597c26){_0x33c637=_0x33c637-0x0;var _0x14aa20=_0x780f[_0x33c637];return _0x14aa20;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xf780('0x0'));var BPromise=require(_0xf780('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xf780('0x2'));var db=require(_0xf780('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0xf780('0x4'))(_0xf780('0x5'));var config=require(_0xf780('0x6'));var jayson=require(_0xf780('0x7'));var client=jayson[_0xf780('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x58ee8c,_0x406fb6,_0x316ebc){return new BPromise(function(_0x22ba61,_0x1367eb){return client[_0xf780('0x9')](_0x58ee8c,_0x316ebc)[_0xf780('0xa')](function(_0x5b836b){logger[_0xf780('0xb')](_0xf780('0xc'),_0x406fb6,'request\x20sent');logger[_0xf780('0xd')](_0xf780('0xe'),_0x406fb6,_0xf780('0xf'),JSON[_0xf780('0x10')](_0x5b836b));if(_0x5b836b[_0xf780('0x11')]){if(_0x5b836b[_0xf780('0x11')][_0xf780('0x12')]===0x1f4){logger[_0xf780('0x11')](_0xf780('0xc'),_0x406fb6,_0x5b836b['error'][_0xf780('0x13')]);return _0x1367eb(_0x5b836b[_0xf780('0x11')][_0xf780('0x13')]);}logger[_0xf780('0x11')](_0xf780('0xc'),_0x406fb6,_0x5b836b[_0xf780('0x11')][_0xf780('0x13')]);return _0x22ba61(_0x5b836b['error'][_0xf780('0x13')]);}else{logger[_0xf780('0xb')](_0xf780('0xc'),_0x406fb6,_0xf780('0xf'));_0x22ba61(_0x5b836b['result']['message']);}})[_0xf780('0x14')](function(_0x70a56d){logger[_0xf780('0x11')](_0xf780('0xc'),_0x406fb6,_0x70a56d);_0x1367eb(_0x70a56d);});});}exports[_0xf780('0x15')]=function(_0x454246){var _0x5d1149=this;return new Promise(function(_0x3e80aa,_0x5b1b2b){return db[_0xf780('0x16')][_0xf780('0x17')]({'raw':_0x454246[_0xf780('0x18')]?_0x454246[_0xf780('0x18')][_0xf780('0x19')]===undefined?!![]:![]:!![],'where':_0x454246[_0xf780('0x18')]?_0x454246[_0xf780('0x18')][_0xf780('0x1a')]||null:null,'attributes':_0x454246[_0xf780('0x18')]?_0x454246[_0xf780('0x18')]['attributes']||null:null,'limit':_0x454246['options']?_0x454246[_0xf780('0x18')][_0xf780('0x1b')]||null:null,'include':_0x454246[_0xf780('0x18')]?_0x454246[_0xf780('0x18')]['include']?_[_0xf780('0x1c')](_0x454246[_0xf780('0x18')][_0xf780('0x1d')],function(_0x2c7c1b){return{'model':db[_0x2c7c1b[_0xf780('0x1e')]],'as':_0x2c7c1b['as'],'attributes':_0x2c7c1b[_0xf780('0x1f')],'include':_0x2c7c1b['include']?_['map'](_0x2c7c1b['include'],function(_0x4cca46){return{'model':db[_0x4cca46[_0xf780('0x1e')]],'as':_0x4cca46['as'],'attributes':_0x4cca46[_0xf780('0x1f')],'include':_0x4cca46[_0xf780('0x1d')]?_['map'](_0x4cca46['include'],function(_0x5b0f3b){return{'model':db[_0x5b0f3b[_0xf780('0x1e')]],'as':_0x5b0f3b['as'],'attributes':_0x5b0f3b['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x58046c){logger['info'](_0xf780('0x15'),_0x454246);logger[_0xf780('0xd')](_0xf780('0x15'),_0x454246,JSON['stringify'](_0x58046c));_0x3e80aa(_0x58046c);})[_0xf780('0x14')](function(_0x49465c){logger[_0xf780('0x11')](_0xf780('0x15'),_0x49465c[_0xf780('0x13')],_0x454246);_0x5b1b2b(_0x5d1149[_0xf780('0x11')](0x1f4,_0x49465c[_0xf780('0x13')]));});});};exports[_0xf780('0x20')]=function(_0x2812d6){var _0xc24442=this;return new Promise(function(_0x29b05b,_0x2eda22){return db['CmHopperBlack'][_0xf780('0x21')](_0x2812d6[_0xf780('0x22')],{'raw':_0x2812d6[_0xf780('0x18')]?_0x2812d6['options'][_0xf780('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2812d6[_0xf780('0x18')]?_0x2812d6[_0xf780('0x18')][_0xf780('0x1a')]||null:null,'attributes':_0x2812d6[_0xf780('0x18')]?_0x2812d6['options'][_0xf780('0x1f')]||null:null,'limit':_0x2812d6[_0xf780('0x18')]?_0x2812d6[_0xf780('0x18')][_0xf780('0x1b')]||null:null})['then'](function(_0x4dab42){logger['info'](_0xf780('0x20'),_0x2812d6);logger[_0xf780('0xd')](_0xf780('0x20'),_0x2812d6,JSON[_0xf780('0x10')](_0x4dab42));_0x29b05b(_0x4dab42);})[_0xf780('0x14')](function(_0x4a3f76){logger[_0xf780('0x11')](_0xf780('0x20'),_0x4a3f76[_0xf780('0x13')],_0x2812d6);_0x2eda22(_0xc24442[_0xf780('0x11')](0x1f4,_0x4a3f76[_0xf780('0x13')]));});});};exports[_0xf780('0x23')]=function(_0x3d0b07){var _0x1ea537=this;return new Promise(function(_0x520fe1,_0x373140){return db[_0xf780('0x16')][_0xf780('0x24')]({'where':_0x3d0b07['options']?_0x3d0b07[_0xf780('0x18')][_0xf780('0x1a')]||null:null})[_0xf780('0xa')](function(_0x27ef65){logger[_0xf780('0xb')]('DestroyCmHopperBlack',_0x3d0b07);logger[_0xf780('0xd')](_0xf780('0x23'),_0x3d0b07,JSON[_0xf780('0x10')](_0x27ef65));_0x520fe1(_0x27ef65);})[_0xf780('0x14')](function(_0x2153ea){logger[_0xf780('0x11')]('DestroyCmHopperBlack',_0x2153ea[_0xf780('0x13')],_0x3d0b07);_0x373140(_0x1ea537['error'](0x1f4,_0x2153ea[_0xf780('0x13')]));});});};
\ No newline at end of file
index 850e635..06c05b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8456=['path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmHopperBlack.controller','get','isAuthenticated','index','/describe','show','/:id','update','destroy','exports','multer','util'];(function(_0x4e0c2e,_0x46df1c){var _0x4181bb=function(_0x503a47){while(--_0x503a47){_0x4e0c2e['push'](_0x4e0c2e['shift']());}};_0x4181bb(++_0x46df1c);}(_0x8456,0xfd));var _0x6845=function(_0x28d5bc,_0x313d69){_0x28d5bc=_0x28d5bc-0x0;var _0x17dc97=_0x8456[_0x28d5bc];return _0x17dc97;};'use strict';var multer=require(_0x6845('0x0'));var util=require(_0x6845('0x1'));var path=require(_0x6845('0x2'));var timeout=require('connect-timeout');var express=require(_0x6845('0x3'));var router=express['Router']();var auth=require(_0x6845('0x4'));var interaction=require(_0x6845('0x5'));var config=require(_0x6845('0x6'));var controller=require(_0x6845('0x7'));router[_0x6845('0x8')]('/',auth[_0x6845('0x9')](),controller[_0x6845('0xa')]);router[_0x6845('0x8')](_0x6845('0xb'),auth[_0x6845('0x9')](),controller['describe']);router[_0x6845('0x8')]('/:id',auth[_0x6845('0x9')](),controller[_0x6845('0xc')]);router['put'](_0x6845('0xd'),auth[_0x6845('0x9')](),controller[_0x6845('0xe')]);router['delete'](_0x6845('0xd'),auth[_0x6845('0x9')](),controller[_0x6845('0xf')]);module[_0x6845('0x10')]=router;
\ No newline at end of file
+var _0xd549=['./cmHopperBlack.controller','get','isAuthenticated','index','/describe','describe','/:id','show','put','update','delete','destroy','exports','multer','path','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x3b6f2d,_0xe746c0){var _0x558424=function(_0xf05e5b){while(--_0xf05e5b){_0x3b6f2d['push'](_0x3b6f2d['shift']());}};_0x558424(++_0xe746c0);}(_0xd549,0xde));var _0x9d54=function(_0x4b055c,_0x4b870b){_0x4b055c=_0x4b055c-0x0;var _0x4b62bb=_0xd549[_0x4b055c];return _0x4b62bb;};'use strict';var multer=require(_0x9d54('0x0'));var util=require('util');var path=require(_0x9d54('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x9d54('0x2')]();var auth=require(_0x9d54('0x3'));var interaction=require(_0x9d54('0x4'));var config=require(_0x9d54('0x5'));var controller=require(_0x9d54('0x6'));router[_0x9d54('0x7')]('/',auth[_0x9d54('0x8')](),controller[_0x9d54('0x9')]);router['get'](_0x9d54('0xa'),auth[_0x9d54('0x8')](),controller[_0x9d54('0xb')]);router[_0x9d54('0x7')](_0x9d54('0xc'),auth['isAuthenticated'](),controller[_0x9d54('0xd')]);router[_0x9d54('0xe')](_0x9d54('0xc'),auth[_0x9d54('0x8')](),controller[_0x9d54('0xf')]);router[_0x9d54('0x10')]('/:id',auth[_0x9d54('0x8')](),controller[_0x9d54('0x11')]);module[_0x9d54('0x12')]=router;
\ No newline at end of file
index 799937c..c6751ee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc438=['DATE','endtime','followuptime','diff','seconds','setDataValue','BOOLEAN','exports','INTEGER','STRING'];(function(_0x46ec32,_0x1e842f){var _0x338f60=function(_0x10e02c){while(--_0x10e02c){_0x46ec32['push'](_0x46ec32['shift']());}};_0x338f60(++_0x1e842f);}(_0xc438,0x10b));var _0x8c43=function(_0x3a5620,_0x117d5a){_0x3a5620=_0x3a5620-0x0;var _0x4a56e2=_0xc438[_0x3a5620];return _0x4a56e2;};'use strict';var Sequelize=require('sequelize');var moment=require('moment');module[_0x8c43('0x0')]={'state':{'type':Sequelize[_0x8c43('0x1')](0x2)},'statedesc':{'type':Sequelize[_0x8c43('0x2')]},'scheduledat':{'type':Sequelize[_0x8c43('0x3')]},'countbusyretry':{'type':Sequelize[_0x8c43('0x1')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x8c43('0x1')],'defaultValue':0x0},'countglobal':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0x8c43('0x2')]},'originatecalleridnum':{'type':Sequelize[_0x8c43('0x2')]},'originatecalleridname':{'type':Sequelize[_0x8c43('0x2')]},'calleridnum':{'type':Sequelize[_0x8c43('0x2')]},'calleridname':{'type':Sequelize['STRING']},'starttime':{'type':Sequelize[_0x8c43('0x3')]},'responsetime':{'type':Sequelize[_0x8c43('0x3')]},'answertime':{'type':Sequelize[_0x8c43('0x3')]},'droptime':{'type':Sequelize[_0x8c43('0x3')]},'endtime':{'type':Sequelize[_0x8c43('0x3')]},'ringtime':{'type':Sequelize[_0x8c43('0x1')],'defaultValue':0x0},'holdtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'talktime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'followuptime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x8c43('0x2')]},'campaign':{'type':Sequelize[_0x8c43('0x2')]},'campaigntype':{'type':Sequelize[_0x8c43('0x2')]},'membername':{'type':Sequelize[_0x8c43('0x2')]},'reason':{'type':Sequelize[_0x8c43('0x2')]},'disposition':{'type':Sequelize[_0x8c43('0x2')]},'dispositionat':{'type':Sequelize['DATE'],'set':function(_0x5da75c){var _0x3bfa40=this['getDataValue'](_0x8c43('0x4'));if(_0x3bfa40&&_0x5da75c){this['setDataValue'](_0x8c43('0x5'),moment(_0x5da75c)[_0x8c43('0x6')](moment(_0x3bfa40),_0x8c43('0x7')));}return this[_0x8c43('0x8')]('dispositionat',_0x5da75c);}},'amd':{'type':Sequelize[_0x8c43('0x9')],'defaultValue':![]},'fax':{'type':Sequelize[_0x8c43('0x9')],'defaultValue':![]},'blacklist':{'type':Sequelize[_0x8c43('0x9')],'defaultValue':![]},'rescheduled':{'type':Sequelize[_0x8c43('0x9')],'defaultValue':![]},'rescheduledat':{'type':Sequelize[_0x8c43('0x3')]},'callback':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x8c43('0x2')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x8c43('0x3')]},'deleted':{'type':Sequelize[_0x8c43('0x2')],'defaultValue':null},'deletedat':{'type':Sequelize[_0x8c43('0x3')]},'recallme':{'type':Sequelize[_0x8c43('0x9')],'defaultValue':![]},'agiafterat':{'type':Sequelize[_0x8c43('0x3')]}};
\ No newline at end of file
+var _0xd814=['endtime','setDataValue','diff','dispositionat','BOOLEAN','moment','exports','STRING','DATE','INTEGER','getDataValue'];(function(_0x4cf98e,_0xba4b79){var _0x1623ac=function(_0x459bc0){while(--_0x459bc0){_0x4cf98e['push'](_0x4cf98e['shift']());}};_0x1623ac(++_0xba4b79);}(_0xd814,0x1b2));var _0x4d81=function(_0x58e9de,_0x233886){_0x58e9de=_0x58e9de-0x0;var _0x4162e9=_0xd814[_0x58e9de];return _0x4162e9;};'use strict';var Sequelize=require('sequelize');var moment=require(_0x4d81('0x0'));module[_0x4d81('0x1')]={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize[_0x4d81('0x2')]},'scheduledat':{'type':Sequelize[_0x4d81('0x3')]},'countbusyretry':{'type':Sequelize[_0x4d81('0x4')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0x4d81('0x4')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0x4d81('0x2')]},'originatecalleridnum':{'type':Sequelize[_0x4d81('0x2')]},'originatecalleridname':{'type':Sequelize[_0x4d81('0x2')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x4d81('0x2')]},'starttime':{'type':Sequelize[_0x4d81('0x3')]},'responsetime':{'type':Sequelize[_0x4d81('0x3')]},'answertime':{'type':Sequelize['DATE']},'droptime':{'type':Sequelize[_0x4d81('0x3')]},'endtime':{'type':Sequelize[_0x4d81('0x3')]},'ringtime':{'type':Sequelize[_0x4d81('0x4')],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0x4d81('0x4')],'defaultValue':0x0},'talktime':{'type':Sequelize[_0x4d81('0x4')],'defaultValue':0x0},'followuptime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x4d81('0x2')]},'campaign':{'type':Sequelize[_0x4d81('0x2')]},'campaigntype':{'type':Sequelize[_0x4d81('0x2')]},'membername':{'type':Sequelize[_0x4d81('0x2')]},'reason':{'type':Sequelize[_0x4d81('0x2')]},'disposition':{'type':Sequelize[_0x4d81('0x2')]},'dispositionat':{'type':Sequelize[_0x4d81('0x3')],'set':function(_0x1760ea){var _0x265da8=this[_0x4d81('0x5')](_0x4d81('0x6'));if(_0x265da8&&_0x1760ea){this[_0x4d81('0x7')]('followuptime',moment(_0x1760ea)[_0x4d81('0x8')](moment(_0x265da8),'seconds'));}return this[_0x4d81('0x7')](_0x4d81('0x9'),_0x1760ea);}},'amd':{'type':Sequelize[_0x4d81('0xa')],'defaultValue':![]},'fax':{'type':Sequelize[_0x4d81('0xa')],'defaultValue':![]},'blacklist':{'type':Sequelize[_0x4d81('0xa')],'defaultValue':![]},'rescheduled':{'type':Sequelize[_0x4d81('0xa')],'defaultValue':![]},'rescheduledat':{'type':Sequelize['DATE']},'callback':{'type':Sequelize[_0x4d81('0xa')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x4d81('0x2')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x4d81('0x3')]},'deleted':{'type':Sequelize[_0x4d81('0x2')],'defaultValue':null},'deletedat':{'type':Sequelize[_0x4d81('0x3')]},'recallme':{'type':Sequelize[_0x4d81('0xa')],'defaultValue':![]},'agiafterat':{'type':Sequelize[_0x4d81('0x3')]}};
\ No newline at end of file
index 2861c63..7af2340 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x14a0=['from','cm_hopper_final','VoiceQueueId\x20=\x20?','state\x20=\x20?','state','toString','calleridnum\x20IS\x20NOT\x20NULL','calleridnum\x20NOT\x20IN\x20(?)','state\x20=\x204','moveContactsIvrCampaignHopperFinal','Campaign','cm_hopper','CampaignId','ANY_VALUE(calleridnum)','ANY_VALUE(CampaignId)','CampaignId\x20=\x20?','calleridnum','checkContactHopper','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','squel','crypto','jsforce','querystring','../../components/parsers/qs','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','index','CmHopperFinal','rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','nolimit','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','include','rows','catch','show','params','find','describe','body','uniqueid','findAll','sequelize','COUNT','literal','`state`\x20=\x200,\x201,\x20null','noSuchContacts','`state`\x20=\x203,\x201,\x20null','noAnswerContacts','busyContacts','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=\x205,\x201,\x20null','moveContactsQueueCampaignHopperFinal','VoiceQueue','insert','into','fromQuery','scheduledAt','ContactId','ListId','VoiceQueueId','createdAt','updatedAt','select','phone','NOW()','ANY_VALUE(ContactId)','ANY_VALUE(ListId)','ANY_VALUE(VoiceQueueId)'];(function(_0x40f8a6,_0x3e34ad){var _0x4fe718=function(_0x41ee8e){while(--_0x41ee8e){_0x40f8a6['push'](_0x40f8a6['shift']());}};_0x4fe718(++_0x3e34ad);}(_0x14a0,0x8e));var _0x014a=function(_0xc48cb8,_0x20bb64){_0xc48cb8=_0xc48cb8-0x0;var _0x28690f=_0x14a0[_0xc48cb8];return _0x28690f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x014a('0x0'));var rimraf=require(_0x014a('0x1'));var zipdir=require(_0x014a('0x2'));var jsonpatch=require(_0x014a('0x3'));var rp=require(_0x014a('0x4'));var moment=require(_0x014a('0x5'));var BPromise=require(_0x014a('0x6'));var Mustache=require('mustache');var util=require('util');var path=require(_0x014a('0x7'));var sox=require(_0x014a('0x8'));var csv=require(_0x014a('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x014a('0xa'));var crypto=require(_0x014a('0xb'));var jsforce=require(_0x014a('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x014a('0xd'));var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0x014a('0xe'));var logger=require('../../config/logger')(_0x014a('0xf'));var utils=require(_0x014a('0x10'));var config=require('../../config/environment');var db=require(_0x014a('0x11'))['db'];function respondWithStatusCode(_0x166677,_0x2c84ad){_0x2c84ad=_0x2c84ad||0xcc;return function(_0x43bfeb){if(_0x43bfeb){return _0x166677[_0x014a('0x12')](_0x2c84ad);}return _0x166677[_0x014a('0x13')](_0x2c84ad)[_0x014a('0x14')]();};}function respondWithResult(_0x23c917,_0x1e5366){_0x1e5366=_0x1e5366||0xc8;return function(_0x71535d){if(_0x71535d){return _0x23c917[_0x014a('0x13')](_0x1e5366)[_0x014a('0x15')](_0x71535d);}};}function respondWithFilteredResult(_0x4fe87c,_0x130d13){return function(_0x3cf92f){if(_0x3cf92f){var _0x59f207=_0x3cf92f[_0x014a('0x16')],_0x3a836f=_0x130d13[_0x014a('0x17')],_0x128c46=_0x130d13[_0x014a('0x17')]+_0x130d13[_0x014a('0x18')],_0x59a4ea;if(_0x128c46>=_0x59f207){_0x128c46=_0x59f207;_0x59a4ea=0xc8;}else{_0x59a4ea=0xce;}_0x4fe87c[_0x014a('0x13')](_0x59a4ea);return _0x4fe87c[_0x014a('0x19')](_0x014a('0x1a'),_0x3a836f+'-'+_0x128c46+'/'+_0x59f207)[_0x014a('0x15')](_0x3cf92f);}return null;};}function patchUpdates(_0x16490a){return function(_0x3b9341){try{jsonpatch[_0x014a('0x1b')](_0x3b9341,_0x16490a,!![]);}catch(_0x89e132){return BPromise[_0x014a('0x1c')](_0x89e132);}return _0x3b9341[_0x014a('0x1d')]();};}function saveUpdates(_0x5c69c5,_0x359903){return function(_0x109a9c){if(_0x109a9c){return _0x109a9c[_0x014a('0x1e')](_0x5c69c5)[_0x014a('0x1f')](function(_0xc9a563){return _0xc9a563;});}return null;};}function removeEntity(_0x2d7ccd,_0x37c3d1){return function(_0x3dd2d0){if(_0x3dd2d0){return _0x3dd2d0[_0x014a('0x20')]()['then'](function(){_0x2d7ccd[_0x014a('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1a1318,_0x26718b){return function(_0x44d921){if(!_0x44d921){_0x1a1318[_0x014a('0x12')](0x194);}return _0x44d921;};}function handleError(_0x2b3c10,_0x113b12){_0x113b12=_0x113b12||0x1f4;return function(_0x3fec9f){logger[_0x014a('0x21')](_0x3fec9f[_0x014a('0x22')]);if(_0x3fec9f['name']){delete _0x3fec9f[_0x014a('0x23')];}_0x2b3c10['status'](_0x113b12)[_0x014a('0x24')](_0x3fec9f);};}exports[_0x014a('0x25')]=function(_0x4f1c44,_0x4ee195){var _0x9a901f={},_0x3f9719={},_0x143346={'count':0x0,'rows':[]};var _0x5ed71b=db[_0x014a('0x26')][_0x014a('0x27')];_0x3f9719['model']=_[_0x014a('0x28')](_0x5ed71b);_0x3f9719[_0x014a('0x29')]=_['keys'](_0x4f1c44['query']);_0x3f9719[_0x014a('0x2a')]=_[_0x014a('0x2b')](_0x3f9719[_0x014a('0x2c')],_0x3f9719[_0x014a('0x29')]);_0x9a901f['attributes']=_[_0x014a('0x2b')](_0x3f9719[_0x014a('0x2c')],qs[_0x014a('0x2d')](_0x4f1c44[_0x014a('0x29')][_0x014a('0x2d')]));_0x9a901f[_0x014a('0x2e')]=_0x9a901f[_0x014a('0x2e')][_0x014a('0x2f')]?_0x9a901f[_0x014a('0x2e')]:_0x3f9719[_0x014a('0x2c')];if(!_0x4f1c44[_0x014a('0x29')]['hasOwnProperty'](_0x014a('0x30'))){_0x9a901f[_0x014a('0x18')]=qs[_0x014a('0x18')](_0x4f1c44[_0x014a('0x29')][_0x014a('0x18')]);_0x9a901f[_0x014a('0x17')]=qs[_0x014a('0x17')](_0x4f1c44['query'][_0x014a('0x17')]);}_0x9a901f[_0x014a('0x31')]=qs['sort'](_0x4f1c44[_0x014a('0x29')][_0x014a('0x32')]);_0x9a901f[_0x014a('0x33')]=qs[_0x014a('0x2a')](_[_0x014a('0x34')](_0x4f1c44[_0x014a('0x29')],_0x3f9719[_0x014a('0x2a')]));if(_0x4f1c44[_0x014a('0x29')]['filter']){_0x9a901f[_0x014a('0x33')]=_[_0x014a('0x35')](_0x9a901f[_0x014a('0x33')],{'$or':_[_0x014a('0x36')](_0x5ed71b,function(_0x5127f3){if(_0x5127f3[_0x014a('0x37')][_0x014a('0x38')]!==_0x014a('0x39')){var _0x157bd0={};_0x157bd0[_0x5127f3[_0x014a('0x3a')]]={'$like':'%'+_0x4f1c44[_0x014a('0x29')][_0x014a('0x3b')]+'%'};return _0x157bd0;}})});}_0x9a901f=_[_0x014a('0x35')]({},_0x9a901f,_0x4f1c44[_0x014a('0x3c')]);var _0x5f2f66={'where':_0x9a901f[_0x014a('0x33')]};return db['CmHopperFinal'][_0x014a('0x16')](_0x5f2f66)[_0x014a('0x1f')](function(_0x44958f){_0x143346[_0x014a('0x16')]=_0x44958f;if(_0x4f1c44[_0x014a('0x29')]['includeAll']){_0x9a901f[_0x014a('0x3d')]=[{'all':!![]}];}return db[_0x014a('0x26')]['findAll'](_0x9a901f);})[_0x014a('0x1f')](function(_0x2990df){_0x143346[_0x014a('0x3e')]=_0x2990df;return _0x143346;})[_0x014a('0x1f')](respondWithFilteredResult(_0x4ee195,_0x9a901f))[_0x014a('0x3f')](handleError(_0x4ee195,null));};exports[_0x014a('0x40')]=function(_0x17b1b6,_0x764fbe){var _0x2beddc={'raw':!![],'where':{'id':_0x17b1b6[_0x014a('0x41')]['id']}},_0x537bde={};_0x537bde[_0x014a('0x2c')]=_[_0x014a('0x28')](db[_0x014a('0x26')]['rawAttributes']);_0x537bde[_0x014a('0x29')]=_[_0x014a('0x28')](_0x17b1b6[_0x014a('0x29')]);_0x537bde[_0x014a('0x2a')]=_[_0x014a('0x2b')](_0x537bde[_0x014a('0x2c')],_0x537bde['query']);_0x2beddc[_0x014a('0x2e')]=_[_0x014a('0x2b')](_0x537bde['model'],qs[_0x014a('0x2d')](_0x17b1b6[_0x014a('0x29')][_0x014a('0x2d')]));_0x2beddc['attributes']=_0x2beddc[_0x014a('0x2e')]['length']?_0x2beddc['attributes']:_0x537bde[_0x014a('0x2c')];if(_0x17b1b6[_0x014a('0x29')]['includeAll']){_0x2beddc[_0x014a('0x3d')]=[{'all':!![]}];}_0x2beddc=_[_0x014a('0x35')]({},_0x2beddc,_0x17b1b6[_0x014a('0x3c')]);return db[_0x014a('0x26')][_0x014a('0x42')](_0x2beddc)[_0x014a('0x1f')](handleEntityNotFound(_0x764fbe,null))['then'](respondWithResult(_0x764fbe,null))[_0x014a('0x3f')](handleError(_0x764fbe,null));};exports[_0x014a('0x43')]=function(_0xb29df2,_0x52677e){return db['CmHopperFinal'][_0x014a('0x43')]()['then'](respondWithResult(_0x52677e,null))['catch'](handleError(_0x52677e,null));};exports[_0x014a('0x1e')]=function(_0x47aaac,_0x2a4679){if(_0x47aaac[_0x014a('0x44')][_0x014a('0x45')]){delete _0x47aaac['body'][_0x014a('0x45')];}return db[_0x014a('0x26')][_0x014a('0x42')]({'where':{'uniqueid':_0x47aaac[_0x014a('0x41')]['id']}})[_0x014a('0x1f')](handleEntityNotFound(_0x2a4679,null))[_0x014a('0x1f')](saveUpdates(_0x47aaac['body'],null))[_0x014a('0x1f')](respondWithResult(_0x2a4679,null))[_0x014a('0x3f')](handleError(_0x2a4679,null));};exports['countContactsQueueCampaignHopperFinal']=function(_0x1a4df9,_0x29345b,_0x20bb0c){return db[_0x014a('0x26')][_0x014a('0x46')]({'raw':![],'where':{'VoiceQueueId':_0x1a4df9[_0x014a('0x41')]['id']},'attributes':[[db[_0x014a('0x47')]['fn'](_0x014a('0x48'),db['sequelize']['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')](_0x014a('0x4a')))),_0x014a('0x4b')],[db[_0x014a('0x47')]['fn']('COUNT',db[_0x014a('0x47')]['fn']('IF',db['sequelize'][_0x014a('0x49')](_0x014a('0x4c')))),_0x014a('0x4d')],[db[_0x014a('0x47')]['fn'](_0x014a('0x48'),db['sequelize']['fn']('IF',db['sequelize']['literal']('`state`\x20=\x205,\x201,\x20null'))),_0x014a('0x4e')],[db['sequelize']['fn'](_0x014a('0x48'),db['sequelize']['fn']('IF',db['sequelize'][_0x014a('0x49')]('`state`\x20=\x208,\x201,\x20null'))),_0x014a('0x4f')],[db[_0x014a('0x47')]['fn'](_0x014a('0x48'),db[_0x014a('0x47')]['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')](_0x014a('0x50')))),_0x014a('0x51')],[db[_0x014a('0x47')]['fn'](_0x014a('0x48'),db['sequelize']['fn']('IF',db['sequelize'][_0x014a('0x49')](_0x014a('0x52')))),_0x014a('0x53')],[db['sequelize']['fn']('COUNT',db[_0x014a('0x47')]['fn']('IF',db['sequelize'][_0x014a('0x49')](_0x014a('0x54')))),_0x014a('0x55')],[db[_0x014a('0x47')]['fn']('COUNT',db[_0x014a('0x47')]['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')]('`state`\x20=\x2019,\x201,\x20null'))),_0x014a('0x56')]]})['then'](handleEntityNotFound(_0x29345b,null))[_0x014a('0x1f')](respondWithResult(_0x29345b,null))[_0x014a('0x3f')](handleError(_0x29345b,null));};exports[_0x014a('0x57')]=function(_0x24d433,_0xd0334a,_0x1a308b){return db['CmHopperFinal'][_0x014a('0x46')]({'raw':![],'where':{'CampaignId':_0x24d433[_0x014a('0x41')]['id']},'attributes':[[db[_0x014a('0x47')]['fn']('COUNT',db[_0x014a('0x47')]['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')](_0x014a('0x4a')))),_0x014a('0x4b')],[db['sequelize']['fn'](_0x014a('0x48'),db[_0x014a('0x47')]['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')](_0x014a('0x4c')))),_0x014a('0x4d')],[db[_0x014a('0x47')]['fn'](_0x014a('0x48'),db[_0x014a('0x47')]['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')](_0x014a('0x58')))),'busyContacts'],[db[_0x014a('0x47')]['fn']('COUNT',db['sequelize']['fn']('IF',db['sequelize']['literal']('`state`\x20=\x208,\x201,\x20null'))),_0x014a('0x4f')],[db[_0x014a('0x47')]['fn'](_0x014a('0x48'),db['sequelize']['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')](_0x014a('0x50')))),_0x014a('0x51')],[db['sequelize']['fn']('COUNT',db[_0x014a('0x47')]['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')](_0x014a('0x52')))),_0x014a('0x53')],[db[_0x014a('0x47')]['fn'](_0x014a('0x48'),db[_0x014a('0x47')]['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')](_0x014a('0x54')))),'reCallContacts'],[db[_0x014a('0x47')]['fn'](_0x014a('0x48'),db['sequelize']['fn']('IF',db[_0x014a('0x47')][_0x014a('0x49')]('`state`\x20=\x2019,\x201,\x20null'))),_0x014a('0x56')]]})['then'](handleEntityNotFound(_0xd0334a,null))[_0x014a('0x1f')](respondWithResult(_0xd0334a,null))[_0x014a('0x3f')](handleError(_0xd0334a,null));};exports[_0x014a('0x59')]=function(_0x456d69,_0x37b8f,_0x5e0f22){return db[_0x014a('0x5a')][_0x014a('0x42')]({'where':{'id':_0x456d69[_0x014a('0x41')]['id']}})[_0x014a('0x1f')](handleEntityNotFound(_0x37b8f,null))[_0x014a('0x1f')](function(_0x52e79e){var _0x20cddc;if(_0x52e79e){_0x20cddc=squel[_0x014a('0x5b')]()[_0x014a('0x5c')]('cm_hopper')[_0x014a('0x5d')](['phone',_0x014a('0x5e'),_0x014a('0x5f'),_0x014a('0x60'),_0x014a('0x61'),_0x014a('0x62'),_0x014a('0x63')],squel[_0x014a('0x64')]()['field']('ANY_VALUE(calleridnum)',_0x014a('0x65'))['field'](_0x014a('0x66'),'scheduledAt')[_0x014a('0x3a')](_0x014a('0x67'),'ContactId')['field'](_0x014a('0x68'),_0x014a('0x60'))['field'](_0x014a('0x69'),_0x014a('0x61'))['field']('NOW()',_0x014a('0x62'))[_0x014a('0x3a')](_0x014a('0x66'),_0x014a('0x63'))[_0x014a('0x6a')](_0x014a('0x6b'))['where'](_0x014a('0x6c'),_0x456d69['params']['id']['toString']())[_0x014a('0x33')](_0x014a('0x6d'),_0x456d69['body'][_0x014a('0x6e')][_0x014a('0x6f')]())[_0x014a('0x33')](_0x014a('0x70'))[_0x014a('0x33')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0x014a('0x64')]()[_0x014a('0x3a')](_0x014a('0x65'))[_0x014a('0x6a')]('cm_hopper')[_0x014a('0x33')]('VoiceQueueId\x20=\x20?',_0x456d69[_0x014a('0x41')]['id'][_0x014a('0x6f')]()))[_0x014a('0x33')](_0x014a('0x71'),squel[_0x014a('0x64')]()[_0x014a('0x3a')]('calleridnum')[_0x014a('0x6a')](_0x014a('0x6b'))[_0x014a('0x33')](_0x014a('0x6c'),_0x456d69[_0x014a('0x41')]['id'][_0x014a('0x6f')]())[_0x014a('0x33')](_0x014a('0x72')))['group'](_0x014a('0x5f')))[_0x014a('0x6f')]();return db[_0x014a('0x47')]['query'](_0x20cddc);}return[];})[_0x014a('0x1f')](respondWithResult(_0x37b8f,null))[_0x014a('0x3f')](handleError(_0x37b8f,null));};exports[_0x014a('0x73')]=function(_0x63c48e,_0x6f7932,_0x161094){return db[_0x014a('0x74')]['find']({'where':{'id':_0x63c48e['params']['id']}})['then'](handleEntityNotFound(_0x6f7932,null))['then'](function(_0x194c8d){var _0x32683c;if(_0x194c8d){_0x32683c=squel[_0x014a('0x5b')]()[_0x014a('0x5c')](_0x014a('0x75'))[_0x014a('0x5d')]([_0x014a('0x65'),'scheduledAt',_0x014a('0x5f'),_0x014a('0x60'),_0x014a('0x76'),_0x014a('0x62'),'updatedAt'],squel['select']()[_0x014a('0x3a')](_0x014a('0x77'),'phone')['field'](_0x014a('0x66'),'scheduledAt')['field'](_0x014a('0x67'),_0x014a('0x5f'))['field'](_0x014a('0x68'),_0x014a('0x60'))[_0x014a('0x3a')](_0x014a('0x78'),_0x014a('0x76'))[_0x014a('0x3a')](_0x014a('0x66'),_0x014a('0x62'))['field']('NOW()',_0x014a('0x63'))['from']('cm_hopper_final')['where'](_0x014a('0x79'),_0x63c48e[_0x014a('0x41')]['id'][_0x014a('0x6f')]())['where'](_0x014a('0x6d'),_0x63c48e[_0x014a('0x44')][_0x014a('0x6e')][_0x014a('0x6f')]())['where'](_0x014a('0x70'))[_0x014a('0x33')](_0x014a('0x71'),squel['select']()[_0x014a('0x3a')](_0x014a('0x65'))['from'](_0x014a('0x75'))[_0x014a('0x33')](_0x014a('0x79'),_0x63c48e['params']['id'][_0x014a('0x6f')]()))[_0x014a('0x33')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0x014a('0x64')]()[_0x014a('0x3a')](_0x014a('0x7a'))[_0x014a('0x6a')](_0x014a('0x6b'))[_0x014a('0x33')](_0x014a('0x79'),_0x63c48e[_0x014a('0x41')]['id']['toString']())[_0x014a('0x33')](_0x014a('0x72')))['group']('ContactId'))[_0x014a('0x6f')]();return db[_0x014a('0x47')]['query'](_0x32683c);}return[];})[_0x014a('0x1f')](respondWithResult(_0x6f7932,null))[_0x014a('0x3f')](handleError(_0x6f7932,null));};exports[_0x014a('0x7b')]=function(_0x5ddb47,_0x3a0012,_0x2c320f){return db['CmHopper']['findOne']({'where':{'VoiceQueueId':_0x5ddb47[_0x014a('0x44')]['VoiceQueueId'],'CampaignId':_0x5ddb47[_0x014a('0x44')]['CampaignId'],'ContactId':_0x5ddb47[_0x014a('0x44')][_0x014a('0x5f')]}})[_0x014a('0x1f')](handleEntityNotFound(_0x3a0012,null))[_0x014a('0x1f')](function(_0x20b182){if(_0x20b182){return _0x20b182;}return null;})['then'](respondWithResult(_0x3a0012,null))[_0x014a('0x3f')](handleError(_0x3a0012,null));};
\ No newline at end of file
+var _0x36ee=['../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','set','json','apply','reject','save','update','then','destroy','error','stack','name','send','index','CmHopperFinal','model','query','fields','attributes','hasOwnProperty','nolimit','limit','order','filters','filter','where','map','type','VIRTUAL','field','merge','includeAll','include','findAll','rows','catch','show','params','keys','rawAttributes','intersection','length','options','find','describe','body','uniqueid','countContactsQueueCampaignHopperFinal','sequelize','COUNT','literal','`state`\x20=\x200,\x201,\x20null','noAnswerContacts','`state`\x20=\x205,\x201,\x20null','busyContacts','`state`\x20=\x208,\x201,\x20null','congestionContacts','`state`\x20=\x2011\x20,\x201,\x20null','abandonedContacts','reCallContacts','`state`\x20=\x2019,\x201,\x20null','answeringMachine','countContactsIvrCampaignHopperFinal','noSuchContacts','`state`\x20=\x203,\x201,\x20null','`state`\x20=\x2010\x20,\x201,\x20null','dropContacts','`state`\x20=\x2022,\x201,\x20null','insert','into','cm_hopper','phone','ContactId','VoiceQueueId','createdAt','updatedAt','select','NOW()','scheduledAt','ANY_VALUE(ContactId)','ANY_VALUE(ListId)','cm_hopper_final','toString','state\x20=\x20?','state','calleridnum\x20IS\x20NOT\x20NULL','calleridnum\x20NOT\x20IN\x20(?)','VoiceQueueId\x20=\x20?','calleridnum','state\x20=\x204','moveContactsIvrCampaignHopperFinal','CampaignId','ANY_VALUE(calleridnum)','ListId','ANY_VALUE(CampaignId)','from','CampaignId\x20=\x20?','checkContactHopper','findOne','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api'];(function(_0x444c8d,_0x59e159){var _0x237759=function(_0x364858){while(--_0x364858){_0x444c8d['push'](_0x444c8d['shift']());}};_0x237759(++_0x59e159);}(_0x36ee,0xe8));var _0xe36e=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x36ee[_0x3b380d];return _0x54502b;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xe36e('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0xe36e('0x1'));var rp=require(_0xe36e('0x2'));var moment=require(_0xe36e('0x3'));var BPromise=require(_0xe36e('0x4'));var Mustache=require(_0xe36e('0x5'));var util=require(_0xe36e('0x6'));var path=require(_0xe36e('0x7'));var sox=require(_0xe36e('0x8'));var csv=require(_0xe36e('0x9'));var ejs=require(_0xe36e('0xa'));var fs=require('fs');var _=require(_0xe36e('0xb'));var squel=require(_0xe36e('0xc'));var crypto=require('crypto');var jsforce=require(_0xe36e('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xe36e('0x9'));var querystring=require(_0xe36e('0xe'));var Papa=require(_0xe36e('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0xe36e('0x10'));var Redis=require('ioredis');var qs=require(_0xe36e('0x11'));var logger=require(_0xe36e('0x12'))(_0xe36e('0x13'));var utils=require(_0xe36e('0x14'));var config=require(_0xe36e('0x15'));var db=require(_0xe36e('0x16'))['db'];function respondWithStatusCode(_0x3f6d7f,_0x265473){_0x265473=_0x265473||0xcc;return function(_0x4fbdb2){if(_0x4fbdb2){return _0x3f6d7f[_0xe36e('0x17')](_0x265473);}return _0x3f6d7f[_0xe36e('0x18')](_0x265473)[_0xe36e('0x19')]();};}function respondWithResult(_0x1fdea2,_0x5c3f3c){_0x5c3f3c=_0x5c3f3c||0xc8;return function(_0x3e264a){if(_0x3e264a){return _0x1fdea2['status'](_0x5c3f3c)['json'](_0x3e264a);}};}function respondWithFilteredResult(_0x27ff47,_0x300f21){return function(_0x26fb37){if(_0x26fb37){var _0x278135=_0x26fb37[_0xe36e('0x1a')],_0xd6828e=_0x300f21[_0xe36e('0x1b')],_0x924cd5=_0x300f21[_0xe36e('0x1b')]+_0x300f21['limit'],_0x2096f6;if(_0x924cd5>=_0x278135){_0x924cd5=_0x278135;_0x2096f6=0xc8;}else{_0x2096f6=0xce;}_0x27ff47[_0xe36e('0x18')](_0x2096f6);return _0x27ff47[_0xe36e('0x1c')]('Content-Range',_0xd6828e+'-'+_0x924cd5+'/'+_0x278135)[_0xe36e('0x1d')](_0x26fb37);}return null;};}function patchUpdates(_0x533c06){return function(_0x471400){try{jsonpatch[_0xe36e('0x1e')](_0x471400,_0x533c06,!![]);}catch(_0x5e15f5){return BPromise[_0xe36e('0x1f')](_0x5e15f5);}return _0x471400[_0xe36e('0x20')]();};}function saveUpdates(_0x21efe7,_0x597331){return function(_0x21e95e){if(_0x21e95e){return _0x21e95e[_0xe36e('0x21')](_0x21efe7)[_0xe36e('0x22')](function(_0x3c4017){return _0x3c4017;});}return null;};}function removeEntity(_0x2c4e30,_0x360b95){return function(_0x4f438a){if(_0x4f438a){return _0x4f438a[_0xe36e('0x23')]()[_0xe36e('0x22')](function(){_0x2c4e30[_0xe36e('0x18')](0xcc)[_0xe36e('0x19')]();});}};}function handleEntityNotFound(_0x437f3f,_0x53e13a){return function(_0x598a7a){if(!_0x598a7a){_0x437f3f[_0xe36e('0x17')](0x194);}return _0x598a7a;};}function handleError(_0x10818d,_0xb0cd85){_0xb0cd85=_0xb0cd85||0x1f4;return function(_0xb32195){logger[_0xe36e('0x24')](_0xb32195[_0xe36e('0x25')]);if(_0xb32195[_0xe36e('0x26')]){delete _0xb32195['name'];}_0x10818d[_0xe36e('0x18')](_0xb0cd85)[_0xe36e('0x27')](_0xb32195);};}exports[_0xe36e('0x28')]=function(_0x262caa,_0x5e58d8){var _0x2d757c={},_0x5a3133={},_0xf7b02e={'count':0x0,'rows':[]};var _0x5993de=db[_0xe36e('0x29')]['rawAttributes'];_0x5a3133[_0xe36e('0x2a')]=_['keys'](_0x5993de);_0x5a3133[_0xe36e('0x2b')]=_['keys'](_0x262caa['query']);_0x5a3133['filters']=_['intersection'](_0x5a3133[_0xe36e('0x2a')],_0x5a3133[_0xe36e('0x2b')]);_0x2d757c['attributes']=_['intersection'](_0x5a3133[_0xe36e('0x2a')],qs[_0xe36e('0x2c')](_0x262caa[_0xe36e('0x2b')][_0xe36e('0x2c')]));_0x2d757c[_0xe36e('0x2d')]=_0x2d757c[_0xe36e('0x2d')]['length']?_0x2d757c[_0xe36e('0x2d')]:_0x5a3133[_0xe36e('0x2a')];if(!_0x262caa['query'][_0xe36e('0x2e')](_0xe36e('0x2f'))){_0x2d757c[_0xe36e('0x30')]=qs[_0xe36e('0x30')](_0x262caa[_0xe36e('0x2b')][_0xe36e('0x30')]);_0x2d757c[_0xe36e('0x1b')]=qs[_0xe36e('0x1b')](_0x262caa[_0xe36e('0x2b')][_0xe36e('0x1b')]);}_0x2d757c[_0xe36e('0x31')]=qs['sort'](_0x262caa[_0xe36e('0x2b')]['sort']);_0x2d757c['where']=qs[_0xe36e('0x32')](_['pick'](_0x262caa[_0xe36e('0x2b')],_0x5a3133[_0xe36e('0x32')]));if(_0x262caa[_0xe36e('0x2b')][_0xe36e('0x33')]){_0x2d757c['where']=_['merge'](_0x2d757c[_0xe36e('0x34')],{'$or':_[_0xe36e('0x35')](_0x5993de,function(_0x19a53f){if(_0x19a53f[_0xe36e('0x36')]['key']!==_0xe36e('0x37')){var _0x2f828e={};_0x2f828e[_0x19a53f[_0xe36e('0x38')]]={'$like':'%'+_0x262caa['query'][_0xe36e('0x33')]+'%'};return _0x2f828e;}})});}_0x2d757c=_[_0xe36e('0x39')]({},_0x2d757c,_0x262caa['options']);var _0x40cbe5={'where':_0x2d757c[_0xe36e('0x34')]};return db[_0xe36e('0x29')][_0xe36e('0x1a')](_0x40cbe5)[_0xe36e('0x22')](function(_0x2fc909){_0xf7b02e[_0xe36e('0x1a')]=_0x2fc909;if(_0x262caa[_0xe36e('0x2b')][_0xe36e('0x3a')]){_0x2d757c[_0xe36e('0x3b')]=[{'all':!![]}];}return db[_0xe36e('0x29')][_0xe36e('0x3c')](_0x2d757c);})[_0xe36e('0x22')](function(_0x5f396c){_0xf7b02e[_0xe36e('0x3d')]=_0x5f396c;return _0xf7b02e;})[_0xe36e('0x22')](respondWithFilteredResult(_0x5e58d8,_0x2d757c))[_0xe36e('0x3e')](handleError(_0x5e58d8,null));};exports[_0xe36e('0x3f')]=function(_0x295feb,_0x4d133b){var _0x591e33={'raw':!![],'where':{'id':_0x295feb[_0xe36e('0x40')]['id']}},_0x4094c6={};_0x4094c6[_0xe36e('0x2a')]=_[_0xe36e('0x41')](db[_0xe36e('0x29')][_0xe36e('0x42')]);_0x4094c6[_0xe36e('0x2b')]=_[_0xe36e('0x41')](_0x295feb['query']);_0x4094c6[_0xe36e('0x32')]=_[_0xe36e('0x43')](_0x4094c6['model'],_0x4094c6[_0xe36e('0x2b')]);_0x591e33['attributes']=_[_0xe36e('0x43')](_0x4094c6[_0xe36e('0x2a')],qs[_0xe36e('0x2c')](_0x295feb[_0xe36e('0x2b')][_0xe36e('0x2c')]));_0x591e33['attributes']=_0x591e33[_0xe36e('0x2d')][_0xe36e('0x44')]?_0x591e33[_0xe36e('0x2d')]:_0x4094c6[_0xe36e('0x2a')];if(_0x295feb[_0xe36e('0x2b')][_0xe36e('0x3a')]){_0x591e33['include']=[{'all':!![]}];}_0x591e33=_[_0xe36e('0x39')]({},_0x591e33,_0x295feb[_0xe36e('0x45')]);return db[_0xe36e('0x29')][_0xe36e('0x46')](_0x591e33)[_0xe36e('0x22')](handleEntityNotFound(_0x4d133b,null))['then'](respondWithResult(_0x4d133b,null))[_0xe36e('0x3e')](handleError(_0x4d133b,null));};exports[_0xe36e('0x47')]=function(_0x390d9d,_0x9debd7){return db[_0xe36e('0x29')][_0xe36e('0x47')]()[_0xe36e('0x22')](respondWithResult(_0x9debd7,null))[_0xe36e('0x3e')](handleError(_0x9debd7,null));};exports[_0xe36e('0x21')]=function(_0x52e744,_0x56956c){if(_0x52e744[_0xe36e('0x48')]['uniqueid']){delete _0x52e744[_0xe36e('0x48')][_0xe36e('0x49')];}return db[_0xe36e('0x29')][_0xe36e('0x46')]({'where':{'uniqueid':_0x52e744['params']['id']}})[_0xe36e('0x22')](handleEntityNotFound(_0x56956c,null))[_0xe36e('0x22')](saveUpdates(_0x52e744['body'],null))[_0xe36e('0x22')](respondWithResult(_0x56956c,null))[_0xe36e('0x3e')](handleError(_0x56956c,null));};exports[_0xe36e('0x4a')]=function(_0x42eae5,_0x15895d,_0x3bc458){return db[_0xe36e('0x29')][_0xe36e('0x3c')]({'raw':![],'where':{'VoiceQueueId':_0x42eae5[_0xe36e('0x40')]['id']},'attributes':[[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')](_0xe36e('0x4e')))),'noSuchContacts'],[db[_0xe36e('0x4b')]['fn']('COUNT',db['sequelize']['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')]('`state`\x20=\x203,\x201,\x20null'))),_0xe36e('0x4f')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')](_0xe36e('0x50')))),_0xe36e('0x51')],[db[_0xe36e('0x4b')]['fn']('COUNT',db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')]['literal'](_0xe36e('0x52')))),_0xe36e('0x53')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db['sequelize']['literal']('`state`\x20=\x2010\x20,\x201,\x20null'))),'dropContacts'],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')](_0xe36e('0x54')))),_0xe36e('0x55')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db['sequelize']['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')]('`state`\x20=\x2022,\x201,\x20null'))),_0xe36e('0x56')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')](_0xe36e('0x57')))),_0xe36e('0x58')]]})[_0xe36e('0x22')](handleEntityNotFound(_0x15895d,null))[_0xe36e('0x22')](respondWithResult(_0x15895d,null))[_0xe36e('0x3e')](handleError(_0x15895d,null));};exports[_0xe36e('0x59')]=function(_0x389e91,_0x6f979f,_0x3512ec){return db[_0xe36e('0x29')][_0xe36e('0x3c')]({'raw':![],'where':{'CampaignId':_0x389e91[_0xe36e('0x40')]['id']},'attributes':[[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')](_0xe36e('0x4e')))),_0xe36e('0x5a')],[db['sequelize']['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db['sequelize'][_0xe36e('0x4d')](_0xe36e('0x5b')))),_0xe36e('0x4f')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db['sequelize'][_0xe36e('0x4d')]('`state`\x20=\x205,\x201,\x20null'))),_0xe36e('0x51')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')](_0xe36e('0x52')))),_0xe36e('0x53')],[db['sequelize']['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db['sequelize'][_0xe36e('0x4d')](_0xe36e('0x5c')))),_0xe36e('0x5d')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')]['literal'](_0xe36e('0x54')))),_0xe36e('0x55')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db[_0xe36e('0x4b')]['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')](_0xe36e('0x5e')))),_0xe36e('0x56')],[db[_0xe36e('0x4b')]['fn'](_0xe36e('0x4c'),db['sequelize']['fn']('IF',db[_0xe36e('0x4b')][_0xe36e('0x4d')](_0xe36e('0x57')))),_0xe36e('0x58')]]})['then'](handleEntityNotFound(_0x6f979f,null))['then'](respondWithResult(_0x6f979f,null))[_0xe36e('0x3e')](handleError(_0x6f979f,null));};exports['moveContactsQueueCampaignHopperFinal']=function(_0x585bd5,_0x59c454,_0xe0a282){return db['VoiceQueue'][_0xe36e('0x46')]({'where':{'id':_0x585bd5[_0xe36e('0x40')]['id']}})[_0xe36e('0x22')](handleEntityNotFound(_0x59c454,null))[_0xe36e('0x22')](function(_0x1bd60d){var _0x46f789;if(_0x1bd60d){_0x46f789=squel[_0xe36e('0x5f')]()[_0xe36e('0x60')](_0xe36e('0x61'))['fromQuery']([_0xe36e('0x62'),'scheduledAt',_0xe36e('0x63'),'ListId',_0xe36e('0x64'),_0xe36e('0x65'),_0xe36e('0x66')],squel[_0xe36e('0x67')]()['field']('ANY_VALUE(calleridnum)',_0xe36e('0x62'))[_0xe36e('0x38')](_0xe36e('0x68'),_0xe36e('0x69'))[_0xe36e('0x38')](_0xe36e('0x6a'),'ContactId')[_0xe36e('0x38')](_0xe36e('0x6b'),'ListId')[_0xe36e('0x38')]('ANY_VALUE(VoiceQueueId)',_0xe36e('0x64'))[_0xe36e('0x38')](_0xe36e('0x68'),_0xe36e('0x65'))['field'](_0xe36e('0x68'),'updatedAt')['from'](_0xe36e('0x6c'))[_0xe36e('0x34')]('VoiceQueueId\x20=\x20?',_0x585bd5['params']['id'][_0xe36e('0x6d')]())['where'](_0xe36e('0x6e'),_0x585bd5[_0xe36e('0x48')][_0xe36e('0x6f')][_0xe36e('0x6d')]())[_0xe36e('0x34')](_0xe36e('0x70'))['where'](_0xe36e('0x71'),squel[_0xe36e('0x67')]()[_0xe36e('0x38')](_0xe36e('0x62'))['from'](_0xe36e('0x61'))[_0xe36e('0x34')](_0xe36e('0x72'),_0x585bd5[_0xe36e('0x40')]['id']['toString']()))[_0xe36e('0x34')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0xe36e('0x67')]()['field'](_0xe36e('0x73'))['from']('cm_hopper_final')[_0xe36e('0x34')](_0xe36e('0x72'),_0x585bd5[_0xe36e('0x40')]['id']['toString']())[_0xe36e('0x34')](_0xe36e('0x74')))['group'](_0xe36e('0x63')))[_0xe36e('0x6d')]();return db[_0xe36e('0x4b')]['query'](_0x46f789);}return[];})['then'](respondWithResult(_0x59c454,null))[_0xe36e('0x3e')](handleError(_0x59c454,null));};exports[_0xe36e('0x75')]=function(_0x3bd3c2,_0x327506,_0x411305){return db['Campaign'][_0xe36e('0x46')]({'where':{'id':_0x3bd3c2[_0xe36e('0x40')]['id']}})[_0xe36e('0x22')](handleEntityNotFound(_0x327506,null))[_0xe36e('0x22')](function(_0xdc59c5){var _0x5bdeea;if(_0xdc59c5){_0x5bdeea=squel[_0xe36e('0x5f')]()[_0xe36e('0x60')](_0xe36e('0x61'))['fromQuery']([_0xe36e('0x62'),'scheduledAt',_0xe36e('0x63'),'ListId',_0xe36e('0x76'),_0xe36e('0x65'),'updatedAt'],squel[_0xe36e('0x67')]()['field'](_0xe36e('0x77'),_0xe36e('0x62'))[_0xe36e('0x38')](_0xe36e('0x68'),_0xe36e('0x69'))['field'](_0xe36e('0x6a'),'ContactId')[_0xe36e('0x38')](_0xe36e('0x6b'),_0xe36e('0x78'))[_0xe36e('0x38')](_0xe36e('0x79'),_0xe36e('0x76'))['field'](_0xe36e('0x68'),_0xe36e('0x65'))[_0xe36e('0x38')]('NOW()',_0xe36e('0x66'))[_0xe36e('0x7a')](_0xe36e('0x6c'))[_0xe36e('0x34')]('CampaignId\x20=\x20?',_0x3bd3c2[_0xe36e('0x40')]['id']['toString']())[_0xe36e('0x34')]('state\x20=\x20?',_0x3bd3c2[_0xe36e('0x48')][_0xe36e('0x6f')][_0xe36e('0x6d')]())['where'](_0xe36e('0x70'))[_0xe36e('0x34')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0xe36e('0x67')]()[_0xe36e('0x38')](_0xe36e('0x62'))['from']('cm_hopper')[_0xe36e('0x34')](_0xe36e('0x7b'),_0x3bd3c2[_0xe36e('0x40')]['id'][_0xe36e('0x6d')]()))[_0xe36e('0x34')]('calleridnum\x20NOT\x20IN\x20(?)',squel[_0xe36e('0x67')]()[_0xe36e('0x38')](_0xe36e('0x73'))[_0xe36e('0x7a')]('cm_hopper_final')[_0xe36e('0x34')](_0xe36e('0x7b'),_0x3bd3c2['params']['id']['toString']())['where'](_0xe36e('0x74')))['group']('ContactId'))[_0xe36e('0x6d')]();return db[_0xe36e('0x4b')][_0xe36e('0x2b')](_0x5bdeea);}return[];})[_0xe36e('0x22')](respondWithResult(_0x327506,null))[_0xe36e('0x3e')](handleError(_0x327506,null));};exports[_0xe36e('0x7c')]=function(_0x48fbed,_0x2ebe8e,_0x4f9354){return db['CmHopper'][_0xe36e('0x7d')]({'where':{'VoiceQueueId':_0x48fbed[_0xe36e('0x48')][_0xe36e('0x64')],'CampaignId':_0x48fbed[_0xe36e('0x48')]['CampaignId'],'ContactId':_0x48fbed[_0xe36e('0x48')][_0xe36e('0x63')]}})[_0xe36e('0x22')](handleEntityNotFound(_0x2ebe8e,null))[_0xe36e('0x22')](function(_0x4d0a75){if(_0x4d0a75){return _0x4d0a75;}return null;})[_0xe36e('0x22')](respondWithResult(_0x2ebe8e,null))['catch'](handleError(_0x2ebe8e,null));};
\ No newline at end of file
index fb36fa4..5c85f2d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f2f=['../../config/logger','api','moment','bluebird','request-promise','./cmHopperFinal.attributes','define','CmHopperFinal','cm_hopper_final','calleridnum','uniqueid','lodash','util'];(function(_0x3d8e12,_0x4cfcbf){var _0x592e5c=function(_0x38bb24){while(--_0x38bb24){_0x3d8e12['push'](_0x3d8e12['shift']());}};_0x592e5c(++_0x4cfcbf);}(_0x5f2f,0x73));var _0xf5f2=function(_0x1f6c14,_0x128206){_0x1f6c14=_0x1f6c14-0x0;var _0x29bcc1=_0x5f2f[_0x1f6c14];return _0x29bcc1;};'use strict';var _=require(_0xf5f2('0x0'));var util=require(_0xf5f2('0x1'));var logger=require(_0xf5f2('0x2'))(_0xf5f2('0x3'));var moment=require(_0xf5f2('0x4'));var BPromise=require(_0xf5f2('0x5'));var rp=require(_0xf5f2('0x6'));var attributes=require(_0xf5f2('0x7'));module['exports']=function(_0x4854b6,_0x1665c7){return _0x4854b6[_0xf5f2('0x8')](_0xf5f2('0x9'),attributes,{'tableName':_0xf5f2('0xa'),'paranoid':![],'indexes':[{'name':_0xf5f2('0xb'),'fields':[_0xf5f2('0xb')]},{'name':'uniqueid','fields':[_0xf5f2('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x4975=['calleridnum','uniqueid','lodash','../../config/logger','api','moment','bluebird','request-promise','./cmHopperFinal.attributes','exports','define','cm_hopper_final'];(function(_0x186ec3,_0x5d0840){var _0xdab1c8=function(_0x120df9){while(--_0x120df9){_0x186ec3['push'](_0x186ec3['shift']());}};_0xdab1c8(++_0x5d0840);}(_0x4975,0x86));var _0x5497=function(_0x46ad85,_0x3e27f2){_0x46ad85=_0x46ad85-0x0;var _0x1fbf5e=_0x4975[_0x46ad85];return _0x1fbf5e;};'use strict';var _=require(_0x5497('0x0'));var util=require('util');var logger=require(_0x5497('0x1'))(_0x5497('0x2'));var moment=require(_0x5497('0x3'));var BPromise=require(_0x5497('0x4'));var rp=require(_0x5497('0x5'));var attributes=require(_0x5497('0x6'));module[_0x5497('0x7')]=function(_0xeb31af,_0xbb1888){return _0xeb31af[_0x5497('0x8')]('CmHopperFinal',attributes,{'tableName':_0x5497('0x9'),'paranoid':![],'indexes':[{'name':'calleridnum','fields':[_0x5497('0xa')]},{'name':_0x5497('0xb'),'fields':[_0x5497('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index cad1a5d..5e98e0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f7a=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','debug','CmHopperFinal,\x20%s,\x20%s,\x20%s','stringify','error','code','CmHopperFinal,\x20%s,\x20%s','message','request\x20sent','result','catch','CmHopperFinal','body','options','raw','CreateCmHopperFinal','lodash','util','moment','bluebird'];(function(_0x47e7cb,_0x4c1b8d){var _0x2a8874=function(_0x36498f){while(--_0x36498f){_0x47e7cb['push'](_0x47e7cb['shift']());}};_0x2a8874(++_0x4c1b8d);}(_0x6f7a,0x1ae));var _0xa6f7=function(_0x35abb0,_0x1c354d){_0x35abb0=_0x35abb0-0x0;var _0x574c48=_0x6f7a[_0x35abb0];return _0x574c48;};'use strict';var _=require(_0xa6f7('0x0'));var util=require(_0xa6f7('0x1'));var moment=require(_0xa6f7('0x2'));var BPromise=require(_0xa6f7('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa6f7('0x4'));var db=require(_0xa6f7('0x5'))['db'];var utils=require(_0xa6f7('0x6'));var logger=require(_0xa6f7('0x7'))(_0xa6f7('0x8'));var config=require(_0xa6f7('0x9'));var jayson=require(_0xa6f7('0xa'));var client=jayson[_0xa6f7('0xb')][_0xa6f7('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x335aaa,_0x1a06d1,_0x481a8c){return new BPromise(function(_0x4b4f9e,_0x30f2a7){return client[_0xa6f7('0xd')](_0x335aaa,_0x481a8c)[_0xa6f7('0xe')](function(_0x362404){logger[_0xa6f7('0xf')]('CmHopperFinal,\x20%s,\x20%s',_0x1a06d1,'request\x20sent');logger[_0xa6f7('0x10')](_0xa6f7('0x11'),_0x1a06d1,'request\x20sent',JSON[_0xa6f7('0x12')](_0x362404));if(_0x362404['error']){if(_0x362404[_0xa6f7('0x13')][_0xa6f7('0x14')]===0x1f4){logger[_0xa6f7('0x13')](_0xa6f7('0x15'),_0x1a06d1,_0x362404['error'][_0xa6f7('0x16')]);return _0x30f2a7(_0x362404['error'][_0xa6f7('0x16')]);}logger[_0xa6f7('0x13')](_0xa6f7('0x15'),_0x1a06d1,_0x362404['error'][_0xa6f7('0x16')]);return _0x4b4f9e(_0x362404['error'][_0xa6f7('0x16')]);}else{logger['info'](_0xa6f7('0x15'),_0x1a06d1,_0xa6f7('0x17'));_0x4b4f9e(_0x362404[_0xa6f7('0x18')]['message']);}})[_0xa6f7('0x19')](function(_0x22635e){logger[_0xa6f7('0x13')](_0xa6f7('0x15'),_0x1a06d1,_0x22635e);_0x30f2a7(_0x22635e);});});}exports['CreateCmHopperFinal']=function(_0x4a8827){var _0xba7755=this;return new Promise(function(_0x5298ba,_0x378967){return db[_0xa6f7('0x1a')]['create'](_0x4a8827[_0xa6f7('0x1b')],{'raw':_0x4a8827[_0xa6f7('0x1c')]?_0x4a8827[_0xa6f7('0x1c')][_0xa6f7('0x1d')]===undefined?!![]:![]:!![]})[_0xa6f7('0xe')](function(_0x1aa8dc){logger['info'](_0xa6f7('0x1e'),_0x4a8827);logger[_0xa6f7('0x10')]('CreateCmHopperFinal',_0x4a8827,JSON['stringify'](_0x1aa8dc));_0x5298ba(_0x1aa8dc);})['catch'](function(_0x1de6c9){logger[_0xa6f7('0x13')]('CreateCmHopperFinal',_0x1de6c9['message'],_0x4a8827);_0x378967(_0xba7755['error'](0x1f4,_0x1de6c9[_0xa6f7('0x16')]));});});};
\ No newline at end of file
+var _0x2dae=['moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','CmHopperFinal,\x20%s,\x20%s','request\x20sent','debug','CmHopperFinal,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','CmHopperFinal','body','options','raw','info','CreateCmHopperFinal','lodash'];(function(_0x32a94c,_0x29f028){var _0x1841ae=function(_0x3813fa){while(--_0x3813fa){_0x32a94c['push'](_0x32a94c['shift']());}};_0x1841ae(++_0x29f028);}(_0x2dae,0xc3));var _0xe2da=function(_0x2984d0,_0x1a7211){_0x2984d0=_0x2984d0-0x0;var _0x2885f2=_0x2dae[_0x2984d0];return _0x2885f2;};'use strict';var _=require(_0xe2da('0x0'));var util=require('util');var moment=require(_0xe2da('0x1'));var BPromise=require(_0xe2da('0x2'));var rs=require(_0xe2da('0x3'));var fs=require('fs');var Redis=require(_0xe2da('0x4'));var db=require(_0xe2da('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xe2da('0x6'))(_0xe2da('0x7'));var config=require(_0xe2da('0x8'));var jayson=require(_0xe2da('0x9'));var client=jayson['client'][_0xe2da('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x89c70b,_0x34cc98,_0x2efbd8){return new BPromise(function(_0x238da3,_0x1c71ea){return client[_0xe2da('0xb')](_0x89c70b,_0x2efbd8)[_0xe2da('0xc')](function(_0x68aa40){logger['info'](_0xe2da('0xd'),_0x34cc98,_0xe2da('0xe'));logger[_0xe2da('0xf')](_0xe2da('0x10'),_0x34cc98,_0xe2da('0xe'),JSON[_0xe2da('0x11')](_0x68aa40));if(_0x68aa40[_0xe2da('0x12')]){if(_0x68aa40[_0xe2da('0x12')]['code']===0x1f4){logger[_0xe2da('0x12')]('CmHopperFinal,\x20%s,\x20%s',_0x34cc98,_0x68aa40[_0xe2da('0x12')][_0xe2da('0x13')]);return _0x1c71ea(_0x68aa40[_0xe2da('0x12')][_0xe2da('0x13')]);}logger[_0xe2da('0x12')](_0xe2da('0xd'),_0x34cc98,_0x68aa40[_0xe2da('0x12')]['message']);return _0x238da3(_0x68aa40[_0xe2da('0x12')]['message']);}else{logger['info'](_0xe2da('0xd'),_0x34cc98,_0xe2da('0xe'));_0x238da3(_0x68aa40[_0xe2da('0x14')]['message']);}})[_0xe2da('0x15')](function(_0x2c0353){logger[_0xe2da('0x12')](_0xe2da('0xd'),_0x34cc98,_0x2c0353);_0x1c71ea(_0x2c0353);});});}exports['CreateCmHopperFinal']=function(_0x45bb92){var _0x1f7d33=this;return new Promise(function(_0x417363,_0x2e5730){return db[_0xe2da('0x16')]['create'](_0x45bb92[_0xe2da('0x17')],{'raw':_0x45bb92[_0xe2da('0x18')]?_0x45bb92['options'][_0xe2da('0x19')]===undefined?!![]:![]:!![]})[_0xe2da('0xc')](function(_0x332193){logger[_0xe2da('0x1a')](_0xe2da('0x1b'),_0x45bb92);logger[_0xe2da('0xf')]('CreateCmHopperFinal',_0x45bb92,JSON[_0xe2da('0x11')](_0x332193));_0x417363(_0x332193);})['catch'](function(_0x30efdc){logger[_0xe2da('0x12')](_0xe2da('0x1b'),_0x30efdc[_0xe2da('0x13')],_0x45bb92);_0x2e5730(_0x1f7d33[_0xe2da('0x12')](0x1f4,_0x30efdc[_0xe2da('0x13')]));});});};
\ No newline at end of file
index 667740f..5108e7e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-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(_0x764874,_0x3ed544){var _0x29f9d5=function(_0x152dad){while(--_0x152dad){_0x764874['push'](_0x764874['shift']());}};_0x29f9d5(++_0x3ed544);}(_0x3e74,0x175));var _0x43e7=function(_0x5f24e0,_0x296913){_0x5f24e0=_0x5f24e0-0x0;var _0x2f6966=_0x3e74[_0x5f24e0];return _0x2f6966;};'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
+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(_0x31b5b2,_0x5ab927){var _0x364f13=function(_0x163bd0){while(--_0x163bd0){_0x31b5b2['push'](_0x31b5b2['shift']());}};_0x364f13(++_0x5ab927);}(_0x3e74,0x175));var _0x43e7=function(_0x4da5dd,_0x7157f){_0x4da5dd=_0x4da5dd-0x0;var _0x5ca5fb=_0x3e74[_0x4da5dd];return _0x5ca5fb;};'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 acf8730..9cb27b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4148=['sequelize','exports','INTEGER','STRING','DATE','BOOLEAN'];(function(_0x2366ca,_0x3fa48f){var _0x4a15e5=function(_0x20d404){while(--_0x20d404){_0x2366ca['push'](_0x2366ca['shift']());}};_0x4a15e5(++_0x3fa48f);}(_0x4148,0xc6));var _0x8414=function(_0x26b1b8,_0x35bfd4){_0x26b1b8=_0x26b1b8-0x0;var _0x401762=_0x4148[_0x26b1b8];return _0x401762;};'use strict';var Sequelize=require(_0x8414('0x0'));module[_0x8414('0x1')]={'state':{'type':Sequelize[_0x8414('0x2')](0x2)},'statedesc':{'type':Sequelize[_0x8414('0x3')]},'scheduledat':{'type':Sequelize[_0x8414('0x4')]},'countbusyretry':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x8414('0x2')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x8414('0x2')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0x8414('0x2')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0x8414('0x3')]},'originatecalleridnum':{'type':Sequelize['STRING']},'originatecalleridname':{'type':Sequelize[_0x8414('0x3')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x8414('0x3')]},'starttime':{'type':Sequelize['DATE']},'responsetime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0x8414('0x4')]},'droptime':{'type':Sequelize[_0x8414('0x4')]},'endtime':{'type':Sequelize[_0x8414('0x4')]},'ringtime':{'type':Sequelize[_0x8414('0x2')],'defaultValue':0x0},'holdtime':{'type':Sequelize[_0x8414('0x2')],'defaultValue':0x0},'talktime':{'type':Sequelize[_0x8414('0x2')],'defaultValue':0x0},'followuptime':{'type':Sequelize[_0x8414('0x2')],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x8414('0x3')]},'campaign':{'type':Sequelize[_0x8414('0x3')]},'campaigntype':{'type':Sequelize[_0x8414('0x3')]},'membername':{'type':Sequelize[_0x8414('0x3')]},'reason':{'type':Sequelize['STRING']},'amd':{'type':Sequelize[_0x8414('0x5')],'defaultValue':![]},'fax':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'callback':{'type':Sequelize[_0x8414('0x5')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x8414('0x3')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x8414('0x4')]},'recallme':{'type':Sequelize[_0x8414('0x5')],'defaultValue':![]},'editedat':{'type':Sequelize['DATE']},'edited':{'type':Sequelize[_0x8414('0x5')],'defaultValue':![]}};
\ No newline at end of file
+var _0x38d3=['DATE','INTEGER','BOOLEAN','sequelize','exports','STRING'];(function(_0x211f62,_0x45b808){var _0x4865e0=function(_0x34be9b){while(--_0x34be9b){_0x211f62['push'](_0x211f62['shift']());}};_0x4865e0(++_0x45b808);}(_0x38d3,0x1a7));var _0x338d=function(_0x5b561d,_0x422b7c){_0x5b561d=_0x5b561d-0x0;var _0x431060=_0x38d3[_0x5b561d];return _0x431060;};'use strict';var Sequelize=require(_0x338d('0x0'));module[_0x338d('0x1')]={'state':{'type':Sequelize['INTEGER'](0x2)},'statedesc':{'type':Sequelize[_0x338d('0x2')]},'scheduledat':{'type':Sequelize[_0x338d('0x3')]},'countbusyretry':{'type':Sequelize[_0x338d('0x4')],'defaultValue':0x0},'countcongestionretry':{'type':Sequelize[_0x338d('0x4')],'defaultValue':0x0},'countnoanswerretry':{'type':Sequelize[_0x338d('0x4')],'defaultValue':0x0},'countglobal':{'type':Sequelize[_0x338d('0x4')],'defaultValue':0x0},'uniqueid':{'type':Sequelize[_0x338d('0x2')]},'originatecalleridnum':{'type':Sequelize[_0x338d('0x2')]},'originatecalleridname':{'type':Sequelize[_0x338d('0x2')]},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x338d('0x2')]},'starttime':{'type':Sequelize[_0x338d('0x3')]},'responsetime':{'type':Sequelize[_0x338d('0x3')]},'answertime':{'type':Sequelize[_0x338d('0x3')]},'droptime':{'type':Sequelize[_0x338d('0x3')]},'endtime':{'type':Sequelize[_0x338d('0x3')]},'ringtime':{'type':Sequelize[_0x338d('0x4')],'defaultValue':0x0},'holdtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'talktime':{'type':Sequelize[_0x338d('0x4')],'defaultValue':0x0},'followuptime':{'type':Sequelize[_0x338d('0x4')],'defaultValue':0x0},'dropreason':{'type':Sequelize[_0x338d('0x2')]},'campaign':{'type':Sequelize[_0x338d('0x2')]},'campaigntype':{'type':Sequelize[_0x338d('0x2')]},'membername':{'type':Sequelize[_0x338d('0x2')]},'reason':{'type':Sequelize['STRING']},'amd':{'type':Sequelize[_0x338d('0x5')],'defaultValue':![]},'fax':{'type':Sequelize[_0x338d('0x5')],'defaultValue':![]},'callback':{'type':Sequelize[_0x338d('0x5')],'defaultValue':![]},'callbackuniqueid':{'type':Sequelize[_0x338d('0x2')],'defaultValue':null},'callbackat':{'type':Sequelize[_0x338d('0x3')]},'recallme':{'type':Sequelize[_0x338d('0x5')],'defaultValue':![]},'editedat':{'type':Sequelize[_0x338d('0x3')]},'edited':{'type':Sequelize[_0x338d('0x5')],'defaultValue':![]}};
\ No newline at end of file
index 3bc554c..d3dd668 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb764=['uniqueid','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','crypto','jsforce','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','set','Content-Range','apply','reject','save','update','then','destroy','error','name','send','index','CmHopperHistory','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','limit','offset','sort','where','filters','pick','filter','merge','key','VIRTUAL','field','options','includeAll','include','findAll','show','params','find','catch','create','body','describe'];(function(_0x219158,_0x30d2a5){var _0x63bf17=function(_0x4293f8){while(--_0x4293f8){_0x219158['push'](_0x219158['shift']());}};_0x63bf17(++_0x30d2a5);}(_0xb764,0x11d));var _0x4b76=function(_0x4683eb,_0x4897da){_0x4683eb=_0x4683eb-0x0;var _0x282894=_0xb764[_0x4683eb];return _0x282894;};'use strict';var pdf=require(_0x4b76('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x4b76('0x1'));var zipdir=require(_0x4b76('0x2'));var jsonpatch=require(_0x4b76('0x3'));var rp=require(_0x4b76('0x4'));var moment=require('moment');var BPromise=require(_0x4b76('0x5'));var Mustache=require(_0x4b76('0x6'));var util=require(_0x4b76('0x7'));var path=require('path');var sox=require(_0x4b76('0x8'));var csv=require(_0x4b76('0x9'));var ejs=require(_0x4b76('0xa'));var fs=require('fs');var _=require(_0x4b76('0xb'));var squel=require(_0x4b76('0xc'));var crypto=require(_0x4b76('0xd'));var jsforce=require(_0x4b76('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x4b76('0x9'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x4b76('0xf'));var hardwareService=require(_0x4b76('0x10'));var Redis=require('ioredis');var qs=require(_0x4b76('0x11'));var logger=require(_0x4b76('0x12'))('api');var utils=require('../../config/utils');var config=require(_0x4b76('0x13'));var db=require(_0x4b76('0x14'))['db'];function respondWithStatusCode(_0x1d49a6,_0xb39e52){_0xb39e52=_0xb39e52||0xcc;return function(_0x55fc19){if(_0x55fc19){return _0x1d49a6[_0x4b76('0x15')](_0xb39e52);}return _0x1d49a6[_0x4b76('0x16')](_0xb39e52)[_0x4b76('0x17')]();};}function respondWithResult(_0x236d38,_0x2df9df){_0x2df9df=_0x2df9df||0xc8;return function(_0x2029ea){if(_0x2029ea){return _0x236d38[_0x4b76('0x16')](_0x2df9df)[_0x4b76('0x18')](_0x2029ea);}};}function respondWithFilteredResult(_0x24e6b8,_0x2f9607){return function(_0x233f71){if(_0x233f71){var _0x12f284=_0x233f71[_0x4b76('0x19')],_0x25f9c8=_0x2f9607['offset'],_0x2ca399=_0x2f9607['offset']+_0x2f9607['limit'],_0x906af1;if(_0x2ca399>=_0x12f284){_0x2ca399=_0x12f284;_0x906af1=0xc8;}else{_0x906af1=0xce;}_0x24e6b8[_0x4b76('0x16')](_0x906af1);return _0x24e6b8[_0x4b76('0x1a')](_0x4b76('0x1b'),_0x25f9c8+'-'+_0x2ca399+'/'+_0x12f284)[_0x4b76('0x18')](_0x233f71);}return null;};}function patchUpdates(_0x4ffe2b){return function(_0x3abbba){try{jsonpatch[_0x4b76('0x1c')](_0x3abbba,_0x4ffe2b,!![]);}catch(_0x1b0ff4){return BPromise[_0x4b76('0x1d')](_0x1b0ff4);}return _0x3abbba[_0x4b76('0x1e')]();};}function saveUpdates(_0x2c06d5,_0x21d10c){return function(_0x2b85d4){if(_0x2b85d4){return _0x2b85d4[_0x4b76('0x1f')](_0x2c06d5)[_0x4b76('0x20')](function(_0x3e8c21){return _0x3e8c21;});}return null;};}function removeEntity(_0x58eede,_0x37f81c){return function(_0x24b70d){if(_0x24b70d){return _0x24b70d[_0x4b76('0x21')]()[_0x4b76('0x20')](function(){_0x58eede[_0x4b76('0x16')](0xcc)[_0x4b76('0x17')]();});}};}function handleEntityNotFound(_0x53b9ee,_0x58a711){return function(_0x3535f7){if(!_0x3535f7){_0x53b9ee[_0x4b76('0x15')](0x194);}return _0x3535f7;};}function handleError(_0x46d179,_0xbbf16c){_0xbbf16c=_0xbbf16c||0x1f4;return function(_0xf4ef0a){logger[_0x4b76('0x22')](_0xf4ef0a['stack']);if(_0xf4ef0a[_0x4b76('0x23')]){delete _0xf4ef0a[_0x4b76('0x23')];}_0x46d179['status'](_0xbbf16c)[_0x4b76('0x24')](_0xf4ef0a);};}exports[_0x4b76('0x25')]=function(_0x343c2d,_0xc2a266){var _0x473f04={},_0x2e6620={},_0x26436c={'count':0x0,'rows':[]};var _0x4b3352=db[_0x4b76('0x26')][_0x4b76('0x27')];_0x2e6620[_0x4b76('0x28')]=_[_0x4b76('0x29')](_0x4b3352);_0x2e6620['query']=_['keys'](_0x343c2d[_0x4b76('0x2a')]);_0x2e6620['filters']=_[_0x4b76('0x2b')](_0x2e6620[_0x4b76('0x28')],_0x2e6620['query']);_0x473f04[_0x4b76('0x2c')]=_[_0x4b76('0x2b')](_0x2e6620[_0x4b76('0x28')],qs[_0x4b76('0x2d')](_0x343c2d[_0x4b76('0x2a')][_0x4b76('0x2d')]));_0x473f04['attributes']=_0x473f04[_0x4b76('0x2c')][_0x4b76('0x2e')]?_0x473f04[_0x4b76('0x2c')]:_0x2e6620[_0x4b76('0x28')];if(!_0x343c2d['query']['hasOwnProperty'](_0x4b76('0x2f'))){_0x473f04['limit']=qs[_0x4b76('0x30')](_0x343c2d[_0x4b76('0x2a')][_0x4b76('0x30')]);_0x473f04[_0x4b76('0x31')]=qs[_0x4b76('0x31')](_0x343c2d[_0x4b76('0x2a')][_0x4b76('0x31')]);}_0x473f04['order']=qs[_0x4b76('0x32')](_0x343c2d['query'][_0x4b76('0x32')]);_0x473f04[_0x4b76('0x33')]=qs[_0x4b76('0x34')](_[_0x4b76('0x35')](_0x343c2d[_0x4b76('0x2a')],_0x2e6620[_0x4b76('0x34')]));if(_0x343c2d[_0x4b76('0x2a')][_0x4b76('0x36')]){_0x473f04[_0x4b76('0x33')]=_[_0x4b76('0x37')](_0x473f04[_0x4b76('0x33')],{'$or':_['map'](_0x4b3352,function(_0xed7ae8){if(_0xed7ae8['type'][_0x4b76('0x38')]!==_0x4b76('0x39')){var _0x2b3861={};_0x2b3861[_0xed7ae8[_0x4b76('0x3a')]]={'$like':'%'+_0x343c2d[_0x4b76('0x2a')][_0x4b76('0x36')]+'%'};return _0x2b3861;}})});}_0x473f04=_[_0x4b76('0x37')]({},_0x473f04,_0x343c2d[_0x4b76('0x3b')]);var _0x46faa5={'where':_0x473f04[_0x4b76('0x33')]};return db[_0x4b76('0x26')][_0x4b76('0x19')](_0x46faa5)[_0x4b76('0x20')](function(_0x3ea7c7){_0x26436c['count']=_0x3ea7c7;if(_0x343c2d['query'][_0x4b76('0x3c')]){_0x473f04[_0x4b76('0x3d')]=[{'all':!![]}];}return db[_0x4b76('0x26')][_0x4b76('0x3e')](_0x473f04);})[_0x4b76('0x20')](function(_0x5e0882){_0x26436c['rows']=_0x5e0882;return _0x26436c;})[_0x4b76('0x20')](respondWithFilteredResult(_0xc2a266,_0x473f04))['catch'](handleError(_0xc2a266,null));};exports[_0x4b76('0x3f')]=function(_0x215a9a,_0xbb4684){var _0x2b1e8b={'raw':!![],'where':{'id':_0x215a9a[_0x4b76('0x40')]['id']}},_0x130c13={};_0x130c13['model']=_[_0x4b76('0x29')](db[_0x4b76('0x26')][_0x4b76('0x27')]);_0x130c13[_0x4b76('0x2a')]=_[_0x4b76('0x29')](_0x215a9a[_0x4b76('0x2a')]);_0x130c13['filters']=_[_0x4b76('0x2b')](_0x130c13[_0x4b76('0x28')],_0x130c13['query']);_0x2b1e8b[_0x4b76('0x2c')]=_['intersection'](_0x130c13['model'],qs['fields'](_0x215a9a['query'][_0x4b76('0x2d')]));_0x2b1e8b['attributes']=_0x2b1e8b['attributes'][_0x4b76('0x2e')]?_0x2b1e8b[_0x4b76('0x2c')]:_0x130c13['model'];if(_0x215a9a[_0x4b76('0x2a')]['includeAll']){_0x2b1e8b['include']=[{'all':!![]}];}_0x2b1e8b=_[_0x4b76('0x37')]({},_0x2b1e8b,_0x215a9a['options']);return db[_0x4b76('0x26')][_0x4b76('0x41')](_0x2b1e8b)[_0x4b76('0x20')](handleEntityNotFound(_0xbb4684,null))[_0x4b76('0x20')](respondWithResult(_0xbb4684,null))[_0x4b76('0x42')](handleError(_0xbb4684,null));};exports[_0x4b76('0x43')]=function(_0x53d6d2,_0x116fce){return db[_0x4b76('0x26')][_0x4b76('0x43')](_0x53d6d2[_0x4b76('0x44')],{})['then'](respondWithResult(_0x116fce,0xc9))[_0x4b76('0x42')](handleError(_0x116fce,null));};exports[_0x4b76('0x45')]=function(_0x3e85a7,_0x3d75f2){return db['CmHopperHistory']['describe']()[_0x4b76('0x20')](respondWithResult(_0x3d75f2,null))[_0x4b76('0x42')](handleError(_0x3d75f2,null));};exports[_0x4b76('0x1f')]=function(_0x1df1fc,_0x264362){if(_0x1df1fc['body'][_0x4b76('0x46')]){delete _0x1df1fc[_0x4b76('0x44')][_0x4b76('0x46')];}return db[_0x4b76('0x26')][_0x4b76('0x41')]({'where':{'uniqueid':_0x1df1fc['params']['id']}})['then'](handleEntityNotFound(_0x264362,null))[_0x4b76('0x20')](saveUpdates(_0x1df1fc[_0x4b76('0x44')],null))['then'](respondWithResult(_0x264362,null))['catch'](handleError(_0x264362,null));};
\ No newline at end of file
+var _0xabca=['apply','reject','save','update','destroy','then','sendStatus','error','stack','name','send','index','CmHopperHistory','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','includeAll','include','findAll','show','rawAttributes','length','options','find','catch','create','body','describe','uniqueid','params','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','end','json','count','offset','limit','status','set'];(function(_0x5959c9,_0x2ed153){var _0x4ffcbc=function(_0x459b7a){while(--_0x459b7a){_0x5959c9['push'](_0x5959c9['shift']());}};_0x4ffcbc(++_0x2ed153);}(_0xabca,0x1af));var _0xaabc=function(_0x19b6be,_0x471bb3){_0x19b6be=_0x19b6be-0x0;var _0x31ee2b=_0xabca[_0x19b6be];return _0x31ee2b;};'use strict';var pdf=require(_0xaabc('0x0'));var emlformat=require(_0xaabc('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xaabc('0x2'));var jsonpatch=require(_0xaabc('0x3'));var rp=require(_0xaabc('0x4'));var moment=require(_0xaabc('0x5'));var BPromise=require(_0xaabc('0x6'));var Mustache=require(_0xaabc('0x7'));var util=require(_0xaabc('0x8'));var path=require(_0xaabc('0x9'));var sox=require(_0xaabc('0xa'));var csv=require('to-csv');var ejs=require(_0xaabc('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xaabc('0xc'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xaabc('0xd'));var querystring=require(_0xaabc('0xe'));var Papa=require(_0xaabc('0xf'));var authService=require(_0xaabc('0x10'));var hardwareService=require(_0xaabc('0x11'));var Redis=require(_0xaabc('0x12'));var qs=require(_0xaabc('0x13'));var logger=require(_0xaabc('0x14'))(_0xaabc('0x15'));var utils=require(_0xaabc('0x16'));var config=require('../../config/environment');var db=require(_0xaabc('0x17'))['db'];function respondWithStatusCode(_0x55fba0,_0x4889b6){_0x4889b6=_0x4889b6||0xcc;return function(_0x4803d1){if(_0x4803d1){return _0x55fba0['sendStatus'](_0x4889b6);}return _0x55fba0['status'](_0x4889b6)[_0xaabc('0x18')]();};}function respondWithResult(_0x376d41,_0x35f243){_0x35f243=_0x35f243||0xc8;return function(_0x4500f9){if(_0x4500f9){return _0x376d41['status'](_0x35f243)[_0xaabc('0x19')](_0x4500f9);}};}function respondWithFilteredResult(_0x2889cd,_0x59a947){return function(_0x526995){if(_0x526995){var _0x3046e5=_0x526995[_0xaabc('0x1a')],_0x29f675=_0x59a947[_0xaabc('0x1b')],_0x5dcf2c=_0x59a947['offset']+_0x59a947[_0xaabc('0x1c')],_0x5c4562;if(_0x5dcf2c>=_0x3046e5){_0x5dcf2c=_0x3046e5;_0x5c4562=0xc8;}else{_0x5c4562=0xce;}_0x2889cd[_0xaabc('0x1d')](_0x5c4562);return _0x2889cd[_0xaabc('0x1e')]('Content-Range',_0x29f675+'-'+_0x5dcf2c+'/'+_0x3046e5)[_0xaabc('0x19')](_0x526995);}return null;};}function patchUpdates(_0x42e4fc){return function(_0x327064){try{jsonpatch[_0xaabc('0x1f')](_0x327064,_0x42e4fc,!![]);}catch(_0x1189c4){return BPromise[_0xaabc('0x20')](_0x1189c4);}return _0x327064[_0xaabc('0x21')]();};}function saveUpdates(_0x35f525,_0x397998){return function(_0x373612){if(_0x373612){return _0x373612[_0xaabc('0x22')](_0x35f525)['then'](function(_0x278913){return _0x278913;});}return null;};}function removeEntity(_0x48aead,_0x567959){return function(_0x38e048){if(_0x38e048){return _0x38e048[_0xaabc('0x23')]()[_0xaabc('0x24')](function(){_0x48aead[_0xaabc('0x1d')](0xcc)['end']();});}};}function handleEntityNotFound(_0x543ca5,_0x488094){return function(_0xe88a58){if(!_0xe88a58){_0x543ca5[_0xaabc('0x25')](0x194);}return _0xe88a58;};}function handleError(_0x2d902d,_0x45c03c){_0x45c03c=_0x45c03c||0x1f4;return function(_0x59eb39){logger[_0xaabc('0x26')](_0x59eb39[_0xaabc('0x27')]);if(_0x59eb39[_0xaabc('0x28')]){delete _0x59eb39[_0xaabc('0x28')];}_0x2d902d['status'](_0x45c03c)[_0xaabc('0x29')](_0x59eb39);};}exports[_0xaabc('0x2a')]=function(_0xa73fc7,_0x358991){var _0x4656c8={},_0x290290={},_0x30d5e7={'count':0x0,'rows':[]};var _0x103b6f=db[_0xaabc('0x2b')]['rawAttributes'];_0x290290[_0xaabc('0x2c')]=_[_0xaabc('0x2d')](_0x103b6f);_0x290290[_0xaabc('0x2e')]=_[_0xaabc('0x2d')](_0xa73fc7['query']);_0x290290[_0xaabc('0x2f')]=_[_0xaabc('0x30')](_0x290290[_0xaabc('0x2c')],_0x290290['query']);_0x4656c8['attributes']=_[_0xaabc('0x30')](_0x290290[_0xaabc('0x2c')],qs['fields'](_0xa73fc7['query'][_0xaabc('0x31')]));_0x4656c8[_0xaabc('0x32')]=_0x4656c8[_0xaabc('0x32')]['length']?_0x4656c8[_0xaabc('0x32')]:_0x290290['model'];if(!_0xa73fc7[_0xaabc('0x2e')][_0xaabc('0x33')](_0xaabc('0x34'))){_0x4656c8[_0xaabc('0x1c')]=qs['limit'](_0xa73fc7['query']['limit']);_0x4656c8[_0xaabc('0x1b')]=qs[_0xaabc('0x1b')](_0xa73fc7['query'][_0xaabc('0x1b')]);}_0x4656c8[_0xaabc('0x35')]=qs['sort'](_0xa73fc7[_0xaabc('0x2e')][_0xaabc('0x36')]);_0x4656c8[_0xaabc('0x37')]=qs['filters'](_[_0xaabc('0x38')](_0xa73fc7[_0xaabc('0x2e')],_0x290290[_0xaabc('0x2f')]));if(_0xa73fc7[_0xaabc('0x2e')][_0xaabc('0x39')]){_0x4656c8['where']=_[_0xaabc('0x3a')](_0x4656c8[_0xaabc('0x37')],{'$or':_[_0xaabc('0x3b')](_0x103b6f,function(_0x574247){if(_0x574247[_0xaabc('0x3c')][_0xaabc('0x3d')]!=='VIRTUAL'){var _0x2f4140={};_0x2f4140[_0x574247[_0xaabc('0x3e')]]={'$like':'%'+_0xa73fc7[_0xaabc('0x2e')]['filter']+'%'};return _0x2f4140;}})});}_0x4656c8=_['merge']({},_0x4656c8,_0xa73fc7['options']);var _0x211444={'where':_0x4656c8[_0xaabc('0x37')]};return db[_0xaabc('0x2b')][_0xaabc('0x1a')](_0x211444)['then'](function(_0x4b48c9){_0x30d5e7[_0xaabc('0x1a')]=_0x4b48c9;if(_0xa73fc7[_0xaabc('0x2e')][_0xaabc('0x3f')]){_0x4656c8[_0xaabc('0x40')]=[{'all':!![]}];}return db[_0xaabc('0x2b')][_0xaabc('0x41')](_0x4656c8);})[_0xaabc('0x24')](function(_0x131ac0){_0x30d5e7['rows']=_0x131ac0;return _0x30d5e7;})[_0xaabc('0x24')](respondWithFilteredResult(_0x358991,_0x4656c8))['catch'](handleError(_0x358991,null));};exports[_0xaabc('0x42')]=function(_0xec01e0,_0x5e6e4d){var _0x242524={'raw':!![],'where':{'id':_0xec01e0['params']['id']}},_0x42f13c={};_0x42f13c[_0xaabc('0x2c')]=_[_0xaabc('0x2d')](db['CmHopperHistory'][_0xaabc('0x43')]);_0x42f13c['query']=_[_0xaabc('0x2d')](_0xec01e0['query']);_0x42f13c[_0xaabc('0x2f')]=_[_0xaabc('0x30')](_0x42f13c[_0xaabc('0x2c')],_0x42f13c[_0xaabc('0x2e')]);_0x242524[_0xaabc('0x32')]=_[_0xaabc('0x30')](_0x42f13c[_0xaabc('0x2c')],qs['fields'](_0xec01e0['query']['fields']));_0x242524[_0xaabc('0x32')]=_0x242524[_0xaabc('0x32')][_0xaabc('0x44')]?_0x242524[_0xaabc('0x32')]:_0x42f13c[_0xaabc('0x2c')];if(_0xec01e0[_0xaabc('0x2e')][_0xaabc('0x3f')]){_0x242524[_0xaabc('0x40')]=[{'all':!![]}];}_0x242524=_['merge']({},_0x242524,_0xec01e0[_0xaabc('0x45')]);return db[_0xaabc('0x2b')][_0xaabc('0x46')](_0x242524)['then'](handleEntityNotFound(_0x5e6e4d,null))[_0xaabc('0x24')](respondWithResult(_0x5e6e4d,null))[_0xaabc('0x47')](handleError(_0x5e6e4d,null));};exports[_0xaabc('0x48')]=function(_0x14f870,_0x2453dc){return db[_0xaabc('0x2b')][_0xaabc('0x48')](_0x14f870[_0xaabc('0x49')],{})[_0xaabc('0x24')](respondWithResult(_0x2453dc,0xc9))[_0xaabc('0x47')](handleError(_0x2453dc,null));};exports[_0xaabc('0x4a')]=function(_0x52d847,_0xd250d8){return db[_0xaabc('0x2b')][_0xaabc('0x4a')]()[_0xaabc('0x24')](respondWithResult(_0xd250d8,null))[_0xaabc('0x47')](handleError(_0xd250d8,null));};exports['update']=function(_0x201aa4,_0x5d3931){if(_0x201aa4['body']['uniqueid']){delete _0x201aa4[_0xaabc('0x49')][_0xaabc('0x4b')];}return db[_0xaabc('0x2b')]['find']({'where':{'uniqueid':_0x201aa4[_0xaabc('0x4c')]['id']}})[_0xaabc('0x24')](handleEntityNotFound(_0x5d3931,null))['then'](saveUpdates(_0x201aa4[_0xaabc('0x49')],null))[_0xaabc('0x24')](respondWithResult(_0x5d3931,null))[_0xaabc('0x47')](handleError(_0x5d3931,null));};
\ No newline at end of file
index 225d777..c9bfb0b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0622=['bluebird','request-promise','./cmHopperHistory.attributes','define','CmHopperHistory','cm_hopper_history','endtime','uniqueid','lodash','../../config/logger','api','moment'];(function(_0x16d10f,_0x2ba2d5){var _0x50c823=function(_0x44e43f){while(--_0x44e43f){_0x16d10f['push'](_0x16d10f['shift']());}};_0x50c823(++_0x2ba2d5);}(_0x0622,0x1ac));var _0x2062=function(_0x5c1a8d,_0x2fee45){_0x5c1a8d=_0x5c1a8d-0x0;var _0xda1a1e=_0x0622[_0x5c1a8d];return _0xda1a1e;};'use strict';var _=require(_0x2062('0x0'));var util=require('util');var logger=require(_0x2062('0x1'))(_0x2062('0x2'));var moment=require(_0x2062('0x3'));var BPromise=require(_0x2062('0x4'));var rp=require(_0x2062('0x5'));var attributes=require(_0x2062('0x6'));module['exports']=function(_0x141e53,_0x249dfc){return _0x141e53[_0x2062('0x7')](_0x2062('0x8'),attributes,{'tableName':_0x2062('0x9'),'paranoid':![],'indexes':[{'name':_0x2062('0xa'),'fields':[_0x2062('0xa')]},{'name':'uniqueid','fields':[_0x2062('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xe871=['CmHopperHistory','cm_hopper_history','endtime','uniqueid','lodash','util','../../config/logger','api','moment','request-promise','exports','define'];(function(_0x2dadb9,_0x42cfe6){var _0x2f0097=function(_0x21163f){while(--_0x21163f){_0x2dadb9['push'](_0x2dadb9['shift']());}};_0x2f0097(++_0x42cfe6);}(_0xe871,0xac));var _0x1e87=function(_0xba5d47,_0x1ec75a){_0xba5d47=_0xba5d47-0x0;var _0x1da8b2=_0xe871[_0xba5d47];return _0x1da8b2;};'use strict';var _=require(_0x1e87('0x0'));var util=require(_0x1e87('0x1'));var logger=require(_0x1e87('0x2'))(_0x1e87('0x3'));var moment=require(_0x1e87('0x4'));var BPromise=require('bluebird');var rp=require(_0x1e87('0x5'));var attributes=require('./cmHopperHistory.attributes');module[_0x1e87('0x6')]=function(_0x3e462d,_0x40b611){return _0x3e462d[_0x1e87('0x7')](_0x1e87('0x8'),attributes,{'tableName':_0x1e87('0x9'),'paranoid':![],'indexes':[{'name':_0x1e87('0xa'),'fields':['endtime']},{'name':_0x1e87('0xb'),'fields':[_0x1e87('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index c5b0605..962c2c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9176=['ivrAnswerCallsDay','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','then','info','request\x20sent','CmHopperHistory,\x20%s,\x20%s,\x20%s','stringify','error','message','CmHopperHistory,\x20%s,\x20%s','result','CmHopperHistory','create','options','raw','CreateCmHopperHistory','catch','AvgHandleTime','where','sequelize','col','predictiveIntervalTotalCalls','literal','`state`\x20=\x204,\x201,\x20null','predictiveIntervalAnsweredCalls','COUNT','predictiveIntervalDroppedCallsTimeout','`state`\x20=\x2011,\x201,\x20null','predictiveIntervalDroppedCallsCallersExit','AVG','`state`\x20=\x204,\x20`holdtime`,\x20null','predictiveIntervalAvgHoldtime','`state`\x20=\x204,\x20`talktime`,\x20null','predictiveIntervalAvgTalktime','debug','findAll','campaign','name','`state`\x20=\x200,\x201,\x20null','outboundNoSuchCallsDay','`state`\x20=\x203,\x201,\x20null','outboundNoAnswerCallsDay','outboundAnswerCallsDay','`state`\x20=\x205,\x201,\x20null','`state`\x20=\x208,\x201,\x20null','outboundCongestionCallsDay','outboundDropCallsDayTimeout','`state`\x20=\x2011\x20,\x201,\x20null','outboundDropCallsDayCallersExit','`state`\x20=\x2012,\x201,\x20null','outboundUnknownCallsDay','outboundBlacklistCallsDay','outboundOriginateFailureCallsDay','`state`\x20=\x2018,\x201,\x20null','outboundAnswerAgiCallsDay','`state`\x20=\x2022\x20or\x20`state`\x20=\x2023,\x201,\x20null','outboundReCallsDay','GetVoiceQueueHopperHistory','GetCampaignHopperHistory','ivrTotalCallsDays'];(function(_0x192a71,_0x342b2a){var _0x1bd8ef=function(_0x30447e){while(--_0x30447e){_0x192a71['push'](_0x192a71['shift']());}};_0x1bd8ef(++_0x342b2a);}(_0x9176,0x164));var _0x6917=function(_0x2f5718,_0x5c9232){_0x2f5718=_0x2f5718-0x0;var _0x5af8e4=_0x9176[_0x2f5718];return _0x5af8e4;};'use strict';var _=require(_0x6917('0x0'));var util=require(_0x6917('0x1'));var moment=require(_0x6917('0x2'));var BPromise=require(_0x6917('0x3'));var rs=require(_0x6917('0x4'));var fs=require('fs');var Redis=require(_0x6917('0x5'));var db=require(_0x6917('0x6'))['db'];var utils=require(_0x6917('0x7'));var logger=require('../../config/logger')('rpc');var config=require(_0x6917('0x8'));var jayson=require(_0x6917('0x9'));var client=jayson[_0x6917('0xa')][_0x6917('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1b2290,_0x4c34b2,_0x458d4b){return new BPromise(function(_0x58781d,_0x19b550){return client['request'](_0x1b2290,_0x458d4b)[_0x6917('0xc')](function(_0x5d480b){logger[_0x6917('0xd')]('CmHopperHistory,\x20%s,\x20%s',_0x4c34b2,_0x6917('0xe'));logger['debug'](_0x6917('0xf'),_0x4c34b2,_0x6917('0xe'),JSON[_0x6917('0x10')](_0x5d480b));if(_0x5d480b[_0x6917('0x11')]){if(_0x5d480b[_0x6917('0x11')]['code']===0x1f4){logger['error']('CmHopperHistory,\x20%s,\x20%s',_0x4c34b2,_0x5d480b['error']['message']);return _0x19b550(_0x5d480b[_0x6917('0x11')][_0x6917('0x12')]);}logger[_0x6917('0x11')]('CmHopperHistory,\x20%s,\x20%s',_0x4c34b2,_0x5d480b[_0x6917('0x11')]['message']);return _0x58781d(_0x5d480b[_0x6917('0x11')]['message']);}else{logger[_0x6917('0xd')](_0x6917('0x13'),_0x4c34b2,'request\x20sent');_0x58781d(_0x5d480b[_0x6917('0x14')]['message']);}})['catch'](function(_0x16f861){logger[_0x6917('0x11')](_0x6917('0x13'),_0x4c34b2,_0x16f861);_0x19b550(_0x16f861);});});}exports['CreateCmHopperHistory']=function(_0x36e72e){var _0x4c8187=this;return new Promise(function(_0x2f4cf6,_0x2f42e3){return db[_0x6917('0x15')][_0x6917('0x16')](_0x36e72e['body'],{'raw':_0x36e72e[_0x6917('0x17')]?_0x36e72e[_0x6917('0x17')][_0x6917('0x18')]===undefined?!![]:![]:!![]})[_0x6917('0xc')](function(_0x334629){logger[_0x6917('0xd')](_0x6917('0x19'),_0x36e72e);logger['debug']('CreateCmHopperHistory',_0x36e72e,JSON[_0x6917('0x10')](_0x334629));_0x2f4cf6(_0x334629);})[_0x6917('0x1a')](function(_0x34dbff){logger['error']('CreateCmHopperHistory',_0x34dbff['message'],_0x36e72e);_0x2f42e3(_0x4c8187[_0x6917('0x11')](0x1f4,_0x34dbff[_0x6917('0x12')]));});});};exports[_0x6917('0x1b')]=function(_0x38f605){var _0x2fb633=this;return new Promise(function(_0x3e2545,_0xb8adf8){return db[_0x6917('0x15')]['findAll']({'raw':_0x38f605[_0x6917('0x17')]?_0x38f605[_0x6917('0x17')][_0x6917('0x18')]===undefined?!![]:![]:!![],'where':_0x38f605[_0x6917('0x17')]?_0x38f605[_0x6917('0x17')][_0x6917('0x1c')]||null:null,'attributes':[[db[_0x6917('0x1d')]['fn']('COUNT',db[_0x6917('0x1d')][_0x6917('0x1e')]('id')),_0x6917('0x1f')],[db[_0x6917('0x1d')]['fn']('COUNT',db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')](_0x6917('0x21')))),_0x6917('0x22')],[db[_0x6917('0x1d')]['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')]('`state`\x20=\x2010,\x201,\x20null'))),_0x6917('0x24')],[db['sequelize']['fn'](_0x6917('0x23'),db['sequelize']['fn']('IF',db['sequelize'][_0x6917('0x20')](_0x6917('0x25')))),_0x6917('0x26')],[db[_0x6917('0x1d')]['fn'](_0x6917('0x27'),db[_0x6917('0x1d')]['fn']('IF',db['sequelize'][_0x6917('0x20')](_0x6917('0x28')))),_0x6917('0x29')],[db[_0x6917('0x1d')]['fn'](_0x6917('0x27'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')](_0x6917('0x2a')))),_0x6917('0x2b')]]})[_0x6917('0xc')](function(_0x17144c){logger[_0x6917('0xd')](_0x6917('0x1b'),_0x38f605);logger[_0x6917('0x2c')](_0x6917('0x1b'),_0x38f605,JSON['stringify'](_0x17144c));_0x3e2545(_0x17144c);})[_0x6917('0x1a')](function(_0x352d61){logger[_0x6917('0x11')](_0x6917('0x1b'),_0x352d61[_0x6917('0x12')],_0x38f605);_0xb8adf8(_0x2fb633[_0x6917('0x11')](0x1f4,_0x352d61[_0x6917('0x12')]));});});};exports['GetVoiceQueueHopperHistory']=function(_0xd3c0cf){var _0x56549a=this;return new Promise(function(_0x83cc2a,_0x270992){return db[_0x6917('0x15')][_0x6917('0x2d')]({'raw':_0xd3c0cf[_0x6917('0x17')]?_0xd3c0cf['options'][_0x6917('0x18')]===undefined?!![]:![]:!![],'where':_0xd3c0cf[_0x6917('0x17')]?_0xd3c0cf[_0x6917('0x17')]['where']||null:null,'attributes':[[_0x6917('0x2e'),_0x6917('0x2f')],[db[_0x6917('0x1d')]['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')]['literal'](_0x6917('0x30')))),_0x6917('0x31')],[db[_0x6917('0x1d')]['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')](_0x6917('0x32')))),_0x6917('0x33')],[db[_0x6917('0x1d')]['fn']('COUNT',db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')](_0x6917('0x21')))),_0x6917('0x34')],[db['sequelize']['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')]['literal'](_0x6917('0x35')))),'outboundBusyCallsDay'],[db[_0x6917('0x1d')]['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')](_0x6917('0x36')))),_0x6917('0x37')],[db['sequelize']['fn']('COUNT',db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')]('`state`\x20=\x2010\x20,\x201,\x20null'))),_0x6917('0x38')],[db['sequelize']['fn'](_0x6917('0x23'),db['sequelize']['fn']('IF',db['sequelize'][_0x6917('0x20')](_0x6917('0x39')))),_0x6917('0x3a')],[db[_0x6917('0x1d')]['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')](_0x6917('0x3b')))),_0x6917('0x3c')],[db['sequelize']['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')]('`state`\x20=\x2013,\x201,\x20null'))),_0x6917('0x3d')],[db[_0x6917('0x1d')]['fn']('COUNT',db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')]('`state`\x20=\x2014,\x201,\x20null'))),_0x6917('0x3e')],[db[_0x6917('0x1d')]['fn']('COUNT',db['sequelize']['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')](_0x6917('0x3f')))),'outboundRejectCallsDay'],[db[_0x6917('0x1d')]['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db['sequelize'][_0x6917('0x20')]('`state`\x20=\x2016,\x201,\x20null'))),_0x6917('0x40')],[db[_0x6917('0x1d')]['fn'](_0x6917('0x23'),db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')]['literal']('`state`\x20=\x2020,\x201,\x20null'))),'outboundRejectCallsDay'],[db['sequelize']['fn']('COUNT',db[_0x6917('0x1d')]['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')](_0x6917('0x41')))),_0x6917('0x42')]],'group':[_0x6917('0x2e')]})[_0x6917('0xc')](function(_0x3801dc){logger['info'](_0x6917('0x43'),_0xd3c0cf);logger[_0x6917('0x2c')]('GetVoiceQueueHopperHistory',_0xd3c0cf,JSON[_0x6917('0x10')](_0x3801dc));_0x83cc2a(_0x3801dc);})[_0x6917('0x1a')](function(_0x27cb3a){logger[_0x6917('0x11')]('GetVoiceQueueHopperHistory',_0x27cb3a[_0x6917('0x12')],_0xd3c0cf);_0x270992(_0x56549a[_0x6917('0x11')](0x1f4,_0x27cb3a['message']));});});};exports[_0x6917('0x44')]=function(_0x4c7b62){var _0xec9575=this;return new Promise(function(_0x242f13,_0x59c90c){return db[_0x6917('0x15')][_0x6917('0x2d')]({'raw':_0x4c7b62[_0x6917('0x17')]?_0x4c7b62[_0x6917('0x17')][_0x6917('0x18')]===undefined?!![]:![]:!![],'where':_0x4c7b62[_0x6917('0x17')]?_0x4c7b62[_0x6917('0x17')][_0x6917('0x1c')]||null:null,'attributes':[[_0x6917('0x2e'),'name'],[db[_0x6917('0x1d')]['fn'](_0x6917('0x23'),db['sequelize'][_0x6917('0x1e')]('id')),_0x6917('0x45')],[db['sequelize']['fn'](_0x6917('0x23'),db['sequelize']['fn']('IF',db[_0x6917('0x1d')][_0x6917('0x20')]('`state`\x20=\x204,\x201,\x20null'))),_0x6917('0x46')]],'group':[_0x6917('0x2e')]})['then'](function(_0x1664fe){logger[_0x6917('0xd')](_0x6917('0x44'),_0x4c7b62);logger[_0x6917('0x2c')]('GetCampaignHopperHistory',_0x4c7b62,JSON[_0x6917('0x10')](_0x1664fe));_0x242f13(_0x1664fe);})[_0x6917('0x1a')](function(_0x33fe1b){logger['error']('GetCampaignHopperHistory',_0x33fe1b[_0x6917('0x12')],_0x4c7b62);_0x59c90c(_0xec9575[_0x6917('0x11')](0x1f4,_0x33fe1b['message']));});});};
\ No newline at end of file
+var _0x652b=['predictiveIntervalAvgHoldtime','`state`\x20=\x204,\x20`talktime`,\x20null','predictiveIntervalAvgTalktime','where','campaign','outboundNoSuchCallsDay','`state`\x20=\x203,\x201,\x20null','outboundNoAnswerCallsDay','`state`\x20=\x204,\x201,\x20null','`state`\x20=\x205,\x201,\x20null','outboundBusyCallsDay','`state`\x20=\x208,\x201,\x20null','outboundCongestionCallsDay','`state`\x20=\x2010\x20,\x201,\x20null','outboundDropCallsDayTimeout','`state`\x20=\x2011\x20,\x201,\x20null','outboundDropCallsDayCallersExit','`state`\x20=\x2012,\x201,\x20null','outboundUnknownCallsDay','`state`\x20=\x2013,\x201,\x20null','outboundBlacklistCallsDay','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','GetVoiceQueueHopperHistory','GetCampaignHopperHistory','name','ivrAnswerCallsDay','lodash','util','moment','randomstring','../../config/utils','../../config/logger','rpc','client','request','then','info','debug','CmHopperHistory,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','CmHopperHistory,\x20%s,\x20%s','CreateCmHopperHistory','CmHopperHistory','create','body','options','raw','AvgHandleTime','findAll','COUNT','col','sequelize','literal','predictiveIntervalAnsweredCalls','`state`\x20=\x2010,\x201,\x20null','predictiveIntervalDroppedCallsTimeout','`state`\x20=\x2011,\x201,\x20null','predictiveIntervalDroppedCallsCallersExit','AVG','`state`\x20=\x204,\x20`holdtime`,\x20null'];(function(_0x64a9a6,_0x14d3a9){var _0x27e296=function(_0x12e425){while(--_0x12e425){_0x64a9a6['push'](_0x64a9a6['shift']());}};_0x27e296(++_0x14d3a9);}(_0x652b,0x68));var _0xb652=function(_0xa6cc5c,_0x239c99){_0xa6cc5c=_0xa6cc5c-0x0;var _0x44803d=_0x652b[_0xa6cc5c];return _0x44803d;};'use strict';var _=require(_0xb652('0x0'));var util=require(_0xb652('0x1'));var moment=require(_0xb652('0x2'));var BPromise=require('bluebird');var rs=require(_0xb652('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xb652('0x4'));var logger=require(_0xb652('0x5'))(_0xb652('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xb652('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x58d168,_0x10b742,_0x5c0245){return new BPromise(function(_0x2b82fd,_0x117e49){return client[_0xb652('0x8')](_0x58d168,_0x5c0245)[_0xb652('0x9')](function(_0x2f06f0){logger[_0xb652('0xa')]('CmHopperHistory,\x20%s,\x20%s',_0x10b742,'request\x20sent');logger[_0xb652('0xb')](_0xb652('0xc'),_0x10b742,_0xb652('0xd'),JSON[_0xb652('0xe')](_0x2f06f0));if(_0x2f06f0['error']){if(_0x2f06f0[_0xb652('0xf')][_0xb652('0x10')]===0x1f4){logger[_0xb652('0xf')]('CmHopperHistory,\x20%s,\x20%s',_0x10b742,_0x2f06f0[_0xb652('0xf')][_0xb652('0x11')]);return _0x117e49(_0x2f06f0['error']['message']);}logger['error']('CmHopperHistory,\x20%s,\x20%s',_0x10b742,_0x2f06f0[_0xb652('0xf')]['message']);return _0x2b82fd(_0x2f06f0[_0xb652('0xf')][_0xb652('0x11')]);}else{logger[_0xb652('0xa')]('CmHopperHistory,\x20%s,\x20%s',_0x10b742,_0xb652('0xd'));_0x2b82fd(_0x2f06f0[_0xb652('0x12')][_0xb652('0x11')]);}})[_0xb652('0x13')](function(_0x4ba393){logger[_0xb652('0xf')](_0xb652('0x14'),_0x10b742,_0x4ba393);_0x117e49(_0x4ba393);});});}exports[_0xb652('0x15')]=function(_0x3bf3b0){var _0x554d5a=this;return new Promise(function(_0x94d0b3,_0x4af396){return db[_0xb652('0x16')][_0xb652('0x17')](_0x3bf3b0[_0xb652('0x18')],{'raw':_0x3bf3b0[_0xb652('0x19')]?_0x3bf3b0['options'][_0xb652('0x1a')]===undefined?!![]:![]:!![]})[_0xb652('0x9')](function(_0x3fc43e){logger[_0xb652('0xa')](_0xb652('0x15'),_0x3bf3b0);logger[_0xb652('0xb')]('CreateCmHopperHistory',_0x3bf3b0,JSON['stringify'](_0x3fc43e));_0x94d0b3(_0x3fc43e);})[_0xb652('0x13')](function(_0x39a4e3){logger['error']('CreateCmHopperHistory',_0x39a4e3[_0xb652('0x11')],_0x3bf3b0);_0x4af396(_0x554d5a['error'](0x1f4,_0x39a4e3[_0xb652('0x11')]));});});};exports[_0xb652('0x1b')]=function(_0x52d51f){var _0x4e5919=this;return new Promise(function(_0x2c06d1,_0xd6bbf9){return db[_0xb652('0x16')][_0xb652('0x1c')]({'raw':_0x52d51f[_0xb652('0x19')]?_0x52d51f[_0xb652('0x19')][_0xb652('0x1a')]===undefined?!![]:![]:!![],'where':_0x52d51f[_0xb652('0x19')]?_0x52d51f['options']['where']||null:null,'attributes':[[db['sequelize']['fn'](_0xb652('0x1d'),db['sequelize'][_0xb652('0x1e')]('id')),'predictiveIntervalTotalCalls'],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')]('`state`\x20=\x204,\x201,\x20null'))),_0xb652('0x21')],[db['sequelize']['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x22')))),_0xb652('0x23')],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x24')))),_0xb652('0x25')],[db['sequelize']['fn'](_0xb652('0x26'),db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x27')))),_0xb652('0x28')],[db['sequelize']['fn'](_0xb652('0x26'),db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x29')))),_0xb652('0x2a')]]})[_0xb652('0x9')](function(_0x30dc46){logger[_0xb652('0xa')](_0xb652('0x1b'),_0x52d51f);logger['debug'](_0xb652('0x1b'),_0x52d51f,JSON['stringify'](_0x30dc46));_0x2c06d1(_0x30dc46);})['catch'](function(_0x4a58da){logger[_0xb652('0xf')](_0xb652('0x1b'),_0x4a58da[_0xb652('0x11')],_0x52d51f);_0xd6bbf9(_0x4e5919['error'](0x1f4,_0x4a58da[_0xb652('0x11')]));});});};exports['GetVoiceQueueHopperHistory']=function(_0x301ded){var _0x498d3b=this;return new Promise(function(_0x4451ef,_0x5895a0){return db[_0xb652('0x16')][_0xb652('0x1c')]({'raw':_0x301ded[_0xb652('0x19')]?_0x301ded[_0xb652('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x301ded[_0xb652('0x19')]?_0x301ded[_0xb652('0x19')][_0xb652('0x2b')]||null:null,'attributes':[[_0xb652('0x2c'),'name'],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db[_0xb652('0x1f')]['literal']('`state`\x20=\x200,\x201,\x20null'))),_0xb652('0x2d')],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x2e')))),_0xb652('0x2f')],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x30')))),'outboundAnswerCallsDay'],[db['sequelize']['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x31')))),_0xb652('0x32')],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db['sequelize'][_0xb652('0x20')](_0xb652('0x33')))),_0xb652('0x34')],[db[_0xb652('0x1f')]['fn']('COUNT',db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x35')))),_0xb652('0x36')],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x37')))),_0xb652('0x38')],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db['sequelize'][_0xb652('0x20')](_0xb652('0x39')))),_0xb652('0x3a')],[db['sequelize']['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x3b')))),_0xb652('0x3c')],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')]('`state`\x20=\x2014,\x201,\x20null'))),_0xb652('0x3d')],[db[_0xb652('0x1f')]['fn']('COUNT',db[_0xb652('0x1f')]['fn']('IF',db['sequelize'][_0xb652('0x20')](_0xb652('0x3e')))),_0xb652('0x3f')],[db['sequelize']['fn'](_0xb652('0x1d'),db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x40')))),_0xb652('0x41')],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db['sequelize'][_0xb652('0x20')](_0xb652('0x42')))),'outboundRejectCallsDay'],[db['sequelize']['fn']('COUNT',db[_0xb652('0x1f')]['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x43')))),'outboundReCallsDay']],'group':['campaign']})['then'](function(_0x2934cc){logger[_0xb652('0xa')](_0xb652('0x44'),_0x301ded);logger['debug'](_0xb652('0x44'),_0x301ded,JSON[_0xb652('0xe')](_0x2934cc));_0x4451ef(_0x2934cc);})['catch'](function(_0x552f3c){logger[_0xb652('0xf')](_0xb652('0x44'),_0x552f3c[_0xb652('0x11')],_0x301ded);_0x5895a0(_0x498d3b[_0xb652('0xf')](0x1f4,_0x552f3c[_0xb652('0x11')]));});});};exports[_0xb652('0x45')]=function(_0x9aefc7){var _0x318d94=this;return new Promise(function(_0x40ed44,_0x402090){return db[_0xb652('0x16')]['findAll']({'raw':_0x9aefc7['options']?_0x9aefc7['options'][_0xb652('0x1a')]===undefined?!![]:![]:!![],'where':_0x9aefc7[_0xb652('0x19')]?_0x9aefc7[_0xb652('0x19')][_0xb652('0x2b')]||null:null,'attributes':[[_0xb652('0x2c'),_0xb652('0x46')],[db[_0xb652('0x1f')]['fn']('COUNT',db[_0xb652('0x1f')][_0xb652('0x1e')]('id')),'ivrTotalCallsDays'],[db[_0xb652('0x1f')]['fn'](_0xb652('0x1d'),db['sequelize']['fn']('IF',db[_0xb652('0x1f')][_0xb652('0x20')](_0xb652('0x30')))),_0xb652('0x47')]],'group':[_0xb652('0x2c')]})[_0xb652('0x9')](function(_0x2f6f20){logger['info'](_0xb652('0x45'),_0x9aefc7);logger[_0xb652('0xb')](_0xb652('0x45'),_0x9aefc7,JSON[_0xb652('0xe')](_0x2f6f20));_0x40ed44(_0x2f6f20);})['catch'](function(_0x1c1aa4){logger[_0xb652('0xf')](_0xb652('0x45'),_0x1c1aa4[_0xb652('0x11')],_0x9aefc7);_0x402090(_0x318d94[_0xb652('0xf')](0x1f4,_0x1c1aa4[_0xb652('0x11')]));});});};
\ No newline at end of file
index a8e13cd..845c76b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x269f=['index','/describe','isAuthenticated','describe','/:id','show','post','create','put','update','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./cmHopperHistory.controller','get'];(function(_0xc32cc6,_0x17bca7){var _0x5506a9=function(_0x21309a){while(--_0x21309a){_0xc32cc6['push'](_0xc32cc6['shift']());}};_0x5506a9(++_0x17bca7);}(_0x269f,0xee));var _0xf269=function(_0x49b207,_0x408ade){_0x49b207=_0x49b207-0x0;var _0x2dc8fa=_0x269f[_0x49b207];return _0x2dc8fa;};'use strict';var multer=require(_0xf269('0x0'));var util=require(_0xf269('0x1'));var path=require(_0xf269('0x2'));var timeout=require('connect-timeout');var express=require(_0xf269('0x3'));var router=express['Router']();var auth=require(_0xf269('0x4'));var interaction=require(_0xf269('0x5'));var config=require(_0xf269('0x6'));var controller=require(_0xf269('0x7'));router[_0xf269('0x8')]('/',auth['isAuthenticated'](),controller[_0xf269('0x9')]);router[_0xf269('0x8')](_0xf269('0xa'),auth[_0xf269('0xb')](),controller[_0xf269('0xc')]);router[_0xf269('0x8')](_0xf269('0xd'),auth['isAuthenticated'](),controller[_0xf269('0xe')]);router[_0xf269('0xf')]('/',auth[_0xf269('0xb')](),controller[_0xf269('0x10')]);router[_0xf269('0x11')](_0xf269('0xd'),auth[_0xf269('0xb')](),controller[_0xf269('0x12')]);module['exports']=router;
\ No newline at end of file
+var _0x2dc3=['../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','get','/:id','show','post','update','exports','util','path','connect-timeout','express','Router'];(function(_0x41284e,_0x3d0d32){var _0x4f12ce=function(_0xa12b8e){while(--_0xa12b8e){_0x41284e['push'](_0x41284e['shift']());}};_0x4f12ce(++_0x3d0d32);}(_0x2dc3,0x127));var _0x32dc=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x2dc3[_0x6c993a];return _0x27f547;};'use strict';var multer=require('multer');var util=require(_0x32dc('0x0'));var path=require(_0x32dc('0x1'));var timeout=require(_0x32dc('0x2'));var express=require(_0x32dc('0x3'));var router=express[_0x32dc('0x4')]();var auth=require(_0x32dc('0x5'));var interaction=require(_0x32dc('0x6'));var config=require(_0x32dc('0x7'));var controller=require('./cmHopperHistory.controller');router['get']('/',auth[_0x32dc('0x8')](),controller['index']);router[_0x32dc('0x9')]('/describe',auth[_0x32dc('0x8')](),controller['describe']);router['get'](_0x32dc('0xa'),auth['isAuthenticated'](),controller[_0x32dc('0xb')]);router[_0x32dc('0xc')]('/',auth[_0x32dc('0x8')](),controller['create']);router['put'](_0x32dc('0xa'),auth[_0x32dc('0x8')](),controller[_0x32dc('0xd')]);module[_0x32dc('0xe')]=router;
\ No newline at end of file
index 33f3691..c75f3b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fab=['exports','name','STRING','sequelize'];(function(_0x2b6bfd,_0xba2811){var _0x1bbef3=function(_0x2a1823){while(--_0x2a1823){_0x2b6bfd['push'](_0x2b6bfd['shift']());}};_0x1bbef3(++_0xba2811);}(_0x5fab,0x177));var _0xb5fa=function(_0x2ca616,_0x384ec8){_0x2ca616=_0x2ca616-0x0;var _0x53155f=_0x5fab[_0x2ca616];return _0x53155f;};'use strict';var Sequelize=require(_0xb5fa('0x0'));module[_0xb5fa('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0xb5fa('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0xb5fa('0x3')]},'dialPrefix':{'type':Sequelize[_0xb5fa('0x3')]}};
\ No newline at end of file
+var _0x6aa7=['name','sequelize','STRING'];(function(_0x1c383e,_0x4754d8){var _0x348a53=function(_0x34f729){while(--_0x34f729){_0x1c383e['push'](_0x1c383e['shift']());}};_0x348a53(++_0x4754d8);}(_0x6aa7,0x178));var _0x76aa=function(_0x55706c,_0x4f395d){_0x55706c=_0x55706c-0x0;var _0xfaaf40=_0x6aa7[_0x55706c];return _0xfaaf40;};'use strict';var Sequelize=require(_0x76aa('0x0'));module['exports']={'name':{'type':Sequelize[_0x76aa('0x1')],'unique':_0x76aa('0x2'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x76aa('0x1')]},'dialPrefix':{'type':Sequelize[_0x76aa('0x1')]}};
\ No newline at end of file
index 667fc58..1575b48 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaaac=['cm_contacts','cf_%s','addAgents','removeAgents','emit','userCmList:remove','getAgents','User','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','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./cmList.socket','register','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','then','destroy','get','Lists','UserProfileResource','error','stack','name','send','index','CmList','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','show','params','find','create','body','user','role','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','addDisposition','ListId','Disposition','getDispositions','findOne','pick','removeDispositions','ids','addContacts','CmContact','tags','isArray','join','push','each','omit','success','dataValues','errors','message','Malformed\x20request\x20syntax','getContacts','CmCustomField','CustomFields','concat','format','cf_%d','raw','isEmpty','/tmp/list_%d_%s.csv','setHeader','Content-disposition','attachment;\x20filename=','list_%d_%s.csv','Content-type','text/csv','download','addCustomField','sequelize','transaction','addCustomFields','Sequelize','TEXT','number','INTEGER','switch','defaultValue','addColumn'];(function(_0x12d6c2,_0x409bc8){var _0x1c9825=function(_0x569f66){while(--_0x569f66){_0x12d6c2['push'](_0x12d6c2['shift']());}};_0x1c9825(++_0x409bc8);}(_0xaaac,0x1bb));var _0xcaaa=function(_0x2386bb,_0x26faa0){_0x2386bb=_0x2386bb-0x0;var _0xba4ca5=_0xaaac[_0x2386bb];return _0xba4ca5;};'use strict';var pdf=require(_0xcaaa('0x0'));var emlformat=require(_0xcaaa('0x1'));var rimraf=require(_0xcaaa('0x2'));var zipdir=require(_0xcaaa('0x3'));var jsonpatch=require(_0xcaaa('0x4'));var rp=require(_0xcaaa('0x5'));var moment=require(_0xcaaa('0x6'));var BPromise=require('bluebird');var Mustache=require(_0xcaaa('0x7'));var util=require(_0xcaaa('0x8'));var path=require(_0xcaaa('0x9'));var sox=require(_0xcaaa('0xa'));var csv=require(_0xcaaa('0xb'));var ejs=require(_0xcaaa('0xc'));var fs=require('fs');var _=require(_0xcaaa('0xd'));var squel=require(_0xcaaa('0xe'));var crypto=require(_0xcaaa('0xf'));var jsforce=require(_0xcaaa('0x10'));var deskjs=require(_0xcaaa('0x11'));var toCsv=require('to-csv');var querystring=require(_0xcaaa('0x12'));var Papa=require(_0xcaaa('0x13'));var authService=require(_0xcaaa('0x14'));var hardwareService=require(_0xcaaa('0x15'));var Redis=require('ioredis');var qs=require(_0xcaaa('0x16'));var logger=require('../../config/logger')(_0xcaaa('0x17'));var utils=require(_0xcaaa('0x18'));var config=require(_0xcaaa('0x19'));var db=require(_0xcaaa('0x1a'))['db'];config[_0xcaaa('0x1b')]=_[_0xcaaa('0x1c')](config[_0xcaaa('0x1b')],{'host':_0xcaaa('0x1d'),'port':0x18eb});var socket=require(_0xcaaa('0x1e'))(new Redis(config[_0xcaaa('0x1b')]));require(_0xcaaa('0x1f'))[_0xcaaa('0x20')](socket);function respondWithStatusCode(_0x1edde6,_0x35896b){_0x35896b=_0x35896b||0xcc;return function(_0x3d86b7){if(_0x3d86b7){return _0x1edde6[_0xcaaa('0x21')](_0x35896b);}return _0x1edde6[_0xcaaa('0x22')](_0x35896b)[_0xcaaa('0x23')]();};}function respondWithResult(_0x4d990c,_0x2934d1){_0x2934d1=_0x2934d1||0xc8;return function(_0x389b7d){if(_0x389b7d){return _0x4d990c['status'](_0x2934d1)['json'](_0x389b7d);}};}function respondWithFilteredResult(_0x37a380,_0x5ee987){return function(_0x43e53d){if(_0x43e53d){var _0x1c34ff=_0x43e53d[_0xcaaa('0x24')],_0x492820=_0x5ee987['offset'],_0x8281e3=_0x5ee987[_0xcaaa('0x25')]+_0x5ee987[_0xcaaa('0x26')],_0x43c943;if(_0x8281e3>=_0x1c34ff){_0x8281e3=_0x1c34ff;_0x43c943=0xc8;}else{_0x43c943=0xce;}_0x37a380[_0xcaaa('0x22')](_0x43c943);return _0x37a380[_0xcaaa('0x27')](_0xcaaa('0x28'),_0x492820+'-'+_0x8281e3+'/'+_0x1c34ff)[_0xcaaa('0x29')](_0x43e53d);}return null;};}function patchUpdates(_0x26be28){return function(_0x190c62){try{jsonpatch[_0xcaaa('0x2a')](_0x190c62,_0x26be28,!![]);}catch(_0x1b22c0){return BPromise['reject'](_0x1b22c0);}return _0x190c62['save']();};}function saveUpdates(_0x1729c,_0x51a2a9){return function(_0x5a986a){if(_0x5a986a){return _0x5a986a['update'](_0x1729c)[_0xcaaa('0x2b')](function(_0x1cbbb2){return _0x1cbbb2;});}return null;};}function removeEntity(_0x5161c5,_0x549aea){return function(_0x30f1db){if(_0x30f1db){return _0x30f1db[_0xcaaa('0x2c')]()['then'](function(){var _0x123e34=_0x30f1db[_0xcaaa('0x2d')]({'plain':!![]});var _0x4d5b26=_0xcaaa('0x2e');return db[_0xcaaa('0x2f')][_0xcaaa('0x2c')]({'where':{'type':_0x4d5b26,'resourceId':_0x123e34['id']}})['then'](function(){return _0x30f1db;});})[_0xcaaa('0x2b')](function(){_0x5161c5[_0xcaaa('0x22')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1531f1,_0x3d2dab){return function(_0x2ff655){if(!_0x2ff655){_0x1531f1[_0xcaaa('0x21')](0x194);}return _0x2ff655;};}function handleError(_0x2b35b1,_0x53b35b){_0x53b35b=_0x53b35b||0x1f4;return function(_0x5d28ea){logger[_0xcaaa('0x30')](_0x5d28ea[_0xcaaa('0x31')]);if(_0x5d28ea[_0xcaaa('0x32')]){delete _0x5d28ea[_0xcaaa('0x32')];}_0x2b35b1[_0xcaaa('0x22')](_0x53b35b)[_0xcaaa('0x33')](_0x5d28ea);};}exports[_0xcaaa('0x34')]=function(_0x5e07e7,_0x28fb02){var _0x58cac0={},_0x5a255f={},_0x2ad8c6={'count':0x0,'rows':[]};var _0x3e680f=db[_0xcaaa('0x35')][_0xcaaa('0x36')];_0x5a255f[_0xcaaa('0x37')]=_[_0xcaaa('0x38')](_0x3e680f);_0x5a255f[_0xcaaa('0x39')]=_[_0xcaaa('0x38')](_0x5e07e7[_0xcaaa('0x39')]);_0x5a255f[_0xcaaa('0x3a')]=_['intersection'](_0x5a255f[_0xcaaa('0x37')],_0x5a255f[_0xcaaa('0x39')]);_0x58cac0[_0xcaaa('0x3b')]=_[_0xcaaa('0x3c')](_0x5a255f['model'],qs[_0xcaaa('0x3d')](_0x5e07e7[_0xcaaa('0x39')][_0xcaaa('0x3d')]));_0x58cac0[_0xcaaa('0x3b')]=_0x58cac0[_0xcaaa('0x3b')][_0xcaaa('0x3e')]?_0x58cac0[_0xcaaa('0x3b')]:_0x5a255f[_0xcaaa('0x37')];if(!_0x5e07e7[_0xcaaa('0x39')][_0xcaaa('0x3f')](_0xcaaa('0x40'))){_0x58cac0[_0xcaaa('0x26')]=qs[_0xcaaa('0x26')](_0x5e07e7[_0xcaaa('0x39')][_0xcaaa('0x26')]);_0x58cac0[_0xcaaa('0x25')]=qs['offset'](_0x5e07e7[_0xcaaa('0x39')]['offset']);}_0x58cac0[_0xcaaa('0x41')]=qs[_0xcaaa('0x42')](_0x5e07e7[_0xcaaa('0x39')][_0xcaaa('0x42')]);_0x58cac0[_0xcaaa('0x43')]=qs[_0xcaaa('0x3a')](_['pick'](_0x5e07e7[_0xcaaa('0x39')],_0x5a255f[_0xcaaa('0x3a')]));if(_0x5e07e7[_0xcaaa('0x39')][_0xcaaa('0x44')]){_0x58cac0[_0xcaaa('0x43')]=_[_0xcaaa('0x45')](_0x58cac0['where'],{'$or':_[_0xcaaa('0x46')](_0x3e680f,function(_0x30aa3f){if(_0x30aa3f[_0xcaaa('0x47')][_0xcaaa('0x48')]!==_0xcaaa('0x49')){var _0x3a940a={};_0x3a940a[_0x30aa3f[_0xcaaa('0x4a')]]={'$like':'%'+_0x5e07e7[_0xcaaa('0x39')][_0xcaaa('0x44')]+'%'};return _0x3a940a;}})});}_0x58cac0=_[_0xcaaa('0x45')]({},_0x58cac0,_0x5e07e7[_0xcaaa('0x4b')]);var _0x28b8c4={'where':_0x58cac0[_0xcaaa('0x43')]};return db[_0xcaaa('0x35')][_0xcaaa('0x24')](_0x28b8c4)[_0xcaaa('0x2b')](function(_0x23148f){_0x2ad8c6[_0xcaaa('0x24')]=_0x23148f;if(_0x5e07e7[_0xcaaa('0x39')][_0xcaaa('0x4c')]){_0x58cac0['include']=[{'all':!![]}];}return db['CmList'][_0xcaaa('0x4d')](_0x58cac0);})[_0xcaaa('0x2b')](function(_0xd5cfa2){_0x2ad8c6[_0xcaaa('0x4e')]=_0xd5cfa2;return _0x2ad8c6;})['then'](respondWithFilteredResult(_0x28fb02,_0x58cac0))[_0xcaaa('0x4f')](handleError(_0x28fb02,null));};exports[_0xcaaa('0x50')]=function(_0x584306,_0x33a498){var _0x368759={'raw':![],'where':{'id':_0x584306[_0xcaaa('0x51')]['id']}},_0x3fb72a={};_0x3fb72a[_0xcaaa('0x37')]=_['keys'](db[_0xcaaa('0x35')][_0xcaaa('0x36')]);_0x3fb72a['query']=_[_0xcaaa('0x38')](_0x584306[_0xcaaa('0x39')]);_0x3fb72a[_0xcaaa('0x3a')]=_[_0xcaaa('0x3c')](_0x3fb72a[_0xcaaa('0x37')],_0x3fb72a[_0xcaaa('0x39')]);_0x368759[_0xcaaa('0x3b')]=_['intersection'](_0x3fb72a['model'],qs[_0xcaaa('0x3d')](_0x584306[_0xcaaa('0x39')][_0xcaaa('0x3d')]));_0x368759[_0xcaaa('0x3b')]=_0x368759['attributes'][_0xcaaa('0x3e')]?_0x368759['attributes']:_0x3fb72a[_0xcaaa('0x37')];if(_0x584306[_0xcaaa('0x39')][_0xcaaa('0x4c')]){_0x368759['include']=[{'all':!![]}];}_0x368759=_[_0xcaaa('0x45')]({},_0x368759,_0x584306[_0xcaaa('0x4b')]);return db['CmList'][_0xcaaa('0x52')](_0x368759)[_0xcaaa('0x2b')](handleEntityNotFound(_0x33a498,null))[_0xcaaa('0x2b')](respondWithResult(_0x33a498,null))[_0xcaaa('0x4f')](handleError(_0x33a498,null));};exports[_0xcaaa('0x53')]=function(_0x2c6c0e,_0x451897){return db[_0xcaaa('0x35')]['create'](_0x2c6c0e[_0xcaaa('0x54')],{})[_0xcaaa('0x2b')](function(_0x408f4e){var _0x566f19=_0x2c6c0e[_0xcaaa('0x55')][_0xcaaa('0x2d')]({'plain':!![]});if(!_0x566f19)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x566f19[_0xcaaa('0x56')]==='user'){var _0x24e453=_0x408f4e[_0xcaaa('0x2d')]({'plain':!![]});var _0x14dab6=_0xcaaa('0x2e');return db['UserProfileSection']['find']({'where':{'name':_0x14dab6,'userProfileId':_0x566f19['userProfileId']},'raw':!![]})[_0xcaaa('0x2b')](function(_0x42d22b){if(_0x42d22b&&_0x42d22b['autoAssociation']===0x0){return db[_0xcaaa('0x2f')][_0xcaaa('0x53')]({'name':_0x24e453['name'],'resourceId':_0x24e453['id'],'type':_0x42d22b[_0xcaaa('0x32')],'sectionId':_0x42d22b['id']},{})['then'](function(){return _0x408f4e;});}else{return _0x408f4e;}})[_0xcaaa('0x4f')](function(_0xcd7f55){logger[_0xcaaa('0x30')](_0xcaaa('0x57'),_0xcd7f55);throw _0xcd7f55;});}return _0x408f4e;})[_0xcaaa('0x2b')](respondWithResult(_0x451897,0xc9))[_0xcaaa('0x4f')](handleError(_0x451897,null));};exports['update']=function(_0x10c1c9,_0x517154){if(_0x10c1c9['body']['id']){delete _0x10c1c9['body']['id'];}return db[_0xcaaa('0x35')]['find']({'where':{'id':_0x10c1c9['params']['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0x517154,null))[_0xcaaa('0x2b')](saveUpdates(_0x10c1c9[_0xcaaa('0x54')],null))[_0xcaaa('0x2b')](respondWithResult(_0x517154,null))['catch'](handleError(_0x517154,null));};exports[_0xcaaa('0x2c')]=function(_0x6f8e63,_0x245f3b){return db[_0xcaaa('0x35')][_0xcaaa('0x52')]({'where':{'id':_0x6f8e63[_0xcaaa('0x51')]['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0x245f3b,null))[_0xcaaa('0x2b')](removeEntity(_0x245f3b,null))[_0xcaaa('0x4f')](handleError(_0x245f3b,null));};exports[_0xcaaa('0x58')]=function(_0x3e9cb4,_0x57520d){return db[_0xcaaa('0x35')][_0xcaaa('0x58')]()['then'](respondWithResult(_0x57520d,null))[_0xcaaa('0x4f')](handleError(_0x57520d,null));};exports[_0xcaaa('0x59')]=function(_0x2c7513,_0x44bfc3,_0x472fc8){if(_0x2c7513[_0xcaaa('0x54')]['id']){delete _0x2c7513[_0xcaaa('0x54')]['id'];}return db[_0xcaaa('0x35')][_0xcaaa('0x52')]({'where':{'id':_0x2c7513[_0xcaaa('0x51')]['id']}})['then'](handleEntityNotFound(_0x44bfc3,null))[_0xcaaa('0x2b')](function(_0x1543ab){if(_0x1543ab){_0x2c7513[_0xcaaa('0x54')][_0xcaaa('0x5a')]=_0x1543ab['id'];return db[_0xcaaa('0x5b')][_0xcaaa('0x53')](_0x2c7513[_0xcaaa('0x54')]);}})[_0xcaaa('0x2b')](respondWithResult(_0x44bfc3,null))[_0xcaaa('0x4f')](handleError(_0x44bfc3,null));};exports[_0xcaaa('0x5c')]=function(_0x5cef3d,_0x48d10e,_0x49711a){var _0x40093d={'raw':![],'where':{}};var _0x4ddfb6={};var _0x18251a={'count':0x0,'rows':[]};return db[_0xcaaa('0x35')][_0xcaaa('0x5d')]({'where':{'id':_0x5cef3d['params']['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0x48d10e,null))[_0xcaaa('0x2b')](function(_0x515d72){if(_0x515d72){_0x4ddfb6[_0xcaaa('0x37')]=_[_0xcaaa('0x38')](db[_0xcaaa('0x5b')][_0xcaaa('0x36')]);_0x4ddfb6[_0xcaaa('0x39')]=_[_0xcaaa('0x38')](_0x5cef3d['query']);_0x4ddfb6[_0xcaaa('0x3a')]=_[_0xcaaa('0x3c')](_0x4ddfb6[_0xcaaa('0x37')],_0x4ddfb6[_0xcaaa('0x39')]);_0x40093d['attributes']=_[_0xcaaa('0x3c')](_0x4ddfb6[_0xcaaa('0x37')],qs['fields'](_0x5cef3d[_0xcaaa('0x39')][_0xcaaa('0x3d')]));_0x40093d['attributes']=_0x40093d[_0xcaaa('0x3b')][_0xcaaa('0x3e')]?_0x40093d[_0xcaaa('0x3b')]:_0x4ddfb6['model'];if(!_0x5cef3d[_0xcaaa('0x39')][_0xcaaa('0x3f')](_0xcaaa('0x40'))){_0x40093d[_0xcaaa('0x26')]=qs['limit'](_0x5cef3d['query']['limit']);_0x40093d[_0xcaaa('0x25')]=qs[_0xcaaa('0x25')](_0x5cef3d[_0xcaaa('0x39')][_0xcaaa('0x25')]);}_0x40093d[_0xcaaa('0x41')]=qs[_0xcaaa('0x42')](_0x5cef3d[_0xcaaa('0x39')][_0xcaaa('0x42')]);_0x40093d[_0xcaaa('0x43')]=qs[_0xcaaa('0x3a')](_[_0xcaaa('0x5e')](_0x5cef3d['query'],_0x4ddfb6[_0xcaaa('0x3a')]));_0x40093d[_0xcaaa('0x43')][_0xcaaa('0x5a')]=_0x515d72['id'];if(_0x5cef3d[_0xcaaa('0x39')]['filter']){_0x40093d[_0xcaaa('0x43')]=_[_0xcaaa('0x45')](_0x40093d['where'],{'$or':_[_0xcaaa('0x46')](_0x40093d[_0xcaaa('0x3b')],function(_0x4b524e){var _0x5d6989={};_0x5d6989[_0x4b524e]={'$like':'%'+_0x5cef3d[_0xcaaa('0x39')][_0xcaaa('0x44')]+'%'};return _0x5d6989;})});}_0x40093d=_['merge']({},_0x40093d,_0x5cef3d[_0xcaaa('0x4b')]);return db['Disposition'][_0xcaaa('0x24')]({'where':_0x40093d[_0xcaaa('0x43')]})[_0xcaaa('0x2b')](function(_0x16eb6d){_0x18251a[_0xcaaa('0x24')]=_0x16eb6d;if(_0x5cef3d[_0xcaaa('0x39')][_0xcaaa('0x4c')]){_0x40093d['include']=[{'all':!![]}];}return db[_0xcaaa('0x5b')][_0xcaaa('0x4d')](_0x40093d);})['then'](function(_0x640056){_0x18251a[_0xcaaa('0x4e')]=_0x640056;return _0x18251a;});}})[_0xcaaa('0x2b')](respondWithFilteredResult(_0x48d10e,_0x40093d))[_0xcaaa('0x4f')](handleError(_0x48d10e,null));};exports['removeDispositions']=function(_0x1dbd27,_0x34c19a,_0x429cc6){var _0x4c01ff;return db[_0xcaaa('0x35')][_0xcaaa('0x52')]({'where':{'id':_0x1dbd27[_0xcaaa('0x51')]['id']}})['then'](handleEntityNotFound(_0x34c19a,null))[_0xcaaa('0x2b')](function(_0x1f8902){if(_0x1f8902){return _0x1f8902[_0xcaaa('0x5f')](_0x1dbd27[_0xcaaa('0x39')][_0xcaaa('0x60')]);}})[_0xcaaa('0x2b')](respondWithStatusCode(_0x34c19a,null))['catch'](handleError(_0x34c19a,null));};exports[_0xcaaa('0x61')]=function(_0xfa5a1b,_0x1843fc,_0x364840){return db[_0xcaaa('0x35')][_0xcaaa('0x52')]({'where':{'id':_0xfa5a1b[_0xcaaa('0x51')]['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0x1843fc,null))[_0xcaaa('0x2b')](function(_0x5047fc){if(_0x5047fc){var _0x2730f8=[];var _0x2f9bfb={'success':[],'errors':[]};return db[_0xcaaa('0x62')][_0xcaaa('0x58')]()['then'](function(_0x5af440){if(_0xfa5a1b[_0xcaaa('0x54')][_0xcaaa('0x63')]&&_[_0xcaaa('0x64')](_0xfa5a1b[_0xcaaa('0x54')][_0xcaaa('0x63')])){if(_0xfa5a1b[_0xcaaa('0x54')][_0xcaaa('0x63')][_0xcaaa('0x3e')]){_0xfa5a1b['body'][_0xcaaa('0x63')]=_0xfa5a1b[_0xcaaa('0x54')][_0xcaaa('0x63')][_0xcaaa('0x65')](';')+';';}else{_0xfa5a1b[_0xcaaa('0x54')]['tags']=null;}}else{_0xfa5a1b[_0xcaaa('0x54')][_0xcaaa('0x63')]=null;}if(_0xfa5a1b[_0xcaaa('0x54')]&&_['isArray'](_0xfa5a1b[_0xcaaa('0x54')])){for(var _0x327643=0x0;_0x327643<_0xfa5a1b[_0xcaaa('0x54')][_0xcaaa('0x3e')];_0x327643+=0x1){_0xfa5a1b[_0xcaaa('0x54')][_0x327643][_0xcaaa('0x5a')]=_0xfa5a1b['params']['id'];_0x2730f8[_0xcaaa('0x66')](_0xfa5a1b[_0xcaaa('0x54')][_0x327643]);}return BPromise[_0xcaaa('0x67')](_0x2730f8,function(_0x408bb9){return db[_0xcaaa('0x62')][_0xcaaa('0x53')](_[_0xcaaa('0x68')](_0x408bb9,[_0xcaaa('0x60'),'id'])||{},{'fields':_[_0xcaaa('0x38')](_0x5af440),'raw':!![]})[_0xcaaa('0x2b')](function(_0x32ef7a){_0x2f9bfb[_0xcaaa('0x69')][_0xcaaa('0x66')](_0x32ef7a[_0xcaaa('0x6a')]);})[_0xcaaa('0x4f')](function(_0x2c3817){_0x2f9bfb[_0xcaaa('0x6b')]['push']({'data':_0x408bb9,'error':_0x2c3817[_0xcaaa('0x6c')]});});})[_0xcaaa('0x2b')](function(_0x204768){return _0x2f9bfb;})['catch'](function(_0x51bebc){return _0x51bebc;});}else{_0x1843fc[_0xcaaa('0x22')](0x190)[_0xcaaa('0x29')]({'message':_0xcaaa('0x6d')});}});}})['then'](respondWithResult(_0x1843fc,null))[_0xcaaa('0x4f')](handleError(_0x1843fc,null));};exports[_0xcaaa('0x6e')]=function(_0x47725f,_0x1d9ebf,_0x5ad549){var _0x16d3bd;return db[_0xcaaa('0x35')][_0xcaaa('0x52')]({'where':{'id':_0x47725f[_0xcaaa('0x51')]['id']},'include':[{'model':db[_0xcaaa('0x6f')],'as':_0xcaaa('0x70')}]})['then'](handleEntityNotFound(_0x1d9ebf,null))[_0xcaaa('0x2b')](function(_0x22af97){if(_0x22af97){_0x16d3bd=_0x22af97;return db['CmContact'][_0xcaaa('0x36')];}})['then'](function(_0x46bdb9){if(_0x46bdb9){var _0x58faf4={};var _0x5e1209={};_0x5e1209['model']=_[_0xcaaa('0x71')](_[_0xcaaa('0x38')](_0x46bdb9),_[_0xcaaa('0x46')](_0x16d3bd[_0xcaaa('0x70')],function(_0x2e0c22){return util[_0xcaaa('0x72')](_0xcaaa('0x73'),_0x2e0c22['id']);}));_0x5e1209[_0xcaaa('0x39')]=_[_0xcaaa('0x38')](_0x47725f[_0xcaaa('0x39')]);_0x5e1209['filters']=_['intersection'](_0x5e1209[_0xcaaa('0x37')],_0x5e1209['query']);_0x58faf4['attributes']=_['intersection'](_0x5e1209[_0xcaaa('0x37')],qs['fields'](_0x47725f[_0xcaaa('0x39')][_0xcaaa('0x3d')]));_0x58faf4['attributes']=_0x58faf4[_0xcaaa('0x3b')][_0xcaaa('0x3e')]?_0x58faf4[_0xcaaa('0x3b')]:_0x5e1209[_0xcaaa('0x37')];if(!_0x47725f['query'][_0xcaaa('0x3f')](_0xcaaa('0x40'))){_0x58faf4[_0xcaaa('0x26')]=qs['limit'](_0x47725f['query'][_0xcaaa('0x26')]);_0x58faf4[_0xcaaa('0x25')]=qs[_0xcaaa('0x25')](_0x47725f[_0xcaaa('0x39')]['offset']);}_0x58faf4[_0xcaaa('0x41')]=qs[_0xcaaa('0x42')](_0x47725f[_0xcaaa('0x39')]['sort']);_0x58faf4[_0xcaaa('0x43')]=qs['filters'](_[_0xcaaa('0x5e')](_0x47725f[_0xcaaa('0x39')],_0x5e1209[_0xcaaa('0x3a')]));_0x58faf4[_0xcaaa('0x74')]=!![];if(_0x47725f[_0xcaaa('0x39')]['filter']){_0x58faf4['where']=_['merge'](_0x58faf4[_0xcaaa('0x43')],{'$or':_[_0xcaaa('0x46')](_0x58faf4[_0xcaaa('0x3b')],function(_0x24dd20){var _0x31e7f3={};_0x31e7f3[_0x24dd20]={'$like':'%'+_0x47725f[_0xcaaa('0x39')][_0xcaaa('0x44')]+'%'};return _0x31e7f3;})});}_0x58faf4=_[_0xcaaa('0x45')]({},_0x58faf4,_0x47725f[_0xcaaa('0x4b')]);return _0x16d3bd[_0xcaaa('0x6e')](_0x58faf4);}})['then'](respondWithResult(_0x1d9ebf,null))['catch'](handleError(_0x1d9ebf,null));};exports['getContactsCsv']=function(_0xd65eb9,_0x130d5f,_0x1f8a14){var _0x1dba3c;return db['CmList']['find']({'where':{'id':_0xd65eb9[_0xcaaa('0x51')]['id']},'include':[{'model':db[_0xcaaa('0x6f')],'as':_0xcaaa('0x70')}]})['then'](handleEntityNotFound(_0x130d5f,null))[_0xcaaa('0x2b')](function(_0x5d1a11){if(_0x5d1a11){_0x1dba3c=_0x5d1a11;return db[_0xcaaa('0x62')][_0xcaaa('0x36')];}})[_0xcaaa('0x2b')](function(_0x5dd936){if(_0x5dd936){var _0x5e0b2e={};var _0x318763={};_0x318763['model']=_[_0xcaaa('0x71')](_['keys'](_0x5dd936),_['map'](_0x1dba3c[_0xcaaa('0x70')],function(_0x10b1a4){return util[_0xcaaa('0x72')](_0xcaaa('0x73'),_0x10b1a4['id']);}));_0x318763[_0xcaaa('0x39')]=_[_0xcaaa('0x38')](_0xd65eb9[_0xcaaa('0x39')]);_0x318763['filters']=_['intersection'](_0x318763[_0xcaaa('0x37')],_0x318763[_0xcaaa('0x39')]);_0x5e0b2e[_0xcaaa('0x3b')]=_[_0xcaaa('0x3c')](_0x318763[_0xcaaa('0x37')],qs['fields'](_0xd65eb9['query'][_0xcaaa('0x3d')]));_0x5e0b2e[_0xcaaa('0x3b')]=_0x5e0b2e['attributes']['length']?_0x5e0b2e[_0xcaaa('0x3b')]:_0x318763['model'];if(!_0xd65eb9[_0xcaaa('0x39')]['hasOwnProperty'](_0xcaaa('0x40'))){_0x5e0b2e['limit']=qs['limit'](_0xd65eb9[_0xcaaa('0x39')][_0xcaaa('0x26')]);_0x5e0b2e[_0xcaaa('0x25')]=qs[_0xcaaa('0x25')](_0xd65eb9['query'][_0xcaaa('0x25')]);}_0x5e0b2e[_0xcaaa('0x41')]=qs['sort'](_0xd65eb9[_0xcaaa('0x39')][_0xcaaa('0x42')]);_0x5e0b2e[_0xcaaa('0x43')]=qs[_0xcaaa('0x3a')](_['pick'](_0xd65eb9[_0xcaaa('0x39')],_0x318763[_0xcaaa('0x3a')]));_0x5e0b2e[_0xcaaa('0x74')]=!![];if(_0xd65eb9[_0xcaaa('0x39')][_0xcaaa('0x44')]){_0x5e0b2e[_0xcaaa('0x43')]=_['merge'](_0x5e0b2e[_0xcaaa('0x43')],{'$or':_[_0xcaaa('0x46')](_0x5e0b2e['attributes'],function(_0x4171ab){var _0x485a4e={};_0x485a4e[_0x4171ab]={'$like':'%'+_0xd65eb9['query']['filter']+'%'};return _0x485a4e;})});}_0x5e0b2e=_['merge']({},_0x5e0b2e,_0xd65eb9[_0xcaaa('0x4b')]);return _0x1dba3c[_0xcaaa('0x6e')](_0x5e0b2e);}})[_0xcaaa('0x2b')](function(_0x38a778){if(!_[_0xcaaa('0x75')](_0x38a778)){var _0x1bc9d9=toCsv(_0x38a778);var _0x3c297e=Date['now']();fs['writeFileSync'](util[_0xcaaa('0x72')](_0xcaaa('0x76'),_0x1dba3c['id'],_0x3c297e),_0x1bc9d9);_0x130d5f[_0xcaaa('0x77')](_0xcaaa('0x78'),_0xcaaa('0x79')+util[_0xcaaa('0x72')](_0xcaaa('0x7a'),_0x1dba3c['id'],_0x3c297e));_0x130d5f['setHeader'](_0xcaaa('0x7b'),_0xcaaa('0x7c'));return _0x130d5f[_0xcaaa('0x7d')](util[_0xcaaa('0x72')](_0xcaaa('0x76'),_0x1dba3c['id'],_0x3c297e));}else{return _0x130d5f[_0xcaaa('0x21')](0xcc);}})[_0xcaaa('0x4f')](handleError(_0x130d5f,null));};exports[_0xcaaa('0x7e')]=function(_0x2eae2b,_0x5dfdb8,_0x21ab33){var _0x3798c4;delete _0x2eae2b['body']['id'];return db[_0xcaaa('0x35')][_0xcaaa('0x5d')]({'where':{'id':_0x2eae2b['params']['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0x5dfdb8,null))['then'](function(_0x53f629){if(_0x53f629){return db[_0xcaaa('0x7f')][_0xcaaa('0x80')](function(_0x528412){return db['CmCustomField'][_0xcaaa('0x53')](_0x2eae2b[_0xcaaa('0x54')],{'transaction':_0x528412})[_0xcaaa('0x2b')](function(_0x41aef9){_0x3798c4=_0x41aef9;return _0x53f629[_0xcaaa('0x81')](_0x41aef9,{'transaction':_0x528412});})[_0xcaaa('0x2b')](function(){var _0xc0c434={'type':db[_0xcaaa('0x82')][_0xcaaa('0x83')],'transaction':_0x528412};switch(_0x2eae2b[_0xcaaa('0x54')]['type']){case'text':_0xc0c434[_0xcaaa('0x47')]=db['Sequelize'][_0xcaaa('0x83')];break;case _0xcaaa('0x84'):_0xc0c434['type']=db[_0xcaaa('0x82')][_0xcaaa('0x85')];break;case _0xcaaa('0x86'):_0xc0c434[_0xcaaa('0x47')]=db['Sequelize']['BOOLEAN'];_0xc0c434[_0xcaaa('0x87')]=![];break;default:}return db[_0xcaaa('0x7f')]['queryInterface'][_0xcaaa('0x88')](_0xcaaa('0x89'),util[_0xcaaa('0x72')](_0xcaaa('0x8a'),_0x3798c4['id']),_0xc0c434);})[_0xcaaa('0x2b')](function(){return _0x3798c4;});});}})['then'](respondWithResult(_0x5dfdb8,null))['catch'](handleError(_0x5dfdb8,null));};exports['getCustomFields']=function(_0x141c3f,_0x37b2c0,_0x63c63b){var _0x41d673={};var _0x3218db={};var _0x4ab029;var _0x594cb8;return db[_0xcaaa('0x35')][_0xcaaa('0x5d')]({'where':{'id':_0x141c3f[_0xcaaa('0x51')]['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0x37b2c0,null))[_0xcaaa('0x2b')](function(_0x5826c5){if(_0x5826c5){_0x4ab029=_0x5826c5;_0x3218db[_0xcaaa('0x37')]=_[_0xcaaa('0x38')](db[_0xcaaa('0x6f')][_0xcaaa('0x36')]);_0x3218db[_0xcaaa('0x39')]=_[_0xcaaa('0x38')](_0x141c3f[_0xcaaa('0x39')]);_0x3218db['filters']=_[_0xcaaa('0x3c')](_0x3218db[_0xcaaa('0x37')],_0x3218db[_0xcaaa('0x39')]);_0x41d673[_0xcaaa('0x3b')]=_['intersection'](_0x3218db[_0xcaaa('0x37')],qs[_0xcaaa('0x3d')](_0x141c3f[_0xcaaa('0x39')][_0xcaaa('0x3d')]));_0x41d673['attributes']=_0x41d673[_0xcaaa('0x3b')]['length']?_0x41d673['attributes']:_0x3218db['model'];_0x41d673[_0xcaaa('0x41')]=qs['sort'](_0x141c3f[_0xcaaa('0x39')][_0xcaaa('0x42')]);_0x41d673[_0xcaaa('0x43')]=qs[_0xcaaa('0x3a')](_[_0xcaaa('0x5e')](_0x141c3f[_0xcaaa('0x39')],_0x3218db['filters']));_0x41d673[_0xcaaa('0x43')]=_[_0xcaaa('0x45')](_0x41d673[_0xcaaa('0x43')],{'$or':[{'ListId':_0x5826c5['id']},{'ListId':null}]});if(_0x141c3f[_0xcaaa('0x39')]['filter']){_0x41d673[_0xcaaa('0x43')]=_[_0xcaaa('0x45')](_0x41d673[_0xcaaa('0x43')],{'$or':_[_0xcaaa('0x46')](_0x41d673['attributes'],function(_0x4052bb){var _0x5eb288={};_0x5eb288[_0x4052bb]={'$like':'%'+_0x141c3f[_0xcaaa('0x39')][_0xcaaa('0x44')]+'%'};return _0x5eb288;})});}_0x41d673=_['merge']({},_0x41d673,_0x141c3f['options']);return db[_0xcaaa('0x6f')]['findAndCountAll'](_0x41d673);}})['then'](respondWithResult(_0x37b2c0,null))[_0xcaaa('0x4f')](handleError(_0x37b2c0,null));};exports['addAgents']=function(_0xa343cc,_0xf03613,_0x5b673a){return db[_0xcaaa('0x35')]['find']({'where':{'id':_0xa343cc[_0xcaaa('0x51')]['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0xf03613,null))[_0xcaaa('0x2b')](function(_0x30677c){if(_0x30677c){return _0x30677c[_0xcaaa('0x8b')](_0xa343cc[_0xcaaa('0x54')][_0xcaaa('0x60')],_[_0xcaaa('0x68')](_0xa343cc['body'],[_0xcaaa('0x60'),'id'])||{})['spread'](function(_0x2acd96){for(var _0x53a03e=0x0;_0x53a03e<_0xa343cc[_0xcaaa('0x54')][_0xcaaa('0x60')][_0xcaaa('0x3e')];_0x53a03e+=0x1){socket['emit']('userCmList:save',{'UserId':_0xa343cc['body'][_0xcaaa('0x60')][_0x53a03e],'CmListId':_0xa343cc[_0xcaaa('0x51')]['id']});}return _0x2acd96;});}})[_0xcaaa('0x2b')](respondWithResult(_0xf03613,null))[_0xcaaa('0x4f')](handleError(_0xf03613,null));};exports['removeAgents']=function(_0x32153b,_0x48b4aa,_0x50e5a3){var _0x6d94ed;return db[_0xcaaa('0x35')][_0xcaaa('0x52')]({'where':{'id':_0x32153b[_0xcaaa('0x51')]['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0x48b4aa,null))[_0xcaaa('0x2b')](function(_0x1ae06b){if(_0x1ae06b){return _0x1ae06b[_0xcaaa('0x8c')](_0x32153b[_0xcaaa('0x39')][_0xcaaa('0x60')])[_0xcaaa('0x2b')](function(_0x190897){if(_['isArray'](_0x32153b[_0xcaaa('0x39')][_0xcaaa('0x60')])){for(var _0x459860=0x0;_0x459860<_0x32153b[_0xcaaa('0x39')]['ids'][_0xcaaa('0x3e')];_0x459860+=0x1){socket[_0xcaaa('0x8d')](_0xcaaa('0x8e'),{'UserId':_0x32153b[_0xcaaa('0x39')][_0xcaaa('0x60')][_0x459860],'CmListId':_0x32153b[_0xcaaa('0x51')]['id']});}}else{socket['emit'](_0xcaaa('0x8e'),{'UserId':_0x32153b[_0xcaaa('0x39')]['ids'],'CmListId':_0x32153b[_0xcaaa('0x51')]['id']});}});}})[_0xcaaa('0x2b')](respondWithStatusCode(_0x48b4aa,null))[_0xcaaa('0x4f')](handleError(_0x48b4aa,null));};exports[_0xcaaa('0x8f')]=function(_0x1108d7,_0x3c5096,_0x143f54){var _0x347652={};var _0x17ed50={};var _0x2c1135;var _0x21904e;return db[_0xcaaa('0x35')][_0xcaaa('0x5d')]({'where':{'id':_0x1108d7[_0xcaaa('0x51')]['id']}})[_0xcaaa('0x2b')](handleEntityNotFound(_0x3c5096,null))[_0xcaaa('0x2b')](function(_0x273fdc){if(_0x273fdc){_0x2c1135=_0x273fdc;_0x17ed50[_0xcaaa('0x37')]=_[_0xcaaa('0x38')](db[_0xcaaa('0x90')][_0xcaaa('0x36')]);_0x17ed50[_0xcaaa('0x39')]=_['keys'](_0x1108d7['query']);_0x17ed50[_0xcaaa('0x3a')]=_[_0xcaaa('0x3c')](_0x17ed50[_0xcaaa('0x37')],_0x17ed50[_0xcaaa('0x39')]);_0x347652[_0xcaaa('0x3b')]=_['intersection'](_0x17ed50[_0xcaaa('0x37')],qs['fields'](_0x1108d7[_0xcaaa('0x39')][_0xcaaa('0x3d')]));_0x347652[_0xcaaa('0x3b')]=_0x347652[_0xcaaa('0x3b')][_0xcaaa('0x3e')]?_0x347652[_0xcaaa('0x3b')]:_0x17ed50[_0xcaaa('0x37')];_0x347652[_0xcaaa('0x41')]=qs['sort'](_0x1108d7[_0xcaaa('0x39')][_0xcaaa('0x42')]);_0x347652[_0xcaaa('0x43')]=qs[_0xcaaa('0x3a')](_[_0xcaaa('0x5e')](_0x1108d7[_0xcaaa('0x39')],_0x17ed50['filters']));if(_0x1108d7['query'][_0xcaaa('0x44')]){_0x347652['where']=_[_0xcaaa('0x45')](_0x347652[_0xcaaa('0x43')],{'$or':_[_0xcaaa('0x46')](_0x347652[_0xcaaa('0x3b')],function(_0x47a403){var _0x368bf3={};_0x368bf3[_0x47a403]={'$like':'%'+_0x1108d7[_0xcaaa('0x39')][_0xcaaa('0x44')]+'%'};return _0x368bf3;})});}_0x347652=_['merge']({},_0x347652,_0x1108d7['options']);return _0x2c1135[_0xcaaa('0x8f')](_0x347652);}})[_0xcaaa('0x2b')](function(_0x1574d4){if(_0x1574d4){_0x21904e=_0x1574d4[_0xcaaa('0x3e')];if(!_0x1108d7['query']['hasOwnProperty'](_0xcaaa('0x40'))){_0x347652[_0xcaaa('0x26')]=qs[_0xcaaa('0x26')](_0x1108d7['query'][_0xcaaa('0x26')]);_0x347652[_0xcaaa('0x25')]=qs[_0xcaaa('0x25')](_0x1108d7[_0xcaaa('0x39')][_0xcaaa('0x25')]);}return _0x2c1135[_0xcaaa('0x8f')](_0x347652);}})[_0xcaaa('0x2b')](function(_0xed19ae){if(_0xed19ae){return _0xed19ae?{'count':_0x21904e,'rows':_0xed19ae}:null;}})[_0xcaaa('0x2b')](respondWithResult(_0x3c5096,null))[_0xcaaa('0x4f')](handleError(_0x3c5096,null));};
\ No newline at end of file
+var _0xa341=['index','CmList','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','findAll','rows','catch','show','params','includeAll','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','addDisposition','ListId','Disposition','getDispositions','findOne','hasOwnProperty','include','removeDispositions','ids','CmContact','tags','isArray','join','push','each','omit','success','dataValues','errors','message','Malformed\x20request\x20syntax','getContacts','CustomFields','cf_%d','raw','getContactsCsv','format','now','/tmp/list_%d_%s.csv','setHeader','Content-disposition','attachment;\x20filename=','list_%d_%s.csv','Content-type','text/csv','download','sequelize','transaction','CmCustomField','addCustomFields','Sequelize','TEXT','text','number','switch','BOOLEAN','defaultValue','queryInterface','addColumn','cm_contacts','cf_%s','getCustomFields','findAndCountAll','addAgents','spread','emit','userCmList:save','removeAgents','userCmList:remove','getAgents','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','path','to-csv','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','redis','defaults','localhost','socket.io-emitter','./cmList.socket','register','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','get','Lists','UserProfileResource','error','stack','name','send'];(function(_0x2cdd2c,_0x3bc26e){var _0x28d045=function(_0x4ea7a0){while(--_0x4ea7a0){_0x2cdd2c['push'](_0x2cdd2c['shift']());}};_0x28d045(++_0x3bc26e);}(_0xa341,0x18c));var _0x1a34=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xa341[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require(_0x1a34('0x0'));var emlformat=require(_0x1a34('0x1'));var rimraf=require(_0x1a34('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x1a34('0x3'));var rp=require(_0x1a34('0x4'));var moment=require('moment');var BPromise=require(_0x1a34('0x5'));var Mustache=require(_0x1a34('0x6'));var util=require('util');var path=require(_0x1a34('0x7'));var sox=require('sox');var csv=require(_0x1a34('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x1a34('0x9'));var squel=require(_0x1a34('0xa'));var crypto=require(_0x1a34('0xb'));var jsforce=require(_0x1a34('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x1a34('0x8'));var querystring=require(_0x1a34('0xd'));var Papa=require(_0x1a34('0xe'));var authService=require(_0x1a34('0xf'));var hardwareService=require(_0x1a34('0x10'));var Redis=require(_0x1a34('0x11'));var qs=require('../../components/parsers/qs');var logger=require(_0x1a34('0x12'))(_0x1a34('0x13'));var utils=require(_0x1a34('0x14'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x1a34('0x15')]=_[_0x1a34('0x16')](config[_0x1a34('0x15')],{'host':_0x1a34('0x17'),'port':0x18eb});var socket=require(_0x1a34('0x18'))(new Redis(config[_0x1a34('0x15')]));require(_0x1a34('0x19'))[_0x1a34('0x1a')](socket);function respondWithStatusCode(_0x2a4a1f,_0x2284fc){_0x2284fc=_0x2284fc||0xcc;return function(_0x374fa2){if(_0x374fa2){return _0x2a4a1f[_0x1a34('0x1b')](_0x2284fc);}return _0x2a4a1f[_0x1a34('0x1c')](_0x2284fc)[_0x1a34('0x1d')]();};}function respondWithResult(_0x25bf5c,_0x4f1213){_0x4f1213=_0x4f1213||0xc8;return function(_0x5b9d1b){if(_0x5b9d1b){return _0x25bf5c[_0x1a34('0x1c')](_0x4f1213)[_0x1a34('0x1e')](_0x5b9d1b);}};}function respondWithFilteredResult(_0x2f8e0b,_0x5daac9){return function(_0x143141){if(_0x143141){var _0xc4479c=_0x143141[_0x1a34('0x1f')],_0x53a873=_0x5daac9[_0x1a34('0x20')],_0x16b726=_0x5daac9[_0x1a34('0x20')]+_0x5daac9[_0x1a34('0x21')],_0x57ba7d;if(_0x16b726>=_0xc4479c){_0x16b726=_0xc4479c;_0x57ba7d=0xc8;}else{_0x57ba7d=0xce;}_0x2f8e0b[_0x1a34('0x1c')](_0x57ba7d);return _0x2f8e0b[_0x1a34('0x22')](_0x1a34('0x23'),_0x53a873+'-'+_0x16b726+'/'+_0xc4479c)['json'](_0x143141);}return null;};}function patchUpdates(_0x489a10){return function(_0x4c6a20){try{jsonpatch[_0x1a34('0x24')](_0x4c6a20,_0x489a10,!![]);}catch(_0x1dbcd3){return BPromise[_0x1a34('0x25')](_0x1dbcd3);}return _0x4c6a20['save']();};}function saveUpdates(_0xaaa2e,_0x4b8b4a){return function(_0x371ae7){if(_0x371ae7){return _0x371ae7[_0x1a34('0x26')](_0xaaa2e)[_0x1a34('0x27')](function(_0x7ef885){return _0x7ef885;});}return null;};}function removeEntity(_0xc1b2c5,_0x16cf4e){return function(_0x4bff42){if(_0x4bff42){return _0x4bff42[_0x1a34('0x28')]()['then'](function(){var _0x3ba022=_0x4bff42[_0x1a34('0x29')]({'plain':!![]});var _0x56f1be=_0x1a34('0x2a');return db[_0x1a34('0x2b')][_0x1a34('0x28')]({'where':{'type':_0x56f1be,'resourceId':_0x3ba022['id']}})[_0x1a34('0x27')](function(){return _0x4bff42;});})[_0x1a34('0x27')](function(){_0xc1b2c5[_0x1a34('0x1c')](0xcc)[_0x1a34('0x1d')]();});}};}function handleEntityNotFound(_0x1d46fc,_0x3d884e){return function(_0x4650a8){if(!_0x4650a8){_0x1d46fc[_0x1a34('0x1b')](0x194);}return _0x4650a8;};}function handleError(_0x385c77,_0x7f31bd){_0x7f31bd=_0x7f31bd||0x1f4;return function(_0x39e079){logger[_0x1a34('0x2c')](_0x39e079[_0x1a34('0x2d')]);if(_0x39e079[_0x1a34('0x2e')]){delete _0x39e079[_0x1a34('0x2e')];}_0x385c77[_0x1a34('0x1c')](_0x7f31bd)[_0x1a34('0x2f')](_0x39e079);};}exports[_0x1a34('0x30')]=function(_0x3513a9,_0x164351){var _0x3d6cca={},_0x13ab74={},_0x56de7e={'count':0x0,'rows':[]};var _0x24f163=db[_0x1a34('0x31')][_0x1a34('0x32')];_0x13ab74[_0x1a34('0x33')]=_['keys'](_0x24f163);_0x13ab74[_0x1a34('0x34')]=_[_0x1a34('0x35')](_0x3513a9[_0x1a34('0x34')]);_0x13ab74[_0x1a34('0x36')]=_[_0x1a34('0x37')](_0x13ab74['model'],_0x13ab74[_0x1a34('0x34')]);_0x3d6cca[_0x1a34('0x38')]=_[_0x1a34('0x37')](_0x13ab74[_0x1a34('0x33')],qs[_0x1a34('0x39')](_0x3513a9['query'][_0x1a34('0x39')]));_0x3d6cca['attributes']=_0x3d6cca[_0x1a34('0x38')][_0x1a34('0x3a')]?_0x3d6cca[_0x1a34('0x38')]:_0x13ab74[_0x1a34('0x33')];if(!_0x3513a9[_0x1a34('0x34')]['hasOwnProperty'](_0x1a34('0x3b'))){_0x3d6cca['limit']=qs[_0x1a34('0x21')](_0x3513a9[_0x1a34('0x34')]['limit']);_0x3d6cca[_0x1a34('0x20')]=qs[_0x1a34('0x20')](_0x3513a9['query'][_0x1a34('0x20')]);}_0x3d6cca[_0x1a34('0x3c')]=qs[_0x1a34('0x3d')](_0x3513a9[_0x1a34('0x34')]['sort']);_0x3d6cca[_0x1a34('0x3e')]=qs[_0x1a34('0x36')](_[_0x1a34('0x3f')](_0x3513a9[_0x1a34('0x34')],_0x13ab74['filters']));if(_0x3513a9[_0x1a34('0x34')][_0x1a34('0x40')]){_0x3d6cca['where']=_[_0x1a34('0x41')](_0x3d6cca[_0x1a34('0x3e')],{'$or':_[_0x1a34('0x42')](_0x24f163,function(_0x45de52){if(_0x45de52[_0x1a34('0x43')][_0x1a34('0x44')]!==_0x1a34('0x45')){var _0x1ce7cb={};_0x1ce7cb[_0x45de52[_0x1a34('0x46')]]={'$like':'%'+_0x3513a9[_0x1a34('0x34')][_0x1a34('0x40')]+'%'};return _0x1ce7cb;}})});}_0x3d6cca=_[_0x1a34('0x41')]({},_0x3d6cca,_0x3513a9[_0x1a34('0x47')]);var _0x32c0fa={'where':_0x3d6cca[_0x1a34('0x3e')]};return db[_0x1a34('0x31')][_0x1a34('0x1f')](_0x32c0fa)[_0x1a34('0x27')](function(_0x2467b5){_0x56de7e[_0x1a34('0x1f')]=_0x2467b5;if(_0x3513a9[_0x1a34('0x34')]['includeAll']){_0x3d6cca['include']=[{'all':!![]}];}return db['CmList'][_0x1a34('0x48')](_0x3d6cca);})[_0x1a34('0x27')](function(_0x80df5e){_0x56de7e[_0x1a34('0x49')]=_0x80df5e;return _0x56de7e;})[_0x1a34('0x27')](respondWithFilteredResult(_0x164351,_0x3d6cca))[_0x1a34('0x4a')](handleError(_0x164351,null));};exports[_0x1a34('0x4b')]=function(_0x3e9d02,_0x44720e){var _0x223948={'raw':![],'where':{'id':_0x3e9d02[_0x1a34('0x4c')]['id']}},_0x1054f1={};_0x1054f1[_0x1a34('0x33')]=_['keys'](db[_0x1a34('0x31')][_0x1a34('0x32')]);_0x1054f1['query']=_[_0x1a34('0x35')](_0x3e9d02[_0x1a34('0x34')]);_0x1054f1['filters']=_[_0x1a34('0x37')](_0x1054f1['model'],_0x1054f1[_0x1a34('0x34')]);_0x223948['attributes']=_[_0x1a34('0x37')](_0x1054f1['model'],qs['fields'](_0x3e9d02[_0x1a34('0x34')][_0x1a34('0x39')]));_0x223948[_0x1a34('0x38')]=_0x223948[_0x1a34('0x38')][_0x1a34('0x3a')]?_0x223948[_0x1a34('0x38')]:_0x1054f1[_0x1a34('0x33')];if(_0x3e9d02[_0x1a34('0x34')][_0x1a34('0x4d')]){_0x223948['include']=[{'all':!![]}];}_0x223948=_[_0x1a34('0x41')]({},_0x223948,_0x3e9d02[_0x1a34('0x47')]);return db['CmList'][_0x1a34('0x4e')](_0x223948)['then'](handleEntityNotFound(_0x44720e,null))[_0x1a34('0x27')](respondWithResult(_0x44720e,null))['catch'](handleError(_0x44720e,null));};exports[_0x1a34('0x4f')]=function(_0x5eb1e4,_0x2cbe9d){return db['CmList'][_0x1a34('0x4f')](_0x5eb1e4[_0x1a34('0x50')],{})[_0x1a34('0x27')](function(_0xa9a66c){var _0x402cd1=_0x5eb1e4[_0x1a34('0x51')][_0x1a34('0x29')]({'plain':!![]});if(!_0x402cd1)throw new Error(_0x1a34('0x52'));if(_0x402cd1[_0x1a34('0x53')]===_0x1a34('0x51')){var _0x4b3a83=_0xa9a66c[_0x1a34('0x29')]({'plain':!![]});var _0x209624=_0x1a34('0x2a');return db[_0x1a34('0x54')][_0x1a34('0x4e')]({'where':{'name':_0x209624,'userProfileId':_0x402cd1[_0x1a34('0x55')]},'raw':!![]})[_0x1a34('0x27')](function(_0x4a3ac8){if(_0x4a3ac8&&_0x4a3ac8[_0x1a34('0x56')]===0x0){return db[_0x1a34('0x2b')][_0x1a34('0x4f')]({'name':_0x4b3a83[_0x1a34('0x2e')],'resourceId':_0x4b3a83['id'],'type':_0x4a3ac8[_0x1a34('0x2e')],'sectionId':_0x4a3ac8['id']},{})[_0x1a34('0x27')](function(){return _0xa9a66c;});}else{return _0xa9a66c;}})[_0x1a34('0x4a')](function(_0x41e9fd){logger[_0x1a34('0x2c')](_0x1a34('0x57'),_0x41e9fd);throw _0x41e9fd;});}return _0xa9a66c;})[_0x1a34('0x27')](respondWithResult(_0x2cbe9d,0xc9))[_0x1a34('0x4a')](handleError(_0x2cbe9d,null));};exports['update']=function(_0x54abb3,_0x38785b){if(_0x54abb3[_0x1a34('0x50')]['id']){delete _0x54abb3[_0x1a34('0x50')]['id'];}return db[_0x1a34('0x31')][_0x1a34('0x4e')]({'where':{'id':_0x54abb3[_0x1a34('0x4c')]['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x38785b,null))[_0x1a34('0x27')](saveUpdates(_0x54abb3[_0x1a34('0x50')],null))['then'](respondWithResult(_0x38785b,null))[_0x1a34('0x4a')](handleError(_0x38785b,null));};exports[_0x1a34('0x28')]=function(_0x24827f,_0x447177){return db['CmList'][_0x1a34('0x4e')]({'where':{'id':_0x24827f['params']['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x447177,null))[_0x1a34('0x27')](removeEntity(_0x447177,null))[_0x1a34('0x4a')](handleError(_0x447177,null));};exports['describe']=function(_0x25d90b,_0x384a1a){return db['CmList']['describe']()[_0x1a34('0x27')](respondWithResult(_0x384a1a,null))[_0x1a34('0x4a')](handleError(_0x384a1a,null));};exports[_0x1a34('0x58')]=function(_0x367386,_0x5a2a14,_0x4bef60){if(_0x367386[_0x1a34('0x50')]['id']){delete _0x367386['body']['id'];}return db[_0x1a34('0x31')]['find']({'where':{'id':_0x367386[_0x1a34('0x4c')]['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x5a2a14,null))[_0x1a34('0x27')](function(_0xdd254f){if(_0xdd254f){_0x367386[_0x1a34('0x50')][_0x1a34('0x59')]=_0xdd254f['id'];return db[_0x1a34('0x5a')]['create'](_0x367386[_0x1a34('0x50')]);}})[_0x1a34('0x27')](respondWithResult(_0x5a2a14,null))['catch'](handleError(_0x5a2a14,null));};exports[_0x1a34('0x5b')]=function(_0x3ea685,_0x18796e,_0x357a09){var _0x3adea3={'raw':![],'where':{}};var _0x3aac49={};var _0x19c4d5={'count':0x0,'rows':[]};return db[_0x1a34('0x31')][_0x1a34('0x5c')]({'where':{'id':_0x3ea685[_0x1a34('0x4c')]['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x18796e,null))[_0x1a34('0x27')](function(_0x4b4893){if(_0x4b4893){_0x3aac49[_0x1a34('0x33')]=_[_0x1a34('0x35')](db[_0x1a34('0x5a')]['rawAttributes']);_0x3aac49[_0x1a34('0x34')]=_['keys'](_0x3ea685[_0x1a34('0x34')]);_0x3aac49[_0x1a34('0x36')]=_[_0x1a34('0x37')](_0x3aac49['model'],_0x3aac49[_0x1a34('0x34')]);_0x3adea3[_0x1a34('0x38')]=_[_0x1a34('0x37')](_0x3aac49[_0x1a34('0x33')],qs[_0x1a34('0x39')](_0x3ea685['query']['fields']));_0x3adea3['attributes']=_0x3adea3[_0x1a34('0x38')][_0x1a34('0x3a')]?_0x3adea3[_0x1a34('0x38')]:_0x3aac49[_0x1a34('0x33')];if(!_0x3ea685['query'][_0x1a34('0x5d')](_0x1a34('0x3b'))){_0x3adea3[_0x1a34('0x21')]=qs[_0x1a34('0x21')](_0x3ea685['query'][_0x1a34('0x21')]);_0x3adea3['offset']=qs[_0x1a34('0x20')](_0x3ea685[_0x1a34('0x34')]['offset']);}_0x3adea3[_0x1a34('0x3c')]=qs[_0x1a34('0x3d')](_0x3ea685['query'][_0x1a34('0x3d')]);_0x3adea3[_0x1a34('0x3e')]=qs[_0x1a34('0x36')](_['pick'](_0x3ea685[_0x1a34('0x34')],_0x3aac49['filters']));_0x3adea3['where'][_0x1a34('0x59')]=_0x4b4893['id'];if(_0x3ea685[_0x1a34('0x34')][_0x1a34('0x40')]){_0x3adea3[_0x1a34('0x3e')]=_[_0x1a34('0x41')](_0x3adea3['where'],{'$or':_[_0x1a34('0x42')](_0x3adea3[_0x1a34('0x38')],function(_0x3cedfd){var _0x343efc={};_0x343efc[_0x3cedfd]={'$like':'%'+_0x3ea685[_0x1a34('0x34')][_0x1a34('0x40')]+'%'};return _0x343efc;})});}_0x3adea3=_[_0x1a34('0x41')]({},_0x3adea3,_0x3ea685['options']);return db[_0x1a34('0x5a')]['count']({'where':_0x3adea3[_0x1a34('0x3e')]})[_0x1a34('0x27')](function(_0x22741c){_0x19c4d5['count']=_0x22741c;if(_0x3ea685[_0x1a34('0x34')][_0x1a34('0x4d')]){_0x3adea3[_0x1a34('0x5e')]=[{'all':!![]}];}return db[_0x1a34('0x5a')][_0x1a34('0x48')](_0x3adea3);})[_0x1a34('0x27')](function(_0x4b2b35){_0x19c4d5[_0x1a34('0x49')]=_0x4b2b35;return _0x19c4d5;});}})[_0x1a34('0x27')](respondWithFilteredResult(_0x18796e,_0x3adea3))[_0x1a34('0x4a')](handleError(_0x18796e,null));};exports[_0x1a34('0x5f')]=function(_0x17b90f,_0xe38e50,_0x3e765c){var _0x268623;return db[_0x1a34('0x31')][_0x1a34('0x4e')]({'where':{'id':_0x17b90f[_0x1a34('0x4c')]['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0xe38e50,null))[_0x1a34('0x27')](function(_0x3441e4){if(_0x3441e4){return _0x3441e4[_0x1a34('0x5f')](_0x17b90f[_0x1a34('0x34')][_0x1a34('0x60')]);}})[_0x1a34('0x27')](respondWithStatusCode(_0xe38e50,null))[_0x1a34('0x4a')](handleError(_0xe38e50,null));};exports['addContacts']=function(_0x3ddcbb,_0x5dce06,_0x2801ad){return db['CmList'][_0x1a34('0x4e')]({'where':{'id':_0x3ddcbb['params']['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x5dce06,null))[_0x1a34('0x27')](function(_0x4a13cc){if(_0x4a13cc){var _0x459e35=[];var _0x235993={'success':[],'errors':[]};return db[_0x1a34('0x61')]['describe']()['then'](function(_0x378d98){if(_0x3ddcbb[_0x1a34('0x50')][_0x1a34('0x62')]&&_[_0x1a34('0x63')](_0x3ddcbb[_0x1a34('0x50')][_0x1a34('0x62')])){if(_0x3ddcbb[_0x1a34('0x50')][_0x1a34('0x62')][_0x1a34('0x3a')]){_0x3ddcbb[_0x1a34('0x50')]['tags']=_0x3ddcbb[_0x1a34('0x50')]['tags'][_0x1a34('0x64')](';')+';';}else{_0x3ddcbb[_0x1a34('0x50')][_0x1a34('0x62')]=null;}}else{_0x3ddcbb[_0x1a34('0x50')][_0x1a34('0x62')]=null;}if(_0x3ddcbb['body']&&_[_0x1a34('0x63')](_0x3ddcbb[_0x1a34('0x50')])){for(var _0x37639f=0x0;_0x37639f<_0x3ddcbb[_0x1a34('0x50')][_0x1a34('0x3a')];_0x37639f+=0x1){_0x3ddcbb[_0x1a34('0x50')][_0x37639f][_0x1a34('0x59')]=_0x3ddcbb[_0x1a34('0x4c')]['id'];_0x459e35[_0x1a34('0x65')](_0x3ddcbb[_0x1a34('0x50')][_0x37639f]);}return BPromise[_0x1a34('0x66')](_0x459e35,function(_0x3f6549){return db[_0x1a34('0x61')]['create'](_[_0x1a34('0x67')](_0x3f6549,[_0x1a34('0x60'),'id'])||{},{'fields':_[_0x1a34('0x35')](_0x378d98),'raw':!![]})[_0x1a34('0x27')](function(_0x30935a){_0x235993[_0x1a34('0x68')][_0x1a34('0x65')](_0x30935a[_0x1a34('0x69')]);})['catch'](function(_0x536d17){_0x235993[_0x1a34('0x6a')][_0x1a34('0x65')]({'data':_0x3f6549,'error':_0x536d17[_0x1a34('0x6b')]});});})[_0x1a34('0x27')](function(_0x44b31c){return _0x235993;})[_0x1a34('0x4a')](function(_0x1336fe){return _0x1336fe;});}else{_0x5dce06[_0x1a34('0x1c')](0x190)[_0x1a34('0x1e')]({'message':_0x1a34('0x6c')});}});}})[_0x1a34('0x27')](respondWithResult(_0x5dce06,null))[_0x1a34('0x4a')](handleError(_0x5dce06,null));};exports[_0x1a34('0x6d')]=function(_0x5a5ddb,_0x4b0bb8,_0x3e12e9){var _0x971918;return db[_0x1a34('0x31')][_0x1a34('0x4e')]({'where':{'id':_0x5a5ddb[_0x1a34('0x4c')]['id']},'include':[{'model':db['CmCustomField'],'as':_0x1a34('0x6e')}]})['then'](handleEntityNotFound(_0x4b0bb8,null))['then'](function(_0x51f37e){if(_0x51f37e){_0x971918=_0x51f37e;return db[_0x1a34('0x61')]['rawAttributes'];}})[_0x1a34('0x27')](function(_0xa2958c){if(_0xa2958c){var _0x2b1d2d={};var _0x481483={};_0x481483[_0x1a34('0x33')]=_['concat'](_[_0x1a34('0x35')](_0xa2958c),_['map'](_0x971918[_0x1a34('0x6e')],function(_0x1a636a){return util['format'](_0x1a34('0x6f'),_0x1a636a['id']);}));_0x481483[_0x1a34('0x34')]=_[_0x1a34('0x35')](_0x5a5ddb[_0x1a34('0x34')]);_0x481483['filters']=_[_0x1a34('0x37')](_0x481483[_0x1a34('0x33')],_0x481483[_0x1a34('0x34')]);_0x2b1d2d[_0x1a34('0x38')]=_[_0x1a34('0x37')](_0x481483[_0x1a34('0x33')],qs['fields'](_0x5a5ddb[_0x1a34('0x34')]['fields']));_0x2b1d2d[_0x1a34('0x38')]=_0x2b1d2d[_0x1a34('0x38')][_0x1a34('0x3a')]?_0x2b1d2d[_0x1a34('0x38')]:_0x481483[_0x1a34('0x33')];if(!_0x5a5ddb['query'][_0x1a34('0x5d')](_0x1a34('0x3b'))){_0x2b1d2d[_0x1a34('0x21')]=qs['limit'](_0x5a5ddb[_0x1a34('0x34')]['limit']);_0x2b1d2d[_0x1a34('0x20')]=qs[_0x1a34('0x20')](_0x5a5ddb[_0x1a34('0x34')][_0x1a34('0x20')]);}_0x2b1d2d['order']=qs[_0x1a34('0x3d')](_0x5a5ddb['query']['sort']);_0x2b1d2d[_0x1a34('0x3e')]=qs[_0x1a34('0x36')](_['pick'](_0x5a5ddb[_0x1a34('0x34')],_0x481483[_0x1a34('0x36')]));_0x2b1d2d[_0x1a34('0x70')]=!![];if(_0x5a5ddb[_0x1a34('0x34')][_0x1a34('0x40')]){_0x2b1d2d[_0x1a34('0x3e')]=_['merge'](_0x2b1d2d[_0x1a34('0x3e')],{'$or':_[_0x1a34('0x42')](_0x2b1d2d[_0x1a34('0x38')],function(_0x5bbf1c){var _0x59f761={};_0x59f761[_0x5bbf1c]={'$like':'%'+_0x5a5ddb['query']['filter']+'%'};return _0x59f761;})});}_0x2b1d2d=_[_0x1a34('0x41')]({},_0x2b1d2d,_0x5a5ddb[_0x1a34('0x47')]);return _0x971918[_0x1a34('0x6d')](_0x2b1d2d);}})[_0x1a34('0x27')](respondWithResult(_0x4b0bb8,null))[_0x1a34('0x4a')](handleError(_0x4b0bb8,null));};exports[_0x1a34('0x71')]=function(_0xe9d963,_0x258db3,_0x3e2548){var _0x3367b9;return db[_0x1a34('0x31')][_0x1a34('0x4e')]({'where':{'id':_0xe9d963[_0x1a34('0x4c')]['id']},'include':[{'model':db['CmCustomField'],'as':_0x1a34('0x6e')}]})[_0x1a34('0x27')](handleEntityNotFound(_0x258db3,null))['then'](function(_0x34b093){if(_0x34b093){_0x3367b9=_0x34b093;return db[_0x1a34('0x61')][_0x1a34('0x32')];}})[_0x1a34('0x27')](function(_0x3482f9){if(_0x3482f9){var _0x59e91b={};var _0x1d6806={};_0x1d6806[_0x1a34('0x33')]=_['concat'](_[_0x1a34('0x35')](_0x3482f9),_[_0x1a34('0x42')](_0x3367b9['CustomFields'],function(_0x404867){return util[_0x1a34('0x72')](_0x1a34('0x6f'),_0x404867['id']);}));_0x1d6806['query']=_[_0x1a34('0x35')](_0xe9d963[_0x1a34('0x34')]);_0x1d6806[_0x1a34('0x36')]=_[_0x1a34('0x37')](_0x1d6806[_0x1a34('0x33')],_0x1d6806[_0x1a34('0x34')]);_0x59e91b[_0x1a34('0x38')]=_[_0x1a34('0x37')](_0x1d6806[_0x1a34('0x33')],qs['fields'](_0xe9d963['query'][_0x1a34('0x39')]));_0x59e91b[_0x1a34('0x38')]=_0x59e91b[_0x1a34('0x38')][_0x1a34('0x3a')]?_0x59e91b[_0x1a34('0x38')]:_0x1d6806[_0x1a34('0x33')];if(!_0xe9d963['query'][_0x1a34('0x5d')](_0x1a34('0x3b'))){_0x59e91b[_0x1a34('0x21')]=qs['limit'](_0xe9d963[_0x1a34('0x34')][_0x1a34('0x21')]);_0x59e91b[_0x1a34('0x20')]=qs['offset'](_0xe9d963[_0x1a34('0x34')][_0x1a34('0x20')]);}_0x59e91b[_0x1a34('0x3c')]=qs[_0x1a34('0x3d')](_0xe9d963[_0x1a34('0x34')][_0x1a34('0x3d')]);_0x59e91b['where']=qs[_0x1a34('0x36')](_[_0x1a34('0x3f')](_0xe9d963[_0x1a34('0x34')],_0x1d6806['filters']));_0x59e91b[_0x1a34('0x70')]=!![];if(_0xe9d963[_0x1a34('0x34')][_0x1a34('0x40')]){_0x59e91b[_0x1a34('0x3e')]=_['merge'](_0x59e91b['where'],{'$or':_[_0x1a34('0x42')](_0x59e91b[_0x1a34('0x38')],function(_0x3521a5){var _0xdcc4f1={};_0xdcc4f1[_0x3521a5]={'$like':'%'+_0xe9d963[_0x1a34('0x34')][_0x1a34('0x40')]+'%'};return _0xdcc4f1;})});}_0x59e91b=_[_0x1a34('0x41')]({},_0x59e91b,_0xe9d963[_0x1a34('0x47')]);return _0x3367b9[_0x1a34('0x6d')](_0x59e91b);}})[_0x1a34('0x27')](function(_0xe3959){if(!_['isEmpty'](_0xe3959)){var _0x1037e4=toCsv(_0xe3959);var _0xa9d5=Date[_0x1a34('0x73')]();fs['writeFileSync'](util[_0x1a34('0x72')](_0x1a34('0x74'),_0x3367b9['id'],_0xa9d5),_0x1037e4);_0x258db3[_0x1a34('0x75')](_0x1a34('0x76'),_0x1a34('0x77')+util[_0x1a34('0x72')](_0x1a34('0x78'),_0x3367b9['id'],_0xa9d5));_0x258db3['setHeader'](_0x1a34('0x79'),_0x1a34('0x7a'));return _0x258db3[_0x1a34('0x7b')](util[_0x1a34('0x72')]('/tmp/list_%d_%s.csv',_0x3367b9['id'],_0xa9d5));}else{return _0x258db3[_0x1a34('0x1b')](0xcc);}})[_0x1a34('0x4a')](handleError(_0x258db3,null));};exports['addCustomField']=function(_0x491380,_0x5cb05c,_0x321a51){var _0x54ae38;delete _0x491380[_0x1a34('0x50')]['id'];return db[_0x1a34('0x31')][_0x1a34('0x5c')]({'where':{'id':_0x491380[_0x1a34('0x4c')]['id']}})['then'](handleEntityNotFound(_0x5cb05c,null))[_0x1a34('0x27')](function(_0x2d1f90){if(_0x2d1f90){return db[_0x1a34('0x7c')][_0x1a34('0x7d')](function(_0x4cbaef){return db[_0x1a34('0x7e')]['create'](_0x491380[_0x1a34('0x50')],{'transaction':_0x4cbaef})['then'](function(_0x1e97a2){_0x54ae38=_0x1e97a2;return _0x2d1f90[_0x1a34('0x7f')](_0x1e97a2,{'transaction':_0x4cbaef});})[_0x1a34('0x27')](function(){var _0x3e4a3e={'type':db[_0x1a34('0x80')][_0x1a34('0x81')],'transaction':_0x4cbaef};switch(_0x491380[_0x1a34('0x50')][_0x1a34('0x43')]){case _0x1a34('0x82'):_0x3e4a3e[_0x1a34('0x43')]=db[_0x1a34('0x80')][_0x1a34('0x81')];break;case _0x1a34('0x83'):_0x3e4a3e['type']=db['Sequelize']['INTEGER'];break;case _0x1a34('0x84'):_0x3e4a3e['type']=db[_0x1a34('0x80')][_0x1a34('0x85')];_0x3e4a3e[_0x1a34('0x86')]=![];break;default:}return db[_0x1a34('0x7c')][_0x1a34('0x87')][_0x1a34('0x88')](_0x1a34('0x89'),util['format'](_0x1a34('0x8a'),_0x54ae38['id']),_0x3e4a3e);})[_0x1a34('0x27')](function(){return _0x54ae38;});});}})[_0x1a34('0x27')](respondWithResult(_0x5cb05c,null))[_0x1a34('0x4a')](handleError(_0x5cb05c,null));};exports[_0x1a34('0x8b')]=function(_0x49d67e,_0x287fab,_0x59963a){var _0x932e70={};var _0x4a135a={};var _0x3fc934;var _0x40203;return db[_0x1a34('0x31')]['findOne']({'where':{'id':_0x49d67e[_0x1a34('0x4c')]['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x287fab,null))[_0x1a34('0x27')](function(_0xec5d3a){if(_0xec5d3a){_0x3fc934=_0xec5d3a;_0x4a135a[_0x1a34('0x33')]=_[_0x1a34('0x35')](db[_0x1a34('0x7e')][_0x1a34('0x32')]);_0x4a135a[_0x1a34('0x34')]=_[_0x1a34('0x35')](_0x49d67e[_0x1a34('0x34')]);_0x4a135a['filters']=_['intersection'](_0x4a135a[_0x1a34('0x33')],_0x4a135a['query']);_0x932e70[_0x1a34('0x38')]=_[_0x1a34('0x37')](_0x4a135a['model'],qs[_0x1a34('0x39')](_0x49d67e[_0x1a34('0x34')][_0x1a34('0x39')]));_0x932e70[_0x1a34('0x38')]=_0x932e70[_0x1a34('0x38')][_0x1a34('0x3a')]?_0x932e70[_0x1a34('0x38')]:_0x4a135a[_0x1a34('0x33')];_0x932e70[_0x1a34('0x3c')]=qs[_0x1a34('0x3d')](_0x49d67e['query'][_0x1a34('0x3d')]);_0x932e70[_0x1a34('0x3e')]=qs[_0x1a34('0x36')](_[_0x1a34('0x3f')](_0x49d67e[_0x1a34('0x34')],_0x4a135a['filters']));_0x932e70[_0x1a34('0x3e')]=_[_0x1a34('0x41')](_0x932e70[_0x1a34('0x3e')],{'$or':[{'ListId':_0xec5d3a['id']},{'ListId':null}]});if(_0x49d67e[_0x1a34('0x34')]['filter']){_0x932e70['where']=_['merge'](_0x932e70[_0x1a34('0x3e')],{'$or':_[_0x1a34('0x42')](_0x932e70[_0x1a34('0x38')],function(_0x3628ae){var _0x3efbef={};_0x3efbef[_0x3628ae]={'$like':'%'+_0x49d67e[_0x1a34('0x34')]['filter']+'%'};return _0x3efbef;})});}_0x932e70=_[_0x1a34('0x41')]({},_0x932e70,_0x49d67e['options']);return db[_0x1a34('0x7e')][_0x1a34('0x8c')](_0x932e70);}})[_0x1a34('0x27')](respondWithResult(_0x287fab,null))[_0x1a34('0x4a')](handleError(_0x287fab,null));};exports[_0x1a34('0x8d')]=function(_0x49307b,_0x24f062,_0x31bd30){return db[_0x1a34('0x31')]['find']({'where':{'id':_0x49307b[_0x1a34('0x4c')]['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x24f062,null))['then'](function(_0x2fed02){if(_0x2fed02){return _0x2fed02['addAgents'](_0x49307b[_0x1a34('0x50')]['ids'],_[_0x1a34('0x67')](_0x49307b[_0x1a34('0x50')],[_0x1a34('0x60'),'id'])||{})[_0x1a34('0x8e')](function(_0x973a9e){for(var _0x39123f=0x0;_0x39123f<_0x49307b['body']['ids'][_0x1a34('0x3a')];_0x39123f+=0x1){socket[_0x1a34('0x8f')](_0x1a34('0x90'),{'UserId':_0x49307b[_0x1a34('0x50')]['ids'][_0x39123f],'CmListId':_0x49307b[_0x1a34('0x4c')]['id']});}return _0x973a9e;});}})['then'](respondWithResult(_0x24f062,null))['catch'](handleError(_0x24f062,null));};exports['removeAgents']=function(_0x3ce495,_0x33f9df,_0x24286a){var _0x4ad729;return db[_0x1a34('0x31')][_0x1a34('0x4e')]({'where':{'id':_0x3ce495[_0x1a34('0x4c')]['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x33f9df,null))['then'](function(_0x37a27f){if(_0x37a27f){return _0x37a27f[_0x1a34('0x91')](_0x3ce495['query'][_0x1a34('0x60')])['then'](function(_0x374dff){if(_[_0x1a34('0x63')](_0x3ce495[_0x1a34('0x34')]['ids'])){for(var _0x3f4102=0x0;_0x3f4102<_0x3ce495[_0x1a34('0x34')][_0x1a34('0x60')][_0x1a34('0x3a')];_0x3f4102+=0x1){socket[_0x1a34('0x8f')](_0x1a34('0x92'),{'UserId':_0x3ce495[_0x1a34('0x34')][_0x1a34('0x60')][_0x3f4102],'CmListId':_0x3ce495[_0x1a34('0x4c')]['id']});}}else{socket[_0x1a34('0x8f')]('userCmList:remove',{'UserId':_0x3ce495[_0x1a34('0x34')]['ids'],'CmListId':_0x3ce495['params']['id']});}});}})[_0x1a34('0x27')](respondWithStatusCode(_0x33f9df,null))[_0x1a34('0x4a')](handleError(_0x33f9df,null));};exports['getAgents']=function(_0x2d791d,_0x2b6529,_0x1f799d){var _0x37533f={};var _0x2fab89={};var _0x249ea7;var _0x263ff2;return db['CmList']['findOne']({'where':{'id':_0x2d791d[_0x1a34('0x4c')]['id']}})[_0x1a34('0x27')](handleEntityNotFound(_0x2b6529,null))['then'](function(_0x3a71b6){if(_0x3a71b6){_0x249ea7=_0x3a71b6;_0x2fab89[_0x1a34('0x33')]=_[_0x1a34('0x35')](db['User'][_0x1a34('0x32')]);_0x2fab89[_0x1a34('0x34')]=_[_0x1a34('0x35')](_0x2d791d[_0x1a34('0x34')]);_0x2fab89[_0x1a34('0x36')]=_[_0x1a34('0x37')](_0x2fab89[_0x1a34('0x33')],_0x2fab89['query']);_0x37533f[_0x1a34('0x38')]=_['intersection'](_0x2fab89['model'],qs['fields'](_0x2d791d[_0x1a34('0x34')][_0x1a34('0x39')]));_0x37533f[_0x1a34('0x38')]=_0x37533f['attributes']['length']?_0x37533f[_0x1a34('0x38')]:_0x2fab89[_0x1a34('0x33')];_0x37533f[_0x1a34('0x3c')]=qs['sort'](_0x2d791d[_0x1a34('0x34')][_0x1a34('0x3d')]);_0x37533f[_0x1a34('0x3e')]=qs[_0x1a34('0x36')](_['pick'](_0x2d791d['query'],_0x2fab89['filters']));if(_0x2d791d[_0x1a34('0x34')][_0x1a34('0x40')]){_0x37533f[_0x1a34('0x3e')]=_[_0x1a34('0x41')](_0x37533f[_0x1a34('0x3e')],{'$or':_[_0x1a34('0x42')](_0x37533f[_0x1a34('0x38')],function(_0x313aeb){var _0x58b3ec={};_0x58b3ec[_0x313aeb]={'$like':'%'+_0x2d791d[_0x1a34('0x34')][_0x1a34('0x40')]+'%'};return _0x58b3ec;})});}_0x37533f=_[_0x1a34('0x41')]({},_0x37533f,_0x2d791d[_0x1a34('0x47')]);return _0x249ea7[_0x1a34('0x93')](_0x37533f);}})[_0x1a34('0x27')](function(_0x3a3290){if(_0x3a3290){_0x263ff2=_0x3a3290[_0x1a34('0x3a')];if(!_0x2d791d[_0x1a34('0x34')][_0x1a34('0x5d')]('nolimit')){_0x37533f[_0x1a34('0x21')]=qs[_0x1a34('0x21')](_0x2d791d[_0x1a34('0x34')][_0x1a34('0x21')]);_0x37533f[_0x1a34('0x20')]=qs[_0x1a34('0x20')](_0x2d791d[_0x1a34('0x34')]['offset']);}return _0x249ea7[_0x1a34('0x93')](_0x37533f);}})[_0x1a34('0x27')](function(_0xe57ab4){if(_0xe57ab4){return _0xe57ab4?{'count':_0x263ff2,'rows':_0xe57ab4}:null;}})[_0x1a34('0x27')](respondWithResult(_0x2b6529,null))['catch'](handleError(_0x2b6529,null));};
\ No newline at end of file
index 95a0cc6..d122512 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x648b=['events','../../mysqldb','CmList','update','remove','emit','hasOwnProperty'];(function(_0x56e8b6,_0x234b42){var _0x3ae544=function(_0x5c292a){while(--_0x5c292a){_0x56e8b6['push'](_0x56e8b6['shift']());}};_0x3ae544(++_0x234b42);}(_0x648b,0x93));var _0xb648=function(_0x288ee1,_0x532fe1){_0x288ee1=_0x288ee1-0x0;var _0x42b11e=_0x648b[_0x288ee1];return _0x42b11e;};'use strict';var EventEmitter=require(_0xb648('0x0'));var CmList=require(_0xb648('0x1'))['db'][_0xb648('0x2')];var CmListEvents=new EventEmitter();CmListEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0xb648('0x3'),'afterDestroy':_0xb648('0x4')};function emitEvent(_0x488192){return function(_0x5af258,_0x7ecb11,_0x4a2225){CmListEvents[_0xb648('0x5')](_0x488192+':'+_0x5af258['id'],_0x5af258);CmListEvents[_0xb648('0x5')](_0x488192,_0x5af258);_0x4a2225(null);};}for(var e in events){if(events[_0xb648('0x6')](e)){var event=events[e];CmList['hook'](e,emitEvent(event));}}module['exports']=CmListEvents;
\ No newline at end of file
+var _0xfbef=['hasOwnProperty','hook','exports','events','../../mysqldb','CmList','setMaxListeners','save','update','remove','emit'];(function(_0xc68e23,_0x501ebb){var _0x239ebd=function(_0x4c86a5){while(--_0x4c86a5){_0xc68e23['push'](_0xc68e23['shift']());}};_0x239ebd(++_0x501ebb);}(_0xfbef,0x1d1));var _0xffbe=function(_0x1f8293,_0x3bb418){_0x1f8293=_0x1f8293-0x0;var _0x40613f=_0xfbef[_0x1f8293];return _0x40613f;};'use strict';var EventEmitter=require(_0xffbe('0x0'));var CmList=require(_0xffbe('0x1'))['db'][_0xffbe('0x2')];var CmListEvents=new EventEmitter();CmListEvents[_0xffbe('0x3')](0x0);var events={'afterCreate':_0xffbe('0x4'),'afterUpdate':_0xffbe('0x5'),'afterDestroy':_0xffbe('0x6')};function emitEvent(_0x16a450){return function(_0x20c04f,_0x5496f3,_0x2f292e){CmListEvents[_0xffbe('0x7')](_0x16a450+':'+_0x20c04f['id'],_0x20c04f);CmListEvents[_0xffbe('0x7')](_0x16a450,_0x20c04f);_0x2f292e(null);};}for(var e in events){if(events[_0xffbe('0x8')](e)){var event=events[e];CmList[_0xffbe('0x9')](e,emitEvent(event));}}module[_0xffbe('0xa')]=CmListEvents;
\ No newline at end of file
index 5725800..b6a00c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb9b=['moment','bluebird','request-promise','./cmList.attributes','exports','CmList','cm_lists','lodash','../../config/logger','api'];(function(_0x580576,_0x2f107d){var _0x3f55a0=function(_0x2e180b){while(--_0x2e180b){_0x580576['push'](_0x580576['shift']());}};_0x3f55a0(++_0x2f107d);}(_0xbb9b,0xd9));var _0xbbb9=function(_0x5d7299,_0x544bc0){_0x5d7299=_0x5d7299-0x0;var _0x3125ea=_0xbb9b[_0x5d7299];return _0x3125ea;};'use strict';var _=require(_0xbbb9('0x0'));var util=require('util');var logger=require(_0xbbb9('0x1'))(_0xbbb9('0x2'));var moment=require(_0xbbb9('0x3'));var BPromise=require(_0xbbb9('0x4'));var rp=require(_0xbbb9('0x5'));var attributes=require(_0xbbb9('0x6'));module[_0xbbb9('0x7')]=function(_0x9da74b,_0x2dd929){return _0x9da74b['define'](_0xbbb9('0x8'),attributes,{'tableName':_0xbbb9('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7031=['api','moment','request-promise','exports','define','cm_lists','lodash','util','../../config/logger'];(function(_0x500419,_0x549162){var _0x241c1a=function(_0x3bea1a){while(--_0x3bea1a){_0x500419['push'](_0x500419['shift']());}};_0x241c1a(++_0x549162);}(_0x7031,0x138));var _0x1703=function(_0x3566ed,_0x44a527){_0x3566ed=_0x3566ed-0x0;var _0x28e7ad=_0x7031[_0x3566ed];return _0x28e7ad;};'use strict';var _=require(_0x1703('0x0'));var util=require(_0x1703('0x1'));var logger=require(_0x1703('0x2'))(_0x1703('0x3'));var moment=require(_0x1703('0x4'));var BPromise=require('bluebird');var rp=require(_0x1703('0x5'));var attributes=require('./cmList.attributes');module[_0x1703('0x6')]=function(_0x6758cf,_0x3b80f9){return _0x6758cf[_0x1703('0x7')]('CmList',attributes,{'tableName':_0x1703('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b54d5f1..d72f587 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3671=['then','CmList,\x20%s,\x20%s','request\x20sent','debug','CmList,\x20%s,\x20%s,\x20%s','stringify','code','error','message','info','result','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','request'];(function(_0x477bd1,_0x43589b){var _0x1186c2=function(_0x364b56){while(--_0x364b56){_0x477bd1['push'](_0x477bd1['shift']());}};_0x1186c2(++_0x43589b);}(_0x3671,0x1bb));var _0x1367=function(_0x55e9e9,_0x1afc74){_0x55e9e9=_0x55e9e9-0x0;var _0x39cb0c=_0x3671[_0x55e9e9];return _0x39cb0c;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x1367('0x0'));var BPromise=require(_0x1367('0x1'));var rs=require(_0x1367('0x2'));var fs=require('fs');var Redis=require(_0x1367('0x3'));var db=require(_0x1367('0x4'))['db'];var utils=require(_0x1367('0x5'));var logger=require(_0x1367('0x6'))('rpc');var config=require(_0x1367('0x7'));var jayson=require(_0x1367('0x8'));var client=jayson[_0x1367('0x9')][_0x1367('0xa')]({'port':0x232a});config[_0x1367('0xb')]=_[_0x1367('0xc')](config[_0x1367('0xb')],{'host':_0x1367('0xd'),'port':0x18eb});var socket=require(_0x1367('0xe'))(new Redis(config['redis']));require('./cmList.socket')['register'](socket);function respondWithRpcPromise(_0x228b44,_0x59caac,_0x34f6f4){return new BPromise(function(_0x46a9e0,_0x406500){return client[_0x1367('0xf')](_0x228b44,_0x34f6f4)[_0x1367('0x10')](function(_0x1da286){logger['info'](_0x1367('0x11'),_0x59caac,_0x1367('0x12'));logger[_0x1367('0x13')](_0x1367('0x14'),_0x59caac,_0x1367('0x12'),JSON[_0x1367('0x15')](_0x1da286));if(_0x1da286['error']){if(_0x1da286['error'][_0x1367('0x16')]===0x1f4){logger[_0x1367('0x17')](_0x1367('0x11'),_0x59caac,_0x1da286[_0x1367('0x17')]['message']);return _0x406500(_0x1da286[_0x1367('0x17')][_0x1367('0x18')]);}logger[_0x1367('0x17')]('CmList,\x20%s,\x20%s',_0x59caac,_0x1da286['error']['message']);return _0x46a9e0(_0x1da286[_0x1367('0x17')]['message']);}else{logger[_0x1367('0x19')](_0x1367('0x11'),_0x59caac,_0x1367('0x12'));_0x46a9e0(_0x1da286[_0x1367('0x1a')][_0x1367('0x18')]);}})['catch'](function(_0x23d1cd){logger[_0x1367('0x17')](_0x1367('0x11'),_0x59caac,_0x23d1cd);_0x406500(_0x23d1cd);});});}
\ No newline at end of file
+var _0xc643=['then','info','CmList,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','redis','defaults','localhost','socket.io-emitter','register','request'];(function(_0x19e35c,_0x29cd1e){var _0x3e1fe8=function(_0x17258b){while(--_0x17258b){_0x19e35c['push'](_0x19e35c['shift']());}};_0x3e1fe8(++_0x29cd1e);}(_0xc643,0xb8));var _0x3c64=function(_0x49ab3c,_0x59ccd7){_0x49ab3c=_0x49ab3c-0x0;var _0x3a94ba=_0xc643[_0x49ab3c];return _0x3a94ba;};'use strict';var _=require(_0x3c64('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x3c64('0x1'));var rs=require(_0x3c64('0x2'));var fs=require('fs');var Redis=require(_0x3c64('0x3'));var db=require(_0x3c64('0x4'))['db'];var utils=require(_0x3c64('0x5'));var logger=require(_0x3c64('0x6'))('rpc');var config=require(_0x3c64('0x7'));var jayson=require(_0x3c64('0x8'));var client=jayson['client'][_0x3c64('0x9')]({'port':0x232a});config[_0x3c64('0xa')]=_[_0x3c64('0xb')](config[_0x3c64('0xa')],{'host':_0x3c64('0xc'),'port':0x18eb});var socket=require(_0x3c64('0xd'))(new Redis(config[_0x3c64('0xa')]));require('./cmList.socket')[_0x3c64('0xe')](socket);function respondWithRpcPromise(_0x1029cc,_0x4359ac,_0x255276){return new BPromise(function(_0x58c02c,_0x1a8626){return client[_0x3c64('0xf')](_0x1029cc,_0x255276)[_0x3c64('0x10')](function(_0x3adab6){logger[_0x3c64('0x11')](_0x3c64('0x12'),_0x4359ac,_0x3c64('0x13'));logger[_0x3c64('0x14')]('CmList,\x20%s,\x20%s,\x20%s',_0x4359ac,_0x3c64('0x13'),JSON[_0x3c64('0x15')](_0x3adab6));if(_0x3adab6[_0x3c64('0x16')]){if(_0x3adab6['error']['code']===0x1f4){logger[_0x3c64('0x16')](_0x3c64('0x12'),_0x4359ac,_0x3adab6[_0x3c64('0x16')][_0x3c64('0x17')]);return _0x1a8626(_0x3adab6[_0x3c64('0x16')][_0x3c64('0x17')]);}logger[_0x3c64('0x16')](_0x3c64('0x12'),_0x4359ac,_0x3adab6[_0x3c64('0x16')][_0x3c64('0x17')]);return _0x58c02c(_0x3adab6[_0x3c64('0x16')]['message']);}else{logger['info'](_0x3c64('0x12'),_0x4359ac,_0x3c64('0x13'));_0x58c02c(_0x3adab6['result']['message']);}})[_0x3c64('0x18')](function(_0xcd2c5e){logger[_0x3c64('0x16')](_0x3c64('0x12'),_0x4359ac,_0xcd2c5e);_0x1a8626(_0xcd2c5e);});});}
\ No newline at end of file
index 22d25ba..1f0e9c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xec5f=['remove','update','emit','removeListener','./cmList.events'];(function(_0x138adb,_0x193fee){var _0x1b27f2=function(_0x5e97a2){while(--_0x5e97a2){_0x138adb['push'](_0x138adb['shift']());}};_0x1b27f2(++_0x193fee);}(_0xec5f,0x117));var _0xfec5=function(_0x2175b2,_0x2dc4ad){_0x2175b2=_0x2175b2-0x0;var _0x5e1edc=_0xec5f[_0x2175b2];return _0x5e1edc;};'use strict';var CmListEvents=require(_0xfec5('0x0'));var events=['save',_0xfec5('0x1'),_0xfec5('0x2')];function createListener(_0x5d6a2a,_0x57f4d8){return function(_0xee87fb){_0x57f4d8[_0xfec5('0x3')](_0x5d6a2a,_0xee87fb);};}function removeListener(_0x45bdf0,_0x30a37f){return function(){CmListEvents[_0xfec5('0x4')](_0x45bdf0,_0x30a37f);};}exports['register']=function(_0x87ec64){for(var _0x539130=0x0,_0x23662e=events['length'];_0x539130<_0x23662e;_0x539130++){var _0x1f2caa=events[_0x539130];var _0x320f4e=createListener('cmList:'+_0x1f2caa,_0x87ec64);CmListEvents['on'](_0x1f2caa,_0x320f4e);}};
\ No newline at end of file
+var _0x3865=['save','remove','update','emit','register','cmList:','./cmList.events'];(function(_0x34f0a5,_0x207fe5){var _0x35dbb9=function(_0x264145){while(--_0x264145){_0x34f0a5['push'](_0x34f0a5['shift']());}};_0x35dbb9(++_0x207fe5);}(_0x3865,0x13a));var _0x5386=function(_0x4b1508,_0x51be78){_0x4b1508=_0x4b1508-0x0;var _0x38acf5=_0x3865[_0x4b1508];return _0x38acf5;};'use strict';var CmListEvents=require(_0x5386('0x0'));var events=[_0x5386('0x1'),_0x5386('0x2'),_0x5386('0x3')];function createListener(_0xc23910,_0x285b0a){return function(_0x13108d){_0x285b0a[_0x5386('0x4')](_0xc23910,_0x13108d);};}function removeListener(_0xd4c1eb,_0x59e83c){return function(){CmListEvents['removeListener'](_0xd4c1eb,_0x59e83c);};}exports[_0x5386('0x5')]=function(_0xf1a138){for(var _0x51babe=0x0,_0x939c81=events['length'];_0x51babe<_0x939c81;_0x51babe++){var _0x2b4d2b=events[_0x51babe];var _0x2f9ae8=createListener(_0x5386('0x6')+_0x2b4d2b,_0xf1a138);CmListEvents['on'](_0x2b4d2b,_0x2f9ae8);}};
\ No newline at end of file
index 6216c7c..be1465a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf2ef=['put','update','delete','destroy','removeDispositions','removeAgents','exports','multer','util','connect-timeout','Router','../../components/interaction/service','../../config/environment','./cmList.controller','get','isAuthenticated','index','describe','/:id','show','/:id/dispositions','getDispositions','/:id/contacts','getContacts','/:id/contacts/csv','getContactsCsv','/:id/fields','getCustomFields','getAgents','post','create','addDisposition','addCustomField','addAgents'];(function(_0x15c421,_0x6366f7){var _0x5e5ed5=function(_0x206e66){while(--_0x206e66){_0x15c421['push'](_0x15c421['shift']());}};_0x5e5ed5(++_0x6366f7);}(_0xf2ef,0xf5));var _0xff2e=function(_0x15fb74,_0xd856e5){_0x15fb74=_0x15fb74-0x0;var _0x44d57b=_0xf2ef[_0x15fb74];return _0x44d57b;};'use strict';var multer=require(_0xff2e('0x0'));var util=require(_0xff2e('0x1'));var path=require('path');var timeout=require(_0xff2e('0x2'));var express=require('express');var router=express[_0xff2e('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xff2e('0x4'));var config=require(_0xff2e('0x5'));var controller=require(_0xff2e('0x6'));router[_0xff2e('0x7')]('/',auth[_0xff2e('0x8')](),controller[_0xff2e('0x9')]);router[_0xff2e('0x7')]('/describe',auth[_0xff2e('0x8')](),controller[_0xff2e('0xa')]);router[_0xff2e('0x7')](_0xff2e('0xb'),auth[_0xff2e('0x8')](),controller[_0xff2e('0xc')]);router['get'](_0xff2e('0xd'),auth[_0xff2e('0x8')](),controller[_0xff2e('0xe')]);router[_0xff2e('0x7')](_0xff2e('0xf'),auth[_0xff2e('0x8')](),controller[_0xff2e('0x10')]);router[_0xff2e('0x7')](_0xff2e('0x11'),auth[_0xff2e('0x8')](),controller[_0xff2e('0x12')]);router[_0xff2e('0x7')](_0xff2e('0x13'),auth['isAuthenticated'](),controller[_0xff2e('0x14')]);router['get']('/:id/users',auth[_0xff2e('0x8')](),controller[_0xff2e('0x15')]);router[_0xff2e('0x16')]('/',auth[_0xff2e('0x8')](),controller[_0xff2e('0x17')]);router['post'](_0xff2e('0xd'),auth[_0xff2e('0x8')](),controller[_0xff2e('0x18')]);router[_0xff2e('0x16')](_0xff2e('0xf'),auth[_0xff2e('0x8')](),controller['addContacts']);router['post'](_0xff2e('0x13'),auth[_0xff2e('0x8')](),controller[_0xff2e('0x19')]);router['post']('/:id/users',auth[_0xff2e('0x8')](),controller[_0xff2e('0x1a')]);router[_0xff2e('0x1b')]('/:id',auth[_0xff2e('0x8')](),controller[_0xff2e('0x1c')]);router[_0xff2e('0x1d')](_0xff2e('0xb'),auth[_0xff2e('0x8')](),controller[_0xff2e('0x1e')]);router[_0xff2e('0x1d')](_0xff2e('0xd'),auth[_0xff2e('0x8')](),controller[_0xff2e('0x1f')]);router[_0xff2e('0x1d')]('/:id/users',auth['isAuthenticated'](),controller[_0xff2e('0x20')]);module[_0xff2e('0x21')]=router;
\ No newline at end of file
+var _0x771c=['../../components/interaction/service','../../config/environment','./cmList.controller','get','isAuthenticated','index','/describe','describe','/:id','/:id/dispositions','/:id/contacts','getContacts','/:id/contacts/csv','getContactsCsv','/:id/fields','getCustomFields','/:id/users','getAgents','post','create','addDisposition','addCustomField','addAgents','delete','destroy','removeDispositions','removeAgents','exports','multer','path','connect-timeout','express','Router'];(function(_0x3cea78,_0x4a6751){var _0x33b66b=function(_0x1f45cd){while(--_0x1f45cd){_0x3cea78['push'](_0x3cea78['shift']());}};_0x33b66b(++_0x4a6751);}(_0x771c,0x7f));var _0xc771=function(_0x36a9c7,_0x13b607){_0x36a9c7=_0x36a9c7-0x0;var _0x4060ae=_0x771c[_0x36a9c7];return _0x4060ae;};'use strict';var multer=require(_0xc771('0x0'));var util=require('util');var path=require(_0xc771('0x1'));var timeout=require(_0xc771('0x2'));var express=require(_0xc771('0x3'));var router=express[_0xc771('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xc771('0x5'));var config=require(_0xc771('0x6'));var controller=require(_0xc771('0x7'));router[_0xc771('0x8')]('/',auth[_0xc771('0x9')](),controller[_0xc771('0xa')]);router['get'](_0xc771('0xb'),auth[_0xc771('0x9')](),controller[_0xc771('0xc')]);router[_0xc771('0x8')](_0xc771('0xd'),auth['isAuthenticated'](),controller['show']);router[_0xc771('0x8')](_0xc771('0xe'),auth['isAuthenticated'](),controller['getDispositions']);router[_0xc771('0x8')](_0xc771('0xf'),auth[_0xc771('0x9')](),controller[_0xc771('0x10')]);router[_0xc771('0x8')](_0xc771('0x11'),auth[_0xc771('0x9')](),controller[_0xc771('0x12')]);router['get'](_0xc771('0x13'),auth[_0xc771('0x9')](),controller[_0xc771('0x14')]);router[_0xc771('0x8')](_0xc771('0x15'),auth['isAuthenticated'](),controller[_0xc771('0x16')]);router[_0xc771('0x17')]('/',auth[_0xc771('0x9')](),controller[_0xc771('0x18')]);router[_0xc771('0x17')](_0xc771('0xe'),auth[_0xc771('0x9')](),controller[_0xc771('0x19')]);router[_0xc771('0x17')](_0xc771('0xf'),auth['isAuthenticated'](),controller['addContacts']);router[_0xc771('0x17')](_0xc771('0x13'),auth[_0xc771('0x9')](),controller[_0xc771('0x1a')]);router[_0xc771('0x17')](_0xc771('0x15'),auth[_0xc771('0x9')](),controller[_0xc771('0x1b')]);router['put'](_0xc771('0xd'),auth['isAuthenticated'](),controller['update']);router[_0xc771('0x1c')](_0xc771('0xd'),auth['isAuthenticated'](),controller[_0xc771('0x1d')]);router[_0xc771('0x1c')](_0xc771('0xe'),auth['isAuthenticated'](),controller[_0xc771('0x1e')]);router[_0xc771('0x1c')]('/:id/users',auth[_0xc771('0x9')](),controller[_0xc771('0x1f')]);module[_0xc771('0x20')]=router;
\ No newline at end of file
index 1cd42ab..7a8b53d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xba1e=['exports','VIRTUAL','getDataValue','field','STRING','sequelize'];(function(_0x483fcc,_0x28ce51){var _0x354bf5=function(_0x4ca2ab){while(--_0x4ca2ab){_0x483fcc['push'](_0x483fcc['shift']());}};_0x354bf5(++_0x28ce51);}(_0xba1e,0xb9));var _0xeba1=function(_0x2581a9,_0x3f3e83){_0x2581a9=_0x2581a9-0x0;var _0x2e3cce=_0xba1e[_0x2581a9];return _0x2e3cce;};'use strict';var Sequelize=require(_0xeba1('0x0'));module[_0xeba1('0x1')]={'name':{'type':Sequelize[_0xeba1('0x2')],'get':function(_0x1d60ba){return this[_0xeba1('0x3')](_0xeba1('0x4'));}},'field':{'type':Sequelize[_0xeba1('0x5')],'allowNull':![]},'operator':{'type':Sequelize[_0xeba1('0x5')],'allowNull':![]},'value':{'type':Sequelize[_0xeba1('0x5')],'allowNull':![]}};
\ No newline at end of file
+var _0xbbb7=['sequelize','exports','getDataValue','field','STRING'];(function(_0x46c6b3,_0x105eff){var _0x46f232=function(_0x5ec722){while(--_0x5ec722){_0x46c6b3['push'](_0x46c6b3['shift']());}};_0x46f232(++_0x105eff);}(_0xbbb7,0xaa));var _0x7bbb=function(_0x6076b8,_0x444d1b){_0x6076b8=_0x6076b8-0x0;var _0x22cb92=_0xbbb7[_0x6076b8];return _0x22cb92;};'use strict';var Sequelize=require(_0x7bbb('0x0'));module[_0x7bbb('0x1')]={'name':{'type':Sequelize['VIRTUAL'],'get':function(_0x4515e1){return this[_0x7bbb('0x2')](_0x7bbb('0x3'));}},'field':{'type':Sequelize[_0x7bbb('0x4')],'allowNull':![]},'operator':{'type':Sequelize[_0x7bbb('0x4')],'allowNull':![]},'value':{'type':Sequelize[_0x7bbb('0x4')],'allowNull':![]}};
\ No newline at end of file
index 719c3b2..dbf21d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b02=['rimraf','zip-dir','moment','mustache','util','path','sox','to-csv','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','send','body','Condition','catch','find','params','html-pdf','eml-format'];(function(_0x413feb,_0x10477f){var _0x40ee88=function(_0x32a3f6){while(--_0x32a3f6){_0x413feb['push'](_0x413feb['shift']());}};_0x40ee88(++_0x10477f);}(_0x5b02,0xe9));var _0x25b0=function(_0x2aa889,_0x134593){_0x2aa889=_0x2aa889-0x0;var _0x38c900=_0x5b02[_0x2aa889];return _0x38c900;};'use strict';var pdf=require(_0x25b0('0x0'));var emlformat=require(_0x25b0('0x1'));var rimraf=require(_0x25b0('0x2'));var zipdir=require(_0x25b0('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x25b0('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x25b0('0x5'));var util=require(_0x25b0('0x6'));var path=require(_0x25b0('0x7'));var sox=require(_0x25b0('0x8'));var csv=require(_0x25b0('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x25b0('0xa'));var squel=require(_0x25b0('0xb'));var crypto=require('crypto');var jsforce=require(_0x25b0('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x25b0('0xd'));var Papa=require(_0x25b0('0xe'));var authService=require(_0x25b0('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x25b0('0x10'));var qs=require(_0x25b0('0x11'));var logger=require(_0x25b0('0x12'))(_0x25b0('0x13'));var utils=require(_0x25b0('0x14'));var config=require(_0x25b0('0x15'));var db=require(_0x25b0('0x16'))['db'];function respondWithStatusCode(_0x10c3fb,_0x193c2b){_0x193c2b=_0x193c2b||0xcc;return function(_0x1d3178){if(_0x1d3178){return _0x10c3fb[_0x25b0('0x17')](_0x193c2b);}return _0x10c3fb[_0x25b0('0x18')](_0x193c2b)[_0x25b0('0x19')]();};}function respondWithResult(_0x3655c2,_0x1ceeb1){_0x1ceeb1=_0x1ceeb1||0xc8;return function(_0x42cc07){if(_0x42cc07){return _0x3655c2[_0x25b0('0x18')](_0x1ceeb1)[_0x25b0('0x1a')](_0x42cc07);}};}function respondWithFilteredResult(_0x418954,_0x3b89e7){return function(_0x40071c){if(_0x40071c){var _0x5ac18d=_0x40071c[_0x25b0('0x1b')],_0x51542b=_0x3b89e7[_0x25b0('0x1c')],_0xfe1ea6=_0x3b89e7[_0x25b0('0x1c')]+_0x3b89e7[_0x25b0('0x1d')],_0x4b2357;if(_0xfe1ea6>=_0x5ac18d){_0xfe1ea6=_0x5ac18d;_0x4b2357=0xc8;}else{_0x4b2357=0xce;}_0x418954['status'](_0x4b2357);return _0x418954[_0x25b0('0x1e')](_0x25b0('0x1f'),_0x51542b+'-'+_0xfe1ea6+'/'+_0x5ac18d)[_0x25b0('0x1a')](_0x40071c);}return null;};}function patchUpdates(_0x385334){return function(_0xe750bf){try{jsonpatch[_0x25b0('0x20')](_0xe750bf,_0x385334,!![]);}catch(_0x54f458){return BPromise[_0x25b0('0x21')](_0x54f458);}return _0xe750bf[_0x25b0('0x22')]();};}function saveUpdates(_0x24e7a0,_0x1507b5){return function(_0x1dc691){if(_0x1dc691){return _0x1dc691[_0x25b0('0x23')](_0x24e7a0)[_0x25b0('0x24')](function(_0x19599b){return _0x19599b;});}return null;};}function removeEntity(_0x7bdaf9,_0x35939f){return function(_0x2b2eda){if(_0x2b2eda){return _0x2b2eda[_0x25b0('0x25')]()['then'](function(){_0x7bdaf9[_0x25b0('0x18')](0xcc)[_0x25b0('0x19')]();});}};}function handleEntityNotFound(_0x517ec5,_0x2d7c17){return function(_0x2023d8){if(!_0x2023d8){_0x517ec5[_0x25b0('0x17')](0x194);}return _0x2023d8;};}function handleError(_0x498fef,_0x4b87c9){_0x4b87c9=_0x4b87c9||0x1f4;return function(_0x50089e){logger[_0x25b0('0x26')](_0x50089e[_0x25b0('0x27')]);if(_0x50089e[_0x25b0('0x28')]){delete _0x50089e[_0x25b0('0x28')];}_0x498fef[_0x25b0('0x18')](_0x4b87c9)[_0x25b0('0x29')](_0x50089e);};}exports[_0x25b0('0x23')]=function(_0x75ce7a,_0x22e024){if(_0x75ce7a['body']['id']){delete _0x75ce7a[_0x25b0('0x2a')]['id'];}return db[_0x25b0('0x2b')]['find']({'where':{'id':_0x75ce7a['params']['id']}})['then'](handleEntityNotFound(_0x22e024,null))[_0x25b0('0x24')](saveUpdates(_0x75ce7a[_0x25b0('0x2a')],null))[_0x25b0('0x24')](respondWithResult(_0x22e024,null))[_0x25b0('0x2c')](handleError(_0x22e024,null));};exports[_0x25b0('0x25')]=function(_0x3285ae,_0x12676b){return db[_0x25b0('0x2b')][_0x25b0('0x2d')]({'where':{'id':_0x3285ae[_0x25b0('0x2e')]['id']}})[_0x25b0('0x24')](handleEntityNotFound(_0x12676b,null))[_0x25b0('0x24')](removeEntity(_0x12676b,null))[_0x25b0('0x2c')](handleError(_0x12676b,null));};
\ No newline at end of file
+var _0x9bde=['body','Condition','find','params','catch','eml-format','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','status','set','Content-Range','save','update','then','error','stack','name','send'];(function(_0x53a382,_0x21cfcf){var _0x150aca=function(_0x51ecd9){while(--_0x51ecd9){_0x53a382['push'](_0x53a382['shift']());}};_0x150aca(++_0x21cfcf);}(_0x9bde,0xe1));var _0xe9bd=function(_0x13b62a,_0x5eee61){_0x13b62a=_0x13b62a-0x0;var _0x41a942=_0x9bde[_0x13b62a];return _0x41a942;};'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 authService=require(_0xe9bd('0x12'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=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'];function respondWithStatusCode(_0x3339f9,_0x141587){_0x141587=_0x141587||0xcc;return function(_0x5e022a){if(_0x5e022a){return _0x3339f9[_0xe9bd('0x18')](_0x141587);}return _0x3339f9['status'](_0x141587)[_0xe9bd('0x19')]();};}function respondWithResult(_0x429e88,_0x3435b4){_0x3435b4=_0x3435b4||0xc8;return function(_0x51109f){if(_0x51109f){return _0x429e88['status'](_0x3435b4)[_0xe9bd('0x1a')](_0x51109f);}};}function respondWithFilteredResult(_0x248818,_0x3a9e5f){return function(_0x46a59b){if(_0x46a59b){var _0x3360bd=_0x46a59b[_0xe9bd('0x1b')],_0x389e7b=_0x3a9e5f[_0xe9bd('0x1c')],_0x45a9f2=_0x3a9e5f[_0xe9bd('0x1c')]+_0x3a9e5f['limit'],_0x573350;if(_0x45a9f2>=_0x3360bd){_0x45a9f2=_0x3360bd;_0x573350=0xc8;}else{_0x573350=0xce;}_0x248818[_0xe9bd('0x1d')](_0x573350);return _0x248818[_0xe9bd('0x1e')](_0xe9bd('0x1f'),_0x389e7b+'-'+_0x45a9f2+'/'+_0x3360bd)[_0xe9bd('0x1a')](_0x46a59b);}return null;};}function patchUpdates(_0x5cf674){return function(_0x20ec32){try{jsonpatch['apply'](_0x20ec32,_0x5cf674,!![]);}catch(_0xc6b661){return BPromise['reject'](_0xc6b661);}return _0x20ec32[_0xe9bd('0x20')]();};}function saveUpdates(_0x417113,_0x134c4e){return function(_0x3dda13){if(_0x3dda13){return _0x3dda13[_0xe9bd('0x21')](_0x417113)[_0xe9bd('0x22')](function(_0x6593ce){return _0x6593ce;});}return null;};}function removeEntity(_0x49165b,_0x133318){return function(_0x28cd17){if(_0x28cd17){return _0x28cd17['destroy']()[_0xe9bd('0x22')](function(){_0x49165b['status'](0xcc)[_0xe9bd('0x19')]();});}};}function handleEntityNotFound(_0x1b9cc9,_0x36f8c0){return function(_0xf02209){if(!_0xf02209){_0x1b9cc9['sendStatus'](0x194);}return _0xf02209;};}function handleError(_0x24cf25,_0x1e3cbb){_0x1e3cbb=_0x1e3cbb||0x1f4;return function(_0x2c9a57){logger[_0xe9bd('0x23')](_0x2c9a57[_0xe9bd('0x24')]);if(_0x2c9a57[_0xe9bd('0x25')]){delete _0x2c9a57[_0xe9bd('0x25')];}_0x24cf25[_0xe9bd('0x1d')](_0x1e3cbb)[_0xe9bd('0x26')](_0x2c9a57);};}exports['update']=function(_0x3c211a,_0x38fdfa){if(_0x3c211a['body']['id']){delete _0x3c211a[_0xe9bd('0x27')]['id'];}return db[_0xe9bd('0x28')][_0xe9bd('0x29')]({'where':{'id':_0x3c211a[_0xe9bd('0x2a')]['id']}})[_0xe9bd('0x22')](handleEntityNotFound(_0x38fdfa,null))[_0xe9bd('0x22')](saveUpdates(_0x3c211a['body'],null))['then'](respondWithResult(_0x38fdfa,null))[_0xe9bd('0x2b')](handleError(_0x38fdfa,null));};exports['destroy']=function(_0xa45eb0,_0x1f2c0e){return db[_0xe9bd('0x28')][_0xe9bd('0x29')]({'where':{'id':_0xa45eb0[_0xe9bd('0x2a')]['id']}})['then'](handleEntityNotFound(_0x1f2c0e,null))['then'](removeEntity(_0x1f2c0e,null))[_0xe9bd('0x2b')](handleError(_0x1f2c0e,null));};
\ No newline at end of file
index e5449a4..8346727 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb579=['request-promise','./condition.attributes','exports','Condition','lodash','util','../../config/logger','moment'];(function(_0x285a08,_0x36726d){var _0x16d137=function(_0x329e){while(--_0x329e){_0x285a08['push'](_0x285a08['shift']());}};_0x16d137(++_0x36726d);}(_0xb579,0x9c));var _0x9b57=function(_0x1c1aff,_0x564494){_0x1c1aff=_0x1c1aff-0x0;var _0x35a0b3=_0xb579[_0x1c1aff];return _0x35a0b3;};'use strict';var _=require(_0x9b57('0x0'));var util=require(_0x9b57('0x1'));var logger=require(_0x9b57('0x2'))('api');var moment=require(_0x9b57('0x3'));var BPromise=require('bluebird');var rp=require(_0x9b57('0x4'));var attributes=require(_0x9b57('0x5'));module[_0x9b57('0x6')]=function(_0x2c1ae1,_0x229e9e){return _0x2c1ae1['define'](_0x9b57('0x7'),attributes,{'tableName':'tools_conditions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x23b5=['exports','define','Condition','tools_conditions','../../config/logger','api','moment','bluebird','request-promise','./condition.attributes'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x23b5,0xc2));var _0x523b=function(_0x51ed62,_0x574379){_0x51ed62=_0x51ed62-0x0;var _0x34aee3=_0x23b5[_0x51ed62];return _0x34aee3;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x523b('0x0'))(_0x523b('0x1'));var moment=require(_0x523b('0x2'));var BPromise=require(_0x523b('0x3'));var rp=require(_0x523b('0x4'));var attributes=require(_0x523b('0x5'));module[_0x523b('0x6')]=function(_0x505ab1,_0x1b372d){return _0x505ab1[_0x523b('0x7')](_0x523b('0x8'),attributes,{'tableName':_0x523b('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 09f3b45..e8012ae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa959=['../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then','info','Condition,\x20%s,\x20%s','request\x20sent','debug','Condition,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','util','moment','randomstring','ioredis'];(function(_0x56f1c4,_0x37fe7f){var _0xa30a8f=function(_0x5e38ab){while(--_0x5e38ab){_0x56f1c4['push'](_0x56f1c4['shift']());}};_0xa30a8f(++_0x37fe7f);}(_0xa959,0x188));var _0x9a95=function(_0x1fc55e,_0x493e62){_0x1fc55e=_0x1fc55e-0x0;var _0x229697=_0xa959[_0x1fc55e];return _0x229697;};'use strict';var _=require('lodash');var util=require(_0x9a95('0x0'));var moment=require(_0x9a95('0x1'));var BPromise=require('bluebird');var rs=require(_0x9a95('0x2'));var fs=require('fs');var Redis=require(_0x9a95('0x3'));var db=require(_0x9a95('0x4'))['db'];var utils=require(_0x9a95('0x5'));var logger=require(_0x9a95('0x6'))(_0x9a95('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x9a95('0x8')][_0x9a95('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3ddfef,_0x1e003a,_0x42d47c){return new BPromise(function(_0x5ebbc8,_0x24cc4d){return client[_0x9a95('0xa')](_0x3ddfef,_0x42d47c)[_0x9a95('0xb')](function(_0x530dae){logger[_0x9a95('0xc')](_0x9a95('0xd'),_0x1e003a,_0x9a95('0xe'));logger[_0x9a95('0xf')](_0x9a95('0x10'),_0x1e003a,'request\x20sent',JSON[_0x9a95('0x11')](_0x530dae));if(_0x530dae[_0x9a95('0x12')]){if(_0x530dae[_0x9a95('0x12')][_0x9a95('0x13')]===0x1f4){logger[_0x9a95('0x12')](_0x9a95('0xd'),_0x1e003a,_0x530dae[_0x9a95('0x12')][_0x9a95('0x14')]);return _0x24cc4d(_0x530dae[_0x9a95('0x12')]['message']);}logger[_0x9a95('0x12')](_0x9a95('0xd'),_0x1e003a,_0x530dae['error'][_0x9a95('0x14')]);return _0x5ebbc8(_0x530dae[_0x9a95('0x12')][_0x9a95('0x14')]);}else{logger[_0x9a95('0xc')]('Condition,\x20%s,\x20%s',_0x1e003a,_0x9a95('0xe'));_0x5ebbc8(_0x530dae['result'][_0x9a95('0x14')]);}})[_0x9a95('0x15')](function(_0xefd48f){logger[_0x9a95('0x12')](_0x9a95('0xd'),_0x1e003a,_0xefd48f);_0x24cc4d(_0xefd48f);});});}
\ No newline at end of file
+var _0x616a=['bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','client','http','request','then','info','Condition,\x20%s,\x20%s','Condition,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','moment'];(function(_0x5e9ae4,_0x3b8bd8){var _0x571a7a=function(_0x1e8d07){while(--_0x1e8d07){_0x5e9ae4['push'](_0x5e9ae4['shift']());}};_0x571a7a(++_0x3b8bd8);}(_0x616a,0x1e2));var _0xa616=function(_0x203638,_0x17fa52){_0x203638=_0x203638-0x0;var _0x4449f7=_0x616a[_0x203638];return _0x4449f7;};'use strict';var _=require(_0xa616('0x0'));var util=require('util');var moment=require(_0xa616('0x1'));var BPromise=require(_0xa616('0x2'));var rs=require(_0xa616('0x3'));var fs=require('fs');var Redis=require(_0xa616('0x4'));var db=require(_0xa616('0x5'))['db'];var utils=require(_0xa616('0x6'));var logger=require('../../config/logger')(_0xa616('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xa616('0x8')][_0xa616('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1081c0,_0x257137,_0x280e41){return new BPromise(function(_0xf04524,_0x1fc295){return client[_0xa616('0xa')](_0x1081c0,_0x280e41)[_0xa616('0xb')](function(_0x4db8ff){logger[_0xa616('0xc')](_0xa616('0xd'),_0x257137,'request\x20sent');logger['debug'](_0xa616('0xe'),_0x257137,_0xa616('0xf'),JSON[_0xa616('0x10')](_0x4db8ff));if(_0x4db8ff[_0xa616('0x11')]){if(_0x4db8ff['error'][_0xa616('0x12')]===0x1f4){logger[_0xa616('0x11')](_0xa616('0xd'),_0x257137,_0x4db8ff['error'][_0xa616('0x13')]);return _0x1fc295(_0x4db8ff[_0xa616('0x11')][_0xa616('0x13')]);}logger['error'](_0xa616('0xd'),_0x257137,_0x4db8ff[_0xa616('0x11')][_0xa616('0x13')]);return _0xf04524(_0x4db8ff[_0xa616('0x11')][_0xa616('0x13')]);}else{logger['info'](_0xa616('0xd'),_0x257137,_0xa616('0xf'));_0xf04524(_0x4db8ff[_0xa616('0x14')][_0xa616('0x13')]);}})[_0xa616('0x15')](function(_0x2b5759){logger[_0xa616('0x11')](_0xa616('0xd'),_0x257137,_0x2b5759);_0x1fc295(_0x2b5759);});});}
\ No newline at end of file
index 85e97f4..9297c68 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x815b=['../../components/interaction/service','../../config/environment','./condition.controller','/:id','isAuthenticated','update','delete','multer','util','path','connect-timeout','express'];(function(_0x767d2d,_0x2302ec){var _0x2b0a02=function(_0x5cb8ad){while(--_0x5cb8ad){_0x767d2d['push'](_0x767d2d['shift']());}};_0x2b0a02(++_0x2302ec);}(_0x815b,0x67));var _0xb815=function(_0x5b5af9,_0x4bf603){_0x5b5af9=_0x5b5af9-0x0;var _0x304c2a=_0x815b[_0x5b5af9];return _0x304c2a;};'use strict';var multer=require(_0xb815('0x0'));var util=require(_0xb815('0x1'));var path=require(_0xb815('0x2'));var timeout=require(_0xb815('0x3'));var express=require(_0xb815('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xb815('0x5'));var config=require(_0xb815('0x6'));var controller=require(_0xb815('0x7'));router['put'](_0xb815('0x8'),auth[_0xb815('0x9')](),controller[_0xb815('0xa')]);router[_0xb815('0xb')]('/:id',auth[_0xb815('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x8004=['put','/:id','destroy','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./condition.controller'];(function(_0x61cd0c,_0x48fe28){var _0x162824=function(_0x57431c){while(--_0x57431c){_0x61cd0c['push'](_0x61cd0c['shift']());}};_0x162824(++_0x48fe28);}(_0x8004,0x108));var _0x4800=function(_0x1f5d86,_0x204234){_0x1f5d86=_0x1f5d86-0x0;var _0x19b3b8=_0x8004[_0x1f5d86];return _0x19b3b8;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x4800('0x0'));var timeout=require('connect-timeout');var express=require(_0x4800('0x1'));var router=express['Router']();var auth=require(_0x4800('0x2'));var interaction=require(_0x4800('0x3'));var config=require(_0x4800('0x4'));var controller=require(_0x4800('0x5'));router[_0x4800('0x6')](_0x4800('0x7'),auth['isAuthenticated'](),controller['update']);router['delete'](_0x4800('0x7'),auth['isAuthenticated'](),controller[_0x4800('0x8')]);module['exports']=router;
\ No newline at end of file
index aec9e71..a1bb80b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f43=['STRING','name','sequelize','exports'];(function(_0x18ab2a,_0x4debcd){var _0x16dcee=function(_0x10107a){while(--_0x10107a){_0x18ab2a['push'](_0x18ab2a['shift']());}};_0x16dcee(++_0x4debcd);}(_0x9f43,0x13e));var _0x39f4=function(_0x2e914,_0x1c7566){_0x2e914=_0x2e914-0x0;var _0x936e45=_0x9f43[_0x2e914];return _0x936e45;};'use strict';var Sequelize=require(_0x39f4('0x0'));module[_0x39f4('0x1')]={'name':{'type':Sequelize[_0x39f4('0x2')],'allowNull':![],'unique':_0x39f4('0x3')},'description':{'type':Sequelize[_0x39f4('0x2')]}};
\ No newline at end of file
+var _0xf561=['sequelize','exports','STRING'];(function(_0x19bba9,_0x2e69e7){var _0x32dca4=function(_0x143f51){while(--_0x143f51){_0x19bba9['push'](_0x19bba9['shift']());}};_0x32dca4(++_0x2e69e7);}(_0xf561,0x138));var _0x1f56=function(_0x1e6736,_0x5ee154){_0x1e6736=_0x1e6736-0x0;var _0x1fecaa=_0xf561[_0x1e6736];return _0x1fecaa;};'use strict';var Sequelize=require(_0x1f56('0x0'));module[_0x1f56('0x1')]={'name':{'type':Sequelize[_0x1f56('0x2')],'allowNull':![],'unique':'name'},'description':{'type':Sequelize[_0x1f56('0x2')]}};
\ No newline at end of file
index 8127d2b..31d85c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ee6=['status','set','apply','reject','then','destroy','UserProfileResource','sendStatus','error','stack','name','send','index','Dashboard','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','field','options','includeAll','include','rows','catch','show','params','rawAttributes','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','get','CustomDashboards','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','length','omit','createdAt','updatedAt','attrUrl','attrs','value','https://','attrPath','clock','attrHourFormat','HH:mm:ss','attrTimezone','0.00','attrFontSize','counter','attrMetric','total','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','attrSerie2','web-report','attrReport','reportType','attrRefresh','widgetAttributes:\x20%s','stringify','addItem','DashboardId','DashboardItem','getItems','findOne','rimraf','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','../../components/auth/service','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','end','json','count','offset','limit'];(function(_0x451bd0,_0x5d9a3b){var _0x1bffa1=function(_0xc2c3f3){while(--_0xc2c3f3){_0x451bd0['push'](_0x451bd0['shift']());}};_0x1bffa1(++_0x5d9a3b);}(_0x8ee6,0x1ac));var _0x68ee=function(_0x5e33f7,_0x4bf381){_0x5e33f7=_0x5e33f7-0x0;var _0x1e701a=_0x8ee6[_0x5e33f7];return _0x1e701a;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x68ee('0x0'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x68ee('0x1'));var moment=require(_0x68ee('0x2'));var BPromise=require(_0x68ee('0x3'));var Mustache=require('mustache');var util=require(_0x68ee('0x4'));var path=require(_0x68ee('0x5'));var sox=require(_0x68ee('0x6'));var csv=require(_0x68ee('0x7'));var ejs=require(_0x68ee('0x8'));var fs=require('fs');var _=require(_0x68ee('0x9'));var squel=require(_0x68ee('0xa'));var crypto=require(_0x68ee('0xb'));var jsforce=require(_0x68ee('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x68ee('0x7'));var querystring=require('querystring');var Papa=require(_0x68ee('0xd'));var authService=require(_0x68ee('0xe'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x68ee('0xf'))('api');var utils=require(_0x68ee('0x10'));var config=require(_0x68ee('0x11'));var db=require(_0x68ee('0x12'))['db'];config['redis']=_[_0x68ee('0x13')](config[_0x68ee('0x14')],{'host':_0x68ee('0x15'),'port':0x18eb});var socket=require(_0x68ee('0x16'))(new Redis(config[_0x68ee('0x14')]));require('./dashboard.socket')['register'](socket);function respondWithStatusCode(_0x633e43,_0x492932){_0x492932=_0x492932||0xcc;return function(_0x4d1882){if(_0x4d1882){return _0x633e43['sendStatus'](_0x492932);}return _0x633e43['status'](_0x492932)[_0x68ee('0x17')]();};}function respondWithResult(_0x22b059,_0x235b9b){_0x235b9b=_0x235b9b||0xc8;return function(_0x573143){if(_0x573143){return _0x22b059['status'](_0x235b9b)[_0x68ee('0x18')](_0x573143);}};}function respondWithFilteredResult(_0x5a3725,_0x3b7148){return function(_0x5a15f1){if(_0x5a15f1){var _0x3bb64c=_0x5a15f1[_0x68ee('0x19')],_0x41684c=_0x3b7148[_0x68ee('0x1a')],_0x16baa0=_0x3b7148[_0x68ee('0x1a')]+_0x3b7148[_0x68ee('0x1b')],_0xf8a40;if(_0x16baa0>=_0x3bb64c){_0x16baa0=_0x3bb64c;_0xf8a40=0xc8;}else{_0xf8a40=0xce;}_0x5a3725[_0x68ee('0x1c')](_0xf8a40);return _0x5a3725[_0x68ee('0x1d')]('Content-Range',_0x41684c+'-'+_0x16baa0+'/'+_0x3bb64c)[_0x68ee('0x18')](_0x5a15f1);}return null;};}function patchUpdates(_0x5f3f2c){return function(_0x1e932e){try{jsonpatch[_0x68ee('0x1e')](_0x1e932e,_0x5f3f2c,!![]);}catch(_0x48145a){return BPromise[_0x68ee('0x1f')](_0x48145a);}return _0x1e932e['save']();};}function saveUpdates(_0x22b9e1,_0x18e1d6){return function(_0x6d4921){if(_0x6d4921){return _0x6d4921['update'](_0x22b9e1)[_0x68ee('0x20')](function(_0x3a8153){return _0x3a8153;});}return null;};}function removeEntity(_0x15bb84,_0x1ad71b){return function(_0x42a94c){if(_0x42a94c){return _0x42a94c[_0x68ee('0x21')]()[_0x68ee('0x20')](function(){var _0xc75f42=_0x42a94c['get']({'plain':!![]});var _0x482e67='CustomDashboards';return db[_0x68ee('0x22')][_0x68ee('0x21')]({'where':{'type':_0x482e67,'resourceId':_0xc75f42['id']}})['then'](function(){return _0x42a94c;});})['then'](function(){_0x15bb84[_0x68ee('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x41e41c,_0x4dcb57){return function(_0xc5e518){if(!_0xc5e518){_0x41e41c[_0x68ee('0x23')](0x194);}return _0xc5e518;};}function handleError(_0x25a64e,_0x4773d6){_0x4773d6=_0x4773d6||0x1f4;return function(_0x2765cf){logger[_0x68ee('0x24')](_0x2765cf[_0x68ee('0x25')]);if(_0x2765cf[_0x68ee('0x26')]){delete _0x2765cf[_0x68ee('0x26')];}_0x25a64e[_0x68ee('0x1c')](_0x4773d6)[_0x68ee('0x27')](_0x2765cf);};}exports[_0x68ee('0x28')]=function(_0x3df78c,_0x5673d6){var _0x4174e6={},_0x504149={},_0x22d662={'count':0x0,'rows':[]};var _0x51c5c5=db[_0x68ee('0x29')]['rawAttributes'];_0x504149[_0x68ee('0x2a')]=_[_0x68ee('0x2b')](_0x51c5c5);_0x504149[_0x68ee('0x2c')]=_[_0x68ee('0x2b')](_0x3df78c[_0x68ee('0x2c')]);_0x504149[_0x68ee('0x2d')]=_[_0x68ee('0x2e')](_0x504149[_0x68ee('0x2a')],_0x504149['query']);_0x4174e6['attributes']=_[_0x68ee('0x2e')](_0x504149[_0x68ee('0x2a')],qs[_0x68ee('0x2f')](_0x3df78c[_0x68ee('0x2c')]['fields']));_0x4174e6[_0x68ee('0x30')]=_0x4174e6['attributes']['length']?_0x4174e6['attributes']:_0x504149['model'];if(!_0x3df78c[_0x68ee('0x2c')][_0x68ee('0x31')](_0x68ee('0x32'))){_0x4174e6[_0x68ee('0x1b')]=qs['limit'](_0x3df78c[_0x68ee('0x2c')][_0x68ee('0x1b')]);_0x4174e6[_0x68ee('0x1a')]=qs[_0x68ee('0x1a')](_0x3df78c[_0x68ee('0x2c')][_0x68ee('0x1a')]);}_0x4174e6[_0x68ee('0x33')]=qs[_0x68ee('0x34')](_0x3df78c['query']['sort']);_0x4174e6[_0x68ee('0x35')]=qs[_0x68ee('0x2d')](_[_0x68ee('0x36')](_0x3df78c[_0x68ee('0x2c')],_0x504149[_0x68ee('0x2d')]));if(_0x3df78c[_0x68ee('0x2c')][_0x68ee('0x37')]){_0x4174e6[_0x68ee('0x35')]=_[_0x68ee('0x38')](_0x4174e6[_0x68ee('0x35')],{'$or':_[_0x68ee('0x39')](_0x51c5c5,function(_0x4d085c){if(_0x4d085c[_0x68ee('0x3a')]['key']!=='VIRTUAL'){var _0x3e4d8d={};_0x3e4d8d[_0x4d085c[_0x68ee('0x3b')]]={'$like':'%'+_0x3df78c['query'][_0x68ee('0x37')]+'%'};return _0x3e4d8d;}})});}_0x4174e6=_[_0x68ee('0x38')]({},_0x4174e6,_0x3df78c[_0x68ee('0x3c')]);var _0x4400d5={'where':_0x4174e6[_0x68ee('0x35')]};return db['Dashboard'][_0x68ee('0x19')](_0x4400d5)[_0x68ee('0x20')](function(_0x553c72){_0x22d662[_0x68ee('0x19')]=_0x553c72;if(_0x3df78c[_0x68ee('0x2c')][_0x68ee('0x3d')]){_0x4174e6[_0x68ee('0x3e')]=[{'all':!![]}];}return db[_0x68ee('0x29')]['findAll'](_0x4174e6);})[_0x68ee('0x20')](function(_0x10252d){_0x22d662[_0x68ee('0x3f')]=_0x10252d;return _0x22d662;})[_0x68ee('0x20')](respondWithFilteredResult(_0x5673d6,_0x4174e6))[_0x68ee('0x40')](handleError(_0x5673d6,null));};exports[_0x68ee('0x41')]=function(_0x1628ba,_0x22d015){var _0x452e8e={'raw':![],'where':{'id':_0x1628ba[_0x68ee('0x42')]['id']}},_0x4bf92c={};_0x4bf92c[_0x68ee('0x2a')]=_[_0x68ee('0x2b')](db[_0x68ee('0x29')][_0x68ee('0x43')]);_0x4bf92c['query']=_[_0x68ee('0x2b')](_0x1628ba[_0x68ee('0x2c')]);_0x4bf92c[_0x68ee('0x2d')]=_[_0x68ee('0x2e')](_0x4bf92c[_0x68ee('0x2a')],_0x4bf92c[_0x68ee('0x2c')]);_0x452e8e[_0x68ee('0x30')]=_[_0x68ee('0x2e')](_0x4bf92c['model'],qs['fields'](_0x1628ba[_0x68ee('0x2c')][_0x68ee('0x2f')]));_0x452e8e[_0x68ee('0x30')]=_0x452e8e[_0x68ee('0x30')]['length']?_0x452e8e[_0x68ee('0x30')]:_0x4bf92c[_0x68ee('0x2a')];if(_0x1628ba['query'][_0x68ee('0x3d')]){_0x452e8e[_0x68ee('0x3e')]=[{'all':!![]}];}_0x452e8e=_[_0x68ee('0x38')]({},_0x452e8e,_0x1628ba[_0x68ee('0x3c')]);return db[_0x68ee('0x29')][_0x68ee('0x44')](_0x452e8e)['then'](handleEntityNotFound(_0x22d015,null))[_0x68ee('0x20')](respondWithResult(_0x22d015,null))['catch'](handleError(_0x22d015,null));};exports[_0x68ee('0x45')]=function(_0x9b8d6f,_0x5ee68d){return db[_0x68ee('0x29')][_0x68ee('0x45')](_0x9b8d6f[_0x68ee('0x46')],{})[_0x68ee('0x20')](function(_0x2f3d35){var _0x554099=_0x9b8d6f['user']['get']({'plain':!![]});if(!_0x554099)throw new Error(_0x68ee('0x47'));if(_0x554099[_0x68ee('0x48')]===_0x68ee('0x49')){var _0x32e4c7=_0x2f3d35[_0x68ee('0x4a')]({'plain':!![]});var _0x132612=_0x68ee('0x4b');return db['UserProfileSection'][_0x68ee('0x44')]({'where':{'name':_0x132612,'userProfileId':_0x554099[_0x68ee('0x4c')]},'raw':!![]})[_0x68ee('0x20')](function(_0x38a037){if(_0x38a037&&_0x38a037[_0x68ee('0x4d')]===0x0){return db[_0x68ee('0x22')]['create']({'name':_0x32e4c7['name'],'resourceId':_0x32e4c7['id'],'type':_0x38a037[_0x68ee('0x26')],'sectionId':_0x38a037['id']},{})[_0x68ee('0x20')](function(){return _0x2f3d35;});}else{return _0x2f3d35;}})[_0x68ee('0x40')](function(_0x2cf3e8){logger[_0x68ee('0x24')](_0x68ee('0x4e'),_0x2cf3e8);throw _0x2cf3e8;});}return _0x2f3d35;})[_0x68ee('0x20')](respondWithResult(_0x5ee68d,0xc9))['catch'](handleError(_0x5ee68d,null));};exports[_0x68ee('0x4f')]=function(_0x38e83f,_0x14392d){var _0x5766cc={'raw':![],'where':{'id':_0x38e83f[_0x68ee('0x42')]['id']}},_0x51b957={};_0x51b957[_0x68ee('0x2a')]=_[_0x68ee('0x2b')](db[_0x68ee('0x29')][_0x68ee('0x43')]);_0x5766cc[_0x68ee('0x30')]=_[_0x68ee('0x2e')](_0x51b957[_0x68ee('0x2a')],qs[_0x68ee('0x2f')](_0x38e83f[_0x68ee('0x2c')][_0x68ee('0x2f')]));_0x5766cc[_0x68ee('0x30')]=_0x5766cc[_0x68ee('0x30')][_0x68ee('0x50')]?_0x5766cc['attributes']:_0x51b957[_0x68ee('0x2a')];if(_0x38e83f[_0x68ee('0x2c')][_0x68ee('0x3d')]){_0x5766cc[_0x68ee('0x3e')]=[{'all':!![]}];}_0x5766cc=_['merge']({},_0x5766cc,_0x38e83f[_0x68ee('0x3c')]);return db['Dashboard'][_0x68ee('0x44')](_0x5766cc)[_0x68ee('0x20')](handleEntityNotFound(_0x14392d,null))[_0x68ee('0x20')](function(_0xba2b36){if(_0xba2b36){var _0x2152a7=_0xba2b36[_0x68ee('0x4a')]({'plain':!![]});_0x2152a7=qs[_0x68ee('0x51')](_0x2152a7,['id',_0x68ee('0x52'),_0x68ee('0x53')]);_0x38e83f[_0x68ee('0x46')]=_['omit'](_0x38e83f[_0x68ee('0x46')],['id',_0x68ee('0x52'),_0x68ee('0x53')]);return db[_0x68ee('0x29')][_0x68ee('0x45')](_[_0x68ee('0x38')](_0x2152a7,_0x38e83f[_0x68ee('0x46')]),{'include':_0x38e83f['query'][_0x68ee('0x3d')]?[{'all':!![]}]:undefined})[_0x68ee('0x20')](function(_0x31e325){var _0x454fd9=_0x38e83f['user'][_0x68ee('0x4a')]({'plain':!![]});if(!_0x454fd9)throw new Error(_0x68ee('0x47'));if(_0x454fd9[_0x68ee('0x48')]===_0x68ee('0x49')){var _0x5e2bbc=_0x31e325[_0x68ee('0x4a')]({'plain':!![]});var _0x1827b1='CustomDashboards';return db['UserProfileSection'][_0x68ee('0x44')]({'where':{'name':_0x1827b1,'userProfileId':_0x454fd9[_0x68ee('0x4c')]},'raw':!![]})['then'](function(_0x185b50){if(_0x185b50&&_0x185b50[_0x68ee('0x4d')]===0x0){return db[_0x68ee('0x22')]['create']({'name':_0x5e2bbc['name'],'resourceId':_0x5e2bbc['id'],'type':_0x185b50[_0x68ee('0x26')],'sectionId':_0x185b50['id']},{})[_0x68ee('0x20')](function(){return _0x31e325;});}else{return _0x31e325;}})[_0x68ee('0x40')](function(_0xe99387){logger[_0x68ee('0x24')](_0x68ee('0x4e'),_0xe99387);throw _0xe99387;});}return _0x31e325;});}})[_0x68ee('0x20')](respondWithResult(_0x14392d,0xc9))[_0x68ee('0x40')](handleError(_0x14392d,null));};exports['update']=function(_0x376257,_0x37ec24){if(_0x376257[_0x68ee('0x46')]['id']){delete _0x376257[_0x68ee('0x46')]['id'];}return db[_0x68ee('0x29')]['find']({'where':{'id':_0x376257[_0x68ee('0x42')]['id']}})[_0x68ee('0x20')](handleEntityNotFound(_0x37ec24,null))[_0x68ee('0x20')](saveUpdates(_0x376257['body'],null))[_0x68ee('0x20')](respondWithResult(_0x37ec24,null))[_0x68ee('0x40')](handleError(_0x37ec24,null));};exports[_0x68ee('0x21')]=function(_0x4a52cc,_0x2bb00d){return db[_0x68ee('0x29')][_0x68ee('0x44')]({'where':{'id':_0x4a52cc[_0x68ee('0x42')]['id']}})[_0x68ee('0x20')](handleEntityNotFound(_0x2bb00d,null))[_0x68ee('0x20')](removeEntity(_0x2bb00d,null))[_0x68ee('0x40')](handleError(_0x2bb00d,null));};function widgetAttributes(_0xfd5218){try{switch(_0xfd5218[_0x68ee('0x3a')]){case'iframe':return[{'name':_0x68ee('0x54'),'value':_0xfd5218[_0x68ee('0x54')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x0]?_0xfd5218[_0x68ee('0x55')][0x0][_0x68ee('0x56')]:undefined)||_0x68ee('0x57')}];case'custom':return[{'name':_0x68ee('0x58'),'value':_0xfd5218['attrPath']||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218['attrs'][0x0]?_0xfd5218[_0x68ee('0x55')][0x0][_0x68ee('0x56')]:undefined)||''}];case _0x68ee('0x59'):return[{'name':_0x68ee('0x5a'),'value':_0xfd5218[_0x68ee('0x5a')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218['attrs'][0x0]?_0xfd5218[_0x68ee('0x55')][0x0][_0x68ee('0x56')]:undefined)||_0x68ee('0x5b')},{'name':_0x68ee('0x5c'),'value':_0xfd5218['attrTimezone']||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x1]?_0xfd5218[_0x68ee('0x55')][0x1][_0x68ee('0x56')]:undefined)||_0x68ee('0x5d')},{'name':_0x68ee('0x5e'),'value':_0xfd5218[_0x68ee('0x5e')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x2]?_0xfd5218[_0x68ee('0x55')][0x2][_0x68ee('0x56')]:undefined)||0xc}];case _0x68ee('0x5f'):return[{'name':_0x68ee('0x60'),'value':_0xfd5218['attrMetric']||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218['attrs'][0x0]?_0xfd5218[_0x68ee('0x55')][0x0][_0x68ee('0x56')]:undefined)||_0x68ee('0x61')},{'name':_0x68ee('0x62'),'value':_0xfd5218['attrVoiceQueues']||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x1]?_0xfd5218[_0x68ee('0x55')][0x1]['value']:undefined)||[]},{'name':'attrFontSize','value':_0xfd5218[_0x68ee('0x5e')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x2]?_0xfd5218[_0x68ee('0x55')][0x2][_0x68ee('0x56')]:undefined)||0x14}];case _0x68ee('0x63'):case _0x68ee('0x64'):return[{'name':_0x68ee('0x65'),'value':_0xfd5218['attrSerie1']||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x0]?_0xfd5218[_0x68ee('0x55')][0x0][_0x68ee('0x56')]:undefined)||_0x68ee('0x61')},{'name':_0x68ee('0x66'),'value':_0xfd5218[_0x68ee('0x66')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x1]?_0xfd5218[_0x68ee('0x55')][0x1][_0x68ee('0x56')]:undefined)||null},{'name':'attrSerie3','value':_0xfd5218['attrSerie3']||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x2]?_0xfd5218[_0x68ee('0x55')][0x2][_0x68ee('0x56')]:undefined)||null},{'name':_0x68ee('0x62'),'value':_0xfd5218[_0x68ee('0x62')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x3]?_0xfd5218['attrs'][0x3][_0x68ee('0x56')]:undefined)||[]}];case _0x68ee('0x67'):return[{'name':_0x68ee('0x68'),'type':_0xfd5218[_0x68ee('0x69')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x0]?_0xfd5218[_0x68ee('0x55')][0x0][_0x68ee('0x3a')]:undefined)||null,'value':_0xfd5218[_0x68ee('0x68')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218['attrs'][0x0]?_0xfd5218[_0x68ee('0x55')][0x0][_0x68ee('0x56')]:undefined)||null},{'name':'attrRefresh','value':_0xfd5218[_0x68ee('0x6a')]||(_0xfd5218[_0x68ee('0x55')]&&_0xfd5218[_0x68ee('0x55')][0x1]?_0xfd5218[_0x68ee('0x55')][0x1][_0x68ee('0x56')]:undefined)||0x0}];default:return[];}}catch(_0x3c9576){logger[_0x68ee('0x24')](_0x68ee('0x6b'),JSON[_0x68ee('0x6c')](_0x3c9576));return[];}}exports[_0x68ee('0x6d')]=function(_0x2f4a82,_0xba6ee4,_0x15eedc){if(_0x2f4a82[_0x68ee('0x46')]['id']){delete _0x2f4a82[_0x68ee('0x46')]['id'];}return db[_0x68ee('0x29')]['find']({'where':{'id':_0x2f4a82[_0x68ee('0x42')]['id']}})[_0x68ee('0x20')](handleEntityNotFound(_0xba6ee4,null))[_0x68ee('0x20')](function(_0xfa5386){if(_0xfa5386){_0x2f4a82['body'][_0x68ee('0x6e')]=_0xfa5386['id'];_0x2f4a82[_0x68ee('0x46')][_0x68ee('0x55')]=widgetAttributes(_0x2f4a82[_0x68ee('0x46')]);return db[_0x68ee('0x6f')]['create'](_0x2f4a82['body']);}})[_0x68ee('0x20')](respondWithResult(_0xba6ee4,null))[_0x68ee('0x40')](handleError(_0xba6ee4,null));};exports[_0x68ee('0x70')]=function(_0x2a4e2b,_0x11d1dd,_0x1a49d3){var _0x23330d={};var _0x452ed3={};var _0x2c9ea3;var _0x5e7836;return db[_0x68ee('0x29')][_0x68ee('0x71')]({'where':{'id':_0x2a4e2b[_0x68ee('0x42')]['id']}})['then'](handleEntityNotFound(_0x11d1dd,null))['then'](function(_0x50878c){if(_0x50878c){_0x2c9ea3=_0x50878c;_0x452ed3[_0x68ee('0x2a')]=_['keys'](db[_0x68ee('0x6f')][_0x68ee('0x43')]);_0x452ed3[_0x68ee('0x2c')]=_['keys'](_0x2a4e2b[_0x68ee('0x2c')]);_0x452ed3[_0x68ee('0x2d')]=_[_0x68ee('0x2e')](_0x452ed3[_0x68ee('0x2a')],_0x452ed3[_0x68ee('0x2c')]);_0x23330d[_0x68ee('0x30')]=_[_0x68ee('0x2e')](_0x452ed3[_0x68ee('0x2a')],qs['fields'](_0x2a4e2b[_0x68ee('0x2c')][_0x68ee('0x2f')]));_0x23330d['attributes']=_0x23330d[_0x68ee('0x30')][_0x68ee('0x50')]?_0x23330d[_0x68ee('0x30')]:_0x452ed3['model'];_0x23330d['order']=qs['sort'](_0x2a4e2b[_0x68ee('0x2c')]['sort']);_0x23330d[_0x68ee('0x35')]=qs[_0x68ee('0x2d')](_['pick'](_0x2a4e2b[_0x68ee('0x2c')],_0x452ed3['filters']));if(_0x2a4e2b[_0x68ee('0x2c')][_0x68ee('0x37')]){_0x23330d[_0x68ee('0x35')]=_['merge'](_0x23330d[_0x68ee('0x35')],{'$or':_[_0x68ee('0x39')](_0x23330d[_0x68ee('0x30')],function(_0x47e1a6){var _0x349c6e={};_0x349c6e[_0x47e1a6]={'$like':'%'+_0x2a4e2b['query'][_0x68ee('0x37')]+'%'};return _0x349c6e;})});}_0x23330d=_[_0x68ee('0x38')]({},_0x23330d,_0x2a4e2b[_0x68ee('0x3c')]);return _0x2c9ea3['getItems'](_0x23330d);}})['then'](function(_0xd3c72c){if(_0xd3c72c){_0x5e7836=_0xd3c72c['length'];if(!_0x2a4e2b[_0x68ee('0x2c')][_0x68ee('0x31')]('nolimit')){_0x23330d[_0x68ee('0x1b')]=qs['limit'](_0x2a4e2b['query'][_0x68ee('0x1b')]);_0x23330d[_0x68ee('0x1a')]=qs[_0x68ee('0x1a')](_0x2a4e2b['query'][_0x68ee('0x1a')]);}return _0x2c9ea3[_0x68ee('0x70')](_0x23330d);}})[_0x68ee('0x20')](function(_0x1cf637){if(_0x1cf637){return _0x1cf637?{'count':_0x5e7836,'rows':_0x1cf637}:null;}})[_0x68ee('0x20')](respondWithResult(_0x11d1dd,null))[_0x68ee('0x40')](handleError(_0x11d1dd,null));};
\ No newline at end of file
+var _0x91e7=['attrFontSize','counter','attrMetric','total','attrVoiceQueues','multibar-chart','attrSerie1','attrSerie2','attrSerie3','attrReport','reportType','attrRefresh','stringify','addItem','getItems','DashboardItem','hasOwnProperty','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../mysqldb','redis','defaults','localhost','socket.io-emitter','sendStatus','status','end','offset','limit','Content-Range','json','reject','save','update','then','destroy','get','CustomDashboards','error','stack','name','send','index','Dashboard','model','keys','query','filters','intersection','fields','attributes','length','nolimit','order','sort','pick','filter','where','merge','map','type','key','field','options','count','include','findAll','rows','catch','params','rawAttributes','includeAll','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','omit','createdAt','updatedAt','UserProfileSection','iframe','attrUrl','attrs','https://','custom','attrPath','value','clock','attrHourFormat','HH:mm:ss','attrTimezone'];(function(_0x25a4b3,_0x5da5c0){var _0x22fcfc=function(_0x3ea597){while(--_0x3ea597){_0x25a4b3['push'](_0x25a4b3['shift']());}};_0x22fcfc(++_0x5da5c0);}(_0x91e7,0xf9));var _0x791e=function(_0x4b73a2,_0x40b5fe){_0x4b73a2=_0x4b73a2-0x0;var _0x383c66=_0x91e7[_0x4b73a2];return _0x383c66;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x791e('0x0'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x791e('0x1'));var rp=require(_0x791e('0x2'));var moment=require(_0x791e('0x3'));var BPromise=require(_0x791e('0x4'));var Mustache=require(_0x791e('0x5'));var util=require('util');var path=require('path');var sox=require(_0x791e('0x6'));var csv=require(_0x791e('0x7'));var ejs=require(_0x791e('0x8'));var fs=require('fs');var _=require(_0x791e('0x9'));var squel=require('squel');var crypto=require(_0x791e('0xa'));var jsforce=require(_0x791e('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x791e('0x7'));var querystring=require(_0x791e('0xc'));var Papa=require(_0x791e('0xd'));var authService=require(_0x791e('0xe'));var hardwareService=require(_0x791e('0xf'));var Redis=require(_0x791e('0x10'));var qs=require(_0x791e('0x11'));var logger=require(_0x791e('0x12'))(_0x791e('0x13'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x791e('0x14'))['db'];config[_0x791e('0x15')]=_[_0x791e('0x16')](config['redis'],{'host':_0x791e('0x17'),'port':0x18eb});var socket=require(_0x791e('0x18'))(new Redis(config['redis']));require('./dashboard.socket')['register'](socket);function respondWithStatusCode(_0x3f5c61,_0x291967){_0x291967=_0x291967||0xcc;return function(_0x58018f){if(_0x58018f){return _0x3f5c61[_0x791e('0x19')](_0x291967);}return _0x3f5c61[_0x791e('0x1a')](_0x291967)[_0x791e('0x1b')]();};}function respondWithResult(_0x24514e,_0x499c05){_0x499c05=_0x499c05||0xc8;return function(_0x5be547){if(_0x5be547){return _0x24514e[_0x791e('0x1a')](_0x499c05)['json'](_0x5be547);}};}function respondWithFilteredResult(_0x3ce868,_0x3af9ec){return function(_0x45349b){if(_0x45349b){var _0x2f7448=_0x45349b['count'],_0x2388e2=_0x3af9ec[_0x791e('0x1c')],_0xa08113=_0x3af9ec['offset']+_0x3af9ec[_0x791e('0x1d')],_0x4a4753;if(_0xa08113>=_0x2f7448){_0xa08113=_0x2f7448;_0x4a4753=0xc8;}else{_0x4a4753=0xce;}_0x3ce868[_0x791e('0x1a')](_0x4a4753);return _0x3ce868['set'](_0x791e('0x1e'),_0x2388e2+'-'+_0xa08113+'/'+_0x2f7448)[_0x791e('0x1f')](_0x45349b);}return null;};}function patchUpdates(_0x2958ac){return function(_0x3b26ae){try{jsonpatch['apply'](_0x3b26ae,_0x2958ac,!![]);}catch(_0x378efb){return BPromise[_0x791e('0x20')](_0x378efb);}return _0x3b26ae[_0x791e('0x21')]();};}function saveUpdates(_0x54bf3b,_0x506987){return function(_0x3016b7){if(_0x3016b7){return _0x3016b7[_0x791e('0x22')](_0x54bf3b)[_0x791e('0x23')](function(_0x37596e){return _0x37596e;});}return null;};}function removeEntity(_0x1ba250,_0x584054){return function(_0x545394){if(_0x545394){return _0x545394[_0x791e('0x24')]()[_0x791e('0x23')](function(){var _0x2a2a04=_0x545394[_0x791e('0x25')]({'plain':!![]});var _0x51a478=_0x791e('0x26');return db['UserProfileResource'][_0x791e('0x24')]({'where':{'type':_0x51a478,'resourceId':_0x2a2a04['id']}})[_0x791e('0x23')](function(){return _0x545394;});})[_0x791e('0x23')](function(){_0x1ba250[_0x791e('0x1a')](0xcc)[_0x791e('0x1b')]();});}};}function handleEntityNotFound(_0x166505,_0x2f88f6){return function(_0x5a7c7f){if(!_0x5a7c7f){_0x166505['sendStatus'](0x194);}return _0x5a7c7f;};}function handleError(_0x1545f4,_0x5307da){_0x5307da=_0x5307da||0x1f4;return function(_0x444c1d){logger[_0x791e('0x27')](_0x444c1d[_0x791e('0x28')]);if(_0x444c1d['name']){delete _0x444c1d[_0x791e('0x29')];}_0x1545f4[_0x791e('0x1a')](_0x5307da)[_0x791e('0x2a')](_0x444c1d);};}exports[_0x791e('0x2b')]=function(_0x39541a,_0x34a4e5){var _0x35b201={},_0xf947ca={},_0x1189f0={'count':0x0,'rows':[]};var _0x277da5=db[_0x791e('0x2c')]['rawAttributes'];_0xf947ca[_0x791e('0x2d')]=_[_0x791e('0x2e')](_0x277da5);_0xf947ca[_0x791e('0x2f')]=_[_0x791e('0x2e')](_0x39541a[_0x791e('0x2f')]);_0xf947ca[_0x791e('0x30')]=_[_0x791e('0x31')](_0xf947ca[_0x791e('0x2d')],_0xf947ca[_0x791e('0x2f')]);_0x35b201['attributes']=_[_0x791e('0x31')](_0xf947ca[_0x791e('0x2d')],qs[_0x791e('0x32')](_0x39541a[_0x791e('0x2f')][_0x791e('0x32')]));_0x35b201['attributes']=_0x35b201[_0x791e('0x33')][_0x791e('0x34')]?_0x35b201[_0x791e('0x33')]:_0xf947ca[_0x791e('0x2d')];if(!_0x39541a['query']['hasOwnProperty'](_0x791e('0x35'))){_0x35b201[_0x791e('0x1d')]=qs[_0x791e('0x1d')](_0x39541a[_0x791e('0x2f')][_0x791e('0x1d')]);_0x35b201['offset']=qs[_0x791e('0x1c')](_0x39541a[_0x791e('0x2f')][_0x791e('0x1c')]);}_0x35b201[_0x791e('0x36')]=qs[_0x791e('0x37')](_0x39541a[_0x791e('0x2f')][_0x791e('0x37')]);_0x35b201['where']=qs['filters'](_[_0x791e('0x38')](_0x39541a[_0x791e('0x2f')],_0xf947ca[_0x791e('0x30')]));if(_0x39541a[_0x791e('0x2f')][_0x791e('0x39')]){_0x35b201[_0x791e('0x3a')]=_[_0x791e('0x3b')](_0x35b201[_0x791e('0x3a')],{'$or':_[_0x791e('0x3c')](_0x277da5,function(_0x1be956){if(_0x1be956[_0x791e('0x3d')][_0x791e('0x3e')]!=='VIRTUAL'){var _0xc8576={};_0xc8576[_0x1be956[_0x791e('0x3f')]]={'$like':'%'+_0x39541a[_0x791e('0x2f')][_0x791e('0x39')]+'%'};return _0xc8576;}})});}_0x35b201=_['merge']({},_0x35b201,_0x39541a[_0x791e('0x40')]);var _0x4184c7={'where':_0x35b201['where']};return db[_0x791e('0x2c')][_0x791e('0x41')](_0x4184c7)[_0x791e('0x23')](function(_0x523040){_0x1189f0[_0x791e('0x41')]=_0x523040;if(_0x39541a['query']['includeAll']){_0x35b201[_0x791e('0x42')]=[{'all':!![]}];}return db[_0x791e('0x2c')][_0x791e('0x43')](_0x35b201);})[_0x791e('0x23')](function(_0x46fbfe){_0x1189f0[_0x791e('0x44')]=_0x46fbfe;return _0x1189f0;})['then'](respondWithFilteredResult(_0x34a4e5,_0x35b201))[_0x791e('0x45')](handleError(_0x34a4e5,null));};exports['show']=function(_0x598543,_0x3be831){var _0x5c12d6={'raw':![],'where':{'id':_0x598543[_0x791e('0x46')]['id']}},_0x41603={};_0x41603[_0x791e('0x2d')]=_[_0x791e('0x2e')](db[_0x791e('0x2c')][_0x791e('0x47')]);_0x41603[_0x791e('0x2f')]=_[_0x791e('0x2e')](_0x598543[_0x791e('0x2f')]);_0x41603[_0x791e('0x30')]=_[_0x791e('0x31')](_0x41603[_0x791e('0x2d')],_0x41603[_0x791e('0x2f')]);_0x5c12d6['attributes']=_[_0x791e('0x31')](_0x41603[_0x791e('0x2d')],qs[_0x791e('0x32')](_0x598543['query']['fields']));_0x5c12d6[_0x791e('0x33')]=_0x5c12d6[_0x791e('0x33')][_0x791e('0x34')]?_0x5c12d6[_0x791e('0x33')]:_0x41603[_0x791e('0x2d')];if(_0x598543[_0x791e('0x2f')][_0x791e('0x48')]){_0x5c12d6['include']=[{'all':!![]}];}_0x5c12d6=_[_0x791e('0x3b')]({},_0x5c12d6,_0x598543[_0x791e('0x40')]);return db[_0x791e('0x2c')][_0x791e('0x49')](_0x5c12d6)[_0x791e('0x23')](handleEntityNotFound(_0x3be831,null))[_0x791e('0x23')](respondWithResult(_0x3be831,null))[_0x791e('0x45')](handleError(_0x3be831,null));};exports['create']=function(_0x5ed27d,_0x53d48e){return db[_0x791e('0x2c')][_0x791e('0x4a')](_0x5ed27d[_0x791e('0x4b')],{})[_0x791e('0x23')](function(_0x3d1fca){var _0x168e75=_0x5ed27d[_0x791e('0x4c')]['get']({'plain':!![]});if(!_0x168e75)throw new Error(_0x791e('0x4d'));if(_0x168e75[_0x791e('0x4e')]===_0x791e('0x4c')){var _0x1f5fed=_0x3d1fca[_0x791e('0x25')]({'plain':!![]});var _0x49a547='CustomDashboards';return db['UserProfileSection']['find']({'where':{'name':_0x49a547,'userProfileId':_0x168e75[_0x791e('0x4f')]},'raw':!![]})[_0x791e('0x23')](function(_0x31e752){if(_0x31e752&&_0x31e752[_0x791e('0x50')]===0x0){return db[_0x791e('0x51')][_0x791e('0x4a')]({'name':_0x1f5fed['name'],'resourceId':_0x1f5fed['id'],'type':_0x31e752['name'],'sectionId':_0x31e752['id']},{})[_0x791e('0x23')](function(){return _0x3d1fca;});}else{return _0x3d1fca;}})[_0x791e('0x45')](function(_0x1bd7e4){logger[_0x791e('0x27')](_0x791e('0x52'),_0x1bd7e4);throw _0x1bd7e4;});}return _0x3d1fca;})[_0x791e('0x23')](respondWithResult(_0x53d48e,0xc9))['catch'](handleError(_0x53d48e,null));};exports[_0x791e('0x53')]=function(_0x19e034,_0x468001){var _0x362b28={'raw':![],'where':{'id':_0x19e034['params']['id']}},_0x2aff79={};_0x2aff79['model']=_[_0x791e('0x2e')](db['Dashboard']['rawAttributes']);_0x362b28[_0x791e('0x33')]=_['intersection'](_0x2aff79[_0x791e('0x2d')],qs['fields'](_0x19e034[_0x791e('0x2f')][_0x791e('0x32')]));_0x362b28[_0x791e('0x33')]=_0x362b28[_0x791e('0x33')][_0x791e('0x34')]?_0x362b28[_0x791e('0x33')]:_0x2aff79[_0x791e('0x2d')];if(_0x19e034[_0x791e('0x2f')][_0x791e('0x48')]){_0x362b28[_0x791e('0x42')]=[{'all':!![]}];}_0x362b28=_[_0x791e('0x3b')]({},_0x362b28,_0x19e034[_0x791e('0x40')]);return db[_0x791e('0x2c')]['find'](_0x362b28)[_0x791e('0x23')](handleEntityNotFound(_0x468001,null))['then'](function(_0x21ccd6){if(_0x21ccd6){var _0x101c78=_0x21ccd6['get']({'plain':!![]});_0x101c78=qs[_0x791e('0x54')](_0x101c78,['id',_0x791e('0x55'),_0x791e('0x56')]);_0x19e034[_0x791e('0x4b')]=_[_0x791e('0x54')](_0x19e034['body'],['id',_0x791e('0x55'),_0x791e('0x56')]);return db[_0x791e('0x2c')][_0x791e('0x4a')](_['merge'](_0x101c78,_0x19e034[_0x791e('0x4b')]),{'include':_0x19e034[_0x791e('0x2f')][_0x791e('0x48')]?[{'all':!![]}]:undefined})[_0x791e('0x23')](function(_0x1371c5){var _0x50b79f=_0x19e034[_0x791e('0x4c')][_0x791e('0x25')]({'plain':!![]});if(!_0x50b79f)throw new Error(_0x791e('0x4d'));if(_0x50b79f['role']===_0x791e('0x4c')){var _0x20614a=_0x1371c5[_0x791e('0x25')]({'plain':!![]});var _0x1d648c=_0x791e('0x26');return db[_0x791e('0x57')][_0x791e('0x49')]({'where':{'name':_0x1d648c,'userProfileId':_0x50b79f[_0x791e('0x4f')]},'raw':!![]})['then'](function(_0x2f2321){if(_0x2f2321&&_0x2f2321[_0x791e('0x50')]===0x0){return db[_0x791e('0x51')]['create']({'name':_0x20614a[_0x791e('0x29')],'resourceId':_0x20614a['id'],'type':_0x2f2321['name'],'sectionId':_0x2f2321['id']},{})['then'](function(){return _0x1371c5;});}else{return _0x1371c5;}})[_0x791e('0x45')](function(_0x1c83e5){logger[_0x791e('0x27')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x1c83e5);throw _0x1c83e5;});}return _0x1371c5;});}})['then'](respondWithResult(_0x468001,0xc9))[_0x791e('0x45')](handleError(_0x468001,null));};exports['update']=function(_0x204b48,_0x56becd){if(_0x204b48[_0x791e('0x4b')]['id']){delete _0x204b48[_0x791e('0x4b')]['id'];}return db[_0x791e('0x2c')][_0x791e('0x49')]({'where':{'id':_0x204b48[_0x791e('0x46')]['id']}})[_0x791e('0x23')](handleEntityNotFound(_0x56becd,null))[_0x791e('0x23')](saveUpdates(_0x204b48[_0x791e('0x4b')],null))[_0x791e('0x23')](respondWithResult(_0x56becd,null))[_0x791e('0x45')](handleError(_0x56becd,null));};exports[_0x791e('0x24')]=function(_0x30304f,_0x2f7b7c){return db[_0x791e('0x2c')][_0x791e('0x49')]({'where':{'id':_0x30304f['params']['id']}})[_0x791e('0x23')](handleEntityNotFound(_0x2f7b7c,null))[_0x791e('0x23')](removeEntity(_0x2f7b7c,null))[_0x791e('0x45')](handleError(_0x2f7b7c,null));};function widgetAttributes(_0x52d8d2){try{switch(_0x52d8d2[_0x791e('0x3d')]){case _0x791e('0x58'):return[{'name':_0x791e('0x59'),'value':_0x52d8d2[_0x791e('0x59')]||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2['attrs'][0x0]?_0x52d8d2[_0x791e('0x5a')][0x0]['value']:undefined)||_0x791e('0x5b')}];case _0x791e('0x5c'):return[{'name':_0x791e('0x5d'),'value':_0x52d8d2[_0x791e('0x5d')]||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2[_0x791e('0x5a')][0x0]?_0x52d8d2[_0x791e('0x5a')][0x0][_0x791e('0x5e')]:undefined)||''}];case _0x791e('0x5f'):return[{'name':_0x791e('0x60'),'value':_0x52d8d2[_0x791e('0x60')]||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2['attrs'][0x0]?_0x52d8d2['attrs'][0x0][_0x791e('0x5e')]:undefined)||_0x791e('0x61')},{'name':'attrTimezone','value':_0x52d8d2[_0x791e('0x62')]||(_0x52d8d2['attrs']&&_0x52d8d2[_0x791e('0x5a')][0x1]?_0x52d8d2[_0x791e('0x5a')][0x1]['value']:undefined)||'0.00'},{'name':_0x791e('0x63'),'value':_0x52d8d2['attrFontSize']||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2[_0x791e('0x5a')][0x2]?_0x52d8d2[_0x791e('0x5a')][0x2][_0x791e('0x5e')]:undefined)||0xc}];case _0x791e('0x64'):return[{'name':'attrMetric','value':_0x52d8d2[_0x791e('0x65')]||(_0x52d8d2['attrs']&&_0x52d8d2[_0x791e('0x5a')][0x0]?_0x52d8d2['attrs'][0x0][_0x791e('0x5e')]:undefined)||_0x791e('0x66')},{'name':_0x791e('0x67'),'value':_0x52d8d2[_0x791e('0x67')]||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2['attrs'][0x1]?_0x52d8d2[_0x791e('0x5a')][0x1][_0x791e('0x5e')]:undefined)||[]},{'name':_0x791e('0x63'),'value':_0x52d8d2[_0x791e('0x63')]||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2[_0x791e('0x5a')][0x2]?_0x52d8d2[_0x791e('0x5a')][0x2][_0x791e('0x5e')]:undefined)||0x14}];case _0x791e('0x68'):case'pie-chart':return[{'name':'attrSerie1','value':_0x52d8d2[_0x791e('0x69')]||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2['attrs'][0x0]?_0x52d8d2[_0x791e('0x5a')][0x0][_0x791e('0x5e')]:undefined)||_0x791e('0x66')},{'name':_0x791e('0x6a'),'value':_0x52d8d2['attrSerie2']||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2[_0x791e('0x5a')][0x1]?_0x52d8d2[_0x791e('0x5a')][0x1][_0x791e('0x5e')]:undefined)||null},{'name':_0x791e('0x6b'),'value':_0x52d8d2[_0x791e('0x6b')]||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2[_0x791e('0x5a')][0x2]?_0x52d8d2[_0x791e('0x5a')][0x2][_0x791e('0x5e')]:undefined)||null},{'name':_0x791e('0x67'),'value':_0x52d8d2['attrVoiceQueues']||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2['attrs'][0x3]?_0x52d8d2[_0x791e('0x5a')][0x3][_0x791e('0x5e')]:undefined)||[]}];case'web-report':return[{'name':_0x791e('0x6c'),'type':_0x52d8d2[_0x791e('0x6d')]||(_0x52d8d2['attrs']&&_0x52d8d2[_0x791e('0x5a')][0x0]?_0x52d8d2[_0x791e('0x5a')][0x0][_0x791e('0x3d')]:undefined)||null,'value':_0x52d8d2[_0x791e('0x6c')]||(_0x52d8d2['attrs']&&_0x52d8d2[_0x791e('0x5a')][0x0]?_0x52d8d2[_0x791e('0x5a')][0x0][_0x791e('0x5e')]:undefined)||null},{'name':_0x791e('0x6e'),'value':_0x52d8d2[_0x791e('0x6e')]||(_0x52d8d2[_0x791e('0x5a')]&&_0x52d8d2[_0x791e('0x5a')][0x1]?_0x52d8d2['attrs'][0x1][_0x791e('0x5e')]:undefined)||0x0}];default:return[];}}catch(_0x27a4eb){logger[_0x791e('0x27')]('widgetAttributes:\x20%s',JSON[_0x791e('0x6f')](_0x27a4eb));return[];}}exports[_0x791e('0x70')]=function(_0xc18361,_0x5a97b8,_0x48db37){if(_0xc18361[_0x791e('0x4b')]['id']){delete _0xc18361[_0x791e('0x4b')]['id'];}return db[_0x791e('0x2c')][_0x791e('0x49')]({'where':{'id':_0xc18361[_0x791e('0x46')]['id']}})[_0x791e('0x23')](handleEntityNotFound(_0x5a97b8,null))[_0x791e('0x23')](function(_0x34e38d){if(_0x34e38d){_0xc18361[_0x791e('0x4b')]['DashboardId']=_0x34e38d['id'];_0xc18361[_0x791e('0x4b')][_0x791e('0x5a')]=widgetAttributes(_0xc18361[_0x791e('0x4b')]);return db['DashboardItem']['create'](_0xc18361['body']);}})[_0x791e('0x23')](respondWithResult(_0x5a97b8,null))['catch'](handleError(_0x5a97b8,null));};exports[_0x791e('0x71')]=function(_0x1a078b,_0x1403da,_0x4f783e){var _0xbb6fd6={};var _0x343b62={};var _0x1d88fa;var _0x44bd6b;return db['Dashboard']['findOne']({'where':{'id':_0x1a078b[_0x791e('0x46')]['id']}})[_0x791e('0x23')](handleEntityNotFound(_0x1403da,null))[_0x791e('0x23')](function(_0x5080f6){if(_0x5080f6){_0x1d88fa=_0x5080f6;_0x343b62[_0x791e('0x2d')]=_[_0x791e('0x2e')](db[_0x791e('0x72')][_0x791e('0x47')]);_0x343b62['query']=_[_0x791e('0x2e')](_0x1a078b['query']);_0x343b62[_0x791e('0x30')]=_[_0x791e('0x31')](_0x343b62[_0x791e('0x2d')],_0x343b62[_0x791e('0x2f')]);_0xbb6fd6[_0x791e('0x33')]=_['intersection'](_0x343b62['model'],qs['fields'](_0x1a078b[_0x791e('0x2f')][_0x791e('0x32')]));_0xbb6fd6['attributes']=_0xbb6fd6['attributes'][_0x791e('0x34')]?_0xbb6fd6[_0x791e('0x33')]:_0x343b62[_0x791e('0x2d')];_0xbb6fd6[_0x791e('0x36')]=qs[_0x791e('0x37')](_0x1a078b[_0x791e('0x2f')][_0x791e('0x37')]);_0xbb6fd6[_0x791e('0x3a')]=qs['filters'](_['pick'](_0x1a078b[_0x791e('0x2f')],_0x343b62[_0x791e('0x30')]));if(_0x1a078b[_0x791e('0x2f')][_0x791e('0x39')]){_0xbb6fd6[_0x791e('0x3a')]=_[_0x791e('0x3b')](_0xbb6fd6['where'],{'$or':_[_0x791e('0x3c')](_0xbb6fd6[_0x791e('0x33')],function(_0x4e1c0e){var _0x4ee095={};_0x4ee095[_0x4e1c0e]={'$like':'%'+_0x1a078b[_0x791e('0x2f')][_0x791e('0x39')]+'%'};return _0x4ee095;})});}_0xbb6fd6=_['merge']({},_0xbb6fd6,_0x1a078b[_0x791e('0x40')]);return _0x1d88fa[_0x791e('0x71')](_0xbb6fd6);}})[_0x791e('0x23')](function(_0x51afec){if(_0x51afec){_0x44bd6b=_0x51afec['length'];if(!_0x1a078b[_0x791e('0x2f')][_0x791e('0x73')]('nolimit')){_0xbb6fd6[_0x791e('0x1d')]=qs[_0x791e('0x1d')](_0x1a078b[_0x791e('0x2f')][_0x791e('0x1d')]);_0xbb6fd6['offset']=qs[_0x791e('0x1c')](_0x1a078b[_0x791e('0x2f')][_0x791e('0x1c')]);}return _0x1d88fa['getItems'](_0xbb6fd6);}})['then'](function(_0x5cd3f1){if(_0x5cd3f1){return _0x5cd3f1?{'count':_0x44bd6b,'rows':_0x5cd3f1}:null;}})[_0x791e('0x23')](respondWithResult(_0x1403da,null))[_0x791e('0x45')](handleError(_0x1403da,null));};
\ No newline at end of file
index 14a6322..be99cbc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3b1a=['../../mysqldb','Dashboard','save','update','remove','emit','exports','events'];(function(_0x256cc1,_0x568424){var _0x330d0a=function(_0x4c8cc1){while(--_0x4c8cc1){_0x256cc1['push'](_0x256cc1['shift']());}};_0x330d0a(++_0x568424);}(_0x3b1a,0x18f));var _0xa3b1=function(_0x5e6ebe,_0x373752){_0x5e6ebe=_0x5e6ebe-0x0;var _0x5d80a0=_0x3b1a[_0x5e6ebe];return _0x5d80a0;};'use strict';var EventEmitter=require(_0xa3b1('0x0'));var Dashboard=require(_0xa3b1('0x1'))['db'][_0xa3b1('0x2')];var DashboardEvents=new EventEmitter();DashboardEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xa3b1('0x3'),'afterUpdate':_0xa3b1('0x4'),'afterDestroy':_0xa3b1('0x5')};function emitEvent(_0x54449b){return function(_0x4edfea,_0x9ae460,_0x22b5c2){DashboardEvents[_0xa3b1('0x6')](_0x54449b+':'+_0x4edfea['id'],_0x4edfea);DashboardEvents['emit'](_0x54449b,_0x4edfea);_0x22b5c2(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];Dashboard['hook'](e,emitEvent(event));}}module[_0xa3b1('0x7')]=DashboardEvents;
\ No newline at end of file
+var _0x637f=['save','update','remove','emit','exports','Dashboard'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x637f,0x1af));var _0xf637=function(_0x29b564,_0x2d95bd){_0x29b564=_0x29b564-0x0;var _0xae0676=_0x637f[_0x29b564];return _0xae0676;};'use strict';var EventEmitter=require('events');var Dashboard=require('../../mysqldb')['db'][_0xf637('0x0')];var DashboardEvents=new EventEmitter();DashboardEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xf637('0x1'),'afterUpdate':_0xf637('0x2'),'afterDestroy':_0xf637('0x3')};function emitEvent(_0x564c88){return function(_0x5dcdaa,_0x50fdcd,_0x5ec392){DashboardEvents[_0xf637('0x4')](_0x564c88+':'+_0x5dcdaa['id'],_0x5dcdaa);DashboardEvents[_0xf637('0x4')](_0x564c88,_0x5dcdaa);_0x5ec392(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];Dashboard['hook'](e,emitEvent(event));}}module[_0xf637('0x5')]=DashboardEvents;
\ No newline at end of file
index 4f42e36..cf5d24a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9ac=['api','moment','request-promise','exports','define','Dashboard','dashboards','lodash'];(function(_0x29caf3,_0x88a317){var _0x3dc931=function(_0x228469){while(--_0x228469){_0x29caf3['push'](_0x29caf3['shift']());}};_0x3dc931(++_0x88a317);}(_0xf9ac,0x87));var _0xcf9a=function(_0x3308af,_0x208546){_0x3308af=_0x3308af-0x0;var _0x29e027=_0xf9ac[_0x3308af];return _0x29e027;};'use strict';var _=require(_0xcf9a('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xcf9a('0x1'));var moment=require(_0xcf9a('0x2'));var BPromise=require('bluebird');var rp=require(_0xcf9a('0x3'));var attributes=require('./dashboard.attributes');module[_0xcf9a('0x4')]=function(_0x518dc3,_0x48da91){return _0x518dc3[_0xcf9a('0x5')](_0xcf9a('0x6'),attributes,{'tableName':_0xcf9a('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xdf55=['dashboards','lodash','util','api','moment','request-promise','./dashboard.attributes','exports','define','Dashboard'];(function(_0x4ba78f,_0xf7dc7){var _0x35e274=function(_0x4875fa){while(--_0x4875fa){_0x4ba78f['push'](_0x4ba78f['shift']());}};_0x35e274(++_0xf7dc7);}(_0xdf55,0x83));var _0x5df5=function(_0x470170,_0x454483){_0x470170=_0x470170-0x0;var _0x2cc1cc=_0xdf55[_0x470170];return _0x2cc1cc;};'use strict';var _=require(_0x5df5('0x0'));var util=require(_0x5df5('0x1'));var logger=require('../../config/logger')(_0x5df5('0x2'));var moment=require(_0x5df5('0x3'));var BPromise=require('bluebird');var rp=require(_0x5df5('0x4'));var attributes=require(_0x5df5('0x5'));module[_0x5df5('0x6')]=function(_0x521007,_0x289af4){return _0x521007[_0x5df5('0x7')](_0x5df5('0x8'),attributes,{'tableName':_0x5df5('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f59f1dc..e655d9d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b82=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','./dashboard.socket','then','info','Dashboard,\x20%s,\x20%s','request\x20sent','debug','Dashboard,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0x6b82,0x68));var _0x26b8=function(_0x23ad48,_0x104b01){_0x23ad48=_0x23ad48-0x0;var _0x199a20=_0x6b82[_0x23ad48];return _0x199a20;};'use strict';var _=require(_0x26b8('0x0'));var util=require(_0x26b8('0x1'));var moment=require(_0x26b8('0x2'));var BPromise=require(_0x26b8('0x3'));var rs=require(_0x26b8('0x4'));var fs=require('fs');var Redis=require(_0x26b8('0x5'));var db=require(_0x26b8('0x6'))['db'];var utils=require(_0x26b8('0x7'));var logger=require(_0x26b8('0x8'))(_0x26b8('0x9'));var config=require(_0x26b8('0xa'));var jayson=require(_0x26b8('0xb'));var client=jayson[_0x26b8('0xc')][_0x26b8('0xd')]({'port':0x232a});config[_0x26b8('0xe')]=_[_0x26b8('0xf')](config[_0x26b8('0xe')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x26b8('0xe')]));require(_0x26b8('0x10'))['register'](socket);function respondWithRpcPromise(_0x899d5e,_0x426fbb,_0x4ca182){return new BPromise(function(_0x45ca49,_0x1058f9){return client['request'](_0x899d5e,_0x4ca182)[_0x26b8('0x11')](function(_0x1d0833){logger[_0x26b8('0x12')](_0x26b8('0x13'),_0x426fbb,_0x26b8('0x14'));logger[_0x26b8('0x15')](_0x26b8('0x16'),_0x426fbb,'request\x20sent',JSON['stringify'](_0x1d0833));if(_0x1d0833[_0x26b8('0x17')]){if(_0x1d0833[_0x26b8('0x17')][_0x26b8('0x18')]===0x1f4){logger[_0x26b8('0x17')](_0x26b8('0x13'),_0x426fbb,_0x1d0833[_0x26b8('0x17')][_0x26b8('0x19')]);return _0x1058f9(_0x1d0833[_0x26b8('0x17')][_0x26b8('0x19')]);}logger[_0x26b8('0x17')](_0x26b8('0x13'),_0x426fbb,_0x1d0833[_0x26b8('0x17')][_0x26b8('0x19')]);return _0x45ca49(_0x1d0833[_0x26b8('0x17')][_0x26b8('0x19')]);}else{logger[_0x26b8('0x12')](_0x26b8('0x13'),_0x426fbb,_0x26b8('0x14'));_0x45ca49(_0x1d0833[_0x26b8('0x1a')][_0x26b8('0x19')]);}})[_0x26b8('0x1b')](function(_0x2477f1){logger[_0x26b8('0x17')]('Dashboard,\x20%s,\x20%s',_0x426fbb,_0x2477f1);_0x1058f9(_0x2477f1);});});}
\ No newline at end of file
+var _0x4ffd=['request\x20sent','debug','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','http','redis','defaults','localhost','register','request','info','Dashboard,\x20%s,\x20%s'];(function(_0x2300fa,_0x41c382){var _0x11fef0=function(_0x597ffb){while(--_0x597ffb){_0x2300fa['push'](_0x2300fa['shift']());}};_0x11fef0(++_0x41c382);}(_0x4ffd,0x84));var _0xd4ff=function(_0x1ac595,_0x5d2081){_0x1ac595=_0x1ac595-0x0;var _0x455fff=_0x4ffd[_0x1ac595];return _0x455fff;};'use strict';var _=require(_0xd4ff('0x0'));var util=require(_0xd4ff('0x1'));var moment=require(_0xd4ff('0x2'));var BPromise=require(_0xd4ff('0x3'));var rs=require(_0xd4ff('0x4'));var fs=require('fs');var Redis=require(_0xd4ff('0x5'));var db=require(_0xd4ff('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0xd4ff('0x7'))('rpc');var config=require(_0xd4ff('0x8'));var jayson=require(_0xd4ff('0x9'));var client=jayson['client'][_0xd4ff('0xa')]({'port':0x232a});config[_0xd4ff('0xb')]=_[_0xd4ff('0xc')](config[_0xd4ff('0xb')],{'host':_0xd4ff('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require('./dashboard.socket')[_0xd4ff('0xe')](socket);function respondWithRpcPromise(_0x4f87f8,_0x3f183b,_0x48f783){return new BPromise(function(_0x476d1b,_0x263e3e){return client[_0xd4ff('0xf')](_0x4f87f8,_0x48f783)['then'](function(_0x369833){logger[_0xd4ff('0x10')](_0xd4ff('0x11'),_0x3f183b,_0xd4ff('0x12'));logger[_0xd4ff('0x13')]('Dashboard,\x20%s,\x20%s,\x20%s',_0x3f183b,_0xd4ff('0x12'),JSON['stringify'](_0x369833));if(_0x369833[_0xd4ff('0x14')]){if(_0x369833[_0xd4ff('0x14')][_0xd4ff('0x15')]===0x1f4){logger[_0xd4ff('0x14')](_0xd4ff('0x11'),_0x3f183b,_0x369833['error'][_0xd4ff('0x16')]);return _0x263e3e(_0x369833['error'][_0xd4ff('0x16')]);}logger[_0xd4ff('0x14')](_0xd4ff('0x11'),_0x3f183b,_0x369833['error'][_0xd4ff('0x16')]);return _0x476d1b(_0x369833[_0xd4ff('0x14')][_0xd4ff('0x16')]);}else{logger[_0xd4ff('0x10')]('Dashboard,\x20%s,\x20%s',_0x3f183b,_0xd4ff('0x12'));_0x476d1b(_0x369833[_0xd4ff('0x17')][_0xd4ff('0x16')]);}})[_0xd4ff('0x18')](function(_0x24a9d1){logger['error'](_0xd4ff('0x11'),_0x3f183b,_0x24a9d1);_0x263e3e(_0x24a9d1);});});}
\ No newline at end of file
index 6b0263d..b6efbe1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x308a=['save','emit','removeListener','register','dashboard:','./dashboard.events'];(function(_0x4bfac3,_0x58324d){var _0x15f0f2=function(_0xf0c511){while(--_0xf0c511){_0x4bfac3['push'](_0x4bfac3['shift']());}};_0x15f0f2(++_0x58324d);}(_0x308a,0x185));var _0xa308=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x308a[_0x321bb2];return _0x9c12ed;};'use strict';var DashboardEvents=require(_0xa308('0x0'));var events=[_0xa308('0x1'),'remove','update'];function createListener(_0x21ff26,_0x1e08ef){return function(_0x3af8a5){_0x1e08ef[_0xa308('0x2')](_0x21ff26,_0x3af8a5);};}function removeListener(_0x446080,_0x2a45c){return function(){DashboardEvents[_0xa308('0x3')](_0x446080,_0x2a45c);};}exports[_0xa308('0x4')]=function(_0x1dfaaa){for(var _0x3d40de=0x0,_0x4ea008=events['length'];_0x3d40de<_0x4ea008;_0x3d40de++){var _0x29a7fb=events[_0x3d40de];var _0x2f34a9=createListener(_0xa308('0x5')+_0x29a7fb,_0x1dfaaa);DashboardEvents['on'](_0x29a7fb,_0x2f34a9);}};
\ No newline at end of file
+var _0xa5ad=['register','length','remove','emit','removeListener'];(function(_0x465a0c,_0x19d4d5){var _0x1e202e=function(_0x27bd8a){while(--_0x27bd8a){_0x465a0c['push'](_0x465a0c['shift']());}};_0x1e202e(++_0x19d4d5);}(_0xa5ad,0xc5));var _0xda5a=function(_0x1dfdd3,_0x3e1a05){_0x1dfdd3=_0x1dfdd3-0x0;var _0x4dbacf=_0xa5ad[_0x1dfdd3];return _0x4dbacf;};'use strict';var DashboardEvents=require('./dashboard.events');var events=['save',_0xda5a('0x0'),'update'];function createListener(_0x3b1f3b,_0x15fecf){return function(_0x8453c8){_0x15fecf[_0xda5a('0x1')](_0x3b1f3b,_0x8453c8);};}function removeListener(_0x35cbe3,_0x55f134){return function(){DashboardEvents[_0xda5a('0x2')](_0x35cbe3,_0x55f134);};}exports[_0xda5a('0x3')]=function(_0x2b91ef){for(var _0x2d3910=0x0,_0x384e30=events[_0xda5a('0x4')];_0x2d3910<_0x384e30;_0x2d3910++){var _0x145543=events[_0x2d3910];var _0x59bf3b=createListener('dashboard:'+_0x145543,_0x2b91ef);DashboardEvents['on'](_0x145543,_0x59bf3b);}};
\ No newline at end of file
index 3b381e3..dd86b69 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d4a=['/:id','update','destroy','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../config/environment','./dashboard.controller','get','isAuthenticated','show','/:id/items','getItems','post','create','/:id/clone','clone','addItem'];(function(_0x115d5b,_0x26aff2){var _0x6cfc50=function(_0x39a786){while(--_0x39a786){_0x115d5b['push'](_0x115d5b['shift']());}};_0x6cfc50(++_0x26aff2);}(_0x8d4a,0x1e7));var _0xa8d4=function(_0x93c029,_0x296fb0){_0x93c029=_0x93c029-0x0;var _0x10dfef=_0x8d4a[_0x93c029];return _0x10dfef;};'use strict';var multer=require(_0xa8d4('0x0'));var util=require('util');var path=require(_0xa8d4('0x1'));var timeout=require(_0xa8d4('0x2'));var express=require('express');var router=express[_0xa8d4('0x3')]();var auth=require(_0xa8d4('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xa8d4('0x5'));var controller=require(_0xa8d4('0x6'));router[_0xa8d4('0x7')]('/',auth[_0xa8d4('0x8')](),controller['index']);router[_0xa8d4('0x7')]('/:id',auth[_0xa8d4('0x8')](),controller[_0xa8d4('0x9')]);router['get'](_0xa8d4('0xa'),auth[_0xa8d4('0x8')](),controller[_0xa8d4('0xb')]);router[_0xa8d4('0xc')]('/',auth[_0xa8d4('0x8')](),controller[_0xa8d4('0xd')]);router[_0xa8d4('0xc')](_0xa8d4('0xe'),auth[_0xa8d4('0x8')](),controller[_0xa8d4('0xf')]);router[_0xa8d4('0xc')](_0xa8d4('0xa'),auth[_0xa8d4('0x8')](),controller[_0xa8d4('0x10')]);router['put'](_0xa8d4('0x11'),auth['isAuthenticated'](),controller[_0xa8d4('0x12')]);router['delete']('/:id',auth[_0xa8d4('0x8')](),controller[_0xa8d4('0x13')]);module[_0xa8d4('0x14')]=router;
\ No newline at end of file
+var _0x946b=['addItem','put','delete','/:id','destroy','exports','multer','util','connect-timeout','express','Router','../../components/interaction/service','get','isAuthenticated','index','show','/:id/items','getItems','post','create','/:id/clone'];(function(_0x13a8dd,_0x5dad46){var _0x1eb083=function(_0x310e56){while(--_0x310e56){_0x13a8dd['push'](_0x13a8dd['shift']());}};_0x1eb083(++_0x5dad46);}(_0x946b,0x6f));var _0xb946=function(_0x1797a7,_0x4654b6){_0x1797a7=_0x1797a7-0x0;var _0x459480=_0x946b[_0x1797a7];return _0x459480;};'use strict';var multer=require(_0xb946('0x0'));var util=require(_0xb946('0x1'));var path=require('path');var timeout=require(_0xb946('0x2'));var express=require(_0xb946('0x3'));var router=express[_0xb946('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xb946('0x5'));var config=require('../../config/environment');var controller=require('./dashboard.controller');router[_0xb946('0x6')]('/',auth[_0xb946('0x7')](),controller[_0xb946('0x8')]);router[_0xb946('0x6')]('/:id',auth[_0xb946('0x7')](),controller[_0xb946('0x9')]);router[_0xb946('0x6')](_0xb946('0xa'),auth[_0xb946('0x7')](),controller[_0xb946('0xb')]);router[_0xb946('0xc')]('/',auth[_0xb946('0x7')](),controller[_0xb946('0xd')]);router['post'](_0xb946('0xe'),auth[_0xb946('0x7')](),controller['clone']);router['post'](_0xb946('0xa'),auth[_0xb946('0x7')](),controller[_0xb946('0xf')]);router[_0xb946('0x10')]('/:id',auth[_0xb946('0x7')](),controller['update']);router[_0xb946('0x11')](_0xb946('0x12'),auth[_0xb946('0x7')](),controller[_0xb946('0x13')]);module[_0xb946('0x14')]=router;
\ No newline at end of file
index 12822f3..a8bf80f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6179=['parse','getDataValue','attrs','stringify','setDataValue','INTEGER','#2196f3','squel','STRING','TEXT'];(function(_0x5e687c,_0x2e18ee){var _0x3ccf5e=function(_0x32a3b8){while(--_0x32a3b8){_0x5e687c['push'](_0x5e687c['shift']());}};_0x3ccf5e(++_0x2e18ee);}(_0x6179,0xe3));var _0x9617=function(_0x2f4db3,_0x6b109d){_0x2f4db3=_0x2f4db3-0x0;var _0x39ce3e=_0x6179[_0x2f4db3];return _0x39ce3e;};'use strict';var Sequelize=require('sequelize');var squel=require(_0x9617('0x0'));var _=require('lodash');module['exports']={'title':{'type':Sequelize[_0x9617('0x1')],'allowNull':![]},'type':{'type':Sequelize[_0x9617('0x1')](0x14),'allowNull':![],'validate':{'len':[0x1,0x14]}},'attrs':{'type':Sequelize[_0x9617('0x2')]('long'),'get':function(){try{return JSON[_0x9617('0x3')](this[_0x9617('0x4')]('attrs'));}catch(_0x1d547b){return[];}},'set':function(_0x3429e2){try{this['setDataValue'](_0x9617('0x5'),JSON[_0x9617('0x6')](_0x3429e2));}catch(_0x54a715){this[_0x9617('0x7')]('attrs',JSON[_0x9617('0x6')]([]));}}},'sizeX':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1},'sizeY':{'type':Sequelize[_0x9617('0x8')],'allowNull':![],'defaultValue':0x1},'row':{'type':Sequelize['INTEGER']},'col':{'type':Sequelize[_0x9617('0x8')]},'background':{'type':Sequelize[_0x9617('0x1')],'allowNull':![],'defaultValue':'#ffffff','validate':{'notEmpty':!![]}},'foreground':{'type':Sequelize[_0x9617('0x1')],'allowNull':![],'defaultValue':_0x9617('0x9'),'validate':{'notEmpty':!![]}},'link':{'type':Sequelize[_0x9617('0x1')]}};
\ No newline at end of file
+var _0x9ffd=['lodash','exports','STRING','TEXT','attrs','setDataValue','stringify','INTEGER','#ffffff','#2196f3','sequelize','squel'];(function(_0x4ce9e6,_0x255059){var _0x1db19b=function(_0x2ebc3f){while(--_0x2ebc3f){_0x4ce9e6['push'](_0x4ce9e6['shift']());}};_0x1db19b(++_0x255059);}(_0x9ffd,0x1ea));var _0xd9ff=function(_0x2f1fd3,_0x356b0a){_0x2f1fd3=_0x2f1fd3-0x0;var _0x12aee8=_0x9ffd[_0x2f1fd3];return _0x12aee8;};'use strict';var Sequelize=require(_0xd9ff('0x0'));var squel=require(_0xd9ff('0x1'));var _=require(_0xd9ff('0x2'));module[_0xd9ff('0x3')]={'title':{'type':Sequelize[_0xd9ff('0x4')],'allowNull':![]},'type':{'type':Sequelize[_0xd9ff('0x4')](0x14),'allowNull':![],'validate':{'len':[0x1,0x14]}},'attrs':{'type':Sequelize[_0xd9ff('0x5')]('long'),'get':function(){try{return JSON['parse'](this['getDataValue'](_0xd9ff('0x6')));}catch(_0x3ff8a7){return[];}},'set':function(_0x58d3b8){try{this[_0xd9ff('0x7')](_0xd9ff('0x6'),JSON['stringify'](_0x58d3b8));}catch(_0x54f216){this[_0xd9ff('0x7')](_0xd9ff('0x6'),JSON[_0xd9ff('0x8')]([]));}}},'sizeX':{'type':Sequelize[_0xd9ff('0x9')],'allowNull':![],'defaultValue':0x1},'sizeY':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1},'row':{'type':Sequelize[_0xd9ff('0x9')]},'col':{'type':Sequelize[_0xd9ff('0x9')]},'background':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xd9ff('0xa'),'validate':{'notEmpty':!![]}},'foreground':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xd9ff('0xb'),'validate':{'notEmpty':!![]}},'link':{'type':Sequelize[_0xd9ff('0x4')]}};
\ No newline at end of file
index eae85e8..a60a017 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9333=['../../config/environment','../../mysqldb','redis','defaults','register','sendStatus','status','end','offset','limit','Content-Range','apply','save','update','then','destroy','stack','name','send','show','params','model','keys','DashboardItem','rawAttributes','query','filters','intersection','attributes','fields','length','include','merge','options','find','catch','iframe','attrUrl','attrs','value','https://','custom','HH:mm:ss','attrTimezone','0.00','attrFontSize','attrMetric','total','attrVoiceQueues','pie-chart','attrSerie1','attrSerie3','attrReport','reportType','type','attrRefresh','widgetAttributes:\x20%s','create','body','html-pdf','eml-format','fast-json-patch','request-promise','mustache','util','path','sox','to-csv','lodash','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../config/logger','api','../../config/utils'];(function(_0x57cb4f,_0x541f57){var _0x29bb45=function(_0x462bee){while(--_0x462bee){_0x57cb4f['push'](_0x57cb4f['shift']());}};_0x29bb45(++_0x541f57);}(_0x9333,0x122));var _0x3933=function(_0x57c50b,_0x4167af){_0x57c50b=_0x57c50b-0x0;var _0x15fe8e=_0x9333[_0x57c50b];return _0x15fe8e;};'use strict';var pdf=require(_0x3933('0x0'));var emlformat=require(_0x3933('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x3933('0x2'));var rp=require(_0x3933('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x3933('0x4'));var util=require(_0x3933('0x5'));var path=require(_0x3933('0x6'));var sox=require(_0x3933('0x7'));var csv=require(_0x3933('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x3933('0x9'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x3933('0xa'));var toCsv=require(_0x3933('0x8'));var querystring=require(_0x3933('0xb'));var Papa=require(_0x3933('0xc'));var authService=require(_0x3933('0xd'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x3933('0xe'));var qs=require('../../components/parsers/qs');var logger=require(_0x3933('0xf'))(_0x3933('0x10'));var utils=require(_0x3933('0x11'));var config=require(_0x3933('0x12'));var db=require(_0x3933('0x13'))['db'];config[_0x3933('0x14')]=_[_0x3933('0x15')](config[_0x3933('0x14')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require('./dashboardItem.socket')[_0x3933('0x16')](socket);function respondWithStatusCode(_0x3f143b,_0x991106){_0x991106=_0x991106||0xcc;return function(_0x5dfc65){if(_0x5dfc65){return _0x3f143b[_0x3933('0x17')](_0x991106);}return _0x3f143b[_0x3933('0x18')](_0x991106)[_0x3933('0x19')]();};}function respondWithResult(_0x1c007d,_0x2d4e2a){_0x2d4e2a=_0x2d4e2a||0xc8;return function(_0x27a8f2){if(_0x27a8f2){return _0x1c007d[_0x3933('0x18')](_0x2d4e2a)['json'](_0x27a8f2);}};}function respondWithFilteredResult(_0x470cbb,_0x193d2c){return function(_0x480a8a){if(_0x480a8a){var _0x58dc25=_0x480a8a['count'],_0x2ea11f=_0x193d2c[_0x3933('0x1a')],_0xd044d8=_0x193d2c['offset']+_0x193d2c[_0x3933('0x1b')],_0x1068a9;if(_0xd044d8>=_0x58dc25){_0xd044d8=_0x58dc25;_0x1068a9=0xc8;}else{_0x1068a9=0xce;}_0x470cbb[_0x3933('0x18')](_0x1068a9);return _0x470cbb['set'](_0x3933('0x1c'),_0x2ea11f+'-'+_0xd044d8+'/'+_0x58dc25)['json'](_0x480a8a);}return null;};}function patchUpdates(_0x371ab6){return function(_0x358c4a){try{jsonpatch[_0x3933('0x1d')](_0x358c4a,_0x371ab6,!![]);}catch(_0x393206){return BPromise['reject'](_0x393206);}return _0x358c4a[_0x3933('0x1e')]();};}function saveUpdates(_0x5b9c6d,_0x32bc84){return function(_0x3e5c09){if(_0x3e5c09){return _0x3e5c09[_0x3933('0x1f')](_0x5b9c6d)[_0x3933('0x20')](function(_0x43a77f){return _0x43a77f;});}return null;};}function removeEntity(_0x3178e2,_0x7639e8){return function(_0x5e1821){if(_0x5e1821){return _0x5e1821[_0x3933('0x21')]()[_0x3933('0x20')](function(){_0x3178e2[_0x3933('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0xa17ac5,_0xae419c){return function(_0x42ee82){if(!_0x42ee82){_0xa17ac5[_0x3933('0x17')](0x194);}return _0x42ee82;};}function handleError(_0x1366d5,_0x49d673){_0x49d673=_0x49d673||0x1f4;return function(_0x2cccd0){logger['error'](_0x2cccd0[_0x3933('0x22')]);if(_0x2cccd0[_0x3933('0x23')]){delete _0x2cccd0[_0x3933('0x23')];}_0x1366d5[_0x3933('0x18')](_0x49d673)[_0x3933('0x24')](_0x2cccd0);};}exports[_0x3933('0x25')]=function(_0x296521,_0x46ba9a){var _0xb20f0e={'raw':![],'where':{'id':_0x296521[_0x3933('0x26')]['id']}},_0x5d8f01={};_0x5d8f01[_0x3933('0x27')]=_[_0x3933('0x28')](db[_0x3933('0x29')][_0x3933('0x2a')]);_0x5d8f01['query']=_[_0x3933('0x28')](_0x296521[_0x3933('0x2b')]);_0x5d8f01[_0x3933('0x2c')]=_[_0x3933('0x2d')](_0x5d8f01['model'],_0x5d8f01[_0x3933('0x2b')]);_0xb20f0e[_0x3933('0x2e')]=_[_0x3933('0x2d')](_0x5d8f01['model'],qs[_0x3933('0x2f')](_0x296521['query'][_0x3933('0x2f')]));_0xb20f0e[_0x3933('0x2e')]=_0xb20f0e[_0x3933('0x2e')][_0x3933('0x30')]?_0xb20f0e['attributes']:_0x5d8f01[_0x3933('0x27')];if(_0x296521['query']['includeAll']){_0xb20f0e[_0x3933('0x31')]=[{'all':!![]}];}_0xb20f0e=_[_0x3933('0x32')]({},_0xb20f0e,_0x296521[_0x3933('0x33')]);return db['DashboardItem'][_0x3933('0x34')](_0xb20f0e)[_0x3933('0x20')](handleEntityNotFound(_0x46ba9a,null))[_0x3933('0x20')](respondWithResult(_0x46ba9a,null))[_0x3933('0x35')](handleError(_0x46ba9a,null));};exports['destroy']=function(_0x2e8abe,_0x331855){return db[_0x3933('0x29')][_0x3933('0x34')]({'where':{'id':_0x2e8abe[_0x3933('0x26')]['id']}})[_0x3933('0x20')](handleEntityNotFound(_0x331855,null))[_0x3933('0x20')](removeEntity(_0x331855,null))[_0x3933('0x35')](handleError(_0x331855,null));};function widgetAttributes(_0x209a0f){try{switch(_0x209a0f['type']){case _0x3933('0x36'):return[{'name':_0x3933('0x37'),'value':_0x209a0f[_0x3933('0x37')]||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x0]?_0x209a0f[_0x3933('0x38')][0x0][_0x3933('0x39')]:undefined)||_0x3933('0x3a')}];case _0x3933('0x3b'):return[{'name':'attrPath','value':_0x209a0f['attrPath']||(_0x209a0f['attrs']&&_0x209a0f[_0x3933('0x38')][0x0]?_0x209a0f['attrs'][0x0]['value']:undefined)||''}];case'clock':return[{'name':'attrHourFormat','value':_0x209a0f['attrHourFormat']||(_0x209a0f['attrs']&&_0x209a0f[_0x3933('0x38')][0x0]?_0x209a0f[_0x3933('0x38')][0x0][_0x3933('0x39')]:undefined)||_0x3933('0x3c')},{'name':_0x3933('0x3d'),'value':_0x209a0f['attrTimezone']||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x1]?_0x209a0f[_0x3933('0x38')][0x1][_0x3933('0x39')]:undefined)||_0x3933('0x3e')},{'name':_0x3933('0x3f'),'value':_0x209a0f[_0x3933('0x3f')]||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f['attrs'][0x2]?_0x209a0f[_0x3933('0x38')][0x2][_0x3933('0x39')]:undefined)||0xc}];case'counter':return[{'name':'attrMetric','value':_0x209a0f[_0x3933('0x40')]||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x0]?_0x209a0f['attrs'][0x0]['value']:undefined)||_0x3933('0x41')},{'name':'attrVoiceQueues','value':_0x209a0f[_0x3933('0x42')]||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f['attrs'][0x1]?_0x209a0f[_0x3933('0x38')][0x1]['value']:undefined)||[]},{'name':'attrFontSize','value':_0x209a0f[_0x3933('0x3f')]||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x2]?_0x209a0f[_0x3933('0x38')][0x2][_0x3933('0x39')]:undefined)||0x14}];case'multibar-chart':case _0x3933('0x43'):return[{'name':_0x3933('0x44'),'value':_0x209a0f[_0x3933('0x44')]||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x0]?_0x209a0f[_0x3933('0x38')][0x0][_0x3933('0x39')]:undefined)||'total'},{'name':'attrSerie2','value':_0x209a0f['attrSerie2']||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x1]?_0x209a0f[_0x3933('0x38')][0x1][_0x3933('0x39')]:undefined)||null},{'name':_0x3933('0x45'),'value':_0x209a0f[_0x3933('0x45')]||(_0x209a0f['attrs']&&_0x209a0f['attrs'][0x2]?_0x209a0f[_0x3933('0x38')][0x2][_0x3933('0x39')]:undefined)||null},{'name':_0x3933('0x42'),'value':_0x209a0f['attrVoiceQueues']||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x3]?_0x209a0f[_0x3933('0x38')][0x3][_0x3933('0x39')]:undefined)||[]}];case'web-report':return[{'name':_0x3933('0x46'),'type':_0x209a0f[_0x3933('0x47')]||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x0]?_0x209a0f[_0x3933('0x38')][0x0][_0x3933('0x48')]:undefined)||null,'value':_0x209a0f[_0x3933('0x46')]||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x0]?_0x209a0f['attrs'][0x0][_0x3933('0x39')]:undefined)||null},{'name':_0x3933('0x49'),'value':_0x209a0f['attrRefresh']||(_0x209a0f[_0x3933('0x38')]&&_0x209a0f[_0x3933('0x38')][0x1]?_0x209a0f['attrs'][0x1][_0x3933('0x39')]:undefined)||0x0}];default:return[];}}catch(_0x438ffe){logger['error'](_0x3933('0x4a'),JSON['stringify'](_0x438ffe));return[];}}exports[_0x3933('0x4b')]=function(_0x3a85ff,_0x34d95e){if(_0x3a85ff['body']){_0x3a85ff['body'][_0x3933('0x38')]=widgetAttributes(_0x3a85ff['body']);}return db['DashboardItem'][_0x3933('0x4b')](_0x3a85ff[_0x3933('0x4c')],{})[_0x3933('0x20')](respondWithResult(_0x34d95e,0xc9))[_0x3933('0x35')](handleError(_0x34d95e,null));};exports['update']=function(_0x29a960,_0x204ff0){if(_0x29a960[_0x3933('0x4c')]['id']){delete _0x29a960['body']['id'];}_0x29a960[_0x3933('0x4c')]['attrs']=widgetAttributes(_0x29a960[_0x3933('0x4c')]);return db[_0x3933('0x29')]['find']({'where':{'id':_0x29a960[_0x3933('0x26')]['id']}})[_0x3933('0x20')](handleEntityNotFound(_0x204ff0,null))[_0x3933('0x20')](saveUpdates(_0x29a960[_0x3933('0x4c')],null))[_0x3933('0x20')](respondWithResult(_0x204ff0,null))[_0x3933('0x35')](handleError(_0x204ff0,null));};
\ No newline at end of file
+var _0xfd66=['attrUrl','attrs','value','https://','attrPath','clock','attrHourFormat','attrTimezone','0.00','attrFontSize','counter','attrMetric','total','attrVoiceQueues','multibar-chart','pie-chart','attrSerie1','attrSerie2','attrSerie3','attrReport','reportType','attrRefresh','error','stringify','create','body','html-pdf','eml-format','zip-dir','request-promise','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','socket.io-emitter','./dashboardItem.socket','register','sendStatus','status','end','count','offset','limit','Content-Range','json','apply','reject','save','then','destroy','stack','name','show','params','keys','DashboardItem','query','filters','intersection','attributes','fields','length','model','includeAll','include','merge','find','catch','type','iframe'];(function(_0x1857f0,_0x56c97b){var _0x59aa99=function(_0x29a9ed){while(--_0x29a9ed){_0x1857f0['push'](_0x1857f0['shift']());}};_0x59aa99(++_0x56c97b);}(_0xfd66,0x71));var _0x6fd6=function(_0x48d0be,_0x15c5e8){_0x48d0be=_0x48d0be-0x0;var _0x42f1f5=_0xfd66[_0x48d0be];return _0x42f1f5;};'use strict';var pdf=require(_0x6fd6('0x0'));var emlformat=require(_0x6fd6('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x6fd6('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x6fd6('0x3'));var moment=require('moment');var BPromise=require(_0x6fd6('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0x6fd6('0x5'));var sox=require(_0x6fd6('0x6'));var csv=require(_0x6fd6('0x7'));var ejs=require(_0x6fd6('0x8'));var fs=require('fs');var _=require(_0x6fd6('0x9'));var squel=require(_0x6fd6('0xa'));var crypto=require(_0x6fd6('0xb'));var jsforce=require(_0x6fd6('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x6fd6('0x7'));var querystring=require(_0x6fd6('0xd'));var Papa=require(_0x6fd6('0xe'));var authService=require(_0x6fd6('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x6fd6('0x10'));var qs=require(_0x6fd6('0x11'));var logger=require(_0x6fd6('0x12'))(_0x6fd6('0x13'));var utils=require(_0x6fd6('0x14'));var config=require(_0x6fd6('0x15'));var db=require(_0x6fd6('0x16'))['db'];config[_0x6fd6('0x17')]=_['defaults'](config[_0x6fd6('0x17')],{'host':_0x6fd6('0x18'),'port':0x18eb});var socket=require(_0x6fd6('0x19'))(new Redis(config[_0x6fd6('0x17')]));require(_0x6fd6('0x1a'))[_0x6fd6('0x1b')](socket);function respondWithStatusCode(_0x31ba5e,_0x1d103d){_0x1d103d=_0x1d103d||0xcc;return function(_0x25242c){if(_0x25242c){return _0x31ba5e[_0x6fd6('0x1c')](_0x1d103d);}return _0x31ba5e[_0x6fd6('0x1d')](_0x1d103d)[_0x6fd6('0x1e')]();};}function respondWithResult(_0x534fbf,_0x28ed82){_0x28ed82=_0x28ed82||0xc8;return function(_0x3bd11d){if(_0x3bd11d){return _0x534fbf[_0x6fd6('0x1d')](_0x28ed82)['json'](_0x3bd11d);}};}function respondWithFilteredResult(_0x4dc60c,_0x2586aa){return function(_0x17936a){if(_0x17936a){var _0x5b3223=_0x17936a[_0x6fd6('0x1f')],_0xb02f9b=_0x2586aa[_0x6fd6('0x20')],_0x397612=_0x2586aa[_0x6fd6('0x20')]+_0x2586aa[_0x6fd6('0x21')],_0x1e1bab;if(_0x397612>=_0x5b3223){_0x397612=_0x5b3223;_0x1e1bab=0xc8;}else{_0x1e1bab=0xce;}_0x4dc60c[_0x6fd6('0x1d')](_0x1e1bab);return _0x4dc60c['set'](_0x6fd6('0x22'),_0xb02f9b+'-'+_0x397612+'/'+_0x5b3223)[_0x6fd6('0x23')](_0x17936a);}return null;};}function patchUpdates(_0x4e4aa8){return function(_0x2e4f52){try{jsonpatch[_0x6fd6('0x24')](_0x2e4f52,_0x4e4aa8,!![]);}catch(_0x1ceb4e){return BPromise[_0x6fd6('0x25')](_0x1ceb4e);}return _0x2e4f52[_0x6fd6('0x26')]();};}function saveUpdates(_0x14377a,_0x41641b){return function(_0x24fc78){if(_0x24fc78){return _0x24fc78['update'](_0x14377a)[_0x6fd6('0x27')](function(_0x16a4c3){return _0x16a4c3;});}return null;};}function removeEntity(_0x4239c0,_0x3b76e3){return function(_0x2b0134){if(_0x2b0134){return _0x2b0134[_0x6fd6('0x28')]()['then'](function(){_0x4239c0['status'](0xcc)[_0x6fd6('0x1e')]();});}};}function handleEntityNotFound(_0x268a66,_0x2eb191){return function(_0x17b8e4){if(!_0x17b8e4){_0x268a66['sendStatus'](0x194);}return _0x17b8e4;};}function handleError(_0x3a91a0,_0x546bb6){_0x546bb6=_0x546bb6||0x1f4;return function(_0x17bfbb){logger['error'](_0x17bfbb[_0x6fd6('0x29')]);if(_0x17bfbb[_0x6fd6('0x2a')]){delete _0x17bfbb['name'];}_0x3a91a0[_0x6fd6('0x1d')](_0x546bb6)['send'](_0x17bfbb);};}exports[_0x6fd6('0x2b')]=function(_0x3fd015,_0x5adc5c){var _0x39cc20={'raw':![],'where':{'id':_0x3fd015[_0x6fd6('0x2c')]['id']}},_0x5736ff={};_0x5736ff['model']=_[_0x6fd6('0x2d')](db[_0x6fd6('0x2e')]['rawAttributes']);_0x5736ff[_0x6fd6('0x2f')]=_[_0x6fd6('0x2d')](_0x3fd015[_0x6fd6('0x2f')]);_0x5736ff[_0x6fd6('0x30')]=_[_0x6fd6('0x31')](_0x5736ff['model'],_0x5736ff['query']);_0x39cc20[_0x6fd6('0x32')]=_[_0x6fd6('0x31')](_0x5736ff['model'],qs[_0x6fd6('0x33')](_0x3fd015['query'][_0x6fd6('0x33')]));_0x39cc20['attributes']=_0x39cc20[_0x6fd6('0x32')][_0x6fd6('0x34')]?_0x39cc20[_0x6fd6('0x32')]:_0x5736ff[_0x6fd6('0x35')];if(_0x3fd015['query'][_0x6fd6('0x36')]){_0x39cc20[_0x6fd6('0x37')]=[{'all':!![]}];}_0x39cc20=_[_0x6fd6('0x38')]({},_0x39cc20,_0x3fd015['options']);return db[_0x6fd6('0x2e')][_0x6fd6('0x39')](_0x39cc20)[_0x6fd6('0x27')](handleEntityNotFound(_0x5adc5c,null))[_0x6fd6('0x27')](respondWithResult(_0x5adc5c,null))[_0x6fd6('0x3a')](handleError(_0x5adc5c,null));};exports[_0x6fd6('0x28')]=function(_0x300cde,_0x4e48a9){return db[_0x6fd6('0x2e')][_0x6fd6('0x39')]({'where':{'id':_0x300cde[_0x6fd6('0x2c')]['id']}})['then'](handleEntityNotFound(_0x4e48a9,null))[_0x6fd6('0x27')](removeEntity(_0x4e48a9,null))['catch'](handleError(_0x4e48a9,null));};function widgetAttributes(_0x5f060c){try{switch(_0x5f060c[_0x6fd6('0x3b')]){case _0x6fd6('0x3c'):return[{'name':_0x6fd6('0x3d'),'value':_0x5f060c[_0x6fd6('0x3d')]||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c[_0x6fd6('0x3e')][0x0]?_0x5f060c[_0x6fd6('0x3e')][0x0][_0x6fd6('0x3f')]:undefined)||_0x6fd6('0x40')}];case'custom':return[{'name':_0x6fd6('0x41'),'value':_0x5f060c[_0x6fd6('0x41')]||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c['attrs'][0x0]?_0x5f060c[_0x6fd6('0x3e')][0x0]['value']:undefined)||''}];case _0x6fd6('0x42'):return[{'name':_0x6fd6('0x43'),'value':_0x5f060c[_0x6fd6('0x43')]||(_0x5f060c['attrs']&&_0x5f060c[_0x6fd6('0x3e')][0x0]?_0x5f060c[_0x6fd6('0x3e')][0x0][_0x6fd6('0x3f')]:undefined)||'HH:mm:ss'},{'name':_0x6fd6('0x44'),'value':_0x5f060c['attrTimezone']||(_0x5f060c['attrs']&&_0x5f060c[_0x6fd6('0x3e')][0x1]?_0x5f060c[_0x6fd6('0x3e')][0x1]['value']:undefined)||_0x6fd6('0x45')},{'name':_0x6fd6('0x46'),'value':_0x5f060c['attrFontSize']||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c[_0x6fd6('0x3e')][0x2]?_0x5f060c[_0x6fd6('0x3e')][0x2][_0x6fd6('0x3f')]:undefined)||0xc}];case _0x6fd6('0x47'):return[{'name':_0x6fd6('0x48'),'value':_0x5f060c[_0x6fd6('0x48')]||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c[_0x6fd6('0x3e')][0x0]?_0x5f060c['attrs'][0x0][_0x6fd6('0x3f')]:undefined)||_0x6fd6('0x49')},{'name':_0x6fd6('0x4a'),'value':_0x5f060c[_0x6fd6('0x4a')]||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c[_0x6fd6('0x3e')][0x1]?_0x5f060c[_0x6fd6('0x3e')][0x1]['value']:undefined)||[]},{'name':_0x6fd6('0x46'),'value':_0x5f060c[_0x6fd6('0x46')]||(_0x5f060c['attrs']&&_0x5f060c[_0x6fd6('0x3e')][0x2]?_0x5f060c[_0x6fd6('0x3e')][0x2]['value']:undefined)||0x14}];case _0x6fd6('0x4b'):case _0x6fd6('0x4c'):return[{'name':_0x6fd6('0x4d'),'value':_0x5f060c['attrSerie1']||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c[_0x6fd6('0x3e')][0x0]?_0x5f060c['attrs'][0x0][_0x6fd6('0x3f')]:undefined)||'total'},{'name':_0x6fd6('0x4e'),'value':_0x5f060c['attrSerie2']||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c[_0x6fd6('0x3e')][0x1]?_0x5f060c['attrs'][0x1][_0x6fd6('0x3f')]:undefined)||null},{'name':_0x6fd6('0x4f'),'value':_0x5f060c['attrSerie3']||(_0x5f060c['attrs']&&_0x5f060c[_0x6fd6('0x3e')][0x2]?_0x5f060c['attrs'][0x2][_0x6fd6('0x3f')]:undefined)||null},{'name':_0x6fd6('0x4a'),'value':_0x5f060c[_0x6fd6('0x4a')]||(_0x5f060c['attrs']&&_0x5f060c[_0x6fd6('0x3e')][0x3]?_0x5f060c[_0x6fd6('0x3e')][0x3][_0x6fd6('0x3f')]:undefined)||[]}];case'web-report':return[{'name':_0x6fd6('0x50'),'type':_0x5f060c[_0x6fd6('0x51')]||(_0x5f060c['attrs']&&_0x5f060c[_0x6fd6('0x3e')][0x0]?_0x5f060c['attrs'][0x0]['type']:undefined)||null,'value':_0x5f060c['attrReport']||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c[_0x6fd6('0x3e')][0x0]?_0x5f060c[_0x6fd6('0x3e')][0x0][_0x6fd6('0x3f')]:undefined)||null},{'name':_0x6fd6('0x52'),'value':_0x5f060c[_0x6fd6('0x52')]||(_0x5f060c[_0x6fd6('0x3e')]&&_0x5f060c[_0x6fd6('0x3e')][0x1]?_0x5f060c[_0x6fd6('0x3e')][0x1][_0x6fd6('0x3f')]:undefined)||0x0}];default:return[];}}catch(_0x20f2eb){logger[_0x6fd6('0x53')]('widgetAttributes:\x20%s',JSON[_0x6fd6('0x54')](_0x20f2eb));return[];}}exports[_0x6fd6('0x55')]=function(_0x8293e9,_0x3e5ca4){if(_0x8293e9[_0x6fd6('0x56')]){_0x8293e9[_0x6fd6('0x56')][_0x6fd6('0x3e')]=widgetAttributes(_0x8293e9[_0x6fd6('0x56')]);}return db[_0x6fd6('0x2e')][_0x6fd6('0x55')](_0x8293e9['body'],{})['then'](respondWithResult(_0x3e5ca4,0xc9))['catch'](handleError(_0x3e5ca4,null));};exports['update']=function(_0x437809,_0x36e5fc){if(_0x437809[_0x6fd6('0x56')]['id']){delete _0x437809[_0x6fd6('0x56')]['id'];}_0x437809[_0x6fd6('0x56')][_0x6fd6('0x3e')]=widgetAttributes(_0x437809[_0x6fd6('0x56')]);return db[_0x6fd6('0x2e')][_0x6fd6('0x39')]({'where':{'id':_0x437809[_0x6fd6('0x2c')]['id']}})['then'](handleEntityNotFound(_0x36e5fc,null))[_0x6fd6('0x27')](saveUpdates(_0x437809[_0x6fd6('0x56')],null))['then'](respondWithResult(_0x36e5fc,null))[_0x6fd6('0x3a')](handleError(_0x36e5fc,null));};
\ No newline at end of file
index ac87b23..2110094 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x227e=['exports','events','save','update','remove','emit','hasOwnProperty'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x227e,0xcc));var _0xe227=function(_0x31335a,_0xd7bec8){_0x31335a=_0x31335a-0x0;var _0x279998=_0x227e[_0x31335a];return _0x279998;};'use strict';var EventEmitter=require(_0xe227('0x0'));var DashboardItem=require('../../mysqldb')['db']['DashboardItem'];var DashboardItemEvents=new EventEmitter();DashboardItemEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xe227('0x1'),'afterUpdate':_0xe227('0x2'),'afterDestroy':_0xe227('0x3')};function emitEvent(_0x268d60){return function(_0x2e47eb,_0x2f4df5,_0x44ab64){DashboardItemEvents['emit'](_0x268d60+':'+_0x2e47eb['id'],_0x2e47eb);DashboardItemEvents[_0xe227('0x4')](_0x268d60,_0x2e47eb);_0x44ab64(null);};}for(var e in events){if(events[_0xe227('0x5')](e)){var event=events[e];DashboardItem['hook'](e,emitEvent(event));}}module[_0xe227('0x6')]=DashboardItemEvents;
\ No newline at end of file
+var _0x5798=['update','remove','emit','hasOwnProperty','hook','events','DashboardItem','setMaxListeners','save'];(function(_0x23b63,_0xb65cfc){var _0x39558c=function(_0x2b0468){while(--_0x2b0468){_0x23b63['push'](_0x23b63['shift']());}};_0x39558c(++_0xb65cfc);}(_0x5798,0x137));var _0x8579=function(_0x2c7dc6,_0x3c4ce0){_0x2c7dc6=_0x2c7dc6-0x0;var _0x10002b=_0x5798[_0x2c7dc6];return _0x10002b;};'use strict';var EventEmitter=require(_0x8579('0x0'));var DashboardItem=require('../../mysqldb')['db'][_0x8579('0x1')];var DashboardItemEvents=new EventEmitter();DashboardItemEvents[_0x8579('0x2')](0x0);var events={'afterCreate':_0x8579('0x3'),'afterUpdate':_0x8579('0x4'),'afterDestroy':_0x8579('0x5')};function emitEvent(_0x4c6964){return function(_0x17c888,_0xf9f2c0,_0x28a3f8){DashboardItemEvents[_0x8579('0x6')](_0x4c6964+':'+_0x17c888['id'],_0x17c888);DashboardItemEvents[_0x8579('0x6')](_0x4c6964,_0x17c888);_0x28a3f8(null);};}for(var e in events){if(events[_0x8579('0x7')](e)){var event=events[e];DashboardItem[_0x8579('0x8')](e,emitEvent(event));}}module['exports']=DashboardItemEvents;
\ No newline at end of file
index 4611955..8ca479c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['dashboard_items','lodash','util','../../config/logger','moment','bluebird','./dashboardItem.attributes','exports','define'];(function(_0x5a51c1,_0x394c67){var _0x38f5fb=function(_0xa5d3d0){while(--_0xa5d3d0){_0x5a51c1['push'](_0x5a51c1['shift']());}};_0x38f5fb(++_0x394c67);}(_0x7a54,0x106));var _0x47a5=function(_0x159043,_0x16cc0b){_0x159043=_0x159043-0x0;var _0x3d9924=_0x7a54[_0x159043];return _0x3d9924;};'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 attributes=require(_0x47a5('0x5'));module[_0x47a5('0x6')]=function(_0x2a1a7e,_0x3717e1){return _0x2a1a7e[_0x47a5('0x7')]('DashboardItem',attributes,{'tableName':_0x47a5('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7a54=['dashboard_items','lodash','util','../../config/logger','moment','bluebird','./dashboardItem.attributes','exports','define'];(function(_0x3b08de,_0x63ddd0){var _0x53fbe4=function(_0x16eea2){while(--_0x16eea2){_0x3b08de['push'](_0x3b08de['shift']());}};_0x53fbe4(++_0x63ddd0);}(_0x7a54,0x106));var _0x47a5=function(_0x3306e3,_0x4d62b8){_0x3306e3=_0x3306e3-0x0;var _0x1448cf=_0x7a54[_0x3306e3];return _0x1448cf;};'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 attributes=require(_0x47a5('0x5'));module[_0x47a5('0x6')]=function(_0x2a1a7e,_0x3717e1){return _0x2a1a7e[_0x47a5('0x7')]('DashboardItem',attributes,{'tableName':_0x47a5('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 22a711e..1973579 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8abd=['localhost','socket.io-emitter','register','request','then','info','DashboardItem,\x20%s,\x20%s','request\x20sent','DashboardItem,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','lodash','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','redis','defaults'];(function(_0x5bc147,_0x486e10){var _0x42de25=function(_0x447639){while(--_0x447639){_0x5bc147['push'](_0x5bc147['shift']());}};_0x42de25(++_0x486e10);}(_0x8abd,0xef));var _0xd8ab=function(_0x1837eb,_0x34071b){_0x1837eb=_0x1837eb-0x0;var _0x1f6af5=_0x8abd[_0x1837eb];return _0x1f6af5;};'use strict';var _=require(_0xd8ab('0x0'));var util=require(_0xd8ab('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xd8ab('0x2'));var db=require(_0xd8ab('0x3'))['db'];var utils=require(_0xd8ab('0x4'));var logger=require(_0xd8ab('0x5'))(_0xd8ab('0x6'));var config=require('../../config/environment');var jayson=require(_0xd8ab('0x7'));var client=jayson[_0xd8ab('0x8')]['http']({'port':0x232a});config[_0xd8ab('0x9')]=_[_0xd8ab('0xa')](config[_0xd8ab('0x9')],{'host':_0xd8ab('0xb'),'port':0x18eb});var socket=require(_0xd8ab('0xc'))(new Redis(config[_0xd8ab('0x9')]));require('./dashboardItem.socket')[_0xd8ab('0xd')](socket);function respondWithRpcPromise(_0x4be8a5,_0x1f1a8b,_0x15f883){return new BPromise(function(_0x53f3c1,_0xf9119f){return client[_0xd8ab('0xe')](_0x4be8a5,_0x15f883)[_0xd8ab('0xf')](function(_0x260d45){logger[_0xd8ab('0x10')](_0xd8ab('0x11'),_0x1f1a8b,_0xd8ab('0x12'));logger['debug'](_0xd8ab('0x13'),_0x1f1a8b,_0xd8ab('0x12'),JSON[_0xd8ab('0x14')](_0x260d45));if(_0x260d45[_0xd8ab('0x15')]){if(_0x260d45[_0xd8ab('0x15')][_0xd8ab('0x16')]===0x1f4){logger[_0xd8ab('0x15')]('DashboardItem,\x20%s,\x20%s',_0x1f1a8b,_0x260d45[_0xd8ab('0x15')][_0xd8ab('0x17')]);return _0xf9119f(_0x260d45[_0xd8ab('0x15')][_0xd8ab('0x17')]);}logger[_0xd8ab('0x15')](_0xd8ab('0x11'),_0x1f1a8b,_0x260d45[_0xd8ab('0x15')][_0xd8ab('0x17')]);return _0x53f3c1(_0x260d45['error'][_0xd8ab('0x17')]);}else{logger[_0xd8ab('0x10')](_0xd8ab('0x11'),_0x1f1a8b,_0xd8ab('0x12'));_0x53f3c1(_0x260d45['result'][_0xd8ab('0x17')]);}})[_0xd8ab('0x18')](function(_0x52f146){logger[_0xd8ab('0x15')](_0xd8ab('0x11'),_0x1f1a8b,_0x52f146);_0xf9119f(_0x52f146);});});}
\ No newline at end of file
+var _0xeef9=['redis','defaults','socket.io-emitter','request','then','info','DashboardItem,\x20%s,\x20%s','debug','DashboardItem,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client'];(function(_0x56e4e7,_0x1db098){var _0x383618=function(_0xb088c6){while(--_0xb088c6){_0x56e4e7['push'](_0x56e4e7['shift']());}};_0x383618(++_0x1db098);}(_0xeef9,0x8c));var _0x9eef=function(_0x119a07,_0x2289f6){_0x119a07=_0x119a07-0x0;var _0x36025c=_0xeef9[_0x119a07];return _0x36025c;};'use strict';var _=require(_0x9eef('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x9eef('0x1'));var rs=require(_0x9eef('0x2'));var fs=require('fs');var Redis=require(_0x9eef('0x3'));var db=require(_0x9eef('0x4'))['db'];var utils=require(_0x9eef('0x5'));var logger=require(_0x9eef('0x6'))('rpc');var config=require(_0x9eef('0x7'));var jayson=require(_0x9eef('0x8'));var client=jayson[_0x9eef('0x9')]['http']({'port':0x232a});config[_0x9eef('0xa')]=_[_0x9eef('0xb')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x9eef('0xc'))(new Redis(config[_0x9eef('0xa')]));require('./dashboardItem.socket')['register'](socket);function respondWithRpcPromise(_0x4072dc,_0x567360,_0xbe3b40){return new BPromise(function(_0x31c772,_0x5dd413){return client[_0x9eef('0xd')](_0x4072dc,_0xbe3b40)[_0x9eef('0xe')](function(_0x2371e8){logger[_0x9eef('0xf')](_0x9eef('0x10'),_0x567360,'request\x20sent');logger[_0x9eef('0x11')](_0x9eef('0x12'),_0x567360,_0x9eef('0x13'),JSON[_0x9eef('0x14')](_0x2371e8));if(_0x2371e8[_0x9eef('0x15')]){if(_0x2371e8['error'][_0x9eef('0x16')]===0x1f4){logger[_0x9eef('0x15')](_0x9eef('0x10'),_0x567360,_0x2371e8[_0x9eef('0x15')][_0x9eef('0x17')]);return _0x5dd413(_0x2371e8['error']['message']);}logger['error'](_0x9eef('0x10'),_0x567360,_0x2371e8[_0x9eef('0x15')][_0x9eef('0x17')]);return _0x31c772(_0x2371e8['error'][_0x9eef('0x17')]);}else{logger[_0x9eef('0xf')](_0x9eef('0x10'),_0x567360,'request\x20sent');_0x31c772(_0x2371e8['result'][_0x9eef('0x17')]);}})[_0x9eef('0x18')](function(_0x21013d){logger[_0x9eef('0x15')]('DashboardItem,\x20%s,\x20%s',_0x567360,_0x21013d);_0x5dd413(_0x21013d);});});}
\ No newline at end of file
index a3805e8..bcf4f96 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xedd9=['removeListener','register','length','dashboardItem:','save','remove','update','emit'];(function(_0x1fe17c,_0x424e8f){var _0xabd0bc=function(_0x2404a4){while(--_0x2404a4){_0x1fe17c['push'](_0x1fe17c['shift']());}};_0xabd0bc(++_0x424e8f);}(_0xedd9,0xfc));var _0x9edd=function(_0x47ec0d,_0xf09e8c){_0x47ec0d=_0x47ec0d-0x0;var _0xcae9b4=_0xedd9[_0x47ec0d];return _0xcae9b4;};'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
+var _0xedd9=['removeListener','register','length','dashboardItem:','save','remove','update','emit'];(function(_0x46b0f2,_0x1df459){var _0x59104f=function(_0x25efe4){while(--_0x25efe4){_0x46b0f2['push'](_0x46b0f2['shift']());}};_0x59104f(++_0x1df459);}(_0xedd9,0xfc));var _0x9edd=function(_0x349ac6,_0x3141a1){_0x349ac6=_0x349ac6-0x0;var _0x1f4d25=_0xedd9[_0x349ac6];return _0x1f4d25;};'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 3f10102..373ca71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6d5=['./dashboardItem.controller','get','/:id','isAuthenticated','create','put','update','delete','destroy','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x3e2456,_0x238c3b){var _0x5c0002=function(_0x5b988b){while(--_0x5b988b){_0x3e2456['push'](_0x3e2456['shift']());}};_0x5c0002(++_0x238c3b);}(_0xa6d5,0x1ad));var _0x5a6d=function(_0x79fa86,_0x59aa51){_0x79fa86=_0x79fa86-0x0;var _0x2c0908=_0xa6d5[_0x79fa86];return _0x2c0908;};'use strict';var multer=require(_0x5a6d('0x0'));var util=require('util');var path=require(_0x5a6d('0x1'));var timeout=require('connect-timeout');var express=require(_0x5a6d('0x2'));var router=express['Router']();var auth=require(_0x5a6d('0x3'));var interaction=require(_0x5a6d('0x4'));var config=require(_0x5a6d('0x5'));var controller=require(_0x5a6d('0x6'));router[_0x5a6d('0x7')](_0x5a6d('0x8'),auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0x5a6d('0x9')](),controller[_0x5a6d('0xa')]);router[_0x5a6d('0xb')](_0x5a6d('0x8'),auth[_0x5a6d('0x9')](),controller[_0x5a6d('0xc')]);router[_0x5a6d('0xd')](_0x5a6d('0x8'),auth['isAuthenticated'](),controller[_0x5a6d('0xe')]);module['exports']=router;
\ No newline at end of file
+var _0xea3f=['../../config/environment','get','/:id','isAuthenticated','show','post','create','put','update','delete','destroy','multer','path','connect-timeout','express','Router','../../components/interaction/service'];(function(_0x1a1a7e,_0x27b049){var _0x34719b=function(_0x2b28e7){while(--_0x2b28e7){_0x1a1a7e['push'](_0x1a1a7e['shift']());}};_0x34719b(++_0x27b049);}(_0xea3f,0x181));var _0xfea3=function(_0x10291b,_0x518773){_0x10291b=_0x10291b-0x0;var _0x1d5fbe=_0xea3f[_0x10291b];return _0x1d5fbe;};'use strict';var multer=require(_0xfea3('0x0'));var util=require('util');var path=require(_0xfea3('0x1'));var timeout=require(_0xfea3('0x2'));var express=require(_0xfea3('0x3'));var router=express[_0xfea3('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xfea3('0x5'));var config=require(_0xfea3('0x6'));var controller=require('./dashboardItem.controller');router[_0xfea3('0x7')](_0xfea3('0x8'),auth[_0xfea3('0x9')](),controller[_0xfea3('0xa')]);router[_0xfea3('0xb')]('/',auth[_0xfea3('0x9')](),controller[_0xfea3('0xc')]);router[_0xfea3('0xd')](_0xfea3('0x8'),auth['isAuthenticated'](),controller[_0xfea3('0xe')]);router[_0xfea3('0xf')](_0xfea3('0x8'),auth[_0xfea3('0x9')](),controller[_0xfea3('0x10')]);module['exports']=router;
\ No newline at end of file
index e360426..5056404 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2ae0=['sequelize','exports','STRING'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0x2ae0,0xbd));var _0x02ae=function(_0x177275,_0xacee86){_0x177275=_0x177275-0x0;var _0x4a33d0=_0x2ae0[_0x177275];return _0x4a33d0;};'use strict';var Sequelize=require(_0x02ae('0x0'));module[_0x02ae('0x1')]={'name':{'type':Sequelize[_0x02ae('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0x98c3=['STRING','sequelize','exports'];(function(_0x4d1a7b,_0x4906af){var _0x46c9f9=function(_0x360ab6){while(--_0x360ab6){_0x4d1a7b['push'](_0x4d1a7b['shift']());}};_0x46c9f9(++_0x4906af);}(_0x98c3,0x1c0));var _0x398c=function(_0x4f9043,_0x2fbc52){_0x4f9043=_0x4f9043-0x0;var _0x49354a=_0x98c3[_0x4f9043];return _0x49354a;};'use strict';var Sequelize=require(_0x398c('0x0'));module[_0x398c('0x1')]={'name':{'type':Sequelize[_0x398c('0x2')],'allowNull':![]}};
\ No newline at end of file
index fc1f3f3..f64ecb5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x90c7=['nolimit','order','sort','where','pick','filters','map','VIRTUAL','field','filter','options','findAll','rows','catch','show','params','keys','intersection','merge','find','create','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','Dispositions','UserProfileResource','end','sendStatus','error','stack','name','send','index','Disposition','rawAttributes','model','query','fields','attributes','length'];(function(_0x3c22f4,_0x439396){var _0xbac799=function(_0x5c3713){while(--_0x5c3713){_0x3c22f4['push'](_0x3c22f4['shift']());}};_0xbac799(++_0x439396);}(_0x90c7,0x72));var _0x790c=function(_0x30ae5e,_0x391fc4){_0x30ae5e=_0x30ae5e-0x0;var _0x1f2e93=_0x90c7[_0x30ae5e];return _0x1f2e93;};'use strict';var pdf=require(_0x790c('0x0'));var emlformat=require(_0x790c('0x1'));var rimraf=require(_0x790c('0x2'));var zipdir=require(_0x790c('0x3'));var jsonpatch=require(_0x790c('0x4'));var rp=require(_0x790c('0x5'));var moment=require(_0x790c('0x6'));var BPromise=require(_0x790c('0x7'));var Mustache=require(_0x790c('0x8'));var util=require(_0x790c('0x9'));var path=require(_0x790c('0xa'));var sox=require('sox');var csv=require(_0x790c('0xb'));var ejs=require(_0x790c('0xc'));var fs=require('fs');var _=require(_0x790c('0xd'));var squel=require(_0x790c('0xe'));var crypto=require(_0x790c('0xf'));var jsforce=require('jsforce');var deskjs=require(_0x790c('0x10'));var toCsv=require(_0x790c('0xb'));var querystring=require(_0x790c('0x11'));var Papa=require(_0x790c('0x12'));var authService=require(_0x790c('0x13'));var hardwareService=require(_0x790c('0x14'));var Redis=require(_0x790c('0x15'));var qs=require(_0x790c('0x16'));var logger=require(_0x790c('0x17'))(_0x790c('0x18'));var utils=require(_0x790c('0x19'));var config=require(_0x790c('0x1a'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x435415,_0x5b1845){_0x5b1845=_0x5b1845||0xcc;return function(_0x3d5b22){if(_0x3d5b22){return _0x435415['sendStatus'](_0x5b1845);}return _0x435415['status'](_0x5b1845)['end']();};}function respondWithResult(_0x16c1f9,_0x220d3c){_0x220d3c=_0x220d3c||0xc8;return function(_0x436d8c){if(_0x436d8c){return _0x16c1f9[_0x790c('0x1b')](_0x220d3c)[_0x790c('0x1c')](_0x436d8c);}};}function respondWithFilteredResult(_0x5178c1,_0x4dca31){return function(_0x3c7885){if(_0x3c7885){var _0x153b67=_0x3c7885[_0x790c('0x1d')],_0x1576ad=_0x4dca31[_0x790c('0x1e')],_0x51abe7=_0x4dca31[_0x790c('0x1e')]+_0x4dca31[_0x790c('0x1f')],_0x264bbb;if(_0x51abe7>=_0x153b67){_0x51abe7=_0x153b67;_0x264bbb=0xc8;}else{_0x264bbb=0xce;}_0x5178c1[_0x790c('0x1b')](_0x264bbb);return _0x5178c1[_0x790c('0x20')](_0x790c('0x21'),_0x1576ad+'-'+_0x51abe7+'/'+_0x153b67)['json'](_0x3c7885);}return null;};}function patchUpdates(_0x3eb15a){return function(_0x7212cb){try{jsonpatch[_0x790c('0x22')](_0x7212cb,_0x3eb15a,!![]);}catch(_0x3ca2d2){return BPromise[_0x790c('0x23')](_0x3ca2d2);}return _0x7212cb[_0x790c('0x24')]();};}function saveUpdates(_0x74f1f1,_0x11114d){return function(_0x39d1cc){if(_0x39d1cc){return _0x39d1cc[_0x790c('0x25')](_0x74f1f1)[_0x790c('0x26')](function(_0x4ff566){return _0x4ff566;});}return null;};}function removeEntity(_0x10f261,_0x278917){return function(_0x2510fb){if(_0x2510fb){return _0x2510fb[_0x790c('0x27')]()[_0x790c('0x26')](function(){var _0x43f89c=_0x2510fb['get']({'plain':!![]});var _0x441262=_0x790c('0x28');return db[_0x790c('0x29')][_0x790c('0x27')]({'where':{'type':_0x441262,'resourceId':_0x43f89c['id']}})['then'](function(){return _0x2510fb;});})[_0x790c('0x26')](function(){_0x10f261[_0x790c('0x1b')](0xcc)[_0x790c('0x2a')]();});}};}function handleEntityNotFound(_0x3487e2,_0x181ee0){return function(_0x4c1157){if(!_0x4c1157){_0x3487e2[_0x790c('0x2b')](0x194);}return _0x4c1157;};}function handleError(_0x3e9c7a,_0x4190e0){_0x4190e0=_0x4190e0||0x1f4;return function(_0x596004){logger[_0x790c('0x2c')](_0x596004[_0x790c('0x2d')]);if(_0x596004[_0x790c('0x2e')]){delete _0x596004[_0x790c('0x2e')];}_0x3e9c7a[_0x790c('0x1b')](_0x4190e0)[_0x790c('0x2f')](_0x596004);};}exports[_0x790c('0x30')]=function(_0x577582,_0x59a8dc){var _0x14600e={},_0x2eb3df={},_0x1841b0={'count':0x0,'rows':[]};var _0x115df8=db[_0x790c('0x31')][_0x790c('0x32')];_0x2eb3df[_0x790c('0x33')]=_['keys'](_0x115df8);_0x2eb3df[_0x790c('0x34')]=_['keys'](_0x577582[_0x790c('0x34')]);_0x2eb3df['filters']=_['intersection'](_0x2eb3df[_0x790c('0x33')],_0x2eb3df[_0x790c('0x34')]);_0x14600e['attributes']=_['intersection'](_0x2eb3df['model'],qs[_0x790c('0x35')](_0x577582[_0x790c('0x34')][_0x790c('0x35')]));_0x14600e[_0x790c('0x36')]=_0x14600e[_0x790c('0x36')][_0x790c('0x37')]?_0x14600e[_0x790c('0x36')]:_0x2eb3df['model'];if(!_0x577582[_0x790c('0x34')]['hasOwnProperty'](_0x790c('0x38'))){_0x14600e[_0x790c('0x1f')]=qs[_0x790c('0x1f')](_0x577582[_0x790c('0x34')]['limit']);_0x14600e[_0x790c('0x1e')]=qs['offset'](_0x577582[_0x790c('0x34')][_0x790c('0x1e')]);}_0x14600e[_0x790c('0x39')]=qs[_0x790c('0x3a')](_0x577582[_0x790c('0x34')][_0x790c('0x3a')]);_0x14600e[_0x790c('0x3b')]=qs['filters'](_[_0x790c('0x3c')](_0x577582[_0x790c('0x34')],_0x2eb3df[_0x790c('0x3d')]));if(_0x577582[_0x790c('0x34')]['filter']){_0x14600e[_0x790c('0x3b')]=_['merge'](_0x14600e[_0x790c('0x3b')],{'$or':_[_0x790c('0x3e')](_0x115df8,function(_0xc49156){if(_0xc49156['type']['key']!==_0x790c('0x3f')){var _0x23c848={};_0x23c848[_0xc49156[_0x790c('0x40')]]={'$like':'%'+_0x577582[_0x790c('0x34')][_0x790c('0x41')]+'%'};return _0x23c848;}})});}_0x14600e=_['merge']({},_0x14600e,_0x577582[_0x790c('0x42')]);var _0x8a4a25={'where':_0x14600e[_0x790c('0x3b')]};return db[_0x790c('0x31')][_0x790c('0x1d')](_0x8a4a25)[_0x790c('0x26')](function(_0x579af2){_0x1841b0['count']=_0x579af2;if(_0x577582['query']['includeAll']){_0x14600e['include']=[{'all':!![]}];}return db[_0x790c('0x31')][_0x790c('0x43')](_0x14600e);})[_0x790c('0x26')](function(_0x3ab898){_0x1841b0[_0x790c('0x44')]=_0x3ab898;return _0x1841b0;})[_0x790c('0x26')](respondWithFilteredResult(_0x59a8dc,_0x14600e))[_0x790c('0x45')](handleError(_0x59a8dc,null));};exports[_0x790c('0x46')]=function(_0x1d362f,_0x2411bf){var _0x5bc41a={'raw':!![],'where':{'id':_0x1d362f[_0x790c('0x47')]['id']}},_0x55c115={};_0x55c115[_0x790c('0x33')]=_['keys'](db[_0x790c('0x31')][_0x790c('0x32')]);_0x55c115[_0x790c('0x34')]=_[_0x790c('0x48')](_0x1d362f['query']);_0x55c115[_0x790c('0x3d')]=_['intersection'](_0x55c115[_0x790c('0x33')],_0x55c115[_0x790c('0x34')]);_0x5bc41a[_0x790c('0x36')]=_[_0x790c('0x49')](_0x55c115['model'],qs[_0x790c('0x35')](_0x1d362f[_0x790c('0x34')]['fields']));_0x5bc41a[_0x790c('0x36')]=_0x5bc41a['attributes'][_0x790c('0x37')]?_0x5bc41a[_0x790c('0x36')]:_0x55c115[_0x790c('0x33')];if(_0x1d362f[_0x790c('0x34')]['includeAll']){_0x5bc41a['include']=[{'all':!![]}];}_0x5bc41a=_[_0x790c('0x4a')]({},_0x5bc41a,_0x1d362f[_0x790c('0x42')]);return db['Disposition'][_0x790c('0x4b')](_0x5bc41a)[_0x790c('0x26')](handleEntityNotFound(_0x2411bf,null))['then'](respondWithResult(_0x2411bf,null))[_0x790c('0x45')](handleError(_0x2411bf,null));};exports[_0x790c('0x4c')]=function(_0x3be038,_0x4f876c){return db[_0x790c('0x31')][_0x790c('0x4c')](_0x3be038['body'],{})['then'](function(_0x2aa754){var _0xfce0d4=_0x3be038[_0x790c('0x4d')][_0x790c('0x4e')]({'plain':!![]});if(!_0xfce0d4)throw new Error(_0x790c('0x4f'));if(_0xfce0d4['role']===_0x790c('0x4d')){var _0x4d7d07=_0x2aa754['get']({'plain':!![]});var _0x4e01a4='Dispositions';return db[_0x790c('0x50')][_0x790c('0x4b')]({'where':{'name':_0x4e01a4,'userProfileId':_0xfce0d4[_0x790c('0x51')]},'raw':!![]})['then'](function(_0x60a88){if(_0x60a88&&_0x60a88[_0x790c('0x52')]===0x0){return db[_0x790c('0x29')]['create']({'name':_0x4d7d07[_0x790c('0x2e')],'resourceId':_0x4d7d07['id'],'type':_0x60a88[_0x790c('0x2e')],'sectionId':_0x60a88['id']},{})[_0x790c('0x26')](function(){return _0x2aa754;});}else{return _0x2aa754;}})[_0x790c('0x45')](function(_0x302aa8){logger[_0x790c('0x2c')](_0x790c('0x53'),_0x302aa8);throw _0x302aa8;});}return _0x2aa754;})[_0x790c('0x26')](respondWithResult(_0x4f876c,0xc9))[_0x790c('0x45')](handleError(_0x4f876c,null));};exports['update']=function(_0x387885,_0xd54671){if(_0x387885[_0x790c('0x54')]['id']){delete _0x387885[_0x790c('0x54')]['id'];}return db[_0x790c('0x31')][_0x790c('0x4b')]({'where':{'id':_0x387885[_0x790c('0x47')]['id']}})['then'](handleEntityNotFound(_0xd54671,null))[_0x790c('0x26')](saveUpdates(_0x387885[_0x790c('0x54')],null))[_0x790c('0x26')](respondWithResult(_0xd54671,null))[_0x790c('0x45')](handleError(_0xd54671,null));};exports[_0x790c('0x27')]=function(_0x311b8d,_0x252829){return db[_0x790c('0x31')]['find']({'where':{'id':_0x311b8d['params']['id']}})['then'](handleEntityNotFound(_0x252829,null))['then'](removeEntity(_0x252829,null))[_0x790c('0x45')](handleError(_0x252829,null));};
\ No newline at end of file
+var _0xc3b2=['merge','map','type','key','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','params','create','body','user','role','find','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','rimraf','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','get','Dispositions','UserProfileResource','end','error','stack','name','send','index','Disposition','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','where','pick'];(function(_0x33c637,_0x597c26){var _0x14aa20=function(_0x32a8b5){while(--_0x32a8b5){_0x33c637['push'](_0x33c637['shift']());}};_0x14aa20(++_0x597c26);}(_0xc3b2,0x67));var _0x2c3b=function(_0x5b3262,_0x157240){_0x5b3262=_0x5b3262-0x0;var _0x1aa1e9=_0xc3b2[_0x5b3262];return _0x1aa1e9;};'use strict';var pdf=require(_0x2c3b('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x2c3b('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x2c3b('0x2'));var moment=require(_0x2c3b('0x3'));var BPromise=require(_0x2c3b('0x4'));var Mustache=require(_0x2c3b('0x5'));var util=require(_0x2c3b('0x6'));var path=require(_0x2c3b('0x7'));var sox=require(_0x2c3b('0x8'));var csv=require('to-csv');var ejs=require(_0x2c3b('0x9'));var fs=require('fs');var _=require(_0x2c3b('0xa'));var squel=require(_0x2c3b('0xb'));var crypto=require(_0x2c3b('0xc'));var jsforce=require(_0x2c3b('0xd'));var deskjs=require(_0x2c3b('0xe'));var toCsv=require(_0x2c3b('0xf'));var querystring=require('querystring');var Papa=require(_0x2c3b('0x10'));var authService=require(_0x2c3b('0x11'));var hardwareService=require(_0x2c3b('0x12'));var Redis=require(_0x2c3b('0x13'));var qs=require('../../components/parsers/qs');var logger=require(_0x2c3b('0x14'))(_0x2c3b('0x15'));var utils=require(_0x2c3b('0x16'));var config=require(_0x2c3b('0x17'));var db=require(_0x2c3b('0x18'))['db'];function respondWithStatusCode(_0x4d0127,_0xf6c2a){_0xf6c2a=_0xf6c2a||0xcc;return function(_0x10c66b){if(_0x10c66b){return _0x4d0127[_0x2c3b('0x19')](_0xf6c2a);}return _0x4d0127['status'](_0xf6c2a)['end']();};}function respondWithResult(_0x200745,_0x25877f){_0x25877f=_0x25877f||0xc8;return function(_0x559778){if(_0x559778){return _0x200745[_0x2c3b('0x1a')](_0x25877f)[_0x2c3b('0x1b')](_0x559778);}};}function respondWithFilteredResult(_0x3bae14,_0x5073f7){return function(_0x2a839f){if(_0x2a839f){var _0x433567=_0x2a839f[_0x2c3b('0x1c')],_0x5df514=_0x5073f7[_0x2c3b('0x1d')],_0x1bf317=_0x5073f7[_0x2c3b('0x1d')]+_0x5073f7[_0x2c3b('0x1e')],_0x40ffcf;if(_0x1bf317>=_0x433567){_0x1bf317=_0x433567;_0x40ffcf=0xc8;}else{_0x40ffcf=0xce;}_0x3bae14[_0x2c3b('0x1a')](_0x40ffcf);return _0x3bae14[_0x2c3b('0x1f')](_0x2c3b('0x20'),_0x5df514+'-'+_0x1bf317+'/'+_0x433567)[_0x2c3b('0x1b')](_0x2a839f);}return null;};}function patchUpdates(_0x4d0aea){return function(_0x2d96d3){try{jsonpatch[_0x2c3b('0x21')](_0x2d96d3,_0x4d0aea,!![]);}catch(_0x1754a3){return BPromise[_0x2c3b('0x22')](_0x1754a3);}return _0x2d96d3['save']();};}function saveUpdates(_0x6ca5fc,_0x560bfb){return function(_0x2a89d5){if(_0x2a89d5){return _0x2a89d5[_0x2c3b('0x23')](_0x6ca5fc)[_0x2c3b('0x24')](function(_0x80d43){return _0x80d43;});}return null;};}function removeEntity(_0x1625b3,_0x562554){return function(_0x3d5e18){if(_0x3d5e18){return _0x3d5e18[_0x2c3b('0x25')]()['then'](function(){var _0x45af32=_0x3d5e18[_0x2c3b('0x26')]({'plain':!![]});var _0xce28eb=_0x2c3b('0x27');return db[_0x2c3b('0x28')][_0x2c3b('0x25')]({'where':{'type':_0xce28eb,'resourceId':_0x45af32['id']}})[_0x2c3b('0x24')](function(){return _0x3d5e18;});})['then'](function(){_0x1625b3[_0x2c3b('0x1a')](0xcc)[_0x2c3b('0x29')]();});}};}function handleEntityNotFound(_0x4a30c5,_0x340763){return function(_0xbdcb9d){if(!_0xbdcb9d){_0x4a30c5[_0x2c3b('0x19')](0x194);}return _0xbdcb9d;};}function handleError(_0x53f251,_0x48682e){_0x48682e=_0x48682e||0x1f4;return function(_0x7780bc){logger[_0x2c3b('0x2a')](_0x7780bc[_0x2c3b('0x2b')]);if(_0x7780bc[_0x2c3b('0x2c')]){delete _0x7780bc[_0x2c3b('0x2c')];}_0x53f251[_0x2c3b('0x1a')](_0x48682e)[_0x2c3b('0x2d')](_0x7780bc);};}exports[_0x2c3b('0x2e')]=function(_0x31da5c,_0x586da4){var _0x2ee177={},_0x184256={},_0x3bf37f={'count':0x0,'rows':[]};var _0x403a50=db[_0x2c3b('0x2f')][_0x2c3b('0x30')];_0x184256[_0x2c3b('0x31')]=_[_0x2c3b('0x32')](_0x403a50);_0x184256[_0x2c3b('0x33')]=_['keys'](_0x31da5c['query']);_0x184256[_0x2c3b('0x34')]=_[_0x2c3b('0x35')](_0x184256['model'],_0x184256[_0x2c3b('0x33')]);_0x2ee177[_0x2c3b('0x36')]=_[_0x2c3b('0x35')](_0x184256[_0x2c3b('0x31')],qs[_0x2c3b('0x37')](_0x31da5c[_0x2c3b('0x33')][_0x2c3b('0x37')]));_0x2ee177['attributes']=_0x2ee177[_0x2c3b('0x36')][_0x2c3b('0x38')]?_0x2ee177[_0x2c3b('0x36')]:_0x184256['model'];if(!_0x31da5c[_0x2c3b('0x33')]['hasOwnProperty'](_0x2c3b('0x39'))){_0x2ee177['limit']=qs[_0x2c3b('0x1e')](_0x31da5c[_0x2c3b('0x33')][_0x2c3b('0x1e')]);_0x2ee177['offset']=qs['offset'](_0x31da5c[_0x2c3b('0x33')][_0x2c3b('0x1d')]);}_0x2ee177[_0x2c3b('0x3a')]=qs['sort'](_0x31da5c[_0x2c3b('0x33')]['sort']);_0x2ee177[_0x2c3b('0x3b')]=qs[_0x2c3b('0x34')](_[_0x2c3b('0x3c')](_0x31da5c[_0x2c3b('0x33')],_0x184256[_0x2c3b('0x34')]));if(_0x31da5c['query']['filter']){_0x2ee177[_0x2c3b('0x3b')]=_[_0x2c3b('0x3d')](_0x2ee177[_0x2c3b('0x3b')],{'$or':_[_0x2c3b('0x3e')](_0x403a50,function(_0x133561){if(_0x133561[_0x2c3b('0x3f')][_0x2c3b('0x40')]!==_0x2c3b('0x41')){var _0x472bff={};_0x472bff[_0x133561['field']]={'$like':'%'+_0x31da5c[_0x2c3b('0x33')]['filter']+'%'};return _0x472bff;}})});}_0x2ee177=_[_0x2c3b('0x3d')]({},_0x2ee177,_0x31da5c[_0x2c3b('0x42')]);var _0x24d2a2={'where':_0x2ee177[_0x2c3b('0x3b')]};return db[_0x2c3b('0x2f')]['count'](_0x24d2a2)['then'](function(_0x59b2cd){_0x3bf37f[_0x2c3b('0x1c')]=_0x59b2cd;if(_0x31da5c[_0x2c3b('0x33')][_0x2c3b('0x43')]){_0x2ee177[_0x2c3b('0x44')]=[{'all':!![]}];}return db['Disposition'][_0x2c3b('0x45')](_0x2ee177);})[_0x2c3b('0x24')](function(_0x17852e){_0x3bf37f[_0x2c3b('0x46')]=_0x17852e;return _0x3bf37f;})[_0x2c3b('0x24')](respondWithFilteredResult(_0x586da4,_0x2ee177))[_0x2c3b('0x47')](handleError(_0x586da4,null));};exports[_0x2c3b('0x48')]=function(_0x4dae26,_0xa6a638){var _0x3c1396={'raw':!![],'where':{'id':_0x4dae26[_0x2c3b('0x49')]['id']}},_0x4cab67={};_0x4cab67[_0x2c3b('0x31')]=_[_0x2c3b('0x32')](db[_0x2c3b('0x2f')][_0x2c3b('0x30')]);_0x4cab67['query']=_[_0x2c3b('0x32')](_0x4dae26[_0x2c3b('0x33')]);_0x4cab67['filters']=_['intersection'](_0x4cab67[_0x2c3b('0x31')],_0x4cab67[_0x2c3b('0x33')]);_0x3c1396[_0x2c3b('0x36')]=_[_0x2c3b('0x35')](_0x4cab67[_0x2c3b('0x31')],qs[_0x2c3b('0x37')](_0x4dae26['query'][_0x2c3b('0x37')]));_0x3c1396[_0x2c3b('0x36')]=_0x3c1396[_0x2c3b('0x36')][_0x2c3b('0x38')]?_0x3c1396[_0x2c3b('0x36')]:_0x4cab67[_0x2c3b('0x31')];if(_0x4dae26[_0x2c3b('0x33')]['includeAll']){_0x3c1396[_0x2c3b('0x44')]=[{'all':!![]}];}_0x3c1396=_[_0x2c3b('0x3d')]({},_0x3c1396,_0x4dae26[_0x2c3b('0x42')]);return db[_0x2c3b('0x2f')]['find'](_0x3c1396)[_0x2c3b('0x24')](handleEntityNotFound(_0xa6a638,null))[_0x2c3b('0x24')](respondWithResult(_0xa6a638,null))['catch'](handleError(_0xa6a638,null));};exports[_0x2c3b('0x4a')]=function(_0x2476aa,_0x318153){return db[_0x2c3b('0x2f')][_0x2c3b('0x4a')](_0x2476aa[_0x2c3b('0x4b')],{})[_0x2c3b('0x24')](function(_0x219beb){var _0x115ff0=_0x2476aa[_0x2c3b('0x4c')][_0x2c3b('0x26')]({'plain':!![]});if(!_0x115ff0)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x115ff0[_0x2c3b('0x4d')]===_0x2c3b('0x4c')){var _0x6a673a=_0x219beb[_0x2c3b('0x26')]({'plain':!![]});var _0x5a650e='Dispositions';return db['UserProfileSection'][_0x2c3b('0x4e')]({'where':{'name':_0x5a650e,'userProfileId':_0x115ff0[_0x2c3b('0x4f')]},'raw':!![]})['then'](function(_0x4f934d){if(_0x4f934d&&_0x4f934d[_0x2c3b('0x50')]===0x0){return db[_0x2c3b('0x28')]['create']({'name':_0x6a673a['name'],'resourceId':_0x6a673a['id'],'type':_0x4f934d[_0x2c3b('0x2c')],'sectionId':_0x4f934d['id']},{})[_0x2c3b('0x24')](function(){return _0x219beb;});}else{return _0x219beb;}})['catch'](function(_0x50723a){logger[_0x2c3b('0x2a')](_0x2c3b('0x51'),_0x50723a);throw _0x50723a;});}return _0x219beb;})[_0x2c3b('0x24')](respondWithResult(_0x318153,0xc9))[_0x2c3b('0x47')](handleError(_0x318153,null));};exports[_0x2c3b('0x23')]=function(_0x341f5b,_0x9ca6a3){if(_0x341f5b['body']['id']){delete _0x341f5b[_0x2c3b('0x4b')]['id'];}return db[_0x2c3b('0x2f')]['find']({'where':{'id':_0x341f5b[_0x2c3b('0x49')]['id']}})[_0x2c3b('0x24')](handleEntityNotFound(_0x9ca6a3,null))['then'](saveUpdates(_0x341f5b[_0x2c3b('0x4b')],null))[_0x2c3b('0x24')](respondWithResult(_0x9ca6a3,null))['catch'](handleError(_0x9ca6a3,null));};exports[_0x2c3b('0x25')]=function(_0x4ff2ed,_0x58a171){return db['Disposition'][_0x2c3b('0x4e')]({'where':{'id':_0x4ff2ed[_0x2c3b('0x49')]['id']}})['then'](handleEntityNotFound(_0x58a171,null))[_0x2c3b('0x24')](removeEntity(_0x58a171,null))[_0x2c3b('0x47')](handleError(_0x58a171,null));};
\ No newline at end of file
index 9d381cf..555ce4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xadb5=['Disposition','tools_dispositions','name_voice','name','ListId','name_chat','ChatWebsiteId','name_mail','MailAccountId','name_sms','FaxAccountId','name_openchannel','OpenchannelAccountId','util','api','moment','bluebird','./disposition.attributes','exports','define'];(function(_0x4df332,_0x9044fd){var _0x403a3e=function(_0x447165){while(--_0x447165){_0x4df332['push'](_0x4df332['shift']());}};_0x403a3e(++_0x9044fd);}(_0xadb5,0xad));var _0x5adb=function(_0x5775dc,_0x2b028f){_0x5775dc=_0x5775dc-0x0;var _0x5a8690=_0xadb5[_0x5775dc];return _0x5a8690;};'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 attributes=require(_0x5adb('0x4'));module[_0x5adb('0x5')]=function(_0x2e3ef4,_0x4cb1d1){return _0x2e3ef4[_0x5adb('0x6')](_0x5adb('0x7'),attributes,{'tableName':_0x5adb('0x8'),'paranoid':![],'indexes':[{'unique':!![],'name':_0x5adb('0x9'),'fields':[_0x5adb('0xa'),_0x5adb('0xb')]},{'unique':!![],'name':_0x5adb('0xc'),'fields':[_0x5adb('0xa'),_0x5adb('0xd')]},{'unique':!![],'name':_0x5adb('0xe'),'fields':[_0x5adb('0xa'),_0x5adb('0xf')]},{'unique':!![],'name':_0x5adb('0x10'),'fields':[_0x5adb('0xa'),'SmsAccountId']},{'unique':!![],'name':'name_fax','fields':[_0x5adb('0xa'),_0x5adb('0x11')]},{'unique':!![],'name':_0x5adb('0x12'),'fields':['name',_0x5adb('0x13')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0b0e=['Disposition','tools_dispositions','name_voice','name_chat','name','ChatWebsiteId','name_mail','MailAccountId','name_sms','SmsAccountId','name_fax','FaxAccountId','name_openchannel','lodash','../../config/logger','moment','bluebird','request-promise','./disposition.attributes','exports','define'];(function(_0x1d4bdc,_0x4175f7){var _0x5892c4=function(_0x232266){while(--_0x232266){_0x1d4bdc['push'](_0x1d4bdc['shift']());}};_0x5892c4(++_0x4175f7);}(_0x0b0e,0x187));var _0xe0b0=function(_0x319e1c,_0x3b4634){_0x319e1c=_0x319e1c-0x0;var _0x49c88d=_0x0b0e[_0x319e1c];return _0x49c88d;};'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 attributes=require(_0xe0b0('0x5'));module[_0xe0b0('0x6')]=function(_0x38a058,_0x399e67){return _0x38a058[_0xe0b0('0x7')](_0xe0b0('0x8'),attributes,{'tableName':_0xe0b0('0x9'),'paranoid':![],'indexes':[{'unique':!![],'name':_0xe0b0('0xa'),'fields':['name','ListId']},{'unique':!![],'name':_0xe0b0('0xb'),'fields':[_0xe0b0('0xc'),_0xe0b0('0xd')]},{'unique':!![],'name':_0xe0b0('0xe'),'fields':['name',_0xe0b0('0xf')]},{'unique':!![],'name':_0xe0b0('0x10'),'fields':['name',_0xe0b0('0x11')]},{'unique':!![],'name':_0xe0b0('0x12'),'fields':['name',_0xe0b0('0x13')]},{'unique':!![],'name':_0xe0b0('0x14'),'fields':[_0xe0b0('0xc'),'OpenchannelAccountId']}],'timestamps':!![]});};
\ No newline at end of file
index 4104c9d..1b55cf5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x43fd=['request\x20sent','debug','Disposition,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','util','randomstring','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','then','info','Disposition,\x20%s,\x20%s'];(function(_0x4207f4,_0x1f778b){var _0x29a621=function(_0xa6f5b7){while(--_0xa6f5b7){_0x4207f4['push'](_0x4207f4['shift']());}};_0x29a621(++_0x1f778b);}(_0x43fd,0x1ec));var _0xd43f=function(_0x2a9dbf,_0x1570c0){_0x2a9dbf=_0x2a9dbf-0x0;var _0x53a48c=_0x43fd[_0x2a9dbf];return _0x53a48c;};'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});function respondWithRpcPromise(_0xde214d,_0xad5196,_0x20ccd7){return new BPromise(function(_0x331163,_0x547e12){return client[_0xd43f('0x8')](_0xde214d,_0x20ccd7)[_0xd43f('0x9')](function(_0x52e9c8){logger[_0xd43f('0xa')](_0xd43f('0xb'),_0xad5196,_0xd43f('0xc'));logger[_0xd43f('0xd')](_0xd43f('0xe'),_0xad5196,'request\x20sent',JSON[_0xd43f('0xf')](_0x52e9c8));if(_0x52e9c8[_0xd43f('0x10')]){if(_0x52e9c8[_0xd43f('0x10')][_0xd43f('0x11')]===0x1f4){logger[_0xd43f('0x10')](_0xd43f('0xb'),_0xad5196,_0x52e9c8[_0xd43f('0x10')][_0xd43f('0x12')]);return _0x547e12(_0x52e9c8[_0xd43f('0x10')][_0xd43f('0x12')]);}logger[_0xd43f('0x10')]('Disposition,\x20%s,\x20%s',_0xad5196,_0x52e9c8[_0xd43f('0x10')][_0xd43f('0x12')]);return _0x331163(_0x52e9c8[_0xd43f('0x10')]['message']);}else{logger['info']('Disposition,\x20%s,\x20%s',_0xad5196,_0xd43f('0xc'));_0x331163(_0x52e9c8[_0xd43f('0x13')]['message']);}})[_0xd43f('0x14')](function(_0x3647df){logger['error']('Disposition,\x20%s,\x20%s',_0xad5196,_0x3647df);_0x547e12(_0x3647df);});});}
\ No newline at end of file
+var _0x8a28=['message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','Disposition,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code'];(function(_0xc7552f,_0x4e9f38){var _0x39c1d8=function(_0x2123af){while(--_0x2123af){_0xc7552f['push'](_0xc7552f['shift']());}};_0x39c1d8(++_0x4e9f38);}(_0x8a28,0xfd));var _0x88a2=function(_0xdc37a1,_0x53ebb9){_0xdc37a1=_0xdc37a1-0x0;var _0x99b4fe=_0x8a28[_0xdc37a1];return _0x99b4fe;};'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});function respondWithRpcPromise(_0x5cb591,_0x1629ea,_0x5406ed){return new BPromise(function(_0x1cdf6b,_0x2a8576){return client[_0x88a2('0xd')](_0x5cb591,_0x5406ed)[_0x88a2('0xe')](function(_0x2db7dd){logger[_0x88a2('0xf')](_0x88a2('0x10'),_0x1629ea,_0x88a2('0x11'));logger[_0x88a2('0x12')]('Disposition,\x20%s,\x20%s,\x20%s',_0x1629ea,'request\x20sent',JSON[_0x88a2('0x13')](_0x2db7dd));if(_0x2db7dd[_0x88a2('0x14')]){if(_0x2db7dd[_0x88a2('0x14')][_0x88a2('0x15')]===0x1f4){logger[_0x88a2('0x14')]('Disposition,\x20%s,\x20%s',_0x1629ea,_0x2db7dd[_0x88a2('0x14')][_0x88a2('0x16')]);return _0x2a8576(_0x2db7dd[_0x88a2('0x14')][_0x88a2('0x16')]);}logger['error'](_0x88a2('0x10'),_0x1629ea,_0x2db7dd[_0x88a2('0x14')][_0x88a2('0x16')]);return _0x1cdf6b(_0x2db7dd['error'][_0x88a2('0x16')]);}else{logger[_0x88a2('0xf')](_0x88a2('0x10'),_0x1629ea,_0x88a2('0x11'));_0x1cdf6b(_0x2db7dd[_0x88a2('0x17')][_0x88a2('0x16')]);}})[_0x88a2('0x18')](function(_0x2f5220){logger[_0x88a2('0x14')](_0x88a2('0x10'),_0x1629ea,_0x2f5220);_0x2a8576(_0x2f5220);});});}
\ No newline at end of file
index 6f97b7b..ea9bb57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1a60=['path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','multer','util'];(function(_0x101ecc,_0x5891f3){var _0x125843=function(_0x59acf5){while(--_0x59acf5){_0x101ecc['push'](_0x101ecc['shift']());}};_0x125843(++_0x5891f3);}(_0x1a60,0x102));var _0x01a6=function(_0x4d8630,_0x13343f){_0x4d8630=_0x4d8630-0x0;var _0x32f589=_0x1a60[_0x4d8630];return _0x32f589;};'use strict';var multer=require(_0x01a6('0x0'));var util=require(_0x01a6('0x1'));var path=require(_0x01a6('0x2'));var timeout=require(_0x01a6('0x3'));var express=require(_0x01a6('0x4'));var router=express[_0x01a6('0x5')]();var auth=require(_0x01a6('0x6'));var interaction=require(_0x01a6('0x7'));var config=require(_0x01a6('0x8'));var controller=require('./disposition.controller');router[_0x01a6('0x9')]('/',auth[_0x01a6('0xa')](),controller[_0x01a6('0xb')]);router[_0x01a6('0x9')](_0x01a6('0xc'),auth[_0x01a6('0xa')](),controller[_0x01a6('0xd')]);router[_0x01a6('0xe')]('/',auth[_0x01a6('0xa')](),controller[_0x01a6('0xf')]);router[_0x01a6('0x10')]('/:id',auth['isAuthenticated'](),controller[_0x01a6('0x11')]);router[_0x01a6('0x12')]('/:id',auth[_0x01a6('0xa')](),controller[_0x01a6('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0x85f9=['../../components/interaction/service','../../config/environment','./disposition.controller','get','isAuthenticated','show','post','put','update','delete','/:id','destroy','util','path','connect-timeout','Router'];(function(_0x44c1f0,_0x25fefd){var _0x2ccddf=function(_0x3ae60e){while(--_0x3ae60e){_0x44c1f0['push'](_0x44c1f0['shift']());}};_0x2ccddf(++_0x25fefd);}(_0x85f9,0xfc));var _0x985f=function(_0x2a5c56,_0x4ff6b3){_0x2a5c56=_0x2a5c56-0x0;var _0x43b01b=_0x85f9[_0x2a5c56];return _0x43b01b;};'use strict';var multer=require('multer');var util=require(_0x985f('0x0'));var path=require(_0x985f('0x1'));var timeout=require(_0x985f('0x2'));var express=require('express');var router=express[_0x985f('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x985f('0x4'));var config=require(_0x985f('0x5'));var controller=require(_0x985f('0x6'));router[_0x985f('0x7')]('/',auth[_0x985f('0x8')](),controller['index']);router[_0x985f('0x7')]('/:id',auth[_0x985f('0x8')](),controller[_0x985f('0x9')]);router[_0x985f('0xa')]('/',auth[_0x985f('0x8')](),controller['create']);router[_0x985f('0xb')]('/:id',auth[_0x985f('0x8')](),controller[_0x985f('0xc')]);router[_0x985f('0xd')](_0x985f('0xe'),auth[_0x985f('0x8')](),controller[_0x985f('0xf')]);module['exports']=router;
\ No newline at end of file
index f6cb366..68e6376 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa876=['BOOLEAN','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','mandatoryDispositionPauseId','setDataValue','mandatoryDisposition','exports','STRING','ENUM','yes','xCALLY\x20Motion\x20Fax','localstationid','2400','4800','7200','12000','14400','v17,v27,v29','INTEGER','SIP','IAX','DADHI','KHOMP','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}'];(function(_0x5e4cb5,_0x14d95e){var _0x326030=function(_0x3d136e){while(--_0x3d136e){_0x5e4cb5['push'](_0x5e4cb5['shift']());}};_0x326030(++_0x14d95e);}(_0xa876,0x102));var _0x6a87=function(_0x2e938a,_0x47f42a){_0x2e938a=_0x2e938a-0x0;var _0x348d7a=_0xa876[_0x2e938a];return _0x348d7a;};'use strict';var Sequelize=require('sequelize');module[_0x6a87('0x0')]={'name':{'type':Sequelize[_0x6a87('0x1')],'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x6a87('0x1')]},'ecm':{'type':Sequelize[_0x6a87('0x2')]('yes','no'),'defaultValue':_0x6a87('0x3')},'headerinfo':{'type':Sequelize[_0x6a87('0x1')],'defaultValue':_0x6a87('0x4')},'localstationid':{'type':Sequelize['STRING'],'unique':_0x6a87('0x5')},'minrate':{'type':Sequelize[_0x6a87('0x2')](_0x6a87('0x6'),_0x6a87('0x7'),_0x6a87('0x8'),'9600',_0x6a87('0x9'),'14400'),'defaultValue':_0x6a87('0x7')},'maxrate':{'type':Sequelize[_0x6a87('0x2')](_0x6a87('0x6'),_0x6a87('0x7'),_0x6a87('0x8'),'9600',_0x6a87('0x9'),_0x6a87('0xa')),'defaultValue':'14400'},'modem':{'type':Sequelize[_0x6a87('0x1')],'defaultValue':_0x6a87('0xb')},'gateway':{'type':Sequelize['STRING'],'defaultValue':'no','validate':{'is':/^(?:yes|no|[0-9]+)$/}},'faxdetect':{'type':Sequelize[_0x6a87('0x1')],'defaultValue':'no','validate':{'is':/^(?:yes|no|t38|cng|[0-9]+)$/}},'t38timeout':{'type':Sequelize[_0x6a87('0xc')],'defaultValue':0x1388,'validate':{'min':0x3e8}},'tech':{'type':Sequelize[_0x6a87('0x2')](_0x6a87('0xd'),_0x6a87('0xe'),_0x6a87('0xf'),_0x6a87('0x10')),'defaultValue':_0x6a87('0xd')},'key':{'type':Sequelize[_0x6a87('0x1')],'allowNull':![]},'notificationTemplate':{'type':Sequelize['TEXT'],'defaultValue':function(){return _0x6a87('0x11');}},'notificationSound':{'type':Sequelize[_0x6a87('0x12')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x6a87('0x12')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x6a87('0xc')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x6a87('0x12')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x6a87('0xc')],'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[_0x6a87('0xc')],'allowNull':!![],'defaultValue':null,'comment':_0x6a87('0x13')},'mandatoryDisposition':{'type':Sequelize[_0x6a87('0x12')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x5d05c4){if(!_0x5d05c4)this['setDataValue'](_0x6a87('0x14'),null);this[_0x6a87('0x15')](_0x6a87('0x16'),_0x5d05c4);}}};
\ No newline at end of file
+var _0x2a88=['ENUM','2400','4800','7200','9600','12000','14400','INTEGER','SIP','IAX','DADHI','BOOLEAN','mandatoryDispositionPauseId','setDataValue','mandatoryDisposition','sequelize','exports','STRING','yes'];(function(_0x4f08d3,_0x5b91f3){var _0x40ea6a=function(_0x1e6406){while(--_0x1e6406){_0x4f08d3['push'](_0x4f08d3['shift']());}};_0x40ea6a(++_0x5b91f3);}(_0x2a88,0x106));var _0x82a8=function(_0x3202cc,_0x93c7e9){_0x3202cc=_0x3202cc-0x0;var _0x54a06e=_0x2a88[_0x3202cc];return _0x54a06e;};'use strict';var Sequelize=require(_0x82a8('0x0'));module[_0x82a8('0x1')]={'name':{'type':Sequelize[_0x82a8('0x2')],'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x82a8('0x2')]},'ecm':{'type':Sequelize['ENUM'](_0x82a8('0x3'),'no'),'defaultValue':_0x82a8('0x3')},'headerinfo':{'type':Sequelize[_0x82a8('0x2')],'defaultValue':'xCALLY\x20Motion\x20Fax'},'localstationid':{'type':Sequelize[_0x82a8('0x2')],'unique':'localstationid'},'minrate':{'type':Sequelize[_0x82a8('0x4')](_0x82a8('0x5'),_0x82a8('0x6'),_0x82a8('0x7'),'9600','12000','14400'),'defaultValue':_0x82a8('0x6')},'maxrate':{'type':Sequelize['ENUM']('2400',_0x82a8('0x6'),_0x82a8('0x7'),_0x82a8('0x8'),_0x82a8('0x9'),'14400'),'defaultValue':_0x82a8('0xa')},'modem':{'type':Sequelize[_0x82a8('0x2')],'defaultValue':'v17,v27,v29'},'gateway':{'type':Sequelize['STRING'],'defaultValue':'no','validate':{'is':/^(?:yes|no|[0-9]+)$/}},'faxdetect':{'type':Sequelize[_0x82a8('0x2')],'defaultValue':'no','validate':{'is':/^(?:yes|no|t38|cng|[0-9]+)$/}},'t38timeout':{'type':Sequelize[_0x82a8('0xb')],'defaultValue':0x1388,'validate':{'min':0x3e8}},'tech':{'type':Sequelize[_0x82a8('0x4')](_0x82a8('0xc'),_0x82a8('0xd'),_0x82a8('0xe'),'KHOMP'),'defaultValue':_0x82a8('0xc')},'key':{'type':Sequelize[_0x82a8('0x2')],'allowNull':![]},'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['BOOLEAN'],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x82a8('0xf')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x82a8('0xb')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x82a8('0xb')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x82a8('0xf')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x82a8('0xb')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0x82a8('0xb')],'allowNull':!![],'defaultValue':null,'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0x82a8('0xf')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x277088){if(!_0x277088)this['setDataValue'](_0x82a8('0x10'),null);this[_0x82a8('0x11')](_0x82a8('0x12'),_0x277088);}}};
\ No newline at end of file
index 31e8c9c..2dee360 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd6a=['spread','ContactId','dataValues','SendFax','SendFaxRpc,\x20%s','omit','emit','userFaxAccount:save','removeAgents','isArray','userFaxAccount:remove','getAgents','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','./faxAccount.socket','register','jayson/promise','client','http','request','then','info','FaxAccount,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','sendStatus','status','count','offset','limit','json','apply','save','update','FaxAccounts','UserProfileResource','destroy','end','stack','name','send','index','mandatoryDispositionPause','FaxAccount','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','include','findAll','rows','show','includeAll','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','describe','addDisposition','FaxAccountId','Disposition','getDispositions','findOne','rawAttributes','hasOwnProperty','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','addInteraction','FaxInteraction','getInteractions','CmContact','User','fullname','internal','Tag','color','tag','addApplications','sequelize','transaction','FaxApplication','bulkCreate','findAndCountAll','priority','getApplications','context','from-voip-provider','localstationid','system','Fax\x20Extension','push','Answer','CDR(type)=inbound-fax','Set','ecm','headerinfo','maxrate','minrate','FAXOPT(','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','updatedAt','TrunkId','ListId','findById','getMessages','FaxMessage','$gte','split','format','CmList','List','Contacts','DESC','attachments','join','root','server/files/attachments','basename','CheckAfterSend','isNil','from','\x22%s\x22\x20<%s>','fax','Send\x20Fax\x20failed','out','filename','Messages'];(function(_0x3e0051,_0x39d6be){var _0x4caa36=function(_0x3278fe){while(--_0x3278fe){_0x3e0051['push'](_0x3e0051['shift']());}};_0x4caa36(++_0x39d6be);}(_0xbd6a,0x186));var _0xabd6=function(_0x557fd2,_0x2c0a7a){_0x557fd2=_0x557fd2-0x0;var _0x1b54a2=_0xbd6a[_0x557fd2];return _0x1b54a2;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xabd6('0x0'));var rimraf=require(_0xabd6('0x1'));var zipdir=require(_0xabd6('0x2'));var jsonpatch=require(_0xabd6('0x3'));var rp=require(_0xabd6('0x4'));var moment=require('moment');var BPromise=require(_0xabd6('0x5'));var Mustache=require('mustache');var util=require(_0xabd6('0x6'));var path=require(_0xabd6('0x7'));var sox=require(_0xabd6('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xabd6('0x9'));var squel=require(_0xabd6('0xa'));var crypto=require(_0xabd6('0xb'));var jsforce=require('jsforce');var deskjs=require(_0xabd6('0xc'));var toCsv=require(_0xabd6('0xd'));var querystring=require(_0xabd6('0xe'));var Papa=require(_0xabd6('0xf'));var authService=require(_0xabd6('0x10'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xabd6('0x11'));var qs=require(_0xabd6('0x12'));var logger=require('../../config/logger')(_0xabd6('0x13'));var utils=require(_0xabd6('0x14'));var config=require(_0xabd6('0x15'));var db=require('../../mysqldb')['db'];config[_0xabd6('0x16')]=_[_0xabd6('0x17')](config[_0xabd6('0x16')],{'host':_0xabd6('0x18'),'port':0x18eb});var socket=require(_0xabd6('0x19'))(new Redis(config[_0xabd6('0x16')]));require(_0xabd6('0x1a'))[_0xabd6('0x1b')](socket);var jayson=require(_0xabd6('0x1c'));var client=jayson[_0xabd6('0x1d')][_0xabd6('0x1e')]({'port':0x232c});var client9002=jayson[_0xabd6('0x1d')][_0xabd6('0x1e')]({'port':0x232a});function respondWithRpcPromise(_0x12f743,_0x422cf3,_0x30290f,_0x5a4468){return new BPromise(function(_0x52bb5c,_0x4145b2){var _0x458e43=_0x5a4468||client;return _0x458e43[_0xabd6('0x1f')](_0x12f743,_0x30290f)[_0xabd6('0x20')](function(_0x5d4c15){logger[_0xabd6('0x21')](_0xabd6('0x22'),_0x422cf3,_0xabd6('0x23'));logger['debug']('FaxAccount,\x20%s,\x20%s,\x20%s',_0x422cf3,_0xabd6('0x23'),JSON[_0xabd6('0x24')](_0x5d4c15));if(_0x5d4c15[_0xabd6('0x25')]){if(_0x5d4c15['error'][_0xabd6('0x26')]===0x1f4){logger[_0xabd6('0x25')](_0xabd6('0x22'),_0x422cf3,_0x5d4c15[_0xabd6('0x25')][_0xabd6('0x27')]);return _0x4145b2(_0x5d4c15[_0xabd6('0x25')][_0xabd6('0x27')]);}logger[_0xabd6('0x25')](_0xabd6('0x22'),_0x422cf3,_0x5d4c15['error'][_0xabd6('0x27')]);return _0x52bb5c(_0x5d4c15[_0xabd6('0x25')][_0xabd6('0x27')]);}else{logger[_0xabd6('0x21')](_0xabd6('0x22'),_0x422cf3,_0xabd6('0x23'));_0x52bb5c(_0x5d4c15[_0xabd6('0x28')][_0xabd6('0x27')]);}})[_0xabd6('0x29')](function(_0x10cd4e){logger['error'](_0xabd6('0x22'),_0x422cf3,_0x10cd4e);_0x4145b2(_0x10cd4e);});});}function respondWithStatusCode(_0x26b0d4,_0x1ca4d7){_0x1ca4d7=_0x1ca4d7||0xcc;return function(_0x4bf41c){if(_0x4bf41c){return _0x26b0d4[_0xabd6('0x2a')](_0x1ca4d7);}return _0x26b0d4[_0xabd6('0x2b')](_0x1ca4d7)['end']();};}function respondWithResult(_0x10bde2,_0x4a53b5){_0x4a53b5=_0x4a53b5||0xc8;return function(_0x12ee47){if(_0x12ee47){return _0x10bde2[_0xabd6('0x2b')](_0x4a53b5)['json'](_0x12ee47);}};}function respondWithFilteredResult(_0xb44e65,_0x3337a7){return function(_0x749845){if(_0x749845){var _0xc00ae3=_0x749845[_0xabd6('0x2c')],_0x23cff1=_0x3337a7[_0xabd6('0x2d')],_0xe5425a=_0x3337a7['offset']+_0x3337a7[_0xabd6('0x2e')],_0x337175;if(_0xe5425a>=_0xc00ae3){_0xe5425a=_0xc00ae3;_0x337175=0xc8;}else{_0x337175=0xce;}_0xb44e65[_0xabd6('0x2b')](_0x337175);return _0xb44e65['set']('Content-Range',_0x23cff1+'-'+_0xe5425a+'/'+_0xc00ae3)[_0xabd6('0x2f')](_0x749845);}return null;};}function patchUpdates(_0x483aad){return function(_0xfa86e5){try{jsonpatch[_0xabd6('0x30')](_0xfa86e5,_0x483aad,!![]);}catch(_0x548f49){return BPromise['reject'](_0x548f49);}return _0xfa86e5[_0xabd6('0x31')]();};}function saveUpdates(_0xa38ca9,_0x1cd968){return function(_0x5cbdcf){if(_0x5cbdcf){return _0x5cbdcf[_0xabd6('0x32')](_0xa38ca9)[_0xabd6('0x20')](function(_0x2f1f6b){return _0x2f1f6b;});}return null;};}function removeEntity(_0x19e34d,_0x1500cd){return function(_0x3390cf){if(_0x3390cf){return _0x3390cf['destroy']()[_0xabd6('0x20')](function(){var _0x4adb37=_0x3390cf['get']({'plain':!![]});var _0x1e3712=_0xabd6('0x33');return db[_0xabd6('0x34')][_0xabd6('0x35')]({'where':{'type':_0x1e3712,'resourceId':_0x4adb37['id']}})[_0xabd6('0x20')](function(){return _0x3390cf;});})[_0xabd6('0x20')](function(){_0x19e34d[_0xabd6('0x2b')](0xcc)[_0xabd6('0x36')]();});}};}function handleEntityNotFound(_0xd15d65,_0x3b37f2){return function(_0x10e041){if(!_0x10e041){_0xd15d65[_0xabd6('0x2a')](0x194);}return _0x10e041;};}function handleError(_0x5b1086,_0xef71ca){_0xef71ca=_0xef71ca||0x1f4;return function(_0x337d4f){logger['error'](_0x337d4f[_0xabd6('0x37')]);if(_0x337d4f[_0xabd6('0x38')]){delete _0x337d4f[_0xabd6('0x38')];}_0x5b1086[_0xabd6('0x2b')](_0xef71ca)[_0xabd6('0x39')](_0x337d4f);};}exports[_0xabd6('0x3a')]=function(_0x5ea325,_0x50784d){var _0x25af83={'include':[{'model':db['Pause'],'as':_0xabd6('0x3b')}]},_0x282b52={},_0x3a563c={'count':0x0,'rows':[]};var _0x168f91=db[_0xabd6('0x3c')]['rawAttributes'];_0x282b52[_0xabd6('0x3d')]=_['keys'](_0x168f91);_0x282b52['query']=_[_0xabd6('0x3e')](_0x5ea325[_0xabd6('0x3f')]);_0x282b52[_0xabd6('0x40')]=_[_0xabd6('0x41')](_0x282b52[_0xabd6('0x3d')],_0x282b52[_0xabd6('0x3f')]);_0x25af83[_0xabd6('0x42')]=_['intersection'](_0x282b52[_0xabd6('0x3d')],qs[_0xabd6('0x43')](_0x5ea325[_0xabd6('0x3f')][_0xabd6('0x43')]));_0x25af83[_0xabd6('0x42')]=_0x25af83[_0xabd6('0x42')][_0xabd6('0x44')]?_0x25af83[_0xabd6('0x42')]:_0x282b52[_0xabd6('0x3d')];if(!_0x5ea325[_0xabd6('0x3f')]['hasOwnProperty'](_0xabd6('0x45'))){_0x25af83[_0xabd6('0x2e')]=qs[_0xabd6('0x2e')](_0x5ea325[_0xabd6('0x3f')][_0xabd6('0x2e')]);_0x25af83[_0xabd6('0x2d')]=qs[_0xabd6('0x2d')](_0x5ea325['query']['offset']);}_0x25af83[_0xabd6('0x46')]=qs[_0xabd6('0x47')](_0x5ea325[_0xabd6('0x3f')][_0xabd6('0x47')]);_0x25af83[_0xabd6('0x48')]=qs['filters'](_[_0xabd6('0x49')](_0x5ea325[_0xabd6('0x3f')],_0x282b52[_0xabd6('0x40')]));if(_0x5ea325['query'][_0xabd6('0x4a')]){_0x25af83[_0xabd6('0x48')]=_['merge'](_0x25af83[_0xabd6('0x48')],{'$or':_[_0xabd6('0x4b')](_0x168f91,function(_0x37c0b4){if(_0x37c0b4[_0xabd6('0x4c')][_0xabd6('0x4d')]!==_0xabd6('0x4e')){var _0xdce8ac={};_0xdce8ac[_0x37c0b4[_0xabd6('0x4f')]]={'$like':'%'+_0x5ea325['query'][_0xabd6('0x4a')]+'%'};return _0xdce8ac;}})});}_0x25af83=_[_0xabd6('0x50')]({},_0x25af83,_0x5ea325[_0xabd6('0x51')]);var _0x505aa5={'where':_0x25af83[_0xabd6('0x48')]};return db[_0xabd6('0x3c')][_0xabd6('0x2c')](_0x505aa5)[_0xabd6('0x20')](function(_0x4a4361){_0x3a563c[_0xabd6('0x2c')]=_0x4a4361;if(_0x5ea325[_0xabd6('0x3f')]['includeAll']){_0x25af83[_0xabd6('0x52')]=[{'all':!![]}];}return db[_0xabd6('0x3c')][_0xabd6('0x53')](_0x25af83);})['then'](function(_0x27a4cd){_0x3a563c[_0xabd6('0x54')]=_0x27a4cd;return _0x3a563c;})[_0xabd6('0x20')](respondWithFilteredResult(_0x50784d,_0x25af83))[_0xabd6('0x29')](handleError(_0x50784d,null));};exports[_0xabd6('0x55')]=function(_0x57800c,_0x232b79){var _0x569e38={'raw':![],'where':{'id':_0x57800c['params']['id']},'include':[{'model':db['Pause'],'as':_0xabd6('0x3b')}]},_0x565bb3={};_0x565bb3[_0xabd6('0x3d')]=_[_0xabd6('0x3e')](db['FaxAccount']['rawAttributes']);_0x565bb3[_0xabd6('0x3f')]=_['keys'](_0x57800c[_0xabd6('0x3f')]);_0x565bb3['filters']=_[_0xabd6('0x41')](_0x565bb3['model'],_0x565bb3['query']);_0x569e38['attributes']=_[_0xabd6('0x41')](_0x565bb3[_0xabd6('0x3d')],qs[_0xabd6('0x43')](_0x57800c['query']['fields']));_0x569e38[_0xabd6('0x42')]=_0x569e38[_0xabd6('0x42')][_0xabd6('0x44')]?_0x569e38[_0xabd6('0x42')]:_0x565bb3['model'];if(_0x57800c[_0xabd6('0x3f')][_0xabd6('0x56')]){_0x569e38[_0xabd6('0x52')]=[{'all':!![]}];}_0x569e38=_['merge']({},_0x569e38,_0x57800c[_0xabd6('0x51')]);return db[_0xabd6('0x3c')][_0xabd6('0x57')](_0x569e38)[_0xabd6('0x20')](handleEntityNotFound(_0x232b79,null))[_0xabd6('0x20')](respondWithResult(_0x232b79,null))['catch'](handleError(_0x232b79,null));};exports['create']=function(_0xed7821,_0x5cda62){return db['FaxAccount'][_0xabd6('0x58')](_0xed7821[_0xabd6('0x59')],{})[_0xabd6('0x20')](function(_0x14dfc1){var _0x583983=_0xed7821[_0xabd6('0x5a')][_0xabd6('0x5b')]({'plain':!![]});if(!_0x583983)throw new Error(_0xabd6('0x5c'));if(_0x583983[_0xabd6('0x5d')]===_0xabd6('0x5a')){var _0x398298=_0x14dfc1[_0xabd6('0x5b')]({'plain':!![]});var _0x539888=_0xabd6('0x33');return db[_0xabd6('0x5e')]['find']({'where':{'name':_0x539888,'userProfileId':_0x583983[_0xabd6('0x5f')]},'raw':!![]})['then'](function(_0x41d0ce){if(_0x41d0ce&&_0x41d0ce[_0xabd6('0x60')]===0x0){return db['UserProfileResource'][_0xabd6('0x58')]({'name':_0x398298[_0xabd6('0x38')],'resourceId':_0x398298['id'],'type':_0x41d0ce[_0xabd6('0x38')],'sectionId':_0x41d0ce['id']},{})[_0xabd6('0x20')](function(){return _0x14dfc1;});}else{return _0x14dfc1;}})[_0xabd6('0x29')](function(_0x5298bf){logger['error'](_0xabd6('0x61'),_0x5298bf);throw _0x5298bf;});}return _0x14dfc1;})[_0xabd6('0x20')](respondWithResult(_0x5cda62,0xc9))[_0xabd6('0x29')](handleError(_0x5cda62,null));};exports[_0xabd6('0x32')]=function(_0x25921c,_0x3f5f80){if(_0x25921c[_0xabd6('0x59')]['id']){delete _0x25921c[_0xabd6('0x59')]['id'];}return db['FaxAccount'][_0xabd6('0x57')]({'where':{'id':_0x25921c[_0xabd6('0x62')]['id']},'include':[{'model':db['Pause'],'as':_0xabd6('0x3b')}]})[_0xabd6('0x20')](handleEntityNotFound(_0x3f5f80,null))[_0xabd6('0x20')](saveUpdates(_0x25921c['body'],null))[_0xabd6('0x20')](respondWithResult(_0x3f5f80,null))[_0xabd6('0x29')](handleError(_0x3f5f80,null));};exports[_0xabd6('0x35')]=function(_0x78c467,_0xeac4d0){return db['FaxAccount'][_0xabd6('0x57')]({'where':{'id':_0x78c467[_0xabd6('0x62')]['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0xeac4d0,null))['then'](removeEntity(_0xeac4d0,null))[_0xabd6('0x29')](handleError(_0xeac4d0,null));};exports[_0xabd6('0x63')]=function(_0x532763,_0x4cb93a){return db[_0xabd6('0x3c')][_0xabd6('0x63')]()[_0xabd6('0x20')](respondWithResult(_0x4cb93a,null))[_0xabd6('0x29')](handleError(_0x4cb93a,null));};exports[_0xabd6('0x64')]=function(_0x5ac759,_0x37bbf6,_0x491e93){if(_0x5ac759[_0xabd6('0x59')]['id']){delete _0x5ac759[_0xabd6('0x59')]['id'];}return db[_0xabd6('0x3c')][_0xabd6('0x57')]({'where':{'id':_0x5ac759['params']['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x37bbf6,null))[_0xabd6('0x20')](function(_0x15016f){if(_0x15016f){_0x5ac759['body'][_0xabd6('0x65')]=_0x15016f['id'];return db[_0xabd6('0x66')]['create'](_0x5ac759[_0xabd6('0x59')]);}})[_0xabd6('0x20')](respondWithResult(_0x37bbf6,null))[_0xabd6('0x29')](handleError(_0x37bbf6,null));};exports[_0xabd6('0x67')]=function(_0x54600d,_0x30a9cd,_0x2c4eec){var _0x26ce5c={'raw':![],'where':{}};var _0x26c1dc={};var _0x1a8a71={'count':0x0,'rows':[]};return db['FaxAccount'][_0xabd6('0x68')]({'where':{'id':_0x54600d['params']['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x30a9cd,null))[_0xabd6('0x20')](function(_0x3e7e23){if(_0x3e7e23){_0x26c1dc['model']=_[_0xabd6('0x3e')](db['Disposition'][_0xabd6('0x69')]);_0x26c1dc[_0xabd6('0x3f')]=_[_0xabd6('0x3e')](_0x54600d['query']);_0x26c1dc[_0xabd6('0x40')]=_['intersection'](_0x26c1dc[_0xabd6('0x3d')],_0x26c1dc[_0xabd6('0x3f')]);_0x26ce5c[_0xabd6('0x42')]=_[_0xabd6('0x41')](_0x26c1dc[_0xabd6('0x3d')],qs[_0xabd6('0x43')](_0x54600d[_0xabd6('0x3f')]['fields']));_0x26ce5c[_0xabd6('0x42')]=_0x26ce5c[_0xabd6('0x42')][_0xabd6('0x44')]?_0x26ce5c[_0xabd6('0x42')]:_0x26c1dc['model'];if(!_0x54600d[_0xabd6('0x3f')][_0xabd6('0x6a')]('nolimit')){_0x26ce5c[_0xabd6('0x2e')]=qs['limit'](_0x54600d[_0xabd6('0x3f')]['limit']);_0x26ce5c[_0xabd6('0x2d')]=qs['offset'](_0x54600d['query'][_0xabd6('0x2d')]);}_0x26ce5c[_0xabd6('0x46')]=qs[_0xabd6('0x47')](_0x54600d['query'][_0xabd6('0x47')]);_0x26ce5c[_0xabd6('0x48')]=qs[_0xabd6('0x40')](_[_0xabd6('0x49')](_0x54600d['query'],_0x26c1dc['filters']));_0x26ce5c[_0xabd6('0x48')][_0xabd6('0x65')]=_0x3e7e23['id'];if(_0x54600d[_0xabd6('0x3f')][_0xabd6('0x4a')]){_0x26ce5c[_0xabd6('0x48')]=_[_0xabd6('0x50')](_0x26ce5c[_0xabd6('0x48')],{'$or':_[_0xabd6('0x4b')](_0x26ce5c[_0xabd6('0x42')],function(_0x39baf8){var _0x39e70b={};_0x39e70b[_0x39baf8]={'$like':'%'+_0x54600d[_0xabd6('0x3f')][_0xabd6('0x4a')]+'%'};return _0x39e70b;})});}_0x26ce5c=_[_0xabd6('0x50')]({},_0x26ce5c,_0x54600d[_0xabd6('0x51')]);return db[_0xabd6('0x66')][_0xabd6('0x2c')]({'where':_0x26ce5c[_0xabd6('0x48')]})[_0xabd6('0x20')](function(_0x1de77d){_0x1a8a71[_0xabd6('0x2c')]=_0x1de77d;if(_0x54600d['query'][_0xabd6('0x56')]){_0x26ce5c[_0xabd6('0x52')]=[{'all':!![]}];}return db[_0xabd6('0x66')][_0xabd6('0x53')](_0x26ce5c);})[_0xabd6('0x20')](function(_0xcbdd8f){_0x1a8a71[_0xabd6('0x54')]=_0xcbdd8f;return _0x1a8a71;});}})[_0xabd6('0x20')](respondWithFilteredResult(_0x30a9cd,_0x26ce5c))[_0xabd6('0x29')](handleError(_0x30a9cd,null));};exports['removeDispositions']=function(_0x4f4460,_0x258709,_0x19fa10){var _0x560918;return db[_0xabd6('0x3c')]['find']({'where':{'id':_0x4f4460[_0xabd6('0x62')]['id']}})['then'](handleEntityNotFound(_0x258709,null))['then'](function(_0x5d1a5e){if(_0x5d1a5e){return _0x5d1a5e['removeDispositions'](_0x4f4460[_0xabd6('0x3f')][_0xabd6('0x6b')]);}})['then'](respondWithStatusCode(_0x258709,null))['catch'](handleError(_0x258709,null));};exports[_0xabd6('0x6c')]=function(_0x1fe09c,_0x115a41,_0x3f9cac){if(_0x1fe09c[_0xabd6('0x59')]['id']){delete _0x1fe09c[_0xabd6('0x59')]['id'];}return db[_0xabd6('0x3c')]['find']({'where':{'id':_0x1fe09c[_0xabd6('0x62')]['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x115a41,null))['then'](function(_0xce64ff){if(_0xce64ff){_0x1fe09c[_0xabd6('0x59')][_0xabd6('0x65')]=_0xce64ff['id'];return db[_0xabd6('0x6d')][_0xabd6('0x58')](_0x1fe09c[_0xabd6('0x59')]);}})[_0xabd6('0x20')](respondWithResult(_0x115a41,null))['catch'](handleError(_0x115a41,null));};exports[_0xabd6('0x6e')]=function(_0x8a9114,_0x5102a2,_0x155714){var _0x2d1db0={'raw':![],'where':{}};var _0xa45ef9={};var _0x227325={'count':0x0,'rows':[]};return db['FaxAccount'][_0xabd6('0x68')]({'where':{'id':_0x8a9114[_0xabd6('0x62')]['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x5102a2,null))['then'](function(_0x42a695){if(_0x42a695){_0xa45ef9[_0xabd6('0x3d')]=_[_0xabd6('0x3e')](db[_0xabd6('0x6d')][_0xabd6('0x69')]);_0xa45ef9[_0xabd6('0x3f')]=_[_0xabd6('0x3e')](_0x8a9114[_0xabd6('0x3f')]);_0xa45ef9[_0xabd6('0x40')]=_[_0xabd6('0x41')](_0xa45ef9['model'],_0xa45ef9['query']);_0x2d1db0[_0xabd6('0x42')]=_['intersection'](_0xa45ef9[_0xabd6('0x3d')],qs['fields'](_0x8a9114[_0xabd6('0x3f')][_0xabd6('0x43')]));_0x2d1db0[_0xabd6('0x42')]=_0x2d1db0[_0xabd6('0x42')][_0xabd6('0x44')]?_0x2d1db0[_0xabd6('0x42')]:_0xa45ef9[_0xabd6('0x3d')];if(!_0x8a9114[_0xabd6('0x3f')][_0xabd6('0x6a')]('nolimit')){_0x2d1db0[_0xabd6('0x2e')]=qs[_0xabd6('0x2e')](_0x8a9114['query'][_0xabd6('0x2e')]);_0x2d1db0[_0xabd6('0x2d')]=qs[_0xabd6('0x2d')](_0x8a9114['query']['offset']);}_0x2d1db0[_0xabd6('0x46')]=qs[_0xabd6('0x47')](_0x8a9114[_0xabd6('0x3f')][_0xabd6('0x47')]);_0x2d1db0['where']=qs['filters'](_[_0xabd6('0x49')](_0x8a9114[_0xabd6('0x3f')],_0xa45ef9[_0xabd6('0x40')]));_0x2d1db0[_0xabd6('0x48')][_0xabd6('0x65')]=_0x42a695['id'];if(_0x8a9114['query'][_0xabd6('0x4a')]){_0x2d1db0[_0xabd6('0x48')]=_[_0xabd6('0x50')](_0x2d1db0[_0xabd6('0x48')],{'$or':_[_0xabd6('0x4b')](_0x2d1db0['attributes'],function(_0xdb8633){var _0x1f4161={};_0x1f4161[_0xdb8633]={'$like':'%'+_0x8a9114[_0xabd6('0x3f')][_0xabd6('0x4a')]+'%'};return _0x1f4161;})});}_0x2d1db0=_['merge']({},_0x2d1db0,_0x8a9114[_0xabd6('0x51')]);return db[_0xabd6('0x6d')][_0xabd6('0x2c')]({'where':_0x2d1db0['where']})[_0xabd6('0x20')](function(_0x382fb2){_0x227325[_0xabd6('0x2c')]=_0x382fb2;if(_0x8a9114['query']['includeAll']){_0x2d1db0['include']=[{'all':!![]}];}return db[_0xabd6('0x6d')]['findAll'](_0x2d1db0);})['then'](function(_0x297eb4){_0x227325[_0xabd6('0x54')]=_0x297eb4;return _0x227325;});}})[_0xabd6('0x20')](respondWithFilteredResult(_0x5102a2,_0x2d1db0))['catch'](handleError(_0x5102a2,null));};exports[_0xabd6('0x6f')]=function(_0x3918cb,_0x551d5a,_0x38fc83){var _0x59169d;return db[_0xabd6('0x3c')][_0xabd6('0x57')]({'where':{'id':_0x3918cb[_0xabd6('0x62')]['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x551d5a,null))[_0xabd6('0x20')](function(_0x50d1a3){if(_0x50d1a3){return _0x50d1a3[_0xabd6('0x6f')](_0x3918cb[_0xabd6('0x3f')][_0xabd6('0x6b')]);}})['then'](respondWithStatusCode(_0x551d5a,null))[_0xabd6('0x29')](handleError(_0x551d5a,null));};exports[_0xabd6('0x70')]=function(_0x54e44b,_0x24b1bf,_0x46efae){return db[_0xabd6('0x71')][_0xabd6('0x57')]({'where':{'id':_0x54e44b['params']['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x24b1bf,null))[_0xabd6('0x20')](function(_0xb5dc68){if(_0xb5dc68){return _0xb5dc68[_0xabd6('0x70')](_0x54e44b['body'][_0xabd6('0x6b')],_['omit'](_0x54e44b[_0xabd6('0x59')],[_0xabd6('0x6b'),'id'])||{});}})[_0xabd6('0x20')](respondWithResult(_0x24b1bf,null))['catch'](handleError(_0x24b1bf,null));};exports[_0xabd6('0x72')]=function(_0x29f30d,_0x425c03,_0x3e166b){var _0x241bb5={'raw':![],'where':{}};var _0x2bfa8e={};var _0x360cba={'count':0x0,'rows':[]};return db[_0xabd6('0x3c')][_0xabd6('0x68')]({'where':{'id':_0x29f30d['params']['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x425c03,null))[_0xabd6('0x20')](function(_0x5925c8){if(_0x5925c8){_0x2bfa8e[_0xabd6('0x3d')]=_[_0xabd6('0x3e')](db[_0xabd6('0x71')][_0xabd6('0x69')]);_0x2bfa8e['query']=_[_0xabd6('0x3e')](_0x29f30d[_0xabd6('0x3f')]);_0x2bfa8e[_0xabd6('0x40')]=_[_0xabd6('0x41')](_0x2bfa8e['model'],_0x2bfa8e['query']);_0x241bb5[_0xabd6('0x42')]=_[_0xabd6('0x41')](_0x2bfa8e[_0xabd6('0x3d')],qs['fields'](_0x29f30d[_0xabd6('0x3f')][_0xabd6('0x43')]));_0x241bb5[_0xabd6('0x42')]=_0x241bb5[_0xabd6('0x42')][_0xabd6('0x44')]?_0x241bb5[_0xabd6('0x42')]:_0x2bfa8e[_0xabd6('0x3d')];if(!_0x29f30d[_0xabd6('0x3f')][_0xabd6('0x6a')](_0xabd6('0x45'))){_0x241bb5['limit']=qs['limit'](_0x29f30d[_0xabd6('0x3f')][_0xabd6('0x2e')]);_0x241bb5[_0xabd6('0x2d')]=qs[_0xabd6('0x2d')](_0x29f30d['query'][_0xabd6('0x2d')]);}_0x241bb5[_0xabd6('0x46')]=qs['sort'](_0x29f30d[_0xabd6('0x3f')][_0xabd6('0x47')]);_0x241bb5[_0xabd6('0x48')]=qs['filters'](_['pick'](_0x29f30d['query'],_0x2bfa8e[_0xabd6('0x40')]));_0x241bb5[_0xabd6('0x48')]['FaxAccountId']=_0x5925c8['id'];if(_0x29f30d['query'][_0xabd6('0x4a')]){_0x241bb5[_0xabd6('0x48')]=_['merge'](_0x241bb5[_0xabd6('0x48')],{'$or':_[_0xabd6('0x4b')](_0x241bb5['attributes'],function(_0x5d72c6){var _0x4cbb4e={};_0x4cbb4e[_0x5d72c6]={'$like':'%'+_0x29f30d[_0xabd6('0x3f')][_0xabd6('0x4a')]+'%'};return _0x4cbb4e;})});}_0x241bb5=_[_0xabd6('0x50')]({},_0x241bb5,_0x29f30d['options']);return db[_0xabd6('0x71')][_0xabd6('0x2c')]({'where':_0x241bb5[_0xabd6('0x48')]})['then'](function(_0x21a793){_0x360cba[_0xabd6('0x2c')]=_0x21a793;if(_0x29f30d[_0xabd6('0x3f')][_0xabd6('0x56')]){_0x241bb5[_0xabd6('0x52')]=[{'model':db[_0xabd6('0x73')],'as':'Contact','required':![]},{'model':db[_0xabd6('0x74')],'as':'Owner','attributes':['name',_0xabd6('0x75'),_0xabd6('0x76')],'required':![]},{'model':db[_0xabd6('0x77')],'as':'Tags','attributes':['id',_0xabd6('0x38'),_0xabd6('0x78')],'where':_0x29f30d['query'][_0xabd6('0x79')]?{'id':_0x29f30d['query'][_0xabd6('0x79')]}:undefined,'required':_0x29f30d[_0xabd6('0x3f')][_0xabd6('0x79')]?!![]:![]}];}return db['FaxInteraction'][_0xabd6('0x53')](_0x241bb5);})[_0xabd6('0x20')](function(_0x369706){_0x360cba['rows']=_0x369706;return _0x360cba;});}})[_0xabd6('0x20')](respondWithFilteredResult(_0x425c03,_0x241bb5))[_0xabd6('0x29')](handleError(_0x425c03,null));};exports[_0xabd6('0x7a')]=function(_0x3c9a7d,_0x101fbf,_0x33fa55){return db[_0xabd6('0x3c')][_0xabd6('0x68')]({'where':{'id':_0x3c9a7d['params']['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x101fbf,null))[_0xabd6('0x20')](function(_0x446129){if(_0x446129){return db[_0xabd6('0x7b')][_0xabd6('0x7c')](function(_0x3e85f7){return db[_0xabd6('0x7d')]['destroy']({'where':{'FaxAccountId':_0x3c9a7d[_0xabd6('0x62')]['id']},'transaction':_0x3e85f7})[_0xabd6('0x20')](function(_0x13f160){var _0x4a6fa9=_['map'](_0x3c9a7d['body'],function(_0xd2dc81){_0xd2dc81['FaxAccountId']=_0x3c9a7d['params']['id'];return _0xd2dc81;});return db['FaxApplication'][_0xabd6('0x7e')](_0x4a6fa9,{'transaction':_0x3e85f7});});})[_0xabd6('0x20')](function(){return db[_0xabd6('0x7d')][_0xabd6('0x7f')]({'where':{'FaxAccountId':_0x3c9a7d[_0xabd6('0x62')]['id']},'order':_0xabd6('0x80')});});}})[_0xabd6('0x20')](respondWithResult(_0x101fbf,null))['catch'](handleError(_0x101fbf,null));};exports[_0xabd6('0x81')]=function(_0x257588,_0x4d938c,_0x1b41be){var _0x5ede18={};var _0x211a27={};var _0x47070c;var _0x425574;return db[_0xabd6('0x3c')][_0xabd6('0x68')]({'where':{'id':_0x257588['params']['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x4d938c,null))[_0xabd6('0x20')](function(_0x28f43c){if(_0x28f43c){_0x47070c=_0x28f43c;_0x211a27[_0xabd6('0x3d')]=_[_0xabd6('0x3e')](db[_0xabd6('0x7d')][_0xabd6('0x69')]);_0x211a27[_0xabd6('0x3f')]=_[_0xabd6('0x3e')](_0x257588[_0xabd6('0x3f')]);_0x211a27['filters']=_[_0xabd6('0x41')](_0x211a27[_0xabd6('0x3d')],_0x211a27[_0xabd6('0x3f')]);_0x5ede18[_0xabd6('0x42')]=_[_0xabd6('0x41')](_0x211a27[_0xabd6('0x3d')],qs[_0xabd6('0x43')](_0x257588[_0xabd6('0x3f')][_0xabd6('0x43')]));_0x5ede18[_0xabd6('0x42')]=_0x5ede18[_0xabd6('0x42')]['length']?_0x5ede18[_0xabd6('0x42')]:_0x211a27[_0xabd6('0x3d')];_0x5ede18[_0xabd6('0x46')]=qs[_0xabd6('0x47')](_0x257588[_0xabd6('0x3f')]['sort']);_0x5ede18[_0xabd6('0x48')]=qs[_0xabd6('0x40')](_[_0xabd6('0x49')](_0x257588[_0xabd6('0x3f')],_0x211a27['filters']));if(_0x257588[_0xabd6('0x3f')][_0xabd6('0x4a')]){_0x5ede18['where']=_[_0xabd6('0x50')](_0x5ede18[_0xabd6('0x48')],{'$or':_['map'](_0x5ede18[_0xabd6('0x42')],function(_0x54fb15){var _0x4b960d={};_0x4b960d[_0x54fb15]={'$like':'%'+_0x257588[_0xabd6('0x3f')][_0xabd6('0x4a')]+'%'};return _0x4b960d;})});}_0x5ede18=_[_0xabd6('0x50')]({},_0x5ede18,_0x257588[_0xabd6('0x51')]);return _0x47070c['getApplications'](_0x5ede18);}})[_0xabd6('0x20')](function(_0x4d0185){if(_0x4d0185){_0x425574=_0x4d0185[_0xabd6('0x44')];if(!_0x257588['query'][_0xabd6('0x6a')](_0xabd6('0x45'))){_0x5ede18[_0xabd6('0x2e')]=qs[_0xabd6('0x2e')](_0x257588[_0xabd6('0x3f')][_0xabd6('0x2e')]);_0x5ede18[_0xabd6('0x2d')]=qs[_0xabd6('0x2d')](_0x257588[_0xabd6('0x3f')]['offset']);}return _0x47070c[_0xabd6('0x81')](_0x5ede18);}})[_0xabd6('0x20')](function(_0xb559dd){if(_0xb559dd){return _0xb559dd?{'count':_0x425574,'rows':_0xb559dd}:null;}})['then'](respondWithResult(_0x4d938c,null))[_0xabd6('0x29')](handleError(_0x4d938c,null));};function Extension(_0x272e27,_0x29ee7c,_0x1a5ea9,_0x265094){this[_0xabd6('0x82')]=_0xabd6('0x83');this['exten']=_0x272e27[_0xabd6('0x84')];this['app']=_0x265094;this[_0xabd6('0x4c')]=_0xabd6('0x85');this['description']=_0xabd6('0x86');this[_0xabd6('0x65')]=_0x272e27['id'];this['priority']=_0x29ee7c;this['appdata']=_0x1a5ea9;}function createExtensionsReciveFax(_0x5c80c4){var _0x1a2bf3=0x1;var _0x493894=[];_0x493894[_0xabd6('0x87')](new Extension(_0x5c80c4,_0x1a2bf3,'',_0xabd6('0x88')));_0x1a2bf3+=0x1;_0x493894[_0xabd6('0x87')](new Extension(_0x5c80c4,_0x1a2bf3,_0xabd6('0x89'),_0xabd6('0x8a')));_0x1a2bf3+=0x1;for(var _0x177b5f in _0x5c80c4){if(_0x5c80c4['hasOwnProperty'](_0x177b5f)&&(_0x177b5f===_0xabd6('0x8b')||_0x177b5f==='localstationid'||_0x177b5f==='gateway'||_0x177b5f==='faxdetect'||_0x177b5f===_0xabd6('0x8c')||_0x177b5f===_0xabd6('0x8d')||_0x177b5f===_0xabd6('0x8e')||_0x177b5f==='modem'||_0x177b5f==='t38timeout')){_0x493894[_0xabd6('0x87')](new Extension(_0x5c80c4,_0x1a2bf3,_0xabd6('0x8f')+_0x177b5f+')='+_0x5c80c4[_0x177b5f],_0xabd6('0x8a')));_0x1a2bf3+=0x1;}}_0x493894[_0xabd6('0x87')](new Extension(_0x5c80c4,_0x1a2bf3,'6',_0xabd6('0x90')));_0x1a2bf3+=0x1;_0x493894[_0xabd6('0x87')](new Extension(_0x5c80c4,_0x1a2bf3,_0xabd6('0x91'),_0xabd6('0x92')));_0x1a2bf3=0x0;return _0x493894;}exports['addAccountApplications']=function(_0x40dd0e,_0x420272,_0x26715f){var _0x37fb75;return db['sequelize'][_0xabd6('0x7c')](function(_0x12d2d0){return db[_0xabd6('0x3c')][_0xabd6('0x58')](_0x40dd0e[_0xabd6('0x59')],{'transaction':_0x12d2d0})[_0xabd6('0x20')](function(_0x77b785){_0x37fb75=_0x77b785['get']({'plain':!![]});return db[_0xabd6('0x93')][_0xabd6('0x7e')](createExtensionsReciveFax(_0x37fb75),{'transaction':_0x12d2d0});});})['then'](function(){return _0x37fb75;})[_0xabd6('0x20')](respondWithResult(_0x420272,null))[_0xabd6('0x29')](handleError(_0x420272,null));};exports[_0xabd6('0x94')]=function(_0xa16dc6,_0x3b7ac9,_0x71c050){var _0xc1c6df;return db[_0xabd6('0x7b')]['transaction'](function(_0x242644){return db[_0xabd6('0x3c')][_0xabd6('0x32')](_0xa16dc6[_0xabd6('0x59')],{'where':{'id':_0xa16dc6[_0xabd6('0x59')]['id']},'transaction':_0x242644})[_0xabd6('0x20')](function(_0x51b1bc){return db[_0xabd6('0x93')][_0xabd6('0x35')]({'where':{'FaxAccountId':_0xa16dc6[_0xabd6('0x59')]['id']},'transaction':_0x242644})[_0xabd6('0x20')](function(_0x5ac355){return db[_0xabd6('0x93')]['bulkCreate'](createExtensionsReciveFax(_['omit'](_0xa16dc6[_0xabd6('0x59')],[_0xabd6('0x95'),_0xabd6('0x4d'),'createdAt',_0xabd6('0x96'),_0xabd6('0x97'),_0xabd6('0x98')])),{'transaction':_0x242644});});});})['then'](function(){return db[_0xabd6('0x3c')][_0xabd6('0x99')](_0xa16dc6['body']['id']);})[_0xabd6('0x20')](respondWithResult(_0x3b7ac9,null))['catch'](handleError(_0x3b7ac9,null));};exports[_0xabd6('0x9a')]=function(_0x1b6a5f,_0x530671,_0x3cc924){var _0x5d2365={'raw':!![],'where':{}};var _0x1193ed={};var _0x8ba901={'count':0x0,'rows':[]};return db[_0xabd6('0x3c')]['findOne']({'where':{'id':_0x1b6a5f[_0xabd6('0x62')]['id']}})['then'](handleEntityNotFound(_0x530671,null))[_0xabd6('0x20')](function(_0x4bf8cf){if(_0x4bf8cf){_0x1193ed['model']=_[_0xabd6('0x3e')](db[_0xabd6('0x9b')]['rawAttributes']);_0x1193ed[_0xabd6('0x3f')]=_[_0xabd6('0x3e')](_0x1b6a5f[_0xabd6('0x3f')]);_0x1193ed[_0xabd6('0x40')]=_[_0xabd6('0x41')](_0x1193ed['model'],_0x1193ed[_0xabd6('0x3f')]);_0x5d2365['attributes']=_['intersection'](_0x1193ed['model'],qs[_0xabd6('0x43')](_0x1b6a5f['query'][_0xabd6('0x43')]));_0x5d2365[_0xabd6('0x42')]=_0x5d2365['attributes'][_0xabd6('0x44')]?_0x5d2365[_0xabd6('0x42')]:_0x1193ed[_0xabd6('0x3d')];if(!_0x1b6a5f[_0xabd6('0x3f')][_0xabd6('0x6a')](_0xabd6('0x45'))){_0x5d2365['limit']=qs['limit'](_0x1b6a5f['query']['limit']);_0x5d2365[_0xabd6('0x2d')]=qs[_0xabd6('0x2d')](_0x1b6a5f['query'][_0xabd6('0x2d')]);}_0x5d2365[_0xabd6('0x46')]=qs[_0xabd6('0x47')](_0x1b6a5f[_0xabd6('0x3f')]['sort']);_0x5d2365[_0xabd6('0x48')]=qs[_0xabd6('0x40')](_[_0xabd6('0x49')](_0x1b6a5f[_0xabd6('0x3f')],_0x1193ed['filters']));_0x5d2365[_0xabd6('0x48')][_0xabd6('0x65')]=_0x4bf8cf['id'];if(_0x1b6a5f['query']['filter']){_0x5d2365[_0xabd6('0x48')]=_['merge'](_0x5d2365[_0xabd6('0x48')],{'$or':_[_0xabd6('0x4b')](_0x5d2365[_0xabd6('0x42')],function(_0x8f8c57){var _0xd2101c={};_0xd2101c[_0x8f8c57]={'$like':'%'+_0x1b6a5f[_0xabd6('0x3f')][_0xabd6('0x4a')]+'%'};return _0xd2101c;})});}if(_0x1b6a5f[_0xabd6('0x3f')][_0xabd6('0x9c')]){var _0x34c3e5=_0x1b6a5f[_0xabd6('0x3f')]['$gte'][_0xabd6('0x9d')](',');var _0x4a3bfb={};_0x4a3bfb[_0x34c3e5[0x0]]={'$gte':moment(_0x34c3e5[0x1])[_0xabd6('0x9e')]('YYYY-MM-DD\x20HH:mm:ss')};_0x5d2365[_0xabd6('0x48')]=_['merge'](_0x5d2365['where'],_0x4a3bfb);}_0x5d2365=_[_0xabd6('0x50')]({},_0x5d2365,_0x1b6a5f[_0xabd6('0x51')]);return db[_0xabd6('0x9b')][_0xabd6('0x2c')]({'where':_0x5d2365[_0xabd6('0x48')]})[_0xabd6('0x20')](function(_0x209d84){_0x8ba901[_0xabd6('0x2c')]=_0x209d84;if(_0x1b6a5f[_0xabd6('0x3f')]['includeAll']){_0x5d2365[_0xabd6('0x52')]=[{'all':!![]}];}return db['FaxMessage'][_0xabd6('0x53')](_0x5d2365);})[_0xabd6('0x20')](function(_0xc2d926){_0x8ba901[_0xabd6('0x54')]=_0xc2d926;return _0x8ba901;});}})['then'](respondWithFilteredResult(_0x530671,_0x5d2365))[_0xabd6('0x29')](handleError(_0x530671,null));};exports[_0xabd6('0x39')]=function(_0x184a96,_0x59a225,_0x449cce){var _0x102836,_0x3e2bc7={},_0x517011;if(_0x184a96[_0xabd6('0x59')]['to']){_0x517011=_0x184a96[_0xabd6('0x59')]['to'][0x0];}return db[_0xabd6('0x3c')]['find']({'where':{'id':_0x184a96['params']['id']},'include':[{'model':db[_0xabd6('0x9f')],'as':_0xabd6('0xa0'),'include':[{'model':db[_0xabd6('0x73')],'as':_0xabd6('0xa1'),'where':{'fax':_0x517011},'limit':0x1,'order':[[_0xabd6('0x96'),_0xabd6('0xa2')]]}]}]})['then'](handleEntityNotFound(_0x59a225,null))[_0xabd6('0x20')](function(_0x5c2323){_0x102836=_0x5c2323;if(_0x184a96['body'][_0xabd6('0xa3')]&&_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')]['length']){for(var _0x508f62=0x0;_0x508f62<_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')]['length'];_0x508f62+=0x1){_0x184a96['body'][_0xabd6('0xa3')][_0x508f62]={'filename':_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][_0x508f62][_0xabd6('0x38')],'id':_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][_0x508f62]['id'],'path':path[_0xabd6('0xa4')](config[_0xabd6('0xa5')],_0xabd6('0xa6'),_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][_0x508f62][_0xabd6('0xa7')])};}}return respondWithRpcPromise('CheckAfterSend',_0xabd6('0xa8'),{'FaxAccountId':_[_0xabd6('0xa9')](_0x184a96[_0xabd6('0x62')]['id'])?undefined:_0x184a96[_0xabd6('0x62')]['id'],'path':_[_0xabd6('0xa9')](_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][0x0][_0xabd6('0x7')])?undefined:_0x184a96[_0xabd6('0x59')]['attachments'][0x0][_0xabd6('0x7')],'fax':_[_0xabd6('0xa9')](_0x184a96['body']['to'][0x0])?undefined:_0x184a96[_0xabd6('0x59')]['to'][0x0]},client9002);})[_0xabd6('0x20')](function(){if(_0x102836){if(_[_0xabd6('0xa9')](_0x184a96[_0xabd6('0x59')][_0xabd6('0xaa')])){_0x184a96[_0xabd6('0x59')][_0xabd6('0xaa')]=util[_0xabd6('0x9e')](_0xabd6('0xab'),_0x102836[_0xabd6('0x38')],_0x102836[_0xabd6('0xac')]);}if(_0x102836[_0xabd6('0xa0')]){if(_0x102836[_0xabd6('0xa0')][_0xabd6('0xa1')][_0xabd6('0x44')]){return _0x102836[_0xabd6('0xa0')][_0xabd6('0xa1')][0x0];}else{return db['CmContact'][_0xabd6('0x58')](_[_0xabd6('0x17')](_0x184a96['body'],{'firstName':_0x184a96[_0xabd6('0x59')]['to'][0x0],'phone':_0x184a96[_0xabd6('0x59')]['to'][0x0],'fax':_0x184a96[_0xabd6('0x59')]['to'][0x0],'ListId':_0x102836['ListId']}));}}else{throw new Error('List\x20not\x20found');}}else{throw new Error(_0xabd6('0xad'));}})[_0xabd6('0x20')](function(_0x23ea7a){if(_0x23ea7a){return db[_0xabd6('0x71')][_0xabd6('0x57')]({'where':{'ContactId':_0x23ea7a['id'],'closed':![],'FaxAccountId':_0x102836['id']}})['then'](function(_0xfc174){if(_0xfc174){return[_0xfc174,![]];}return db['FaxInteraction'][_0xabd6('0x58')]({'UserId':_0x184a96[_0xabd6('0x5a')]['id'],'ContactId':_0x23ea7a['id'],'FaxAccountId':_0x102836['id'],'fax':_0x184a96[_0xabd6('0x59')]['to'][0x0],'firstMsgDirection':_0xabd6('0xae'),'Messages':[_['merge'](_0x184a96[_0xabd6('0x59')],{'read':![],'body':_0x184a96[_0xabd6('0x59')]['attachments'][0x0][_0xabd6('0xaf')],'FaxAccountId':_0x102836['id'],'UserId':_0x184a96['user']['id'],'ContactId':_0x23ea7a['id'],'AttachmentId':_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][0x0]['id']})]},{'include':[{'model':db['FaxMessage'],'as':_0xabd6('0xb0')}]})[_0xabd6('0x20')](function(_0x2e6456){return[_0x2e6456,!![]];});});}else{throw new Error('Contact\x20not\x20found');}})[_0xabd6('0xb1')](function(_0x2da3d2,_0x16ab58){if(_0x16ab58){return _0x2da3d2;}return db[_0xabd6('0x9b')]['create']({'direction':'out','read':![],'body':_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][0x0][_0xabd6('0xaf')],'FaxAccountId':_0x102836['id'],'FaxInteractionId':_0x2da3d2['id'],'UserId':_0x184a96[_0xabd6('0x5a')]['id'],'ContactId':_0x2da3d2[_0xabd6('0xb2')],'AttachmentId':_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][0x0]['id']})[_0xabd6('0x20')](function(_0x503245){_0x2da3d2[_0xabd6('0xb3')][_0xabd6('0xb0')]=[];_0x2da3d2[_0xabd6('0xb3')][_0xabd6('0xb0')]['push'](_0x503245['dataValues']);return _0x2da3d2;});})[_0xabd6('0x20')](function(_0x318160){respondWithRpcPromise(_0xabd6('0xb4'),_0xabd6('0xb4'),{'FaxAccountId':_['isNil'](_0x184a96[_0xabd6('0x62')]['id'])?undefined:_0x184a96[_0xabd6('0x62')]['id'],'path':_[_0xabd6('0xa9')](_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][0x0][_0xabd6('0x7')])?undefined:_0x184a96[_0xabd6('0x59')][_0xabd6('0xa3')][0x0][_0xabd6('0x7')],'fax':_[_0xabd6('0xa9')](_0x184a96['body']['to'][0x0])?undefined:_0x184a96[_0xabd6('0x59')]['to'][0x0],'AttachmentId':_0x184a96[_0xabd6('0x59')]['attachments'][0x0]['id']},client9002)[_0xabd6('0x20')](function(_0x562596){logger['info'](_0xabd6('0xb5'),_0x562596);})[_0xabd6('0x29')](function(_0x11a7d4){logger[_0xabd6('0x21')]('SendFaxRpc,\x20%s',_0x11a7d4);});return _0x318160;})['then'](respondWithResult(_0x59a225,null))[_0xabd6('0x29')](handleError(_0x59a225,null));};exports['addAgents']=function(_0xd04023,_0x152cba,_0x321faa){return db[_0xabd6('0x3c')]['find']({'where':{'id':_0xd04023[_0xabd6('0x62')]['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x152cba,null))[_0xabd6('0x20')](function(_0x1493e9){if(_0x1493e9){return _0x1493e9['addAgents'](_0xd04023[_0xabd6('0x59')][_0xabd6('0x6b')],_[_0xabd6('0xb6')](_0xd04023[_0xabd6('0x59')],[_0xabd6('0x6b'),'id'])||{})[_0xabd6('0xb1')](function(_0x2aa067){for(var _0x2e4d45=0x0;_0x2e4d45<_0xd04023[_0xabd6('0x59')]['ids'][_0xabd6('0x44')];_0x2e4d45+=0x1){socket[_0xabd6('0xb7')](_0xabd6('0xb8'),{'UserId':_0xd04023[_0xabd6('0x59')][_0xabd6('0x6b')][_0x2e4d45],'FaxAccountId':_0xd04023[_0xabd6('0x62')]['id']});}return _0x2aa067;});}})[_0xabd6('0x20')](respondWithResult(_0x152cba,null))[_0xabd6('0x29')](handleError(_0x152cba,null));};exports[_0xabd6('0xb9')]=function(_0x2bf229,_0xa74606,_0x457ae7){var _0x1037e5;return db['FaxAccount'][_0xabd6('0x57')]({'where':{'id':_0x2bf229[_0xabd6('0x62')]['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0xa74606,null))[_0xabd6('0x20')](function(_0x255e89){if(_0x255e89){return _0x255e89[_0xabd6('0xb9')](_0x2bf229[_0xabd6('0x3f')][_0xabd6('0x6b')])[_0xabd6('0x20')](function(_0x3eb549){if(_[_0xabd6('0xba')](_0x2bf229[_0xabd6('0x3f')][_0xabd6('0x6b')])){for(var _0x546346=0x0;_0x546346<_0x2bf229[_0xabd6('0x3f')][_0xabd6('0x6b')][_0xabd6('0x44')];_0x546346+=0x1){socket[_0xabd6('0xb7')](_0xabd6('0xbb'),{'UserId':_0x2bf229[_0xabd6('0x3f')][_0xabd6('0x6b')][_0x546346],'FaxAccountId':_0x2bf229['params']['id']});}}else{socket['emit'](_0xabd6('0xbb'),{'UserId':_0x2bf229[_0xabd6('0x3f')][_0xabd6('0x6b')],'FaxAccountId':_0x2bf229[_0xabd6('0x62')]['id']});}});}})[_0xabd6('0x20')](respondWithStatusCode(_0xa74606,null))[_0xabd6('0x29')](handleError(_0xa74606,null));};exports[_0xabd6('0xbc')]=function(_0x58ce3f,_0x48d853,_0x38b60e){var _0x2dcc50={};var _0x61b14d={};var _0x484d83;var _0x333d68;return db['FaxAccount'][_0xabd6('0x68')]({'where':{'id':_0x58ce3f[_0xabd6('0x62')]['id']}})[_0xabd6('0x20')](handleEntityNotFound(_0x48d853,null))[_0xabd6('0x20')](function(_0x2891cc){if(_0x2891cc){_0x484d83=_0x2891cc;_0x61b14d[_0xabd6('0x3d')]=_['keys'](db[_0xabd6('0x74')]['rawAttributes']);_0x61b14d[_0xabd6('0x3f')]=_[_0xabd6('0x3e')](_0x58ce3f[_0xabd6('0x3f')]);_0x61b14d[_0xabd6('0x40')]=_['intersection'](_0x61b14d[_0xabd6('0x3d')],_0x61b14d['query']);_0x2dcc50[_0xabd6('0x42')]=_[_0xabd6('0x41')](_0x61b14d[_0xabd6('0x3d')],qs['fields'](_0x58ce3f['query'][_0xabd6('0x43')]));_0x2dcc50[_0xabd6('0x42')]=_0x2dcc50[_0xabd6('0x42')][_0xabd6('0x44')]?_0x2dcc50[_0xabd6('0x42')]:_0x61b14d[_0xabd6('0x3d')];_0x2dcc50['order']=qs['sort'](_0x58ce3f[_0xabd6('0x3f')][_0xabd6('0x47')]);_0x2dcc50[_0xabd6('0x48')]=qs[_0xabd6('0x40')](_[_0xabd6('0x49')](_0x58ce3f[_0xabd6('0x3f')],_0x61b14d[_0xabd6('0x40')]));if(_0x58ce3f[_0xabd6('0x3f')][_0xabd6('0x4a')]){_0x2dcc50[_0xabd6('0x48')]=_[_0xabd6('0x50')](_0x2dcc50[_0xabd6('0x48')],{'$or':_[_0xabd6('0x4b')](_0x2dcc50['attributes'],function(_0x134628){var _0x2f2817={};_0x2f2817[_0x134628]={'$like':'%'+_0x58ce3f[_0xabd6('0x3f')][_0xabd6('0x4a')]+'%'};return _0x2f2817;})});}_0x2dcc50=_[_0xabd6('0x50')]({},_0x2dcc50,_0x58ce3f[_0xabd6('0x51')]);return _0x484d83['getAgents'](_0x2dcc50);}})[_0xabd6('0x20')](function(_0x257bed){if(_0x257bed){_0x333d68=_0x257bed['length'];if(!_0x58ce3f[_0xabd6('0x3f')][_0xabd6('0x6a')](_0xabd6('0x45'))){_0x2dcc50[_0xabd6('0x2e')]=qs[_0xabd6('0x2e')](_0x58ce3f[_0xabd6('0x3f')][_0xabd6('0x2e')]);_0x2dcc50[_0xabd6('0x2d')]=qs[_0xabd6('0x2d')](_0x58ce3f['query'][_0xabd6('0x2d')]);}return _0x484d83[_0xabd6('0xbc')](_0x2dcc50);}})[_0xabd6('0x20')](function(_0x23d86b){if(_0x23d86b){return _0x23d86b?{'count':_0x333d68,'rows':_0x23d86b}:null;}})[_0xabd6('0x20')](respondWithResult(_0x48d853,null))['catch'](handleError(_0x48d853,null));};
\ No newline at end of file
+var _0xb422=['mandatoryDispositionPause','FaxAccount','rawAttributes','model','keys','query','filters','intersection','fields','attributes','nolimit','limit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','options','includeAll','findAll','rows','show','params','length','include','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','addDisposition','FaxAccountId','Disposition','getDispositions','findOne','removeDispositions','ids','CannedAnswer','getAnswers','hasOwnProperty','removeAnswers','FaxInteraction','addInteraction','omit','getInteractions','CmContact','Contact','Owner','fullname','internal','Tags','color','tag','addApplications','sequelize','transaction','FaxApplication','bulkCreate','findAndCountAll','priority','getApplications','context','from-voip-provider','exten','localstationid','app','system','description','Answer','CDR(type)=inbound-fax','Set','ecm','faxdetect','maxrate','minrate','modem','t38timeout','push','FAXOPT(','/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','updateAccountApplications','VoiceExtension','tech','createdAt','updatedAt','TrunkId','ListId','findById','getMessages','$gte','split','format','FaxMessage','List','DESC','attachments','join','root','server/files/attachments','CheckAfterSend','isNil','from','\x22%s\x22\x20<%s>','fax','Contacts','Send\x20Fax\x20failed','out','filename','Messages','Contact\x20not\x20found','spread','ContactId','dataValues','SendFax','addAgents','emit','userFaxAccount:save','removeAgents','isArray','userFaxAccount:remove','getAgents','User','zip-dir','moment','mustache','path','to-csv','ejs','lodash','crypto','jsforce','desk.js','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','redis','defaults','localhost','./faxAccount.socket','register','client','http','request','then','info','FaxAccount,\x20%s,\x20%s','request\x20sent','debug','FaxAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','update','destroy','get','UserProfileResource','stack','name','send','index','Pause'];(function(_0x50c53e,_0x11e1d1){var _0x30c52b=function(_0x26ff69){while(--_0x26ff69){_0x50c53e['push'](_0x50c53e['shift']());}};_0x30c52b(++_0x11e1d1);}(_0xb422,0x85));var _0x2b42=function(_0x3a1dec,_0x1f943f){_0x3a1dec=_0x3a1dec-0x0;var _0x60ede0=_0xb422[_0x3a1dec];return _0x60ede0;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x2b42('0x0'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x2b42('0x1'));var BPromise=require('bluebird');var Mustache=require(_0x2b42('0x2'));var util=require('util');var path=require(_0x2b42('0x3'));var sox=require('sox');var csv=require(_0x2b42('0x4'));var ejs=require(_0x2b42('0x5'));var fs=require('fs');var _=require(_0x2b42('0x6'));var squel=require('squel');var crypto=require(_0x2b42('0x7'));var jsforce=require(_0x2b42('0x8'));var deskjs=require(_0x2b42('0x9'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x2b42('0xa'));var authService=require('../../components/auth/service');var hardwareService=require(_0x2b42('0xb'));var Redis=require(_0x2b42('0xc'));var qs=require(_0x2b42('0xd'));var logger=require(_0x2b42('0xe'))('api');var utils=require(_0x2b42('0xf'));var config=require(_0x2b42('0x10'));var db=require('../../mysqldb')['db'];config[_0x2b42('0x11')]=_[_0x2b42('0x12')](config[_0x2b42('0x11')],{'host':_0x2b42('0x13'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x2b42('0x14'))[_0x2b42('0x15')](socket);var jayson=require('jayson/promise');var client=jayson[_0x2b42('0x16')][_0x2b42('0x17')]({'port':0x232c});var client9002=jayson[_0x2b42('0x16')][_0x2b42('0x17')]({'port':0x232a});function respondWithRpcPromise(_0x4cb695,_0xc7e610,_0x84b092,_0x1b93d5){return new BPromise(function(_0x61d64c,_0x1f7e7a){var _0x4897d8=_0x1b93d5||client;return _0x4897d8[_0x2b42('0x18')](_0x4cb695,_0x84b092)[_0x2b42('0x19')](function(_0x2302dd){logger[_0x2b42('0x1a')](_0x2b42('0x1b'),_0xc7e610,_0x2b42('0x1c'));logger[_0x2b42('0x1d')](_0x2b42('0x1e'),_0xc7e610,'request\x20sent',JSON[_0x2b42('0x1f')](_0x2302dd));if(_0x2302dd[_0x2b42('0x20')]){if(_0x2302dd['error'][_0x2b42('0x21')]===0x1f4){logger['error'](_0x2b42('0x1b'),_0xc7e610,_0x2302dd[_0x2b42('0x20')][_0x2b42('0x22')]);return _0x1f7e7a(_0x2302dd['error']['message']);}logger[_0x2b42('0x20')](_0x2b42('0x1b'),_0xc7e610,_0x2302dd[_0x2b42('0x20')][_0x2b42('0x22')]);return _0x61d64c(_0x2302dd['error'][_0x2b42('0x22')]);}else{logger[_0x2b42('0x1a')]('FaxAccount,\x20%s,\x20%s',_0xc7e610,_0x2b42('0x1c'));_0x61d64c(_0x2302dd[_0x2b42('0x23')][_0x2b42('0x22')]);}})[_0x2b42('0x24')](function(_0x252b8){logger[_0x2b42('0x20')]('FaxAccount,\x20%s,\x20%s',_0xc7e610,_0x252b8);_0x1f7e7a(_0x252b8);});});}function respondWithStatusCode(_0x20ee74,_0x319692){_0x319692=_0x319692||0xcc;return function(_0x477e97){if(_0x477e97){return _0x20ee74[_0x2b42('0x25')](_0x319692);}return _0x20ee74[_0x2b42('0x26')](_0x319692)[_0x2b42('0x27')]();};}function respondWithResult(_0x130912,_0xd0ed7d){_0xd0ed7d=_0xd0ed7d||0xc8;return function(_0x2db5d7){if(_0x2db5d7){return _0x130912[_0x2b42('0x26')](_0xd0ed7d)[_0x2b42('0x28')](_0x2db5d7);}};}function respondWithFilteredResult(_0x571923,_0x4c8364){return function(_0x162efa){if(_0x162efa){var _0xcb30f5=_0x162efa[_0x2b42('0x29')],_0x8293e2=_0x4c8364[_0x2b42('0x2a')],_0x352ef7=_0x4c8364[_0x2b42('0x2a')]+_0x4c8364['limit'],_0x4b43b0;if(_0x352ef7>=_0xcb30f5){_0x352ef7=_0xcb30f5;_0x4b43b0=0xc8;}else{_0x4b43b0=0xce;}_0x571923['status'](_0x4b43b0);return _0x571923[_0x2b42('0x2b')](_0x2b42('0x2c'),_0x8293e2+'-'+_0x352ef7+'/'+_0xcb30f5)[_0x2b42('0x28')](_0x162efa);}return null;};}function patchUpdates(_0x17d28a){return function(_0x5ce662){try{jsonpatch[_0x2b42('0x2d')](_0x5ce662,_0x17d28a,!![]);}catch(_0x38148e){return BPromise[_0x2b42('0x2e')](_0x38148e);}return _0x5ce662['save']();};}function saveUpdates(_0x250388,_0x1a831c){return function(_0x3e029d){if(_0x3e029d){return _0x3e029d[_0x2b42('0x2f')](_0x250388)[_0x2b42('0x19')](function(_0x32a2d2){return _0x32a2d2;});}return null;};}function removeEntity(_0x39a618,_0x200c17){return function(_0x4305bb){if(_0x4305bb){return _0x4305bb[_0x2b42('0x30')]()[_0x2b42('0x19')](function(){var _0x52ed8a=_0x4305bb[_0x2b42('0x31')]({'plain':!![]});var _0x4b574a='FaxAccounts';return db[_0x2b42('0x32')][_0x2b42('0x30')]({'where':{'type':_0x4b574a,'resourceId':_0x52ed8a['id']}})['then'](function(){return _0x4305bb;});})['then'](function(){_0x39a618['status'](0xcc)[_0x2b42('0x27')]();});}};}function handleEntityNotFound(_0x339b9f,_0x14d7d4){return function(_0x4ba982){if(!_0x4ba982){_0x339b9f[_0x2b42('0x25')](0x194);}return _0x4ba982;};}function handleError(_0x8c7703,_0x5b538d){_0x5b538d=_0x5b538d||0x1f4;return function(_0x4dda76){logger[_0x2b42('0x20')](_0x4dda76[_0x2b42('0x33')]);if(_0x4dda76[_0x2b42('0x34')]){delete _0x4dda76['name'];}_0x8c7703[_0x2b42('0x26')](_0x5b538d)[_0x2b42('0x35')](_0x4dda76);};}exports[_0x2b42('0x36')]=function(_0x45d4ab,_0x175367){var _0x48d362={'include':[{'model':db[_0x2b42('0x37')],'as':_0x2b42('0x38')}]},_0x388def={},_0xa9a830={'count':0x0,'rows':[]};var _0x208f3c=db[_0x2b42('0x39')][_0x2b42('0x3a')];_0x388def[_0x2b42('0x3b')]=_[_0x2b42('0x3c')](_0x208f3c);_0x388def[_0x2b42('0x3d')]=_['keys'](_0x45d4ab['query']);_0x388def[_0x2b42('0x3e')]=_[_0x2b42('0x3f')](_0x388def[_0x2b42('0x3b')],_0x388def[_0x2b42('0x3d')]);_0x48d362['attributes']=_[_0x2b42('0x3f')](_0x388def[_0x2b42('0x3b')],qs[_0x2b42('0x40')](_0x45d4ab[_0x2b42('0x3d')][_0x2b42('0x40')]));_0x48d362['attributes']=_0x48d362[_0x2b42('0x41')]['length']?_0x48d362[_0x2b42('0x41')]:_0x388def[_0x2b42('0x3b')];if(!_0x45d4ab['query']['hasOwnProperty'](_0x2b42('0x42'))){_0x48d362[_0x2b42('0x43')]=qs['limit'](_0x45d4ab['query'][_0x2b42('0x43')]);_0x48d362[_0x2b42('0x2a')]=qs[_0x2b42('0x2a')](_0x45d4ab[_0x2b42('0x3d')][_0x2b42('0x2a')]);}_0x48d362[_0x2b42('0x44')]=qs['sort'](_0x45d4ab[_0x2b42('0x3d')][_0x2b42('0x45')]);_0x48d362['where']=qs[_0x2b42('0x3e')](_[_0x2b42('0x46')](_0x45d4ab[_0x2b42('0x3d')],_0x388def[_0x2b42('0x3e')]));if(_0x45d4ab[_0x2b42('0x3d')][_0x2b42('0x47')]){_0x48d362[_0x2b42('0x48')]=_[_0x2b42('0x49')](_0x48d362[_0x2b42('0x48')],{'$or':_[_0x2b42('0x4a')](_0x208f3c,function(_0xe4fb0){if(_0xe4fb0[_0x2b42('0x4b')][_0x2b42('0x4c')]!==_0x2b42('0x4d')){var _0x296a8a={};_0x296a8a[_0xe4fb0['field']]={'$like':'%'+_0x45d4ab['query']['filter']+'%'};return _0x296a8a;}})});}_0x48d362=_[_0x2b42('0x49')]({},_0x48d362,_0x45d4ab[_0x2b42('0x4e')]);var _0x117bad={'where':_0x48d362[_0x2b42('0x48')]};return db[_0x2b42('0x39')][_0x2b42('0x29')](_0x117bad)['then'](function(_0x11da42){_0xa9a830[_0x2b42('0x29')]=_0x11da42;if(_0x45d4ab['query'][_0x2b42('0x4f')]){_0x48d362['include']=[{'all':!![]}];}return db[_0x2b42('0x39')][_0x2b42('0x50')](_0x48d362);})[_0x2b42('0x19')](function(_0x45fecd){_0xa9a830[_0x2b42('0x51')]=_0x45fecd;return _0xa9a830;})[_0x2b42('0x19')](respondWithFilteredResult(_0x175367,_0x48d362))[_0x2b42('0x24')](handleError(_0x175367,null));};exports[_0x2b42('0x52')]=function(_0x4a6cf4,_0x78bd94){var _0x54f224={'raw':![],'where':{'id':_0x4a6cf4[_0x2b42('0x53')]['id']},'include':[{'model':db[_0x2b42('0x37')],'as':'mandatoryDispositionPause'}]},_0x452bb8={};_0x452bb8[_0x2b42('0x3b')]=_[_0x2b42('0x3c')](db[_0x2b42('0x39')][_0x2b42('0x3a')]);_0x452bb8['query']=_['keys'](_0x4a6cf4[_0x2b42('0x3d')]);_0x452bb8[_0x2b42('0x3e')]=_[_0x2b42('0x3f')](_0x452bb8[_0x2b42('0x3b')],_0x452bb8['query']);_0x54f224[_0x2b42('0x41')]=_[_0x2b42('0x3f')](_0x452bb8[_0x2b42('0x3b')],qs[_0x2b42('0x40')](_0x4a6cf4[_0x2b42('0x3d')]['fields']));_0x54f224[_0x2b42('0x41')]=_0x54f224[_0x2b42('0x41')][_0x2b42('0x54')]?_0x54f224[_0x2b42('0x41')]:_0x452bb8[_0x2b42('0x3b')];if(_0x4a6cf4[_0x2b42('0x3d')][_0x2b42('0x4f')]){_0x54f224[_0x2b42('0x55')]=[{'all':!![]}];}_0x54f224=_[_0x2b42('0x49')]({},_0x54f224,_0x4a6cf4['options']);return db[_0x2b42('0x39')][_0x2b42('0x56')](_0x54f224)[_0x2b42('0x19')](handleEntityNotFound(_0x78bd94,null))[_0x2b42('0x19')](respondWithResult(_0x78bd94,null))['catch'](handleError(_0x78bd94,null));};exports['create']=function(_0x43974d,_0x346fb1){return db[_0x2b42('0x39')][_0x2b42('0x57')](_0x43974d[_0x2b42('0x58')],{})[_0x2b42('0x19')](function(_0x256f60){var _0x2ebd0c=_0x43974d[_0x2b42('0x59')]['get']({'plain':!![]});if(!_0x2ebd0c)throw new Error(_0x2b42('0x5a'));if(_0x2ebd0c['role']===_0x2b42('0x59')){var _0x1dede0=_0x256f60[_0x2b42('0x31')]({'plain':!![]});var _0x578950='FaxAccounts';return db['UserProfileSection'][_0x2b42('0x56')]({'where':{'name':_0x578950,'userProfileId':_0x2ebd0c[_0x2b42('0x5b')]},'raw':!![]})['then'](function(_0x41cdbb){if(_0x41cdbb&&_0x41cdbb[_0x2b42('0x5c')]===0x0){return db[_0x2b42('0x32')][_0x2b42('0x57')]({'name':_0x1dede0['name'],'resourceId':_0x1dede0['id'],'type':_0x41cdbb[_0x2b42('0x34')],'sectionId':_0x41cdbb['id']},{})['then'](function(){return _0x256f60;});}else{return _0x256f60;}})[_0x2b42('0x24')](function(_0x5b7781){logger[_0x2b42('0x20')](_0x2b42('0x5d'),_0x5b7781);throw _0x5b7781;});}return _0x256f60;})['then'](respondWithResult(_0x346fb1,0xc9))[_0x2b42('0x24')](handleError(_0x346fb1,null));};exports[_0x2b42('0x2f')]=function(_0x1ef0d4,_0x280ca7){if(_0x1ef0d4['body']['id']){delete _0x1ef0d4[_0x2b42('0x58')]['id'];}return db[_0x2b42('0x39')][_0x2b42('0x56')]({'where':{'id':_0x1ef0d4[_0x2b42('0x53')]['id']},'include':[{'model':db['Pause'],'as':_0x2b42('0x38')}]})[_0x2b42('0x19')](handleEntityNotFound(_0x280ca7,null))[_0x2b42('0x19')](saveUpdates(_0x1ef0d4[_0x2b42('0x58')],null))['then'](respondWithResult(_0x280ca7,null))[_0x2b42('0x24')](handleError(_0x280ca7,null));};exports[_0x2b42('0x30')]=function(_0x52b191,_0x1faf30){return db[_0x2b42('0x39')][_0x2b42('0x56')]({'where':{'id':_0x52b191[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x1faf30,null))[_0x2b42('0x19')](removeEntity(_0x1faf30,null))[_0x2b42('0x24')](handleError(_0x1faf30,null));};exports['describe']=function(_0x3489bb,_0x10ffb7){return db[_0x2b42('0x39')][_0x2b42('0x5e')]()[_0x2b42('0x19')](respondWithResult(_0x10ffb7,null))[_0x2b42('0x24')](handleError(_0x10ffb7,null));};exports[_0x2b42('0x5f')]=function(_0x20c26a,_0x3ab5b5,_0x4b945e){if(_0x20c26a[_0x2b42('0x58')]['id']){delete _0x20c26a[_0x2b42('0x58')]['id'];}return db['FaxAccount']['find']({'where':{'id':_0x20c26a['params']['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x3ab5b5,null))[_0x2b42('0x19')](function(_0x55fb3e){if(_0x55fb3e){_0x20c26a[_0x2b42('0x58')][_0x2b42('0x60')]=_0x55fb3e['id'];return db[_0x2b42('0x61')][_0x2b42('0x57')](_0x20c26a[_0x2b42('0x58')]);}})[_0x2b42('0x19')](respondWithResult(_0x3ab5b5,null))[_0x2b42('0x24')](handleError(_0x3ab5b5,null));};exports[_0x2b42('0x62')]=function(_0x38c98f,_0x47868f,_0x327f58){var _0xc2e6b3={'raw':![],'where':{}};var _0x78db74={};var _0x32982a={'count':0x0,'rows':[]};return db[_0x2b42('0x39')][_0x2b42('0x63')]({'where':{'id':_0x38c98f[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x47868f,null))[_0x2b42('0x19')](function(_0x484d2d){if(_0x484d2d){_0x78db74['model']=_[_0x2b42('0x3c')](db[_0x2b42('0x61')][_0x2b42('0x3a')]);_0x78db74[_0x2b42('0x3d')]=_[_0x2b42('0x3c')](_0x38c98f[_0x2b42('0x3d')]);_0x78db74['filters']=_[_0x2b42('0x3f')](_0x78db74[_0x2b42('0x3b')],_0x78db74[_0x2b42('0x3d')]);_0xc2e6b3[_0x2b42('0x41')]=_[_0x2b42('0x3f')](_0x78db74[_0x2b42('0x3b')],qs[_0x2b42('0x40')](_0x38c98f['query'][_0x2b42('0x40')]));_0xc2e6b3[_0x2b42('0x41')]=_0xc2e6b3['attributes']['length']?_0xc2e6b3[_0x2b42('0x41')]:_0x78db74[_0x2b42('0x3b')];if(!_0x38c98f[_0x2b42('0x3d')]['hasOwnProperty']('nolimit')){_0xc2e6b3[_0x2b42('0x43')]=qs[_0x2b42('0x43')](_0x38c98f[_0x2b42('0x3d')][_0x2b42('0x43')]);_0xc2e6b3[_0x2b42('0x2a')]=qs[_0x2b42('0x2a')](_0x38c98f['query'][_0x2b42('0x2a')]);}_0xc2e6b3[_0x2b42('0x44')]=qs[_0x2b42('0x45')](_0x38c98f[_0x2b42('0x3d')][_0x2b42('0x45')]);_0xc2e6b3[_0x2b42('0x48')]=qs[_0x2b42('0x3e')](_[_0x2b42('0x46')](_0x38c98f['query'],_0x78db74[_0x2b42('0x3e')]));_0xc2e6b3[_0x2b42('0x48')]['FaxAccountId']=_0x484d2d['id'];if(_0x38c98f['query']['filter']){_0xc2e6b3['where']=_[_0x2b42('0x49')](_0xc2e6b3[_0x2b42('0x48')],{'$or':_[_0x2b42('0x4a')](_0xc2e6b3['attributes'],function(_0x56a900){var _0x7f940d={};_0x7f940d[_0x56a900]={'$like':'%'+_0x38c98f[_0x2b42('0x3d')][_0x2b42('0x47')]+'%'};return _0x7f940d;})});}_0xc2e6b3=_[_0x2b42('0x49')]({},_0xc2e6b3,_0x38c98f['options']);return db[_0x2b42('0x61')]['count']({'where':_0xc2e6b3['where']})[_0x2b42('0x19')](function(_0x1c98ca){_0x32982a[_0x2b42('0x29')]=_0x1c98ca;if(_0x38c98f[_0x2b42('0x3d')][_0x2b42('0x4f')]){_0xc2e6b3[_0x2b42('0x55')]=[{'all':!![]}];}return db[_0x2b42('0x61')]['findAll'](_0xc2e6b3);})[_0x2b42('0x19')](function(_0x311c62){_0x32982a['rows']=_0x311c62;return _0x32982a;});}})['then'](respondWithFilteredResult(_0x47868f,_0xc2e6b3))[_0x2b42('0x24')](handleError(_0x47868f,null));};exports[_0x2b42('0x64')]=function(_0x4eb138,_0x137e77,_0x2587f4){var _0x409c28;return db['FaxAccount'][_0x2b42('0x56')]({'where':{'id':_0x4eb138[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x137e77,null))[_0x2b42('0x19')](function(_0x51c142){if(_0x51c142){return _0x51c142['removeDispositions'](_0x4eb138[_0x2b42('0x3d')][_0x2b42('0x65')]);}})[_0x2b42('0x19')](respondWithStatusCode(_0x137e77,null))[_0x2b42('0x24')](handleError(_0x137e77,null));};exports['addAnswer']=function(_0x155d43,_0x265720,_0x4f9a05){if(_0x155d43[_0x2b42('0x58')]['id']){delete _0x155d43['body']['id'];}return db[_0x2b42('0x39')][_0x2b42('0x56')]({'where':{'id':_0x155d43[_0x2b42('0x53')]['id']}})['then'](handleEntityNotFound(_0x265720,null))['then'](function(_0x267d7c){if(_0x267d7c){_0x155d43[_0x2b42('0x58')][_0x2b42('0x60')]=_0x267d7c['id'];return db[_0x2b42('0x66')][_0x2b42('0x57')](_0x155d43[_0x2b42('0x58')]);}})[_0x2b42('0x19')](respondWithResult(_0x265720,null))[_0x2b42('0x24')](handleError(_0x265720,null));};exports[_0x2b42('0x67')]=function(_0x253079,_0x1e365f,_0x397b03){var _0x6d8f45={'raw':![],'where':{}};var _0x4def59={};var _0x274f03={'count':0x0,'rows':[]};return db[_0x2b42('0x39')][_0x2b42('0x63')]({'where':{'id':_0x253079[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x1e365f,null))['then'](function(_0x404850){if(_0x404850){_0x4def59[_0x2b42('0x3b')]=_[_0x2b42('0x3c')](db[_0x2b42('0x66')][_0x2b42('0x3a')]);_0x4def59[_0x2b42('0x3d')]=_['keys'](_0x253079[_0x2b42('0x3d')]);_0x4def59[_0x2b42('0x3e')]=_['intersection'](_0x4def59[_0x2b42('0x3b')],_0x4def59[_0x2b42('0x3d')]);_0x6d8f45['attributes']=_[_0x2b42('0x3f')](_0x4def59[_0x2b42('0x3b')],qs[_0x2b42('0x40')](_0x253079['query'][_0x2b42('0x40')]));_0x6d8f45[_0x2b42('0x41')]=_0x6d8f45['attributes'][_0x2b42('0x54')]?_0x6d8f45['attributes']:_0x4def59[_0x2b42('0x3b')];if(!_0x253079[_0x2b42('0x3d')][_0x2b42('0x68')](_0x2b42('0x42'))){_0x6d8f45[_0x2b42('0x43')]=qs[_0x2b42('0x43')](_0x253079[_0x2b42('0x3d')]['limit']);_0x6d8f45[_0x2b42('0x2a')]=qs[_0x2b42('0x2a')](_0x253079[_0x2b42('0x3d')][_0x2b42('0x2a')]);}_0x6d8f45[_0x2b42('0x44')]=qs[_0x2b42('0x45')](_0x253079[_0x2b42('0x3d')]['sort']);_0x6d8f45['where']=qs[_0x2b42('0x3e')](_[_0x2b42('0x46')](_0x253079[_0x2b42('0x3d')],_0x4def59['filters']));_0x6d8f45[_0x2b42('0x48')][_0x2b42('0x60')]=_0x404850['id'];if(_0x253079[_0x2b42('0x3d')]['filter']){_0x6d8f45['where']=_[_0x2b42('0x49')](_0x6d8f45['where'],{'$or':_['map'](_0x6d8f45[_0x2b42('0x41')],function(_0x5c1099){var _0x588e9f={};_0x588e9f[_0x5c1099]={'$like':'%'+_0x253079['query'][_0x2b42('0x47')]+'%'};return _0x588e9f;})});}_0x6d8f45=_[_0x2b42('0x49')]({},_0x6d8f45,_0x253079[_0x2b42('0x4e')]);return db[_0x2b42('0x66')][_0x2b42('0x29')]({'where':_0x6d8f45['where']})[_0x2b42('0x19')](function(_0x2838c9){_0x274f03[_0x2b42('0x29')]=_0x2838c9;if(_0x253079[_0x2b42('0x3d')][_0x2b42('0x4f')]){_0x6d8f45[_0x2b42('0x55')]=[{'all':!![]}];}return db['CannedAnswer'][_0x2b42('0x50')](_0x6d8f45);})[_0x2b42('0x19')](function(_0x29eb4c){_0x274f03[_0x2b42('0x51')]=_0x29eb4c;return _0x274f03;});}})['then'](respondWithFilteredResult(_0x1e365f,_0x6d8f45))[_0x2b42('0x24')](handleError(_0x1e365f,null));};exports[_0x2b42('0x69')]=function(_0x551b02,_0x555fa0,_0x56def2){var _0xd27cbf;return db[_0x2b42('0x39')][_0x2b42('0x56')]({'where':{'id':_0x551b02[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x555fa0,null))[_0x2b42('0x19')](function(_0x26de9d){if(_0x26de9d){return _0x26de9d[_0x2b42('0x69')](_0x551b02[_0x2b42('0x3d')][_0x2b42('0x65')]);}})[_0x2b42('0x19')](respondWithStatusCode(_0x555fa0,null))['catch'](handleError(_0x555fa0,null));};exports['addInteraction']=function(_0x281a90,_0x45348f,_0x48dab2){return db[_0x2b42('0x6a')][_0x2b42('0x56')]({'where':{'id':_0x281a90[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x45348f,null))[_0x2b42('0x19')](function(_0x18ea08){if(_0x18ea08){return _0x18ea08[_0x2b42('0x6b')](_0x281a90[_0x2b42('0x58')]['ids'],_[_0x2b42('0x6c')](_0x281a90['body'],['ids','id'])||{});}})[_0x2b42('0x19')](respondWithResult(_0x45348f,null))[_0x2b42('0x24')](handleError(_0x45348f,null));};exports[_0x2b42('0x6d')]=function(_0x498bfd,_0x15fc73,_0x58dee4){var _0x58c97d={'raw':![],'where':{}};var _0x703dc6={};var _0x4a90cb={'count':0x0,'rows':[]};return db['FaxAccount'][_0x2b42('0x63')]({'where':{'id':_0x498bfd[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x15fc73,null))[_0x2b42('0x19')](function(_0x166690){if(_0x166690){_0x703dc6[_0x2b42('0x3b')]=_['keys'](db[_0x2b42('0x6a')][_0x2b42('0x3a')]);_0x703dc6[_0x2b42('0x3d')]=_[_0x2b42('0x3c')](_0x498bfd[_0x2b42('0x3d')]);_0x703dc6['filters']=_[_0x2b42('0x3f')](_0x703dc6['model'],_0x703dc6[_0x2b42('0x3d')]);_0x58c97d['attributes']=_[_0x2b42('0x3f')](_0x703dc6[_0x2b42('0x3b')],qs[_0x2b42('0x40')](_0x498bfd[_0x2b42('0x3d')][_0x2b42('0x40')]));_0x58c97d['attributes']=_0x58c97d[_0x2b42('0x41')][_0x2b42('0x54')]?_0x58c97d[_0x2b42('0x41')]:_0x703dc6[_0x2b42('0x3b')];if(!_0x498bfd['query']['hasOwnProperty']('nolimit')){_0x58c97d['limit']=qs['limit'](_0x498bfd[_0x2b42('0x3d')][_0x2b42('0x43')]);_0x58c97d['offset']=qs[_0x2b42('0x2a')](_0x498bfd[_0x2b42('0x3d')]['offset']);}_0x58c97d[_0x2b42('0x44')]=qs['sort'](_0x498bfd['query']['sort']);_0x58c97d[_0x2b42('0x48')]=qs[_0x2b42('0x3e')](_[_0x2b42('0x46')](_0x498bfd[_0x2b42('0x3d')],_0x703dc6[_0x2b42('0x3e')]));_0x58c97d[_0x2b42('0x48')]['FaxAccountId']=_0x166690['id'];if(_0x498bfd[_0x2b42('0x3d')][_0x2b42('0x47')]){_0x58c97d['where']=_['merge'](_0x58c97d[_0x2b42('0x48')],{'$or':_['map'](_0x58c97d[_0x2b42('0x41')],function(_0x49b6ba){var _0x57b29c={};_0x57b29c[_0x49b6ba]={'$like':'%'+_0x498bfd['query'][_0x2b42('0x47')]+'%'};return _0x57b29c;})});}_0x58c97d=_[_0x2b42('0x49')]({},_0x58c97d,_0x498bfd[_0x2b42('0x4e')]);return db[_0x2b42('0x6a')][_0x2b42('0x29')]({'where':_0x58c97d[_0x2b42('0x48')]})[_0x2b42('0x19')](function(_0x1399df){_0x4a90cb[_0x2b42('0x29')]=_0x1399df;if(_0x498bfd[_0x2b42('0x3d')][_0x2b42('0x4f')]){_0x58c97d['include']=[{'model':db[_0x2b42('0x6e')],'as':_0x2b42('0x6f'),'required':![]},{'model':db['User'],'as':_0x2b42('0x70'),'attributes':[_0x2b42('0x34'),_0x2b42('0x71'),_0x2b42('0x72')],'required':![]},{'model':db['Tag'],'as':_0x2b42('0x73'),'attributes':['id',_0x2b42('0x34'),_0x2b42('0x74')],'where':_0x498bfd[_0x2b42('0x3d')][_0x2b42('0x75')]?{'id':_0x498bfd[_0x2b42('0x3d')][_0x2b42('0x75')]}:undefined,'required':_0x498bfd['query'][_0x2b42('0x75')]?!![]:![]}];}return db[_0x2b42('0x6a')]['findAll'](_0x58c97d);})[_0x2b42('0x19')](function(_0x5c17fa){_0x4a90cb[_0x2b42('0x51')]=_0x5c17fa;return _0x4a90cb;});}})[_0x2b42('0x19')](respondWithFilteredResult(_0x15fc73,_0x58c97d))[_0x2b42('0x24')](handleError(_0x15fc73,null));};exports[_0x2b42('0x76')]=function(_0x536230,_0xac5b5c,_0x20baa5){return db[_0x2b42('0x39')][_0x2b42('0x63')]({'where':{'id':_0x536230[_0x2b42('0x53')]['id']}})['then'](handleEntityNotFound(_0xac5b5c,null))[_0x2b42('0x19')](function(_0x454cc7){if(_0x454cc7){return db[_0x2b42('0x77')][_0x2b42('0x78')](function(_0x23c41d){return db[_0x2b42('0x79')][_0x2b42('0x30')]({'where':{'FaxAccountId':_0x536230['params']['id']},'transaction':_0x23c41d})[_0x2b42('0x19')](function(_0x5d3e2c){var _0x2ee282=_[_0x2b42('0x4a')](_0x536230[_0x2b42('0x58')],function(_0x5342d0){_0x5342d0[_0x2b42('0x60')]=_0x536230['params']['id'];return _0x5342d0;});return db[_0x2b42('0x79')][_0x2b42('0x7a')](_0x2ee282,{'transaction':_0x23c41d});});})[_0x2b42('0x19')](function(){return db['FaxApplication'][_0x2b42('0x7b')]({'where':{'FaxAccountId':_0x536230[_0x2b42('0x53')]['id']},'order':_0x2b42('0x7c')});});}})[_0x2b42('0x19')](respondWithResult(_0xac5b5c,null))['catch'](handleError(_0xac5b5c,null));};exports[_0x2b42('0x7d')]=function(_0x45be6b,_0x3b2b2a,_0x495fb6){var _0x3e0cc4={};var _0x12e39a={};var _0x27a7e9;var _0x1ad728;return db[_0x2b42('0x39')]['findOne']({'where':{'id':_0x45be6b[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x3b2b2a,null))[_0x2b42('0x19')](function(_0x5eb7a5){if(_0x5eb7a5){_0x27a7e9=_0x5eb7a5;_0x12e39a['model']=_[_0x2b42('0x3c')](db['FaxApplication']['rawAttributes']);_0x12e39a['query']=_[_0x2b42('0x3c')](_0x45be6b[_0x2b42('0x3d')]);_0x12e39a[_0x2b42('0x3e')]=_[_0x2b42('0x3f')](_0x12e39a[_0x2b42('0x3b')],_0x12e39a['query']);_0x3e0cc4[_0x2b42('0x41')]=_[_0x2b42('0x3f')](_0x12e39a[_0x2b42('0x3b')],qs['fields'](_0x45be6b[_0x2b42('0x3d')][_0x2b42('0x40')]));_0x3e0cc4[_0x2b42('0x41')]=_0x3e0cc4[_0x2b42('0x41')][_0x2b42('0x54')]?_0x3e0cc4['attributes']:_0x12e39a[_0x2b42('0x3b')];_0x3e0cc4['order']=qs[_0x2b42('0x45')](_0x45be6b['query'][_0x2b42('0x45')]);_0x3e0cc4[_0x2b42('0x48')]=qs[_0x2b42('0x3e')](_[_0x2b42('0x46')](_0x45be6b[_0x2b42('0x3d')],_0x12e39a[_0x2b42('0x3e')]));if(_0x45be6b[_0x2b42('0x3d')]['filter']){_0x3e0cc4[_0x2b42('0x48')]=_['merge'](_0x3e0cc4[_0x2b42('0x48')],{'$or':_[_0x2b42('0x4a')](_0x3e0cc4['attributes'],function(_0x1b1019){var _0x11ac74={};_0x11ac74[_0x1b1019]={'$like':'%'+_0x45be6b[_0x2b42('0x3d')][_0x2b42('0x47')]+'%'};return _0x11ac74;})});}_0x3e0cc4=_['merge']({},_0x3e0cc4,_0x45be6b['options']);return _0x27a7e9[_0x2b42('0x7d')](_0x3e0cc4);}})[_0x2b42('0x19')](function(_0x58a510){if(_0x58a510){_0x1ad728=_0x58a510['length'];if(!_0x45be6b['query'][_0x2b42('0x68')](_0x2b42('0x42'))){_0x3e0cc4[_0x2b42('0x43')]=qs['limit'](_0x45be6b[_0x2b42('0x3d')][_0x2b42('0x43')]);_0x3e0cc4['offset']=qs[_0x2b42('0x2a')](_0x45be6b[_0x2b42('0x3d')][_0x2b42('0x2a')]);}return _0x27a7e9['getApplications'](_0x3e0cc4);}})[_0x2b42('0x19')](function(_0x4fb923){if(_0x4fb923){return _0x4fb923?{'count':_0x1ad728,'rows':_0x4fb923}:null;}})['then'](respondWithResult(_0x3b2b2a,null))[_0x2b42('0x24')](handleError(_0x3b2b2a,null));};function Extension(_0x387c11,_0x5ef09f,_0x4594b4,_0x5cf219){this[_0x2b42('0x7e')]=_0x2b42('0x7f');this[_0x2b42('0x80')]=_0x387c11[_0x2b42('0x81')];this[_0x2b42('0x82')]=_0x5cf219;this[_0x2b42('0x4b')]=_0x2b42('0x83');this[_0x2b42('0x84')]='Fax\x20Extension';this[_0x2b42('0x60')]=_0x387c11['id'];this['priority']=_0x5ef09f;this['appdata']=_0x4594b4;}function createExtensionsReciveFax(_0x3e7038){var _0x50479d=0x1;var _0x7fe01e=[];_0x7fe01e['push'](new Extension(_0x3e7038,_0x50479d,'',_0x2b42('0x85')));_0x50479d+=0x1;_0x7fe01e['push'](new Extension(_0x3e7038,_0x50479d,_0x2b42('0x86'),_0x2b42('0x87')));_0x50479d+=0x1;for(var _0x29358b in _0x3e7038){if(_0x3e7038[_0x2b42('0x68')](_0x29358b)&&(_0x29358b===_0x2b42('0x88')||_0x29358b==='localstationid'||_0x29358b==='gateway'||_0x29358b===_0x2b42('0x89')||_0x29358b==='headerinfo'||_0x29358b===_0x2b42('0x8a')||_0x29358b===_0x2b42('0x8b')||_0x29358b===_0x2b42('0x8c')||_0x29358b===_0x2b42('0x8d'))){_0x7fe01e[_0x2b42('0x8e')](new Extension(_0x3e7038,_0x50479d,_0x2b42('0x8f')+_0x29358b+')='+_0x3e7038[_0x29358b],_0x2b42('0x87')));_0x50479d+=0x1;}}_0x7fe01e[_0x2b42('0x8e')](new Extension(_0x3e7038,_0x50479d,'6','Wait'));_0x50479d+=0x1;_0x7fe01e[_0x2b42('0x8e')](new Extension(_0x3e7038,_0x50479d,_0x2b42('0x90'),_0x2b42('0x91')));_0x50479d=0x0;return _0x7fe01e;}exports[_0x2b42('0x92')]=function(_0x5c190b,_0x3b76b3,_0x5de695){var _0x42823c;return db[_0x2b42('0x77')]['transaction'](function(_0xed201d){return db['FaxAccount'][_0x2b42('0x57')](_0x5c190b[_0x2b42('0x58')],{'transaction':_0xed201d})[_0x2b42('0x19')](function(_0x575a42){_0x42823c=_0x575a42[_0x2b42('0x31')]({'plain':!![]});return db['VoiceExtension'][_0x2b42('0x7a')](createExtensionsReciveFax(_0x42823c),{'transaction':_0xed201d});});})[_0x2b42('0x19')](function(){return _0x42823c;})[_0x2b42('0x19')](respondWithResult(_0x3b76b3,null))['catch'](handleError(_0x3b76b3,null));};exports[_0x2b42('0x93')]=function(_0x3a79f9,_0x1cd9a3,_0x23ac82){var _0x351593;return db[_0x2b42('0x77')][_0x2b42('0x78')](function(_0x1d12dc){return db[_0x2b42('0x39')][_0x2b42('0x2f')](_0x3a79f9[_0x2b42('0x58')],{'where':{'id':_0x3a79f9[_0x2b42('0x58')]['id']},'transaction':_0x1d12dc})['then'](function(_0xa9ac27){return db[_0x2b42('0x94')][_0x2b42('0x30')]({'where':{'FaxAccountId':_0x3a79f9['body']['id']},'transaction':_0x1d12dc})[_0x2b42('0x19')](function(_0x2320b2){return db[_0x2b42('0x94')][_0x2b42('0x7a')](createExtensionsReciveFax(_[_0x2b42('0x6c')](_0x3a79f9['body'],[_0x2b42('0x95'),_0x2b42('0x4c'),_0x2b42('0x96'),_0x2b42('0x97'),_0x2b42('0x98'),_0x2b42('0x99')])),{'transaction':_0x1d12dc});});});})[_0x2b42('0x19')](function(){return db['FaxAccount'][_0x2b42('0x9a')](_0x3a79f9[_0x2b42('0x58')]['id']);})['then'](respondWithResult(_0x1cd9a3,null))[_0x2b42('0x24')](handleError(_0x1cd9a3,null));};exports[_0x2b42('0x9b')]=function(_0x2b08ad,_0x4eaaa4,_0xa23e96){var _0x11db40={'raw':!![],'where':{}};var _0x26abc4={};var _0x5543f4={'count':0x0,'rows':[]};return db['FaxAccount'][_0x2b42('0x63')]({'where':{'id':_0x2b08ad[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x4eaaa4,null))[_0x2b42('0x19')](function(_0x40ebc4){if(_0x40ebc4){_0x26abc4[_0x2b42('0x3b')]=_[_0x2b42('0x3c')](db['FaxMessage'][_0x2b42('0x3a')]);_0x26abc4['query']=_[_0x2b42('0x3c')](_0x2b08ad[_0x2b42('0x3d')]);_0x26abc4[_0x2b42('0x3e')]=_[_0x2b42('0x3f')](_0x26abc4[_0x2b42('0x3b')],_0x26abc4['query']);_0x11db40[_0x2b42('0x41')]=_[_0x2b42('0x3f')](_0x26abc4[_0x2b42('0x3b')],qs[_0x2b42('0x40')](_0x2b08ad[_0x2b42('0x3d')]['fields']));_0x11db40[_0x2b42('0x41')]=_0x11db40[_0x2b42('0x41')][_0x2b42('0x54')]?_0x11db40[_0x2b42('0x41')]:_0x26abc4[_0x2b42('0x3b')];if(!_0x2b08ad['query']['hasOwnProperty'](_0x2b42('0x42'))){_0x11db40[_0x2b42('0x43')]=qs[_0x2b42('0x43')](_0x2b08ad[_0x2b42('0x3d')][_0x2b42('0x43')]);_0x11db40['offset']=qs[_0x2b42('0x2a')](_0x2b08ad[_0x2b42('0x3d')][_0x2b42('0x2a')]);}_0x11db40[_0x2b42('0x44')]=qs['sort'](_0x2b08ad[_0x2b42('0x3d')][_0x2b42('0x45')]);_0x11db40['where']=qs[_0x2b42('0x3e')](_[_0x2b42('0x46')](_0x2b08ad[_0x2b42('0x3d')],_0x26abc4['filters']));_0x11db40[_0x2b42('0x48')][_0x2b42('0x60')]=_0x40ebc4['id'];if(_0x2b08ad[_0x2b42('0x3d')][_0x2b42('0x47')]){_0x11db40['where']=_['merge'](_0x11db40['where'],{'$or':_[_0x2b42('0x4a')](_0x11db40[_0x2b42('0x41')],function(_0x427695){var _0x31122c={};_0x31122c[_0x427695]={'$like':'%'+_0x2b08ad[_0x2b42('0x3d')][_0x2b42('0x47')]+'%'};return _0x31122c;})});}if(_0x2b08ad[_0x2b42('0x3d')][_0x2b42('0x9c')]){var _0x82bc82=_0x2b08ad['query']['$gte'][_0x2b42('0x9d')](',');var _0x213180={};_0x213180[_0x82bc82[0x0]]={'$gte':moment(_0x82bc82[0x1])[_0x2b42('0x9e')]('YYYY-MM-DD\x20HH:mm:ss')};_0x11db40['where']=_[_0x2b42('0x49')](_0x11db40[_0x2b42('0x48')],_0x213180);}_0x11db40=_[_0x2b42('0x49')]({},_0x11db40,_0x2b08ad[_0x2b42('0x4e')]);return db[_0x2b42('0x9f')][_0x2b42('0x29')]({'where':_0x11db40[_0x2b42('0x48')]})[_0x2b42('0x19')](function(_0xe7b82c){_0x5543f4[_0x2b42('0x29')]=_0xe7b82c;if(_0x2b08ad[_0x2b42('0x3d')][_0x2b42('0x4f')]){_0x11db40[_0x2b42('0x55')]=[{'all':!![]}];}return db[_0x2b42('0x9f')][_0x2b42('0x50')](_0x11db40);})[_0x2b42('0x19')](function(_0x276b38){_0x5543f4[_0x2b42('0x51')]=_0x276b38;return _0x5543f4;});}})[_0x2b42('0x19')](respondWithFilteredResult(_0x4eaaa4,_0x11db40))['catch'](handleError(_0x4eaaa4,null));};exports['send']=function(_0x1bac14,_0x329ae7,_0x5b52f4){var _0x354de0,_0x372111={},_0x1e5419;if(_0x1bac14[_0x2b42('0x58')]['to']){_0x1e5419=_0x1bac14[_0x2b42('0x58')]['to'][0x0];}return db[_0x2b42('0x39')][_0x2b42('0x56')]({'where':{'id':_0x1bac14['params']['id']},'include':[{'model':db['CmList'],'as':_0x2b42('0xa0'),'include':[{'model':db[_0x2b42('0x6e')],'as':'Contacts','where':{'fax':_0x1e5419},'limit':0x1,'order':[[_0x2b42('0x97'),_0x2b42('0xa1')]]}]}]})[_0x2b42('0x19')](handleEntityNotFound(_0x329ae7,null))[_0x2b42('0x19')](function(_0x10195f){_0x354de0=_0x10195f;if(_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa2')]&&_0x1bac14[_0x2b42('0x58')]['attachments'][_0x2b42('0x54')]){for(var _0x5e1397=0x0;_0x5e1397<_0x1bac14['body']['attachments'][_0x2b42('0x54')];_0x5e1397+=0x1){_0x1bac14['body']['attachments'][_0x5e1397]={'filename':_0x1bac14['body'][_0x2b42('0xa2')][_0x5e1397][_0x2b42('0x34')],'id':_0x1bac14['body'][_0x2b42('0xa2')][_0x5e1397]['id'],'path':path[_0x2b42('0xa3')](config[_0x2b42('0xa4')],_0x2b42('0xa5'),_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa2')][_0x5e1397]['basename'])};}}return respondWithRpcPromise(_0x2b42('0xa6'),_0x2b42('0xa6'),{'FaxAccountId':_['isNil'](_0x1bac14['params']['id'])?undefined:_0x1bac14[_0x2b42('0x53')]['id'],'path':_[_0x2b42('0xa7')](_0x1bac14['body'][_0x2b42('0xa2')][0x0][_0x2b42('0x3')])?undefined:_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa2')][0x0][_0x2b42('0x3')],'fax':_['isNil'](_0x1bac14[_0x2b42('0x58')]['to'][0x0])?undefined:_0x1bac14[_0x2b42('0x58')]['to'][0x0]},client9002);})[_0x2b42('0x19')](function(){if(_0x354de0){if(_[_0x2b42('0xa7')](_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa8')])){_0x1bac14[_0x2b42('0x58')]['from']=util[_0x2b42('0x9e')](_0x2b42('0xa9'),_0x354de0[_0x2b42('0x34')],_0x354de0[_0x2b42('0xaa')]);}if(_0x354de0['List']){if(_0x354de0[_0x2b42('0xa0')][_0x2b42('0xab')][_0x2b42('0x54')]){return _0x354de0[_0x2b42('0xa0')]['Contacts'][0x0];}else{return db[_0x2b42('0x6e')][_0x2b42('0x57')](_[_0x2b42('0x12')](_0x1bac14[_0x2b42('0x58')],{'firstName':_0x1bac14[_0x2b42('0x58')]['to'][0x0],'phone':_0x1bac14[_0x2b42('0x58')]['to'][0x0],'fax':_0x1bac14[_0x2b42('0x58')]['to'][0x0],'ListId':_0x354de0['ListId']}));}}else{throw new Error('List\x20not\x20found');}}else{throw new Error(_0x2b42('0xac'));}})[_0x2b42('0x19')](function(_0x6d979c){if(_0x6d979c){return db['FaxInteraction'][_0x2b42('0x56')]({'where':{'ContactId':_0x6d979c['id'],'closed':![],'FaxAccountId':_0x354de0['id']}})['then'](function(_0xc1f8ec){if(_0xc1f8ec){return[_0xc1f8ec,![]];}return db[_0x2b42('0x6a')][_0x2b42('0x57')]({'UserId':_0x1bac14[_0x2b42('0x59')]['id'],'ContactId':_0x6d979c['id'],'FaxAccountId':_0x354de0['id'],'fax':_0x1bac14[_0x2b42('0x58')]['to'][0x0],'firstMsgDirection':_0x2b42('0xad'),'Messages':[_['merge'](_0x1bac14[_0x2b42('0x58')],{'read':![],'body':_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa2')][0x0][_0x2b42('0xae')],'FaxAccountId':_0x354de0['id'],'UserId':_0x1bac14[_0x2b42('0x59')]['id'],'ContactId':_0x6d979c['id'],'AttachmentId':_0x1bac14['body']['attachments'][0x0]['id']})]},{'include':[{'model':db[_0x2b42('0x9f')],'as':_0x2b42('0xaf')}]})[_0x2b42('0x19')](function(_0x38f8d9){return[_0x38f8d9,!![]];});});}else{throw new Error(_0x2b42('0xb0'));}})[_0x2b42('0xb1')](function(_0x2c9d52,_0x1983ea){if(_0x1983ea){return _0x2c9d52;}return db['FaxMessage'][_0x2b42('0x57')]({'direction':'out','read':![],'body':_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa2')][0x0][_0x2b42('0xae')],'FaxAccountId':_0x354de0['id'],'FaxInteractionId':_0x2c9d52['id'],'UserId':_0x1bac14[_0x2b42('0x59')]['id'],'ContactId':_0x2c9d52[_0x2b42('0xb2')],'AttachmentId':_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa2')][0x0]['id']})['then'](function(_0x2092f3){_0x2c9d52[_0x2b42('0xb3')]['Messages']=[];_0x2c9d52[_0x2b42('0xb3')][_0x2b42('0xaf')]['push'](_0x2092f3['dataValues']);return _0x2c9d52;});})[_0x2b42('0x19')](function(_0x3401cd){respondWithRpcPromise(_0x2b42('0xb4'),_0x2b42('0xb4'),{'FaxAccountId':_[_0x2b42('0xa7')](_0x1bac14['params']['id'])?undefined:_0x1bac14[_0x2b42('0x53')]['id'],'path':_[_0x2b42('0xa7')](_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa2')][0x0][_0x2b42('0x3')])?undefined:_0x1bac14[_0x2b42('0x58')][_0x2b42('0xa2')][0x0][_0x2b42('0x3')],'fax':_[_0x2b42('0xa7')](_0x1bac14[_0x2b42('0x58')]['to'][0x0])?undefined:_0x1bac14[_0x2b42('0x58')]['to'][0x0],'AttachmentId':_0x1bac14[_0x2b42('0x58')]['attachments'][0x0]['id']},client9002)[_0x2b42('0x19')](function(_0x4b88b6){logger[_0x2b42('0x1a')]('SendFaxRpc,\x20%s',_0x4b88b6);})['catch'](function(_0x24cb77){logger['info']('SendFaxRpc,\x20%s',_0x24cb77);});return _0x3401cd;})['then'](respondWithResult(_0x329ae7,null))['catch'](handleError(_0x329ae7,null));};exports[_0x2b42('0xb5')]=function(_0x15f57b,_0x361abe,_0x5184d2){return db[_0x2b42('0x39')][_0x2b42('0x56')]({'where':{'id':_0x15f57b['params']['id']}})['then'](handleEntityNotFound(_0x361abe,null))[_0x2b42('0x19')](function(_0x4d8f5e){if(_0x4d8f5e){return _0x4d8f5e[_0x2b42('0xb5')](_0x15f57b[_0x2b42('0x58')][_0x2b42('0x65')],_[_0x2b42('0x6c')](_0x15f57b[_0x2b42('0x58')],[_0x2b42('0x65'),'id'])||{})[_0x2b42('0xb1')](function(_0x2bbe8c){for(var _0x3e966a=0x0;_0x3e966a<_0x15f57b[_0x2b42('0x58')][_0x2b42('0x65')][_0x2b42('0x54')];_0x3e966a+=0x1){socket[_0x2b42('0xb6')](_0x2b42('0xb7'),{'UserId':_0x15f57b[_0x2b42('0x58')][_0x2b42('0x65')][_0x3e966a],'FaxAccountId':_0x15f57b[_0x2b42('0x53')]['id']});}return _0x2bbe8c;});}})[_0x2b42('0x19')](respondWithResult(_0x361abe,null))[_0x2b42('0x24')](handleError(_0x361abe,null));};exports['removeAgents']=function(_0x371a0c,_0x5e4f11,_0x5bc227){var _0x10e5fa;return db[_0x2b42('0x39')][_0x2b42('0x56')]({'where':{'id':_0x371a0c[_0x2b42('0x53')]['id']}})[_0x2b42('0x19')](handleEntityNotFound(_0x5e4f11,null))[_0x2b42('0x19')](function(_0x23b45b){if(_0x23b45b){return _0x23b45b[_0x2b42('0xb8')](_0x371a0c[_0x2b42('0x3d')][_0x2b42('0x65')])[_0x2b42('0x19')](function(_0x167dd0){if(_[_0x2b42('0xb9')](_0x371a0c[_0x2b42('0x3d')]['ids'])){for(var _0x4c43c3=0x0;_0x4c43c3<_0x371a0c['query'][_0x2b42('0x65')][_0x2b42('0x54')];_0x4c43c3+=0x1){socket['emit'](_0x2b42('0xba'),{'UserId':_0x371a0c['query'][_0x2b42('0x65')][_0x4c43c3],'FaxAccountId':_0x371a0c['params']['id']});}}else{socket[_0x2b42('0xb6')]('userFaxAccount:remove',{'UserId':_0x371a0c[_0x2b42('0x3d')]['ids'],'FaxAccountId':_0x371a0c[_0x2b42('0x53')]['id']});}});}})['then'](respondWithStatusCode(_0x5e4f11,null))[_0x2b42('0x24')](handleError(_0x5e4f11,null));};exports[_0x2b42('0xbb')]=function(_0x430a71,_0x3c78ff,_0x5806e6){var _0x14dbe2={};var _0x54c379={};var _0x372673;var _0x143ed6;return db['FaxAccount'][_0x2b42('0x63')]({'where':{'id':_0x430a71[_0x2b42('0x53')]['id']}})['then'](handleEntityNotFound(_0x3c78ff,null))[_0x2b42('0x19')](function(_0xf435a5){if(_0xf435a5){_0x372673=_0xf435a5;_0x54c379[_0x2b42('0x3b')]=_[_0x2b42('0x3c')](db[_0x2b42('0xbc')][_0x2b42('0x3a')]);_0x54c379[_0x2b42('0x3d')]=_[_0x2b42('0x3c')](_0x430a71['query']);_0x54c379[_0x2b42('0x3e')]=_[_0x2b42('0x3f')](_0x54c379[_0x2b42('0x3b')],_0x54c379[_0x2b42('0x3d')]);_0x14dbe2[_0x2b42('0x41')]=_[_0x2b42('0x3f')](_0x54c379[_0x2b42('0x3b')],qs['fields'](_0x430a71[_0x2b42('0x3d')][_0x2b42('0x40')]));_0x14dbe2[_0x2b42('0x41')]=_0x14dbe2[_0x2b42('0x41')][_0x2b42('0x54')]?_0x14dbe2['attributes']:_0x54c379[_0x2b42('0x3b')];_0x14dbe2[_0x2b42('0x44')]=qs[_0x2b42('0x45')](_0x430a71[_0x2b42('0x3d')]['sort']);_0x14dbe2[_0x2b42('0x48')]=qs['filters'](_[_0x2b42('0x46')](_0x430a71[_0x2b42('0x3d')],_0x54c379['filters']));if(_0x430a71[_0x2b42('0x3d')]['filter']){_0x14dbe2['where']=_[_0x2b42('0x49')](_0x14dbe2[_0x2b42('0x48')],{'$or':_[_0x2b42('0x4a')](_0x14dbe2[_0x2b42('0x41')],function(_0xb6ea09){var _0x318509={};_0x318509[_0xb6ea09]={'$like':'%'+_0x430a71[_0x2b42('0x3d')][_0x2b42('0x47')]+'%'};return _0x318509;})});}_0x14dbe2=_['merge']({},_0x14dbe2,_0x430a71['options']);return _0x372673[_0x2b42('0xbb')](_0x14dbe2);}})['then'](function(_0x555e3d){if(_0x555e3d){_0x143ed6=_0x555e3d['length'];if(!_0x430a71[_0x2b42('0x3d')][_0x2b42('0x68')]('nolimit')){_0x14dbe2['limit']=qs[_0x2b42('0x43')](_0x430a71[_0x2b42('0x3d')]['limit']);_0x14dbe2[_0x2b42('0x2a')]=qs[_0x2b42('0x2a')](_0x430a71[_0x2b42('0x3d')]['offset']);}return _0x372673[_0x2b42('0xbb')](_0x14dbe2);}})[_0x2b42('0x19')](function(_0x3c61a0){if(_0x3c61a0){return _0x3c61a0?{'count':_0x143ed6,'rows':_0x3c61a0}:null;}})[_0x2b42('0x19')](respondWithResult(_0x3c78ff,null))['catch'](handleError(_0x3c78ff,null));};
\ No newline at end of file
index cf18896..fc910ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfc93=['exports','events','../../mysqldb','FaxAccount','setMaxListeners','update','remove','emit','hasOwnProperty','hook'];(function(_0x565c49,_0x54acd0){var _0x20ca34=function(_0x42f7e1){while(--_0x42f7e1){_0x565c49['push'](_0x565c49['shift']());}};_0x20ca34(++_0x54acd0);}(_0xfc93,0xfb));var _0x3fc9=function(_0x158dea,_0x38bd5d){_0x158dea=_0x158dea-0x0;var _0x49cc82=_0xfc93[_0x158dea];return _0x49cc82;};'use strict';var EventEmitter=require(_0x3fc9('0x0'));var FaxAccount=require(_0x3fc9('0x1'))['db'][_0x3fc9('0x2')];var FaxAccountEvents=new EventEmitter();FaxAccountEvents[_0x3fc9('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x3fc9('0x4'),'afterDestroy':_0x3fc9('0x5')};function emitEvent(_0x4217ae){return function(_0x2b79b6,_0x5638f6,_0x99843d){FaxAccountEvents[_0x3fc9('0x6')](_0x4217ae+':'+_0x2b79b6['id'],_0x2b79b6);FaxAccountEvents[_0x3fc9('0x6')](_0x4217ae,_0x2b79b6);_0x99843d(null);};}for(var e in events){if(events[_0x3fc9('0x7')](e)){var event=events[e];FaxAccount[_0x3fc9('0x8')](e,emitEvent(event));}}module[_0x3fc9('0x9')]=FaxAccountEvents;
\ No newline at end of file
+var _0x3531=['FaxAccount','setMaxListeners','update','remove','emit','hook','events','../../mysqldb'];(function(_0x46698a,_0x8de1e4){var _0x356db0=function(_0x19e83c){while(--_0x19e83c){_0x46698a['push'](_0x46698a['shift']());}};_0x356db0(++_0x8de1e4);}(_0x3531,0xa6));var _0x1353=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x3531[_0x397e5f];return _0x5302b8;};'use strict';var EventEmitter=require(_0x1353('0x0'));var FaxAccount=require(_0x1353('0x1'))['db'][_0x1353('0x2')];var FaxAccountEvents=new EventEmitter();FaxAccountEvents[_0x1353('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x1353('0x4'),'afterDestroy':_0x1353('0x5')};function emitEvent(_0xcd1739){return function(_0x55569d,_0x4302bf,_0x367563){FaxAccountEvents[_0x1353('0x6')](_0xcd1739+':'+_0x55569d['id'],_0x55569d);FaxAccountEvents['emit'](_0xcd1739,_0x55569d);_0x367563(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxAccount[_0x1353('0x7')](e,emitEvent(event));}}module['exports']=FaxAccountEvents;
\ No newline at end of file
index 044c0c7..8b7c95a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8404=['fax_accounts','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./faxAccount.attributes','exports','define','FaxAccount'];(function(_0x170d0b,_0x569bc2){var _0x2309fb=function(_0x14268d){while(--_0x14268d){_0x170d0b['push'](_0x170d0b['shift']());}};_0x2309fb(++_0x569bc2);}(_0x8404,0x15d));var _0x4840=function(_0x338ced,_0x338eb5){_0x338ced=_0x338ced-0x0;var _0x34ca25=_0x8404[_0x338ced];return _0x34ca25;};'use strict';var _=require(_0x4840('0x0'));var util=require(_0x4840('0x1'));var logger=require(_0x4840('0x2'))(_0x4840('0x3'));var moment=require(_0x4840('0x4'));var BPromise=require(_0x4840('0x5'));var rp=require(_0x4840('0x6'));var attributes=require(_0x4840('0x7'));module[_0x4840('0x8')]=function(_0x55a218,_0x3eb29c){return _0x55a218[_0x4840('0x9')](_0x4840('0xa'),attributes,{'tableName':_0x4840('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0f9f=['bluebird','request-promise','exports','define','../../config/logger','api','moment'];(function(_0x39f42f,_0x1866e4){var _0x36df42=function(_0x3eb837){while(--_0x3eb837){_0x39f42f['push'](_0x39f42f['shift']());}};_0x36df42(++_0x1866e4);}(_0x0f9f,0x1af));var _0xf0f9=function(_0x4e84d3,_0x1add05){_0x4e84d3=_0x4e84d3-0x0;var _0x1a0df6=_0x0f9f[_0x4e84d3];return _0x1a0df6;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xf0f9('0x0'))(_0xf0f9('0x1'));var moment=require(_0xf0f9('0x2'));var BPromise=require(_0xf0f9('0x3'));var rp=require(_0xf0f9('0x4'));var attributes=require('./faxAccount.attributes');module[_0xf0f9('0x5')]=function(_0x1ff279,_0x38fde2){return _0x1ff279[_0xf0f9('0x6')]('FaxAccount',attributes,{'tableName':'fax_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index aad5733..8bb9d7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xff8d=['then','FaxAccount,\x20%s,\x20%s','request\x20sent','debug','FaxAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','GetFaxAccount','FaxAccount','findAll','options','raw','where','attributes','limit','include','map','model','NotifyFaxAccount','body','fax','Sequelize','no\x20available\x20attributes','difference','keys','createdAt','updatedAt','CompanyId','isNil','from','ValidationError','from\x20is\x20mandatory','mapKey','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','find','account','CmList','List','CmContact','Contacts','DESC','FaxApplication','get','applications','Applications','list','priority','asc','length','create','contact','FaxInteraction','Contact\x20not\x20found','autoclose','push','close','unmanaged','*,*,*,*','created','interaction','ContactId','AttachmentId','UserId','name','unshift','agent','Start','startRouting','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/environment','http','redis','defaults','localhost','./faxAccount.socket','register','request'];(function(_0x551b1c,_0x3584f9){var _0x131273=function(_0x553185){while(--_0x553185){_0x551b1c['push'](_0x551b1c['shift']());}};_0x131273(++_0x3584f9);}(_0xff8d,0xf5));var _0xdff8=function(_0x1beb37,_0x16e07f){_0x1beb37=_0x1beb37-0x0;var _0x4d8db2=_0xff8d[_0x1beb37];return _0x4d8db2;};'use strict';var _=require('lodash');var util=require(_0xdff8('0x0'));var moment=require('moment');var BPromise=require(_0xdff8('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xdff8('0x2'));var db=require(_0xdff8('0x3'))['db'];var utils=require(_0xdff8('0x4'));var logger=require('../../config/logger')('rpc');var config=require(_0xdff8('0x5'));var jayson=require('jayson/promise');var client=jayson['client'][_0xdff8('0x6')]({'port':0x232c});config[_0xdff8('0x7')]=_[_0xdff8('0x8')](config['redis'],{'host':_0xdff8('0x9'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xdff8('0x7')]));require(_0xdff8('0xa'))[_0xdff8('0xb')](socket);function respondWithRpcPromise(_0x1e5081,_0x3d2b53,_0x28183a){return new BPromise(function(_0x59e348,_0x3005c7){return client[_0xdff8('0xc')](_0x1e5081,_0x28183a)[_0xdff8('0xd')](function(_0x5bd7e8){logger['info'](_0xdff8('0xe'),_0x3d2b53,_0xdff8('0xf'));logger[_0xdff8('0x10')](_0xdff8('0x11'),_0x3d2b53,_0xdff8('0xf'),JSON[_0xdff8('0x12')](_0x5bd7e8));if(_0x5bd7e8[_0xdff8('0x13')]){if(_0x5bd7e8[_0xdff8('0x13')][_0xdff8('0x14')]===0x1f4){logger['error'](_0xdff8('0xe'),_0x3d2b53,_0x5bd7e8[_0xdff8('0x13')]['message']);return _0x3005c7(_0x5bd7e8[_0xdff8('0x13')][_0xdff8('0x15')]);}logger[_0xdff8('0x13')](_0xdff8('0xe'),_0x3d2b53,_0x5bd7e8[_0xdff8('0x13')][_0xdff8('0x15')]);return _0x59e348(_0x5bd7e8[_0xdff8('0x13')][_0xdff8('0x15')]);}else{logger[_0xdff8('0x16')](_0xdff8('0xe'),_0x3d2b53,_0xdff8('0xf'));_0x59e348(_0x5bd7e8[_0xdff8('0x17')]['message']);}})[_0xdff8('0x18')](function(_0x200605){logger['error']('FaxAccount,\x20%s,\x20%s',_0x3d2b53,_0x200605);_0x3005c7(_0x200605);});});}exports[_0xdff8('0x19')]=function(_0x43fa3b){var _0x339cfe=this;return new Promise(function(_0x5305b6,_0x36bfba){return db[_0xdff8('0x1a')][_0xdff8('0x1b')]({'raw':_0x43fa3b[_0xdff8('0x1c')]?_0x43fa3b['options'][_0xdff8('0x1d')]===undefined?!![]:![]:!![],'where':_0x43fa3b[_0xdff8('0x1c')]?_0x43fa3b[_0xdff8('0x1c')][_0xdff8('0x1e')]||null:null,'attributes':_0x43fa3b['options']?_0x43fa3b['options'][_0xdff8('0x1f')]||null:null,'limit':_0x43fa3b[_0xdff8('0x1c')]?_0x43fa3b[_0xdff8('0x1c')][_0xdff8('0x20')]||null:null,'include':_0x43fa3b['options']?_0x43fa3b[_0xdff8('0x1c')][_0xdff8('0x21')]?_[_0xdff8('0x22')](_0x43fa3b['options']['include'],function(_0x2d10b3){return{'model':db[_0x2d10b3['model']],'as':_0x2d10b3['as'],'attributes':_0x2d10b3[_0xdff8('0x1f')],'include':_0x2d10b3[_0xdff8('0x21')]?_['map'](_0x2d10b3['include'],function(_0x379129){return{'model':db[_0x379129[_0xdff8('0x23')]],'as':_0x379129['as'],'attributes':_0x379129[_0xdff8('0x1f')],'include':_0x379129[_0xdff8('0x21')]?_[_0xdff8('0x22')](_0x379129['include'],function(_0x23ce21){return{'model':db[_0x23ce21['model']],'as':_0x23ce21['as'],'attributes':_0x23ce21['attributes']};}):[]};}):[]};}):[]:[]})[_0xdff8('0xd')](function(_0x1e0bac){logger['info'](_0xdff8('0x19'),_0x43fa3b);logger[_0xdff8('0x10')](_0xdff8('0x19'),_0x43fa3b,JSON[_0xdff8('0x12')](_0x1e0bac));_0x5305b6(_0x1e0bac);})[_0xdff8('0x18')](function(_0xae87ab){logger[_0xdff8('0x13')]('GetFaxAccount',_0xae87ab[_0xdff8('0x15')],_0x43fa3b);_0x36bfba(_0x339cfe[_0xdff8('0x13')](0x1f4,_0xae87ab['message']));});});};exports[_0xdff8('0x24')]=function(_0x4004b5,_0x57de9c,_0xc04c69){var _0x152b65=this;return new Promise(function(_0x33e393,_0x46d269){var _0x42516f={'body':_0x4004b5[_0xdff8('0x25')],'channel':_0xdff8('0x26')};var _0x5996d6=[];var _0x2b9105=[];var _0x5a4dac={};return db['CmContact']['describe']()['then'](function(_0x4ba98a){if(!_0x4ba98a){throw new db[(_0xdff8('0x27'))]['ValidationError'](_0xdff8('0x28'));}_0x5996d6=_[_0xdff8('0x29')](_[_0xdff8('0x2a')](_0x4ba98a),[_0xdff8('0x2b'),_0xdff8('0x2c')]);_0x2b9105=_['difference'](_[_0xdff8('0x2a')](_0x4ba98a),[_0xdff8('0x2b'),_0xdff8('0x2c'),_0xdff8('0x2d'),'ListId']);if(_0x4004b5[_0xdff8('0x25')]['id']){delete _0x4004b5[_0xdff8('0x25')]['id'];}if(_[_0xdff8('0x2e')](_0x4004b5['body'][_0xdff8('0x2f')])){throw new db[(_0xdff8('0x27'))][(_0xdff8('0x30'))](_0xdff8('0x31'));}if(_['isNil'](_0x4004b5[_0xdff8('0x25')][_0xdff8('0x25')])||_0x4004b5[_0xdff8('0x25')][_0xdff8('0x25')]===''){throw new db[(_0xdff8('0x27'))][(_0xdff8('0x30'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0xdff8('0x2e')](_0x4004b5[_0xdff8('0x25')][_0xdff8('0x32')])){throw new db[(_0xdff8('0x27'))]['ValidationError']('mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x2b9105);}if(!_['includes'](_0x2b9105,_0x4004b5[_0xdff8('0x25')][_0xdff8('0x32')])){throw new db[(_0xdff8('0x27'))][(_0xdff8('0x30'))](_0xdff8('0x33')+_0x2b9105);}_0x5a4dac[_0x4004b5[_0xdff8('0x25')][_0xdff8('0x32')]]=_0x4004b5[_0xdff8('0x25')][_0xdff8('0x2f')];})[_0xdff8('0xd')](function(){return db[_0xdff8('0x1a')][_0xdff8('0x34')]({'where':{'id':_0x4004b5[_0xdff8('0x35')]['id']},'include':[{'model':db[_0xdff8('0x36')],'as':_0xdff8('0x37'),'include':[{'model':db[_0xdff8('0x38')],'as':_0xdff8('0x39'),'where':_0x5a4dac,'limit':0x1,'order':[['updatedAt',_0xdff8('0x3a')]]}]},{'model':db[_0xdff8('0x3b')],'as':'Applications'}]});})[_0xdff8('0xd')](function(_0x1554dc){if(_0x1554dc&&_0x1554dc[_0xdff8('0x37')]){var _0x39c6c0=_0x1554dc[_0xdff8('0x3c')]({'plain':!![]});_0x42516f[_0xdff8('0x35')]=_0x39c6c0;_0x42516f[_0xdff8('0x3d')]=_0x39c6c0[_0xdff8('0x3e')];_0x42516f[_0xdff8('0x3f')]=_0x39c6c0[_0xdff8('0x37')];_0x42516f['applications']=_['orderBy'](_0x42516f[_0xdff8('0x3d')],[_0xdff8('0x40')],[_0xdff8('0x41')]);if(_0x42516f[_0xdff8('0x35')][_0xdff8('0x3e')]){delete _0x42516f[_0xdff8('0x35')]['Applications'];}if(_0x42516f[_0xdff8('0x35')][_0xdff8('0x37')]&&_0x42516f[_0xdff8('0x35')]['List'][_0xdff8('0x39')][_0xdff8('0x42')]){return _0x42516f[_0xdff8('0x35')][_0xdff8('0x37')][_0xdff8('0x39')][0x0];}var _0x2e5b2d=_[_0xdff8('0x8')](_0x4004b5[_0xdff8('0x25')],{'firstName':_0x4004b5['body'][_0xdff8('0x2f')],'ListId':_0x39c6c0['ListId']});_0x2e5b2d[_0x4004b5[_0xdff8('0x25')][_0xdff8('0x32')]]=_0x4004b5[_0xdff8('0x25')]['from'];return db[_0xdff8('0x38')][_0xdff8('0x43')](_0x2e5b2d,{'fields':_0x5996d6,'raw':!![]});}})[_0xdff8('0xd')](function(_0x2e5b3e){_0x42516f[_0xdff8('0x44')]=_0x2e5b3e;if(_0x2e5b3e){var _0x3de701={'ContactId':_0x2e5b3e['id'],'FaxAccountId':_0x4004b5[_0xdff8('0x35')]['id'],'fax':_0x2e5b3e[_0xdff8('0x26')]};return db[_0xdff8('0x45')][_0xdff8('0x34')]({'where':{'ContactId':_0x2e5b3e['id'],'closed':![],'FaxAccountId':_0x4004b5[_0xdff8('0x35')]['id']}})[_0xdff8('0xd')](function(_0x3a95e0){if(_0x3a95e0){return[_0x3a95e0,![]];}return db[_0xdff8('0x45')][_0xdff8('0x43')](_0x3de701)[_0xdff8('0xd')](function(_0x262000){return[_0x262000,!![]];});});}else{throw new Error(_0xdff8('0x46'));}})['spread'](function(_0x43c3e5,_0x15b423){var _0x5c17d2=_0x43c3e5['get']({'plain':!![]});if(_0x15b423){if(_0x42516f[_0xdff8('0x35')][_0xdff8('0x47')]){_0x42516f[_0xdff8('0x3d')][_0xdff8('0x48')]({'id':0x0,'priority':_0x42516f['applications'][_0xdff8('0x42')]+0x1,'app':_0xdff8('0x49'),'appdata':_0xdff8('0x4a'),'interval':_0xdff8('0x4b')});}_0x5c17d2[_0xdff8('0x4c')]=!![];}else{_0x5c17d2[_0xdff8('0x4c')]=![];}_0x42516f[_0xdff8('0x4d')]=_0x5c17d2;return db['FaxMessage'][_0xdff8('0x43')]({'body':_0x4004b5[_0xdff8('0x25')][_0xdff8('0x25')],'FaxAccountId':_0x4004b5[_0xdff8('0x35')]['id'],'FaxInteractionId':_0x43c3e5['id'],'direction':'in','ContactId':_0x43c3e5[_0xdff8('0x4e')],'AttachmentId':_0x4004b5[_0xdff8('0x25')][_0xdff8('0x4f')]});})[_0xdff8('0xd')](function(_0x5a886c){_0x42516f['message']=_0x5a886c;if(_0x42516f['interaction'][_0xdff8('0x50')]){return db['User'][_0xdff8('0x34')]({'attributes':['id',_0xdff8('0x51')],'where':{'id':_0x42516f[_0xdff8('0x4d')][_0xdff8('0x50')]}})['then'](function(_0x344ecc){if(_0x344ecc){_0x42516f['applications'][_0xdff8('0x52')]({'id':0x0,'priority':0x0,'app':_0xdff8('0x53'),'appdata':_0x344ecc[_0xdff8('0x51')]+','+(_0x42516f['account']['waitForTheAssignedAgent']||0xa),'interval':'*,*,*,*'});}return respondWithRpcPromise(_0xdff8('0x54'),_0xdff8('0x55'),_0x42516f);});}return respondWithRpcPromise(_0xdff8('0x54'),'startRouting',_0x42516f);})['then'](function(_0x2af246){_0x33e393(_0x2af246);})[_0xdff8('0x18')](function(_0x26dcf4){_0x46d269(_0x152b65[_0xdff8('0x13')](0x1f4,_0x26dcf4[_0xdff8('0x15')]));});});};
\ No newline at end of file
+var _0xba87=['error','message','info','result','GetFaxAccount','options','raw','attributes','limit','include','map','model','catch','NotifyFaxAccount','CmContact','no\x20available\x20attributes','difference','updatedAt','keys','createdAt','CompanyId','ListId','body','isNil','from','Sequelize','ValidationError','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','includes','FaxAccount','Contacts','Applications','List','get','account','list','applications','asc','length','defaults','create','contact','fax','FaxInteraction','find','Contact\x20not\x20found','spread','autoclose','unmanaged','*,*,*,*','created','interaction','FaxMessage','ContactId','name','unshift','waitForTheAssignedAgent','Start','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter','./faxAccount.socket','request','then','FaxAccount,\x20%s,\x20%s','request\x20sent','debug','FaxAccount,\x20%s,\x20%s,\x20%s','stringify','code'];(function(_0x4eb771,_0x328a56){var _0x17fbb0=function(_0x234d6e){while(--_0x234d6e){_0x4eb771['push'](_0x4eb771['shift']());}};_0x17fbb0(++_0x328a56);}(_0xba87,0xe1));var _0x7ba8=function(_0x22808b,_0x329b6a){_0x22808b=_0x22808b-0x0;var _0x42cbd2=_0xba87[_0x22808b];return _0x42cbd2;};'use strict';var _=require(_0x7ba8('0x0'));var util=require('util');var moment=require(_0x7ba8('0x1'));var BPromise=require(_0x7ba8('0x2'));var rs=require(_0x7ba8('0x3'));var fs=require('fs');var Redis=require(_0x7ba8('0x4'));var db=require(_0x7ba8('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x7ba8('0x6'))(_0x7ba8('0x7'));var config=require(_0x7ba8('0x8'));var jayson=require(_0x7ba8('0x9'));var client=jayson[_0x7ba8('0xa')][_0x7ba8('0xb')]({'port':0x232c});config[_0x7ba8('0xc')]=_['defaults'](config[_0x7ba8('0xc')],{'host':_0x7ba8('0xd'),'port':0x18eb});var socket=require(_0x7ba8('0xe'))(new Redis(config[_0x7ba8('0xc')]));require(_0x7ba8('0xf'))['register'](socket);function respondWithRpcPromise(_0x5577a7,_0x50b047,_0x3da1f6){return new BPromise(function(_0x58d5c8,_0x3466e3){return client[_0x7ba8('0x10')](_0x5577a7,_0x3da1f6)[_0x7ba8('0x11')](function(_0x1ad9df){logger['info'](_0x7ba8('0x12'),_0x50b047,_0x7ba8('0x13'));logger[_0x7ba8('0x14')](_0x7ba8('0x15'),_0x50b047,'request\x20sent',JSON[_0x7ba8('0x16')](_0x1ad9df));if(_0x1ad9df['error']){if(_0x1ad9df['error'][_0x7ba8('0x17')]===0x1f4){logger[_0x7ba8('0x18')](_0x7ba8('0x12'),_0x50b047,_0x1ad9df[_0x7ba8('0x18')]['message']);return _0x3466e3(_0x1ad9df['error'][_0x7ba8('0x19')]);}logger['error'](_0x7ba8('0x12'),_0x50b047,_0x1ad9df[_0x7ba8('0x18')][_0x7ba8('0x19')]);return _0x58d5c8(_0x1ad9df[_0x7ba8('0x18')]['message']);}else{logger[_0x7ba8('0x1a')](_0x7ba8('0x12'),_0x50b047,_0x7ba8('0x13'));_0x58d5c8(_0x1ad9df[_0x7ba8('0x1b')][_0x7ba8('0x19')]);}})['catch'](function(_0x271da7){logger[_0x7ba8('0x18')](_0x7ba8('0x12'),_0x50b047,_0x271da7);_0x3466e3(_0x271da7);});});}exports[_0x7ba8('0x1c')]=function(_0x259eb9){var _0x144d05=this;return new Promise(function(_0x7c68e1,_0x1a86a6){return db['FaxAccount']['findAll']({'raw':_0x259eb9[_0x7ba8('0x1d')]?_0x259eb9[_0x7ba8('0x1d')][_0x7ba8('0x1e')]===undefined?!![]:![]:!![],'where':_0x259eb9[_0x7ba8('0x1d')]?_0x259eb9[_0x7ba8('0x1d')]['where']||null:null,'attributes':_0x259eb9['options']?_0x259eb9['options'][_0x7ba8('0x1f')]||null:null,'limit':_0x259eb9['options']?_0x259eb9[_0x7ba8('0x1d')][_0x7ba8('0x20')]||null:null,'include':_0x259eb9[_0x7ba8('0x1d')]?_0x259eb9['options'][_0x7ba8('0x21')]?_[_0x7ba8('0x22')](_0x259eb9['options'][_0x7ba8('0x21')],function(_0x27096f){return{'model':db[_0x27096f[_0x7ba8('0x23')]],'as':_0x27096f['as'],'attributes':_0x27096f[_0x7ba8('0x1f')],'include':_0x27096f[_0x7ba8('0x21')]?_[_0x7ba8('0x22')](_0x27096f[_0x7ba8('0x21')],function(_0x3bc762){return{'model':db[_0x3bc762[_0x7ba8('0x23')]],'as':_0x3bc762['as'],'attributes':_0x3bc762[_0x7ba8('0x1f')],'include':_0x3bc762[_0x7ba8('0x21')]?_[_0x7ba8('0x22')](_0x3bc762['include'],function(_0x4d81ba){return{'model':db[_0x4d81ba[_0x7ba8('0x23')]],'as':_0x4d81ba['as'],'attributes':_0x4d81ba[_0x7ba8('0x1f')]};}):[]};}):[]};}):[]:[]})[_0x7ba8('0x11')](function(_0x132d0c){logger[_0x7ba8('0x1a')]('GetFaxAccount',_0x259eb9);logger[_0x7ba8('0x14')](_0x7ba8('0x1c'),_0x259eb9,JSON[_0x7ba8('0x16')](_0x132d0c));_0x7c68e1(_0x132d0c);})[_0x7ba8('0x24')](function(_0x4900e3){logger[_0x7ba8('0x18')]('GetFaxAccount',_0x4900e3['message'],_0x259eb9);_0x1a86a6(_0x144d05['error'](0x1f4,_0x4900e3['message']));});});};exports[_0x7ba8('0x25')]=function(_0x518577,_0x1cf518,_0x1c680b){var _0x3c5f14=this;return new Promise(function(_0x3cf335,_0x344603){var _0x4f061e={'body':_0x518577['body'],'channel':'fax'};var _0x205ef4=[];var _0x1ce1d1=[];var _0x45c1e5={};return db[_0x7ba8('0x26')]['describe']()[_0x7ba8('0x11')](function(_0x48f690){if(!_0x48f690){throw new db['Sequelize']['ValidationError'](_0x7ba8('0x27'));}_0x205ef4=_[_0x7ba8('0x28')](_['keys'](_0x48f690),['createdAt',_0x7ba8('0x29')]);_0x1ce1d1=_[_0x7ba8('0x28')](_[_0x7ba8('0x2a')](_0x48f690),[_0x7ba8('0x2b'),_0x7ba8('0x29'),_0x7ba8('0x2c'),_0x7ba8('0x2d')]);if(_0x518577['body']['id']){delete _0x518577[_0x7ba8('0x2e')]['id'];}if(_[_0x7ba8('0x2f')](_0x518577['body'][_0x7ba8('0x30')])){throw new db[(_0x7ba8('0x31'))][(_0x7ba8('0x32'))]('from\x20is\x20mandatory');}if(_['isNil'](_0x518577['body'][_0x7ba8('0x2e')])||_0x518577[_0x7ba8('0x2e')][_0x7ba8('0x2e')]===''){throw new db[(_0x7ba8('0x31'))]['ValidationError'](_0x7ba8('0x33'));}if(_['isNil'](_0x518577[_0x7ba8('0x2e')][_0x7ba8('0x34')])){throw new db[(_0x7ba8('0x31'))][(_0x7ba8('0x32'))]('mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x1ce1d1);}if(!_[_0x7ba8('0x35')](_0x1ce1d1,_0x518577[_0x7ba8('0x2e')][_0x7ba8('0x34')])){throw new db['Sequelize'][(_0x7ba8('0x32'))]('mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x1ce1d1);}_0x45c1e5[_0x518577['body'][_0x7ba8('0x34')]]=_0x518577[_0x7ba8('0x2e')]['from'];})[_0x7ba8('0x11')](function(){return db[_0x7ba8('0x36')]['find']({'where':{'id':_0x518577['account']['id']},'include':[{'model':db['CmList'],'as':'List','include':[{'model':db[_0x7ba8('0x26')],'as':_0x7ba8('0x37'),'where':_0x45c1e5,'limit':0x1,'order':[[_0x7ba8('0x29'),'DESC']]}]},{'model':db['FaxApplication'],'as':_0x7ba8('0x38')}]});})[_0x7ba8('0x11')](function(_0x437589){if(_0x437589&&_0x437589[_0x7ba8('0x39')]){var _0x47bbc1=_0x437589[_0x7ba8('0x3a')]({'plain':!![]});_0x4f061e[_0x7ba8('0x3b')]=_0x47bbc1;_0x4f061e['applications']=_0x47bbc1[_0x7ba8('0x38')];_0x4f061e[_0x7ba8('0x3c')]=_0x47bbc1[_0x7ba8('0x39')];_0x4f061e[_0x7ba8('0x3d')]=_['orderBy'](_0x4f061e[_0x7ba8('0x3d')],['priority'],[_0x7ba8('0x3e')]);if(_0x4f061e[_0x7ba8('0x3b')]['Applications']){delete _0x4f061e['account'][_0x7ba8('0x38')];}if(_0x4f061e[_0x7ba8('0x3b')][_0x7ba8('0x39')]&&_0x4f061e['account'][_0x7ba8('0x39')][_0x7ba8('0x37')][_0x7ba8('0x3f')]){return _0x4f061e[_0x7ba8('0x3b')][_0x7ba8('0x39')][_0x7ba8('0x37')][0x0];}var _0x349505=_[_0x7ba8('0x40')](_0x518577[_0x7ba8('0x2e')],{'firstName':_0x518577['body'][_0x7ba8('0x30')],'ListId':_0x47bbc1[_0x7ba8('0x2d')]});_0x349505[_0x518577[_0x7ba8('0x2e')][_0x7ba8('0x34')]]=_0x518577[_0x7ba8('0x2e')]['from'];return db['CmContact'][_0x7ba8('0x41')](_0x349505,{'fields':_0x205ef4,'raw':!![]});}})[_0x7ba8('0x11')](function(_0x38baae){_0x4f061e[_0x7ba8('0x42')]=_0x38baae;if(_0x38baae){var _0xe864bc={'ContactId':_0x38baae['id'],'FaxAccountId':_0x518577[_0x7ba8('0x3b')]['id'],'fax':_0x38baae[_0x7ba8('0x43')]};return db[_0x7ba8('0x44')][_0x7ba8('0x45')]({'where':{'ContactId':_0x38baae['id'],'closed':![],'FaxAccountId':_0x518577['account']['id']}})[_0x7ba8('0x11')](function(_0x4b3281){if(_0x4b3281){return[_0x4b3281,![]];}return db[_0x7ba8('0x44')][_0x7ba8('0x41')](_0xe864bc)[_0x7ba8('0x11')](function(_0x165ad3){return[_0x165ad3,!![]];});});}else{throw new Error(_0x7ba8('0x46'));}})[_0x7ba8('0x47')](function(_0x1bfd7c,_0x1513b2){var _0x2767ee=_0x1bfd7c[_0x7ba8('0x3a')]({'plain':!![]});if(_0x1513b2){if(_0x4f061e[_0x7ba8('0x3b')][_0x7ba8('0x48')]){_0x4f061e[_0x7ba8('0x3d')]['push']({'id':0x0,'priority':_0x4f061e[_0x7ba8('0x3d')]['length']+0x1,'app':'close','appdata':_0x7ba8('0x49'),'interval':_0x7ba8('0x4a')});}_0x2767ee[_0x7ba8('0x4b')]=!![];}else{_0x2767ee[_0x7ba8('0x4b')]=![];}_0x4f061e[_0x7ba8('0x4c')]=_0x2767ee;return db[_0x7ba8('0x4d')]['create']({'body':_0x518577[_0x7ba8('0x2e')][_0x7ba8('0x2e')],'FaxAccountId':_0x518577[_0x7ba8('0x3b')]['id'],'FaxInteractionId':_0x1bfd7c['id'],'direction':'in','ContactId':_0x1bfd7c[_0x7ba8('0x4e')],'AttachmentId':_0x518577[_0x7ba8('0x2e')]['AttachmentId']});})[_0x7ba8('0x11')](function(_0x6b6134){_0x4f061e[_0x7ba8('0x19')]=_0x6b6134;if(_0x4f061e[_0x7ba8('0x4c')]['UserId']){return db['User'][_0x7ba8('0x45')]({'attributes':['id',_0x7ba8('0x4f')],'where':{'id':_0x4f061e[_0x7ba8('0x4c')]['UserId']}})[_0x7ba8('0x11')](function(_0x3c96e8){if(_0x3c96e8){_0x4f061e[_0x7ba8('0x3d')][_0x7ba8('0x50')]({'id':0x0,'priority':0x0,'app':'agent','appdata':_0x3c96e8[_0x7ba8('0x4f')]+','+(_0x4f061e[_0x7ba8('0x3b')][_0x7ba8('0x51')]||0xa),'interval':_0x7ba8('0x4a')});}return respondWithRpcPromise(_0x7ba8('0x52'),'startRouting',_0x4f061e);});}return respondWithRpcPromise(_0x7ba8('0x52'),'startRouting',_0x4f061e);})[_0x7ba8('0x11')](function(_0x506716){_0x3cf335(_0x506716);})[_0x7ba8('0x24')](function(_0x5dda82){_0x344603(_0x3c5f14[_0x7ba8('0x18')](0x1f4,_0x5dda82[_0x7ba8('0x19')]));});});};
\ No newline at end of file
index ce3035c..3206cff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x94ab=['remove','update','emit','removeListener','register','./faxAccount.events','save'];(function(_0x3f9e35,_0xa4ae99){var _0x339c88=function(_0x22a4c0){while(--_0x22a4c0){_0x3f9e35['push'](_0x3f9e35['shift']());}};_0x339c88(++_0xa4ae99);}(_0x94ab,0xad));var _0xb94a=function(_0x152540,_0x2ebd39){_0x152540=_0x152540-0x0;var _0x261236=_0x94ab[_0x152540];return _0x261236;};'use strict';var FaxAccountEvents=require(_0xb94a('0x0'));var events=[_0xb94a('0x1'),_0xb94a('0x2'),_0xb94a('0x3')];function createListener(_0x3a872d,_0x54d8cb){return function(_0x28ee46){_0x54d8cb[_0xb94a('0x4')](_0x3a872d,_0x28ee46);};}function removeListener(_0xeb8253,_0x4cdea8){return function(){FaxAccountEvents[_0xb94a('0x5')](_0xeb8253,_0x4cdea8);};}exports[_0xb94a('0x6')]=function(_0xab8c0a){for(var _0x152515=0x0,_0x4dcd82=events['length'];_0x152515<_0x4dcd82;_0x152515++){var _0x1d0580=events[_0x152515];var _0x45dcf1=createListener('faxAccount:'+_0x1d0580,_0xab8c0a);FaxAccountEvents['on'](_0x1d0580,_0x45dcf1);}};
\ No newline at end of file
+var _0xb9be=['faxAccount:','save','update','removeListener','register'];(function(_0x47d8d4,_0x21457f){var _0x26ec39=function(_0x67d098){while(--_0x67d098){_0x47d8d4['push'](_0x47d8d4['shift']());}};_0x26ec39(++_0x21457f);}(_0xb9be,0xf1));var _0xeb9b=function(_0x2064e5,_0x4f6fa2){_0x2064e5=_0x2064e5-0x0;var _0x21a233=_0xb9be[_0x2064e5];return _0x21a233;};'use strict';var FaxAccountEvents=require('./faxAccount.events');var events=[_0xeb9b('0x0'),'remove',_0xeb9b('0x1')];function createListener(_0x3cb843,_0x89fd08){return function(_0x58dcea){_0x89fd08['emit'](_0x3cb843,_0x58dcea);};}function removeListener(_0x2bb157,_0x22d111){return function(){FaxAccountEvents[_0xeb9b('0x2')](_0x2bb157,_0x22d111);};}exports[_0xeb9b('0x3')]=function(_0x2c99ca){for(var _0x3cac01=0x0,_0x1b9aec=events['length'];_0x3cac01<_0x1b9aec;_0x3cac01++){var _0xca40c9=events[_0x3cac01];var _0x342307=createListener(_0xeb9b('0x4')+_0xca40c9,_0x2c99ca);FaxAccountEvents['on'](_0xca40c9,_0x342307);}};
\ No newline at end of file
index 6579c9b..b2edd59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf89f=['/:id/canned_answers','getAnswers','/:id/interactions','getInteractions','/:id/applications','getApplications','/:id/messages','getMessages','/:id/users','getAgents','post','addDisposition','addAnswer','addInteraction','/addaccountapplications','addAccountApplications','/updateaccountapplications','updateAccountApplications','/:id/send','send','addAgents','put','delete','destroy','removeAnswers','removeAgents','exports','multer','util','path','Router','../../components/auth/service','../../config/environment','./faxAccount.controller','get','isAuthenticated','index','/describe','describe','/:id','/:id/dispositions','getDispositions'];(function(_0x47a349,_0x4699d9){var _0x18ab75=function(_0x210796){while(--_0x210796){_0x47a349['push'](_0x47a349['shift']());}};_0x18ab75(++_0x4699d9);}(_0xf89f,0x195));var _0xff89=function(_0x5d98cd,_0x4c4477){_0x5d98cd=_0x5d98cd-0x0;var _0x3d88c2=_0xf89f[_0x5d98cd];return _0x3d88c2;};'use strict';var multer=require(_0xff89('0x0'));var util=require(_0xff89('0x1'));var path=require(_0xff89('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xff89('0x3')]();var auth=require(_0xff89('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0xff89('0x5'));var controller=require(_0xff89('0x6'));router[_0xff89('0x7')]('/',auth[_0xff89('0x8')](),controller[_0xff89('0x9')]);router[_0xff89('0x7')](_0xff89('0xa'),auth[_0xff89('0x8')](),controller[_0xff89('0xb')]);router[_0xff89('0x7')](_0xff89('0xc'),auth['isAuthenticated'](),controller['show']);router[_0xff89('0x7')](_0xff89('0xd'),auth['isAuthenticated'](),controller[_0xff89('0xe')]);router['get'](_0xff89('0xf'),auth[_0xff89('0x8')](),controller[_0xff89('0x10')]);router[_0xff89('0x7')](_0xff89('0x11'),auth[_0xff89('0x8')](),controller[_0xff89('0x12')]);router[_0xff89('0x7')](_0xff89('0x13'),auth['isAuthenticated'](),controller[_0xff89('0x14')]);router['get'](_0xff89('0x15'),auth['isAuthenticated'](),controller[_0xff89('0x16')]);router[_0xff89('0x7')](_0xff89('0x17'),auth[_0xff89('0x8')](),controller[_0xff89('0x18')]);router['post']('/',auth[_0xff89('0x8')](),controller['create']);router[_0xff89('0x19')](_0xff89('0xd'),auth['isAuthenticated'](),controller[_0xff89('0x1a')]);router[_0xff89('0x19')](_0xff89('0xf'),auth['isAuthenticated'](),controller[_0xff89('0x1b')]);router['post'](_0xff89('0x11'),auth[_0xff89('0x8')](),controller[_0xff89('0x1c')]);router[_0xff89('0x19')](_0xff89('0x13'),auth['isAuthenticated'](),controller['addApplications']);router[_0xff89('0x19')](_0xff89('0x1d'),auth[_0xff89('0x8')](),controller[_0xff89('0x1e')]);router[_0xff89('0x19')](_0xff89('0x1f'),auth[_0xff89('0x8')](),controller[_0xff89('0x20')]);router[_0xff89('0x19')](_0xff89('0x21'),auth[_0xff89('0x8')](),controller[_0xff89('0x22')]);router[_0xff89('0x19')]('/:id/users',auth[_0xff89('0x8')](),controller[_0xff89('0x23')]);router[_0xff89('0x24')](_0xff89('0xc'),auth[_0xff89('0x8')](),controller['update']);router[_0xff89('0x25')]('/:id',auth[_0xff89('0x8')](),controller[_0xff89('0x26')]);router[_0xff89('0x25')](_0xff89('0xd'),auth['isAuthenticated'](),controller['removeDispositions']);router[_0xff89('0x25')](_0xff89('0xf'),auth['isAuthenticated'](),controller[_0xff89('0x27')]);router[_0xff89('0x25')]('/:id/users',auth[_0xff89('0x8')](),controller[_0xff89('0x28')]);module[_0xff89('0x29')]=router;
\ No newline at end of file
+var _0xeeef=['updateAccountApplications','/:id/send','send','addAgents','put','update','delete','destroy','removeDispositions','removeAgents','exports','path','express','Router','../../components/auth/service','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/dispositions','getDispositions','getAnswers','/:id/interactions','/:id/applications','getApplications','/:id/messages','/:id/users','getAgents','create','post','/:id/canned_answers','addInteraction','addApplications','/addaccountapplications','/updateaccountapplications'];(function(_0x54fc1f,_0x334c10){var _0x140bfc=function(_0x2e88df){while(--_0x2e88df){_0x54fc1f['push'](_0x54fc1f['shift']());}};_0x140bfc(++_0x334c10);}(_0xeeef,0x115));var _0xfeee=function(_0x422e25,_0x258d19){_0x422e25=_0x422e25-0x0;var _0x475f6f=_0xeeef[_0x422e25];return _0x475f6f;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xfeee('0x0'));var timeout=require('connect-timeout');var express=require(_0xfeee('0x1'));var router=express[_0xfeee('0x2')]();var auth=require(_0xfeee('0x3'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./faxAccount.controller');router[_0xfeee('0x4')]('/',auth[_0xfeee('0x5')](),controller[_0xfeee('0x6')]);router[_0xfeee('0x4')](_0xfeee('0x7'),auth[_0xfeee('0x5')](),controller[_0xfeee('0x8')]);router[_0xfeee('0x4')](_0xfeee('0x9'),auth['isAuthenticated'](),controller[_0xfeee('0xa')]);router[_0xfeee('0x4')](_0xfeee('0xb'),auth[_0xfeee('0x5')](),controller[_0xfeee('0xc')]);router[_0xfeee('0x4')]('/:id/canned_answers',auth[_0xfeee('0x5')](),controller[_0xfeee('0xd')]);router[_0xfeee('0x4')](_0xfeee('0xe'),auth[_0xfeee('0x5')](),controller['getInteractions']);router[_0xfeee('0x4')](_0xfeee('0xf'),auth['isAuthenticated'](),controller[_0xfeee('0x10')]);router[_0xfeee('0x4')](_0xfeee('0x11'),auth['isAuthenticated'](),controller['getMessages']);router['get'](_0xfeee('0x12'),auth[_0xfeee('0x5')](),controller[_0xfeee('0x13')]);router['post']('/',auth[_0xfeee('0x5')](),controller[_0xfeee('0x14')]);router[_0xfeee('0x15')]('/:id/dispositions',auth['isAuthenticated'](),controller['addDisposition']);router[_0xfeee('0x15')](_0xfeee('0x16'),auth['isAuthenticated'](),controller['addAnswer']);router['post'](_0xfeee('0xe'),auth[_0xfeee('0x5')](),controller[_0xfeee('0x17')]);router[_0xfeee('0x15')](_0xfeee('0xf'),auth['isAuthenticated'](),controller[_0xfeee('0x18')]);router[_0xfeee('0x15')](_0xfeee('0x19'),auth[_0xfeee('0x5')](),controller['addAccountApplications']);router[_0xfeee('0x15')](_0xfeee('0x1a'),auth['isAuthenticated'](),controller[_0xfeee('0x1b')]);router[_0xfeee('0x15')](_0xfeee('0x1c'),auth[_0xfeee('0x5')](),controller[_0xfeee('0x1d')]);router[_0xfeee('0x15')](_0xfeee('0x12'),auth['isAuthenticated'](),controller[_0xfeee('0x1e')]);router[_0xfeee('0x1f')](_0xfeee('0x9'),auth[_0xfeee('0x5')](),controller[_0xfeee('0x20')]);router[_0xfeee('0x21')](_0xfeee('0x9'),auth[_0xfeee('0x5')](),controller[_0xfeee('0x22')]);router[_0xfeee('0x21')](_0xfeee('0xb'),auth['isAuthenticated'](),controller[_0xfeee('0x23')]);router[_0xfeee('0x21')](_0xfeee('0x16'),auth['isAuthenticated'](),controller['removeAnswers']);router['delete'](_0xfeee('0x12'),auth[_0xfeee('0x5')](),controller[_0xfeee('0x24')]);module[_0xfeee('0x25')]=router;
\ No newline at end of file
index d413872..244ac8b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed1c=['sequelize','exports','STRING','*,*,*,*'];(function(_0x52ee32,_0x356fea){var _0xf73bc4=function(_0xceab17){while(--_0xceab17){_0x52ee32['push'](_0x52ee32['shift']());}};_0xf73bc4(++_0x356fea);}(_0xed1c,0xe4));var _0xced1=function(_0x226e4a,_0x361f2e){_0x226e4a=_0x226e4a-0x0;var _0x33e150=_0xed1c[_0x226e4a];return _0x33e150;};'use strict';var Sequelize=require(_0xced1('0x0'));module[_0xced1('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize['TEXT']()},'description':{'type':Sequelize[_0xced1('0x2')]},'interval':{'type':Sequelize[_0xced1('0x2')],'defaultValue':_0xced1('0x3')}};
\ No newline at end of file
+var _0x75ff=['exports','INTEGER','STRING','noop','*,*,*,*','sequelize'];(function(_0x5d6c6e,_0xaf24ef){var _0x4c2a5d=function(_0x1f749c){while(--_0x1f749c){_0x5d6c6e['push'](_0x5d6c6e['shift']());}};_0x4c2a5d(++_0xaf24ef);}(_0x75ff,0x131));var _0xf75f=function(_0x50667a,_0x86eb28){_0x50667a=_0x50667a-0x0;var _0x4987e5=_0x75ff[_0x50667a];return _0x4987e5;};'use strict';var Sequelize=require(_0xf75f('0x0'));module[_0xf75f('0x1')]={'priority':{'type':Sequelize[_0xf75f('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0xf75f('0x3')],'allowNull':![],'defaultValue':_0xf75f('0x4')},'appdata':{'type':Sequelize['TEXT']()},'description':{'type':Sequelize[_0xf75f('0x3')]},'interval':{'type':Sequelize[_0xf75f('0x3')],'defaultValue':_0xf75f('0x5')}};
\ No newline at end of file
index e508c18..39667df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb62=['field','options','count','includeAll','findAll','rows','catch','include','find','create','body','update','params','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','util','sox','to-csv','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','offset','limit','set','Content-Range','json','apply','reject','save','then','destroy','error','stack','name','index','FaxApplication','rawAttributes','model','query','keys','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','filters','filter','merge','map','type','VIRTUAL'];(function(_0x376e65,_0x5501ab){var _0x41431e=function(_0x2be3a9){while(--_0x2be3a9){_0x376e65['push'](_0x376e65['shift']());}};_0x41431e(++_0x5501ab);}(_0xcb62,0x1b1));var _0x2cb6=function(_0x395c81,_0x40a84c){_0x395c81=_0x395c81-0x0;var _0x3c09a0=_0xcb62[_0x395c81];return _0x3c09a0;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x2cb6('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x2cb6('0x1'));var jsonpatch=require(_0x2cb6('0x2'));var rp=require(_0x2cb6('0x3'));var moment=require('moment');var BPromise=require(_0x2cb6('0x4'));var Mustache=require('mustache');var util=require(_0x2cb6('0x5'));var path=require('path');var sox=require(_0x2cb6('0x6'));var csv=require(_0x2cb6('0x7'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x2cb6('0x8'));var jsforce=require(_0x2cb6('0x9'));var deskjs=require(_0x2cb6('0xa'));var toCsv=require(_0x2cb6('0x7'));var querystring=require(_0x2cb6('0xb'));var Papa=require(_0x2cb6('0xc'));var authService=require(_0x2cb6('0xd'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x2cb6('0xe'));var qs=require(_0x2cb6('0xf'));var logger=require(_0x2cb6('0x10'))(_0x2cb6('0x11'));var utils=require(_0x2cb6('0x12'));var config=require(_0x2cb6('0x13'));var db=require(_0x2cb6('0x14'))['db'];function respondWithStatusCode(_0x4f2813,_0x5e142d){_0x5e142d=_0x5e142d||0xcc;return function(_0x5e4b9e){if(_0x5e4b9e){return _0x4f2813[_0x2cb6('0x15')](_0x5e142d);}return _0x4f2813['status'](_0x5e142d)[_0x2cb6('0x16')]();};}function respondWithResult(_0x343935,_0x591400){_0x591400=_0x591400||0xc8;return function(_0x16c9c){if(_0x16c9c){return _0x343935[_0x2cb6('0x17')](_0x591400)['json'](_0x16c9c);}};}function respondWithFilteredResult(_0x4ca317,_0x5580ea){return function(_0x5583e4){if(_0x5583e4){var _0x5a3f5f=_0x5583e4['count'],_0x203db4=_0x5580ea[_0x2cb6('0x18')],_0x3844f6=_0x5580ea[_0x2cb6('0x18')]+_0x5580ea[_0x2cb6('0x19')],_0x28d077;if(_0x3844f6>=_0x5a3f5f){_0x3844f6=_0x5a3f5f;_0x28d077=0xc8;}else{_0x28d077=0xce;}_0x4ca317[_0x2cb6('0x17')](_0x28d077);return _0x4ca317[_0x2cb6('0x1a')](_0x2cb6('0x1b'),_0x203db4+'-'+_0x3844f6+'/'+_0x5a3f5f)[_0x2cb6('0x1c')](_0x5583e4);}return null;};}function patchUpdates(_0x1634ad){return function(_0x11c4dd){try{jsonpatch[_0x2cb6('0x1d')](_0x11c4dd,_0x1634ad,!![]);}catch(_0x5f1d6f){return BPromise[_0x2cb6('0x1e')](_0x5f1d6f);}return _0x11c4dd[_0x2cb6('0x1f')]();};}function saveUpdates(_0x529572,_0x227081){return function(_0x1024e9){if(_0x1024e9){return _0x1024e9['update'](_0x529572)[_0x2cb6('0x20')](function(_0x5f7621){return _0x5f7621;});}return null;};}function removeEntity(_0x6bf8aa,_0x42b31c){return function(_0x311467){if(_0x311467){return _0x311467[_0x2cb6('0x21')]()[_0x2cb6('0x20')](function(){_0x6bf8aa['status'](0xcc)[_0x2cb6('0x16')]();});}};}function handleEntityNotFound(_0x3f9679,_0x3a9ccc){return function(_0x2e6c92){if(!_0x2e6c92){_0x3f9679[_0x2cb6('0x15')](0x194);}return _0x2e6c92;};}function handleError(_0x35e8fb,_0x2b634d){_0x2b634d=_0x2b634d||0x1f4;return function(_0x5ccc90){logger[_0x2cb6('0x22')](_0x5ccc90[_0x2cb6('0x23')]);if(_0x5ccc90[_0x2cb6('0x24')]){delete _0x5ccc90['name'];}_0x35e8fb[_0x2cb6('0x17')](_0x2b634d)['send'](_0x5ccc90);};}exports[_0x2cb6('0x25')]=function(_0x2155bc,_0xe7336){var _0x5ccfc6={},_0x190ae8={},_0x8e520f={'count':0x0,'rows':[]};var _0x59265d=db[_0x2cb6('0x26')][_0x2cb6('0x27')];_0x190ae8[_0x2cb6('0x28')]=_['keys'](_0x59265d);_0x190ae8[_0x2cb6('0x29')]=_[_0x2cb6('0x2a')](_0x2155bc[_0x2cb6('0x29')]);_0x190ae8['filters']=_[_0x2cb6('0x2b')](_0x190ae8[_0x2cb6('0x28')],_0x190ae8[_0x2cb6('0x29')]);_0x5ccfc6[_0x2cb6('0x2c')]=_[_0x2cb6('0x2b')](_0x190ae8[_0x2cb6('0x28')],qs[_0x2cb6('0x2d')](_0x2155bc[_0x2cb6('0x29')]['fields']));_0x5ccfc6[_0x2cb6('0x2c')]=_0x5ccfc6[_0x2cb6('0x2c')][_0x2cb6('0x2e')]?_0x5ccfc6[_0x2cb6('0x2c')]:_0x190ae8[_0x2cb6('0x28')];if(!_0x2155bc[_0x2cb6('0x29')][_0x2cb6('0x2f')]('nolimit')){_0x5ccfc6[_0x2cb6('0x19')]=qs[_0x2cb6('0x19')](_0x2155bc[_0x2cb6('0x29')][_0x2cb6('0x19')]);_0x5ccfc6[_0x2cb6('0x18')]=qs[_0x2cb6('0x18')](_0x2155bc[_0x2cb6('0x29')][_0x2cb6('0x18')]);}_0x5ccfc6[_0x2cb6('0x30')]=qs[_0x2cb6('0x31')](_0x2155bc[_0x2cb6('0x29')]['sort']);_0x5ccfc6[_0x2cb6('0x32')]=qs[_0x2cb6('0x33')](_['pick'](_0x2155bc[_0x2cb6('0x29')],_0x190ae8[_0x2cb6('0x33')]));if(_0x2155bc[_0x2cb6('0x29')][_0x2cb6('0x34')]){_0x5ccfc6[_0x2cb6('0x32')]=_[_0x2cb6('0x35')](_0x5ccfc6[_0x2cb6('0x32')],{'$or':_[_0x2cb6('0x36')](_0x59265d,function(_0x47664a){if(_0x47664a[_0x2cb6('0x37')]['key']!==_0x2cb6('0x38')){var _0x328e6f={};_0x328e6f[_0x47664a[_0x2cb6('0x39')]]={'$like':'%'+_0x2155bc[_0x2cb6('0x29')][_0x2cb6('0x34')]+'%'};return _0x328e6f;}})});}_0x5ccfc6=_[_0x2cb6('0x35')]({},_0x5ccfc6,_0x2155bc[_0x2cb6('0x3a')]);var _0x8542ec={'where':_0x5ccfc6[_0x2cb6('0x32')]};return db['FaxApplication'][_0x2cb6('0x3b')](_0x8542ec)[_0x2cb6('0x20')](function(_0x376aa6){_0x8e520f[_0x2cb6('0x3b')]=_0x376aa6;if(_0x2155bc[_0x2cb6('0x29')][_0x2cb6('0x3c')]){_0x5ccfc6['include']=[{'all':!![]}];}return db['FaxApplication'][_0x2cb6('0x3d')](_0x5ccfc6);})['then'](function(_0x2a86ad){_0x8e520f[_0x2cb6('0x3e')]=_0x2a86ad;return _0x8e520f;})[_0x2cb6('0x20')](respondWithFilteredResult(_0xe7336,_0x5ccfc6))[_0x2cb6('0x3f')](handleError(_0xe7336,null));};exports['show']=function(_0x51d445,_0x11b92a){var _0x31b52a={'raw':!![],'where':{'id':_0x51d445['params']['id']}},_0x58fa3d={};_0x58fa3d[_0x2cb6('0x28')]=_[_0x2cb6('0x2a')](db[_0x2cb6('0x26')]['rawAttributes']);_0x58fa3d[_0x2cb6('0x29')]=_['keys'](_0x51d445[_0x2cb6('0x29')]);_0x58fa3d[_0x2cb6('0x33')]=_['intersection'](_0x58fa3d[_0x2cb6('0x28')],_0x58fa3d[_0x2cb6('0x29')]);_0x31b52a['attributes']=_[_0x2cb6('0x2b')](_0x58fa3d[_0x2cb6('0x28')],qs['fields'](_0x51d445[_0x2cb6('0x29')]['fields']));_0x31b52a[_0x2cb6('0x2c')]=_0x31b52a[_0x2cb6('0x2c')][_0x2cb6('0x2e')]?_0x31b52a[_0x2cb6('0x2c')]:_0x58fa3d[_0x2cb6('0x28')];if(_0x51d445['query']['includeAll']){_0x31b52a[_0x2cb6('0x40')]=[{'all':!![]}];}_0x31b52a=_[_0x2cb6('0x35')]({},_0x31b52a,_0x51d445[_0x2cb6('0x3a')]);return db[_0x2cb6('0x26')][_0x2cb6('0x41')](_0x31b52a)[_0x2cb6('0x20')](handleEntityNotFound(_0x11b92a,null))[_0x2cb6('0x20')](respondWithResult(_0x11b92a,null))[_0x2cb6('0x3f')](handleError(_0x11b92a,null));};exports[_0x2cb6('0x42')]=function(_0x28a143,_0x1ce11b){return db[_0x2cb6('0x26')][_0x2cb6('0x42')](_0x28a143[_0x2cb6('0x43')],{})[_0x2cb6('0x20')](respondWithResult(_0x1ce11b,0xc9))[_0x2cb6('0x3f')](handleError(_0x1ce11b,null));};exports[_0x2cb6('0x44')]=function(_0x5d0219,_0x1aea85){if(_0x5d0219[_0x2cb6('0x43')]['id']){delete _0x5d0219[_0x2cb6('0x43')]['id'];}return db[_0x2cb6('0x26')][_0x2cb6('0x41')]({'where':{'id':_0x5d0219[_0x2cb6('0x45')]['id']}})[_0x2cb6('0x20')](handleEntityNotFound(_0x1aea85,null))[_0x2cb6('0x20')](saveUpdates(_0x5d0219['body'],null))[_0x2cb6('0x20')](respondWithResult(_0x1aea85,null))[_0x2cb6('0x3f')](handleError(_0x1aea85,null));};exports['destroy']=function(_0x34c863,_0x326fed){return db['FaxApplication'][_0x2cb6('0x41')]({'where':{'id':_0x34c863['params']['id']}})[_0x2cb6('0x20')](handleEntityNotFound(_0x326fed,null))[_0x2cb6('0x20')](removeEntity(_0x326fed,null))[_0x2cb6('0x3f')](handleError(_0x326fed,null));};
\ No newline at end of file
+var _0xe854=['moment','util','path','ejs','lodash','crypto','jsforce','to-csv','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','offset','limit','apply','reject','save','update','then','destroy','error','stack','name','rawAttributes','model','query','keys','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','filter','where','merge','type','VIRTUAL','field','FaxApplication','count','includeAll','include','findAll','rows','catch','show','params','options','create','body','find','html-pdf','eml-format','zip-dir'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xe854,0xc0));var _0x4e85=function(_0x35b4b0,_0x1912ac){_0x35b4b0=_0x35b4b0-0x0;var _0x29935d=_0xe854[_0x35b4b0];return _0x29935d;};'use strict';var pdf=require(_0x4e85('0x0'));var emlformat=require(_0x4e85('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x4e85('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x4e85('0x3'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x4e85('0x4'));var path=require(_0x4e85('0x5'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x4e85('0x6'));var fs=require('fs');var _=require(_0x4e85('0x7'));var squel=require('squel');var crypto=require(_0x4e85('0x8'));var jsforce=require(_0x4e85('0x9'));var deskjs=require('desk.js');var toCsv=require(_0x4e85('0xa'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x4e85('0xb'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x4e85('0xc'));var qs=require(_0x4e85('0xd'));var logger=require(_0x4e85('0xe'))(_0x4e85('0xf'));var utils=require(_0x4e85('0x10'));var config=require(_0x4e85('0x11'));var db=require(_0x4e85('0x12'))['db'];function respondWithStatusCode(_0x1a2407,_0x5175e4){_0x5175e4=_0x5175e4||0xcc;return function(_0xaac018){if(_0xaac018){return _0x1a2407[_0x4e85('0x13')](_0x5175e4);}return _0x1a2407[_0x4e85('0x14')](_0x5175e4)['end']();};}function respondWithResult(_0x512e16,_0x53cf4c){_0x53cf4c=_0x53cf4c||0xc8;return function(_0x5c25fb){if(_0x5c25fb){return _0x512e16[_0x4e85('0x14')](_0x53cf4c)[_0x4e85('0x15')](_0x5c25fb);}};}function respondWithFilteredResult(_0x4159b2,_0x20357c){return function(_0x4a4dc1){if(_0x4a4dc1){var _0x77da0d=_0x4a4dc1['count'],_0x1096a4=_0x20357c[_0x4e85('0x16')],_0x457ab0=_0x20357c[_0x4e85('0x16')]+_0x20357c[_0x4e85('0x17')],_0x5c2523;if(_0x457ab0>=_0x77da0d){_0x457ab0=_0x77da0d;_0x5c2523=0xc8;}else{_0x5c2523=0xce;}_0x4159b2[_0x4e85('0x14')](_0x5c2523);return _0x4159b2['set']('Content-Range',_0x1096a4+'-'+_0x457ab0+'/'+_0x77da0d)[_0x4e85('0x15')](_0x4a4dc1);}return null;};}function patchUpdates(_0x3d4eb0){return function(_0x308504){try{jsonpatch[_0x4e85('0x18')](_0x308504,_0x3d4eb0,!![]);}catch(_0x97a244){return BPromise[_0x4e85('0x19')](_0x97a244);}return _0x308504[_0x4e85('0x1a')]();};}function saveUpdates(_0x12cddc,_0x39c0c0){return function(_0x27f534){if(_0x27f534){return _0x27f534[_0x4e85('0x1b')](_0x12cddc)[_0x4e85('0x1c')](function(_0x1e9d32){return _0x1e9d32;});}return null;};}function removeEntity(_0x504ac8,_0xc60841){return function(_0x2568fd){if(_0x2568fd){return _0x2568fd[_0x4e85('0x1d')]()['then'](function(){_0x504ac8[_0x4e85('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x26277e,_0x4249a0){return function(_0x257a22){if(!_0x257a22){_0x26277e['sendStatus'](0x194);}return _0x257a22;};}function handleError(_0x38b5b6,_0x1c3e2b){_0x1c3e2b=_0x1c3e2b||0x1f4;return function(_0x45caaf){logger[_0x4e85('0x1e')](_0x45caaf[_0x4e85('0x1f')]);if(_0x45caaf[_0x4e85('0x20')]){delete _0x45caaf['name'];}_0x38b5b6[_0x4e85('0x14')](_0x1c3e2b)['send'](_0x45caaf);};}exports['index']=function(_0x227a8e,_0x20fbdb){var _0x5de6f9={},_0x3c01c4={},_0x505414={'count':0x0,'rows':[]};var _0x11860d=db['FaxApplication'][_0x4e85('0x21')];_0x3c01c4[_0x4e85('0x22')]=_['keys'](_0x11860d);_0x3c01c4[_0x4e85('0x23')]=_[_0x4e85('0x24')](_0x227a8e['query']);_0x3c01c4[_0x4e85('0x25')]=_['intersection'](_0x3c01c4[_0x4e85('0x22')],_0x3c01c4[_0x4e85('0x23')]);_0x5de6f9[_0x4e85('0x26')]=_[_0x4e85('0x27')](_0x3c01c4['model'],qs['fields'](_0x227a8e['query'][_0x4e85('0x28')]));_0x5de6f9['attributes']=_0x5de6f9[_0x4e85('0x26')][_0x4e85('0x29')]?_0x5de6f9[_0x4e85('0x26')]:_0x3c01c4['model'];if(!_0x227a8e[_0x4e85('0x23')][_0x4e85('0x2a')](_0x4e85('0x2b'))){_0x5de6f9[_0x4e85('0x17')]=qs[_0x4e85('0x17')](_0x227a8e[_0x4e85('0x23')]['limit']);_0x5de6f9[_0x4e85('0x16')]=qs['offset'](_0x227a8e[_0x4e85('0x23')]['offset']);}_0x5de6f9[_0x4e85('0x2c')]=qs['sort'](_0x227a8e[_0x4e85('0x23')][_0x4e85('0x2d')]);_0x5de6f9['where']=qs[_0x4e85('0x25')](_['pick'](_0x227a8e[_0x4e85('0x23')],_0x3c01c4[_0x4e85('0x25')]));if(_0x227a8e['query'][_0x4e85('0x2e')]){_0x5de6f9[_0x4e85('0x2f')]=_[_0x4e85('0x30')](_0x5de6f9[_0x4e85('0x2f')],{'$or':_['map'](_0x11860d,function(_0x8a451b){if(_0x8a451b[_0x4e85('0x31')]['key']!==_0x4e85('0x32')){var _0x3f90ee={};_0x3f90ee[_0x8a451b[_0x4e85('0x33')]]={'$like':'%'+_0x227a8e[_0x4e85('0x23')][_0x4e85('0x2e')]+'%'};return _0x3f90ee;}})});}_0x5de6f9=_['merge']({},_0x5de6f9,_0x227a8e['options']);var _0x2aeb71={'where':_0x5de6f9[_0x4e85('0x2f')]};return db[_0x4e85('0x34')][_0x4e85('0x35')](_0x2aeb71)[_0x4e85('0x1c')](function(_0x18c6e5){_0x505414[_0x4e85('0x35')]=_0x18c6e5;if(_0x227a8e[_0x4e85('0x23')][_0x4e85('0x36')]){_0x5de6f9[_0x4e85('0x37')]=[{'all':!![]}];}return db[_0x4e85('0x34')][_0x4e85('0x38')](_0x5de6f9);})[_0x4e85('0x1c')](function(_0x3ffad5){_0x505414[_0x4e85('0x39')]=_0x3ffad5;return _0x505414;})['then'](respondWithFilteredResult(_0x20fbdb,_0x5de6f9))[_0x4e85('0x3a')](handleError(_0x20fbdb,null));};exports[_0x4e85('0x3b')]=function(_0x536843,_0x40bcb6){var _0x5e6b51={'raw':!![],'where':{'id':_0x536843[_0x4e85('0x3c')]['id']}},_0x85d9a5={};_0x85d9a5['model']=_['keys'](db['FaxApplication']['rawAttributes']);_0x85d9a5[_0x4e85('0x23')]=_['keys'](_0x536843[_0x4e85('0x23')]);_0x85d9a5['filters']=_[_0x4e85('0x27')](_0x85d9a5['model'],_0x85d9a5['query']);_0x5e6b51['attributes']=_['intersection'](_0x85d9a5['model'],qs['fields'](_0x536843[_0x4e85('0x23')][_0x4e85('0x28')]));_0x5e6b51[_0x4e85('0x26')]=_0x5e6b51[_0x4e85('0x26')][_0x4e85('0x29')]?_0x5e6b51[_0x4e85('0x26')]:_0x85d9a5[_0x4e85('0x22')];if(_0x536843[_0x4e85('0x23')][_0x4e85('0x36')]){_0x5e6b51[_0x4e85('0x37')]=[{'all':!![]}];}_0x5e6b51=_[_0x4e85('0x30')]({},_0x5e6b51,_0x536843[_0x4e85('0x3d')]);return db[_0x4e85('0x34')]['find'](_0x5e6b51)[_0x4e85('0x1c')](handleEntityNotFound(_0x40bcb6,null))[_0x4e85('0x1c')](respondWithResult(_0x40bcb6,null))[_0x4e85('0x3a')](handleError(_0x40bcb6,null));};exports[_0x4e85('0x3e')]=function(_0x12f65d,_0x410680){return db[_0x4e85('0x34')][_0x4e85('0x3e')](_0x12f65d[_0x4e85('0x3f')],{})[_0x4e85('0x1c')](respondWithResult(_0x410680,0xc9))[_0x4e85('0x3a')](handleError(_0x410680,null));};exports['update']=function(_0x5cf88b,_0x1054a6){if(_0x5cf88b[_0x4e85('0x3f')]['id']){delete _0x5cf88b[_0x4e85('0x3f')]['id'];}return db['FaxApplication'][_0x4e85('0x40')]({'where':{'id':_0x5cf88b['params']['id']}})[_0x4e85('0x1c')](handleEntityNotFound(_0x1054a6,null))[_0x4e85('0x1c')](saveUpdates(_0x5cf88b[_0x4e85('0x3f')],null))[_0x4e85('0x1c')](respondWithResult(_0x1054a6,null))[_0x4e85('0x3a')](handleError(_0x1054a6,null));};exports[_0x4e85('0x1d')]=function(_0x29e30a,_0x5905d2){return db[_0x4e85('0x34')][_0x4e85('0x40')]({'where':{'id':_0x29e30a[_0x4e85('0x3c')]['id']}})[_0x4e85('0x1c')](handleEntityNotFound(_0x5905d2,null))[_0x4e85('0x1c')](removeEntity(_0x5905d2,null))[_0x4e85('0x3a')](handleError(_0x5905d2,null));};
\ No newline at end of file
index ceb0811..a0be952 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfe52=['bluebird','request-promise','./faxApplication.attributes','exports','define','FaxApplication','fax_applications','util','api','moment'];(function(_0x4fa738,_0x2a491c){var _0x55bf55=function(_0x185d53){while(--_0x185d53){_0x4fa738['push'](_0x4fa738['shift']());}};_0x55bf55(++_0x2a491c);}(_0xfe52,0x147));var _0x2fe5=function(_0x291d65,_0x25bc0b){_0x291d65=_0x291d65-0x0;var _0x59e8f0=_0xfe52[_0x291d65];return _0x59e8f0;};'use strict';var _=require('lodash');var util=require(_0x2fe5('0x0'));var logger=require('../../config/logger')(_0x2fe5('0x1'));var moment=require(_0x2fe5('0x2'));var BPromise=require(_0x2fe5('0x3'));var rp=require(_0x2fe5('0x4'));var attributes=require(_0x2fe5('0x5'));module[_0x2fe5('0x6')]=function(_0x272327,_0x9c342){return _0x272327[_0x2fe5('0x7')](_0x2fe5('0x8'),attributes,{'tableName':_0x2fe5('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x61db=['lodash','../../config/logger','api','moment','bluebird','request-promise','./faxApplication.attributes','exports','FaxApplication','fax_applications'];(function(_0x31cb5f,_0x2df766){var _0x586042=function(_0x53c807){while(--_0x53c807){_0x31cb5f['push'](_0x31cb5f['shift']());}};_0x586042(++_0x2df766);}(_0x61db,0x168));var _0xb61d=function(_0xa57abd,_0xd091a1){_0xa57abd=_0xa57abd-0x0;var _0x160009=_0x61db[_0xa57abd];return _0x160009;};'use strict';var _=require(_0xb61d('0x0'));var util=require('util');var logger=require(_0xb61d('0x1'))(_0xb61d('0x2'));var moment=require(_0xb61d('0x3'));var BPromise=require(_0xb61d('0x4'));var rp=require(_0xb61d('0x5'));var attributes=require(_0xb61d('0x6'));module[_0xb61d('0x7')]=function(_0x1e0b69,_0x59175c){return _0x1e0b69['define'](_0xb61d('0x8'),attributes,{'tableName':_0xb61d('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8eba5f1..e1c6182 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ba3=['catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/environment','jayson/promise','client','request','then','info','FaxApplication,\x20%s,\x20%s','request\x20sent','debug','FaxApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','FaxApplication','update','body','options','where','attributes','limit','UpdateFaxApplication'];(function(_0x5ce8b9,_0x5cded8){var _0xe34be0=function(_0xe3d4e5){while(--_0xe3d4e5){_0x5ce8b9['push'](_0x5ce8b9['shift']());}};_0xe34be0(++_0x5cded8);}(_0x5ba3,0x1b3));var _0x35ba=function(_0x3d89e2,_0x3c9799){_0x3d89e2=_0x3d89e2-0x0;var _0x8f7f80=_0x5ba3[_0x3d89e2];return _0x8f7f80;};'use strict';var _=require(_0x35ba('0x0'));var util=require(_0x35ba('0x1'));var moment=require(_0x35ba('0x2'));var BPromise=require(_0x35ba('0x3'));var rs=require(_0x35ba('0x4'));var fs=require('fs');var Redis=require(_0x35ba('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x35ba('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x35ba('0x7'));var jayson=require(_0x35ba('0x8'));var client=jayson[_0x35ba('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5697fc,_0x227c69,_0x258ec0){return new BPromise(function(_0xd55a07,_0x3af6c0){return client[_0x35ba('0xa')](_0x5697fc,_0x258ec0)[_0x35ba('0xb')](function(_0x3d3848){logger[_0x35ba('0xc')](_0x35ba('0xd'),_0x227c69,_0x35ba('0xe'));logger[_0x35ba('0xf')](_0x35ba('0x10'),_0x227c69,_0x35ba('0xe'),JSON[_0x35ba('0x11')](_0x3d3848));if(_0x3d3848[_0x35ba('0x12')]){if(_0x3d3848['error'][_0x35ba('0x13')]===0x1f4){logger['error'](_0x35ba('0xd'),_0x227c69,_0x3d3848[_0x35ba('0x12')]['message']);return _0x3af6c0(_0x3d3848[_0x35ba('0x12')][_0x35ba('0x14')]);}logger[_0x35ba('0x12')](_0x35ba('0xd'),_0x227c69,_0x3d3848[_0x35ba('0x12')][_0x35ba('0x14')]);return _0xd55a07(_0x3d3848[_0x35ba('0x12')]['message']);}else{logger[_0x35ba('0xc')]('FaxApplication,\x20%s,\x20%s',_0x227c69,_0x35ba('0xe'));_0xd55a07(_0x3d3848[_0x35ba('0x15')][_0x35ba('0x14')]);}})['catch'](function(_0x16b785){logger[_0x35ba('0x12')](_0x35ba('0xd'),_0x227c69,_0x16b785);_0x3af6c0(_0x16b785);});});}exports['UpdateFaxApplication']=function(_0x3a17d6){var _0x40b762=this;return new Promise(function(_0x1edabe,_0x46fc8f){return db[_0x35ba('0x16')][_0x35ba('0x17')](_0x3a17d6[_0x35ba('0x18')],{'raw':_0x3a17d6[_0x35ba('0x19')]?_0x3a17d6['options']['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x3a17d6[_0x35ba('0x19')]?_0x3a17d6[_0x35ba('0x19')][_0x35ba('0x1a')]||null:null,'attributes':_0x3a17d6[_0x35ba('0x19')]?_0x3a17d6[_0x35ba('0x19')][_0x35ba('0x1b')]||null:null,'limit':_0x3a17d6[_0x35ba('0x19')]?_0x3a17d6[_0x35ba('0x19')][_0x35ba('0x1c')]||null:null})[_0x35ba('0xb')](function(_0x2af905){logger[_0x35ba('0xc')](_0x35ba('0x1d'),_0x3a17d6);logger[_0x35ba('0xf')](_0x35ba('0x1d'),_0x3a17d6,JSON['stringify'](_0x2af905));_0x1edabe(_0x2af905);})[_0x35ba('0x1e')](function(_0x29bd7e){logger[_0x35ba('0x12')](_0x35ba('0x1d'),_0x29bd7e['message'],_0x3a17d6);_0x46fc8f(_0x40b762[_0x35ba('0x12')](0x1f4,_0x29bd7e[_0x35ba('0x14')]));});});};
\ No newline at end of file
+var _0xad0c=['message','request\x20sent','catch','UpdateFaxApplication','FaxApplication','update','body','options','raw','where','attributes','limit','stringify','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','jayson/promise','http','request','then','info','FaxApplication,\x20%s,\x20%s','debug','FaxApplication,\x20%s,\x20%s,\x20%s','error','code'];(function(_0x5b735d,_0x385e42){var _0x1b2fcb=function(_0x7a93c6){while(--_0x7a93c6){_0x5b735d['push'](_0x5b735d['shift']());}};_0x1b2fcb(++_0x385e42);}(_0xad0c,0x1ed));var _0xcad0=function(_0x2cd8aa,_0x509895){_0x2cd8aa=_0x2cd8aa-0x0;var _0x21e392=_0xad0c[_0x2cd8aa];return _0x21e392;};'use strict';var _=require(_0xcad0('0x0'));var util=require(_0xcad0('0x1'));var moment=require(_0xcad0('0x2'));var BPromise=require(_0xcad0('0x3'));var rs=require(_0xcad0('0x4'));var fs=require('fs');var Redis=require(_0xcad0('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xcad0('0x6'));var logger=require(_0xcad0('0x7'))(_0xcad0('0x8'));var config=require('../../config/environment');var jayson=require(_0xcad0('0x9'));var client=jayson['client'][_0xcad0('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2b9459,_0x4bc30e,_0x59b5de){return new BPromise(function(_0x40c87a,_0x19fd7b){return client[_0xcad0('0xb')](_0x2b9459,_0x59b5de)[_0xcad0('0xc')](function(_0x1e35c9){logger[_0xcad0('0xd')](_0xcad0('0xe'),_0x4bc30e,'request\x20sent');logger[_0xcad0('0xf')](_0xcad0('0x10'),_0x4bc30e,'request\x20sent',JSON['stringify'](_0x1e35c9));if(_0x1e35c9['error']){if(_0x1e35c9[_0xcad0('0x11')][_0xcad0('0x12')]===0x1f4){logger['error'](_0xcad0('0xe'),_0x4bc30e,_0x1e35c9[_0xcad0('0x11')][_0xcad0('0x13')]);return _0x19fd7b(_0x1e35c9[_0xcad0('0x11')]['message']);}logger['error']('FaxApplication,\x20%s,\x20%s',_0x4bc30e,_0x1e35c9[_0xcad0('0x11')]['message']);return _0x40c87a(_0x1e35c9['error'][_0xcad0('0x13')]);}else{logger['info'](_0xcad0('0xe'),_0x4bc30e,_0xcad0('0x14'));_0x40c87a(_0x1e35c9['result'][_0xcad0('0x13')]);}})[_0xcad0('0x15')](function(_0x315643){logger[_0xcad0('0x11')](_0xcad0('0xe'),_0x4bc30e,_0x315643);_0x19fd7b(_0x315643);});});}exports[_0xcad0('0x16')]=function(_0x20dbea){var _0x2475c8=this;return new Promise(function(_0x13bc8e,_0x4b0599){return db[_0xcad0('0x17')][_0xcad0('0x18')](_0x20dbea[_0xcad0('0x19')],{'raw':_0x20dbea[_0xcad0('0x1a')]?_0x20dbea[_0xcad0('0x1a')][_0xcad0('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x20dbea[_0xcad0('0x1a')]?_0x20dbea[_0xcad0('0x1a')][_0xcad0('0x1c')]||null:null,'attributes':_0x20dbea[_0xcad0('0x1a')]?_0x20dbea[_0xcad0('0x1a')][_0xcad0('0x1d')]||null:null,'limit':_0x20dbea[_0xcad0('0x1a')]?_0x20dbea[_0xcad0('0x1a')][_0xcad0('0x1e')]||null:null})[_0xcad0('0xc')](function(_0x4622e0){logger[_0xcad0('0xd')](_0xcad0('0x16'),_0x20dbea);logger[_0xcad0('0xf')](_0xcad0('0x16'),_0x20dbea,JSON[_0xcad0('0x1f')](_0x4622e0));_0x13bc8e(_0x4622e0);})[_0xcad0('0x15')](function(_0x16d033){logger[_0xcad0('0x11')]('UpdateFaxApplication',_0x16d033[_0xcad0('0x13')],_0x20dbea);_0x4b0599(_0x2475c8[_0xcad0('0x11')](0x1f4,_0x16d033['message']));});});};
\ No newline at end of file
index c3677ae..bc90101 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe5b5=['create','put','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxApplication.controller','get','isAuthenticated','index','/:id','show','post'];(function(_0x56d9c0,_0x23cac4){var _0x183ba1=function(_0x21fa23){while(--_0x21fa23){_0x56d9c0['push'](_0x56d9c0['shift']());}};_0x183ba1(++_0x23cac4);}(_0xe5b5,0x12b));var _0x5e5b=function(_0x9d14e3,_0x5a6072){_0x9d14e3=_0x9d14e3-0x0;var _0x19bf32=_0xe5b5[_0x9d14e3];return _0x19bf32;};'use strict';var multer=require(_0x5e5b('0x0'));var util=require(_0x5e5b('0x1'));var path=require(_0x5e5b('0x2'));var timeout=require(_0x5e5b('0x3'));var express=require(_0x5e5b('0x4'));var router=express[_0x5e5b('0x5')]();var auth=require(_0x5e5b('0x6'));var interaction=require(_0x5e5b('0x7'));var config=require(_0x5e5b('0x8'));var controller=require(_0x5e5b('0x9'));router[_0x5e5b('0xa')]('/',auth[_0x5e5b('0xb')](),controller[_0x5e5b('0xc')]);router[_0x5e5b('0xa')](_0x5e5b('0xd'),auth[_0x5e5b('0xb')](),controller[_0x5e5b('0xe')]);router[_0x5e5b('0xf')]('/',auth[_0x5e5b('0xb')](),controller[_0x5e5b('0x10')]);router[_0x5e5b('0x11')](_0x5e5b('0xd'),auth[_0x5e5b('0xb')](),controller['update']);router[_0x5e5b('0x12')]('/:id',auth[_0x5e5b('0xb')](),controller[_0x5e5b('0x13')]);module[_0x5e5b('0x14')]=router;
\ No newline at end of file
+var _0x02ce=['isAuthenticated','index','/:id','post','create','put','update','delete','destroy','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxApplication.controller','get'];(function(_0x2d8fc2,_0x1c461d){var _0x3a9e53=function(_0x18941c){while(--_0x18941c){_0x2d8fc2['push'](_0x2d8fc2['shift']());}};_0x3a9e53(++_0x1c461d);}(_0x02ce,0x1ac));var _0xe02c=function(_0x2fbdf6,_0xde252e){_0x2fbdf6=_0x2fbdf6-0x0;var _0x44c878=_0x02ce[_0x2fbdf6];return _0x44c878;};'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
index ffb3d44..8e58974 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x373d=['DATE','STRING','ENUM','out','exports'];(function(_0x5534fe,_0x43c22e){var _0x3d1dc2=function(_0x9df12){while(--_0x9df12){_0x5534fe['push'](_0x5534fe['shift']());}};_0x3d1dc2(++_0x43c22e);}(_0x373d,0xb8));var _0xd373=function(_0xbcea1,_0x469f9f){_0xbcea1=_0xbcea1-0x0;var _0x17fb47=_0x373d[_0xbcea1];return _0x17fb47;};'use strict';var Sequelize=require('sequelize');module[_0xd373('0x0')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xd373('0x1')]},'disposition':{'type':Sequelize['STRING']},'note':{'type':Sequelize[_0xd373('0x2')]},'read1stAt':{'type':Sequelize['DATE']},'fax':{'type':Sequelize[_0xd373('0x2')]},'firstMsgDirection':{'type':Sequelize[_0xd373('0x3')]('in',_0xd373('0x4')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize['DATE']},'lastMsgDirection':{'type':Sequelize[_0xd373('0x3')]('in','out'),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
+var _0x2391=['ENUM','BOOLEAN','DATE','STRING','out'];(function(_0x5e3ac2,_0x225614){var _0x29a007=function(_0x14545e){while(--_0x14545e){_0x5e3ac2['push'](_0x5e3ac2['shift']());}};_0x29a007(++_0x225614);}(_0x2391,0xc9));var _0x1239=function(_0x618414,_0x1a7a60){_0x618414=_0x618414-0x0;var _0x21c19a=_0x2391[_0x618414];return _0x21c19a;};'use strict';var Sequelize=require('sequelize');module['exports']={'closed':{'type':Sequelize[_0x1239('0x0')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0x1239('0x1')]},'disposition':{'type':Sequelize[_0x1239('0x2')]},'note':{'type':Sequelize['STRING']},'read1stAt':{'type':Sequelize[_0x1239('0x1')]},'fax':{'type':Sequelize[_0x1239('0x2')]},'firstMsgDirection':{'type':Sequelize['ENUM']('in',_0x1239('0x3')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x1239('0x1')]},'lastMsgDirection':{'type':Sequelize[_0x1239('0x4')]('in','out'),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
index 8452bda..99b73d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x21f8=['to-csv','ejs','squel','crypto','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','redis','defaults','socket.io-emitter','register','sendStatus','status','json','count','offset','limit','set','reject','then','end','error','stack','name','send','index','FaxInteraction','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','tag','Tag','distinct','read','push','FaxMessage','Messages','direction','createdAt','include','User','Users','CmContact','Contact','Owner','fullname','internal','FaxAccount','Account','Tags','ThroughTags','findAll','rows','catch','show','params','options','find','create','body','update','destroy','describe','addMessage','ids','omit','getMessages','findOne','nolimit','order','$gte','split','format','YYYY-MM-DD\x20HH:mm:ss','setTags','spread','color','faxInteractionTags:save','removeTags','unix','root','server','attachments','files','tmp','join','interaction-%s.zip','Attachment','basename','createReadStream','pipe','createWriteStream','download','err','unlinkSync','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox'];(function(_0x43a0f5,_0x5bdf7d){var _0x476e27=function(_0x32d52f){while(--_0x32d52f){_0x43a0f5['push'](_0x43a0f5['shift']());}};_0x476e27(++_0x5bdf7d);}(_0x21f8,0x170));var _0x821f=function(_0x489b87,_0xd51c93){_0x489b87=_0x489b87-0x0;var _0x1823b6=_0x21f8[_0x489b87];return _0x1823b6;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x821f('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x821f('0x1'));var jsonpatch=require(_0x821f('0x2'));var rp=require(_0x821f('0x3'));var moment=require(_0x821f('0x4'));var BPromise=require(_0x821f('0x5'));var Mustache=require(_0x821f('0x6'));var util=require(_0x821f('0x7'));var path=require(_0x821f('0x8'));var sox=require(_0x821f('0x9'));var csv=require(_0x821f('0xa'));var ejs=require(_0x821f('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x821f('0xc'));var crypto=require(_0x821f('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x821f('0xa'));var querystring=require('querystring');var Papa=require(_0x821f('0xe'));var authService=require(_0x821f('0xf'));var hardwareService=require(_0x821f('0x10'));var Redis=require(_0x821f('0x11'));var qs=require('../../components/parsers/qs');var logger=require(_0x821f('0x12'))(_0x821f('0x13'));var utils=require(_0x821f('0x14'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x821f('0x15')]=_[_0x821f('0x16')](config[_0x821f('0x15')],{'host':'localhost','port':0x18eb});var socket=require(_0x821f('0x17'))(new Redis(config[_0x821f('0x15')]));require('./faxInteraction.socket')[_0x821f('0x18')](socket);function respondWithStatusCode(_0x366481,_0x571664){_0x571664=_0x571664||0xcc;return function(_0x336f37){if(_0x336f37){return _0x366481[_0x821f('0x19')](_0x571664);}return _0x366481[_0x821f('0x1a')](_0x571664)['end']();};}function respondWithResult(_0x7677b8,_0x914d84){_0x914d84=_0x914d84||0xc8;return function(_0x3a69d7){if(_0x3a69d7){return _0x7677b8['status'](_0x914d84)[_0x821f('0x1b')](_0x3a69d7);}};}function respondWithFilteredResult(_0x539f31,_0x3200df){return function(_0x46ccfc){if(_0x46ccfc){var _0x191c43=_0x46ccfc[_0x821f('0x1c')],_0x4d0402=_0x3200df[_0x821f('0x1d')],_0x464d75=_0x3200df[_0x821f('0x1d')]+_0x3200df[_0x821f('0x1e')],_0xb65631;if(_0x464d75>=_0x191c43){_0x464d75=_0x191c43;_0xb65631=0xc8;}else{_0xb65631=0xce;}_0x539f31['status'](_0xb65631);return _0x539f31[_0x821f('0x1f')]('Content-Range',_0x4d0402+'-'+_0x464d75+'/'+_0x191c43)[_0x821f('0x1b')](_0x46ccfc);}return null;};}function patchUpdates(_0x4e8f85){return function(_0x1f8488){try{jsonpatch['apply'](_0x1f8488,_0x4e8f85,!![]);}catch(_0x193b51){return BPromise[_0x821f('0x20')](_0x193b51);}return _0x1f8488['save']();};}function saveUpdates(_0x1e5ff3,_0x14a6c9){return function(_0x4882e5){if(_0x4882e5){return _0x4882e5['update'](_0x1e5ff3)[_0x821f('0x21')](function(_0x1b3ff4){return _0x1b3ff4;});}return null;};}function removeEntity(_0x18f62b,_0x3b9e5f){return function(_0x3afd21){if(_0x3afd21){return _0x3afd21['destroy']()[_0x821f('0x21')](function(){_0x18f62b[_0x821f('0x1a')](0xcc)[_0x821f('0x22')]();});}};}function handleEntityNotFound(_0x3287e1,_0x29fe80){return function(_0x53667a){if(!_0x53667a){_0x3287e1[_0x821f('0x19')](0x194);}return _0x53667a;};}function handleError(_0x5a3524,_0x5d0146){_0x5d0146=_0x5d0146||0x1f4;return function(_0x23fedb){logger[_0x821f('0x23')](_0x23fedb[_0x821f('0x24')]);if(_0x23fedb['name']){delete _0x23fedb[_0x821f('0x25')];}_0x5a3524[_0x821f('0x1a')](_0x5d0146)[_0x821f('0x26')](_0x23fedb);};}exports[_0x821f('0x27')]=function(_0x2a4433,_0x403d42){var _0x240447={},_0x31cfdd={},_0x4fa68c={'count':0x0,'rows':[]};var _0x1c3454=db[_0x821f('0x28')][_0x821f('0x29')];_0x31cfdd[_0x821f('0x2a')]=_[_0x821f('0x2b')](_0x1c3454);_0x31cfdd[_0x821f('0x2c')]=_[_0x821f('0x2b')](_0x2a4433['query']);_0x31cfdd[_0x821f('0x2d')]=_[_0x821f('0x2e')](_0x31cfdd[_0x821f('0x2a')],_0x31cfdd[_0x821f('0x2c')]);_0x240447['attributes']=_[_0x821f('0x2e')](_0x31cfdd[_0x821f('0x2a')],qs[_0x821f('0x2f')](_0x2a4433['query'][_0x821f('0x2f')]));_0x240447[_0x821f('0x30')]=_0x240447['attributes'][_0x821f('0x31')]?_0x240447[_0x821f('0x30')]:_0x31cfdd[_0x821f('0x2a')];if(!_0x2a4433[_0x821f('0x2c')][_0x821f('0x32')]('nolimit')){_0x240447[_0x821f('0x1e')]=qs['limit'](_0x2a4433[_0x821f('0x2c')][_0x821f('0x1e')]);_0x240447[_0x821f('0x1d')]=qs['offset'](_0x2a4433[_0x821f('0x2c')][_0x821f('0x1d')]);}_0x240447['order']=qs[_0x821f('0x33')](_0x2a4433[_0x821f('0x2c')][_0x821f('0x33')]);_0x240447[_0x821f('0x34')]=qs['filters'](_[_0x821f('0x35')](_0x2a4433[_0x821f('0x2c')],_0x31cfdd[_0x821f('0x2d')]));if(_0x2a4433[_0x821f('0x2c')][_0x821f('0x36')]){_0x240447['where']=_[_0x821f('0x37')](_0x240447[_0x821f('0x34')],{'$or':_[_0x821f('0x38')](_0x1c3454,function(_0x4550a7){if(_0x4550a7[_0x821f('0x39')][_0x821f('0x3a')]!==_0x821f('0x3b')){var _0x3e9302={};_0x3e9302[_0x4550a7[_0x821f('0x3c')]]={'$like':'%'+_0x2a4433['query'][_0x821f('0x36')]+'%'};return _0x3e9302;}})});}_0x240447=_['merge']({},_0x240447,_0x2a4433['options']);var _0xe1b686={'where':_0x240447['where']};_0xe1b686['include']=[];if(_0x2a4433[_0x821f('0x2c')][_0x821f('0x3d')]){_0xe1b686['include']['push']({'model':db[_0x821f('0x3e')],'as':'Tags','attributes':['id'],'where':{'id':_0x2a4433[_0x821f('0x2c')][_0x821f('0x3d')]},'required':!![]});_0xe1b686[_0x821f('0x3f')]=!![];}if(_0x2a4433['query'][_0x821f('0x40')]){_0xe1b686['include'][_0x821f('0x41')]({'model':db[_0x821f('0x42')],'as':_0x821f('0x43'),'attributes':['id',_0x821f('0x44'),_0x821f('0x45'),_0x821f('0x40')],'where':{'direction':'in','read':_0x2a4433[_0x821f('0x2c')]['read']||![]},'required':!![]});_0xe1b686[_0x821f('0x3f')]=!![];}return db['FaxInteraction'][_0x821f('0x1c')](_0xe1b686)[_0x821f('0x21')](function(_0x1ad0e1){_0x4fa68c[_0x821f('0x1c')]=_0x1ad0e1;if(_0x2a4433[_0x821f('0x2c')]['includeAll']){_0x240447[_0x821f('0x46')]=[{'model':db[_0x821f('0x47')],'as':_0x821f('0x48'),'required':![],'attributes':['id','name','fullname']},{'model':db[_0x821f('0x49')],'as':_0x821f('0x4a'),'required':![]},{'model':db[_0x821f('0x47')],'as':_0x821f('0x4b'),'attributes':[_0x821f('0x25'),_0x821f('0x4c'),_0x821f('0x4d')],'required':![]},{'model':db[_0x821f('0x4e')],'as':_0x821f('0x4f'),'attributes':[_0x821f('0x25'),_0x821f('0x3a')],'required':![]},{'model':db['FaxMessage'],'as':_0x821f('0x43'),'attributes':['id',_0x821f('0x44'),'createdAt',_0x821f('0x40')],'where':{'direction':'in','read':_0x2a4433[_0x821f('0x2c')][_0x821f('0x40')]||![]},'required':_0x2a4433[_0x821f('0x2c')][_0x821f('0x40')]||![]},{'model':db['Tag'],'as':_0x821f('0x50'),'attributes':['id','name','color'],'required':_0x2a4433['query']['tag']?!![]:![]},{'model':db['Tag'],'as':_0x821f('0x51'),'attributes':['id',_0x821f('0x25'),'color'],'through':_0x2a4433[_0x821f('0x2c')]['tag']?{'attributes':[],'where':{'TagId':_0x2a4433[_0x821f('0x2c')][_0x821f('0x3d')]||undefined}}:{},'required':_0x2a4433['query'][_0x821f('0x3d')]?!![]:![]}];}return db[_0x821f('0x28')][_0x821f('0x52')](_0x240447);})[_0x821f('0x21')](function(_0x2e7900){_0x4fa68c[_0x821f('0x53')]=_0x2e7900;return _0x4fa68c;})['then'](respondWithFilteredResult(_0x403d42,_0x240447))[_0x821f('0x54')](handleError(_0x403d42,null));};exports[_0x821f('0x55')]=function(_0x36ef26,_0x3e315c){var _0x234f0a={'raw':![],'where':{'id':_0x36ef26[_0x821f('0x56')]['id']}},_0x4c9d3={};_0x4c9d3[_0x821f('0x2a')]=_[_0x821f('0x2b')](db[_0x821f('0x28')][_0x821f('0x29')]);_0x4c9d3[_0x821f('0x2c')]=_[_0x821f('0x2b')](_0x36ef26[_0x821f('0x2c')]);_0x4c9d3[_0x821f('0x2d')]=_[_0x821f('0x2e')](_0x4c9d3[_0x821f('0x2a')],_0x4c9d3[_0x821f('0x2c')]);_0x234f0a[_0x821f('0x30')]=_[_0x821f('0x2e')](_0x4c9d3[_0x821f('0x2a')],qs[_0x821f('0x2f')](_0x36ef26[_0x821f('0x2c')][_0x821f('0x2f')]));_0x234f0a[_0x821f('0x30')]=_0x234f0a[_0x821f('0x30')][_0x821f('0x31')]?_0x234f0a[_0x821f('0x30')]:_0x4c9d3['model'];if(_0x36ef26[_0x821f('0x2c')]['includeAll']){_0x234f0a['include']=[{'all':!![]}];}_0x234f0a=_[_0x821f('0x37')]({},_0x234f0a,_0x36ef26[_0x821f('0x57')]);return db[_0x821f('0x28')][_0x821f('0x58')](_0x234f0a)[_0x821f('0x21')](handleEntityNotFound(_0x3e315c,null))[_0x821f('0x21')](respondWithResult(_0x3e315c,null))['catch'](handleError(_0x3e315c,null));};exports[_0x821f('0x59')]=function(_0x131125,_0x20ebe0){return db['FaxInteraction'][_0x821f('0x59')](_0x131125[_0x821f('0x5a')],{})[_0x821f('0x21')](respondWithResult(_0x20ebe0,0xc9))[_0x821f('0x54')](handleError(_0x20ebe0,null));};exports[_0x821f('0x5b')]=function(_0x5cdbe4,_0x360b5b){if(_0x5cdbe4[_0x821f('0x5a')]['id']){delete _0x5cdbe4[_0x821f('0x5a')]['id'];}return db[_0x821f('0x28')]['find']({'where':{'id':_0x5cdbe4[_0x821f('0x56')]['id']}})['then'](handleEntityNotFound(_0x360b5b,null))[_0x821f('0x21')](saveUpdates(_0x5cdbe4[_0x821f('0x5a')],null))[_0x821f('0x21')](respondWithResult(_0x360b5b,null))[_0x821f('0x54')](handleError(_0x360b5b,null));};exports[_0x821f('0x5c')]=function(_0x10f913,_0x2b35ef){return db[_0x821f('0x28')][_0x821f('0x58')]({'where':{'id':_0x10f913[_0x821f('0x56')]['id']}})[_0x821f('0x21')](handleEntityNotFound(_0x2b35ef,null))['then'](removeEntity(_0x2b35ef,null))[_0x821f('0x54')](handleError(_0x2b35ef,null));};exports[_0x821f('0x5d')]=function(_0x2f1db7,_0x895475){return db['FaxInteraction'][_0x821f('0x5d')]()[_0x821f('0x21')](respondWithResult(_0x895475,null))[_0x821f('0x54')](handleError(_0x895475,null));};exports['addMessage']=function(_0x1d36e1,_0xa8750c,_0x3eeb6f){return db[_0x821f('0x42')][_0x821f('0x58')]({'where':{'id':_0x1d36e1[_0x821f('0x56')]['id']}})[_0x821f('0x21')](handleEntityNotFound(_0xa8750c,null))['then'](function(_0x331b54){if(_0x331b54){return _0x331b54[_0x821f('0x5e')](_0x1d36e1[_0x821f('0x5a')][_0x821f('0x5f')],_[_0x821f('0x60')](_0x1d36e1[_0x821f('0x5a')],['ids','id'])||{});}})[_0x821f('0x21')](respondWithResult(_0xa8750c,null))[_0x821f('0x54')](handleError(_0xa8750c,null));};exports[_0x821f('0x61')]=function(_0xb58bc0,_0x51236f,_0x4aaf5f){var _0x30e1a1={'raw':![],'where':{}};var _0x3bf3a0={};var _0x33800f={'count':0x0,'rows':[]};return db[_0x821f('0x28')][_0x821f('0x62')]({'where':{'id':_0xb58bc0[_0x821f('0x56')]['id']}})[_0x821f('0x21')](handleEntityNotFound(_0x51236f,null))[_0x821f('0x21')](function(_0xe54038){if(_0xe54038){_0x3bf3a0[_0x821f('0x2a')]=_[_0x821f('0x2b')](db[_0x821f('0x42')][_0x821f('0x29')]);_0x3bf3a0[_0x821f('0x2c')]=_['keys'](_0xb58bc0[_0x821f('0x2c')]);_0x3bf3a0[_0x821f('0x2d')]=_[_0x821f('0x2e')](_0x3bf3a0['model'],_0x3bf3a0['query']);_0x30e1a1[_0x821f('0x30')]=_[_0x821f('0x2e')](_0x3bf3a0[_0x821f('0x2a')],qs['fields'](_0xb58bc0[_0x821f('0x2c')][_0x821f('0x2f')]));_0x30e1a1['attributes']=_0x30e1a1[_0x821f('0x30')][_0x821f('0x31')]?_0x30e1a1[_0x821f('0x30')]:_0x3bf3a0[_0x821f('0x2a')];if(!_0xb58bc0['query'][_0x821f('0x32')](_0x821f('0x63'))){_0x30e1a1[_0x821f('0x1e')]=qs[_0x821f('0x1e')](_0xb58bc0['query'][_0x821f('0x1e')]);_0x30e1a1[_0x821f('0x1d')]=qs[_0x821f('0x1d')](_0xb58bc0[_0x821f('0x2c')][_0x821f('0x1d')]);}_0x30e1a1[_0x821f('0x64')]=qs[_0x821f('0x33')](_0xb58bc0[_0x821f('0x2c')]['sort']);_0x30e1a1['where']=qs[_0x821f('0x2d')](_[_0x821f('0x35')](_0xb58bc0['query'],_0x3bf3a0[_0x821f('0x2d')]));_0x30e1a1[_0x821f('0x34')]['FaxInteractionId']=_0xe54038['id'];if(_0xb58bc0[_0x821f('0x2c')][_0x821f('0x36')]){_0x30e1a1[_0x821f('0x34')]=_[_0x821f('0x37')](_0x30e1a1[_0x821f('0x34')],{'$or':_[_0x821f('0x38')](_0x30e1a1['attributes'],function(_0xc98eef){var _0x5ee2bd={};_0x5ee2bd[_0xc98eef]={'$like':'%'+_0xb58bc0[_0x821f('0x2c')][_0x821f('0x36')]+'%'};return _0x5ee2bd;})});}if(_0xb58bc0['query'][_0x821f('0x65')]){var _0x42c185=_0xb58bc0[_0x821f('0x2c')][_0x821f('0x65')][_0x821f('0x66')](',');var _0x7ed901={};_0x7ed901[_0x42c185[0x0]]={'$gte':moment(_0x42c185[0x1])[_0x821f('0x67')](_0x821f('0x68'))};_0x30e1a1[_0x821f('0x34')]=_[_0x821f('0x37')](_0x30e1a1[_0x821f('0x34')],_0x7ed901);}_0x30e1a1=_[_0x821f('0x37')]({},_0x30e1a1,_0xb58bc0[_0x821f('0x57')]);return db[_0x821f('0x42')][_0x821f('0x1c')]({'where':_0x30e1a1['where']})[_0x821f('0x21')](function(_0x3a87b1){_0x33800f[_0x821f('0x1c')]=_0x3a87b1;if(_0xb58bc0[_0x821f('0x2c')]['includeAll']){_0x30e1a1[_0x821f('0x46')]=[{'all':!![]}];}return db['FaxMessage'][_0x821f('0x52')](_0x30e1a1);})[_0x821f('0x21')](function(_0x1bd3a0){_0x33800f[_0x821f('0x53')]=_0x1bd3a0;return _0x33800f;});}})[_0x821f('0x21')](respondWithFilteredResult(_0x51236f,_0x30e1a1))['catch'](handleError(_0x51236f,null));};exports['addTags']=function(_0x569e27,_0x38f3e0,_0xecb1cd){return db[_0x821f('0x28')][_0x821f('0x58')]({'where':{'id':_0x569e27[_0x821f('0x56')]['id']}})[_0x821f('0x21')](handleEntityNotFound(_0x38f3e0,null))[_0x821f('0x21')](function(_0x144c2f){if(_0x144c2f){return _0x144c2f[_0x821f('0x69')](_0x569e27[_0x821f('0x5a')][_0x821f('0x5f')],_[_0x821f('0x60')](_0x569e27[_0x821f('0x5a')],[_0x821f('0x5f'),'id'])||{})[_0x821f('0x6a')](function(){return db[_0x821f('0x3e')][_0x821f('0x52')]({'attributes':['id',_0x821f('0x25'),_0x821f('0x6b')],'where':{'id':_0x569e27[_0x821f('0x5a')][_0x821f('0x5f')]}});})[_0x821f('0x21')](function(_0x35f8a0){socket['emit'](_0x821f('0x6c'),{'id':Number(_0x569e27['params']['id']),'tags':_0x35f8a0||[]});return{'id':Number(_0x569e27[_0x821f('0x56')]['id']),'tags':_0x35f8a0||[]};});}})[_0x821f('0x21')](respondWithResult(_0x38f3e0,null))[_0x821f('0x54')](handleError(_0x38f3e0,null));};exports[_0x821f('0x6d')]=function(_0x3a6630,_0x2f451c,_0x81a232){var _0x29ab3f;return db[_0x821f('0x28')][_0x821f('0x58')]({'where':{'id':_0x3a6630[_0x821f('0x56')]['id']}})['then'](handleEntityNotFound(_0x2f451c,null))[_0x821f('0x21')](function(_0xfbd636){if(_0xfbd636){return _0xfbd636[_0x821f('0x6d')](_0x3a6630[_0x821f('0x2c')][_0x821f('0x5f')]);}})['then'](respondWithStatusCode(_0x2f451c,null))[_0x821f('0x54')](handleError(_0x2f451c,null));};exports['download']=function(_0x287b0e,_0x12dc5f){var _0x5a2e58=moment()[_0x821f('0x6e')]()['toString']();var _0x5b1fcd=path['join'](config[_0x821f('0x6f')],_0x821f('0x70'),'files',_0x821f('0x71'));var _0x47df50=path['join'](config[_0x821f('0x6f')],'server',_0x821f('0x72'),_0x821f('0x73'));var _0x1915f2=path[_0x821f('0x74')](_0x47df50,_0x5a2e58);var _0x154f9d=util[_0x821f('0x67')](_0x821f('0x75'),_0x5a2e58);var _0x4be361=path[_0x821f('0x74')](_0x47df50,_0x154f9d);var _0x249711=![];return db[_0x821f('0x28')][_0x821f('0x58')]({'where':{'id':_0x287b0e[_0x821f('0x56')]['id']}})[_0x821f('0x21')](handleEntityNotFound(_0x12dc5f,null))[_0x821f('0x21')](function(_0x196f9a){if(_0x196f9a){return _0x196f9a[_0x821f('0x61')]({'attributes':['id',_0x821f('0x5a'),'createdAt'],'include':[{'model':db[_0x821f('0x76')],'as':_0x821f('0x76')}]});}return[];})[_0x821f('0x21')](function(_0x7fe342){_0x249711=_0x7fe342[_0x821f('0x31')];if(_0x7fe342[_0x821f('0x31')]){fs['mkdirSync'](_0x1915f2);for(var _0x578bfd=0x0;_0x578bfd<_0x7fe342['length'];_0x578bfd++){var _0x54cb10=_0x7fe342[_0x578bfd];var _0x47e1f2=_0x54cb10[_0x821f('0x76')];if(_0x47e1f2){var _0x16a705=path[_0x821f('0x74')](_0x5b1fcd,_0x47e1f2[_0x821f('0x77')]);if(fs['existsSync'](_0x16a705)){fs[_0x821f('0x78')](_0x16a705)[_0x821f('0x79')](fs[_0x821f('0x7a')](path[_0x821f('0x74')](_0x1915f2,_0x47e1f2[_0x821f('0x77')])));}}}}})[_0x821f('0x21')](function(){if(_0x249711){return new BPromise(function(_0x5b597e,_0x39a0f4){zipdir(_0x1915f2,{'saveTo':_0x4be361},function(_0x51f01a,_0x1083ae){if(_0x51f01a)return _0x39a0f4(_0x51f01a);return _0x5b597e(_0x1083ae);});});}})[_0x821f('0x21')](function(){if(_0x249711){return new BPromise(function(_0xfca674,_0x367421){rimraf(_0x1915f2,function(_0x211e51){if(_0x211e51)_0x367421(_0x211e51);return _0xfca674();});});}})[_0x821f('0x21')](function(){if(_0x249711){return _0x12dc5f[_0x821f('0x7b')](_0x4be361,_0x154f9d,function(_0x3c8ea9){if(_0x3c8ea9){console['log'](_0x821f('0x7c'),_0x3c8ea9);}else{fs[_0x821f('0x7d')](_0x4be361);}});}else{return _0x12dc5f[_0x821f('0x19')](0xc8);}})[_0x821f('0x54')](handleError(_0x12dc5f,null));};
\ No newline at end of file
+var _0xcf52=['VIRTUAL','field','options','tag','include','push','Tag','Tags','distinct','read','FaxMessage','Messages','direction','createdAt','includeAll','User','CmContact','Contact','Owner','fullname','FaxAccount','Account','color','findAll','rows','catch','params','find','create','body','describe','addMessage','ids','omit','getMessages','findOne','FaxInteractionId','map','$gte','format','addTags','emit','faxInteractionTags:save','removeTags','download','unix','toString','join','root','attachments','files','tmp','Attachment','mkdirSync','basename','pipe','createWriteStream','log','err','unlinkSync','html-pdf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','redis','defaults','localhost','./faxInteraction.socket','register','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','end','stack','name','index','FaxInteraction','rawAttributes','model','query','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filters','filter','merge','type','key'];(function(_0x3d1187,_0x2a8e79){var _0x3ceb4d=function(_0x54aa9b){while(--_0x54aa9b){_0x3d1187['push'](_0x3d1187['shift']());}};_0x3ceb4d(++_0x2a8e79);}(_0xcf52,0xb8));var _0x2cf5=function(_0x4f95f9,_0x3f12f4){_0x4f95f9=_0x4f95f9-0x0;var _0x3cfb01=_0xcf52[_0x4f95f9];return _0x3cfb01;};'use strict';var pdf=require(_0x2cf5('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x2cf5('0x1'));var jsonpatch=require(_0x2cf5('0x2'));var rp=require(_0x2cf5('0x3'));var moment=require(_0x2cf5('0x4'));var BPromise=require(_0x2cf5('0x5'));var Mustache=require(_0x2cf5('0x6'));var util=require(_0x2cf5('0x7'));var path=require(_0x2cf5('0x8'));var sox=require(_0x2cf5('0x9'));var csv=require(_0x2cf5('0xa'));var ejs=require(_0x2cf5('0xb'));var fs=require('fs');var _=require(_0x2cf5('0xc'));var squel=require('squel');var crypto=require(_0x2cf5('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x2cf5('0xe'));var toCsv=require(_0x2cf5('0xa'));var querystring=require(_0x2cf5('0xf'));var Papa=require(_0x2cf5('0x10'));var authService=require(_0x2cf5('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x2cf5('0x12'));var qs=require(_0x2cf5('0x13'));var logger=require(_0x2cf5('0x14'))(_0x2cf5('0x15'));var utils=require(_0x2cf5('0x16'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x2cf5('0x17')]=_[_0x2cf5('0x18')](config[_0x2cf5('0x17')],{'host':_0x2cf5('0x19'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x2cf5('0x1a'))[_0x2cf5('0x1b')](socket);function respondWithStatusCode(_0x26b6aa,_0x5d62b7){_0x5d62b7=_0x5d62b7||0xcc;return function(_0x296964){if(_0x296964){return _0x26b6aa[_0x2cf5('0x1c')](_0x5d62b7);}return _0x26b6aa[_0x2cf5('0x1d')](_0x5d62b7)['end']();};}function respondWithResult(_0x5cc933,_0x4514c1){_0x4514c1=_0x4514c1||0xc8;return function(_0x49b857){if(_0x49b857){return _0x5cc933[_0x2cf5('0x1d')](_0x4514c1)[_0x2cf5('0x1e')](_0x49b857);}};}function respondWithFilteredResult(_0x3de1af,_0x463c06){return function(_0x2da0df){if(_0x2da0df){var _0xc44246=_0x2da0df[_0x2cf5('0x1f')],_0x5b853b=_0x463c06['offset'],_0x52c35a=_0x463c06[_0x2cf5('0x20')]+_0x463c06[_0x2cf5('0x21')],_0x418fd6;if(_0x52c35a>=_0xc44246){_0x52c35a=_0xc44246;_0x418fd6=0xc8;}else{_0x418fd6=0xce;}_0x3de1af[_0x2cf5('0x1d')](_0x418fd6);return _0x3de1af[_0x2cf5('0x22')](_0x2cf5('0x23'),_0x5b853b+'-'+_0x52c35a+'/'+_0xc44246)[_0x2cf5('0x1e')](_0x2da0df);}return null;};}function patchUpdates(_0xd661c0){return function(_0x22985c){try{jsonpatch[_0x2cf5('0x24')](_0x22985c,_0xd661c0,!![]);}catch(_0x303669){return BPromise[_0x2cf5('0x25')](_0x303669);}return _0x22985c['save']();};}function saveUpdates(_0x5e177d,_0x33fa4f){return function(_0x509bcd){if(_0x509bcd){return _0x509bcd[_0x2cf5('0x26')](_0x5e177d)[_0x2cf5('0x27')](function(_0x406d09){return _0x406d09;});}return null;};}function removeEntity(_0x18f0d6,_0x4b1379){return function(_0x5049d4){if(_0x5049d4){return _0x5049d4[_0x2cf5('0x28')]()['then'](function(){_0x18f0d6[_0x2cf5('0x1d')](0xcc)[_0x2cf5('0x29')]();});}};}function handleEntityNotFound(_0x449d48,_0xe283f2){return function(_0x528398){if(!_0x528398){_0x449d48[_0x2cf5('0x1c')](0x194);}return _0x528398;};}function handleError(_0x148376,_0xfbfbd5){_0xfbfbd5=_0xfbfbd5||0x1f4;return function(_0x25f74d){logger['error'](_0x25f74d[_0x2cf5('0x2a')]);if(_0x25f74d[_0x2cf5('0x2b')]){delete _0x25f74d[_0x2cf5('0x2b')];}_0x148376['status'](_0xfbfbd5)['send'](_0x25f74d);};}exports[_0x2cf5('0x2c')]=function(_0x459290,_0x3d774b){var _0x50ed6b={},_0x623d3b={},_0x382624={'count':0x0,'rows':[]};var _0x18a609=db[_0x2cf5('0x2d')][_0x2cf5('0x2e')];_0x623d3b[_0x2cf5('0x2f')]=_['keys'](_0x18a609);_0x623d3b[_0x2cf5('0x30')]=_[_0x2cf5('0x31')](_0x459290[_0x2cf5('0x30')]);_0x623d3b['filters']=_[_0x2cf5('0x32')](_0x623d3b['model'],_0x623d3b[_0x2cf5('0x30')]);_0x50ed6b[_0x2cf5('0x33')]=_[_0x2cf5('0x32')](_0x623d3b[_0x2cf5('0x2f')],qs[_0x2cf5('0x34')](_0x459290['query'][_0x2cf5('0x34')]));_0x50ed6b['attributes']=_0x50ed6b[_0x2cf5('0x33')][_0x2cf5('0x35')]?_0x50ed6b[_0x2cf5('0x33')]:_0x623d3b[_0x2cf5('0x2f')];if(!_0x459290[_0x2cf5('0x30')][_0x2cf5('0x36')](_0x2cf5('0x37'))){_0x50ed6b[_0x2cf5('0x21')]=qs[_0x2cf5('0x21')](_0x459290[_0x2cf5('0x30')][_0x2cf5('0x21')]);_0x50ed6b[_0x2cf5('0x20')]=qs[_0x2cf5('0x20')](_0x459290[_0x2cf5('0x30')]['offset']);}_0x50ed6b['order']=qs[_0x2cf5('0x38')](_0x459290[_0x2cf5('0x30')][_0x2cf5('0x38')]);_0x50ed6b[_0x2cf5('0x39')]=qs['filters'](_[_0x2cf5('0x3a')](_0x459290['query'],_0x623d3b[_0x2cf5('0x3b')]));if(_0x459290[_0x2cf5('0x30')][_0x2cf5('0x3c')]){_0x50ed6b[_0x2cf5('0x39')]=_[_0x2cf5('0x3d')](_0x50ed6b['where'],{'$or':_['map'](_0x18a609,function(_0x5e3ef6){if(_0x5e3ef6[_0x2cf5('0x3e')][_0x2cf5('0x3f')]!==_0x2cf5('0x40')){var _0x5471da={};_0x5471da[_0x5e3ef6[_0x2cf5('0x41')]]={'$like':'%'+_0x459290[_0x2cf5('0x30')]['filter']+'%'};return _0x5471da;}})});}_0x50ed6b=_[_0x2cf5('0x3d')]({},_0x50ed6b,_0x459290[_0x2cf5('0x42')]);var _0x45f7e4={'where':_0x50ed6b[_0x2cf5('0x39')]};_0x45f7e4['include']=[];if(_0x459290[_0x2cf5('0x30')][_0x2cf5('0x43')]){_0x45f7e4[_0x2cf5('0x44')][_0x2cf5('0x45')]({'model':db[_0x2cf5('0x46')],'as':_0x2cf5('0x47'),'attributes':['id'],'where':{'id':_0x459290[_0x2cf5('0x30')][_0x2cf5('0x43')]},'required':!![]});_0x45f7e4[_0x2cf5('0x48')]=!![];}if(_0x459290[_0x2cf5('0x30')][_0x2cf5('0x49')]){_0x45f7e4[_0x2cf5('0x44')][_0x2cf5('0x45')]({'model':db[_0x2cf5('0x4a')],'as':_0x2cf5('0x4b'),'attributes':['id',_0x2cf5('0x4c'),_0x2cf5('0x4d'),_0x2cf5('0x49')],'where':{'direction':'in','read':_0x459290[_0x2cf5('0x30')][_0x2cf5('0x49')]||![]},'required':!![]});_0x45f7e4[_0x2cf5('0x48')]=!![];}return db[_0x2cf5('0x2d')][_0x2cf5('0x1f')](_0x45f7e4)[_0x2cf5('0x27')](function(_0x38eaac){_0x382624[_0x2cf5('0x1f')]=_0x38eaac;if(_0x459290['query'][_0x2cf5('0x4e')]){_0x50ed6b[_0x2cf5('0x44')]=[{'model':db[_0x2cf5('0x4f')],'as':'Users','required':![],'attributes':['id',_0x2cf5('0x2b'),'fullname']},{'model':db[_0x2cf5('0x50')],'as':_0x2cf5('0x51'),'required':![]},{'model':db['User'],'as':_0x2cf5('0x52'),'attributes':[_0x2cf5('0x2b'),_0x2cf5('0x53'),'internal'],'required':![]},{'model':db[_0x2cf5('0x54')],'as':_0x2cf5('0x55'),'attributes':[_0x2cf5('0x2b'),_0x2cf5('0x3f')],'required':![]},{'model':db[_0x2cf5('0x4a')],'as':_0x2cf5('0x4b'),'attributes':['id',_0x2cf5('0x4c'),_0x2cf5('0x4d'),_0x2cf5('0x49')],'where':{'direction':'in','read':_0x459290[_0x2cf5('0x30')][_0x2cf5('0x49')]||![]},'required':_0x459290[_0x2cf5('0x30')][_0x2cf5('0x49')]||![]},{'model':db[_0x2cf5('0x46')],'as':_0x2cf5('0x47'),'attributes':['id',_0x2cf5('0x2b'),_0x2cf5('0x56')],'required':_0x459290[_0x2cf5('0x30')]['tag']?!![]:![]},{'model':db[_0x2cf5('0x46')],'as':'ThroughTags','attributes':['id',_0x2cf5('0x2b'),_0x2cf5('0x56')],'through':_0x459290['query'][_0x2cf5('0x43')]?{'attributes':[],'where':{'TagId':_0x459290[_0x2cf5('0x30')][_0x2cf5('0x43')]||undefined}}:{},'required':_0x459290[_0x2cf5('0x30')][_0x2cf5('0x43')]?!![]:![]}];}return db[_0x2cf5('0x2d')][_0x2cf5('0x57')](_0x50ed6b);})['then'](function(_0x4e8df0){_0x382624[_0x2cf5('0x58')]=_0x4e8df0;return _0x382624;})['then'](respondWithFilteredResult(_0x3d774b,_0x50ed6b))[_0x2cf5('0x59')](handleError(_0x3d774b,null));};exports['show']=function(_0x52a213,_0x36858f){var _0x2074b0={'raw':![],'where':{'id':_0x52a213[_0x2cf5('0x5a')]['id']}},_0xbed6a3={};_0xbed6a3[_0x2cf5('0x2f')]=_[_0x2cf5('0x31')](db['FaxInteraction'][_0x2cf5('0x2e')]);_0xbed6a3[_0x2cf5('0x30')]=_[_0x2cf5('0x31')](_0x52a213[_0x2cf5('0x30')]);_0xbed6a3[_0x2cf5('0x3b')]=_['intersection'](_0xbed6a3['model'],_0xbed6a3[_0x2cf5('0x30')]);_0x2074b0['attributes']=_['intersection'](_0xbed6a3[_0x2cf5('0x2f')],qs[_0x2cf5('0x34')](_0x52a213[_0x2cf5('0x30')][_0x2cf5('0x34')]));_0x2074b0[_0x2cf5('0x33')]=_0x2074b0[_0x2cf5('0x33')][_0x2cf5('0x35')]?_0x2074b0[_0x2cf5('0x33')]:_0xbed6a3[_0x2cf5('0x2f')];if(_0x52a213[_0x2cf5('0x30')]['includeAll']){_0x2074b0['include']=[{'all':!![]}];}_0x2074b0=_['merge']({},_0x2074b0,_0x52a213[_0x2cf5('0x42')]);return db[_0x2cf5('0x2d')][_0x2cf5('0x5b')](_0x2074b0)[_0x2cf5('0x27')](handleEntityNotFound(_0x36858f,null))[_0x2cf5('0x27')](respondWithResult(_0x36858f,null))[_0x2cf5('0x59')](handleError(_0x36858f,null));};exports[_0x2cf5('0x5c')]=function(_0x2cc861,_0x5cd431){return db[_0x2cf5('0x2d')][_0x2cf5('0x5c')](_0x2cc861['body'],{})['then'](respondWithResult(_0x5cd431,0xc9))[_0x2cf5('0x59')](handleError(_0x5cd431,null));};exports[_0x2cf5('0x26')]=function(_0xd44a22,_0x502e3c){if(_0xd44a22['body']['id']){delete _0xd44a22[_0x2cf5('0x5d')]['id'];}return db[_0x2cf5('0x2d')][_0x2cf5('0x5b')]({'where':{'id':_0xd44a22[_0x2cf5('0x5a')]['id']}})['then'](handleEntityNotFound(_0x502e3c,null))['then'](saveUpdates(_0xd44a22[_0x2cf5('0x5d')],null))[_0x2cf5('0x27')](respondWithResult(_0x502e3c,null))[_0x2cf5('0x59')](handleError(_0x502e3c,null));};exports['destroy']=function(_0x2a8186,_0x396a77){return db['FaxInteraction'][_0x2cf5('0x5b')]({'where':{'id':_0x2a8186[_0x2cf5('0x5a')]['id']}})[_0x2cf5('0x27')](handleEntityNotFound(_0x396a77,null))[_0x2cf5('0x27')](removeEntity(_0x396a77,null))[_0x2cf5('0x59')](handleError(_0x396a77,null));};exports[_0x2cf5('0x5e')]=function(_0x4b6e36,_0x5c060e){return db['FaxInteraction'][_0x2cf5('0x5e')]()['then'](respondWithResult(_0x5c060e,null))['catch'](handleError(_0x5c060e,null));};exports[_0x2cf5('0x5f')]=function(_0x468e68,_0x217768,_0x1fe150){return db[_0x2cf5('0x4a')][_0x2cf5('0x5b')]({'where':{'id':_0x468e68[_0x2cf5('0x5a')]['id']}})['then'](handleEntityNotFound(_0x217768,null))['then'](function(_0x10527b){if(_0x10527b){return _0x10527b[_0x2cf5('0x5f')](_0x468e68[_0x2cf5('0x5d')][_0x2cf5('0x60')],_[_0x2cf5('0x61')](_0x468e68[_0x2cf5('0x5d')],[_0x2cf5('0x60'),'id'])||{});}})['then'](respondWithResult(_0x217768,null))['catch'](handleError(_0x217768,null));};exports[_0x2cf5('0x62')]=function(_0x48657a,_0x170e91,_0x3b5d4d){var _0x1f914c={'raw':![],'where':{}};var _0x40f550={};var _0x526abc={'count':0x0,'rows':[]};return db['FaxInteraction'][_0x2cf5('0x63')]({'where':{'id':_0x48657a[_0x2cf5('0x5a')]['id']}})[_0x2cf5('0x27')](handleEntityNotFound(_0x170e91,null))['then'](function(_0x37a2c7){if(_0x37a2c7){_0x40f550[_0x2cf5('0x2f')]=_[_0x2cf5('0x31')](db['FaxMessage'][_0x2cf5('0x2e')]);_0x40f550[_0x2cf5('0x30')]=_[_0x2cf5('0x31')](_0x48657a[_0x2cf5('0x30')]);_0x40f550[_0x2cf5('0x3b')]=_[_0x2cf5('0x32')](_0x40f550[_0x2cf5('0x2f')],_0x40f550[_0x2cf5('0x30')]);_0x1f914c[_0x2cf5('0x33')]=_['intersection'](_0x40f550[_0x2cf5('0x2f')],qs[_0x2cf5('0x34')](_0x48657a[_0x2cf5('0x30')][_0x2cf5('0x34')]));_0x1f914c[_0x2cf5('0x33')]=_0x1f914c[_0x2cf5('0x33')][_0x2cf5('0x35')]?_0x1f914c[_0x2cf5('0x33')]:_0x40f550[_0x2cf5('0x2f')];if(!_0x48657a[_0x2cf5('0x30')][_0x2cf5('0x36')](_0x2cf5('0x37'))){_0x1f914c['limit']=qs[_0x2cf5('0x21')](_0x48657a[_0x2cf5('0x30')][_0x2cf5('0x21')]);_0x1f914c[_0x2cf5('0x20')]=qs[_0x2cf5('0x20')](_0x48657a[_0x2cf5('0x30')][_0x2cf5('0x20')]);}_0x1f914c['order']=qs[_0x2cf5('0x38')](_0x48657a[_0x2cf5('0x30')][_0x2cf5('0x38')]);_0x1f914c[_0x2cf5('0x39')]=qs[_0x2cf5('0x3b')](_[_0x2cf5('0x3a')](_0x48657a[_0x2cf5('0x30')],_0x40f550['filters']));_0x1f914c[_0x2cf5('0x39')][_0x2cf5('0x64')]=_0x37a2c7['id'];if(_0x48657a['query'][_0x2cf5('0x3c')]){_0x1f914c['where']=_[_0x2cf5('0x3d')](_0x1f914c[_0x2cf5('0x39')],{'$or':_[_0x2cf5('0x65')](_0x1f914c['attributes'],function(_0x322275){var _0x7dacc3={};_0x7dacc3[_0x322275]={'$like':'%'+_0x48657a[_0x2cf5('0x30')][_0x2cf5('0x3c')]+'%'};return _0x7dacc3;})});}if(_0x48657a[_0x2cf5('0x30')][_0x2cf5('0x66')]){var _0x2a8a6b=_0x48657a[_0x2cf5('0x30')][_0x2cf5('0x66')]['split'](',');var _0x25c444={};_0x25c444[_0x2a8a6b[0x0]]={'$gte':moment(_0x2a8a6b[0x1])[_0x2cf5('0x67')]('YYYY-MM-DD\x20HH:mm:ss')};_0x1f914c[_0x2cf5('0x39')]=_[_0x2cf5('0x3d')](_0x1f914c[_0x2cf5('0x39')],_0x25c444);}_0x1f914c=_['merge']({},_0x1f914c,_0x48657a[_0x2cf5('0x42')]);return db['FaxMessage'][_0x2cf5('0x1f')]({'where':_0x1f914c[_0x2cf5('0x39')]})[_0x2cf5('0x27')](function(_0x403589){_0x526abc['count']=_0x403589;if(_0x48657a['query'][_0x2cf5('0x4e')]){_0x1f914c['include']=[{'all':!![]}];}return db[_0x2cf5('0x4a')][_0x2cf5('0x57')](_0x1f914c);})[_0x2cf5('0x27')](function(_0x1598c4){_0x526abc[_0x2cf5('0x58')]=_0x1598c4;return _0x526abc;});}})[_0x2cf5('0x27')](respondWithFilteredResult(_0x170e91,_0x1f914c))[_0x2cf5('0x59')](handleError(_0x170e91,null));};exports[_0x2cf5('0x68')]=function(_0x251859,_0xc0c7ea,_0x4432df){return db['FaxInteraction']['find']({'where':{'id':_0x251859['params']['id']}})[_0x2cf5('0x27')](handleEntityNotFound(_0xc0c7ea,null))[_0x2cf5('0x27')](function(_0xafa1e){if(_0xafa1e){return _0xafa1e['setTags'](_0x251859[_0x2cf5('0x5d')][_0x2cf5('0x60')],_[_0x2cf5('0x61')](_0x251859[_0x2cf5('0x5d')],[_0x2cf5('0x60'),'id'])||{})['spread'](function(){return db[_0x2cf5('0x46')][_0x2cf5('0x57')]({'attributes':['id',_0x2cf5('0x2b'),_0x2cf5('0x56')],'where':{'id':_0x251859[_0x2cf5('0x5d')][_0x2cf5('0x60')]}});})[_0x2cf5('0x27')](function(_0x39cd1e){socket[_0x2cf5('0x69')](_0x2cf5('0x6a'),{'id':Number(_0x251859['params']['id']),'tags':_0x39cd1e||[]});return{'id':Number(_0x251859[_0x2cf5('0x5a')]['id']),'tags':_0x39cd1e||[]};});}})['then'](respondWithResult(_0xc0c7ea,null))[_0x2cf5('0x59')](handleError(_0xc0c7ea,null));};exports['removeTags']=function(_0x4fa6ee,_0x30de40,_0x596bed){var _0x57796e;return db['FaxInteraction'][_0x2cf5('0x5b')]({'where':{'id':_0x4fa6ee['params']['id']}})[_0x2cf5('0x27')](handleEntityNotFound(_0x30de40,null))['then'](function(_0x5c0326){if(_0x5c0326){return _0x5c0326[_0x2cf5('0x6b')](_0x4fa6ee[_0x2cf5('0x30')][_0x2cf5('0x60')]);}})[_0x2cf5('0x27')](respondWithStatusCode(_0x30de40,null))[_0x2cf5('0x59')](handleError(_0x30de40,null));};exports[_0x2cf5('0x6c')]=function(_0x4adc56,_0x257c46){var _0xa832a8=moment()[_0x2cf5('0x6d')]()[_0x2cf5('0x6e')]();var _0x3819a4=path[_0x2cf5('0x6f')](config[_0x2cf5('0x70')],'server','files',_0x2cf5('0x71'));var _0x1ad754=path[_0x2cf5('0x6f')](config['root'],'server',_0x2cf5('0x72'),_0x2cf5('0x73'));var _0x4f8116=path[_0x2cf5('0x6f')](_0x1ad754,_0xa832a8);var _0x51c0e4=util['format']('interaction-%s.zip',_0xa832a8);var _0x44bc08=path[_0x2cf5('0x6f')](_0x1ad754,_0x51c0e4);var _0x387b99=![];return db[_0x2cf5('0x2d')][_0x2cf5('0x5b')]({'where':{'id':_0x4adc56[_0x2cf5('0x5a')]['id']}})['then'](handleEntityNotFound(_0x257c46,null))[_0x2cf5('0x27')](function(_0x4e238b){if(_0x4e238b){return _0x4e238b[_0x2cf5('0x62')]({'attributes':['id',_0x2cf5('0x5d'),'createdAt'],'include':[{'model':db[_0x2cf5('0x74')],'as':_0x2cf5('0x74')}]});}return[];})[_0x2cf5('0x27')](function(_0x9c5a96){_0x387b99=_0x9c5a96[_0x2cf5('0x35')];if(_0x9c5a96[_0x2cf5('0x35')]){fs[_0x2cf5('0x75')](_0x4f8116);for(var _0x42f20d=0x0;_0x42f20d<_0x9c5a96[_0x2cf5('0x35')];_0x42f20d++){var _0x39c5b4=_0x9c5a96[_0x42f20d];var _0x6872ab=_0x39c5b4[_0x2cf5('0x74')];if(_0x6872ab){var _0x29b871=path[_0x2cf5('0x6f')](_0x3819a4,_0x6872ab[_0x2cf5('0x76')]);if(fs['existsSync'](_0x29b871)){fs['createReadStream'](_0x29b871)[_0x2cf5('0x77')](fs[_0x2cf5('0x78')](path['join'](_0x4f8116,_0x6872ab[_0x2cf5('0x76')])));}}}}})[_0x2cf5('0x27')](function(){if(_0x387b99){return new BPromise(function(_0x5a4e8b,_0x1abaec){zipdir(_0x4f8116,{'saveTo':_0x44bc08},function(_0x31561a,_0x42b021){if(_0x31561a)return _0x1abaec(_0x31561a);return _0x5a4e8b(_0x42b021);});});}})[_0x2cf5('0x27')](function(){if(_0x387b99){return new BPromise(function(_0x358173,_0x4c95d7){rimraf(_0x4f8116,function(_0x31e6b4){if(_0x31e6b4)_0x4c95d7(_0x31e6b4);return _0x358173();});});}})[_0x2cf5('0x27')](function(){if(_0x387b99){return _0x257c46['download'](_0x44bc08,_0x51c0e4,function(_0x1d57d3){if(_0x1d57d3){console[_0x2cf5('0x79')](_0x2cf5('0x7a'),_0x1d57d3);}else{fs[_0x2cf5('0x7b')](_0x44bc08);}});}else{return _0x257c46[_0x2cf5('0x1c')](0xc8);}})[_0x2cf5('0x59')](handleError(_0x257c46,null));};
\ No newline at end of file
index 892dc13..2d1fbfb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7980=['events','../../mysqldb','FaxInteraction','setMaxListeners','save','remove','emit','hook','exports'];(function(_0x5a2585,_0x3a1c3a){var _0x2e2058=function(_0x537972){while(--_0x537972){_0x5a2585['push'](_0x5a2585['shift']());}};_0x2e2058(++_0x3a1c3a);}(_0x7980,0xab));var _0x0798=function(_0x4e36e4,_0x48e590){_0x4e36e4=_0x4e36e4-0x0;var _0x53c46a=_0x7980[_0x4e36e4];return _0x53c46a;};'use strict';var EventEmitter=require(_0x0798('0x0'));var FaxInteraction=require(_0x0798('0x1'))['db'][_0x0798('0x2')];var FaxInteractionEvents=new EventEmitter();FaxInteractionEvents[_0x0798('0x3')](0x0);var events={'afterCreate':_0x0798('0x4'),'afterUpdate':'update','afterDestroy':_0x0798('0x5')};function emitEvent(_0x31597d){return function(_0xecc24f,_0x1637db,_0x1a1fe7){FaxInteractionEvents['emit'](_0x31597d+':'+_0xecc24f['id'],_0xecc24f);FaxInteractionEvents[_0x0798('0x6')](_0x31597d,_0xecc24f);_0x1a1fe7(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxInteraction[_0x0798('0x7')](e,emitEvent(event));}}module[_0x0798('0x8')]=FaxInteractionEvents;
\ No newline at end of file
+var _0xd914=['hasOwnProperty','hook','exports','events','../../mysqldb','setMaxListeners','save','update','remove','emit'];(function(_0x403c20,_0x4a7b99){var _0x2b271a=function(_0x106ecb){while(--_0x106ecb){_0x403c20['push'](_0x403c20['shift']());}};_0x2b271a(++_0x4a7b99);}(_0xd914,0x17f));var _0x4d91=function(_0x36bfe3,_0x358938){_0x36bfe3=_0x36bfe3-0x0;var _0x9b0436=_0xd914[_0x36bfe3];return _0x9b0436;};'use strict';var EventEmitter=require(_0x4d91('0x0'));var FaxInteraction=require(_0x4d91('0x1'))['db']['FaxInteraction'];var FaxInteractionEvents=new EventEmitter();FaxInteractionEvents[_0x4d91('0x2')](0x0);var events={'afterCreate':_0x4d91('0x3'),'afterUpdate':_0x4d91('0x4'),'afterDestroy':_0x4d91('0x5')};function emitEvent(_0xb829cf){return function(_0x2db8c5,_0x4875a2,_0x1b256e){FaxInteractionEvents['emit'](_0xb829cf+':'+_0x2db8c5['id'],_0x2db8c5);FaxInteractionEvents[_0x4d91('0x6')](_0xb829cf,_0x2db8c5);_0x1b256e(null);};}for(var e in events){if(events[_0x4d91('0x7')](e)){var event=events[e];FaxInteraction[_0x4d91('0x8')](e,emitEvent(event));}}module[_0x4d91('0x9')]=FaxInteractionEvents;
\ No newline at end of file
index 48d4003..9676bd9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['YYYY-MM-DD\x20HH:mm:ss','lodash','util','../../config/logger','bluebird','./faxInteraction.attributes','exports','define','fax_interactions','closed'];(function(_0x2c12c9,_0x332c9f){var _0x525823=function(_0x2c2ae4){while(--_0x2c2ae4){_0x2c12c9['push'](_0x2c12c9['shift']());}};_0x525823(++_0x332c9f);}(_0xa9e0,0x123));var _0x0a9e=function(_0x138f59,_0x1b53fb){_0x138f59=_0x138f59-0x0;var _0x3d114d=_0xa9e0[_0x138f59];return _0x3d114d;};'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 attributes=require(_0x0a9e('0x4'));module[_0x0a9e('0x5')]=function(_0x2ab90b,_0x991246){return _0x2ab90b[_0x0a9e('0x6')]('FaxInteraction',attributes,{'tableName':_0x0a9e('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x441e3a,_0x2cc193,_0x5f41ea){if(_0x441e3a['changed'](_0x0a9e('0x8'))){_0x441e3a['closedAt']=moment()['format'](_0x0a9e('0x9'));}_0x5f41ea(null,_0x441e3a);}}});};
\ No newline at end of file
+var _0xa9e0=['YYYY-MM-DD\x20HH:mm:ss','lodash','util','../../config/logger','bluebird','./faxInteraction.attributes','exports','define','fax_interactions','closed'];(function(_0x16562f,_0xbe1690){var _0x325679=function(_0x22c297){while(--_0x22c297){_0x16562f['push'](_0x16562f['shift']());}};_0x325679(++_0xbe1690);}(_0xa9e0,0x123));var _0x0a9e=function(_0x37c22c,_0x28a70d){_0x37c22c=_0x37c22c-0x0;var _0x119d79=_0xa9e0[_0x37c22c];return _0x119d79;};'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 attributes=require(_0x0a9e('0x4'));module[_0x0a9e('0x5')]=function(_0x2ab90b,_0x991246){return _0x2ab90b[_0x0a9e('0x6')]('FaxInteraction',attributes,{'tableName':_0x0a9e('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x441e3a,_0x2cc193,_0x5f41ea){if(_0x441e3a['changed'](_0x0a9e('0x8'))){_0x441e3a['closedAt']=moment()['format'](_0x0a9e('0x9'));}_0x5f41ea(null,_0x441e3a);}}});};
\ No newline at end of file
index 12cf144..cbb53c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf007=['ids','omit','spread','AddTags','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','localhost','socket.io-emitter','./faxInteraction.socket','request','info','request\x20sent','debug','FaxInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','FaxInteraction,\x20%s,\x20%s','message','result','catch','UpdateFaxInteraction','body','options','where','attributes','limit','then','AddTagsToFaxInteraction','FaxInteraction','find','addTags'];(function(_0xb0f7c3,_0x4eae95){var _0x28ea68=function(_0x4395a7){while(--_0x4395a7){_0xb0f7c3['push'](_0xb0f7c3['shift']());}};_0x28ea68(++_0x4eae95);}(_0xf007,0x175));var _0x7f00=function(_0x908eb6,_0x59199b){_0x908eb6=_0x908eb6-0x0;var _0x511a09=_0xf007[_0x908eb6];return _0x511a09;};'use strict';var _=require('lodash');var util=require(_0x7f00('0x0'));var moment=require(_0x7f00('0x1'));var BPromise=require(_0x7f00('0x2'));var rs=require(_0x7f00('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x7f00('0x4'))['db'];var utils=require(_0x7f00('0x5'));var logger=require(_0x7f00('0x6'))(_0x7f00('0x7'));var config=require(_0x7f00('0x8'));var jayson=require(_0x7f00('0x9'));var client=jayson['client'][_0x7f00('0xa')]({'port':0x232a});config['redis']=_['defaults'](config['redis'],{'host':_0x7f00('0xb'),'port':0x18eb});var socket=require(_0x7f00('0xc'))(new Redis(config['redis']));require(_0x7f00('0xd'))['register'](socket);function respondWithRpcPromise(_0x2afad7,_0x4bc9fb,_0x21be69){return new BPromise(function(_0x9fff85,_0x304377){return client[_0x7f00('0xe')](_0x2afad7,_0x21be69)['then'](function(_0x560cd8){logger[_0x7f00('0xf')]('FaxInteraction,\x20%s,\x20%s',_0x4bc9fb,_0x7f00('0x10'));logger[_0x7f00('0x11')](_0x7f00('0x12'),_0x4bc9fb,_0x7f00('0x10'),JSON[_0x7f00('0x13')](_0x560cd8));if(_0x560cd8[_0x7f00('0x14')]){if(_0x560cd8[_0x7f00('0x14')][_0x7f00('0x15')]===0x1f4){logger[_0x7f00('0x14')](_0x7f00('0x16'),_0x4bc9fb,_0x560cd8[_0x7f00('0x14')]['message']);return _0x304377(_0x560cd8['error']['message']);}logger[_0x7f00('0x14')]('FaxInteraction,\x20%s,\x20%s',_0x4bc9fb,_0x560cd8[_0x7f00('0x14')][_0x7f00('0x17')]);return _0x9fff85(_0x560cd8[_0x7f00('0x14')]['message']);}else{logger[_0x7f00('0xf')]('FaxInteraction,\x20%s,\x20%s',_0x4bc9fb,_0x7f00('0x10'));_0x9fff85(_0x560cd8[_0x7f00('0x18')][_0x7f00('0x17')]);}})[_0x7f00('0x19')](function(_0x41ade3){logger[_0x7f00('0x14')]('FaxInteraction,\x20%s,\x20%s',_0x4bc9fb,_0x41ade3);_0x304377(_0x41ade3);});});}exports[_0x7f00('0x1a')]=function(_0x1c2841){var _0x3939ae=this;return new Promise(function(_0x5517b8,_0x224a88){return db['FaxInteraction']['update'](_0x1c2841[_0x7f00('0x1b')],{'raw':_0x1c2841[_0x7f00('0x1c')]?_0x1c2841[_0x7f00('0x1c')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1c2841[_0x7f00('0x1c')]?_0x1c2841[_0x7f00('0x1c')][_0x7f00('0x1d')]||null:null,'attributes':_0x1c2841[_0x7f00('0x1c')]?_0x1c2841[_0x7f00('0x1c')][_0x7f00('0x1e')]||null:null,'limit':_0x1c2841[_0x7f00('0x1c')]?_0x1c2841[_0x7f00('0x1c')][_0x7f00('0x1f')]||null:null})[_0x7f00('0x20')](function(_0x5357d4){logger['info'](_0x7f00('0x1a'),_0x1c2841);logger['debug'](_0x7f00('0x1a'),_0x1c2841,JSON[_0x7f00('0x13')](_0x5357d4));_0x5517b8(_0x5357d4);})[_0x7f00('0x19')](function(_0x1aba09){logger[_0x7f00('0x14')](_0x7f00('0x1a'),_0x1aba09['message'],_0x1c2841);_0x224a88(_0x3939ae['error'](0x1f4,_0x1aba09['message']));});});};exports[_0x7f00('0x21')]=function(_0x57cd61){return new Promise(function(_0x1d43f2,_0x12a02a){return db[_0x7f00('0x22')][_0x7f00('0x23')]({'where':_0x57cd61[_0x7f00('0x1c')]?_0x57cd61[_0x7f00('0x1c')][_0x7f00('0x1d')]||null:null})[_0x7f00('0x20')](function(_0x341312){if(_0x341312){return _0x341312[_0x7f00('0x24')](_0x57cd61[_0x7f00('0x1b')][_0x7f00('0x25')],_[_0x7f00('0x26')](_0x57cd61[_0x7f00('0x1b')],[_0x7f00('0x25'),'id'])||{});}})[_0x7f00('0x27')](function(_0x3f6fd7){logger[_0x7f00('0xf')](_0x7f00('0x28'),_0x57cd61);logger[_0x7f00('0x11')]('AddTags',_0x57cd61,JSON[_0x7f00('0x13')](_0x3f6fd7));_0x1d43f2(_0x3f6fd7);})[_0x7f00('0x19')](function(_0x37e9ce){logger[_0x7f00('0x14')](_0x7f00('0x28'),_0x37e9ce[_0x7f00('0x17')],_0x57cd61);_0x12a02a(_this[_0x7f00('0x14')](0x1f4,_0x37e9ce[_0x7f00('0x17')]));});});};
\ No newline at end of file
+var _0x23cd=['bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','defaults','redis','localhost','./faxInteraction.socket','register','request','info','FaxInteraction,\x20%s,\x20%s','request\x20sent','stringify','code','error','message','result','catch','UpdateFaxInteraction','FaxInteraction','update','body','options','raw','where','attributes','limit','AddTagsToFaxInteraction','find','addTags','ids','AddTags','debug','lodash','moment'];(function(_0x5d2803,_0xf375bd){var _0xdcad2c=function(_0x3c3a98){while(--_0x3c3a98){_0x5d2803['push'](_0x5d2803['shift']());}};_0xdcad2c(++_0xf375bd);}(_0x23cd,0xcb));var _0xd23c=function(_0x24d52f,_0x224d91){_0x24d52f=_0x24d52f-0x0;var _0x15490a=_0x23cd[_0x24d52f];return _0x15490a;};'use strict';var _=require(_0xd23c('0x0'));var util=require('util');var moment=require(_0xd23c('0x1'));var BPromise=require(_0xd23c('0x2'));var rs=require(_0xd23c('0x3'));var fs=require('fs');var Redis=require(_0xd23c('0x4'));var db=require(_0xd23c('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xd23c('0x6'))(_0xd23c('0x7'));var config=require(_0xd23c('0x8'));var jayson=require(_0xd23c('0x9'));var client=jayson['client'][_0xd23c('0xa')]({'port':0x232a});config['redis']=_[_0xd23c('0xb')](config[_0xd23c('0xc')],{'host':_0xd23c('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xd23c('0xc')]));require(_0xd23c('0xe'))[_0xd23c('0xf')](socket);function respondWithRpcPromise(_0x221893,_0x41547c,_0x2ac3f5){return new BPromise(function(_0x5dfb8c,_0x54e87f){return client[_0xd23c('0x10')](_0x221893,_0x2ac3f5)['then'](function(_0xefea1c){logger[_0xd23c('0x11')](_0xd23c('0x12'),_0x41547c,_0xd23c('0x13'));logger['debug']('FaxInteraction,\x20%s,\x20%s,\x20%s',_0x41547c,'request\x20sent',JSON[_0xd23c('0x14')](_0xefea1c));if(_0xefea1c['error']){if(_0xefea1c['error'][_0xd23c('0x15')]===0x1f4){logger[_0xd23c('0x16')](_0xd23c('0x12'),_0x41547c,_0xefea1c['error'][_0xd23c('0x17')]);return _0x54e87f(_0xefea1c[_0xd23c('0x16')][_0xd23c('0x17')]);}logger[_0xd23c('0x16')](_0xd23c('0x12'),_0x41547c,_0xefea1c[_0xd23c('0x16')][_0xd23c('0x17')]);return _0x5dfb8c(_0xefea1c['error'][_0xd23c('0x17')]);}else{logger[_0xd23c('0x11')]('FaxInteraction,\x20%s,\x20%s',_0x41547c,_0xd23c('0x13'));_0x5dfb8c(_0xefea1c[_0xd23c('0x18')]['message']);}})[_0xd23c('0x19')](function(_0x3cacaf){logger[_0xd23c('0x16')]('FaxInteraction,\x20%s,\x20%s',_0x41547c,_0x3cacaf);_0x54e87f(_0x3cacaf);});});}exports[_0xd23c('0x1a')]=function(_0x2b3f0f){var _0x5037a2=this;return new Promise(function(_0x354c26,_0x3d3e73){return db[_0xd23c('0x1b')][_0xd23c('0x1c')](_0x2b3f0f[_0xd23c('0x1d')],{'raw':_0x2b3f0f[_0xd23c('0x1e')]?_0x2b3f0f['options'][_0xd23c('0x1f')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2b3f0f[_0xd23c('0x1e')]?_0x2b3f0f[_0xd23c('0x1e')][_0xd23c('0x20')]||null:null,'attributes':_0x2b3f0f['options']?_0x2b3f0f[_0xd23c('0x1e')][_0xd23c('0x21')]||null:null,'limit':_0x2b3f0f[_0xd23c('0x1e')]?_0x2b3f0f['options'][_0xd23c('0x22')]||null:null})['then'](function(_0x5da11f){logger['info'](_0xd23c('0x1a'),_0x2b3f0f);logger['debug'](_0xd23c('0x1a'),_0x2b3f0f,JSON[_0xd23c('0x14')](_0x5da11f));_0x354c26(_0x5da11f);})['catch'](function(_0x431f27){logger[_0xd23c('0x16')]('UpdateFaxInteraction',_0x431f27[_0xd23c('0x17')],_0x2b3f0f);_0x3d3e73(_0x5037a2['error'](0x1f4,_0x431f27[_0xd23c('0x17')]));});});};exports[_0xd23c('0x23')]=function(_0xb61487){return new Promise(function(_0x1eaa1e,_0x5cba5a){return db[_0xd23c('0x1b')][_0xd23c('0x24')]({'where':_0xb61487[_0xd23c('0x1e')]?_0xb61487[_0xd23c('0x1e')]['where']||null:null})['then'](function(_0x5706a9){if(_0x5706a9){return _0x5706a9[_0xd23c('0x25')](_0xb61487[_0xd23c('0x1d')][_0xd23c('0x26')],_['omit'](_0xb61487[_0xd23c('0x1d')],['ids','id'])||{});}})['spread'](function(_0x281d70){logger[_0xd23c('0x11')](_0xd23c('0x27'),_0xb61487);logger[_0xd23c('0x28')](_0xd23c('0x27'),_0xb61487,JSON[_0xd23c('0x14')](_0x281d70));_0x1eaa1e(_0x281d70);})[_0xd23c('0x19')](function(_0x38920f){logger[_0xd23c('0x16')]('AddTags',_0x38920f[_0xd23c('0x17')],_0xb61487);_0x5cba5a(_this[_0xd23c('0x16')](0x1f4,_0x38920f['message']));});});};
\ No newline at end of file
index 9d82dca..fc8ec17 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4263=['register','length','./faxInteraction.events','save','update','emit'];(function(_0x5d9a7e,_0x52a493){var _0x373749=function(_0x486443){while(--_0x486443){_0x5d9a7e['push'](_0x5d9a7e['shift']());}};_0x373749(++_0x52a493);}(_0x4263,0x86));var _0x3426=function(_0x4a91d0,_0x20c616){_0x4a91d0=_0x4a91d0-0x0;var _0x14da72=_0x4263[_0x4a91d0];return _0x14da72;};'use strict';var FaxInteractionEvents=require(_0x3426('0x0'));var events=[_0x3426('0x1'),'remove',_0x3426('0x2')];function createListener(_0x76f2d1,_0x4d5152){return function(_0x2bebf7){_0x4d5152[_0x3426('0x3')](_0x76f2d1,_0x2bebf7);};}function removeListener(_0x3ce12b,_0x3f9c25){return function(){FaxInteractionEvents['removeListener'](_0x3ce12b,_0x3f9c25);};}exports[_0x3426('0x4')]=function(_0x41378f){for(var _0x547311=0x0,_0x10a27c=events[_0x3426('0x5')];_0x547311<_0x10a27c;_0x547311++){var _0x515899=events[_0x547311];var _0x47284c=createListener('faxInteraction:'+_0x515899,_0x41378f);FaxInteractionEvents['on'](_0x515899,_0x47284c);}};
\ No newline at end of file
+var _0xa140=['update','register','./faxInteraction.events','save','remove'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xa140,0x1f1));var _0x0a14=function(_0x550d12,_0x5384bd){_0x550d12=_0x550d12-0x0;var _0x12103d=_0xa140[_0x550d12];return _0x12103d;};'use strict';var FaxInteractionEvents=require(_0x0a14('0x0'));var events=[_0x0a14('0x1'),_0x0a14('0x2'),_0x0a14('0x3')];function createListener(_0x2de8f8,_0x5942cf){return function(_0x18e557){_0x5942cf['emit'](_0x2de8f8,_0x18e557);};}function removeListener(_0x2a38b8,_0x56b5d3){return function(){FaxInteractionEvents['removeListener'](_0x2a38b8,_0x56b5d3);};}exports[_0x0a14('0x4')]=function(_0x233fb5){for(var _0x1de929=0x0,_0x3694db=events['length'];_0x1de929<_0x3694db;_0x1de929++){var _0x8bf289=events[_0x1de929];var _0x1ed31a=createListener('faxInteraction:'+_0x8bf289,_0x233fb5);FaxInteractionEvents['on'](_0x8bf289,_0x1ed31a);}};
\ No newline at end of file
index 0922379..f6c59b0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xefca=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxInteraction.controller','get','isAuthenticated','/:id','show','/:id/messages','/:id/download','download','post','create','/:id/tags','tracked','fax','faxinteraction:addtags','put','faxinteraction:update','update','delete','faxinteraction:destroy','destroy','removeTags','exports','multer','util','path'];(function(_0x5133f3,_0x45c348){var _0xece283=function(_0x1c6f71){while(--_0x1c6f71){_0x5133f3['push'](_0x5133f3['shift']());}};_0xece283(++_0x45c348);}(_0xefca,0x1af));var _0xaefc=function(_0x3a04ab,_0x31b9fd){_0x3a04ab=_0x3a04ab-0x0;var _0x4bff6d=_0xefca[_0x3a04ab];return _0x4bff6d;};'use strict';var multer=require(_0xaefc('0x0'));var util=require(_0xaefc('0x1'));var path=require(_0xaefc('0x2'));var timeout=require(_0xaefc('0x3'));var express=require(_0xaefc('0x4'));var router=express[_0xaefc('0x5')]();var auth=require(_0xaefc('0x6'));var interaction=require(_0xaefc('0x7'));var config=require(_0xaefc('0x8'));var controller=require(_0xaefc('0x9'));router[_0xaefc('0xa')]('/',auth[_0xaefc('0xb')](),controller['index']);router[_0xaefc('0xa')]('/describe',auth['isAuthenticated'](),controller['describe']);router[_0xaefc('0xa')](_0xaefc('0xc'),auth[_0xaefc('0xb')](),controller[_0xaefc('0xd')]);router[_0xaefc('0xa')](_0xaefc('0xe'),auth[_0xaefc('0xb')](),controller['getMessages']);router[_0xaefc('0xa')](_0xaefc('0xf'),auth[_0xaefc('0xb')](),controller[_0xaefc('0x10')]);router[_0xaefc('0x11')]('/',auth[_0xaefc('0xb')](),controller[_0xaefc('0x12')]);router[_0xaefc('0x11')](_0xaefc('0xe'),auth[_0xaefc('0xb')](),controller['addMessage']);router[_0xaefc('0x11')](_0xaefc('0x13'),auth['isAuthenticated'](),interaction[_0xaefc('0x14')](_0xaefc('0x15'),_0xaefc('0x16')),controller['addTags']);router[_0xaefc('0x17')](_0xaefc('0xc'),auth[_0xaefc('0xb')](),interaction[_0xaefc('0x14')](_0xaefc('0x15'),_0xaefc('0x18')),controller[_0xaefc('0x19')]);router[_0xaefc('0x1a')](_0xaefc('0xc'),auth['isAuthenticated'](),interaction[_0xaefc('0x14')]('fax',_0xaefc('0x1b')),controller[_0xaefc('0x1c')]);router[_0xaefc('0x1a')]('/:id/tags',auth[_0xaefc('0xb')](),controller[_0xaefc('0x1d')]);module[_0xaefc('0x1e')]=router;
\ No newline at end of file
+var _0xcdae=['isAuthenticated','index','/describe','describe','/:id','show','getMessages','download','post','create','/:id/messages','addMessage','/:id/tags','tracked','fax','faxinteraction:addtags','addTags','put','update','delete','faxinteraction:destroy','destroy','multer','path','connect-timeout','../../components/interaction/service','../../config/environment','./faxInteraction.controller','get'];(function(_0x469b4f,_0x2a1415){var _0x58b71d=function(_0x3841af){while(--_0x3841af){_0x469b4f['push'](_0x469b4f['shift']());}};_0x58b71d(++_0x2a1415);}(_0xcdae,0x155));var _0xecda=function(_0x2081fc,_0x3ea22f){_0x2081fc=_0x2081fc-0x0;var _0x276d81=_0xcdae[_0x2081fc];return _0x276d81;};'use strict';var multer=require(_0xecda('0x0'));var util=require('util');var path=require(_0xecda('0x1'));var timeout=require(_0xecda('0x2'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xecda('0x3'));var config=require(_0xecda('0x4'));var controller=require(_0xecda('0x5'));router[_0xecda('0x6')]('/',auth[_0xecda('0x7')](),controller[_0xecda('0x8')]);router[_0xecda('0x6')](_0xecda('0x9'),auth[_0xecda('0x7')](),controller[_0xecda('0xa')]);router[_0xecda('0x6')](_0xecda('0xb'),auth[_0xecda('0x7')](),controller[_0xecda('0xc')]);router[_0xecda('0x6')]('/:id/messages',auth[_0xecda('0x7')](),controller[_0xecda('0xd')]);router[_0xecda('0x6')]('/:id/download',auth[_0xecda('0x7')](),controller[_0xecda('0xe')]);router[_0xecda('0xf')]('/',auth[_0xecda('0x7')](),controller[_0xecda('0x10')]);router['post'](_0xecda('0x11'),auth[_0xecda('0x7')](),controller[_0xecda('0x12')]);router['post'](_0xecda('0x13'),auth[_0xecda('0x7')](),interaction[_0xecda('0x14')](_0xecda('0x15'),_0xecda('0x16')),controller[_0xecda('0x17')]);router[_0xecda('0x18')](_0xecda('0xb'),auth[_0xecda('0x7')](),interaction[_0xecda('0x14')](_0xecda('0x15'),'faxinteraction:update'),controller[_0xecda('0x19')]);router[_0xecda('0x1a')](_0xecda('0xb'),auth[_0xecda('0x7')](),interaction[_0xecda('0x14')]('fax',_0xecda('0x1b')),controller[_0xecda('0x1c')]);router[_0xecda('0x1a')](_0xecda('0x13'),auth['isAuthenticated'](),controller['removeTags']);module['exports']=router;
\ No newline at end of file
index 4370884..31660d6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf6d2=['exports','TEXT','medium','out','DATE'];(function(_0xf39108,_0x1d7e10){var _0x444113=function(_0x2a3b46){while(--_0x2a3b46){_0xf39108['push'](_0xf39108['shift']());}};_0x444113(++_0x1d7e10);}(_0xf6d2,0x177));var _0x2f6d=function(_0x2bb6b9,_0x5703ba){_0x2bb6b9=_0x2bb6b9-0x0;var _0x1d5c5b=_0xf6d2[_0x2bb6b9];return _0x1d5c5b;};'use strict';var Sequelize=require('sequelize');module[_0x2f6d('0x0')]={'body':{'type':Sequelize[_0x2f6d('0x1')](_0x2f6d('0x2')),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0x2f6d('0x3')),'defaultValue':'out','allowNull':![]},'failMessage':{'type':Sequelize[_0x2f6d('0x1')],'defaultValue':null},'readAt':{'type':Sequelize[_0x2f6d('0x4')]}};
\ No newline at end of file
+var _0xe3c2=['medium','ENUM','out','exports'];(function(_0x4bacb6,_0x2b299d){var _0x58c029=function(_0x2faaf5){while(--_0x2faaf5){_0x4bacb6['push'](_0x4bacb6['shift']());}};_0x58c029(++_0x2b299d);}(_0xe3c2,0x10b));var _0x2e3c=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0xe3c2[_0xbca1b1];return _0x4e1686;};'use strict';var Sequelize=require('sequelize');module[_0x2e3c('0x0')]={'body':{'type':Sequelize['TEXT'](_0x2e3c('0x1')),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize[_0x2e3c('0x2')]('in',_0x2e3c('0x3')),'defaultValue':_0x2e3c('0x3'),'allowNull':![]},'failMessage':{'type':Sequelize['TEXT'],'defaultValue':null},'readAt':{'type':Sequelize['DATE']}};
\ No newline at end of file
index 941bb3e..ea6272d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x23d2=['crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','register','client','http','request','info','FaxMessage,\x20%s,\x20%s','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','reject','then','destroy','end','stack','name','send','index','rawAttributes','model','keys','query','filters','attributes','fields','hasOwnProperty','nolimit','order','sort','where','merge','map','type','key','VIRTUAL','field','options','FaxMessage','includeAll','include','findAll','rows','params','intersection','find','update','body','describe','fax-interactions','accept','fax','read','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','Contact','get','FaxInteraction','FaxInteractionId','role','stringify','AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','agent','interaction','[FAXMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','RejectMessage','rejectMessage','rejectmessage','create','CmContact','findOne','ContactId','isNil','AttachmentId','SendFax','FaxAccountId','/var/opt/motion2/server/files/attachments/%s','download','root','server','Attachment','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','sox','ejs','lodash','squel'];(function(_0x2ff422,_0x41ed1a){var _0x3356f7=function(_0x28fca9){while(--_0x28fca9){_0x2ff422['push'](_0x2ff422['shift']());}};_0x3356f7(++_0x41ed1a);}(_0x23d2,0xf3));var _0x223d=function(_0x643f6f,_0x17ec96){_0x643f6f=_0x643f6f-0x0;var _0x45f033=_0x23d2[_0x643f6f];return _0x45f033;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x223d('0x0'));var rimraf=require(_0x223d('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x223d('0x2'));var rp=require(_0x223d('0x3'));var moment=require(_0x223d('0x4'));var BPromise=require(_0x223d('0x5'));var Mustache=require(_0x223d('0x6'));var util=require('util');var path=require('path');var sox=require(_0x223d('0x7'));var csv=require('to-csv');var ejs=require(_0x223d('0x8'));var fs=require('fs');var _=require(_0x223d('0x9'));var squel=require(_0x223d('0xa'));var crypto=require(_0x223d('0xb'));var jsforce=require(_0x223d('0xc'));var deskjs=require(_0x223d('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x223d('0xe'));var authService=require(_0x223d('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0x223d('0x10'));var logger=require(_0x223d('0x11'))(_0x223d('0x12'));var utils=require(_0x223d('0x13'));var config=require(_0x223d('0x14'));var db=require(_0x223d('0x15'))['db'];config[_0x223d('0x16')]=_[_0x223d('0x17')](config[_0x223d('0x16')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x223d('0x16')]));require('./faxMessage.socket')[_0x223d('0x18')](socket);var jayson=require('jayson/promise');var client=jayson[_0x223d('0x19')][_0x223d('0x1a')]({'port':0x232c});var client9002=jayson[_0x223d('0x19')][_0x223d('0x1a')]({'port':0x232a});function respondWithRpcPromise(_0x39edd6,_0x232a65,_0x3a2365,_0x1dcb4a){return new BPromise(function(_0xea0f8c,_0x4dd365){var _0x3ed3b6=_0x1dcb4a||client;return _0x3ed3b6[_0x223d('0x1b')](_0x39edd6,_0x3a2365)['then'](function(_0x15136f){logger[_0x223d('0x1c')](_0x223d('0x1d'),_0x232a65,_0x223d('0x1e'));logger[_0x223d('0x1f')](_0x223d('0x20'),_0x232a65,'request\x20sent',JSON['stringify'](_0x15136f));if(_0x15136f[_0x223d('0x21')]){if(_0x15136f[_0x223d('0x21')][_0x223d('0x22')]===0x1f4){logger[_0x223d('0x21')](_0x223d('0x1d'),_0x232a65,_0x15136f[_0x223d('0x21')][_0x223d('0x23')]);return _0x4dd365(_0x15136f['error'][_0x223d('0x23')]);}logger[_0x223d('0x21')](_0x223d('0x1d'),_0x232a65,_0x15136f['error'][_0x223d('0x23')]);return _0xea0f8c(_0x15136f[_0x223d('0x21')][_0x223d('0x23')]);}else{logger[_0x223d('0x1c')](_0x223d('0x1d'),_0x232a65,_0x223d('0x1e'));_0xea0f8c(_0x15136f[_0x223d('0x24')][_0x223d('0x23')]);}})[_0x223d('0x25')](function(_0x540296){logger['error'](_0x223d('0x1d'),_0x232a65,_0x540296);_0x4dd365(_0x540296);});});}function respondWithStatusCode(_0x22076a,_0x482359){_0x482359=_0x482359||0xcc;return function(_0x8f10d7){if(_0x8f10d7){return _0x22076a[_0x223d('0x26')](_0x482359);}return _0x22076a['status'](_0x482359)['end']();};}function respondWithResult(_0x4fc324,_0x42610d){_0x42610d=_0x42610d||0xc8;return function(_0x191a13){if(_0x191a13){return _0x4fc324[_0x223d('0x27')](_0x42610d)[_0x223d('0x28')](_0x191a13);}};}function respondWithFilteredResult(_0x27ce4a,_0x1bf620){return function(_0x55be1b){if(_0x55be1b){var _0x1538c3=_0x55be1b[_0x223d('0x29')],_0x5726bd=_0x1bf620[_0x223d('0x2a')],_0x4ea7fd=_0x1bf620[_0x223d('0x2a')]+_0x1bf620[_0x223d('0x2b')],_0x5c8e40;if(_0x4ea7fd>=_0x1538c3){_0x4ea7fd=_0x1538c3;_0x5c8e40=0xc8;}else{_0x5c8e40=0xce;}_0x27ce4a[_0x223d('0x27')](_0x5c8e40);return _0x27ce4a[_0x223d('0x2c')](_0x223d('0x2d'),_0x5726bd+'-'+_0x4ea7fd+'/'+_0x1538c3)[_0x223d('0x28')](_0x55be1b);}return null;};}function patchUpdates(_0x3760c2){return function(_0x3df180){try{jsonpatch['apply'](_0x3df180,_0x3760c2,!![]);}catch(_0x1d25b3){return BPromise[_0x223d('0x2e')](_0x1d25b3);}return _0x3df180['save']();};}function saveUpdates(_0x2de0cf,_0x520744){return function(_0x32bae8){if(_0x32bae8){return _0x32bae8['update'](_0x2de0cf)[_0x223d('0x2f')](function(_0x3816d3){return _0x3816d3;});}return null;};}function removeEntity(_0x46c2a2,_0x145e03){return function(_0x4e39bf){if(_0x4e39bf){return _0x4e39bf[_0x223d('0x30')]()[_0x223d('0x2f')](function(){_0x46c2a2[_0x223d('0x27')](0xcc)[_0x223d('0x31')]();});}};}function handleEntityNotFound(_0xda134e,_0x4022b1){return function(_0x3d3518){if(!_0x3d3518){_0xda134e[_0x223d('0x26')](0x194);}return _0x3d3518;};}function handleError(_0x579fc5,_0x442270){_0x442270=_0x442270||0x1f4;return function(_0x74bf46){logger[_0x223d('0x21')](_0x74bf46[_0x223d('0x32')]);if(_0x74bf46[_0x223d('0x33')]){delete _0x74bf46[_0x223d('0x33')];}_0x579fc5['status'](_0x442270)[_0x223d('0x34')](_0x74bf46);};}exports[_0x223d('0x35')]=function(_0x5c999a,_0x4b89ed){var _0x54ef1f={},_0x899c61={},_0x1efa19={'count':0x0,'rows':[]};var _0x46b3b9=db['FaxMessage'][_0x223d('0x36')];_0x899c61[_0x223d('0x37')]=_[_0x223d('0x38')](_0x46b3b9);_0x899c61[_0x223d('0x39')]=_[_0x223d('0x38')](_0x5c999a['query']);_0x899c61[_0x223d('0x3a')]=_['intersection'](_0x899c61[_0x223d('0x37')],_0x899c61['query']);_0x54ef1f[_0x223d('0x3b')]=_['intersection'](_0x899c61[_0x223d('0x37')],qs[_0x223d('0x3c')](_0x5c999a['query'][_0x223d('0x3c')]));_0x54ef1f[_0x223d('0x3b')]=_0x54ef1f[_0x223d('0x3b')]['length']?_0x54ef1f[_0x223d('0x3b')]:_0x899c61[_0x223d('0x37')];if(!_0x5c999a['query'][_0x223d('0x3d')](_0x223d('0x3e'))){_0x54ef1f[_0x223d('0x2b')]=qs[_0x223d('0x2b')](_0x5c999a[_0x223d('0x39')][_0x223d('0x2b')]);_0x54ef1f['offset']=qs[_0x223d('0x2a')](_0x5c999a[_0x223d('0x39')]['offset']);}_0x54ef1f[_0x223d('0x3f')]=qs[_0x223d('0x40')](_0x5c999a['query']['sort']);_0x54ef1f[_0x223d('0x41')]=qs[_0x223d('0x3a')](_['pick'](_0x5c999a[_0x223d('0x39')],_0x899c61['filters']));if(_0x5c999a[_0x223d('0x39')]['filter']){_0x54ef1f[_0x223d('0x41')]=_[_0x223d('0x42')](_0x54ef1f[_0x223d('0x41')],{'$or':_[_0x223d('0x43')](_0x46b3b9,function(_0x334060){if(_0x334060[_0x223d('0x44')][_0x223d('0x45')]!==_0x223d('0x46')){var _0x1e3b8d={};_0x1e3b8d[_0x334060[_0x223d('0x47')]]={'$like':'%'+_0x5c999a['query']['filter']+'%'};return _0x1e3b8d;}})});}_0x54ef1f=_[_0x223d('0x42')]({},_0x54ef1f,_0x5c999a[_0x223d('0x48')]);var _0x1c61e0={'where':_0x54ef1f[_0x223d('0x41')]};return db[_0x223d('0x49')][_0x223d('0x29')](_0x1c61e0)[_0x223d('0x2f')](function(_0x5b01e6){_0x1efa19[_0x223d('0x29')]=_0x5b01e6;if(_0x5c999a['query'][_0x223d('0x4a')]){_0x54ef1f[_0x223d('0x4b')]=[{'all':!![]}];}return db[_0x223d('0x49')][_0x223d('0x4c')](_0x54ef1f);})['then'](function(_0xa96ec){_0x1efa19[_0x223d('0x4d')]=_0xa96ec;return _0x1efa19;})[_0x223d('0x2f')](respondWithFilteredResult(_0x4b89ed,_0x54ef1f))[_0x223d('0x25')](handleError(_0x4b89ed,null));};exports['show']=function(_0x3182af,_0x4f1cdc){var _0x18a2ec={'raw':!![],'where':{'id':_0x3182af[_0x223d('0x4e')]['id']}},_0x48c730={};_0x48c730[_0x223d('0x37')]=_[_0x223d('0x38')](db[_0x223d('0x49')][_0x223d('0x36')]);_0x48c730[_0x223d('0x39')]=_[_0x223d('0x38')](_0x3182af['query']);_0x48c730[_0x223d('0x3a')]=_[_0x223d('0x4f')](_0x48c730[_0x223d('0x37')],_0x48c730['query']);_0x18a2ec[_0x223d('0x3b')]=_[_0x223d('0x4f')](_0x48c730[_0x223d('0x37')],qs['fields'](_0x3182af[_0x223d('0x39')][_0x223d('0x3c')]));_0x18a2ec[_0x223d('0x3b')]=_0x18a2ec[_0x223d('0x3b')]['length']?_0x18a2ec[_0x223d('0x3b')]:_0x48c730['model'];if(_0x3182af[_0x223d('0x39')][_0x223d('0x4a')]){_0x18a2ec[_0x223d('0x4b')]=[{'all':!![]}];}_0x18a2ec=_[_0x223d('0x42')]({},_0x18a2ec,_0x3182af[_0x223d('0x48')]);return db[_0x223d('0x49')][_0x223d('0x50')](_0x18a2ec)[_0x223d('0x2f')](handleEntityNotFound(_0x4f1cdc,null))['then'](respondWithResult(_0x4f1cdc,null))[_0x223d('0x25')](handleError(_0x4f1cdc,null));};exports[_0x223d('0x51')]=function(_0x162754,_0x40a919){if(_0x162754[_0x223d('0x52')]['id']){delete _0x162754[_0x223d('0x52')]['id'];}return db[_0x223d('0x49')][_0x223d('0x50')]({'where':{'id':_0x162754['params']['id']}})[_0x223d('0x2f')](handleEntityNotFound(_0x40a919,null))[_0x223d('0x2f')](saveUpdates(_0x162754['body'],null))[_0x223d('0x2f')](respondWithResult(_0x40a919,null))[_0x223d('0x25')](handleError(_0x40a919,null));};exports[_0x223d('0x30')]=function(_0x120fc1,_0x5c188c){return db[_0x223d('0x49')][_0x223d('0x50')]({'where':{'id':_0x120fc1['params']['id']}})[_0x223d('0x2f')](handleEntityNotFound(_0x5c188c,null))[_0x223d('0x2f')](removeEntity(_0x5c188c,null))[_0x223d('0x25')](handleError(_0x5c188c,null));};exports[_0x223d('0x53')]=function(_0x54e11d,_0x219ae9){return db[_0x223d('0x49')][_0x223d('0x53')]()[_0x223d('0x2f')](respondWithResult(_0x219ae9,null))['catch'](handleError(_0x219ae9,null));};var interaction_log=require(_0x223d('0x11'))(_0x223d('0x54'));exports[_0x223d('0x55')]=function(_0x51f931,_0x410d14,_0x14bc5b){var _0x4e2dca={'channel':_0x223d('0x56')};if(_0x51f931[_0x223d('0x52')]['id']){delete _0x51f931[_0x223d('0x52')]['id'];}_0x51f931['body'][_0x223d('0x57')]=!![];_0x51f931[_0x223d('0x52')]['readAt']=moment()[_0x223d('0x58')](_0x223d('0x59'));_0x51f931[_0x223d('0x52')]['UserId']=_0x51f931[_0x223d('0x52')][_0x223d('0x5a')]||_0x51f931[_0x223d('0x5b')]['id'];return db['FaxMessage'][_0x223d('0x50')]({'where':{'id':_0x51f931[_0x223d('0x4e')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0x223d('0x5c')}]})[_0x223d('0x2f')](handleEntityNotFound(_0x410d14,null))[_0x223d('0x2f')](saveUpdates(_0x51f931['body'],null))[_0x223d('0x2f')](function(_0x20dfc2){if(_0x20dfc2){_0x4e2dca[_0x223d('0x23')]=_0x20dfc2[_0x223d('0x5d')]({'plain':!![]});return db[_0x223d('0x5e')]['find']({'where':{'id':_0x20dfc2[_0x223d('0x5f')]}});}return null;})[_0x223d('0x2f')](handleEntityNotFound(_0x410d14,null))[_0x223d('0x2f')](function(_0x333b96){if(_0x333b96){return _0x333b96[_0x223d('0x51')]({'UserId':_0x51f931['body'][_0x223d('0x5a')],'read1stAt':_['isNil'](_0x333b96['read1stAt'])?moment()[_0x223d('0x58')](_0x223d('0x59')):undefined});}return null;})[_0x223d('0x2f')](function(_0x3624a2){if(_0x3624a2){_0x4e2dca['interaction']=_0x3624a2[_0x223d('0x5d')]({'plain':!![]});interaction_log[_0x223d('0x1c')]('[FAXMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x51f931[_0x223d('0x5b')]['id'],_0x51f931[_0x223d('0x5b')][_0x223d('0x33')],_0x51f931[_0x223d('0x5b')][_0x223d('0x60')],_0x4e2dca['interaction']['id'],_0x51f931[_0x223d('0x52')]?JSON[_0x223d('0x61')](_0x51f931[_0x223d('0x52')]):'null');return respondWithRpcPromise(_0x223d('0x62'),_0x223d('0x63'),_0x4e2dca);}return null;})['then'](function(_0x56a56d){if(_0x56a56d){if(_0x51f931[_0x223d('0x52')][_0x223d('0x64')]){_0x4e2dca[_0x223d('0x23')][_0x223d('0x65')]=util[_0x223d('0x58')](_0x223d('0x66'),_0x51f931[_0x223d('0x5b')][_0x223d('0x33')]);_0x4e2dca[_0x223d('0x23')][_0x223d('0x67')]=_0x4e2dca[_0x223d('0x67')];_0x4e2dca[_0x223d('0x23')][_0x223d('0x68')]='accept';return respondWithRpcPromise(_0x223d('0x69'),_0x223d('0x69'),{'event':_0x223d('0x6a'),'message':_0x4e2dca[_0x223d('0x23')]},client9002)[_0x223d('0x2f')](function(){return _0x4e2dca;});}return _0x4e2dca;}return null;})['then'](respondWithResult(_0x410d14,null))['catch'](handleError(_0x410d14,null));};var interaction_log=require('../../config/logger')(_0x223d('0x54'));exports[_0x223d('0x2e')]=function(_0x474458,_0x49cfd1,_0x586c00){var _0x19017b={'agent':{},'channel':_0x223d('0x56')};if(_0x474458[_0x223d('0x52')]['id']){delete _0x474458['body']['id'];}_0x474458[_0x223d('0x52')][_0x223d('0x5a')]=_0x474458[_0x223d('0x52')][_0x223d('0x5a')]||_0x474458[_0x223d('0x5b')]['id'];_0x19017b[_0x223d('0x6b')]['id']=_0x474458['body']['UserId'];return db[_0x223d('0x49')]['find']({'where':{'id':_0x474458[_0x223d('0x4e')]['id'],'UserId':null}})[_0x223d('0x2f')](handleEntityNotFound(_0x49cfd1,null))[_0x223d('0x2f')](function(_0x5a6269){if(_0x5a6269){_0x19017b['message']=_0x5a6269[_0x223d('0x5d')]({'plain':!![]});return db[_0x223d('0x5e')]['find']({'where':{'id':_0x5a6269[_0x223d('0x5f')]}});}return null;})[_0x223d('0x2f')](handleEntityNotFound(_0x49cfd1,null))[_0x223d('0x2f')](function(_0x227735){if(_0x227735){_0x19017b[_0x223d('0x6c')]=_0x227735['get']({'plain':!![]});interaction_log[_0x223d('0x1c')](_0x223d('0x6d'),_0x474458['user']['id'],_0x474458[_0x223d('0x5b')][_0x223d('0x33')],_0x474458['user']['role'],_0x19017b['interaction']['id'],_0x474458[_0x223d('0x52')]?JSON[_0x223d('0x61')](_0x474458[_0x223d('0x52')]):_0x223d('0x6e'));return respondWithRpcPromise(_0x223d('0x6f'),_0x223d('0x70'),_0x19017b);}return null;})[_0x223d('0x2f')](function(_0x2ce8f9){if(_0x2ce8f9){_0x2ce8f9[_0x223d('0x23')]['interface']=util[_0x223d('0x58')](_0x223d('0x66'),_0x474458['user'][_0x223d('0x33')]);_0x2ce8f9[_0x223d('0x23')][_0x223d('0x67')]=_0x19017b[_0x223d('0x67')];_0x2ce8f9['message'][_0x223d('0x68')]=_0x223d('0x2e');respondWithRpcPromise(_0x223d('0x69'),'EventManager',{'event':_0x223d('0x71'),'message':_0x2ce8f9[_0x223d('0x23')]},client9002);return _0x19017b;}return null;})['then'](respondWithResult(_0x49cfd1,null))[_0x223d('0x25')](handleError(_0x49cfd1,null));};exports[_0x223d('0x72')]=function(_0x1124f7,_0x3647af){var _0x3f772f;return db[_0x223d('0x49')][_0x223d('0x72')](_0x1124f7['body'],{})[_0x223d('0x2f')](function(_0x11059c){_0x3f772f=_0x11059c;return db[_0x223d('0x73')][_0x223d('0x74')]({'where':{'id':_0x3f772f[_0x223d('0x75')]}});})[_0x223d('0x2f')](function(_0x84607c){if(_[_0x223d('0x76')](_0x84607c)){return;}else{_0x3f772f['fax']=_0x84607c['fax'];return db['Attachment'][_0x223d('0x74')]({'where':{'id':_0x3f772f[_0x223d('0x77')]}});}})[_0x223d('0x2f')](function(_0x1b4a33){return respondWithRpcPromise(_0x223d('0x78'),'SendFax',{'FaxAccountId':_['isNil'](_0x1124f7['body'])?undefined:_0x1124f7[_0x223d('0x52')][_0x223d('0x79')],'path':_['isNil'](_0x1b4a33)?undefined:util['format'](_0x223d('0x7a'),_0x1b4a33['basename']),'fax':_[_0x223d('0x76')](_0x3f772f[_0x223d('0x56')])?undefined:_0x3f772f[_0x223d('0x56')],'AttachmentId':_0x3f772f[_0x223d('0x77')]},client9002);})[_0x223d('0x2f')](respondWithResult(_0x3647af,0xc9))[_0x223d('0x25')](handleError(_0x3647af,null));};exports[_0x223d('0x7b')]=function(_0x2a7967,_0x1f772d){var _0x123dd5=path['join'](config[_0x223d('0x7c')],_0x223d('0x7d'),'files','attachments');return db[_0x223d('0x49')][_0x223d('0x50')]({'where':{'id':_0x2a7967[_0x223d('0x4e')]['id']},'include':[{'model':db[_0x223d('0x7e')],'as':_0x223d('0x7e')}]})[_0x223d('0x2f')](handleEntityNotFound(_0x1f772d,null))[_0x223d('0x2f')](function(_0x4f8ba5){if(_0x4f8ba5){return _0x1f772d['download'](path['join'](_0x123dd5,_0x4f8ba5[_0x223d('0x7e')]['basename']));}})[_0x223d('0x25')](handleError(_0x1f772d,null));};
\ No newline at end of file
+var _0x9e45=['FaxMessage','count','include','rows','show','params','includeAll','find','update','body','describe','accept','fax','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','get','FaxInteraction','FaxInteractionId','isNil','interaction','role','null','AcceptMessage','acceptMessage','manual','SIP/%s','channel','event','EventManager','acceptmessage','[FAXMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','interface','rejectmessage','create','findOne','ContactId','AttachmentId','SendFax','FaxAccountId','/var/opt/motion2/server/files/attachments/%s','basename','download','join','server','files','attachments','Attachment','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','path','sox','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./faxMessage.socket','jayson/promise','client','request','info','FaxMessage,\x20%s,\x20%s','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','sendStatus','status','end','json','offset','limit','set','apply','reject','save','destroy','then','stack','name','send','index','rawAttributes','keys','query','intersection','model','attributes','fields','length','hasOwnProperty','order','sort','where','filters','pick','merge','map','key','filter','options'];(function(_0x502d92,_0x3f0e14){var _0x43f1c8=function(_0x5cf9fd){while(--_0x5cf9fd){_0x502d92['push'](_0x502d92['shift']());}};_0x43f1c8(++_0x3f0e14);}(_0x9e45,0xb9));var _0x59e4=function(_0x28c33c,_0x65ef7d){_0x28c33c=_0x28c33c-0x0;var _0x49f10=_0x9e45[_0x28c33c];return _0x49f10;};'use strict';var pdf=require(_0x59e4('0x0'));var emlformat=require(_0x59e4('0x1'));var rimraf=require(_0x59e4('0x2'));var zipdir=require(_0x59e4('0x3'));var jsonpatch=require(_0x59e4('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x59e4('0x5'));var Mustache=require(_0x59e4('0x6'));var util=require(_0x59e4('0x7'));var path=require(_0x59e4('0x8'));var sox=require(_0x59e4('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x59e4('0xa'));var squel=require(_0x59e4('0xb'));var crypto=require(_0x59e4('0xc'));var jsforce=require(_0x59e4('0xd'));var deskjs=require(_0x59e4('0xe'));var toCsv=require('to-csv');var querystring=require(_0x59e4('0xf'));var Papa=require(_0x59e4('0x10'));var authService=require(_0x59e4('0x11'));var hardwareService=require(_0x59e4('0x12'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x59e4('0x13'))(_0x59e4('0x14'));var utils=require('../../config/utils');var config=require(_0x59e4('0x15'));var db=require(_0x59e4('0x16'))['db'];config['redis']=_[_0x59e4('0x17')](config[_0x59e4('0x18')],{'host':_0x59e4('0x19'),'port':0x18eb});var socket=require(_0x59e4('0x1a'))(new Redis(config[_0x59e4('0x18')]));require(_0x59e4('0x1b'))['register'](socket);var jayson=require(_0x59e4('0x1c'));var client=jayson[_0x59e4('0x1d')]['http']({'port':0x232c});var client9002=jayson[_0x59e4('0x1d')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1d3798,_0x239ced,_0x4428b9,_0x40fc81){return new BPromise(function(_0x55e0d1,_0xe1173a){var _0x41dda7=_0x40fc81||client;return _0x41dda7[_0x59e4('0x1e')](_0x1d3798,_0x4428b9)['then'](function(_0x4deb83){logger[_0x59e4('0x1f')](_0x59e4('0x20'),_0x239ced,_0x59e4('0x21'));logger[_0x59e4('0x22')](_0x59e4('0x23'),_0x239ced,_0x59e4('0x21'),JSON[_0x59e4('0x24')](_0x4deb83));if(_0x4deb83['error']){if(_0x4deb83['error'][_0x59e4('0x25')]===0x1f4){logger[_0x59e4('0x26')]('FaxMessage,\x20%s,\x20%s',_0x239ced,_0x4deb83[_0x59e4('0x26')]['message']);return _0xe1173a(_0x4deb83[_0x59e4('0x26')][_0x59e4('0x27')]);}logger[_0x59e4('0x26')]('FaxMessage,\x20%s,\x20%s',_0x239ced,_0x4deb83[_0x59e4('0x26')][_0x59e4('0x27')]);return _0x55e0d1(_0x4deb83['error'][_0x59e4('0x27')]);}else{logger['info'](_0x59e4('0x20'),_0x239ced,_0x59e4('0x21'));_0x55e0d1(_0x4deb83[_0x59e4('0x28')][_0x59e4('0x27')]);}})[_0x59e4('0x29')](function(_0x419729){logger[_0x59e4('0x26')](_0x59e4('0x20'),_0x239ced,_0x419729);_0xe1173a(_0x419729);});});}function respondWithStatusCode(_0x341537,_0x5a82b3){_0x5a82b3=_0x5a82b3||0xcc;return function(_0x5a28de){if(_0x5a28de){return _0x341537[_0x59e4('0x2a')](_0x5a82b3);}return _0x341537[_0x59e4('0x2b')](_0x5a82b3)[_0x59e4('0x2c')]();};}function respondWithResult(_0x23cfeb,_0x5cb71d){_0x5cb71d=_0x5cb71d||0xc8;return function(_0x5305ed){if(_0x5305ed){return _0x23cfeb[_0x59e4('0x2b')](_0x5cb71d)[_0x59e4('0x2d')](_0x5305ed);}};}function respondWithFilteredResult(_0x2d8071,_0x671fa8){return function(_0x22d4a5){if(_0x22d4a5){var _0x1cb6da=_0x22d4a5['count'],_0x502155=_0x671fa8[_0x59e4('0x2e')],_0x41f927=_0x671fa8[_0x59e4('0x2e')]+_0x671fa8[_0x59e4('0x2f')],_0xbd01a2;if(_0x41f927>=_0x1cb6da){_0x41f927=_0x1cb6da;_0xbd01a2=0xc8;}else{_0xbd01a2=0xce;}_0x2d8071[_0x59e4('0x2b')](_0xbd01a2);return _0x2d8071[_0x59e4('0x30')]('Content-Range',_0x502155+'-'+_0x41f927+'/'+_0x1cb6da)[_0x59e4('0x2d')](_0x22d4a5);}return null;};}function patchUpdates(_0x448f2a){return function(_0x399f1e){try{jsonpatch[_0x59e4('0x31')](_0x399f1e,_0x448f2a,!![]);}catch(_0x318743){return BPromise[_0x59e4('0x32')](_0x318743);}return _0x399f1e[_0x59e4('0x33')]();};}function saveUpdates(_0x35d64b,_0x465db2){return function(_0x1394d0){if(_0x1394d0){return _0x1394d0['update'](_0x35d64b)['then'](function(_0x722258){return _0x722258;});}return null;};}function removeEntity(_0x55d2f4,_0x30e6cb){return function(_0x11bc94){if(_0x11bc94){return _0x11bc94[_0x59e4('0x34')]()[_0x59e4('0x35')](function(){_0x55d2f4['status'](0xcc)[_0x59e4('0x2c')]();});}};}function handleEntityNotFound(_0x46d9fb,_0x172063){return function(_0x14fa9e){if(!_0x14fa9e){_0x46d9fb[_0x59e4('0x2a')](0x194);}return _0x14fa9e;};}function handleError(_0x10aa5b,_0x629cad){_0x629cad=_0x629cad||0x1f4;return function(_0x1a3c56){logger[_0x59e4('0x26')](_0x1a3c56[_0x59e4('0x36')]);if(_0x1a3c56[_0x59e4('0x37')]){delete _0x1a3c56[_0x59e4('0x37')];}_0x10aa5b['status'](_0x629cad)[_0x59e4('0x38')](_0x1a3c56);};}exports[_0x59e4('0x39')]=function(_0x23fd37,_0x14af00){var _0x2eb599={},_0x5539b3={},_0x59294d={'count':0x0,'rows':[]};var _0x1fa436=db['FaxMessage'][_0x59e4('0x3a')];_0x5539b3['model']=_['keys'](_0x1fa436);_0x5539b3['query']=_[_0x59e4('0x3b')](_0x23fd37[_0x59e4('0x3c')]);_0x5539b3['filters']=_[_0x59e4('0x3d')](_0x5539b3[_0x59e4('0x3e')],_0x5539b3[_0x59e4('0x3c')]);_0x2eb599[_0x59e4('0x3f')]=_[_0x59e4('0x3d')](_0x5539b3[_0x59e4('0x3e')],qs[_0x59e4('0x40')](_0x23fd37[_0x59e4('0x3c')][_0x59e4('0x40')]));_0x2eb599['attributes']=_0x2eb599[_0x59e4('0x3f')][_0x59e4('0x41')]?_0x2eb599[_0x59e4('0x3f')]:_0x5539b3[_0x59e4('0x3e')];if(!_0x23fd37[_0x59e4('0x3c')][_0x59e4('0x42')]('nolimit')){_0x2eb599[_0x59e4('0x2f')]=qs[_0x59e4('0x2f')](_0x23fd37[_0x59e4('0x3c')][_0x59e4('0x2f')]);_0x2eb599[_0x59e4('0x2e')]=qs[_0x59e4('0x2e')](_0x23fd37['query'][_0x59e4('0x2e')]);}_0x2eb599[_0x59e4('0x43')]=qs['sort'](_0x23fd37[_0x59e4('0x3c')][_0x59e4('0x44')]);_0x2eb599[_0x59e4('0x45')]=qs[_0x59e4('0x46')](_[_0x59e4('0x47')](_0x23fd37['query'],_0x5539b3[_0x59e4('0x46')]));if(_0x23fd37[_0x59e4('0x3c')]['filter']){_0x2eb599[_0x59e4('0x45')]=_[_0x59e4('0x48')](_0x2eb599[_0x59e4('0x45')],{'$or':_[_0x59e4('0x49')](_0x1fa436,function(_0x2325bc){if(_0x2325bc['type'][_0x59e4('0x4a')]!=='VIRTUAL'){var _0x1e3140={};_0x1e3140[_0x2325bc['field']]={'$like':'%'+_0x23fd37['query'][_0x59e4('0x4b')]+'%'};return _0x1e3140;}})});}_0x2eb599=_[_0x59e4('0x48')]({},_0x2eb599,_0x23fd37[_0x59e4('0x4c')]);var _0x574d48={'where':_0x2eb599[_0x59e4('0x45')]};return db[_0x59e4('0x4d')][_0x59e4('0x4e')](_0x574d48)['then'](function(_0x15e695){_0x59294d[_0x59e4('0x4e')]=_0x15e695;if(_0x23fd37['query']['includeAll']){_0x2eb599[_0x59e4('0x4f')]=[{'all':!![]}];}return db[_0x59e4('0x4d')]['findAll'](_0x2eb599);})['then'](function(_0x2df81c){_0x59294d[_0x59e4('0x50')]=_0x2df81c;return _0x59294d;})[_0x59e4('0x35')](respondWithFilteredResult(_0x14af00,_0x2eb599))[_0x59e4('0x29')](handleError(_0x14af00,null));};exports[_0x59e4('0x51')]=function(_0x1e835d,_0x24d56b){var _0xc2c75f={'raw':!![],'where':{'id':_0x1e835d[_0x59e4('0x52')]['id']}},_0x4ac532={};_0x4ac532[_0x59e4('0x3e')]=_[_0x59e4('0x3b')](db[_0x59e4('0x4d')][_0x59e4('0x3a')]);_0x4ac532[_0x59e4('0x3c')]=_['keys'](_0x1e835d[_0x59e4('0x3c')]);_0x4ac532['filters']=_['intersection'](_0x4ac532[_0x59e4('0x3e')],_0x4ac532[_0x59e4('0x3c')]);_0xc2c75f[_0x59e4('0x3f')]=_['intersection'](_0x4ac532[_0x59e4('0x3e')],qs['fields'](_0x1e835d[_0x59e4('0x3c')]['fields']));_0xc2c75f[_0x59e4('0x3f')]=_0xc2c75f[_0x59e4('0x3f')][_0x59e4('0x41')]?_0xc2c75f['attributes']:_0x4ac532[_0x59e4('0x3e')];if(_0x1e835d['query'][_0x59e4('0x53')]){_0xc2c75f['include']=[{'all':!![]}];}_0xc2c75f=_[_0x59e4('0x48')]({},_0xc2c75f,_0x1e835d[_0x59e4('0x4c')]);return db[_0x59e4('0x4d')][_0x59e4('0x54')](_0xc2c75f)[_0x59e4('0x35')](handleEntityNotFound(_0x24d56b,null))['then'](respondWithResult(_0x24d56b,null))['catch'](handleError(_0x24d56b,null));};exports[_0x59e4('0x55')]=function(_0x175168,_0x9e8d43){if(_0x175168['body']['id']){delete _0x175168[_0x59e4('0x56')]['id'];}return db[_0x59e4('0x4d')][_0x59e4('0x54')]({'where':{'id':_0x175168[_0x59e4('0x52')]['id']}})[_0x59e4('0x35')](handleEntityNotFound(_0x9e8d43,null))[_0x59e4('0x35')](saveUpdates(_0x175168[_0x59e4('0x56')],null))[_0x59e4('0x35')](respondWithResult(_0x9e8d43,null))[_0x59e4('0x29')](handleError(_0x9e8d43,null));};exports[_0x59e4('0x34')]=function(_0x59b05f,_0x425b32){return db['FaxMessage'][_0x59e4('0x54')]({'where':{'id':_0x59b05f['params']['id']}})['then'](handleEntityNotFound(_0x425b32,null))[_0x59e4('0x35')](removeEntity(_0x425b32,null))[_0x59e4('0x29')](handleError(_0x425b32,null));};exports[_0x59e4('0x57')]=function(_0x2dabf3,_0x340331){return db['FaxMessage'][_0x59e4('0x57')]()['then'](respondWithResult(_0x340331,null))['catch'](handleError(_0x340331,null));};var interaction_log=require(_0x59e4('0x13'))('fax-interactions');exports[_0x59e4('0x58')]=function(_0x22430a,_0x437f03,_0x43103d){var _0x465f6e={'channel':_0x59e4('0x59')};if(_0x22430a[_0x59e4('0x56')]['id']){delete _0x22430a[_0x59e4('0x56')]['id'];}_0x22430a[_0x59e4('0x56')][_0x59e4('0x5a')]=!![];_0x22430a[_0x59e4('0x56')][_0x59e4('0x5b')]=moment()[_0x59e4('0x5c')](_0x59e4('0x5d'));_0x22430a[_0x59e4('0x56')][_0x59e4('0x5e')]=_0x22430a[_0x59e4('0x56')][_0x59e4('0x5e')]||_0x22430a[_0x59e4('0x5f')]['id'];return db[_0x59e4('0x4d')][_0x59e4('0x54')]({'where':{'id':_0x22430a[_0x59e4('0x52')]['id'],'UserId':null},'include':[{'model':db[_0x59e4('0x60')],'as':_0x59e4('0x61')}]})[_0x59e4('0x35')](handleEntityNotFound(_0x437f03,null))['then'](saveUpdates(_0x22430a['body'],null))[_0x59e4('0x35')](function(_0x38f426){if(_0x38f426){_0x465f6e[_0x59e4('0x27')]=_0x38f426[_0x59e4('0x62')]({'plain':!![]});return db[_0x59e4('0x63')][_0x59e4('0x54')]({'where':{'id':_0x38f426[_0x59e4('0x64')]}});}return null;})['then'](handleEntityNotFound(_0x437f03,null))[_0x59e4('0x35')](function(_0x187e66){if(_0x187e66){return _0x187e66['update']({'UserId':_0x22430a[_0x59e4('0x56')][_0x59e4('0x5e')],'read1stAt':_[_0x59e4('0x65')](_0x187e66['read1stAt'])?moment()[_0x59e4('0x5c')](_0x59e4('0x5d')):undefined});}return null;})[_0x59e4('0x35')](function(_0x13fb45){if(_0x13fb45){_0x465f6e[_0x59e4('0x66')]=_0x13fb45[_0x59e4('0x62')]({'plain':!![]});interaction_log[_0x59e4('0x1f')]('[FAXMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x22430a['user']['id'],_0x22430a[_0x59e4('0x5f')][_0x59e4('0x37')],_0x22430a[_0x59e4('0x5f')][_0x59e4('0x67')],_0x465f6e[_0x59e4('0x66')]['id'],_0x22430a[_0x59e4('0x56')]?JSON[_0x59e4('0x24')](_0x22430a[_0x59e4('0x56')]):_0x59e4('0x68'));return respondWithRpcPromise(_0x59e4('0x69'),_0x59e4('0x6a'),_0x465f6e);}return null;})['then'](function(_0xcb8d2d){if(_0xcb8d2d){if(_0x22430a[_0x59e4('0x56')][_0x59e4('0x6b')]){_0x465f6e[_0x59e4('0x27')]['interface']=util[_0x59e4('0x5c')](_0x59e4('0x6c'),_0x22430a['user']['name']);_0x465f6e[_0x59e4('0x27')]['channel']=_0x465f6e[_0x59e4('0x6d')];_0x465f6e['message'][_0x59e4('0x6e')]='accept';return respondWithRpcPromise(_0x59e4('0x6f'),'EventManager',{'event':_0x59e4('0x70'),'message':_0x465f6e['message']},client9002)[_0x59e4('0x35')](function(){return _0x465f6e;});}return _0x465f6e;}return null;})[_0x59e4('0x35')](respondWithResult(_0x437f03,null))[_0x59e4('0x29')](handleError(_0x437f03,null));};var interaction_log=require(_0x59e4('0x13'))('fax-interactions');exports['reject']=function(_0x2488b4,_0x278675,_0x2c8043){var _0x251c02={'agent':{},'channel':_0x59e4('0x59')};if(_0x2488b4[_0x59e4('0x56')]['id']){delete _0x2488b4[_0x59e4('0x56')]['id'];}_0x2488b4['body'][_0x59e4('0x5e')]=_0x2488b4[_0x59e4('0x56')]['UserId']||_0x2488b4['user']['id'];_0x251c02['agent']['id']=_0x2488b4[_0x59e4('0x56')][_0x59e4('0x5e')];return db[_0x59e4('0x4d')][_0x59e4('0x54')]({'where':{'id':_0x2488b4[_0x59e4('0x52')]['id'],'UserId':null}})[_0x59e4('0x35')](handleEntityNotFound(_0x278675,null))[_0x59e4('0x35')](function(_0x325edc){if(_0x325edc){_0x251c02['message']=_0x325edc['get']({'plain':!![]});return db['FaxInteraction'][_0x59e4('0x54')]({'where':{'id':_0x325edc[_0x59e4('0x64')]}});}return null;})[_0x59e4('0x35')](handleEntityNotFound(_0x278675,null))[_0x59e4('0x35')](function(_0x1fee83){if(_0x1fee83){_0x251c02['interaction']=_0x1fee83[_0x59e4('0x62')]({'plain':!![]});interaction_log[_0x59e4('0x1f')](_0x59e4('0x71'),_0x2488b4[_0x59e4('0x5f')]['id'],_0x2488b4[_0x59e4('0x5f')][_0x59e4('0x37')],_0x2488b4[_0x59e4('0x5f')][_0x59e4('0x67')],_0x251c02[_0x59e4('0x66')]['id'],_0x2488b4[_0x59e4('0x56')]?JSON[_0x59e4('0x24')](_0x2488b4[_0x59e4('0x56')]):_0x59e4('0x68'));return respondWithRpcPromise(_0x59e4('0x72'),'rejectMessage',_0x251c02);}return null;})[_0x59e4('0x35')](function(_0x3f5d78){if(_0x3f5d78){_0x3f5d78[_0x59e4('0x27')][_0x59e4('0x73')]=util[_0x59e4('0x5c')](_0x59e4('0x6c'),_0x2488b4['user'][_0x59e4('0x37')]);_0x3f5d78[_0x59e4('0x27')][_0x59e4('0x6d')]=_0x251c02[_0x59e4('0x6d')];_0x3f5d78[_0x59e4('0x27')][_0x59e4('0x6e')]=_0x59e4('0x32');respondWithRpcPromise(_0x59e4('0x6f'),'EventManager',{'event':_0x59e4('0x74'),'message':_0x3f5d78[_0x59e4('0x27')]},client9002);return _0x251c02;}return null;})['then'](respondWithResult(_0x278675,null))[_0x59e4('0x29')](handleError(_0x278675,null));};exports['create']=function(_0x30c414,_0x26f78c){var _0x17c0e7;return db['FaxMessage'][_0x59e4('0x75')](_0x30c414[_0x59e4('0x56')],{})[_0x59e4('0x35')](function(_0x22f10b){_0x17c0e7=_0x22f10b;return db[_0x59e4('0x60')][_0x59e4('0x76')]({'where':{'id':_0x17c0e7[_0x59e4('0x77')]}});})[_0x59e4('0x35')](function(_0x32db84){if(_[_0x59e4('0x65')](_0x32db84)){return;}else{_0x17c0e7[_0x59e4('0x59')]=_0x32db84[_0x59e4('0x59')];return db['Attachment'][_0x59e4('0x76')]({'where':{'id':_0x17c0e7[_0x59e4('0x78')]}});}})[_0x59e4('0x35')](function(_0x56cec8){return respondWithRpcPromise(_0x59e4('0x79'),_0x59e4('0x79'),{'FaxAccountId':_[_0x59e4('0x65')](_0x30c414[_0x59e4('0x56')])?undefined:_0x30c414['body'][_0x59e4('0x7a')],'path':_['isNil'](_0x56cec8)?undefined:util['format'](_0x59e4('0x7b'),_0x56cec8[_0x59e4('0x7c')]),'fax':_['isNil'](_0x17c0e7[_0x59e4('0x59')])?undefined:_0x17c0e7[_0x59e4('0x59')],'AttachmentId':_0x17c0e7[_0x59e4('0x78')]},client9002);})[_0x59e4('0x35')](respondWithResult(_0x26f78c,0xc9))[_0x59e4('0x29')](handleError(_0x26f78c,null));};exports[_0x59e4('0x7d')]=function(_0x1d4459,_0xe60c2f){var _0x336f24=path[_0x59e4('0x7e')](config['root'],_0x59e4('0x7f'),_0x59e4('0x80'),_0x59e4('0x81'));return db[_0x59e4('0x4d')][_0x59e4('0x54')]({'where':{'id':_0x1d4459[_0x59e4('0x52')]['id']},'include':[{'model':db[_0x59e4('0x82')],'as':'Attachment'}]})['then'](handleEntityNotFound(_0xe60c2f,null))[_0x59e4('0x35')](function(_0x5c9840){if(_0x5c9840){return _0xe60c2f[_0x59e4('0x7d')](path[_0x59e4('0x7e')](_0x336f24,_0x5c9840[_0x59e4('0x82')]['basename']));}})[_0x59e4('0x29')](handleError(_0xe60c2f,null));};
\ No newline at end of file
index ec1b456..b7e9f75 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7e1a=['emit','exports','events','../../mysqldb','FaxMessage','setMaxListeners','save','remove'];(function(_0x335f77,_0x2b53ba){var _0x27172f=function(_0x426a99){while(--_0x426a99){_0x335f77['push'](_0x335f77['shift']());}};_0x27172f(++_0x2b53ba);}(_0x7e1a,0x152));var _0xa7e1=function(_0x125e66,_0x3c849e){_0x125e66=_0x125e66-0x0;var _0x1ad1ba=_0x7e1a[_0x125e66];return _0x1ad1ba;};'use strict';var EventEmitter=require(_0xa7e1('0x0'));var FaxMessage=require(_0xa7e1('0x1'))['db'][_0xa7e1('0x2')];var FaxMessageEvents=new EventEmitter();FaxMessageEvents[_0xa7e1('0x3')](0x0);var events={'afterCreate':_0xa7e1('0x4'),'afterUpdate':'update','afterDestroy':_0xa7e1('0x5')};function emitEvent(_0x15478a){return function(_0xb46387,_0x52b622,_0x34869a){FaxMessageEvents[_0xa7e1('0x6')](_0x15478a+':'+_0xb46387['id'],_0xb46387);FaxMessageEvents[_0xa7e1('0x6')](_0x15478a,_0xb46387);_0x34869a(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxMessage['hook'](e,emitEvent(event));}}module[_0xa7e1('0x7')]=FaxMessageEvents;
\ No newline at end of file
+var _0xe0bd=['emit','hasOwnProperty','hook','exports','FaxMessage','setMaxListeners','save','update','remove'];(function(_0x22f4fd,_0x4c6f98){var _0x3d315b=function(_0x180f87){while(--_0x180f87){_0x22f4fd['push'](_0x22f4fd['shift']());}};_0x3d315b(++_0x4c6f98);}(_0xe0bd,0x1c6));var _0xde0b=function(_0x2867d8,_0xef3ee0){_0x2867d8=_0x2867d8-0x0;var _0x3b8176=_0xe0bd[_0x2867d8];return _0x3b8176;};'use strict';var EventEmitter=require('events');var FaxMessage=require('../../mysqldb')['db'][_0xde0b('0x0')];var FaxMessageEvents=new EventEmitter();FaxMessageEvents[_0xde0b('0x1')](0x0);var events={'afterCreate':_0xde0b('0x2'),'afterUpdate':_0xde0b('0x3'),'afterDestroy':_0xde0b('0x4')};function emitEvent(_0x3f10a5){return function(_0xc907bb,_0x1f1458,_0x1954a1){FaxMessageEvents[_0xde0b('0x5')](_0x3f10a5+':'+_0xc907bb['id'],_0xc907bb);FaxMessageEvents[_0xde0b('0x5')](_0x3f10a5,_0xc907bb);_0x1954a1(null);};}for(var e in events){if(events[_0xde0b('0x6')](e)){var event=events[e];FaxMessage[_0xde0b('0x7')](e,emitEvent(event));}}module[_0xde0b('0x8')]=FaxMessageEvents;
\ No newline at end of file
index b8d240d..884ed82 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd2bd=['secret','isNil','UserId','FaxInteraction','FaxInteractionId','update','direction','catch','error','utf8mb4','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','bluebird','request-promise','./faxMessage.attributes','exports','fax_messages','get','toLowerCase','out'];(function(_0x33cf66,_0x30e414){var _0x3a400b=function(_0x29130b){while(--_0x29130b){_0x33cf66['push'](_0x33cf66['shift']());}};_0x3a400b(++_0x30e414);}(_0xd2bd,0x7e));var _0xdd2b=function(_0x3dc538,_0x4f7702){_0x3dc538=_0x3dc538-0x0;var _0x72c2fd=_0xd2bd[_0x3dc538];return _0x72c2fd;};'use strict';var _=require(_0xdd2b('0x0'));var util=require(_0xdd2b('0x1'));var logger=require(_0xdd2b('0x2'))(_0xdd2b('0x3'));var moment=require('moment');var BPromise=require(_0xdd2b('0x4'));var rp=require(_0xdd2b('0x5'));var attributes=require(_0xdd2b('0x6'));module[_0xdd2b('0x7')]=function(_0x3df02b,_0x531031){return _0x3df02b['define']('FaxMessage',attributes,{'tableName':_0xdd2b('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x170337,_0x16ba96,_0x336d08){var _0x56e375=_0x3df02b['models'];var _0x5bad42=_0x170337[_0xdd2b('0x9')]({'plain':!![]});if(_0x5bad42['direction']['toLowerCase']()==='in'||_0x5bad42['direction'][_0xdd2b('0xa')]()===_0xdd2b('0xb')&&!_0x5bad42[_0xdd2b('0xc')]&&!_[_0xdd2b('0xd')](_0x5bad42[_0xdd2b('0xe')])){_0x56e375[_0xdd2b('0xf')]['findOne']({'where':{'id':_0x5bad42[_0xdd2b('0x10')]}})['then'](function(_0x58d809){if(_0x58d809){_0x58d809[_0xdd2b('0x11')]({'lastMsgAt':_0x5bad42['createdAt'],'lastMsgDirection':_0x5bad42[_0xdd2b('0x12')][_0xdd2b('0xa')](),'lastMsgBody':_0x5bad42['body']});}})[_0xdd2b('0x13')](function(_0x2fe0aa){console[_0xdd2b('0x14')](_0x2fe0aa);});}_0x336d08();}},'charset':_0xdd2b('0x15'),'collate':_0xdd2b('0x16')});};
\ No newline at end of file
+var _0x7b5a=['update','createdAt','body','catch','error','utf8mb4','lodash','util','moment','./faxMessage.attributes','exports','define','FaxMessage','fax_messages','models','get','direction','out','isNil','UserId','FaxInteraction','findOne','FaxInteractionId','then'];(function(_0x11aee5,_0x27fa94){var _0x2e8c9d=function(_0x33ff83){while(--_0x33ff83){_0x11aee5['push'](_0x11aee5['shift']());}};_0x2e8c9d(++_0x27fa94);}(_0x7b5a,0x186));var _0xa7b5=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x7b5a[_0x3ab51d];return _0x29a04e;};'use strict';var _=require(_0xa7b5('0x0'));var util=require(_0xa7b5('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xa7b5('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xa7b5('0x3'));module[_0xa7b5('0x4')]=function(_0x208ca0,_0x5cc3e2){return _0x208ca0[_0xa7b5('0x5')](_0xa7b5('0x6'),attributes,{'tableName':_0xa7b5('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x38346e,_0x4c8c24,_0x19ccce){var _0xe50238=_0x208ca0[_0xa7b5('0x8')];var _0x2712bd=_0x38346e[_0xa7b5('0x9')]({'plain':!![]});if(_0x2712bd[_0xa7b5('0xa')]['toLowerCase']()==='in'||_0x2712bd['direction']['toLowerCase']()===_0xa7b5('0xb')&&!_0x2712bd['secret']&&!_[_0xa7b5('0xc')](_0x2712bd[_0xa7b5('0xd')])){_0xe50238[_0xa7b5('0xe')][_0xa7b5('0xf')]({'where':{'id':_0x2712bd[_0xa7b5('0x10')]}})[_0xa7b5('0x11')](function(_0x39e81e){if(_0x39e81e){_0x39e81e[_0xa7b5('0x12')]({'lastMsgAt':_0x2712bd[_0xa7b5('0x13')],'lastMsgDirection':_0x2712bd[_0xa7b5('0xa')]['toLowerCase'](),'lastMsgBody':_0x2712bd[_0xa7b5('0x14')]});}})[_0xa7b5('0x15')](function(_0x3f2342){console[_0xa7b5('0x16')](_0x3f2342);});}_0x19ccce();}},'charset':_0xa7b5('0x17'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index dce43fb..a4e93d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb717=['jayson/promise','client','redis','defaults','localhost','socket.io-emitter','./faxMessage.socket','register','request','FaxMessage,\x20%s,\x20%s','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','error','code','message','info','result','catch','CreateFaxMessage','FaxMessage','body','options','raw','stringify','update','attributes','then','UpdateFaxMessage','lodash','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment'];(function(_0x1576c5,_0x3fe275){var _0xdeacb7=function(_0x2f1a9b){while(--_0x2f1a9b){_0x1576c5['push'](_0x1576c5['shift']());}};_0xdeacb7(++_0x3fe275);}(_0xb717,0x1b4));var _0x7b71=function(_0x1bafd1,_0x12bb86){_0x1bafd1=_0x1bafd1-0x0;var _0x2ba555=_0xb717[_0x1bafd1];return _0x2ba555;};'use strict';var _=require(_0x7b71('0x0'));var util=require('util');var moment=require(_0x7b71('0x1'));var BPromise=require('bluebird');var rs=require(_0x7b71('0x2'));var fs=require('fs');var Redis=require(_0x7b71('0x3'));var db=require(_0x7b71('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x7b71('0x5'))(_0x7b71('0x6'));var config=require(_0x7b71('0x7'));var jayson=require(_0x7b71('0x8'));var client=jayson[_0x7b71('0x9')]['http']({'port':0x232a});config[_0x7b71('0xa')]=_[_0x7b71('0xb')](config[_0x7b71('0xa')],{'host':_0x7b71('0xc'),'port':0x18eb});var socket=require(_0x7b71('0xd'))(new Redis(config['redis']));require(_0x7b71('0xe'))[_0x7b71('0xf')](socket);function respondWithRpcPromise(_0x53857a,_0x1b7a5b,_0x45bbcd){return new BPromise(function(_0x179fab,_0x55c72a){return client[_0x7b71('0x10')](_0x53857a,_0x45bbcd)['then'](function(_0x470f77){logger['info'](_0x7b71('0x11'),_0x1b7a5b,_0x7b71('0x12'));logger[_0x7b71('0x13')](_0x7b71('0x14'),_0x1b7a5b,_0x7b71('0x12'),JSON['stringify'](_0x470f77));if(_0x470f77[_0x7b71('0x15')]){if(_0x470f77['error'][_0x7b71('0x16')]===0x1f4){logger[_0x7b71('0x15')]('FaxMessage,\x20%s,\x20%s',_0x1b7a5b,_0x470f77[_0x7b71('0x15')][_0x7b71('0x17')]);return _0x55c72a(_0x470f77[_0x7b71('0x15')]['message']);}logger['error'](_0x7b71('0x11'),_0x1b7a5b,_0x470f77[_0x7b71('0x15')][_0x7b71('0x17')]);return _0x179fab(_0x470f77[_0x7b71('0x15')]['message']);}else{logger[_0x7b71('0x18')]('FaxMessage,\x20%s,\x20%s',_0x1b7a5b,'request\x20sent');_0x179fab(_0x470f77[_0x7b71('0x19')][_0x7b71('0x17')]);}})[_0x7b71('0x1a')](function(_0x46c47d){logger[_0x7b71('0x15')]('FaxMessage,\x20%s,\x20%s',_0x1b7a5b,_0x46c47d);_0x55c72a(_0x46c47d);});});}exports[_0x7b71('0x1b')]=function(_0x1cdbd0){var _0x381af9=this;return new Promise(function(_0x1941b9,_0x206000){return db[_0x7b71('0x1c')]['create'](_0x1cdbd0[_0x7b71('0x1d')],{'raw':_0x1cdbd0[_0x7b71('0x1e')]?_0x1cdbd0[_0x7b71('0x1e')][_0x7b71('0x1f')]===undefined?!![]:![]:!![]})['then'](function(_0x55ed9c){logger[_0x7b71('0x18')](_0x7b71('0x1b'),_0x1cdbd0);logger[_0x7b71('0x13')](_0x7b71('0x1b'),_0x1cdbd0,JSON[_0x7b71('0x20')](_0x55ed9c));_0x1941b9(_0x55ed9c);})['catch'](function(_0x2b824d){logger['error'](_0x7b71('0x1b'),_0x2b824d[_0x7b71('0x17')],_0x1cdbd0);_0x206000(_0x381af9[_0x7b71('0x15')](0x1f4,_0x2b824d[_0x7b71('0x17')]));});});};exports['UpdateFaxMessage']=function(_0x5e297f){var _0x103774=this;return new Promise(function(_0x28841d,_0x598102){return db[_0x7b71('0x1c')][_0x7b71('0x21')](_0x5e297f[_0x7b71('0x1d')],{'raw':_0x5e297f[_0x7b71('0x1e')]?_0x5e297f[_0x7b71('0x1e')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5e297f['options']?_0x5e297f[_0x7b71('0x1e')]['where']||null:null,'attributes':_0x5e297f[_0x7b71('0x1e')]?_0x5e297f['options'][_0x7b71('0x22')]||null:null,'limit':_0x5e297f[_0x7b71('0x1e')]?_0x5e297f[_0x7b71('0x1e')]['limit']||null:null})[_0x7b71('0x23')](function(_0xc29e2b){logger[_0x7b71('0x18')]('UpdateFaxMessage',_0x5e297f);logger[_0x7b71('0x13')](_0x7b71('0x24'),_0x5e297f,JSON[_0x7b71('0x20')](_0xc29e2b));_0x28841d(_0xc29e2b);})[_0x7b71('0x1a')](function(_0x3d4725){logger[_0x7b71('0x15')](_0x7b71('0x24'),_0x3d4725[_0x7b71('0x17')],_0x5e297f);_0x598102(_0x103774['error'](0x1f4,_0x3d4725[_0x7b71('0x17')]));});});};
\ No newline at end of file
+var _0x3bd7=['body','UpdateFaxMessage','update','options','raw','attributes','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','defaults','redis','request','then','FaxMessage,\x20%s,\x20%s','request\x20sent','debug','FaxMessage,\x20%s,\x20%s,\x20%s','stringify','error','message','info','catch','CreateFaxMessage','FaxMessage','create'];(function(_0x5e3b04,_0xbb6795){var _0x1fc44d=function(_0x3472a1){while(--_0x3472a1){_0x5e3b04['push'](_0x5e3b04['shift']());}};_0x1fc44d(++_0xbb6795);}(_0x3bd7,0x199));var _0x73bd=function(_0x38ced4,_0x24263f){_0x38ced4=_0x38ced4-0x0;var _0x547c07=_0x3bd7[_0x38ced4];return _0x547c07;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x73bd('0x0'));var BPromise=require(_0x73bd('0x1'));var rs=require(_0x73bd('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x73bd('0x3'))['db'];var utils=require(_0x73bd('0x4'));var logger=require(_0x73bd('0x5'))('rpc');var config=require(_0x73bd('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x73bd('0x7')][_0x73bd('0x8')]({'port':0x232a});config['redis']=_[_0x73bd('0x9')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x73bd('0xa')]));require('./faxMessage.socket')['register'](socket);function respondWithRpcPromise(_0x457ce5,_0x494479,_0xb35c78){return new BPromise(function(_0x84ae1e,_0x32bb97){return client[_0x73bd('0xb')](_0x457ce5,_0xb35c78)[_0x73bd('0xc')](function(_0xe1a796){logger['info'](_0x73bd('0xd'),_0x494479,_0x73bd('0xe'));logger[_0x73bd('0xf')](_0x73bd('0x10'),_0x494479,_0x73bd('0xe'),JSON[_0x73bd('0x11')](_0xe1a796));if(_0xe1a796['error']){if(_0xe1a796[_0x73bd('0x12')]['code']===0x1f4){logger[_0x73bd('0x12')](_0x73bd('0xd'),_0x494479,_0xe1a796[_0x73bd('0x12')][_0x73bd('0x13')]);return _0x32bb97(_0xe1a796[_0x73bd('0x12')]['message']);}logger[_0x73bd('0x12')](_0x73bd('0xd'),_0x494479,_0xe1a796[_0x73bd('0x12')][_0x73bd('0x13')]);return _0x84ae1e(_0xe1a796[_0x73bd('0x12')][_0x73bd('0x13')]);}else{logger[_0x73bd('0x14')](_0x73bd('0xd'),_0x494479,_0x73bd('0xe'));_0x84ae1e(_0xe1a796['result'][_0x73bd('0x13')]);}})[_0x73bd('0x15')](function(_0x1fbaa5){logger[_0x73bd('0x12')](_0x73bd('0xd'),_0x494479,_0x1fbaa5);_0x32bb97(_0x1fbaa5);});});}exports[_0x73bd('0x16')]=function(_0x397c60){var _0xe9120f=this;return new Promise(function(_0x444c5f,_0x57d1ec){return db[_0x73bd('0x17')][_0x73bd('0x18')](_0x397c60[_0x73bd('0x19')],{'raw':_0x397c60['options']?_0x397c60['options']['raw']===undefined?!![]:![]:!![]})[_0x73bd('0xc')](function(_0x269e84){logger['info'](_0x73bd('0x16'),_0x397c60);logger[_0x73bd('0xf')](_0x73bd('0x16'),_0x397c60,JSON[_0x73bd('0x11')](_0x269e84));_0x444c5f(_0x269e84);})[_0x73bd('0x15')](function(_0x7ae0a4){logger[_0x73bd('0x12')](_0x73bd('0x16'),_0x7ae0a4[_0x73bd('0x13')],_0x397c60);_0x57d1ec(_0xe9120f[_0x73bd('0x12')](0x1f4,_0x7ae0a4[_0x73bd('0x13')]));});});};exports[_0x73bd('0x1a')]=function(_0x12934b){var _0x473527=this;return new Promise(function(_0x388698,_0x52e910){return db['FaxMessage'][_0x73bd('0x1b')](_0x12934b[_0x73bd('0x19')],{'raw':_0x12934b['options']?_0x12934b[_0x73bd('0x1c')][_0x73bd('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x12934b[_0x73bd('0x1c')]?_0x12934b['options']['where']||null:null,'attributes':_0x12934b[_0x73bd('0x1c')]?_0x12934b[_0x73bd('0x1c')][_0x73bd('0x1e')]||null:null,'limit':_0x12934b['options']?_0x12934b[_0x73bd('0x1c')]['limit']||null:null})[_0x73bd('0xc')](function(_0x2701da){logger['info']('UpdateFaxMessage',_0x12934b);logger[_0x73bd('0xf')](_0x73bd('0x1a'),_0x12934b,JSON[_0x73bd('0x11')](_0x2701da));_0x388698(_0x2701da);})[_0x73bd('0x15')](function(_0x57ab43){logger[_0x73bd('0x12')]('UpdateFaxMessage',_0x57ab43[_0x73bd('0x13')],_0x12934b);_0x52e910(_0x473527[_0x73bd('0x12')](0x1f4,_0x57ab43[_0x73bd('0x13')]));});});};
\ No newline at end of file
index 5890d11..18dc6cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x097c=['save','remove','emit','register','./faxMessage.events'];(function(_0x1cc262,_0x2880fa){var _0x2a0b08=function(_0x4be080){while(--_0x4be080){_0x1cc262['push'](_0x1cc262['shift']());}};_0x2a0b08(++_0x2880fa);}(_0x097c,0x1d5));var _0xc097=function(_0x16b0c5,_0x483f4a){_0x16b0c5=_0x16b0c5-0x0;var _0x106fea=_0x097c[_0x16b0c5];return _0x106fea;};'use strict';var FaxMessageEvents=require(_0xc097('0x0'));var events=[_0xc097('0x1'),_0xc097('0x2'),'update'];function createListener(_0x1eb862,_0x5b478f){return function(_0x23e66a){_0x5b478f[_0xc097('0x3')](_0x1eb862,_0x23e66a);};}function removeListener(_0x5aa3c1,_0x265284){return function(){FaxMessageEvents['removeListener'](_0x5aa3c1,_0x265284);};}exports[_0xc097('0x4')]=function(_0x3c9603){for(var _0x31bc9a=0x0,_0x32493e=events['length'];_0x31bc9a<_0x32493e;_0x31bc9a++){var _0x3f67a4=events[_0x31bc9a];var _0x4d95d9=createListener('faxMessage:'+_0x3f67a4,_0x3c9603);FaxMessageEvents['on'](_0x3f67a4,_0x4d95d9);}};
\ No newline at end of file
+var _0xf3ff=['./faxMessage.events','remove','update','emit','removeListener','register'];(function(_0x4bb1b3,_0x308e9a){var _0x33b172=function(_0x49a2ec){while(--_0x49a2ec){_0x4bb1b3['push'](_0x4bb1b3['shift']());}};_0x33b172(++_0x308e9a);}(_0xf3ff,0xae));var _0xff3f=function(_0x157702,_0x344793){_0x157702=_0x157702-0x0;var _0x43ec72=_0xf3ff[_0x157702];return _0x43ec72;};'use strict';var FaxMessageEvents=require(_0xff3f('0x0'));var events=['save',_0xff3f('0x1'),_0xff3f('0x2')];function createListener(_0x30fe31,_0x3772c2){return function(_0x16d95d){_0x3772c2[_0xff3f('0x3')](_0x30fe31,_0x16d95d);};}function removeListener(_0x4aa1dc,_0x2c62cc){return function(){FaxMessageEvents[_0xff3f('0x4')](_0x4aa1dc,_0x2c62cc);};}exports[_0xff3f('0x5')]=function(_0x56208b){for(var _0x3591f9=0x0,_0x45a86f=events['length'];_0x3591f9<_0x45a86f;_0x3591f9++){var _0x465c8a=events[_0x3591f9];var _0x1543bf=createListener('faxMessage:'+_0x465c8a,_0x56208b);FaxMessageEvents['on'](_0x465c8a,_0x1543bf);}};
\ No newline at end of file
index 139d8ae..b7b2f72 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53ec=['delete','destroy','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','./faxMessage.controller','get','index','/describe','isAuthenticated','/:id','show','/:id/download','download','post','fax','put','update','accept','/:id/reject','reject'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x53ec,0x192));var _0xc53e=function(_0xb4788,_0x1efb8d){_0xb4788=_0xb4788-0x0;var _0xd49d21=_0x53ec[_0xb4788];return _0xd49d21;};'use strict';var multer=require(_0xc53e('0x0'));var util=require(_0xc53e('0x1'));var path=require(_0xc53e('0x2'));var timeout=require(_0xc53e('0x3'));var express=require(_0xc53e('0x4'));var router=express[_0xc53e('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xc53e('0x6'));var config=require('../../config/environment');var controller=require(_0xc53e('0x7'));router[_0xc53e('0x8')]('/',auth['isAuthenticated'](),controller[_0xc53e('0x9')]);router['get'](_0xc53e('0xa'),auth[_0xc53e('0xb')](),controller['describe']);router[_0xc53e('0x8')](_0xc53e('0xc'),auth[_0xc53e('0xb')](),controller[_0xc53e('0xd')]);router[_0xc53e('0x8')](_0xc53e('0xe'),auth[_0xc53e('0xb')](),controller[_0xc53e('0xf')]);router[_0xc53e('0x10')]('/',auth['isAuthenticated'](),interaction['tracked'](_0xc53e('0x11'),'faxmessage:create'),controller['create']);router[_0xc53e('0x12')](_0xc53e('0xc'),auth[_0xc53e('0xb')](),controller[_0xc53e('0x13')]);router['put']('/:id/accept',auth[_0xc53e('0xb')](),controller[_0xc53e('0x14')]);router[_0xc53e('0x12')](_0xc53e('0x15'),auth[_0xc53e('0xb')](),controller[_0xc53e('0x16')]);router[_0xc53e('0x17')](_0xc53e('0xc'),auth[_0xc53e('0xb')](),controller[_0xc53e('0x18')]);module['exports']=router;
\ No newline at end of file
+var _0x5496=['create','put','/:id/accept','accept','/:id/reject','reject','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','./faxMessage.controller','get','/describe','describe','/:id','show','/:id/download','isAuthenticated','download','post','fax','faxmessage:create'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0x5496,0x175));var _0x6549=function(_0x4e52d4,_0x36d1c5){_0x4e52d4=_0x4e52d4-0x0;var _0x58e79c=_0x5496[_0x4e52d4];return _0x58e79c;};'use strict';var multer=require(_0x6549('0x0'));var util=require(_0x6549('0x1'));var path=require(_0x6549('0x2'));var timeout=require(_0x6549('0x3'));var express=require(_0x6549('0x4'));var router=express['Router']();var auth=require(_0x6549('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x6549('0x6'));var controller=require(_0x6549('0x7'));router[_0x6549('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0x6549('0x8')](_0x6549('0x9'),auth['isAuthenticated'](),controller[_0x6549('0xa')]);router[_0x6549('0x8')](_0x6549('0xb'),auth['isAuthenticated'](),controller[_0x6549('0xc')]);router[_0x6549('0x8')](_0x6549('0xd'),auth[_0x6549('0xe')](),controller[_0x6549('0xf')]);router[_0x6549('0x10')]('/',auth['isAuthenticated'](),interaction['tracked'](_0x6549('0x11'),_0x6549('0x12')),controller[_0x6549('0x13')]);router[_0x6549('0x14')](_0x6549('0xb'),auth['isAuthenticated'](),controller['update']);router[_0x6549('0x14')](_0x6549('0x15'),auth['isAuthenticated'](),controller[_0x6549('0x16')]);router[_0x6549('0x14')](_0x6549('0x17'),auth[_0x6549('0xe')](),controller[_0x6549('0x18')]);router[_0x6549('0x19')]('/:id',auth['isAuthenticated'](),controller[_0x6549('0x1a')]);module[_0x6549('0x1b')]=router;
\ No newline at end of file
index 86e1fe7..f348446 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7f0=['sequelize','exports','STRING','name','INTEGER','ENUM','rrmemory','roundrobin'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xc7f0,0x130));var _0x0c7f=function(_0x213213,_0x337d60){_0x213213=_0x213213-0x0;var _0x204b9b=_0xc7f0[_0x213213];return _0x204b9b;};'use strict';var Sequelize=require(_0x0c7f('0x0'));module[_0x0c7f('0x1')]={'name':{'type':Sequelize[_0x0c7f('0x2')],'unique':_0x0c7f('0x3'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x0c7f('0x2')]},'timeout':{'type':Sequelize[_0x0c7f('0x4')],'allowNull':![],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x0c7f('0x5')](_0x0c7f('0x6'),'beepall',_0x0c7f('0x7')),'allowNull':![]},'lastAgent':{'type':Sequelize[_0x0c7f('0x4')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x3ec0=['roundrobin','sequelize','exports','STRING','name','INTEGER','rrmemory'];(function(_0x12699c,_0xf9dd49){var _0x54360e=function(_0xa4d495){while(--_0xa4d495){_0x12699c['push'](_0x12699c['shift']());}};_0x54360e(++_0xf9dd49);}(_0x3ec0,0xe1));var _0x03ec=function(_0x2ab538,_0x1a4549){_0x2ab538=_0x2ab538-0x0;var _0x1c2074=_0x3ec0[_0x2ab538];return _0x1c2074;};'use strict';var Sequelize=require(_0x03ec('0x0'));module[_0x03ec('0x1')]={'name':{'type':Sequelize[_0x03ec('0x2')],'unique':_0x03ec('0x3'),'allowNull':![],'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0x03ec('0x4')],'allowNull':![],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x03ec('0x5'),'beepall',_0x03ec('0x6')),'allowNull':![]},'lastAgent':{'type':Sequelize[_0x03ec('0x4')],'defaultValue':0x0}};
\ No newline at end of file
index 0d4e137..466775b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2630=['../../config/utils','../../config/environment','../../mysqldb','redis','defaults','socket.io-emitter','./faxQueue.socket','sendStatus','end','status','json','count','offset','set','Content-Range','save','update','then','destroy','FaxQueues','UserProfileResource','error','stack','name','send','FaxQueue','rawAttributes','model','keys','filters','intersection','query','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','merge','map','key','field','filter','options','includeAll','rows','catch','params','include','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','findOne','UserFaxQueue','FaxQueueId','findAll','User','findAndCountAll','UserId','agent','faxPause','updatedAt','createdAt','format','%s/%s','getTeams','Team','addTeams','union','Agents','addAgents','removeTeams','ids','omit','spread','emit','userFaxQueue:save','removeAgents','isArray','userFaxQueue:remove','getAgents','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api'];(function(_0xbca1b1,_0x33f0ce){var _0x4e1686=function(_0x58a80c){while(--_0x58a80c){_0xbca1b1['push'](_0xbca1b1['shift']());}};_0x4e1686(++_0x33f0ce);}(_0x2630,0x1b9));var _0x0263=function(_0x2466b0,_0x156c25){_0x2466b0=_0x2466b0-0x0;var _0x133e92=_0x2630[_0x2466b0];return _0x133e92;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0263('0x0'));var rimraf=require(_0x0263('0x1'));var zipdir=require(_0x0263('0x2'));var jsonpatch=require(_0x0263('0x3'));var rp=require(_0x0263('0x4'));var moment=require('moment');var BPromise=require(_0x0263('0x5'));var Mustache=require(_0x0263('0x6'));var util=require(_0x0263('0x7'));var path=require(_0x0263('0x8'));var sox=require(_0x0263('0x9'));var csv=require('to-csv');var ejs=require(_0x0263('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x0263('0xb'));var crypto=require(_0x0263('0xc'));var jsforce=require(_0x0263('0xd'));var deskjs=require(_0x0263('0xe'));var toCsv=require('to-csv');var querystring=require(_0x0263('0xf'));var Papa=require(_0x0263('0x10'));var authService=require(_0x0263('0x11'));var hardwareService=require(_0x0263('0x12'));var Redis=require(_0x0263('0x13'));var qs=require(_0x0263('0x14'));var logger=require(_0x0263('0x15'))(_0x0263('0x16'));var utils=require(_0x0263('0x17'));var config=require(_0x0263('0x18'));var db=require(_0x0263('0x19'))['db'];config[_0x0263('0x1a')]=_[_0x0263('0x1b')](config[_0x0263('0x1a')],{'host':'localhost','port':0x18eb});var socket=require(_0x0263('0x1c'))(new Redis(config[_0x0263('0x1a')]));require(_0x0263('0x1d'))['register'](socket);function respondWithStatusCode(_0xc062c8,_0x36e315){_0x36e315=_0x36e315||0xcc;return function(_0x61dc28){if(_0x61dc28){return _0xc062c8[_0x0263('0x1e')](_0x36e315);}return _0xc062c8['status'](_0x36e315)[_0x0263('0x1f')]();};}function respondWithResult(_0x165409,_0x45cf76){_0x45cf76=_0x45cf76||0xc8;return function(_0x252550){if(_0x252550){return _0x165409[_0x0263('0x20')](_0x45cf76)[_0x0263('0x21')](_0x252550);}};}function respondWithFilteredResult(_0x1906f1,_0x12ab0e){return function(_0x654827){if(_0x654827){var _0x35938e=_0x654827[_0x0263('0x22')],_0x4f5494=_0x12ab0e[_0x0263('0x23')],_0x2a9680=_0x12ab0e[_0x0263('0x23')]+_0x12ab0e['limit'],_0x2bbcec;if(_0x2a9680>=_0x35938e){_0x2a9680=_0x35938e;_0x2bbcec=0xc8;}else{_0x2bbcec=0xce;}_0x1906f1[_0x0263('0x20')](_0x2bbcec);return _0x1906f1[_0x0263('0x24')](_0x0263('0x25'),_0x4f5494+'-'+_0x2a9680+'/'+_0x35938e)['json'](_0x654827);}return null;};}function patchUpdates(_0x43bfd1){return function(_0x2b3492){try{jsonpatch['apply'](_0x2b3492,_0x43bfd1,!![]);}catch(_0x17cea2){return BPromise['reject'](_0x17cea2);}return _0x2b3492[_0x0263('0x26')]();};}function saveUpdates(_0x56dc20,_0x5d3033){return function(_0x466191){if(_0x466191){return _0x466191[_0x0263('0x27')](_0x56dc20)[_0x0263('0x28')](function(_0x579433){return _0x579433;});}return null;};}function removeEntity(_0x45059c,_0x397fdd){return function(_0x3567df){if(_0x3567df){return _0x3567df[_0x0263('0x29')]()[_0x0263('0x28')](function(){var _0x229559=_0x3567df['get']({'plain':!![]});var _0x33808f=_0x0263('0x2a');return db[_0x0263('0x2b')][_0x0263('0x29')]({'where':{'type':_0x33808f,'resourceId':_0x229559['id']}})[_0x0263('0x28')](function(){return _0x3567df;});})[_0x0263('0x28')](function(){_0x45059c[_0x0263('0x20')](0xcc)['end']();});}};}function handleEntityNotFound(_0x28eba0,_0x2d31e8){return function(_0x1c654f){if(!_0x1c654f){_0x28eba0[_0x0263('0x1e')](0x194);}return _0x1c654f;};}function handleError(_0x399be4,_0x3cf8cd){_0x3cf8cd=_0x3cf8cd||0x1f4;return function(_0x1b5483){logger[_0x0263('0x2c')](_0x1b5483[_0x0263('0x2d')]);if(_0x1b5483[_0x0263('0x2e')]){delete _0x1b5483[_0x0263('0x2e')];}_0x399be4[_0x0263('0x20')](_0x3cf8cd)[_0x0263('0x2f')](_0x1b5483);};}exports['index']=function(_0x47dc17,_0x5d9179){var _0x80e570={},_0x5c57e9={},_0x434c28={'count':0x0,'rows':[]};var _0x115192=db[_0x0263('0x30')][_0x0263('0x31')];_0x5c57e9[_0x0263('0x32')]=_[_0x0263('0x33')](_0x115192);_0x5c57e9['query']=_[_0x0263('0x33')](_0x47dc17['query']);_0x5c57e9[_0x0263('0x34')]=_[_0x0263('0x35')](_0x5c57e9[_0x0263('0x32')],_0x5c57e9[_0x0263('0x36')]);_0x80e570[_0x0263('0x37')]=_[_0x0263('0x35')](_0x5c57e9['model'],qs[_0x0263('0x38')](_0x47dc17[_0x0263('0x36')][_0x0263('0x38')]));_0x80e570[_0x0263('0x37')]=_0x80e570[_0x0263('0x37')][_0x0263('0x39')]?_0x80e570[_0x0263('0x37')]:_0x5c57e9['model'];if(!_0x47dc17[_0x0263('0x36')][_0x0263('0x3a')](_0x0263('0x3b'))){_0x80e570[_0x0263('0x3c')]=qs['limit'](_0x47dc17[_0x0263('0x36')][_0x0263('0x3c')]);_0x80e570[_0x0263('0x23')]=qs[_0x0263('0x23')](_0x47dc17[_0x0263('0x36')]['offset']);}_0x80e570[_0x0263('0x3d')]=qs[_0x0263('0x3e')](_0x47dc17['query'][_0x0263('0x3e')]);_0x80e570[_0x0263('0x3f')]=qs['filters'](_[_0x0263('0x40')](_0x47dc17[_0x0263('0x36')],_0x5c57e9[_0x0263('0x34')]));if(_0x47dc17['query']['filter']){_0x80e570[_0x0263('0x3f')]=_[_0x0263('0x41')](_0x80e570[_0x0263('0x3f')],{'$or':_[_0x0263('0x42')](_0x115192,function(_0x4ab305){if(_0x4ab305['type'][_0x0263('0x43')]!=='VIRTUAL'){var _0x54f152={};_0x54f152[_0x4ab305[_0x0263('0x44')]]={'$like':'%'+_0x47dc17['query'][_0x0263('0x45')]+'%'};return _0x54f152;}})});}_0x80e570=_[_0x0263('0x41')]({},_0x80e570,_0x47dc17[_0x0263('0x46')]);var _0x4d1932={'where':_0x80e570[_0x0263('0x3f')]};return db[_0x0263('0x30')][_0x0263('0x22')](_0x4d1932)[_0x0263('0x28')](function(_0x5411f5){_0x434c28['count']=_0x5411f5;if(_0x47dc17[_0x0263('0x36')][_0x0263('0x47')]){_0x80e570['include']=[{'all':!![]}];}return db[_0x0263('0x30')]['findAll'](_0x80e570);})['then'](function(_0x1bc5d9){_0x434c28[_0x0263('0x48')]=_0x1bc5d9;return _0x434c28;})[_0x0263('0x28')](respondWithFilteredResult(_0x5d9179,_0x80e570))[_0x0263('0x49')](handleError(_0x5d9179,null));};exports['show']=function(_0x5a8d09,_0xf90645){var _0x4ede3b={'raw':!![],'where':{'id':_0x5a8d09[_0x0263('0x4a')]['id']}},_0x3d71bd={};_0x3d71bd[_0x0263('0x32')]=_[_0x0263('0x33')](db[_0x0263('0x30')]['rawAttributes']);_0x3d71bd[_0x0263('0x36')]=_[_0x0263('0x33')](_0x5a8d09[_0x0263('0x36')]);_0x3d71bd[_0x0263('0x34')]=_[_0x0263('0x35')](_0x3d71bd['model'],_0x3d71bd[_0x0263('0x36')]);_0x4ede3b[_0x0263('0x37')]=_[_0x0263('0x35')](_0x3d71bd['model'],qs[_0x0263('0x38')](_0x5a8d09[_0x0263('0x36')][_0x0263('0x38')]));_0x4ede3b[_0x0263('0x37')]=_0x4ede3b[_0x0263('0x37')][_0x0263('0x39')]?_0x4ede3b['attributes']:_0x3d71bd['model'];if(_0x5a8d09[_0x0263('0x36')][_0x0263('0x47')]){_0x4ede3b[_0x0263('0x4b')]=[{'all':!![]}];}_0x4ede3b=_[_0x0263('0x41')]({},_0x4ede3b,_0x5a8d09[_0x0263('0x46')]);return db[_0x0263('0x30')][_0x0263('0x4c')](_0x4ede3b)[_0x0263('0x28')](handleEntityNotFound(_0xf90645,null))[_0x0263('0x28')](respondWithResult(_0xf90645,null))[_0x0263('0x49')](handleError(_0xf90645,null));};exports[_0x0263('0x4d')]=function(_0x24b2c7,_0x314b09){return db[_0x0263('0x30')][_0x0263('0x4d')](_0x24b2c7[_0x0263('0x4e')],{})[_0x0263('0x28')](function(_0x50ade6){var _0x567d23=_0x24b2c7[_0x0263('0x4f')][_0x0263('0x50')]({'plain':!![]});if(!_0x567d23)throw new Error(_0x0263('0x51'));if(_0x567d23[_0x0263('0x52')]===_0x0263('0x4f')){var _0x2ca365=_0x50ade6[_0x0263('0x50')]({'plain':!![]});var _0x584267=_0x0263('0x2a');return db[_0x0263('0x53')][_0x0263('0x4c')]({'where':{'name':_0x584267,'userProfileId':_0x567d23['userProfileId']},'raw':!![]})[_0x0263('0x28')](function(_0x4ff9ce){if(_0x4ff9ce&&_0x4ff9ce[_0x0263('0x54')]===0x0){return db[_0x0263('0x2b')][_0x0263('0x4d')]({'name':_0x2ca365[_0x0263('0x2e')],'resourceId':_0x2ca365['id'],'type':_0x4ff9ce[_0x0263('0x2e')],'sectionId':_0x4ff9ce['id']},{})[_0x0263('0x28')](function(){return _0x50ade6;});}else{return _0x50ade6;}})[_0x0263('0x49')](function(_0x20354f){logger[_0x0263('0x2c')](_0x0263('0x55'),_0x20354f);throw _0x20354f;});}return _0x50ade6;})[_0x0263('0x28')](respondWithResult(_0x314b09,0xc9))[_0x0263('0x49')](handleError(_0x314b09,null));};exports[_0x0263('0x27')]=function(_0x5bffba,_0x36068b){if(_0x5bffba[_0x0263('0x4e')]['id']){delete _0x5bffba[_0x0263('0x4e')]['id'];}return db['FaxQueue']['find']({'where':{'id':_0x5bffba[_0x0263('0x4a')]['id']}})[_0x0263('0x28')](handleEntityNotFound(_0x36068b,null))[_0x0263('0x28')](saveUpdates(_0x5bffba[_0x0263('0x4e')],null))[_0x0263('0x28')](respondWithResult(_0x36068b,null))[_0x0263('0x49')](handleError(_0x36068b,null));};exports[_0x0263('0x29')]=function(_0x472629,_0x2f2070){return db[_0x0263('0x30')][_0x0263('0x4c')]({'where':{'id':_0x472629['params']['id']}})['then'](handleEntityNotFound(_0x2f2070,null))[_0x0263('0x28')](removeEntity(_0x2f2070,null))[_0x0263('0x49')](handleError(_0x2f2070,null));};exports[_0x0263('0x56')]=function(_0x557c89,_0x400111){return db[_0x0263('0x30')]['describe']()['then'](respondWithResult(_0x400111,null))[_0x0263('0x49')](handleError(_0x400111,null));};exports['getMembers']=function(_0xe81028,_0x16f4f6,_0x413baa){var _0x536c9e={'raw':!![],'where':{}},_0x579a8b={},_0x3ee9b5;return db[_0x0263('0x30')][_0x0263('0x57')]({'where':{'id':_0xe81028[_0x0263('0x4a')]['id']}})['then'](handleEntityNotFound(_0x16f4f6,null))[_0x0263('0x28')](function(_0x5a3244){if(_0x5a3244){_0x3ee9b5=_0x5a3244[_0x0263('0x50')]({'plain':!![]});_0x579a8b[_0x0263('0x32')]=_[_0x0263('0x33')](db[_0x0263('0x58')][_0x0263('0x31')]);_0x579a8b['query']=_[_0x0263('0x33')](_0xe81028['query']);_0x579a8b[_0x0263('0x34')]=_['intersection'](_0x579a8b['model'],_0x579a8b['query']);_0x536c9e[_0x0263('0x37')]=_['intersection'](_0x579a8b[_0x0263('0x32')],qs[_0x0263('0x38')](_0xe81028[_0x0263('0x36')]['fields']));_0x536c9e['attributes']=_0x536c9e[_0x0263('0x37')][_0x0263('0x39')]?_0x536c9e['attributes']:_0x579a8b[_0x0263('0x32')];if(!_0xe81028[_0x0263('0x36')]['hasOwnProperty'](_0x0263('0x3b'))){_0x536c9e[_0x0263('0x3c')]=qs[_0x0263('0x3c')](_0xe81028[_0x0263('0x36')][_0x0263('0x3c')]);_0x536c9e[_0x0263('0x23')]=qs[_0x0263('0x23')](_0xe81028[_0x0263('0x36')][_0x0263('0x23')]);}_0x536c9e[_0x0263('0x3d')]=qs['sort'](_0xe81028['query'][_0x0263('0x3e')]);_0x536c9e['where']=qs[_0x0263('0x34')](_['pick'](_0xe81028[_0x0263('0x36')],_0x579a8b['filters']));_0x536c9e[_0x0263('0x3f')][_0x0263('0x59')]=_0x5a3244['id'];if(_0xe81028[_0x0263('0x36')][_0x0263('0x45')]){_0x536c9e[_0x0263('0x3f')]=_[_0x0263('0x41')](_0x536c9e['where'],{'$or':_[_0x0263('0x42')](_0x536c9e['attributes'],function(_0x3c29bc){var _0x4c3979={};_0x4c3979[_0x3c29bc]={'$like':'%'+_0xe81028[_0x0263('0x36')][_0x0263('0x45')]+'%'};return _0x4c3979;})});}_0x536c9e=_['merge']({},_0x536c9e,_0xe81028[_0x0263('0x46')]);return db[_0x0263('0x58')][_0x0263('0x5a')](_0x536c9e);}})[_0x0263('0x28')](function(_0x2d5c76){if(_0x2d5c76){return db[_0x0263('0x5b')][_0x0263('0x5c')]({'where':{'id':_['map'](_0x2d5c76,_0x0263('0x5d')),'role':_0x0263('0x5e')},'attributes':['id','name',_0x0263('0x5f'),_0x0263('0x60'),_0x0263('0x61')]});}})[_0x0263('0x28')](function(_0x40ba65){if(_0x40ba65){return{'count':_0x40ba65[_0x0263('0x22')],'rows':_[_0x0263('0x42')](_0x40ba65[_0x0263('0x48')],function(_0x4820e6){return{'membername':_0x4820e6[_0x0263('0x2e')],'UserId':_0x4820e6['id'],'queue_name':_0x3ee9b5[_0x0263('0x2e')],'FaxQueueId':_0x3ee9b5['id'],'interface':util[_0x0263('0x62')](_0x0263('0x63'),'SIP',_0x4820e6[_0x0263('0x2e')]),'penalty':0x0,'paused':_0x4820e6[_0x0263('0x5f')],'createdAt':_0x4820e6[_0x0263('0x61')],'updatedAt':_0x4820e6[_0x0263('0x60')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x0263('0x28')](respondWithFilteredResult(_0x16f4f6,_0x536c9e))[_0x0263('0x49')](handleError(_0x16f4f6,null));};exports[_0x0263('0x64')]=function(_0x5fcf01,_0x417bd5,_0x3eb085){var _0x3bd65d={};var _0x5c46e0={};var _0x314dc9;var _0xa8b94c;return db[_0x0263('0x30')][_0x0263('0x57')]({'where':{'id':_0x5fcf01[_0x0263('0x4a')]['id']}})[_0x0263('0x28')](handleEntityNotFound(_0x417bd5,null))[_0x0263('0x28')](function(_0x5f57ef){if(_0x5f57ef){_0x314dc9=_0x5f57ef;_0x5c46e0[_0x0263('0x32')]=_[_0x0263('0x33')](db[_0x0263('0x65')][_0x0263('0x31')]);_0x5c46e0['query']=_[_0x0263('0x33')](_0x5fcf01[_0x0263('0x36')]);_0x5c46e0['filters']=_[_0x0263('0x35')](_0x5c46e0['model'],_0x5c46e0[_0x0263('0x36')]);_0x3bd65d[_0x0263('0x37')]=_[_0x0263('0x35')](_0x5c46e0['model'],qs[_0x0263('0x38')](_0x5fcf01[_0x0263('0x36')][_0x0263('0x38')]));_0x3bd65d[_0x0263('0x37')]=_0x3bd65d[_0x0263('0x37')][_0x0263('0x39')]?_0x3bd65d['attributes']:_0x5c46e0[_0x0263('0x32')];_0x3bd65d[_0x0263('0x3d')]=qs[_0x0263('0x3e')](_0x5fcf01[_0x0263('0x36')][_0x0263('0x3e')]);_0x3bd65d[_0x0263('0x3f')]=qs[_0x0263('0x34')](_['pick'](_0x5fcf01['query'],_0x5c46e0[_0x0263('0x34')]));if(_0x5fcf01[_0x0263('0x36')][_0x0263('0x45')]){_0x3bd65d[_0x0263('0x3f')]=_[_0x0263('0x41')](_0x3bd65d['where'],{'$or':_[_0x0263('0x42')](_0x3bd65d[_0x0263('0x37')],function(_0xead8a0){var _0x3926d2={};_0x3926d2[_0xead8a0]={'$like':'%'+_0x5fcf01[_0x0263('0x36')][_0x0263('0x45')]+'%'};return _0x3926d2;})});}_0x3bd65d=_[_0x0263('0x41')]({},_0x3bd65d,_0x5fcf01['options']);return _0x314dc9[_0x0263('0x64')](_0x3bd65d);}})['then'](function(_0x5ded5f){if(_0x5ded5f){_0xa8b94c=_0x5ded5f['length'];if(!_0x5fcf01['query'][_0x0263('0x3a')](_0x0263('0x3b'))){_0x3bd65d[_0x0263('0x3c')]=qs['limit'](_0x5fcf01[_0x0263('0x36')][_0x0263('0x3c')]);_0x3bd65d[_0x0263('0x23')]=qs[_0x0263('0x23')](_0x5fcf01[_0x0263('0x36')][_0x0263('0x23')]);}return _0x314dc9['getTeams'](_0x3bd65d);}})[_0x0263('0x28')](function(_0x42983d){if(_0x42983d){return _0x42983d?{'count':_0xa8b94c,'rows':_0x42983d}:null;}})[_0x0263('0x28')](respondWithResult(_0x417bd5,null))['catch'](handleError(_0x417bd5,null));};exports[_0x0263('0x66')]=function(_0x1dcb32,_0xe3b6d,_0x293f7f){var _0x132471=[];var _0x2e8602;return db[_0x0263('0x65')][_0x0263('0x5a')]({'where':{'id':_0x1dcb32[_0x0263('0x4e')]['ids']},'attributes':['id'],'include':[{'model':db[_0x0263('0x5b')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x0263('0x28')](function(_0x1a221d){if(_0x1a221d){for(var _0x59dded=0x0;_0x59dded<_0x1a221d[_0x0263('0x39')];_0x59dded+=0x1){for(var _0x1c2c5d=0x0;_0x1c2c5d<_0x1a221d[_0x59dded]['Agents'][_0x0263('0x39')];_0x1c2c5d+=0x1){_0x132471=_[_0x0263('0x67')](_0x132471,[_0x1a221d[_0x59dded][_0x0263('0x68')][_0x1c2c5d]['id']]);}}return _0x132471;}})[_0x0263('0x28')](function(_0x3e189c){if(_0x3e189c){return db[_0x0263('0x30')][_0x0263('0x4c')]({'where':{'id':_0x1dcb32['params']['id']}});}})[_0x0263('0x28')](function(_0x286650){if(_0x286650){_0x2e8602=_0x286650;return _0x2e8602[_0x0263('0x69')](_0x132471,{'penalty':_0x1dcb32[_0x0263('0x4e')]['penalty']});}})[_0x0263('0x28')](function(_0x44ec0d){if(_0x44ec0d){return _0x2e8602[_0x0263('0x66')](_0x1dcb32[_0x0263('0x4e')]['ids']);}})[_0x0263('0x28')](handleEntityNotFound(_0xe3b6d,null))['then'](respondWithStatusCode(_0xe3b6d,null))[_0x0263('0x49')](handleError(_0xe3b6d,null));};exports[_0x0263('0x6a')]=function(_0x4f58e1,_0x44cfe5,_0xe155bd){var _0x5b28c4=[];var _0x1837ba;return db[_0x0263('0x65')]['findAll']({'where':{'id':_0x4f58e1[_0x0263('0x36')][_0x0263('0x6b')]},'attributes':['id'],'include':[{'model':db[_0x0263('0x5b')],'as':_0x0263('0x68'),'attributes':['id'],'raw':!![]}]})[_0x0263('0x28')](function(_0x4a5744){if(_0x4a5744){for(var _0x2c25de=0x0;_0x2c25de<_0x4a5744[_0x0263('0x39')];_0x2c25de+=0x1){for(var _0x3cad5b=0x0;_0x3cad5b<_0x4a5744[_0x2c25de][_0x0263('0x68')][_0x0263('0x39')];_0x3cad5b+=0x1){_0x5b28c4=_['union'](_0x5b28c4,[_0x4a5744[_0x2c25de][_0x0263('0x68')][_0x3cad5b]['id']]);}}return _0x5b28c4;}})[_0x0263('0x28')](function(_0x33996f){if(_0x33996f){return db[_0x0263('0x30')][_0x0263('0x4c')]({'where':{'id':_0x4f58e1[_0x0263('0x4a')]['id']}});}})[_0x0263('0x28')](function(_0x5fdef8){if(_0x5fdef8){_0x1837ba=_0x5fdef8;return _0x1837ba['removeAgents'](_0x5b28c4);}})[_0x0263('0x28')](function(_0x1c45a3){if(_0x1837ba){return _0x1837ba['removeTeams'](_0x4f58e1[_0x0263('0x36')][_0x0263('0x6b')]);}})['then'](handleEntityNotFound(_0x44cfe5,null))[_0x0263('0x28')](respondWithStatusCode(_0x44cfe5,null))[_0x0263('0x49')](handleError(_0x44cfe5,null));};exports[_0x0263('0x69')]=function(_0x46e61f,_0x56b22f,_0x50c3a5){return db[_0x0263('0x30')][_0x0263('0x4c')]({'where':{'id':_0x46e61f[_0x0263('0x4a')]['id']}})[_0x0263('0x28')](handleEntityNotFound(_0x56b22f,null))[_0x0263('0x28')](function(_0x1d0bc9){if(_0x1d0bc9){return _0x1d0bc9['addAgents'](_0x46e61f[_0x0263('0x4e')][_0x0263('0x6b')],_[_0x0263('0x6c')](_0x46e61f[_0x0263('0x4e')],[_0x0263('0x6b'),'id'])||{})[_0x0263('0x6d')](function(_0x506082){for(var _0x4f5f06=0x0;_0x4f5f06<_0x46e61f[_0x0263('0x4e')][_0x0263('0x6b')][_0x0263('0x39')];_0x4f5f06+=0x1){socket[_0x0263('0x6e')](_0x0263('0x6f'),{'UserId':_0x46e61f[_0x0263('0x4e')][_0x0263('0x6b')][_0x4f5f06],'FaxQueueId':_0x46e61f[_0x0263('0x4a')]['id']});}return _0x506082;});}})[_0x0263('0x28')](respondWithResult(_0x56b22f,null))[_0x0263('0x49')](handleError(_0x56b22f,null));};exports['removeAgents']=function(_0x223858,_0xa4d05f,_0x16628c){var _0x13340b;return db['FaxQueue'][_0x0263('0x4c')]({'where':{'id':_0x223858[_0x0263('0x4a')]['id']}})[_0x0263('0x28')](handleEntityNotFound(_0xa4d05f,null))[_0x0263('0x28')](function(_0x1a8a99){if(_0x1a8a99){return _0x1a8a99[_0x0263('0x70')](_0x223858['query'][_0x0263('0x6b')])[_0x0263('0x28')](function(_0x4beabd){if(_[_0x0263('0x71')](_0x223858['query'][_0x0263('0x6b')])){for(var _0x405a56=0x0;_0x405a56<_0x223858[_0x0263('0x36')][_0x0263('0x6b')]['length'];_0x405a56+=0x1){socket[_0x0263('0x6e')](_0x0263('0x72'),{'UserId':_0x223858[_0x0263('0x36')][_0x0263('0x6b')][_0x405a56],'FaxQueueId':_0x223858[_0x0263('0x4a')]['id']});}}else{socket[_0x0263('0x6e')](_0x0263('0x72'),{'UserId':_0x223858[_0x0263('0x36')][_0x0263('0x6b')],'FaxQueueId':_0x223858[_0x0263('0x4a')]['id']});}});}})['then'](respondWithStatusCode(_0xa4d05f,null))[_0x0263('0x49')](handleError(_0xa4d05f,null));};exports[_0x0263('0x73')]=function(_0x170343,_0x4e9e7f,_0x347b0f){var _0x3876ff={};var _0x273f41={};var _0x2de0f5;var _0x32c42c;return db[_0x0263('0x30')]['findOne']({'where':{'id':_0x170343[_0x0263('0x4a')]['id']}})[_0x0263('0x28')](handleEntityNotFound(_0x4e9e7f,null))[_0x0263('0x28')](function(_0x3f32ff){if(_0x3f32ff){_0x2de0f5=_0x3f32ff;_0x273f41[_0x0263('0x32')]=_[_0x0263('0x33')](db[_0x0263('0x5b')]['rawAttributes']);_0x273f41[_0x0263('0x36')]=_[_0x0263('0x33')](_0x170343[_0x0263('0x36')]);_0x273f41[_0x0263('0x34')]=_[_0x0263('0x35')](_0x273f41['model'],_0x273f41[_0x0263('0x36')]);_0x3876ff[_0x0263('0x37')]=_[_0x0263('0x35')](_0x273f41[_0x0263('0x32')],qs[_0x0263('0x38')](_0x170343[_0x0263('0x36')][_0x0263('0x38')]));_0x3876ff[_0x0263('0x37')]=_0x3876ff[_0x0263('0x37')][_0x0263('0x39')]?_0x3876ff[_0x0263('0x37')]:_0x273f41[_0x0263('0x32')];_0x3876ff[_0x0263('0x3d')]=qs['sort'](_0x170343['query'][_0x0263('0x3e')]);_0x3876ff[_0x0263('0x3f')]=qs['filters'](_['pick'](_0x170343[_0x0263('0x36')],_0x273f41['filters']));if(_0x170343[_0x0263('0x36')][_0x0263('0x45')]){_0x3876ff[_0x0263('0x3f')]=_[_0x0263('0x41')](_0x3876ff['where'],{'$or':_['map'](_0x3876ff['attributes'],function(_0xa90982){var _0x464369={};_0x464369[_0xa90982]={'$like':'%'+_0x170343['query']['filter']+'%'};return _0x464369;})});}_0x3876ff=_[_0x0263('0x41')]({},_0x3876ff,_0x170343[_0x0263('0x46')]);return _0x2de0f5[_0x0263('0x73')](_0x3876ff);}})[_0x0263('0x28')](function(_0x50eda4){if(_0x50eda4){_0x32c42c=_0x50eda4[_0x0263('0x39')];if(!_0x170343[_0x0263('0x36')]['hasOwnProperty'](_0x0263('0x3b'))){_0x3876ff[_0x0263('0x3c')]=qs[_0x0263('0x3c')](_0x170343[_0x0263('0x36')][_0x0263('0x3c')]);_0x3876ff[_0x0263('0x23')]=qs[_0x0263('0x23')](_0x170343[_0x0263('0x36')][_0x0263('0x23')]);}return _0x2de0f5[_0x0263('0x73')](_0x3876ff);}})['then'](function(_0x426468){if(_0x426468){return _0x426468?{'count':_0x32c42c,'rows':_0x426468}:null;}})[_0x0263('0x28')](respondWithResult(_0x4e9e7f,null))['catch'](handleError(_0x4e9e7f,null));};
\ No newline at end of file
+var _0xa6be=['includeAll','include','findAll','rows','catch','show','params','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','destroy','describe','getMembers','findOne','UserFaxQueue','hasOwnProperty','FaxQueueId','map','User','findAndCountAll','UserId','agent','faxPause','format','%s/%s','createdAt','getTeams','Team','rawAttributes','addTeams','ids','Agents','union','addAgents','penalty','removeTeams','spread','emit','userFaxQueue:save','removeAgents','userFaxQueue:remove','getAgents','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','socket.io-emitter','register','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','FaxQueues','UserProfileResource','sendStatus','stack','name','send','index','model','query','keys','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','filter','field','merge','options','FaxQueue'];(function(_0x4bbb98,_0x21a014){var _0x596f56=function(_0x4b3b5b){while(--_0x4b3b5b){_0x4bbb98['push'](_0x4bbb98['shift']());}};_0x596f56(++_0x21a014);}(_0xa6be,0xab));var _0xea6b=function(_0x79dcef,_0x1b9b3a){_0x79dcef=_0x79dcef-0x0;var _0x27d679=_0xa6be[_0x79dcef];return _0x27d679;};'use strict';var pdf=require(_0xea6b('0x0'));var emlformat=require(_0xea6b('0x1'));var rimraf=require(_0xea6b('0x2'));var zipdir=require(_0xea6b('0x3'));var jsonpatch=require(_0xea6b('0x4'));var rp=require(_0xea6b('0x5'));var moment=require(_0xea6b('0x6'));var BPromise=require(_0xea6b('0x7'));var Mustache=require(_0xea6b('0x8'));var util=require(_0xea6b('0x9'));var path=require('path');var sox=require(_0xea6b('0xa'));var csv=require(_0xea6b('0xb'));var ejs=require(_0xea6b('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0xea6b('0xd'));var crypto=require(_0xea6b('0xe'));var jsforce=require(_0xea6b('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xea6b('0xb'));var querystring=require(_0xea6b('0x10'));var Papa=require(_0xea6b('0x11'));var authService=require(_0xea6b('0x12'));var hardwareService=require(_0xea6b('0x13'));var Redis=require(_0xea6b('0x14'));var qs=require(_0xea6b('0x15'));var logger=require(_0xea6b('0x16'))(_0xea6b('0x17'));var utils=require(_0xea6b('0x18'));var config=require(_0xea6b('0x19'));var db=require(_0xea6b('0x1a'))['db'];config[_0xea6b('0x1b')]=_[_0xea6b('0x1c')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0xea6b('0x1d'))(new Redis(config['redis']));require('./faxQueue.socket')[_0xea6b('0x1e')](socket);function respondWithStatusCode(_0x154e9e,_0x3c7dc7){_0x3c7dc7=_0x3c7dc7||0xcc;return function(_0x13d426){if(_0x13d426){return _0x154e9e['sendStatus'](_0x3c7dc7);}return _0x154e9e[_0xea6b('0x1f')](_0x3c7dc7)[_0xea6b('0x20')]();};}function respondWithResult(_0x298426,_0xa092b3){_0xa092b3=_0xa092b3||0xc8;return function(_0x5e7431){if(_0x5e7431){return _0x298426[_0xea6b('0x1f')](_0xa092b3)[_0xea6b('0x21')](_0x5e7431);}};}function respondWithFilteredResult(_0x4a6127,_0x28484a){return function(_0x10a6d9){if(_0x10a6d9){var _0x2e53cc=_0x10a6d9[_0xea6b('0x22')],_0x5eedb6=_0x28484a[_0xea6b('0x23')],_0xa2789f=_0x28484a[_0xea6b('0x23')]+_0x28484a[_0xea6b('0x24')],_0x53aec1;if(_0xa2789f>=_0x2e53cc){_0xa2789f=_0x2e53cc;_0x53aec1=0xc8;}else{_0x53aec1=0xce;}_0x4a6127[_0xea6b('0x1f')](_0x53aec1);return _0x4a6127[_0xea6b('0x25')](_0xea6b('0x26'),_0x5eedb6+'-'+_0xa2789f+'/'+_0x2e53cc)[_0xea6b('0x21')](_0x10a6d9);}return null;};}function patchUpdates(_0x40965a){return function(_0x5b65b1){try{jsonpatch[_0xea6b('0x27')](_0x5b65b1,_0x40965a,!![]);}catch(_0xa78971){return BPromise[_0xea6b('0x28')](_0xa78971);}return _0x5b65b1[_0xea6b('0x29')]();};}function saveUpdates(_0x46d2d7,_0x4f3e25){return function(_0x54b827){if(_0x54b827){return _0x54b827[_0xea6b('0x2a')](_0x46d2d7)[_0xea6b('0x2b')](function(_0x417950){return _0x417950;});}return null;};}function removeEntity(_0x1ea965,_0x421a96){return function(_0x41d5aa){if(_0x41d5aa){return _0x41d5aa['destroy']()[_0xea6b('0x2b')](function(){var _0x4123aa=_0x41d5aa['get']({'plain':!![]});var _0x40a870=_0xea6b('0x2c');return db[_0xea6b('0x2d')]['destroy']({'where':{'type':_0x40a870,'resourceId':_0x4123aa['id']}})[_0xea6b('0x2b')](function(){return _0x41d5aa;});})['then'](function(){_0x1ea965[_0xea6b('0x1f')](0xcc)[_0xea6b('0x20')]();});}};}function handleEntityNotFound(_0x5489df,_0x58ddd8){return function(_0x3de8c1){if(!_0x3de8c1){_0x5489df[_0xea6b('0x2e')](0x194);}return _0x3de8c1;};}function handleError(_0x328137,_0x1c6a96){_0x1c6a96=_0x1c6a96||0x1f4;return function(_0x580a04){logger['error'](_0x580a04[_0xea6b('0x2f')]);if(_0x580a04[_0xea6b('0x30')]){delete _0x580a04[_0xea6b('0x30')];}_0x328137[_0xea6b('0x1f')](_0x1c6a96)[_0xea6b('0x31')](_0x580a04);};}exports[_0xea6b('0x32')]=function(_0x46424a,_0x47d301){var _0x846d21={},_0x5dacd4={},_0x3feb71={'count':0x0,'rows':[]};var _0x2a0ffa=db['FaxQueue']['rawAttributes'];_0x5dacd4[_0xea6b('0x33')]=_['keys'](_0x2a0ffa);_0x5dacd4[_0xea6b('0x34')]=_[_0xea6b('0x35')](_0x46424a[_0xea6b('0x34')]);_0x5dacd4[_0xea6b('0x36')]=_[_0xea6b('0x37')](_0x5dacd4[_0xea6b('0x33')],_0x5dacd4[_0xea6b('0x34')]);_0x846d21[_0xea6b('0x38')]=_[_0xea6b('0x37')](_0x5dacd4[_0xea6b('0x33')],qs['fields'](_0x46424a[_0xea6b('0x34')][_0xea6b('0x39')]));_0x846d21[_0xea6b('0x38')]=_0x846d21[_0xea6b('0x38')][_0xea6b('0x3a')]?_0x846d21['attributes']:_0x5dacd4[_0xea6b('0x33')];if(!_0x46424a['query']['hasOwnProperty'](_0xea6b('0x3b'))){_0x846d21[_0xea6b('0x24')]=qs['limit'](_0x46424a[_0xea6b('0x34')][_0xea6b('0x24')]);_0x846d21['offset']=qs['offset'](_0x46424a[_0xea6b('0x34')][_0xea6b('0x23')]);}_0x846d21[_0xea6b('0x3c')]=qs['sort'](_0x46424a[_0xea6b('0x34')][_0xea6b('0x3d')]);_0x846d21[_0xea6b('0x3e')]=qs[_0xea6b('0x36')](_[_0xea6b('0x3f')](_0x46424a[_0xea6b('0x34')],_0x5dacd4[_0xea6b('0x36')]));if(_0x46424a[_0xea6b('0x34')][_0xea6b('0x40')]){_0x846d21[_0xea6b('0x3e')]=_['merge'](_0x846d21['where'],{'$or':_['map'](_0x2a0ffa,function(_0x550549){if(_0x550549['type']['key']!=='VIRTUAL'){var _0x1d03e0={};_0x1d03e0[_0x550549[_0xea6b('0x41')]]={'$like':'%'+_0x46424a[_0xea6b('0x34')][_0xea6b('0x40')]+'%'};return _0x1d03e0;}})});}_0x846d21=_[_0xea6b('0x42')]({},_0x846d21,_0x46424a[_0xea6b('0x43')]);var _0x4c47ba={'where':_0x846d21[_0xea6b('0x3e')]};return db[_0xea6b('0x44')][_0xea6b('0x22')](_0x4c47ba)[_0xea6b('0x2b')](function(_0x269170){_0x3feb71[_0xea6b('0x22')]=_0x269170;if(_0x46424a['query'][_0xea6b('0x45')]){_0x846d21[_0xea6b('0x46')]=[{'all':!![]}];}return db[_0xea6b('0x44')][_0xea6b('0x47')](_0x846d21);})['then'](function(_0x3806b8){_0x3feb71[_0xea6b('0x48')]=_0x3806b8;return _0x3feb71;})[_0xea6b('0x2b')](respondWithFilteredResult(_0x47d301,_0x846d21))[_0xea6b('0x49')](handleError(_0x47d301,null));};exports[_0xea6b('0x4a')]=function(_0x43400c,_0x3823a9){var _0x3ee18d={'raw':!![],'where':{'id':_0x43400c[_0xea6b('0x4b')]['id']}},_0x1d0be4={};_0x1d0be4['model']=_['keys'](db[_0xea6b('0x44')]['rawAttributes']);_0x1d0be4[_0xea6b('0x34')]=_[_0xea6b('0x35')](_0x43400c[_0xea6b('0x34')]);_0x1d0be4[_0xea6b('0x36')]=_['intersection'](_0x1d0be4[_0xea6b('0x33')],_0x1d0be4[_0xea6b('0x34')]);_0x3ee18d[_0xea6b('0x38')]=_[_0xea6b('0x37')](_0x1d0be4[_0xea6b('0x33')],qs[_0xea6b('0x39')](_0x43400c[_0xea6b('0x34')]['fields']));_0x3ee18d[_0xea6b('0x38')]=_0x3ee18d[_0xea6b('0x38')][_0xea6b('0x3a')]?_0x3ee18d[_0xea6b('0x38')]:_0x1d0be4['model'];if(_0x43400c[_0xea6b('0x34')][_0xea6b('0x45')]){_0x3ee18d[_0xea6b('0x46')]=[{'all':!![]}];}_0x3ee18d=_[_0xea6b('0x42')]({},_0x3ee18d,_0x43400c[_0xea6b('0x43')]);return db[_0xea6b('0x44')][_0xea6b('0x4c')](_0x3ee18d)['then'](handleEntityNotFound(_0x3823a9,null))[_0xea6b('0x2b')](respondWithResult(_0x3823a9,null))[_0xea6b('0x49')](handleError(_0x3823a9,null));};exports[_0xea6b('0x4d')]=function(_0x107c73,_0x190ca3){return db[_0xea6b('0x44')]['create'](_0x107c73[_0xea6b('0x4e')],{})[_0xea6b('0x2b')](function(_0x2ada95){var _0x41e2dd=_0x107c73[_0xea6b('0x4f')][_0xea6b('0x50')]({'plain':!![]});if(!_0x41e2dd)throw new Error(_0xea6b('0x51'));if(_0x41e2dd[_0xea6b('0x52')]==='user'){var _0x3cd1bb=_0x2ada95[_0xea6b('0x50')]({'plain':!![]});var _0x3e7809=_0xea6b('0x2c');return db[_0xea6b('0x53')][_0xea6b('0x4c')]({'where':{'name':_0x3e7809,'userProfileId':_0x41e2dd[_0xea6b('0x54')]},'raw':!![]})[_0xea6b('0x2b')](function(_0x5ac760){if(_0x5ac760&&_0x5ac760[_0xea6b('0x55')]===0x0){return db[_0xea6b('0x2d')]['create']({'name':_0x3cd1bb['name'],'resourceId':_0x3cd1bb['id'],'type':_0x5ac760[_0xea6b('0x30')],'sectionId':_0x5ac760['id']},{})[_0xea6b('0x2b')](function(){return _0x2ada95;});}else{return _0x2ada95;}})[_0xea6b('0x49')](function(_0x2d0bfb){logger[_0xea6b('0x56')](_0xea6b('0x57'),_0x2d0bfb);throw _0x2d0bfb;});}return _0x2ada95;})[_0xea6b('0x2b')](respondWithResult(_0x190ca3,0xc9))[_0xea6b('0x49')](handleError(_0x190ca3,null));};exports['update']=function(_0x496988,_0x5b0880){if(_0x496988[_0xea6b('0x4e')]['id']){delete _0x496988[_0xea6b('0x4e')]['id'];}return db[_0xea6b('0x44')]['find']({'where':{'id':_0x496988['params']['id']}})[_0xea6b('0x2b')](handleEntityNotFound(_0x5b0880,null))[_0xea6b('0x2b')](saveUpdates(_0x496988[_0xea6b('0x4e')],null))[_0xea6b('0x2b')](respondWithResult(_0x5b0880,null))['catch'](handleError(_0x5b0880,null));};exports[_0xea6b('0x58')]=function(_0x504058,_0x4975fe){return db[_0xea6b('0x44')][_0xea6b('0x4c')]({'where':{'id':_0x504058[_0xea6b('0x4b')]['id']}})[_0xea6b('0x2b')](handleEntityNotFound(_0x4975fe,null))[_0xea6b('0x2b')](removeEntity(_0x4975fe,null))[_0xea6b('0x49')](handleError(_0x4975fe,null));};exports[_0xea6b('0x59')]=function(_0x1ccc98,_0x33711e){return db[_0xea6b('0x44')]['describe']()[_0xea6b('0x2b')](respondWithResult(_0x33711e,null))['catch'](handleError(_0x33711e,null));};exports[_0xea6b('0x5a')]=function(_0x4e5615,_0x4df4a1,_0x45d73b){var _0x2fd932={'raw':!![],'where':{}},_0x4c7c84={},_0x210075;return db[_0xea6b('0x44')][_0xea6b('0x5b')]({'where':{'id':_0x4e5615[_0xea6b('0x4b')]['id']}})[_0xea6b('0x2b')](handleEntityNotFound(_0x4df4a1,null))[_0xea6b('0x2b')](function(_0x51e228){if(_0x51e228){_0x210075=_0x51e228[_0xea6b('0x50')]({'plain':!![]});_0x4c7c84[_0xea6b('0x33')]=_[_0xea6b('0x35')](db[_0xea6b('0x5c')]['rawAttributes']);_0x4c7c84[_0xea6b('0x34')]=_[_0xea6b('0x35')](_0x4e5615[_0xea6b('0x34')]);_0x4c7c84[_0xea6b('0x36')]=_[_0xea6b('0x37')](_0x4c7c84['model'],_0x4c7c84[_0xea6b('0x34')]);_0x2fd932[_0xea6b('0x38')]=_['intersection'](_0x4c7c84[_0xea6b('0x33')],qs[_0xea6b('0x39')](_0x4e5615[_0xea6b('0x34')][_0xea6b('0x39')]));_0x2fd932[_0xea6b('0x38')]=_0x2fd932[_0xea6b('0x38')][_0xea6b('0x3a')]?_0x2fd932[_0xea6b('0x38')]:_0x4c7c84[_0xea6b('0x33')];if(!_0x4e5615[_0xea6b('0x34')][_0xea6b('0x5d')]('nolimit')){_0x2fd932[_0xea6b('0x24')]=qs['limit'](_0x4e5615[_0xea6b('0x34')][_0xea6b('0x24')]);_0x2fd932[_0xea6b('0x23')]=qs[_0xea6b('0x23')](_0x4e5615['query'][_0xea6b('0x23')]);}_0x2fd932[_0xea6b('0x3c')]=qs[_0xea6b('0x3d')](_0x4e5615[_0xea6b('0x34')][_0xea6b('0x3d')]);_0x2fd932[_0xea6b('0x3e')]=qs['filters'](_[_0xea6b('0x3f')](_0x4e5615[_0xea6b('0x34')],_0x4c7c84['filters']));_0x2fd932['where'][_0xea6b('0x5e')]=_0x51e228['id'];if(_0x4e5615['query'][_0xea6b('0x40')]){_0x2fd932['where']=_['merge'](_0x2fd932[_0xea6b('0x3e')],{'$or':_[_0xea6b('0x5f')](_0x2fd932[_0xea6b('0x38')],function(_0x23f53f){var _0x997abf={};_0x997abf[_0x23f53f]={'$like':'%'+_0x4e5615['query'][_0xea6b('0x40')]+'%'};return _0x997abf;})});}_0x2fd932=_[_0xea6b('0x42')]({},_0x2fd932,_0x4e5615[_0xea6b('0x43')]);return db[_0xea6b('0x5c')][_0xea6b('0x47')](_0x2fd932);}})[_0xea6b('0x2b')](function(_0x11a348){if(_0x11a348){return db[_0xea6b('0x60')][_0xea6b('0x61')]({'where':{'id':_[_0xea6b('0x5f')](_0x11a348,_0xea6b('0x62')),'role':_0xea6b('0x63')},'attributes':['id',_0xea6b('0x30'),_0xea6b('0x64'),'updatedAt','createdAt']});}})[_0xea6b('0x2b')](function(_0xcae8ab){if(_0xcae8ab){return{'count':_0xcae8ab[_0xea6b('0x22')],'rows':_[_0xea6b('0x5f')](_0xcae8ab[_0xea6b('0x48')],function(_0x421638){return{'membername':_0x421638[_0xea6b('0x30')],'UserId':_0x421638['id'],'queue_name':_0x210075[_0xea6b('0x30')],'FaxQueueId':_0x210075['id'],'interface':util[_0xea6b('0x65')](_0xea6b('0x66'),'SIP',_0x421638[_0xea6b('0x30')]),'penalty':0x0,'paused':_0x421638['faxPause'],'createdAt':_0x421638[_0xea6b('0x67')],'updatedAt':_0x421638['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0xea6b('0x2b')](respondWithFilteredResult(_0x4df4a1,_0x2fd932))[_0xea6b('0x49')](handleError(_0x4df4a1,null));};exports[_0xea6b('0x68')]=function(_0x164ca6,_0x10ec04,_0x1666b4){var _0x5edbdc={};var _0x12c7b1={};var _0x357da6;var _0x33f54c;return db[_0xea6b('0x44')][_0xea6b('0x5b')]({'where':{'id':_0x164ca6[_0xea6b('0x4b')]['id']}})['then'](handleEntityNotFound(_0x10ec04,null))[_0xea6b('0x2b')](function(_0x2eec9e){if(_0x2eec9e){_0x357da6=_0x2eec9e;_0x12c7b1[_0xea6b('0x33')]=_[_0xea6b('0x35')](db[_0xea6b('0x69')][_0xea6b('0x6a')]);_0x12c7b1[_0xea6b('0x34')]=_['keys'](_0x164ca6[_0xea6b('0x34')]);_0x12c7b1['filters']=_['intersection'](_0x12c7b1['model'],_0x12c7b1['query']);_0x5edbdc[_0xea6b('0x38')]=_[_0xea6b('0x37')](_0x12c7b1[_0xea6b('0x33')],qs[_0xea6b('0x39')](_0x164ca6[_0xea6b('0x34')]['fields']));_0x5edbdc[_0xea6b('0x38')]=_0x5edbdc[_0xea6b('0x38')][_0xea6b('0x3a')]?_0x5edbdc[_0xea6b('0x38')]:_0x12c7b1['model'];_0x5edbdc['order']=qs[_0xea6b('0x3d')](_0x164ca6['query'][_0xea6b('0x3d')]);_0x5edbdc['where']=qs[_0xea6b('0x36')](_[_0xea6b('0x3f')](_0x164ca6[_0xea6b('0x34')],_0x12c7b1[_0xea6b('0x36')]));if(_0x164ca6[_0xea6b('0x34')]['filter']){_0x5edbdc[_0xea6b('0x3e')]=_[_0xea6b('0x42')](_0x5edbdc[_0xea6b('0x3e')],{'$or':_[_0xea6b('0x5f')](_0x5edbdc[_0xea6b('0x38')],function(_0x597515){var _0x4e0ec8={};_0x4e0ec8[_0x597515]={'$like':'%'+_0x164ca6[_0xea6b('0x34')]['filter']+'%'};return _0x4e0ec8;})});}_0x5edbdc=_[_0xea6b('0x42')]({},_0x5edbdc,_0x164ca6[_0xea6b('0x43')]);return _0x357da6['getTeams'](_0x5edbdc);}})[_0xea6b('0x2b')](function(_0x6b0ff1){if(_0x6b0ff1){_0x33f54c=_0x6b0ff1[_0xea6b('0x3a')];if(!_0x164ca6['query'][_0xea6b('0x5d')](_0xea6b('0x3b'))){_0x5edbdc[_0xea6b('0x24')]=qs['limit'](_0x164ca6[_0xea6b('0x34')][_0xea6b('0x24')]);_0x5edbdc[_0xea6b('0x23')]=qs[_0xea6b('0x23')](_0x164ca6[_0xea6b('0x34')]['offset']);}return _0x357da6[_0xea6b('0x68')](_0x5edbdc);}})[_0xea6b('0x2b')](function(_0x2d7066){if(_0x2d7066){return _0x2d7066?{'count':_0x33f54c,'rows':_0x2d7066}:null;}})[_0xea6b('0x2b')](respondWithResult(_0x10ec04,null))[_0xea6b('0x49')](handleError(_0x10ec04,null));};exports[_0xea6b('0x6b')]=function(_0x33e133,_0x1c4390,_0x44a659){var _0x38f1d6=[];var _0x211380;return db['Team'][_0xea6b('0x47')]({'where':{'id':_0x33e133[_0xea6b('0x4e')][_0xea6b('0x6c')]},'attributes':['id'],'include':[{'model':db[_0xea6b('0x60')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0xea6b('0x2b')](function(_0x1c759b){if(_0x1c759b){for(var _0x4edeaa=0x0;_0x4edeaa<_0x1c759b[_0xea6b('0x3a')];_0x4edeaa+=0x1){for(var _0xade436=0x0;_0xade436<_0x1c759b[_0x4edeaa][_0xea6b('0x6d')][_0xea6b('0x3a')];_0xade436+=0x1){_0x38f1d6=_[_0xea6b('0x6e')](_0x38f1d6,[_0x1c759b[_0x4edeaa]['Agents'][_0xade436]['id']]);}}return _0x38f1d6;}})[_0xea6b('0x2b')](function(_0x57e722){if(_0x57e722){return db[_0xea6b('0x44')][_0xea6b('0x4c')]({'where':{'id':_0x33e133['params']['id']}});}})[_0xea6b('0x2b')](function(_0x239fea){if(_0x239fea){_0x211380=_0x239fea;return _0x211380[_0xea6b('0x6f')](_0x38f1d6,{'penalty':_0x33e133[_0xea6b('0x4e')][_0xea6b('0x70')]});}})['then'](function(_0x438c6d){if(_0x438c6d){return _0x211380['addTeams'](_0x33e133[_0xea6b('0x4e')][_0xea6b('0x6c')]);}})[_0xea6b('0x2b')](handleEntityNotFound(_0x1c4390,null))[_0xea6b('0x2b')](respondWithStatusCode(_0x1c4390,null))[_0xea6b('0x49')](handleError(_0x1c4390,null));};exports[_0xea6b('0x71')]=function(_0x554572,_0x229ba8,_0x43f944){var _0x1cc1e2=[];var _0x3d95f8;return db[_0xea6b('0x69')]['findAll']({'where':{'id':_0x554572[_0xea6b('0x34')][_0xea6b('0x6c')]},'attributes':['id'],'include':[{'model':db[_0xea6b('0x60')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0xea6b('0x2b')](function(_0x2885a7){if(_0x2885a7){for(var _0x465b85=0x0;_0x465b85<_0x2885a7[_0xea6b('0x3a')];_0x465b85+=0x1){for(var _0x35aa14=0x0;_0x35aa14<_0x2885a7[_0x465b85]['Agents']['length'];_0x35aa14+=0x1){_0x1cc1e2=_[_0xea6b('0x6e')](_0x1cc1e2,[_0x2885a7[_0x465b85][_0xea6b('0x6d')][_0x35aa14]['id']]);}}return _0x1cc1e2;}})[_0xea6b('0x2b')](function(_0x1b35cd){if(_0x1b35cd){return db[_0xea6b('0x44')]['find']({'where':{'id':_0x554572[_0xea6b('0x4b')]['id']}});}})[_0xea6b('0x2b')](function(_0x125ec6){if(_0x125ec6){_0x3d95f8=_0x125ec6;return _0x3d95f8['removeAgents'](_0x1cc1e2);}})['then'](function(_0x2499a0){if(_0x3d95f8){return _0x3d95f8[_0xea6b('0x71')](_0x554572[_0xea6b('0x34')]['ids']);}})[_0xea6b('0x2b')](handleEntityNotFound(_0x229ba8,null))[_0xea6b('0x2b')](respondWithStatusCode(_0x229ba8,null))['catch'](handleError(_0x229ba8,null));};exports['addAgents']=function(_0x33862c,_0x43a4a7,_0x1ba235){return db[_0xea6b('0x44')][_0xea6b('0x4c')]({'where':{'id':_0x33862c[_0xea6b('0x4b')]['id']}})['then'](handleEntityNotFound(_0x43a4a7,null))[_0xea6b('0x2b')](function(_0x5d5269){if(_0x5d5269){return _0x5d5269[_0xea6b('0x6f')](_0x33862c[_0xea6b('0x4e')][_0xea6b('0x6c')],_['omit'](_0x33862c[_0xea6b('0x4e')],[_0xea6b('0x6c'),'id'])||{})[_0xea6b('0x72')](function(_0x3e7a2a){for(var _0x398d75=0x0;_0x398d75<_0x33862c[_0xea6b('0x4e')][_0xea6b('0x6c')][_0xea6b('0x3a')];_0x398d75+=0x1){socket[_0xea6b('0x73')](_0xea6b('0x74'),{'UserId':_0x33862c['body'][_0xea6b('0x6c')][_0x398d75],'FaxQueueId':_0x33862c[_0xea6b('0x4b')]['id']});}return _0x3e7a2a;});}})[_0xea6b('0x2b')](respondWithResult(_0x43a4a7,null))[_0xea6b('0x49')](handleError(_0x43a4a7,null));};exports['removeAgents']=function(_0xdf550f,_0x525e3d,_0x66b53c){var _0x15927c;return db[_0xea6b('0x44')][_0xea6b('0x4c')]({'where':{'id':_0xdf550f[_0xea6b('0x4b')]['id']}})['then'](handleEntityNotFound(_0x525e3d,null))[_0xea6b('0x2b')](function(_0xc57eb7){if(_0xc57eb7){return _0xc57eb7[_0xea6b('0x75')](_0xdf550f[_0xea6b('0x34')][_0xea6b('0x6c')])[_0xea6b('0x2b')](function(_0x557f9a){if(_['isArray'](_0xdf550f[_0xea6b('0x34')][_0xea6b('0x6c')])){for(var _0x149c7c=0x0;_0x149c7c<_0xdf550f[_0xea6b('0x34')][_0xea6b('0x6c')]['length'];_0x149c7c+=0x1){socket['emit'](_0xea6b('0x76'),{'UserId':_0xdf550f[_0xea6b('0x34')][_0xea6b('0x6c')][_0x149c7c],'FaxQueueId':_0xdf550f[_0xea6b('0x4b')]['id']});}}else{socket[_0xea6b('0x73')]('userFaxQueue:remove',{'UserId':_0xdf550f[_0xea6b('0x34')][_0xea6b('0x6c')],'FaxQueueId':_0xdf550f['params']['id']});}});}})[_0xea6b('0x2b')](respondWithStatusCode(_0x525e3d,null))[_0xea6b('0x49')](handleError(_0x525e3d,null));};exports['getAgents']=function(_0x70842a,_0x5c61de,_0x5122dc){var _0x52dcdf={};var _0x297343={};var _0x2a3337;var _0x116196;return db[_0xea6b('0x44')][_0xea6b('0x5b')]({'where':{'id':_0x70842a['params']['id']}})[_0xea6b('0x2b')](handleEntityNotFound(_0x5c61de,null))['then'](function(_0x1295dc){if(_0x1295dc){_0x2a3337=_0x1295dc;_0x297343[_0xea6b('0x33')]=_[_0xea6b('0x35')](db[_0xea6b('0x60')][_0xea6b('0x6a')]);_0x297343[_0xea6b('0x34')]=_[_0xea6b('0x35')](_0x70842a[_0xea6b('0x34')]);_0x297343[_0xea6b('0x36')]=_[_0xea6b('0x37')](_0x297343['model'],_0x297343[_0xea6b('0x34')]);_0x52dcdf['attributes']=_[_0xea6b('0x37')](_0x297343['model'],qs['fields'](_0x70842a['query'][_0xea6b('0x39')]));_0x52dcdf['attributes']=_0x52dcdf[_0xea6b('0x38')][_0xea6b('0x3a')]?_0x52dcdf[_0xea6b('0x38')]:_0x297343[_0xea6b('0x33')];_0x52dcdf[_0xea6b('0x3c')]=qs['sort'](_0x70842a[_0xea6b('0x34')][_0xea6b('0x3d')]);_0x52dcdf['where']=qs[_0xea6b('0x36')](_[_0xea6b('0x3f')](_0x70842a['query'],_0x297343[_0xea6b('0x36')]));if(_0x70842a[_0xea6b('0x34')][_0xea6b('0x40')]){_0x52dcdf[_0xea6b('0x3e')]=_[_0xea6b('0x42')](_0x52dcdf[_0xea6b('0x3e')],{'$or':_[_0xea6b('0x5f')](_0x52dcdf[_0xea6b('0x38')],function(_0xce53){var _0x1e7226={};_0x1e7226[_0xce53]={'$like':'%'+_0x70842a[_0xea6b('0x34')]['filter']+'%'};return _0x1e7226;})});}_0x52dcdf=_[_0xea6b('0x42')]({},_0x52dcdf,_0x70842a['options']);return _0x2a3337[_0xea6b('0x77')](_0x52dcdf);}})[_0xea6b('0x2b')](function(_0x1aaaa1){if(_0x1aaaa1){_0x116196=_0x1aaaa1[_0xea6b('0x3a')];if(!_0x70842a[_0xea6b('0x34')][_0xea6b('0x5d')]('nolimit')){_0x52dcdf[_0xea6b('0x24')]=qs[_0xea6b('0x24')](_0x70842a[_0xea6b('0x34')][_0xea6b('0x24')]);_0x52dcdf['offset']=qs[_0xea6b('0x23')](_0x70842a[_0xea6b('0x34')][_0xea6b('0x23')]);}return _0x2a3337[_0xea6b('0x77')](_0x52dcdf);}})[_0xea6b('0x2b')](function(_0x586391){if(_0x586391){return _0x586391?{'count':_0x116196,'rows':_0x586391}:null;}})[_0xea6b('0x2b')](respondWithResult(_0x5c61de,null))[_0xea6b('0x49')](handleError(_0x5c61de,null));};
\ No newline at end of file
index 00d2880..37112ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3b5=['setMaxListeners','save','update','remove','emit','hook','exports','FaxQueue'];(function(_0x3dca78,_0x166eb5){var _0x5d4228=function(_0x34dc7c){while(--_0x34dc7c){_0x3dca78['push'](_0x3dca78['shift']());}};_0x5d4228(++_0x166eb5);}(_0xc3b5,0x6f));var _0x5c3b=function(_0x5b879e,_0x13edac){_0x5b879e=_0x5b879e-0x0;var _0x1bbb61=_0xc3b5[_0x5b879e];return _0x1bbb61;};'use strict';var EventEmitter=require('events');var FaxQueue=require('../../mysqldb')['db'][_0x5c3b('0x0')];var FaxQueueEvents=new EventEmitter();FaxQueueEvents[_0x5c3b('0x1')](0x0);var events={'afterCreate':_0x5c3b('0x2'),'afterUpdate':_0x5c3b('0x3'),'afterDestroy':_0x5c3b('0x4')};function emitEvent(_0x34be81){return function(_0x237a61,_0x48f8a1,_0x587055){FaxQueueEvents[_0x5c3b('0x5')](_0x34be81+':'+_0x237a61['id'],_0x237a61);FaxQueueEvents[_0x5c3b('0x5')](_0x34be81,_0x237a61);_0x587055(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];FaxQueue[_0x5c3b('0x6')](e,emitEvent(event));}}module[_0x5c3b('0x7')]=FaxQueueEvents;
\ No newline at end of file
+var _0x54ef=['remove','hasOwnProperty','hook','exports','events','../../mysqldb','FaxQueue','save','update'];(function(_0x5856dd,_0x4d313f){var _0x3af9fd=function(_0x229935){while(--_0x229935){_0x5856dd['push'](_0x5856dd['shift']());}};_0x3af9fd(++_0x4d313f);}(_0x54ef,0x112));var _0xf54e=function(_0x3eba02,_0xa06e7){_0x3eba02=_0x3eba02-0x0;var _0x3bcdaf=_0x54ef[_0x3eba02];return _0x3bcdaf;};'use strict';var EventEmitter=require(_0xf54e('0x0'));var FaxQueue=require(_0xf54e('0x1'))['db'][_0xf54e('0x2')];var FaxQueueEvents=new EventEmitter();FaxQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xf54e('0x3'),'afterUpdate':_0xf54e('0x4'),'afterDestroy':_0xf54e('0x5')};function emitEvent(_0x42b9b2){return function(_0x8b6bb6,_0x431e36,_0x12d43f){FaxQueueEvents['emit'](_0x42b9b2+':'+_0x8b6bb6['id'],_0x8b6bb6);FaxQueueEvents['emit'](_0x42b9b2,_0x8b6bb6);_0x12d43f(null);};}for(var e in events){if(events[_0xf54e('0x6')](e)){var event=events[e];FaxQueue[_0xf54e('0x7')](e,emitEvent(event));}}module[_0xf54e('0x8')]=FaxQueueEvents;
\ No newline at end of file
index 0828e23..c58fe01 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x926f=['util','../../config/logger','api','moment','bluebird','request-promise','./faxQueue.attributes','exports','define','fax_queues','lodash'];(function(_0xbd5c86,_0x123f9a){var _0x138cd7=function(_0x4f69b9){while(--_0x4f69b9){_0xbd5c86['push'](_0xbd5c86['shift']());}};_0x138cd7(++_0x123f9a);}(_0x926f,0xa4));var _0xf926=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x926f[_0x2dafbe];return _0x58a45a;};'use strict';var _=require(_0xf926('0x0'));var util=require(_0xf926('0x1'));var logger=require(_0xf926('0x2'))(_0xf926('0x3'));var moment=require(_0xf926('0x4'));var BPromise=require(_0xf926('0x5'));var rp=require(_0xf926('0x6'));var attributes=require(_0xf926('0x7'));module[_0xf926('0x8')]=function(_0xa34f1d,_0x583c2d){return _0xa34f1d[_0xf926('0x9')]('FaxQueue',attributes,{'tableName':_0xf926('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x74bb=['define','FaxQueue','fax_queues','util','api','request-promise','./faxQueue.attributes','exports'];(function(_0xcd66e5,_0x47593b){var _0x4792a4=function(_0x58ec57){while(--_0x58ec57){_0xcd66e5['push'](_0xcd66e5['shift']());}};_0x4792a4(++_0x47593b);}(_0x74bb,0x9b));var _0xb74b=function(_0x524b82,_0x2773f7){_0x524b82=_0x524b82-0x0;var _0x4fe732=_0x74bb[_0x524b82];return _0x4fe732;};'use strict';var _=require('lodash');var util=require(_0xb74b('0x0'));var logger=require('../../config/logger')(_0xb74b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xb74b('0x2'));var attributes=require(_0xb74b('0x3'));module[_0xb74b('0x4')]=function(_0x4bf0e0,_0x40bc05){return _0x4bf0e0[_0xb74b('0x5')](_0xb74b('0x6'),attributes,{'tableName':_0xb74b('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 359ac11..e9d7321 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47fd=['../../config/environment','jayson/promise','client','http','redis','defaults','socket.io-emitter','./faxQueue.socket','register','request','then','FaxQueue,\x20%s,\x20%s','debug','FaxQueue,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','info','result','catch','GetFaxQueue','FaxQueue','findAll','options','where','limit','include','map','model','attributes','ShowFaxQueue','find','raw','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x5a0e32,_0x347ae2){var _0xea8f24=function(_0x47f773){while(--_0x47f773){_0x5a0e32['push'](_0x5a0e32['shift']());}};_0xea8f24(++_0x347ae2);}(_0x47fd,0x11e));var _0xd47f=function(_0x269e5a,_0x1cbe9f){_0x269e5a=_0x269e5a-0x0;var _0x32ed5a=_0x47fd[_0x269e5a];return _0x32ed5a;};'use strict';var _=require(_0xd47f('0x0'));var util=require(_0xd47f('0x1'));var moment=require(_0xd47f('0x2'));var BPromise=require(_0xd47f('0x3'));var rs=require(_0xd47f('0x4'));var fs=require('fs');var Redis=require(_0xd47f('0x5'));var db=require(_0xd47f('0x6'))['db'];var utils=require(_0xd47f('0x7'));var logger=require('../../config/logger')('rpc');var config=require(_0xd47f('0x8'));var jayson=require(_0xd47f('0x9'));var client=jayson[_0xd47f('0xa')][_0xd47f('0xb')]({'port':0x232a});config[_0xd47f('0xc')]=_[_0xd47f('0xd')](config[_0xd47f('0xc')],{'host':'localhost','port':0x18eb});var socket=require(_0xd47f('0xe'))(new Redis(config['redis']));require(_0xd47f('0xf'))[_0xd47f('0x10')](socket);function respondWithRpcPromise(_0x27f483,_0x529d75,_0x8d0422){return new BPromise(function(_0x33247e,_0x24499a){return client[_0xd47f('0x11')](_0x27f483,_0x8d0422)[_0xd47f('0x12')](function(_0x5e130e){logger['info'](_0xd47f('0x13'),_0x529d75,'request\x20sent');logger[_0xd47f('0x14')](_0xd47f('0x15'),_0x529d75,_0xd47f('0x16'),JSON['stringify'](_0x5e130e));if(_0x5e130e['error']){if(_0x5e130e[_0xd47f('0x17')][_0xd47f('0x18')]===0x1f4){logger[_0xd47f('0x17')](_0xd47f('0x13'),_0x529d75,_0x5e130e[_0xd47f('0x17')][_0xd47f('0x19')]);return _0x24499a(_0x5e130e[_0xd47f('0x17')][_0xd47f('0x19')]);}logger[_0xd47f('0x17')](_0xd47f('0x13'),_0x529d75,_0x5e130e[_0xd47f('0x17')][_0xd47f('0x19')]);return _0x33247e(_0x5e130e[_0xd47f('0x17')][_0xd47f('0x19')]);}else{logger[_0xd47f('0x1a')]('FaxQueue,\x20%s,\x20%s',_0x529d75,_0xd47f('0x16'));_0x33247e(_0x5e130e[_0xd47f('0x1b')][_0xd47f('0x19')]);}})[_0xd47f('0x1c')](function(_0x37bc57){logger['error'](_0xd47f('0x13'),_0x529d75,_0x37bc57);_0x24499a(_0x37bc57);});});}exports[_0xd47f('0x1d')]=function(_0x92eb0f){var _0x107a52=this;return new Promise(function(_0x4f3276,_0x119472){return db[_0xd47f('0x1e')][_0xd47f('0x1f')]({'raw':_0x92eb0f['options']?_0x92eb0f[_0xd47f('0x20')]['raw']===undefined?!![]:![]:!![],'where':_0x92eb0f[_0xd47f('0x20')]?_0x92eb0f[_0xd47f('0x20')][_0xd47f('0x21')]||null:null,'attributes':_0x92eb0f['options']?_0x92eb0f[_0xd47f('0x20')]['attributes']||null:null,'limit':_0x92eb0f[_0xd47f('0x20')]?_0x92eb0f[_0xd47f('0x20')][_0xd47f('0x22')]||null:null,'include':_0x92eb0f[_0xd47f('0x20')]?_0x92eb0f[_0xd47f('0x20')][_0xd47f('0x23')]?_[_0xd47f('0x24')](_0x92eb0f['options'][_0xd47f('0x23')],function(_0x4999a0){return{'model':db[_0x4999a0[_0xd47f('0x25')]],'as':_0x4999a0['as'],'attributes':_0x4999a0[_0xd47f('0x26')],'include':_0x4999a0[_0xd47f('0x23')]?_['map'](_0x4999a0['include'],function(_0x1d2882){return{'model':db[_0x1d2882[_0xd47f('0x25')]],'as':_0x1d2882['as'],'attributes':_0x1d2882[_0xd47f('0x26')],'include':_0x1d2882[_0xd47f('0x23')]?_['map'](_0x1d2882['include'],function(_0x41e557){return{'model':db[_0x41e557[_0xd47f('0x25')]],'as':_0x41e557['as'],'attributes':_0x41e557['attributes']};}):[]};}):[]};}):[]:[]})[_0xd47f('0x12')](function(_0x142430){logger[_0xd47f('0x1a')](_0xd47f('0x1d'),_0x92eb0f);logger['debug'](_0xd47f('0x1d'),_0x92eb0f,JSON['stringify'](_0x142430));_0x4f3276(_0x142430);})[_0xd47f('0x1c')](function(_0x5ae3b7){logger[_0xd47f('0x17')](_0xd47f('0x1d'),_0x5ae3b7[_0xd47f('0x19')],_0x92eb0f);_0x119472(_0x107a52[_0xd47f('0x17')](0x1f4,_0x5ae3b7[_0xd47f('0x19')]));});});};exports[_0xd47f('0x27')]=function(_0x340ef0){var _0x52332a=this;return new Promise(function(_0xc03aa9,_0x44bf35){return db[_0xd47f('0x1e')][_0xd47f('0x28')]({'raw':_0x340ef0[_0xd47f('0x20')]?_0x340ef0['options'][_0xd47f('0x29')]===undefined?!![]:![]:!![],'where':_0x340ef0[_0xd47f('0x20')]?_0x340ef0[_0xd47f('0x20')]['where']||null:null,'attributes':_0x340ef0[_0xd47f('0x20')]?_0x340ef0['options']['attributes']||null:null,'include':_0x340ef0[_0xd47f('0x20')]?_0x340ef0[_0xd47f('0x20')]['include']?_['map'](_0x340ef0[_0xd47f('0x20')][_0xd47f('0x23')],function(_0x2dc38a){return{'model':db[_0x2dc38a['model']],'as':_0x2dc38a['as'],'attributes':_0x2dc38a['attributes'],'include':_0x2dc38a['include']?_['map'](_0x2dc38a[_0xd47f('0x23')],function(_0x1886fc){return{'model':db[_0x1886fc[_0xd47f('0x25')]],'as':_0x1886fc['as'],'attributes':_0x1886fc[_0xd47f('0x26')],'include':_0x1886fc[_0xd47f('0x23')]?_['map'](_0x1886fc[_0xd47f('0x23')],function(_0x244efe){return{'model':db[_0x244efe['model']],'as':_0x244efe['as'],'attributes':_0x244efe[_0xd47f('0x26')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x32fd90){logger[_0xd47f('0x1a')]('ShowFaxQueue',_0x340ef0);logger['debug'](_0xd47f('0x27'),_0x340ef0,JSON['stringify'](_0x32fd90));_0xc03aa9(_0x32fd90);})[_0xd47f('0x1c')](function(_0x32c300){logger['error'](_0xd47f('0x27'),_0x32c300['message'],_0x340ef0);_0x44bf35(_0x52332a[_0xd47f('0x17')](0x1f4,_0x32c300[_0xd47f('0x19')]));});});};
\ No newline at end of file
+var _0x0f29=['debug','FaxQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','FaxQueue,\x20%s,\x20%s','message','catch','GetFaxQueue','findAll','options','raw','where','attributes','include','map','model','ShowFaxQueue','FaxQueue','lodash','util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','defaults','redis','localhost','socket.io-emitter','./faxQueue.socket','register','request','then','info','request\x20sent'];(function(_0x344743,_0x466fcb){var _0x544ef4=function(_0x10f141){while(--_0x10f141){_0x344743['push'](_0x344743['shift']());}};_0x544ef4(++_0x466fcb);}(_0x0f29,0x103));var _0x90f2=function(_0x4b9fce,_0x1bc6ef){_0x4b9fce=_0x4b9fce-0x0;var _0x289b0f=_0x0f29[_0x4b9fce];return _0x289b0f;};'use strict';var _=require(_0x90f2('0x0'));var util=require(_0x90f2('0x1'));var moment=require(_0x90f2('0x2'));var BPromise=require(_0x90f2('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x90f2('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x90f2('0x5'));var logger=require(_0x90f2('0x6'))(_0x90f2('0x7'));var config=require(_0x90f2('0x8'));var jayson=require(_0x90f2('0x9'));var client=jayson['client'][_0x90f2('0xa')]({'port':0x232a});config['redis']=_[_0x90f2('0xb')](config[_0x90f2('0xc')],{'host':_0x90f2('0xd'),'port':0x18eb});var socket=require(_0x90f2('0xe'))(new Redis(config[_0x90f2('0xc')]));require(_0x90f2('0xf'))[_0x90f2('0x10')](socket);function respondWithRpcPromise(_0x532355,_0x459399,_0x3feed1){return new BPromise(function(_0x42c135,_0x112442){return client[_0x90f2('0x11')](_0x532355,_0x3feed1)[_0x90f2('0x12')](function(_0x25e7d1){logger[_0x90f2('0x13')]('FaxQueue,\x20%s,\x20%s',_0x459399,_0x90f2('0x14'));logger[_0x90f2('0x15')](_0x90f2('0x16'),_0x459399,_0x90f2('0x14'),JSON[_0x90f2('0x17')](_0x25e7d1));if(_0x25e7d1['error']){if(_0x25e7d1[_0x90f2('0x18')][_0x90f2('0x19')]===0x1f4){logger[_0x90f2('0x18')](_0x90f2('0x1a'),_0x459399,_0x25e7d1[_0x90f2('0x18')][_0x90f2('0x1b')]);return _0x112442(_0x25e7d1[_0x90f2('0x18')][_0x90f2('0x1b')]);}logger['error']('FaxQueue,\x20%s,\x20%s',_0x459399,_0x25e7d1[_0x90f2('0x18')][_0x90f2('0x1b')]);return _0x42c135(_0x25e7d1[_0x90f2('0x18')][_0x90f2('0x1b')]);}else{logger[_0x90f2('0x13')](_0x90f2('0x1a'),_0x459399,_0x90f2('0x14'));_0x42c135(_0x25e7d1['result'][_0x90f2('0x1b')]);}})[_0x90f2('0x1c')](function(_0x379c00){logger['error'](_0x90f2('0x1a'),_0x459399,_0x379c00);_0x112442(_0x379c00);});});}exports[_0x90f2('0x1d')]=function(_0x25c49b){var _0x23f6f0=this;return new Promise(function(_0x4aa3fc,_0x43c309){return db['FaxQueue'][_0x90f2('0x1e')]({'raw':_0x25c49b[_0x90f2('0x1f')]?_0x25c49b['options'][_0x90f2('0x20')]===undefined?!![]:![]:!![],'where':_0x25c49b[_0x90f2('0x1f')]?_0x25c49b[_0x90f2('0x1f')][_0x90f2('0x21')]||null:null,'attributes':_0x25c49b[_0x90f2('0x1f')]?_0x25c49b[_0x90f2('0x1f')][_0x90f2('0x22')]||null:null,'limit':_0x25c49b['options']?_0x25c49b[_0x90f2('0x1f')]['limit']||null:null,'include':_0x25c49b[_0x90f2('0x1f')]?_0x25c49b[_0x90f2('0x1f')][_0x90f2('0x23')]?_[_0x90f2('0x24')](_0x25c49b[_0x90f2('0x1f')][_0x90f2('0x23')],function(_0x5a88ef){return{'model':db[_0x5a88ef[_0x90f2('0x25')]],'as':_0x5a88ef['as'],'attributes':_0x5a88ef['attributes'],'include':_0x5a88ef[_0x90f2('0x23')]?_[_0x90f2('0x24')](_0x5a88ef[_0x90f2('0x23')],function(_0x1e8341){return{'model':db[_0x1e8341['model']],'as':_0x1e8341['as'],'attributes':_0x1e8341[_0x90f2('0x22')],'include':_0x1e8341[_0x90f2('0x23')]?_[_0x90f2('0x24')](_0x1e8341[_0x90f2('0x23')],function(_0x49ef63){return{'model':db[_0x49ef63[_0x90f2('0x25')]],'as':_0x49ef63['as'],'attributes':_0x49ef63[_0x90f2('0x22')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x2745d5){logger[_0x90f2('0x13')]('GetFaxQueue',_0x25c49b);logger[_0x90f2('0x15')]('GetFaxQueue',_0x25c49b,JSON['stringify'](_0x2745d5));_0x4aa3fc(_0x2745d5);})['catch'](function(_0x4ab2b9){logger[_0x90f2('0x18')](_0x90f2('0x1d'),_0x4ab2b9[_0x90f2('0x1b')],_0x25c49b);_0x43c309(_0x23f6f0[_0x90f2('0x18')](0x1f4,_0x4ab2b9[_0x90f2('0x1b')]));});});};exports[_0x90f2('0x26')]=function(_0x37e130){var _0x321d56=this;return new Promise(function(_0x3cdaa9,_0x1daa54){return db[_0x90f2('0x27')]['find']({'raw':_0x37e130[_0x90f2('0x1f')]?_0x37e130[_0x90f2('0x1f')][_0x90f2('0x20')]===undefined?!![]:![]:!![],'where':_0x37e130[_0x90f2('0x1f')]?_0x37e130[_0x90f2('0x1f')][_0x90f2('0x21')]||null:null,'attributes':_0x37e130['options']?_0x37e130['options'][_0x90f2('0x22')]||null:null,'include':_0x37e130[_0x90f2('0x1f')]?_0x37e130[_0x90f2('0x1f')][_0x90f2('0x23')]?_[_0x90f2('0x24')](_0x37e130[_0x90f2('0x1f')][_0x90f2('0x23')],function(_0x434ecb){return{'model':db[_0x434ecb[_0x90f2('0x25')]],'as':_0x434ecb['as'],'attributes':_0x434ecb[_0x90f2('0x22')],'include':_0x434ecb[_0x90f2('0x23')]?_['map'](_0x434ecb[_0x90f2('0x23')],function(_0xddc54a){return{'model':db[_0xddc54a[_0x90f2('0x25')]],'as':_0xddc54a['as'],'attributes':_0xddc54a[_0x90f2('0x22')],'include':_0xddc54a[_0x90f2('0x23')]?_['map'](_0xddc54a[_0x90f2('0x23')],function(_0x5bb4fc){return{'model':db[_0x5bb4fc[_0x90f2('0x25')]],'as':_0x5bb4fc['as'],'attributes':_0x5bb4fc[_0x90f2('0x22')]};}):[]};}):[]};}):[]:[]})[_0x90f2('0x12')](function(_0x3ebd86){logger[_0x90f2('0x13')]('ShowFaxQueue',_0x37e130);logger[_0x90f2('0x15')](_0x90f2('0x26'),_0x37e130,JSON[_0x90f2('0x17')](_0x3ebd86));_0x3cdaa9(_0x3ebd86);})[_0x90f2('0x1c')](function(_0xb48f6e){logger[_0x90f2('0x18')](_0x90f2('0x26'),_0xb48f6e['message'],_0x37e130);_0x1daa54(_0x321d56[_0x90f2('0x18')](0x1f4,_0xb48f6e[_0x90f2('0x1b')]));});});};
\ No newline at end of file
index 525cbb8..5bf4224 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d11=['remove','update','emit','register','length','./faxQueue.events','save'];(function(_0x39e283,_0x247e6b){var _0x7de89f=function(_0x2f8c50){while(--_0x2f8c50){_0x39e283['push'](_0x39e283['shift']());}};_0x7de89f(++_0x247e6b);}(_0x8d11,0x132));var _0x18d1=function(_0xccf869,_0x2556a5){_0xccf869=_0xccf869-0x0;var _0x21a9db=_0x8d11[_0xccf869];return _0x21a9db;};'use strict';var FaxQueueEvents=require(_0x18d1('0x0'));var events=[_0x18d1('0x1'),_0x18d1('0x2'),_0x18d1('0x3')];function createListener(_0x3519e5,_0x14175d){return function(_0x2a2477){_0x14175d[_0x18d1('0x4')](_0x3519e5,_0x2a2477);};}function removeListener(_0x412be0,_0x3a3b3c){return function(){FaxQueueEvents['removeListener'](_0x412be0,_0x3a3b3c);};}exports[_0x18d1('0x5')]=function(_0x15d712){for(var _0x10e082=0x0,_0x5983ff=events[_0x18d1('0x6')];_0x10e082<_0x5983ff;_0x10e082++){var _0x11ab5f=events[_0x10e082];var _0x597968=createListener('faxQueue:'+_0x11ab5f,_0x15d712);FaxQueueEvents['on'](_0x11ab5f,_0x597968);}};
\ No newline at end of file
+var _0x282b=['save','remove','emit','removeListener','register','length','./faxQueue.events'];(function(_0x557f5f,_0x31d8e7){var _0x196eba=function(_0x433d89){while(--_0x433d89){_0x557f5f['push'](_0x557f5f['shift']());}};_0x196eba(++_0x31d8e7);}(_0x282b,0xa7));var _0xb282=function(_0x5b1755,_0x25220){_0x5b1755=_0x5b1755-0x0;var _0x372f3c=_0x282b[_0x5b1755];return _0x372f3c;};'use strict';var FaxQueueEvents=require(_0xb282('0x0'));var events=[_0xb282('0x1'),_0xb282('0x2'),'update'];function createListener(_0x4a313c,_0x414803){return function(_0x23ce6b){_0x414803[_0xb282('0x3')](_0x4a313c,_0x23ce6b);};}function removeListener(_0x34d204,_0xbe1f34){return function(){FaxQueueEvents[_0xb282('0x4')](_0x34d204,_0xbe1f34);};}exports[_0xb282('0x5')]=function(_0x1a0830){for(var _0x12257c=0x0,_0x35541f=events[_0xb282('0x6')];_0x12257c<_0x35541f;_0x12257c++){var _0xc4ca9f=events[_0x12257c];var _0x3ce5e0=createListener('faxQueue:'+_0xc4ca9f,_0x1a0830);FaxQueueEvents['on'](_0xc4ca9f,_0x3ce5e0);}};
\ No newline at end of file
index f018cd7..36fbe5b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfaf9=['util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxQueue.controller','get','isAuthenticated','index','/describe','describe','show','/:id/members','getMembers','/:id/teams','getAgents','post','create','addTeams','/:id/users','put','/:id','update','delete','destroy','exports','multer'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xfaf9,0x13e));var _0x9faf=function(_0x4dbaad,_0x730318){_0x4dbaad=_0x4dbaad-0x0;var _0x226c72=_0xfaf9[_0x4dbaad];return _0x226c72;};'use strict';var multer=require(_0x9faf('0x0'));var util=require(_0x9faf('0x1'));var path=require('path');var timeout=require(_0x9faf('0x2'));var express=require(_0x9faf('0x3'));var router=express[_0x9faf('0x4')]();var auth=require(_0x9faf('0x5'));var interaction=require(_0x9faf('0x6'));var config=require(_0x9faf('0x7'));var controller=require(_0x9faf('0x8'));router[_0x9faf('0x9')]('/',auth[_0x9faf('0xa')](),controller[_0x9faf('0xb')]);router[_0x9faf('0x9')](_0x9faf('0xc'),auth[_0x9faf('0xa')](),controller[_0x9faf('0xd')]);router['get']('/:id',auth[_0x9faf('0xa')](),controller[_0x9faf('0xe')]);router[_0x9faf('0x9')](_0x9faf('0xf'),auth[_0x9faf('0xa')](),controller[_0x9faf('0x10')]);router[_0x9faf('0x9')](_0x9faf('0x11'),auth[_0x9faf('0xa')](),controller['getTeams']);router[_0x9faf('0x9')]('/:id/users',auth[_0x9faf('0xa')](),controller[_0x9faf('0x12')]);router[_0x9faf('0x13')]('/',auth['isAuthenticated'](),controller[_0x9faf('0x14')]);router[_0x9faf('0x13')](_0x9faf('0x11'),auth[_0x9faf('0xa')](),controller[_0x9faf('0x15')]);router[_0x9faf('0x13')](_0x9faf('0x16'),auth[_0x9faf('0xa')](),controller['addAgents']);router[_0x9faf('0x17')](_0x9faf('0x18'),auth[_0x9faf('0xa')](),controller[_0x9faf('0x19')]);router[_0x9faf('0x1a')](_0x9faf('0x18'),auth[_0x9faf('0xa')](),controller[_0x9faf('0x1b')]);router[_0x9faf('0x1a')](_0x9faf('0x11'),auth[_0x9faf('0xa')](),controller['removeTeams']);router['delete'](_0x9faf('0x16'),auth[_0x9faf('0xa')](),controller['removeAgents']);module[_0x9faf('0x1c')]=router;
\ No newline at end of file
+var _0x319a=['describe','/:id','getTeams','/:id/users','getAgents','post','create','/:id/teams','addTeams','addAgents','put','update','delete','destroy','exports','path','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxQueue.controller','get','isAuthenticated','/describe'];(function(_0x3c0a3d,_0x30382c){var _0x18bdd2=function(_0x1bd8ec){while(--_0x1bd8ec){_0x3c0a3d['push'](_0x3c0a3d['shift']());}};_0x18bdd2(++_0x30382c);}(_0x319a,0x1ef));var _0xa319=function(_0x5d6855,_0x2287e4){_0x5d6855=_0x5d6855-0x0;var _0x3108a7=_0x319a[_0x5d6855];return _0x3108a7;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xa319('0x0'));var timeout=require(_0xa319('0x1'));var express=require('express');var router=express['Router']();var auth=require(_0xa319('0x2'));var interaction=require(_0xa319('0x3'));var config=require(_0xa319('0x4'));var controller=require(_0xa319('0x5'));router[_0xa319('0x6')]('/',auth[_0xa319('0x7')](),controller['index']);router[_0xa319('0x6')](_0xa319('0x8'),auth[_0xa319('0x7')](),controller[_0xa319('0x9')]);router['get'](_0xa319('0xa'),auth[_0xa319('0x7')](),controller['show']);router[_0xa319('0x6')]('/:id/members',auth[_0xa319('0x7')](),controller['getMembers']);router[_0xa319('0x6')]('/:id/teams',auth[_0xa319('0x7')](),controller[_0xa319('0xb')]);router[_0xa319('0x6')](_0xa319('0xc'),auth['isAuthenticated'](),controller[_0xa319('0xd')]);router[_0xa319('0xe')]('/',auth[_0xa319('0x7')](),controller[_0xa319('0xf')]);router[_0xa319('0xe')](_0xa319('0x10'),auth['isAuthenticated'](),controller[_0xa319('0x11')]);router[_0xa319('0xe')](_0xa319('0xc'),auth[_0xa319('0x7')](),controller[_0xa319('0x12')]);router[_0xa319('0x13')](_0xa319('0xa'),auth[_0xa319('0x7')](),controller[_0xa319('0x14')]);router[_0xa319('0x15')]('/:id',auth['isAuthenticated'](),controller[_0xa319('0x16')]);router[_0xa319('0x15')](_0xa319('0x10'),auth[_0xa319('0x7')](),controller['removeTeams']);router[_0xa319('0x15')](_0xa319('0xc'),auth[_0xa319('0x7')](),controller['removeAgents']);module[_0xa319('0x17')]=router;
\ No newline at end of file
index f7e47fd..0697de5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8515=['moment','sequelize','STRING','DATE'];(function(_0x11b0f6,_0x4f59b8){var _0x1eac6c=function(_0x31675a){while(--_0x31675a){_0x11b0f6['push'](_0x11b0f6['shift']());}};_0x1eac6c(++_0x4f59b8);}(_0x8515,0x138));var _0x5851=function(_0x594e11,_0x28f652){_0x594e11=_0x594e11-0x0;var _0x5418ad=_0x8515[_0x594e11];return _0x5418ad;};'use strict';var moment=require(_0x5851('0x0'));var Sequelize=require(_0x5851('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0x5851('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0x5851('0x2')]},'joinAt':{'type':Sequelize[_0x5851('0x3')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0x5851('0x3')]},'exitAt':{'type':Sequelize[_0x5851('0x3')]},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x9d2c=['moment','sequelize','STRING','DATE'];(function(_0x5027b1,_0x1409a5){var _0x4a46cf=function(_0x121920){while(--_0x121920){_0x5027b1['push'](_0x5027b1['shift']());}};_0x4a46cf(++_0x1409a5);}(_0x9d2c,0x1f0));var _0xc9d2=function(_0x52dd2a,_0x3429e9){_0x52dd2a=_0x52dd2a-0x0;var _0x30cf37=_0x9d2c[_0x52dd2a];return _0x30cf37;};'use strict';var moment=require(_0xc9d2('0x0'));var Sequelize=require(_0xc9d2('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0xc9d2('0x2')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0xc9d2('0x3')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0xc9d2('0x3')]},'exitAt':{'type':Sequelize[_0xc9d2('0x3')]},'reason':{'type':Sequelize[_0xc9d2('0x2')]}};
\ No newline at end of file
index 43819e4..ed9b7cc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d09=['count','set','Content-Range','reject','save','update','error','stack','name','send','index','FaxQueueReport','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','offset','sort','where','pick','merge','type','key','VIRTUAL','field','filter','options','then','includeAll','findAll','rows','catch','show','params','include','find','create','body','destroy','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json'];(function(_0x1288db,_0x211057){var _0x1df750=function(_0x2caccc){while(--_0x2caccc){_0x1288db['push'](_0x1288db['shift']());}};_0x1df750(++_0x211057);}(_0x2d09,0x1c0));var _0x92d0=function(_0x3eac41,_0x3ea847){_0x3eac41=_0x3eac41-0x0;var _0x489136=_0x2d09[_0x3eac41];return _0x489136;};'use strict';var pdf=require(_0x92d0('0x0'));var emlformat=require(_0x92d0('0x1'));var rimraf=require(_0x92d0('0x2'));var zipdir=require(_0x92d0('0x3'));var jsonpatch=require(_0x92d0('0x4'));var rp=require(_0x92d0('0x5'));var moment=require(_0x92d0('0x6'));var BPromise=require(_0x92d0('0x7'));var Mustache=require(_0x92d0('0x8'));var util=require(_0x92d0('0x9'));var path=require(_0x92d0('0xa'));var sox=require(_0x92d0('0xb'));var csv=require(_0x92d0('0xc'));var ejs=require(_0x92d0('0xd'));var fs=require('fs');var _=require(_0x92d0('0xe'));var squel=require(_0x92d0('0xf'));var crypto=require(_0x92d0('0x10'));var jsforce=require(_0x92d0('0x11'));var deskjs=require(_0x92d0('0x12'));var toCsv=require(_0x92d0('0xc'));var querystring=require(_0x92d0('0x13'));var Papa=require(_0x92d0('0x14'));var authService=require(_0x92d0('0x15'));var hardwareService=require(_0x92d0('0x16'));var Redis=require(_0x92d0('0x17'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x92d0('0x18'));var utils=require(_0x92d0('0x19'));var config=require(_0x92d0('0x1a'));var db=require(_0x92d0('0x1b'))['db'];function respondWithStatusCode(_0x75dee7,_0xc9f4b5){_0xc9f4b5=_0xc9f4b5||0xcc;return function(_0x322d7a){if(_0x322d7a){return _0x75dee7[_0x92d0('0x1c')](_0xc9f4b5);}return _0x75dee7[_0x92d0('0x1d')](_0xc9f4b5)[_0x92d0('0x1e')]();};}function respondWithResult(_0x577256,_0x5da57e){_0x5da57e=_0x5da57e||0xc8;return function(_0x5ead87){if(_0x5ead87){return _0x577256[_0x92d0('0x1d')](_0x5da57e)[_0x92d0('0x1f')](_0x5ead87);}};}function respondWithFilteredResult(_0x59439c,_0xe1b13d){return function(_0xe8d731){if(_0xe8d731){var _0x2ac6f3=_0xe8d731[_0x92d0('0x20')],_0x39ea76=_0xe1b13d['offset'],_0x43a0c2=_0xe1b13d['offset']+_0xe1b13d['limit'],_0x1c98ad;if(_0x43a0c2>=_0x2ac6f3){_0x43a0c2=_0x2ac6f3;_0x1c98ad=0xc8;}else{_0x1c98ad=0xce;}_0x59439c['status'](_0x1c98ad);return _0x59439c[_0x92d0('0x21')](_0x92d0('0x22'),_0x39ea76+'-'+_0x43a0c2+'/'+_0x2ac6f3)['json'](_0xe8d731);}return null;};}function patchUpdates(_0x1ebe5f){return function(_0x21001b){try{jsonpatch['apply'](_0x21001b,_0x1ebe5f,!![]);}catch(_0x5bcd36){return BPromise[_0x92d0('0x23')](_0x5bcd36);}return _0x21001b[_0x92d0('0x24')]();};}function saveUpdates(_0x539672,_0x214d42){return function(_0x3cf6d9){if(_0x3cf6d9){return _0x3cf6d9[_0x92d0('0x25')](_0x539672)['then'](function(_0x3086a0){return _0x3086a0;});}return null;};}function removeEntity(_0x594647,_0x15ea11){return function(_0x4b6336){if(_0x4b6336){return _0x4b6336['destroy']()['then'](function(){_0x594647[_0x92d0('0x1d')](0xcc)[_0x92d0('0x1e')]();});}};}function handleEntityNotFound(_0x315753,_0xcfec3d){return function(_0x4dab67){if(!_0x4dab67){_0x315753[_0x92d0('0x1c')](0x194);}return _0x4dab67;};}function handleError(_0xa6841b,_0x2f6e27){_0x2f6e27=_0x2f6e27||0x1f4;return function(_0x19368d){logger[_0x92d0('0x26')](_0x19368d[_0x92d0('0x27')]);if(_0x19368d[_0x92d0('0x28')]){delete _0x19368d[_0x92d0('0x28')];}_0xa6841b['status'](_0x2f6e27)[_0x92d0('0x29')](_0x19368d);};}exports[_0x92d0('0x2a')]=function(_0x210965,_0x114373){var _0x5b3e12={},_0x4f531a={},_0x817f59={'count':0x0,'rows':[]};var _0x4255e7=db[_0x92d0('0x2b')][_0x92d0('0x2c')];_0x4f531a[_0x92d0('0x2d')]=_['keys'](_0x4255e7);_0x4f531a[_0x92d0('0x2e')]=_[_0x92d0('0x2f')](_0x210965[_0x92d0('0x2e')]);_0x4f531a[_0x92d0('0x30')]=_[_0x92d0('0x31')](_0x4f531a[_0x92d0('0x2d')],_0x4f531a['query']);_0x5b3e12[_0x92d0('0x32')]=_[_0x92d0('0x31')](_0x4f531a[_0x92d0('0x2d')],qs[_0x92d0('0x33')](_0x210965[_0x92d0('0x2e')]['fields']));_0x5b3e12[_0x92d0('0x32')]=_0x5b3e12[_0x92d0('0x32')][_0x92d0('0x34')]?_0x5b3e12[_0x92d0('0x32')]:_0x4f531a['model'];if(!_0x210965[_0x92d0('0x2e')][_0x92d0('0x35')](_0x92d0('0x36'))){_0x5b3e12[_0x92d0('0x37')]=qs[_0x92d0('0x37')](_0x210965[_0x92d0('0x2e')][_0x92d0('0x37')]);_0x5b3e12[_0x92d0('0x38')]=qs[_0x92d0('0x38')](_0x210965['query']['offset']);}_0x5b3e12['order']=qs['sort'](_0x210965['query'][_0x92d0('0x39')]);_0x5b3e12[_0x92d0('0x3a')]=qs[_0x92d0('0x30')](_[_0x92d0('0x3b')](_0x210965[_0x92d0('0x2e')],_0x4f531a[_0x92d0('0x30')]));if(_0x210965['query']['filter']){_0x5b3e12[_0x92d0('0x3a')]=_[_0x92d0('0x3c')](_0x5b3e12[_0x92d0('0x3a')],{'$or':_['map'](_0x4255e7,function(_0x366caf){if(_0x366caf[_0x92d0('0x3d')][_0x92d0('0x3e')]!==_0x92d0('0x3f')){var _0x18ec1b={};_0x18ec1b[_0x366caf[_0x92d0('0x40')]]={'$like':'%'+_0x210965['query'][_0x92d0('0x41')]+'%'};return _0x18ec1b;}})});}_0x5b3e12=_['merge']({},_0x5b3e12,_0x210965[_0x92d0('0x42')]);var _0x2508e9={'where':_0x5b3e12[_0x92d0('0x3a')]};return db[_0x92d0('0x2b')]['count'](_0x2508e9)[_0x92d0('0x43')](function(_0x21a8a4){_0x817f59[_0x92d0('0x20')]=_0x21a8a4;if(_0x210965[_0x92d0('0x2e')][_0x92d0('0x44')]){_0x5b3e12['include']=[{'all':!![]}];}return db[_0x92d0('0x2b')][_0x92d0('0x45')](_0x5b3e12);})[_0x92d0('0x43')](function(_0x1d0fe5){_0x817f59[_0x92d0('0x46')]=_0x1d0fe5;return _0x817f59;})[_0x92d0('0x43')](respondWithFilteredResult(_0x114373,_0x5b3e12))[_0x92d0('0x47')](handleError(_0x114373,null));};exports[_0x92d0('0x48')]=function(_0x505912,_0x4a0dda){var _0x1ab40a={'raw':!![],'where':{'id':_0x505912[_0x92d0('0x49')]['id']}},_0x3b6516={};_0x3b6516[_0x92d0('0x2d')]=_['keys'](db[_0x92d0('0x2b')][_0x92d0('0x2c')]);_0x3b6516[_0x92d0('0x2e')]=_[_0x92d0('0x2f')](_0x505912[_0x92d0('0x2e')]);_0x3b6516[_0x92d0('0x30')]=_['intersection'](_0x3b6516[_0x92d0('0x2d')],_0x3b6516[_0x92d0('0x2e')]);_0x1ab40a['attributes']=_['intersection'](_0x3b6516[_0x92d0('0x2d')],qs[_0x92d0('0x33')](_0x505912[_0x92d0('0x2e')][_0x92d0('0x33')]));_0x1ab40a['attributes']=_0x1ab40a[_0x92d0('0x32')]['length']?_0x1ab40a[_0x92d0('0x32')]:_0x3b6516[_0x92d0('0x2d')];if(_0x505912[_0x92d0('0x2e')]['includeAll']){_0x1ab40a[_0x92d0('0x4a')]=[{'all':!![]}];}_0x1ab40a=_['merge']({},_0x1ab40a,_0x505912[_0x92d0('0x42')]);return db[_0x92d0('0x2b')][_0x92d0('0x4b')](_0x1ab40a)[_0x92d0('0x43')](handleEntityNotFound(_0x4a0dda,null))[_0x92d0('0x43')](respondWithResult(_0x4a0dda,null))[_0x92d0('0x47')](handleError(_0x4a0dda,null));};exports[_0x92d0('0x4c')]=function(_0x40a7cb,_0x14ee8a){return db[_0x92d0('0x2b')]['create'](_0x40a7cb[_0x92d0('0x4d')],{})['then'](respondWithResult(_0x14ee8a,0xc9))[_0x92d0('0x47')](handleError(_0x14ee8a,null));};exports['update']=function(_0x2bf8c4,_0x48a8b8){if(_0x2bf8c4['body']['id']){delete _0x2bf8c4[_0x92d0('0x4d')]['id'];}return db[_0x92d0('0x2b')][_0x92d0('0x4b')]({'where':{'id':_0x2bf8c4[_0x92d0('0x49')]['id']}})['then'](handleEntityNotFound(_0x48a8b8,null))[_0x92d0('0x43')](saveUpdates(_0x2bf8c4[_0x92d0('0x4d')],null))[_0x92d0('0x43')](respondWithResult(_0x48a8b8,null))['catch'](handleError(_0x48a8b8,null));};exports[_0x92d0('0x4e')]=function(_0x4d4d1b,_0x5e9195){return db['FaxQueueReport'][_0x92d0('0x4b')]({'where':{'id':_0x4d4d1b['params']['id']}})['then'](handleEntityNotFound(_0x5e9195,null))[_0x92d0('0x43')](removeEntity(_0x5e9195,null))['catch'](handleError(_0x5e9195,null));};exports[_0x92d0('0x4f')]=function(_0x3748ae,_0x263ca0){return db[_0x92d0('0x2b')]['describe']()[_0x92d0('0x43')](respondWithResult(_0x263ca0,null))['catch'](handleError(_0x263ca0,null));};
\ No newline at end of file
+var _0x924d=['error','stack','name','send','FaxQueueReport','rawAttributes','model','query','filters','intersection','fields','attributes','length','nolimit','limit','order','sort','pick','filter','where','merge','key','VIRTUAL','field','options','includeAll','include','findAll','catch','show','params','create','body','find','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','save','update','destroy','then'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x924d,0x1d3));var _0xd924=function(_0x4c9d58,_0x1c83f0){_0x4c9d58=_0x4c9d58-0x0;var _0x3ad22d=_0x924d[_0x4c9d58];return _0x3ad22d;};'use strict';var pdf=require(_0xd924('0x0'));var emlformat=require(_0xd924('0x1'));var rimraf=require(_0xd924('0x2'));var zipdir=require(_0xd924('0x3'));var jsonpatch=require(_0xd924('0x4'));var rp=require(_0xd924('0x5'));var moment=require(_0xd924('0x6'));var BPromise=require(_0xd924('0x7'));var Mustache=require(_0xd924('0x8'));var util=require(_0xd924('0x9'));var path=require(_0xd924('0xa'));var sox=require(_0xd924('0xb'));var csv=require(_0xd924('0xc'));var ejs=require(_0xd924('0xd'));var fs=require('fs');var _=require(_0xd924('0xe'));var squel=require(_0xd924('0xf'));var crypto=require('crypto');var jsforce=require(_0xd924('0x10'));var deskjs=require(_0xd924('0x11'));var toCsv=require(_0xd924('0xc'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0xd924('0x12'));var hardwareService=require(_0xd924('0x13'));var Redis=require('ioredis');var qs=require(_0xd924('0x14'));var logger=require(_0xd924('0x15'))('api');var utils=require('../../config/utils');var config=require(_0xd924('0x16'));var db=require(_0xd924('0x17'))['db'];function respondWithStatusCode(_0x399952,_0x4fe613){_0x4fe613=_0x4fe613||0xcc;return function(_0x517eda){if(_0x517eda){return _0x399952[_0xd924('0x18')](_0x4fe613);}return _0x399952[_0xd924('0x19')](_0x4fe613)[_0xd924('0x1a')]();};}function respondWithResult(_0xdb7342,_0x378fd8){_0x378fd8=_0x378fd8||0xc8;return function(_0x56732a){if(_0x56732a){return _0xdb7342['status'](_0x378fd8)[_0xd924('0x1b')](_0x56732a);}};}function respondWithFilteredResult(_0x111446,_0x481989){return function(_0x5639a1){if(_0x5639a1){var _0x38d179=_0x5639a1[_0xd924('0x1c')],_0x3aaef8=_0x481989[_0xd924('0x1d')],_0x4a545f=_0x481989['offset']+_0x481989['limit'],_0x3f2d2b;if(_0x4a545f>=_0x38d179){_0x4a545f=_0x38d179;_0x3f2d2b=0xc8;}else{_0x3f2d2b=0xce;}_0x111446[_0xd924('0x19')](_0x3f2d2b);return _0x111446[_0xd924('0x1e')](_0xd924('0x1f'),_0x3aaef8+'-'+_0x4a545f+'/'+_0x38d179)[_0xd924('0x1b')](_0x5639a1);}return null;};}function patchUpdates(_0x202cb1){return function(_0x48ba9b){try{jsonpatch[_0xd924('0x20')](_0x48ba9b,_0x202cb1,!![]);}catch(_0x6d7a5){return BPromise['reject'](_0x6d7a5);}return _0x48ba9b[_0xd924('0x21')]();};}function saveUpdates(_0x462938,_0x35ba70){return function(_0x252073){if(_0x252073){return _0x252073[_0xd924('0x22')](_0x462938)['then'](function(_0x133751){return _0x133751;});}return null;};}function removeEntity(_0x2afc95,_0x1bb4c6){return function(_0x1f60b8){if(_0x1f60b8){return _0x1f60b8[_0xd924('0x23')]()[_0xd924('0x24')](function(){_0x2afc95['status'](0xcc)[_0xd924('0x1a')]();});}};}function handleEntityNotFound(_0x336811,_0x1a8d06){return function(_0x5b7102){if(!_0x5b7102){_0x336811['sendStatus'](0x194);}return _0x5b7102;};}function handleError(_0x3a899d,_0x4cb44b){_0x4cb44b=_0x4cb44b||0x1f4;return function(_0xdfc72a){logger[_0xd924('0x25')](_0xdfc72a[_0xd924('0x26')]);if(_0xdfc72a['name']){delete _0xdfc72a[_0xd924('0x27')];}_0x3a899d['status'](_0x4cb44b)[_0xd924('0x28')](_0xdfc72a);};}exports['index']=function(_0x20cd5b,_0x2268d5){var _0x284012={},_0x9d2270={},_0x52607f={'count':0x0,'rows':[]};var _0x57de09=db[_0xd924('0x29')][_0xd924('0x2a')];_0x9d2270[_0xd924('0x2b')]=_['keys'](_0x57de09);_0x9d2270[_0xd924('0x2c')]=_['keys'](_0x20cd5b['query']);_0x9d2270[_0xd924('0x2d')]=_[_0xd924('0x2e')](_0x9d2270[_0xd924('0x2b')],_0x9d2270[_0xd924('0x2c')]);_0x284012['attributes']=_['intersection'](_0x9d2270['model'],qs[_0xd924('0x2f')](_0x20cd5b[_0xd924('0x2c')][_0xd924('0x2f')]));_0x284012['attributes']=_0x284012[_0xd924('0x30')][_0xd924('0x31')]?_0x284012[_0xd924('0x30')]:_0x9d2270[_0xd924('0x2b')];if(!_0x20cd5b[_0xd924('0x2c')]['hasOwnProperty'](_0xd924('0x32'))){_0x284012[_0xd924('0x33')]=qs[_0xd924('0x33')](_0x20cd5b[_0xd924('0x2c')]['limit']);_0x284012['offset']=qs['offset'](_0x20cd5b[_0xd924('0x2c')][_0xd924('0x1d')]);}_0x284012[_0xd924('0x34')]=qs[_0xd924('0x35')](_0x20cd5b['query'][_0xd924('0x35')]);_0x284012['where']=qs['filters'](_[_0xd924('0x36')](_0x20cd5b[_0xd924('0x2c')],_0x9d2270[_0xd924('0x2d')]));if(_0x20cd5b[_0xd924('0x2c')][_0xd924('0x37')]){_0x284012[_0xd924('0x38')]=_[_0xd924('0x39')](_0x284012['where'],{'$or':_['map'](_0x57de09,function(_0x5b60c7){if(_0x5b60c7['type'][_0xd924('0x3a')]!==_0xd924('0x3b')){var _0x305ef3={};_0x305ef3[_0x5b60c7[_0xd924('0x3c')]]={'$like':'%'+_0x20cd5b[_0xd924('0x2c')][_0xd924('0x37')]+'%'};return _0x305ef3;}})});}_0x284012=_[_0xd924('0x39')]({},_0x284012,_0x20cd5b[_0xd924('0x3d')]);var _0x35ebca={'where':_0x284012[_0xd924('0x38')]};return db['FaxQueueReport']['count'](_0x35ebca)[_0xd924('0x24')](function(_0xfa5c9f){_0x52607f[_0xd924('0x1c')]=_0xfa5c9f;if(_0x20cd5b[_0xd924('0x2c')][_0xd924('0x3e')]){_0x284012[_0xd924('0x3f')]=[{'all':!![]}];}return db['FaxQueueReport'][_0xd924('0x40')](_0x284012);})['then'](function(_0x22de83){_0x52607f['rows']=_0x22de83;return _0x52607f;})['then'](respondWithFilteredResult(_0x2268d5,_0x284012))[_0xd924('0x41')](handleError(_0x2268d5,null));};exports[_0xd924('0x42')]=function(_0x6a90d8,_0x1bb9c7){var _0x15934c={'raw':!![],'where':{'id':_0x6a90d8[_0xd924('0x43')]['id']}},_0x1d8992={};_0x1d8992[_0xd924('0x2b')]=_['keys'](db['FaxQueueReport']['rawAttributes']);_0x1d8992[_0xd924('0x2c')]=_['keys'](_0x6a90d8['query']);_0x1d8992[_0xd924('0x2d')]=_[_0xd924('0x2e')](_0x1d8992[_0xd924('0x2b')],_0x1d8992[_0xd924('0x2c')]);_0x15934c[_0xd924('0x30')]=_[_0xd924('0x2e')](_0x1d8992[_0xd924('0x2b')],qs[_0xd924('0x2f')](_0x6a90d8['query'][_0xd924('0x2f')]));_0x15934c[_0xd924('0x30')]=_0x15934c['attributes']['length']?_0x15934c[_0xd924('0x30')]:_0x1d8992[_0xd924('0x2b')];if(_0x6a90d8[_0xd924('0x2c')]['includeAll']){_0x15934c[_0xd924('0x3f')]=[{'all':!![]}];}_0x15934c=_[_0xd924('0x39')]({},_0x15934c,_0x6a90d8['options']);return db[_0xd924('0x29')]['find'](_0x15934c)['then'](handleEntityNotFound(_0x1bb9c7,null))['then'](respondWithResult(_0x1bb9c7,null))[_0xd924('0x41')](handleError(_0x1bb9c7,null));};exports[_0xd924('0x44')]=function(_0x1d3c46,_0x7c3ac2){return db[_0xd924('0x29')]['create'](_0x1d3c46[_0xd924('0x45')],{})[_0xd924('0x24')](respondWithResult(_0x7c3ac2,0xc9))[_0xd924('0x41')](handleError(_0x7c3ac2,null));};exports['update']=function(_0x5a9293,_0x20f043){if(_0x5a9293[_0xd924('0x45')]['id']){delete _0x5a9293[_0xd924('0x45')]['id'];}return db['FaxQueueReport'][_0xd924('0x46')]({'where':{'id':_0x5a9293[_0xd924('0x43')]['id']}})[_0xd924('0x24')](handleEntityNotFound(_0x20f043,null))[_0xd924('0x24')](saveUpdates(_0x5a9293[_0xd924('0x45')],null))[_0xd924('0x24')](respondWithResult(_0x20f043,null))[_0xd924('0x41')](handleError(_0x20f043,null));};exports[_0xd924('0x23')]=function(_0x18e527,_0x470f54){return db['FaxQueueReport']['find']({'where':{'id':_0x18e527[_0xd924('0x43')]['id']}})['then'](handleEntityNotFound(_0x470f54,null))[_0xd924('0x24')](removeEntity(_0x470f54,null))['catch'](handleError(_0x470f54,null));};exports[_0xd924('0x47')]=function(_0x563d94,_0x4ce5e0){return db[_0xd924('0x29')][_0xd924('0x47')]()[_0xd924('0x24')](respondWithResult(_0x4ce5e0,null))[_0xd924('0x41')](handleError(_0x4ce5e0,null));};
\ No newline at end of file
index 640ff9b..b48d636 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8654=['moment','bluebird','./faxQueueReport.attributes','FaxQueueReport','report_fax_queue','uniqueid','lodash','util','../../config/logger','api'];(function(_0x2e913b,_0x4b7071){var _0x173899=function(_0x2a7d22){while(--_0x2a7d22){_0x2e913b['push'](_0x2e913b['shift']());}};_0x173899(++_0x4b7071);}(_0x8654,0xba));var _0x4865=function(_0x28cd89,_0x496e1b){_0x28cd89=_0x28cd89-0x0;var _0x2fca51=_0x8654[_0x28cd89];return _0x2fca51;};'use strict';var _=require(_0x4865('0x0'));var util=require(_0x4865('0x1'));var logger=require(_0x4865('0x2'))(_0x4865('0x3'));var moment=require(_0x4865('0x4'));var BPromise=require(_0x4865('0x5'));var rp=require('request-promise');var attributes=require(_0x4865('0x6'));module['exports']=function(_0x3fb318,_0x131c6c){return _0x3fb318['define'](_0x4865('0x7'),attributes,{'tableName':_0x4865('0x8'),'paranoid':![],'indexes':[{'name':_0x4865('0x9'),'fields':[_0x4865('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xc314=['../../config/logger','api','./faxQueueReport.attributes','exports','define','FaxQueueReport','report_fax_queue','uniqueid','util'];(function(_0x45edba,_0x3afa1c){var _0x68d3f=function(_0x3de369){while(--_0x3de369){_0x45edba['push'](_0x45edba['shift']());}};_0x68d3f(++_0x3afa1c);}(_0xc314,0x167));var _0x4c31=function(_0x502c7d,_0x2f1285){_0x502c7d=_0x502c7d-0x0;var _0x30b7ed=_0xc314[_0x502c7d];return _0x30b7ed;};'use strict';var _=require('lodash');var util=require(_0x4c31('0x0'));var logger=require(_0x4c31('0x1'))(_0x4c31('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x4c31('0x3'));module[_0x4c31('0x4')]=function(_0x13ac53,_0x48697d){return _0x13ac53[_0x4c31('0x5')](_0x4c31('0x6'),attributes,{'tableName':_0x4c31('0x7'),'paranoid':![],'indexes':[{'name':_0x4c31('0x8'),'fields':[_0x4c31('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
index b4ed80b..972467c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffe1=['raw','then','CreateFaxQueueReport','catch','attributes','limit','UpdateFaxQueueReport','lodash','util','bluebird','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','FaxQueueReport,\x20%s,\x20%s','request\x20sent','debug','FaxQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','FaxQueueReport','body','options'];(function(_0x1757b4,_0x29c2d1){var _0x3a8e03=function(_0x3826af){while(--_0x3826af){_0x1757b4['push'](_0x1757b4['shift']());}};_0x3a8e03(++_0x29c2d1);}(_0xffe1,0x187));var _0x1ffe=function(_0x1a0577,_0x31cb79){_0x1a0577=_0x1a0577-0x0;var _0x33ab53=_0xffe1[_0x1a0577];return _0x33ab53;};'use strict';var _=require(_0x1ffe('0x0'));var util=require(_0x1ffe('0x1'));var moment=require('moment');var BPromise=require(_0x1ffe('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x1ffe('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x1ffe('0x4'));var logger=require(_0x1ffe('0x5'))(_0x1ffe('0x6'));var config=require(_0x1ffe('0x7'));var jayson=require(_0x1ffe('0x8'));var client=jayson[_0x1ffe('0x9')][_0x1ffe('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x37df04,_0x41a9f9,_0x548bc9){return new BPromise(function(_0x1c6bdb,_0x4c125e){return client[_0x1ffe('0xb')](_0x37df04,_0x548bc9)['then'](function(_0x29f784){logger['info'](_0x1ffe('0xc'),_0x41a9f9,_0x1ffe('0xd'));logger[_0x1ffe('0xe')](_0x1ffe('0xf'),_0x41a9f9,_0x1ffe('0xd'),JSON[_0x1ffe('0x10')](_0x29f784));if(_0x29f784[_0x1ffe('0x11')]){if(_0x29f784[_0x1ffe('0x11')][_0x1ffe('0x12')]===0x1f4){logger['error']('FaxQueueReport,\x20%s,\x20%s',_0x41a9f9,_0x29f784[_0x1ffe('0x11')][_0x1ffe('0x13')]);return _0x4c125e(_0x29f784[_0x1ffe('0x11')][_0x1ffe('0x13')]);}logger[_0x1ffe('0x11')](_0x1ffe('0xc'),_0x41a9f9,_0x29f784[_0x1ffe('0x11')]['message']);return _0x1c6bdb(_0x29f784[_0x1ffe('0x11')][_0x1ffe('0x13')]);}else{logger[_0x1ffe('0x14')](_0x1ffe('0xc'),_0x41a9f9,_0x1ffe('0xd'));_0x1c6bdb(_0x29f784[_0x1ffe('0x15')][_0x1ffe('0x13')]);}})['catch'](function(_0x4d5cee){logger['error'](_0x1ffe('0xc'),_0x41a9f9,_0x4d5cee);_0x4c125e(_0x4d5cee);});});}exports['CreateFaxQueueReport']=function(_0x37ce73){var _0x400a34=this;return new Promise(function(_0x762656,_0x2987d7){return db[_0x1ffe('0x16')]['create'](_0x37ce73[_0x1ffe('0x17')],{'raw':_0x37ce73[_0x1ffe('0x18')]?_0x37ce73[_0x1ffe('0x18')][_0x1ffe('0x19')]===undefined?!![]:![]:!![]})[_0x1ffe('0x1a')](function(_0x280598){logger[_0x1ffe('0x14')](_0x1ffe('0x1b'),_0x37ce73);logger[_0x1ffe('0xe')]('CreateFaxQueueReport',_0x37ce73,JSON['stringify'](_0x280598));_0x762656(_0x280598);})[_0x1ffe('0x1c')](function(_0x2be091){logger[_0x1ffe('0x11')](_0x1ffe('0x1b'),_0x2be091['message'],_0x37ce73);_0x2987d7(_0x400a34['error'](0x1f4,_0x2be091[_0x1ffe('0x13')]));});});};exports['UpdateFaxQueueReport']=function(_0x49d68b){var _0x24fe0c=this;return new Promise(function(_0x29a9f3,_0x5215db){return db['FaxQueueReport']['update'](_0x49d68b[_0x1ffe('0x17')],{'raw':_0x49d68b[_0x1ffe('0x18')]?_0x49d68b[_0x1ffe('0x18')][_0x1ffe('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x49d68b['options']?_0x49d68b[_0x1ffe('0x18')]['where']||null:null,'attributes':_0x49d68b[_0x1ffe('0x18')]?_0x49d68b['options'][_0x1ffe('0x1d')]||null:null,'limit':_0x49d68b[_0x1ffe('0x18')]?_0x49d68b[_0x1ffe('0x18')][_0x1ffe('0x1e')]||null:null})['then'](function(_0x820365){logger[_0x1ffe('0x14')](_0x1ffe('0x1f'),_0x49d68b);logger[_0x1ffe('0xe')](_0x1ffe('0x1f'),_0x49d68b,JSON[_0x1ffe('0x10')](_0x820365));_0x29a9f3(_0x820365);})[_0x1ffe('0x1c')](function(_0x36feeb){logger[_0x1ffe('0x11')](_0x1ffe('0x1f'),_0x36feeb[_0x1ffe('0x13')],_0x49d68b);_0x5215db(_0x24fe0c[_0x1ffe('0x11')](0x1f4,_0x36feeb['message']));});});};
\ No newline at end of file
+var _0x7382=['attributes','limit','util','randomstring','../../mysqldb','../../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','raw','stringify','UpdateFaxQueueReport','where'];(function(_0x4d3663,_0x282e6b){var _0x35c844=function(_0x1b53fc){while(--_0x1b53fc){_0x4d3663['push'](_0x4d3663['shift']());}};_0x35c844(++_0x282e6b);}(_0x7382,0x1f2));var _0x2738=function(_0x3b753e,_0x2295bd){_0x3b753e=_0x3b753e-0x0;var _0x20c0b9=_0x7382[_0x3b753e];return _0x20c0b9;};'use strict';var _=require('lodash');var util=require(_0x2738('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x2738('0x1'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x2738('0x2'))['db'];var utils=require('../../config/utils');var logger=require(_0x2738('0x3'))(_0x2738('0x4'));var config=require('../../config/environment');var jayson=require(_0x2738('0x5'));var client=jayson[_0x2738('0x6')][_0x2738('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x1437b0,_0x4f0d91,_0x99e22e){return new BPromise(function(_0x20a64f,_0x351335){return client[_0x2738('0x8')](_0x1437b0,_0x99e22e)[_0x2738('0x9')](function(_0x4d8c36){logger[_0x2738('0xa')](_0x2738('0xb'),_0x4f0d91,_0x2738('0xc'));logger[_0x2738('0xd')](_0x2738('0xe'),_0x4f0d91,'request\x20sent',JSON['stringify'](_0x4d8c36));if(_0x4d8c36['error']){if(_0x4d8c36[_0x2738('0xf')][_0x2738('0x10')]===0x1f4){logger[_0x2738('0xf')](_0x2738('0xb'),_0x4f0d91,_0x4d8c36[_0x2738('0xf')][_0x2738('0x11')]);return _0x351335(_0x4d8c36[_0x2738('0xf')][_0x2738('0x11')]);}logger[_0x2738('0xf')](_0x2738('0xb'),_0x4f0d91,_0x4d8c36[_0x2738('0xf')][_0x2738('0x11')]);return _0x20a64f(_0x4d8c36['error'][_0x2738('0x11')]);}else{logger[_0x2738('0xa')]('FaxQueueReport,\x20%s,\x20%s',_0x4f0d91,'request\x20sent');_0x20a64f(_0x4d8c36[_0x2738('0x12')][_0x2738('0x11')]);}})[_0x2738('0x13')](function(_0x588a68){logger[_0x2738('0xf')](_0x2738('0xb'),_0x4f0d91,_0x588a68);_0x351335(_0x588a68);});});}exports[_0x2738('0x14')]=function(_0x2ab61b){var _0x19d331=this;return new Promise(function(_0x4a0f1e,_0x43cab3){return db[_0x2738('0x15')][_0x2738('0x16')](_0x2ab61b[_0x2738('0x17')],{'raw':_0x2ab61b[_0x2738('0x18')]?_0x2ab61b[_0x2738('0x18')][_0x2738('0x19')]===undefined?!![]:![]:!![]})[_0x2738('0x9')](function(_0x2dcc5e){logger['info'](_0x2738('0x14'),_0x2ab61b);logger['debug'](_0x2738('0x14'),_0x2ab61b,JSON[_0x2738('0x1a')](_0x2dcc5e));_0x4a0f1e(_0x2dcc5e);})[_0x2738('0x13')](function(_0x36b4bb){logger['error']('CreateFaxQueueReport',_0x36b4bb[_0x2738('0x11')],_0x2ab61b);_0x43cab3(_0x19d331[_0x2738('0xf')](0x1f4,_0x36b4bb[_0x2738('0x11')]));});});};exports[_0x2738('0x1b')]=function(_0x509c92){var _0x26f554=this;return new Promise(function(_0x3d8274,_0x32574a){return db[_0x2738('0x15')]['update'](_0x509c92['body'],{'raw':_0x509c92['options']?_0x509c92[_0x2738('0x18')][_0x2738('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x509c92['options']?_0x509c92[_0x2738('0x18')][_0x2738('0x1c')]||null:null,'attributes':_0x509c92[_0x2738('0x18')]?_0x509c92['options'][_0x2738('0x1d')]||null:null,'limit':_0x509c92[_0x2738('0x18')]?_0x509c92[_0x2738('0x18')][_0x2738('0x1e')]||null:null})[_0x2738('0x9')](function(_0x263ebd){logger[_0x2738('0xa')](_0x2738('0x1b'),_0x509c92);logger[_0x2738('0xd')]('UpdateFaxQueueReport',_0x509c92,JSON['stringify'](_0x263ebd));_0x3d8274(_0x263ebd);})[_0x2738('0x13')](function(_0x3f5bac){logger['error']('UpdateFaxQueueReport',_0x3f5bac[_0x2738('0x11')],_0x509c92);_0x32574a(_0x26f554[_0x2738('0xf')](0x1f4,_0x3f5bac[_0x2738('0x11')]));});});};
\ No newline at end of file
index 522c59d..3c9fb8f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdefe=['../../components/auth/service','../../config/environment','./faxQueueReport.controller','isAuthenticated','index','get','/describe','describe','/:id','create','put','delete','destroy','exports','util','path','connect-timeout','express','Router'];(function(_0x4066a3,_0x3b13ed){var _0x489e69=function(_0x313a4e){while(--_0x313a4e){_0x4066a3['push'](_0x4066a3['shift']());}};_0x489e69(++_0x3b13ed);}(_0xdefe,0x13e));var _0xedef=function(_0x42883f,_0x5a9294){_0x42883f=_0x42883f-0x0;var _0x533e26=_0xdefe[_0x42883f];return _0x533e26;};'use strict';var multer=require('multer');var util=require(_0xedef('0x0'));var path=require(_0xedef('0x1'));var timeout=require(_0xedef('0x2'));var express=require(_0xedef('0x3'));var router=express[_0xedef('0x4')]();var auth=require(_0xedef('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xedef('0x6'));var controller=require(_0xedef('0x7'));router['get']('/',auth[_0xedef('0x8')](),controller[_0xedef('0x9')]);router[_0xedef('0xa')](_0xedef('0xb'),auth[_0xedef('0x8')](),controller[_0xedef('0xc')]);router[_0xedef('0xa')](_0xedef('0xd'),auth[_0xedef('0x8')](),controller['show']);router['post']('/',auth[_0xedef('0x8')](),controller[_0xedef('0xe')]);router[_0xedef('0xf')](_0xedef('0xd'),auth[_0xedef('0x8')](),controller['update']);router[_0xedef('0x10')]('/:id',auth[_0xedef('0x8')](),controller[_0xedef('0x11')]);module[_0xedef('0x12')]=router;
\ No newline at end of file
+var _0x92ac=['get','isAuthenticated','index','describe','/:id','show','post','put','destroy','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxQueueReport.controller'];(function(_0x5da5ef,_0x396d68){var _0x578bd0=function(_0x34eb07){while(--_0x34eb07){_0x5da5ef['push'](_0x5da5ef['shift']());}};_0x578bd0(++_0x396d68);}(_0x92ac,0x1d9));var _0xc92a=function(_0xae7c2f,_0xf31e04){_0xae7c2f=_0xae7c2f-0x0;var _0x5d7001=_0x92ac[_0xae7c2f];return _0x5d7001;};'use strict';var multer=require('multer');var util=require(_0xc92a('0x0'));var path=require(_0xc92a('0x1'));var timeout=require('connect-timeout');var express=require(_0xc92a('0x2'));var router=express['Router']();var auth=require(_0xc92a('0x3'));var interaction=require(_0xc92a('0x4'));var config=require(_0xc92a('0x5'));var controller=require(_0xc92a('0x6'));router[_0xc92a('0x7')]('/',auth[_0xc92a('0x8')](),controller[_0xc92a('0x9')]);router[_0xc92a('0x7')]('/describe',auth[_0xc92a('0x8')](),controller[_0xc92a('0xa')]);router[_0xc92a('0x7')](_0xc92a('0xb'),auth[_0xc92a('0x8')](),controller[_0xc92a('0xc')]);router[_0xc92a('0xd')]('/',auth[_0xc92a('0x8')](),controller['create']);router[_0xc92a('0xe')](_0xc92a('0xb'),auth[_0xc92a('0x8')](),controller['update']);router['delete'](_0xc92a('0xb'),auth[_0xc92a('0x8')](),controller[_0xc92a('0xf')]);module['exports']=router;
\ No newline at end of file
index 2114af6..08c2182 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc5ff=['NOW','moment','sequelize','exports','agent','queue','DATE'];(function(_0x326e79,_0x33dc91){var _0x37eb89=function(_0xbaef25){while(--_0xbaef25){_0x326e79['push'](_0x326e79['shift']());}};_0x37eb89(++_0x33dc91);}(_0xc5ff,0x158));var _0xfc5f=function(_0x16f179,_0x25a370){_0x16f179=_0x16f179-0x0;var _0x4e74b2=_0xc5ff[_0x16f179];return _0x4e74b2;};'use strict';var moment=require(_0xfc5f('0x0'));var Sequelize=require(_0xfc5f('0x1'));module[_0xfc5f('0x2')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize['ENUM']('account',_0xfc5f('0x3'),_0xfc5f('0x4')),'allowNull':![],'defaultValue':_0xfc5f('0x4')},'transferredAt':{'type':Sequelize[_0xfc5f('0x5')],'allowNull':![],'defaultValue':Sequelize[_0xfc5f('0x6')]}};
\ No newline at end of file
+var _0x0d6b=['queue','DATE','NOW','sequelize','exports','STRING','ENUM','account','agent'];(function(_0x45b374,_0x20dccb){var _0x24fc74=function(_0x357eaf){while(--_0x357eaf){_0x45b374['push'](_0x45b374['shift']());}};_0x24fc74(++_0x20dccb);}(_0x0d6b,0x135));var _0xb0d6=function(_0x59fa48,_0x5c1a10){_0x59fa48=_0x59fa48-0x0;var _0x3c8f33=_0x0d6b[_0x59fa48];return _0x3c8f33;};'use strict';var moment=require('moment');var Sequelize=require(_0xb0d6('0x0'));module[_0xb0d6('0x1')]={'uniqueid':{'type':Sequelize[_0xb0d6('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0xb0d6('0x3')](_0xb0d6('0x4'),_0xb0d6('0x5'),_0xb0d6('0x6')),'allowNull':![],'defaultValue':_0xb0d6('0x6')},'transferredAt':{'type':Sequelize[_0xb0d6('0x7')],'allowNull':![],'defaultValue':Sequelize[_0xb0d6('0x8')]}};
\ No newline at end of file
index 9aea64f..1b54549 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe009=['params','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','../../mysqldb','status','end','Content-Range','json','apply','reject','save','destroy','then','sendStatus','error','stack','name','send','index','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','limit','offset','order','sort','where','merge','type','key','VIRTUAL','field','options','FaxTransferReport','count','include','findAll','rows','catch','rawAttributes','length','find','create','body'];(function(_0x1f269a,_0x23719d){var _0x9aa1d8=function(_0x2dfba6){while(--_0x2dfba6){_0x1f269a['push'](_0x1f269a['shift']());}};_0x9aa1d8(++_0x23719d);}(_0xe009,0x122));var _0x9e00=function(_0x2fa0ff,_0x5ab426){_0x2fa0ff=_0x2fa0ff-0x0;var _0x18e8d9=_0xe009[_0x2fa0ff];return _0x18e8d9;};'use strict';var pdf=require(_0x9e00('0x0'));var emlformat=require(_0x9e00('0x1'));var rimraf=require(_0x9e00('0x2'));var zipdir=require(_0x9e00('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x9e00('0x4'));var moment=require('moment');var BPromise=require(_0x9e00('0x5'));var Mustache=require(_0x9e00('0x6'));var util=require(_0x9e00('0x7'));var path=require(_0x9e00('0x8'));var sox=require(_0x9e00('0x9'));var csv=require(_0x9e00('0xa'));var ejs=require(_0x9e00('0xb'));var fs=require('fs');var _=require(_0x9e00('0xc'));var squel=require(_0x9e00('0xd'));var crypto=require(_0x9e00('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x9e00('0xf'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x9e00('0x10'));var authService=require(_0x9e00('0x11'));var hardwareService=require(_0x9e00('0x12'));var Redis=require(_0x9e00('0x13'));var qs=require('../../components/parsers/qs');var logger=require(_0x9e00('0x14'))(_0x9e00('0x15'));var utils=require(_0x9e00('0x16'));var config=require('../../config/environment');var db=require(_0x9e00('0x17'))['db'];function respondWithStatusCode(_0x4fd244,_0x5a7616){_0x5a7616=_0x5a7616||0xcc;return function(_0x3b81bc){if(_0x3b81bc){return _0x4fd244['sendStatus'](_0x5a7616);}return _0x4fd244[_0x9e00('0x18')](_0x5a7616)[_0x9e00('0x19')]();};}function respondWithResult(_0x1d2d17,_0x344c3e){_0x344c3e=_0x344c3e||0xc8;return function(_0x175e7d){if(_0x175e7d){return _0x1d2d17[_0x9e00('0x18')](_0x344c3e)['json'](_0x175e7d);}};}function respondWithFilteredResult(_0x5d7a77,_0x3bac39){return function(_0x4f3aad){if(_0x4f3aad){var _0x10df77=_0x4f3aad['count'],_0x22ff8f=_0x3bac39['offset'],_0x298cb4=_0x3bac39['offset']+_0x3bac39['limit'],_0x1ce9bd;if(_0x298cb4>=_0x10df77){_0x298cb4=_0x10df77;_0x1ce9bd=0xc8;}else{_0x1ce9bd=0xce;}_0x5d7a77[_0x9e00('0x18')](_0x1ce9bd);return _0x5d7a77['set'](_0x9e00('0x1a'),_0x22ff8f+'-'+_0x298cb4+'/'+_0x10df77)[_0x9e00('0x1b')](_0x4f3aad);}return null;};}function patchUpdates(_0x4d5527){return function(_0x3113bd){try{jsonpatch[_0x9e00('0x1c')](_0x3113bd,_0x4d5527,!![]);}catch(_0x11246e){return BPromise[_0x9e00('0x1d')](_0x11246e);}return _0x3113bd[_0x9e00('0x1e')]();};}function saveUpdates(_0x24a7e0,_0x6eba21){return function(_0x306094){if(_0x306094){return _0x306094['update'](_0x24a7e0)['then'](function(_0x181609){return _0x181609;});}return null;};}function removeEntity(_0x35e70b,_0x34c3dc){return function(_0x5c819f){if(_0x5c819f){return _0x5c819f[_0x9e00('0x1f')]()[_0x9e00('0x20')](function(){_0x35e70b[_0x9e00('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x45b3b3,_0x4008f9){return function(_0x18fac5){if(!_0x18fac5){_0x45b3b3[_0x9e00('0x21')](0x194);}return _0x18fac5;};}function handleError(_0x826a6,_0xe40857){_0xe40857=_0xe40857||0x1f4;return function(_0x12df8e){logger[_0x9e00('0x22')](_0x12df8e[_0x9e00('0x23')]);if(_0x12df8e[_0x9e00('0x24')]){delete _0x12df8e[_0x9e00('0x24')];}_0x826a6[_0x9e00('0x18')](_0xe40857)[_0x9e00('0x25')](_0x12df8e);};}exports[_0x9e00('0x26')]=function(_0x831f2b,_0x249fe0){var _0x277807={},_0xa43f0d={},_0x19a6ed={'count':0x0,'rows':[]};var _0x5aedc1=db['FaxTransferReport']['rawAttributes'];_0xa43f0d[_0x9e00('0x27')]=_[_0x9e00('0x28')](_0x5aedc1);_0xa43f0d[_0x9e00('0x29')]=_[_0x9e00('0x28')](_0x831f2b['query']);_0xa43f0d[_0x9e00('0x2a')]=_[_0x9e00('0x2b')](_0xa43f0d[_0x9e00('0x27')],_0xa43f0d['query']);_0x277807[_0x9e00('0x2c')]=_[_0x9e00('0x2b')](_0xa43f0d[_0x9e00('0x27')],qs[_0x9e00('0x2d')](_0x831f2b[_0x9e00('0x29')][_0x9e00('0x2d')]));_0x277807[_0x9e00('0x2c')]=_0x277807[_0x9e00('0x2c')]['length']?_0x277807['attributes']:_0xa43f0d[_0x9e00('0x27')];if(!_0x831f2b[_0x9e00('0x29')][_0x9e00('0x2e')](_0x9e00('0x2f'))){_0x277807[_0x9e00('0x30')]=qs[_0x9e00('0x30')](_0x831f2b[_0x9e00('0x29')][_0x9e00('0x30')]);_0x277807['offset']=qs[_0x9e00('0x31')](_0x831f2b['query'][_0x9e00('0x31')]);}_0x277807[_0x9e00('0x32')]=qs[_0x9e00('0x33')](_0x831f2b[_0x9e00('0x29')][_0x9e00('0x33')]);_0x277807['where']=qs[_0x9e00('0x2a')](_['pick'](_0x831f2b['query'],_0xa43f0d[_0x9e00('0x2a')]));if(_0x831f2b['query']['filter']){_0x277807[_0x9e00('0x34')]=_[_0x9e00('0x35')](_0x277807[_0x9e00('0x34')],{'$or':_['map'](_0x5aedc1,function(_0x7df394){if(_0x7df394[_0x9e00('0x36')][_0x9e00('0x37')]!==_0x9e00('0x38')){var _0x356e0e={};_0x356e0e[_0x7df394[_0x9e00('0x39')]]={'$like':'%'+_0x831f2b['query']['filter']+'%'};return _0x356e0e;}})});}_0x277807=_[_0x9e00('0x35')]({},_0x277807,_0x831f2b[_0x9e00('0x3a')]);var _0x169b70={'where':_0x277807['where']};return db[_0x9e00('0x3b')]['count'](_0x169b70)[_0x9e00('0x20')](function(_0x5e229e){_0x19a6ed[_0x9e00('0x3c')]=_0x5e229e;if(_0x831f2b[_0x9e00('0x29')]['includeAll']){_0x277807[_0x9e00('0x3d')]=[{'all':!![]}];}return db[_0x9e00('0x3b')][_0x9e00('0x3e')](_0x277807);})[_0x9e00('0x20')](function(_0x31d1c4){_0x19a6ed[_0x9e00('0x3f')]=_0x31d1c4;return _0x19a6ed;})[_0x9e00('0x20')](respondWithFilteredResult(_0x249fe0,_0x277807))[_0x9e00('0x40')](handleError(_0x249fe0,null));};exports['show']=function(_0x40ea5b,_0x524cd1){var _0x4d857d={'raw':!![],'where':{'id':_0x40ea5b['params']['id']}},_0x521b35={};_0x521b35[_0x9e00('0x27')]=_[_0x9e00('0x28')](db[_0x9e00('0x3b')][_0x9e00('0x41')]);_0x521b35[_0x9e00('0x29')]=_['keys'](_0x40ea5b['query']);_0x521b35[_0x9e00('0x2a')]=_[_0x9e00('0x2b')](_0x521b35[_0x9e00('0x27')],_0x521b35[_0x9e00('0x29')]);_0x4d857d[_0x9e00('0x2c')]=_['intersection'](_0x521b35[_0x9e00('0x27')],qs[_0x9e00('0x2d')](_0x40ea5b['query'][_0x9e00('0x2d')]));_0x4d857d[_0x9e00('0x2c')]=_0x4d857d[_0x9e00('0x2c')][_0x9e00('0x42')]?_0x4d857d[_0x9e00('0x2c')]:_0x521b35[_0x9e00('0x27')];if(_0x40ea5b['query']['includeAll']){_0x4d857d[_0x9e00('0x3d')]=[{'all':!![]}];}_0x4d857d=_[_0x9e00('0x35')]({},_0x4d857d,_0x40ea5b[_0x9e00('0x3a')]);return db[_0x9e00('0x3b')][_0x9e00('0x43')](_0x4d857d)[_0x9e00('0x20')](handleEntityNotFound(_0x524cd1,null))[_0x9e00('0x20')](respondWithResult(_0x524cd1,null))[_0x9e00('0x40')](handleError(_0x524cd1,null));};exports[_0x9e00('0x44')]=function(_0x4df1ff,_0x14663d){return db[_0x9e00('0x3b')][_0x9e00('0x44')](_0x4df1ff[_0x9e00('0x45')],{})[_0x9e00('0x20')](respondWithResult(_0x14663d,0xc9))['catch'](handleError(_0x14663d,null));};exports['update']=function(_0x283681,_0x3059ec){if(_0x283681[_0x9e00('0x45')]['id']){delete _0x283681[_0x9e00('0x45')]['id'];}return db[_0x9e00('0x3b')][_0x9e00('0x43')]({'where':{'id':_0x283681['params']['id']}})[_0x9e00('0x20')](handleEntityNotFound(_0x3059ec,null))[_0x9e00('0x20')](saveUpdates(_0x283681[_0x9e00('0x45')],null))['then'](respondWithResult(_0x3059ec,null))[_0x9e00('0x40')](handleError(_0x3059ec,null));};exports['destroy']=function(_0x41bd72,_0x12dc78){return db['FaxTransferReport'][_0x9e00('0x43')]({'where':{'id':_0x41bd72[_0x9e00('0x46')]['id']}})['then'](handleEntityNotFound(_0x12dc78,null))[_0x9e00('0x20')](removeEntity(_0x12dc78,null))['catch'](handleError(_0x12dc78,null));};exports[_0x9e00('0x47')]=function(_0x5b426b,_0x332105){return db[_0x9e00('0x3b')][_0x9e00('0x47')]()[_0x9e00('0x20')](respondWithResult(_0x332105,null))['catch'](handleError(_0x332105,null));};
\ No newline at end of file
+var _0x37a7=['then','destroy','error','name','send','index','FaxTransferReport','rawAttributes','keys','query','filters','model','attributes','intersection','fields','length','hasOwnProperty','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','include','findAll','catch','show','params','includeAll','find','create','body','update','describe','html-pdf','eml-format','request-promise','moment','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject'];(function(_0x50a0c2,_0x4befab){var _0x5ebadd=function(_0x3a3342){while(--_0x3a3342){_0x50a0c2['push'](_0x50a0c2['shift']());}};_0x5ebadd(++_0x4befab);}(_0x37a7,0x6f));var _0x737a=function(_0x2561ce,_0xd2f115){_0x2561ce=_0x2561ce-0x0;var _0x1995b5=_0x37a7[_0x2561ce];return _0x1995b5;};'use strict';var pdf=require(_0x737a('0x0'));var emlformat=require(_0x737a('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x737a('0x2'));var moment=require(_0x737a('0x3'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x737a('0x4'));var sox=require(_0x737a('0x5'));var csv=require(_0x737a('0x6'));var ejs=require(_0x737a('0x7'));var fs=require('fs');var _=require(_0x737a('0x8'));var squel=require('squel');var crypto=require(_0x737a('0x9'));var jsforce=require(_0x737a('0xa'));var deskjs=require(_0x737a('0xb'));var toCsv=require(_0x737a('0x6'));var querystring=require('querystring');var Papa=require(_0x737a('0xc'));var authService=require(_0x737a('0xd'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x737a('0xe'));var qs=require(_0x737a('0xf'));var logger=require(_0x737a('0x10'))(_0x737a('0x11'));var utils=require(_0x737a('0x12'));var config=require(_0x737a('0x13'));var db=require(_0x737a('0x14'))['db'];function respondWithStatusCode(_0x4bcf5e,_0x6b6a2){_0x6b6a2=_0x6b6a2||0xcc;return function(_0x22cc58){if(_0x22cc58){return _0x4bcf5e[_0x737a('0x15')](_0x6b6a2);}return _0x4bcf5e[_0x737a('0x16')](_0x6b6a2)[_0x737a('0x17')]();};}function respondWithResult(_0x1fc7dc,_0x1210f3){_0x1210f3=_0x1210f3||0xc8;return function(_0x216a1d){if(_0x216a1d){return _0x1fc7dc['status'](_0x1210f3)[_0x737a('0x18')](_0x216a1d);}};}function respondWithFilteredResult(_0x34dc87,_0x5ac00d){return function(_0x597c9d){if(_0x597c9d){var _0xbf359e=_0x597c9d[_0x737a('0x19')],_0x37fc59=_0x5ac00d[_0x737a('0x1a')],_0x64901f=_0x5ac00d['offset']+_0x5ac00d[_0x737a('0x1b')],_0xd5dd7c;if(_0x64901f>=_0xbf359e){_0x64901f=_0xbf359e;_0xd5dd7c=0xc8;}else{_0xd5dd7c=0xce;}_0x34dc87['status'](_0xd5dd7c);return _0x34dc87[_0x737a('0x1c')](_0x737a('0x1d'),_0x37fc59+'-'+_0x64901f+'/'+_0xbf359e)['json'](_0x597c9d);}return null;};}function patchUpdates(_0x40691d){return function(_0x4c015f){try{jsonpatch['apply'](_0x4c015f,_0x40691d,!![]);}catch(_0x3bf493){return BPromise[_0x737a('0x1e')](_0x3bf493);}return _0x4c015f['save']();};}function saveUpdates(_0x470d2d,_0x295fe1){return function(_0x8d8378){if(_0x8d8378){return _0x8d8378['update'](_0x470d2d)[_0x737a('0x1f')](function(_0x4ac430){return _0x4ac430;});}return null;};}function removeEntity(_0xe47a73,_0x5423ba){return function(_0x28a36e){if(_0x28a36e){return _0x28a36e[_0x737a('0x20')]()[_0x737a('0x1f')](function(){_0xe47a73[_0x737a('0x16')](0xcc)[_0x737a('0x17')]();});}};}function handleEntityNotFound(_0xd334c0,_0x1979e9){return function(_0x379439){if(!_0x379439){_0xd334c0['sendStatus'](0x194);}return _0x379439;};}function handleError(_0x4df398,_0x153dad){_0x153dad=_0x153dad||0x1f4;return function(_0x54a7ec){logger[_0x737a('0x21')](_0x54a7ec['stack']);if(_0x54a7ec[_0x737a('0x22')]){delete _0x54a7ec[_0x737a('0x22')];}_0x4df398[_0x737a('0x16')](_0x153dad)[_0x737a('0x23')](_0x54a7ec);};}exports[_0x737a('0x24')]=function(_0x49a1d3,_0x38d416){var _0xff0afc={},_0x437b9a={},_0xb9d3fd={'count':0x0,'rows':[]};var _0x169194=db[_0x737a('0x25')][_0x737a('0x26')];_0x437b9a['model']=_[_0x737a('0x27')](_0x169194);_0x437b9a[_0x737a('0x28')]=_[_0x737a('0x27')](_0x49a1d3[_0x737a('0x28')]);_0x437b9a[_0x737a('0x29')]=_['intersection'](_0x437b9a[_0x737a('0x2a')],_0x437b9a[_0x737a('0x28')]);_0xff0afc[_0x737a('0x2b')]=_[_0x737a('0x2c')](_0x437b9a['model'],qs[_0x737a('0x2d')](_0x49a1d3[_0x737a('0x28')][_0x737a('0x2d')]));_0xff0afc[_0x737a('0x2b')]=_0xff0afc[_0x737a('0x2b')][_0x737a('0x2e')]?_0xff0afc[_0x737a('0x2b')]:_0x437b9a[_0x737a('0x2a')];if(!_0x49a1d3[_0x737a('0x28')][_0x737a('0x2f')]('nolimit')){_0xff0afc['limit']=qs['limit'](_0x49a1d3[_0x737a('0x28')]['limit']);_0xff0afc['offset']=qs['offset'](_0x49a1d3['query']['offset']);}_0xff0afc[_0x737a('0x30')]=qs['sort'](_0x49a1d3['query'][_0x737a('0x31')]);_0xff0afc[_0x737a('0x32')]=qs[_0x737a('0x29')](_[_0x737a('0x33')](_0x49a1d3[_0x737a('0x28')],_0x437b9a[_0x737a('0x29')]));if(_0x49a1d3[_0x737a('0x28')][_0x737a('0x34')]){_0xff0afc[_0x737a('0x32')]=_[_0x737a('0x35')](_0xff0afc[_0x737a('0x32')],{'$or':_[_0x737a('0x36')](_0x169194,function(_0x513023){if(_0x513023[_0x737a('0x37')][_0x737a('0x38')]!==_0x737a('0x39')){var _0x5efc90={};_0x5efc90[_0x513023[_0x737a('0x3a')]]={'$like':'%'+_0x49a1d3[_0x737a('0x28')][_0x737a('0x34')]+'%'};return _0x5efc90;}})});}_0xff0afc=_[_0x737a('0x35')]({},_0xff0afc,_0x49a1d3[_0x737a('0x3b')]);var _0x498e7a={'where':_0xff0afc[_0x737a('0x32')]};return db[_0x737a('0x25')][_0x737a('0x19')](_0x498e7a)['then'](function(_0x5227e3){_0xb9d3fd[_0x737a('0x19')]=_0x5227e3;if(_0x49a1d3[_0x737a('0x28')]['includeAll']){_0xff0afc[_0x737a('0x3c')]=[{'all':!![]}];}return db[_0x737a('0x25')][_0x737a('0x3d')](_0xff0afc);})[_0x737a('0x1f')](function(_0x3b47db){_0xb9d3fd['rows']=_0x3b47db;return _0xb9d3fd;})[_0x737a('0x1f')](respondWithFilteredResult(_0x38d416,_0xff0afc))[_0x737a('0x3e')](handleError(_0x38d416,null));};exports[_0x737a('0x3f')]=function(_0x3f3f22,_0x47f54b){var _0x3307da={'raw':!![],'where':{'id':_0x3f3f22[_0x737a('0x40')]['id']}},_0x20cea7={};_0x20cea7['model']=_['keys'](db[_0x737a('0x25')][_0x737a('0x26')]);_0x20cea7[_0x737a('0x28')]=_[_0x737a('0x27')](_0x3f3f22['query']);_0x20cea7[_0x737a('0x29')]=_[_0x737a('0x2c')](_0x20cea7[_0x737a('0x2a')],_0x20cea7[_0x737a('0x28')]);_0x3307da[_0x737a('0x2b')]=_[_0x737a('0x2c')](_0x20cea7['model'],qs[_0x737a('0x2d')](_0x3f3f22['query']['fields']));_0x3307da[_0x737a('0x2b')]=_0x3307da[_0x737a('0x2b')][_0x737a('0x2e')]?_0x3307da[_0x737a('0x2b')]:_0x20cea7['model'];if(_0x3f3f22['query'][_0x737a('0x41')]){_0x3307da[_0x737a('0x3c')]=[{'all':!![]}];}_0x3307da=_[_0x737a('0x35')]({},_0x3307da,_0x3f3f22['options']);return db[_0x737a('0x25')][_0x737a('0x42')](_0x3307da)[_0x737a('0x1f')](handleEntityNotFound(_0x47f54b,null))[_0x737a('0x1f')](respondWithResult(_0x47f54b,null))[_0x737a('0x3e')](handleError(_0x47f54b,null));};exports[_0x737a('0x43')]=function(_0x44edf6,_0x4b0509){return db[_0x737a('0x25')][_0x737a('0x43')](_0x44edf6[_0x737a('0x44')],{})[_0x737a('0x1f')](respondWithResult(_0x4b0509,0xc9))[_0x737a('0x3e')](handleError(_0x4b0509,null));};exports[_0x737a('0x45')]=function(_0x29e751,_0x3bed69){if(_0x29e751[_0x737a('0x44')]['id']){delete _0x29e751[_0x737a('0x44')]['id'];}return db['FaxTransferReport'][_0x737a('0x42')]({'where':{'id':_0x29e751[_0x737a('0x40')]['id']}})[_0x737a('0x1f')](handleEntityNotFound(_0x3bed69,null))[_0x737a('0x1f')](saveUpdates(_0x29e751['body'],null))[_0x737a('0x1f')](respondWithResult(_0x3bed69,null))[_0x737a('0x3e')](handleError(_0x3bed69,null));};exports[_0x737a('0x20')]=function(_0xd91856,_0x3f9b66){return db[_0x737a('0x25')][_0x737a('0x42')]({'where':{'id':_0xd91856[_0x737a('0x40')]['id']}})['then'](handleEntityNotFound(_0x3f9b66,null))[_0x737a('0x1f')](removeEntity(_0x3f9b66,null))[_0x737a('0x3e')](handleError(_0x3f9b66,null));};exports[_0x737a('0x46')]=function(_0x32f050,_0x1f06f1){return db['FaxTransferReport'][_0x737a('0x46')]()[_0x737a('0x1f')](respondWithResult(_0x1f06f1,null))[_0x737a('0x3e')](handleError(_0x1f06f1,null));};
\ No newline at end of file
index dfeee84..85a4748 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8391=['request-promise','./faxTransferReport.attributes','define','FaxTransferReport','report_fax_transfer','uniqueid','lodash','util','bluebird'];(function(_0x226011,_0x11250f){var _0x44ab2d=function(_0x32d8aa){while(--_0x32d8aa){_0x226011['push'](_0x226011['shift']());}};_0x44ab2d(++_0x11250f);}(_0x8391,0x1e3));var _0x1839=function(_0x5836d5,_0x3095bb){_0x5836d5=_0x5836d5-0x0;var _0x1c8e89=_0x8391[_0x5836d5];return _0x1c8e89;};'use strict';var _=require(_0x1839('0x0'));var util=require(_0x1839('0x1'));var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0x1839('0x2'));var rp=require(_0x1839('0x3'));var attributes=require(_0x1839('0x4'));module['exports']=function(_0x4490dc,_0x4daec9){return _0x4490dc[_0x1839('0x5')](_0x1839('0x6'),attributes,{'tableName':_0x1839('0x7'),'paranoid':![],'indexes':[{'name':_0x1839('0x8'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0xa31c=['uniqueid','lodash','util','api','moment','bluebird','./faxTransferReport.attributes','exports','FaxTransferReport','report_fax_transfer'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0xa31c,0x119));var _0xca31=function(_0x44511e,_0x2242ba){_0x44511e=_0x44511e-0x0;var _0x243798=_0xa31c[_0x44511e];return _0x243798;};'use strict';var _=require(_0xca31('0x0'));var util=require(_0xca31('0x1'));var logger=require('../../config/logger')(_0xca31('0x2'));var moment=require(_0xca31('0x3'));var BPromise=require(_0xca31('0x4'));var rp=require('request-promise');var attributes=require(_0xca31('0x5'));module[_0xca31('0x6')]=function(_0x38eb76,_0x32467d){return _0x38eb76['define'](_0xca31('0x7'),attributes,{'tableName':_0xca31('0x8'),'paranoid':![],'indexes':[{'name':_0xca31('0x9'),'fields':[_0xca31('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index b72739b..9558c2c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8478=['../../config/environment','http','request','FaxTransferReport,\x20%s,\x20%s','debug','FaxTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x46fbdc,_0x2c043c){var _0x1def42=function(_0x208362){while(--_0x208362){_0x46fbdc['push'](_0x46fbdc['shift']());}};_0x1def42(++_0x2c043c);}(_0x8478,0x16d));var _0x8847=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x8478[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x8847('0x0'));var util=require('util');var moment=require(_0x8847('0x1'));var BPromise=require(_0x8847('0x2'));var rs=require(_0x8847('0x3'));var fs=require('fs');var Redis=require(_0x8847('0x4'));var db=require(_0x8847('0x5'))['db'];var utils=require(_0x8847('0x6'));var logger=require(_0x8847('0x7'))(_0x8847('0x8'));var config=require(_0x8847('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0x8847('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x15d400,_0x46c62a,_0x12ec01){return new BPromise(function(_0x5ea385,_0x34520e){return client[_0x8847('0xb')](_0x15d400,_0x12ec01)['then'](function(_0x48f343){logger['info'](_0x8847('0xc'),_0x46c62a,'request\x20sent');logger[_0x8847('0xd')](_0x8847('0xe'),_0x46c62a,_0x8847('0xf'),JSON[_0x8847('0x10')](_0x48f343));if(_0x48f343[_0x8847('0x11')]){if(_0x48f343[_0x8847('0x11')][_0x8847('0x12')]===0x1f4){logger[_0x8847('0x11')](_0x8847('0xc'),_0x46c62a,_0x48f343['error'][_0x8847('0x13')]);return _0x34520e(_0x48f343[_0x8847('0x11')][_0x8847('0x13')]);}logger[_0x8847('0x11')](_0x8847('0xc'),_0x46c62a,_0x48f343[_0x8847('0x11')][_0x8847('0x13')]);return _0x5ea385(_0x48f343[_0x8847('0x11')][_0x8847('0x13')]);}else{logger['info'](_0x8847('0xc'),_0x46c62a,'request\x20sent');_0x5ea385(_0x48f343[_0x8847('0x14')][_0x8847('0x13')]);}})[_0x8847('0x15')](function(_0x5db600){logger[_0x8847('0x11')](_0x8847('0xc'),_0x46c62a,_0x5db600);_0x34520e(_0x5db600);});});}
\ No newline at end of file
+var _0x029b=['request\x20sent','stringify','error','code','FaxTransferReport,\x20%s,\x20%s','message','result','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info'];(function(_0x19a7b7,_0x312d84){var _0x5ba34e=function(_0x331ceb){while(--_0x331ceb){_0x19a7b7['push'](_0x19a7b7['shift']());}};_0x5ba34e(++_0x312d84);}(_0x029b,0x1d5));var _0xb029=function(_0x18dd3a,_0x4eb4d5){_0x18dd3a=_0x18dd3a-0x0;var _0x4ebd35=_0x029b[_0x18dd3a];return _0x4ebd35;};'use strict';var _=require(_0xb029('0x0'));var util=require(_0xb029('0x1'));var moment=require('moment');var BPromise=require(_0xb029('0x2'));var rs=require(_0xb029('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb029('0x4'))['db'];var utils=require(_0xb029('0x5'));var logger=require('../../config/logger')(_0xb029('0x6'));var config=require(_0xb029('0x7'));var jayson=require(_0xb029('0x8'));var client=jayson[_0xb029('0x9')][_0xb029('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x1099e8,_0x48565d,_0x31ebad){return new BPromise(function(_0x2ec03f,_0x4f2f46){return client[_0xb029('0xb')](_0x1099e8,_0x31ebad)[_0xb029('0xc')](function(_0x555d0f){logger[_0xb029('0xd')]('FaxTransferReport,\x20%s,\x20%s',_0x48565d,'request\x20sent');logger['debug']('FaxTransferReport,\x20%s,\x20%s,\x20%s',_0x48565d,_0xb029('0xe'),JSON[_0xb029('0xf')](_0x555d0f));if(_0x555d0f[_0xb029('0x10')]){if(_0x555d0f['error'][_0xb029('0x11')]===0x1f4){logger[_0xb029('0x10')]('FaxTransferReport,\x20%s,\x20%s',_0x48565d,_0x555d0f['error']['message']);return _0x4f2f46(_0x555d0f[_0xb029('0x10')]['message']);}logger['error'](_0xb029('0x12'),_0x48565d,_0x555d0f['error']['message']);return _0x2ec03f(_0x555d0f['error'][_0xb029('0x13')]);}else{logger[_0xb029('0xd')](_0xb029('0x12'),_0x48565d,_0xb029('0xe'));_0x2ec03f(_0x555d0f[_0xb029('0x14')][_0xb029('0x13')]);}})['catch'](function(_0x113f0f){logger[_0xb029('0x10')]('FaxTransferReport,\x20%s,\x20%s',_0x48565d,_0x113f0f);_0x4f2f46(_0x113f0f);});});}
\ No newline at end of file
index 974e625..b5fc8ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxTransferReport.controller','get','isAuthenticated','describe','/:id','show','post','create','put','update','delete','destroy'];(function(_0x344801,_0x4a0fd4){var _0x161687=function(_0x5b91fc){while(--_0x5b91fc){_0x344801['push'](_0x344801['shift']());}};_0x161687(++_0x4a0fd4);}(_0x34e8,0x12c));var _0x834e=function(_0x4ff00c,_0x3464a5){_0x4ff00c=_0x4ff00c-0x0;var _0x4ee6a5=_0x34e8[_0x4ff00c];return _0x4ee6a5;};'use strict';var multer=require(_0x834e('0x0'));var util=require(_0x834e('0x1'));var path=require(_0x834e('0x2'));var timeout=require(_0x834e('0x3'));var express=require('express');var router=express[_0x834e('0x4')]();var auth=require(_0x834e('0x5'));var interaction=require(_0x834e('0x6'));var config=require(_0x834e('0x7'));var controller=require(_0x834e('0x8'));router[_0x834e('0x9')]('/',auth[_0x834e('0xa')](),controller['index']);router[_0x834e('0x9')]('/describe',auth[_0x834e('0xa')](),controller[_0x834e('0xb')]);router[_0x834e('0x9')](_0x834e('0xc'),auth[_0x834e('0xa')](),controller[_0x834e('0xd')]);router[_0x834e('0xe')]('/',auth[_0x834e('0xa')](),controller[_0x834e('0xf')]);router[_0x834e('0x10')](_0x834e('0xc'),auth[_0x834e('0xa')](),controller[_0x834e('0x11')]);router[_0x834e('0x12')](_0x834e('0xc'),auth[_0x834e('0xa')](),controller[_0x834e('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0xee14=['index','/describe','isAuthenticated','describe','/:id','post','put','update','destroy','exports','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./faxTransferReport.controller','get'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xee14,0x13a));var _0x4ee1=function(_0x576440,_0x4b6be3){_0x576440=_0x576440-0x0;var _0x692134=_0xee14[_0x576440];return _0x692134;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x4ee1('0x0'));var timeout=require(_0x4ee1('0x1'));var express=require(_0x4ee1('0x2'));var router=express[_0x4ee1('0x3')]();var auth=require(_0x4ee1('0x4'));var interaction=require(_0x4ee1('0x5'));var config=require(_0x4ee1('0x6'));var controller=require(_0x4ee1('0x7'));router[_0x4ee1('0x8')]('/',auth['isAuthenticated'](),controller[_0x4ee1('0x9')]);router['get'](_0x4ee1('0xa'),auth[_0x4ee1('0xb')](),controller[_0x4ee1('0xc')]);router[_0x4ee1('0x8')](_0x4ee1('0xd'),auth[_0x4ee1('0xb')](),controller['show']);router[_0x4ee1('0xe')]('/',auth[_0x4ee1('0xb')](),controller['create']);router[_0x4ee1('0xf')](_0x4ee1('0xd'),auth[_0x4ee1('0xb')](),controller[_0x4ee1('0x10')]);router['delete'](_0x4ee1('0xd'),auth[_0x4ee1('0xb')](),controller[_0x4ee1('0x11')]);module[_0x4ee1('0x12')]=router;
\ No newline at end of file
index 838317c..b15665e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4940=['Router','../../components/auth/service','../../config/environment','./intDeskAccount.controller','get','isAuthenticated','getConfigurations','/:id/fields','post','addConfiguration','update','delete','/:id','destroy','multer','util','connect-timeout'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x4940,0x140));var _0x0494=function(_0x465a0c,_0x19d4d5){_0x465a0c=_0x465a0c-0x0;var _0x1e202e=_0x4940[_0x465a0c];return _0x1e202e;};'use strict';var multer=require(_0x0494('0x0'));var util=require(_0x0494('0x1'));var path=require('path');var timeout=require(_0x0494('0x2'));var express=require('express');var router=express[_0x0494('0x3')]();var auth=require(_0x0494('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x0494('0x5'));var controller=require(_0x0494('0x6'));router[_0x0494('0x7')]('/',auth[_0x0494('0x8')](),controller['index']);router[_0x0494('0x7')]('/:id',auth[_0x0494('0x8')](),controller['show']);router['get']('/:id/configurations',auth[_0x0494('0x8')](),controller[_0x0494('0x9')]);router[_0x0494('0x7')](_0x0494('0xa'),auth[_0x0494('0x8')](),controller['getFields']);router['post']('/',auth[_0x0494('0x8')](),controller['create']);router[_0x0494('0xb')]('/:id/configurations',auth[_0x0494('0x8')](),controller[_0x0494('0xc')]);router['put']('/:id',auth[_0x0494('0x8')](),controller[_0x0494('0xd')]);router[_0x0494('0xe')](_0x0494('0xf'),auth[_0x0494('0x8')](),controller[_0x0494('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0x2ea4=['put','delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','./intDeskAccount.controller','get','index','/:id','isAuthenticated','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','addConfiguration'];(function(_0x13b02f,_0x462a53){var _0x12e9a6=function(_0x187d57){while(--_0x187d57){_0x13b02f['push'](_0x13b02f['shift']());}};_0x12e9a6(++_0x462a53);}(_0x2ea4,0xd3));var _0x42ea=function(_0x409ca5,_0xdbafd0){_0x409ca5=_0x409ca5-0x0;var _0x3446e1=_0x2ea4[_0x409ca5];return _0x3446e1;};'use strict';var multer=require(_0x42ea('0x0'));var util=require(_0x42ea('0x1'));var path=require(_0x42ea('0x2'));var timeout=require(_0x42ea('0x3'));var express=require('express');var router=express[_0x42ea('0x4')]();var auth=require(_0x42ea('0x5'));var interaction=require(_0x42ea('0x6'));var config=require('../../config/environment');var controller=require(_0x42ea('0x7'));router[_0x42ea('0x8')]('/',auth['isAuthenticated'](),controller[_0x42ea('0x9')]);router[_0x42ea('0x8')](_0x42ea('0xa'),auth[_0x42ea('0xb')](),controller[_0x42ea('0xc')]);router[_0x42ea('0x8')](_0x42ea('0xd'),auth[_0x42ea('0xb')](),controller[_0x42ea('0xe')]);router[_0x42ea('0x8')](_0x42ea('0xf'),auth['isAuthenticated'](),controller[_0x42ea('0x10')]);router[_0x42ea('0x11')]('/',auth[_0x42ea('0xb')](),controller['create']);router['post'](_0x42ea('0xd'),auth[_0x42ea('0xb')](),controller[_0x42ea('0x12')]);router[_0x42ea('0x13')](_0x42ea('0xa'),auth[_0x42ea('0xb')](),controller['update']);router[_0x42ea('0x14')](_0x42ea('0xa'),auth[_0x42ea('0xb')](),controller[_0x42ea('0x15')]);module[_0x42ea('0x16')]=router;
\ No newline at end of file
index 4c950c2..c1f8b07 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x806c=['basic','newTab','integrationTab','sequelize','STRING'];(function(_0xae628a,_0x1b0b4b){var _0x1f324f=function(_0x296e28){while(--_0x296e28){_0xae628a['push'](_0xae628a['shift']());}};_0x1f324f(++_0x1b0b4b);}(_0x806c,0x13e));var _0xc806=function(_0x404cde,_0x27b51c){_0x404cde=_0x404cde-0x0;var _0x139882=_0x806c[_0x404cde];return _0x139882;};'use strict';var Sequelize=require(_0xc806('0x0'));module['exports']={'name':{'type':Sequelize[_0xc806('0x1')]},'description':{'type':Sequelize[_0xc806('0x1')]},'username':{'type':Sequelize[_0xc806('0x1')]},'remoteUri':{'type':Sequelize[_0xc806('0x1')]},'authType':{'type':Sequelize['ENUM'](_0xc806('0x2')),'defaultValue':_0xc806('0x2')},'password':{'type':Sequelize[_0xc806('0x1')]},'consumerKey':{'type':Sequelize[_0xc806('0x1')]},'consumerSecret':{'type':Sequelize[_0xc806('0x1')]},'token':{'type':Sequelize[_0xc806('0x1')]},'tokenSecret':{'type':Sequelize['STRING']},'serverUrl':{'type':Sequelize[_0xc806('0x1')]},'type':{'type':Sequelize['ENUM']('integrationTab',_0xc806('0x3')),'defaultValue':_0xc806('0x4')}};
\ No newline at end of file
+var _0x3613=['sequelize','exports','STRING','basic','ENUM'];(function(_0x28beaf,_0x122959){var _0x2df201=function(_0x583fd1){while(--_0x583fd1){_0x28beaf['push'](_0x28beaf['shift']());}};_0x2df201(++_0x122959);}(_0x3613,0x145));var _0x3361=function(_0x10adf8,_0x42a49f){_0x10adf8=_0x10adf8-0x0;var _0x1b7379=_0x3613[_0x10adf8];return _0x1b7379;};'use strict';var Sequelize=require(_0x3361('0x0'));module[_0x3361('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0x3361('0x2')]},'remoteUri':{'type':Sequelize[_0x3361('0x2')]},'authType':{'type':Sequelize['ENUM'](_0x3361('0x3')),'defaultValue':_0x3361('0x3')},'password':{'type':Sequelize['STRING']},'consumerKey':{'type':Sequelize[_0x3361('0x2')]},'consumerSecret':{'type':Sequelize[_0x3361('0x2')]},'token':{'type':Sequelize[_0x3361('0x2')]},'tokenSecret':{'type':Sequelize[_0x3361('0x2')]},'serverUrl':{'type':Sequelize[_0x3361('0x2')]},'type':{'type':Sequelize[_0x3361('0x4')]('integrationTab','newTab'),'defaultValue':'integrationTab'}};
\ No newline at end of file
index 8c49972..a7d3d67 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f3e=['count','offset','set','apply','reject','save','destroy','stack','DeskAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','pick','merge','map','key','VIRTUAL','field','filter','options','includeAll','findAll','rows','show','length','include','find','create','update','body','params','getConfigurations','findOne','DeskConfiguration','addConfiguration','Subjects','getSubjects','type','getDescriptions','channel','DeskField','Descriptions','getFields','priority','remoteUri','authType','username','password','consumerKey','consumerSecret','token','tokenSecret','slice','substring','lastIndexOf','GET','%s/custom_fields','application/json','basic','Authorization','format','Basic\x20%s','%s:%s','toString','base64','concat','_embedded','name','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','../../components/integrations/configuration','client','then','info','DeskAccount,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','sendStatus','end','status','json'];(function(_0x3dee1b,_0x58e8bd){var _0xda3d1c=function(_0x26fd88){while(--_0x26fd88){_0x3dee1b['push'](_0x3dee1b['shift']());}};_0xda3d1c(++_0x58e8bd);}(_0x9f3e,0x1c4));var _0xe9f3=function(_0x24e2ab,_0x55c2fb){_0x24e2ab=_0x24e2ab-0x0;var _0x5559a0=_0x9f3e[_0x24e2ab];return _0x5559a0;};'use strict';var pdf=require(_0xe9f3('0x0'));var emlformat=require(_0xe9f3('0x1'));var rimraf=require(_0xe9f3('0x2'));var zipdir=require(_0xe9f3('0x3'));var jsonpatch=require(_0xe9f3('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xe9f3('0x5'));var util=require('util');var path=require(_0xe9f3('0x6'));var sox=require(_0xe9f3('0x7'));var csv=require(_0xe9f3('0x8'));var ejs=require(_0xe9f3('0x9'));var fs=require('fs');var _=require(_0xe9f3('0xa'));var squel=require(_0xe9f3('0xb'));var crypto=require(_0xe9f3('0xc'));var jsforce=require(_0xe9f3('0xd'));var deskjs=require(_0xe9f3('0xe'));var toCsv=require(_0xe9f3('0x8'));var querystring=require(_0xe9f3('0xf'));var Papa=require(_0xe9f3('0x10'));var authService=require(_0xe9f3('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xe9f3('0x12'));var qs=require(_0xe9f3('0x13'));var logger=require(_0xe9f3('0x14'))(_0xe9f3('0x15'));var utils=require(_0xe9f3('0x16'));var config=require('../../config/environment');var db=require(_0xe9f3('0x17'))['db'];var integrations=require(_0xe9f3('0x18'));var jayson=require('jayson/promise');var client=jayson[_0xe9f3('0x19')]['http']({'port':0x232a});function respondWithRpcPromise(_0x14af9f,_0x421058,_0x37f1b3,_0x596467){return new BPromise(function(_0x5501fe,_0x143a34){var _0x158f4c=_0x596467||client;return _0x158f4c['request'](_0x14af9f,_0x37f1b3)[_0xe9f3('0x1a')](function(_0x1f0dd9){logger[_0xe9f3('0x1b')](_0xe9f3('0x1c'),_0x421058,_0xe9f3('0x1d'));logger['debug']('DeskAccount,\x20%s,\x20%s,\x20%s',_0x421058,_0xe9f3('0x1d'),JSON[_0xe9f3('0x1e')](_0x1f0dd9));if(_0x1f0dd9[_0xe9f3('0x1f')]){if(_0x1f0dd9[_0xe9f3('0x1f')][_0xe9f3('0x20')]===0x1f4){logger['error'](_0xe9f3('0x1c'),_0x421058,_0x1f0dd9[_0xe9f3('0x1f')]['message']);return _0x143a34(_0x1f0dd9[_0xe9f3('0x1f')][_0xe9f3('0x21')]);}logger[_0xe9f3('0x1f')](_0xe9f3('0x1c'),_0x421058,_0x1f0dd9[_0xe9f3('0x1f')][_0xe9f3('0x21')]);return _0x5501fe(_0x1f0dd9[_0xe9f3('0x1f')][_0xe9f3('0x21')]);}else{logger['info'](_0xe9f3('0x1c'),_0x421058,_0xe9f3('0x1d'));_0x5501fe(_0x1f0dd9[_0xe9f3('0x22')]['message']);}})[_0xe9f3('0x23')](function(_0x17f97e){logger[_0xe9f3('0x1f')]('DeskAccount,\x20%s,\x20%s',_0x421058,_0x17f97e);_0x143a34(_0x17f97e);});});}function respondWithStatusCode(_0x4f9cdd,_0x1649fa){_0x1649fa=_0x1649fa||0xcc;return function(_0x526d6b){if(_0x526d6b){return _0x4f9cdd[_0xe9f3('0x24')](_0x1649fa);}return _0x4f9cdd['status'](_0x1649fa)[_0xe9f3('0x25')]();};}function respondWithResult(_0x5c7d8f,_0x43bbab){_0x43bbab=_0x43bbab||0xc8;return function(_0x2e959a){if(_0x2e959a){return _0x5c7d8f[_0xe9f3('0x26')](_0x43bbab)[_0xe9f3('0x27')](_0x2e959a);}};}function respondWithFilteredResult(_0x276533,_0x5e518a){return function(_0x3de723){if(_0x3de723){var _0x144af0=_0x3de723[_0xe9f3('0x28')],_0x4f56de=_0x5e518a[_0xe9f3('0x29')],_0x1c13a6=_0x5e518a[_0xe9f3('0x29')]+_0x5e518a['limit'],_0x359b56;if(_0x1c13a6>=_0x144af0){_0x1c13a6=_0x144af0;_0x359b56=0xc8;}else{_0x359b56=0xce;}_0x276533['status'](_0x359b56);return _0x276533[_0xe9f3('0x2a')]('Content-Range',_0x4f56de+'-'+_0x1c13a6+'/'+_0x144af0)[_0xe9f3('0x27')](_0x3de723);}return null;};}function patchUpdates(_0x421b9f){return function(_0x2b33de){try{jsonpatch[_0xe9f3('0x2b')](_0x2b33de,_0x421b9f,!![]);}catch(_0x965f6b){return BPromise[_0xe9f3('0x2c')](_0x965f6b);}return _0x2b33de[_0xe9f3('0x2d')]();};}function saveUpdates(_0x2c1ef4,_0x18dad3){return function(_0x303f46){if(_0x303f46){return _0x303f46['update'](_0x2c1ef4)[_0xe9f3('0x1a')](function(_0x18bea3){return _0x18bea3;});}return null;};}function removeEntity(_0x23a0ac,_0x1367f4){return function(_0x4eb6a2){if(_0x4eb6a2){return _0x4eb6a2[_0xe9f3('0x2e')]()[_0xe9f3('0x1a')](function(){_0x23a0ac[_0xe9f3('0x26')](0xcc)[_0xe9f3('0x25')]();});}};}function handleEntityNotFound(_0x5c4c4b,_0x55e6ef){return function(_0x125b58){if(!_0x125b58){_0x5c4c4b[_0xe9f3('0x24')](0x194);}return _0x125b58;};}function handleError(_0x52db72,_0x23c71f){_0x23c71f=_0x23c71f||0x1f4;return function(_0x2d9595){logger['error'](_0x2d9595[_0xe9f3('0x2f')]);if(_0x2d9595['name']){delete _0x2d9595['name'];}_0x52db72[_0xe9f3('0x26')](_0x23c71f)['send'](_0x2d9595);};}exports['index']=function(_0x4c96a2,_0xf0d976){var _0x3b69c8={},_0x47bd52={},_0x318d1f={'count':0x0,'rows':[]};var _0x591445=db[_0xe9f3('0x30')][_0xe9f3('0x31')];_0x47bd52[_0xe9f3('0x32')]=_[_0xe9f3('0x33')](_0x591445);_0x47bd52['query']=_[_0xe9f3('0x33')](_0x4c96a2[_0xe9f3('0x34')]);_0x47bd52[_0xe9f3('0x35')]=_[_0xe9f3('0x36')](_0x47bd52['model'],_0x47bd52['query']);_0x3b69c8[_0xe9f3('0x37')]=_[_0xe9f3('0x36')](_0x47bd52[_0xe9f3('0x32')],qs[_0xe9f3('0x38')](_0x4c96a2[_0xe9f3('0x34')][_0xe9f3('0x38')]));_0x3b69c8[_0xe9f3('0x37')]=_0x3b69c8[_0xe9f3('0x37')]['length']?_0x3b69c8[_0xe9f3('0x37')]:_0x47bd52[_0xe9f3('0x32')];if(!_0x4c96a2[_0xe9f3('0x34')][_0xe9f3('0x39')](_0xe9f3('0x3a'))){_0x3b69c8[_0xe9f3('0x3b')]=qs[_0xe9f3('0x3b')](_0x4c96a2[_0xe9f3('0x34')][_0xe9f3('0x3b')]);_0x3b69c8['offset']=qs[_0xe9f3('0x29')](_0x4c96a2[_0xe9f3('0x34')][_0xe9f3('0x29')]);}_0x3b69c8[_0xe9f3('0x3c')]=qs[_0xe9f3('0x3d')](_0x4c96a2[_0xe9f3('0x34')][_0xe9f3('0x3d')]);_0x3b69c8[_0xe9f3('0x3e')]=qs[_0xe9f3('0x35')](_[_0xe9f3('0x3f')](_0x4c96a2['query'],_0x47bd52[_0xe9f3('0x35')]));if(_0x4c96a2[_0xe9f3('0x34')]['filter']){_0x3b69c8[_0xe9f3('0x3e')]=_[_0xe9f3('0x40')](_0x3b69c8['where'],{'$or':_[_0xe9f3('0x41')](_0x591445,function(_0x2a8543){if(_0x2a8543['type'][_0xe9f3('0x42')]!==_0xe9f3('0x43')){var _0x47fe65={};_0x47fe65[_0x2a8543[_0xe9f3('0x44')]]={'$like':'%'+_0x4c96a2[_0xe9f3('0x34')][_0xe9f3('0x45')]+'%'};return _0x47fe65;}})});}_0x3b69c8=_[_0xe9f3('0x40')]({},_0x3b69c8,_0x4c96a2[_0xe9f3('0x46')]);var _0x4180e9={'where':_0x3b69c8[_0xe9f3('0x3e')]};return db[_0xe9f3('0x30')]['count'](_0x4180e9)['then'](function(_0x5868ea){_0x318d1f[_0xe9f3('0x28')]=_0x5868ea;if(_0x4c96a2[_0xe9f3('0x34')][_0xe9f3('0x47')]){_0x3b69c8['include']=[{'all':!![]}];}return db[_0xe9f3('0x30')][_0xe9f3('0x48')](_0x3b69c8);})[_0xe9f3('0x1a')](function(_0x371d9e){_0x318d1f[_0xe9f3('0x49')]=_0x371d9e;return _0x318d1f;})[_0xe9f3('0x1a')](respondWithFilteredResult(_0xf0d976,_0x3b69c8))[_0xe9f3('0x23')](handleError(_0xf0d976,null));};exports[_0xe9f3('0x4a')]=function(_0x5e6514,_0x37973b){var _0x940db8={'raw':![],'where':{'id':_0x5e6514['params']['id']}},_0x494950={};_0x494950[_0xe9f3('0x32')]=_['keys'](db[_0xe9f3('0x30')][_0xe9f3('0x31')]);_0x494950['query']=_['keys'](_0x5e6514['query']);_0x494950['filters']=_[_0xe9f3('0x36')](_0x494950[_0xe9f3('0x32')],_0x494950[_0xe9f3('0x34')]);_0x940db8[_0xe9f3('0x37')]=_['intersection'](_0x494950[_0xe9f3('0x32')],qs[_0xe9f3('0x38')](_0x5e6514['query']['fields']));_0x940db8[_0xe9f3('0x37')]=_0x940db8[_0xe9f3('0x37')][_0xe9f3('0x4b')]?_0x940db8[_0xe9f3('0x37')]:_0x494950[_0xe9f3('0x32')];if(_0x5e6514[_0xe9f3('0x34')]['includeAll']){_0x940db8[_0xe9f3('0x4c')]=[{'all':!![]}];}_0x940db8=_[_0xe9f3('0x40')]({},_0x940db8,_0x5e6514['options']);return db[_0xe9f3('0x30')][_0xe9f3('0x4d')](_0x940db8)[_0xe9f3('0x1a')](handleEntityNotFound(_0x37973b,null))[_0xe9f3('0x1a')](respondWithResult(_0x37973b,null))[_0xe9f3('0x23')](handleError(_0x37973b,null));};exports[_0xe9f3('0x4e')]=function(_0x1c376f,_0x1a3365){return db[_0xe9f3('0x30')][_0xe9f3('0x4e')](_0x1c376f['body'],{})[_0xe9f3('0x1a')](respondWithResult(_0x1a3365,0xc9))[_0xe9f3('0x23')](handleError(_0x1a3365,null));};exports[_0xe9f3('0x4f')]=function(_0x51e912,_0x36bcc2){if(_0x51e912[_0xe9f3('0x50')]['id']){delete _0x51e912[_0xe9f3('0x50')]['id'];}return db['DeskAccount'][_0xe9f3('0x4d')]({'where':{'id':_0x51e912[_0xe9f3('0x51')]['id']}})[_0xe9f3('0x1a')](handleEntityNotFound(_0x36bcc2,null))[_0xe9f3('0x1a')](saveUpdates(_0x51e912[_0xe9f3('0x50')],null))[_0xe9f3('0x1a')](respondWithResult(_0x36bcc2,null))[_0xe9f3('0x23')](handleError(_0x36bcc2,null));};exports[_0xe9f3('0x2e')]=function(_0x12865d,_0xa875c3){return db[_0xe9f3('0x30')]['find']({'where':{'id':_0x12865d[_0xe9f3('0x51')]['id']}})[_0xe9f3('0x1a')](handleEntityNotFound(_0xa875c3,null))[_0xe9f3('0x1a')](removeEntity(_0xa875c3,null))[_0xe9f3('0x23')](handleError(_0xa875c3,null));};exports[_0xe9f3('0x52')]=function(_0x475da5,_0x1058fa,_0x48574d){var _0x3eaafa={};var _0x24274d={};var _0x3bf446;var _0x4b6562;return db[_0xe9f3('0x30')][_0xe9f3('0x53')]({'where':{'id':_0x475da5['params']['id']}})['then'](handleEntityNotFound(_0x1058fa,null))['then'](function(_0x239326){if(_0x239326){_0x3bf446=_0x239326;_0x24274d[_0xe9f3('0x32')]=_[_0xe9f3('0x33')](db[_0xe9f3('0x54')][_0xe9f3('0x31')]);_0x24274d[_0xe9f3('0x34')]=_[_0xe9f3('0x33')](_0x475da5['query']);_0x24274d[_0xe9f3('0x35')]=_[_0xe9f3('0x36')](_0x24274d[_0xe9f3('0x32')],_0x24274d[_0xe9f3('0x34')]);_0x3eaafa[_0xe9f3('0x37')]=_[_0xe9f3('0x36')](_0x24274d[_0xe9f3('0x32')],qs['fields'](_0x475da5[_0xe9f3('0x34')]['fields']));_0x3eaafa['attributes']=_0x3eaafa[_0xe9f3('0x37')][_0xe9f3('0x4b')]?_0x3eaafa['attributes']:_0x24274d[_0xe9f3('0x32')];_0x3eaafa['order']=qs[_0xe9f3('0x3d')](_0x475da5['query'][_0xe9f3('0x3d')]);_0x3eaafa['where']=qs[_0xe9f3('0x35')](_[_0xe9f3('0x3f')](_0x475da5[_0xe9f3('0x34')],_0x24274d[_0xe9f3('0x35')]));if(_0x475da5[_0xe9f3('0x34')][_0xe9f3('0x45')]){_0x3eaafa[_0xe9f3('0x3e')]=_[_0xe9f3('0x40')](_0x3eaafa[_0xe9f3('0x3e')],{'$or':_[_0xe9f3('0x41')](_0x3eaafa['attributes'],function(_0xe9007b){var _0x57e2fc={};_0x57e2fc[_0xe9007b]={'$like':'%'+_0x475da5[_0xe9f3('0x34')][_0xe9f3('0x45')]+'%'};return _0x57e2fc;})});}_0x3eaafa=_[_0xe9f3('0x40')]({},_0x3eaafa,_0x475da5[_0xe9f3('0x46')]);return _0x3bf446[_0xe9f3('0x52')](_0x3eaafa);}})[_0xe9f3('0x1a')](function(_0x51469d){if(_0x51469d){_0x4b6562=_0x51469d[_0xe9f3('0x4b')];if(!_0x475da5[_0xe9f3('0x34')]['hasOwnProperty']('nolimit')){_0x3eaafa[_0xe9f3('0x3b')]=qs[_0xe9f3('0x3b')](_0x475da5[_0xe9f3('0x34')][_0xe9f3('0x3b')]);_0x3eaafa[_0xe9f3('0x29')]=qs[_0xe9f3('0x29')](_0x475da5[_0xe9f3('0x34')][_0xe9f3('0x29')]);}return _0x3bf446[_0xe9f3('0x52')](_0x3eaafa);}})[_0xe9f3('0x1a')](function(_0x18df5d){if(_0x18df5d){return _0x18df5d?{'count':_0x4b6562,'rows':_0x18df5d}:null;}})[_0xe9f3('0x1a')](respondWithResult(_0x1058fa,null))['catch'](handleError(_0x1058fa,null));};exports[_0xe9f3('0x55')]=function(_0xff42d,_0x27b56e,_0x20cf5){if(_0xff42d[_0xe9f3('0x50')]['id']){delete _0xff42d[_0xe9f3('0x50')]['id'];}return db[_0xe9f3('0x30')]['findOne']({'where':{'id':_0xff42d[_0xe9f3('0x51')]['id']}})[_0xe9f3('0x1a')](handleEntityNotFound(_0x27b56e,null))['then'](function(_0x1d4d2e){if(_0x1d4d2e){_0xff42d[_0xe9f3('0x50')]['AccountId']=_0x1d4d2e['id'];_0xff42d[_0xe9f3('0x50')][_0xe9f3('0x56')]=integrations[_0xe9f3('0x57')](_0xff42d[_0xe9f3('0x50')]['channel'],_0xff42d[_0xe9f3('0x50')][_0xe9f3('0x58')]);_0xff42d[_0xe9f3('0x50')]['Descriptions']=integrations[_0xe9f3('0x59')](_0xff42d[_0xe9f3('0x50')][_0xe9f3('0x5a')],_0xff42d[_0xe9f3('0x50')][_0xe9f3('0x58')]);return db[_0xe9f3('0x54')][_0xe9f3('0x4e')](_0xff42d[_0xe9f3('0x50')],{'include':[{'model':db[_0xe9f3('0x5b')],'as':'Subjects'},{'model':db[_0xe9f3('0x5b')],'as':_0xe9f3('0x5c')}]});}return null;})[_0xe9f3('0x1a')](respondWithResult(_0x27b56e,null))['catch'](handleError(_0x27b56e,null));};exports[_0xe9f3('0x5d')]=function(_0x16146d,_0x71e604,_0x49c5c6){var _0x361ab0=[{'name':_0xe9f3('0x5e'),'label':_0xe9f3('0x5e'),'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 _0x24218f='';return db[_0xe9f3('0x30')][_0xe9f3('0x53')]({'where':{'id':_0x16146d[_0xe9f3('0x51')]['id']},'attributes':['id',_0xe9f3('0x5f'),_0xe9f3('0x60'),_0xe9f3('0x61'),_0xe9f3('0x62'),_0xe9f3('0x63'),_0xe9f3('0x64'),_0xe9f3('0x65'),_0xe9f3('0x66')]})[_0xe9f3('0x1a')](handleEntityNotFound(_0x71e604,null))[_0xe9f3('0x1a')](function(_0x1fea70){if(_0x1fea70){_0x24218f=_0x1fea70['remoteUri'];var _0x375bb1=_0x24218f[_0xe9f3('0x67')](-0x1);if(_0x375bb1==='/'){_0x24218f=_0x24218f[_0xe9f3('0x68')](0x0,_0x24218f[_0xe9f3('0x69')](_0x375bb1));}var _0x39b34c={'method':_0xe9f3('0x6a'),'uri':util['format'](_0xe9f3('0x6b'),_0x24218f),'headers':{'Content-Type':_0xe9f3('0x6c'),'Accept':_0xe9f3('0x6c')},'json':!![]};if(_0x1fea70[_0xe9f3('0x60')]===_0xe9f3('0x6d')){_0x39b34c['headers'][_0xe9f3('0x6e')]=util[_0xe9f3('0x6f')](_0xe9f3('0x70'),new Buffer(util[_0xe9f3('0x6f')](_0xe9f3('0x71'),_0x1fea70[_0xe9f3('0x61')],_0x1fea70[_0xe9f3('0x62')]))[_0xe9f3('0x72')](_0xe9f3('0x73')));}return rp(_0x39b34c)[_0xe9f3('0x1a')](function(_0x41e488){return _0x361ab0[_0xe9f3('0x74')](_[_0xe9f3('0x41')](_0x41e488[_0xe9f3('0x75')]['entries'],function(_0x34ccb5){return{'id':_0x34ccb5[_0xe9f3('0x76')],'name':_0x34ccb5[_0xe9f3('0x76')],'type':_0x34ccb5[_0xe9f3('0x58')],'active':_0x34ccb5['active'],'label':_0x34ccb5['label'],'custom':!![]};}));});}})['then'](function(_0x30fdbf){return{'count':_0x30fdbf[_0xe9f3('0x4b')],'rows':_0x30fdbf};})['then'](respondWithResult(_0x71e604,null))['catch'](function(_0x371c06){var _0x3527ff=_0x16146d['query'][_0xe9f3('0x77')]?0x1f4:_0x371c06[_0xe9f3('0x78')]||0x1f4;logger['error'](_0xe9f3('0x79'),_0xe9f3('0x5d'),_0x3527ff,JSON[_0xe9f3('0x1e')](_0x371c06));delete _0x371c06[_0xe9f3('0x76')];if(_0x3527ff===0x191){_0x3527ff=0x190;}_0x71e604[_0xe9f3('0x26')](_0x3527ff)['send'](_0x16146d[_0xe9f3('0x34')]['test']?{'message':_0xe9f3('0x7a'),'statusCode':_0x371c06['statusCode']}:_0x371c06);});};
\ No newline at end of file
+var _0xb7e7=['find','create','body','findOne','map','getConfigurations','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','DeskConfiguration','DeskField','priority','username','password','consumerKey','token','tokenSecret','remoteUri','slice','lastIndexOf','GET','format','application/json','basic','headers','Authorization','%s:%s','toString','base64','concat','_embedded','entries','label','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','rimraf','fast-json-patch','moment','mustache','util','path','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','request','then','info','debug','DeskAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','DeskAccount,\x20%s,\x20%s','message','result','catch','end','count','status','set','json','apply','save','update','destroy','sendStatus','stack','name','send','index','DeskAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','offset','order','sort','where','pick','type','VIRTUAL','field','filter','merge','include','findAll','rows','show','params','includeAll','options'];(function(_0x12d744,_0x3c6bff){var _0x91c8a9=function(_0x2c902b){while(--_0x2c902b){_0x12d744['push'](_0x12d744['shift']());}};_0x91c8a9(++_0x3c6bff);}(_0xb7e7,0x121));var _0x7b7e=function(_0x1b7368,_0x3286ed){_0x1b7368=_0x1b7368-0x0;var _0x25d54c=_0xb7e7[_0x1b7368];return _0x25d54c;};'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 authService=require(_0x7b7e('0xf'));var hardwareService=require(_0x7b7e('0x10'));var Redis=require('ioredis');var qs=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'];var integrations=require(_0x7b7e('0x17'));var jayson=require(_0x7b7e('0x18'));var client=jayson[_0x7b7e('0x19')]['http']({'port':0x232a});function respondWithRpcPromise(_0x267446,_0x430eab,_0x50d7d2,_0x422d3a){return new BPromise(function(_0x5976ac,_0x4c6011){var _0x2889ed=_0x422d3a||client;return _0x2889ed[_0x7b7e('0x1a')](_0x267446,_0x50d7d2)[_0x7b7e('0x1b')](function(_0x457ec5){logger[_0x7b7e('0x1c')]('DeskAccount,\x20%s,\x20%s',_0x430eab,'request\x20sent');logger[_0x7b7e('0x1d')](_0x7b7e('0x1e'),_0x430eab,_0x7b7e('0x1f'),JSON[_0x7b7e('0x20')](_0x457ec5));if(_0x457ec5[_0x7b7e('0x21')]){if(_0x457ec5[_0x7b7e('0x21')][_0x7b7e('0x22')]===0x1f4){logger[_0x7b7e('0x21')](_0x7b7e('0x23'),_0x430eab,_0x457ec5[_0x7b7e('0x21')][_0x7b7e('0x24')]);return _0x4c6011(_0x457ec5[_0x7b7e('0x21')][_0x7b7e('0x24')]);}logger[_0x7b7e('0x21')](_0x7b7e('0x23'),_0x430eab,_0x457ec5[_0x7b7e('0x21')][_0x7b7e('0x24')]);return _0x5976ac(_0x457ec5['error'][_0x7b7e('0x24')]);}else{logger[_0x7b7e('0x1c')](_0x7b7e('0x23'),_0x430eab,'request\x20sent');_0x5976ac(_0x457ec5[_0x7b7e('0x25')][_0x7b7e('0x24')]);}})[_0x7b7e('0x26')](function(_0x200156){logger[_0x7b7e('0x21')](_0x7b7e('0x23'),_0x430eab,_0x200156);_0x4c6011(_0x200156);});});}function respondWithStatusCode(_0x28bf43,_0x10a66a){_0x10a66a=_0x10a66a||0xcc;return function(_0x53bbb3){if(_0x53bbb3){return _0x28bf43['sendStatus'](_0x10a66a);}return _0x28bf43['status'](_0x10a66a)[_0x7b7e('0x27')]();};}function respondWithResult(_0x22598e,_0x23bfa3){_0x23bfa3=_0x23bfa3||0xc8;return function(_0x483c6f){if(_0x483c6f){return _0x22598e['status'](_0x23bfa3)['json'](_0x483c6f);}};}function respondWithFilteredResult(_0x182245,_0x3c8192){return function(_0x16a3c7){if(_0x16a3c7){var _0x7aa71=_0x16a3c7[_0x7b7e('0x28')],_0x3ceaf5=_0x3c8192['offset'],_0x48fad1=_0x3c8192['offset']+_0x3c8192['limit'],_0x6a1e71;if(_0x48fad1>=_0x7aa71){_0x48fad1=_0x7aa71;_0x6a1e71=0xc8;}else{_0x6a1e71=0xce;}_0x182245[_0x7b7e('0x29')](_0x6a1e71);return _0x182245[_0x7b7e('0x2a')]('Content-Range',_0x3ceaf5+'-'+_0x48fad1+'/'+_0x7aa71)[_0x7b7e('0x2b')](_0x16a3c7);}return null;};}function patchUpdates(_0x51d4b5){return function(_0x1b4341){try{jsonpatch[_0x7b7e('0x2c')](_0x1b4341,_0x51d4b5,!![]);}catch(_0x27b525){return BPromise['reject'](_0x27b525);}return _0x1b4341[_0x7b7e('0x2d')]();};}function saveUpdates(_0xe31336,_0x35602a){return function(_0x326dd2){if(_0x326dd2){return _0x326dd2[_0x7b7e('0x2e')](_0xe31336)['then'](function(_0x41af57){return _0x41af57;});}return null;};}function removeEntity(_0x51c010,_0x23a453){return function(_0x1c7de4){if(_0x1c7de4){return _0x1c7de4[_0x7b7e('0x2f')]()[_0x7b7e('0x1b')](function(){_0x51c010[_0x7b7e('0x29')](0xcc)[_0x7b7e('0x27')]();});}};}function handleEntityNotFound(_0x29cb58,_0x4bfe7f){return function(_0x5227a7){if(!_0x5227a7){_0x29cb58[_0x7b7e('0x30')](0x194);}return _0x5227a7;};}function handleError(_0x162b84,_0x5f25fe){_0x5f25fe=_0x5f25fe||0x1f4;return function(_0x3a3bc7){logger[_0x7b7e('0x21')](_0x3a3bc7[_0x7b7e('0x31')]);if(_0x3a3bc7['name']){delete _0x3a3bc7[_0x7b7e('0x32')];}_0x162b84[_0x7b7e('0x29')](_0x5f25fe)[_0x7b7e('0x33')](_0x3a3bc7);};}exports[_0x7b7e('0x34')]=function(_0x31043a,_0x2b09b8){var _0x3e8cf4={},_0x202f04={},_0x44497c={'count':0x0,'rows':[]};var _0x39b3bb=db[_0x7b7e('0x35')][_0x7b7e('0x36')];_0x202f04[_0x7b7e('0x37')]=_[_0x7b7e('0x38')](_0x39b3bb);_0x202f04[_0x7b7e('0x39')]=_[_0x7b7e('0x38')](_0x31043a['query']);_0x202f04[_0x7b7e('0x3a')]=_[_0x7b7e('0x3b')](_0x202f04[_0x7b7e('0x37')],_0x202f04[_0x7b7e('0x39')]);_0x3e8cf4[_0x7b7e('0x3c')]=_[_0x7b7e('0x3b')](_0x202f04[_0x7b7e('0x37')],qs[_0x7b7e('0x3d')](_0x31043a[_0x7b7e('0x39')][_0x7b7e('0x3d')]));_0x3e8cf4['attributes']=_0x3e8cf4[_0x7b7e('0x3c')][_0x7b7e('0x3e')]?_0x3e8cf4[_0x7b7e('0x3c')]:_0x202f04[_0x7b7e('0x37')];if(!_0x31043a['query'][_0x7b7e('0x3f')](_0x7b7e('0x40'))){_0x3e8cf4[_0x7b7e('0x41')]=qs['limit'](_0x31043a['query'][_0x7b7e('0x41')]);_0x3e8cf4['offset']=qs[_0x7b7e('0x42')](_0x31043a[_0x7b7e('0x39')]['offset']);}_0x3e8cf4[_0x7b7e('0x43')]=qs[_0x7b7e('0x44')](_0x31043a[_0x7b7e('0x39')][_0x7b7e('0x44')]);_0x3e8cf4[_0x7b7e('0x45')]=qs[_0x7b7e('0x3a')](_[_0x7b7e('0x46')](_0x31043a[_0x7b7e('0x39')],_0x202f04[_0x7b7e('0x3a')]));if(_0x31043a['query']['filter']){_0x3e8cf4[_0x7b7e('0x45')]=_['merge'](_0x3e8cf4[_0x7b7e('0x45')],{'$or':_['map'](_0x39b3bb,function(_0x48dd74){if(_0x48dd74[_0x7b7e('0x47')]['key']!==_0x7b7e('0x48')){var _0x52051c={};_0x52051c[_0x48dd74[_0x7b7e('0x49')]]={'$like':'%'+_0x31043a[_0x7b7e('0x39')][_0x7b7e('0x4a')]+'%'};return _0x52051c;}})});}_0x3e8cf4=_[_0x7b7e('0x4b')]({},_0x3e8cf4,_0x31043a['options']);var _0x1e4505={'where':_0x3e8cf4[_0x7b7e('0x45')]};return db[_0x7b7e('0x35')][_0x7b7e('0x28')](_0x1e4505)[_0x7b7e('0x1b')](function(_0xccdfc7){_0x44497c['count']=_0xccdfc7;if(_0x31043a['query']['includeAll']){_0x3e8cf4[_0x7b7e('0x4c')]=[{'all':!![]}];}return db[_0x7b7e('0x35')][_0x7b7e('0x4d')](_0x3e8cf4);})[_0x7b7e('0x1b')](function(_0x35ea02){_0x44497c[_0x7b7e('0x4e')]=_0x35ea02;return _0x44497c;})['then'](respondWithFilteredResult(_0x2b09b8,_0x3e8cf4))[_0x7b7e('0x26')](handleError(_0x2b09b8,null));};exports[_0x7b7e('0x4f')]=function(_0x5a0832,_0x5efcb8){var _0x1dcb88={'raw':![],'where':{'id':_0x5a0832[_0x7b7e('0x50')]['id']}},_0xc901c4={};_0xc901c4[_0x7b7e('0x37')]=_[_0x7b7e('0x38')](db[_0x7b7e('0x35')]['rawAttributes']);_0xc901c4[_0x7b7e('0x39')]=_['keys'](_0x5a0832[_0x7b7e('0x39')]);_0xc901c4[_0x7b7e('0x3a')]=_[_0x7b7e('0x3b')](_0xc901c4[_0x7b7e('0x37')],_0xc901c4['query']);_0x1dcb88[_0x7b7e('0x3c')]=_[_0x7b7e('0x3b')](_0xc901c4[_0x7b7e('0x37')],qs[_0x7b7e('0x3d')](_0x5a0832[_0x7b7e('0x39')]['fields']));_0x1dcb88[_0x7b7e('0x3c')]=_0x1dcb88[_0x7b7e('0x3c')][_0x7b7e('0x3e')]?_0x1dcb88[_0x7b7e('0x3c')]:_0xc901c4[_0x7b7e('0x37')];if(_0x5a0832['query'][_0x7b7e('0x51')]){_0x1dcb88[_0x7b7e('0x4c')]=[{'all':!![]}];}_0x1dcb88=_[_0x7b7e('0x4b')]({},_0x1dcb88,_0x5a0832[_0x7b7e('0x52')]);return db[_0x7b7e('0x35')][_0x7b7e('0x53')](_0x1dcb88)[_0x7b7e('0x1b')](handleEntityNotFound(_0x5efcb8,null))['then'](respondWithResult(_0x5efcb8,null))[_0x7b7e('0x26')](handleError(_0x5efcb8,null));};exports['create']=function(_0x16730c,_0x766a54){return db['DeskAccount'][_0x7b7e('0x54')](_0x16730c[_0x7b7e('0x55')],{})[_0x7b7e('0x1b')](respondWithResult(_0x766a54,0xc9))[_0x7b7e('0x26')](handleError(_0x766a54,null));};exports[_0x7b7e('0x2e')]=function(_0x36ffd4,_0x337d06){if(_0x36ffd4['body']['id']){delete _0x36ffd4[_0x7b7e('0x55')]['id'];}return db[_0x7b7e('0x35')][_0x7b7e('0x53')]({'where':{'id':_0x36ffd4[_0x7b7e('0x50')]['id']}})['then'](handleEntityNotFound(_0x337d06,null))['then'](saveUpdates(_0x36ffd4['body'],null))[_0x7b7e('0x1b')](respondWithResult(_0x337d06,null))[_0x7b7e('0x26')](handleError(_0x337d06,null));};exports[_0x7b7e('0x2f')]=function(_0x4aa92e,_0x5b1e10){return db[_0x7b7e('0x35')][_0x7b7e('0x53')]({'where':{'id':_0x4aa92e['params']['id']}})[_0x7b7e('0x1b')](handleEntityNotFound(_0x5b1e10,null))[_0x7b7e('0x1b')](removeEntity(_0x5b1e10,null))[_0x7b7e('0x26')](handleError(_0x5b1e10,null));};exports['getConfigurations']=function(_0x2b0657,_0x1d9af5,_0x4d9a71){var _0x25c933={};var _0x441c3c={};var _0x1d7db1;var _0x267aef;return db[_0x7b7e('0x35')][_0x7b7e('0x56')]({'where':{'id':_0x2b0657[_0x7b7e('0x50')]['id']}})[_0x7b7e('0x1b')](handleEntityNotFound(_0x1d9af5,null))[_0x7b7e('0x1b')](function(_0x5509ad){if(_0x5509ad){_0x1d7db1=_0x5509ad;_0x441c3c[_0x7b7e('0x37')]=_[_0x7b7e('0x38')](db['DeskConfiguration'][_0x7b7e('0x36')]);_0x441c3c[_0x7b7e('0x39')]=_[_0x7b7e('0x38')](_0x2b0657['query']);_0x441c3c[_0x7b7e('0x3a')]=_['intersection'](_0x441c3c[_0x7b7e('0x37')],_0x441c3c[_0x7b7e('0x39')]);_0x25c933['attributes']=_[_0x7b7e('0x3b')](_0x441c3c[_0x7b7e('0x37')],qs['fields'](_0x2b0657[_0x7b7e('0x39')][_0x7b7e('0x3d')]));_0x25c933[_0x7b7e('0x3c')]=_0x25c933[_0x7b7e('0x3c')]['length']?_0x25c933[_0x7b7e('0x3c')]:_0x441c3c[_0x7b7e('0x37')];_0x25c933[_0x7b7e('0x43')]=qs[_0x7b7e('0x44')](_0x2b0657[_0x7b7e('0x39')][_0x7b7e('0x44')]);_0x25c933[_0x7b7e('0x45')]=qs[_0x7b7e('0x3a')](_[_0x7b7e('0x46')](_0x2b0657[_0x7b7e('0x39')],_0x441c3c['filters']));if(_0x2b0657[_0x7b7e('0x39')]['filter']){_0x25c933['where']=_[_0x7b7e('0x4b')](_0x25c933[_0x7b7e('0x45')],{'$or':_[_0x7b7e('0x57')](_0x25c933[_0x7b7e('0x3c')],function(_0x5cd4ae){var _0x275998={};_0x275998[_0x5cd4ae]={'$like':'%'+_0x2b0657[_0x7b7e('0x39')][_0x7b7e('0x4a')]+'%'};return _0x275998;})});}_0x25c933=_[_0x7b7e('0x4b')]({},_0x25c933,_0x2b0657[_0x7b7e('0x52')]);return _0x1d7db1[_0x7b7e('0x58')](_0x25c933);}})['then'](function(_0x1ebd58){if(_0x1ebd58){_0x267aef=_0x1ebd58['length'];if(!_0x2b0657['query'][_0x7b7e('0x3f')]('nolimit')){_0x25c933[_0x7b7e('0x41')]=qs['limit'](_0x2b0657[_0x7b7e('0x39')][_0x7b7e('0x41')]);_0x25c933['offset']=qs[_0x7b7e('0x42')](_0x2b0657[_0x7b7e('0x39')]['offset']);}return _0x1d7db1[_0x7b7e('0x58')](_0x25c933);}})[_0x7b7e('0x1b')](function(_0x50184c){if(_0x50184c){return _0x50184c?{'count':_0x267aef,'rows':_0x50184c}:null;}})[_0x7b7e('0x1b')](respondWithResult(_0x1d9af5,null))[_0x7b7e('0x26')](handleError(_0x1d9af5,null));};exports[_0x7b7e('0x59')]=function(_0x8e9813,_0x3f8f8f,_0x457365){if(_0x8e9813[_0x7b7e('0x55')]['id']){delete _0x8e9813['body']['id'];}return db['DeskAccount'][_0x7b7e('0x56')]({'where':{'id':_0x8e9813[_0x7b7e('0x50')]['id']}})[_0x7b7e('0x1b')](handleEntityNotFound(_0x3f8f8f,null))[_0x7b7e('0x1b')](function(_0xea39fa){if(_0xea39fa){_0x8e9813[_0x7b7e('0x55')][_0x7b7e('0x5a')]=_0xea39fa['id'];_0x8e9813['body'][_0x7b7e('0x5b')]=integrations[_0x7b7e('0x5c')](_0x8e9813['body'][_0x7b7e('0x5d')],_0x8e9813[_0x7b7e('0x55')][_0x7b7e('0x47')]);_0x8e9813[_0x7b7e('0x55')][_0x7b7e('0x5e')]=integrations[_0x7b7e('0x5f')](_0x8e9813[_0x7b7e('0x55')][_0x7b7e('0x5d')],_0x8e9813[_0x7b7e('0x55')][_0x7b7e('0x47')]);return db[_0x7b7e('0x60')]['create'](_0x8e9813[_0x7b7e('0x55')],{'include':[{'model':db[_0x7b7e('0x61')],'as':_0x7b7e('0x5b')},{'model':db[_0x7b7e('0x61')],'as':_0x7b7e('0x5e')}]});}return null;})[_0x7b7e('0x1b')](respondWithResult(_0x3f8f8f,null))[_0x7b7e('0x26')](handleError(_0x3f8f8f,null));};exports['getFields']=function(_0x2158b8,_0x16ab85,_0x1eb5ce){var _0x49f0a4=[{'name':_0x7b7e('0x62'),'label':_0x7b7e('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 _0x381ee6='';return db[_0x7b7e('0x35')][_0x7b7e('0x56')]({'where':{'id':_0x2158b8['params']['id']},'attributes':['id','remoteUri','authType',_0x7b7e('0x63'),_0x7b7e('0x64'),_0x7b7e('0x65'),'consumerSecret',_0x7b7e('0x66'),_0x7b7e('0x67')]})[_0x7b7e('0x1b')](handleEntityNotFound(_0x16ab85,null))['then'](function(_0x2983bf){if(_0x2983bf){_0x381ee6=_0x2983bf[_0x7b7e('0x68')];var _0x111c99=_0x381ee6[_0x7b7e('0x69')](-0x1);if(_0x111c99==='/'){_0x381ee6=_0x381ee6['substring'](0x0,_0x381ee6[_0x7b7e('0x6a')](_0x111c99));}var _0x40b4ae={'method':_0x7b7e('0x6b'),'uri':util[_0x7b7e('0x6c')]('%s/custom_fields',_0x381ee6),'headers':{'Content-Type':'application/json','Accept':_0x7b7e('0x6d')},'json':!![]};if(_0x2983bf['authType']===_0x7b7e('0x6e')){_0x40b4ae[_0x7b7e('0x6f')][_0x7b7e('0x70')]=util[_0x7b7e('0x6c')]('Basic\x20%s',new Buffer(util[_0x7b7e('0x6c')](_0x7b7e('0x71'),_0x2983bf[_0x7b7e('0x63')],_0x2983bf[_0x7b7e('0x64')]))[_0x7b7e('0x72')](_0x7b7e('0x73')));}return rp(_0x40b4ae)[_0x7b7e('0x1b')](function(_0x372478){return _0x49f0a4[_0x7b7e('0x74')](_[_0x7b7e('0x57')](_0x372478[_0x7b7e('0x75')][_0x7b7e('0x76')],function(_0xbdc4b9){return{'id':_0xbdc4b9[_0x7b7e('0x32')],'name':_0xbdc4b9[_0x7b7e('0x32')],'type':_0xbdc4b9[_0x7b7e('0x47')],'active':_0xbdc4b9['active'],'label':_0xbdc4b9[_0x7b7e('0x77')],'custom':!![]};}));});}})[_0x7b7e('0x1b')](function(_0x1d9e08){return{'count':_0x1d9e08[_0x7b7e('0x3e')],'rows':_0x1d9e08};})[_0x7b7e('0x1b')](respondWithResult(_0x16ab85,null))[_0x7b7e('0x26')](function(_0x2bf2da){var _0x5f075a=_0x2158b8[_0x7b7e('0x39')][_0x7b7e('0x78')]?0x1f4:_0x2bf2da[_0x7b7e('0x79')]||0x1f4;logger[_0x7b7e('0x21')](_0x7b7e('0x7a'),'getFields',_0x5f075a,JSON['stringify'](_0x2bf2da));delete _0x2bf2da[_0x7b7e('0x32')];if(_0x5f075a===0x191){_0x5f075a=0x190;}_0x16ab85[_0x7b7e('0x29')](_0x5f075a)[_0x7b7e('0x33')](_0x2158b8[_0x7b7e('0x39')][_0x7b7e('0x78')]?{'message':_0x7b7e('0x7b'),'statusCode':_0x2bf2da[_0x7b7e('0x79')]}:_0x2bf2da);});};
\ No newline at end of file
index b63e47b..da02fba 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7f7=['./intDeskAccount.attributes','../../components/integrations/configuration','exports','define','DeskAccount','int_desk_accounts','lodash','util','../../config/logger','api','request-promise'];(function(_0x71cd05,_0x36ac11){var _0x59c9e7=function(_0x5472cd){while(--_0x5472cd){_0x71cd05['push'](_0x71cd05['shift']());}};_0x59c9e7(++_0x36ac11);}(_0xf7f7,0x192));var _0x7f7f=function(_0x1a37e3,_0x5db8f6){_0x1a37e3=_0x1a37e3-0x0;var _0x4db78a=_0xf7f7[_0x1a37e3];return _0x4db78a;};'use strict';var _=require(_0x7f7f('0x0'));var util=require(_0x7f7f('0x1'));var logger=require(_0x7f7f('0x2'))(_0x7f7f('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7f7f('0x4'));var attributes=require(_0x7f7f('0x5'));var integrations=require(_0x7f7f('0x6'));module[_0x7f7f('0x7')]=function(_0x5d01b9,_0x427f8c){return _0x5d01b9[_0x7f7f('0x8')](_0x7f7f('0x9'),attributes,{'tableName':_0x7f7f('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbb8d=['DeskAccount','int_desk_accounts','lodash','../../config/logger','request-promise','./intDeskAccount.attributes','../../components/integrations/configuration','exports','define'];(function(_0x3ce21e,_0x58692f){var _0x531641=function(_0x2ec67e){while(--_0x2ec67e){_0x3ce21e['push'](_0x3ce21e['shift']());}};_0x531641(++_0x58692f);}(_0xbb8d,0x146));var _0xdbb8=function(_0x5edfb9,_0x1d572b){_0x5edfb9=_0x5edfb9-0x0;var _0x2cba2b=_0xbb8d[_0x5edfb9];return _0x2cba2b;};'use strict';var _=require(_0xdbb8('0x0'));var util=require('util');var logger=require(_0xdbb8('0x1'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xdbb8('0x2'));var attributes=require(_0xdbb8('0x3'));var integrations=require(_0xdbb8('0x4'));module[_0xdbb8('0x5')]=function(_0x45cf3e,_0x4e1b1a){return _0x45cf3e[_0xdbb8('0x6')](_0xdbb8('0x7'),attributes,{'tableName':_0xdbb8('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 429b6dc..fdbdbee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x63a6=['DeskAccount,\x20%s,\x20%s','request\x20sent','debug','DeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','GetDeskAccount','options','where','attributes','include','map','model','ShowDeskAccount','find','raw','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','request','then'];(function(_0x2e8156,_0x236cfc){var _0x157799=function(_0x4adf37){while(--_0x4adf37){_0x2e8156['push'](_0x2e8156['shift']());}};_0x157799(++_0x236cfc);}(_0x63a6,0x1c7));var _0x663a=function(_0x4def54,_0x36de1d){_0x4def54=_0x4def54-0x0;var _0x137bee=_0x63a6[_0x4def54];return _0x137bee;};'use strict';var _=require('lodash');var util=require(_0x663a('0x0'));var moment=require(_0x663a('0x1'));var BPromise=require('bluebird');var rs=require(_0x663a('0x2'));var fs=require('fs');var Redis=require(_0x663a('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x663a('0x4'));var logger=require(_0x663a('0x5'))(_0x663a('0x6'));var config=require(_0x663a('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x14b552,_0x20203b,_0x4b1314){return new BPromise(function(_0x4d4249,_0x326b53){return client[_0x663a('0x8')](_0x14b552,_0x4b1314)[_0x663a('0x9')](function(_0x4aa93a){logger['info'](_0x663a('0xa'),_0x20203b,_0x663a('0xb'));logger[_0x663a('0xc')](_0x663a('0xd'),_0x20203b,_0x663a('0xb'),JSON[_0x663a('0xe')](_0x4aa93a));if(_0x4aa93a['error']){if(_0x4aa93a[_0x663a('0xf')][_0x663a('0x10')]===0x1f4){logger[_0x663a('0xf')]('DeskAccount,\x20%s,\x20%s',_0x20203b,_0x4aa93a['error'][_0x663a('0x11')]);return _0x326b53(_0x4aa93a['error']['message']);}logger[_0x663a('0xf')](_0x663a('0xa'),_0x20203b,_0x4aa93a['error'][_0x663a('0x11')]);return _0x4d4249(_0x4aa93a['error'][_0x663a('0x11')]);}else{logger[_0x663a('0x12')](_0x663a('0xa'),_0x20203b,_0x663a('0xb'));_0x4d4249(_0x4aa93a[_0x663a('0x13')]['message']);}})[_0x663a('0x14')](function(_0x5cc6ab){logger[_0x663a('0xf')](_0x663a('0xa'),_0x20203b,_0x5cc6ab);_0x326b53(_0x5cc6ab);});});}exports[_0x663a('0x15')]=function(_0x1508ab){var _0x54c5e6=this;return new Promise(function(_0x2a1f33,_0x5d7a6a){return db['DeskAccount']['findAll']({'raw':_0x1508ab[_0x663a('0x16')]?_0x1508ab[_0x663a('0x16')]['raw']===undefined?!![]:![]:!![],'where':_0x1508ab['options']?_0x1508ab[_0x663a('0x16')][_0x663a('0x17')]||null:null,'attributes':_0x1508ab[_0x663a('0x16')]?_0x1508ab[_0x663a('0x16')][_0x663a('0x18')]||null:null,'limit':_0x1508ab[_0x663a('0x16')]?_0x1508ab[_0x663a('0x16')]['limit']||null:null,'include':_0x1508ab[_0x663a('0x16')]?_0x1508ab[_0x663a('0x16')][_0x663a('0x19')]?_[_0x663a('0x1a')](_0x1508ab[_0x663a('0x16')][_0x663a('0x19')],function(_0x5e1bd1){return{'model':db[_0x5e1bd1[_0x663a('0x1b')]],'as':_0x5e1bd1['as'],'attributes':_0x5e1bd1[_0x663a('0x18')],'include':_0x5e1bd1['include']?_[_0x663a('0x1a')](_0x5e1bd1[_0x663a('0x19')],function(_0x5463d5){return{'model':db[_0x5463d5[_0x663a('0x1b')]],'as':_0x5463d5['as'],'attributes':_0x5463d5[_0x663a('0x18')],'include':_0x5463d5['include']?_[_0x663a('0x1a')](_0x5463d5[_0x663a('0x19')],function(_0x57131d){return{'model':db[_0x57131d[_0x663a('0x1b')]],'as':_0x57131d['as'],'attributes':_0x57131d['attributes']};}):[]};}):[]};}):[]:[]})[_0x663a('0x9')](function(_0x2ab007){logger[_0x663a('0x12')](_0x663a('0x15'),_0x1508ab);logger[_0x663a('0xc')]('GetDeskAccount',_0x1508ab,JSON[_0x663a('0xe')](_0x2ab007));_0x2a1f33(_0x2ab007);})[_0x663a('0x14')](function(_0x1ab286){logger[_0x663a('0xf')](_0x663a('0x15'),_0x1ab286[_0x663a('0x11')],_0x1508ab);_0x5d7a6a(_0x54c5e6[_0x663a('0xf')](0x1f4,_0x1ab286['message']));});});};exports[_0x663a('0x1c')]=function(_0x2a0577){var _0x2cf498=this;return new Promise(function(_0x6ab5a2,_0x472e02){return db['DeskAccount'][_0x663a('0x1d')]({'raw':_0x2a0577['options']?_0x2a0577[_0x663a('0x16')][_0x663a('0x1e')]===undefined?!![]:![]:!![],'where':_0x2a0577[_0x663a('0x16')]?_0x2a0577[_0x663a('0x16')][_0x663a('0x17')]||null:null,'attributes':_0x2a0577['options']?_0x2a0577[_0x663a('0x16')]['attributes']||null:null,'include':_0x2a0577[_0x663a('0x16')]?_0x2a0577[_0x663a('0x16')][_0x663a('0x19')]?_[_0x663a('0x1a')](_0x2a0577['options'][_0x663a('0x19')],function(_0x87a4d9){return{'model':db[_0x87a4d9[_0x663a('0x1b')]],'as':_0x87a4d9['as'],'attributes':_0x87a4d9[_0x663a('0x18')],'include':_0x87a4d9[_0x663a('0x19')]?_[_0x663a('0x1a')](_0x87a4d9[_0x663a('0x19')],function(_0x104f5c){return{'model':db[_0x104f5c['model']],'as':_0x104f5c['as'],'attributes':_0x104f5c[_0x663a('0x18')],'include':_0x104f5c[_0x663a('0x19')]?_['map'](_0x104f5c[_0x663a('0x19')],function(_0x162a38){return{'model':db[_0x162a38[_0x663a('0x1b')]],'as':_0x162a38['as'],'attributes':_0x162a38[_0x663a('0x18')]};}):[]};}):[]};}):[]:[]})[_0x663a('0x9')](function(_0x531681){logger[_0x663a('0x12')]('ShowDeskAccount',_0x2a0577);logger[_0x663a('0xc')](_0x663a('0x1c'),_0x2a0577,JSON['stringify'](_0x531681));_0x6ab5a2(_0x531681);})['catch'](function(_0x3a424e){logger[_0x663a('0xf')]('ShowDeskAccount',_0x3a424e[_0x663a('0x11')],_0x2a0577);_0x472e02(_0x2cf498[_0x663a('0xf')](0x1f4,_0x3a424e[_0x663a('0x11')]));});});};
\ No newline at end of file
+var _0x8c28=['message','catch','GetDeskAccount','DeskAccount','options','raw','where','attributes','include','map','model','stringify','find','ShowDeskAccount','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','DeskAccount,\x20%s,\x20%s','request\x20sent','debug','error','code'];(function(_0x591a90,_0x5525b0){var _0x551587=function(_0xd6ad8e){while(--_0xd6ad8e){_0x591a90['push'](_0x591a90['shift']());}};_0x551587(++_0x5525b0);}(_0x8c28,0x1c8));var _0x88c2=function(_0x4ed379,_0x3a7970){_0x4ed379=_0x4ed379-0x0;var _0x383a52=_0x8c28[_0x4ed379];return _0x383a52;};'use strict';var _=require(_0x88c2('0x0'));var util=require(_0x88c2('0x1'));var moment=require(_0x88c2('0x2'));var BPromise=require(_0x88c2('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x88c2('0x4'));var db=require(_0x88c2('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x88c2('0x6'))(_0x88c2('0x7'));var config=require(_0x88c2('0x8'));var jayson=require(_0x88c2('0x9'));var client=jayson[_0x88c2('0xa')][_0x88c2('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5601f6,_0x66fb6b,_0x1664b5){return new BPromise(function(_0x29b108,_0x31c46f){return client[_0x88c2('0xc')](_0x5601f6,_0x1664b5)[_0x88c2('0xd')](function(_0x350ba6){logger[_0x88c2('0xe')](_0x88c2('0xf'),_0x66fb6b,_0x88c2('0x10'));logger[_0x88c2('0x11')]('DeskAccount,\x20%s,\x20%s,\x20%s',_0x66fb6b,_0x88c2('0x10'),JSON['stringify'](_0x350ba6));if(_0x350ba6[_0x88c2('0x12')]){if(_0x350ba6[_0x88c2('0x12')][_0x88c2('0x13')]===0x1f4){logger[_0x88c2('0x12')](_0x88c2('0xf'),_0x66fb6b,_0x350ba6['error'][_0x88c2('0x14')]);return _0x31c46f(_0x350ba6[_0x88c2('0x12')]['message']);}logger[_0x88c2('0x12')](_0x88c2('0xf'),_0x66fb6b,_0x350ba6[_0x88c2('0x12')][_0x88c2('0x14')]);return _0x29b108(_0x350ba6[_0x88c2('0x12')][_0x88c2('0x14')]);}else{logger['info'](_0x88c2('0xf'),_0x66fb6b,_0x88c2('0x10'));_0x29b108(_0x350ba6['result'][_0x88c2('0x14')]);}})[_0x88c2('0x15')](function(_0x46f0f4){logger[_0x88c2('0x12')]('DeskAccount,\x20%s,\x20%s',_0x66fb6b,_0x46f0f4);_0x31c46f(_0x46f0f4);});});}exports[_0x88c2('0x16')]=function(_0x43943e){var _0x315859=this;return new Promise(function(_0x1f1c39,_0xc1a91a){return db[_0x88c2('0x17')]['findAll']({'raw':_0x43943e[_0x88c2('0x18')]?_0x43943e[_0x88c2('0x18')][_0x88c2('0x19')]===undefined?!![]:![]:!![],'where':_0x43943e[_0x88c2('0x18')]?_0x43943e[_0x88c2('0x18')][_0x88c2('0x1a')]||null:null,'attributes':_0x43943e['options']?_0x43943e[_0x88c2('0x18')][_0x88c2('0x1b')]||null:null,'limit':_0x43943e[_0x88c2('0x18')]?_0x43943e[_0x88c2('0x18')]['limit']||null:null,'include':_0x43943e[_0x88c2('0x18')]?_0x43943e[_0x88c2('0x18')][_0x88c2('0x1c')]?_[_0x88c2('0x1d')](_0x43943e['options'][_0x88c2('0x1c')],function(_0xa1848b){return{'model':db[_0xa1848b[_0x88c2('0x1e')]],'as':_0xa1848b['as'],'attributes':_0xa1848b[_0x88c2('0x1b')],'include':_0xa1848b[_0x88c2('0x1c')]?_[_0x88c2('0x1d')](_0xa1848b['include'],function(_0x1af98c){return{'model':db[_0x1af98c[_0x88c2('0x1e')]],'as':_0x1af98c['as'],'attributes':_0x1af98c[_0x88c2('0x1b')],'include':_0x1af98c[_0x88c2('0x1c')]?_[_0x88c2('0x1d')](_0x1af98c[_0x88c2('0x1c')],function(_0x3b049e){return{'model':db[_0x3b049e[_0x88c2('0x1e')]],'as':_0x3b049e['as'],'attributes':_0x3b049e[_0x88c2('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x88c2('0xd')](function(_0x379dac){logger[_0x88c2('0xe')](_0x88c2('0x16'),_0x43943e);logger[_0x88c2('0x11')](_0x88c2('0x16'),_0x43943e,JSON[_0x88c2('0x1f')](_0x379dac));_0x1f1c39(_0x379dac);})[_0x88c2('0x15')](function(_0x3d706b){logger[_0x88c2('0x12')](_0x88c2('0x16'),_0x3d706b[_0x88c2('0x14')],_0x43943e);_0xc1a91a(_0x315859[_0x88c2('0x12')](0x1f4,_0x3d706b[_0x88c2('0x14')]));});});};exports['ShowDeskAccount']=function(_0x208e47){var _0x492229=this;return new Promise(function(_0x33be39,_0x4fb2cf){return db[_0x88c2('0x17')][_0x88c2('0x20')]({'raw':_0x208e47[_0x88c2('0x18')]?_0x208e47['options']['raw']===undefined?!![]:![]:!![],'where':_0x208e47[_0x88c2('0x18')]?_0x208e47['options'][_0x88c2('0x1a')]||null:null,'attributes':_0x208e47[_0x88c2('0x18')]?_0x208e47[_0x88c2('0x18')][_0x88c2('0x1b')]||null:null,'include':_0x208e47['options']?_0x208e47[_0x88c2('0x18')][_0x88c2('0x1c')]?_[_0x88c2('0x1d')](_0x208e47[_0x88c2('0x18')][_0x88c2('0x1c')],function(_0x169e05){return{'model':db[_0x169e05[_0x88c2('0x1e')]],'as':_0x169e05['as'],'attributes':_0x169e05[_0x88c2('0x1b')],'include':_0x169e05[_0x88c2('0x1c')]?_[_0x88c2('0x1d')](_0x169e05[_0x88c2('0x1c')],function(_0x3be673){return{'model':db[_0x3be673[_0x88c2('0x1e')]],'as':_0x3be673['as'],'attributes':_0x3be673[_0x88c2('0x1b')],'include':_0x3be673[_0x88c2('0x1c')]?_[_0x88c2('0x1d')](_0x3be673[_0x88c2('0x1c')],function(_0x12511b){return{'model':db[_0x12511b['model']],'as':_0x12511b['as'],'attributes':_0x12511b[_0x88c2('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x88c2('0xd')](function(_0xd5eca8){logger[_0x88c2('0xe')](_0x88c2('0x21'),_0x208e47);logger[_0x88c2('0x11')](_0x88c2('0x21'),_0x208e47,JSON[_0x88c2('0x1f')](_0xd5eca8));_0x33be39(_0xd5eca8);})['catch'](function(_0x570077){logger['error'](_0x88c2('0x21'),_0x570077[_0x88c2('0x14')],_0x208e47);_0x4fb2cf(_0x492229['error'](0x1f4,_0x570077['message']));});});};
\ No newline at end of file
index 7da2a09..f8717b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd580=['destroy','multer','util','path','connect-timeout','express','../../components/auth/service','get','index','/:id','isAuthenticated','show','getFields','/:id/subjects','getSubjects','/:id/descriptions','/:id/tags','getTags','post','setTags','put','update','delete'];(function(_0x499210,_0x325b29){var _0x2e153d=function(_0x951263){while(--_0x951263){_0x499210['push'](_0x499210['shift']());}};_0x2e153d(++_0x325b29);}(_0xd580,0x8b));var _0x0d58=function(_0x598a2f,_0x5d0eee){_0x598a2f=_0x598a2f-0x0;var _0x205ff1=_0xd580[_0x598a2f];return _0x205ff1;};'use strict';var multer=require(_0x0d58('0x0'));var util=require(_0x0d58('0x1'));var path=require(_0x0d58('0x2'));var timeout=require(_0x0d58('0x3'));var express=require(_0x0d58('0x4'));var router=express['Router']();var auth=require(_0x0d58('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./intDeskConfiguration.controller');router[_0x0d58('0x6')]('/',auth['isAuthenticated'](),controller[_0x0d58('0x7')]);router[_0x0d58('0x6')](_0x0d58('0x8'),auth[_0x0d58('0x9')](),controller[_0x0d58('0xa')]);router[_0x0d58('0x6')]('/:id/fields',auth['isAuthenticated'](),controller[_0x0d58('0xb')]);router['get'](_0x0d58('0xc'),auth[_0x0d58('0x9')](),controller[_0x0d58('0xd')]);router[_0x0d58('0x6')](_0x0d58('0xe'),auth['isAuthenticated'](),controller['getDescriptions']);router[_0x0d58('0x6')](_0x0d58('0xf'),auth[_0x0d58('0x9')](),controller[_0x0d58('0x10')]);router[_0x0d58('0x11')]('/',auth[_0x0d58('0x9')](),controller['create']);router[_0x0d58('0x11')](_0x0d58('0xf'),auth['isAuthenticated'](),controller[_0x0d58('0x12')]);router[_0x0d58('0x13')](_0x0d58('0x8'),auth['isAuthenticated'](),controller[_0x0d58('0x14')]);router[_0x0d58('0x15')]('/:id',auth[_0x0d58('0x9')](),controller[_0x0d58('0x16')]);module['exports']=router;
\ No newline at end of file
+var _0x5e66=['/:id/subjects','getSubjects','getDescriptions','getTags','post','create','/:id/tags','setTags','put','/:id','destroy','exports','multer','util','path','connect-timeout','Router','../../config/environment','./intDeskConfiguration.controller','get','isAuthenticated','index','/:id/fields','getFields'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x5e66,0xfc));var _0x65e6=function(_0x159743,_0x39c774){_0x159743=_0x159743-0x0;var _0x2cd7a3=_0x5e66[_0x159743];return _0x2cd7a3;};'use strict';var multer=require(_0x65e6('0x0'));var util=require(_0x65e6('0x1'));var path=require(_0x65e6('0x2'));var timeout=require(_0x65e6('0x3'));var express=require('express');var router=express[_0x65e6('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x65e6('0x5'));var controller=require(_0x65e6('0x6'));router[_0x65e6('0x7')]('/',auth[_0x65e6('0x8')](),controller[_0x65e6('0x9')]);router[_0x65e6('0x7')]('/:id',auth[_0x65e6('0x8')](),controller['show']);router[_0x65e6('0x7')](_0x65e6('0xa'),auth[_0x65e6('0x8')](),controller[_0x65e6('0xb')]);router[_0x65e6('0x7')](_0x65e6('0xc'),auth[_0x65e6('0x8')](),controller[_0x65e6('0xd')]);router['get']('/:id/descriptions',auth[_0x65e6('0x8')](),controller[_0x65e6('0xe')]);router['get']('/:id/tags',auth[_0x65e6('0x8')](),controller[_0x65e6('0xf')]);router[_0x65e6('0x10')]('/',auth[_0x65e6('0x8')](),controller[_0x65e6('0x11')]);router['post'](_0x65e6('0x12'),auth['isAuthenticated'](),controller[_0x65e6('0x13')]);router[_0x65e6('0x14')](_0x65e6('0x15'),auth[_0x65e6('0x8')](),controller['update']);router['delete'](_0x65e6('0x15'),auth['isAuthenticated'](),controller[_0x65e6('0x16')]);module[_0x65e6('0x17')]=router;
\ No newline at end of file
index 68cc971..1fa6340 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7065=['exports','STRING','sequelize'];(function(_0x52633c,_0x1a664e){var _0x27ab69=function(_0x14bd9c){while(--_0x14bd9c){_0x52633c['push'](_0x52633c['shift']());}};_0x27ab69(++_0x1a664e);}(_0x7065,0x18e));var _0x5706=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7065[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x5706('0x0'));module[_0x5706('0x1')]={'name':{'type':Sequelize[_0x5706('0x2')]},'description':{'type':Sequelize[_0x5706('0x2')]}};
\ No newline at end of file
+var _0xdd87=['sequelize','exports','STRING'];(function(_0x4d668a,_0x317cc9){var _0x3e7c58=function(_0x5dff28){while(--_0x5dff28){_0x4d668a['push'](_0x4d668a['shift']());}};_0x3e7c58(++_0x317cc9);}(_0xdd87,0x1b9));var _0x7dd8=function(_0x3f2e9c,_0x26c2d4){_0x3f2e9c=_0x3f2e9c-0x0;var _0x3faac2=_0xdd87[_0x3f2e9c];return _0x3faac2;};'use strict';var Sequelize=require(_0x7dd8('0x0'));module[_0x7dd8('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x7dd8('0x2')]}};
\ No newline at end of file
index 05b6208..773ff59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcea2=['util','path','to-csv','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','jayson/promise','client','DeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','sendStatus','stack','name','send','DeskConfiguration','model','keys','query','intersection','attributes','nolimit','order','sort','where','filters','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','fields','length','find','body','params','findOne','DeskField','rawAttributes','hasOwnProperty','getSubjects','getDescriptions','getTags','Tag','html-pdf','rimraf','fast-json-patch','request-promise','moment','mustache'];(function(_0x3430fc,_0x3544c9){var _0x5a6035=function(_0x440e52){while(--_0x440e52){_0x3430fc['push'](_0x3430fc['shift']());}};_0x5a6035(++_0x3544c9);}(_0xcea2,0x15a));var _0x2cea=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xcea2[_0xa464c9];return _0x3d73c4;};'use strict';var pdf=require(_0x2cea('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x2cea('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x2cea('0x2'));var rp=require(_0x2cea('0x3'));var moment=require(_0x2cea('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x2cea('0x5'));var util=require(_0x2cea('0x6'));var path=require(_0x2cea('0x7'));var sox=require('sox');var csv=require(_0x2cea('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x2cea('0x9'));var squel=require(_0x2cea('0xa'));var crypto=require(_0x2cea('0xb'));var jsforce=require(_0x2cea('0xc'));var deskjs=require(_0x2cea('0xd'));var toCsv=require(_0x2cea('0x8'));var querystring=require('querystring');var Papa=require(_0x2cea('0xe'));var authService=require(_0x2cea('0xf'));var hardwareService=require(_0x2cea('0x10'));var Redis=require(_0x2cea('0x11'));var qs=require(_0x2cea('0x12'));var logger=require(_0x2cea('0x13'))(_0x2cea('0x14'));var utils=require(_0x2cea('0x15'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var jayson=require(_0x2cea('0x16'));var client=jayson[_0x2cea('0x17')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4bd265,_0x160eaf,_0x4e0da7,_0xa4ce3d){return new BPromise(function(_0xc5d08e,_0x4377b1){var _0x5cf805=_0xa4ce3d||client;return _0x5cf805['request'](_0x4bd265,_0x4e0da7)['then'](function(_0x369c72){logger['info'](_0x2cea('0x18'),_0x160eaf,_0x2cea('0x19'));logger[_0x2cea('0x1a')](_0x2cea('0x1b'),_0x160eaf,_0x2cea('0x19'),JSON[_0x2cea('0x1c')](_0x369c72));if(_0x369c72[_0x2cea('0x1d')]){if(_0x369c72[_0x2cea('0x1d')]['code']===0x1f4){logger[_0x2cea('0x1d')](_0x2cea('0x18'),_0x160eaf,_0x369c72[_0x2cea('0x1d')][_0x2cea('0x1e')]);return _0x4377b1(_0x369c72[_0x2cea('0x1d')][_0x2cea('0x1e')]);}logger['error'](_0x2cea('0x18'),_0x160eaf,_0x369c72['error'][_0x2cea('0x1e')]);return _0xc5d08e(_0x369c72[_0x2cea('0x1d')][_0x2cea('0x1e')]);}else{logger['info'](_0x2cea('0x18'),_0x160eaf,_0x2cea('0x19'));_0xc5d08e(_0x369c72[_0x2cea('0x1f')][_0x2cea('0x1e')]);}})[_0x2cea('0x20')](function(_0x3f6f0e){logger[_0x2cea('0x1d')]('DeskConfiguration,\x20%s,\x20%s',_0x160eaf,_0x3f6f0e);_0x4377b1(_0x3f6f0e);});});}function respondWithStatusCode(_0x443f5d,_0x5e5b46){_0x5e5b46=_0x5e5b46||0xcc;return function(_0x7d88b9){if(_0x7d88b9){return _0x443f5d['sendStatus'](_0x5e5b46);}return _0x443f5d[_0x2cea('0x21')](_0x5e5b46)[_0x2cea('0x22')]();};}function respondWithResult(_0x56807e,_0x41d272){_0x41d272=_0x41d272||0xc8;return function(_0xd4bd54){if(_0xd4bd54){return _0x56807e[_0x2cea('0x21')](_0x41d272)[_0x2cea('0x23')](_0xd4bd54);}};}function respondWithFilteredResult(_0x3f3ee0,_0x79529b){return function(_0x5d032f){if(_0x5d032f){var _0x4ec9b3=_0x5d032f[_0x2cea('0x24')],_0x32b6a3=_0x79529b[_0x2cea('0x25')],_0x2bbe9b=_0x79529b[_0x2cea('0x25')]+_0x79529b[_0x2cea('0x26')],_0x32af98;if(_0x2bbe9b>=_0x4ec9b3){_0x2bbe9b=_0x4ec9b3;_0x32af98=0xc8;}else{_0x32af98=0xce;}_0x3f3ee0['status'](_0x32af98);return _0x3f3ee0[_0x2cea('0x27')](_0x2cea('0x28'),_0x32b6a3+'-'+_0x2bbe9b+'/'+_0x4ec9b3)['json'](_0x5d032f);}return null;};}function patchUpdates(_0xfeb8bd){return function(_0xc398c5){try{jsonpatch[_0x2cea('0x29')](_0xc398c5,_0xfeb8bd,!![]);}catch(_0x16cf9f){return BPromise['reject'](_0x16cf9f);}return _0xc398c5[_0x2cea('0x2a')]();};}function saveUpdates(_0x128934,_0x4a51e5){return function(_0x2bf4e9){if(_0x2bf4e9){return _0x2bf4e9[_0x2cea('0x2b')](_0x128934)[_0x2cea('0x2c')](function(_0x393d30){return _0x393d30;});}return null;};}function removeEntity(_0x2ce788,_0x35b37e){return function(_0x10e7c5){if(_0x10e7c5){return _0x10e7c5[_0x2cea('0x2d')]()[_0x2cea('0x2c')](function(){_0x2ce788[_0x2cea('0x21')](0xcc)[_0x2cea('0x22')]();});}};}function handleEntityNotFound(_0x47ea58,_0x260a0f){return function(_0xca632f){if(!_0xca632f){_0x47ea58[_0x2cea('0x2e')](0x194);}return _0xca632f;};}function handleError(_0x1bd2a5,_0x5a0061){_0x5a0061=_0x5a0061||0x1f4;return function(_0x4dbbcd){logger[_0x2cea('0x1d')](_0x4dbbcd[_0x2cea('0x2f')]);if(_0x4dbbcd['name']){delete _0x4dbbcd[_0x2cea('0x30')];}_0x1bd2a5['status'](_0x5a0061)[_0x2cea('0x31')](_0x4dbbcd);};}exports['index']=function(_0x510d66,_0x5bd36b){var _0x2c3e1b={},_0x4518eb={},_0x5d254d={'count':0x0,'rows':[]};var _0x389a2c=db[_0x2cea('0x32')]['rawAttributes'];_0x4518eb[_0x2cea('0x33')]=_[_0x2cea('0x34')](_0x389a2c);_0x4518eb[_0x2cea('0x35')]=_[_0x2cea('0x34')](_0x510d66[_0x2cea('0x35')]);_0x4518eb['filters']=_[_0x2cea('0x36')](_0x4518eb[_0x2cea('0x33')],_0x4518eb['query']);_0x2c3e1b['attributes']=_[_0x2cea('0x36')](_0x4518eb['model'],qs['fields'](_0x510d66['query']['fields']));_0x2c3e1b[_0x2cea('0x37')]=_0x2c3e1b[_0x2cea('0x37')]['length']?_0x2c3e1b[_0x2cea('0x37')]:_0x4518eb[_0x2cea('0x33')];if(!_0x510d66[_0x2cea('0x35')]['hasOwnProperty'](_0x2cea('0x38'))){_0x2c3e1b[_0x2cea('0x26')]=qs[_0x2cea('0x26')](_0x510d66[_0x2cea('0x35')][_0x2cea('0x26')]);_0x2c3e1b[_0x2cea('0x25')]=qs[_0x2cea('0x25')](_0x510d66[_0x2cea('0x35')][_0x2cea('0x25')]);}_0x2c3e1b[_0x2cea('0x39')]=qs[_0x2cea('0x3a')](_0x510d66[_0x2cea('0x35')][_0x2cea('0x3a')]);_0x2c3e1b[_0x2cea('0x3b')]=qs[_0x2cea('0x3c')](_[_0x2cea('0x3d')](_0x510d66[_0x2cea('0x35')],_0x4518eb[_0x2cea('0x3c')]));if(_0x510d66['query'][_0x2cea('0x3e')]){_0x2c3e1b['where']=_[_0x2cea('0x3f')](_0x2c3e1b[_0x2cea('0x3b')],{'$or':_[_0x2cea('0x40')](_0x389a2c,function(_0x5b5d71){if(_0x5b5d71[_0x2cea('0x41')][_0x2cea('0x42')]!==_0x2cea('0x43')){var _0x352621={};_0x352621[_0x5b5d71[_0x2cea('0x44')]]={'$like':'%'+_0x510d66[_0x2cea('0x35')]['filter']+'%'};return _0x352621;}})});}_0x2c3e1b=_['merge']({},_0x2c3e1b,_0x510d66[_0x2cea('0x45')]);var _0x370438={'where':_0x2c3e1b['where']};return db[_0x2cea('0x32')]['count'](_0x370438)[_0x2cea('0x2c')](function(_0x59475d){_0x5d254d[_0x2cea('0x24')]=_0x59475d;if(_0x510d66[_0x2cea('0x35')][_0x2cea('0x46')]){_0x2c3e1b[_0x2cea('0x47')]=[{'all':!![]}];}return db[_0x2cea('0x32')][_0x2cea('0x48')](_0x2c3e1b);})[_0x2cea('0x2c')](function(_0x27f9c6){_0x5d254d[_0x2cea('0x49')]=_0x27f9c6;return _0x5d254d;})[_0x2cea('0x2c')](respondWithFilteredResult(_0x5bd36b,_0x2c3e1b))['catch'](handleError(_0x5bd36b,null));};exports[_0x2cea('0x4a')]=function(_0x4771a0,_0x123520){var _0x348baf={'raw':![],'where':{'id':_0x4771a0['params']['id']}},_0x568899={};_0x568899[_0x2cea('0x33')]=_[_0x2cea('0x34')](db[_0x2cea('0x32')]['rawAttributes']);_0x568899[_0x2cea('0x35')]=_[_0x2cea('0x34')](_0x4771a0[_0x2cea('0x35')]);_0x568899[_0x2cea('0x3c')]=_['intersection'](_0x568899[_0x2cea('0x33')],_0x568899['query']);_0x348baf['attributes']=_[_0x2cea('0x36')](_0x568899[_0x2cea('0x33')],qs[_0x2cea('0x4b')](_0x4771a0[_0x2cea('0x35')]['fields']));_0x348baf['attributes']=_0x348baf[_0x2cea('0x37')][_0x2cea('0x4c')]?_0x348baf[_0x2cea('0x37')]:_0x568899[_0x2cea('0x33')];if(_0x4771a0['query']['includeAll']){_0x348baf['include']=[{'all':!![]}];}_0x348baf=_[_0x2cea('0x3f')]({},_0x348baf,_0x4771a0[_0x2cea('0x45')]);return db[_0x2cea('0x32')][_0x2cea('0x4d')](_0x348baf)[_0x2cea('0x2c')](handleEntityNotFound(_0x123520,null))[_0x2cea('0x2c')](respondWithResult(_0x123520,null))[_0x2cea('0x20')](handleError(_0x123520,null));};exports['create']=function(_0x3f0fd0,_0x39937e){return db[_0x2cea('0x32')]['create'](_0x3f0fd0[_0x2cea('0x4e')],{})['then'](respondWithResult(_0x39937e,0xc9))[_0x2cea('0x20')](handleError(_0x39937e,null));};exports[_0x2cea('0x2b')]=function(_0x21851a,_0xc8a4b5){if(_0x21851a[_0x2cea('0x4e')]['id']){delete _0x21851a[_0x2cea('0x4e')]['id'];}return db[_0x2cea('0x32')][_0x2cea('0x4d')]({'where':{'id':_0x21851a['params']['id']}})[_0x2cea('0x2c')](handleEntityNotFound(_0xc8a4b5,null))['then'](saveUpdates(_0x21851a[_0x2cea('0x4e')],null))[_0x2cea('0x2c')](respondWithResult(_0xc8a4b5,null))[_0x2cea('0x20')](handleError(_0xc8a4b5,null));};exports['destroy']=function(_0x3b27f4,_0x4c4db6){return db['DeskConfiguration'][_0x2cea('0x4d')]({'where':{'id':_0x3b27f4[_0x2cea('0x4f')]['id']}})[_0x2cea('0x2c')](handleEntityNotFound(_0x4c4db6,null))[_0x2cea('0x2c')](removeEntity(_0x4c4db6,null))[_0x2cea('0x20')](handleError(_0x4c4db6,null));};exports['getFields']=function(_0x57cc44,_0x3b95d7,_0x160755){var _0x4603fc={};var _0xacbf7a={};var _0x526269;var _0x45e8c5;return db['DeskConfiguration'][_0x2cea('0x50')]({'where':{'id':_0x57cc44[_0x2cea('0x4f')]['id']}})[_0x2cea('0x2c')](handleEntityNotFound(_0x3b95d7,null))[_0x2cea('0x2c')](function(_0x221c16){if(_0x221c16){_0x526269=_0x221c16;_0xacbf7a['model']=_[_0x2cea('0x34')](db[_0x2cea('0x51')][_0x2cea('0x52')]);_0xacbf7a[_0x2cea('0x35')]=_[_0x2cea('0x34')](_0x57cc44['query']);_0xacbf7a[_0x2cea('0x3c')]=_[_0x2cea('0x36')](_0xacbf7a['model'],_0xacbf7a[_0x2cea('0x35')]);_0x4603fc[_0x2cea('0x37')]=_[_0x2cea('0x36')](_0xacbf7a[_0x2cea('0x33')],qs['fields'](_0x57cc44['query'][_0x2cea('0x4b')]));_0x4603fc[_0x2cea('0x37')]=_0x4603fc['attributes'][_0x2cea('0x4c')]?_0x4603fc[_0x2cea('0x37')]:_0xacbf7a['model'];_0x4603fc[_0x2cea('0x39')]=qs[_0x2cea('0x3a')](_0x57cc44[_0x2cea('0x35')][_0x2cea('0x3a')]);_0x4603fc[_0x2cea('0x3b')]=qs['filters'](_[_0x2cea('0x3d')](_0x57cc44[_0x2cea('0x35')],_0xacbf7a['filters']));if(_0x57cc44[_0x2cea('0x35')][_0x2cea('0x3e')]){_0x4603fc[_0x2cea('0x3b')]=_[_0x2cea('0x3f')](_0x4603fc[_0x2cea('0x3b')],{'$or':_[_0x2cea('0x40')](_0x4603fc[_0x2cea('0x37')],function(_0xb9ef65){var _0x3708c8={};_0x3708c8[_0xb9ef65]={'$like':'%'+_0x57cc44[_0x2cea('0x35')][_0x2cea('0x3e')]+'%'};return _0x3708c8;})});}_0x4603fc=_[_0x2cea('0x3f')]({},_0x4603fc,_0x57cc44[_0x2cea('0x45')]);return _0x526269['getFields'](_0x4603fc);}})['then'](function(_0x1364c3){if(_0x1364c3){_0x45e8c5=_0x1364c3[_0x2cea('0x4c')];if(!_0x57cc44[_0x2cea('0x35')][_0x2cea('0x53')](_0x2cea('0x38'))){_0x4603fc[_0x2cea('0x26')]=qs[_0x2cea('0x26')](_0x57cc44['query']['limit']);_0x4603fc[_0x2cea('0x25')]=qs[_0x2cea('0x25')](_0x57cc44[_0x2cea('0x35')]['offset']);}return _0x526269['getFields'](_0x4603fc);}})['then'](function(_0x3e2c5c){if(_0x3e2c5c){return _0x3e2c5c?{'count':_0x45e8c5,'rows':_0x3e2c5c}:null;}})[_0x2cea('0x2c')](respondWithResult(_0x3b95d7,null))['catch'](handleError(_0x3b95d7,null));};exports['getSubjects']=function(_0x33d632,_0x43fcdd,_0x77f341){var _0x3ddb63={};var _0x12db24={};var _0x22216f;var _0x16adaa;return db[_0x2cea('0x32')]['findOne']({'where':{'id':_0x33d632[_0x2cea('0x4f')]['id']}})[_0x2cea('0x2c')](handleEntityNotFound(_0x43fcdd,null))[_0x2cea('0x2c')](function(_0x2527e8){if(_0x2527e8){_0x22216f=_0x2527e8;_0x12db24[_0x2cea('0x33')]=_['keys'](db[_0x2cea('0x51')][_0x2cea('0x52')]);_0x12db24['query']=_[_0x2cea('0x34')](_0x33d632[_0x2cea('0x35')]);_0x12db24[_0x2cea('0x3c')]=_[_0x2cea('0x36')](_0x12db24['model'],_0x12db24[_0x2cea('0x35')]);_0x3ddb63[_0x2cea('0x37')]=_[_0x2cea('0x36')](_0x12db24['model'],qs[_0x2cea('0x4b')](_0x33d632[_0x2cea('0x35')][_0x2cea('0x4b')]));_0x3ddb63[_0x2cea('0x37')]=_0x3ddb63[_0x2cea('0x37')][_0x2cea('0x4c')]?_0x3ddb63[_0x2cea('0x37')]:_0x12db24[_0x2cea('0x33')];_0x3ddb63[_0x2cea('0x39')]=qs['sort'](_0x33d632[_0x2cea('0x35')][_0x2cea('0x3a')]);_0x3ddb63[_0x2cea('0x3b')]=qs[_0x2cea('0x3c')](_['pick'](_0x33d632[_0x2cea('0x35')],_0x12db24[_0x2cea('0x3c')]));if(_0x33d632[_0x2cea('0x35')][_0x2cea('0x3e')]){_0x3ddb63['where']=_[_0x2cea('0x3f')](_0x3ddb63[_0x2cea('0x3b')],{'$or':_[_0x2cea('0x40')](_0x3ddb63[_0x2cea('0x37')],function(_0x21bb08){var _0x12ec50={};_0x12ec50[_0x21bb08]={'$like':'%'+_0x33d632[_0x2cea('0x35')][_0x2cea('0x3e')]+'%'};return _0x12ec50;})});}_0x3ddb63=_[_0x2cea('0x3f')]({},_0x3ddb63,_0x33d632[_0x2cea('0x45')]);return _0x22216f[_0x2cea('0x54')](_0x3ddb63);}})[_0x2cea('0x2c')](function(_0x861594){if(_0x861594){_0x16adaa=_0x861594[_0x2cea('0x4c')];if(!_0x33d632['query'][_0x2cea('0x53')]('nolimit')){_0x3ddb63[_0x2cea('0x26')]=qs[_0x2cea('0x26')](_0x33d632[_0x2cea('0x35')][_0x2cea('0x26')]);_0x3ddb63[_0x2cea('0x25')]=qs['offset'](_0x33d632[_0x2cea('0x35')]['offset']);}return _0x22216f['getSubjects'](_0x3ddb63);}})[_0x2cea('0x2c')](function(_0x453474){if(_0x453474){return _0x453474?{'count':_0x16adaa,'rows':_0x453474}:null;}})[_0x2cea('0x2c')](respondWithResult(_0x43fcdd,null))['catch'](handleError(_0x43fcdd,null));};exports[_0x2cea('0x55')]=function(_0x3c67a5,_0x33af7f,_0x2e9a54){var _0x5f2d10={};var _0x32ea9d={};var _0x43efc6;var _0x47e16f;return db[_0x2cea('0x32')][_0x2cea('0x50')]({'where':{'id':_0x3c67a5[_0x2cea('0x4f')]['id']}})[_0x2cea('0x2c')](handleEntityNotFound(_0x33af7f,null))['then'](function(_0x10b0f2){if(_0x10b0f2){_0x43efc6=_0x10b0f2;_0x32ea9d['model']=_[_0x2cea('0x34')](db[_0x2cea('0x51')][_0x2cea('0x52')]);_0x32ea9d[_0x2cea('0x35')]=_[_0x2cea('0x34')](_0x3c67a5[_0x2cea('0x35')]);_0x32ea9d[_0x2cea('0x3c')]=_[_0x2cea('0x36')](_0x32ea9d[_0x2cea('0x33')],_0x32ea9d[_0x2cea('0x35')]);_0x5f2d10[_0x2cea('0x37')]=_[_0x2cea('0x36')](_0x32ea9d[_0x2cea('0x33')],qs[_0x2cea('0x4b')](_0x3c67a5[_0x2cea('0x35')][_0x2cea('0x4b')]));_0x5f2d10[_0x2cea('0x37')]=_0x5f2d10[_0x2cea('0x37')][_0x2cea('0x4c')]?_0x5f2d10[_0x2cea('0x37')]:_0x32ea9d[_0x2cea('0x33')];_0x5f2d10['order']=qs[_0x2cea('0x3a')](_0x3c67a5[_0x2cea('0x35')][_0x2cea('0x3a')]);_0x5f2d10['where']=qs[_0x2cea('0x3c')](_[_0x2cea('0x3d')](_0x3c67a5[_0x2cea('0x35')],_0x32ea9d[_0x2cea('0x3c')]));if(_0x3c67a5[_0x2cea('0x35')]['filter']){_0x5f2d10['where']=_['merge'](_0x5f2d10['where'],{'$or':_[_0x2cea('0x40')](_0x5f2d10['attributes'],function(_0x334993){var _0x52db25={};_0x52db25[_0x334993]={'$like':'%'+_0x3c67a5[_0x2cea('0x35')][_0x2cea('0x3e')]+'%'};return _0x52db25;})});}_0x5f2d10=_[_0x2cea('0x3f')]({},_0x5f2d10,_0x3c67a5[_0x2cea('0x45')]);return _0x43efc6['getDescriptions'](_0x5f2d10);}})[_0x2cea('0x2c')](function(_0x535268){if(_0x535268){_0x47e16f=_0x535268[_0x2cea('0x4c')];if(!_0x3c67a5[_0x2cea('0x35')][_0x2cea('0x53')](_0x2cea('0x38'))){_0x5f2d10[_0x2cea('0x26')]=qs['limit'](_0x3c67a5[_0x2cea('0x35')]['limit']);_0x5f2d10[_0x2cea('0x25')]=qs['offset'](_0x3c67a5[_0x2cea('0x35')]['offset']);}return _0x43efc6[_0x2cea('0x55')](_0x5f2d10);}})[_0x2cea('0x2c')](function(_0x41705c){if(_0x41705c){return _0x41705c?{'count':_0x47e16f,'rows':_0x41705c}:null;}})[_0x2cea('0x2c')](respondWithResult(_0x33af7f,null))[_0x2cea('0x20')](handleError(_0x33af7f,null));};exports[_0x2cea('0x56')]=function(_0xf48c14,_0x652e5b,_0x4b6051){var _0x341df6={};var _0x488234={};var _0x21cd24;var _0x48515f;return db[_0x2cea('0x32')][_0x2cea('0x50')]({'where':{'id':_0xf48c14['params']['id']}})[_0x2cea('0x2c')](handleEntityNotFound(_0x652e5b,null))[_0x2cea('0x2c')](function(_0x2ce60f){if(_0x2ce60f){_0x21cd24=_0x2ce60f;_0x488234[_0x2cea('0x33')]=_[_0x2cea('0x34')](db[_0x2cea('0x57')][_0x2cea('0x52')]);_0x488234[_0x2cea('0x35')]=_[_0x2cea('0x34')](_0xf48c14[_0x2cea('0x35')]);_0x488234[_0x2cea('0x3c')]=_[_0x2cea('0x36')](_0x488234[_0x2cea('0x33')],_0x488234[_0x2cea('0x35')]);_0x341df6['attributes']=_['intersection'](_0x488234[_0x2cea('0x33')],qs[_0x2cea('0x4b')](_0xf48c14[_0x2cea('0x35')][_0x2cea('0x4b')]));_0x341df6[_0x2cea('0x37')]=_0x341df6['attributes']['length']?_0x341df6[_0x2cea('0x37')]:_0x488234[_0x2cea('0x33')];_0x341df6[_0x2cea('0x39')]=qs[_0x2cea('0x3a')](_0xf48c14['query'][_0x2cea('0x3a')]);_0x341df6[_0x2cea('0x3b')]=qs[_0x2cea('0x3c')](_['pick'](_0xf48c14[_0x2cea('0x35')],_0x488234[_0x2cea('0x3c')]));if(_0xf48c14[_0x2cea('0x35')][_0x2cea('0x3e')]){_0x341df6[_0x2cea('0x3b')]=_[_0x2cea('0x3f')](_0x341df6['where'],{'$or':_[_0x2cea('0x40')](_0x341df6[_0x2cea('0x37')],function(_0x56873b){var _0x40ebe1={};_0x40ebe1[_0x56873b]={'$like':'%'+_0xf48c14[_0x2cea('0x35')][_0x2cea('0x3e')]+'%'};return _0x40ebe1;})});}_0x341df6=_['merge']({},_0x341df6,_0xf48c14['options']);return _0x21cd24[_0x2cea('0x56')](_0x341df6);}})[_0x2cea('0x2c')](function(_0x290e28){if(_0x290e28){_0x48515f=_0x290e28[_0x2cea('0x4c')];if(!_0xf48c14[_0x2cea('0x35')][_0x2cea('0x53')](_0x2cea('0x38'))){_0x341df6[_0x2cea('0x26')]=qs[_0x2cea('0x26')](_0xf48c14[_0x2cea('0x35')][_0x2cea('0x26')]);_0x341df6[_0x2cea('0x25')]=qs['offset'](_0xf48c14[_0x2cea('0x35')]['offset']);}return _0x21cd24[_0x2cea('0x56')](_0x341df6);}})[_0x2cea('0x2c')](function(_0x39512d){if(_0x39512d){return _0x39512d?{'count':_0x48515f,'rows':_0x39512d}:null;}})['then'](respondWithResult(_0x652e5b,null))[_0x2cea('0x20')](handleError(_0x652e5b,null));};exports['setTags']=function(_0x2c865b,_0x1ff14d,_0x29c3b8){if(_0x2c865b[_0x2cea('0x4e')]['id']){delete _0x2c865b[_0x2cea('0x4e')]['id'];}return db[_0x2cea('0x32')][_0x2cea('0x50')]({'where':{'id':_0x2c865b['params']['id']}})[_0x2cea('0x2c')](handleEntityNotFound(_0x1ff14d,null))[_0x2cea('0x2c')](function(_0x356038){if(_0x356038){return _0x356038['setTags'](_0x2c865b[_0x2cea('0x4e')]['ids']||[]);}return null;})['then'](respondWithResult(_0x1ff14d,null))[_0x2cea('0x20')](handleError(_0x1ff14d,null));};
\ No newline at end of file
+var _0x3c81=['querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','DeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','DeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','status','end','offset','limit','Content-Range','json','apply','reject','then','sendStatus','stack','name','send','DeskConfiguration','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','count','rows','show','params','rawAttributes','includeAll','find','create','body','update','findOne','DeskField','getFields','getSubjects','getDescriptions','getTags','Tag','setTags','ids','html-pdf','eml-format','zip-dir','fast-json-patch','util','path','sox','to-csv','ejs','lodash','squel','jsforce'];(function(_0x31f095,_0x4ef11d){var _0xc7f71c=function(_0x58a5b1){while(--_0x58a5b1){_0x31f095['push'](_0x31f095['shift']());}};_0xc7f71c(++_0x4ef11d);}(_0x3c81,0x102));var _0x13c8=function(_0x6e0c91,_0x214ef4){_0x6e0c91=_0x6e0c91-0x0;var _0x2d2394=_0x3c81[_0x6e0c91];return _0x2d2394;};'use strict';var pdf=require(_0x13c8('0x0'));var emlformat=require(_0x13c8('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x13c8('0x2'));var jsonpatch=require(_0x13c8('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x13c8('0x4'));var path=require(_0x13c8('0x5'));var sox=require(_0x13c8('0x6'));var csv=require(_0x13c8('0x7'));var ejs=require(_0x13c8('0x8'));var fs=require('fs');var _=require(_0x13c8('0x9'));var squel=require(_0x13c8('0xa'));var crypto=require('crypto');var jsforce=require(_0x13c8('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x13c8('0x7'));var querystring=require(_0x13c8('0xc'));var Papa=require(_0x13c8('0xd'));var authService=require(_0x13c8('0xe'));var hardwareService=require(_0x13c8('0xf'));var Redis=require(_0x13c8('0x10'));var qs=require(_0x13c8('0x11'));var logger=require(_0x13c8('0x12'))(_0x13c8('0x13'));var utils=require(_0x13c8('0x14'));var config=require(_0x13c8('0x15'));var db=require(_0x13c8('0x16'))['db'];var jayson=require(_0x13c8('0x17'));var client=jayson[_0x13c8('0x18')]['http']({'port':0x232a});function respondWithRpcPromise(_0x21442d,_0x7b6da8,_0x2304b5,_0x1f9b6f){return new BPromise(function(_0x4a077c,_0x42955d){var _0x515681=_0x1f9b6f||client;return _0x515681['request'](_0x21442d,_0x2304b5)['then'](function(_0x126359){logger['info'](_0x13c8('0x19'),_0x7b6da8,_0x13c8('0x1a'));logger[_0x13c8('0x1b')](_0x13c8('0x1c'),_0x7b6da8,'request\x20sent',JSON[_0x13c8('0x1d')](_0x126359));if(_0x126359[_0x13c8('0x1e')]){if(_0x126359[_0x13c8('0x1e')][_0x13c8('0x1f')]===0x1f4){logger[_0x13c8('0x1e')](_0x13c8('0x19'),_0x7b6da8,_0x126359[_0x13c8('0x1e')][_0x13c8('0x20')]);return _0x42955d(_0x126359[_0x13c8('0x1e')][_0x13c8('0x20')]);}logger[_0x13c8('0x1e')]('DeskConfiguration,\x20%s,\x20%s',_0x7b6da8,_0x126359[_0x13c8('0x1e')][_0x13c8('0x20')]);return _0x4a077c(_0x126359[_0x13c8('0x1e')][_0x13c8('0x20')]);}else{logger['info'](_0x13c8('0x19'),_0x7b6da8,_0x13c8('0x1a'));_0x4a077c(_0x126359[_0x13c8('0x21')][_0x13c8('0x20')]);}})[_0x13c8('0x22')](function(_0x2fc123){logger['error'](_0x13c8('0x19'),_0x7b6da8,_0x2fc123);_0x42955d(_0x2fc123);});});}function respondWithStatusCode(_0x1d8e9f,_0x315d6c){_0x315d6c=_0x315d6c||0xcc;return function(_0xcf41d2){if(_0xcf41d2){return _0x1d8e9f['sendStatus'](_0x315d6c);}return _0x1d8e9f[_0x13c8('0x23')](_0x315d6c)[_0x13c8('0x24')]();};}function respondWithResult(_0x4e392f,_0x49b552){_0x49b552=_0x49b552||0xc8;return function(_0x3b4fd8){if(_0x3b4fd8){return _0x4e392f[_0x13c8('0x23')](_0x49b552)['json'](_0x3b4fd8);}};}function respondWithFilteredResult(_0x5ad0dc,_0x288c3c){return function(_0xc7f1b6){if(_0xc7f1b6){var _0x53ada9=_0xc7f1b6['count'],_0x4df077=_0x288c3c[_0x13c8('0x25')],_0x196983=_0x288c3c[_0x13c8('0x25')]+_0x288c3c[_0x13c8('0x26')],_0x596166;if(_0x196983>=_0x53ada9){_0x196983=_0x53ada9;_0x596166=0xc8;}else{_0x596166=0xce;}_0x5ad0dc['status'](_0x596166);return _0x5ad0dc['set'](_0x13c8('0x27'),_0x4df077+'-'+_0x196983+'/'+_0x53ada9)[_0x13c8('0x28')](_0xc7f1b6);}return null;};}function patchUpdates(_0x399840){return function(_0x441182){try{jsonpatch[_0x13c8('0x29')](_0x441182,_0x399840,!![]);}catch(_0x220d40){return BPromise[_0x13c8('0x2a')](_0x220d40);}return _0x441182['save']();};}function saveUpdates(_0x109cb8,_0xcbc9b7){return function(_0x5a5911){if(_0x5a5911){return _0x5a5911['update'](_0x109cb8)[_0x13c8('0x2b')](function(_0xc7225a){return _0xc7225a;});}return null;};}function removeEntity(_0x50bb89,_0x222f55){return function(_0x355ddc){if(_0x355ddc){return _0x355ddc['destroy']()[_0x13c8('0x2b')](function(){_0x50bb89[_0x13c8('0x23')](0xcc)[_0x13c8('0x24')]();});}};}function handleEntityNotFound(_0x26a93b,_0x207dc2){return function(_0x2f600d){if(!_0x2f600d){_0x26a93b[_0x13c8('0x2c')](0x194);}return _0x2f600d;};}function handleError(_0x2a121a,_0x5618b5){_0x5618b5=_0x5618b5||0x1f4;return function(_0x4d9277){logger[_0x13c8('0x1e')](_0x4d9277[_0x13c8('0x2d')]);if(_0x4d9277['name']){delete _0x4d9277[_0x13c8('0x2e')];}_0x2a121a['status'](_0x5618b5)[_0x13c8('0x2f')](_0x4d9277);};}exports['index']=function(_0x202918,_0x53de18){var _0x1bed47={},_0x21ed5a={},_0x2039e7={'count':0x0,'rows':[]};var _0x42a176=db[_0x13c8('0x30')]['rawAttributes'];_0x21ed5a[_0x13c8('0x31')]=_[_0x13c8('0x32')](_0x42a176);_0x21ed5a['query']=_[_0x13c8('0x32')](_0x202918[_0x13c8('0x33')]);_0x21ed5a[_0x13c8('0x34')]=_['intersection'](_0x21ed5a['model'],_0x21ed5a['query']);_0x1bed47[_0x13c8('0x35')]=_[_0x13c8('0x36')](_0x21ed5a[_0x13c8('0x31')],qs[_0x13c8('0x37')](_0x202918[_0x13c8('0x33')][_0x13c8('0x37')]));_0x1bed47[_0x13c8('0x35')]=_0x1bed47[_0x13c8('0x35')][_0x13c8('0x38')]?_0x1bed47['attributes']:_0x21ed5a['model'];if(!_0x202918[_0x13c8('0x33')][_0x13c8('0x39')](_0x13c8('0x3a'))){_0x1bed47[_0x13c8('0x26')]=qs['limit'](_0x202918[_0x13c8('0x33')]['limit']);_0x1bed47[_0x13c8('0x25')]=qs[_0x13c8('0x25')](_0x202918[_0x13c8('0x33')][_0x13c8('0x25')]);}_0x1bed47[_0x13c8('0x3b')]=qs[_0x13c8('0x3c')](_0x202918[_0x13c8('0x33')][_0x13c8('0x3c')]);_0x1bed47[_0x13c8('0x3d')]=qs[_0x13c8('0x34')](_[_0x13c8('0x3e')](_0x202918[_0x13c8('0x33')],_0x21ed5a[_0x13c8('0x34')]));if(_0x202918[_0x13c8('0x33')][_0x13c8('0x3f')]){_0x1bed47[_0x13c8('0x3d')]=_[_0x13c8('0x40')](_0x1bed47[_0x13c8('0x3d')],{'$or':_[_0x13c8('0x41')](_0x42a176,function(_0x1cff99){if(_0x1cff99[_0x13c8('0x42')][_0x13c8('0x43')]!==_0x13c8('0x44')){var _0x4030ca={};_0x4030ca[_0x1cff99[_0x13c8('0x45')]]={'$like':'%'+_0x202918['query'][_0x13c8('0x3f')]+'%'};return _0x4030ca;}})});}_0x1bed47=_[_0x13c8('0x40')]({},_0x1bed47,_0x202918[_0x13c8('0x46')]);var _0x35c8cf={'where':_0x1bed47[_0x13c8('0x3d')]};return db['DeskConfiguration']['count'](_0x35c8cf)[_0x13c8('0x2b')](function(_0x437a40){_0x2039e7[_0x13c8('0x47')]=_0x437a40;if(_0x202918['query']['includeAll']){_0x1bed47['include']=[{'all':!![]}];}return db[_0x13c8('0x30')]['findAll'](_0x1bed47);})[_0x13c8('0x2b')](function(_0x4e3bb7){_0x2039e7[_0x13c8('0x48')]=_0x4e3bb7;return _0x2039e7;})[_0x13c8('0x2b')](respondWithFilteredResult(_0x53de18,_0x1bed47))[_0x13c8('0x22')](handleError(_0x53de18,null));};exports[_0x13c8('0x49')]=function(_0x3fcc4d,_0x471bfc){var _0x52df72={'raw':![],'where':{'id':_0x3fcc4d[_0x13c8('0x4a')]['id']}},_0x94f91e={};_0x94f91e['model']=_[_0x13c8('0x32')](db[_0x13c8('0x30')][_0x13c8('0x4b')]);_0x94f91e[_0x13c8('0x33')]=_[_0x13c8('0x32')](_0x3fcc4d['query']);_0x94f91e[_0x13c8('0x34')]=_[_0x13c8('0x36')](_0x94f91e[_0x13c8('0x31')],_0x94f91e[_0x13c8('0x33')]);_0x52df72[_0x13c8('0x35')]=_['intersection'](_0x94f91e[_0x13c8('0x31')],qs[_0x13c8('0x37')](_0x3fcc4d[_0x13c8('0x33')][_0x13c8('0x37')]));_0x52df72[_0x13c8('0x35')]=_0x52df72[_0x13c8('0x35')][_0x13c8('0x38')]?_0x52df72[_0x13c8('0x35')]:_0x94f91e[_0x13c8('0x31')];if(_0x3fcc4d[_0x13c8('0x33')][_0x13c8('0x4c')]){_0x52df72['include']=[{'all':!![]}];}_0x52df72=_[_0x13c8('0x40')]({},_0x52df72,_0x3fcc4d[_0x13c8('0x46')]);return db[_0x13c8('0x30')][_0x13c8('0x4d')](_0x52df72)[_0x13c8('0x2b')](handleEntityNotFound(_0x471bfc,null))[_0x13c8('0x2b')](respondWithResult(_0x471bfc,null))['catch'](handleError(_0x471bfc,null));};exports[_0x13c8('0x4e')]=function(_0x416e4f,_0x2f1e83){return db['DeskConfiguration']['create'](_0x416e4f[_0x13c8('0x4f')],{})[_0x13c8('0x2b')](respondWithResult(_0x2f1e83,0xc9))['catch'](handleError(_0x2f1e83,null));};exports[_0x13c8('0x50')]=function(_0x302fad,_0x56e096){if(_0x302fad[_0x13c8('0x4f')]['id']){delete _0x302fad['body']['id'];}return db[_0x13c8('0x30')][_0x13c8('0x4d')]({'where':{'id':_0x302fad[_0x13c8('0x4a')]['id']}})['then'](handleEntityNotFound(_0x56e096,null))[_0x13c8('0x2b')](saveUpdates(_0x302fad[_0x13c8('0x4f')],null))['then'](respondWithResult(_0x56e096,null))[_0x13c8('0x22')](handleError(_0x56e096,null));};exports['destroy']=function(_0x95289e,_0x5eda4c){return db[_0x13c8('0x30')][_0x13c8('0x4d')]({'where':{'id':_0x95289e[_0x13c8('0x4a')]['id']}})['then'](handleEntityNotFound(_0x5eda4c,null))[_0x13c8('0x2b')](removeEntity(_0x5eda4c,null))['catch'](handleError(_0x5eda4c,null));};exports['getFields']=function(_0x4d43e1,_0x53c8f5,_0x539c84){var _0x1b7d8a={};var _0x46074c={};var _0x1515a5;var _0x1f383f;return db[_0x13c8('0x30')][_0x13c8('0x51')]({'where':{'id':_0x4d43e1[_0x13c8('0x4a')]['id']}})['then'](handleEntityNotFound(_0x53c8f5,null))['then'](function(_0x41f9d7){if(_0x41f9d7){_0x1515a5=_0x41f9d7;_0x46074c[_0x13c8('0x31')]=_[_0x13c8('0x32')](db[_0x13c8('0x52')][_0x13c8('0x4b')]);_0x46074c[_0x13c8('0x33')]=_[_0x13c8('0x32')](_0x4d43e1[_0x13c8('0x33')]);_0x46074c['filters']=_[_0x13c8('0x36')](_0x46074c[_0x13c8('0x31')],_0x46074c['query']);_0x1b7d8a[_0x13c8('0x35')]=_[_0x13c8('0x36')](_0x46074c[_0x13c8('0x31')],qs[_0x13c8('0x37')](_0x4d43e1[_0x13c8('0x33')][_0x13c8('0x37')]));_0x1b7d8a[_0x13c8('0x35')]=_0x1b7d8a[_0x13c8('0x35')][_0x13c8('0x38')]?_0x1b7d8a[_0x13c8('0x35')]:_0x46074c[_0x13c8('0x31')];_0x1b7d8a[_0x13c8('0x3b')]=qs[_0x13c8('0x3c')](_0x4d43e1[_0x13c8('0x33')][_0x13c8('0x3c')]);_0x1b7d8a[_0x13c8('0x3d')]=qs['filters'](_[_0x13c8('0x3e')](_0x4d43e1['query'],_0x46074c[_0x13c8('0x34')]));if(_0x4d43e1[_0x13c8('0x33')]['filter']){_0x1b7d8a[_0x13c8('0x3d')]=_[_0x13c8('0x40')](_0x1b7d8a['where'],{'$or':_[_0x13c8('0x41')](_0x1b7d8a[_0x13c8('0x35')],function(_0x44c16d){var _0x4c04dc={};_0x4c04dc[_0x44c16d]={'$like':'%'+_0x4d43e1[_0x13c8('0x33')][_0x13c8('0x3f')]+'%'};return _0x4c04dc;})});}_0x1b7d8a=_[_0x13c8('0x40')]({},_0x1b7d8a,_0x4d43e1[_0x13c8('0x46')]);return _0x1515a5[_0x13c8('0x53')](_0x1b7d8a);}})[_0x13c8('0x2b')](function(_0x3bee19){if(_0x3bee19){_0x1f383f=_0x3bee19['length'];if(!_0x4d43e1[_0x13c8('0x33')][_0x13c8('0x39')](_0x13c8('0x3a'))){_0x1b7d8a[_0x13c8('0x26')]=qs[_0x13c8('0x26')](_0x4d43e1[_0x13c8('0x33')]['limit']);_0x1b7d8a[_0x13c8('0x25')]=qs[_0x13c8('0x25')](_0x4d43e1[_0x13c8('0x33')]['offset']);}return _0x1515a5[_0x13c8('0x53')](_0x1b7d8a);}})[_0x13c8('0x2b')](function(_0x34a690){if(_0x34a690){return _0x34a690?{'count':_0x1f383f,'rows':_0x34a690}:null;}})[_0x13c8('0x2b')](respondWithResult(_0x53c8f5,null))[_0x13c8('0x22')](handleError(_0x53c8f5,null));};exports[_0x13c8('0x54')]=function(_0x55e5ba,_0xcc921,_0x3e8594){var _0x1531d9={};var _0x19317a={};var _0x4f2972;var _0x16b409;return db[_0x13c8('0x30')][_0x13c8('0x51')]({'where':{'id':_0x55e5ba[_0x13c8('0x4a')]['id']}})[_0x13c8('0x2b')](handleEntityNotFound(_0xcc921,null))[_0x13c8('0x2b')](function(_0xaa4763){if(_0xaa4763){_0x4f2972=_0xaa4763;_0x19317a['model']=_[_0x13c8('0x32')](db[_0x13c8('0x52')][_0x13c8('0x4b')]);_0x19317a['query']=_[_0x13c8('0x32')](_0x55e5ba[_0x13c8('0x33')]);_0x19317a['filters']=_['intersection'](_0x19317a[_0x13c8('0x31')],_0x19317a['query']);_0x1531d9[_0x13c8('0x35')]=_['intersection'](_0x19317a[_0x13c8('0x31')],qs[_0x13c8('0x37')](_0x55e5ba[_0x13c8('0x33')][_0x13c8('0x37')]));_0x1531d9[_0x13c8('0x35')]=_0x1531d9['attributes'][_0x13c8('0x38')]?_0x1531d9[_0x13c8('0x35')]:_0x19317a['model'];_0x1531d9[_0x13c8('0x3b')]=qs[_0x13c8('0x3c')](_0x55e5ba[_0x13c8('0x33')][_0x13c8('0x3c')]);_0x1531d9[_0x13c8('0x3d')]=qs[_0x13c8('0x34')](_[_0x13c8('0x3e')](_0x55e5ba[_0x13c8('0x33')],_0x19317a[_0x13c8('0x34')]));if(_0x55e5ba[_0x13c8('0x33')]['filter']){_0x1531d9[_0x13c8('0x3d')]=_[_0x13c8('0x40')](_0x1531d9['where'],{'$or':_['map'](_0x1531d9[_0x13c8('0x35')],function(_0x1e119c){var _0xa70841={};_0xa70841[_0x1e119c]={'$like':'%'+_0x55e5ba[_0x13c8('0x33')][_0x13c8('0x3f')]+'%'};return _0xa70841;})});}_0x1531d9=_[_0x13c8('0x40')]({},_0x1531d9,_0x55e5ba['options']);return _0x4f2972[_0x13c8('0x54')](_0x1531d9);}})[_0x13c8('0x2b')](function(_0x74f463){if(_0x74f463){_0x16b409=_0x74f463[_0x13c8('0x38')];if(!_0x55e5ba[_0x13c8('0x33')]['hasOwnProperty'](_0x13c8('0x3a'))){_0x1531d9[_0x13c8('0x26')]=qs['limit'](_0x55e5ba[_0x13c8('0x33')][_0x13c8('0x26')]);_0x1531d9['offset']=qs[_0x13c8('0x25')](_0x55e5ba['query'][_0x13c8('0x25')]);}return _0x4f2972['getSubjects'](_0x1531d9);}})[_0x13c8('0x2b')](function(_0x260139){if(_0x260139){return _0x260139?{'count':_0x16b409,'rows':_0x260139}:null;}})[_0x13c8('0x2b')](respondWithResult(_0xcc921,null))['catch'](handleError(_0xcc921,null));};exports[_0x13c8('0x55')]=function(_0x565c8f,_0x492053,_0x1be04d){var _0x2c523c={};var _0x1706e5={};var _0x1e3097;var _0x4d6477;return db['DeskConfiguration'][_0x13c8('0x51')]({'where':{'id':_0x565c8f['params']['id']}})['then'](handleEntityNotFound(_0x492053,null))[_0x13c8('0x2b')](function(_0x18e10a){if(_0x18e10a){_0x1e3097=_0x18e10a;_0x1706e5[_0x13c8('0x31')]=_[_0x13c8('0x32')](db['DeskField'][_0x13c8('0x4b')]);_0x1706e5['query']=_['keys'](_0x565c8f[_0x13c8('0x33')]);_0x1706e5[_0x13c8('0x34')]=_[_0x13c8('0x36')](_0x1706e5[_0x13c8('0x31')],_0x1706e5[_0x13c8('0x33')]);_0x2c523c['attributes']=_[_0x13c8('0x36')](_0x1706e5['model'],qs[_0x13c8('0x37')](_0x565c8f['query']['fields']));_0x2c523c[_0x13c8('0x35')]=_0x2c523c['attributes'][_0x13c8('0x38')]?_0x2c523c[_0x13c8('0x35')]:_0x1706e5['model'];_0x2c523c[_0x13c8('0x3b')]=qs[_0x13c8('0x3c')](_0x565c8f[_0x13c8('0x33')][_0x13c8('0x3c')]);_0x2c523c[_0x13c8('0x3d')]=qs['filters'](_[_0x13c8('0x3e')](_0x565c8f[_0x13c8('0x33')],_0x1706e5[_0x13c8('0x34')]));if(_0x565c8f[_0x13c8('0x33')][_0x13c8('0x3f')]){_0x2c523c['where']=_['merge'](_0x2c523c[_0x13c8('0x3d')],{'$or':_[_0x13c8('0x41')](_0x2c523c[_0x13c8('0x35')],function(_0x249c1f){var _0x2c3ecd={};_0x2c3ecd[_0x249c1f]={'$like':'%'+_0x565c8f[_0x13c8('0x33')][_0x13c8('0x3f')]+'%'};return _0x2c3ecd;})});}_0x2c523c=_[_0x13c8('0x40')]({},_0x2c523c,_0x565c8f[_0x13c8('0x46')]);return _0x1e3097[_0x13c8('0x55')](_0x2c523c);}})['then'](function(_0x5b7b2b){if(_0x5b7b2b){_0x4d6477=_0x5b7b2b[_0x13c8('0x38')];if(!_0x565c8f[_0x13c8('0x33')]['hasOwnProperty'](_0x13c8('0x3a'))){_0x2c523c[_0x13c8('0x26')]=qs[_0x13c8('0x26')](_0x565c8f[_0x13c8('0x33')]['limit']);_0x2c523c[_0x13c8('0x25')]=qs[_0x13c8('0x25')](_0x565c8f[_0x13c8('0x33')]['offset']);}return _0x1e3097[_0x13c8('0x55')](_0x2c523c);}})[_0x13c8('0x2b')](function(_0x14df84){if(_0x14df84){return _0x14df84?{'count':_0x4d6477,'rows':_0x14df84}:null;}})['then'](respondWithResult(_0x492053,null))[_0x13c8('0x22')](handleError(_0x492053,null));};exports[_0x13c8('0x56')]=function(_0x418138,_0x348e69,_0xcb9546){var _0x458b24={};var _0x5d78e0={};var _0x5111e5;var _0x4bf88d;return db['DeskConfiguration'][_0x13c8('0x51')]({'where':{'id':_0x418138[_0x13c8('0x4a')]['id']}})[_0x13c8('0x2b')](handleEntityNotFound(_0x348e69,null))[_0x13c8('0x2b')](function(_0x2a7836){if(_0x2a7836){_0x5111e5=_0x2a7836;_0x5d78e0[_0x13c8('0x31')]=_[_0x13c8('0x32')](db[_0x13c8('0x57')][_0x13c8('0x4b')]);_0x5d78e0[_0x13c8('0x33')]=_[_0x13c8('0x32')](_0x418138['query']);_0x5d78e0['filters']=_[_0x13c8('0x36')](_0x5d78e0[_0x13c8('0x31')],_0x5d78e0[_0x13c8('0x33')]);_0x458b24[_0x13c8('0x35')]=_['intersection'](_0x5d78e0[_0x13c8('0x31')],qs[_0x13c8('0x37')](_0x418138[_0x13c8('0x33')]['fields']));_0x458b24['attributes']=_0x458b24['attributes'][_0x13c8('0x38')]?_0x458b24[_0x13c8('0x35')]:_0x5d78e0[_0x13c8('0x31')];_0x458b24[_0x13c8('0x3b')]=qs[_0x13c8('0x3c')](_0x418138[_0x13c8('0x33')][_0x13c8('0x3c')]);_0x458b24[_0x13c8('0x3d')]=qs['filters'](_[_0x13c8('0x3e')](_0x418138['query'],_0x5d78e0['filters']));if(_0x418138[_0x13c8('0x33')][_0x13c8('0x3f')]){_0x458b24[_0x13c8('0x3d')]=_[_0x13c8('0x40')](_0x458b24['where'],{'$or':_[_0x13c8('0x41')](_0x458b24['attributes'],function(_0xbea6b5){var _0x2165c0={};_0x2165c0[_0xbea6b5]={'$like':'%'+_0x418138[_0x13c8('0x33')][_0x13c8('0x3f')]+'%'};return _0x2165c0;})});}_0x458b24=_['merge']({},_0x458b24,_0x418138[_0x13c8('0x46')]);return _0x5111e5['getTags'](_0x458b24);}})[_0x13c8('0x2b')](function(_0x23c48f){if(_0x23c48f){_0x4bf88d=_0x23c48f['length'];if(!_0x418138['query']['hasOwnProperty'](_0x13c8('0x3a'))){_0x458b24[_0x13c8('0x26')]=qs['limit'](_0x418138[_0x13c8('0x33')][_0x13c8('0x26')]);_0x458b24[_0x13c8('0x25')]=qs['offset'](_0x418138[_0x13c8('0x33')]['offset']);}return _0x5111e5['getTags'](_0x458b24);}})['then'](function(_0x430884){if(_0x430884){return _0x430884?{'count':_0x4bf88d,'rows':_0x430884}:null;}})[_0x13c8('0x2b')](respondWithResult(_0x348e69,null))[_0x13c8('0x22')](handleError(_0x348e69,null));};exports[_0x13c8('0x58')]=function(_0x1b682e,_0x18343f,_0x5f2117){if(_0x1b682e[_0x13c8('0x4f')]['id']){delete _0x1b682e['body']['id'];}return db['DeskConfiguration'][_0x13c8('0x51')]({'where':{'id':_0x1b682e['params']['id']}})[_0x13c8('0x2b')](handleEntityNotFound(_0x18343f,null))[_0x13c8('0x2b')](function(_0x5bd66a){if(_0x5bd66a){return _0x5bd66a[_0x13c8('0x58')](_0x1b682e[_0x13c8('0x4f')][_0x13c8('0x59')]||[]);}return null;})['then'](respondWithResult(_0x18343f,null))[_0x13c8('0x22')](handleError(_0x18343f,null));};
\ No newline at end of file
index 384ff9e..7880208 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x757a=['request-promise','./intDeskConfiguration.attributes','exports','define','int_desk_configurations','util','../../config/logger'];(function(_0xd29892,_0x2b67b9){var _0x293dfd=function(_0x22f177){while(--_0x22f177){_0xd29892['push'](_0xd29892['shift']());}};_0x293dfd(++_0x2b67b9);}(_0x757a,0xde));var _0xa757=function(_0x26b787,_0x119b37){_0x26b787=_0x26b787-0x0;var _0x2e1da9=_0x757a[_0x26b787];return _0x2e1da9;};'use strict';var _=require('lodash');var util=require(_0xa757('0x0'));var logger=require(_0xa757('0x1'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xa757('0x2'));var attributes=require(_0xa757('0x3'));module[_0xa757('0x4')]=function(_0x453d07,_0x32630d){return _0x453d07[_0xa757('0x5')]('DeskConfiguration',attributes,{'tableName':_0xa757('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4024=['int_desk_configurations','lodash','util','api','moment','request-promise','exports','DeskConfiguration'];(function(_0x5237fc,_0x122cf5){var _0x38bb43=function(_0x217936){while(--_0x217936){_0x5237fc['push'](_0x5237fc['shift']());}};_0x38bb43(++_0x122cf5);}(_0x4024,0x89));var _0x4402=function(_0x475aaf,_0x2a7a42){_0x475aaf=_0x475aaf-0x0;var _0x38f8c0=_0x4024[_0x475aaf];return _0x38f8c0;};'use strict';var _=require(_0x4402('0x0'));var util=require(_0x4402('0x1'));var logger=require('../../config/logger')(_0x4402('0x2'));var moment=require(_0x4402('0x3'));var BPromise=require('bluebird');var rp=require(_0x4402('0x4'));var attributes=require('./intDeskConfiguration.attributes');module[_0x4402('0x5')]=function(_0x117f90,_0x5bdb3f){return _0x117f90['define'](_0x4402('0x6'),attributes,{'tableName':_0x4402('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2cedbdf..f501202 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(_0x3df188,_0x235e71){var _0x66d152=function(_0x1bc0fe){while(--_0x1bc0fe){_0x3df188['push'](_0x3df188['shift']());}};_0x66d152(++_0x235e71);}(_0x8ef6,0xf2));var _0x68ef=function(_0x575b13,_0x1d838e){_0x575b13=_0x575b13-0x0;var _0x148428=_0x8ef6[_0x575b13];return _0x148428;};'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 _0xe14b=['../../config/environment','jayson/promise','client','http','then','info','DeskConfiguration,\x20%s,\x20%s','DeskConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','randomstring','ioredis','../../config/utils'];(function(_0xaa98a7,_0x2102c4){var _0x2ccafe=function(_0x515204){while(--_0x515204){_0xaa98a7['push'](_0xaa98a7['shift']());}};_0x2ccafe(++_0x2102c4);}(_0xe14b,0x93));var _0xbe14=function(_0x58efc0,_0x568a6b){_0x58efc0=_0x58efc0-0x0;var _0x4128de=_0xe14b[_0x58efc0];return _0x4128de;};'use strict';var _=require(_0xbe14('0x0'));var util=require(_0xbe14('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xbe14('0x2'));var fs=require('fs');var Redis=require(_0xbe14('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xbe14('0x4'));var logger=require('../../config/logger')('rpc');var config=require(_0xbe14('0x5'));var jayson=require(_0xbe14('0x6'));var client=jayson[_0xbe14('0x7')][_0xbe14('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x1d9ade,_0x39387e,_0x196fca){return new BPromise(function(_0x566ae7,_0x50f909){return client['request'](_0x1d9ade,_0x196fca)[_0xbe14('0x9')](function(_0x6fceff){logger[_0xbe14('0xa')](_0xbe14('0xb'),_0x39387e,'request\x20sent');logger['debug'](_0xbe14('0xc'),_0x39387e,_0xbe14('0xd'),JSON['stringify'](_0x6fceff));if(_0x6fceff[_0xbe14('0xe')]){if(_0x6fceff[_0xbe14('0xe')][_0xbe14('0xf')]===0x1f4){logger[_0xbe14('0xe')](_0xbe14('0xb'),_0x39387e,_0x6fceff[_0xbe14('0xe')][_0xbe14('0x10')]);return _0x50f909(_0x6fceff[_0xbe14('0xe')][_0xbe14('0x10')]);}logger[_0xbe14('0xe')](_0xbe14('0xb'),_0x39387e,_0x6fceff[_0xbe14('0xe')][_0xbe14('0x10')]);return _0x566ae7(_0x6fceff['error']['message']);}else{logger[_0xbe14('0xa')](_0xbe14('0xb'),_0x39387e,_0xbe14('0xd'));_0x566ae7(_0x6fceff[_0xbe14('0x11')]['message']);}})[_0xbe14('0x12')](function(_0xe9c3ec){logger[_0xbe14('0xe')](_0xbe14('0xb'),_0x39387e,_0xe9c3ec);_0x50f909(_0xe9c3ec);});});}
\ No newline at end of file
index 8d1b078..32bc3e5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x07f0=['update','delete','destroy','exports','multer','path','express','Router','../../components/auth/service','../../config/environment','./intDeskField.controller','isAuthenticated','index','get','post','create','put','/:id'];(function(_0x3cdfa6,_0xb57560){var _0xe9c43=function(_0x109cd9){while(--_0x109cd9){_0x3cdfa6['push'](_0x3cdfa6['shift']());}};_0xe9c43(++_0xb57560);}(_0x07f0,0x124));var _0x007f=function(_0x2272b5,_0x362458){_0x2272b5=_0x2272b5-0x0;var _0x110156=_0x07f0[_0x2272b5];return _0x110156;};'use strict';var multer=require(_0x007f('0x0'));var util=require('util');var path=require(_0x007f('0x1'));var timeout=require('connect-timeout');var express=require(_0x007f('0x2'));var router=express[_0x007f('0x3')]();var auth=require(_0x007f('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x007f('0x5'));var controller=require(_0x007f('0x6'));router['get']('/',auth[_0x007f('0x7')](),controller[_0x007f('0x8')]);router[_0x007f('0x9')]('/:id',auth[_0x007f('0x7')](),controller['show']);router[_0x007f('0xa')]('/',auth[_0x007f('0x7')](),controller[_0x007f('0xb')]);router[_0x007f('0xc')](_0x007f('0xd'),auth[_0x007f('0x7')](),controller[_0x007f('0xe')]);router[_0x007f('0xf')](_0x007f('0xd'),auth[_0x007f('0x7')](),controller[_0x007f('0x10')]);module[_0x007f('0x11')]=router;
\ No newline at end of file
+var _0x6984=['../../components/interaction/service','../../config/environment','./intDeskField.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x3e4588,_0x5d8486){var _0x3607e7=function(_0x43d068){while(--_0x43d068){_0x3e4588['push'](_0x3e4588['shift']());}};_0x3607e7(++_0x5d8486);}(_0x6984,0x1dd));var _0x4698=function(_0x3f1781,_0x81b6dc){_0x3f1781=_0x3f1781-0x0;var _0x54ae74=_0x6984[_0x3f1781];return _0x54ae74;};'use strict';var multer=require('multer');var util=require(_0x4698('0x0'));var path=require(_0x4698('0x1'));var timeout=require(_0x4698('0x2'));var express=require(_0x4698('0x3'));var router=express[_0x4698('0x4')]();var auth=require(_0x4698('0x5'));var interaction=require(_0x4698('0x6'));var config=require(_0x4698('0x7'));var controller=require(_0x4698('0x8'));router[_0x4698('0x9')]('/',auth[_0x4698('0xa')](),controller[_0x4698('0xb')]);router['get'](_0x4698('0xc'),auth[_0x4698('0xa')](),controller[_0x4698('0xd')]);router[_0x4698('0xe')]('/',auth[_0x4698('0xa')](),controller[_0x4698('0xf')]);router[_0x4698('0x10')](_0x4698('0xc'),auth[_0x4698('0xa')](),controller[_0x4698('0x11')]);router[_0x4698('0x12')](_0x4698('0xc'),auth['isAuthenticated'](),controller[_0x4698('0x13')]);module[_0x4698('0x14')]=router;
\ No newline at end of file
index 85e963e..30196a0 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(_0x15b098,_0x411704){var _0xb97b3a=function(_0x32c374){while(--_0x32c374){_0x15b098['push'](_0x15b098['shift']());}};_0xb97b3a(++_0x411704);}(_0x9c00,0x1a0));var _0x09c0=function(_0x993f24,_0x227b78){_0x993f24=_0x993f24-0x0;var _0x3064db=_0x9c00[_0x993f24];return _0x3064db;};'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(_0x4a2749,_0x1148ba){var _0x2837f3=function(_0x4c0244){while(--_0x4c0244){_0x4a2749['push'](_0x4a2749['shift']());}};_0x2837f3(++_0x1148ba);}(_0x6e6c,0xc3));var _0xc6e6=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x6e6c[_0x501510];return _0x1e6ee5;};'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 c9d2849..29a4a20 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['fields','length','nolimit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','options','includeAll','include','catch','show','params','find','create','body','update','destroy','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','error','stack','send','index','DeskField','rawAttributes','model','keys','query','filters','attributes','intersection'];(function(_0x2aaf95,_0x4aff14){var _0x2b9a5d=function(_0x223dfa){while(--_0x223dfa){_0x2aaf95['push'](_0x2aaf95['shift']());}};_0x2b9a5d(++_0x4aff14);}(_0xa9e0,0x123));var _0x0a9e=function(_0x1c546c,_0x5c57cb){_0x1c546c=_0x1c546c-0x0;var _0x2cc384=_0xa9e0[_0x1c546c];return _0x2cc384;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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['DeskField'][_0x0a9e('0x17')](_0x381c37)[_0x0a9e('0x1f')](function(_0x3cae){_0x45a1e7['count']=_0x3cae;if(_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x384319[_0x0a9e('0x3a')]=[{'all':!![]}];}return db['DeskField']['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['DeskField'][_0x0a9e('0x3e')]({'where':{'id':_0x21eb86[_0x0a9e('0x3d')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x44dd99,null))['then'](saveUpdates(_0x21eb86[_0x0a9e('0x40')],null))[_0x0a9e('0x1f')](respondWithResult(_0x44dd99,null))[_0x0a9e('0x3b')](handleError(_0x44dd99,null));};exports[_0x0a9e('0x42')]=function(_0x45c845,_0x37be73){return db[_0x0a9e('0x24')]['find']({'where':{'id':_0x45c845[_0x0a9e('0x3d')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x37be73,null))[_0x0a9e('0x1f')](removeEntity(_0x37be73,null))[_0x0a9e('0x3b')](handleError(_0x37be73,null));};
\ No newline at end of file
+var _0x34e8=['request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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','DeskField','includeAll','findAll','rows','catch','show','rawAttributes','include','find','create','body','params','destroy','html-pdf','eml-format','rimraf','zip-dir'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0x34e8,0x12c));var _0x834e=function(_0x5d1443,_0x181210){_0x5d1443=_0x5d1443-0x0;var _0x254178=_0x34e8[_0x5d1443];return _0x254178;};'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 authService=require(_0x834e('0x13'));var hardwareService=require(_0x834e('0x14'));var Redis=require(_0x834e('0x15'));var qs=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['DeskField']['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']=[{'all':!![]}];}return db[_0x834e('0x3f')][_0x834e('0x41')](_0x3db026);})[_0x834e('0x28')](function(_0x3c59af){_0x3cd928[_0x834e('0x42')]=_0x3c59af;return _0x3cd928;})['then'](respondWithFilteredResult(_0x3f1b0b,_0x3db026))[_0x834e('0x43')](handleError(_0x3f1b0b,null));};exports[_0x834e('0x44')]=function(_0x38f266,_0x58c5fb){var _0x35380e={'raw':!![],'where':{'id':_0x38f266['params']['id']}},_0x16ac45={};_0x16ac45[_0x834e('0x2f')]=_['keys'](db[_0x834e('0x3f')][_0x834e('0x45')]);_0x16ac45['query']=_['keys'](_0x38f266[_0x834e('0x2c')]);_0x16ac45[_0x834e('0x38')]=_[_0x834e('0x2e')](_0x16ac45[_0x834e('0x2f')],_0x16ac45[_0x834e('0x2c')]);_0x35380e[_0x834e('0x30')]=_[_0x834e('0x2e')](_0x16ac45['model'],qs[_0x834e('0x31')](_0x38f266['query'][_0x834e('0x31')]));_0x35380e['attributes']=_0x35380e[_0x834e('0x30')]['length']?_0x35380e[_0x834e('0x30')]:_0x16ac45[_0x834e('0x2f')];if(_0x38f266['query'][_0x834e('0x40')]){_0x35380e[_0x834e('0x46')]=[{'all':!![]}];}_0x35380e=_[_0x834e('0x3a')]({},_0x35380e,_0x38f266[_0x834e('0x3e')]);return db[_0x834e('0x3f')][_0x834e('0x47')](_0x35380e)[_0x834e('0x28')](handleEntityNotFound(_0x58c5fb,null))[_0x834e('0x28')](respondWithResult(_0x58c5fb,null))[_0x834e('0x43')](handleError(_0x58c5fb,null));};exports[_0x834e('0x48')]=function(_0x5f3943,_0x3124be){return db[_0x834e('0x3f')]['create'](_0x5f3943[_0x834e('0x49')],{})[_0x834e('0x28')](respondWithResult(_0x3124be,0xc9))[_0x834e('0x43')](handleError(_0x3124be,null));};exports[_0x834e('0x27')]=function(_0x19b5ef,_0x4264b8){if(_0x19b5ef['body']['id']){delete _0x19b5ef['body']['id'];}return db[_0x834e('0x3f')][_0x834e('0x47')]({'where':{'id':_0x19b5ef[_0x834e('0x4a')]['id']}})[_0x834e('0x28')](handleEntityNotFound(_0x4264b8,null))[_0x834e('0x28')](saveUpdates(_0x19b5ef[_0x834e('0x49')],null))[_0x834e('0x28')](respondWithResult(_0x4264b8,null))[_0x834e('0x43')](handleError(_0x4264b8,null));};exports[_0x834e('0x4b')]=function(_0x390c45,_0xf02f0d){return db[_0x834e('0x3f')][_0x834e('0x47')]({'where':{'id':_0x390c45[_0x834e('0x4a')]['id']}})[_0x834e('0x28')](handleEntityNotFound(_0xf02f0d,null))[_0x834e('0x28')](removeEntity(_0xf02f0d,null))[_0x834e('0x43')](handleError(_0xf02f0d,null));};
\ No newline at end of file
index 933cb6f..66b862a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9d6d=['define','int_desk_fields','desk_unique_index','idField','lodash','util','api','moment','bluebird','request-promise','exports'];(function(_0x3eabfe,_0x487612){var _0x3c94eb=function(_0x2e070b){while(--_0x2e070b){_0x3eabfe['push'](_0x3eabfe['shift']());}};_0x3c94eb(++_0x487612);}(_0x9d6d,0x19b));var _0xd9d6=function(_0x5ddb1c,_0x5ea4df){_0x5ddb1c=_0x5ddb1c-0x0;var _0x354adc=_0x9d6d[_0x5ddb1c];return _0x354adc;};'use strict';var _=require(_0xd9d6('0x0'));var util=require(_0xd9d6('0x1'));var logger=require('../../config/logger')(_0xd9d6('0x2'));var moment=require(_0xd9d6('0x3'));var BPromise=require(_0xd9d6('0x4'));var rp=require(_0xd9d6('0x5'));var attributes=require('./intDeskField.attributes');module[_0xd9d6('0x6')]=function(_0xd97ebd,_0x294cdb){return _0xd97ebd[_0xd9d6('0x7')]('DeskField',attributes,{'tableName':_0xd9d6('0x8'),'paranoid':![],'indexes':[{'name':_0xd9d6('0x9'),'fields':[_0xd9d6('0xa'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xdac4=['../../config/logger','api','moment','request-promise','./intDeskField.attributes','define','int_desk_fields','desk_unique_index','idField','FieldId','lodash','util'];(function(_0x313e8c,_0x5917e5){var _0xc051d5=function(_0x151646){while(--_0x151646){_0x313e8c['push'](_0x313e8c['shift']());}};_0xc051d5(++_0x5917e5);}(_0xdac4,0x14e));var _0x4dac=function(_0x403fc7,_0x32931a){_0x403fc7=_0x403fc7-0x0;var _0x5d0827=_0xdac4[_0x403fc7];return _0x5d0827;};'use strict';var _=require(_0x4dac('0x0'));var util=require(_0x4dac('0x1'));var logger=require(_0x4dac('0x2'))(_0x4dac('0x3'));var moment=require(_0x4dac('0x4'));var BPromise=require('bluebird');var rp=require(_0x4dac('0x5'));var attributes=require(_0x4dac('0x6'));module['exports']=function(_0x3326c0,_0x2f5edf){return _0x3326c0[_0x4dac('0x7')]('DeskField',attributes,{'tableName':_0x4dac('0x8'),'paranoid':![],'indexes':[{'name':_0x4dac('0x9'),'fields':[_0x4dac('0xa'),_0x4dac('0xb')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 312d867..77ff360 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a9a=['DeskField,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','result','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','request','then'];(function(_0x1e9e56,_0x34a74a){var _0x5d5e2e=function(_0x4bfcc2){while(--_0x4bfcc2){_0x1e9e56['push'](_0x1e9e56['shift']());}};_0x5d5e2e(++_0x34a74a);}(_0x0a9a,0x183));var _0xa0a9=function(_0x491d9a,_0x86eb39){_0x491d9a=_0x491d9a-0x0;var _0x1ac2f4=_0x0a9a[_0x491d9a];return _0x1ac2f4;};'use strict';var _=require('lodash');var util=require(_0xa0a9('0x0'));var moment=require('moment');var BPromise=require(_0xa0a9('0x1'));var rs=require(_0xa0a9('0x2'));var fs=require('fs');var Redis=require(_0xa0a9('0x3'));var db=require(_0xa0a9('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xa0a9('0x5'))(_0xa0a9('0x6'));var config=require('../../config/environment');var jayson=require(_0xa0a9('0x7'));var client=jayson[_0xa0a9('0x8')][_0xa0a9('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x31d689,_0x499a29,_0x2b2eb4){return new BPromise(function(_0x520f42,_0x10aa8a){return client[_0xa0a9('0xa')](_0x31d689,_0x2b2eb4)[_0xa0a9('0xb')](function(_0x2d6ac0){logger['info'](_0xa0a9('0xc'),_0x499a29,_0xa0a9('0xd'));logger['debug']('DeskField,\x20%s,\x20%s,\x20%s',_0x499a29,_0xa0a9('0xd'),JSON[_0xa0a9('0xe')](_0x2d6ac0));if(_0x2d6ac0['error']){if(_0x2d6ac0[_0xa0a9('0xf')]['code']===0x1f4){logger[_0xa0a9('0xf')]('DeskField,\x20%s,\x20%s',_0x499a29,_0x2d6ac0[_0xa0a9('0xf')][_0xa0a9('0x10')]);return _0x10aa8a(_0x2d6ac0[_0xa0a9('0xf')][_0xa0a9('0x10')]);}logger[_0xa0a9('0xf')]('DeskField,\x20%s,\x20%s',_0x499a29,_0x2d6ac0[_0xa0a9('0xf')][_0xa0a9('0x10')]);return _0x520f42(_0x2d6ac0[_0xa0a9('0xf')][_0xa0a9('0x10')]);}else{logger[_0xa0a9('0x11')](_0xa0a9('0xc'),_0x499a29,'request\x20sent');_0x520f42(_0x2d6ac0[_0xa0a9('0x12')]['message']);}})['catch'](function(_0x347092){logger[_0xa0a9('0xf')](_0xa0a9('0xc'),_0x499a29,_0x347092);_0x10aa8a(_0x347092);});});}
\ No newline at end of file
+var _0xa75b=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','DeskField,\x20%s,\x20%s','request\x20sent','debug','DeskField,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x554e4b,_0x177875){var _0xbc5d18=function(_0x566096){while(--_0x566096){_0x554e4b['push'](_0x554e4b['shift']());}};_0xbc5d18(++_0x177875);}(_0xa75b,0x170));var _0xba75=function(_0xac68,_0x779d4c){_0xac68=_0xac68-0x0;var _0x3bcb18=_0xa75b[_0xac68];return _0x3bcb18;};'use strict';var _=require(_0xba75('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xba75('0x1'));var rs=require(_0xba75('0x2'));var fs=require('fs');var Redis=require(_0xba75('0x3'));var db=require(_0xba75('0x4'))['db'];var utils=require(_0xba75('0x5'));var logger=require(_0xba75('0x6'))(_0xba75('0x7'));var config=require(_0xba75('0x8'));var jayson=require(_0xba75('0x9'));var client=jayson[_0xba75('0xa')][_0xba75('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x238a33,_0x3ccab5,_0x5c79e3){return new BPromise(function(_0x4b842d,_0x731cae){return client['request'](_0x238a33,_0x5c79e3)['then'](function(_0x218dbd){logger['info'](_0xba75('0xc'),_0x3ccab5,_0xba75('0xd'));logger[_0xba75('0xe')](_0xba75('0xf'),_0x3ccab5,_0xba75('0xd'),JSON[_0xba75('0x10')](_0x218dbd));if(_0x218dbd[_0xba75('0x11')]){if(_0x218dbd[_0xba75('0x11')][_0xba75('0x12')]===0x1f4){logger[_0xba75('0x11')](_0xba75('0xc'),_0x3ccab5,_0x218dbd[_0xba75('0x11')]['message']);return _0x731cae(_0x218dbd['error'][_0xba75('0x13')]);}logger['error'](_0xba75('0xc'),_0x3ccab5,_0x218dbd[_0xba75('0x11')][_0xba75('0x13')]);return _0x4b842d(_0x218dbd[_0xba75('0x11')]['message']);}else{logger[_0xba75('0x14')](_0xba75('0xc'),_0x3ccab5,_0xba75('0xd'));_0x4b842d(_0x218dbd[_0xba75('0x15')][_0xba75('0x13')]);}})['catch'](function(_0x350a9d){logger[_0xba75('0x11')](_0xba75('0xc'),_0x3ccab5,_0x350a9d);_0x731cae(_0x350a9d);});});}
\ No newline at end of file
index 8eaf0b3..ce6d7b8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8983=['index','get','/:id/configurations','getConfigurations','/:id/fields','post','create','addConfiguration','put','update','delete','/:id','destroy','multer','Router','../../components/auth/service','../../config/environment','isAuthenticated'];(function(_0x35890f,_0x1322ad){var _0x55ab49=function(_0x2ed8c1){while(--_0x2ed8c1){_0x35890f['push'](_0x35890f['shift']());}};_0x55ab49(++_0x1322ad);}(_0x8983,0x109));var _0x3898=function(_0x35899c,_0x4fe3df){_0x35899c=_0x35899c-0x0;var _0x2db7c7=_0x8983[_0x35899c];return _0x2db7c7;};'use strict';var multer=require(_0x3898('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require('express');var router=express[_0x3898('0x1')]();var auth=require(_0x3898('0x2'));var interaction=require('../../components/interaction/service');var config=require(_0x3898('0x3'));var controller=require('./intDynamics365Account.controller');router['get']('/',auth[_0x3898('0x4')](),controller[_0x3898('0x5')]);router[_0x3898('0x6')]('/:id',auth['isAuthenticated'](),controller['show']);router['get'](_0x3898('0x7'),auth[_0x3898('0x4')](),controller[_0x3898('0x8')]);router[_0x3898('0x6')](_0x3898('0x9'),auth[_0x3898('0x4')](),controller['getFields']);router[_0x3898('0xa')]('/',auth[_0x3898('0x4')](),controller[_0x3898('0xb')]);router[_0x3898('0xa')](_0x3898('0x7'),auth[_0x3898('0x4')](),controller[_0x3898('0xc')]);router[_0x3898('0xd')]('/:id',auth[_0x3898('0x4')](),controller[_0x3898('0xe')]);router[_0x3898('0xf')](_0x3898('0x10'),auth['isAuthenticated'](),controller[_0x3898('0x11')]);module['exports']=router;
\ No newline at end of file
+var _0xd853=['multer','util','path','connect-timeout','../../components/interaction/service','../../config/environment','./intDynamics365Account.controller','get','index','/:id','isAuthenticated','show','/:id/configurations','getConfigurations','/:id/fields','post','create','addConfiguration','delete','destroy','exports'];(function(_0x44bcb0,_0x235aa9){var _0xfaf881=function(_0x25d81d){while(--_0x25d81d){_0x44bcb0['push'](_0x44bcb0['shift']());}};_0xfaf881(++_0x235aa9);}(_0xd853,0xe7));var _0x3d85=function(_0x1d99a1,_0x2baa4b){_0x1d99a1=_0x1d99a1-0x0;var _0x46571b=_0xd853[_0x1d99a1];return _0x46571b;};'use strict';var multer=require(_0x3d85('0x0'));var util=require(_0x3d85('0x1'));var path=require(_0x3d85('0x2'));var timeout=require(_0x3d85('0x3'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x3d85('0x4'));var config=require(_0x3d85('0x5'));var controller=require(_0x3d85('0x6'));router[_0x3d85('0x7')]('/',auth['isAuthenticated'](),controller[_0x3d85('0x8')]);router[_0x3d85('0x7')](_0x3d85('0x9'),auth[_0x3d85('0xa')](),controller[_0x3d85('0xb')]);router[_0x3d85('0x7')](_0x3d85('0xc'),auth[_0x3d85('0xa')](),controller[_0x3d85('0xd')]);router['get'](_0x3d85('0xe'),auth[_0x3d85('0xa')](),controller['getFields']);router[_0x3d85('0xf')]('/',auth['isAuthenticated'](),controller[_0x3d85('0x10')]);router['post'](_0x3d85('0xc'),auth[_0x3d85('0xa')](),controller[_0x3d85('0x11')]);router['put'](_0x3d85('0x9'),auth[_0x3d85('0xa')](),controller['update']);router[_0x3d85('0x12')](_0x3d85('0x9'),auth['isAuthenticated'](),controller[_0x3d85('0x13')]);module[_0x3d85('0x14')]=router;
\ No newline at end of file
index 867d63a..e85c796 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa26a=['STRING','exports'];(function(_0x3e78e5,_0x5c2709){var _0xed042=function(_0x5c587a){while(--_0x5c587a){_0x3e78e5['push'](_0x3e78e5['shift']());}};_0xed042(++_0x5c2709);}(_0xa26a,0x103));var _0xaa26=function(_0x4bde05,_0x57cda7){_0x4bde05=_0x4bde05-0x0;var _0x282c7f=_0xa26a[_0x4bde05];return _0x282c7f;};'use strict';var Sequelize=require('sequelize');module[_0xaa26('0x0')]={'name':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0xaa26('0x1')]},'password':{'type':Sequelize[_0xaa26('0x1')]},'remoteUri':{'type':Sequelize[_0xaa26('0x1')]},'tenantId':{'type':Sequelize['STRING']},'clientId':{'type':Sequelize[_0xaa26('0x1')]},'clientSecret':{'type':Sequelize[_0xaa26('0x1')]},'serverUrl':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xaa26('0x1')]}};
\ No newline at end of file
+var _0xc53f=['exports','STRING','sequelize'];(function(_0x4d2ed7,_0x1999e5){var _0x12af27=function(_0x28e2d4){while(--_0x28e2d4){_0x4d2ed7['push'](_0x4d2ed7['shift']());}};_0x12af27(++_0x1999e5);}(_0xc53f,0xc2));var _0xfc53=function(_0x521929,_0x479be5){_0x521929=_0x521929-0x0;var _0x632436=_0xc53f[_0x521929];return _0x632436;};'use strict';var Sequelize=require(_0xfc53('0x0'));module[_0xfc53('0x1')]={'name':{'type':Sequelize[_0xfc53('0x2')]},'username':{'type':Sequelize[_0xfc53('0x2')]},'password':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0xfc53('0x2')]},'tenantId':{'type':Sequelize[_0xfc53('0x2')]},'clientId':{'type':Sequelize[_0xfc53('0x2')]},'clientSecret':{'type':Sequelize['STRING']},'serverUrl':{'type':Sequelize[_0xfc53('0x2')]},'description':{'type':Sequelize[_0xfc53('0x2')]}};
\ No newline at end of file
index edb740d..86cfff1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb230=['customeridtype','customeridyominame','emailaddress','entityimage_timestamp','entityimage_url','escalatedon','exchangerate','firstresponsebykpiidname','followupby','importsequencenumber','influencescore','kbarticleidname','lastonholdtime','modifiedbyexternalpartyname','modifiedbyexternalpartyyominame','modifiedbyname','modifiedbyyominame','modifiedon','modifiedonbehalfbyname','modifiedonbehalfbyyominame','msdyn_incidenttypename','msdyn_iotalertname','numberofchildincidents','onholdtime','overriddencreatedon','owneridtype','parentcaseidname','primarycontactidyominame','productidname','productserialnumber','resolveby','responseby','responsiblecontactidyominame','sentimentvalue','slainvokedidname','slaname','statecode','ticketnumber','transactioncurrencyidname','traversedpath','versionnumber','concat','username','remoteUri','tenantId','clientId','clientSecret','slice','substring','lastIndexOf','POST','/oauth2/token','password','access_token','GET','EntityDefinitions?$select=DisplayName,EntitySetName&$filter=SchemaName\x20eq\x20\x27','4.0','MetadataId',')?$select=LogicalName&$expand=Attributes($select=LogicalName)','Bearer\x20','Attributes','remove','LogicalName','forEach','@odata.type','PicklistAttributeMetadata','push','all','StringAttributeMetadata','DoubleAttributeMetadata','BigIntAttributeMetadata','MemoAttributeMetadata','EntityNameAttributeMetadata','StateAttributeMetadata','DecimalAttributeMetadata','log','Dynamics365\x20error:\x20','test','statusCode','send','EntityDefinitions(',')/Attributes(','OptionSet','Label','UserLocalizedLabel','Value','DisplayName',')/Microsoft.Dynamics.CRM.BooleanAttributeMetadata?$select=DisplayName,LogicalName&$expand=OptionSet($select=FalseOption,\x20TrueOption)','true','FalseOption',')/Microsoft.Dynamics.CRM.','?$select=DisplayName,LogicalName','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','mustache','util','to-csv','ejs','lodash','squel','crypto','desk.js','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../components/integrations/configuration','jayson/promise','client','then','info','Dynamics365Account,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Account,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','status','end','json','offset','set','Content-Range','apply','reject','save','update','destroy','sendStatus','stack','name','Dynamics365Account','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','pick','filter','where','merge','map','type','key','field','options','count','includeAll','include','findAll','rows','show','params','find','create','body','getConfigurations','findOne','nolimit','addConfiguration','AccountId','Subjects','getSubjects','Descriptions','getDescriptions','channel','Dynamics365Configuration','Dynamics365Field','ticketType','incident','Incident','title','customerid','caseorigincode','subject','phonenumber','regardingobjectid','directioncode','phonecall_activity_parties','accountidname','accountidyominame','actualserviceunits','contactidname','contactidyominame','contractidname','createdbyexternalpartyyominame','createdbyname','createdbyyominame','createdon','createdonbehalfbyname','createdonbehalfbyyominame','customeridname'];(function(_0x169e4d,_0x30785e){var _0x210fd6=function(_0x5062f0){while(--_0x5062f0){_0x169e4d['push'](_0x169e4d['shift']());}};_0x210fd6(++_0x30785e);}(_0xb230,0x12e));var _0x0b23=function(_0x76842b,_0x82481d){_0x76842b=_0x76842b-0x0;var _0x113540=_0xb230[_0x76842b];return _0x113540;};'use strict';var pdf=require(_0x0b23('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x0b23('0x1'));var zipdir=require(_0x0b23('0x2'));var jsonpatch=require(_0x0b23('0x3'));var rp=require(_0x0b23('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x0b23('0x5'));var util=require(_0x0b23('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0x0b23('0x7'));var ejs=require(_0x0b23('0x8'));var fs=require('fs');var _=require(_0x0b23('0x9'));var squel=require(_0x0b23('0xa'));var crypto=require(_0x0b23('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x0b23('0xc'));var toCsv=require(_0x0b23('0x7'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x0b23('0xd'));var hardwareService=require(_0x0b23('0xe'));var Redis=require(_0x0b23('0xf'));var qs=require(_0x0b23('0x10'));var logger=require(_0x0b23('0x11'))(_0x0b23('0x12'));var utils=require(_0x0b23('0x13'));var config=require(_0x0b23('0x14'));var db=require('../../mysqldb')['db'];var integrations=require(_0x0b23('0x15'));var jayson=require(_0x0b23('0x16'));var client=jayson[_0x0b23('0x17')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4ee36a,_0x21bf8c,_0x2172e6,_0xdc10b6){return new BPromise(function(_0x4a8aee,_0x13af32){var _0x347746=_0xdc10b6||client;return _0x347746['request'](_0x4ee36a,_0x2172e6)[_0x0b23('0x18')](function(_0x45a6e5){logger[_0x0b23('0x19')](_0x0b23('0x1a'),_0x21bf8c,_0x0b23('0x1b'));logger[_0x0b23('0x1c')](_0x0b23('0x1d'),_0x21bf8c,_0x0b23('0x1b'),JSON['stringify'](_0x45a6e5));if(_0x45a6e5['error']){if(_0x45a6e5[_0x0b23('0x1e')][_0x0b23('0x1f')]===0x1f4){logger[_0x0b23('0x1e')](_0x0b23('0x1a'),_0x21bf8c,_0x45a6e5[_0x0b23('0x1e')][_0x0b23('0x20')]);return _0x13af32(_0x45a6e5[_0x0b23('0x1e')]['message']);}logger[_0x0b23('0x1e')](_0x0b23('0x1a'),_0x21bf8c,_0x45a6e5[_0x0b23('0x1e')][_0x0b23('0x20')]);return _0x4a8aee(_0x45a6e5[_0x0b23('0x1e')][_0x0b23('0x20')]);}else{logger[_0x0b23('0x19')]('Dynamics365Account,\x20%s,\x20%s',_0x21bf8c,'request\x20sent');_0x4a8aee(_0x45a6e5[_0x0b23('0x21')][_0x0b23('0x20')]);}})[_0x0b23('0x22')](function(_0x2f89a0){logger['error'](_0x0b23('0x1a'),_0x21bf8c,_0x2f89a0);_0x13af32(_0x2f89a0);});});}function respondWithStatusCode(_0x12f367,_0x340a66){_0x340a66=_0x340a66||0xcc;return function(_0x4619d0){if(_0x4619d0){return _0x12f367['sendStatus'](_0x340a66);}return _0x12f367[_0x0b23('0x23')](_0x340a66)[_0x0b23('0x24')]();};}function respondWithResult(_0x146038,_0xc4d72e){_0xc4d72e=_0xc4d72e||0xc8;return function(_0x2efbdb){if(_0x2efbdb){return _0x146038['status'](_0xc4d72e)[_0x0b23('0x25')](_0x2efbdb);}};}function respondWithFilteredResult(_0xd45cfb,_0xb13c6e){return function(_0x165991){if(_0x165991){var _0x54ad87=_0x165991['count'],_0x2bf72d=_0xb13c6e[_0x0b23('0x26')],_0x3711aa=_0xb13c6e[_0x0b23('0x26')]+_0xb13c6e['limit'],_0x2cab2b;if(_0x3711aa>=_0x54ad87){_0x3711aa=_0x54ad87;_0x2cab2b=0xc8;}else{_0x2cab2b=0xce;}_0xd45cfb[_0x0b23('0x23')](_0x2cab2b);return _0xd45cfb[_0x0b23('0x27')](_0x0b23('0x28'),_0x2bf72d+'-'+_0x3711aa+'/'+_0x54ad87)['json'](_0x165991);}return null;};}function patchUpdates(_0x538e82){return function(_0x3d25f0){try{jsonpatch[_0x0b23('0x29')](_0x3d25f0,_0x538e82,!![]);}catch(_0x2109c6){return BPromise[_0x0b23('0x2a')](_0x2109c6);}return _0x3d25f0[_0x0b23('0x2b')]();};}function saveUpdates(_0x2970bb,_0x2f7eff){return function(_0x3d778b){if(_0x3d778b){return _0x3d778b[_0x0b23('0x2c')](_0x2970bb)[_0x0b23('0x18')](function(_0x411a35){return _0x411a35;});}return null;};}function removeEntity(_0x418636,_0x14bae5){return function(_0x2a2888){if(_0x2a2888){return _0x2a2888[_0x0b23('0x2d')]()[_0x0b23('0x18')](function(){_0x418636['status'](0xcc)[_0x0b23('0x24')]();});}};}function handleEntityNotFound(_0x2a0dac,_0x4d293b){return function(_0x14ffa4){if(!_0x14ffa4){_0x2a0dac[_0x0b23('0x2e')](0x194);}return _0x14ffa4;};}function handleError(_0x34830d,_0x4e09da){_0x4e09da=_0x4e09da||0x1f4;return function(_0x3ca44f){logger[_0x0b23('0x1e')](_0x3ca44f[_0x0b23('0x2f')]);if(_0x3ca44f[_0x0b23('0x30')]){delete _0x3ca44f[_0x0b23('0x30')];}_0x34830d[_0x0b23('0x23')](_0x4e09da)['send'](_0x3ca44f);};}exports['index']=function(_0x349dad,_0x5c7bf2){var _0xb416d0={},_0x76a53a={},_0x3fefb0={'count':0x0,'rows':[]};var _0x160915=db[_0x0b23('0x31')][_0x0b23('0x32')];_0x76a53a[_0x0b23('0x33')]=_[_0x0b23('0x34')](_0x160915);_0x76a53a[_0x0b23('0x35')]=_[_0x0b23('0x34')](_0x349dad['query']);_0x76a53a[_0x0b23('0x36')]=_[_0x0b23('0x37')](_0x76a53a[_0x0b23('0x33')],_0x76a53a[_0x0b23('0x35')]);_0xb416d0[_0x0b23('0x38')]=_[_0x0b23('0x37')](_0x76a53a[_0x0b23('0x33')],qs[_0x0b23('0x39')](_0x349dad[_0x0b23('0x35')][_0x0b23('0x39')]));_0xb416d0[_0x0b23('0x38')]=_0xb416d0[_0x0b23('0x38')][_0x0b23('0x3a')]?_0xb416d0[_0x0b23('0x38')]:_0x76a53a[_0x0b23('0x33')];if(!_0x349dad[_0x0b23('0x35')][_0x0b23('0x3b')]('nolimit')){_0xb416d0[_0x0b23('0x3c')]=qs[_0x0b23('0x3c')](_0x349dad[_0x0b23('0x35')][_0x0b23('0x3c')]);_0xb416d0['offset']=qs[_0x0b23('0x26')](_0x349dad['query'][_0x0b23('0x26')]);}_0xb416d0[_0x0b23('0x3d')]=qs['sort'](_0x349dad[_0x0b23('0x35')][_0x0b23('0x3e')]);_0xb416d0['where']=qs['filters'](_[_0x0b23('0x3f')](_0x349dad[_0x0b23('0x35')],_0x76a53a[_0x0b23('0x36')]));if(_0x349dad['query'][_0x0b23('0x40')]){_0xb416d0[_0x0b23('0x41')]=_[_0x0b23('0x42')](_0xb416d0[_0x0b23('0x41')],{'$or':_[_0x0b23('0x43')](_0x160915,function(_0x97ae0b){if(_0x97ae0b[_0x0b23('0x44')][_0x0b23('0x45')]!=='VIRTUAL'){var _0x158ac1={};_0x158ac1[_0x97ae0b[_0x0b23('0x46')]]={'$like':'%'+_0x349dad[_0x0b23('0x35')][_0x0b23('0x40')]+'%'};return _0x158ac1;}})});}_0xb416d0=_[_0x0b23('0x42')]({},_0xb416d0,_0x349dad[_0x0b23('0x47')]);var _0x5a3d65={'where':_0xb416d0[_0x0b23('0x41')]};return db[_0x0b23('0x31')][_0x0b23('0x48')](_0x5a3d65)[_0x0b23('0x18')](function(_0x158097){_0x3fefb0[_0x0b23('0x48')]=_0x158097;if(_0x349dad[_0x0b23('0x35')][_0x0b23('0x49')]){_0xb416d0[_0x0b23('0x4a')]=[{'all':!![]}];}return db[_0x0b23('0x31')][_0x0b23('0x4b')](_0xb416d0);})[_0x0b23('0x18')](function(_0x491ce6){_0x3fefb0[_0x0b23('0x4c')]=_0x491ce6;return _0x3fefb0;})['then'](respondWithFilteredResult(_0x5c7bf2,_0xb416d0))[_0x0b23('0x22')](handleError(_0x5c7bf2,null));};exports[_0x0b23('0x4d')]=function(_0x130736,_0x21d3b3){var _0x4c857e={'raw':![],'where':{'id':_0x130736[_0x0b23('0x4e')]['id']}},_0x2c01a6={};_0x2c01a6[_0x0b23('0x33')]=_[_0x0b23('0x34')](db[_0x0b23('0x31')]['rawAttributes']);_0x2c01a6['query']=_['keys'](_0x130736[_0x0b23('0x35')]);_0x2c01a6['filters']=_[_0x0b23('0x37')](_0x2c01a6['model'],_0x2c01a6[_0x0b23('0x35')]);_0x4c857e['attributes']=_[_0x0b23('0x37')](_0x2c01a6[_0x0b23('0x33')],qs[_0x0b23('0x39')](_0x130736[_0x0b23('0x35')]['fields']));_0x4c857e[_0x0b23('0x38')]=_0x4c857e['attributes'][_0x0b23('0x3a')]?_0x4c857e[_0x0b23('0x38')]:_0x2c01a6[_0x0b23('0x33')];if(_0x130736['query'][_0x0b23('0x49')]){_0x4c857e[_0x0b23('0x4a')]=[{'all':!![]}];}_0x4c857e=_[_0x0b23('0x42')]({},_0x4c857e,_0x130736[_0x0b23('0x47')]);return db[_0x0b23('0x31')][_0x0b23('0x4f')](_0x4c857e)[_0x0b23('0x18')](handleEntityNotFound(_0x21d3b3,null))[_0x0b23('0x18')](respondWithResult(_0x21d3b3,null))[_0x0b23('0x22')](handleError(_0x21d3b3,null));};exports[_0x0b23('0x50')]=function(_0x363d6d,_0x205895){return db['Dynamics365Account']['create'](_0x363d6d['body'],{})['then'](respondWithResult(_0x205895,0xc9))[_0x0b23('0x22')](handleError(_0x205895,null));};exports[_0x0b23('0x2c')]=function(_0x491fe3,_0xfcdf3c){if(_0x491fe3[_0x0b23('0x51')]['id']){delete _0x491fe3['body']['id'];}return db[_0x0b23('0x31')][_0x0b23('0x4f')]({'where':{'id':_0x491fe3[_0x0b23('0x4e')]['id']}})[_0x0b23('0x18')](handleEntityNotFound(_0xfcdf3c,null))[_0x0b23('0x18')](saveUpdates(_0x491fe3[_0x0b23('0x51')],null))[_0x0b23('0x18')](respondWithResult(_0xfcdf3c,null))['catch'](handleError(_0xfcdf3c,null));};exports['destroy']=function(_0x110889,_0x3715fd){return db[_0x0b23('0x31')][_0x0b23('0x4f')]({'where':{'id':_0x110889[_0x0b23('0x4e')]['id']}})[_0x0b23('0x18')](handleEntityNotFound(_0x3715fd,null))[_0x0b23('0x18')](removeEntity(_0x3715fd,null))[_0x0b23('0x22')](handleError(_0x3715fd,null));};exports[_0x0b23('0x52')]=function(_0x2fa66b,_0x150999,_0x5c2958){var _0x4a991a={};var _0x381c3d={};var _0x17fd2e;var _0x5ef41a;return db['Dynamics365Account'][_0x0b23('0x53')]({'where':{'id':_0x2fa66b[_0x0b23('0x4e')]['id']}})[_0x0b23('0x18')](handleEntityNotFound(_0x150999,null))['then'](function(_0x1f0712){if(_0x1f0712){_0x17fd2e=_0x1f0712;_0x381c3d[_0x0b23('0x33')]=_[_0x0b23('0x34')](db['Dynamics365Configuration'][_0x0b23('0x32')]);_0x381c3d[_0x0b23('0x35')]=_[_0x0b23('0x34')](_0x2fa66b[_0x0b23('0x35')]);_0x381c3d[_0x0b23('0x36')]=_[_0x0b23('0x37')](_0x381c3d['model'],_0x381c3d[_0x0b23('0x35')]);_0x4a991a[_0x0b23('0x38')]=_[_0x0b23('0x37')](_0x381c3d[_0x0b23('0x33')],qs[_0x0b23('0x39')](_0x2fa66b[_0x0b23('0x35')][_0x0b23('0x39')]));_0x4a991a[_0x0b23('0x38')]=_0x4a991a[_0x0b23('0x38')][_0x0b23('0x3a')]?_0x4a991a['attributes']:_0x381c3d[_0x0b23('0x33')];_0x4a991a[_0x0b23('0x3d')]=qs[_0x0b23('0x3e')](_0x2fa66b['query'][_0x0b23('0x3e')]);_0x4a991a['where']=qs['filters'](_['pick'](_0x2fa66b[_0x0b23('0x35')],_0x381c3d[_0x0b23('0x36')]));if(_0x2fa66b[_0x0b23('0x35')][_0x0b23('0x40')]){_0x4a991a[_0x0b23('0x41')]=_[_0x0b23('0x42')](_0x4a991a[_0x0b23('0x41')],{'$or':_[_0x0b23('0x43')](_0x4a991a[_0x0b23('0x38')],function(_0x1ed4a7){var _0x3c55eb={};_0x3c55eb[_0x1ed4a7]={'$like':'%'+_0x2fa66b['query'][_0x0b23('0x40')]+'%'};return _0x3c55eb;})});}_0x4a991a=_[_0x0b23('0x42')]({},_0x4a991a,_0x2fa66b[_0x0b23('0x47')]);return _0x17fd2e[_0x0b23('0x52')](_0x4a991a);}})[_0x0b23('0x18')](function(_0x296596){if(_0x296596){_0x5ef41a=_0x296596[_0x0b23('0x3a')];if(!_0x2fa66b[_0x0b23('0x35')]['hasOwnProperty'](_0x0b23('0x54'))){_0x4a991a[_0x0b23('0x3c')]=qs['limit'](_0x2fa66b[_0x0b23('0x35')]['limit']);_0x4a991a[_0x0b23('0x26')]=qs[_0x0b23('0x26')](_0x2fa66b[_0x0b23('0x35')]['offset']);}return _0x17fd2e[_0x0b23('0x52')](_0x4a991a);}})['then'](function(_0xa3c002){if(_0xa3c002){return _0xa3c002?{'count':_0x5ef41a,'rows':_0xa3c002}:null;}})['then'](respondWithResult(_0x150999,null))[_0x0b23('0x22')](handleError(_0x150999,null));};exports[_0x0b23('0x55')]=function(_0x3c5126,_0x71452d,_0x15aee5){if(_0x3c5126[_0x0b23('0x51')]['id']){delete _0x3c5126[_0x0b23('0x51')]['id'];}return db[_0x0b23('0x31')]['findOne']({'where':{'id':_0x3c5126['params']['id']}})[_0x0b23('0x18')](handleEntityNotFound(_0x71452d,null))[_0x0b23('0x18')](function(_0x2300bb){if(_0x2300bb){_0x3c5126[_0x0b23('0x51')][_0x0b23('0x56')]=_0x2300bb['id'];_0x3c5126[_0x0b23('0x51')][_0x0b23('0x57')]=integrations[_0x0b23('0x58')](_0x3c5126[_0x0b23('0x51')]['channel'],_0x3c5126['body'][_0x0b23('0x44')]);_0x3c5126[_0x0b23('0x51')][_0x0b23('0x59')]=integrations[_0x0b23('0x5a')](_0x3c5126[_0x0b23('0x51')][_0x0b23('0x5b')],_0x3c5126['body'][_0x0b23('0x44')]);return db[_0x0b23('0x5c')][_0x0b23('0x50')](_0x3c5126[_0x0b23('0x51')],{'include':[{'model':db[_0x0b23('0x5d')],'as':_0x0b23('0x57')},{'model':db[_0x0b23('0x5d')],'as':_0x0b23('0x59')}]});}return null;})[_0x0b23('0x18')](respondWithResult(_0x71452d,null))[_0x0b23('0x22')](handleError(_0x71452d,null));};exports['getFields']=function(_0x203879,_0x1f91a2,_0x2783aa){var _0x2f1038=_0x203879[_0x0b23('0x35')][_0x0b23('0x5e')];var _0x4652a9=_0x2f1038===_0x0b23('0x5f')?_0x0b23('0x60'):'PhoneCall';var _0x448a74='';var _0x1b0c70='';var _0xa12a45='';var _0x40160f='';var _0x9ca1b='';var _0x5f49e2='';var _0x5c095f='';var _0x332fd1='';var _0x2316eb=[_0x0b23('0x61'),'description',_0x0b23('0x62'),'ownerid',_0x0b23('0x63'),_0x0b23('0x64'),_0x0b23('0x65'),_0x0b23('0x66'),_0x0b23('0x67'),_0x0b23('0x68')];var _0x1d7e0a=[_0x0b23('0x69'),_0x0b23('0x6a'),_0x0b23('0x6b'),'billedserviceunits',_0x0b23('0x6c'),_0x0b23('0x6d'),'contractdetailidname',_0x0b23('0x6e'),'createdbyexternalpartyname',_0x0b23('0x6f'),_0x0b23('0x70'),_0x0b23('0x71'),_0x0b23('0x72'),_0x0b23('0x73'),_0x0b23('0x74'),_0x0b23('0x75'),_0x0b23('0x76'),_0x0b23('0x77'),_0x0b23('0x78'),'entitlementidname',_0x0b23('0x79'),_0x0b23('0x7a'),_0x0b23('0x7b'),_0x0b23('0x7c'),_0x0b23('0x7d'),_0x0b23('0x7e'),_0x0b23('0x7f'),_0x0b23('0x80'),_0x0b23('0x81'),_0x0b23('0x82'),'masteridname',_0x0b23('0x83'),_0x0b23('0x84'),_0x0b23('0x85'),_0x0b23('0x86'),_0x0b23('0x87'),_0x0b23('0x88'),_0x0b23('0x89'),_0x0b23('0x8a'),_0x0b23('0x8b'),_0x0b23('0x8c'),_0x0b23('0x8d'),_0x0b23('0x8e'),'owneridname',_0x0b23('0x8f'),'owneridyominame',_0x0b23('0x90'),'primarycontactidname',_0x0b23('0x91'),'prioritycodename',_0x0b23('0x92'),_0x0b23('0x93'),_0x0b23('0x94'),'resolvebykpiidname',_0x0b23('0x95'),'responsiblecontactidname',_0x0b23('0x96'),_0x0b23('0x97'),_0x0b23('0x98'),_0x0b23('0x99'),'socialprofileidname',_0x0b23('0x9a'),'statuscode','subjectidname',_0x0b23('0x9b'),'timezoneruleversionnumber',_0x0b23('0x9c'),_0x0b23('0x9d'),'utcconversiontimezonecode',_0x0b23('0x9e')];var _0x5293cf=_0x2316eb[_0x0b23('0x9f')](_0x1d7e0a);return db[_0x0b23('0x31')][_0x0b23('0x53')]({'where':{'id':_0x203879[_0x0b23('0x4e')]['id']},'attributes':['id',_0x0b23('0xa0'),'password',_0x0b23('0xa1'),_0x0b23('0xa2'),_0x0b23('0xa3'),_0x0b23('0xa4')]})[_0x0b23('0x18')](handleEntityNotFound(_0x1f91a2,null))['then'](function(_0x505b9a){if(_0x505b9a){_0x332fd1=_0x505b9a[_0x0b23('0xa1')];var _0x2e25bd=_0x332fd1[_0x0b23('0xa5')](-0x1);if(_0x2e25bd==='/'){_0x332fd1=_0x332fd1[_0x0b23('0xa6')](0x0,_0x332fd1[_0x0b23('0xa7')](_0x2e25bd));}_0x5c095f=util['format']('%s/api/data/v9.0/',_0x332fd1);var _0x53003b={'method':_0x0b23('0xa8'),'uri':'https://login.microsoftonline.com/'+_0x505b9a[_0x0b23('0xa2')]+_0x0b23('0xa9'),'form':{'client_id':_0x505b9a[_0x0b23('0xa3')],'resource':_0x332fd1,'username':_0x505b9a[_0x0b23('0xa0')],'password':_0x505b9a[_0x0b23('0xaa')],'grant_type':_0x0b23('0xaa'),'client_secret':_0x505b9a[_0x0b23('0xa4')]},'json':!![]};return rp(_0x53003b);}})['then'](function(_0x46470b){_0x5f49e2=_0x46470b[_0x0b23('0xab')];var _0x19018a={'method':_0x0b23('0xac'),'uri':encodeURI(_0x5c095f+_0x0b23('0xad')+_0x4652a9+'\x27'),'headers':{'Authorization':'Bearer\x20'+_0x5f49e2,'If-None-Match':null,'OData-Version':_0x0b23('0xae')},'json':!![]};return rp(_0x19018a);})['then'](function(_0x555dd4){var _0x2489e4=_0x555dd4['value'][0x0];var _0x1f9415=_0x2489e4[_0x0b23('0xaf')];var _0x26930f={'method':_0x0b23('0xac'),'uri':_0x5c095f+'EntityDefinitions('+_0x1f9415+_0x0b23('0xb0'),'headers':{'Authorization':_0x0b23('0xb1')+_0x5f49e2,'If-None-Match':null,'OData-Version':_0x0b23('0xae')},'json':!![]};return rp(_0x26930f);})[_0x0b23('0x18')](function(_0x52d270){_0x448a74=_0x52d270;_0x1b0c70=_0x448a74[_0x0b23('0xb2')];_0x1b0c70=_[_0x0b23('0xb3')](_0x1b0c70,function(_0xf0dbb9){return!_0x5293cf['includes'](_0xf0dbb9[_0x0b23('0xb4')]);});var _0x3794b2=[];var _0x33192f=[];_0x1b0c70[_0x0b23('0xb5')](function(_0x1ffe58){if(_0x1ffe58['@odata.type']){var _0x25fbe5=_0x1ffe58[_0x0b23('0xb6')]['substring'](_0x1ffe58[_0x0b23('0xb6')][_0x0b23('0xa7')]('.')+0x1);if(_0x25fbe5===_0x0b23('0xb7')){_0x3794b2[_0x0b23('0xb8')](getSelectList(_0x5c095f,_0x2f1038,_0x33192f,_0x448a74[_0x0b23('0xaf')],_0x1ffe58[_0x0b23('0xaf')],_0x5f49e2));}}});return Promise[_0x0b23('0xb9')](_0x3794b2);})['then'](function(_0x375a66){_0xa12a45=_0x375a66[0x0];var _0x14beaa=[];var _0x30920d=[];_0x1b0c70[_0x0b23('0xb5')](function(_0x543881){if(!_['isNil'](_0x543881[_0x0b23('0xb6')])){var _0x101478=_0x543881[_0x0b23('0xb6')]['substring'](_0x543881[_0x0b23('0xb6')][_0x0b23('0xa7')]('.')+0x1);if(_0x101478==='BooleanAttributeMetadata'){_0x14beaa[_0x0b23('0xb8')](getBooleanList(_0x5c095f,_0x2f1038,_0x30920d,_0x448a74[_0x0b23('0xaf')],_0x543881[_0x0b23('0xaf')],_0x5f49e2));}}});return Promise[_0x0b23('0xb9')](_0x14beaa);})[_0x0b23('0x18')](function(_0x39e220){_0x40160f=_0x39e220[0x0];var _0x37ec96=[];var _0x49b84a=[];_0x1b0c70['forEach'](function(_0x5025fb){if(_0x5025fb[_0x0b23('0xb6')]){var _0x2beda6=_0x5025fb[_0x0b23('0xb6')][_0x0b23('0xa6')](_0x5025fb['@odata.type'][_0x0b23('0xa7')]('.')+0x1);if(_0x2beda6===_0x0b23('0xba')||_0x2beda6===_0x0b23('0xbb')||_0x2beda6===_0x0b23('0xbc')||_0x2beda6==='IntegerAttributeMetadata'||_0x2beda6===_0x0b23('0xbd')||_0x2beda6==='DateTimeAttributeMetadata'||_0x2beda6==='StatusAttributeMetadata'||_0x2beda6===_0x0b23('0xbe')||_0x2beda6===_0x0b23('0xbf')||_0x2beda6===_0x0b23('0xc0')){_0x37ec96['push'](getInputList(_0x5c095f,_0x2f1038,_0x2beda6,_0x49b84a,_0x448a74[_0x0b23('0xaf')],_0x5025fb['MetadataId'],_0x5f49e2));}}});return Promise[_0x0b23('0xb9')](_0x37ec96);})[_0x0b23('0x18')](function(_0x28310c){_0x9ca1b=_0x28310c[0x0];var _0x3b5ed8=_0xa12a45[_0x0b23('0x9f')](_0x40160f)[_0x0b23('0x9f')](_0x9ca1b);var _0x34807e={'count':_0x3b5ed8[_0x0b23('0x3a')],'rows':_0x3b5ed8};return _0x34807e;})['then'](respondWithResult(_0x1f91a2,null))['catch'](function(_0xa593fb){console[_0x0b23('0xc1')](_0x0b23('0xc2')+_0xa593fb);var _0x2f2fa4=_0x203879['query'][_0x0b23('0xc3')]?0x1f4:_0xa593fb[_0x0b23('0xc4')]||0x1f4;logger[_0x0b23('0x1e')](_0xa593fb['stack']);delete _0xa593fb[_0x0b23('0x30')];if(_0x2f2fa4===0x191){_0x2f2fa4=0x190;}_0x1f91a2['status'](_0x2f2fa4)[_0x0b23('0xc5')](_0x203879[_0x0b23('0x35')]['test']?{'message':'Wrong\x20credentials','statusCode':_0xa593fb[_0x0b23('0xc4')]}:_0xa593fb);});};function getSelectList(_0x4db3e4,_0xe36051,_0x3f84f2,_0x4332b6,_0x483aba,_0x173183){var _0x53019b={'method':_0x0b23('0xac'),'uri':_0x4db3e4+_0x0b23('0xc6')+_0x4332b6+_0x0b23('0xc7')+_0x483aba+')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?'+'$select=DisplayName,LogicalName&$expand=OptionSet($select=Options)','headers':{'Authorization':_0x0b23('0xb1')+_0x173183,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x53019b)['then'](function(_0x13eab7){var _0x45e1b3=[];var _0x586370=_0x13eab7[_0x0b23('0xc8')]['Options'];_0x586370['forEach'](function(_0x4fde86){_0x45e1b3[_0x0b23('0xb8')]({'name':_0x4fde86[_0x0b23('0xc9')][_0x0b23('0xca')][_0x0b23('0xc9')],'value':String(_0x4fde86[_0x0b23('0xcb')])});});var _0x7a0f84={'id':_0xe36051+'_'+_0x13eab7[_0x0b23('0xb4')],'name':_0x13eab7[_0x0b23('0xcc')]['UserLocalizedLabel'][_0x0b23('0xc9')],'custom':![],'options':_0x45e1b3};_0x3f84f2['push'](_0x7a0f84);return _0x3f84f2;});}function getBooleanList(_0x322950,_0x2061e5,_0x36f650,_0x2dc52c,_0x479f72,_0x4ad4b8){var _0x7e9bb9={'method':_0x0b23('0xac'),'uri':_0x322950+'EntityDefinitions('+_0x2dc52c+_0x0b23('0xc7')+_0x479f72+_0x0b23('0xcd'),'headers':{'Authorization':_0x0b23('0xb1')+_0x4ad4b8,'If-None-Match':null,'OData-Version':_0x0b23('0xae')},'json':!![]};return rp(_0x7e9bb9)[_0x0b23('0x18')](function(_0x23ae09){var _0x37aafa=[];_0x37aafa['push']({'name':_0x23ae09[_0x0b23('0xc8')]['TrueOption']['Label'][_0x0b23('0xca')][_0x0b23('0xc9')],'value':_0x0b23('0xce')},{'name':_0x23ae09['OptionSet'][_0x0b23('0xcf')]['Label']['UserLocalizedLabel'][_0x0b23('0xc9')],'value':'false'});var _0x1fdd6d={'id':_0x2061e5+'_'+_0x23ae09[_0x0b23('0xb4')],'name':_0x23ae09[_0x0b23('0xcc')]['UserLocalizedLabel'][_0x0b23('0xc9')],'custom':![],'options':_0x37aafa};_0x36f650[_0x0b23('0xb8')](_0x1fdd6d);return _0x36f650;});}function getInputList(_0x1273fd,_0x4fe997,_0xa92454,_0x2f333f,_0x65359a,_0x7adf62,_0x29ae2d){var _0x4373a3={'method':_0x0b23('0xac'),'uri':_0x1273fd+_0x0b23('0xc6')+_0x65359a+_0x0b23('0xc7')+_0x7adf62+_0x0b23('0xd0')+_0xa92454+_0x0b23('0xd1'),'headers':{'Authorization':_0x0b23('0xb1')+_0x29ae2d,'If-None-Match':null,'OData-Version':_0x0b23('0xae')},'json':!![]};return rp(_0x4373a3)[_0x0b23('0x18')](function(_0x3ff698){var _0x206828={'id':_0x4fe997+'_'+_0x3ff698[_0x0b23('0xb4')],'name':_0x3ff698[_0x0b23('0xcc')][_0x0b23('0xca')]?_0x3ff698[_0x0b23('0xcc')][_0x0b23('0xca')][_0x0b23('0xc9')]:_0x3ff698[_0x0b23('0xb4')],'custom':![],'options':[]};_0x2f333f[_0x0b23('0xb8')](_0x206828);return _0x2f333f;});}
\ No newline at end of file
+var _0x89f9=[')?$select=LogicalName&$expand=Attributes($select=LogicalName)','Attributes','LogicalName','forEach','@odata.type','PicklistAttributeMetadata','all','isNil','push','StringAttributeMetadata','DoubleAttributeMetadata','BigIntAttributeMetadata','IntegerAttributeMetadata','MemoAttributeMetadata','DateTimeAttributeMetadata','StatusAttributeMetadata','EntityNameAttributeMetadata','StateAttributeMetadata','DecimalAttributeMetadata','log','Dynamics365\x20error:\x20','test','Wrong\x20credentials','statusCode',')/Attributes(',')/Microsoft.Dynamics.CRM.PicklistAttributeMetadata?','OptionSet','Options','Label','UserLocalizedLabel','Value','DisplayName',')/Microsoft.Dynamics.CRM.BooleanAttributeMetadata?$select=DisplayName,LogicalName&$expand=OptionSet($select=FalseOption,\x20TrueOption)','TrueOption','true','FalseOption','false',')/Microsoft.Dynamics.CRM.','?$select=DisplayName,LogicalName','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','client','http','then','info','Dynamics365Account,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','destroy','stack','name','send','index','Dynamics365Account','rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','type','VIRTUAL','field','includeAll','include','findAll','rows','show','params','options','find','body','getConfigurations','Dynamics365Configuration','addConfiguration','findOne','AccountId','Subjects','getSubjects','channel','Descriptions','Dynamics365Field','getFields','incident','Incident','PhoneCall','description','customerid','ownerid','caseorigincode','subject','phonenumber','directioncode','phonecall_activity_parties','accountidname','actualserviceunits','billedserviceunits','contactidname','contactidyominame','contractdetailidname','contractidname','createdbyexternalpartyname','createdbyname','createdonbehalfbyname','createdonbehalfbyyominame','customeridtype','customeridyominame','entitlementidname','entityimage_timestamp','entityimage_url','escalatedon','exchangerate','followupby','importsequencenumber','influencescore','kbarticleidname','lastonholdtime','masteridname','modifiedbyexternalpartyname','modifiedbyexternalpartyyominame','modifiedon','modifiedonbehalfbyname','msdyn_incidenttypename','msdyn_iotalertname','numberofchildincidents','onholdtime','overriddencreatedon','owneridname','owneridyominame','primarycontactidname','productserialnumber','resolveby','resolvebykpiidname','responseby','responsiblecontactidname','responsiblecontactidyominame','sentimentvalue','slainvokedidname','slaname','socialprofileidname','statuscode','subjectidname','timezoneruleversionnumber','traversedpath','utcconversiontimezonecode','concat','username','remoteUri','clientId','slice','substring','lastIndexOf','format','%s/api/data/v9.0/','tenantId','/oauth2/token','password','access_token','Bearer\x20','4.0','MetadataId','GET','EntityDefinitions('];(function(_0x321a8f,_0xb1332a){var _0x3945a1=function(_0x4cfd40){while(--_0x4cfd40){_0x321a8f['push'](_0x321a8f['shift']());}};_0x3945a1(++_0xb1332a);}(_0x89f9,0x1d3));var _0x989f=function(_0x3ea960,_0x164d1d){_0x3ea960=_0x3ea960-0x0;var _0x14ea1c=_0x89f9[_0x3ea960];return _0x14ea1c;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x989f('0x0'));var zipdir=require(_0x989f('0x1'));var jsonpatch=require(_0x989f('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x989f('0x3'));var Mustache=require(_0x989f('0x4'));var util=require(_0x989f('0x5'));var path=require(_0x989f('0x6'));var sox=require(_0x989f('0x7'));var csv=require(_0x989f('0x8'));var ejs=require(_0x989f('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x989f('0xa'));var crypto=require(_0x989f('0xb'));var jsforce=require(_0x989f('0xc'));var deskjs=require(_0x989f('0xd'));var toCsv=require('to-csv');var querystring=require(_0x989f('0xe'));var Papa=require(_0x989f('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0x989f('0x10'));var Redis=require(_0x989f('0x11'));var qs=require(_0x989f('0x12'));var logger=require(_0x989f('0x13'))('api');var utils=require(_0x989f('0x14'));var config=require(_0x989f('0x15'));var db=require(_0x989f('0x16'))['db'];var integrations=require(_0x989f('0x17'));var jayson=require('jayson/promise');var client=jayson[_0x989f('0x18')][_0x989f('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x23aed0,_0x50da9a,_0x14e51d,_0x5af13e){return new BPromise(function(_0x2a154d,_0x38be86){var _0x200caf=_0x5af13e||client;return _0x200caf['request'](_0x23aed0,_0x14e51d)[_0x989f('0x1a')](function(_0x4f5f04){logger[_0x989f('0x1b')](_0x989f('0x1c'),_0x50da9a,'request\x20sent');logger['debug']('Dynamics365Account,\x20%s,\x20%s,\x20%s',_0x50da9a,'request\x20sent',JSON[_0x989f('0x1d')](_0x4f5f04));if(_0x4f5f04[_0x989f('0x1e')]){if(_0x4f5f04['error'][_0x989f('0x1f')]===0x1f4){logger[_0x989f('0x1e')]('Dynamics365Account,\x20%s,\x20%s',_0x50da9a,_0x4f5f04[_0x989f('0x1e')][_0x989f('0x20')]);return _0x38be86(_0x4f5f04[_0x989f('0x1e')][_0x989f('0x20')]);}logger[_0x989f('0x1e')]('Dynamics365Account,\x20%s,\x20%s',_0x50da9a,_0x4f5f04[_0x989f('0x1e')]['message']);return _0x2a154d(_0x4f5f04[_0x989f('0x1e')][_0x989f('0x20')]);}else{logger[_0x989f('0x1b')]('Dynamics365Account,\x20%s,\x20%s',_0x50da9a,_0x989f('0x21'));_0x2a154d(_0x4f5f04[_0x989f('0x22')][_0x989f('0x20')]);}})[_0x989f('0x23')](function(_0x22a78d){logger[_0x989f('0x1e')]('Dynamics365Account,\x20%s,\x20%s',_0x50da9a,_0x22a78d);_0x38be86(_0x22a78d);});});}function respondWithStatusCode(_0x358e92,_0x2047b0){_0x2047b0=_0x2047b0||0xcc;return function(_0x20cf28){if(_0x20cf28){return _0x358e92[_0x989f('0x24')](_0x2047b0);}return _0x358e92[_0x989f('0x25')](_0x2047b0)[_0x989f('0x26')]();};}function respondWithResult(_0x1421e4,_0x355715){_0x355715=_0x355715||0xc8;return function(_0x343ede){if(_0x343ede){return _0x1421e4[_0x989f('0x25')](_0x355715)[_0x989f('0x27')](_0x343ede);}};}function respondWithFilteredResult(_0x154644,_0x1f0b16){return function(_0x59e97f){if(_0x59e97f){var _0x306a4d=_0x59e97f[_0x989f('0x28')],_0x3faf28=_0x1f0b16[_0x989f('0x29')],_0x529e45=_0x1f0b16[_0x989f('0x29')]+_0x1f0b16[_0x989f('0x2a')],_0x39c074;if(_0x529e45>=_0x306a4d){_0x529e45=_0x306a4d;_0x39c074=0xc8;}else{_0x39c074=0xce;}_0x154644['status'](_0x39c074);return _0x154644[_0x989f('0x2b')](_0x989f('0x2c'),_0x3faf28+'-'+_0x529e45+'/'+_0x306a4d)[_0x989f('0x27')](_0x59e97f);}return null;};}function patchUpdates(_0x13f9da){return function(_0x234a87){try{jsonpatch[_0x989f('0x2d')](_0x234a87,_0x13f9da,!![]);}catch(_0x1ebf10){return BPromise['reject'](_0x1ebf10);}return _0x234a87[_0x989f('0x2e')]();};}function saveUpdates(_0x217c9d,_0x2645b6){return function(_0x3b42af){if(_0x3b42af){return _0x3b42af[_0x989f('0x2f')](_0x217c9d)[_0x989f('0x1a')](function(_0x4035ff){return _0x4035ff;});}return null;};}function removeEntity(_0x48d9fe,_0x35ba61){return function(_0x447f16){if(_0x447f16){return _0x447f16[_0x989f('0x30')]()[_0x989f('0x1a')](function(){_0x48d9fe[_0x989f('0x25')](0xcc)[_0x989f('0x26')]();});}};}function handleEntityNotFound(_0xaf253d,_0xadd547){return function(_0xf799ad){if(!_0xf799ad){_0xaf253d[_0x989f('0x24')](0x194);}return _0xf799ad;};}function handleError(_0xb82d2a,_0x37b597){_0x37b597=_0x37b597||0x1f4;return function(_0x5d3ec3){logger['error'](_0x5d3ec3[_0x989f('0x31')]);if(_0x5d3ec3[_0x989f('0x32')]){delete _0x5d3ec3[_0x989f('0x32')];}_0xb82d2a['status'](_0x37b597)[_0x989f('0x33')](_0x5d3ec3);};}exports[_0x989f('0x34')]=function(_0x2e9611,_0x1209f7){var _0x575522={},_0x2d8b35={},_0x2161eb={'count':0x0,'rows':[]};var _0x7fd04f=db[_0x989f('0x35')][_0x989f('0x36')];_0x2d8b35['model']=_[_0x989f('0x37')](_0x7fd04f);_0x2d8b35['query']=_[_0x989f('0x37')](_0x2e9611[_0x989f('0x38')]);_0x2d8b35[_0x989f('0x39')]=_['intersection'](_0x2d8b35['model'],_0x2d8b35[_0x989f('0x38')]);_0x575522['attributes']=_[_0x989f('0x3a')](_0x2d8b35[_0x989f('0x3b')],qs[_0x989f('0x3c')](_0x2e9611[_0x989f('0x38')][_0x989f('0x3c')]));_0x575522[_0x989f('0x3d')]=_0x575522[_0x989f('0x3d')][_0x989f('0x3e')]?_0x575522['attributes']:_0x2d8b35[_0x989f('0x3b')];if(!_0x2e9611[_0x989f('0x38')][_0x989f('0x3f')](_0x989f('0x40'))){_0x575522['limit']=qs['limit'](_0x2e9611[_0x989f('0x38')]['limit']);_0x575522['offset']=qs[_0x989f('0x29')](_0x2e9611['query'][_0x989f('0x29')]);}_0x575522[_0x989f('0x41')]=qs[_0x989f('0x42')](_0x2e9611[_0x989f('0x38')]['sort']);_0x575522['where']=qs[_0x989f('0x39')](_[_0x989f('0x43')](_0x2e9611[_0x989f('0x38')],_0x2d8b35[_0x989f('0x39')]));if(_0x2e9611['query'][_0x989f('0x44')]){_0x575522[_0x989f('0x45')]=_[_0x989f('0x46')](_0x575522['where'],{'$or':_[_0x989f('0x47')](_0x7fd04f,function(_0xf9808e){if(_0xf9808e[_0x989f('0x48')]['key']!==_0x989f('0x49')){var _0x4403df={};_0x4403df[_0xf9808e[_0x989f('0x4a')]]={'$like':'%'+_0x2e9611[_0x989f('0x38')][_0x989f('0x44')]+'%'};return _0x4403df;}})});}_0x575522=_[_0x989f('0x46')]({},_0x575522,_0x2e9611['options']);var _0x337653={'where':_0x575522[_0x989f('0x45')]};return db[_0x989f('0x35')]['count'](_0x337653)[_0x989f('0x1a')](function(_0x343ee3){_0x2161eb[_0x989f('0x28')]=_0x343ee3;if(_0x2e9611[_0x989f('0x38')][_0x989f('0x4b')]){_0x575522[_0x989f('0x4c')]=[{'all':!![]}];}return db[_0x989f('0x35')][_0x989f('0x4d')](_0x575522);})['then'](function(_0x39408d){_0x2161eb[_0x989f('0x4e')]=_0x39408d;return _0x2161eb;})['then'](respondWithFilteredResult(_0x1209f7,_0x575522))[_0x989f('0x23')](handleError(_0x1209f7,null));};exports[_0x989f('0x4f')]=function(_0x4f64dc,_0x47fa79){var _0x5e7cec={'raw':![],'where':{'id':_0x4f64dc[_0x989f('0x50')]['id']}},_0x3c22da={};_0x3c22da[_0x989f('0x3b')]=_[_0x989f('0x37')](db[_0x989f('0x35')][_0x989f('0x36')]);_0x3c22da[_0x989f('0x38')]=_[_0x989f('0x37')](_0x4f64dc[_0x989f('0x38')]);_0x3c22da[_0x989f('0x39')]=_[_0x989f('0x3a')](_0x3c22da[_0x989f('0x3b')],_0x3c22da['query']);_0x5e7cec['attributes']=_[_0x989f('0x3a')](_0x3c22da[_0x989f('0x3b')],qs[_0x989f('0x3c')](_0x4f64dc['query'][_0x989f('0x3c')]));_0x5e7cec['attributes']=_0x5e7cec['attributes']['length']?_0x5e7cec[_0x989f('0x3d')]:_0x3c22da[_0x989f('0x3b')];if(_0x4f64dc[_0x989f('0x38')][_0x989f('0x4b')]){_0x5e7cec[_0x989f('0x4c')]=[{'all':!![]}];}_0x5e7cec=_[_0x989f('0x46')]({},_0x5e7cec,_0x4f64dc[_0x989f('0x51')]);return db[_0x989f('0x35')][_0x989f('0x52')](_0x5e7cec)[_0x989f('0x1a')](handleEntityNotFound(_0x47fa79,null))['then'](respondWithResult(_0x47fa79,null))['catch'](handleError(_0x47fa79,null));};exports['create']=function(_0x26c7f4,_0x8901c6){return db[_0x989f('0x35')]['create'](_0x26c7f4['body'],{})[_0x989f('0x1a')](respondWithResult(_0x8901c6,0xc9))[_0x989f('0x23')](handleError(_0x8901c6,null));};exports[_0x989f('0x2f')]=function(_0x3a1d82,_0x3d3d3d){if(_0x3a1d82[_0x989f('0x53')]['id']){delete _0x3a1d82[_0x989f('0x53')]['id'];}return db[_0x989f('0x35')][_0x989f('0x52')]({'where':{'id':_0x3a1d82[_0x989f('0x50')]['id']}})['then'](handleEntityNotFound(_0x3d3d3d,null))[_0x989f('0x1a')](saveUpdates(_0x3a1d82['body'],null))[_0x989f('0x1a')](respondWithResult(_0x3d3d3d,null))[_0x989f('0x23')](handleError(_0x3d3d3d,null));};exports[_0x989f('0x30')]=function(_0x4d177c,_0x899369){return db[_0x989f('0x35')]['find']({'where':{'id':_0x4d177c[_0x989f('0x50')]['id']}})[_0x989f('0x1a')](handleEntityNotFound(_0x899369,null))['then'](removeEntity(_0x899369,null))[_0x989f('0x23')](handleError(_0x899369,null));};exports[_0x989f('0x54')]=function(_0x1e3cbc,_0x3b7851,_0x246473){var _0x22cc96={};var _0x429e28={};var _0x5135ed;var _0x54a4d1;return db[_0x989f('0x35')]['findOne']({'where':{'id':_0x1e3cbc[_0x989f('0x50')]['id']}})['then'](handleEntityNotFound(_0x3b7851,null))[_0x989f('0x1a')](function(_0x19bc00){if(_0x19bc00){_0x5135ed=_0x19bc00;_0x429e28[_0x989f('0x3b')]=_[_0x989f('0x37')](db[_0x989f('0x55')][_0x989f('0x36')]);_0x429e28[_0x989f('0x38')]=_[_0x989f('0x37')](_0x1e3cbc[_0x989f('0x38')]);_0x429e28[_0x989f('0x39')]=_[_0x989f('0x3a')](_0x429e28[_0x989f('0x3b')],_0x429e28[_0x989f('0x38')]);_0x22cc96[_0x989f('0x3d')]=_[_0x989f('0x3a')](_0x429e28['model'],qs[_0x989f('0x3c')](_0x1e3cbc[_0x989f('0x38')][_0x989f('0x3c')]));_0x22cc96[_0x989f('0x3d')]=_0x22cc96['attributes'][_0x989f('0x3e')]?_0x22cc96[_0x989f('0x3d')]:_0x429e28[_0x989f('0x3b')];_0x22cc96[_0x989f('0x41')]=qs[_0x989f('0x42')](_0x1e3cbc[_0x989f('0x38')][_0x989f('0x42')]);_0x22cc96[_0x989f('0x45')]=qs[_0x989f('0x39')](_[_0x989f('0x43')](_0x1e3cbc[_0x989f('0x38')],_0x429e28[_0x989f('0x39')]));if(_0x1e3cbc[_0x989f('0x38')][_0x989f('0x44')]){_0x22cc96[_0x989f('0x45')]=_[_0x989f('0x46')](_0x22cc96[_0x989f('0x45')],{'$or':_['map'](_0x22cc96[_0x989f('0x3d')],function(_0x203fd7){var _0x43f742={};_0x43f742[_0x203fd7]={'$like':'%'+_0x1e3cbc[_0x989f('0x38')][_0x989f('0x44')]+'%'};return _0x43f742;})});}_0x22cc96=_[_0x989f('0x46')]({},_0x22cc96,_0x1e3cbc['options']);return _0x5135ed[_0x989f('0x54')](_0x22cc96);}})['then'](function(_0x2e3278){if(_0x2e3278){_0x54a4d1=_0x2e3278[_0x989f('0x3e')];if(!_0x1e3cbc['query']['hasOwnProperty']('nolimit')){_0x22cc96[_0x989f('0x2a')]=qs[_0x989f('0x2a')](_0x1e3cbc[_0x989f('0x38')][_0x989f('0x2a')]);_0x22cc96['offset']=qs[_0x989f('0x29')](_0x1e3cbc[_0x989f('0x38')][_0x989f('0x29')]);}return _0x5135ed[_0x989f('0x54')](_0x22cc96);}})[_0x989f('0x1a')](function(_0x21a9b4){if(_0x21a9b4){return _0x21a9b4?{'count':_0x54a4d1,'rows':_0x21a9b4}:null;}})[_0x989f('0x1a')](respondWithResult(_0x3b7851,null))[_0x989f('0x23')](handleError(_0x3b7851,null));};exports[_0x989f('0x56')]=function(_0x596658,_0x544fc6,_0x2b84c2){if(_0x596658['body']['id']){delete _0x596658[_0x989f('0x53')]['id'];}return db['Dynamics365Account'][_0x989f('0x57')]({'where':{'id':_0x596658[_0x989f('0x50')]['id']}})[_0x989f('0x1a')](handleEntityNotFound(_0x544fc6,null))[_0x989f('0x1a')](function(_0x24314){if(_0x24314){_0x596658[_0x989f('0x53')][_0x989f('0x58')]=_0x24314['id'];_0x596658[_0x989f('0x53')][_0x989f('0x59')]=integrations[_0x989f('0x5a')](_0x596658[_0x989f('0x53')][_0x989f('0x5b')],_0x596658[_0x989f('0x53')][_0x989f('0x48')]);_0x596658['body'][_0x989f('0x5c')]=integrations['getDescriptions'](_0x596658['body'][_0x989f('0x5b')],_0x596658[_0x989f('0x53')][_0x989f('0x48')]);return db['Dynamics365Configuration']['create'](_0x596658['body'],{'include':[{'model':db[_0x989f('0x5d')],'as':'Subjects'},{'model':db['Dynamics365Field'],'as':'Descriptions'}]});}return null;})[_0x989f('0x1a')](respondWithResult(_0x544fc6,null))[_0x989f('0x23')](handleError(_0x544fc6,null));};exports[_0x989f('0x5e')]=function(_0x30304b,_0x23fb9d,_0x401ee1){var _0x13baed=_0x30304b[_0x989f('0x38')]['ticketType'];var _0x3c5e48=_0x13baed===_0x989f('0x5f')?_0x989f('0x60'):_0x989f('0x61');var _0x23c458='';var _0x3aaafd='';var _0x3decd9='';var _0x22f601='';var _0x267fd7='';var _0x6519eb='';var _0x426a99='';var _0x9c5916='';var _0x8281aa=['title',_0x989f('0x62'),_0x989f('0x63'),_0x989f('0x64'),_0x989f('0x65'),_0x989f('0x66'),_0x989f('0x67'),'regardingobjectid',_0x989f('0x68'),_0x989f('0x69')];var _0x196557=[_0x989f('0x6a'),'accountidyominame',_0x989f('0x6b'),_0x989f('0x6c'),_0x989f('0x6d'),_0x989f('0x6e'),_0x989f('0x6f'),_0x989f('0x70'),_0x989f('0x71'),'createdbyexternalpartyyominame',_0x989f('0x72'),'createdbyyominame','createdon',_0x989f('0x73'),_0x989f('0x74'),'customeridname',_0x989f('0x75'),_0x989f('0x76'),'emailaddress',_0x989f('0x77'),_0x989f('0x78'),_0x989f('0x79'),_0x989f('0x7a'),_0x989f('0x7b'),'firstresponsebykpiidname',_0x989f('0x7c'),_0x989f('0x7d'),_0x989f('0x7e'),_0x989f('0x7f'),_0x989f('0x80'),_0x989f('0x81'),_0x989f('0x82'),_0x989f('0x83'),'modifiedbyname','modifiedbyyominame',_0x989f('0x84'),_0x989f('0x85'),'modifiedonbehalfbyyominame',_0x989f('0x86'),_0x989f('0x87'),_0x989f('0x88'),_0x989f('0x89'),_0x989f('0x8a'),_0x989f('0x8b'),'owneridtype',_0x989f('0x8c'),'parentcaseidname',_0x989f('0x8d'),'primarycontactidyominame','prioritycodename','productidname',_0x989f('0x8e'),_0x989f('0x8f'),_0x989f('0x90'),_0x989f('0x91'),_0x989f('0x92'),_0x989f('0x93'),_0x989f('0x94'),_0x989f('0x95'),_0x989f('0x96'),_0x989f('0x97'),'statecode',_0x989f('0x98'),_0x989f('0x99'),'ticketnumber',_0x989f('0x9a'),'transactioncurrencyidname',_0x989f('0x9b'),_0x989f('0x9c'),'versionnumber'];var _0x31054f=_0x8281aa[_0x989f('0x9d')](_0x196557);return db[_0x989f('0x35')][_0x989f('0x57')]({'where':{'id':_0x30304b[_0x989f('0x50')]['id']},'attributes':['id',_0x989f('0x9e'),'password',_0x989f('0x9f'),'tenantId',_0x989f('0xa0'),'clientSecret']})['then'](handleEntityNotFound(_0x23fb9d,null))[_0x989f('0x1a')](function(_0x1c120e){if(_0x1c120e){_0x9c5916=_0x1c120e['remoteUri'];var _0x210463=_0x9c5916[_0x989f('0xa1')](-0x1);if(_0x210463==='/'){_0x9c5916=_0x9c5916[_0x989f('0xa2')](0x0,_0x9c5916[_0x989f('0xa3')](_0x210463));}_0x426a99=util[_0x989f('0xa4')](_0x989f('0xa5'),_0x9c5916);var _0xfb69e3={'method':'POST','uri':'https://login.microsoftonline.com/'+_0x1c120e[_0x989f('0xa6')]+_0x989f('0xa7'),'form':{'client_id':_0x1c120e['clientId'],'resource':_0x9c5916,'username':_0x1c120e[_0x989f('0x9e')],'password':_0x1c120e[_0x989f('0xa8')],'grant_type':_0x989f('0xa8'),'client_secret':_0x1c120e['clientSecret']},'json':!![]};return rp(_0xfb69e3);}})['then'](function(_0x2ec7e1){_0x6519eb=_0x2ec7e1[_0x989f('0xa9')];var _0x31e0c2={'method':'GET','uri':encodeURI(_0x426a99+'EntityDefinitions?$select=DisplayName,EntitySetName&$filter=SchemaName\x20eq\x20\x27'+_0x3c5e48+'\x27'),'headers':{'Authorization':_0x989f('0xaa')+_0x6519eb,'If-None-Match':null,'OData-Version':_0x989f('0xab')},'json':!![]};return rp(_0x31e0c2);})[_0x989f('0x1a')](function(_0x4d4eaf){var _0x29a183=_0x4d4eaf['value'][0x0];var _0x3c0d1b=_0x29a183[_0x989f('0xac')];var _0x13b8aa={'method':_0x989f('0xad'),'uri':_0x426a99+_0x989f('0xae')+_0x3c0d1b+_0x989f('0xaf'),'headers':{'Authorization':_0x989f('0xaa')+_0x6519eb,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x13b8aa);})[_0x989f('0x1a')](function(_0x452025){_0x23c458=_0x452025;_0x3aaafd=_0x23c458[_0x989f('0xb0')];_0x3aaafd=_['remove'](_0x3aaafd,function(_0x4eea01){return!_0x31054f['includes'](_0x4eea01[_0x989f('0xb1')]);});var _0x4ae241=[];var _0x3ec339=[];_0x3aaafd[_0x989f('0xb2')](function(_0x424933){if(_0x424933[_0x989f('0xb3')]){var _0x4fff25=_0x424933[_0x989f('0xb3')]['substring'](_0x424933[_0x989f('0xb3')][_0x989f('0xa3')]('.')+0x1);if(_0x4fff25===_0x989f('0xb4')){_0x4ae241['push'](getSelectList(_0x426a99,_0x13baed,_0x3ec339,_0x23c458[_0x989f('0xac')],_0x424933[_0x989f('0xac')],_0x6519eb));}}});return Promise[_0x989f('0xb5')](_0x4ae241);})[_0x989f('0x1a')](function(_0x3a4f49){_0x3decd9=_0x3a4f49[0x0];var _0x5154bb=[];var _0x29d338=[];_0x3aaafd['forEach'](function(_0x2c1aad){if(!_[_0x989f('0xb6')](_0x2c1aad[_0x989f('0xb3')])){var _0x42fb55=_0x2c1aad['@odata.type'][_0x989f('0xa2')](_0x2c1aad[_0x989f('0xb3')][_0x989f('0xa3')]('.')+0x1);if(_0x42fb55==='BooleanAttributeMetadata'){_0x5154bb[_0x989f('0xb7')](getBooleanList(_0x426a99,_0x13baed,_0x29d338,_0x23c458[_0x989f('0xac')],_0x2c1aad[_0x989f('0xac')],_0x6519eb));}}});return Promise[_0x989f('0xb5')](_0x5154bb);})[_0x989f('0x1a')](function(_0x4017e3){_0x22f601=_0x4017e3[0x0];var _0x1f74db=[];var _0xafc851=[];_0x3aaafd[_0x989f('0xb2')](function(_0x43b6bc){if(_0x43b6bc[_0x989f('0xb3')]){var _0x4830f3=_0x43b6bc['@odata.type'][_0x989f('0xa2')](_0x43b6bc[_0x989f('0xb3')][_0x989f('0xa3')]('.')+0x1);if(_0x4830f3===_0x989f('0xb8')||_0x4830f3===_0x989f('0xb9')||_0x4830f3===_0x989f('0xba')||_0x4830f3===_0x989f('0xbb')||_0x4830f3===_0x989f('0xbc')||_0x4830f3===_0x989f('0xbd')||_0x4830f3===_0x989f('0xbe')||_0x4830f3===_0x989f('0xbf')||_0x4830f3===_0x989f('0xc0')||_0x4830f3===_0x989f('0xc1')){_0x1f74db[_0x989f('0xb7')](getInputList(_0x426a99,_0x13baed,_0x4830f3,_0xafc851,_0x23c458[_0x989f('0xac')],_0x43b6bc['MetadataId'],_0x6519eb));}}});return Promise[_0x989f('0xb5')](_0x1f74db);})['then'](function(_0x3fe6de){_0x267fd7=_0x3fe6de[0x0];var _0x320f2a=_0x3decd9[_0x989f('0x9d')](_0x22f601)[_0x989f('0x9d')](_0x267fd7);var _0x4f5c8e={'count':_0x320f2a[_0x989f('0x3e')],'rows':_0x320f2a};return _0x4f5c8e;})[_0x989f('0x1a')](respondWithResult(_0x23fb9d,null))[_0x989f('0x23')](function(_0x25c276){console[_0x989f('0xc2')](_0x989f('0xc3')+_0x25c276);var _0x51e2e1=_0x30304b[_0x989f('0x38')][_0x989f('0xc4')]?0x1f4:_0x25c276['statusCode']||0x1f4;logger[_0x989f('0x1e')](_0x25c276[_0x989f('0x31')]);delete _0x25c276[_0x989f('0x32')];if(_0x51e2e1===0x191){_0x51e2e1=0x190;}_0x23fb9d[_0x989f('0x25')](_0x51e2e1)[_0x989f('0x33')](_0x30304b[_0x989f('0x38')][_0x989f('0xc4')]?{'message':_0x989f('0xc5'),'statusCode':_0x25c276[_0x989f('0xc6')]}:_0x25c276);});};function getSelectList(_0x563cac,_0xc7d5b2,_0x2ce78e,_0x334ff9,_0x2f22c7,_0x194023){var _0x1d89e7={'method':_0x989f('0xad'),'uri':_0x563cac+_0x989f('0xae')+_0x334ff9+_0x989f('0xc7')+_0x2f22c7+_0x989f('0xc8')+'$select=DisplayName,LogicalName&$expand=OptionSet($select=Options)','headers':{'Authorization':_0x989f('0xaa')+_0x194023,'If-None-Match':null,'OData-Version':_0x989f('0xab')},'json':!![]};return rp(_0x1d89e7)[_0x989f('0x1a')](function(_0x4bbd9f){var _0x42f47b=[];var _0x4c2691=_0x4bbd9f[_0x989f('0xc9')][_0x989f('0xca')];_0x4c2691[_0x989f('0xb2')](function(_0x2aac6d){_0x42f47b[_0x989f('0xb7')]({'name':_0x2aac6d[_0x989f('0xcb')][_0x989f('0xcc')][_0x989f('0xcb')],'value':String(_0x2aac6d[_0x989f('0xcd')])});});var _0x11262d={'id':_0xc7d5b2+'_'+_0x4bbd9f['LogicalName'],'name':_0x4bbd9f[_0x989f('0xce')][_0x989f('0xcc')]['Label'],'custom':![],'options':_0x42f47b};_0x2ce78e[_0x989f('0xb7')](_0x11262d);return _0x2ce78e;});}function getBooleanList(_0x205561,_0x5ba2b7,_0x543aa9,_0x154431,_0x4e9ceb,_0x3044b7){var _0x301917={'method':_0x989f('0xad'),'uri':_0x205561+_0x989f('0xae')+_0x154431+_0x989f('0xc7')+_0x4e9ceb+_0x989f('0xcf'),'headers':{'Authorization':_0x989f('0xaa')+_0x3044b7,'If-None-Match':null,'OData-Version':_0x989f('0xab')},'json':!![]};return rp(_0x301917)[_0x989f('0x1a')](function(_0x4cc8ca){var _0x2ee327=[];_0x2ee327[_0x989f('0xb7')]({'name':_0x4cc8ca[_0x989f('0xc9')][_0x989f('0xd0')][_0x989f('0xcb')][_0x989f('0xcc')][_0x989f('0xcb')],'value':_0x989f('0xd1')},{'name':_0x4cc8ca[_0x989f('0xc9')][_0x989f('0xd2')][_0x989f('0xcb')][_0x989f('0xcc')][_0x989f('0xcb')],'value':_0x989f('0xd3')});var _0x270d85={'id':_0x5ba2b7+'_'+_0x4cc8ca[_0x989f('0xb1')],'name':_0x4cc8ca[_0x989f('0xce')]['UserLocalizedLabel'][_0x989f('0xcb')],'custom':![],'options':_0x2ee327};_0x543aa9['push'](_0x270d85);return _0x543aa9;});}function getInputList(_0x8c742e,_0x1e3637,_0x1de5b4,_0x728e02,_0x3c64d1,_0xc66084,_0x1e69bb){var _0x263319={'method':_0x989f('0xad'),'uri':_0x8c742e+_0x989f('0xae')+_0x3c64d1+_0x989f('0xc7')+_0xc66084+_0x989f('0xd4')+_0x1de5b4+_0x989f('0xd5'),'headers':{'Authorization':'Bearer\x20'+_0x1e69bb,'If-None-Match':null,'OData-Version':_0x989f('0xab')},'json':!![]};return rp(_0x263319)[_0x989f('0x1a')](function(_0x1e16eb){var _0x589eb8={'id':_0x1e3637+'_'+_0x1e16eb[_0x989f('0xb1')],'name':_0x1e16eb[_0x989f('0xce')]['UserLocalizedLabel']?_0x1e16eb[_0x989f('0xce')][_0x989f('0xcc')][_0x989f('0xcb')]:_0x1e16eb[_0x989f('0xb1')],'custom':![],'options':[]};_0x728e02[_0x989f('0xb7')](_0x589eb8);return _0x728e02;});}
\ No newline at end of file
index 25fd5a6..23d9843 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa967=['../../components/integrations/configuration','define','Dynamics365Account','int_dynamics365_accounts','lodash','util','api','moment','request-promise','./intDynamics365Account.attributes'];(function(_0x15106b,_0x4d96f6){var _0x521203=function(_0x4dbe23){while(--_0x4dbe23){_0x15106b['push'](_0x15106b['shift']());}};_0x521203(++_0x4d96f6);}(_0xa967,0x1a8));var _0x7a96=function(_0x550a2b,_0x356dd7){_0x550a2b=_0x550a2b-0x0;var _0x48f46c=_0xa967[_0x550a2b];return _0x48f46c;};'use strict';var _=require(_0x7a96('0x0'));var util=require(_0x7a96('0x1'));var logger=require('../../config/logger')(_0x7a96('0x2'));var moment=require(_0x7a96('0x3'));var BPromise=require('bluebird');var rp=require(_0x7a96('0x4'));var attributes=require(_0x7a96('0x5'));var integrations=require(_0x7a96('0x6'));module['exports']=function(_0x2c3a4a,_0x157588){return _0x2c3a4a[_0x7a96('0x7')](_0x7a96('0x8'),attributes,{'tableName':_0x7a96('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4975=['define','Dynamics365Account','int_dynamics365_accounts','util','api','moment','./intDynamics365Account.attributes','../../components/integrations/configuration','exports'];(function(_0x189d02,_0x509c20){var _0x5b3e51=function(_0xf4886f){while(--_0xf4886f){_0x189d02['push'](_0x189d02['shift']());}};_0x5b3e51(++_0x509c20);}(_0x4975,0x147));var _0x5497=function(_0x27573f,_0x207800){_0x27573f=_0x27573f-0x0;var _0x4e9bec=_0x4975[_0x27573f];return _0x4e9bec;};'use strict';var _=require('lodash');var util=require(_0x5497('0x0'));var logger=require('../../config/logger')(_0x5497('0x1'));var moment=require(_0x5497('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0x5497('0x3'));var integrations=require(_0x5497('0x4'));module[_0x5497('0x5')]=function(_0x1a8203,_0x1b8342){return _0x1a8203[_0x5497('0x6')](_0x5497('0x7'),attributes,{'tableName':_0x5497('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a115e98..9004881 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x784a=['code','message','catch','GetDynamics365Account','Dynamics365Account','findAll','options','where','attributes','include','map','model','ShowDynamics365Account','raw','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','jayson/promise','client','http','request','then','info','Dynamics365Account,\x20%s,\x20%s','debug','Dynamics365Account,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error'];(function(_0x19950b,_0x53d0d7){var _0x3c6b41=function(_0x3924ad){while(--_0x3924ad){_0x19950b['push'](_0x19950b['shift']());}};_0x3c6b41(++_0x53d0d7);}(_0x784a,0xb3));var _0xa784=function(_0x1843b3,_0x10995a){_0x1843b3=_0x1843b3-0x0;var _0x3c7de0=_0x784a[_0x1843b3];return _0x3c7de0;};'use strict';var _=require('lodash');var util=require(_0xa784('0x0'));var moment=require('moment');var BPromise=require(_0xa784('0x1'));var rs=require(_0xa784('0x2'));var fs=require('fs');var Redis=require(_0xa784('0x3'));var db=require(_0xa784('0x4'))['db'];var utils=require(_0xa784('0x5'));var logger=require('../../config/logger')(_0xa784('0x6'));var config=require('../../config/environment');var jayson=require(_0xa784('0x7'));var client=jayson[_0xa784('0x8')][_0xa784('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x52292f,_0x449371,_0xc75011){return new BPromise(function(_0x4ed9fe,_0x3084a6){return client[_0xa784('0xa')](_0x52292f,_0xc75011)[_0xa784('0xb')](function(_0x3e1709){logger[_0xa784('0xc')](_0xa784('0xd'),_0x449371,'request\x20sent');logger[_0xa784('0xe')](_0xa784('0xf'),_0x449371,_0xa784('0x10'),JSON[_0xa784('0x11')](_0x3e1709));if(_0x3e1709[_0xa784('0x12')]){if(_0x3e1709[_0xa784('0x12')][_0xa784('0x13')]===0x1f4){logger[_0xa784('0x12')](_0xa784('0xd'),_0x449371,_0x3e1709[_0xa784('0x12')][_0xa784('0x14')]);return _0x3084a6(_0x3e1709[_0xa784('0x12')]['message']);}logger[_0xa784('0x12')]('Dynamics365Account,\x20%s,\x20%s',_0x449371,_0x3e1709[_0xa784('0x12')][_0xa784('0x14')]);return _0x4ed9fe(_0x3e1709[_0xa784('0x12')][_0xa784('0x14')]);}else{logger[_0xa784('0xc')](_0xa784('0xd'),_0x449371,'request\x20sent');_0x4ed9fe(_0x3e1709['result'][_0xa784('0x14')]);}})[_0xa784('0x15')](function(_0x5a780f){logger[_0xa784('0x12')](_0xa784('0xd'),_0x449371,_0x5a780f);_0x3084a6(_0x5a780f);});});}exports[_0xa784('0x16')]=function(_0x2277e6){var _0x1b032c=this;return new Promise(function(_0x1f1aa7,_0x2906e6){return db[_0xa784('0x17')][_0xa784('0x18')]({'raw':_0x2277e6[_0xa784('0x19')]?_0x2277e6[_0xa784('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x2277e6[_0xa784('0x19')]?_0x2277e6[_0xa784('0x19')][_0xa784('0x1a')]||null:null,'attributes':_0x2277e6[_0xa784('0x19')]?_0x2277e6[_0xa784('0x19')][_0xa784('0x1b')]||null:null,'limit':_0x2277e6[_0xa784('0x19')]?_0x2277e6[_0xa784('0x19')]['limit']||null:null,'include':_0x2277e6[_0xa784('0x19')]?_0x2277e6[_0xa784('0x19')][_0xa784('0x1c')]?_[_0xa784('0x1d')](_0x2277e6[_0xa784('0x19')][_0xa784('0x1c')],function(_0x21239e){return{'model':db[_0x21239e[_0xa784('0x1e')]],'as':_0x21239e['as'],'attributes':_0x21239e[_0xa784('0x1b')],'include':_0x21239e[_0xa784('0x1c')]?_[_0xa784('0x1d')](_0x21239e['include'],function(_0xd2faca){return{'model':db[_0xd2faca[_0xa784('0x1e')]],'as':_0xd2faca['as'],'attributes':_0xd2faca[_0xa784('0x1b')],'include':_0xd2faca[_0xa784('0x1c')]?_[_0xa784('0x1d')](_0xd2faca[_0xa784('0x1c')],function(_0x55a487){return{'model':db[_0x55a487[_0xa784('0x1e')]],'as':_0x55a487['as'],'attributes':_0x55a487[_0xa784('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xa784('0xb')](function(_0x41f321){logger['info'](_0xa784('0x16'),_0x2277e6);logger[_0xa784('0xe')](_0xa784('0x16'),_0x2277e6,JSON[_0xa784('0x11')](_0x41f321));_0x1f1aa7(_0x41f321);})['catch'](function(_0x320496){logger['error'](_0xa784('0x16'),_0x320496[_0xa784('0x14')],_0x2277e6);_0x2906e6(_0x1b032c['error'](0x1f4,_0x320496[_0xa784('0x14')]));});});};exports[_0xa784('0x1f')]=function(_0x32dc0d){var _0x32bcf4=this;return new Promise(function(_0x461905,_0x5e3940){return db[_0xa784('0x17')]['find']({'raw':_0x32dc0d[_0xa784('0x19')]?_0x32dc0d[_0xa784('0x19')][_0xa784('0x20')]===undefined?!![]:![]:!![],'where':_0x32dc0d[_0xa784('0x19')]?_0x32dc0d[_0xa784('0x19')][_0xa784('0x1a')]||null:null,'attributes':_0x32dc0d['options']?_0x32dc0d[_0xa784('0x19')][_0xa784('0x1b')]||null:null,'include':_0x32dc0d[_0xa784('0x19')]?_0x32dc0d[_0xa784('0x19')][_0xa784('0x1c')]?_[_0xa784('0x1d')](_0x32dc0d[_0xa784('0x19')]['include'],function(_0x3ff942){return{'model':db[_0x3ff942['model']],'as':_0x3ff942['as'],'attributes':_0x3ff942[_0xa784('0x1b')],'include':_0x3ff942[_0xa784('0x1c')]?_[_0xa784('0x1d')](_0x3ff942[_0xa784('0x1c')],function(_0x4f8e3f){return{'model':db[_0x4f8e3f[_0xa784('0x1e')]],'as':_0x4f8e3f['as'],'attributes':_0x4f8e3f[_0xa784('0x1b')],'include':_0x4f8e3f[_0xa784('0x1c')]?_[_0xa784('0x1d')](_0x4f8e3f[_0xa784('0x1c')],function(_0x3794d4){return{'model':db[_0x3794d4[_0xa784('0x1e')]],'as':_0x3794d4['as'],'attributes':_0x3794d4[_0xa784('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x545c67){logger['info'](_0xa784('0x1f'),_0x32dc0d);logger['debug'](_0xa784('0x1f'),_0x32dc0d,JSON['stringify'](_0x545c67));_0x461905(_0x545c67);})[_0xa784('0x15')](function(_0x1b5122){logger[_0xa784('0x12')]('ShowDynamics365Account',_0x1b5122['message'],_0x32dc0d);_0x5e3940(_0x32bcf4[_0xa784('0x12')](0x1f4,_0x1b5122[_0xa784('0x14')]));});});};
\ No newline at end of file
+var _0x54e8=['stringify','error','message','result','GetDynamics365Account','findAll','options','raw','include','map','attributes','model','catch','ShowDynamics365Account','Dynamics365Account','find','where','then','debug','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','info','Dynamics365Account,\x20%s,\x20%s','request\x20sent','Dynamics365Account,\x20%s,\x20%s,\x20%s'];(function(_0x517d65,_0x29cbc3){var _0xf911de=function(_0x1389ee){while(--_0x1389ee){_0x517d65['push'](_0x517d65['shift']());}};_0xf911de(++_0x29cbc3);}(_0x54e8,0xc7));var _0x854e=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x54e8[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0x854e('0x0'));var moment=require(_0x854e('0x1'));var BPromise=require(_0x854e('0x2'));var rs=require(_0x854e('0x3'));var fs=require('fs');var Redis=require(_0x854e('0x4'));var db=require(_0x854e('0x5'))['db'];var utils=require(_0x854e('0x6'));var logger=require(_0x854e('0x7'))(_0x854e('0x8'));var config=require('../../config/environment');var jayson=require(_0x854e('0x9'));var client=jayson[_0x854e('0xa')][_0x854e('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x58c52c,_0x58ae4b,_0x569810){return new BPromise(function(_0x236c32,_0x1067b8){return client[_0x854e('0xc')](_0x58c52c,_0x569810)['then'](function(_0xe31b16){logger[_0x854e('0xd')](_0x854e('0xe'),_0x58ae4b,_0x854e('0xf'));logger['debug'](_0x854e('0x10'),_0x58ae4b,_0x854e('0xf'),JSON[_0x854e('0x11')](_0xe31b16));if(_0xe31b16[_0x854e('0x12')]){if(_0xe31b16[_0x854e('0x12')]['code']===0x1f4){logger['error'](_0x854e('0xe'),_0x58ae4b,_0xe31b16[_0x854e('0x12')]['message']);return _0x1067b8(_0xe31b16[_0x854e('0x12')]['message']);}logger[_0x854e('0x12')](_0x854e('0xe'),_0x58ae4b,_0xe31b16[_0x854e('0x12')][_0x854e('0x13')]);return _0x236c32(_0xe31b16[_0x854e('0x12')][_0x854e('0x13')]);}else{logger[_0x854e('0xd')](_0x854e('0xe'),_0x58ae4b,_0x854e('0xf'));_0x236c32(_0xe31b16[_0x854e('0x14')][_0x854e('0x13')]);}})['catch'](function(_0xefbc49){logger[_0x854e('0x12')](_0x854e('0xe'),_0x58ae4b,_0xefbc49);_0x1067b8(_0xefbc49);});});}exports[_0x854e('0x15')]=function(_0x3f5d54){var _0x55e87d=this;return new Promise(function(_0x452154,_0x22b005){return db['Dynamics365Account'][_0x854e('0x16')]({'raw':_0x3f5d54[_0x854e('0x17')]?_0x3f5d54[_0x854e('0x17')][_0x854e('0x18')]===undefined?!![]:![]:!![],'where':_0x3f5d54['options']?_0x3f5d54[_0x854e('0x17')]['where']||null:null,'attributes':_0x3f5d54['options']?_0x3f5d54[_0x854e('0x17')]['attributes']||null:null,'limit':_0x3f5d54['options']?_0x3f5d54['options']['limit']||null:null,'include':_0x3f5d54[_0x854e('0x17')]?_0x3f5d54['options'][_0x854e('0x19')]?_[_0x854e('0x1a')](_0x3f5d54[_0x854e('0x17')][_0x854e('0x19')],function(_0x222e02){return{'model':db[_0x222e02['model']],'as':_0x222e02['as'],'attributes':_0x222e02[_0x854e('0x1b')],'include':_0x222e02[_0x854e('0x19')]?_[_0x854e('0x1a')](_0x222e02[_0x854e('0x19')],function(_0x163477){return{'model':db[_0x163477[_0x854e('0x1c')]],'as':_0x163477['as'],'attributes':_0x163477[_0x854e('0x1b')],'include':_0x163477[_0x854e('0x19')]?_['map'](_0x163477[_0x854e('0x19')],function(_0x5adff0){return{'model':db[_0x5adff0[_0x854e('0x1c')]],'as':_0x5adff0['as'],'attributes':_0x5adff0['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x41131e){logger[_0x854e('0xd')](_0x854e('0x15'),_0x3f5d54);logger['debug'](_0x854e('0x15'),_0x3f5d54,JSON[_0x854e('0x11')](_0x41131e));_0x452154(_0x41131e);})[_0x854e('0x1d')](function(_0x3ea847){logger[_0x854e('0x12')]('GetDynamics365Account',_0x3ea847[_0x854e('0x13')],_0x3f5d54);_0x22b005(_0x55e87d[_0x854e('0x12')](0x1f4,_0x3ea847[_0x854e('0x13')]));});});};exports[_0x854e('0x1e')]=function(_0x476263){var _0x52d1a4=this;return new Promise(function(_0x573dbb,_0x24b487){return db[_0x854e('0x1f')][_0x854e('0x20')]({'raw':_0x476263[_0x854e('0x17')]?_0x476263[_0x854e('0x17')][_0x854e('0x18')]===undefined?!![]:![]:!![],'where':_0x476263[_0x854e('0x17')]?_0x476263[_0x854e('0x17')][_0x854e('0x21')]||null:null,'attributes':_0x476263[_0x854e('0x17')]?_0x476263[_0x854e('0x17')][_0x854e('0x1b')]||null:null,'include':_0x476263[_0x854e('0x17')]?_0x476263[_0x854e('0x17')][_0x854e('0x19')]?_['map'](_0x476263[_0x854e('0x17')][_0x854e('0x19')],function(_0x321027){return{'model':db[_0x321027[_0x854e('0x1c')]],'as':_0x321027['as'],'attributes':_0x321027['attributes'],'include':_0x321027[_0x854e('0x19')]?_[_0x854e('0x1a')](_0x321027['include'],function(_0x260367){return{'model':db[_0x260367[_0x854e('0x1c')]],'as':_0x260367['as'],'attributes':_0x260367[_0x854e('0x1b')],'include':_0x260367[_0x854e('0x19')]?_['map'](_0x260367[_0x854e('0x19')],function(_0x11e222){return{'model':db[_0x11e222[_0x854e('0x1c')]],'as':_0x11e222['as'],'attributes':_0x11e222['attributes']};}):[]};}):[]};}):[]:[]})[_0x854e('0x22')](function(_0x4107cd){logger[_0x854e('0xd')]('ShowDynamics365Account',_0x476263);logger[_0x854e('0x23')](_0x854e('0x1e'),_0x476263,JSON[_0x854e('0x11')](_0x4107cd));_0x573dbb(_0x4107cd);})[_0x854e('0x1d')](function(_0x9fde19){logger[_0x854e('0x12')]('ShowDynamics365Account',_0x9fde19[_0x854e('0x13')],_0x476263);_0x24b487(_0x52d1a4[_0x854e('0x12')](0x1f4,_0x9fde19[_0x854e('0x13')]));});});};
\ No newline at end of file
index 92efc91..241264d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b66=['../../components/auth/service','../../components/interaction/service','../../config/environment','./intDynamics365Configuration.controller','get','isAuthenticated','index','/:id','getFields','getSubjects','/:id/descriptions','getDescriptions','post','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router'];(function(_0x19a40b,_0x4c3972){var _0x57aced=function(_0x3e95b4){while(--_0x3e95b4){_0x19a40b['push'](_0x19a40b['shift']());}};_0x57aced(++_0x4c3972);}(_0x6b66,0x1da));var _0x66b6=function(_0x31c795,_0x46aac6){_0x31c795=_0x31c795-0x0;var _0x156547=_0x6b66[_0x31c795];return _0x156547;};'use strict';var multer=require(_0x66b6('0x0'));var util=require(_0x66b6('0x1'));var path=require(_0x66b6('0x2'));var timeout=require(_0x66b6('0x3'));var express=require(_0x66b6('0x4'));var router=express[_0x66b6('0x5')]();var auth=require(_0x66b6('0x6'));var interaction=require(_0x66b6('0x7'));var config=require(_0x66b6('0x8'));var controller=require(_0x66b6('0x9'));router[_0x66b6('0xa')]('/',auth[_0x66b6('0xb')](),controller[_0x66b6('0xc')]);router[_0x66b6('0xa')](_0x66b6('0xd'),auth[_0x66b6('0xb')](),controller['show']);router[_0x66b6('0xa')]('/:id/fields',auth[_0x66b6('0xb')](),controller[_0x66b6('0xe')]);router[_0x66b6('0xa')]('/:id/subjects',auth[_0x66b6('0xb')](),controller[_0x66b6('0xf')]);router[_0x66b6('0xa')](_0x66b6('0x10'),auth[_0x66b6('0xb')](),controller[_0x66b6('0x11')]);router[_0x66b6('0x12')]('/',auth[_0x66b6('0xb')](),controller['create']);router[_0x66b6('0x13')]('/:id',auth[_0x66b6('0xb')](),controller[_0x66b6('0x14')]);router[_0x66b6('0x15')]('/:id',auth['isAuthenticated'](),controller[_0x66b6('0x16')]);module[_0x66b6('0x17')]=router;
\ No newline at end of file
+var _0xb26d=['getFields','/:id/subjects','/:id/descriptions','getDescriptions','post','create','put','/:id','delete','destroy','exports','multer','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDynamics365Configuration.controller','isAuthenticated','index','show','get','/:id/fields'];(function(_0x5a5c1c,_0x360b4d){var _0x54881d=function(_0x3d7a75){while(--_0x3d7a75){_0x5a5c1c['push'](_0x5a5c1c['shift']());}};_0x54881d(++_0x360b4d);}(_0xb26d,0x1d3));var _0xdb26=function(_0x40c052,_0x7d3a42){_0x40c052=_0x40c052-0x0;var _0x151732=_0xb26d[_0x40c052];return _0x151732;};'use strict';var multer=require(_0xdb26('0x0'));var util=require(_0xdb26('0x1'));var path=require('path');var timeout=require(_0xdb26('0x2'));var express=require('express');var router=express[_0xdb26('0x3')]();var auth=require(_0xdb26('0x4'));var interaction=require(_0xdb26('0x5'));var config=require(_0xdb26('0x6'));var controller=require(_0xdb26('0x7'));router['get']('/',auth[_0xdb26('0x8')](),controller[_0xdb26('0x9')]);router['get']('/:id',auth['isAuthenticated'](),controller[_0xdb26('0xa')]);router[_0xdb26('0xb')](_0xdb26('0xc'),auth[_0xdb26('0x8')](),controller[_0xdb26('0xd')]);router[_0xdb26('0xb')](_0xdb26('0xe'),auth[_0xdb26('0x8')](),controller['getSubjects']);router[_0xdb26('0xb')](_0xdb26('0xf'),auth[_0xdb26('0x8')](),controller[_0xdb26('0x10')]);router[_0xdb26('0x11')]('/',auth[_0xdb26('0x8')](),controller[_0xdb26('0x12')]);router[_0xdb26('0x13')](_0xdb26('0x14'),auth['isAuthenticated'](),controller['update']);router[_0xdb26('0x15')](_0xdb26('0x14'),auth[_0xdb26('0x8')](),controller[_0xdb26('0x16')]);module[_0xdb26('0x17')]=router;
\ No newline at end of file
index 9d16485..63b066d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6a7=['STRING','ENUM','incident','phonecall','sequelize','exports'];(function(_0xe30e17,_0xce02be){var _0x2342c9=function(_0x20b733){while(--_0x20b733){_0xe30e17['push'](_0xe30e17['shift']());}};_0x2342c9(++_0xce02be);}(_0xc6a7,0x166));var _0x7c6a=function(_0x2080a3,_0x48acfa){_0x2080a3=_0x2080a3-0x0;var _0x8d7d17=_0xc6a7[_0x2080a3];return _0x8d7d17;};'use strict';var Sequelize=require(_0x7c6a('0x0'));module[_0x7c6a('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x7c6a('0x2')]},'ticketType':{'type':Sequelize[_0x7c6a('0x3')](_0x7c6a('0x4'),_0x7c6a('0x5')),'defaultValue':_0x7c6a('0x4')}};
\ No newline at end of file
+var _0x97cb=['ENUM','incident','exports','STRING'];(function(_0x2b4411,_0x2625ed){var _0x8e41ef=function(_0x2aa8c1){while(--_0x2aa8c1){_0x2b4411['push'](_0x2b4411['shift']());}};_0x8e41ef(++_0x2625ed);}(_0x97cb,0x1ae));var _0xb97c=function(_0xa4b551,_0x2f3f15){_0xa4b551=_0xa4b551-0x0;var _0x438937=_0x97cb[_0xa4b551];return _0x438937;};'use strict';var Sequelize=require('sequelize');module[_0xb97c('0x0')]={'name':{'type':Sequelize[_0xb97c('0x1')]},'description':{'type':Sequelize[_0xb97c('0x1')]},'ticketType':{'type':Sequelize[_0xb97c('0x2')]('incident','phonecall'),'defaultValue':_0xb97c('0x3')}};
\ No newline at end of file
index 0614d61..bf8a6dd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4bde=['papaparse','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','request','then','info','Dynamics365Configuration,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Configuration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','stack','send','Dynamics365Configuration','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filter','merge','map','key','VIRTUAL','field','options','count','includeAll','include','rows','show','params','rawAttributes','find','catch','create','body','destroy','getFields','findOne','length','pick','getSubjects','Dynamics365Field','getDescriptions','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring'];(function(_0x1041e9,_0x4b99cb){var _0x43b045=function(_0x2e0187){while(--_0x2e0187){_0x1041e9['push'](_0x1041e9['shift']());}};_0x43b045(++_0x4b99cb);}(_0x4bde,0x1b1));var _0xe4bd=function(_0x4331bf,_0x3c437a){_0x4331bf=_0x4331bf-0x0;var _0x4bd12d=_0x4bde[_0x4331bf];return _0x4bd12d;};'use strict';var pdf=require(_0xe4bd('0x0'));var emlformat=require(_0xe4bd('0x1'));var rimraf=require(_0xe4bd('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xe4bd('0x3'));var rp=require(_0xe4bd('0x4'));var moment=require(_0xe4bd('0x5'));var BPromise=require(_0xe4bd('0x6'));var Mustache=require('mustache');var util=require(_0xe4bd('0x7'));var path=require(_0xe4bd('0x8'));var sox=require(_0xe4bd('0x9'));var csv=require(_0xe4bd('0xa'));var ejs=require(_0xe4bd('0xb'));var fs=require('fs');var _=require(_0xe4bd('0xc'));var squel=require('squel');var crypto=require(_0xe4bd('0xd'));var jsforce=require(_0xe4bd('0xe'));var deskjs=require(_0xe4bd('0xf'));var toCsv=require(_0xe4bd('0xa'));var querystring=require(_0xe4bd('0x10'));var Papa=require(_0xe4bd('0x11'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0xe4bd('0x12'));var logger=require(_0xe4bd('0x13'))(_0xe4bd('0x14'));var utils=require('../../config/utils');var config=require(_0xe4bd('0x15'));var db=require(_0xe4bd('0x16'))['db'];var jayson=require(_0xe4bd('0x17'));var client=jayson[_0xe4bd('0x18')]['http']({'port':0x232a});function respondWithRpcPromise(_0x7949ea,_0x5188e9,_0x44baa7,_0x5a37b9){return new BPromise(function(_0x3ce098,_0x15b9f9){var _0x25b993=_0x5a37b9||client;return _0x25b993[_0xe4bd('0x19')](_0x7949ea,_0x44baa7)[_0xe4bd('0x1a')](function(_0x37dd1b){logger[_0xe4bd('0x1b')](_0xe4bd('0x1c'),_0x5188e9,_0xe4bd('0x1d'));logger[_0xe4bd('0x1e')](_0xe4bd('0x1f'),_0x5188e9,_0xe4bd('0x1d'),JSON[_0xe4bd('0x20')](_0x37dd1b));if(_0x37dd1b['error']){if(_0x37dd1b[_0xe4bd('0x21')][_0xe4bd('0x22')]===0x1f4){logger['error'](_0xe4bd('0x1c'),_0x5188e9,_0x37dd1b[_0xe4bd('0x21')]['message']);return _0x15b9f9(_0x37dd1b[_0xe4bd('0x21')]['message']);}logger['error'](_0xe4bd('0x1c'),_0x5188e9,_0x37dd1b[_0xe4bd('0x21')][_0xe4bd('0x23')]);return _0x3ce098(_0x37dd1b[_0xe4bd('0x21')][_0xe4bd('0x23')]);}else{logger[_0xe4bd('0x1b')](_0xe4bd('0x1c'),_0x5188e9,'request\x20sent');_0x3ce098(_0x37dd1b[_0xe4bd('0x24')][_0xe4bd('0x23')]);}})['catch'](function(_0x2a5f40){logger[_0xe4bd('0x21')](_0xe4bd('0x1c'),_0x5188e9,_0x2a5f40);_0x15b9f9(_0x2a5f40);});});}function respondWithStatusCode(_0x3ae4c9,_0x1ba372){_0x1ba372=_0x1ba372||0xcc;return function(_0x2cfab3){if(_0x2cfab3){return _0x3ae4c9[_0xe4bd('0x25')](_0x1ba372);}return _0x3ae4c9[_0xe4bd('0x26')](_0x1ba372)[_0xe4bd('0x27')]();};}function respondWithResult(_0x4edd31,_0x1ab72b){_0x1ab72b=_0x1ab72b||0xc8;return function(_0x2ebf25){if(_0x2ebf25){return _0x4edd31['status'](_0x1ab72b)[_0xe4bd('0x28')](_0x2ebf25);}};}function respondWithFilteredResult(_0x19542c,_0x1fc9f5){return function(_0x11c70a){if(_0x11c70a){var _0x183a24=_0x11c70a['count'],_0x2b9dce=_0x1fc9f5[_0xe4bd('0x29')],_0x40e9c7=_0x1fc9f5[_0xe4bd('0x29')]+_0x1fc9f5[_0xe4bd('0x2a')],_0x3d8fc8;if(_0x40e9c7>=_0x183a24){_0x40e9c7=_0x183a24;_0x3d8fc8=0xc8;}else{_0x3d8fc8=0xce;}_0x19542c[_0xe4bd('0x26')](_0x3d8fc8);return _0x19542c[_0xe4bd('0x2b')](_0xe4bd('0x2c'),_0x2b9dce+'-'+_0x40e9c7+'/'+_0x183a24)[_0xe4bd('0x28')](_0x11c70a);}return null;};}function patchUpdates(_0x13d93a){return function(_0x56dcde){try{jsonpatch[_0xe4bd('0x2d')](_0x56dcde,_0x13d93a,!![]);}catch(_0x3cd035){return BPromise[_0xe4bd('0x2e')](_0x3cd035);}return _0x56dcde[_0xe4bd('0x2f')]();};}function saveUpdates(_0x42f69b,_0x1367a0){return function(_0x357af1){if(_0x357af1){return _0x357af1[_0xe4bd('0x30')](_0x42f69b)[_0xe4bd('0x1a')](function(_0x3b2508){return _0x3b2508;});}return null;};}function removeEntity(_0x2e5b95,_0x375cfa){return function(_0x5f0c6d){if(_0x5f0c6d){return _0x5f0c6d['destroy']()[_0xe4bd('0x1a')](function(){_0x2e5b95[_0xe4bd('0x26')](0xcc)[_0xe4bd('0x27')]();});}};}function handleEntityNotFound(_0x59c77f,_0x5a0045){return function(_0x33586d){if(!_0x33586d){_0x59c77f[_0xe4bd('0x25')](0x194);}return _0x33586d;};}function handleError(_0xcc6b0f,_0x3b4c39){_0x3b4c39=_0x3b4c39||0x1f4;return function(_0x1c30c3){logger[_0xe4bd('0x21')](_0x1c30c3[_0xe4bd('0x31')]);if(_0x1c30c3['name']){delete _0x1c30c3['name'];}_0xcc6b0f['status'](_0x3b4c39)[_0xe4bd('0x32')](_0x1c30c3);};}exports['index']=function(_0x55f039,_0x1563a5){var _0xd06885={},_0x5a4ab1={},_0x4acd74={'count':0x0,'rows':[]};var _0x74095c=db[_0xe4bd('0x33')]['rawAttributes'];_0x5a4ab1[_0xe4bd('0x34')]=_[_0xe4bd('0x35')](_0x74095c);_0x5a4ab1[_0xe4bd('0x36')]=_[_0xe4bd('0x35')](_0x55f039[_0xe4bd('0x36')]);_0x5a4ab1[_0xe4bd('0x37')]=_[_0xe4bd('0x38')](_0x5a4ab1[_0xe4bd('0x34')],_0x5a4ab1[_0xe4bd('0x36')]);_0xd06885[_0xe4bd('0x39')]=_[_0xe4bd('0x38')](_0x5a4ab1[_0xe4bd('0x34')],qs[_0xe4bd('0x3a')](_0x55f039[_0xe4bd('0x36')]['fields']));_0xd06885[_0xe4bd('0x39')]=_0xd06885[_0xe4bd('0x39')]['length']?_0xd06885[_0xe4bd('0x39')]:_0x5a4ab1['model'];if(!_0x55f039[_0xe4bd('0x36')][_0xe4bd('0x3b')](_0xe4bd('0x3c'))){_0xd06885['limit']=qs['limit'](_0x55f039[_0xe4bd('0x36')][_0xe4bd('0x2a')]);_0xd06885[_0xe4bd('0x29')]=qs[_0xe4bd('0x29')](_0x55f039['query']['offset']);}_0xd06885[_0xe4bd('0x3d')]=qs['sort'](_0x55f039[_0xe4bd('0x36')][_0xe4bd('0x3e')]);_0xd06885[_0xe4bd('0x3f')]=qs['filters'](_['pick'](_0x55f039[_0xe4bd('0x36')],_0x5a4ab1[_0xe4bd('0x37')]));if(_0x55f039[_0xe4bd('0x36')][_0xe4bd('0x40')]){_0xd06885['where']=_[_0xe4bd('0x41')](_0xd06885[_0xe4bd('0x3f')],{'$or':_[_0xe4bd('0x42')](_0x74095c,function(_0x4459a6){if(_0x4459a6['type'][_0xe4bd('0x43')]!==_0xe4bd('0x44')){var _0x5e208e={};_0x5e208e[_0x4459a6[_0xe4bd('0x45')]]={'$like':'%'+_0x55f039[_0xe4bd('0x36')][_0xe4bd('0x40')]+'%'};return _0x5e208e;}})});}_0xd06885=_[_0xe4bd('0x41')]({},_0xd06885,_0x55f039[_0xe4bd('0x46')]);var _0x210231={'where':_0xd06885[_0xe4bd('0x3f')]};return db['Dynamics365Configuration'][_0xe4bd('0x47')](_0x210231)[_0xe4bd('0x1a')](function(_0x758c92){_0x4acd74[_0xe4bd('0x47')]=_0x758c92;if(_0x55f039[_0xe4bd('0x36')][_0xe4bd('0x48')]){_0xd06885[_0xe4bd('0x49')]=[{'all':!![]}];}return db['Dynamics365Configuration']['findAll'](_0xd06885);})[_0xe4bd('0x1a')](function(_0x2a36e9){_0x4acd74[_0xe4bd('0x4a')]=_0x2a36e9;return _0x4acd74;})['then'](respondWithFilteredResult(_0x1563a5,_0xd06885))['catch'](handleError(_0x1563a5,null));};exports[_0xe4bd('0x4b')]=function(_0x4e5417,_0x346c59){var _0x180a06={'raw':![],'where':{'id':_0x4e5417[_0xe4bd('0x4c')]['id']}},_0x4ff2a2={};_0x4ff2a2[_0xe4bd('0x34')]=_[_0xe4bd('0x35')](db[_0xe4bd('0x33')][_0xe4bd('0x4d')]);_0x4ff2a2[_0xe4bd('0x36')]=_[_0xe4bd('0x35')](_0x4e5417['query']);_0x4ff2a2['filters']=_[_0xe4bd('0x38')](_0x4ff2a2[_0xe4bd('0x34')],_0x4ff2a2[_0xe4bd('0x36')]);_0x180a06[_0xe4bd('0x39')]=_[_0xe4bd('0x38')](_0x4ff2a2[_0xe4bd('0x34')],qs[_0xe4bd('0x3a')](_0x4e5417['query'][_0xe4bd('0x3a')]));_0x180a06[_0xe4bd('0x39')]=_0x180a06['attributes']['length']?_0x180a06[_0xe4bd('0x39')]:_0x4ff2a2[_0xe4bd('0x34')];if(_0x4e5417[_0xe4bd('0x36')]['includeAll']){_0x180a06[_0xe4bd('0x49')]=[{'all':!![]}];}_0x180a06=_[_0xe4bd('0x41')]({},_0x180a06,_0x4e5417['options']);return db[_0xe4bd('0x33')][_0xe4bd('0x4e')](_0x180a06)[_0xe4bd('0x1a')](handleEntityNotFound(_0x346c59,null))['then'](respondWithResult(_0x346c59,null))[_0xe4bd('0x4f')](handleError(_0x346c59,null));};exports[_0xe4bd('0x50')]=function(_0x2cbc56,_0x2ddc22){return db['Dynamics365Configuration'][_0xe4bd('0x50')](_0x2cbc56[_0xe4bd('0x51')],{})[_0xe4bd('0x1a')](respondWithResult(_0x2ddc22,0xc9))[_0xe4bd('0x4f')](handleError(_0x2ddc22,null));};exports[_0xe4bd('0x30')]=function(_0x1f492a,_0xde3bea){if(_0x1f492a[_0xe4bd('0x51')]['id']){delete _0x1f492a[_0xe4bd('0x51')]['id'];}return db[_0xe4bd('0x33')][_0xe4bd('0x4e')]({'where':{'id':_0x1f492a[_0xe4bd('0x4c')]['id']}})['then'](handleEntityNotFound(_0xde3bea,null))[_0xe4bd('0x1a')](saveUpdates(_0x1f492a['body'],null))[_0xe4bd('0x1a')](respondWithResult(_0xde3bea,null))[_0xe4bd('0x4f')](handleError(_0xde3bea,null));};exports[_0xe4bd('0x52')]=function(_0x28192d,_0x465c6e){return db[_0xe4bd('0x33')][_0xe4bd('0x4e')]({'where':{'id':_0x28192d[_0xe4bd('0x4c')]['id']}})[_0xe4bd('0x1a')](handleEntityNotFound(_0x465c6e,null))[_0xe4bd('0x1a')](removeEntity(_0x465c6e,null))[_0xe4bd('0x4f')](handleError(_0x465c6e,null));};exports[_0xe4bd('0x53')]=function(_0x3daa68,_0x39e674,_0x383006){var _0x5f0d1e={};var _0x5138a1={};var _0x18b768;var _0x4c2d3d;return db['Dynamics365Configuration'][_0xe4bd('0x54')]({'where':{'id':_0x3daa68[_0xe4bd('0x4c')]['id']}})[_0xe4bd('0x1a')](handleEntityNotFound(_0x39e674,null))[_0xe4bd('0x1a')](function(_0x3e644a){if(_0x3e644a){_0x18b768=_0x3e644a;_0x5138a1[_0xe4bd('0x34')]=_[_0xe4bd('0x35')](db['Dynamics365Field'][_0xe4bd('0x4d')]);_0x5138a1[_0xe4bd('0x36')]=_[_0xe4bd('0x35')](_0x3daa68[_0xe4bd('0x36')]);_0x5138a1[_0xe4bd('0x37')]=_[_0xe4bd('0x38')](_0x5138a1[_0xe4bd('0x34')],_0x5138a1['query']);_0x5f0d1e[_0xe4bd('0x39')]=_[_0xe4bd('0x38')](_0x5138a1[_0xe4bd('0x34')],qs[_0xe4bd('0x3a')](_0x3daa68[_0xe4bd('0x36')][_0xe4bd('0x3a')]));_0x5f0d1e['attributes']=_0x5f0d1e[_0xe4bd('0x39')][_0xe4bd('0x55')]?_0x5f0d1e[_0xe4bd('0x39')]:_0x5138a1[_0xe4bd('0x34')];_0x5f0d1e[_0xe4bd('0x3d')]=qs[_0xe4bd('0x3e')](_0x3daa68['query'][_0xe4bd('0x3e')]);_0x5f0d1e[_0xe4bd('0x3f')]=qs[_0xe4bd('0x37')](_[_0xe4bd('0x56')](_0x3daa68[_0xe4bd('0x36')],_0x5138a1[_0xe4bd('0x37')]));if(_0x3daa68[_0xe4bd('0x36')]['filter']){_0x5f0d1e[_0xe4bd('0x3f')]=_[_0xe4bd('0x41')](_0x5f0d1e[_0xe4bd('0x3f')],{'$or':_['map'](_0x5f0d1e[_0xe4bd('0x39')],function(_0x3d8787){var _0x2e7c00={};_0x2e7c00[_0x3d8787]={'$like':'%'+_0x3daa68[_0xe4bd('0x36')][_0xe4bd('0x40')]+'%'};return _0x2e7c00;})});}_0x5f0d1e=_['merge']({},_0x5f0d1e,_0x3daa68[_0xe4bd('0x46')]);return _0x18b768['getFields'](_0x5f0d1e);}})[_0xe4bd('0x1a')](function(_0x3559de){if(_0x3559de){_0x4c2d3d=_0x3559de['length'];if(!_0x3daa68[_0xe4bd('0x36')][_0xe4bd('0x3b')](_0xe4bd('0x3c'))){_0x5f0d1e[_0xe4bd('0x2a')]=qs['limit'](_0x3daa68[_0xe4bd('0x36')]['limit']);_0x5f0d1e[_0xe4bd('0x29')]=qs[_0xe4bd('0x29')](_0x3daa68[_0xe4bd('0x36')]['offset']);}return _0x18b768[_0xe4bd('0x53')](_0x5f0d1e);}})[_0xe4bd('0x1a')](function(_0x594e04){if(_0x594e04){return _0x594e04?{'count':_0x4c2d3d,'rows':_0x594e04}:null;}})[_0xe4bd('0x1a')](respondWithResult(_0x39e674,null))[_0xe4bd('0x4f')](handleError(_0x39e674,null));};exports[_0xe4bd('0x57')]=function(_0x53a5a1,_0x18b08c,_0x1d4d84){var _0x487c5c={};var _0x43b93a={};var _0x108fe0;var _0x30c124;return db[_0xe4bd('0x33')][_0xe4bd('0x54')]({'where':{'id':_0x53a5a1[_0xe4bd('0x4c')]['id']}})[_0xe4bd('0x1a')](handleEntityNotFound(_0x18b08c,null))[_0xe4bd('0x1a')](function(_0x3fc5d0){if(_0x3fc5d0){_0x108fe0=_0x3fc5d0;_0x43b93a['model']=_[_0xe4bd('0x35')](db[_0xe4bd('0x58')]['rawAttributes']);_0x43b93a[_0xe4bd('0x36')]=_[_0xe4bd('0x35')](_0x53a5a1[_0xe4bd('0x36')]);_0x43b93a['filters']=_['intersection'](_0x43b93a[_0xe4bd('0x34')],_0x43b93a[_0xe4bd('0x36')]);_0x487c5c[_0xe4bd('0x39')]=_[_0xe4bd('0x38')](_0x43b93a[_0xe4bd('0x34')],qs['fields'](_0x53a5a1['query']['fields']));_0x487c5c[_0xe4bd('0x39')]=_0x487c5c[_0xe4bd('0x39')][_0xe4bd('0x55')]?_0x487c5c[_0xe4bd('0x39')]:_0x43b93a[_0xe4bd('0x34')];_0x487c5c[_0xe4bd('0x3d')]=qs[_0xe4bd('0x3e')](_0x53a5a1[_0xe4bd('0x36')]['sort']);_0x487c5c[_0xe4bd('0x3f')]=qs[_0xe4bd('0x37')](_['pick'](_0x53a5a1[_0xe4bd('0x36')],_0x43b93a[_0xe4bd('0x37')]));if(_0x53a5a1[_0xe4bd('0x36')][_0xe4bd('0x40')]){_0x487c5c[_0xe4bd('0x3f')]=_[_0xe4bd('0x41')](_0x487c5c[_0xe4bd('0x3f')],{'$or':_['map'](_0x487c5c[_0xe4bd('0x39')],function(_0x1dda17){var _0xd8af95={};_0xd8af95[_0x1dda17]={'$like':'%'+_0x53a5a1[_0xe4bd('0x36')][_0xe4bd('0x40')]+'%'};return _0xd8af95;})});}_0x487c5c=_['merge']({},_0x487c5c,_0x53a5a1[_0xe4bd('0x46')]);return _0x108fe0['getSubjects'](_0x487c5c);}})[_0xe4bd('0x1a')](function(_0x5160cf){if(_0x5160cf){_0x30c124=_0x5160cf[_0xe4bd('0x55')];if(!_0x53a5a1[_0xe4bd('0x36')][_0xe4bd('0x3b')]('nolimit')){_0x487c5c[_0xe4bd('0x2a')]=qs[_0xe4bd('0x2a')](_0x53a5a1[_0xe4bd('0x36')]['limit']);_0x487c5c[_0xe4bd('0x29')]=qs[_0xe4bd('0x29')](_0x53a5a1[_0xe4bd('0x36')]['offset']);}return _0x108fe0[_0xe4bd('0x57')](_0x487c5c);}})['then'](function(_0x4be855){if(_0x4be855){return _0x4be855?{'count':_0x30c124,'rows':_0x4be855}:null;}})['then'](respondWithResult(_0x18b08c,null))[_0xe4bd('0x4f')](handleError(_0x18b08c,null));};exports['getDescriptions']=function(_0x135b0f,_0x4281e0,_0x3dc3b0){var _0x40501c={};var _0x55cb79={};var _0x363191;var _0x158436;return db[_0xe4bd('0x33')][_0xe4bd('0x54')]({'where':{'id':_0x135b0f[_0xe4bd('0x4c')]['id']}})[_0xe4bd('0x1a')](handleEntityNotFound(_0x4281e0,null))[_0xe4bd('0x1a')](function(_0x1d4be2){if(_0x1d4be2){_0x363191=_0x1d4be2;_0x55cb79[_0xe4bd('0x34')]=_[_0xe4bd('0x35')](db[_0xe4bd('0x58')][_0xe4bd('0x4d')]);_0x55cb79[_0xe4bd('0x36')]=_['keys'](_0x135b0f[_0xe4bd('0x36')]);_0x55cb79[_0xe4bd('0x37')]=_['intersection'](_0x55cb79['model'],_0x55cb79[_0xe4bd('0x36')]);_0x40501c[_0xe4bd('0x39')]=_['intersection'](_0x55cb79['model'],qs[_0xe4bd('0x3a')](_0x135b0f['query'][_0xe4bd('0x3a')]));_0x40501c[_0xe4bd('0x39')]=_0x40501c[_0xe4bd('0x39')][_0xe4bd('0x55')]?_0x40501c[_0xe4bd('0x39')]:_0x55cb79[_0xe4bd('0x34')];_0x40501c['order']=qs['sort'](_0x135b0f[_0xe4bd('0x36')][_0xe4bd('0x3e')]);_0x40501c[_0xe4bd('0x3f')]=qs[_0xe4bd('0x37')](_[_0xe4bd('0x56')](_0x135b0f[_0xe4bd('0x36')],_0x55cb79['filters']));if(_0x135b0f['query'][_0xe4bd('0x40')]){_0x40501c[_0xe4bd('0x3f')]=_[_0xe4bd('0x41')](_0x40501c[_0xe4bd('0x3f')],{'$or':_[_0xe4bd('0x42')](_0x40501c['attributes'],function(_0x3fb13a){var _0x1b81b9={};_0x1b81b9[_0x3fb13a]={'$like':'%'+_0x135b0f[_0xe4bd('0x36')]['filter']+'%'};return _0x1b81b9;})});}_0x40501c=_[_0xe4bd('0x41')]({},_0x40501c,_0x135b0f[_0xe4bd('0x46')]);return _0x363191[_0xe4bd('0x59')](_0x40501c);}})['then'](function(_0x1b632e){if(_0x1b632e){_0x158436=_0x1b632e[_0xe4bd('0x55')];if(!_0x135b0f[_0xe4bd('0x36')]['hasOwnProperty'](_0xe4bd('0x3c'))){_0x40501c[_0xe4bd('0x2a')]=qs['limit'](_0x135b0f['query'][_0xe4bd('0x2a')]);_0x40501c[_0xe4bd('0x29')]=qs[_0xe4bd('0x29')](_0x135b0f[_0xe4bd('0x36')]['offset']);}return _0x363191[_0xe4bd('0x59')](_0x40501c);}})[_0xe4bd('0x1a')](function(_0x2608c2){if(_0x2608c2){return _0x2608c2?{'count':_0x158436,'rows':_0x2608c2}:null;}})[_0xe4bd('0x1a')](respondWithResult(_0x4281e0,null))[_0xe4bd('0x4f')](handleError(_0x4281e0,null));};
\ No newline at end of file
+var _0x3c66=['end','json','count','offset','Content-Range','apply','reject','save','update','then','destroy','stack','name','index','Dynamics365Configuration','model','keys','query','filters','intersection','attributes','fields','nolimit','limit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','includeAll','findAll','rows','show','rawAttributes','length','include','find','create','body','params','findOne','options','getFields','hasOwnProperty','getSubjects','Dynamics365Field','getDescriptions','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','request','info','request\x20sent','error','Dynamics365Configuration,\x20%s,\x20%s','message','result','catch','sendStatus','status'];(function(_0x59045b,_0x12b72d){var _0x49cf0e=function(_0x6d5057){while(--_0x6d5057){_0x59045b['push'](_0x59045b['shift']());}};_0x49cf0e(++_0x12b72d);}(_0x3c66,0x8b));var _0x63c6=function(_0x427a64,_0x1c7b9e){_0x427a64=_0x427a64-0x0;var _0x2fe1e5=_0x3c66[_0x427a64];return _0x2fe1e5;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x63c6('0x0'));var jsonpatch=require(_0x63c6('0x1'));var rp=require(_0x63c6('0x2'));var moment=require(_0x63c6('0x3'));var BPromise=require(_0x63c6('0x4'));var Mustache=require(_0x63c6('0x5'));var util=require(_0x63c6('0x6'));var path=require(_0x63c6('0x7'));var sox=require(_0x63c6('0x8'));var csv=require(_0x63c6('0x9'));var ejs=require(_0x63c6('0xa'));var fs=require('fs');var _=require(_0x63c6('0xb'));var squel=require('squel');var crypto=require(_0x63c6('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x63c6('0xd'));var toCsv=require(_0x63c6('0x9'));var querystring=require('querystring');var Papa=require(_0x63c6('0xe'));var authService=require(_0x63c6('0xf'));var hardwareService=require(_0x63c6('0x10'));var Redis=require(_0x63c6('0x11'));var qs=require(_0x63c6('0x12'));var logger=require(_0x63c6('0x13'))('api');var utils=require(_0x63c6('0x14'));var config=require(_0x63c6('0x15'));var db=require(_0x63c6('0x16'))['db'];var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x528dc1,_0x59373e,_0x482547,_0x332c5e){return new BPromise(function(_0x69911c,_0x1cd490){var _0x9c3ab3=_0x332c5e||client;return _0x9c3ab3[_0x63c6('0x17')](_0x528dc1,_0x482547)['then'](function(_0x286eb8){logger[_0x63c6('0x18')]('Dynamics365Configuration,\x20%s,\x20%s',_0x59373e,_0x63c6('0x19'));logger['debug']('Dynamics365Configuration,\x20%s,\x20%s,\x20%s',_0x59373e,_0x63c6('0x19'),JSON['stringify'](_0x286eb8));if(_0x286eb8[_0x63c6('0x1a')]){if(_0x286eb8[_0x63c6('0x1a')]['code']===0x1f4){logger[_0x63c6('0x1a')](_0x63c6('0x1b'),_0x59373e,_0x286eb8[_0x63c6('0x1a')][_0x63c6('0x1c')]);return _0x1cd490(_0x286eb8[_0x63c6('0x1a')]['message']);}logger['error']('Dynamics365Configuration,\x20%s,\x20%s',_0x59373e,_0x286eb8[_0x63c6('0x1a')]['message']);return _0x69911c(_0x286eb8['error'][_0x63c6('0x1c')]);}else{logger[_0x63c6('0x18')]('Dynamics365Configuration,\x20%s,\x20%s',_0x59373e,_0x63c6('0x19'));_0x69911c(_0x286eb8[_0x63c6('0x1d')][_0x63c6('0x1c')]);}})[_0x63c6('0x1e')](function(_0x430a6e){logger['error'](_0x63c6('0x1b'),_0x59373e,_0x430a6e);_0x1cd490(_0x430a6e);});});}function respondWithStatusCode(_0x3d180e,_0x19fd72){_0x19fd72=_0x19fd72||0xcc;return function(_0x35098c){if(_0x35098c){return _0x3d180e[_0x63c6('0x1f')](_0x19fd72);}return _0x3d180e[_0x63c6('0x20')](_0x19fd72)[_0x63c6('0x21')]();};}function respondWithResult(_0x2e3580,_0x4c0d24){_0x4c0d24=_0x4c0d24||0xc8;return function(_0x336d8a){if(_0x336d8a){return _0x2e3580[_0x63c6('0x20')](_0x4c0d24)[_0x63c6('0x22')](_0x336d8a);}};}function respondWithFilteredResult(_0x59cd9f,_0x52f9b1){return function(_0x21eaf2){if(_0x21eaf2){var _0x5575c1=_0x21eaf2[_0x63c6('0x23')],_0x2a0ccf=_0x52f9b1[_0x63c6('0x24')],_0x4c23e8=_0x52f9b1[_0x63c6('0x24')]+_0x52f9b1['limit'],_0x4c0bed;if(_0x4c23e8>=_0x5575c1){_0x4c23e8=_0x5575c1;_0x4c0bed=0xc8;}else{_0x4c0bed=0xce;}_0x59cd9f[_0x63c6('0x20')](_0x4c0bed);return _0x59cd9f['set'](_0x63c6('0x25'),_0x2a0ccf+'-'+_0x4c23e8+'/'+_0x5575c1)[_0x63c6('0x22')](_0x21eaf2);}return null;};}function patchUpdates(_0x393424){return function(_0x47315c){try{jsonpatch[_0x63c6('0x26')](_0x47315c,_0x393424,!![]);}catch(_0x6f36be){return BPromise[_0x63c6('0x27')](_0x6f36be);}return _0x47315c[_0x63c6('0x28')]();};}function saveUpdates(_0x5896cf,_0x772b2f){return function(_0x2aa5e0){if(_0x2aa5e0){return _0x2aa5e0[_0x63c6('0x29')](_0x5896cf)[_0x63c6('0x2a')](function(_0x53666b){return _0x53666b;});}return null;};}function removeEntity(_0xff8be4,_0x5af417){return function(_0x49425a){if(_0x49425a){return _0x49425a[_0x63c6('0x2b')]()[_0x63c6('0x2a')](function(){_0xff8be4[_0x63c6('0x20')](0xcc)[_0x63c6('0x21')]();});}};}function handleEntityNotFound(_0x16068a,_0x3a522e){return function(_0x389050){if(!_0x389050){_0x16068a['sendStatus'](0x194);}return _0x389050;};}function handleError(_0x32d2b7,_0x57df2b){_0x57df2b=_0x57df2b||0x1f4;return function(_0x394451){logger['error'](_0x394451[_0x63c6('0x2c')]);if(_0x394451['name']){delete _0x394451[_0x63c6('0x2d')];}_0x32d2b7['status'](_0x57df2b)['send'](_0x394451);};}exports[_0x63c6('0x2e')]=function(_0x22dd39,_0x89cc69){var _0x4982dc={},_0x37faf2={},_0x1d438f={'count':0x0,'rows':[]};var _0x3861d6=db[_0x63c6('0x2f')]['rawAttributes'];_0x37faf2[_0x63c6('0x30')]=_[_0x63c6('0x31')](_0x3861d6);_0x37faf2['query']=_[_0x63c6('0x31')](_0x22dd39[_0x63c6('0x32')]);_0x37faf2[_0x63c6('0x33')]=_[_0x63c6('0x34')](_0x37faf2[_0x63c6('0x30')],_0x37faf2[_0x63c6('0x32')]);_0x4982dc[_0x63c6('0x35')]=_[_0x63c6('0x34')](_0x37faf2[_0x63c6('0x30')],qs[_0x63c6('0x36')](_0x22dd39[_0x63c6('0x32')][_0x63c6('0x36')]));_0x4982dc['attributes']=_0x4982dc[_0x63c6('0x35')]['length']?_0x4982dc[_0x63c6('0x35')]:_0x37faf2[_0x63c6('0x30')];if(!_0x22dd39['query']['hasOwnProperty'](_0x63c6('0x37'))){_0x4982dc[_0x63c6('0x38')]=qs[_0x63c6('0x38')](_0x22dd39[_0x63c6('0x32')][_0x63c6('0x38')]);_0x4982dc['offset']=qs[_0x63c6('0x24')](_0x22dd39['query']['offset']);}_0x4982dc[_0x63c6('0x39')]=qs[_0x63c6('0x3a')](_0x22dd39[_0x63c6('0x32')][_0x63c6('0x3a')]);_0x4982dc[_0x63c6('0x3b')]=qs[_0x63c6('0x33')](_[_0x63c6('0x3c')](_0x22dd39[_0x63c6('0x32')],_0x37faf2[_0x63c6('0x33')]));if(_0x22dd39[_0x63c6('0x32')][_0x63c6('0x3d')]){_0x4982dc[_0x63c6('0x3b')]=_[_0x63c6('0x3e')](_0x4982dc[_0x63c6('0x3b')],{'$or':_[_0x63c6('0x3f')](_0x3861d6,function(_0x1ebd6b){if(_0x1ebd6b[_0x63c6('0x40')][_0x63c6('0x41')]!==_0x63c6('0x42')){var _0x5ee0a7={};_0x5ee0a7[_0x1ebd6b[_0x63c6('0x43')]]={'$like':'%'+_0x22dd39['query']['filter']+'%'};return _0x5ee0a7;}})});}_0x4982dc=_['merge']({},_0x4982dc,_0x22dd39['options']);var _0x4767a7={'where':_0x4982dc[_0x63c6('0x3b')]};return db['Dynamics365Configuration'][_0x63c6('0x23')](_0x4767a7)['then'](function(_0x3e8536){_0x1d438f[_0x63c6('0x23')]=_0x3e8536;if(_0x22dd39[_0x63c6('0x32')][_0x63c6('0x44')]){_0x4982dc['include']=[{'all':!![]}];}return db[_0x63c6('0x2f')][_0x63c6('0x45')](_0x4982dc);})[_0x63c6('0x2a')](function(_0x22bc84){_0x1d438f[_0x63c6('0x46')]=_0x22bc84;return _0x1d438f;})[_0x63c6('0x2a')](respondWithFilteredResult(_0x89cc69,_0x4982dc))[_0x63c6('0x1e')](handleError(_0x89cc69,null));};exports[_0x63c6('0x47')]=function(_0x50998d,_0x23eb71){var _0x3ab43b={'raw':![],'where':{'id':_0x50998d['params']['id']}},_0x23ad77={};_0x23ad77[_0x63c6('0x30')]=_[_0x63c6('0x31')](db[_0x63c6('0x2f')][_0x63c6('0x48')]);_0x23ad77[_0x63c6('0x32')]=_['keys'](_0x50998d[_0x63c6('0x32')]);_0x23ad77[_0x63c6('0x33')]=_['intersection'](_0x23ad77[_0x63c6('0x30')],_0x23ad77[_0x63c6('0x32')]);_0x3ab43b[_0x63c6('0x35')]=_[_0x63c6('0x34')](_0x23ad77[_0x63c6('0x30')],qs[_0x63c6('0x36')](_0x50998d['query'][_0x63c6('0x36')]));_0x3ab43b[_0x63c6('0x35')]=_0x3ab43b[_0x63c6('0x35')][_0x63c6('0x49')]?_0x3ab43b['attributes']:_0x23ad77[_0x63c6('0x30')];if(_0x50998d[_0x63c6('0x32')]['includeAll']){_0x3ab43b[_0x63c6('0x4a')]=[{'all':!![]}];}_0x3ab43b=_[_0x63c6('0x3e')]({},_0x3ab43b,_0x50998d['options']);return db['Dynamics365Configuration'][_0x63c6('0x4b')](_0x3ab43b)[_0x63c6('0x2a')](handleEntityNotFound(_0x23eb71,null))[_0x63c6('0x2a')](respondWithResult(_0x23eb71,null))[_0x63c6('0x1e')](handleError(_0x23eb71,null));};exports['create']=function(_0x4fbdef,_0x23fe82){return db['Dynamics365Configuration'][_0x63c6('0x4c')](_0x4fbdef[_0x63c6('0x4d')],{})[_0x63c6('0x2a')](respondWithResult(_0x23fe82,0xc9))[_0x63c6('0x1e')](handleError(_0x23fe82,null));};exports[_0x63c6('0x29')]=function(_0x5eaf90,_0x288c9a){if(_0x5eaf90[_0x63c6('0x4d')]['id']){delete _0x5eaf90[_0x63c6('0x4d')]['id'];}return db['Dynamics365Configuration']['find']({'where':{'id':_0x5eaf90[_0x63c6('0x4e')]['id']}})[_0x63c6('0x2a')](handleEntityNotFound(_0x288c9a,null))[_0x63c6('0x2a')](saveUpdates(_0x5eaf90[_0x63c6('0x4d')],null))[_0x63c6('0x2a')](respondWithResult(_0x288c9a,null))[_0x63c6('0x1e')](handleError(_0x288c9a,null));};exports[_0x63c6('0x2b')]=function(_0x57a3be,_0x257821){return db[_0x63c6('0x2f')][_0x63c6('0x4b')]({'where':{'id':_0x57a3be[_0x63c6('0x4e')]['id']}})[_0x63c6('0x2a')](handleEntityNotFound(_0x257821,null))[_0x63c6('0x2a')](removeEntity(_0x257821,null))[_0x63c6('0x1e')](handleError(_0x257821,null));};exports['getFields']=function(_0x4f145d,_0x9c5298,_0x13d834){var _0x1541e7={};var _0x575ea2={};var _0x3b3d7a;var _0x18fb7a;return db[_0x63c6('0x2f')][_0x63c6('0x4f')]({'where':{'id':_0x4f145d[_0x63c6('0x4e')]['id']}})[_0x63c6('0x2a')](handleEntityNotFound(_0x9c5298,null))[_0x63c6('0x2a')](function(_0x182324){if(_0x182324){_0x3b3d7a=_0x182324;_0x575ea2[_0x63c6('0x30')]=_[_0x63c6('0x31')](db['Dynamics365Field'][_0x63c6('0x48')]);_0x575ea2['query']=_['keys'](_0x4f145d[_0x63c6('0x32')]);_0x575ea2['filters']=_[_0x63c6('0x34')](_0x575ea2[_0x63c6('0x30')],_0x575ea2[_0x63c6('0x32')]);_0x1541e7[_0x63c6('0x35')]=_['intersection'](_0x575ea2[_0x63c6('0x30')],qs[_0x63c6('0x36')](_0x4f145d['query'][_0x63c6('0x36')]));_0x1541e7[_0x63c6('0x35')]=_0x1541e7['attributes'][_0x63c6('0x49')]?_0x1541e7[_0x63c6('0x35')]:_0x575ea2['model'];_0x1541e7['order']=qs[_0x63c6('0x3a')](_0x4f145d[_0x63c6('0x32')][_0x63c6('0x3a')]);_0x1541e7['where']=qs[_0x63c6('0x33')](_['pick'](_0x4f145d[_0x63c6('0x32')],_0x575ea2[_0x63c6('0x33')]));if(_0x4f145d[_0x63c6('0x32')][_0x63c6('0x3d')]){_0x1541e7[_0x63c6('0x3b')]=_[_0x63c6('0x3e')](_0x1541e7['where'],{'$or':_['map'](_0x1541e7[_0x63c6('0x35')],function(_0x1da820){var _0x4a5908={};_0x4a5908[_0x1da820]={'$like':'%'+_0x4f145d[_0x63c6('0x32')]['filter']+'%'};return _0x4a5908;})});}_0x1541e7=_[_0x63c6('0x3e')]({},_0x1541e7,_0x4f145d[_0x63c6('0x50')]);return _0x3b3d7a[_0x63c6('0x51')](_0x1541e7);}})[_0x63c6('0x2a')](function(_0xca620e){if(_0xca620e){_0x18fb7a=_0xca620e['length'];if(!_0x4f145d[_0x63c6('0x32')][_0x63c6('0x52')]('nolimit')){_0x1541e7[_0x63c6('0x38')]=qs[_0x63c6('0x38')](_0x4f145d[_0x63c6('0x32')][_0x63c6('0x38')]);_0x1541e7['offset']=qs[_0x63c6('0x24')](_0x4f145d['query'][_0x63c6('0x24')]);}return _0x3b3d7a[_0x63c6('0x51')](_0x1541e7);}})[_0x63c6('0x2a')](function(_0x2ffd3f){if(_0x2ffd3f){return _0x2ffd3f?{'count':_0x18fb7a,'rows':_0x2ffd3f}:null;}})[_0x63c6('0x2a')](respondWithResult(_0x9c5298,null))[_0x63c6('0x1e')](handleError(_0x9c5298,null));};exports[_0x63c6('0x53')]=function(_0x14fe67,_0x568f0c,_0x280788){var _0x35d07f={};var _0x426653={};var _0x5a91d3;var _0x406148;return db[_0x63c6('0x2f')]['findOne']({'where':{'id':_0x14fe67[_0x63c6('0x4e')]['id']}})[_0x63c6('0x2a')](handleEntityNotFound(_0x568f0c,null))[_0x63c6('0x2a')](function(_0x3a5f46){if(_0x3a5f46){_0x5a91d3=_0x3a5f46;_0x426653['model']=_[_0x63c6('0x31')](db[_0x63c6('0x54')][_0x63c6('0x48')]);_0x426653['query']=_['keys'](_0x14fe67[_0x63c6('0x32')]);_0x426653[_0x63c6('0x33')]=_[_0x63c6('0x34')](_0x426653[_0x63c6('0x30')],_0x426653['query']);_0x35d07f['attributes']=_[_0x63c6('0x34')](_0x426653[_0x63c6('0x30')],qs[_0x63c6('0x36')](_0x14fe67[_0x63c6('0x32')][_0x63c6('0x36')]));_0x35d07f[_0x63c6('0x35')]=_0x35d07f['attributes'][_0x63c6('0x49')]?_0x35d07f[_0x63c6('0x35')]:_0x426653[_0x63c6('0x30')];_0x35d07f[_0x63c6('0x39')]=qs['sort'](_0x14fe67[_0x63c6('0x32')][_0x63c6('0x3a')]);_0x35d07f['where']=qs[_0x63c6('0x33')](_[_0x63c6('0x3c')](_0x14fe67[_0x63c6('0x32')],_0x426653[_0x63c6('0x33')]));if(_0x14fe67[_0x63c6('0x32')]['filter']){_0x35d07f[_0x63c6('0x3b')]=_[_0x63c6('0x3e')](_0x35d07f[_0x63c6('0x3b')],{'$or':_['map'](_0x35d07f[_0x63c6('0x35')],function(_0x4ab032){var _0x189156={};_0x189156[_0x4ab032]={'$like':'%'+_0x14fe67[_0x63c6('0x32')][_0x63c6('0x3d')]+'%'};return _0x189156;})});}_0x35d07f=_[_0x63c6('0x3e')]({},_0x35d07f,_0x14fe67['options']);return _0x5a91d3[_0x63c6('0x53')](_0x35d07f);}})['then'](function(_0x2531cb){if(_0x2531cb){_0x406148=_0x2531cb[_0x63c6('0x49')];if(!_0x14fe67[_0x63c6('0x32')][_0x63c6('0x52')](_0x63c6('0x37'))){_0x35d07f[_0x63c6('0x38')]=qs[_0x63c6('0x38')](_0x14fe67[_0x63c6('0x32')][_0x63c6('0x38')]);_0x35d07f[_0x63c6('0x24')]=qs[_0x63c6('0x24')](_0x14fe67[_0x63c6('0x32')][_0x63c6('0x24')]);}return _0x5a91d3[_0x63c6('0x53')](_0x35d07f);}})[_0x63c6('0x2a')](function(_0x19c8c7){if(_0x19c8c7){return _0x19c8c7?{'count':_0x406148,'rows':_0x19c8c7}:null;}})[_0x63c6('0x2a')](respondWithResult(_0x568f0c,null))[_0x63c6('0x1e')](handleError(_0x568f0c,null));};exports[_0x63c6('0x55')]=function(_0x4c6bd6,_0x5de399,_0x3fa2fd){var _0x356744={};var _0x36e39f={};var _0x5d7e24;var _0x2437b6;return db[_0x63c6('0x2f')][_0x63c6('0x4f')]({'where':{'id':_0x4c6bd6[_0x63c6('0x4e')]['id']}})[_0x63c6('0x2a')](handleEntityNotFound(_0x5de399,null))[_0x63c6('0x2a')](function(_0x4f2d8b){if(_0x4f2d8b){_0x5d7e24=_0x4f2d8b;_0x36e39f['model']=_[_0x63c6('0x31')](db[_0x63c6('0x54')][_0x63c6('0x48')]);_0x36e39f[_0x63c6('0x32')]=_[_0x63c6('0x31')](_0x4c6bd6[_0x63c6('0x32')]);_0x36e39f[_0x63c6('0x33')]=_[_0x63c6('0x34')](_0x36e39f[_0x63c6('0x30')],_0x36e39f[_0x63c6('0x32')]);_0x356744[_0x63c6('0x35')]=_[_0x63c6('0x34')](_0x36e39f['model'],qs[_0x63c6('0x36')](_0x4c6bd6[_0x63c6('0x32')][_0x63c6('0x36')]));_0x356744[_0x63c6('0x35')]=_0x356744[_0x63c6('0x35')][_0x63c6('0x49')]?_0x356744[_0x63c6('0x35')]:_0x36e39f[_0x63c6('0x30')];_0x356744[_0x63c6('0x39')]=qs[_0x63c6('0x3a')](_0x4c6bd6[_0x63c6('0x32')][_0x63c6('0x3a')]);_0x356744['where']=qs['filters'](_['pick'](_0x4c6bd6[_0x63c6('0x32')],_0x36e39f[_0x63c6('0x33')]));if(_0x4c6bd6[_0x63c6('0x32')][_0x63c6('0x3d')]){_0x356744[_0x63c6('0x3b')]=_[_0x63c6('0x3e')](_0x356744[_0x63c6('0x3b')],{'$or':_[_0x63c6('0x3f')](_0x356744[_0x63c6('0x35')],function(_0x5e2587){var _0x38effd={};_0x38effd[_0x5e2587]={'$like':'%'+_0x4c6bd6[_0x63c6('0x32')][_0x63c6('0x3d')]+'%'};return _0x38effd;})});}_0x356744=_[_0x63c6('0x3e')]({},_0x356744,_0x4c6bd6[_0x63c6('0x50')]);return _0x5d7e24[_0x63c6('0x55')](_0x356744);}})[_0x63c6('0x2a')](function(_0x4453c6){if(_0x4453c6){_0x2437b6=_0x4453c6['length'];if(!_0x4c6bd6['query']['hasOwnProperty'](_0x63c6('0x37'))){_0x356744[_0x63c6('0x38')]=qs[_0x63c6('0x38')](_0x4c6bd6[_0x63c6('0x32')][_0x63c6('0x38')]);_0x356744[_0x63c6('0x24')]=qs['offset'](_0x4c6bd6[_0x63c6('0x32')][_0x63c6('0x24')]);}return _0x5d7e24[_0x63c6('0x55')](_0x356744);}})[_0x63c6('0x2a')](function(_0xf061e4){if(_0xf061e4){return _0xf061e4?{'count':_0x2437b6,'rows':_0xf061e4}:null;}})[_0x63c6('0x2a')](respondWithResult(_0x5de399,null))[_0x63c6('0x1e')](handleError(_0x5de399,null));};
\ No newline at end of file
index b8f8403..d9f1ccf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc566=['int_dynamics365_configurations','lodash','util','../../config/logger','api','moment','request-promise','./intDynamics365Configuration.attributes','define','Dynamics365Configuration'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0xc566,0x15f));var _0x6c56=function(_0x2eb751,_0xe3afbb){_0x2eb751=_0x2eb751-0x0;var _0x296a71=_0xc566[_0x2eb751];return _0x296a71;};'use strict';var _=require(_0x6c56('0x0'));var util=require(_0x6c56('0x1'));var logger=require(_0x6c56('0x2'))(_0x6c56('0x3'));var moment=require(_0x6c56('0x4'));var BPromise=require('bluebird');var rp=require(_0x6c56('0x5'));var attributes=require(_0x6c56('0x6'));module['exports']=function(_0x56a0a4,_0x214d85){return _0x56a0a4[_0x6c56('0x7')](_0x6c56('0x8'),attributes,{'tableName':_0x6c56('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xcf88=['../../config/logger','api','moment','request-promise','./intDynamics365Configuration.attributes','define','Dynamics365Configuration','int_dynamics365_configurations','lodash','util'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0xcf88,0x1ca));var _0x8cf8=function(_0xc6be3a,_0x540e05){_0xc6be3a=_0xc6be3a-0x0;var _0x56a310=_0xcf88[_0xc6be3a];return _0x56a310;};'use strict';var _=require(_0x8cf8('0x0'));var util=require(_0x8cf8('0x1'));var logger=require(_0x8cf8('0x2'))(_0x8cf8('0x3'));var moment=require(_0x8cf8('0x4'));var BPromise=require('bluebird');var rp=require(_0x8cf8('0x5'));var attributes=require(_0x8cf8('0x6'));module['exports']=function(_0x1589b2,_0x424bb5){return _0x1589b2[_0x8cf8('0x7')](_0x8cf8('0x8'),attributes,{'tableName':_0x8cf8('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 97b2916..9442aa5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x811a=['../../config/environment','jayson/promise','client','http','then','Dynamics365Configuration,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','rpc'];(function(_0x5cd4c4,_0x27fe6c){var _0x1a39a5=function(_0x36fdd8){while(--_0x36fdd8){_0x5cd4c4['push'](_0x5cd4c4['shift']());}};_0x1a39a5(++_0x27fe6c);}(_0x811a,0x19d));var _0xa811=function(_0x2dcdc1,_0x80fa86){_0x2dcdc1=_0x2dcdc1-0x0;var _0x312e06=_0x811a[_0x2dcdc1];return _0x312e06;};'use strict';var _=require(_0xa811('0x0'));var util=require(_0xa811('0x1'));var moment=require('moment');var BPromise=require(_0xa811('0x2'));var rs=require(_0xa811('0x3'));var fs=require('fs');var Redis=require(_0xa811('0x4'));var db=require(_0xa811('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xa811('0x6'));var config=require(_0xa811('0x7'));var jayson=require(_0xa811('0x8'));var client=jayson[_0xa811('0x9')][_0xa811('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x42aa10,_0x58a675,_0x2f4fd1){return new BPromise(function(_0x17a3d5,_0x44c303){return client['request'](_0x42aa10,_0x2f4fd1)[_0xa811('0xb')](function(_0x469ba7){logger['info'](_0xa811('0xc'),_0x58a675,'request\x20sent');logger[_0xa811('0xd')]('Dynamics365Configuration,\x20%s,\x20%s,\x20%s',_0x58a675,_0xa811('0xe'),JSON[_0xa811('0xf')](_0x469ba7));if(_0x469ba7[_0xa811('0x10')]){if(_0x469ba7['error'][_0xa811('0x11')]===0x1f4){logger[_0xa811('0x10')](_0xa811('0xc'),_0x58a675,_0x469ba7[_0xa811('0x10')]['message']);return _0x44c303(_0x469ba7[_0xa811('0x10')]['message']);}logger['error'](_0xa811('0xc'),_0x58a675,_0x469ba7[_0xa811('0x10')][_0xa811('0x12')]);return _0x17a3d5(_0x469ba7[_0xa811('0x10')]['message']);}else{logger['info'](_0xa811('0xc'),_0x58a675,_0xa811('0xe'));_0x17a3d5(_0x469ba7[_0xa811('0x13')]['message']);}})[_0xa811('0x14')](function(_0x2eeb8f){logger['error'](_0xa811('0xc'),_0x58a675,_0x2eeb8f);_0x44c303(_0x2eeb8f);});});}
\ No newline at end of file
+var _0x70bc=['request\x20sent','debug','stringify','code','error','message','result','catch','lodash','util','moment','randomstring','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','Dynamics365Configuration,\x20%s,\x20%s'];(function(_0x29a29f,_0x155ce7){var _0x443ea3=function(_0xe0dd24){while(--_0xe0dd24){_0x29a29f['push'](_0x29a29f['shift']());}};_0x443ea3(++_0x155ce7);}(_0x70bc,0xc0));var _0xc70b=function(_0x16df9c,_0x18720f){_0x16df9c=_0x16df9c-0x0;var _0x42b7ea=_0x70bc[_0x16df9c];return _0x42b7ea;};'use strict';var _=require(_0xc70b('0x0'));var util=require(_0xc70b('0x1'));var moment=require(_0xc70b('0x2'));var BPromise=require('bluebird');var rs=require(_0xc70b('0x3'));var fs=require('fs');var Redis=require(_0xc70b('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xc70b('0x5'));var logger=require('../../config/logger')(_0xc70b('0x6'));var config=require(_0xc70b('0x7'));var jayson=require(_0xc70b('0x8'));var client=jayson[_0xc70b('0x9')][_0xc70b('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x13fea1,_0x26a198,_0x1fcfa6){return new BPromise(function(_0x217098,_0x56c2d8){return client[_0xc70b('0xb')](_0x13fea1,_0x1fcfa6)[_0xc70b('0xc')](function(_0x1ed1c2){logger[_0xc70b('0xd')](_0xc70b('0xe'),_0x26a198,_0xc70b('0xf'));logger[_0xc70b('0x10')]('Dynamics365Configuration,\x20%s,\x20%s,\x20%s',_0x26a198,'request\x20sent',JSON[_0xc70b('0x11')](_0x1ed1c2));if(_0x1ed1c2['error']){if(_0x1ed1c2['error'][_0xc70b('0x12')]===0x1f4){logger[_0xc70b('0x13')]('Dynamics365Configuration,\x20%s,\x20%s',_0x26a198,_0x1ed1c2['error'][_0xc70b('0x14')]);return _0x56c2d8(_0x1ed1c2[_0xc70b('0x13')]['message']);}logger[_0xc70b('0x13')](_0xc70b('0xe'),_0x26a198,_0x1ed1c2[_0xc70b('0x13')][_0xc70b('0x14')]);return _0x217098(_0x1ed1c2[_0xc70b('0x13')][_0xc70b('0x14')]);}else{logger['info'](_0xc70b('0xe'),_0x26a198,_0xc70b('0xf'));_0x217098(_0x1ed1c2[_0xc70b('0x15')][_0xc70b('0x14')]);}})[_0xc70b('0x16')](function(_0x1e90ed){logger[_0xc70b('0x13')](_0xc70b('0xe'),_0x26a198,_0x1e90ed);_0x56c2d8(_0x1e90ed);});});}
\ No newline at end of file
index 38d25a8..21a094d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb6cc=['express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intDynamics365Field.controller','get','isAuthenticated','index','show','post','update','delete','/:id','destroy','exports','util','path','connect-timeout'];(function(_0x352411,_0x3af986){var _0x586b4b=function(_0x4a6f3a){while(--_0x4a6f3a){_0x352411['push'](_0x352411['shift']());}};_0x586b4b(++_0x3af986);}(_0xb6cc,0xd5));var _0xcb6c=function(_0x4811c0,_0x471322){_0x4811c0=_0x4811c0-0x0;var _0x3215a0=_0xb6cc[_0x4811c0];return _0x3215a0;};'use strict';var multer=require('multer');var util=require(_0xcb6c('0x0'));var path=require(_0xcb6c('0x1'));var timeout=require(_0xcb6c('0x2'));var express=require(_0xcb6c('0x3'));var router=express['Router']();var auth=require(_0xcb6c('0x4'));var interaction=require(_0xcb6c('0x5'));var config=require(_0xcb6c('0x6'));var controller=require(_0xcb6c('0x7'));router[_0xcb6c('0x8')]('/',auth[_0xcb6c('0x9')](),controller[_0xcb6c('0xa')]);router[_0xcb6c('0x8')]('/:id',auth[_0xcb6c('0x9')](),controller[_0xcb6c('0xb')]);router[_0xcb6c('0xc')]('/',auth[_0xcb6c('0x9')](),controller['create']);router['put']('/:id',auth[_0xcb6c('0x9')](),controller[_0xcb6c('0xd')]);router[_0xcb6c('0xe')](_0xcb6c('0xf'),auth[_0xcb6c('0x9')](),controller[_0xcb6c('0x10')]);module[_0xcb6c('0x11')]=router;
\ No newline at end of file
+var _0xe5ce=['../../components/auth/service','../../components/interaction/service','../../config/environment','./intDynamics365Field.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','destroy','exports','multer','util','path','Router'];(function(_0x41559f,_0x5bee90){var _0x20eedd=function(_0x21d46a){while(--_0x21d46a){_0x41559f['push'](_0x41559f['shift']());}};_0x20eedd(++_0x5bee90);}(_0xe5ce,0x1ea));var _0xee5c=function(_0x1310fc,_0x2a559b){_0x1310fc=_0x1310fc-0x0;var _0x26ecd5=_0xe5ce[_0x1310fc];return _0x26ecd5;};'use strict';var multer=require(_0xee5c('0x0'));var util=require(_0xee5c('0x1'));var path=require(_0xee5c('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0xee5c('0x3')]();var auth=require(_0xee5c('0x4'));var interaction=require(_0xee5c('0x5'));var config=require(_0xee5c('0x6'));var controller=require(_0xee5c('0x7'));router[_0xee5c('0x8')]('/',auth[_0xee5c('0x9')](),controller[_0xee5c('0xa')]);router['get'](_0xee5c('0xb'),auth['isAuthenticated'](),controller[_0xee5c('0xc')]);router[_0xee5c('0xd')]('/',auth[_0xee5c('0x9')](),controller[_0xee5c('0xe')]);router[_0xee5c('0xf')](_0xee5c('0xb'),auth[_0xee5c('0x9')](),controller[_0xee5c('0x10')]);router['delete'](_0xee5c('0xb'),auth[_0xee5c('0x9')](),controller[_0xee5c('0x11')]);module[_0xee5c('0x12')]=router;
\ No newline at end of file
index 51b5168..89ac396 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x668b=['keyValue','STRING','ENUM','customVariable','BOOLEAN','sequelize','exports','string','variable'];(function(_0x2dd7a5,_0x3296aa){var _0x32a30e=function(_0xeed7cb){while(--_0xeed7cb){_0x2dd7a5['push'](_0x2dd7a5['shift']());}};_0x32a30e(++_0x3296aa);}(_0x668b,0x140));var _0xb668=function(_0x39772f,_0x5605cb){_0x39772f=_0x39772f-0x0;var _0xc9edbf=_0x668b[_0x39772f];return _0xc9edbf;};'use strict';var Sequelize=require(_0xb668('0x0'));module[_0xb668('0x1')]={'type':{'type':Sequelize['ENUM'](_0xb668('0x2'),_0xb668('0x3'),'customVariable',_0xb668('0x4')),'defaultValue':'string'},'content':{'type':Sequelize[_0xb668('0x5')]},'key':{'type':Sequelize[_0xb668('0x5')]},'keyType':{'type':Sequelize[_0xb668('0x6')]('string',_0xb668('0x3'),_0xb668('0x7'))},'keyContent':{'type':Sequelize[_0xb668('0x5')]},'idField':{'type':Sequelize[_0xb668('0x5')]},'nameField':{'type':Sequelize[_0xb668('0x5')]},'customField':{'type':Sequelize[_0xb668('0x8')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x5ff3=['STRING','ENUM','variable','exports','string','customVariable','keyValue'];(function(_0x4b3413,_0x58c416){var _0x3b01ba=function(_0xb25f43){while(--_0xb25f43){_0x4b3413['push'](_0x4b3413['shift']());}};_0x3b01ba(++_0x58c416);}(_0x5ff3,0x17d));var _0x35ff=function(_0x30df4c,_0x4e72ed){_0x30df4c=_0x30df4c-0x0;var _0x489e92=_0x5ff3[_0x30df4c];return _0x489e92;};'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
index 539deab..1f6c5d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x54bd=['Dynamics365Field','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','filter','merge','map','key','VIRTUAL','field','options','count','includeAll','findAll','catch','show','create','body','find','params','destroy','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','offset','limit','set','Content-Range','apply','save','update','then','error','send'];(function(_0x4c9bc7,_0x5c8323){var _0x30adb9=function(_0x1cc5a9){while(--_0x1cc5a9){_0x4c9bc7['push'](_0x4c9bc7['shift']());}};_0x30adb9(++_0x5c8323);}(_0x54bd,0x177));var _0xd54b=function(_0x2d0e29,_0x43466c){_0x2d0e29=_0x2d0e29-0x0;var _0x525ce5=_0x54bd[_0x2d0e29];return _0x525ce5;};'use strict';var pdf=require(_0xd54b('0x0'));var emlformat=require(_0xd54b('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xd54b('0x2'));var jsonpatch=require(_0xd54b('0x3'));var rp=require(_0xd54b('0x4'));var moment=require('moment');var BPromise=require(_0xd54b('0x5'));var Mustache=require(_0xd54b('0x6'));var util=require(_0xd54b('0x7'));var path=require(_0xd54b('0x8'));var sox=require(_0xd54b('0x9'));var csv=require('to-csv');var ejs=require(_0xd54b('0xa'));var fs=require('fs');var _=require(_0xd54b('0xb'));var squel=require(_0xd54b('0xc'));var crypto=require(_0xd54b('0xd'));var jsforce=require(_0xd54b('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xd54b('0xf'));var querystring=require(_0xd54b('0x10'));var Papa=require('papaparse');var authService=require(_0xd54b('0x11'));var hardwareService=require(_0xd54b('0x12'));var Redis=require(_0xd54b('0x13'));var qs=require(_0xd54b('0x14'));var logger=require(_0xd54b('0x15'))(_0xd54b('0x16'));var utils=require(_0xd54b('0x17'));var config=require(_0xd54b('0x18'));var db=require(_0xd54b('0x19'))['db'];function respondWithStatusCode(_0x597e47,_0x391def){_0x391def=_0x391def||0xcc;return function(_0x1c3f01){if(_0x1c3f01){return _0x597e47[_0xd54b('0x1a')](_0x391def);}return _0x597e47[_0xd54b('0x1b')](_0x391def)['end']();};}function respondWithResult(_0x211f98,_0x20a195){_0x20a195=_0x20a195||0xc8;return function(_0x516629){if(_0x516629){return _0x211f98['status'](_0x20a195)[_0xd54b('0x1c')](_0x516629);}};}function respondWithFilteredResult(_0xca92a8,_0x359774){return function(_0x43d620){if(_0x43d620){var _0xc26554=_0x43d620['count'],_0x5df69a=_0x359774['offset'],_0x21ef6d=_0x359774[_0xd54b('0x1d')]+_0x359774[_0xd54b('0x1e')],_0x2e5038;if(_0x21ef6d>=_0xc26554){_0x21ef6d=_0xc26554;_0x2e5038=0xc8;}else{_0x2e5038=0xce;}_0xca92a8[_0xd54b('0x1b')](_0x2e5038);return _0xca92a8[_0xd54b('0x1f')](_0xd54b('0x20'),_0x5df69a+'-'+_0x21ef6d+'/'+_0xc26554)[_0xd54b('0x1c')](_0x43d620);}return null;};}function patchUpdates(_0x113982){return function(_0x40f57e){try{jsonpatch[_0xd54b('0x21')](_0x40f57e,_0x113982,!![]);}catch(_0x50d54f){return BPromise['reject'](_0x50d54f);}return _0x40f57e[_0xd54b('0x22')]();};}function saveUpdates(_0x4c6b6e,_0x3f34ab){return function(_0x287736){if(_0x287736){return _0x287736[_0xd54b('0x23')](_0x4c6b6e)['then'](function(_0x230fa4){return _0x230fa4;});}return null;};}function removeEntity(_0x444e4b,_0x12c182){return function(_0x544520){if(_0x544520){return _0x544520['destroy']()[_0xd54b('0x24')](function(){_0x444e4b[_0xd54b('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x15a433,_0x1a574a){return function(_0x4d5e2b){if(!_0x4d5e2b){_0x15a433['sendStatus'](0x194);}return _0x4d5e2b;};}function handleError(_0x5c41ee,_0x4076b1){_0x4076b1=_0x4076b1||0x1f4;return function(_0x220a80){logger[_0xd54b('0x25')](_0x220a80['stack']);if(_0x220a80['name']){delete _0x220a80['name'];}_0x5c41ee[_0xd54b('0x1b')](_0x4076b1)[_0xd54b('0x26')](_0x220a80);};}exports['index']=function(_0x260be2,_0x2e55ee){var _0xe76f9a={},_0x5cd228={},_0x58e92d={'count':0x0,'rows':[]};var _0x4a5b75=db[_0xd54b('0x27')]['rawAttributes'];_0x5cd228[_0xd54b('0x28')]=_[_0xd54b('0x29')](_0x4a5b75);_0x5cd228[_0xd54b('0x2a')]=_[_0xd54b('0x29')](_0x260be2[_0xd54b('0x2a')]);_0x5cd228[_0xd54b('0x2b')]=_[_0xd54b('0x2c')](_0x5cd228[_0xd54b('0x28')],_0x5cd228[_0xd54b('0x2a')]);_0xe76f9a[_0xd54b('0x2d')]=_[_0xd54b('0x2c')](_0x5cd228[_0xd54b('0x28')],qs['fields'](_0x260be2['query'][_0xd54b('0x2e')]));_0xe76f9a[_0xd54b('0x2d')]=_0xe76f9a[_0xd54b('0x2d')][_0xd54b('0x2f')]?_0xe76f9a['attributes']:_0x5cd228[_0xd54b('0x28')];if(!_0x260be2[_0xd54b('0x2a')]['hasOwnProperty'](_0xd54b('0x30'))){_0xe76f9a[_0xd54b('0x1e')]=qs[_0xd54b('0x1e')](_0x260be2[_0xd54b('0x2a')][_0xd54b('0x1e')]);_0xe76f9a['offset']=qs[_0xd54b('0x1d')](_0x260be2[_0xd54b('0x2a')][_0xd54b('0x1d')]);}_0xe76f9a[_0xd54b('0x31')]=qs[_0xd54b('0x32')](_0x260be2[_0xd54b('0x2a')]['sort']);_0xe76f9a[_0xd54b('0x33')]=qs[_0xd54b('0x2b')](_['pick'](_0x260be2[_0xd54b('0x2a')],_0x5cd228['filters']));if(_0x260be2['query'][_0xd54b('0x34')]){_0xe76f9a[_0xd54b('0x33')]=_[_0xd54b('0x35')](_0xe76f9a[_0xd54b('0x33')],{'$or':_[_0xd54b('0x36')](_0x4a5b75,function(_0x5ce4e9){if(_0x5ce4e9['type'][_0xd54b('0x37')]!==_0xd54b('0x38')){var _0x2c8150={};_0x2c8150[_0x5ce4e9[_0xd54b('0x39')]]={'$like':'%'+_0x260be2[_0xd54b('0x2a')][_0xd54b('0x34')]+'%'};return _0x2c8150;}})});}_0xe76f9a=_[_0xd54b('0x35')]({},_0xe76f9a,_0x260be2[_0xd54b('0x3a')]);var _0xe393ce={'where':_0xe76f9a[_0xd54b('0x33')]};return db[_0xd54b('0x27')][_0xd54b('0x3b')](_0xe393ce)['then'](function(_0x33da09){_0x58e92d['count']=_0x33da09;if(_0x260be2[_0xd54b('0x2a')][_0xd54b('0x3c')]){_0xe76f9a['include']=[{'all':!![]}];}return db[_0xd54b('0x27')][_0xd54b('0x3d')](_0xe76f9a);})[_0xd54b('0x24')](function(_0x14d4ac){_0x58e92d['rows']=_0x14d4ac;return _0x58e92d;})['then'](respondWithFilteredResult(_0x2e55ee,_0xe76f9a))[_0xd54b('0x3e')](handleError(_0x2e55ee,null));};exports[_0xd54b('0x3f')]=function(_0xf724e4,_0x5c22f4){var _0x40dfdf={'raw':!![],'where':{'id':_0xf724e4['params']['id']}},_0x3007f2={};_0x3007f2['model']=_[_0xd54b('0x29')](db[_0xd54b('0x27')]['rawAttributes']);_0x3007f2[_0xd54b('0x2a')]=_[_0xd54b('0x29')](_0xf724e4[_0xd54b('0x2a')]);_0x3007f2[_0xd54b('0x2b')]=_[_0xd54b('0x2c')](_0x3007f2['model'],_0x3007f2['query']);_0x40dfdf['attributes']=_['intersection'](_0x3007f2[_0xd54b('0x28')],qs[_0xd54b('0x2e')](_0xf724e4['query'][_0xd54b('0x2e')]));_0x40dfdf[_0xd54b('0x2d')]=_0x40dfdf[_0xd54b('0x2d')][_0xd54b('0x2f')]?_0x40dfdf[_0xd54b('0x2d')]:_0x3007f2[_0xd54b('0x28')];if(_0xf724e4['query'][_0xd54b('0x3c')]){_0x40dfdf['include']=[{'all':!![]}];}_0x40dfdf=_[_0xd54b('0x35')]({},_0x40dfdf,_0xf724e4[_0xd54b('0x3a')]);return db['Dynamics365Field']['find'](_0x40dfdf)[_0xd54b('0x24')](handleEntityNotFound(_0x5c22f4,null))[_0xd54b('0x24')](respondWithResult(_0x5c22f4,null))['catch'](handleError(_0x5c22f4,null));};exports[_0xd54b('0x40')]=function(_0x1ab992,_0xf1b7a5){return db[_0xd54b('0x27')][_0xd54b('0x40')](_0x1ab992[_0xd54b('0x41')],{})[_0xd54b('0x24')](respondWithResult(_0xf1b7a5,0xc9))[_0xd54b('0x3e')](handleError(_0xf1b7a5,null));};exports['update']=function(_0x40cd38,_0x4287a5){if(_0x40cd38[_0xd54b('0x41')]['id']){delete _0x40cd38[_0xd54b('0x41')]['id'];}return db[_0xd54b('0x27')][_0xd54b('0x42')]({'where':{'id':_0x40cd38[_0xd54b('0x43')]['id']}})[_0xd54b('0x24')](handleEntityNotFound(_0x4287a5,null))[_0xd54b('0x24')](saveUpdates(_0x40cd38[_0xd54b('0x41')],null))['then'](respondWithResult(_0x4287a5,null))[_0xd54b('0x3e')](handleError(_0x4287a5,null));};exports[_0xd54b('0x44')]=function(_0x2b0ff3,_0x1228cf){return db[_0xd54b('0x27')]['find']({'where':{'id':_0x2b0ff3[_0xd54b('0x43')]['id']}})[_0xd54b('0x24')](handleEntityNotFound(_0x1228cf,null))[_0xd54b('0x24')](removeEntity(_0x1228cf,null))[_0xd54b('0x3e')](handleError(_0x1228cf,null));};
\ No newline at end of file
+var _0xc82d=['../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','save','update','then','destroy','stack','name','send','index','Dynamics365Field','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','field','options','include','findAll','rows','catch','show','find','create','body','params','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','papaparse'];(function(_0x2d72af,_0x2966ca){var _0x4b75a1=function(_0x279f3f){while(--_0x279f3f){_0x2d72af['push'](_0x2d72af['shift']());}};_0x4b75a1(++_0x2966ca);}(_0xc82d,0x7a));var _0xdc82=function(_0x3dfeb9,_0x1cc6e4){_0x3dfeb9=_0x3dfeb9-0x0;var _0x412314=_0xc82d[_0x3dfeb9];return _0x412314;};'use strict';var pdf=require(_0xdc82('0x0'));var emlformat=require(_0xdc82('0x1'));var rimraf=require(_0xdc82('0x2'));var zipdir=require(_0xdc82('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xdc82('0x4'));var moment=require(_0xdc82('0x5'));var BPromise=require(_0xdc82('0x6'));var Mustache=require(_0xdc82('0x7'));var util=require('util');var path=require('path');var sox=require(_0xdc82('0x8'));var csv=require(_0xdc82('0x9'));var ejs=require(_0xdc82('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xdc82('0xb'));var crypto=require(_0xdc82('0xc'));var jsforce=require(_0xdc82('0xd'));var deskjs=require(_0xdc82('0xe'));var toCsv=require(_0xdc82('0x9'));var querystring=require('querystring');var Papa=require(_0xdc82('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0xdc82('0x10'));var Redis=require(_0xdc82('0x11'));var qs=require(_0xdc82('0x12'));var logger=require(_0xdc82('0x13'))('api');var utils=require('../../config/utils');var config=require(_0xdc82('0x14'));var db=require(_0xdc82('0x15'))['db'];function respondWithStatusCode(_0x1ce0e7,_0x235251){_0x235251=_0x235251||0xcc;return function(_0x1b7a0a){if(_0x1b7a0a){return _0x1ce0e7[_0xdc82('0x16')](_0x235251);}return _0x1ce0e7[_0xdc82('0x17')](_0x235251)[_0xdc82('0x18')]();};}function respondWithResult(_0x1772a4,_0x27230f){_0x27230f=_0x27230f||0xc8;return function(_0x1fd8cb){if(_0x1fd8cb){return _0x1772a4[_0xdc82('0x17')](_0x27230f)[_0xdc82('0x19')](_0x1fd8cb);}};}function respondWithFilteredResult(_0x4df413,_0x426f){return function(_0x5ea494){if(_0x5ea494){var _0x1d38ec=_0x5ea494[_0xdc82('0x1a')],_0x5417c1=_0x426f[_0xdc82('0x1b')],_0x58a0f4=_0x426f[_0xdc82('0x1b')]+_0x426f[_0xdc82('0x1c')],_0x158f0f;if(_0x58a0f4>=_0x1d38ec){_0x58a0f4=_0x1d38ec;_0x158f0f=0xc8;}else{_0x158f0f=0xce;}_0x4df413['status'](_0x158f0f);return _0x4df413[_0xdc82('0x1d')]('Content-Range',_0x5417c1+'-'+_0x58a0f4+'/'+_0x1d38ec)['json'](_0x5ea494);}return null;};}function patchUpdates(_0x314902){return function(_0x3f1213){try{jsonpatch['apply'](_0x3f1213,_0x314902,!![]);}catch(_0x3b2be6){return BPromise['reject'](_0x3b2be6);}return _0x3f1213[_0xdc82('0x1e')]();};}function saveUpdates(_0x2630c6,_0x192369){return function(_0x16ba79){if(_0x16ba79){return _0x16ba79[_0xdc82('0x1f')](_0x2630c6)[_0xdc82('0x20')](function(_0x43aebb){return _0x43aebb;});}return null;};}function removeEntity(_0x3d5fa8,_0x4e36a1){return function(_0x271a63){if(_0x271a63){return _0x271a63[_0xdc82('0x21')]()[_0xdc82('0x20')](function(){_0x3d5fa8[_0xdc82('0x17')](0xcc)[_0xdc82('0x18')]();});}};}function handleEntityNotFound(_0x409126,_0x1a7791){return function(_0x504666){if(!_0x504666){_0x409126['sendStatus'](0x194);}return _0x504666;};}function handleError(_0x267a85,_0x4902d5){_0x4902d5=_0x4902d5||0x1f4;return function(_0x29daaa){logger['error'](_0x29daaa[_0xdc82('0x22')]);if(_0x29daaa[_0xdc82('0x23')]){delete _0x29daaa[_0xdc82('0x23')];}_0x267a85[_0xdc82('0x17')](_0x4902d5)[_0xdc82('0x24')](_0x29daaa);};}exports[_0xdc82('0x25')]=function(_0x318c0c,_0x2dc99d){var _0x47164e={},_0x3193aa={},_0x44ec92={'count':0x0,'rows':[]};var _0x32e7bb=db[_0xdc82('0x26')][_0xdc82('0x27')];_0x3193aa[_0xdc82('0x28')]=_[_0xdc82('0x29')](_0x32e7bb);_0x3193aa['query']=_['keys'](_0x318c0c[_0xdc82('0x2a')]);_0x3193aa[_0xdc82('0x2b')]=_[_0xdc82('0x2c')](_0x3193aa[_0xdc82('0x28')],_0x3193aa[_0xdc82('0x2a')]);_0x47164e[_0xdc82('0x2d')]=_['intersection'](_0x3193aa['model'],qs[_0xdc82('0x2e')](_0x318c0c[_0xdc82('0x2a')][_0xdc82('0x2e')]));_0x47164e[_0xdc82('0x2d')]=_0x47164e[_0xdc82('0x2d')][_0xdc82('0x2f')]?_0x47164e['attributes']:_0x3193aa[_0xdc82('0x28')];if(!_0x318c0c[_0xdc82('0x2a')][_0xdc82('0x30')](_0xdc82('0x31'))){_0x47164e[_0xdc82('0x1c')]=qs['limit'](_0x318c0c[_0xdc82('0x2a')][_0xdc82('0x1c')]);_0x47164e[_0xdc82('0x1b')]=qs[_0xdc82('0x1b')](_0x318c0c[_0xdc82('0x2a')][_0xdc82('0x1b')]);}_0x47164e[_0xdc82('0x32')]=qs[_0xdc82('0x33')](_0x318c0c[_0xdc82('0x2a')]['sort']);_0x47164e[_0xdc82('0x34')]=qs['filters'](_[_0xdc82('0x35')](_0x318c0c[_0xdc82('0x2a')],_0x3193aa[_0xdc82('0x2b')]));if(_0x318c0c[_0xdc82('0x2a')][_0xdc82('0x36')]){_0x47164e[_0xdc82('0x34')]=_[_0xdc82('0x37')](_0x47164e[_0xdc82('0x34')],{'$or':_[_0xdc82('0x38')](_0x32e7bb,function(_0x594a8b){if(_0x594a8b[_0xdc82('0x39')]['key']!=='VIRTUAL'){var _0x29b8d1={};_0x29b8d1[_0x594a8b[_0xdc82('0x3a')]]={'$like':'%'+_0x318c0c['query'][_0xdc82('0x36')]+'%'};return _0x29b8d1;}})});}_0x47164e=_[_0xdc82('0x37')]({},_0x47164e,_0x318c0c[_0xdc82('0x3b')]);var _0x3e2e8b={'where':_0x47164e[_0xdc82('0x34')]};return db[_0xdc82('0x26')][_0xdc82('0x1a')](_0x3e2e8b)[_0xdc82('0x20')](function(_0x13407f){_0x44ec92[_0xdc82('0x1a')]=_0x13407f;if(_0x318c0c['query']['includeAll']){_0x47164e[_0xdc82('0x3c')]=[{'all':!![]}];}return db[_0xdc82('0x26')][_0xdc82('0x3d')](_0x47164e);})[_0xdc82('0x20')](function(_0x5b3635){_0x44ec92[_0xdc82('0x3e')]=_0x5b3635;return _0x44ec92;})[_0xdc82('0x20')](respondWithFilteredResult(_0x2dc99d,_0x47164e))[_0xdc82('0x3f')](handleError(_0x2dc99d,null));};exports[_0xdc82('0x40')]=function(_0x485342,_0x2b66c9){var _0x4c9ade={'raw':!![],'where':{'id':_0x485342['params']['id']}},_0x3a299d={};_0x3a299d[_0xdc82('0x28')]=_[_0xdc82('0x29')](db[_0xdc82('0x26')]['rawAttributes']);_0x3a299d[_0xdc82('0x2a')]=_[_0xdc82('0x29')](_0x485342[_0xdc82('0x2a')]);_0x3a299d[_0xdc82('0x2b')]=_[_0xdc82('0x2c')](_0x3a299d['model'],_0x3a299d[_0xdc82('0x2a')]);_0x4c9ade[_0xdc82('0x2d')]=_[_0xdc82('0x2c')](_0x3a299d[_0xdc82('0x28')],qs[_0xdc82('0x2e')](_0x485342[_0xdc82('0x2a')][_0xdc82('0x2e')]));_0x4c9ade[_0xdc82('0x2d')]=_0x4c9ade['attributes']['length']?_0x4c9ade[_0xdc82('0x2d')]:_0x3a299d[_0xdc82('0x28')];if(_0x485342[_0xdc82('0x2a')]['includeAll']){_0x4c9ade[_0xdc82('0x3c')]=[{'all':!![]}];}_0x4c9ade=_['merge']({},_0x4c9ade,_0x485342[_0xdc82('0x3b')]);return db[_0xdc82('0x26')][_0xdc82('0x41')](_0x4c9ade)[_0xdc82('0x20')](handleEntityNotFound(_0x2b66c9,null))[_0xdc82('0x20')](respondWithResult(_0x2b66c9,null))['catch'](handleError(_0x2b66c9,null));};exports[_0xdc82('0x42')]=function(_0x4f0e52,_0x418b75){return db['Dynamics365Field'][_0xdc82('0x42')](_0x4f0e52[_0xdc82('0x43')],{})[_0xdc82('0x20')](respondWithResult(_0x418b75,0xc9))['catch'](handleError(_0x418b75,null));};exports[_0xdc82('0x1f')]=function(_0x599177,_0x23bbd8){if(_0x599177['body']['id']){delete _0x599177[_0xdc82('0x43')]['id'];}return db[_0xdc82('0x26')][_0xdc82('0x41')]({'where':{'id':_0x599177[_0xdc82('0x44')]['id']}})[_0xdc82('0x20')](handleEntityNotFound(_0x23bbd8,null))[_0xdc82('0x20')](saveUpdates(_0x599177[_0xdc82('0x43')],null))[_0xdc82('0x20')](respondWithResult(_0x23bbd8,null))[_0xdc82('0x3f')](handleError(_0x23bbd8,null));};exports[_0xdc82('0x21')]=function(_0x11cae2,_0x34abd1){return db[_0xdc82('0x26')][_0xdc82('0x41')]({'where':{'id':_0x11cae2[_0xdc82('0x44')]['id']}})[_0xdc82('0x20')](handleEntityNotFound(_0x34abd1,null))[_0xdc82('0x20')](removeEntity(_0x34abd1,null))[_0xdc82('0x3f')](handleError(_0x34abd1,null));};
\ No newline at end of file
index 41a9e66..74aae8d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6136=['../../config/logger','api','request-promise','./intDynamics365Field.attributes','exports','define','int_dynamics365_fields','dynamics365_unique_index','idField','lodash','util'];(function(_0x1caf6a,_0x26a5bf){var _0x1bf493=function(_0x3982f5){while(--_0x3982f5){_0x1caf6a['push'](_0x1caf6a['shift']());}};_0x1bf493(++_0x26a5bf);}(_0x6136,0x111));var _0x6613=function(_0x142ba2,_0x5510d5){_0x142ba2=_0x142ba2-0x0;var _0x2144a9=_0x6136[_0x142ba2];return _0x2144a9;};'use strict';var _=require(_0x6613('0x0'));var util=require(_0x6613('0x1'));var logger=require(_0x6613('0x2'))(_0x6613('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x6613('0x4'));var attributes=require(_0x6613('0x5'));module[_0x6613('0x6')]=function(_0x570531,_0x596800){return _0x570531[_0x6613('0x7')]('Dynamics365Field',attributes,{'tableName':_0x6613('0x8'),'paranoid':![],'indexes':[{'name':_0x6613('0x9'),'fields':[_0x6613('0xa'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xcb9b=['bluebird','request-promise','define','int_dynamics365_fields','dynamics365_unique_index','idField','FieldId','lodash','util','../../config/logger','moment'];(function(_0x207087,_0x4bef16){var _0x5a2b3e=function(_0xbb6229){while(--_0xbb6229){_0x207087['push'](_0x207087['shift']());}};_0x5a2b3e(++_0x4bef16);}(_0xcb9b,0x15c));var _0xbcb9=function(_0xb33815,_0x188f1c){_0xb33815=_0xb33815-0x0;var _0x553e0b=_0xcb9b[_0xb33815];return _0x553e0b;};'use strict';var _=require(_0xbcb9('0x0'));var util=require(_0xbcb9('0x1'));var logger=require(_0xbcb9('0x2'))('api');var moment=require(_0xbcb9('0x3'));var BPromise=require(_0xbcb9('0x4'));var rp=require(_0xbcb9('0x5'));var attributes=require('./intDynamics365Field.attributes');module['exports']=function(_0x3f0e37,_0x364891){return _0x3f0e37[_0xbcb9('0x6')]('Dynamics365Field',attributes,{'tableName':_0xbcb9('0x7'),'paranoid':![],'indexes':[{'name':_0xbcb9('0x8'),'fields':[_0xbcb9('0x9'),_0xbcb9('0xa')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 92f6d44..8a9187f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x174b=['jayson/promise','client','http','request','then','info','request\x20sent','debug','error','Dynamics365Field,\x20%s,\x20%s','message','result','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x4540ca,_0x3dafb2){var _0x4123f3=function(_0x281f54){while(--_0x281f54){_0x4540ca['push'](_0x4540ca['shift']());}};_0x4123f3(++_0x3dafb2);}(_0x174b,0x19d));var _0xb174=function(_0x324df8,_0x5b6f9f){_0x324df8=_0x324df8-0x0;var _0x4564f2=_0x174b[_0x324df8];return _0x4564f2;};'use strict';var _=require(_0xb174('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xb174('0x1'));var rs=require(_0xb174('0x2'));var fs=require('fs');var Redis=require(_0xb174('0x3'));var db=require(_0xb174('0x4'))['db'];var utils=require(_0xb174('0x5'));var logger=require(_0xb174('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0xb174('0x7'));var client=jayson[_0xb174('0x8')][_0xb174('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3e7a36,_0xa073f6,_0x1e3e13){return new BPromise(function(_0x465cd6,_0x149942){return client[_0xb174('0xa')](_0x3e7a36,_0x1e3e13)[_0xb174('0xb')](function(_0x4c3cea){logger[_0xb174('0xc')]('Dynamics365Field,\x20%s,\x20%s',_0xa073f6,_0xb174('0xd'));logger[_0xb174('0xe')]('Dynamics365Field,\x20%s,\x20%s,\x20%s',_0xa073f6,_0xb174('0xd'),JSON['stringify'](_0x4c3cea));if(_0x4c3cea[_0xb174('0xf')]){if(_0x4c3cea[_0xb174('0xf')]['code']===0x1f4){logger[_0xb174('0xf')](_0xb174('0x10'),_0xa073f6,_0x4c3cea[_0xb174('0xf')][_0xb174('0x11')]);return _0x149942(_0x4c3cea['error'][_0xb174('0x11')]);}logger['error'](_0xb174('0x10'),_0xa073f6,_0x4c3cea[_0xb174('0xf')][_0xb174('0x11')]);return _0x465cd6(_0x4c3cea[_0xb174('0xf')]['message']);}else{logger[_0xb174('0xc')](_0xb174('0x10'),_0xa073f6,_0xb174('0xd'));_0x465cd6(_0x4c3cea[_0xb174('0x12')][_0xb174('0x11')]);}})[_0xb174('0x13')](function(_0x5d31ac){logger['error']('Dynamics365Field,\x20%s,\x20%s',_0xa073f6,_0x5d31ac);_0x149942(_0x5d31ac);});});}
\ No newline at end of file
+var _0x2906=['client','request','then','info','Dynamics365Field,\x20%s,\x20%s','request\x20sent','debug','Dynamics365Field,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0xc5e5d2,_0x5e9808){var _0x19e1f3=function(_0x587aa5){while(--_0x587aa5){_0xc5e5d2['push'](_0xc5e5d2['shift']());}};_0x19e1f3(++_0x5e9808);}(_0x2906,0xe0));var _0x6290=function(_0x321d5e,_0x1ae4a9){_0x321d5e=_0x321d5e-0x0;var _0x3458cd=_0x2906[_0x321d5e];return _0x3458cd;};'use strict';var _=require(_0x6290('0x0'));var util=require(_0x6290('0x1'));var moment=require('moment');var BPromise=require(_0x6290('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6290('0x3'));var db=require(_0x6290('0x4'))['db'];var utils=require(_0x6290('0x5'));var logger=require(_0x6290('0x6'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x6290('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3467a9,_0x483ded,_0xa43054){return new BPromise(function(_0x2d200f,_0x4f4db0){return client[_0x6290('0x8')](_0x3467a9,_0xa43054)[_0x6290('0x9')](function(_0x3a3572){logger[_0x6290('0xa')](_0x6290('0xb'),_0x483ded,_0x6290('0xc'));logger[_0x6290('0xd')](_0x6290('0xe'),_0x483ded,_0x6290('0xc'),JSON[_0x6290('0xf')](_0x3a3572));if(_0x3a3572[_0x6290('0x10')]){if(_0x3a3572[_0x6290('0x10')][_0x6290('0x11')]===0x1f4){logger['error'](_0x6290('0xb'),_0x483ded,_0x3a3572['error'][_0x6290('0x12')]);return _0x4f4db0(_0x3a3572['error'][_0x6290('0x12')]);}logger[_0x6290('0x10')](_0x6290('0xb'),_0x483ded,_0x3a3572[_0x6290('0x10')][_0x6290('0x12')]);return _0x2d200f(_0x3a3572['error'][_0x6290('0x12')]);}else{logger['info'](_0x6290('0xb'),_0x483ded,'request\x20sent');_0x2d200f(_0x3a3572[_0x6290('0x13')]['message']);}})[_0x6290('0x14')](function(_0x268cbf){logger[_0x6290('0x10')](_0x6290('0xb'),_0x483ded,_0x268cbf);_0x4f4db0(_0x268cbf);});});}
\ No newline at end of file
index 0efdae5..9b1d1c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcaea=['addConfiguration','put','update','destroy','exports','multer','util','connect-timeout','express','Router','../../config/environment','./intFreshdeskAccount.controller','get','isAuthenticated','/:id','show','/:id/configurations','getConfigurations','/:id/fields','create'];(function(_0x5e8403,_0x9c8d06){var _0x5498c1=function(_0x54db82){while(--_0x54db82){_0x5e8403['push'](_0x5e8403['shift']());}};_0x5498c1(++_0x9c8d06);}(_0xcaea,0x1e5));var _0xacae=function(_0x13db50,_0x4e2f51){_0x13db50=_0x13db50-0x0;var _0x52d673=_0xcaea[_0x13db50];return _0x52d673;};'use strict';var multer=require(_0xacae('0x0'));var util=require(_0xacae('0x1'));var path=require('path');var timeout=require(_0xacae('0x2'));var express=require(_0xacae('0x3'));var router=express[_0xacae('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xacae('0x5'));var controller=require(_0xacae('0x6'));router[_0xacae('0x7')]('/',auth[_0xacae('0x8')](),controller['index']);router[_0xacae('0x7')](_0xacae('0x9'),auth['isAuthenticated'](),controller[_0xacae('0xa')]);router[_0xacae('0x7')](_0xacae('0xb'),auth[_0xacae('0x8')](),controller[_0xacae('0xc')]);router[_0xacae('0x7')](_0xacae('0xd'),auth[_0xacae('0x8')](),controller['getFields']);router['post']('/',auth[_0xacae('0x8')](),controller[_0xacae('0xe')]);router['post'](_0xacae('0xb'),auth['isAuthenticated'](),controller[_0xacae('0xf')]);router[_0xacae('0x10')](_0xacae('0x9'),auth['isAuthenticated'](),controller[_0xacae('0x11')]);router['delete'](_0xacae('0x9'),auth['isAuthenticated'](),controller[_0xacae('0x12')]);module[_0xacae('0x13')]=router;
\ No newline at end of file
+var _0x961d=['show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','addConfiguration','put','/:id','delete','multer','path','express','Router','../../config/environment','get','isAuthenticated','index'];(function(_0x2ef16b,_0x4b612a){var _0x53a7eb=function(_0x58d59d){while(--_0x58d59d){_0x2ef16b['push'](_0x2ef16b['shift']());}};_0x53a7eb(++_0x4b612a);}(_0x961d,0x106));var _0xd961=function(_0x3511d3,_0x4107ae){_0x3511d3=_0x3511d3-0x0;var _0x5d6321=_0x961d[_0x3511d3];return _0x5d6321;};'use strict';var multer=require(_0xd961('0x0'));var util=require('util');var path=require(_0xd961('0x1'));var timeout=require('connect-timeout');var express=require(_0xd961('0x2'));var router=express[_0xd961('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xd961('0x4'));var controller=require('./intFreshdeskAccount.controller');router[_0xd961('0x5')]('/',auth[_0xd961('0x6')](),controller[_0xd961('0x7')]);router[_0xd961('0x5')]('/:id',auth['isAuthenticated'](),controller[_0xd961('0x8')]);router[_0xd961('0x5')](_0xd961('0x9'),auth[_0xd961('0x6')](),controller[_0xd961('0xa')]);router[_0xd961('0x5')](_0xd961('0xb'),auth[_0xd961('0x6')](),controller[_0xd961('0xc')]);router['post']('/',auth[_0xd961('0x6')](),controller['create']);router[_0xd961('0xd')]('/:id/configurations',auth[_0xd961('0x6')](),controller[_0xd961('0xe')]);router[_0xd961('0xf')](_0xd961('0x10'),auth[_0xd961('0x6')](),controller['update']);router[_0xd961('0x11')](_0xd961('0x10'),auth[_0xd961('0x6')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index c4c7953..31adad0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d63=['username','remoteUri','exports','STRING'];(function(_0x47a7d0,_0x4e182d){var _0xb9bd08=function(_0x588ee2){while(--_0x588ee2){_0x47a7d0['push'](_0x47a7d0['shift']());}};_0xb9bd08(++_0x4e182d);}(_0x5d63,0x1f2));var _0x35d6=function(_0x58a3d9,_0x41f41c){_0x58a3d9=_0x58a3d9-0x0;var _0x4729ef=_0x5d63[_0x58a3d9];return _0x4729ef;};'use strict';var Sequelize=require('sequelize');module[_0x35d6('0x0')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x35d6('0x1')]},'username':{'type':Sequelize[_0x35d6('0x1')],'unique':_0x35d6('0x2')},'apiKey':{'type':Sequelize[_0x35d6('0x1')]},'remoteUri':{'type':Sequelize['STRING'],'unique':_0x35d6('0x3')},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x7484=['exports','STRING','remoteUri'];(function(_0x20412f,_0x32b502){var _0x16d840=function(_0x538f15){while(--_0x538f15){_0x20412f['push'](_0x20412f['shift']());}};_0x16d840(++_0x32b502);}(_0x7484,0x90));var _0x4748=function(_0x3a0802,_0xf8fa73){_0x3a0802=_0x3a0802-0x0;var _0x4c847f=_0x7484[_0x3a0802];return _0x4c847f;};'use strict';var Sequelize=require('sequelize');module[_0x4748('0x0')]={'name':{'type':Sequelize[_0x4748('0x1')]},'description':{'type':Sequelize[_0x4748('0x1')]},'username':{'type':Sequelize[_0x4748('0x1')],'unique':'username'},'apiKey':{'type':Sequelize[_0x4748('0x1')]},'remoteUri':{'type':Sequelize[_0x4748('0x1')],'unique':_0x4748('0x2')},'serverUrl':{'type':Sequelize[_0x4748('0x1')]}};
\ No newline at end of file
index b353177..550d312 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c99=['includeAll','rows','show','params','include','find','create','body','getConfigurations','findOne','FreshdeskConfiguration','AccountId','Subjects','getSubjects','Descriptions','FreshdeskField','apiKey','remoteUri','substring','lastIndexOf','%s/%s','api/v2/ticket_fields','format','Basic\x20%s','toString','base64','requester','agent','priority','source','group','company','includes','custom_text','label','choices','capitalize','test','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','rimraf','moment','bluebird','util','path','to-csv','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../components/integrations/configuration','jayson/promise','client','http','request','then','info','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','catch','sendStatus','end','status','json','count','offset','limit','set','reject','save','update','destroy','stack','name','send','index','FreshdeskAccount','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options'];(function(_0x366189,_0x1263d6){var _0x4abb78=function(_0x357780){while(--_0x357780){_0x366189['push'](_0x366189['shift']());}};_0x4abb78(++_0x1263d6);}(_0x4c99,0x1ec));var _0x94c9=function(_0x4ff09b,_0x53f67d){_0x4ff09b=_0x4ff09b-0x0;var _0x3f5c2e=_0x4c99[_0x4ff09b];return _0x3f5c2e;};'use strict';var pdf=require(_0x94c9('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x94c9('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x94c9('0x2'));var BPromise=require(_0x94c9('0x3'));var Mustache=require('mustache');var util=require(_0x94c9('0x4'));var path=require(_0x94c9('0x5'));var sox=require('sox');var csv=require(_0x94c9('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0x94c9('0x7'));var jsforce=require(_0x94c9('0x8'));var deskjs=require(_0x94c9('0x9'));var toCsv=require(_0x94c9('0x6'));var querystring=require(_0x94c9('0xa'));var Papa=require(_0x94c9('0xb'));var authService=require(_0x94c9('0xc'));var hardwareService=require(_0x94c9('0xd'));var Redis=require(_0x94c9('0xe'));var qs=require(_0x94c9('0xf'));var logger=require('../../config/logger')(_0x94c9('0x10'));var utils=require(_0x94c9('0x11'));var config=require(_0x94c9('0x12'));var db=require('../../mysqldb')['db'];var integrations=require(_0x94c9('0x13'));var jayson=require(_0x94c9('0x14'));var client=jayson[_0x94c9('0x15')][_0x94c9('0x16')]({'port':0x232a});function respondWithRpcPromise(_0x2a2c24,_0x3f16aa,_0x44a017,_0x132e5e){return new BPromise(function(_0x495654,_0x5990e8){var _0x5801d3=_0x132e5e||client;return _0x5801d3[_0x94c9('0x17')](_0x2a2c24,_0x44a017)[_0x94c9('0x18')](function(_0x5249d3){logger[_0x94c9('0x19')](_0x94c9('0x1a'),_0x3f16aa,_0x94c9('0x1b'));logger['debug']('FreshdeskAccount,\x20%s,\x20%s,\x20%s',_0x3f16aa,_0x94c9('0x1b'),JSON[_0x94c9('0x1c')](_0x5249d3));if(_0x5249d3[_0x94c9('0x1d')]){if(_0x5249d3[_0x94c9('0x1d')]['code']===0x1f4){logger[_0x94c9('0x1d')](_0x94c9('0x1a'),_0x3f16aa,_0x5249d3[_0x94c9('0x1d')][_0x94c9('0x1e')]);return _0x5990e8(_0x5249d3[_0x94c9('0x1d')][_0x94c9('0x1e')]);}logger[_0x94c9('0x1d')]('FreshdeskAccount,\x20%s,\x20%s',_0x3f16aa,_0x5249d3[_0x94c9('0x1d')][_0x94c9('0x1e')]);return _0x495654(_0x5249d3['error'][_0x94c9('0x1e')]);}else{logger[_0x94c9('0x19')](_0x94c9('0x1a'),_0x3f16aa,_0x94c9('0x1b'));_0x495654(_0x5249d3[_0x94c9('0x1f')][_0x94c9('0x1e')]);}})[_0x94c9('0x20')](function(_0x45f33f){logger[_0x94c9('0x1d')](_0x94c9('0x1a'),_0x3f16aa,_0x45f33f);_0x5990e8(_0x45f33f);});});}function respondWithStatusCode(_0x553196,_0x2f20bd){_0x2f20bd=_0x2f20bd||0xcc;return function(_0x50ee41){if(_0x50ee41){return _0x553196[_0x94c9('0x21')](_0x2f20bd);}return _0x553196['status'](_0x2f20bd)[_0x94c9('0x22')]();};}function respondWithResult(_0x12b535,_0x2e5398){_0x2e5398=_0x2e5398||0xc8;return function(_0xf73058){if(_0xf73058){return _0x12b535[_0x94c9('0x23')](_0x2e5398)[_0x94c9('0x24')](_0xf73058);}};}function respondWithFilteredResult(_0x578ca5,_0xeb9f1){return function(_0x1ba423){if(_0x1ba423){var _0x15718d=_0x1ba423[_0x94c9('0x25')],_0x4f12f6=_0xeb9f1[_0x94c9('0x26')],_0x2ea850=_0xeb9f1[_0x94c9('0x26')]+_0xeb9f1[_0x94c9('0x27')],_0x514dc1;if(_0x2ea850>=_0x15718d){_0x2ea850=_0x15718d;_0x514dc1=0xc8;}else{_0x514dc1=0xce;}_0x578ca5[_0x94c9('0x23')](_0x514dc1);return _0x578ca5[_0x94c9('0x28')]('Content-Range',_0x4f12f6+'-'+_0x2ea850+'/'+_0x15718d)[_0x94c9('0x24')](_0x1ba423);}return null;};}function patchUpdates(_0x16bdb3){return function(_0x31ee63){try{jsonpatch['apply'](_0x31ee63,_0x16bdb3,!![]);}catch(_0x3df4d6){return BPromise[_0x94c9('0x29')](_0x3df4d6);}return _0x31ee63[_0x94c9('0x2a')]();};}function saveUpdates(_0x942832,_0x569977){return function(_0x9e09c4){if(_0x9e09c4){return _0x9e09c4[_0x94c9('0x2b')](_0x942832)['then'](function(_0xd079d8){return _0xd079d8;});}return null;};}function removeEntity(_0x4b62ea,_0x2d20c6){return function(_0x3a3347){if(_0x3a3347){return _0x3a3347[_0x94c9('0x2c')]()[_0x94c9('0x18')](function(){_0x4b62ea[_0x94c9('0x23')](0xcc)['end']();});}};}function handleEntityNotFound(_0x303cf5,_0x3a2379){return function(_0x2f726f){if(!_0x2f726f){_0x303cf5[_0x94c9('0x21')](0x194);}return _0x2f726f;};}function handleError(_0x59f164,_0x4725be){_0x4725be=_0x4725be||0x1f4;return function(_0x1c6453){logger['error'](_0x1c6453[_0x94c9('0x2d')]);if(_0x1c6453[_0x94c9('0x2e')]){delete _0x1c6453[_0x94c9('0x2e')];}_0x59f164['status'](_0x4725be)[_0x94c9('0x2f')](_0x1c6453);};}exports[_0x94c9('0x30')]=function(_0x54a5ce,_0x3e5aee){var _0x577225={},_0x52f18e={},_0x149065={'count':0x0,'rows':[]};var _0x52ed35=db[_0x94c9('0x31')][_0x94c9('0x32')];_0x52f18e[_0x94c9('0x33')]=_[_0x94c9('0x34')](_0x52ed35);_0x52f18e[_0x94c9('0x35')]=_[_0x94c9('0x34')](_0x54a5ce['query']);_0x52f18e[_0x94c9('0x36')]=_[_0x94c9('0x37')](_0x52f18e[_0x94c9('0x33')],_0x52f18e[_0x94c9('0x35')]);_0x577225['attributes']=_[_0x94c9('0x37')](_0x52f18e[_0x94c9('0x33')],qs[_0x94c9('0x38')](_0x54a5ce[_0x94c9('0x35')]['fields']));_0x577225[_0x94c9('0x39')]=_0x577225[_0x94c9('0x39')][_0x94c9('0x3a')]?_0x577225['attributes']:_0x52f18e[_0x94c9('0x33')];if(!_0x54a5ce[_0x94c9('0x35')][_0x94c9('0x3b')](_0x94c9('0x3c'))){_0x577225[_0x94c9('0x27')]=qs[_0x94c9('0x27')](_0x54a5ce[_0x94c9('0x35')][_0x94c9('0x27')]);_0x577225[_0x94c9('0x26')]=qs[_0x94c9('0x26')](_0x54a5ce[_0x94c9('0x35')][_0x94c9('0x26')]);}_0x577225[_0x94c9('0x3d')]=qs[_0x94c9('0x3e')](_0x54a5ce[_0x94c9('0x35')][_0x94c9('0x3e')]);_0x577225[_0x94c9('0x3f')]=qs[_0x94c9('0x36')](_[_0x94c9('0x40')](_0x54a5ce[_0x94c9('0x35')],_0x52f18e[_0x94c9('0x36')]));if(_0x54a5ce['query'][_0x94c9('0x41')]){_0x577225[_0x94c9('0x3f')]=_[_0x94c9('0x42')](_0x577225['where'],{'$or':_[_0x94c9('0x43')](_0x52ed35,function(_0x58475c){if(_0x58475c[_0x94c9('0x44')][_0x94c9('0x45')]!==_0x94c9('0x46')){var _0x4806bb={};_0x4806bb[_0x58475c[_0x94c9('0x47')]]={'$like':'%'+_0x54a5ce['query'][_0x94c9('0x41')]+'%'};return _0x4806bb;}})});}_0x577225=_[_0x94c9('0x42')]({},_0x577225,_0x54a5ce[_0x94c9('0x48')]);var _0x13b6db={'where':_0x577225[_0x94c9('0x3f')]};return db[_0x94c9('0x31')]['count'](_0x13b6db)['then'](function(_0x5c3a4e){_0x149065[_0x94c9('0x25')]=_0x5c3a4e;if(_0x54a5ce[_0x94c9('0x35')][_0x94c9('0x49')]){_0x577225['include']=[{'all':!![]}];}return db[_0x94c9('0x31')]['findAll'](_0x577225);})[_0x94c9('0x18')](function(_0x27bcd6){_0x149065[_0x94c9('0x4a')]=_0x27bcd6;return _0x149065;})[_0x94c9('0x18')](respondWithFilteredResult(_0x3e5aee,_0x577225))[_0x94c9('0x20')](handleError(_0x3e5aee,null));};exports[_0x94c9('0x4b')]=function(_0x3b878e,_0x52ca34){var _0xe800ed={'raw':![],'where':{'id':_0x3b878e[_0x94c9('0x4c')]['id']}},_0x4b68c5={};_0x4b68c5[_0x94c9('0x33')]=_[_0x94c9('0x34')](db[_0x94c9('0x31')][_0x94c9('0x32')]);_0x4b68c5[_0x94c9('0x35')]=_[_0x94c9('0x34')](_0x3b878e[_0x94c9('0x35')]);_0x4b68c5['filters']=_[_0x94c9('0x37')](_0x4b68c5[_0x94c9('0x33')],_0x4b68c5[_0x94c9('0x35')]);_0xe800ed[_0x94c9('0x39')]=_[_0x94c9('0x37')](_0x4b68c5['model'],qs[_0x94c9('0x38')](_0x3b878e[_0x94c9('0x35')]['fields']));_0xe800ed[_0x94c9('0x39')]=_0xe800ed['attributes'][_0x94c9('0x3a')]?_0xe800ed['attributes']:_0x4b68c5['model'];if(_0x3b878e[_0x94c9('0x35')]['includeAll']){_0xe800ed[_0x94c9('0x4d')]=[{'all':!![]}];}_0xe800ed=_['merge']({},_0xe800ed,_0x3b878e[_0x94c9('0x48')]);return db[_0x94c9('0x31')][_0x94c9('0x4e')](_0xe800ed)['then'](handleEntityNotFound(_0x52ca34,null))[_0x94c9('0x18')](respondWithResult(_0x52ca34,null))[_0x94c9('0x20')](handleError(_0x52ca34,null));};exports[_0x94c9('0x4f')]=function(_0x25b075,_0x1b35ca){return db['FreshdeskAccount']['create'](_0x25b075[_0x94c9('0x50')],{})[_0x94c9('0x18')](respondWithResult(_0x1b35ca,0xc9))[_0x94c9('0x20')](handleError(_0x1b35ca,null));};exports['update']=function(_0x433b6e,_0x8cd580){if(_0x433b6e[_0x94c9('0x50')]['id']){delete _0x433b6e['body']['id'];}return db[_0x94c9('0x31')][_0x94c9('0x4e')]({'where':{'id':_0x433b6e[_0x94c9('0x4c')]['id']}})[_0x94c9('0x18')](handleEntityNotFound(_0x8cd580,null))[_0x94c9('0x18')](saveUpdates(_0x433b6e[_0x94c9('0x50')],null))[_0x94c9('0x18')](respondWithResult(_0x8cd580,null))[_0x94c9('0x20')](handleError(_0x8cd580,null));};exports['destroy']=function(_0x399215,_0x2592ba){return db[_0x94c9('0x31')]['find']({'where':{'id':_0x399215['params']['id']}})['then'](handleEntityNotFound(_0x2592ba,null))['then'](removeEntity(_0x2592ba,null))['catch'](handleError(_0x2592ba,null));};exports[_0x94c9('0x51')]=function(_0x262bc1,_0x30c285,_0x31cf2a){var _0x2d064d={};var _0x54adc8={};var _0xe9cc6a;var _0x22338c;return db[_0x94c9('0x31')][_0x94c9('0x52')]({'where':{'id':_0x262bc1[_0x94c9('0x4c')]['id']}})['then'](handleEntityNotFound(_0x30c285,null))['then'](function(_0x5835d8){if(_0x5835d8){_0xe9cc6a=_0x5835d8;_0x54adc8[_0x94c9('0x33')]=_['keys'](db[_0x94c9('0x53')][_0x94c9('0x32')]);_0x54adc8[_0x94c9('0x35')]=_[_0x94c9('0x34')](_0x262bc1['query']);_0x54adc8[_0x94c9('0x36')]=_[_0x94c9('0x37')](_0x54adc8[_0x94c9('0x33')],_0x54adc8[_0x94c9('0x35')]);_0x2d064d[_0x94c9('0x39')]=_[_0x94c9('0x37')](_0x54adc8[_0x94c9('0x33')],qs[_0x94c9('0x38')](_0x262bc1[_0x94c9('0x35')][_0x94c9('0x38')]));_0x2d064d[_0x94c9('0x39')]=_0x2d064d[_0x94c9('0x39')][_0x94c9('0x3a')]?_0x2d064d[_0x94c9('0x39')]:_0x54adc8[_0x94c9('0x33')];_0x2d064d['order']=qs[_0x94c9('0x3e')](_0x262bc1[_0x94c9('0x35')][_0x94c9('0x3e')]);_0x2d064d[_0x94c9('0x3f')]=qs[_0x94c9('0x36')](_[_0x94c9('0x40')](_0x262bc1[_0x94c9('0x35')],_0x54adc8[_0x94c9('0x36')]));if(_0x262bc1[_0x94c9('0x35')][_0x94c9('0x41')]){_0x2d064d[_0x94c9('0x3f')]=_[_0x94c9('0x42')](_0x2d064d[_0x94c9('0x3f')],{'$or':_[_0x94c9('0x43')](_0x2d064d[_0x94c9('0x39')],function(_0x1bf299){var _0x564175={};_0x564175[_0x1bf299]={'$like':'%'+_0x262bc1[_0x94c9('0x35')][_0x94c9('0x41')]+'%'};return _0x564175;})});}_0x2d064d=_[_0x94c9('0x42')]({},_0x2d064d,_0x262bc1[_0x94c9('0x48')]);return _0xe9cc6a['getConfigurations'](_0x2d064d);}})['then'](function(_0xdf95a6){if(_0xdf95a6){_0x22338c=_0xdf95a6[_0x94c9('0x3a')];if(!_0x262bc1[_0x94c9('0x35')][_0x94c9('0x3b')]('nolimit')){_0x2d064d['limit']=qs[_0x94c9('0x27')](_0x262bc1[_0x94c9('0x35')][_0x94c9('0x27')]);_0x2d064d[_0x94c9('0x26')]=qs[_0x94c9('0x26')](_0x262bc1[_0x94c9('0x35')][_0x94c9('0x26')]);}return _0xe9cc6a['getConfigurations'](_0x2d064d);}})['then'](function(_0x3a0c0d){if(_0x3a0c0d){return _0x3a0c0d?{'count':_0x22338c,'rows':_0x3a0c0d}:null;}})[_0x94c9('0x18')](respondWithResult(_0x30c285,null))['catch'](handleError(_0x30c285,null));};exports['addConfiguration']=function(_0x4d7be8,_0x51a1df,_0x584556){if(_0x4d7be8['body']['id']){delete _0x4d7be8[_0x94c9('0x50')]['id'];}return db[_0x94c9('0x31')][_0x94c9('0x52')]({'where':{'id':_0x4d7be8[_0x94c9('0x4c')]['id']}})['then'](handleEntityNotFound(_0x51a1df,null))[_0x94c9('0x18')](function(_0x5cbcb9){if(_0x5cbcb9){_0x4d7be8[_0x94c9('0x50')][_0x94c9('0x54')]=_0x5cbcb9['id'];_0x4d7be8['body'][_0x94c9('0x55')]=integrations[_0x94c9('0x56')](_0x4d7be8[_0x94c9('0x50')]['channel'],_0x4d7be8['body'][_0x94c9('0x44')]);_0x4d7be8[_0x94c9('0x50')][_0x94c9('0x57')]=integrations['getDescriptions'](_0x4d7be8['body']['channel'],_0x4d7be8[_0x94c9('0x50')]['type']);return db[_0x94c9('0x53')][_0x94c9('0x4f')](_0x4d7be8[_0x94c9('0x50')],{'include':[{'model':db[_0x94c9('0x58')],'as':_0x94c9('0x55')},{'model':db[_0x94c9('0x58')],'as':_0x94c9('0x57')}]});}return null;})[_0x94c9('0x18')](respondWithResult(_0x51a1df,null))['catch'](handleError(_0x51a1df,null));};exports['getFields']=function(_0x305dff,_0x4eb33a,_0x2353e6){var _0xda474b='';return db[_0x94c9('0x31')][_0x94c9('0x52')]({'where':{'id':_0x305dff['params']['id']},'attributes':['id','remoteUri',_0x94c9('0x59')]})[_0x94c9('0x18')](handleEntityNotFound(_0x4eb33a,null))[_0x94c9('0x18')](function(_0x4c3997){if(_0x4c3997){_0xda474b=_0x4c3997[_0x94c9('0x5a')];var _0x3b9dc1=_0xda474b['slice'](-0x1);if(_0x3b9dc1==='/'){_0xda474b=_0xda474b[_0x94c9('0x5b')](0x0,_0xda474b[_0x94c9('0x5c')](_0x3b9dc1));}return rp({'method':'GET','uri':util['format'](_0x94c9('0x5d'),_0xda474b,_0x94c9('0x5e')),'headers':{'Authorization':util[_0x94c9('0x5f')](_0x94c9('0x60'),new Buffer(util['format']('%s:X',_0x4c3997[_0x94c9('0x59')]))[_0x94c9('0x61')](_0x94c9('0x62')))},'json':!![]});}})[_0x94c9('0x18')](function(_0x2c241e){if(_0x2c241e){var _0x19412f=[_0x94c9('0x63'),'subject',_0x94c9('0x64'),'description',_0x94c9('0x23'),_0x94c9('0x65'),'group',_0x94c9('0x66'),'ticket_type',_0x94c9('0x67'),_0x94c9('0x68')];_['remove'](_0x2c241e,function(_0x334712){return _0x19412f[_0x94c9('0x69')](_0x334712[_0x94c9('0x2e')])||!_0x334712['default']&&_0x334712[_0x94c9('0x44')]!==_0x94c9('0x6a')&&_0x334712['type']!=='custom_dropdown';});return{'count':_0x2c241e[_0x94c9('0x3a')],'rows':_[_0x94c9('0x43')](_0x2c241e,function(_0x399822){return{'id':_0x399822[_0x94c9('0x2e')],'name':_0x399822[_0x94c9('0x6b')],'custom':!_0x399822['default'],'options':_0x399822[_0x94c9('0x6c')]?_['map'](_0x399822['choices'],function(_0x1345e9){return{'name':_[_0x94c9('0x6d')](_0x1345e9),'value':_0x1345e9};}):[]};})};}})[_0x94c9('0x18')](respondWithResult(_0x4eb33a,null))['catch'](function(_0x4dd5d7){var _0x3268c3=_0x305dff[_0x94c9('0x35')][_0x94c9('0x6e')]?0x1f4:_0x4dd5d7['statusCode']||0x1f4;logger[_0x94c9('0x1d')](_0x94c9('0x6f'),'getFields',_0x3268c3,JSON[_0x94c9('0x1c')](_0x4dd5d7));delete _0x4dd5d7[_0x94c9('0x2e')];if(_0x3268c3===0x191){_0x3268c3=0x190;}_0x4eb33a[_0x94c9('0x23')](_0x3268c3)[_0x94c9('0x2f')](_0x305dff[_0x94c9('0x35')][_0x94c9('0x6e')]?{'message':_0x94c9('0x70'),'statusCode':_0x4dd5d7['statusCode']}:_0x4dd5d7);});};
\ No newline at end of file
+var _0x073d=['catch','sendStatus','status','end','count','limit','Content-Range','apply','reject','save','destroy','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','sort','where','filter','type','key','VIRTUAL','field','options','FreshdeskAccount','includeAll','include','findAll','rows','show','merge','create','body','update','find','params','getConfigurations','findOne','FreshdeskConfiguration','order','pick','map','AccountId','Subjects','getSubjects','getDescriptions','channel','FreshdeskField','Descriptions','getFields','apiKey','remoteUri','slice','substring','lastIndexOf','GET','format','%s/%s','api/v2/ticket_fields','%s:X','toString','base64','requester','description','group','ticket_type','company','remove','includes','name','default','custom_text','custom_dropdown','choices','capitalize','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','eml-format','rimraf','zip-dir','request-promise','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','http','request','then','info','request\x20sent','stringify','error','code','FreshdeskAccount,\x20%s,\x20%s','message','result'];(function(_0x356ddc,_0x16b1fa){var _0x427986=function(_0x2a5bef){while(--_0x2a5bef){_0x356ddc['push'](_0x356ddc['shift']());}};_0x427986(++_0x16b1fa);}(_0x073d,0xd2));var _0xd073=function(_0x2b91ac,_0x310741){_0x2b91ac=_0x2b91ac-0x0;var _0xe88814=_0x073d[_0x2b91ac];return _0xe88814;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xd073('0x0'));var rimraf=require(_0xd073('0x1'));var zipdir=require(_0xd073('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xd073('0x3'));var moment=require('moment');var BPromise=require(_0xd073('0x4'));var Mustache=require(_0xd073('0x5'));var util=require('util');var path=require(_0xd073('0x6'));var sox=require(_0xd073('0x7'));var csv=require(_0xd073('0x8'));var ejs=require(_0xd073('0x9'));var fs=require('fs');var _=require(_0xd073('0xa'));var squel=require(_0xd073('0xb'));var crypto=require(_0xd073('0xc'));var jsforce=require(_0xd073('0xd'));var deskjs=require(_0xd073('0xe'));var toCsv=require(_0xd073('0x8'));var querystring=require(_0xd073('0xf'));var Papa=require(_0xd073('0x10'));var authService=require(_0xd073('0x11'));var hardwareService=require(_0xd073('0x12'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0xd073('0x13'))('api');var utils=require(_0xd073('0x14'));var config=require(_0xd073('0x15'));var db=require(_0xd073('0x16'))['db'];var integrations=require(_0xd073('0x17'));var jayson=require(_0xd073('0x18'));var client=jayson['client'][_0xd073('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x6769eb,_0x43d214,_0x7d469e,_0x589073){return new BPromise(function(_0x36195c,_0x2e35bc){var _0x5066a8=_0x589073||client;return _0x5066a8[_0xd073('0x1a')](_0x6769eb,_0x7d469e)[_0xd073('0x1b')](function(_0xe3f97){logger[_0xd073('0x1c')]('FreshdeskAccount,\x20%s,\x20%s',_0x43d214,_0xd073('0x1d'));logger['debug']('FreshdeskAccount,\x20%s,\x20%s,\x20%s',_0x43d214,_0xd073('0x1d'),JSON[_0xd073('0x1e')](_0xe3f97));if(_0xe3f97[_0xd073('0x1f')]){if(_0xe3f97['error'][_0xd073('0x20')]===0x1f4){logger[_0xd073('0x1f')](_0xd073('0x21'),_0x43d214,_0xe3f97['error'][_0xd073('0x22')]);return _0x2e35bc(_0xe3f97[_0xd073('0x1f')][_0xd073('0x22')]);}logger[_0xd073('0x1f')]('FreshdeskAccount,\x20%s,\x20%s',_0x43d214,_0xe3f97[_0xd073('0x1f')][_0xd073('0x22')]);return _0x36195c(_0xe3f97[_0xd073('0x1f')]['message']);}else{logger[_0xd073('0x1c')](_0xd073('0x21'),_0x43d214,'request\x20sent');_0x36195c(_0xe3f97[_0xd073('0x23')][_0xd073('0x22')]);}})[_0xd073('0x24')](function(_0x55ce48){logger['error']('FreshdeskAccount,\x20%s,\x20%s',_0x43d214,_0x55ce48);_0x2e35bc(_0x55ce48);});});}function respondWithStatusCode(_0x4caa5d,_0x326bed){_0x326bed=_0x326bed||0xcc;return function(_0x1f51cd){if(_0x1f51cd){return _0x4caa5d[_0xd073('0x25')](_0x326bed);}return _0x4caa5d[_0xd073('0x26')](_0x326bed)[_0xd073('0x27')]();};}function respondWithResult(_0x2cd242,_0x1512a5){_0x1512a5=_0x1512a5||0xc8;return function(_0x28eae0){if(_0x28eae0){return _0x2cd242[_0xd073('0x26')](_0x1512a5)['json'](_0x28eae0);}};}function respondWithFilteredResult(_0xda2c7d,_0x5c43f3){return function(_0x26bf66){if(_0x26bf66){var _0x34d20b=_0x26bf66[_0xd073('0x28')],_0x2ef2e3=_0x5c43f3['offset'],_0x3b1678=_0x5c43f3['offset']+_0x5c43f3[_0xd073('0x29')],_0x55f8b1;if(_0x3b1678>=_0x34d20b){_0x3b1678=_0x34d20b;_0x55f8b1=0xc8;}else{_0x55f8b1=0xce;}_0xda2c7d[_0xd073('0x26')](_0x55f8b1);return _0xda2c7d['set'](_0xd073('0x2a'),_0x2ef2e3+'-'+_0x3b1678+'/'+_0x34d20b)['json'](_0x26bf66);}return null;};}function patchUpdates(_0xa80cc8){return function(_0x5dbf33){try{jsonpatch[_0xd073('0x2b')](_0x5dbf33,_0xa80cc8,!![]);}catch(_0x34c6e3){return BPromise[_0xd073('0x2c')](_0x34c6e3);}return _0x5dbf33[_0xd073('0x2d')]();};}function saveUpdates(_0x314517,_0x480e94){return function(_0x1ac1ea){if(_0x1ac1ea){return _0x1ac1ea['update'](_0x314517)[_0xd073('0x1b')](function(_0x34fbf3){return _0x34fbf3;});}return null;};}function removeEntity(_0x21c7ad,_0x320253){return function(_0x27d965){if(_0x27d965){return _0x27d965[_0xd073('0x2e')]()[_0xd073('0x1b')](function(){_0x21c7ad[_0xd073('0x26')](0xcc)[_0xd073('0x27')]();});}};}function handleEntityNotFound(_0x5d0ddb,_0x83dac5){return function(_0x4d35ee){if(!_0x4d35ee){_0x5d0ddb[_0xd073('0x25')](0x194);}return _0x4d35ee;};}function handleError(_0x5682b8,_0x1033c1){_0x1033c1=_0x1033c1||0x1f4;return function(_0x10c961){logger[_0xd073('0x1f')](_0x10c961['stack']);if(_0x10c961['name']){delete _0x10c961['name'];}_0x5682b8[_0xd073('0x26')](_0x1033c1)[_0xd073('0x2f')](_0x10c961);};}exports[_0xd073('0x30')]=function(_0x5042ba,_0x1fd326){var _0x35b2ac={},_0x4f08f2={},_0x70d9dc={'count':0x0,'rows':[]};var _0x28a13e=db['FreshdeskAccount'][_0xd073('0x31')];_0x4f08f2[_0xd073('0x32')]=_[_0xd073('0x33')](_0x28a13e);_0x4f08f2[_0xd073('0x34')]=_[_0xd073('0x33')](_0x5042ba['query']);_0x4f08f2[_0xd073('0x35')]=_[_0xd073('0x36')](_0x4f08f2[_0xd073('0x32')],_0x4f08f2['query']);_0x35b2ac[_0xd073('0x37')]=_[_0xd073('0x36')](_0x4f08f2[_0xd073('0x32')],qs['fields'](_0x5042ba[_0xd073('0x34')][_0xd073('0x38')]));_0x35b2ac[_0xd073('0x37')]=_0x35b2ac[_0xd073('0x37')][_0xd073('0x39')]?_0x35b2ac[_0xd073('0x37')]:_0x4f08f2['model'];if(!_0x5042ba['query'][_0xd073('0x3a')](_0xd073('0x3b'))){_0x35b2ac[_0xd073('0x29')]=qs[_0xd073('0x29')](_0x5042ba['query'][_0xd073('0x29')]);_0x35b2ac[_0xd073('0x3c')]=qs[_0xd073('0x3c')](_0x5042ba['query'][_0xd073('0x3c')]);}_0x35b2ac['order']=qs['sort'](_0x5042ba[_0xd073('0x34')][_0xd073('0x3d')]);_0x35b2ac[_0xd073('0x3e')]=qs[_0xd073('0x35')](_['pick'](_0x5042ba[_0xd073('0x34')],_0x4f08f2['filters']));if(_0x5042ba[_0xd073('0x34')][_0xd073('0x3f')]){_0x35b2ac[_0xd073('0x3e')]=_['merge'](_0x35b2ac[_0xd073('0x3e')],{'$or':_['map'](_0x28a13e,function(_0x1aeb05){if(_0x1aeb05[_0xd073('0x40')][_0xd073('0x41')]!==_0xd073('0x42')){var _0x41c0fe={};_0x41c0fe[_0x1aeb05[_0xd073('0x43')]]={'$like':'%'+_0x5042ba[_0xd073('0x34')][_0xd073('0x3f')]+'%'};return _0x41c0fe;}})});}_0x35b2ac=_['merge']({},_0x35b2ac,_0x5042ba[_0xd073('0x44')]);var _0x33d74b={'where':_0x35b2ac[_0xd073('0x3e')]};return db[_0xd073('0x45')][_0xd073('0x28')](_0x33d74b)[_0xd073('0x1b')](function(_0x24f16d){_0x70d9dc[_0xd073('0x28')]=_0x24f16d;if(_0x5042ba['query'][_0xd073('0x46')]){_0x35b2ac[_0xd073('0x47')]=[{'all':!![]}];}return db[_0xd073('0x45')][_0xd073('0x48')](_0x35b2ac);})[_0xd073('0x1b')](function(_0x276684){_0x70d9dc[_0xd073('0x49')]=_0x276684;return _0x70d9dc;})[_0xd073('0x1b')](respondWithFilteredResult(_0x1fd326,_0x35b2ac))['catch'](handleError(_0x1fd326,null));};exports[_0xd073('0x4a')]=function(_0x51ff18,_0x5bf43c){var _0x408c0d={'raw':![],'where':{'id':_0x51ff18['params']['id']}},_0x249e45={};_0x249e45[_0xd073('0x32')]=_['keys'](db[_0xd073('0x45')][_0xd073('0x31')]);_0x249e45[_0xd073('0x34')]=_[_0xd073('0x33')](_0x51ff18[_0xd073('0x34')]);_0x249e45[_0xd073('0x35')]=_[_0xd073('0x36')](_0x249e45['model'],_0x249e45[_0xd073('0x34')]);_0x408c0d[_0xd073('0x37')]=_[_0xd073('0x36')](_0x249e45[_0xd073('0x32')],qs[_0xd073('0x38')](_0x51ff18[_0xd073('0x34')][_0xd073('0x38')]));_0x408c0d[_0xd073('0x37')]=_0x408c0d[_0xd073('0x37')][_0xd073('0x39')]?_0x408c0d[_0xd073('0x37')]:_0x249e45['model'];if(_0x51ff18['query']['includeAll']){_0x408c0d[_0xd073('0x47')]=[{'all':!![]}];}_0x408c0d=_[_0xd073('0x4b')]({},_0x408c0d,_0x51ff18[_0xd073('0x44')]);return db[_0xd073('0x45')]['find'](_0x408c0d)['then'](handleEntityNotFound(_0x5bf43c,null))[_0xd073('0x1b')](respondWithResult(_0x5bf43c,null))['catch'](handleError(_0x5bf43c,null));};exports['create']=function(_0x3f359d,_0x8b1d95){return db[_0xd073('0x45')][_0xd073('0x4c')](_0x3f359d[_0xd073('0x4d')],{})['then'](respondWithResult(_0x8b1d95,0xc9))[_0xd073('0x24')](handleError(_0x8b1d95,null));};exports[_0xd073('0x4e')]=function(_0xc03db4,_0x14aac1){if(_0xc03db4['body']['id']){delete _0xc03db4[_0xd073('0x4d')]['id'];}return db[_0xd073('0x45')][_0xd073('0x4f')]({'where':{'id':_0xc03db4['params']['id']}})['then'](handleEntityNotFound(_0x14aac1,null))[_0xd073('0x1b')](saveUpdates(_0xc03db4[_0xd073('0x4d')],null))['then'](respondWithResult(_0x14aac1,null))[_0xd073('0x24')](handleError(_0x14aac1,null));};exports[_0xd073('0x2e')]=function(_0x42d2de,_0x13884f){return db[_0xd073('0x45')][_0xd073('0x4f')]({'where':{'id':_0x42d2de[_0xd073('0x50')]['id']}})[_0xd073('0x1b')](handleEntityNotFound(_0x13884f,null))['then'](removeEntity(_0x13884f,null))[_0xd073('0x24')](handleError(_0x13884f,null));};exports[_0xd073('0x51')]=function(_0x318f11,_0x5eee32,_0x2a8580){var _0x19ff17={};var _0x458db7={};var _0x221a90;var _0x2dc51c;return db[_0xd073('0x45')][_0xd073('0x52')]({'where':{'id':_0x318f11[_0xd073('0x50')]['id']}})[_0xd073('0x1b')](handleEntityNotFound(_0x5eee32,null))[_0xd073('0x1b')](function(_0x3e5a8d){if(_0x3e5a8d){_0x221a90=_0x3e5a8d;_0x458db7[_0xd073('0x32')]=_[_0xd073('0x33')](db[_0xd073('0x53')][_0xd073('0x31')]);_0x458db7[_0xd073('0x34')]=_[_0xd073('0x33')](_0x318f11['query']);_0x458db7[_0xd073('0x35')]=_['intersection'](_0x458db7[_0xd073('0x32')],_0x458db7['query']);_0x19ff17['attributes']=_[_0xd073('0x36')](_0x458db7[_0xd073('0x32')],qs[_0xd073('0x38')](_0x318f11[_0xd073('0x34')][_0xd073('0x38')]));_0x19ff17[_0xd073('0x37')]=_0x19ff17[_0xd073('0x37')][_0xd073('0x39')]?_0x19ff17[_0xd073('0x37')]:_0x458db7['model'];_0x19ff17[_0xd073('0x54')]=qs[_0xd073('0x3d')](_0x318f11[_0xd073('0x34')][_0xd073('0x3d')]);_0x19ff17[_0xd073('0x3e')]=qs[_0xd073('0x35')](_[_0xd073('0x55')](_0x318f11[_0xd073('0x34')],_0x458db7['filters']));if(_0x318f11[_0xd073('0x34')][_0xd073('0x3f')]){_0x19ff17[_0xd073('0x3e')]=_[_0xd073('0x4b')](_0x19ff17[_0xd073('0x3e')],{'$or':_[_0xd073('0x56')](_0x19ff17[_0xd073('0x37')],function(_0x6b42e6){var _0xa5e601={};_0xa5e601[_0x6b42e6]={'$like':'%'+_0x318f11[_0xd073('0x34')][_0xd073('0x3f')]+'%'};return _0xa5e601;})});}_0x19ff17=_['merge']({},_0x19ff17,_0x318f11[_0xd073('0x44')]);return _0x221a90[_0xd073('0x51')](_0x19ff17);}})[_0xd073('0x1b')](function(_0x3f2ff1){if(_0x3f2ff1){_0x2dc51c=_0x3f2ff1['length'];if(!_0x318f11[_0xd073('0x34')][_0xd073('0x3a')](_0xd073('0x3b'))){_0x19ff17[_0xd073('0x29')]=qs[_0xd073('0x29')](_0x318f11[_0xd073('0x34')][_0xd073('0x29')]);_0x19ff17[_0xd073('0x3c')]=qs[_0xd073('0x3c')](_0x318f11[_0xd073('0x34')][_0xd073('0x3c')]);}return _0x221a90['getConfigurations'](_0x19ff17);}})['then'](function(_0x1e30bf){if(_0x1e30bf){return _0x1e30bf?{'count':_0x2dc51c,'rows':_0x1e30bf}:null;}})[_0xd073('0x1b')](respondWithResult(_0x5eee32,null))[_0xd073('0x24')](handleError(_0x5eee32,null));};exports['addConfiguration']=function(_0x646114,_0x2bfe28,_0x5779b2){if(_0x646114[_0xd073('0x4d')]['id']){delete _0x646114['body']['id'];}return db[_0xd073('0x45')]['findOne']({'where':{'id':_0x646114[_0xd073('0x50')]['id']}})[_0xd073('0x1b')](handleEntityNotFound(_0x2bfe28,null))[_0xd073('0x1b')](function(_0xe98cd5){if(_0xe98cd5){_0x646114['body'][_0xd073('0x57')]=_0xe98cd5['id'];_0x646114[_0xd073('0x4d')][_0xd073('0x58')]=integrations[_0xd073('0x59')](_0x646114[_0xd073('0x4d')]['channel'],_0x646114[_0xd073('0x4d')][_0xd073('0x40')]);_0x646114[_0xd073('0x4d')]['Descriptions']=integrations[_0xd073('0x5a')](_0x646114[_0xd073('0x4d')][_0xd073('0x5b')],_0x646114[_0xd073('0x4d')][_0xd073('0x40')]);return db['FreshdeskConfiguration'][_0xd073('0x4c')](_0x646114['body'],{'include':[{'model':db[_0xd073('0x5c')],'as':_0xd073('0x58')},{'model':db[_0xd073('0x5c')],'as':_0xd073('0x5d')}]});}return null;})[_0xd073('0x1b')](respondWithResult(_0x2bfe28,null))['catch'](handleError(_0x2bfe28,null));};exports[_0xd073('0x5e')]=function(_0x525b90,_0x2b25db,_0x182aac){var _0x27ed4c='';return db[_0xd073('0x45')]['findOne']({'where':{'id':_0x525b90['params']['id']},'attributes':['id','remoteUri',_0xd073('0x5f')]})[_0xd073('0x1b')](handleEntityNotFound(_0x2b25db,null))['then'](function(_0x2aeddf){if(_0x2aeddf){_0x27ed4c=_0x2aeddf[_0xd073('0x60')];var _0x566202=_0x27ed4c[_0xd073('0x61')](-0x1);if(_0x566202==='/'){_0x27ed4c=_0x27ed4c[_0xd073('0x62')](0x0,_0x27ed4c[_0xd073('0x63')](_0x566202));}return rp({'method':_0xd073('0x64'),'uri':util[_0xd073('0x65')](_0xd073('0x66'),_0x27ed4c,_0xd073('0x67')),'headers':{'Authorization':util['format']('Basic\x20%s',new Buffer(util[_0xd073('0x65')](_0xd073('0x68'),_0x2aeddf[_0xd073('0x5f')]))[_0xd073('0x69')](_0xd073('0x6a')))},'json':!![]});}})[_0xd073('0x1b')](function(_0x4221c7){if(_0x4221c7){var _0x17355=[_0xd073('0x6b'),'subject','agent',_0xd073('0x6c'),_0xd073('0x26'),'priority',_0xd073('0x6d'),'source',_0xd073('0x6e'),_0xd073('0x6d'),_0xd073('0x6f')];_[_0xd073('0x70')](_0x4221c7,function(_0x568f13){return _0x17355[_0xd073('0x71')](_0x568f13[_0xd073('0x72')])||!_0x568f13[_0xd073('0x73')]&&_0x568f13['type']!==_0xd073('0x74')&&_0x568f13[_0xd073('0x40')]!==_0xd073('0x75');});return{'count':_0x4221c7[_0xd073('0x39')],'rows':_[_0xd073('0x56')](_0x4221c7,function(_0x4b53c0){return{'id':_0x4b53c0['name'],'name':_0x4b53c0['label'],'custom':!_0x4b53c0[_0xd073('0x73')],'options':_0x4b53c0[_0xd073('0x76')]?_[_0xd073('0x56')](_0x4b53c0[_0xd073('0x76')],function(_0xda57ab){return{'name':_[_0xd073('0x77')](_0xda57ab),'value':_0xda57ab};}):[]};})};}})[_0xd073('0x1b')](respondWithResult(_0x2b25db,null))[_0xd073('0x24')](function(_0x126142){var _0x40d9cc=_0x525b90[_0xd073('0x34')][_0xd073('0x78')]?0x1f4:_0x126142[_0xd073('0x79')]||0x1f4;logger[_0xd073('0x1f')](_0xd073('0x7a'),'getFields',_0x40d9cc,JSON[_0xd073('0x1e')](_0x126142));delete _0x126142[_0xd073('0x72')];if(_0x40d9cc===0x191){_0x40d9cc=0x190;}_0x2b25db['status'](_0x40d9cc)[_0xd073('0x2f')](_0x525b90[_0xd073('0x34')][_0xd073('0x78')]?{'message':'Wrong\x20credentials','statusCode':_0x126142['statusCode']}:_0x126142);});};
\ No newline at end of file
index 899f7bc..c610b9f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2cbd=['../../components/integrations/configuration','define','FreshdeskAccount','int_freshdesk_accounts','lodash','util','api','moment','bluebird','./intFreshdeskAccount.attributes'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2cbd,0x19e));var _0xd2cb=function(_0x4f8d61,_0x29eff0){_0x4f8d61=_0x4f8d61-0x0;var _0x3bc078=_0x2cbd[_0x4f8d61];return _0x3bc078;};'use strict';var _=require(_0xd2cb('0x0'));var util=require(_0xd2cb('0x1'));var logger=require('../../config/logger')(_0xd2cb('0x2'));var moment=require(_0xd2cb('0x3'));var BPromise=require(_0xd2cb('0x4'));var rp=require('request-promise');var attributes=require(_0xd2cb('0x5'));var integrations=require(_0xd2cb('0x6'));module['exports']=function(_0x4e4b04,_0x409c0f){return _0x4e4b04[_0xd2cb('0x7')](_0xd2cb('0x8'),attributes,{'tableName':_0xd2cb('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa03f=['lodash','util','../../config/logger','api','bluebird','request-promise','../../components/integrations/configuration','exports','define','FreshdeskAccount','int_freshdesk_accounts'];(function(_0x4724ca,_0x4dbe47){var _0x5f2710=function(_0x47a576){while(--_0x47a576){_0x4724ca['push'](_0x4724ca['shift']());}};_0x5f2710(++_0x4dbe47);}(_0xa03f,0x1ce));var _0xfa03=function(_0x3ac7dc,_0x2484cb){_0x3ac7dc=_0x3ac7dc-0x0;var _0x94bcc=_0xa03f[_0x3ac7dc];return _0x94bcc;};'use strict';var _=require(_0xfa03('0x0'));var util=require(_0xfa03('0x1'));var logger=require(_0xfa03('0x2'))(_0xfa03('0x3'));var moment=require('moment');var BPromise=require(_0xfa03('0x4'));var rp=require(_0xfa03('0x5'));var attributes=require('./intFreshdeskAccount.attributes');var integrations=require(_0xfa03('0x6'));module[_0xfa03('0x7')]=function(_0x43ada0,_0x9d513d){return _0x43ada0[_0xfa03('0x8')](_0xfa03('0x9'),attributes,{'tableName':_0xfa03('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1fb9ec9..c6f2b11 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0496=['util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','FreshdeskAccount,\x20%s,\x20%s','request\x20sent','debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','GetFreshdeskAccount','FreshdeskAccount','findAll','options','where','attributes','include','map','model','then','ShowFreshdeskAccount','find','raw','lodash'];(function(_0x5f29d1,_0x4d3cd7){var _0x518f0e=function(_0x180b1d){while(--_0x180b1d){_0x5f29d1['push'](_0x5f29d1['shift']());}};_0x518f0e(++_0x4d3cd7);}(_0x0496,0x6e));var _0x6049=function(_0x51af78,_0x1448f6){_0x51af78=_0x51af78-0x0;var _0x547ff7=_0x0496[_0x51af78];return _0x547ff7;};'use strict';var _=require(_0x6049('0x0'));var util=require(_0x6049('0x1'));var moment=require(_0x6049('0x2'));var BPromise=require('bluebird');var rs=require(_0x6049('0x3'));var fs=require('fs');var Redis=require(_0x6049('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x6049('0x5'));var logger=require(_0x6049('0x6'))(_0x6049('0x7'));var config=require(_0x6049('0x8'));var jayson=require(_0x6049('0x9'));var client=jayson[_0x6049('0xa')][_0x6049('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x59f7f0,_0x2f547a,_0x233e0a){return new BPromise(function(_0x4fc843,_0x175a6f){return client[_0x6049('0xc')](_0x59f7f0,_0x233e0a)['then'](function(_0x13a971){logger['info'](_0x6049('0xd'),_0x2f547a,_0x6049('0xe'));logger[_0x6049('0xf')](_0x6049('0x10'),_0x2f547a,_0x6049('0xe'),JSON[_0x6049('0x11')](_0x13a971));if(_0x13a971[_0x6049('0x12')]){if(_0x13a971[_0x6049('0x12')][_0x6049('0x13')]===0x1f4){logger[_0x6049('0x12')](_0x6049('0xd'),_0x2f547a,_0x13a971[_0x6049('0x12')][_0x6049('0x14')]);return _0x175a6f(_0x13a971[_0x6049('0x12')][_0x6049('0x14')]);}logger['error'](_0x6049('0xd'),_0x2f547a,_0x13a971[_0x6049('0x12')][_0x6049('0x14')]);return _0x4fc843(_0x13a971[_0x6049('0x12')]['message']);}else{logger[_0x6049('0x15')](_0x6049('0xd'),_0x2f547a,_0x6049('0xe'));_0x4fc843(_0x13a971[_0x6049('0x16')][_0x6049('0x14')]);}})[_0x6049('0x17')](function(_0x14aea7){logger[_0x6049('0x12')](_0x6049('0xd'),_0x2f547a,_0x14aea7);_0x175a6f(_0x14aea7);});});}exports[_0x6049('0x18')]=function(_0x4a58d6){var _0x597077=this;return new Promise(function(_0x4b5c,_0x310ac4){return db[_0x6049('0x19')][_0x6049('0x1a')]({'raw':_0x4a58d6[_0x6049('0x1b')]?_0x4a58d6[_0x6049('0x1b')]['raw']===undefined?!![]:![]:!![],'where':_0x4a58d6[_0x6049('0x1b')]?_0x4a58d6[_0x6049('0x1b')][_0x6049('0x1c')]||null:null,'attributes':_0x4a58d6['options']?_0x4a58d6[_0x6049('0x1b')][_0x6049('0x1d')]||null:null,'limit':_0x4a58d6[_0x6049('0x1b')]?_0x4a58d6['options']['limit']||null:null,'include':_0x4a58d6[_0x6049('0x1b')]?_0x4a58d6['options'][_0x6049('0x1e')]?_[_0x6049('0x1f')](_0x4a58d6[_0x6049('0x1b')][_0x6049('0x1e')],function(_0x4ebe1b){return{'model':db[_0x4ebe1b['model']],'as':_0x4ebe1b['as'],'attributes':_0x4ebe1b['attributes'],'include':_0x4ebe1b[_0x6049('0x1e')]?_['map'](_0x4ebe1b['include'],function(_0x127670){return{'model':db[_0x127670['model']],'as':_0x127670['as'],'attributes':_0x127670['attributes'],'include':_0x127670[_0x6049('0x1e')]?_[_0x6049('0x1f')](_0x127670[_0x6049('0x1e')],function(_0x59873e){return{'model':db[_0x59873e[_0x6049('0x20')]],'as':_0x59873e['as'],'attributes':_0x59873e['attributes']};}):[]};}):[]};}):[]:[]})[_0x6049('0x21')](function(_0x31c1fe){logger[_0x6049('0x15')]('GetFreshdeskAccount',_0x4a58d6);logger[_0x6049('0xf')](_0x6049('0x18'),_0x4a58d6,JSON[_0x6049('0x11')](_0x31c1fe));_0x4b5c(_0x31c1fe);})['catch'](function(_0x42f0cf){logger[_0x6049('0x12')](_0x6049('0x18'),_0x42f0cf[_0x6049('0x14')],_0x4a58d6);_0x310ac4(_0x597077[_0x6049('0x12')](0x1f4,_0x42f0cf[_0x6049('0x14')]));});});};exports[_0x6049('0x22')]=function(_0x55941f){var _0x29444b=this;return new Promise(function(_0x981af,_0x404662){return db[_0x6049('0x19')][_0x6049('0x23')]({'raw':_0x55941f[_0x6049('0x1b')]?_0x55941f[_0x6049('0x1b')][_0x6049('0x24')]===undefined?!![]:![]:!![],'where':_0x55941f['options']?_0x55941f[_0x6049('0x1b')]['where']||null:null,'attributes':_0x55941f[_0x6049('0x1b')]?_0x55941f['options'][_0x6049('0x1d')]||null:null,'include':_0x55941f[_0x6049('0x1b')]?_0x55941f['options'][_0x6049('0x1e')]?_[_0x6049('0x1f')](_0x55941f[_0x6049('0x1b')]['include'],function(_0x5cbbc1){return{'model':db[_0x5cbbc1[_0x6049('0x20')]],'as':_0x5cbbc1['as'],'attributes':_0x5cbbc1['attributes'],'include':_0x5cbbc1[_0x6049('0x1e')]?_[_0x6049('0x1f')](_0x5cbbc1['include'],function(_0x2f62d8){return{'model':db[_0x2f62d8[_0x6049('0x20')]],'as':_0x2f62d8['as'],'attributes':_0x2f62d8[_0x6049('0x1d')],'include':_0x2f62d8[_0x6049('0x1e')]?_[_0x6049('0x1f')](_0x2f62d8['include'],function(_0x33efc8){return{'model':db[_0x33efc8[_0x6049('0x20')]],'as':_0x33efc8['as'],'attributes':_0x33efc8[_0x6049('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x6049('0x21')](function(_0x23d1c0){logger['info'](_0x6049('0x22'),_0x55941f);logger[_0x6049('0xf')](_0x6049('0x22'),_0x55941f,JSON[_0x6049('0x11')](_0x23d1c0));_0x981af(_0x23d1c0);})[_0x6049('0x17')](function(_0x344b45){logger[_0x6049('0x12')](_0x6049('0x22'),_0x344b45[_0x6049('0x14')],_0x55941f);_0x404662(_0x29444b[_0x6049('0x12')](0x1f4,_0x344b45[_0x6049('0x14')]));});});};
\ No newline at end of file
+var _0x2994=['debug','FreshdeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','GetFreshdeskAccount','FreshdeskAccount','findAll','options','raw','where','attributes','include','map','model','catch','find','ShowFreshdeskAccount','lodash','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','FreshdeskAccount,\x20%s,\x20%s','request\x20sent'];(function(_0x29d623,_0x1a5c9c){var _0x242e59=function(_0x2c78ab){while(--_0x2c78ab){_0x29d623['push'](_0x29d623['shift']());}};_0x242e59(++_0x1a5c9c);}(_0x2994,0xbe));var _0x4299=function(_0x3ae34a,_0x143082){_0x3ae34a=_0x3ae34a-0x0;var _0x4c9edc=_0x2994[_0x3ae34a];return _0x4c9edc;};'use strict';var _=require(_0x4299('0x0'));var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x4299('0x1'));var db=require(_0x4299('0x2'))['db'];var utils=require(_0x4299('0x3'));var logger=require(_0x4299('0x4'))(_0x4299('0x5'));var config=require(_0x4299('0x6'));var jayson=require(_0x4299('0x7'));var client=jayson['client'][_0x4299('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x37742f,_0x4a9068,_0x2e8702){return new BPromise(function(_0x4070b6,_0x5a3df4){return client[_0x4299('0x9')](_0x37742f,_0x2e8702)[_0x4299('0xa')](function(_0x623804){logger[_0x4299('0xb')](_0x4299('0xc'),_0x4a9068,_0x4299('0xd'));logger[_0x4299('0xe')](_0x4299('0xf'),_0x4a9068,_0x4299('0xd'),JSON[_0x4299('0x10')](_0x623804));if(_0x623804[_0x4299('0x11')]){if(_0x623804[_0x4299('0x11')][_0x4299('0x12')]===0x1f4){logger[_0x4299('0x11')](_0x4299('0xc'),_0x4a9068,_0x623804[_0x4299('0x11')][_0x4299('0x13')]);return _0x5a3df4(_0x623804['error'][_0x4299('0x13')]);}logger[_0x4299('0x11')](_0x4299('0xc'),_0x4a9068,_0x623804['error'][_0x4299('0x13')]);return _0x4070b6(_0x623804[_0x4299('0x11')][_0x4299('0x13')]);}else{logger['info'](_0x4299('0xc'),_0x4a9068,_0x4299('0xd'));_0x4070b6(_0x623804[_0x4299('0x14')][_0x4299('0x13')]);}})['catch'](function(_0x3399b3){logger['error']('FreshdeskAccount,\x20%s,\x20%s',_0x4a9068,_0x3399b3);_0x5a3df4(_0x3399b3);});});}exports[_0x4299('0x15')]=function(_0x427a31){var _0x835d94=this;return new Promise(function(_0xb3ec52,_0x2e1a14){return db[_0x4299('0x16')][_0x4299('0x17')]({'raw':_0x427a31[_0x4299('0x18')]?_0x427a31[_0x4299('0x18')][_0x4299('0x19')]===undefined?!![]:![]:!![],'where':_0x427a31[_0x4299('0x18')]?_0x427a31[_0x4299('0x18')][_0x4299('0x1a')]||null:null,'attributes':_0x427a31['options']?_0x427a31[_0x4299('0x18')][_0x4299('0x1b')]||null:null,'limit':_0x427a31[_0x4299('0x18')]?_0x427a31[_0x4299('0x18')]['limit']||null:null,'include':_0x427a31[_0x4299('0x18')]?_0x427a31[_0x4299('0x18')][_0x4299('0x1c')]?_['map'](_0x427a31['options'][_0x4299('0x1c')],function(_0x4de026){return{'model':db[_0x4de026['model']],'as':_0x4de026['as'],'attributes':_0x4de026['attributes'],'include':_0x4de026[_0x4299('0x1c')]?_[_0x4299('0x1d')](_0x4de026[_0x4299('0x1c')],function(_0x883689){return{'model':db[_0x883689['model']],'as':_0x883689['as'],'attributes':_0x883689[_0x4299('0x1b')],'include':_0x883689[_0x4299('0x1c')]?_['map'](_0x883689[_0x4299('0x1c')],function(_0x2c41e4){return{'model':db[_0x2c41e4[_0x4299('0x1e')]],'as':_0x2c41e4['as'],'attributes':_0x2c41e4[_0x4299('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x4299('0xa')](function(_0x57c411){logger['info'](_0x4299('0x15'),_0x427a31);logger[_0x4299('0xe')](_0x4299('0x15'),_0x427a31,JSON[_0x4299('0x10')](_0x57c411));_0xb3ec52(_0x57c411);})[_0x4299('0x1f')](function(_0x3e0d9a){logger['error'](_0x4299('0x15'),_0x3e0d9a[_0x4299('0x13')],_0x427a31);_0x2e1a14(_0x835d94[_0x4299('0x11')](0x1f4,_0x3e0d9a['message']));});});};exports['ShowFreshdeskAccount']=function(_0x1f59c5){var _0x536a49=this;return new Promise(function(_0x2a6d6a,_0x76e90){return db[_0x4299('0x16')][_0x4299('0x20')]({'raw':_0x1f59c5[_0x4299('0x18')]?_0x1f59c5[_0x4299('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0x1f59c5[_0x4299('0x18')]?_0x1f59c5[_0x4299('0x18')]['where']||null:null,'attributes':_0x1f59c5[_0x4299('0x18')]?_0x1f59c5[_0x4299('0x18')]['attributes']||null:null,'include':_0x1f59c5[_0x4299('0x18')]?_0x1f59c5[_0x4299('0x18')][_0x4299('0x1c')]?_[_0x4299('0x1d')](_0x1f59c5[_0x4299('0x18')][_0x4299('0x1c')],function(_0x2b631f){return{'model':db[_0x2b631f['model']],'as':_0x2b631f['as'],'attributes':_0x2b631f[_0x4299('0x1b')],'include':_0x2b631f[_0x4299('0x1c')]?_[_0x4299('0x1d')](_0x2b631f[_0x4299('0x1c')],function(_0x452e6e){return{'model':db[_0x452e6e['model']],'as':_0x452e6e['as'],'attributes':_0x452e6e[_0x4299('0x1b')],'include':_0x452e6e[_0x4299('0x1c')]?_[_0x4299('0x1d')](_0x452e6e[_0x4299('0x1c')],function(_0x452d30){return{'model':db[_0x452d30[_0x4299('0x1e')]],'as':_0x452d30['as'],'attributes':_0x452d30[_0x4299('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x4299('0xa')](function(_0x3acfec){logger['info'](_0x4299('0x21'),_0x1f59c5);logger[_0x4299('0xe')]('ShowFreshdeskAccount',_0x1f59c5,JSON[_0x4299('0x10')](_0x3acfec));_0x2a6d6a(_0x3acfec);})[_0x4299('0x1f')](function(_0x268924){logger['error']('ShowFreshdeskAccount',_0x268924[_0x4299('0x13')],_0x1f59c5);_0x76e90(_0x536a49[_0x4299('0x11')](0x1f4,_0x268924[_0x4299('0x13')]));});});};
\ No newline at end of file
index 307822c..8326658 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee14=['destroy','exports','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intFreshdeskConfiguration.controller','get','index','/:id','isAuthenticated','show','/:id/fields','/:id/subjects','getSubjects','/:id/descriptions','/:id/tags','getTags','post','setTags','put','update','delete'];(function(_0x55d911,_0x2b768c){var _0x3104c2=function(_0x1b4386){while(--_0x1b4386){_0x55d911['push'](_0x55d911['shift']());}};_0x3104c2(++_0x2b768c);}(_0xee14,0x13a));var _0x4ee1=function(_0x113d64,_0x1df78d){_0x113d64=_0x113d64-0x0;var _0x84ff37=_0xee14[_0x113d64];return _0x84ff37;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x4ee1('0x0'));var timeout=require(_0x4ee1('0x1'));var express=require(_0x4ee1('0x2'));var router=express[_0x4ee1('0x3')]();var auth=require(_0x4ee1('0x4'));var interaction=require(_0x4ee1('0x5'));var config=require(_0x4ee1('0x6'));var controller=require(_0x4ee1('0x7'));router[_0x4ee1('0x8')]('/',auth['isAuthenticated'](),controller[_0x4ee1('0x9')]);router['get'](_0x4ee1('0xa'),auth[_0x4ee1('0xb')](),controller[_0x4ee1('0xc')]);router[_0x4ee1('0x8')](_0x4ee1('0xd'),auth[_0x4ee1('0xb')](),controller['getFields']);router[_0x4ee1('0x8')](_0x4ee1('0xe'),auth['isAuthenticated'](),controller[_0x4ee1('0xf')]);router[_0x4ee1('0x8')](_0x4ee1('0x10'),auth[_0x4ee1('0xb')](),controller['getDescriptions']);router[_0x4ee1('0x8')](_0x4ee1('0x11'),auth[_0x4ee1('0xb')](),controller[_0x4ee1('0x12')]);router[_0x4ee1('0x13')]('/',auth[_0x4ee1('0xb')](),controller['create']);router[_0x4ee1('0x13')](_0x4ee1('0x11'),auth[_0x4ee1('0xb')](),controller[_0x4ee1('0x14')]);router[_0x4ee1('0x15')](_0x4ee1('0xa'),auth[_0x4ee1('0xb')](),controller[_0x4ee1('0x16')]);router[_0x4ee1('0x17')]('/:id',auth[_0x4ee1('0xb')](),controller[_0x4ee1('0x18')]);module[_0x4ee1('0x19')]=router;
\ No newline at end of file
+var _0xabce=['get','/:id/fields','getFields','/:id/subjects','isAuthenticated','getSubjects','/:id/descriptions','getDescriptions','/:id/tags','getTags','post','create','setTags','update','delete','destroy','multer','util','path','connect-timeout','express','../../components/interaction/service','../../config/environment','./intFreshdeskConfiguration.controller','index','/:id','show'];(function(_0x2dba17,_0x140eee){var _0x22abcc=function(_0x186669){while(--_0x186669){_0x2dba17['push'](_0x2dba17['shift']());}};_0x22abcc(++_0x140eee);}(_0xabce,0x103));var _0xeabc=function(_0x139a3c,_0x4fc883){_0x139a3c=_0x139a3c-0x0;var _0x2b375b=_0xabce[_0x139a3c];return _0x2b375b;};'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'));var controller=require(_0xeabc('0x7'));router['get']('/',auth['isAuthenticated'](),controller[_0xeabc('0x8')]);router['get'](_0xeabc('0x9'),auth['isAuthenticated'](),controller[_0xeabc('0xa')]);router[_0xeabc('0xb')](_0xeabc('0xc'),auth['isAuthenticated'](),controller[_0xeabc('0xd')]);router[_0xeabc('0xb')](_0xeabc('0xe'),auth[_0xeabc('0xf')](),controller[_0xeabc('0x10')]);router[_0xeabc('0xb')](_0xeabc('0x11'),auth[_0xeabc('0xf')](),controller[_0xeabc('0x12')]);router[_0xeabc('0xb')](_0xeabc('0x13'),auth[_0xeabc('0xf')](),controller[_0xeabc('0x14')]);router[_0xeabc('0x15')]('/',auth[_0xeabc('0xf')](),controller[_0xeabc('0x16')]);router['post'](_0xeabc('0x13'),auth[_0xeabc('0xf')](),controller[_0xeabc('0x17')]);router['put']('/:id',auth[_0xeabc('0xf')](),controller[_0xeabc('0x18')]);router[_0xeabc('0x19')]('/:id',auth[_0xeabc('0xf')](),controller[_0xeabc('0x1a')]);module['exports']=router;
\ No newline at end of file
index 2bee5f5..6799a84 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfbd=['STRING','sequelize','exports'];(function(_0x2d34d6,_0x397ff9){var _0x1d3d12=function(_0x558800){while(--_0x558800){_0x2d34d6['push'](_0x2d34d6['shift']());}};_0x1d3d12(++_0x397ff9);}(_0xbfbd,0xee));var _0xdbfb=function(_0x27c038,_0x58ebda){_0x27c038=_0x27c038-0x0;var _0x2abde0=_0xbfbd[_0x27c038];return _0x2abde0;};'use strict';var Sequelize=require(_0xdbfb('0x0'));module[_0xdbfb('0x1')]={'name':{'type':Sequelize[_0xdbfb('0x2')]},'description':{'type':Sequelize[_0xdbfb('0x2')]}};
\ No newline at end of file
+var _0x8bc6=['sequelize','STRING'];(function(_0x5127c3,_0x4b340b){var _0x1b80d8=function(_0xf433cb){while(--_0xf433cb){_0x5127c3['push'](_0x5127c3['shift']());}};_0x1b80d8(++_0x4b340b);}(_0x8bc6,0xdc));var _0x68bc=function(_0x3f6107,_0x514051){_0x3f6107=_0x3f6107-0x0;var _0x4f6b8f=_0x8bc6[_0x3f6107];return _0x4f6b8f;};'use strict';var Sequelize=require(_0x68bc('0x0'));module['exports']={'name':{'type':Sequelize[_0x68bc('0x1')]},'description':{'type':Sequelize[_0x68bc('0x1')]}};
\ No newline at end of file
index 5356b51..ba6bb08 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xacf6=['VIRTUAL','field','count','includeAll','include','rows','merge','find','FreshdeskConfiguration','create','body','params','findOne','options','getFields','hasOwnProperty','FreshdeskField','getSubjects','getDescriptions','getTags','setTags','ids','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','util','sox','to-csv','lodash','desk.js','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','jayson/promise','http','request','then','FreshdeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','info','catch','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','stack','name','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','nolimit','order','sort','where','pick','filter','map','type'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xacf6,0x16a));var _0x6acf=function(_0x5426de,_0x174253){_0x5426de=_0x5426de-0x0;var _0x46ee8a=_0xacf6[_0x5426de];return _0x46ee8a;};'use strict';var pdf=require(_0x6acf('0x0'));var emlformat=require(_0x6acf('0x1'));var rimraf=require(_0x6acf('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x6acf('0x3'));var rp=require(_0x6acf('0x4'));var moment=require(_0x6acf('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x6acf('0x6'));var util=require(_0x6acf('0x7'));var path=require('path');var sox=require(_0x6acf('0x8'));var csv=require(_0x6acf('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x6acf('0xa'));var squel=require('squel');var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x6acf('0xb'));var toCsv=require(_0x6acf('0x9'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x6acf('0xc'));var Redis=require('ioredis');var qs=require(_0x6acf('0xd'));var logger=require(_0x6acf('0xe'))(_0x6acf('0xf'));var utils=require(_0x6acf('0x10'));var config=require(_0x6acf('0x11'));var db=require('../../mysqldb')['db'];var jayson=require(_0x6acf('0x12'));var client=jayson['client'][_0x6acf('0x13')]({'port':0x232a});function respondWithRpcPromise(_0xfc411,_0x3035a1,_0x4a2c12,_0x54d36a){return new BPromise(function(_0x15d961,_0x2ee24c){var _0x56564c=_0x54d36a||client;return _0x56564c[_0x6acf('0x14')](_0xfc411,_0x4a2c12)[_0x6acf('0x15')](function(_0x303d33){logger['info'](_0x6acf('0x16'),_0x3035a1,_0x6acf('0x17'));logger[_0x6acf('0x18')](_0x6acf('0x19'),_0x3035a1,'request\x20sent',JSON[_0x6acf('0x1a')](_0x303d33));if(_0x303d33[_0x6acf('0x1b')]){if(_0x303d33[_0x6acf('0x1b')]['code']===0x1f4){logger[_0x6acf('0x1b')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x3035a1,_0x303d33[_0x6acf('0x1b')]['message']);return _0x2ee24c(_0x303d33['error'][_0x6acf('0x1c')]);}logger[_0x6acf('0x1b')](_0x6acf('0x16'),_0x3035a1,_0x303d33[_0x6acf('0x1b')][_0x6acf('0x1c')]);return _0x15d961(_0x303d33['error'][_0x6acf('0x1c')]);}else{logger[_0x6acf('0x1d')](_0x6acf('0x16'),_0x3035a1,_0x6acf('0x17'));_0x15d961(_0x303d33['result'][_0x6acf('0x1c')]);}})[_0x6acf('0x1e')](function(_0x3b6f8b){logger[_0x6acf('0x1b')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x3035a1,_0x3b6f8b);_0x2ee24c(_0x3b6f8b);});});}function respondWithStatusCode(_0x2d5fcf,_0x3d6778){_0x3d6778=_0x3d6778||0xcc;return function(_0xda99fe){if(_0xda99fe){return _0x2d5fcf[_0x6acf('0x1f')](_0x3d6778);}return _0x2d5fcf[_0x6acf('0x20')](_0x3d6778)[_0x6acf('0x21')]();};}function respondWithResult(_0x47f914,_0x2e7597){_0x2e7597=_0x2e7597||0xc8;return function(_0x318f2f){if(_0x318f2f){return _0x47f914[_0x6acf('0x20')](_0x2e7597)[_0x6acf('0x22')](_0x318f2f);}};}function respondWithFilteredResult(_0x415e08,_0x2ee981){return function(_0x47d084){if(_0x47d084){var _0x493553=_0x47d084['count'],_0x49fc0e=_0x2ee981[_0x6acf('0x23')],_0x53bd28=_0x2ee981['offset']+_0x2ee981[_0x6acf('0x24')],_0x31c398;if(_0x53bd28>=_0x493553){_0x53bd28=_0x493553;_0x31c398=0xc8;}else{_0x31c398=0xce;}_0x415e08['status'](_0x31c398);return _0x415e08[_0x6acf('0x25')](_0x6acf('0x26'),_0x49fc0e+'-'+_0x53bd28+'/'+_0x493553)[_0x6acf('0x22')](_0x47d084);}return null;};}function patchUpdates(_0x1bec39){return function(_0x23bfbd){try{jsonpatch[_0x6acf('0x27')](_0x23bfbd,_0x1bec39,!![]);}catch(_0x361eb4){return BPromise[_0x6acf('0x28')](_0x361eb4);}return _0x23bfbd[_0x6acf('0x29')]();};}function saveUpdates(_0x32eb24,_0x7c2d21){return function(_0xaaf33e){if(_0xaaf33e){return _0xaaf33e[_0x6acf('0x2a')](_0x32eb24)[_0x6acf('0x15')](function(_0x3df976){return _0x3df976;});}return null;};}function removeEntity(_0x417b1c,_0x29861d){return function(_0xb93b4b){if(_0xb93b4b){return _0xb93b4b[_0x6acf('0x2b')]()[_0x6acf('0x15')](function(){_0x417b1c[_0x6acf('0x20')](0xcc)[_0x6acf('0x21')]();});}};}function handleEntityNotFound(_0x1d9f3f,_0x4d694f){return function(_0x259d1c){if(!_0x259d1c){_0x1d9f3f[_0x6acf('0x1f')](0x194);}return _0x259d1c;};}function handleError(_0x333d05,_0x48b342){_0x48b342=_0x48b342||0x1f4;return function(_0x1cda45){logger[_0x6acf('0x1b')](_0x1cda45[_0x6acf('0x2c')]);if(_0x1cda45[_0x6acf('0x2d')]){delete _0x1cda45[_0x6acf('0x2d')];}_0x333d05[_0x6acf('0x20')](_0x48b342)['send'](_0x1cda45);};}exports['index']=function(_0x148123,_0x25eab3){var _0x105268={},_0x40748e={},_0x5e9851={'count':0x0,'rows':[]};var _0x2e3e05=db['FreshdeskConfiguration'][_0x6acf('0x2e')];_0x40748e['model']=_[_0x6acf('0x2f')](_0x2e3e05);_0x40748e[_0x6acf('0x30')]=_['keys'](_0x148123['query']);_0x40748e[_0x6acf('0x31')]=_[_0x6acf('0x32')](_0x40748e[_0x6acf('0x33')],_0x40748e[_0x6acf('0x30')]);_0x105268[_0x6acf('0x34')]=_[_0x6acf('0x32')](_0x40748e[_0x6acf('0x33')],qs[_0x6acf('0x35')](_0x148123[_0x6acf('0x30')][_0x6acf('0x35')]));_0x105268['attributes']=_0x105268['attributes'][_0x6acf('0x36')]?_0x105268['attributes']:_0x40748e['model'];if(!_0x148123['query']['hasOwnProperty'](_0x6acf('0x37'))){_0x105268[_0x6acf('0x24')]=qs['limit'](_0x148123[_0x6acf('0x30')][_0x6acf('0x24')]);_0x105268['offset']=qs[_0x6acf('0x23')](_0x148123['query'][_0x6acf('0x23')]);}_0x105268[_0x6acf('0x38')]=qs[_0x6acf('0x39')](_0x148123[_0x6acf('0x30')][_0x6acf('0x39')]);_0x105268[_0x6acf('0x3a')]=qs[_0x6acf('0x31')](_[_0x6acf('0x3b')](_0x148123[_0x6acf('0x30')],_0x40748e[_0x6acf('0x31')]));if(_0x148123[_0x6acf('0x30')][_0x6acf('0x3c')]){_0x105268[_0x6acf('0x3a')]=_['merge'](_0x105268[_0x6acf('0x3a')],{'$or':_[_0x6acf('0x3d')](_0x2e3e05,function(_0x4b7aa0){if(_0x4b7aa0[_0x6acf('0x3e')]['key']!==_0x6acf('0x3f')){var _0x339e6a={};_0x339e6a[_0x4b7aa0[_0x6acf('0x40')]]={'$like':'%'+_0x148123[_0x6acf('0x30')][_0x6acf('0x3c')]+'%'};return _0x339e6a;}})});}_0x105268=_['merge']({},_0x105268,_0x148123['options']);var _0x1dc65f={'where':_0x105268[_0x6acf('0x3a')]};return db['FreshdeskConfiguration'][_0x6acf('0x41')](_0x1dc65f)[_0x6acf('0x15')](function(_0x1ef1f4){_0x5e9851['count']=_0x1ef1f4;if(_0x148123[_0x6acf('0x30')][_0x6acf('0x42')]){_0x105268[_0x6acf('0x43')]=[{'all':!![]}];}return db['FreshdeskConfiguration']['findAll'](_0x105268);})[_0x6acf('0x15')](function(_0x166534){_0x5e9851[_0x6acf('0x44')]=_0x166534;return _0x5e9851;})[_0x6acf('0x15')](respondWithFilteredResult(_0x25eab3,_0x105268))[_0x6acf('0x1e')](handleError(_0x25eab3,null));};exports['show']=function(_0x1fd015,_0x541370){var _0x5ee617={'raw':![],'where':{'id':_0x1fd015['params']['id']}},_0xe47bb={};_0xe47bb[_0x6acf('0x33')]=_[_0x6acf('0x2f')](db['FreshdeskConfiguration'][_0x6acf('0x2e')]);_0xe47bb[_0x6acf('0x30')]=_[_0x6acf('0x2f')](_0x1fd015[_0x6acf('0x30')]);_0xe47bb[_0x6acf('0x31')]=_['intersection'](_0xe47bb[_0x6acf('0x33')],_0xe47bb[_0x6acf('0x30')]);_0x5ee617[_0x6acf('0x34')]=_[_0x6acf('0x32')](_0xe47bb['model'],qs[_0x6acf('0x35')](_0x1fd015[_0x6acf('0x30')][_0x6acf('0x35')]));_0x5ee617[_0x6acf('0x34')]=_0x5ee617['attributes'][_0x6acf('0x36')]?_0x5ee617[_0x6acf('0x34')]:_0xe47bb[_0x6acf('0x33')];if(_0x1fd015[_0x6acf('0x30')][_0x6acf('0x42')]){_0x5ee617['include']=[{'all':!![]}];}_0x5ee617=_[_0x6acf('0x45')]({},_0x5ee617,_0x1fd015['options']);return db['FreshdeskConfiguration'][_0x6acf('0x46')](_0x5ee617)[_0x6acf('0x15')](handleEntityNotFound(_0x541370,null))[_0x6acf('0x15')](respondWithResult(_0x541370,null))['catch'](handleError(_0x541370,null));};exports['create']=function(_0x1bfff7,_0x20b527){return db[_0x6acf('0x47')][_0x6acf('0x48')](_0x1bfff7[_0x6acf('0x49')],{})[_0x6acf('0x15')](respondWithResult(_0x20b527,0xc9))[_0x6acf('0x1e')](handleError(_0x20b527,null));};exports[_0x6acf('0x2a')]=function(_0x1683f4,_0x35c73b){if(_0x1683f4[_0x6acf('0x49')]['id']){delete _0x1683f4['body']['id'];}return db[_0x6acf('0x47')][_0x6acf('0x46')]({'where':{'id':_0x1683f4[_0x6acf('0x4a')]['id']}})[_0x6acf('0x15')](handleEntityNotFound(_0x35c73b,null))['then'](saveUpdates(_0x1683f4[_0x6acf('0x49')],null))[_0x6acf('0x15')](respondWithResult(_0x35c73b,null))[_0x6acf('0x1e')](handleError(_0x35c73b,null));};exports['destroy']=function(_0x2d8c45,_0x1e8f42){return db[_0x6acf('0x47')][_0x6acf('0x46')]({'where':{'id':_0x2d8c45[_0x6acf('0x4a')]['id']}})[_0x6acf('0x15')](handleEntityNotFound(_0x1e8f42,null))[_0x6acf('0x15')](removeEntity(_0x1e8f42,null))[_0x6acf('0x1e')](handleError(_0x1e8f42,null));};exports['getFields']=function(_0x2b8ed8,_0x399955,_0x187b1d){var _0x3bd70e={};var _0x3f7903={};var _0xdd9de6;var _0x1889a4;return db[_0x6acf('0x47')][_0x6acf('0x4b')]({'where':{'id':_0x2b8ed8[_0x6acf('0x4a')]['id']}})[_0x6acf('0x15')](handleEntityNotFound(_0x399955,null))[_0x6acf('0x15')](function(_0x7deb51){if(_0x7deb51){_0xdd9de6=_0x7deb51;_0x3f7903[_0x6acf('0x33')]=_[_0x6acf('0x2f')](db['FreshdeskField']['rawAttributes']);_0x3f7903[_0x6acf('0x30')]=_['keys'](_0x2b8ed8[_0x6acf('0x30')]);_0x3f7903[_0x6acf('0x31')]=_[_0x6acf('0x32')](_0x3f7903['model'],_0x3f7903['query']);_0x3bd70e[_0x6acf('0x34')]=_[_0x6acf('0x32')](_0x3f7903[_0x6acf('0x33')],qs[_0x6acf('0x35')](_0x2b8ed8[_0x6acf('0x30')]['fields']));_0x3bd70e[_0x6acf('0x34')]=_0x3bd70e[_0x6acf('0x34')][_0x6acf('0x36')]?_0x3bd70e[_0x6acf('0x34')]:_0x3f7903['model'];_0x3bd70e[_0x6acf('0x38')]=qs[_0x6acf('0x39')](_0x2b8ed8[_0x6acf('0x30')]['sort']);_0x3bd70e['where']=qs[_0x6acf('0x31')](_[_0x6acf('0x3b')](_0x2b8ed8[_0x6acf('0x30')],_0x3f7903[_0x6acf('0x31')]));if(_0x2b8ed8['query'][_0x6acf('0x3c')]){_0x3bd70e['where']=_[_0x6acf('0x45')](_0x3bd70e['where'],{'$or':_[_0x6acf('0x3d')](_0x3bd70e[_0x6acf('0x34')],function(_0x408d9c){var _0x27a365={};_0x27a365[_0x408d9c]={'$like':'%'+_0x2b8ed8[_0x6acf('0x30')]['filter']+'%'};return _0x27a365;})});}_0x3bd70e=_[_0x6acf('0x45')]({},_0x3bd70e,_0x2b8ed8[_0x6acf('0x4c')]);return _0xdd9de6[_0x6acf('0x4d')](_0x3bd70e);}})[_0x6acf('0x15')](function(_0x1d286e){if(_0x1d286e){_0x1889a4=_0x1d286e[_0x6acf('0x36')];if(!_0x2b8ed8['query'][_0x6acf('0x4e')](_0x6acf('0x37'))){_0x3bd70e['limit']=qs['limit'](_0x2b8ed8[_0x6acf('0x30')]['limit']);_0x3bd70e[_0x6acf('0x23')]=qs[_0x6acf('0x23')](_0x2b8ed8[_0x6acf('0x30')]['offset']);}return _0xdd9de6[_0x6acf('0x4d')](_0x3bd70e);}})[_0x6acf('0x15')](function(_0x5cef16){if(_0x5cef16){return _0x5cef16?{'count':_0x1889a4,'rows':_0x5cef16}:null;}})[_0x6acf('0x15')](respondWithResult(_0x399955,null))['catch'](handleError(_0x399955,null));};exports['getSubjects']=function(_0x4f799c,_0x5af592,_0x327dab){var _0x534a11={};var _0xdcadff={};var _0xc5d57d;var _0x565c09;return db['FreshdeskConfiguration'][_0x6acf('0x4b')]({'where':{'id':_0x4f799c[_0x6acf('0x4a')]['id']}})[_0x6acf('0x15')](handleEntityNotFound(_0x5af592,null))['then'](function(_0x2ad7f1){if(_0x2ad7f1){_0xc5d57d=_0x2ad7f1;_0xdcadff[_0x6acf('0x33')]=_[_0x6acf('0x2f')](db[_0x6acf('0x4f')][_0x6acf('0x2e')]);_0xdcadff[_0x6acf('0x30')]=_['keys'](_0x4f799c[_0x6acf('0x30')]);_0xdcadff[_0x6acf('0x31')]=_[_0x6acf('0x32')](_0xdcadff['model'],_0xdcadff[_0x6acf('0x30')]);_0x534a11[_0x6acf('0x34')]=_['intersection'](_0xdcadff[_0x6acf('0x33')],qs[_0x6acf('0x35')](_0x4f799c[_0x6acf('0x30')]['fields']));_0x534a11[_0x6acf('0x34')]=_0x534a11[_0x6acf('0x34')][_0x6acf('0x36')]?_0x534a11[_0x6acf('0x34')]:_0xdcadff[_0x6acf('0x33')];_0x534a11['order']=qs[_0x6acf('0x39')](_0x4f799c['query'][_0x6acf('0x39')]);_0x534a11[_0x6acf('0x3a')]=qs[_0x6acf('0x31')](_[_0x6acf('0x3b')](_0x4f799c[_0x6acf('0x30')],_0xdcadff[_0x6acf('0x31')]));if(_0x4f799c[_0x6acf('0x30')][_0x6acf('0x3c')]){_0x534a11[_0x6acf('0x3a')]=_['merge'](_0x534a11[_0x6acf('0x3a')],{'$or':_[_0x6acf('0x3d')](_0x534a11['attributes'],function(_0x27c8be){var _0x567ec1={};_0x567ec1[_0x27c8be]={'$like':'%'+_0x4f799c[_0x6acf('0x30')][_0x6acf('0x3c')]+'%'};return _0x567ec1;})});}_0x534a11=_[_0x6acf('0x45')]({},_0x534a11,_0x4f799c['options']);return _0xc5d57d[_0x6acf('0x50')](_0x534a11);}})['then'](function(_0x2f99a9){if(_0x2f99a9){_0x565c09=_0x2f99a9[_0x6acf('0x36')];if(!_0x4f799c[_0x6acf('0x30')][_0x6acf('0x4e')](_0x6acf('0x37'))){_0x534a11[_0x6acf('0x24')]=qs['limit'](_0x4f799c[_0x6acf('0x30')][_0x6acf('0x24')]);_0x534a11[_0x6acf('0x23')]=qs[_0x6acf('0x23')](_0x4f799c[_0x6acf('0x30')][_0x6acf('0x23')]);}return _0xc5d57d[_0x6acf('0x50')](_0x534a11);}})['then'](function(_0x3869d6){if(_0x3869d6){return _0x3869d6?{'count':_0x565c09,'rows':_0x3869d6}:null;}})[_0x6acf('0x15')](respondWithResult(_0x5af592,null))[_0x6acf('0x1e')](handleError(_0x5af592,null));};exports[_0x6acf('0x51')]=function(_0x44decf,_0x41a013,_0x55e17f){var _0x1fdd06={};var _0x4043c1={};var _0xf0e03d;var _0x47fe52;return db[_0x6acf('0x47')][_0x6acf('0x4b')]({'where':{'id':_0x44decf[_0x6acf('0x4a')]['id']}})[_0x6acf('0x15')](handleEntityNotFound(_0x41a013,null))['then'](function(_0x11af9f){if(_0x11af9f){_0xf0e03d=_0x11af9f;_0x4043c1[_0x6acf('0x33')]=_['keys'](db['FreshdeskField'][_0x6acf('0x2e')]);_0x4043c1['query']=_['keys'](_0x44decf['query']);_0x4043c1['filters']=_['intersection'](_0x4043c1['model'],_0x4043c1[_0x6acf('0x30')]);_0x1fdd06[_0x6acf('0x34')]=_[_0x6acf('0x32')](_0x4043c1[_0x6acf('0x33')],qs[_0x6acf('0x35')](_0x44decf[_0x6acf('0x30')][_0x6acf('0x35')]));_0x1fdd06['attributes']=_0x1fdd06[_0x6acf('0x34')][_0x6acf('0x36')]?_0x1fdd06['attributes']:_0x4043c1[_0x6acf('0x33')];_0x1fdd06[_0x6acf('0x38')]=qs[_0x6acf('0x39')](_0x44decf[_0x6acf('0x30')][_0x6acf('0x39')]);_0x1fdd06['where']=qs['filters'](_[_0x6acf('0x3b')](_0x44decf[_0x6acf('0x30')],_0x4043c1['filters']));if(_0x44decf[_0x6acf('0x30')][_0x6acf('0x3c')]){_0x1fdd06[_0x6acf('0x3a')]=_[_0x6acf('0x45')](_0x1fdd06['where'],{'$or':_[_0x6acf('0x3d')](_0x1fdd06[_0x6acf('0x34')],function(_0x22176a){var _0x51a8bb={};_0x51a8bb[_0x22176a]={'$like':'%'+_0x44decf[_0x6acf('0x30')][_0x6acf('0x3c')]+'%'};return _0x51a8bb;})});}_0x1fdd06=_[_0x6acf('0x45')]({},_0x1fdd06,_0x44decf[_0x6acf('0x4c')]);return _0xf0e03d[_0x6acf('0x51')](_0x1fdd06);}})[_0x6acf('0x15')](function(_0x303b79){if(_0x303b79){_0x47fe52=_0x303b79['length'];if(!_0x44decf[_0x6acf('0x30')]['hasOwnProperty'](_0x6acf('0x37'))){_0x1fdd06[_0x6acf('0x24')]=qs[_0x6acf('0x24')](_0x44decf[_0x6acf('0x30')][_0x6acf('0x24')]);_0x1fdd06[_0x6acf('0x23')]=qs[_0x6acf('0x23')](_0x44decf[_0x6acf('0x30')][_0x6acf('0x23')]);}return _0xf0e03d[_0x6acf('0x51')](_0x1fdd06);}})['then'](function(_0x20284a){if(_0x20284a){return _0x20284a?{'count':_0x47fe52,'rows':_0x20284a}:null;}})[_0x6acf('0x15')](respondWithResult(_0x41a013,null))[_0x6acf('0x1e')](handleError(_0x41a013,null));};exports[_0x6acf('0x52')]=function(_0x59b8e2,_0x255592,_0xf049a){var _0x1ac10a={};var _0x1cddb5={};var _0x32fdd8;var _0x2d4d8b;return db['FreshdeskConfiguration'][_0x6acf('0x4b')]({'where':{'id':_0x59b8e2['params']['id']}})['then'](handleEntityNotFound(_0x255592,null))[_0x6acf('0x15')](function(_0x313700){if(_0x313700){_0x32fdd8=_0x313700;_0x1cddb5[_0x6acf('0x33')]=_[_0x6acf('0x2f')](db['Tag'][_0x6acf('0x2e')]);_0x1cddb5['query']=_[_0x6acf('0x2f')](_0x59b8e2['query']);_0x1cddb5[_0x6acf('0x31')]=_[_0x6acf('0x32')](_0x1cddb5[_0x6acf('0x33')],_0x1cddb5['query']);_0x1ac10a[_0x6acf('0x34')]=_[_0x6acf('0x32')](_0x1cddb5[_0x6acf('0x33')],qs[_0x6acf('0x35')](_0x59b8e2[_0x6acf('0x30')][_0x6acf('0x35')]));_0x1ac10a[_0x6acf('0x34')]=_0x1ac10a['attributes'][_0x6acf('0x36')]?_0x1ac10a[_0x6acf('0x34')]:_0x1cddb5[_0x6acf('0x33')];_0x1ac10a[_0x6acf('0x38')]=qs['sort'](_0x59b8e2['query'][_0x6acf('0x39')]);_0x1ac10a[_0x6acf('0x3a')]=qs[_0x6acf('0x31')](_[_0x6acf('0x3b')](_0x59b8e2[_0x6acf('0x30')],_0x1cddb5[_0x6acf('0x31')]));if(_0x59b8e2[_0x6acf('0x30')]['filter']){_0x1ac10a[_0x6acf('0x3a')]=_['merge'](_0x1ac10a[_0x6acf('0x3a')],{'$or':_[_0x6acf('0x3d')](_0x1ac10a[_0x6acf('0x34')],function(_0x1c48e2){var _0xbfd7c3={};_0xbfd7c3[_0x1c48e2]={'$like':'%'+_0x59b8e2[_0x6acf('0x30')]['filter']+'%'};return _0xbfd7c3;})});}_0x1ac10a=_[_0x6acf('0x45')]({},_0x1ac10a,_0x59b8e2['options']);return _0x32fdd8[_0x6acf('0x52')](_0x1ac10a);}})[_0x6acf('0x15')](function(_0x4bba89){if(_0x4bba89){_0x2d4d8b=_0x4bba89[_0x6acf('0x36')];if(!_0x59b8e2['query'][_0x6acf('0x4e')](_0x6acf('0x37'))){_0x1ac10a[_0x6acf('0x24')]=qs[_0x6acf('0x24')](_0x59b8e2[_0x6acf('0x30')][_0x6acf('0x24')]);_0x1ac10a['offset']=qs[_0x6acf('0x23')](_0x59b8e2['query'][_0x6acf('0x23')]);}return _0x32fdd8['getTags'](_0x1ac10a);}})[_0x6acf('0x15')](function(_0x31825b){if(_0x31825b){return _0x31825b?{'count':_0x2d4d8b,'rows':_0x31825b}:null;}})['then'](respondWithResult(_0x255592,null))[_0x6acf('0x1e')](handleError(_0x255592,null));};exports['setTags']=function(_0x58f4fd,_0xdbb2e2,_0x2edc92){if(_0x58f4fd['body']['id']){delete _0x58f4fd[_0x6acf('0x49')]['id'];}return db[_0x6acf('0x47')][_0x6acf('0x4b')]({'where':{'id':_0x58f4fd['params']['id']}})[_0x6acf('0x15')](handleEntityNotFound(_0xdbb2e2,null))['then'](function(_0x554b4e){if(_0x554b4e){return _0x554b4e[_0x6acf('0x53')](_0x58f4fd['body'][_0x6acf('0x54')]||[]);}return null;})[_0x6acf('0x15')](respondWithResult(_0xdbb2e2,null))['catch'](handleError(_0xdbb2e2,null));};
\ No newline at end of file
+var _0xf718=['request','then','info','FreshdeskConfiguration,\x20%s,\x20%s','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','update','stack','name','send','index','FreshdeskConfiguration','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','pick','filter','map','type','VIRTUAL','merge','options','includeAll','include','findAll','rows','catch','show','find','create','body','destroy','params','getFields','findOne','FreshdeskField','order','getSubjects','getDescriptions','getTags','setTags','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','http'];(function(_0x5f37c6,_0x53c94b){var _0xe766b3=function(_0x4da2da){while(--_0x4da2da){_0x5f37c6['push'](_0x5f37c6['shift']());}};_0xe766b3(++_0x53c94b);}(_0xf718,0x1c3));var _0x8f71=function(_0x53931f,_0x300a42){_0x53931f=_0x53931f-0x0;var _0x4ddc37=_0xf718[_0x53931f];return _0x4ddc37;};'use strict';var pdf=require(_0x8f71('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x8f71('0x1'));var zipdir=require(_0x8f71('0x2'));var jsonpatch=require(_0x8f71('0x3'));var rp=require(_0x8f71('0x4'));var moment=require(_0x8f71('0x5'));var BPromise=require(_0x8f71('0x6'));var Mustache=require(_0x8f71('0x7'));var util=require(_0x8f71('0x8'));var path=require(_0x8f71('0x9'));var sox=require(_0x8f71('0xa'));var csv=require('to-csv');var ejs=require(_0x8f71('0xb'));var fs=require('fs');var _=require(_0x8f71('0xc'));var squel=require(_0x8f71('0xd'));var crypto=require(_0x8f71('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x8f71('0xf'));var toCsv=require('to-csv');var querystring=require(_0x8f71('0x10'));var Papa=require(_0x8f71('0x11'));var authService=require(_0x8f71('0x12'));var hardwareService=require(_0x8f71('0x13'));var Redis=require(_0x8f71('0x14'));var qs=require(_0x8f71('0x15'));var logger=require(_0x8f71('0x16'))(_0x8f71('0x17'));var utils=require('../../config/utils');var config=require(_0x8f71('0x18'));var db=require(_0x8f71('0x19'))['db'];var jayson=require(_0x8f71('0x1a'));var client=jayson[_0x8f71('0x1b')][_0x8f71('0x1c')]({'port':0x232a});function respondWithRpcPromise(_0x2b89f2,_0x3c6839,_0x782f19,_0x26ad5e){return new BPromise(function(_0x4238b2,_0x22a693){var _0x189893=_0x26ad5e||client;return _0x189893[_0x8f71('0x1d')](_0x2b89f2,_0x782f19)[_0x8f71('0x1e')](function(_0x874beb){logger[_0x8f71('0x1f')](_0x8f71('0x20'),_0x3c6839,'request\x20sent');logger[_0x8f71('0x21')](_0x8f71('0x22'),_0x3c6839,'request\x20sent',JSON[_0x8f71('0x23')](_0x874beb));if(_0x874beb[_0x8f71('0x24')]){if(_0x874beb[_0x8f71('0x24')][_0x8f71('0x25')]===0x1f4){logger['error'](_0x8f71('0x20'),_0x3c6839,_0x874beb[_0x8f71('0x24')][_0x8f71('0x26')]);return _0x22a693(_0x874beb['error']['message']);}logger[_0x8f71('0x24')](_0x8f71('0x20'),_0x3c6839,_0x874beb[_0x8f71('0x24')][_0x8f71('0x26')]);return _0x4238b2(_0x874beb[_0x8f71('0x24')]['message']);}else{logger[_0x8f71('0x1f')](_0x8f71('0x20'),_0x3c6839,'request\x20sent');_0x4238b2(_0x874beb[_0x8f71('0x27')]['message']);}})['catch'](function(_0x2f8ca6){logger[_0x8f71('0x24')](_0x8f71('0x20'),_0x3c6839,_0x2f8ca6);_0x22a693(_0x2f8ca6);});});}function respondWithStatusCode(_0x444d01,_0x3ee105){_0x3ee105=_0x3ee105||0xcc;return function(_0x33e3d1){if(_0x33e3d1){return _0x444d01[_0x8f71('0x28')](_0x3ee105);}return _0x444d01[_0x8f71('0x29')](_0x3ee105)[_0x8f71('0x2a')]();};}function respondWithResult(_0x354ecd,_0x2f3a7d){_0x2f3a7d=_0x2f3a7d||0xc8;return function(_0x6326e7){if(_0x6326e7){return _0x354ecd[_0x8f71('0x29')](_0x2f3a7d)[_0x8f71('0x2b')](_0x6326e7);}};}function respondWithFilteredResult(_0x520707,_0x5cacae){return function(_0x309e68){if(_0x309e68){var _0x54578d=_0x309e68[_0x8f71('0x2c')],_0x547cf4=_0x5cacae[_0x8f71('0x2d')],_0x46630d=_0x5cacae[_0x8f71('0x2d')]+_0x5cacae['limit'],_0x439460;if(_0x46630d>=_0x54578d){_0x46630d=_0x54578d;_0x439460=0xc8;}else{_0x439460=0xce;}_0x520707['status'](_0x439460);return _0x520707[_0x8f71('0x2e')](_0x8f71('0x2f'),_0x547cf4+'-'+_0x46630d+'/'+_0x54578d)[_0x8f71('0x2b')](_0x309e68);}return null;};}function patchUpdates(_0x5d7501){return function(_0x200e26){try{jsonpatch['apply'](_0x200e26,_0x5d7501,!![]);}catch(_0x137587){return BPromise[_0x8f71('0x30')](_0x137587);}return _0x200e26[_0x8f71('0x31')]();};}function saveUpdates(_0x44d684,_0x145779){return function(_0x385a31){if(_0x385a31){return _0x385a31[_0x8f71('0x32')](_0x44d684)[_0x8f71('0x1e')](function(_0x23f0a5){return _0x23f0a5;});}return null;};}function removeEntity(_0xa26b7d,_0x31bd19){return function(_0x55d15f){if(_0x55d15f){return _0x55d15f['destroy']()['then'](function(){_0xa26b7d[_0x8f71('0x29')](0xcc)['end']();});}};}function handleEntityNotFound(_0x55b5d7,_0x3aed17){return function(_0x4c6f5e){if(!_0x4c6f5e){_0x55b5d7['sendStatus'](0x194);}return _0x4c6f5e;};}function handleError(_0x22eeee,_0x347cf7){_0x347cf7=_0x347cf7||0x1f4;return function(_0x5ce934){logger['error'](_0x5ce934[_0x8f71('0x33')]);if(_0x5ce934[_0x8f71('0x34')]){delete _0x5ce934[_0x8f71('0x34')];}_0x22eeee[_0x8f71('0x29')](_0x347cf7)[_0x8f71('0x35')](_0x5ce934);};}exports[_0x8f71('0x36')]=function(_0x4bfdf1,_0x3d0dc4){var _0x50a57d={},_0x582558={},_0x4596f1={'count':0x0,'rows':[]};var _0xa96579=db[_0x8f71('0x37')][_0x8f71('0x38')];_0x582558['model']=_[_0x8f71('0x39')](_0xa96579);_0x582558[_0x8f71('0x3a')]=_['keys'](_0x4bfdf1['query']);_0x582558[_0x8f71('0x3b')]=_[_0x8f71('0x3c')](_0x582558[_0x8f71('0x3d')],_0x582558['query']);_0x50a57d[_0x8f71('0x3e')]=_[_0x8f71('0x3c')](_0x582558['model'],qs[_0x8f71('0x3f')](_0x4bfdf1['query'][_0x8f71('0x3f')]));_0x50a57d[_0x8f71('0x3e')]=_0x50a57d[_0x8f71('0x3e')][_0x8f71('0x40')]?_0x50a57d[_0x8f71('0x3e')]:_0x582558[_0x8f71('0x3d')];if(!_0x4bfdf1[_0x8f71('0x3a')][_0x8f71('0x41')](_0x8f71('0x42'))){_0x50a57d[_0x8f71('0x43')]=qs[_0x8f71('0x43')](_0x4bfdf1[_0x8f71('0x3a')][_0x8f71('0x43')]);_0x50a57d[_0x8f71('0x2d')]=qs[_0x8f71('0x2d')](_0x4bfdf1[_0x8f71('0x3a')][_0x8f71('0x2d')]);}_0x50a57d['order']=qs[_0x8f71('0x44')](_0x4bfdf1[_0x8f71('0x3a')][_0x8f71('0x44')]);_0x50a57d[_0x8f71('0x45')]=qs[_0x8f71('0x3b')](_[_0x8f71('0x46')](_0x4bfdf1[_0x8f71('0x3a')],_0x582558['filters']));if(_0x4bfdf1[_0x8f71('0x3a')][_0x8f71('0x47')]){_0x50a57d['where']=_['merge'](_0x50a57d[_0x8f71('0x45')],{'$or':_[_0x8f71('0x48')](_0xa96579,function(_0x394cdb){if(_0x394cdb[_0x8f71('0x49')]['key']!==_0x8f71('0x4a')){var _0x440d42={};_0x440d42[_0x394cdb['field']]={'$like':'%'+_0x4bfdf1['query'][_0x8f71('0x47')]+'%'};return _0x440d42;}})});}_0x50a57d=_[_0x8f71('0x4b')]({},_0x50a57d,_0x4bfdf1[_0x8f71('0x4c')]);var _0x17b122={'where':_0x50a57d[_0x8f71('0x45')]};return db[_0x8f71('0x37')][_0x8f71('0x2c')](_0x17b122)[_0x8f71('0x1e')](function(_0x5a50ab){_0x4596f1[_0x8f71('0x2c')]=_0x5a50ab;if(_0x4bfdf1[_0x8f71('0x3a')][_0x8f71('0x4d')]){_0x50a57d[_0x8f71('0x4e')]=[{'all':!![]}];}return db[_0x8f71('0x37')][_0x8f71('0x4f')](_0x50a57d);})['then'](function(_0x2c4a3f){_0x4596f1[_0x8f71('0x50')]=_0x2c4a3f;return _0x4596f1;})[_0x8f71('0x1e')](respondWithFilteredResult(_0x3d0dc4,_0x50a57d))[_0x8f71('0x51')](handleError(_0x3d0dc4,null));};exports[_0x8f71('0x52')]=function(_0x5e2a0a,_0x16a6ce){var _0x2bd8b7={'raw':![],'where':{'id':_0x5e2a0a['params']['id']}},_0x46c764={};_0x46c764[_0x8f71('0x3d')]=_['keys'](db['FreshdeskConfiguration'][_0x8f71('0x38')]);_0x46c764[_0x8f71('0x3a')]=_['keys'](_0x5e2a0a[_0x8f71('0x3a')]);_0x46c764[_0x8f71('0x3b')]=_['intersection'](_0x46c764['model'],_0x46c764[_0x8f71('0x3a')]);_0x2bd8b7[_0x8f71('0x3e')]=_[_0x8f71('0x3c')](_0x46c764[_0x8f71('0x3d')],qs['fields'](_0x5e2a0a[_0x8f71('0x3a')]['fields']));_0x2bd8b7[_0x8f71('0x3e')]=_0x2bd8b7[_0x8f71('0x3e')][_0x8f71('0x40')]?_0x2bd8b7[_0x8f71('0x3e')]:_0x46c764[_0x8f71('0x3d')];if(_0x5e2a0a[_0x8f71('0x3a')]['includeAll']){_0x2bd8b7[_0x8f71('0x4e')]=[{'all':!![]}];}_0x2bd8b7=_[_0x8f71('0x4b')]({},_0x2bd8b7,_0x5e2a0a[_0x8f71('0x4c')]);return db['FreshdeskConfiguration'][_0x8f71('0x53')](_0x2bd8b7)[_0x8f71('0x1e')](handleEntityNotFound(_0x16a6ce,null))[_0x8f71('0x1e')](respondWithResult(_0x16a6ce,null))['catch'](handleError(_0x16a6ce,null));};exports[_0x8f71('0x54')]=function(_0x422437,_0xd1b4ea){return db[_0x8f71('0x37')][_0x8f71('0x54')](_0x422437[_0x8f71('0x55')],{})['then'](respondWithResult(_0xd1b4ea,0xc9))[_0x8f71('0x51')](handleError(_0xd1b4ea,null));};exports[_0x8f71('0x32')]=function(_0x1bc816,_0x2b7f32){if(_0x1bc816[_0x8f71('0x55')]['id']){delete _0x1bc816['body']['id'];}return db[_0x8f71('0x37')]['find']({'where':{'id':_0x1bc816['params']['id']}})[_0x8f71('0x1e')](handleEntityNotFound(_0x2b7f32,null))['then'](saveUpdates(_0x1bc816['body'],null))[_0x8f71('0x1e')](respondWithResult(_0x2b7f32,null))[_0x8f71('0x51')](handleError(_0x2b7f32,null));};exports[_0x8f71('0x56')]=function(_0x5ed095,_0x3592a6){return db[_0x8f71('0x37')][_0x8f71('0x53')]({'where':{'id':_0x5ed095[_0x8f71('0x57')]['id']}})[_0x8f71('0x1e')](handleEntityNotFound(_0x3592a6,null))[_0x8f71('0x1e')](removeEntity(_0x3592a6,null))[_0x8f71('0x51')](handleError(_0x3592a6,null));};exports[_0x8f71('0x58')]=function(_0xf3071d,_0x2a9e13,_0x554a7c){var _0x40360d={};var _0x39660e={};var _0x5c9bb3;var _0x2a5dbf;return db[_0x8f71('0x37')][_0x8f71('0x59')]({'where':{'id':_0xf3071d[_0x8f71('0x57')]['id']}})[_0x8f71('0x1e')](handleEntityNotFound(_0x2a9e13,null))[_0x8f71('0x1e')](function(_0x4c90cf){if(_0x4c90cf){_0x5c9bb3=_0x4c90cf;_0x39660e[_0x8f71('0x3d')]=_[_0x8f71('0x39')](db[_0x8f71('0x5a')][_0x8f71('0x38')]);_0x39660e['query']=_[_0x8f71('0x39')](_0xf3071d['query']);_0x39660e[_0x8f71('0x3b')]=_['intersection'](_0x39660e['model'],_0x39660e[_0x8f71('0x3a')]);_0x40360d['attributes']=_['intersection'](_0x39660e['model'],qs['fields'](_0xf3071d[_0x8f71('0x3a')][_0x8f71('0x3f')]));_0x40360d[_0x8f71('0x3e')]=_0x40360d[_0x8f71('0x3e')][_0x8f71('0x40')]?_0x40360d[_0x8f71('0x3e')]:_0x39660e[_0x8f71('0x3d')];_0x40360d[_0x8f71('0x5b')]=qs[_0x8f71('0x44')](_0xf3071d[_0x8f71('0x3a')]['sort']);_0x40360d[_0x8f71('0x45')]=qs['filters'](_[_0x8f71('0x46')](_0xf3071d[_0x8f71('0x3a')],_0x39660e['filters']));if(_0xf3071d['query'][_0x8f71('0x47')]){_0x40360d['where']=_[_0x8f71('0x4b')](_0x40360d[_0x8f71('0x45')],{'$or':_[_0x8f71('0x48')](_0x40360d[_0x8f71('0x3e')],function(_0x17d0f6){var _0x4f8bf3={};_0x4f8bf3[_0x17d0f6]={'$like':'%'+_0xf3071d[_0x8f71('0x3a')][_0x8f71('0x47')]+'%'};return _0x4f8bf3;})});}_0x40360d=_['merge']({},_0x40360d,_0xf3071d[_0x8f71('0x4c')]);return _0x5c9bb3[_0x8f71('0x58')](_0x40360d);}})['then'](function(_0x211445){if(_0x211445){_0x2a5dbf=_0x211445[_0x8f71('0x40')];if(!_0xf3071d['query'][_0x8f71('0x41')](_0x8f71('0x42'))){_0x40360d[_0x8f71('0x43')]=qs[_0x8f71('0x43')](_0xf3071d['query'][_0x8f71('0x43')]);_0x40360d[_0x8f71('0x2d')]=qs[_0x8f71('0x2d')](_0xf3071d['query'][_0x8f71('0x2d')]);}return _0x5c9bb3[_0x8f71('0x58')](_0x40360d);}})[_0x8f71('0x1e')](function(_0x674fc2){if(_0x674fc2){return _0x674fc2?{'count':_0x2a5dbf,'rows':_0x674fc2}:null;}})[_0x8f71('0x1e')](respondWithResult(_0x2a9e13,null))[_0x8f71('0x51')](handleError(_0x2a9e13,null));};exports[_0x8f71('0x5c')]=function(_0x2985a7,_0x43999b,_0x1236b8){var _0x48e505={};var _0x30240e={};var _0x107740;var _0x428699;return db[_0x8f71('0x37')][_0x8f71('0x59')]({'where':{'id':_0x2985a7[_0x8f71('0x57')]['id']}})['then'](handleEntityNotFound(_0x43999b,null))[_0x8f71('0x1e')](function(_0x105a74){if(_0x105a74){_0x107740=_0x105a74;_0x30240e[_0x8f71('0x3d')]=_[_0x8f71('0x39')](db[_0x8f71('0x5a')]['rawAttributes']);_0x30240e[_0x8f71('0x3a')]=_[_0x8f71('0x39')](_0x2985a7[_0x8f71('0x3a')]);_0x30240e[_0x8f71('0x3b')]=_[_0x8f71('0x3c')](_0x30240e['model'],_0x30240e[_0x8f71('0x3a')]);_0x48e505[_0x8f71('0x3e')]=_[_0x8f71('0x3c')](_0x30240e[_0x8f71('0x3d')],qs[_0x8f71('0x3f')](_0x2985a7[_0x8f71('0x3a')][_0x8f71('0x3f')]));_0x48e505[_0x8f71('0x3e')]=_0x48e505['attributes'][_0x8f71('0x40')]?_0x48e505[_0x8f71('0x3e')]:_0x30240e[_0x8f71('0x3d')];_0x48e505[_0x8f71('0x5b')]=qs[_0x8f71('0x44')](_0x2985a7[_0x8f71('0x3a')][_0x8f71('0x44')]);_0x48e505[_0x8f71('0x45')]=qs[_0x8f71('0x3b')](_[_0x8f71('0x46')](_0x2985a7[_0x8f71('0x3a')],_0x30240e[_0x8f71('0x3b')]));if(_0x2985a7[_0x8f71('0x3a')]['filter']){_0x48e505[_0x8f71('0x45')]=_[_0x8f71('0x4b')](_0x48e505[_0x8f71('0x45')],{'$or':_[_0x8f71('0x48')](_0x48e505[_0x8f71('0x3e')],function(_0x476ffb){var _0x52d761={};_0x52d761[_0x476ffb]={'$like':'%'+_0x2985a7['query'][_0x8f71('0x47')]+'%'};return _0x52d761;})});}_0x48e505=_[_0x8f71('0x4b')]({},_0x48e505,_0x2985a7[_0x8f71('0x4c')]);return _0x107740['getSubjects'](_0x48e505);}})[_0x8f71('0x1e')](function(_0x45b302){if(_0x45b302){_0x428699=_0x45b302[_0x8f71('0x40')];if(!_0x2985a7[_0x8f71('0x3a')][_0x8f71('0x41')]('nolimit')){_0x48e505['limit']=qs[_0x8f71('0x43')](_0x2985a7[_0x8f71('0x3a')][_0x8f71('0x43')]);_0x48e505[_0x8f71('0x2d')]=qs[_0x8f71('0x2d')](_0x2985a7[_0x8f71('0x3a')][_0x8f71('0x2d')]);}return _0x107740['getSubjects'](_0x48e505);}})[_0x8f71('0x1e')](function(_0x4ab93d){if(_0x4ab93d){return _0x4ab93d?{'count':_0x428699,'rows':_0x4ab93d}:null;}})[_0x8f71('0x1e')](respondWithResult(_0x43999b,null))[_0x8f71('0x51')](handleError(_0x43999b,null));};exports[_0x8f71('0x5d')]=function(_0x4c1fd0,_0x1eb7bf,_0x3e016e){var _0x264a3b={};var _0x515072={};var _0x1d7348;var _0x223994;return db[_0x8f71('0x37')][_0x8f71('0x59')]({'where':{'id':_0x4c1fd0['params']['id']}})[_0x8f71('0x1e')](handleEntityNotFound(_0x1eb7bf,null))[_0x8f71('0x1e')](function(_0x1ce7fe){if(_0x1ce7fe){_0x1d7348=_0x1ce7fe;_0x515072['model']=_[_0x8f71('0x39')](db['FreshdeskField'][_0x8f71('0x38')]);_0x515072[_0x8f71('0x3a')]=_['keys'](_0x4c1fd0[_0x8f71('0x3a')]);_0x515072[_0x8f71('0x3b')]=_[_0x8f71('0x3c')](_0x515072[_0x8f71('0x3d')],_0x515072[_0x8f71('0x3a')]);_0x264a3b[_0x8f71('0x3e')]=_[_0x8f71('0x3c')](_0x515072['model'],qs[_0x8f71('0x3f')](_0x4c1fd0[_0x8f71('0x3a')]['fields']));_0x264a3b['attributes']=_0x264a3b[_0x8f71('0x3e')][_0x8f71('0x40')]?_0x264a3b['attributes']:_0x515072['model'];_0x264a3b[_0x8f71('0x5b')]=qs[_0x8f71('0x44')](_0x4c1fd0[_0x8f71('0x3a')][_0x8f71('0x44')]);_0x264a3b[_0x8f71('0x45')]=qs[_0x8f71('0x3b')](_['pick'](_0x4c1fd0[_0x8f71('0x3a')],_0x515072['filters']));if(_0x4c1fd0['query'][_0x8f71('0x47')]){_0x264a3b[_0x8f71('0x45')]=_[_0x8f71('0x4b')](_0x264a3b['where'],{'$or':_[_0x8f71('0x48')](_0x264a3b[_0x8f71('0x3e')],function(_0x96469){var _0x2a208f={};_0x2a208f[_0x96469]={'$like':'%'+_0x4c1fd0[_0x8f71('0x3a')][_0x8f71('0x47')]+'%'};return _0x2a208f;})});}_0x264a3b=_[_0x8f71('0x4b')]({},_0x264a3b,_0x4c1fd0[_0x8f71('0x4c')]);return _0x1d7348[_0x8f71('0x5d')](_0x264a3b);}})['then'](function(_0x18ca2e){if(_0x18ca2e){_0x223994=_0x18ca2e['length'];if(!_0x4c1fd0[_0x8f71('0x3a')]['hasOwnProperty'](_0x8f71('0x42'))){_0x264a3b[_0x8f71('0x43')]=qs['limit'](_0x4c1fd0[_0x8f71('0x3a')][_0x8f71('0x43')]);_0x264a3b[_0x8f71('0x2d')]=qs[_0x8f71('0x2d')](_0x4c1fd0[_0x8f71('0x3a')][_0x8f71('0x2d')]);}return _0x1d7348['getDescriptions'](_0x264a3b);}})['then'](function(_0x35a72d){if(_0x35a72d){return _0x35a72d?{'count':_0x223994,'rows':_0x35a72d}:null;}})[_0x8f71('0x1e')](respondWithResult(_0x1eb7bf,null))['catch'](handleError(_0x1eb7bf,null));};exports[_0x8f71('0x5e')]=function(_0x327cfa,_0x24a40f,_0x20c046){var _0x527af5={};var _0x3f97b7={};var _0x2fe8f6;var _0x8240dd;return db[_0x8f71('0x37')][_0x8f71('0x59')]({'where':{'id':_0x327cfa[_0x8f71('0x57')]['id']}})[_0x8f71('0x1e')](handleEntityNotFound(_0x24a40f,null))[_0x8f71('0x1e')](function(_0x45b85b){if(_0x45b85b){_0x2fe8f6=_0x45b85b;_0x3f97b7[_0x8f71('0x3d')]=_['keys'](db['Tag'][_0x8f71('0x38')]);_0x3f97b7[_0x8f71('0x3a')]=_[_0x8f71('0x39')](_0x327cfa[_0x8f71('0x3a')]);_0x3f97b7['filters']=_[_0x8f71('0x3c')](_0x3f97b7['model'],_0x3f97b7[_0x8f71('0x3a')]);_0x527af5[_0x8f71('0x3e')]=_[_0x8f71('0x3c')](_0x3f97b7[_0x8f71('0x3d')],qs[_0x8f71('0x3f')](_0x327cfa[_0x8f71('0x3a')][_0x8f71('0x3f')]));_0x527af5['attributes']=_0x527af5[_0x8f71('0x3e')][_0x8f71('0x40')]?_0x527af5[_0x8f71('0x3e')]:_0x3f97b7['model'];_0x527af5[_0x8f71('0x5b')]=qs[_0x8f71('0x44')](_0x327cfa[_0x8f71('0x3a')]['sort']);_0x527af5[_0x8f71('0x45')]=qs['filters'](_[_0x8f71('0x46')](_0x327cfa[_0x8f71('0x3a')],_0x3f97b7[_0x8f71('0x3b')]));if(_0x327cfa[_0x8f71('0x3a')][_0x8f71('0x47')]){_0x527af5[_0x8f71('0x45')]=_[_0x8f71('0x4b')](_0x527af5[_0x8f71('0x45')],{'$or':_[_0x8f71('0x48')](_0x527af5[_0x8f71('0x3e')],function(_0x45d206){var _0x5f2193={};_0x5f2193[_0x45d206]={'$like':'%'+_0x327cfa['query'][_0x8f71('0x47')]+'%'};return _0x5f2193;})});}_0x527af5=_[_0x8f71('0x4b')]({},_0x527af5,_0x327cfa['options']);return _0x2fe8f6[_0x8f71('0x5e')](_0x527af5);}})[_0x8f71('0x1e')](function(_0x488125){if(_0x488125){_0x8240dd=_0x488125[_0x8f71('0x40')];if(!_0x327cfa['query']['hasOwnProperty']('nolimit')){_0x527af5[_0x8f71('0x43')]=qs[_0x8f71('0x43')](_0x327cfa[_0x8f71('0x3a')][_0x8f71('0x43')]);_0x527af5['offset']=qs['offset'](_0x327cfa[_0x8f71('0x3a')][_0x8f71('0x2d')]);}return _0x2fe8f6[_0x8f71('0x5e')](_0x527af5);}})[_0x8f71('0x1e')](function(_0x47db0b){if(_0x47db0b){return _0x47db0b?{'count':_0x8240dd,'rows':_0x47db0b}:null;}})[_0x8f71('0x1e')](respondWithResult(_0x24a40f,null))[_0x8f71('0x51')](handleError(_0x24a40f,null));};exports[_0x8f71('0x5f')]=function(_0x4d8589,_0x31a74e,_0x4c8494){if(_0x4d8589[_0x8f71('0x55')]['id']){delete _0x4d8589['body']['id'];}return db['FreshdeskConfiguration'][_0x8f71('0x59')]({'where':{'id':_0x4d8589[_0x8f71('0x57')]['id']}})[_0x8f71('0x1e')](handleEntityNotFound(_0x31a74e,null))[_0x8f71('0x1e')](function(_0x20846c){if(_0x20846c){return _0x20846c[_0x8f71('0x5f')](_0x4d8589[_0x8f71('0x55')]['ids']||[]);}return null;})['then'](respondWithResult(_0x31a74e,null))['catch'](handleError(_0x31a74e,null));};
\ No newline at end of file
index 5cddbfd..1ff271d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe548=['../../config/logger','api','moment','FreshdeskConfiguration','lodash','util'];(function(_0x599f41,_0x4db732){var _0x2e4d58=function(_0x14c882){while(--_0x14c882){_0x599f41['push'](_0x599f41['shift']());}};_0x2e4d58(++_0x4db732);}(_0xe548,0x184));var _0x8e54=function(_0x50f112,_0xd38e53){_0x50f112=_0x50f112-0x0;var _0x4ecf28=_0xe548[_0x50f112];return _0x4ecf28;};'use strict';var _=require(_0x8e54('0x0'));var util=require(_0x8e54('0x1'));var logger=require(_0x8e54('0x2'))(_0x8e54('0x3'));var moment=require(_0x8e54('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require('./intFreshdeskConfiguration.attributes');module['exports']=function(_0x4b69ef,_0x31c052){return _0x4b69ef['define'](_0x8e54('0x5'),attributes,{'tableName':'int_freshdesk_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x5127=['lodash','util','../../config/logger','api','bluebird','request-promise','./intFreshdeskConfiguration.attributes','define','FreshdeskConfiguration','int_freshdesk_configurations'];(function(_0x15ced0,_0x48664c){var _0x29e7ee=function(_0x574bc4){while(--_0x574bc4){_0x15ced0['push'](_0x15ced0['shift']());}};_0x29e7ee(++_0x48664c);}(_0x5127,0x64));var _0x7512=function(_0x5e291d,_0x335924){_0x5e291d=_0x5e291d-0x0;var _0x7597ec=_0x5127[_0x5e291d];return _0x7597ec;};'use strict';var _=require(_0x7512('0x0'));var util=require(_0x7512('0x1'));var logger=require(_0x7512('0x2'))(_0x7512('0x3'));var moment=require('moment');var BPromise=require(_0x7512('0x4'));var rp=require(_0x7512('0x5'));var attributes=require(_0x7512('0x6'));module['exports']=function(_0xe1eb6c,_0x2f62d1){return _0xe1eb6c[_0x7512('0x7')](_0x7512('0x8'),attributes,{'tableName':_0x7512('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 19e061f..4c47eae 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x182e=['bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','then','info','FreshdeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util'];(function(_0x2085f3,_0x50105b){var _0x384e3c=function(_0x235fa0){while(--_0x235fa0){_0x2085f3['push'](_0x2085f3['shift']());}};_0x384e3c(++_0x50105b);}(_0x182e,0x9f));var _0xe182=function(_0x527824,_0xc824a9){_0x527824=_0x527824-0x0;var _0xc8b8ed=_0x182e[_0x527824];return _0xc8b8ed;};'use strict';var _=require(_0xe182('0x0'));var util=require(_0xe182('0x1'));var moment=require('moment');var BPromise=require(_0xe182('0x2'));var rs=require(_0xe182('0x3'));var fs=require('fs');var Redis=require(_0xe182('0x4'));var db=require(_0xe182('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xe182('0x6'))(_0xe182('0x7'));var config=require(_0xe182('0x8'));var jayson=require(_0xe182('0x9'));var client=jayson[_0xe182('0xa')][_0xe182('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x324bfd,_0x14bd19,_0x3e00f1){return new BPromise(function(_0x4c803e,_0x551608){return client['request'](_0x324bfd,_0x3e00f1)[_0xe182('0xc')](function(_0x27a7d5){logger[_0xe182('0xd')](_0xe182('0xe'),_0x14bd19,_0xe182('0xf'));logger[_0xe182('0x10')](_0xe182('0x11'),_0x14bd19,_0xe182('0xf'),JSON[_0xe182('0x12')](_0x27a7d5));if(_0x27a7d5['error']){if(_0x27a7d5[_0xe182('0x13')]['code']===0x1f4){logger[_0xe182('0x13')](_0xe182('0xe'),_0x14bd19,_0x27a7d5[_0xe182('0x13')][_0xe182('0x14')]);return _0x551608(_0x27a7d5['error'][_0xe182('0x14')]);}logger[_0xe182('0x13')](_0xe182('0xe'),_0x14bd19,_0x27a7d5[_0xe182('0x13')]['message']);return _0x4c803e(_0x27a7d5['error'][_0xe182('0x14')]);}else{logger[_0xe182('0xd')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x14bd19,_0xe182('0xf'));_0x4c803e(_0x27a7d5[_0xe182('0x15')][_0xe182('0x14')]);}})[_0xe182('0x16')](function(_0x1ee1ab){logger[_0xe182('0x13')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x14bd19,_0x1ee1ab);_0x551608(_0x1ee1ab);});});}
\ No newline at end of file
+var _0x8278=['jayson/promise','client','http','request','info','debug','FreshdeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','FreshdeskConfiguration,\x20%s,\x20%s','message','request\x20sent','result','catch','moment','bluebird','randomstring','ioredis','../../mysqldb','rpc','../../config/environment'];(function(_0x2bbdcf,_0xa7bb6d){var _0x1fe8af=function(_0x5f53b8){while(--_0x5f53b8){_0x2bbdcf['push'](_0x2bbdcf['shift']());}};_0x1fe8af(++_0xa7bb6d);}(_0x8278,0xcb));var _0x8827=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8278[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x8827('0x0'));var BPromise=require(_0x8827('0x1'));var rs=require(_0x8827('0x2'));var fs=require('fs');var Redis=require(_0x8827('0x3'));var db=require(_0x8827('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x8827('0x5'));var config=require(_0x8827('0x6'));var jayson=require(_0x8827('0x7'));var client=jayson[_0x8827('0x8')][_0x8827('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x255582,_0x40c459,_0xcca56e){return new BPromise(function(_0x3831b0,_0x5c7132){return client[_0x8827('0xa')](_0x255582,_0xcca56e)['then'](function(_0x58fdc1){logger[_0x8827('0xb')]('FreshdeskConfiguration,\x20%s,\x20%s',_0x40c459,'request\x20sent');logger[_0x8827('0xc')](_0x8827('0xd'),_0x40c459,'request\x20sent',JSON[_0x8827('0xe')](_0x58fdc1));if(_0x58fdc1[_0x8827('0xf')]){if(_0x58fdc1[_0x8827('0xf')]['code']===0x1f4){logger[_0x8827('0xf')](_0x8827('0x10'),_0x40c459,_0x58fdc1[_0x8827('0xf')][_0x8827('0x11')]);return _0x5c7132(_0x58fdc1[_0x8827('0xf')][_0x8827('0x11')]);}logger[_0x8827('0xf')](_0x8827('0x10'),_0x40c459,_0x58fdc1[_0x8827('0xf')][_0x8827('0x11')]);return _0x3831b0(_0x58fdc1[_0x8827('0xf')][_0x8827('0x11')]);}else{logger[_0x8827('0xb')](_0x8827('0x10'),_0x40c459,_0x8827('0x12'));_0x3831b0(_0x58fdc1[_0x8827('0x13')][_0x8827('0x11')]);}})[_0x8827('0x14')](function(_0x1ebc5e){logger[_0x8827('0xf')](_0x8827('0x10'),_0x40c459,_0x1ebc5e);_0x5c7132(_0x1ebc5e);});});}
\ No newline at end of file
index 91d6801..232fd9d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf63e=['delete','destroy','exports','multer','util','path','connect-timeout','../../components/auth/service','../../components/interaction/service','./intFreshdeskField.controller','index','/:id','isAuthenticated','show','post','update'];(function(_0x297373,_0x34f683){var _0x5dab82=function(_0x5f34f4){while(--_0x5f34f4){_0x297373['push'](_0x297373['shift']());}};_0x5dab82(++_0x34f683);}(_0xf63e,0x103));var _0xef63=function(_0x1bcba2,_0x9bf033){_0x1bcba2=_0x1bcba2-0x0;var _0x497e37=_0xf63e[_0x1bcba2];return _0x497e37;};'use strict';var multer=require(_0xef63('0x0'));var util=require(_0xef63('0x1'));var path=require(_0xef63('0x2'));var timeout=require(_0xef63('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0xef63('0x4'));var interaction=require(_0xef63('0x5'));var config=require('../../config/environment');var controller=require(_0xef63('0x6'));router['get']('/',auth['isAuthenticated'](),controller[_0xef63('0x7')]);router['get'](_0xef63('0x8'),auth[_0xef63('0x9')](),controller[_0xef63('0xa')]);router[_0xef63('0xb')]('/',auth['isAuthenticated'](),controller['create']);router['put']('/:id',auth[_0xef63('0x9')](),controller[_0xef63('0xc')]);router[_0xef63('0xd')](_0xef63('0x8'),auth[_0xef63('0x9')](),controller[_0xef63('0xe')]);module[_0xef63('0xf')]=router;
\ No newline at end of file
+var _0x8941=['../../config/environment','./intFreshdeskField.controller','index','/:id','isAuthenticated','show','put','update','delete','destroy','exports','util','path','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x28ba02,_0x630168){var _0x5d8ade=function(_0x596b23){while(--_0x596b23){_0x28ba02['push'](_0x28ba02['shift']());}};_0x5d8ade(++_0x630168);}(_0x8941,0xbb));var _0x1894=function(_0x27dc86,_0x5d31b0){_0x27dc86=_0x27dc86-0x0;var _0x48e84c=_0x8941[_0x27dc86];return _0x48e84c;};'use strict';var multer=require('multer');var util=require(_0x1894('0x0'));var path=require(_0x1894('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x1894('0x2')]();var auth=require(_0x1894('0x3'));var interaction=require(_0x1894('0x4'));var config=require(_0x1894('0x5'));var controller=require(_0x1894('0x6'));router['get']('/',auth['isAuthenticated'](),controller[_0x1894('0x7')]);router['get'](_0x1894('0x8'),auth[_0x1894('0x9')](),controller[_0x1894('0xa')]);router['post']('/',auth[_0x1894('0x9')](),controller['create']);router[_0x1894('0xb')](_0x1894('0x8'),auth[_0x1894('0x9')](),controller[_0x1894('0xc')]);router[_0x1894('0xd')](_0x1894('0x8'),auth['isAuthenticated'](),controller[_0x1894('0xe')]);module[_0x1894('0xf')]=router;
\ No newline at end of file
index 7f22ce4..5b7b330 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6c76=['customVariable','STRING','string','BOOLEAN','sequelize','exports','ENUM','variable'];(function(_0x52e363,_0x48062a){var _0x3fc2b5=function(_0x1b0cf9){while(--_0x1b0cf9){_0x52e363['push'](_0x52e363['shift']());}};_0x3fc2b5(++_0x48062a);}(_0x6c76,0x184));var _0x66c7=function(_0x3d90d3,_0x4fa646){_0x3d90d3=_0x3d90d3-0x0;var _0x4f6197=_0x6c76[_0x3d90d3];return _0x4f6197;};'use strict';var Sequelize=require(_0x66c7('0x0'));module[_0x66c7('0x1')]={'type':{'type':Sequelize[_0x66c7('0x2')]('string',_0x66c7('0x3'),_0x66c7('0x4'),'keyValue'),'defaultValue':'string'},'content':{'type':Sequelize[_0x66c7('0x5')]},'key':{'type':Sequelize[_0x66c7('0x5')]},'keyType':{'type':Sequelize['ENUM'](_0x66c7('0x6'),_0x66c7('0x3'),'customVariable')},'keyContent':{'type':Sequelize[_0x66c7('0x5')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0x66c7('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x66c7('0x5')]}};
\ No newline at end of file
+var _0xcb91=['string','variable','customVariable','STRING','BOOLEAN','ENUM'];(function(_0x50f041,_0x1a1ba5){var _0x33139b=function(_0x564a6a){while(--_0x564a6a){_0x50f041['push'](_0x50f041['shift']());}};_0x33139b(++_0x1a1ba5);}(_0xcb91,0x1a9));var _0x1cb9=function(_0x872b02,_0x4f4458){_0x872b02=_0x872b02-0x0;var _0x1a6b24=_0xcb91[_0x872b02];return _0x1a6b24;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize[_0x1cb9('0x0')](_0x1cb9('0x1'),_0x1cb9('0x2'),_0x1cb9('0x3'),'keyValue'),'defaultValue':_0x1cb9('0x1')},'content':{'type':Sequelize[_0x1cb9('0x4')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x1cb9('0x0')](_0x1cb9('0x1'),'variable',_0x1cb9('0x3'))},'keyContent':{'type':Sequelize[_0x1cb9('0x4')]},'idField':{'type':Sequelize['STRING']},'nameField':{'type':Sequelize[_0x1cb9('0x4')]},'customField':{'type':Sequelize[_0x1cb9('0x5')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
index a6a582b..5c8d223 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf785=['pick','filter','map','VIRTUAL','field','options','include','findAll','rows','catch','rawAttributes','includeAll','merge','find','create','body','params','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','../../mysqldb','status','end','json','count','offset','set','apply','reject','save','update','then','destroy','error','stack','name','send','index','FreshdeskField','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','limit','order','sort','where'];(function(_0x4b86aa,_0x328990){var _0x50d53f=function(_0xeedf8d){while(--_0xeedf8d){_0x4b86aa['push'](_0x4b86aa['shift']());}};_0x50d53f(++_0x328990);}(_0xf785,0x9f));var _0x5f78=function(_0x7f4f05,_0x2f6d6a){_0x7f4f05=_0x7f4f05-0x0;var _0x1ede08=_0xf785[_0x7f4f05];return _0x1ede08;};'use strict';var pdf=require(_0x5f78('0x0'));var emlformat=require(_0x5f78('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x5f78('0x2'));var jsonpatch=require(_0x5f78('0x3'));var rp=require(_0x5f78('0x4'));var moment=require('moment');var BPromise=require(_0x5f78('0x5'));var Mustache=require('mustache');var util=require(_0x5f78('0x6'));var path=require(_0x5f78('0x7'));var sox=require(_0x5f78('0x8'));var csv=require('to-csv');var ejs=require(_0x5f78('0x9'));var fs=require('fs');var _=require(_0x5f78('0xa'));var squel=require(_0x5f78('0xb'));var crypto=require(_0x5f78('0xc'));var jsforce=require(_0x5f78('0xd'));var deskjs=require(_0x5f78('0xe'));var toCsv=require(_0x5f78('0xf'));var querystring=require(_0x5f78('0x10'));var Papa=require(_0x5f78('0x11'));var authService=require('../../components/auth/service');var hardwareService=require(_0x5f78('0x12'));var Redis=require('ioredis');var qs=require(_0x5f78('0x13'));var logger=require('../../config/logger')(_0x5f78('0x14'));var utils=require(_0x5f78('0x15'));var config=require('../../config/environment');var db=require(_0x5f78('0x16'))['db'];function respondWithStatusCode(_0x29c802,_0x376cc0){_0x376cc0=_0x376cc0||0xcc;return function(_0x4c5281){if(_0x4c5281){return _0x29c802['sendStatus'](_0x376cc0);}return _0x29c802[_0x5f78('0x17')](_0x376cc0)[_0x5f78('0x18')]();};}function respondWithResult(_0x5b4fe0,_0x405ac0){_0x405ac0=_0x405ac0||0xc8;return function(_0x5ee7ea){if(_0x5ee7ea){return _0x5b4fe0[_0x5f78('0x17')](_0x405ac0)[_0x5f78('0x19')](_0x5ee7ea);}};}function respondWithFilteredResult(_0x593c0a,_0x3af2d6){return function(_0x10112e){if(_0x10112e){var _0x1a953a=_0x10112e[_0x5f78('0x1a')],_0x1640d0=_0x3af2d6['offset'],_0x324ca4=_0x3af2d6[_0x5f78('0x1b')]+_0x3af2d6['limit'],_0x3aa212;if(_0x324ca4>=_0x1a953a){_0x324ca4=_0x1a953a;_0x3aa212=0xc8;}else{_0x3aa212=0xce;}_0x593c0a['status'](_0x3aa212);return _0x593c0a[_0x5f78('0x1c')]('Content-Range',_0x1640d0+'-'+_0x324ca4+'/'+_0x1a953a)[_0x5f78('0x19')](_0x10112e);}return null;};}function patchUpdates(_0x4ec779){return function(_0x590715){try{jsonpatch[_0x5f78('0x1d')](_0x590715,_0x4ec779,!![]);}catch(_0x586fd4){return BPromise[_0x5f78('0x1e')](_0x586fd4);}return _0x590715[_0x5f78('0x1f')]();};}function saveUpdates(_0x2e34cc,_0x326a33){return function(_0x3d1ec6){if(_0x3d1ec6){return _0x3d1ec6[_0x5f78('0x20')](_0x2e34cc)[_0x5f78('0x21')](function(_0x4d0a00){return _0x4d0a00;});}return null;};}function removeEntity(_0x658d44,_0x1843e4){return function(_0x40df05){if(_0x40df05){return _0x40df05[_0x5f78('0x22')]()[_0x5f78('0x21')](function(){_0x658d44['status'](0xcc)[_0x5f78('0x18')]();});}};}function handleEntityNotFound(_0x199f66,_0x647d18){return function(_0x4bdb3f){if(!_0x4bdb3f){_0x199f66['sendStatus'](0x194);}return _0x4bdb3f;};}function handleError(_0x45656a,_0x130f55){_0x130f55=_0x130f55||0x1f4;return function(_0xe419){logger[_0x5f78('0x23')](_0xe419[_0x5f78('0x24')]);if(_0xe419[_0x5f78('0x25')]){delete _0xe419['name'];}_0x45656a[_0x5f78('0x17')](_0x130f55)[_0x5f78('0x26')](_0xe419);};}exports[_0x5f78('0x27')]=function(_0x493cd7,_0x55faa2){var _0x5491dc={},_0x57b178={},_0x4f2f9a={'count':0x0,'rows':[]};var _0x922567=db[_0x5f78('0x28')]['rawAttributes'];_0x57b178['model']=_[_0x5f78('0x29')](_0x922567);_0x57b178[_0x5f78('0x2a')]=_[_0x5f78('0x29')](_0x493cd7[_0x5f78('0x2a')]);_0x57b178[_0x5f78('0x2b')]=_[_0x5f78('0x2c')](_0x57b178[_0x5f78('0x2d')],_0x57b178[_0x5f78('0x2a')]);_0x5491dc[_0x5f78('0x2e')]=_[_0x5f78('0x2c')](_0x57b178['model'],qs[_0x5f78('0x2f')](_0x493cd7[_0x5f78('0x2a')][_0x5f78('0x2f')]));_0x5491dc['attributes']=_0x5491dc[_0x5f78('0x2e')][_0x5f78('0x30')]?_0x5491dc[_0x5f78('0x2e')]:_0x57b178['model'];if(!_0x493cd7[_0x5f78('0x2a')][_0x5f78('0x31')]('nolimit')){_0x5491dc['limit']=qs[_0x5f78('0x32')](_0x493cd7['query']['limit']);_0x5491dc[_0x5f78('0x1b')]=qs[_0x5f78('0x1b')](_0x493cd7[_0x5f78('0x2a')][_0x5f78('0x1b')]);}_0x5491dc[_0x5f78('0x33')]=qs[_0x5f78('0x34')](_0x493cd7['query'][_0x5f78('0x34')]);_0x5491dc[_0x5f78('0x35')]=qs['filters'](_[_0x5f78('0x36')](_0x493cd7[_0x5f78('0x2a')],_0x57b178[_0x5f78('0x2b')]));if(_0x493cd7[_0x5f78('0x2a')][_0x5f78('0x37')]){_0x5491dc[_0x5f78('0x35')]=_['merge'](_0x5491dc['where'],{'$or':_[_0x5f78('0x38')](_0x922567,function(_0x341ecd){if(_0x341ecd['type']['key']!==_0x5f78('0x39')){var _0xbf0d87={};_0xbf0d87[_0x341ecd[_0x5f78('0x3a')]]={'$like':'%'+_0x493cd7[_0x5f78('0x2a')][_0x5f78('0x37')]+'%'};return _0xbf0d87;}})});}_0x5491dc=_['merge']({},_0x5491dc,_0x493cd7[_0x5f78('0x3b')]);var _0x286fc8={'where':_0x5491dc['where']};return db['FreshdeskField'][_0x5f78('0x1a')](_0x286fc8)[_0x5f78('0x21')](function(_0x16d92b){_0x4f2f9a[_0x5f78('0x1a')]=_0x16d92b;if(_0x493cd7[_0x5f78('0x2a')]['includeAll']){_0x5491dc[_0x5f78('0x3c')]=[{'all':!![]}];}return db[_0x5f78('0x28')][_0x5f78('0x3d')](_0x5491dc);})[_0x5f78('0x21')](function(_0x1a28e7){_0x4f2f9a[_0x5f78('0x3e')]=_0x1a28e7;return _0x4f2f9a;})[_0x5f78('0x21')](respondWithFilteredResult(_0x55faa2,_0x5491dc))[_0x5f78('0x3f')](handleError(_0x55faa2,null));};exports['show']=function(_0x36f548,_0xfae7b1){var _0x27b1a6={'raw':!![],'where':{'id':_0x36f548['params']['id']}},_0x47b62e={};_0x47b62e[_0x5f78('0x2d')]=_[_0x5f78('0x29')](db[_0x5f78('0x28')][_0x5f78('0x40')]);_0x47b62e[_0x5f78('0x2a')]=_[_0x5f78('0x29')](_0x36f548[_0x5f78('0x2a')]);_0x47b62e['filters']=_[_0x5f78('0x2c')](_0x47b62e['model'],_0x47b62e[_0x5f78('0x2a')]);_0x27b1a6[_0x5f78('0x2e')]=_[_0x5f78('0x2c')](_0x47b62e[_0x5f78('0x2d')],qs[_0x5f78('0x2f')](_0x36f548[_0x5f78('0x2a')]['fields']));_0x27b1a6[_0x5f78('0x2e')]=_0x27b1a6['attributes']['length']?_0x27b1a6[_0x5f78('0x2e')]:_0x47b62e[_0x5f78('0x2d')];if(_0x36f548[_0x5f78('0x2a')][_0x5f78('0x41')]){_0x27b1a6['include']=[{'all':!![]}];}_0x27b1a6=_[_0x5f78('0x42')]({},_0x27b1a6,_0x36f548['options']);return db[_0x5f78('0x28')][_0x5f78('0x43')](_0x27b1a6)[_0x5f78('0x21')](handleEntityNotFound(_0xfae7b1,null))[_0x5f78('0x21')](respondWithResult(_0xfae7b1,null))['catch'](handleError(_0xfae7b1,null));};exports[_0x5f78('0x44')]=function(_0x51a223,_0x507b04){return db[_0x5f78('0x28')]['create'](_0x51a223[_0x5f78('0x45')],{})[_0x5f78('0x21')](respondWithResult(_0x507b04,0xc9))[_0x5f78('0x3f')](handleError(_0x507b04,null));};exports[_0x5f78('0x20')]=function(_0x3f1c3a,_0x2fc4c1){if(_0x3f1c3a['body']['id']){delete _0x3f1c3a[_0x5f78('0x45')]['id'];}return db['FreshdeskField'][_0x5f78('0x43')]({'where':{'id':_0x3f1c3a[_0x5f78('0x46')]['id']}})[_0x5f78('0x21')](handleEntityNotFound(_0x2fc4c1,null))[_0x5f78('0x21')](saveUpdates(_0x3f1c3a['body'],null))[_0x5f78('0x21')](respondWithResult(_0x2fc4c1,null))[_0x5f78('0x3f')](handleError(_0x2fc4c1,null));};exports[_0x5f78('0x22')]=function(_0x2561a9,_0xdba097){return db[_0x5f78('0x28')][_0x5f78('0x43')]({'where':{'id':_0x2561a9[_0x5f78('0x46')]['id']}})[_0x5f78('0x21')](handleEntityNotFound(_0xdba097,null))['then'](removeEntity(_0xdba097,null))[_0x5f78('0x3f')](handleError(_0xdba097,null));};
\ No newline at end of file
+var _0x1c68=['VIRTUAL','field','options','count','includeAll','findAll','rows','catch','show','params','include','find','create','body','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/utils','../../config/environment','../../mysqldb','json','offset','limit','status','Content-Range','apply','reject','save','then','destroy','sendStatus','error','name','send','index','FreshdeskField','rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','sort','where','filter','merge','map','type','key'];(function(_0x4a782b,_0x55584a){var _0x5cb5a0=function(_0x3010ed){while(--_0x3010ed){_0x4a782b['push'](_0x4a782b['shift']());}};_0x5cb5a0(++_0x55584a);}(_0x1c68,0x9e));var _0x81c6=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x1c68[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0x81c6('0x0'));var emlformat=require(_0x81c6('0x1'));var rimraf=require(_0x81c6('0x2'));var zipdir=require(_0x81c6('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x81c6('0x4'));var moment=require(_0x81c6('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x81c6('0x6'));var path=require(_0x81c6('0x7'));var sox=require(_0x81c6('0x8'));var csv=require(_0x81c6('0x9'));var ejs=require(_0x81c6('0xa'));var fs=require('fs');var _=require(_0x81c6('0xb'));var squel=require(_0x81c6('0xc'));var crypto=require(_0x81c6('0xd'));var jsforce=require(_0x81c6('0xe'));var deskjs=require(_0x81c6('0xf'));var toCsv=require(_0x81c6('0x9'));var querystring=require(_0x81c6('0x10'));var Papa=require(_0x81c6('0x11'));var authService=require(_0x81c6('0x12'));var hardwareService=require(_0x81c6('0x13'));var Redis=require(_0x81c6('0x14'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')('api');var utils=require(_0x81c6('0x15'));var config=require(_0x81c6('0x16'));var db=require(_0x81c6('0x17'))['db'];function respondWithStatusCode(_0xf9f622,_0x4aed87){_0x4aed87=_0x4aed87||0xcc;return function(_0x44302f){if(_0x44302f){return _0xf9f622['sendStatus'](_0x4aed87);}return _0xf9f622['status'](_0x4aed87)['end']();};}function respondWithResult(_0x337ca8,_0x19c5b7){_0x19c5b7=_0x19c5b7||0xc8;return function(_0x5a3034){if(_0x5a3034){return _0x337ca8['status'](_0x19c5b7)[_0x81c6('0x18')](_0x5a3034);}};}function respondWithFilteredResult(_0x6b511,_0x584f18){return function(_0xed901e){if(_0xed901e){var _0x2dc3e7=_0xed901e['count'],_0xf3a3db=_0x584f18[_0x81c6('0x19')],_0x1cbb4a=_0x584f18[_0x81c6('0x19')]+_0x584f18[_0x81c6('0x1a')],_0x288312;if(_0x1cbb4a>=_0x2dc3e7){_0x1cbb4a=_0x2dc3e7;_0x288312=0xc8;}else{_0x288312=0xce;}_0x6b511[_0x81c6('0x1b')](_0x288312);return _0x6b511['set'](_0x81c6('0x1c'),_0xf3a3db+'-'+_0x1cbb4a+'/'+_0x2dc3e7)[_0x81c6('0x18')](_0xed901e);}return null;};}function patchUpdates(_0x4ab1db){return function(_0x5f5773){try{jsonpatch[_0x81c6('0x1d')](_0x5f5773,_0x4ab1db,!![]);}catch(_0x23a19f){return BPromise[_0x81c6('0x1e')](_0x23a19f);}return _0x5f5773[_0x81c6('0x1f')]();};}function saveUpdates(_0x2627c2,_0x58f37b){return function(_0x2ed8fe){if(_0x2ed8fe){return _0x2ed8fe['update'](_0x2627c2)[_0x81c6('0x20')](function(_0x1617b4){return _0x1617b4;});}return null;};}function removeEntity(_0x1bfd76,_0x16a8bc){return function(_0x859efa){if(_0x859efa){return _0x859efa[_0x81c6('0x21')]()[_0x81c6('0x20')](function(){_0x1bfd76[_0x81c6('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x310cf8,_0x14b613){return function(_0x3ee869){if(!_0x3ee869){_0x310cf8[_0x81c6('0x22')](0x194);}return _0x3ee869;};}function handleError(_0x15d6b2,_0x5a5225){_0x5a5225=_0x5a5225||0x1f4;return function(_0x381d1b){logger[_0x81c6('0x23')](_0x381d1b['stack']);if(_0x381d1b[_0x81c6('0x24')]){delete _0x381d1b[_0x81c6('0x24')];}_0x15d6b2[_0x81c6('0x1b')](_0x5a5225)[_0x81c6('0x25')](_0x381d1b);};}exports[_0x81c6('0x26')]=function(_0x1097b3,_0x4adb85){var _0x3332fb={},_0x38d5f3={},_0x13e3cf={'count':0x0,'rows':[]};var _0x50b600=db[_0x81c6('0x27')][_0x81c6('0x28')];_0x38d5f3['model']=_[_0x81c6('0x29')](_0x50b600);_0x38d5f3[_0x81c6('0x2a')]=_[_0x81c6('0x29')](_0x1097b3[_0x81c6('0x2a')]);_0x38d5f3[_0x81c6('0x2b')]=_[_0x81c6('0x2c')](_0x38d5f3[_0x81c6('0x2d')],_0x38d5f3['query']);_0x3332fb['attributes']=_[_0x81c6('0x2c')](_0x38d5f3[_0x81c6('0x2d')],qs['fields'](_0x1097b3[_0x81c6('0x2a')][_0x81c6('0x2e')]));_0x3332fb['attributes']=_0x3332fb[_0x81c6('0x2f')][_0x81c6('0x30')]?_0x3332fb[_0x81c6('0x2f')]:_0x38d5f3[_0x81c6('0x2d')];if(!_0x1097b3['query'][_0x81c6('0x31')](_0x81c6('0x32'))){_0x3332fb['limit']=qs[_0x81c6('0x1a')](_0x1097b3[_0x81c6('0x2a')][_0x81c6('0x1a')]);_0x3332fb[_0x81c6('0x19')]=qs[_0x81c6('0x19')](_0x1097b3[_0x81c6('0x2a')][_0x81c6('0x19')]);}_0x3332fb['order']=qs[_0x81c6('0x33')](_0x1097b3[_0x81c6('0x2a')][_0x81c6('0x33')]);_0x3332fb[_0x81c6('0x34')]=qs['filters'](_['pick'](_0x1097b3[_0x81c6('0x2a')],_0x38d5f3[_0x81c6('0x2b')]));if(_0x1097b3[_0x81c6('0x2a')][_0x81c6('0x35')]){_0x3332fb['where']=_[_0x81c6('0x36')](_0x3332fb[_0x81c6('0x34')],{'$or':_[_0x81c6('0x37')](_0x50b600,function(_0x1750f4){if(_0x1750f4[_0x81c6('0x38')][_0x81c6('0x39')]!==_0x81c6('0x3a')){var _0x5b0f54={};_0x5b0f54[_0x1750f4[_0x81c6('0x3b')]]={'$like':'%'+_0x1097b3[_0x81c6('0x2a')][_0x81c6('0x35')]+'%'};return _0x5b0f54;}})});}_0x3332fb=_[_0x81c6('0x36')]({},_0x3332fb,_0x1097b3[_0x81c6('0x3c')]);var _0x47cde3={'where':_0x3332fb[_0x81c6('0x34')]};return db[_0x81c6('0x27')][_0x81c6('0x3d')](_0x47cde3)[_0x81c6('0x20')](function(_0x955fe4){_0x13e3cf['count']=_0x955fe4;if(_0x1097b3['query'][_0x81c6('0x3e')]){_0x3332fb['include']=[{'all':!![]}];}return db[_0x81c6('0x27')][_0x81c6('0x3f')](_0x3332fb);})[_0x81c6('0x20')](function(_0x5a5d08){_0x13e3cf[_0x81c6('0x40')]=_0x5a5d08;return _0x13e3cf;})[_0x81c6('0x20')](respondWithFilteredResult(_0x4adb85,_0x3332fb))[_0x81c6('0x41')](handleError(_0x4adb85,null));};exports[_0x81c6('0x42')]=function(_0x25e284,_0x571587){var _0x48786f={'raw':!![],'where':{'id':_0x25e284[_0x81c6('0x43')]['id']}},_0x4723e0={};_0x4723e0['model']=_[_0x81c6('0x29')](db['FreshdeskField'][_0x81c6('0x28')]);_0x4723e0[_0x81c6('0x2a')]=_[_0x81c6('0x29')](_0x25e284[_0x81c6('0x2a')]);_0x4723e0[_0x81c6('0x2b')]=_[_0x81c6('0x2c')](_0x4723e0[_0x81c6('0x2d')],_0x4723e0[_0x81c6('0x2a')]);_0x48786f[_0x81c6('0x2f')]=_[_0x81c6('0x2c')](_0x4723e0[_0x81c6('0x2d')],qs[_0x81c6('0x2e')](_0x25e284[_0x81c6('0x2a')][_0x81c6('0x2e')]));_0x48786f[_0x81c6('0x2f')]=_0x48786f['attributes'][_0x81c6('0x30')]?_0x48786f[_0x81c6('0x2f')]:_0x4723e0['model'];if(_0x25e284[_0x81c6('0x2a')][_0x81c6('0x3e')]){_0x48786f[_0x81c6('0x44')]=[{'all':!![]}];}_0x48786f=_['merge']({},_0x48786f,_0x25e284[_0x81c6('0x3c')]);return db[_0x81c6('0x27')][_0x81c6('0x45')](_0x48786f)[_0x81c6('0x20')](handleEntityNotFound(_0x571587,null))[_0x81c6('0x20')](respondWithResult(_0x571587,null))[_0x81c6('0x41')](handleError(_0x571587,null));};exports[_0x81c6('0x46')]=function(_0x1bbfc0,_0x150546){return db[_0x81c6('0x27')][_0x81c6('0x46')](_0x1bbfc0[_0x81c6('0x47')],{})['then'](respondWithResult(_0x150546,0xc9))[_0x81c6('0x41')](handleError(_0x150546,null));};exports['update']=function(_0x4346cc,_0xd3e2ab){if(_0x4346cc[_0x81c6('0x47')]['id']){delete _0x4346cc['body']['id'];}return db[_0x81c6('0x27')][_0x81c6('0x45')]({'where':{'id':_0x4346cc[_0x81c6('0x43')]['id']}})['then'](handleEntityNotFound(_0xd3e2ab,null))[_0x81c6('0x20')](saveUpdates(_0x4346cc[_0x81c6('0x47')],null))[_0x81c6('0x20')](respondWithResult(_0xd3e2ab,null))[_0x81c6('0x41')](handleError(_0xd3e2ab,null));};exports[_0x81c6('0x21')]=function(_0x3061d,_0x3932a6){return db['FreshdeskField'][_0x81c6('0x45')]({'where':{'id':_0x3061d['params']['id']}})[_0x81c6('0x20')](handleEntityNotFound(_0x3932a6,null))[_0x81c6('0x20')](removeEntity(_0x3932a6,null))['catch'](handleError(_0x3932a6,null));};
\ No newline at end of file
index a166d7a..f159630 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fc5=['request-promise','./intFreshdeskField.attributes','int_freshdesk_fields','idField','FieldId','lodash','util','../../config/logger','api'];(function(_0x4cf98e,_0xba4b79){var _0x1623ac=function(_0x459bc0){while(--_0x459bc0){_0x4cf98e['push'](_0x4cf98e['shift']());}};_0x1623ac(++_0xba4b79);}(_0x3fc5,0x9e));var _0x53fc=function(_0x2d7f0e,_0x3e6fbd){_0x2d7f0e=_0x2d7f0e-0x0;var _0x110b07=_0x3fc5[_0x2d7f0e];return _0x110b07;};'use strict';var _=require(_0x53fc('0x0'));var util=require(_0x53fc('0x1'));var logger=require(_0x53fc('0x2'))(_0x53fc('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x53fc('0x4'));var attributes=require(_0x53fc('0x5'));module['exports']=function(_0x53efdf,_0x5c1ea3){return _0x53efdf['define']('FreshdeskField',attributes,{'tableName':_0x53fc('0x6'),'paranoid':![],'indexes':[{'name':'freshdesk_unique_index','fields':[_0x53fc('0x7'),_0x53fc('0x8')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x2904=['api','bluebird','request-promise','./intFreshdeskField.attributes','exports','define','FreshdeskField','idField','FieldId','util','../../config/logger'];(function(_0x35eb94,_0x2e78a8){var _0x593add=function(_0x8d2e6d){while(--_0x8d2e6d){_0x35eb94['push'](_0x35eb94['shift']());}};_0x593add(++_0x2e78a8);}(_0x2904,0x106));var _0x4290=function(_0x44e1a7,_0xba9399){_0x44e1a7=_0x44e1a7-0x0;var _0x41e46e=_0x2904[_0x44e1a7];return _0x41e46e;};'use strict';var _=require('lodash');var util=require(_0x4290('0x0'));var logger=require(_0x4290('0x1'))(_0x4290('0x2'));var moment=require('moment');var BPromise=require(_0x4290('0x3'));var rp=require(_0x4290('0x4'));var attributes=require(_0x4290('0x5'));module[_0x4290('0x6')]=function(_0x4b022e,_0x54ae30){return _0x4b022e[_0x4290('0x7')](_0x4290('0x8'),attributes,{'tableName':'int_freshdesk_fields','paranoid':![],'indexes':[{'name':'freshdesk_unique_index','fields':[_0x4290('0x9'),_0x4290('0xa')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 383a589..7afe290 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3b5=['../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','request','then','info','request\x20sent','debug','FreshdeskField,\x20%s,\x20%s,\x20%s','stringify','error','code','FreshdeskField,\x20%s,\x20%s','message','result','catch','moment','bluebird','randomstring','ioredis'];(function(_0x20def7,_0x2caec4){var _0xdc6a3e=function(_0x274412){while(--_0x274412){_0x20def7['push'](_0x20def7['shift']());}};_0xdc6a3e(++_0x2caec4);}(_0xc3b5,0x6f));var _0x5c3b=function(_0x3ae280,_0x45bc43){_0x3ae280=_0x3ae280-0x0;var _0x518ff7=_0xc3b5[_0x3ae280];return _0x518ff7;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x5c3b('0x0'));var BPromise=require(_0x5c3b('0x1'));var rs=require(_0x5c3b('0x2'));var fs=require('fs');var Redis=require(_0x5c3b('0x3'));var db=require(_0x5c3b('0x4'))['db'];var utils=require(_0x5c3b('0x5'));var logger=require(_0x5c3b('0x6'))(_0x5c3b('0x7'));var config=require('../../config/environment');var jayson=require(_0x5c3b('0x8'));var client=jayson[_0x5c3b('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x568a28,_0x30a08f,_0x420839){return new BPromise(function(_0x3892ad,_0x5be9ee){return client[_0x5c3b('0xa')](_0x568a28,_0x420839)[_0x5c3b('0xb')](function(_0x159db5){logger[_0x5c3b('0xc')]('FreshdeskField,\x20%s,\x20%s',_0x30a08f,_0x5c3b('0xd'));logger[_0x5c3b('0xe')](_0x5c3b('0xf'),_0x30a08f,_0x5c3b('0xd'),JSON[_0x5c3b('0x10')](_0x159db5));if(_0x159db5['error']){if(_0x159db5[_0x5c3b('0x11')][_0x5c3b('0x12')]===0x1f4){logger['error'](_0x5c3b('0x13'),_0x30a08f,_0x159db5[_0x5c3b('0x11')]['message']);return _0x5be9ee(_0x159db5[_0x5c3b('0x11')][_0x5c3b('0x14')]);}logger[_0x5c3b('0x11')](_0x5c3b('0x13'),_0x30a08f,_0x159db5[_0x5c3b('0x11')][_0x5c3b('0x14')]);return _0x3892ad(_0x159db5[_0x5c3b('0x11')]['message']);}else{logger[_0x5c3b('0xc')]('FreshdeskField,\x20%s,\x20%s',_0x30a08f,'request\x20sent');_0x3892ad(_0x159db5[_0x5c3b('0x15')][_0x5c3b('0x14')]);}})[_0x5c3b('0x16')](function(_0x589797){logger[_0x5c3b('0x11')](_0x5c3b('0x13'),_0x30a08f,_0x589797);_0x5be9ee(_0x589797);});});}
\ No newline at end of file
+var _0xb717=['../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','then','FreshdeskField,\x20%s,\x20%s','request\x20sent','debug','error','code','message','info','result','catch','lodash','moment','randomstring','ioredis'];(function(_0x53b39f,_0x29e3c3){var _0x2da3eb=function(_0x108961){while(--_0x108961){_0x53b39f['push'](_0x53b39f['shift']());}};_0x2da3eb(++_0x29e3c3);}(_0xb717,0x1b4));var _0x7b71=function(_0x52b466,_0x103445){_0x52b466=_0x52b466-0x0;var _0x1c8b20=_0xb717[_0x52b466];return _0x1c8b20;};'use strict';var _=require(_0x7b71('0x0'));var util=require('util');var moment=require(_0x7b71('0x1'));var BPromise=require('bluebird');var rs=require(_0x7b71('0x2'));var fs=require('fs');var Redis=require(_0x7b71('0x3'));var db=require(_0x7b71('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x7b71('0x5'))(_0x7b71('0x6'));var config=require(_0x7b71('0x7'));var jayson=require(_0x7b71('0x8'));var client=jayson[_0x7b71('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x217efe,_0x27b060,_0xd81a5c){return new BPromise(function(_0x4238f6,_0xc46853){return client['request'](_0x217efe,_0xd81a5c)[_0x7b71('0xa')](function(_0x3e13a1){logger['info'](_0x7b71('0xb'),_0x27b060,_0x7b71('0xc'));logger[_0x7b71('0xd')]('FreshdeskField,\x20%s,\x20%s,\x20%s',_0x27b060,_0x7b71('0xc'),JSON['stringify'](_0x3e13a1));if(_0x3e13a1[_0x7b71('0xe')]){if(_0x3e13a1['error'][_0x7b71('0xf')]===0x1f4){logger[_0x7b71('0xe')](_0x7b71('0xb'),_0x27b060,_0x3e13a1[_0x7b71('0xe')][_0x7b71('0x10')]);return _0xc46853(_0x3e13a1['error'][_0x7b71('0x10')]);}logger['error'](_0x7b71('0xb'),_0x27b060,_0x3e13a1[_0x7b71('0xe')]['message']);return _0x4238f6(_0x3e13a1[_0x7b71('0xe')][_0x7b71('0x10')]);}else{logger[_0x7b71('0x11')]('FreshdeskField,\x20%s,\x20%s',_0x27b060,'request\x20sent');_0x4238f6(_0x3e13a1[_0x7b71('0x12')][_0x7b71('0x10')]);}})[_0x7b71('0x13')](function(_0x1b5d57){logger['error'](_0x7b71('0xb'),_0x27b060,_0x1b5d57);_0xc46853(_0x1b5d57);});});}
\ No newline at end of file
index 893d0aa..a17b8da 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x237d=['index','isAuthenticated','getConfigurations','/:id/fields','getFields','post','create','/:id/configurations','put','/:id','update','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSalesforceAccount.controller','get'];(function(_0x24237f,_0x4cf32c){var _0x48298e=function(_0x3f7511){while(--_0x3f7511){_0x24237f['push'](_0x24237f['shift']());}};_0x48298e(++_0x4cf32c);}(_0x237d,0x1d9));var _0xd237=function(_0x2ffa26,_0x111480){_0x2ffa26=_0x2ffa26-0x0;var _0x2fb17c=_0x237d[_0x2ffa26];return _0x2fb17c;};'use strict';var multer=require(_0xd237('0x0'));var util=require(_0xd237('0x1'));var path=require(_0xd237('0x2'));var timeout=require(_0xd237('0x3'));var express=require('express');var router=express[_0xd237('0x4')]();var auth=require(_0xd237('0x5'));var interaction=require(_0xd237('0x6'));var config=require(_0xd237('0x7'));var controller=require(_0xd237('0x8'));router[_0xd237('0x9')]('/',auth['isAuthenticated'](),controller[_0xd237('0xa')]);router[_0xd237('0x9')]('/:id',auth['isAuthenticated'](),controller['show']);router[_0xd237('0x9')]('/:id/configurations',auth[_0xd237('0xb')](),controller[_0xd237('0xc')]);router['get'](_0xd237('0xd'),auth[_0xd237('0xb')](),controller[_0xd237('0xe')]);router[_0xd237('0xf')]('/',auth[_0xd237('0xb')](),controller[_0xd237('0x10')]);router[_0xd237('0xf')](_0xd237('0x11'),auth[_0xd237('0xb')](),controller['addConfiguration']);router[_0xd237('0x12')](_0xd237('0x13'),auth[_0xd237('0xb')](),controller[_0xd237('0x14')]);router['delete'](_0xd237('0x13'),auth[_0xd237('0xb')](),controller[_0xd237('0x15')]);module[_0xd237('0x16')]=router;
\ No newline at end of file
+var _0x0c6e=['create','/:id/configurations','put','/:id','update','delete','destroy','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSalesforceAccount.controller','get','isAuthenticated','index','show','getConfigurations','getFields','post'];(function(_0x2f76d3,_0x24a0c1){var _0x1b22f3=function(_0x3768ea){while(--_0x3768ea){_0x2f76d3['push'](_0x2f76d3['shift']());}};_0x1b22f3(++_0x24a0c1);}(_0x0c6e,0xb0));var _0xe0c6=function(_0x81619e,_0x3d38b7){_0x81619e=_0x81619e-0x0;var _0x40d740=_0x0c6e[_0x81619e];return _0x40d740;};'use strict';var multer=require(_0xe0c6('0x0'));var util=require(_0xe0c6('0x1'));var path=require('path');var timeout=require(_0xe0c6('0x2'));var express=require(_0xe0c6('0x3'));var router=express[_0xe0c6('0x4')]();var auth=require(_0xe0c6('0x5'));var interaction=require(_0xe0c6('0x6'));var config=require(_0xe0c6('0x7'));var controller=require(_0xe0c6('0x8'));router[_0xe0c6('0x9')]('/',auth[_0xe0c6('0xa')](),controller[_0xe0c6('0xb')]);router[_0xe0c6('0x9')]('/:id',auth[_0xe0c6('0xa')](),controller[_0xe0c6('0xc')]);router[_0xe0c6('0x9')]('/:id/configurations',auth[_0xe0c6('0xa')](),controller[_0xe0c6('0xd')]);router['get']('/:id/fields',auth['isAuthenticated'](),controller[_0xe0c6('0xe')]);router[_0xe0c6('0xf')]('/',auth[_0xe0c6('0xa')](),controller[_0xe0c6('0x10')]);router[_0xe0c6('0xf')](_0xe0c6('0x11'),auth['isAuthenticated'](),controller['addConfiguration']);router[_0xe0c6('0x12')](_0xe0c6('0x13'),auth[_0xe0c6('0xa')](),controller[_0xe0c6('0x14')]);router[_0xe0c6('0x15')](_0xe0c6('0x13'),auth[_0xe0c6('0xa')](),controller[_0xe0c6('0x16')]);module[_0xe0c6('0x17')]=router;
\ No newline at end of file
index 5b1a888..fafd0fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2f1a=['integrationTab','sequelize','exports','STRING','username','ENUM','newTab'];(function(_0x413feb,_0x10477f){var _0x40ee88=function(_0x32a3f6){while(--_0x32a3f6){_0x413feb['push'](_0x413feb['shift']());}};_0x40ee88(++_0x10477f);}(_0x2f1a,0x1ba));var _0xa2f1=function(_0x5bfa38,_0x5b4769){_0x5bfa38=_0x5bfa38-0x0;var _0x56ba65=_0x2f1a[_0x5bfa38];return _0x56ba65;};'use strict';var Sequelize=require(_0xa2f1('0x0'));module[_0xa2f1('0x1')]={'name':{'type':Sequelize[_0xa2f1('0x2')]},'description':{'type':Sequelize[_0xa2f1('0x2')]},'username':{'type':Sequelize[_0xa2f1('0x2')],'unique':_0xa2f1('0x3')},'remoteUri':{'type':Sequelize['STRING']},'password':{'type':Sequelize[_0xa2f1('0x2')]},'clientId':{'type':Sequelize[_0xa2f1('0x2')]},'clientSecret':{'type':Sequelize['STRING']},'securityToken':{'type':Sequelize[_0xa2f1('0x2')]},'serverUrl':{'type':Sequelize[_0xa2f1('0x2')]},'type':{'type':Sequelize[_0xa2f1('0x4')]('integrationTab',_0xa2f1('0x5')),'defaultValue':_0xa2f1('0x6')}};
\ No newline at end of file
+var _0x8172=['STRING','username','ENUM','integrationTab','newTab','sequelize'];(function(_0x145f0e,_0x4c0ffd){var _0x2e41bf=function(_0x380de3){while(--_0x380de3){_0x145f0e['push'](_0x145f0e['shift']());}};_0x2e41bf(++_0x4c0ffd);}(_0x8172,0xad));var _0x2817=function(_0x2a5c9c,_0xe30f1f){_0x2a5c9c=_0x2a5c9c-0x0;var _0x463868=_0x8172[_0x2a5c9c];return _0x463868;};'use strict';var Sequelize=require(_0x2817('0x0'));module['exports']={'name':{'type':Sequelize[_0x2817('0x1')]},'description':{'type':Sequelize[_0x2817('0x1')]},'username':{'type':Sequelize[_0x2817('0x1')],'unique':_0x2817('0x2')},'remoteUri':{'type':Sequelize[_0x2817('0x1')]},'password':{'type':Sequelize[_0x2817('0x1')]},'clientId':{'type':Sequelize[_0x2817('0x1')]},'clientSecret':{'type':Sequelize[_0x2817('0x1')]},'securityToken':{'type':Sequelize['STRING']},'serverUrl':{'type':Sequelize[_0x2817('0x1')]},'type':{'type':Sequelize[_0x2817('0x3')](_0x2817('0x4'),_0x2817('0x5')),'defaultValue':_0x2817('0x4')}};
\ No newline at end of file
index a778b6b..5f53c9d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa40c=['rows','show','params','includeAll','include','find','create','body','update','getConfigurations','findOne','SalesforceConfiguration','map','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','type','SalesforceField','Task','remoteUri','password','securityToken','slice','substring','lastIndexOf','Connection','clientId','clientSecret','login','username','isNil','ticketType','sobject','CallDisposition','CallObject','CallType','IsArchived','Priority','Status','Case','Type','Reason','IsEscalated','remove','custom','picklistValues','label','value','True','true','False','getFields,\x20%s,\x20%s,\x20%s','getFields','send','test','Wrong\x20credentials','statusCode','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','to-csv','ejs','lodash','squel','crypto','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','request','info','SalesforceAccount,\x20%s,\x20%s','request\x20sent','SalesforceAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','status','end','json','count','Content-Range','apply','reject','save','then','destroy','sendStatus','stack','name','index','SalesforceAccount','rawAttributes','keys','query','filters','intersection','attributes','fields','length','model','hasOwnProperty','nolimit','limit','offset','order','sort','where','pick','merge','key','VIRTUAL','field','filter','options','findAll'];(function(_0x41901c,_0x2f50c6){var _0x26b1e2=function(_0x1ed9f1){while(--_0x1ed9f1){_0x41901c['push'](_0x41901c['shift']());}};_0x26b1e2(++_0x2f50c6);}(_0xa40c,0x14d));var _0xca40=function(_0x534817,_0x55cc0a){_0x534817=_0x534817-0x0;var _0x4e3ecb=_0xa40c[_0x534817];return _0x4e3ecb;};'use strict';var pdf=require(_0xca40('0x0'));var emlformat=require(_0xca40('0x1'));var rimraf=require(_0xca40('0x2'));var zipdir=require(_0xca40('0x3'));var jsonpatch=require(_0xca40('0x4'));var rp=require(_0xca40('0x5'));var moment=require(_0xca40('0x6'));var BPromise=require(_0xca40('0x7'));var Mustache=require(_0xca40('0x8'));var util=require(_0xca40('0x9'));var path=require('path');var sox=require('sox');var csv=require(_0xca40('0xa'));var ejs=require(_0xca40('0xb'));var fs=require('fs');var _=require(_0xca40('0xc'));var squel=require(_0xca40('0xd'));var crypto=require(_0xca40('0xe'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xca40('0xa'));var querystring=require(_0xca40('0xf'));var Papa=require(_0xca40('0x10'));var authService=require('../../components/auth/service');var hardwareService=require(_0xca40('0x11'));var Redis=require(_0xca40('0x12'));var qs=require(_0xca40('0x13'));var logger=require('../../config/logger')(_0xca40('0x14'));var utils=require(_0xca40('0x15'));var config=require(_0xca40('0x16'));var db=require(_0xca40('0x17'))['db'];var integrations=require(_0xca40('0x18'));var jayson=require(_0xca40('0x19'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x1dd56a,_0x201876,_0x173328,_0x4c3712){return new BPromise(function(_0x10ab36,_0x2d1a1c){var _0x1e88f4=_0x4c3712||client;return _0x1e88f4[_0xca40('0x1a')](_0x1dd56a,_0x173328)['then'](function(_0x46b11d){logger[_0xca40('0x1b')](_0xca40('0x1c'),_0x201876,_0xca40('0x1d'));logger['debug'](_0xca40('0x1e'),_0x201876,_0xca40('0x1d'),JSON[_0xca40('0x1f')](_0x46b11d));if(_0x46b11d[_0xca40('0x20')]){if(_0x46b11d['error']['code']===0x1f4){logger[_0xca40('0x20')](_0xca40('0x1c'),_0x201876,_0x46b11d['error'][_0xca40('0x21')]);return _0x2d1a1c(_0x46b11d[_0xca40('0x20')]['message']);}logger[_0xca40('0x20')](_0xca40('0x1c'),_0x201876,_0x46b11d['error'][_0xca40('0x21')]);return _0x10ab36(_0x46b11d['error'][_0xca40('0x21')]);}else{logger[_0xca40('0x1b')](_0xca40('0x1c'),_0x201876,'request\x20sent');_0x10ab36(_0x46b11d[_0xca40('0x22')][_0xca40('0x21')]);}})[_0xca40('0x23')](function(_0x34b7ee){logger[_0xca40('0x20')](_0xca40('0x1c'),_0x201876,_0x34b7ee);_0x2d1a1c(_0x34b7ee);});});}function respondWithStatusCode(_0x15e12c,_0x4f0ac5){_0x4f0ac5=_0x4f0ac5||0xcc;return function(_0x5ae3e0){if(_0x5ae3e0){return _0x15e12c['sendStatus'](_0x4f0ac5);}return _0x15e12c[_0xca40('0x24')](_0x4f0ac5)[_0xca40('0x25')]();};}function respondWithResult(_0x49fa21,_0x2c145e){_0x2c145e=_0x2c145e||0xc8;return function(_0x3e3597){if(_0x3e3597){return _0x49fa21[_0xca40('0x24')](_0x2c145e)[_0xca40('0x26')](_0x3e3597);}};}function respondWithFilteredResult(_0x4f8497,_0x2400dd){return function(_0x3bc52a){if(_0x3bc52a){var _0x1c560a=_0x3bc52a[_0xca40('0x27')],_0x5db477=_0x2400dd['offset'],_0x4678ed=_0x2400dd['offset']+_0x2400dd['limit'],_0x3fac20;if(_0x4678ed>=_0x1c560a){_0x4678ed=_0x1c560a;_0x3fac20=0xc8;}else{_0x3fac20=0xce;}_0x4f8497[_0xca40('0x24')](_0x3fac20);return _0x4f8497['set'](_0xca40('0x28'),_0x5db477+'-'+_0x4678ed+'/'+_0x1c560a)[_0xca40('0x26')](_0x3bc52a);}return null;};}function patchUpdates(_0x3ad318){return function(_0x496b16){try{jsonpatch[_0xca40('0x29')](_0x496b16,_0x3ad318,!![]);}catch(_0x54b32a){return BPromise[_0xca40('0x2a')](_0x54b32a);}return _0x496b16[_0xca40('0x2b')]();};}function saveUpdates(_0x715167,_0x364957){return function(_0x2e051a){if(_0x2e051a){return _0x2e051a['update'](_0x715167)[_0xca40('0x2c')](function(_0x568f1c){return _0x568f1c;});}return null;};}function removeEntity(_0x58bc16,_0x36aebf){return function(_0x5901ab){if(_0x5901ab){return _0x5901ab[_0xca40('0x2d')]()[_0xca40('0x2c')](function(){_0x58bc16[_0xca40('0x24')](0xcc)[_0xca40('0x25')]();});}};}function handleEntityNotFound(_0x180c12,_0x151514){return function(_0x52a1ea){if(!_0x52a1ea){_0x180c12[_0xca40('0x2e')](0x194);}return _0x52a1ea;};}function handleError(_0x4f1565,_0x213d25){_0x213d25=_0x213d25||0x1f4;return function(_0x3ee89c){logger[_0xca40('0x20')](_0x3ee89c[_0xca40('0x2f')]);if(_0x3ee89c[_0xca40('0x30')]){delete _0x3ee89c['name'];}_0x4f1565[_0xca40('0x24')](_0x213d25)['send'](_0x3ee89c);};}exports[_0xca40('0x31')]=function(_0x2f0951,_0xbce716){var _0x43daef={},_0x551354={},_0x47d950={'count':0x0,'rows':[]};var _0x20b0e8=db[_0xca40('0x32')][_0xca40('0x33')];_0x551354['model']=_[_0xca40('0x34')](_0x20b0e8);_0x551354[_0xca40('0x35')]=_[_0xca40('0x34')](_0x2f0951['query']);_0x551354[_0xca40('0x36')]=_[_0xca40('0x37')](_0x551354['model'],_0x551354[_0xca40('0x35')]);_0x43daef[_0xca40('0x38')]=_['intersection'](_0x551354['model'],qs['fields'](_0x2f0951[_0xca40('0x35')][_0xca40('0x39')]));_0x43daef[_0xca40('0x38')]=_0x43daef[_0xca40('0x38')][_0xca40('0x3a')]?_0x43daef[_0xca40('0x38')]:_0x551354[_0xca40('0x3b')];if(!_0x2f0951[_0xca40('0x35')][_0xca40('0x3c')](_0xca40('0x3d'))){_0x43daef[_0xca40('0x3e')]=qs[_0xca40('0x3e')](_0x2f0951[_0xca40('0x35')][_0xca40('0x3e')]);_0x43daef[_0xca40('0x3f')]=qs[_0xca40('0x3f')](_0x2f0951[_0xca40('0x35')][_0xca40('0x3f')]);}_0x43daef[_0xca40('0x40')]=qs[_0xca40('0x41')](_0x2f0951[_0xca40('0x35')][_0xca40('0x41')]);_0x43daef[_0xca40('0x42')]=qs[_0xca40('0x36')](_[_0xca40('0x43')](_0x2f0951['query'],_0x551354[_0xca40('0x36')]));if(_0x2f0951[_0xca40('0x35')]['filter']){_0x43daef[_0xca40('0x42')]=_[_0xca40('0x44')](_0x43daef[_0xca40('0x42')],{'$or':_['map'](_0x20b0e8,function(_0x4b274e){if(_0x4b274e['type'][_0xca40('0x45')]!==_0xca40('0x46')){var _0x4b1d12={};_0x4b1d12[_0x4b274e[_0xca40('0x47')]]={'$like':'%'+_0x2f0951['query'][_0xca40('0x48')]+'%'};return _0x4b1d12;}})});}_0x43daef=_['merge']({},_0x43daef,_0x2f0951[_0xca40('0x49')]);var _0x497380={'where':_0x43daef[_0xca40('0x42')]};return db[_0xca40('0x32')][_0xca40('0x27')](_0x497380)['then'](function(_0x42e604){_0x47d950[_0xca40('0x27')]=_0x42e604;if(_0x2f0951[_0xca40('0x35')]['includeAll']){_0x43daef['include']=[{'all':!![]}];}return db[_0xca40('0x32')][_0xca40('0x4a')](_0x43daef);})[_0xca40('0x2c')](function(_0x2a19fa){_0x47d950[_0xca40('0x4b')]=_0x2a19fa;return _0x47d950;})[_0xca40('0x2c')](respondWithFilteredResult(_0xbce716,_0x43daef))['catch'](handleError(_0xbce716,null));};exports[_0xca40('0x4c')]=function(_0x2c4219,_0x581233){var _0x3e2110={'raw':![],'where':{'id':_0x2c4219[_0xca40('0x4d')]['id']}},_0x57d3a1={};_0x57d3a1[_0xca40('0x3b')]=_[_0xca40('0x34')](db['SalesforceAccount'][_0xca40('0x33')]);_0x57d3a1[_0xca40('0x35')]=_['keys'](_0x2c4219[_0xca40('0x35')]);_0x57d3a1['filters']=_[_0xca40('0x37')](_0x57d3a1[_0xca40('0x3b')],_0x57d3a1['query']);_0x3e2110[_0xca40('0x38')]=_[_0xca40('0x37')](_0x57d3a1['model'],qs[_0xca40('0x39')](_0x2c4219[_0xca40('0x35')]['fields']));_0x3e2110[_0xca40('0x38')]=_0x3e2110[_0xca40('0x38')][_0xca40('0x3a')]?_0x3e2110[_0xca40('0x38')]:_0x57d3a1[_0xca40('0x3b')];if(_0x2c4219[_0xca40('0x35')][_0xca40('0x4e')]){_0x3e2110[_0xca40('0x4f')]=[{'all':!![]}];}_0x3e2110=_[_0xca40('0x44')]({},_0x3e2110,_0x2c4219[_0xca40('0x49')]);return db[_0xca40('0x32')][_0xca40('0x50')](_0x3e2110)[_0xca40('0x2c')](handleEntityNotFound(_0x581233,null))['then'](respondWithResult(_0x581233,null))[_0xca40('0x23')](handleError(_0x581233,null));};exports[_0xca40('0x51')]=function(_0x1f7b8c,_0x96b068){return db[_0xca40('0x32')][_0xca40('0x51')](_0x1f7b8c[_0xca40('0x52')],{})['then'](respondWithResult(_0x96b068,0xc9))[_0xca40('0x23')](handleError(_0x96b068,null));};exports[_0xca40('0x53')]=function(_0x4c2a2f,_0x37358f){if(_0x4c2a2f['body']['id']){delete _0x4c2a2f['body']['id'];}return db[_0xca40('0x32')][_0xca40('0x50')]({'where':{'id':_0x4c2a2f['params']['id']}})[_0xca40('0x2c')](handleEntityNotFound(_0x37358f,null))[_0xca40('0x2c')](saveUpdates(_0x4c2a2f[_0xca40('0x52')],null))[_0xca40('0x2c')](respondWithResult(_0x37358f,null))[_0xca40('0x23')](handleError(_0x37358f,null));};exports[_0xca40('0x2d')]=function(_0x33eb94,_0x25da13){return db[_0xca40('0x32')][_0xca40('0x50')]({'where':{'id':_0x33eb94[_0xca40('0x4d')]['id']}})[_0xca40('0x2c')](handleEntityNotFound(_0x25da13,null))['then'](removeEntity(_0x25da13,null))['catch'](handleError(_0x25da13,null));};exports[_0xca40('0x54')]=function(_0x1e1fa4,_0x51b653,_0x16e1e1){var _0x4b01fc={};var _0x4ce496={};var _0x34e272;var _0x39274c;return db[_0xca40('0x32')][_0xca40('0x55')]({'where':{'id':_0x1e1fa4[_0xca40('0x4d')]['id']}})[_0xca40('0x2c')](handleEntityNotFound(_0x51b653,null))[_0xca40('0x2c')](function(_0x203c33){if(_0x203c33){_0x34e272=_0x203c33;_0x4ce496[_0xca40('0x3b')]=_[_0xca40('0x34')](db[_0xca40('0x56')][_0xca40('0x33')]);_0x4ce496[_0xca40('0x35')]=_[_0xca40('0x34')](_0x1e1fa4['query']);_0x4ce496[_0xca40('0x36')]=_[_0xca40('0x37')](_0x4ce496[_0xca40('0x3b')],_0x4ce496[_0xca40('0x35')]);_0x4b01fc[_0xca40('0x38')]=_[_0xca40('0x37')](_0x4ce496['model'],qs[_0xca40('0x39')](_0x1e1fa4[_0xca40('0x35')][_0xca40('0x39')]));_0x4b01fc[_0xca40('0x38')]=_0x4b01fc['attributes'][_0xca40('0x3a')]?_0x4b01fc[_0xca40('0x38')]:_0x4ce496[_0xca40('0x3b')];_0x4b01fc['order']=qs[_0xca40('0x41')](_0x1e1fa4[_0xca40('0x35')][_0xca40('0x41')]);_0x4b01fc[_0xca40('0x42')]=qs[_0xca40('0x36')](_[_0xca40('0x43')](_0x1e1fa4[_0xca40('0x35')],_0x4ce496[_0xca40('0x36')]));if(_0x1e1fa4[_0xca40('0x35')][_0xca40('0x48')]){_0x4b01fc[_0xca40('0x42')]=_[_0xca40('0x44')](_0x4b01fc[_0xca40('0x42')],{'$or':_[_0xca40('0x57')](_0x4b01fc[_0xca40('0x38')],function(_0x2a803e){var _0x18a31c={};_0x18a31c[_0x2a803e]={'$like':'%'+_0x1e1fa4[_0xca40('0x35')][_0xca40('0x48')]+'%'};return _0x18a31c;})});}_0x4b01fc=_['merge']({},_0x4b01fc,_0x1e1fa4[_0xca40('0x49')]);return _0x34e272[_0xca40('0x54')](_0x4b01fc);}})[_0xca40('0x2c')](function(_0x1911da){if(_0x1911da){_0x39274c=_0x1911da[_0xca40('0x3a')];if(!_0x1e1fa4[_0xca40('0x35')]['hasOwnProperty'](_0xca40('0x3d'))){_0x4b01fc[_0xca40('0x3e')]=qs['limit'](_0x1e1fa4['query'][_0xca40('0x3e')]);_0x4b01fc[_0xca40('0x3f')]=qs[_0xca40('0x3f')](_0x1e1fa4[_0xca40('0x35')][_0xca40('0x3f')]);}return _0x34e272['getConfigurations'](_0x4b01fc);}})['then'](function(_0x4600be){if(_0x4600be){return _0x4600be?{'count':_0x39274c,'rows':_0x4600be}:null;}})[_0xca40('0x2c')](respondWithResult(_0x51b653,null))['catch'](handleError(_0x51b653,null));};exports[_0xca40('0x58')]=function(_0x54b360,_0x490a87,_0xed70ad){if(_0x54b360[_0xca40('0x52')]['id']){delete _0x54b360['body']['id'];}return db[_0xca40('0x32')][_0xca40('0x55')]({'where':{'id':_0x54b360['params']['id']}})[_0xca40('0x2c')](handleEntityNotFound(_0x490a87,null))[_0xca40('0x2c')](function(_0x151a7f){if(_0x151a7f){_0x54b360['body'][_0xca40('0x59')]=_0x151a7f['id'];_0x54b360['body'][_0xca40('0x5a')]=integrations[_0xca40('0x5b')](_0x54b360[_0xca40('0x52')][_0xca40('0x5c')],_0x54b360[_0xca40('0x52')]['type']);_0x54b360[_0xca40('0x52')][_0xca40('0x5d')]=integrations[_0xca40('0x5e')](_0x54b360[_0xca40('0x52')][_0xca40('0x5c')],_0x54b360[_0xca40('0x52')][_0xca40('0x5f')]);return db[_0xca40('0x56')][_0xca40('0x51')](_0x54b360[_0xca40('0x52')],{'include':[{'model':db[_0xca40('0x60')],'as':_0xca40('0x5a')},{'model':db[_0xca40('0x60')],'as':_0xca40('0x5d')}]});}return null;})[_0xca40('0x2c')](respondWithResult(_0x490a87,null))['catch'](handleError(_0x490a87,null));};exports['getFields']=function(_0xe48423,_0x502fe9,_0x1f4fd5){var _0x5e11aa;var _0x3605fc='';var _0x2b1c01=_0xca40('0x61');return db[_0xca40('0x32')][_0xca40('0x55')]({'where':{'id':_0xe48423['params']['id']},'attributes':['id',_0xca40('0x62'),'clientId','clientSecret','username',_0xca40('0x63'),_0xca40('0x64')]})[_0xca40('0x2c')](handleEntityNotFound(_0x502fe9,null))[_0xca40('0x2c')](function(_0x572288){if(_0x572288){_0x3605fc=_0x572288[_0xca40('0x62')];var _0x3b6240=_0x3605fc[_0xca40('0x65')](-0x1);if(_0x3b6240==='/'){_0x3605fc=_0x3605fc[_0xca40('0x66')](0x0,_0x3605fc[_0xca40('0x67')](_0x3b6240));}_0x5e11aa=new jsforce[(_0xca40('0x68'))]({'oauth2':{'loginUrl':_0x3605fc,'clientId':_0x572288[_0xca40('0x69')],'clientSecret':_0x572288[_0xca40('0x6a')]}});return _0x5e11aa[_0xca40('0x6b')](_0x572288[_0xca40('0x6c')],_0x572288['password']['concat'](_0x572288[_0xca40('0x64')]));}})[_0xca40('0x2c')](function(_0x73301){if(_0x73301){if(!_[_0xca40('0x6d')](_0xe48423[_0xca40('0x35')][_0xca40('0x6e')])){_0x2b1c01=_0xe48423[_0xca40('0x35')][_0xca40('0x6e')];}return _0x5e11aa[_0xca40('0x6f')](_0x2b1c01)['describe']();}})[_0xca40('0x2c')](function(_0x4d3933){var _0x193084=[_0xca40('0x70'),'CallDurationInSeconds',_0xca40('0x71'),_0xca40('0x72'),_0xca40('0x73'),_0xca40('0x74'),_0xca40('0x75'),'Type'];if(!_[_0xca40('0x6d')](_0xe48423[_0xca40('0x35')][_0xca40('0x6e')])&&_0xe48423[_0xca40('0x35')][_0xca40('0x6e')]===_0xca40('0x76')){_0x193084=[_0xca40('0x77'),'Origin',_0xca40('0x78'),_0xca40('0x75'),_0xca40('0x74'),_0xca40('0x79'),'SuppliedName','SuppliedCompany'];}if(_0x4d3933){_[_0xca40('0x7a')](_0x4d3933[_0xca40('0x39')],function(_0x4f1823){return _0x4f1823['custom']===![]&&!_0x193084['includes'](_0x4f1823[_0xca40('0x30')]);});return{'count':_0x4d3933[_0xca40('0x39')][_0xca40('0x3a')],'rows':_['map'](_0x4d3933['fields'],function(_0x5de4ee){return{'id':_0x5de4ee[_0xca40('0x30')],'name':_0x5de4ee['label'],'custom':_0x5de4ee[_0xca40('0x7b')],'options':_0x5de4ee['picklistValues'][_0xca40('0x3a')]>0x0?_[_0xca40('0x57')](_0x5de4ee[_0xca40('0x7c')],function(_0x17344f){return{'name':_0x17344f[_0xca40('0x7d')],'value':_0x17344f[_0xca40('0x7e')]};}):_0x5de4ee['type']=='boolean'?[{'name':_0xca40('0x7f'),'value':_0xca40('0x80')},{'name':_0xca40('0x81'),'value':'false'}]:[]};})};}})[_0xca40('0x2c')](respondWithResult(_0x502fe9,null))[_0xca40('0x23')](function(_0x15cd1d){var _0x38e7d4=_0xe48423[_0xca40('0x35')]['test']?0x1f4:_0x15cd1d['statusCode']||0x1f4;logger[_0xca40('0x20')](_0xca40('0x82'),_0xca40('0x83'),_0x38e7d4,JSON[_0xca40('0x1f')](_0x15cd1d));delete _0x15cd1d['name'];if(_0x38e7d4===0x191){_0x38e7d4=0x190;}_0x502fe9[_0xca40('0x24')](_0x38e7d4)[_0xca40('0x84')](_0xe48423[_0xca40('0x35')][_0xca40('0x85')]?{'message':_0xca40('0x86'),'statusCode':_0x15cd1d[_0xca40('0x87')]}:_0x15cd1d);});};
\ No newline at end of file
+var _0x3823=['IsArchived','Priority','Status','Type','Case','Origin','IsEscalated','SuppliedName','SuppliedCompany','remove','custom','picklistValues','label','boolean','True','true','false','test','Wrong\x20credentials','statusCode','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','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','request','then','request\x20sent','debug','stringify','code','error','SalesforceAccount,\x20%s,\x20%s','message','result','catch','status','end','json','count','offset','Content-Range','apply','reject','save','update','destroy','sendStatus','stack','name','send','index','SalesforceAccount','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','limit','order','sort','where','pick','filter','merge','key','field','options','includeAll','include','findAll','rows','show','params','length','find','create','body','getConfigurations','findOne','SalesforceConfiguration','map','nolimit','addConfiguration','Subjects','channel','type','Descriptions','getDescriptions','SalesforceField','Task','remoteUri','clientId','clientSecret','username','password','securityToken','slice','substring','lastIndexOf','Connection','login','concat','isNil','ticketType','sobject','describe','CallDurationInSeconds'];(function(_0x5e82c2,_0xfb3d6f){var _0x3ae94a=function(_0x15fdf9){while(--_0x15fdf9){_0x5e82c2['push'](_0x5e82c2['shift']());}};_0x3ae94a(++_0xfb3d6f);}(_0x3823,0x9c));var _0x3382=function(_0x46c396,_0x55335f){_0x46c396=_0x46c396-0x0;var _0x114326=_0x3823[_0x46c396];return _0x114326;};'use strict';var pdf=require(_0x3382('0x0'));var emlformat=require(_0x3382('0x1'));var rimraf=require(_0x3382('0x2'));var zipdir=require(_0x3382('0x3'));var jsonpatch=require(_0x3382('0x4'));var rp=require(_0x3382('0x5'));var moment=require(_0x3382('0x6'));var BPromise=require(_0x3382('0x7'));var Mustache=require(_0x3382('0x8'));var util=require(_0x3382('0x9'));var path=require(_0x3382('0xa'));var sox=require(_0x3382('0xb'));var csv=require(_0x3382('0xc'));var ejs=require(_0x3382('0xd'));var fs=require('fs');var _=require(_0x3382('0xe'));var squel=require(_0x3382('0xf'));var crypto=require(_0x3382('0x10'));var jsforce=require(_0x3382('0x11'));var deskjs=require('desk.js');var toCsv=require(_0x3382('0xc'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x3382('0x12'));var hardwareService=require(_0x3382('0x13'));var Redis=require('ioredis');var qs=require(_0x3382('0x14'));var logger=require(_0x3382('0x15'))(_0x3382('0x16'));var utils=require('../../config/utils');var config=require(_0x3382('0x17'));var db=require(_0x3382('0x18'))['db'];var integrations=require(_0x3382('0x19'));var jayson=require(_0x3382('0x1a'));var client=jayson[_0x3382('0x1b')][_0x3382('0x1c')]({'port':0x232a});function respondWithRpcPromise(_0x4c422a,_0x285c9a,_0x163727,_0x509820){return new BPromise(function(_0x100ddb,_0x4e0c45){var _0xd012c=_0x509820||client;return _0xd012c[_0x3382('0x1d')](_0x4c422a,_0x163727)[_0x3382('0x1e')](function(_0x46d0b1){logger['info']('SalesforceAccount,\x20%s,\x20%s',_0x285c9a,_0x3382('0x1f'));logger[_0x3382('0x20')]('SalesforceAccount,\x20%s,\x20%s,\x20%s',_0x285c9a,_0x3382('0x1f'),JSON[_0x3382('0x21')](_0x46d0b1));if(_0x46d0b1['error']){if(_0x46d0b1['error'][_0x3382('0x22')]===0x1f4){logger[_0x3382('0x23')](_0x3382('0x24'),_0x285c9a,_0x46d0b1['error'][_0x3382('0x25')]);return _0x4e0c45(_0x46d0b1[_0x3382('0x23')][_0x3382('0x25')]);}logger['error'](_0x3382('0x24'),_0x285c9a,_0x46d0b1[_0x3382('0x23')][_0x3382('0x25')]);return _0x100ddb(_0x46d0b1[_0x3382('0x23')]['message']);}else{logger['info'](_0x3382('0x24'),_0x285c9a,_0x3382('0x1f'));_0x100ddb(_0x46d0b1[_0x3382('0x26')][_0x3382('0x25')]);}})[_0x3382('0x27')](function(_0x1f70d1){logger[_0x3382('0x23')](_0x3382('0x24'),_0x285c9a,_0x1f70d1);_0x4e0c45(_0x1f70d1);});});}function respondWithStatusCode(_0xc7e80f,_0x3e07f5){_0x3e07f5=_0x3e07f5||0xcc;return function(_0x210799){if(_0x210799){return _0xc7e80f['sendStatus'](_0x3e07f5);}return _0xc7e80f[_0x3382('0x28')](_0x3e07f5)[_0x3382('0x29')]();};}function respondWithResult(_0xe70911,_0x1c7845){_0x1c7845=_0x1c7845||0xc8;return function(_0x39a6eb){if(_0x39a6eb){return _0xe70911[_0x3382('0x28')](_0x1c7845)[_0x3382('0x2a')](_0x39a6eb);}};}function respondWithFilteredResult(_0x3226c1,_0x3a30c0){return function(_0x2c605e){if(_0x2c605e){var _0x57abeb=_0x2c605e[_0x3382('0x2b')],_0xd9310d=_0x3a30c0[_0x3382('0x2c')],_0x5efc50=_0x3a30c0[_0x3382('0x2c')]+_0x3a30c0['limit'],_0x320e35;if(_0x5efc50>=_0x57abeb){_0x5efc50=_0x57abeb;_0x320e35=0xc8;}else{_0x320e35=0xce;}_0x3226c1['status'](_0x320e35);return _0x3226c1['set'](_0x3382('0x2d'),_0xd9310d+'-'+_0x5efc50+'/'+_0x57abeb)[_0x3382('0x2a')](_0x2c605e);}return null;};}function patchUpdates(_0x50a7c6){return function(_0x440c82){try{jsonpatch[_0x3382('0x2e')](_0x440c82,_0x50a7c6,!![]);}catch(_0x2a821f){return BPromise[_0x3382('0x2f')](_0x2a821f);}return _0x440c82[_0x3382('0x30')]();};}function saveUpdates(_0x57084a,_0x3971a2){return function(_0x270892){if(_0x270892){return _0x270892[_0x3382('0x31')](_0x57084a)[_0x3382('0x1e')](function(_0x13cd6a){return _0x13cd6a;});}return null;};}function removeEntity(_0x1f378f,_0x55b5de){return function(_0x5511d0){if(_0x5511d0){return _0x5511d0[_0x3382('0x32')]()[_0x3382('0x1e')](function(){_0x1f378f[_0x3382('0x28')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4b57b9,_0x327ee0){return function(_0x419974){if(!_0x419974){_0x4b57b9[_0x3382('0x33')](0x194);}return _0x419974;};}function handleError(_0x29df41,_0x370b4c){_0x370b4c=_0x370b4c||0x1f4;return function(_0x44b497){logger[_0x3382('0x23')](_0x44b497[_0x3382('0x34')]);if(_0x44b497[_0x3382('0x35')]){delete _0x44b497['name'];}_0x29df41[_0x3382('0x28')](_0x370b4c)[_0x3382('0x36')](_0x44b497);};}exports[_0x3382('0x37')]=function(_0x12ade0,_0x5dd951){var _0x4b7c52={},_0x5ed249={},_0x3eed3d={'count':0x0,'rows':[]};var _0x21d044=db[_0x3382('0x38')][_0x3382('0x39')];_0x5ed249[_0x3382('0x3a')]=_['keys'](_0x21d044);_0x5ed249['query']=_[_0x3382('0x3b')](_0x12ade0[_0x3382('0x3c')]);_0x5ed249[_0x3382('0x3d')]=_[_0x3382('0x3e')](_0x5ed249[_0x3382('0x3a')],_0x5ed249[_0x3382('0x3c')]);_0x4b7c52['attributes']=_[_0x3382('0x3e')](_0x5ed249['model'],qs[_0x3382('0x3f')](_0x12ade0[_0x3382('0x3c')][_0x3382('0x3f')]));_0x4b7c52[_0x3382('0x40')]=_0x4b7c52[_0x3382('0x40')]['length']?_0x4b7c52[_0x3382('0x40')]:_0x5ed249[_0x3382('0x3a')];if(!_0x12ade0['query'][_0x3382('0x41')]('nolimit')){_0x4b7c52[_0x3382('0x42')]=qs['limit'](_0x12ade0[_0x3382('0x3c')][_0x3382('0x42')]);_0x4b7c52[_0x3382('0x2c')]=qs[_0x3382('0x2c')](_0x12ade0['query']['offset']);}_0x4b7c52[_0x3382('0x43')]=qs[_0x3382('0x44')](_0x12ade0[_0x3382('0x3c')][_0x3382('0x44')]);_0x4b7c52[_0x3382('0x45')]=qs[_0x3382('0x3d')](_[_0x3382('0x46')](_0x12ade0[_0x3382('0x3c')],_0x5ed249[_0x3382('0x3d')]));if(_0x12ade0['query'][_0x3382('0x47')]){_0x4b7c52['where']=_[_0x3382('0x48')](_0x4b7c52[_0x3382('0x45')],{'$or':_['map'](_0x21d044,function(_0x8335f9){if(_0x8335f9['type'][_0x3382('0x49')]!=='VIRTUAL'){var _0x4c17f7={};_0x4c17f7[_0x8335f9[_0x3382('0x4a')]]={'$like':'%'+_0x12ade0[_0x3382('0x3c')][_0x3382('0x47')]+'%'};return _0x4c17f7;}})});}_0x4b7c52=_['merge']({},_0x4b7c52,_0x12ade0[_0x3382('0x4b')]);var _0x2d6afa={'where':_0x4b7c52['where']};return db['SalesforceAccount'][_0x3382('0x2b')](_0x2d6afa)[_0x3382('0x1e')](function(_0x43ee37){_0x3eed3d[_0x3382('0x2b')]=_0x43ee37;if(_0x12ade0[_0x3382('0x3c')][_0x3382('0x4c')]){_0x4b7c52[_0x3382('0x4d')]=[{'all':!![]}];}return db[_0x3382('0x38')][_0x3382('0x4e')](_0x4b7c52);})[_0x3382('0x1e')](function(_0x1caa1c){_0x3eed3d[_0x3382('0x4f')]=_0x1caa1c;return _0x3eed3d;})[_0x3382('0x1e')](respondWithFilteredResult(_0x5dd951,_0x4b7c52))[_0x3382('0x27')](handleError(_0x5dd951,null));};exports[_0x3382('0x50')]=function(_0x1f42e0,_0x185fbb){var _0x1a01ee={'raw':![],'where':{'id':_0x1f42e0[_0x3382('0x51')]['id']}},_0x51f37f={};_0x51f37f[_0x3382('0x3a')]=_['keys'](db[_0x3382('0x38')][_0x3382('0x39')]);_0x51f37f[_0x3382('0x3c')]=_[_0x3382('0x3b')](_0x1f42e0[_0x3382('0x3c')]);_0x51f37f[_0x3382('0x3d')]=_[_0x3382('0x3e')](_0x51f37f[_0x3382('0x3a')],_0x51f37f[_0x3382('0x3c')]);_0x1a01ee[_0x3382('0x40')]=_[_0x3382('0x3e')](_0x51f37f[_0x3382('0x3a')],qs[_0x3382('0x3f')](_0x1f42e0[_0x3382('0x3c')][_0x3382('0x3f')]));_0x1a01ee['attributes']=_0x1a01ee[_0x3382('0x40')][_0x3382('0x52')]?_0x1a01ee['attributes']:_0x51f37f[_0x3382('0x3a')];if(_0x1f42e0[_0x3382('0x3c')][_0x3382('0x4c')]){_0x1a01ee[_0x3382('0x4d')]=[{'all':!![]}];}_0x1a01ee=_['merge']({},_0x1a01ee,_0x1f42e0[_0x3382('0x4b')]);return db[_0x3382('0x38')][_0x3382('0x53')](_0x1a01ee)[_0x3382('0x1e')](handleEntityNotFound(_0x185fbb,null))[_0x3382('0x1e')](respondWithResult(_0x185fbb,null))[_0x3382('0x27')](handleError(_0x185fbb,null));};exports[_0x3382('0x54')]=function(_0xa354f6,_0x5899fe){return db['SalesforceAccount'][_0x3382('0x54')](_0xa354f6['body'],{})[_0x3382('0x1e')](respondWithResult(_0x5899fe,0xc9))[_0x3382('0x27')](handleError(_0x5899fe,null));};exports[_0x3382('0x31')]=function(_0x1684c8,_0x434b0b){if(_0x1684c8[_0x3382('0x55')]['id']){delete _0x1684c8[_0x3382('0x55')]['id'];}return db[_0x3382('0x38')][_0x3382('0x53')]({'where':{'id':_0x1684c8[_0x3382('0x51')]['id']}})[_0x3382('0x1e')](handleEntityNotFound(_0x434b0b,null))['then'](saveUpdates(_0x1684c8[_0x3382('0x55')],null))[_0x3382('0x1e')](respondWithResult(_0x434b0b,null))[_0x3382('0x27')](handleError(_0x434b0b,null));};exports[_0x3382('0x32')]=function(_0x505b51,_0x3ba448){return db[_0x3382('0x38')][_0x3382('0x53')]({'where':{'id':_0x505b51[_0x3382('0x51')]['id']}})['then'](handleEntityNotFound(_0x3ba448,null))[_0x3382('0x1e')](removeEntity(_0x3ba448,null))['catch'](handleError(_0x3ba448,null));};exports[_0x3382('0x56')]=function(_0x2887c2,_0x29ab1d,_0x5b480b){var _0x46cf19={};var _0x403e66={};var _0x1739dc;var _0x1421e3;return db[_0x3382('0x38')][_0x3382('0x57')]({'where':{'id':_0x2887c2['params']['id']}})[_0x3382('0x1e')](handleEntityNotFound(_0x29ab1d,null))['then'](function(_0x384d79){if(_0x384d79){_0x1739dc=_0x384d79;_0x403e66['model']=_[_0x3382('0x3b')](db[_0x3382('0x58')][_0x3382('0x39')]);_0x403e66[_0x3382('0x3c')]=_[_0x3382('0x3b')](_0x2887c2[_0x3382('0x3c')]);_0x403e66['filters']=_['intersection'](_0x403e66['model'],_0x403e66[_0x3382('0x3c')]);_0x46cf19['attributes']=_[_0x3382('0x3e')](_0x403e66[_0x3382('0x3a')],qs[_0x3382('0x3f')](_0x2887c2['query'][_0x3382('0x3f')]));_0x46cf19[_0x3382('0x40')]=_0x46cf19[_0x3382('0x40')][_0x3382('0x52')]?_0x46cf19[_0x3382('0x40')]:_0x403e66[_0x3382('0x3a')];_0x46cf19['order']=qs[_0x3382('0x44')](_0x2887c2[_0x3382('0x3c')][_0x3382('0x44')]);_0x46cf19[_0x3382('0x45')]=qs[_0x3382('0x3d')](_[_0x3382('0x46')](_0x2887c2[_0x3382('0x3c')],_0x403e66['filters']));if(_0x2887c2[_0x3382('0x3c')][_0x3382('0x47')]){_0x46cf19['where']=_['merge'](_0x46cf19[_0x3382('0x45')],{'$or':_[_0x3382('0x59')](_0x46cf19[_0x3382('0x40')],function(_0x19e2a0){var _0x45d5b1={};_0x45d5b1[_0x19e2a0]={'$like':'%'+_0x2887c2[_0x3382('0x3c')][_0x3382('0x47')]+'%'};return _0x45d5b1;})});}_0x46cf19=_[_0x3382('0x48')]({},_0x46cf19,_0x2887c2[_0x3382('0x4b')]);return _0x1739dc[_0x3382('0x56')](_0x46cf19);}})[_0x3382('0x1e')](function(_0x4a0cfe){if(_0x4a0cfe){_0x1421e3=_0x4a0cfe[_0x3382('0x52')];if(!_0x2887c2['query'][_0x3382('0x41')](_0x3382('0x5a'))){_0x46cf19[_0x3382('0x42')]=qs[_0x3382('0x42')](_0x2887c2[_0x3382('0x3c')][_0x3382('0x42')]);_0x46cf19[_0x3382('0x2c')]=qs[_0x3382('0x2c')](_0x2887c2[_0x3382('0x3c')][_0x3382('0x2c')]);}return _0x1739dc[_0x3382('0x56')](_0x46cf19);}})[_0x3382('0x1e')](function(_0xbf85f){if(_0xbf85f){return _0xbf85f?{'count':_0x1421e3,'rows':_0xbf85f}:null;}})[_0x3382('0x1e')](respondWithResult(_0x29ab1d,null))[_0x3382('0x27')](handleError(_0x29ab1d,null));};exports[_0x3382('0x5b')]=function(_0x5b0c7b,_0x3abda7,_0x8bf802){if(_0x5b0c7b['body']['id']){delete _0x5b0c7b[_0x3382('0x55')]['id'];}return db['SalesforceAccount'][_0x3382('0x57')]({'where':{'id':_0x5b0c7b[_0x3382('0x51')]['id']}})[_0x3382('0x1e')](handleEntityNotFound(_0x3abda7,null))[_0x3382('0x1e')](function(_0x5b17fe){if(_0x5b17fe){_0x5b0c7b[_0x3382('0x55')]['AccountId']=_0x5b17fe['id'];_0x5b0c7b[_0x3382('0x55')][_0x3382('0x5c')]=integrations['getSubjects'](_0x5b0c7b[_0x3382('0x55')][_0x3382('0x5d')],_0x5b0c7b[_0x3382('0x55')][_0x3382('0x5e')]);_0x5b0c7b[_0x3382('0x55')][_0x3382('0x5f')]=integrations[_0x3382('0x60')](_0x5b0c7b[_0x3382('0x55')][_0x3382('0x5d')],_0x5b0c7b['body'][_0x3382('0x5e')]);return db[_0x3382('0x58')][_0x3382('0x54')](_0x5b0c7b[_0x3382('0x55')],{'include':[{'model':db[_0x3382('0x61')],'as':_0x3382('0x5c')},{'model':db['SalesforceField'],'as':_0x3382('0x5f')}]});}return null;})[_0x3382('0x1e')](respondWithResult(_0x3abda7,null))[_0x3382('0x27')](handleError(_0x3abda7,null));};exports['getFields']=function(_0x11a973,_0x164045,_0x3df1dd){var _0xf97b7e;var _0x4d0cd4='';var _0xaeda7a=_0x3382('0x62');return db['SalesforceAccount'][_0x3382('0x57')]({'where':{'id':_0x11a973[_0x3382('0x51')]['id']},'attributes':['id',_0x3382('0x63'),_0x3382('0x64'),_0x3382('0x65'),_0x3382('0x66'),_0x3382('0x67'),_0x3382('0x68')]})[_0x3382('0x1e')](handleEntityNotFound(_0x164045,null))[_0x3382('0x1e')](function(_0x37e78d){if(_0x37e78d){_0x4d0cd4=_0x37e78d[_0x3382('0x63')];var _0x33cd5c=_0x4d0cd4[_0x3382('0x69')](-0x1);if(_0x33cd5c==='/'){_0x4d0cd4=_0x4d0cd4[_0x3382('0x6a')](0x0,_0x4d0cd4[_0x3382('0x6b')](_0x33cd5c));}_0xf97b7e=new jsforce[(_0x3382('0x6c'))]({'oauth2':{'loginUrl':_0x4d0cd4,'clientId':_0x37e78d[_0x3382('0x64')],'clientSecret':_0x37e78d[_0x3382('0x65')]}});return _0xf97b7e[_0x3382('0x6d')](_0x37e78d[_0x3382('0x66')],_0x37e78d['password'][_0x3382('0x6e')](_0x37e78d[_0x3382('0x68')]));}})[_0x3382('0x1e')](function(_0x21be07){if(_0x21be07){if(!_[_0x3382('0x6f')](_0x11a973['query'][_0x3382('0x70')])){_0xaeda7a=_0x11a973['query'][_0x3382('0x70')];}return _0xf97b7e[_0x3382('0x71')](_0xaeda7a)[_0x3382('0x72')]();}})['then'](function(_0x26cd1e){var _0xe4066a=['CallDisposition',_0x3382('0x73'),'CallObject','CallType',_0x3382('0x74'),_0x3382('0x75'),_0x3382('0x76'),_0x3382('0x77')];if(!_[_0x3382('0x6f')](_0x11a973[_0x3382('0x3c')][_0x3382('0x70')])&&_0x11a973[_0x3382('0x3c')][_0x3382('0x70')]===_0x3382('0x78')){_0xe4066a=['Type',_0x3382('0x79'),'Reason',_0x3382('0x76'),'Priority',_0x3382('0x7a'),_0x3382('0x7b'),_0x3382('0x7c')];}if(_0x26cd1e){_[_0x3382('0x7d')](_0x26cd1e[_0x3382('0x3f')],function(_0x54ffcf){return _0x54ffcf['custom']===![]&&!_0xe4066a['includes'](_0x54ffcf[_0x3382('0x35')]);});return{'count':_0x26cd1e[_0x3382('0x3f')][_0x3382('0x52')],'rows':_[_0x3382('0x59')](_0x26cd1e['fields'],function(_0x41e7c9){return{'id':_0x41e7c9[_0x3382('0x35')],'name':_0x41e7c9['label'],'custom':_0x41e7c9[_0x3382('0x7e')],'options':_0x41e7c9[_0x3382('0x7f')][_0x3382('0x52')]>0x0?_[_0x3382('0x59')](_0x41e7c9[_0x3382('0x7f')],function(_0x53f1c7){return{'name':_0x53f1c7[_0x3382('0x80')],'value':_0x53f1c7['value']};}):_0x41e7c9[_0x3382('0x5e')]==_0x3382('0x81')?[{'name':_0x3382('0x82'),'value':_0x3382('0x83')},{'name':'False','value':_0x3382('0x84')}]:[]};})};}})['then'](respondWithResult(_0x164045,null))[_0x3382('0x27')](function(_0x4b3e29){var _0x3f871f=_0x11a973[_0x3382('0x3c')][_0x3382('0x85')]?0x1f4:_0x4b3e29['statusCode']||0x1f4;logger[_0x3382('0x23')]('getFields,\x20%s,\x20%s,\x20%s','getFields',_0x3f871f,JSON[_0x3382('0x21')](_0x4b3e29));delete _0x4b3e29[_0x3382('0x35')];if(_0x3f871f===0x191){_0x3f871f=0x190;}_0x164045[_0x3382('0x28')](_0x3f871f)[_0x3382('0x36')](_0x11a973[_0x3382('0x3c')][_0x3382('0x85')]?{'message':_0x3382('0x86'),'statusCode':_0x4b3e29[_0x3382('0x87')]}:_0x4b3e29);});};
\ No newline at end of file
index 242314f..6651be7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x871e=['define','int_salesforce_accounts','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./intSalesforceAccount.attributes','exports'];(function(_0x13ce0c,_0x3f2a0d){var _0x4388fb=function(_0x27db4b){while(--_0x27db4b){_0x13ce0c['push'](_0x13ce0c['shift']());}};_0x4388fb(++_0x3f2a0d);}(_0x871e,0x1ba));var _0xe871=function(_0x26b555,_0x5369ac){_0x26b555=_0x26b555-0x0;var _0x1d6cbd=_0x871e[_0x26b555];return _0x1d6cbd;};'use strict';var _=require(_0xe871('0x0'));var util=require(_0xe871('0x1'));var logger=require(_0xe871('0x2'))(_0xe871('0x3'));var moment=require(_0xe871('0x4'));var BPromise=require(_0xe871('0x5'));var rp=require(_0xe871('0x6'));var attributes=require(_0xe871('0x7'));var integrations=require('../../components/integrations/configuration');module[_0xe871('0x8')]=function(_0xdd144,_0x50953d){return _0xdd144[_0xe871('0x9')]('SalesforceAccount',attributes,{'tableName':_0xe871('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2a8e=['bluebird','request-promise','./intSalesforceAccount.attributes','../../components/integrations/configuration','exports','SalesforceAccount','int_salesforce_accounts','lodash','util','api','moment'];(function(_0x23724f,_0x19e182){var _0x17c793=function(_0x7934bc){while(--_0x7934bc){_0x23724f['push'](_0x23724f['shift']());}};_0x17c793(++_0x19e182);}(_0x2a8e,0x1d5));var _0xe2a8=function(_0x5d7ac7,_0x3af422){_0x5d7ac7=_0x5d7ac7-0x0;var _0x4dd597=_0x2a8e[_0x5d7ac7];return _0x4dd597;};'use strict';var _=require(_0xe2a8('0x0'));var util=require(_0xe2a8('0x1'));var logger=require('../../config/logger')(_0xe2a8('0x2'));var moment=require(_0xe2a8('0x3'));var BPromise=require(_0xe2a8('0x4'));var rp=require(_0xe2a8('0x5'));var attributes=require(_0xe2a8('0x6'));var integrations=require(_0xe2a8('0x7'));module[_0xe2a8('0x8')]=function(_0x4c6c09,_0x14443e){return _0x4c6c09['define'](_0xe2a8('0x9'),attributes,{'tableName':_0xe2a8('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f40a6c9..b1c49ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf6c1=['util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','request\x20sent','debug','SalesforceAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','SalesforceAccount,\x20%s,\x20%s','message','result','catch','GetSalesforceAccount','SalesforceAccount','options','where','attributes','include','map','model','then','find','raw','ShowSalesforceAccount','lodash'];(function(_0x53f384,_0x21bc47){var _0x4ef7bc=function(_0x3ea255){while(--_0x3ea255){_0x53f384['push'](_0x53f384['shift']());}};_0x4ef7bc(++_0x21bc47);}(_0xf6c1,0x18b));var _0x1f6c=function(_0x5e3d50,_0x121cd9){_0x5e3d50=_0x5e3d50-0x0;var _0x14fe16=_0xf6c1[_0x5e3d50];return _0x14fe16;};'use strict';var _=require(_0x1f6c('0x0'));var util=require(_0x1f6c('0x1'));var moment=require(_0x1f6c('0x2'));var BPromise=require('bluebird');var rs=require(_0x1f6c('0x3'));var fs=require('fs');var Redis=require(_0x1f6c('0x4'));var db=require(_0x1f6c('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x1f6c('0x6'))(_0x1f6c('0x7'));var config=require(_0x1f6c('0x8'));var jayson=require(_0x1f6c('0x9'));var client=jayson[_0x1f6c('0xa')][_0x1f6c('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x6f902a,_0x3817f5,_0x58fa18){return new BPromise(function(_0xfab407,_0x523fd9){return client[_0x1f6c('0xc')](_0x6f902a,_0x58fa18)['then'](function(_0x41b5dc){logger[_0x1f6c('0xd')]('SalesforceAccount,\x20%s,\x20%s',_0x3817f5,_0x1f6c('0xe'));logger[_0x1f6c('0xf')](_0x1f6c('0x10'),_0x3817f5,_0x1f6c('0xe'),JSON[_0x1f6c('0x11')](_0x41b5dc));if(_0x41b5dc[_0x1f6c('0x12')]){if(_0x41b5dc['error'][_0x1f6c('0x13')]===0x1f4){logger['error'](_0x1f6c('0x14'),_0x3817f5,_0x41b5dc[_0x1f6c('0x12')]['message']);return _0x523fd9(_0x41b5dc['error'][_0x1f6c('0x15')]);}logger[_0x1f6c('0x12')](_0x1f6c('0x14'),_0x3817f5,_0x41b5dc[_0x1f6c('0x12')]['message']);return _0xfab407(_0x41b5dc[_0x1f6c('0x12')][_0x1f6c('0x15')]);}else{logger[_0x1f6c('0xd')]('SalesforceAccount,\x20%s,\x20%s',_0x3817f5,'request\x20sent');_0xfab407(_0x41b5dc[_0x1f6c('0x16')]['message']);}})[_0x1f6c('0x17')](function(_0x3d3ff5){logger['error']('SalesforceAccount,\x20%s,\x20%s',_0x3817f5,_0x3d3ff5);_0x523fd9(_0x3d3ff5);});});}exports[_0x1f6c('0x18')]=function(_0x4f2b73){var _0x17aba3=this;return new Promise(function(_0xf82525,_0x4204f1){return db[_0x1f6c('0x19')]['findAll']({'raw':_0x4f2b73[_0x1f6c('0x1a')]?_0x4f2b73[_0x1f6c('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x4f2b73[_0x1f6c('0x1a')]?_0x4f2b73[_0x1f6c('0x1a')][_0x1f6c('0x1b')]||null:null,'attributes':_0x4f2b73[_0x1f6c('0x1a')]?_0x4f2b73[_0x1f6c('0x1a')][_0x1f6c('0x1c')]||null:null,'limit':_0x4f2b73[_0x1f6c('0x1a')]?_0x4f2b73[_0x1f6c('0x1a')]['limit']||null:null,'include':_0x4f2b73['options']?_0x4f2b73[_0x1f6c('0x1a')][_0x1f6c('0x1d')]?_[_0x1f6c('0x1e')](_0x4f2b73[_0x1f6c('0x1a')][_0x1f6c('0x1d')],function(_0x514dce){return{'model':db[_0x514dce[_0x1f6c('0x1f')]],'as':_0x514dce['as'],'attributes':_0x514dce[_0x1f6c('0x1c')],'include':_0x514dce[_0x1f6c('0x1d')]?_[_0x1f6c('0x1e')](_0x514dce[_0x1f6c('0x1d')],function(_0x42eadd){return{'model':db[_0x42eadd[_0x1f6c('0x1f')]],'as':_0x42eadd['as'],'attributes':_0x42eadd[_0x1f6c('0x1c')],'include':_0x42eadd[_0x1f6c('0x1d')]?_[_0x1f6c('0x1e')](_0x42eadd[_0x1f6c('0x1d')],function(_0x4afd96){return{'model':db[_0x4afd96[_0x1f6c('0x1f')]],'as':_0x4afd96['as'],'attributes':_0x4afd96[_0x1f6c('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x1f6c('0x20')](function(_0x3fb142){logger[_0x1f6c('0xd')]('GetSalesforceAccount',_0x4f2b73);logger[_0x1f6c('0xf')](_0x1f6c('0x18'),_0x4f2b73,JSON[_0x1f6c('0x11')](_0x3fb142));_0xf82525(_0x3fb142);})['catch'](function(_0x2275d8){logger[_0x1f6c('0x12')](_0x1f6c('0x18'),_0x2275d8['message'],_0x4f2b73);_0x4204f1(_0x17aba3[_0x1f6c('0x12')](0x1f4,_0x2275d8[_0x1f6c('0x15')]));});});};exports['ShowSalesforceAccount']=function(_0x31e99c){var _0xa2c51c=this;return new Promise(function(_0x41fc79,_0x2ef7b0){return db['SalesforceAccount'][_0x1f6c('0x21')]({'raw':_0x31e99c[_0x1f6c('0x1a')]?_0x31e99c[_0x1f6c('0x1a')][_0x1f6c('0x22')]===undefined?!![]:![]:!![],'where':_0x31e99c['options']?_0x31e99c[_0x1f6c('0x1a')][_0x1f6c('0x1b')]||null:null,'attributes':_0x31e99c[_0x1f6c('0x1a')]?_0x31e99c['options'][_0x1f6c('0x1c')]||null:null,'include':_0x31e99c[_0x1f6c('0x1a')]?_0x31e99c[_0x1f6c('0x1a')][_0x1f6c('0x1d')]?_[_0x1f6c('0x1e')](_0x31e99c[_0x1f6c('0x1a')][_0x1f6c('0x1d')],function(_0xec8197){return{'model':db[_0xec8197[_0x1f6c('0x1f')]],'as':_0xec8197['as'],'attributes':_0xec8197[_0x1f6c('0x1c')],'include':_0xec8197[_0x1f6c('0x1d')]?_[_0x1f6c('0x1e')](_0xec8197[_0x1f6c('0x1d')],function(_0xf9ad2b){return{'model':db[_0xf9ad2b['model']],'as':_0xf9ad2b['as'],'attributes':_0xf9ad2b[_0x1f6c('0x1c')],'include':_0xf9ad2b[_0x1f6c('0x1d')]?_[_0x1f6c('0x1e')](_0xf9ad2b[_0x1f6c('0x1d')],function(_0x46583b){return{'model':db[_0x46583b['model']],'as':_0x46583b['as'],'attributes':_0x46583b[_0x1f6c('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x1f6c('0x20')](function(_0x206510){logger[_0x1f6c('0xd')]('ShowSalesforceAccount',_0x31e99c);logger['debug'](_0x1f6c('0x23'),_0x31e99c,JSON['stringify'](_0x206510));_0x41fc79(_0x206510);})[_0x1f6c('0x17')](function(_0x314ad9){logger[_0x1f6c('0x12')](_0x1f6c('0x23'),_0x314ad9[_0x1f6c('0x15')],_0x31e99c);_0x2ef7b0(_0xa2c51c['error'](0x1f4,_0x314ad9[_0x1f6c('0x15')]));});});};
\ No newline at end of file
+var _0x9aa0=['request\x20sent','debug','stringify','code','SalesforceAccount,\x20%s,\x20%s','error','message','result','GetSalesforceAccount','SalesforceAccount','findAll','options','where','attributes','include','map','model','then','catch','ShowSalesforceAccount','find','raw','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','request','info'];(function(_0x2af742,_0x3e98ac){var _0x495ea6=function(_0x27a150){while(--_0x27a150){_0x2af742['push'](_0x2af742['shift']());}};_0x495ea6(++_0x3e98ac);}(_0x9aa0,0xb6));var _0x09aa=function(_0x4709c0,_0x3396c7){_0x4709c0=_0x4709c0-0x0;var _0x13348b=_0x9aa0[_0x4709c0];return _0x13348b;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x09aa('0x0'));var BPromise=require(_0x09aa('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x09aa('0x2'));var db=require(_0x09aa('0x3'))['db'];var utils=require(_0x09aa('0x4'));var logger=require('../../config/logger')(_0x09aa('0x5'));var config=require(_0x09aa('0x6'));var jayson=require(_0x09aa('0x7'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x5dbc85,_0x8e9e61,_0x15380f){return new BPromise(function(_0x5794d9,_0x775425){return client[_0x09aa('0x8')](_0x5dbc85,_0x15380f)['then'](function(_0x449db8){logger[_0x09aa('0x9')]('SalesforceAccount,\x20%s,\x20%s',_0x8e9e61,_0x09aa('0xa'));logger[_0x09aa('0xb')]('SalesforceAccount,\x20%s,\x20%s,\x20%s',_0x8e9e61,_0x09aa('0xa'),JSON[_0x09aa('0xc')](_0x449db8));if(_0x449db8['error']){if(_0x449db8['error'][_0x09aa('0xd')]===0x1f4){logger['error'](_0x09aa('0xe'),_0x8e9e61,_0x449db8[_0x09aa('0xf')][_0x09aa('0x10')]);return _0x775425(_0x449db8['error'][_0x09aa('0x10')]);}logger[_0x09aa('0xf')](_0x09aa('0xe'),_0x8e9e61,_0x449db8[_0x09aa('0xf')][_0x09aa('0x10')]);return _0x5794d9(_0x449db8['error'][_0x09aa('0x10')]);}else{logger[_0x09aa('0x9')]('SalesforceAccount,\x20%s,\x20%s',_0x8e9e61,_0x09aa('0xa'));_0x5794d9(_0x449db8[_0x09aa('0x11')][_0x09aa('0x10')]);}})['catch'](function(_0x13d8b5){logger[_0x09aa('0xf')](_0x09aa('0xe'),_0x8e9e61,_0x13d8b5);_0x775425(_0x13d8b5);});});}exports[_0x09aa('0x12')]=function(_0x98a94e){var _0x56cd7a=this;return new Promise(function(_0x197b03,_0x15b326){return db[_0x09aa('0x13')][_0x09aa('0x14')]({'raw':_0x98a94e['options']?_0x98a94e[_0x09aa('0x15')]['raw']===undefined?!![]:![]:!![],'where':_0x98a94e[_0x09aa('0x15')]?_0x98a94e[_0x09aa('0x15')][_0x09aa('0x16')]||null:null,'attributes':_0x98a94e[_0x09aa('0x15')]?_0x98a94e[_0x09aa('0x15')][_0x09aa('0x17')]||null:null,'limit':_0x98a94e[_0x09aa('0x15')]?_0x98a94e[_0x09aa('0x15')]['limit']||null:null,'include':_0x98a94e[_0x09aa('0x15')]?_0x98a94e[_0x09aa('0x15')][_0x09aa('0x18')]?_['map'](_0x98a94e['options'][_0x09aa('0x18')],function(_0x36fb36){return{'model':db[_0x36fb36['model']],'as':_0x36fb36['as'],'attributes':_0x36fb36[_0x09aa('0x17')],'include':_0x36fb36['include']?_[_0x09aa('0x19')](_0x36fb36['include'],function(_0x1976e6){return{'model':db[_0x1976e6[_0x09aa('0x1a')]],'as':_0x1976e6['as'],'attributes':_0x1976e6[_0x09aa('0x17')],'include':_0x1976e6[_0x09aa('0x18')]?_[_0x09aa('0x19')](_0x1976e6['include'],function(_0x153ac0){return{'model':db[_0x153ac0['model']],'as':_0x153ac0['as'],'attributes':_0x153ac0['attributes']};}):[]};}):[]};}):[]:[]})[_0x09aa('0x1b')](function(_0x437ba0){logger['info'](_0x09aa('0x12'),_0x98a94e);logger[_0x09aa('0xb')](_0x09aa('0x12'),_0x98a94e,JSON[_0x09aa('0xc')](_0x437ba0));_0x197b03(_0x437ba0);})[_0x09aa('0x1c')](function(_0x4aea69){logger['error'](_0x09aa('0x12'),_0x4aea69[_0x09aa('0x10')],_0x98a94e);_0x15b326(_0x56cd7a['error'](0x1f4,_0x4aea69[_0x09aa('0x10')]));});});};exports[_0x09aa('0x1d')]=function(_0x3c316a){var _0x48d479=this;return new Promise(function(_0x48e383,_0x11b253){return db[_0x09aa('0x13')][_0x09aa('0x1e')]({'raw':_0x3c316a[_0x09aa('0x15')]?_0x3c316a[_0x09aa('0x15')][_0x09aa('0x1f')]===undefined?!![]:![]:!![],'where':_0x3c316a[_0x09aa('0x15')]?_0x3c316a[_0x09aa('0x15')][_0x09aa('0x16')]||null:null,'attributes':_0x3c316a[_0x09aa('0x15')]?_0x3c316a['options'][_0x09aa('0x17')]||null:null,'include':_0x3c316a[_0x09aa('0x15')]?_0x3c316a[_0x09aa('0x15')][_0x09aa('0x18')]?_['map'](_0x3c316a['options']['include'],function(_0x458de6){return{'model':db[_0x458de6[_0x09aa('0x1a')]],'as':_0x458de6['as'],'attributes':_0x458de6[_0x09aa('0x17')],'include':_0x458de6[_0x09aa('0x18')]?_[_0x09aa('0x19')](_0x458de6[_0x09aa('0x18')],function(_0x58bbfa){return{'model':db[_0x58bbfa[_0x09aa('0x1a')]],'as':_0x58bbfa['as'],'attributes':_0x58bbfa[_0x09aa('0x17')],'include':_0x58bbfa[_0x09aa('0x18')]?_[_0x09aa('0x19')](_0x58bbfa[_0x09aa('0x18')],function(_0x2f77f2){return{'model':db[_0x2f77f2['model']],'as':_0x2f77f2['as'],'attributes':_0x2f77f2[_0x09aa('0x17')]};}):[]};}):[]};}):[]:[]})[_0x09aa('0x1b')](function(_0x4376a0){logger[_0x09aa('0x9')]('ShowSalesforceAccount',_0x3c316a);logger[_0x09aa('0xb')](_0x09aa('0x1d'),_0x3c316a,JSON[_0x09aa('0xc')](_0x4376a0));_0x48e383(_0x4376a0);})[_0x09aa('0x1c')](function(_0x44d967){logger[_0x09aa('0xf')]('ShowSalesforceAccount',_0x44d967['message'],_0x3c316a);_0x11b253(_0x48d479[_0x09aa('0xf')](0x1f4,_0x44d967['message']));});});};
\ No newline at end of file
index f6baefa..03ae4ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f43=['/:id','show','/:id/fields','getSubjects','/:id/descriptions','getDescriptions','post','create','put','update','delete','multer','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index'];(function(_0x34f1a2,_0x4a155d){var _0x28f2e8=function(_0x44c39b){while(--_0x44c39b){_0x34f1a2['push'](_0x34f1a2['shift']());}};_0x28f2e8(++_0x4a155d);}(_0x5f43,0x1c4));var _0x35f4=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x5f43[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x35f4('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x35f4('0x1'));var express=require(_0x35f4('0x2'));var router=express[_0x35f4('0x3')]();var auth=require(_0x35f4('0x4'));var interaction=require(_0x35f4('0x5'));var config=require(_0x35f4('0x6'));var controller=require('./intSalesforceConfiguration.controller');router[_0x35f4('0x7')]('/',auth[_0x35f4('0x8')](),controller[_0x35f4('0x9')]);router[_0x35f4('0x7')](_0x35f4('0xa'),auth[_0x35f4('0x8')](),controller[_0x35f4('0xb')]);router[_0x35f4('0x7')](_0x35f4('0xc'),auth[_0x35f4('0x8')](),controller['getFields']);router[_0x35f4('0x7')]('/:id/subjects',auth['isAuthenticated'](),controller[_0x35f4('0xd')]);router[_0x35f4('0x7')](_0x35f4('0xe'),auth[_0x35f4('0x8')](),controller[_0x35f4('0xf')]);router[_0x35f4('0x10')]('/',auth[_0x35f4('0x8')](),controller[_0x35f4('0x11')]);router[_0x35f4('0x12')](_0x35f4('0xa'),auth[_0x35f4('0x8')](),controller[_0x35f4('0x13')]);router[_0x35f4('0x14')]('/:id',auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x39e3=['./intSalesforceConfiguration.controller','get','isAuthenticated','index','/:id','show','getFields','/:id/subjects','getSubjects','/:id/descriptions','getDescriptions','create','put','update','delete','destroy','exports','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x39e3,0x179));var _0x339e=function(_0x257d88,_0x594ae6){_0x257d88=_0x257d88-0x0;var _0x379146=_0x39e3[_0x257d88];return _0x379146;};'use strict';var multer=require('multer');var util=require(_0x339e('0x0'));var path=require(_0x339e('0x1'));var timeout=require(_0x339e('0x2'));var express=require(_0x339e('0x3'));var router=express['Router']();var auth=require(_0x339e('0x4'));var interaction=require(_0x339e('0x5'));var config=require(_0x339e('0x6'));var controller=require(_0x339e('0x7'));router[_0x339e('0x8')]('/',auth[_0x339e('0x9')](),controller[_0x339e('0xa')]);router[_0x339e('0x8')](_0x339e('0xb'),auth[_0x339e('0x9')](),controller[_0x339e('0xc')]);router[_0x339e('0x8')]('/:id/fields',auth[_0x339e('0x9')](),controller[_0x339e('0xd')]);router[_0x339e('0x8')](_0x339e('0xe'),auth[_0x339e('0x9')](),controller[_0x339e('0xf')]);router[_0x339e('0x8')](_0x339e('0x10'),auth['isAuthenticated'](),controller[_0x339e('0x11')]);router['post']('/',auth[_0x339e('0x9')](),controller[_0x339e('0x12')]);router[_0x339e('0x13')](_0x339e('0xb'),auth[_0x339e('0x9')](),controller[_0x339e('0x14')]);router[_0x339e('0x15')](_0x339e('0xb'),auth[_0x339e('0x9')](),controller[_0x339e('0x16')]);module[_0x339e('0x17')]=router;
\ No newline at end of file
index 079efaf..5622703 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b2b=['exports','STRING','ENUM','Task','contact_lead','lead','nothing','contact','sequelize'];(function(_0x59f3dd,_0x28cb3e){var _0x965af3=function(_0x402dbb){while(--_0x402dbb){_0x59f3dd['push'](_0x59f3dd['shift']());}};_0x965af3(++_0x28cb3e);}(_0x2b2b,0x179));var _0xb2b2=function(_0x3d9eb0,_0x146a5b){_0x3d9eb0=_0x3d9eb0-0x0;var _0x3d1d56=_0x2b2b[_0x3d9eb0];return _0x3d1d56;};'use strict';var Sequelize=require(_0xb2b2('0x0'));module[_0xb2b2('0x1')]={'name':{'type':Sequelize[_0xb2b2('0x2')]},'description':{'type':Sequelize[_0xb2b2('0x2')]},'ticketType':{'type':Sequelize[_0xb2b2('0x3')](_0xb2b2('0x4'),'Case'),'defaultValue':_0xb2b2('0x4')},'moduleSearch':{'type':Sequelize['ENUM'](_0xb2b2('0x5'),'contact',_0xb2b2('0x6')),'defaultValue':_0xb2b2('0x5')},'moduleCreate':{'type':Sequelize[_0xb2b2('0x3')](_0xb2b2('0x7'),_0xb2b2('0x8'),'lead'),'defaultValue':_0xb2b2('0x6')}};
\ No newline at end of file
+var _0x8d18=['ENUM','Task','Case','contact_lead','contact','lead','nothing','sequelize','STRING'];(function(_0x3d08e1,_0xa04b1b){var _0x5af70e=function(_0x2ff311){while(--_0x2ff311){_0x3d08e1['push'](_0x3d08e1['shift']());}};_0x5af70e(++_0xa04b1b);}(_0x8d18,0x127));var _0x88d1=function(_0x333fc8,_0x2b292c){_0x333fc8=_0x333fc8-0x0;var _0x432439=_0x8d18[_0x333fc8];return _0x432439;};'use strict';var Sequelize=require(_0x88d1('0x0'));module['exports']={'name':{'type':Sequelize[_0x88d1('0x1')]},'description':{'type':Sequelize[_0x88d1('0x1')]},'ticketType':{'type':Sequelize[_0x88d1('0x2')](_0x88d1('0x3'),_0x88d1('0x4')),'defaultValue':_0x88d1('0x3')},'moduleSearch':{'type':Sequelize['ENUM'](_0x88d1('0x5'),_0x88d1('0x6'),_0x88d1('0x7')),'defaultValue':_0x88d1('0x5')},'moduleCreate':{'type':Sequelize['ENUM'](_0x88d1('0x8'),'contact',_0x88d1('0x7')),'defaultValue':_0x88d1('0x7')}};
\ No newline at end of file
index 530b537..30b6bee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe14b=['SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','end','name','send','index','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','where','merge','type','field','SalesforceConfiguration','findAll','rows','show','params','rawAttributes','includeAll','include','options','find','catch','create','body','getFields','findOne','SalesforceField','filter','map','getSubjects','getDescriptions','html-pdf','eml-format','fast-json-patch','request-promise','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','http','request','info'];(function(_0x312ce9,_0x59810d){var _0x256e2b=function(_0x2e81a8){while(--_0x2e81a8){_0x312ce9['push'](_0x312ce9['shift']());}};_0x256e2b(++_0x59810d);}(_0xe14b,0x93));var _0xbe14=function(_0x2ae29a,_0x14e4ed){_0x2ae29a=_0x2ae29a-0x0;var _0x5367c7=_0xe14b[_0x2ae29a];return _0x5367c7;};'use strict';var pdf=require(_0xbe14('0x0'));var emlformat=require(_0xbe14('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xbe14('0x2'));var rp=require(_0xbe14('0x3'));var moment=require('moment');var BPromise=require(_0xbe14('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0xbe14('0x5'));var sox=require(_0xbe14('0x6'));var csv=require(_0xbe14('0x7'));var ejs=require(_0xbe14('0x8'));var fs=require('fs');var _=require(_0xbe14('0x9'));var squel=require(_0xbe14('0xa'));var crypto=require(_0xbe14('0xb'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xbe14('0xc'));var Papa=require(_0xbe14('0xd'));var authService=require(_0xbe14('0xe'));var hardwareService=require(_0xbe14('0xf'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0xbe14('0x10'))(_0xbe14('0x11'));var utils=require('../../config/utils');var config=require(_0xbe14('0x12'));var db=require(_0xbe14('0x13'))['db'];var jayson=require(_0xbe14('0x14'));var client=jayson[_0xbe14('0x15')][_0xbe14('0x16')]({'port':0x232a});function respondWithRpcPromise(_0x3b898d,_0x23a730,_0x2850cb,_0x16893f){return new BPromise(function(_0xa2cf72,_0x1e4826){var _0x33fd54=_0x16893f||client;return _0x33fd54[_0xbe14('0x17')](_0x3b898d,_0x2850cb)['then'](function(_0x55b3a7){logger[_0xbe14('0x18')](_0xbe14('0x19'),_0x23a730,_0xbe14('0x1a'));logger[_0xbe14('0x1b')]('SalesforceConfiguration,\x20%s,\x20%s,\x20%s',_0x23a730,_0xbe14('0x1a'),JSON[_0xbe14('0x1c')](_0x55b3a7));if(_0x55b3a7[_0xbe14('0x1d')]){if(_0x55b3a7[_0xbe14('0x1d')][_0xbe14('0x1e')]===0x1f4){logger[_0xbe14('0x1d')](_0xbe14('0x19'),_0x23a730,_0x55b3a7['error'][_0xbe14('0x1f')]);return _0x1e4826(_0x55b3a7[_0xbe14('0x1d')][_0xbe14('0x1f')]);}logger[_0xbe14('0x1d')](_0xbe14('0x19'),_0x23a730,_0x55b3a7[_0xbe14('0x1d')]['message']);return _0xa2cf72(_0x55b3a7[_0xbe14('0x1d')][_0xbe14('0x1f')]);}else{logger[_0xbe14('0x18')](_0xbe14('0x19'),_0x23a730,_0xbe14('0x1a'));_0xa2cf72(_0x55b3a7['result'][_0xbe14('0x1f')]);}})['catch'](function(_0x3c1c85){logger['error'](_0xbe14('0x19'),_0x23a730,_0x3c1c85);_0x1e4826(_0x3c1c85);});});}function respondWithStatusCode(_0x4a25fa,_0x274018){_0x274018=_0x274018||0xcc;return function(_0x3d3608){if(_0x3d3608){return _0x4a25fa['sendStatus'](_0x274018);}return _0x4a25fa[_0xbe14('0x20')](_0x274018)['end']();};}function respondWithResult(_0x4587a8,_0x4851f8){_0x4851f8=_0x4851f8||0xc8;return function(_0x36a21e){if(_0x36a21e){return _0x4587a8[_0xbe14('0x20')](_0x4851f8)[_0xbe14('0x21')](_0x36a21e);}};}function respondWithFilteredResult(_0x39cc81,_0x15ef02){return function(_0x2703f5){if(_0x2703f5){var _0x55d001=_0x2703f5[_0xbe14('0x22')],_0x1822e0=_0x15ef02['offset'],_0x1ba46a=_0x15ef02[_0xbe14('0x23')]+_0x15ef02[_0xbe14('0x24')],_0x391556;if(_0x1ba46a>=_0x55d001){_0x1ba46a=_0x55d001;_0x391556=0xc8;}else{_0x391556=0xce;}_0x39cc81['status'](_0x391556);return _0x39cc81[_0xbe14('0x25')](_0xbe14('0x26'),_0x1822e0+'-'+_0x1ba46a+'/'+_0x55d001)[_0xbe14('0x21')](_0x2703f5);}return null;};}function patchUpdates(_0x19252f){return function(_0x34d648){try{jsonpatch[_0xbe14('0x27')](_0x34d648,_0x19252f,!![]);}catch(_0x31a664){return BPromise[_0xbe14('0x28')](_0x31a664);}return _0x34d648[_0xbe14('0x29')]();};}function saveUpdates(_0x16a159,_0x40538f){return function(_0x3bf43c){if(_0x3bf43c){return _0x3bf43c[_0xbe14('0x2a')](_0x16a159)[_0xbe14('0x2b')](function(_0x223f7a){return _0x223f7a;});}return null;};}function removeEntity(_0xe6feb2,_0x6ba36c){return function(_0x2ff48e){if(_0x2ff48e){return _0x2ff48e[_0xbe14('0x2c')]()[_0xbe14('0x2b')](function(){_0xe6feb2['status'](0xcc)[_0xbe14('0x2d')]();});}};}function handleEntityNotFound(_0x499793,_0x58f8de){return function(_0x46c2d1){if(!_0x46c2d1){_0x499793['sendStatus'](0x194);}return _0x46c2d1;};}function handleError(_0x243524,_0x345b0){_0x345b0=_0x345b0||0x1f4;return function(_0x52a25c){logger['error'](_0x52a25c['stack']);if(_0x52a25c[_0xbe14('0x2e')]){delete _0x52a25c[_0xbe14('0x2e')];}_0x243524['status'](_0x345b0)[_0xbe14('0x2f')](_0x52a25c);};}exports[_0xbe14('0x30')]=function(_0x452635,_0x1aa849){var _0x29c23e={},_0x5ef1e5={},_0x591a36={'count':0x0,'rows':[]};var _0x15a997=db['SalesforceConfiguration']['rawAttributes'];_0x5ef1e5['model']=_[_0xbe14('0x31')](_0x15a997);_0x5ef1e5[_0xbe14('0x32')]=_[_0xbe14('0x31')](_0x452635[_0xbe14('0x32')]);_0x5ef1e5[_0xbe14('0x33')]=_[_0xbe14('0x34')](_0x5ef1e5[_0xbe14('0x35')],_0x5ef1e5[_0xbe14('0x32')]);_0x29c23e[_0xbe14('0x36')]=_[_0xbe14('0x34')](_0x5ef1e5[_0xbe14('0x35')],qs[_0xbe14('0x37')](_0x452635['query']['fields']));_0x29c23e[_0xbe14('0x36')]=_0x29c23e[_0xbe14('0x36')][_0xbe14('0x38')]?_0x29c23e['attributes']:_0x5ef1e5[_0xbe14('0x35')];if(!_0x452635[_0xbe14('0x32')][_0xbe14('0x39')](_0xbe14('0x3a'))){_0x29c23e[_0xbe14('0x24')]=qs[_0xbe14('0x24')](_0x452635[_0xbe14('0x32')][_0xbe14('0x24')]);_0x29c23e[_0xbe14('0x23')]=qs['offset'](_0x452635[_0xbe14('0x32')][_0xbe14('0x23')]);}_0x29c23e[_0xbe14('0x3b')]=qs[_0xbe14('0x3c')](_0x452635[_0xbe14('0x32')][_0xbe14('0x3c')]);_0x29c23e['where']=qs[_0xbe14('0x33')](_[_0xbe14('0x3d')](_0x452635[_0xbe14('0x32')],_0x5ef1e5[_0xbe14('0x33')]));if(_0x452635['query']['filter']){_0x29c23e[_0xbe14('0x3e')]=_[_0xbe14('0x3f')](_0x29c23e[_0xbe14('0x3e')],{'$or':_['map'](_0x15a997,function(_0x5d5318){if(_0x5d5318[_0xbe14('0x40')]['key']!=='VIRTUAL'){var _0x3593f8={};_0x3593f8[_0x5d5318[_0xbe14('0x41')]]={'$like':'%'+_0x452635[_0xbe14('0x32')]['filter']+'%'};return _0x3593f8;}})});}_0x29c23e=_['merge']({},_0x29c23e,_0x452635['options']);var _0x46fee8={'where':_0x29c23e[_0xbe14('0x3e')]};return db[_0xbe14('0x42')]['count'](_0x46fee8)[_0xbe14('0x2b')](function(_0xcb0680){_0x591a36[_0xbe14('0x22')]=_0xcb0680;if(_0x452635[_0xbe14('0x32')]['includeAll']){_0x29c23e['include']=[{'all':!![]}];}return db[_0xbe14('0x42')][_0xbe14('0x43')](_0x29c23e);})[_0xbe14('0x2b')](function(_0xb2b285){_0x591a36[_0xbe14('0x44')]=_0xb2b285;return _0x591a36;})['then'](respondWithFilteredResult(_0x1aa849,_0x29c23e))['catch'](handleError(_0x1aa849,null));};exports[_0xbe14('0x45')]=function(_0x2a3623,_0x238c60){var _0x2a3b35={'raw':![],'where':{'id':_0x2a3623[_0xbe14('0x46')]['id']}},_0x4e65d2={};_0x4e65d2[_0xbe14('0x35')]=_['keys'](db[_0xbe14('0x42')][_0xbe14('0x47')]);_0x4e65d2[_0xbe14('0x32')]=_[_0xbe14('0x31')](_0x2a3623['query']);_0x4e65d2['filters']=_[_0xbe14('0x34')](_0x4e65d2[_0xbe14('0x35')],_0x4e65d2['query']);_0x2a3b35['attributes']=_[_0xbe14('0x34')](_0x4e65d2[_0xbe14('0x35')],qs[_0xbe14('0x37')](_0x2a3623[_0xbe14('0x32')][_0xbe14('0x37')]));_0x2a3b35[_0xbe14('0x36')]=_0x2a3b35[_0xbe14('0x36')]['length']?_0x2a3b35[_0xbe14('0x36')]:_0x4e65d2[_0xbe14('0x35')];if(_0x2a3623[_0xbe14('0x32')][_0xbe14('0x48')]){_0x2a3b35[_0xbe14('0x49')]=[{'all':!![]}];}_0x2a3b35=_['merge']({},_0x2a3b35,_0x2a3623[_0xbe14('0x4a')]);return db[_0xbe14('0x42')][_0xbe14('0x4b')](_0x2a3b35)[_0xbe14('0x2b')](handleEntityNotFound(_0x238c60,null))[_0xbe14('0x2b')](respondWithResult(_0x238c60,null))[_0xbe14('0x4c')](handleError(_0x238c60,null));};exports['create']=function(_0x5aeea9,_0x3a49f7){return db[_0xbe14('0x42')][_0xbe14('0x4d')](_0x5aeea9['body'],{})['then'](respondWithResult(_0x3a49f7,0xc9))[_0xbe14('0x4c')](handleError(_0x3a49f7,null));};exports[_0xbe14('0x2a')]=function(_0x50d78f,_0x339a86){if(_0x50d78f[_0xbe14('0x4e')]['id']){delete _0x50d78f['body']['id'];}return db[_0xbe14('0x42')]['find']({'where':{'id':_0x50d78f[_0xbe14('0x46')]['id']}})[_0xbe14('0x2b')](handleEntityNotFound(_0x339a86,null))[_0xbe14('0x2b')](saveUpdates(_0x50d78f['body'],null))[_0xbe14('0x2b')](respondWithResult(_0x339a86,null))[_0xbe14('0x4c')](handleError(_0x339a86,null));};exports['destroy']=function(_0x27f24b,_0x42ca15){return db[_0xbe14('0x42')][_0xbe14('0x4b')]({'where':{'id':_0x27f24b[_0xbe14('0x46')]['id']}})['then'](handleEntityNotFound(_0x42ca15,null))[_0xbe14('0x2b')](removeEntity(_0x42ca15,null))[_0xbe14('0x4c')](handleError(_0x42ca15,null));};exports[_0xbe14('0x4f')]=function(_0x243b9e,_0x32968f,_0x44084c){var _0x1dd6c7={};var _0x56ab61={};var _0x72c875;var _0x1b47a4;return db[_0xbe14('0x42')][_0xbe14('0x50')]({'where':{'id':_0x243b9e[_0xbe14('0x46')]['id']}})[_0xbe14('0x2b')](handleEntityNotFound(_0x32968f,null))[_0xbe14('0x2b')](function(_0x32df3c){if(_0x32df3c){_0x72c875=_0x32df3c;_0x56ab61[_0xbe14('0x35')]=_[_0xbe14('0x31')](db[_0xbe14('0x51')]['rawAttributes']);_0x56ab61['query']=_['keys'](_0x243b9e[_0xbe14('0x32')]);_0x56ab61[_0xbe14('0x33')]=_[_0xbe14('0x34')](_0x56ab61[_0xbe14('0x35')],_0x56ab61[_0xbe14('0x32')]);_0x1dd6c7[_0xbe14('0x36')]=_[_0xbe14('0x34')](_0x56ab61[_0xbe14('0x35')],qs[_0xbe14('0x37')](_0x243b9e[_0xbe14('0x32')][_0xbe14('0x37')]));_0x1dd6c7[_0xbe14('0x36')]=_0x1dd6c7[_0xbe14('0x36')][_0xbe14('0x38')]?_0x1dd6c7[_0xbe14('0x36')]:_0x56ab61[_0xbe14('0x35')];_0x1dd6c7[_0xbe14('0x3b')]=qs[_0xbe14('0x3c')](_0x243b9e[_0xbe14('0x32')][_0xbe14('0x3c')]);_0x1dd6c7['where']=qs[_0xbe14('0x33')](_[_0xbe14('0x3d')](_0x243b9e[_0xbe14('0x32')],_0x56ab61[_0xbe14('0x33')]));if(_0x243b9e[_0xbe14('0x32')][_0xbe14('0x52')]){_0x1dd6c7[_0xbe14('0x3e')]=_[_0xbe14('0x3f')](_0x1dd6c7[_0xbe14('0x3e')],{'$or':_[_0xbe14('0x53')](_0x1dd6c7['attributes'],function(_0x18be56){var _0x442ec4={};_0x442ec4[_0x18be56]={'$like':'%'+_0x243b9e[_0xbe14('0x32')][_0xbe14('0x52')]+'%'};return _0x442ec4;})});}_0x1dd6c7=_[_0xbe14('0x3f')]({},_0x1dd6c7,_0x243b9e['options']);return _0x72c875[_0xbe14('0x4f')](_0x1dd6c7);}})[_0xbe14('0x2b')](function(_0x3d186b){if(_0x3d186b){_0x1b47a4=_0x3d186b[_0xbe14('0x38')];if(!_0x243b9e[_0xbe14('0x32')]['hasOwnProperty'](_0xbe14('0x3a'))){_0x1dd6c7[_0xbe14('0x24')]=qs[_0xbe14('0x24')](_0x243b9e[_0xbe14('0x32')][_0xbe14('0x24')]);_0x1dd6c7[_0xbe14('0x23')]=qs[_0xbe14('0x23')](_0x243b9e[_0xbe14('0x32')]['offset']);}return _0x72c875[_0xbe14('0x4f')](_0x1dd6c7);}})[_0xbe14('0x2b')](function(_0x2fdf5d){if(_0x2fdf5d){return _0x2fdf5d?{'count':_0x1b47a4,'rows':_0x2fdf5d}:null;}})[_0xbe14('0x2b')](respondWithResult(_0x32968f,null))[_0xbe14('0x4c')](handleError(_0x32968f,null));};exports[_0xbe14('0x54')]=function(_0x445302,_0x566096,_0x4eedd2){var _0x12941d={};var _0x3c2b58={};var _0x2d2643;var _0x2510a0;return db[_0xbe14('0x42')][_0xbe14('0x50')]({'where':{'id':_0x445302[_0xbe14('0x46')]['id']}})[_0xbe14('0x2b')](handleEntityNotFound(_0x566096,null))['then'](function(_0x5ca835){if(_0x5ca835){_0x2d2643=_0x5ca835;_0x3c2b58[_0xbe14('0x35')]=_[_0xbe14('0x31')](db[_0xbe14('0x51')]['rawAttributes']);_0x3c2b58[_0xbe14('0x32')]=_[_0xbe14('0x31')](_0x445302[_0xbe14('0x32')]);_0x3c2b58[_0xbe14('0x33')]=_[_0xbe14('0x34')](_0x3c2b58[_0xbe14('0x35')],_0x3c2b58[_0xbe14('0x32')]);_0x12941d['attributes']=_[_0xbe14('0x34')](_0x3c2b58[_0xbe14('0x35')],qs[_0xbe14('0x37')](_0x445302[_0xbe14('0x32')][_0xbe14('0x37')]));_0x12941d[_0xbe14('0x36')]=_0x12941d[_0xbe14('0x36')]['length']?_0x12941d[_0xbe14('0x36')]:_0x3c2b58[_0xbe14('0x35')];_0x12941d[_0xbe14('0x3b')]=qs[_0xbe14('0x3c')](_0x445302[_0xbe14('0x32')][_0xbe14('0x3c')]);_0x12941d[_0xbe14('0x3e')]=qs[_0xbe14('0x33')](_['pick'](_0x445302[_0xbe14('0x32')],_0x3c2b58[_0xbe14('0x33')]));if(_0x445302[_0xbe14('0x32')][_0xbe14('0x52')]){_0x12941d[_0xbe14('0x3e')]=_[_0xbe14('0x3f')](_0x12941d['where'],{'$or':_[_0xbe14('0x53')](_0x12941d[_0xbe14('0x36')],function(_0x1edc66){var _0x1b23a1={};_0x1b23a1[_0x1edc66]={'$like':'%'+_0x445302['query'][_0xbe14('0x52')]+'%'};return _0x1b23a1;})});}_0x12941d=_[_0xbe14('0x3f')]({},_0x12941d,_0x445302[_0xbe14('0x4a')]);return _0x2d2643[_0xbe14('0x54')](_0x12941d);}})[_0xbe14('0x2b')](function(_0x3d54e4){if(_0x3d54e4){_0x2510a0=_0x3d54e4[_0xbe14('0x38')];if(!_0x445302['query'][_0xbe14('0x39')]('nolimit')){_0x12941d[_0xbe14('0x24')]=qs['limit'](_0x445302[_0xbe14('0x32')][_0xbe14('0x24')]);_0x12941d[_0xbe14('0x23')]=qs['offset'](_0x445302[_0xbe14('0x32')][_0xbe14('0x23')]);}return _0x2d2643[_0xbe14('0x54')](_0x12941d);}})['then'](function(_0x41a896){if(_0x41a896){return _0x41a896?{'count':_0x2510a0,'rows':_0x41a896}:null;}})[_0xbe14('0x2b')](respondWithResult(_0x566096,null))[_0xbe14('0x4c')](handleError(_0x566096,null));};exports[_0xbe14('0x55')]=function(_0x568177,_0x3c0294,_0x39bc54){var _0x34f90b={};var _0x2b2e0e={};var _0x1dd5c0;var _0x2b9732;return db[_0xbe14('0x42')]['findOne']({'where':{'id':_0x568177[_0xbe14('0x46')]['id']}})[_0xbe14('0x2b')](handleEntityNotFound(_0x3c0294,null))[_0xbe14('0x2b')](function(_0x5c89a0){if(_0x5c89a0){_0x1dd5c0=_0x5c89a0;_0x2b2e0e[_0xbe14('0x35')]=_[_0xbe14('0x31')](db[_0xbe14('0x51')]['rawAttributes']);_0x2b2e0e[_0xbe14('0x32')]=_[_0xbe14('0x31')](_0x568177['query']);_0x2b2e0e[_0xbe14('0x33')]=_['intersection'](_0x2b2e0e[_0xbe14('0x35')],_0x2b2e0e[_0xbe14('0x32')]);_0x34f90b['attributes']=_['intersection'](_0x2b2e0e[_0xbe14('0x35')],qs[_0xbe14('0x37')](_0x568177[_0xbe14('0x32')]['fields']));_0x34f90b[_0xbe14('0x36')]=_0x34f90b[_0xbe14('0x36')][_0xbe14('0x38')]?_0x34f90b[_0xbe14('0x36')]:_0x2b2e0e['model'];_0x34f90b['order']=qs[_0xbe14('0x3c')](_0x568177[_0xbe14('0x32')][_0xbe14('0x3c')]);_0x34f90b[_0xbe14('0x3e')]=qs[_0xbe14('0x33')](_[_0xbe14('0x3d')](_0x568177[_0xbe14('0x32')],_0x2b2e0e['filters']));if(_0x568177[_0xbe14('0x32')]['filter']){_0x34f90b[_0xbe14('0x3e')]=_[_0xbe14('0x3f')](_0x34f90b[_0xbe14('0x3e')],{'$or':_[_0xbe14('0x53')](_0x34f90b['attributes'],function(_0x1e160b){var _0xa8dd0c={};_0xa8dd0c[_0x1e160b]={'$like':'%'+_0x568177[_0xbe14('0x32')]['filter']+'%'};return _0xa8dd0c;})});}_0x34f90b=_[_0xbe14('0x3f')]({},_0x34f90b,_0x568177[_0xbe14('0x4a')]);return _0x1dd5c0[_0xbe14('0x55')](_0x34f90b);}})[_0xbe14('0x2b')](function(_0x26d3ae){if(_0x26d3ae){_0x2b9732=_0x26d3ae[_0xbe14('0x38')];if(!_0x568177[_0xbe14('0x32')][_0xbe14('0x39')](_0xbe14('0x3a'))){_0x34f90b[_0xbe14('0x24')]=qs[_0xbe14('0x24')](_0x568177[_0xbe14('0x32')][_0xbe14('0x24')]);_0x34f90b[_0xbe14('0x23')]=qs[_0xbe14('0x23')](_0x568177[_0xbe14('0x32')][_0xbe14('0x23')]);}return _0x1dd5c0[_0xbe14('0x55')](_0x34f90b);}})[_0xbe14('0x2b')](function(_0x2ca6e6){if(_0x2ca6e6){return _0x2ca6e6?{'count':_0x2b9732,'rows':_0x2ca6e6}:null;}})['then'](respondWithResult(_0x3c0294,null))[_0xbe14('0x4c')](handleError(_0x3c0294,null));};
\ No newline at end of file
+var _0x814b=['code','message','result','catch','status','end','json','count','offset','limit','Content-Range','apply','save','sendStatus','name','send','index','rawAttributes','model','query','keys','filters','intersection','attributes','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','SalesforceConfiguration','findAll','rows','show','params','fields','length','include','find','create','body','destroy','getFields','findOne','SalesforceField','getSubjects','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment','jayson/promise','client','http','request','then','info','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','debug','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x397e92,_0x8684c5){var _0x5888a2=function(_0x231d5c){while(--_0x231d5c){_0x397e92['push'](_0x397e92['shift']());}};_0x5888a2(++_0x8684c5);}(_0x814b,0x1a2));var _0xb814=function(_0x231a47,_0x46a963){_0x231a47=_0x231a47-0x0;var _0x48d7c9=_0x814b[_0x231a47];return _0x48d7c9;};'use strict';var pdf=require(_0xb814('0x0'));var emlformat=require(_0xb814('0x1'));var rimraf=require(_0xb814('0x2'));var zipdir=require(_0xb814('0x3'));var jsonpatch=require(_0xb814('0x4'));var rp=require(_0xb814('0x5'));var moment=require('moment');var BPromise=require(_0xb814('0x6'));var Mustache=require(_0xb814('0x7'));var util=require(_0xb814('0x8'));var path=require(_0xb814('0x9'));var sox=require(_0xb814('0xa'));var csv=require(_0xb814('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xb814('0xc'));var squel=require(_0xb814('0xd'));var crypto=require('crypto');var jsforce=require(_0xb814('0xe'));var deskjs=require(_0xb814('0xf'));var toCsv=require(_0xb814('0xb'));var querystring=require(_0xb814('0x10'));var Papa=require(_0xb814('0x11'));var authService=require(_0xb814('0x12'));var hardwareService=require(_0xb814('0x13'));var Redis=require(_0xb814('0x14'));var qs=require(_0xb814('0x15'));var logger=require(_0xb814('0x16'))(_0xb814('0x17'));var utils=require('../../config/utils');var config=require(_0xb814('0x18'));var db=require('../../mysqldb')['db'];var jayson=require(_0xb814('0x19'));var client=jayson[_0xb814('0x1a')][_0xb814('0x1b')]({'port':0x232a});function respondWithRpcPromise(_0x2cc46b,_0x2ce718,_0x3bde14,_0x1438e7){return new BPromise(function(_0x41ed7b,_0xa0a2e5){var _0x2ab627=_0x1438e7||client;return _0x2ab627[_0xb814('0x1c')](_0x2cc46b,_0x3bde14)[_0xb814('0x1d')](function(_0x17f5bd){logger[_0xb814('0x1e')](_0xb814('0x1f'),_0x2ce718,_0xb814('0x20'));logger[_0xb814('0x21')](_0xb814('0x22'),_0x2ce718,_0xb814('0x20'),JSON[_0xb814('0x23')](_0x17f5bd));if(_0x17f5bd[_0xb814('0x24')]){if(_0x17f5bd['error'][_0xb814('0x25')]===0x1f4){logger['error'](_0xb814('0x1f'),_0x2ce718,_0x17f5bd[_0xb814('0x24')]['message']);return _0xa0a2e5(_0x17f5bd['error']['message']);}logger[_0xb814('0x24')]('SalesforceConfiguration,\x20%s,\x20%s',_0x2ce718,_0x17f5bd['error'][_0xb814('0x26')]);return _0x41ed7b(_0x17f5bd[_0xb814('0x24')][_0xb814('0x26')]);}else{logger['info'](_0xb814('0x1f'),_0x2ce718,'request\x20sent');_0x41ed7b(_0x17f5bd[_0xb814('0x27')][_0xb814('0x26')]);}})[_0xb814('0x28')](function(_0x470e81){logger[_0xb814('0x24')](_0xb814('0x1f'),_0x2ce718,_0x470e81);_0xa0a2e5(_0x470e81);});});}function respondWithStatusCode(_0x1f5d40,_0x594470){_0x594470=_0x594470||0xcc;return function(_0x2ead86){if(_0x2ead86){return _0x1f5d40['sendStatus'](_0x594470);}return _0x1f5d40[_0xb814('0x29')](_0x594470)[_0xb814('0x2a')]();};}function respondWithResult(_0x31c7ec,_0x208927){_0x208927=_0x208927||0xc8;return function(_0x1c8a2e){if(_0x1c8a2e){return _0x31c7ec[_0xb814('0x29')](_0x208927)[_0xb814('0x2b')](_0x1c8a2e);}};}function respondWithFilteredResult(_0x5755ea,_0x392222){return function(_0xc0ef66){if(_0xc0ef66){var _0x1c2625=_0xc0ef66[_0xb814('0x2c')],_0x349394=_0x392222[_0xb814('0x2d')],_0x32ed56=_0x392222['offset']+_0x392222[_0xb814('0x2e')],_0x1d5965;if(_0x32ed56>=_0x1c2625){_0x32ed56=_0x1c2625;_0x1d5965=0xc8;}else{_0x1d5965=0xce;}_0x5755ea[_0xb814('0x29')](_0x1d5965);return _0x5755ea['set'](_0xb814('0x2f'),_0x349394+'-'+_0x32ed56+'/'+_0x1c2625)[_0xb814('0x2b')](_0xc0ef66);}return null;};}function patchUpdates(_0x530744){return function(_0x499f22){try{jsonpatch[_0xb814('0x30')](_0x499f22,_0x530744,!![]);}catch(_0x2051d0){return BPromise['reject'](_0x2051d0);}return _0x499f22[_0xb814('0x31')]();};}function saveUpdates(_0x526610,_0x6efe9a){return function(_0x5f3e9b){if(_0x5f3e9b){return _0x5f3e9b['update'](_0x526610)[_0xb814('0x1d')](function(_0x4a4f27){return _0x4a4f27;});}return null;};}function removeEntity(_0x2431e2,_0x19469b){return function(_0x2b91bd){if(_0x2b91bd){return _0x2b91bd['destroy']()['then'](function(){_0x2431e2[_0xb814('0x29')](0xcc)[_0xb814('0x2a')]();});}};}function handleEntityNotFound(_0x523566,_0x2c8943){return function(_0xe558d5){if(!_0xe558d5){_0x523566[_0xb814('0x32')](0x194);}return _0xe558d5;};}function handleError(_0x217b7e,_0x1b78de){_0x1b78de=_0x1b78de||0x1f4;return function(_0x60024d){logger[_0xb814('0x24')](_0x60024d['stack']);if(_0x60024d[_0xb814('0x33')]){delete _0x60024d[_0xb814('0x33')];}_0x217b7e[_0xb814('0x29')](_0x1b78de)[_0xb814('0x34')](_0x60024d);};}exports[_0xb814('0x35')]=function(_0x4ff31a,_0x16ef82){var _0x57e6e6={},_0x43db67={},_0x16e21c={'count':0x0,'rows':[]};var _0xe0f509=db['SalesforceConfiguration'][_0xb814('0x36')];_0x43db67[_0xb814('0x37')]=_['keys'](_0xe0f509);_0x43db67[_0xb814('0x38')]=_[_0xb814('0x39')](_0x4ff31a[_0xb814('0x38')]);_0x43db67[_0xb814('0x3a')]=_[_0xb814('0x3b')](_0x43db67[_0xb814('0x37')],_0x43db67['query']);_0x57e6e6[_0xb814('0x3c')]=_['intersection'](_0x43db67[_0xb814('0x37')],qs['fields'](_0x4ff31a[_0xb814('0x38')]['fields']));_0x57e6e6[_0xb814('0x3c')]=_0x57e6e6[_0xb814('0x3c')]['length']?_0x57e6e6['attributes']:_0x43db67['model'];if(!_0x4ff31a['query'][_0xb814('0x3d')](_0xb814('0x3e'))){_0x57e6e6[_0xb814('0x2e')]=qs[_0xb814('0x2e')](_0x4ff31a['query']['limit']);_0x57e6e6[_0xb814('0x2d')]=qs['offset'](_0x4ff31a[_0xb814('0x38')][_0xb814('0x2d')]);}_0x57e6e6[_0xb814('0x3f')]=qs[_0xb814('0x40')](_0x4ff31a[_0xb814('0x38')][_0xb814('0x40')]);_0x57e6e6[_0xb814('0x41')]=qs[_0xb814('0x3a')](_[_0xb814('0x42')](_0x4ff31a['query'],_0x43db67['filters']));if(_0x4ff31a['query'][_0xb814('0x43')]){_0x57e6e6['where']=_[_0xb814('0x44')](_0x57e6e6['where'],{'$or':_[_0xb814('0x45')](_0xe0f509,function(_0x44ff56){if(_0x44ff56[_0xb814('0x46')][_0xb814('0x47')]!=='VIRTUAL'){var _0x30fc57={};_0x30fc57[_0x44ff56[_0xb814('0x48')]]={'$like':'%'+_0x4ff31a[_0xb814('0x38')][_0xb814('0x43')]+'%'};return _0x30fc57;}})});}_0x57e6e6=_[_0xb814('0x44')]({},_0x57e6e6,_0x4ff31a[_0xb814('0x49')]);var _0x534eb8={'where':_0x57e6e6[_0xb814('0x41')]};return db[_0xb814('0x4a')][_0xb814('0x2c')](_0x534eb8)[_0xb814('0x1d')](function(_0x46408b){_0x16e21c[_0xb814('0x2c')]=_0x46408b;if(_0x4ff31a[_0xb814('0x38')]['includeAll']){_0x57e6e6['include']=[{'all':!![]}];}return db[_0xb814('0x4a')][_0xb814('0x4b')](_0x57e6e6);})[_0xb814('0x1d')](function(_0x2bf906){_0x16e21c[_0xb814('0x4c')]=_0x2bf906;return _0x16e21c;})[_0xb814('0x1d')](respondWithFilteredResult(_0x16ef82,_0x57e6e6))[_0xb814('0x28')](handleError(_0x16ef82,null));};exports[_0xb814('0x4d')]=function(_0x2eb9b6,_0x344198){var _0xe73300={'raw':![],'where':{'id':_0x2eb9b6[_0xb814('0x4e')]['id']}},_0x5c7a49={};_0x5c7a49[_0xb814('0x37')]=_['keys'](db[_0xb814('0x4a')]['rawAttributes']);_0x5c7a49[_0xb814('0x38')]=_[_0xb814('0x39')](_0x2eb9b6[_0xb814('0x38')]);_0x5c7a49[_0xb814('0x3a')]=_[_0xb814('0x3b')](_0x5c7a49[_0xb814('0x37')],_0x5c7a49[_0xb814('0x38')]);_0xe73300[_0xb814('0x3c')]=_[_0xb814('0x3b')](_0x5c7a49[_0xb814('0x37')],qs['fields'](_0x2eb9b6['query'][_0xb814('0x4f')]));_0xe73300[_0xb814('0x3c')]=_0xe73300[_0xb814('0x3c')][_0xb814('0x50')]?_0xe73300[_0xb814('0x3c')]:_0x5c7a49[_0xb814('0x37')];if(_0x2eb9b6[_0xb814('0x38')]['includeAll']){_0xe73300[_0xb814('0x51')]=[{'all':!![]}];}_0xe73300=_[_0xb814('0x44')]({},_0xe73300,_0x2eb9b6[_0xb814('0x49')]);return db['SalesforceConfiguration'][_0xb814('0x52')](_0xe73300)['then'](handleEntityNotFound(_0x344198,null))[_0xb814('0x1d')](respondWithResult(_0x344198,null))['catch'](handleError(_0x344198,null));};exports[_0xb814('0x53')]=function(_0x3cf8f8,_0x590c4b){return db[_0xb814('0x4a')][_0xb814('0x53')](_0x3cf8f8[_0xb814('0x54')],{})['then'](respondWithResult(_0x590c4b,0xc9))[_0xb814('0x28')](handleError(_0x590c4b,null));};exports['update']=function(_0x13bdcf,_0x158893){if(_0x13bdcf['body']['id']){delete _0x13bdcf[_0xb814('0x54')]['id'];}return db['SalesforceConfiguration']['find']({'where':{'id':_0x13bdcf[_0xb814('0x4e')]['id']}})[_0xb814('0x1d')](handleEntityNotFound(_0x158893,null))[_0xb814('0x1d')](saveUpdates(_0x13bdcf['body'],null))[_0xb814('0x1d')](respondWithResult(_0x158893,null))['catch'](handleError(_0x158893,null));};exports[_0xb814('0x55')]=function(_0x2174e5,_0x58d6e5){return db[_0xb814('0x4a')]['find']({'where':{'id':_0x2174e5[_0xb814('0x4e')]['id']}})[_0xb814('0x1d')](handleEntityNotFound(_0x58d6e5,null))[_0xb814('0x1d')](removeEntity(_0x58d6e5,null))[_0xb814('0x28')](handleError(_0x58d6e5,null));};exports[_0xb814('0x56')]=function(_0x34acca,_0x21d3e9,_0x3ab134){var _0x4b3db0={};var _0x374532={};var _0x5441c5;var _0x5d71d5;return db[_0xb814('0x4a')][_0xb814('0x57')]({'where':{'id':_0x34acca['params']['id']}})[_0xb814('0x1d')](handleEntityNotFound(_0x21d3e9,null))['then'](function(_0x48362c){if(_0x48362c){_0x5441c5=_0x48362c;_0x374532[_0xb814('0x37')]=_['keys'](db[_0xb814('0x58')][_0xb814('0x36')]);_0x374532[_0xb814('0x38')]=_['keys'](_0x34acca[_0xb814('0x38')]);_0x374532['filters']=_[_0xb814('0x3b')](_0x374532[_0xb814('0x37')],_0x374532[_0xb814('0x38')]);_0x4b3db0[_0xb814('0x3c')]=_[_0xb814('0x3b')](_0x374532[_0xb814('0x37')],qs[_0xb814('0x4f')](_0x34acca[_0xb814('0x38')][_0xb814('0x4f')]));_0x4b3db0['attributes']=_0x4b3db0[_0xb814('0x3c')][_0xb814('0x50')]?_0x4b3db0[_0xb814('0x3c')]:_0x374532[_0xb814('0x37')];_0x4b3db0[_0xb814('0x3f')]=qs[_0xb814('0x40')](_0x34acca['query'][_0xb814('0x40')]);_0x4b3db0['where']=qs[_0xb814('0x3a')](_[_0xb814('0x42')](_0x34acca[_0xb814('0x38')],_0x374532['filters']));if(_0x34acca[_0xb814('0x38')]['filter']){_0x4b3db0[_0xb814('0x41')]=_['merge'](_0x4b3db0[_0xb814('0x41')],{'$or':_[_0xb814('0x45')](_0x4b3db0[_0xb814('0x3c')],function(_0x1b024f){var _0x3377d4={};_0x3377d4[_0x1b024f]={'$like':'%'+_0x34acca[_0xb814('0x38')][_0xb814('0x43')]+'%'};return _0x3377d4;})});}_0x4b3db0=_['merge']({},_0x4b3db0,_0x34acca[_0xb814('0x49')]);return _0x5441c5['getFields'](_0x4b3db0);}})[_0xb814('0x1d')](function(_0x22c73f){if(_0x22c73f){_0x5d71d5=_0x22c73f[_0xb814('0x50')];if(!_0x34acca[_0xb814('0x38')][_0xb814('0x3d')](_0xb814('0x3e'))){_0x4b3db0['limit']=qs[_0xb814('0x2e')](_0x34acca[_0xb814('0x38')]['limit']);_0x4b3db0[_0xb814('0x2d')]=qs[_0xb814('0x2d')](_0x34acca[_0xb814('0x38')][_0xb814('0x2d')]);}return _0x5441c5[_0xb814('0x56')](_0x4b3db0);}})['then'](function(_0x3a4d4b){if(_0x3a4d4b){return _0x3a4d4b?{'count':_0x5d71d5,'rows':_0x3a4d4b}:null;}})['then'](respondWithResult(_0x21d3e9,null))[_0xb814('0x28')](handleError(_0x21d3e9,null));};exports[_0xb814('0x59')]=function(_0x2645f6,_0x45dc85,_0x2e39b1){var _0x41bcaf={};var _0x4cae4a={};var _0x506bf2;var _0x5d064b;return db[_0xb814('0x4a')]['findOne']({'where':{'id':_0x2645f6[_0xb814('0x4e')]['id']}})[_0xb814('0x1d')](handleEntityNotFound(_0x45dc85,null))[_0xb814('0x1d')](function(_0x5e966c){if(_0x5e966c){_0x506bf2=_0x5e966c;_0x4cae4a[_0xb814('0x37')]=_[_0xb814('0x39')](db[_0xb814('0x58')]['rawAttributes']);_0x4cae4a[_0xb814('0x38')]=_[_0xb814('0x39')](_0x2645f6[_0xb814('0x38')]);_0x4cae4a[_0xb814('0x3a')]=_['intersection'](_0x4cae4a['model'],_0x4cae4a[_0xb814('0x38')]);_0x41bcaf[_0xb814('0x3c')]=_[_0xb814('0x3b')](_0x4cae4a[_0xb814('0x37')],qs[_0xb814('0x4f')](_0x2645f6[_0xb814('0x38')][_0xb814('0x4f')]));_0x41bcaf[_0xb814('0x3c')]=_0x41bcaf[_0xb814('0x3c')][_0xb814('0x50')]?_0x41bcaf[_0xb814('0x3c')]:_0x4cae4a[_0xb814('0x37')];_0x41bcaf[_0xb814('0x3f')]=qs[_0xb814('0x40')](_0x2645f6[_0xb814('0x38')]['sort']);_0x41bcaf[_0xb814('0x41')]=qs[_0xb814('0x3a')](_[_0xb814('0x42')](_0x2645f6[_0xb814('0x38')],_0x4cae4a[_0xb814('0x3a')]));if(_0x2645f6[_0xb814('0x38')]['filter']){_0x41bcaf[_0xb814('0x41')]=_['merge'](_0x41bcaf[_0xb814('0x41')],{'$or':_[_0xb814('0x45')](_0x41bcaf[_0xb814('0x3c')],function(_0x2292e6){var _0x265a25={};_0x265a25[_0x2292e6]={'$like':'%'+_0x2645f6['query']['filter']+'%'};return _0x265a25;})});}_0x41bcaf=_[_0xb814('0x44')]({},_0x41bcaf,_0x2645f6[_0xb814('0x49')]);return _0x506bf2[_0xb814('0x59')](_0x41bcaf);}})[_0xb814('0x1d')](function(_0x488ef2){if(_0x488ef2){_0x5d064b=_0x488ef2[_0xb814('0x50')];if(!_0x2645f6['query'][_0xb814('0x3d')](_0xb814('0x3e'))){_0x41bcaf['limit']=qs['limit'](_0x2645f6[_0xb814('0x38')]['limit']);_0x41bcaf[_0xb814('0x2d')]=qs[_0xb814('0x2d')](_0x2645f6[_0xb814('0x38')][_0xb814('0x2d')]);}return _0x506bf2[_0xb814('0x59')](_0x41bcaf);}})[_0xb814('0x1d')](function(_0x40fe4a){if(_0x40fe4a){return _0x40fe4a?{'count':_0x5d064b,'rows':_0x40fe4a}:null;}})['then'](respondWithResult(_0x45dc85,null))[_0xb814('0x28')](handleError(_0x45dc85,null));};exports['getDescriptions']=function(_0x212456,_0x590145,_0x2838cb){var _0x43ee60={};var _0x58d56c={};var _0x10a90d;var _0x583f26;return db[_0xb814('0x4a')][_0xb814('0x57')]({'where':{'id':_0x212456['params']['id']}})['then'](handleEntityNotFound(_0x590145,null))[_0xb814('0x1d')](function(_0x25d976){if(_0x25d976){_0x10a90d=_0x25d976;_0x58d56c[_0xb814('0x37')]=_[_0xb814('0x39')](db[_0xb814('0x58')][_0xb814('0x36')]);_0x58d56c[_0xb814('0x38')]=_[_0xb814('0x39')](_0x212456[_0xb814('0x38')]);_0x58d56c[_0xb814('0x3a')]=_['intersection'](_0x58d56c['model'],_0x58d56c['query']);_0x43ee60['attributes']=_['intersection'](_0x58d56c[_0xb814('0x37')],qs[_0xb814('0x4f')](_0x212456[_0xb814('0x38')]['fields']));_0x43ee60[_0xb814('0x3c')]=_0x43ee60[_0xb814('0x3c')][_0xb814('0x50')]?_0x43ee60[_0xb814('0x3c')]:_0x58d56c[_0xb814('0x37')];_0x43ee60[_0xb814('0x3f')]=qs[_0xb814('0x40')](_0x212456[_0xb814('0x38')]['sort']);_0x43ee60[_0xb814('0x41')]=qs[_0xb814('0x3a')](_[_0xb814('0x42')](_0x212456[_0xb814('0x38')],_0x58d56c['filters']));if(_0x212456[_0xb814('0x38')][_0xb814('0x43')]){_0x43ee60[_0xb814('0x41')]=_[_0xb814('0x44')](_0x43ee60[_0xb814('0x41')],{'$or':_['map'](_0x43ee60['attributes'],function(_0x252f9c){var _0x57b3f2={};_0x57b3f2[_0x252f9c]={'$like':'%'+_0x212456[_0xb814('0x38')][_0xb814('0x43')]+'%'};return _0x57b3f2;})});}_0x43ee60=_['merge']({},_0x43ee60,_0x212456[_0xb814('0x49')]);return _0x10a90d['getDescriptions'](_0x43ee60);}})[_0xb814('0x1d')](function(_0x520d0f){if(_0x520d0f){_0x583f26=_0x520d0f[_0xb814('0x50')];if(!_0x212456[_0xb814('0x38')][_0xb814('0x3d')](_0xb814('0x3e'))){_0x43ee60[_0xb814('0x2e')]=qs[_0xb814('0x2e')](_0x212456[_0xb814('0x38')]['limit']);_0x43ee60['offset']=qs[_0xb814('0x2d')](_0x212456['query']['offset']);}return _0x10a90d[_0xb814('0x5a')](_0x43ee60);}})[_0xb814('0x1d')](function(_0x25d42d){if(_0x25d42d){return _0x25d42d?{'count':_0x583f26,'rows':_0x25d42d}:null;}})['then'](respondWithResult(_0x590145,null))[_0xb814('0x28')](handleError(_0x590145,null));};
\ No newline at end of file
index 0148f71..1eb8998 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd11=['util','api','moment','bluebird','request-promise','define','SalesforceConfiguration','int_salesforce_configurations','lodash'];(function(_0x1d369a,_0x475095){var _0x3e1eb3=function(_0x199634){while(--_0x199634){_0x1d369a['push'](_0x1d369a['shift']());}};_0x3e1eb3(++_0x475095);}(_0xbd11,0xc5));var _0x1bd1=function(_0x4fd82a,_0x29d9d5){_0x4fd82a=_0x4fd82a-0x0;var _0x21d2a8=_0xbd11[_0x4fd82a];return _0x21d2a8;};'use strict';var _=require(_0x1bd1('0x0'));var util=require(_0x1bd1('0x1'));var logger=require('../../config/logger')(_0x1bd1('0x2'));var moment=require(_0x1bd1('0x3'));var BPromise=require(_0x1bd1('0x4'));var rp=require(_0x1bd1('0x5'));var attributes=require('./intSalesforceConfiguration.attributes');module['exports']=function(_0xbb4351,_0x2d0ab6){return _0xbb4351[_0x1bd1('0x6')](_0x1bd1('0x7'),attributes,{'tableName':_0x1bd1('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8acc=['SalesforceConfiguration','int_salesforce_configurations','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./intSalesforceConfiguration.attributes','exports','define'];(function(_0x42b3e3,_0x3e2593){var _0x622dcb=function(_0xaa400e){while(--_0xaa400e){_0x42b3e3['push'](_0x42b3e3['shift']());}};_0x622dcb(++_0x3e2593);}(_0x8acc,0x9e));var _0xc8ac=function(_0x13fef3,_0x227ae8){_0x13fef3=_0x13fef3-0x0;var _0x47456b=_0x8acc[_0x13fef3];return _0x47456b;};'use strict';var _=require(_0xc8ac('0x0'));var util=require(_0xc8ac('0x1'));var logger=require(_0xc8ac('0x2'))(_0xc8ac('0x3'));var moment=require(_0xc8ac('0x4'));var BPromise=require(_0xc8ac('0x5'));var rp=require(_0xc8ac('0x6'));var attributes=require(_0xc8ac('0x7'));module[_0xc8ac('0x8')]=function(_0x29fc43,_0x33b36e){return _0x29fc43[_0xc8ac('0x9')](_0xc8ac('0xa'),attributes,{'tableName':_0xc8ac('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ee8c72e..b50becc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-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(_0x556bb1,_0x34830d){var _0x45455f=function(_0x13c6ba){while(--_0x13c6ba){_0x556bb1['push'](_0x556bb1['shift']());}};_0x45455f(++_0x34830d);}(_0x7217,0x19e));var _0x7721=function(_0x2763f2,_0x416af8){_0x2763f2=_0x2763f2-0x0;var _0x3ef471=_0x7217[_0x2763f2];return _0x3ef471;};'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
+var _0x1261=['then','info','SalesforceConfiguration,\x20%s,\x20%s','request\x20sent','SalesforceConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','http','request'];(function(_0x10df35,_0x315828){var _0x4da716=function(_0x526535){while(--_0x526535){_0x10df35['push'](_0x10df35['shift']());}};_0x4da716(++_0x315828);}(_0x1261,0x144));var _0x1126=function(_0x49d27a,_0x166543){_0x49d27a=_0x49d27a-0x0;var _0x3f0b62=_0x1261[_0x49d27a];return _0x3f0b62;};'use strict';var _=require('lodash');var util=require(_0x1126('0x0'));var moment=require(_0x1126('0x1'));var BPromise=require(_0x1126('0x2'));var rs=require(_0x1126('0x3'));var fs=require('fs');var Redis=require(_0x1126('0x4'));var db=require(_0x1126('0x5'))['db'];var utils=require(_0x1126('0x6'));var logger=require(_0x1126('0x7'))(_0x1126('0x8'));var config=require(_0x1126('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0x1126('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x907180,_0x4f239c,_0x17e5f0){return new BPromise(function(_0x28772d,_0x245be9){return client[_0x1126('0xb')](_0x907180,_0x17e5f0)[_0x1126('0xc')](function(_0x59cfa1){logger[_0x1126('0xd')](_0x1126('0xe'),_0x4f239c,_0x1126('0xf'));logger['debug'](_0x1126('0x10'),_0x4f239c,'request\x20sent',JSON['stringify'](_0x59cfa1));if(_0x59cfa1[_0x1126('0x11')]){if(_0x59cfa1['error'][_0x1126('0x12')]===0x1f4){logger[_0x1126('0x11')](_0x1126('0xe'),_0x4f239c,_0x59cfa1[_0x1126('0x11')][_0x1126('0x13')]);return _0x245be9(_0x59cfa1[_0x1126('0x11')][_0x1126('0x13')]);}logger[_0x1126('0x11')](_0x1126('0xe'),_0x4f239c,_0x59cfa1['error']['message']);return _0x28772d(_0x59cfa1[_0x1126('0x11')][_0x1126('0x13')]);}else{logger[_0x1126('0xd')]('SalesforceConfiguration,\x20%s,\x20%s',_0x4f239c,_0x1126('0xf'));_0x28772d(_0x59cfa1['result'][_0x1126('0x13')]);}})[_0x1126('0x14')](function(_0x257b5f){logger['error'](_0x1126('0xe'),_0x4f239c,_0x257b5f);_0x245be9(_0x257b5f);});});}
\ No newline at end of file
index cf6dc90..ff18c5e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdd85=['../../components/interaction/service','../../config/environment','get','isAuthenticated','/:id','show','post','create','put','delete','destroy','exports','connect-timeout','express','Router','../../components/auth/service'];(function(_0xb14821,_0x4cc527){var _0x160d8c=function(_0x2cabfa){while(--_0x2cabfa){_0xb14821['push'](_0xb14821['shift']());}};_0x160d8c(++_0x4cc527);}(_0xdd85,0x13c));var _0x5dd8=function(_0x236d48,_0xdeddbb){_0x236d48=_0x236d48-0x0;var _0x59cafe=_0xdd85[_0x236d48];return _0x59cafe;};'use strict';var multer=require('multer');var util=require('util');var path=require('path');var timeout=require(_0x5dd8('0x0'));var express=require(_0x5dd8('0x1'));var router=express[_0x5dd8('0x2')]();var auth=require(_0x5dd8('0x3'));var interaction=require(_0x5dd8('0x4'));var config=require(_0x5dd8('0x5'));var controller=require('./intSalesforceField.controller');router[_0x5dd8('0x6')]('/',auth[_0x5dd8('0x7')](),controller['index']);router['get'](_0x5dd8('0x8'),auth[_0x5dd8('0x7')](),controller[_0x5dd8('0x9')]);router[_0x5dd8('0xa')]('/',auth[_0x5dd8('0x7')](),controller[_0x5dd8('0xb')]);router[_0x5dd8('0xc')](_0x5dd8('0x8'),auth[_0x5dd8('0x7')](),controller['update']);router[_0x5dd8('0xd')](_0x5dd8('0x8'),auth[_0x5dd8('0x7')](),controller[_0x5dd8('0xe')]);module[_0x5dd8('0xf')]=router;
\ No newline at end of file
+var _0x5d16=['put','update','delete','destroy','exports','multer','util','path','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSalesforceField.controller','get','isAuthenticated','/:id','show','post','create'];(function(_0x386a06,_0x131a1c){var _0x192057=function(_0x24cf90){while(--_0x24cf90){_0x386a06['push'](_0x386a06['shift']());}};_0x192057(++_0x131a1c);}(_0x5d16,0x1c7));var _0x65d1=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x5d16[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x65d1('0x0'));var util=require(_0x65d1('0x1'));var path=require(_0x65d1('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0x65d1('0x3'));var interaction=require(_0x65d1('0x4'));var config=require(_0x65d1('0x5'));var controller=require(_0x65d1('0x6'));router[_0x65d1('0x7')]('/',auth[_0x65d1('0x8')](),controller['index']);router['get'](_0x65d1('0x9'),auth[_0x65d1('0x8')](),controller[_0x65d1('0xa')]);router[_0x65d1('0xb')]('/',auth[_0x65d1('0x8')](),controller[_0x65d1('0xc')]);router[_0x65d1('0xd')]('/:id',auth[_0x65d1('0x8')](),controller[_0x65d1('0xe')]);router[_0x65d1('0xf')](_0x65d1('0x9'),auth[_0x65d1('0x8')](),controller[_0x65d1('0x10')]);module[_0x65d1('0x11')]=router;
\ No newline at end of file
index 1b15cfc..172f94f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf99b=['sequelize','exports','string','customVariable','STRING','ENUM','variable'];(function(_0x2cc711,_0x300328){var _0x31a52e=function(_0x588378){while(--_0x588378){_0x2cc711['push'](_0x2cc711['shift']());}};_0x31a52e(++_0x300328);}(_0xf99b,0xaf));var _0xbf99=function(_0x46a098,_0x21f468){_0x46a098=_0x46a098-0x0;var _0x1c5758=_0xf99b[_0x46a098];return _0x1c5758;};'use strict';var Sequelize=require(_0xbf99('0x0'));module[_0xbf99('0x1')]={'type':{'type':Sequelize['ENUM'](_0xbf99('0x2'),'variable',_0xbf99('0x3'),'keyValue'),'defaultValue':'string'},'content':{'type':Sequelize[_0xbf99('0x4')]},'key':{'type':Sequelize[_0xbf99('0x4')]},'keyType':{'type':Sequelize[_0xbf99('0x5')](_0xbf99('0x2'),_0xbf99('0x6'),_0xbf99('0x3'))},'keyContent':{'type':Sequelize[_0xbf99('0x4')]},'idField':{'type':Sequelize[_0xbf99('0x4')]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xa5c5=['STRING','sequelize','exports','ENUM','string','variable','customVariable','keyValue'];(function(_0x3ec445,_0x3b8cd9){var _0x770398=function(_0x129929){while(--_0x129929){_0x3ec445['push'](_0x3ec445['shift']());}};_0x770398(++_0x3b8cd9);}(_0xa5c5,0xe9));var _0x5a5c=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xa5c5[_0x19e35c];return _0x3e1fe8;};'use strict';var Sequelize=require(_0x5a5c('0x0'));module[_0x5a5c('0x1')]={'type':{'type':Sequelize[_0x5a5c('0x2')](_0x5a5c('0x3'),_0x5a5c('0x4'),_0x5a5c('0x5'),_0x5a5c('0x6')),'defaultValue':'string'},'content':{'type':Sequelize[_0x5a5c('0x7')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x5a5c('0x2')](_0x5a5c('0x3'),'variable',_0x5a5c('0x5'))},'keyContent':{'type':Sequelize[_0x5a5c('0x7')]},'idField':{'type':Sequelize['STRING']},'variableName':{'type':Sequelize[_0x5a5c('0x7')]}};
\ No newline at end of file
index dc2f68e..4995f1a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b7c=['eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','querystring','papaparse','../../config/license/hardware','../../components/parsers/qs','../../config/environment','../../mysqldb','sendStatus','status','end','offset','limit','Content-Range','apply','reject','save','update','then','error','stack','name','send','index','SalesforceField','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','count','includeAll','include','findAll','catch','find','create','body','params','destroy','html-pdf'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x2b7c,0x158));var _0xc2b7=function(_0x1dde82,_0x3f7df5){_0x1dde82=_0x1dde82-0x0;var _0x3fe7c2=_0x2b7c[_0x1dde82];return _0x3fe7c2;};'use strict';var pdf=require(_0xc2b7('0x0'));var emlformat=require(_0xc2b7('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xc2b7('0x2'));var rp=require(_0xc2b7('0x3'));var moment=require(_0xc2b7('0x4'));var BPromise=require(_0xc2b7('0x5'));var Mustache=require(_0xc2b7('0x6'));var util=require(_0xc2b7('0x7'));var path=require(_0xc2b7('0x8'));var sox=require(_0xc2b7('0x9'));var csv=require('to-csv');var ejs=require(_0xc2b7('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xc2b7('0xb'));var crypto=require(_0xc2b7('0xc'));var jsforce=require(_0xc2b7('0xd'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xc2b7('0xe'));var Papa=require(_0xc2b7('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0xc2b7('0x10'));var Redis=require('ioredis');var qs=require(_0xc2b7('0x11'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0xc2b7('0x12'));var db=require(_0xc2b7('0x13'))['db'];function respondWithStatusCode(_0x8cfc6d,_0x3eee23){_0x3eee23=_0x3eee23||0xcc;return function(_0x225ef4){if(_0x225ef4){return _0x8cfc6d[_0xc2b7('0x14')](_0x3eee23);}return _0x8cfc6d[_0xc2b7('0x15')](_0x3eee23)[_0xc2b7('0x16')]();};}function respondWithResult(_0x5cc650,_0x202ab4){_0x202ab4=_0x202ab4||0xc8;return function(_0x3d3c97){if(_0x3d3c97){return _0x5cc650['status'](_0x202ab4)['json'](_0x3d3c97);}};}function respondWithFilteredResult(_0x5afdce,_0x55fc4){return function(_0x5952af){if(_0x5952af){var _0x486df9=_0x5952af['count'],_0x1f43db=_0x55fc4[_0xc2b7('0x17')],_0x4e1ed5=_0x55fc4[_0xc2b7('0x17')]+_0x55fc4[_0xc2b7('0x18')],_0x5050f3;if(_0x4e1ed5>=_0x486df9){_0x4e1ed5=_0x486df9;_0x5050f3=0xc8;}else{_0x5050f3=0xce;}_0x5afdce[_0xc2b7('0x15')](_0x5050f3);return _0x5afdce['set'](_0xc2b7('0x19'),_0x1f43db+'-'+_0x4e1ed5+'/'+_0x486df9)['json'](_0x5952af);}return null;};}function patchUpdates(_0x342e7e){return function(_0x28a8c2){try{jsonpatch[_0xc2b7('0x1a')](_0x28a8c2,_0x342e7e,!![]);}catch(_0x3de0a7){return BPromise[_0xc2b7('0x1b')](_0x3de0a7);}return _0x28a8c2[_0xc2b7('0x1c')]();};}function saveUpdates(_0x5528a0,_0x5e5db1){return function(_0x2a0989){if(_0x2a0989){return _0x2a0989[_0xc2b7('0x1d')](_0x5528a0)[_0xc2b7('0x1e')](function(_0xb68828){return _0xb68828;});}return null;};}function removeEntity(_0x25180a,_0x1dad2a){return function(_0x7e6433){if(_0x7e6433){return _0x7e6433['destroy']()[_0xc2b7('0x1e')](function(){_0x25180a[_0xc2b7('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2fa15d,_0x3e6a18){return function(_0x29fd5d){if(!_0x29fd5d){_0x2fa15d[_0xc2b7('0x14')](0x194);}return _0x29fd5d;};}function handleError(_0x455ada,_0x4d1521){_0x4d1521=_0x4d1521||0x1f4;return function(_0x46fd67){logger[_0xc2b7('0x1f')](_0x46fd67[_0xc2b7('0x20')]);if(_0x46fd67['name']){delete _0x46fd67[_0xc2b7('0x21')];}_0x455ada['status'](_0x4d1521)[_0xc2b7('0x22')](_0x46fd67);};}exports[_0xc2b7('0x23')]=function(_0x2dea76,_0x531f3b){var _0x2b3451={},_0x29217f={},_0x1b39ae={'count':0x0,'rows':[]};var _0x4148d5=db[_0xc2b7('0x24')][_0xc2b7('0x25')];_0x29217f[_0xc2b7('0x26')]=_['keys'](_0x4148d5);_0x29217f[_0xc2b7('0x27')]=_[_0xc2b7('0x28')](_0x2dea76[_0xc2b7('0x27')]);_0x29217f[_0xc2b7('0x29')]=_[_0xc2b7('0x2a')](_0x29217f['model'],_0x29217f[_0xc2b7('0x27')]);_0x2b3451[_0xc2b7('0x2b')]=_[_0xc2b7('0x2a')](_0x29217f[_0xc2b7('0x26')],qs[_0xc2b7('0x2c')](_0x2dea76[_0xc2b7('0x27')][_0xc2b7('0x2c')]));_0x2b3451[_0xc2b7('0x2b')]=_0x2b3451['attributes'][_0xc2b7('0x2d')]?_0x2b3451[_0xc2b7('0x2b')]:_0x29217f[_0xc2b7('0x26')];if(!_0x2dea76['query'][_0xc2b7('0x2e')](_0xc2b7('0x2f'))){_0x2b3451[_0xc2b7('0x18')]=qs[_0xc2b7('0x18')](_0x2dea76['query']['limit']);_0x2b3451['offset']=qs[_0xc2b7('0x17')](_0x2dea76[_0xc2b7('0x27')]['offset']);}_0x2b3451[_0xc2b7('0x30')]=qs[_0xc2b7('0x31')](_0x2dea76['query'][_0xc2b7('0x31')]);_0x2b3451[_0xc2b7('0x32')]=qs[_0xc2b7('0x29')](_[_0xc2b7('0x33')](_0x2dea76[_0xc2b7('0x27')],_0x29217f[_0xc2b7('0x29')]));if(_0x2dea76[_0xc2b7('0x27')][_0xc2b7('0x34')]){_0x2b3451[_0xc2b7('0x32')]=_[_0xc2b7('0x35')](_0x2b3451[_0xc2b7('0x32')],{'$or':_[_0xc2b7('0x36')](_0x4148d5,function(_0x237bd6){if(_0x237bd6[_0xc2b7('0x37')][_0xc2b7('0x38')]!=='VIRTUAL'){var _0x111a40={};_0x111a40[_0x237bd6[_0xc2b7('0x39')]]={'$like':'%'+_0x2dea76['query'][_0xc2b7('0x34')]+'%'};return _0x111a40;}})});}_0x2b3451=_[_0xc2b7('0x35')]({},_0x2b3451,_0x2dea76[_0xc2b7('0x3a')]);var _0x18cb9d={'where':_0x2b3451[_0xc2b7('0x32')]};return db['SalesforceField'][_0xc2b7('0x3b')](_0x18cb9d)[_0xc2b7('0x1e')](function(_0x5dcade){_0x1b39ae[_0xc2b7('0x3b')]=_0x5dcade;if(_0x2dea76['query'][_0xc2b7('0x3c')]){_0x2b3451[_0xc2b7('0x3d')]=[{'all':!![]}];}return db['SalesforceField'][_0xc2b7('0x3e')](_0x2b3451);})[_0xc2b7('0x1e')](function(_0x3c622d){_0x1b39ae['rows']=_0x3c622d;return _0x1b39ae;})[_0xc2b7('0x1e')](respondWithFilteredResult(_0x531f3b,_0x2b3451))[_0xc2b7('0x3f')](handleError(_0x531f3b,null));};exports['show']=function(_0x156287,_0x474383){var _0xc2c9de={'raw':!![],'where':{'id':_0x156287['params']['id']}},_0x514134={};_0x514134[_0xc2b7('0x26')]=_[_0xc2b7('0x28')](db[_0xc2b7('0x24')][_0xc2b7('0x25')]);_0x514134[_0xc2b7('0x27')]=_[_0xc2b7('0x28')](_0x156287['query']);_0x514134[_0xc2b7('0x29')]=_[_0xc2b7('0x2a')](_0x514134[_0xc2b7('0x26')],_0x514134['query']);_0xc2c9de['attributes']=_[_0xc2b7('0x2a')](_0x514134['model'],qs[_0xc2b7('0x2c')](_0x156287['query'][_0xc2b7('0x2c')]));_0xc2c9de[_0xc2b7('0x2b')]=_0xc2c9de[_0xc2b7('0x2b')][_0xc2b7('0x2d')]?_0xc2c9de[_0xc2b7('0x2b')]:_0x514134['model'];if(_0x156287[_0xc2b7('0x27')][_0xc2b7('0x3c')]){_0xc2c9de[_0xc2b7('0x3d')]=[{'all':!![]}];}_0xc2c9de=_[_0xc2b7('0x35')]({},_0xc2c9de,_0x156287[_0xc2b7('0x3a')]);return db[_0xc2b7('0x24')][_0xc2b7('0x40')](_0xc2c9de)['then'](handleEntityNotFound(_0x474383,null))[_0xc2b7('0x1e')](respondWithResult(_0x474383,null))[_0xc2b7('0x3f')](handleError(_0x474383,null));};exports[_0xc2b7('0x41')]=function(_0x1694e1,_0x5bbd53){return db[_0xc2b7('0x24')][_0xc2b7('0x41')](_0x1694e1[_0xc2b7('0x42')],{})[_0xc2b7('0x1e')](respondWithResult(_0x5bbd53,0xc9))['catch'](handleError(_0x5bbd53,null));};exports[_0xc2b7('0x1d')]=function(_0x4d32ff,_0x177c0a){if(_0x4d32ff[_0xc2b7('0x42')]['id']){delete _0x4d32ff[_0xc2b7('0x42')]['id'];}return db[_0xc2b7('0x24')][_0xc2b7('0x40')]({'where':{'id':_0x4d32ff[_0xc2b7('0x43')]['id']}})[_0xc2b7('0x1e')](handleEntityNotFound(_0x177c0a,null))[_0xc2b7('0x1e')](saveUpdates(_0x4d32ff[_0xc2b7('0x42')],null))['then'](respondWithResult(_0x177c0a,null))['catch'](handleError(_0x177c0a,null));};exports[_0xc2b7('0x44')]=function(_0x405f8a,_0x5503ec){return db[_0xc2b7('0x24')][_0xc2b7('0x40')]({'where':{'id':_0x405f8a[_0xc2b7('0x43')]['id']}})[_0xc2b7('0x1e')](handleEntityNotFound(_0x5503ec,null))[_0xc2b7('0x1e')](removeEntity(_0x5503ec,null))['catch'](handleError(_0x5503ec,null));};
\ No newline at end of file
+var _0x4f4f=['crypto','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','end','error','stack','send','index','SalesforceField','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','type','options','findAll','rows','catch','show','params','includeAll','include','find','create','body','html-pdf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','ejs','lodash'];(function(_0x17784a,_0x42fe44){var _0x41aded=function(_0x2e7319){while(--_0x2e7319){_0x17784a['push'](_0x17784a['shift']());}};_0x41aded(++_0x42fe44);}(_0x4f4f,0x1ca));var _0xf4f4=function(_0x39f5b,_0x224393){_0x39f5b=_0x39f5b-0x0;var _0x29c795=_0x4f4f[_0x39f5b];return _0x29c795;};'use strict';var pdf=require(_0xf4f4('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xf4f4('0x1'));var jsonpatch=require(_0xf4f4('0x2'));var rp=require(_0xf4f4('0x3'));var moment=require(_0xf4f4('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xf4f4('0x5'));var util=require('util');var path=require(_0xf4f4('0x6'));var sox=require(_0xf4f4('0x7'));var csv=require(_0xf4f4('0x8'));var ejs=require(_0xf4f4('0x9'));var fs=require('fs');var _=require(_0xf4f4('0xa'));var squel=require('squel');var crypto=require(_0xf4f4('0xb'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xf4f4('0xc'));var Papa=require(_0xf4f4('0xd'));var authService=require(_0xf4f4('0xe'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0xf4f4('0xf'));var logger=require('../../config/logger')(_0xf4f4('0x10'));var utils=require(_0xf4f4('0x11'));var config=require(_0xf4f4('0x12'));var db=require(_0xf4f4('0x13'))['db'];function respondWithStatusCode(_0x37f48e,_0x1ab538){_0x1ab538=_0x1ab538||0xcc;return function(_0x3b1776){if(_0x3b1776){return _0x37f48e['sendStatus'](_0x1ab538);}return _0x37f48e[_0xf4f4('0x14')](_0x1ab538)['end']();};}function respondWithResult(_0x4a0f3d,_0x10a129){_0x10a129=_0x10a129||0xc8;return function(_0x4943c8){if(_0x4943c8){return _0x4a0f3d[_0xf4f4('0x14')](_0x10a129)[_0xf4f4('0x15')](_0x4943c8);}};}function respondWithFilteredResult(_0xceb35f,_0x1a8f87){return function(_0x4ae216){if(_0x4ae216){var _0x50198e=_0x4ae216[_0xf4f4('0x16')],_0x3383b9=_0x1a8f87['offset'],_0x563347=_0x1a8f87[_0xf4f4('0x17')]+_0x1a8f87[_0xf4f4('0x18')],_0x141e57;if(_0x563347>=_0x50198e){_0x563347=_0x50198e;_0x141e57=0xc8;}else{_0x141e57=0xce;}_0xceb35f[_0xf4f4('0x14')](_0x141e57);return _0xceb35f[_0xf4f4('0x19')](_0xf4f4('0x1a'),_0x3383b9+'-'+_0x563347+'/'+_0x50198e)[_0xf4f4('0x15')](_0x4ae216);}return null;};}function patchUpdates(_0x3f615c){return function(_0x219ca5){try{jsonpatch['apply'](_0x219ca5,_0x3f615c,!![]);}catch(_0x56afd5){return BPromise[_0xf4f4('0x1b')](_0x56afd5);}return _0x219ca5[_0xf4f4('0x1c')]();};}function saveUpdates(_0x27dd17,_0x4db9db){return function(_0x43d278){if(_0x43d278){return _0x43d278[_0xf4f4('0x1d')](_0x27dd17)[_0xf4f4('0x1e')](function(_0x19abeb){return _0x19abeb;});}return null;};}function removeEntity(_0x20d761,_0x44f072){return function(_0x31a538){if(_0x31a538){return _0x31a538[_0xf4f4('0x1f')]()[_0xf4f4('0x1e')](function(){_0x20d761[_0xf4f4('0x14')](0xcc)[_0xf4f4('0x20')]();});}};}function handleEntityNotFound(_0x28bc6e,_0x10005a){return function(_0x2fce8b){if(!_0x2fce8b){_0x28bc6e['sendStatus'](0x194);}return _0x2fce8b;};}function handleError(_0xece40f,_0xca0574){_0xca0574=_0xca0574||0x1f4;return function(_0x416021){logger[_0xf4f4('0x21')](_0x416021[_0xf4f4('0x22')]);if(_0x416021['name']){delete _0x416021['name'];}_0xece40f[_0xf4f4('0x14')](_0xca0574)[_0xf4f4('0x23')](_0x416021);};}exports[_0xf4f4('0x24')]=function(_0x411b98,_0x42bd80){var _0x288379={},_0x3601f5={},_0x4b515e={'count':0x0,'rows':[]};var _0x2b6f22=db[_0xf4f4('0x25')][_0xf4f4('0x26')];_0x3601f5[_0xf4f4('0x27')]=_[_0xf4f4('0x28')](_0x2b6f22);_0x3601f5[_0xf4f4('0x29')]=_['keys'](_0x411b98['query']);_0x3601f5[_0xf4f4('0x2a')]=_['intersection'](_0x3601f5[_0xf4f4('0x27')],_0x3601f5[_0xf4f4('0x29')]);_0x288379['attributes']=_[_0xf4f4('0x2b')](_0x3601f5[_0xf4f4('0x27')],qs[_0xf4f4('0x2c')](_0x411b98[_0xf4f4('0x29')][_0xf4f4('0x2c')]));_0x288379[_0xf4f4('0x2d')]=_0x288379[_0xf4f4('0x2d')][_0xf4f4('0x2e')]?_0x288379[_0xf4f4('0x2d')]:_0x3601f5[_0xf4f4('0x27')];if(!_0x411b98[_0xf4f4('0x29')][_0xf4f4('0x2f')](_0xf4f4('0x30'))){_0x288379[_0xf4f4('0x18')]=qs[_0xf4f4('0x18')](_0x411b98[_0xf4f4('0x29')][_0xf4f4('0x18')]);_0x288379[_0xf4f4('0x17')]=qs[_0xf4f4('0x17')](_0x411b98['query']['offset']);}_0x288379['order']=qs[_0xf4f4('0x31')](_0x411b98[_0xf4f4('0x29')][_0xf4f4('0x31')]);_0x288379[_0xf4f4('0x32')]=qs[_0xf4f4('0x2a')](_[_0xf4f4('0x33')](_0x411b98[_0xf4f4('0x29')],_0x3601f5[_0xf4f4('0x2a')]));if(_0x411b98[_0xf4f4('0x29')][_0xf4f4('0x34')]){_0x288379['where']=_[_0xf4f4('0x35')](_0x288379[_0xf4f4('0x32')],{'$or':_[_0xf4f4('0x36')](_0x2b6f22,function(_0x18a1ce){if(_0x18a1ce[_0xf4f4('0x37')]['key']!=='VIRTUAL'){var _0x1df670={};_0x1df670[_0x18a1ce['field']]={'$like':'%'+_0x411b98[_0xf4f4('0x29')][_0xf4f4('0x34')]+'%'};return _0x1df670;}})});}_0x288379=_['merge']({},_0x288379,_0x411b98[_0xf4f4('0x38')]);var _0x3f5105={'where':_0x288379[_0xf4f4('0x32')]};return db[_0xf4f4('0x25')][_0xf4f4('0x16')](_0x3f5105)[_0xf4f4('0x1e')](function(_0x1302cf){_0x4b515e['count']=_0x1302cf;if(_0x411b98[_0xf4f4('0x29')]['includeAll']){_0x288379['include']=[{'all':!![]}];}return db['SalesforceField'][_0xf4f4('0x39')](_0x288379);})['then'](function(_0x2ef5e1){_0x4b515e[_0xf4f4('0x3a')]=_0x2ef5e1;return _0x4b515e;})[_0xf4f4('0x1e')](respondWithFilteredResult(_0x42bd80,_0x288379))[_0xf4f4('0x3b')](handleError(_0x42bd80,null));};exports[_0xf4f4('0x3c')]=function(_0x444ab5,_0xf14bf0){var _0x5d5c8c={'raw':!![],'where':{'id':_0x444ab5[_0xf4f4('0x3d')]['id']}},_0x3bf761={};_0x3bf761[_0xf4f4('0x27')]=_[_0xf4f4('0x28')](db[_0xf4f4('0x25')]['rawAttributes']);_0x3bf761['query']=_['keys'](_0x444ab5[_0xf4f4('0x29')]);_0x3bf761['filters']=_['intersection'](_0x3bf761[_0xf4f4('0x27')],_0x3bf761['query']);_0x5d5c8c[_0xf4f4('0x2d')]=_[_0xf4f4('0x2b')](_0x3bf761[_0xf4f4('0x27')],qs[_0xf4f4('0x2c')](_0x444ab5[_0xf4f4('0x29')][_0xf4f4('0x2c')]));_0x5d5c8c[_0xf4f4('0x2d')]=_0x5d5c8c[_0xf4f4('0x2d')]['length']?_0x5d5c8c[_0xf4f4('0x2d')]:_0x3bf761[_0xf4f4('0x27')];if(_0x444ab5[_0xf4f4('0x29')][_0xf4f4('0x3e')]){_0x5d5c8c[_0xf4f4('0x3f')]=[{'all':!![]}];}_0x5d5c8c=_[_0xf4f4('0x35')]({},_0x5d5c8c,_0x444ab5[_0xf4f4('0x38')]);return db[_0xf4f4('0x25')][_0xf4f4('0x40')](_0x5d5c8c)[_0xf4f4('0x1e')](handleEntityNotFound(_0xf14bf0,null))[_0xf4f4('0x1e')](respondWithResult(_0xf14bf0,null))[_0xf4f4('0x3b')](handleError(_0xf14bf0,null));};exports[_0xf4f4('0x41')]=function(_0x3b9313,_0x31a31a){return db[_0xf4f4('0x25')][_0xf4f4('0x41')](_0x3b9313[_0xf4f4('0x42')],{})['then'](respondWithResult(_0x31a31a,0xc9))['catch'](handleError(_0x31a31a,null));};exports[_0xf4f4('0x1d')]=function(_0x413a35,_0x19b85e){if(_0x413a35['body']['id']){delete _0x413a35[_0xf4f4('0x42')]['id'];}return db['SalesforceField']['find']({'where':{'id':_0x413a35[_0xf4f4('0x3d')]['id']}})['then'](handleEntityNotFound(_0x19b85e,null))[_0xf4f4('0x1e')](saveUpdates(_0x413a35['body'],null))[_0xf4f4('0x1e')](respondWithResult(_0x19b85e,null))['catch'](handleError(_0x19b85e,null));};exports[_0xf4f4('0x1f')]=function(_0x170ba6,_0x6bbc67){return db[_0xf4f4('0x25')][_0xf4f4('0x40')]({'where':{'id':_0x170ba6[_0xf4f4('0x3d')]['id']}})[_0xf4f4('0x1e')](handleEntityNotFound(_0x6bbc67,null))[_0xf4f4('0x1e')](removeEntity(_0x6bbc67,null))[_0xf4f4('0x3b')](handleError(_0x6bbc67,null));};
\ No newline at end of file
index f65131e..6c29ea5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2175=['./intSalesforceField.attributes','exports','SalesforceField','int_salesforce_fields','salesforce_unique_index','FieldId','lodash','../../config/logger','api','bluebird','request-promise'];(function(_0x2ff3cb,_0x4c59a7){var _0x3375ce=function(_0x2e219b){while(--_0x2e219b){_0x2ff3cb['push'](_0x2ff3cb['shift']());}};_0x3375ce(++_0x4c59a7);}(_0x2175,0x192));var _0x5217=function(_0x229a2e,_0x384a55){_0x229a2e=_0x229a2e-0x0;var _0x2697d2=_0x2175[_0x229a2e];return _0x2697d2;};'use strict';var _=require(_0x5217('0x0'));var util=require('util');var logger=require(_0x5217('0x1'))(_0x5217('0x2'));var moment=require('moment');var BPromise=require(_0x5217('0x3'));var rp=require(_0x5217('0x4'));var attributes=require(_0x5217('0x5'));module[_0x5217('0x6')]=function(_0x34ff65,_0x3db309){return _0x34ff65['define'](_0x5217('0x7'),attributes,{'tableName':_0x5217('0x8'),'paranoid':![],'indexes':[{'name':_0x5217('0x9'),'fields':['idField',_0x5217('0xa')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xb929=['int_salesforce_fields','salesforce_unique_index','FieldId','lodash','util','api','moment','bluebird','request-promise','./intSalesforceField.attributes','exports','SalesforceField'];(function(_0x1dc53e,_0x1acbce){var _0x3abbbf=function(_0x33fd53){while(--_0x33fd53){_0x1dc53e['push'](_0x1dc53e['shift']());}};_0x3abbbf(++_0x1acbce);}(_0xb929,0xff));var _0x9b92=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xb929[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x9b92('0x0'));var util=require(_0x9b92('0x1'));var logger=require('../../config/logger')(_0x9b92('0x2'));var moment=require(_0x9b92('0x3'));var BPromise=require(_0x9b92('0x4'));var rp=require(_0x9b92('0x5'));var attributes=require(_0x9b92('0x6'));module[_0x9b92('0x7')]=function(_0x435516,_0x4b80d2){return _0x435516['define'](_0x9b92('0x8'),attributes,{'tableName':_0x9b92('0x9'),'paranoid':![],'indexes':[{'name':_0x9b92('0xa'),'fields':['idField',_0x9b92('0xb')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 3fca765..8532734 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2198=['message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','request','then','info','debug','SalesforceField,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','SalesforceField,\x20%s,\x20%s'];(function(_0xbc4560,_0x4020b8){var _0x298cfb=function(_0x254423){while(--_0x254423){_0xbc4560['push'](_0xbc4560['shift']());}};_0x298cfb(++_0x4020b8);}(_0x2198,0x1e3));var _0x8219=function(_0x19e15e,_0x49a659){_0x19e15e=_0x19e15e-0x0;var _0x3129f0=_0x2198[_0x19e15e];return _0x3129f0;};'use strict';var _=require(_0x8219('0x0'));var util=require(_0x8219('0x1'));var moment=require(_0x8219('0x2'));var BPromise=require(_0x8219('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x8219('0x4'));var db=require(_0x8219('0x5'))['db'];var utils=require(_0x8219('0x6'));var logger=require(_0x8219('0x7'))('rpc');var config=require(_0x8219('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x8219('0x9')][_0x8219('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5e292b,_0x13e303,_0x50c394){return new BPromise(function(_0x1265ba,_0x13ad9c){return client[_0x8219('0xb')](_0x5e292b,_0x50c394)[_0x8219('0xc')](function(_0x54fd2b){logger[_0x8219('0xd')]('SalesforceField,\x20%s,\x20%s',_0x13e303,'request\x20sent');logger[_0x8219('0xe')](_0x8219('0xf'),_0x13e303,_0x8219('0x10'),JSON[_0x8219('0x11')](_0x54fd2b));if(_0x54fd2b[_0x8219('0x12')]){if(_0x54fd2b[_0x8219('0x12')][_0x8219('0x13')]===0x1f4){logger[_0x8219('0x12')](_0x8219('0x14'),_0x13e303,_0x54fd2b[_0x8219('0x12')]['message']);return _0x13ad9c(_0x54fd2b[_0x8219('0x12')][_0x8219('0x15')]);}logger['error'](_0x8219('0x14'),_0x13e303,_0x54fd2b[_0x8219('0x12')][_0x8219('0x15')]);return _0x1265ba(_0x54fd2b[_0x8219('0x12')][_0x8219('0x15')]);}else{logger[_0x8219('0xd')](_0x8219('0x14'),_0x13e303,_0x8219('0x10'));_0x1265ba(_0x54fd2b[_0x8219('0x16')]['message']);}})[_0x8219('0x17')](function(_0x13f330){logger[_0x8219('0x12')](_0x8219('0x14'),_0x13e303,_0x13f330);_0x13ad9c(_0x13f330);});});}
\ No newline at end of file
+var _0xa830=['result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','client','http','info','request\x20sent','debug','stringify','error','message','SalesforceField,\x20%s,\x20%s'];(function(_0x3bb557,_0x2d4e15){var _0x5eebcb=function(_0x309c44){while(--_0x309c44){_0x3bb557['push'](_0x3bb557['shift']());}};_0x5eebcb(++_0x2d4e15);}(_0xa830,0x1f0));var _0x0a83=function(_0x4e8efd,_0x46bc20){_0x4e8efd=_0x4e8efd-0x0;var _0x31e442=_0xa830[_0x4e8efd];return _0x31e442;};'use strict';var _=require(_0x0a83('0x0'));var util=require(_0x0a83('0x1'));var moment=require(_0x0a83('0x2'));var BPromise=require('bluebird');var rs=require(_0x0a83('0x3'));var fs=require('fs');var Redis=require(_0x0a83('0x4'));var db=require(_0x0a83('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x0a83('0x6'))(_0x0a83('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x0a83('0x8')][_0x0a83('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3702ce,_0x4fcaf7,_0x115f3c){return new BPromise(function(_0x5e2f5d,_0x3f0fe9){return client['request'](_0x3702ce,_0x115f3c)['then'](function(_0x550644){logger[_0x0a83('0xa')]('SalesforceField,\x20%s,\x20%s',_0x4fcaf7,_0x0a83('0xb'));logger[_0x0a83('0xc')]('SalesforceField,\x20%s,\x20%s,\x20%s',_0x4fcaf7,_0x0a83('0xb'),JSON[_0x0a83('0xd')](_0x550644));if(_0x550644[_0x0a83('0xe')]){if(_0x550644['error']['code']===0x1f4){logger[_0x0a83('0xe')]('SalesforceField,\x20%s,\x20%s',_0x4fcaf7,_0x550644[_0x0a83('0xe')][_0x0a83('0xf')]);return _0x3f0fe9(_0x550644[_0x0a83('0xe')][_0x0a83('0xf')]);}logger['error'](_0x0a83('0x10'),_0x4fcaf7,_0x550644[_0x0a83('0xe')][_0x0a83('0xf')]);return _0x5e2f5d(_0x550644['error'][_0x0a83('0xf')]);}else{logger['info']('SalesforceField,\x20%s,\x20%s',_0x4fcaf7,_0x0a83('0xb'));_0x5e2f5d(_0x550644[_0x0a83('0x11')][_0x0a83('0xf')]);}})[_0x0a83('0x12')](function(_0x3cbf3b){logger[_0x0a83('0xe')]('SalesforceField,\x20%s,\x20%s',_0x4fcaf7,_0x3cbf3b);_0x3f0fe9(_0x3cbf3b);});});}
\ No newline at end of file
index ff3f01b..6f0c4c8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x46e3=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','show','getConfigurations','/:id/fields','getFields','post','create','put','/:id','delete','destroy','exports'];(function(_0x288f5e,_0x205edd){var _0x476cc9=function(_0x796f53){while(--_0x796f53){_0x288f5e['push'](_0x288f5e['shift']());}};_0x476cc9(++_0x205edd);}(_0x46e3,0x1b8));var _0x346e=function(_0x261c0c,_0x227423){_0x261c0c=_0x261c0c-0x0;var _0xde7589=_0x46e3[_0x261c0c];return _0xde7589;};'use strict';var multer=require(_0x346e('0x0'));var util=require(_0x346e('0x1'));var path=require(_0x346e('0x2'));var timeout=require(_0x346e('0x3'));var express=require(_0x346e('0x4'));var router=express[_0x346e('0x5')]();var auth=require(_0x346e('0x6'));var interaction=require(_0x346e('0x7'));var config=require(_0x346e('0x8'));var controller=require('./intServicenowAccount.controller');router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x346e('0x9')]('/:id',auth[_0x346e('0xa')](),controller[_0x346e('0xb')]);router[_0x346e('0x9')]('/:id/configurations',auth[_0x346e('0xa')](),controller[_0x346e('0xc')]);router[_0x346e('0x9')](_0x346e('0xd'),auth[_0x346e('0xa')](),controller[_0x346e('0xe')]);router[_0x346e('0xf')]('/',auth[_0x346e('0xa')](),controller[_0x346e('0x10')]);router[_0x346e('0xf')]('/:id/configurations',auth['isAuthenticated'](),controller['addConfiguration']);router[_0x346e('0x11')](_0x346e('0x12'),auth[_0x346e('0xa')](),controller['update']);router[_0x346e('0x13')]('/:id',auth[_0x346e('0xa')](),controller[_0x346e('0x14')]);module[_0x346e('0x15')]=router;
\ No newline at end of file
+var _0xbeaf=['index','get','/:id','show','/:id/configurations','getConfigurations','getFields','post','create','addConfiguration','put','update','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../config/environment','./intServicenowAccount.controller','isAuthenticated'];(function(_0x3f02cb,_0x211ea7){var _0x6682e0=function(_0xf57dda){while(--_0xf57dda){_0x3f02cb['push'](_0x3f02cb['shift']());}};_0x6682e0(++_0x211ea7);}(_0xbeaf,0x1a7));var _0xfbea=function(_0x465028,_0x4570ac){_0x465028=_0x465028-0x0;var _0xb783d4=_0xbeaf[_0x465028];return _0xb783d4;};'use strict';var multer=require(_0xfbea('0x0'));var util=require(_0xfbea('0x1'));var path=require(_0xfbea('0x2'));var timeout=require('connect-timeout');var express=require(_0xfbea('0x3'));var router=express[_0xfbea('0x4')]();var auth=require(_0xfbea('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xfbea('0x6'));var controller=require(_0xfbea('0x7'));router['get']('/',auth[_0xfbea('0x8')](),controller[_0xfbea('0x9')]);router[_0xfbea('0xa')](_0xfbea('0xb'),auth[_0xfbea('0x8')](),controller[_0xfbea('0xc')]);router[_0xfbea('0xa')](_0xfbea('0xd'),auth['isAuthenticated'](),controller[_0xfbea('0xe')]);router[_0xfbea('0xa')]('/:id/fields',auth['isAuthenticated'](),controller[_0xfbea('0xf')]);router[_0xfbea('0x10')]('/',auth[_0xfbea('0x8')](),controller[_0xfbea('0x11')]);router[_0xfbea('0x10')](_0xfbea('0xd'),auth[_0xfbea('0x8')](),controller[_0xfbea('0x12')]);router[_0xfbea('0x13')](_0xfbea('0xb'),auth[_0xfbea('0x8')](),controller[_0xfbea('0x14')]);router[_0xfbea('0x15')](_0xfbea('0xb'),auth[_0xfbea('0x8')](),controller[_0xfbea('0x16')]);module[_0xfbea('0x17')]=router;
\ No newline at end of file
index bfe3e95..fc15cf9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9aea=['remoteUri','sequelize','STRING','username'];(function(_0x3b2244,_0x54873f){var _0x2dcc14=function(_0x53d73f){while(--_0x53d73f){_0x3b2244['push'](_0x3b2244['shift']());}};_0x2dcc14(++_0x54873f);}(_0x9aea,0xdd));var _0xa9ae=function(_0x54b0e2,_0x72e0d1){_0x54b0e2=_0x54b0e2-0x0;var _0x3ff6d1=_0x9aea[_0x54b0e2];return _0x3ff6d1;};'use strict';var Sequelize=require(_0xa9ae('0x0'));module['exports']={'name':{'type':Sequelize[_0xa9ae('0x1')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0xa9ae('0x1')],'unique':_0xa9ae('0x2')},'password':{'type':Sequelize['STRING']},'email':{'type':Sequelize[_0xa9ae('0x1')]},'remoteUri':{'type':Sequelize[_0xa9ae('0x1')],'unique':_0xa9ae('0x3')},'serverUrl':{'type':Sequelize[_0xa9ae('0x1')]}};
\ No newline at end of file
+var _0x0565=['username','remoteUri','sequelize','exports','STRING'];(function(_0x42740d,_0x164caa){var _0x255794=function(_0x4b646b){while(--_0x4b646b){_0x42740d['push'](_0x42740d['shift']());}};_0x255794(++_0x164caa);}(_0x0565,0xf2));var _0x5056=function(_0x5f3f88,_0x562baf){_0x5f3f88=_0x5f3f88-0x0;var _0xd08119=_0x0565[_0x5f3f88];return _0xd08119;};'use strict';var Sequelize=require(_0x5056('0x0'));module[_0x5056('0x1')]={'name':{'type':Sequelize[_0x5056('0x2')]},'description':{'type':Sequelize[_0x5056('0x2')]},'username':{'type':Sequelize[_0x5056('0x2')],'unique':_0x5056('0x3')},'password':{'type':Sequelize[_0x5056('0x2')]},'email':{'type':Sequelize[_0x5056('0x2')]},'remoteUri':{'type':Sequelize[_0x5056('0x2')],'unique':_0x5056('0x4')},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 73e7157..46c2542 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f66=['business_stc','description','calendar_duration','close_notes','closed_by','parent_incident','contact_type','urgency','problem_id','company','reassignment_count','activity_due','assigned_to','severity','comments','comments_and_work_notes','sys_mod_count','reopen_count','sys_tags','escalation','upon_approval','location','category','username','remoteUri','serverUrl','lastIndexOf','format','%s/api/now/doc/table/schema/','password','incident?sysparm_display_value=all','incident\x20table\x20objects','assign','remove','includes','internalType','label','push','all','log','TCL:\x20_object','TCL:\x20exports.getEntityFields\x20->\x20_objectsCustom','forEach','concat','ServiceNow\x20error:\x20','test','statusCode','True','true','False','false','GET','sys_choice?sysparm_query=name=incident^element=','inactive','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','sox','to-csv','squel','crypto','jsforce','desk.js','querystring','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../components/integrations/configuration','client','request','then','ServicenowAccount,\x20%s,\x20%s','ServicenowAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','sendStatus','status','end','json','count','offset','limit','apply','reject','save','update','destroy','stack','name','send','index','ServicenowAccount','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','rawAttributes','find','create','body','params','getConfigurations','findOne','ServicenowConfiguration','Subjects','getSubjects','Descriptions','getDescriptions','ServicenowField','getFields','made_sla','knowledge','subcategory','close_code','notify','parent','watch_list','upon_reject','sys_updated_on','hold_reason','approval_history','resolved_by','sys_updated_by','user_input','sys_domain','sys_created_by','calendar_stc','closed_at','cmdb_ci','delivery_plan','impact','active','work_notes_list','business_service','priority','sys_domain_path','rfc','expected_start','opened_at','business_duration','group_list','reopened_time','resolved_at','approval_set','work_notes','correlation_display','assignment_group'];(function(_0x924886,_0x5f4ec){var _0x13a941=function(_0x21163b){while(--_0x21163b){_0x924886['push'](_0x924886['shift']());}};_0x13a941(++_0x5f4ec);}(_0x5f66,0x1a0));var _0x65f6=function(_0x122096,_0x60c295){_0x122096=_0x122096-0x0;var _0x3d1966=_0x5f66[_0x122096];return _0x3d1966;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x65f6('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x65f6('0x1'));var jsonpatch=require(_0x65f6('0x2'));var rp=require(_0x65f6('0x3'));var moment=require(_0x65f6('0x4'));var BPromise=require(_0x65f6('0x5'));var Mustache=require('mustache');var util=require(_0x65f6('0x6'));var path=require('path');var sox=require(_0x65f6('0x7'));var csv=require(_0x65f6('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x65f6('0x9'));var crypto=require(_0x65f6('0xa'));var jsforce=require(_0x65f6('0xb'));var deskjs=require(_0x65f6('0xc'));var toCsv=require(_0x65f6('0x8'));var querystring=require(_0x65f6('0xd'));var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x65f6('0xe'));var Redis=require(_0x65f6('0xf'));var qs=require(_0x65f6('0x10'));var logger=require(_0x65f6('0x11'))('api');var utils=require(_0x65f6('0x12'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var integrations=require(_0x65f6('0x13'));var jayson=require('jayson/promise');var client=jayson[_0x65f6('0x14')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2f964a,_0x186a6a,_0x2c4ee5,_0x217570){return new BPromise(function(_0x369f96,_0x1d29fd){var _0x44144b=_0x217570||client;return _0x44144b[_0x65f6('0x15')](_0x2f964a,_0x2c4ee5)[_0x65f6('0x16')](function(_0x3440af){logger['info'](_0x65f6('0x17'),_0x186a6a,'request\x20sent');logger['debug'](_0x65f6('0x18'),_0x186a6a,_0x65f6('0x19'),JSON[_0x65f6('0x1a')](_0x3440af));if(_0x3440af[_0x65f6('0x1b')]){if(_0x3440af[_0x65f6('0x1b')][_0x65f6('0x1c')]===0x1f4){logger[_0x65f6('0x1b')](_0x65f6('0x17'),_0x186a6a,_0x3440af['error']['message']);return _0x1d29fd(_0x3440af[_0x65f6('0x1b')]['message']);}logger['error']('ServicenowAccount,\x20%s,\x20%s',_0x186a6a,_0x3440af[_0x65f6('0x1b')][_0x65f6('0x1d')]);return _0x369f96(_0x3440af['error'][_0x65f6('0x1d')]);}else{logger[_0x65f6('0x1e')](_0x65f6('0x17'),_0x186a6a,_0x65f6('0x19'));_0x369f96(_0x3440af[_0x65f6('0x1f')][_0x65f6('0x1d')]);}})['catch'](function(_0x197a49){logger['error']('ServicenowAccount,\x20%s,\x20%s',_0x186a6a,_0x197a49);_0x1d29fd(_0x197a49);});});}function respondWithStatusCode(_0x212247,_0xd173f4){_0xd173f4=_0xd173f4||0xcc;return function(_0x524e42){if(_0x524e42){return _0x212247[_0x65f6('0x20')](_0xd173f4);}return _0x212247[_0x65f6('0x21')](_0xd173f4)[_0x65f6('0x22')]();};}function respondWithResult(_0x2774a1,_0x4f5a69){_0x4f5a69=_0x4f5a69||0xc8;return function(_0x9d7bb0){if(_0x9d7bb0){return _0x2774a1[_0x65f6('0x21')](_0x4f5a69)[_0x65f6('0x23')](_0x9d7bb0);}};}function respondWithFilteredResult(_0x5963e0,_0x5cb131){return function(_0x4fde2f){if(_0x4fde2f){var _0x29abdb=_0x4fde2f[_0x65f6('0x24')],_0x16cde8=_0x5cb131['offset'],_0x4b2292=_0x5cb131[_0x65f6('0x25')]+_0x5cb131[_0x65f6('0x26')],_0x296cd9;if(_0x4b2292>=_0x29abdb){_0x4b2292=_0x29abdb;_0x296cd9=0xc8;}else{_0x296cd9=0xce;}_0x5963e0[_0x65f6('0x21')](_0x296cd9);return _0x5963e0['set']('Content-Range',_0x16cde8+'-'+_0x4b2292+'/'+_0x29abdb)['json'](_0x4fde2f);}return null;};}function patchUpdates(_0x266cfe){return function(_0x3c032f){try{jsonpatch[_0x65f6('0x27')](_0x3c032f,_0x266cfe,!![]);}catch(_0x408ccc){return BPromise[_0x65f6('0x28')](_0x408ccc);}return _0x3c032f[_0x65f6('0x29')]();};}function saveUpdates(_0x144e55,_0x4ace4c){return function(_0x4ea23d){if(_0x4ea23d){return _0x4ea23d[_0x65f6('0x2a')](_0x144e55)[_0x65f6('0x16')](function(_0x5878bc){return _0x5878bc;});}return null;};}function removeEntity(_0x4e50c0,_0x10b368){return function(_0x1ce43c){if(_0x1ce43c){return _0x1ce43c[_0x65f6('0x2b')]()[_0x65f6('0x16')](function(){_0x4e50c0[_0x65f6('0x21')](0xcc)[_0x65f6('0x22')]();});}};}function handleEntityNotFound(_0x5792a0,_0x103265){return function(_0x38f3c6){if(!_0x38f3c6){_0x5792a0[_0x65f6('0x20')](0x194);}return _0x38f3c6;};}function handleError(_0x4bc037,_0x217f35){_0x217f35=_0x217f35||0x1f4;return function(_0x2a7aa8){logger[_0x65f6('0x1b')](_0x2a7aa8[_0x65f6('0x2c')]);if(_0x2a7aa8[_0x65f6('0x2d')]){delete _0x2a7aa8[_0x65f6('0x2d')];}_0x4bc037['status'](_0x217f35)[_0x65f6('0x2e')](_0x2a7aa8);};}exports[_0x65f6('0x2f')]=function(_0x4f3e22,_0x36dbf4){var _0x5a740a={},_0x2b403b={},_0x50494b={'count':0x0,'rows':[]};var _0x2b9fb6=db[_0x65f6('0x30')]['rawAttributes'];_0x2b403b[_0x65f6('0x31')]=_[_0x65f6('0x32')](_0x2b9fb6);_0x2b403b[_0x65f6('0x33')]=_['keys'](_0x4f3e22['query']);_0x2b403b[_0x65f6('0x34')]=_['intersection'](_0x2b403b[_0x65f6('0x31')],_0x2b403b['query']);_0x5a740a[_0x65f6('0x35')]=_[_0x65f6('0x36')](_0x2b403b['model'],qs[_0x65f6('0x37')](_0x4f3e22['query']['fields']));_0x5a740a[_0x65f6('0x35')]=_0x5a740a[_0x65f6('0x35')][_0x65f6('0x38')]?_0x5a740a[_0x65f6('0x35')]:_0x2b403b[_0x65f6('0x31')];if(!_0x4f3e22[_0x65f6('0x33')][_0x65f6('0x39')](_0x65f6('0x3a'))){_0x5a740a['limit']=qs[_0x65f6('0x26')](_0x4f3e22['query'][_0x65f6('0x26')]);_0x5a740a[_0x65f6('0x25')]=qs[_0x65f6('0x25')](_0x4f3e22[_0x65f6('0x33')]['offset']);}_0x5a740a[_0x65f6('0x3b')]=qs[_0x65f6('0x3c')](_0x4f3e22[_0x65f6('0x33')][_0x65f6('0x3c')]);_0x5a740a[_0x65f6('0x3d')]=qs[_0x65f6('0x34')](_[_0x65f6('0x3e')](_0x4f3e22[_0x65f6('0x33')],_0x2b403b[_0x65f6('0x34')]));if(_0x4f3e22['query'][_0x65f6('0x3f')]){_0x5a740a[_0x65f6('0x3d')]=_[_0x65f6('0x40')](_0x5a740a[_0x65f6('0x3d')],{'$or':_[_0x65f6('0x41')](_0x2b9fb6,function(_0x1ac040){if(_0x1ac040[_0x65f6('0x42')][_0x65f6('0x43')]!==_0x65f6('0x44')){var _0x2abbed={};_0x2abbed[_0x1ac040[_0x65f6('0x45')]]={'$like':'%'+_0x4f3e22[_0x65f6('0x33')][_0x65f6('0x3f')]+'%'};return _0x2abbed;}})});}_0x5a740a=_[_0x65f6('0x40')]({},_0x5a740a,_0x4f3e22[_0x65f6('0x46')]);var _0x2cb38d={'where':_0x5a740a['where']};return db[_0x65f6('0x30')][_0x65f6('0x24')](_0x2cb38d)[_0x65f6('0x16')](function(_0x3828c9){_0x50494b['count']=_0x3828c9;if(_0x4f3e22[_0x65f6('0x33')][_0x65f6('0x47')]){_0x5a740a[_0x65f6('0x48')]=[{'all':!![]}];}return db['ServicenowAccount'][_0x65f6('0x49')](_0x5a740a);})[_0x65f6('0x16')](function(_0x426937){_0x50494b[_0x65f6('0x4a')]=_0x426937;return _0x50494b;})['then'](respondWithFilteredResult(_0x36dbf4,_0x5a740a))[_0x65f6('0x4b')](handleError(_0x36dbf4,null));};exports['show']=function(_0x3f1baa,_0x6968b){var _0x577c93={'raw':![],'where':{'id':_0x3f1baa['params']['id']}},_0xf754ee={};_0xf754ee[_0x65f6('0x31')]=_[_0x65f6('0x32')](db[_0x65f6('0x30')][_0x65f6('0x4c')]);_0xf754ee[_0x65f6('0x33')]=_[_0x65f6('0x32')](_0x3f1baa['query']);_0xf754ee['filters']=_[_0x65f6('0x36')](_0xf754ee[_0x65f6('0x31')],_0xf754ee[_0x65f6('0x33')]);_0x577c93[_0x65f6('0x35')]=_[_0x65f6('0x36')](_0xf754ee[_0x65f6('0x31')],qs[_0x65f6('0x37')](_0x3f1baa[_0x65f6('0x33')][_0x65f6('0x37')]));_0x577c93['attributes']=_0x577c93[_0x65f6('0x35')][_0x65f6('0x38')]?_0x577c93[_0x65f6('0x35')]:_0xf754ee['model'];if(_0x3f1baa[_0x65f6('0x33')][_0x65f6('0x47')]){_0x577c93['include']=[{'all':!![]}];}_0x577c93=_[_0x65f6('0x40')]({},_0x577c93,_0x3f1baa[_0x65f6('0x46')]);return db['ServicenowAccount'][_0x65f6('0x4d')](_0x577c93)['then'](handleEntityNotFound(_0x6968b,null))[_0x65f6('0x16')](respondWithResult(_0x6968b,null))[_0x65f6('0x4b')](handleError(_0x6968b,null));};exports[_0x65f6('0x4e')]=function(_0x4b9f0a,_0x1646c5){return db[_0x65f6('0x30')]['create'](_0x4b9f0a[_0x65f6('0x4f')],{})[_0x65f6('0x16')](respondWithResult(_0x1646c5,0xc9))['catch'](handleError(_0x1646c5,null));};exports[_0x65f6('0x2a')]=function(_0x344c0e,_0x413dbc){if(_0x344c0e[_0x65f6('0x4f')]['id']){delete _0x344c0e[_0x65f6('0x4f')]['id'];}return db[_0x65f6('0x30')][_0x65f6('0x4d')]({'where':{'id':_0x344c0e[_0x65f6('0x50')]['id']}})['then'](handleEntityNotFound(_0x413dbc,null))['then'](saveUpdates(_0x344c0e['body'],null))[_0x65f6('0x16')](respondWithResult(_0x413dbc,null))[_0x65f6('0x4b')](handleError(_0x413dbc,null));};exports[_0x65f6('0x2b')]=function(_0x20c322,_0x545445){return db[_0x65f6('0x30')][_0x65f6('0x4d')]({'where':{'id':_0x20c322[_0x65f6('0x50')]['id']}})['then'](handleEntityNotFound(_0x545445,null))[_0x65f6('0x16')](removeEntity(_0x545445,null))[_0x65f6('0x4b')](handleError(_0x545445,null));};exports[_0x65f6('0x51')]=function(_0x4e289e,_0x551fe3,_0x1d337d){var _0x44f3dd={};var _0x4125cb={};var _0x39364f;var _0x2a76b3;return db[_0x65f6('0x30')][_0x65f6('0x52')]({'where':{'id':_0x4e289e[_0x65f6('0x50')]['id']}})[_0x65f6('0x16')](handleEntityNotFound(_0x551fe3,null))[_0x65f6('0x16')](function(_0xa7eee9){if(_0xa7eee9){_0x39364f=_0xa7eee9;_0x4125cb[_0x65f6('0x31')]=_[_0x65f6('0x32')](db[_0x65f6('0x53')]['rawAttributes']);_0x4125cb[_0x65f6('0x33')]=_[_0x65f6('0x32')](_0x4e289e[_0x65f6('0x33')]);_0x4125cb['filters']=_[_0x65f6('0x36')](_0x4125cb[_0x65f6('0x31')],_0x4125cb[_0x65f6('0x33')]);_0x44f3dd[_0x65f6('0x35')]=_['intersection'](_0x4125cb[_0x65f6('0x31')],qs[_0x65f6('0x37')](_0x4e289e[_0x65f6('0x33')][_0x65f6('0x37')]));_0x44f3dd['attributes']=_0x44f3dd[_0x65f6('0x35')][_0x65f6('0x38')]?_0x44f3dd['attributes']:_0x4125cb[_0x65f6('0x31')];_0x44f3dd[_0x65f6('0x3b')]=qs[_0x65f6('0x3c')](_0x4e289e['query'][_0x65f6('0x3c')]);_0x44f3dd[_0x65f6('0x3d')]=qs[_0x65f6('0x34')](_[_0x65f6('0x3e')](_0x4e289e[_0x65f6('0x33')],_0x4125cb[_0x65f6('0x34')]));if(_0x4e289e['query']['filter']){_0x44f3dd['where']=_[_0x65f6('0x40')](_0x44f3dd[_0x65f6('0x3d')],{'$or':_[_0x65f6('0x41')](_0x44f3dd[_0x65f6('0x35')],function(_0xab6f0){var _0x304cf9={};_0x304cf9[_0xab6f0]={'$like':'%'+_0x4e289e['query'][_0x65f6('0x3f')]+'%'};return _0x304cf9;})});}_0x44f3dd=_[_0x65f6('0x40')]({},_0x44f3dd,_0x4e289e['options']);return _0x39364f[_0x65f6('0x51')](_0x44f3dd);}})[_0x65f6('0x16')](function(_0x477489){if(_0x477489){_0x2a76b3=_0x477489['length'];if(!_0x4e289e[_0x65f6('0x33')][_0x65f6('0x39')]('nolimit')){_0x44f3dd[_0x65f6('0x26')]=qs[_0x65f6('0x26')](_0x4e289e[_0x65f6('0x33')][_0x65f6('0x26')]);_0x44f3dd[_0x65f6('0x25')]=qs[_0x65f6('0x25')](_0x4e289e[_0x65f6('0x33')]['offset']);}return _0x39364f['getConfigurations'](_0x44f3dd);}})[_0x65f6('0x16')](function(_0x3da139){if(_0x3da139){return _0x3da139?{'count':_0x2a76b3,'rows':_0x3da139}:null;}})['then'](respondWithResult(_0x551fe3,null))[_0x65f6('0x4b')](handleError(_0x551fe3,null));};exports['addConfiguration']=function(_0x3a483b,_0x4e0450,_0x440df1){if(_0x3a483b[_0x65f6('0x4f')]['id']){delete _0x3a483b[_0x65f6('0x4f')]['id'];}return db[_0x65f6('0x30')][_0x65f6('0x52')]({'where':{'id':_0x3a483b[_0x65f6('0x50')]['id']}})[_0x65f6('0x16')](handleEntityNotFound(_0x4e0450,null))[_0x65f6('0x16')](function(_0x2405a7){if(_0x2405a7){_0x3a483b['body']['AccountId']=_0x2405a7['id'];_0x3a483b[_0x65f6('0x4f')][_0x65f6('0x54')]=integrations[_0x65f6('0x55')](_0x3a483b['body']['channel'],_0x3a483b[_0x65f6('0x4f')][_0x65f6('0x42')]);_0x3a483b[_0x65f6('0x4f')][_0x65f6('0x56')]=integrations[_0x65f6('0x57')](_0x3a483b[_0x65f6('0x4f')]['channel'],_0x3a483b['body'][_0x65f6('0x42')]);return db[_0x65f6('0x53')]['create'](_0x3a483b[_0x65f6('0x4f')],{'include':[{'model':db['ServicenowField'],'as':_0x65f6('0x54')},{'model':db[_0x65f6('0x58')],'as':_0x65f6('0x56')}]});}return null;})[_0x65f6('0x16')](respondWithResult(_0x4e0450,null))['catch'](handleError(_0x4e0450,null));};exports[_0x65f6('0x59')]=function(_0x351d43,_0x11411c,_0x59131c){var _0x4c0511=[_0x65f6('0x5a'),'hold_reason',_0x65f6('0x5b'),_0x65f6('0x5c'),_0x65f6('0x5d'),_0x65f6('0x5e'),'incident_state','severity','category'];var _0x2e29b4=[_0x65f6('0x5f'),_0x65f6('0x5a'),'caused_by',_0x65f6('0x60'),_0x65f6('0x61'),_0x65f6('0x62'),'child_incidents',_0x65f6('0x63'),_0x65f6('0x64'),'number',_0x65f6('0x65'),_0x65f6('0x66'),'opened_by',_0x65f6('0x67'),'sys_created_on',_0x65f6('0x68'),'state',_0x65f6('0x69'),_0x65f6('0x5b'),'order',_0x65f6('0x6a'),_0x65f6('0x6b'),_0x65f6('0x6c'),_0x65f6('0x6d'),_0x65f6('0x6e'),_0x65f6('0x6f'),_0x65f6('0x70'),_0x65f6('0x71'),_0x65f6('0x72'),_0x65f6('0x73'),_0x65f6('0x74'),'time_worked',_0x65f6('0x75'),_0x65f6('0x76'),_0x65f6('0x77'),_0x65f6('0x78'),'work_end',_0x65f6('0x79'),_0x65f6('0x7a'),'caller_id',_0x65f6('0x7b'),'subcategory',_0x65f6('0x7c'),'short_description',_0x65f6('0x5d'),_0x65f6('0x7d'),'delivery_task','work_start',_0x65f6('0x7e'),_0x65f6('0x7f'),'additional_assignee_list',_0x65f6('0x80'),_0x65f6('0x81'),_0x65f6('0x5e'),'sys_class_name',_0x65f6('0x82'),_0x65f6('0x83'),'follow_up',_0x65f6('0x84'),'sys_id',_0x65f6('0x85'),'reopened_by','incident_state',_0x65f6('0x86'),_0x65f6('0x87'),_0x65f6('0x88'),_0x65f6('0x89'),_0x65f6('0x8a'),_0x65f6('0x8b'),_0x65f6('0x8c'),_0x65f6('0x8d'),'sla_due','approval',_0x65f6('0x8e'),'due_date',_0x65f6('0x8f'),_0x65f6('0x90'),_0x65f6('0x91'),_0x65f6('0x92'),_0x65f6('0x93'),'correlation_id',_0x65f6('0x94'),_0x65f6('0x95')];var _0x14c908='';var _0x576ecd='';var _0xc7cee1=[];var _0x443aed='';var _0x4254c2='';var _0x23180e=[];var _0x25a2a7='';var _0x16bf93='';var _0x53f0ea={};var _0x4cebf8='';return db[_0x65f6('0x30')][_0x65f6('0x52')]({'where':{'id':_0x351d43[_0x65f6('0x50')]['id']},'attributes':['id',_0x65f6('0x96'),'password','email',_0x65f6('0x97'),_0x65f6('0x98')]})[_0x65f6('0x16')](handleEntityNotFound(_0x11411c,null))[_0x65f6('0x16')](function(_0x21c0a7){if(_0x21c0a7){_0x4cebf8=_0x21c0a7[_0x65f6('0x97')];var _0x5daaf4=_0x4cebf8['slice'](-0x1);if(_0x5daaf4==='/'){_0x4cebf8=_0x4cebf8['substring'](0x0,_0x4cebf8[_0x65f6('0x99')](_0x5daaf4));}_0x16bf93=util[_0x65f6('0x9a')](_0x65f6('0x9b'),_0x4cebf8);_0x25a2a7=util[_0x65f6('0x9a')]('%s/api/now/table/',_0x4cebf8);_0x53f0ea={'user':_0x21c0a7['username'],'pass':_0x21c0a7[_0x65f6('0x9c')]};var _0x27e44b={'method':'GET','uri':_0x16bf93+_0x65f6('0x9d'),'auth':_0x53f0ea,'json':!![]};return rp(_0x27e44b);}})['then'](function(_0x2e88a0){if(_0x2e88a0['result'][_0x65f6('0x38')]>0x0){_0x14c908=_0x2e88a0[_0x65f6('0x1f')];}console['log'](_0x65f6('0x9e'),_0x14c908);_0x23180e=[];_0x576ecd=Object[_0x65f6('0x9f')]([],_0x14c908);_[_0x65f6('0xa0')](_0x576ecd,function(_0x9f6e0c){return!_0x4c0511[_0x65f6('0xa1')](_0x9f6e0c[_0x65f6('0x2d')]);});_0x576ecd['forEach'](function(_0x45b3e6){var _0x5e4da2=createFieldObject(_0x25a2a7,_0x53f0ea,_0x45b3e6[_0x65f6('0xa2')],_0x45b3e6['name'],_0x45b3e6[_0x65f6('0xa3')],![]);_0x23180e[_0x65f6('0xa4')](_0x5e4da2);});return Promise[_0x65f6('0xa5')](_0x23180e);})[_0x65f6('0x16')](function(_0x535558){_0xc7cee1=_0x535558;_0x443aed=Object[_0x65f6('0x9f')]([],_0x14c908);console[_0x65f6('0xa6')](_0x65f6('0xa7'),_0x14c908);_['remove'](_0x443aed,function(_0x52348e){return _0x2e29b4[_0x65f6('0xa1')](_0x52348e[_0x65f6('0x2d')]);});console['log'](_0x65f6('0xa8'),_0x443aed);_0x23180e=[];_0x443aed[_0x65f6('0xa9')](function(_0x2837fb){var _0x575725=createFieldObject(_0x25a2a7,_0x53f0ea,_0x2837fb[_0x65f6('0xa2')],_0x2837fb[_0x65f6('0x2d')],_0x2837fb['label'],!![]);_0x23180e[_0x65f6('0xa4')](_0x575725);});return Promise[_0x65f6('0xa5')](_0x23180e);})[_0x65f6('0x16')](function(_0x5374ad){_0x4254c2=_0x5374ad;var _0x2bb916=_0xc7cee1[_0x65f6('0xaa')](_0x4254c2);return{'count':_0x2bb916[_0x65f6('0x38')],'rows':_0x2bb916};})['then'](respondWithResult(_0x11411c,null))[_0x65f6('0x4b')](function(_0x4febfa){console[_0x65f6('0xa6')](_0x65f6('0xab')+_0x4febfa);var _0x31ec61=_0x351d43[_0x65f6('0x33')][_0x65f6('0xac')]?0x1f4:_0x4febfa[_0x65f6('0xad')]||0x1f4;logger['error'](_0x4febfa[_0x65f6('0x2c')]);delete _0x4febfa[_0x65f6('0x2d')];if(_0x31ec61===0x191){_0x31ec61=0x190;}_0x11411c[_0x65f6('0x21')](_0x31ec61)[_0x65f6('0x2e')](_0x351d43[_0x65f6('0x33')]['test']?{'message':'Wrong\x20credentials','statusCode':_0x4febfa['statusCode']}:_0x4febfa);});};function createFieldObject(_0x14dc7e,_0xdced81,_0xcfc47a,_0x59b715,_0x151cee,_0x4de6fa){return new Promise(function(_0x4b2edb,_0x3133f4){var _0x41b58b={'id':_0x59b715,'name':_0x151cee,'custom':_0x4de6fa};if(_0xcfc47a==='boolean'){_0x41b58b[_0x65f6('0x46')]=[{'name':_0x65f6('0xae'),'value':_0x65f6('0xaf')},{'name':_0x65f6('0xb0'),'value':_0x65f6('0xb1')}];_0x4b2edb(_0x41b58b);}else{var _0x1bd68f={'method':_0x65f6('0xb2'),'uri':_0x14dc7e+_0x65f6('0xb3')+_0x59b715,'auth':_0xdced81,'json':!![]};return rp(_0x1bd68f)[_0x65f6('0x16')](function(_0x350641){var _0x31bd06=[];if(_0x350641[_0x65f6('0x1f')]['length']>0x0){_0x350641[_0x65f6('0x1f')]['forEach'](function(_0x55355f){if(_0x55355f[_0x65f6('0xb4')]===_0x65f6('0xb1')){var _0xdcfe8={'name':_0x55355f[_0x65f6('0xa3')],'value':_0x55355f['value']};_0x31bd06[_0x65f6('0xa4')](_0xdcfe8);}});}_0x41b58b['options']=_0x31bd06;if(_0x41b58b['options'][_0x65f6('0x38')]>0x0){_0x4b2edb(_0x41b58b);}else{if(_0x4de6fa==![]){_0x4b2edb();}else{_0x4b2edb(_0x41b58b);}}});}});}
\ No newline at end of file
+var _0x583c=['getConfigurations','findOne','ServicenowConfiguration','map','addConfiguration','AccountId','Subjects','channel','Descriptions','getDescriptions','ServicenowField','getFields','knowledge','subcategory','close_code','notify','incident_state','severity','category','parent','caused_by','watch_list','sys_updated_on','child_incidents','hold_reason','approval_history','number','sys_updated_by','opened_by','user_input','sys_created_on','cmdb_ci','delivery_plan','impact','active','work_notes_list','priority','sys_domain_path','rfc','expected_start','opened_at','work_end','reopened_time','resolved_at','caller_id','approval_set','work_notes','short_description','correlation_display','delivery_task','work_start','assignment_group','business_stc','additional_assignee_list','description','calendar_duration','sys_class_name','close_notes','closed_by','follow_up','parent_incident','sys_id','contact_type','reopened_by','urgency','problem_id','company','reassignment_count','activity_due','assigned_to','sla_due','approval','sys_mod_count','reopen_count','upon_approval','correlation_id','location','username','password','remoteUri','slice','substring','lastIndexOf','%s/api/now/doc/table/schema/','format','%s/api/now/table/','incident?sysparm_display_value=all','assign','remove','includes','forEach','internalType','label','push','all','log','TCL:\x20_object','TCL:\x20exports.getEntityFields\x20->\x20_objectsCustom','concat','ServiceNow\x20error:\x20','test','statusCode','boolean','True','true','False','false','sys_choice?sysparm_query=name=incident^element=','inactive','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','util','path','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','http','request','info','request\x20sent','debug','stringify','error','code','ServicenowAccount,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','stack','name','send','ServicenowAccount','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','nolimit','order','sort','where','filter','type','key','field','merge','includeAll','findAll','params','include','options','find','create','body'];(function(_0x2551dd,_0x5ba066){var _0x905704=function(_0x1c7c11){while(--_0x1c7c11){_0x2551dd['push'](_0x2551dd['shift']());}};_0x905704(++_0x5ba066);}(_0x583c,0x12b));var _0xc583=function(_0x255d5b,_0x4f6f35){_0x255d5b=_0x255d5b-0x0;var _0x3e141a=_0x583c[_0x255d5b];return _0x3e141a;};'use strict';var pdf=require(_0xc583('0x0'));var emlformat=require(_0xc583('0x1'));var rimraf=require(_0xc583('0x2'));var zipdir=require(_0xc583('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xc583('0x4'));var moment=require(_0xc583('0x5'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xc583('0x6'));var path=require(_0xc583('0x7'));var sox=require('sox');var csv=require(_0xc583('0x8'));var ejs=require(_0xc583('0x9'));var fs=require('fs');var _=require(_0xc583('0xa'));var squel=require(_0xc583('0xb'));var crypto=require('crypto');var jsforce=require(_0xc583('0xc'));var deskjs=require(_0xc583('0xd'));var toCsv=require('to-csv');var querystring=require(_0xc583('0xe'));var Papa=require(_0xc583('0xf'));var authService=require(_0xc583('0x10'));var hardwareService=require(_0xc583('0x11'));var Redis=require(_0xc583('0x12'));var qs=require('../../components/parsers/qs');var logger=require(_0xc583('0x13'))(_0xc583('0x14'));var utils=require('../../config/utils');var config=require(_0xc583('0x15'));var db=require(_0xc583('0x16'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0xc583('0x17'));var client=jayson[_0xc583('0x18')][_0xc583('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x267da0,_0x33c2c5,_0xd28e44,_0x183cca){return new BPromise(function(_0xf81809,_0x1c6b79){var _0x5403a3=_0x183cca||client;return _0x5403a3[_0xc583('0x1a')](_0x267da0,_0xd28e44)['then'](function(_0x19f46a){logger[_0xc583('0x1b')]('ServicenowAccount,\x20%s,\x20%s',_0x33c2c5,_0xc583('0x1c'));logger[_0xc583('0x1d')]('ServicenowAccount,\x20%s,\x20%s,\x20%s',_0x33c2c5,_0xc583('0x1c'),JSON[_0xc583('0x1e')](_0x19f46a));if(_0x19f46a['error']){if(_0x19f46a[_0xc583('0x1f')][_0xc583('0x20')]===0x1f4){logger[_0xc583('0x1f')](_0xc583('0x21'),_0x33c2c5,_0x19f46a['error'][_0xc583('0x22')]);return _0x1c6b79(_0x19f46a['error'][_0xc583('0x22')]);}logger[_0xc583('0x1f')](_0xc583('0x21'),_0x33c2c5,_0x19f46a[_0xc583('0x1f')][_0xc583('0x22')]);return _0xf81809(_0x19f46a[_0xc583('0x1f')][_0xc583('0x22')]);}else{logger[_0xc583('0x1b')](_0xc583('0x21'),_0x33c2c5,_0xc583('0x1c'));_0xf81809(_0x19f46a[_0xc583('0x23')][_0xc583('0x22')]);}})[_0xc583('0x24')](function(_0x478ee1){logger['error'](_0xc583('0x21'),_0x33c2c5,_0x478ee1);_0x1c6b79(_0x478ee1);});});}function respondWithStatusCode(_0x3e075c,_0x8443dc){_0x8443dc=_0x8443dc||0xcc;return function(_0x5ceef1){if(_0x5ceef1){return _0x3e075c[_0xc583('0x25')](_0x8443dc);}return _0x3e075c[_0xc583('0x26')](_0x8443dc)[_0xc583('0x27')]();};}function respondWithResult(_0x4688bd,_0x25c5af){_0x25c5af=_0x25c5af||0xc8;return function(_0x48c95e){if(_0x48c95e){return _0x4688bd['status'](_0x25c5af)[_0xc583('0x28')](_0x48c95e);}};}function respondWithFilteredResult(_0x4f366b,_0x45ef74){return function(_0xcbe9b2){if(_0xcbe9b2){var _0xbabf24=_0xcbe9b2[_0xc583('0x29')],_0x1e7809=_0x45ef74[_0xc583('0x2a')],_0x24aab5=_0x45ef74['offset']+_0x45ef74[_0xc583('0x2b')],_0x4b1c18;if(_0x24aab5>=_0xbabf24){_0x24aab5=_0xbabf24;_0x4b1c18=0xc8;}else{_0x4b1c18=0xce;}_0x4f366b['status'](_0x4b1c18);return _0x4f366b[_0xc583('0x2c')](_0xc583('0x2d'),_0x1e7809+'-'+_0x24aab5+'/'+_0xbabf24)[_0xc583('0x28')](_0xcbe9b2);}return null;};}function patchUpdates(_0x3ed083){return function(_0x1b2b49){try{jsonpatch[_0xc583('0x2e')](_0x1b2b49,_0x3ed083,!![]);}catch(_0x113b39){return BPromise['reject'](_0x113b39);}return _0x1b2b49[_0xc583('0x2f')]();};}function saveUpdates(_0x390bc3,_0x23f3a4){return function(_0xcbf1f1){if(_0xcbf1f1){return _0xcbf1f1[_0xc583('0x30')](_0x390bc3)[_0xc583('0x31')](function(_0x48b906){return _0x48b906;});}return null;};}function removeEntity(_0x2246dd,_0x58d97f){return function(_0x510931){if(_0x510931){return _0x510931[_0xc583('0x32')]()[_0xc583('0x31')](function(){_0x2246dd[_0xc583('0x26')](0xcc)[_0xc583('0x27')]();});}};}function handleEntityNotFound(_0x430fe6,_0x4a9679){return function(_0x3e41c0){if(!_0x3e41c0){_0x430fe6[_0xc583('0x25')](0x194);}return _0x3e41c0;};}function handleError(_0x3dc38e,_0x48f00b){_0x48f00b=_0x48f00b||0x1f4;return function(_0x18b097){logger['error'](_0x18b097[_0xc583('0x33')]);if(_0x18b097[_0xc583('0x34')]){delete _0x18b097[_0xc583('0x34')];}_0x3dc38e[_0xc583('0x26')](_0x48f00b)[_0xc583('0x35')](_0x18b097);};}exports['index']=function(_0x242728,_0x4ef205){var _0x113285={},_0x504894={},_0x2e96fc={'count':0x0,'rows':[]};var _0x3a562c=db[_0xc583('0x36')][_0xc583('0x37')];_0x504894[_0xc583('0x38')]=_[_0xc583('0x39')](_0x3a562c);_0x504894['query']=_['keys'](_0x242728[_0xc583('0x3a')]);_0x504894[_0xc583('0x3b')]=_['intersection'](_0x504894[_0xc583('0x38')],_0x504894[_0xc583('0x3a')]);_0x113285[_0xc583('0x3c')]=_[_0xc583('0x3d')](_0x504894[_0xc583('0x38')],qs[_0xc583('0x3e')](_0x242728['query'][_0xc583('0x3e')]));_0x113285['attributes']=_0x113285[_0xc583('0x3c')][_0xc583('0x3f')]?_0x113285[_0xc583('0x3c')]:_0x504894['model'];if(!_0x242728['query']['hasOwnProperty'](_0xc583('0x40'))){_0x113285[_0xc583('0x2b')]=qs[_0xc583('0x2b')](_0x242728[_0xc583('0x3a')]['limit']);_0x113285[_0xc583('0x2a')]=qs[_0xc583('0x2a')](_0x242728['query']['offset']);}_0x113285[_0xc583('0x41')]=qs['sort'](_0x242728[_0xc583('0x3a')][_0xc583('0x42')]);_0x113285[_0xc583('0x43')]=qs[_0xc583('0x3b')](_['pick'](_0x242728[_0xc583('0x3a')],_0x504894[_0xc583('0x3b')]));if(_0x242728[_0xc583('0x3a')][_0xc583('0x44')]){_0x113285[_0xc583('0x43')]=_['merge'](_0x113285[_0xc583('0x43')],{'$or':_['map'](_0x3a562c,function(_0x4b78df){if(_0x4b78df[_0xc583('0x45')][_0xc583('0x46')]!=='VIRTUAL'){var _0x4cd67d={};_0x4cd67d[_0x4b78df[_0xc583('0x47')]]={'$like':'%'+_0x242728[_0xc583('0x3a')][_0xc583('0x44')]+'%'};return _0x4cd67d;}})});}_0x113285=_[_0xc583('0x48')]({},_0x113285,_0x242728['options']);var _0x24ac7b={'where':_0x113285['where']};return db[_0xc583('0x36')]['count'](_0x24ac7b)[_0xc583('0x31')](function(_0x14e9ad){_0x2e96fc[_0xc583('0x29')]=_0x14e9ad;if(_0x242728[_0xc583('0x3a')][_0xc583('0x49')]){_0x113285['include']=[{'all':!![]}];}return db[_0xc583('0x36')][_0xc583('0x4a')](_0x113285);})[_0xc583('0x31')](function(_0x532367){_0x2e96fc['rows']=_0x532367;return _0x2e96fc;})['then'](respondWithFilteredResult(_0x4ef205,_0x113285))[_0xc583('0x24')](handleError(_0x4ef205,null));};exports['show']=function(_0x27a7c2,_0x41e0af){var _0x39225b={'raw':![],'where':{'id':_0x27a7c2[_0xc583('0x4b')]['id']}},_0x408e30={};_0x408e30[_0xc583('0x38')]=_[_0xc583('0x39')](db[_0xc583('0x36')][_0xc583('0x37')]);_0x408e30[_0xc583('0x3a')]=_[_0xc583('0x39')](_0x27a7c2['query']);_0x408e30[_0xc583('0x3b')]=_[_0xc583('0x3d')](_0x408e30[_0xc583('0x38')],_0x408e30[_0xc583('0x3a')]);_0x39225b['attributes']=_[_0xc583('0x3d')](_0x408e30[_0xc583('0x38')],qs[_0xc583('0x3e')](_0x27a7c2[_0xc583('0x3a')][_0xc583('0x3e')]));_0x39225b[_0xc583('0x3c')]=_0x39225b[_0xc583('0x3c')][_0xc583('0x3f')]?_0x39225b[_0xc583('0x3c')]:_0x408e30['model'];if(_0x27a7c2[_0xc583('0x3a')][_0xc583('0x49')]){_0x39225b[_0xc583('0x4c')]=[{'all':!![]}];}_0x39225b=_[_0xc583('0x48')]({},_0x39225b,_0x27a7c2[_0xc583('0x4d')]);return db[_0xc583('0x36')][_0xc583('0x4e')](_0x39225b)[_0xc583('0x31')](handleEntityNotFound(_0x41e0af,null))[_0xc583('0x31')](respondWithResult(_0x41e0af,null))[_0xc583('0x24')](handleError(_0x41e0af,null));};exports[_0xc583('0x4f')]=function(_0x7be0b3,_0x305239){return db['ServicenowAccount'][_0xc583('0x4f')](_0x7be0b3[_0xc583('0x50')],{})[_0xc583('0x31')](respondWithResult(_0x305239,0xc9))[_0xc583('0x24')](handleError(_0x305239,null));};exports[_0xc583('0x30')]=function(_0x3bccb0,_0x24351f){if(_0x3bccb0[_0xc583('0x50')]['id']){delete _0x3bccb0[_0xc583('0x50')]['id'];}return db['ServicenowAccount'][_0xc583('0x4e')]({'where':{'id':_0x3bccb0[_0xc583('0x4b')]['id']}})[_0xc583('0x31')](handleEntityNotFound(_0x24351f,null))['then'](saveUpdates(_0x3bccb0['body'],null))[_0xc583('0x31')](respondWithResult(_0x24351f,null))['catch'](handleError(_0x24351f,null));};exports[_0xc583('0x32')]=function(_0x186c69,_0x5613e7){return db['ServicenowAccount'][_0xc583('0x4e')]({'where':{'id':_0x186c69[_0xc583('0x4b')]['id']}})[_0xc583('0x31')](handleEntityNotFound(_0x5613e7,null))[_0xc583('0x31')](removeEntity(_0x5613e7,null))[_0xc583('0x24')](handleError(_0x5613e7,null));};exports[_0xc583('0x51')]=function(_0x3e2758,_0x43b438,_0x5c60f1){var _0x1d41df={};var _0x9bbf43={};var _0x30aaa0;var _0x1c4921;return db['ServicenowAccount'][_0xc583('0x52')]({'where':{'id':_0x3e2758[_0xc583('0x4b')]['id']}})['then'](handleEntityNotFound(_0x43b438,null))['then'](function(_0x12b114){if(_0x12b114){_0x30aaa0=_0x12b114;_0x9bbf43['model']=_[_0xc583('0x39')](db[_0xc583('0x53')][_0xc583('0x37')]);_0x9bbf43['query']=_['keys'](_0x3e2758[_0xc583('0x3a')]);_0x9bbf43[_0xc583('0x3b')]=_[_0xc583('0x3d')](_0x9bbf43[_0xc583('0x38')],_0x9bbf43['query']);_0x1d41df[_0xc583('0x3c')]=_[_0xc583('0x3d')](_0x9bbf43['model'],qs['fields'](_0x3e2758[_0xc583('0x3a')]['fields']));_0x1d41df['attributes']=_0x1d41df[_0xc583('0x3c')][_0xc583('0x3f')]?_0x1d41df[_0xc583('0x3c')]:_0x9bbf43[_0xc583('0x38')];_0x1d41df[_0xc583('0x41')]=qs['sort'](_0x3e2758['query'][_0xc583('0x42')]);_0x1d41df[_0xc583('0x43')]=qs['filters'](_['pick'](_0x3e2758[_0xc583('0x3a')],_0x9bbf43['filters']));if(_0x3e2758[_0xc583('0x3a')][_0xc583('0x44')]){_0x1d41df['where']=_[_0xc583('0x48')](_0x1d41df['where'],{'$or':_[_0xc583('0x54')](_0x1d41df[_0xc583('0x3c')],function(_0x4b3f49){var _0xf672d1={};_0xf672d1[_0x4b3f49]={'$like':'%'+_0x3e2758[_0xc583('0x3a')][_0xc583('0x44')]+'%'};return _0xf672d1;})});}_0x1d41df=_[_0xc583('0x48')]({},_0x1d41df,_0x3e2758[_0xc583('0x4d')]);return _0x30aaa0[_0xc583('0x51')](_0x1d41df);}})[_0xc583('0x31')](function(_0x1cb4b7){if(_0x1cb4b7){_0x1c4921=_0x1cb4b7['length'];if(!_0x3e2758['query']['hasOwnProperty'](_0xc583('0x40'))){_0x1d41df['limit']=qs[_0xc583('0x2b')](_0x3e2758[_0xc583('0x3a')][_0xc583('0x2b')]);_0x1d41df[_0xc583('0x2a')]=qs[_0xc583('0x2a')](_0x3e2758[_0xc583('0x3a')][_0xc583('0x2a')]);}return _0x30aaa0[_0xc583('0x51')](_0x1d41df);}})['then'](function(_0x45d7a9){if(_0x45d7a9){return _0x45d7a9?{'count':_0x1c4921,'rows':_0x45d7a9}:null;}})[_0xc583('0x31')](respondWithResult(_0x43b438,null))[_0xc583('0x24')](handleError(_0x43b438,null));};exports[_0xc583('0x55')]=function(_0x41a064,_0xb243ac,_0x548f1c){if(_0x41a064[_0xc583('0x50')]['id']){delete _0x41a064[_0xc583('0x50')]['id'];}return db[_0xc583('0x36')][_0xc583('0x52')]({'where':{'id':_0x41a064[_0xc583('0x4b')]['id']}})[_0xc583('0x31')](handleEntityNotFound(_0xb243ac,null))['then'](function(_0x3e4616){if(_0x3e4616){_0x41a064[_0xc583('0x50')][_0xc583('0x56')]=_0x3e4616['id'];_0x41a064['body'][_0xc583('0x57')]=integrations['getSubjects'](_0x41a064[_0xc583('0x50')][_0xc583('0x58')],_0x41a064[_0xc583('0x50')][_0xc583('0x45')]);_0x41a064[_0xc583('0x50')][_0xc583('0x59')]=integrations[_0xc583('0x5a')](_0x41a064['body']['channel'],_0x41a064['body']['type']);return db[_0xc583('0x53')][_0xc583('0x4f')](_0x41a064[_0xc583('0x50')],{'include':[{'model':db[_0xc583('0x5b')],'as':_0xc583('0x57')},{'model':db[_0xc583('0x5b')],'as':_0xc583('0x59')}]});}return null;})[_0xc583('0x31')](respondWithResult(_0xb243ac,null))[_0xc583('0x24')](handleError(_0xb243ac,null));};exports[_0xc583('0x5c')]=function(_0x4c9516,_0x22b75d,_0xc82dd5){var _0x4d90fa=['made_sla','hold_reason',_0xc583('0x5d'),_0xc583('0x5e'),_0xc583('0x5f'),_0xc583('0x60'),_0xc583('0x61'),_0xc583('0x62'),_0xc583('0x63')];var _0x333ae9=[_0xc583('0x64'),'made_sla',_0xc583('0x65'),_0xc583('0x66'),'upon_reject',_0xc583('0x67'),_0xc583('0x68'),_0xc583('0x69'),_0xc583('0x6a'),_0xc583('0x6b'),'resolved_by',_0xc583('0x6c'),_0xc583('0x6d'),_0xc583('0x6e'),_0xc583('0x6f'),'sys_domain','state','sys_created_by',_0xc583('0x5d'),'order','calendar_stc','closed_at',_0xc583('0x70'),_0xc583('0x71'),_0xc583('0x72'),_0xc583('0x73'),_0xc583('0x74'),'business_service',_0xc583('0x75'),_0xc583('0x76'),_0xc583('0x77'),'time_worked',_0xc583('0x78'),_0xc583('0x79'),'business_duration','group_list',_0xc583('0x7a'),_0xc583('0x7b'),_0xc583('0x7c'),_0xc583('0x7d'),_0xc583('0x7e'),_0xc583('0x5e'),_0xc583('0x7f'),_0xc583('0x80'),'close_code',_0xc583('0x81'),_0xc583('0x82'),_0xc583('0x83'),_0xc583('0x84'),_0xc583('0x85'),_0xc583('0x86'),_0xc583('0x87'),_0xc583('0x88'),_0xc583('0x60'),_0xc583('0x89'),_0xc583('0x8a'),_0xc583('0x8b'),_0xc583('0x8c'),_0xc583('0x8d'),_0xc583('0x8e'),_0xc583('0x8f'),_0xc583('0x90'),_0xc583('0x61'),_0xc583('0x91'),_0xc583('0x92'),_0xc583('0x93'),_0xc583('0x94'),_0xc583('0x95'),_0xc583('0x96'),'severity','comments',_0xc583('0x97'),_0xc583('0x98'),'comments_and_work_notes','due_date',_0xc583('0x99'),_0xc583('0x9a'),'sys_tags','escalation',_0xc583('0x9b'),_0xc583('0x9c'),_0xc583('0x9d'),'category'];var _0x53bb85='';var _0xcb06d4='';var _0x125abc=[];var _0x4050d2='';var _0x55c679='';var _0x28e74b=[];var _0x1edc66='';var _0x4df76d='';var _0x3aa84b={};var _0x1649ad='';return db[_0xc583('0x36')][_0xc583('0x52')]({'where':{'id':_0x4c9516[_0xc583('0x4b')]['id']},'attributes':['id',_0xc583('0x9e'),_0xc583('0x9f'),'email','remoteUri','serverUrl']})[_0xc583('0x31')](handleEntityNotFound(_0x22b75d,null))[_0xc583('0x31')](function(_0x216302){if(_0x216302){_0x1649ad=_0x216302[_0xc583('0xa0')];var _0xda5f7b=_0x1649ad[_0xc583('0xa1')](-0x1);if(_0xda5f7b==='/'){_0x1649ad=_0x1649ad[_0xc583('0xa2')](0x0,_0x1649ad[_0xc583('0xa3')](_0xda5f7b));}_0x4df76d=util['format'](_0xc583('0xa4'),_0x1649ad);_0x1edc66=util[_0xc583('0xa5')](_0xc583('0xa6'),_0x1649ad);_0x3aa84b={'user':_0x216302[_0xc583('0x9e')],'pass':_0x216302['password']};var _0x4afaf0={'method':'GET','uri':_0x4df76d+_0xc583('0xa7'),'auth':_0x3aa84b,'json':!![]};return rp(_0x4afaf0);}})[_0xc583('0x31')](function(_0x3a20c9){if(_0x3a20c9[_0xc583('0x23')][_0xc583('0x3f')]>0x0){_0x53bb85=_0x3a20c9[_0xc583('0x23')];}console['log']('incident\x20table\x20objects',_0x53bb85);_0x28e74b=[];_0xcb06d4=Object[_0xc583('0xa8')]([],_0x53bb85);_[_0xc583('0xa9')](_0xcb06d4,function(_0x492e13){return!_0x4d90fa[_0xc583('0xaa')](_0x492e13[_0xc583('0x34')]);});_0xcb06d4[_0xc583('0xab')](function(_0x3e4c37){var _0xb8edea=createFieldObject(_0x1edc66,_0x3aa84b,_0x3e4c37[_0xc583('0xac')],_0x3e4c37['name'],_0x3e4c37[_0xc583('0xad')],![]);_0x28e74b[_0xc583('0xae')](_0xb8edea);});return Promise[_0xc583('0xaf')](_0x28e74b);})[_0xc583('0x31')](function(_0x3d0059){_0x125abc=_0x3d0059;_0x4050d2=Object[_0xc583('0xa8')]([],_0x53bb85);console[_0xc583('0xb0')](_0xc583('0xb1'),_0x53bb85);_[_0xc583('0xa9')](_0x4050d2,function(_0x328d52){return _0x333ae9['includes'](_0x328d52[_0xc583('0x34')]);});console[_0xc583('0xb0')](_0xc583('0xb2'),_0x4050d2);_0x28e74b=[];_0x4050d2['forEach'](function(_0x149d65){var _0x56de40=createFieldObject(_0x1edc66,_0x3aa84b,_0x149d65[_0xc583('0xac')],_0x149d65[_0xc583('0x34')],_0x149d65[_0xc583('0xad')],!![]);_0x28e74b[_0xc583('0xae')](_0x56de40);});return Promise[_0xc583('0xaf')](_0x28e74b);})[_0xc583('0x31')](function(_0x15e2b6){_0x55c679=_0x15e2b6;var _0x4ef79b=_0x125abc[_0xc583('0xb3')](_0x55c679);return{'count':_0x4ef79b['length'],'rows':_0x4ef79b};})[_0xc583('0x31')](respondWithResult(_0x22b75d,null))['catch'](function(_0x1e9a68){console[_0xc583('0xb0')](_0xc583('0xb4')+_0x1e9a68);var _0x25d16e=_0x4c9516[_0xc583('0x3a')][_0xc583('0xb5')]?0x1f4:_0x1e9a68[_0xc583('0xb6')]||0x1f4;logger[_0xc583('0x1f')](_0x1e9a68['stack']);delete _0x1e9a68[_0xc583('0x34')];if(_0x25d16e===0x191){_0x25d16e=0x190;}_0x22b75d[_0xc583('0x26')](_0x25d16e)[_0xc583('0x35')](_0x4c9516[_0xc583('0x3a')][_0xc583('0xb5')]?{'message':'Wrong\x20credentials','statusCode':_0x1e9a68[_0xc583('0xb6')]}:_0x1e9a68);});};function createFieldObject(_0x2bf7c7,_0x1b246e,_0x5adde2,_0x4d892c,_0xbbdcc4,_0x79921b){return new Promise(function(_0x42888c,_0x3f3e3f){var _0x827154={'id':_0x4d892c,'name':_0xbbdcc4,'custom':_0x79921b};if(_0x5adde2===_0xc583('0xb7')){_0x827154['options']=[{'name':_0xc583('0xb8'),'value':_0xc583('0xb9')},{'name':_0xc583('0xba'),'value':_0xc583('0xbb')}];_0x42888c(_0x827154);}else{var _0x56c368={'method':'GET','uri':_0x2bf7c7+_0xc583('0xbc')+_0x4d892c,'auth':_0x1b246e,'json':!![]};return rp(_0x56c368)['then'](function(_0x1371a2){var _0x5f56be=[];if(_0x1371a2[_0xc583('0x23')][_0xc583('0x3f')]>0x0){_0x1371a2['result']['forEach'](function(_0x1f1dfc){if(_0x1f1dfc[_0xc583('0xbd')]===_0xc583('0xbb')){var _0x8d2fc6={'name':_0x1f1dfc[_0xc583('0xad')],'value':_0x1f1dfc['value']};_0x5f56be[_0xc583('0xae')](_0x8d2fc6);}});}_0x827154['options']=_0x5f56be;if(_0x827154[_0xc583('0x4d')][_0xc583('0x3f')]>0x0){_0x42888c(_0x827154);}else{if(_0x79921b==![]){_0x42888c();}else{_0x42888c(_0x827154);}}});}});}
\ No newline at end of file
index d974497..93af749 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0184=['int_servicenow_accounts','../../config/logger','api','bluebird','./intServicenowAccount.attributes','define','ServicenowAccount'];(function(_0xed01eb,_0x275edb){var _0x25b9de=function(_0x3c331c){while(--_0x3c331c){_0xed01eb['push'](_0xed01eb['shift']());}};_0x25b9de(++_0x275edb);}(_0x0184,0x9b));var _0x4018=function(_0x205e5b,_0x3d9293){_0x205e5b=_0x205e5b-0x0;var _0x2e60db=_0x0184[_0x205e5b];return _0x2e60db;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x4018('0x0'))(_0x4018('0x1'));var moment=require('moment');var BPromise=require(_0x4018('0x2'));var rp=require('request-promise');var attributes=require(_0x4018('0x3'));var integrations=require('../../components/integrations/configuration');module['exports']=function(_0x11d68e,_0x3c6606){return _0x11d68e[_0x4018('0x4')](_0x4018('0x5'),attributes,{'tableName':_0x4018('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2397=['api','bluebird','request-promise','./intServicenowAccount.attributes','../../components/integrations/configuration','exports','define','ServicenowAccount','int_servicenow_accounts','lodash','util'];(function(_0x224120,_0x424122){var _0x4e3184=function(_0x3159b1){while(--_0x3159b1){_0x224120['push'](_0x224120['shift']());}};_0x4e3184(++_0x424122);}(_0x2397,0x174));var _0x7239=function(_0x4c3fcf,_0x2544d6){_0x4c3fcf=_0x4c3fcf-0x0;var _0x4f35e3=_0x2397[_0x4c3fcf];return _0x4f35e3;};'use strict';var _=require(_0x7239('0x0'));var util=require(_0x7239('0x1'));var logger=require('../../config/logger')(_0x7239('0x2'));var moment=require('moment');var BPromise=require(_0x7239('0x3'));var rp=require(_0x7239('0x4'));var attributes=require(_0x7239('0x5'));var integrations=require(_0x7239('0x6'));module[_0x7239('0x7')]=function(_0x4ece14,_0x256fbf){return _0x4ece14[_0x7239('0x8')](_0x7239('0x9'),attributes,{'tableName':_0x7239('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e40d452..c8080bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfd5a=['util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','info','ServicenowAccount,\x20%s,\x20%s','request\x20sent','debug','ServicenowAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetServicenowAccount','ServicenowAccount','options','where','attributes','include','map','model','find','raw','then','ShowServicenowAccount','lodash'];(function(_0x19950b,_0x53d0d7){var _0x3c6b41=function(_0x3924ad){while(--_0x3924ad){_0x19950b['push'](_0x19950b['shift']());}};_0x3c6b41(++_0x53d0d7);}(_0xfd5a,0xd1));var _0xafd5=function(_0x5d6456,_0x58ecc7){_0x5d6456=_0x5d6456-0x0;var _0x4d66c1=_0xfd5a[_0x5d6456];return _0x4d66c1;};'use strict';var _=require(_0xafd5('0x0'));var util=require(_0xafd5('0x1'));var moment=require(_0xafd5('0x2'));var BPromise=require(_0xafd5('0x3'));var rs=require(_0xafd5('0x4'));var fs=require('fs');var Redis=require(_0xafd5('0x5'));var db=require(_0xafd5('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0xafd5('0x7'))(_0xafd5('0x8'));var config=require(_0xafd5('0x9'));var jayson=require(_0xafd5('0xa'));var client=jayson['client'][_0xafd5('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x97ed78,_0x39f585,_0xcd394f){return new BPromise(function(_0x3e0f7a,_0x472270){return client['request'](_0x97ed78,_0xcd394f)['then'](function(_0x404f11){logger[_0xafd5('0xc')](_0xafd5('0xd'),_0x39f585,_0xafd5('0xe'));logger[_0xafd5('0xf')](_0xafd5('0x10'),_0x39f585,_0xafd5('0xe'),JSON[_0xafd5('0x11')](_0x404f11));if(_0x404f11[_0xafd5('0x12')]){if(_0x404f11[_0xafd5('0x12')][_0xafd5('0x13')]===0x1f4){logger[_0xafd5('0x12')](_0xafd5('0xd'),_0x39f585,_0x404f11['error']['message']);return _0x472270(_0x404f11['error'][_0xafd5('0x14')]);}logger[_0xafd5('0x12')](_0xafd5('0xd'),_0x39f585,_0x404f11[_0xafd5('0x12')][_0xafd5('0x14')]);return _0x3e0f7a(_0x404f11[_0xafd5('0x12')][_0xafd5('0x14')]);}else{logger['info'](_0xafd5('0xd'),_0x39f585,_0xafd5('0xe'));_0x3e0f7a(_0x404f11[_0xafd5('0x15')][_0xafd5('0x14')]);}})[_0xafd5('0x16')](function(_0x3d6619){logger[_0xafd5('0x12')](_0xafd5('0xd'),_0x39f585,_0x3d6619);_0x472270(_0x3d6619);});});}exports[_0xafd5('0x17')]=function(_0x3413c5){var _0x2a5994=this;return new Promise(function(_0x15d382,_0x3eebce){return db[_0xafd5('0x18')]['findAll']({'raw':_0x3413c5[_0xafd5('0x19')]?_0x3413c5[_0xafd5('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x3413c5[_0xafd5('0x19')]?_0x3413c5[_0xafd5('0x19')][_0xafd5('0x1a')]||null:null,'attributes':_0x3413c5[_0xafd5('0x19')]?_0x3413c5[_0xafd5('0x19')][_0xafd5('0x1b')]||null:null,'limit':_0x3413c5[_0xafd5('0x19')]?_0x3413c5['options']['limit']||null:null,'include':_0x3413c5[_0xafd5('0x19')]?_0x3413c5['options'][_0xafd5('0x1c')]?_[_0xafd5('0x1d')](_0x3413c5[_0xafd5('0x19')][_0xafd5('0x1c')],function(_0x124caf){return{'model':db[_0x124caf[_0xafd5('0x1e')]],'as':_0x124caf['as'],'attributes':_0x124caf['attributes'],'include':_0x124caf[_0xafd5('0x1c')]?_[_0xafd5('0x1d')](_0x124caf[_0xafd5('0x1c')],function(_0x19bd48){return{'model':db[_0x19bd48['model']],'as':_0x19bd48['as'],'attributes':_0x19bd48[_0xafd5('0x1b')],'include':_0x19bd48[_0xafd5('0x1c')]?_[_0xafd5('0x1d')](_0x19bd48['include'],function(_0x219a0e){return{'model':db[_0x219a0e['model']],'as':_0x219a0e['as'],'attributes':_0x219a0e[_0xafd5('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x373483){logger[_0xafd5('0xc')](_0xafd5('0x17'),_0x3413c5);logger['debug'](_0xafd5('0x17'),_0x3413c5,JSON[_0xafd5('0x11')](_0x373483));_0x15d382(_0x373483);})['catch'](function(_0x23f460){logger['error'](_0xafd5('0x17'),_0x23f460[_0xafd5('0x14')],_0x3413c5);_0x3eebce(_0x2a5994[_0xafd5('0x12')](0x1f4,_0x23f460[_0xafd5('0x14')]));});});};exports['ShowServicenowAccount']=function(_0x759791){var _0x3b6131=this;return new Promise(function(_0x583326,_0x27dcfe){return db['ServicenowAccount'][_0xafd5('0x1f')]({'raw':_0x759791[_0xafd5('0x19')]?_0x759791[_0xafd5('0x19')][_0xafd5('0x20')]===undefined?!![]:![]:!![],'where':_0x759791['options']?_0x759791['options'][_0xafd5('0x1a')]||null:null,'attributes':_0x759791[_0xafd5('0x19')]?_0x759791[_0xafd5('0x19')][_0xafd5('0x1b')]||null:null,'include':_0x759791[_0xafd5('0x19')]?_0x759791['options'][_0xafd5('0x1c')]?_[_0xafd5('0x1d')](_0x759791['options'][_0xafd5('0x1c')],function(_0x248f36){return{'model':db[_0x248f36[_0xafd5('0x1e')]],'as':_0x248f36['as'],'attributes':_0x248f36[_0xafd5('0x1b')],'include':_0x248f36['include']?_[_0xafd5('0x1d')](_0x248f36[_0xafd5('0x1c')],function(_0x2f380e){return{'model':db[_0x2f380e['model']],'as':_0x2f380e['as'],'attributes':_0x2f380e[_0xafd5('0x1b')],'include':_0x2f380e['include']?_[_0xafd5('0x1d')](_0x2f380e[_0xafd5('0x1c')],function(_0x96bbc4){return{'model':db[_0x96bbc4[_0xafd5('0x1e')]],'as':_0x96bbc4['as'],'attributes':_0x96bbc4[_0xafd5('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xafd5('0x21')](function(_0x32c2b8){logger[_0xafd5('0xc')](_0xafd5('0x22'),_0x759791);logger[_0xafd5('0xf')](_0xafd5('0x22'),_0x759791,JSON[_0xafd5('0x11')](_0x32c2b8));_0x583326(_0x32c2b8);})[_0xafd5('0x16')](function(_0x21c51e){logger[_0xafd5('0x12')](_0xafd5('0x22'),_0x21c51e['message'],_0x759791);_0x27dcfe(_0x3b6131[_0xafd5('0x12')](0x1f4,_0x21c51e[_0xafd5('0x14')]));});});};
\ No newline at end of file
+var _0x2d8e=['../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','ServicenowAccount,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','GetServicenowAccount','ServicenowAccount','options','where','attributes','limit','map','model','include','ShowServicenowAccount','raw','catch','lodash','util','moment','bluebird','randomstring'];(function(_0x39de58,_0x158a4c){var _0x5ce2d1=function(_0x39fc9e){while(--_0x39fc9e){_0x39de58['push'](_0x39de58['shift']());}};_0x5ce2d1(++_0x158a4c);}(_0x2d8e,0xa5));var _0xe2d8=function(_0x4413cf,_0x3f70e8){_0x4413cf=_0x4413cf-0x0;var _0x9a1479=_0x2d8e[_0x4413cf];return _0x9a1479;};'use strict';var _=require(_0xe2d8('0x0'));var util=require(_0xe2d8('0x1'));var moment=require(_0xe2d8('0x2'));var BPromise=require(_0xe2d8('0x3'));var rs=require(_0xe2d8('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xe2d8('0x5'))(_0xe2d8('0x6'));var config=require(_0xe2d8('0x7'));var jayson=require(_0xe2d8('0x8'));var client=jayson[_0xe2d8('0x9')][_0xe2d8('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x387970,_0x32c94a,_0x58988d){return new BPromise(function(_0x305f1b,_0x3dc8b1){return client[_0xe2d8('0xb')](_0x387970,_0x58988d)[_0xe2d8('0xc')](function(_0x2629d3){logger[_0xe2d8('0xd')](_0xe2d8('0xe'),_0x32c94a,'request\x20sent');logger[_0xe2d8('0xf')]('ServicenowAccount,\x20%s,\x20%s,\x20%s',_0x32c94a,_0xe2d8('0x10'),JSON[_0xe2d8('0x11')](_0x2629d3));if(_0x2629d3[_0xe2d8('0x12')]){if(_0x2629d3[_0xe2d8('0x12')][_0xe2d8('0x13')]===0x1f4){logger[_0xe2d8('0x12')](_0xe2d8('0xe'),_0x32c94a,_0x2629d3[_0xe2d8('0x12')][_0xe2d8('0x14')]);return _0x3dc8b1(_0x2629d3[_0xe2d8('0x12')][_0xe2d8('0x14')]);}logger['error']('ServicenowAccount,\x20%s,\x20%s',_0x32c94a,_0x2629d3[_0xe2d8('0x12')][_0xe2d8('0x14')]);return _0x305f1b(_0x2629d3[_0xe2d8('0x12')]['message']);}else{logger[_0xe2d8('0xd')](_0xe2d8('0xe'),_0x32c94a,_0xe2d8('0x10'));_0x305f1b(_0x2629d3[_0xe2d8('0x15')]['message']);}})['catch'](function(_0x1f56a0){logger[_0xe2d8('0x12')](_0xe2d8('0xe'),_0x32c94a,_0x1f56a0);_0x3dc8b1(_0x1f56a0);});});}exports[_0xe2d8('0x16')]=function(_0x2e65b5){var _0x538ade=this;return new Promise(function(_0x345d1a,_0x4db48e){return db[_0xe2d8('0x17')]['findAll']({'raw':_0x2e65b5[_0xe2d8('0x18')]?_0x2e65b5[_0xe2d8('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0x2e65b5['options']?_0x2e65b5['options'][_0xe2d8('0x19')]||null:null,'attributes':_0x2e65b5[_0xe2d8('0x18')]?_0x2e65b5['options'][_0xe2d8('0x1a')]||null:null,'limit':_0x2e65b5[_0xe2d8('0x18')]?_0x2e65b5[_0xe2d8('0x18')][_0xe2d8('0x1b')]||null:null,'include':_0x2e65b5[_0xe2d8('0x18')]?_0x2e65b5['options']['include']?_[_0xe2d8('0x1c')](_0x2e65b5['options']['include'],function(_0x47f1f4){return{'model':db[_0x47f1f4[_0xe2d8('0x1d')]],'as':_0x47f1f4['as'],'attributes':_0x47f1f4[_0xe2d8('0x1a')],'include':_0x47f1f4['include']?_[_0xe2d8('0x1c')](_0x47f1f4[_0xe2d8('0x1e')],function(_0x1a25bf){return{'model':db[_0x1a25bf[_0xe2d8('0x1d')]],'as':_0x1a25bf['as'],'attributes':_0x1a25bf[_0xe2d8('0x1a')],'include':_0x1a25bf[_0xe2d8('0x1e')]?_[_0xe2d8('0x1c')](_0x1a25bf[_0xe2d8('0x1e')],function(_0x5b8cfc){return{'model':db[_0x5b8cfc[_0xe2d8('0x1d')]],'as':_0x5b8cfc['as'],'attributes':_0x5b8cfc[_0xe2d8('0x1a')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x5c769c){logger[_0xe2d8('0xd')](_0xe2d8('0x16'),_0x2e65b5);logger[_0xe2d8('0xf')]('GetServicenowAccount',_0x2e65b5,JSON[_0xe2d8('0x11')](_0x5c769c));_0x345d1a(_0x5c769c);})['catch'](function(_0x5248eb){logger[_0xe2d8('0x12')](_0xe2d8('0x16'),_0x5248eb[_0xe2d8('0x14')],_0x2e65b5);_0x4db48e(_0x538ade[_0xe2d8('0x12')](0x1f4,_0x5248eb[_0xe2d8('0x14')]));});});};exports[_0xe2d8('0x1f')]=function(_0x57bc41){var _0x24bcb9=this;return new Promise(function(_0x45eb40,_0x311de3){return db['ServicenowAccount']['find']({'raw':_0x57bc41[_0xe2d8('0x18')]?_0x57bc41[_0xe2d8('0x18')][_0xe2d8('0x20')]===undefined?!![]:![]:!![],'where':_0x57bc41[_0xe2d8('0x18')]?_0x57bc41['options']['where']||null:null,'attributes':_0x57bc41[_0xe2d8('0x18')]?_0x57bc41[_0xe2d8('0x18')][_0xe2d8('0x1a')]||null:null,'include':_0x57bc41['options']?_0x57bc41[_0xe2d8('0x18')][_0xe2d8('0x1e')]?_[_0xe2d8('0x1c')](_0x57bc41[_0xe2d8('0x18')][_0xe2d8('0x1e')],function(_0x3d44ce){return{'model':db[_0x3d44ce[_0xe2d8('0x1d')]],'as':_0x3d44ce['as'],'attributes':_0x3d44ce['attributes'],'include':_0x3d44ce[_0xe2d8('0x1e')]?_[_0xe2d8('0x1c')](_0x3d44ce[_0xe2d8('0x1e')],function(_0x337111){return{'model':db[_0x337111[_0xe2d8('0x1d')]],'as':_0x337111['as'],'attributes':_0x337111[_0xe2d8('0x1a')],'include':_0x337111[_0xe2d8('0x1e')]?_[_0xe2d8('0x1c')](_0x337111['include'],function(_0x243fc5){return{'model':db[_0x243fc5['model']],'as':_0x243fc5['as'],'attributes':_0x243fc5[_0xe2d8('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xe2d8('0xc')](function(_0x39280f){logger[_0xe2d8('0xd')]('ShowServicenowAccount',_0x57bc41);logger[_0xe2d8('0xf')](_0xe2d8('0x1f'),_0x57bc41,JSON[_0xe2d8('0x11')](_0x39280f));_0x45eb40(_0x39280f);})[_0xe2d8('0x21')](function(_0x21d91d){logger[_0xe2d8('0x12')]('ShowServicenowAccount',_0x21d91d[_0xe2d8('0x14')],_0x57bc41);_0x311de3(_0x24bcb9[_0xe2d8('0x12')](0x1f4,_0x21d91d[_0xe2d8('0x14')]));});});};
\ No newline at end of file
index 63a4311..094b95a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaffb=['../../config/environment','./intServicenowConfiguration.controller','get','isAuthenticated','/:id','/:id/fields','getFields','/:id/subjects','/:id/descriptions','getDescriptions','post','put','delete','destroy','exports','multer','path','connect-timeout','express','../../components/interaction/service'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xaffb,0x177));var _0xbaff=function(_0x1da04e,_0x31024b){_0x1da04e=_0x1da04e-0x0;var _0xdd8c41=_0xaffb[_0x1da04e];return _0xdd8c41;};'use strict';var multer=require(_0xbaff('0x0'));var util=require('util');var path=require(_0xbaff('0x1'));var timeout=require(_0xbaff('0x2'));var express=require(_0xbaff('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xbaff('0x4'));var config=require(_0xbaff('0x5'));var controller=require(_0xbaff('0x6'));router[_0xbaff('0x7')]('/',auth[_0xbaff('0x8')](),controller['index']);router[_0xbaff('0x7')](_0xbaff('0x9'),auth[_0xbaff('0x8')](),controller['show']);router[_0xbaff('0x7')](_0xbaff('0xa'),auth[_0xbaff('0x8')](),controller[_0xbaff('0xb')]);router['get'](_0xbaff('0xc'),auth[_0xbaff('0x8')](),controller['getSubjects']);router[_0xbaff('0x7')](_0xbaff('0xd'),auth[_0xbaff('0x8')](),controller[_0xbaff('0xe')]);router[_0xbaff('0xf')]('/',auth[_0xbaff('0x8')](),controller['create']);router[_0xbaff('0x10')](_0xbaff('0x9'),auth[_0xbaff('0x8')](),controller['update']);router[_0xbaff('0x11')]('/:id',auth[_0xbaff('0x8')](),controller[_0xbaff('0x12')]);module[_0xbaff('0x13')]=router;
\ No newline at end of file
+var _0x6e23=['util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./intServicenowConfiguration.controller','get','isAuthenticated','index','/:id','/:id/descriptions','getDescriptions','create','put','destroy','exports','multer'];(function(_0x10f68e,_0xf198ea){var _0x4c8372=function(_0x38517){while(--_0x38517){_0x10f68e['push'](_0x10f68e['shift']());}};_0x4c8372(++_0xf198ea);}(_0x6e23,0x12f));var _0x36e2=function(_0x4964f8,_0x22a0ec){_0x4964f8=_0x4964f8-0x0;var _0x944342=_0x6e23[_0x4964f8];return _0x944342;};'use strict';var multer=require(_0x36e2('0x0'));var util=require(_0x36e2('0x1'));var path=require(_0x36e2('0x2'));var timeout=require(_0x36e2('0x3'));var express=require(_0x36e2('0x4'));var router=express[_0x36e2('0x5')]();var auth=require(_0x36e2('0x6'));var interaction=require(_0x36e2('0x7'));var config=require('../../config/environment');var controller=require(_0x36e2('0x8'));router[_0x36e2('0x9')]('/',auth[_0x36e2('0xa')](),controller[_0x36e2('0xb')]);router[_0x36e2('0x9')](_0x36e2('0xc'),auth[_0x36e2('0xa')](),controller['show']);router['get']('/:id/fields',auth['isAuthenticated'](),controller['getFields']);router[_0x36e2('0x9')]('/:id/subjects',auth[_0x36e2('0xa')](),controller['getSubjects']);router['get'](_0x36e2('0xd'),auth[_0x36e2('0xa')](),controller[_0x36e2('0xe')]);router['post']('/',auth[_0x36e2('0xa')](),controller[_0x36e2('0xf')]);router[_0x36e2('0x10')]('/:id',auth[_0x36e2('0xa')](),controller['update']);router['delete'](_0x36e2('0xc'),auth['isAuthenticated'](),controller[_0x36e2('0x11')]);module[_0x36e2('0x12')]=router;
\ No newline at end of file
index 7d8525f..f8b3499 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd34e=['sequelize','exports','STRING'];(function(_0x27c4ee,_0x4c4675){var _0x40d4f1=function(_0x4bf26a){while(--_0x4bf26a){_0x27c4ee['push'](_0x27c4ee['shift']());}};_0x40d4f1(++_0x4c4675);}(_0xd34e,0x159));var _0xed34=function(_0x5437e8,_0x4c1c3d){_0x5437e8=_0x5437e8-0x0;var _0x49e5f6=_0xd34e[_0x5437e8];return _0x49e5f6;};'use strict';var Sequelize=require(_0xed34('0x0'));module[_0xed34('0x1')]={'name':{'type':Sequelize[_0xed34('0x2')]},'description':{'type':Sequelize[_0xed34('0x2')]}};
\ No newline at end of file
+var _0xd066=['STRING','sequelize'];(function(_0x49b207,_0x408ade){var _0x2dc8fa=function(_0x150975){while(--_0x150975){_0x49b207['push'](_0x49b207['shift']());}};_0x2dc8fa(++_0x408ade);}(_0xd066,0x19d));var _0x6d06=function(_0x5dcabf,_0x27ee06){_0x5dcabf=_0x5dcabf-0x0;var _0x24cefb=_0xd066[_0x5dcabf];return _0x24cefb;};'use strict';var Sequelize=require(_0x6d06('0x0'));module['exports']={'name':{'type':Sequelize[_0x6d06('0x1')]},'description':{'type':Sequelize[_0x6d06('0x1')]}};
\ No newline at end of file
index 442443b..5dd5366 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c44=['attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','map','type','key','field','count','includeAll','rows','catch','params','include','options','find','create','body','update','getFields','findOne','ServicenowField','getSubjects','getDescriptions','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','api','../../config/utils','jayson/promise','client','request','then','info','request\x20sent','debug','ServicenowConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','ServicenowConfiguration,\x20%s,\x20%s','result','sendStatus','status','end','offset','limit','Content-Range','json','apply','reject','save','destroy','stack','name','send','index','ServicenowConfiguration','rawAttributes','model','keys','query','intersection'];(function(_0x2d7f0e,_0x3e6fbd){var _0x110b07=function(_0x557b00){while(--_0x557b00){_0x2d7f0e['push'](_0x2d7f0e['shift']());}};_0x110b07(++_0x3e6fbd);}(_0x9c44,0x178));var _0x49c4=function(_0x3ff085,_0x27c92e){_0x3ff085=_0x3ff085-0x0;var _0x2b68c3=_0x9c44[_0x3ff085];return _0x2b68c3;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x49c4('0x0'));var zipdir=require(_0x49c4('0x1'));var jsonpatch=require(_0x49c4('0x2'));var rp=require(_0x49c4('0x3'));var moment=require(_0x49c4('0x4'));var BPromise=require(_0x49c4('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0x49c4('0x6'));var sox=require('sox');var csv=require(_0x49c4('0x7'));var ejs=require(_0x49c4('0x8'));var fs=require('fs');var _=require(_0x49c4('0x9'));var squel=require(_0x49c4('0xa'));var crypto=require(_0x49c4('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x49c4('0xc'));var toCsv=require(_0x49c4('0x7'));var querystring=require(_0x49c4('0xd'));var Papa=require(_0x49c4('0xe'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0x49c4('0xf'));var qs=require(_0x49c4('0x10'));var logger=require('../../config/logger')(_0x49c4('0x11'));var utils=require(_0x49c4('0x12'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var jayson=require(_0x49c4('0x13'));var client=jayson[_0x49c4('0x14')]['http']({'port':0x232a});function respondWithRpcPromise(_0x7df3a9,_0x403bfb,_0x5f2fd9,_0x1909fe){return new BPromise(function(_0x280996,_0x21f15a){var _0x2decee=_0x1909fe||client;return _0x2decee[_0x49c4('0x15')](_0x7df3a9,_0x5f2fd9)[_0x49c4('0x16')](function(_0x75ea8){logger[_0x49c4('0x17')]('ServicenowConfiguration,\x20%s,\x20%s',_0x403bfb,_0x49c4('0x18'));logger[_0x49c4('0x19')](_0x49c4('0x1a'),_0x403bfb,_0x49c4('0x18'),JSON[_0x49c4('0x1b')](_0x75ea8));if(_0x75ea8['error']){if(_0x75ea8[_0x49c4('0x1c')][_0x49c4('0x1d')]===0x1f4){logger['error']('ServicenowConfiguration,\x20%s,\x20%s',_0x403bfb,_0x75ea8[_0x49c4('0x1c')][_0x49c4('0x1e')]);return _0x21f15a(_0x75ea8[_0x49c4('0x1c')]['message']);}logger[_0x49c4('0x1c')]('ServicenowConfiguration,\x20%s,\x20%s',_0x403bfb,_0x75ea8[_0x49c4('0x1c')][_0x49c4('0x1e')]);return _0x280996(_0x75ea8[_0x49c4('0x1c')][_0x49c4('0x1e')]);}else{logger[_0x49c4('0x17')](_0x49c4('0x1f'),_0x403bfb,_0x49c4('0x18'));_0x280996(_0x75ea8[_0x49c4('0x20')][_0x49c4('0x1e')]);}})['catch'](function(_0x527126){logger['error'](_0x49c4('0x1f'),_0x403bfb,_0x527126);_0x21f15a(_0x527126);});});}function respondWithStatusCode(_0x4f0b62,_0x592bb8){_0x592bb8=_0x592bb8||0xcc;return function(_0x2263ae){if(_0x2263ae){return _0x4f0b62[_0x49c4('0x21')](_0x592bb8);}return _0x4f0b62[_0x49c4('0x22')](_0x592bb8)[_0x49c4('0x23')]();};}function respondWithResult(_0x4811c4,_0x5850f2){_0x5850f2=_0x5850f2||0xc8;return function(_0x180276){if(_0x180276){return _0x4811c4[_0x49c4('0x22')](_0x5850f2)['json'](_0x180276);}};}function respondWithFilteredResult(_0x207358,_0x43e014){return function(_0x210159){if(_0x210159){var _0xa7a826=_0x210159['count'],_0x531d92=_0x43e014[_0x49c4('0x24')],_0x543ea2=_0x43e014[_0x49c4('0x24')]+_0x43e014[_0x49c4('0x25')],_0x449960;if(_0x543ea2>=_0xa7a826){_0x543ea2=_0xa7a826;_0x449960=0xc8;}else{_0x449960=0xce;}_0x207358[_0x49c4('0x22')](_0x449960);return _0x207358['set'](_0x49c4('0x26'),_0x531d92+'-'+_0x543ea2+'/'+_0xa7a826)[_0x49c4('0x27')](_0x210159);}return null;};}function patchUpdates(_0x46e04d){return function(_0x4f28a2){try{jsonpatch[_0x49c4('0x28')](_0x4f28a2,_0x46e04d,!![]);}catch(_0x29f835){return BPromise[_0x49c4('0x29')](_0x29f835);}return _0x4f28a2[_0x49c4('0x2a')]();};}function saveUpdates(_0x17b50f,_0x2cbd88){return function(_0x46f7ea){if(_0x46f7ea){return _0x46f7ea['update'](_0x17b50f)['then'](function(_0x59eb84){return _0x59eb84;});}return null;};}function removeEntity(_0x134928,_0x7ee704){return function(_0x1eb035){if(_0x1eb035){return _0x1eb035[_0x49c4('0x2b')]()[_0x49c4('0x16')](function(){_0x134928['status'](0xcc)[_0x49c4('0x23')]();});}};}function handleEntityNotFound(_0x116eb4,_0x2e7a69){return function(_0x24bba9){if(!_0x24bba9){_0x116eb4['sendStatus'](0x194);}return _0x24bba9;};}function handleError(_0x57a29c,_0xce57ef){_0xce57ef=_0xce57ef||0x1f4;return function(_0x9a1bed){logger[_0x49c4('0x1c')](_0x9a1bed[_0x49c4('0x2c')]);if(_0x9a1bed[_0x49c4('0x2d')]){delete _0x9a1bed['name'];}_0x57a29c[_0x49c4('0x22')](_0xce57ef)[_0x49c4('0x2e')](_0x9a1bed);};}exports[_0x49c4('0x2f')]=function(_0x512d02,_0x5ba924){var _0x85dce2={},_0x1991e9={},_0x3bec0a={'count':0x0,'rows':[]};var _0x1238c0=db[_0x49c4('0x30')][_0x49c4('0x31')];_0x1991e9[_0x49c4('0x32')]=_[_0x49c4('0x33')](_0x1238c0);_0x1991e9[_0x49c4('0x34')]=_['keys'](_0x512d02[_0x49c4('0x34')]);_0x1991e9['filters']=_[_0x49c4('0x35')](_0x1991e9[_0x49c4('0x32')],_0x1991e9[_0x49c4('0x34')]);_0x85dce2[_0x49c4('0x36')]=_['intersection'](_0x1991e9[_0x49c4('0x32')],qs[_0x49c4('0x37')](_0x512d02[_0x49c4('0x34')]['fields']));_0x85dce2[_0x49c4('0x36')]=_0x85dce2[_0x49c4('0x36')][_0x49c4('0x38')]?_0x85dce2[_0x49c4('0x36')]:_0x1991e9[_0x49c4('0x32')];if(!_0x512d02[_0x49c4('0x34')][_0x49c4('0x39')](_0x49c4('0x3a'))){_0x85dce2[_0x49c4('0x25')]=qs[_0x49c4('0x25')](_0x512d02[_0x49c4('0x34')]['limit']);_0x85dce2[_0x49c4('0x24')]=qs[_0x49c4('0x24')](_0x512d02[_0x49c4('0x34')][_0x49c4('0x24')]);}_0x85dce2[_0x49c4('0x3b')]=qs[_0x49c4('0x3c')](_0x512d02[_0x49c4('0x34')][_0x49c4('0x3c')]);_0x85dce2[_0x49c4('0x3d')]=qs[_0x49c4('0x3e')](_[_0x49c4('0x3f')](_0x512d02[_0x49c4('0x34')],_0x1991e9[_0x49c4('0x3e')]));if(_0x512d02['query'][_0x49c4('0x40')]){_0x85dce2['where']=_[_0x49c4('0x41')](_0x85dce2[_0x49c4('0x3d')],{'$or':_[_0x49c4('0x42')](_0x1238c0,function(_0x1480da){if(_0x1480da[_0x49c4('0x43')][_0x49c4('0x44')]!=='VIRTUAL'){var _0x4d628a={};_0x4d628a[_0x1480da[_0x49c4('0x45')]]={'$like':'%'+_0x512d02[_0x49c4('0x34')][_0x49c4('0x40')]+'%'};return _0x4d628a;}})});}_0x85dce2=_[_0x49c4('0x41')]({},_0x85dce2,_0x512d02['options']);var _0x3baff9={'where':_0x85dce2[_0x49c4('0x3d')]};return db[_0x49c4('0x30')][_0x49c4('0x46')](_0x3baff9)[_0x49c4('0x16')](function(_0x3bde49){_0x3bec0a[_0x49c4('0x46')]=_0x3bde49;if(_0x512d02[_0x49c4('0x34')][_0x49c4('0x47')]){_0x85dce2['include']=[{'all':!![]}];}return db[_0x49c4('0x30')]['findAll'](_0x85dce2);})[_0x49c4('0x16')](function(_0x628423){_0x3bec0a[_0x49c4('0x48')]=_0x628423;return _0x3bec0a;})[_0x49c4('0x16')](respondWithFilteredResult(_0x5ba924,_0x85dce2))[_0x49c4('0x49')](handleError(_0x5ba924,null));};exports['show']=function(_0x592e8e,_0x15b674){var _0x384862={'raw':![],'where':{'id':_0x592e8e[_0x49c4('0x4a')]['id']}},_0x254d07={};_0x254d07[_0x49c4('0x32')]=_[_0x49c4('0x33')](db['ServicenowConfiguration'][_0x49c4('0x31')]);_0x254d07['query']=_[_0x49c4('0x33')](_0x592e8e[_0x49c4('0x34')]);_0x254d07[_0x49c4('0x3e')]=_[_0x49c4('0x35')](_0x254d07[_0x49c4('0x32')],_0x254d07[_0x49c4('0x34')]);_0x384862[_0x49c4('0x36')]=_['intersection'](_0x254d07[_0x49c4('0x32')],qs[_0x49c4('0x37')](_0x592e8e['query'][_0x49c4('0x37')]));_0x384862[_0x49c4('0x36')]=_0x384862[_0x49c4('0x36')][_0x49c4('0x38')]?_0x384862['attributes']:_0x254d07['model'];if(_0x592e8e[_0x49c4('0x34')]['includeAll']){_0x384862[_0x49c4('0x4b')]=[{'all':!![]}];}_0x384862=_[_0x49c4('0x41')]({},_0x384862,_0x592e8e[_0x49c4('0x4c')]);return db[_0x49c4('0x30')][_0x49c4('0x4d')](_0x384862)[_0x49c4('0x16')](handleEntityNotFound(_0x15b674,null))[_0x49c4('0x16')](respondWithResult(_0x15b674,null))['catch'](handleError(_0x15b674,null));};exports[_0x49c4('0x4e')]=function(_0x1550ce,_0x3936d3){return db[_0x49c4('0x30')][_0x49c4('0x4e')](_0x1550ce[_0x49c4('0x4f')],{})[_0x49c4('0x16')](respondWithResult(_0x3936d3,0xc9))[_0x49c4('0x49')](handleError(_0x3936d3,null));};exports[_0x49c4('0x50')]=function(_0x1856be,_0x5b822f){if(_0x1856be['body']['id']){delete _0x1856be[_0x49c4('0x4f')]['id'];}return db[_0x49c4('0x30')]['find']({'where':{'id':_0x1856be['params']['id']}})[_0x49c4('0x16')](handleEntityNotFound(_0x5b822f,null))['then'](saveUpdates(_0x1856be['body'],null))[_0x49c4('0x16')](respondWithResult(_0x5b822f,null))[_0x49c4('0x49')](handleError(_0x5b822f,null));};exports[_0x49c4('0x2b')]=function(_0x38c480,_0x2884ca){return db[_0x49c4('0x30')][_0x49c4('0x4d')]({'where':{'id':_0x38c480['params']['id']}})[_0x49c4('0x16')](handleEntityNotFound(_0x2884ca,null))[_0x49c4('0x16')](removeEntity(_0x2884ca,null))[_0x49c4('0x49')](handleError(_0x2884ca,null));};exports[_0x49c4('0x51')]=function(_0x73840f,_0xa431d,_0x5d24f3){var _0x5c7ddd={};var _0x1ef0c1={};var _0x155c43;var _0x2a6308;return db[_0x49c4('0x30')][_0x49c4('0x52')]({'where':{'id':_0x73840f[_0x49c4('0x4a')]['id']}})[_0x49c4('0x16')](handleEntityNotFound(_0xa431d,null))['then'](function(_0x45d715){if(_0x45d715){_0x155c43=_0x45d715;_0x1ef0c1[_0x49c4('0x32')]=_['keys'](db[_0x49c4('0x53')]['rawAttributes']);_0x1ef0c1[_0x49c4('0x34')]=_[_0x49c4('0x33')](_0x73840f[_0x49c4('0x34')]);_0x1ef0c1[_0x49c4('0x3e')]=_[_0x49c4('0x35')](_0x1ef0c1[_0x49c4('0x32')],_0x1ef0c1[_0x49c4('0x34')]);_0x5c7ddd[_0x49c4('0x36')]=_['intersection'](_0x1ef0c1[_0x49c4('0x32')],qs[_0x49c4('0x37')](_0x73840f['query'][_0x49c4('0x37')]));_0x5c7ddd[_0x49c4('0x36')]=_0x5c7ddd['attributes'][_0x49c4('0x38')]?_0x5c7ddd[_0x49c4('0x36')]:_0x1ef0c1['model'];_0x5c7ddd['order']=qs['sort'](_0x73840f['query'][_0x49c4('0x3c')]);_0x5c7ddd['where']=qs[_0x49c4('0x3e')](_[_0x49c4('0x3f')](_0x73840f['query'],_0x1ef0c1[_0x49c4('0x3e')]));if(_0x73840f[_0x49c4('0x34')]['filter']){_0x5c7ddd[_0x49c4('0x3d')]=_[_0x49c4('0x41')](_0x5c7ddd[_0x49c4('0x3d')],{'$or':_[_0x49c4('0x42')](_0x5c7ddd['attributes'],function(_0x431921){var _0x16d0e1={};_0x16d0e1[_0x431921]={'$like':'%'+_0x73840f[_0x49c4('0x34')][_0x49c4('0x40')]+'%'};return _0x16d0e1;})});}_0x5c7ddd=_['merge']({},_0x5c7ddd,_0x73840f[_0x49c4('0x4c')]);return _0x155c43['getFields'](_0x5c7ddd);}})['then'](function(_0x58259d){if(_0x58259d){_0x2a6308=_0x58259d['length'];if(!_0x73840f[_0x49c4('0x34')][_0x49c4('0x39')](_0x49c4('0x3a'))){_0x5c7ddd[_0x49c4('0x25')]=qs['limit'](_0x73840f['query'][_0x49c4('0x25')]);_0x5c7ddd[_0x49c4('0x24')]=qs[_0x49c4('0x24')](_0x73840f[_0x49c4('0x34')][_0x49c4('0x24')]);}return _0x155c43[_0x49c4('0x51')](_0x5c7ddd);}})[_0x49c4('0x16')](function(_0x3b949d){if(_0x3b949d){return _0x3b949d?{'count':_0x2a6308,'rows':_0x3b949d}:null;}})['then'](respondWithResult(_0xa431d,null))[_0x49c4('0x49')](handleError(_0xa431d,null));};exports['getSubjects']=function(_0x25e8be,_0x264902,_0x1a5d4c){var _0x1ea1b4={};var _0x3a1c81={};var _0x2e062f;var _0x13d657;return db[_0x49c4('0x30')][_0x49c4('0x52')]({'where':{'id':_0x25e8be[_0x49c4('0x4a')]['id']}})[_0x49c4('0x16')](handleEntityNotFound(_0x264902,null))[_0x49c4('0x16')](function(_0x217ced){if(_0x217ced){_0x2e062f=_0x217ced;_0x3a1c81[_0x49c4('0x32')]=_[_0x49c4('0x33')](db[_0x49c4('0x53')][_0x49c4('0x31')]);_0x3a1c81[_0x49c4('0x34')]=_['keys'](_0x25e8be['query']);_0x3a1c81[_0x49c4('0x3e')]=_[_0x49c4('0x35')](_0x3a1c81['model'],_0x3a1c81[_0x49c4('0x34')]);_0x1ea1b4[_0x49c4('0x36')]=_[_0x49c4('0x35')](_0x3a1c81[_0x49c4('0x32')],qs['fields'](_0x25e8be['query']['fields']));_0x1ea1b4[_0x49c4('0x36')]=_0x1ea1b4[_0x49c4('0x36')][_0x49c4('0x38')]?_0x1ea1b4[_0x49c4('0x36')]:_0x3a1c81[_0x49c4('0x32')];_0x1ea1b4[_0x49c4('0x3b')]=qs[_0x49c4('0x3c')](_0x25e8be[_0x49c4('0x34')][_0x49c4('0x3c')]);_0x1ea1b4['where']=qs[_0x49c4('0x3e')](_[_0x49c4('0x3f')](_0x25e8be[_0x49c4('0x34')],_0x3a1c81['filters']));if(_0x25e8be[_0x49c4('0x34')][_0x49c4('0x40')]){_0x1ea1b4[_0x49c4('0x3d')]=_[_0x49c4('0x41')](_0x1ea1b4[_0x49c4('0x3d')],{'$or':_[_0x49c4('0x42')](_0x1ea1b4[_0x49c4('0x36')],function(_0xfc5e17){var _0x4ba198={};_0x4ba198[_0xfc5e17]={'$like':'%'+_0x25e8be[_0x49c4('0x34')][_0x49c4('0x40')]+'%'};return _0x4ba198;})});}_0x1ea1b4=_[_0x49c4('0x41')]({},_0x1ea1b4,_0x25e8be[_0x49c4('0x4c')]);return _0x2e062f[_0x49c4('0x54')](_0x1ea1b4);}})['then'](function(_0x57a8d8){if(_0x57a8d8){_0x13d657=_0x57a8d8[_0x49c4('0x38')];if(!_0x25e8be['query'][_0x49c4('0x39')]('nolimit')){_0x1ea1b4[_0x49c4('0x25')]=qs[_0x49c4('0x25')](_0x25e8be[_0x49c4('0x34')][_0x49c4('0x25')]);_0x1ea1b4['offset']=qs[_0x49c4('0x24')](_0x25e8be[_0x49c4('0x34')][_0x49c4('0x24')]);}return _0x2e062f[_0x49c4('0x54')](_0x1ea1b4);}})[_0x49c4('0x16')](function(_0xbb7f42){if(_0xbb7f42){return _0xbb7f42?{'count':_0x13d657,'rows':_0xbb7f42}:null;}})[_0x49c4('0x16')](respondWithResult(_0x264902,null))[_0x49c4('0x49')](handleError(_0x264902,null));};exports[_0x49c4('0x55')]=function(_0x2d4ea6,_0x5e7f45,_0x228189){var _0x46e4fd={};var _0x549719={};var _0x15bee0;var _0x5c7e8c;return db[_0x49c4('0x30')][_0x49c4('0x52')]({'where':{'id':_0x2d4ea6[_0x49c4('0x4a')]['id']}})[_0x49c4('0x16')](handleEntityNotFound(_0x5e7f45,null))[_0x49c4('0x16')](function(_0x58b90c){if(_0x58b90c){_0x15bee0=_0x58b90c;_0x549719[_0x49c4('0x32')]=_[_0x49c4('0x33')](db['ServicenowField'][_0x49c4('0x31')]);_0x549719[_0x49c4('0x34')]=_['keys'](_0x2d4ea6[_0x49c4('0x34')]);_0x549719[_0x49c4('0x3e')]=_['intersection'](_0x549719[_0x49c4('0x32')],_0x549719[_0x49c4('0x34')]);_0x46e4fd[_0x49c4('0x36')]=_[_0x49c4('0x35')](_0x549719['model'],qs[_0x49c4('0x37')](_0x2d4ea6[_0x49c4('0x34')]['fields']));_0x46e4fd[_0x49c4('0x36')]=_0x46e4fd['attributes']['length']?_0x46e4fd[_0x49c4('0x36')]:_0x549719['model'];_0x46e4fd['order']=qs[_0x49c4('0x3c')](_0x2d4ea6[_0x49c4('0x34')]['sort']);_0x46e4fd[_0x49c4('0x3d')]=qs['filters'](_['pick'](_0x2d4ea6['query'],_0x549719[_0x49c4('0x3e')]));if(_0x2d4ea6[_0x49c4('0x34')][_0x49c4('0x40')]){_0x46e4fd[_0x49c4('0x3d')]=_['merge'](_0x46e4fd['where'],{'$or':_[_0x49c4('0x42')](_0x46e4fd['attributes'],function(_0x2c560e){var _0x5dc54a={};_0x5dc54a[_0x2c560e]={'$like':'%'+_0x2d4ea6[_0x49c4('0x34')][_0x49c4('0x40')]+'%'};return _0x5dc54a;})});}_0x46e4fd=_[_0x49c4('0x41')]({},_0x46e4fd,_0x2d4ea6[_0x49c4('0x4c')]);return _0x15bee0[_0x49c4('0x55')](_0x46e4fd);}})[_0x49c4('0x16')](function(_0x1b5bd6){if(_0x1b5bd6){_0x5c7e8c=_0x1b5bd6['length'];if(!_0x2d4ea6[_0x49c4('0x34')][_0x49c4('0x39')](_0x49c4('0x3a'))){_0x46e4fd[_0x49c4('0x25')]=qs[_0x49c4('0x25')](_0x2d4ea6['query'][_0x49c4('0x25')]);_0x46e4fd[_0x49c4('0x24')]=qs[_0x49c4('0x24')](_0x2d4ea6['query']['offset']);}return _0x15bee0[_0x49c4('0x55')](_0x46e4fd);}})[_0x49c4('0x16')](function(_0xd30fb9){if(_0xd30fb9){return _0xd30fb9?{'count':_0x5c7e8c,'rows':_0xd30fb9}:null;}})[_0x49c4('0x16')](respondWithResult(_0x5e7f45,null))[_0x49c4('0x49')](handleError(_0x5e7f45,null));};
\ No newline at end of file
+var _0x1339=['info','request\x20sent','debug','stringify','error','message','ServicenowConfiguration,\x20%s,\x20%s','sendStatus','end','status','json','offset','limit','apply','reject','destroy','stack','name','index','ServicenowConfiguration','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','filter','merge','VIRTUAL','field','options','count','includeAll','include','findAll','rows','show','params','find','catch','create','update','body','ServicenowField','getFields','getSubjects','findOne','pick','map','getDescriptions','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','http','request','then'];(function(_0x2f2e11,_0x3e7e98){var _0x2c3280=function(_0x70b046){while(--_0x70b046){_0x2f2e11['push'](_0x2f2e11['shift']());}};_0x2c3280(++_0x3e7e98);}(_0x1339,0x1ed));var _0x9133=function(_0x190175,_0x37b199){_0x190175=_0x190175-0x0;var _0x58eb60=_0x1339[_0x190175];return _0x58eb60;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x9133('0x0'));var zipdir=require(_0x9133('0x1'));var jsonpatch=require(_0x9133('0x2'));var rp=require(_0x9133('0x3'));var moment=require(_0x9133('0x4'));var BPromise=require(_0x9133('0x5'));var Mustache=require(_0x9133('0x6'));var util=require(_0x9133('0x7'));var path=require('path');var sox=require(_0x9133('0x8'));var csv=require(_0x9133('0x9'));var ejs=require(_0x9133('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x9133('0xb'));var crypto=require(_0x9133('0xc'));var jsforce=require(_0x9133('0xd'));var deskjs=require(_0x9133('0xe'));var toCsv=require(_0x9133('0x9'));var querystring=require(_0x9133('0xf'));var Papa=require(_0x9133('0x10'));var authService=require(_0x9133('0x11'));var hardwareService=require(_0x9133('0x12'));var Redis=require(_0x9133('0x13'));var qs=require('../../components/parsers/qs');var logger=require(_0x9133('0x14'))(_0x9133('0x15'));var utils=require(_0x9133('0x16'));var config=require(_0x9133('0x17'));var db=require(_0x9133('0x18'))['db'];var jayson=require(_0x9133('0x19'));var client=jayson['client'][_0x9133('0x1a')]({'port':0x232a});function respondWithRpcPromise(_0x7cc59e,_0x4bbfdc,_0x5283a3,_0x10475c){return new BPromise(function(_0x4bf947,_0x22132a){var _0x439e1a=_0x10475c||client;return _0x439e1a[_0x9133('0x1b')](_0x7cc59e,_0x5283a3)[_0x9133('0x1c')](function(_0x31847a){logger[_0x9133('0x1d')]('ServicenowConfiguration,\x20%s,\x20%s',_0x4bbfdc,_0x9133('0x1e'));logger[_0x9133('0x1f')]('ServicenowConfiguration,\x20%s,\x20%s,\x20%s',_0x4bbfdc,_0x9133('0x1e'),JSON[_0x9133('0x20')](_0x31847a));if(_0x31847a[_0x9133('0x21')]){if(_0x31847a[_0x9133('0x21')]['code']===0x1f4){logger[_0x9133('0x21')]('ServicenowConfiguration,\x20%s,\x20%s',_0x4bbfdc,_0x31847a[_0x9133('0x21')]['message']);return _0x22132a(_0x31847a[_0x9133('0x21')][_0x9133('0x22')]);}logger['error'](_0x9133('0x23'),_0x4bbfdc,_0x31847a['error'][_0x9133('0x22')]);return _0x4bf947(_0x31847a['error']['message']);}else{logger[_0x9133('0x1d')]('ServicenowConfiguration,\x20%s,\x20%s',_0x4bbfdc,_0x9133('0x1e'));_0x4bf947(_0x31847a['result']['message']);}})['catch'](function(_0x2e99a1){logger[_0x9133('0x21')]('ServicenowConfiguration,\x20%s,\x20%s',_0x4bbfdc,_0x2e99a1);_0x22132a(_0x2e99a1);});});}function respondWithStatusCode(_0x448f8b,_0x3f5d0e){_0x3f5d0e=_0x3f5d0e||0xcc;return function(_0xff08d5){if(_0xff08d5){return _0x448f8b[_0x9133('0x24')](_0x3f5d0e);}return _0x448f8b['status'](_0x3f5d0e)[_0x9133('0x25')]();};}function respondWithResult(_0x5c4614,_0x187e32){_0x187e32=_0x187e32||0xc8;return function(_0x2f790d){if(_0x2f790d){return _0x5c4614[_0x9133('0x26')](_0x187e32)[_0x9133('0x27')](_0x2f790d);}};}function respondWithFilteredResult(_0x4483ef,_0xe829b){return function(_0x294332){if(_0x294332){var _0x313d43=_0x294332['count'],_0x1b6b3e=_0xe829b[_0x9133('0x28')],_0x46050b=_0xe829b[_0x9133('0x28')]+_0xe829b[_0x9133('0x29')],_0x51de62;if(_0x46050b>=_0x313d43){_0x46050b=_0x313d43;_0x51de62=0xc8;}else{_0x51de62=0xce;}_0x4483ef[_0x9133('0x26')](_0x51de62);return _0x4483ef['set']('Content-Range',_0x1b6b3e+'-'+_0x46050b+'/'+_0x313d43)[_0x9133('0x27')](_0x294332);}return null;};}function patchUpdates(_0x45966d){return function(_0x188c49){try{jsonpatch[_0x9133('0x2a')](_0x188c49,_0x45966d,!![]);}catch(_0x390f50){return BPromise[_0x9133('0x2b')](_0x390f50);}return _0x188c49['save']();};}function saveUpdates(_0x58afe0,_0x5a27c1){return function(_0x1ad222){if(_0x1ad222){return _0x1ad222['update'](_0x58afe0)[_0x9133('0x1c')](function(_0x1bcb19){return _0x1bcb19;});}return null;};}function removeEntity(_0x540c79,_0xc9c724){return function(_0x5dd90b){if(_0x5dd90b){return _0x5dd90b[_0x9133('0x2c')]()[_0x9133('0x1c')](function(){_0x540c79[_0x9133('0x26')](0xcc)['end']();});}};}function handleEntityNotFound(_0x32e95a,_0x41cfbe){return function(_0x3f189c){if(!_0x3f189c){_0x32e95a['sendStatus'](0x194);}return _0x3f189c;};}function handleError(_0x10cea6,_0x3393a1){_0x3393a1=_0x3393a1||0x1f4;return function(_0x18ba97){logger['error'](_0x18ba97[_0x9133('0x2d')]);if(_0x18ba97[_0x9133('0x2e')]){delete _0x18ba97[_0x9133('0x2e')];}_0x10cea6[_0x9133('0x26')](_0x3393a1)['send'](_0x18ba97);};}exports[_0x9133('0x2f')]=function(_0xea26a3,_0x56719e){var _0x49944={},_0x2d256a={},_0x593fbe={'count':0x0,'rows':[]};var _0x2763f3=db[_0x9133('0x30')][_0x9133('0x31')];_0x2d256a[_0x9133('0x32')]=_[_0x9133('0x33')](_0x2763f3);_0x2d256a[_0x9133('0x34')]=_[_0x9133('0x33')](_0xea26a3[_0x9133('0x34')]);_0x2d256a['filters']=_[_0x9133('0x35')](_0x2d256a[_0x9133('0x32')],_0x2d256a['query']);_0x49944[_0x9133('0x36')]=_[_0x9133('0x35')](_0x2d256a[_0x9133('0x32')],qs[_0x9133('0x37')](_0xea26a3[_0x9133('0x34')][_0x9133('0x37')]));_0x49944['attributes']=_0x49944['attributes'][_0x9133('0x38')]?_0x49944[_0x9133('0x36')]:_0x2d256a[_0x9133('0x32')];if(!_0xea26a3[_0x9133('0x34')][_0x9133('0x39')](_0x9133('0x3a'))){_0x49944[_0x9133('0x29')]=qs[_0x9133('0x29')](_0xea26a3[_0x9133('0x34')]['limit']);_0x49944[_0x9133('0x28')]=qs[_0x9133('0x28')](_0xea26a3[_0x9133('0x34')][_0x9133('0x28')]);}_0x49944[_0x9133('0x3b')]=qs['sort'](_0xea26a3[_0x9133('0x34')][_0x9133('0x3c')]);_0x49944[_0x9133('0x3d')]=qs[_0x9133('0x3e')](_['pick'](_0xea26a3[_0x9133('0x34')],_0x2d256a[_0x9133('0x3e')]));if(_0xea26a3[_0x9133('0x34')][_0x9133('0x3f')]){_0x49944[_0x9133('0x3d')]=_[_0x9133('0x40')](_0x49944[_0x9133('0x3d')],{'$or':_['map'](_0x2763f3,function(_0x7f6cd9){if(_0x7f6cd9['type']['key']!==_0x9133('0x41')){var _0x1d564f={};_0x1d564f[_0x7f6cd9[_0x9133('0x42')]]={'$like':'%'+_0xea26a3[_0x9133('0x34')][_0x9133('0x3f')]+'%'};return _0x1d564f;}})});}_0x49944=_[_0x9133('0x40')]({},_0x49944,_0xea26a3[_0x9133('0x43')]);var _0x3e054e={'where':_0x49944[_0x9133('0x3d')]};return db['ServicenowConfiguration'][_0x9133('0x44')](_0x3e054e)[_0x9133('0x1c')](function(_0x2928bd){_0x593fbe['count']=_0x2928bd;if(_0xea26a3['query'][_0x9133('0x45')]){_0x49944[_0x9133('0x46')]=[{'all':!![]}];}return db['ServicenowConfiguration'][_0x9133('0x47')](_0x49944);})[_0x9133('0x1c')](function(_0x2bbaba){_0x593fbe[_0x9133('0x48')]=_0x2bbaba;return _0x593fbe;})[_0x9133('0x1c')](respondWithFilteredResult(_0x56719e,_0x49944))['catch'](handleError(_0x56719e,null));};exports[_0x9133('0x49')]=function(_0x4423b4,_0x1acf51){var _0x573be5={'raw':![],'where':{'id':_0x4423b4[_0x9133('0x4a')]['id']}},_0x3d884d={};_0x3d884d['model']=_['keys'](db[_0x9133('0x30')][_0x9133('0x31')]);_0x3d884d[_0x9133('0x34')]=_[_0x9133('0x33')](_0x4423b4[_0x9133('0x34')]);_0x3d884d[_0x9133('0x3e')]=_[_0x9133('0x35')](_0x3d884d[_0x9133('0x32')],_0x3d884d[_0x9133('0x34')]);_0x573be5[_0x9133('0x36')]=_[_0x9133('0x35')](_0x3d884d[_0x9133('0x32')],qs['fields'](_0x4423b4['query'][_0x9133('0x37')]));_0x573be5['attributes']=_0x573be5[_0x9133('0x36')][_0x9133('0x38')]?_0x573be5[_0x9133('0x36')]:_0x3d884d[_0x9133('0x32')];if(_0x4423b4['query'][_0x9133('0x45')]){_0x573be5[_0x9133('0x46')]=[{'all':!![]}];}_0x573be5=_[_0x9133('0x40')]({},_0x573be5,_0x4423b4['options']);return db[_0x9133('0x30')][_0x9133('0x4b')](_0x573be5)[_0x9133('0x1c')](handleEntityNotFound(_0x1acf51,null))['then'](respondWithResult(_0x1acf51,null))[_0x9133('0x4c')](handleError(_0x1acf51,null));};exports['create']=function(_0x2342f4,_0x3c4b67){return db[_0x9133('0x30')][_0x9133('0x4d')](_0x2342f4['body'],{})['then'](respondWithResult(_0x3c4b67,0xc9))[_0x9133('0x4c')](handleError(_0x3c4b67,null));};exports[_0x9133('0x4e')]=function(_0x20b1fe,_0xcb544b){if(_0x20b1fe[_0x9133('0x4f')]['id']){delete _0x20b1fe['body']['id'];}return db['ServicenowConfiguration'][_0x9133('0x4b')]({'where':{'id':_0x20b1fe[_0x9133('0x4a')]['id']}})['then'](handleEntityNotFound(_0xcb544b,null))[_0x9133('0x1c')](saveUpdates(_0x20b1fe[_0x9133('0x4f')],null))['then'](respondWithResult(_0xcb544b,null))['catch'](handleError(_0xcb544b,null));};exports['destroy']=function(_0x6d8c71,_0x537046){return db[_0x9133('0x30')][_0x9133('0x4b')]({'where':{'id':_0x6d8c71[_0x9133('0x4a')]['id']}})[_0x9133('0x1c')](handleEntityNotFound(_0x537046,null))['then'](removeEntity(_0x537046,null))[_0x9133('0x4c')](handleError(_0x537046,null));};exports['getFields']=function(_0xc063f8,_0x3d7cf0,_0x46d348){var _0x3f1584={};var _0x3b9927={};var _0x3534bf;var _0x56861c;return db['ServicenowConfiguration']['findOne']({'where':{'id':_0xc063f8[_0x9133('0x4a')]['id']}})[_0x9133('0x1c')](handleEntityNotFound(_0x3d7cf0,null))[_0x9133('0x1c')](function(_0x54a330){if(_0x54a330){_0x3534bf=_0x54a330;_0x3b9927[_0x9133('0x32')]=_[_0x9133('0x33')](db[_0x9133('0x50')][_0x9133('0x31')]);_0x3b9927[_0x9133('0x34')]=_[_0x9133('0x33')](_0xc063f8[_0x9133('0x34')]);_0x3b9927[_0x9133('0x3e')]=_['intersection'](_0x3b9927[_0x9133('0x32')],_0x3b9927['query']);_0x3f1584[_0x9133('0x36')]=_['intersection'](_0x3b9927[_0x9133('0x32')],qs[_0x9133('0x37')](_0xc063f8['query']['fields']));_0x3f1584[_0x9133('0x36')]=_0x3f1584[_0x9133('0x36')][_0x9133('0x38')]?_0x3f1584[_0x9133('0x36')]:_0x3b9927[_0x9133('0x32')];_0x3f1584[_0x9133('0x3b')]=qs[_0x9133('0x3c')](_0xc063f8[_0x9133('0x34')][_0x9133('0x3c')]);_0x3f1584[_0x9133('0x3d')]=qs[_0x9133('0x3e')](_['pick'](_0xc063f8[_0x9133('0x34')],_0x3b9927['filters']));if(_0xc063f8[_0x9133('0x34')][_0x9133('0x3f')]){_0x3f1584[_0x9133('0x3d')]=_[_0x9133('0x40')](_0x3f1584[_0x9133('0x3d')],{'$or':_['map'](_0x3f1584[_0x9133('0x36')],function(_0x1f0ca7){var _0x19339e={};_0x19339e[_0x1f0ca7]={'$like':'%'+_0xc063f8[_0x9133('0x34')]['filter']+'%'};return _0x19339e;})});}_0x3f1584=_[_0x9133('0x40')]({},_0x3f1584,_0xc063f8[_0x9133('0x43')]);return _0x3534bf[_0x9133('0x51')](_0x3f1584);}})[_0x9133('0x1c')](function(_0x49be9d){if(_0x49be9d){_0x56861c=_0x49be9d['length'];if(!_0xc063f8[_0x9133('0x34')][_0x9133('0x39')](_0x9133('0x3a'))){_0x3f1584[_0x9133('0x29')]=qs[_0x9133('0x29')](_0xc063f8[_0x9133('0x34')]['limit']);_0x3f1584[_0x9133('0x28')]=qs[_0x9133('0x28')](_0xc063f8[_0x9133('0x34')][_0x9133('0x28')]);}return _0x3534bf['getFields'](_0x3f1584);}})[_0x9133('0x1c')](function(_0x54ddcd){if(_0x54ddcd){return _0x54ddcd?{'count':_0x56861c,'rows':_0x54ddcd}:null;}})[_0x9133('0x1c')](respondWithResult(_0x3d7cf0,null))[_0x9133('0x4c')](handleError(_0x3d7cf0,null));};exports[_0x9133('0x52')]=function(_0x39b46d,_0x3e3b82,_0x5a2c0d){var _0x3c87d4={};var _0x1741c2={};var _0x55e0ca;var _0x23bd83;return db[_0x9133('0x30')][_0x9133('0x53')]({'where':{'id':_0x39b46d[_0x9133('0x4a')]['id']}})[_0x9133('0x1c')](handleEntityNotFound(_0x3e3b82,null))['then'](function(_0x5bdb85){if(_0x5bdb85){_0x55e0ca=_0x5bdb85;_0x1741c2['model']=_[_0x9133('0x33')](db[_0x9133('0x50')][_0x9133('0x31')]);_0x1741c2['query']=_[_0x9133('0x33')](_0x39b46d[_0x9133('0x34')]);_0x1741c2[_0x9133('0x3e')]=_[_0x9133('0x35')](_0x1741c2[_0x9133('0x32')],_0x1741c2[_0x9133('0x34')]);_0x3c87d4[_0x9133('0x36')]=_[_0x9133('0x35')](_0x1741c2['model'],qs[_0x9133('0x37')](_0x39b46d[_0x9133('0x34')]['fields']));_0x3c87d4[_0x9133('0x36')]=_0x3c87d4['attributes'][_0x9133('0x38')]?_0x3c87d4[_0x9133('0x36')]:_0x1741c2[_0x9133('0x32')];_0x3c87d4[_0x9133('0x3b')]=qs[_0x9133('0x3c')](_0x39b46d['query'][_0x9133('0x3c')]);_0x3c87d4[_0x9133('0x3d')]=qs[_0x9133('0x3e')](_[_0x9133('0x54')](_0x39b46d['query'],_0x1741c2[_0x9133('0x3e')]));if(_0x39b46d[_0x9133('0x34')][_0x9133('0x3f')]){_0x3c87d4[_0x9133('0x3d')]=_[_0x9133('0x40')](_0x3c87d4[_0x9133('0x3d')],{'$or':_[_0x9133('0x55')](_0x3c87d4[_0x9133('0x36')],function(_0x650c7d){var _0x31bda5={};_0x31bda5[_0x650c7d]={'$like':'%'+_0x39b46d[_0x9133('0x34')]['filter']+'%'};return _0x31bda5;})});}_0x3c87d4=_[_0x9133('0x40')]({},_0x3c87d4,_0x39b46d[_0x9133('0x43')]);return _0x55e0ca[_0x9133('0x52')](_0x3c87d4);}})[_0x9133('0x1c')](function(_0x5dac5c){if(_0x5dac5c){_0x23bd83=_0x5dac5c[_0x9133('0x38')];if(!_0x39b46d['query'][_0x9133('0x39')](_0x9133('0x3a'))){_0x3c87d4[_0x9133('0x29')]=qs['limit'](_0x39b46d[_0x9133('0x34')][_0x9133('0x29')]);_0x3c87d4[_0x9133('0x28')]=qs['offset'](_0x39b46d[_0x9133('0x34')][_0x9133('0x28')]);}return _0x55e0ca['getSubjects'](_0x3c87d4);}})[_0x9133('0x1c')](function(_0x12094c){if(_0x12094c){return _0x12094c?{'count':_0x23bd83,'rows':_0x12094c}:null;}})[_0x9133('0x1c')](respondWithResult(_0x3e3b82,null))['catch'](handleError(_0x3e3b82,null));};exports[_0x9133('0x56')]=function(_0x5d1608,_0x401d6c,_0x83454c){var _0x64e16={};var _0x4ac03e={};var _0x2bd590;var _0x54f9ad;return db[_0x9133('0x30')][_0x9133('0x53')]({'where':{'id':_0x5d1608[_0x9133('0x4a')]['id']}})[_0x9133('0x1c')](handleEntityNotFound(_0x401d6c,null))[_0x9133('0x1c')](function(_0x42bc2c){if(_0x42bc2c){_0x2bd590=_0x42bc2c;_0x4ac03e[_0x9133('0x32')]=_[_0x9133('0x33')](db['ServicenowField'][_0x9133('0x31')]);_0x4ac03e[_0x9133('0x34')]=_[_0x9133('0x33')](_0x5d1608[_0x9133('0x34')]);_0x4ac03e[_0x9133('0x3e')]=_['intersection'](_0x4ac03e[_0x9133('0x32')],_0x4ac03e[_0x9133('0x34')]);_0x64e16[_0x9133('0x36')]=_[_0x9133('0x35')](_0x4ac03e['model'],qs[_0x9133('0x37')](_0x5d1608['query'][_0x9133('0x37')]));_0x64e16[_0x9133('0x36')]=_0x64e16[_0x9133('0x36')][_0x9133('0x38')]?_0x64e16['attributes']:_0x4ac03e[_0x9133('0x32')];_0x64e16[_0x9133('0x3b')]=qs[_0x9133('0x3c')](_0x5d1608[_0x9133('0x34')][_0x9133('0x3c')]);_0x64e16['where']=qs['filters'](_['pick'](_0x5d1608['query'],_0x4ac03e[_0x9133('0x3e')]));if(_0x5d1608[_0x9133('0x34')][_0x9133('0x3f')]){_0x64e16['where']=_[_0x9133('0x40')](_0x64e16[_0x9133('0x3d')],{'$or':_[_0x9133('0x55')](_0x64e16[_0x9133('0x36')],function(_0x89f308){var _0x572b77={};_0x572b77[_0x89f308]={'$like':'%'+_0x5d1608[_0x9133('0x34')]['filter']+'%'};return _0x572b77;})});}_0x64e16=_[_0x9133('0x40')]({},_0x64e16,_0x5d1608[_0x9133('0x43')]);return _0x2bd590[_0x9133('0x56')](_0x64e16);}})[_0x9133('0x1c')](function(_0x1077ec){if(_0x1077ec){_0x54f9ad=_0x1077ec['length'];if(!_0x5d1608[_0x9133('0x34')][_0x9133('0x39')](_0x9133('0x3a'))){_0x64e16['limit']=qs[_0x9133('0x29')](_0x5d1608['query'][_0x9133('0x29')]);_0x64e16[_0x9133('0x28')]=qs[_0x9133('0x28')](_0x5d1608[_0x9133('0x34')][_0x9133('0x28')]);}return _0x2bd590[_0x9133('0x56')](_0x64e16);}})['then'](function(_0x10895b){if(_0x10895b){return _0x10895b?{'count':_0x54f9ad,'rows':_0x10895b}:null;}})[_0x9133('0x1c')](respondWithResult(_0x401d6c,null))[_0x9133('0x4c')](handleError(_0x401d6c,null));};
\ No newline at end of file
index 69dd4bf..31a053c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x667d=['moment','bluebird','exports','define','ServicenowConfiguration','lodash','util','api'];(function(_0x4b61a9,_0x17aebd){var _0x518948=function(_0x3b0847){while(--_0x3b0847){_0x4b61a9['push'](_0x4b61a9['shift']());}};_0x518948(++_0x17aebd);}(_0x667d,0x1b5));var _0xd667=function(_0x4f9a0e,_0x313166){_0x4f9a0e=_0x4f9a0e-0x0;var _0x13aefe=_0x667d[_0x4f9a0e];return _0x13aefe;};'use strict';var _=require(_0xd667('0x0'));var util=require(_0xd667('0x1'));var logger=require('../../config/logger')(_0xd667('0x2'));var moment=require(_0xd667('0x3'));var BPromise=require(_0xd667('0x4'));var rp=require('request-promise');var attributes=require('./intServicenowConfiguration.attributes');module[_0xd667('0x5')]=function(_0x1179f1,_0x1876ef){return _0x1179f1[_0xd667('0x6')](_0xd667('0x7'),attributes,{'tableName':'int_servicenow_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb9a6=['ServicenowConfiguration','util','../../config/logger','api','moment','bluebird','./intServicenowConfiguration.attributes','exports','define'];(function(_0x3ac882,_0x370ae4){var _0x505c4c=function(_0x2abd9c){while(--_0x2abd9c){_0x3ac882['push'](_0x3ac882['shift']());}};_0x505c4c(++_0x370ae4);}(_0xb9a6,0x1d5));var _0x6b9a=function(_0x5dde26,_0x43a96b){_0x5dde26=_0x5dde26-0x0;var _0x4a5016=_0xb9a6[_0x5dde26];return _0x4a5016;};'use strict';var _=require('lodash');var util=require(_0x6b9a('0x0'));var logger=require(_0x6b9a('0x1'))(_0x6b9a('0x2'));var moment=require(_0x6b9a('0x3'));var BPromise=require(_0x6b9a('0x4'));var rp=require('request-promise');var attributes=require(_0x6b9a('0x5'));module[_0x6b9a('0x6')]=function(_0x20ae0a,_0x103d4c){return _0x20ae0a[_0x6b9a('0x7')](_0x6b9a('0x8'),attributes,{'tableName':'int_servicenow_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index db06164..6a8297e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x030c=['code','error','ServicenowConfiguration,\x20%s,\x20%s','message','result','lodash','util','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','client','http','request','then','info','request\x20sent','debug','ServicenowConfiguration,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x42de3d,_0x52cc5c){var _0x30d3e1=function(_0xe8517f){while(--_0xe8517f){_0x42de3d['push'](_0x42de3d['shift']());}};_0x30d3e1(++_0x52cc5c);}(_0x030c,0xd7));var _0xc030=function(_0x452d2a,_0x9c7acc){_0x452d2a=_0x452d2a-0x0;var _0x3686ca=_0x030c[_0x452d2a];return _0x3686ca;};'use strict';var _=require(_0xc030('0x0'));var util=require(_0xc030('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xc030('0x2'));var db=require(_0xc030('0x3'))['db'];var utils=require(_0xc030('0x4'));var logger=require('../../config/logger')(_0xc030('0x5'));var config=require(_0xc030('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xc030('0x7')][_0xc030('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2dc2a6,_0x3277ce,_0x510376){return new BPromise(function(_0x526504,_0x3938df){return client[_0xc030('0x9')](_0x2dc2a6,_0x510376)[_0xc030('0xa')](function(_0x22dbf3){logger[_0xc030('0xb')]('ServicenowConfiguration,\x20%s,\x20%s',_0x3277ce,_0xc030('0xc'));logger[_0xc030('0xd')](_0xc030('0xe'),_0x3277ce,'request\x20sent',JSON[_0xc030('0xf')](_0x22dbf3));if(_0x22dbf3['error']){if(_0x22dbf3['error'][_0xc030('0x10')]===0x1f4){logger[_0xc030('0x11')](_0xc030('0x12'),_0x3277ce,_0x22dbf3[_0xc030('0x11')][_0xc030('0x13')]);return _0x3938df(_0x22dbf3[_0xc030('0x11')][_0xc030('0x13')]);}logger[_0xc030('0x11')](_0xc030('0x12'),_0x3277ce,_0x22dbf3[_0xc030('0x11')][_0xc030('0x13')]);return _0x526504(_0x22dbf3[_0xc030('0x11')][_0xc030('0x13')]);}else{logger[_0xc030('0xb')]('ServicenowConfiguration,\x20%s,\x20%s',_0x3277ce,_0xc030('0xc'));_0x526504(_0x22dbf3[_0xc030('0x14')]['message']);}})['catch'](function(_0x5cc59a){logger[_0xc030('0x11')](_0xc030('0x12'),_0x3277ce,_0x5cc59a);_0x3938df(_0x5cc59a);});});}
\ No newline at end of file
+var _0xf90d=['../../config/environment','jayson/promise','request','then','info','ServicenowConfiguration,\x20%s,\x20%s','request\x20sent','debug','ServicenowConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0xdd2bfa,_0x5bd304){var _0x55397e=function(_0x196f7d){while(--_0x196f7d){_0xdd2bfa['push'](_0xdd2bfa['shift']());}};_0x55397e(++_0x5bd304);}(_0xf90d,0xcf));var _0xdf90=function(_0x562c08,_0x118ccf){_0x562c08=_0x562c08-0x0;var _0x5aee83=_0xf90d[_0x562c08];return _0x5aee83;};'use strict';var _=require(_0xdf90('0x0'));var util=require(_0xdf90('0x1'));var moment=require(_0xdf90('0x2'));var BPromise=require('bluebird');var rs=require(_0xdf90('0x3'));var fs=require('fs');var Redis=require(_0xdf90('0x4'));var db=require(_0xdf90('0x5'))['db'];var utils=require(_0xdf90('0x6'));var logger=require(_0xdf90('0x7'))(_0xdf90('0x8'));var config=require(_0xdf90('0x9'));var jayson=require(_0xdf90('0xa'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x58c3ec,_0x43c0ba,_0x21232d){return new BPromise(function(_0x1d886f,_0xc5549a){return client[_0xdf90('0xb')](_0x58c3ec,_0x21232d)[_0xdf90('0xc')](function(_0x16232a){logger[_0xdf90('0xd')](_0xdf90('0xe'),_0x43c0ba,_0xdf90('0xf'));logger[_0xdf90('0x10')](_0xdf90('0x11'),_0x43c0ba,'request\x20sent',JSON[_0xdf90('0x12')](_0x16232a));if(_0x16232a[_0xdf90('0x13')]){if(_0x16232a['error'][_0xdf90('0x14')]===0x1f4){logger[_0xdf90('0x13')](_0xdf90('0xe'),_0x43c0ba,_0x16232a[_0xdf90('0x13')]['message']);return _0xc5549a(_0x16232a['error'][_0xdf90('0x15')]);}logger[_0xdf90('0x13')]('ServicenowConfiguration,\x20%s,\x20%s',_0x43c0ba,_0x16232a[_0xdf90('0x13')][_0xdf90('0x15')]);return _0x1d886f(_0x16232a['error'][_0xdf90('0x15')]);}else{logger[_0xdf90('0xd')]('ServicenowConfiguration,\x20%s,\x20%s',_0x43c0ba,'request\x20sent');_0x1d886f(_0x16232a[_0xdf90('0x16')]['message']);}})[_0xdf90('0x17')](function(_0x480428){logger[_0xdf90('0x13')](_0xdf90('0xe'),_0x43c0ba,_0x480428);_0xc5549a(_0x480428);});});}
\ No newline at end of file
index 6dd47d1..9fdb75b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2f4a=['destroy','exports','util','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/:id','show','post','isAuthenticated','create','update','delete'];(function(_0x486f00,_0x283182){var _0x2b29a8=function(_0x20c750){while(--_0x20c750){_0x486f00['push'](_0x486f00['shift']());}};_0x2b29a8(++_0x283182);}(_0x2f4a,0xb2));var _0xa2f4=function(_0x30ae5e,_0x391fc4){_0x30ae5e=_0x30ae5e-0x0;var _0x1f2e93=_0x2f4a[_0x30ae5e];return _0x1f2e93;};'use strict';var multer=require('multer');var util=require(_0xa2f4('0x0'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xa2f4('0x1'));var router=express['Router']();var auth=require(_0xa2f4('0x2'));var interaction=require(_0xa2f4('0x3'));var config=require(_0xa2f4('0x4'));var controller=require('./intServicenowField.controller');router[_0xa2f4('0x5')]('/',auth['isAuthenticated'](),controller[_0xa2f4('0x6')]);router[_0xa2f4('0x5')](_0xa2f4('0x7'),auth['isAuthenticated'](),controller[_0xa2f4('0x8')]);router[_0xa2f4('0x9')]('/',auth[_0xa2f4('0xa')](),controller[_0xa2f4('0xb')]);router['put'](_0xa2f4('0x7'),auth[_0xa2f4('0xa')](),controller[_0xa2f4('0xc')]);router[_0xa2f4('0xd')](_0xa2f4('0x7'),auth[_0xa2f4('0xa')](),controller[_0xa2f4('0xe')]);module[_0xa2f4('0xf')]=router;
\ No newline at end of file
+var _0xf60d=['get','/:id','show','post','create','put','update','exports','multer','util','connect-timeout','../../components/auth/service','../../config/environment','./intServicenowField.controller','isAuthenticated','index'];(function(_0x2c9757,_0x58e244){var _0x1803e1=function(_0x10d60c){while(--_0x10d60c){_0x2c9757['push'](_0x2c9757['shift']());}};_0x1803e1(++_0x58e244);}(_0xf60d,0xb8));var _0xdf60=function(_0x16b9ed,_0x56517a){_0x16b9ed=_0x16b9ed-0x0;var _0x66b1f8=_0xf60d[_0x16b9ed];return _0x66b1f8;};'use strict';var multer=require(_0xdf60('0x0'));var util=require(_0xdf60('0x1'));var path=require('path');var timeout=require(_0xdf60('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0xdf60('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xdf60('0x4'));var controller=require(_0xdf60('0x5'));router['get']('/',auth[_0xdf60('0x6')](),controller[_0xdf60('0x7')]);router[_0xdf60('0x8')](_0xdf60('0x9'),auth[_0xdf60('0x6')](),controller[_0xdf60('0xa')]);router[_0xdf60('0xb')]('/',auth[_0xdf60('0x6')](),controller[_0xdf60('0xc')]);router[_0xdf60('0xd')](_0xdf60('0x9'),auth['isAuthenticated'](),controller[_0xdf60('0xe')]);router['delete']('/:id',auth[_0xdf60('0x6')](),controller['destroy']);module[_0xdf60('0xf')]=router;
\ No newline at end of file
index fff711b..011e351 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9354=['variable','customVariable','keyValue','string','STRING','BOOLEAN','exports','ENUM'];(function(_0x190fbd,_0x44e71b){var _0x54ef6a=function(_0x301558){while(--_0x301558){_0x190fbd['push'](_0x190fbd['shift']());}};_0x54ef6a(++_0x44e71b);}(_0x9354,0x96));var _0x4935=function(_0x1f1fb4,_0x15a561){_0x1f1fb4=_0x1f1fb4-0x0;var _0x12fa15=_0x9354[_0x1f1fb4];return _0x12fa15;};'use strict';var Sequelize=require('sequelize');module[_0x4935('0x0')]={'type':{'type':Sequelize[_0x4935('0x1')]('string',_0x4935('0x2'),_0x4935('0x3'),_0x4935('0x4')),'defaultValue':_0x4935('0x5')},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize[_0x4935('0x6')]},'keyType':{'type':Sequelize[_0x4935('0x1')](_0x4935('0x5'),_0x4935('0x2'),_0x4935('0x3'))},'keyContent':{'type':Sequelize[_0x4935('0x6')]},'idField':{'type':Sequelize[_0x4935('0x6')]},'nameField':{'type':Sequelize[_0x4935('0x6')]},'customField':{'type':Sequelize[_0x4935('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x1339=['keyValue','STRING','BOOLEAN','ENUM','string','variable','customVariable'];(function(_0x1aedfb,_0xed280d){var _0x578bc7=function(_0x319459){while(--_0x319459){_0x1aedfb['push'](_0x1aedfb['shift']());}};_0x578bc7(++_0xed280d);}(_0x1339,0x1ed));var _0x9133=function(_0x3e15af,_0x1ed02a){_0x3e15af=_0x3e15af-0x0;var _0x353430=_0x1339[_0x3e15af];return _0x353430;};'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 2cfdc98..28b1eb1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc4c1=['filter','where','map','type','key','VIRTUAL','field','options','ServicenowField','includeAll','include','findAll','catch','show','params','rawAttributes','merge','find','create','body','update','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','destroy','then','error','stack','name','send','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xc4c1,0x182));var _0x1c4c=function(_0x5f3b30,_0x10400b){_0x5f3b30=_0x5f3b30-0x0;var _0x2584b2=_0xc4c1[_0x5f3b30];return _0x2584b2;};'use strict';var pdf=require(_0x1c4c('0x0'));var emlformat=require(_0x1c4c('0x1'));var rimraf=require(_0x1c4c('0x2'));var zipdir=require(_0x1c4c('0x3'));var jsonpatch=require(_0x1c4c('0x4'));var rp=require('request-promise');var moment=require(_0x1c4c('0x5'));var BPromise=require(_0x1c4c('0x6'));var Mustache=require(_0x1c4c('0x7'));var util=require(_0x1c4c('0x8'));var path=require(_0x1c4c('0x9'));var sox=require(_0x1c4c('0xa'));var csv=require('to-csv');var ejs=require(_0x1c4c('0xb'));var fs=require('fs');var _=require(_0x1c4c('0xc'));var squel=require(_0x1c4c('0xd'));var crypto=require('crypto');var jsforce=require(_0x1c4c('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x1c4c('0xf'));var Papa=require(_0x1c4c('0x10'));var authService=require(_0x1c4c('0x11'));var hardwareService=require(_0x1c4c('0x12'));var Redis=require(_0x1c4c('0x13'));var qs=require(_0x1c4c('0x14'));var logger=require(_0x1c4c('0x15'))('api');var utils=require(_0x1c4c('0x16'));var config=require(_0x1c4c('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xd22575,_0x4f47fd){_0x4f47fd=_0x4f47fd||0xcc;return function(_0x45e4ac){if(_0x45e4ac){return _0xd22575[_0x1c4c('0x18')](_0x4f47fd);}return _0xd22575['status'](_0x4f47fd)[_0x1c4c('0x19')]();};}function respondWithResult(_0x5757fa,_0x27eb58){_0x27eb58=_0x27eb58||0xc8;return function(_0x4255bc){if(_0x4255bc){return _0x5757fa[_0x1c4c('0x1a')](_0x27eb58)[_0x1c4c('0x1b')](_0x4255bc);}};}function respondWithFilteredResult(_0x5b7926,_0x1ae1b6){return function(_0xfa4f5d){if(_0xfa4f5d){var _0x2cedf2=_0xfa4f5d[_0x1c4c('0x1c')],_0x272103=_0x1ae1b6[_0x1c4c('0x1d')],_0x2e6c72=_0x1ae1b6[_0x1c4c('0x1d')]+_0x1ae1b6[_0x1c4c('0x1e')],_0x50c14b;if(_0x2e6c72>=_0x2cedf2){_0x2e6c72=_0x2cedf2;_0x50c14b=0xc8;}else{_0x50c14b=0xce;}_0x5b7926[_0x1c4c('0x1a')](_0x50c14b);return _0x5b7926[_0x1c4c('0x1f')](_0x1c4c('0x20'),_0x272103+'-'+_0x2e6c72+'/'+_0x2cedf2)[_0x1c4c('0x1b')](_0xfa4f5d);}return null;};}function patchUpdates(_0x4bdc6d){return function(_0x27eeee){try{jsonpatch[_0x1c4c('0x21')](_0x27eeee,_0x4bdc6d,!![]);}catch(_0x4661a1){return BPromise[_0x1c4c('0x22')](_0x4661a1);}return _0x27eeee['save']();};}function saveUpdates(_0x265c1f,_0x14e367){return function(_0x2c85a5){if(_0x2c85a5){return _0x2c85a5['update'](_0x265c1f)['then'](function(_0x1bc875){return _0x1bc875;});}return null;};}function removeEntity(_0x3f53b3,_0x47e6ff){return function(_0x1febe7){if(_0x1febe7){return _0x1febe7[_0x1c4c('0x23')]()[_0x1c4c('0x24')](function(){_0x3f53b3[_0x1c4c('0x1a')](0xcc)[_0x1c4c('0x19')]();});}};}function handleEntityNotFound(_0x4fa0ce,_0x243833){return function(_0x865779){if(!_0x865779){_0x4fa0ce[_0x1c4c('0x18')](0x194);}return _0x865779;};}function handleError(_0x43380c,_0x389728){_0x389728=_0x389728||0x1f4;return function(_0x47033d){logger[_0x1c4c('0x25')](_0x47033d[_0x1c4c('0x26')]);if(_0x47033d[_0x1c4c('0x27')]){delete _0x47033d[_0x1c4c('0x27')];}_0x43380c[_0x1c4c('0x1a')](_0x389728)[_0x1c4c('0x28')](_0x47033d);};}exports['index']=function(_0x581a1d,_0x2cb34d){var _0x4cc1cb={},_0x1c39f9={},_0x55b202={'count':0x0,'rows':[]};var _0x11a8bb=db['ServicenowField']['rawAttributes'];_0x1c39f9[_0x1c4c('0x29')]=_[_0x1c4c('0x2a')](_0x11a8bb);_0x1c39f9['query']=_[_0x1c4c('0x2a')](_0x581a1d[_0x1c4c('0x2b')]);_0x1c39f9[_0x1c4c('0x2c')]=_[_0x1c4c('0x2d')](_0x1c39f9[_0x1c4c('0x29')],_0x1c39f9['query']);_0x4cc1cb[_0x1c4c('0x2e')]=_['intersection'](_0x1c39f9[_0x1c4c('0x29')],qs[_0x1c4c('0x2f')](_0x581a1d['query'][_0x1c4c('0x2f')]));_0x4cc1cb[_0x1c4c('0x2e')]=_0x4cc1cb[_0x1c4c('0x2e')][_0x1c4c('0x30')]?_0x4cc1cb['attributes']:_0x1c39f9['model'];if(!_0x581a1d[_0x1c4c('0x2b')][_0x1c4c('0x31')]('nolimit')){_0x4cc1cb[_0x1c4c('0x1e')]=qs[_0x1c4c('0x1e')](_0x581a1d[_0x1c4c('0x2b')][_0x1c4c('0x1e')]);_0x4cc1cb[_0x1c4c('0x1d')]=qs[_0x1c4c('0x1d')](_0x581a1d['query'][_0x1c4c('0x1d')]);}_0x4cc1cb[_0x1c4c('0x32')]=qs[_0x1c4c('0x33')](_0x581a1d[_0x1c4c('0x2b')]['sort']);_0x4cc1cb['where']=qs[_0x1c4c('0x2c')](_['pick'](_0x581a1d['query'],_0x1c39f9[_0x1c4c('0x2c')]));if(_0x581a1d[_0x1c4c('0x2b')][_0x1c4c('0x34')]){_0x4cc1cb['where']=_['merge'](_0x4cc1cb[_0x1c4c('0x35')],{'$or':_[_0x1c4c('0x36')](_0x11a8bb,function(_0x4dd455){if(_0x4dd455[_0x1c4c('0x37')][_0x1c4c('0x38')]!==_0x1c4c('0x39')){var _0x2e7054={};_0x2e7054[_0x4dd455[_0x1c4c('0x3a')]]={'$like':'%'+_0x581a1d['query'][_0x1c4c('0x34')]+'%'};return _0x2e7054;}})});}_0x4cc1cb=_['merge']({},_0x4cc1cb,_0x581a1d[_0x1c4c('0x3b')]);var _0x20c3b3={'where':_0x4cc1cb[_0x1c4c('0x35')]};return db[_0x1c4c('0x3c')][_0x1c4c('0x1c')](_0x20c3b3)[_0x1c4c('0x24')](function(_0x32b039){_0x55b202['count']=_0x32b039;if(_0x581a1d['query'][_0x1c4c('0x3d')]){_0x4cc1cb[_0x1c4c('0x3e')]=[{'all':!![]}];}return db[_0x1c4c('0x3c')][_0x1c4c('0x3f')](_0x4cc1cb);})['then'](function(_0x16cf09){_0x55b202['rows']=_0x16cf09;return _0x55b202;})[_0x1c4c('0x24')](respondWithFilteredResult(_0x2cb34d,_0x4cc1cb))[_0x1c4c('0x40')](handleError(_0x2cb34d,null));};exports[_0x1c4c('0x41')]=function(_0x46fbbf,_0xa83750){var _0x2af318={'raw':!![],'where':{'id':_0x46fbbf[_0x1c4c('0x42')]['id']}},_0x2f0194={};_0x2f0194[_0x1c4c('0x29')]=_[_0x1c4c('0x2a')](db[_0x1c4c('0x3c')][_0x1c4c('0x43')]);_0x2f0194[_0x1c4c('0x2b')]=_[_0x1c4c('0x2a')](_0x46fbbf[_0x1c4c('0x2b')]);_0x2f0194[_0x1c4c('0x2c')]=_['intersection'](_0x2f0194[_0x1c4c('0x29')],_0x2f0194[_0x1c4c('0x2b')]);_0x2af318[_0x1c4c('0x2e')]=_['intersection'](_0x2f0194[_0x1c4c('0x29')],qs[_0x1c4c('0x2f')](_0x46fbbf['query'][_0x1c4c('0x2f')]));_0x2af318['attributes']=_0x2af318[_0x1c4c('0x2e')]['length']?_0x2af318[_0x1c4c('0x2e')]:_0x2f0194[_0x1c4c('0x29')];if(_0x46fbbf[_0x1c4c('0x2b')]['includeAll']){_0x2af318[_0x1c4c('0x3e')]=[{'all':!![]}];}_0x2af318=_[_0x1c4c('0x44')]({},_0x2af318,_0x46fbbf[_0x1c4c('0x3b')]);return db[_0x1c4c('0x3c')][_0x1c4c('0x45')](_0x2af318)[_0x1c4c('0x24')](handleEntityNotFound(_0xa83750,null))[_0x1c4c('0x24')](respondWithResult(_0xa83750,null))[_0x1c4c('0x40')](handleError(_0xa83750,null));};exports[_0x1c4c('0x46')]=function(_0x5c157,_0x21368a){return db[_0x1c4c('0x3c')]['create'](_0x5c157[_0x1c4c('0x47')],{})[_0x1c4c('0x24')](respondWithResult(_0x21368a,0xc9))[_0x1c4c('0x40')](handleError(_0x21368a,null));};exports[_0x1c4c('0x48')]=function(_0x2234e0,_0x546c91){if(_0x2234e0[_0x1c4c('0x47')]['id']){delete _0x2234e0['body']['id'];}return db[_0x1c4c('0x3c')]['find']({'where':{'id':_0x2234e0[_0x1c4c('0x42')]['id']}})['then'](handleEntityNotFound(_0x546c91,null))[_0x1c4c('0x24')](saveUpdates(_0x2234e0[_0x1c4c('0x47')],null))[_0x1c4c('0x24')](respondWithResult(_0x546c91,null))[_0x1c4c('0x40')](handleError(_0x546c91,null));};exports[_0x1c4c('0x23')]=function(_0x5aff22,_0x33a24b){return db[_0x1c4c('0x3c')]['find']({'where':{'id':_0x5aff22[_0x1c4c('0x42')]['id']}})['then'](handleEntityNotFound(_0x33a24b,null))[_0x1c4c('0x24')](removeEntity(_0x33a24b,null))[_0x1c4c('0x40')](handleError(_0x33a24b,null));};
\ No newline at end of file
+var _0x0c34=['pick','filter','merge','map','type','key','VIRTUAL','options','includeAll','ServicenowField','findAll','rows','show','params','include','find','catch','create','body','update','destroy','html-pdf','eml-format','request-promise','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/environment','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','then','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','sort','where'];(function(_0x16129d,_0x38793a){var _0x2232fa=function(_0xbc4222){while(--_0xbc4222){_0x16129d['push'](_0x16129d['shift']());}};_0x2232fa(++_0x38793a);}(_0x0c34,0x17d));var _0x40c3=function(_0x5b9396,_0x8d38a1){_0x5b9396=_0x5b9396-0x0;var _0xa5d31=_0x0c34[_0x5b9396];return _0xa5d31;};'use strict';var pdf=require(_0x40c3('0x0'));var emlformat=require(_0x40c3('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x40c3('0x2'));var moment=require('moment');var BPromise=require(_0x40c3('0x3'));var Mustache=require(_0x40c3('0x4'));var util=require(_0x40c3('0x5'));var path=require(_0x40c3('0x6'));var sox=require(_0x40c3('0x7'));var csv=require(_0x40c3('0x8'));var ejs=require(_0x40c3('0x9'));var fs=require('fs');var _=require(_0x40c3('0xa'));var squel=require(_0x40c3('0xb'));var crypto=require('crypto');var jsforce=require(_0x40c3('0xc'));var deskjs=require(_0x40c3('0xd'));var toCsv=require(_0x40c3('0x8'));var querystring=require(_0x40c3('0xe'));var Papa=require(_0x40c3('0xf'));var authService=require(_0x40c3('0x10'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0x40c3('0x11'));var logger=require(_0x40c3('0x12'))(_0x40c3('0x13'));var utils=require('../../config/utils');var config=require(_0x40c3('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x54ee69,_0x466446){_0x466446=_0x466446||0xcc;return function(_0x5b49b6){if(_0x5b49b6){return _0x54ee69[_0x40c3('0x15')](_0x466446);}return _0x54ee69[_0x40c3('0x16')](_0x466446)[_0x40c3('0x17')]();};}function respondWithResult(_0x46740e,_0x1a5a71){_0x1a5a71=_0x1a5a71||0xc8;return function(_0x516688){if(_0x516688){return _0x46740e[_0x40c3('0x16')](_0x1a5a71)[_0x40c3('0x18')](_0x516688);}};}function respondWithFilteredResult(_0x467898,_0x229f40){return function(_0x561cac){if(_0x561cac){var _0xe6aae3=_0x561cac[_0x40c3('0x19')],_0x2e5086=_0x229f40[_0x40c3('0x1a')],_0x12fc08=_0x229f40[_0x40c3('0x1a')]+_0x229f40[_0x40c3('0x1b')],_0x1d0fc4;if(_0x12fc08>=_0xe6aae3){_0x12fc08=_0xe6aae3;_0x1d0fc4=0xc8;}else{_0x1d0fc4=0xce;}_0x467898[_0x40c3('0x16')](_0x1d0fc4);return _0x467898[_0x40c3('0x1c')](_0x40c3('0x1d'),_0x2e5086+'-'+_0x12fc08+'/'+_0xe6aae3)[_0x40c3('0x18')](_0x561cac);}return null;};}function patchUpdates(_0x403c3b){return function(_0x40d9a0){try{jsonpatch[_0x40c3('0x1e')](_0x40d9a0,_0x403c3b,!![]);}catch(_0x5b1f6f){return BPromise[_0x40c3('0x1f')](_0x5b1f6f);}return _0x40d9a0['save']();};}function saveUpdates(_0x460bf2,_0x182e2d){return function(_0xff7dca){if(_0xff7dca){return _0xff7dca['update'](_0x460bf2)[_0x40c3('0x20')](function(_0x3e9dd2){return _0x3e9dd2;});}return null;};}function removeEntity(_0x121b32,_0x3f78b1){return function(_0x15885e){if(_0x15885e){return _0x15885e['destroy']()[_0x40c3('0x20')](function(){_0x121b32[_0x40c3('0x16')](0xcc)[_0x40c3('0x17')]();});}};}function handleEntityNotFound(_0x29f29b,_0x46cf5d){return function(_0x180aa2){if(!_0x180aa2){_0x29f29b[_0x40c3('0x15')](0x194);}return _0x180aa2;};}function handleError(_0x1df433,_0x285ae8){_0x285ae8=_0x285ae8||0x1f4;return function(_0x3a94c9){logger[_0x40c3('0x21')](_0x3a94c9[_0x40c3('0x22')]);if(_0x3a94c9[_0x40c3('0x23')]){delete _0x3a94c9[_0x40c3('0x23')];}_0x1df433[_0x40c3('0x16')](_0x285ae8)[_0x40c3('0x24')](_0x3a94c9);};}exports[_0x40c3('0x25')]=function(_0x3ef6f1,_0x26ed95){var _0x481ec3={},_0x590fcb={},_0xc83e32={'count':0x0,'rows':[]};var _0x3541a1=db['ServicenowField'][_0x40c3('0x26')];_0x590fcb[_0x40c3('0x27')]=_[_0x40c3('0x28')](_0x3541a1);_0x590fcb[_0x40c3('0x29')]=_[_0x40c3('0x28')](_0x3ef6f1[_0x40c3('0x29')]);_0x590fcb[_0x40c3('0x2a')]=_[_0x40c3('0x2b')](_0x590fcb[_0x40c3('0x27')],_0x590fcb[_0x40c3('0x29')]);_0x481ec3['attributes']=_['intersection'](_0x590fcb[_0x40c3('0x27')],qs['fields'](_0x3ef6f1[_0x40c3('0x29')][_0x40c3('0x2c')]));_0x481ec3[_0x40c3('0x2d')]=_0x481ec3[_0x40c3('0x2d')][_0x40c3('0x2e')]?_0x481ec3[_0x40c3('0x2d')]:_0x590fcb['model'];if(!_0x3ef6f1[_0x40c3('0x29')][_0x40c3('0x2f')](_0x40c3('0x30'))){_0x481ec3[_0x40c3('0x1b')]=qs['limit'](_0x3ef6f1[_0x40c3('0x29')]['limit']);_0x481ec3[_0x40c3('0x1a')]=qs['offset'](_0x3ef6f1[_0x40c3('0x29')][_0x40c3('0x1a')]);}_0x481ec3['order']=qs['sort'](_0x3ef6f1[_0x40c3('0x29')][_0x40c3('0x31')]);_0x481ec3[_0x40c3('0x32')]=qs[_0x40c3('0x2a')](_[_0x40c3('0x33')](_0x3ef6f1['query'],_0x590fcb['filters']));if(_0x3ef6f1[_0x40c3('0x29')][_0x40c3('0x34')]){_0x481ec3[_0x40c3('0x32')]=_[_0x40c3('0x35')](_0x481ec3[_0x40c3('0x32')],{'$or':_[_0x40c3('0x36')](_0x3541a1,function(_0x470579){if(_0x470579[_0x40c3('0x37')][_0x40c3('0x38')]!==_0x40c3('0x39')){var _0x53402a={};_0x53402a[_0x470579['field']]={'$like':'%'+_0x3ef6f1[_0x40c3('0x29')]['filter']+'%'};return _0x53402a;}})});}_0x481ec3=_[_0x40c3('0x35')]({},_0x481ec3,_0x3ef6f1[_0x40c3('0x3a')]);var _0x58f962={'where':_0x481ec3[_0x40c3('0x32')]};return db['ServicenowField'][_0x40c3('0x19')](_0x58f962)[_0x40c3('0x20')](function(_0x137a75){_0xc83e32[_0x40c3('0x19')]=_0x137a75;if(_0x3ef6f1[_0x40c3('0x29')][_0x40c3('0x3b')]){_0x481ec3['include']=[{'all':!![]}];}return db[_0x40c3('0x3c')][_0x40c3('0x3d')](_0x481ec3);})[_0x40c3('0x20')](function(_0x18ef77){_0xc83e32[_0x40c3('0x3e')]=_0x18ef77;return _0xc83e32;})[_0x40c3('0x20')](respondWithFilteredResult(_0x26ed95,_0x481ec3))['catch'](handleError(_0x26ed95,null));};exports[_0x40c3('0x3f')]=function(_0x50bcc9,_0x3d994c){var _0x4d472f={'raw':!![],'where':{'id':_0x50bcc9[_0x40c3('0x40')]['id']}},_0x4129a5={};_0x4129a5['model']=_[_0x40c3('0x28')](db[_0x40c3('0x3c')][_0x40c3('0x26')]);_0x4129a5[_0x40c3('0x29')]=_[_0x40c3('0x28')](_0x50bcc9[_0x40c3('0x29')]);_0x4129a5[_0x40c3('0x2a')]=_[_0x40c3('0x2b')](_0x4129a5[_0x40c3('0x27')],_0x4129a5['query']);_0x4d472f[_0x40c3('0x2d')]=_[_0x40c3('0x2b')](_0x4129a5[_0x40c3('0x27')],qs[_0x40c3('0x2c')](_0x50bcc9[_0x40c3('0x29')][_0x40c3('0x2c')]));_0x4d472f[_0x40c3('0x2d')]=_0x4d472f['attributes'][_0x40c3('0x2e')]?_0x4d472f[_0x40c3('0x2d')]:_0x4129a5['model'];if(_0x50bcc9[_0x40c3('0x29')]['includeAll']){_0x4d472f[_0x40c3('0x41')]=[{'all':!![]}];}_0x4d472f=_[_0x40c3('0x35')]({},_0x4d472f,_0x50bcc9['options']);return db[_0x40c3('0x3c')][_0x40c3('0x42')](_0x4d472f)['then'](handleEntityNotFound(_0x3d994c,null))[_0x40c3('0x20')](respondWithResult(_0x3d994c,null))[_0x40c3('0x43')](handleError(_0x3d994c,null));};exports[_0x40c3('0x44')]=function(_0x2d110d,_0xf5ecc1){return db[_0x40c3('0x3c')][_0x40c3('0x44')](_0x2d110d[_0x40c3('0x45')],{})['then'](respondWithResult(_0xf5ecc1,0xc9))[_0x40c3('0x43')](handleError(_0xf5ecc1,null));};exports[_0x40c3('0x46')]=function(_0x58a946,_0x469da5){if(_0x58a946[_0x40c3('0x45')]['id']){delete _0x58a946['body']['id'];}return db['ServicenowField']['find']({'where':{'id':_0x58a946[_0x40c3('0x40')]['id']}})[_0x40c3('0x20')](handleEntityNotFound(_0x469da5,null))[_0x40c3('0x20')](saveUpdates(_0x58a946[_0x40c3('0x45')],null))[_0x40c3('0x20')](respondWithResult(_0x469da5,null))[_0x40c3('0x43')](handleError(_0x469da5,null));};exports[_0x40c3('0x47')]=function(_0x222404,_0x24c4b4){return db[_0x40c3('0x3c')][_0x40c3('0x42')]({'where':{'id':_0x222404[_0x40c3('0x40')]['id']}})['then'](handleEntityNotFound(_0x24c4b4,null))[_0x40c3('0x20')](removeEntity(_0x24c4b4,null))[_0x40c3('0x43')](handleError(_0x24c4b4,null));};
\ No newline at end of file
index 0134253..1bfe199 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9793=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','./intServicenowField.attributes','exports','define','ServicenowField','int_servicenow_fields','servicenow_unique_index','idField'];(function(_0x3861a9,_0x52bb3b){var _0x85e04c=function(_0x4f5685){while(--_0x4f5685){_0x3861a9['push'](_0x3861a9['shift']());}};_0x85e04c(++_0x52bb3b);}(_0x9793,0xe0));var _0x3979=function(_0x15668c,_0x1c1dc2){_0x15668c=_0x15668c-0x0;var _0x247013=_0x9793[_0x15668c];return _0x247013;};'use strict';var _=require(_0x3979('0x0'));var util=require(_0x3979('0x1'));var logger=require(_0x3979('0x2'))(_0x3979('0x3'));var moment=require(_0x3979('0x4'));var BPromise=require(_0x3979('0x5'));var rp=require(_0x3979('0x6'));var attributes=require(_0x3979('0x7'));module[_0x3979('0x8')]=function(_0x9d1149,_0x54e8e3){return _0x9d1149[_0x3979('0x9')](_0x3979('0xa'),attributes,{'tableName':_0x3979('0xb'),'paranoid':![],'indexes':[{'name':_0x3979('0xc'),'fields':[_0x3979('0xd'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xc28d=['lodash','util','../../config/logger','moment','bluebird','request-promise','./intServicenowField.attributes','exports','ServicenowField','int_servicenow_fields','servicenow_unique_index','idField','FieldId'];(function(_0x35b7e3,_0x2d28cd){var _0x2ec650=function(_0x5adbc7){while(--_0x5adbc7){_0x35b7e3['push'](_0x35b7e3['shift']());}};_0x2ec650(++_0x2d28cd);}(_0xc28d,0x186));var _0xdc28=function(_0x9641f8,_0x5c2372){_0x9641f8=_0x9641f8-0x0;var _0x3881b4=_0xc28d[_0x9641f8];return _0x3881b4;};'use strict';var _=require(_0xdc28('0x0'));var util=require(_0xdc28('0x1'));var logger=require(_0xdc28('0x2'))('api');var moment=require(_0xdc28('0x3'));var BPromise=require(_0xdc28('0x4'));var rp=require(_0xdc28('0x5'));var attributes=require(_0xdc28('0x6'));module[_0xdc28('0x7')]=function(_0x9f25ae,_0x2299b7){return _0x9f25ae['define'](_0xdc28('0x8'),attributes,{'tableName':_0xdc28('0x9'),'paranoid':![],'indexes':[{'name':_0xdc28('0xa'),'fields':[_0xdc28('0xb'),_0xdc28('0xc')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 6c3b1f6..038c0de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x01d9=['../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','ServicenowField,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils'];(function(_0x35a8aa,_0x3ec40f){var _0x5b4a86=function(_0x1bf64d){while(--_0x1bf64d){_0x35a8aa['push'](_0x35a8aa['shift']());}};_0x5b4a86(++_0x3ec40f);}(_0x01d9,0x6c));var _0x901d=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x01d9[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x901d('0x0'));var util=require(_0x901d('0x1'));var moment=require(_0x901d('0x2'));var BPromise=require(_0x901d('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x901d('0x4'));var db=require(_0x901d('0x5'))['db'];var utils=require(_0x901d('0x6'));var logger=require(_0x901d('0x7'))(_0x901d('0x8'));var config=require(_0x901d('0x9'));var jayson=require(_0x901d('0xa'));var client=jayson['client'][_0x901d('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x6c9ac8,_0x21e1d7,_0x12c39f){return new BPromise(function(_0x313f85,_0x39fc94){return client[_0x901d('0xc')](_0x6c9ac8,_0x12c39f)[_0x901d('0xd')](function(_0x15076e){logger[_0x901d('0xe')](_0x901d('0xf'),_0x21e1d7,_0x901d('0x10'));logger[_0x901d('0x11')]('ServicenowField,\x20%s,\x20%s,\x20%s',_0x21e1d7,_0x901d('0x10'),JSON['stringify'](_0x15076e));if(_0x15076e[_0x901d('0x12')]){if(_0x15076e[_0x901d('0x12')][_0x901d('0x13')]===0x1f4){logger[_0x901d('0x12')](_0x901d('0xf'),_0x21e1d7,_0x15076e['error'][_0x901d('0x14')]);return _0x39fc94(_0x15076e[_0x901d('0x12')][_0x901d('0x14')]);}logger[_0x901d('0x12')](_0x901d('0xf'),_0x21e1d7,_0x15076e[_0x901d('0x12')]['message']);return _0x313f85(_0x15076e[_0x901d('0x12')][_0x901d('0x14')]);}else{logger[_0x901d('0xe')](_0x901d('0xf'),_0x21e1d7,_0x901d('0x10'));_0x313f85(_0x15076e[_0x901d('0x15')][_0x901d('0x14')]);}})[_0x901d('0x16')](function(_0x3368fc){logger[_0x901d('0x12')](_0x901d('0xf'),_0x21e1d7,_0x3368fc);_0x39fc94(_0x3368fc);});});}
\ No newline at end of file
+var _0x8ace=['../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','info','ServicenowField,\x20%s,\x20%s','request\x20sent','debug','ServicenowField,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis'];(function(_0x2f458b,_0x28c8b0){var _0x1c015b=function(_0x555bb1){while(--_0x555bb1){_0x2f458b['push'](_0x2f458b['shift']());}};_0x1c015b(++_0x28c8b0);}(_0x8ace,0x1bc));var _0xe8ac=function(_0x12d812,_0x496bb7){_0x12d812=_0x12d812-0x0;var _0x3711ab=_0x8ace[_0x12d812];return _0x3711ab;};'use strict';var _=require(_0xe8ac('0x0'));var util=require(_0xe8ac('0x1'));var moment=require(_0xe8ac('0x2'));var BPromise=require(_0xe8ac('0x3'));var rs=require(_0xe8ac('0x4'));var fs=require('fs');var Redis=require(_0xe8ac('0x5'));var db=require(_0xe8ac('0x6'))['db'];var utils=require(_0xe8ac('0x7'));var logger=require(_0xe8ac('0x8'))(_0xe8ac('0x9'));var config=require(_0xe8ac('0xa'));var jayson=require(_0xe8ac('0xb'));var client=jayson[_0xe8ac('0xc')][_0xe8ac('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x4eb087,_0x2d56f0,_0x1357ed){return new BPromise(function(_0x4f9233,_0x5c83e1){return client[_0xe8ac('0xe')](_0x4eb087,_0x1357ed)['then'](function(_0x1b5467){logger[_0xe8ac('0xf')](_0xe8ac('0x10'),_0x2d56f0,_0xe8ac('0x11'));logger[_0xe8ac('0x12')](_0xe8ac('0x13'),_0x2d56f0,'request\x20sent',JSON[_0xe8ac('0x14')](_0x1b5467));if(_0x1b5467[_0xe8ac('0x15')]){if(_0x1b5467[_0xe8ac('0x15')]['code']===0x1f4){logger[_0xe8ac('0x15')](_0xe8ac('0x10'),_0x2d56f0,_0x1b5467['error'][_0xe8ac('0x16')]);return _0x5c83e1(_0x1b5467[_0xe8ac('0x15')][_0xe8ac('0x16')]);}logger[_0xe8ac('0x15')](_0xe8ac('0x10'),_0x2d56f0,_0x1b5467[_0xe8ac('0x15')][_0xe8ac('0x16')]);return _0x4f9233(_0x1b5467[_0xe8ac('0x15')][_0xe8ac('0x16')]);}else{logger[_0xe8ac('0xf')]('ServicenowField,\x20%s,\x20%s',_0x2d56f0,_0xe8ac('0x11'));_0x4f9233(_0x1b5467[_0xe8ac('0x17')]['message']);}})[_0xe8ac('0x18')](function(_0x3a7939){logger[_0xe8ac('0x15')](_0xe8ac('0x10'),_0x2d56f0,_0x3a7939);_0x5c83e1(_0x3a7939);});});}
\ No newline at end of file
index 99abb0b..b53a6e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b33=['show','/:id/configurations','getConfigurations','post','addConfiguration','put','update','delete','destroy','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSugarcrmAccount.controller','isAuthenticated','index','get','/:id'];(function(_0x274638,_0x578968){var _0x5755df=function(_0x3227d5){while(--_0x3227d5){_0x274638['push'](_0x274638['shift']());}};_0x5755df(++_0x578968);}(_0x6b33,0xa3));var _0x36b3=function(_0x278293,_0x54a0ab){_0x278293=_0x278293-0x0;var _0x29ad0a=_0x6b33[_0x278293];return _0x29ad0a;};'use strict';var multer=require(_0x36b3('0x0'));var util=require(_0x36b3('0x1'));var path=require(_0x36b3('0x2'));var timeout=require(_0x36b3('0x3'));var express=require(_0x36b3('0x4'));var router=express['Router']();var auth=require(_0x36b3('0x5'));var interaction=require(_0x36b3('0x6'));var config=require(_0x36b3('0x7'));var controller=require(_0x36b3('0x8'));router['get']('/',auth[_0x36b3('0x9')](),controller[_0x36b3('0xa')]);router[_0x36b3('0xb')](_0x36b3('0xc'),auth[_0x36b3('0x9')](),controller[_0x36b3('0xd')]);router[_0x36b3('0xb')](_0x36b3('0xe'),auth[_0x36b3('0x9')](),controller[_0x36b3('0xf')]);router['get']('/:id/fields',auth[_0x36b3('0x9')](),controller['getFields']);router[_0x36b3('0x10')]('/',auth[_0x36b3('0x9')](),controller['create']);router[_0x36b3('0x10')](_0x36b3('0xe'),auth[_0x36b3('0x9')](),controller[_0x36b3('0x11')]);router[_0x36b3('0x12')](_0x36b3('0xc'),auth[_0x36b3('0x9')](),controller[_0x36b3('0x13')]);router[_0x36b3('0x14')](_0x36b3('0xc'),auth[_0x36b3('0x9')](),controller[_0x36b3('0x15')]);module['exports']=router;
\ No newline at end of file
+var _0x8696=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSugarcrmAccount.controller','get','isAuthenticated','index','/:id','/:id/fields','create','/:id/configurations','addConfiguration','put','update','destroy','multer'];(function(_0x5618c4,_0x4e8f57){var _0xdf390f=function(_0x1406cb){while(--_0x1406cb){_0x5618c4['push'](_0x5618c4['shift']());}};_0xdf390f(++_0x4e8f57);}(_0x8696,0x1da));var _0x6869=function(_0x1c163b,_0x4cac90){_0x1c163b=_0x1c163b-0x0;var _0x148389=_0x8696[_0x1c163b];return _0x148389;};'use strict';var multer=require(_0x6869('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x6869('0x1'));var express=require(_0x6869('0x2'));var router=express[_0x6869('0x3')]();var auth=require(_0x6869('0x4'));var interaction=require(_0x6869('0x5'));var config=require(_0x6869('0x6'));var controller=require(_0x6869('0x7'));router[_0x6869('0x8')]('/',auth[_0x6869('0x9')](),controller[_0x6869('0xa')]);router[_0x6869('0x8')](_0x6869('0xb'),auth['isAuthenticated'](),controller['show']);router[_0x6869('0x8')]('/:id/configurations',auth['isAuthenticated'](),controller['getConfigurations']);router[_0x6869('0x8')](_0x6869('0xc'),auth[_0x6869('0x9')](),controller['getFields']);router['post']('/',auth[_0x6869('0x9')](),controller[_0x6869('0xd')]);router['post'](_0x6869('0xe'),auth[_0x6869('0x9')](),controller[_0x6869('0xf')]);router[_0x6869('0x10')](_0x6869('0xb'),auth[_0x6869('0x9')](),controller[_0x6869('0x11')]);router['delete'](_0x6869('0xb'),auth['isAuthenticated'](),controller[_0x6869('0x12')]);module['exports']=router;
\ No newline at end of file
index 2f892d8..e995d37 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe936=['STRING','username','remoteUri','sequelize','exports'];(function(_0xd2c4b6,_0x5640f3){var _0x4a24b5=function(_0x5a54cf){while(--_0x5a54cf){_0xd2c4b6['push'](_0xd2c4b6['shift']());}};_0x4a24b5(++_0x5640f3);}(_0xe936,0x157));var _0x6e93=function(_0x2390e5,_0x369025){_0x2390e5=_0x2390e5-0x0;var _0xa6038f=_0xe936[_0x2390e5];return _0xa6038f;};'use strict';var Sequelize=require(_0x6e93('0x0'));module[_0x6e93('0x1')]={'name':{'type':Sequelize[_0x6e93('0x2')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize['STRING'],'unique':_0x6e93('0x3')},'password':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0x6e93('0x2')],'unique':_0x6e93('0x4')},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x13c6=['STRING','sequelize'];(function(_0x12467b,_0xb17149){var _0x5dfc89=function(_0x55c1ae){while(--_0x55c1ae){_0x12467b['push'](_0x12467b['shift']());}};_0x5dfc89(++_0xb17149);}(_0x13c6,0x181));var _0x613c=function(_0x40c9ec,_0x176bda){_0x40c9ec=_0x40c9ec-0x0;var _0x51cd9c=_0x13c6[_0x40c9ec];return _0x51cd9c;};'use strict';var Sequelize=require(_0x613c('0x0'));module['exports']={'name':{'type':Sequelize[_0x613c('0x1')]},'description':{'type':Sequelize[_0x613c('0x1')]},'username':{'type':Sequelize[_0x613c('0x1')],'unique':'username'},'password':{'type':Sequelize[_0x613c('0x1')]},'remoteUri':{'type':Sequelize['STRING'],'unique':'remoteUri'},'serverUrl':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 3b777c0..e22ba65 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x133d=['json','count','offset','limit','set','Content-Range','apply','reject','update','destroy','end','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','merge','type','key','VIRTUAL','field','options','SugarcrmAccount','includeAll','include','findAll','show','params','find','create','body','getConfigurations','findOne','SugarcrmConfiguration','order','filter','map','addConfiguration','AccountId','Subjects','getSubjects','channel','Descriptions','getDescriptions','SugarcrmField','getFields','assigned_user_id','description','date_start','duration_hours','duration_minutes','parent_id','parent_type','parent_name','direction','password','remoteUri','slice','substring','lastIndexOf','format','%s%s','login','JSON','username','PLAIN','Invalid\x20Login','Password\x20Expired','POST','/service/v4_1/rest.php','get_module_fields','Calls','remove','includes','label','endsWith','value','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','client','http','request','then','info','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','sendStatus','status'];(function(_0xdae8e6,_0x34854a){var _0x24c7a7=function(_0x5492a3){while(--_0x5492a3){_0xdae8e6['push'](_0xdae8e6['shift']());}};_0x24c7a7(++_0x34854a);}(_0x133d,0xe7));var _0xd133=function(_0x387dc1,_0x3ba649){_0x387dc1=_0x387dc1-0x0;var _0x17567c=_0x133d[_0x387dc1];return _0x17567c;};'use strict';var pdf=require(_0xd133('0x0'));var emlformat=require(_0xd133('0x1'));var rimraf=require(_0xd133('0x2'));var zipdir=require(_0xd133('0x3'));var jsonpatch=require(_0xd133('0x4'));var rp=require(_0xd133('0x5'));var moment=require('moment');var BPromise=require(_0xd133('0x6'));var Mustache=require(_0xd133('0x7'));var util=require(_0xd133('0x8'));var path=require(_0xd133('0x9'));var sox=require(_0xd133('0xa'));var csv=require(_0xd133('0xb'));var ejs=require(_0xd133('0xc'));var fs=require('fs');var _=require(_0xd133('0xd'));var squel=require(_0xd133('0xe'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xd133('0xf'));var toCsv=require('to-csv');var querystring=require(_0xd133('0x10'));var Papa=require(_0xd133('0x11'));var authService=require(_0xd133('0x12'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xd133('0x13'));var qs=require(_0xd133('0x14'));var logger=require(_0xd133('0x15'))(_0xd133('0x16'));var utils=require(_0xd133('0x17'));var config=require(_0xd133('0x18'));var db=require(_0xd133('0x19'))['db'];var integrations=require(_0xd133('0x1a'));var jayson=require('jayson/promise');var client=jayson[_0xd133('0x1b')][_0xd133('0x1c')]({'port':0x232a});function respondWithRpcPromise(_0xb6e6d5,_0x16a246,_0x692628,_0x3e4483){return new BPromise(function(_0x285102,_0x4aa906){var _0xd521fb=_0x3e4483||client;return _0xd521fb[_0xd133('0x1d')](_0xb6e6d5,_0x692628)[_0xd133('0x1e')](function(_0x32451e){logger[_0xd133('0x1f')](_0xd133('0x20'),_0x16a246,_0xd133('0x21'));logger['debug'](_0xd133('0x22'),_0x16a246,_0xd133('0x21'),JSON[_0xd133('0x23')](_0x32451e));if(_0x32451e['error']){if(_0x32451e['error'][_0xd133('0x24')]===0x1f4){logger[_0xd133('0x25')](_0xd133('0x20'),_0x16a246,_0x32451e[_0xd133('0x25')][_0xd133('0x26')]);return _0x4aa906(_0x32451e['error'][_0xd133('0x26')]);}logger[_0xd133('0x25')](_0xd133('0x20'),_0x16a246,_0x32451e[_0xd133('0x25')][_0xd133('0x26')]);return _0x285102(_0x32451e[_0xd133('0x25')][_0xd133('0x26')]);}else{logger[_0xd133('0x1f')](_0xd133('0x20'),_0x16a246,_0xd133('0x21'));_0x285102(_0x32451e[_0xd133('0x27')]['message']);}})[_0xd133('0x28')](function(_0x254803){logger[_0xd133('0x25')](_0xd133('0x20'),_0x16a246,_0x254803);_0x4aa906(_0x254803);});});}function respondWithStatusCode(_0x404abd,_0x490f4a){_0x490f4a=_0x490f4a||0xcc;return function(_0x2d3635){if(_0x2d3635){return _0x404abd[_0xd133('0x29')](_0x490f4a);}return _0x404abd[_0xd133('0x2a')](_0x490f4a)['end']();};}function respondWithResult(_0x561a44,_0x4db2ba){_0x4db2ba=_0x4db2ba||0xc8;return function(_0x575a8a){if(_0x575a8a){return _0x561a44[_0xd133('0x2a')](_0x4db2ba)[_0xd133('0x2b')](_0x575a8a);}};}function respondWithFilteredResult(_0x1312f1,_0x963151){return function(_0x523eae){if(_0x523eae){var _0x5ed893=_0x523eae[_0xd133('0x2c')],_0x3e1f74=_0x963151[_0xd133('0x2d')],_0x144b2f=_0x963151['offset']+_0x963151[_0xd133('0x2e')],_0x4dcb29;if(_0x144b2f>=_0x5ed893){_0x144b2f=_0x5ed893;_0x4dcb29=0xc8;}else{_0x4dcb29=0xce;}_0x1312f1['status'](_0x4dcb29);return _0x1312f1[_0xd133('0x2f')](_0xd133('0x30'),_0x3e1f74+'-'+_0x144b2f+'/'+_0x5ed893)[_0xd133('0x2b')](_0x523eae);}return null;};}function patchUpdates(_0x3f52f7){return function(_0x415a12){try{jsonpatch[_0xd133('0x31')](_0x415a12,_0x3f52f7,!![]);}catch(_0x591fd4){return BPromise[_0xd133('0x32')](_0x591fd4);}return _0x415a12['save']();};}function saveUpdates(_0x4b5acd,_0x5f4af2){return function(_0xb6baab){if(_0xb6baab){return _0xb6baab[_0xd133('0x33')](_0x4b5acd)[_0xd133('0x1e')](function(_0x16f4f2){return _0x16f4f2;});}return null;};}function removeEntity(_0x1c18ca,_0x1c203a){return function(_0x5101db){if(_0x5101db){return _0x5101db[_0xd133('0x34')]()[_0xd133('0x1e')](function(){_0x1c18ca['status'](0xcc)[_0xd133('0x35')]();});}};}function handleEntityNotFound(_0x18f028,_0x5da2f2){return function(_0x3fec53){if(!_0x3fec53){_0x18f028[_0xd133('0x29')](0x194);}return _0x3fec53;};}function handleError(_0x57cae1,_0x4889c5){_0x4889c5=_0x4889c5||0x1f4;return function(_0x47d77e){logger[_0xd133('0x25')](_0x47d77e[_0xd133('0x36')]);if(_0x47d77e['name']){delete _0x47d77e[_0xd133('0x37')];}_0x57cae1['status'](_0x4889c5)[_0xd133('0x38')](_0x47d77e);};}exports[_0xd133('0x39')]=function(_0x1ffc64,_0xf4077e){var _0x541eee={},_0x32fb26={},_0x3a299e={'count':0x0,'rows':[]};var _0x3171d6=db['SugarcrmAccount'][_0xd133('0x3a')];_0x32fb26[_0xd133('0x3b')]=_[_0xd133('0x3c')](_0x3171d6);_0x32fb26[_0xd133('0x3d')]=_[_0xd133('0x3c')](_0x1ffc64['query']);_0x32fb26[_0xd133('0x3e')]=_[_0xd133('0x3f')](_0x32fb26[_0xd133('0x3b')],_0x32fb26[_0xd133('0x3d')]);_0x541eee[_0xd133('0x40')]=_[_0xd133('0x3f')](_0x32fb26[_0xd133('0x3b')],qs[_0xd133('0x41')](_0x1ffc64[_0xd133('0x3d')][_0xd133('0x41')]));_0x541eee[_0xd133('0x40')]=_0x541eee[_0xd133('0x40')][_0xd133('0x42')]?_0x541eee[_0xd133('0x40')]:_0x32fb26[_0xd133('0x3b')];if(!_0x1ffc64[_0xd133('0x3d')][_0xd133('0x43')](_0xd133('0x44'))){_0x541eee[_0xd133('0x2e')]=qs[_0xd133('0x2e')](_0x1ffc64[_0xd133('0x3d')][_0xd133('0x2e')]);_0x541eee[_0xd133('0x2d')]=qs[_0xd133('0x2d')](_0x1ffc64[_0xd133('0x3d')][_0xd133('0x2d')]);}_0x541eee['order']=qs[_0xd133('0x45')](_0x1ffc64['query']['sort']);_0x541eee[_0xd133('0x46')]=qs[_0xd133('0x3e')](_[_0xd133('0x47')](_0x1ffc64[_0xd133('0x3d')],_0x32fb26[_0xd133('0x3e')]));if(_0x1ffc64[_0xd133('0x3d')]['filter']){_0x541eee['where']=_[_0xd133('0x48')](_0x541eee[_0xd133('0x46')],{'$or':_['map'](_0x3171d6,function(_0x5417d3){if(_0x5417d3[_0xd133('0x49')][_0xd133('0x4a')]!==_0xd133('0x4b')){var _0x72291c={};_0x72291c[_0x5417d3[_0xd133('0x4c')]]={'$like':'%'+_0x1ffc64[_0xd133('0x3d')]['filter']+'%'};return _0x72291c;}})});}_0x541eee=_[_0xd133('0x48')]({},_0x541eee,_0x1ffc64[_0xd133('0x4d')]);var _0x5f2726={'where':_0x541eee[_0xd133('0x46')]};return db[_0xd133('0x4e')]['count'](_0x5f2726)['then'](function(_0x69ea50){_0x3a299e['count']=_0x69ea50;if(_0x1ffc64[_0xd133('0x3d')][_0xd133('0x4f')]){_0x541eee[_0xd133('0x50')]=[{'all':!![]}];}return db[_0xd133('0x4e')][_0xd133('0x51')](_0x541eee);})[_0xd133('0x1e')](function(_0x13ef7b){_0x3a299e['rows']=_0x13ef7b;return _0x3a299e;})[_0xd133('0x1e')](respondWithFilteredResult(_0xf4077e,_0x541eee))[_0xd133('0x28')](handleError(_0xf4077e,null));};exports[_0xd133('0x52')]=function(_0x20e56c,_0x175547){var _0x4309d2={'raw':![],'where':{'id':_0x20e56c[_0xd133('0x53')]['id']}},_0x7d2812={};_0x7d2812[_0xd133('0x3b')]=_[_0xd133('0x3c')](db[_0xd133('0x4e')][_0xd133('0x3a')]);_0x7d2812['query']=_[_0xd133('0x3c')](_0x20e56c[_0xd133('0x3d')]);_0x7d2812[_0xd133('0x3e')]=_[_0xd133('0x3f')](_0x7d2812[_0xd133('0x3b')],_0x7d2812['query']);_0x4309d2[_0xd133('0x40')]=_[_0xd133('0x3f')](_0x7d2812['model'],qs[_0xd133('0x41')](_0x20e56c[_0xd133('0x3d')][_0xd133('0x41')]));_0x4309d2['attributes']=_0x4309d2['attributes'][_0xd133('0x42')]?_0x4309d2[_0xd133('0x40')]:_0x7d2812[_0xd133('0x3b')];if(_0x20e56c['query'][_0xd133('0x4f')]){_0x4309d2[_0xd133('0x50')]=[{'all':!![]}];}_0x4309d2=_[_0xd133('0x48')]({},_0x4309d2,_0x20e56c[_0xd133('0x4d')]);return db['SugarcrmAccount'][_0xd133('0x54')](_0x4309d2)['then'](handleEntityNotFound(_0x175547,null))['then'](respondWithResult(_0x175547,null))[_0xd133('0x28')](handleError(_0x175547,null));};exports[_0xd133('0x55')]=function(_0x1505cc,_0x4f1e21){return db['SugarcrmAccount'][_0xd133('0x55')](_0x1505cc[_0xd133('0x56')],{})[_0xd133('0x1e')](respondWithResult(_0x4f1e21,0xc9))[_0xd133('0x28')](handleError(_0x4f1e21,null));};exports['update']=function(_0x387137,_0x232e68){if(_0x387137[_0xd133('0x56')]['id']){delete _0x387137[_0xd133('0x56')]['id'];}return db['SugarcrmAccount']['find']({'where':{'id':_0x387137[_0xd133('0x53')]['id']}})[_0xd133('0x1e')](handleEntityNotFound(_0x232e68,null))[_0xd133('0x1e')](saveUpdates(_0x387137['body'],null))[_0xd133('0x1e')](respondWithResult(_0x232e68,null))['catch'](handleError(_0x232e68,null));};exports[_0xd133('0x34')]=function(_0x137236,_0x1d7c91){return db['SugarcrmAccount'][_0xd133('0x54')]({'where':{'id':_0x137236[_0xd133('0x53')]['id']}})[_0xd133('0x1e')](handleEntityNotFound(_0x1d7c91,null))[_0xd133('0x1e')](removeEntity(_0x1d7c91,null))[_0xd133('0x28')](handleError(_0x1d7c91,null));};exports[_0xd133('0x57')]=function(_0x3a0a3a,_0x274478,_0x22eeab){var _0x52ecd5={};var _0x5da0d3={};var _0x34fe1c;var _0xd6339e;return db[_0xd133('0x4e')][_0xd133('0x58')]({'where':{'id':_0x3a0a3a[_0xd133('0x53')]['id']}})[_0xd133('0x1e')](handleEntityNotFound(_0x274478,null))[_0xd133('0x1e')](function(_0x499029){if(_0x499029){_0x34fe1c=_0x499029;_0x5da0d3[_0xd133('0x3b')]=_[_0xd133('0x3c')](db[_0xd133('0x59')][_0xd133('0x3a')]);_0x5da0d3[_0xd133('0x3d')]=_[_0xd133('0x3c')](_0x3a0a3a['query']);_0x5da0d3[_0xd133('0x3e')]=_['intersection'](_0x5da0d3[_0xd133('0x3b')],_0x5da0d3[_0xd133('0x3d')]);_0x52ecd5[_0xd133('0x40')]=_[_0xd133('0x3f')](_0x5da0d3[_0xd133('0x3b')],qs[_0xd133('0x41')](_0x3a0a3a[_0xd133('0x3d')][_0xd133('0x41')]));_0x52ecd5['attributes']=_0x52ecd5['attributes'][_0xd133('0x42')]?_0x52ecd5[_0xd133('0x40')]:_0x5da0d3[_0xd133('0x3b')];_0x52ecd5[_0xd133('0x5a')]=qs[_0xd133('0x45')](_0x3a0a3a[_0xd133('0x3d')]['sort']);_0x52ecd5[_0xd133('0x46')]=qs['filters'](_[_0xd133('0x47')](_0x3a0a3a['query'],_0x5da0d3['filters']));if(_0x3a0a3a['query'][_0xd133('0x5b')]){_0x52ecd5[_0xd133('0x46')]=_[_0xd133('0x48')](_0x52ecd5['where'],{'$or':_[_0xd133('0x5c')](_0x52ecd5['attributes'],function(_0x5c1509){var _0x2a722e={};_0x2a722e[_0x5c1509]={'$like':'%'+_0x3a0a3a[_0xd133('0x3d')]['filter']+'%'};return _0x2a722e;})});}_0x52ecd5=_[_0xd133('0x48')]({},_0x52ecd5,_0x3a0a3a[_0xd133('0x4d')]);return _0x34fe1c[_0xd133('0x57')](_0x52ecd5);}})[_0xd133('0x1e')](function(_0x10496d){if(_0x10496d){_0xd6339e=_0x10496d[_0xd133('0x42')];if(!_0x3a0a3a[_0xd133('0x3d')][_0xd133('0x43')](_0xd133('0x44'))){_0x52ecd5[_0xd133('0x2e')]=qs[_0xd133('0x2e')](_0x3a0a3a[_0xd133('0x3d')]['limit']);_0x52ecd5['offset']=qs['offset'](_0x3a0a3a[_0xd133('0x3d')][_0xd133('0x2d')]);}return _0x34fe1c[_0xd133('0x57')](_0x52ecd5);}})[_0xd133('0x1e')](function(_0x3906c4){if(_0x3906c4){return _0x3906c4?{'count':_0xd6339e,'rows':_0x3906c4}:null;}})[_0xd133('0x1e')](respondWithResult(_0x274478,null))[_0xd133('0x28')](handleError(_0x274478,null));};exports[_0xd133('0x5d')]=function(_0x433c8d,_0x4f35c5,_0x26b431){if(_0x433c8d['body']['id']){delete _0x433c8d[_0xd133('0x56')]['id'];}return db['SugarcrmAccount'][_0xd133('0x58')]({'where':{'id':_0x433c8d['params']['id']}})[_0xd133('0x1e')](handleEntityNotFound(_0x4f35c5,null))[_0xd133('0x1e')](function(_0x26f0f8){if(_0x26f0f8){_0x433c8d['body'][_0xd133('0x5e')]=_0x26f0f8['id'];_0x433c8d[_0xd133('0x56')][_0xd133('0x5f')]=integrations[_0xd133('0x60')](_0x433c8d['body'][_0xd133('0x61')],_0x433c8d[_0xd133('0x56')][_0xd133('0x49')]);_0x433c8d[_0xd133('0x56')][_0xd133('0x62')]=integrations[_0xd133('0x63')](_0x433c8d[_0xd133('0x56')][_0xd133('0x61')],_0x433c8d[_0xd133('0x56')][_0xd133('0x49')]);return db[_0xd133('0x59')][_0xd133('0x55')](_0x433c8d[_0xd133('0x56')],{'include':[{'model':db[_0xd133('0x64')],'as':_0xd133('0x5f')},{'model':db[_0xd133('0x64')],'as':_0xd133('0x62')}]});}return null;})['then'](respondWithResult(_0x4f35c5,null))['catch'](handleError(_0x4f35c5,null));};exports[_0xd133('0x65')]=function(_0x3bfadc,_0x4e57d4,_0x367df1){var _0x1f04da='';var _0x43fa3f=['id',_0xd133('0x37'),_0xd133('0x66'),'created_by',_0xd133('0x67'),_0xd133('0x68'),_0xd133('0x69'),_0xd133('0x6a'),_0xd133('0x6b'),_0xd133('0x6c'),_0xd133('0x6d'),_0xd133('0x6e')];return db[_0xd133('0x4e')][_0xd133('0x58')]({'where':{'id':_0x3bfadc['params']['id']},'attributes':['id','username',_0xd133('0x6f'),_0xd133('0x70')]})[_0xd133('0x1e')](handleEntityNotFound(_0x4e57d4,null))[_0xd133('0x1e')](function(_0x1ee67a){if(_0x1ee67a){_0x1f04da=_0x1ee67a[_0xd133('0x70')];var _0xfa06e7=_0x1f04da[_0xd133('0x71')](-0x1);if(_0xfa06e7==='/'){_0x1f04da=_0x1f04da[_0xd133('0x72')](0x0,_0x1f04da[_0xd133('0x73')](_0xfa06e7));}return rp({'method':'POST','uri':util[_0xd133('0x74')](_0xd133('0x75'),_0x1f04da,'/service/v4_1/rest.php'),'json':!![],'form':{'method':_0xd133('0x76'),'input_type':_0xd133('0x77'),'response_type':_0xd133('0x77'),'rest_data':JSON[_0xd133('0x23')]({'user_auth':{'user_name':_0x1ee67a[_0xd133('0x78')],'password':_0x1ee67a['password'],'encryption':_0xd133('0x79')},'application':'xCALLY\x20Motion\x20Integration'})}});}})[_0xd133('0x1e')](function(_0x1ce28f){if(_0x1ce28f&&_0x1ce28f[_0xd133('0x37')]!==_0xd133('0x7a')&&_0x1ce28f[_0xd133('0x37')]!==_0xd133('0x7b')){return rp({'method':_0xd133('0x7c'),'uri':util['format'](_0xd133('0x75'),_0x1f04da,_0xd133('0x7d')),'json':!![],'form':{'method':_0xd133('0x7e'),'input_type':'JSON','response_type':_0xd133('0x77'),'rest_data':JSON['stringify']({'session':_0x1ce28f['id'],'module_name':_0xd133('0x7f')})}})[_0xd133('0x1e')](function(_0x39996f){if(_0x39996f){var _0xf81e1d=_['values'](_0x39996f['module_fields']);_[_0xd133('0x80')](_0xf81e1d,function(_0x3d87d5){return _0x43fa3f[_0xd133('0x81')](_0x3d87d5[_0xd133('0x37')]);});return{'count':_0xf81e1d[_0xd133('0x42')],'rows':_[_0xd133('0x5c')](_0xf81e1d,function(_0x109cb4){return{'id':_0x109cb4[_0xd133('0x37')],'name':_0x109cb4[_0xd133('0x82')],'custom':_[_0xd133('0x83')](_0x109cb4['name'],'_c')?!![]:![],'options':_0x109cb4['options']?_[_0xd133('0x5c')](_['values'](_0x109cb4[_0xd133('0x4d')]),function(_0x4abc85){return{'name':_0x4abc85[_0xd133('0x84')],'value':_0x4abc85['name']};}):[]};})};}})[_0xd133('0x1e')](respondWithResult(_0x4e57d4,null))[_0xd133('0x28')](function(_0x124194){var _0x2e89ca=_0x3bfadc[_0xd133('0x3d')][_0xd133('0x85')]?0x1f4:_0x124194[_0xd133('0x86')]||0x1f4;logger[_0xd133('0x25')](_0xd133('0x87'),_0xd133('0x65'),_0x2e89ca,JSON['stringify'](_0x124194));delete _0x124194['name'];if(_0x2e89ca===0x191){_0x2e89ca=0x190;}_0x4e57d4[_0xd133('0x2a')](_0x2e89ca)[_0xd133('0x38')](_0x3bfadc['query'][_0xd133('0x85')]?{'message':_0xd133('0x88'),'statusCode':_0x124194['statusCode']}:_0x124194);});}else{var _0x414e91=0x1f4;_0x4e57d4['status'](_0x414e91)[_0xd133('0x38')]({'message':_0xd133('0x88'),'statusCode':0x190});}});};
\ No newline at end of file
+var _0xbbc4=['name','index','SugarcrmAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','nolimit','limit','sort','where','pick','filter','merge','map','type','key','options','include','findAll','catch','includeAll','find','create','body','params','getConfigurations','SugarcrmConfiguration','hasOwnProperty','findOne','AccountId','Subjects','channel','Descriptions','getFields','description','date_start','duration_hours','duration_minutes','parent_type','direction','username','password','remoteUri','slice','substring','lastIndexOf','POST','format','%s%s','/service/v4_1/rest.php','JSON','stringify','PLAIN','xCALLY\x20Motion\x20Integration','Invalid\x20Login','get_module_fields','Calls','values','module_fields','includes','label','endsWith','statusCode','getFields,\x20%s,\x20%s,\x20%s','send','test','Wrong\x20credentials','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','../../components/integrations/configuration','client','http','request','then','info','SugarcrmAccount,\x20%s,\x20%s','debug','SugarcrmAccount,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','status','end','json','count','offset','set','Content-Range','apply','reject','update','destroy','stack'];(function(_0x25bf9,_0x467adb){var _0x5642e5=function(_0x40b941){while(--_0x40b941){_0x25bf9['push'](_0x25bf9['shift']());}};_0x5642e5(++_0x467adb);}(_0xbbc4,0x1bd));var _0x4bbc=function(_0x568c21,_0x275c27){_0x568c21=_0x568c21-0x0;var _0x35ccfb=_0xbbc4[_0x568c21];return _0x35ccfb;};'use strict';var pdf=require(_0x4bbc('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x4bbc('0x1'));var zipdir=require(_0x4bbc('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x4bbc('0x3'));var moment=require(_0x4bbc('0x4'));var BPromise=require(_0x4bbc('0x5'));var Mustache=require(_0x4bbc('0x6'));var util=require(_0x4bbc('0x7'));var path=require(_0x4bbc('0x8'));var sox=require(_0x4bbc('0x9'));var csv=require(_0x4bbc('0xa'));var ejs=require(_0x4bbc('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x4bbc('0xc'));var crypto=require(_0x4bbc('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x4bbc('0xe'));var toCsv=require(_0x4bbc('0xa'));var querystring=require(_0x4bbc('0xf'));var Papa=require(_0x4bbc('0x10'));var authService=require(_0x4bbc('0x11'));var hardwareService=require(_0x4bbc('0x12'));var Redis=require(_0x4bbc('0x13'));var qs=require(_0x4bbc('0x14'));var logger=require(_0x4bbc('0x15'))(_0x4bbc('0x16'));var utils=require('../../config/utils');var config=require(_0x4bbc('0x17'));var db=require(_0x4bbc('0x18'))['db'];var integrations=require(_0x4bbc('0x19'));var jayson=require('jayson/promise');var client=jayson[_0x4bbc('0x1a')][_0x4bbc('0x1b')]({'port':0x232a});function respondWithRpcPromise(_0x4a4586,_0x53b352,_0x3db89c,_0x448820){return new BPromise(function(_0x3a05d8,_0x18c5bd){var _0x36c652=_0x448820||client;return _0x36c652[_0x4bbc('0x1c')](_0x4a4586,_0x3db89c)[_0x4bbc('0x1d')](function(_0x1bb16c){logger[_0x4bbc('0x1e')](_0x4bbc('0x1f'),_0x53b352,'request\x20sent');logger[_0x4bbc('0x20')](_0x4bbc('0x21'),_0x53b352,_0x4bbc('0x22'),JSON['stringify'](_0x1bb16c));if(_0x1bb16c[_0x4bbc('0x23')]){if(_0x1bb16c[_0x4bbc('0x23')][_0x4bbc('0x24')]===0x1f4){logger['error'](_0x4bbc('0x1f'),_0x53b352,_0x1bb16c[_0x4bbc('0x23')][_0x4bbc('0x25')]);return _0x18c5bd(_0x1bb16c['error'][_0x4bbc('0x25')]);}logger[_0x4bbc('0x23')](_0x4bbc('0x1f'),_0x53b352,_0x1bb16c['error'][_0x4bbc('0x25')]);return _0x3a05d8(_0x1bb16c[_0x4bbc('0x23')][_0x4bbc('0x25')]);}else{logger['info'](_0x4bbc('0x1f'),_0x53b352,_0x4bbc('0x22'));_0x3a05d8(_0x1bb16c[_0x4bbc('0x26')][_0x4bbc('0x25')]);}})['catch'](function(_0x290662){logger['error'](_0x4bbc('0x1f'),_0x53b352,_0x290662);_0x18c5bd(_0x290662);});});}function respondWithStatusCode(_0x108fce,_0x2e3a57){_0x2e3a57=_0x2e3a57||0xcc;return function(_0x552897){if(_0x552897){return _0x108fce['sendStatus'](_0x2e3a57);}return _0x108fce[_0x4bbc('0x27')](_0x2e3a57)[_0x4bbc('0x28')]();};}function respondWithResult(_0x552634,_0x41f9e3){_0x41f9e3=_0x41f9e3||0xc8;return function(_0x13661d){if(_0x13661d){return _0x552634[_0x4bbc('0x27')](_0x41f9e3)[_0x4bbc('0x29')](_0x13661d);}};}function respondWithFilteredResult(_0x42acf8,_0x4eaf9d){return function(_0x296a09){if(_0x296a09){var _0x3e62c6=_0x296a09[_0x4bbc('0x2a')],_0xf4d2b6=_0x4eaf9d[_0x4bbc('0x2b')],_0xa18a0f=_0x4eaf9d[_0x4bbc('0x2b')]+_0x4eaf9d['limit'],_0x15d261;if(_0xa18a0f>=_0x3e62c6){_0xa18a0f=_0x3e62c6;_0x15d261=0xc8;}else{_0x15d261=0xce;}_0x42acf8[_0x4bbc('0x27')](_0x15d261);return _0x42acf8[_0x4bbc('0x2c')](_0x4bbc('0x2d'),_0xf4d2b6+'-'+_0xa18a0f+'/'+_0x3e62c6)[_0x4bbc('0x29')](_0x296a09);}return null;};}function patchUpdates(_0x314154){return function(_0x1a4495){try{jsonpatch[_0x4bbc('0x2e')](_0x1a4495,_0x314154,!![]);}catch(_0x1a6c18){return BPromise[_0x4bbc('0x2f')](_0x1a6c18);}return _0x1a4495['save']();};}function saveUpdates(_0x4affff,_0x33e663){return function(_0x2f9ca8){if(_0x2f9ca8){return _0x2f9ca8[_0x4bbc('0x30')](_0x4affff)[_0x4bbc('0x1d')](function(_0x52239b){return _0x52239b;});}return null;};}function removeEntity(_0xeed81e,_0xc1eff){return function(_0x32d0b8){if(_0x32d0b8){return _0x32d0b8[_0x4bbc('0x31')]()[_0x4bbc('0x1d')](function(){_0xeed81e['status'](0xcc)[_0x4bbc('0x28')]();});}};}function handleEntityNotFound(_0x4108d8,_0x3a6137){return function(_0x271867){if(!_0x271867){_0x4108d8['sendStatus'](0x194);}return _0x271867;};}function handleError(_0x446eba,_0x4aa9d2){_0x4aa9d2=_0x4aa9d2||0x1f4;return function(_0x4446cd){logger[_0x4bbc('0x23')](_0x4446cd[_0x4bbc('0x32')]);if(_0x4446cd[_0x4bbc('0x33')]){delete _0x4446cd[_0x4bbc('0x33')];}_0x446eba['status'](_0x4aa9d2)['send'](_0x4446cd);};}exports[_0x4bbc('0x34')]=function(_0x40200c,_0x5f192e){var _0x4e67bd={},_0x536e0f={},_0x436a97={'count':0x0,'rows':[]};var _0x22e1f1=db[_0x4bbc('0x35')][_0x4bbc('0x36')];_0x536e0f[_0x4bbc('0x37')]=_[_0x4bbc('0x38')](_0x22e1f1);_0x536e0f[_0x4bbc('0x39')]=_[_0x4bbc('0x38')](_0x40200c[_0x4bbc('0x39')]);_0x536e0f[_0x4bbc('0x3a')]=_[_0x4bbc('0x3b')](_0x536e0f['model'],_0x536e0f[_0x4bbc('0x39')]);_0x4e67bd[_0x4bbc('0x3c')]=_['intersection'](_0x536e0f[_0x4bbc('0x37')],qs['fields'](_0x40200c[_0x4bbc('0x39')][_0x4bbc('0x3d')]));_0x4e67bd[_0x4bbc('0x3c')]=_0x4e67bd['attributes'][_0x4bbc('0x3e')]?_0x4e67bd[_0x4bbc('0x3c')]:_0x536e0f['model'];if(!_0x40200c['query']['hasOwnProperty'](_0x4bbc('0x3f'))){_0x4e67bd[_0x4bbc('0x40')]=qs[_0x4bbc('0x40')](_0x40200c[_0x4bbc('0x39')][_0x4bbc('0x40')]);_0x4e67bd[_0x4bbc('0x2b')]=qs[_0x4bbc('0x2b')](_0x40200c[_0x4bbc('0x39')][_0x4bbc('0x2b')]);}_0x4e67bd['order']=qs['sort'](_0x40200c[_0x4bbc('0x39')][_0x4bbc('0x41')]);_0x4e67bd[_0x4bbc('0x42')]=qs[_0x4bbc('0x3a')](_[_0x4bbc('0x43')](_0x40200c[_0x4bbc('0x39')],_0x536e0f[_0x4bbc('0x3a')]));if(_0x40200c[_0x4bbc('0x39')][_0x4bbc('0x44')]){_0x4e67bd[_0x4bbc('0x42')]=_[_0x4bbc('0x45')](_0x4e67bd['where'],{'$or':_[_0x4bbc('0x46')](_0x22e1f1,function(_0x10cde7){if(_0x10cde7[_0x4bbc('0x47')][_0x4bbc('0x48')]!=='VIRTUAL'){var _0x5d4a98={};_0x5d4a98[_0x10cde7['field']]={'$like':'%'+_0x40200c['query'][_0x4bbc('0x44')]+'%'};return _0x5d4a98;}})});}_0x4e67bd=_[_0x4bbc('0x45')]({},_0x4e67bd,_0x40200c[_0x4bbc('0x49')]);var _0x187944={'where':_0x4e67bd['where']};return db[_0x4bbc('0x35')][_0x4bbc('0x2a')](_0x187944)[_0x4bbc('0x1d')](function(_0x2d3255){_0x436a97[_0x4bbc('0x2a')]=_0x2d3255;if(_0x40200c[_0x4bbc('0x39')]['includeAll']){_0x4e67bd[_0x4bbc('0x4a')]=[{'all':!![]}];}return db[_0x4bbc('0x35')][_0x4bbc('0x4b')](_0x4e67bd);})[_0x4bbc('0x1d')](function(_0x1610f7){_0x436a97['rows']=_0x1610f7;return _0x436a97;})['then'](respondWithFilteredResult(_0x5f192e,_0x4e67bd))[_0x4bbc('0x4c')](handleError(_0x5f192e,null));};exports['show']=function(_0x436abf,_0x223bb6){var _0x549165={'raw':![],'where':{'id':_0x436abf['params']['id']}},_0x1077cf={};_0x1077cf[_0x4bbc('0x37')]=_[_0x4bbc('0x38')](db[_0x4bbc('0x35')]['rawAttributes']);_0x1077cf[_0x4bbc('0x39')]=_['keys'](_0x436abf[_0x4bbc('0x39')]);_0x1077cf[_0x4bbc('0x3a')]=_[_0x4bbc('0x3b')](_0x1077cf[_0x4bbc('0x37')],_0x1077cf[_0x4bbc('0x39')]);_0x549165['attributes']=_[_0x4bbc('0x3b')](_0x1077cf[_0x4bbc('0x37')],qs['fields'](_0x436abf[_0x4bbc('0x39')][_0x4bbc('0x3d')]));_0x549165['attributes']=_0x549165['attributes']['length']?_0x549165[_0x4bbc('0x3c')]:_0x1077cf['model'];if(_0x436abf[_0x4bbc('0x39')][_0x4bbc('0x4d')]){_0x549165[_0x4bbc('0x4a')]=[{'all':!![]}];}_0x549165=_[_0x4bbc('0x45')]({},_0x549165,_0x436abf[_0x4bbc('0x49')]);return db[_0x4bbc('0x35')][_0x4bbc('0x4e')](_0x549165)[_0x4bbc('0x1d')](handleEntityNotFound(_0x223bb6,null))['then'](respondWithResult(_0x223bb6,null))[_0x4bbc('0x4c')](handleError(_0x223bb6,null));};exports[_0x4bbc('0x4f')]=function(_0x14033c,_0x434610){return db[_0x4bbc('0x35')]['create'](_0x14033c['body'],{})[_0x4bbc('0x1d')](respondWithResult(_0x434610,0xc9))['catch'](handleError(_0x434610,null));};exports[_0x4bbc('0x30')]=function(_0xe56a7c,_0x3f51f2){if(_0xe56a7c[_0x4bbc('0x50')]['id']){delete _0xe56a7c['body']['id'];}return db[_0x4bbc('0x35')][_0x4bbc('0x4e')]({'where':{'id':_0xe56a7c[_0x4bbc('0x51')]['id']}})[_0x4bbc('0x1d')](handleEntityNotFound(_0x3f51f2,null))[_0x4bbc('0x1d')](saveUpdates(_0xe56a7c[_0x4bbc('0x50')],null))[_0x4bbc('0x1d')](respondWithResult(_0x3f51f2,null))[_0x4bbc('0x4c')](handleError(_0x3f51f2,null));};exports[_0x4bbc('0x31')]=function(_0x414c87,_0xe646ba){return db[_0x4bbc('0x35')]['find']({'where':{'id':_0x414c87[_0x4bbc('0x51')]['id']}})[_0x4bbc('0x1d')](handleEntityNotFound(_0xe646ba,null))[_0x4bbc('0x1d')](removeEntity(_0xe646ba,null))['catch'](handleError(_0xe646ba,null));};exports[_0x4bbc('0x52')]=function(_0x22f733,_0xb21319,_0x3fb20f){var _0x4e9ddb={};var _0x4bda6e={};var _0x9a79d6;var _0x4fd6bd;return db[_0x4bbc('0x35')]['findOne']({'where':{'id':_0x22f733[_0x4bbc('0x51')]['id']}})['then'](handleEntityNotFound(_0xb21319,null))[_0x4bbc('0x1d')](function(_0x197506){if(_0x197506){_0x9a79d6=_0x197506;_0x4bda6e[_0x4bbc('0x37')]=_[_0x4bbc('0x38')](db[_0x4bbc('0x53')][_0x4bbc('0x36')]);_0x4bda6e[_0x4bbc('0x39')]=_[_0x4bbc('0x38')](_0x22f733['query']);_0x4bda6e[_0x4bbc('0x3a')]=_['intersection'](_0x4bda6e['model'],_0x4bda6e['query']);_0x4e9ddb[_0x4bbc('0x3c')]=_[_0x4bbc('0x3b')](_0x4bda6e[_0x4bbc('0x37')],qs[_0x4bbc('0x3d')](_0x22f733[_0x4bbc('0x39')][_0x4bbc('0x3d')]));_0x4e9ddb[_0x4bbc('0x3c')]=_0x4e9ddb[_0x4bbc('0x3c')]['length']?_0x4e9ddb[_0x4bbc('0x3c')]:_0x4bda6e[_0x4bbc('0x37')];_0x4e9ddb['order']=qs['sort'](_0x22f733[_0x4bbc('0x39')][_0x4bbc('0x41')]);_0x4e9ddb[_0x4bbc('0x42')]=qs[_0x4bbc('0x3a')](_[_0x4bbc('0x43')](_0x22f733[_0x4bbc('0x39')],_0x4bda6e[_0x4bbc('0x3a')]));if(_0x22f733[_0x4bbc('0x39')][_0x4bbc('0x44')]){_0x4e9ddb[_0x4bbc('0x42')]=_[_0x4bbc('0x45')](_0x4e9ddb[_0x4bbc('0x42')],{'$or':_[_0x4bbc('0x46')](_0x4e9ddb[_0x4bbc('0x3c')],function(_0x59dbcb){var _0x49ee48={};_0x49ee48[_0x59dbcb]={'$like':'%'+_0x22f733[_0x4bbc('0x39')]['filter']+'%'};return _0x49ee48;})});}_0x4e9ddb=_['merge']({},_0x4e9ddb,_0x22f733['options']);return _0x9a79d6[_0x4bbc('0x52')](_0x4e9ddb);}})[_0x4bbc('0x1d')](function(_0x5021a5){if(_0x5021a5){_0x4fd6bd=_0x5021a5[_0x4bbc('0x3e')];if(!_0x22f733[_0x4bbc('0x39')][_0x4bbc('0x54')]('nolimit')){_0x4e9ddb[_0x4bbc('0x40')]=qs['limit'](_0x22f733['query'][_0x4bbc('0x40')]);_0x4e9ddb['offset']=qs['offset'](_0x22f733[_0x4bbc('0x39')][_0x4bbc('0x2b')]);}return _0x9a79d6[_0x4bbc('0x52')](_0x4e9ddb);}})['then'](function(_0x4f3714){if(_0x4f3714){return _0x4f3714?{'count':_0x4fd6bd,'rows':_0x4f3714}:null;}})[_0x4bbc('0x1d')](respondWithResult(_0xb21319,null))[_0x4bbc('0x4c')](handleError(_0xb21319,null));};exports['addConfiguration']=function(_0x20d15f,_0x21ced8,_0xb77004){if(_0x20d15f[_0x4bbc('0x50')]['id']){delete _0x20d15f['body']['id'];}return db[_0x4bbc('0x35')][_0x4bbc('0x55')]({'where':{'id':_0x20d15f[_0x4bbc('0x51')]['id']}})[_0x4bbc('0x1d')](handleEntityNotFound(_0x21ced8,null))['then'](function(_0x28d5cb){if(_0x28d5cb){_0x20d15f[_0x4bbc('0x50')][_0x4bbc('0x56')]=_0x28d5cb['id'];_0x20d15f['body'][_0x4bbc('0x57')]=integrations['getSubjects'](_0x20d15f['body'][_0x4bbc('0x58')],_0x20d15f[_0x4bbc('0x50')]['type']);_0x20d15f[_0x4bbc('0x50')][_0x4bbc('0x59')]=integrations['getDescriptions'](_0x20d15f['body'][_0x4bbc('0x58')],_0x20d15f[_0x4bbc('0x50')]['type']);return db[_0x4bbc('0x53')]['create'](_0x20d15f['body'],{'include':[{'model':db['SugarcrmField'],'as':'Subjects'},{'model':db['SugarcrmField'],'as':_0x4bbc('0x59')}]});}return null;})[_0x4bbc('0x1d')](respondWithResult(_0x21ced8,null))[_0x4bbc('0x4c')](handleError(_0x21ced8,null));};exports[_0x4bbc('0x5a')]=function(_0x1fde68,_0x3f2314,_0x2a45d7){var _0x305e4e='';var _0x3e9620=['id',_0x4bbc('0x33'),'assigned_user_id','created_by',_0x4bbc('0x5b'),_0x4bbc('0x5c'),_0x4bbc('0x5d'),_0x4bbc('0x5e'),'parent_id',_0x4bbc('0x5f'),'parent_name',_0x4bbc('0x60')];return db['SugarcrmAccount'][_0x4bbc('0x55')]({'where':{'id':_0x1fde68[_0x4bbc('0x51')]['id']},'attributes':['id',_0x4bbc('0x61'),_0x4bbc('0x62'),_0x4bbc('0x63')]})[_0x4bbc('0x1d')](handleEntityNotFound(_0x3f2314,null))[_0x4bbc('0x1d')](function(_0x49dfa3){if(_0x49dfa3){_0x305e4e=_0x49dfa3[_0x4bbc('0x63')];var _0x334492=_0x305e4e[_0x4bbc('0x64')](-0x1);if(_0x334492==='/'){_0x305e4e=_0x305e4e[_0x4bbc('0x65')](0x0,_0x305e4e[_0x4bbc('0x66')](_0x334492));}return rp({'method':_0x4bbc('0x67'),'uri':util[_0x4bbc('0x68')](_0x4bbc('0x69'),_0x305e4e,_0x4bbc('0x6a')),'json':!![],'form':{'method':'login','input_type':_0x4bbc('0x6b'),'response_type':_0x4bbc('0x6b'),'rest_data':JSON[_0x4bbc('0x6c')]({'user_auth':{'user_name':_0x49dfa3[_0x4bbc('0x61')],'password':_0x49dfa3[_0x4bbc('0x62')],'encryption':_0x4bbc('0x6d')},'application':_0x4bbc('0x6e')})}});}})[_0x4bbc('0x1d')](function(_0x11c655){if(_0x11c655&&_0x11c655[_0x4bbc('0x33')]!==_0x4bbc('0x6f')&&_0x11c655['name']!=='Password\x20Expired'){return rp({'method':_0x4bbc('0x67'),'uri':util[_0x4bbc('0x68')](_0x4bbc('0x69'),_0x305e4e,_0x4bbc('0x6a')),'json':!![],'form':{'method':_0x4bbc('0x70'),'input_type':_0x4bbc('0x6b'),'response_type':_0x4bbc('0x6b'),'rest_data':JSON[_0x4bbc('0x6c')]({'session':_0x11c655['id'],'module_name':_0x4bbc('0x71')})}})[_0x4bbc('0x1d')](function(_0x1e1263){if(_0x1e1263){var _0x2c1f56=_[_0x4bbc('0x72')](_0x1e1263[_0x4bbc('0x73')]);_['remove'](_0x2c1f56,function(_0x3a7300){return _0x3e9620[_0x4bbc('0x74')](_0x3a7300[_0x4bbc('0x33')]);});return{'count':_0x2c1f56[_0x4bbc('0x3e')],'rows':_[_0x4bbc('0x46')](_0x2c1f56,function(_0xcad544){return{'id':_0xcad544['name'],'name':_0xcad544[_0x4bbc('0x75')],'custom':_[_0x4bbc('0x76')](_0xcad544[_0x4bbc('0x33')],'_c')?!![]:![],'options':_0xcad544[_0x4bbc('0x49')]?_[_0x4bbc('0x46')](_[_0x4bbc('0x72')](_0xcad544[_0x4bbc('0x49')]),function(_0x31ecae){return{'name':_0x31ecae['value'],'value':_0x31ecae[_0x4bbc('0x33')]};}):[]};})};}})[_0x4bbc('0x1d')](respondWithResult(_0x3f2314,null))[_0x4bbc('0x4c')](function(_0x3e8386){var _0x6eda34=_0x1fde68[_0x4bbc('0x39')]['test']?0x1f4:_0x3e8386[_0x4bbc('0x77')]||0x1f4;logger[_0x4bbc('0x23')](_0x4bbc('0x78'),'getFields',_0x6eda34,JSON[_0x4bbc('0x6c')](_0x3e8386));delete _0x3e8386[_0x4bbc('0x33')];if(_0x6eda34===0x191){_0x6eda34=0x190;}_0x3f2314['status'](_0x6eda34)[_0x4bbc('0x79')](_0x1fde68['query'][_0x4bbc('0x7a')]?{'message':_0x4bbc('0x7b'),'statusCode':_0x3e8386[_0x4bbc('0x77')]}:_0x3e8386);});}else{var _0x58f690=0x1f4;_0x3f2314['status'](_0x58f690)[_0x4bbc('0x79')]({'message':'Wrong\x20credentials','statusCode':0x190});}});};
\ No newline at end of file
index b5673d1..dc85b44 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fcc=['../../config/logger','moment','request-promise','../../components/integrations/configuration','SugarcrmAccount','lodash','util'];(function(_0x1ed0e1,_0x337d70){var _0x461530=function(_0x50175d){while(--_0x50175d){_0x1ed0e1['push'](_0x1ed0e1['shift']());}};_0x461530(++_0x337d70);}(_0x3fcc,0x14e));var _0xc3fc=function(_0xaab1e7,_0x5b18a1){_0xaab1e7=_0xaab1e7-0x0;var _0x3473a5=_0x3fcc[_0xaab1e7];return _0x3473a5;};'use strict';var _=require(_0xc3fc('0x0'));var util=require(_0xc3fc('0x1'));var logger=require(_0xc3fc('0x2'))('api');var moment=require(_0xc3fc('0x3'));var BPromise=require('bluebird');var rp=require(_0xc3fc('0x4'));var attributes=require('./intSugarcrmAccount.attributes');var integrations=require(_0xc3fc('0x5'));module['exports']=function(_0x1c7f85,_0x586e89){return _0x1c7f85['define'](_0xc3fc('0x6'),attributes,{'tableName':'int_sugarcrm_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x049b=['bluebird','request-promise','./intSugarcrmAccount.attributes','../../components/integrations/configuration','exports','define','int_sugarcrm_accounts','util','../../config/logger'];(function(_0x2bae67,_0x1077b2){var _0x5f29ed=function(_0xa01841){while(--_0xa01841){_0x2bae67['push'](_0x2bae67['shift']());}};_0x5f29ed(++_0x1077b2);}(_0x049b,0x1d2));var _0xb049=function(_0x4e910f,_0x3d3095){_0x4e910f=_0x4e910f-0x0;var _0x2b8202=_0x049b[_0x4e910f];return _0x2b8202;};'use strict';var _=require('lodash');var util=require(_0xb049('0x0'));var logger=require(_0xb049('0x1'))('api');var moment=require('moment');var BPromise=require(_0xb049('0x2'));var rp=require(_0xb049('0x3'));var attributes=require(_0xb049('0x4'));var integrations=require(_0xb049('0x5'));module[_0xb049('0x6')]=function(_0x4c9228,_0x112c0f){return _0x4c9228[_0xb049('0x7')]('SugarcrmAccount',attributes,{'tableName':_0xb049('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index fbd52e7..d5acd43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb95e=['GetSugarcrmAccount','SugarcrmAccount','findAll','options','raw','where','attributes','limit','include','model','map','find','ShowSugarcrmAccount','moment','randomstring','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','then','info','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','debug','SugarcrmAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch'];(function(_0xa9ab02,_0x28826f){var _0x1e954a=function(_0x47754c){while(--_0x47754c){_0xa9ab02['push'](_0xa9ab02['shift']());}};_0x1e954a(++_0x28826f);}(_0xb95e,0x1e9));var _0xeb95=function(_0x444e0f,_0x527e03){_0x444e0f=_0x444e0f-0x0;var _0x39810e=_0xb95e[_0x444e0f];return _0x39810e;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xeb95('0x0'));var BPromise=require('bluebird');var rs=require(_0xeb95('0x1'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xeb95('0x2'));var logger=require('../../config/logger')(_0xeb95('0x3'));var config=require(_0xeb95('0x4'));var jayson=require(_0xeb95('0x5'));var client=jayson[_0xeb95('0x6')][_0xeb95('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x23057f,_0x460b22,_0x4cced1){return new BPromise(function(_0x233a82,_0x38f377){return client[_0xeb95('0x8')](_0x23057f,_0x4cced1)[_0xeb95('0x9')](function(_0x5f097a){logger[_0xeb95('0xa')](_0xeb95('0xb'),_0x460b22,_0xeb95('0xc'));logger[_0xeb95('0xd')](_0xeb95('0xe'),_0x460b22,_0xeb95('0xc'),JSON[_0xeb95('0xf')](_0x5f097a));if(_0x5f097a[_0xeb95('0x10')]){if(_0x5f097a[_0xeb95('0x10')][_0xeb95('0x11')]===0x1f4){logger[_0xeb95('0x10')](_0xeb95('0xb'),_0x460b22,_0x5f097a[_0xeb95('0x10')][_0xeb95('0x12')]);return _0x38f377(_0x5f097a[_0xeb95('0x10')]['message']);}logger['error'](_0xeb95('0xb'),_0x460b22,_0x5f097a['error'][_0xeb95('0x12')]);return _0x233a82(_0x5f097a[_0xeb95('0x10')]['message']);}else{logger['info'](_0xeb95('0xb'),_0x460b22,_0xeb95('0xc'));_0x233a82(_0x5f097a[_0xeb95('0x13')][_0xeb95('0x12')]);}})[_0xeb95('0x14')](function(_0x184fc1){logger[_0xeb95('0x10')](_0xeb95('0xb'),_0x460b22,_0x184fc1);_0x38f377(_0x184fc1);});});}exports[_0xeb95('0x15')]=function(_0x25c083){var _0x737f6a=this;return new Promise(function(_0xe33327,_0x413792){return db[_0xeb95('0x16')][_0xeb95('0x17')]({'raw':_0x25c083[_0xeb95('0x18')]?_0x25c083['options'][_0xeb95('0x19')]===undefined?!![]:![]:!![],'where':_0x25c083[_0xeb95('0x18')]?_0x25c083[_0xeb95('0x18')][_0xeb95('0x1a')]||null:null,'attributes':_0x25c083[_0xeb95('0x18')]?_0x25c083['options'][_0xeb95('0x1b')]||null:null,'limit':_0x25c083['options']?_0x25c083[_0xeb95('0x18')][_0xeb95('0x1c')]||null:null,'include':_0x25c083[_0xeb95('0x18')]?_0x25c083[_0xeb95('0x18')][_0xeb95('0x1d')]?_['map'](_0x25c083[_0xeb95('0x18')][_0xeb95('0x1d')],function(_0x66553a){return{'model':db[_0x66553a[_0xeb95('0x1e')]],'as':_0x66553a['as'],'attributes':_0x66553a[_0xeb95('0x1b')],'include':_0x66553a[_0xeb95('0x1d')]?_['map'](_0x66553a[_0xeb95('0x1d')],function(_0x38efb4){return{'model':db[_0x38efb4['model']],'as':_0x38efb4['as'],'attributes':_0x38efb4[_0xeb95('0x1b')],'include':_0x38efb4['include']?_[_0xeb95('0x1f')](_0x38efb4[_0xeb95('0x1d')],function(_0xc9be8c){return{'model':db[_0xc9be8c[_0xeb95('0x1e')]],'as':_0xc9be8c['as'],'attributes':_0xc9be8c[_0xeb95('0x1b')]};}):[]};}):[]};}):[]:[]})[_0xeb95('0x9')](function(_0x20cc5e){logger[_0xeb95('0xa')]('GetSugarcrmAccount',_0x25c083);logger[_0xeb95('0xd')](_0xeb95('0x15'),_0x25c083,JSON[_0xeb95('0xf')](_0x20cc5e));_0xe33327(_0x20cc5e);})[_0xeb95('0x14')](function(_0x5aeae1){logger['error'](_0xeb95('0x15'),_0x5aeae1[_0xeb95('0x12')],_0x25c083);_0x413792(_0x737f6a['error'](0x1f4,_0x5aeae1[_0xeb95('0x12')]));});});};exports['ShowSugarcrmAccount']=function(_0x4da978){var _0x4f6b9e=this;return new Promise(function(_0x3bb289,_0x485f2e){return db[_0xeb95('0x16')][_0xeb95('0x20')]({'raw':_0x4da978[_0xeb95('0x18')]?_0x4da978[_0xeb95('0x18')][_0xeb95('0x19')]===undefined?!![]:![]:!![],'where':_0x4da978[_0xeb95('0x18')]?_0x4da978[_0xeb95('0x18')][_0xeb95('0x1a')]||null:null,'attributes':_0x4da978['options']?_0x4da978[_0xeb95('0x18')][_0xeb95('0x1b')]||null:null,'include':_0x4da978['options']?_0x4da978[_0xeb95('0x18')]['include']?_[_0xeb95('0x1f')](_0x4da978[_0xeb95('0x18')]['include'],function(_0x2c94f3){return{'model':db[_0x2c94f3[_0xeb95('0x1e')]],'as':_0x2c94f3['as'],'attributes':_0x2c94f3[_0xeb95('0x1b')],'include':_0x2c94f3['include']?_['map'](_0x2c94f3[_0xeb95('0x1d')],function(_0xdc31e){return{'model':db[_0xdc31e[_0xeb95('0x1e')]],'as':_0xdc31e['as'],'attributes':_0xdc31e[_0xeb95('0x1b')],'include':_0xdc31e[_0xeb95('0x1d')]?_[_0xeb95('0x1f')](_0xdc31e['include'],function(_0x321026){return{'model':db[_0x321026['model']],'as':_0x321026['as'],'attributes':_0x321026['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x446652){logger[_0xeb95('0xa')](_0xeb95('0x21'),_0x4da978);logger['debug'](_0xeb95('0x21'),_0x4da978,JSON[_0xeb95('0xf')](_0x446652));_0x3bb289(_0x446652);})['catch'](function(_0x434f2d){logger[_0xeb95('0x10')]('ShowSugarcrmAccount',_0x434f2d[_0xeb95('0x12')],_0x4da978);_0x485f2e(_0x4f6b9e['error'](0x1f4,_0x434f2d['message']));});});};
\ No newline at end of file
+var _0xa524=['rpc','../../config/environment','jayson/promise','client','request','then','info','SugarcrmAccount,\x20%s,\x20%s','request\x20sent','debug','SugarcrmAccount,\x20%s,\x20%s,\x20%s','error','code','message','catch','GetSugarcrmAccount','options','raw','attributes','include','map','model','stringify','SugarcrmAccount','find','where','ShowSugarcrmAccount','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/logger'];(function(_0x26da89,_0x264785){var _0xc95b7b=function(_0x230e5b){while(--_0x230e5b){_0x26da89['push'](_0x26da89['shift']());}};_0xc95b7b(++_0x264785);}(_0xa524,0x81));var _0x4a52=function(_0xea6018,_0x4cf082){_0xea6018=_0xea6018-0x0;var _0x57b54d=_0xa524[_0xea6018];return _0x57b54d;};'use strict';var _=require(_0x4a52('0x0'));var util=require(_0x4a52('0x1'));var moment=require(_0x4a52('0x2'));var BPromise=require(_0x4a52('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x4a52('0x4'));var db=require(_0x4a52('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x4a52('0x6'))(_0x4a52('0x7'));var config=require(_0x4a52('0x8'));var jayson=require(_0x4a52('0x9'));var client=jayson[_0x4a52('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4b3479,_0x6435be,_0x10aafc){return new BPromise(function(_0x442089,_0x12d7cb){return client[_0x4a52('0xb')](_0x4b3479,_0x10aafc)[_0x4a52('0xc')](function(_0x4eecfb){logger[_0x4a52('0xd')](_0x4a52('0xe'),_0x6435be,_0x4a52('0xf'));logger[_0x4a52('0x10')](_0x4a52('0x11'),_0x6435be,_0x4a52('0xf'),JSON['stringify'](_0x4eecfb));if(_0x4eecfb[_0x4a52('0x12')]){if(_0x4eecfb['error'][_0x4a52('0x13')]===0x1f4){logger['error']('SugarcrmAccount,\x20%s,\x20%s',_0x6435be,_0x4eecfb[_0x4a52('0x12')][_0x4a52('0x14')]);return _0x12d7cb(_0x4eecfb['error'][_0x4a52('0x14')]);}logger['error'](_0x4a52('0xe'),_0x6435be,_0x4eecfb[_0x4a52('0x12')][_0x4a52('0x14')]);return _0x442089(_0x4eecfb[_0x4a52('0x12')][_0x4a52('0x14')]);}else{logger[_0x4a52('0xd')]('SugarcrmAccount,\x20%s,\x20%s',_0x6435be,'request\x20sent');_0x442089(_0x4eecfb['result']['message']);}})[_0x4a52('0x15')](function(_0x5ec595){logger[_0x4a52('0x12')](_0x4a52('0xe'),_0x6435be,_0x5ec595);_0x12d7cb(_0x5ec595);});});}exports[_0x4a52('0x16')]=function(_0x25fa05){var _0x167306=this;return new Promise(function(_0x13790a,_0x5687bd){return db['SugarcrmAccount']['findAll']({'raw':_0x25fa05[_0x4a52('0x17')]?_0x25fa05['options'][_0x4a52('0x18')]===undefined?!![]:![]:!![],'where':_0x25fa05['options']?_0x25fa05['options']['where']||null:null,'attributes':_0x25fa05[_0x4a52('0x17')]?_0x25fa05['options'][_0x4a52('0x19')]||null:null,'limit':_0x25fa05['options']?_0x25fa05[_0x4a52('0x17')]['limit']||null:null,'include':_0x25fa05[_0x4a52('0x17')]?_0x25fa05[_0x4a52('0x17')][_0x4a52('0x1a')]?_[_0x4a52('0x1b')](_0x25fa05['options'][_0x4a52('0x1a')],function(_0x584e3a){return{'model':db[_0x584e3a[_0x4a52('0x1c')]],'as':_0x584e3a['as'],'attributes':_0x584e3a['attributes'],'include':_0x584e3a[_0x4a52('0x1a')]?_[_0x4a52('0x1b')](_0x584e3a['include'],function(_0x10fa3f){return{'model':db[_0x10fa3f[_0x4a52('0x1c')]],'as':_0x10fa3f['as'],'attributes':_0x10fa3f['attributes'],'include':_0x10fa3f[_0x4a52('0x1a')]?_[_0x4a52('0x1b')](_0x10fa3f[_0x4a52('0x1a')],function(_0x394d5d){return{'model':db[_0x394d5d['model']],'as':_0x394d5d['as'],'attributes':_0x394d5d[_0x4a52('0x19')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x9cb758){logger[_0x4a52('0xd')](_0x4a52('0x16'),_0x25fa05);logger[_0x4a52('0x10')](_0x4a52('0x16'),_0x25fa05,JSON[_0x4a52('0x1d')](_0x9cb758));_0x13790a(_0x9cb758);})[_0x4a52('0x15')](function(_0x1b1cf8){logger[_0x4a52('0x12')]('GetSugarcrmAccount',_0x1b1cf8['message'],_0x25fa05);_0x5687bd(_0x167306[_0x4a52('0x12')](0x1f4,_0x1b1cf8[_0x4a52('0x14')]));});});};exports['ShowSugarcrmAccount']=function(_0x3a7dbd){var _0x43a6c9=this;return new Promise(function(_0x19357c,_0x2be5c0){return db[_0x4a52('0x1e')][_0x4a52('0x1f')]({'raw':_0x3a7dbd[_0x4a52('0x17')]?_0x3a7dbd[_0x4a52('0x17')]['raw']===undefined?!![]:![]:!![],'where':_0x3a7dbd[_0x4a52('0x17')]?_0x3a7dbd[_0x4a52('0x17')][_0x4a52('0x20')]||null:null,'attributes':_0x3a7dbd[_0x4a52('0x17')]?_0x3a7dbd[_0x4a52('0x17')][_0x4a52('0x19')]||null:null,'include':_0x3a7dbd[_0x4a52('0x17')]?_0x3a7dbd[_0x4a52('0x17')][_0x4a52('0x1a')]?_['map'](_0x3a7dbd[_0x4a52('0x17')][_0x4a52('0x1a')],function(_0x18d1ec){return{'model':db[_0x18d1ec['model']],'as':_0x18d1ec['as'],'attributes':_0x18d1ec[_0x4a52('0x19')],'include':_0x18d1ec[_0x4a52('0x1a')]?_[_0x4a52('0x1b')](_0x18d1ec[_0x4a52('0x1a')],function(_0x3e9272){return{'model':db[_0x3e9272[_0x4a52('0x1c')]],'as':_0x3e9272['as'],'attributes':_0x3e9272[_0x4a52('0x19')],'include':_0x3e9272[_0x4a52('0x1a')]?_[_0x4a52('0x1b')](_0x3e9272['include'],function(_0x58eafa){return{'model':db[_0x58eafa[_0x4a52('0x1c')]],'as':_0x58eafa['as'],'attributes':_0x58eafa['attributes']};}):[]};}):[]};}):[]:[]})[_0x4a52('0xc')](function(_0xab6530){logger[_0x4a52('0xd')]('ShowSugarcrmAccount',_0x3a7dbd);logger[_0x4a52('0x10')](_0x4a52('0x21'),_0x3a7dbd,JSON[_0x4a52('0x1d')](_0xab6530));_0x19357c(_0xab6530);})[_0x4a52('0x15')](function(_0x343ec1){logger[_0x4a52('0x12')](_0x4a52('0x21'),_0x343ec1[_0x4a52('0x14')],_0x3a7dbd);_0x2be5c0(_0x43a6c9[_0x4a52('0x12')](0x1f4,_0x343ec1[_0x4a52('0x14')]));});});};
\ No newline at end of file
index b6fd33d..bd1ba4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe1b6=['create','put','/:id','destroy','exports','multer','path','connect-timeout','express','Router','../../components/auth/service','./intSugarcrmConfiguration.controller','get','isAuthenticated','index','show','/:id/fields','getFields','/:id/subjects','getSubjects','getDescriptions','post'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xe1b6,0x14f));var _0x6e1b=function(_0xc3d199,_0x5492f0){_0xc3d199=_0xc3d199-0x0;var _0x473271=_0xe1b6[_0xc3d199];return _0x473271;};'use strict';var multer=require(_0x6e1b('0x0'));var util=require('util');var path=require(_0x6e1b('0x1'));var timeout=require(_0x6e1b('0x2'));var express=require(_0x6e1b('0x3'));var router=express[_0x6e1b('0x4')]();var auth=require(_0x6e1b('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x6e1b('0x6'));router[_0x6e1b('0x7')]('/',auth[_0x6e1b('0x8')](),controller[_0x6e1b('0x9')]);router[_0x6e1b('0x7')]('/:id',auth[_0x6e1b('0x8')](),controller[_0x6e1b('0xa')]);router[_0x6e1b('0x7')](_0x6e1b('0xb'),auth[_0x6e1b('0x8')](),controller[_0x6e1b('0xc')]);router[_0x6e1b('0x7')](_0x6e1b('0xd'),auth[_0x6e1b('0x8')](),controller[_0x6e1b('0xe')]);router[_0x6e1b('0x7')]('/:id/descriptions',auth[_0x6e1b('0x8')](),controller[_0x6e1b('0xf')]);router[_0x6e1b('0x10')]('/',auth[_0x6e1b('0x8')](),controller[_0x6e1b('0x11')]);router[_0x6e1b('0x12')](_0x6e1b('0x13'),auth[_0x6e1b('0x8')](),controller['update']);router['delete'](_0x6e1b('0x13'),auth[_0x6e1b('0x8')](),controller[_0x6e1b('0x14')]);module[_0x6e1b('0x15')]=router;
\ No newline at end of file
+var _0xf472=['exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intSugarcrmConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','getFields','/:id/subjects','/:id/descriptions','getDescriptions','post','create','update','delete','destroy'];(function(_0x33005c,_0x31eb9d){var _0x2ae299=function(_0x224f79){while(--_0x224f79){_0x33005c['push'](_0x33005c['shift']());}};_0x2ae299(++_0x31eb9d);}(_0xf472,0xd1));var _0x2f47=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xf472[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require(_0x2f47('0x0'));var util=require(_0x2f47('0x1'));var path=require(_0x2f47('0x2'));var timeout=require(_0x2f47('0x3'));var express=require(_0x2f47('0x4'));var router=express[_0x2f47('0x5')]();var auth=require(_0x2f47('0x6'));var interaction=require(_0x2f47('0x7'));var config=require(_0x2f47('0x8'));var controller=require(_0x2f47('0x9'));router[_0x2f47('0xa')]('/',auth[_0x2f47('0xb')](),controller[_0x2f47('0xc')]);router[_0x2f47('0xa')](_0x2f47('0xd'),auth[_0x2f47('0xb')](),controller[_0x2f47('0xe')]);router['get'](_0x2f47('0xf'),auth[_0x2f47('0xb')](),controller[_0x2f47('0x10')]);router[_0x2f47('0xa')](_0x2f47('0x11'),auth['isAuthenticated'](),controller['getSubjects']);router['get'](_0x2f47('0x12'),auth[_0x2f47('0xb')](),controller[_0x2f47('0x13')]);router[_0x2f47('0x14')]('/',auth[_0x2f47('0xb')](),controller[_0x2f47('0x15')]);router['put'](_0x2f47('0xd'),auth['isAuthenticated'](),controller[_0x2f47('0x16')]);router[_0x2f47('0x17')](_0x2f47('0xd'),auth[_0x2f47('0xb')](),controller[_0x2f47('0x18')]);module[_0x2f47('0x19')]=router;
\ No newline at end of file
index 40b65e8..102a82e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc80a=['STRING'];(function(_0x1f87a1,_0x567336){var _0x149333=function(_0x52126b){while(--_0x52126b){_0x1f87a1['push'](_0x1f87a1['shift']());}};_0x149333(++_0x567336);}(_0xc80a,0x1b5));var _0xac80=function(_0x91cf87,_0x41ca45){_0x91cf87=_0x91cf87-0x0;var _0x2ee79b=_0xc80a[_0x91cf87];return _0x2ee79b;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xac80('0x0')]},'description':{'type':Sequelize[_0xac80('0x0')]}};
\ No newline at end of file
+var _0x8dea=['sequelize','exports','STRING'];(function(_0x2e4aa2,_0x11956a){var _0x5e6092=function(_0x4c12c2){while(--_0x4c12c2){_0x2e4aa2['push'](_0x2e4aa2['shift']());}};_0x5e6092(++_0x11956a);}(_0x8dea,0x1b9));var _0xa8de=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x8dea[_0x321bb2];return _0x9c12ed;};'use strict';var Sequelize=require(_0xa8de('0x0'));module[_0xa8de('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xa8de('0x2')]}};
\ No newline at end of file
index e157f78..66d4260 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbc7e=['squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','http','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','error','code','message','info','result','catch','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','then','destroy','stack','name','send','index','SugarcrmConfiguration','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','order','sort','where','pick','filter','map','type','key','field','options','includeAll','include','findAll','show','params','length','merge','find','create','update','body','getFields','nolimit','findOne','SugarcrmField','getSubjects','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','to-csv','lodash'];(function(_0x5a6aa7,_0xff2a57){var _0x316b32=function(_0x1019fc){while(--_0x1019fc){_0x5a6aa7['push'](_0x5a6aa7['shift']());}};_0x316b32(++_0xff2a57);}(_0xbc7e,0x168));var _0xebc7=function(_0x3a2ed2,_0x1109c7){_0x3a2ed2=_0x3a2ed2-0x0;var _0x5c12e8=_0xbc7e[_0x3a2ed2];return _0x5c12e8;};'use strict';var pdf=require(_0xebc7('0x0'));var emlformat=require(_0xebc7('0x1'));var rimraf=require(_0xebc7('0x2'));var zipdir=require(_0xebc7('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xebc7('0x4'));var moment=require(_0xebc7('0x5'));var BPromise=require(_0xebc7('0x6'));var Mustache=require(_0xebc7('0x7'));var util=require(_0xebc7('0x8'));var path=require(_0xebc7('0x9'));var sox=require('sox');var csv=require(_0xebc7('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xebc7('0xb'));var squel=require(_0xebc7('0xc'));var crypto=require(_0xebc7('0xd'));var jsforce=require(_0xebc7('0xe'));var deskjs=require(_0xebc7('0xf'));var toCsv=require('to-csv');var querystring=require(_0xebc7('0x10'));var Papa=require(_0xebc7('0x11'));var authService=require(_0xebc7('0x12'));var hardwareService=require(_0xebc7('0x13'));var Redis=require(_0xebc7('0x14'));var qs=require(_0xebc7('0x15'));var logger=require(_0xebc7('0x16'))(_0xebc7('0x17'));var utils=require(_0xebc7('0x18'));var config=require(_0xebc7('0x19'));var db=require(_0xebc7('0x1a'))['db'];var jayson=require(_0xebc7('0x1b'));var client=jayson[_0xebc7('0x1c')][_0xebc7('0x1d')]({'port':0x232a});function respondWithRpcPromise(_0x307f7c,_0x3e66eb,_0x48f813,_0x41e668){return new BPromise(function(_0x4f5a48,_0x34f6e3){var _0xe63faa=_0x41e668||client;return _0xe63faa['request'](_0x307f7c,_0x48f813)['then'](function(_0x441a40){logger['info'](_0xebc7('0x1e'),_0x3e66eb,_0xebc7('0x1f'));logger[_0xebc7('0x20')]('SugarcrmConfiguration,\x20%s,\x20%s,\x20%s',_0x3e66eb,_0xebc7('0x1f'),JSON['stringify'](_0x441a40));if(_0x441a40[_0xebc7('0x21')]){if(_0x441a40[_0xebc7('0x21')][_0xebc7('0x22')]===0x1f4){logger[_0xebc7('0x21')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x3e66eb,_0x441a40['error'][_0xebc7('0x23')]);return _0x34f6e3(_0x441a40[_0xebc7('0x21')][_0xebc7('0x23')]);}logger['error'](_0xebc7('0x1e'),_0x3e66eb,_0x441a40[_0xebc7('0x21')]['message']);return _0x4f5a48(_0x441a40[_0xebc7('0x21')][_0xebc7('0x23')]);}else{logger[_0xebc7('0x24')](_0xebc7('0x1e'),_0x3e66eb,_0xebc7('0x1f'));_0x4f5a48(_0x441a40[_0xebc7('0x25')][_0xebc7('0x23')]);}})[_0xebc7('0x26')](function(_0x405f1f){logger[_0xebc7('0x21')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x3e66eb,_0x405f1f);_0x34f6e3(_0x405f1f);});});}function respondWithStatusCode(_0x55eab0,_0x4e2d59){_0x4e2d59=_0x4e2d59||0xcc;return function(_0xa99819){if(_0xa99819){return _0x55eab0[_0xebc7('0x27')](_0x4e2d59);}return _0x55eab0[_0xebc7('0x28')](_0x4e2d59)[_0xebc7('0x29')]();};}function respondWithResult(_0x5e1b7a,_0x45fffa){_0x45fffa=_0x45fffa||0xc8;return function(_0x431b1e){if(_0x431b1e){return _0x5e1b7a[_0xebc7('0x28')](_0x45fffa)['json'](_0x431b1e);}};}function respondWithFilteredResult(_0x1492a9,_0x540921){return function(_0x1ce503){if(_0x1ce503){var _0x1240e4=_0x1ce503[_0xebc7('0x2a')],_0x51e8da=_0x540921[_0xebc7('0x2b')],_0x37738c=_0x540921[_0xebc7('0x2b')]+_0x540921[_0xebc7('0x2c')],_0x405b6b;if(_0x37738c>=_0x1240e4){_0x37738c=_0x1240e4;_0x405b6b=0xc8;}else{_0x405b6b=0xce;}_0x1492a9[_0xebc7('0x28')](_0x405b6b);return _0x1492a9[_0xebc7('0x2d')](_0xebc7('0x2e'),_0x51e8da+'-'+_0x37738c+'/'+_0x1240e4)[_0xebc7('0x2f')](_0x1ce503);}return null;};}function patchUpdates(_0x2d1e3a){return function(_0x476e37){try{jsonpatch[_0xebc7('0x30')](_0x476e37,_0x2d1e3a,!![]);}catch(_0x3d6778){return BPromise[_0xebc7('0x31')](_0x3d6778);}return _0x476e37['save']();};}function saveUpdates(_0x9cd485,_0x12430d){return function(_0x4d10d4){if(_0x4d10d4){return _0x4d10d4['update'](_0x9cd485)[_0xebc7('0x32')](function(_0x299643){return _0x299643;});}return null;};}function removeEntity(_0x3ff7e2,_0x5738b4){return function(_0x218900){if(_0x218900){return _0x218900[_0xebc7('0x33')]()[_0xebc7('0x32')](function(){_0x3ff7e2[_0xebc7('0x28')](0xcc)['end']();});}};}function handleEntityNotFound(_0x18d072,_0x2914cb){return function(_0x427490){if(!_0x427490){_0x18d072['sendStatus'](0x194);}return _0x427490;};}function handleError(_0x474909,_0x5cd395){_0x5cd395=_0x5cd395||0x1f4;return function(_0x54be7e){logger[_0xebc7('0x21')](_0x54be7e[_0xebc7('0x34')]);if(_0x54be7e[_0xebc7('0x35')]){delete _0x54be7e[_0xebc7('0x35')];}_0x474909['status'](_0x5cd395)[_0xebc7('0x36')](_0x54be7e);};}exports[_0xebc7('0x37')]=function(_0xf3519d,_0x55386f){var _0x190e2a={},_0x5a26c6={},_0x5d9bcc={'count':0x0,'rows':[]};var _0x38fa9b=db[_0xebc7('0x38')][_0xebc7('0x39')];_0x5a26c6[_0xebc7('0x3a')]=_[_0xebc7('0x3b')](_0x38fa9b);_0x5a26c6[_0xebc7('0x3c')]=_[_0xebc7('0x3b')](_0xf3519d['query']);_0x5a26c6[_0xebc7('0x3d')]=_[_0xebc7('0x3e')](_0x5a26c6[_0xebc7('0x3a')],_0x5a26c6[_0xebc7('0x3c')]);_0x190e2a[_0xebc7('0x3f')]=_[_0xebc7('0x3e')](_0x5a26c6[_0xebc7('0x3a')],qs[_0xebc7('0x40')](_0xf3519d[_0xebc7('0x3c')][_0xebc7('0x40')]));_0x190e2a['attributes']=_0x190e2a[_0xebc7('0x3f')]['length']?_0x190e2a[_0xebc7('0x3f')]:_0x5a26c6['model'];if(!_0xf3519d[_0xebc7('0x3c')][_0xebc7('0x41')]('nolimit')){_0x190e2a['limit']=qs[_0xebc7('0x2c')](_0xf3519d[_0xebc7('0x3c')][_0xebc7('0x2c')]);_0x190e2a[_0xebc7('0x2b')]=qs[_0xebc7('0x2b')](_0xf3519d[_0xebc7('0x3c')][_0xebc7('0x2b')]);}_0x190e2a[_0xebc7('0x42')]=qs[_0xebc7('0x43')](_0xf3519d[_0xebc7('0x3c')][_0xebc7('0x43')]);_0x190e2a[_0xebc7('0x44')]=qs['filters'](_[_0xebc7('0x45')](_0xf3519d[_0xebc7('0x3c')],_0x5a26c6['filters']));if(_0xf3519d['query'][_0xebc7('0x46')]){_0x190e2a[_0xebc7('0x44')]=_['merge'](_0x190e2a['where'],{'$or':_[_0xebc7('0x47')](_0x38fa9b,function(_0x783ea0){if(_0x783ea0[_0xebc7('0x48')][_0xebc7('0x49')]!=='VIRTUAL'){var _0x4906c6={};_0x4906c6[_0x783ea0[_0xebc7('0x4a')]]={'$like':'%'+_0xf3519d[_0xebc7('0x3c')][_0xebc7('0x46')]+'%'};return _0x4906c6;}})});}_0x190e2a=_['merge']({},_0x190e2a,_0xf3519d[_0xebc7('0x4b')]);var _0xf080c8={'where':_0x190e2a[_0xebc7('0x44')]};return db[_0xebc7('0x38')][_0xebc7('0x2a')](_0xf080c8)[_0xebc7('0x32')](function(_0x1b8f58){_0x5d9bcc[_0xebc7('0x2a')]=_0x1b8f58;if(_0xf3519d[_0xebc7('0x3c')][_0xebc7('0x4c')]){_0x190e2a[_0xebc7('0x4d')]=[{'all':!![]}];}return db[_0xebc7('0x38')][_0xebc7('0x4e')](_0x190e2a);})[_0xebc7('0x32')](function(_0x303cd6){_0x5d9bcc['rows']=_0x303cd6;return _0x5d9bcc;})[_0xebc7('0x32')](respondWithFilteredResult(_0x55386f,_0x190e2a))[_0xebc7('0x26')](handleError(_0x55386f,null));};exports[_0xebc7('0x4f')]=function(_0x2d7970,_0x3ab31c){var _0x324fe4={'raw':![],'where':{'id':_0x2d7970[_0xebc7('0x50')]['id']}},_0x320498={};_0x320498[_0xebc7('0x3a')]=_[_0xebc7('0x3b')](db[_0xebc7('0x38')][_0xebc7('0x39')]);_0x320498['query']=_[_0xebc7('0x3b')](_0x2d7970[_0xebc7('0x3c')]);_0x320498['filters']=_['intersection'](_0x320498[_0xebc7('0x3a')],_0x320498[_0xebc7('0x3c')]);_0x324fe4[_0xebc7('0x3f')]=_[_0xebc7('0x3e')](_0x320498[_0xebc7('0x3a')],qs[_0xebc7('0x40')](_0x2d7970[_0xebc7('0x3c')]['fields']));_0x324fe4[_0xebc7('0x3f')]=_0x324fe4[_0xebc7('0x3f')][_0xebc7('0x51')]?_0x324fe4['attributes']:_0x320498[_0xebc7('0x3a')];if(_0x2d7970[_0xebc7('0x3c')][_0xebc7('0x4c')]){_0x324fe4[_0xebc7('0x4d')]=[{'all':!![]}];}_0x324fe4=_[_0xebc7('0x52')]({},_0x324fe4,_0x2d7970['options']);return db[_0xebc7('0x38')][_0xebc7('0x53')](_0x324fe4)[_0xebc7('0x32')](handleEntityNotFound(_0x3ab31c,null))['then'](respondWithResult(_0x3ab31c,null))['catch'](handleError(_0x3ab31c,null));};exports['create']=function(_0x3fea57,_0x21e2cd){return db[_0xebc7('0x38')][_0xebc7('0x54')](_0x3fea57['body'],{})[_0xebc7('0x32')](respondWithResult(_0x21e2cd,0xc9))[_0xebc7('0x26')](handleError(_0x21e2cd,null));};exports[_0xebc7('0x55')]=function(_0x4c9373,_0x5ce54d){if(_0x4c9373[_0xebc7('0x56')]['id']){delete _0x4c9373[_0xebc7('0x56')]['id'];}return db[_0xebc7('0x38')]['find']({'where':{'id':_0x4c9373[_0xebc7('0x50')]['id']}})['then'](handleEntityNotFound(_0x5ce54d,null))[_0xebc7('0x32')](saveUpdates(_0x4c9373[_0xebc7('0x56')],null))['then'](respondWithResult(_0x5ce54d,null))[_0xebc7('0x26')](handleError(_0x5ce54d,null));};exports[_0xebc7('0x33')]=function(_0x264606,_0x5e4ffc){return db[_0xebc7('0x38')][_0xebc7('0x53')]({'where':{'id':_0x264606['params']['id']}})['then'](handleEntityNotFound(_0x5e4ffc,null))['then'](removeEntity(_0x5e4ffc,null))[_0xebc7('0x26')](handleError(_0x5e4ffc,null));};exports[_0xebc7('0x57')]=function(_0x4ba7ec,_0x161f70,_0x1368cf){var _0x5e5c79={};var _0x1547b4={};var _0x140bfb;var _0x297460;return db[_0xebc7('0x38')]['findOne']({'where':{'id':_0x4ba7ec['params']['id']}})['then'](handleEntityNotFound(_0x161f70,null))[_0xebc7('0x32')](function(_0x42d953){if(_0x42d953){_0x140bfb=_0x42d953;_0x1547b4['model']=_['keys'](db['SugarcrmField']['rawAttributes']);_0x1547b4[_0xebc7('0x3c')]=_[_0xebc7('0x3b')](_0x4ba7ec[_0xebc7('0x3c')]);_0x1547b4[_0xebc7('0x3d')]=_[_0xebc7('0x3e')](_0x1547b4[_0xebc7('0x3a')],_0x1547b4[_0xebc7('0x3c')]);_0x5e5c79[_0xebc7('0x3f')]=_['intersection'](_0x1547b4[_0xebc7('0x3a')],qs['fields'](_0x4ba7ec[_0xebc7('0x3c')][_0xebc7('0x40')]));_0x5e5c79['attributes']=_0x5e5c79[_0xebc7('0x3f')][_0xebc7('0x51')]?_0x5e5c79[_0xebc7('0x3f')]:_0x1547b4[_0xebc7('0x3a')];_0x5e5c79[_0xebc7('0x42')]=qs[_0xebc7('0x43')](_0x4ba7ec[_0xebc7('0x3c')][_0xebc7('0x43')]);_0x5e5c79[_0xebc7('0x44')]=qs[_0xebc7('0x3d')](_[_0xebc7('0x45')](_0x4ba7ec[_0xebc7('0x3c')],_0x1547b4[_0xebc7('0x3d')]));if(_0x4ba7ec[_0xebc7('0x3c')][_0xebc7('0x46')]){_0x5e5c79['where']=_[_0xebc7('0x52')](_0x5e5c79[_0xebc7('0x44')],{'$or':_[_0xebc7('0x47')](_0x5e5c79[_0xebc7('0x3f')],function(_0x2353d2){var _0x11472d={};_0x11472d[_0x2353d2]={'$like':'%'+_0x4ba7ec['query']['filter']+'%'};return _0x11472d;})});}_0x5e5c79=_[_0xebc7('0x52')]({},_0x5e5c79,_0x4ba7ec['options']);return _0x140bfb[_0xebc7('0x57')](_0x5e5c79);}})[_0xebc7('0x32')](function(_0x35e395){if(_0x35e395){_0x297460=_0x35e395[_0xebc7('0x51')];if(!_0x4ba7ec['query'][_0xebc7('0x41')](_0xebc7('0x58'))){_0x5e5c79[_0xebc7('0x2c')]=qs['limit'](_0x4ba7ec['query'][_0xebc7('0x2c')]);_0x5e5c79['offset']=qs[_0xebc7('0x2b')](_0x4ba7ec[_0xebc7('0x3c')][_0xebc7('0x2b')]);}return _0x140bfb[_0xebc7('0x57')](_0x5e5c79);}})[_0xebc7('0x32')](function(_0x409013){if(_0x409013){return _0x409013?{'count':_0x297460,'rows':_0x409013}:null;}})['then'](respondWithResult(_0x161f70,null))[_0xebc7('0x26')](handleError(_0x161f70,null));};exports['getSubjects']=function(_0x1a4bb4,_0x271182,_0x385546){var _0x3e4741={};var _0xba4771={};var _0x362fa4;var _0x506b23;return db[_0xebc7('0x38')][_0xebc7('0x59')]({'where':{'id':_0x1a4bb4[_0xebc7('0x50')]['id']}})[_0xebc7('0x32')](handleEntityNotFound(_0x271182,null))[_0xebc7('0x32')](function(_0x1adf58){if(_0x1adf58){_0x362fa4=_0x1adf58;_0xba4771['model']=_[_0xebc7('0x3b')](db[_0xebc7('0x5a')][_0xebc7('0x39')]);_0xba4771[_0xebc7('0x3c')]=_[_0xebc7('0x3b')](_0x1a4bb4[_0xebc7('0x3c')]);_0xba4771[_0xebc7('0x3d')]=_[_0xebc7('0x3e')](_0xba4771[_0xebc7('0x3a')],_0xba4771[_0xebc7('0x3c')]);_0x3e4741[_0xebc7('0x3f')]=_[_0xebc7('0x3e')](_0xba4771['model'],qs[_0xebc7('0x40')](_0x1a4bb4[_0xebc7('0x3c')]['fields']));_0x3e4741[_0xebc7('0x3f')]=_0x3e4741['attributes'][_0xebc7('0x51')]?_0x3e4741[_0xebc7('0x3f')]:_0xba4771[_0xebc7('0x3a')];_0x3e4741[_0xebc7('0x42')]=qs[_0xebc7('0x43')](_0x1a4bb4[_0xebc7('0x3c')][_0xebc7('0x43')]);_0x3e4741[_0xebc7('0x44')]=qs[_0xebc7('0x3d')](_['pick'](_0x1a4bb4[_0xebc7('0x3c')],_0xba4771[_0xebc7('0x3d')]));if(_0x1a4bb4[_0xebc7('0x3c')][_0xebc7('0x46')]){_0x3e4741[_0xebc7('0x44')]=_[_0xebc7('0x52')](_0x3e4741[_0xebc7('0x44')],{'$or':_['map'](_0x3e4741['attributes'],function(_0xd27d02){var _0x37d84b={};_0x37d84b[_0xd27d02]={'$like':'%'+_0x1a4bb4[_0xebc7('0x3c')][_0xebc7('0x46')]+'%'};return _0x37d84b;})});}_0x3e4741=_[_0xebc7('0x52')]({},_0x3e4741,_0x1a4bb4[_0xebc7('0x4b')]);return _0x362fa4[_0xebc7('0x5b')](_0x3e4741);}})[_0xebc7('0x32')](function(_0x2d1d95){if(_0x2d1d95){_0x506b23=_0x2d1d95['length'];if(!_0x1a4bb4[_0xebc7('0x3c')]['hasOwnProperty'](_0xebc7('0x58'))){_0x3e4741[_0xebc7('0x2c')]=qs[_0xebc7('0x2c')](_0x1a4bb4[_0xebc7('0x3c')]['limit']);_0x3e4741[_0xebc7('0x2b')]=qs[_0xebc7('0x2b')](_0x1a4bb4[_0xebc7('0x3c')][_0xebc7('0x2b')]);}return _0x362fa4[_0xebc7('0x5b')](_0x3e4741);}})[_0xebc7('0x32')](function(_0x5ec4d4){if(_0x5ec4d4){return _0x5ec4d4?{'count':_0x506b23,'rows':_0x5ec4d4}:null;}})['then'](respondWithResult(_0x271182,null))[_0xebc7('0x26')](handleError(_0x271182,null));};exports['getDescriptions']=function(_0xb2e99,_0x4f79c5,_0x8b90be){var _0x1e6dd4={};var _0x49fe2f={};var _0x15cc58;var _0x30ab4c;return db[_0xebc7('0x38')][_0xebc7('0x59')]({'where':{'id':_0xb2e99[_0xebc7('0x50')]['id']}})['then'](handleEntityNotFound(_0x4f79c5,null))['then'](function(_0x1ec52d){if(_0x1ec52d){_0x15cc58=_0x1ec52d;_0x49fe2f[_0xebc7('0x3a')]=_[_0xebc7('0x3b')](db[_0xebc7('0x5a')][_0xebc7('0x39')]);_0x49fe2f[_0xebc7('0x3c')]=_[_0xebc7('0x3b')](_0xb2e99[_0xebc7('0x3c')]);_0x49fe2f[_0xebc7('0x3d')]=_[_0xebc7('0x3e')](_0x49fe2f[_0xebc7('0x3a')],_0x49fe2f[_0xebc7('0x3c')]);_0x1e6dd4[_0xebc7('0x3f')]=_[_0xebc7('0x3e')](_0x49fe2f[_0xebc7('0x3a')],qs[_0xebc7('0x40')](_0xb2e99[_0xebc7('0x3c')][_0xebc7('0x40')]));_0x1e6dd4['attributes']=_0x1e6dd4['attributes'][_0xebc7('0x51')]?_0x1e6dd4[_0xebc7('0x3f')]:_0x49fe2f[_0xebc7('0x3a')];_0x1e6dd4[_0xebc7('0x42')]=qs[_0xebc7('0x43')](_0xb2e99['query'][_0xebc7('0x43')]);_0x1e6dd4[_0xebc7('0x44')]=qs[_0xebc7('0x3d')](_[_0xebc7('0x45')](_0xb2e99[_0xebc7('0x3c')],_0x49fe2f[_0xebc7('0x3d')]));if(_0xb2e99[_0xebc7('0x3c')][_0xebc7('0x46')]){_0x1e6dd4[_0xebc7('0x44')]=_['merge'](_0x1e6dd4[_0xebc7('0x44')],{'$or':_[_0xebc7('0x47')](_0x1e6dd4[_0xebc7('0x3f')],function(_0x5c1277){var _0x31b870={};_0x31b870[_0x5c1277]={'$like':'%'+_0xb2e99[_0xebc7('0x3c')][_0xebc7('0x46')]+'%'};return _0x31b870;})});}_0x1e6dd4=_[_0xebc7('0x52')]({},_0x1e6dd4,_0xb2e99[_0xebc7('0x4b')]);return _0x15cc58[_0xebc7('0x5c')](_0x1e6dd4);}})[_0xebc7('0x32')](function(_0x104a92){if(_0x104a92){_0x30ab4c=_0x104a92[_0xebc7('0x51')];if(!_0xb2e99['query'][_0xebc7('0x41')](_0xebc7('0x58'))){_0x1e6dd4[_0xebc7('0x2c')]=qs[_0xebc7('0x2c')](_0xb2e99[_0xebc7('0x3c')]['limit']);_0x1e6dd4['offset']=qs[_0xebc7('0x2b')](_0xb2e99[_0xebc7('0x3c')][_0xebc7('0x2b')]);}return _0x15cc58[_0xebc7('0x5c')](_0x1e6dd4);}})[_0xebc7('0x32')](function(_0x5af065){if(_0x5af065){return _0x5af065?{'count':_0x30ab4c,'rows':_0x5af065}:null;}})[_0xebc7('0x32')](respondWithResult(_0x4f79c5,null))['catch'](handleError(_0x4f79c5,null));};
\ No newline at end of file
+var _0xcad9=['stack','name','send','index','SugarcrmConfiguration','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','limit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','options','includeAll','include','findAll','rows','show','params','create','body','find','getFields','SugarcrmField','nolimit','getSubjects','findOne','map','getDescriptions','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','sox','ejs','lodash','squel','crypto','desk.js','to-csv','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','jayson/promise','client','http','then','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','info','result','catch','sendStatus','end','json','count','offset','set','Content-Range','apply','reject','save','update','destroy','status'];(function(_0x5465e6,_0x2a8809){var _0x10044e=function(_0x1d5dcd){while(--_0x1d5dcd){_0x5465e6['push'](_0x5465e6['shift']());}};_0x10044e(++_0x2a8809);}(_0xcad9,0x1f1));var _0x9cad=function(_0x4cfdd8,_0x21390f){_0x4cfdd8=_0x4cfdd8-0x0;var _0x1c6f6f=_0xcad9[_0x4cfdd8];return _0x1c6f6f;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x9cad('0x0'));var rimraf=require(_0x9cad('0x1'));var zipdir=require(_0x9cad('0x2'));var jsonpatch=require(_0x9cad('0x3'));var rp=require(_0x9cad('0x4'));var moment=require('moment');var BPromise=require(_0x9cad('0x5'));var Mustache=require(_0x9cad('0x6'));var util=require(_0x9cad('0x7'));var path=require('path');var sox=require(_0x9cad('0x8'));var csv=require('to-csv');var ejs=require(_0x9cad('0x9'));var fs=require('fs');var _=require(_0x9cad('0xa'));var squel=require(_0x9cad('0xb'));var crypto=require(_0x9cad('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x9cad('0xd'));var toCsv=require(_0x9cad('0xe'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x9cad('0xf'));var hardwareService=require(_0x9cad('0x10'));var Redis=require(_0x9cad('0x11'));var qs=require(_0x9cad('0x12'));var logger=require(_0x9cad('0x13'))(_0x9cad('0x14'));var utils=require(_0x9cad('0x15'));var config=require(_0x9cad('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0x9cad('0x17'));var client=jayson[_0x9cad('0x18')][_0x9cad('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x26c3e8,_0x5b14e3,_0x219a65,_0x24564b){return new BPromise(function(_0x392193,_0x4dcbc4){var _0x13710d=_0x24564b||client;return _0x13710d['request'](_0x26c3e8,_0x219a65)[_0x9cad('0x1a')](function(_0x476555){logger['info'](_0x9cad('0x1b'),_0x5b14e3,_0x9cad('0x1c'));logger[_0x9cad('0x1d')]('SugarcrmConfiguration,\x20%s,\x20%s,\x20%s',_0x5b14e3,'request\x20sent',JSON[_0x9cad('0x1e')](_0x476555));if(_0x476555['error']){if(_0x476555[_0x9cad('0x1f')]['code']===0x1f4){logger['error'](_0x9cad('0x1b'),_0x5b14e3,_0x476555[_0x9cad('0x1f')][_0x9cad('0x20')]);return _0x4dcbc4(_0x476555[_0x9cad('0x1f')][_0x9cad('0x20')]);}logger[_0x9cad('0x1f')](_0x9cad('0x1b'),_0x5b14e3,_0x476555[_0x9cad('0x1f')]['message']);return _0x392193(_0x476555['error']['message']);}else{logger[_0x9cad('0x21')](_0x9cad('0x1b'),_0x5b14e3,_0x9cad('0x1c'));_0x392193(_0x476555[_0x9cad('0x22')][_0x9cad('0x20')]);}})[_0x9cad('0x23')](function(_0x551b03){logger[_0x9cad('0x1f')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x5b14e3,_0x551b03);_0x4dcbc4(_0x551b03);});});}function respondWithStatusCode(_0x159cb8,_0x354d94){_0x354d94=_0x354d94||0xcc;return function(_0x3dbf34){if(_0x3dbf34){return _0x159cb8[_0x9cad('0x24')](_0x354d94);}return _0x159cb8['status'](_0x354d94)[_0x9cad('0x25')]();};}function respondWithResult(_0x3aae4d,_0x1fcbd7){_0x1fcbd7=_0x1fcbd7||0xc8;return function(_0x7b1822){if(_0x7b1822){return _0x3aae4d['status'](_0x1fcbd7)[_0x9cad('0x26')](_0x7b1822);}};}function respondWithFilteredResult(_0x2f4f23,_0x5a06ff){return function(_0x5b670a){if(_0x5b670a){var _0x29c370=_0x5b670a[_0x9cad('0x27')],_0x3b52d1=_0x5a06ff[_0x9cad('0x28')],_0x4eda91=_0x5a06ff[_0x9cad('0x28')]+_0x5a06ff['limit'],_0x5dfb96;if(_0x4eda91>=_0x29c370){_0x4eda91=_0x29c370;_0x5dfb96=0xc8;}else{_0x5dfb96=0xce;}_0x2f4f23['status'](_0x5dfb96);return _0x2f4f23[_0x9cad('0x29')](_0x9cad('0x2a'),_0x3b52d1+'-'+_0x4eda91+'/'+_0x29c370)[_0x9cad('0x26')](_0x5b670a);}return null;};}function patchUpdates(_0x1e9e21){return function(_0x1eb274){try{jsonpatch[_0x9cad('0x2b')](_0x1eb274,_0x1e9e21,!![]);}catch(_0xe283eb){return BPromise[_0x9cad('0x2c')](_0xe283eb);}return _0x1eb274[_0x9cad('0x2d')]();};}function saveUpdates(_0x490f2b,_0x121bf0){return function(_0x2111fa){if(_0x2111fa){return _0x2111fa[_0x9cad('0x2e')](_0x490f2b)[_0x9cad('0x1a')](function(_0x4829c5){return _0x4829c5;});}return null;};}function removeEntity(_0x187196,_0x3b0709){return function(_0x3998d3){if(_0x3998d3){return _0x3998d3[_0x9cad('0x2f')]()[_0x9cad('0x1a')](function(){_0x187196[_0x9cad('0x30')](0xcc)[_0x9cad('0x25')]();});}};}function handleEntityNotFound(_0x261a4d,_0x301e7a){return function(_0x3b52ee){if(!_0x3b52ee){_0x261a4d['sendStatus'](0x194);}return _0x3b52ee;};}function handleError(_0x3b6173,_0x22cbda){_0x22cbda=_0x22cbda||0x1f4;return function(_0x35a8c7){logger[_0x9cad('0x1f')](_0x35a8c7[_0x9cad('0x31')]);if(_0x35a8c7[_0x9cad('0x32')]){delete _0x35a8c7['name'];}_0x3b6173['status'](_0x22cbda)[_0x9cad('0x33')](_0x35a8c7);};}exports[_0x9cad('0x34')]=function(_0x45cfcd,_0x531282){var _0x4284d4={},_0xc8fe44={},_0x16ec0b={'count':0x0,'rows':[]};var _0x202530=db[_0x9cad('0x35')][_0x9cad('0x36')];_0xc8fe44['model']=_[_0x9cad('0x37')](_0x202530);_0xc8fe44[_0x9cad('0x38')]=_[_0x9cad('0x37')](_0x45cfcd['query']);_0xc8fe44[_0x9cad('0x39')]=_[_0x9cad('0x3a')](_0xc8fe44[_0x9cad('0x3b')],_0xc8fe44[_0x9cad('0x38')]);_0x4284d4[_0x9cad('0x3c')]=_[_0x9cad('0x3a')](_0xc8fe44[_0x9cad('0x3b')],qs[_0x9cad('0x3d')](_0x45cfcd[_0x9cad('0x38')][_0x9cad('0x3d')]));_0x4284d4[_0x9cad('0x3c')]=_0x4284d4['attributes'][_0x9cad('0x3e')]?_0x4284d4[_0x9cad('0x3c')]:_0xc8fe44[_0x9cad('0x3b')];if(!_0x45cfcd[_0x9cad('0x38')][_0x9cad('0x3f')]('nolimit')){_0x4284d4[_0x9cad('0x40')]=qs[_0x9cad('0x40')](_0x45cfcd['query']['limit']);_0x4284d4['offset']=qs[_0x9cad('0x28')](_0x45cfcd['query'][_0x9cad('0x28')]);}_0x4284d4[_0x9cad('0x41')]=qs['sort'](_0x45cfcd[_0x9cad('0x38')][_0x9cad('0x42')]);_0x4284d4[_0x9cad('0x43')]=qs['filters'](_[_0x9cad('0x44')](_0x45cfcd[_0x9cad('0x38')],_0xc8fe44[_0x9cad('0x39')]));if(_0x45cfcd[_0x9cad('0x38')][_0x9cad('0x45')]){_0x4284d4[_0x9cad('0x43')]=_[_0x9cad('0x46')](_0x4284d4[_0x9cad('0x43')],{'$or':_['map'](_0x202530,function(_0x4fa41d){if(_0x4fa41d[_0x9cad('0x47')][_0x9cad('0x48')]!==_0x9cad('0x49')){var _0x403e28={};_0x403e28[_0x4fa41d['field']]={'$like':'%'+_0x45cfcd[_0x9cad('0x38')]['filter']+'%'};return _0x403e28;}})});}_0x4284d4=_['merge']({},_0x4284d4,_0x45cfcd[_0x9cad('0x4a')]);var _0x510edd={'where':_0x4284d4[_0x9cad('0x43')]};return db[_0x9cad('0x35')]['count'](_0x510edd)[_0x9cad('0x1a')](function(_0x79385e){_0x16ec0b[_0x9cad('0x27')]=_0x79385e;if(_0x45cfcd['query'][_0x9cad('0x4b')]){_0x4284d4[_0x9cad('0x4c')]=[{'all':!![]}];}return db[_0x9cad('0x35')][_0x9cad('0x4d')](_0x4284d4);})['then'](function(_0x57e7ba){_0x16ec0b[_0x9cad('0x4e')]=_0x57e7ba;return _0x16ec0b;})[_0x9cad('0x1a')](respondWithFilteredResult(_0x531282,_0x4284d4))[_0x9cad('0x23')](handleError(_0x531282,null));};exports[_0x9cad('0x4f')]=function(_0x1818a9,_0x1f0416){var _0x33914a={'raw':![],'where':{'id':_0x1818a9[_0x9cad('0x50')]['id']}},_0x42429d={};_0x42429d[_0x9cad('0x3b')]=_[_0x9cad('0x37')](db[_0x9cad('0x35')][_0x9cad('0x36')]);_0x42429d[_0x9cad('0x38')]=_[_0x9cad('0x37')](_0x1818a9['query']);_0x42429d[_0x9cad('0x39')]=_[_0x9cad('0x3a')](_0x42429d[_0x9cad('0x3b')],_0x42429d[_0x9cad('0x38')]);_0x33914a[_0x9cad('0x3c')]=_[_0x9cad('0x3a')](_0x42429d[_0x9cad('0x3b')],qs['fields'](_0x1818a9[_0x9cad('0x38')][_0x9cad('0x3d')]));_0x33914a[_0x9cad('0x3c')]=_0x33914a['attributes'][_0x9cad('0x3e')]?_0x33914a[_0x9cad('0x3c')]:_0x42429d[_0x9cad('0x3b')];if(_0x1818a9[_0x9cad('0x38')][_0x9cad('0x4b')]){_0x33914a[_0x9cad('0x4c')]=[{'all':!![]}];}_0x33914a=_['merge']({},_0x33914a,_0x1818a9[_0x9cad('0x4a')]);return db['SugarcrmConfiguration']['find'](_0x33914a)[_0x9cad('0x1a')](handleEntityNotFound(_0x1f0416,null))['then'](respondWithResult(_0x1f0416,null))[_0x9cad('0x23')](handleError(_0x1f0416,null));};exports['create']=function(_0x39c181,_0x22a363){return db[_0x9cad('0x35')][_0x9cad('0x51')](_0x39c181[_0x9cad('0x52')],{})[_0x9cad('0x1a')](respondWithResult(_0x22a363,0xc9))[_0x9cad('0x23')](handleError(_0x22a363,null));};exports[_0x9cad('0x2e')]=function(_0x3e44bd,_0x4b825b){if(_0x3e44bd[_0x9cad('0x52')]['id']){delete _0x3e44bd[_0x9cad('0x52')]['id'];}return db['SugarcrmConfiguration'][_0x9cad('0x53')]({'where':{'id':_0x3e44bd[_0x9cad('0x50')]['id']}})[_0x9cad('0x1a')](handleEntityNotFound(_0x4b825b,null))[_0x9cad('0x1a')](saveUpdates(_0x3e44bd[_0x9cad('0x52')],null))['then'](respondWithResult(_0x4b825b,null))[_0x9cad('0x23')](handleError(_0x4b825b,null));};exports['destroy']=function(_0x59f745,_0xd08bc2){return db['SugarcrmConfiguration'][_0x9cad('0x53')]({'where':{'id':_0x59f745[_0x9cad('0x50')]['id']}})[_0x9cad('0x1a')](handleEntityNotFound(_0xd08bc2,null))['then'](removeEntity(_0xd08bc2,null))['catch'](handleError(_0xd08bc2,null));};exports[_0x9cad('0x54')]=function(_0x184853,_0x1d1b28,_0x287ea3){var _0x431b55={};var _0x1abc98={};var _0x56ee2d;var _0x3b4df9;return db['SugarcrmConfiguration']['findOne']({'where':{'id':_0x184853[_0x9cad('0x50')]['id']}})[_0x9cad('0x1a')](handleEntityNotFound(_0x1d1b28,null))[_0x9cad('0x1a')](function(_0x3da4d1){if(_0x3da4d1){_0x56ee2d=_0x3da4d1;_0x1abc98[_0x9cad('0x3b')]=_[_0x9cad('0x37')](db[_0x9cad('0x55')][_0x9cad('0x36')]);_0x1abc98['query']=_[_0x9cad('0x37')](_0x184853[_0x9cad('0x38')]);_0x1abc98[_0x9cad('0x39')]=_[_0x9cad('0x3a')](_0x1abc98[_0x9cad('0x3b')],_0x1abc98[_0x9cad('0x38')]);_0x431b55[_0x9cad('0x3c')]=_[_0x9cad('0x3a')](_0x1abc98[_0x9cad('0x3b')],qs[_0x9cad('0x3d')](_0x184853['query'][_0x9cad('0x3d')]));_0x431b55[_0x9cad('0x3c')]=_0x431b55[_0x9cad('0x3c')]['length']?_0x431b55[_0x9cad('0x3c')]:_0x1abc98[_0x9cad('0x3b')];_0x431b55[_0x9cad('0x41')]=qs[_0x9cad('0x42')](_0x184853[_0x9cad('0x38')][_0x9cad('0x42')]);_0x431b55['where']=qs[_0x9cad('0x39')](_[_0x9cad('0x44')](_0x184853[_0x9cad('0x38')],_0x1abc98[_0x9cad('0x39')]));if(_0x184853[_0x9cad('0x38')][_0x9cad('0x45')]){_0x431b55[_0x9cad('0x43')]=_[_0x9cad('0x46')](_0x431b55['where'],{'$or':_['map'](_0x431b55[_0x9cad('0x3c')],function(_0x19100a){var _0x2795ad={};_0x2795ad[_0x19100a]={'$like':'%'+_0x184853[_0x9cad('0x38')][_0x9cad('0x45')]+'%'};return _0x2795ad;})});}_0x431b55=_[_0x9cad('0x46')]({},_0x431b55,_0x184853[_0x9cad('0x4a')]);return _0x56ee2d[_0x9cad('0x54')](_0x431b55);}})[_0x9cad('0x1a')](function(_0x12b717){if(_0x12b717){_0x3b4df9=_0x12b717['length'];if(!_0x184853[_0x9cad('0x38')]['hasOwnProperty'](_0x9cad('0x56'))){_0x431b55[_0x9cad('0x40')]=qs['limit'](_0x184853[_0x9cad('0x38')][_0x9cad('0x40')]);_0x431b55[_0x9cad('0x28')]=qs[_0x9cad('0x28')](_0x184853[_0x9cad('0x38')]['offset']);}return _0x56ee2d[_0x9cad('0x54')](_0x431b55);}})[_0x9cad('0x1a')](function(_0x32217e){if(_0x32217e){return _0x32217e?{'count':_0x3b4df9,'rows':_0x32217e}:null;}})[_0x9cad('0x1a')](respondWithResult(_0x1d1b28,null))[_0x9cad('0x23')](handleError(_0x1d1b28,null));};exports[_0x9cad('0x57')]=function(_0x4d26d7,_0x5f475c,_0x19adc3){var _0x3bb1e2={};var _0x10502c={};var _0x21a7c7;var _0x4dffe6;return db[_0x9cad('0x35')][_0x9cad('0x58')]({'where':{'id':_0x4d26d7['params']['id']}})[_0x9cad('0x1a')](handleEntityNotFound(_0x5f475c,null))['then'](function(_0x4abec8){if(_0x4abec8){_0x21a7c7=_0x4abec8;_0x10502c[_0x9cad('0x3b')]=_[_0x9cad('0x37')](db[_0x9cad('0x55')]['rawAttributes']);_0x10502c[_0x9cad('0x38')]=_['keys'](_0x4d26d7[_0x9cad('0x38')]);_0x10502c[_0x9cad('0x39')]=_[_0x9cad('0x3a')](_0x10502c['model'],_0x10502c[_0x9cad('0x38')]);_0x3bb1e2[_0x9cad('0x3c')]=_[_0x9cad('0x3a')](_0x10502c[_0x9cad('0x3b')],qs[_0x9cad('0x3d')](_0x4d26d7[_0x9cad('0x38')][_0x9cad('0x3d')]));_0x3bb1e2[_0x9cad('0x3c')]=_0x3bb1e2[_0x9cad('0x3c')][_0x9cad('0x3e')]?_0x3bb1e2['attributes']:_0x10502c[_0x9cad('0x3b')];_0x3bb1e2[_0x9cad('0x41')]=qs[_0x9cad('0x42')](_0x4d26d7[_0x9cad('0x38')][_0x9cad('0x42')]);_0x3bb1e2[_0x9cad('0x43')]=qs[_0x9cad('0x39')](_[_0x9cad('0x44')](_0x4d26d7['query'],_0x10502c[_0x9cad('0x39')]));if(_0x4d26d7[_0x9cad('0x38')][_0x9cad('0x45')]){_0x3bb1e2['where']=_[_0x9cad('0x46')](_0x3bb1e2[_0x9cad('0x43')],{'$or':_[_0x9cad('0x59')](_0x3bb1e2[_0x9cad('0x3c')],function(_0x257471){var _0x51b1a2={};_0x51b1a2[_0x257471]={'$like':'%'+_0x4d26d7[_0x9cad('0x38')][_0x9cad('0x45')]+'%'};return _0x51b1a2;})});}_0x3bb1e2=_[_0x9cad('0x46')]({},_0x3bb1e2,_0x4d26d7[_0x9cad('0x4a')]);return _0x21a7c7[_0x9cad('0x57')](_0x3bb1e2);}})[_0x9cad('0x1a')](function(_0x6e9c61){if(_0x6e9c61){_0x4dffe6=_0x6e9c61[_0x9cad('0x3e')];if(!_0x4d26d7[_0x9cad('0x38')][_0x9cad('0x3f')](_0x9cad('0x56'))){_0x3bb1e2[_0x9cad('0x40')]=qs[_0x9cad('0x40')](_0x4d26d7[_0x9cad('0x38')][_0x9cad('0x40')]);_0x3bb1e2[_0x9cad('0x28')]=qs[_0x9cad('0x28')](_0x4d26d7['query'][_0x9cad('0x28')]);}return _0x21a7c7[_0x9cad('0x57')](_0x3bb1e2);}})[_0x9cad('0x1a')](function(_0x305afd){if(_0x305afd){return _0x305afd?{'count':_0x4dffe6,'rows':_0x305afd}:null;}})['then'](respondWithResult(_0x5f475c,null))[_0x9cad('0x23')](handleError(_0x5f475c,null));};exports[_0x9cad('0x5a')]=function(_0x21c53d,_0x294db6,_0x569537){var _0x2df604={};var _0x506189={};var _0xc05a82;var _0x4b3007;return db[_0x9cad('0x35')]['findOne']({'where':{'id':_0x21c53d['params']['id']}})[_0x9cad('0x1a')](handleEntityNotFound(_0x294db6,null))[_0x9cad('0x1a')](function(_0x4d693c){if(_0x4d693c){_0xc05a82=_0x4d693c;_0x506189[_0x9cad('0x3b')]=_[_0x9cad('0x37')](db[_0x9cad('0x55')][_0x9cad('0x36')]);_0x506189[_0x9cad('0x38')]=_[_0x9cad('0x37')](_0x21c53d[_0x9cad('0x38')]);_0x506189[_0x9cad('0x39')]=_['intersection'](_0x506189['model'],_0x506189['query']);_0x2df604['attributes']=_[_0x9cad('0x3a')](_0x506189[_0x9cad('0x3b')],qs[_0x9cad('0x3d')](_0x21c53d[_0x9cad('0x38')][_0x9cad('0x3d')]));_0x2df604[_0x9cad('0x3c')]=_0x2df604['attributes'][_0x9cad('0x3e')]?_0x2df604['attributes']:_0x506189[_0x9cad('0x3b')];_0x2df604['order']=qs[_0x9cad('0x42')](_0x21c53d[_0x9cad('0x38')][_0x9cad('0x42')]);_0x2df604['where']=qs[_0x9cad('0x39')](_[_0x9cad('0x44')](_0x21c53d[_0x9cad('0x38')],_0x506189[_0x9cad('0x39')]));if(_0x21c53d['query'][_0x9cad('0x45')]){_0x2df604[_0x9cad('0x43')]=_['merge'](_0x2df604[_0x9cad('0x43')],{'$or':_[_0x9cad('0x59')](_0x2df604['attributes'],function(_0x1e8a53){var _0x4ee783={};_0x4ee783[_0x1e8a53]={'$like':'%'+_0x21c53d[_0x9cad('0x38')]['filter']+'%'};return _0x4ee783;})});}_0x2df604=_[_0x9cad('0x46')]({},_0x2df604,_0x21c53d['options']);return _0xc05a82[_0x9cad('0x5a')](_0x2df604);}})[_0x9cad('0x1a')](function(_0x273ea4){if(_0x273ea4){_0x4b3007=_0x273ea4[_0x9cad('0x3e')];if(!_0x21c53d[_0x9cad('0x38')][_0x9cad('0x3f')]('nolimit')){_0x2df604[_0x9cad('0x40')]=qs[_0x9cad('0x40')](_0x21c53d['query'][_0x9cad('0x40')]);_0x2df604[_0x9cad('0x28')]=qs[_0x9cad('0x28')](_0x21c53d[_0x9cad('0x38')]['offset']);}return _0xc05a82['getDescriptions'](_0x2df604);}})[_0x9cad('0x1a')](function(_0x56cadb){if(_0x56cadb){return _0x56cadb?{'count':_0x4b3007,'rows':_0x56cadb}:null;}})[_0x9cad('0x1a')](respondWithResult(_0x294db6,null))[_0x9cad('0x23')](handleError(_0x294db6,null));};
\ No newline at end of file
index 4f2e001..0fccf7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3eae=['define','SugarcrmConfiguration','int_sugarcrm_configurations','lodash','util','../../config/logger','api','bluebird','request-promise'];(function(_0x42b072,_0xbb8f2e){var _0x2d0954=function(_0x9bf006){while(--_0x9bf006){_0x42b072['push'](_0x42b072['shift']());}};_0x2d0954(++_0xbb8f2e);}(_0x3eae,0x162));var _0xe3ea=function(_0x186376,_0x5d988a){_0x186376=_0x186376-0x0;var _0x2dbdd9=_0x3eae[_0x186376];return _0x2dbdd9;};'use strict';var _=require(_0xe3ea('0x0'));var util=require(_0xe3ea('0x1'));var logger=require(_0xe3ea('0x2'))(_0xe3ea('0x3'));var moment=require('moment');var BPromise=require(_0xe3ea('0x4'));var rp=require(_0xe3ea('0x5'));var attributes=require('./intSugarcrmConfiguration.attributes');module['exports']=function(_0x494639,_0x5833ab){return _0x494639[_0xe3ea('0x6')](_0xe3ea('0x7'),attributes,{'tableName':_0xe3ea('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xba6f=['SugarcrmConfiguration','int_sugarcrm_configurations','lodash','../../config/logger','api','moment','bluebird','request-promise','./intSugarcrmConfiguration.attributes','exports','define'];(function(_0x487d0a,_0x1b7cb4){var _0x3d740c=function(_0xa714f2){while(--_0xa714f2){_0x487d0a['push'](_0x487d0a['shift']());}};_0x3d740c(++_0x1b7cb4);}(_0xba6f,0x1d0));var _0xfba6=function(_0x57fb32,_0x48b5a9){_0x57fb32=_0x57fb32-0x0;var _0x2a7cf7=_0xba6f[_0x57fb32];return _0x2a7cf7;};'use strict';var _=require(_0xfba6('0x0'));var util=require('util');var logger=require(_0xfba6('0x1'))(_0xfba6('0x2'));var moment=require(_0xfba6('0x3'));var BPromise=require(_0xfba6('0x4'));var rp=require(_0xfba6('0x5'));var attributes=require(_0xfba6('0x6'));module[_0xfba6('0x7')]=function(_0x3d2803,_0x1bbeb5){return _0x3d2803[_0xfba6('0x8')](_0xfba6('0x9'),attributes,{'tableName':_0xfba6('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4989eb2..5dd6fc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x56e0=['../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','http','request','then','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','debug','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','lodash','util','bluebird','randomstring'];(function(_0x28d83b,_0x3f5e68){var _0x2d986e=function(_0x32b356){while(--_0x32b356){_0x28d83b['push'](_0x28d83b['shift']());}};_0x2d986e(++_0x3f5e68);}(_0x56e0,0xc2));var _0x056e=function(_0x61fc4,_0x14f7eb){_0x61fc4=_0x61fc4-0x0;var _0x145172=_0x56e0[_0x61fc4];return _0x145172;};'use strict';var _=require(_0x056e('0x0'));var util=require(_0x056e('0x1'));var moment=require('moment');var BPromise=require(_0x056e('0x2'));var rs=require(_0x056e('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x056e('0x4'))['db'];var utils=require(_0x056e('0x5'));var logger=require(_0x056e('0x6'))(_0x056e('0x7'));var config=require('../../config/environment');var jayson=require(_0x056e('0x8'));var client=jayson['client'][_0x056e('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x203434,_0x328d45,_0x418ff8){return new BPromise(function(_0xee89c7,_0x267a11){return client[_0x056e('0xa')](_0x203434,_0x418ff8)[_0x056e('0xb')](function(_0x497f4d){logger['info'](_0x056e('0xc'),_0x328d45,_0x056e('0xd'));logger[_0x056e('0xe')](_0x056e('0xf'),_0x328d45,_0x056e('0xd'),JSON[_0x056e('0x10')](_0x497f4d));if(_0x497f4d[_0x056e('0x11')]){if(_0x497f4d['error'][_0x056e('0x12')]===0x1f4){logger[_0x056e('0x11')](_0x056e('0xc'),_0x328d45,_0x497f4d[_0x056e('0x11')][_0x056e('0x13')]);return _0x267a11(_0x497f4d[_0x056e('0x11')][_0x056e('0x13')]);}logger[_0x056e('0x11')](_0x056e('0xc'),_0x328d45,_0x497f4d[_0x056e('0x11')]['message']);return _0xee89c7(_0x497f4d[_0x056e('0x11')][_0x056e('0x13')]);}else{logger[_0x056e('0x14')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x328d45,_0x056e('0xd'));_0xee89c7(_0x497f4d[_0x056e('0x15')][_0x056e('0x13')]);}})['catch'](function(_0x284f45){logger[_0x056e('0x11')](_0x056e('0xc'),_0x328d45,_0x284f45);_0x267a11(_0x284f45);});});}
\ No newline at end of file
+var _0xd8e3=['result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','jayson/promise','http','request','then','info','SugarcrmConfiguration,\x20%s,\x20%s','request\x20sent','SugarcrmConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message'];(function(_0x2be8c2,_0x14a4b5){var _0x97f531=function(_0xcee58d){while(--_0xcee58d){_0x2be8c2['push'](_0x2be8c2['shift']());}};_0x97f531(++_0x14a4b5);}(_0xd8e3,0x1a6));var _0x3d8e=function(_0x537077,_0x22b8f4){_0x537077=_0x537077-0x0;var _0x1114a5=_0xd8e3[_0x537077];return _0x1114a5;};'use strict';var _=require(_0x3d8e('0x0'));var util=require(_0x3d8e('0x1'));var moment=require(_0x3d8e('0x2'));var BPromise=require(_0x3d8e('0x3'));var rs=require(_0x3d8e('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x3d8e('0x5'))['db'];var utils=require(_0x3d8e('0x6'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0x3d8e('0x7'));var client=jayson['client'][_0x3d8e('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x12be8a,_0x83951d,_0xce2c5f){return new BPromise(function(_0x5acaaa,_0x163438){return client[_0x3d8e('0x9')](_0x12be8a,_0xce2c5f)[_0x3d8e('0xa')](function(_0x4097b2){logger[_0x3d8e('0xb')](_0x3d8e('0xc'),_0x83951d,_0x3d8e('0xd'));logger['debug'](_0x3d8e('0xe'),_0x83951d,'request\x20sent',JSON[_0x3d8e('0xf')](_0x4097b2));if(_0x4097b2[_0x3d8e('0x10')]){if(_0x4097b2[_0x3d8e('0x10')][_0x3d8e('0x11')]===0x1f4){logger['error']('SugarcrmConfiguration,\x20%s,\x20%s',_0x83951d,_0x4097b2['error']['message']);return _0x163438(_0x4097b2[_0x3d8e('0x10')]['message']);}logger[_0x3d8e('0x10')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x83951d,_0x4097b2['error'][_0x3d8e('0x12')]);return _0x5acaaa(_0x4097b2[_0x3d8e('0x10')][_0x3d8e('0x12')]);}else{logger[_0x3d8e('0xb')]('SugarcrmConfiguration,\x20%s,\x20%s',_0x83951d,_0x3d8e('0xd'));_0x5acaaa(_0x4097b2[_0x3d8e('0x13')]['message']);}})[_0x3d8e('0x14')](function(_0x1874de){logger[_0x3d8e('0x10')](_0x3d8e('0xc'),_0x83951d,_0x1874de);_0x163438(_0x1874de);});});}
\ No newline at end of file
index e16be28..7edf5ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7189=['/:id','show','create','put','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','./intSugarcrmField.controller','get','isAuthenticated'];(function(_0x45fc6a,_0x166adb){var _0x14bcfd=function(_0x3ba718){while(--_0x3ba718){_0x45fc6a['push'](_0x45fc6a['shift']());}};_0x14bcfd(++_0x166adb);}(_0x7189,0x7e));var _0x9718=function(_0x2a275e,_0x5aa79b){_0x2a275e=_0x2a275e-0x0;var _0x2287fe=_0x7189[_0x2a275e];return _0x2287fe;};'use strict';var multer=require(_0x9718('0x0'));var util=require(_0x9718('0x1'));var path=require(_0x9718('0x2'));var timeout=require(_0x9718('0x3'));var express=require(_0x9718('0x4'));var router=express[_0x9718('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x9718('0x6'));var config=require('../../config/environment');var controller=require(_0x9718('0x7'));router[_0x9718('0x8')]('/',auth[_0x9718('0x9')](),controller['index']);router['get'](_0x9718('0xa'),auth[_0x9718('0x9')](),controller[_0x9718('0xb')]);router['post']('/',auth['isAuthenticated'](),controller[_0x9718('0xc')]);router[_0x9718('0xd')]('/:id',auth[_0x9718('0x9')](),controller['update']);router[_0x9718('0xe')](_0x9718('0xa'),auth[_0x9718('0x9')](),controller[_0x9718('0xf')]);module[_0x9718('0x10')]=router;
\ No newline at end of file
+var _0x042c=['index','/:id','post','create','update','delete','destroy','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated'];(function(_0x2bf4f7,_0x24ce88){var _0xa85651=function(_0xb640f6){while(--_0xb640f6){_0x2bf4f7['push'](_0x2bf4f7['shift']());}};_0xa85651(++_0x24ce88);}(_0x042c,0x107));var _0xc042=function(_0x4ac480,_0x34ee62){_0x4ac480=_0x4ac480-0x0;var _0x48e669=_0x042c[_0x4ac480];return _0x48e669;};'use strict';var multer=require(_0xc042('0x0'));var util=require('util');var path=require(_0xc042('0x1'));var timeout=require(_0xc042('0x2'));var express=require('express');var router=express[_0xc042('0x3')]();var auth=require(_0xc042('0x4'));var interaction=require(_0xc042('0x5'));var config=require(_0xc042('0x6'));var controller=require('./intSugarcrmField.controller');router[_0xc042('0x7')]('/',auth[_0xc042('0x8')](),controller[_0xc042('0x9')]);router[_0xc042('0x7')](_0xc042('0xa'),auth[_0xc042('0x8')](),controller['show']);router[_0xc042('0xb')]('/',auth[_0xc042('0x8')](),controller[_0xc042('0xc')]);router['put'](_0xc042('0xa'),auth[_0xc042('0x8')](),controller[_0xc042('0xd')]);router[_0xc042('0xe')]('/:id',auth[_0xc042('0x8')](),controller[_0xc042('0xf')]);module[_0xc042('0x10')]=router;
\ No newline at end of file
index 8e37fcd..75eb693 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1339=['keyValue','STRING','BOOLEAN','ENUM','string','variable','customVariable'];(function(_0x580524,_0x438113){var _0x5872ba=function(_0x360aa0){while(--_0x360aa0){_0x580524['push'](_0x580524['shift']());}};_0x5872ba(++_0x438113);}(_0x1339,0x1ed));var _0x9133=function(_0x443538,_0x34ba83){_0x443538=_0x443538-0x0;var _0x41bd20=_0x1339[_0x443538];return _0x41bd20;};'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
+var _0xb58b=['BOOLEAN','exports','ENUM','string','customVariable','keyValue','STRING','variable'];(function(_0x57d160,_0x381043){var _0x30c242=function(_0x48ed8d){while(--_0x48ed8d){_0x57d160['push'](_0x57d160['shift']());}};_0x30c242(++_0x381043);}(_0xb58b,0x1f1));var _0xbb58=function(_0x20f8b9,_0x180233){_0x20f8b9=_0x20f8b9-0x0;var _0x40c63e=_0xb58b[_0x20f8b9];return _0x40c63e;};'use strict';var Sequelize=require('sequelize');module[_0xbb58('0x0')]={'type':{'type':Sequelize[_0xbb58('0x1')](_0xbb58('0x2'),'variable',_0xbb58('0x3'),_0xbb58('0x4')),'defaultValue':'string'},'content':{'type':Sequelize[_0xbb58('0x5')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0xbb58('0x1')](_0xbb58('0x2'),_0xbb58('0x6'),'customVariable')},'keyContent':{'type':Sequelize[_0xbb58('0x5')]},'idField':{'type':Sequelize[_0xbb58('0x5')]},'nameField':{'type':Sequelize[_0xbb58('0x5')]},'customField':{'type':Sequelize[_0xbb58('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xbb58('0x5')]}};
\ No newline at end of file
index 993e9b4..7d2f492 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf86e=['intersection','attributes','hasOwnProperty','nolimit','offset','order','sort','where','filters','map','type','field','filter','merge','SugarcrmField','count','includeAll','include','findAll','rows','catch','show','fields','length','options','find','create','body','params','destroy','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','util','path','sox','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','limit','set','Content-Range','apply','reject','save','update','then','error','stack','name','index','rawAttributes','model','keys','query'];(function(_0xe72729,_0x503951){var _0x3f679b=function(_0x58939f){while(--_0x58939f){_0xe72729['push'](_0xe72729['shift']());}};_0x3f679b(++_0x503951);}(_0xf86e,0x186));var _0xef86=function(_0x40ac5e,_0x2de228){_0x40ac5e=_0x40ac5e-0x0;var _0x2839d6=_0xf86e[_0x40ac5e];return _0x2839d6;};'use strict';var pdf=require(_0xef86('0x0'));var emlformat=require(_0xef86('0x1'));var rimraf=require(_0xef86('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xef86('0x3'));var rp=require(_0xef86('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0xef86('0x5'));var path=require(_0xef86('0x6'));var sox=require(_0xef86('0x7'));var csv=require('to-csv');var ejs=require(_0xef86('0x8'));var fs=require('fs');var _=require(_0xef86('0x9'));var squel=require(_0xef86('0xa'));var crypto=require('crypto');var jsforce=require(_0xef86('0xb'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xef86('0xc'));var Papa=require(_0xef86('0xd'));var authService=require(_0xef86('0xe'));var hardwareService=require(_0xef86('0xf'));var Redis=require(_0xef86('0x10'));var qs=require(_0xef86('0x11'));var logger=require(_0xef86('0x12'))('api');var utils=require(_0xef86('0x13'));var config=require(_0xef86('0x14'));var db=require(_0xef86('0x15'))['db'];function respondWithStatusCode(_0x4cdce5,_0x1aa316){_0x1aa316=_0x1aa316||0xcc;return function(_0x149243){if(_0x149243){return _0x4cdce5[_0xef86('0x16')](_0x1aa316);}return _0x4cdce5[_0xef86('0x17')](_0x1aa316)[_0xef86('0x18')]();};}function respondWithResult(_0x31cf5f,_0x2a48dd){_0x2a48dd=_0x2a48dd||0xc8;return function(_0x596d44){if(_0x596d44){return _0x31cf5f['status'](_0x2a48dd)[_0xef86('0x19')](_0x596d44);}};}function respondWithFilteredResult(_0x5b0130,_0x513052){return function(_0x5d590c){if(_0x5d590c){var _0x23469d=_0x5d590c['count'],_0x5e8fdd=_0x513052['offset'],_0x4e2415=_0x513052['offset']+_0x513052[_0xef86('0x1a')],_0x33c18f;if(_0x4e2415>=_0x23469d){_0x4e2415=_0x23469d;_0x33c18f=0xc8;}else{_0x33c18f=0xce;}_0x5b0130[_0xef86('0x17')](_0x33c18f);return _0x5b0130[_0xef86('0x1b')](_0xef86('0x1c'),_0x5e8fdd+'-'+_0x4e2415+'/'+_0x23469d)[_0xef86('0x19')](_0x5d590c);}return null;};}function patchUpdates(_0x5d34fe){return function(_0x18f063){try{jsonpatch[_0xef86('0x1d')](_0x18f063,_0x5d34fe,!![]);}catch(_0x1f42e3){return BPromise[_0xef86('0x1e')](_0x1f42e3);}return _0x18f063[_0xef86('0x1f')]();};}function saveUpdates(_0x10d6c5,_0x3b773f){return function(_0x29f4bd){if(_0x29f4bd){return _0x29f4bd[_0xef86('0x20')](_0x10d6c5)[_0xef86('0x21')](function(_0x39b193){return _0x39b193;});}return null;};}function removeEntity(_0x1904df,_0x45cca1){return function(_0x43a5e6){if(_0x43a5e6){return _0x43a5e6['destroy']()['then'](function(){_0x1904df[_0xef86('0x17')](0xcc)[_0xef86('0x18')]();});}};}function handleEntityNotFound(_0x263a90,_0x50125){return function(_0x23f9bd){if(!_0x23f9bd){_0x263a90[_0xef86('0x16')](0x194);}return _0x23f9bd;};}function handleError(_0x436782,_0x15980c){_0x15980c=_0x15980c||0x1f4;return function(_0x5e7d6f){logger[_0xef86('0x22')](_0x5e7d6f[_0xef86('0x23')]);if(_0x5e7d6f[_0xef86('0x24')]){delete _0x5e7d6f[_0xef86('0x24')];}_0x436782[_0xef86('0x17')](_0x15980c)['send'](_0x5e7d6f);};}exports[_0xef86('0x25')]=function(_0x5c92f7,_0x498a2b){var _0x2492d2={},_0x4ce883={},_0x14d889={'count':0x0,'rows':[]};var _0x1dc3af=db['SugarcrmField'][_0xef86('0x26')];_0x4ce883[_0xef86('0x27')]=_[_0xef86('0x28')](_0x1dc3af);_0x4ce883[_0xef86('0x29')]=_[_0xef86('0x28')](_0x5c92f7[_0xef86('0x29')]);_0x4ce883['filters']=_[_0xef86('0x2a')](_0x4ce883[_0xef86('0x27')],_0x4ce883[_0xef86('0x29')]);_0x2492d2[_0xef86('0x2b')]=_[_0xef86('0x2a')](_0x4ce883[_0xef86('0x27')],qs['fields'](_0x5c92f7[_0xef86('0x29')]['fields']));_0x2492d2[_0xef86('0x2b')]=_0x2492d2[_0xef86('0x2b')]['length']?_0x2492d2[_0xef86('0x2b')]:_0x4ce883[_0xef86('0x27')];if(!_0x5c92f7['query'][_0xef86('0x2c')](_0xef86('0x2d'))){_0x2492d2[_0xef86('0x1a')]=qs[_0xef86('0x1a')](_0x5c92f7[_0xef86('0x29')][_0xef86('0x1a')]);_0x2492d2['offset']=qs[_0xef86('0x2e')](_0x5c92f7[_0xef86('0x29')][_0xef86('0x2e')]);}_0x2492d2[_0xef86('0x2f')]=qs[_0xef86('0x30')](_0x5c92f7[_0xef86('0x29')][_0xef86('0x30')]);_0x2492d2[_0xef86('0x31')]=qs[_0xef86('0x32')](_['pick'](_0x5c92f7['query'],_0x4ce883['filters']));if(_0x5c92f7[_0xef86('0x29')]['filter']){_0x2492d2['where']=_['merge'](_0x2492d2[_0xef86('0x31')],{'$or':_[_0xef86('0x33')](_0x1dc3af,function(_0x23bea5){if(_0x23bea5[_0xef86('0x34')]['key']!=='VIRTUAL'){var _0x17fad5={};_0x17fad5[_0x23bea5[_0xef86('0x35')]]={'$like':'%'+_0x5c92f7[_0xef86('0x29')][_0xef86('0x36')]+'%'};return _0x17fad5;}})});}_0x2492d2=_[_0xef86('0x37')]({},_0x2492d2,_0x5c92f7['options']);var _0xb7b8ce={'where':_0x2492d2['where']};return db[_0xef86('0x38')][_0xef86('0x39')](_0xb7b8ce)[_0xef86('0x21')](function(_0x52977e){_0x14d889[_0xef86('0x39')]=_0x52977e;if(_0x5c92f7['query'][_0xef86('0x3a')]){_0x2492d2[_0xef86('0x3b')]=[{'all':!![]}];}return db[_0xef86('0x38')][_0xef86('0x3c')](_0x2492d2);})['then'](function(_0x5ddde1){_0x14d889[_0xef86('0x3d')]=_0x5ddde1;return _0x14d889;})[_0xef86('0x21')](respondWithFilteredResult(_0x498a2b,_0x2492d2))[_0xef86('0x3e')](handleError(_0x498a2b,null));};exports[_0xef86('0x3f')]=function(_0x5009e7,_0x587cf7){var _0x11ed0a={'raw':!![],'where':{'id':_0x5009e7['params']['id']}},_0x23ea1a={};_0x23ea1a['model']=_[_0xef86('0x28')](db['SugarcrmField'][_0xef86('0x26')]);_0x23ea1a[_0xef86('0x29')]=_[_0xef86('0x28')](_0x5009e7['query']);_0x23ea1a[_0xef86('0x32')]=_['intersection'](_0x23ea1a[_0xef86('0x27')],_0x23ea1a[_0xef86('0x29')]);_0x11ed0a[_0xef86('0x2b')]=_['intersection'](_0x23ea1a[_0xef86('0x27')],qs[_0xef86('0x40')](_0x5009e7[_0xef86('0x29')][_0xef86('0x40')]));_0x11ed0a[_0xef86('0x2b')]=_0x11ed0a[_0xef86('0x2b')][_0xef86('0x41')]?_0x11ed0a[_0xef86('0x2b')]:_0x23ea1a[_0xef86('0x27')];if(_0x5009e7['query']['includeAll']){_0x11ed0a[_0xef86('0x3b')]=[{'all':!![]}];}_0x11ed0a=_['merge']({},_0x11ed0a,_0x5009e7[_0xef86('0x42')]);return db[_0xef86('0x38')][_0xef86('0x43')](_0x11ed0a)[_0xef86('0x21')](handleEntityNotFound(_0x587cf7,null))[_0xef86('0x21')](respondWithResult(_0x587cf7,null))['catch'](handleError(_0x587cf7,null));};exports[_0xef86('0x44')]=function(_0x2d8f5b,_0x8028f0){return db[_0xef86('0x38')][_0xef86('0x44')](_0x2d8f5b[_0xef86('0x45')],{})[_0xef86('0x21')](respondWithResult(_0x8028f0,0xc9))[_0xef86('0x3e')](handleError(_0x8028f0,null));};exports[_0xef86('0x20')]=function(_0x583ad6,_0x38eee2){if(_0x583ad6[_0xef86('0x45')]['id']){delete _0x583ad6[_0xef86('0x45')]['id'];}return db[_0xef86('0x38')]['find']({'where':{'id':_0x583ad6[_0xef86('0x46')]['id']}})[_0xef86('0x21')](handleEntityNotFound(_0x38eee2,null))[_0xef86('0x21')](saveUpdates(_0x583ad6[_0xef86('0x45')],null))['then'](respondWithResult(_0x38eee2,null))[_0xef86('0x3e')](handleError(_0x38eee2,null));};exports[_0xef86('0x47')]=function(_0x39c835,_0x19d904){return db['SugarcrmField'][_0xef86('0x43')]({'where':{'id':_0x39c835[_0xef86('0x46')]['id']}})[_0xef86('0x21')](handleEntityNotFound(_0x19d904,null))[_0xef86('0x21')](removeEntity(_0x19d904,null))[_0xef86('0x3e')](handleError(_0x19d904,null));};
\ No newline at end of file
+var _0x30b1=['mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','then','name','send','index','SugarcrmField','rawAttributes','model','query','keys','intersection','fields','attributes','hasOwnProperty','order','sort','where','filters','merge','map','VIRTUAL','options','includeAll','include','findAll','rows','catch','show','params','length','find','create','body','destroy','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird'];(function(_0x56ce17,_0x166182){var _0x52f308=function(_0x2a5d3e){while(--_0x2a5d3e){_0x56ce17['push'](_0x56ce17['shift']());}};_0x52f308(++_0x166182);}(_0x30b1,0x86));var _0x130b=function(_0x3eaf2e,_0x126079){_0x3eaf2e=_0x3eaf2e-0x0;var _0x691432=_0x30b1[_0x3eaf2e];return _0x691432;};'use strict';var pdf=require(_0x130b('0x0'));var emlformat=require(_0x130b('0x1'));var rimraf=require(_0x130b('0x2'));var zipdir=require(_0x130b('0x3'));var jsonpatch=require(_0x130b('0x4'));var rp=require(_0x130b('0x5'));var moment=require(_0x130b('0x6'));var BPromise=require(_0x130b('0x7'));var Mustache=require(_0x130b('0x8'));var util=require(_0x130b('0x9'));var path=require(_0x130b('0xa'));var sox=require(_0x130b('0xb'));var csv=require('to-csv');var ejs=require(_0x130b('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x130b('0xd'));var crypto=require(_0x130b('0xe'));var jsforce=require(_0x130b('0xf'));var deskjs=require(_0x130b('0x10'));var toCsv=require(_0x130b('0x11'));var querystring=require(_0x130b('0x12'));var Papa=require('papaparse');var authService=require(_0x130b('0x13'));var hardwareService=require(_0x130b('0x14'));var Redis=require(_0x130b('0x15'));var qs=require('../../components/parsers/qs');var logger=require(_0x130b('0x16'))(_0x130b('0x17'));var utils=require(_0x130b('0x18'));var config=require('../../config/environment');var db=require(_0x130b('0x19'))['db'];function respondWithStatusCode(_0x5c4fbc,_0x7c054b){_0x7c054b=_0x7c054b||0xcc;return function(_0x55825d){if(_0x55825d){return _0x5c4fbc[_0x130b('0x1a')](_0x7c054b);}return _0x5c4fbc[_0x130b('0x1b')](_0x7c054b)[_0x130b('0x1c')]();};}function respondWithResult(_0xcbaeb3,_0xa4b25b){_0xa4b25b=_0xa4b25b||0xc8;return function(_0x179b46){if(_0x179b46){return _0xcbaeb3[_0x130b('0x1b')](_0xa4b25b)[_0x130b('0x1d')](_0x179b46);}};}function respondWithFilteredResult(_0x4c7406,_0x3b2cea){return function(_0x2a8718){if(_0x2a8718){var _0xd840da=_0x2a8718[_0x130b('0x1e')],_0x29d947=_0x3b2cea[_0x130b('0x1f')],_0x53d825=_0x3b2cea[_0x130b('0x1f')]+_0x3b2cea[_0x130b('0x20')],_0x301747;if(_0x53d825>=_0xd840da){_0x53d825=_0xd840da;_0x301747=0xc8;}else{_0x301747=0xce;}_0x4c7406['status'](_0x301747);return _0x4c7406[_0x130b('0x21')]('Content-Range',_0x29d947+'-'+_0x53d825+'/'+_0xd840da)[_0x130b('0x1d')](_0x2a8718);}return null;};}function patchUpdates(_0x28d877){return function(_0x48d8b1){try{jsonpatch[_0x130b('0x22')](_0x48d8b1,_0x28d877,!![]);}catch(_0x476721){return BPromise[_0x130b('0x23')](_0x476721);}return _0x48d8b1[_0x130b('0x24')]();};}function saveUpdates(_0x57e373,_0x258c36){return function(_0x85b85){if(_0x85b85){return _0x85b85[_0x130b('0x25')](_0x57e373)[_0x130b('0x26')](function(_0x3d88d4){return _0x3d88d4;});}return null;};}function removeEntity(_0x1cbb68,_0x5e53ff){return function(_0x1699f0){if(_0x1699f0){return _0x1699f0['destroy']()['then'](function(){_0x1cbb68[_0x130b('0x1b')](0xcc)[_0x130b('0x1c')]();});}};}function handleEntityNotFound(_0x20fa15,_0x181688){return function(_0x3936e0){if(!_0x3936e0){_0x20fa15[_0x130b('0x1a')](0x194);}return _0x3936e0;};}function handleError(_0x4b10d6,_0x5c9caa){_0x5c9caa=_0x5c9caa||0x1f4;return function(_0x36e345){logger['error'](_0x36e345['stack']);if(_0x36e345[_0x130b('0x27')]){delete _0x36e345[_0x130b('0x27')];}_0x4b10d6[_0x130b('0x1b')](_0x5c9caa)[_0x130b('0x28')](_0x36e345);};}exports[_0x130b('0x29')]=function(_0x311732,_0x471eda){var _0x554a3c={},_0x32200d={},_0x3fffe2={'count':0x0,'rows':[]};var _0x31287e=db[_0x130b('0x2a')][_0x130b('0x2b')];_0x32200d[_0x130b('0x2c')]=_['keys'](_0x31287e);_0x32200d[_0x130b('0x2d')]=_[_0x130b('0x2e')](_0x311732[_0x130b('0x2d')]);_0x32200d['filters']=_[_0x130b('0x2f')](_0x32200d[_0x130b('0x2c')],_0x32200d['query']);_0x554a3c['attributes']=_[_0x130b('0x2f')](_0x32200d[_0x130b('0x2c')],qs['fields'](_0x311732[_0x130b('0x2d')][_0x130b('0x30')]));_0x554a3c[_0x130b('0x31')]=_0x554a3c[_0x130b('0x31')]['length']?_0x554a3c[_0x130b('0x31')]:_0x32200d[_0x130b('0x2c')];if(!_0x311732[_0x130b('0x2d')][_0x130b('0x32')]('nolimit')){_0x554a3c[_0x130b('0x20')]=qs['limit'](_0x311732[_0x130b('0x2d')]['limit']);_0x554a3c[_0x130b('0x1f')]=qs[_0x130b('0x1f')](_0x311732[_0x130b('0x2d')][_0x130b('0x1f')]);}_0x554a3c[_0x130b('0x33')]=qs['sort'](_0x311732[_0x130b('0x2d')][_0x130b('0x34')]);_0x554a3c[_0x130b('0x35')]=qs[_0x130b('0x36')](_['pick'](_0x311732[_0x130b('0x2d')],_0x32200d[_0x130b('0x36')]));if(_0x311732[_0x130b('0x2d')]['filter']){_0x554a3c[_0x130b('0x35')]=_[_0x130b('0x37')](_0x554a3c[_0x130b('0x35')],{'$or':_[_0x130b('0x38')](_0x31287e,function(_0x10a430){if(_0x10a430['type']['key']!==_0x130b('0x39')){var _0x5722ff={};_0x5722ff[_0x10a430['field']]={'$like':'%'+_0x311732[_0x130b('0x2d')]['filter']+'%'};return _0x5722ff;}})});}_0x554a3c=_[_0x130b('0x37')]({},_0x554a3c,_0x311732[_0x130b('0x3a')]);var _0x464415={'where':_0x554a3c[_0x130b('0x35')]};return db[_0x130b('0x2a')][_0x130b('0x1e')](_0x464415)[_0x130b('0x26')](function(_0x2a88a2){_0x3fffe2[_0x130b('0x1e')]=_0x2a88a2;if(_0x311732['query'][_0x130b('0x3b')]){_0x554a3c[_0x130b('0x3c')]=[{'all':!![]}];}return db['SugarcrmField'][_0x130b('0x3d')](_0x554a3c);})[_0x130b('0x26')](function(_0x26f879){_0x3fffe2[_0x130b('0x3e')]=_0x26f879;return _0x3fffe2;})['then'](respondWithFilteredResult(_0x471eda,_0x554a3c))[_0x130b('0x3f')](handleError(_0x471eda,null));};exports[_0x130b('0x40')]=function(_0x139868,_0x21ba49){var _0x15e50a={'raw':!![],'where':{'id':_0x139868[_0x130b('0x41')]['id']}},_0xae5364={};_0xae5364[_0x130b('0x2c')]=_[_0x130b('0x2e')](db['SugarcrmField']['rawAttributes']);_0xae5364[_0x130b('0x2d')]=_['keys'](_0x139868['query']);_0xae5364[_0x130b('0x36')]=_[_0x130b('0x2f')](_0xae5364['model'],_0xae5364[_0x130b('0x2d')]);_0x15e50a[_0x130b('0x31')]=_[_0x130b('0x2f')](_0xae5364[_0x130b('0x2c')],qs[_0x130b('0x30')](_0x139868[_0x130b('0x2d')][_0x130b('0x30')]));_0x15e50a[_0x130b('0x31')]=_0x15e50a[_0x130b('0x31')][_0x130b('0x42')]?_0x15e50a[_0x130b('0x31')]:_0xae5364[_0x130b('0x2c')];if(_0x139868[_0x130b('0x2d')]['includeAll']){_0x15e50a[_0x130b('0x3c')]=[{'all':!![]}];}_0x15e50a=_[_0x130b('0x37')]({},_0x15e50a,_0x139868[_0x130b('0x3a')]);return db[_0x130b('0x2a')][_0x130b('0x43')](_0x15e50a)[_0x130b('0x26')](handleEntityNotFound(_0x21ba49,null))[_0x130b('0x26')](respondWithResult(_0x21ba49,null))[_0x130b('0x3f')](handleError(_0x21ba49,null));};exports[_0x130b('0x44')]=function(_0x334cb7,_0x5c21ce){return db[_0x130b('0x2a')][_0x130b('0x44')](_0x334cb7[_0x130b('0x45')],{})[_0x130b('0x26')](respondWithResult(_0x5c21ce,0xc9))[_0x130b('0x3f')](handleError(_0x5c21ce,null));};exports['update']=function(_0x44a4ab,_0x295589){if(_0x44a4ab[_0x130b('0x45')]['id']){delete _0x44a4ab[_0x130b('0x45')]['id'];}return db[_0x130b('0x2a')][_0x130b('0x43')]({'where':{'id':_0x44a4ab[_0x130b('0x41')]['id']}})[_0x130b('0x26')](handleEntityNotFound(_0x295589,null))[_0x130b('0x26')](saveUpdates(_0x44a4ab[_0x130b('0x45')],null))[_0x130b('0x26')](respondWithResult(_0x295589,null))[_0x130b('0x3f')](handleError(_0x295589,null));};exports[_0x130b('0x46')]=function(_0x1cb659,_0x292f41){return db[_0x130b('0x2a')][_0x130b('0x43')]({'where':{'id':_0x1cb659[_0x130b('0x41')]['id']}})[_0x130b('0x26')](handleEntityNotFound(_0x292f41,null))[_0x130b('0x26')](removeEntity(_0x292f41,null))[_0x130b('0x3f')](handleError(_0x292f41,null));};
\ No newline at end of file
index ba67090..c65d446 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xabd2=['lodash','util','../../config/logger','api','moment','bluebird','exports','SugarcrmField','idField','FieldId'];(function(_0x4c7fc8,_0x17c2ee){var _0x16a29e=function(_0x2f0dd0){while(--_0x2f0dd0){_0x4c7fc8['push'](_0x4c7fc8['shift']());}};_0x16a29e(++_0x17c2ee);}(_0xabd2,0xd2));var _0x2abd=function(_0x4f40da,_0x40bc86){_0x4f40da=_0x4f40da-0x0;var _0x253fdf=_0xabd2[_0x4f40da];return _0x253fdf;};'use strict';var _=require(_0x2abd('0x0'));var util=require(_0x2abd('0x1'));var logger=require(_0x2abd('0x2'))(_0x2abd('0x3'));var moment=require(_0x2abd('0x4'));var BPromise=require(_0x2abd('0x5'));var rp=require('request-promise');var attributes=require('./intSugarcrmField.attributes');module[_0x2abd('0x6')]=function(_0x5b876a,_0x2ff069){return _0x5b876a['define'](_0x2abd('0x7'),attributes,{'tableName':'int_sugarcrm_fields','paranoid':![],'indexes':[{'name':'sugarcrm_unique_index','fields':[_0x2abd('0x8'),_0x2abd('0x9')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x6320=['idField','FieldId','lodash','util','../../config/logger','api','moment','bluebird','request-promise','define','SugarcrmField','int_sugarcrm_fields','sugarcrm_unique_index'];(function(_0x1399b9,_0x58d78f){var _0x2d47a7=function(_0x35b44d){while(--_0x35b44d){_0x1399b9['push'](_0x1399b9['shift']());}};_0x2d47a7(++_0x58d78f);}(_0x6320,0x6a));var _0x0632=function(_0x294e0d,_0x23d33c){_0x294e0d=_0x294e0d-0x0;var _0x7b0161=_0x6320[_0x294e0d];return _0x7b0161;};'use strict';var _=require(_0x0632('0x0'));var util=require(_0x0632('0x1'));var logger=require(_0x0632('0x2'))(_0x0632('0x3'));var moment=require(_0x0632('0x4'));var BPromise=require(_0x0632('0x5'));var rp=require(_0x0632('0x6'));var attributes=require('./intSugarcrmField.attributes');module['exports']=function(_0x111556,_0xfa26af){return _0x111556[_0x0632('0x7')](_0x0632('0x8'),attributes,{'tableName':_0x0632('0x9'),'paranoid':![],'indexes':[{'name':_0x0632('0xa'),'fields':[_0x0632('0xb'),_0x0632('0xc')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 2777014..99c392c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x420e=['SugarcrmField,\x20%s,\x20%s','message','info','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','request\x20sent','debug','SugarcrmField,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x54097a,_0x513d1d){var _0x483190=function(_0x246460){while(--_0x246460){_0x54097a['push'](_0x54097a['shift']());}};_0x483190(++_0x513d1d);}(_0x420e,0x9e));var _0xe420=function(_0x1d2814,_0x3eab09){_0x1d2814=_0x1d2814-0x0;var _0x1513ce=_0x420e[_0x1d2814];return _0x1513ce;};'use strict';var _=require(_0xe420('0x0'));var util=require('util');var moment=require(_0xe420('0x1'));var BPromise=require(_0xe420('0x2'));var rs=require(_0xe420('0x3'));var fs=require('fs');var Redis=require(_0xe420('0x4'));var db=require(_0xe420('0x5'))['db'];var utils=require(_0xe420('0x6'));var logger=require(_0xe420('0x7'))(_0xe420('0x8'));var config=require(_0xe420('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xe420('0xa')][_0xe420('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1221d5,_0x4bd72b,_0x257ac3){return new BPromise(function(_0x3f944f,_0x23e2c5){return client['request'](_0x1221d5,_0x257ac3)['then'](function(_0x791656){logger['info']('SugarcrmField,\x20%s,\x20%s',_0x4bd72b,_0xe420('0xc'));logger[_0xe420('0xd')](_0xe420('0xe'),_0x4bd72b,_0xe420('0xc'),JSON[_0xe420('0xf')](_0x791656));if(_0x791656[_0xe420('0x10')]){if(_0x791656[_0xe420('0x10')][_0xe420('0x11')]===0x1f4){logger[_0xe420('0x10')](_0xe420('0x12'),_0x4bd72b,_0x791656[_0xe420('0x10')][_0xe420('0x13')]);return _0x23e2c5(_0x791656[_0xe420('0x10')][_0xe420('0x13')]);}logger[_0xe420('0x10')](_0xe420('0x12'),_0x4bd72b,_0x791656[_0xe420('0x10')]['message']);return _0x3f944f(_0x791656[_0xe420('0x10')][_0xe420('0x13')]);}else{logger[_0xe420('0x14')](_0xe420('0x12'),_0x4bd72b,_0xe420('0xc'));_0x3f944f(_0x791656['result']['message']);}})[_0xe420('0x15')](function(_0x1675f7){logger[_0xe420('0x10')](_0xe420('0x12'),_0x4bd72b,_0x1675f7);_0x23e2c5(_0x1675f7);});});}
\ No newline at end of file
+var _0x40ad=['info','SugarcrmField,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','request','then'];(function(_0x5f33b0,_0x596662){var _0xdbcf4b=function(_0x1dba08){while(--_0x1dba08){_0x5f33b0['push'](_0x5f33b0['shift']());}};_0xdbcf4b(++_0x596662);}(_0x40ad,0x9b));var _0xd40a=function(_0x275d4b,_0x53a574){_0x275d4b=_0x275d4b-0x0;var _0x13f34b=_0x40ad[_0x275d4b];return _0x13f34b;};'use strict';var _=require(_0xd40a('0x0'));var util=require(_0xd40a('0x1'));var moment=require(_0xd40a('0x2'));var BPromise=require('bluebird');var rs=require(_0xd40a('0x3'));var fs=require('fs');var Redis=require(_0xd40a('0x4'));var db=require(_0xd40a('0x5'))['db'];var utils=require(_0xd40a('0x6'));var logger=require(_0xd40a('0x7'))(_0xd40a('0x8'));var config=require(_0xd40a('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xd40a('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x330e0b,_0x35f8d2,_0x119bd7){return new BPromise(function(_0x3e83f2,_0x388b2f){return client[_0xd40a('0xb')](_0x330e0b,_0x119bd7)[_0xd40a('0xc')](function(_0x3347e1){logger[_0xd40a('0xd')](_0xd40a('0xe'),_0x35f8d2,'request\x20sent');logger['debug']('SugarcrmField,\x20%s,\x20%s,\x20%s',_0x35f8d2,_0xd40a('0xf'),JSON[_0xd40a('0x10')](_0x3347e1));if(_0x3347e1[_0xd40a('0x11')]){if(_0x3347e1[_0xd40a('0x11')][_0xd40a('0x12')]===0x1f4){logger[_0xd40a('0x11')](_0xd40a('0xe'),_0x35f8d2,_0x3347e1['error'][_0xd40a('0x13')]);return _0x388b2f(_0x3347e1[_0xd40a('0x11')][_0xd40a('0x13')]);}logger[_0xd40a('0x11')](_0xd40a('0xe'),_0x35f8d2,_0x3347e1[_0xd40a('0x11')][_0xd40a('0x13')]);return _0x3e83f2(_0x3347e1[_0xd40a('0x11')][_0xd40a('0x13')]);}else{logger[_0xd40a('0xd')](_0xd40a('0xe'),_0x35f8d2,_0xd40a('0xf'));_0x3e83f2(_0x3347e1[_0xd40a('0x14')][_0xd40a('0x13')]);}})['catch'](function(_0x2f1d8d){logger[_0xd40a('0x11')](_0xd40a('0xe'),_0x35f8d2,_0x2f1d8d);_0x388b2f(_0x2f1d8d);});});}
\ No newline at end of file
index 00e97bd..bc60a8d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xba21=['/:id/fields','getFields','post','delete','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/:id','show','/:id/configurations'];(function(_0x46b9ac,_0xefcc6a){var _0x72568d=function(_0x424639){while(--_0x424639){_0x46b9ac['push'](_0x46b9ac['shift']());}};_0x72568d(++_0xefcc6a);}(_0xba21,0x65));var _0x1ba2=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xba21[_0x122ef9];return _0x42fba0;};'use strict';var multer=require('multer');var util=require(_0x1ba2('0x0'));var path=require(_0x1ba2('0x1'));var timeout=require(_0x1ba2('0x2'));var express=require(_0x1ba2('0x3'));var router=express[_0x1ba2('0x4')]();var auth=require(_0x1ba2('0x5'));var interaction=require(_0x1ba2('0x6'));var config=require(_0x1ba2('0x7'));var controller=require('./intVtigerAccount.controller');router[_0x1ba2('0x8')]('/',auth[_0x1ba2('0x9')](),controller['index']);router[_0x1ba2('0x8')](_0x1ba2('0xa'),auth['isAuthenticated'](),controller[_0x1ba2('0xb')]);router[_0x1ba2('0x8')](_0x1ba2('0xc'),auth['isAuthenticated'](),controller['getConfigurations']);router['get'](_0x1ba2('0xd'),auth[_0x1ba2('0x9')](),controller[_0x1ba2('0xe')]);router[_0x1ba2('0xf')]('/',auth[_0x1ba2('0x9')](),controller['create']);router[_0x1ba2('0xf')]('/:id/configurations',auth['isAuthenticated'](),controller['addConfiguration']);router['put'](_0x1ba2('0xa'),auth[_0x1ba2('0x9')](),controller['update']);router[_0x1ba2('0x10')](_0x1ba2('0xa'),auth[_0x1ba2('0x9')](),controller[_0x1ba2('0x11')]);module[_0x1ba2('0x12')]=router;
\ No newline at end of file
+var _0xab52=['destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./intVtigerAccount.controller','get','isAuthenticated','index','show','/:id/configurations','getConfigurations','/:id/fields','post','create','addConfiguration','/:id','update','delete'];(function(_0x91d9b0,_0x17648e){var _0xc1faad=function(_0xd64e60){while(--_0xd64e60){_0x91d9b0['push'](_0x91d9b0['shift']());}};_0xc1faad(++_0x17648e);}(_0xab52,0x15b));var _0x2ab5=function(_0x5974d3,_0x42a383){_0x5974d3=_0x5974d3-0x0;var _0x5eb084=_0xab52[_0x5974d3];return _0x5eb084;};'use strict';var multer=require(_0x2ab5('0x0'));var util=require(_0x2ab5('0x1'));var path=require(_0x2ab5('0x2'));var timeout=require('connect-timeout');var express=require(_0x2ab5('0x3'));var router=express[_0x2ab5('0x4')]();var auth=require(_0x2ab5('0x5'));var interaction=require(_0x2ab5('0x6'));var config=require('../../config/environment');var controller=require(_0x2ab5('0x7'));router[_0x2ab5('0x8')]('/',auth[_0x2ab5('0x9')](),controller[_0x2ab5('0xa')]);router[_0x2ab5('0x8')]('/:id',auth['isAuthenticated'](),controller[_0x2ab5('0xb')]);router[_0x2ab5('0x8')](_0x2ab5('0xc'),auth[_0x2ab5('0x9')](),controller[_0x2ab5('0xd')]);router[_0x2ab5('0x8')](_0x2ab5('0xe'),auth[_0x2ab5('0x9')](),controller['getFields']);router[_0x2ab5('0xf')]('/',auth[_0x2ab5('0x9')](),controller[_0x2ab5('0x10')]);router[_0x2ab5('0xf')](_0x2ab5('0xc'),auth['isAuthenticated'](),controller[_0x2ab5('0x11')]);router['put'](_0x2ab5('0x12'),auth['isAuthenticated'](),controller[_0x2ab5('0x13')]);router[_0x2ab5('0x14')](_0x2ab5('0x12'),auth[_0x2ab5('0x9')](),controller[_0x2ab5('0x15')]);module[_0x2ab5('0x16')]=router;
\ No newline at end of file
index 46435a7..58908fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a79=['sequelize','exports','STRING','HelpDesk'];(function(_0xf52876,_0x2d65c7){var _0x46276d=function(_0x3fcf01){while(--_0x3fcf01){_0xf52876['push'](_0xf52876['shift']());}};_0x46276d(++_0x2d65c7);}(_0x6a79,0x7c));var _0x96a7=function(_0x126121,_0x35e290){_0x126121=_0x126121-0x0;var _0x57d413=_0x6a79[_0x126121];return _0x57d413;};'use strict';var Sequelize=require(_0x96a7('0x0'));module[_0x96a7('0x1')]={'name':{'type':Sequelize[_0x96a7('0x2')],'allowNull':![]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0x96a7('0x2')],'allowNull':![]},'moduleName':{'type':Sequelize[_0x96a7('0x2')],'allowNull':![],'defaultValue':_0x96a7('0x3')},'remoteUri':{'type':Sequelize[_0x96a7('0x2')],'allowNull':![]},'serverUrl':{'type':Sequelize[_0x96a7('0x2')]},'accessKey':{'type':Sequelize[_0x96a7('0x2')],'allowNull':![]}};
\ No newline at end of file
+var _0x993e=['exports','STRING','HelpDesk','sequelize'];(function(_0x4c5b7c,_0x28dcb3){var _0x501a19=function(_0x796611){while(--_0x796611){_0x4c5b7c['push'](_0x4c5b7c['shift']());}};_0x501a19(++_0x28dcb3);}(_0x993e,0x77));var _0xe993=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x993e[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0xe993('0x0'));module[_0xe993('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize[_0xe993('0x2')],'allowNull':![]},'moduleName':{'type':Sequelize[_0xe993('0x2')],'allowNull':![],'defaultValue':_0xe993('0x3')},'remoteUri':{'type':Sequelize[_0xe993('0x2')],'allowNull':![]},'serverUrl':{'type':Sequelize[_0xe993('0x2')]},'accessKey':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
index 81ba5c9..2718368 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x236c=['stack','name','send','index','VtigerAccount','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','limit','order','sort','where','pick','filter','key','VIRTUAL','merge','include','findAll','rows','show','params','includeAll','options','create','body','update','find','getConfigurations','findOne','VtigerConfiguration','map','hasOwnProperty','nolimit','addConfiguration','AccountId','Subjects','getSubjects','channel','type','Descriptions','VtigerField','getFields','username','description','moduleName','remoteUri','serverUrl','accessKey','slice','substring','lastIndexOf','getchallenge','success','POST','login','token','GET','describe','sessionName','autogenerated','reference','owner','remove','editable','label','startsWith','cf_','picklist','picklistValues','value','log','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','stringify','Wrong\x20credentials','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../components/integrations/configuration','jayson/promise','http','request','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','sendStatus','status','end','json','count','offset','set','apply','then','destroy'];(function(_0x2aea9e,_0x1f587f){var _0x430b92=function(_0x416c37){while(--_0x416c37){_0x2aea9e['push'](_0x2aea9e['shift']());}};_0x430b92(++_0x1f587f);}(_0x236c,0x155));var _0xc236=function(_0x4954b3,_0x2ca1b7){_0x4954b3=_0x4954b3-0x0;var _0x54356a=_0x236c[_0x4954b3];return _0x54356a;};'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 authService=require(_0xc236('0xf'));var hardwareService=require(_0xc236('0x10'));var Redis=require(_0xc236('0x11'));var qs=require(_0xc236('0x12'));var logger=require(_0xc236('0x13'))('api');var utils=require(_0xc236('0x14'));var config=require(_0xc236('0x15'));var db=require('../../mysqldb')['db'];var integrations=require(_0xc236('0x16'));var jayson=require(_0xc236('0x17'));var client=jayson['client'][_0xc236('0x18')]({'port':0x232a});function respondWithRpcPromise(_0x5bce83,_0x599d36,_0x6db6b9,_0x442095){return new BPromise(function(_0x2184c9,_0x71bce2){var _0x5052db=_0x442095||client;return _0x5052db[_0xc236('0x19')](_0x5bce83,_0x6db6b9)['then'](function(_0x5221bf){logger[_0xc236('0x1a')](_0xc236('0x1b'),_0x599d36,_0xc236('0x1c'));logger[_0xc236('0x1d')](_0xc236('0x1e'),_0x599d36,'request\x20sent',JSON['stringify'](_0x5221bf));if(_0x5221bf['error']){if(_0x5221bf[_0xc236('0x1f')][_0xc236('0x20')]===0x1f4){logger[_0xc236('0x1f')]('VtigerAccount,\x20%s,\x20%s',_0x599d36,_0x5221bf[_0xc236('0x1f')]['message']);return _0x71bce2(_0x5221bf['error'][_0xc236('0x21')]);}logger[_0xc236('0x1f')](_0xc236('0x1b'),_0x599d36,_0x5221bf[_0xc236('0x1f')][_0xc236('0x21')]);return _0x2184c9(_0x5221bf[_0xc236('0x1f')][_0xc236('0x21')]);}else{logger[_0xc236('0x1a')](_0xc236('0x1b'),_0x599d36,_0xc236('0x1c'));_0x2184c9(_0x5221bf[_0xc236('0x22')]['message']);}})[_0xc236('0x23')](function(_0x34d73a){logger[_0xc236('0x1f')](_0xc236('0x1b'),_0x599d36,_0x34d73a);_0x71bce2(_0x34d73a);});});}function respondWithStatusCode(_0x27afba,_0x21fab8){_0x21fab8=_0x21fab8||0xcc;return function(_0x3a315b){if(_0x3a315b){return _0x27afba[_0xc236('0x24')](_0x21fab8);}return _0x27afba[_0xc236('0x25')](_0x21fab8)[_0xc236('0x26')]();};}function respondWithResult(_0x17cb3b,_0x5d4edc){_0x5d4edc=_0x5d4edc||0xc8;return function(_0x308cd6){if(_0x308cd6){return _0x17cb3b[_0xc236('0x25')](_0x5d4edc)[_0xc236('0x27')](_0x308cd6);}};}function respondWithFilteredResult(_0x9017ec,_0x561da1){return function(_0x42f248){if(_0x42f248){var _0x5da4b2=_0x42f248[_0xc236('0x28')],_0x5351bc=_0x561da1['offset'],_0x15ead8=_0x561da1[_0xc236('0x29')]+_0x561da1['limit'],_0x4eace8;if(_0x15ead8>=_0x5da4b2){_0x15ead8=_0x5da4b2;_0x4eace8=0xc8;}else{_0x4eace8=0xce;}_0x9017ec[_0xc236('0x25')](_0x4eace8);return _0x9017ec[_0xc236('0x2a')]('Content-Range',_0x5351bc+'-'+_0x15ead8+'/'+_0x5da4b2)['json'](_0x42f248);}return null;};}function patchUpdates(_0x265c8d){return function(_0x1fd31d){try{jsonpatch[_0xc236('0x2b')](_0x1fd31d,_0x265c8d,!![]);}catch(_0x6ad83f){return BPromise['reject'](_0x6ad83f);}return _0x1fd31d['save']();};}function saveUpdates(_0x28ffa5,_0x53b767){return function(_0x2c756f){if(_0x2c756f){return _0x2c756f['update'](_0x28ffa5)[_0xc236('0x2c')](function(_0x40a6c8){return _0x40a6c8;});}return null;};}function removeEntity(_0x57c99e,_0x5a5ec3){return function(_0x2537f9){if(_0x2537f9){return _0x2537f9[_0xc236('0x2d')]()[_0xc236('0x2c')](function(){_0x57c99e[_0xc236('0x25')](0xcc)[_0xc236('0x26')]();});}};}function handleEntityNotFound(_0xa298f8,_0x259c0f){return function(_0x22a2ca){if(!_0x22a2ca){_0xa298f8[_0xc236('0x24')](0x194);}return _0x22a2ca;};}function handleError(_0x4942d7,_0x51fd41){_0x51fd41=_0x51fd41||0x1f4;return function(_0x5c151a){logger[_0xc236('0x1f')](_0x5c151a[_0xc236('0x2e')]);if(_0x5c151a[_0xc236('0x2f')]){delete _0x5c151a[_0xc236('0x2f')];}_0x4942d7[_0xc236('0x25')](_0x51fd41)[_0xc236('0x30')](_0x5c151a);};}exports[_0xc236('0x31')]=function(_0x5761de,_0x15f8c0){var _0x3f9b1d={},_0xc77281={},_0x5057ff={'count':0x0,'rows':[]};var _0x40de85=db[_0xc236('0x32')][_0xc236('0x33')];_0xc77281[_0xc236('0x34')]=_['keys'](_0x40de85);_0xc77281[_0xc236('0x35')]=_[_0xc236('0x36')](_0x5761de[_0xc236('0x35')]);_0xc77281[_0xc236('0x37')]=_[_0xc236('0x38')](_0xc77281[_0xc236('0x34')],_0xc77281[_0xc236('0x35')]);_0x3f9b1d[_0xc236('0x39')]=_[_0xc236('0x38')](_0xc77281[_0xc236('0x34')],qs[_0xc236('0x3a')](_0x5761de[_0xc236('0x35')][_0xc236('0x3a')]));_0x3f9b1d[_0xc236('0x39')]=_0x3f9b1d[_0xc236('0x39')][_0xc236('0x3b')]?_0x3f9b1d[_0xc236('0x39')]:_0xc77281['model'];if(!_0x5761de['query']['hasOwnProperty']('nolimit')){_0x3f9b1d[_0xc236('0x3c')]=qs['limit'](_0x5761de[_0xc236('0x35')][_0xc236('0x3c')]);_0x3f9b1d[_0xc236('0x29')]=qs[_0xc236('0x29')](_0x5761de[_0xc236('0x35')][_0xc236('0x29')]);}_0x3f9b1d[_0xc236('0x3d')]=qs[_0xc236('0x3e')](_0x5761de[_0xc236('0x35')][_0xc236('0x3e')]);_0x3f9b1d[_0xc236('0x3f')]=qs[_0xc236('0x37')](_[_0xc236('0x40')](_0x5761de[_0xc236('0x35')],_0xc77281[_0xc236('0x37')]));if(_0x5761de['query'][_0xc236('0x41')]){_0x3f9b1d[_0xc236('0x3f')]=_['merge'](_0x3f9b1d[_0xc236('0x3f')],{'$or':_['map'](_0x40de85,function(_0x1cecc5){if(_0x1cecc5['type'][_0xc236('0x42')]!==_0xc236('0x43')){var _0x8d04c9={};_0x8d04c9[_0x1cecc5['field']]={'$like':'%'+_0x5761de[_0xc236('0x35')][_0xc236('0x41')]+'%'};return _0x8d04c9;}})});}_0x3f9b1d=_[_0xc236('0x44')]({},_0x3f9b1d,_0x5761de['options']);var _0x43a61b={'where':_0x3f9b1d[_0xc236('0x3f')]};return db[_0xc236('0x32')][_0xc236('0x28')](_0x43a61b)[_0xc236('0x2c')](function(_0x3235b0){_0x5057ff['count']=_0x3235b0;if(_0x5761de[_0xc236('0x35')]['includeAll']){_0x3f9b1d[_0xc236('0x45')]=[{'all':!![]}];}return db[_0xc236('0x32')][_0xc236('0x46')](_0x3f9b1d);})[_0xc236('0x2c')](function(_0x3cf9f8){_0x5057ff[_0xc236('0x47')]=_0x3cf9f8;return _0x5057ff;})[_0xc236('0x2c')](respondWithFilteredResult(_0x15f8c0,_0x3f9b1d))['catch'](handleError(_0x15f8c0,null));};exports[_0xc236('0x48')]=function(_0x4c9455,_0x4674fe){var _0x2f52b9={'raw':![],'where':{'id':_0x4c9455[_0xc236('0x49')]['id']}},_0x490416={};_0x490416[_0xc236('0x34')]=_[_0xc236('0x36')](db[_0xc236('0x32')][_0xc236('0x33')]);_0x490416[_0xc236('0x35')]=_[_0xc236('0x36')](_0x4c9455['query']);_0x490416['filters']=_[_0xc236('0x38')](_0x490416[_0xc236('0x34')],_0x490416['query']);_0x2f52b9[_0xc236('0x39')]=_[_0xc236('0x38')](_0x490416[_0xc236('0x34')],qs[_0xc236('0x3a')](_0x4c9455[_0xc236('0x35')][_0xc236('0x3a')]));_0x2f52b9[_0xc236('0x39')]=_0x2f52b9[_0xc236('0x39')][_0xc236('0x3b')]?_0x2f52b9['attributes']:_0x490416[_0xc236('0x34')];if(_0x4c9455[_0xc236('0x35')][_0xc236('0x4a')]){_0x2f52b9[_0xc236('0x45')]=[{'all':!![]}];}_0x2f52b9=_[_0xc236('0x44')]({},_0x2f52b9,_0x4c9455[_0xc236('0x4b')]);return db[_0xc236('0x32')]['find'](_0x2f52b9)[_0xc236('0x2c')](handleEntityNotFound(_0x4674fe,null))[_0xc236('0x2c')](respondWithResult(_0x4674fe,null))[_0xc236('0x23')](handleError(_0x4674fe,null));};exports[_0xc236('0x4c')]=function(_0x4860d8,_0xa34c01){return db[_0xc236('0x32')][_0xc236('0x4c')](_0x4860d8[_0xc236('0x4d')],{})[_0xc236('0x2c')](respondWithResult(_0xa34c01,0xc9))['catch'](handleError(_0xa34c01,null));};exports[_0xc236('0x4e')]=function(_0x4a1251,_0xae369a){if(_0x4a1251[_0xc236('0x4d')]['id']){delete _0x4a1251[_0xc236('0x4d')]['id'];}return db[_0xc236('0x32')][_0xc236('0x4f')]({'where':{'id':_0x4a1251['params']['id']}})['then'](handleEntityNotFound(_0xae369a,null))[_0xc236('0x2c')](saveUpdates(_0x4a1251[_0xc236('0x4d')],null))[_0xc236('0x2c')](respondWithResult(_0xae369a,null))[_0xc236('0x23')](handleError(_0xae369a,null));};exports[_0xc236('0x2d')]=function(_0x22b929,_0x3fd22b){return db[_0xc236('0x32')][_0xc236('0x4f')]({'where':{'id':_0x22b929[_0xc236('0x49')]['id']}})['then'](handleEntityNotFound(_0x3fd22b,null))['then'](removeEntity(_0x3fd22b,null))[_0xc236('0x23')](handleError(_0x3fd22b,null));};exports[_0xc236('0x50')]=function(_0x8e19c6,_0x659f37,_0x52d686){var _0x94fc7={};var _0x460076={};var _0x56e476;var _0x4524c1;return db[_0xc236('0x32')][_0xc236('0x51')]({'where':{'id':_0x8e19c6[_0xc236('0x49')]['id']}})['then'](handleEntityNotFound(_0x659f37,null))[_0xc236('0x2c')](function(_0xec00da){if(_0xec00da){_0x56e476=_0xec00da;_0x460076[_0xc236('0x34')]=_[_0xc236('0x36')](db[_0xc236('0x52')][_0xc236('0x33')]);_0x460076[_0xc236('0x35')]=_['keys'](_0x8e19c6[_0xc236('0x35')]);_0x460076['filters']=_[_0xc236('0x38')](_0x460076[_0xc236('0x34')],_0x460076[_0xc236('0x35')]);_0x94fc7[_0xc236('0x39')]=_['intersection'](_0x460076[_0xc236('0x34')],qs[_0xc236('0x3a')](_0x8e19c6[_0xc236('0x35')]['fields']));_0x94fc7[_0xc236('0x39')]=_0x94fc7[_0xc236('0x39')][_0xc236('0x3b')]?_0x94fc7[_0xc236('0x39')]:_0x460076[_0xc236('0x34')];_0x94fc7[_0xc236('0x3d')]=qs['sort'](_0x8e19c6['query'][_0xc236('0x3e')]);_0x94fc7[_0xc236('0x3f')]=qs[_0xc236('0x37')](_[_0xc236('0x40')](_0x8e19c6[_0xc236('0x35')],_0x460076[_0xc236('0x37')]));if(_0x8e19c6[_0xc236('0x35')]['filter']){_0x94fc7['where']=_['merge'](_0x94fc7[_0xc236('0x3f')],{'$or':_[_0xc236('0x53')](_0x94fc7[_0xc236('0x39')],function(_0x2d6b00){var _0x47aa3f={};_0x47aa3f[_0x2d6b00]={'$like':'%'+_0x8e19c6['query']['filter']+'%'};return _0x47aa3f;})});}_0x94fc7=_['merge']({},_0x94fc7,_0x8e19c6[_0xc236('0x4b')]);return _0x56e476['getConfigurations'](_0x94fc7);}})[_0xc236('0x2c')](function(_0x519e48){if(_0x519e48){_0x4524c1=_0x519e48[_0xc236('0x3b')];if(!_0x8e19c6[_0xc236('0x35')][_0xc236('0x54')](_0xc236('0x55'))){_0x94fc7[_0xc236('0x3c')]=qs[_0xc236('0x3c')](_0x8e19c6[_0xc236('0x35')]['limit']);_0x94fc7[_0xc236('0x29')]=qs['offset'](_0x8e19c6[_0xc236('0x35')][_0xc236('0x29')]);}return _0x56e476[_0xc236('0x50')](_0x94fc7);}})[_0xc236('0x2c')](function(_0x1f9fcd){if(_0x1f9fcd){return _0x1f9fcd?{'count':_0x4524c1,'rows':_0x1f9fcd}:null;}})[_0xc236('0x2c')](respondWithResult(_0x659f37,null))['catch'](handleError(_0x659f37,null));};exports[_0xc236('0x56')]=function(_0x94f65d,_0x4bb0c6,_0x2fb86f){if(_0x94f65d[_0xc236('0x4d')]['id']){delete _0x94f65d[_0xc236('0x4d')]['id'];}return db['VtigerAccount'][_0xc236('0x51')]({'where':{'id':_0x94f65d[_0xc236('0x49')]['id']}})[_0xc236('0x2c')](handleEntityNotFound(_0x4bb0c6,null))[_0xc236('0x2c')](function(_0x340f7c){if(_0x340f7c){_0x94f65d[_0xc236('0x4d')][_0xc236('0x57')]=_0x340f7c['id'];_0x94f65d[_0xc236('0x4d')][_0xc236('0x58')]=integrations[_0xc236('0x59')](_0x94f65d[_0xc236('0x4d')][_0xc236('0x5a')],_0x94f65d['body'][_0xc236('0x5b')]);_0x94f65d[_0xc236('0x4d')][_0xc236('0x5c')]=integrations['getDescriptions'](_0x94f65d[_0xc236('0x4d')][_0xc236('0x5a')],_0x94f65d[_0xc236('0x4d')][_0xc236('0x5b')]);return db['VtigerConfiguration'][_0xc236('0x4c')](_0x94f65d['body'],{'include':[{'model':db[_0xc236('0x5d')],'as':'Subjects'},{'model':db[_0xc236('0x5d')],'as':_0xc236('0x5c')}]});}return null;})['then'](respondWithResult(_0x4bb0c6,null))['catch'](handleError(_0x4bb0c6,null));};var md5=require('md5');exports[_0xc236('0x5e')]=function(_0x4e9624,_0x392af2,_0x340c01){var _0x4be322=null;var _0x1ba1c8=null;var _0x2e0009=null;var _0x4d7e8d=null;var _0xdbeea2='';return db[_0xc236('0x32')][_0xc236('0x51')]({'where':{'id':_0x4e9624[_0xc236('0x49')]['id']},'attributes':['id','name',_0xc236('0x5f'),_0xc236('0x60'),_0xc236('0x61'),_0xc236('0x62'),_0xc236('0x63'),_0xc236('0x64')]})[_0xc236('0x2c')](handleEntityNotFound(_0x392af2,null))['then'](function(_0x5b720c){if(_0x5b720c){_0x4be322=_0x5b720c[_0xc236('0x5f')];_0x1ba1c8=_0x5b720c[_0xc236('0x64')];_0x2e0009=_0x5b720c[_0xc236('0x61')];_0xdbeea2=_0x5b720c[_0xc236('0x62')];var _0x1ce650=_0xdbeea2[_0xc236('0x65')](-0x1);if(_0x1ce650==='/'){_0xdbeea2=_0xdbeea2[_0xc236('0x66')](0x0,_0xdbeea2[_0xc236('0x67')](_0x1ce650));}_0x4d7e8d=util['format']('%s/webservice.php',_0xdbeea2);var _0x2c037a={'method':'GET','uri':_0x4d7e8d,'qs':{'operation':_0xc236('0x68'),'username':_0x5b720c[_0xc236('0x5f')]},'json':!![]};return rp(_0x2c037a);}})[_0xc236('0x2c')](function(_0x598397){if(_0x598397[_0xc236('0x69')]){var _0x4b0345={'method':_0xc236('0x6a'),'uri':_0x4d7e8d,'form':{'operation':_0xc236('0x6b'),'username':_0x4be322,'accessKey':md5(_0x598397[_0xc236('0x22')][_0xc236('0x6c')]+_0x1ba1c8)},'json':!![]};return rp(_0x4b0345);}})['then'](function(_0x41c76d){if(_0x41c76d[_0xc236('0x69')]){var _0x59c80f={'method':_0xc236('0x6d'),'uri':_0x4d7e8d,'qs':{'operation':_0xc236('0x6e'),'username':_0x4be322,'sessionName':_0x41c76d[_0xc236('0x22')][_0xc236('0x6f')],'elementType':_0x2e0009},'json':!![]};return rp(_0x59c80f);}})[_0xc236('0x2c')](function(_0x21b21a){if(_0x21b21a[_0xc236('0x69')]){var _0x4e74af=[_0xc236('0x70'),_0xc236('0x71'),_0xc236('0x72')];_[_0xc236('0x73')](_0x21b21a['result'][_0xc236('0x3a')],function(_0x1ee8d0){return _0x4e74af['includes'](_0x1ee8d0[_0xc236('0x5b')]['name']);});_[_0xc236('0x73')](_0x21b21a[_0xc236('0x22')]['fields'],function(_0x265d63){return _0x265d63[_0xc236('0x74')]==='false';});return{'count':_0x21b21a['result'][_0xc236('0x3a')][_0xc236('0x3b')],'rows':_[_0xc236('0x53')](_0x21b21a[_0xc236('0x22')][_0xc236('0x3a')],function(_0x17ce2d){return{'id':_0x17ce2d['name'],'name':_0x17ce2d[_0xc236('0x75')],'custom':_[_0xc236('0x76')](_0x17ce2d[_0xc236('0x2f')],_0xc236('0x77'))?!![]:![],'options':_0x17ce2d['type'][_0xc236('0x2f')]===_0xc236('0x78')&&_0x17ce2d[_0xc236('0x5b')][_0xc236('0x79')][_0xc236('0x3b')]>0x0?_['map'](_0x17ce2d['type'][_0xc236('0x79')],function(_0x501196){return{'name':_0x501196[_0xc236('0x75')],'value':_0x501196[_0xc236('0x7a')]};}):[]};})};}})[_0xc236('0x2c')](respondWithResult(_0x392af2,null))[_0xc236('0x23')](function(_0x4f6a56){console[_0xc236('0x7b')]('vTiger\x20error:\x20'+_0x4f6a56);var _0x3d2cf9=_0x4e9624['query'][_0xc236('0x7c')]?0x1f4:_0x4f6a56[_0xc236('0x7d')]||0x1f4;logger[_0xc236('0x1f')](_0xc236('0x7e'),_0xc236('0x5e'),_0x3d2cf9,JSON[_0xc236('0x7f')](_0x4f6a56));delete _0x4f6a56[_0xc236('0x2f')];if(_0x3d2cf9===0x191){_0x3d2cf9=0x190;}_0x392af2[_0xc236('0x25')](_0x3d2cf9)[_0xc236('0x30')](_0x4e9624['query']['test']?{'message':_0xc236('0x80'),'statusCode':_0x4f6a56[_0xc236('0x7d')]}:_0x4f6a56);});};
\ No newline at end of file
+var _0x8130=['index','rawAttributes','model','keys','query','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filters','merge','map','key','field','VtigerAccount','include','rows','catch','show','params','includeAll','options','create','body','find','destroy','getConfigurations','findOne','VtigerConfiguration','AccountId','Subjects','getSubjects','type','Descriptions','getDescriptions','channel','VtigerField','username','description','moduleName','remoteUri','serverUrl','accessKey','slice','substring','lastIndexOf','format','getchallenge','success','POST','login','token','describe','sessionName','autogenerated','reference','includes','remove','editable','false','label','picklist','picklistValues','value','vTiger\x20error:\x20','test','getFields,\x20%s,\x20%s,\x20%s','getFields','statusCode','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','../../config/utils','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','request','then','info','request\x20sent','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','VtigerAccount,\x20%s,\x20%s','message','result','status','json','count','offset','limit','set','Content-Range','apply','reject','save','update','sendStatus','stack','name','send'];(function(_0x18448a,_0x17c615){var _0x43dcbf=function(_0x34a26b){while(--_0x34a26b){_0x18448a['push'](_0x18448a['shift']());}};_0x43dcbf(++_0x17c615);}(_0x8130,0x146));var _0x0813=function(_0x5c78c8,_0x529652){_0x5c78c8=_0x5c78c8-0x0;var _0x2cd775=_0x8130[_0x5c78c8];return _0x2cd775;};'use strict';var pdf=require(_0x0813('0x0'));var emlformat=require(_0x0813('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x0813('0x2'));var jsonpatch=require(_0x0813('0x3'));var rp=require(_0x0813('0x4'));var moment=require(_0x0813('0x5'));var BPromise=require(_0x0813('0x6'));var Mustache=require(_0x0813('0x7'));var util=require('util');var path=require(_0x0813('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x0813('0x9'));var fs=require('fs');var _=require(_0x0813('0xa'));var squel=require(_0x0813('0xb'));var crypto=require(_0x0813('0xc'));var jsforce=require(_0x0813('0xd'));var deskjs=require(_0x0813('0xe'));var toCsv=require(_0x0813('0xf'));var querystring=require('querystring');var Papa=require(_0x0813('0x10'));var authService=require(_0x0813('0x11'));var hardwareService=require(_0x0813('0x12'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x0813('0x13'))('api');var utils=require(_0x0813('0x14'));var config=require('../../config/environment');var db=require(_0x0813('0x15'))['db'];var integrations=require(_0x0813('0x16'));var jayson=require(_0x0813('0x17'));var client=jayson[_0x0813('0x18')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4dcc3a,_0x29bdd8,_0x27966e,_0x4f5529){return new BPromise(function(_0x403e40,_0x4dae33){var _0x58e56c=_0x4f5529||client;return _0x58e56c[_0x0813('0x19')](_0x4dcc3a,_0x27966e)[_0x0813('0x1a')](function(_0x4ffaad){logger[_0x0813('0x1b')]('VtigerAccount,\x20%s,\x20%s',_0x29bdd8,_0x0813('0x1c'));logger[_0x0813('0x1d')](_0x0813('0x1e'),_0x29bdd8,_0x0813('0x1c'),JSON[_0x0813('0x1f')](_0x4ffaad));if(_0x4ffaad[_0x0813('0x20')]){if(_0x4ffaad[_0x0813('0x20')][_0x0813('0x21')]===0x1f4){logger['error'](_0x0813('0x22'),_0x29bdd8,_0x4ffaad['error'][_0x0813('0x23')]);return _0x4dae33(_0x4ffaad[_0x0813('0x20')]['message']);}logger[_0x0813('0x20')](_0x0813('0x22'),_0x29bdd8,_0x4ffaad['error'][_0x0813('0x23')]);return _0x403e40(_0x4ffaad[_0x0813('0x20')]['message']);}else{logger[_0x0813('0x1b')](_0x0813('0x22'),_0x29bdd8,_0x0813('0x1c'));_0x403e40(_0x4ffaad[_0x0813('0x24')][_0x0813('0x23')]);}})['catch'](function(_0x2bb694){logger[_0x0813('0x20')](_0x0813('0x22'),_0x29bdd8,_0x2bb694);_0x4dae33(_0x2bb694);});});}function respondWithStatusCode(_0x598cf2,_0x35b3d6){_0x35b3d6=_0x35b3d6||0xcc;return function(_0x5eabe4){if(_0x5eabe4){return _0x598cf2['sendStatus'](_0x35b3d6);}return _0x598cf2[_0x0813('0x25')](_0x35b3d6)['end']();};}function respondWithResult(_0x5eb50e,_0x39db51){_0x39db51=_0x39db51||0xc8;return function(_0x2366a3){if(_0x2366a3){return _0x5eb50e[_0x0813('0x25')](_0x39db51)[_0x0813('0x26')](_0x2366a3);}};}function respondWithFilteredResult(_0x215acb,_0x1418c7){return function(_0x42627c){if(_0x42627c){var _0x3ac129=_0x42627c[_0x0813('0x27')],_0x59a55e=_0x1418c7[_0x0813('0x28')],_0x1c76b0=_0x1418c7[_0x0813('0x28')]+_0x1418c7[_0x0813('0x29')],_0x410776;if(_0x1c76b0>=_0x3ac129){_0x1c76b0=_0x3ac129;_0x410776=0xc8;}else{_0x410776=0xce;}_0x215acb['status'](_0x410776);return _0x215acb[_0x0813('0x2a')](_0x0813('0x2b'),_0x59a55e+'-'+_0x1c76b0+'/'+_0x3ac129)['json'](_0x42627c);}return null;};}function patchUpdates(_0x54bf5d){return function(_0x3c3321){try{jsonpatch[_0x0813('0x2c')](_0x3c3321,_0x54bf5d,!![]);}catch(_0x32086e){return BPromise[_0x0813('0x2d')](_0x32086e);}return _0x3c3321[_0x0813('0x2e')]();};}function saveUpdates(_0x369665,_0x5eba65){return function(_0x17137a){if(_0x17137a){return _0x17137a[_0x0813('0x2f')](_0x369665)['then'](function(_0x47ae8d){return _0x47ae8d;});}return null;};}function removeEntity(_0x2b70d7,_0x235927){return function(_0x3134bb){if(_0x3134bb){return _0x3134bb['destroy']()[_0x0813('0x1a')](function(){_0x2b70d7[_0x0813('0x25')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5e99c4,_0x4214bf){return function(_0xb738e3){if(!_0xb738e3){_0x5e99c4[_0x0813('0x30')](0x194);}return _0xb738e3;};}function handleError(_0x2f82e8,_0x586c2e){_0x586c2e=_0x586c2e||0x1f4;return function(_0xda3533){logger[_0x0813('0x20')](_0xda3533[_0x0813('0x31')]);if(_0xda3533[_0x0813('0x32')]){delete _0xda3533['name'];}_0x2f82e8['status'](_0x586c2e)[_0x0813('0x33')](_0xda3533);};}exports[_0x0813('0x34')]=function(_0x3c5013,_0x5d2d48){var _0x2c902d={},_0x309e14={},_0x2d0b77={'count':0x0,'rows':[]};var _0x5b637f=db['VtigerAccount'][_0x0813('0x35')];_0x309e14[_0x0813('0x36')]=_[_0x0813('0x37')](_0x5b637f);_0x309e14[_0x0813('0x38')]=_[_0x0813('0x37')](_0x3c5013[_0x0813('0x38')]);_0x309e14['filters']=_[_0x0813('0x39')](_0x309e14['model'],_0x309e14['query']);_0x2c902d['attributes']=_[_0x0813('0x39')](_0x309e14[_0x0813('0x36')],qs['fields'](_0x3c5013['query'][_0x0813('0x3a')]));_0x2c902d[_0x0813('0x3b')]=_0x2c902d[_0x0813('0x3b')][_0x0813('0x3c')]?_0x2c902d[_0x0813('0x3b')]:_0x309e14[_0x0813('0x36')];if(!_0x3c5013[_0x0813('0x38')][_0x0813('0x3d')](_0x0813('0x3e'))){_0x2c902d[_0x0813('0x29')]=qs['limit'](_0x3c5013['query']['limit']);_0x2c902d[_0x0813('0x28')]=qs[_0x0813('0x28')](_0x3c5013['query'][_0x0813('0x28')]);}_0x2c902d[_0x0813('0x3f')]=qs[_0x0813('0x40')](_0x3c5013['query'][_0x0813('0x40')]);_0x2c902d[_0x0813('0x41')]=qs[_0x0813('0x42')](_['pick'](_0x3c5013[_0x0813('0x38')],_0x309e14[_0x0813('0x42')]));if(_0x3c5013[_0x0813('0x38')]['filter']){_0x2c902d[_0x0813('0x41')]=_[_0x0813('0x43')](_0x2c902d['where'],{'$or':_[_0x0813('0x44')](_0x5b637f,function(_0x3c5695){if(_0x3c5695['type'][_0x0813('0x45')]!=='VIRTUAL'){var _0x219a35={};_0x219a35[_0x3c5695[_0x0813('0x46')]]={'$like':'%'+_0x3c5013[_0x0813('0x38')]['filter']+'%'};return _0x219a35;}})});}_0x2c902d=_[_0x0813('0x43')]({},_0x2c902d,_0x3c5013['options']);var _0x219884={'where':_0x2c902d[_0x0813('0x41')]};return db[_0x0813('0x47')][_0x0813('0x27')](_0x219884)[_0x0813('0x1a')](function(_0x1b446c){_0x2d0b77['count']=_0x1b446c;if(_0x3c5013[_0x0813('0x38')]['includeAll']){_0x2c902d[_0x0813('0x48')]=[{'all':!![]}];}return db['VtigerAccount']['findAll'](_0x2c902d);})['then'](function(_0x297fda){_0x2d0b77[_0x0813('0x49')]=_0x297fda;return _0x2d0b77;})[_0x0813('0x1a')](respondWithFilteredResult(_0x5d2d48,_0x2c902d))[_0x0813('0x4a')](handleError(_0x5d2d48,null));};exports[_0x0813('0x4b')]=function(_0x308081,_0x5d8eb0){var _0x5d1efa={'raw':![],'where':{'id':_0x308081[_0x0813('0x4c')]['id']}},_0x382c01={};_0x382c01[_0x0813('0x36')]=_[_0x0813('0x37')](db[_0x0813('0x47')][_0x0813('0x35')]);_0x382c01[_0x0813('0x38')]=_[_0x0813('0x37')](_0x308081['query']);_0x382c01[_0x0813('0x42')]=_[_0x0813('0x39')](_0x382c01[_0x0813('0x36')],_0x382c01[_0x0813('0x38')]);_0x5d1efa[_0x0813('0x3b')]=_[_0x0813('0x39')](_0x382c01['model'],qs[_0x0813('0x3a')](_0x308081['query'][_0x0813('0x3a')]));_0x5d1efa[_0x0813('0x3b')]=_0x5d1efa[_0x0813('0x3b')][_0x0813('0x3c')]?_0x5d1efa['attributes']:_0x382c01[_0x0813('0x36')];if(_0x308081[_0x0813('0x38')][_0x0813('0x4d')]){_0x5d1efa[_0x0813('0x48')]=[{'all':!![]}];}_0x5d1efa=_['merge']({},_0x5d1efa,_0x308081[_0x0813('0x4e')]);return db[_0x0813('0x47')]['find'](_0x5d1efa)['then'](handleEntityNotFound(_0x5d8eb0,null))[_0x0813('0x1a')](respondWithResult(_0x5d8eb0,null))[_0x0813('0x4a')](handleError(_0x5d8eb0,null));};exports[_0x0813('0x4f')]=function(_0x4afe57,_0x4b713a){return db['VtigerAccount']['create'](_0x4afe57[_0x0813('0x50')],{})[_0x0813('0x1a')](respondWithResult(_0x4b713a,0xc9))[_0x0813('0x4a')](handleError(_0x4b713a,null));};exports[_0x0813('0x2f')]=function(_0x56b825,_0x2432bc){if(_0x56b825[_0x0813('0x50')]['id']){delete _0x56b825['body']['id'];}return db['VtigerAccount'][_0x0813('0x51')]({'where':{'id':_0x56b825['params']['id']}})[_0x0813('0x1a')](handleEntityNotFound(_0x2432bc,null))[_0x0813('0x1a')](saveUpdates(_0x56b825[_0x0813('0x50')],null))['then'](respondWithResult(_0x2432bc,null))[_0x0813('0x4a')](handleError(_0x2432bc,null));};exports[_0x0813('0x52')]=function(_0x30b1ee,_0x230ec4){return db[_0x0813('0x47')][_0x0813('0x51')]({'where':{'id':_0x30b1ee['params']['id']}})['then'](handleEntityNotFound(_0x230ec4,null))[_0x0813('0x1a')](removeEntity(_0x230ec4,null))[_0x0813('0x4a')](handleError(_0x230ec4,null));};exports[_0x0813('0x53')]=function(_0x132ca7,_0x4eea34,_0x42314d){var _0x4801fb={};var _0x3bb1bb={};var _0x13e1fc;var _0x76fecb;return db[_0x0813('0x47')][_0x0813('0x54')]({'where':{'id':_0x132ca7[_0x0813('0x4c')]['id']}})[_0x0813('0x1a')](handleEntityNotFound(_0x4eea34,null))[_0x0813('0x1a')](function(_0x4af1a5){if(_0x4af1a5){_0x13e1fc=_0x4af1a5;_0x3bb1bb[_0x0813('0x36')]=_[_0x0813('0x37')](db[_0x0813('0x55')][_0x0813('0x35')]);_0x3bb1bb[_0x0813('0x38')]=_[_0x0813('0x37')](_0x132ca7[_0x0813('0x38')]);_0x3bb1bb['filters']=_[_0x0813('0x39')](_0x3bb1bb[_0x0813('0x36')],_0x3bb1bb[_0x0813('0x38')]);_0x4801fb['attributes']=_[_0x0813('0x39')](_0x3bb1bb[_0x0813('0x36')],qs[_0x0813('0x3a')](_0x132ca7[_0x0813('0x38')][_0x0813('0x3a')]));_0x4801fb[_0x0813('0x3b')]=_0x4801fb[_0x0813('0x3b')][_0x0813('0x3c')]?_0x4801fb[_0x0813('0x3b')]:_0x3bb1bb[_0x0813('0x36')];_0x4801fb[_0x0813('0x3f')]=qs['sort'](_0x132ca7[_0x0813('0x38')][_0x0813('0x40')]);_0x4801fb['where']=qs[_0x0813('0x42')](_['pick'](_0x132ca7[_0x0813('0x38')],_0x3bb1bb['filters']));if(_0x132ca7['query']['filter']){_0x4801fb[_0x0813('0x41')]=_[_0x0813('0x43')](_0x4801fb[_0x0813('0x41')],{'$or':_['map'](_0x4801fb[_0x0813('0x3b')],function(_0x5783cd){var _0x4e828e={};_0x4e828e[_0x5783cd]={'$like':'%'+_0x132ca7[_0x0813('0x38')]['filter']+'%'};return _0x4e828e;})});}_0x4801fb=_[_0x0813('0x43')]({},_0x4801fb,_0x132ca7[_0x0813('0x4e')]);return _0x13e1fc[_0x0813('0x53')](_0x4801fb);}})[_0x0813('0x1a')](function(_0x19871f){if(_0x19871f){_0x76fecb=_0x19871f[_0x0813('0x3c')];if(!_0x132ca7[_0x0813('0x38')][_0x0813('0x3d')](_0x0813('0x3e'))){_0x4801fb['limit']=qs['limit'](_0x132ca7['query'][_0x0813('0x29')]);_0x4801fb[_0x0813('0x28')]=qs[_0x0813('0x28')](_0x132ca7[_0x0813('0x38')][_0x0813('0x28')]);}return _0x13e1fc['getConfigurations'](_0x4801fb);}})['then'](function(_0x417dc9){if(_0x417dc9){return _0x417dc9?{'count':_0x76fecb,'rows':_0x417dc9}:null;}})['then'](respondWithResult(_0x4eea34,null))[_0x0813('0x4a')](handleError(_0x4eea34,null));};exports['addConfiguration']=function(_0x447fed,_0x35b22d,_0x5c92a4){if(_0x447fed['body']['id']){delete _0x447fed[_0x0813('0x50')]['id'];}return db[_0x0813('0x47')][_0x0813('0x54')]({'where':{'id':_0x447fed['params']['id']}})[_0x0813('0x1a')](handleEntityNotFound(_0x35b22d,null))[_0x0813('0x1a')](function(_0x4a3ad3){if(_0x4a3ad3){_0x447fed[_0x0813('0x50')][_0x0813('0x56')]=_0x4a3ad3['id'];_0x447fed['body'][_0x0813('0x57')]=integrations[_0x0813('0x58')](_0x447fed[_0x0813('0x50')]['channel'],_0x447fed[_0x0813('0x50')][_0x0813('0x59')]);_0x447fed['body'][_0x0813('0x5a')]=integrations[_0x0813('0x5b')](_0x447fed[_0x0813('0x50')][_0x0813('0x5c')],_0x447fed[_0x0813('0x50')][_0x0813('0x59')]);return db['VtigerConfiguration'][_0x0813('0x4f')](_0x447fed[_0x0813('0x50')],{'include':[{'model':db['VtigerField'],'as':'Subjects'},{'model':db[_0x0813('0x5d')],'as':_0x0813('0x5a')}]});}return null;})[_0x0813('0x1a')](respondWithResult(_0x35b22d,null))[_0x0813('0x4a')](handleError(_0x35b22d,null));};var md5=require('md5');exports['getFields']=function(_0x40565d,_0x12ae68,_0x3716f7){var _0x5d9d1d=null;var _0x3ca55b=null;var _0x450af4=null;var _0x3cab70=null;var _0x361cf5='';return db['VtigerAccount'][_0x0813('0x54')]({'where':{'id':_0x40565d[_0x0813('0x4c')]['id']},'attributes':['id',_0x0813('0x32'),_0x0813('0x5e'),_0x0813('0x5f'),_0x0813('0x60'),_0x0813('0x61'),_0x0813('0x62'),_0x0813('0x63')]})[_0x0813('0x1a')](handleEntityNotFound(_0x12ae68,null))[_0x0813('0x1a')](function(_0x154b23){if(_0x154b23){_0x5d9d1d=_0x154b23[_0x0813('0x5e')];_0x3ca55b=_0x154b23[_0x0813('0x63')];_0x450af4=_0x154b23[_0x0813('0x60')];_0x361cf5=_0x154b23[_0x0813('0x61')];var _0x4fcc6f=_0x361cf5[_0x0813('0x64')](-0x1);if(_0x4fcc6f==='/'){_0x361cf5=_0x361cf5[_0x0813('0x65')](0x0,_0x361cf5[_0x0813('0x66')](_0x4fcc6f));}_0x3cab70=util[_0x0813('0x67')]('%s/webservice.php',_0x361cf5);var _0x50b687={'method':'GET','uri':_0x3cab70,'qs':{'operation':_0x0813('0x68'),'username':_0x154b23[_0x0813('0x5e')]},'json':!![]};return rp(_0x50b687);}})['then'](function(_0x1c2a52){if(_0x1c2a52[_0x0813('0x69')]){var _0x5a61c5={'method':_0x0813('0x6a'),'uri':_0x3cab70,'form':{'operation':_0x0813('0x6b'),'username':_0x5d9d1d,'accessKey':md5(_0x1c2a52[_0x0813('0x24')][_0x0813('0x6c')]+_0x3ca55b)},'json':!![]};return rp(_0x5a61c5);}})[_0x0813('0x1a')](function(_0x77a5a0){if(_0x77a5a0['success']){var _0x235e61={'method':'GET','uri':_0x3cab70,'qs':{'operation':_0x0813('0x6d'),'username':_0x5d9d1d,'sessionName':_0x77a5a0[_0x0813('0x24')][_0x0813('0x6e')],'elementType':_0x450af4},'json':!![]};return rp(_0x235e61);}})[_0x0813('0x1a')](function(_0x3adfea){if(_0x3adfea['success']){var _0x9c22c5=[_0x0813('0x6f'),_0x0813('0x70'),'owner'];_['remove'](_0x3adfea[_0x0813('0x24')][_0x0813('0x3a')],function(_0xeec68a){return _0x9c22c5[_0x0813('0x71')](_0xeec68a[_0x0813('0x59')]['name']);});_[_0x0813('0x72')](_0x3adfea[_0x0813('0x24')]['fields'],function(_0x1ad52a){return _0x1ad52a[_0x0813('0x73')]===_0x0813('0x74');});return{'count':_0x3adfea[_0x0813('0x24')][_0x0813('0x3a')][_0x0813('0x3c')],'rows':_['map'](_0x3adfea[_0x0813('0x24')][_0x0813('0x3a')],function(_0x5ed158){return{'id':_0x5ed158[_0x0813('0x32')],'name':_0x5ed158[_0x0813('0x75')],'custom':_['startsWith'](_0x5ed158[_0x0813('0x32')],'cf_')?!![]:![],'options':_0x5ed158[_0x0813('0x59')]['name']===_0x0813('0x76')&&_0x5ed158[_0x0813('0x59')][_0x0813('0x77')]['length']>0x0?_[_0x0813('0x44')](_0x5ed158[_0x0813('0x59')]['picklistValues'],function(_0x3662fc){return{'name':_0x3662fc[_0x0813('0x75')],'value':_0x3662fc[_0x0813('0x78')]};}):[]};})};}})[_0x0813('0x1a')](respondWithResult(_0x12ae68,null))['catch'](function(_0xfb1ecd){console['log'](_0x0813('0x79')+_0xfb1ecd);var _0x48b54f=_0x40565d['query'][_0x0813('0x7a')]?0x1f4:_0xfb1ecd['statusCode']||0x1f4;logger[_0x0813('0x20')](_0x0813('0x7b'),_0x0813('0x7c'),_0x48b54f,JSON[_0x0813('0x1f')](_0xfb1ecd));delete _0xfb1ecd['name'];if(_0x48b54f===0x191){_0x48b54f=0x190;}_0x12ae68[_0x0813('0x25')](_0x48b54f)[_0x0813('0x33')](_0x40565d[_0x0813('0x38')][_0x0813('0x7a')]?{'message':'Wrong\x20credentials','statusCode':_0xfb1ecd[_0x0813('0x7d')]}:_0xfb1ecd);});};
\ No newline at end of file
index 1afd9b4..b02a9f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeda7=['request-promise','define','VtigerAccount','int_vtiger_accounts','lodash','../../config/logger','moment','bluebird'];(function(_0x2c610,_0x4741fd){var _0x55665b=function(_0xd3ab96){while(--_0xd3ab96){_0x2c610['push'](_0x2c610['shift']());}};_0x55665b(++_0x4741fd);}(_0xeda7,0x154));var _0x7eda=function(_0x53abe5,_0x33a9e5){_0x53abe5=_0x53abe5-0x0;var _0xc1c37e=_0xeda7[_0x53abe5];return _0xc1c37e;};'use strict';var _=require(_0x7eda('0x0'));var util=require('util');var logger=require(_0x7eda('0x1'))('api');var moment=require(_0x7eda('0x2'));var BPromise=require(_0x7eda('0x3'));var rp=require(_0x7eda('0x4'));var attributes=require('./intVtigerAccount.attributes');var integrations=require('../../components/integrations/configuration');module['exports']=function(_0x1fe355,_0xeb4be1){return _0x1fe355[_0x7eda('0x5')](_0x7eda('0x6'),attributes,{'tableName':_0x7eda('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9fa9=['exports','define','lodash','../../config/logger','moment','bluebird','request-promise','./intVtigerAccount.attributes','../../components/integrations/configuration'];(function(_0x3bd838,_0x3c9e5f){var _0x100e9b=function(_0x27bc77){while(--_0x27bc77){_0x3bd838['push'](_0x3bd838['shift']());}};_0x100e9b(++_0x3c9e5f);}(_0x9fa9,0x92));var _0x99fa=function(_0x1b8c5d,_0x465f24){_0x1b8c5d=_0x1b8c5d-0x0;var _0x643e1f=_0x9fa9[_0x1b8c5d];return _0x643e1f;};'use strict';var _=require(_0x99fa('0x0'));var util=require('util');var logger=require(_0x99fa('0x1'))('api');var moment=require(_0x99fa('0x2'));var BPromise=require(_0x99fa('0x3'));var rp=require(_0x99fa('0x4'));var attributes=require(_0x99fa('0x5'));var integrations=require(_0x99fa('0x6'));module[_0x99fa('0x7')]=function(_0x3cf46e,_0x4eecfe){return _0x3cf46e[_0x99fa('0x8')]('VtigerAccount',attributes,{'tableName':'int_vtiger_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 48dc156..0d7cc56 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3946=['find','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','then','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','error','message','info','result','GetVtigerAccount','VtigerAccount','findAll','options','raw','where','attributes','limit','include','map','model','catch','ShowVtigerAccount'];(function(_0x17af24,_0x580413){var _0x5ad696=function(_0x1ec9e9){while(--_0x1ec9e9){_0x17af24['push'](_0x17af24['shift']());}};_0x5ad696(++_0x580413);}(_0x3946,0x1c8));var _0x6394=function(_0x5b987d,_0x24a344){_0x5b987d=_0x5b987d-0x0;var _0x282e0d=_0x3946[_0x5b987d];return _0x282e0d;};'use strict';var _=require(_0x6394('0x0'));var util=require(_0x6394('0x1'));var moment=require(_0x6394('0x2'));var BPromise=require('bluebird');var rs=require(_0x6394('0x3'));var fs=require('fs');var Redis=require(_0x6394('0x4'));var db=require(_0x6394('0x5'))['db'];var utils=require(_0x6394('0x6'));var logger=require(_0x6394('0x7'))('rpc');var config=require(_0x6394('0x8'));var jayson=require(_0x6394('0x9'));var client=jayson[_0x6394('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x4b92d8,_0x5715ad,_0x205f27){return new BPromise(function(_0x5b96f9,_0x32dc5b){return client['request'](_0x4b92d8,_0x205f27)[_0x6394('0xb')](function(_0x3b413b){logger['info'](_0x6394('0xc'),_0x5715ad,_0x6394('0xd'));logger[_0x6394('0xe')](_0x6394('0xf'),_0x5715ad,'request\x20sent',JSON[_0x6394('0x10')](_0x3b413b));if(_0x3b413b['error']){if(_0x3b413b[_0x6394('0x11')]['code']===0x1f4){logger[_0x6394('0x11')]('VtigerAccount,\x20%s,\x20%s',_0x5715ad,_0x3b413b[_0x6394('0x11')][_0x6394('0x12')]);return _0x32dc5b(_0x3b413b[_0x6394('0x11')]['message']);}logger['error'](_0x6394('0xc'),_0x5715ad,_0x3b413b[_0x6394('0x11')]['message']);return _0x5b96f9(_0x3b413b['error']['message']);}else{logger[_0x6394('0x13')]('VtigerAccount,\x20%s,\x20%s',_0x5715ad,'request\x20sent');_0x5b96f9(_0x3b413b[_0x6394('0x14')][_0x6394('0x12')]);}})['catch'](function(_0x46c185){logger[_0x6394('0x11')](_0x6394('0xc'),_0x5715ad,_0x46c185);_0x32dc5b(_0x46c185);});});}exports[_0x6394('0x15')]=function(_0x312a6a){var _0x2e9cdd=this;return new Promise(function(_0x942b3a,_0xeea662){return db[_0x6394('0x16')][_0x6394('0x17')]({'raw':_0x312a6a[_0x6394('0x18')]?_0x312a6a[_0x6394('0x18')][_0x6394('0x19')]===undefined?!![]:![]:!![],'where':_0x312a6a[_0x6394('0x18')]?_0x312a6a[_0x6394('0x18')][_0x6394('0x1a')]||null:null,'attributes':_0x312a6a[_0x6394('0x18')]?_0x312a6a[_0x6394('0x18')][_0x6394('0x1b')]||null:null,'limit':_0x312a6a[_0x6394('0x18')]?_0x312a6a[_0x6394('0x18')][_0x6394('0x1c')]||null:null,'include':_0x312a6a[_0x6394('0x18')]?_0x312a6a[_0x6394('0x18')][_0x6394('0x1d')]?_[_0x6394('0x1e')](_0x312a6a[_0x6394('0x18')][_0x6394('0x1d')],function(_0x6e4d83){return{'model':db[_0x6e4d83[_0x6394('0x1f')]],'as':_0x6e4d83['as'],'attributes':_0x6e4d83[_0x6394('0x1b')],'include':_0x6e4d83[_0x6394('0x1d')]?_[_0x6394('0x1e')](_0x6e4d83[_0x6394('0x1d')],function(_0x56b50b){return{'model':db[_0x56b50b[_0x6394('0x1f')]],'as':_0x56b50b['as'],'attributes':_0x56b50b['attributes'],'include':_0x56b50b['include']?_['map'](_0x56b50b[_0x6394('0x1d')],function(_0x25f18e){return{'model':db[_0x25f18e[_0x6394('0x1f')]],'as':_0x25f18e['as'],'attributes':_0x25f18e['attributes']};}):[]};}):[]};}):[]:[]})[_0x6394('0xb')](function(_0x50df06){logger[_0x6394('0x13')](_0x6394('0x15'),_0x312a6a);logger['debug'](_0x6394('0x15'),_0x312a6a,JSON[_0x6394('0x10')](_0x50df06));_0x942b3a(_0x50df06);})[_0x6394('0x20')](function(_0x562e5c){logger[_0x6394('0x11')]('GetVtigerAccount',_0x562e5c[_0x6394('0x12')],_0x312a6a);_0xeea662(_0x2e9cdd[_0x6394('0x11')](0x1f4,_0x562e5c[_0x6394('0x12')]));});});};exports[_0x6394('0x21')]=function(_0x5678fd){var _0xaabb11=this;return new Promise(function(_0x403a20,_0x361b01){return db['VtigerAccount'][_0x6394('0x22')]({'raw':_0x5678fd[_0x6394('0x18')]?_0x5678fd['options'][_0x6394('0x19')]===undefined?!![]:![]:!![],'where':_0x5678fd[_0x6394('0x18')]?_0x5678fd[_0x6394('0x18')][_0x6394('0x1a')]||null:null,'attributes':_0x5678fd['options']?_0x5678fd[_0x6394('0x18')][_0x6394('0x1b')]||null:null,'include':_0x5678fd['options']?_0x5678fd[_0x6394('0x18')][_0x6394('0x1d')]?_[_0x6394('0x1e')](_0x5678fd['options'][_0x6394('0x1d')],function(_0x1d6a0d){return{'model':db[_0x1d6a0d[_0x6394('0x1f')]],'as':_0x1d6a0d['as'],'attributes':_0x1d6a0d['attributes'],'include':_0x1d6a0d[_0x6394('0x1d')]?_['map'](_0x1d6a0d[_0x6394('0x1d')],function(_0x3c0d43){return{'model':db[_0x3c0d43[_0x6394('0x1f')]],'as':_0x3c0d43['as'],'attributes':_0x3c0d43[_0x6394('0x1b')],'include':_0x3c0d43['include']?_['map'](_0x3c0d43[_0x6394('0x1d')],function(_0x273e78){return{'model':db[_0x273e78[_0x6394('0x1f')]],'as':_0x273e78['as'],'attributes':_0x273e78[_0x6394('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x6394('0xb')](function(_0x138ab8){logger[_0x6394('0x13')](_0x6394('0x21'),_0x5678fd);logger[_0x6394('0xe')](_0x6394('0x21'),_0x5678fd,JSON['stringify'](_0x138ab8));_0x403a20(_0x138ab8);})[_0x6394('0x20')](function(_0x4586d9){logger['error'](_0x6394('0x21'),_0x4586d9[_0x6394('0x12')],_0x5678fd);_0x361b01(_0xaabb11[_0x6394('0x11')](0x1f4,_0x4586d9[_0x6394('0x12')]));});});};
\ No newline at end of file
+var _0xa211=['http','request','then','info','VtigerAccount,\x20%s,\x20%s','request\x20sent','debug','VtigerAccount,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','GetVtigerAccount','VtigerAccount','findAll','options','raw','where','attributes','limit','include','map','model','ShowVtigerAccount','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise'];(function(_0xe4da01,_0xfc02f9){var _0x488f04=function(_0x6f94c7){while(--_0x6f94c7){_0xe4da01['push'](_0xe4da01['shift']());}};_0x488f04(++_0xfc02f9);}(_0xa211,0x13a));var _0x1a21=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0xa211[_0x57b54c];return _0x59cc19;};'use strict';var _=require(_0x1a21('0x0'));var util=require(_0x1a21('0x1'));var moment=require(_0x1a21('0x2'));var BPromise=require('bluebird');var rs=require(_0x1a21('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1a21('0x4'))['db'];var utils=require(_0x1a21('0x5'));var logger=require(_0x1a21('0x6'))(_0x1a21('0x7'));var config=require(_0x1a21('0x8'));var jayson=require(_0x1a21('0x9'));var client=jayson['client'][_0x1a21('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x283631,_0x1f8415,_0xacfbfc){return new BPromise(function(_0x130b2e,_0x4dcd9e){return client[_0x1a21('0xb')](_0x283631,_0xacfbfc)[_0x1a21('0xc')](function(_0x7ae097){logger[_0x1a21('0xd')](_0x1a21('0xe'),_0x1f8415,_0x1a21('0xf'));logger[_0x1a21('0x10')](_0x1a21('0x11'),_0x1f8415,_0x1a21('0xf'),JSON[_0x1a21('0x12')](_0x7ae097));if(_0x7ae097['error']){if(_0x7ae097['error'][_0x1a21('0x13')]===0x1f4){logger[_0x1a21('0x14')](_0x1a21('0xe'),_0x1f8415,_0x7ae097[_0x1a21('0x14')][_0x1a21('0x15')]);return _0x4dcd9e(_0x7ae097[_0x1a21('0x14')][_0x1a21('0x15')]);}logger['error'](_0x1a21('0xe'),_0x1f8415,_0x7ae097[_0x1a21('0x14')][_0x1a21('0x15')]);return _0x130b2e(_0x7ae097[_0x1a21('0x14')][_0x1a21('0x15')]);}else{logger['info']('VtigerAccount,\x20%s,\x20%s',_0x1f8415,'request\x20sent');_0x130b2e(_0x7ae097[_0x1a21('0x16')][_0x1a21('0x15')]);}})[_0x1a21('0x17')](function(_0x241573){logger['error'](_0x1a21('0xe'),_0x1f8415,_0x241573);_0x4dcd9e(_0x241573);});});}exports[_0x1a21('0x18')]=function(_0x5b2985){var _0x3b9f86=this;return new Promise(function(_0x5e807f,_0x2e2b01){return db[_0x1a21('0x19')][_0x1a21('0x1a')]({'raw':_0x5b2985['options']?_0x5b2985[_0x1a21('0x1b')][_0x1a21('0x1c')]===undefined?!![]:![]:!![],'where':_0x5b2985['options']?_0x5b2985[_0x1a21('0x1b')][_0x1a21('0x1d')]||null:null,'attributes':_0x5b2985[_0x1a21('0x1b')]?_0x5b2985[_0x1a21('0x1b')][_0x1a21('0x1e')]||null:null,'limit':_0x5b2985['options']?_0x5b2985[_0x1a21('0x1b')][_0x1a21('0x1f')]||null:null,'include':_0x5b2985[_0x1a21('0x1b')]?_0x5b2985[_0x1a21('0x1b')][_0x1a21('0x20')]?_[_0x1a21('0x21')](_0x5b2985[_0x1a21('0x1b')][_0x1a21('0x20')],function(_0x5c0237){return{'model':db[_0x5c0237[_0x1a21('0x22')]],'as':_0x5c0237['as'],'attributes':_0x5c0237[_0x1a21('0x1e')],'include':_0x5c0237[_0x1a21('0x20')]?_['map'](_0x5c0237[_0x1a21('0x20')],function(_0xe78136){return{'model':db[_0xe78136['model']],'as':_0xe78136['as'],'attributes':_0xe78136[_0x1a21('0x1e')],'include':_0xe78136[_0x1a21('0x20')]?_['map'](_0xe78136[_0x1a21('0x20')],function(_0x43c5f3){return{'model':db[_0x43c5f3[_0x1a21('0x22')]],'as':_0x43c5f3['as'],'attributes':_0x43c5f3['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x20d2c5){logger[_0x1a21('0xd')](_0x1a21('0x18'),_0x5b2985);logger[_0x1a21('0x10')](_0x1a21('0x18'),_0x5b2985,JSON[_0x1a21('0x12')](_0x20d2c5));_0x5e807f(_0x20d2c5);})['catch'](function(_0x2d1480){logger['error'](_0x1a21('0x18'),_0x2d1480[_0x1a21('0x15')],_0x5b2985);_0x2e2b01(_0x3b9f86[_0x1a21('0x14')](0x1f4,_0x2d1480[_0x1a21('0x15')]));});});};exports[_0x1a21('0x23')]=function(_0x5589fb){var _0x30e250=this;return new Promise(function(_0x66f85,_0x68c083){return db['VtigerAccount']['find']({'raw':_0x5589fb[_0x1a21('0x1b')]?_0x5589fb[_0x1a21('0x1b')]['raw']===undefined?!![]:![]:!![],'where':_0x5589fb[_0x1a21('0x1b')]?_0x5589fb['options'][_0x1a21('0x1d')]||null:null,'attributes':_0x5589fb[_0x1a21('0x1b')]?_0x5589fb[_0x1a21('0x1b')][_0x1a21('0x1e')]||null:null,'include':_0x5589fb[_0x1a21('0x1b')]?_0x5589fb[_0x1a21('0x1b')][_0x1a21('0x20')]?_[_0x1a21('0x21')](_0x5589fb[_0x1a21('0x1b')][_0x1a21('0x20')],function(_0x2694b0){return{'model':db[_0x2694b0['model']],'as':_0x2694b0['as'],'attributes':_0x2694b0[_0x1a21('0x1e')],'include':_0x2694b0['include']?_[_0x1a21('0x21')](_0x2694b0[_0x1a21('0x20')],function(_0x4afd4d){return{'model':db[_0x4afd4d[_0x1a21('0x22')]],'as':_0x4afd4d['as'],'attributes':_0x4afd4d['attributes'],'include':_0x4afd4d[_0x1a21('0x20')]?_[_0x1a21('0x21')](_0x4afd4d['include'],function(_0x515b3b){return{'model':db[_0x515b3b['model']],'as':_0x515b3b['as'],'attributes':_0x515b3b['attributes']};}):[]};}):[]};}):[]:[]})[_0x1a21('0xc')](function(_0x1a89b7){logger[_0x1a21('0xd')](_0x1a21('0x23'),_0x5589fb);logger['debug']('ShowVtigerAccount',_0x5589fb,JSON['stringify'](_0x1a89b7));_0x66f85(_0x1a89b7);})[_0x1a21('0x17')](function(_0xd70209){logger[_0x1a21('0x14')](_0x1a21('0x23'),_0xd70209['message'],_0x5589fb);_0x68c083(_0x30e250[_0x1a21('0x14')](0x1f4,_0xd70209[_0x1a21('0x15')]));});});};
\ No newline at end of file
index 5678805..b3f7f58 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(_0x26d6d9,_0x431cb8){var _0x1b4875=function(_0x41111f){while(--_0x41111f){_0x26d6d9['push'](_0x26d6d9['shift']());}};_0x1b4875(++_0x431cb8);}(_0xe706,0xa3));var _0x6e70=function(_0x55b037,_0x2d9392){_0x55b037=_0x55b037-0x0;var _0x5f1053=_0xe706[_0x55b037];return _0x5f1053;};'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 _0xb7e7=['create','put','update','delete','multer','path','express','../../components/auth/service','../../config/environment','./intVtigerConfiguration.controller','get','/:id','isAuthenticated','/:id/fields','getFields','/:id/subjects','/:id/descriptions','getDescriptions','post'];(function(_0x586fa2,_0x1a45bc){var _0x515be9=function(_0x4e90d5){while(--_0x4e90d5){_0x586fa2['push'](_0x586fa2['shift']());}};_0x515be9(++_0x1a45bc);}(_0xb7e7,0x121));var _0x7b7e=function(_0x34843e,_0x4c4224){_0x34843e=_0x34843e-0x0;var _0x598f7f=_0xb7e7[_0x34843e];return _0x598f7f;};'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['show']);router[_0x7b7e('0x6')](_0x7b7e('0x9'),auth[_0x7b7e('0x8')](),controller[_0x7b7e('0xa')]);router[_0x7b7e('0x6')](_0x7b7e('0xb'),auth[_0x7b7e('0x8')](),controller['getSubjects']);router[_0x7b7e('0x6')](_0x7b7e('0xc'),auth[_0x7b7e('0x8')](),controller[_0x7b7e('0xd')]);router[_0x7b7e('0xe')]('/',auth[_0x7b7e('0x8')](),controller[_0x7b7e('0xf')]);router[_0x7b7e('0x10')](_0x7b7e('0x7'),auth['isAuthenticated'](),controller[_0x7b7e('0x11')]);router[_0x7b7e('0x12')]('/:id',auth[_0x7b7e('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 2bc7030..145d424 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0ba=['sequelize','exports'];(function(_0x180b46,_0x1d5ddd){var _0x29d137=function(_0x5ac707){while(--_0x5ac707){_0x180b46['push'](_0x180b46['shift']());}};_0x29d137(++_0x1d5ddd);}(_0xe0ba,0x144));var _0xae0b=function(_0x5834bc,_0x3d4801){_0x5834bc=_0x5834bc-0x0;var _0x3e183a=_0xe0ba[_0x5834bc];return _0x3e183a;};'use strict';var Sequelize=require(_0xae0b('0x0'));module[_0xae0b('0x1')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xbab9=['STRING','exports'];(function(_0x1dd1c1,_0x1320fd){var _0xf842c5=function(_0x396d2b){while(--_0x396d2b){_0x1dd1c1['push'](_0x1dd1c1['shift']());}};_0xf842c5(++_0x1320fd);}(_0xbab9,0x179));var _0x9bab=function(_0x75fe8c,_0x1a58ea){_0x75fe8c=_0x75fe8c-0x0;var _0x3d45aa=_0xbab9[_0x75fe8c];return _0x3d45aa;};'use strict';var Sequelize=require('sequelize');module[_0x9bab('0x0')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x9bab('0x1')]}};
\ No newline at end of file
index 43245fa..9d8e8a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb7e2=['body','getFields','findOne','VtigerField','sort','getSubjects','getDescriptions','html-pdf','rimraf','fast-json-patch','moment','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','client','request','VtigerConfiguration,\x20%s,\x20%s','debug','VtigerConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','result','sendStatus','status','end','json','count','offset','limit','Content-Range','save','then','destroy','stack','name','send','index','rawAttributes','keys','filters','intersection','model','attributes','length','hasOwnProperty','nolimit','query','order','where','pick','filter','merge','map','key','VIRTUAL','field','options','VtigerConfiguration','includeAll','findAll','rows','catch','show','params','fields','find','create'];(function(_0x502c7d,_0x2f1285){var _0x30b7ed=function(_0x2d92f3){while(--_0x2d92f3){_0x502c7d['push'](_0x502c7d['shift']());}};_0x30b7ed(++_0x2f1285);}(_0xb7e2,0x103));var _0x2b7e=function(_0x4d7b04,_0x2dfb19){_0x4d7b04=_0x4d7b04-0x0;var _0x12562a=_0xb7e2[_0x4d7b04];return _0x12562a;};'use strict';var pdf=require(_0x2b7e('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x2b7e('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x2b7e('0x2'));var rp=require('request-promise');var moment=require(_0x2b7e('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x2b7e('0x4'));var util=require(_0x2b7e('0x5'));var path=require(_0x2b7e('0x6'));var sox=require(_0x2b7e('0x7'));var csv=require(_0x2b7e('0x8'));var ejs=require(_0x2b7e('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x2b7e('0xa'));var crypto=require(_0x2b7e('0xb'));var jsforce=require(_0x2b7e('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x2b7e('0x8'));var querystring=require(_0x2b7e('0xd'));var Papa=require(_0x2b7e('0xe'));var authService=require(_0x2b7e('0xf'));var hardwareService=require(_0x2b7e('0x10'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x2b7e('0x11'))(_0x2b7e('0x12'));var utils=require(_0x2b7e('0x13'));var config=require(_0x2b7e('0x14'));var db=require(_0x2b7e('0x15'))['db'];var jayson=require(_0x2b7e('0x16'));var client=jayson[_0x2b7e('0x17')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1ad9c7,_0x241b9c,_0x16a550,_0x108c7e){return new BPromise(function(_0x4e1528,_0x4813b4){var _0x4aaa1a=_0x108c7e||client;return _0x4aaa1a[_0x2b7e('0x18')](_0x1ad9c7,_0x16a550)['then'](function(_0x1eeda0){logger['info'](_0x2b7e('0x19'),_0x241b9c,'request\x20sent');logger[_0x2b7e('0x1a')](_0x2b7e('0x1b'),_0x241b9c,_0x2b7e('0x1c'),JSON['stringify'](_0x1eeda0));if(_0x1eeda0[_0x2b7e('0x1d')]){if(_0x1eeda0[_0x2b7e('0x1d')]['code']===0x1f4){logger[_0x2b7e('0x1d')](_0x2b7e('0x19'),_0x241b9c,_0x1eeda0[_0x2b7e('0x1d')]['message']);return _0x4813b4(_0x1eeda0[_0x2b7e('0x1d')][_0x2b7e('0x1e')]);}logger[_0x2b7e('0x1d')](_0x2b7e('0x19'),_0x241b9c,_0x1eeda0[_0x2b7e('0x1d')]['message']);return _0x4e1528(_0x1eeda0[_0x2b7e('0x1d')]['message']);}else{logger['info'](_0x2b7e('0x19'),_0x241b9c,'request\x20sent');_0x4e1528(_0x1eeda0[_0x2b7e('0x1f')][_0x2b7e('0x1e')]);}})['catch'](function(_0x416aba){logger['error'](_0x2b7e('0x19'),_0x241b9c,_0x416aba);_0x4813b4(_0x416aba);});});}function respondWithStatusCode(_0x22b174,_0x51f854){_0x51f854=_0x51f854||0xcc;return function(_0x4a7e79){if(_0x4a7e79){return _0x22b174[_0x2b7e('0x20')](_0x51f854);}return _0x22b174[_0x2b7e('0x21')](_0x51f854)[_0x2b7e('0x22')]();};}function respondWithResult(_0x6da48a,_0x16f836){_0x16f836=_0x16f836||0xc8;return function(_0x17b0f8){if(_0x17b0f8){return _0x6da48a[_0x2b7e('0x21')](_0x16f836)[_0x2b7e('0x23')](_0x17b0f8);}};}function respondWithFilteredResult(_0x43e0bd,_0x2cb021){return function(_0x111892){if(_0x111892){var _0x1d88e8=_0x111892[_0x2b7e('0x24')],_0x19824e=_0x2cb021[_0x2b7e('0x25')],_0x267091=_0x2cb021[_0x2b7e('0x25')]+_0x2cb021[_0x2b7e('0x26')],_0x4f1ec8;if(_0x267091>=_0x1d88e8){_0x267091=_0x1d88e8;_0x4f1ec8=0xc8;}else{_0x4f1ec8=0xce;}_0x43e0bd[_0x2b7e('0x21')](_0x4f1ec8);return _0x43e0bd['set'](_0x2b7e('0x27'),_0x19824e+'-'+_0x267091+'/'+_0x1d88e8)[_0x2b7e('0x23')](_0x111892);}return null;};}function patchUpdates(_0x5871ac){return function(_0x190438){try{jsonpatch['apply'](_0x190438,_0x5871ac,!![]);}catch(_0x4128b6){return BPromise['reject'](_0x4128b6);}return _0x190438[_0x2b7e('0x28')]();};}function saveUpdates(_0x23b9cf,_0x1f6c89){return function(_0xfbac54){if(_0xfbac54){return _0xfbac54['update'](_0x23b9cf)[_0x2b7e('0x29')](function(_0x4641a8){return _0x4641a8;});}return null;};}function removeEntity(_0xfde0eb,_0x1c9ba5){return function(_0x296155){if(_0x296155){return _0x296155[_0x2b7e('0x2a')]()[_0x2b7e('0x29')](function(){_0xfde0eb['status'](0xcc)[_0x2b7e('0x22')]();});}};}function handleEntityNotFound(_0x105781,_0x448258){return function(_0x575b37){if(!_0x575b37){_0x105781['sendStatus'](0x194);}return _0x575b37;};}function handleError(_0x243446,_0x2da355){_0x2da355=_0x2da355||0x1f4;return function(_0x18d9d0){logger[_0x2b7e('0x1d')](_0x18d9d0[_0x2b7e('0x2b')]);if(_0x18d9d0[_0x2b7e('0x2c')]){delete _0x18d9d0[_0x2b7e('0x2c')];}_0x243446['status'](_0x2da355)[_0x2b7e('0x2d')](_0x18d9d0);};}exports[_0x2b7e('0x2e')]=function(_0x18e42c,_0xd97f2a){var _0xdc8726={},_0x55afa9={},_0x26a9f4={'count':0x0,'rows':[]};var _0x4f1574=db['VtigerConfiguration'][_0x2b7e('0x2f')];_0x55afa9['model']=_[_0x2b7e('0x30')](_0x4f1574);_0x55afa9['query']=_[_0x2b7e('0x30')](_0x18e42c['query']);_0x55afa9[_0x2b7e('0x31')]=_[_0x2b7e('0x32')](_0x55afa9[_0x2b7e('0x33')],_0x55afa9['query']);_0xdc8726[_0x2b7e('0x34')]=_[_0x2b7e('0x32')](_0x55afa9[_0x2b7e('0x33')],qs['fields'](_0x18e42c['query']['fields']));_0xdc8726[_0x2b7e('0x34')]=_0xdc8726['attributes'][_0x2b7e('0x35')]?_0xdc8726[_0x2b7e('0x34')]:_0x55afa9[_0x2b7e('0x33')];if(!_0x18e42c['query'][_0x2b7e('0x36')](_0x2b7e('0x37'))){_0xdc8726[_0x2b7e('0x26')]=qs[_0x2b7e('0x26')](_0x18e42c[_0x2b7e('0x38')]['limit']);_0xdc8726['offset']=qs[_0x2b7e('0x25')](_0x18e42c['query']['offset']);}_0xdc8726[_0x2b7e('0x39')]=qs['sort'](_0x18e42c[_0x2b7e('0x38')]['sort']);_0xdc8726[_0x2b7e('0x3a')]=qs['filters'](_[_0x2b7e('0x3b')](_0x18e42c[_0x2b7e('0x38')],_0x55afa9['filters']));if(_0x18e42c[_0x2b7e('0x38')][_0x2b7e('0x3c')]){_0xdc8726['where']=_[_0x2b7e('0x3d')](_0xdc8726['where'],{'$or':_[_0x2b7e('0x3e')](_0x4f1574,function(_0x383d7f){if(_0x383d7f['type'][_0x2b7e('0x3f')]!==_0x2b7e('0x40')){var _0x557a28={};_0x557a28[_0x383d7f[_0x2b7e('0x41')]]={'$like':'%'+_0x18e42c[_0x2b7e('0x38')]['filter']+'%'};return _0x557a28;}})});}_0xdc8726=_[_0x2b7e('0x3d')]({},_0xdc8726,_0x18e42c[_0x2b7e('0x42')]);var _0x36732a={'where':_0xdc8726[_0x2b7e('0x3a')]};return db[_0x2b7e('0x43')][_0x2b7e('0x24')](_0x36732a)['then'](function(_0x1edc12){_0x26a9f4[_0x2b7e('0x24')]=_0x1edc12;if(_0x18e42c[_0x2b7e('0x38')][_0x2b7e('0x44')]){_0xdc8726['include']=[{'all':!![]}];}return db[_0x2b7e('0x43')][_0x2b7e('0x45')](_0xdc8726);})[_0x2b7e('0x29')](function(_0x4894c9){_0x26a9f4[_0x2b7e('0x46')]=_0x4894c9;return _0x26a9f4;})['then'](respondWithFilteredResult(_0xd97f2a,_0xdc8726))[_0x2b7e('0x47')](handleError(_0xd97f2a,null));};exports[_0x2b7e('0x48')]=function(_0x83c595,_0x212079){var _0x4106f7={'raw':![],'where':{'id':_0x83c595[_0x2b7e('0x49')]['id']}},_0x7bbff8={};_0x7bbff8[_0x2b7e('0x33')]=_['keys'](db[_0x2b7e('0x43')][_0x2b7e('0x2f')]);_0x7bbff8[_0x2b7e('0x38')]=_[_0x2b7e('0x30')](_0x83c595[_0x2b7e('0x38')]);_0x7bbff8[_0x2b7e('0x31')]=_[_0x2b7e('0x32')](_0x7bbff8[_0x2b7e('0x33')],_0x7bbff8[_0x2b7e('0x38')]);_0x4106f7[_0x2b7e('0x34')]=_[_0x2b7e('0x32')](_0x7bbff8[_0x2b7e('0x33')],qs[_0x2b7e('0x4a')](_0x83c595[_0x2b7e('0x38')][_0x2b7e('0x4a')]));_0x4106f7[_0x2b7e('0x34')]=_0x4106f7['attributes']['length']?_0x4106f7[_0x2b7e('0x34')]:_0x7bbff8[_0x2b7e('0x33')];if(_0x83c595[_0x2b7e('0x38')][_0x2b7e('0x44')]){_0x4106f7['include']=[{'all':!![]}];}_0x4106f7=_[_0x2b7e('0x3d')]({},_0x4106f7,_0x83c595[_0x2b7e('0x42')]);return db['VtigerConfiguration'][_0x2b7e('0x4b')](_0x4106f7)[_0x2b7e('0x29')](handleEntityNotFound(_0x212079,null))[_0x2b7e('0x29')](respondWithResult(_0x212079,null))[_0x2b7e('0x47')](handleError(_0x212079,null));};exports[_0x2b7e('0x4c')]=function(_0x5f6cd3,_0x504871){return db[_0x2b7e('0x43')][_0x2b7e('0x4c')](_0x5f6cd3[_0x2b7e('0x4d')],{})[_0x2b7e('0x29')](respondWithResult(_0x504871,0xc9))[_0x2b7e('0x47')](handleError(_0x504871,null));};exports['update']=function(_0x480454,_0x5d84b6){if(_0x480454[_0x2b7e('0x4d')]['id']){delete _0x480454[_0x2b7e('0x4d')]['id'];}return db[_0x2b7e('0x43')][_0x2b7e('0x4b')]({'where':{'id':_0x480454['params']['id']}})['then'](handleEntityNotFound(_0x5d84b6,null))[_0x2b7e('0x29')](saveUpdates(_0x480454['body'],null))[_0x2b7e('0x29')](respondWithResult(_0x5d84b6,null))[_0x2b7e('0x47')](handleError(_0x5d84b6,null));};exports[_0x2b7e('0x2a')]=function(_0x45d301,_0x7942ec){return db[_0x2b7e('0x43')][_0x2b7e('0x4b')]({'where':{'id':_0x45d301[_0x2b7e('0x49')]['id']}})[_0x2b7e('0x29')](handleEntityNotFound(_0x7942ec,null))[_0x2b7e('0x29')](removeEntity(_0x7942ec,null))[_0x2b7e('0x47')](handleError(_0x7942ec,null));};exports[_0x2b7e('0x4e')]=function(_0x4bae9a,_0x502ad9,_0x3f6fde){var _0x141735={};var _0x519219={};var _0xade0dc;var _0x1278b6;return db[_0x2b7e('0x43')][_0x2b7e('0x4f')]({'where':{'id':_0x4bae9a[_0x2b7e('0x49')]['id']}})[_0x2b7e('0x29')](handleEntityNotFound(_0x502ad9,null))[_0x2b7e('0x29')](function(_0x241d90){if(_0x241d90){_0xade0dc=_0x241d90;_0x519219[_0x2b7e('0x33')]=_['keys'](db[_0x2b7e('0x50')][_0x2b7e('0x2f')]);_0x519219[_0x2b7e('0x38')]=_[_0x2b7e('0x30')](_0x4bae9a[_0x2b7e('0x38')]);_0x519219[_0x2b7e('0x31')]=_[_0x2b7e('0x32')](_0x519219[_0x2b7e('0x33')],_0x519219[_0x2b7e('0x38')]);_0x141735[_0x2b7e('0x34')]=_[_0x2b7e('0x32')](_0x519219['model'],qs['fields'](_0x4bae9a[_0x2b7e('0x38')]['fields']));_0x141735[_0x2b7e('0x34')]=_0x141735[_0x2b7e('0x34')][_0x2b7e('0x35')]?_0x141735['attributes']:_0x519219[_0x2b7e('0x33')];_0x141735['order']=qs['sort'](_0x4bae9a[_0x2b7e('0x38')][_0x2b7e('0x51')]);_0x141735[_0x2b7e('0x3a')]=qs[_0x2b7e('0x31')](_['pick'](_0x4bae9a['query'],_0x519219[_0x2b7e('0x31')]));if(_0x4bae9a[_0x2b7e('0x38')][_0x2b7e('0x3c')]){_0x141735[_0x2b7e('0x3a')]=_['merge'](_0x141735['where'],{'$or':_[_0x2b7e('0x3e')](_0x141735['attributes'],function(_0x4cef95){var _0x1e9974={};_0x1e9974[_0x4cef95]={'$like':'%'+_0x4bae9a[_0x2b7e('0x38')][_0x2b7e('0x3c')]+'%'};return _0x1e9974;})});}_0x141735=_['merge']({},_0x141735,_0x4bae9a[_0x2b7e('0x42')]);return _0xade0dc[_0x2b7e('0x4e')](_0x141735);}})['then'](function(_0x4b06ed){if(_0x4b06ed){_0x1278b6=_0x4b06ed[_0x2b7e('0x35')];if(!_0x4bae9a[_0x2b7e('0x38')][_0x2b7e('0x36')](_0x2b7e('0x37'))){_0x141735['limit']=qs['limit'](_0x4bae9a[_0x2b7e('0x38')][_0x2b7e('0x26')]);_0x141735['offset']=qs[_0x2b7e('0x25')](_0x4bae9a['query'][_0x2b7e('0x25')]);}return _0xade0dc[_0x2b7e('0x4e')](_0x141735);}})[_0x2b7e('0x29')](function(_0x55c880){if(_0x55c880){return _0x55c880?{'count':_0x1278b6,'rows':_0x55c880}:null;}})['then'](respondWithResult(_0x502ad9,null))[_0x2b7e('0x47')](handleError(_0x502ad9,null));};exports[_0x2b7e('0x52')]=function(_0x512a1c,_0x5a467a,_0x1b9c97){var _0xbfe3e6={};var _0x2175a2={};var _0x49e0a6;var _0xfc9ee;return db[_0x2b7e('0x43')][_0x2b7e('0x4f')]({'where':{'id':_0x512a1c[_0x2b7e('0x49')]['id']}})['then'](handleEntityNotFound(_0x5a467a,null))[_0x2b7e('0x29')](function(_0x301da7){if(_0x301da7){_0x49e0a6=_0x301da7;_0x2175a2['model']=_[_0x2b7e('0x30')](db[_0x2b7e('0x50')][_0x2b7e('0x2f')]);_0x2175a2[_0x2b7e('0x38')]=_['keys'](_0x512a1c[_0x2b7e('0x38')]);_0x2175a2[_0x2b7e('0x31')]=_['intersection'](_0x2175a2[_0x2b7e('0x33')],_0x2175a2['query']);_0xbfe3e6['attributes']=_[_0x2b7e('0x32')](_0x2175a2[_0x2b7e('0x33')],qs[_0x2b7e('0x4a')](_0x512a1c[_0x2b7e('0x38')][_0x2b7e('0x4a')]));_0xbfe3e6[_0x2b7e('0x34')]=_0xbfe3e6['attributes'][_0x2b7e('0x35')]?_0xbfe3e6['attributes']:_0x2175a2[_0x2b7e('0x33')];_0xbfe3e6['order']=qs[_0x2b7e('0x51')](_0x512a1c['query'][_0x2b7e('0x51')]);_0xbfe3e6[_0x2b7e('0x3a')]=qs[_0x2b7e('0x31')](_[_0x2b7e('0x3b')](_0x512a1c[_0x2b7e('0x38')],_0x2175a2[_0x2b7e('0x31')]));if(_0x512a1c[_0x2b7e('0x38')][_0x2b7e('0x3c')]){_0xbfe3e6['where']=_[_0x2b7e('0x3d')](_0xbfe3e6[_0x2b7e('0x3a')],{'$or':_['map'](_0xbfe3e6[_0x2b7e('0x34')],function(_0x385c2d){var _0x16d8bf={};_0x16d8bf[_0x385c2d]={'$like':'%'+_0x512a1c[_0x2b7e('0x38')][_0x2b7e('0x3c')]+'%'};return _0x16d8bf;})});}_0xbfe3e6=_[_0x2b7e('0x3d')]({},_0xbfe3e6,_0x512a1c['options']);return _0x49e0a6['getSubjects'](_0xbfe3e6);}})['then'](function(_0x7b01c6){if(_0x7b01c6){_0xfc9ee=_0x7b01c6[_0x2b7e('0x35')];if(!_0x512a1c[_0x2b7e('0x38')][_0x2b7e('0x36')](_0x2b7e('0x37'))){_0xbfe3e6[_0x2b7e('0x26')]=qs[_0x2b7e('0x26')](_0x512a1c[_0x2b7e('0x38')][_0x2b7e('0x26')]);_0xbfe3e6[_0x2b7e('0x25')]=qs[_0x2b7e('0x25')](_0x512a1c[_0x2b7e('0x38')][_0x2b7e('0x25')]);}return _0x49e0a6[_0x2b7e('0x52')](_0xbfe3e6);}})[_0x2b7e('0x29')](function(_0x24463e){if(_0x24463e){return _0x24463e?{'count':_0xfc9ee,'rows':_0x24463e}:null;}})['then'](respondWithResult(_0x5a467a,null))[_0x2b7e('0x47')](handleError(_0x5a467a,null));};exports['getDescriptions']=function(_0x38c597,_0x29acf4,_0x29298c){var _0x2965f9={};var _0x141bf9={};var _0x53f1ab;var _0x44cff8;return db[_0x2b7e('0x43')][_0x2b7e('0x4f')]({'where':{'id':_0x38c597[_0x2b7e('0x49')]['id']}})[_0x2b7e('0x29')](handleEntityNotFound(_0x29acf4,null))[_0x2b7e('0x29')](function(_0x4ddb74){if(_0x4ddb74){_0x53f1ab=_0x4ddb74;_0x141bf9['model']=_[_0x2b7e('0x30')](db[_0x2b7e('0x50')][_0x2b7e('0x2f')]);_0x141bf9[_0x2b7e('0x38')]=_[_0x2b7e('0x30')](_0x38c597['query']);_0x141bf9[_0x2b7e('0x31')]=_[_0x2b7e('0x32')](_0x141bf9[_0x2b7e('0x33')],_0x141bf9['query']);_0x2965f9[_0x2b7e('0x34')]=_[_0x2b7e('0x32')](_0x141bf9['model'],qs['fields'](_0x38c597[_0x2b7e('0x38')]['fields']));_0x2965f9[_0x2b7e('0x34')]=_0x2965f9[_0x2b7e('0x34')][_0x2b7e('0x35')]?_0x2965f9[_0x2b7e('0x34')]:_0x141bf9[_0x2b7e('0x33')];_0x2965f9[_0x2b7e('0x39')]=qs['sort'](_0x38c597[_0x2b7e('0x38')]['sort']);_0x2965f9[_0x2b7e('0x3a')]=qs[_0x2b7e('0x31')](_['pick'](_0x38c597[_0x2b7e('0x38')],_0x141bf9[_0x2b7e('0x31')]));if(_0x38c597[_0x2b7e('0x38')][_0x2b7e('0x3c')]){_0x2965f9[_0x2b7e('0x3a')]=_[_0x2b7e('0x3d')](_0x2965f9['where'],{'$or':_[_0x2b7e('0x3e')](_0x2965f9[_0x2b7e('0x34')],function(_0x7b7d5b){var _0x346fe9={};_0x346fe9[_0x7b7d5b]={'$like':'%'+_0x38c597[_0x2b7e('0x38')][_0x2b7e('0x3c')]+'%'};return _0x346fe9;})});}_0x2965f9=_[_0x2b7e('0x3d')]({},_0x2965f9,_0x38c597['options']);return _0x53f1ab[_0x2b7e('0x53')](_0x2965f9);}})[_0x2b7e('0x29')](function(_0x304ff6){if(_0x304ff6){_0x44cff8=_0x304ff6[_0x2b7e('0x35')];if(!_0x38c597[_0x2b7e('0x38')][_0x2b7e('0x36')](_0x2b7e('0x37'))){_0x2965f9[_0x2b7e('0x26')]=qs[_0x2b7e('0x26')](_0x38c597[_0x2b7e('0x38')][_0x2b7e('0x26')]);_0x2965f9[_0x2b7e('0x25')]=qs[_0x2b7e('0x25')](_0x38c597['query'][_0x2b7e('0x25')]);}return _0x53f1ab[_0x2b7e('0x53')](_0x2965f9);}})[_0x2b7e('0x29')](function(_0x2d80d4){if(_0x2d80d4){return _0x2d80d4?{'count':_0x44cff8,'rows':_0x2d80d4}:null;}})[_0x2b7e('0x29')](respondWithResult(_0x29acf4,null))[_0x2b7e('0x47')](handleError(_0x29acf4,null));};
\ No newline at end of file
+var _0x6da9=['findAll','rows','catch','show','params','find','create','body','getFields','VtigerField','length','pick','hasOwnProperty','getSubjects','findOne','nolimit','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','path','sox','to-csv','lodash','crypto','jsforce','desk.js','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','http','info','request\x20sent','VtigerConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','VtigerConfiguration,\x20%s,\x20%s','message','result','sendStatus','status','json','count','offset','limit','set','update','then','destroy','stack','name','index','VtigerConfiguration','rawAttributes','model','keys','query','intersection','fields','attributes','order','sort','where','filters','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include'];(function(_0x2da4b4,_0x43373a){var _0x1884d5=function(_0x533fe2){while(--_0x533fe2){_0x2da4b4['push'](_0x2da4b4['shift']());}};_0x1884d5(++_0x43373a);}(_0x6da9,0x161));var _0x96da=function(_0x67d062,_0x5d11ff){_0x67d062=_0x67d062-0x0;var _0x3b5297=_0x6da9[_0x67d062];return _0x3b5297;};'use strict';var pdf=require(_0x96da('0x0'));var emlformat=require(_0x96da('0x1'));var rimraf=require(_0x96da('0x2'));var zipdir=require(_0x96da('0x3'));var jsonpatch=require(_0x96da('0x4'));var rp=require(_0x96da('0x5'));var moment=require(_0x96da('0x6'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x96da('0x7'));var sox=require(_0x96da('0x8'));var csv=require(_0x96da('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x96da('0xa'));var squel=require('squel');var crypto=require(_0x96da('0xb'));var jsforce=require(_0x96da('0xc'));var deskjs=require(_0x96da('0xd'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x96da('0xe'));var hardwareService=require(_0x96da('0xf'));var Redis=require(_0x96da('0x10'));var qs=require('../../components/parsers/qs');var logger=require(_0x96da('0x11'))(_0x96da('0x12'));var utils=require('../../config/utils');var config=require(_0x96da('0x13'));var db=require(_0x96da('0x14'))['db'];var jayson=require(_0x96da('0x15'));var client=jayson[_0x96da('0x16')][_0x96da('0x17')]({'port':0x232a});function respondWithRpcPromise(_0x1bc58d,_0x2cdcdf,_0x9c5e28,_0x1d09ea){return new BPromise(function(_0x5b9bbe,_0x235e14){var _0x3a0a69=_0x1d09ea||client;return _0x3a0a69['request'](_0x1bc58d,_0x9c5e28)['then'](function(_0x357ce8){logger[_0x96da('0x18')]('VtigerConfiguration,\x20%s,\x20%s',_0x2cdcdf,_0x96da('0x19'));logger['debug'](_0x96da('0x1a'),_0x2cdcdf,_0x96da('0x19'),JSON[_0x96da('0x1b')](_0x357ce8));if(_0x357ce8[_0x96da('0x1c')]){if(_0x357ce8[_0x96da('0x1c')]['code']===0x1f4){logger[_0x96da('0x1c')](_0x96da('0x1d'),_0x2cdcdf,_0x357ce8[_0x96da('0x1c')][_0x96da('0x1e')]);return _0x235e14(_0x357ce8['error'][_0x96da('0x1e')]);}logger['error'](_0x96da('0x1d'),_0x2cdcdf,_0x357ce8[_0x96da('0x1c')][_0x96da('0x1e')]);return _0x5b9bbe(_0x357ce8['error'][_0x96da('0x1e')]);}else{logger[_0x96da('0x18')](_0x96da('0x1d'),_0x2cdcdf,_0x96da('0x19'));_0x5b9bbe(_0x357ce8[_0x96da('0x1f')][_0x96da('0x1e')]);}})['catch'](function(_0x2e1421){logger[_0x96da('0x1c')](_0x96da('0x1d'),_0x2cdcdf,_0x2e1421);_0x235e14(_0x2e1421);});});}function respondWithStatusCode(_0x532aee,_0x44e248){_0x44e248=_0x44e248||0xcc;return function(_0x137789){if(_0x137789){return _0x532aee[_0x96da('0x20')](_0x44e248);}return _0x532aee[_0x96da('0x21')](_0x44e248)['end']();};}function respondWithResult(_0x21e140,_0x35dd4d){_0x35dd4d=_0x35dd4d||0xc8;return function(_0x266fd3){if(_0x266fd3){return _0x21e140[_0x96da('0x21')](_0x35dd4d)[_0x96da('0x22')](_0x266fd3);}};}function respondWithFilteredResult(_0x1f7396,_0x286c49){return function(_0x313aaa){if(_0x313aaa){var _0x2180fd=_0x313aaa[_0x96da('0x23')],_0x2d197f=_0x286c49[_0x96da('0x24')],_0x55de1f=_0x286c49[_0x96da('0x24')]+_0x286c49[_0x96da('0x25')],_0x3a0cfe;if(_0x55de1f>=_0x2180fd){_0x55de1f=_0x2180fd;_0x3a0cfe=0xc8;}else{_0x3a0cfe=0xce;}_0x1f7396[_0x96da('0x21')](_0x3a0cfe);return _0x1f7396[_0x96da('0x26')]('Content-Range',_0x2d197f+'-'+_0x55de1f+'/'+_0x2180fd)[_0x96da('0x22')](_0x313aaa);}return null;};}function patchUpdates(_0x4241ba){return function(_0x2d1ac1){try{jsonpatch['apply'](_0x2d1ac1,_0x4241ba,!![]);}catch(_0x5b0c76){return BPromise['reject'](_0x5b0c76);}return _0x2d1ac1['save']();};}function saveUpdates(_0x46d698,_0x480169){return function(_0x31110d){if(_0x31110d){return _0x31110d[_0x96da('0x27')](_0x46d698)[_0x96da('0x28')](function(_0xaed12a){return _0xaed12a;});}return null;};}function removeEntity(_0x2cd5ac,_0xfc7157){return function(_0x3388c2){if(_0x3388c2){return _0x3388c2[_0x96da('0x29')]()[_0x96da('0x28')](function(){_0x2cd5ac['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0xc06f55,_0x3a2e89){return function(_0x564831){if(!_0x564831){_0xc06f55[_0x96da('0x20')](0x194);}return _0x564831;};}function handleError(_0x1f910b,_0x5955c3){_0x5955c3=_0x5955c3||0x1f4;return function(_0xe7a683){logger[_0x96da('0x1c')](_0xe7a683[_0x96da('0x2a')]);if(_0xe7a683[_0x96da('0x2b')]){delete _0xe7a683[_0x96da('0x2b')];}_0x1f910b[_0x96da('0x21')](_0x5955c3)['send'](_0xe7a683);};}exports[_0x96da('0x2c')]=function(_0x4efe50,_0x4daf81){var _0xab60eb={},_0x23a95c={},_0x18a4f8={'count':0x0,'rows':[]};var _0x76432d=db[_0x96da('0x2d')][_0x96da('0x2e')];_0x23a95c[_0x96da('0x2f')]=_[_0x96da('0x30')](_0x76432d);_0x23a95c[_0x96da('0x31')]=_[_0x96da('0x30')](_0x4efe50[_0x96da('0x31')]);_0x23a95c['filters']=_[_0x96da('0x32')](_0x23a95c[_0x96da('0x2f')],_0x23a95c['query']);_0xab60eb['attributes']=_[_0x96da('0x32')](_0x23a95c[_0x96da('0x2f')],qs[_0x96da('0x33')](_0x4efe50[_0x96da('0x31')][_0x96da('0x33')]));_0xab60eb['attributes']=_0xab60eb[_0x96da('0x34')]['length']?_0xab60eb[_0x96da('0x34')]:_0x23a95c[_0x96da('0x2f')];if(!_0x4efe50[_0x96da('0x31')]['hasOwnProperty']('nolimit')){_0xab60eb[_0x96da('0x25')]=qs[_0x96da('0x25')](_0x4efe50[_0x96da('0x31')][_0x96da('0x25')]);_0xab60eb[_0x96da('0x24')]=qs[_0x96da('0x24')](_0x4efe50[_0x96da('0x31')][_0x96da('0x24')]);}_0xab60eb[_0x96da('0x35')]=qs[_0x96da('0x36')](_0x4efe50[_0x96da('0x31')]['sort']);_0xab60eb[_0x96da('0x37')]=qs[_0x96da('0x38')](_['pick'](_0x4efe50[_0x96da('0x31')],_0x23a95c[_0x96da('0x38')]));if(_0x4efe50[_0x96da('0x31')][_0x96da('0x39')]){_0xab60eb[_0x96da('0x37')]=_[_0x96da('0x3a')](_0xab60eb[_0x96da('0x37')],{'$or':_[_0x96da('0x3b')](_0x76432d,function(_0xdccdd7){if(_0xdccdd7[_0x96da('0x3c')][_0x96da('0x3d')]!==_0x96da('0x3e')){var _0x4d5f9c={};_0x4d5f9c[_0xdccdd7[_0x96da('0x3f')]]={'$like':'%'+_0x4efe50[_0x96da('0x31')][_0x96da('0x39')]+'%'};return _0x4d5f9c;}})});}_0xab60eb=_[_0x96da('0x3a')]({},_0xab60eb,_0x4efe50[_0x96da('0x40')]);var _0x247c66={'where':_0xab60eb[_0x96da('0x37')]};return db[_0x96da('0x2d')][_0x96da('0x23')](_0x247c66)[_0x96da('0x28')](function(_0x58d30a){_0x18a4f8[_0x96da('0x23')]=_0x58d30a;if(_0x4efe50[_0x96da('0x31')][_0x96da('0x41')]){_0xab60eb[_0x96da('0x42')]=[{'all':!![]}];}return db['VtigerConfiguration'][_0x96da('0x43')](_0xab60eb);})['then'](function(_0xc663b9){_0x18a4f8[_0x96da('0x44')]=_0xc663b9;return _0x18a4f8;})[_0x96da('0x28')](respondWithFilteredResult(_0x4daf81,_0xab60eb))[_0x96da('0x45')](handleError(_0x4daf81,null));};exports[_0x96da('0x46')]=function(_0x2f3724,_0x212acb){var _0x58fca0={'raw':![],'where':{'id':_0x2f3724[_0x96da('0x47')]['id']}},_0x165a41={};_0x165a41[_0x96da('0x2f')]=_[_0x96da('0x30')](db[_0x96da('0x2d')]['rawAttributes']);_0x165a41[_0x96da('0x31')]=_['keys'](_0x2f3724[_0x96da('0x31')]);_0x165a41[_0x96da('0x38')]=_['intersection'](_0x165a41[_0x96da('0x2f')],_0x165a41[_0x96da('0x31')]);_0x58fca0['attributes']=_[_0x96da('0x32')](_0x165a41[_0x96da('0x2f')],qs[_0x96da('0x33')](_0x2f3724[_0x96da('0x31')][_0x96da('0x33')]));_0x58fca0[_0x96da('0x34')]=_0x58fca0[_0x96da('0x34')]['length']?_0x58fca0[_0x96da('0x34')]:_0x165a41['model'];if(_0x2f3724[_0x96da('0x31')][_0x96da('0x41')]){_0x58fca0[_0x96da('0x42')]=[{'all':!![]}];}_0x58fca0=_[_0x96da('0x3a')]({},_0x58fca0,_0x2f3724[_0x96da('0x40')]);return db['VtigerConfiguration'][_0x96da('0x48')](_0x58fca0)[_0x96da('0x28')](handleEntityNotFound(_0x212acb,null))['then'](respondWithResult(_0x212acb,null))['catch'](handleError(_0x212acb,null));};exports[_0x96da('0x49')]=function(_0x2864b3,_0x1aa164){return db[_0x96da('0x2d')][_0x96da('0x49')](_0x2864b3['body'],{})[_0x96da('0x28')](respondWithResult(_0x1aa164,0xc9))[_0x96da('0x45')](handleError(_0x1aa164,null));};exports[_0x96da('0x27')]=function(_0x1e9c68,_0x5d01b9){if(_0x1e9c68[_0x96da('0x4a')]['id']){delete _0x1e9c68[_0x96da('0x4a')]['id'];}return db[_0x96da('0x2d')]['find']({'where':{'id':_0x1e9c68[_0x96da('0x47')]['id']}})[_0x96da('0x28')](handleEntityNotFound(_0x5d01b9,null))['then'](saveUpdates(_0x1e9c68[_0x96da('0x4a')],null))[_0x96da('0x28')](respondWithResult(_0x5d01b9,null))['catch'](handleError(_0x5d01b9,null));};exports[_0x96da('0x29')]=function(_0x17410d,_0x5604bb){return db['VtigerConfiguration'][_0x96da('0x48')]({'where':{'id':_0x17410d[_0x96da('0x47')]['id']}})[_0x96da('0x28')](handleEntityNotFound(_0x5604bb,null))[_0x96da('0x28')](removeEntity(_0x5604bb,null))[_0x96da('0x45')](handleError(_0x5604bb,null));};exports[_0x96da('0x4b')]=function(_0x2c645a,_0x111a4a,_0x4924dc){var _0x10230e={};var _0x546a62={};var _0x1c1652;var _0x40f22f;return db['VtigerConfiguration']['findOne']({'where':{'id':_0x2c645a[_0x96da('0x47')]['id']}})['then'](handleEntityNotFound(_0x111a4a,null))[_0x96da('0x28')](function(_0x3fb375){if(_0x3fb375){_0x1c1652=_0x3fb375;_0x546a62[_0x96da('0x2f')]=_['keys'](db[_0x96da('0x4c')][_0x96da('0x2e')]);_0x546a62[_0x96da('0x31')]=_[_0x96da('0x30')](_0x2c645a[_0x96da('0x31')]);_0x546a62[_0x96da('0x38')]=_[_0x96da('0x32')](_0x546a62[_0x96da('0x2f')],_0x546a62[_0x96da('0x31')]);_0x10230e[_0x96da('0x34')]=_['intersection'](_0x546a62['model'],qs['fields'](_0x2c645a[_0x96da('0x31')]['fields']));_0x10230e[_0x96da('0x34')]=_0x10230e[_0x96da('0x34')][_0x96da('0x4d')]?_0x10230e[_0x96da('0x34')]:_0x546a62[_0x96da('0x2f')];_0x10230e['order']=qs[_0x96da('0x36')](_0x2c645a[_0x96da('0x31')][_0x96da('0x36')]);_0x10230e[_0x96da('0x37')]=qs[_0x96da('0x38')](_[_0x96da('0x4e')](_0x2c645a[_0x96da('0x31')],_0x546a62['filters']));if(_0x2c645a[_0x96da('0x31')]['filter']){_0x10230e[_0x96da('0x37')]=_[_0x96da('0x3a')](_0x10230e['where'],{'$or':_['map'](_0x10230e['attributes'],function(_0x21af08){var _0xcb4983={};_0xcb4983[_0x21af08]={'$like':'%'+_0x2c645a[_0x96da('0x31')][_0x96da('0x39')]+'%'};return _0xcb4983;})});}_0x10230e=_[_0x96da('0x3a')]({},_0x10230e,_0x2c645a[_0x96da('0x40')]);return _0x1c1652[_0x96da('0x4b')](_0x10230e);}})[_0x96da('0x28')](function(_0x3ce450){if(_0x3ce450){_0x40f22f=_0x3ce450[_0x96da('0x4d')];if(!_0x2c645a[_0x96da('0x31')][_0x96da('0x4f')]('nolimit')){_0x10230e[_0x96da('0x25')]=qs[_0x96da('0x25')](_0x2c645a['query'][_0x96da('0x25')]);_0x10230e[_0x96da('0x24')]=qs[_0x96da('0x24')](_0x2c645a[_0x96da('0x31')][_0x96da('0x24')]);}return _0x1c1652[_0x96da('0x4b')](_0x10230e);}})[_0x96da('0x28')](function(_0x46d87f){if(_0x46d87f){return _0x46d87f?{'count':_0x40f22f,'rows':_0x46d87f}:null;}})[_0x96da('0x28')](respondWithResult(_0x111a4a,null))[_0x96da('0x45')](handleError(_0x111a4a,null));};exports[_0x96da('0x50')]=function(_0x4aec16,_0x5283a3,_0x5acac2){var _0x101171={};var _0x35b692={};var _0x4a6d8e;var _0x43a349;return db['VtigerConfiguration'][_0x96da('0x51')]({'where':{'id':_0x4aec16[_0x96da('0x47')]['id']}})[_0x96da('0x28')](handleEntityNotFound(_0x5283a3,null))[_0x96da('0x28')](function(_0x1cf080){if(_0x1cf080){_0x4a6d8e=_0x1cf080;_0x35b692[_0x96da('0x2f')]=_['keys'](db['VtigerField'][_0x96da('0x2e')]);_0x35b692[_0x96da('0x31')]=_[_0x96da('0x30')](_0x4aec16[_0x96da('0x31')]);_0x35b692[_0x96da('0x38')]=_[_0x96da('0x32')](_0x35b692['model'],_0x35b692[_0x96da('0x31')]);_0x101171[_0x96da('0x34')]=_[_0x96da('0x32')](_0x35b692[_0x96da('0x2f')],qs[_0x96da('0x33')](_0x4aec16[_0x96da('0x31')]['fields']));_0x101171[_0x96da('0x34')]=_0x101171[_0x96da('0x34')][_0x96da('0x4d')]?_0x101171[_0x96da('0x34')]:_0x35b692[_0x96da('0x2f')];_0x101171[_0x96da('0x35')]=qs[_0x96da('0x36')](_0x4aec16['query'][_0x96da('0x36')]);_0x101171['where']=qs[_0x96da('0x38')](_[_0x96da('0x4e')](_0x4aec16[_0x96da('0x31')],_0x35b692[_0x96da('0x38')]));if(_0x4aec16[_0x96da('0x31')][_0x96da('0x39')]){_0x101171[_0x96da('0x37')]=_[_0x96da('0x3a')](_0x101171[_0x96da('0x37')],{'$or':_[_0x96da('0x3b')](_0x101171[_0x96da('0x34')],function(_0x243ce2){var _0x936f89={};_0x936f89[_0x243ce2]={'$like':'%'+_0x4aec16[_0x96da('0x31')][_0x96da('0x39')]+'%'};return _0x936f89;})});}_0x101171=_[_0x96da('0x3a')]({},_0x101171,_0x4aec16['options']);return _0x4a6d8e[_0x96da('0x50')](_0x101171);}})[_0x96da('0x28')](function(_0x5c6027){if(_0x5c6027){_0x43a349=_0x5c6027['length'];if(!_0x4aec16[_0x96da('0x31')]['hasOwnProperty'](_0x96da('0x52'))){_0x101171['limit']=qs[_0x96da('0x25')](_0x4aec16['query']['limit']);_0x101171[_0x96da('0x24')]=qs['offset'](_0x4aec16[_0x96da('0x31')]['offset']);}return _0x4a6d8e[_0x96da('0x50')](_0x101171);}})[_0x96da('0x28')](function(_0x3d559e){if(_0x3d559e){return _0x3d559e?{'count':_0x43a349,'rows':_0x3d559e}:null;}})[_0x96da('0x28')](respondWithResult(_0x5283a3,null))[_0x96da('0x45')](handleError(_0x5283a3,null));};exports['getDescriptions']=function(_0x124591,_0xe31b44,_0xb0405b){var _0x5b82cf={};var _0x3e47f7={};var _0x2e1126;var _0x644386;return db['VtigerConfiguration']['findOne']({'where':{'id':_0x124591['params']['id']}})[_0x96da('0x28')](handleEntityNotFound(_0xe31b44,null))['then'](function(_0x4416b9){if(_0x4416b9){_0x2e1126=_0x4416b9;_0x3e47f7[_0x96da('0x2f')]=_['keys'](db[_0x96da('0x4c')]['rawAttributes']);_0x3e47f7[_0x96da('0x31')]=_[_0x96da('0x30')](_0x124591[_0x96da('0x31')]);_0x3e47f7[_0x96da('0x38')]=_[_0x96da('0x32')](_0x3e47f7['model'],_0x3e47f7[_0x96da('0x31')]);_0x5b82cf[_0x96da('0x34')]=_['intersection'](_0x3e47f7[_0x96da('0x2f')],qs[_0x96da('0x33')](_0x124591[_0x96da('0x31')]['fields']));_0x5b82cf['attributes']=_0x5b82cf['attributes']['length']?_0x5b82cf[_0x96da('0x34')]:_0x3e47f7[_0x96da('0x2f')];_0x5b82cf[_0x96da('0x35')]=qs[_0x96da('0x36')](_0x124591[_0x96da('0x31')][_0x96da('0x36')]);_0x5b82cf[_0x96da('0x37')]=qs[_0x96da('0x38')](_[_0x96da('0x4e')](_0x124591[_0x96da('0x31')],_0x3e47f7[_0x96da('0x38')]));if(_0x124591[_0x96da('0x31')][_0x96da('0x39')]){_0x5b82cf[_0x96da('0x37')]=_[_0x96da('0x3a')](_0x5b82cf[_0x96da('0x37')],{'$or':_[_0x96da('0x3b')](_0x5b82cf[_0x96da('0x34')],function(_0x524846){var _0x18a59c={};_0x18a59c[_0x524846]={'$like':'%'+_0x124591[_0x96da('0x31')][_0x96da('0x39')]+'%'};return _0x18a59c;})});}_0x5b82cf=_[_0x96da('0x3a')]({},_0x5b82cf,_0x124591[_0x96da('0x40')]);return _0x2e1126['getDescriptions'](_0x5b82cf);}})[_0x96da('0x28')](function(_0x263a3e){if(_0x263a3e){_0x644386=_0x263a3e['length'];if(!_0x124591[_0x96da('0x31')][_0x96da('0x4f')]('nolimit')){_0x5b82cf[_0x96da('0x25')]=qs[_0x96da('0x25')](_0x124591[_0x96da('0x31')][_0x96da('0x25')]);_0x5b82cf['offset']=qs[_0x96da('0x24')](_0x124591[_0x96da('0x31')]['offset']);}return _0x2e1126[_0x96da('0x53')](_0x5b82cf);}})[_0x96da('0x28')](function(_0x4c80c1){if(_0x4c80c1){return _0x4c80c1?{'count':_0x644386,'rows':_0x4c80c1}:null;}})[_0x96da('0x28')](respondWithResult(_0xe31b44,null))[_0x96da('0x45')](handleError(_0xe31b44,null));};
\ No newline at end of file
index 4bacddf..f696246 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d9b=['moment','./intVtigerConfiguration.attributes','exports','define','VtigerConfiguration','int_vtiger_configurations','lodash','../../config/logger'];(function(_0x28bb12,_0x35fe9a){var _0x26d1ae=function(_0x2ae352){while(--_0x2ae352){_0x28bb12['push'](_0x28bb12['shift']());}};_0x26d1ae(++_0x35fe9a);}(_0x5d9b,0xc6));var _0xb5d9=function(_0x48be0a,_0x750ec){_0x48be0a=_0x48be0a-0x0;var _0x38820f=_0x5d9b[_0x48be0a];return _0x38820f;};'use strict';var _=require(_0xb5d9('0x0'));var util=require('util');var logger=require(_0xb5d9('0x1'))('api');var moment=require(_0xb5d9('0x2'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xb5d9('0x3'));module[_0xb5d9('0x4')]=function(_0x384119,_0x3c03ec){return _0x384119[_0xb5d9('0x5')](_0xb5d9('0x6'),attributes,{'tableName':_0xb5d9('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x865f=['./intVtigerConfiguration.attributes','exports','VtigerConfiguration','int_vtiger_configurations','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x4c0a0e,_0x2e4b1a){var _0x284bd0=function(_0x3b4f3d){while(--_0x3b4f3d){_0x4c0a0e['push'](_0x4c0a0e['shift']());}};_0x284bd0(++_0x2e4b1a);}(_0x865f,0x112));var _0xf865=function(_0x1f8fda,_0x56877b){_0x1f8fda=_0x1f8fda-0x0;var _0x5b8d1b=_0x865f[_0x1f8fda];return _0x5b8d1b;};'use strict';var _=require('lodash');var util=require(_0xf865('0x0'));var logger=require(_0xf865('0x1'))(_0xf865('0x2'));var moment=require(_0xf865('0x3'));var BPromise=require(_0xf865('0x4'));var rp=require(_0xf865('0x5'));var attributes=require(_0xf865('0x6'));module[_0xf865('0x7')]=function(_0x2539f9,_0x40670e){return _0x2539f9['define'](_0xf865('0x8'),attributes,{'tableName':_0xf865('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5b3c7aa..3b101aa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe499=['message','result','catch','util','moment','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','request\x20sent','debug','VtigerConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','VtigerConfiguration,\x20%s,\x20%s'];(function(_0x4a05e2,_0x2e16e4){var _0x10af77=function(_0x2e1bf1){while(--_0x2e1bf1){_0x4a05e2['push'](_0x4a05e2['shift']());}};_0x10af77(++_0x2e16e4);}(_0xe499,0x76));var _0x9e49=function(_0x577ce5,_0x515b3f){_0x577ce5=_0x577ce5-0x0;var _0x1ef1ba=_0xe499[_0x577ce5];return _0x1ef1ba;};'use strict';var _=require('lodash');var util=require(_0x9e49('0x0'));var moment=require(_0x9e49('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9e49('0x2'));var db=require(_0x9e49('0x3'))['db'];var utils=require(_0x9e49('0x4'));var logger=require(_0x9e49('0x5'))(_0x9e49('0x6'));var config=require(_0x9e49('0x7'));var jayson=require(_0x9e49('0x8'));var client=jayson['client'][_0x9e49('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4ba8c1,_0x34e026,_0xcab9b2){return new BPromise(function(_0x24bbd0,_0x10ba2e){return client[_0x9e49('0xa')](_0x4ba8c1,_0xcab9b2)[_0x9e49('0xb')](function(_0x247526){logger[_0x9e49('0xc')]('VtigerConfiguration,\x20%s,\x20%s',_0x34e026,_0x9e49('0xd'));logger[_0x9e49('0xe')](_0x9e49('0xf'),_0x34e026,_0x9e49('0xd'),JSON[_0x9e49('0x10')](_0x247526));if(_0x247526['error']){if(_0x247526[_0x9e49('0x11')][_0x9e49('0x12')]===0x1f4){logger[_0x9e49('0x11')](_0x9e49('0x13'),_0x34e026,_0x247526[_0x9e49('0x11')][_0x9e49('0x14')]);return _0x10ba2e(_0x247526['error'][_0x9e49('0x14')]);}logger['error']('VtigerConfiguration,\x20%s,\x20%s',_0x34e026,_0x247526[_0x9e49('0x11')][_0x9e49('0x14')]);return _0x24bbd0(_0x247526[_0x9e49('0x11')]['message']);}else{logger[_0x9e49('0xc')]('VtigerConfiguration,\x20%s,\x20%s',_0x34e026,'request\x20sent');_0x24bbd0(_0x247526[_0x9e49('0x15')][_0x9e49('0x14')]);}})[_0x9e49('0x16')](function(_0x36c69f){logger['error']('VtigerConfiguration,\x20%s,\x20%s',_0x34e026,_0x36c69f);_0x10ba2e(_0x36c69f);});});}
\ No newline at end of file
+var _0x9519=['info','VtigerConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','catch','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','then'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x9519,0x149));var _0x9951=function(_0x13d25e,_0x2d6e7e){_0x13d25e=_0x13d25e-0x0;var _0x2d6aee=_0x9519[_0x13d25e];return _0x2d6aee;};'use strict';var _=require('lodash');var util=require(_0x9951('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x9951('0x1'));var fs=require('fs');var Redis=require(_0x9951('0x2'));var db=require(_0x9951('0x3'))['db'];var utils=require(_0x9951('0x4'));var logger=require(_0x9951('0x5'))(_0x9951('0x6'));var config=require(_0x9951('0x7'));var jayson=require(_0x9951('0x8'));var client=jayson[_0x9951('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5e0797,_0x331caa,_0x91de98){return new BPromise(function(_0x5361e2,_0x321a84){return client['request'](_0x5e0797,_0x91de98)[_0x9951('0xa')](function(_0x5a65ff){logger[_0x9951('0xb')](_0x9951('0xc'),_0x331caa,_0x9951('0xd'));logger[_0x9951('0xe')]('VtigerConfiguration,\x20%s,\x20%s,\x20%s',_0x331caa,'request\x20sent',JSON[_0x9951('0xf')](_0x5a65ff));if(_0x5a65ff[_0x9951('0x10')]){if(_0x5a65ff['error'][_0x9951('0x11')]===0x1f4){logger['error'](_0x9951('0xc'),_0x331caa,_0x5a65ff[_0x9951('0x10')][_0x9951('0x12')]);return _0x321a84(_0x5a65ff[_0x9951('0x10')][_0x9951('0x12')]);}logger[_0x9951('0x10')]('VtigerConfiguration,\x20%s,\x20%s',_0x331caa,_0x5a65ff[_0x9951('0x10')][_0x9951('0x12')]);return _0x5361e2(_0x5a65ff[_0x9951('0x10')]['message']);}else{logger[_0x9951('0xb')](_0x9951('0xc'),_0x331caa,_0x9951('0xd'));_0x5361e2(_0x5a65ff['result'][_0x9951('0x12')]);}})[_0x9951('0x13')](function(_0x3664a3){logger[_0x9951('0x10')](_0x9951('0xc'),_0x331caa,_0x3664a3);_0x321a84(_0x3664a3);});});}
\ No newline at end of file
index 11e5f41..3d6a025 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x31c5=['show','post','create','put','delete','destroy','exports','multer','util','path','express','../../components/interaction/service','./intVtigerField.controller','get','isAuthenticated','index','/:id'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x31c5,0x128));var _0x531c=function(_0x1a46a0,_0x1c94bc){_0x1a46a0=_0x1a46a0-0x0;var _0x3f0392=_0x31c5[_0x1a46a0];return _0x3f0392;};'use strict';var multer=require(_0x531c('0x0'));var util=require(_0x531c('0x1'));var path=require(_0x531c('0x2'));var timeout=require('connect-timeout');var express=require(_0x531c('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x531c('0x4'));var config=require('../../config/environment');var controller=require(_0x531c('0x5'));router[_0x531c('0x6')]('/',auth[_0x531c('0x7')](),controller[_0x531c('0x8')]);router['get'](_0x531c('0x9'),auth[_0x531c('0x7')](),controller[_0x531c('0xa')]);router[_0x531c('0xb')]('/',auth[_0x531c('0x7')](),controller[_0x531c('0xc')]);router[_0x531c('0xd')]('/:id',auth[_0x531c('0x7')](),controller['update']);router[_0x531c('0xe')]('/:id',auth[_0x531c('0x7')](),controller[_0x531c('0xf')]);module[_0x531c('0x10')]=router;
\ No newline at end of file
+var _0xd00d=['post','create','delete','destroy','multer','util','path','express','../../components/auth/service','../../components/interaction/service','./intVtigerField.controller','isAuthenticated','index','/:id','show'];(function(_0x36f161,_0x103bac){var _0x4ecaf8=function(_0x4c82d5){while(--_0x4c82d5){_0x36f161['push'](_0x36f161['shift']());}};_0x4ecaf8(++_0x103bac);}(_0xd00d,0x1d5));var _0xdd00=function(_0x1b64dd,_0x2cf769){_0x1b64dd=_0x1b64dd-0x0;var _0xeb464c=_0xd00d[_0x1b64dd];return _0xeb464c;};'use strict';var multer=require(_0xdd00('0x0'));var util=require(_0xdd00('0x1'));var path=require(_0xdd00('0x2'));var timeout=require('connect-timeout');var express=require(_0xdd00('0x3'));var router=express['Router']();var auth=require(_0xdd00('0x4'));var interaction=require(_0xdd00('0x5'));var config=require('../../config/environment');var controller=require(_0xdd00('0x6'));router['get']('/',auth[_0xdd00('0x7')](),controller[_0xdd00('0x8')]);router['get'](_0xdd00('0x9'),auth['isAuthenticated'](),controller[_0xdd00('0xa')]);router[_0xdd00('0xb')]('/',auth[_0xdd00('0x7')](),controller[_0xdd00('0xc')]);router['put']('/:id',auth['isAuthenticated'](),controller['update']);router[_0xdd00('0xd')](_0xdd00('0x9'),auth[_0xdd00('0x7')](),controller[_0xdd00('0xe')]);module['exports']=router;
\ No newline at end of file
index c4be484..c50e386 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd64b=['BOOLEAN','sequelize','ENUM','variable','customVariable','keyValue','string','STRING'];(function(_0x399e50,_0x1ffcfb){var _0x2d4c61=function(_0x3f0fb7){while(--_0x3f0fb7){_0x399e50['push'](_0x399e50['shift']());}};_0x2d4c61(++_0x1ffcfb);}(_0xd64b,0xc1));var _0xbd64=function(_0x516044,_0x3677f7){_0x516044=_0x516044-0x0;var _0x31684b=_0xd64b[_0x516044];return _0x31684b;};'use strict';var Sequelize=require(_0xbd64('0x0'));module['exports']={'type':{'type':Sequelize[_0xbd64('0x1')]('string',_0xbd64('0x2'),_0xbd64('0x3'),_0xbd64('0x4')),'defaultValue':_0xbd64('0x5')},'content':{'type':Sequelize[_0xbd64('0x6')]},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize['ENUM']('string','variable',_0xbd64('0x3'))},'keyContent':{'type':Sequelize[_0xbd64('0x6')]},'idField':{'type':Sequelize[_0xbd64('0x6')]},'nameField':{'type':Sequelize[_0xbd64('0x6')]},'customField':{'type':Sequelize[_0xbd64('0x7')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xbd64('0x6')]}};
\ No newline at end of file
+var _0xe5b5=['STRING','BOOLEAN','sequelize','exports','ENUM','string','variable','customVariable','keyValue'];(function(_0x2c0dc0,_0x19900d){var _0x4c0990=function(_0x530791){while(--_0x530791){_0x2c0dc0['push'](_0x2c0dc0['shift']());}};_0x4c0990(++_0x19900d);}(_0xe5b5,0x12b));var _0x5e5b=function(_0x3825a8,_0x2ce1a2){_0x3825a8=_0x3825a8-0x0;var _0xabc9bc=_0xe5b5[_0x3825a8];return _0xabc9bc;};'use strict';var Sequelize=require(_0x5e5b('0x0'));module[_0x5e5b('0x1')]={'type':{'type':Sequelize[_0x5e5b('0x2')](_0x5e5b('0x3'),_0x5e5b('0x4'),_0x5e5b('0x5'),_0x5e5b('0x6')),'defaultValue':_0x5e5b('0x3')},'content':{'type':Sequelize[_0x5e5b('0x7')]},'key':{'type':Sequelize[_0x5e5b('0x7')]},'keyType':{'type':Sequelize[_0x5e5b('0x2')](_0x5e5b('0x3'),_0x5e5b('0x4'),_0x5e5b('0x5'))},'keyContent':{'type':Sequelize[_0x5e5b('0x7')]},'idField':{'type':Sequelize[_0x5e5b('0x7')]},'nameField':{'type':Sequelize[_0x5e5b('0x7')]},'customField':{'type':Sequelize[_0x5e5b('0x8')],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x5e5b('0x7')]}};
\ No newline at end of file
index ec9d869..c1eaad3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca87=['api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','set','Content-Range','apply','save','update','destroy','error','stack','name','send','index','VtigerField','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','limit','offset','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','then','count','includeAll','include','findAll','rows','catch','show','params','create','body','find','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger'];(function(_0x229fe2,_0x4048fb){var _0xd01b9=function(_0x19471d){while(--_0x19471d){_0x229fe2['push'](_0x229fe2['shift']());}};_0xd01b9(++_0x4048fb);}(_0xca87,0xc6));var _0x7ca8=function(_0x348bd2,_0x2c2665){_0x348bd2=_0x348bd2-0x0;var _0x3c5550=_0xca87[_0x348bd2];return _0x3c5550;};'use strict';var pdf=require(_0x7ca8('0x0'));var emlformat=require(_0x7ca8('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x7ca8('0x2'));var rp=require(_0x7ca8('0x3'));var moment=require(_0x7ca8('0x4'));var BPromise=require(_0x7ca8('0x5'));var Mustache=require(_0x7ca8('0x6'));var util=require(_0x7ca8('0x7'));var path=require('path');var sox=require(_0x7ca8('0x8'));var csv=require(_0x7ca8('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x7ca8('0xa'));var crypto=require('crypto');var jsforce=require(_0x7ca8('0xb'));var deskjs=require(_0x7ca8('0xc'));var toCsv=require(_0x7ca8('0x9'));var querystring=require(_0x7ca8('0xd'));var Papa=require(_0x7ca8('0xe'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0x7ca8('0xf'));var qs=require(_0x7ca8('0x10'));var logger=require(_0x7ca8('0x11'))(_0x7ca8('0x12'));var utils=require(_0x7ca8('0x13'));var config=require(_0x7ca8('0x14'));var db=require(_0x7ca8('0x15'))['db'];function respondWithStatusCode(_0xc81b2,_0x37c99d){_0x37c99d=_0x37c99d||0xcc;return function(_0x241b25){if(_0x241b25){return _0xc81b2[_0x7ca8('0x16')](_0x37c99d);}return _0xc81b2[_0x7ca8('0x17')](_0x37c99d)[_0x7ca8('0x18')]();};}function respondWithResult(_0x14f6bb,_0x4fe294){_0x4fe294=_0x4fe294||0xc8;return function(_0xeab700){if(_0xeab700){return _0x14f6bb[_0x7ca8('0x17')](_0x4fe294)[_0x7ca8('0x19')](_0xeab700);}};}function respondWithFilteredResult(_0x3a44bb,_0xddecef){return function(_0x2ba5d7){if(_0x2ba5d7){var _0x5b703a=_0x2ba5d7['count'],_0x15d67b=_0xddecef['offset'],_0x29fccb=_0xddecef['offset']+_0xddecef['limit'],_0x195c4e;if(_0x29fccb>=_0x5b703a){_0x29fccb=_0x5b703a;_0x195c4e=0xc8;}else{_0x195c4e=0xce;}_0x3a44bb[_0x7ca8('0x17')](_0x195c4e);return _0x3a44bb[_0x7ca8('0x1a')](_0x7ca8('0x1b'),_0x15d67b+'-'+_0x29fccb+'/'+_0x5b703a)[_0x7ca8('0x19')](_0x2ba5d7);}return null;};}function patchUpdates(_0x1d3d15){return function(_0x105bfb){try{jsonpatch[_0x7ca8('0x1c')](_0x105bfb,_0x1d3d15,!![]);}catch(_0x2ea272){return BPromise['reject'](_0x2ea272);}return _0x105bfb[_0x7ca8('0x1d')]();};}function saveUpdates(_0x1e5972,_0x4d39ea){return function(_0x4e07b5){if(_0x4e07b5){return _0x4e07b5[_0x7ca8('0x1e')](_0x1e5972)['then'](function(_0x5ce9f4){return _0x5ce9f4;});}return null;};}function removeEntity(_0x11c958,_0x45caa4){return function(_0x482472){if(_0x482472){return _0x482472[_0x7ca8('0x1f')]()['then'](function(){_0x11c958[_0x7ca8('0x17')](0xcc)[_0x7ca8('0x18')]();});}};}function handleEntityNotFound(_0x20890f,_0x480a71){return function(_0x38115f){if(!_0x38115f){_0x20890f[_0x7ca8('0x16')](0x194);}return _0x38115f;};}function handleError(_0x1eecfd,_0x247a09){_0x247a09=_0x247a09||0x1f4;return function(_0x2b2834){logger[_0x7ca8('0x20')](_0x2b2834[_0x7ca8('0x21')]);if(_0x2b2834[_0x7ca8('0x22')]){delete _0x2b2834[_0x7ca8('0x22')];}_0x1eecfd['status'](_0x247a09)[_0x7ca8('0x23')](_0x2b2834);};}exports[_0x7ca8('0x24')]=function(_0x496581,_0x2b68ff){var _0x56fdb1={},_0x1d05e4={},_0x56d448={'count':0x0,'rows':[]};var _0x1ef11b=db[_0x7ca8('0x25')][_0x7ca8('0x26')];_0x1d05e4[_0x7ca8('0x27')]=_['keys'](_0x1ef11b);_0x1d05e4[_0x7ca8('0x28')]=_[_0x7ca8('0x29')](_0x496581[_0x7ca8('0x28')]);_0x1d05e4[_0x7ca8('0x2a')]=_[_0x7ca8('0x2b')](_0x1d05e4['model'],_0x1d05e4[_0x7ca8('0x28')]);_0x56fdb1[_0x7ca8('0x2c')]=_[_0x7ca8('0x2b')](_0x1d05e4[_0x7ca8('0x27')],qs[_0x7ca8('0x2d')](_0x496581[_0x7ca8('0x28')][_0x7ca8('0x2d')]));_0x56fdb1['attributes']=_0x56fdb1[_0x7ca8('0x2c')][_0x7ca8('0x2e')]?_0x56fdb1[_0x7ca8('0x2c')]:_0x1d05e4[_0x7ca8('0x27')];if(!_0x496581[_0x7ca8('0x28')]['hasOwnProperty']('nolimit')){_0x56fdb1[_0x7ca8('0x2f')]=qs[_0x7ca8('0x2f')](_0x496581[_0x7ca8('0x28')]['limit']);_0x56fdb1['offset']=qs[_0x7ca8('0x30')](_0x496581[_0x7ca8('0x28')][_0x7ca8('0x30')]);}_0x56fdb1['order']=qs[_0x7ca8('0x31')](_0x496581['query'][_0x7ca8('0x31')]);_0x56fdb1[_0x7ca8('0x32')]=qs[_0x7ca8('0x2a')](_[_0x7ca8('0x33')](_0x496581[_0x7ca8('0x28')],_0x1d05e4[_0x7ca8('0x2a')]));if(_0x496581[_0x7ca8('0x28')][_0x7ca8('0x34')]){_0x56fdb1[_0x7ca8('0x32')]=_[_0x7ca8('0x35')](_0x56fdb1['where'],{'$or':_[_0x7ca8('0x36')](_0x1ef11b,function(_0x22fdcc){if(_0x22fdcc[_0x7ca8('0x37')][_0x7ca8('0x38')]!==_0x7ca8('0x39')){var _0x4c6b25={};_0x4c6b25[_0x22fdcc[_0x7ca8('0x3a')]]={'$like':'%'+_0x496581[_0x7ca8('0x28')][_0x7ca8('0x34')]+'%'};return _0x4c6b25;}})});}_0x56fdb1=_['merge']({},_0x56fdb1,_0x496581[_0x7ca8('0x3b')]);var _0x30716d={'where':_0x56fdb1[_0x7ca8('0x32')]};return db[_0x7ca8('0x25')]['count'](_0x30716d)[_0x7ca8('0x3c')](function(_0x1e888b){_0x56d448[_0x7ca8('0x3d')]=_0x1e888b;if(_0x496581[_0x7ca8('0x28')][_0x7ca8('0x3e')]){_0x56fdb1[_0x7ca8('0x3f')]=[{'all':!![]}];}return db[_0x7ca8('0x25')][_0x7ca8('0x40')](_0x56fdb1);})[_0x7ca8('0x3c')](function(_0x2acc37){_0x56d448[_0x7ca8('0x41')]=_0x2acc37;return _0x56d448;})[_0x7ca8('0x3c')](respondWithFilteredResult(_0x2b68ff,_0x56fdb1))[_0x7ca8('0x42')](handleError(_0x2b68ff,null));};exports[_0x7ca8('0x43')]=function(_0x1d2f72,_0x1bfd8b){var _0x5940c5={'raw':!![],'where':{'id':_0x1d2f72[_0x7ca8('0x44')]['id']}},_0x52aae5={};_0x52aae5[_0x7ca8('0x27')]=_['keys'](db['VtigerField'][_0x7ca8('0x26')]);_0x52aae5['query']=_['keys'](_0x1d2f72['query']);_0x52aae5['filters']=_[_0x7ca8('0x2b')](_0x52aae5[_0x7ca8('0x27')],_0x52aae5[_0x7ca8('0x28')]);_0x5940c5[_0x7ca8('0x2c')]=_['intersection'](_0x52aae5[_0x7ca8('0x27')],qs[_0x7ca8('0x2d')](_0x1d2f72[_0x7ca8('0x28')][_0x7ca8('0x2d')]));_0x5940c5['attributes']=_0x5940c5['attributes'][_0x7ca8('0x2e')]?_0x5940c5[_0x7ca8('0x2c')]:_0x52aae5[_0x7ca8('0x27')];if(_0x1d2f72['query']['includeAll']){_0x5940c5['include']=[{'all':!![]}];}_0x5940c5=_[_0x7ca8('0x35')]({},_0x5940c5,_0x1d2f72['options']);return db[_0x7ca8('0x25')]['find'](_0x5940c5)[_0x7ca8('0x3c')](handleEntityNotFound(_0x1bfd8b,null))[_0x7ca8('0x3c')](respondWithResult(_0x1bfd8b,null))[_0x7ca8('0x42')](handleError(_0x1bfd8b,null));};exports['create']=function(_0x4b6248,_0x1b3a04){return db[_0x7ca8('0x25')][_0x7ca8('0x45')](_0x4b6248[_0x7ca8('0x46')],{})['then'](respondWithResult(_0x1b3a04,0xc9))['catch'](handleError(_0x1b3a04,null));};exports[_0x7ca8('0x1e')]=function(_0xed5ec1,_0x42c7c8){if(_0xed5ec1['body']['id']){delete _0xed5ec1[_0x7ca8('0x46')]['id'];}return db[_0x7ca8('0x25')][_0x7ca8('0x47')]({'where':{'id':_0xed5ec1[_0x7ca8('0x44')]['id']}})[_0x7ca8('0x3c')](handleEntityNotFound(_0x42c7c8,null))[_0x7ca8('0x3c')](saveUpdates(_0xed5ec1['body'],null))['then'](respondWithResult(_0x42c7c8,null))[_0x7ca8('0x42')](handleError(_0x42c7c8,null));};exports[_0x7ca8('0x1f')]=function(_0x36dbf8,_0x588ae6){return db[_0x7ca8('0x25')][_0x7ca8('0x47')]({'where':{'id':_0x36dbf8[_0x7ca8('0x44')]['id']}})[_0x7ca8('0x3c')](handleEntityNotFound(_0x588ae6,null))[_0x7ca8('0x3c')](removeEntity(_0x588ae6,null))['catch'](handleError(_0x588ae6,null));};
\ No newline at end of file
+var _0xda90=['count','includeAll','include','findAll','rows','catch','show','params','find','create','body','update','eml-format','zip-dir','fast-json-patch','moment','bluebird','mustache','util','to-csv','ejs','lodash','squel','jsforce','querystring','../../components/auth/service','ioredis','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','offset','limit','set','Content-Range','apply','reject','save','then','destroy','error','stack','name','send','index','VtigerField','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','pick','filter','merge','where','map','type','field','options'];(function(_0x54113a,_0xe0c949){var _0xb12546=function(_0x1d0e4d){while(--_0x1d0e4d){_0x54113a['push'](_0x54113a['shift']());}};_0xb12546(++_0xe0c949);}(_0xda90,0x128));var _0x0da9=function(_0x49f4d9,_0x254d94){_0x49f4d9=_0x49f4d9-0x0;var _0x1c3202=_0xda90[_0x49f4d9];return _0x1c3202;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0da9('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x0da9('0x1'));var jsonpatch=require(_0x0da9('0x2'));var rp=require('request-promise');var moment=require(_0x0da9('0x3'));var BPromise=require(_0x0da9('0x4'));var Mustache=require(_0x0da9('0x5'));var util=require(_0x0da9('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0x0da9('0x7'));var ejs=require(_0x0da9('0x8'));var fs=require('fs');var _=require(_0x0da9('0x9'));var squel=require(_0x0da9('0xa'));var crypto=require('crypto');var jsforce=require(_0x0da9('0xb'));var deskjs=require('desk.js');var toCsv=require(_0x0da9('0x7'));var querystring=require(_0x0da9('0xc'));var Papa=require('papaparse');var authService=require(_0x0da9('0xd'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x0da9('0xe'));var qs=require('../../components/parsers/qs');var logger=require(_0x0da9('0xf'))(_0x0da9('0x10'));var utils=require(_0x0da9('0x11'));var config=require(_0x0da9('0x12'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5846ae,_0x1f04a3){_0x1f04a3=_0x1f04a3||0xcc;return function(_0x2e1ea2){if(_0x2e1ea2){return _0x5846ae[_0x0da9('0x13')](_0x1f04a3);}return _0x5846ae['status'](_0x1f04a3)[_0x0da9('0x14')]();};}function respondWithResult(_0xa1be73,_0x4d0fa6){_0x4d0fa6=_0x4d0fa6||0xc8;return function(_0x32b0c5){if(_0x32b0c5){return _0xa1be73[_0x0da9('0x15')](_0x4d0fa6)[_0x0da9('0x16')](_0x32b0c5);}};}function respondWithFilteredResult(_0x34e85e,_0x9b9fbf){return function(_0x1f8eb1){if(_0x1f8eb1){var _0x974bb0=_0x1f8eb1['count'],_0x3d25e1=_0x9b9fbf[_0x0da9('0x17')],_0x2c300c=_0x9b9fbf[_0x0da9('0x17')]+_0x9b9fbf[_0x0da9('0x18')],_0x5e57bc;if(_0x2c300c>=_0x974bb0){_0x2c300c=_0x974bb0;_0x5e57bc=0xc8;}else{_0x5e57bc=0xce;}_0x34e85e[_0x0da9('0x15')](_0x5e57bc);return _0x34e85e[_0x0da9('0x19')](_0x0da9('0x1a'),_0x3d25e1+'-'+_0x2c300c+'/'+_0x974bb0)[_0x0da9('0x16')](_0x1f8eb1);}return null;};}function patchUpdates(_0x336a7b){return function(_0x4ce4a3){try{jsonpatch[_0x0da9('0x1b')](_0x4ce4a3,_0x336a7b,!![]);}catch(_0x265091){return BPromise[_0x0da9('0x1c')](_0x265091);}return _0x4ce4a3[_0x0da9('0x1d')]();};}function saveUpdates(_0x458b9c,_0x2d303a){return function(_0x9da648){if(_0x9da648){return _0x9da648['update'](_0x458b9c)[_0x0da9('0x1e')](function(_0x5a63a3){return _0x5a63a3;});}return null;};}function removeEntity(_0xbe46c3,_0x4475bc){return function(_0x334049){if(_0x334049){return _0x334049[_0x0da9('0x1f')]()[_0x0da9('0x1e')](function(){_0xbe46c3['status'](0xcc)[_0x0da9('0x14')]();});}};}function handleEntityNotFound(_0x121495,_0x5e0ce5){return function(_0x29a4d8){if(!_0x29a4d8){_0x121495['sendStatus'](0x194);}return _0x29a4d8;};}function handleError(_0x23e806,_0x30716e){_0x30716e=_0x30716e||0x1f4;return function(_0x4c5806){logger[_0x0da9('0x20')](_0x4c5806[_0x0da9('0x21')]);if(_0x4c5806[_0x0da9('0x22')]){delete _0x4c5806[_0x0da9('0x22')];}_0x23e806[_0x0da9('0x15')](_0x30716e)[_0x0da9('0x23')](_0x4c5806);};}exports[_0x0da9('0x24')]=function(_0x2aa499,_0x494cea){var _0x3794ce={},_0x2ba707={},_0x3b5776={'count':0x0,'rows':[]};var _0xa3796b=db[_0x0da9('0x25')][_0x0da9('0x26')];_0x2ba707[_0x0da9('0x27')]=_[_0x0da9('0x28')](_0xa3796b);_0x2ba707[_0x0da9('0x29')]=_['keys'](_0x2aa499[_0x0da9('0x29')]);_0x2ba707[_0x0da9('0x2a')]=_[_0x0da9('0x2b')](_0x2ba707[_0x0da9('0x27')],_0x2ba707[_0x0da9('0x29')]);_0x3794ce['attributes']=_[_0x0da9('0x2b')](_0x2ba707['model'],qs[_0x0da9('0x2c')](_0x2aa499['query'][_0x0da9('0x2c')]));_0x3794ce[_0x0da9('0x2d')]=_0x3794ce[_0x0da9('0x2d')][_0x0da9('0x2e')]?_0x3794ce['attributes']:_0x2ba707[_0x0da9('0x27')];if(!_0x2aa499[_0x0da9('0x29')][_0x0da9('0x2f')](_0x0da9('0x30'))){_0x3794ce['limit']=qs[_0x0da9('0x18')](_0x2aa499[_0x0da9('0x29')][_0x0da9('0x18')]);_0x3794ce['offset']=qs['offset'](_0x2aa499['query']['offset']);}_0x3794ce[_0x0da9('0x31')]=qs[_0x0da9('0x32')](_0x2aa499[_0x0da9('0x29')][_0x0da9('0x32')]);_0x3794ce['where']=qs[_0x0da9('0x2a')](_[_0x0da9('0x33')](_0x2aa499[_0x0da9('0x29')],_0x2ba707[_0x0da9('0x2a')]));if(_0x2aa499[_0x0da9('0x29')][_0x0da9('0x34')]){_0x3794ce['where']=_[_0x0da9('0x35')](_0x3794ce[_0x0da9('0x36')],{'$or':_[_0x0da9('0x37')](_0xa3796b,function(_0x58cfe9){if(_0x58cfe9[_0x0da9('0x38')]['key']!=='VIRTUAL'){var _0x3f5c62={};_0x3f5c62[_0x58cfe9[_0x0da9('0x39')]]={'$like':'%'+_0x2aa499[_0x0da9('0x29')]['filter']+'%'};return _0x3f5c62;}})});}_0x3794ce=_[_0x0da9('0x35')]({},_0x3794ce,_0x2aa499[_0x0da9('0x3a')]);var _0x27975b={'where':_0x3794ce[_0x0da9('0x36')]};return db['VtigerField'][_0x0da9('0x3b')](_0x27975b)[_0x0da9('0x1e')](function(_0x10004c){_0x3b5776[_0x0da9('0x3b')]=_0x10004c;if(_0x2aa499[_0x0da9('0x29')][_0x0da9('0x3c')]){_0x3794ce[_0x0da9('0x3d')]=[{'all':!![]}];}return db[_0x0da9('0x25')][_0x0da9('0x3e')](_0x3794ce);})[_0x0da9('0x1e')](function(_0x196f64){_0x3b5776[_0x0da9('0x3f')]=_0x196f64;return _0x3b5776;})[_0x0da9('0x1e')](respondWithFilteredResult(_0x494cea,_0x3794ce))[_0x0da9('0x40')](handleError(_0x494cea,null));};exports[_0x0da9('0x41')]=function(_0x30c8d4,_0x7ae7cf){var _0x3759f1={'raw':!![],'where':{'id':_0x30c8d4[_0x0da9('0x42')]['id']}},_0x4bf537={};_0x4bf537['model']=_[_0x0da9('0x28')](db[_0x0da9('0x25')]['rawAttributes']);_0x4bf537[_0x0da9('0x29')]=_['keys'](_0x30c8d4[_0x0da9('0x29')]);_0x4bf537[_0x0da9('0x2a')]=_[_0x0da9('0x2b')](_0x4bf537[_0x0da9('0x27')],_0x4bf537[_0x0da9('0x29')]);_0x3759f1[_0x0da9('0x2d')]=_[_0x0da9('0x2b')](_0x4bf537['model'],qs['fields'](_0x30c8d4[_0x0da9('0x29')][_0x0da9('0x2c')]));_0x3759f1[_0x0da9('0x2d')]=_0x3759f1[_0x0da9('0x2d')][_0x0da9('0x2e')]?_0x3759f1[_0x0da9('0x2d')]:_0x4bf537[_0x0da9('0x27')];if(_0x30c8d4[_0x0da9('0x29')][_0x0da9('0x3c')]){_0x3759f1[_0x0da9('0x3d')]=[{'all':!![]}];}_0x3759f1=_['merge']({},_0x3759f1,_0x30c8d4[_0x0da9('0x3a')]);return db[_0x0da9('0x25')][_0x0da9('0x43')](_0x3759f1)[_0x0da9('0x1e')](handleEntityNotFound(_0x7ae7cf,null))[_0x0da9('0x1e')](respondWithResult(_0x7ae7cf,null))[_0x0da9('0x40')](handleError(_0x7ae7cf,null));};exports[_0x0da9('0x44')]=function(_0x350ceb,_0x4cd48){return db[_0x0da9('0x25')][_0x0da9('0x44')](_0x350ceb[_0x0da9('0x45')],{})[_0x0da9('0x1e')](respondWithResult(_0x4cd48,0xc9))[_0x0da9('0x40')](handleError(_0x4cd48,null));};exports[_0x0da9('0x46')]=function(_0x18e5b7,_0x46d870){if(_0x18e5b7[_0x0da9('0x45')]['id']){delete _0x18e5b7[_0x0da9('0x45')]['id'];}return db[_0x0da9('0x25')][_0x0da9('0x43')]({'where':{'id':_0x18e5b7[_0x0da9('0x42')]['id']}})[_0x0da9('0x1e')](handleEntityNotFound(_0x46d870,null))[_0x0da9('0x1e')](saveUpdates(_0x18e5b7['body'],null))[_0x0da9('0x1e')](respondWithResult(_0x46d870,null))['catch'](handleError(_0x46d870,null));};exports[_0x0da9('0x1f')]=function(_0x3e59a2,_0x4c6559){return db[_0x0da9('0x25')][_0x0da9('0x43')]({'where':{'id':_0x3e59a2['params']['id']}})[_0x0da9('0x1e')](handleEntityNotFound(_0x4c6559,null))[_0x0da9('0x1e')](removeEntity(_0x4c6559,null))[_0x0da9('0x40')](handleError(_0x4c6559,null));};
\ No newline at end of file
index a397d27..f8afa22 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x435a=['int_vtiger_fields','idField','FieldId','util','../../config/logger','api','request-promise','./intVtigerField.attributes','exports','define','VtigerField'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0x435a,0x1b0));var _0xa435=function(_0x456907,_0x84e54b){_0x456907=_0x456907-0x0;var _0x54a030=_0x435a[_0x456907];return _0x54a030;};'use strict';var _=require('lodash');var util=require(_0xa435('0x0'));var logger=require(_0xa435('0x1'))(_0xa435('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xa435('0x3'));var attributes=require(_0xa435('0x4'));module[_0xa435('0x5')]=function(_0xb44b75,_0x46c03c){return _0xb44b75[_0xa435('0x6')](_0xa435('0x7'),attributes,{'tableName':_0xa435('0x8'),'paranoid':![],'indexes':[{'name':'vtiger_unique_index','fields':[_0xa435('0x9'),_0xa435('0xa')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x442b=['VtigerField','vtiger_unique_index','idField','lodash','util','moment','request-promise','./intVtigerField.attributes','exports'];(function(_0x194bc8,_0x68a53b){var _0x47f0b7=function(_0x34de30){while(--_0x34de30){_0x194bc8['push'](_0x194bc8['shift']());}};_0x47f0b7(++_0x68a53b);}(_0x442b,0x150));var _0xb442=function(_0x4ab16a,_0x2a9cc3){_0x4ab16a=_0x4ab16a-0x0;var _0x260bf2=_0x442b[_0x4ab16a];return _0x260bf2;};'use strict';var _=require(_0xb442('0x0'));var util=require(_0xb442('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xb442('0x2'));var BPromise=require('bluebird');var rp=require(_0xb442('0x3'));var attributes=require(_0xb442('0x4'));module[_0xb442('0x5')]=function(_0x315873,_0x6c989e){return _0x315873['define'](_0xb442('0x6'),attributes,{'tableName':'int_vtiger_fields','paranoid':![],'indexes':[{'name':_0xb442('0x7'),'fields':[_0xb442('0x8'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 711370c..d810752 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4aca=['jayson/promise','client','http','request','then','info','debug','stringify','error','code','message','VtigerField,\x20%s,\x20%s','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0x4aca,0x195));var _0xa4ac=function(_0x4186c3,_0x206613){_0x4186c3=_0x4186c3-0x0;var _0x2c549e=_0x4aca[_0x4186c3];return _0x2c549e;};'use strict';var _=require('lodash');var util=require(_0xa4ac('0x0'));var moment=require(_0xa4ac('0x1'));var BPromise=require(_0xa4ac('0x2'));var rs=require(_0xa4ac('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xa4ac('0x4'))['db'];var utils=require(_0xa4ac('0x5'));var logger=require(_0xa4ac('0x6'))(_0xa4ac('0x7'));var config=require(_0xa4ac('0x8'));var jayson=require(_0xa4ac('0x9'));var client=jayson[_0xa4ac('0xa')][_0xa4ac('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x2c9fd1,_0xdca671,_0x25b538){return new BPromise(function(_0x26ecc3,_0x528963){return client[_0xa4ac('0xc')](_0x2c9fd1,_0x25b538)[_0xa4ac('0xd')](function(_0x22aa47){logger[_0xa4ac('0xe')]('VtigerField,\x20%s,\x20%s',_0xdca671,'request\x20sent');logger[_0xa4ac('0xf')]('VtigerField,\x20%s,\x20%s,\x20%s',_0xdca671,'request\x20sent',JSON[_0xa4ac('0x10')](_0x22aa47));if(_0x22aa47[_0xa4ac('0x11')]){if(_0x22aa47[_0xa4ac('0x11')][_0xa4ac('0x12')]===0x1f4){logger[_0xa4ac('0x11')]('VtigerField,\x20%s,\x20%s',_0xdca671,_0x22aa47[_0xa4ac('0x11')][_0xa4ac('0x13')]);return _0x528963(_0x22aa47[_0xa4ac('0x11')][_0xa4ac('0x13')]);}logger[_0xa4ac('0x11')](_0xa4ac('0x14'),_0xdca671,_0x22aa47[_0xa4ac('0x11')][_0xa4ac('0x13')]);return _0x26ecc3(_0x22aa47[_0xa4ac('0x11')][_0xa4ac('0x13')]);}else{logger[_0xa4ac('0xe')](_0xa4ac('0x14'),_0xdca671,'request\x20sent');_0x26ecc3(_0x22aa47[_0xa4ac('0x15')][_0xa4ac('0x13')]);}})[_0xa4ac('0x16')](function(_0x4a04d6){logger[_0xa4ac('0x11')](_0xa4ac('0x14'),_0xdca671,_0x4a04d6);_0x528963(_0x4a04d6);});});}
\ No newline at end of file
+var _0x219f=['catch','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','VtigerField,\x20%s,\x20%s','request\x20sent','debug','error','message','info'];(function(_0x45a5dc,_0x1f178a){var _0x344c96=function(_0x8f333c){while(--_0x8f333c){_0x45a5dc['push'](_0x45a5dc['shift']());}};_0x344c96(++_0x1f178a);}(_0x219f,0xdd));var _0xf219=function(_0x1073a8,_0x158757){_0x1073a8=_0x1073a8-0x0;var _0x19b3f0=_0x219f[_0x1073a8];return _0x19b3f0;};'use strict';var _=require(_0xf219('0x0'));var util=require('util');var moment=require(_0xf219('0x1'));var BPromise=require(_0xf219('0x2'));var rs=require(_0xf219('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xf219('0x4'))['db'];var utils=require(_0xf219('0x5'));var logger=require(_0xf219('0x6'))('rpc');var config=require(_0xf219('0x7'));var jayson=require(_0xf219('0x8'));var client=jayson[_0xf219('0x9')][_0xf219('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x34e054,_0x221351,_0x1feacd){return new BPromise(function(_0x326ed5,_0x2f47f8){return client[_0xf219('0xb')](_0x34e054,_0x1feacd)[_0xf219('0xc')](function(_0x11db19){logger['info'](_0xf219('0xd'),_0x221351,_0xf219('0xe'));logger[_0xf219('0xf')]('VtigerField,\x20%s,\x20%s,\x20%s',_0x221351,_0xf219('0xe'),JSON['stringify'](_0x11db19));if(_0x11db19[_0xf219('0x10')]){if(_0x11db19[_0xf219('0x10')]['code']===0x1f4){logger['error'](_0xf219('0xd'),_0x221351,_0x11db19[_0xf219('0x10')][_0xf219('0x11')]);return _0x2f47f8(_0x11db19[_0xf219('0x10')][_0xf219('0x11')]);}logger[_0xf219('0x10')]('VtigerField,\x20%s,\x20%s',_0x221351,_0x11db19[_0xf219('0x10')][_0xf219('0x11')]);return _0x326ed5(_0x11db19[_0xf219('0x10')][_0xf219('0x11')]);}else{logger[_0xf219('0x12')](_0xf219('0xd'),_0x221351,_0xf219('0xe'));_0x326ed5(_0x11db19['result'][_0xf219('0x11')]);}})[_0xf219('0x13')](function(_0x2f9f3b){logger[_0xf219('0x10')]('VtigerField,\x20%s,\x20%s',_0x221351,_0x2f9f3b);_0x2f47f8(_0x2f9f3b);});});}
\ No newline at end of file
index b8347ca..a11172d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x41f7=['path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get','index','/:id','isAuthenticated','getConfigurations','/:id/fields','getFields','post','/:id/configurations','put','update','delete','destroy','util'];(function(_0x34eb31,_0x437f6d){var _0x3863a1=function(_0x4330c4){while(--_0x4330c4){_0x34eb31['push'](_0x34eb31['shift']());}};_0x3863a1(++_0x437f6d);}(_0x41f7,0x9f));var _0x741f=function(_0x3ff986,_0x2f888b){_0x3ff986=_0x3ff986-0x0;var _0x1dea72=_0x41f7[_0x3ff986];return _0x1dea72;};'use strict';var multer=require('multer');var util=require(_0x741f('0x0'));var path=require(_0x741f('0x1'));var timeout=require(_0x741f('0x2'));var express=require(_0x741f('0x3'));var router=express[_0x741f('0x4')]();var auth=require(_0x741f('0x5'));var interaction=require(_0x741f('0x6'));var config=require('../../config/environment');var controller=require('./intZendeskAccount.controller');router[_0x741f('0x7')]('/',auth['isAuthenticated'](),controller[_0x741f('0x8')]);router[_0x741f('0x7')](_0x741f('0x9'),auth[_0x741f('0xa')](),controller['show']);router['get']('/:id/configurations',auth[_0x741f('0xa')](),controller[_0x741f('0xb')]);router[_0x741f('0x7')](_0x741f('0xc'),auth['isAuthenticated'](),controller[_0x741f('0xd')]);router[_0x741f('0xe')]('/',auth[_0x741f('0xa')](),controller['create']);router[_0x741f('0xe')](_0x741f('0xf'),auth['isAuthenticated'](),controller['addConfiguration']);router[_0x741f('0x10')](_0x741f('0x9'),auth[_0x741f('0xa')](),controller[_0x741f('0x11')]);router[_0x741f('0x12')](_0x741f('0x9'),auth[_0x741f('0xa')](),controller[_0x741f('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0x2ba7=['../../components/interaction/service','../../config/environment','./intZendeskAccount.controller','get','isAuthenticated','index','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','put','/:id','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0xd2b83b,_0x1c916a){var _0x5314a0=function(_0x4f163c){while(--_0x4f163c){_0xd2b83b['push'](_0xd2b83b['shift']());}};_0x5314a0(++_0x1c916a);}(_0x2ba7,0x165));var _0x72ba=function(_0x3ef6d6,_0x1f5253){_0x3ef6d6=_0x3ef6d6-0x0;var _0x21c630=_0x2ba7[_0x3ef6d6];return _0x21c630;};'use strict';var multer=require(_0x72ba('0x0'));var util=require(_0x72ba('0x1'));var path=require(_0x72ba('0x2'));var timeout=require(_0x72ba('0x3'));var express=require(_0x72ba('0x4'));var router=express[_0x72ba('0x5')]();var auth=require(_0x72ba('0x6'));var interaction=require(_0x72ba('0x7'));var config=require(_0x72ba('0x8'));var controller=require(_0x72ba('0x9'));router[_0x72ba('0xa')]('/',auth[_0x72ba('0xb')](),controller[_0x72ba('0xc')]);router['get']('/:id',auth[_0x72ba('0xb')](),controller[_0x72ba('0xd')]);router[_0x72ba('0xa')](_0x72ba('0xe'),auth[_0x72ba('0xb')](),controller[_0x72ba('0xf')]);router[_0x72ba('0xa')](_0x72ba('0x10'),auth[_0x72ba('0xb')](),controller[_0x72ba('0x11')]);router[_0x72ba('0x12')]('/',auth[_0x72ba('0xb')](),controller[_0x72ba('0x13')]);router[_0x72ba('0x12')](_0x72ba('0xe'),auth['isAuthenticated'](),controller['addConfiguration']);router[_0x72ba('0x14')](_0x72ba('0x15'),auth[_0x72ba('0xb')](),controller[_0x72ba('0x16')]);router[_0x72ba('0x17')](_0x72ba('0x15'),auth[_0x72ba('0xb')](),controller[_0x72ba('0x18')]);module[_0x72ba('0x19')]=router;
\ No newline at end of file
index cf80f7f..a8d47af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x17fd=['remoteUri','ENUM','token','password','integrationTab','newTab','sequelize','exports','STRING','username'];(function(_0x246a24,_0xc8ecad){var _0x22807d=function(_0x1c6a5b){while(--_0x1c6a5b){_0x246a24['push'](_0x246a24['shift']());}};_0x22807d(++_0xc8ecad);}(_0x17fd,0x1aa));var _0xd17f=function(_0x4e8653,_0xb3260b){_0x4e8653=_0x4e8653-0x0;var _0x55a5e2=_0x17fd[_0x4e8653];return _0x55a5e2;};'use strict';var Sequelize=require(_0xd17f('0x0'));module[_0xd17f('0x1')]={'name':{'type':Sequelize[_0xd17f('0x2')]},'description':{'type':Sequelize[_0xd17f('0x2')]},'username':{'type':Sequelize[_0xd17f('0x2')],'unique':_0xd17f('0x3')},'password':{'type':Sequelize[_0xd17f('0x2')]},'token':{'type':Sequelize[_0xd17f('0x2')]},'remoteUri':{'type':Sequelize[_0xd17f('0x2')],'unique':_0xd17f('0x4')},'authType':{'type':Sequelize[_0xd17f('0x5')]('password',_0xd17f('0x6')),'defaultValue':_0xd17f('0x7')},'serverUrl':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0xd17f('0x5')](_0xd17f('0x8'),_0xd17f('0x9')),'defaultValue':_0xd17f('0x8')}};
\ No newline at end of file
+var _0x142c=['exports','STRING','username','remoteUri','ENUM','password','token','integrationTab','sequelize'];(function(_0x3eb149,_0x2f8d3a){var _0x21d9cf=function(_0x3b2c89){while(--_0x3b2c89){_0x3eb149['push'](_0x3eb149['shift']());}};_0x21d9cf(++_0x2f8d3a);}(_0x142c,0x1af));var _0xc142=function(_0x426b63,_0x3b4c07){_0x426b63=_0x426b63-0x0;var _0x1adcc0=_0x142c[_0x426b63];return _0x1adcc0;};'use strict';var Sequelize=require(_0xc142('0x0'));module[_0xc142('0x1')]={'name':{'type':Sequelize[_0xc142('0x2')]},'description':{'type':Sequelize['STRING']},'username':{'type':Sequelize['STRING'],'unique':_0xc142('0x3')},'password':{'type':Sequelize['STRING']},'token':{'type':Sequelize[_0xc142('0x2')]},'remoteUri':{'type':Sequelize['STRING'],'unique':_0xc142('0x4')},'authType':{'type':Sequelize[_0xc142('0x5')](_0xc142('0x6'),_0xc142('0x7')),'defaultValue':_0xc142('0x6')},'serverUrl':{'type':Sequelize[_0xc142('0x2')]},'type':{'type':Sequelize[_0xc142('0x5')](_0xc142('0x8'),'newTab'),'defaultValue':_0xc142('0x8')}};
\ No newline at end of file
index dada8eb..65a3074 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6918=['update','name','send','index','ZendeskAccount','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','limit','offset','order','where','filters','pick','filter','merge','options','count','includeAll','include','findAll','catch','params','create','body','destroy','find','getConfigurations','findOne','ZendeskConfiguration','sort','map','hasOwnProperty','addConfiguration','AccountId','channel','Descriptions','getDescriptions','type','ZendeskField','Subjects','getFields','username','password','token','authType','remoteUri','slice','lastIndexOf','GET','%s/%s','format','Basic\x20%s','toString','base64','headers','ValidationError','subject','description','group','assignee','remove','ticket_fields','includes','system_field_options','custom_field_options','test','statusCode','getFields,\x20%s,\x20%s,\x20%s','stringify','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','client','http','request','then','ZendeskAccount,\x20%s,\x20%s','request\x20sent','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','error','message','result','sendStatus','status','end','set','Content-Range','json','apply','reject'];(function(_0x842858,_0x3a3ca0){var _0x46c2a2=function(_0x47f795){while(--_0x47f795){_0x842858['push'](_0x842858['shift']());}};_0x46c2a2(++_0x3a3ca0);}(_0x6918,0xc8));var _0x8691=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x6918[_0x3b380d];return _0x54502b;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x8691('0x0'));var rimraf=require(_0x8691('0x1'));var zipdir=require(_0x8691('0x2'));var jsonpatch=require(_0x8691('0x3'));var rp=require(_0x8691('0x4'));var moment=require(_0x8691('0x5'));var BPromise=require(_0x8691('0x6'));var Mustache=require(_0x8691('0x7'));var util=require(_0x8691('0x8'));var path=require(_0x8691('0x9'));var sox=require(_0x8691('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x8691('0xb'));var squel=require(_0x8691('0xc'));var crypto=require(_0x8691('0xd'));var jsforce=require(_0x8691('0xe'));var deskjs=require(_0x8691('0xf'));var toCsv=require(_0x8691('0x10'));var querystring=require(_0x8691('0x11'));var Papa=require(_0x8691('0x12'));var authService=require(_0x8691('0x13'));var hardwareService=require(_0x8691('0x14'));var Redis=require(_0x8691('0x15'));var qs=require(_0x8691('0x16'));var logger=require(_0x8691('0x17'))(_0x8691('0x18'));var utils=require(_0x8691('0x19'));var config=require(_0x8691('0x1a'));var db=require(_0x8691('0x1b'))['db'];var integrations=require(_0x8691('0x1c'));var jayson=require('jayson/promise');var client=jayson[_0x8691('0x1d')][_0x8691('0x1e')]({'port':0x232a});function respondWithRpcPromise(_0x13662a,_0x6dfdaf,_0x22e8e9,_0x116d9d){return new BPromise(function(_0x19ffac,_0x433b50){var _0x497ba8=_0x116d9d||client;return _0x497ba8[_0x8691('0x1f')](_0x13662a,_0x22e8e9)[_0x8691('0x20')](function(_0x428879){logger['info'](_0x8691('0x21'),_0x6dfdaf,_0x8691('0x22'));logger[_0x8691('0x23')](_0x8691('0x24'),_0x6dfdaf,_0x8691('0x22'),JSON['stringify'](_0x428879));if(_0x428879[_0x8691('0x25')]){if(_0x428879[_0x8691('0x25')]['code']===0x1f4){logger[_0x8691('0x25')](_0x8691('0x21'),_0x6dfdaf,_0x428879[_0x8691('0x25')][_0x8691('0x26')]);return _0x433b50(_0x428879['error']['message']);}logger[_0x8691('0x25')](_0x8691('0x21'),_0x6dfdaf,_0x428879['error']['message']);return _0x19ffac(_0x428879[_0x8691('0x25')][_0x8691('0x26')]);}else{logger['info'](_0x8691('0x21'),_0x6dfdaf,_0x8691('0x22'));_0x19ffac(_0x428879[_0x8691('0x27')][_0x8691('0x26')]);}})['catch'](function(_0x564dd2){logger[_0x8691('0x25')]('ZendeskAccount,\x20%s,\x20%s',_0x6dfdaf,_0x564dd2);_0x433b50(_0x564dd2);});});}function respondWithStatusCode(_0x1226ad,_0x3ad6ec){_0x3ad6ec=_0x3ad6ec||0xcc;return function(_0x4328ee){if(_0x4328ee){return _0x1226ad[_0x8691('0x28')](_0x3ad6ec);}return _0x1226ad[_0x8691('0x29')](_0x3ad6ec)[_0x8691('0x2a')]();};}function respondWithResult(_0x514623,_0x45c0a7){_0x45c0a7=_0x45c0a7||0xc8;return function(_0x341c76){if(_0x341c76){return _0x514623[_0x8691('0x29')](_0x45c0a7)['json'](_0x341c76);}};}function respondWithFilteredResult(_0xdb7dd8,_0x32dc7a){return function(_0xd43868){if(_0xd43868){var _0x306e54=_0xd43868['count'],_0x24a02e=_0x32dc7a['offset'],_0x3ee2b1=_0x32dc7a['offset']+_0x32dc7a['limit'],_0x4ee6aa;if(_0x3ee2b1>=_0x306e54){_0x3ee2b1=_0x306e54;_0x4ee6aa=0xc8;}else{_0x4ee6aa=0xce;}_0xdb7dd8[_0x8691('0x29')](_0x4ee6aa);return _0xdb7dd8[_0x8691('0x2b')](_0x8691('0x2c'),_0x24a02e+'-'+_0x3ee2b1+'/'+_0x306e54)[_0x8691('0x2d')](_0xd43868);}return null;};}function patchUpdates(_0x453a1b){return function(_0x3790c2){try{jsonpatch[_0x8691('0x2e')](_0x3790c2,_0x453a1b,!![]);}catch(_0xa9ef5b){return BPromise[_0x8691('0x2f')](_0xa9ef5b);}return _0x3790c2['save']();};}function saveUpdates(_0x1857f2,_0xb8d0ab){return function(_0x4ee16d){if(_0x4ee16d){return _0x4ee16d[_0x8691('0x30')](_0x1857f2)[_0x8691('0x20')](function(_0x93f59e){return _0x93f59e;});}return null;};}function removeEntity(_0xe009a3,_0x21b790){return function(_0x59408f){if(_0x59408f){return _0x59408f['destroy']()[_0x8691('0x20')](function(){_0xe009a3[_0x8691('0x29')](0xcc)[_0x8691('0x2a')]();});}};}function handleEntityNotFound(_0xfcb246,_0x26aae8){return function(_0x4fc74d){if(!_0x4fc74d){_0xfcb246[_0x8691('0x28')](0x194);}return _0x4fc74d;};}function handleError(_0x3c8af6,_0x13fdc4){_0x13fdc4=_0x13fdc4||0x1f4;return function(_0x1faabd){logger[_0x8691('0x25')](_0x1faabd['stack']);if(_0x1faabd[_0x8691('0x31')]){delete _0x1faabd[_0x8691('0x31')];}_0x3c8af6[_0x8691('0x29')](_0x13fdc4)[_0x8691('0x32')](_0x1faabd);};}exports[_0x8691('0x33')]=function(_0x574ee3,_0x52b104){var _0x4eaf48={},_0x2c06a2={},_0x1cca1f={'count':0x0,'rows':[]};var _0x5d0a5d=db[_0x8691('0x34')][_0x8691('0x35')];_0x2c06a2[_0x8691('0x36')]=_[_0x8691('0x37')](_0x5d0a5d);_0x2c06a2[_0x8691('0x38')]=_['keys'](_0x574ee3[_0x8691('0x38')]);_0x2c06a2['filters']=_[_0x8691('0x39')](_0x2c06a2[_0x8691('0x36')],_0x2c06a2[_0x8691('0x38')]);_0x4eaf48[_0x8691('0x3a')]=_['intersection'](_0x2c06a2['model'],qs[_0x8691('0x3b')](_0x574ee3[_0x8691('0x38')][_0x8691('0x3b')]));_0x4eaf48[_0x8691('0x3a')]=_0x4eaf48[_0x8691('0x3a')][_0x8691('0x3c')]?_0x4eaf48['attributes']:_0x2c06a2[_0x8691('0x36')];if(!_0x574ee3[_0x8691('0x38')]['hasOwnProperty'](_0x8691('0x3d'))){_0x4eaf48[_0x8691('0x3e')]=qs[_0x8691('0x3e')](_0x574ee3['query'][_0x8691('0x3e')]);_0x4eaf48['offset']=qs[_0x8691('0x3f')](_0x574ee3[_0x8691('0x38')][_0x8691('0x3f')]);}_0x4eaf48[_0x8691('0x40')]=qs['sort'](_0x574ee3[_0x8691('0x38')]['sort']);_0x4eaf48[_0x8691('0x41')]=qs[_0x8691('0x42')](_[_0x8691('0x43')](_0x574ee3[_0x8691('0x38')],_0x2c06a2[_0x8691('0x42')]));if(_0x574ee3[_0x8691('0x38')][_0x8691('0x44')]){_0x4eaf48['where']=_[_0x8691('0x45')](_0x4eaf48[_0x8691('0x41')],{'$or':_['map'](_0x5d0a5d,function(_0x48377d){if(_0x48377d['type']['key']!=='VIRTUAL'){var _0x1886ab={};_0x1886ab[_0x48377d['field']]={'$like':'%'+_0x574ee3[_0x8691('0x38')][_0x8691('0x44')]+'%'};return _0x1886ab;}})});}_0x4eaf48=_[_0x8691('0x45')]({},_0x4eaf48,_0x574ee3[_0x8691('0x46')]);var _0x2e6ea1={'where':_0x4eaf48[_0x8691('0x41')]};return db[_0x8691('0x34')][_0x8691('0x47')](_0x2e6ea1)[_0x8691('0x20')](function(_0x1a4b68){_0x1cca1f[_0x8691('0x47')]=_0x1a4b68;if(_0x574ee3[_0x8691('0x38')][_0x8691('0x48')]){_0x4eaf48[_0x8691('0x49')]=[{'all':!![]}];}return db['ZendeskAccount'][_0x8691('0x4a')](_0x4eaf48);})[_0x8691('0x20')](function(_0x1957f1){_0x1cca1f['rows']=_0x1957f1;return _0x1cca1f;})[_0x8691('0x20')](respondWithFilteredResult(_0x52b104,_0x4eaf48))[_0x8691('0x4b')](handleError(_0x52b104,null));};exports['show']=function(_0x3d3153,_0x3d7256){var _0x488d38={'raw':![],'where':{'id':_0x3d3153[_0x8691('0x4c')]['id']}},_0x417de7={};_0x417de7[_0x8691('0x36')]=_[_0x8691('0x37')](db[_0x8691('0x34')]['rawAttributes']);_0x417de7[_0x8691('0x38')]=_[_0x8691('0x37')](_0x3d3153[_0x8691('0x38')]);_0x417de7[_0x8691('0x42')]=_[_0x8691('0x39')](_0x417de7['model'],_0x417de7[_0x8691('0x38')]);_0x488d38[_0x8691('0x3a')]=_[_0x8691('0x39')](_0x417de7['model'],qs[_0x8691('0x3b')](_0x3d3153[_0x8691('0x38')]['fields']));_0x488d38['attributes']=_0x488d38[_0x8691('0x3a')][_0x8691('0x3c')]?_0x488d38[_0x8691('0x3a')]:_0x417de7[_0x8691('0x36')];if(_0x3d3153[_0x8691('0x38')][_0x8691('0x48')]){_0x488d38[_0x8691('0x49')]=[{'all':!![]}];}_0x488d38=_['merge']({},_0x488d38,_0x3d3153[_0x8691('0x46')]);return db[_0x8691('0x34')]['find'](_0x488d38)['then'](handleEntityNotFound(_0x3d7256,null))['then'](respondWithResult(_0x3d7256,null))[_0x8691('0x4b')](handleError(_0x3d7256,null));};exports[_0x8691('0x4d')]=function(_0x140a7a,_0x109755){return db[_0x8691('0x34')][_0x8691('0x4d')](_0x140a7a[_0x8691('0x4e')],{})[_0x8691('0x20')](respondWithResult(_0x109755,0xc9))[_0x8691('0x4b')](handleError(_0x109755,null));};exports['update']=function(_0x592b21,_0x34305d){if(_0x592b21['body']['id']){delete _0x592b21[_0x8691('0x4e')]['id'];}return db['ZendeskAccount']['find']({'where':{'id':_0x592b21[_0x8691('0x4c')]['id']}})[_0x8691('0x20')](handleEntityNotFound(_0x34305d,null))[_0x8691('0x20')](saveUpdates(_0x592b21['body'],null))['then'](respondWithResult(_0x34305d,null))['catch'](handleError(_0x34305d,null));};exports[_0x8691('0x4f')]=function(_0x1959e8,_0x473e16){return db[_0x8691('0x34')][_0x8691('0x50')]({'where':{'id':_0x1959e8[_0x8691('0x4c')]['id']}})['then'](handleEntityNotFound(_0x473e16,null))['then'](removeEntity(_0x473e16,null))[_0x8691('0x4b')](handleError(_0x473e16,null));};exports[_0x8691('0x51')]=function(_0x446b8b,_0x518183,_0x376c58){var _0x9605c={};var _0x24227e={};var _0x53eba7;var _0x1fb6a5;return db[_0x8691('0x34')][_0x8691('0x52')]({'where':{'id':_0x446b8b[_0x8691('0x4c')]['id']}})['then'](handleEntityNotFound(_0x518183,null))['then'](function(_0x3ea77d){if(_0x3ea77d){_0x53eba7=_0x3ea77d;_0x24227e[_0x8691('0x36')]=_[_0x8691('0x37')](db[_0x8691('0x53')][_0x8691('0x35')]);_0x24227e[_0x8691('0x38')]=_[_0x8691('0x37')](_0x446b8b[_0x8691('0x38')]);_0x24227e[_0x8691('0x42')]=_[_0x8691('0x39')](_0x24227e['model'],_0x24227e[_0x8691('0x38')]);_0x9605c[_0x8691('0x3a')]=_[_0x8691('0x39')](_0x24227e[_0x8691('0x36')],qs[_0x8691('0x3b')](_0x446b8b[_0x8691('0x38')][_0x8691('0x3b')]));_0x9605c[_0x8691('0x3a')]=_0x9605c[_0x8691('0x3a')][_0x8691('0x3c')]?_0x9605c[_0x8691('0x3a')]:_0x24227e['model'];_0x9605c[_0x8691('0x40')]=qs['sort'](_0x446b8b[_0x8691('0x38')][_0x8691('0x54')]);_0x9605c['where']=qs[_0x8691('0x42')](_[_0x8691('0x43')](_0x446b8b[_0x8691('0x38')],_0x24227e['filters']));if(_0x446b8b['query'][_0x8691('0x44')]){_0x9605c['where']=_[_0x8691('0x45')](_0x9605c[_0x8691('0x41')],{'$or':_[_0x8691('0x55')](_0x9605c['attributes'],function(_0x23192c){var _0x41263d={};_0x41263d[_0x23192c]={'$like':'%'+_0x446b8b[_0x8691('0x38')]['filter']+'%'};return _0x41263d;})});}_0x9605c=_[_0x8691('0x45')]({},_0x9605c,_0x446b8b[_0x8691('0x46')]);return _0x53eba7['getConfigurations'](_0x9605c);}})[_0x8691('0x20')](function(_0x494d8d){if(_0x494d8d){_0x1fb6a5=_0x494d8d[_0x8691('0x3c')];if(!_0x446b8b[_0x8691('0x38')][_0x8691('0x56')](_0x8691('0x3d'))){_0x9605c['limit']=qs[_0x8691('0x3e')](_0x446b8b['query']['limit']);_0x9605c[_0x8691('0x3f')]=qs['offset'](_0x446b8b['query'][_0x8691('0x3f')]);}return _0x53eba7[_0x8691('0x51')](_0x9605c);}})['then'](function(_0x3edba3){if(_0x3edba3){return _0x3edba3?{'count':_0x1fb6a5,'rows':_0x3edba3}:null;}})[_0x8691('0x20')](respondWithResult(_0x518183,null))['catch'](handleError(_0x518183,null));};exports[_0x8691('0x57')]=function(_0x1c0b9b,_0x51c02a,_0x6e6153){if(_0x1c0b9b['body']['id']){delete _0x1c0b9b[_0x8691('0x4e')]['id'];}return db[_0x8691('0x34')]['findOne']({'where':{'id':_0x1c0b9b[_0x8691('0x4c')]['id']}})[_0x8691('0x20')](handleEntityNotFound(_0x51c02a,null))[_0x8691('0x20')](function(_0xcdf9d6){if(_0xcdf9d6){_0x1c0b9b[_0x8691('0x4e')][_0x8691('0x58')]=_0xcdf9d6['id'];_0x1c0b9b[_0x8691('0x4e')]['Subjects']=integrations['getSubjects'](_0x1c0b9b[_0x8691('0x4e')][_0x8691('0x59')],_0x1c0b9b[_0x8691('0x4e')]['type']);_0x1c0b9b[_0x8691('0x4e')][_0x8691('0x5a')]=integrations[_0x8691('0x5b')](_0x1c0b9b[_0x8691('0x4e')][_0x8691('0x59')],_0x1c0b9b[_0x8691('0x4e')][_0x8691('0x5c')]);return db['ZendeskConfiguration']['create'](_0x1c0b9b[_0x8691('0x4e')],{'include':[{'model':db[_0x8691('0x5d')],'as':_0x8691('0x5e')},{'model':db[_0x8691('0x5d')],'as':_0x8691('0x5a')}]});}return null;})[_0x8691('0x20')](respondWithResult(_0x51c02a,null))['catch'](handleError(_0x51c02a,null));};exports[_0x8691('0x5f')]=function(_0x360e27,_0x407406,_0x27766e){var _0x15d571='';return db[_0x8691('0x34')]['findOne']({'where':{'id':_0x360e27[_0x8691('0x4c')]['id']},'attributes':['id',_0x8691('0x60'),_0x8691('0x61'),_0x8691('0x62'),_0x8691('0x63'),_0x8691('0x64')]})[_0x8691('0x20')](handleEntityNotFound(_0x407406,null))[_0x8691('0x20')](function(_0x51484e){if(_0x51484e){_0x15d571=_0x51484e[_0x8691('0x64')];var _0x34ec44=_0x15d571[_0x8691('0x65')](-0x1);if(_0x34ec44==='/'){_0x15d571=_0x15d571['substring'](0x0,_0x15d571[_0x8691('0x66')](_0x34ec44));}var _0x2792d0={'method':_0x8691('0x67'),'uri':util['format'](_0x8691('0x68'),_0x15d571,'ticket_fields'),'json':!![]};switch(_0x51484e['authType']){case _0x8691('0x61'):_0x2792d0['headers']={'Authorization':util[_0x8691('0x69')](_0x8691('0x6a'),new Buffer(util[_0x8691('0x69')]('%s:%s',_0x51484e['username'],_0x51484e[_0x8691('0x61')]))[_0x8691('0x6b')](_0x8691('0x6c')))};break;case _0x8691('0x62'):_0x2792d0[_0x8691('0x6d')]={'Authorization':util['format'](_0x8691('0x6a'),new Buffer(util['format']('%s/token:%s',_0x51484e['username'],_0x51484e[_0x8691('0x62')]))[_0x8691('0x6b')](_0x8691('0x6c')))};break;default:throw new db['Sequelize'][(_0x8691('0x6e'))]('Unknown\x20authentication\x20type');}return rp(_0x2792d0);}})[_0x8691('0x20')](function(_0x4af602){if(_0x4af602){var _0xed03e8=[_0x8691('0x6f'),_0x8691('0x70'),_0x8691('0x71'),_0x8691('0x72')];_[_0x8691('0x73')](_0x4af602[_0x8691('0x74')],function(_0x46f85a){return _0xed03e8[_0x8691('0x75')](_0x46f85a[_0x8691('0x5c')]);});return{'count':_0x4af602[_0x8691('0x74')][_0x8691('0x3c')],'rows':_[_0x8691('0x55')](_0x4af602[_0x8691('0x74')],function(_0x15e266){return{'id':_0x15e266['id'],'name':_0x15e266['position']>0x7?_0x15e266['title']:_0x15e266[_0x8691('0x5c')],'custom':_0x15e266['position']>0x7?!![]:![],'options':_0x15e266[_0x8691('0x76')]?_0x15e266[_0x8691('0x76')]:_0x15e266['custom_field_options']?_0x15e266[_0x8691('0x77')]:[]};})};}})['then'](respondWithResult(_0x407406,null))['catch'](function(_0x651a75){var _0x20c9d4=_0x360e27[_0x8691('0x38')][_0x8691('0x78')]?0x1f4:_0x651a75[_0x8691('0x79')]||0x1f4;logger[_0x8691('0x25')](_0x8691('0x7a'),'getFields',_0x20c9d4,JSON[_0x8691('0x7b')](_0x651a75));delete _0x651a75[_0x8691('0x31')];if(_0x20c9d4===0x191){_0x20c9d4=0x190;}_0x407406[_0x8691('0x29')](_0x20c9d4)['send'](_0x360e27[_0x8691('0x38')]['test']?{'message':'Wrong\x20credentials','statusCode':_0x651a75['statusCode']}:_0x651a75);});};
\ No newline at end of file
+var _0xa8ce=['Content-Range','apply','reject','save','update','destroy','sendStatus','name','index','model','query','keys','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','merge','type','key','VIRTUAL','filter','options','ZendeskAccount','includeAll','findAll','show','rawAttributes','filters','include','create','body','find','params','getConfigurations','findOne','map','addConfiguration','AccountId','Subjects','getSubjects','Descriptions','getDescriptions','channel','ZendeskConfiguration','ZendeskField','getFields','username','authType','remoteUri','slice','lastIndexOf','GET','format','ticket_fields','password','Basic\x20%s','%s:%s','base64','headers','%s/token:%s','token','toString','Sequelize','subject','description','group','assignee','remove','includes','title','position','system_field_options','custom_field_options','test','getFields,\x20%s,\x20%s,\x20%s','send','Wrong\x20credentials','statusCode','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','jayson/promise','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','catch','status','end','json','count','offset','set'];(function(_0x3d607a,_0x7174e5){var _0x106962=function(_0x23ef1a){while(--_0x23ef1a){_0x3d607a['push'](_0x3d607a['shift']());}};_0x106962(++_0x7174e5);}(_0xa8ce,0x1d8));var _0xea8c=function(_0x2483c7,_0x881a1){_0x2483c7=_0x2483c7-0x0;var _0x528a2b=_0xa8ce[_0x2483c7];return _0x528a2b;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xea8c('0x0'));var rimraf=require(_0xea8c('0x1'));var zipdir=require(_0xea8c('0x2'));var jsonpatch=require(_0xea8c('0x3'));var rp=require(_0xea8c('0x4'));var moment=require(_0xea8c('0x5'));var BPromise=require(_0xea8c('0x6'));var Mustache=require(_0xea8c('0x7'));var util=require('util');var path=require(_0xea8c('0x8'));var sox=require('sox');var csv=require(_0xea8c('0x9'));var ejs=require(_0xea8c('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0xea8c('0xb'));var crypto=require(_0xea8c('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xea8c('0xd'));var toCsv=require(_0xea8c('0x9'));var querystring=require(_0xea8c('0xe'));var Papa=require(_0xea8c('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0xea8c('0x10'));var Redis=require(_0xea8c('0x11'));var qs=require(_0xea8c('0x12'));var logger=require(_0xea8c('0x13'))(_0xea8c('0x14'));var utils=require(_0xea8c('0x15'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var integrations=require('../../components/integrations/configuration');var jayson=require(_0xea8c('0x16'));var client=jayson[_0xea8c('0x17')][_0xea8c('0x18')]({'port':0x232a});function respondWithRpcPromise(_0x4d40e9,_0x19cbdb,_0x2ef838,_0x261d89){return new BPromise(function(_0x2b30a4,_0x13b879){var _0xa73ddc=_0x261d89||client;return _0xa73ddc[_0xea8c('0x19')](_0x4d40e9,_0x2ef838)[_0xea8c('0x1a')](function(_0x1f2d37){logger['info'](_0xea8c('0x1b'),_0x19cbdb,_0xea8c('0x1c'));logger[_0xea8c('0x1d')](_0xea8c('0x1e'),_0x19cbdb,_0xea8c('0x1c'),JSON[_0xea8c('0x1f')](_0x1f2d37));if(_0x1f2d37[_0xea8c('0x20')]){if(_0x1f2d37[_0xea8c('0x20')][_0xea8c('0x21')]===0x1f4){logger[_0xea8c('0x20')](_0xea8c('0x1b'),_0x19cbdb,_0x1f2d37[_0xea8c('0x20')]['message']);return _0x13b879(_0x1f2d37[_0xea8c('0x20')][_0xea8c('0x22')]);}logger['error'](_0xea8c('0x1b'),_0x19cbdb,_0x1f2d37[_0xea8c('0x20')][_0xea8c('0x22')]);return _0x2b30a4(_0x1f2d37[_0xea8c('0x20')][_0xea8c('0x22')]);}else{logger[_0xea8c('0x23')](_0xea8c('0x1b'),_0x19cbdb,'request\x20sent');_0x2b30a4(_0x1f2d37[_0xea8c('0x24')][_0xea8c('0x22')]);}})[_0xea8c('0x25')](function(_0x4a9f1b){logger[_0xea8c('0x20')]('ZendeskAccount,\x20%s,\x20%s',_0x19cbdb,_0x4a9f1b);_0x13b879(_0x4a9f1b);});});}function respondWithStatusCode(_0x443229,_0x39a6e4){_0x39a6e4=_0x39a6e4||0xcc;return function(_0x1030d3){if(_0x1030d3){return _0x443229['sendStatus'](_0x39a6e4);}return _0x443229[_0xea8c('0x26')](_0x39a6e4)[_0xea8c('0x27')]();};}function respondWithResult(_0x519bfe,_0x47011f){_0x47011f=_0x47011f||0xc8;return function(_0x4ca28a){if(_0x4ca28a){return _0x519bfe[_0xea8c('0x26')](_0x47011f)[_0xea8c('0x28')](_0x4ca28a);}};}function respondWithFilteredResult(_0x57e633,_0x798c9c){return function(_0xd28265){if(_0xd28265){var _0x284056=_0xd28265[_0xea8c('0x29')],_0x5456ac=_0x798c9c[_0xea8c('0x2a')],_0x3f8a5e=_0x798c9c['offset']+_0x798c9c['limit'],_0x4e499f;if(_0x3f8a5e>=_0x284056){_0x3f8a5e=_0x284056;_0x4e499f=0xc8;}else{_0x4e499f=0xce;}_0x57e633['status'](_0x4e499f);return _0x57e633[_0xea8c('0x2b')](_0xea8c('0x2c'),_0x5456ac+'-'+_0x3f8a5e+'/'+_0x284056)[_0xea8c('0x28')](_0xd28265);}return null;};}function patchUpdates(_0x25d87e){return function(_0x11cc40){try{jsonpatch[_0xea8c('0x2d')](_0x11cc40,_0x25d87e,!![]);}catch(_0x30d4ad){return BPromise[_0xea8c('0x2e')](_0x30d4ad);}return _0x11cc40[_0xea8c('0x2f')]();};}function saveUpdates(_0x41c861,_0x181f99){return function(_0x44ae4c){if(_0x44ae4c){return _0x44ae4c[_0xea8c('0x30')](_0x41c861)[_0xea8c('0x1a')](function(_0x20483b){return _0x20483b;});}return null;};}function removeEntity(_0x3cd9ec,_0x16ccd5){return function(_0x4eb36a){if(_0x4eb36a){return _0x4eb36a[_0xea8c('0x31')]()[_0xea8c('0x1a')](function(){_0x3cd9ec['status'](0xcc)[_0xea8c('0x27')]();});}};}function handleEntityNotFound(_0x26c7e2,_0x48ace1){return function(_0x17950b){if(!_0x17950b){_0x26c7e2[_0xea8c('0x32')](0x194);}return _0x17950b;};}function handleError(_0x49dd51,_0xf4237c){_0xf4237c=_0xf4237c||0x1f4;return function(_0x37b7b5){logger[_0xea8c('0x20')](_0x37b7b5['stack']);if(_0x37b7b5[_0xea8c('0x33')]){delete _0x37b7b5[_0xea8c('0x33')];}_0x49dd51['status'](_0xf4237c)['send'](_0x37b7b5);};}exports[_0xea8c('0x34')]=function(_0x4d46cf,_0xa8302a){var _0x2dc9d8={},_0x3d1ce6={},_0x5da789={'count':0x0,'rows':[]};var _0x3c6dd5=db['ZendeskAccount']['rawAttributes'];_0x3d1ce6[_0xea8c('0x35')]=_['keys'](_0x3c6dd5);_0x3d1ce6[_0xea8c('0x36')]=_[_0xea8c('0x37')](_0x4d46cf[_0xea8c('0x36')]);_0x3d1ce6['filters']=_[_0xea8c('0x38')](_0x3d1ce6[_0xea8c('0x35')],_0x3d1ce6[_0xea8c('0x36')]);_0x2dc9d8[_0xea8c('0x39')]=_[_0xea8c('0x38')](_0x3d1ce6[_0xea8c('0x35')],qs['fields'](_0x4d46cf[_0xea8c('0x36')][_0xea8c('0x3a')]));_0x2dc9d8[_0xea8c('0x39')]=_0x2dc9d8[_0xea8c('0x39')][_0xea8c('0x3b')]?_0x2dc9d8['attributes']:_0x3d1ce6[_0xea8c('0x35')];if(!_0x4d46cf['query'][_0xea8c('0x3c')](_0xea8c('0x3d'))){_0x2dc9d8[_0xea8c('0x3e')]=qs[_0xea8c('0x3e')](_0x4d46cf[_0xea8c('0x36')][_0xea8c('0x3e')]);_0x2dc9d8[_0xea8c('0x2a')]=qs['offset'](_0x4d46cf[_0xea8c('0x36')]['offset']);}_0x2dc9d8[_0xea8c('0x3f')]=qs[_0xea8c('0x40')](_0x4d46cf[_0xea8c('0x36')][_0xea8c('0x40')]);_0x2dc9d8[_0xea8c('0x41')]=qs['filters'](_[_0xea8c('0x42')](_0x4d46cf['query'],_0x3d1ce6['filters']));if(_0x4d46cf['query']['filter']){_0x2dc9d8['where']=_[_0xea8c('0x43')](_0x2dc9d8['where'],{'$or':_['map'](_0x3c6dd5,function(_0xc18eb0){if(_0xc18eb0[_0xea8c('0x44')][_0xea8c('0x45')]!==_0xea8c('0x46')){var _0x2eff89={};_0x2eff89[_0xc18eb0['field']]={'$like':'%'+_0x4d46cf[_0xea8c('0x36')][_0xea8c('0x47')]+'%'};return _0x2eff89;}})});}_0x2dc9d8=_[_0xea8c('0x43')]({},_0x2dc9d8,_0x4d46cf[_0xea8c('0x48')]);var _0x2cde2e={'where':_0x2dc9d8[_0xea8c('0x41')]};return db[_0xea8c('0x49')][_0xea8c('0x29')](_0x2cde2e)[_0xea8c('0x1a')](function(_0x533a75){_0x5da789['count']=_0x533a75;if(_0x4d46cf[_0xea8c('0x36')][_0xea8c('0x4a')]){_0x2dc9d8['include']=[{'all':!![]}];}return db['ZendeskAccount'][_0xea8c('0x4b')](_0x2dc9d8);})[_0xea8c('0x1a')](function(_0x4001e3){_0x5da789['rows']=_0x4001e3;return _0x5da789;})['then'](respondWithFilteredResult(_0xa8302a,_0x2dc9d8))[_0xea8c('0x25')](handleError(_0xa8302a,null));};exports[_0xea8c('0x4c')]=function(_0x569caa,_0x2b1359){var _0x4866db={'raw':![],'where':{'id':_0x569caa['params']['id']}},_0x332d42={};_0x332d42[_0xea8c('0x35')]=_[_0xea8c('0x37')](db[_0xea8c('0x49')][_0xea8c('0x4d')]);_0x332d42['query']=_[_0xea8c('0x37')](_0x569caa[_0xea8c('0x36')]);_0x332d42[_0xea8c('0x4e')]=_[_0xea8c('0x38')](_0x332d42['model'],_0x332d42[_0xea8c('0x36')]);_0x4866db[_0xea8c('0x39')]=_[_0xea8c('0x38')](_0x332d42['model'],qs[_0xea8c('0x3a')](_0x569caa[_0xea8c('0x36')]['fields']));_0x4866db[_0xea8c('0x39')]=_0x4866db['attributes'][_0xea8c('0x3b')]?_0x4866db[_0xea8c('0x39')]:_0x332d42[_0xea8c('0x35')];if(_0x569caa[_0xea8c('0x36')]['includeAll']){_0x4866db[_0xea8c('0x4f')]=[{'all':!![]}];}_0x4866db=_[_0xea8c('0x43')]({},_0x4866db,_0x569caa[_0xea8c('0x48')]);return db[_0xea8c('0x49')]['find'](_0x4866db)[_0xea8c('0x1a')](handleEntityNotFound(_0x2b1359,null))[_0xea8c('0x1a')](respondWithResult(_0x2b1359,null))[_0xea8c('0x25')](handleError(_0x2b1359,null));};exports[_0xea8c('0x50')]=function(_0x5d8dcf,_0x1b86de){return db[_0xea8c('0x49')][_0xea8c('0x50')](_0x5d8dcf['body'],{})[_0xea8c('0x1a')](respondWithResult(_0x1b86de,0xc9))[_0xea8c('0x25')](handleError(_0x1b86de,null));};exports[_0xea8c('0x30')]=function(_0x1584f0,_0x5add38){if(_0x1584f0['body']['id']){delete _0x1584f0[_0xea8c('0x51')]['id'];}return db['ZendeskAccount'][_0xea8c('0x52')]({'where':{'id':_0x1584f0[_0xea8c('0x53')]['id']}})['then'](handleEntityNotFound(_0x5add38,null))[_0xea8c('0x1a')](saveUpdates(_0x1584f0['body'],null))['then'](respondWithResult(_0x5add38,null))['catch'](handleError(_0x5add38,null));};exports[_0xea8c('0x31')]=function(_0x519153,_0x17d8c9){return db[_0xea8c('0x49')][_0xea8c('0x52')]({'where':{'id':_0x519153[_0xea8c('0x53')]['id']}})[_0xea8c('0x1a')](handleEntityNotFound(_0x17d8c9,null))[_0xea8c('0x1a')](removeEntity(_0x17d8c9,null))[_0xea8c('0x25')](handleError(_0x17d8c9,null));};exports[_0xea8c('0x54')]=function(_0x1c7531,_0x39605f,_0x57e46a){var _0x1a21a0={};var _0x41e571={};var _0x1af82e;var _0x445be2;return db[_0xea8c('0x49')][_0xea8c('0x55')]({'where':{'id':_0x1c7531[_0xea8c('0x53')]['id']}})[_0xea8c('0x1a')](handleEntityNotFound(_0x39605f,null))[_0xea8c('0x1a')](function(_0x39b547){if(_0x39b547){_0x1af82e=_0x39b547;_0x41e571[_0xea8c('0x35')]=_[_0xea8c('0x37')](db['ZendeskConfiguration'][_0xea8c('0x4d')]);_0x41e571['query']=_[_0xea8c('0x37')](_0x1c7531['query']);_0x41e571['filters']=_[_0xea8c('0x38')](_0x41e571[_0xea8c('0x35')],_0x41e571[_0xea8c('0x36')]);_0x1a21a0[_0xea8c('0x39')]=_[_0xea8c('0x38')](_0x41e571[_0xea8c('0x35')],qs['fields'](_0x1c7531[_0xea8c('0x36')][_0xea8c('0x3a')]));_0x1a21a0[_0xea8c('0x39')]=_0x1a21a0[_0xea8c('0x39')][_0xea8c('0x3b')]?_0x1a21a0['attributes']:_0x41e571['model'];_0x1a21a0[_0xea8c('0x3f')]=qs[_0xea8c('0x40')](_0x1c7531['query'][_0xea8c('0x40')]);_0x1a21a0[_0xea8c('0x41')]=qs[_0xea8c('0x4e')](_[_0xea8c('0x42')](_0x1c7531[_0xea8c('0x36')],_0x41e571[_0xea8c('0x4e')]));if(_0x1c7531[_0xea8c('0x36')]['filter']){_0x1a21a0[_0xea8c('0x41')]=_['merge'](_0x1a21a0[_0xea8c('0x41')],{'$or':_[_0xea8c('0x56')](_0x1a21a0[_0xea8c('0x39')],function(_0x36d91){var _0x433ab5={};_0x433ab5[_0x36d91]={'$like':'%'+_0x1c7531[_0xea8c('0x36')][_0xea8c('0x47')]+'%'};return _0x433ab5;})});}_0x1a21a0=_[_0xea8c('0x43')]({},_0x1a21a0,_0x1c7531[_0xea8c('0x48')]);return _0x1af82e[_0xea8c('0x54')](_0x1a21a0);}})['then'](function(_0xf3fa85){if(_0xf3fa85){_0x445be2=_0xf3fa85[_0xea8c('0x3b')];if(!_0x1c7531['query'][_0xea8c('0x3c')]('nolimit')){_0x1a21a0[_0xea8c('0x3e')]=qs[_0xea8c('0x3e')](_0x1c7531[_0xea8c('0x36')][_0xea8c('0x3e')]);_0x1a21a0['offset']=qs['offset'](_0x1c7531[_0xea8c('0x36')][_0xea8c('0x2a')]);}return _0x1af82e[_0xea8c('0x54')](_0x1a21a0);}})['then'](function(_0x5ead60){if(_0x5ead60){return _0x5ead60?{'count':_0x445be2,'rows':_0x5ead60}:null;}})[_0xea8c('0x1a')](respondWithResult(_0x39605f,null))['catch'](handleError(_0x39605f,null));};exports[_0xea8c('0x57')]=function(_0x34348e,_0x38023e,_0x31b4d3){if(_0x34348e['body']['id']){delete _0x34348e[_0xea8c('0x51')]['id'];}return db[_0xea8c('0x49')][_0xea8c('0x55')]({'where':{'id':_0x34348e[_0xea8c('0x53')]['id']}})['then'](handleEntityNotFound(_0x38023e,null))[_0xea8c('0x1a')](function(_0x1ddd1e){if(_0x1ddd1e){_0x34348e[_0xea8c('0x51')][_0xea8c('0x58')]=_0x1ddd1e['id'];_0x34348e[_0xea8c('0x51')][_0xea8c('0x59')]=integrations[_0xea8c('0x5a')](_0x34348e[_0xea8c('0x51')]['channel'],_0x34348e['body']['type']);_0x34348e[_0xea8c('0x51')][_0xea8c('0x5b')]=integrations[_0xea8c('0x5c')](_0x34348e['body'][_0xea8c('0x5d')],_0x34348e[_0xea8c('0x51')][_0xea8c('0x44')]);return db[_0xea8c('0x5e')][_0xea8c('0x50')](_0x34348e[_0xea8c('0x51')],{'include':[{'model':db[_0xea8c('0x5f')],'as':_0xea8c('0x59')},{'model':db[_0xea8c('0x5f')],'as':_0xea8c('0x5b')}]});}return null;})['then'](respondWithResult(_0x38023e,null))['catch'](handleError(_0x38023e,null));};exports[_0xea8c('0x60')]=function(_0x294a8a,_0x250b12,_0x1773a7){var _0x2701ae='';return db[_0xea8c('0x49')][_0xea8c('0x55')]({'where':{'id':_0x294a8a[_0xea8c('0x53')]['id']},'attributes':['id',_0xea8c('0x61'),'password','token',_0xea8c('0x62'),_0xea8c('0x63')]})['then'](handleEntityNotFound(_0x250b12,null))[_0xea8c('0x1a')](function(_0xcbbd8d){if(_0xcbbd8d){_0x2701ae=_0xcbbd8d[_0xea8c('0x63')];var _0x46819a=_0x2701ae[_0xea8c('0x64')](-0x1);if(_0x46819a==='/'){_0x2701ae=_0x2701ae['substring'](0x0,_0x2701ae[_0xea8c('0x65')](_0x46819a));}var _0x1ce9ad={'method':_0xea8c('0x66'),'uri':util[_0xea8c('0x67')]('%s/%s',_0x2701ae,_0xea8c('0x68')),'json':!![]};switch(_0xcbbd8d['authType']){case _0xea8c('0x69'):_0x1ce9ad['headers']={'Authorization':util[_0xea8c('0x67')](_0xea8c('0x6a'),new Buffer(util[_0xea8c('0x67')](_0xea8c('0x6b'),_0xcbbd8d['username'],_0xcbbd8d[_0xea8c('0x69')]))['toString'](_0xea8c('0x6c')))};break;case'token':_0x1ce9ad[_0xea8c('0x6d')]={'Authorization':util[_0xea8c('0x67')]('Basic\x20%s',new Buffer(util[_0xea8c('0x67')](_0xea8c('0x6e'),_0xcbbd8d[_0xea8c('0x61')],_0xcbbd8d[_0xea8c('0x6f')]))[_0xea8c('0x70')](_0xea8c('0x6c')))};break;default:throw new db[(_0xea8c('0x71'))]['ValidationError']('Unknown\x20authentication\x20type');}return rp(_0x1ce9ad);}})[_0xea8c('0x1a')](function(_0x49745f){if(_0x49745f){var _0xc2e8f1=[_0xea8c('0x72'),_0xea8c('0x73'),_0xea8c('0x74'),_0xea8c('0x75')];_[_0xea8c('0x76')](_0x49745f[_0xea8c('0x68')],function(_0x5bcd6f){return _0xc2e8f1[_0xea8c('0x77')](_0x5bcd6f[_0xea8c('0x44')]);});return{'count':_0x49745f['ticket_fields'][_0xea8c('0x3b')],'rows':_[_0xea8c('0x56')](_0x49745f[_0xea8c('0x68')],function(_0x422d70){return{'id':_0x422d70['id'],'name':_0x422d70['position']>0x7?_0x422d70[_0xea8c('0x78')]:_0x422d70[_0xea8c('0x44')],'custom':_0x422d70[_0xea8c('0x79')]>0x7?!![]:![],'options':_0x422d70[_0xea8c('0x7a')]?_0x422d70[_0xea8c('0x7a')]:_0x422d70[_0xea8c('0x7b')]?_0x422d70[_0xea8c('0x7b')]:[]};})};}})[_0xea8c('0x1a')](respondWithResult(_0x250b12,null))[_0xea8c('0x25')](function(_0x28daba){var _0x117451=_0x294a8a['query'][_0xea8c('0x7c')]?0x1f4:_0x28daba['statusCode']||0x1f4;logger[_0xea8c('0x20')](_0xea8c('0x7d'),_0xea8c('0x60'),_0x117451,JSON[_0xea8c('0x1f')](_0x28daba));delete _0x28daba[_0xea8c('0x33')];if(_0x117451===0x191){_0x117451=0x190;}_0x250b12[_0xea8c('0x26')](_0x117451)[_0xea8c('0x7e')](_0x294a8a[_0xea8c('0x36')][_0xea8c('0x7c')]?{'message':_0xea8c('0x7f'),'statusCode':_0x28daba[_0xea8c('0x80')]}:_0x28daba);});};
\ No newline at end of file
index c005042..ca4d453 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b5=['bluebird','request-promise','../../components/integrations/configuration','exports','ZendeskAccount','int_zendesk_accounts','lodash','util','../../config/logger'];(function(_0x4b7d87,_0x238711){var _0x3b9f82=function(_0x2c5173){while(--_0x2c5173){_0x4b7d87['push'](_0x4b7d87['shift']());}};_0x3b9f82(++_0x238711);}(_0xd8b5,0x180));var _0x5d8b=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xd8b5[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x5d8b('0x0'));var util=require(_0x5d8b('0x1'));var logger=require(_0x5d8b('0x2'))('api');var moment=require('moment');var BPromise=require(_0x5d8b('0x3'));var rp=require(_0x5d8b('0x4'));var attributes=require('./intZendeskAccount.attributes');var integrations=require(_0x5d8b('0x5'));module[_0x5d8b('0x6')]=function(_0x10ba80,_0x1c1cc8){return _0x10ba80['define'](_0x5d8b('0x7'),attributes,{'tableName':_0x5d8b('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf137=['define','ZendeskAccount','int_zendesk_accounts','util','moment','bluebird','./intZendeskAccount.attributes','../../components/integrations/configuration','exports'];(function(_0x61523d,_0x1706d8){var _0x7baabc=function(_0x5e86f1){while(--_0x5e86f1){_0x61523d['push'](_0x61523d['shift']());}};_0x7baabc(++_0x1706d8);}(_0xf137,0x66));var _0x7f13=function(_0x327e85,_0x16e5f7){_0x327e85=_0x327e85-0x0;var _0x254455=_0xf137[_0x327e85];return _0x254455;};'use strict';var _=require('lodash');var util=require(_0x7f13('0x0'));var logger=require('../../config/logger')('api');var moment=require(_0x7f13('0x1'));var BPromise=require(_0x7f13('0x2'));var rp=require('request-promise');var attributes=require(_0x7f13('0x3'));var integrations=require(_0x7f13('0x4'));module[_0x7f13('0x5')]=function(_0x23dd87,_0x3faacc){return _0x23dd87[_0x7f13('0x6')](_0x7f13('0x7'),attributes,{'tableName':_0x7f13('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1c98ee5..fd70050 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd046=['ioredis','../../config/logger','../../config/environment','http','ZendeskAccount,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','result','catch','GetZendeskAccount','ZendeskAccount','findAll','options','raw','where','attributes','limit','map','include','model','then','debug','find','ShowZendeskAccount','util','moment','bluebird'];(function(_0x510982,_0x26935f){var _0x2cad41=function(_0x52b132){while(--_0x52b132){_0x510982['push'](_0x510982['shift']());}};_0x2cad41(++_0x26935f);}(_0xd046,0x129));var _0x6d04=function(_0x3288be,_0x493f83){_0x3288be=_0x3288be-0x0;var _0x56880e=_0xd046[_0x3288be];return _0x56880e;};'use strict';var _=require('lodash');var util=require(_0x6d04('0x0'));var moment=require(_0x6d04('0x1'));var BPromise=require(_0x6d04('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x6d04('0x3'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x6d04('0x4'))('rpc');var config=require(_0x6d04('0x5'));var jayson=require('jayson/promise');var client=jayson['client'][_0x6d04('0x6')]({'port':0x232a});function respondWithRpcPromise(_0x1968c4,_0x4f83bc,_0x569c7b){return new BPromise(function(_0x2e2c01,_0x42aa22){return client['request'](_0x1968c4,_0x569c7b)['then'](function(_0x27a3d6){logger['info'](_0x6d04('0x7'),_0x4f83bc,'request\x20sent');logger['debug']('ZendeskAccount,\x20%s,\x20%s,\x20%s',_0x4f83bc,_0x6d04('0x8'),JSON[_0x6d04('0x9')](_0x27a3d6));if(_0x27a3d6[_0x6d04('0xa')]){if(_0x27a3d6[_0x6d04('0xa')]['code']===0x1f4){logger[_0x6d04('0xa')](_0x6d04('0x7'),_0x4f83bc,_0x27a3d6[_0x6d04('0xa')][_0x6d04('0xb')]);return _0x42aa22(_0x27a3d6[_0x6d04('0xa')][_0x6d04('0xb')]);}logger[_0x6d04('0xa')](_0x6d04('0x7'),_0x4f83bc,_0x27a3d6[_0x6d04('0xa')][_0x6d04('0xb')]);return _0x2e2c01(_0x27a3d6[_0x6d04('0xa')][_0x6d04('0xb')]);}else{logger[_0x6d04('0xc')](_0x6d04('0x7'),_0x4f83bc,_0x6d04('0x8'));_0x2e2c01(_0x27a3d6[_0x6d04('0xd')][_0x6d04('0xb')]);}})[_0x6d04('0xe')](function(_0xed5538){logger[_0x6d04('0xa')](_0x6d04('0x7'),_0x4f83bc,_0xed5538);_0x42aa22(_0xed5538);});});}exports[_0x6d04('0xf')]=function(_0x2bc798){var _0x3ad325=this;return new Promise(function(_0x4e93b5,_0x3657a1){return db[_0x6d04('0x10')][_0x6d04('0x11')]({'raw':_0x2bc798[_0x6d04('0x12')]?_0x2bc798[_0x6d04('0x12')][_0x6d04('0x13')]===undefined?!![]:![]:!![],'where':_0x2bc798[_0x6d04('0x12')]?_0x2bc798[_0x6d04('0x12')][_0x6d04('0x14')]||null:null,'attributes':_0x2bc798[_0x6d04('0x12')]?_0x2bc798[_0x6d04('0x12')][_0x6d04('0x15')]||null:null,'limit':_0x2bc798[_0x6d04('0x12')]?_0x2bc798['options'][_0x6d04('0x16')]||null:null,'include':_0x2bc798[_0x6d04('0x12')]?_0x2bc798['options']['include']?_[_0x6d04('0x17')](_0x2bc798[_0x6d04('0x12')][_0x6d04('0x18')],function(_0xe8f198){return{'model':db[_0xe8f198[_0x6d04('0x19')]],'as':_0xe8f198['as'],'attributes':_0xe8f198[_0x6d04('0x15')],'include':_0xe8f198[_0x6d04('0x18')]?_[_0x6d04('0x17')](_0xe8f198[_0x6d04('0x18')],function(_0x38e90f){return{'model':db[_0x38e90f[_0x6d04('0x19')]],'as':_0x38e90f['as'],'attributes':_0x38e90f[_0x6d04('0x15')],'include':_0x38e90f[_0x6d04('0x18')]?_[_0x6d04('0x17')](_0x38e90f['include'],function(_0x1dc29b){return{'model':db[_0x1dc29b[_0x6d04('0x19')]],'as':_0x1dc29b['as'],'attributes':_0x1dc29b[_0x6d04('0x15')]};}):[]};}):[]};}):[]:[]})[_0x6d04('0x1a')](function(_0x4256a3){logger[_0x6d04('0xc')]('GetZendeskAccount',_0x2bc798);logger[_0x6d04('0x1b')](_0x6d04('0xf'),_0x2bc798,JSON[_0x6d04('0x9')](_0x4256a3));_0x4e93b5(_0x4256a3);})[_0x6d04('0xe')](function(_0x2ed2bb){logger['error']('GetZendeskAccount',_0x2ed2bb['message'],_0x2bc798);_0x3657a1(_0x3ad325['error'](0x1f4,_0x2ed2bb[_0x6d04('0xb')]));});});};exports['ShowZendeskAccount']=function(_0x43eb48){var _0x4ed123=this;return new Promise(function(_0x26be38,_0xee1291){return db[_0x6d04('0x10')][_0x6d04('0x1c')]({'raw':_0x43eb48[_0x6d04('0x12')]?_0x43eb48[_0x6d04('0x12')][_0x6d04('0x13')]===undefined?!![]:![]:!![],'where':_0x43eb48[_0x6d04('0x12')]?_0x43eb48[_0x6d04('0x12')][_0x6d04('0x14')]||null:null,'attributes':_0x43eb48['options']?_0x43eb48['options'][_0x6d04('0x15')]||null:null,'include':_0x43eb48[_0x6d04('0x12')]?_0x43eb48[_0x6d04('0x12')][_0x6d04('0x18')]?_['map'](_0x43eb48[_0x6d04('0x12')][_0x6d04('0x18')],function(_0x40758d){return{'model':db[_0x40758d[_0x6d04('0x19')]],'as':_0x40758d['as'],'attributes':_0x40758d['attributes'],'include':_0x40758d[_0x6d04('0x18')]?_[_0x6d04('0x17')](_0x40758d[_0x6d04('0x18')],function(_0x184da2){return{'model':db[_0x184da2[_0x6d04('0x19')]],'as':_0x184da2['as'],'attributes':_0x184da2[_0x6d04('0x15')],'include':_0x184da2[_0x6d04('0x18')]?_[_0x6d04('0x17')](_0x184da2[_0x6d04('0x18')],function(_0x67e455){return{'model':db[_0x67e455[_0x6d04('0x19')]],'as':_0x67e455['as'],'attributes':_0x67e455[_0x6d04('0x15')]};}):[]};}):[]};}):[]:[]})[_0x6d04('0x1a')](function(_0x2c2203){logger[_0x6d04('0xc')]('ShowZendeskAccount',_0x43eb48);logger[_0x6d04('0x1b')]('ShowZendeskAccount',_0x43eb48,JSON[_0x6d04('0x9')](_0x2c2203));_0x26be38(_0x2c2203);})[_0x6d04('0xe')](function(_0x4c1908){logger[_0x6d04('0xa')](_0x6d04('0x1d'),_0x4c1908[_0x6d04('0xb')],_0x43eb48);_0xee1291(_0x4ed123[_0x6d04('0xa')](0x1f4,_0x4c1908[_0x6d04('0xb')]));});});};
\ No newline at end of file
+var _0x064e=['then','request\x20sent','debug','ZendeskAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','ZendeskAccount,\x20%s,\x20%s','message','info','result','catch','GetZendeskAccount','ZendeskAccount','findAll','options','where','attributes','limit','include','map','model','ShowZendeskAccount','find','raw','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','http','request'];(function(_0x5417b8,_0x59e58d){var _0x2e696a=function(_0x378f79){while(--_0x378f79){_0x5417b8['push'](_0x5417b8['shift']());}};_0x2e696a(++_0x59e58d);}(_0x064e,0xd2));var _0xe064=function(_0x2f625f,_0x3fc33d){_0x2f625f=_0x2f625f-0x0;var _0x5b8cad=_0x064e[_0x2f625f];return _0x5b8cad;};'use strict';var _=require(_0xe064('0x0'));var util=require(_0xe064('0x1'));var moment=require(_0xe064('0x2'));var BPromise=require(_0xe064('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xe064('0x4'));var db=require(_0xe064('0x5'))['db'];var utils=require(_0xe064('0x6'));var logger=require('../../config/logger')(_0xe064('0x7'));var config=require(_0xe064('0x8'));var jayson=require(_0xe064('0x9'));var client=jayson['client'][_0xe064('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x1bc692,_0x2859fb,_0x5e6c86){return new BPromise(function(_0x1dd035,_0x260985){return client[_0xe064('0xb')](_0x1bc692,_0x5e6c86)[_0xe064('0xc')](function(_0x396897){logger['info']('ZendeskAccount,\x20%s,\x20%s',_0x2859fb,_0xe064('0xd'));logger[_0xe064('0xe')](_0xe064('0xf'),_0x2859fb,_0xe064('0xd'),JSON[_0xe064('0x10')](_0x396897));if(_0x396897[_0xe064('0x11')]){if(_0x396897[_0xe064('0x11')][_0xe064('0x12')]===0x1f4){logger[_0xe064('0x11')](_0xe064('0x13'),_0x2859fb,_0x396897[_0xe064('0x11')][_0xe064('0x14')]);return _0x260985(_0x396897[_0xe064('0x11')][_0xe064('0x14')]);}logger['error'](_0xe064('0x13'),_0x2859fb,_0x396897[_0xe064('0x11')][_0xe064('0x14')]);return _0x1dd035(_0x396897['error'][_0xe064('0x14')]);}else{logger[_0xe064('0x15')]('ZendeskAccount,\x20%s,\x20%s',_0x2859fb,'request\x20sent');_0x1dd035(_0x396897[_0xe064('0x16')][_0xe064('0x14')]);}})[_0xe064('0x17')](function(_0x20d2bc){logger[_0xe064('0x11')](_0xe064('0x13'),_0x2859fb,_0x20d2bc);_0x260985(_0x20d2bc);});});}exports[_0xe064('0x18')]=function(_0x5d92dd){var _0x3e99d8=this;return new Promise(function(_0xffc4fe,_0x28ee8a){return db[_0xe064('0x19')][_0xe064('0x1a')]({'raw':_0x5d92dd[_0xe064('0x1b')]?_0x5d92dd[_0xe064('0x1b')]['raw']===undefined?!![]:![]:!![],'where':_0x5d92dd[_0xe064('0x1b')]?_0x5d92dd[_0xe064('0x1b')][_0xe064('0x1c')]||null:null,'attributes':_0x5d92dd['options']?_0x5d92dd[_0xe064('0x1b')][_0xe064('0x1d')]||null:null,'limit':_0x5d92dd[_0xe064('0x1b')]?_0x5d92dd[_0xe064('0x1b')][_0xe064('0x1e')]||null:null,'include':_0x5d92dd[_0xe064('0x1b')]?_0x5d92dd['options'][_0xe064('0x1f')]?_[_0xe064('0x20')](_0x5d92dd[_0xe064('0x1b')]['include'],function(_0x28bdc9){return{'model':db[_0x28bdc9[_0xe064('0x21')]],'as':_0x28bdc9['as'],'attributes':_0x28bdc9[_0xe064('0x1d')],'include':_0x28bdc9[_0xe064('0x1f')]?_['map'](_0x28bdc9['include'],function(_0x548b1d){return{'model':db[_0x548b1d['model']],'as':_0x548b1d['as'],'attributes':_0x548b1d[_0xe064('0x1d')],'include':_0x548b1d[_0xe064('0x1f')]?_[_0xe064('0x20')](_0x548b1d['include'],function(_0x319fa2){return{'model':db[_0x319fa2['model']],'as':_0x319fa2['as'],'attributes':_0x319fa2[_0xe064('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xe064('0xc')](function(_0x2ee313){logger['info']('GetZendeskAccount',_0x5d92dd);logger[_0xe064('0xe')](_0xe064('0x18'),_0x5d92dd,JSON['stringify'](_0x2ee313));_0xffc4fe(_0x2ee313);})[_0xe064('0x17')](function(_0x19ffab){logger[_0xe064('0x11')](_0xe064('0x18'),_0x19ffab[_0xe064('0x14')],_0x5d92dd);_0x28ee8a(_0x3e99d8[_0xe064('0x11')](0x1f4,_0x19ffab['message']));});});};exports[_0xe064('0x22')]=function(_0x44b4bc){var _0x298bca=this;return new Promise(function(_0x3933ed,_0x475187){return db[_0xe064('0x19')][_0xe064('0x23')]({'raw':_0x44b4bc[_0xe064('0x1b')]?_0x44b4bc[_0xe064('0x1b')][_0xe064('0x24')]===undefined?!![]:![]:!![],'where':_0x44b4bc[_0xe064('0x1b')]?_0x44b4bc['options']['where']||null:null,'attributes':_0x44b4bc[_0xe064('0x1b')]?_0x44b4bc[_0xe064('0x1b')][_0xe064('0x1d')]||null:null,'include':_0x44b4bc['options']?_0x44b4bc['options']['include']?_['map'](_0x44b4bc[_0xe064('0x1b')][_0xe064('0x1f')],function(_0x631a99){return{'model':db[_0x631a99['model']],'as':_0x631a99['as'],'attributes':_0x631a99[_0xe064('0x1d')],'include':_0x631a99[_0xe064('0x1f')]?_[_0xe064('0x20')](_0x631a99[_0xe064('0x1f')],function(_0x547f46){return{'model':db[_0x547f46[_0xe064('0x21')]],'as':_0x547f46['as'],'attributes':_0x547f46[_0xe064('0x1d')],'include':_0x547f46['include']?_[_0xe064('0x20')](_0x547f46[_0xe064('0x1f')],function(_0x1570f7){return{'model':db[_0x1570f7[_0xe064('0x21')]],'as':_0x1570f7['as'],'attributes':_0x1570f7[_0xe064('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xe064('0xc')](function(_0x15f29b){logger[_0xe064('0x15')]('ShowZendeskAccount',_0x44b4bc);logger[_0xe064('0xe')](_0xe064('0x22'),_0x44b4bc,JSON[_0xe064('0x10')](_0x15f29b));_0x3933ed(_0x15f29b);})['catch'](function(_0x409066){logger[_0xe064('0x11')](_0xe064('0x22'),_0x409066[_0xe064('0x14')],_0x44b4bc);_0x475187(_0x298bca[_0xe064('0x11')](0x1f4,_0x409066[_0xe064('0x14')]));});});};
\ No newline at end of file
index 17caa7a..e43e09e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0347=['delete','destroy','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./intZendeskConfiguration.controller','get','index','/:id','isAuthenticated','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions','getDescriptions','/:id/tags','getTags','post','create','setTags','put','update'];(function(_0x4e5dad,_0x23ae6b){var _0x18485e=function(_0x5395f9){while(--_0x5395f9){_0x4e5dad['push'](_0x4e5dad['shift']());}};_0x18485e(++_0x23ae6b);}(_0x0347,0x17c));var _0x7034=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0x0347[_0x2b4411];return _0x8e41ef;};'use strict';var multer=require('multer');var util=require(_0x7034('0x0'));var path=require(_0x7034('0x1'));var timeout=require(_0x7034('0x2'));var express=require(_0x7034('0x3'));var router=express[_0x7034('0x4')]();var auth=require(_0x7034('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x7034('0x6'));var controller=require(_0x7034('0x7'));router[_0x7034('0x8')]('/',auth['isAuthenticated'](),controller[_0x7034('0x9')]);router[_0x7034('0x8')](_0x7034('0xa'),auth[_0x7034('0xb')](),controller['show']);router['get'](_0x7034('0xc'),auth[_0x7034('0xb')](),controller[_0x7034('0xd')]);router[_0x7034('0x8')](_0x7034('0xe'),auth[_0x7034('0xb')](),controller[_0x7034('0xf')]);router['get'](_0x7034('0x10'),auth[_0x7034('0xb')](),controller[_0x7034('0x11')]);router[_0x7034('0x8')](_0x7034('0x12'),auth[_0x7034('0xb')](),controller[_0x7034('0x13')]);router[_0x7034('0x14')]('/',auth[_0x7034('0xb')](),controller[_0x7034('0x15')]);router[_0x7034('0x14')](_0x7034('0x12'),auth['isAuthenticated'](),controller[_0x7034('0x16')]);router[_0x7034('0x17')](_0x7034('0xa'),auth[_0x7034('0xb')](),controller[_0x7034('0x18')]);router[_0x7034('0x19')](_0x7034('0xa'),auth[_0x7034('0xb')](),controller[_0x7034('0x1a')]);module['exports']=router;
\ No newline at end of file
+var _0xa6ca=['connect-timeout','express','Router','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/:id','show','/:id/fields','getFields','getSubjects','/:id/descriptions','getDescriptions','post','create','/:id/tags','setTags','put','delete','destroy','exports','multer','util'];(function(_0xeedcb2,_0x509993){var _0x1be6da=function(_0x5949fd){while(--_0x5949fd){_0xeedcb2['push'](_0xeedcb2['shift']());}};_0x1be6da(++_0x509993);}(_0xa6ca,0x94));var _0xaa6c=function(_0x409353,_0xe9f04d){_0x409353=_0x409353-0x0;var _0x4f4b59=_0xa6ca[_0x409353];return _0x4f4b59;};'use strict';var multer=require(_0xaa6c('0x0'));var util=require(_0xaa6c('0x1'));var path=require('path');var timeout=require(_0xaa6c('0x2'));var express=require(_0xaa6c('0x3'));var router=express[_0xaa6c('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xaa6c('0x5'));var config=require(_0xaa6c('0x6'));var controller=require('./intZendeskConfiguration.controller');router['get']('/',auth[_0xaa6c('0x7')](),controller[_0xaa6c('0x8')]);router[_0xaa6c('0x9')](_0xaa6c('0xa'),auth[_0xaa6c('0x7')](),controller[_0xaa6c('0xb')]);router[_0xaa6c('0x9')](_0xaa6c('0xc'),auth['isAuthenticated'](),controller[_0xaa6c('0xd')]);router[_0xaa6c('0x9')]('/:id/subjects',auth[_0xaa6c('0x7')](),controller[_0xaa6c('0xe')]);router[_0xaa6c('0x9')](_0xaa6c('0xf'),auth[_0xaa6c('0x7')](),controller[_0xaa6c('0x10')]);router[_0xaa6c('0x9')]('/:id/tags',auth[_0xaa6c('0x7')](),controller['getTags']);router[_0xaa6c('0x11')]('/',auth[_0xaa6c('0x7')](),controller[_0xaa6c('0x12')]);router[_0xaa6c('0x11')](_0xaa6c('0x13'),auth[_0xaa6c('0x7')](),controller[_0xaa6c('0x14')]);router[_0xaa6c('0x15')](_0xaa6c('0xa'),auth['isAuthenticated'](),controller['update']);router[_0xaa6c('0x16')](_0xaa6c('0xa'),auth[_0xaa6c('0x7')](),controller[_0xaa6c('0x17')]);module[_0xaa6c('0x18')]=router;
\ No newline at end of file
index fdce750..39b120f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb59d=['exports','STRING'];(function(_0xe5ccf7,_0x481f24){var _0x81cb28=function(_0x5137e7){while(--_0x5137e7){_0xe5ccf7['push'](_0xe5ccf7['shift']());}};_0x81cb28(++_0x481f24);}(_0xb59d,0x150));var _0xdb59=function(_0x13ce30,_0x4cfa4a){_0x13ce30=_0x13ce30-0x0;var _0x43e57a=_0xb59d[_0x13ce30];return _0x43e57a;};'use strict';var Sequelize=require('sequelize');module[_0xdb59('0x0')]={'name':{'type':Sequelize[_0xdb59('0x1')]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xafde=['STRING','exports'];(function(_0x4e676e,_0x2a7c6d){var _0x336a3c=function(_0x4767c4){while(--_0x4767c4){_0x4e676e['push'](_0x4e676e['shift']());}};_0x336a3c(++_0x2a7c6d);}(_0xafde,0x7d));var _0xeafd=function(_0x48508a,_0x4c2d17){_0x48508a=_0x48508a-0x0;var _0x4e4fa9=_0xafde[_0x48508a];return _0x4e4fa9;};'use strict';var Sequelize=require('sequelize');module[_0xeafd('0x0')]={'name':{'type':Sequelize[_0xeafd('0x1')]},'description':{'type':Sequelize[_0xeafd('0x1')]}};
\ No newline at end of file
index 845323b..99ba41e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa4b8=['fields','attributes','length','hasOwnProperty','sort','where','filters','filter','map','key','VIRTUAL','field','merge','options','include','findAll','rows','includeAll','create','body','find','params','findOne','ZendeskField','getFields','nolimit','getSubjects','pick','getDescriptions','order','getTags','Tag','setTags','ids','html-pdf','zip-dir','fast-json-patch','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','http','request','then','info','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','code','message','error','ZendeskConfiguration,\x20%s,\x20%s','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','name','send','index','ZendeskConfiguration','rawAttributes','keys','query','model','intersection'];(function(_0x283127,_0x54d4d5){var _0x43da5d=function(_0x10947f){while(--_0x10947f){_0x283127['push'](_0x283127['shift']());}};_0x43da5d(++_0x54d4d5);}(_0xa4b8,0x1e9));var _0x8a4b=function(_0x35f7d1,_0x39d318){_0x35f7d1=_0x35f7d1-0x0;var _0x53ac5f=_0xa4b8[_0x35f7d1];return _0x53ac5f;};'use strict';var pdf=require(_0x8a4b('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x8a4b('0x1'));var jsonpatch=require(_0x8a4b('0x2'));var rp=require('request-promise');var moment=require(_0x8a4b('0x3'));var BPromise=require(_0x8a4b('0x4'));var Mustache=require('mustache');var util=require(_0x8a4b('0x5'));var path=require(_0x8a4b('0x6'));var sox=require(_0x8a4b('0x7'));var csv=require(_0x8a4b('0x8'));var ejs=require(_0x8a4b('0x9'));var fs=require('fs');var _=require(_0x8a4b('0xa'));var squel=require(_0x8a4b('0xb'));var crypto=require(_0x8a4b('0xc'));var jsforce=require(_0x8a4b('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x8a4b('0x8'));var querystring=require('querystring');var Papa=require(_0x8a4b('0xe'));var authService=require(_0x8a4b('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x8a4b('0x10'));var qs=require(_0x8a4b('0x11'));var logger=require(_0x8a4b('0x12'))(_0x8a4b('0x13'));var utils=require(_0x8a4b('0x14'));var config=require(_0x8a4b('0x15'));var db=require(_0x8a4b('0x16'))['db'];var jayson=require(_0x8a4b('0x17'));var client=jayson['client'][_0x8a4b('0x18')]({'port':0x232a});function respondWithRpcPromise(_0x160740,_0x304b67,_0x3ac3a8,_0x21b3aa){return new BPromise(function(_0x42df03,_0x5ec906){var _0x48792d=_0x21b3aa||client;return _0x48792d[_0x8a4b('0x19')](_0x160740,_0x3ac3a8)[_0x8a4b('0x1a')](function(_0x13c935){logger[_0x8a4b('0x1b')]('ZendeskConfiguration,\x20%s,\x20%s',_0x304b67,'request\x20sent');logger[_0x8a4b('0x1c')](_0x8a4b('0x1d'),_0x304b67,_0x8a4b('0x1e'),JSON[_0x8a4b('0x1f')](_0x13c935));if(_0x13c935['error']){if(_0x13c935['error'][_0x8a4b('0x20')]===0x1f4){logger['error']('ZendeskConfiguration,\x20%s,\x20%s',_0x304b67,_0x13c935['error'][_0x8a4b('0x21')]);return _0x5ec906(_0x13c935['error'][_0x8a4b('0x21')]);}logger[_0x8a4b('0x22')]('ZendeskConfiguration,\x20%s,\x20%s',_0x304b67,_0x13c935['error']['message']);return _0x42df03(_0x13c935[_0x8a4b('0x22')][_0x8a4b('0x21')]);}else{logger[_0x8a4b('0x1b')](_0x8a4b('0x23'),_0x304b67,_0x8a4b('0x1e'));_0x42df03(_0x13c935['result'][_0x8a4b('0x21')]);}})[_0x8a4b('0x24')](function(_0xb00b95){logger[_0x8a4b('0x22')](_0x8a4b('0x23'),_0x304b67,_0xb00b95);_0x5ec906(_0xb00b95);});});}function respondWithStatusCode(_0xc9b739,_0xaf4f66){_0xaf4f66=_0xaf4f66||0xcc;return function(_0x18a6ea){if(_0x18a6ea){return _0xc9b739[_0x8a4b('0x25')](_0xaf4f66);}return _0xc9b739[_0x8a4b('0x26')](_0xaf4f66)[_0x8a4b('0x27')]();};}function respondWithResult(_0x400fa4,_0x1c4c1b){_0x1c4c1b=_0x1c4c1b||0xc8;return function(_0x5cd688){if(_0x5cd688){return _0x400fa4[_0x8a4b('0x26')](_0x1c4c1b)[_0x8a4b('0x28')](_0x5cd688);}};}function respondWithFilteredResult(_0x429cc2,_0xd3a3a7){return function(_0x8ee427){if(_0x8ee427){var _0x2fa2ce=_0x8ee427[_0x8a4b('0x29')],_0x3c059d=_0xd3a3a7[_0x8a4b('0x2a')],_0x1730eb=_0xd3a3a7[_0x8a4b('0x2a')]+_0xd3a3a7[_0x8a4b('0x2b')],_0x36b41e;if(_0x1730eb>=_0x2fa2ce){_0x1730eb=_0x2fa2ce;_0x36b41e=0xc8;}else{_0x36b41e=0xce;}_0x429cc2[_0x8a4b('0x26')](_0x36b41e);return _0x429cc2[_0x8a4b('0x2c')](_0x8a4b('0x2d'),_0x3c059d+'-'+_0x1730eb+'/'+_0x2fa2ce)['json'](_0x8ee427);}return null;};}function patchUpdates(_0xb69842){return function(_0x40dacf){try{jsonpatch['apply'](_0x40dacf,_0xb69842,!![]);}catch(_0x155d12){return BPromise[_0x8a4b('0x2e')](_0x155d12);}return _0x40dacf[_0x8a4b('0x2f')]();};}function saveUpdates(_0x5c0e10,_0x3ba614){return function(_0xfe3521){if(_0xfe3521){return _0xfe3521['update'](_0x5c0e10)[_0x8a4b('0x1a')](function(_0x11990d){return _0x11990d;});}return null;};}function removeEntity(_0x4b7624,_0x1bfa96){return function(_0x814764){if(_0x814764){return _0x814764['destroy']()[_0x8a4b('0x1a')](function(){_0x4b7624[_0x8a4b('0x26')](0xcc)[_0x8a4b('0x27')]();});}};}function handleEntityNotFound(_0x3acf49,_0x1efb65){return function(_0x4e59c0){if(!_0x4e59c0){_0x3acf49[_0x8a4b('0x25')](0x194);}return _0x4e59c0;};}function handleError(_0x19d88b,_0x124985){_0x124985=_0x124985||0x1f4;return function(_0x56c16a){logger[_0x8a4b('0x22')](_0x56c16a['stack']);if(_0x56c16a[_0x8a4b('0x30')]){delete _0x56c16a['name'];}_0x19d88b[_0x8a4b('0x26')](_0x124985)[_0x8a4b('0x31')](_0x56c16a);};}exports[_0x8a4b('0x32')]=function(_0x4c0512,_0x3040e1){var _0xfe7bdb={},_0x5e3fc4={},_0x675395={'count':0x0,'rows':[]};var _0x469ff0=db[_0x8a4b('0x33')][_0x8a4b('0x34')];_0x5e3fc4['model']=_[_0x8a4b('0x35')](_0x469ff0);_0x5e3fc4[_0x8a4b('0x36')]=_[_0x8a4b('0x35')](_0x4c0512[_0x8a4b('0x36')]);_0x5e3fc4['filters']=_['intersection'](_0x5e3fc4[_0x8a4b('0x37')],_0x5e3fc4[_0x8a4b('0x36')]);_0xfe7bdb['attributes']=_[_0x8a4b('0x38')](_0x5e3fc4['model'],qs[_0x8a4b('0x39')](_0x4c0512[_0x8a4b('0x36')][_0x8a4b('0x39')]));_0xfe7bdb['attributes']=_0xfe7bdb[_0x8a4b('0x3a')][_0x8a4b('0x3b')]?_0xfe7bdb[_0x8a4b('0x3a')]:_0x5e3fc4[_0x8a4b('0x37')];if(!_0x4c0512[_0x8a4b('0x36')][_0x8a4b('0x3c')]('nolimit')){_0xfe7bdb[_0x8a4b('0x2b')]=qs['limit'](_0x4c0512[_0x8a4b('0x36')][_0x8a4b('0x2b')]);_0xfe7bdb['offset']=qs[_0x8a4b('0x2a')](_0x4c0512['query'][_0x8a4b('0x2a')]);}_0xfe7bdb['order']=qs[_0x8a4b('0x3d')](_0x4c0512[_0x8a4b('0x36')][_0x8a4b('0x3d')]);_0xfe7bdb[_0x8a4b('0x3e')]=qs[_0x8a4b('0x3f')](_['pick'](_0x4c0512[_0x8a4b('0x36')],_0x5e3fc4['filters']));if(_0x4c0512[_0x8a4b('0x36')][_0x8a4b('0x40')]){_0xfe7bdb[_0x8a4b('0x3e')]=_['merge'](_0xfe7bdb[_0x8a4b('0x3e')],{'$or':_[_0x8a4b('0x41')](_0x469ff0,function(_0xc3737b){if(_0xc3737b['type'][_0x8a4b('0x42')]!==_0x8a4b('0x43')){var _0x1403be={};_0x1403be[_0xc3737b[_0x8a4b('0x44')]]={'$like':'%'+_0x4c0512[_0x8a4b('0x36')][_0x8a4b('0x40')]+'%'};return _0x1403be;}})});}_0xfe7bdb=_[_0x8a4b('0x45')]({},_0xfe7bdb,_0x4c0512[_0x8a4b('0x46')]);var _0x499096={'where':_0xfe7bdb['where']};return db[_0x8a4b('0x33')][_0x8a4b('0x29')](_0x499096)['then'](function(_0x45a285){_0x675395[_0x8a4b('0x29')]=_0x45a285;if(_0x4c0512[_0x8a4b('0x36')]['includeAll']){_0xfe7bdb[_0x8a4b('0x47')]=[{'all':!![]}];}return db[_0x8a4b('0x33')][_0x8a4b('0x48')](_0xfe7bdb);})['then'](function(_0x1a5bc6){_0x675395[_0x8a4b('0x49')]=_0x1a5bc6;return _0x675395;})['then'](respondWithFilteredResult(_0x3040e1,_0xfe7bdb))['catch'](handleError(_0x3040e1,null));};exports['show']=function(_0x36c6bb,_0x1d4f97){var _0x4d72ae={'raw':![],'where':{'id':_0x36c6bb['params']['id']}},_0x3f9f01={};_0x3f9f01['model']=_[_0x8a4b('0x35')](db[_0x8a4b('0x33')][_0x8a4b('0x34')]);_0x3f9f01[_0x8a4b('0x36')]=_[_0x8a4b('0x35')](_0x36c6bb[_0x8a4b('0x36')]);_0x3f9f01[_0x8a4b('0x3f')]=_[_0x8a4b('0x38')](_0x3f9f01[_0x8a4b('0x37')],_0x3f9f01['query']);_0x4d72ae[_0x8a4b('0x3a')]=_[_0x8a4b('0x38')](_0x3f9f01['model'],qs[_0x8a4b('0x39')](_0x36c6bb['query'][_0x8a4b('0x39')]));_0x4d72ae[_0x8a4b('0x3a')]=_0x4d72ae[_0x8a4b('0x3a')][_0x8a4b('0x3b')]?_0x4d72ae['attributes']:_0x3f9f01['model'];if(_0x36c6bb[_0x8a4b('0x36')][_0x8a4b('0x4a')]){_0x4d72ae['include']=[{'all':!![]}];}_0x4d72ae=_[_0x8a4b('0x45')]({},_0x4d72ae,_0x36c6bb['options']);return db['ZendeskConfiguration']['find'](_0x4d72ae)[_0x8a4b('0x1a')](handleEntityNotFound(_0x1d4f97,null))[_0x8a4b('0x1a')](respondWithResult(_0x1d4f97,null))[_0x8a4b('0x24')](handleError(_0x1d4f97,null));};exports[_0x8a4b('0x4b')]=function(_0x4b3a99,_0x3f3fc5){return db[_0x8a4b('0x33')][_0x8a4b('0x4b')](_0x4b3a99[_0x8a4b('0x4c')],{})[_0x8a4b('0x1a')](respondWithResult(_0x3f3fc5,0xc9))[_0x8a4b('0x24')](handleError(_0x3f3fc5,null));};exports['update']=function(_0x11562a,_0x5d3aa2){if(_0x11562a['body']['id']){delete _0x11562a[_0x8a4b('0x4c')]['id'];}return db[_0x8a4b('0x33')][_0x8a4b('0x4d')]({'where':{'id':_0x11562a[_0x8a4b('0x4e')]['id']}})[_0x8a4b('0x1a')](handleEntityNotFound(_0x5d3aa2,null))[_0x8a4b('0x1a')](saveUpdates(_0x11562a[_0x8a4b('0x4c')],null))['then'](respondWithResult(_0x5d3aa2,null))[_0x8a4b('0x24')](handleError(_0x5d3aa2,null));};exports['destroy']=function(_0x21c113,_0xb39b68){return db[_0x8a4b('0x33')][_0x8a4b('0x4d')]({'where':{'id':_0x21c113[_0x8a4b('0x4e')]['id']}})[_0x8a4b('0x1a')](handleEntityNotFound(_0xb39b68,null))[_0x8a4b('0x1a')](removeEntity(_0xb39b68,null))[_0x8a4b('0x24')](handleError(_0xb39b68,null));};exports['getFields']=function(_0xeac62f,_0x3101e1,_0xfc99d4){var _0x52c097={};var _0x3aaf94={};var _0x2e2bcf;var _0x451809;return db[_0x8a4b('0x33')][_0x8a4b('0x4f')]({'where':{'id':_0xeac62f[_0x8a4b('0x4e')]['id']}})['then'](handleEntityNotFound(_0x3101e1,null))[_0x8a4b('0x1a')](function(_0x5c6c14){if(_0x5c6c14){_0x2e2bcf=_0x5c6c14;_0x3aaf94[_0x8a4b('0x37')]=_['keys'](db[_0x8a4b('0x50')]['rawAttributes']);_0x3aaf94[_0x8a4b('0x36')]=_[_0x8a4b('0x35')](_0xeac62f[_0x8a4b('0x36')]);_0x3aaf94['filters']=_[_0x8a4b('0x38')](_0x3aaf94['model'],_0x3aaf94[_0x8a4b('0x36')]);_0x52c097[_0x8a4b('0x3a')]=_['intersection'](_0x3aaf94[_0x8a4b('0x37')],qs[_0x8a4b('0x39')](_0xeac62f[_0x8a4b('0x36')][_0x8a4b('0x39')]));_0x52c097[_0x8a4b('0x3a')]=_0x52c097[_0x8a4b('0x3a')][_0x8a4b('0x3b')]?_0x52c097[_0x8a4b('0x3a')]:_0x3aaf94[_0x8a4b('0x37')];_0x52c097['order']=qs[_0x8a4b('0x3d')](_0xeac62f['query'][_0x8a4b('0x3d')]);_0x52c097[_0x8a4b('0x3e')]=qs[_0x8a4b('0x3f')](_['pick'](_0xeac62f[_0x8a4b('0x36')],_0x3aaf94['filters']));if(_0xeac62f[_0x8a4b('0x36')][_0x8a4b('0x40')]){_0x52c097[_0x8a4b('0x3e')]=_[_0x8a4b('0x45')](_0x52c097[_0x8a4b('0x3e')],{'$or':_[_0x8a4b('0x41')](_0x52c097['attributes'],function(_0x200274){var _0x12364d={};_0x12364d[_0x200274]={'$like':'%'+_0xeac62f['query'][_0x8a4b('0x40')]+'%'};return _0x12364d;})});}_0x52c097=_['merge']({},_0x52c097,_0xeac62f[_0x8a4b('0x46')]);return _0x2e2bcf[_0x8a4b('0x51')](_0x52c097);}})[_0x8a4b('0x1a')](function(_0x412898){if(_0x412898){_0x451809=_0x412898['length'];if(!_0xeac62f[_0x8a4b('0x36')]['hasOwnProperty'](_0x8a4b('0x52'))){_0x52c097[_0x8a4b('0x2b')]=qs['limit'](_0xeac62f[_0x8a4b('0x36')][_0x8a4b('0x2b')]);_0x52c097[_0x8a4b('0x2a')]=qs['offset'](_0xeac62f[_0x8a4b('0x36')][_0x8a4b('0x2a')]);}return _0x2e2bcf[_0x8a4b('0x51')](_0x52c097);}})[_0x8a4b('0x1a')](function(_0x20e48e){if(_0x20e48e){return _0x20e48e?{'count':_0x451809,'rows':_0x20e48e}:null;}})['then'](respondWithResult(_0x3101e1,null))[_0x8a4b('0x24')](handleError(_0x3101e1,null));};exports[_0x8a4b('0x53')]=function(_0x59feb7,_0x19b3fd,_0xddb073){var _0xcff7d0={};var _0x412a5c={};var _0x267db1;var _0x1fe6fc;return db[_0x8a4b('0x33')][_0x8a4b('0x4f')]({'where':{'id':_0x59feb7[_0x8a4b('0x4e')]['id']}})[_0x8a4b('0x1a')](handleEntityNotFound(_0x19b3fd,null))[_0x8a4b('0x1a')](function(_0x4fd04e){if(_0x4fd04e){_0x267db1=_0x4fd04e;_0x412a5c[_0x8a4b('0x37')]=_[_0x8a4b('0x35')](db[_0x8a4b('0x50')]['rawAttributes']);_0x412a5c[_0x8a4b('0x36')]=_[_0x8a4b('0x35')](_0x59feb7[_0x8a4b('0x36')]);_0x412a5c[_0x8a4b('0x3f')]=_[_0x8a4b('0x38')](_0x412a5c[_0x8a4b('0x37')],_0x412a5c[_0x8a4b('0x36')]);_0xcff7d0[_0x8a4b('0x3a')]=_[_0x8a4b('0x38')](_0x412a5c[_0x8a4b('0x37')],qs[_0x8a4b('0x39')](_0x59feb7[_0x8a4b('0x36')][_0x8a4b('0x39')]));_0xcff7d0[_0x8a4b('0x3a')]=_0xcff7d0[_0x8a4b('0x3a')][_0x8a4b('0x3b')]?_0xcff7d0[_0x8a4b('0x3a')]:_0x412a5c[_0x8a4b('0x37')];_0xcff7d0['order']=qs[_0x8a4b('0x3d')](_0x59feb7[_0x8a4b('0x36')]['sort']);_0xcff7d0[_0x8a4b('0x3e')]=qs[_0x8a4b('0x3f')](_[_0x8a4b('0x54')](_0x59feb7[_0x8a4b('0x36')],_0x412a5c[_0x8a4b('0x3f')]));if(_0x59feb7[_0x8a4b('0x36')]['filter']){_0xcff7d0[_0x8a4b('0x3e')]=_[_0x8a4b('0x45')](_0xcff7d0[_0x8a4b('0x3e')],{'$or':_[_0x8a4b('0x41')](_0xcff7d0[_0x8a4b('0x3a')],function(_0x15006c){var _0x5b5d2b={};_0x5b5d2b[_0x15006c]={'$like':'%'+_0x59feb7[_0x8a4b('0x36')][_0x8a4b('0x40')]+'%'};return _0x5b5d2b;})});}_0xcff7d0=_[_0x8a4b('0x45')]({},_0xcff7d0,_0x59feb7[_0x8a4b('0x46')]);return _0x267db1[_0x8a4b('0x53')](_0xcff7d0);}})[_0x8a4b('0x1a')](function(_0x31546c){if(_0x31546c){_0x1fe6fc=_0x31546c[_0x8a4b('0x3b')];if(!_0x59feb7[_0x8a4b('0x36')]['hasOwnProperty'](_0x8a4b('0x52'))){_0xcff7d0[_0x8a4b('0x2b')]=qs[_0x8a4b('0x2b')](_0x59feb7[_0x8a4b('0x36')][_0x8a4b('0x2b')]);_0xcff7d0[_0x8a4b('0x2a')]=qs['offset'](_0x59feb7[_0x8a4b('0x36')]['offset']);}return _0x267db1['getSubjects'](_0xcff7d0);}})[_0x8a4b('0x1a')](function(_0x2b783e){if(_0x2b783e){return _0x2b783e?{'count':_0x1fe6fc,'rows':_0x2b783e}:null;}})['then'](respondWithResult(_0x19b3fd,null))['catch'](handleError(_0x19b3fd,null));};exports[_0x8a4b('0x55')]=function(_0x4db9c2,_0x19bd37,_0x419a86){var _0x1e3f0f={};var _0x4bb795={};var _0x51dda0;var _0x33d192;return db[_0x8a4b('0x33')][_0x8a4b('0x4f')]({'where':{'id':_0x4db9c2[_0x8a4b('0x4e')]['id']}})[_0x8a4b('0x1a')](handleEntityNotFound(_0x19bd37,null))['then'](function(_0x21b068){if(_0x21b068){_0x51dda0=_0x21b068;_0x4bb795['model']=_['keys'](db['ZendeskField'][_0x8a4b('0x34')]);_0x4bb795[_0x8a4b('0x36')]=_[_0x8a4b('0x35')](_0x4db9c2[_0x8a4b('0x36')]);_0x4bb795['filters']=_[_0x8a4b('0x38')](_0x4bb795[_0x8a4b('0x37')],_0x4bb795['query']);_0x1e3f0f[_0x8a4b('0x3a')]=_[_0x8a4b('0x38')](_0x4bb795[_0x8a4b('0x37')],qs[_0x8a4b('0x39')](_0x4db9c2[_0x8a4b('0x36')][_0x8a4b('0x39')]));_0x1e3f0f['attributes']=_0x1e3f0f[_0x8a4b('0x3a')]['length']?_0x1e3f0f[_0x8a4b('0x3a')]:_0x4bb795[_0x8a4b('0x37')];_0x1e3f0f[_0x8a4b('0x56')]=qs[_0x8a4b('0x3d')](_0x4db9c2[_0x8a4b('0x36')][_0x8a4b('0x3d')]);_0x1e3f0f[_0x8a4b('0x3e')]=qs[_0x8a4b('0x3f')](_[_0x8a4b('0x54')](_0x4db9c2['query'],_0x4bb795['filters']));if(_0x4db9c2[_0x8a4b('0x36')][_0x8a4b('0x40')]){_0x1e3f0f[_0x8a4b('0x3e')]=_[_0x8a4b('0x45')](_0x1e3f0f['where'],{'$or':_[_0x8a4b('0x41')](_0x1e3f0f['attributes'],function(_0x14df77){var _0x20820e={};_0x20820e[_0x14df77]={'$like':'%'+_0x4db9c2[_0x8a4b('0x36')]['filter']+'%'};return _0x20820e;})});}_0x1e3f0f=_[_0x8a4b('0x45')]({},_0x1e3f0f,_0x4db9c2[_0x8a4b('0x46')]);return _0x51dda0[_0x8a4b('0x55')](_0x1e3f0f);}})[_0x8a4b('0x1a')](function(_0xb671d9){if(_0xb671d9){_0x33d192=_0xb671d9['length'];if(!_0x4db9c2[_0x8a4b('0x36')][_0x8a4b('0x3c')](_0x8a4b('0x52'))){_0x1e3f0f[_0x8a4b('0x2b')]=qs[_0x8a4b('0x2b')](_0x4db9c2[_0x8a4b('0x36')][_0x8a4b('0x2b')]);_0x1e3f0f[_0x8a4b('0x2a')]=qs[_0x8a4b('0x2a')](_0x4db9c2['query'][_0x8a4b('0x2a')]);}return _0x51dda0['getDescriptions'](_0x1e3f0f);}})[_0x8a4b('0x1a')](function(_0x548163){if(_0x548163){return _0x548163?{'count':_0x33d192,'rows':_0x548163}:null;}})[_0x8a4b('0x1a')](respondWithResult(_0x19bd37,null))[_0x8a4b('0x24')](handleError(_0x19bd37,null));};exports[_0x8a4b('0x57')]=function(_0xead428,_0x14cc06,_0x1b02f8){var _0x5b6a78={};var _0x1d9901={};var _0x84c962;var _0xec3995;return db[_0x8a4b('0x33')]['findOne']({'where':{'id':_0xead428[_0x8a4b('0x4e')]['id']}})[_0x8a4b('0x1a')](handleEntityNotFound(_0x14cc06,null))['then'](function(_0x5a466a){if(_0x5a466a){_0x84c962=_0x5a466a;_0x1d9901['model']=_[_0x8a4b('0x35')](db[_0x8a4b('0x58')][_0x8a4b('0x34')]);_0x1d9901[_0x8a4b('0x36')]=_[_0x8a4b('0x35')](_0xead428['query']);_0x1d9901['filters']=_['intersection'](_0x1d9901['model'],_0x1d9901[_0x8a4b('0x36')]);_0x5b6a78[_0x8a4b('0x3a')]=_[_0x8a4b('0x38')](_0x1d9901[_0x8a4b('0x37')],qs['fields'](_0xead428['query'][_0x8a4b('0x39')]));_0x5b6a78[_0x8a4b('0x3a')]=_0x5b6a78[_0x8a4b('0x3a')]['length']?_0x5b6a78[_0x8a4b('0x3a')]:_0x1d9901[_0x8a4b('0x37')];_0x5b6a78['order']=qs[_0x8a4b('0x3d')](_0xead428['query'][_0x8a4b('0x3d')]);_0x5b6a78['where']=qs['filters'](_[_0x8a4b('0x54')](_0xead428[_0x8a4b('0x36')],_0x1d9901[_0x8a4b('0x3f')]));if(_0xead428[_0x8a4b('0x36')]['filter']){_0x5b6a78[_0x8a4b('0x3e')]=_[_0x8a4b('0x45')](_0x5b6a78['where'],{'$or':_[_0x8a4b('0x41')](_0x5b6a78['attributes'],function(_0x40d6a4){var _0x4535a1={};_0x4535a1[_0x40d6a4]={'$like':'%'+_0xead428['query'][_0x8a4b('0x40')]+'%'};return _0x4535a1;})});}_0x5b6a78=_[_0x8a4b('0x45')]({},_0x5b6a78,_0xead428['options']);return _0x84c962[_0x8a4b('0x57')](_0x5b6a78);}})['then'](function(_0x4d1603){if(_0x4d1603){_0xec3995=_0x4d1603[_0x8a4b('0x3b')];if(!_0xead428[_0x8a4b('0x36')][_0x8a4b('0x3c')](_0x8a4b('0x52'))){_0x5b6a78[_0x8a4b('0x2b')]=qs[_0x8a4b('0x2b')](_0xead428[_0x8a4b('0x36')]['limit']);_0x5b6a78[_0x8a4b('0x2a')]=qs[_0x8a4b('0x2a')](_0xead428[_0x8a4b('0x36')][_0x8a4b('0x2a')]);}return _0x84c962[_0x8a4b('0x57')](_0x5b6a78);}})[_0x8a4b('0x1a')](function(_0x545757){if(_0x545757){return _0x545757?{'count':_0xec3995,'rows':_0x545757}:null;}})[_0x8a4b('0x1a')](respondWithResult(_0x14cc06,null))[_0x8a4b('0x24')](handleError(_0x14cc06,null));};exports[_0x8a4b('0x59')]=function(_0x4da9cb,_0x5bb65f,_0x549cd1){if(_0x4da9cb['body']['id']){delete _0x4da9cb[_0x8a4b('0x4c')]['id'];}return db['ZendeskConfiguration']['findOne']({'where':{'id':_0x4da9cb[_0x8a4b('0x4e')]['id']}})[_0x8a4b('0x1a')](handleEntityNotFound(_0x5bb65f,null))['then'](function(_0x40f0d7){if(_0x40f0d7){return _0x40f0d7[_0x8a4b('0x59')](_0x4da9cb['body'][_0x8a4b('0x5a')]||[]);}return null;})[_0x8a4b('0x1a')](respondWithResult(_0x5bb65f,null))[_0x8a4b('0x24')](handleError(_0x5bb65f,null));};
\ No newline at end of file
+var _0x40d0=['find','body','update','getFields','findOne','ZendeskField','sort','pick','map','nolimit','getSubjects','getDescriptions','getTags','Tag','setTags','ids','rimraf','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','http','request','then','ZendeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','sendStatus','status','offset','limit','set','apply','save','destroy','stack','name','ZendeskConfiguration','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','where','filters','filter','merge','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','show','params','rawAttributes'];(function(_0x423fed,_0x41bf07){var _0x16a581=function(_0x5b86b2){while(--_0x5b86b2){_0x423fed['push'](_0x423fed['shift']());}};_0x16a581(++_0x41bf07);}(_0x40d0,0x6a));var _0x040d=function(_0x25669c,_0x3163ce){_0x25669c=_0x25669c-0x0;var _0x5c5284=_0x40d0[_0x25669c];return _0x5c5284;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x040d('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x040d('0x1'));var rp=require(_0x040d('0x2'));var moment=require(_0x040d('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x040d('0x4'));var util=require(_0x040d('0x5'));var path=require(_0x040d('0x6'));var sox=require('sox');var csv=require(_0x040d('0x7'));var ejs=require(_0x040d('0x8'));var fs=require('fs');var _=require(_0x040d('0x9'));var squel=require(_0x040d('0xa'));var crypto=require(_0x040d('0xb'));var jsforce=require(_0x040d('0xc'));var deskjs=require(_0x040d('0xd'));var toCsv=require('to-csv');var querystring=require(_0x040d('0xe'));var Papa=require(_0x040d('0xf'));var authService=require(_0x040d('0x10'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x040d('0x11'));var qs=require(_0x040d('0x12'));var logger=require(_0x040d('0x13'))(_0x040d('0x14'));var utils=require('../../config/utils');var config=require(_0x040d('0x15'));var db=require(_0x040d('0x16'))['db'];var jayson=require(_0x040d('0x17'));var client=jayson[_0x040d('0x18')][_0x040d('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x462146,_0x4af791,_0x2d0284,_0x3bcc5f){return new BPromise(function(_0x2e0aa9,_0x3a0005){var _0x3156eb=_0x3bcc5f||client;return _0x3156eb[_0x040d('0x1a')](_0x462146,_0x2d0284)[_0x040d('0x1b')](function(_0x544ad5){logger['info'](_0x040d('0x1c'),_0x4af791,_0x040d('0x1d'));logger[_0x040d('0x1e')](_0x040d('0x1f'),_0x4af791,_0x040d('0x1d'),JSON[_0x040d('0x20')](_0x544ad5));if(_0x544ad5[_0x040d('0x21')]){if(_0x544ad5['error'][_0x040d('0x22')]===0x1f4){logger[_0x040d('0x21')](_0x040d('0x1c'),_0x4af791,_0x544ad5['error'][_0x040d('0x23')]);return _0x3a0005(_0x544ad5[_0x040d('0x21')]['message']);}logger[_0x040d('0x21')](_0x040d('0x1c'),_0x4af791,_0x544ad5[_0x040d('0x21')]['message']);return _0x2e0aa9(_0x544ad5[_0x040d('0x21')][_0x040d('0x23')]);}else{logger[_0x040d('0x24')]('ZendeskConfiguration,\x20%s,\x20%s',_0x4af791,_0x040d('0x1d'));_0x2e0aa9(_0x544ad5['result'][_0x040d('0x23')]);}})[_0x040d('0x25')](function(_0x3737f7){logger[_0x040d('0x21')](_0x040d('0x1c'),_0x4af791,_0x3737f7);_0x3a0005(_0x3737f7);});});}function respondWithStatusCode(_0x5d7460,_0x2ea680){_0x2ea680=_0x2ea680||0xcc;return function(_0x3a1b85){if(_0x3a1b85){return _0x5d7460[_0x040d('0x26')](_0x2ea680);}return _0x5d7460['status'](_0x2ea680)['end']();};}function respondWithResult(_0x596d0e,_0x5c4024){_0x5c4024=_0x5c4024||0xc8;return function(_0x2fe4e5){if(_0x2fe4e5){return _0x596d0e[_0x040d('0x27')](_0x5c4024)['json'](_0x2fe4e5);}};}function respondWithFilteredResult(_0x4738c6,_0x4c1147){return function(_0x106b6a){if(_0x106b6a){var _0x4ef6bc=_0x106b6a['count'],_0x5d24b6=_0x4c1147[_0x040d('0x28')],_0x45cd03=_0x4c1147['offset']+_0x4c1147[_0x040d('0x29')],_0x3b6423;if(_0x45cd03>=_0x4ef6bc){_0x45cd03=_0x4ef6bc;_0x3b6423=0xc8;}else{_0x3b6423=0xce;}_0x4738c6[_0x040d('0x27')](_0x3b6423);return _0x4738c6[_0x040d('0x2a')]('Content-Range',_0x5d24b6+'-'+_0x45cd03+'/'+_0x4ef6bc)['json'](_0x106b6a);}return null;};}function patchUpdates(_0x2b43f2){return function(_0x16f07a){try{jsonpatch[_0x040d('0x2b')](_0x16f07a,_0x2b43f2,!![]);}catch(_0x272c5f){return BPromise['reject'](_0x272c5f);}return _0x16f07a[_0x040d('0x2c')]();};}function saveUpdates(_0xe580c4,_0x265d01){return function(_0x39bc43){if(_0x39bc43){return _0x39bc43['update'](_0xe580c4)[_0x040d('0x1b')](function(_0x4c8489){return _0x4c8489;});}return null;};}function removeEntity(_0x4af786,_0x51d3e4){return function(_0xf5fece){if(_0xf5fece){return _0xf5fece[_0x040d('0x2d')]()[_0x040d('0x1b')](function(){_0x4af786[_0x040d('0x27')](0xcc)['end']();});}};}function handleEntityNotFound(_0x22fc3a,_0x431b4a){return function(_0x1839fc){if(!_0x1839fc){_0x22fc3a[_0x040d('0x26')](0x194);}return _0x1839fc;};}function handleError(_0x5cc92e,_0x1797e8){_0x1797e8=_0x1797e8||0x1f4;return function(_0xcb6fea){logger[_0x040d('0x21')](_0xcb6fea[_0x040d('0x2e')]);if(_0xcb6fea[_0x040d('0x2f')]){delete _0xcb6fea[_0x040d('0x2f')];}_0x5cc92e[_0x040d('0x27')](_0x1797e8)['send'](_0xcb6fea);};}exports['index']=function(_0x1d1d1f,_0x1b588a){var _0xeff48e={},_0xb578c2={},_0x225e2c={'count':0x0,'rows':[]};var _0x5cd9eb=db[_0x040d('0x30')]['rawAttributes'];_0xb578c2[_0x040d('0x31')]=_[_0x040d('0x32')](_0x5cd9eb);_0xb578c2[_0x040d('0x33')]=_['keys'](_0x1d1d1f[_0x040d('0x33')]);_0xb578c2['filters']=_[_0x040d('0x34')](_0xb578c2['model'],_0xb578c2['query']);_0xeff48e[_0x040d('0x35')]=_[_0x040d('0x34')](_0xb578c2[_0x040d('0x31')],qs[_0x040d('0x36')](_0x1d1d1f[_0x040d('0x33')][_0x040d('0x36')]));_0xeff48e['attributes']=_0xeff48e[_0x040d('0x35')][_0x040d('0x37')]?_0xeff48e['attributes']:_0xb578c2[_0x040d('0x31')];if(!_0x1d1d1f[_0x040d('0x33')][_0x040d('0x38')]('nolimit')){_0xeff48e[_0x040d('0x29')]=qs[_0x040d('0x29')](_0x1d1d1f[_0x040d('0x33')][_0x040d('0x29')]);_0xeff48e[_0x040d('0x28')]=qs[_0x040d('0x28')](_0x1d1d1f[_0x040d('0x33')][_0x040d('0x28')]);}_0xeff48e[_0x040d('0x39')]=qs['sort'](_0x1d1d1f[_0x040d('0x33')]['sort']);_0xeff48e[_0x040d('0x3a')]=qs[_0x040d('0x3b')](_['pick'](_0x1d1d1f['query'],_0xb578c2[_0x040d('0x3b')]));if(_0x1d1d1f[_0x040d('0x33')][_0x040d('0x3c')]){_0xeff48e[_0x040d('0x3a')]=_[_0x040d('0x3d')](_0xeff48e[_0x040d('0x3a')],{'$or':_['map'](_0x5cd9eb,function(_0x4b9a33){if(_0x4b9a33['type'][_0x040d('0x3e')]!==_0x040d('0x3f')){var _0x1b6fcb={};_0x1b6fcb[_0x4b9a33[_0x040d('0x40')]]={'$like':'%'+_0x1d1d1f[_0x040d('0x33')][_0x040d('0x3c')]+'%'};return _0x1b6fcb;}})});}_0xeff48e=_['merge']({},_0xeff48e,_0x1d1d1f[_0x040d('0x41')]);var _0x4699f0={'where':_0xeff48e[_0x040d('0x3a')]};return db[_0x040d('0x30')][_0x040d('0x42')](_0x4699f0)['then'](function(_0x4372dd){_0x225e2c['count']=_0x4372dd;if(_0x1d1d1f['query'][_0x040d('0x43')]){_0xeff48e[_0x040d('0x44')]=[{'all':!![]}];}return db['ZendeskConfiguration'][_0x040d('0x45')](_0xeff48e);})[_0x040d('0x1b')](function(_0x36a74d){_0x225e2c[_0x040d('0x46')]=_0x36a74d;return _0x225e2c;})[_0x040d('0x1b')](respondWithFilteredResult(_0x1b588a,_0xeff48e))['catch'](handleError(_0x1b588a,null));};exports[_0x040d('0x47')]=function(_0x49e2d8,_0x19449d){var _0x150e28={'raw':![],'where':{'id':_0x49e2d8[_0x040d('0x48')]['id']}},_0x4fcdd4={};_0x4fcdd4[_0x040d('0x31')]=_[_0x040d('0x32')](db[_0x040d('0x30')][_0x040d('0x49')]);_0x4fcdd4['query']=_[_0x040d('0x32')](_0x49e2d8[_0x040d('0x33')]);_0x4fcdd4[_0x040d('0x3b')]=_[_0x040d('0x34')](_0x4fcdd4[_0x040d('0x31')],_0x4fcdd4[_0x040d('0x33')]);_0x150e28['attributes']=_['intersection'](_0x4fcdd4[_0x040d('0x31')],qs[_0x040d('0x36')](_0x49e2d8[_0x040d('0x33')][_0x040d('0x36')]));_0x150e28[_0x040d('0x35')]=_0x150e28[_0x040d('0x35')][_0x040d('0x37')]?_0x150e28[_0x040d('0x35')]:_0x4fcdd4['model'];if(_0x49e2d8['query'][_0x040d('0x43')]){_0x150e28['include']=[{'all':!![]}];}_0x150e28=_[_0x040d('0x3d')]({},_0x150e28,_0x49e2d8[_0x040d('0x41')]);return db[_0x040d('0x30')][_0x040d('0x4a')](_0x150e28)['then'](handleEntityNotFound(_0x19449d,null))[_0x040d('0x1b')](respondWithResult(_0x19449d,null))['catch'](handleError(_0x19449d,null));};exports['create']=function(_0x592828,_0x4fcb2f){return db[_0x040d('0x30')]['create'](_0x592828[_0x040d('0x4b')],{})[_0x040d('0x1b')](respondWithResult(_0x4fcb2f,0xc9))[_0x040d('0x25')](handleError(_0x4fcb2f,null));};exports[_0x040d('0x4c')]=function(_0x2b0c9d,_0x58be8a){if(_0x2b0c9d[_0x040d('0x4b')]['id']){delete _0x2b0c9d[_0x040d('0x4b')]['id'];}return db[_0x040d('0x30')]['find']({'where':{'id':_0x2b0c9d[_0x040d('0x48')]['id']}})[_0x040d('0x1b')](handleEntityNotFound(_0x58be8a,null))['then'](saveUpdates(_0x2b0c9d['body'],null))[_0x040d('0x1b')](respondWithResult(_0x58be8a,null))[_0x040d('0x25')](handleError(_0x58be8a,null));};exports[_0x040d('0x2d')]=function(_0x1f1def,_0x5dd1ea){return db['ZendeskConfiguration'][_0x040d('0x4a')]({'where':{'id':_0x1f1def['params']['id']}})['then'](handleEntityNotFound(_0x5dd1ea,null))[_0x040d('0x1b')](removeEntity(_0x5dd1ea,null))['catch'](handleError(_0x5dd1ea,null));};exports[_0x040d('0x4d')]=function(_0x4e3b6d,_0x1eaa6e,_0x5bdc6d){var _0x202a61={};var _0xe2148c={};var _0x5bf87a;var _0xa07a33;return db['ZendeskConfiguration'][_0x040d('0x4e')]({'where':{'id':_0x4e3b6d[_0x040d('0x48')]['id']}})[_0x040d('0x1b')](handleEntityNotFound(_0x1eaa6e,null))[_0x040d('0x1b')](function(_0x7ee70c){if(_0x7ee70c){_0x5bf87a=_0x7ee70c;_0xe2148c[_0x040d('0x31')]=_['keys'](db[_0x040d('0x4f')][_0x040d('0x49')]);_0xe2148c[_0x040d('0x33')]=_[_0x040d('0x32')](_0x4e3b6d[_0x040d('0x33')]);_0xe2148c[_0x040d('0x3b')]=_[_0x040d('0x34')](_0xe2148c[_0x040d('0x31')],_0xe2148c['query']);_0x202a61[_0x040d('0x35')]=_[_0x040d('0x34')](_0xe2148c[_0x040d('0x31')],qs[_0x040d('0x36')](_0x4e3b6d['query'][_0x040d('0x36')]));_0x202a61[_0x040d('0x35')]=_0x202a61['attributes'][_0x040d('0x37')]?_0x202a61[_0x040d('0x35')]:_0xe2148c[_0x040d('0x31')];_0x202a61[_0x040d('0x39')]=qs['sort'](_0x4e3b6d[_0x040d('0x33')][_0x040d('0x50')]);_0x202a61[_0x040d('0x3a')]=qs[_0x040d('0x3b')](_[_0x040d('0x51')](_0x4e3b6d[_0x040d('0x33')],_0xe2148c[_0x040d('0x3b')]));if(_0x4e3b6d[_0x040d('0x33')][_0x040d('0x3c')]){_0x202a61[_0x040d('0x3a')]=_[_0x040d('0x3d')](_0x202a61[_0x040d('0x3a')],{'$or':_[_0x040d('0x52')](_0x202a61[_0x040d('0x35')],function(_0x59f91f){var _0x13a65d={};_0x13a65d[_0x59f91f]={'$like':'%'+_0x4e3b6d['query'][_0x040d('0x3c')]+'%'};return _0x13a65d;})});}_0x202a61=_['merge']({},_0x202a61,_0x4e3b6d[_0x040d('0x41')]);return _0x5bf87a[_0x040d('0x4d')](_0x202a61);}})['then'](function(_0x4856c7){if(_0x4856c7){_0xa07a33=_0x4856c7[_0x040d('0x37')];if(!_0x4e3b6d[_0x040d('0x33')][_0x040d('0x38')](_0x040d('0x53'))){_0x202a61[_0x040d('0x29')]=qs[_0x040d('0x29')](_0x4e3b6d[_0x040d('0x33')]['limit']);_0x202a61[_0x040d('0x28')]=qs[_0x040d('0x28')](_0x4e3b6d[_0x040d('0x33')][_0x040d('0x28')]);}return _0x5bf87a[_0x040d('0x4d')](_0x202a61);}})[_0x040d('0x1b')](function(_0x3fbe9d){if(_0x3fbe9d){return _0x3fbe9d?{'count':_0xa07a33,'rows':_0x3fbe9d}:null;}})['then'](respondWithResult(_0x1eaa6e,null))[_0x040d('0x25')](handleError(_0x1eaa6e,null));};exports[_0x040d('0x54')]=function(_0x1cb668,_0x58c4a1,_0x583948){var _0x421fd1={};var _0x142ca5={};var _0x3a99c3;var _0x1edc80;return db['ZendeskConfiguration']['findOne']({'where':{'id':_0x1cb668[_0x040d('0x48')]['id']}})['then'](handleEntityNotFound(_0x58c4a1,null))[_0x040d('0x1b')](function(_0x28dd8f){if(_0x28dd8f){_0x3a99c3=_0x28dd8f;_0x142ca5[_0x040d('0x31')]=_[_0x040d('0x32')](db['ZendeskField'][_0x040d('0x49')]);_0x142ca5[_0x040d('0x33')]=_[_0x040d('0x32')](_0x1cb668[_0x040d('0x33')]);_0x142ca5[_0x040d('0x3b')]=_[_0x040d('0x34')](_0x142ca5['model'],_0x142ca5['query']);_0x421fd1['attributes']=_[_0x040d('0x34')](_0x142ca5[_0x040d('0x31')],qs[_0x040d('0x36')](_0x1cb668[_0x040d('0x33')][_0x040d('0x36')]));_0x421fd1['attributes']=_0x421fd1['attributes'][_0x040d('0x37')]?_0x421fd1[_0x040d('0x35')]:_0x142ca5[_0x040d('0x31')];_0x421fd1[_0x040d('0x39')]=qs[_0x040d('0x50')](_0x1cb668[_0x040d('0x33')][_0x040d('0x50')]);_0x421fd1[_0x040d('0x3a')]=qs[_0x040d('0x3b')](_['pick'](_0x1cb668[_0x040d('0x33')],_0x142ca5[_0x040d('0x3b')]));if(_0x1cb668[_0x040d('0x33')][_0x040d('0x3c')]){_0x421fd1['where']=_[_0x040d('0x3d')](_0x421fd1[_0x040d('0x3a')],{'$or':_[_0x040d('0x52')](_0x421fd1[_0x040d('0x35')],function(_0x11d10c){var _0x320510={};_0x320510[_0x11d10c]={'$like':'%'+_0x1cb668[_0x040d('0x33')][_0x040d('0x3c')]+'%'};return _0x320510;})});}_0x421fd1=_[_0x040d('0x3d')]({},_0x421fd1,_0x1cb668['options']);return _0x3a99c3[_0x040d('0x54')](_0x421fd1);}})['then'](function(_0xb9fcac){if(_0xb9fcac){_0x1edc80=_0xb9fcac[_0x040d('0x37')];if(!_0x1cb668[_0x040d('0x33')]['hasOwnProperty'](_0x040d('0x53'))){_0x421fd1['limit']=qs[_0x040d('0x29')](_0x1cb668['query']['limit']);_0x421fd1[_0x040d('0x28')]=qs[_0x040d('0x28')](_0x1cb668[_0x040d('0x33')]['offset']);}return _0x3a99c3[_0x040d('0x54')](_0x421fd1);}})[_0x040d('0x1b')](function(_0x139d4a){if(_0x139d4a){return _0x139d4a?{'count':_0x1edc80,'rows':_0x139d4a}:null;}})['then'](respondWithResult(_0x58c4a1,null))['catch'](handleError(_0x58c4a1,null));};exports[_0x040d('0x55')]=function(_0x1db5d5,_0x2392fd,_0x1d9f24){var _0x207230={};var _0x89f748={};var _0x111f3c;var _0x347e64;return db[_0x040d('0x30')][_0x040d('0x4e')]({'where':{'id':_0x1db5d5[_0x040d('0x48')]['id']}})[_0x040d('0x1b')](handleEntityNotFound(_0x2392fd,null))[_0x040d('0x1b')](function(_0x26a7e8){if(_0x26a7e8){_0x111f3c=_0x26a7e8;_0x89f748['model']=_[_0x040d('0x32')](db['ZendeskField'][_0x040d('0x49')]);_0x89f748[_0x040d('0x33')]=_[_0x040d('0x32')](_0x1db5d5[_0x040d('0x33')]);_0x89f748[_0x040d('0x3b')]=_[_0x040d('0x34')](_0x89f748[_0x040d('0x31')],_0x89f748[_0x040d('0x33')]);_0x207230[_0x040d('0x35')]=_[_0x040d('0x34')](_0x89f748[_0x040d('0x31')],qs[_0x040d('0x36')](_0x1db5d5[_0x040d('0x33')][_0x040d('0x36')]));_0x207230[_0x040d('0x35')]=_0x207230['attributes']['length']?_0x207230['attributes']:_0x89f748[_0x040d('0x31')];_0x207230['order']=qs['sort'](_0x1db5d5[_0x040d('0x33')][_0x040d('0x50')]);_0x207230['where']=qs['filters'](_[_0x040d('0x51')](_0x1db5d5['query'],_0x89f748[_0x040d('0x3b')]));if(_0x1db5d5[_0x040d('0x33')][_0x040d('0x3c')]){_0x207230[_0x040d('0x3a')]=_[_0x040d('0x3d')](_0x207230['where'],{'$or':_[_0x040d('0x52')](_0x207230['attributes'],function(_0x4e592d){var _0x2f46b3={};_0x2f46b3[_0x4e592d]={'$like':'%'+_0x1db5d5[_0x040d('0x33')][_0x040d('0x3c')]+'%'};return _0x2f46b3;})});}_0x207230=_['merge']({},_0x207230,_0x1db5d5[_0x040d('0x41')]);return _0x111f3c[_0x040d('0x55')](_0x207230);}})['then'](function(_0x11fde2){if(_0x11fde2){_0x347e64=_0x11fde2['length'];if(!_0x1db5d5[_0x040d('0x33')][_0x040d('0x38')](_0x040d('0x53'))){_0x207230[_0x040d('0x29')]=qs[_0x040d('0x29')](_0x1db5d5[_0x040d('0x33')][_0x040d('0x29')]);_0x207230[_0x040d('0x28')]=qs['offset'](_0x1db5d5['query'][_0x040d('0x28')]);}return _0x111f3c['getDescriptions'](_0x207230);}})['then'](function(_0x10145e){if(_0x10145e){return _0x10145e?{'count':_0x347e64,'rows':_0x10145e}:null;}})['then'](respondWithResult(_0x2392fd,null))[_0x040d('0x25')](handleError(_0x2392fd,null));};exports[_0x040d('0x56')]=function(_0x344da1,_0xfbea03,_0x5c09af){var _0x343033={};var _0x7438ad={};var _0x308502;var _0x563657;return db[_0x040d('0x30')][_0x040d('0x4e')]({'where':{'id':_0x344da1[_0x040d('0x48')]['id']}})[_0x040d('0x1b')](handleEntityNotFound(_0xfbea03,null))[_0x040d('0x1b')](function(_0x3ceb1d){if(_0x3ceb1d){_0x308502=_0x3ceb1d;_0x7438ad[_0x040d('0x31')]=_[_0x040d('0x32')](db[_0x040d('0x57')][_0x040d('0x49')]);_0x7438ad[_0x040d('0x33')]=_[_0x040d('0x32')](_0x344da1['query']);_0x7438ad[_0x040d('0x3b')]=_['intersection'](_0x7438ad['model'],_0x7438ad[_0x040d('0x33')]);_0x343033['attributes']=_[_0x040d('0x34')](_0x7438ad[_0x040d('0x31')],qs[_0x040d('0x36')](_0x344da1[_0x040d('0x33')]['fields']));_0x343033[_0x040d('0x35')]=_0x343033[_0x040d('0x35')][_0x040d('0x37')]?_0x343033[_0x040d('0x35')]:_0x7438ad[_0x040d('0x31')];_0x343033[_0x040d('0x39')]=qs[_0x040d('0x50')](_0x344da1[_0x040d('0x33')]['sort']);_0x343033[_0x040d('0x3a')]=qs[_0x040d('0x3b')](_[_0x040d('0x51')](_0x344da1[_0x040d('0x33')],_0x7438ad[_0x040d('0x3b')]));if(_0x344da1[_0x040d('0x33')]['filter']){_0x343033[_0x040d('0x3a')]=_[_0x040d('0x3d')](_0x343033['where'],{'$or':_[_0x040d('0x52')](_0x343033[_0x040d('0x35')],function(_0x55a634){var _0xdc2c63={};_0xdc2c63[_0x55a634]={'$like':'%'+_0x344da1[_0x040d('0x33')][_0x040d('0x3c')]+'%'};return _0xdc2c63;})});}_0x343033=_[_0x040d('0x3d')]({},_0x343033,_0x344da1['options']);return _0x308502['getTags'](_0x343033);}})['then'](function(_0x4658bf){if(_0x4658bf){_0x563657=_0x4658bf['length'];if(!_0x344da1['query']['hasOwnProperty']('nolimit')){_0x343033['limit']=qs[_0x040d('0x29')](_0x344da1[_0x040d('0x33')][_0x040d('0x29')]);_0x343033[_0x040d('0x28')]=qs[_0x040d('0x28')](_0x344da1[_0x040d('0x33')][_0x040d('0x28')]);}return _0x308502[_0x040d('0x56')](_0x343033);}})[_0x040d('0x1b')](function(_0x113bda){if(_0x113bda){return _0x113bda?{'count':_0x563657,'rows':_0x113bda}:null;}})[_0x040d('0x1b')](respondWithResult(_0xfbea03,null))[_0x040d('0x25')](handleError(_0xfbea03,null));};exports[_0x040d('0x58')]=function(_0x231599,_0x547e6d,_0x4b5fe5){if(_0x231599[_0x040d('0x4b')]['id']){delete _0x231599[_0x040d('0x4b')]['id'];}return db[_0x040d('0x30')][_0x040d('0x4e')]({'where':{'id':_0x231599[_0x040d('0x48')]['id']}})[_0x040d('0x1b')](handleEntityNotFound(_0x547e6d,null))[_0x040d('0x1b')](function(_0x2a9913){if(_0x2a9913){return _0x2a9913[_0x040d('0x58')](_0x231599[_0x040d('0x4b')][_0x040d('0x59')]||[]);}return null;})['then'](respondWithResult(_0x547e6d,null))[_0x040d('0x25')](handleError(_0x547e6d,null));};
\ No newline at end of file
index b649e8c..b8cce32 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf0aa=['bluebird','request-promise','./intZendeskConfiguration.attributes','exports','define','int_zendesk_configurations','lodash','../../config/logger','api','moment'];(function(_0x2f6763,_0x281257){var _0x30927f=function(_0x14b7af){while(--_0x14b7af){_0x2f6763['push'](_0x2f6763['shift']());}};_0x30927f(++_0x281257);}(_0xf0aa,0x16e));var _0xaf0a=function(_0x1e24af,_0x5963ff){_0x1e24af=_0x1e24af-0x0;var _0x4fb74c=_0xf0aa[_0x1e24af];return _0x4fb74c;};'use strict';var _=require(_0xaf0a('0x0'));var util=require('util');var logger=require(_0xaf0a('0x1'))(_0xaf0a('0x2'));var moment=require(_0xaf0a('0x3'));var BPromise=require(_0xaf0a('0x4'));var rp=require(_0xaf0a('0x5'));var attributes=require(_0xaf0a('0x6'));module[_0xaf0a('0x7')]=function(_0x44d248,_0x1c156c){return _0x44d248[_0xaf0a('0x8')]('ZendeskConfiguration',attributes,{'tableName':_0xaf0a('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd39c=['util','../../config/logger','api','moment','bluebird','request-promise','./intZendeskConfiguration.attributes','exports','define','lodash'];(function(_0xb6e2ea,_0x3b26e9){var _0x2a57bb=function(_0x2a1ac9){while(--_0x2a1ac9){_0xb6e2ea['push'](_0xb6e2ea['shift']());}};_0x2a57bb(++_0x3b26e9);}(_0xd39c,0xef));var _0xcd39=function(_0xc5de45,_0x36b119){_0xc5de45=_0xc5de45-0x0;var _0xa4c946=_0xd39c[_0xc5de45];return _0xa4c946;};'use strict';var _=require(_0xcd39('0x0'));var util=require(_0xcd39('0x1'));var logger=require(_0xcd39('0x2'))(_0xcd39('0x3'));var moment=require(_0xcd39('0x4'));var BPromise=require(_0xcd39('0x5'));var rp=require(_0xcd39('0x6'));var attributes=require(_0xcd39('0x7'));module[_0xcd39('0x8')]=function(_0x3f5619,_0x26f9aa){return _0x3f5619[_0xcd39('0x9')]('ZendeskConfiguration',attributes,{'tableName':'int_zendesk_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6a424cb..7d8a57c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6730=['request\x20sent','stringify','error','code','message','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','ZendeskConfiguration,\x20%s,\x20%s'];(function(_0x482b74,_0x4ff641){var _0x3c478f=function(_0x5ba3cd){while(--_0x5ba3cd){_0x482b74['push'](_0x482b74['shift']());}};_0x3c478f(++_0x4ff641);}(_0x6730,0x12c));var _0x0673=function(_0x254d46,_0x77078b){_0x254d46=_0x254d46-0x0;var _0xa15a30=_0x6730[_0x254d46];return _0xa15a30;};'use strict';var _=require('lodash');var util=require(_0x0673('0x0'));var moment=require(_0x0673('0x1'));var BPromise=require(_0x0673('0x2'));var rs=require(_0x0673('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x0673('0x4'))['db'];var utils=require(_0x0673('0x5'));var logger=require(_0x0673('0x6'))(_0x0673('0x7'));var config=require(_0x0673('0x8'));var jayson=require(_0x0673('0x9'));var client=jayson['client'][_0x0673('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x290b1a,_0x2693ed,_0x59b609){return new BPromise(function(_0x11dfc6,_0x2daf51){return client[_0x0673('0xb')](_0x290b1a,_0x59b609)[_0x0673('0xc')](function(_0x5f26ed){logger[_0x0673('0xd')](_0x0673('0xe'),_0x2693ed,'request\x20sent');logger['debug']('ZendeskConfiguration,\x20%s,\x20%s,\x20%s',_0x2693ed,_0x0673('0xf'),JSON[_0x0673('0x10')](_0x5f26ed));if(_0x5f26ed[_0x0673('0x11')]){if(_0x5f26ed[_0x0673('0x11')][_0x0673('0x12')]===0x1f4){logger[_0x0673('0x11')](_0x0673('0xe'),_0x2693ed,_0x5f26ed['error'][_0x0673('0x13')]);return _0x2daf51(_0x5f26ed[_0x0673('0x11')][_0x0673('0x13')]);}logger[_0x0673('0x11')](_0x0673('0xe'),_0x2693ed,_0x5f26ed[_0x0673('0x11')][_0x0673('0x13')]);return _0x11dfc6(_0x5f26ed[_0x0673('0x11')][_0x0673('0x13')]);}else{logger[_0x0673('0xd')]('ZendeskConfiguration,\x20%s,\x20%s',_0x2693ed,_0x0673('0xf'));_0x11dfc6(_0x5f26ed['result'][_0x0673('0x13')]);}})[_0x0673('0x14')](function(_0xf6c652){logger[_0x0673('0x11')]('ZendeskConfiguration,\x20%s,\x20%s',_0x2693ed,_0xf6c652);_0x2daf51(_0xf6c652);});});}
\ No newline at end of file
+var _0xac11=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','then','ZendeskConfiguration,\x20%s,\x20%s','request\x20sent','debug','ZendeskConfiguration,\x20%s,\x20%s,\x20%s','error','code','message','info','result','catch','lodash','moment','bluebird','randomstring'];(function(_0x48d56c,_0x295121){var _0x587914=function(_0x4126b4){while(--_0x4126b4){_0x48d56c['push'](_0x48d56c['shift']());}};_0x587914(++_0x295121);}(_0xac11,0x110));var _0x1ac1=function(_0x3b76a3,_0x478309){_0x3b76a3=_0x3b76a3-0x0;var _0x1a8dfc=_0xac11[_0x3b76a3];return _0x1a8dfc;};'use strict';var _=require(_0x1ac1('0x0'));var util=require('util');var moment=require(_0x1ac1('0x1'));var BPromise=require(_0x1ac1('0x2'));var rs=require(_0x1ac1('0x3'));var fs=require('fs');var Redis=require(_0x1ac1('0x4'));var db=require(_0x1ac1('0x5'))['db'];var utils=require(_0x1ac1('0x6'));var logger=require(_0x1ac1('0x7'))(_0x1ac1('0x8'));var config=require(_0x1ac1('0x9'));var jayson=require(_0x1ac1('0xa'));var client=jayson[_0x1ac1('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5538bd,_0x469cc0,_0x132a1d){return new BPromise(function(_0x58ce32,_0x359949){return client['request'](_0x5538bd,_0x132a1d)[_0x1ac1('0xc')](function(_0x12bfd5){logger['info'](_0x1ac1('0xd'),_0x469cc0,_0x1ac1('0xe'));logger[_0x1ac1('0xf')](_0x1ac1('0x10'),_0x469cc0,_0x1ac1('0xe'),JSON['stringify'](_0x12bfd5));if(_0x12bfd5[_0x1ac1('0x11')]){if(_0x12bfd5[_0x1ac1('0x11')][_0x1ac1('0x12')]===0x1f4){logger[_0x1ac1('0x11')](_0x1ac1('0xd'),_0x469cc0,_0x12bfd5[_0x1ac1('0x11')][_0x1ac1('0x13')]);return _0x359949(_0x12bfd5['error'][_0x1ac1('0x13')]);}logger[_0x1ac1('0x11')](_0x1ac1('0xd'),_0x469cc0,_0x12bfd5[_0x1ac1('0x11')][_0x1ac1('0x13')]);return _0x58ce32(_0x12bfd5[_0x1ac1('0x11')][_0x1ac1('0x13')]);}else{logger[_0x1ac1('0x14')](_0x1ac1('0xd'),_0x469cc0,_0x1ac1('0xe'));_0x58ce32(_0x12bfd5[_0x1ac1('0x15')]['message']);}})[_0x1ac1('0x16')](function(_0x49aa50){logger[_0x1ac1('0x11')](_0x1ac1('0xd'),_0x469cc0,_0x49aa50);_0x359949(_0x49aa50);});});}
\ No newline at end of file
index e80a695..8556911 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','post','put','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service'];(function(_0x14fb0b,_0x3ee729){var _0x295e2c=function(_0x2da61e){while(--_0x2da61e){_0x14fb0b['push'](_0x14fb0b['shift']());}};_0x295e2c(++_0x3ee729);}(_0x9957,0x93));var _0x7995=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x9957[_0x6c993a];return _0x27f547;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var timeout=require(_0x7995('0x3'));var express=require('express');var router=express[_0x7995('0x4')]();var auth=require(_0x7995('0x5'));var interaction=require(_0x7995('0x6'));var config=require(_0x7995('0x7'));var controller=require('./intZendeskField.controller');router[_0x7995('0x8')]('/',auth[_0x7995('0x9')](),controller[_0x7995('0xa')]);router[_0x7995('0x8')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['show']);router[_0x7995('0xc')]('/',auth[_0x7995('0x9')](),controller['create']);router[_0x7995('0xd')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller[_0x7995('0xe')]);router[_0x7995('0xf')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['destroy']);module[_0x7995('0x10')]=router;
\ No newline at end of file
+var _0x9957=['../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','post','put','update','delete','exports','multer','util','path','connect-timeout','Router','../../components/auth/service'];(function(_0x447cd0,_0x51662b){var _0x2fb660=function(_0x10c5fd){while(--_0x10c5fd){_0x447cd0['push'](_0x447cd0['shift']());}};_0x2fb660(++_0x51662b);}(_0x9957,0x93));var _0x7995=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x9957[_0x501510];return _0x1e6ee5;};'use strict';var multer=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var path=require(_0x7995('0x2'));var timeout=require(_0x7995('0x3'));var express=require('express');var router=express[_0x7995('0x4')]();var auth=require(_0x7995('0x5'));var interaction=require(_0x7995('0x6'));var config=require(_0x7995('0x7'));var controller=require('./intZendeskField.controller');router[_0x7995('0x8')]('/',auth[_0x7995('0x9')](),controller[_0x7995('0xa')]);router[_0x7995('0x8')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['show']);router[_0x7995('0xc')]('/',auth[_0x7995('0x9')](),controller['create']);router[_0x7995('0xd')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller[_0x7995('0xe')]);router[_0x7995('0xf')](_0x7995('0xb'),auth[_0x7995('0x9')](),controller['destroy']);module[_0x7995('0x10')]=router;
\ No newline at end of file
index ce18b17..1128ed4 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(_0x465a0c,_0x19d4d5){var _0x1e202e=function(_0x27bd8a){while(--_0x27bd8a){_0x465a0c['push'](_0x465a0c['shift']());}};_0x1e202e(++_0x19d4d5);}(_0x3c81,0x102));var _0x13c8=function(_0x136236,_0x1dc646){_0x136236=_0x136236-0x0;var _0x2038aa=_0x3c81[_0x136236];return _0x2038aa;};'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 _0x91a7=['STRING','exports','ENUM','string','customVariable'];(function(_0x3a3030,_0x142b7d){var _0x101b9d=function(_0xd6837d){while(--_0xd6837d){_0x3a3030['push'](_0x3a3030['shift']());}};_0x101b9d(++_0x142b7d);}(_0x91a7,0xe7));var _0x791a=function(_0x1ae0a1,_0x1358d7){_0x1ae0a1=_0x1ae0a1-0x0;var _0x4a1181=_0x91a7[_0x1ae0a1];return _0x4a1181;};'use strict';var Sequelize=require('sequelize');module[_0x791a('0x0')]={'type':{'type':Sequelize[_0x791a('0x1')](_0x791a('0x2'),'variable',_0x791a('0x3'),'keyValue'),'defaultValue':_0x791a('0x2')},'content':{'type':Sequelize['STRING']},'key':{'type':Sequelize['STRING']},'keyType':{'type':Sequelize[_0x791a('0x1')](_0x791a('0x2'),'variable',_0x791a('0x3'))},'keyContent':{'type':Sequelize['STRING']},'idField':{'type':Sequelize[_0x791a('0x4')]},'nameField':{'type':Sequelize[_0x791a('0x4')]},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize[_0x791a('0x4')]}};
\ No newline at end of file
index ee5084d..48a0ca4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4740=['where','filters','pick','filter','map','key','VIRTUAL','field','merge','options','includeAll','rows','catch','params','include','find','create','body','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','set','Content-Range','json','reject','save','update','then','destroy','stack','name','send','index','ZendeskField','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','order','sort'];(function(_0x3ab99a,_0x3ce898){var _0x454822=function(_0x11e3ef){while(--_0x11e3ef){_0x3ab99a['push'](_0x3ab99a['shift']());}};_0x454822(++_0x3ce898);}(_0x4740,0x132));var _0x0474=function(_0x39716d,_0x4c1771){_0x39716d=_0x39716d-0x0;var _0x4dab42=_0x4740[_0x39716d];return _0x4dab42;};'use strict';var pdf=require(_0x0474('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x0474('0x1'));var zipdir=require(_0x0474('0x2'));var jsonpatch=require(_0x0474('0x3'));var rp=require(_0x0474('0x4'));var moment=require('moment');var BPromise=require(_0x0474('0x5'));var Mustache=require(_0x0474('0x6'));var util=require('util');var path=require(_0x0474('0x7'));var sox=require(_0x0474('0x8'));var csv=require('to-csv');var ejs=require(_0x0474('0x9'));var fs=require('fs');var _=require(_0x0474('0xa'));var squel=require(_0x0474('0xb'));var crypto=require(_0x0474('0xc'));var jsforce=require(_0x0474('0xd'));var deskjs=require(_0x0474('0xe'));var toCsv=require('to-csv');var querystring=require(_0x0474('0xf'));var Papa=require('papaparse');var authService=require(_0x0474('0x10'));var hardwareService=require(_0x0474('0x11'));var Redis=require(_0x0474('0x12'));var qs=require(_0x0474('0x13'));var logger=require('../../config/logger')(_0x0474('0x14'));var utils=require(_0x0474('0x15'));var config=require(_0x0474('0x16'));var db=require(_0x0474('0x17'))['db'];function respondWithStatusCode(_0x11b2e9,_0x1ae0a1){_0x1ae0a1=_0x1ae0a1||0xcc;return function(_0x1aaf42){if(_0x1aaf42){return _0x11b2e9[_0x0474('0x18')](_0x1ae0a1);}return _0x11b2e9[_0x0474('0x19')](_0x1ae0a1)[_0x0474('0x1a')]();};}function respondWithResult(_0x1bc81f,_0x335b2e){_0x335b2e=_0x335b2e||0xc8;return function(_0x3f1c47){if(_0x3f1c47){return _0x1bc81f[_0x0474('0x19')](_0x335b2e)['json'](_0x3f1c47);}};}function respondWithFilteredResult(_0x76a9a1,_0xbe48c){return function(_0x74df86){if(_0x74df86){var _0x19a6c4=_0x74df86[_0x0474('0x1b')],_0x2de7ac=_0xbe48c[_0x0474('0x1c')],_0x43a7b8=_0xbe48c['offset']+_0xbe48c[_0x0474('0x1d')],_0x4d0d3b;if(_0x43a7b8>=_0x19a6c4){_0x43a7b8=_0x19a6c4;_0x4d0d3b=0xc8;}else{_0x4d0d3b=0xce;}_0x76a9a1[_0x0474('0x19')](_0x4d0d3b);return _0x76a9a1[_0x0474('0x1e')](_0x0474('0x1f'),_0x2de7ac+'-'+_0x43a7b8+'/'+_0x19a6c4)[_0x0474('0x20')](_0x74df86);}return null;};}function patchUpdates(_0x298fc1){return function(_0x15c737){try{jsonpatch['apply'](_0x15c737,_0x298fc1,!![]);}catch(_0x55d8aa){return BPromise[_0x0474('0x21')](_0x55d8aa);}return _0x15c737[_0x0474('0x22')]();};}function saveUpdates(_0x57d90e,_0x42798a){return function(_0x375916){if(_0x375916){return _0x375916[_0x0474('0x23')](_0x57d90e)[_0x0474('0x24')](function(_0x480e38){return _0x480e38;});}return null;};}function removeEntity(_0x509d2f,_0x18b85c){return function(_0x5e9a93){if(_0x5e9a93){return _0x5e9a93[_0x0474('0x25')]()[_0x0474('0x24')](function(){_0x509d2f['status'](0xcc)[_0x0474('0x1a')]();});}};}function handleEntityNotFound(_0x516d16,_0x6b738b){return function(_0x3a6471){if(!_0x3a6471){_0x516d16[_0x0474('0x18')](0x194);}return _0x3a6471;};}function handleError(_0x50f2af,_0x5f0005){_0x5f0005=_0x5f0005||0x1f4;return function(_0x276dc8){logger['error'](_0x276dc8[_0x0474('0x26')]);if(_0x276dc8['name']){delete _0x276dc8[_0x0474('0x27')];}_0x50f2af['status'](_0x5f0005)[_0x0474('0x28')](_0x276dc8);};}exports[_0x0474('0x29')]=function(_0x580afb,_0x2a6dc5){var _0x2170b2={},_0x5129cf={},_0x5f1946={'count':0x0,'rows':[]};var _0x589ba7=db[_0x0474('0x2a')][_0x0474('0x2b')];_0x5129cf[_0x0474('0x2c')]=_[_0x0474('0x2d')](_0x589ba7);_0x5129cf[_0x0474('0x2e')]=_['keys'](_0x580afb[_0x0474('0x2e')]);_0x5129cf['filters']=_[_0x0474('0x2f')](_0x5129cf['model'],_0x5129cf[_0x0474('0x2e')]);_0x2170b2[_0x0474('0x30')]=_[_0x0474('0x2f')](_0x5129cf[_0x0474('0x2c')],qs[_0x0474('0x31')](_0x580afb[_0x0474('0x2e')]['fields']));_0x2170b2[_0x0474('0x30')]=_0x2170b2[_0x0474('0x30')][_0x0474('0x32')]?_0x2170b2[_0x0474('0x30')]:_0x5129cf[_0x0474('0x2c')];if(!_0x580afb[_0x0474('0x2e')]['hasOwnProperty'](_0x0474('0x33'))){_0x2170b2[_0x0474('0x1d')]=qs['limit'](_0x580afb['query'][_0x0474('0x1d')]);_0x2170b2[_0x0474('0x1c')]=qs[_0x0474('0x1c')](_0x580afb[_0x0474('0x2e')][_0x0474('0x1c')]);}_0x2170b2[_0x0474('0x34')]=qs[_0x0474('0x35')](_0x580afb[_0x0474('0x2e')][_0x0474('0x35')]);_0x2170b2[_0x0474('0x36')]=qs[_0x0474('0x37')](_[_0x0474('0x38')](_0x580afb['query'],_0x5129cf[_0x0474('0x37')]));if(_0x580afb[_0x0474('0x2e')][_0x0474('0x39')]){_0x2170b2[_0x0474('0x36')]=_['merge'](_0x2170b2['where'],{'$or':_[_0x0474('0x3a')](_0x589ba7,function(_0x9ae384){if(_0x9ae384['type'][_0x0474('0x3b')]!==_0x0474('0x3c')){var _0x312168={};_0x312168[_0x9ae384[_0x0474('0x3d')]]={'$like':'%'+_0x580afb[_0x0474('0x2e')][_0x0474('0x39')]+'%'};return _0x312168;}})});}_0x2170b2=_[_0x0474('0x3e')]({},_0x2170b2,_0x580afb[_0x0474('0x3f')]);var _0x3386e2={'where':_0x2170b2['where']};return db[_0x0474('0x2a')][_0x0474('0x1b')](_0x3386e2)[_0x0474('0x24')](function(_0x1f1040){_0x5f1946[_0x0474('0x1b')]=_0x1f1040;if(_0x580afb[_0x0474('0x2e')][_0x0474('0x40')]){_0x2170b2['include']=[{'all':!![]}];}return db['ZendeskField']['findAll'](_0x2170b2);})[_0x0474('0x24')](function(_0x1ba18a){_0x5f1946[_0x0474('0x41')]=_0x1ba18a;return _0x5f1946;})['then'](respondWithFilteredResult(_0x2a6dc5,_0x2170b2))[_0x0474('0x42')](handleError(_0x2a6dc5,null));};exports['show']=function(_0x4b802d,_0x4699d9){var _0x58cc44={'raw':!![],'where':{'id':_0x4b802d[_0x0474('0x43')]['id']}},_0x543456={};_0x543456[_0x0474('0x2c')]=_[_0x0474('0x2d')](db[_0x0474('0x2a')]['rawAttributes']);_0x543456[_0x0474('0x2e')]=_[_0x0474('0x2d')](_0x4b802d[_0x0474('0x2e')]);_0x543456[_0x0474('0x37')]=_['intersection'](_0x543456[_0x0474('0x2c')],_0x543456['query']);_0x58cc44[_0x0474('0x30')]=_[_0x0474('0x2f')](_0x543456['model'],qs[_0x0474('0x31')](_0x4b802d[_0x0474('0x2e')][_0x0474('0x31')]));_0x58cc44['attributes']=_0x58cc44[_0x0474('0x30')][_0x0474('0x32')]?_0x58cc44[_0x0474('0x30')]:_0x543456[_0x0474('0x2c')];if(_0x4b802d['query'][_0x0474('0x40')]){_0x58cc44[_0x0474('0x44')]=[{'all':!![]}];}_0x58cc44=_['merge']({},_0x58cc44,_0x4b802d[_0x0474('0x3f')]);return db[_0x0474('0x2a')][_0x0474('0x45')](_0x58cc44)['then'](handleEntityNotFound(_0x4699d9,null))[_0x0474('0x24')](respondWithResult(_0x4699d9,null))['catch'](handleError(_0x4699d9,null));};exports[_0x0474('0x46')]=function(_0x181cbb,_0x1412d8){return db[_0x0474('0x2a')]['create'](_0x181cbb[_0x0474('0x47')],{})[_0x0474('0x24')](respondWithResult(_0x1412d8,0xc9))[_0x0474('0x42')](handleError(_0x1412d8,null));};exports[_0x0474('0x23')]=function(_0x276035,_0x48d7f1){if(_0x276035[_0x0474('0x47')]['id']){delete _0x276035[_0x0474('0x47')]['id'];}return db[_0x0474('0x2a')][_0x0474('0x45')]({'where':{'id':_0x276035[_0x0474('0x43')]['id']}})[_0x0474('0x24')](handleEntityNotFound(_0x48d7f1,null))['then'](saveUpdates(_0x276035[_0x0474('0x47')],null))[_0x0474('0x24')](respondWithResult(_0x48d7f1,null))[_0x0474('0x42')](handleError(_0x48d7f1,null));};exports['destroy']=function(_0x24fe6a,_0x30726c){return db['ZendeskField'][_0x0474('0x45')]({'where':{'id':_0x24fe6a['params']['id']}})['then'](handleEntityNotFound(_0x30726c,null))[_0x0474('0x24')](removeEntity(_0x30726c,null))[_0x0474('0x42')](handleError(_0x30726c,null));};
\ No newline at end of file
+var _0x74b6=['../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','offset','limit','json','save','update','destroy','then','stack','send','model','keys','query','filters','attributes','fields','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','type','VIRTUAL','field','options','ZendeskField','count','includeAll','include','findAll','rows','catch','show','params','rawAttributes','intersection','create','body','find','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs'];(function(_0x48c2ae,_0x4cea90){var _0x8f7531=function(_0x126458){while(--_0x126458){_0x48c2ae['push'](_0x48c2ae['shift']());}};_0x8f7531(++_0x4cea90);}(_0x74b6,0x156));var _0x674b=function(_0x595996,_0x3bc21f){_0x595996=_0x595996-0x0;var _0x46d2d5=_0x74b6[_0x595996];return _0x46d2d5;};'use strict';var pdf=require(_0x674b('0x0'));var emlformat=require(_0x674b('0x1'));var rimraf=require(_0x674b('0x2'));var zipdir=require(_0x674b('0x3'));var jsonpatch=require(_0x674b('0x4'));var rp=require(_0x674b('0x5'));var moment=require(_0x674b('0x6'));var BPromise=require(_0x674b('0x7'));var Mustache=require(_0x674b('0x8'));var util=require(_0x674b('0x9'));var path=require(_0x674b('0xa'));var sox=require('sox');var csv=require(_0x674b('0xb'));var ejs=require(_0x674b('0xc'));var fs=require('fs');var _=require(_0x674b('0xd'));var squel=require(_0x674b('0xe'));var crypto=require(_0x674b('0xf'));var jsforce=require('jsforce');var deskjs=require(_0x674b('0x10'));var toCsv=require(_0x674b('0xb'));var querystring=require(_0x674b('0x11'));var Papa=require(_0x674b('0x12'));var authService=require(_0x674b('0x13'));var hardwareService=require(_0x674b('0x14'));var Redis=require(_0x674b('0x15'));var qs=require(_0x674b('0x16'));var logger=require(_0x674b('0x17'))(_0x674b('0x18'));var utils=require(_0x674b('0x19'));var config=require(_0x674b('0x1a'));var db=require(_0x674b('0x1b'))['db'];function respondWithStatusCode(_0x18693c,_0x511a17){_0x511a17=_0x511a17||0xcc;return function(_0x188caa){if(_0x188caa){return _0x18693c[_0x674b('0x1c')](_0x511a17);}return _0x18693c[_0x674b('0x1d')](_0x511a17)[_0x674b('0x1e')]();};}function respondWithResult(_0x5bef36,_0x21eded){_0x21eded=_0x21eded||0xc8;return function(_0x3b5893){if(_0x3b5893){return _0x5bef36[_0x674b('0x1d')](_0x21eded)['json'](_0x3b5893);}};}function respondWithFilteredResult(_0x1bef10,_0x5a969c){return function(_0x6b68a7){if(_0x6b68a7){var _0x12c743=_0x6b68a7['count'],_0x57192e=_0x5a969c[_0x674b('0x1f')],_0x514cf1=_0x5a969c['offset']+_0x5a969c[_0x674b('0x20')],_0x1cc062;if(_0x514cf1>=_0x12c743){_0x514cf1=_0x12c743;_0x1cc062=0xc8;}else{_0x1cc062=0xce;}_0x1bef10[_0x674b('0x1d')](_0x1cc062);return _0x1bef10['set']('Content-Range',_0x57192e+'-'+_0x514cf1+'/'+_0x12c743)[_0x674b('0x21')](_0x6b68a7);}return null;};}function patchUpdates(_0x424e2f){return function(_0x60315c){try{jsonpatch['apply'](_0x60315c,_0x424e2f,!![]);}catch(_0x1ecc48){return BPromise['reject'](_0x1ecc48);}return _0x60315c[_0x674b('0x22')]();};}function saveUpdates(_0x59c83a,_0x50b5ed){return function(_0x484bae){if(_0x484bae){return _0x484bae[_0x674b('0x23')](_0x59c83a)['then'](function(_0x40ea01){return _0x40ea01;});}return null;};}function removeEntity(_0x2a38cc,_0x30d24b){return function(_0x56ca0b){if(_0x56ca0b){return _0x56ca0b[_0x674b('0x24')]()[_0x674b('0x25')](function(){_0x2a38cc[_0x674b('0x1d')](0xcc)[_0x674b('0x1e')]();});}};}function handleEntityNotFound(_0x130a57,_0x559f10){return function(_0x4b73e6){if(!_0x4b73e6){_0x130a57[_0x674b('0x1c')](0x194);}return _0x4b73e6;};}function handleError(_0x11306c,_0x3564ef){_0x3564ef=_0x3564ef||0x1f4;return function(_0x507859){logger['error'](_0x507859[_0x674b('0x26')]);if(_0x507859['name']){delete _0x507859['name'];}_0x11306c[_0x674b('0x1d')](_0x3564ef)[_0x674b('0x27')](_0x507859);};}exports['index']=function(_0x255610,_0x30d739){var _0x29a0ad={},_0x4e1b5f={},_0x48bca7={'count':0x0,'rows':[]};var _0x2f2888=db['ZendeskField']['rawAttributes'];_0x4e1b5f[_0x674b('0x28')]=_[_0x674b('0x29')](_0x2f2888);_0x4e1b5f['query']=_['keys'](_0x255610[_0x674b('0x2a')]);_0x4e1b5f[_0x674b('0x2b')]=_['intersection'](_0x4e1b5f['model'],_0x4e1b5f[_0x674b('0x2a')]);_0x29a0ad[_0x674b('0x2c')]=_['intersection'](_0x4e1b5f[_0x674b('0x28')],qs[_0x674b('0x2d')](_0x255610[_0x674b('0x2a')]['fields']));_0x29a0ad[_0x674b('0x2c')]=_0x29a0ad[_0x674b('0x2c')]['length']?_0x29a0ad[_0x674b('0x2c')]:_0x4e1b5f[_0x674b('0x28')];if(!_0x255610['query'][_0x674b('0x2e')](_0x674b('0x2f'))){_0x29a0ad[_0x674b('0x20')]=qs['limit'](_0x255610[_0x674b('0x2a')][_0x674b('0x20')]);_0x29a0ad[_0x674b('0x1f')]=qs[_0x674b('0x1f')](_0x255610[_0x674b('0x2a')][_0x674b('0x1f')]);}_0x29a0ad[_0x674b('0x30')]=qs[_0x674b('0x31')](_0x255610['query'][_0x674b('0x31')]);_0x29a0ad['where']=qs[_0x674b('0x2b')](_[_0x674b('0x32')](_0x255610[_0x674b('0x2a')],_0x4e1b5f[_0x674b('0x2b')]));if(_0x255610[_0x674b('0x2a')][_0x674b('0x33')]){_0x29a0ad[_0x674b('0x34')]=_[_0x674b('0x35')](_0x29a0ad[_0x674b('0x34')],{'$or':_[_0x674b('0x36')](_0x2f2888,function(_0xbcfc21){if(_0xbcfc21[_0x674b('0x37')]['key']!==_0x674b('0x38')){var _0x33ab73={};_0x33ab73[_0xbcfc21[_0x674b('0x39')]]={'$like':'%'+_0x255610[_0x674b('0x2a')][_0x674b('0x33')]+'%'};return _0x33ab73;}})});}_0x29a0ad=_[_0x674b('0x35')]({},_0x29a0ad,_0x255610[_0x674b('0x3a')]);var _0x21bb77={'where':_0x29a0ad[_0x674b('0x34')]};return db[_0x674b('0x3b')][_0x674b('0x3c')](_0x21bb77)['then'](function(_0x3baa5d){_0x48bca7[_0x674b('0x3c')]=_0x3baa5d;if(_0x255610[_0x674b('0x2a')][_0x674b('0x3d')]){_0x29a0ad[_0x674b('0x3e')]=[{'all':!![]}];}return db[_0x674b('0x3b')][_0x674b('0x3f')](_0x29a0ad);})[_0x674b('0x25')](function(_0x1e0e55){_0x48bca7[_0x674b('0x40')]=_0x1e0e55;return _0x48bca7;})[_0x674b('0x25')](respondWithFilteredResult(_0x30d739,_0x29a0ad))[_0x674b('0x41')](handleError(_0x30d739,null));};exports[_0x674b('0x42')]=function(_0xdc9916,_0x1dc9c0){var _0x32b2d1={'raw':!![],'where':{'id':_0xdc9916[_0x674b('0x43')]['id']}},_0xab1008={};_0xab1008[_0x674b('0x28')]=_[_0x674b('0x29')](db[_0x674b('0x3b')][_0x674b('0x44')]);_0xab1008[_0x674b('0x2a')]=_[_0x674b('0x29')](_0xdc9916['query']);_0xab1008[_0x674b('0x2b')]=_[_0x674b('0x45')](_0xab1008[_0x674b('0x28')],_0xab1008[_0x674b('0x2a')]);_0x32b2d1['attributes']=_[_0x674b('0x45')](_0xab1008['model'],qs[_0x674b('0x2d')](_0xdc9916[_0x674b('0x2a')][_0x674b('0x2d')]));_0x32b2d1[_0x674b('0x2c')]=_0x32b2d1['attributes']['length']?_0x32b2d1['attributes']:_0xab1008[_0x674b('0x28')];if(_0xdc9916[_0x674b('0x2a')][_0x674b('0x3d')]){_0x32b2d1[_0x674b('0x3e')]=[{'all':!![]}];}_0x32b2d1=_[_0x674b('0x35')]({},_0x32b2d1,_0xdc9916[_0x674b('0x3a')]);return db[_0x674b('0x3b')]['find'](_0x32b2d1)[_0x674b('0x25')](handleEntityNotFound(_0x1dc9c0,null))['then'](respondWithResult(_0x1dc9c0,null))[_0x674b('0x41')](handleError(_0x1dc9c0,null));};exports['create']=function(_0x40a1d6,_0x4f4325){return db[_0x674b('0x3b')][_0x674b('0x46')](_0x40a1d6['body'],{})[_0x674b('0x25')](respondWithResult(_0x4f4325,0xc9))[_0x674b('0x41')](handleError(_0x4f4325,null));};exports['update']=function(_0x22e095,_0x33ba4e){if(_0x22e095[_0x674b('0x47')]['id']){delete _0x22e095['body']['id'];}return db[_0x674b('0x3b')]['find']({'where':{'id':_0x22e095[_0x674b('0x43')]['id']}})[_0x674b('0x25')](handleEntityNotFound(_0x33ba4e,null))[_0x674b('0x25')](saveUpdates(_0x22e095[_0x674b('0x47')],null))[_0x674b('0x25')](respondWithResult(_0x33ba4e,null))[_0x674b('0x41')](handleError(_0x33ba4e,null));};exports['destroy']=function(_0x35ec1f,_0x32d7ef){return db[_0x674b('0x3b')][_0x674b('0x48')]({'where':{'id':_0x35ec1f[_0x674b('0x43')]['id']}})[_0x674b('0x25')](handleEntityNotFound(_0x32d7ef,null))[_0x674b('0x25')](removeEntity(_0x32d7ef,null))[_0x674b('0x41')](handleError(_0x32d7ef,null));};
\ No newline at end of file
index 9c0aca7..bd6cf8d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8e3f=['FieldId','lodash','util','../../config/logger','moment','bluebird','request-promise','exports','define','ZendeskField','int_zendesk_fields','zendesk_unique_index'];(function(_0xa92b0d,_0x140ac2){var _0x5d1660=function(_0x3af2b1){while(--_0x3af2b1){_0xa92b0d['push'](_0xa92b0d['shift']());}};_0x5d1660(++_0x140ac2);}(_0x8e3f,0xc1));var _0xf8e3=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0x8e3f[_0x4565bf];return _0x5610ba;};'use strict';var _=require(_0xf8e3('0x0'));var util=require(_0xf8e3('0x1'));var logger=require(_0xf8e3('0x2'))('api');var moment=require(_0xf8e3('0x3'));var BPromise=require(_0xf8e3('0x4'));var rp=require(_0xf8e3('0x5'));var attributes=require('./intZendeskField.attributes');module[_0xf8e3('0x6')]=function(_0x41bc05,_0x4dab56){return _0x41bc05[_0xf8e3('0x7')](_0xf8e3('0x8'),attributes,{'tableName':_0xf8e3('0x9'),'paranoid':![],'indexes':[{'name':_0xf8e3('0xa'),'fields':['idField',_0xf8e3('0xb')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x8f4c=['bluebird','./intZendeskField.attributes','exports','define','idField','lodash','util','../../config/logger','api','moment'];(function(_0x18e9a7,_0x2c041d){var _0x3a09d4=function(_0x119f43){while(--_0x119f43){_0x18e9a7['push'](_0x18e9a7['shift']());}};_0x3a09d4(++_0x2c041d);}(_0x8f4c,0x113));var _0xc8f4=function(_0x3a5b9f,_0x599f46){_0x3a5b9f=_0x3a5b9f-0x0;var _0x4e9b72=_0x8f4c[_0x3a5b9f];return _0x4e9b72;};'use strict';var _=require(_0xc8f4('0x0'));var util=require(_0xc8f4('0x1'));var logger=require(_0xc8f4('0x2'))(_0xc8f4('0x3'));var moment=require(_0xc8f4('0x4'));var BPromise=require(_0xc8f4('0x5'));var rp=require('request-promise');var attributes=require(_0xc8f4('0x6'));module[_0xc8f4('0x7')]=function(_0x133764,_0x56c9b1){return _0x133764[_0xc8f4('0x8')]('ZendeskField',attributes,{'tableName':'int_zendesk_fields','paranoid':![],'indexes':[{'name':'zendesk_unique_index','fields':[_0xc8f4('0x9'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 10c82e5..209c337 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe130=['ZendeskField,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','request','info'];(function(_0xf3d909,_0xb9e263){var _0x24bab6=function(_0x4aea4f){while(--_0x4aea4f){_0xf3d909['push'](_0xf3d909['shift']());}};_0x24bab6(++_0xb9e263);}(_0xe130,0x127));var _0x0e13=function(_0x1b5e58,_0x243bdb){_0x1b5e58=_0x1b5e58-0x0;var _0x146437=_0xe130[_0x1b5e58];return _0x146437;};'use strict';var _=require(_0x0e13('0x0'));var util=require(_0x0e13('0x1'));var moment=require('moment');var BPromise=require(_0x0e13('0x2'));var rs=require(_0x0e13('0x3'));var fs=require('fs');var Redis=require(_0x0e13('0x4'));var db=require(_0x0e13('0x5'))['db'];var utils=require(_0x0e13('0x6'));var logger=require('../../config/logger')(_0x0e13('0x7'));var config=require(_0x0e13('0x8'));var jayson=require(_0x0e13('0x9'));var client=jayson[_0x0e13('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x1774a5,_0x5f0d09,_0x567031){return new BPromise(function(_0x5aaa22,_0x2faf49){return client[_0x0e13('0xb')](_0x1774a5,_0x567031)['then'](function(_0x5d066a){logger[_0x0e13('0xc')](_0x0e13('0xd'),_0x5f0d09,_0x0e13('0xe'));logger[_0x0e13('0xf')]('ZendeskField,\x20%s,\x20%s,\x20%s',_0x5f0d09,'request\x20sent',JSON[_0x0e13('0x10')](_0x5d066a));if(_0x5d066a[_0x0e13('0x11')]){if(_0x5d066a[_0x0e13('0x11')][_0x0e13('0x12')]===0x1f4){logger['error'](_0x0e13('0xd'),_0x5f0d09,_0x5d066a['error'][_0x0e13('0x13')]);return _0x2faf49(_0x5d066a[_0x0e13('0x11')][_0x0e13('0x13')]);}logger[_0x0e13('0x11')](_0x0e13('0xd'),_0x5f0d09,_0x5d066a[_0x0e13('0x11')][_0x0e13('0x13')]);return _0x5aaa22(_0x5d066a[_0x0e13('0x11')][_0x0e13('0x13')]);}else{logger['info'](_0x0e13('0xd'),_0x5f0d09,_0x0e13('0xe'));_0x5aaa22(_0x5d066a[_0x0e13('0x14')][_0x0e13('0x13')]);}})[_0x0e13('0x15')](function(_0x32f76a){logger['error'](_0x0e13('0xd'),_0x5f0d09,_0x32f76a);_0x2faf49(_0x32f76a);});});}
\ No newline at end of file
+var _0x6cb4=['message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','request','info','request\x20sent','debug','stringify','error','ZendeskField,\x20%s,\x20%s'];(function(_0x1ed975,_0xc5d4d9){var _0x5605d4=function(_0x10752b){while(--_0x10752b){_0x1ed975['push'](_0x1ed975['shift']());}};_0x5605d4(++_0xc5d4d9);}(_0x6cb4,0xff));var _0x46cb=function(_0x2921e3,_0x3db8b9){_0x2921e3=_0x2921e3-0x0;var _0xcbd89c=_0x6cb4[_0x2921e3];return _0xcbd89c;};'use strict';var _=require(_0x46cb('0x0'));var util=require(_0x46cb('0x1'));var moment=require(_0x46cb('0x2'));var BPromise=require(_0x46cb('0x3'));var rs=require(_0x46cb('0x4'));var fs=require('fs');var Redis=require(_0x46cb('0x5'));var db=require(_0x46cb('0x6'))['db'];var utils=require(_0x46cb('0x7'));var logger=require(_0x46cb('0x8'))('rpc');var config=require(_0x46cb('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x46cb('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x11262d,_0x148d0f,_0x31b35b){return new BPromise(function(_0x2d6c29,_0x24b4f5){return client[_0x46cb('0xb')](_0x11262d,_0x31b35b)['then'](function(_0x3d7663){logger[_0x46cb('0xc')]('ZendeskField,\x20%s,\x20%s',_0x148d0f,_0x46cb('0xd'));logger[_0x46cb('0xe')]('ZendeskField,\x20%s,\x20%s,\x20%s',_0x148d0f,_0x46cb('0xd'),JSON[_0x46cb('0xf')](_0x3d7663));if(_0x3d7663['error']){if(_0x3d7663['error']['code']===0x1f4){logger[_0x46cb('0x10')](_0x46cb('0x11'),_0x148d0f,_0x3d7663[_0x46cb('0x10')][_0x46cb('0x12')]);return _0x24b4f5(_0x3d7663['error'][_0x46cb('0x12')]);}logger[_0x46cb('0x10')](_0x46cb('0x11'),_0x148d0f,_0x3d7663[_0x46cb('0x10')][_0x46cb('0x12')]);return _0x2d6c29(_0x3d7663[_0x46cb('0x10')][_0x46cb('0x12')]);}else{logger[_0x46cb('0xc')](_0x46cb('0x11'),_0x148d0f,_0x46cb('0xd'));_0x2d6c29(_0x3d7663[_0x46cb('0x13')]['message']);}})[_0x46cb('0x14')](function(_0x5796d2){logger[_0x46cb('0x10')]('ZendeskField,\x20%s,\x20%s',_0x148d0f,_0x5796d2);_0x24b4f5(_0x5796d2);});});}
\ No newline at end of file
index 35e801e..e5361ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7916=['delete','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','isAuthenticated','getConfigurations','getFields','post','create','/:id/configurations','addConfiguration','put','/:id','update'];(function(_0x36f47c,_0x38ef4d){var _0x296c55=function(_0x403eec){while(--_0x403eec){_0x36f47c['push'](_0x36f47c['shift']());}};_0x296c55(++_0x38ef4d);}(_0x7916,0x128));var _0x6791=function(_0x29567a,_0x7fee7d){_0x29567a=_0x29567a-0x0;var _0xd06de9=_0x7916[_0x29567a];return _0xd06de9;};'use strict';var multer=require(_0x6791('0x0'));var util=require('util');var path=require(_0x6791('0x1'));var timeout=require(_0x6791('0x2'));var express=require('express');var router=express[_0x6791('0x3')]();var auth=require(_0x6791('0x4'));var interaction=require(_0x6791('0x5'));var config=require(_0x6791('0x6'));var controller=require('./intZohoAccount.controller');router[_0x6791('0x7')]('/',auth['isAuthenticated'](),controller[_0x6791('0x8')]);router[_0x6791('0x7')]('/:id',auth[_0x6791('0x9')](),controller['show']);router[_0x6791('0x7')]('/:id/configurations',auth['isAuthenticated'](),controller[_0x6791('0xa')]);router[_0x6791('0x7')]('/:id/fields',auth[_0x6791('0x9')](),controller[_0x6791('0xb')]);router[_0x6791('0xc')]('/',auth['isAuthenticated'](),controller[_0x6791('0xd')]);router[_0x6791('0xc')](_0x6791('0xe'),auth[_0x6791('0x9')](),controller[_0x6791('0xf')]);router[_0x6791('0x10')](_0x6791('0x11'),auth[_0x6791('0x9')](),controller[_0x6791('0x12')]);router[_0x6791('0x13')](_0x6791('0x11'),auth['isAuthenticated'](),controller['destroy']);module[_0x6791('0x14')]=router;
\ No newline at end of file
+var _0xa571=['/:id','show','/:id/configurations','getConfigurations','/:id/fields','getFields','post','create','put','delete','destroy','multer','util','path','connect-timeout','Router','../../components/auth/service','./intZohoAccount.controller','isAuthenticated','index','get'];(function(_0x1f7796,_0x10c674){var _0x24bea1=function(_0x4d3389){while(--_0x4d3389){_0x1f7796['push'](_0x1f7796['shift']());}};_0x24bea1(++_0x10c674);}(_0xa571,0x107));var _0x1a57=function(_0x3d6591,_0x3f0085){_0x3d6591=_0x3d6591-0x0;var _0x57e3ea=_0xa571[_0x3d6591];return _0x57e3ea;};'use strict';var multer=require(_0x1a57('0x0'));var util=require(_0x1a57('0x1'));var path=require(_0x1a57('0x2'));var timeout=require(_0x1a57('0x3'));var express=require('express');var router=express[_0x1a57('0x4')]();var auth=require(_0x1a57('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x1a57('0x6'));router['get']('/',auth[_0x1a57('0x7')](),controller[_0x1a57('0x8')]);router[_0x1a57('0x9')](_0x1a57('0xa'),auth[_0x1a57('0x7')](),controller[_0x1a57('0xb')]);router['get'](_0x1a57('0xc'),auth[_0x1a57('0x7')](),controller[_0x1a57('0xd')]);router['get'](_0x1a57('0xe'),auth[_0x1a57('0x7')](),controller[_0x1a57('0xf')]);router[_0x1a57('0x10')]('/',auth[_0x1a57('0x7')](),controller[_0x1a57('0x11')]);router[_0x1a57('0x10')](_0x1a57('0xc'),auth['isAuthenticated'](),controller['addConfiguration']);router[_0x1a57('0x12')](_0x1a57('0xa'),auth[_0x1a57('0x7')](),controller['update']);router[_0x1a57('0x13')](_0x1a57('0xa'),auth['isAuthenticated'](),controller[_0x1a57('0x14')]);module['exports']=router;
\ No newline at end of file
index 99e9726..b5ac414 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x05bb=['sequelize','exports','STRING'];(function(_0x46759d,_0x13e994){var _0x3e7fe0=function(_0x2f427d){while(--_0x2f427d){_0x46759d['push'](_0x46759d['shift']());}};_0x3e7fe0(++_0x13e994);}(_0x05bb,0x174));var _0xb05b=function(_0x3e4a27,_0xbb278){_0x3e4a27=_0x3e4a27-0x0;var _0x1c58f4=_0x05bb[_0x3e4a27];return _0x1c58f4;};'use strict';var Sequelize=require(_0xb05b('0x0'));module[_0xb05b('0x1')]={'name':{'type':Sequelize[_0xb05b('0x2')]},'description':{'type':Sequelize[_0xb05b('0x2')]},'authToken':{'type':Sequelize[_0xb05b('0x2')]},'host':{'type':Sequelize[_0xb05b('0x2')]},'serverUrl':{'type':Sequelize[_0xb05b('0x2')]}};
\ No newline at end of file
+var _0xde42=['STRING','sequelize','exports'];(function(_0x590f0e,_0x349d00){var _0x3b5bac=function(_0x31a693){while(--_0x31a693){_0x590f0e['push'](_0x590f0e['shift']());}};_0x3b5bac(++_0x349d00);}(_0xde42,0x6d));var _0x2de4=function(_0x541260,_0x4c7f2e){_0x541260=_0x541260-0x0;var _0x1dd2b5=_0xde42[_0x541260];return _0x1dd2b5;};'use strict';var Sequelize=require(_0x2de4('0x0'));module[_0x2de4('0x1')]={'name':{'type':Sequelize[_0x2de4('0x2')]},'description':{'type':Sequelize[_0x2de4('0x2')]},'authToken':{'type':Sequelize['STRING']},'host':{'type':Sequelize['STRING']},'serverUrl':{'type':Sequelize[_0x2de4('0x2')]}};
\ No newline at end of file
index bc853cd..d45c33b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0eab=['fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','../../components/integrations/configuration','jayson/promise','client','http','request','then','info','ZohoAccount,\x20%s,\x20%s','request\x20sent','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','status','count','offset','set','Content-Range','json','apply','reject','save','destroy','end','name','send','index','ZohoAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','type','key','field','options','findAll','rows','catch','show','params','length','includeAll','include','find','create','body','update','getConfigurations','ZohoConfiguration','addConfiguration','findOne','Subjects','getSubjects','channel','Descriptions','getDescriptions','host','slice','lastIndexOf','format','https://crm.%s/crm/private/json/Calls/getFields','authToken','crmapi','response','Calls','section','includes','push','label','customfield','Pick\x20List','val','test','statusCode','getFields','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir'];(function(_0x213e80,_0x1d8901){var _0x277955=function(_0x1d2547){while(--_0x1d2547){_0x213e80['push'](_0x213e80['shift']());}};_0x277955(++_0x1d8901);}(_0x0eab,0x1d4));var _0xb0ea=function(_0x2bc947,_0x31677c){_0x2bc947=_0x2bc947-0x0;var _0x2e9ac6=_0x0eab[_0x2bc947];return _0x2e9ac6;};'use strict';var pdf=require(_0xb0ea('0x0'));var emlformat=require(_0xb0ea('0x1'));var rimraf=require(_0xb0ea('0x2'));var zipdir=require(_0xb0ea('0x3'));var jsonpatch=require(_0xb0ea('0x4'));var rp=require(_0xb0ea('0x5'));var moment=require(_0xb0ea('0x6'));var BPromise=require(_0xb0ea('0x7'));var Mustache=require(_0xb0ea('0x8'));var util=require(_0xb0ea('0x9'));var path=require('path');var sox=require(_0xb0ea('0xa'));var csv=require(_0xb0ea('0xb'));var ejs=require(_0xb0ea('0xc'));var fs=require('fs');var _=require(_0xb0ea('0xd'));var squel=require(_0xb0ea('0xe'));var crypto=require('crypto');var jsforce=require(_0xb0ea('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xb0ea('0xb'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0xb0ea('0x10'));var hardwareService=require(_0xb0ea('0x11'));var Redis=require(_0xb0ea('0x12'));var qs=require(_0xb0ea('0x13'));var logger=require('../../config/logger')(_0xb0ea('0x14'));var utils=require(_0xb0ea('0x15'));var config=require(_0xb0ea('0x16'));var db=require(_0xb0ea('0x17'))['db'];var integrations=require(_0xb0ea('0x18'));var jayson=require(_0xb0ea('0x19'));var client=jayson[_0xb0ea('0x1a')][_0xb0ea('0x1b')]({'port':0x232a});function respondWithRpcPromise(_0x40cb3e,_0x1183d4,_0xab5b0e,_0x1c8bd8){return new BPromise(function(_0x4f8367,_0x386d31){var _0x216c11=_0x1c8bd8||client;return _0x216c11[_0xb0ea('0x1c')](_0x40cb3e,_0xab5b0e)[_0xb0ea('0x1d')](function(_0xc43541){logger[_0xb0ea('0x1e')](_0xb0ea('0x1f'),_0x1183d4,_0xb0ea('0x20'));logger['debug'](_0xb0ea('0x21'),_0x1183d4,_0xb0ea('0x20'),JSON[_0xb0ea('0x22')](_0xc43541));if(_0xc43541['error']){if(_0xc43541[_0xb0ea('0x23')][_0xb0ea('0x24')]===0x1f4){logger[_0xb0ea('0x23')](_0xb0ea('0x1f'),_0x1183d4,_0xc43541[_0xb0ea('0x23')][_0xb0ea('0x25')]);return _0x386d31(_0xc43541[_0xb0ea('0x23')][_0xb0ea('0x25')]);}logger[_0xb0ea('0x23')]('ZohoAccount,\x20%s,\x20%s',_0x1183d4,_0xc43541['error'][_0xb0ea('0x25')]);return _0x4f8367(_0xc43541['error']['message']);}else{logger[_0xb0ea('0x1e')](_0xb0ea('0x1f'),_0x1183d4,_0xb0ea('0x20'));_0x4f8367(_0xc43541[_0xb0ea('0x26')][_0xb0ea('0x25')]);}})['catch'](function(_0x1c7bd1){logger['error'](_0xb0ea('0x1f'),_0x1183d4,_0x1c7bd1);_0x386d31(_0x1c7bd1);});});}function respondWithStatusCode(_0x3bd9d5,_0x260f8d){_0x260f8d=_0x260f8d||0xcc;return function(_0x110c34){if(_0x110c34){return _0x3bd9d5[_0xb0ea('0x27')](_0x260f8d);}return _0x3bd9d5['status'](_0x260f8d)['end']();};}function respondWithResult(_0x350725,_0x33f0b7){_0x33f0b7=_0x33f0b7||0xc8;return function(_0x3941ff){if(_0x3941ff){return _0x350725[_0xb0ea('0x28')](_0x33f0b7)['json'](_0x3941ff);}};}function respondWithFilteredResult(_0x2b749e,_0x14a318){return function(_0x407ec1){if(_0x407ec1){var _0x3bd896=_0x407ec1[_0xb0ea('0x29')],_0x392b07=_0x14a318[_0xb0ea('0x2a')],_0x17aa7a=_0x14a318[_0xb0ea('0x2a')]+_0x14a318['limit'],_0x3e9a75;if(_0x17aa7a>=_0x3bd896){_0x17aa7a=_0x3bd896;_0x3e9a75=0xc8;}else{_0x3e9a75=0xce;}_0x2b749e[_0xb0ea('0x28')](_0x3e9a75);return _0x2b749e[_0xb0ea('0x2b')](_0xb0ea('0x2c'),_0x392b07+'-'+_0x17aa7a+'/'+_0x3bd896)[_0xb0ea('0x2d')](_0x407ec1);}return null;};}function patchUpdates(_0xfa309d){return function(_0x12244b){try{jsonpatch[_0xb0ea('0x2e')](_0x12244b,_0xfa309d,!![]);}catch(_0x34e09d){return BPromise[_0xb0ea('0x2f')](_0x34e09d);}return _0x12244b[_0xb0ea('0x30')]();};}function saveUpdates(_0x2b800a,_0xec61f9){return function(_0xea60f5){if(_0xea60f5){return _0xea60f5['update'](_0x2b800a)['then'](function(_0xff869d){return _0xff869d;});}return null;};}function removeEntity(_0xda84ff,_0x31f94e){return function(_0x1252e8){if(_0x1252e8){return _0x1252e8[_0xb0ea('0x31')]()['then'](function(){_0xda84ff['status'](0xcc)[_0xb0ea('0x32')]();});}};}function handleEntityNotFound(_0x3eb472,_0x2db8ef){return function(_0x43bf42){if(!_0x43bf42){_0x3eb472[_0xb0ea('0x27')](0x194);}return _0x43bf42;};}function handleError(_0x4e4114,_0x3cb77f){_0x3cb77f=_0x3cb77f||0x1f4;return function(_0x8497d3){logger[_0xb0ea('0x23')](_0x8497d3['stack']);if(_0x8497d3[_0xb0ea('0x33')]){delete _0x8497d3[_0xb0ea('0x33')];}_0x4e4114[_0xb0ea('0x28')](_0x3cb77f)[_0xb0ea('0x34')](_0x8497d3);};}exports[_0xb0ea('0x35')]=function(_0x2aa266,_0x17059d){var _0x2f18a8={},_0x125256={},_0x4298ce={'count':0x0,'rows':[]};var _0x22c19b=db[_0xb0ea('0x36')][_0xb0ea('0x37')];_0x125256[_0xb0ea('0x38')]=_[_0xb0ea('0x39')](_0x22c19b);_0x125256[_0xb0ea('0x3a')]=_['keys'](_0x2aa266['query']);_0x125256[_0xb0ea('0x3b')]=_[_0xb0ea('0x3c')](_0x125256[_0xb0ea('0x38')],_0x125256[_0xb0ea('0x3a')]);_0x2f18a8[_0xb0ea('0x3d')]=_[_0xb0ea('0x3c')](_0x125256[_0xb0ea('0x38')],qs[_0xb0ea('0x3e')](_0x2aa266['query'][_0xb0ea('0x3e')]));_0x2f18a8[_0xb0ea('0x3d')]=_0x2f18a8['attributes']['length']?_0x2f18a8[_0xb0ea('0x3d')]:_0x125256[_0xb0ea('0x38')];if(!_0x2aa266[_0xb0ea('0x3a')][_0xb0ea('0x3f')](_0xb0ea('0x40'))){_0x2f18a8[_0xb0ea('0x41')]=qs['limit'](_0x2aa266[_0xb0ea('0x3a')][_0xb0ea('0x41')]);_0x2f18a8[_0xb0ea('0x2a')]=qs[_0xb0ea('0x2a')](_0x2aa266[_0xb0ea('0x3a')][_0xb0ea('0x2a')]);}_0x2f18a8[_0xb0ea('0x42')]=qs[_0xb0ea('0x43')](_0x2aa266[_0xb0ea('0x3a')]['sort']);_0x2f18a8[_0xb0ea('0x44')]=qs['filters'](_[_0xb0ea('0x45')](_0x2aa266['query'],_0x125256[_0xb0ea('0x3b')]));if(_0x2aa266['query'][_0xb0ea('0x46')]){_0x2f18a8[_0xb0ea('0x44')]=_[_0xb0ea('0x47')](_0x2f18a8['where'],{'$or':_[_0xb0ea('0x48')](_0x22c19b,function(_0x38a2e8){if(_0x38a2e8[_0xb0ea('0x49')][_0xb0ea('0x4a')]!=='VIRTUAL'){var _0x3c9bbf={};_0x3c9bbf[_0x38a2e8[_0xb0ea('0x4b')]]={'$like':'%'+_0x2aa266[_0xb0ea('0x3a')][_0xb0ea('0x46')]+'%'};return _0x3c9bbf;}})});}_0x2f18a8=_[_0xb0ea('0x47')]({},_0x2f18a8,_0x2aa266[_0xb0ea('0x4c')]);var _0x38cdb2={'where':_0x2f18a8[_0xb0ea('0x44')]};return db['ZohoAccount'][_0xb0ea('0x29')](_0x38cdb2)[_0xb0ea('0x1d')](function(_0x8fbd2e){_0x4298ce[_0xb0ea('0x29')]=_0x8fbd2e;if(_0x2aa266[_0xb0ea('0x3a')]['includeAll']){_0x2f18a8['include']=[{'all':!![]}];}return db[_0xb0ea('0x36')][_0xb0ea('0x4d')](_0x2f18a8);})[_0xb0ea('0x1d')](function(_0x2d3cf1){_0x4298ce[_0xb0ea('0x4e')]=_0x2d3cf1;return _0x4298ce;})[_0xb0ea('0x1d')](respondWithFilteredResult(_0x17059d,_0x2f18a8))[_0xb0ea('0x4f')](handleError(_0x17059d,null));};exports[_0xb0ea('0x50')]=function(_0x5992a2,_0x1d81c7){var _0x1b527b={'raw':![],'where':{'id':_0x5992a2[_0xb0ea('0x51')]['id']}},_0x230d08={};_0x230d08[_0xb0ea('0x38')]=_[_0xb0ea('0x39')](db['ZohoAccount'][_0xb0ea('0x37')]);_0x230d08[_0xb0ea('0x3a')]=_[_0xb0ea('0x39')](_0x5992a2['query']);_0x230d08['filters']=_[_0xb0ea('0x3c')](_0x230d08[_0xb0ea('0x38')],_0x230d08['query']);_0x1b527b[_0xb0ea('0x3d')]=_[_0xb0ea('0x3c')](_0x230d08['model'],qs[_0xb0ea('0x3e')](_0x5992a2[_0xb0ea('0x3a')][_0xb0ea('0x3e')]));_0x1b527b['attributes']=_0x1b527b[_0xb0ea('0x3d')][_0xb0ea('0x52')]?_0x1b527b['attributes']:_0x230d08[_0xb0ea('0x38')];if(_0x5992a2[_0xb0ea('0x3a')][_0xb0ea('0x53')]){_0x1b527b[_0xb0ea('0x54')]=[{'all':!![]}];}_0x1b527b=_['merge']({},_0x1b527b,_0x5992a2['options']);return db[_0xb0ea('0x36')][_0xb0ea('0x55')](_0x1b527b)['then'](handleEntityNotFound(_0x1d81c7,null))[_0xb0ea('0x1d')](respondWithResult(_0x1d81c7,null))[_0xb0ea('0x4f')](handleError(_0x1d81c7,null));};exports[_0xb0ea('0x56')]=function(_0x2710f1,_0x2eab22){return db[_0xb0ea('0x36')][_0xb0ea('0x56')](_0x2710f1[_0xb0ea('0x57')],{})[_0xb0ea('0x1d')](respondWithResult(_0x2eab22,0xc9))[_0xb0ea('0x4f')](handleError(_0x2eab22,null));};exports[_0xb0ea('0x58')]=function(_0x531617,_0x1c1042){if(_0x531617[_0xb0ea('0x57')]['id']){delete _0x531617[_0xb0ea('0x57')]['id'];}return db[_0xb0ea('0x36')][_0xb0ea('0x55')]({'where':{'id':_0x531617['params']['id']}})[_0xb0ea('0x1d')](handleEntityNotFound(_0x1c1042,null))[_0xb0ea('0x1d')](saveUpdates(_0x531617[_0xb0ea('0x57')],null))['then'](respondWithResult(_0x1c1042,null))[_0xb0ea('0x4f')](handleError(_0x1c1042,null));};exports['destroy']=function(_0xbc077b,_0x52164f){return db[_0xb0ea('0x36')][_0xb0ea('0x55')]({'where':{'id':_0xbc077b[_0xb0ea('0x51')]['id']}})[_0xb0ea('0x1d')](handleEntityNotFound(_0x52164f,null))[_0xb0ea('0x1d')](removeEntity(_0x52164f,null))['catch'](handleError(_0x52164f,null));};exports[_0xb0ea('0x59')]=function(_0x588946,_0x19d472,_0x399559){var _0x587bdb={};var _0x241e63={};var _0x356dc1;var _0x38fb8a;return db[_0xb0ea('0x36')]['findOne']({'where':{'id':_0x588946[_0xb0ea('0x51')]['id']}})[_0xb0ea('0x1d')](handleEntityNotFound(_0x19d472,null))[_0xb0ea('0x1d')](function(_0x23bc20){if(_0x23bc20){_0x356dc1=_0x23bc20;_0x241e63['model']=_[_0xb0ea('0x39')](db[_0xb0ea('0x5a')]['rawAttributes']);_0x241e63[_0xb0ea('0x3a')]=_[_0xb0ea('0x39')](_0x588946[_0xb0ea('0x3a')]);_0x241e63['filters']=_[_0xb0ea('0x3c')](_0x241e63[_0xb0ea('0x38')],_0x241e63[_0xb0ea('0x3a')]);_0x587bdb['attributes']=_[_0xb0ea('0x3c')](_0x241e63[_0xb0ea('0x38')],qs[_0xb0ea('0x3e')](_0x588946['query']['fields']));_0x587bdb[_0xb0ea('0x3d')]=_0x587bdb[_0xb0ea('0x3d')][_0xb0ea('0x52')]?_0x587bdb[_0xb0ea('0x3d')]:_0x241e63[_0xb0ea('0x38')];_0x587bdb[_0xb0ea('0x42')]=qs['sort'](_0x588946['query'][_0xb0ea('0x43')]);_0x587bdb[_0xb0ea('0x44')]=qs['filters'](_[_0xb0ea('0x45')](_0x588946[_0xb0ea('0x3a')],_0x241e63[_0xb0ea('0x3b')]));if(_0x588946['query'][_0xb0ea('0x46')]){_0x587bdb[_0xb0ea('0x44')]=_[_0xb0ea('0x47')](_0x587bdb['where'],{'$or':_[_0xb0ea('0x48')](_0x587bdb[_0xb0ea('0x3d')],function(_0x5df549){var _0x2ee4ac={};_0x2ee4ac[_0x5df549]={'$like':'%'+_0x588946[_0xb0ea('0x3a')][_0xb0ea('0x46')]+'%'};return _0x2ee4ac;})});}_0x587bdb=_[_0xb0ea('0x47')]({},_0x587bdb,_0x588946['options']);return _0x356dc1[_0xb0ea('0x59')](_0x587bdb);}})['then'](function(_0x1351eb){if(_0x1351eb){_0x38fb8a=_0x1351eb[_0xb0ea('0x52')];if(!_0x588946['query'][_0xb0ea('0x3f')](_0xb0ea('0x40'))){_0x587bdb[_0xb0ea('0x41')]=qs['limit'](_0x588946[_0xb0ea('0x3a')][_0xb0ea('0x41')]);_0x587bdb[_0xb0ea('0x2a')]=qs[_0xb0ea('0x2a')](_0x588946[_0xb0ea('0x3a')][_0xb0ea('0x2a')]);}return _0x356dc1[_0xb0ea('0x59')](_0x587bdb);}})['then'](function(_0x3afcd6){if(_0x3afcd6){return _0x3afcd6?{'count':_0x38fb8a,'rows':_0x3afcd6}:null;}})[_0xb0ea('0x1d')](respondWithResult(_0x19d472,null))[_0xb0ea('0x4f')](handleError(_0x19d472,null));};exports[_0xb0ea('0x5b')]=function(_0x40eee8,_0x44c2ba,_0x4da228){if(_0x40eee8['body']['id']){delete _0x40eee8['body']['id'];}return db[_0xb0ea('0x36')][_0xb0ea('0x5c')]({'where':{'id':_0x40eee8['params']['id']}})[_0xb0ea('0x1d')](handleEntityNotFound(_0x44c2ba,null))['then'](function(_0x45b1f6){if(_0x45b1f6){_0x40eee8['body']['AccountId']=_0x45b1f6['id'];_0x40eee8[_0xb0ea('0x57')][_0xb0ea('0x5d')]=integrations[_0xb0ea('0x5e')](_0x40eee8[_0xb0ea('0x57')][_0xb0ea('0x5f')],_0x40eee8['body'][_0xb0ea('0x49')]);_0x40eee8[_0xb0ea('0x57')][_0xb0ea('0x60')]=integrations[_0xb0ea('0x61')](_0x40eee8[_0xb0ea('0x57')]['channel'],_0x40eee8['body'][_0xb0ea('0x49')]);return db['ZohoConfiguration'][_0xb0ea('0x56')](_0x40eee8[_0xb0ea('0x57')],{'include':[{'model':db['ZohoField'],'as':'Subjects'},{'model':db['ZohoField'],'as':_0xb0ea('0x60')}]});}return null;})['then'](respondWithResult(_0x44c2ba,null))[_0xb0ea('0x4f')](handleError(_0x44c2ba,null));};exports['getFields']=function(_0x12c9c2,_0x55e4d6,_0x1cd1ae){var _0x433e13='';return db[_0xb0ea('0x36')]['findOne']({'where':{'id':_0x12c9c2[_0xb0ea('0x51')]['id']},'attributes':['id',_0xb0ea('0x62'),'authToken']})[_0xb0ea('0x1d')](handleEntityNotFound(_0x55e4d6,null))[_0xb0ea('0x1d')](function(_0x2ee502){if(_0x2ee502){_0x433e13=_0x2ee502[_0xb0ea('0x62')];var _0x5600eb=_0x433e13[_0xb0ea('0x63')](-0x1);if(_0x5600eb==='/'){_0x433e13=_0x433e13['substring'](0x0,_0x433e13[_0xb0ea('0x64')](_0x5600eb));}return rp({'method':'GET','uri':util[_0xb0ea('0x65')](_0xb0ea('0x66'),_0x433e13),'qs':{'authtoken':_0x2ee502[_0xb0ea('0x67')],'scope':_0xb0ea('0x68')},'json':!![]});}})[_0xb0ea('0x1d')](function(_0x38c1c1){if(_0x38c1c1){if(_0x38c1c1[_0xb0ea('0x69')]&&_0x38c1c1[_0xb0ea('0x69')][_0xb0ea('0x23')]){throw new Error(_0x38c1c1[_0xb0ea('0x69')][_0xb0ea('0x23')][_0xb0ea('0x25')]);}var _0x1d29fd=[];if(_0x38c1c1['Calls']&&_0x38c1c1[_0xb0ea('0x6a')][_0xb0ea('0x6b')]){if(_0x38c1c1[_0xb0ea('0x6a')][_0xb0ea('0x6b')]['FL']){var _0x4b4136=['Call\x20Purpose'];for(var _0xf2fc09=0x0,_0x59843e=_0x38c1c1[_0xb0ea('0x6a')][_0xb0ea('0x6b')]['FL'][_0xb0ea('0x52')];_0xf2fc09<_0x59843e;_0xf2fc09++){if(_[_0xb0ea('0x6c')](_0x4b4136,_0x38c1c1[_0xb0ea('0x6a')]['section']['FL'][_0xf2fc09]['dv'])){_0x1d29fd[_0xb0ea('0x6d')]({'id':_0x38c1c1[_0xb0ea('0x6a')][_0xb0ea('0x6b')]['FL'][_0xf2fc09]['dv'],'name':_0x38c1c1[_0xb0ea('0x6a')][_0xb0ea('0x6b')]['FL'][_0xf2fc09][_0xb0ea('0x6e')],'custom':_0x38c1c1[_0xb0ea('0x6a')]['section']['FL'][_0xf2fc09][_0xb0ea('0x6f')]==='true'?!![]:![],'options':_0x38c1c1[_0xb0ea('0x6a')][_0xb0ea('0x6b')]['FL'][_0xf2fc09]['type']===_0xb0ea('0x70')&&_0x38c1c1[_0xb0ea('0x6a')][_0xb0ea('0x6b')]['FL'][_0xf2fc09]['val']?_[_0xb0ea('0x48')](_0x38c1c1[_0xb0ea('0x6a')]['section']['FL'][_0xf2fc09][_0xb0ea('0x71')],function(_0x42b8b7){return{'name':_0x42b8b7,'value':_0x42b8b7};}):[]});}}}}return{'count':_0x1d29fd[_0xb0ea('0x52')],'rows':_0x1d29fd};}})[_0xb0ea('0x1d')](respondWithResult(_0x55e4d6,null))[_0xb0ea('0x4f')](function(_0x35dfa6){var _0x48b339=_0x12c9c2[_0xb0ea('0x3a')][_0xb0ea('0x72')]?0x1f4:_0x35dfa6[_0xb0ea('0x73')]||0x1f4;logger[_0xb0ea('0x23')]('getFields,\x20%s,\x20%s,\x20%s',_0xb0ea('0x74'),_0x48b339,JSON[_0xb0ea('0x22')](_0x35dfa6));delete _0x35dfa6[_0xb0ea('0x33')];if(_0x48b339===0x191){_0x48b339=0x190;}_0x55e4d6[_0xb0ea('0x28')](_0x48b339)['send'](_0x12c9c2[_0xb0ea('0x3a')][_0xb0ea('0x72')]?{'message':_0xb0ea('0x75'),'statusCode':_0x35dfa6[_0xb0ea('0x73')]}:_0x35dfa6);});};
\ No newline at end of file
+var _0x2873=['crmapi','response','Calls','section','Call\x20Purpose','includes','push','label','true','Pick\x20List','val','test','statusCode','Wrong\x20credentials','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','mustache','util','sox','to-csv','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','client','http','request','ZohoAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','info','result','catch','sendStatus','status','json','count','offset','limit','Content-Range','apply','reject','update','destroy','then','end','stack','name','send','index','ZohoAccount','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','sort','where','pick','filters','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','find','create','body','params','ZohoConfiguration','order','filter','map','getConfigurations','nolimit','addConfiguration','findOne','AccountId','getSubjects','channel','Descriptions','getDescriptions','ZohoField','Subjects','getFields','host','authToken','slice','substring','lastIndexOf','GET','format','https://crm.%s/crm/private/json/Calls/getFields'];(function(_0x267dbf,_0x310075){var _0x408d83=function(_0x4b557f){while(--_0x4b557f){_0x267dbf['push'](_0x267dbf['shift']());}};_0x408d83(++_0x310075);}(_0x2873,0x1f2));var _0x3287=function(_0x11f917,_0x26c0de){_0x11f917=_0x11f917-0x0;var _0x13e75f=_0x2873[_0x11f917];return _0x13e75f;};'use strict';var pdf=require(_0x3287('0x0'));var emlformat=require(_0x3287('0x1'));var rimraf=require(_0x3287('0x2'));var zipdir=require(_0x3287('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3287('0x4'));var moment=require(_0x3287('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x3287('0x6'));var util=require(_0x3287('0x7'));var path=require('path');var sox=require(_0x3287('0x8'));var csv=require(_0x3287('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x3287('0xa'));var squel=require('squel');var crypto=require(_0x3287('0xb'));var jsforce=require(_0x3287('0xc'));var deskjs=require(_0x3287('0xd'));var toCsv=require(_0x3287('0x9'));var querystring=require(_0x3287('0xe'));var Papa=require(_0x3287('0xf'));var authService=require(_0x3287('0x10'));var hardwareService=require(_0x3287('0x11'));var Redis=require(_0x3287('0x12'));var qs=require(_0x3287('0x13'));var logger=require(_0x3287('0x14'))(_0x3287('0x15'));var utils=require(_0x3287('0x16'));var config=require(_0x3287('0x17'));var db=require(_0x3287('0x18'))['db'];var integrations=require('../../components/integrations/configuration');var jayson=require('jayson/promise');var client=jayson[_0x3287('0x19')][_0x3287('0x1a')]({'port':0x232a});function respondWithRpcPromise(_0x423c47,_0x3dda4f,_0x9cafa4,_0x54feb1){return new BPromise(function(_0x3a6a15,_0x1a58af){var _0x2c946d=_0x54feb1||client;return _0x2c946d[_0x3287('0x1b')](_0x423c47,_0x9cafa4)['then'](function(_0x38d7ef){logger['info'](_0x3287('0x1c'),_0x3dda4f,_0x3287('0x1d'));logger[_0x3287('0x1e')]('ZohoAccount,\x20%s,\x20%s,\x20%s',_0x3dda4f,_0x3287('0x1d'),JSON[_0x3287('0x1f')](_0x38d7ef));if(_0x38d7ef[_0x3287('0x20')]){if(_0x38d7ef[_0x3287('0x20')][_0x3287('0x21')]===0x1f4){logger['error']('ZohoAccount,\x20%s,\x20%s',_0x3dda4f,_0x38d7ef[_0x3287('0x20')]['message']);return _0x1a58af(_0x38d7ef[_0x3287('0x20')]['message']);}logger[_0x3287('0x20')]('ZohoAccount,\x20%s,\x20%s',_0x3dda4f,_0x38d7ef[_0x3287('0x20')][_0x3287('0x22')]);return _0x3a6a15(_0x38d7ef[_0x3287('0x20')][_0x3287('0x22')]);}else{logger[_0x3287('0x23')](_0x3287('0x1c'),_0x3dda4f,_0x3287('0x1d'));_0x3a6a15(_0x38d7ef[_0x3287('0x24')][_0x3287('0x22')]);}})[_0x3287('0x25')](function(_0x39ab07){logger['error']('ZohoAccount,\x20%s,\x20%s',_0x3dda4f,_0x39ab07);_0x1a58af(_0x39ab07);});});}function respondWithStatusCode(_0x427226,_0x2d1fab){_0x2d1fab=_0x2d1fab||0xcc;return function(_0x4bb4dd){if(_0x4bb4dd){return _0x427226[_0x3287('0x26')](_0x2d1fab);}return _0x427226[_0x3287('0x27')](_0x2d1fab)['end']();};}function respondWithResult(_0xcbbf0e,_0x2556a2){_0x2556a2=_0x2556a2||0xc8;return function(_0x1955c6){if(_0x1955c6){return _0xcbbf0e[_0x3287('0x27')](_0x2556a2)[_0x3287('0x28')](_0x1955c6);}};}function respondWithFilteredResult(_0x20d04a,_0x3e6d87){return function(_0x257268){if(_0x257268){var _0x54f5d9=_0x257268[_0x3287('0x29')],_0x1f6f1e=_0x3e6d87[_0x3287('0x2a')],_0xedd307=_0x3e6d87[_0x3287('0x2a')]+_0x3e6d87[_0x3287('0x2b')],_0x5cbec6;if(_0xedd307>=_0x54f5d9){_0xedd307=_0x54f5d9;_0x5cbec6=0xc8;}else{_0x5cbec6=0xce;}_0x20d04a[_0x3287('0x27')](_0x5cbec6);return _0x20d04a['set'](_0x3287('0x2c'),_0x1f6f1e+'-'+_0xedd307+'/'+_0x54f5d9)[_0x3287('0x28')](_0x257268);}return null;};}function patchUpdates(_0x579555){return function(_0x32ef52){try{jsonpatch[_0x3287('0x2d')](_0x32ef52,_0x579555,!![]);}catch(_0x955463){return BPromise[_0x3287('0x2e')](_0x955463);}return _0x32ef52['save']();};}function saveUpdates(_0x25ccee,_0x297777){return function(_0xe0579c){if(_0xe0579c){return _0xe0579c[_0x3287('0x2f')](_0x25ccee)['then'](function(_0x2a4892){return _0x2a4892;});}return null;};}function removeEntity(_0x1c3d29,_0xf40477){return function(_0x3446d9){if(_0x3446d9){return _0x3446d9[_0x3287('0x30')]()[_0x3287('0x31')](function(){_0x1c3d29[_0x3287('0x27')](0xcc)[_0x3287('0x32')]();});}};}function handleEntityNotFound(_0x51c340,_0x2a92d6){return function(_0x15fac3){if(!_0x15fac3){_0x51c340[_0x3287('0x26')](0x194);}return _0x15fac3;};}function handleError(_0x5ea82a,_0x19e531){_0x19e531=_0x19e531||0x1f4;return function(_0x5cc42a){logger[_0x3287('0x20')](_0x5cc42a[_0x3287('0x33')]);if(_0x5cc42a[_0x3287('0x34')]){delete _0x5cc42a[_0x3287('0x34')];}_0x5ea82a[_0x3287('0x27')](_0x19e531)[_0x3287('0x35')](_0x5cc42a);};}exports[_0x3287('0x36')]=function(_0x12b0a5,_0x39e8d0){var _0x22706b={},_0x383cf6={},_0x278182={'count':0x0,'rows':[]};var _0x1315a2=db[_0x3287('0x37')][_0x3287('0x38')];_0x383cf6[_0x3287('0x39')]=_[_0x3287('0x3a')](_0x1315a2);_0x383cf6[_0x3287('0x3b')]=_['keys'](_0x12b0a5[_0x3287('0x3b')]);_0x383cf6['filters']=_[_0x3287('0x3c')](_0x383cf6[_0x3287('0x39')],_0x383cf6[_0x3287('0x3b')]);_0x22706b[_0x3287('0x3d')]=_[_0x3287('0x3c')](_0x383cf6[_0x3287('0x39')],qs[_0x3287('0x3e')](_0x12b0a5[_0x3287('0x3b')][_0x3287('0x3e')]));_0x22706b[_0x3287('0x3d')]=_0x22706b[_0x3287('0x3d')][_0x3287('0x3f')]?_0x22706b['attributes']:_0x383cf6['model'];if(!_0x12b0a5[_0x3287('0x3b')][_0x3287('0x40')]('nolimit')){_0x22706b[_0x3287('0x2b')]=qs[_0x3287('0x2b')](_0x12b0a5[_0x3287('0x3b')][_0x3287('0x2b')]);_0x22706b[_0x3287('0x2a')]=qs['offset'](_0x12b0a5[_0x3287('0x3b')][_0x3287('0x2a')]);}_0x22706b['order']=qs[_0x3287('0x41')](_0x12b0a5[_0x3287('0x3b')][_0x3287('0x41')]);_0x22706b[_0x3287('0x42')]=qs['filters'](_[_0x3287('0x43')](_0x12b0a5[_0x3287('0x3b')],_0x383cf6[_0x3287('0x44')]));if(_0x12b0a5[_0x3287('0x3b')]['filter']){_0x22706b[_0x3287('0x42')]=_[_0x3287('0x45')](_0x22706b[_0x3287('0x42')],{'$or':_['map'](_0x1315a2,function(_0x9bde6d){if(_0x9bde6d[_0x3287('0x46')][_0x3287('0x47')]!==_0x3287('0x48')){var _0x1add03={};_0x1add03[_0x9bde6d[_0x3287('0x49')]]={'$like':'%'+_0x12b0a5[_0x3287('0x3b')]['filter']+'%'};return _0x1add03;}})});}_0x22706b=_['merge']({},_0x22706b,_0x12b0a5[_0x3287('0x4a')]);var _0xccf1ef={'where':_0x22706b[_0x3287('0x42')]};return db[_0x3287('0x37')]['count'](_0xccf1ef)[_0x3287('0x31')](function(_0x595c12){_0x278182[_0x3287('0x29')]=_0x595c12;if(_0x12b0a5[_0x3287('0x3b')][_0x3287('0x4b')]){_0x22706b[_0x3287('0x4c')]=[{'all':!![]}];}return db[_0x3287('0x37')][_0x3287('0x4d')](_0x22706b);})[_0x3287('0x31')](function(_0x36485d){_0x278182[_0x3287('0x4e')]=_0x36485d;return _0x278182;})[_0x3287('0x31')](respondWithFilteredResult(_0x39e8d0,_0x22706b))[_0x3287('0x25')](handleError(_0x39e8d0,null));};exports['show']=function(_0x51eb8f,_0x5341fb){var _0x2bdf66={'raw':![],'where':{'id':_0x51eb8f['params']['id']}},_0x3bf55c={};_0x3bf55c[_0x3287('0x39')]=_[_0x3287('0x3a')](db[_0x3287('0x37')][_0x3287('0x38')]);_0x3bf55c['query']=_[_0x3287('0x3a')](_0x51eb8f[_0x3287('0x3b')]);_0x3bf55c[_0x3287('0x44')]=_[_0x3287('0x3c')](_0x3bf55c[_0x3287('0x39')],_0x3bf55c[_0x3287('0x3b')]);_0x2bdf66[_0x3287('0x3d')]=_[_0x3287('0x3c')](_0x3bf55c[_0x3287('0x39')],qs[_0x3287('0x3e')](_0x51eb8f['query']['fields']));_0x2bdf66[_0x3287('0x3d')]=_0x2bdf66[_0x3287('0x3d')][_0x3287('0x3f')]?_0x2bdf66[_0x3287('0x3d')]:_0x3bf55c[_0x3287('0x39')];if(_0x51eb8f[_0x3287('0x3b')]['includeAll']){_0x2bdf66['include']=[{'all':!![]}];}_0x2bdf66=_['merge']({},_0x2bdf66,_0x51eb8f['options']);return db['ZohoAccount'][_0x3287('0x4f')](_0x2bdf66)[_0x3287('0x31')](handleEntityNotFound(_0x5341fb,null))['then'](respondWithResult(_0x5341fb,null))[_0x3287('0x25')](handleError(_0x5341fb,null));};exports[_0x3287('0x50')]=function(_0x24a474,_0x857c3d){return db[_0x3287('0x37')][_0x3287('0x50')](_0x24a474['body'],{})[_0x3287('0x31')](respondWithResult(_0x857c3d,0xc9))[_0x3287('0x25')](handleError(_0x857c3d,null));};exports[_0x3287('0x2f')]=function(_0x23273e,_0x432177){if(_0x23273e[_0x3287('0x51')]['id']){delete _0x23273e[_0x3287('0x51')]['id'];}return db[_0x3287('0x37')][_0x3287('0x4f')]({'where':{'id':_0x23273e[_0x3287('0x52')]['id']}})['then'](handleEntityNotFound(_0x432177,null))[_0x3287('0x31')](saveUpdates(_0x23273e['body'],null))[_0x3287('0x31')](respondWithResult(_0x432177,null))[_0x3287('0x25')](handleError(_0x432177,null));};exports['destroy']=function(_0x60b312,_0x5d8848){return db[_0x3287('0x37')][_0x3287('0x4f')]({'where':{'id':_0x60b312[_0x3287('0x52')]['id']}})[_0x3287('0x31')](handleEntityNotFound(_0x5d8848,null))['then'](removeEntity(_0x5d8848,null))['catch'](handleError(_0x5d8848,null));};exports['getConfigurations']=function(_0x369914,_0x5af261,_0x30e01b){var _0x59b5d9={};var _0x23201a={};var _0x5b8c4b;var _0x26d0cd;return db['ZohoAccount']['findOne']({'where':{'id':_0x369914[_0x3287('0x52')]['id']}})[_0x3287('0x31')](handleEntityNotFound(_0x5af261,null))[_0x3287('0x31')](function(_0x2c21f9){if(_0x2c21f9){_0x5b8c4b=_0x2c21f9;_0x23201a[_0x3287('0x39')]=_['keys'](db[_0x3287('0x53')]['rawAttributes']);_0x23201a['query']=_[_0x3287('0x3a')](_0x369914[_0x3287('0x3b')]);_0x23201a[_0x3287('0x44')]=_[_0x3287('0x3c')](_0x23201a[_0x3287('0x39')],_0x23201a[_0x3287('0x3b')]);_0x59b5d9[_0x3287('0x3d')]=_[_0x3287('0x3c')](_0x23201a[_0x3287('0x39')],qs[_0x3287('0x3e')](_0x369914[_0x3287('0x3b')][_0x3287('0x3e')]));_0x59b5d9['attributes']=_0x59b5d9[_0x3287('0x3d')][_0x3287('0x3f')]?_0x59b5d9['attributes']:_0x23201a[_0x3287('0x39')];_0x59b5d9[_0x3287('0x54')]=qs[_0x3287('0x41')](_0x369914[_0x3287('0x3b')][_0x3287('0x41')]);_0x59b5d9[_0x3287('0x42')]=qs['filters'](_['pick'](_0x369914[_0x3287('0x3b')],_0x23201a[_0x3287('0x44')]));if(_0x369914[_0x3287('0x3b')][_0x3287('0x55')]){_0x59b5d9[_0x3287('0x42')]=_[_0x3287('0x45')](_0x59b5d9[_0x3287('0x42')],{'$or':_[_0x3287('0x56')](_0x59b5d9[_0x3287('0x3d')],function(_0x2f0f52){var _0x439fbb={};_0x439fbb[_0x2f0f52]={'$like':'%'+_0x369914['query']['filter']+'%'};return _0x439fbb;})});}_0x59b5d9=_[_0x3287('0x45')]({},_0x59b5d9,_0x369914['options']);return _0x5b8c4b[_0x3287('0x57')](_0x59b5d9);}})[_0x3287('0x31')](function(_0x184533){if(_0x184533){_0x26d0cd=_0x184533[_0x3287('0x3f')];if(!_0x369914['query']['hasOwnProperty'](_0x3287('0x58'))){_0x59b5d9[_0x3287('0x2b')]=qs[_0x3287('0x2b')](_0x369914[_0x3287('0x3b')]['limit']);_0x59b5d9[_0x3287('0x2a')]=qs[_0x3287('0x2a')](_0x369914[_0x3287('0x3b')][_0x3287('0x2a')]);}return _0x5b8c4b[_0x3287('0x57')](_0x59b5d9);}})[_0x3287('0x31')](function(_0x3211cb){if(_0x3211cb){return _0x3211cb?{'count':_0x26d0cd,'rows':_0x3211cb}:null;}})[_0x3287('0x31')](respondWithResult(_0x5af261,null))[_0x3287('0x25')](handleError(_0x5af261,null));};exports[_0x3287('0x59')]=function(_0x518c52,_0x14affb,_0x2e77f5){if(_0x518c52['body']['id']){delete _0x518c52[_0x3287('0x51')]['id'];}return db['ZohoAccount'][_0x3287('0x5a')]({'where':{'id':_0x518c52[_0x3287('0x52')]['id']}})['then'](handleEntityNotFound(_0x14affb,null))[_0x3287('0x31')](function(_0x3f6ba4){if(_0x3f6ba4){_0x518c52[_0x3287('0x51')][_0x3287('0x5b')]=_0x3f6ba4['id'];_0x518c52[_0x3287('0x51')]['Subjects']=integrations[_0x3287('0x5c')](_0x518c52[_0x3287('0x51')][_0x3287('0x5d')],_0x518c52[_0x3287('0x51')]['type']);_0x518c52[_0x3287('0x51')][_0x3287('0x5e')]=integrations[_0x3287('0x5f')](_0x518c52[_0x3287('0x51')][_0x3287('0x5d')],_0x518c52[_0x3287('0x51')][_0x3287('0x46')]);return db[_0x3287('0x53')][_0x3287('0x50')](_0x518c52[_0x3287('0x51')],{'include':[{'model':db[_0x3287('0x60')],'as':_0x3287('0x61')},{'model':db[_0x3287('0x60')],'as':_0x3287('0x5e')}]});}return null;})[_0x3287('0x31')](respondWithResult(_0x14affb,null))[_0x3287('0x25')](handleError(_0x14affb,null));};exports[_0x3287('0x62')]=function(_0x3f5b20,_0x194da2,_0x4cfc8a){var _0x16d46c='';return db[_0x3287('0x37')]['findOne']({'where':{'id':_0x3f5b20['params']['id']},'attributes':['id',_0x3287('0x63'),_0x3287('0x64')]})[_0x3287('0x31')](handleEntityNotFound(_0x194da2,null))['then'](function(_0x3e8b34){if(_0x3e8b34){_0x16d46c=_0x3e8b34[_0x3287('0x63')];var _0x25c590=_0x16d46c[_0x3287('0x65')](-0x1);if(_0x25c590==='/'){_0x16d46c=_0x16d46c[_0x3287('0x66')](0x0,_0x16d46c[_0x3287('0x67')](_0x25c590));}return rp({'method':_0x3287('0x68'),'uri':util[_0x3287('0x69')](_0x3287('0x6a'),_0x16d46c),'qs':{'authtoken':_0x3e8b34[_0x3287('0x64')],'scope':_0x3287('0x6b')},'json':!![]});}})[_0x3287('0x31')](function(_0x2a1425){if(_0x2a1425){if(_0x2a1425[_0x3287('0x6c')]&&_0x2a1425[_0x3287('0x6c')][_0x3287('0x20')]){throw new Error(_0x2a1425['response']['error'][_0x3287('0x22')]);}var _0x276dec=[];if(_0x2a1425[_0x3287('0x6d')]&&_0x2a1425[_0x3287('0x6d')][_0x3287('0x6e')]){if(_0x2a1425[_0x3287('0x6d')][_0x3287('0x6e')]['FL']){var _0x3d3d9b=[_0x3287('0x6f')];for(var _0x20fcc8=0x0,_0x5e5aa7=_0x2a1425['Calls'][_0x3287('0x6e')]['FL']['length'];_0x20fcc8<_0x5e5aa7;_0x20fcc8++){if(_[_0x3287('0x70')](_0x3d3d9b,_0x2a1425[_0x3287('0x6d')][_0x3287('0x6e')]['FL'][_0x20fcc8]['dv'])){_0x276dec[_0x3287('0x71')]({'id':_0x2a1425['Calls'][_0x3287('0x6e')]['FL'][_0x20fcc8]['dv'],'name':_0x2a1425['Calls']['section']['FL'][_0x20fcc8][_0x3287('0x72')],'custom':_0x2a1425[_0x3287('0x6d')][_0x3287('0x6e')]['FL'][_0x20fcc8]['customfield']===_0x3287('0x73')?!![]:![],'options':_0x2a1425['Calls']['section']['FL'][_0x20fcc8]['type']===_0x3287('0x74')&&_0x2a1425['Calls'][_0x3287('0x6e')]['FL'][_0x20fcc8]['val']?_[_0x3287('0x56')](_0x2a1425[_0x3287('0x6d')]['section']['FL'][_0x20fcc8][_0x3287('0x75')],function(_0x3ecbf5){return{'name':_0x3ecbf5,'value':_0x3ecbf5};}):[]});}}}}return{'count':_0x276dec[_0x3287('0x3f')],'rows':_0x276dec};}})['then'](respondWithResult(_0x194da2,null))[_0x3287('0x25')](function(_0x3c9620){var _0x48dba8=_0x3f5b20['query'][_0x3287('0x76')]?0x1f4:_0x3c9620[_0x3287('0x77')]||0x1f4;logger[_0x3287('0x20')]('getFields,\x20%s,\x20%s,\x20%s',_0x3287('0x62'),_0x48dba8,JSON[_0x3287('0x1f')](_0x3c9620));delete _0x3c9620[_0x3287('0x34')];if(_0x48dba8===0x191){_0x48dba8=0x190;}_0x194da2[_0x3287('0x27')](_0x48dba8)[_0x3287('0x35')](_0x3f5b20[_0x3287('0x3b')][_0x3287('0x76')]?{'message':_0x3287('0x78'),'statusCode':_0x3c9620['statusCode']}:_0x3c9620);});};
\ No newline at end of file
index 549b5db..1fa2380 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc201=['int_zoho_accounts','util','../../config/logger','moment','bluebird','./intZohoAccount.attributes','exports','define','ZohoAccount'];(function(_0x2c85d4,_0x196197){var _0x5c1b31=function(_0x525ef3){while(--_0x525ef3){_0x2c85d4['push'](_0x2c85d4['shift']());}};_0x5c1b31(++_0x196197);}(_0xc201,0xd9));var _0x1c20=function(_0x1b2ebe,_0x85977b){_0x1b2ebe=_0x1b2ebe-0x0;var _0xfced19=_0xc201[_0x1b2ebe];return _0xfced19;};'use strict';var _=require('lodash');var util=require(_0x1c20('0x0'));var logger=require(_0x1c20('0x1'))('api');var moment=require(_0x1c20('0x2'));var BPromise=require(_0x1c20('0x3'));var rp=require('request-promise');var attributes=require(_0x1c20('0x4'));var integrations=require('../../components/integrations/configuration');module[_0x1c20('0x5')]=function(_0x371c01,_0x769a0d){return _0x371c01[_0x1c20('0x6')](_0x1c20('0x7'),attributes,{'tableName':_0x1c20('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x99fe=['define','int_zoho_accounts','lodash','util','../../config/logger','api','moment','bluebird','./intZohoAccount.attributes','../../components/integrations/configuration','exports'];(function(_0xbca1b1,_0x33f0ce){var _0x4e1686=function(_0x58a80c){while(--_0x58a80c){_0xbca1b1['push'](_0xbca1b1['shift']());}};_0x4e1686(++_0x33f0ce);}(_0x99fe,0xde));var _0xe99f=function(_0x27b7d2,_0x56c091){_0x27b7d2=_0x27b7d2-0x0;var _0x3ef6be=_0x99fe[_0x27b7d2];return _0x3ef6be;};'use strict';var _=require(_0xe99f('0x0'));var util=require(_0xe99f('0x1'));var logger=require(_0xe99f('0x2'))(_0xe99f('0x3'));var moment=require(_0xe99f('0x4'));var BPromise=require(_0xe99f('0x5'));var rp=require('request-promise');var attributes=require(_0xe99f('0x6'));var integrations=require(_0xe99f('0x7'));module[_0xe99f('0x8')]=function(_0x360834,_0x1d4b64){return _0x360834[_0xe99f('0x9')]('ZohoAccount',attributes,{'tableName':_0xe99f('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 287aa87..18f02b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa44c=['ZohoAccount,\x20%s,\x20%s','message','result','catch','GetZohoAccount','ZohoAccount','findAll','options','raw','where','limit','include','map','model','attributes','ShowZohoAccount','find','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','request\x20sent','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0xee1ec9,_0x2f0599){var _0x102a53=function(_0x4e5f7f){while(--_0x4e5f7f){_0xee1ec9['push'](_0xee1ec9['shift']());}};_0x102a53(++_0x2f0599);}(_0xa44c,0x18d));var _0xca44=function(_0x199408,_0x52c098){_0x199408=_0x199408-0x0;var _0x241cda=_0xa44c[_0x199408];return _0x241cda;};'use strict';var _=require(_0xca44('0x0'));var util=require(_0xca44('0x1'));var moment=require(_0xca44('0x2'));var BPromise=require(_0xca44('0x3'));var rs=require(_0xca44('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xca44('0x5'))['db'];var utils=require(_0xca44('0x6'));var logger=require(_0xca44('0x7'))(_0xca44('0x8'));var config=require('../../config/environment');var jayson=require(_0xca44('0x9'));var client=jayson[_0xca44('0xa')][_0xca44('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5e645a,_0x2f6e79,_0x2f036b){return new BPromise(function(_0x14e62f,_0x39ed09){return client[_0xca44('0xc')](_0x5e645a,_0x2f036b)[_0xca44('0xd')](function(_0x428f61){logger[_0xca44('0xe')]('ZohoAccount,\x20%s,\x20%s',_0x2f6e79,_0xca44('0xf'));logger[_0xca44('0x10')](_0xca44('0x11'),_0x2f6e79,_0xca44('0xf'),JSON[_0xca44('0x12')](_0x428f61));if(_0x428f61[_0xca44('0x13')]){if(_0x428f61[_0xca44('0x13')][_0xca44('0x14')]===0x1f4){logger['error'](_0xca44('0x15'),_0x2f6e79,_0x428f61['error'][_0xca44('0x16')]);return _0x39ed09(_0x428f61[_0xca44('0x13')][_0xca44('0x16')]);}logger['error'](_0xca44('0x15'),_0x2f6e79,_0x428f61[_0xca44('0x13')][_0xca44('0x16')]);return _0x14e62f(_0x428f61[_0xca44('0x13')][_0xca44('0x16')]);}else{logger[_0xca44('0xe')](_0xca44('0x15'),_0x2f6e79,'request\x20sent');_0x14e62f(_0x428f61[_0xca44('0x17')][_0xca44('0x16')]);}})[_0xca44('0x18')](function(_0x1968f5){logger[_0xca44('0x13')](_0xca44('0x15'),_0x2f6e79,_0x1968f5);_0x39ed09(_0x1968f5);});});}exports[_0xca44('0x19')]=function(_0x53e8cc){var _0x3fd19f=this;return new Promise(function(_0x222f78,_0x5b291e){return db[_0xca44('0x1a')][_0xca44('0x1b')]({'raw':_0x53e8cc[_0xca44('0x1c')]?_0x53e8cc[_0xca44('0x1c')][_0xca44('0x1d')]===undefined?!![]:![]:!![],'where':_0x53e8cc['options']?_0x53e8cc['options'][_0xca44('0x1e')]||null:null,'attributes':_0x53e8cc['options']?_0x53e8cc[_0xca44('0x1c')]['attributes']||null:null,'limit':_0x53e8cc['options']?_0x53e8cc[_0xca44('0x1c')][_0xca44('0x1f')]||null:null,'include':_0x53e8cc[_0xca44('0x1c')]?_0x53e8cc[_0xca44('0x1c')][_0xca44('0x20')]?_[_0xca44('0x21')](_0x53e8cc['options']['include'],function(_0x212af5){return{'model':db[_0x212af5[_0xca44('0x22')]],'as':_0x212af5['as'],'attributes':_0x212af5[_0xca44('0x23')],'include':_0x212af5[_0xca44('0x20')]?_[_0xca44('0x21')](_0x212af5['include'],function(_0xee0574){return{'model':db[_0xee0574[_0xca44('0x22')]],'as':_0xee0574['as'],'attributes':_0xee0574[_0xca44('0x23')],'include':_0xee0574['include']?_[_0xca44('0x21')](_0xee0574[_0xca44('0x20')],function(_0x3f8a71){return{'model':db[_0x3f8a71[_0xca44('0x22')]],'as':_0x3f8a71['as'],'attributes':_0x3f8a71[_0xca44('0x23')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x486a0f){logger[_0xca44('0xe')](_0xca44('0x19'),_0x53e8cc);logger[_0xca44('0x10')](_0xca44('0x19'),_0x53e8cc,JSON[_0xca44('0x12')](_0x486a0f));_0x222f78(_0x486a0f);})[_0xca44('0x18')](function(_0x4d5fad){logger[_0xca44('0x13')](_0xca44('0x19'),_0x4d5fad[_0xca44('0x16')],_0x53e8cc);_0x5b291e(_0x3fd19f[_0xca44('0x13')](0x1f4,_0x4d5fad['message']));});});};exports[_0xca44('0x24')]=function(_0x16b98c){var _0x131998=this;return new Promise(function(_0x2767af,_0x59cf08){return db[_0xca44('0x1a')][_0xca44('0x25')]({'raw':_0x16b98c[_0xca44('0x1c')]?_0x16b98c[_0xca44('0x1c')][_0xca44('0x1d')]===undefined?!![]:![]:!![],'where':_0x16b98c[_0xca44('0x1c')]?_0x16b98c[_0xca44('0x1c')][_0xca44('0x1e')]||null:null,'attributes':_0x16b98c[_0xca44('0x1c')]?_0x16b98c[_0xca44('0x1c')][_0xca44('0x23')]||null:null,'include':_0x16b98c['options']?_0x16b98c[_0xca44('0x1c')]['include']?_['map'](_0x16b98c['options']['include'],function(_0x4eaf58){return{'model':db[_0x4eaf58[_0xca44('0x22')]],'as':_0x4eaf58['as'],'attributes':_0x4eaf58[_0xca44('0x23')],'include':_0x4eaf58[_0xca44('0x20')]?_['map'](_0x4eaf58[_0xca44('0x20')],function(_0x7ba82){return{'model':db[_0x7ba82[_0xca44('0x22')]],'as':_0x7ba82['as'],'attributes':_0x7ba82[_0xca44('0x23')],'include':_0x7ba82['include']?_[_0xca44('0x21')](_0x7ba82[_0xca44('0x20')],function(_0x40a615){return{'model':db[_0x40a615[_0xca44('0x22')]],'as':_0x40a615['as'],'attributes':_0x40a615[_0xca44('0x23')]};}):[]};}):[]};}):[]:[]})[_0xca44('0xd')](function(_0x2597cb){logger[_0xca44('0xe')]('ShowZohoAccount',_0x16b98c);logger['debug'](_0xca44('0x24'),_0x16b98c,JSON[_0xca44('0x12')](_0x2597cb));_0x2767af(_0x2597cb);})[_0xca44('0x18')](function(_0x1a9688){logger[_0xca44('0x13')]('ShowZohoAccount',_0x1a9688[_0xca44('0x16')],_0x16b98c);_0x59cf08(_0x131998[_0xca44('0x13')](0x1f4,_0x1a9688[_0xca44('0x16')]));});});};
\ No newline at end of file
+var _0x3cb4=['map','model','catch','ZohoAccount','raw','ShowZohoAccount','stringify','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','request','then','info','request\x20sent','debug','ZohoAccount,\x20%s,\x20%s,\x20%s','error','message','ZohoAccount,\x20%s,\x20%s','result','GetZohoAccount','findAll','options','where','attributes','limit','include'];(function(_0xc88cfd,_0x42898a){var _0x1e52b8=function(_0x58197b){while(--_0x58197b){_0xc88cfd['push'](_0xc88cfd['shift']());}};_0x1e52b8(++_0x42898a);}(_0x3cb4,0x1f1));var _0x43cb=function(_0x2dea24,_0x2fc021){_0x2dea24=_0x2dea24-0x0;var _0x309d58=_0x3cb4[_0x2dea24];return _0x309d58;};'use strict';var _=require('lodash');var util=require(_0x43cb('0x0'));var moment=require(_0x43cb('0x1'));var BPromise=require(_0x43cb('0x2'));var rs=require(_0x43cb('0x3'));var fs=require('fs');var Redis=require(_0x43cb('0x4'));var db=require(_0x43cb('0x5'))['db'];var utils=require(_0x43cb('0x6'));var logger=require(_0x43cb('0x7'))('rpc');var config=require(_0x43cb('0x8'));var jayson=require(_0x43cb('0x9'));var client=jayson[_0x43cb('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3246e8,_0xec9de8,_0x2d8768){return new BPromise(function(_0x5f0427,_0x209799){return client[_0x43cb('0xb')](_0x3246e8,_0x2d8768)[_0x43cb('0xc')](function(_0x313ac2){logger[_0x43cb('0xd')]('ZohoAccount,\x20%s,\x20%s',_0xec9de8,_0x43cb('0xe'));logger[_0x43cb('0xf')](_0x43cb('0x10'),_0xec9de8,'request\x20sent',JSON['stringify'](_0x313ac2));if(_0x313ac2[_0x43cb('0x11')]){if(_0x313ac2['error']['code']===0x1f4){logger['error']('ZohoAccount,\x20%s,\x20%s',_0xec9de8,_0x313ac2[_0x43cb('0x11')][_0x43cb('0x12')]);return _0x209799(_0x313ac2[_0x43cb('0x11')][_0x43cb('0x12')]);}logger[_0x43cb('0x11')](_0x43cb('0x13'),_0xec9de8,_0x313ac2[_0x43cb('0x11')][_0x43cb('0x12')]);return _0x5f0427(_0x313ac2[_0x43cb('0x11')][_0x43cb('0x12')]);}else{logger[_0x43cb('0xd')](_0x43cb('0x13'),_0xec9de8,_0x43cb('0xe'));_0x5f0427(_0x313ac2[_0x43cb('0x14')][_0x43cb('0x12')]);}})['catch'](function(_0x4d939b){logger['error'](_0x43cb('0x13'),_0xec9de8,_0x4d939b);_0x209799(_0x4d939b);});});}exports[_0x43cb('0x15')]=function(_0x4f52ce){var _0x2505ff=this;return new Promise(function(_0x131797,_0x44d792){return db['ZohoAccount'][_0x43cb('0x16')]({'raw':_0x4f52ce[_0x43cb('0x17')]?_0x4f52ce[_0x43cb('0x17')]['raw']===undefined?!![]:![]:!![],'where':_0x4f52ce['options']?_0x4f52ce[_0x43cb('0x17')][_0x43cb('0x18')]||null:null,'attributes':_0x4f52ce[_0x43cb('0x17')]?_0x4f52ce[_0x43cb('0x17')][_0x43cb('0x19')]||null:null,'limit':_0x4f52ce[_0x43cb('0x17')]?_0x4f52ce[_0x43cb('0x17')][_0x43cb('0x1a')]||null:null,'include':_0x4f52ce[_0x43cb('0x17')]?_0x4f52ce['options'][_0x43cb('0x1b')]?_[_0x43cb('0x1c')](_0x4f52ce[_0x43cb('0x17')][_0x43cb('0x1b')],function(_0x3b09b5){return{'model':db[_0x3b09b5['model']],'as':_0x3b09b5['as'],'attributes':_0x3b09b5[_0x43cb('0x19')],'include':_0x3b09b5[_0x43cb('0x1b')]?_['map'](_0x3b09b5['include'],function(_0xd4bbc2){return{'model':db[_0xd4bbc2[_0x43cb('0x1d')]],'as':_0xd4bbc2['as'],'attributes':_0xd4bbc2['attributes'],'include':_0xd4bbc2[_0x43cb('0x1b')]?_['map'](_0xd4bbc2[_0x43cb('0x1b')],function(_0x2dbd36){return{'model':db[_0x2dbd36[_0x43cb('0x1d')]],'as':_0x2dbd36['as'],'attributes':_0x2dbd36[_0x43cb('0x19')]};}):[]};}):[]};}):[]:[]})[_0x43cb('0xc')](function(_0x57dba8){logger[_0x43cb('0xd')](_0x43cb('0x15'),_0x4f52ce);logger['debug'](_0x43cb('0x15'),_0x4f52ce,JSON['stringify'](_0x57dba8));_0x131797(_0x57dba8);})[_0x43cb('0x1e')](function(_0x290aa1){logger[_0x43cb('0x11')](_0x43cb('0x15'),_0x290aa1[_0x43cb('0x12')],_0x4f52ce);_0x44d792(_0x2505ff['error'](0x1f4,_0x290aa1[_0x43cb('0x12')]));});});};exports['ShowZohoAccount']=function(_0x492484){var _0x57f9dd=this;return new Promise(function(_0x4d09b2,_0x4a8b22){return db[_0x43cb('0x1f')]['find']({'raw':_0x492484['options']?_0x492484[_0x43cb('0x17')][_0x43cb('0x20')]===undefined?!![]:![]:!![],'where':_0x492484[_0x43cb('0x17')]?_0x492484[_0x43cb('0x17')][_0x43cb('0x18')]||null:null,'attributes':_0x492484[_0x43cb('0x17')]?_0x492484[_0x43cb('0x17')][_0x43cb('0x19')]||null:null,'include':_0x492484[_0x43cb('0x17')]?_0x492484['options'][_0x43cb('0x1b')]?_[_0x43cb('0x1c')](_0x492484[_0x43cb('0x17')][_0x43cb('0x1b')],function(_0x230b91){return{'model':db[_0x230b91[_0x43cb('0x1d')]],'as':_0x230b91['as'],'attributes':_0x230b91[_0x43cb('0x19')],'include':_0x230b91[_0x43cb('0x1b')]?_[_0x43cb('0x1c')](_0x230b91['include'],function(_0x3f4608){return{'model':db[_0x3f4608[_0x43cb('0x1d')]],'as':_0x3f4608['as'],'attributes':_0x3f4608[_0x43cb('0x19')],'include':_0x3f4608[_0x43cb('0x1b')]?_['map'](_0x3f4608[_0x43cb('0x1b')],function(_0x27e1aa){return{'model':db[_0x27e1aa['model']],'as':_0x27e1aa['as'],'attributes':_0x27e1aa[_0x43cb('0x19')]};}):[]};}):[]};}):[]:[]})[_0x43cb('0xc')](function(_0x2326d6){logger[_0x43cb('0xd')](_0x43cb('0x21'),_0x492484);logger[_0x43cb('0xf')](_0x43cb('0x21'),_0x492484,JSON[_0x43cb('0x22')](_0x2326d6));_0x4d09b2(_0x2326d6);})['catch'](function(_0x5f3e93){logger['error'](_0x43cb('0x21'),_0x5f3e93['message'],_0x492484);_0x4a8b22(_0x57f9dd[_0x43cb('0x11')](0x1f4,_0x5f3e93['message']));});});};
\ No newline at end of file
index 14596b3..8da5e17 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x843b=['create','put','update','delete','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoConfiguration.controller','get','isAuthenticated','index','/:id','show','/:id/fields','/:id/subjects','getSubjects','/:id/descriptions','post'];(function(_0x46cee5,_0x41831c){var _0x196728=function(_0x186829){while(--_0x186829){_0x46cee5['push'](_0x46cee5['shift']());}};_0x196728(++_0x41831c);}(_0x843b,0xc5));var _0xb843=function(_0x257685,_0x2a88bd){_0x257685=_0x257685-0x0;var _0x30dcff=_0x843b[_0x257685];return _0x30dcff;};'use strict';var multer=require(_0xb843('0x0'));var util=require(_0xb843('0x1'));var path=require(_0xb843('0x2'));var timeout=require('connect-timeout');var express=require(_0xb843('0x3'));var router=express[_0xb843('0x4')]();var auth=require(_0xb843('0x5'));var interaction=require(_0xb843('0x6'));var config=require(_0xb843('0x7'));var controller=require(_0xb843('0x8'));router[_0xb843('0x9')]('/',auth[_0xb843('0xa')](),controller[_0xb843('0xb')]);router[_0xb843('0x9')](_0xb843('0xc'),auth[_0xb843('0xa')](),controller[_0xb843('0xd')]);router[_0xb843('0x9')](_0xb843('0xe'),auth[_0xb843('0xa')](),controller['getFields']);router[_0xb843('0x9')](_0xb843('0xf'),auth[_0xb843('0xa')](),controller[_0xb843('0x10')]);router[_0xb843('0x9')](_0xb843('0x11'),auth[_0xb843('0xa')](),controller['getDescriptions']);router[_0xb843('0x12')]('/',auth['isAuthenticated'](),controller[_0xb843('0x13')]);router[_0xb843('0x14')](_0xb843('0xc'),auth[_0xb843('0xa')](),controller[_0xb843('0x15')]);router[_0xb843('0x16')](_0xb843('0xc'),auth['isAuthenticated'](),controller['destroy']);module[_0xb843('0x17')]=router;
\ No newline at end of file
+var _0x7351=['post','create','update','destroy','exports','multer','util','path','connect-timeout','../../components/auth/service','../../components/interaction/service','../../config/environment','./intZohoConfiguration.controller','get','isAuthenticated','/:id','show','/:id/fields','getFields','/:id/subjects','getSubjects','/:id/descriptions'];(function(_0x55c06b,_0x1ab2da){var _0x12eb36=function(_0x4acd90){while(--_0x4acd90){_0x55c06b['push'](_0x55c06b['shift']());}};_0x12eb36(++_0x1ab2da);}(_0x7351,0x139));var _0x1735=function(_0x10da9e,_0x12c9e0){_0x10da9e=_0x10da9e-0x0;var _0x5d45e3=_0x7351[_0x10da9e];return _0x5d45e3;};'use strict';var multer=require(_0x1735('0x0'));var util=require(_0x1735('0x1'));var path=require(_0x1735('0x2'));var timeout=require(_0x1735('0x3'));var express=require('express');var router=express['Router']();var auth=require(_0x1735('0x4'));var interaction=require(_0x1735('0x5'));var config=require(_0x1735('0x6'));var controller=require(_0x1735('0x7'));router[_0x1735('0x8')]('/',auth[_0x1735('0x9')](),controller['index']);router[_0x1735('0x8')](_0x1735('0xa'),auth[_0x1735('0x9')](),controller[_0x1735('0xb')]);router[_0x1735('0x8')](_0x1735('0xc'),auth[_0x1735('0x9')](),controller[_0x1735('0xd')]);router[_0x1735('0x8')](_0x1735('0xe'),auth[_0x1735('0x9')](),controller[_0x1735('0xf')]);router[_0x1735('0x8')](_0x1735('0x10'),auth[_0x1735('0x9')](),controller['getDescriptions']);router[_0x1735('0x11')]('/',auth[_0x1735('0x9')](),controller[_0x1735('0x12')]);router['put']('/:id',auth['isAuthenticated'](),controller[_0x1735('0x13')]);router['delete'](_0x1735('0xa'),auth['isAuthenticated'](),controller[_0x1735('0x14')]);module[_0x1735('0x15')]=router;
\ No newline at end of file
index 5c2e7e7..533dc07 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeb79=['sequelize','exports','STRING'];(function(_0x3a3cd6,_0x8e111e){var _0x120930=function(_0x2a03e0){while(--_0x2a03e0){_0x3a3cd6['push'](_0x3a3cd6['shift']());}};_0x120930(++_0x8e111e);}(_0xeb79,0xa2));var _0x9eb7=function(_0x18c08a,_0x46e340){_0x18c08a=_0x18c08a-0x0;var _0x388429=_0xeb79[_0x18c08a];return _0x388429;};'use strict';var Sequelize=require(_0x9eb7('0x0'));module[_0x9eb7('0x1')]={'name':{'type':Sequelize[_0x9eb7('0x2')]},'description':{'type':Sequelize[_0x9eb7('0x2')]}};
\ No newline at end of file
+var _0xea71=['sequelize','exports','STRING'];(function(_0x36d2a1,_0x176456){var _0x5de65d=function(_0xb44b57){while(--_0xb44b57){_0x36d2a1['push'](_0x36d2a1['shift']());}};_0x5de65d(++_0x176456);}(_0xea71,0xf6));var _0x1ea7=function(_0x119312,_0xa26670){_0x119312=_0x119312-0x0;var _0x238baf=_0xea71[_0x119312];return _0x238baf;};'use strict';var Sequelize=require(_0x1ea7('0x0'));module[_0x1ea7('0x1')]={'name':{'type':Sequelize[_0x1ea7('0x2')]},'description':{'type':Sequelize[_0x1ea7('0x2')]}};
\ No newline at end of file
index 738cb4a..9dfa799 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xef89=['length','hasOwnProperty','order','sort','where','pick','filter','map','key','VIRTUAL','field','merge','options','count','includeAll','include','rows','catch','show','params','rawAttributes','find','create','body','getFields','ZohoField','getSubjects','findOne','nolimit','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../mysqldb','jayson/promise','http','request','then','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','ZohoConfiguration,\x20%s,\x20%s','message','result','sendStatus','json','offset','limit','status','set','apply','reject','save','update','destroy','end','stack','name','ZohoConfiguration','model','keys','query','filters','intersection','attributes','fields'];(function(_0x409237,_0xe36701){var _0x2b3e72=function(_0x9c719f){while(--_0x9c719f){_0x409237['push'](_0x409237['shift']());}};_0x2b3e72(++_0xe36701);}(_0xef89,0x76));var _0x9ef8=function(_0x493dab,_0x49fc3f){_0x493dab=_0x493dab-0x0;var _0x4836f1=_0xef89[_0x493dab];return _0x4836f1;};'use strict';var pdf=require(_0x9ef8('0x0'));var emlformat=require(_0x9ef8('0x1'));var rimraf=require(_0x9ef8('0x2'));var zipdir=require(_0x9ef8('0x3'));var jsonpatch=require(_0x9ef8('0x4'));var rp=require(_0x9ef8('0x5'));var moment=require(_0x9ef8('0x6'));var BPromise=require(_0x9ef8('0x7'));var Mustache=require(_0x9ef8('0x8'));var util=require(_0x9ef8('0x9'));var path=require(_0x9ef8('0xa'));var sox=require(_0x9ef8('0xb'));var csv=require(_0x9ef8('0xc'));var ejs=require(_0x9ef8('0xd'));var fs=require('fs');var _=require('lodash');var squel=require(_0x9ef8('0xe'));var crypto=require(_0x9ef8('0xf'));var jsforce=require(_0x9ef8('0x10'));var deskjs=require(_0x9ef8('0x11'));var toCsv=require(_0x9ef8('0xc'));var querystring=require(_0x9ef8('0x12'));var Papa=require(_0x9ef8('0x13'));var authService=require('../../components/auth/service');var hardwareService=require(_0x9ef8('0x14'));var Redis=require(_0x9ef8('0x15'));var qs=require(_0x9ef8('0x16'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x9ef8('0x17'))['db'];var jayson=require(_0x9ef8('0x18'));var client=jayson['client'][_0x9ef8('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x113b5c,_0x161c8e,_0x59af72,_0x230794){return new BPromise(function(_0x5c1653,_0x42f5bf){var _0x4d1f31=_0x230794||client;return _0x4d1f31[_0x9ef8('0x1a')](_0x113b5c,_0x59af72)[_0x9ef8('0x1b')](function(_0xc7a427){logger['info']('ZohoConfiguration,\x20%s,\x20%s',_0x161c8e,'request\x20sent');logger[_0x9ef8('0x1c')](_0x9ef8('0x1d'),_0x161c8e,_0x9ef8('0x1e'),JSON['stringify'](_0xc7a427));if(_0xc7a427[_0x9ef8('0x1f')]){if(_0xc7a427[_0x9ef8('0x1f')][_0x9ef8('0x20')]===0x1f4){logger[_0x9ef8('0x1f')](_0x9ef8('0x21'),_0x161c8e,_0xc7a427['error'][_0x9ef8('0x22')]);return _0x42f5bf(_0xc7a427['error']['message']);}logger[_0x9ef8('0x1f')](_0x9ef8('0x21'),_0x161c8e,_0xc7a427[_0x9ef8('0x1f')][_0x9ef8('0x22')]);return _0x5c1653(_0xc7a427[_0x9ef8('0x1f')]['message']);}else{logger['info']('ZohoConfiguration,\x20%s,\x20%s',_0x161c8e,_0x9ef8('0x1e'));_0x5c1653(_0xc7a427[_0x9ef8('0x23')][_0x9ef8('0x22')]);}})['catch'](function(_0x47556d){logger[_0x9ef8('0x1f')](_0x9ef8('0x21'),_0x161c8e,_0x47556d);_0x42f5bf(_0x47556d);});});}function respondWithStatusCode(_0xefef2,_0x556cda){_0x556cda=_0x556cda||0xcc;return function(_0x480bfc){if(_0x480bfc){return _0xefef2[_0x9ef8('0x24')](_0x556cda);}return _0xefef2['status'](_0x556cda)['end']();};}function respondWithResult(_0x16e407,_0x554d73){_0x554d73=_0x554d73||0xc8;return function(_0x4e070f){if(_0x4e070f){return _0x16e407['status'](_0x554d73)[_0x9ef8('0x25')](_0x4e070f);}};}function respondWithFilteredResult(_0x4f77ae,_0x34559b){return function(_0x3ce341){if(_0x3ce341){var _0x223821=_0x3ce341['count'],_0x4b9825=_0x34559b[_0x9ef8('0x26')],_0x11c9e8=_0x34559b[_0x9ef8('0x26')]+_0x34559b[_0x9ef8('0x27')],_0x5728d5;if(_0x11c9e8>=_0x223821){_0x11c9e8=_0x223821;_0x5728d5=0xc8;}else{_0x5728d5=0xce;}_0x4f77ae[_0x9ef8('0x28')](_0x5728d5);return _0x4f77ae[_0x9ef8('0x29')]('Content-Range',_0x4b9825+'-'+_0x11c9e8+'/'+_0x223821)[_0x9ef8('0x25')](_0x3ce341);}return null;};}function patchUpdates(_0x29cfee){return function(_0x16dac){try{jsonpatch[_0x9ef8('0x2a')](_0x16dac,_0x29cfee,!![]);}catch(_0x520b3d){return BPromise[_0x9ef8('0x2b')](_0x520b3d);}return _0x16dac[_0x9ef8('0x2c')]();};}function saveUpdates(_0x18894f,_0x399e47){return function(_0x207477){if(_0x207477){return _0x207477[_0x9ef8('0x2d')](_0x18894f)['then'](function(_0x35d896){return _0x35d896;});}return null;};}function removeEntity(_0x563473,_0x22fa56){return function(_0x48165f){if(_0x48165f){return _0x48165f[_0x9ef8('0x2e')]()[_0x9ef8('0x1b')](function(){_0x563473[_0x9ef8('0x28')](0xcc)[_0x9ef8('0x2f')]();});}};}function handleEntityNotFound(_0x15a5c0,_0xe229c9){return function(_0x4c53a0){if(!_0x4c53a0){_0x15a5c0[_0x9ef8('0x24')](0x194);}return _0x4c53a0;};}function handleError(_0x4bf82d,_0x46987c){_0x46987c=_0x46987c||0x1f4;return function(_0x56e1e5){logger[_0x9ef8('0x1f')](_0x56e1e5[_0x9ef8('0x30')]);if(_0x56e1e5[_0x9ef8('0x31')]){delete _0x56e1e5['name'];}_0x4bf82d[_0x9ef8('0x28')](_0x46987c)['send'](_0x56e1e5);};}exports['index']=function(_0x250cdc,_0x461ae8){var _0x1f6816={},_0x4ed31d={},_0x1db1b7={'count':0x0,'rows':[]};var _0x155b18=db[_0x9ef8('0x32')]['rawAttributes'];_0x4ed31d[_0x9ef8('0x33')]=_[_0x9ef8('0x34')](_0x155b18);_0x4ed31d[_0x9ef8('0x35')]=_['keys'](_0x250cdc[_0x9ef8('0x35')]);_0x4ed31d[_0x9ef8('0x36')]=_[_0x9ef8('0x37')](_0x4ed31d[_0x9ef8('0x33')],_0x4ed31d['query']);_0x1f6816[_0x9ef8('0x38')]=_[_0x9ef8('0x37')](_0x4ed31d[_0x9ef8('0x33')],qs['fields'](_0x250cdc[_0x9ef8('0x35')][_0x9ef8('0x39')]));_0x1f6816['attributes']=_0x1f6816[_0x9ef8('0x38')][_0x9ef8('0x3a')]?_0x1f6816[_0x9ef8('0x38')]:_0x4ed31d[_0x9ef8('0x33')];if(!_0x250cdc['query'][_0x9ef8('0x3b')]('nolimit')){_0x1f6816[_0x9ef8('0x27')]=qs[_0x9ef8('0x27')](_0x250cdc[_0x9ef8('0x35')][_0x9ef8('0x27')]);_0x1f6816[_0x9ef8('0x26')]=qs[_0x9ef8('0x26')](_0x250cdc['query'][_0x9ef8('0x26')]);}_0x1f6816[_0x9ef8('0x3c')]=qs[_0x9ef8('0x3d')](_0x250cdc[_0x9ef8('0x35')][_0x9ef8('0x3d')]);_0x1f6816[_0x9ef8('0x3e')]=qs['filters'](_[_0x9ef8('0x3f')](_0x250cdc['query'],_0x4ed31d[_0x9ef8('0x36')]));if(_0x250cdc[_0x9ef8('0x35')][_0x9ef8('0x40')]){_0x1f6816[_0x9ef8('0x3e')]=_['merge'](_0x1f6816['where'],{'$or':_[_0x9ef8('0x41')](_0x155b18,function(_0x5a1975){if(_0x5a1975['type'][_0x9ef8('0x42')]!==_0x9ef8('0x43')){var _0xc2f4cd={};_0xc2f4cd[_0x5a1975[_0x9ef8('0x44')]]={'$like':'%'+_0x250cdc[_0x9ef8('0x35')]['filter']+'%'};return _0xc2f4cd;}})});}_0x1f6816=_[_0x9ef8('0x45')]({},_0x1f6816,_0x250cdc[_0x9ef8('0x46')]);var _0xb7feb4={'where':_0x1f6816[_0x9ef8('0x3e')]};return db[_0x9ef8('0x32')]['count'](_0xb7feb4)[_0x9ef8('0x1b')](function(_0x5ddb8e){_0x1db1b7[_0x9ef8('0x47')]=_0x5ddb8e;if(_0x250cdc[_0x9ef8('0x35')][_0x9ef8('0x48')]){_0x1f6816[_0x9ef8('0x49')]=[{'all':!![]}];}return db[_0x9ef8('0x32')]['findAll'](_0x1f6816);})[_0x9ef8('0x1b')](function(_0x50a4e9){_0x1db1b7[_0x9ef8('0x4a')]=_0x50a4e9;return _0x1db1b7;})[_0x9ef8('0x1b')](respondWithFilteredResult(_0x461ae8,_0x1f6816))[_0x9ef8('0x4b')](handleError(_0x461ae8,null));};exports[_0x9ef8('0x4c')]=function(_0xcc6123,_0x3af5c7){var _0x243187={'raw':![],'where':{'id':_0xcc6123[_0x9ef8('0x4d')]['id']}},_0x24e21c={};_0x24e21c[_0x9ef8('0x33')]=_[_0x9ef8('0x34')](db[_0x9ef8('0x32')][_0x9ef8('0x4e')]);_0x24e21c['query']=_[_0x9ef8('0x34')](_0xcc6123['query']);_0x24e21c[_0x9ef8('0x36')]=_[_0x9ef8('0x37')](_0x24e21c[_0x9ef8('0x33')],_0x24e21c[_0x9ef8('0x35')]);_0x243187[_0x9ef8('0x38')]=_['intersection'](_0x24e21c['model'],qs[_0x9ef8('0x39')](_0xcc6123[_0x9ef8('0x35')]['fields']));_0x243187[_0x9ef8('0x38')]=_0x243187[_0x9ef8('0x38')]['length']?_0x243187['attributes']:_0x24e21c['model'];if(_0xcc6123[_0x9ef8('0x35')]['includeAll']){_0x243187[_0x9ef8('0x49')]=[{'all':!![]}];}_0x243187=_[_0x9ef8('0x45')]({},_0x243187,_0xcc6123[_0x9ef8('0x46')]);return db[_0x9ef8('0x32')][_0x9ef8('0x4f')](_0x243187)[_0x9ef8('0x1b')](handleEntityNotFound(_0x3af5c7,null))[_0x9ef8('0x1b')](respondWithResult(_0x3af5c7,null))[_0x9ef8('0x4b')](handleError(_0x3af5c7,null));};exports['create']=function(_0x48d31a,_0x5d4424){return db[_0x9ef8('0x32')][_0x9ef8('0x50')](_0x48d31a[_0x9ef8('0x51')],{})[_0x9ef8('0x1b')](respondWithResult(_0x5d4424,0xc9))['catch'](handleError(_0x5d4424,null));};exports['update']=function(_0x3f0b24,_0x588a4f){if(_0x3f0b24[_0x9ef8('0x51')]['id']){delete _0x3f0b24[_0x9ef8('0x51')]['id'];}return db['ZohoConfiguration'][_0x9ef8('0x4f')]({'where':{'id':_0x3f0b24['params']['id']}})['then'](handleEntityNotFound(_0x588a4f,null))['then'](saveUpdates(_0x3f0b24[_0x9ef8('0x51')],null))[_0x9ef8('0x1b')](respondWithResult(_0x588a4f,null))['catch'](handleError(_0x588a4f,null));};exports[_0x9ef8('0x2e')]=function(_0x3d7374,_0x294d82){return db['ZohoConfiguration'][_0x9ef8('0x4f')]({'where':{'id':_0x3d7374['params']['id']}})[_0x9ef8('0x1b')](handleEntityNotFound(_0x294d82,null))[_0x9ef8('0x1b')](removeEntity(_0x294d82,null))[_0x9ef8('0x4b')](handleError(_0x294d82,null));};exports[_0x9ef8('0x52')]=function(_0x126442,_0x194786,_0x10d094){var _0x43d1c2={};var _0x29927b={};var _0x8259e7;var _0x37086c;return db['ZohoConfiguration']['findOne']({'where':{'id':_0x126442[_0x9ef8('0x4d')]['id']}})['then'](handleEntityNotFound(_0x194786,null))[_0x9ef8('0x1b')](function(_0x58a189){if(_0x58a189){_0x8259e7=_0x58a189;_0x29927b[_0x9ef8('0x33')]=_[_0x9ef8('0x34')](db[_0x9ef8('0x53')][_0x9ef8('0x4e')]);_0x29927b[_0x9ef8('0x35')]=_[_0x9ef8('0x34')](_0x126442[_0x9ef8('0x35')]);_0x29927b[_0x9ef8('0x36')]=_['intersection'](_0x29927b['model'],_0x29927b['query']);_0x43d1c2[_0x9ef8('0x38')]=_['intersection'](_0x29927b['model'],qs[_0x9ef8('0x39')](_0x126442[_0x9ef8('0x35')][_0x9ef8('0x39')]));_0x43d1c2[_0x9ef8('0x38')]=_0x43d1c2[_0x9ef8('0x38')]['length']?_0x43d1c2['attributes']:_0x29927b[_0x9ef8('0x33')];_0x43d1c2[_0x9ef8('0x3c')]=qs[_0x9ef8('0x3d')](_0x126442[_0x9ef8('0x35')]['sort']);_0x43d1c2[_0x9ef8('0x3e')]=qs['filters'](_[_0x9ef8('0x3f')](_0x126442[_0x9ef8('0x35')],_0x29927b[_0x9ef8('0x36')]));if(_0x126442[_0x9ef8('0x35')][_0x9ef8('0x40')]){_0x43d1c2[_0x9ef8('0x3e')]=_['merge'](_0x43d1c2[_0x9ef8('0x3e')],{'$or':_['map'](_0x43d1c2[_0x9ef8('0x38')],function(_0x1db06c){var _0x30fb4e={};_0x30fb4e[_0x1db06c]={'$like':'%'+_0x126442['query'][_0x9ef8('0x40')]+'%'};return _0x30fb4e;})});}_0x43d1c2=_[_0x9ef8('0x45')]({},_0x43d1c2,_0x126442[_0x9ef8('0x46')]);return _0x8259e7[_0x9ef8('0x52')](_0x43d1c2);}})[_0x9ef8('0x1b')](function(_0x3496f8){if(_0x3496f8){_0x37086c=_0x3496f8['length'];if(!_0x126442[_0x9ef8('0x35')]['hasOwnProperty']('nolimit')){_0x43d1c2[_0x9ef8('0x27')]=qs['limit'](_0x126442[_0x9ef8('0x35')][_0x9ef8('0x27')]);_0x43d1c2[_0x9ef8('0x26')]=qs['offset'](_0x126442['query'][_0x9ef8('0x26')]);}return _0x8259e7[_0x9ef8('0x52')](_0x43d1c2);}})[_0x9ef8('0x1b')](function(_0x2b4c28){if(_0x2b4c28){return _0x2b4c28?{'count':_0x37086c,'rows':_0x2b4c28}:null;}})['then'](respondWithResult(_0x194786,null))[_0x9ef8('0x4b')](handleError(_0x194786,null));};exports[_0x9ef8('0x54')]=function(_0x101140,_0x46f85f,_0x4c03c6){var _0x4ad3c1={};var _0x50047e={};var _0x214ec6;var _0x498542;return db[_0x9ef8('0x32')][_0x9ef8('0x55')]({'where':{'id':_0x101140[_0x9ef8('0x4d')]['id']}})[_0x9ef8('0x1b')](handleEntityNotFound(_0x46f85f,null))['then'](function(_0x45ddfe){if(_0x45ddfe){_0x214ec6=_0x45ddfe;_0x50047e[_0x9ef8('0x33')]=_[_0x9ef8('0x34')](db['ZohoField'][_0x9ef8('0x4e')]);_0x50047e[_0x9ef8('0x35')]=_[_0x9ef8('0x34')](_0x101140[_0x9ef8('0x35')]);_0x50047e[_0x9ef8('0x36')]=_['intersection'](_0x50047e['model'],_0x50047e[_0x9ef8('0x35')]);_0x4ad3c1[_0x9ef8('0x38')]=_[_0x9ef8('0x37')](_0x50047e[_0x9ef8('0x33')],qs['fields'](_0x101140[_0x9ef8('0x35')][_0x9ef8('0x39')]));_0x4ad3c1['attributes']=_0x4ad3c1[_0x9ef8('0x38')][_0x9ef8('0x3a')]?_0x4ad3c1[_0x9ef8('0x38')]:_0x50047e['model'];_0x4ad3c1['order']=qs[_0x9ef8('0x3d')](_0x101140[_0x9ef8('0x35')][_0x9ef8('0x3d')]);_0x4ad3c1[_0x9ef8('0x3e')]=qs[_0x9ef8('0x36')](_[_0x9ef8('0x3f')](_0x101140[_0x9ef8('0x35')],_0x50047e['filters']));if(_0x101140[_0x9ef8('0x35')][_0x9ef8('0x40')]){_0x4ad3c1['where']=_[_0x9ef8('0x45')](_0x4ad3c1['where'],{'$or':_[_0x9ef8('0x41')](_0x4ad3c1[_0x9ef8('0x38')],function(_0x3e7880){var _0xc7a4eb={};_0xc7a4eb[_0x3e7880]={'$like':'%'+_0x101140[_0x9ef8('0x35')]['filter']+'%'};return _0xc7a4eb;})});}_0x4ad3c1=_[_0x9ef8('0x45')]({},_0x4ad3c1,_0x101140[_0x9ef8('0x46')]);return _0x214ec6[_0x9ef8('0x54')](_0x4ad3c1);}})['then'](function(_0x214cf6){if(_0x214cf6){_0x498542=_0x214cf6['length'];if(!_0x101140[_0x9ef8('0x35')][_0x9ef8('0x3b')](_0x9ef8('0x56'))){_0x4ad3c1[_0x9ef8('0x27')]=qs[_0x9ef8('0x27')](_0x101140['query']['limit']);_0x4ad3c1[_0x9ef8('0x26')]=qs['offset'](_0x101140['query'][_0x9ef8('0x26')]);}return _0x214ec6[_0x9ef8('0x54')](_0x4ad3c1);}})['then'](function(_0x5d283){if(_0x5d283){return _0x5d283?{'count':_0x498542,'rows':_0x5d283}:null;}})[_0x9ef8('0x1b')](respondWithResult(_0x46f85f,null))[_0x9ef8('0x4b')](handleError(_0x46f85f,null));};exports['getDescriptions']=function(_0x31c8db,_0x43a7b9,_0x345ede){var _0x3af20f={};var _0x574c03={};var _0x15a917;var _0x572192;return db[_0x9ef8('0x32')]['findOne']({'where':{'id':_0x31c8db[_0x9ef8('0x4d')]['id']}})[_0x9ef8('0x1b')](handleEntityNotFound(_0x43a7b9,null))[_0x9ef8('0x1b')](function(_0x431b25){if(_0x431b25){_0x15a917=_0x431b25;_0x574c03[_0x9ef8('0x33')]=_[_0x9ef8('0x34')](db[_0x9ef8('0x53')][_0x9ef8('0x4e')]);_0x574c03[_0x9ef8('0x35')]=_['keys'](_0x31c8db[_0x9ef8('0x35')]);_0x574c03[_0x9ef8('0x36')]=_[_0x9ef8('0x37')](_0x574c03[_0x9ef8('0x33')],_0x574c03[_0x9ef8('0x35')]);_0x3af20f[_0x9ef8('0x38')]=_['intersection'](_0x574c03[_0x9ef8('0x33')],qs[_0x9ef8('0x39')](_0x31c8db[_0x9ef8('0x35')]['fields']));_0x3af20f[_0x9ef8('0x38')]=_0x3af20f[_0x9ef8('0x38')][_0x9ef8('0x3a')]?_0x3af20f['attributes']:_0x574c03[_0x9ef8('0x33')];_0x3af20f['order']=qs[_0x9ef8('0x3d')](_0x31c8db[_0x9ef8('0x35')][_0x9ef8('0x3d')]);_0x3af20f[_0x9ef8('0x3e')]=qs[_0x9ef8('0x36')](_[_0x9ef8('0x3f')](_0x31c8db[_0x9ef8('0x35')],_0x574c03[_0x9ef8('0x36')]));if(_0x31c8db['query'][_0x9ef8('0x40')]){_0x3af20f[_0x9ef8('0x3e')]=_[_0x9ef8('0x45')](_0x3af20f[_0x9ef8('0x3e')],{'$or':_[_0x9ef8('0x41')](_0x3af20f[_0x9ef8('0x38')],function(_0x1292e3){var _0x229047={};_0x229047[_0x1292e3]={'$like':'%'+_0x31c8db[_0x9ef8('0x35')][_0x9ef8('0x40')]+'%'};return _0x229047;})});}_0x3af20f=_[_0x9ef8('0x45')]({},_0x3af20f,_0x31c8db[_0x9ef8('0x46')]);return _0x15a917[_0x9ef8('0x57')](_0x3af20f);}})['then'](function(_0x3e7372){if(_0x3e7372){_0x572192=_0x3e7372[_0x9ef8('0x3a')];if(!_0x31c8db['query']['hasOwnProperty'](_0x9ef8('0x56'))){_0x3af20f['limit']=qs['limit'](_0x31c8db[_0x9ef8('0x35')][_0x9ef8('0x27')]);_0x3af20f['offset']=qs[_0x9ef8('0x26')](_0x31c8db[_0x9ef8('0x35')][_0x9ef8('0x26')]);}return _0x15a917['getDescriptions'](_0x3af20f);}})[_0x9ef8('0x1b')](function(_0x284120){if(_0x284120){return _0x284120?{'count':_0x572192,'rows':_0x284120}:null;}})[_0x9ef8('0x1b')](respondWithResult(_0x43a7b9,null))[_0x9ef8('0x4b')](handleError(_0x43a7b9,null));};
\ No newline at end of file
+var _0x0788=['result','catch','sendStatus','status','end','json','count','offset','limit','Content-Range','apply','reject','save','update','destroy','stack','name','index','ZohoConfiguration','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','nolimit','order','sort','filter','merge','where','map','key','VIRTUAL','field','options','findAll','rows','show','params','include','find','create','body','getFields','ZohoField','pick','hasOwnProperty','findOne','getSubjects','getDescriptions','html-pdf','eml-format','rimraf','zip-dir','moment','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','client','http','then','info','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','message','error'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0x0788,0x1da));var _0x8078=function(_0x3c2968,_0x5d3d17){_0x3c2968=_0x3c2968-0x0;var _0x4dadb0=_0x0788[_0x3c2968];return _0x4dadb0;};'use strict';var pdf=require(_0x8078('0x0'));var emlformat=require(_0x8078('0x1'));var rimraf=require(_0x8078('0x2'));var zipdir=require(_0x8078('0x3'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x8078('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x8078('0x5'));var util=require(_0x8078('0x6'));var path=require(_0x8078('0x7'));var sox=require(_0x8078('0x8'));var csv=require(_0x8078('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x8078('0xa'));var squel=require(_0x8078('0xb'));var crypto=require(_0x8078('0xc'));var jsforce=require(_0x8078('0xd'));var deskjs=require(_0x8078('0xe'));var toCsv=require(_0x8078('0x9'));var querystring=require('querystring');var Papa=require(_0x8078('0xf'));var authService=require(_0x8078('0x10'));var hardwareService=require(_0x8078('0x11'));var Redis=require('ioredis');var qs=require(_0x8078('0x12'));var logger=require(_0x8078('0x13'))(_0x8078('0x14'));var utils=require(_0x8078('0x15'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];var jayson=require('jayson/promise');var client=jayson[_0x8078('0x16')][_0x8078('0x17')]({'port':0x232a});function respondWithRpcPromise(_0x503713,_0x9b63c7,_0x4cab38,_0x4a52bf){return new BPromise(function(_0x401160,_0x1583fd){var _0x223561=_0x4a52bf||client;return _0x223561['request'](_0x503713,_0x4cab38)[_0x8078('0x18')](function(_0x38deaf){logger[_0x8078('0x19')](_0x8078('0x1a'),_0x9b63c7,_0x8078('0x1b'));logger['debug']('ZohoConfiguration,\x20%s,\x20%s,\x20%s',_0x9b63c7,_0x8078('0x1b'),JSON['stringify'](_0x38deaf));if(_0x38deaf['error']){if(_0x38deaf['error']['code']===0x1f4){logger['error']('ZohoConfiguration,\x20%s,\x20%s',_0x9b63c7,_0x38deaf['error'][_0x8078('0x1c')]);return _0x1583fd(_0x38deaf[_0x8078('0x1d')]['message']);}logger['error'](_0x8078('0x1a'),_0x9b63c7,_0x38deaf[_0x8078('0x1d')]['message']);return _0x401160(_0x38deaf['error'][_0x8078('0x1c')]);}else{logger[_0x8078('0x19')](_0x8078('0x1a'),_0x9b63c7,'request\x20sent');_0x401160(_0x38deaf[_0x8078('0x1e')][_0x8078('0x1c')]);}})[_0x8078('0x1f')](function(_0xee10ab){logger['error'](_0x8078('0x1a'),_0x9b63c7,_0xee10ab);_0x1583fd(_0xee10ab);});});}function respondWithStatusCode(_0x531e36,_0x47c40c){_0x47c40c=_0x47c40c||0xcc;return function(_0x595795){if(_0x595795){return _0x531e36[_0x8078('0x20')](_0x47c40c);}return _0x531e36[_0x8078('0x21')](_0x47c40c)[_0x8078('0x22')]();};}function respondWithResult(_0x1e03c6,_0x4ef29f){_0x4ef29f=_0x4ef29f||0xc8;return function(_0x46b283){if(_0x46b283){return _0x1e03c6[_0x8078('0x21')](_0x4ef29f)[_0x8078('0x23')](_0x46b283);}};}function respondWithFilteredResult(_0x2ee3b2,_0x3521a9){return function(_0x4da70d){if(_0x4da70d){var _0x35d7db=_0x4da70d[_0x8078('0x24')],_0xd57853=_0x3521a9['offset'],_0xaf5f4d=_0x3521a9[_0x8078('0x25')]+_0x3521a9[_0x8078('0x26')],_0x4623e8;if(_0xaf5f4d>=_0x35d7db){_0xaf5f4d=_0x35d7db;_0x4623e8=0xc8;}else{_0x4623e8=0xce;}_0x2ee3b2[_0x8078('0x21')](_0x4623e8);return _0x2ee3b2['set'](_0x8078('0x27'),_0xd57853+'-'+_0xaf5f4d+'/'+_0x35d7db)[_0x8078('0x23')](_0x4da70d);}return null;};}function patchUpdates(_0x43a104){return function(_0x5f1c60){try{jsonpatch[_0x8078('0x28')](_0x5f1c60,_0x43a104,!![]);}catch(_0x219b67){return BPromise[_0x8078('0x29')](_0x219b67);}return _0x5f1c60[_0x8078('0x2a')]();};}function saveUpdates(_0x4c4950,_0x3a34b6){return function(_0x5a298c){if(_0x5a298c){return _0x5a298c[_0x8078('0x2b')](_0x4c4950)['then'](function(_0x1631c1){return _0x1631c1;});}return null;};}function removeEntity(_0x5f0ce5,_0x2165ac){return function(_0x3b58f5){if(_0x3b58f5){return _0x3b58f5[_0x8078('0x2c')]()[_0x8078('0x18')](function(){_0x5f0ce5[_0x8078('0x21')](0xcc)[_0x8078('0x22')]();});}};}function handleEntityNotFound(_0x4fdc35,_0x42bf2d){return function(_0x282aa0){if(!_0x282aa0){_0x4fdc35[_0x8078('0x20')](0x194);}return _0x282aa0;};}function handleError(_0x2fab5e,_0x2850dd){_0x2850dd=_0x2850dd||0x1f4;return function(_0x1869cc){logger[_0x8078('0x1d')](_0x1869cc[_0x8078('0x2d')]);if(_0x1869cc[_0x8078('0x2e')]){delete _0x1869cc[_0x8078('0x2e')];}_0x2fab5e['status'](_0x2850dd)['send'](_0x1869cc);};}exports[_0x8078('0x2f')]=function(_0x306a75,_0xffa105){var _0x5e05c9={},_0x2bd082={},_0x4acb7f={'count':0x0,'rows':[]};var _0x1c969d=db[_0x8078('0x30')][_0x8078('0x31')];_0x2bd082['model']=_[_0x8078('0x32')](_0x1c969d);_0x2bd082[_0x8078('0x33')]=_[_0x8078('0x32')](_0x306a75[_0x8078('0x33')]);_0x2bd082[_0x8078('0x34')]=_[_0x8078('0x35')](_0x2bd082[_0x8078('0x36')],_0x2bd082[_0x8078('0x33')]);_0x5e05c9[_0x8078('0x37')]=_['intersection'](_0x2bd082['model'],qs[_0x8078('0x38')](_0x306a75[_0x8078('0x33')][_0x8078('0x38')]));_0x5e05c9[_0x8078('0x37')]=_0x5e05c9[_0x8078('0x37')][_0x8078('0x39')]?_0x5e05c9[_0x8078('0x37')]:_0x2bd082[_0x8078('0x36')];if(!_0x306a75['query']['hasOwnProperty'](_0x8078('0x3a'))){_0x5e05c9['limit']=qs[_0x8078('0x26')](_0x306a75[_0x8078('0x33')]['limit']);_0x5e05c9[_0x8078('0x25')]=qs[_0x8078('0x25')](_0x306a75['query']['offset']);}_0x5e05c9[_0x8078('0x3b')]=qs[_0x8078('0x3c')](_0x306a75[_0x8078('0x33')]['sort']);_0x5e05c9['where']=qs[_0x8078('0x34')](_['pick'](_0x306a75[_0x8078('0x33')],_0x2bd082[_0x8078('0x34')]));if(_0x306a75['query'][_0x8078('0x3d')]){_0x5e05c9['where']=_[_0x8078('0x3e')](_0x5e05c9[_0x8078('0x3f')],{'$or':_[_0x8078('0x40')](_0x1c969d,function(_0x4de19a){if(_0x4de19a['type'][_0x8078('0x41')]!==_0x8078('0x42')){var _0x471dd9={};_0x471dd9[_0x4de19a[_0x8078('0x43')]]={'$like':'%'+_0x306a75[_0x8078('0x33')][_0x8078('0x3d')]+'%'};return _0x471dd9;}})});}_0x5e05c9=_[_0x8078('0x3e')]({},_0x5e05c9,_0x306a75[_0x8078('0x44')]);var _0x109cd3={'where':_0x5e05c9[_0x8078('0x3f')]};return db[_0x8078('0x30')][_0x8078('0x24')](_0x109cd3)['then'](function(_0x494ec9){_0x4acb7f[_0x8078('0x24')]=_0x494ec9;if(_0x306a75[_0x8078('0x33')]['includeAll']){_0x5e05c9['include']=[{'all':!![]}];}return db[_0x8078('0x30')][_0x8078('0x45')](_0x5e05c9);})[_0x8078('0x18')](function(_0x4f8a69){_0x4acb7f[_0x8078('0x46')]=_0x4f8a69;return _0x4acb7f;})[_0x8078('0x18')](respondWithFilteredResult(_0xffa105,_0x5e05c9))[_0x8078('0x1f')](handleError(_0xffa105,null));};exports[_0x8078('0x47')]=function(_0x5c118a,_0x2b277){var _0x366c51={'raw':![],'where':{'id':_0x5c118a[_0x8078('0x48')]['id']}},_0x46bf32={};_0x46bf32[_0x8078('0x36')]=_[_0x8078('0x32')](db['ZohoConfiguration'][_0x8078('0x31')]);_0x46bf32[_0x8078('0x33')]=_[_0x8078('0x32')](_0x5c118a[_0x8078('0x33')]);_0x46bf32[_0x8078('0x34')]=_[_0x8078('0x35')](_0x46bf32[_0x8078('0x36')],_0x46bf32['query']);_0x366c51[_0x8078('0x37')]=_[_0x8078('0x35')](_0x46bf32[_0x8078('0x36')],qs['fields'](_0x5c118a[_0x8078('0x33')]['fields']));_0x366c51[_0x8078('0x37')]=_0x366c51[_0x8078('0x37')][_0x8078('0x39')]?_0x366c51['attributes']:_0x46bf32[_0x8078('0x36')];if(_0x5c118a[_0x8078('0x33')]['includeAll']){_0x366c51[_0x8078('0x49')]=[{'all':!![]}];}_0x366c51=_['merge']({},_0x366c51,_0x5c118a[_0x8078('0x44')]);return db[_0x8078('0x30')][_0x8078('0x4a')](_0x366c51)[_0x8078('0x18')](handleEntityNotFound(_0x2b277,null))[_0x8078('0x18')](respondWithResult(_0x2b277,null))[_0x8078('0x1f')](handleError(_0x2b277,null));};exports[_0x8078('0x4b')]=function(_0x193990,_0x448c1d){return db[_0x8078('0x30')][_0x8078('0x4b')](_0x193990[_0x8078('0x4c')],{})[_0x8078('0x18')](respondWithResult(_0x448c1d,0xc9))[_0x8078('0x1f')](handleError(_0x448c1d,null));};exports[_0x8078('0x2b')]=function(_0x499d10,_0x422f27){if(_0x499d10['body']['id']){delete _0x499d10[_0x8078('0x4c')]['id'];}return db[_0x8078('0x30')][_0x8078('0x4a')]({'where':{'id':_0x499d10['params']['id']}})[_0x8078('0x18')](handleEntityNotFound(_0x422f27,null))[_0x8078('0x18')](saveUpdates(_0x499d10[_0x8078('0x4c')],null))[_0x8078('0x18')](respondWithResult(_0x422f27,null))[_0x8078('0x1f')](handleError(_0x422f27,null));};exports[_0x8078('0x2c')]=function(_0x17a577,_0x285197){return db[_0x8078('0x30')][_0x8078('0x4a')]({'where':{'id':_0x17a577['params']['id']}})[_0x8078('0x18')](handleEntityNotFound(_0x285197,null))[_0x8078('0x18')](removeEntity(_0x285197,null))[_0x8078('0x1f')](handleError(_0x285197,null));};exports[_0x8078('0x4d')]=function(_0x47573a,_0x235b2c,_0x59202d){var _0x25cb77={};var _0x507fce={};var _0x4ef9bd;var _0x592610;return db[_0x8078('0x30')]['findOne']({'where':{'id':_0x47573a['params']['id']}})[_0x8078('0x18')](handleEntityNotFound(_0x235b2c,null))[_0x8078('0x18')](function(_0x5ae0b4){if(_0x5ae0b4){_0x4ef9bd=_0x5ae0b4;_0x507fce[_0x8078('0x36')]=_[_0x8078('0x32')](db[_0x8078('0x4e')][_0x8078('0x31')]);_0x507fce[_0x8078('0x33')]=_['keys'](_0x47573a[_0x8078('0x33')]);_0x507fce[_0x8078('0x34')]=_[_0x8078('0x35')](_0x507fce[_0x8078('0x36')],_0x507fce[_0x8078('0x33')]);_0x25cb77[_0x8078('0x37')]=_[_0x8078('0x35')](_0x507fce[_0x8078('0x36')],qs['fields'](_0x47573a[_0x8078('0x33')][_0x8078('0x38')]));_0x25cb77[_0x8078('0x37')]=_0x25cb77[_0x8078('0x37')]['length']?_0x25cb77[_0x8078('0x37')]:_0x507fce['model'];_0x25cb77['order']=qs[_0x8078('0x3c')](_0x47573a[_0x8078('0x33')][_0x8078('0x3c')]);_0x25cb77['where']=qs[_0x8078('0x34')](_[_0x8078('0x4f')](_0x47573a['query'],_0x507fce[_0x8078('0x34')]));if(_0x47573a['query'][_0x8078('0x3d')]){_0x25cb77[_0x8078('0x3f')]=_[_0x8078('0x3e')](_0x25cb77[_0x8078('0x3f')],{'$or':_[_0x8078('0x40')](_0x25cb77['attributes'],function(_0x23777f){var _0x4207bc={};_0x4207bc[_0x23777f]={'$like':'%'+_0x47573a[_0x8078('0x33')][_0x8078('0x3d')]+'%'};return _0x4207bc;})});}_0x25cb77=_['merge']({},_0x25cb77,_0x47573a['options']);return _0x4ef9bd[_0x8078('0x4d')](_0x25cb77);}})[_0x8078('0x18')](function(_0x4cf306){if(_0x4cf306){_0x592610=_0x4cf306[_0x8078('0x39')];if(!_0x47573a[_0x8078('0x33')][_0x8078('0x50')](_0x8078('0x3a'))){_0x25cb77[_0x8078('0x26')]=qs[_0x8078('0x26')](_0x47573a[_0x8078('0x33')][_0x8078('0x26')]);_0x25cb77[_0x8078('0x25')]=qs[_0x8078('0x25')](_0x47573a[_0x8078('0x33')][_0x8078('0x25')]);}return _0x4ef9bd[_0x8078('0x4d')](_0x25cb77);}})[_0x8078('0x18')](function(_0x2932f9){if(_0x2932f9){return _0x2932f9?{'count':_0x592610,'rows':_0x2932f9}:null;}})[_0x8078('0x18')](respondWithResult(_0x235b2c,null))['catch'](handleError(_0x235b2c,null));};exports['getSubjects']=function(_0x246920,_0x374704,_0x906c2b){var _0x197d58={};var _0x30fa85={};var _0x472f03;var _0x63e56;return db[_0x8078('0x30')][_0x8078('0x51')]({'where':{'id':_0x246920[_0x8078('0x48')]['id']}})[_0x8078('0x18')](handleEntityNotFound(_0x374704,null))[_0x8078('0x18')](function(_0x5ae531){if(_0x5ae531){_0x472f03=_0x5ae531;_0x30fa85[_0x8078('0x36')]=_[_0x8078('0x32')](db[_0x8078('0x4e')][_0x8078('0x31')]);_0x30fa85[_0x8078('0x33')]=_[_0x8078('0x32')](_0x246920[_0x8078('0x33')]);_0x30fa85['filters']=_[_0x8078('0x35')](_0x30fa85[_0x8078('0x36')],_0x30fa85[_0x8078('0x33')]);_0x197d58[_0x8078('0x37')]=_[_0x8078('0x35')](_0x30fa85[_0x8078('0x36')],qs[_0x8078('0x38')](_0x246920[_0x8078('0x33')][_0x8078('0x38')]));_0x197d58[_0x8078('0x37')]=_0x197d58[_0x8078('0x37')][_0x8078('0x39')]?_0x197d58[_0x8078('0x37')]:_0x30fa85['model'];_0x197d58[_0x8078('0x3b')]=qs[_0x8078('0x3c')](_0x246920[_0x8078('0x33')]['sort']);_0x197d58['where']=qs[_0x8078('0x34')](_[_0x8078('0x4f')](_0x246920[_0x8078('0x33')],_0x30fa85[_0x8078('0x34')]));if(_0x246920[_0x8078('0x33')][_0x8078('0x3d')]){_0x197d58['where']=_[_0x8078('0x3e')](_0x197d58[_0x8078('0x3f')],{'$or':_[_0x8078('0x40')](_0x197d58[_0x8078('0x37')],function(_0x3e6eef){var _0x2f98b7={};_0x2f98b7[_0x3e6eef]={'$like':'%'+_0x246920['query']['filter']+'%'};return _0x2f98b7;})});}_0x197d58=_[_0x8078('0x3e')]({},_0x197d58,_0x246920[_0x8078('0x44')]);return _0x472f03[_0x8078('0x52')](_0x197d58);}})[_0x8078('0x18')](function(_0x3d4f09){if(_0x3d4f09){_0x63e56=_0x3d4f09[_0x8078('0x39')];if(!_0x246920[_0x8078('0x33')]['hasOwnProperty'](_0x8078('0x3a'))){_0x197d58[_0x8078('0x26')]=qs[_0x8078('0x26')](_0x246920[_0x8078('0x33')][_0x8078('0x26')]);_0x197d58['offset']=qs[_0x8078('0x25')](_0x246920[_0x8078('0x33')][_0x8078('0x25')]);}return _0x472f03['getSubjects'](_0x197d58);}})[_0x8078('0x18')](function(_0x5aac3e){if(_0x5aac3e){return _0x5aac3e?{'count':_0x63e56,'rows':_0x5aac3e}:null;}})['then'](respondWithResult(_0x374704,null))[_0x8078('0x1f')](handleError(_0x374704,null));};exports[_0x8078('0x53')]=function(_0x160d88,_0x14c5e4,_0x1b0b36){var _0x53b988={};var _0x1bcd71={};var _0x449997;var _0x3e0160;return db[_0x8078('0x30')][_0x8078('0x51')]({'where':{'id':_0x160d88['params']['id']}})[_0x8078('0x18')](handleEntityNotFound(_0x14c5e4,null))[_0x8078('0x18')](function(_0x3430dd){if(_0x3430dd){_0x449997=_0x3430dd;_0x1bcd71[_0x8078('0x36')]=_[_0x8078('0x32')](db['ZohoField'][_0x8078('0x31')]);_0x1bcd71[_0x8078('0x33')]=_['keys'](_0x160d88[_0x8078('0x33')]);_0x1bcd71['filters']=_[_0x8078('0x35')](_0x1bcd71[_0x8078('0x36')],_0x1bcd71[_0x8078('0x33')]);_0x53b988[_0x8078('0x37')]=_[_0x8078('0x35')](_0x1bcd71[_0x8078('0x36')],qs[_0x8078('0x38')](_0x160d88[_0x8078('0x33')][_0x8078('0x38')]));_0x53b988[_0x8078('0x37')]=_0x53b988[_0x8078('0x37')][_0x8078('0x39')]?_0x53b988[_0x8078('0x37')]:_0x1bcd71[_0x8078('0x36')];_0x53b988['order']=qs[_0x8078('0x3c')](_0x160d88['query'][_0x8078('0x3c')]);_0x53b988[_0x8078('0x3f')]=qs[_0x8078('0x34')](_[_0x8078('0x4f')](_0x160d88[_0x8078('0x33')],_0x1bcd71['filters']));if(_0x160d88[_0x8078('0x33')]['filter']){_0x53b988[_0x8078('0x3f')]=_[_0x8078('0x3e')](_0x53b988[_0x8078('0x3f')],{'$or':_[_0x8078('0x40')](_0x53b988[_0x8078('0x37')],function(_0x4f4e2d){var _0x1d2dd1={};_0x1d2dd1[_0x4f4e2d]={'$like':'%'+_0x160d88[_0x8078('0x33')]['filter']+'%'};return _0x1d2dd1;})});}_0x53b988=_[_0x8078('0x3e')]({},_0x53b988,_0x160d88[_0x8078('0x44')]);return _0x449997[_0x8078('0x53')](_0x53b988);}})[_0x8078('0x18')](function(_0x51b413){if(_0x51b413){_0x3e0160=_0x51b413[_0x8078('0x39')];if(!_0x160d88[_0x8078('0x33')][_0x8078('0x50')]('nolimit')){_0x53b988[_0x8078('0x26')]=qs[_0x8078('0x26')](_0x160d88[_0x8078('0x33')][_0x8078('0x26')]);_0x53b988[_0x8078('0x25')]=qs[_0x8078('0x25')](_0x160d88[_0x8078('0x33')][_0x8078('0x25')]);}return _0x449997[_0x8078('0x53')](_0x53b988);}})['then'](function(_0x21f1c6){if(_0x21f1c6){return _0x21f1c6?{'count':_0x3e0160,'rows':_0x21f1c6}:null;}})[_0x8078('0x18')](respondWithResult(_0x14c5e4,null))['catch'](handleError(_0x14c5e4,null));};
\ No newline at end of file
index 0a248bd..68da089 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x884d=['define','ZohoConfiguration','lodash','util','../../config/logger','bluebird','request-promise','./intZohoConfiguration.attributes','exports'];(function(_0x16462f,_0x37d501){var _0x4c6663=function(_0x49bf19){while(--_0x49bf19){_0x16462f['push'](_0x16462f['shift']());}};_0x4c6663(++_0x37d501);}(_0x884d,0x1b2));var _0xd884=function(_0x1c2545,_0x58dae2){_0x1c2545=_0x1c2545-0x0;var _0x1bad91=_0x884d[_0x1c2545];return _0x1bad91;};'use strict';var _=require(_0xd884('0x0'));var util=require(_0xd884('0x1'));var logger=require(_0xd884('0x2'))('api');var moment=require('moment');var BPromise=require(_0xd884('0x3'));var rp=require(_0xd884('0x4'));var attributes=require(_0xd884('0x5'));module[_0xd884('0x6')]=function(_0x402fa7,_0x405c51){return _0x402fa7[_0xd884('0x7')](_0xd884('0x8'),attributes,{'tableName':'int_zoho_configurations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb700=['moment','bluebird','request-promise','./intZohoConfiguration.attributes','exports','ZohoConfiguration','int_zoho_configurations','lodash','../../config/logger','api'];(function(_0x2bbe8d,_0x5156c2){var _0x539e7a=function(_0x518447){while(--_0x518447){_0x2bbe8d['push'](_0x2bbe8d['shift']());}};_0x539e7a(++_0x5156c2);}(_0xb700,0x1d3));var _0x0b70=function(_0x4c9f6a,_0xcb2cb2){_0x4c9f6a=_0x4c9f6a-0x0;var _0x5df5b9=_0xb700[_0x4c9f6a];return _0x5df5b9;};'use strict';var _=require(_0x0b70('0x0'));var util=require('util');var logger=require(_0x0b70('0x1'))(_0x0b70('0x2'));var moment=require(_0x0b70('0x3'));var BPromise=require(_0x0b70('0x4'));var rp=require(_0x0b70('0x5'));var attributes=require(_0x0b70('0x6'));module[_0x0b70('0x7')]=function(_0x6e83d3,_0x4f3922){return _0x6e83d3['define'](_0x0b70('0x8'),attributes,{'tableName':_0x0b70('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c034772..b35da36 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3691=['then','info','ZohoConfiguration,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','catch','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','request'];(function(_0xa9f50a,_0x1d3836){var _0x48d268=function(_0x41629d){while(--_0x41629d){_0xa9f50a['push'](_0xa9f50a['shift']());}};_0x48d268(++_0x1d3836);}(_0x3691,0x121));var _0x1369=function(_0x5c2e8e,_0x988c67){_0x5c2e8e=_0x5c2e8e-0x0;var _0x5e00a5=_0x3691[_0x5c2e8e];return _0x5e00a5;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x1369('0x0'));var BPromise=require(_0x1369('0x1'));var rs=require(_0x1369('0x2'));var fs=require('fs');var Redis=require(_0x1369('0x3'));var db=require(_0x1369('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x1369('0x5'))('rpc');var config=require(_0x1369('0x6'));var jayson=require(_0x1369('0x7'));var client=jayson[_0x1369('0x8')][_0x1369('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x385c60,_0x222a55,_0x2eaa5a){return new BPromise(function(_0x277416,_0x4a4805){return client[_0x1369('0xa')](_0x385c60,_0x2eaa5a)[_0x1369('0xb')](function(_0x4f9a09){logger[_0x1369('0xc')](_0x1369('0xd'),_0x222a55,_0x1369('0xe'));logger[_0x1369('0xf')]('ZohoConfiguration,\x20%s,\x20%s,\x20%s',_0x222a55,_0x1369('0xe'),JSON[_0x1369('0x10')](_0x4f9a09));if(_0x4f9a09['error']){if(_0x4f9a09[_0x1369('0x11')]['code']===0x1f4){logger[_0x1369('0x11')]('ZohoConfiguration,\x20%s,\x20%s',_0x222a55,_0x4f9a09[_0x1369('0x11')][_0x1369('0x12')]);return _0x4a4805(_0x4f9a09[_0x1369('0x11')][_0x1369('0x12')]);}logger['error'](_0x1369('0xd'),_0x222a55,_0x4f9a09[_0x1369('0x11')][_0x1369('0x12')]);return _0x277416(_0x4f9a09[_0x1369('0x11')][_0x1369('0x12')]);}else{logger[_0x1369('0xc')]('ZohoConfiguration,\x20%s,\x20%s',_0x222a55,_0x1369('0xe'));_0x277416(_0x4f9a09['result'][_0x1369('0x12')]);}})[_0x1369('0x13')](function(_0x70e158){logger['error'](_0x1369('0xd'),_0x222a55,_0x70e158);_0x4a4805(_0x70e158);});});}
\ No newline at end of file
+var _0x6752=['../../config/environment','jayson/promise','request','then','info','ZohoConfiguration,\x20%s,\x20%s','debug','ZohoConfiguration,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','lodash','util','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc'];(function(_0x2a8ab1,_0x1cdda8){var _0x2b094c=function(_0x1b4608){while(--_0x1b4608){_0x2a8ab1['push'](_0x2a8ab1['shift']());}};_0x2b094c(++_0x1cdda8);}(_0x6752,0x19a));var _0x2675=function(_0x3f9e18,_0x2b2f4a){_0x3f9e18=_0x3f9e18-0x0;var _0x107a4b=_0x6752[_0x3f9e18];return _0x107a4b;};'use strict';var _=require(_0x2675('0x0'));var util=require(_0x2675('0x1'));var moment=require('moment');var BPromise=require(_0x2675('0x2'));var rs=require(_0x2675('0x3'));var fs=require('fs');var Redis=require(_0x2675('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x2675('0x5'));var logger=require(_0x2675('0x6'))(_0x2675('0x7'));var config=require(_0x2675('0x8'));var jayson=require(_0x2675('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x35371d,_0x487a63,_0x5b57b1){return new BPromise(function(_0x408569,_0x57b565){return client[_0x2675('0xa')](_0x35371d,_0x5b57b1)[_0x2675('0xb')](function(_0xd83467){logger[_0x2675('0xc')](_0x2675('0xd'),_0x487a63,'request\x20sent');logger[_0x2675('0xe')](_0x2675('0xf'),_0x487a63,_0x2675('0x10'),JSON[_0x2675('0x11')](_0xd83467));if(_0xd83467[_0x2675('0x12')]){if(_0xd83467['error'][_0x2675('0x13')]===0x1f4){logger[_0x2675('0x12')](_0x2675('0xd'),_0x487a63,_0xd83467['error'][_0x2675('0x14')]);return _0x57b565(_0xd83467[_0x2675('0x12')]['message']);}logger['error'](_0x2675('0xd'),_0x487a63,_0xd83467[_0x2675('0x12')][_0x2675('0x14')]);return _0x408569(_0xd83467[_0x2675('0x12')][_0x2675('0x14')]);}else{logger[_0x2675('0xc')](_0x2675('0xd'),_0x487a63,_0x2675('0x10'));_0x408569(_0xd83467['result']['message']);}})[_0x2675('0x15')](function(_0x401dbb){logger[_0x2675('0x12')](_0x2675('0xd'),_0x487a63,_0x401dbb);_0x57b565(_0x401dbb);});});}
\ No newline at end of file
index f03f7f4..391c2df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9fb6=['/:id','show','post','create','put','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','get','isAuthenticated','index'];(function(_0x299e9e,_0x3265f2){var _0x553ae2=function(_0xa4e1a8){while(--_0xa4e1a8){_0x299e9e['push'](_0x299e9e['shift']());}};_0x553ae2(++_0x3265f2);}(_0x9fb6,0x15e));var _0x69fb=function(_0x40dd03,_0x3c14cb){_0x40dd03=_0x40dd03-0x0;var _0x4d8723=_0x9fb6[_0x40dd03];return _0x4d8723;};'use strict';var multer=require(_0x69fb('0x0'));var util=require(_0x69fb('0x1'));var path=require(_0x69fb('0x2'));var timeout=require(_0x69fb('0x3'));var express=require(_0x69fb('0x4'));var router=express[_0x69fb('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x69fb('0x6'));var config=require('../../config/environment');var controller=require('./intZohoField.controller');router[_0x69fb('0x7')]('/',auth[_0x69fb('0x8')](),controller[_0x69fb('0x9')]);router['get'](_0x69fb('0xa'),auth[_0x69fb('0x8')](),controller[_0x69fb('0xb')]);router[_0x69fb('0xc')]('/',auth[_0x69fb('0x8')](),controller[_0x69fb('0xd')]);router[_0x69fb('0xe')](_0x69fb('0xa'),auth[_0x69fb('0x8')](),controller['update']);router[_0x69fb('0xf')](_0x69fb('0xa'),auth[_0x69fb('0x8')](),controller[_0x69fb('0x10')]);module[_0x69fb('0x11')]=router;
\ No newline at end of file
+var _0xd713=['isAuthenticated','show','post','put','update','delete','destroy','multer','util','path','connect-timeout','Router','../../components/interaction/service','./intZohoField.controller','get','/:id'];(function(_0x44946b,_0xf874ec){var _0x249bc4=function(_0x40a23e){while(--_0x40a23e){_0x44946b['push'](_0x44946b['shift']());}};_0x249bc4(++_0xf874ec);}(_0xd713,0x137));var _0x3d71=function(_0x4e7fef,_0x51f1a1){_0x4e7fef=_0x4e7fef-0x0;var _0x44b95e=_0xd713[_0x4e7fef];return _0x44b95e;};'use strict';var multer=require(_0x3d71('0x0'));var util=require(_0x3d71('0x1'));var path=require(_0x3d71('0x2'));var timeout=require(_0x3d71('0x3'));var express=require('express');var router=express[_0x3d71('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x3d71('0x5'));var config=require('../../config/environment');var controller=require(_0x3d71('0x6'));router[_0x3d71('0x7')]('/',auth['isAuthenticated'](),controller['index']);router[_0x3d71('0x7')](_0x3d71('0x8'),auth[_0x3d71('0x9')](),controller[_0x3d71('0xa')]);router[_0x3d71('0xb')]('/',auth['isAuthenticated'](),controller['create']);router[_0x3d71('0xc')](_0x3d71('0x8'),auth[_0x3d71('0x9')](),controller[_0x3d71('0xd')]);router[_0x3d71('0xe')]('/:id',auth['isAuthenticated'](),controller[_0x3d71('0xf')]);module['exports']=router;
\ No newline at end of file
index 71acc3c..54d8d65 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa75b=['customVariable','keyValue','STRING','ENUM','sequelize','string','variable'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0xa75b,0x170));var _0xba75=function(_0xacb3ad,_0x5e23c0){_0xacb3ad=_0xacb3ad-0x0;var _0x368365=_0xa75b[_0xacb3ad];return _0x368365;};'use strict';var Sequelize=require(_0xba75('0x0'));module['exports']={'type':{'type':Sequelize['ENUM'](_0xba75('0x1'),_0xba75('0x2'),_0xba75('0x3'),_0xba75('0x4')),'defaultValue':_0xba75('0x1')},'content':{'type':Sequelize[_0xba75('0x5')]},'key':{'type':Sequelize[_0xba75('0x5')]},'keyType':{'type':Sequelize[_0xba75('0x6')](_0xba75('0x1'),_0xba75('0x2'),_0xba75('0x3'))},'keyContent':{'type':Sequelize[_0xba75('0x5')]},'idField':{'type':Sequelize[_0xba75('0x5')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'variableName':{'type':Sequelize[_0xba75('0x5')]}};
\ No newline at end of file
+var _0x702d=['STRING','customVariable','BOOLEAN','sequelize','exports','ENUM','string','variable','keyValue'];(function(_0x177268,_0x3a17a2){var _0x2d3846=function(_0x458ca1){while(--_0x458ca1){_0x177268['push'](_0x177268['shift']());}};_0x2d3846(++_0x3a17a2);}(_0x702d,0x147));var _0xd702=function(_0x328b35,_0x38a3c3){_0x328b35=_0x328b35-0x0;var _0x2f6a95=_0x702d[_0x328b35];return _0x2f6a95;};'use strict';var Sequelize=require(_0xd702('0x0'));module[_0xd702('0x1')]={'type':{'type':Sequelize[_0xd702('0x2')](_0xd702('0x3'),_0xd702('0x4'),'customVariable',_0xd702('0x5')),'defaultValue':_0xd702('0x3')},'content':{'type':Sequelize[_0xd702('0x6')]},'key':{'type':Sequelize[_0xd702('0x6')]},'keyType':{'type':Sequelize['ENUM'](_0xd702('0x3'),'variable',_0xd702('0x7'))},'keyContent':{'type':Sequelize[_0xd702('0x6')]},'idField':{'type':Sequelize[_0xd702('0x6')]},'nameField':{'type':Sequelize['STRING']},'customField':{'type':Sequelize[_0xd702('0x8')],'defaultValue':!![]},'variableName':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 5920bb0..6525920 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e1d=['nolimit','order','where','filter','merge','map','type','VIRTUAL','findAll','rows','catch','show','params','includeAll','include','options','create','body','find','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','jsforce','to-csv','querystring','papaparse','../../components/auth/service','ioredis','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','json','apply','reject','save','update','destroy','then','stack','name','send','index','ZohoField','rawAttributes','model','keys','filters','attributes','intersection','fields','query'];(function(_0x55e3ec,_0xf36f53){var _0x42608f=function(_0x10448d){while(--_0x10448d){_0x55e3ec['push'](_0x55e3ec['shift']());}};_0x42608f(++_0xf36f53);}(_0x4e1d,0xe5));var _0xd4e1=function(_0x20f19f,_0xe01de7){_0x20f19f=_0x20f19f-0x0;var _0x3494b8=_0x4e1d[_0x20f19f];return _0x3494b8;};'use strict';var pdf=require(_0xd4e1('0x0'));var emlformat=require(_0xd4e1('0x1'));var rimraf=require(_0xd4e1('0x2'));var zipdir=require(_0xd4e1('0x3'));var jsonpatch=require(_0xd4e1('0x4'));var rp=require(_0xd4e1('0x5'));var moment=require(_0xd4e1('0x6'));var BPromise=require(_0xd4e1('0x7'));var Mustache=require(_0xd4e1('0x8'));var util=require(_0xd4e1('0x9'));var path=require(_0xd4e1('0xa'));var sox=require(_0xd4e1('0xb'));var csv=require('to-csv');var ejs=require(_0xd4e1('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0xd4e1('0xd'));var crypto=require('crypto');var jsforce=require(_0xd4e1('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xd4e1('0xf'));var querystring=require(_0xd4e1('0x10'));var Papa=require(_0xd4e1('0x11'));var authService=require(_0xd4e1('0x12'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xd4e1('0x13'));var qs=require('../../components/parsers/qs');var logger=require(_0xd4e1('0x14'))(_0xd4e1('0x15'));var utils=require(_0xd4e1('0x16'));var config=require(_0xd4e1('0x17'));var db=require(_0xd4e1('0x18'))['db'];function respondWithStatusCode(_0x3522f1,_0x3fad69){_0x3fad69=_0x3fad69||0xcc;return function(_0x235438){if(_0x235438){return _0x3522f1[_0xd4e1('0x19')](_0x3fad69);}return _0x3522f1[_0xd4e1('0x1a')](_0x3fad69)[_0xd4e1('0x1b')]();};}function respondWithResult(_0x301029,_0x1446a8){_0x1446a8=_0x1446a8||0xc8;return function(_0x533db1){if(_0x533db1){return _0x301029['status'](_0x1446a8)['json'](_0x533db1);}};}function respondWithFilteredResult(_0x42f541,_0x4dee94){return function(_0x3f7a88){if(_0x3f7a88){var _0x99d493=_0x3f7a88[_0xd4e1('0x1c')],_0x25498b=_0x4dee94[_0xd4e1('0x1d')],_0x854ff3=_0x4dee94[_0xd4e1('0x1d')]+_0x4dee94[_0xd4e1('0x1e')],_0x35ea5f;if(_0x854ff3>=_0x99d493){_0x854ff3=_0x99d493;_0x35ea5f=0xc8;}else{_0x35ea5f=0xce;}_0x42f541[_0xd4e1('0x1a')](_0x35ea5f);return _0x42f541['set']('Content-Range',_0x25498b+'-'+_0x854ff3+'/'+_0x99d493)[_0xd4e1('0x1f')](_0x3f7a88);}return null;};}function patchUpdates(_0x4ffc37){return function(_0x182691){try{jsonpatch[_0xd4e1('0x20')](_0x182691,_0x4ffc37,!![]);}catch(_0x3a9068){return BPromise[_0xd4e1('0x21')](_0x3a9068);}return _0x182691[_0xd4e1('0x22')]();};}function saveUpdates(_0x32e9f2,_0x546b94){return function(_0x10cac6){if(_0x10cac6){return _0x10cac6[_0xd4e1('0x23')](_0x32e9f2)['then'](function(_0xcd626c){return _0xcd626c;});}return null;};}function removeEntity(_0x29dac6,_0x142a82){return function(_0x1e5eb1){if(_0x1e5eb1){return _0x1e5eb1[_0xd4e1('0x24')]()[_0xd4e1('0x25')](function(){_0x29dac6[_0xd4e1('0x1a')](0xcc)[_0xd4e1('0x1b')]();});}};}function handleEntityNotFound(_0x5dca00,_0x3868d5){return function(_0x49e0dc){if(!_0x49e0dc){_0x5dca00[_0xd4e1('0x19')](0x194);}return _0x49e0dc;};}function handleError(_0x53d2ce,_0x40bbc6){_0x40bbc6=_0x40bbc6||0x1f4;return function(_0x32d1a8){logger['error'](_0x32d1a8[_0xd4e1('0x26')]);if(_0x32d1a8[_0xd4e1('0x27')]){delete _0x32d1a8['name'];}_0x53d2ce[_0xd4e1('0x1a')](_0x40bbc6)[_0xd4e1('0x28')](_0x32d1a8);};}exports[_0xd4e1('0x29')]=function(_0x2fd046,_0x3add63){var _0x18c8b2={},_0x56984b={},_0x25db51={'count':0x0,'rows':[]};var _0x48f3a7=db[_0xd4e1('0x2a')][_0xd4e1('0x2b')];_0x56984b[_0xd4e1('0x2c')]=_[_0xd4e1('0x2d')](_0x48f3a7);_0x56984b['query']=_[_0xd4e1('0x2d')](_0x2fd046['query']);_0x56984b[_0xd4e1('0x2e')]=_['intersection'](_0x56984b[_0xd4e1('0x2c')],_0x56984b['query']);_0x18c8b2[_0xd4e1('0x2f')]=_[_0xd4e1('0x30')](_0x56984b[_0xd4e1('0x2c')],qs[_0xd4e1('0x31')](_0x2fd046[_0xd4e1('0x32')]['fields']));_0x18c8b2['attributes']=_0x18c8b2['attributes']['length']?_0x18c8b2[_0xd4e1('0x2f')]:_0x56984b[_0xd4e1('0x2c')];if(!_0x2fd046[_0xd4e1('0x32')]['hasOwnProperty'](_0xd4e1('0x33'))){_0x18c8b2[_0xd4e1('0x1e')]=qs[_0xd4e1('0x1e')](_0x2fd046[_0xd4e1('0x32')][_0xd4e1('0x1e')]);_0x18c8b2[_0xd4e1('0x1d')]=qs[_0xd4e1('0x1d')](_0x2fd046[_0xd4e1('0x32')][_0xd4e1('0x1d')]);}_0x18c8b2[_0xd4e1('0x34')]=qs['sort'](_0x2fd046[_0xd4e1('0x32')]['sort']);_0x18c8b2[_0xd4e1('0x35')]=qs['filters'](_['pick'](_0x2fd046['query'],_0x56984b[_0xd4e1('0x2e')]));if(_0x2fd046['query'][_0xd4e1('0x36')]){_0x18c8b2[_0xd4e1('0x35')]=_[_0xd4e1('0x37')](_0x18c8b2[_0xd4e1('0x35')],{'$or':_[_0xd4e1('0x38')](_0x48f3a7,function(_0xab3ac5){if(_0xab3ac5[_0xd4e1('0x39')]['key']!==_0xd4e1('0x3a')){var _0xfc7b13={};_0xfc7b13[_0xab3ac5['field']]={'$like':'%'+_0x2fd046[_0xd4e1('0x32')][_0xd4e1('0x36')]+'%'};return _0xfc7b13;}})});}_0x18c8b2=_[_0xd4e1('0x37')]({},_0x18c8b2,_0x2fd046['options']);var _0x326461={'where':_0x18c8b2[_0xd4e1('0x35')]};return db[_0xd4e1('0x2a')][_0xd4e1('0x1c')](_0x326461)[_0xd4e1('0x25')](function(_0x3e1d97){_0x25db51['count']=_0x3e1d97;if(_0x2fd046['query']['includeAll']){_0x18c8b2['include']=[{'all':!![]}];}return db[_0xd4e1('0x2a')][_0xd4e1('0x3b')](_0x18c8b2);})['then'](function(_0x47b374){_0x25db51[_0xd4e1('0x3c')]=_0x47b374;return _0x25db51;})['then'](respondWithFilteredResult(_0x3add63,_0x18c8b2))[_0xd4e1('0x3d')](handleError(_0x3add63,null));};exports[_0xd4e1('0x3e')]=function(_0x238c83,_0x3a7770){var _0x2b716d={'raw':!![],'where':{'id':_0x238c83[_0xd4e1('0x3f')]['id']}},_0x3c40d0={};_0x3c40d0[_0xd4e1('0x2c')]=_[_0xd4e1('0x2d')](db['ZohoField'][_0xd4e1('0x2b')]);_0x3c40d0[_0xd4e1('0x32')]=_[_0xd4e1('0x2d')](_0x238c83['query']);_0x3c40d0[_0xd4e1('0x2e')]=_[_0xd4e1('0x30')](_0x3c40d0['model'],_0x3c40d0[_0xd4e1('0x32')]);_0x2b716d['attributes']=_[_0xd4e1('0x30')](_0x3c40d0[_0xd4e1('0x2c')],qs[_0xd4e1('0x31')](_0x238c83[_0xd4e1('0x32')][_0xd4e1('0x31')]));_0x2b716d[_0xd4e1('0x2f')]=_0x2b716d[_0xd4e1('0x2f')]['length']?_0x2b716d[_0xd4e1('0x2f')]:_0x3c40d0[_0xd4e1('0x2c')];if(_0x238c83[_0xd4e1('0x32')][_0xd4e1('0x40')]){_0x2b716d[_0xd4e1('0x41')]=[{'all':!![]}];}_0x2b716d=_[_0xd4e1('0x37')]({},_0x2b716d,_0x238c83[_0xd4e1('0x42')]);return db[_0xd4e1('0x2a')]['find'](_0x2b716d)['then'](handleEntityNotFound(_0x3a7770,null))['then'](respondWithResult(_0x3a7770,null))[_0xd4e1('0x3d')](handleError(_0x3a7770,null));};exports['create']=function(_0x2e1654,_0x3bbf84){return db[_0xd4e1('0x2a')][_0xd4e1('0x43')](_0x2e1654[_0xd4e1('0x44')],{})['then'](respondWithResult(_0x3bbf84,0xc9))[_0xd4e1('0x3d')](handleError(_0x3bbf84,null));};exports[_0xd4e1('0x23')]=function(_0x5dc1bc,_0x5ef207){if(_0x5dc1bc[_0xd4e1('0x44')]['id']){delete _0x5dc1bc['body']['id'];}return db[_0xd4e1('0x2a')][_0xd4e1('0x45')]({'where':{'id':_0x5dc1bc[_0xd4e1('0x3f')]['id']}})[_0xd4e1('0x25')](handleEntityNotFound(_0x5ef207,null))[_0xd4e1('0x25')](saveUpdates(_0x5dc1bc[_0xd4e1('0x44')],null))['then'](respondWithResult(_0x5ef207,null))['catch'](handleError(_0x5ef207,null));};exports[_0xd4e1('0x24')]=function(_0x1a439e,_0x57c1fb){return db[_0xd4e1('0x2a')][_0xd4e1('0x45')]({'where':{'id':_0x1a439e[_0xd4e1('0x3f')]['id']}})[_0xd4e1('0x25')](handleEntityNotFound(_0x57c1fb,null))[_0xd4e1('0x25')](removeEntity(_0x57c1fb,null))[_0xd4e1('0x3d')](handleError(_0x57c1fb,null));};
\ No newline at end of file
+var _0x46be=['error','stack','name','send','ZohoField','rawAttributes','keys','query','intersection','attributes','model','fields','hasOwnProperty','nolimit','offset','order','sort','where','filters','pick','merge','map','key','VIRTUAL','field','filter','options','include','findAll','rows','catch','show','params','length','includeAll','find','create','body','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','path','sox','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','limit','set','Content-Range','apply','reject','then','destroy'];(function(_0x5d7c6e,_0x25e675){var _0x3fa263=function(_0x161c0f){while(--_0x161c0f){_0x5d7c6e['push'](_0x5d7c6e['shift']());}};_0x3fa263(++_0x25e675);}(_0x46be,0x193));var _0xe46b=function(_0x1e2290,_0xd8fe03){_0x1e2290=_0x1e2290-0x0;var _0x1c17f3=_0x46be[_0x1e2290];return _0x1c17f3;};'use strict';var pdf=require(_0xe46b('0x0'));var emlformat=require(_0xe46b('0x1'));var rimraf=require(_0xe46b('0x2'));var zipdir=require(_0xe46b('0x3'));var jsonpatch=require(_0xe46b('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xe46b('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0xe46b('0x6'));var sox=require(_0xe46b('0x7'));var csv=require('to-csv');var ejs=require(_0xe46b('0x8'));var fs=require('fs');var _=require(_0xe46b('0x9'));var squel=require(_0xe46b('0xa'));var crypto=require(_0xe46b('0xb'));var jsforce=require(_0xe46b('0xc'));var deskjs=require('desk.js');var toCsv=require(_0xe46b('0xd'));var querystring=require(_0xe46b('0xe'));var Papa=require(_0xe46b('0xf'));var authService=require(_0xe46b('0x10'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xe46b('0x11'));var qs=require(_0xe46b('0x12'));var logger=require(_0xe46b('0x13'))(_0xe46b('0x14'));var utils=require(_0xe46b('0x15'));var config=require('../../config/environment');var db=require(_0xe46b('0x16'))['db'];function respondWithStatusCode(_0x11596b,_0x31c31b){_0x31c31b=_0x31c31b||0xcc;return function(_0x194b0e){if(_0x194b0e){return _0x11596b[_0xe46b('0x17')](_0x31c31b);}return _0x11596b[_0xe46b('0x18')](_0x31c31b)[_0xe46b('0x19')]();};}function respondWithResult(_0x693bbd,_0x3571f1){_0x3571f1=_0x3571f1||0xc8;return function(_0x219a15){if(_0x219a15){return _0x693bbd[_0xe46b('0x18')](_0x3571f1)[_0xe46b('0x1a')](_0x219a15);}};}function respondWithFilteredResult(_0x180456,_0x2adb0c){return function(_0xc8d2e4){if(_0xc8d2e4){var _0x2c3087=_0xc8d2e4[_0xe46b('0x1b')],_0x53221a=_0x2adb0c['offset'],_0x850bb6=_0x2adb0c['offset']+_0x2adb0c[_0xe46b('0x1c')],_0x3c48ff;if(_0x850bb6>=_0x2c3087){_0x850bb6=_0x2c3087;_0x3c48ff=0xc8;}else{_0x3c48ff=0xce;}_0x180456[_0xe46b('0x18')](_0x3c48ff);return _0x180456[_0xe46b('0x1d')](_0xe46b('0x1e'),_0x53221a+'-'+_0x850bb6+'/'+_0x2c3087)[_0xe46b('0x1a')](_0xc8d2e4);}return null;};}function patchUpdates(_0x1b6258){return function(_0x4bc2e2){try{jsonpatch[_0xe46b('0x1f')](_0x4bc2e2,_0x1b6258,!![]);}catch(_0x19df11){return BPromise[_0xe46b('0x20')](_0x19df11);}return _0x4bc2e2['save']();};}function saveUpdates(_0x10a91b,_0x7d3ab){return function(_0x44f2b7){if(_0x44f2b7){return _0x44f2b7['update'](_0x10a91b)[_0xe46b('0x21')](function(_0x29fe22){return _0x29fe22;});}return null;};}function removeEntity(_0x4bf6f5,_0x50d982){return function(_0x47fe1e){if(_0x47fe1e){return _0x47fe1e[_0xe46b('0x22')]()[_0xe46b('0x21')](function(){_0x4bf6f5[_0xe46b('0x18')](0xcc)[_0xe46b('0x19')]();});}};}function handleEntityNotFound(_0xcf384a,_0x4aa1b7){return function(_0x1466cd){if(!_0x1466cd){_0xcf384a[_0xe46b('0x17')](0x194);}return _0x1466cd;};}function handleError(_0x421a1e,_0x4ef9b5){_0x4ef9b5=_0x4ef9b5||0x1f4;return function(_0x3fc87e){logger[_0xe46b('0x23')](_0x3fc87e[_0xe46b('0x24')]);if(_0x3fc87e[_0xe46b('0x25')]){delete _0x3fc87e[_0xe46b('0x25')];}_0x421a1e[_0xe46b('0x18')](_0x4ef9b5)[_0xe46b('0x26')](_0x3fc87e);};}exports['index']=function(_0x3cb2cf,_0x21c270){var _0x36a883={},_0x3efa1d={},_0xb5dd81={'count':0x0,'rows':[]};var _0xf31c9f=db[_0xe46b('0x27')][_0xe46b('0x28')];_0x3efa1d['model']=_[_0xe46b('0x29')](_0xf31c9f);_0x3efa1d[_0xe46b('0x2a')]=_[_0xe46b('0x29')](_0x3cb2cf[_0xe46b('0x2a')]);_0x3efa1d['filters']=_[_0xe46b('0x2b')](_0x3efa1d['model'],_0x3efa1d[_0xe46b('0x2a')]);_0x36a883[_0xe46b('0x2c')]=_[_0xe46b('0x2b')](_0x3efa1d[_0xe46b('0x2d')],qs[_0xe46b('0x2e')](_0x3cb2cf['query']['fields']));_0x36a883['attributes']=_0x36a883[_0xe46b('0x2c')]['length']?_0x36a883[_0xe46b('0x2c')]:_0x3efa1d['model'];if(!_0x3cb2cf[_0xe46b('0x2a')][_0xe46b('0x2f')](_0xe46b('0x30'))){_0x36a883[_0xe46b('0x1c')]=qs[_0xe46b('0x1c')](_0x3cb2cf[_0xe46b('0x2a')][_0xe46b('0x1c')]);_0x36a883[_0xe46b('0x31')]=qs['offset'](_0x3cb2cf[_0xe46b('0x2a')][_0xe46b('0x31')]);}_0x36a883[_0xe46b('0x32')]=qs[_0xe46b('0x33')](_0x3cb2cf['query'][_0xe46b('0x33')]);_0x36a883[_0xe46b('0x34')]=qs[_0xe46b('0x35')](_[_0xe46b('0x36')](_0x3cb2cf[_0xe46b('0x2a')],_0x3efa1d[_0xe46b('0x35')]));if(_0x3cb2cf[_0xe46b('0x2a')]['filter']){_0x36a883[_0xe46b('0x34')]=_[_0xe46b('0x37')](_0x36a883[_0xe46b('0x34')],{'$or':_[_0xe46b('0x38')](_0xf31c9f,function(_0x54d6cb){if(_0x54d6cb['type'][_0xe46b('0x39')]!==_0xe46b('0x3a')){var _0x4bd68a={};_0x4bd68a[_0x54d6cb[_0xe46b('0x3b')]]={'$like':'%'+_0x3cb2cf[_0xe46b('0x2a')][_0xe46b('0x3c')]+'%'};return _0x4bd68a;}})});}_0x36a883=_['merge']({},_0x36a883,_0x3cb2cf[_0xe46b('0x3d')]);var _0x3b54e4={'where':_0x36a883['where']};return db['ZohoField']['count'](_0x3b54e4)['then'](function(_0x469444){_0xb5dd81['count']=_0x469444;if(_0x3cb2cf[_0xe46b('0x2a')]['includeAll']){_0x36a883[_0xe46b('0x3e')]=[{'all':!![]}];}return db[_0xe46b('0x27')][_0xe46b('0x3f')](_0x36a883);})[_0xe46b('0x21')](function(_0x3c0be6){_0xb5dd81[_0xe46b('0x40')]=_0x3c0be6;return _0xb5dd81;})[_0xe46b('0x21')](respondWithFilteredResult(_0x21c270,_0x36a883))[_0xe46b('0x41')](handleError(_0x21c270,null));};exports[_0xe46b('0x42')]=function(_0x49a977,_0x1ad453){var _0x31aca5={'raw':!![],'where':{'id':_0x49a977[_0xe46b('0x43')]['id']}},_0x52e12c={};_0x52e12c[_0xe46b('0x2d')]=_[_0xe46b('0x29')](db[_0xe46b('0x27')][_0xe46b('0x28')]);_0x52e12c['query']=_[_0xe46b('0x29')](_0x49a977[_0xe46b('0x2a')]);_0x52e12c['filters']=_[_0xe46b('0x2b')](_0x52e12c['model'],_0x52e12c['query']);_0x31aca5[_0xe46b('0x2c')]=_[_0xe46b('0x2b')](_0x52e12c['model'],qs[_0xe46b('0x2e')](_0x49a977[_0xe46b('0x2a')]['fields']));_0x31aca5[_0xe46b('0x2c')]=_0x31aca5['attributes'][_0xe46b('0x44')]?_0x31aca5[_0xe46b('0x2c')]:_0x52e12c[_0xe46b('0x2d')];if(_0x49a977[_0xe46b('0x2a')][_0xe46b('0x45')]){_0x31aca5[_0xe46b('0x3e')]=[{'all':!![]}];}_0x31aca5=_[_0xe46b('0x37')]({},_0x31aca5,_0x49a977[_0xe46b('0x3d')]);return db[_0xe46b('0x27')][_0xe46b('0x46')](_0x31aca5)[_0xe46b('0x21')](handleEntityNotFound(_0x1ad453,null))[_0xe46b('0x21')](respondWithResult(_0x1ad453,null))[_0xe46b('0x41')](handleError(_0x1ad453,null));};exports[_0xe46b('0x47')]=function(_0x2fba9c,_0x1442d6){return db[_0xe46b('0x27')][_0xe46b('0x47')](_0x2fba9c[_0xe46b('0x48')],{})[_0xe46b('0x21')](respondWithResult(_0x1442d6,0xc9))['catch'](handleError(_0x1442d6,null));};exports['update']=function(_0x15aec3,_0x1ba626){if(_0x15aec3[_0xe46b('0x48')]['id']){delete _0x15aec3[_0xe46b('0x48')]['id'];}return db[_0xe46b('0x27')][_0xe46b('0x46')]({'where':{'id':_0x15aec3[_0xe46b('0x43')]['id']}})[_0xe46b('0x21')](handleEntityNotFound(_0x1ba626,null))['then'](saveUpdates(_0x15aec3[_0xe46b('0x48')],null))[_0xe46b('0x21')](respondWithResult(_0x1ba626,null))[_0xe46b('0x41')](handleError(_0x1ba626,null));};exports['destroy']=function(_0x1adbd8,_0x5a4909){return db[_0xe46b('0x27')][_0xe46b('0x46')]({'where':{'id':_0x1adbd8['params']['id']}})[_0xe46b('0x21')](handleEntityNotFound(_0x5a4909,null))[_0xe46b('0x21')](removeEntity(_0x5a4909,null))[_0xe46b('0x41')](handleError(_0x5a4909,null));};
\ No newline at end of file
index 35bed05..d7c5cf5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb01=['idField','lodash','util','../../config/logger','api','moment','bluebird','./intZohoField.attributes','exports','define','ZohoField','int_zoho_fields','zoho_unique_index'];(function(_0x178e48,_0x3c9509){var _0x440d7e=function(_0xc2f8a0){while(--_0xc2f8a0){_0x178e48['push'](_0x178e48['shift']());}};_0x440d7e(++_0x3c9509);}(_0xdb01,0x16d));var _0x1db0=function(_0x4a94b1,_0x4f2518){_0x4a94b1=_0x4a94b1-0x0;var _0x20949f=_0xdb01[_0x4a94b1];return _0x20949f;};'use strict';var _=require(_0x1db0('0x0'));var util=require(_0x1db0('0x1'));var logger=require(_0x1db0('0x2'))(_0x1db0('0x3'));var moment=require(_0x1db0('0x4'));var BPromise=require(_0x1db0('0x5'));var rp=require('request-promise');var attributes=require(_0x1db0('0x6'));module[_0x1db0('0x7')]=function(_0x12b570,_0x438c89){return _0x12b570[_0x1db0('0x8')](_0x1db0('0x9'),attributes,{'tableName':_0x1db0('0xa'),'paranoid':![],'indexes':[{'name':_0x1db0('0xb'),'fields':[_0x1db0('0xc'),'FieldId'],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xcf3d=['bluebird','./intZohoField.attributes','exports','define','ZohoField','zoho_unique_index','FieldId','lodash','util','../../config/logger','api'];(function(_0x5eca40,_0x4da4c6){var _0x1576ac=function(_0x4b2a0c){while(--_0x4b2a0c){_0x5eca40['push'](_0x5eca40['shift']());}};_0x1576ac(++_0x4da4c6);}(_0xcf3d,0x19e));var _0xdcf3=function(_0x10556e,_0x83232d){_0x10556e=_0x10556e-0x0;var _0x3bb266=_0xcf3d[_0x10556e];return _0x3bb266;};'use strict';var _=require(_0xdcf3('0x0'));var util=require(_0xdcf3('0x1'));var logger=require(_0xdcf3('0x2'))(_0xdcf3('0x3'));var moment=require('moment');var BPromise=require(_0xdcf3('0x4'));var rp=require('request-promise');var attributes=require(_0xdcf3('0x5'));module[_0xdcf3('0x6')]=function(_0x3c60ed,_0xb3633e){return _0x3c60ed[_0xdcf3('0x7')](_0xdcf3('0x8'),attributes,{'tableName':'int_zoho_fields','paranoid':![],'indexes':[{'name':_0xdcf3('0x9'),'fields':['idField',_0xdcf3('0xa')],'unique':!![]}],'timestamps':!![]});};
\ No newline at end of file
index 916fcfc..8d86322 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c61=['code','message','info','result','catch','lodash','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','client','request','then','ZohoField,\x20%s,\x20%s','request\x20sent','debug','ZohoField,\x20%s,\x20%s,\x20%s','error'];(function(_0x3aea72,_0x447361){var _0x2d1c2f=function(_0x4366ff){while(--_0x4366ff){_0x3aea72['push'](_0x3aea72['shift']());}};_0x2d1c2f(++_0x447361);}(_0x9c61,0xe1));var _0x19c6=function(_0x358881,_0x1b748c){_0x358881=_0x358881-0x0;var _0x76792d=_0x9c61[_0x358881];return _0x76792d;};'use strict';var _=require(_0x19c6('0x0'));var util=require(_0x19c6('0x1'));var moment=require(_0x19c6('0x2'));var BPromise=require('bluebird');var rs=require(_0x19c6('0x3'));var fs=require('fs');var Redis=require(_0x19c6('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x19c6('0x5'));var logger=require(_0x19c6('0x6'))(_0x19c6('0x7'));var config=require(_0x19c6('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x19c6('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x434aaf,_0x2b958d,_0x117ac8){return new BPromise(function(_0x146549,_0xf845ea){return client[_0x19c6('0xa')](_0x434aaf,_0x117ac8)[_0x19c6('0xb')](function(_0x2d3fed){logger['info'](_0x19c6('0xc'),_0x2b958d,_0x19c6('0xd'));logger[_0x19c6('0xe')](_0x19c6('0xf'),_0x2b958d,_0x19c6('0xd'),JSON['stringify'](_0x2d3fed));if(_0x2d3fed[_0x19c6('0x10')]){if(_0x2d3fed[_0x19c6('0x10')][_0x19c6('0x11')]===0x1f4){logger[_0x19c6('0x10')](_0x19c6('0xc'),_0x2b958d,_0x2d3fed[_0x19c6('0x10')][_0x19c6('0x12')]);return _0xf845ea(_0x2d3fed[_0x19c6('0x10')][_0x19c6('0x12')]);}logger[_0x19c6('0x10')]('ZohoField,\x20%s,\x20%s',_0x2b958d,_0x2d3fed['error'][_0x19c6('0x12')]);return _0x146549(_0x2d3fed[_0x19c6('0x10')]['message']);}else{logger[_0x19c6('0x13')](_0x19c6('0xc'),_0x2b958d,_0x19c6('0xd'));_0x146549(_0x2d3fed[_0x19c6('0x14')][_0x19c6('0x12')]);}})[_0x19c6('0x15')](function(_0x32ee79){logger['error'](_0x19c6('0xc'),_0x2b958d,_0x32ee79);_0xf845ea(_0x32ee79);});});}
\ No newline at end of file
+var _0x12ea=['ZohoField,\x20%s,\x20%s','message','result','catch','lodash','util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','request\x20sent','ZohoField,\x20%s,\x20%s,\x20%s','error','code'];(function(_0x4a23a9,_0x17a2c0){var _0x18c27f=function(_0x3414e3){while(--_0x3414e3){_0x4a23a9['push'](_0x4a23a9['shift']());}};_0x18c27f(++_0x17a2c0);}(_0x12ea,0x1bc));var _0xa12e=function(_0x2ee204,_0xf7338c){_0x2ee204=_0x2ee204-0x0;var _0x300d12=_0x12ea[_0x2ee204];return _0x300d12;};'use strict';var _=require(_0xa12e('0x0'));var util=require(_0xa12e('0x1'));var moment=require(_0xa12e('0x2'));var BPromise=require(_0xa12e('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa12e('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xa12e('0x5'));var logger=require(_0xa12e('0x6'))(_0xa12e('0x7'));var config=require(_0xa12e('0x8'));var jayson=require(_0xa12e('0x9'));var client=jayson['client'][_0xa12e('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3bf0f3,_0x6328fd,_0x48c518){return new BPromise(function(_0x15d652,_0x483225){return client[_0xa12e('0xb')](_0x3bf0f3,_0x48c518)[_0xa12e('0xc')](function(_0x25cf2a){logger[_0xa12e('0xd')]('ZohoField,\x20%s,\x20%s',_0x6328fd,_0xa12e('0xe'));logger['debug'](_0xa12e('0xf'),_0x6328fd,'request\x20sent',JSON['stringify'](_0x25cf2a));if(_0x25cf2a[_0xa12e('0x10')]){if(_0x25cf2a[_0xa12e('0x10')][_0xa12e('0x11')]===0x1f4){logger[_0xa12e('0x10')](_0xa12e('0x12'),_0x6328fd,_0x25cf2a[_0xa12e('0x10')][_0xa12e('0x13')]);return _0x483225(_0x25cf2a['error'][_0xa12e('0x13')]);}logger[_0xa12e('0x10')](_0xa12e('0x12'),_0x6328fd,_0x25cf2a[_0xa12e('0x10')]['message']);return _0x15d652(_0x25cf2a['error'][_0xa12e('0x13')]);}else{logger['info'](_0xa12e('0x12'),_0x6328fd,_0xa12e('0xe'));_0x15d652(_0x25cf2a[_0xa12e('0x14')][_0xa12e('0x13')]);}})[_0xa12e('0x15')](function(_0x5e590f){logger[_0xa12e('0x10')]('ZohoField,\x20%s,\x20%s',_0x6328fd,_0x5e590f);_0x483225(_0x5e590f);});});}
\ No newline at end of file
index 7181c67..fd1815f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x90b5=['connect-timeout','express','Router','../../config/environment','exports','multer','path'];(function(_0x4e0ab8,_0x401afb){var _0x4c1f40=function(_0x7f95ef){while(--_0x7f95ef){_0x4e0ab8['push'](_0x4e0ab8['shift']());}};_0x4c1f40(++_0x401afb);}(_0x90b5,0x139));var _0x590b=function(_0x25293a,_0x146bb5){_0x25293a=_0x25293a-0x0;var _0x1ca477=_0x90b5[_0x25293a];return _0x1ca477;};'use strict';var multer=require(_0x590b('0x0'));var util=require('util');var path=require(_0x590b('0x1'));var timeout=require(_0x590b('0x2'));var express=require(_0x590b('0x3'));var router=express[_0x590b('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x590b('0x5'));module[_0x590b('0x6')]=router;
\ No newline at end of file
+var _0x39e6=['../../config/environment','exports','multer','path','Router','../../components/auth/service'];(function(_0x307fef,_0x178408){var _0x54766f=function(_0x4d5e87){while(--_0x4d5e87){_0x307fef['push'](_0x307fef['shift']());}};_0x54766f(++_0x178408);}(_0x39e6,0x9e));var _0x639e=function(_0x4ee7c9,_0x53a2c2){_0x4ee7c9=_0x4ee7c9-0x0;var _0x579e44=_0x39e6[_0x4ee7c9];return _0x579e44;};'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'));module[_0x639e('0x5')]=router;
\ No newline at end of file
index 66dc8f7..6861270 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb6c9=['unique_name_and_version','state','sequelize','STRING'];(function(_0x6d111c,_0x1d1278){var _0x1942ec=function(_0x56e988){while(--_0x56e988){_0x6d111c['push'](_0x6d111c['shift']());}};_0x1942ec(++_0x1d1278);}(_0xb6c9,0x18e));var _0x9b6c=function(_0x232583,_0x44bdb5){_0x232583=_0x232583-0x0;var _0x49ddc1=_0xb6c9[_0x232583];return _0x49ddc1;};'use strict';var Sequelize=require(_0x9b6c('0x0'));module['exports']={'name':{'type':Sequelize[_0x9b6c('0x1')],'allowNull':![],'unique':_0x9b6c('0x2')},'version':{'type':Sequelize[_0x9b6c('0x1')],'allowNull':![],'unique':_0x9b6c('0x2')},'main':{'type':Sequelize[_0x9b6c('0x1')],'defaultValue':'app.js'},'filename':{'type':Sequelize[_0x9b6c('0x1')]},'path':{'type':Sequelize['STRING']},'type':{'type':Sequelize['STRING']},'size':{'type':Sequelize['INTEGER']},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'author':{'type':Sequelize[_0x9b6c('0x1')]},'logo':{'type':Sequelize['STRING']},'state':{'type':Sequelize[_0x9b6c('0x1')],'unique':_0x9b6c('0x3')},'description':{'type':Sequelize[_0x9b6c('0x1')]},'title':{'type':Sequelize['STRING']},'remoteUri':{'type':Sequelize[_0x9b6c('0x1')]},'link':{'type':Sequelize[_0x9b6c('0x1')],'defaultValue':'#'}};
\ No newline at end of file
+var _0xeb7d=['sequelize','exports','STRING','unique_name_and_version','INTEGER','state'];(function(_0x15e634,_0x28558e){var _0x4d5d95=function(_0x5c3a6f){while(--_0x5c3a6f){_0x15e634['push'](_0x15e634['shift']());}};_0x4d5d95(++_0x28558e);}(_0xeb7d,0x132));var _0xdeb7=function(_0x51cf79,_0x24b51d){_0x51cf79=_0x51cf79-0x0;var _0x51ef18=_0xeb7d[_0x51cf79];return _0x51ef18;};'use strict';var Sequelize=require(_0xdeb7('0x0'));module[_0xdeb7('0x1')]={'name':{'type':Sequelize[_0xdeb7('0x2')],'allowNull':![],'unique':_0xdeb7('0x3')},'version':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xdeb7('0x3')},'main':{'type':Sequelize['STRING'],'defaultValue':'app.js'},'filename':{'type':Sequelize['STRING']},'path':{'type':Sequelize[_0xdeb7('0x2')]},'type':{'type':Sequelize['STRING']},'size':{'type':Sequelize[_0xdeb7('0x4')]},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'author':{'type':Sequelize[_0xdeb7('0x2')]},'logo':{'type':Sequelize[_0xdeb7('0x2')]},'state':{'type':Sequelize[_0xdeb7('0x2')],'unique':_0xdeb7('0x5')},'description':{'type':Sequelize['STRING']},'title':{'type':Sequelize[_0xdeb7('0x2')]},'remoteUri':{'type':Sequelize['STRING']},'link':{'type':Sequelize[_0xdeb7('0x2')],'defaultValue':'#'}};
\ No newline at end of file
index ab131e6..4e543dd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8c7a=['query','attributes','fields','hasOwnProperty','limit','order','sort','where','filters','filter','merge','map','type','VIRTUAL','options','includeAll','find','catch','create','body','html-pdf','zip-dir','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','update','then','destroy','error','stack','name','index','Integration','model','keys','intersection'];(function(_0x20589d,_0x55d5bf){var _0x422de9=function(_0x44cbbb){while(--_0x44cbbb){_0x20589d['push'](_0x20589d['shift']());}};_0x422de9(++_0x55d5bf);}(_0x8c7a,0x8c));var _0xa8c7=function(_0x45cb5d,_0x13659d){_0x45cb5d=_0x45cb5d-0x0;var _0x14a8cc=_0x8c7a[_0x45cb5d];return _0x14a8cc;};'use strict';var pdf=require(_0xa8c7('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xa8c7('0x1'));var jsonpatch=require('fast-json-patch');var rp=require(_0xa8c7('0x2'));var moment=require(_0xa8c7('0x3'));var BPromise=require(_0xa8c7('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0xa8c7('0x5'));var sox=require(_0xa8c7('0x6'));var csv=require(_0xa8c7('0x7'));var ejs=require(_0xa8c7('0x8'));var fs=require('fs');var _=require(_0xa8c7('0x9'));var squel=require('squel');var crypto=require(_0xa8c7('0xa'));var jsforce=require('jsforce');var deskjs=require(_0xa8c7('0xb'));var toCsv=require(_0xa8c7('0x7'));var querystring=require(_0xa8c7('0xc'));var Papa=require(_0xa8c7('0xd'));var authService=require(_0xa8c7('0xe'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xa8c7('0xf'));var qs=require(_0xa8c7('0x10'));var logger=require(_0xa8c7('0x11'))(_0xa8c7('0x12'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x31f131,_0x19892c){_0x19892c=_0x19892c||0xcc;return function(_0x441533){if(_0x441533){return _0x31f131[_0xa8c7('0x13')](_0x19892c);}return _0x31f131[_0xa8c7('0x14')](_0x19892c)[_0xa8c7('0x15')]();};}function respondWithResult(_0x380fb8,_0x3c7fd8){_0x3c7fd8=_0x3c7fd8||0xc8;return function(_0x5452a3){if(_0x5452a3){return _0x380fb8[_0xa8c7('0x14')](_0x3c7fd8)[_0xa8c7('0x16')](_0x5452a3);}};}function respondWithFilteredResult(_0x14e583,_0x7e7ed6){return function(_0x221b39){if(_0x221b39){var _0x2be249=_0x221b39[_0xa8c7('0x17')],_0xd70374=_0x7e7ed6[_0xa8c7('0x18')],_0x256c04=_0x7e7ed6[_0xa8c7('0x18')]+_0x7e7ed6['limit'],_0x2f815e;if(_0x256c04>=_0x2be249){_0x256c04=_0x2be249;_0x2f815e=0xc8;}else{_0x2f815e=0xce;}_0x14e583[_0xa8c7('0x14')](_0x2f815e);return _0x14e583[_0xa8c7('0x19')](_0xa8c7('0x1a'),_0xd70374+'-'+_0x256c04+'/'+_0x2be249)[_0xa8c7('0x16')](_0x221b39);}return null;};}function patchUpdates(_0x463edf){return function(_0x2eef0b){try{jsonpatch['apply'](_0x2eef0b,_0x463edf,!![]);}catch(_0x167d49){return BPromise[_0xa8c7('0x1b')](_0x167d49);}return _0x2eef0b[_0xa8c7('0x1c')]();};}function saveUpdates(_0x268c13,_0x16eb17){return function(_0x1f865){if(_0x1f865){return _0x1f865[_0xa8c7('0x1d')](_0x268c13)[_0xa8c7('0x1e')](function(_0x11e250){return _0x11e250;});}return null;};}function removeEntity(_0x4ff4a5,_0x57cc7b){return function(_0x2e37c2){if(_0x2e37c2){return _0x2e37c2[_0xa8c7('0x1f')]()[_0xa8c7('0x1e')](function(){_0x4ff4a5[_0xa8c7('0x14')](0xcc)[_0xa8c7('0x15')]();});}};}function handleEntityNotFound(_0x2797d3,_0x114aea){return function(_0x186417){if(!_0x186417){_0x2797d3[_0xa8c7('0x13')](0x194);}return _0x186417;};}function handleError(_0x190f04,_0x2cb664){_0x2cb664=_0x2cb664||0x1f4;return function(_0x4ea629){logger[_0xa8c7('0x20')](_0x4ea629[_0xa8c7('0x21')]);if(_0x4ea629['name']){delete _0x4ea629[_0xa8c7('0x22')];}_0x190f04[_0xa8c7('0x14')](_0x2cb664)['send'](_0x4ea629);};}exports[_0xa8c7('0x23')]=function(_0x57bd0c,_0x3b3db2){var _0x29fae4={},_0x54dcba={},_0xa4dbd5={'count':0x0,'rows':[]};var _0x1f6be3=db[_0xa8c7('0x24')]['rawAttributes'];_0x54dcba[_0xa8c7('0x25')]=_[_0xa8c7('0x26')](_0x1f6be3);_0x54dcba['query']=_['keys'](_0x57bd0c['query']);_0x54dcba['filters']=_[_0xa8c7('0x27')](_0x54dcba[_0xa8c7('0x25')],_0x54dcba[_0xa8c7('0x28')]);_0x29fae4[_0xa8c7('0x29')]=_[_0xa8c7('0x27')](_0x54dcba[_0xa8c7('0x25')],qs[_0xa8c7('0x2a')](_0x57bd0c[_0xa8c7('0x28')][_0xa8c7('0x2a')]));_0x29fae4[_0xa8c7('0x29')]=_0x29fae4[_0xa8c7('0x29')]['length']?_0x29fae4[_0xa8c7('0x29')]:_0x54dcba[_0xa8c7('0x25')];if(!_0x57bd0c[_0xa8c7('0x28')][_0xa8c7('0x2b')]('nolimit')){_0x29fae4[_0xa8c7('0x2c')]=qs[_0xa8c7('0x2c')](_0x57bd0c[_0xa8c7('0x28')][_0xa8c7('0x2c')]);_0x29fae4[_0xa8c7('0x18')]=qs[_0xa8c7('0x18')](_0x57bd0c[_0xa8c7('0x28')][_0xa8c7('0x18')]);}_0x29fae4[_0xa8c7('0x2d')]=qs[_0xa8c7('0x2e')](_0x57bd0c[_0xa8c7('0x28')][_0xa8c7('0x2e')]);_0x29fae4[_0xa8c7('0x2f')]=qs[_0xa8c7('0x30')](_['pick'](_0x57bd0c[_0xa8c7('0x28')],_0x54dcba[_0xa8c7('0x30')]));if(_0x57bd0c['query'][_0xa8c7('0x31')]){_0x29fae4[_0xa8c7('0x2f')]=_[_0xa8c7('0x32')](_0x29fae4[_0xa8c7('0x2f')],{'$or':_[_0xa8c7('0x33')](_0x1f6be3,function(_0x51535d){if(_0x51535d[_0xa8c7('0x34')]['key']!==_0xa8c7('0x35')){var _0x49ae70={};_0x49ae70[_0x51535d['field']]={'$like':'%'+_0x57bd0c[_0xa8c7('0x28')]['filter']+'%'};return _0x49ae70;}})});}_0x29fae4=_[_0xa8c7('0x32')]({},_0x29fae4,_0x57bd0c[_0xa8c7('0x36')]);var _0xfa316a={'where':_0x29fae4[_0xa8c7('0x2f')]};return db[_0xa8c7('0x24')][_0xa8c7('0x17')](_0xfa316a)[_0xa8c7('0x1e')](function(_0x248f33){_0xa4dbd5[_0xa8c7('0x17')]=_0x248f33;if(_0x57bd0c[_0xa8c7('0x28')][_0xa8c7('0x37')]){_0x29fae4['include']=[{'all':!![]}];}return db[_0xa8c7('0x24')]['findAll'](_0x29fae4);})[_0xa8c7('0x1e')](function(_0x5eb791){_0xa4dbd5['rows']=_0x5eb791;return _0xa4dbd5;})['then'](respondWithFilteredResult(_0x3b3db2,_0x29fae4))['catch'](handleError(_0x3b3db2,null));};exports['show']=function(_0x53375b,_0x3c4739){var _0x3e57a7={'raw':![],'where':{'id':_0x53375b['params']['id']}},_0x5deba8={};_0x5deba8[_0xa8c7('0x25')]=_[_0xa8c7('0x26')](db[_0xa8c7('0x24')]['rawAttributes']);_0x5deba8[_0xa8c7('0x28')]=_[_0xa8c7('0x26')](_0x53375b['query']);_0x5deba8[_0xa8c7('0x30')]=_[_0xa8c7('0x27')](_0x5deba8[_0xa8c7('0x25')],_0x5deba8[_0xa8c7('0x28')]);_0x3e57a7[_0xa8c7('0x29')]=_[_0xa8c7('0x27')](_0x5deba8[_0xa8c7('0x25')],qs[_0xa8c7('0x2a')](_0x53375b[_0xa8c7('0x28')][_0xa8c7('0x2a')]));_0x3e57a7[_0xa8c7('0x29')]=_0x3e57a7[_0xa8c7('0x29')]['length']?_0x3e57a7[_0xa8c7('0x29')]:_0x5deba8['model'];if(_0x53375b[_0xa8c7('0x28')][_0xa8c7('0x37')]){_0x3e57a7['include']=[{'all':!![]}];}_0x3e57a7=_[_0xa8c7('0x32')]({},_0x3e57a7,_0x53375b[_0xa8c7('0x36')]);return db[_0xa8c7('0x24')][_0xa8c7('0x38')](_0x3e57a7)['then'](handleEntityNotFound(_0x3c4739,null))[_0xa8c7('0x1e')](respondWithResult(_0x3c4739,null))[_0xa8c7('0x39')](handleError(_0x3c4739,null));};exports[_0xa8c7('0x3a')]=function(_0x1920c3,_0x31a1a4){return db[_0xa8c7('0x24')][_0xa8c7('0x3a')](_0x1920c3[_0xa8c7('0x3b')],{})[_0xa8c7('0x1e')](respondWithResult(_0x31a1a4,0xc9))[_0xa8c7('0x39')](handleError(_0x31a1a4,null));};exports['update']=function(_0x22df35,_0x3cc72f){if(_0x22df35[_0xa8c7('0x3b')]['id']){delete _0x22df35[_0xa8c7('0x3b')]['id'];}return db['Integration']['find']({'where':{'id':_0x22df35['params']['id']}})[_0xa8c7('0x1e')](handleEntityNotFound(_0x3cc72f,null))[_0xa8c7('0x1e')](saveUpdates(_0x22df35[_0xa8c7('0x3b')],null))[_0xa8c7('0x1e')](respondWithResult(_0x3cc72f,null))[_0xa8c7('0x39')](handleError(_0x3cc72f,null));};exports[_0xa8c7('0x1f')]=function(_0x1fb711,_0x3f9ff6){return db[_0xa8c7('0x24')][_0xa8c7('0x38')]({'where':{'id':_0x1fb711['params']['id']}})['then'](handleEntityNotFound(_0x3f9ff6,null))[_0xa8c7('0x1e')](removeEntity(_0x3f9ff6,null))[_0xa8c7('0x39')](handleError(_0x3f9ff6,null));};
\ No newline at end of file
+var _0xc933=['query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','filter','where','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','show','keys','include','find','body','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','to-csv','ejs','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','update','then','destroy','error','stack','name','send','index','Integration','rawAttributes','model'];(function(_0x37ee8b,_0x28ce63){var _0x47c499=function(_0x5bd325){while(--_0x5bd325){_0x37ee8b['push'](_0x37ee8b['shift']());}};_0x47c499(++_0x28ce63);}(_0xc933,0xf9));var _0x3c93=function(_0x965040,_0x52530d){_0x965040=_0x965040-0x0;var _0x5a0f16=_0xc933[_0x965040];return _0x5a0f16;};'use strict';var pdf=require(_0x3c93('0x0'));var emlformat=require(_0x3c93('0x1'));var rimraf=require(_0x3c93('0x2'));var zipdir=require(_0x3c93('0x3'));var jsonpatch=require(_0x3c93('0x4'));var rp=require('request-promise');var moment=require(_0x3c93('0x5'));var BPromise=require(_0x3c93('0x6'));var Mustache=require(_0x3c93('0x7'));var util=require(_0x3c93('0x8'));var path=require(_0x3c93('0x9'));var sox=require('sox');var csv=require(_0x3c93('0xa'));var ejs=require(_0x3c93('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x3c93('0xc'));var crypto=require('crypto');var jsforce=require(_0x3c93('0xd'));var deskjs=require(_0x3c93('0xe'));var toCsv=require(_0x3c93('0xa'));var querystring=require(_0x3c93('0xf'));var Papa=require(_0x3c93('0x10'));var authService=require(_0x3c93('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x3c93('0x12'))(_0x3c93('0x13'));var utils=require(_0x3c93('0x14'));var config=require(_0x3c93('0x15'));var db=require(_0x3c93('0x16'))['db'];function respondWithStatusCode(_0x8848dd,_0x283ed8){_0x283ed8=_0x283ed8||0xcc;return function(_0x2d529c){if(_0x2d529c){return _0x8848dd[_0x3c93('0x17')](_0x283ed8);}return _0x8848dd[_0x3c93('0x18')](_0x283ed8)[_0x3c93('0x19')]();};}function respondWithResult(_0x106b0b,_0xaa2eae){_0xaa2eae=_0xaa2eae||0xc8;return function(_0x1fc09c){if(_0x1fc09c){return _0x106b0b[_0x3c93('0x18')](_0xaa2eae)[_0x3c93('0x1a')](_0x1fc09c);}};}function respondWithFilteredResult(_0x2dbd5b,_0x5c01ba){return function(_0x4c3b67){if(_0x4c3b67){var _0x12b14e=_0x4c3b67[_0x3c93('0x1b')],_0x3a7ae7=_0x5c01ba[_0x3c93('0x1c')],_0x95fc39=_0x5c01ba[_0x3c93('0x1c')]+_0x5c01ba['limit'],_0x1ad46f;if(_0x95fc39>=_0x12b14e){_0x95fc39=_0x12b14e;_0x1ad46f=0xc8;}else{_0x1ad46f=0xce;}_0x2dbd5b['status'](_0x1ad46f);return _0x2dbd5b[_0x3c93('0x1d')](_0x3c93('0x1e'),_0x3a7ae7+'-'+_0x95fc39+'/'+_0x12b14e)['json'](_0x4c3b67);}return null;};}function patchUpdates(_0x54a8d8){return function(_0x532973){try{jsonpatch[_0x3c93('0x1f')](_0x532973,_0x54a8d8,!![]);}catch(_0x599def){return BPromise['reject'](_0x599def);}return _0x532973['save']();};}function saveUpdates(_0x178a46,_0x96079f){return function(_0xa4bcfb){if(_0xa4bcfb){return _0xa4bcfb[_0x3c93('0x20')](_0x178a46)[_0x3c93('0x21')](function(_0x269d3a){return _0x269d3a;});}return null;};}function removeEntity(_0xf56621,_0x18d02c){return function(_0x3207ac){if(_0x3207ac){return _0x3207ac[_0x3c93('0x22')]()['then'](function(){_0xf56621[_0x3c93('0x18')](0xcc)[_0x3c93('0x19')]();});}};}function handleEntityNotFound(_0xcbc8b,_0xb35e89){return function(_0x3b3fbb){if(!_0x3b3fbb){_0xcbc8b[_0x3c93('0x17')](0x194);}return _0x3b3fbb;};}function handleError(_0x49a81c,_0x2a7579){_0x2a7579=_0x2a7579||0x1f4;return function(_0x3932f2){logger[_0x3c93('0x23')](_0x3932f2[_0x3c93('0x24')]);if(_0x3932f2[_0x3c93('0x25')]){delete _0x3932f2[_0x3c93('0x25')];}_0x49a81c[_0x3c93('0x18')](_0x2a7579)[_0x3c93('0x26')](_0x3932f2);};}exports[_0x3c93('0x27')]=function(_0x568e40,_0x2e1c8c){var _0x3d50b3={},_0x3f49a5={},_0x51de7b={'count':0x0,'rows':[]};var _0x129354=db[_0x3c93('0x28')][_0x3c93('0x29')];_0x3f49a5[_0x3c93('0x2a')]=_['keys'](_0x129354);_0x3f49a5['query']=_['keys'](_0x568e40[_0x3c93('0x2b')]);_0x3f49a5[_0x3c93('0x2c')]=_[_0x3c93('0x2d')](_0x3f49a5[_0x3c93('0x2a')],_0x3f49a5['query']);_0x3d50b3[_0x3c93('0x2e')]=_['intersection'](_0x3f49a5['model'],qs[_0x3c93('0x2f')](_0x568e40[_0x3c93('0x2b')][_0x3c93('0x2f')]));_0x3d50b3['attributes']=_0x3d50b3[_0x3c93('0x2e')][_0x3c93('0x30')]?_0x3d50b3[_0x3c93('0x2e')]:_0x3f49a5['model'];if(!_0x568e40[_0x3c93('0x2b')][_0x3c93('0x31')](_0x3c93('0x32'))){_0x3d50b3[_0x3c93('0x33')]=qs[_0x3c93('0x33')](_0x568e40[_0x3c93('0x2b')]['limit']);_0x3d50b3[_0x3c93('0x1c')]=qs[_0x3c93('0x1c')](_0x568e40['query'][_0x3c93('0x1c')]);}_0x3d50b3[_0x3c93('0x34')]=qs[_0x3c93('0x35')](_0x568e40['query'][_0x3c93('0x35')]);_0x3d50b3['where']=qs[_0x3c93('0x2c')](_['pick'](_0x568e40[_0x3c93('0x2b')],_0x3f49a5[_0x3c93('0x2c')]));if(_0x568e40[_0x3c93('0x2b')][_0x3c93('0x36')]){_0x3d50b3[_0x3c93('0x37')]=_[_0x3c93('0x38')](_0x3d50b3['where'],{'$or':_[_0x3c93('0x39')](_0x129354,function(_0xb44e93){if(_0xb44e93[_0x3c93('0x3a')][_0x3c93('0x3b')]!==_0x3c93('0x3c')){var _0xb00081={};_0xb00081[_0xb44e93[_0x3c93('0x3d')]]={'$like':'%'+_0x568e40['query'][_0x3c93('0x36')]+'%'};return _0xb00081;}})});}_0x3d50b3=_['merge']({},_0x3d50b3,_0x568e40[_0x3c93('0x3e')]);var _0x100288={'where':_0x3d50b3[_0x3c93('0x37')]};return db['Integration'][_0x3c93('0x1b')](_0x100288)[_0x3c93('0x21')](function(_0x3d6848){_0x51de7b['count']=_0x3d6848;if(_0x568e40['query'][_0x3c93('0x3f')]){_0x3d50b3['include']=[{'all':!![]}];}return db[_0x3c93('0x28')][_0x3c93('0x40')](_0x3d50b3);})[_0x3c93('0x21')](function(_0x40789e){_0x51de7b[_0x3c93('0x41')]=_0x40789e;return _0x51de7b;})[_0x3c93('0x21')](respondWithFilteredResult(_0x2e1c8c,_0x3d50b3))[_0x3c93('0x42')](handleError(_0x2e1c8c,null));};exports[_0x3c93('0x43')]=function(_0xcb3226,_0x4c8793){var _0x49fffc={'raw':![],'where':{'id':_0xcb3226['params']['id']}},_0xd9301c={};_0xd9301c[_0x3c93('0x2a')]=_[_0x3c93('0x44')](db[_0x3c93('0x28')]['rawAttributes']);_0xd9301c[_0x3c93('0x2b')]=_[_0x3c93('0x44')](_0xcb3226[_0x3c93('0x2b')]);_0xd9301c[_0x3c93('0x2c')]=_[_0x3c93('0x2d')](_0xd9301c[_0x3c93('0x2a')],_0xd9301c['query']);_0x49fffc['attributes']=_[_0x3c93('0x2d')](_0xd9301c[_0x3c93('0x2a')],qs[_0x3c93('0x2f')](_0xcb3226[_0x3c93('0x2b')][_0x3c93('0x2f')]));_0x49fffc[_0x3c93('0x2e')]=_0x49fffc[_0x3c93('0x2e')][_0x3c93('0x30')]?_0x49fffc[_0x3c93('0x2e')]:_0xd9301c[_0x3c93('0x2a')];if(_0xcb3226[_0x3c93('0x2b')][_0x3c93('0x3f')]){_0x49fffc[_0x3c93('0x45')]=[{'all':!![]}];}_0x49fffc=_[_0x3c93('0x38')]({},_0x49fffc,_0xcb3226[_0x3c93('0x3e')]);return db[_0x3c93('0x28')][_0x3c93('0x46')](_0x49fffc)[_0x3c93('0x21')](handleEntityNotFound(_0x4c8793,null))[_0x3c93('0x21')](respondWithResult(_0x4c8793,null))[_0x3c93('0x42')](handleError(_0x4c8793,null));};exports['create']=function(_0x502468,_0x258881){return db[_0x3c93('0x28')]['create'](_0x502468[_0x3c93('0x47')],{})[_0x3c93('0x21')](respondWithResult(_0x258881,0xc9))[_0x3c93('0x42')](handleError(_0x258881,null));};exports['update']=function(_0xc53ecf,_0x3a8ac3){if(_0xc53ecf[_0x3c93('0x47')]['id']){delete _0xc53ecf['body']['id'];}return db[_0x3c93('0x28')]['find']({'where':{'id':_0xc53ecf[_0x3c93('0x48')]['id']}})['then'](handleEntityNotFound(_0x3a8ac3,null))[_0x3c93('0x21')](saveUpdates(_0xc53ecf[_0x3c93('0x47')],null))['then'](respondWithResult(_0x3a8ac3,null))[_0x3c93('0x42')](handleError(_0x3a8ac3,null));};exports[_0x3c93('0x22')]=function(_0x3ed520,_0x1f4b53){return db[_0x3c93('0x28')][_0x3c93('0x46')]({'where':{'id':_0x3ed520['params']['id']}})[_0x3c93('0x21')](handleEntityNotFound(_0x1f4b53,null))[_0x3c93('0x21')](removeEntity(_0x1f4b53,null))[_0x3c93('0x42')](handleError(_0x1f4b53,null));};
\ No newline at end of file
index f2c1213..23f98e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fab=['request-promise','./integration.attributes','exports','define','Integration','lodash','util','api','moment','bluebird'];(function(_0x4c3f21,_0x391b48){var _0x72de0b=function(_0x98a189){while(--_0x98a189){_0x4c3f21['push'](_0x4c3f21['shift']());}};_0x72de0b(++_0x391b48);}(_0x5fab,0x177));var _0xb5fa=function(_0xec9c4e,_0x1f3b34){_0xec9c4e=_0xec9c4e-0x0;var _0x49cf7b=_0x5fab[_0xec9c4e];return _0x49cf7b;};'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 attributes=require(_0xb5fa('0x6'));module[_0xb5fa('0x7')]=function(_0x29390a,_0x4341d3){return _0x29390a[_0xb5fa('0x8')](_0xb5fa('0x9'),attributes,{'tableName':'integrations','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4137=['bluebird','request-promise','./integration.attributes','exports','define','integrations','lodash','util','../../config/logger','api','moment'];(function(_0x4346ce,_0x1b3cac){var _0x3ee616=function(_0x16000b){while(--_0x16000b){_0x4346ce['push'](_0x4346ce['shift']());}};_0x3ee616(++_0x1b3cac);}(_0x4137,0xf8));var _0x7413=function(_0x46e363,_0x45d7e2){_0x46e363=_0x46e363-0x0;var _0x3fb059=_0x4137[_0x46e363];return _0x3fb059;};'use strict';var _=require(_0x7413('0x0'));var util=require(_0x7413('0x1'));var logger=require(_0x7413('0x2'))(_0x7413('0x3'));var moment=require(_0x7413('0x4'));var BPromise=require(_0x7413('0x5'));var rp=require(_0x7413('0x6'));var attributes=require(_0x7413('0x7'));module[_0x7413('0x8')]=function(_0x3dc48a,_0x451a96){return _0x3dc48a[_0x7413('0x9')]('Integration',attributes,{'tableName':_0x7413('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2eeb184..53057f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b51=['debug','Integration,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then','Integration,\x20%s,\x20%s','request\x20sent'];(function(_0x4b26b5,_0x4f71fd){var _0x4dec71=function(_0x184329){while(--_0x184329){_0x4b26b5['push'](_0x4b26b5['shift']());}};_0x4dec71(++_0x4f71fd);}(_0x8b51,0x1bd));var _0x18b5=function(_0x5654ed,_0x4514fa){_0x5654ed=_0x5654ed-0x0;var _0x2331c1=_0x8b51[_0x5654ed];return _0x2331c1;};'use strict';var _=require(_0x18b5('0x0'));var util=require(_0x18b5('0x1'));var moment=require(_0x18b5('0x2'));var BPromise=require('bluebird');var rs=require(_0x18b5('0x3'));var fs=require('fs');var Redis=require(_0x18b5('0x4'));var db=require(_0x18b5('0x5'))['db'];var utils=require(_0x18b5('0x6'));var logger=require(_0x18b5('0x7'))(_0x18b5('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x18b5('0x9')][_0x18b5('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4c2225,_0x3a1127,_0xc6d6a9){return new BPromise(function(_0x4d05e3,_0x2c3b27){return client[_0x18b5('0xb')](_0x4c2225,_0xc6d6a9)[_0x18b5('0xc')](function(_0x2d2245){logger['info'](_0x18b5('0xd'),_0x3a1127,_0x18b5('0xe'));logger[_0x18b5('0xf')](_0x18b5('0x10'),_0x3a1127,_0x18b5('0xe'),JSON[_0x18b5('0x11')](_0x2d2245));if(_0x2d2245[_0x18b5('0x12')]){if(_0x2d2245[_0x18b5('0x12')][_0x18b5('0x13')]===0x1f4){logger['error'](_0x18b5('0xd'),_0x3a1127,_0x2d2245[_0x18b5('0x12')][_0x18b5('0x14')]);return _0x2c3b27(_0x2d2245[_0x18b5('0x12')][_0x18b5('0x14')]);}logger[_0x18b5('0x12')](_0x18b5('0xd'),_0x3a1127,_0x2d2245[_0x18b5('0x12')][_0x18b5('0x14')]);return _0x4d05e3(_0x2d2245[_0x18b5('0x12')][_0x18b5('0x14')]);}else{logger[_0x18b5('0x15')](_0x18b5('0xd'),_0x3a1127,'request\x20sent');_0x4d05e3(_0x2d2245[_0x18b5('0x16')][_0x18b5('0x14')]);}})['catch'](function(_0x145761){logger[_0x18b5('0x12')]('Integration,\x20%s,\x20%s',_0x3a1127,_0x145761);_0x2c3b27(_0x145761);});});}
\ No newline at end of file
+var _0x2063=['../../config/environment','jayson/promise','client','http','request','then','info','Integration,\x20%s,\x20%s','request\x20sent','debug','Integration,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','rpc'];(function(_0x3b3db7,_0x118aef){var _0x90d0d=function(_0xff900d){while(--_0xff900d){_0x3b3db7['push'](_0x3b3db7['shift']());}};_0x90d0d(++_0x118aef);}(_0x2063,0xc8));var _0x3206=function(_0x1ce582,_0x4ef7bb){_0x1ce582=_0x1ce582-0x0;var _0x387975=_0x2063[_0x1ce582];return _0x387975;};'use strict';var _=require(_0x3206('0x0'));var util=require(_0x3206('0x1'));var moment=require(_0x3206('0x2'));var BPromise=require(_0x3206('0x3'));var rs=require(_0x3206('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x3206('0x5'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x3206('0x6'));var config=require(_0x3206('0x7'));var jayson=require(_0x3206('0x8'));var client=jayson[_0x3206('0x9')][_0x3206('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x8513f5,_0x85e7d5,_0x3f0e92){return new BPromise(function(_0x2b1b9b,_0x24dbb5){return client[_0x3206('0xb')](_0x8513f5,_0x3f0e92)[_0x3206('0xc')](function(_0x511cc6){logger[_0x3206('0xd')](_0x3206('0xe'),_0x85e7d5,_0x3206('0xf'));logger[_0x3206('0x10')](_0x3206('0x11'),_0x85e7d5,'request\x20sent',JSON['stringify'](_0x511cc6));if(_0x511cc6['error']){if(_0x511cc6[_0x3206('0x12')][_0x3206('0x13')]===0x1f4){logger[_0x3206('0x12')](_0x3206('0xe'),_0x85e7d5,_0x511cc6[_0x3206('0x12')][_0x3206('0x14')]);return _0x24dbb5(_0x511cc6['error'][_0x3206('0x14')]);}logger[_0x3206('0x12')](_0x3206('0xe'),_0x85e7d5,_0x511cc6[_0x3206('0x12')][_0x3206('0x14')]);return _0x2b1b9b(_0x511cc6[_0x3206('0x12')][_0x3206('0x14')]);}else{logger[_0x3206('0xd')](_0x3206('0xe'),_0x85e7d5,_0x3206('0xf'));_0x2b1b9b(_0x511cc6[_0x3206('0x15')]['message']);}})[_0x3206('0x16')](function(_0xdaa6b2){logger[_0x3206('0x12')](_0x3206('0xe'),_0x85e7d5,_0xdaa6b2);_0x24dbb5(_0xdaa6b2);});});}
\ No newline at end of file
index 78bbf79..7cb77bd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9034=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','show','create','put','update','delete','/:id','destroy','exports','multer','path','connect-timeout','express'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x9034,0x178));var _0x4903=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x9034[_0x5b644e];return _0x49c6bf;};'use strict';var multer=require(_0x4903('0x0'));var util=require('util');var path=require(_0x4903('0x1'));var timeout=require(_0x4903('0x2'));var express=require(_0x4903('0x3'));var router=express[_0x4903('0x4')]();var auth=require(_0x4903('0x5'));var interaction=require(_0x4903('0x6'));var config=require(_0x4903('0x7'));var controller=require('./integrationReport.controller');router[_0x4903('0x8')]('/',auth[_0x4903('0x9')](),controller[_0x4903('0xa')]);router[_0x4903('0x8')](_0x4903('0xb'),auth[_0x4903('0x9')](),controller['describe']);router[_0x4903('0x8')]('/:id',auth['isAuthenticated'](),controller[_0x4903('0xc')]);router['post']('/',auth[_0x4903('0x9')](),controller[_0x4903('0xd')]);router[_0x4903('0xe')]('/:id',auth[_0x4903('0x9')](),controller[_0x4903('0xf')]);router[_0x4903('0x10')](_0x4903('0x11'),auth[_0x4903('0x9')](),controller[_0x4903('0x12')]);module[_0x4903('0x13')]=router;
\ No newline at end of file
+var _0xba47=['Router','../../components/auth/service','../../components/interaction/service','./integrationReport.controller','get','/describe','isAuthenticated','describe','/:id','show','create','update','delete','destroy','multer','util','path','express'];(function(_0x53f964,_0x3b52b8){var _0x17be6c=function(_0x25a732){while(--_0x25a732){_0x53f964['push'](_0x53f964['shift']());}};_0x17be6c(++_0x3b52b8);}(_0xba47,0x1ac));var _0x7ba4=function(_0x431b0d,_0x1af454){_0x431b0d=_0x431b0d-0x0;var _0x391b65=_0xba47[_0x431b0d];return _0x391b65;};'use strict';var multer=require(_0x7ba4('0x0'));var util=require(_0x7ba4('0x1'));var path=require(_0x7ba4('0x2'));var timeout=require('connect-timeout');var express=require(_0x7ba4('0x3'));var router=express[_0x7ba4('0x4')]();var auth=require(_0x7ba4('0x5'));var interaction=require(_0x7ba4('0x6'));var config=require('../../config/environment');var controller=require(_0x7ba4('0x7'));router[_0x7ba4('0x8')]('/',auth['isAuthenticated'](),controller['index']);router[_0x7ba4('0x8')](_0x7ba4('0x9'),auth[_0x7ba4('0xa')](),controller[_0x7ba4('0xb')]);router[_0x7ba4('0x8')](_0x7ba4('0xc'),auth[_0x7ba4('0xa')](),controller[_0x7ba4('0xd')]);router['post']('/',auth['isAuthenticated'](),controller[_0x7ba4('0xe')]);router['put'](_0x7ba4('0xc'),auth[_0x7ba4('0xa')](),controller[_0x7ba4('0xf')]);router[_0x7ba4('0x10')]('/:id',auth[_0x7ba4('0xa')](),controller[_0x7ba4('0x11')]);module['exports']=router;
\ No newline at end of file
index 394dc43..b259c0e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcbb5=['sequelize','exports','STRING','INTEGER','DATE','BOOLEAN','TEXT','ENUM','SENT','SENDING','RECEIVED','FAILED'];(function(_0x1281d8,_0x26fa8c){var _0x253325=function(_0x509e82){while(--_0x509e82){_0x1281d8['push'](_0x1281d8['shift']());}};_0x253325(++_0x26fa8c);}(_0xcbb5,0x144));var _0x5cbb=function(_0x1a698d,_0x4441d1){_0x1a698d=_0x1a698d-0x0;var _0x58053c=_0xcbb5[_0x1a698d];return _0x58053c;};'use strict';var Sequelize=require(_0x5cbb('0x0'));module[_0x5cbb('0x1')]={'integration':{'type':Sequelize['STRING']},'eventChannel':{'type':Sequelize[_0x5cbb('0x2')]},'exitStatus':{'type':Sequelize[_0x5cbb('0x2')]},'ticketId':{'type':Sequelize[_0x5cbb('0x2')]},'integrationId':{'type':Sequelize[_0x5cbb('0x3')]},'contacts':{'type':Sequelize[_0x5cbb('0x2')]},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x5cbb('0x2')]},'calleridname':{'type':Sequelize[_0x5cbb('0x2')]},'queue':{'type':Sequelize[_0x5cbb('0x2')]},'interface':{'type':Sequelize[_0x5cbb('0x2')]},'membername':{'type':Sequelize[_0x5cbb('0x2')]},'agentcalledAt':{'type':Sequelize[_0x5cbb('0x4')]},'agentconnectAt':{'type':Sequelize[_0x5cbb('0x4')]},'holdtime':{'type':Sequelize[_0x5cbb('0x3')]},'agentcomplete':{'type':Sequelize[_0x5cbb('0x5')],'defaultValue':![]},'agentcompleteAt':{'type':Sequelize[_0x5cbb('0x4')]},'talktime':{'type':Sequelize[_0x5cbb('0x3')]},'agentacw':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'acwtime':{'type':Sequelize[_0x5cbb('0x3')]},'reason':{'type':Sequelize[_0x5cbb('0x2')]},'agentringnoanswer':{'type':Sequelize[_0x5cbb('0x5')],'defaultValue':![]},'agentringnoanswerAt':{'type':Sequelize[_0x5cbb('0x4')]},'agentdump':{'type':Sequelize[_0x5cbb('0x5')],'defaultValue':![]},'agentdumpAt':{'type':Sequelize[_0x5cbb('0x4')]},'lastevent':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0x5cbb('0x2')]},'channelstate':{'type':Sequelize[_0x5cbb('0x3')]},'channelstatedesc':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize[_0x5cbb('0x2')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0x5cbb('0x2')]},'context':{'type':Sequelize[_0x5cbb('0x2')]},'exten':{'type':Sequelize[_0x5cbb('0x2')]},'priority':{'type':Sequelize['STRING']},'destchannel':{'type':Sequelize[_0x5cbb('0x2')]},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize[_0x5cbb('0x2')]},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize[_0x5cbb('0x2')]},'destconnectedlinenum':{'type':Sequelize[_0x5cbb('0x2')]},'destconnectedlinename':{'type':Sequelize[_0x5cbb('0x2')]},'destlanguage':{'type':Sequelize[_0x5cbb('0x2')]},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize[_0x5cbb('0x2')]},'destexten':{'type':Sequelize[_0x5cbb('0x2')]},'destpriority':{'type':Sequelize[_0x5cbb('0x2')]},'destuniqueid':{'type':Sequelize[_0x5cbb('0x2')]},'messageId':{'type':Sequelize[_0x5cbb('0x2')]},'inReplyTo':{'type':Sequelize[_0x5cbb('0x2')]},'subject':{'type':Sequelize[_0x5cbb('0x2')]},'from':{'type':Sequelize[_0x5cbb('0x2')]},'to':{'type':Sequelize[_0x5cbb('0x2')]},'cc':{'type':Sequelize[_0x5cbb('0x2')]},'attachment':{'type':Sequelize[_0x5cbb('0x6')]},'html':{'type':Sequelize['TEXT']},'text':{'type':Sequelize['TEXT']},'status':{'type':Sequelize[_0x5cbb('0x7')](_0x5cbb('0x8'),_0x5cbb('0x9'),_0x5cbb('0xa'),_0x5cbb('0xb'))},'url':{'type':Sequelize[_0x5cbb('0x2')]},'app':{'type':Sequelize[_0x5cbb('0x2')]},'appdata':{'type':Sequelize['STRING']},'projectId':{'type':Sequelize[_0x5cbb('0x3')]}};
\ No newline at end of file
+var _0x25e5=['STRING','INTEGER','DATE','BOOLEAN','TEXT','ENUM','SENT','SENDING','RECEIVED','sequelize','exports'];(function(_0x25c6d8,_0xe64ce5){var _0x17a677=function(_0x4f4fac){while(--_0x4f4fac){_0x25c6d8['push'](_0x25c6d8['shift']());}};_0x17a677(++_0xe64ce5);}(_0x25e5,0xe5));var _0x525e=function(_0x14fad0,_0x278d75){_0x14fad0=_0x14fad0-0x0;var _0x5c665f=_0x25e5[_0x14fad0];return _0x5c665f;};'use strict';var Sequelize=require(_0x525e('0x0'));module[_0x525e('0x1')]={'integration':{'type':Sequelize[_0x525e('0x2')]},'eventChannel':{'type':Sequelize['STRING']},'exitStatus':{'type':Sequelize[_0x525e('0x2')]},'ticketId':{'type':Sequelize[_0x525e('0x2')]},'integrationId':{'type':Sequelize[_0x525e('0x3')]},'contacts':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x525e('0x2')]},'calleridnum':{'type':Sequelize[_0x525e('0x2')]},'calleridname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x525e('0x2')]},'interface':{'type':Sequelize[_0x525e('0x2')]},'membername':{'type':Sequelize[_0x525e('0x2')]},'agentcalledAt':{'type':Sequelize[_0x525e('0x4')]},'agentconnectAt':{'type':Sequelize[_0x525e('0x4')]},'holdtime':{'type':Sequelize[_0x525e('0x3')]},'agentcomplete':{'type':Sequelize[_0x525e('0x5')],'defaultValue':![]},'agentcompleteAt':{'type':Sequelize['DATE']},'talktime':{'type':Sequelize[_0x525e('0x3')]},'agentacw':{'type':Sequelize[_0x525e('0x5')],'defaultValue':![]},'acwtime':{'type':Sequelize['INTEGER']},'reason':{'type':Sequelize[_0x525e('0x2')]},'agentringnoanswer':{'type':Sequelize[_0x525e('0x5')],'defaultValue':![]},'agentringnoanswerAt':{'type':Sequelize[_0x525e('0x4')]},'agentdump':{'type':Sequelize[_0x525e('0x5')],'defaultValue':![]},'agentdumpAt':{'type':Sequelize['DATE']},'lastevent':{'type':Sequelize[_0x525e('0x2')]},'channel':{'type':Sequelize[_0x525e('0x2')]},'channelstate':{'type':Sequelize[_0x525e('0x3')]},'channelstatedesc':{'type':Sequelize[_0x525e('0x2')]},'connectedlinenum':{'type':Sequelize[_0x525e('0x2')]},'connectedlinename':{'type':Sequelize[_0x525e('0x2')]},'language':{'type':Sequelize[_0x525e('0x2')]},'accountcode':{'type':Sequelize['STRING']},'context':{'type':Sequelize[_0x525e('0x2')]},'exten':{'type':Sequelize[_0x525e('0x2')]},'priority':{'type':Sequelize[_0x525e('0x2')]},'destchannel':{'type':Sequelize[_0x525e('0x2')]},'destchannelstate':{'type':Sequelize[_0x525e('0x3')]},'destchannelstatedesc':{'type':Sequelize[_0x525e('0x2')]},'destcalleridnum':{'type':Sequelize[_0x525e('0x2')]},'destcalleridname':{'type':Sequelize['STRING']},'destconnectedlinenum':{'type':Sequelize['STRING']},'destconnectedlinename':{'type':Sequelize[_0x525e('0x2')]},'destlanguage':{'type':Sequelize[_0x525e('0x2')]},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize[_0x525e('0x2')]},'destexten':{'type':Sequelize[_0x525e('0x2')]},'destpriority':{'type':Sequelize[_0x525e('0x2')]},'destuniqueid':{'type':Sequelize['STRING']},'messageId':{'type':Sequelize[_0x525e('0x2')]},'inReplyTo':{'type':Sequelize[_0x525e('0x2')]},'subject':{'type':Sequelize[_0x525e('0x2')]},'from':{'type':Sequelize[_0x525e('0x2')]},'to':{'type':Sequelize['STRING']},'cc':{'type':Sequelize[_0x525e('0x2')]},'attachment':{'type':Sequelize[_0x525e('0x6')]},'html':{'type':Sequelize[_0x525e('0x6')]},'text':{'type':Sequelize[_0x525e('0x6')]},'status':{'type':Sequelize[_0x525e('0x7')](_0x525e('0x8'),_0x525e('0x9'),_0x525e('0xa'),'FAILED')},'url':{'type':Sequelize[_0x525e('0x2')]},'app':{'type':Sequelize[_0x525e('0x2')]},'appdata':{'type':Sequelize[_0x525e('0x2')]},'projectId':{'type':Sequelize[_0x525e('0x3')]}};
\ No newline at end of file
index c94454a..9fde6df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x80be=['jsforce','desk.js','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/environment','end','status','json','count','offset','limit','apply','reject','save','update','then','sendStatus','error','stack','name','send','index','IntegrationReport','rawAttributes','keys','query','intersection','model','fields','attributes','nolimit','order','sort','where','filters','pick','filter','merge','type','key','field','options','includeAll','findAll','rows','catch','show','params','length','include','find','create','body','destroy','describe','html-pdf','rimraf','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','crypto'];(function(_0x819464,_0x46fc91){var _0x49dcc0=function(_0x36b2b2){while(--_0x36b2b2){_0x819464['push'](_0x819464['shift']());}};_0x49dcc0(++_0x46fc91);}(_0x80be,0x18d));var _0xe80b=function(_0xe2a0fe,_0x1b2cc0){_0xe2a0fe=_0xe2a0fe-0x0;var _0x17ad7e=_0x80be[_0xe2a0fe];return _0x17ad7e;};'use strict';var pdf=require(_0xe80b('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xe80b('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xe80b('0x2'));var Mustache=require(_0xe80b('0x3'));var util=require(_0xe80b('0x4'));var path=require(_0xe80b('0x5'));var sox=require(_0xe80b('0x6'));var csv=require(_0xe80b('0x7'));var ejs=require(_0xe80b('0x8'));var fs=require('fs');var _=require(_0xe80b('0x9'));var squel=require('squel');var crypto=require(_0xe80b('0xa'));var jsforce=require(_0xe80b('0xb'));var deskjs=require(_0xe80b('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0xe80b('0xd'));var Redis=require('ioredis');var qs=require(_0xe80b('0xe'));var logger=require(_0xe80b('0xf'))(_0xe80b('0x10'));var utils=require('../../config/utils');var config=require(_0xe80b('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1f2e1e,_0x40aa18){_0x40aa18=_0x40aa18||0xcc;return function(_0x32029a){if(_0x32029a){return _0x1f2e1e['sendStatus'](_0x40aa18);}return _0x1f2e1e['status'](_0x40aa18)[_0xe80b('0x12')]();};}function respondWithResult(_0x2adba0,_0x535507){_0x535507=_0x535507||0xc8;return function(_0x47f777){if(_0x47f777){return _0x2adba0[_0xe80b('0x13')](_0x535507)[_0xe80b('0x14')](_0x47f777);}};}function respondWithFilteredResult(_0x33b0a4,_0x17ba3e){return function(_0x530be3){if(_0x530be3){var _0x39e301=_0x530be3[_0xe80b('0x15')],_0xe3d1a6=_0x17ba3e[_0xe80b('0x16')],_0x306185=_0x17ba3e[_0xe80b('0x16')]+_0x17ba3e[_0xe80b('0x17')],_0x1f96c0;if(_0x306185>=_0x39e301){_0x306185=_0x39e301;_0x1f96c0=0xc8;}else{_0x1f96c0=0xce;}_0x33b0a4['status'](_0x1f96c0);return _0x33b0a4['set']('Content-Range',_0xe3d1a6+'-'+_0x306185+'/'+_0x39e301)[_0xe80b('0x14')](_0x530be3);}return null;};}function patchUpdates(_0x2c64be){return function(_0x5c1e79){try{jsonpatch[_0xe80b('0x18')](_0x5c1e79,_0x2c64be,!![]);}catch(_0x1b8ab6){return BPromise[_0xe80b('0x19')](_0x1b8ab6);}return _0x5c1e79[_0xe80b('0x1a')]();};}function saveUpdates(_0x125865,_0x1f72d9){return function(_0x4a3e83){if(_0x4a3e83){return _0x4a3e83[_0xe80b('0x1b')](_0x125865)[_0xe80b('0x1c')](function(_0x5c861b){return _0x5c861b;});}return null;};}function removeEntity(_0x3c075f,_0x4ea5aa){return function(_0x2223e8){if(_0x2223e8){return _0x2223e8['destroy']()[_0xe80b('0x1c')](function(){_0x3c075f[_0xe80b('0x13')](0xcc)[_0xe80b('0x12')]();});}};}function handleEntityNotFound(_0x8b4123,_0x3c68c8){return function(_0x235d5e){if(!_0x235d5e){_0x8b4123[_0xe80b('0x1d')](0x194);}return _0x235d5e;};}function handleError(_0xefcfe4,_0x5ed1ff){_0x5ed1ff=_0x5ed1ff||0x1f4;return function(_0x3b1ebf){logger[_0xe80b('0x1e')](_0x3b1ebf[_0xe80b('0x1f')]);if(_0x3b1ebf[_0xe80b('0x20')]){delete _0x3b1ebf[_0xe80b('0x20')];}_0xefcfe4[_0xe80b('0x13')](_0x5ed1ff)[_0xe80b('0x21')](_0x3b1ebf);};}exports[_0xe80b('0x22')]=function(_0x5bbff0,_0x533a66){var _0x20625e={},_0x312e7e={},_0x18648c={'count':0x0,'rows':[]};var _0x4734ef=db[_0xe80b('0x23')][_0xe80b('0x24')];_0x312e7e['model']=_[_0xe80b('0x25')](_0x4734ef);_0x312e7e[_0xe80b('0x26')]=_['keys'](_0x5bbff0[_0xe80b('0x26')]);_0x312e7e['filters']=_[_0xe80b('0x27')](_0x312e7e[_0xe80b('0x28')],_0x312e7e[_0xe80b('0x26')]);_0x20625e['attributes']=_[_0xe80b('0x27')](_0x312e7e[_0xe80b('0x28')],qs[_0xe80b('0x29')](_0x5bbff0['query'][_0xe80b('0x29')]));_0x20625e[_0xe80b('0x2a')]=_0x20625e[_0xe80b('0x2a')]['length']?_0x20625e[_0xe80b('0x2a')]:_0x312e7e['model'];if(!_0x5bbff0[_0xe80b('0x26')]['hasOwnProperty'](_0xe80b('0x2b'))){_0x20625e[_0xe80b('0x17')]=qs[_0xe80b('0x17')](_0x5bbff0[_0xe80b('0x26')][_0xe80b('0x17')]);_0x20625e[_0xe80b('0x16')]=qs[_0xe80b('0x16')](_0x5bbff0[_0xe80b('0x26')]['offset']);}_0x20625e[_0xe80b('0x2c')]=qs[_0xe80b('0x2d')](_0x5bbff0[_0xe80b('0x26')][_0xe80b('0x2d')]);_0x20625e[_0xe80b('0x2e')]=qs[_0xe80b('0x2f')](_[_0xe80b('0x30')](_0x5bbff0[_0xe80b('0x26')],_0x312e7e['filters']));if(_0x5bbff0['query'][_0xe80b('0x31')]){_0x20625e[_0xe80b('0x2e')]=_[_0xe80b('0x32')](_0x20625e['where'],{'$or':_['map'](_0x4734ef,function(_0x242fce){if(_0x242fce[_0xe80b('0x33')][_0xe80b('0x34')]!=='VIRTUAL'){var _0x3dd440={};_0x3dd440[_0x242fce[_0xe80b('0x35')]]={'$like':'%'+_0x5bbff0[_0xe80b('0x26')]['filter']+'%'};return _0x3dd440;}})});}_0x20625e=_[_0xe80b('0x32')]({},_0x20625e,_0x5bbff0[_0xe80b('0x36')]);var _0x552fc6={'where':_0x20625e[_0xe80b('0x2e')]};return db[_0xe80b('0x23')]['count'](_0x552fc6)[_0xe80b('0x1c')](function(_0x551dfa){_0x18648c[_0xe80b('0x15')]=_0x551dfa;if(_0x5bbff0['query'][_0xe80b('0x37')]){_0x20625e['include']=[{'all':!![]}];}return db[_0xe80b('0x23')][_0xe80b('0x38')](_0x20625e);})['then'](function(_0x38fe41){_0x18648c[_0xe80b('0x39')]=_0x38fe41;return _0x18648c;})[_0xe80b('0x1c')](respondWithFilteredResult(_0x533a66,_0x20625e))[_0xe80b('0x3a')](handleError(_0x533a66,null));};exports[_0xe80b('0x3b')]=function(_0x2cda50,_0x5e978d){var _0x2873d7={'raw':![],'where':{'id':_0x2cda50[_0xe80b('0x3c')]['id']}},_0xd90538={};_0xd90538['model']=_['keys'](db[_0xe80b('0x23')][_0xe80b('0x24')]);_0xd90538[_0xe80b('0x26')]=_['keys'](_0x2cda50[_0xe80b('0x26')]);_0xd90538[_0xe80b('0x2f')]=_[_0xe80b('0x27')](_0xd90538[_0xe80b('0x28')],_0xd90538['query']);_0x2873d7[_0xe80b('0x2a')]=_['intersection'](_0xd90538['model'],qs[_0xe80b('0x29')](_0x2cda50[_0xe80b('0x26')][_0xe80b('0x29')]));_0x2873d7[_0xe80b('0x2a')]=_0x2873d7[_0xe80b('0x2a')][_0xe80b('0x3d')]?_0x2873d7['attributes']:_0xd90538[_0xe80b('0x28')];if(_0x2cda50[_0xe80b('0x26')]['includeAll']){_0x2873d7[_0xe80b('0x3e')]=[{'all':!![]}];}_0x2873d7=_['merge']({},_0x2873d7,_0x2cda50[_0xe80b('0x36')]);return db[_0xe80b('0x23')][_0xe80b('0x3f')](_0x2873d7)[_0xe80b('0x1c')](handleEntityNotFound(_0x5e978d,null))['then'](respondWithResult(_0x5e978d,null))[_0xe80b('0x3a')](handleError(_0x5e978d,null));};exports[_0xe80b('0x40')]=function(_0x52baaa,_0x5e7606){return db[_0xe80b('0x23')][_0xe80b('0x40')](_0x52baaa[_0xe80b('0x41')],{})[_0xe80b('0x1c')](respondWithResult(_0x5e7606,0xc9))['catch'](handleError(_0x5e7606,null));};exports[_0xe80b('0x1b')]=function(_0xa45fb5,_0x40fc8c){if(_0xa45fb5[_0xe80b('0x41')]['id']){delete _0xa45fb5[_0xe80b('0x41')]['id'];}return db[_0xe80b('0x23')][_0xe80b('0x3f')]({'where':{'id':_0xa45fb5[_0xe80b('0x3c')]['id']}})[_0xe80b('0x1c')](handleEntityNotFound(_0x40fc8c,null))[_0xe80b('0x1c')](saveUpdates(_0xa45fb5[_0xe80b('0x41')],null))[_0xe80b('0x1c')](respondWithResult(_0x40fc8c,null))[_0xe80b('0x3a')](handleError(_0x40fc8c,null));};exports[_0xe80b('0x42')]=function(_0x15575f,_0x149222){return db[_0xe80b('0x23')][_0xe80b('0x3f')]({'where':{'id':_0x15575f[_0xe80b('0x3c')]['id']}})['then'](handleEntityNotFound(_0x149222,null))[_0xe80b('0x1c')](removeEntity(_0x149222,null))['catch'](handleError(_0x149222,null));};exports['describe']=function(_0x58dc2a,_0x580eb3){return db[_0xe80b('0x23')][_0xe80b('0x43')]()[_0xe80b('0x1c')](respondWithResult(_0x580eb3,null))[_0xe80b('0x3a')](handleError(_0x580eb3,null));};
\ No newline at end of file
+var _0xaeb4=['status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','IntegrationReport','model','query','keys','filters','attributes','fields','length','hasOwnProperty','order','sort','where','merge','map','type','key','VIRTUAL','options','include','findAll','rows','params','rawAttributes','intersection','includeAll','find','catch','create','body','describe','html-pdf','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','lodash','crypto','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus'];(function(_0x302fa4,_0x49d8c6){var _0x43fddc=function(_0x28bd6e){while(--_0x28bd6e){_0x302fa4['push'](_0x302fa4['shift']());}};_0x43fddc(++_0x49d8c6);}(_0xaeb4,0x74));var _0x4aeb=function(_0x4fa489,_0x4cba6b){_0x4fa489=_0x4fa489-0x0;var _0x41d2ce=_0xaeb4[_0x4fa489];return _0x41d2ce;};'use strict';var pdf=require(_0x4aeb('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x4aeb('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x4aeb('0x2'));var rp=require(_0x4aeb('0x3'));var moment=require(_0x4aeb('0x4'));var BPromise=require(_0x4aeb('0x5'));var Mustache=require(_0x4aeb('0x6'));var util=require(_0x4aeb('0x7'));var path=require(_0x4aeb('0x8'));var sox=require(_0x4aeb('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x4aeb('0xa'));var squel=require('squel');var crypto=require(_0x4aeb('0xb'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x4aeb('0xc'));var authService=require(_0x4aeb('0xd'));var hardwareService=require(_0x4aeb('0xe'));var Redis=require('ioredis');var qs=require(_0x4aeb('0xf'));var logger=require(_0x4aeb('0x10'))(_0x4aeb('0x11'));var utils=require(_0x4aeb('0x12'));var config=require(_0x4aeb('0x13'));var db=require(_0x4aeb('0x14'))['db'];function respondWithStatusCode(_0x560a7f,_0x55d7a2){_0x55d7a2=_0x55d7a2||0xcc;return function(_0x4cb4a6){if(_0x4cb4a6){return _0x560a7f[_0x4aeb('0x15')](_0x55d7a2);}return _0x560a7f[_0x4aeb('0x16')](_0x55d7a2)[_0x4aeb('0x17')]();};}function respondWithResult(_0x1bd616,_0x24d57f){_0x24d57f=_0x24d57f||0xc8;return function(_0x27def5){if(_0x27def5){return _0x1bd616['status'](_0x24d57f)[_0x4aeb('0x18')](_0x27def5);}};}function respondWithFilteredResult(_0x3654ab,_0x244647){return function(_0x4b4af3){if(_0x4b4af3){var _0xf58661=_0x4b4af3[_0x4aeb('0x19')],_0x5d9ac2=_0x244647[_0x4aeb('0x1a')],_0x3291a1=_0x244647[_0x4aeb('0x1a')]+_0x244647[_0x4aeb('0x1b')],_0x2918da;if(_0x3291a1>=_0xf58661){_0x3291a1=_0xf58661;_0x2918da=0xc8;}else{_0x2918da=0xce;}_0x3654ab[_0x4aeb('0x16')](_0x2918da);return _0x3654ab[_0x4aeb('0x1c')](_0x4aeb('0x1d'),_0x5d9ac2+'-'+_0x3291a1+'/'+_0xf58661)[_0x4aeb('0x18')](_0x4b4af3);}return null;};}function patchUpdates(_0x31ea84){return function(_0x15f7f6){try{jsonpatch[_0x4aeb('0x1e')](_0x15f7f6,_0x31ea84,!![]);}catch(_0x3c409c){return BPromise[_0x4aeb('0x1f')](_0x3c409c);}return _0x15f7f6[_0x4aeb('0x20')]();};}function saveUpdates(_0x2618d6,_0x4c84ff){return function(_0x13cf03){if(_0x13cf03){return _0x13cf03[_0x4aeb('0x21')](_0x2618d6)[_0x4aeb('0x22')](function(_0x5bb0d8){return _0x5bb0d8;});}return null;};}function removeEntity(_0x77fc6d,_0x311c43){return function(_0x1c5693){if(_0x1c5693){return _0x1c5693[_0x4aeb('0x23')]()[_0x4aeb('0x22')](function(){_0x77fc6d[_0x4aeb('0x16')](0xcc)[_0x4aeb('0x17')]();});}};}function handleEntityNotFound(_0x509ef3,_0x1d7e11){return function(_0x14421c){if(!_0x14421c){_0x509ef3[_0x4aeb('0x15')](0x194);}return _0x14421c;};}function handleError(_0x8bb72d,_0x3c5ace){_0x3c5ace=_0x3c5ace||0x1f4;return function(_0x27b159){logger[_0x4aeb('0x24')](_0x27b159[_0x4aeb('0x25')]);if(_0x27b159[_0x4aeb('0x26')]){delete _0x27b159[_0x4aeb('0x26')];}_0x8bb72d[_0x4aeb('0x16')](_0x3c5ace)['send'](_0x27b159);};}exports['index']=function(_0x139962,_0x3933b6){var _0x13e29d={},_0xb1d512={},_0x21cf17={'count':0x0,'rows':[]};var _0x4beaf5=db[_0x4aeb('0x27')]['rawAttributes'];_0xb1d512[_0x4aeb('0x28')]=_['keys'](_0x4beaf5);_0xb1d512[_0x4aeb('0x29')]=_[_0x4aeb('0x2a')](_0x139962[_0x4aeb('0x29')]);_0xb1d512[_0x4aeb('0x2b')]=_['intersection'](_0xb1d512[_0x4aeb('0x28')],_0xb1d512[_0x4aeb('0x29')]);_0x13e29d[_0x4aeb('0x2c')]=_['intersection'](_0xb1d512[_0x4aeb('0x28')],qs[_0x4aeb('0x2d')](_0x139962['query'][_0x4aeb('0x2d')]));_0x13e29d[_0x4aeb('0x2c')]=_0x13e29d[_0x4aeb('0x2c')][_0x4aeb('0x2e')]?_0x13e29d['attributes']:_0xb1d512['model'];if(!_0x139962[_0x4aeb('0x29')][_0x4aeb('0x2f')]('nolimit')){_0x13e29d[_0x4aeb('0x1b')]=qs[_0x4aeb('0x1b')](_0x139962[_0x4aeb('0x29')][_0x4aeb('0x1b')]);_0x13e29d[_0x4aeb('0x1a')]=qs['offset'](_0x139962[_0x4aeb('0x29')][_0x4aeb('0x1a')]);}_0x13e29d[_0x4aeb('0x30')]=qs[_0x4aeb('0x31')](_0x139962['query'][_0x4aeb('0x31')]);_0x13e29d[_0x4aeb('0x32')]=qs[_0x4aeb('0x2b')](_['pick'](_0x139962[_0x4aeb('0x29')],_0xb1d512[_0x4aeb('0x2b')]));if(_0x139962[_0x4aeb('0x29')]['filter']){_0x13e29d[_0x4aeb('0x32')]=_[_0x4aeb('0x33')](_0x13e29d[_0x4aeb('0x32')],{'$or':_[_0x4aeb('0x34')](_0x4beaf5,function(_0x37bc3d){if(_0x37bc3d[_0x4aeb('0x35')][_0x4aeb('0x36')]!==_0x4aeb('0x37')){var _0x497139={};_0x497139[_0x37bc3d['field']]={'$like':'%'+_0x139962[_0x4aeb('0x29')]['filter']+'%'};return _0x497139;}})});}_0x13e29d=_[_0x4aeb('0x33')]({},_0x13e29d,_0x139962[_0x4aeb('0x38')]);var _0x42cd1c={'where':_0x13e29d[_0x4aeb('0x32')]};return db[_0x4aeb('0x27')][_0x4aeb('0x19')](_0x42cd1c)[_0x4aeb('0x22')](function(_0x29ef94){_0x21cf17[_0x4aeb('0x19')]=_0x29ef94;if(_0x139962[_0x4aeb('0x29')]['includeAll']){_0x13e29d[_0x4aeb('0x39')]=[{'all':!![]}];}return db['IntegrationReport'][_0x4aeb('0x3a')](_0x13e29d);})['then'](function(_0x3e402e){_0x21cf17[_0x4aeb('0x3b')]=_0x3e402e;return _0x21cf17;})[_0x4aeb('0x22')](respondWithFilteredResult(_0x3933b6,_0x13e29d))['catch'](handleError(_0x3933b6,null));};exports['show']=function(_0x346dd9,_0x2834f9){var _0xf5bf54={'raw':![],'where':{'id':_0x346dd9[_0x4aeb('0x3c')]['id']}},_0x2d0e4f={};_0x2d0e4f[_0x4aeb('0x28')]=_[_0x4aeb('0x2a')](db['IntegrationReport'][_0x4aeb('0x3d')]);_0x2d0e4f['query']=_['keys'](_0x346dd9[_0x4aeb('0x29')]);_0x2d0e4f[_0x4aeb('0x2b')]=_[_0x4aeb('0x3e')](_0x2d0e4f[_0x4aeb('0x28')],_0x2d0e4f[_0x4aeb('0x29')]);_0xf5bf54[_0x4aeb('0x2c')]=_[_0x4aeb('0x3e')](_0x2d0e4f[_0x4aeb('0x28')],qs[_0x4aeb('0x2d')](_0x346dd9[_0x4aeb('0x29')][_0x4aeb('0x2d')]));_0xf5bf54[_0x4aeb('0x2c')]=_0xf5bf54[_0x4aeb('0x2c')][_0x4aeb('0x2e')]?_0xf5bf54[_0x4aeb('0x2c')]:_0x2d0e4f['model'];if(_0x346dd9['query'][_0x4aeb('0x3f')]){_0xf5bf54[_0x4aeb('0x39')]=[{'all':!![]}];}_0xf5bf54=_[_0x4aeb('0x33')]({},_0xf5bf54,_0x346dd9[_0x4aeb('0x38')]);return db[_0x4aeb('0x27')][_0x4aeb('0x40')](_0xf5bf54)[_0x4aeb('0x22')](handleEntityNotFound(_0x2834f9,null))['then'](respondWithResult(_0x2834f9,null))[_0x4aeb('0x41')](handleError(_0x2834f9,null));};exports['create']=function(_0x55dbb5,_0x575d55){return db[_0x4aeb('0x27')][_0x4aeb('0x42')](_0x55dbb5['body'],{})[_0x4aeb('0x22')](respondWithResult(_0x575d55,0xc9))[_0x4aeb('0x41')](handleError(_0x575d55,null));};exports[_0x4aeb('0x21')]=function(_0x4aaad4,_0x55d07b){if(_0x4aaad4[_0x4aeb('0x43')]['id']){delete _0x4aaad4['body']['id'];}return db['IntegrationReport']['find']({'where':{'id':_0x4aaad4[_0x4aeb('0x3c')]['id']}})[_0x4aeb('0x22')](handleEntityNotFound(_0x55d07b,null))[_0x4aeb('0x22')](saveUpdates(_0x4aaad4[_0x4aeb('0x43')],null))[_0x4aeb('0x22')](respondWithResult(_0x55d07b,null))[_0x4aeb('0x41')](handleError(_0x55d07b,null));};exports[_0x4aeb('0x23')]=function(_0x261bc1,_0x1147bf){return db[_0x4aeb('0x27')][_0x4aeb('0x40')]({'where':{'id':_0x261bc1[_0x4aeb('0x3c')]['id']}})[_0x4aeb('0x22')](handleEntityNotFound(_0x1147bf,null))[_0x4aeb('0x22')](removeEntity(_0x1147bf,null))['catch'](handleError(_0x1147bf,null));};exports[_0x4aeb('0x44')]=function(_0x1d352b,_0x3e7d68){return db[_0x4aeb('0x27')][_0x4aeb('0x44')]()[_0x4aeb('0x22')](respondWithResult(_0x3e7d68,null))[_0x4aeb('0x41')](handleError(_0x3e7d68,null));};
\ No newline at end of file
index 3045acd..a9367a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a6b=['moment','request-promise','./integrationReport.attributes','exports','IntegrationReport','report_integration','lodash'];(function(_0x478087,_0x109fb2){var _0x54bff1=function(_0x4589b3){while(--_0x4589b3){_0x478087['push'](_0x478087['shift']());}};_0x54bff1(++_0x109fb2);}(_0x0a6b,0x18e));var _0xb0a6=function(_0x5e9945,_0x3e95e2){_0x5e9945=_0x5e9945-0x0;var _0x4e5a0c=_0x0a6b[_0x5e9945];return _0x4e5a0c;};'use strict';var _=require(_0xb0a6('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xb0a6('0x1'));var BPromise=require('bluebird');var rp=require(_0xb0a6('0x2'));var attributes=require(_0xb0a6('0x3'));module[_0xb0a6('0x4')]=function(_0x544a64,_0x102ecd){return _0x544a64['define'](_0xb0a6('0x5'),attributes,{'tableName':_0xb0a6('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb138=['api','moment','bluebird','request-promise','exports','IntegrationReport','report_integration','lodash','util','../../config/logger'];(function(_0x4dfe12,_0x4ab2c0){var _0x4018e0=function(_0x59bc0e){while(--_0x59bc0e){_0x4dfe12['push'](_0x4dfe12['shift']());}};_0x4018e0(++_0x4ab2c0);}(_0xb138,0x1dd));var _0x8b13=function(_0x38ea62,_0x1ae214){_0x38ea62=_0x38ea62-0x0;var _0x4c1032=_0xb138[_0x38ea62];return _0x4c1032;};'use strict';var _=require(_0x8b13('0x0'));var util=require(_0x8b13('0x1'));var logger=require(_0x8b13('0x2'))(_0x8b13('0x3'));var moment=require(_0x8b13('0x4'));var BPromise=require(_0x8b13('0x5'));var rp=require(_0x8b13('0x6'));var attributes=require('./integrationReport.attributes');module[_0x8b13('0x7')]=function(_0x241acb,_0x3af81a){return _0x241acb['define'](_0x8b13('0x8'),attributes,{'tableName':_0x8b13('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8fe9c07..7343b74 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fd9=['request','then','info','IntegrationReport,\x20%s,\x20%s','request\x20sent','debug','IntegrationReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http'];(function(_0x4da550,_0x968880){var _0x227e02=function(_0x4c4bcd){while(--_0x4c4bcd){_0x4da550['push'](_0x4da550['shift']());}};_0x227e02(++_0x968880);}(_0x3fd9,0x183));var _0x93fd=function(_0x561a5c,_0x883d45){_0x561a5c=_0x561a5c-0x0;var _0x5a6a4c=_0x3fd9[_0x561a5c];return _0x5a6a4c;};'use strict';var _=require(_0x93fd('0x0'));var util=require(_0x93fd('0x1'));var moment=require(_0x93fd('0x2'));var BPromise=require(_0x93fd('0x3'));var rs=require(_0x93fd('0x4'));var fs=require('fs');var Redis=require(_0x93fd('0x5'));var db=require(_0x93fd('0x6'))['db'];var utils=require(_0x93fd('0x7'));var logger=require(_0x93fd('0x8'))(_0x93fd('0x9'));var config=require(_0x93fd('0xa'));var jayson=require('jayson/promise');var client=jayson[_0x93fd('0xb')][_0x93fd('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x140988,_0x2e7802,_0x453dbf){return new BPromise(function(_0x4216bb,_0x409d50){return client[_0x93fd('0xd')](_0x140988,_0x453dbf)[_0x93fd('0xe')](function(_0x19d14c){logger[_0x93fd('0xf')](_0x93fd('0x10'),_0x2e7802,_0x93fd('0x11'));logger[_0x93fd('0x12')](_0x93fd('0x13'),_0x2e7802,_0x93fd('0x11'),JSON[_0x93fd('0x14')](_0x19d14c));if(_0x19d14c['error']){if(_0x19d14c[_0x93fd('0x15')][_0x93fd('0x16')]===0x1f4){logger[_0x93fd('0x15')](_0x93fd('0x10'),_0x2e7802,_0x19d14c[_0x93fd('0x15')][_0x93fd('0x17')]);return _0x409d50(_0x19d14c[_0x93fd('0x15')][_0x93fd('0x17')]);}logger['error']('IntegrationReport,\x20%s,\x20%s',_0x2e7802,_0x19d14c[_0x93fd('0x15')][_0x93fd('0x17')]);return _0x4216bb(_0x19d14c['error'][_0x93fd('0x17')]);}else{logger[_0x93fd('0xf')](_0x93fd('0x10'),_0x2e7802,_0x93fd('0x11'));_0x4216bb(_0x19d14c['result']['message']);}})[_0x93fd('0x18')](function(_0x2404c6){logger[_0x93fd('0x15')](_0x93fd('0x10'),_0x2e7802,_0x2404c6);_0x409d50(_0x2404c6);});});}
\ No newline at end of file
+var _0x6b89=['info','IntegrationReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','util','moment','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','http','then'];(function(_0xa6cc5c,_0x239c99){var _0x44803d=function(_0x515b6e){while(--_0x515b6e){_0xa6cc5c['push'](_0xa6cc5c['shift']());}};_0x44803d(++_0x239c99);}(_0x6b89,0x186));var _0x96b8=function(_0x1e347b,_0x6bf2bb){_0x1e347b=_0x1e347b-0x0;var _0x208f8c=_0x6b89[_0x1e347b];return _0x208f8c;};'use strict';var _=require('lodash');var util=require(_0x96b8('0x0'));var moment=require(_0x96b8('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x96b8('0x2'));var db=require(_0x96b8('0x3'))['db'];var utils=require(_0x96b8('0x4'));var logger=require('../../config/logger')('rpc');var config=require(_0x96b8('0x5'));var jayson=require(_0x96b8('0x6'));var client=jayson['client'][_0x96b8('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x5585ad,_0x44932b,_0x74c982){return new BPromise(function(_0x312b32,_0x5e6d9e){return client['request'](_0x5585ad,_0x74c982)[_0x96b8('0x8')](function(_0x4abff9){logger[_0x96b8('0x9')](_0x96b8('0xa'),_0x44932b,_0x96b8('0xb'));logger[_0x96b8('0xc')]('IntegrationReport,\x20%s,\x20%s,\x20%s',_0x44932b,_0x96b8('0xb'),JSON[_0x96b8('0xd')](_0x4abff9));if(_0x4abff9[_0x96b8('0xe')]){if(_0x4abff9['error'][_0x96b8('0xf')]===0x1f4){logger[_0x96b8('0xe')](_0x96b8('0xa'),_0x44932b,_0x4abff9[_0x96b8('0xe')]['message']);return _0x5e6d9e(_0x4abff9[_0x96b8('0xe')]['message']);}logger['error'](_0x96b8('0xa'),_0x44932b,_0x4abff9[_0x96b8('0xe')]['message']);return _0x312b32(_0x4abff9[_0x96b8('0xe')][_0x96b8('0x10')]);}else{logger['info']('IntegrationReport,\x20%s,\x20%s',_0x44932b,_0x96b8('0xb'));_0x312b32(_0x4abff9[_0x96b8('0x11')][_0x96b8('0x10')]);}})[_0x96b8('0x12')](function(_0x4bb9f8){logger[_0x96b8('0xe')](_0x96b8('0xa'),_0x44932b,_0x4bb9f8);_0x5e6d9e(_0x4bb9f8);});});}
\ No newline at end of file
index f5769ac..3e85880 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x199c=['update','delete','destroy','multer','util','path','express','Router','../../components/auth/service','./interval.controller','get','isAuthenticated','index','/:id','show','getIntervals','post','/:id/sub_intervals','addInterval','/:id/sub_intervals/create_many'];(function(_0x2272b5,_0x362458){var _0x110156=function(_0x5c2e32){while(--_0x5c2e32){_0x2272b5['push'](_0x2272b5['shift']());}};_0x110156(++_0x362458);}(_0x199c,0x7b));var _0xc199=function(_0x16f775,_0x45b10f){_0x16f775=_0x16f775-0x0;var _0x17d9e2=_0x199c[_0x16f775];return _0x17d9e2;};'use strict';var multer=require(_0xc199('0x0'));var util=require(_0xc199('0x1'));var path=require(_0xc199('0x2'));var timeout=require('connect-timeout');var express=require(_0xc199('0x3'));var router=express[_0xc199('0x4')]();var auth=require(_0xc199('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0xc199('0x6'));router[_0xc199('0x7')]('/',auth[_0xc199('0x8')](),controller[_0xc199('0x9')]);router[_0xc199('0x7')](_0xc199('0xa'),auth['isAuthenticated'](),controller[_0xc199('0xb')]);router['get']('/:id/sub_intervals',auth['isAuthenticated'](),controller[_0xc199('0xc')]);router[_0xc199('0xd')]('/',auth[_0xc199('0x8')](),controller['create']);router[_0xc199('0xd')](_0xc199('0xe'),auth['isAuthenticated'](),controller[_0xc199('0xf')]);router[_0xc199('0xd')](_0xc199('0x10'),auth['isAuthenticated'](),controller['addIntervals']);router['put'](_0xc199('0xa'),auth[_0xc199('0x8')](),controller[_0xc199('0x11')]);router[_0xc199('0x12')](_0xc199('0xa'),auth[_0xc199('0x8')](),controller[_0xc199('0x13')]);module['exports']=router;
\ No newline at end of file
+var _0x0135=['index','show','get','/:id/sub_intervals','getIntervals','post','addInterval','addIntervals','/:id','update','destroy','exports','multer','util','path','connect-timeout','../../components/interaction/service','./interval.controller','isAuthenticated'];(function(_0x134c2e,_0x3573c4){var _0x2825db=function(_0x2a574d){while(--_0x2a574d){_0x134c2e['push'](_0x134c2e['shift']());}};_0x2825db(++_0x3573c4);}(_0x0135,0x188));var _0x5013=function(_0x3b9a6e,_0x241020){_0x3b9a6e=_0x3b9a6e-0x0;var _0x35b7c7=_0x0135[_0x3b9a6e];return _0x35b7c7;};'use strict';var multer=require(_0x5013('0x0'));var util=require(_0x5013('0x1'));var path=require(_0x5013('0x2'));var timeout=require(_0x5013('0x3'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x5013('0x4'));var config=require('../../config/environment');var controller=require(_0x5013('0x5'));router['get']('/',auth[_0x5013('0x6')](),controller[_0x5013('0x7')]);router['get']('/:id',auth['isAuthenticated'](),controller[_0x5013('0x8')]);router[_0x5013('0x9')](_0x5013('0xa'),auth[_0x5013('0x6')](),controller[_0x5013('0xb')]);router[_0x5013('0xc')]('/',auth['isAuthenticated'](),controller['create']);router['post'](_0x5013('0xa'),auth[_0x5013('0x6')](),controller[_0x5013('0xd')]);router[_0x5013('0xc')]('/:id/sub_intervals/create_many',auth[_0x5013('0x6')](),controller[_0x5013('0xe')]);router['put'](_0x5013('0xf'),auth['isAuthenticated'](),controller[_0x5013('0x10')]);router['delete'](_0x5013('0xf'),auth[_0x5013('0x6')](),controller[_0x5013('0x11')]);module[_0x5013('0x12')]=router;
\ No newline at end of file
index 53f31de..866b815 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeaa5=['STRING'];(function(_0x119ddd,_0x3e6962){var _0x3a8a62=function(_0x8226fd){while(--_0x8226fd){_0x119ddd['push'](_0x119ddd['shift']());}};_0x3a8a62(++_0x3e6962);}(_0xeaa5,0xea));var _0x5eaa=function(_0x40182e,_0x577f1f){_0x40182e=_0x40182e-0x0;var _0x2acdd9=_0xeaa5[_0x40182e];return _0x2acdd9;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x5eaa('0x0')]},'description':{'type':Sequelize[_0x5eaa('0x0')]},'interval':{'type':Sequelize[_0x5eaa('0x0')],'allowNull':!![]}};
\ No newline at end of file
+var _0x765a=['sequelize','STRING'];(function(_0x18ab2a,_0x4debcd){var _0x16dcee=function(_0x10107a){while(--_0x10107a){_0x18ab2a['push'](_0x18ab2a['shift']());}};_0x16dcee(++_0x4debcd);}(_0x765a,0xbe));var _0xa765=function(_0x427cce,_0x718314){_0x427cce=_0x427cce-0x0;var _0x283078=_0x765a[_0x427cce];return _0x283078;};'use strict';var Sequelize=require(_0xa765('0x0'));module['exports']={'name':{'type':Sequelize[_0xa765('0x1')]},'description':{'type':Sequelize[_0xa765('0x1')]},'interval':{'type':Sequelize[_0xa765('0x1')],'allowNull':!![]}};
\ No newline at end of file
index 95a0463..9fa5a1b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f39=['index','Interval','rawAttributes','query','keys','intersection','model','attributes','fields','length','hasOwnProperty','limit','order','sort','where','filters','pick','map','type','key','filter','merge','options','includeAll','include','rows','catch','show','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Intervals','UserProfileSection','find','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','addInterval','IntervalId','getIntervals','findOne','addIntervals','sequelize','transaction','findAll','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','sox','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','get','UserProfileResource','destroy','error','stack','name','send'];(function(_0x46954b,_0x2aad2b){var _0x3787ad=function(_0x484f89){while(--_0x484f89){_0x46954b['push'](_0x46954b['shift']());}};_0x3787ad(++_0x2aad2b);}(_0x1f39,0x193));var _0x91f3=function(_0x27cd66,_0x1d5b24){_0x27cd66=_0x27cd66-0x0;var _0x467e85=_0x1f39[_0x27cd66];return _0x467e85;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x91f3('0x0'));var zipdir=require('zip-dir');var jsonpatch=require(_0x91f3('0x1'));var rp=require(_0x91f3('0x2'));var moment=require('moment');var BPromise=require(_0x91f3('0x3'));var Mustache=require(_0x91f3('0x4'));var util=require(_0x91f3('0x5'));var path=require('path');var sox=require(_0x91f3('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x91f3('0x7'));var squel=require(_0x91f3('0x8'));var crypto=require(_0x91f3('0x9'));var jsforce=require(_0x91f3('0xa'));var deskjs=require(_0x91f3('0xb'));var toCsv=require(_0x91f3('0xc'));var querystring=require(_0x91f3('0xd'));var Papa=require(_0x91f3('0xe'));var authService=require('../../components/auth/service');var hardwareService=require(_0x91f3('0xf'));var Redis=require(_0x91f3('0x10'));var qs=require(_0x91f3('0x11'));var logger=require(_0x91f3('0x12'))(_0x91f3('0x13'));var utils=require(_0x91f3('0x14'));var config=require('../../config/environment');var db=require(_0x91f3('0x15'))['db'];var extensions=require('../../components/extensions/rewrite');function respondWithStatusCode(_0x563616,_0xc492bc){_0xc492bc=_0xc492bc||0xcc;return function(_0x561001){if(_0x561001){return _0x563616[_0x91f3('0x16')](_0xc492bc);}return _0x563616[_0x91f3('0x17')](_0xc492bc)[_0x91f3('0x18')]();};}function respondWithResult(_0x558069,_0x50a0d2){_0x50a0d2=_0x50a0d2||0xc8;return function(_0x11b871){if(_0x11b871){return _0x558069[_0x91f3('0x17')](_0x50a0d2)[_0x91f3('0x19')](_0x11b871);}};}function respondWithFilteredResult(_0x265ab5,_0x5e97d9){return function(_0x1ff0f8){if(_0x1ff0f8){var _0x5be077=_0x1ff0f8[_0x91f3('0x1a')],_0x598d92=_0x5e97d9[_0x91f3('0x1b')],_0x17aebb=_0x5e97d9[_0x91f3('0x1b')]+_0x5e97d9['limit'],_0x4e6acf;if(_0x17aebb>=_0x5be077){_0x17aebb=_0x5be077;_0x4e6acf=0xc8;}else{_0x4e6acf=0xce;}_0x265ab5[_0x91f3('0x17')](_0x4e6acf);return _0x265ab5[_0x91f3('0x1c')](_0x91f3('0x1d'),_0x598d92+'-'+_0x17aebb+'/'+_0x5be077)[_0x91f3('0x19')](_0x1ff0f8);}return null;};}function patchUpdates(_0x30be82){return function(_0x1f844b){try{jsonpatch[_0x91f3('0x1e')](_0x1f844b,_0x30be82,!![]);}catch(_0x2241ef){return BPromise[_0x91f3('0x1f')](_0x2241ef);}return _0x1f844b[_0x91f3('0x20')]();};}function saveUpdates(_0x34c3a4,_0x26a5f3){return function(_0x351f4a){if(_0x351f4a){return _0x351f4a[_0x91f3('0x21')](_0x34c3a4)[_0x91f3('0x22')](function(_0x2936c1){return _0x2936c1;});}return null;};}function removeEntity(_0x5cec3f,_0x5d8cce){return function(_0x1f4123){if(_0x1f4123){return _0x1f4123['destroy']()[_0x91f3('0x22')](function(){var _0x1b7ac4=_0x1f4123[_0x91f3('0x23')]({'plain':!![]});var _0x2a2025='Intervals';return db[_0x91f3('0x24')][_0x91f3('0x25')]({'where':{'type':_0x2a2025,'resourceId':_0x1b7ac4['id']}})[_0x91f3('0x22')](function(){return _0x1f4123;});})['then'](function(){_0x5cec3f[_0x91f3('0x17')](0xcc)[_0x91f3('0x18')]();});}};}function handleEntityNotFound(_0x245cfe,_0xa81f62){return function(_0x3d759a){if(!_0x3d759a){_0x245cfe['sendStatus'](0x194);}return _0x3d759a;};}function handleError(_0x485bfb,_0x3d5afc){_0x3d5afc=_0x3d5afc||0x1f4;return function(_0x5842e7){logger[_0x91f3('0x26')](_0x5842e7[_0x91f3('0x27')]);if(_0x5842e7['name']){delete _0x5842e7[_0x91f3('0x28')];}_0x485bfb[_0x91f3('0x17')](_0x3d5afc)[_0x91f3('0x29')](_0x5842e7);};}exports[_0x91f3('0x2a')]=function(_0x1cdb99,_0x13c5ba){var _0x54c163={},_0x4b38a5={},_0x302519={'count':0x0,'rows':[]};var _0x419667=db[_0x91f3('0x2b')][_0x91f3('0x2c')];_0x4b38a5['model']=_['keys'](_0x419667);_0x4b38a5[_0x91f3('0x2d')]=_[_0x91f3('0x2e')](_0x1cdb99[_0x91f3('0x2d')]);_0x4b38a5['filters']=_[_0x91f3('0x2f')](_0x4b38a5[_0x91f3('0x30')],_0x4b38a5[_0x91f3('0x2d')]);_0x54c163[_0x91f3('0x31')]=_[_0x91f3('0x2f')](_0x4b38a5[_0x91f3('0x30')],qs[_0x91f3('0x32')](_0x1cdb99[_0x91f3('0x2d')][_0x91f3('0x32')]));_0x54c163[_0x91f3('0x31')]=_0x54c163['attributes'][_0x91f3('0x33')]?_0x54c163['attributes']:_0x4b38a5[_0x91f3('0x30')];if(!_0x1cdb99[_0x91f3('0x2d')][_0x91f3('0x34')]('nolimit')){_0x54c163[_0x91f3('0x35')]=qs['limit'](_0x1cdb99[_0x91f3('0x2d')][_0x91f3('0x35')]);_0x54c163['offset']=qs[_0x91f3('0x1b')](_0x1cdb99['query']['offset']);}_0x54c163[_0x91f3('0x36')]=qs[_0x91f3('0x37')](_0x1cdb99[_0x91f3('0x2d')][_0x91f3('0x37')]);_0x54c163[_0x91f3('0x38')]=qs[_0x91f3('0x39')](_[_0x91f3('0x3a')](_0x1cdb99['query'],_0x4b38a5[_0x91f3('0x39')]));if(_0x1cdb99[_0x91f3('0x2d')]['filter']){_0x54c163[_0x91f3('0x38')]=_['merge'](_0x54c163[_0x91f3('0x38')],{'$or':_[_0x91f3('0x3b')](_0x419667,function(_0x2c8a07){if(_0x2c8a07[_0x91f3('0x3c')][_0x91f3('0x3d')]!=='VIRTUAL'){var _0x32f648={};_0x32f648[_0x2c8a07['field']]={'$like':'%'+_0x1cdb99[_0x91f3('0x2d')][_0x91f3('0x3e')]+'%'};return _0x32f648;}})});}_0x54c163=_[_0x91f3('0x3f')]({},_0x54c163,_0x1cdb99[_0x91f3('0x40')]);var _0x14dd23={'where':_0x54c163[_0x91f3('0x38')]};return db[_0x91f3('0x2b')]['count'](_0x14dd23)[_0x91f3('0x22')](function(_0x3e5dd2){_0x302519['count']=_0x3e5dd2;if(_0x1cdb99[_0x91f3('0x2d')][_0x91f3('0x41')]){_0x54c163[_0x91f3('0x42')]=[{'all':!![]}];}return db[_0x91f3('0x2b')]['findAll'](_0x54c163);})[_0x91f3('0x22')](function(_0x39a2ea){_0x302519[_0x91f3('0x43')]=_0x39a2ea;return _0x302519;})[_0x91f3('0x22')](respondWithFilteredResult(_0x13c5ba,_0x54c163))[_0x91f3('0x44')](handleError(_0x13c5ba,null));};exports[_0x91f3('0x45')]=function(_0xc7d167,_0x14ab3f){var _0x132150={'raw':!![],'where':{'id':_0xc7d167['params']['id']}},_0x57c8cd={};_0x57c8cd[_0x91f3('0x30')]=_[_0x91f3('0x2e')](db['Interval']['rawAttributes']);_0x57c8cd[_0x91f3('0x2d')]=_[_0x91f3('0x2e')](_0xc7d167[_0x91f3('0x2d')]);_0x57c8cd[_0x91f3('0x39')]=_[_0x91f3('0x2f')](_0x57c8cd[_0x91f3('0x30')],_0x57c8cd[_0x91f3('0x2d')]);_0x132150[_0x91f3('0x31')]=_[_0x91f3('0x2f')](_0x57c8cd[_0x91f3('0x30')],qs[_0x91f3('0x32')](_0xc7d167['query']['fields']));_0x132150[_0x91f3('0x31')]=_0x132150[_0x91f3('0x31')][_0x91f3('0x33')]?_0x132150['attributes']:_0x57c8cd['model'];if(_0xc7d167[_0x91f3('0x2d')]['includeAll']){_0x132150[_0x91f3('0x42')]=[{'all':!![]}];}_0x132150=_[_0x91f3('0x3f')]({},_0x132150,_0xc7d167['options']);return db['Interval']['find'](_0x132150)[_0x91f3('0x22')](handleEntityNotFound(_0x14ab3f,null))[_0x91f3('0x22')](respondWithResult(_0x14ab3f,null))[_0x91f3('0x44')](handleError(_0x14ab3f,null));};exports[_0x91f3('0x46')]=function(_0x34dbe3,_0x78fd89){return db[_0x91f3('0x2b')][_0x91f3('0x46')](_0x34dbe3[_0x91f3('0x47')],{})[_0x91f3('0x22')](function(_0x22661c){var _0x586554=_0x34dbe3[_0x91f3('0x48')][_0x91f3('0x23')]({'plain':!![]});if(!_0x586554)throw new Error(_0x91f3('0x49'));if(_0x586554['role']==='user'){var _0x2200ae=_0x22661c[_0x91f3('0x23')]({'plain':!![]});var _0x3cccd7=_0x91f3('0x4a');return db[_0x91f3('0x4b')][_0x91f3('0x4c')]({'where':{'name':_0x3cccd7,'userProfileId':_0x586554[_0x91f3('0x4d')]},'raw':!![]})[_0x91f3('0x22')](function(_0x467308){if(_0x467308&&_0x467308[_0x91f3('0x4e')]===0x0){return db[_0x91f3('0x24')][_0x91f3('0x46')]({'name':_0x2200ae['name'],'resourceId':_0x2200ae['id'],'type':_0x467308[_0x91f3('0x28')],'sectionId':_0x467308['id']},{})[_0x91f3('0x22')](function(){return _0x22661c;});}else{return _0x22661c;}})[_0x91f3('0x44')](function(_0x30e420){logger[_0x91f3('0x26')](_0x91f3('0x4f'),_0x30e420);throw _0x30e420;});}return _0x22661c;})[_0x91f3('0x22')](respondWithResult(_0x78fd89,0xc9))[_0x91f3('0x44')](handleError(_0x78fd89,null));};exports[_0x91f3('0x21')]=function(_0x4ce4ed,_0x43c4dd){if(_0x4ce4ed[_0x91f3('0x47')]['id']){delete _0x4ce4ed['body']['id'];}return db[_0x91f3('0x2b')][_0x91f3('0x4c')]({'where':{'id':_0x4ce4ed[_0x91f3('0x50')]['id']}})['then'](handleEntityNotFound(_0x43c4dd,null))[_0x91f3('0x22')](saveUpdates(_0x4ce4ed[_0x91f3('0x47')],null))[_0x91f3('0x22')](respondWithResult(_0x43c4dd,null))[_0x91f3('0x44')](handleError(_0x43c4dd,null));};exports[_0x91f3('0x25')]=function(_0x54a6d2,_0x14ab64){return db['Interval']['find']({'where':{'id':_0x54a6d2['params']['id']}})[_0x91f3('0x22')](handleEntityNotFound(_0x14ab64,null))['then'](removeEntity(_0x14ab64,null))[_0x91f3('0x44')](handleError(_0x14ab64,null));};exports[_0x91f3('0x51')]=function(_0x28d903,_0x43353c,_0x56f710){if(_0x28d903[_0x91f3('0x47')]['id']){delete _0x28d903[_0x91f3('0x47')]['id'];}return db[_0x91f3('0x2b')][_0x91f3('0x4c')]({'where':{'id':_0x28d903[_0x91f3('0x50')]['id']}})[_0x91f3('0x22')](handleEntityNotFound(_0x43353c,null))[_0x91f3('0x22')](function(_0xfcc05b){if(_0xfcc05b){_0x28d903[_0x91f3('0x47')][_0x91f3('0x52')]=_0xfcc05b['id'];return db['Interval'][_0x91f3('0x46')](_0x28d903['body']);}})[_0x91f3('0x22')](respondWithResult(_0x43353c,null))[_0x91f3('0x44')](handleError(_0x43353c,null));};exports[_0x91f3('0x53')]=function(_0x2ce85a,_0x3cd623,_0x4dbb80){var _0xe923f8={};var _0x45aa51={};var _0x2e35e6;var _0xafab05;return db[_0x91f3('0x2b')][_0x91f3('0x54')]({'where':{'id':_0x2ce85a[_0x91f3('0x50')]['id']}})['then'](handleEntityNotFound(_0x3cd623,null))['then'](function(_0x2687af){if(_0x2687af){_0x2e35e6=_0x2687af;_0x45aa51[_0x91f3('0x30')]=_[_0x91f3('0x2e')](db[_0x91f3('0x2b')]['rawAttributes']);_0x45aa51[_0x91f3('0x2d')]=_[_0x91f3('0x2e')](_0x2ce85a[_0x91f3('0x2d')]);_0x45aa51[_0x91f3('0x39')]=_[_0x91f3('0x2f')](_0x45aa51[_0x91f3('0x30')],_0x45aa51[_0x91f3('0x2d')]);_0xe923f8[_0x91f3('0x31')]=_['intersection'](_0x45aa51[_0x91f3('0x30')],qs['fields'](_0x2ce85a[_0x91f3('0x2d')]['fields']));_0xe923f8[_0x91f3('0x31')]=_0xe923f8[_0x91f3('0x31')][_0x91f3('0x33')]?_0xe923f8['attributes']:_0x45aa51[_0x91f3('0x30')];_0xe923f8['order']=qs['sort'](_0x2ce85a[_0x91f3('0x2d')][_0x91f3('0x37')]);_0xe923f8['where']=qs['filters'](_[_0x91f3('0x3a')](_0x2ce85a[_0x91f3('0x2d')],_0x45aa51[_0x91f3('0x39')]));if(_0x2ce85a['query'][_0x91f3('0x3e')]){_0xe923f8[_0x91f3('0x38')]=_[_0x91f3('0x3f')](_0xe923f8[_0x91f3('0x38')],{'$or':_[_0x91f3('0x3b')](_0xe923f8[_0x91f3('0x31')],function(_0x390405){var _0x556873={};_0x556873[_0x390405]={'$like':'%'+_0x2ce85a[_0x91f3('0x2d')]['filter']+'%'};return _0x556873;})});}_0xe923f8=_[_0x91f3('0x3f')]({},_0xe923f8,_0x2ce85a[_0x91f3('0x40')]);return _0x2e35e6[_0x91f3('0x53')](_0xe923f8);}})[_0x91f3('0x22')](function(_0xaec594){if(_0xaec594){_0xafab05=_0xaec594['length'];if(!_0x2ce85a[_0x91f3('0x2d')]['hasOwnProperty']('nolimit')){_0xe923f8['limit']=qs[_0x91f3('0x35')](_0x2ce85a['query'][_0x91f3('0x35')]);_0xe923f8[_0x91f3('0x1b')]=qs['offset'](_0x2ce85a[_0x91f3('0x2d')]['offset']);}return _0x2e35e6[_0x91f3('0x53')](_0xe923f8);}})[_0x91f3('0x22')](function(_0xec323b){if(_0xec323b){return _0xec323b?{'count':_0xafab05,'rows':_0xec323b}:null;}})['then'](respondWithResult(_0x3cd623,null))[_0x91f3('0x44')](handleError(_0x3cd623,null));};exports[_0x91f3('0x55')]=function(_0x4facd5,_0x1bf0ee,_0x2b5bdb){return db[_0x91f3('0x2b')]['findOne']({'where':{'id':_0x4facd5['params']['id']}})['then'](handleEntityNotFound(_0x1bf0ee,null))[_0x91f3('0x22')](function(_0x1618a2){if(_0x1618a2){return db[_0x91f3('0x56')][_0x91f3('0x57')](function(_0x145ac0){return db[_0x91f3('0x2b')][_0x91f3('0x25')]({'where':{'IntervalId':_0x4facd5['params']['id']},'transaction':_0x145ac0})[_0x91f3('0x22')](function(_0x248ac9){var _0x1ca311=_[_0x91f3('0x3b')](_0x4facd5['body'],function(_0xefb1bb){delete _0xefb1bb['id'];_0xefb1bb[_0x91f3('0x52')]=_0x4facd5[_0x91f3('0x50')]['id'];return _0xefb1bb;});return db[_0x91f3('0x2b')]['bulkCreate'](_0x1ca311,{'transaction':_0x145ac0});});})[_0x91f3('0x22')](function(){return db['Interval'][_0x91f3('0x58')]({'where':{'IntervalId':_0x4facd5['params']['id']}});});}})[_0x91f3('0x22')](respondWithResult(_0x1bf0ee,null))['catch'](handleError(_0x1bf0ee,null));};
\ No newline at end of file
+var _0xf850=['Intervals','UserProfileResource','destroy','error','stack','name','send','Interval','rawAttributes','model','keys','query','intersection','fields','attributes','length','nolimit','offset','order','sort','filters','pick','merge','where','type','key','filter','includeAll','include','findAll','rows','catch','show','params','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','update','addInterval','findOne','map','hasOwnProperty','getIntervals','sequelize','IntervalId','bulkCreate','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','../../components/extensions/rewrite','sendStatus','status','json','count','limit','set','Content-Range','apply','reject','save','then','get'];(function(_0x1e4360,_0x930b9b){var _0x31e6b4=function(_0x49dd8e){while(--_0x49dd8e){_0x1e4360['push'](_0x1e4360['shift']());}};_0x31e6b4(++_0x930b9b);}(_0xf850,0xe9));var _0x0f85=function(_0x3434e8,_0x12b68e){_0x3434e8=_0x3434e8-0x0;var _0x392c93=_0xf850[_0x3434e8];return _0x392c93;};'use strict';var pdf=require(_0x0f85('0x0'));var emlformat=require(_0x0f85('0x1'));var rimraf=require(_0x0f85('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0f85('0x3'));var moment=require('moment');var BPromise=require(_0x0f85('0x4'));var Mustache=require(_0x0f85('0x5'));var util=require(_0x0f85('0x6'));var path=require(_0x0f85('0x7'));var sox=require(_0x0f85('0x8'));var csv=require(_0x0f85('0x9'));var ejs=require(_0x0f85('0xa'));var fs=require('fs');var _=require(_0x0f85('0xb'));var squel=require(_0x0f85('0xc'));var crypto=require(_0x0f85('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x0f85('0xe'));var toCsv=require(_0x0f85('0x9'));var querystring=require(_0x0f85('0xf'));var Papa=require('papaparse');var authService=require(_0x0f85('0x10'));var hardwareService=require(_0x0f85('0x11'));var Redis=require(_0x0f85('0x12'));var qs=require(_0x0f85('0x13'));var logger=require(_0x0f85('0x14'))(_0x0f85('0x15'));var utils=require('../../config/utils');var config=require(_0x0f85('0x16'));var db=require(_0x0f85('0x17'))['db'];var extensions=require(_0x0f85('0x18'));function respondWithStatusCode(_0x18e10a,_0x1977f9){_0x1977f9=_0x1977f9||0xcc;return function(_0x2d68aa){if(_0x2d68aa){return _0x18e10a[_0x0f85('0x19')](_0x1977f9);}return _0x18e10a[_0x0f85('0x1a')](_0x1977f9)['end']();};}function respondWithResult(_0x22ffb3,_0x16fe72){_0x16fe72=_0x16fe72||0xc8;return function(_0x47a1b9){if(_0x47a1b9){return _0x22ffb3[_0x0f85('0x1a')](_0x16fe72)[_0x0f85('0x1b')](_0x47a1b9);}};}function respondWithFilteredResult(_0x131fb4,_0xb37bea){return function(_0x5cd75a){if(_0x5cd75a){var _0x509a13=_0x5cd75a[_0x0f85('0x1c')],_0x5ef3c8=_0xb37bea['offset'],_0x5501b4=_0xb37bea['offset']+_0xb37bea[_0x0f85('0x1d')],_0x30d53d;if(_0x5501b4>=_0x509a13){_0x5501b4=_0x509a13;_0x30d53d=0xc8;}else{_0x30d53d=0xce;}_0x131fb4[_0x0f85('0x1a')](_0x30d53d);return _0x131fb4[_0x0f85('0x1e')](_0x0f85('0x1f'),_0x5ef3c8+'-'+_0x5501b4+'/'+_0x509a13)[_0x0f85('0x1b')](_0x5cd75a);}return null;};}function patchUpdates(_0x589d81){return function(_0x3b6d6c){try{jsonpatch[_0x0f85('0x20')](_0x3b6d6c,_0x589d81,!![]);}catch(_0x4064ef){return BPromise[_0x0f85('0x21')](_0x4064ef);}return _0x3b6d6c[_0x0f85('0x22')]();};}function saveUpdates(_0x451022,_0x5e59ef){return function(_0x2efaf3){if(_0x2efaf3){return _0x2efaf3['update'](_0x451022)[_0x0f85('0x23')](function(_0x31c694){return _0x31c694;});}return null;};}function removeEntity(_0x4d37e7,_0x3b6b52){return function(_0x37af7e){if(_0x37af7e){return _0x37af7e['destroy']()['then'](function(){var _0x5c7f8d=_0x37af7e[_0x0f85('0x24')]({'plain':!![]});var _0x446422=_0x0f85('0x25');return db[_0x0f85('0x26')][_0x0f85('0x27')]({'where':{'type':_0x446422,'resourceId':_0x5c7f8d['id']}})[_0x0f85('0x23')](function(){return _0x37af7e;});})[_0x0f85('0x23')](function(){_0x4d37e7[_0x0f85('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x12efba,_0x3ab5f3){return function(_0x432021){if(!_0x432021){_0x12efba[_0x0f85('0x19')](0x194);}return _0x432021;};}function handleError(_0x4e2d7b,_0x2ed2f8){_0x2ed2f8=_0x2ed2f8||0x1f4;return function(_0x522f4a){logger[_0x0f85('0x28')](_0x522f4a[_0x0f85('0x29')]);if(_0x522f4a[_0x0f85('0x2a')]){delete _0x522f4a[_0x0f85('0x2a')];}_0x4e2d7b[_0x0f85('0x1a')](_0x2ed2f8)[_0x0f85('0x2b')](_0x522f4a);};}exports['index']=function(_0x432a8a,_0x1ce58e){var _0x3bf773={},_0x363c53={},_0x514798={'count':0x0,'rows':[]};var _0x4e5ca3=db[_0x0f85('0x2c')][_0x0f85('0x2d')];_0x363c53[_0x0f85('0x2e')]=_[_0x0f85('0x2f')](_0x4e5ca3);_0x363c53['query']=_[_0x0f85('0x2f')](_0x432a8a[_0x0f85('0x30')]);_0x363c53['filters']=_['intersection'](_0x363c53[_0x0f85('0x2e')],_0x363c53['query']);_0x3bf773['attributes']=_[_0x0f85('0x31')](_0x363c53[_0x0f85('0x2e')],qs['fields'](_0x432a8a['query'][_0x0f85('0x32')]));_0x3bf773['attributes']=_0x3bf773[_0x0f85('0x33')][_0x0f85('0x34')]?_0x3bf773[_0x0f85('0x33')]:_0x363c53['model'];if(!_0x432a8a[_0x0f85('0x30')]['hasOwnProperty'](_0x0f85('0x35'))){_0x3bf773['limit']=qs[_0x0f85('0x1d')](_0x432a8a['query']['limit']);_0x3bf773['offset']=qs[_0x0f85('0x36')](_0x432a8a[_0x0f85('0x30')][_0x0f85('0x36')]);}_0x3bf773[_0x0f85('0x37')]=qs[_0x0f85('0x38')](_0x432a8a['query']['sort']);_0x3bf773['where']=qs[_0x0f85('0x39')](_[_0x0f85('0x3a')](_0x432a8a[_0x0f85('0x30')],_0x363c53[_0x0f85('0x39')]));if(_0x432a8a['query']['filter']){_0x3bf773['where']=_[_0x0f85('0x3b')](_0x3bf773[_0x0f85('0x3c')],{'$or':_['map'](_0x4e5ca3,function(_0x54156a){if(_0x54156a[_0x0f85('0x3d')][_0x0f85('0x3e')]!=='VIRTUAL'){var _0x12eaeb={};_0x12eaeb[_0x54156a['field']]={'$like':'%'+_0x432a8a[_0x0f85('0x30')][_0x0f85('0x3f')]+'%'};return _0x12eaeb;}})});}_0x3bf773=_[_0x0f85('0x3b')]({},_0x3bf773,_0x432a8a['options']);var _0x1c77a3={'where':_0x3bf773[_0x0f85('0x3c')]};return db[_0x0f85('0x2c')]['count'](_0x1c77a3)[_0x0f85('0x23')](function(_0x24555f){_0x514798[_0x0f85('0x1c')]=_0x24555f;if(_0x432a8a['query'][_0x0f85('0x40')]){_0x3bf773[_0x0f85('0x41')]=[{'all':!![]}];}return db[_0x0f85('0x2c')][_0x0f85('0x42')](_0x3bf773);})[_0x0f85('0x23')](function(_0x419e9e){_0x514798[_0x0f85('0x43')]=_0x419e9e;return _0x514798;})[_0x0f85('0x23')](respondWithFilteredResult(_0x1ce58e,_0x3bf773))[_0x0f85('0x44')](handleError(_0x1ce58e,null));};exports[_0x0f85('0x45')]=function(_0xe32a49,_0x1615af){var _0x22e3da={'raw':!![],'where':{'id':_0xe32a49[_0x0f85('0x46')]['id']}},_0x464003={};_0x464003[_0x0f85('0x2e')]=_[_0x0f85('0x2f')](db[_0x0f85('0x2c')][_0x0f85('0x2d')]);_0x464003[_0x0f85('0x30')]=_[_0x0f85('0x2f')](_0xe32a49[_0x0f85('0x30')]);_0x464003[_0x0f85('0x39')]=_['intersection'](_0x464003[_0x0f85('0x2e')],_0x464003[_0x0f85('0x30')]);_0x22e3da['attributes']=_[_0x0f85('0x31')](_0x464003[_0x0f85('0x2e')],qs[_0x0f85('0x32')](_0xe32a49[_0x0f85('0x30')][_0x0f85('0x32')]));_0x22e3da[_0x0f85('0x33')]=_0x22e3da[_0x0f85('0x33')][_0x0f85('0x34')]?_0x22e3da[_0x0f85('0x33')]:_0x464003[_0x0f85('0x2e')];if(_0xe32a49[_0x0f85('0x30')][_0x0f85('0x40')]){_0x22e3da[_0x0f85('0x41')]=[{'all':!![]}];}_0x22e3da=_[_0x0f85('0x3b')]({},_0x22e3da,_0xe32a49[_0x0f85('0x47')]);return db[_0x0f85('0x2c')][_0x0f85('0x48')](_0x22e3da)[_0x0f85('0x23')](handleEntityNotFound(_0x1615af,null))[_0x0f85('0x23')](respondWithResult(_0x1615af,null))['catch'](handleError(_0x1615af,null));};exports['create']=function(_0x47e9ad,_0x30b372){return db[_0x0f85('0x2c')][_0x0f85('0x49')](_0x47e9ad[_0x0f85('0x4a')],{})[_0x0f85('0x23')](function(_0x41b4da){var _0x1f4e36=_0x47e9ad['user'][_0x0f85('0x24')]({'plain':!![]});if(!_0x1f4e36)throw new Error(_0x0f85('0x4b'));if(_0x1f4e36[_0x0f85('0x4c')]==='user'){var _0x5ba623=_0x41b4da[_0x0f85('0x24')]({'plain':!![]});var _0x2ddacc=_0x0f85('0x25');return db[_0x0f85('0x4d')]['find']({'where':{'name':_0x2ddacc,'userProfileId':_0x1f4e36[_0x0f85('0x4e')]},'raw':!![]})[_0x0f85('0x23')](function(_0x5b2b1d){if(_0x5b2b1d&&_0x5b2b1d[_0x0f85('0x4f')]===0x0){return db[_0x0f85('0x26')]['create']({'name':_0x5ba623[_0x0f85('0x2a')],'resourceId':_0x5ba623['id'],'type':_0x5b2b1d[_0x0f85('0x2a')],'sectionId':_0x5b2b1d['id']},{})['then'](function(){return _0x41b4da;});}else{return _0x41b4da;}})['catch'](function(_0x4efba4){logger[_0x0f85('0x28')](_0x0f85('0x50'),_0x4efba4);throw _0x4efba4;});}return _0x41b4da;})[_0x0f85('0x23')](respondWithResult(_0x30b372,0xc9))[_0x0f85('0x44')](handleError(_0x30b372,null));};exports[_0x0f85('0x51')]=function(_0x37744c,_0x1aa19b){if(_0x37744c[_0x0f85('0x4a')]['id']){delete _0x37744c[_0x0f85('0x4a')]['id'];}return db['Interval'][_0x0f85('0x48')]({'where':{'id':_0x37744c[_0x0f85('0x46')]['id']}})[_0x0f85('0x23')](handleEntityNotFound(_0x1aa19b,null))[_0x0f85('0x23')](saveUpdates(_0x37744c['body'],null))['then'](respondWithResult(_0x1aa19b,null))[_0x0f85('0x44')](handleError(_0x1aa19b,null));};exports[_0x0f85('0x27')]=function(_0x1e7a6f,_0x58abbb){return db[_0x0f85('0x2c')]['find']({'where':{'id':_0x1e7a6f[_0x0f85('0x46')]['id']}})[_0x0f85('0x23')](handleEntityNotFound(_0x58abbb,null))[_0x0f85('0x23')](removeEntity(_0x58abbb,null))[_0x0f85('0x44')](handleError(_0x58abbb,null));};exports[_0x0f85('0x52')]=function(_0x171b38,_0x524bf1,_0x2e9585){if(_0x171b38[_0x0f85('0x4a')]['id']){delete _0x171b38['body']['id'];}return db[_0x0f85('0x2c')][_0x0f85('0x48')]({'where':{'id':_0x171b38['params']['id']}})['then'](handleEntityNotFound(_0x524bf1,null))[_0x0f85('0x23')](function(_0x2de53a){if(_0x2de53a){_0x171b38[_0x0f85('0x4a')]['IntervalId']=_0x2de53a['id'];return db[_0x0f85('0x2c')][_0x0f85('0x49')](_0x171b38[_0x0f85('0x4a')]);}})[_0x0f85('0x23')](respondWithResult(_0x524bf1,null))[_0x0f85('0x44')](handleError(_0x524bf1,null));};exports['getIntervals']=function(_0x583cdc,_0x43c839,_0x189caf){var _0x3613cf={};var _0x287eca={};var _0x398999;var _0x1501f7;return db[_0x0f85('0x2c')][_0x0f85('0x53')]({'where':{'id':_0x583cdc[_0x0f85('0x46')]['id']}})[_0x0f85('0x23')](handleEntityNotFound(_0x43c839,null))[_0x0f85('0x23')](function(_0xd19ff7){if(_0xd19ff7){_0x398999=_0xd19ff7;_0x287eca[_0x0f85('0x2e')]=_[_0x0f85('0x2f')](db['Interval']['rawAttributes']);_0x287eca[_0x0f85('0x30')]=_[_0x0f85('0x2f')](_0x583cdc[_0x0f85('0x30')]);_0x287eca[_0x0f85('0x39')]=_[_0x0f85('0x31')](_0x287eca[_0x0f85('0x2e')],_0x287eca[_0x0f85('0x30')]);_0x3613cf['attributes']=_['intersection'](_0x287eca[_0x0f85('0x2e')],qs[_0x0f85('0x32')](_0x583cdc[_0x0f85('0x30')]['fields']));_0x3613cf['attributes']=_0x3613cf[_0x0f85('0x33')][_0x0f85('0x34')]?_0x3613cf['attributes']:_0x287eca[_0x0f85('0x2e')];_0x3613cf[_0x0f85('0x37')]=qs[_0x0f85('0x38')](_0x583cdc[_0x0f85('0x30')]['sort']);_0x3613cf['where']=qs['filters'](_['pick'](_0x583cdc[_0x0f85('0x30')],_0x287eca['filters']));if(_0x583cdc[_0x0f85('0x30')]['filter']){_0x3613cf['where']=_['merge'](_0x3613cf[_0x0f85('0x3c')],{'$or':_[_0x0f85('0x54')](_0x3613cf[_0x0f85('0x33')],function(_0x29995c){var _0x529d51={};_0x529d51[_0x29995c]={'$like':'%'+_0x583cdc['query'][_0x0f85('0x3f')]+'%'};return _0x529d51;})});}_0x3613cf=_[_0x0f85('0x3b')]({},_0x3613cf,_0x583cdc['options']);return _0x398999['getIntervals'](_0x3613cf);}})['then'](function(_0x2b9e9c){if(_0x2b9e9c){_0x1501f7=_0x2b9e9c[_0x0f85('0x34')];if(!_0x583cdc[_0x0f85('0x30')][_0x0f85('0x55')]('nolimit')){_0x3613cf[_0x0f85('0x1d')]=qs[_0x0f85('0x1d')](_0x583cdc[_0x0f85('0x30')][_0x0f85('0x1d')]);_0x3613cf[_0x0f85('0x36')]=qs['offset'](_0x583cdc['query'][_0x0f85('0x36')]);}return _0x398999[_0x0f85('0x56')](_0x3613cf);}})[_0x0f85('0x23')](function(_0x2dbd72){if(_0x2dbd72){return _0x2dbd72?{'count':_0x1501f7,'rows':_0x2dbd72}:null;}})[_0x0f85('0x23')](respondWithResult(_0x43c839,null))[_0x0f85('0x44')](handleError(_0x43c839,null));};exports['addIntervals']=function(_0xd9f8a6,_0x5d49b0,_0xfa4ad9){return db[_0x0f85('0x2c')][_0x0f85('0x53')]({'where':{'id':_0xd9f8a6['params']['id']}})[_0x0f85('0x23')](handleEntityNotFound(_0x5d49b0,null))['then'](function(_0x2008b5){if(_0x2008b5){return db[_0x0f85('0x57')]['transaction'](function(_0x1f3ffd){return db[_0x0f85('0x2c')][_0x0f85('0x27')]({'where':{'IntervalId':_0xd9f8a6[_0x0f85('0x46')]['id']},'transaction':_0x1f3ffd})[_0x0f85('0x23')](function(_0x518141){var _0x5477c1=_[_0x0f85('0x54')](_0xd9f8a6[_0x0f85('0x4a')],function(_0x3c04f4){delete _0x3c04f4['id'];_0x3c04f4[_0x0f85('0x58')]=_0xd9f8a6[_0x0f85('0x46')]['id'];return _0x3c04f4;});return db['Interval'][_0x0f85('0x59')](_0x5477c1,{'transaction':_0x1f3ffd});});})[_0x0f85('0x23')](function(){return db[_0x0f85('0x2c')]['findAll']({'where':{'IntervalId':_0xd9f8a6[_0x0f85('0x46')]['id']}});});}})['then'](respondWithResult(_0x5d49b0,null))[_0x0f85('0x44')](handleError(_0x5d49b0,null));};
\ No newline at end of file
index d7870c7..76bd55a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd157=['./interval.attributes','../../components/extensions/rewrite','exports','define','Interval','tools_intervals','rewrite','lodash','util','api','moment','request-promise'];(function(_0x14c9f,_0x59961c){var _0x5599ec=function(_0x11b91f){while(--_0x11b91f){_0x14c9f['push'](_0x14c9f['shift']());}};_0x5599ec(++_0x59961c);}(_0xd157,0x17b));var _0x7d15=function(_0x2ededa,_0x39e556){_0x2ededa=_0x2ededa-0x0;var _0x2eb781=_0xd157[_0x2ededa];return _0x2eb781;};'use strict';var _=require(_0x7d15('0x0'));var util=require(_0x7d15('0x1'));var logger=require('../../config/logger')(_0x7d15('0x2'));var moment=require(_0x7d15('0x3'));var BPromise=require('bluebird');var rp=require(_0x7d15('0x4'));var attributes=require(_0x7d15('0x5'));var extensions=require(_0x7d15('0x6'));module[_0x7d15('0x7')]=function(_0x18ac74,_0x57eda3){return _0x18ac74[_0x7d15('0x8')](_0x7d15('0x9'),attributes,{'tableName':_0x7d15('0xa'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x206c19,_0x2c04d7){extensions[_0x7d15('0xb')](_0x18ac74,_0x206c19);},'afterBulkCreate':function(_0x493a3d,_0x5c3668,_0x30919c){_0x30919c();extensions[_0x7d15('0xb')](_0x18ac74,_0x493a3d[0x0]);},'afterUpdate':function(_0x4dc314,_0x1c0951){extensions['rewrite'](_0x18ac74,_0x4dc314);},'afterDestroy':function(_0x29a4f8,_0x545a24){extensions[_0x7d15('0xb')](_0x18ac74,_0x29a4f8);}}});};
\ No newline at end of file
+var _0xc16d=['exports','define','Interval','tools_intervals','rewrite','lodash','moment','bluebird','request-promise','./interval.attributes','../../components/extensions/rewrite'];(function(_0x5d5bcb,_0x25e2ea){var _0x4ea5eb=function(_0x36782b){while(--_0x36782b){_0x5d5bcb['push'](_0x5d5bcb['shift']());}};_0x4ea5eb(++_0x25e2ea);}(_0xc16d,0x186));var _0xdc16=function(_0x4e26df,_0x45f911){_0x4e26df=_0x4e26df-0x0;var _0x2facda=_0xc16d[_0x4e26df];return _0x2facda;};'use strict';var _=require(_0xdc16('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xdc16('0x1'));var BPromise=require(_0xdc16('0x2'));var rp=require(_0xdc16('0x3'));var attributes=require(_0xdc16('0x4'));var extensions=require(_0xdc16('0x5'));module[_0xdc16('0x6')]=function(_0x303336,_0x48a87d){return _0x303336[_0xdc16('0x7')](_0xdc16('0x8'),attributes,{'tableName':_0xdc16('0x9'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x46e517,_0x287633){extensions[_0xdc16('0xa')](_0x303336,_0x46e517);},'afterBulkCreate':function(_0x3bcee0,_0x116394,_0x268b5c){_0x268b5c();extensions[_0xdc16('0xa')](_0x303336,_0x3bcee0[0x0]);},'afterUpdate':function(_0xc05871,_0x4670f3){extensions[_0xdc16('0xa')](_0x303336,_0xc05871);},'afterDestroy':function(_0x1689b0,_0x5149a8){extensions[_0xdc16('0xa')](_0x303336,_0x1689b0);}}});};
\ No newline at end of file
index 5e3d09c..d9cd289 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf873=['map','model','ShowInterval','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','request','then','info','Interval,\x20%s,\x20%s','request\x20sent','debug','Interval,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','GetInterval','Interval','findAll','options','raw','attributes','include'];(function(_0x5ddd5e,_0x452ae0){var _0x5834a1=function(_0xc00536){while(--_0xc00536){_0x5ddd5e['push'](_0x5ddd5e['shift']());}};_0x5834a1(++_0x452ae0);}(_0xf873,0xb2));var _0x3f87=function(_0x27a0dc,_0x8c183e){_0x27a0dc=_0x27a0dc-0x0;var _0x39d5f3=_0xf873[_0x27a0dc];return _0x39d5f3;};'use strict';var _=require('lodash');var util=require(_0x3f87('0x0'));var moment=require(_0x3f87('0x1'));var BPromise=require(_0x3f87('0x2'));var rs=require(_0x3f87('0x3'));var fs=require('fs');var Redis=require(_0x3f87('0x4'));var db=require(_0x3f87('0x5'))['db'];var utils=require(_0x3f87('0x6'));var logger=require(_0x3f87('0x7'))(_0x3f87('0x8'));var config=require('../../config/environment');var jayson=require(_0x3f87('0x9'));var client=jayson[_0x3f87('0xa')][_0x3f87('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5a5e37,_0x8bf89b,_0x2c7ccc){return new BPromise(function(_0x3b8e92,_0x41faf2){return client[_0x3f87('0xc')](_0x5a5e37,_0x2c7ccc)[_0x3f87('0xd')](function(_0x4c3ed4){logger[_0x3f87('0xe')](_0x3f87('0xf'),_0x8bf89b,_0x3f87('0x10'));logger[_0x3f87('0x11')](_0x3f87('0x12'),_0x8bf89b,_0x3f87('0x10'),JSON[_0x3f87('0x13')](_0x4c3ed4));if(_0x4c3ed4[_0x3f87('0x14')]){if(_0x4c3ed4[_0x3f87('0x14')][_0x3f87('0x15')]===0x1f4){logger[_0x3f87('0x14')](_0x3f87('0xf'),_0x8bf89b,_0x4c3ed4[_0x3f87('0x14')][_0x3f87('0x16')]);return _0x41faf2(_0x4c3ed4['error'][_0x3f87('0x16')]);}logger[_0x3f87('0x14')]('Interval,\x20%s,\x20%s',_0x8bf89b,_0x4c3ed4[_0x3f87('0x14')][_0x3f87('0x16')]);return _0x3b8e92(_0x4c3ed4[_0x3f87('0x14')][_0x3f87('0x16')]);}else{logger[_0x3f87('0xe')](_0x3f87('0xf'),_0x8bf89b,_0x3f87('0x10'));_0x3b8e92(_0x4c3ed4[_0x3f87('0x17')]['message']);}})[_0x3f87('0x18')](function(_0x3ac7a7){logger[_0x3f87('0x14')]('Interval,\x20%s,\x20%s',_0x8bf89b,_0x3ac7a7);_0x41faf2(_0x3ac7a7);});});}exports[_0x3f87('0x19')]=function(_0x56d79e){var _0x190d7d=this;return new Promise(function(_0x13550c,_0x285b2c){return db[_0x3f87('0x1a')][_0x3f87('0x1b')]({'raw':_0x56d79e['options']?_0x56d79e[_0x3f87('0x1c')][_0x3f87('0x1d')]===undefined?!![]:![]:!![],'where':_0x56d79e[_0x3f87('0x1c')]?_0x56d79e[_0x3f87('0x1c')]['where']||null:null,'attributes':_0x56d79e['options']?_0x56d79e['options'][_0x3f87('0x1e')]||null:null,'limit':_0x56d79e[_0x3f87('0x1c')]?_0x56d79e[_0x3f87('0x1c')]['limit']||null:null,'include':_0x56d79e[_0x3f87('0x1c')]?_0x56d79e[_0x3f87('0x1c')][_0x3f87('0x1f')]?_[_0x3f87('0x20')](_0x56d79e[_0x3f87('0x1c')][_0x3f87('0x1f')],function(_0x30b061){return{'model':db[_0x30b061[_0x3f87('0x21')]],'as':_0x30b061['as'],'attributes':_0x30b061[_0x3f87('0x1e')],'include':_0x30b061[_0x3f87('0x1f')]?_[_0x3f87('0x20')](_0x30b061[_0x3f87('0x1f')],function(_0x5ca13a){return{'model':db[_0x5ca13a[_0x3f87('0x21')]],'as':_0x5ca13a['as'],'attributes':_0x5ca13a[_0x3f87('0x1e')],'include':_0x5ca13a[_0x3f87('0x1f')]?_['map'](_0x5ca13a['include'],function(_0x41f9e9){return{'model':db[_0x41f9e9[_0x3f87('0x21')]],'as':_0x41f9e9['as'],'attributes':_0x41f9e9[_0x3f87('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x3f87('0xd')](function(_0xcbb2b1){logger[_0x3f87('0xe')](_0x3f87('0x19'),_0x56d79e);logger[_0x3f87('0x11')](_0x3f87('0x19'),_0x56d79e,JSON[_0x3f87('0x13')](_0xcbb2b1));_0x13550c(_0xcbb2b1);})[_0x3f87('0x18')](function(_0x407828){logger[_0x3f87('0x14')](_0x3f87('0x19'),_0x407828[_0x3f87('0x16')],_0x56d79e);_0x285b2c(_0x190d7d[_0x3f87('0x14')](0x1f4,_0x407828['message']));});});};exports[_0x3f87('0x22')]=function(_0x29a77f){var _0x2546d2=this;return new Promise(function(_0x2f0f05,_0x5495ed){return db['Interval']['find']({'raw':_0x29a77f[_0x3f87('0x1c')]?_0x29a77f[_0x3f87('0x1c')][_0x3f87('0x1d')]===undefined?!![]:![]:!![],'where':_0x29a77f[_0x3f87('0x1c')]?_0x29a77f[_0x3f87('0x1c')]['where']||null:null,'attributes':_0x29a77f[_0x3f87('0x1c')]?_0x29a77f['options'][_0x3f87('0x1e')]||null:null,'include':_0x29a77f[_0x3f87('0x1c')]?_0x29a77f[_0x3f87('0x1c')][_0x3f87('0x1f')]?_[_0x3f87('0x20')](_0x29a77f[_0x3f87('0x1c')][_0x3f87('0x1f')],function(_0x581fa1){return{'model':db[_0x581fa1['model']],'as':_0x581fa1['as'],'attributes':_0x581fa1[_0x3f87('0x1e')],'include':_0x581fa1[_0x3f87('0x1f')]?_[_0x3f87('0x20')](_0x581fa1[_0x3f87('0x1f')],function(_0x213181){return{'model':db[_0x213181[_0x3f87('0x21')]],'as':_0x213181['as'],'attributes':_0x213181[_0x3f87('0x1e')],'include':_0x213181['include']?_[_0x3f87('0x20')](_0x213181['include'],function(_0x328946){return{'model':db[_0x328946[_0x3f87('0x21')]],'as':_0x328946['as'],'attributes':_0x328946[_0x3f87('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x3f87('0xd')](function(_0x51a33d){logger[_0x3f87('0xe')]('ShowInterval',_0x29a77f);logger[_0x3f87('0x11')](_0x3f87('0x22'),_0x29a77f,JSON[_0x3f87('0x13')](_0x51a33d));_0x2f0f05(_0x51a33d);})[_0x3f87('0x18')](function(_0x116900){logger['error']('ShowInterval',_0x116900['message'],_0x29a77f);_0x5495ed(_0x2546d2[_0x3f87('0x14')](0x1f4,_0x116900[_0x3f87('0x16')]));});});};
\ No newline at end of file
+var _0x8ef6=['jayson/promise','request','then','info','Interval,\x20%s,\x20%s','request\x20sent','debug','Interval,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','Interval','findAll','options','raw','limit','map','include','model','attributes','GetInterval','ShowInterval','where','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment'];(function(_0x2add15,_0x2a1eb0){var _0x37bef5=function(_0x431a7d){while(--_0x431a7d){_0x2add15['push'](_0x2add15['shift']());}};_0x37bef5(++_0x2a1eb0);}(_0x8ef6,0xf2));var _0x68ef=function(_0x238ade,_0x3385de){_0x238ade=_0x238ade-0x0;var _0x4183b3=_0x8ef6[_0x238ade];return _0x4183b3;};'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')]('Interval,\x20%s,\x20%s',_0x4740e8,_0x68ef('0xf'));_0x4eb5eb(_0x22ae26[_0x68ef('0x16')][_0x68ef('0x15')]);}})[_0x68ef('0x17')](function(_0x5c4456){logger[_0x68ef('0x13')]('Interval,\x20%s,\x20%s',_0x4740e8,_0x5c4456);_0x228967(_0x5c4456);});});}exports['GetInterval']=function(_0x2633c1){var _0x404870=this;return new Promise(function(_0x4ade0d,_0x527870){return db[_0x68ef('0x18')][_0x68ef('0x19')]({'raw':_0x2633c1[_0x68ef('0x1a')]?_0x2633c1['options'][_0x68ef('0x1b')]===undefined?!![]:![]:!![],'where':_0x2633c1[_0x68ef('0x1a')]?_0x2633c1[_0x68ef('0x1a')]['where']||null:null,'attributes':_0x2633c1[_0x68ef('0x1a')]?_0x2633c1[_0x68ef('0x1a')]['attributes']||null:null,'limit':_0x2633c1[_0x68ef('0x1a')]?_0x2633c1[_0x68ef('0x1a')][_0x68ef('0x1c')]||null:null,'include':_0x2633c1['options']?_0x2633c1['options']['include']?_[_0x68ef('0x1d')](_0x2633c1[_0x68ef('0x1a')][_0x68ef('0x1e')],function(_0x2e6e39){return{'model':db[_0x2e6e39[_0x68ef('0x1f')]],'as':_0x2e6e39['as'],'attributes':_0x2e6e39[_0x68ef('0x20')],'include':_0x2e6e39[_0x68ef('0x1e')]?_[_0x68ef('0x1d')](_0x2e6e39[_0x68ef('0x1e')],function(_0x13280b){return{'model':db[_0x13280b['model']],'as':_0x13280b['as'],'attributes':_0x13280b[_0x68ef('0x20')],'include':_0x13280b['include']?_['map'](_0x13280b['include'],function(_0x1a7ce1){return{'model':db[_0x1a7ce1[_0x68ef('0x1f')]],'as':_0x1a7ce1['as'],'attributes':_0x1a7ce1[_0x68ef('0x20')]};}):[]};}):[]};}):[]:[]})[_0x68ef('0xc')](function(_0x52e67e){logger['info'](_0x68ef('0x21'),_0x2633c1);logger[_0x68ef('0x10')](_0x68ef('0x21'),_0x2633c1,JSON[_0x68ef('0x12')](_0x52e67e));_0x4ade0d(_0x52e67e);})[_0x68ef('0x17')](function(_0x201884){logger[_0x68ef('0x13')](_0x68ef('0x21'),_0x201884['message'],_0x2633c1);_0x527870(_0x404870[_0x68ef('0x13')](0x1f4,_0x201884[_0x68ef('0x15')]));});});};exports[_0x68ef('0x22')]=function(_0x4c25aa){var _0x370a8f=this;return new Promise(function(_0x523120,_0x133788){return db[_0x68ef('0x18')]['find']({'raw':_0x4c25aa['options']?_0x4c25aa[_0x68ef('0x1a')][_0x68ef('0x1b')]===undefined?!![]:![]:!![],'where':_0x4c25aa['options']?_0x4c25aa[_0x68ef('0x1a')][_0x68ef('0x23')]||null:null,'attributes':_0x4c25aa[_0x68ef('0x1a')]?_0x4c25aa[_0x68ef('0x1a')]['attributes']||null:null,'include':_0x4c25aa[_0x68ef('0x1a')]?_0x4c25aa[_0x68ef('0x1a')]['include']?_[_0x68ef('0x1d')](_0x4c25aa['options'][_0x68ef('0x1e')],function(_0xab3c17){return{'model':db[_0xab3c17['model']],'as':_0xab3c17['as'],'attributes':_0xab3c17[_0x68ef('0x20')],'include':_0xab3c17['include']?_[_0x68ef('0x1d')](_0xab3c17['include'],function(_0x2fbb0d){return{'model':db[_0x2fbb0d[_0x68ef('0x1f')]],'as':_0x2fbb0d['as'],'attributes':_0x2fbb0d[_0x68ef('0x20')],'include':_0x2fbb0d['include']?_[_0x68ef('0x1d')](_0x2fbb0d['include'],function(_0x476938){return{'model':db[_0x476938['model']],'as':_0x476938['as'],'attributes':_0x476938[_0x68ef('0x20')]};}):[]};}):[]};}):[]:[]})[_0x68ef('0xc')](function(_0x102df9){logger[_0x68ef('0xd')](_0x68ef('0x22'),_0x4c25aa);logger[_0x68ef('0x10')]('ShowInterval',_0x4c25aa,JSON[_0x68ef('0x12')](_0x102df9));_0x523120(_0x102df9);})[_0x68ef('0x17')](function(_0x32074a){logger['error'](_0x68ef('0x22'),_0x32074a[_0x68ef('0x15')],_0x4c25aa);_0x133788(_0x370a8f[_0x68ef('0x13')](0x1f4,_0x32074a['message']));});});};
\ No newline at end of file
index 2265428..0dd8cb7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdb28=['isAuthenticated','send','exports','express','Router','../../components/auth/service','./jira.controller'];(function(_0x38f35a,_0x3cd3b6){var _0x1bd9e0=function(_0x27d3a4){while(--_0x27d3a4){_0x38f35a['push'](_0x38f35a['shift']());}};_0x1bd9e0(++_0x3cd3b6);}(_0xdb28,0x106));var _0x8db2=function(_0x4927a8,_0x43b899){_0x4927a8=_0x4927a8-0x0;var _0x458180=_0xdb28[_0x4927a8];return _0x458180;};'use strict';var express=require(_0x8db2('0x0'));var router=express[_0x8db2('0x1')]();var auth=require(_0x8db2('0x2'));var controller=require(_0x8db2('0x3'));router['post']('/',auth[_0x8db2('0x4')](),controller[_0x8db2('0x5')]);module[_0x8db2('0x6')]=router;
\ No newline at end of file
+var _0xadb5=['post','isAuthenticated','exports','Router','./jira.controller'];(function(_0x358ec7,_0x577031){var _0x508391=function(_0x1974f8){while(--_0x1974f8){_0x358ec7['push'](_0x358ec7['shift']());}};_0x508391(++_0x577031);}(_0xadb5,0xad));var _0x5adb=function(_0x4f0fe7,_0x162074){_0x4f0fe7=_0x4f0fe7-0x0;var _0x557ebe=_0xadb5[_0x4f0fe7];return _0x557ebe;};'use strict';var express=require('express');var router=express[_0x5adb('0x0')]();var auth=require('../../components/auth/service');var controller=require(_0x5adb('0x1'));router[_0x5adb('0x2')]('/',auth[_0x5adb('0x3')](),controller['send']);module[_0x5adb('0x4')]=router;
\ No newline at end of file
index df7d0b5..92a4e4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0713=['Error\x20during\x20license\x20request.\x20Please\x20contact\x20our\x20license\x20team\x20at\x20license@xcally.com\x20with\x20your\x20request','api.jira','write','openIssue','body','headers','x-forwarded-for','connection','remoteAddress','socket','../../config/logger','api','support','3eAmWpBVP0','key','MOTGUI','summary','Report','\x20from\x20','description','stringify','issuetype','Bug','fields','customfield_11500','email','customfield_11501','oldToken','customfield_11502','newToken','customfield_11503','name','customfield_11504','reason','/rest/api/2/issue','POST','Basic\x20','base64','request','setEncoding','utf8','data','end','status','statusCode','json','parse','error'];(function(_0x361078,_0x5a4a9a){var _0x27a219=function(_0x7e7298){while(--_0x7e7298){_0x361078['push'](_0x361078['shift']());}};_0x27a219(++_0x5a4a9a);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var BPromise=require('bluebird');var https=require('https');var logger=require(_0x3071('0x0'))(_0x3071('0x1'));var USERNAME=_0x3071('0x2');var PASSWORD=_0x3071('0x3');function openIssue(_0x864539,_0x52b5fb){var _0x2c547f={'fields':{'project':{'key':_0x864539[_0x3071('0x4')]||_0x3071('0x5')},'summary':(_0x864539[_0x3071('0x6')]||_0x3071('0x7'))+_0x3071('0x8')+_0x864539['ip'],'description':_0x864539[_0x3071('0x9')]||JSON[_0x3071('0xa')](_0x864539),'issuetype':{'name':_0x864539[_0x3071('0xb')]||_0x3071('0xc')}}};_0x2c547f[_0x3071('0xd')][_0x3071('0xe')]=_0x864539[_0x3071('0xf')];_0x2c547f['fields'][_0x3071('0x10')]=_0x864539[_0x3071('0x11')];_0x2c547f[_0x3071('0xd')][_0x3071('0x12')]=_0x864539[_0x3071('0x13')];_0x2c547f['fields'][_0x3071('0x14')]=_0x864539[_0x3071('0x15')];_0x2c547f[_0x3071('0xd')][_0x3071('0x16')]=_0x864539[_0x3071('0x17')];_0x2c547f['fields']['customfield_10102']=_0x864539['ip'];var _0x1826ca={'host':'track.xcallymotion.com','port':0x1bb,'path':_0x3071('0x18'),'method':_0x3071('0x19'),'timeout':0x4e20,'headers':{'Content-Type':'application/json','Authorization':_0x3071('0x1a')+new Buffer(USERNAME+':'+PASSWORD)['toString'](_0x3071('0x1b'))}};var _0x45c93b=JSON[_0x3071('0xa')](_0x2c547f);var _0x1f14e1=https[_0x3071('0x1c')](_0x1826ca,function(_0x2a6a4b){_0x2a6a4b[_0x3071('0x1d')](_0x3071('0x1e'));var _0x21aad3='';_0x2a6a4b['on'](_0x3071('0x1f'),function(_0x5f3c22){_0x21aad3+=_0x5f3c22;});_0x2a6a4b['on'](_0x3071('0x20'),function(){if(_0x52b5fb){return _0x52b5fb[_0x3071('0x21')](_0x2a6a4b[_0x3071('0x22')])[_0x3071('0x23')](JSON[_0x3071('0x24')](_0x21aad3));}});});_0x1f14e1['on'](_0x3071('0x25'),function(_0x105bbb){if(_0x52b5fb){return _0x52b5fb[_0x3071('0x21')](0x1f4)['json']({'errors':[{'message':_0x3071('0x26'),'type':_0x3071('0x27')}]});}});_0x1f14e1[_0x3071('0x28')](_0x45c93b);_0x1f14e1['end']();}exports[_0x3071('0x29')]=openIssue;exports['send']=function(_0x833074,_0x43128c){_0x833074[_0x3071('0x2a')]['ip']=_0x833074[_0x3071('0x2b')][_0x3071('0x2c')]||_0x833074[_0x3071('0x2d')][_0x3071('0x2e')]||_0x833074[_0x3071('0x2f')]['remoteAddress']||_0x833074['connection'][_0x3071('0x2f')][_0x3071('0x2e')];return openIssue(_0x833074[_0x3071('0x2a')],_0x43128c);};
\ No newline at end of file
+var _0x0713=['Error\x20during\x20license\x20request.\x20Please\x20contact\x20our\x20license\x20team\x20at\x20license@xcally.com\x20with\x20your\x20request','api.jira','write','openIssue','body','headers','x-forwarded-for','connection','remoteAddress','socket','../../config/logger','api','support','3eAmWpBVP0','key','MOTGUI','summary','Report','\x20from\x20','description','stringify','issuetype','Bug','fields','customfield_11500','email','customfield_11501','oldToken','customfield_11502','newToken','customfield_11503','name','customfield_11504','reason','/rest/api/2/issue','POST','Basic\x20','base64','request','setEncoding','utf8','data','end','status','statusCode','json','parse','error'];(function(_0x554483,_0x409b0f){var _0x2846de=function(_0x3ca57f){while(--_0x3ca57f){_0x554483['push'](_0x554483['shift']());}};_0x2846de(++_0x409b0f);}(_0x0713,0x1ba));var _0x3071=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0713[_0x3dd15e];return _0x231fd0;};'use strict';var BPromise=require('bluebird');var https=require('https');var logger=require(_0x3071('0x0'))(_0x3071('0x1'));var USERNAME=_0x3071('0x2');var PASSWORD=_0x3071('0x3');function openIssue(_0x864539,_0x52b5fb){var _0x2c547f={'fields':{'project':{'key':_0x864539[_0x3071('0x4')]||_0x3071('0x5')},'summary':(_0x864539[_0x3071('0x6')]||_0x3071('0x7'))+_0x3071('0x8')+_0x864539['ip'],'description':_0x864539[_0x3071('0x9')]||JSON[_0x3071('0xa')](_0x864539),'issuetype':{'name':_0x864539[_0x3071('0xb')]||_0x3071('0xc')}}};_0x2c547f[_0x3071('0xd')][_0x3071('0xe')]=_0x864539[_0x3071('0xf')];_0x2c547f['fields'][_0x3071('0x10')]=_0x864539[_0x3071('0x11')];_0x2c547f[_0x3071('0xd')][_0x3071('0x12')]=_0x864539[_0x3071('0x13')];_0x2c547f['fields'][_0x3071('0x14')]=_0x864539[_0x3071('0x15')];_0x2c547f[_0x3071('0xd')][_0x3071('0x16')]=_0x864539[_0x3071('0x17')];_0x2c547f['fields']['customfield_10102']=_0x864539['ip'];var _0x1826ca={'host':'track.xcallymotion.com','port':0x1bb,'path':_0x3071('0x18'),'method':_0x3071('0x19'),'timeout':0x4e20,'headers':{'Content-Type':'application/json','Authorization':_0x3071('0x1a')+new Buffer(USERNAME+':'+PASSWORD)['toString'](_0x3071('0x1b'))}};var _0x45c93b=JSON[_0x3071('0xa')](_0x2c547f);var _0x1f14e1=https[_0x3071('0x1c')](_0x1826ca,function(_0x2a6a4b){_0x2a6a4b[_0x3071('0x1d')](_0x3071('0x1e'));var _0x21aad3='';_0x2a6a4b['on'](_0x3071('0x1f'),function(_0x5f3c22){_0x21aad3+=_0x5f3c22;});_0x2a6a4b['on'](_0x3071('0x20'),function(){if(_0x52b5fb){return _0x52b5fb[_0x3071('0x21')](_0x2a6a4b[_0x3071('0x22')])[_0x3071('0x23')](JSON[_0x3071('0x24')](_0x21aad3));}});});_0x1f14e1['on'](_0x3071('0x25'),function(_0x105bbb){if(_0x52b5fb){return _0x52b5fb[_0x3071('0x21')](0x1f4)['json']({'errors':[{'message':_0x3071('0x26'),'type':_0x3071('0x27')}]});}});_0x1f14e1[_0x3071('0x28')](_0x45c93b);_0x1f14e1['end']();}exports[_0x3071('0x29')]=openIssue;exports['send']=function(_0x833074,_0x43128c){_0x833074[_0x3071('0x2a')]['ip']=_0x833074[_0x3071('0x2b')][_0x3071('0x2c')]||_0x833074[_0x3071('0x2d')][_0x3071('0x2e')]||_0x833074[_0x3071('0x2f')]['remoteAddress']||_0x833074['connection'][_0x3071('0x2f')][_0x3071('0x2e')];return openIssue(_0x833074[_0x3071('0x2a')],_0x43128c);};
\ No newline at end of file
index cfdb4ac..c79ec2c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfd58=['../../config/environment','./jscriptyAnswerReport.controller','get','isAuthenticated','index','/describe','/:id','delete','destroy','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x18cd5b,_0x10240b){var _0x5eaa52=function(_0x2bccad){while(--_0x2bccad){_0x18cd5b['push'](_0x18cd5b['shift']());}};_0x5eaa52(++_0x10240b);}(_0xfd58,0x1e9));var _0x8fd5=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xfd58[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0x8fd5('0x0'));var util=require('util');var path=require(_0x8fd5('0x1'));var timeout=require(_0x8fd5('0x2'));var express=require(_0x8fd5('0x3'));var router=express[_0x8fd5('0x4')]();var auth=require(_0x8fd5('0x5'));var interaction=require(_0x8fd5('0x6'));var config=require(_0x8fd5('0x7'));var controller=require(_0x8fd5('0x8'));router[_0x8fd5('0x9')]('/',auth[_0x8fd5('0xa')](),controller[_0x8fd5('0xb')]);router['get'](_0x8fd5('0xc'),auth[_0x8fd5('0xa')](),controller['describe']);router[_0x8fd5('0x9')]('/:id',auth['isAuthenticated'](),controller['show']);router['post']('/',auth[_0x8fd5('0xa')](),controller['create']);router['put'](_0x8fd5('0xd'),auth[_0x8fd5('0xa')](),controller['update']);router[_0x8fd5('0xe')](_0x8fd5('0xd'),auth[_0x8fd5('0xa')](),controller[_0x8fd5('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0x717b=['describe','/:id','show','post','create','put','update','delete','destroy','multer','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyAnswerReport.controller','get','isAuthenticated','/describe'];(function(_0x205a54,_0x508c39){var _0x359326=function(_0x2d6457){while(--_0x2d6457){_0x205a54['push'](_0x205a54['shift']());}};_0x359326(++_0x508c39);}(_0x717b,0x8e));var _0xb717=function(_0x565c35,_0x384fdd){_0x565c35=_0x565c35-0x0;var _0x249125=_0x717b[_0x565c35];return _0x249125;};'use strict';var multer=require(_0xb717('0x0'));var util=require('util');var path=require(_0xb717('0x1'));var timeout=require('connect-timeout');var express=require(_0xb717('0x2'));var router=express['Router']();var auth=require(_0xb717('0x3'));var interaction=require(_0xb717('0x4'));var config=require(_0xb717('0x5'));var controller=require(_0xb717('0x6'));router[_0xb717('0x7')]('/',auth[_0xb717('0x8')](),controller['index']);router['get'](_0xb717('0x9'),auth['isAuthenticated'](),controller[_0xb717('0xa')]);router[_0xb717('0x7')](_0xb717('0xb'),auth['isAuthenticated'](),controller[_0xb717('0xc')]);router[_0xb717('0xd')]('/',auth[_0xb717('0x8')](),controller[_0xb717('0xe')]);router[_0xb717('0xf')](_0xb717('0xb'),auth['isAuthenticated'](),controller[_0xb717('0x10')]);router[_0xb717('0x11')](_0xb717('0xb'),auth['isAuthenticated'](),controller[_0xb717('0x12')]);module['exports']=router;
\ No newline at end of file
index 7af13b9..f2d51a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x03bc=['TEXT','sequelize','STRING'];(function(_0x4b73a2,_0x40b5fe){var _0x383c66=function(_0x3917ae){while(--_0x3917ae){_0x4b73a2['push'](_0x4b73a2['shift']());}};_0x383c66(++_0x40b5fe);}(_0x03bc,0xb8));var _0xc03b=function(_0x147651,_0x2297d8){_0x147651=_0x147651-0x0;var _0x38d30c=_0x03bc[_0x147651];return _0x38d30c;};'use strict';var Sequelize=require(_0xc03b('0x0'));module['exports']={'question':{'type':Sequelize[_0xc03b('0x1')]},'answer':{'type':Sequelize[_0xc03b('0x2')]('long')},'membername':{'type':Sequelize[_0xc03b('0x1')]},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0xc03b('0x1')]},'uniqueid':{'type':Sequelize[_0xc03b('0x1')]},'calleridname':{'type':Sequelize[_0xc03b('0x1')]},'calleridnum':{'type':Sequelize[_0xc03b('0x1')]},'questionId':{'type':Sequelize[_0xc03b('0x1')]}};
\ No newline at end of file
+var _0x5d70=['STRING','sequelize','exports','TEXT','long'];(function(_0x5c7bb3,_0x40502c){var _0x117c6f=function(_0x3cbc60){while(--_0x3cbc60){_0x5c7bb3['push'](_0x5c7bb3['shift']());}};_0x117c6f(++_0x40502c);}(_0x5d70,0x8d));var _0x05d7=function(_0x46b261,_0x511cbd){_0x46b261=_0x46b261-0x0;var _0x3e44da=_0x5d70[_0x46b261];return _0x3e44da;};'use strict';var Sequelize=require(_0x05d7('0x0'));module[_0x05d7('0x1')]={'question':{'type':Sequelize['STRING']},'answer':{'type':Sequelize[_0x05d7('0x2')](_0x05d7('0x3'))},'membername':{'type':Sequelize[_0x05d7('0x4')]},'projectname':{'type':Sequelize[_0x05d7('0x4')]},'queue':{'type':Sequelize[_0x05d7('0x4')]},'uniqueid':{'type':Sequelize[_0x05d7('0x4')]},'calleridname':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x05d7('0x4')]},'questionId':{'type':Sequelize[_0x05d7('0x4')]}};
\ No newline at end of file
index 8c7cd0e..bd71bf0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['mustache','util','path','sox','ejs','squel','crypto','desk.js','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','limit','Content-Range','apply','reject','save','update','destroy','then','error','stack','index','JscriptyAnswerReport','rawAttributes','model','keys','query','filters','attributes','intersection','fields','offset','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','include','rows','catch','show','params','length','includeAll','create','body','find','describe','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird'];(function(_0x30eca5,_0x337d5c){var _0x5cad56=function(_0x95b7a9){while(--_0x95b7a9){_0x30eca5['push'](_0x30eca5['shift']());}};_0x5cad56(++_0x337d5c);}(_0x7a54,0x106));var _0x47a5=function(_0xdd5217,_0x4900ce){_0xdd5217=_0xdd5217-0x0;var _0x3d8535=_0x7a54[_0xdd5217];return _0x3d8535;};'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 authService=require(_0x47a5('0xe'));var hardwareService=require(_0x47a5('0xf'));var Redis=require('ioredis');var qs=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'];function respondWithStatusCode(_0x250fad,_0xd612dd){_0xd612dd=_0xd612dd||0xcc;return function(_0xd308b8){if(_0xd308b8){return _0x250fad[_0x47a5('0x14')](_0xd612dd);}return _0x250fad['status'](_0xd612dd)[_0x47a5('0x15')]();};}function respondWithResult(_0x221b54,_0x1cf309){_0x1cf309=_0x1cf309||0xc8;return function(_0x711793){if(_0x711793){return _0x221b54[_0x47a5('0x16')](_0x1cf309)[_0x47a5('0x17')](_0x711793);}};}function respondWithFilteredResult(_0x3c6c46,_0x190faa){return function(_0x4e99a8){if(_0x4e99a8){var _0x362359=_0x4e99a8[_0x47a5('0x18')],_0x11faf5=_0x190faa['offset'],_0x3b001e=_0x190faa['offset']+_0x190faa[_0x47a5('0x19')],_0x2a2cbb;if(_0x3b001e>=_0x362359){_0x3b001e=_0x362359;_0x2a2cbb=0xc8;}else{_0x2a2cbb=0xce;}_0x3c6c46['status'](_0x2a2cbb);return _0x3c6c46['set'](_0x47a5('0x1a'),_0x11faf5+'-'+_0x3b001e+'/'+_0x362359)[_0x47a5('0x17')](_0x4e99a8);}return null;};}function patchUpdates(_0x2ce454){return function(_0x1ef371){try{jsonpatch[_0x47a5('0x1b')](_0x1ef371,_0x2ce454,!![]);}catch(_0x12b98e){return BPromise[_0x47a5('0x1c')](_0x12b98e);}return _0x1ef371[_0x47a5('0x1d')]();};}function saveUpdates(_0x3aed38,_0x4a9fcb){return function(_0x1570bc){if(_0x1570bc){return _0x1570bc[_0x47a5('0x1e')](_0x3aed38)['then'](function(_0x2b0360){return _0x2b0360;});}return null;};}function removeEntity(_0x1f03f7,_0x36874d){return function(_0x4c5910){if(_0x4c5910){return _0x4c5910[_0x47a5('0x1f')]()[_0x47a5('0x20')](function(){_0x1f03f7[_0x47a5('0x16')](0xcc)[_0x47a5('0x15')]();});}};}function handleEntityNotFound(_0x5ef1b1,_0xe2dea9){return function(_0x385687){if(!_0x385687){_0x5ef1b1['sendStatus'](0x194);}return _0x385687;};}function handleError(_0x28747d,_0xc4cd63){_0xc4cd63=_0xc4cd63||0x1f4;return function(_0x4437f1){logger[_0x47a5('0x21')](_0x4437f1[_0x47a5('0x22')]);if(_0x4437f1['name']){delete _0x4437f1['name'];}_0x28747d[_0x47a5('0x16')](_0xc4cd63)['send'](_0x4437f1);};}exports[_0x47a5('0x23')]=function(_0x5b6c4e,_0x23cb77){var _0x378208={},_0x36ad34={},_0x1dac65={'count':0x0,'rows':[]};var _0x21f296=db[_0x47a5('0x24')][_0x47a5('0x25')];_0x36ad34[_0x47a5('0x26')]=_[_0x47a5('0x27')](_0x21f296);_0x36ad34[_0x47a5('0x28')]=_[_0x47a5('0x27')](_0x5b6c4e[_0x47a5('0x28')]);_0x36ad34[_0x47a5('0x29')]=_['intersection'](_0x36ad34[_0x47a5('0x26')],_0x36ad34['query']);_0x378208[_0x47a5('0x2a')]=_[_0x47a5('0x2b')](_0x36ad34[_0x47a5('0x26')],qs['fields'](_0x5b6c4e[_0x47a5('0x28')][_0x47a5('0x2c')]));_0x378208[_0x47a5('0x2a')]=_0x378208[_0x47a5('0x2a')]['length']?_0x378208['attributes']:_0x36ad34[_0x47a5('0x26')];if(!_0x5b6c4e[_0x47a5('0x28')]['hasOwnProperty']('nolimit')){_0x378208[_0x47a5('0x19')]=qs[_0x47a5('0x19')](_0x5b6c4e['query'][_0x47a5('0x19')]);_0x378208['offset']=qs[_0x47a5('0x2d')](_0x5b6c4e[_0x47a5('0x28')]['offset']);}_0x378208['order']=qs[_0x47a5('0x2e')](_0x5b6c4e['query'][_0x47a5('0x2e')]);_0x378208[_0x47a5('0x2f')]=qs[_0x47a5('0x29')](_['pick'](_0x5b6c4e[_0x47a5('0x28')],_0x36ad34['filters']));if(_0x5b6c4e['query'][_0x47a5('0x30')]){_0x378208['where']=_[_0x47a5('0x31')](_0x378208['where'],{'$or':_[_0x47a5('0x32')](_0x21f296,function(_0x3534cb){if(_0x3534cb[_0x47a5('0x33')][_0x47a5('0x34')]!==_0x47a5('0x35')){var _0xed6320={};_0xed6320[_0x3534cb[_0x47a5('0x36')]]={'$like':'%'+_0x5b6c4e[_0x47a5('0x28')][_0x47a5('0x30')]+'%'};return _0xed6320;}})});}_0x378208=_['merge']({},_0x378208,_0x5b6c4e[_0x47a5('0x37')]);var _0x10f136={'where':_0x378208['where']};return db[_0x47a5('0x24')][_0x47a5('0x18')](_0x10f136)[_0x47a5('0x20')](function(_0x49c4b5){_0x1dac65[_0x47a5('0x18')]=_0x49c4b5;if(_0x5b6c4e[_0x47a5('0x28')]['includeAll']){_0x378208[_0x47a5('0x38')]=[{'all':!![]}];}return db[_0x47a5('0x24')]['findAll'](_0x378208);})['then'](function(_0x5ebd8c){_0x1dac65[_0x47a5('0x39')]=_0x5ebd8c;return _0x1dac65;})['then'](respondWithFilteredResult(_0x23cb77,_0x378208))[_0x47a5('0x3a')](handleError(_0x23cb77,null));};exports[_0x47a5('0x3b')]=function(_0x301a85,_0x111f0d){var _0x1b2c80={'raw':!![],'where':{'id':_0x301a85[_0x47a5('0x3c')]['id']}},_0xcb5243={};_0xcb5243[_0x47a5('0x26')]=_[_0x47a5('0x27')](db[_0x47a5('0x24')][_0x47a5('0x25')]);_0xcb5243[_0x47a5('0x28')]=_[_0x47a5('0x27')](_0x301a85['query']);_0xcb5243[_0x47a5('0x29')]=_[_0x47a5('0x2b')](_0xcb5243[_0x47a5('0x26')],_0xcb5243[_0x47a5('0x28')]);_0x1b2c80['attributes']=_[_0x47a5('0x2b')](_0xcb5243['model'],qs['fields'](_0x301a85['query']['fields']));_0x1b2c80[_0x47a5('0x2a')]=_0x1b2c80['attributes'][_0x47a5('0x3d')]?_0x1b2c80[_0x47a5('0x2a')]:_0xcb5243[_0x47a5('0x26')];if(_0x301a85['query'][_0x47a5('0x3e')]){_0x1b2c80[_0x47a5('0x38')]=[{'all':!![]}];}_0x1b2c80=_['merge']({},_0x1b2c80,_0x301a85['options']);return db[_0x47a5('0x24')]['find'](_0x1b2c80)[_0x47a5('0x20')](handleEntityNotFound(_0x111f0d,null))[_0x47a5('0x20')](respondWithResult(_0x111f0d,null))[_0x47a5('0x3a')](handleError(_0x111f0d,null));};exports[_0x47a5('0x3f')]=function(_0x34a9ae,_0xf0edbb){return db[_0x47a5('0x24')][_0x47a5('0x3f')](_0x34a9ae[_0x47a5('0x40')],{})[_0x47a5('0x20')](respondWithResult(_0xf0edbb,0xc9))[_0x47a5('0x3a')](handleError(_0xf0edbb,null));};exports[_0x47a5('0x1e')]=function(_0xe28d76,_0x3574d4){if(_0xe28d76[_0x47a5('0x40')]['id']){delete _0xe28d76[_0x47a5('0x40')]['id'];}return db['JscriptyAnswerReport'][_0x47a5('0x41')]({'where':{'id':_0xe28d76[_0x47a5('0x3c')]['id']}})['then'](handleEntityNotFound(_0x3574d4,null))['then'](saveUpdates(_0xe28d76[_0x47a5('0x40')],null))['then'](respondWithResult(_0x3574d4,null))[_0x47a5('0x3a')](handleError(_0x3574d4,null));};exports[_0x47a5('0x1f')]=function(_0x54c35f,_0x4f62d3){return db[_0x47a5('0x24')]['find']({'where':{'id':_0x54c35f[_0x47a5('0x3c')]['id']}})[_0x47a5('0x20')](handleEntityNotFound(_0x4f62d3,null))[_0x47a5('0x20')](removeEntity(_0x4f62d3,null))[_0x47a5('0x3a')](handleError(_0x4f62d3,null));};exports[_0x47a5('0x42')]=function(_0x26acd2,_0x238ebb){return db['JscriptyAnswerReport']['describe']()[_0x47a5('0x20')](respondWithResult(_0x238ebb,null))[_0x47a5('0x3a')](handleError(_0x238ebb,null));};
\ No newline at end of file
+var _0x9957=['eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','save','destroy','then','stack','name','send','index','JscriptyAnswerReport','rawAttributes','keys','query','filters','attributes','intersection','model','fields','length','hasOwnProperty','nolimit','order','where','pick','merge','type','key','VIRTUAL','filter','options','includeAll','include','findAll','rows','catch','show','create','body','find','params','describe','html-pdf'];(function(_0x3c538b,_0x14cb10){var _0x4b8542=function(_0xb54272){while(--_0xb54272){_0x3c538b['push'](_0x3c538b['shift']());}};_0x4b8542(++_0x14cb10);}(_0x9957,0x93));var _0x7995=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x9957[_0x6c993a];return _0x27f547;};'use strict';var pdf=require(_0x7995('0x0'));var emlformat=require(_0x7995('0x1'));var rimraf=require(_0x7995('0x2'));var zipdir=require(_0x7995('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x7995('0x4'));var moment=require(_0x7995('0x5'));var BPromise=require(_0x7995('0x6'));var Mustache=require(_0x7995('0x7'));var util=require('util');var path=require(_0x7995('0x8'));var sox=require(_0x7995('0x9'));var csv=require(_0x7995('0xa'));var ejs=require(_0x7995('0xb'));var fs=require('fs');var _=require(_0x7995('0xc'));var squel=require(_0x7995('0xd'));var crypto=require('crypto');var jsforce=require(_0x7995('0xe'));var deskjs=require(_0x7995('0xf'));var toCsv=require('to-csv');var querystring=require(_0x7995('0x10'));var Papa=require(_0x7995('0x11'));var authService=require(_0x7995('0x12'));var hardwareService=require(_0x7995('0x13'));var Redis=require(_0x7995('0x14'));var qs=require(_0x7995('0x15'));var logger=require(_0x7995('0x16'))('api');var utils=require(_0x7995('0x17'));var config=require(_0x7995('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xb0c872,_0x2cb37a){_0x2cb37a=_0x2cb37a||0xcc;return function(_0x19a27e){if(_0x19a27e){return _0xb0c872[_0x7995('0x19')](_0x2cb37a);}return _0xb0c872[_0x7995('0x1a')](_0x2cb37a)[_0x7995('0x1b')]();};}function respondWithResult(_0x2bbe7a,_0x4cc004){_0x4cc004=_0x4cc004||0xc8;return function(_0x58f5ad){if(_0x58f5ad){return _0x2bbe7a[_0x7995('0x1a')](_0x4cc004)[_0x7995('0x1c')](_0x58f5ad);}};}function respondWithFilteredResult(_0x24b5bb,_0x321ae8){return function(_0x3f1d3e){if(_0x3f1d3e){var _0x1a5310=_0x3f1d3e[_0x7995('0x1d')],_0x2202ce=_0x321ae8['offset'],_0x41cbf0=_0x321ae8[_0x7995('0x1e')]+_0x321ae8[_0x7995('0x1f')],_0x5377e5;if(_0x41cbf0>=_0x1a5310){_0x41cbf0=_0x1a5310;_0x5377e5=0xc8;}else{_0x5377e5=0xce;}_0x24b5bb[_0x7995('0x1a')](_0x5377e5);return _0x24b5bb[_0x7995('0x20')](_0x7995('0x21'),_0x2202ce+'-'+_0x41cbf0+'/'+_0x1a5310)[_0x7995('0x1c')](_0x3f1d3e);}return null;};}function patchUpdates(_0x4faa60){return function(_0x54c9ae){try{jsonpatch[_0x7995('0x22')](_0x54c9ae,_0x4faa60,!![]);}catch(_0x5e6f90){return BPromise['reject'](_0x5e6f90);}return _0x54c9ae[_0x7995('0x23')]();};}function saveUpdates(_0x3d463e,_0x4cbe10){return function(_0x3a9b54){if(_0x3a9b54){return _0x3a9b54['update'](_0x3d463e)['then'](function(_0x3e4c54){return _0x3e4c54;});}return null;};}function removeEntity(_0x327b1f,_0x350fd9){return function(_0x1a8568){if(_0x1a8568){return _0x1a8568[_0x7995('0x24')]()[_0x7995('0x25')](function(){_0x327b1f['status'](0xcc)[_0x7995('0x1b')]();});}};}function handleEntityNotFound(_0x46ee4b,_0x204507){return function(_0x285437){if(!_0x285437){_0x46ee4b[_0x7995('0x19')](0x194);}return _0x285437;};}function handleError(_0x13bc35,_0x475351){_0x475351=_0x475351||0x1f4;return function(_0x472195){logger['error'](_0x472195[_0x7995('0x26')]);if(_0x472195[_0x7995('0x27')]){delete _0x472195[_0x7995('0x27')];}_0x13bc35[_0x7995('0x1a')](_0x475351)[_0x7995('0x28')](_0x472195);};}exports[_0x7995('0x29')]=function(_0x56691a,_0x47625f){var _0x5911c3={},_0x229742={},_0x49bc7e={'count':0x0,'rows':[]};var _0xf16cc2=db[_0x7995('0x2a')][_0x7995('0x2b')];_0x229742['model']=_[_0x7995('0x2c')](_0xf16cc2);_0x229742['query']=_[_0x7995('0x2c')](_0x56691a[_0x7995('0x2d')]);_0x229742[_0x7995('0x2e')]=_['intersection'](_0x229742['model'],_0x229742['query']);_0x5911c3[_0x7995('0x2f')]=_[_0x7995('0x30')](_0x229742[_0x7995('0x31')],qs[_0x7995('0x32')](_0x56691a[_0x7995('0x2d')][_0x7995('0x32')]));_0x5911c3['attributes']=_0x5911c3['attributes'][_0x7995('0x33')]?_0x5911c3['attributes']:_0x229742[_0x7995('0x31')];if(!_0x56691a[_0x7995('0x2d')][_0x7995('0x34')](_0x7995('0x35'))){_0x5911c3[_0x7995('0x1f')]=qs['limit'](_0x56691a[_0x7995('0x2d')][_0x7995('0x1f')]);_0x5911c3['offset']=qs['offset'](_0x56691a['query'][_0x7995('0x1e')]);}_0x5911c3[_0x7995('0x36')]=qs['sort'](_0x56691a[_0x7995('0x2d')]['sort']);_0x5911c3[_0x7995('0x37')]=qs[_0x7995('0x2e')](_[_0x7995('0x38')](_0x56691a['query'],_0x229742['filters']));if(_0x56691a[_0x7995('0x2d')]['filter']){_0x5911c3['where']=_[_0x7995('0x39')](_0x5911c3[_0x7995('0x37')],{'$or':_['map'](_0xf16cc2,function(_0x1baa15){if(_0x1baa15[_0x7995('0x3a')][_0x7995('0x3b')]!==_0x7995('0x3c')){var _0x1e3dbf={};_0x1e3dbf[_0x1baa15['field']]={'$like':'%'+_0x56691a[_0x7995('0x2d')][_0x7995('0x3d')]+'%'};return _0x1e3dbf;}})});}_0x5911c3=_[_0x7995('0x39')]({},_0x5911c3,_0x56691a[_0x7995('0x3e')]);var _0x4b1541={'where':_0x5911c3[_0x7995('0x37')]};return db[_0x7995('0x2a')][_0x7995('0x1d')](_0x4b1541)[_0x7995('0x25')](function(_0x1f5bee){_0x49bc7e[_0x7995('0x1d')]=_0x1f5bee;if(_0x56691a['query'][_0x7995('0x3f')]){_0x5911c3[_0x7995('0x40')]=[{'all':!![]}];}return db[_0x7995('0x2a')][_0x7995('0x41')](_0x5911c3);})[_0x7995('0x25')](function(_0x298fc2){_0x49bc7e[_0x7995('0x42')]=_0x298fc2;return _0x49bc7e;})[_0x7995('0x25')](respondWithFilteredResult(_0x47625f,_0x5911c3))[_0x7995('0x43')](handleError(_0x47625f,null));};exports[_0x7995('0x44')]=function(_0x6fe77b,_0x270d52){var _0x7b4e67={'raw':!![],'where':{'id':_0x6fe77b['params']['id']}},_0x53cda2={};_0x53cda2[_0x7995('0x31')]=_[_0x7995('0x2c')](db['JscriptyAnswerReport']['rawAttributes']);_0x53cda2[_0x7995('0x2d')]=_['keys'](_0x6fe77b['query']);_0x53cda2[_0x7995('0x2e')]=_[_0x7995('0x30')](_0x53cda2[_0x7995('0x31')],_0x53cda2['query']);_0x7b4e67[_0x7995('0x2f')]=_['intersection'](_0x53cda2[_0x7995('0x31')],qs['fields'](_0x6fe77b['query'][_0x7995('0x32')]));_0x7b4e67[_0x7995('0x2f')]=_0x7b4e67[_0x7995('0x2f')][_0x7995('0x33')]?_0x7b4e67['attributes']:_0x53cda2[_0x7995('0x31')];if(_0x6fe77b[_0x7995('0x2d')][_0x7995('0x3f')]){_0x7b4e67[_0x7995('0x40')]=[{'all':!![]}];}_0x7b4e67=_['merge']({},_0x7b4e67,_0x6fe77b['options']);return db[_0x7995('0x2a')]['find'](_0x7b4e67)[_0x7995('0x25')](handleEntityNotFound(_0x270d52,null))['then'](respondWithResult(_0x270d52,null))[_0x7995('0x43')](handleError(_0x270d52,null));};exports['create']=function(_0x1e795e,_0x1b0373){return db['JscriptyAnswerReport'][_0x7995('0x45')](_0x1e795e[_0x7995('0x46')],{})[_0x7995('0x25')](respondWithResult(_0x1b0373,0xc9))[_0x7995('0x43')](handleError(_0x1b0373,null));};exports['update']=function(_0x2458cb,_0x3e787d){if(_0x2458cb[_0x7995('0x46')]['id']){delete _0x2458cb['body']['id'];}return db[_0x7995('0x2a')][_0x7995('0x47')]({'where':{'id':_0x2458cb[_0x7995('0x48')]['id']}})[_0x7995('0x25')](handleEntityNotFound(_0x3e787d,null))[_0x7995('0x25')](saveUpdates(_0x2458cb['body'],null))[_0x7995('0x25')](respondWithResult(_0x3e787d,null))[_0x7995('0x43')](handleError(_0x3e787d,null));};exports['destroy']=function(_0x3d1dbb,_0x5843ba){return db[_0x7995('0x2a')][_0x7995('0x47')]({'where':{'id':_0x3d1dbb[_0x7995('0x48')]['id']}})[_0x7995('0x25')](handleEntityNotFound(_0x5843ba,null))[_0x7995('0x25')](removeEntity(_0x5843ba,null))[_0x7995('0x43')](handleError(_0x5843ba,null));};exports[_0x7995('0x49')]=function(_0x4d46bc,_0x427dcf){return db[_0x7995('0x2a')][_0x7995('0x49')]()['then'](respondWithResult(_0x427dcf,null))[_0x7995('0x43')](handleError(_0x427dcf,null));};
\ No newline at end of file
index 0d7109a..f6a02cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x397f=['bluebird','./jscriptyAnswerReport.attributes','exports','JscriptyAnswerReport','report_jscripty_answers','../../config/logger'];(function(_0x421775,_0x4cdb3b){var _0x922519=function(_0x3eb20f){while(--_0x3eb20f){_0x421775['push'](_0x421775['shift']());}};_0x922519(++_0x4cdb3b);}(_0x397f,0xc5));var _0xf397=function(_0x3ac0e1,_0xc6f489){_0x3ac0e1=_0x3ac0e1-0x0;var _0x1a7bdd=_0x397f[_0x3ac0e1];return _0x1a7bdd;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xf397('0x0'))('api');var moment=require('moment');var BPromise=require(_0xf397('0x1'));var rp=require('request-promise');var attributes=require(_0xf397('0x2'));module[_0xf397('0x3')]=function(_0x45f26d,_0x5e9174){return _0x45f26d['define'](_0xf397('0x4'),attributes,{'tableName':_0xf397('0x5'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2cb3=['../../config/logger','api','moment','request-promise','exports','define','report_jscripty_answers','lodash','util'];(function(_0x1ba593,_0x49e5d3){var _0x67b460=function(_0x502c52){while(--_0x502c52){_0x1ba593['push'](_0x1ba593['shift']());}};_0x67b460(++_0x49e5d3);}(_0x2cb3,0x127));var _0x32cb=function(_0x5545c0,_0x4f5525){_0x5545c0=_0x5545c0-0x0;var _0x5de316=_0x2cb3[_0x5545c0];return _0x5de316;};'use strict';var _=require(_0x32cb('0x0'));var util=require(_0x32cb('0x1'));var logger=require(_0x32cb('0x2'))(_0x32cb('0x3'));var moment=require(_0x32cb('0x4'));var BPromise=require('bluebird');var rp=require(_0x32cb('0x5'));var attributes=require('./jscriptyAnswerReport.attributes');module[_0x32cb('0x6')]=function(_0x36bf3b,_0x1891b0){return _0x36bf3b[_0x32cb('0x7')]('JscriptyAnswerReport',attributes,{'tableName':_0x32cb('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 248895d..d590b5c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x595c=['code','message','info','catch','util','moment','bluebird','../../config/utils','../../config/logger','rpc','../../config/environment','client','then','JscriptyAnswerReport,\x20%s,\x20%s','request\x20sent','debug','JscriptyAnswerReport,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x2c7b8e,_0x27d472){var _0x53eb65=function(_0x467dc2){while(--_0x467dc2){_0x2c7b8e['push'](_0x2c7b8e['shift']());}};_0x53eb65(++_0x27d472);}(_0x595c,0x147));var _0xc595=function(_0x1b58c1,_0x616a39){_0x1b58c1=_0x1b58c1-0x0;var _0x87c861=_0x595c[_0x1b58c1];return _0x87c861;};'use strict';var _=require('lodash');var util=require(_0xc595('0x0'));var moment=require(_0xc595('0x1'));var BPromise=require(_0xc595('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xc595('0x3'));var logger=require(_0xc595('0x4'))(_0xc595('0x5'));var config=require(_0xc595('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xc595('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x10c9cf,_0x3781ba,_0x394aa9){return new BPromise(function(_0x3f20b2,_0x497b80){return client['request'](_0x10c9cf,_0x394aa9)[_0xc595('0x8')](function(_0x11ac0a){logger['info'](_0xc595('0x9'),_0x3781ba,_0xc595('0xa'));logger[_0xc595('0xb')](_0xc595('0xc'),_0x3781ba,'request\x20sent',JSON[_0xc595('0xd')](_0x11ac0a));if(_0x11ac0a['error']){if(_0x11ac0a[_0xc595('0xe')][_0xc595('0xf')]===0x1f4){logger[_0xc595('0xe')](_0xc595('0x9'),_0x3781ba,_0x11ac0a[_0xc595('0xe')][_0xc595('0x10')]);return _0x497b80(_0x11ac0a['error']['message']);}logger['error']('JscriptyAnswerReport,\x20%s,\x20%s',_0x3781ba,_0x11ac0a['error'][_0xc595('0x10')]);return _0x3f20b2(_0x11ac0a['error'][_0xc595('0x10')]);}else{logger[_0xc595('0x11')](_0xc595('0x9'),_0x3781ba,_0xc595('0xa'));_0x3f20b2(_0x11ac0a['result'][_0xc595('0x10')]);}})[_0xc595('0x12')](function(_0x51282e){logger[_0xc595('0xe')](_0xc595('0x9'),_0x3781ba,_0x51282e);_0x497b80(_0x51282e);});});}
\ No newline at end of file
+var _0x0129=['info','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','JscriptyAnswerReport,\x20%s,\x20%s','request\x20sent','debug','JscriptyAnswerReport,\x20%s,\x20%s,\x20%s','error','message'];(function(_0x1edcdd,_0xe7b75b){var _0x240240=function(_0x4e7f59){while(--_0x4e7f59){_0x1edcdd['push'](_0x1edcdd['shift']());}};_0x240240(++_0xe7b75b);}(_0x0129,0x100));var _0x9012=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0129[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x9012('0x0'));var util=require('util');var moment=require(_0x9012('0x1'));var BPromise=require(_0x9012('0x2'));var rs=require(_0x9012('0x3'));var fs=require('fs');var Redis=require(_0x9012('0x4'));var db=require(_0x9012('0x5'))['db'];var utils=require(_0x9012('0x6'));var logger=require(_0x9012('0x7'))(_0x9012('0x8'));var config=require(_0x9012('0x9'));var jayson=require(_0x9012('0xa'));var client=jayson[_0x9012('0xb')]['http']({'port':0x232a});function respondWithRpcPromise(_0x36c101,_0x1679c1,_0x436a4a){return new BPromise(function(_0x5a0bf9,_0x153627){return client[_0x9012('0xc')](_0x36c101,_0x436a4a)[_0x9012('0xd')](function(_0x10fd07){logger['info'](_0x9012('0xe'),_0x1679c1,_0x9012('0xf'));logger[_0x9012('0x10')](_0x9012('0x11'),_0x1679c1,_0x9012('0xf'),JSON['stringify'](_0x10fd07));if(_0x10fd07[_0x9012('0x12')]){if(_0x10fd07[_0x9012('0x12')]['code']===0x1f4){logger[_0x9012('0x12')](_0x9012('0xe'),_0x1679c1,_0x10fd07[_0x9012('0x12')]['message']);return _0x153627(_0x10fd07[_0x9012('0x12')][_0x9012('0x13')]);}logger[_0x9012('0x12')](_0x9012('0xe'),_0x1679c1,_0x10fd07[_0x9012('0x12')][_0x9012('0x13')]);return _0x5a0bf9(_0x10fd07['error']['message']);}else{logger[_0x9012('0x14')]('JscriptyAnswerReport,\x20%s,\x20%s',_0x1679c1,_0x9012('0xf'));_0x5a0bf9(_0x10fd07[_0x9012('0x15')]['message']);}})[_0x9012('0x16')](function(_0x35806d){logger[_0x9012('0x12')](_0x9012('0xe'),_0x1679c1,_0x35806d);_0x153627(_0x35806d);});});}
\ No newline at end of file
index 461df5e..774c28b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc7ec=['connect-timeout','../../components/auth/service','../../config/environment','./jscriptyProject.controller','get','isAuthenticated','/:id','show','/:id/sessions','getSessions','getAnswers','/:id/summary','30s','getSummary','post','create','clone','put','destroy','exports','multer','util'];(function(_0xbe40ad,_0x44343c){var _0x50fac9=function(_0xdaed07){while(--_0xdaed07){_0xbe40ad['push'](_0xbe40ad['shift']());}};_0x50fac9(++_0x44343c);}(_0xc7ec,0xae));var _0xcc7e=function(_0x45a85e,_0x292dd7){_0x45a85e=_0x45a85e-0x0;var _0x4c85b7=_0xc7ec[_0x45a85e];return _0x4c85b7;};'use strict';var multer=require(_0xcc7e('0x0'));var util=require(_0xcc7e('0x1'));var path=require('path');var timeout=require(_0xcc7e('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0xcc7e('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0xcc7e('0x4'));var controller=require(_0xcc7e('0x5'));router[_0xcc7e('0x6')]('/',auth[_0xcc7e('0x7')](),controller['index']);router[_0xcc7e('0x6')](_0xcc7e('0x8'),auth[_0xcc7e('0x7')](),controller[_0xcc7e('0x9')]);router[_0xcc7e('0x6')](_0xcc7e('0xa'),auth[_0xcc7e('0x7')](),controller[_0xcc7e('0xb')]);router[_0xcc7e('0x6')]('/:id/answers',auth[_0xcc7e('0x7')](),controller[_0xcc7e('0xc')]);router[_0xcc7e('0x6')](_0xcc7e('0xd'),auth[_0xcc7e('0x7')](),timeout(_0xcc7e('0xe')),controller[_0xcc7e('0xf')]);router[_0xcc7e('0x10')]('/',auth[_0xcc7e('0x7')](),controller[_0xcc7e('0x11')]);router['post']('/:id/clone',auth[_0xcc7e('0x7')](),controller[_0xcc7e('0x12')]);router[_0xcc7e('0x13')](_0xcc7e('0x8'),auth[_0xcc7e('0x7')](),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),controller[_0xcc7e('0x14')]);module[_0xcc7e('0x15')]=router;
\ No newline at end of file
+var _0xf3a8=['isAuthenticated','index','get','/:id','show','/:id/sessions','getAnswers','/:id/summary','getSummary','post','create','clone','update','exports','util','path','express','../../components/interaction/service','./jscriptyProject.controller'];(function(_0x3f6565,_0x12a8bb){var _0x4abd23=function(_0x56dce7){while(--_0x56dce7){_0x3f6565['push'](_0x3f6565['shift']());}};_0x4abd23(++_0x12a8bb);}(_0xf3a8,0xf2));var _0x8f3a=function(_0x417393,_0x55ec7b){_0x417393=_0x417393-0x0;var _0x330e21=_0xf3a8[_0x417393];return _0x330e21;};'use strict';var multer=require('multer');var util=require(_0x8f3a('0x0'));var path=require(_0x8f3a('0x1'));var timeout=require('connect-timeout');var express=require(_0x8f3a('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x8f3a('0x3'));var config=require('../../config/environment');var controller=require(_0x8f3a('0x4'));router['get']('/',auth[_0x8f3a('0x5')](),controller[_0x8f3a('0x6')]);router[_0x8f3a('0x7')](_0x8f3a('0x8'),auth[_0x8f3a('0x5')](),controller[_0x8f3a('0x9')]);router[_0x8f3a('0x7')](_0x8f3a('0xa'),auth[_0x8f3a('0x5')](),controller['getSessions']);router[_0x8f3a('0x7')]('/:id/answers',auth[_0x8f3a('0x5')](),controller[_0x8f3a('0xb')]);router[_0x8f3a('0x7')](_0x8f3a('0xc'),auth[_0x8f3a('0x5')](),timeout('30s'),controller[_0x8f3a('0xd')]);router[_0x8f3a('0xe')]('/',auth['isAuthenticated'](),controller[_0x8f3a('0xf')]);router['post']('/:id/clone',auth[_0x8f3a('0x5')](),controller[_0x8f3a('0x10')]);router['put'](_0x8f3a('0x8'),auth[_0x8f3a('0x5')](),controller[_0x8f3a('0x11')]);router['delete'](_0x8f3a('0x8'),auth[_0x8f3a('0x5')](),controller['destroy']);module[_0x8f3a('0x12')]=router;
\ No newline at end of file
index a0663bf..fc8fa54 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8090=['BOOLEAN','sequelize','lodash','exports','name','STRING','TEXT','long','setDataValue','formData','isString','format','{\x22name\x22:\x22%s\x22,\x22description\x22:\x22%s\x22,\x22pages\x22:[]}','getDataValue'];(function(_0x44bcb0,_0x235aa9){var _0xfaf881=function(_0x25d81d){while(--_0x25d81d){_0x44bcb0['push'](_0x44bcb0['shift']());}};_0xfaf881(++_0x235aa9);}(_0x8090,0x9b));var _0x0809=function(_0xc28702,_0x145b87){_0xc28702=_0xc28702-0x0;var _0x3b6e9e=_0x8090[_0xc28702];return _0x3b6e9e;};'use strict';var Sequelize=require(_0x0809('0x0'));var _=require(_0x0809('0x1'));var util=require('util');module[_0x0809('0x2')]={'name':{'type':Sequelize['STRING'],'unique':_0x0809('0x3')},'description':{'type':Sequelize[_0x0809('0x4')]},'formData':{'type':Sequelize[_0x0809('0x5')](_0x0809('0x6')),'set':function(_0xecf39){if(_['isObjectLike'](_0xecf39)){this[_0x0809('0x7')](_0x0809('0x8'),JSON['stringify'](_0xecf39));}else if(_[_0x0809('0x9')](_0xecf39)){this['setDataValue'](_0x0809('0x8'),_0xecf39);}else{this[_0x0809('0x7')](_0x0809('0x8'),util[_0x0809('0xa')](_0x0809('0xb'),this[_0x0809('0xc')](_0x0809('0x3'))||'',this[_0x0809('0xc')]('description')||''));}}},'enableUncompleteSave':{'type':Sequelize[_0x0809('0xd')],'defaultValue':!![]}};
\ No newline at end of file
+var _0x0fa3=['isString','format','{\x22name\x22:\x22%s\x22,\x22description\x22:\x22%s\x22,\x22pages\x22:[]}','getDataValue','description','BOOLEAN','sequelize','lodash','util','exports','STRING','name','TEXT','long','setDataValue','formData','stringify'];(function(_0x377c15,_0xbbab43){var _0x33358d=function(_0x55163f){while(--_0x55163f){_0x377c15['push'](_0x377c15['shift']());}};_0x33358d(++_0xbbab43);}(_0x0fa3,0x1c0));var _0x30fa=function(_0x8f7d2b,_0x1bebaf){_0x8f7d2b=_0x8f7d2b-0x0;var _0x13c298=_0x0fa3[_0x8f7d2b];return _0x13c298;};'use strict';var Sequelize=require(_0x30fa('0x0'));var _=require(_0x30fa('0x1'));var util=require(_0x30fa('0x2'));module[_0x30fa('0x3')]={'name':{'type':Sequelize[_0x30fa('0x4')],'unique':_0x30fa('0x5')},'description':{'type':Sequelize[_0x30fa('0x4')]},'formData':{'type':Sequelize[_0x30fa('0x6')](_0x30fa('0x7')),'set':function(_0x4fa34e){if(_['isObjectLike'](_0x4fa34e)){this[_0x30fa('0x8')](_0x30fa('0x9'),JSON[_0x30fa('0xa')](_0x4fa34e));}else if(_[_0x30fa('0xb')](_0x4fa34e)){this[_0x30fa('0x8')](_0x30fa('0x9'),_0x4fa34e);}else{this[_0x30fa('0x8')]('formData',util[_0x30fa('0xc')](_0x30fa('0xd'),this[_0x30fa('0xe')](_0x30fa('0x5'))||'',this[_0x30fa('0xe')](_0x30fa('0xf'))||''));}}},'enableUncompleteSave':{'type':Sequelize[_0x30fa('0x10')],'defaultValue':!![]}};
\ No newline at end of file
index 6c3d4fa..437cec7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3924=['where','getAnswers','findOne','JscriptyAnswerReport','findAll','apply','indexOf','toString','replace','getSummary','startTime','starttime','parse','JscriptyQuestionReport','-createdAt','questionId','question','YYYY-MM-DD\x20HH:mm:ss','SessionId','push','isEmpty','writeFileSync','/tmp/Jscripty_Project_%d_Summary_%s.csv','setHeader','attachment;\x20filename=','Jscripty_Project_%d_Summary_%s.csv','Content-type','download','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','lodash','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','offset','limit','set','update','then','destroy','get','end','error','stack','name','index','JscriptyProject','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','order','sort','filter','map','VIRTUAL','field','merge','options','count','includeAll','include','rows','catch','params','length','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','Projects','UserProfileSection','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','omit','createdAt','updatedAt','role','autoAssociation','getSessions','JscriptySessionReport','nolimit','pick','ProjectId'];(function(_0x576d8a,_0x2d7bde){var _0x3dc3ef=function(_0xc76758){while(--_0xc76758){_0x576d8a['push'](_0x576d8a['shift']());}};_0x3dc3ef(++_0x2d7bde);}(_0x3924,0x8a));var _0x4392=function(_0x58e838,_0xd9cdb3){_0x58e838=_0x58e838-0x0;var _0x334cfb=_0x3924[_0x58e838];return _0x334cfb;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x4392('0x0'));var rimraf=require(_0x4392('0x1'));var zipdir=require(_0x4392('0x2'));var jsonpatch=require(_0x4392('0x3'));var rp=require(_0x4392('0x4'));var moment=require(_0x4392('0x5'));var BPromise=require(_0x4392('0x6'));var Mustache=require('mustache');var util=require('util');var path=require(_0x4392('0x7'));var sox=require(_0x4392('0x8'));var csv=require(_0x4392('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x4392('0xa'));var squel=require('squel');var crypto=require(_0x4392('0xb'));var jsforce=require(_0x4392('0xc'));var deskjs=require(_0x4392('0xd'));var toCsv=require(_0x4392('0x9'));var querystring=require('querystring');var Papa=require(_0x4392('0xe'));var authService=require(_0x4392('0xf'));var hardwareService=require(_0x4392('0x10'));var Redis=require(_0x4392('0x11'));var qs=require('../../components/parsers/qs');var logger=require(_0x4392('0x12'))('api');var utils=require(_0x4392('0x13'));var config=require(_0x4392('0x14'));var db=require(_0x4392('0x15'))['db'];function respondWithStatusCode(_0x55cd56,_0x19bbda){_0x19bbda=_0x19bbda||0xcc;return function(_0x4f423a){if(_0x4f423a){return _0x55cd56[_0x4392('0x16')](_0x19bbda);}return _0x55cd56['status'](_0x19bbda)['end']();};}function respondWithResult(_0x1e8811,_0x417fb0){_0x417fb0=_0x417fb0||0xc8;return function(_0xf75824){if(_0xf75824){return _0x1e8811[_0x4392('0x17')](_0x417fb0)[_0x4392('0x18')](_0xf75824);}};}function respondWithFilteredResult(_0x4cf18e,_0x4196bf){return function(_0x189019){if(_0x189019){var _0x2c27df=_0x189019['count'],_0x54d896=_0x4196bf[_0x4392('0x19')],_0x2419eb=_0x4196bf[_0x4392('0x19')]+_0x4196bf[_0x4392('0x1a')],_0x9be16a;if(_0x2419eb>=_0x2c27df){_0x2419eb=_0x2c27df;_0x9be16a=0xc8;}else{_0x9be16a=0xce;}_0x4cf18e[_0x4392('0x17')](_0x9be16a);return _0x4cf18e[_0x4392('0x1b')]('Content-Range',_0x54d896+'-'+_0x2419eb+'/'+_0x2c27df)[_0x4392('0x18')](_0x189019);}return null;};}function patchUpdates(_0x57f0c9){return function(_0xe2a122){try{jsonpatch['apply'](_0xe2a122,_0x57f0c9,!![]);}catch(_0xf04eb3){return BPromise['reject'](_0xf04eb3);}return _0xe2a122['save']();};}function saveUpdates(_0x5b1d2c,_0x341dd0){return function(_0x5d789a){if(_0x5d789a){return _0x5d789a[_0x4392('0x1c')](_0x5b1d2c)[_0x4392('0x1d')](function(_0x2f7166){return _0x2f7166;});}return null;};}function removeEntity(_0x311ac1,_0x2326cd){return function(_0x34d091){if(_0x34d091){return _0x34d091[_0x4392('0x1e')]()[_0x4392('0x1d')](function(){var _0x187cbc=_0x34d091[_0x4392('0x1f')]({'plain':!![]});var _0x3a318c='Projects';return db['UserProfileResource'][_0x4392('0x1e')]({'where':{'type':_0x3a318c,'resourceId':_0x187cbc['id']}})[_0x4392('0x1d')](function(){return _0x34d091;});})[_0x4392('0x1d')](function(){_0x311ac1[_0x4392('0x17')](0xcc)[_0x4392('0x20')]();});}};}function handleEntityNotFound(_0x5add99,_0x1c57de){return function(_0x36cef0){if(!_0x36cef0){_0x5add99[_0x4392('0x16')](0x194);}return _0x36cef0;};}function handleError(_0x5ab47e,_0x5db12c){_0x5db12c=_0x5db12c||0x1f4;return function(_0x120703){logger[_0x4392('0x21')](_0x120703[_0x4392('0x22')]);if(_0x120703[_0x4392('0x23')]){delete _0x120703[_0x4392('0x23')];}_0x5ab47e['status'](_0x5db12c)['send'](_0x120703);};}exports[_0x4392('0x24')]=function(_0x2383fb,_0x1d0bf9){var _0x208de2={},_0x347787={},_0xb1bd07={'count':0x0,'rows':[]};var _0x2b7756=db[_0x4392('0x25')][_0x4392('0x26')];_0x347787[_0x4392('0x27')]=_[_0x4392('0x28')](_0x2b7756);_0x347787[_0x4392('0x29')]=_[_0x4392('0x28')](_0x2383fb[_0x4392('0x29')]);_0x347787[_0x4392('0x2a')]=_[_0x4392('0x2b')](_0x347787['model'],_0x347787[_0x4392('0x29')]);_0x208de2[_0x4392('0x2c')]=_[_0x4392('0x2b')](_0x347787[_0x4392('0x27')],qs[_0x4392('0x2d')](_0x2383fb['query'][_0x4392('0x2d')]));_0x208de2[_0x4392('0x2c')]=_0x208de2[_0x4392('0x2c')]['length']?_0x208de2[_0x4392('0x2c')]:_0x347787['model'];if(!_0x2383fb[_0x4392('0x29')][_0x4392('0x2e')]('nolimit')){_0x208de2[_0x4392('0x1a')]=qs['limit'](_0x2383fb[_0x4392('0x29')][_0x4392('0x1a')]);_0x208de2[_0x4392('0x19')]=qs[_0x4392('0x19')](_0x2383fb[_0x4392('0x29')][_0x4392('0x19')]);}_0x208de2[_0x4392('0x2f')]=qs[_0x4392('0x30')](_0x2383fb[_0x4392('0x29')][_0x4392('0x30')]);_0x208de2['where']=qs[_0x4392('0x2a')](_['pick'](_0x2383fb[_0x4392('0x29')],_0x347787[_0x4392('0x2a')]));if(_0x2383fb[_0x4392('0x29')][_0x4392('0x31')]){_0x208de2['where']=_['merge'](_0x208de2['where'],{'$or':_[_0x4392('0x32')](_0x2b7756,function(_0x4053c4){if(_0x4053c4['type']['key']!==_0x4392('0x33')){var _0x1aac8e={};_0x1aac8e[_0x4053c4[_0x4392('0x34')]]={'$like':'%'+_0x2383fb[_0x4392('0x29')][_0x4392('0x31')]+'%'};return _0x1aac8e;}})});}_0x208de2=_[_0x4392('0x35')]({},_0x208de2,_0x2383fb[_0x4392('0x36')]);var _0x4189fe={'where':_0x208de2['where']};return db[_0x4392('0x25')]['count'](_0x4189fe)[_0x4392('0x1d')](function(_0x25f51d){_0xb1bd07[_0x4392('0x37')]=_0x25f51d;if(_0x2383fb[_0x4392('0x29')][_0x4392('0x38')]){_0x208de2[_0x4392('0x39')]=[{'all':!![]}];}return db['JscriptyProject']['findAll'](_0x208de2);})[_0x4392('0x1d')](function(_0x3a5fb6){_0xb1bd07[_0x4392('0x3a')]=_0x3a5fb6;return _0xb1bd07;})[_0x4392('0x1d')](respondWithFilteredResult(_0x1d0bf9,_0x208de2))[_0x4392('0x3b')](handleError(_0x1d0bf9,null));};exports['show']=function(_0x4f83b5,_0x2c0b01){var _0x47341b={'raw':![],'where':{'id':_0x4f83b5[_0x4392('0x3c')]['id']}},_0x21ee63={};_0x21ee63[_0x4392('0x27')]=_[_0x4392('0x28')](db[_0x4392('0x25')][_0x4392('0x26')]);_0x21ee63[_0x4392('0x29')]=_[_0x4392('0x28')](_0x4f83b5[_0x4392('0x29')]);_0x21ee63['filters']=_['intersection'](_0x21ee63[_0x4392('0x27')],_0x21ee63[_0x4392('0x29')]);_0x47341b['attributes']=_['intersection'](_0x21ee63[_0x4392('0x27')],qs['fields'](_0x4f83b5[_0x4392('0x29')][_0x4392('0x2d')]));_0x47341b[_0x4392('0x2c')]=_0x47341b[_0x4392('0x2c')][_0x4392('0x3d')]?_0x47341b[_0x4392('0x2c')]:_0x21ee63[_0x4392('0x27')];if(_0x4f83b5[_0x4392('0x29')][_0x4392('0x38')]){_0x47341b[_0x4392('0x39')]=[{'all':!![]}];}_0x47341b=_[_0x4392('0x35')]({},_0x47341b,_0x4f83b5['options']);return db['JscriptyProject'][_0x4392('0x3e')](_0x47341b)['then'](handleEntityNotFound(_0x2c0b01,null))[_0x4392('0x1d')](respondWithResult(_0x2c0b01,null))[_0x4392('0x3b')](handleError(_0x2c0b01,null));};exports['create']=function(_0x440c1f,_0x56e99b){return db[_0x4392('0x25')][_0x4392('0x3f')](_0x440c1f[_0x4392('0x40')],{})[_0x4392('0x1d')](function(_0x5e2bee){var _0x2009a9=_0x440c1f[_0x4392('0x41')][_0x4392('0x1f')]({'plain':!![]});if(!_0x2009a9)throw new Error(_0x4392('0x42'));if(_0x2009a9['role']===_0x4392('0x41')){var _0x46f153=_0x5e2bee[_0x4392('0x1f')]({'plain':!![]});var _0x35b876=_0x4392('0x43');return db[_0x4392('0x44')][_0x4392('0x3e')]({'where':{'name':_0x35b876,'userProfileId':_0x2009a9['userProfileId']},'raw':!![]})['then'](function(_0x927026){if(_0x927026&&_0x927026['autoAssociation']===0x0){return db[_0x4392('0x45')]['create']({'name':_0x46f153[_0x4392('0x23')],'resourceId':_0x46f153['id'],'type':_0x927026[_0x4392('0x23')],'sectionId':_0x927026['id']},{})[_0x4392('0x1d')](function(){return _0x5e2bee;});}else{return _0x5e2bee;}})['catch'](function(_0x113146){logger[_0x4392('0x21')](_0x4392('0x46'),_0x113146);throw _0x113146;});}return _0x5e2bee;})['then'](respondWithResult(_0x56e99b,0xc9))[_0x4392('0x3b')](handleError(_0x56e99b,null));};exports[_0x4392('0x47')]=function(_0x3b27cd,_0x553a9f){var _0x474762={'raw':![],'where':{'id':_0x3b27cd[_0x4392('0x3c')]['id']}},_0x1ab078={};_0x1ab078[_0x4392('0x27')]=_[_0x4392('0x28')](db['JscriptyProject']['rawAttributes']);_0x474762[_0x4392('0x2c')]=_[_0x4392('0x2b')](_0x1ab078['model'],qs[_0x4392('0x2d')](_0x3b27cd['query'][_0x4392('0x2d')]));_0x474762['attributes']=_0x474762['attributes'][_0x4392('0x3d')]?_0x474762['attributes']:_0x1ab078[_0x4392('0x27')];if(_0x3b27cd[_0x4392('0x29')][_0x4392('0x38')]){_0x474762[_0x4392('0x39')]=[{'all':!![]}];}_0x474762=_[_0x4392('0x35')]({},_0x474762,_0x3b27cd[_0x4392('0x36')]);return db['JscriptyProject'][_0x4392('0x3e')](_0x474762)['then'](handleEntityNotFound(_0x553a9f,null))['then'](function(_0xdad085){if(_0xdad085){var _0x312950=_0xdad085[_0x4392('0x1f')]({'plain':!![]});_0x312950=qs[_0x4392('0x48')](_0x312950,['id',_0x4392('0x49'),'updatedAt']);_0x3b27cd[_0x4392('0x40')]=_[_0x4392('0x48')](_0x3b27cd[_0x4392('0x40')],['id',_0x4392('0x49'),_0x4392('0x4a')]);return db['JscriptyProject'][_0x4392('0x3f')](_[_0x4392('0x35')](_0x312950,_0x3b27cd[_0x4392('0x40')]),{'include':_0x3b27cd[_0x4392('0x29')]['includeAll']?[{'all':!![]}]:undefined})[_0x4392('0x1d')](function(_0x506360){var _0x2f8ec1=_0x3b27cd[_0x4392('0x41')][_0x4392('0x1f')]({'plain':!![]});if(!_0x2f8ec1)throw new Error(_0x4392('0x42'));if(_0x2f8ec1[_0x4392('0x4b')]==='user'){var _0x2cee38=_0x506360['get']({'plain':!![]});var _0x28c4f6=_0x4392('0x43');return db[_0x4392('0x44')]['find']({'where':{'name':_0x28c4f6,'userProfileId':_0x2f8ec1['userProfileId']},'raw':!![]})['then'](function(_0x5a11ed){if(_0x5a11ed&&_0x5a11ed[_0x4392('0x4c')]===0x0){return db[_0x4392('0x45')][_0x4392('0x3f')]({'name':_0x2cee38[_0x4392('0x23')],'resourceId':_0x2cee38['id'],'type':_0x5a11ed[_0x4392('0x23')],'sectionId':_0x5a11ed['id']},{})[_0x4392('0x1d')](function(){return _0x506360;});}else{return _0x506360;}})[_0x4392('0x3b')](function(_0x4bdf2b){logger['error'](_0x4392('0x46'),_0x4bdf2b);throw _0x4bdf2b;});}return _0x506360;});}})[_0x4392('0x1d')](respondWithResult(_0x553a9f,0xc9))[_0x4392('0x3b')](handleError(_0x553a9f,null));};exports[_0x4392('0x1c')]=function(_0x530c01,_0x386bbf){if(_0x530c01[_0x4392('0x40')]['id']){delete _0x530c01[_0x4392('0x40')]['id'];}return db[_0x4392('0x25')][_0x4392('0x3e')]({'where':{'id':_0x530c01[_0x4392('0x3c')]['id']}})[_0x4392('0x1d')](handleEntityNotFound(_0x386bbf,null))[_0x4392('0x1d')](saveUpdates(_0x530c01[_0x4392('0x40')],null))[_0x4392('0x1d')](respondWithResult(_0x386bbf,null))['catch'](handleError(_0x386bbf,null));};exports[_0x4392('0x1e')]=function(_0x5b3106,_0x3cf97a){return db['JscriptyProject'][_0x4392('0x3e')]({'where':{'id':_0x5b3106[_0x4392('0x3c')]['id']}})[_0x4392('0x1d')](handleEntityNotFound(_0x3cf97a,null))[_0x4392('0x1d')](removeEntity(_0x3cf97a,null))[_0x4392('0x3b')](handleError(_0x3cf97a,null));};exports[_0x4392('0x4d')]=function(_0x268c56,_0x5f2112,_0x3e9876){var _0x2d79be={'raw':!![],'where':{}};var _0x5a9495={};var _0xaedd63={'count':0x0,'rows':[]};return db[_0x4392('0x25')]['findOne']({'where':{'id':_0x268c56[_0x4392('0x3c')]['id']}})[_0x4392('0x1d')](handleEntityNotFound(_0x5f2112,null))[_0x4392('0x1d')](function(_0x448a8c){if(_0x448a8c){_0x5a9495[_0x4392('0x27')]=_[_0x4392('0x28')](db[_0x4392('0x4e')][_0x4392('0x26')]);_0x5a9495[_0x4392('0x29')]=_[_0x4392('0x28')](_0x268c56[_0x4392('0x29')]);_0x5a9495[_0x4392('0x2a')]=_[_0x4392('0x2b')](_0x5a9495[_0x4392('0x27')],_0x5a9495['query']);_0x2d79be['attributes']=_[_0x4392('0x2b')](_0x5a9495[_0x4392('0x27')],qs[_0x4392('0x2d')](_0x268c56[_0x4392('0x29')][_0x4392('0x2d')]));_0x2d79be[_0x4392('0x2c')]=_0x2d79be[_0x4392('0x2c')]['length']?_0x2d79be[_0x4392('0x2c')]:_0x5a9495[_0x4392('0x27')];if(!_0x268c56['query'][_0x4392('0x2e')](_0x4392('0x4f'))){_0x2d79be[_0x4392('0x1a')]=qs[_0x4392('0x1a')](_0x268c56['query'][_0x4392('0x1a')]);_0x2d79be[_0x4392('0x19')]=qs[_0x4392('0x19')](_0x268c56[_0x4392('0x29')]['offset']);}_0x2d79be[_0x4392('0x2f')]=qs['sort'](_0x268c56[_0x4392('0x29')][_0x4392('0x30')]);_0x2d79be['where']=qs[_0x4392('0x2a')](_[_0x4392('0x50')](_0x268c56[_0x4392('0x29')],_0x5a9495['filters']));_0x2d79be['where'][_0x4392('0x51')]=_0x448a8c['id'];if(_0x268c56[_0x4392('0x29')][_0x4392('0x31')]){_0x2d79be[_0x4392('0x52')]=_['merge'](_0x2d79be[_0x4392('0x52')],{'$or':_[_0x4392('0x32')](_0x2d79be[_0x4392('0x2c')],function(_0x5cda23){var _0x7a90b4={};_0x7a90b4[_0x5cda23]={'$like':'%'+_0x268c56[_0x4392('0x29')][_0x4392('0x31')]+'%'};return _0x7a90b4;})});}_0x2d79be=_[_0x4392('0x35')]({},_0x2d79be,_0x268c56[_0x4392('0x36')]);return db[_0x4392('0x4e')]['count']({'where':_0x2d79be['where']})[_0x4392('0x1d')](function(_0x350a67){_0xaedd63[_0x4392('0x37')]=_0x350a67;if(_0x268c56[_0x4392('0x29')]['includeAll']){_0x2d79be[_0x4392('0x39')]=[{'all':!![]}];}return db[_0x4392('0x4e')]['findAll'](_0x2d79be);})['then'](function(_0x4d1e3c){_0xaedd63[_0x4392('0x3a')]=_0x4d1e3c;return _0xaedd63;});}})['then'](respondWithFilteredResult(_0x5f2112,_0x2d79be))[_0x4392('0x3b')](handleError(_0x5f2112,null));};exports[_0x4392('0x53')]=function(_0x188041,_0x1253a3,_0x510e86){var _0x5385b2={'raw':!![],'where':{}};var _0x56f6ac={};var _0x359520={'count':0x0,'rows':[]};return db[_0x4392('0x25')][_0x4392('0x54')]({'where':{'id':_0x188041[_0x4392('0x3c')]['id']}})[_0x4392('0x1d')](handleEntityNotFound(_0x1253a3,null))[_0x4392('0x1d')](function(_0x1dbdd0){if(_0x1dbdd0){_0x56f6ac[_0x4392('0x27')]=_[_0x4392('0x28')](db[_0x4392('0x55')][_0x4392('0x26')]);_0x56f6ac[_0x4392('0x29')]=_[_0x4392('0x28')](_0x188041[_0x4392('0x29')]);_0x56f6ac[_0x4392('0x2a')]=_[_0x4392('0x2b')](_0x56f6ac[_0x4392('0x27')],_0x56f6ac[_0x4392('0x29')]);_0x5385b2[_0x4392('0x2c')]=_[_0x4392('0x2b')](_0x56f6ac[_0x4392('0x27')],qs[_0x4392('0x2d')](_0x188041[_0x4392('0x29')][_0x4392('0x2d')]));_0x5385b2[_0x4392('0x2c')]=_0x5385b2['attributes'][_0x4392('0x3d')]?_0x5385b2[_0x4392('0x2c')]:_0x56f6ac[_0x4392('0x27')];if(!_0x188041[_0x4392('0x29')]['hasOwnProperty'](_0x4392('0x4f'))){_0x5385b2['limit']=qs[_0x4392('0x1a')](_0x188041['query']['limit']);_0x5385b2['offset']=qs[_0x4392('0x19')](_0x188041['query'][_0x4392('0x19')]);}_0x5385b2['order']=qs[_0x4392('0x30')](_0x188041[_0x4392('0x29')]['sort']);_0x5385b2['where']=qs[_0x4392('0x2a')](_['pick'](_0x188041[_0x4392('0x29')],_0x56f6ac[_0x4392('0x2a')]));_0x5385b2['where'][_0x4392('0x51')]=_0x1dbdd0['id'];if(_0x188041[_0x4392('0x29')][_0x4392('0x31')]){_0x5385b2[_0x4392('0x52')]=_[_0x4392('0x35')](_0x5385b2['where'],{'$or':_[_0x4392('0x32')](_0x5385b2['attributes'],function(_0x4fcc26){var _0x5ef6b9={};_0x5ef6b9[_0x4fcc26]={'$like':'%'+_0x188041[_0x4392('0x29')][_0x4392('0x31')]+'%'};return _0x5ef6b9;})});}_0x5385b2=_[_0x4392('0x35')]({},_0x5385b2,_0x188041[_0x4392('0x36')]);return db['JscriptyAnswerReport']['count']({'where':_0x5385b2['where']})['then'](function(_0x151c02){_0x359520[_0x4392('0x37')]=_0x151c02;if(_0x188041[_0x4392('0x29')]['includeAll']){_0x5385b2[_0x4392('0x39')]=[{'all':!![]}];}return db[_0x4392('0x55')][_0x4392('0x56')](_0x5385b2);})['then'](function(_0x2049de){_0x359520['rows']=_0x2049de;return _0x359520;});}})[_0x4392('0x1d')](respondWithFilteredResult(_0x1253a3,_0x5385b2))[_0x4392('0x3b')](handleError(_0x1253a3,null));};function char(_0x4b2309){return'number'===typeof _0x4b2309?String['fromCharCode'][_0x4392('0x57')](null,arguments):_0x4b2309;}function needsEncapsulation(_0x622cb2){return!!_0x622cb2&&(_0x622cb2['toString']()[_0x4392('0x58')](char(0xd))>=0x0||_0x622cb2[_0x4392('0x59')]()['indexOf'](char(0xa))>=0x0||_0x622cb2[_0x4392('0x59')]()[_0x4392('0x58')](char(0x2c))>=0x0||_0x622cb2[_0x4392('0x59')]()['indexOf'](char(0x22))>=0x0);}function encapsulate(_0x3fcd03){var _0x56d861=char(0x22),_0x5e7a8a='\x5c'+char(0x22),_0x286dd2=_0x3fcd03[_0x4392('0x59')]()[_0x4392('0x5a')](new RegExp(_0x56d861,'g'),_0x5e7a8a);return _0x56d861+_0x286dd2+_0x56d861;}exports[_0x4392('0x5b')]=function(_0x37b6ae,_0x3dd969,_0x24898e){var _0x3d0733,_0x511e06;var _0x1fcade={'where':{'ProjectId':_0x37b6ae[_0x4392('0x3c')]['id']}};if(_0x37b6ae[_0x4392('0x29')][_0x4392('0x5c')]){_0x1fcade[_0x4392('0x52')][_0x4392('0x5d')]=JSON[_0x4392('0x5e')](_0x37b6ae[_0x4392('0x29')][_0x4392('0x5c')]);}return db['JscriptySessionReport'][_0x4392('0x56')](_0x1fcade)['then'](handleEntityNotFound(_0x3dd969,null))['then'](function(_0x2654bc){if(_0x2654bc){_0x3d0733=_0x2654bc;return db[_0x4392('0x5f')]['findAll']({'where':{'SessionId':{'$in':_[_0x4392('0x32')](_0x3d0733,'id')},'ProjectId':_0x37b6ae[_0x4392('0x3c')]['id']},'order':_0x4392('0x60')});}})['then'](handleEntityNotFound(_0x3dd969,null))[_0x4392('0x1d')](function(_0x1b65c9){if(_0x1b65c9){_0x511e06=_0x1b65c9;var _0x573583={};for(var _0x179676=0x0,_0x2233a8=_0x511e06[_0x4392('0x3d')];_0x179676<_0x2233a8;_0x179676++){if(!_0x573583[_0x4392('0x2e')](_0x511e06[_0x179676][_0x4392('0x61')])){_0x573583[_0x511e06[_0x179676]['questionId']]=needsEncapsulation(_0x511e06[_0x179676][_0x4392('0x62')])?encapsulate(_0x511e06[_0x179676][_0x4392('0x62')]):_0x511e06[_0x179676]['question'];}}var _0x547e57=[],_0x2ad688={};for(var _0x179a36=0x0,_0x387659=_0x3d0733[_0x4392('0x3d')];_0x179a36<_0x387659;_0x179a36++){_0x2ad688={'ProjectId':_0x37b6ae['params']['id'],'SessionId':_0x3d0733[_0x179a36]['id'],'StartTime':moment(_0x3d0733[_0x179a36]['starttime'])['format'](_0x4392('0x63'))};for(var _0xc09751=0x0,_0x3d8121=_0x511e06['length'];_0xc09751<_0x3d8121;_0xc09751++){if(_0x511e06[_0xc09751][_0x4392('0x64')]==_0x3d0733[_0x179a36]['id']&&_0x573583[_0x4392('0x2e')](_0x511e06[_0xc09751][_0x4392('0x61')])){_0x2ad688[_0x573583[_0x511e06[_0xc09751][_0x4392('0x61')]]]=_0x511e06[_0xc09751]['answer'];}}for(var _0xf4f9ba in _0x573583){if(!_0x2ad688[_0x4392('0x2e')](_0x573583[_0xf4f9ba])){_0x2ad688[_0x573583[_0xf4f9ba]]=null;}}_0x547e57[_0x4392('0x65')](_0x2ad688);}return _0x547e57;}})['then'](function(_0x46378c){if(!_[_0x4392('0x66')](_0x46378c)){var _0x2de748=toCsv(_0x46378c);var _0x46567a=Date['now']();fs[_0x4392('0x67')](util['format'](_0x4392('0x68'),_0x37b6ae[_0x4392('0x3c')]['id'],_0x46567a),_0x2de748);_0x3dd969[_0x4392('0x69')]('Content-disposition',_0x4392('0x6a')+util['format'](_0x4392('0x6b'),_0x37b6ae['params']['id'],_0x46567a));_0x3dd969[_0x4392('0x69')](_0x4392('0x6c'),'text/csv');return _0x3dd969[_0x4392('0x6d')](util['format']('/tmp/Jscripty_Project_%d_Summary_%s.csv',_0x37b6ae[_0x4392('0x3c')]['id'],_0x46567a));}else{return _0x3dd969[_0x4392('0x16')](0xcc);}})['catch'](handleError(_0x3dd969,null));};
\ No newline at end of file
+var _0x1319=['Projects','UserProfileResource','error','stack','name','JscriptyProject','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','sort','pick','where','merge','map','key','filter','options','count','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','createdAt','updatedAt','omit','autoAssociation','update','getSessions','JscriptySessionReport','nolimit','order','ProjectId','getAnswers','findOne','JscriptyAnswerReport','number','fromCharCode','indexOf','toString','replace','getSummary','startTime','parse','-createdAt','questionId','question','starttime','format','YYYY-MM-DD\x20HH:mm:ss','SessionId','push','isEmpty','now','writeFileSync','/tmp/Jscripty_Project_%d_Summary_%s.csv','setHeader','Content-disposition','attachment;\x20filename=','Jscripty_Project_%d_Summary_%s.csv','Content-type','text/csv','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','sendStatus','status','end','json','offset','limit','Content-Range','apply','save','destroy','then','get'];(function(_0x3e1a6f,_0x407e0f){var _0x1e1a56=function(_0x5386ce){while(--_0x5386ce){_0x3e1a6f['push'](_0x3e1a6f['shift']());}};_0x1e1a56(++_0x407e0f);}(_0x1319,0x1b3));var _0x9131=function(_0x42faf5,_0x59bba2){_0x42faf5=_0x42faf5-0x0;var _0xb38c9b=_0x1319[_0x42faf5];return _0xb38c9b;};'use strict';var pdf=require(_0x9131('0x0'));var emlformat=require(_0x9131('0x1'));var rimraf=require(_0x9131('0x2'));var zipdir=require(_0x9131('0x3'));var jsonpatch=require(_0x9131('0x4'));var rp=require(_0x9131('0x5'));var moment=require(_0x9131('0x6'));var BPromise=require(_0x9131('0x7'));var Mustache=require(_0x9131('0x8'));var util=require(_0x9131('0x9'));var path=require(_0x9131('0xa'));var sox=require(_0x9131('0xb'));var csv=require('to-csv');var ejs=require(_0x9131('0xc'));var fs=require('fs');var _=require(_0x9131('0xd'));var squel=require(_0x9131('0xe'));var crypto=require(_0x9131('0xf'));var jsforce=require('jsforce');var deskjs=require(_0x9131('0x10'));var toCsv=require(_0x9131('0x11'));var querystring=require(_0x9131('0x12'));var Papa=require(_0x9131('0x13'));var authService=require(_0x9131('0x14'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x9131('0x15'));var qs=require(_0x9131('0x16'));var logger=require(_0x9131('0x17'))(_0x9131('0x18'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x362230,_0x46597){_0x46597=_0x46597||0xcc;return function(_0x46c3e1){if(_0x46c3e1){return _0x362230[_0x9131('0x19')](_0x46597);}return _0x362230[_0x9131('0x1a')](_0x46597)[_0x9131('0x1b')]();};}function respondWithResult(_0x3cdcdc,_0x52a9ed){_0x52a9ed=_0x52a9ed||0xc8;return function(_0x5c17a5){if(_0x5c17a5){return _0x3cdcdc[_0x9131('0x1a')](_0x52a9ed)[_0x9131('0x1c')](_0x5c17a5);}};}function respondWithFilteredResult(_0x5f4978,_0x311539){return function(_0x85ddd2){if(_0x85ddd2){var _0x5410b5=_0x85ddd2['count'],_0x5203e8=_0x311539[_0x9131('0x1d')],_0x85480d=_0x311539[_0x9131('0x1d')]+_0x311539[_0x9131('0x1e')],_0x5f04c7;if(_0x85480d>=_0x5410b5){_0x85480d=_0x5410b5;_0x5f04c7=0xc8;}else{_0x5f04c7=0xce;}_0x5f4978['status'](_0x5f04c7);return _0x5f4978['set'](_0x9131('0x1f'),_0x5203e8+'-'+_0x85480d+'/'+_0x5410b5)[_0x9131('0x1c')](_0x85ddd2);}return null;};}function patchUpdates(_0x168d11){return function(_0x70d23){try{jsonpatch[_0x9131('0x20')](_0x70d23,_0x168d11,!![]);}catch(_0x4a1d18){return BPromise['reject'](_0x4a1d18);}return _0x70d23[_0x9131('0x21')]();};}function saveUpdates(_0x5a8bae,_0x2ecd3f){return function(_0x2ef864){if(_0x2ef864){return _0x2ef864['update'](_0x5a8bae)['then'](function(_0x354a36){return _0x354a36;});}return null;};}function removeEntity(_0x4acd39,_0x129379){return function(_0x52b2bf){if(_0x52b2bf){return _0x52b2bf[_0x9131('0x22')]()[_0x9131('0x23')](function(){var _0x3d8e3b=_0x52b2bf[_0x9131('0x24')]({'plain':!![]});var _0x4c499d=_0x9131('0x25');return db[_0x9131('0x26')]['destroy']({'where':{'type':_0x4c499d,'resourceId':_0x3d8e3b['id']}})['then'](function(){return _0x52b2bf;});})[_0x9131('0x23')](function(){_0x4acd39[_0x9131('0x1a')](0xcc)[_0x9131('0x1b')]();});}};}function handleEntityNotFound(_0x227737,_0x47e0c5){return function(_0x3f44c3){if(!_0x3f44c3){_0x227737['sendStatus'](0x194);}return _0x3f44c3;};}function handleError(_0x5e7789,_0x4c808b){_0x4c808b=_0x4c808b||0x1f4;return function(_0x1268b4){logger[_0x9131('0x27')](_0x1268b4[_0x9131('0x28')]);if(_0x1268b4[_0x9131('0x29')]){delete _0x1268b4[_0x9131('0x29')];}_0x5e7789[_0x9131('0x1a')](_0x4c808b)['send'](_0x1268b4);};}exports['index']=function(_0x443c93,_0x8a88d0){var _0x24afe2={},_0x44788e={},_0x3592ab={'count':0x0,'rows':[]};var _0x28bd50=db[_0x9131('0x2a')][_0x9131('0x2b')];_0x44788e[_0x9131('0x2c')]=_[_0x9131('0x2d')](_0x28bd50);_0x44788e['query']=_[_0x9131('0x2d')](_0x443c93[_0x9131('0x2e')]);_0x44788e[_0x9131('0x2f')]=_[_0x9131('0x30')](_0x44788e[_0x9131('0x2c')],_0x44788e['query']);_0x24afe2[_0x9131('0x31')]=_[_0x9131('0x30')](_0x44788e[_0x9131('0x2c')],qs['fields'](_0x443c93[_0x9131('0x2e')][_0x9131('0x32')]));_0x24afe2['attributes']=_0x24afe2['attributes'][_0x9131('0x33')]?_0x24afe2[_0x9131('0x31')]:_0x44788e[_0x9131('0x2c')];if(!_0x443c93[_0x9131('0x2e')][_0x9131('0x34')]('nolimit')){_0x24afe2['limit']=qs[_0x9131('0x1e')](_0x443c93[_0x9131('0x2e')][_0x9131('0x1e')]);_0x24afe2[_0x9131('0x1d')]=qs['offset'](_0x443c93[_0x9131('0x2e')][_0x9131('0x1d')]);}_0x24afe2['order']=qs[_0x9131('0x35')](_0x443c93[_0x9131('0x2e')][_0x9131('0x35')]);_0x24afe2['where']=qs['filters'](_[_0x9131('0x36')](_0x443c93['query'],_0x44788e[_0x9131('0x2f')]));if(_0x443c93[_0x9131('0x2e')]['filter']){_0x24afe2[_0x9131('0x37')]=_[_0x9131('0x38')](_0x24afe2[_0x9131('0x37')],{'$or':_[_0x9131('0x39')](_0x28bd50,function(_0x90817f){if(_0x90817f['type'][_0x9131('0x3a')]!=='VIRTUAL'){var _0xa80d92={};_0xa80d92[_0x90817f['field']]={'$like':'%'+_0x443c93[_0x9131('0x2e')][_0x9131('0x3b')]+'%'};return _0xa80d92;}})});}_0x24afe2=_[_0x9131('0x38')]({},_0x24afe2,_0x443c93[_0x9131('0x3c')]);var _0x519ab3={'where':_0x24afe2[_0x9131('0x37')]};return db['JscriptyProject'][_0x9131('0x3d')](_0x519ab3)[_0x9131('0x23')](function(_0x5c96c0){_0x3592ab['count']=_0x5c96c0;if(_0x443c93[_0x9131('0x2e')][_0x9131('0x3e')]){_0x24afe2[_0x9131('0x3f')]=[{'all':!![]}];}return db['JscriptyProject'][_0x9131('0x40')](_0x24afe2);})['then'](function(_0x43cf0d){_0x3592ab[_0x9131('0x41')]=_0x43cf0d;return _0x3592ab;})[_0x9131('0x23')](respondWithFilteredResult(_0x8a88d0,_0x24afe2))[_0x9131('0x42')](handleError(_0x8a88d0,null));};exports[_0x9131('0x43')]=function(_0x176eb6,_0x3e2ab3){var _0x280e8b={'raw':![],'where':{'id':_0x176eb6[_0x9131('0x44')]['id']}},_0x282147={};_0x282147[_0x9131('0x2c')]=_[_0x9131('0x2d')](db['JscriptyProject'][_0x9131('0x2b')]);_0x282147[_0x9131('0x2e')]=_['keys'](_0x176eb6[_0x9131('0x2e')]);_0x282147[_0x9131('0x2f')]=_[_0x9131('0x30')](_0x282147[_0x9131('0x2c')],_0x282147[_0x9131('0x2e')]);_0x280e8b[_0x9131('0x31')]=_[_0x9131('0x30')](_0x282147[_0x9131('0x2c')],qs[_0x9131('0x32')](_0x176eb6[_0x9131('0x2e')][_0x9131('0x32')]));_0x280e8b[_0x9131('0x31')]=_0x280e8b['attributes'][_0x9131('0x33')]?_0x280e8b[_0x9131('0x31')]:_0x282147['model'];if(_0x176eb6[_0x9131('0x2e')][_0x9131('0x3e')]){_0x280e8b[_0x9131('0x3f')]=[{'all':!![]}];}_0x280e8b=_['merge']({},_0x280e8b,_0x176eb6[_0x9131('0x3c')]);return db['JscriptyProject'][_0x9131('0x45')](_0x280e8b)['then'](handleEntityNotFound(_0x3e2ab3,null))['then'](respondWithResult(_0x3e2ab3,null))[_0x9131('0x42')](handleError(_0x3e2ab3,null));};exports['create']=function(_0xcd9ac4,_0x761760){return db[_0x9131('0x2a')][_0x9131('0x46')](_0xcd9ac4[_0x9131('0x47')],{})[_0x9131('0x23')](function(_0x1c099d){var _0x137b9f=_0xcd9ac4[_0x9131('0x48')][_0x9131('0x24')]({'plain':!![]});if(!_0x137b9f)throw new Error(_0x9131('0x49'));if(_0x137b9f[_0x9131('0x4a')]===_0x9131('0x48')){var _0x1179d3=_0x1c099d[_0x9131('0x24')]({'plain':!![]});var _0x27b41c=_0x9131('0x25');return db[_0x9131('0x4b')]['find']({'where':{'name':_0x27b41c,'userProfileId':_0x137b9f[_0x9131('0x4c')]},'raw':!![]})[_0x9131('0x23')](function(_0x4fab3d){if(_0x4fab3d&&_0x4fab3d['autoAssociation']===0x0){return db['UserProfileResource'][_0x9131('0x46')]({'name':_0x1179d3[_0x9131('0x29')],'resourceId':_0x1179d3['id'],'type':_0x4fab3d[_0x9131('0x29')],'sectionId':_0x4fab3d['id']},{})[_0x9131('0x23')](function(){return _0x1c099d;});}else{return _0x1c099d;}})['catch'](function(_0x5114c5){logger[_0x9131('0x27')](_0x9131('0x4d'),_0x5114c5);throw _0x5114c5;});}return _0x1c099d;})[_0x9131('0x23')](respondWithResult(_0x761760,0xc9))[_0x9131('0x42')](handleError(_0x761760,null));};exports[_0x9131('0x4e')]=function(_0x23455a,_0x169bea){var _0x52a619={'raw':![],'where':{'id':_0x23455a[_0x9131('0x44')]['id']}},_0x564f40={};_0x564f40['model']=_['keys'](db['JscriptyProject'][_0x9131('0x2b')]);_0x52a619['attributes']=_[_0x9131('0x30')](_0x564f40[_0x9131('0x2c')],qs[_0x9131('0x32')](_0x23455a['query'][_0x9131('0x32')]));_0x52a619[_0x9131('0x31')]=_0x52a619[_0x9131('0x31')]['length']?_0x52a619['attributes']:_0x564f40[_0x9131('0x2c')];if(_0x23455a['query'][_0x9131('0x3e')]){_0x52a619[_0x9131('0x3f')]=[{'all':!![]}];}_0x52a619=_[_0x9131('0x38')]({},_0x52a619,_0x23455a[_0x9131('0x3c')]);return db[_0x9131('0x2a')][_0x9131('0x45')](_0x52a619)[_0x9131('0x23')](handleEntityNotFound(_0x169bea,null))['then'](function(_0x468009){if(_0x468009){var _0x2ce439=_0x468009['get']({'plain':!![]});_0x2ce439=qs['omit'](_0x2ce439,['id',_0x9131('0x4f'),_0x9131('0x50')]);_0x23455a['body']=_[_0x9131('0x51')](_0x23455a[_0x9131('0x47')],['id','createdAt','updatedAt']);return db['JscriptyProject']['create'](_[_0x9131('0x38')](_0x2ce439,_0x23455a['body']),{'include':_0x23455a[_0x9131('0x2e')][_0x9131('0x3e')]?[{'all':!![]}]:undefined})[_0x9131('0x23')](function(_0x14f6ef){var _0x195f49=_0x23455a[_0x9131('0x48')][_0x9131('0x24')]({'plain':!![]});if(!_0x195f49)throw new Error(_0x9131('0x49'));if(_0x195f49[_0x9131('0x4a')]===_0x9131('0x48')){var _0x309eae=_0x14f6ef['get']({'plain':!![]});var _0x415724='Projects';return db[_0x9131('0x4b')]['find']({'where':{'name':_0x415724,'userProfileId':_0x195f49[_0x9131('0x4c')]},'raw':!![]})['then'](function(_0x5d5319){if(_0x5d5319&&_0x5d5319[_0x9131('0x52')]===0x0){return db[_0x9131('0x26')][_0x9131('0x46')]({'name':_0x309eae[_0x9131('0x29')],'resourceId':_0x309eae['id'],'type':_0x5d5319[_0x9131('0x29')],'sectionId':_0x5d5319['id']},{})[_0x9131('0x23')](function(){return _0x14f6ef;});}else{return _0x14f6ef;}})[_0x9131('0x42')](function(_0x3f789b){logger[_0x9131('0x27')](_0x9131('0x4d'),_0x3f789b);throw _0x3f789b;});}return _0x14f6ef;});}})[_0x9131('0x23')](respondWithResult(_0x169bea,0xc9))[_0x9131('0x42')](handleError(_0x169bea,null));};exports[_0x9131('0x53')]=function(_0x11c678,_0x2ec6f0){if(_0x11c678[_0x9131('0x47')]['id']){delete _0x11c678[_0x9131('0x47')]['id'];}return db['JscriptyProject'][_0x9131('0x45')]({'where':{'id':_0x11c678[_0x9131('0x44')]['id']}})[_0x9131('0x23')](handleEntityNotFound(_0x2ec6f0,null))[_0x9131('0x23')](saveUpdates(_0x11c678[_0x9131('0x47')],null))[_0x9131('0x23')](respondWithResult(_0x2ec6f0,null))[_0x9131('0x42')](handleError(_0x2ec6f0,null));};exports[_0x9131('0x22')]=function(_0x4e5762,_0x38bdfb){return db['JscriptyProject'][_0x9131('0x45')]({'where':{'id':_0x4e5762[_0x9131('0x44')]['id']}})[_0x9131('0x23')](handleEntityNotFound(_0x38bdfb,null))[_0x9131('0x23')](removeEntity(_0x38bdfb,null))[_0x9131('0x42')](handleError(_0x38bdfb,null));};exports[_0x9131('0x54')]=function(_0x1b8dae,_0x248eaf,_0x5cbf83){var _0x342bff={'raw':!![],'where':{}};var _0x593717={};var _0x37248a={'count':0x0,'rows':[]};return db[_0x9131('0x2a')]['findOne']({'where':{'id':_0x1b8dae[_0x9131('0x44')]['id']}})[_0x9131('0x23')](handleEntityNotFound(_0x248eaf,null))[_0x9131('0x23')](function(_0x47e9f1){if(_0x47e9f1){_0x593717[_0x9131('0x2c')]=_[_0x9131('0x2d')](db[_0x9131('0x55')][_0x9131('0x2b')]);_0x593717[_0x9131('0x2e')]=_['keys'](_0x1b8dae[_0x9131('0x2e')]);_0x593717[_0x9131('0x2f')]=_[_0x9131('0x30')](_0x593717[_0x9131('0x2c')],_0x593717[_0x9131('0x2e')]);_0x342bff[_0x9131('0x31')]=_[_0x9131('0x30')](_0x593717[_0x9131('0x2c')],qs[_0x9131('0x32')](_0x1b8dae['query'][_0x9131('0x32')]));_0x342bff['attributes']=_0x342bff['attributes'][_0x9131('0x33')]?_0x342bff[_0x9131('0x31')]:_0x593717[_0x9131('0x2c')];if(!_0x1b8dae['query'][_0x9131('0x34')](_0x9131('0x56'))){_0x342bff[_0x9131('0x1e')]=qs[_0x9131('0x1e')](_0x1b8dae[_0x9131('0x2e')][_0x9131('0x1e')]);_0x342bff[_0x9131('0x1d')]=qs[_0x9131('0x1d')](_0x1b8dae[_0x9131('0x2e')][_0x9131('0x1d')]);}_0x342bff[_0x9131('0x57')]=qs[_0x9131('0x35')](_0x1b8dae['query']['sort']);_0x342bff[_0x9131('0x37')]=qs['filters'](_[_0x9131('0x36')](_0x1b8dae[_0x9131('0x2e')],_0x593717['filters']));_0x342bff[_0x9131('0x37')][_0x9131('0x58')]=_0x47e9f1['id'];if(_0x1b8dae['query'][_0x9131('0x3b')]){_0x342bff[_0x9131('0x37')]=_[_0x9131('0x38')](_0x342bff[_0x9131('0x37')],{'$or':_['map'](_0x342bff['attributes'],function(_0x5675f2){var _0x2211e0={};_0x2211e0[_0x5675f2]={'$like':'%'+_0x1b8dae[_0x9131('0x2e')][_0x9131('0x3b')]+'%'};return _0x2211e0;})});}_0x342bff=_[_0x9131('0x38')]({},_0x342bff,_0x1b8dae[_0x9131('0x3c')]);return db[_0x9131('0x55')]['count']({'where':_0x342bff[_0x9131('0x37')]})[_0x9131('0x23')](function(_0x5f4a10){_0x37248a['count']=_0x5f4a10;if(_0x1b8dae[_0x9131('0x2e')][_0x9131('0x3e')]){_0x342bff[_0x9131('0x3f')]=[{'all':!![]}];}return db[_0x9131('0x55')][_0x9131('0x40')](_0x342bff);})[_0x9131('0x23')](function(_0x4a4c76){_0x37248a[_0x9131('0x41')]=_0x4a4c76;return _0x37248a;});}})['then'](respondWithFilteredResult(_0x248eaf,_0x342bff))[_0x9131('0x42')](handleError(_0x248eaf,null));};exports[_0x9131('0x59')]=function(_0x398aab,_0x1b0cbb,_0x536f4a){var _0xd33d6f={'raw':!![],'where':{}};var _0x1d0db5={};var _0x39cded={'count':0x0,'rows':[]};return db[_0x9131('0x2a')][_0x9131('0x5a')]({'where':{'id':_0x398aab['params']['id']}})[_0x9131('0x23')](handleEntityNotFound(_0x1b0cbb,null))[_0x9131('0x23')](function(_0x5c1304){if(_0x5c1304){_0x1d0db5[_0x9131('0x2c')]=_[_0x9131('0x2d')](db[_0x9131('0x5b')][_0x9131('0x2b')]);_0x1d0db5[_0x9131('0x2e')]=_[_0x9131('0x2d')](_0x398aab[_0x9131('0x2e')]);_0x1d0db5[_0x9131('0x2f')]=_['intersection'](_0x1d0db5[_0x9131('0x2c')],_0x1d0db5[_0x9131('0x2e')]);_0xd33d6f[_0x9131('0x31')]=_[_0x9131('0x30')](_0x1d0db5[_0x9131('0x2c')],qs[_0x9131('0x32')](_0x398aab[_0x9131('0x2e')]['fields']));_0xd33d6f[_0x9131('0x31')]=_0xd33d6f[_0x9131('0x31')]['length']?_0xd33d6f[_0x9131('0x31')]:_0x1d0db5['model'];if(!_0x398aab[_0x9131('0x2e')][_0x9131('0x34')](_0x9131('0x56'))){_0xd33d6f[_0x9131('0x1e')]=qs[_0x9131('0x1e')](_0x398aab[_0x9131('0x2e')]['limit']);_0xd33d6f[_0x9131('0x1d')]=qs[_0x9131('0x1d')](_0x398aab['query']['offset']);}_0xd33d6f[_0x9131('0x57')]=qs[_0x9131('0x35')](_0x398aab[_0x9131('0x2e')]['sort']);_0xd33d6f['where']=qs[_0x9131('0x2f')](_[_0x9131('0x36')](_0x398aab[_0x9131('0x2e')],_0x1d0db5[_0x9131('0x2f')]));_0xd33d6f[_0x9131('0x37')][_0x9131('0x58')]=_0x5c1304['id'];if(_0x398aab[_0x9131('0x2e')][_0x9131('0x3b')]){_0xd33d6f['where']=_[_0x9131('0x38')](_0xd33d6f[_0x9131('0x37')],{'$or':_[_0x9131('0x39')](_0xd33d6f[_0x9131('0x31')],function(_0x30a62a){var _0x17df56={};_0x17df56[_0x30a62a]={'$like':'%'+_0x398aab[_0x9131('0x2e')]['filter']+'%'};return _0x17df56;})});}_0xd33d6f=_[_0x9131('0x38')]({},_0xd33d6f,_0x398aab[_0x9131('0x3c')]);return db['JscriptyAnswerReport'][_0x9131('0x3d')]({'where':_0xd33d6f[_0x9131('0x37')]})[_0x9131('0x23')](function(_0x1f222f){_0x39cded[_0x9131('0x3d')]=_0x1f222f;if(_0x398aab[_0x9131('0x2e')]['includeAll']){_0xd33d6f[_0x9131('0x3f')]=[{'all':!![]}];}return db[_0x9131('0x5b')]['findAll'](_0xd33d6f);})[_0x9131('0x23')](function(_0x145fad){_0x39cded[_0x9131('0x41')]=_0x145fad;return _0x39cded;});}})[_0x9131('0x23')](respondWithFilteredResult(_0x1b0cbb,_0xd33d6f))[_0x9131('0x42')](handleError(_0x1b0cbb,null));};function char(_0x1d4e2c){return _0x9131('0x5c')===typeof _0x1d4e2c?String[_0x9131('0x5d')][_0x9131('0x20')](null,arguments):_0x1d4e2c;}function needsEncapsulation(_0x44b9b4){return!!_0x44b9b4&&(_0x44b9b4['toString']()[_0x9131('0x5e')](char(0xd))>=0x0||_0x44b9b4[_0x9131('0x5f')]()[_0x9131('0x5e')](char(0xa))>=0x0||_0x44b9b4[_0x9131('0x5f')]()['indexOf'](char(0x2c))>=0x0||_0x44b9b4[_0x9131('0x5f')]()[_0x9131('0x5e')](char(0x22))>=0x0);}function encapsulate(_0x3076bc){var _0x27e858=char(0x22),_0x2780c6='\x5c'+char(0x22),_0xe5f0e6=_0x3076bc[_0x9131('0x5f')]()[_0x9131('0x60')](new RegExp(_0x27e858,'g'),_0x2780c6);return _0x27e858+_0xe5f0e6+_0x27e858;}exports[_0x9131('0x61')]=function(_0x1a9099,_0x3654de,_0x581183){var _0xb8ccb7,_0x12ef86;var _0x3448c1={'where':{'ProjectId':_0x1a9099[_0x9131('0x44')]['id']}};if(_0x1a9099['query'][_0x9131('0x62')]){_0x3448c1[_0x9131('0x37')]['starttime']=JSON[_0x9131('0x63')](_0x1a9099[_0x9131('0x2e')]['startTime']);}return db[_0x9131('0x55')][_0x9131('0x40')](_0x3448c1)[_0x9131('0x23')](handleEntityNotFound(_0x3654de,null))[_0x9131('0x23')](function(_0x59e050){if(_0x59e050){_0xb8ccb7=_0x59e050;return db['JscriptyQuestionReport']['findAll']({'where':{'SessionId':{'$in':_[_0x9131('0x39')](_0xb8ccb7,'id')},'ProjectId':_0x1a9099[_0x9131('0x44')]['id']},'order':_0x9131('0x64')});}})[_0x9131('0x23')](handleEntityNotFound(_0x3654de,null))[_0x9131('0x23')](function(_0x33f6a7){if(_0x33f6a7){_0x12ef86=_0x33f6a7;var _0x201ed2={};for(var _0x46d530=0x0,_0x191815=_0x12ef86[_0x9131('0x33')];_0x46d530<_0x191815;_0x46d530++){if(!_0x201ed2['hasOwnProperty'](_0x12ef86[_0x46d530][_0x9131('0x65')])){_0x201ed2[_0x12ef86[_0x46d530][_0x9131('0x65')]]=needsEncapsulation(_0x12ef86[_0x46d530][_0x9131('0x66')])?encapsulate(_0x12ef86[_0x46d530][_0x9131('0x66')]):_0x12ef86[_0x46d530][_0x9131('0x66')];}}var _0x27de3c=[],_0x51ea2d={};for(var _0x53fbce=0x0,_0x15ffaf=_0xb8ccb7['length'];_0x53fbce<_0x15ffaf;_0x53fbce++){_0x51ea2d={'ProjectId':_0x1a9099[_0x9131('0x44')]['id'],'SessionId':_0xb8ccb7[_0x53fbce]['id'],'StartTime':moment(_0xb8ccb7[_0x53fbce][_0x9131('0x67')])[_0x9131('0x68')](_0x9131('0x69'))};for(var _0x265a42=0x0,_0x54945a=_0x12ef86['length'];_0x265a42<_0x54945a;_0x265a42++){if(_0x12ef86[_0x265a42][_0x9131('0x6a')]==_0xb8ccb7[_0x53fbce]['id']&&_0x201ed2['hasOwnProperty'](_0x12ef86[_0x265a42][_0x9131('0x65')])){_0x51ea2d[_0x201ed2[_0x12ef86[_0x265a42][_0x9131('0x65')]]]=_0x12ef86[_0x265a42]['answer'];}}for(var _0x5308c3 in _0x201ed2){if(!_0x51ea2d[_0x9131('0x34')](_0x201ed2[_0x5308c3])){_0x51ea2d[_0x201ed2[_0x5308c3]]=null;}}_0x27de3c[_0x9131('0x6b')](_0x51ea2d);}return _0x27de3c;}})[_0x9131('0x23')](function(_0x15288b){if(!_[_0x9131('0x6c')](_0x15288b)){var _0x5d3b36=toCsv(_0x15288b);var _0x3b12ca=Date[_0x9131('0x6d')]();fs[_0x9131('0x6e')](util['format'](_0x9131('0x6f'),_0x1a9099[_0x9131('0x44')]['id'],_0x3b12ca),_0x5d3b36);_0x3654de[_0x9131('0x70')](_0x9131('0x71'),_0x9131('0x72')+util[_0x9131('0x68')](_0x9131('0x73'),_0x1a9099[_0x9131('0x44')]['id'],_0x3b12ca));_0x3654de['setHeader'](_0x9131('0x74'),_0x9131('0x75'));return _0x3654de['download'](util[_0x9131('0x68')](_0x9131('0x6f'),_0x1a9099[_0x9131('0x44')]['id'],_0x3b12ca));}else{return _0x3654de[_0x9131('0x19')](0xcc);}})[_0x9131('0x42')](handleError(_0x3654de,null));};
\ No newline at end of file
index ebbe62b..61eec18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd339=['moment','bluebird','request-promise','exports','define','../../config/logger'];(function(_0x281f6a,_0x3be205){var _0x8c71dc=function(_0x23a28b){while(--_0x23a28b){_0x281f6a['push'](_0x281f6a['shift']());}};_0x8c71dc(++_0x3be205);}(_0xd339,0xad));var _0x9d33=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0xd339[_0x397e5f];return _0x5302b8;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x9d33('0x0'))('api');var moment=require(_0x9d33('0x1'));var BPromise=require(_0x9d33('0x2'));var rp=require(_0x9d33('0x3'));var attributes=require('./jscriptyProject.attributes');module[_0x9d33('0x4')]=function(_0x5d9704,_0x21645c){return _0x5d9704[_0x9d33('0x5')]('JscriptyProject',attributes,{'tableName':'jscripty_projects','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x105b=['exports','JscriptyProject','jscripty_projects','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x4837c0,_0x35a922){var _0x11d7ed=function(_0x964bcd){while(--_0x964bcd){_0x4837c0['push'](_0x4837c0['shift']());}};_0x11d7ed(++_0x35a922);}(_0x105b,0x1a7));var _0xb105=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x105b[_0x1facfa];return _0x9ec701;};'use strict';var _=require(_0xb105('0x0'));var util=require(_0xb105('0x1'));var logger=require(_0xb105('0x2'))(_0xb105('0x3'));var moment=require(_0xb105('0x4'));var BPromise=require(_0xb105('0x5'));var rp=require(_0xb105('0x6'));var attributes=require('./jscriptyProject.attributes');module[_0xb105('0x7')]=function(_0xd09bee,_0x1c12d6){return _0xd09bee['define'](_0xb105('0x8'),attributes,{'tableName':_0xb105('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b02de4f..25bbbd1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b3f=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','request','then','JscriptyProject,\x20%s,\x20%s','request\x20sent','debug','JscriptyProject,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','util','bluebird','randomstring'];(function(_0x3c3e38,_0x43b760){var _0x48cd69=function(_0x37d2c9){while(--_0x37d2c9){_0x3c3e38['push'](_0x3c3e38['shift']());}};_0x48cd69(++_0x43b760);}(_0x0b3f,0xba));var _0xf0b3=function(_0x3df33c,_0x25a802){_0x3df33c=_0x3df33c-0x0;var _0x14d75f=_0x0b3f[_0x3df33c];return _0x14d75f;};'use strict';var _=require('lodash');var util=require(_0xf0b3('0x0'));var moment=require('moment');var BPromise=require(_0xf0b3('0x1'));var rs=require(_0xf0b3('0x2'));var fs=require('fs');var Redis=require(_0xf0b3('0x3'));var db=require(_0xf0b3('0x4'))['db'];var utils=require(_0xf0b3('0x5'));var logger=require(_0xf0b3('0x6'))(_0xf0b3('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x112f72,_0x87486,_0x81f557){return new BPromise(function(_0x3b5180,_0x2f5a18){return client[_0xf0b3('0x8')](_0x112f72,_0x81f557)[_0xf0b3('0x9')](function(_0x4c221d){logger['info'](_0xf0b3('0xa'),_0x87486,_0xf0b3('0xb'));logger[_0xf0b3('0xc')](_0xf0b3('0xd'),_0x87486,'request\x20sent',JSON[_0xf0b3('0xe')](_0x4c221d));if(_0x4c221d[_0xf0b3('0xf')]){if(_0x4c221d[_0xf0b3('0xf')][_0xf0b3('0x10')]===0x1f4){logger[_0xf0b3('0xf')](_0xf0b3('0xa'),_0x87486,_0x4c221d[_0xf0b3('0xf')]['message']);return _0x2f5a18(_0x4c221d[_0xf0b3('0xf')][_0xf0b3('0x11')]);}logger[_0xf0b3('0xf')](_0xf0b3('0xa'),_0x87486,_0x4c221d[_0xf0b3('0xf')]['message']);return _0x3b5180(_0x4c221d['error']['message']);}else{logger[_0xf0b3('0x12')](_0xf0b3('0xa'),_0x87486,_0xf0b3('0xb'));_0x3b5180(_0x4c221d[_0xf0b3('0x13')][_0xf0b3('0x11')]);}})[_0xf0b3('0x14')](function(_0x5cd45e){logger[_0xf0b3('0xf')](_0xf0b3('0xa'),_0x87486,_0x5cd45e);_0x2f5a18(_0x5cd45e);});});}
\ No newline at end of file
+var _0x8092=['bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','jayson/promise','http','request','then','info','JscriptyProject,\x20%s,\x20%s','request\x20sent','debug','JscriptyProject,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util'];(function(_0x4a9198,_0x52e1a0){var _0x2bacef=function(_0x2f7cce){while(--_0x2f7cce){_0x4a9198['push'](_0x4a9198['shift']());}};_0x2bacef(++_0x52e1a0);}(_0x8092,0x1e1));var _0x2809=function(_0x1893df,_0x3fd006){_0x1893df=_0x1893df-0x0;var _0x4bdeda=_0x8092[_0x1893df];return _0x4bdeda;};'use strict';var _=require(_0x2809('0x0'));var util=require(_0x2809('0x1'));var moment=require('moment');var BPromise=require(_0x2809('0x2'));var rs=require(_0x2809('0x3'));var fs=require('fs');var Redis=require(_0x2809('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x2809('0x5'));var logger=require(_0x2809('0x6'))(_0x2809('0x7'));var config=require('../../config/environment');var jayson=require(_0x2809('0x8'));var client=jayson['client'][_0x2809('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x244a86,_0x43efe9,_0x1b1ab8){return new BPromise(function(_0x195a0d,_0x51e9a9){return client[_0x2809('0xa')](_0x244a86,_0x1b1ab8)[_0x2809('0xb')](function(_0xa90014){logger[_0x2809('0xc')](_0x2809('0xd'),_0x43efe9,_0x2809('0xe'));logger[_0x2809('0xf')](_0x2809('0x10'),_0x43efe9,'request\x20sent',JSON[_0x2809('0x11')](_0xa90014));if(_0xa90014[_0x2809('0x12')]){if(_0xa90014[_0x2809('0x12')][_0x2809('0x13')]===0x1f4){logger['error']('JscriptyProject,\x20%s,\x20%s',_0x43efe9,_0xa90014[_0x2809('0x12')][_0x2809('0x14')]);return _0x51e9a9(_0xa90014[_0x2809('0x12')][_0x2809('0x14')]);}logger[_0x2809('0x12')](_0x2809('0xd'),_0x43efe9,_0xa90014[_0x2809('0x12')]['message']);return _0x195a0d(_0xa90014['error'][_0x2809('0x14')]);}else{logger[_0x2809('0xc')](_0x2809('0xd'),_0x43efe9,_0x2809('0xe'));_0x195a0d(_0xa90014[_0x2809('0x15')][_0x2809('0x14')]);}})[_0x2809('0x16')](function(_0x143bf1){logger[_0x2809('0x12')](_0x2809('0xd'),_0x43efe9,_0x143bf1);_0x51e9a9(_0x143bf1);});});}
\ No newline at end of file
index 38c99be..1084756 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0cc2=['put','delete','destroy','exports','multer','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptyQuestionReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create'];(function(_0x49c7bd,_0x1432db){var _0x1ba37d=function(_0x30f525){while(--_0x30f525){_0x49c7bd['push'](_0x49c7bd['shift']());}};_0x1ba37d(++_0x1432db);}(_0x0cc2,0x82));var _0x20cc=function(_0x22815a,_0xff3209){_0x22815a=_0x22815a-0x0;var _0x330d3f=_0x0cc2[_0x22815a];return _0x330d3f;};'use strict';var multer=require(_0x20cc('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x20cc('0x1'));var express=require(_0x20cc('0x2'));var router=express[_0x20cc('0x3')]();var auth=require(_0x20cc('0x4'));var interaction=require(_0x20cc('0x5'));var config=require(_0x20cc('0x6'));var controller=require(_0x20cc('0x7'));router[_0x20cc('0x8')]('/',auth[_0x20cc('0x9')](),controller[_0x20cc('0xa')]);router[_0x20cc('0x8')](_0x20cc('0xb'),auth['isAuthenticated'](),controller[_0x20cc('0xc')]);router[_0x20cc('0x8')](_0x20cc('0xd'),auth[_0x20cc('0x9')](),controller[_0x20cc('0xe')]);router[_0x20cc('0xf')]('/',auth['isAuthenticated'](),controller[_0x20cc('0x10')]);router[_0x20cc('0x11')](_0x20cc('0xd'),auth[_0x20cc('0x9')](),controller['update']);router[_0x20cc('0x12')](_0x20cc('0xd'),auth[_0x20cc('0x9')](),controller[_0x20cc('0x13')]);module[_0x20cc('0x14')]=router;
\ No newline at end of file
+var _0xebb9=['util','path','connect-timeout','express','Router','../../components/interaction/service','get','isAuthenticated','/describe','describe','/:id','post','create','put','update','delete','destroy','exports','multer'];(function(_0x3835d9,_0x55d82c){var _0x377e72=function(_0x1ff89d){while(--_0x1ff89d){_0x3835d9['push'](_0x3835d9['shift']());}};_0x377e72(++_0x55d82c);}(_0xebb9,0x97));var _0x9ebb=function(_0x288495,_0xdf8ea1){_0x288495=_0x288495-0x0;var _0x3f0cae=_0xebb9[_0x288495];return _0x3f0cae;};'use strict';var multer=require(_0x9ebb('0x0'));var util=require(_0x9ebb('0x1'));var path=require(_0x9ebb('0x2'));var timeout=require(_0x9ebb('0x3'));var express=require(_0x9ebb('0x4'));var router=express[_0x9ebb('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x9ebb('0x6'));var config=require('../../config/environment');var controller=require('./jscriptyQuestionReport.controller');router[_0x9ebb('0x7')]('/',auth[_0x9ebb('0x8')](),controller['index']);router[_0x9ebb('0x7')](_0x9ebb('0x9'),auth[_0x9ebb('0x8')](),controller[_0x9ebb('0xa')]);router[_0x9ebb('0x7')](_0x9ebb('0xb'),auth[_0x9ebb('0x8')](),controller['show']);router[_0x9ebb('0xc')]('/',auth['isAuthenticated'](),controller[_0x9ebb('0xd')]);router[_0x9ebb('0xe')]('/:id',auth[_0x9ebb('0x8')](),controller[_0x9ebb('0xf')]);router[_0x9ebb('0x10')](_0x9ebb('0xb'),auth[_0x9ebb('0x8')](),controller[_0x9ebb('0x11')]);module[_0x9ebb('0x12')]=router;
\ No newline at end of file
index b27b047..a74bbc2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6953=['STRING','sequelize','exports'];(function(_0x125b6d,_0x1be5d4){var _0x40122e=function(_0x18c91c){while(--_0x18c91c){_0x125b6d['push'](_0x125b6d['shift']());}};_0x40122e(++_0x1be5d4);}(_0x6953,0x91));var _0x3695=function(_0x301997,_0x1c2cce){_0x301997=_0x301997-0x0;var _0x49eeb5=_0x6953[_0x301997];return _0x49eeb5;};'use strict';var Sequelize=require(_0x3695('0x0'));module[_0x3695('0x1')]={'question':{'type':Sequelize['STRING']},'answer':{'type':Sequelize['TEXT']('long')},'membername':{'type':Sequelize[_0x3695('0x2')]},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x3695('0x2')]},'uniqueid':{'type':Sequelize[_0x3695('0x2')]},'calleridname':{'type':Sequelize[_0x3695('0x2')]},'calleridnum':{'type':Sequelize['STRING']},'questionId':{'type':Sequelize[_0x3695('0x2')]}};
\ No newline at end of file
+var _0xd816=['STRING','sequelize','exports','TEXT'];(function(_0x5e2152,_0x172f3d){var _0x5ddcf6=function(_0x30a5cc){while(--_0x30a5cc){_0x5e2152['push'](_0x5e2152['shift']());}};_0x5ddcf6(++_0x172f3d);}(_0xd816,0xd5));var _0x6d81=function(_0x2ee240,_0x2e88b1){_0x2ee240=_0x2ee240-0x0;var _0x6b37bb=_0xd816[_0x2ee240];return _0x6b37bb;};'use strict';var Sequelize=require(_0x6d81('0x0'));module[_0x6d81('0x1')]={'question':{'type':Sequelize['STRING']},'answer':{'type':Sequelize[_0x6d81('0x2')]('long')},'membername':{'type':Sequelize['STRING']},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x6d81('0x3')]},'uniqueid':{'type':Sequelize[_0x6d81('0x3')]},'calleridname':{'type':Sequelize[_0x6d81('0x3')]},'calleridnum':{'type':Sequelize[_0x6d81('0x3')]},'questionId':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 121f142..0ca2e55 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc2da=['create','body','params','describe','html-pdf','rimraf','fast-json-patch','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','apply','save','then','destroy','error','stack','name','send','index','JscriptyQuestionReport','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','limit','order','where','filters','filter','merge','map','type','key','VIRTUAL','field','options','count','includeAll','findAll','rows','catch','show','include','find'];(function(_0x31b1e9,_0x5ddf47){var _0x2136c6=function(_0x3fb634){while(--_0x3fb634){_0x31b1e9['push'](_0x31b1e9['shift']());}};_0x2136c6(++_0x5ddf47);}(_0xc2da,0x124));var _0xac2d=function(_0x1c1da1,_0x4755d8){_0x1c1da1=_0x1c1da1-0x0;var _0x3c1816=_0xc2da[_0x1c1da1];return _0x3c1816;};'use strict';var pdf=require(_0xac2d('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xac2d('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0xac2d('0x2'));var rp=require('request-promise');var moment=require(_0xac2d('0x3'));var BPromise=require(_0xac2d('0x4'));var Mustache=require(_0xac2d('0x5'));var util=require(_0xac2d('0x6'));var path=require(_0xac2d('0x7'));var sox=require(_0xac2d('0x8'));var csv=require(_0xac2d('0x9'));var ejs=require(_0xac2d('0xa'));var fs=require('fs');var _=require(_0xac2d('0xb'));var squel=require(_0xac2d('0xc'));var crypto=require(_0xac2d('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xac2d('0x9'));var querystring=require('querystring');var Papa=require(_0xac2d('0xe'));var authService=require(_0xac2d('0xf'));var hardwareService=require(_0xac2d('0x10'));var Redis=require(_0xac2d('0x11'));var qs=require(_0xac2d('0x12'));var logger=require(_0xac2d('0x13'))('api');var utils=require('../../config/utils');var config=require(_0xac2d('0x14'));var db=require(_0xac2d('0x15'))['db'];function respondWithStatusCode(_0x1ab17c,_0xef707a){_0xef707a=_0xef707a||0xcc;return function(_0x4b9e88){if(_0x4b9e88){return _0x1ab17c[_0xac2d('0x16')](_0xef707a);}return _0x1ab17c[_0xac2d('0x17')](_0xef707a)[_0xac2d('0x18')]();};}function respondWithResult(_0x2ad305,_0x394187){_0x394187=_0x394187||0xc8;return function(_0x2bed84){if(_0x2bed84){return _0x2ad305[_0xac2d('0x17')](_0x394187)[_0xac2d('0x19')](_0x2bed84);}};}function respondWithFilteredResult(_0x45019f,_0x406551){return function(_0x11a3aa){if(_0x11a3aa){var _0x33d014=_0x11a3aa['count'],_0x74853a=_0x406551[_0xac2d('0x1a')],_0x2d92b5=_0x406551[_0xac2d('0x1a')]+_0x406551['limit'],_0x324978;if(_0x2d92b5>=_0x33d014){_0x2d92b5=_0x33d014;_0x324978=0xc8;}else{_0x324978=0xce;}_0x45019f[_0xac2d('0x17')](_0x324978);return _0x45019f[_0xac2d('0x1b')](_0xac2d('0x1c'),_0x74853a+'-'+_0x2d92b5+'/'+_0x33d014)['json'](_0x11a3aa);}return null;};}function patchUpdates(_0x45c12b){return function(_0x5da81c){try{jsonpatch[_0xac2d('0x1d')](_0x5da81c,_0x45c12b,!![]);}catch(_0x3651e6){return BPromise['reject'](_0x3651e6);}return _0x5da81c[_0xac2d('0x1e')]();};}function saveUpdates(_0x4f2d05,_0x5cca5b){return function(_0x510e85){if(_0x510e85){return _0x510e85['update'](_0x4f2d05)[_0xac2d('0x1f')](function(_0x21c407){return _0x21c407;});}return null;};}function removeEntity(_0x845ed2,_0x19a955){return function(_0x211d26){if(_0x211d26){return _0x211d26[_0xac2d('0x20')]()[_0xac2d('0x1f')](function(){_0x845ed2[_0xac2d('0x17')](0xcc)[_0xac2d('0x18')]();});}};}function handleEntityNotFound(_0x3f1212,_0xafa502){return function(_0x226b6b){if(!_0x226b6b){_0x3f1212[_0xac2d('0x16')](0x194);}return _0x226b6b;};}function handleError(_0xa8a259,_0x3edde3){_0x3edde3=_0x3edde3||0x1f4;return function(_0x8d0e32){logger[_0xac2d('0x21')](_0x8d0e32[_0xac2d('0x22')]);if(_0x8d0e32[_0xac2d('0x23')]){delete _0x8d0e32['name'];}_0xa8a259[_0xac2d('0x17')](_0x3edde3)[_0xac2d('0x24')](_0x8d0e32);};}exports[_0xac2d('0x25')]=function(_0x2323c8,_0x563f19){var _0x543f93={},_0x1714c1={},_0x1c69f1={'count':0x0,'rows':[]};var _0x2ad9b1=db[_0xac2d('0x26')][_0xac2d('0x27')];_0x1714c1[_0xac2d('0x28')]=_[_0xac2d('0x29')](_0x2ad9b1);_0x1714c1[_0xac2d('0x2a')]=_[_0xac2d('0x29')](_0x2323c8['query']);_0x1714c1['filters']=_[_0xac2d('0x2b')](_0x1714c1[_0xac2d('0x28')],_0x1714c1[_0xac2d('0x2a')]);_0x543f93[_0xac2d('0x2c')]=_[_0xac2d('0x2b')](_0x1714c1['model'],qs[_0xac2d('0x2d')](_0x2323c8[_0xac2d('0x2a')]['fields']));_0x543f93[_0xac2d('0x2c')]=_0x543f93[_0xac2d('0x2c')][_0xac2d('0x2e')]?_0x543f93[_0xac2d('0x2c')]:_0x1714c1['model'];if(!_0x2323c8[_0xac2d('0x2a')]['hasOwnProperty'](_0xac2d('0x2f'))){_0x543f93[_0xac2d('0x30')]=qs['limit'](_0x2323c8[_0xac2d('0x2a')][_0xac2d('0x30')]);_0x543f93[_0xac2d('0x1a')]=qs[_0xac2d('0x1a')](_0x2323c8[_0xac2d('0x2a')]['offset']);}_0x543f93[_0xac2d('0x31')]=qs['sort'](_0x2323c8[_0xac2d('0x2a')]['sort']);_0x543f93[_0xac2d('0x32')]=qs[_0xac2d('0x33')](_['pick'](_0x2323c8['query'],_0x1714c1[_0xac2d('0x33')]));if(_0x2323c8[_0xac2d('0x2a')][_0xac2d('0x34')]){_0x543f93[_0xac2d('0x32')]=_[_0xac2d('0x35')](_0x543f93[_0xac2d('0x32')],{'$or':_[_0xac2d('0x36')](_0x2ad9b1,function(_0x5406a7){if(_0x5406a7[_0xac2d('0x37')][_0xac2d('0x38')]!==_0xac2d('0x39')){var _0x288dc0={};_0x288dc0[_0x5406a7[_0xac2d('0x3a')]]={'$like':'%'+_0x2323c8['query'][_0xac2d('0x34')]+'%'};return _0x288dc0;}})});}_0x543f93=_[_0xac2d('0x35')]({},_0x543f93,_0x2323c8[_0xac2d('0x3b')]);var _0x1e7577={'where':_0x543f93[_0xac2d('0x32')]};return db[_0xac2d('0x26')][_0xac2d('0x3c')](_0x1e7577)[_0xac2d('0x1f')](function(_0x262449){_0x1c69f1[_0xac2d('0x3c')]=_0x262449;if(_0x2323c8['query'][_0xac2d('0x3d')]){_0x543f93['include']=[{'all':!![]}];}return db[_0xac2d('0x26')][_0xac2d('0x3e')](_0x543f93);})[_0xac2d('0x1f')](function(_0x3eb15a){_0x1c69f1[_0xac2d('0x3f')]=_0x3eb15a;return _0x1c69f1;})['then'](respondWithFilteredResult(_0x563f19,_0x543f93))[_0xac2d('0x40')](handleError(_0x563f19,null));};exports[_0xac2d('0x41')]=function(_0x247072,_0x877153){var _0x2cbc7b={'raw':!![],'where':{'id':_0x247072['params']['id']}},_0x5badbf={};_0x5badbf['model']=_[_0xac2d('0x29')](db[_0xac2d('0x26')][_0xac2d('0x27')]);_0x5badbf[_0xac2d('0x2a')]=_[_0xac2d('0x29')](_0x247072['query']);_0x5badbf[_0xac2d('0x33')]=_[_0xac2d('0x2b')](_0x5badbf['model'],_0x5badbf[_0xac2d('0x2a')]);_0x2cbc7b[_0xac2d('0x2c')]=_[_0xac2d('0x2b')](_0x5badbf[_0xac2d('0x28')],qs[_0xac2d('0x2d')](_0x247072['query'][_0xac2d('0x2d')]));_0x2cbc7b[_0xac2d('0x2c')]=_0x2cbc7b[_0xac2d('0x2c')][_0xac2d('0x2e')]?_0x2cbc7b['attributes']:_0x5badbf['model'];if(_0x247072[_0xac2d('0x2a')]['includeAll']){_0x2cbc7b[_0xac2d('0x42')]=[{'all':!![]}];}_0x2cbc7b=_[_0xac2d('0x35')]({},_0x2cbc7b,_0x247072['options']);return db['JscriptyQuestionReport'][_0xac2d('0x43')](_0x2cbc7b)['then'](handleEntityNotFound(_0x877153,null))['then'](respondWithResult(_0x877153,null))['catch'](handleError(_0x877153,null));};exports[_0xac2d('0x44')]=function(_0x315aef,_0x3fe2b6){return db['JscriptyQuestionReport'][_0xac2d('0x44')](_0x315aef['body'],{})[_0xac2d('0x1f')](respondWithResult(_0x3fe2b6,0xc9))[_0xac2d('0x40')](handleError(_0x3fe2b6,null));};exports['update']=function(_0x43e90d,_0x2260ab){if(_0x43e90d[_0xac2d('0x45')]['id']){delete _0x43e90d[_0xac2d('0x45')]['id'];}return db[_0xac2d('0x26')]['find']({'where':{'id':_0x43e90d[_0xac2d('0x46')]['id']}})[_0xac2d('0x1f')](handleEntityNotFound(_0x2260ab,null))['then'](saveUpdates(_0x43e90d[_0xac2d('0x45')],null))['then'](respondWithResult(_0x2260ab,null))['catch'](handleError(_0x2260ab,null));};exports[_0xac2d('0x20')]=function(_0x298bfa,_0x5edfa6){return db[_0xac2d('0x26')][_0xac2d('0x43')]({'where':{'id':_0x298bfa[_0xac2d('0x46')]['id']}})[_0xac2d('0x1f')](handleEntityNotFound(_0x5edfa6,null))[_0xac2d('0x1f')](removeEntity(_0x5edfa6,null))[_0xac2d('0x40')](handleError(_0x5edfa6,null));};exports[_0xac2d('0x47')]=function(_0x57bf66,_0x1975fb){return db[_0xac2d('0x26')]['describe']()[_0xac2d('0x1f')](respondWithResult(_0x1975fb,null))[_0xac2d('0x40')](handleError(_0x1975fb,null));};
\ No newline at end of file
+var _0x6b20=['path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','apply','reject','save','update','then','destroy','stack','name','send','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','filter','merge','where','map','type','key','VIRTUAL','field','count','includeAll','include','JscriptyQuestionReport','findAll','rows','catch','show','options','create','body','find','params','describe','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','util'];(function(_0x400e2c,_0x50ddcf){var _0x2e8b4d=function(_0x3e5d34){while(--_0x3e5d34){_0x400e2c['push'](_0x400e2c['shift']());}};_0x2e8b4d(++_0x50ddcf);}(_0x6b20,0xd1));var _0x06b2=function(_0x3ed673,_0x22026c){_0x3ed673=_0x3ed673-0x0;var _0x1f9658=_0x6b20[_0x3ed673];return _0x1f9658;};'use strict';var pdf=require(_0x06b2('0x0'));var emlformat=require(_0x06b2('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x06b2('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x06b2('0x3'));var moment=require(_0x06b2('0x4'));var BPromise=require(_0x06b2('0x5'));var Mustache=require('mustache');var util=require(_0x06b2('0x6'));var path=require(_0x06b2('0x7'));var sox=require(_0x06b2('0x8'));var csv=require(_0x06b2('0x9'));var ejs=require(_0x06b2('0xa'));var fs=require('fs');var _=require(_0x06b2('0xb'));var squel=require(_0x06b2('0xc'));var crypto=require('crypto');var jsforce=require(_0x06b2('0xd'));var deskjs=require(_0x06b2('0xe'));var toCsv=require(_0x06b2('0x9'));var querystring=require('querystring');var Papa=require(_0x06b2('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0x06b2('0x10'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x06b2('0x11'))(_0x06b2('0x12'));var utils=require('../../config/utils');var config=require(_0x06b2('0x13'));var db=require(_0x06b2('0x14'))['db'];function respondWithStatusCode(_0x3fa17b,_0x368889){_0x368889=_0x368889||0xcc;return function(_0x44a9b4){if(_0x44a9b4){return _0x3fa17b[_0x06b2('0x15')](_0x368889);}return _0x3fa17b[_0x06b2('0x16')](_0x368889)[_0x06b2('0x17')]();};}function respondWithResult(_0x265c36,_0x28f9f3){_0x28f9f3=_0x28f9f3||0xc8;return function(_0xa81f11){if(_0xa81f11){return _0x265c36[_0x06b2('0x16')](_0x28f9f3)[_0x06b2('0x18')](_0xa81f11);}};}function respondWithFilteredResult(_0x544de8,_0x325cde){return function(_0xaee98c){if(_0xaee98c){var _0x47496c=_0xaee98c['count'],_0x3830e9=_0x325cde[_0x06b2('0x19')],_0xef0466=_0x325cde[_0x06b2('0x19')]+_0x325cde['limit'],_0x45d5c5;if(_0xef0466>=_0x47496c){_0xef0466=_0x47496c;_0x45d5c5=0xc8;}else{_0x45d5c5=0xce;}_0x544de8[_0x06b2('0x16')](_0x45d5c5);return _0x544de8['set']('Content-Range',_0x3830e9+'-'+_0xef0466+'/'+_0x47496c)[_0x06b2('0x18')](_0xaee98c);}return null;};}function patchUpdates(_0x1b4ab0){return function(_0x27852e){try{jsonpatch[_0x06b2('0x1a')](_0x27852e,_0x1b4ab0,!![]);}catch(_0x4c4e21){return BPromise[_0x06b2('0x1b')](_0x4c4e21);}return _0x27852e[_0x06b2('0x1c')]();};}function saveUpdates(_0x18f55b,_0x465325){return function(_0xe28985){if(_0xe28985){return _0xe28985[_0x06b2('0x1d')](_0x18f55b)[_0x06b2('0x1e')](function(_0x5ca622){return _0x5ca622;});}return null;};}function removeEntity(_0x18c9a9,_0x290840){return function(_0xb05f65){if(_0xb05f65){return _0xb05f65[_0x06b2('0x1f')]()['then'](function(){_0x18c9a9['status'](0xcc)[_0x06b2('0x17')]();});}};}function handleEntityNotFound(_0xb5231e,_0x4fc95f){return function(_0x39659f){if(!_0x39659f){_0xb5231e['sendStatus'](0x194);}return _0x39659f;};}function handleError(_0x3d58c6,_0x38987b){_0x38987b=_0x38987b||0x1f4;return function(_0x2a0645){logger['error'](_0x2a0645[_0x06b2('0x20')]);if(_0x2a0645[_0x06b2('0x21')]){delete _0x2a0645[_0x06b2('0x21')];}_0x3d58c6[_0x06b2('0x16')](_0x38987b)[_0x06b2('0x22')](_0x2a0645);};}exports['index']=function(_0xbb00ea,_0x34370b){var _0x40a73f={},_0x1a99c1={},_0x1976ac={'count':0x0,'rows':[]};var _0x3e7cd4=db['JscriptyQuestionReport'][_0x06b2('0x23')];_0x1a99c1[_0x06b2('0x24')]=_[_0x06b2('0x25')](_0x3e7cd4);_0x1a99c1[_0x06b2('0x26')]=_[_0x06b2('0x25')](_0xbb00ea[_0x06b2('0x26')]);_0x1a99c1[_0x06b2('0x27')]=_['intersection'](_0x1a99c1[_0x06b2('0x24')],_0x1a99c1[_0x06b2('0x26')]);_0x40a73f[_0x06b2('0x28')]=_[_0x06b2('0x29')](_0x1a99c1[_0x06b2('0x24')],qs[_0x06b2('0x2a')](_0xbb00ea[_0x06b2('0x26')][_0x06b2('0x2a')]));_0x40a73f['attributes']=_0x40a73f[_0x06b2('0x28')][_0x06b2('0x2b')]?_0x40a73f[_0x06b2('0x28')]:_0x1a99c1[_0x06b2('0x24')];if(!_0xbb00ea[_0x06b2('0x26')][_0x06b2('0x2c')](_0x06b2('0x2d'))){_0x40a73f['limit']=qs['limit'](_0xbb00ea[_0x06b2('0x26')][_0x06b2('0x2e')]);_0x40a73f[_0x06b2('0x19')]=qs['offset'](_0xbb00ea[_0x06b2('0x26')][_0x06b2('0x19')]);}_0x40a73f[_0x06b2('0x2f')]=qs[_0x06b2('0x30')](_0xbb00ea[_0x06b2('0x26')][_0x06b2('0x30')]);_0x40a73f['where']=qs[_0x06b2('0x27')](_[_0x06b2('0x31')](_0xbb00ea[_0x06b2('0x26')],_0x1a99c1['filters']));if(_0xbb00ea[_0x06b2('0x26')][_0x06b2('0x32')]){_0x40a73f['where']=_[_0x06b2('0x33')](_0x40a73f[_0x06b2('0x34')],{'$or':_[_0x06b2('0x35')](_0x3e7cd4,function(_0xdb75cb){if(_0xdb75cb[_0x06b2('0x36')][_0x06b2('0x37')]!==_0x06b2('0x38')){var _0x282424={};_0x282424[_0xdb75cb[_0x06b2('0x39')]]={'$like':'%'+_0xbb00ea[_0x06b2('0x26')][_0x06b2('0x32')]+'%'};return _0x282424;}})});}_0x40a73f=_[_0x06b2('0x33')]({},_0x40a73f,_0xbb00ea['options']);var _0x3e9bc0={'where':_0x40a73f['where']};return db['JscriptyQuestionReport'][_0x06b2('0x3a')](_0x3e9bc0)['then'](function(_0x26ab14){_0x1976ac['count']=_0x26ab14;if(_0xbb00ea[_0x06b2('0x26')][_0x06b2('0x3b')]){_0x40a73f[_0x06b2('0x3c')]=[{'all':!![]}];}return db[_0x06b2('0x3d')][_0x06b2('0x3e')](_0x40a73f);})['then'](function(_0x404eab){_0x1976ac[_0x06b2('0x3f')]=_0x404eab;return _0x1976ac;})[_0x06b2('0x1e')](respondWithFilteredResult(_0x34370b,_0x40a73f))[_0x06b2('0x40')](handleError(_0x34370b,null));};exports[_0x06b2('0x41')]=function(_0x39fd60,_0x5f2549){var _0x1250b0={'raw':!![],'where':{'id':_0x39fd60['params']['id']}},_0x41e74e={};_0x41e74e['model']=_[_0x06b2('0x25')](db[_0x06b2('0x3d')][_0x06b2('0x23')]);_0x41e74e[_0x06b2('0x26')]=_[_0x06b2('0x25')](_0x39fd60[_0x06b2('0x26')]);_0x41e74e[_0x06b2('0x27')]=_[_0x06b2('0x29')](_0x41e74e[_0x06b2('0x24')],_0x41e74e[_0x06b2('0x26')]);_0x1250b0[_0x06b2('0x28')]=_[_0x06b2('0x29')](_0x41e74e[_0x06b2('0x24')],qs[_0x06b2('0x2a')](_0x39fd60[_0x06b2('0x26')][_0x06b2('0x2a')]));_0x1250b0[_0x06b2('0x28')]=_0x1250b0[_0x06b2('0x28')][_0x06b2('0x2b')]?_0x1250b0['attributes']:_0x41e74e[_0x06b2('0x24')];if(_0x39fd60[_0x06b2('0x26')][_0x06b2('0x3b')]){_0x1250b0[_0x06b2('0x3c')]=[{'all':!![]}];}_0x1250b0=_['merge']({},_0x1250b0,_0x39fd60[_0x06b2('0x42')]);return db[_0x06b2('0x3d')]['find'](_0x1250b0)[_0x06b2('0x1e')](handleEntityNotFound(_0x5f2549,null))[_0x06b2('0x1e')](respondWithResult(_0x5f2549,null))['catch'](handleError(_0x5f2549,null));};exports[_0x06b2('0x43')]=function(_0xf342f9,_0x59ff51){return db['JscriptyQuestionReport']['create'](_0xf342f9[_0x06b2('0x44')],{})[_0x06b2('0x1e')](respondWithResult(_0x59ff51,0xc9))[_0x06b2('0x40')](handleError(_0x59ff51,null));};exports[_0x06b2('0x1d')]=function(_0x1cbb02,_0x559c5a){if(_0x1cbb02['body']['id']){delete _0x1cbb02[_0x06b2('0x44')]['id'];}return db[_0x06b2('0x3d')][_0x06b2('0x45')]({'where':{'id':_0x1cbb02[_0x06b2('0x46')]['id']}})[_0x06b2('0x1e')](handleEntityNotFound(_0x559c5a,null))[_0x06b2('0x1e')](saveUpdates(_0x1cbb02['body'],null))[_0x06b2('0x1e')](respondWithResult(_0x559c5a,null))[_0x06b2('0x40')](handleError(_0x559c5a,null));};exports[_0x06b2('0x1f')]=function(_0x33f72e,_0x146c5c){return db[_0x06b2('0x3d')]['find']({'where':{'id':_0x33f72e[_0x06b2('0x46')]['id']}})[_0x06b2('0x1e')](handleEntityNotFound(_0x146c5c,null))[_0x06b2('0x1e')](removeEntity(_0x146c5c,null))[_0x06b2('0x40')](handleError(_0x146c5c,null));};exports['describe']=function(_0x281acc,_0x17d138){return db[_0x06b2('0x3d')][_0x06b2('0x47')]()['then'](respondWithResult(_0x17d138,null))[_0x06b2('0x40')](handleError(_0x17d138,null));};
\ No newline at end of file
index 4adb713..7ac3104 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf99c=['lodash','util','../../config/logger','api','moment','bluebird','request-promise','./jscriptyQuestionReport.attributes','exports','JscriptyQuestionReport','report_jscripty_questions'];(function(_0x4baf97,_0x2681f8){var _0x56bfd2=function(_0x247a65){while(--_0x247a65){_0x4baf97['push'](_0x4baf97['shift']());}};_0x56bfd2(++_0x2681f8);}(_0xf99c,0x129));var _0xcf99=function(_0x26a5ce,_0x353b4d){_0x26a5ce=_0x26a5ce-0x0;var _0xf2cf16=_0xf99c[_0x26a5ce];return _0xf2cf16;};'use strict';var _=require(_0xcf99('0x0'));var util=require(_0xcf99('0x1'));var logger=require(_0xcf99('0x2'))(_0xcf99('0x3'));var moment=require(_0xcf99('0x4'));var BPromise=require(_0xcf99('0x5'));var rp=require(_0xcf99('0x6'));var attributes=require(_0xcf99('0x7'));module[_0xcf99('0x8')]=function(_0x11649a,_0x717d61){return _0x11649a['define'](_0xcf99('0x9'),attributes,{'tableName':_0xcf99('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x14a0=['api','moment','bluebird','request-promise','./jscriptyQuestionReport.attributes','define','JscriptyQuestionReport','util','../../config/logger'];(function(_0x2d10a9,_0x202fff){var _0xa841a3=function(_0x4e94ef){while(--_0x4e94ef){_0x2d10a9['push'](_0x2d10a9['shift']());}};_0xa841a3(++_0x202fff);}(_0x14a0,0x8e));var _0x014a=function(_0x2ccbf4,_0x3d3d2f){_0x2ccbf4=_0x2ccbf4-0x0;var _0x2841af=_0x14a0[_0x2ccbf4];return _0x2841af;};'use strict';var _=require('lodash');var util=require(_0x014a('0x0'));var logger=require(_0x014a('0x1'))(_0x014a('0x2'));var moment=require(_0x014a('0x3'));var BPromise=require(_0x014a('0x4'));var rp=require(_0x014a('0x5'));var attributes=require(_0x014a('0x6'));module['exports']=function(_0x57a522,_0x1730a5){return _0x57a522[_0x014a('0x7')](_0x014a('0x8'),attributes,{'tableName':'report_jscripty_questions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 25e0415..57798c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf6e=['message','result','catch','lodash','util','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','JscriptyQuestionReport,\x20%s,\x20%s','request\x20sent','JscriptyQuestionReport,\x20%s,\x20%s,\x20%s','error','code'];(function(_0x12bfbe,_0x23e8ed){var _0x12bf33=function(_0x4f336c){while(--_0x4f336c){_0x12bfbe['push'](_0x12bfbe['shift']());}};_0x12bf33(++_0x23e8ed);}(_0xbf6e,0x8d));var _0xebf6=function(_0x445175,_0x49ee96){_0x445175=_0x445175-0x0;var _0x559740=_0xbf6e[_0x445175];return _0x559740;};'use strict';var _=require(_0xebf6('0x0'));var util=require(_0xebf6('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0xebf6('0x2'));var fs=require('fs');var Redis=require(_0xebf6('0x3'));var db=require(_0xebf6('0x4'))['db'];var utils=require(_0xebf6('0x5'));var logger=require(_0xebf6('0x6'))(_0xebf6('0x7'));var config=require(_0xebf6('0x8'));var jayson=require(_0xebf6('0x9'));var client=jayson[_0xebf6('0xa')][_0xebf6('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x341a27,_0x309835,_0x55bf9f){return new BPromise(function(_0x43fb40,_0x2c7607){return client[_0xebf6('0xc')](_0x341a27,_0x55bf9f)[_0xebf6('0xd')](function(_0x2f7c77){logger[_0xebf6('0xe')](_0xebf6('0xf'),_0x309835,_0xebf6('0x10'));logger['debug'](_0xebf6('0x11'),_0x309835,'request\x20sent',JSON['stringify'](_0x2f7c77));if(_0x2f7c77[_0xebf6('0x12')]){if(_0x2f7c77[_0xebf6('0x12')][_0xebf6('0x13')]===0x1f4){logger['error'](_0xebf6('0xf'),_0x309835,_0x2f7c77[_0xebf6('0x12')]['message']);return _0x2c7607(_0x2f7c77[_0xebf6('0x12')][_0xebf6('0x14')]);}logger['error'](_0xebf6('0xf'),_0x309835,_0x2f7c77['error'][_0xebf6('0x14')]);return _0x43fb40(_0x2f7c77['error'][_0xebf6('0x14')]);}else{logger['info'](_0xebf6('0xf'),_0x309835,_0xebf6('0x10'));_0x43fb40(_0x2f7c77[_0xebf6('0x15')][_0xebf6('0x14')]);}})[_0xebf6('0x16')](function(_0x5995f3){logger[_0xebf6('0x12')]('JscriptyQuestionReport,\x20%s,\x20%s',_0x309835,_0x5995f3);_0x2c7607(_0x5995f3);});});}
\ No newline at end of file
+var _0x6f93=['debug','JscriptyQuestionReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','client','request','JscriptyQuestionReport,\x20%s,\x20%s','request\x20sent'];(function(_0x142795,_0x596fee){var _0x5b7bf1=function(_0xe857d4){while(--_0xe857d4){_0x142795['push'](_0x142795['shift']());}};_0x5b7bf1(++_0x596fee);}(_0x6f93,0x93));var _0x36f9=function(_0x31f767,_0x5a49bf){_0x31f767=_0x31f767-0x0;var _0x13b27c=_0x6f93[_0x31f767];return _0x13b27c;};'use strict';var _=require(_0x36f9('0x0'));var util=require(_0x36f9('0x1'));var moment=require(_0x36f9('0x2'));var BPromise=require(_0x36f9('0x3'));var rs=require(_0x36f9('0x4'));var fs=require('fs');var Redis=require(_0x36f9('0x5'));var db=require(_0x36f9('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x36f9('0x7'))(_0x36f9('0x8'));var config=require('../../config/environment');var jayson=require(_0x36f9('0x9'));var client=jayson[_0x36f9('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2013bc,_0x52ebca,_0x1f021a){return new BPromise(function(_0xe0c5ae,_0x4b781a){return client[_0x36f9('0xb')](_0x2013bc,_0x1f021a)['then'](function(_0x52f84a){logger['info'](_0x36f9('0xc'),_0x52ebca,_0x36f9('0xd'));logger[_0x36f9('0xe')](_0x36f9('0xf'),_0x52ebca,'request\x20sent',JSON[_0x36f9('0x10')](_0x52f84a));if(_0x52f84a['error']){if(_0x52f84a[_0x36f9('0x11')][_0x36f9('0x12')]===0x1f4){logger[_0x36f9('0x11')](_0x36f9('0xc'),_0x52ebca,_0x52f84a['error'][_0x36f9('0x13')]);return _0x4b781a(_0x52f84a[_0x36f9('0x11')][_0x36f9('0x13')]);}logger[_0x36f9('0x11')](_0x36f9('0xc'),_0x52ebca,_0x52f84a[_0x36f9('0x11')][_0x36f9('0x13')]);return _0xe0c5ae(_0x52f84a[_0x36f9('0x11')][_0x36f9('0x13')]);}else{logger[_0x36f9('0x14')]('JscriptyQuestionReport,\x20%s,\x20%s',_0x52ebca,_0x36f9('0xd'));_0xe0c5ae(_0x52f84a[_0x36f9('0x15')]['message']);}})[_0x36f9('0x16')](function(_0x386d59){logger[_0x36f9('0x11')]('JscriptyQuestionReport,\x20%s,\x20%s',_0x52ebca,_0x386d59);_0x4b781a(_0x386d59);});});}
\ No newline at end of file
index 14e09ae..73d89de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa924=['express','Router','../../components/auth/service','../../components/interaction/service','./jscriptySessionReport.controller','get','isAuthenticated','/describe','describe','/:id','show','/:id/questions','getQuestions','post','create','put','delete','exports','multer','path','connect-timeout'];(function(_0x1fbb62,_0x46d272){var _0x317783=function(_0x4629d3){while(--_0x4629d3){_0x1fbb62['push'](_0x1fbb62['shift']());}};_0x317783(++_0x46d272);}(_0xa924,0x1e0));var _0x4a92=function(_0x1a36a5,_0x746928){_0x1a36a5=_0x1a36a5-0x0;var _0x746243=_0xa924[_0x1a36a5];return _0x746243;};'use strict';var multer=require(_0x4a92('0x0'));var util=require('util');var path=require(_0x4a92('0x1'));var timeout=require(_0x4a92('0x2'));var express=require(_0x4a92('0x3'));var router=express[_0x4a92('0x4')]();var auth=require(_0x4a92('0x5'));var interaction=require(_0x4a92('0x6'));var config=require('../../config/environment');var controller=require(_0x4a92('0x7'));router[_0x4a92('0x8')]('/',auth[_0x4a92('0x9')](),controller['index']);router[_0x4a92('0x8')](_0x4a92('0xa'),auth['isAuthenticated'](),controller[_0x4a92('0xb')]);router[_0x4a92('0x8')](_0x4a92('0xc'),auth[_0x4a92('0x9')](),controller[_0x4a92('0xd')]);router['get'](_0x4a92('0xe'),auth[_0x4a92('0x9')](),controller[_0x4a92('0xf')]);router[_0x4a92('0x10')]('/',auth[_0x4a92('0x9')](),controller[_0x4a92('0x11')]);router[_0x4a92('0x12')](_0x4a92('0xc'),auth[_0x4a92('0x9')](),controller['update']);router[_0x4a92('0x13')]('/:id',auth[_0x4a92('0x9')](),controller['destroy']);module[_0x4a92('0x14')]=router;
\ No newline at end of file
+var _0xa690=['multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./jscriptySessionReport.controller','get','isAuthenticated','describe','/:id','show','put','delete','exports'];(function(_0x1fb24f,_0x950f97){var _0x2a5fb1=function(_0x3295da){while(--_0x3295da){_0x1fb24f['push'](_0x1fb24f['shift']());}};_0x2a5fb1(++_0x950f97);}(_0xa690,0x99));var _0x0a69=function(_0x2405bc,_0x2f28a1){_0x2405bc=_0x2405bc-0x0;var _0x5272d4=_0xa690[_0x2405bc];return _0x5272d4;};'use strict';var multer=require(_0x0a69('0x0'));var util=require(_0x0a69('0x1'));var path=require(_0x0a69('0x2'));var timeout=require('connect-timeout');var express=require(_0x0a69('0x3'));var router=express[_0x0a69('0x4')]();var auth=require(_0x0a69('0x5'));var interaction=require(_0x0a69('0x6'));var config=require(_0x0a69('0x7'));var controller=require(_0x0a69('0x8'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x0a69('0x9')]('/describe',auth[_0x0a69('0xa')](),controller[_0x0a69('0xb')]);router[_0x0a69('0x9')](_0x0a69('0xc'),auth['isAuthenticated'](),controller[_0x0a69('0xd')]);router['get']('/:id/questions',auth[_0x0a69('0xa')](),controller['getQuestions']);router['post']('/',auth[_0x0a69('0xa')](),controller['create']);router[_0x0a69('0xe')]('/:id',auth[_0x0a69('0xa')](),controller['update']);router[_0x0a69('0xf')](_0x0a69('0xc'),auth[_0x0a69('0xa')](),controller['destroy']);module[_0x0a69('0x10')]=router;
\ No newline at end of file
index 3b48013..20bdc79 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f8b=['YYYY-MM-DD\x20HH:mm:ss','STRING','BOOLEAN','moment','exports','DATE','setDataValue','format'];(function(_0x3ee7c8,_0x3f4837){var _0x4226ab=function(_0x3fafbf){while(--_0x3fafbf){_0x3ee7c8['push'](_0x3ee7c8['shift']());}};_0x4226ab(++_0x3f4837);}(_0x6f8b,0x1b3));var _0xb6f8=function(_0x35962c,_0x6cc693){_0x35962c=_0x35962c-0x0;var _0x46df70=_0x6f8b[_0x35962c];return _0x46df70;};'use strict';var moment=require(_0xb6f8('0x0'));var Sequelize=require('sequelize');module[_0xb6f8('0x1')]={'starttime':{'type':Sequelize[_0xb6f8('0x2')],'set':function(_0x48d849){this[_0xb6f8('0x3')]('starttime',_0x48d849);this[_0xb6f8('0x3')]('endtime',moment()[_0xb6f8('0x4')](_0xb6f8('0x5')));}},'endtime':{'type':Sequelize[_0xb6f8('0x2')]},'membername':{'type':Sequelize[_0xb6f8('0x6')]},'projectname':{'type':Sequelize[_0xb6f8('0x6')]},'queue':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0xb6f8('0x6')]},'calleridname':{'type':Sequelize[_0xb6f8('0x6')]},'calleridnum':{'type':Sequelize[_0xb6f8('0x6')]},'completed':{'type':Sequelize[_0xb6f8('0x7')],'defaultValue':![]}};
\ No newline at end of file
+var _0xe260=['setDataValue','starttime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','STRING','moment','sequelize','exports','DATE'];(function(_0x342baa,_0x4a110f){var _0x1208f3=function(_0x56a645){while(--_0x56a645){_0x342baa['push'](_0x342baa['shift']());}};_0x1208f3(++_0x4a110f);}(_0xe260,0xb0));var _0x0e26=function(_0x2c43d8,_0x41319e){_0x2c43d8=_0x2c43d8-0x0;var _0x55ee80=_0xe260[_0x2c43d8];return _0x55ee80;};'use strict';var moment=require(_0x0e26('0x0'));var Sequelize=require(_0x0e26('0x1'));module[_0x0e26('0x2')]={'starttime':{'type':Sequelize[_0x0e26('0x3')],'set':function(_0x4d1993){this[_0x0e26('0x4')](_0x0e26('0x5'),_0x4d1993);this[_0x0e26('0x4')](_0x0e26('0x6'),moment()[_0x0e26('0x7')](_0x0e26('0x8')));}},'endtime':{'type':Sequelize[_0x0e26('0x3')]},'membername':{'type':Sequelize[_0x0e26('0x9')]},'projectname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize[_0x0e26('0x9')]},'uniqueid':{'type':Sequelize[_0x0e26('0x9')]},'calleridname':{'type':Sequelize[_0x0e26('0x9')]},'calleridnum':{'type':Sequelize['STRING']},'completed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index ec45f8c..23e06de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x20b4=['nolimit','limit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','show','params','keys','include','create','body','find','describe','findOne','JscriptyQuestionReport','pick','SessionId','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','../../config/license/hardware','ioredis','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','Content-Range','reject','save','update','destroy','then','error','stack','name','send','index','JscriptySessionReport','rawAttributes','model','query','filters','intersection','attributes','fields','length','hasOwnProperty'];(function(_0x391b2c,_0x1e1081){var _0x160ce5=function(_0x4126f8){while(--_0x4126f8){_0x391b2c['push'](_0x391b2c['shift']());}};_0x160ce5(++_0x1e1081);}(_0x20b4,0x1a8));var _0x420b=function(_0x27d66e,_0x114031){_0x27d66e=_0x27d66e-0x0;var _0x4211f0=_0x20b4[_0x27d66e];return _0x4211f0;};'use strict';var pdf=require(_0x420b('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x420b('0x1'));var zipdir=require(_0x420b('0x2'));var jsonpatch=require(_0x420b('0x3'));var rp=require(_0x420b('0x4'));var moment=require(_0x420b('0x5'));var BPromise=require(_0x420b('0x6'));var Mustache=require(_0x420b('0x7'));var util=require(_0x420b('0x8'));var path=require(_0x420b('0x9'));var sox=require(_0x420b('0xa'));var csv=require('to-csv');var ejs=require(_0x420b('0xb'));var fs=require('fs');var _=require(_0x420b('0xc'));var squel=require(_0x420b('0xd'));var crypto=require(_0x420b('0xe'));var jsforce=require(_0x420b('0xf'));var deskjs=require(_0x420b('0x10'));var toCsv=require(_0x420b('0x11'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x420b('0x12'));var Redis=require(_0x420b('0x13'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x420b('0x14'));var utils=require(_0x420b('0x15'));var config=require(_0x420b('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xde1647,_0x26af60){_0x26af60=_0x26af60||0xcc;return function(_0x93da44){if(_0x93da44){return _0xde1647[_0x420b('0x17')](_0x26af60);}return _0xde1647[_0x420b('0x18')](_0x26af60)[_0x420b('0x19')]();};}function respondWithResult(_0x3c23e6,_0x427eac){_0x427eac=_0x427eac||0xc8;return function(_0x555e56){if(_0x555e56){return _0x3c23e6[_0x420b('0x18')](_0x427eac)[_0x420b('0x1a')](_0x555e56);}};}function respondWithFilteredResult(_0xbcd2ac,_0x3918d4){return function(_0x5ef289){if(_0x5ef289){var _0x3e09a0=_0x5ef289[_0x420b('0x1b')],_0x202278=_0x3918d4[_0x420b('0x1c')],_0x2c1028=_0x3918d4['offset']+_0x3918d4['limit'],_0xe6346b;if(_0x2c1028>=_0x3e09a0){_0x2c1028=_0x3e09a0;_0xe6346b=0xc8;}else{_0xe6346b=0xce;}_0xbcd2ac[_0x420b('0x18')](_0xe6346b);return _0xbcd2ac['set'](_0x420b('0x1d'),_0x202278+'-'+_0x2c1028+'/'+_0x3e09a0)[_0x420b('0x1a')](_0x5ef289);}return null;};}function patchUpdates(_0x3d35e3){return function(_0x54761b){try{jsonpatch['apply'](_0x54761b,_0x3d35e3,!![]);}catch(_0x4cd79d){return BPromise[_0x420b('0x1e')](_0x4cd79d);}return _0x54761b[_0x420b('0x1f')]();};}function saveUpdates(_0x1c7525,_0x35bdd0){return function(_0x48841d){if(_0x48841d){return _0x48841d[_0x420b('0x20')](_0x1c7525)['then'](function(_0x3ff543){return _0x3ff543;});}return null;};}function removeEntity(_0x5efbab,_0x5aa99b){return function(_0x3441df){if(_0x3441df){return _0x3441df[_0x420b('0x21')]()[_0x420b('0x22')](function(){_0x5efbab[_0x420b('0x18')](0xcc)[_0x420b('0x19')]();});}};}function handleEntityNotFound(_0x4b0772,_0x531eef){return function(_0x234cbf){if(!_0x234cbf){_0x4b0772[_0x420b('0x17')](0x194);}return _0x234cbf;};}function handleError(_0x51081a,_0x504c74){_0x504c74=_0x504c74||0x1f4;return function(_0x1bc3cf){logger[_0x420b('0x23')](_0x1bc3cf[_0x420b('0x24')]);if(_0x1bc3cf[_0x420b('0x25')]){delete _0x1bc3cf[_0x420b('0x25')];}_0x51081a[_0x420b('0x18')](_0x504c74)[_0x420b('0x26')](_0x1bc3cf);};}exports[_0x420b('0x27')]=function(_0x34a1d8,_0x49ea67){var _0x3e495a={},_0x5d0807={},_0x22a737={'count':0x0,'rows':[]};var _0x538160=db[_0x420b('0x28')][_0x420b('0x29')];_0x5d0807[_0x420b('0x2a')]=_['keys'](_0x538160);_0x5d0807[_0x420b('0x2b')]=_['keys'](_0x34a1d8[_0x420b('0x2b')]);_0x5d0807[_0x420b('0x2c')]=_[_0x420b('0x2d')](_0x5d0807[_0x420b('0x2a')],_0x5d0807[_0x420b('0x2b')]);_0x3e495a[_0x420b('0x2e')]=_[_0x420b('0x2d')](_0x5d0807['model'],qs[_0x420b('0x2f')](_0x34a1d8[_0x420b('0x2b')]['fields']));_0x3e495a[_0x420b('0x2e')]=_0x3e495a[_0x420b('0x2e')][_0x420b('0x30')]?_0x3e495a['attributes']:_0x5d0807[_0x420b('0x2a')];if(!_0x34a1d8[_0x420b('0x2b')][_0x420b('0x31')](_0x420b('0x32'))){_0x3e495a[_0x420b('0x33')]=qs[_0x420b('0x33')](_0x34a1d8[_0x420b('0x2b')]['limit']);_0x3e495a[_0x420b('0x1c')]=qs[_0x420b('0x1c')](_0x34a1d8[_0x420b('0x2b')][_0x420b('0x1c')]);}_0x3e495a[_0x420b('0x34')]=qs[_0x420b('0x35')](_0x34a1d8['query'][_0x420b('0x35')]);_0x3e495a[_0x420b('0x36')]=qs[_0x420b('0x2c')](_['pick'](_0x34a1d8['query'],_0x5d0807[_0x420b('0x2c')]));if(_0x34a1d8['query'][_0x420b('0x37')]){_0x3e495a[_0x420b('0x36')]=_[_0x420b('0x38')](_0x3e495a[_0x420b('0x36')],{'$or':_[_0x420b('0x39')](_0x538160,function(_0x1b43eb){if(_0x1b43eb[_0x420b('0x3a')][_0x420b('0x3b')]!==_0x420b('0x3c')){var _0x3e5e4e={};_0x3e5e4e[_0x1b43eb[_0x420b('0x3d')]]={'$like':'%'+_0x34a1d8['query'][_0x420b('0x37')]+'%'};return _0x3e5e4e;}})});}_0x3e495a=_['merge']({},_0x3e495a,_0x34a1d8[_0x420b('0x3e')]);var _0x1abc4f={'where':_0x3e495a[_0x420b('0x36')]};return db['JscriptySessionReport'][_0x420b('0x1b')](_0x1abc4f)[_0x420b('0x22')](function(_0x481ecd){_0x22a737[_0x420b('0x1b')]=_0x481ecd;if(_0x34a1d8[_0x420b('0x2b')][_0x420b('0x3f')]){_0x3e495a['include']=[{'all':!![]}];}return db[_0x420b('0x28')][_0x420b('0x40')](_0x3e495a);})[_0x420b('0x22')](function(_0x2f3fd0){_0x22a737[_0x420b('0x41')]=_0x2f3fd0;return _0x22a737;})['then'](respondWithFilteredResult(_0x49ea67,_0x3e495a))[_0x420b('0x42')](handleError(_0x49ea67,null));};exports[_0x420b('0x43')]=function(_0x49e0b0,_0x9b0c47){var _0x1b7e12={'raw':!![],'where':{'id':_0x49e0b0[_0x420b('0x44')]['id']}},_0x44c843={};_0x44c843[_0x420b('0x2a')]=_[_0x420b('0x45')](db[_0x420b('0x28')][_0x420b('0x29')]);_0x44c843[_0x420b('0x2b')]=_[_0x420b('0x45')](_0x49e0b0[_0x420b('0x2b')]);_0x44c843['filters']=_[_0x420b('0x2d')](_0x44c843[_0x420b('0x2a')],_0x44c843[_0x420b('0x2b')]);_0x1b7e12[_0x420b('0x2e')]=_['intersection'](_0x44c843[_0x420b('0x2a')],qs['fields'](_0x49e0b0[_0x420b('0x2b')][_0x420b('0x2f')]));_0x1b7e12[_0x420b('0x2e')]=_0x1b7e12[_0x420b('0x2e')]['length']?_0x1b7e12[_0x420b('0x2e')]:_0x44c843[_0x420b('0x2a')];if(_0x49e0b0[_0x420b('0x2b')][_0x420b('0x3f')]){_0x1b7e12[_0x420b('0x46')]=[{'all':!![]}];}_0x1b7e12=_['merge']({},_0x1b7e12,_0x49e0b0[_0x420b('0x3e')]);return db[_0x420b('0x28')]['find'](_0x1b7e12)[_0x420b('0x22')](handleEntityNotFound(_0x9b0c47,null))[_0x420b('0x22')](respondWithResult(_0x9b0c47,null))['catch'](handleError(_0x9b0c47,null));};exports['create']=function(_0x3078a3,_0x2803f4){return db[_0x420b('0x28')][_0x420b('0x47')](_0x3078a3[_0x420b('0x48')],{})[_0x420b('0x22')](respondWithResult(_0x2803f4,0xc9))[_0x420b('0x42')](handleError(_0x2803f4,null));};exports[_0x420b('0x20')]=function(_0x4c25d6,_0x12c454){if(_0x4c25d6[_0x420b('0x48')]['id']){delete _0x4c25d6[_0x420b('0x48')]['id'];}return db[_0x420b('0x28')][_0x420b('0x49')]({'where':{'id':_0x4c25d6[_0x420b('0x44')]['id']}})[_0x420b('0x22')](handleEntityNotFound(_0x12c454,null))[_0x420b('0x22')](saveUpdates(_0x4c25d6[_0x420b('0x48')],null))['then'](respondWithResult(_0x12c454,null))[_0x420b('0x42')](handleError(_0x12c454,null));};exports[_0x420b('0x21')]=function(_0x3a0c61,_0x21f9bd){return db[_0x420b('0x28')]['find']({'where':{'id':_0x3a0c61[_0x420b('0x44')]['id']}})[_0x420b('0x22')](handleEntityNotFound(_0x21f9bd,null))[_0x420b('0x22')](removeEntity(_0x21f9bd,null))[_0x420b('0x42')](handleError(_0x21f9bd,null));};exports[_0x420b('0x4a')]=function(_0x47fcf8,_0x256881){return db[_0x420b('0x28')][_0x420b('0x4a')]()['then'](respondWithResult(_0x256881,null))[_0x420b('0x42')](handleError(_0x256881,null));};exports['getQuestions']=function(_0x262df5,_0x3a5b38,_0x50bd8f){var _0x12c2f3={'raw':!![],'where':{}};var _0xa7d8d9={};var _0x29440e={'count':0x0,'rows':[]};return db['JscriptySessionReport'][_0x420b('0x4b')]({'where':{'id':_0x262df5[_0x420b('0x44')]['id']}})[_0x420b('0x22')](handleEntityNotFound(_0x3a5b38,null))['then'](function(_0x258af6){if(_0x258af6){_0xa7d8d9['model']=_[_0x420b('0x45')](db[_0x420b('0x4c')][_0x420b('0x29')]);_0xa7d8d9[_0x420b('0x2b')]=_[_0x420b('0x45')](_0x262df5['query']);_0xa7d8d9[_0x420b('0x2c')]=_[_0x420b('0x2d')](_0xa7d8d9[_0x420b('0x2a')],_0xa7d8d9['query']);_0x12c2f3[_0x420b('0x2e')]=_[_0x420b('0x2d')](_0xa7d8d9[_0x420b('0x2a')],qs[_0x420b('0x2f')](_0x262df5[_0x420b('0x2b')]['fields']));_0x12c2f3[_0x420b('0x2e')]=_0x12c2f3[_0x420b('0x2e')][_0x420b('0x30')]?_0x12c2f3[_0x420b('0x2e')]:_0xa7d8d9[_0x420b('0x2a')];if(!_0x262df5[_0x420b('0x2b')][_0x420b('0x31')](_0x420b('0x32'))){_0x12c2f3[_0x420b('0x33')]=qs['limit'](_0x262df5[_0x420b('0x2b')]['limit']);_0x12c2f3['offset']=qs[_0x420b('0x1c')](_0x262df5[_0x420b('0x2b')]['offset']);}_0x12c2f3['order']=qs[_0x420b('0x35')](_0x262df5['query'][_0x420b('0x35')]);_0x12c2f3[_0x420b('0x36')]=qs['filters'](_[_0x420b('0x4d')](_0x262df5['query'],_0xa7d8d9[_0x420b('0x2c')]));_0x12c2f3[_0x420b('0x36')][_0x420b('0x4e')]=_0x258af6['id'];if(_0x262df5[_0x420b('0x2b')][_0x420b('0x37')]){_0x12c2f3['where']=_['merge'](_0x12c2f3[_0x420b('0x36')],{'$or':_[_0x420b('0x39')](_0x12c2f3[_0x420b('0x2e')],function(_0x193cfb){var _0x1c56e9={};_0x1c56e9[_0x193cfb]={'$like':'%'+_0x262df5[_0x420b('0x2b')][_0x420b('0x37')]+'%'};return _0x1c56e9;})});}_0x12c2f3=_[_0x420b('0x38')]({},_0x12c2f3,_0x262df5[_0x420b('0x3e')]);return db['JscriptyQuestionReport']['count']({'where':_0x12c2f3[_0x420b('0x36')]})[_0x420b('0x22')](function(_0x5e9711){_0x29440e[_0x420b('0x1b')]=_0x5e9711;if(_0x262df5[_0x420b('0x2b')][_0x420b('0x3f')]){_0x12c2f3['include']=[{'all':!![]}];}return db[_0x420b('0x4c')][_0x420b('0x40')](_0x12c2f3);})['then'](function(_0x13d6ef){_0x29440e[_0x420b('0x41')]=_0x13d6ef;return _0x29440e;});}})['then'](respondWithFilteredResult(_0x3a5b38,_0x12c2f3))[_0x420b('0x42')](handleError(_0x3a5b38,null));};
\ No newline at end of file
+var _0x9fd6=['then','sendStatus','error','stack','name','send','index','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','offset','order','sort','where','filters','filter','merge','map','key','VIRTUAL','field','options','JscriptySessionReport','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','getQuestions','findOne','JscriptyQuestionReport','SessionId','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','status','end','json','count','limit','set','apply','reject','destroy'];(function(_0x50164d,_0x224ca3){var _0x263c9d=function(_0x29038a){while(--_0x29038a){_0x50164d['push'](_0x50164d['shift']());}};_0x263c9d(++_0x224ca3);}(_0x9fd6,0x117));var _0x69fd=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0x9fd6[_0x4565bf];return _0x5610ba;};'use strict';var pdf=require(_0x69fd('0x0'));var emlformat=require(_0x69fd('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x69fd('0x2'));var jsonpatch=require(_0x69fd('0x3'));var rp=require(_0x69fd('0x4'));var moment=require(_0x69fd('0x5'));var BPromise=require(_0x69fd('0x6'));var Mustache=require(_0x69fd('0x7'));var util=require(_0x69fd('0x8'));var path=require(_0x69fd('0x9'));var sox=require(_0x69fd('0xa'));var csv=require(_0x69fd('0xb'));var ejs=require(_0x69fd('0xc'));var fs=require('fs');var _=require(_0x69fd('0xd'));var squel=require(_0x69fd('0xe'));var crypto=require(_0x69fd('0xf'));var jsforce=require(_0x69fd('0x10'));var deskjs=require('desk.js');var toCsv=require(_0x69fd('0xb'));var querystring=require(_0x69fd('0x11'));var Papa=require('papaparse');var authService=require(_0x69fd('0x12'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x69fd('0x13'));var qs=require(_0x69fd('0x14'));var logger=require(_0x69fd('0x15'))(_0x69fd('0x16'));var utils=require(_0x69fd('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1afb3d,_0x1941b5){_0x1941b5=_0x1941b5||0xcc;return function(_0x2810c7){if(_0x2810c7){return _0x1afb3d['sendStatus'](_0x1941b5);}return _0x1afb3d[_0x69fd('0x18')](_0x1941b5)[_0x69fd('0x19')]();};}function respondWithResult(_0x430251,_0x4af40f){_0x4af40f=_0x4af40f||0xc8;return function(_0x19f40a){if(_0x19f40a){return _0x430251[_0x69fd('0x18')](_0x4af40f)[_0x69fd('0x1a')](_0x19f40a);}};}function respondWithFilteredResult(_0x3fc3ca,_0x46013c){return function(_0x5c991b){if(_0x5c991b){var _0x5c2624=_0x5c991b[_0x69fd('0x1b')],_0x12ec3d=_0x46013c['offset'],_0x11068b=_0x46013c['offset']+_0x46013c[_0x69fd('0x1c')],_0x29812b;if(_0x11068b>=_0x5c2624){_0x11068b=_0x5c2624;_0x29812b=0xc8;}else{_0x29812b=0xce;}_0x3fc3ca['status'](_0x29812b);return _0x3fc3ca[_0x69fd('0x1d')]('Content-Range',_0x12ec3d+'-'+_0x11068b+'/'+_0x5c2624)[_0x69fd('0x1a')](_0x5c991b);}return null;};}function patchUpdates(_0x20707a){return function(_0x42323a){try{jsonpatch[_0x69fd('0x1e')](_0x42323a,_0x20707a,!![]);}catch(_0x310d68){return BPromise[_0x69fd('0x1f')](_0x310d68);}return _0x42323a['save']();};}function saveUpdates(_0x118bfe,_0x4c0e49){return function(_0x42c614){if(_0x42c614){return _0x42c614['update'](_0x118bfe)['then'](function(_0x12e7f6){return _0x12e7f6;});}return null;};}function removeEntity(_0x5067f7,_0x16b2d0){return function(_0x20a2c8){if(_0x20a2c8){return _0x20a2c8[_0x69fd('0x20')]()[_0x69fd('0x21')](function(){_0x5067f7[_0x69fd('0x18')](0xcc)[_0x69fd('0x19')]();});}};}function handleEntityNotFound(_0x157ea8,_0x28df2c){return function(_0x375f74){if(!_0x375f74){_0x157ea8[_0x69fd('0x22')](0x194);}return _0x375f74;};}function handleError(_0x2a8e22,_0x1e81c1){_0x1e81c1=_0x1e81c1||0x1f4;return function(_0x100fe4){logger[_0x69fd('0x23')](_0x100fe4[_0x69fd('0x24')]);if(_0x100fe4[_0x69fd('0x25')]){delete _0x100fe4[_0x69fd('0x25')];}_0x2a8e22[_0x69fd('0x18')](_0x1e81c1)[_0x69fd('0x26')](_0x100fe4);};}exports[_0x69fd('0x27')]=function(_0x4aa9a0,_0x2b1c0e){var _0x2b5f95={},_0x3b7d64={},_0x29463c={'count':0x0,'rows':[]};var _0x31f7f7=db['JscriptySessionReport'][_0x69fd('0x28')];_0x3b7d64[_0x69fd('0x29')]=_[_0x69fd('0x2a')](_0x31f7f7);_0x3b7d64[_0x69fd('0x2b')]=_['keys'](_0x4aa9a0[_0x69fd('0x2b')]);_0x3b7d64['filters']=_[_0x69fd('0x2c')](_0x3b7d64[_0x69fd('0x29')],_0x3b7d64[_0x69fd('0x2b')]);_0x2b5f95[_0x69fd('0x2d')]=_[_0x69fd('0x2c')](_0x3b7d64[_0x69fd('0x29')],qs[_0x69fd('0x2e')](_0x4aa9a0['query'][_0x69fd('0x2e')]));_0x2b5f95[_0x69fd('0x2d')]=_0x2b5f95['attributes'][_0x69fd('0x2f')]?_0x2b5f95[_0x69fd('0x2d')]:_0x3b7d64[_0x69fd('0x29')];if(!_0x4aa9a0[_0x69fd('0x2b')][_0x69fd('0x30')](_0x69fd('0x31'))){_0x2b5f95['limit']=qs[_0x69fd('0x1c')](_0x4aa9a0[_0x69fd('0x2b')][_0x69fd('0x1c')]);_0x2b5f95[_0x69fd('0x32')]=qs['offset'](_0x4aa9a0[_0x69fd('0x2b')]['offset']);}_0x2b5f95[_0x69fd('0x33')]=qs[_0x69fd('0x34')](_0x4aa9a0[_0x69fd('0x2b')][_0x69fd('0x34')]);_0x2b5f95[_0x69fd('0x35')]=qs[_0x69fd('0x36')](_['pick'](_0x4aa9a0['query'],_0x3b7d64[_0x69fd('0x36')]));if(_0x4aa9a0[_0x69fd('0x2b')][_0x69fd('0x37')]){_0x2b5f95['where']=_[_0x69fd('0x38')](_0x2b5f95[_0x69fd('0x35')],{'$or':_[_0x69fd('0x39')](_0x31f7f7,function(_0x5609d0){if(_0x5609d0['type'][_0x69fd('0x3a')]!==_0x69fd('0x3b')){var _0x4a30c3={};_0x4a30c3[_0x5609d0[_0x69fd('0x3c')]]={'$like':'%'+_0x4aa9a0['query']['filter']+'%'};return _0x4a30c3;}})});}_0x2b5f95=_['merge']({},_0x2b5f95,_0x4aa9a0[_0x69fd('0x3d')]);var _0x3d95bc={'where':_0x2b5f95['where']};return db[_0x69fd('0x3e')][_0x69fd('0x1b')](_0x3d95bc)[_0x69fd('0x21')](function(_0xc021a6){_0x29463c[_0x69fd('0x1b')]=_0xc021a6;if(_0x4aa9a0['query'][_0x69fd('0x3f')]){_0x2b5f95[_0x69fd('0x40')]=[{'all':!![]}];}return db[_0x69fd('0x3e')][_0x69fd('0x41')](_0x2b5f95);})[_0x69fd('0x21')](function(_0x298361){_0x29463c[_0x69fd('0x42')]=_0x298361;return _0x29463c;})['then'](respondWithFilteredResult(_0x2b1c0e,_0x2b5f95))[_0x69fd('0x43')](handleError(_0x2b1c0e,null));};exports[_0x69fd('0x44')]=function(_0x141708,_0x5c580b){var _0x40fdac={'raw':!![],'where':{'id':_0x141708[_0x69fd('0x45')]['id']}},_0x1a47a6={};_0x1a47a6[_0x69fd('0x29')]=_[_0x69fd('0x2a')](db[_0x69fd('0x3e')][_0x69fd('0x28')]);_0x1a47a6[_0x69fd('0x2b')]=_[_0x69fd('0x2a')](_0x141708[_0x69fd('0x2b')]);_0x1a47a6['filters']=_[_0x69fd('0x2c')](_0x1a47a6[_0x69fd('0x29')],_0x1a47a6['query']);_0x40fdac[_0x69fd('0x2d')]=_['intersection'](_0x1a47a6[_0x69fd('0x29')],qs[_0x69fd('0x2e')](_0x141708[_0x69fd('0x2b')]['fields']));_0x40fdac['attributes']=_0x40fdac['attributes'][_0x69fd('0x2f')]?_0x40fdac[_0x69fd('0x2d')]:_0x1a47a6['model'];if(_0x141708[_0x69fd('0x2b')]['includeAll']){_0x40fdac[_0x69fd('0x40')]=[{'all':!![]}];}_0x40fdac=_[_0x69fd('0x38')]({},_0x40fdac,_0x141708[_0x69fd('0x3d')]);return db[_0x69fd('0x3e')][_0x69fd('0x46')](_0x40fdac)['then'](handleEntityNotFound(_0x5c580b,null))[_0x69fd('0x21')](respondWithResult(_0x5c580b,null))['catch'](handleError(_0x5c580b,null));};exports[_0x69fd('0x47')]=function(_0x49bcb1,_0xd6e071){return db[_0x69fd('0x3e')][_0x69fd('0x47')](_0x49bcb1[_0x69fd('0x48')],{})[_0x69fd('0x21')](respondWithResult(_0xd6e071,0xc9))[_0x69fd('0x43')](handleError(_0xd6e071,null));};exports['update']=function(_0x4f208c,_0x3a338a){if(_0x4f208c[_0x69fd('0x48')]['id']){delete _0x4f208c[_0x69fd('0x48')]['id'];}return db[_0x69fd('0x3e')][_0x69fd('0x46')]({'where':{'id':_0x4f208c[_0x69fd('0x45')]['id']}})[_0x69fd('0x21')](handleEntityNotFound(_0x3a338a,null))['then'](saveUpdates(_0x4f208c[_0x69fd('0x48')],null))[_0x69fd('0x21')](respondWithResult(_0x3a338a,null))[_0x69fd('0x43')](handleError(_0x3a338a,null));};exports['destroy']=function(_0x29afc0,_0x5b9110){return db[_0x69fd('0x3e')][_0x69fd('0x46')]({'where':{'id':_0x29afc0[_0x69fd('0x45')]['id']}})['then'](handleEntityNotFound(_0x5b9110,null))[_0x69fd('0x21')](removeEntity(_0x5b9110,null))[_0x69fd('0x43')](handleError(_0x5b9110,null));};exports[_0x69fd('0x49')]=function(_0xaad6ce,_0x1e7505){return db[_0x69fd('0x3e')]['describe']()[_0x69fd('0x21')](respondWithResult(_0x1e7505,null))['catch'](handleError(_0x1e7505,null));};exports[_0x69fd('0x4a')]=function(_0x597972,_0x5f111d,_0xaba2fe){var _0x39f36c={'raw':!![],'where':{}};var _0x3167ea={};var _0x15283f={'count':0x0,'rows':[]};return db[_0x69fd('0x3e')][_0x69fd('0x4b')]({'where':{'id':_0x597972[_0x69fd('0x45')]['id']}})['then'](handleEntityNotFound(_0x5f111d,null))[_0x69fd('0x21')](function(_0x4526b2){if(_0x4526b2){_0x3167ea[_0x69fd('0x29')]=_[_0x69fd('0x2a')](db[_0x69fd('0x4c')]['rawAttributes']);_0x3167ea[_0x69fd('0x2b')]=_['keys'](_0x597972['query']);_0x3167ea[_0x69fd('0x36')]=_[_0x69fd('0x2c')](_0x3167ea[_0x69fd('0x29')],_0x3167ea[_0x69fd('0x2b')]);_0x39f36c[_0x69fd('0x2d')]=_['intersection'](_0x3167ea['model'],qs['fields'](_0x597972[_0x69fd('0x2b')][_0x69fd('0x2e')]));_0x39f36c['attributes']=_0x39f36c['attributes'][_0x69fd('0x2f')]?_0x39f36c[_0x69fd('0x2d')]:_0x3167ea['model'];if(!_0x597972['query'][_0x69fd('0x30')](_0x69fd('0x31'))){_0x39f36c[_0x69fd('0x1c')]=qs[_0x69fd('0x1c')](_0x597972[_0x69fd('0x2b')]['limit']);_0x39f36c[_0x69fd('0x32')]=qs['offset'](_0x597972['query'][_0x69fd('0x32')]);}_0x39f36c['order']=qs[_0x69fd('0x34')](_0x597972[_0x69fd('0x2b')][_0x69fd('0x34')]);_0x39f36c[_0x69fd('0x35')]=qs[_0x69fd('0x36')](_['pick'](_0x597972[_0x69fd('0x2b')],_0x3167ea[_0x69fd('0x36')]));_0x39f36c[_0x69fd('0x35')][_0x69fd('0x4d')]=_0x4526b2['id'];if(_0x597972[_0x69fd('0x2b')]['filter']){_0x39f36c[_0x69fd('0x35')]=_[_0x69fd('0x38')](_0x39f36c[_0x69fd('0x35')],{'$or':_[_0x69fd('0x39')](_0x39f36c[_0x69fd('0x2d')],function(_0x47bc67){var _0x3460a4={};_0x3460a4[_0x47bc67]={'$like':'%'+_0x597972['query'][_0x69fd('0x37')]+'%'};return _0x3460a4;})});}_0x39f36c=_[_0x69fd('0x38')]({},_0x39f36c,_0x597972['options']);return db[_0x69fd('0x4c')][_0x69fd('0x1b')]({'where':_0x39f36c['where']})[_0x69fd('0x21')](function(_0x24f43a){_0x15283f[_0x69fd('0x1b')]=_0x24f43a;if(_0x597972['query']['includeAll']){_0x39f36c[_0x69fd('0x40')]=[{'all':!![]}];}return db[_0x69fd('0x4c')][_0x69fd('0x41')](_0x39f36c);})['then'](function(_0x2ff694){_0x15283f['rows']=_0x2ff694;return _0x15283f;});}})[_0x69fd('0x21')](respondWithFilteredResult(_0x5f111d,_0x39f36c))[_0x69fd('0x43')](handleError(_0x5f111d,null));};
\ No newline at end of file
index 7c63c6a..2036999 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7630=['./jscriptySessionReport.attributes','exports','define','JscriptySessionReport','util','../../config/logger','api','moment','request-promise'];(function(_0x220afa,_0xf5f6cc){var _0x1b79d1=function(_0x178a39){while(--_0x178a39){_0x220afa['push'](_0x220afa['shift']());}};_0x1b79d1(++_0xf5f6cc);}(_0x7630,0x124));var _0x0763=function(_0x480b8d,_0x2834a2){_0x480b8d=_0x480b8d-0x0;var _0x84d656=_0x7630[_0x480b8d];return _0x84d656;};'use strict';var _=require('lodash');var util=require(_0x0763('0x0'));var logger=require(_0x0763('0x1'))(_0x0763('0x2'));var moment=require(_0x0763('0x3'));var BPromise=require('bluebird');var rp=require(_0x0763('0x4'));var attributes=require(_0x0763('0x5'));module[_0x0763('0x6')]=function(_0x5b6bce,_0x4d9336){return _0x5b6bce[_0x0763('0x7')](_0x0763('0x8'),attributes,{'tableName':'report_jscripty_sessions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8983=['./jscriptySessionReport.attributes','define','JscriptySessionReport','lodash','util','../../config/logger','api','moment','bluebird','request-promise'];(function(_0x5a4a09,_0x1b38de){var _0x45f7f2=function(_0x1e76b0){while(--_0x1e76b0){_0x5a4a09['push'](_0x5a4a09['shift']());}};_0x45f7f2(++_0x1b38de);}(_0x8983,0x1bb));var _0x3898=function(_0x4c024f,_0x29b20f){_0x4c024f=_0x4c024f-0x0;var _0x23a493=_0x8983[_0x4c024f];return _0x23a493;};'use strict';var _=require(_0x3898('0x0'));var util=require(_0x3898('0x1'));var logger=require(_0x3898('0x2'))(_0x3898('0x3'));var moment=require(_0x3898('0x4'));var BPromise=require(_0x3898('0x5'));var rp=require(_0x3898('0x6'));var attributes=require(_0x3898('0x7'));module['exports']=function(_0x4b125f,_0x1b5bbb){return _0x4b125f[_0x3898('0x8')](_0x3898('0x9'),attributes,{'tableName':'report_jscripty_sessions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ac843e6..d10d1f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb3f9=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','JscriptySessionReport,\x20%s,\x20%s','request\x20sent','debug','JscriptySessionReport,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','randomstring','../../mysqldb'];(function(_0x5b6405,_0x357964){var _0x484ee4=function(_0x49fbeb){while(--_0x49fbeb){_0x5b6405['push'](_0x5b6405['shift']());}};_0x484ee4(++_0x357964);}(_0xb3f9,0x7a));var _0x9b3f=function(_0x34e8c2,_0x4fdefb){_0x34e8c2=_0x34e8c2-0x0;var _0x4f8724=_0xb3f9[_0x34e8c2];return _0x4f8724;};'use strict';var _=require(_0x9b3f('0x0'));var util=require(_0x9b3f('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x9b3f('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x9b3f('0x3'))['db'];var utils=require(_0x9b3f('0x4'));var logger=require(_0x9b3f('0x5'))(_0x9b3f('0x6'));var config=require(_0x9b3f('0x7'));var jayson=require(_0x9b3f('0x8'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x84df53,_0x2a726f,_0x4d3e78){return new BPromise(function(_0x2194b5,_0x53b154){return client['request'](_0x84df53,_0x4d3e78)['then'](function(_0x13d5a2){logger['info'](_0x9b3f('0x9'),_0x2a726f,_0x9b3f('0xa'));logger[_0x9b3f('0xb')](_0x9b3f('0xc'),_0x2a726f,_0x9b3f('0xa'),JSON['stringify'](_0x13d5a2));if(_0x13d5a2[_0x9b3f('0xd')]){if(_0x13d5a2[_0x9b3f('0xd')][_0x9b3f('0xe')]===0x1f4){logger[_0x9b3f('0xd')](_0x9b3f('0x9'),_0x2a726f,_0x13d5a2[_0x9b3f('0xd')][_0x9b3f('0xf')]);return _0x53b154(_0x13d5a2[_0x9b3f('0xd')]['message']);}logger['error'](_0x9b3f('0x9'),_0x2a726f,_0x13d5a2[_0x9b3f('0xd')][_0x9b3f('0xf')]);return _0x2194b5(_0x13d5a2[_0x9b3f('0xd')][_0x9b3f('0xf')]);}else{logger['info']('JscriptySessionReport,\x20%s,\x20%s',_0x2a726f,'request\x20sent');_0x2194b5(_0x13d5a2[_0x9b3f('0x10')][_0x9b3f('0xf')]);}})[_0x9b3f('0x11')](function(_0x18bc83){logger[_0x9b3f('0xd')](_0x9b3f('0x9'),_0x2a726f,_0x18bc83);_0x53b154(_0x18bc83);});});}
\ No newline at end of file
+var _0x21cd=['error','code','message','info','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','request','then','JscriptySessionReport,\x20%s,\x20%s','debug','JscriptySessionReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify'];(function(_0xdd82b4,_0x5cd8b8){var _0x549bb2=function(_0x426fd9){while(--_0x426fd9){_0xdd82b4['push'](_0xdd82b4['shift']());}};_0x549bb2(++_0x5cd8b8);}(_0x21cd,0x6a));var _0xd21c=function(_0x2adbeb,_0x5581be){_0x2adbeb=_0x2adbeb-0x0;var _0x5e18a6=_0x21cd[_0x2adbeb];return _0x5e18a6;};'use strict';var _=require(_0xd21c('0x0'));var util=require(_0xd21c('0x1'));var moment=require(_0xd21c('0x2'));var BPromise=require(_0xd21c('0x3'));var rs=require(_0xd21c('0x4'));var fs=require('fs');var Redis=require(_0xd21c('0x5'));var db=require(_0xd21c('0x6'))['db'];var utils=require(_0xd21c('0x7'));var logger=require(_0xd21c('0x8'))('rpc');var config=require('../../config/environment');var jayson=require(_0xd21c('0x9'));var client=jayson[_0xd21c('0xa')][_0xd21c('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x1831ae,_0x19f375,_0x5a39f2){return new BPromise(function(_0x2d8bed,_0x18ffe7){return client[_0xd21c('0xc')](_0x1831ae,_0x5a39f2)[_0xd21c('0xd')](function(_0x1d8a25){logger['info'](_0xd21c('0xe'),_0x19f375,'request\x20sent');logger[_0xd21c('0xf')](_0xd21c('0x10'),_0x19f375,_0xd21c('0x11'),JSON[_0xd21c('0x12')](_0x1d8a25));if(_0x1d8a25[_0xd21c('0x13')]){if(_0x1d8a25[_0xd21c('0x13')][_0xd21c('0x14')]===0x1f4){logger['error'](_0xd21c('0xe'),_0x19f375,_0x1d8a25[_0xd21c('0x13')][_0xd21c('0x15')]);return _0x18ffe7(_0x1d8a25[_0xd21c('0x13')][_0xd21c('0x15')]);}logger[_0xd21c('0x13')](_0xd21c('0xe'),_0x19f375,_0x1d8a25[_0xd21c('0x13')][_0xd21c('0x15')]);return _0x2d8bed(_0x1d8a25[_0xd21c('0x13')][_0xd21c('0x15')]);}else{logger[_0xd21c('0x16')]('JscriptySessionReport,\x20%s,\x20%s',_0x19f375,_0xd21c('0x11'));_0x2d8bed(_0x1d8a25[_0xd21c('0x17')][_0xd21c('0x15')]);}})[_0xd21c('0x18')](function(_0x141da1){logger['error'](_0xd21c('0xe'),_0x19f375,_0x141da1);_0x18ffe7(_0x141da1);});});}
\ No newline at end of file
index 552c461..3314306 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53a6=['../../components/auth/service','../../components/interaction/service','get','put','/:id','isAuthenticated','multer','util','path','connect-timeout','express','Router'];(function(_0x22fdf0,_0x31ddee){var _0x1d031e=function(_0x26f8ec){while(--_0x26f8ec){_0x22fdf0['push'](_0x22fdf0['shift']());}};_0x1d031e(++_0x31ddee);}(_0x53a6,0x10e));var _0x653a=function(_0x299dc8,_0x50c604){_0x299dc8=_0x299dc8-0x0;var _0x41c1a1=_0x53a6[_0x299dc8];return _0x41c1a1;};'use strict';var multer=require(_0x653a('0x0'));var util=require(_0x653a('0x1'));var path=require(_0x653a('0x2'));var timeout=require(_0x653a('0x3'));var express=require(_0x653a('0x4'));var router=express[_0x653a('0x5')]();var auth=require(_0x653a('0x6'));var interaction=require(_0x653a('0x7'));var config=require('../../config/environment');var controller=require('./license.controller');router[_0x653a('0x8')]('/',controller['index']);router[_0x653a('0x9')](_0x653a('0xa'),auth[_0x653a('0xb')](),controller['update']);module['exports']=router;
\ No newline at end of file
+var _0x0032=['isAuthenticated','update','exports','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','index','put','/:id'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x0032,0x17c));var _0x2003=function(_0x50db7e,_0xaa38ed){_0x50db7e=_0x50db7e-0x0;var _0x46935d=_0x0032[_0x50db7e];return _0x46935d;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x2003('0x0'));var timeout=require(_0x2003('0x1'));var express=require(_0x2003('0x2'));var router=express[_0x2003('0x3')]();var auth=require(_0x2003('0x4'));var interaction=require(_0x2003('0x5'));var config=require(_0x2003('0x6'));var controller=require('./license.controller');router['get']('/',controller[_0x2003('0x7')]);router[_0x2003('0x8')](_0x2003('0x9'),auth[_0x2003('0xa')](),controller[_0x2003('0xb')]);module[_0x2003('0xc')]=router;
\ No newline at end of file
index 1808d2f..0a0e260 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x65ac=['exports','STRING'];(function(_0x2907e4,_0x4f0279){var _0x506300=function(_0x542242){while(--_0x542242){_0x2907e4['push'](_0x2907e4['shift']());}};_0x506300(++_0x4f0279);}(_0x65ac,0x144));var _0xc65a=function(_0xa8883,_0x1f107f){_0xa8883=_0xa8883-0x0;var _0x479426=_0x65ac[_0xa8883];return _0x479426;};'use strict';var Sequelize=require('sequelize');module[_0xc65a('0x0')]={'license':{'type':Sequelize['TEXT']},'data1':{'type':Sequelize['STRING']},'data2':{'type':Sequelize[_0xc65a('0x1')]},'chatLicenseExceeded':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x5dc7=['STRING','sequelize'];(function(_0x481771,_0x551e68){var _0x5aefcf=function(_0x7a692c){while(--_0x7a692c){_0x481771['push'](_0x481771['shift']());}};_0x5aefcf(++_0x551e68);}(_0x5dc7,0x11f));var _0x75dc=function(_0x25989f,_0x489eaa){_0x25989f=_0x25989f-0x0;var _0x4496ed=_0x5dc7[_0x25989f];return _0x4496ed;};'use strict';var Sequelize=require(_0x75dc('0x0'));module['exports']={'license':{'type':Sequelize['TEXT']},'data1':{'type':Sequelize[_0x75dc('0x1')]},'data2':{'type':Sequelize['STRING']},'chatLicenseExceeded':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index 870f372..711b52b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9cca=['checkLicense','demo','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','limit','status','apply','save','then','destroy','stack','name','send','../../config/license/util','index','model','rawAttributes','query','keys','filters','attributes','fields','merge','getLicense','catch','update','body','get'];(function(_0x66dd2a,_0x3a7420){var _0x3924ec=function(_0x74d620){while(--_0x74d620){_0x66dd2a['push'](_0x66dd2a['shift']());}};_0x3924ec(++_0x3a7420);}(_0x9cca,0x1c2));var _0xa9cc=function(_0x179992,_0x30d7ba){_0x179992=_0x179992-0x0;var _0x4da201=_0x9cca[_0x179992];return _0x4da201;};'use strict';var pdf=require(_0xa9cc('0x0'));var emlformat=require(_0xa9cc('0x1'));var rimraf=require(_0xa9cc('0x2'));var zipdir=require(_0xa9cc('0x3'));var jsonpatch=require(_0xa9cc('0x4'));var rp=require(_0xa9cc('0x5'));var moment=require(_0xa9cc('0x6'));var BPromise=require(_0xa9cc('0x7'));var Mustache=require('mustache');var util=require('util');var path=require(_0xa9cc('0x8'));var sox=require(_0xa9cc('0x9'));var csv=require(_0xa9cc('0xa'));var ejs=require(_0xa9cc('0xb'));var fs=require('fs');var _=require(_0xa9cc('0xc'));var squel=require(_0xa9cc('0xd'));var crypto=require(_0xa9cc('0xe'));var jsforce=require('jsforce');var deskjs=require(_0xa9cc('0xf'));var toCsv=require('to-csv');var querystring=require(_0xa9cc('0x10'));var Papa=require(_0xa9cc('0x11'));var authService=require(_0xa9cc('0x12'));var hardwareService=require(_0xa9cc('0x13'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0xa9cc('0x14'))(_0xa9cc('0x15'));var utils=require(_0xa9cc('0x16'));var config=require(_0xa9cc('0x17'));var db=require(_0xa9cc('0x18'))['db'];function respondWithStatusCode(_0x39a81d,_0x12f833){_0x12f833=_0x12f833||0xcc;return function(_0x5184e6){if(_0x5184e6){return _0x39a81d[_0xa9cc('0x19')](_0x12f833);}return _0x39a81d['status'](_0x12f833)[_0xa9cc('0x1a')]();};}function respondWithResult(_0x1f276d,_0x230ff8){_0x230ff8=_0x230ff8||0xc8;return function(_0x2bc51a){if(_0x2bc51a){return _0x1f276d['status'](_0x230ff8)[_0xa9cc('0x1b')](_0x2bc51a);}};}function respondWithFilteredResult(_0x4f6db5,_0x45d617){return function(_0x2eff60){if(_0x2eff60){var _0x2ba47b=_0x2eff60[_0xa9cc('0x1c')],_0x1ef4f1=_0x45d617['offset'],_0x5ac46c=_0x45d617[_0xa9cc('0x1d')]+_0x45d617[_0xa9cc('0x1e')],_0x30bd1e;if(_0x5ac46c>=_0x2ba47b){_0x5ac46c=_0x2ba47b;_0x30bd1e=0xc8;}else{_0x30bd1e=0xce;}_0x4f6db5[_0xa9cc('0x1f')](_0x30bd1e);return _0x4f6db5['set']('Content-Range',_0x1ef4f1+'-'+_0x5ac46c+'/'+_0x2ba47b)[_0xa9cc('0x1b')](_0x2eff60);}return null;};}function patchUpdates(_0x122ffc){return function(_0x250f99){try{jsonpatch[_0xa9cc('0x20')](_0x250f99,_0x122ffc,!![]);}catch(_0x5bb168){return BPromise['reject'](_0x5bb168);}return _0x250f99[_0xa9cc('0x21')]();};}function saveUpdates(_0x42349f,_0x7ef0a9){return function(_0x342083){if(_0x342083){return _0x342083['update'](_0x42349f)[_0xa9cc('0x22')](function(_0x5e5afb){return _0x5e5afb;});}return null;};}function removeEntity(_0x5fbab3,_0x58ca84){return function(_0x1043c9){if(_0x1043c9){return _0x1043c9[_0xa9cc('0x23')]()[_0xa9cc('0x22')](function(){_0x5fbab3['status'](0xcc)[_0xa9cc('0x1a')]();});}};}function handleEntityNotFound(_0x149c32,_0x53f3e4){return function(_0x5112db){if(!_0x5112db){_0x149c32['sendStatus'](0x194);}return _0x5112db;};}function handleError(_0xcdf4a3,_0x281b00){_0x281b00=_0x281b00||0x1f4;return function(_0x25db66){logger['error'](_0x25db66[_0xa9cc('0x24')]);if(_0x25db66[_0xa9cc('0x25')]){delete _0x25db66[_0xa9cc('0x25')];}_0xcdf4a3['status'](_0x281b00)[_0xa9cc('0x26')](_0x25db66);};}var utilLicense=require(_0xa9cc('0x27'));exports[_0xa9cc('0x28')]=function(_0x131cd9,_0x17c099){var _0x567090={'raw':!![],'where':{'id':0x1}},_0xda42cc={};_0xda42cc[_0xa9cc('0x29')]=_['keys'](db['License'][_0xa9cc('0x2a')]);_0xda42cc[_0xa9cc('0x2b')]=_[_0xa9cc('0x2c')](_0x131cd9[_0xa9cc('0x2b')]);_0xda42cc[_0xa9cc('0x2d')]=_['intersection'](_0xda42cc['model'],_0xda42cc[_0xa9cc('0x2b')]);_0x567090[_0xa9cc('0x2e')]=_['intersection'](_0xda42cc[_0xa9cc('0x29')],qs[_0xa9cc('0x2f')](_0x131cd9[_0xa9cc('0x2b')][_0xa9cc('0x2f')]));_0x567090[_0xa9cc('0x2e')]=_0x567090[_0xa9cc('0x2e')]['length']?_0x567090[_0xa9cc('0x2e')]:_0xda42cc['model'];_0x567090=_[_0xa9cc('0x30')]({},_0x567090,_0x131cd9['options']);return utilLicense[_0xa9cc('0x31')](_0x567090)[_0xa9cc('0x22')](respondWithResult(_0x17c099,null))[_0xa9cc('0x32')](handleError(_0x17c099,null));};exports[_0xa9cc('0x33')]=function(_0xff9801,_0x380e07){if(_0xff9801[_0xa9cc('0x34')]['id']){delete _0xff9801[_0xa9cc('0x34')]['id'];}return db['License']['find']({'where':{'id':_0xff9801['params']['id']}})[_0xa9cc('0x22')](handleEntityNotFound(_0x380e07,null))[_0xa9cc('0x22')](function(_0x1d4f20){var _0x17c81d=_0x1d4f20[_0xa9cc('0x35')]({'plain':!![]});return utilLicense[_0xa9cc('0x36')](_0x17c81d,_0xff9801[_0xa9cc('0x34')]['key']);})[_0xa9cc('0x22')](function(_0x1cfb22){if(!_0x1cfb22[_0xa9cc('0x37')]){return saveUpdates(_0xff9801[_0xa9cc('0x34')],null);}return _0x1cfb22;})[_0xa9cc('0x22')](respondWithResult(_0x380e07,null))['catch'](handleError(_0x380e07,null));};
\ No newline at end of file
+var _0xc303=['to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','status','end','count','limit','set','Content-Range','apply','then','destroy','error','stack','name','send','../../config/license/util','index','keys','License','rawAttributes','query','filters','intersection','attributes','model','fields','length','options','getLicense','catch','body','find','get','checkLicense','key','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xc303,0x18b));var _0x3c30=function(_0x3c6ae2,_0x5c52d8){_0x3c6ae2=_0x3c6ae2-0x0;var _0x4edda=_0xc303[_0x3c6ae2];return _0x4edda;};'use strict';var pdf=require(_0x3c30('0x0'));var emlformat=require(_0x3c30('0x1'));var rimraf=require(_0x3c30('0x2'));var zipdir=require(_0x3c30('0x3'));var jsonpatch=require(_0x3c30('0x4'));var rp=require(_0x3c30('0x5'));var moment=require(_0x3c30('0x6'));var BPromise=require(_0x3c30('0x7'));var Mustache=require(_0x3c30('0x8'));var util=require(_0x3c30('0x9'));var path=require(_0x3c30('0xa'));var sox=require('sox');var csv=require(_0x3c30('0xb'));var ejs=require(_0x3c30('0xc'));var fs=require('fs');var _=require(_0x3c30('0xd'));var squel=require(_0x3c30('0xe'));var crypto=require(_0x3c30('0xf'));var jsforce=require(_0x3c30('0x10'));var deskjs=require(_0x3c30('0x11'));var toCsv=require(_0x3c30('0xb'));var querystring=require(_0x3c30('0x12'));var Papa=require('papaparse');var authService=require(_0x3c30('0x13'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x3c30('0x14'));var qs=require(_0x3c30('0x15'));var logger=require(_0x3c30('0x16'))('api');var utils=require(_0x3c30('0x17'));var config=require(_0x3c30('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xa67fe,_0x1bb35a){_0x1bb35a=_0x1bb35a||0xcc;return function(_0x14dfd3){if(_0x14dfd3){return _0xa67fe['sendStatus'](_0x1bb35a);}return _0xa67fe[_0x3c30('0x19')](_0x1bb35a)[_0x3c30('0x1a')]();};}function respondWithResult(_0x27ab6f,_0x3f97b9){_0x3f97b9=_0x3f97b9||0xc8;return function(_0x77cb24){if(_0x77cb24){return _0x27ab6f['status'](_0x3f97b9)['json'](_0x77cb24);}};}function respondWithFilteredResult(_0x28944b,_0x17df46){return function(_0x8c1711){if(_0x8c1711){var _0x398d6c=_0x8c1711[_0x3c30('0x1b')],_0x43490e=_0x17df46['offset'],_0x361c30=_0x17df46['offset']+_0x17df46[_0x3c30('0x1c')],_0x18b7a3;if(_0x361c30>=_0x398d6c){_0x361c30=_0x398d6c;_0x18b7a3=0xc8;}else{_0x18b7a3=0xce;}_0x28944b['status'](_0x18b7a3);return _0x28944b[_0x3c30('0x1d')](_0x3c30('0x1e'),_0x43490e+'-'+_0x361c30+'/'+_0x398d6c)['json'](_0x8c1711);}return null;};}function patchUpdates(_0x4d5869){return function(_0x2e536a){try{jsonpatch[_0x3c30('0x1f')](_0x2e536a,_0x4d5869,!![]);}catch(_0x231406){return BPromise['reject'](_0x231406);}return _0x2e536a['save']();};}function saveUpdates(_0x4ed4ff,_0x24cb85){return function(_0x16dd1e){if(_0x16dd1e){return _0x16dd1e['update'](_0x4ed4ff)[_0x3c30('0x20')](function(_0xa506e1){return _0xa506e1;});}return null;};}function removeEntity(_0x214134,_0x419dff){return function(_0x2a48c0){if(_0x2a48c0){return _0x2a48c0[_0x3c30('0x21')]()['then'](function(){_0x214134[_0x3c30('0x19')](0xcc)[_0x3c30('0x1a')]();});}};}function handleEntityNotFound(_0x50153f,_0x3fd3a3){return function(_0x3a622d){if(!_0x3a622d){_0x50153f['sendStatus'](0x194);}return _0x3a622d;};}function handleError(_0x316d57,_0x318c5e){_0x318c5e=_0x318c5e||0x1f4;return function(_0x2eaeab){logger[_0x3c30('0x22')](_0x2eaeab[_0x3c30('0x23')]);if(_0x2eaeab[_0x3c30('0x24')]){delete _0x2eaeab['name'];}_0x316d57[_0x3c30('0x19')](_0x318c5e)[_0x3c30('0x25')](_0x2eaeab);};}var utilLicense=require(_0x3c30('0x26'));exports[_0x3c30('0x27')]=function(_0x2a8229,_0x2cbcff){var _0x2131ce={'raw':!![],'where':{'id':0x1}},_0x29b985={};_0x29b985['model']=_[_0x3c30('0x28')](db[_0x3c30('0x29')][_0x3c30('0x2a')]);_0x29b985[_0x3c30('0x2b')]=_['keys'](_0x2a8229[_0x3c30('0x2b')]);_0x29b985[_0x3c30('0x2c')]=_[_0x3c30('0x2d')](_0x29b985['model'],_0x29b985['query']);_0x2131ce[_0x3c30('0x2e')]=_[_0x3c30('0x2d')](_0x29b985[_0x3c30('0x2f')],qs[_0x3c30('0x30')](_0x2a8229['query'][_0x3c30('0x30')]));_0x2131ce[_0x3c30('0x2e')]=_0x2131ce[_0x3c30('0x2e')][_0x3c30('0x31')]?_0x2131ce[_0x3c30('0x2e')]:_0x29b985[_0x3c30('0x2f')];_0x2131ce=_['merge']({},_0x2131ce,_0x2a8229[_0x3c30('0x32')]);return utilLicense[_0x3c30('0x33')](_0x2131ce)[_0x3c30('0x20')](respondWithResult(_0x2cbcff,null))[_0x3c30('0x34')](handleError(_0x2cbcff,null));};exports['update']=function(_0x131bcb,_0x13ebc6){if(_0x131bcb['body']['id']){delete _0x131bcb[_0x3c30('0x35')]['id'];}return db[_0x3c30('0x29')][_0x3c30('0x36')]({'where':{'id':_0x131bcb['params']['id']}})[_0x3c30('0x20')](handleEntityNotFound(_0x13ebc6,null))[_0x3c30('0x20')](function(_0x2d101e){var _0x25104a=_0x2d101e[_0x3c30('0x37')]({'plain':!![]});return utilLicense[_0x3c30('0x38')](_0x25104a,_0x131bcb[_0x3c30('0x35')][_0x3c30('0x39')]);})['then'](function(_0x41fa35){if(!_0x41fa35['demo']){return saveUpdates(_0x131bcb[_0x3c30('0x35')],null);}return _0x41fa35;})['then'](respondWithResult(_0x13ebc6,null))['catch'](handleError(_0x13ebc6,null));};
\ No newline at end of file
index 1df741c..6b7efb9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa7b4=['bluebird','License','license','util','../../config/logger','moment'];(function(_0x2232d5,_0x15ba31){var _0x17299e=function(_0x4ade6f){while(--_0x4ade6f){_0x2232d5['push'](_0x2232d5['shift']());}};_0x17299e(++_0x15ba31);}(_0xa7b4,0x8d));var _0x4a7b=function(_0x58dc03,_0x1c0b28){_0x58dc03=_0x58dc03-0x0;var _0x2f14bb=_0xa7b4[_0x58dc03];return _0x2f14bb;};'use strict';var _=require('lodash');var util=require(_0x4a7b('0x0'));var logger=require(_0x4a7b('0x1'))('api');var moment=require(_0x4a7b('0x2'));var BPromise=require(_0x4a7b('0x3'));var rp=require('request-promise');var attributes=require('./license.attributes');module['exports']=function(_0x8c0229,_0x348341){return _0x8c0229['define'](_0x4a7b('0x4'),attributes,{'tableName':_0x4a7b('0x5'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7ec2=['../../config/logger','moment','bluebird','./license.attributes','exports','define','License','license','lodash','util'];(function(_0x2859b4,_0x5d5760){var _0x59acf4=function(_0x4debd9){while(--_0x4debd9){_0x2859b4['push'](_0x2859b4['shift']());}};_0x59acf4(++_0x5d5760);}(_0x7ec2,0x15c));var _0x27ec=function(_0x2f983d,_0xbba9c6){_0x2f983d=_0x2f983d-0x0;var _0x45be91=_0x7ec2[_0x2f983d];return _0x45be91;};'use strict';var _=require(_0x27ec('0x0'));var util=require(_0x27ec('0x1'));var logger=require(_0x27ec('0x2'))('api');var moment=require(_0x27ec('0x3'));var BPromise=require(_0x27ec('0x4'));var rp=require('request-promise');var attributes=require(_0x27ec('0x5'));module[_0x27ec('0x6')]=function(_0x3e1120,_0x39badf){return _0x3e1120[_0x27ec('0x7')](_0x27ec('0x8'),attributes,{'tableName':_0x27ec('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index dc62b3e..b34ad2d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x30d7=['then','info','License,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','http','request'];(function(_0x4f084b,_0x2ab0f4){var _0x182099=function(_0x5a76f7){while(--_0x5a76f7){_0x4f084b['push'](_0x4f084b['shift']());}};_0x182099(++_0x2ab0f4);}(_0x30d7,0x15b));var _0x730d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x30d7[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x730d('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x730d('0x1'));var rs=require(_0x730d('0x2'));var fs=require('fs');var Redis=require(_0x730d('0x3'));var db=require(_0x730d('0x4'))['db'];var utils=require(_0x730d('0x5'));var logger=require(_0x730d('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x730d('0x7'));var client=jayson['client'][_0x730d('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x5df757,_0x394fa7,_0x3df176){return new BPromise(function(_0x2e578e,_0x58f94d){return client[_0x730d('0x9')](_0x5df757,_0x3df176)[_0x730d('0xa')](function(_0x4be7c2){logger[_0x730d('0xb')](_0x730d('0xc'),_0x394fa7,_0x730d('0xd'));logger[_0x730d('0xe')]('License,\x20%s,\x20%s,\x20%s',_0x394fa7,'request\x20sent',JSON[_0x730d('0xf')](_0x4be7c2));if(_0x4be7c2[_0x730d('0x10')]){if(_0x4be7c2[_0x730d('0x10')][_0x730d('0x11')]===0x1f4){logger[_0x730d('0x10')](_0x730d('0xc'),_0x394fa7,_0x4be7c2[_0x730d('0x10')][_0x730d('0x12')]);return _0x58f94d(_0x4be7c2[_0x730d('0x10')]['message']);}logger[_0x730d('0x10')](_0x730d('0xc'),_0x394fa7,_0x4be7c2['error'][_0x730d('0x12')]);return _0x2e578e(_0x4be7c2[_0x730d('0x10')][_0x730d('0x12')]);}else{logger['info'](_0x730d('0xc'),_0x394fa7,_0x730d('0xd'));_0x2e578e(_0x4be7c2[_0x730d('0x13')][_0x730d('0x12')]);}})[_0x730d('0x14')](function(_0x29ba0f){logger[_0x730d('0x10')]('License,\x20%s,\x20%s',_0x394fa7,_0x29ba0f);_0x58f94d(_0x29ba0f);});});}
\ No newline at end of file
+var _0x6917=['bluebird','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','then','info','License,\x20%s,\x20%s','request\x20sent','debug','License,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util'];(function(_0x246e23,_0x866eb4){var _0xf062b4=function(_0x283212){while(--_0x283212){_0x246e23['push'](_0x246e23['shift']());}};_0xf062b4(++_0x866eb4);}(_0x6917,0x1f2));var _0x7691=function(_0x1035c1,_0x2d8583){_0x1035c1=_0x1035c1-0x0;var _0x308d67=_0x6917[_0x1035c1];return _0x308d67;};'use strict';var _=require(_0x7691('0x0'));var util=require(_0x7691('0x1'));var moment=require('moment');var BPromise=require(_0x7691('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7691('0x3'));var db=require(_0x7691('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x7691('0x5'))(_0x7691('0x6'));var config=require(_0x7691('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x42abdc,_0x324389,_0xee9f4e){return new BPromise(function(_0xb4ee10,_0x6d3716){return client['request'](_0x42abdc,_0xee9f4e)[_0x7691('0x8')](function(_0x5f3edb){logger[_0x7691('0x9')](_0x7691('0xa'),_0x324389,_0x7691('0xb'));logger[_0x7691('0xc')](_0x7691('0xd'),_0x324389,_0x7691('0xb'),JSON[_0x7691('0xe')](_0x5f3edb));if(_0x5f3edb[_0x7691('0xf')]){if(_0x5f3edb[_0x7691('0xf')][_0x7691('0x10')]===0x1f4){logger[_0x7691('0xf')](_0x7691('0xa'),_0x324389,_0x5f3edb[_0x7691('0xf')][_0x7691('0x11')]);return _0x6d3716(_0x5f3edb[_0x7691('0xf')]['message']);}logger[_0x7691('0xf')](_0x7691('0xa'),_0x324389,_0x5f3edb['error'][_0x7691('0x11')]);return _0xb4ee10(_0x5f3edb[_0x7691('0xf')]['message']);}else{logger['info'](_0x7691('0xa'),_0x324389,_0x7691('0xb'));_0xb4ee10(_0x5f3edb[_0x7691('0x12')][_0x7691('0x11')]);}})[_0x7691('0x13')](function(_0x4c0367){logger[_0x7691('0xf')](_0x7691('0xa'),_0x324389,_0x4c0367);_0x6d3716(_0x4c0367);});});}
\ No newline at end of file
index f2f45ed..2dae2be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1445=['addSmtp','addInteraction','/:id/applications','addApplications','/:id/send','send','addAgents','put','delete','removeDispositions','removeAnswers','removeImap','removeSmtp','destroy','removeAgents','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./mailAccount.controller','isAuthenticated','index','get','/describe','/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','/:id/in_servers','getImap','getSmtp','/:id/interactions','getInteractions','getApplications','/:id/messages','getMessages','/:id/users','getAgents','post','addDisposition','addAnswer','addImap','/:id/out_servers'];(function(_0x3ac13e,_0x3f98e4){var _0x557c27=function(_0x54f570){while(--_0x54f570){_0x3ac13e['push'](_0x3ac13e['shift']());}};_0x557c27(++_0x3f98e4);}(_0x1445,0xa3));var _0x5144=function(_0x3e1b9a,_0x117df4){_0x3e1b9a=_0x3e1b9a-0x0;var _0x346f3c=_0x1445[_0x3e1b9a];return _0x346f3c;};'use strict';var multer=require(_0x5144('0x0'));var util=require(_0x5144('0x1'));var path=require('path');var timeout=require(_0x5144('0x2'));var express=require(_0x5144('0x3'));var router=express[_0x5144('0x4')]();var auth=require(_0x5144('0x5'));var interaction=require(_0x5144('0x6'));var config=require('../../config/environment');var controller=require(_0x5144('0x7'));router['get']('/',auth[_0x5144('0x8')](),controller[_0x5144('0x9')]);router[_0x5144('0xa')](_0x5144('0xb'),auth[_0x5144('0x8')](),controller['describe']);router[_0x5144('0xa')](_0x5144('0xc'),auth[_0x5144('0x8')](),controller[_0x5144('0xd')]);router['get'](_0x5144('0xe'),auth['isAuthenticated'](),controller[_0x5144('0xf')]);router[_0x5144('0xa')](_0x5144('0x10'),auth['isAuthenticated'](),controller[_0x5144('0x11')]);router[_0x5144('0xa')](_0x5144('0x12'),auth['isAuthenticated'](),controller[_0x5144('0x13')]);router[_0x5144('0xa')]('/:id/out_servers',auth['isAuthenticated'](),controller[_0x5144('0x14')]);router[_0x5144('0xa')](_0x5144('0x15'),auth[_0x5144('0x8')](),controller[_0x5144('0x16')]);router[_0x5144('0xa')]('/:id/applications',auth[_0x5144('0x8')](),controller[_0x5144('0x17')]);router[_0x5144('0xa')](_0x5144('0x18'),auth[_0x5144('0x8')](),controller[_0x5144('0x19')]);router['get']('/:id/verify',auth[_0x5144('0x8')](),controller['verifySmtp']);router[_0x5144('0xa')](_0x5144('0x1a'),auth['isAuthenticated'](),controller[_0x5144('0x1b')]);router[_0x5144('0x1c')](_0x5144('0xe'),auth[_0x5144('0x8')](),controller[_0x5144('0x1d')]);router[_0x5144('0x1c')](_0x5144('0x10'),auth[_0x5144('0x8')](),controller[_0x5144('0x1e')]);router[_0x5144('0x1c')]('/',auth[_0x5144('0x8')](),controller['create']);router[_0x5144('0x1c')](_0x5144('0x12'),auth[_0x5144('0x8')](),controller[_0x5144('0x1f')]);router[_0x5144('0x1c')](_0x5144('0x20'),auth[_0x5144('0x8')](),controller[_0x5144('0x21')]);router[_0x5144('0x1c')](_0x5144('0x15'),auth['isAuthenticated'](),controller[_0x5144('0x22')]);router[_0x5144('0x1c')](_0x5144('0x23'),auth['isAuthenticated'](),controller[_0x5144('0x24')]);router[_0x5144('0x1c')](_0x5144('0x25'),auth['isAuthenticated'](),controller[_0x5144('0x26')]);router['post'](_0x5144('0x1a'),auth['isAuthenticated'](),controller[_0x5144('0x27')]);router[_0x5144('0x28')]('/:id',auth[_0x5144('0x8')](),controller['update']);router[_0x5144('0x29')](_0x5144('0xe'),auth[_0x5144('0x8')](),controller[_0x5144('0x2a')]);router[_0x5144('0x29')](_0x5144('0x10'),auth[_0x5144('0x8')](),controller[_0x5144('0x2b')]);router[_0x5144('0x29')](_0x5144('0x12'),auth['isAuthenticated'](),controller[_0x5144('0x2c')]);router['delete'](_0x5144('0x20'),auth['isAuthenticated'](),controller[_0x5144('0x2d')]);router[_0x5144('0x29')](_0x5144('0xc'),auth[_0x5144('0x8')](),controller[_0x5144('0x2e')]);router[_0x5144('0x29')](_0x5144('0x1a'),auth['isAuthenticated'](),controller[_0x5144('0x2f')]);module[_0x5144('0x30')]=router;
\ No newline at end of file
+var _0x2ecf=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./mailAccount.controller','get','isAuthenticated','index','/describe','describe','/:id/dispositions','getDispositions','/:id/canned_answers','/:id/in_servers','getSmtp','/:id/interactions','/:id/applications','getApplications','getMessages','verifySmtp','/:id/users','getAgents','post','addDisposition','addAnswer','create','addImap','/:id/out_servers','addSmtp','addInteraction','addApplications','send','addAgents','update','delete','removeAnswers','removeImap','removeSmtp'];(function(_0x45fe79,_0x23a48b){var _0x23720c=function(_0x1088a1){while(--_0x1088a1){_0x45fe79['push'](_0x45fe79['shift']());}};_0x23720c(++_0x23a48b);}(_0x2ecf,0xd2));var _0xf2ec=function(_0x4a747d,_0x3b747f){_0x4a747d=_0x4a747d-0x0;var _0x3a5b5c=_0x2ecf[_0x4a747d];return _0x3a5b5c;};'use strict';var multer=require(_0xf2ec('0x0'));var util=require(_0xf2ec('0x1'));var path=require(_0xf2ec('0x2'));var timeout=require(_0xf2ec('0x3'));var express=require(_0xf2ec('0x4'));var router=express[_0xf2ec('0x5')]();var auth=require(_0xf2ec('0x6'));var interaction=require(_0xf2ec('0x7'));var config=require('../../config/environment');var controller=require(_0xf2ec('0x8'));router[_0xf2ec('0x9')]('/',auth[_0xf2ec('0xa')](),controller[_0xf2ec('0xb')]);router[_0xf2ec('0x9')](_0xf2ec('0xc'),auth['isAuthenticated'](),controller[_0xf2ec('0xd')]);router[_0xf2ec('0x9')]('/:id',auth[_0xf2ec('0xa')](),controller['show']);router[_0xf2ec('0x9')](_0xf2ec('0xe'),auth[_0xf2ec('0xa')](),controller[_0xf2ec('0xf')]);router[_0xf2ec('0x9')](_0xf2ec('0x10'),auth[_0xf2ec('0xa')](),controller['getAnswers']);router[_0xf2ec('0x9')](_0xf2ec('0x11'),auth[_0xf2ec('0xa')](),controller['getImap']);router[_0xf2ec('0x9')]('/:id/out_servers',auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x12')]);router['get'](_0xf2ec('0x13'),auth['isAuthenticated'](),controller['getInteractions']);router[_0xf2ec('0x9')](_0xf2ec('0x14'),auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x15')]);router[_0xf2ec('0x9')]('/:id/messages',auth['isAuthenticated'](),controller[_0xf2ec('0x16')]);router['get']('/:id/verify',auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x17')]);router[_0xf2ec('0x9')](_0xf2ec('0x18'),auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x19')]);router[_0xf2ec('0x1a')]('/:id/dispositions',auth['isAuthenticated'](),controller[_0xf2ec('0x1b')]);router[_0xf2ec('0x1a')](_0xf2ec('0x10'),auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x1c')]);router[_0xf2ec('0x1a')]('/',auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x1d')]);router[_0xf2ec('0x1a')](_0xf2ec('0x11'),auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x1e')]);router[_0xf2ec('0x1a')](_0xf2ec('0x1f'),auth['isAuthenticated'](),controller[_0xf2ec('0x20')]);router['post'](_0xf2ec('0x13'),auth['isAuthenticated'](),controller[_0xf2ec('0x21')]);router[_0xf2ec('0x1a')]('/:id/applications',auth['isAuthenticated'](),controller[_0xf2ec('0x22')]);router['post']('/:id/send',auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x23')]);router[_0xf2ec('0x1a')](_0xf2ec('0x18'),auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x24')]);router['put']('/:id',auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x25')]);router[_0xf2ec('0x26')](_0xf2ec('0xe'),auth[_0xf2ec('0xa')](),controller['removeDispositions']);router[_0xf2ec('0x26')]('/:id/canned_answers',auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x27')]);router[_0xf2ec('0x26')](_0xf2ec('0x11'),auth['isAuthenticated'](),controller[_0xf2ec('0x28')]);router[_0xf2ec('0x26')](_0xf2ec('0x1f'),auth[_0xf2ec('0xa')](),controller[_0xf2ec('0x29')]);router['delete']('/:id',auth[_0xf2ec('0xa')](),controller['destroy']);router[_0xf2ec('0x26')](_0xf2ec('0x18'),auth[_0xf2ec('0xa')](),controller['removeAgents']);module['exports']=router;
\ No newline at end of file
index 9d825be..e301bb0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0d7e=['INTEGER','UNSIGNED','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','mandatoryDisposition','STRING','BOOLEAN','TEXT','Arial,Helvetica,sans-serif'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x0d7e,0x167));var _0xe0d7=function(_0x3fade0,_0x34419f){_0x3fade0=_0x3fade0-0x0;var _0x5b3aa9=_0x0d7e[_0x3fade0];return _0x5b3aa9;};'use strict';var Sequelize=require('sequelize');module['exports']={'description':{'type':Sequelize[_0xe0d7('0x0')]},'name':{'type':Sequelize[_0xe0d7('0x0')],'allowNull':![]},'service':{'type':Sequelize[_0xe0d7('0x1')],'defaultValue':![]},'email':{'type':Sequelize[_0xe0d7('0x0')],'validate':{'isEmail':!![]}},'active':{'type':Sequelize[_0xe0d7('0x1')],'defaultValue':!![]},'key':{'type':Sequelize[_0xe0d7('0x0')],'allowNull':![]},'template':{'type':Sequelize[_0xe0d7('0x2')]},'markAsUnread':{'type':Sequelize[_0xe0d7('0x1')],'defaultValue':![]},'fontFamily':{'type':Sequelize[_0xe0d7('0x0')],'allowNull':![],'defaultValue':_0xe0d7('0x3')},'fontSize':{'type':Sequelize[_0xe0d7('0x4')](0x2)[_0xe0d7('0x5')],'defaultValue':0xd,'validate':{'min':0x8,'max':0x48}},'notificationTemplate':{'type':Sequelize[_0xe0d7('0x2')],'defaultValue':function(){return _0xe0d7('0x6');}},'notificationSound':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xe0d7('0x1')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xe0d7('0x1')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xe0d7('0x4')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xe0d7('0x4')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0xe0d7('0x4')],'allowNull':!![],'defaultValue':null,'comment':'Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled'},'mandatoryDisposition':{'type':Sequelize[_0xe0d7('0x1')],'defaultValue':![],'comment':_0xe0d7('0x7'),'set':function(_0x53b319){if(!_0x53b319)this[_0xe0d7('0x8')](_0xe0d7('0x9'),null);this[_0xe0d7('0x8')](_0xe0d7('0xa'),_0x53b319);}}};
\ No newline at end of file
+var _0x332c=['Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','setDataValue','mandatoryDispositionPauseId','sequelize','exports','STRING','BOOLEAN','TEXT','Arial,Helvetica,sans-serif','INTEGER'];(function(_0x310a1b,_0x4c9129){var _0xdea206=function(_0x1f1e8d){while(--_0x1f1e8d){_0x310a1b['push'](_0x310a1b['shift']());}};_0xdea206(++_0x4c9129);}(_0x332c,0x11b));var _0xc332=function(_0x56c537,_0x462fba){_0x56c537=_0x56c537-0x0;var _0x4a4a1e=_0x332c[_0x56c537];return _0x4a4a1e;};'use strict';var Sequelize=require(_0xc332('0x0'));module[_0xc332('0x1')]={'description':{'type':Sequelize[_0xc332('0x2')]},'name':{'type':Sequelize['STRING'],'allowNull':![]},'service':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'email':{'type':Sequelize[_0xc332('0x2')],'validate':{'isEmail':!![]}},'active':{'type':Sequelize[_0xc332('0x3')],'defaultValue':!![]},'key':{'type':Sequelize[_0xc332('0x2')],'allowNull':![]},'template':{'type':Sequelize[_0xc332('0x4')]},'markAsUnread':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'fontFamily':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xc332('0x5')},'fontSize':{'type':Sequelize[_0xc332('0x6')](0x2)['UNSIGNED'],'defaultValue':0xd,'validate':{'min':0x8,'max':0x48}},'notificationTemplate':{'type':Sequelize[_0xc332('0x4')],'defaultValue':function(){return'Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}<br/>Subject\x20:\x20{{message.subject}}';}},'notificationSound':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xc332('0x3')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xc332('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0xc332('0x3')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xc332('0x3')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xc332('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0xc332('0x6')],'allowNull':!![],'defaultValue':null,'comment':_0xc332('0x7')},'mandatoryDisposition':{'type':Sequelize[_0xc332('0x3')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x567c0e){if(!_0x567c0e)this[_0xc332('0x8')](_0xc332('0x9'),null);this[_0xc332('0x8')]('mandatoryDisposition',_0x567c0e);}}};
\ No newline at end of file
index 072f3ab..7fafd31 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb2b5=['defaults','redis','localhost','socket.io-emitter','./mailAccount.socket','register','client','request','info','MailAccount,\x20%s,\x20%s','debug','MailAccount,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','get','MailAccounts','UserProfileResource','stack','name','send','index','Imap','MailServerOut','Pause','mandatoryDispositionPause','model','keys','query','intersection','attributes','fields','length','nolimit','order','sort','where','filters','pick','filter','map','type','key','VIRTUAL','merge','options','MailAccount','rows','params','MailServerIn','includeAll','find','body','describe','addDisposition','MailAccountId','Disposition','getDispositions','findOne','rawAttributes','hasOwnProperty','removeDispositions','ids','addAnswer','create','getAnswers','CannedAnswer','include','findAll','removeAnswers','email','ListId','isNil','active','cauthentication','Smtp','cuser','pass','cpassword','authentication','host','port','service','cservice','user','password','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getImap','setImap','addSmtp','removeSmtp','setSmtp','MailInteraction','addInteraction','omit','getInteractions','User','Owner','fullname','Tag','Tags','color','tag','addApplications','sequelize','MailApplication','getApplications','getMessages','MailMessage','split','format','YYYY-MM-DD\x20HH:mm:ss','CmList','List','Contacts','from','%s\x20<%s>','attachments','join','server/files/attachments','basename','auth','secure','SendMail','sendMail','List\x20not\x20found','CmContact','messageId','subject','out','Interaction','verifySmtp','VerifySmtp','Sequelize','ValidationError','addAgents','userMailAccount:save','removeAgents','isArray','userMailAccount:remove','emit','getAgents','fast-json-patch','request-promise','mustache','util','path','sox','ejs','lodash','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/environment','../../mysqldb'];(function(_0x297fd3,_0x115406){var _0x2af381=function(_0x1dd31b){while(--_0x1dd31b){_0x297fd3['push'](_0x297fd3['shift']());}};_0x2af381(++_0x115406);}(_0xb2b5,0xa3));var _0x5b2b=function(_0x4fde08,_0x463a36){_0x4fde08=_0x4fde08-0x0;var _0x12e725=_0xb2b5[_0x4fde08];return _0x12e725;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x5b2b('0x0'));var rp=require(_0x5b2b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x5b2b('0x2'));var util=require(_0x5b2b('0x3'));var path=require(_0x5b2b('0x4'));var sox=require(_0x5b2b('0x5'));var csv=require('to-csv');var ejs=require(_0x5b2b('0x6'));var fs=require('fs');var _=require(_0x5b2b('0x7'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x5b2b('0x8'));var deskjs=require(_0x5b2b('0x9'));var toCsv=require(_0x5b2b('0xa'));var querystring=require(_0x5b2b('0xb'));var Papa=require(_0x5b2b('0xc'));var authService=require(_0x5b2b('0xd'));var hardwareService=require(_0x5b2b('0xe'));var Redis=require(_0x5b2b('0xf'));var qs=require('../../components/parsers/qs');var logger=require(_0x5b2b('0x10'))(_0x5b2b('0x11'));var utils=require('../../config/utils');var config=require(_0x5b2b('0x12'));var db=require(_0x5b2b('0x13'))['db'];config['redis']=_[_0x5b2b('0x14')](config[_0x5b2b('0x15')],{'host':_0x5b2b('0x16'),'port':0x18eb});var socket=require(_0x5b2b('0x17'))(new Redis(config[_0x5b2b('0x15')]));require(_0x5b2b('0x18'))[_0x5b2b('0x19')](socket);var jayson=require('jayson/promise');var client=jayson[_0x5b2b('0x1a')]['http']({'port':0x232b});function respondWithRpcPromise(_0x39dad7,_0x36e1bc,_0x3f5236,_0x2611a3){return new BPromise(function(_0x4ff4ba,_0x310060){var _0x57b38f=_0x2611a3||client;return _0x57b38f[_0x5b2b('0x1b')](_0x39dad7,_0x3f5236)['then'](function(_0x56ca46){logger[_0x5b2b('0x1c')](_0x5b2b('0x1d'),_0x36e1bc,'request\x20sent');logger[_0x5b2b('0x1e')](_0x5b2b('0x1f'),_0x36e1bc,_0x5b2b('0x20'),JSON[_0x5b2b('0x21')](_0x56ca46));if(_0x56ca46[_0x5b2b('0x22')]){if(_0x56ca46['error'][_0x5b2b('0x23')]===0x1f4){logger[_0x5b2b('0x22')](_0x5b2b('0x1d'),_0x36e1bc,_0x56ca46[_0x5b2b('0x22')][_0x5b2b('0x24')]);return _0x310060(_0x56ca46[_0x5b2b('0x22')][_0x5b2b('0x24')]);}logger[_0x5b2b('0x22')](_0x5b2b('0x1d'),_0x36e1bc,_0x56ca46[_0x5b2b('0x22')][_0x5b2b('0x24')]);return _0x4ff4ba(_0x56ca46[_0x5b2b('0x22')][_0x5b2b('0x24')]);}else{logger[_0x5b2b('0x1c')]('MailAccount,\x20%s,\x20%s',_0x36e1bc,'request\x20sent');_0x4ff4ba(_0x56ca46[_0x5b2b('0x25')]['message']);}})[_0x5b2b('0x26')](function(_0x4adb6d){logger[_0x5b2b('0x22')](_0x5b2b('0x1d'),_0x36e1bc,_0x4adb6d);_0x310060(_0x4adb6d);});});}function respondWithStatusCode(_0xb6d0b0,_0x37cbd8){_0x37cbd8=_0x37cbd8||0xcc;return function(_0x33a88c){if(_0x33a88c){return _0xb6d0b0['sendStatus'](_0x37cbd8);}return _0xb6d0b0[_0x5b2b('0x27')](_0x37cbd8)[_0x5b2b('0x28')]();};}function respondWithResult(_0x55b05c,_0x3fd917){_0x3fd917=_0x3fd917||0xc8;return function(_0x1fa64b){if(_0x1fa64b){return _0x55b05c['status'](_0x3fd917)[_0x5b2b('0x29')](_0x1fa64b);}};}function respondWithFilteredResult(_0x4469f8,_0x225a99){return function(_0x1bfd12){if(_0x1bfd12){var _0x3e3ca7=_0x1bfd12[_0x5b2b('0x2a')],_0x94d866=_0x225a99[_0x5b2b('0x2b')],_0x57284a=_0x225a99[_0x5b2b('0x2b')]+_0x225a99[_0x5b2b('0x2c')],_0x2c80be;if(_0x57284a>=_0x3e3ca7){_0x57284a=_0x3e3ca7;_0x2c80be=0xc8;}else{_0x2c80be=0xce;}_0x4469f8['status'](_0x2c80be);return _0x4469f8[_0x5b2b('0x2d')](_0x5b2b('0x2e'),_0x94d866+'-'+_0x57284a+'/'+_0x3e3ca7)[_0x5b2b('0x29')](_0x1bfd12);}return null;};}function patchUpdates(_0x250348){return function(_0xbe2fc9){try{jsonpatch[_0x5b2b('0x2f')](_0xbe2fc9,_0x250348,!![]);}catch(_0x528864){return BPromise[_0x5b2b('0x30')](_0x528864);}return _0xbe2fc9[_0x5b2b('0x31')]();};}function saveUpdates(_0x101d5c,_0x1127b0){return function(_0x1d3b92){if(_0x1d3b92){return _0x1d3b92[_0x5b2b('0x32')](_0x101d5c)[_0x5b2b('0x33')](function(_0x1c0511){return _0x1c0511;});}return null;};}function removeEntity(_0x1a5b63,_0x3f7f22){return function(_0x4e13a3){if(_0x4e13a3){return _0x4e13a3[_0x5b2b('0x34')]()[_0x5b2b('0x33')](function(){var _0x22170b=_0x4e13a3[_0x5b2b('0x35')]({'plain':!![]});var _0xf89686=_0x5b2b('0x36');return db[_0x5b2b('0x37')][_0x5b2b('0x34')]({'where':{'type':_0xf89686,'resourceId':_0x22170b['id']}})[_0x5b2b('0x33')](function(){return _0x4e13a3;});})['then'](function(){_0x1a5b63[_0x5b2b('0x27')](0xcc)[_0x5b2b('0x28')]();});}};}function handleEntityNotFound(_0x1f6b2f,_0xf0bed){return function(_0x49b489){if(!_0x49b489){_0x1f6b2f['sendStatus'](0x194);}return _0x49b489;};}function handleError(_0x2ea56b,_0x5a9572){_0x5a9572=_0x5a9572||0x1f4;return function(_0x3f5233){logger[_0x5b2b('0x22')](_0x3f5233[_0x5b2b('0x38')]);if(_0x3f5233[_0x5b2b('0x39')]){delete _0x3f5233['name'];}_0x2ea56b[_0x5b2b('0x27')](_0x5a9572)[_0x5b2b('0x3a')](_0x3f5233);};}exports[_0x5b2b('0x3b')]=function(_0x17cbc2,_0x28ddb6){var _0x1f5a61={'include':[{'model':db['MailServerIn'],'as':_0x5b2b('0x3c')},{'model':db[_0x5b2b('0x3d')],'as':'Smtp'},{'model':db[_0x5b2b('0x3e')],'as':_0x5b2b('0x3f')}]},_0x1f7448={},_0x4bceec={'count':0x0,'rows':[]};var _0x501615=db['MailAccount']['rawAttributes'];_0x1f7448[_0x5b2b('0x40')]=_[_0x5b2b('0x41')](_0x501615);_0x1f7448[_0x5b2b('0x42')]=_[_0x5b2b('0x41')](_0x17cbc2['query']);_0x1f7448['filters']=_[_0x5b2b('0x43')](_0x1f7448['model'],_0x1f7448[_0x5b2b('0x42')]);_0x1f5a61[_0x5b2b('0x44')]=_[_0x5b2b('0x43')](_0x1f7448['model'],qs[_0x5b2b('0x45')](_0x17cbc2['query']['fields']));_0x1f5a61['attributes']=_0x1f5a61[_0x5b2b('0x44')][_0x5b2b('0x46')]?_0x1f5a61[_0x5b2b('0x44')]:_0x1f7448[_0x5b2b('0x40')];if(!_0x17cbc2[_0x5b2b('0x42')]['hasOwnProperty'](_0x5b2b('0x47'))){_0x1f5a61['limit']=qs[_0x5b2b('0x2c')](_0x17cbc2[_0x5b2b('0x42')]['limit']);_0x1f5a61[_0x5b2b('0x2b')]=qs[_0x5b2b('0x2b')](_0x17cbc2['query'][_0x5b2b('0x2b')]);}_0x1f5a61[_0x5b2b('0x48')]=qs[_0x5b2b('0x49')](_0x17cbc2['query'][_0x5b2b('0x49')]);_0x1f5a61[_0x5b2b('0x4a')]=qs[_0x5b2b('0x4b')](_[_0x5b2b('0x4c')](_0x17cbc2[_0x5b2b('0x42')],_0x1f7448[_0x5b2b('0x4b')]));if(_0x17cbc2[_0x5b2b('0x42')][_0x5b2b('0x4d')]){_0x1f5a61[_0x5b2b('0x4a')]=_['merge'](_0x1f5a61[_0x5b2b('0x4a')],{'$or':_[_0x5b2b('0x4e')](_0x501615,function(_0x1de131){if(_0x1de131[_0x5b2b('0x4f')][_0x5b2b('0x50')]!==_0x5b2b('0x51')){var _0x57ebea={};_0x57ebea[_0x1de131['field']]={'$like':'%'+_0x17cbc2['query']['filter']+'%'};return _0x57ebea;}})});}_0x1f5a61=_[_0x5b2b('0x52')]({},_0x1f5a61,_0x17cbc2[_0x5b2b('0x53')]);var _0x24b948={'where':_0x1f5a61[_0x5b2b('0x4a')]};return db[_0x5b2b('0x54')][_0x5b2b('0x2a')](_0x24b948)[_0x5b2b('0x33')](function(_0x52b4c4){_0x4bceec[_0x5b2b('0x2a')]=_0x52b4c4;if(_0x17cbc2[_0x5b2b('0x42')]['includeAll']){_0x1f5a61['include']=[{'all':!![]}];}return db[_0x5b2b('0x54')]['findAll'](_0x1f5a61);})['then'](function(_0x40b8ee){_0x4bceec[_0x5b2b('0x55')]=_0x40b8ee;return _0x4bceec;})[_0x5b2b('0x33')](respondWithFilteredResult(_0x28ddb6,_0x1f5a61))[_0x5b2b('0x26')](handleError(_0x28ddb6,null));};exports['show']=function(_0x409a84,_0x2d14cc){var _0x577dc9={'raw':![],'where':{'id':_0x409a84[_0x5b2b('0x56')]['id']},'include':[{'model':db[_0x5b2b('0x57')],'as':_0x5b2b('0x3c')},{'model':db['MailServerOut'],'as':'Smtp'},{'model':db[_0x5b2b('0x3e')],'as':_0x5b2b('0x3f')}]},_0x5612f3={};_0x5612f3['model']=_[_0x5b2b('0x41')](db[_0x5b2b('0x54')]['rawAttributes']);_0x5612f3[_0x5b2b('0x42')]=_['keys'](_0x409a84['query']);_0x5612f3[_0x5b2b('0x4b')]=_[_0x5b2b('0x43')](_0x5612f3[_0x5b2b('0x40')],_0x5612f3[_0x5b2b('0x42')]);_0x577dc9['attributes']=_[_0x5b2b('0x43')](_0x5612f3['model'],qs[_0x5b2b('0x45')](_0x409a84['query'][_0x5b2b('0x45')]));_0x577dc9[_0x5b2b('0x44')]=_0x577dc9[_0x5b2b('0x44')][_0x5b2b('0x46')]?_0x577dc9['attributes']:_0x5612f3[_0x5b2b('0x40')];if(_0x409a84[_0x5b2b('0x42')][_0x5b2b('0x58')]){_0x577dc9['include']=[{'all':!![]}];}_0x577dc9=_[_0x5b2b('0x52')]({},_0x577dc9,_0x409a84['options']);return db['MailAccount'][_0x5b2b('0x59')](_0x577dc9)[_0x5b2b('0x33')](handleEntityNotFound(_0x2d14cc,null))[_0x5b2b('0x33')](respondWithResult(_0x2d14cc,null))[_0x5b2b('0x26')](handleError(_0x2d14cc,null));};exports[_0x5b2b('0x32')]=function(_0x44fbe5,_0x3df1aa){if(_0x44fbe5['body']['id']){delete _0x44fbe5[_0x5b2b('0x5a')]['id'];}return db[_0x5b2b('0x54')][_0x5b2b('0x59')]({'where':{'id':_0x44fbe5['params']['id']},'include':[{'model':db[_0x5b2b('0x57')],'as':_0x5b2b('0x3c')},{'model':db['MailServerOut'],'as':'Smtp'},{'model':db[_0x5b2b('0x3e')],'as':'mandatoryDispositionPause'}]})[_0x5b2b('0x33')](handleEntityNotFound(_0x3df1aa,null))[_0x5b2b('0x33')](saveUpdates(_0x44fbe5[_0x5b2b('0x5a')],null))[_0x5b2b('0x33')](function(_0x37f78b){if(_0x37f78b&&_0x44fbe5[_0x5b2b('0x5a')][_0x5b2b('0x3c')]){return db[_0x5b2b('0x57')][_0x5b2b('0x32')](_0x44fbe5[_0x5b2b('0x5a')][_0x5b2b('0x3c')],{'where':{'MailAccountId':_0x37f78b['id']}})[_0x5b2b('0x33')](function(){return _0x37f78b;});}return _0x37f78b;})[_0x5b2b('0x33')](function(_0x348a87){if(_0x348a87&&_0x44fbe5['body']['Smtp']){return db[_0x5b2b('0x3d')][_0x5b2b('0x32')](_0x44fbe5['body']['Smtp'],{'where':{'MailAccountId':_0x348a87['id']}})[_0x5b2b('0x33')](function(){return _0x348a87;});}return _0x348a87;})[_0x5b2b('0x33')](respondWithResult(_0x3df1aa,null))[_0x5b2b('0x26')](handleError(_0x3df1aa,null));};exports[_0x5b2b('0x5b')]=function(_0x40af7b,_0x135d8c){return db[_0x5b2b('0x54')]['describe']()['then'](respondWithResult(_0x135d8c,null))['catch'](handleError(_0x135d8c,null));};exports[_0x5b2b('0x5c')]=function(_0xea74d7,_0x90f792,_0x42cd52){if(_0xea74d7[_0x5b2b('0x5a')]['id']){delete _0xea74d7['body']['id'];}return db[_0x5b2b('0x54')]['find']({'where':{'id':_0xea74d7[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x90f792,null))['then'](function(_0x2b443f){if(_0x2b443f){_0xea74d7['body'][_0x5b2b('0x5d')]=_0x2b443f['id'];return db[_0x5b2b('0x5e')]['create'](_0xea74d7[_0x5b2b('0x5a')]);}})[_0x5b2b('0x33')](respondWithResult(_0x90f792,null))[_0x5b2b('0x26')](handleError(_0x90f792,null));};exports[_0x5b2b('0x5f')]=function(_0x4ff350,_0x203ab1,_0x494a6d){var _0x45ffdc={'raw':![],'where':{}};var _0x33c4e5={};var _0x5df24e={'count':0x0,'rows':[]};return db[_0x5b2b('0x54')][_0x5b2b('0x60')]({'where':{'id':_0x4ff350['params']['id']}})['then'](handleEntityNotFound(_0x203ab1,null))[_0x5b2b('0x33')](function(_0x255de4){if(_0x255de4){_0x33c4e5[_0x5b2b('0x40')]=_[_0x5b2b('0x41')](db['Disposition'][_0x5b2b('0x61')]);_0x33c4e5['query']=_['keys'](_0x4ff350['query']);_0x33c4e5[_0x5b2b('0x4b')]=_[_0x5b2b('0x43')](_0x33c4e5['model'],_0x33c4e5[_0x5b2b('0x42')]);_0x45ffdc[_0x5b2b('0x44')]=_['intersection'](_0x33c4e5['model'],qs[_0x5b2b('0x45')](_0x4ff350[_0x5b2b('0x42')][_0x5b2b('0x45')]));_0x45ffdc['attributes']=_0x45ffdc['attributes'][_0x5b2b('0x46')]?_0x45ffdc['attributes']:_0x33c4e5[_0x5b2b('0x40')];if(!_0x4ff350[_0x5b2b('0x42')][_0x5b2b('0x62')](_0x5b2b('0x47'))){_0x45ffdc[_0x5b2b('0x2c')]=qs[_0x5b2b('0x2c')](_0x4ff350[_0x5b2b('0x42')]['limit']);_0x45ffdc[_0x5b2b('0x2b')]=qs[_0x5b2b('0x2b')](_0x4ff350['query']['offset']);}_0x45ffdc[_0x5b2b('0x48')]=qs[_0x5b2b('0x49')](_0x4ff350['query'][_0x5b2b('0x49')]);_0x45ffdc[_0x5b2b('0x4a')]=qs['filters'](_[_0x5b2b('0x4c')](_0x4ff350[_0x5b2b('0x42')],_0x33c4e5[_0x5b2b('0x4b')]));_0x45ffdc[_0x5b2b('0x4a')][_0x5b2b('0x5d')]=_0x255de4['id'];if(_0x4ff350[_0x5b2b('0x42')][_0x5b2b('0x4d')]){_0x45ffdc[_0x5b2b('0x4a')]=_[_0x5b2b('0x52')](_0x45ffdc['where'],{'$or':_['map'](_0x45ffdc[_0x5b2b('0x44')],function(_0x469e1c){var _0x1a301e={};_0x1a301e[_0x469e1c]={'$like':'%'+_0x4ff350[_0x5b2b('0x42')]['filter']+'%'};return _0x1a301e;})});}_0x45ffdc=_[_0x5b2b('0x52')]({},_0x45ffdc,_0x4ff350[_0x5b2b('0x53')]);return db['Disposition'][_0x5b2b('0x2a')]({'where':_0x45ffdc['where']})['then'](function(_0x4f8d20){_0x5df24e[_0x5b2b('0x2a')]=_0x4f8d20;if(_0x4ff350[_0x5b2b('0x42')][_0x5b2b('0x58')]){_0x45ffdc['include']=[{'all':!![]}];}return db[_0x5b2b('0x5e')]['findAll'](_0x45ffdc);})[_0x5b2b('0x33')](function(_0x2158ca){_0x5df24e[_0x5b2b('0x55')]=_0x2158ca;return _0x5df24e;});}})[_0x5b2b('0x33')](respondWithFilteredResult(_0x203ab1,_0x45ffdc))['catch'](handleError(_0x203ab1,null));};exports[_0x5b2b('0x63')]=function(_0x4171ae,_0x289e6f,_0x43d915){var _0x3c5e07;return db[_0x5b2b('0x54')][_0x5b2b('0x59')]({'where':{'id':_0x4171ae['params']['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x289e6f,null))['then'](function(_0x1e8158){if(_0x1e8158){return _0x1e8158[_0x5b2b('0x63')](_0x4171ae[_0x5b2b('0x42')][_0x5b2b('0x64')]);}})[_0x5b2b('0x33')](respondWithStatusCode(_0x289e6f,null))[_0x5b2b('0x26')](handleError(_0x289e6f,null));};exports[_0x5b2b('0x65')]=function(_0x51321b,_0x112209,_0x4c5742){if(_0x51321b['body']['id']){delete _0x51321b[_0x5b2b('0x5a')]['id'];}return db['MailAccount'][_0x5b2b('0x59')]({'where':{'id':_0x51321b[_0x5b2b('0x56')]['id']}})['then'](handleEntityNotFound(_0x112209,null))[_0x5b2b('0x33')](function(_0x1a06b7){if(_0x1a06b7){_0x51321b[_0x5b2b('0x5a')]['MailAccountId']=_0x1a06b7['id'];return db['CannedAnswer'][_0x5b2b('0x66')](_0x51321b[_0x5b2b('0x5a')]);}})[_0x5b2b('0x33')](respondWithResult(_0x112209,null))[_0x5b2b('0x26')](handleError(_0x112209,null));};exports[_0x5b2b('0x67')]=function(_0x39360f,_0x3dbc40,_0x18de5e){var _0x386440={'raw':![],'where':{}};var _0xc39644={};var _0x2e91e6={'count':0x0,'rows':[]};return db[_0x5b2b('0x54')][_0x5b2b('0x60')]({'where':{'id':_0x39360f[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x3dbc40,null))[_0x5b2b('0x33')](function(_0x4b4356){if(_0x4b4356){_0xc39644[_0x5b2b('0x40')]=_[_0x5b2b('0x41')](db[_0x5b2b('0x68')][_0x5b2b('0x61')]);_0xc39644[_0x5b2b('0x42')]=_[_0x5b2b('0x41')](_0x39360f[_0x5b2b('0x42')]);_0xc39644['filters']=_[_0x5b2b('0x43')](_0xc39644[_0x5b2b('0x40')],_0xc39644['query']);_0x386440[_0x5b2b('0x44')]=_[_0x5b2b('0x43')](_0xc39644[_0x5b2b('0x40')],qs['fields'](_0x39360f['query'][_0x5b2b('0x45')]));_0x386440[_0x5b2b('0x44')]=_0x386440[_0x5b2b('0x44')][_0x5b2b('0x46')]?_0x386440[_0x5b2b('0x44')]:_0xc39644[_0x5b2b('0x40')];if(!_0x39360f['query'][_0x5b2b('0x62')](_0x5b2b('0x47'))){_0x386440['limit']=qs[_0x5b2b('0x2c')](_0x39360f[_0x5b2b('0x42')]['limit']);_0x386440[_0x5b2b('0x2b')]=qs[_0x5b2b('0x2b')](_0x39360f['query'][_0x5b2b('0x2b')]);}_0x386440[_0x5b2b('0x48')]=qs[_0x5b2b('0x49')](_0x39360f['query'][_0x5b2b('0x49')]);_0x386440['where']=qs[_0x5b2b('0x4b')](_[_0x5b2b('0x4c')](_0x39360f[_0x5b2b('0x42')],_0xc39644[_0x5b2b('0x4b')]));_0x386440[_0x5b2b('0x4a')][_0x5b2b('0x5d')]=_0x4b4356['id'];if(_0x39360f[_0x5b2b('0x42')]['filter']){_0x386440['where']=_[_0x5b2b('0x52')](_0x386440[_0x5b2b('0x4a')],{'$or':_['map'](_0x386440[_0x5b2b('0x44')],function(_0x52db9e){var _0x11c558={};_0x11c558[_0x52db9e]={'$like':'%'+_0x39360f[_0x5b2b('0x42')][_0x5b2b('0x4d')]+'%'};return _0x11c558;})});}_0x386440=_[_0x5b2b('0x52')]({},_0x386440,_0x39360f['options']);return db['CannedAnswer']['count']({'where':_0x386440[_0x5b2b('0x4a')]})[_0x5b2b('0x33')](function(_0x2fe671){_0x2e91e6[_0x5b2b('0x2a')]=_0x2fe671;if(_0x39360f[_0x5b2b('0x42')][_0x5b2b('0x58')]){_0x386440[_0x5b2b('0x69')]=[{'all':!![]}];}return db['CannedAnswer'][_0x5b2b('0x6a')](_0x386440);})[_0x5b2b('0x33')](function(_0x38b486){_0x2e91e6['rows']=_0x38b486;return _0x2e91e6;});}})[_0x5b2b('0x33')](respondWithFilteredResult(_0x3dbc40,_0x386440))['catch'](handleError(_0x3dbc40,null));};exports[_0x5b2b('0x6b')]=function(_0x1c9807,_0x5b45a1,_0x43e3ec){var _0x4cac27;return db[_0x5b2b('0x54')][_0x5b2b('0x59')]({'where':{'id':_0x1c9807[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x5b45a1,null))[_0x5b2b('0x33')](function(_0x3aded2){if(_0x3aded2){return _0x3aded2[_0x5b2b('0x6b')](_0x1c9807[_0x5b2b('0x42')][_0x5b2b('0x64')]);}})[_0x5b2b('0x33')](respondWithStatusCode(_0x5b45a1,null))['catch'](handleError(_0x5b45a1,null));};exports[_0x5b2b('0x66')]=function(_0x2e8ed7,_0x11aeb0){var _0x360832={'name':_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x39')],'key':_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x50')],'email':_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x6c')],'ListId':_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x6d')],'active':!_[_0x5b2b('0x6e')](_0x2e8ed7['body'][_0x5b2b('0x6f')])?_0x2e8ed7[_0x5b2b('0x5a')]['active']:!![],'description':_0x2e8ed7[_0x5b2b('0x5a')]['description']||null,'Imap':{},'Smtp':{}};if(_[_0x5b2b('0x6e')](_0x2e8ed7['body']['cservice'])){if(_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x70')]){_0x360832[_0x5b2b('0x3c')]['user']=_0x360832[_0x5b2b('0x71')]['user']=_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x72')];_0x360832['Imap']['password']=_0x360832[_0x5b2b('0x71')][_0x5b2b('0x73')]=_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x74')];}else{_0x360832['Imap'][_0x5b2b('0x75')]=_0x360832['Smtp']['authentication']=![];}_0x360832['Imap']['host']=_0x2e8ed7['body'][_0x5b2b('0x3c')][_0x5b2b('0x76')];_0x360832[_0x5b2b('0x3c')][_0x5b2b('0x77')]=_0x2e8ed7['body'][_0x5b2b('0x3c')][_0x5b2b('0x77')];_0x360832[_0x5b2b('0x71')][_0x5b2b('0x76')]=_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x71')][_0x5b2b('0x76')];_0x360832[_0x5b2b('0x71')][_0x5b2b('0x77')]=_0x2e8ed7[_0x5b2b('0x5a')]['Smtp'][_0x5b2b('0x77')];}else{_0x360832[_0x5b2b('0x3c')][_0x5b2b('0x78')]=_0x360832[_0x5b2b('0x71')]['service']=_0x2e8ed7['body'][_0x5b2b('0x79')];_0x360832[_0x5b2b('0x3c')][_0x5b2b('0x7a')]=_0x360832[_0x5b2b('0x71')][_0x5b2b('0x7a')]=_0x2e8ed7['body'][_0x5b2b('0x72')];_0x360832[_0x5b2b('0x3c')][_0x5b2b('0x7b')]=_0x360832[_0x5b2b('0x71')]['pass']=_0x2e8ed7[_0x5b2b('0x5a')][_0x5b2b('0x74')];}return db[_0x5b2b('0x54')]['create'](_0x360832,{'include':[{'model':db[_0x5b2b('0x3d')],'as':_0x5b2b('0x71')},{'model':db['MailServerIn'],'as':_0x5b2b('0x3c')}]})[_0x5b2b('0x33')](function(_0x4f657d){var _0x5c2389=_0x2e8ed7[_0x5b2b('0x7a')]['get']({'plain':!![]});if(!_0x5c2389)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5c2389['role']==='user'){var _0x3df31c=_0x4f657d['get']({'plain':!![]});return db[_0x5b2b('0x7c')][_0x5b2b('0x59')]({'where':{'name':_0x5b2b('0x36'),'userProfileId':_0x5c2389[_0x5b2b('0x7d')]},'raw':!![]})['then'](function(_0x338981){if(_0x338981&&_0x338981[_0x5b2b('0x7e')]===0x0){return db[_0x5b2b('0x37')][_0x5b2b('0x66')]({'name':_0x3df31c[_0x5b2b('0x39')],'resourceId':_0x3df31c['id'],'type':_0x338981[_0x5b2b('0x39')],'sectionId':_0x338981['id']},{})['then'](function(){return _0x4f657d;});}else{return _0x4f657d;}})[_0x5b2b('0x26')](function(_0x1e63f9){logger[_0x5b2b('0x22')](_0x5b2b('0x7f'),_0x1e63f9);throw _0x1e63f9;});}return _0x4f657d;})[_0x5b2b('0x33')](respondWithResult(_0x11aeb0,0xc9))[_0x5b2b('0x26')](handleError(_0x11aeb0,null));};exports[_0x5b2b('0x80')]=function(_0xeab12,_0x149a96,_0x262f23){return db[_0x5b2b('0x54')][_0x5b2b('0x60')]({'where':{'id':_0xeab12[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x149a96,null))[_0x5b2b('0x33')](function(_0x4c68e2){if(_0x4c68e2){return _0x4c68e2[_0x5b2b('0x80')]();}return null;})['then'](respondWithResult(_0x149a96,null))['catch'](handleError(_0x149a96,null));};exports['addImap']=function(_0x5bf3a3,_0x1dac6f,_0xb32c77){if(_0x5bf3a3[_0x5b2b('0x5a')]['id']){delete _0x5bf3a3[_0x5b2b('0x5a')]['id'];}return db[_0x5b2b('0x54')]['find']({'where':{'id':_0x5bf3a3['params']['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x1dac6f,null))[_0x5b2b('0x33')](function(_0x2c4d95){if(_0x2c4d95){_0x5bf3a3[_0x5b2b('0x5a')][_0x5b2b('0x5d')]=_0x2c4d95['id'];return db['MailServerIn'][_0x5b2b('0x66')](_0x5bf3a3[_0x5b2b('0x5a')]);}})[_0x5b2b('0x33')](respondWithResult(_0x1dac6f,null))[_0x5b2b('0x26')](handleError(_0x1dac6f,null));};exports['removeImap']=function(_0x2ad0fe,_0x25b7bd,_0xe95f21){return db[_0x5b2b('0x54')][_0x5b2b('0x60')]({'where':{'id':_0x2ad0fe[_0x5b2b('0x56')]['id']}})['then'](handleEntityNotFound(_0x25b7bd,null))['then'](function(_0x5baeda){if(_0x5baeda){return _0x5baeda[_0x5b2b('0x81')](null);}return null;})[_0x5b2b('0x33')](respondWithStatusCode(_0x25b7bd,null))[_0x5b2b('0x26')](handleError(_0x25b7bd,null));};exports['getSmtp']=function(_0x22b980,_0x47899a,_0x18a8c5){return db['MailAccount'][_0x5b2b('0x60')]({'where':{'id':_0x22b980[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x47899a,null))[_0x5b2b('0x33')](function(_0x1979a9){if(_0x1979a9){return _0x1979a9['getSmtp']();}return null;})[_0x5b2b('0x33')](respondWithResult(_0x47899a,null))[_0x5b2b('0x26')](handleError(_0x47899a,null));};exports[_0x5b2b('0x82')]=function(_0x2e90d5,_0x5c415b,_0x5b3538){if(_0x2e90d5[_0x5b2b('0x5a')]['id']){delete _0x2e90d5[_0x5b2b('0x5a')]['id'];}return db[_0x5b2b('0x54')][_0x5b2b('0x59')]({'where':{'id':_0x2e90d5[_0x5b2b('0x56')]['id']}})['then'](handleEntityNotFound(_0x5c415b,null))[_0x5b2b('0x33')](function(_0x54dc1e){if(_0x54dc1e){_0x2e90d5[_0x5b2b('0x5a')][_0x5b2b('0x5d')]=_0x54dc1e['id'];return db[_0x5b2b('0x3d')][_0x5b2b('0x66')](_0x2e90d5[_0x5b2b('0x5a')]);}})['then'](respondWithResult(_0x5c415b,null))['catch'](handleError(_0x5c415b,null));};exports[_0x5b2b('0x83')]=function(_0x4be14d,_0x54c261,_0x41ac6a){return db['MailAccount'][_0x5b2b('0x60')]({'where':{'id':_0x4be14d[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x54c261,null))[_0x5b2b('0x33')](function(_0x1995fd){if(_0x1995fd){return _0x1995fd[_0x5b2b('0x84')](null);}return null;})['then'](respondWithStatusCode(_0x54c261,null))[_0x5b2b('0x26')](handleError(_0x54c261,null));};exports['addInteraction']=function(_0x50c697,_0xa3762d,_0x1a63f4){return db[_0x5b2b('0x85')][_0x5b2b('0x59')]({'where':{'id':_0x50c697[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0xa3762d,null))[_0x5b2b('0x33')](function(_0x43c97f){if(_0x43c97f){return _0x43c97f[_0x5b2b('0x86')](_0x50c697[_0x5b2b('0x5a')][_0x5b2b('0x64')],_[_0x5b2b('0x87')](_0x50c697[_0x5b2b('0x5a')],[_0x5b2b('0x64'),'id'])||{});}})[_0x5b2b('0x33')](respondWithResult(_0xa3762d,null))[_0x5b2b('0x26')](handleError(_0xa3762d,null));};exports[_0x5b2b('0x88')]=function(_0x34ed44,_0x5a22f4,_0x3228d7){var _0x50d6e2={'raw':![],'where':{}};var _0x549143={};var _0x1dcd85={'count':0x0,'rows':[]};return db['MailAccount']['findOne']({'where':{'id':_0x34ed44[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x5a22f4,null))['then'](function(_0x40ec87){if(_0x40ec87){_0x549143['model']=_['keys'](db['MailInteraction'][_0x5b2b('0x61')]);_0x549143[_0x5b2b('0x42')]=_[_0x5b2b('0x41')](_0x34ed44[_0x5b2b('0x42')]);_0x549143['filters']=_['intersection'](_0x549143[_0x5b2b('0x40')],_0x549143[_0x5b2b('0x42')]);_0x50d6e2['attributes']=_[_0x5b2b('0x43')](_0x549143[_0x5b2b('0x40')],qs['fields'](_0x34ed44[_0x5b2b('0x42')][_0x5b2b('0x45')]));_0x50d6e2['attributes']=_0x50d6e2['attributes'][_0x5b2b('0x46')]?_0x50d6e2[_0x5b2b('0x44')]:_0x549143[_0x5b2b('0x40')];if(!_0x34ed44[_0x5b2b('0x42')]['hasOwnProperty'](_0x5b2b('0x47'))){_0x50d6e2[_0x5b2b('0x2c')]=qs['limit'](_0x34ed44[_0x5b2b('0x42')][_0x5b2b('0x2c')]);_0x50d6e2['offset']=qs[_0x5b2b('0x2b')](_0x34ed44['query'][_0x5b2b('0x2b')]);}_0x50d6e2[_0x5b2b('0x48')]=qs[_0x5b2b('0x49')](_0x34ed44['query'][_0x5b2b('0x49')]);_0x50d6e2[_0x5b2b('0x4a')]=qs[_0x5b2b('0x4b')](_['pick'](_0x34ed44['query'],_0x549143[_0x5b2b('0x4b')]));_0x50d6e2[_0x5b2b('0x4a')][_0x5b2b('0x5d')]=_0x40ec87['id'];if(_0x34ed44[_0x5b2b('0x42')]['filter']){_0x50d6e2['where']=_[_0x5b2b('0x52')](_0x50d6e2[_0x5b2b('0x4a')],{'$or':_[_0x5b2b('0x4e')](_0x50d6e2[_0x5b2b('0x44')],function(_0xfac3c1){var _0x30771d={};_0x30771d[_0xfac3c1]={'$like':'%'+_0x34ed44[_0x5b2b('0x42')][_0x5b2b('0x4d')]+'%'};return _0x30771d;})});}_0x50d6e2=_[_0x5b2b('0x52')]({},_0x50d6e2,_0x34ed44['options']);return db[_0x5b2b('0x85')][_0x5b2b('0x2a')]({'where':_0x50d6e2[_0x5b2b('0x4a')]})[_0x5b2b('0x33')](function(_0x562e2c){_0x1dcd85['count']=_0x562e2c;if(_0x34ed44[_0x5b2b('0x42')][_0x5b2b('0x58')]){_0x50d6e2['include']=[{'model':db['CmContact'],'as':'Contact','required':![]},{'model':db[_0x5b2b('0x89')],'as':_0x5b2b('0x8a'),'attributes':['name',_0x5b2b('0x8b'),'internal'],'required':![]},{'model':db[_0x5b2b('0x8c')],'as':_0x5b2b('0x8d'),'attributes':['id',_0x5b2b('0x39'),_0x5b2b('0x8e')],'where':_0x34ed44['query'][_0x5b2b('0x8f')]?{'id':_0x34ed44[_0x5b2b('0x42')][_0x5b2b('0x8f')]}:undefined,'required':_0x34ed44['query'][_0x5b2b('0x8f')]?!![]:![]}];}return db[_0x5b2b('0x85')]['findAll'](_0x50d6e2);})[_0x5b2b('0x33')](function(_0x3713c1){_0x1dcd85[_0x5b2b('0x55')]=_0x3713c1;return _0x1dcd85;});}})['then'](respondWithFilteredResult(_0x5a22f4,_0x50d6e2))[_0x5b2b('0x26')](handleError(_0x5a22f4,null));};exports[_0x5b2b('0x90')]=function(_0x13593b,_0x46f361,_0xec7b18){return db[_0x5b2b('0x54')][_0x5b2b('0x60')]({'where':{'id':_0x13593b[_0x5b2b('0x56')]['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x46f361,null))[_0x5b2b('0x33')](function(_0x5625e8){if(_0x5625e8){return db[_0x5b2b('0x91')]['transaction'](function(_0x549563){return db[_0x5b2b('0x92')]['destroy']({'where':{'MailAccountId':_0x13593b['params']['id']},'transaction':_0x549563})[_0x5b2b('0x33')](function(_0x3e4cfd){var _0x1b2df2=_['map'](_0x13593b[_0x5b2b('0x5a')],function(_0x1af28e){_0x1af28e[_0x5b2b('0x5d')]=_0x13593b[_0x5b2b('0x56')]['id'];return _0x1af28e;});return db[_0x5b2b('0x92')]['bulkCreate'](_0x1b2df2,{'transaction':_0x549563});});})[_0x5b2b('0x33')](function(){return db[_0x5b2b('0x92')]['findAndCountAll']({'where':{'MailAccountId':_0x13593b['params']['id']},'order':'priority'});});}})[_0x5b2b('0x33')](respondWithResult(_0x46f361,null))[_0x5b2b('0x26')](handleError(_0x46f361,null));};exports['getApplications']=function(_0x4ea3b9,_0xb94c5e,_0x1e7f1b){var _0x3c253f={};var _0x4cc49d={};var _0x2936f4;var _0x46c4f0;return db[_0x5b2b('0x54')]['findOne']({'where':{'id':_0x4ea3b9['params']['id']}})['then'](handleEntityNotFound(_0xb94c5e,null))[_0x5b2b('0x33')](function(_0x18b1ad){if(_0x18b1ad){_0x2936f4=_0x18b1ad;_0x4cc49d[_0x5b2b('0x40')]=_[_0x5b2b('0x41')](db[_0x5b2b('0x92')][_0x5b2b('0x61')]);_0x4cc49d[_0x5b2b('0x42')]=_[_0x5b2b('0x41')](_0x4ea3b9[_0x5b2b('0x42')]);_0x4cc49d[_0x5b2b('0x4b')]=_[_0x5b2b('0x43')](_0x4cc49d[_0x5b2b('0x40')],_0x4cc49d[_0x5b2b('0x42')]);_0x3c253f['attributes']=_[_0x5b2b('0x43')](_0x4cc49d[_0x5b2b('0x40')],qs[_0x5b2b('0x45')](_0x4ea3b9[_0x5b2b('0x42')]['fields']));_0x3c253f[_0x5b2b('0x44')]=_0x3c253f['attributes'][_0x5b2b('0x46')]?_0x3c253f[_0x5b2b('0x44')]:_0x4cc49d['model'];_0x3c253f['order']=qs[_0x5b2b('0x49')](_0x4ea3b9['query'][_0x5b2b('0x49')]);_0x3c253f[_0x5b2b('0x4a')]=qs['filters'](_[_0x5b2b('0x4c')](_0x4ea3b9[_0x5b2b('0x42')],_0x4cc49d[_0x5b2b('0x4b')]));if(_0x4ea3b9[_0x5b2b('0x42')]['filter']){_0x3c253f[_0x5b2b('0x4a')]=_[_0x5b2b('0x52')](_0x3c253f[_0x5b2b('0x4a')],{'$or':_[_0x5b2b('0x4e')](_0x3c253f[_0x5b2b('0x44')],function(_0x2c510e){var _0x490bb7={};_0x490bb7[_0x2c510e]={'$like':'%'+_0x4ea3b9['query'][_0x5b2b('0x4d')]+'%'};return _0x490bb7;})});}_0x3c253f=_[_0x5b2b('0x52')]({},_0x3c253f,_0x4ea3b9[_0x5b2b('0x53')]);return _0x2936f4['getApplications'](_0x3c253f);}})[_0x5b2b('0x33')](function(_0x458538){if(_0x458538){_0x46c4f0=_0x458538[_0x5b2b('0x46')];if(!_0x4ea3b9[_0x5b2b('0x42')]['hasOwnProperty'](_0x5b2b('0x47'))){_0x3c253f[_0x5b2b('0x2c')]=qs['limit'](_0x4ea3b9['query'][_0x5b2b('0x2c')]);_0x3c253f[_0x5b2b('0x2b')]=qs[_0x5b2b('0x2b')](_0x4ea3b9[_0x5b2b('0x42')]['offset']);}return _0x2936f4[_0x5b2b('0x93')](_0x3c253f);}})[_0x5b2b('0x33')](function(_0x1b9fa5){if(_0x1b9fa5){return _0x1b9fa5?{'count':_0x46c4f0,'rows':_0x1b9fa5}:null;}})['then'](respondWithResult(_0xb94c5e,null))['catch'](handleError(_0xb94c5e,null));};exports[_0x5b2b('0x94')]=function(_0x1dcde4,_0x2944b7,_0x10db80){var _0xc58b3f={'raw':!![],'where':{}};var _0x24f445={};var _0x2e1f8c={'count':0x0,'rows':[]};return db[_0x5b2b('0x54')]['findOne']({'where':{'id':_0x1dcde4[_0x5b2b('0x56')]['id']}})['then'](handleEntityNotFound(_0x2944b7,null))[_0x5b2b('0x33')](function(_0x1be9ef){if(_0x1be9ef){_0x24f445[_0x5b2b('0x40')]=_['keys'](db[_0x5b2b('0x95')]['rawAttributes']);_0x24f445[_0x5b2b('0x42')]=_[_0x5b2b('0x41')](_0x1dcde4[_0x5b2b('0x42')]);_0x24f445[_0x5b2b('0x4b')]=_['intersection'](_0x24f445[_0x5b2b('0x40')],_0x24f445[_0x5b2b('0x42')]);_0xc58b3f[_0x5b2b('0x44')]=_[_0x5b2b('0x43')](_0x24f445[_0x5b2b('0x40')],qs[_0x5b2b('0x45')](_0x1dcde4[_0x5b2b('0x42')][_0x5b2b('0x45')]));_0xc58b3f[_0x5b2b('0x44')]=_0xc58b3f[_0x5b2b('0x44')]['length']?_0xc58b3f[_0x5b2b('0x44')]:_0x24f445['model'];if(!_0x1dcde4['query'][_0x5b2b('0x62')](_0x5b2b('0x47'))){_0xc58b3f[_0x5b2b('0x2c')]=qs[_0x5b2b('0x2c')](_0x1dcde4[_0x5b2b('0x42')]['limit']);_0xc58b3f['offset']=qs[_0x5b2b('0x2b')](_0x1dcde4['query'][_0x5b2b('0x2b')]);}_0xc58b3f[_0x5b2b('0x48')]=qs[_0x5b2b('0x49')](_0x1dcde4['query']['sort']);_0xc58b3f[_0x5b2b('0x4a')]=qs[_0x5b2b('0x4b')](_[_0x5b2b('0x4c')](_0x1dcde4[_0x5b2b('0x42')],_0x24f445[_0x5b2b('0x4b')]));_0xc58b3f['where'][_0x5b2b('0x5d')]=_0x1be9ef['id'];if(_0x1dcde4[_0x5b2b('0x42')]['filter']){_0xc58b3f[_0x5b2b('0x4a')]=_[_0x5b2b('0x52')](_0xc58b3f['where'],{'$or':_[_0x5b2b('0x4e')](_0xc58b3f[_0x5b2b('0x44')],function(_0x46373b){var _0x1b3948={};_0x1b3948[_0x46373b]={'$like':'%'+_0x1dcde4[_0x5b2b('0x42')][_0x5b2b('0x4d')]+'%'};return _0x1b3948;})});}if(_0x1dcde4[_0x5b2b('0x42')]['$gte']){var _0x57773c=_0x1dcde4[_0x5b2b('0x42')]['$gte'][_0x5b2b('0x96')](',');var _0x4f8ea3={};_0x4f8ea3[_0x57773c[0x0]]={'$gte':moment(_0x57773c[0x1])[_0x5b2b('0x97')](_0x5b2b('0x98'))};_0xc58b3f[_0x5b2b('0x4a')]=_['merge'](_0xc58b3f[_0x5b2b('0x4a')],_0x4f8ea3);}_0xc58b3f=_[_0x5b2b('0x52')]({},_0xc58b3f,_0x1dcde4['options']);return db[_0x5b2b('0x95')][_0x5b2b('0x2a')]({'where':_0xc58b3f[_0x5b2b('0x4a')]})['then'](function(_0x1de939){_0x2e1f8c[_0x5b2b('0x2a')]=_0x1de939;if(_0x1dcde4[_0x5b2b('0x42')][_0x5b2b('0x58')]){_0xc58b3f[_0x5b2b('0x69')]=[{'all':!![]}];}return db[_0x5b2b('0x95')][_0x5b2b('0x6a')](_0xc58b3f);})[_0x5b2b('0x33')](function(_0x5e0f71){_0x2e1f8c[_0x5b2b('0x55')]=_0x5e0f71;return _0x2e1f8c;});}})[_0x5b2b('0x33')](respondWithFilteredResult(_0x2944b7,_0xc58b3f))['catch'](handleError(_0x2944b7,null));};exports['send']=function(_0x381537,_0x2420a3,_0x461b13){var _0x519aa0,_0x426577={},_0x49cdfb;if(_0x381537[_0x5b2b('0x5a')]['to']){_0x49cdfb=_0x381537[_0x5b2b('0x5a')]['to']['split'](',')[0x0];}return db[_0x5b2b('0x54')][_0x5b2b('0x59')]({'where':{'id':_0x381537[_0x5b2b('0x56')]['id']},'include':[{'model':db[_0x5b2b('0x99')],'as':_0x5b2b('0x9a'),'include':[{'model':db['CmContact'],'as':_0x5b2b('0x9b'),'where':{'email':_0x49cdfb},'limit':0x1,'order':[['updatedAt','DESC']]}]},{'model':db[_0x5b2b('0x3d')],'as':_0x5b2b('0x71'),'raw':!![]}]})['then'](handleEntityNotFound(_0x2420a3,null))[_0x5b2b('0x33')](function(_0x5e03e7){if(_0x5e03e7){_0x519aa0=_0x5e03e7;if(_0x5e03e7[_0x5b2b('0x71')]){if(_[_0x5b2b('0x6e')](_0x381537[_0x5b2b('0x5a')][_0x5b2b('0x9c')])){_0x381537[_0x5b2b('0x5a')][_0x5b2b('0x9c')]=util[_0x5b2b('0x97')](_0x5b2b('0x9d'),_0x5e03e7['name'],_0x5e03e7[_0x5b2b('0x6c')]||_0x5e03e7[_0x5b2b('0x71')][_0x5b2b('0x7a')]);}if(_0x381537[_0x5b2b('0x5a')][_0x5b2b('0x9e')]&&_0x381537[_0x5b2b('0x5a')]['attachments']['length']){for(var _0x51ab15=0x0;_0x51ab15<_0x381537[_0x5b2b('0x5a')][_0x5b2b('0x9e')][_0x5b2b('0x46')];_0x51ab15+=0x1){_0x381537['body'][_0x5b2b('0x9e')][_0x51ab15]={'filename':_0x381537[_0x5b2b('0x5a')][_0x5b2b('0x9e')][_0x51ab15][_0x5b2b('0x39')],'path':path[_0x5b2b('0x9f')](config['root'],_0x5b2b('0xa0'),_0x381537[_0x5b2b('0x5a')][_0x5b2b('0x9e')][_0x51ab15][_0x5b2b('0xa1')])};}}var _0x6a0f1d={'tls':{'rejectUnauthorized':![]}};if(_[_0x5b2b('0x6e')](_0x5e03e7[_0x5b2b('0x71')][_0x5b2b('0x78')])){if(_0x5e03e7[_0x5b2b('0x71')][_0x5b2b('0x75')]){_0x6a0f1d[_0x5b2b('0xa2')]={'user':_0x5e03e7['Smtp'][_0x5b2b('0x7a')],'pass':_0x5e03e7[_0x5b2b('0x71')]['pass']};}_0x6a0f1d[_0x5b2b('0x76')]=_0x5e03e7['Smtp'][_0x5b2b('0x76')];_0x6a0f1d[_0x5b2b('0x77')]=_0x5e03e7[_0x5b2b('0x71')][_0x5b2b('0x77')];_0x6a0f1d[_0x5b2b('0xa3')]=_0x5e03e7[_0x5b2b('0x71')][_0x5b2b('0xa3')];}else{_0x6a0f1d['service']=_0x5e03e7[_0x5b2b('0x71')][_0x5b2b('0x78')];_0x6a0f1d[_0x5b2b('0xa2')]={'user':_0x5e03e7[_0x5b2b('0x71')][_0x5b2b('0x7a')],'pass':_0x5e03e7[_0x5b2b('0x71')][_0x5b2b('0x73')]};}return respondWithRpcPromise(_0x5b2b('0xa4'),_0x5b2b('0xa5'),{'account':_0x6a0f1d,'message':_0x381537['body']});}else{throw new Error(_0x5b2b('0xa6'));}}})[_0x5b2b('0x33')](function(_0x26169f){if(_0x26169f){_0x426577=_0x26169f;if(_0x519aa0['List']){if(_0x519aa0[_0x5b2b('0x9a')][_0x5b2b('0x9b')][_0x5b2b('0x46')]){return _0x519aa0['List'][_0x5b2b('0x9b')][0x0];}else{return db[_0x5b2b('0xa7')][_0x5b2b('0x66')](_['defaults'](_0x381537[_0x5b2b('0x5a')],{'firstName':_0x381537['body']['to'],'email':_0x381537[_0x5b2b('0x5a')]['to'],'phone':_0x381537[_0x5b2b('0x5a')]['to'],'ListId':_0x519aa0[_0x5b2b('0x6d')]}));}}else{throw new Error(_0x5b2b('0xa6'));}}})[_0x5b2b('0x33')](function(_0x42c3a3){if(_0x42c3a3){var _0x5f4b1b={'UserId':_0x381537[_0x5b2b('0x7a')]['id'],'ContactId':_0x42c3a3['id'],'MailAccountId':_0x519aa0['id'],'inReplyTo':_0x426577[_0x5b2b('0xa8')],'to':_0x381537[_0x5b2b('0x5a')]['from'],'cc':_0x381537[_0x5b2b('0x5a')]['cc'],'subject':_0x381537[_0x5b2b('0x5a')][_0x5b2b('0xa9')],'attach':_0x381537['body']['attach'],'firstMsgDirection':_0x5b2b('0xaa'),'lastMsgAt':moment()[_0x5b2b('0x97')]('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgDirection':_0x5b2b('0xaa'),'lastMsgBody':_0x381537[_0x5b2b('0x5a')][_0x5b2b('0x5a')],'Messages':[_[_0x5b2b('0x52')](_0x381537[_0x5b2b('0x5a')],{'messageId':_0x426577[_0x5b2b('0xa8')],'sentAt':moment()[_0x5b2b('0x97')](_0x5b2b('0x98')),'read':!![],'MailAccountId':_0x519aa0['id'],'UserId':_0x381537[_0x5b2b('0x7a')]['id'],'ContactId':_0x42c3a3['id']})]};if(_0x381537[_0x5b2b('0x5a')][_0x5b2b('0xab')]){_0x5f4b1b=_[_0x5b2b('0x52')](_0x5f4b1b,_0x381537[_0x5b2b('0x5a')]['Interaction']);}return db[_0x5b2b('0x85')]['create'](_0x5f4b1b,{'include':[{'model':db[_0x5b2b('0x95')],'as':'Messages'}]});}})['then'](respondWithResult(_0x2420a3,null))['catch'](handleError(_0x2420a3,null));};exports[_0x5b2b('0xac')]=function(_0x21ae3c,_0x127c17,_0x312751){return db[_0x5b2b('0x54')][_0x5b2b('0x59')]({'where':{'id':_0x21ae3c[_0x5b2b('0x56')]['id']},'include':[{'model':db[_0x5b2b('0x3d')],'as':_0x5b2b('0x71'),'raw':!![]}]})[_0x5b2b('0x33')](handleEntityNotFound(_0x127c17,null))['then'](function(_0x38ce6c){if(_0x38ce6c&&_0x38ce6c[_0x5b2b('0x71')]){var _0xb094b2={'id':_0x38ce6c['id'],'tls':{'rejectUnauthorized':![]}};if(_0x38ce6c[_0x5b2b('0x71')][_0x5b2b('0x78')]){_0xb094b2[_0x5b2b('0x78')]=_0x38ce6c[_0x5b2b('0x71')][_0x5b2b('0x78')];}else{_0xb094b2[_0x5b2b('0x76')]=_0x38ce6c[_0x5b2b('0x71')]['host'];_0xb094b2[_0x5b2b('0x77')]=_0x38ce6c[_0x5b2b('0x71')][_0x5b2b('0x77')];_0xb094b2[_0x5b2b('0xa3')]=_0x38ce6c[_0x5b2b('0x71')]['secure'];}if(_0x38ce6c[_0x5b2b('0x71')]['authentication']){_0xb094b2[_0x5b2b('0xa2')]={'user':_0x38ce6c[_0x5b2b('0x71')]['user'],'pass':_0x38ce6c[_0x5b2b('0x71')]['pass']};}return respondWithRpcPromise(_0x5b2b('0xad'),_0x5b2b('0xac'),{'account':_0xb094b2});}})['then'](respondWithResult(_0x127c17,null))[_0x5b2b('0x26')](handleError(_0x127c17,null));};exports[_0x5b2b('0x34')]=function(_0x57d2f9,_0x1e0a38){return db[_0x5b2b('0x54')]['find']({'where':{'id':_0x57d2f9[_0x5b2b('0x56')]['id']}})['then'](handleEntityNotFound(_0x1e0a38,null))[_0x5b2b('0x33')](function(_0x2939f0){if(_0x2939f0&&_0x2939f0['service']){throw new db[(_0x5b2b('0xae'))][(_0x5b2b('0xaf'))]('You\x20can\x27t\x20remove\x20the\x20mail\x20service\x20account');}return _0x2939f0;})[_0x5b2b('0x33')](removeEntity(_0x1e0a38,null))['catch'](handleError(_0x1e0a38,null));};exports[_0x5b2b('0xb0')]=function(_0x31086e,_0x221869,_0x2a87de){return db[_0x5b2b('0x54')][_0x5b2b('0x59')]({'where':{'id':_0x31086e['params']['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0x221869,null))[_0x5b2b('0x33')](function(_0x2d8b6e){if(_0x2d8b6e){return _0x2d8b6e[_0x5b2b('0xb0')](_0x31086e[_0x5b2b('0x5a')]['ids'],_[_0x5b2b('0x87')](_0x31086e[_0x5b2b('0x5a')],[_0x5b2b('0x64'),'id'])||{})['spread'](function(_0x3ae2a0){for(var _0x5f0f49=0x0;_0x5f0f49<_0x31086e[_0x5b2b('0x5a')][_0x5b2b('0x64')][_0x5b2b('0x46')];_0x5f0f49+=0x1){socket['emit'](_0x5b2b('0xb1'),{'UserId':_0x31086e['body'][_0x5b2b('0x64')][_0x5f0f49],'MailAccountId':_0x31086e[_0x5b2b('0x56')]['id']});}return _0x3ae2a0;});}})['then'](respondWithResult(_0x221869,null))[_0x5b2b('0x26')](handleError(_0x221869,null));};exports[_0x5b2b('0xb2')]=function(_0xb8782f,_0x32fab3,_0x50b05a){var _0x2b1f2e;return db[_0x5b2b('0x54')][_0x5b2b('0x59')]({'where':{'id':_0xb8782f[_0x5b2b('0x56')]['id']}})['then'](handleEntityNotFound(_0x32fab3,null))['then'](function(_0x3f5829){if(_0x3f5829){return _0x3f5829[_0x5b2b('0xb2')](_0xb8782f[_0x5b2b('0x42')][_0x5b2b('0x64')])[_0x5b2b('0x33')](function(_0x3d101a){if(_[_0x5b2b('0xb3')](_0xb8782f[_0x5b2b('0x42')][_0x5b2b('0x64')])){for(var _0x1b6828=0x0;_0x1b6828<_0xb8782f['query'][_0x5b2b('0x64')]['length'];_0x1b6828+=0x1){socket['emit'](_0x5b2b('0xb4'),{'UserId':_0xb8782f[_0x5b2b('0x42')][_0x5b2b('0x64')][_0x1b6828],'MailAccountId':_0xb8782f[_0x5b2b('0x56')]['id']});}}else{socket[_0x5b2b('0xb5')](_0x5b2b('0xb4'),{'UserId':_0xb8782f[_0x5b2b('0x42')]['ids'],'MailAccountId':_0xb8782f[_0x5b2b('0x56')]['id']});}});}})[_0x5b2b('0x33')](respondWithStatusCode(_0x32fab3,null))['catch'](handleError(_0x32fab3,null));};exports[_0x5b2b('0xb6')]=function(_0x43f094,_0xdba891,_0x2ec524){var _0x3ec5d7={};var _0x4710bd={};var _0x1f7752;var _0x369e4c;return db[_0x5b2b('0x54')][_0x5b2b('0x60')]({'where':{'id':_0x43f094['params']['id']}})[_0x5b2b('0x33')](handleEntityNotFound(_0xdba891,null))['then'](function(_0x563fc9){if(_0x563fc9){_0x1f7752=_0x563fc9;_0x4710bd['model']=_['keys'](db[_0x5b2b('0x89')][_0x5b2b('0x61')]);_0x4710bd[_0x5b2b('0x42')]=_[_0x5b2b('0x41')](_0x43f094[_0x5b2b('0x42')]);_0x4710bd[_0x5b2b('0x4b')]=_['intersection'](_0x4710bd[_0x5b2b('0x40')],_0x4710bd[_0x5b2b('0x42')]);_0x3ec5d7[_0x5b2b('0x44')]=_[_0x5b2b('0x43')](_0x4710bd[_0x5b2b('0x40')],qs[_0x5b2b('0x45')](_0x43f094[_0x5b2b('0x42')][_0x5b2b('0x45')]));_0x3ec5d7[_0x5b2b('0x44')]=_0x3ec5d7[_0x5b2b('0x44')][_0x5b2b('0x46')]?_0x3ec5d7['attributes']:_0x4710bd['model'];_0x3ec5d7[_0x5b2b('0x48')]=qs[_0x5b2b('0x49')](_0x43f094['query'][_0x5b2b('0x49')]);_0x3ec5d7['where']=qs['filters'](_['pick'](_0x43f094[_0x5b2b('0x42')],_0x4710bd[_0x5b2b('0x4b')]));if(_0x43f094[_0x5b2b('0x42')][_0x5b2b('0x4d')]){_0x3ec5d7[_0x5b2b('0x4a')]=_[_0x5b2b('0x52')](_0x3ec5d7['where'],{'$or':_[_0x5b2b('0x4e')](_0x3ec5d7['attributes'],function(_0x44edc4){var _0x41d5a5={};_0x41d5a5[_0x44edc4]={'$like':'%'+_0x43f094[_0x5b2b('0x42')][_0x5b2b('0x4d')]+'%'};return _0x41d5a5;})});}_0x3ec5d7=_['merge']({},_0x3ec5d7,_0x43f094[_0x5b2b('0x53')]);return _0x1f7752[_0x5b2b('0xb6')](_0x3ec5d7);}})[_0x5b2b('0x33')](function(_0x4c830a){if(_0x4c830a){_0x369e4c=_0x4c830a[_0x5b2b('0x46')];if(!_0x43f094[_0x5b2b('0x42')][_0x5b2b('0x62')]('nolimit')){_0x3ec5d7[_0x5b2b('0x2c')]=qs['limit'](_0x43f094['query'][_0x5b2b('0x2c')]);_0x3ec5d7[_0x5b2b('0x2b')]=qs[_0x5b2b('0x2b')](_0x43f094[_0x5b2b('0x42')]['offset']);}return _0x1f7752[_0x5b2b('0xb6')](_0x3ec5d7);}})[_0x5b2b('0x33')](function(_0x5aa623){if(_0x5aa623){return _0x5aa623?{'count':_0x369e4c,'rows':_0x5aa623}:null;}})['then'](respondWithResult(_0xdba891,null))['catch'](handleError(_0xdba891,null));};
\ No newline at end of file
+var _0xe002=['getSmtp','addSmtp','removeSmtp','setSmtp','MailInteraction','addInteraction','ids','omit','getInteractions','CmContact','Contact','User','Owner','fullname','internal','Tag','color','tag','addApplications','sequelize','MailApplication','priority','getApplications','getMessages','MailMessage','$gte','split','YYYY-MM-DD\x20HH:mm:ss','List','Contacts','updatedAt','DESC','from','format','attachments','root','server/files/attachments','authentication','auth','secure','List\x20not\x20found','messageId','subject','attach','out','Interaction','Messages','VerifySmtp','verifySmtp','Sequelize','addAgents','emit','userMailAccount:save','removeAgents','isArray','userMailAccount:remove','getAgents','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','localhost','./mailAccount.socket','register','jayson/promise','client','http','request','then','MailAccount,\x20%s,\x20%s','request\x20sent','MailAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','status','end','json','count','offset','limit','Content-Range','apply','reject','save','update','destroy','get','MailAccounts','UserProfileResource','sendStatus','stack','send','index','MailServerIn','Imap','MailServerOut','Pause','mandatoryDispositionPause','MailAccount','keys','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filter','map','key','VIRTUAL','field','options','include','findAll','rows','Smtp','rawAttributes','includeAll','merge','find','body','params','describe','addDisposition','MailAccountId','Disposition','create','getDispositions','findOne','pick','removeDispositions','addAnswer','CannedAnswer','removeAnswers','name','email','ListId','isNil','active','description','cservice','cauthentication','user','password','cpassword','host','port','service','cuser','pass','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getImap','removeImap','setImap'];(function(_0x2dd2f6,_0x1b5fdf){var _0x5c0c85=function(_0x309031){while(--_0x309031){_0x2dd2f6['push'](_0x2dd2f6['shift']());}};_0x5c0c85(++_0x1b5fdf);}(_0xe002,0xf7));var _0x2e00=function(_0x43a6cd,_0x503d1a){_0x43a6cd=_0x43a6cd-0x0;var _0x5acb36=_0xe002[_0x43a6cd];return _0x5acb36;};'use strict';var pdf=require(_0x2e00('0x0'));var emlformat=require(_0x2e00('0x1'));var rimraf=require(_0x2e00('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x2e00('0x3'));var rp=require(_0x2e00('0x4'));var moment=require(_0x2e00('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x2e00('0x6'));var util=require(_0x2e00('0x7'));var path=require(_0x2e00('0x8'));var sox=require(_0x2e00('0x9'));var csv=require(_0x2e00('0xa'));var ejs=require(_0x2e00('0xb'));var fs=require('fs');var _=require(_0x2e00('0xc'));var squel=require(_0x2e00('0xd'));var crypto=require('crypto');var jsforce=require(_0x2e00('0xe'));var deskjs=require(_0x2e00('0xf'));var toCsv=require('to-csv');var querystring=require(_0x2e00('0x10'));var Papa=require(_0x2e00('0x11'));var authService=require(_0x2e00('0x12'));var hardwareService=require(_0x2e00('0x13'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x2e00('0x14'))(_0x2e00('0x15'));var utils=require(_0x2e00('0x16'));var config=require('../../config/environment');var db=require(_0x2e00('0x17'))['db'];config[_0x2e00('0x18')]=_[_0x2e00('0x19')](config[_0x2e00('0x18')],{'host':_0x2e00('0x1a'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x2e00('0x1b'))[_0x2e00('0x1c')](socket);var jayson=require(_0x2e00('0x1d'));var client=jayson[_0x2e00('0x1e')][_0x2e00('0x1f')]({'port':0x232b});function respondWithRpcPromise(_0x5eb5da,_0x432c59,_0x53a6fa,_0x1d805a){return new BPromise(function(_0x1247f9,_0x554dd4){var _0x5b46b4=_0x1d805a||client;return _0x5b46b4[_0x2e00('0x20')](_0x5eb5da,_0x53a6fa)[_0x2e00('0x21')](function(_0x45bb7c){logger['info'](_0x2e00('0x22'),_0x432c59,_0x2e00('0x23'));logger['debug'](_0x2e00('0x24'),_0x432c59,_0x2e00('0x23'),JSON[_0x2e00('0x25')](_0x45bb7c));if(_0x45bb7c['error']){if(_0x45bb7c[_0x2e00('0x26')][_0x2e00('0x27')]===0x1f4){logger['error']('MailAccount,\x20%s,\x20%s',_0x432c59,_0x45bb7c['error']['message']);return _0x554dd4(_0x45bb7c[_0x2e00('0x26')][_0x2e00('0x28')]);}logger[_0x2e00('0x26')]('MailAccount,\x20%s,\x20%s',_0x432c59,_0x45bb7c[_0x2e00('0x26')][_0x2e00('0x28')]);return _0x1247f9(_0x45bb7c[_0x2e00('0x26')][_0x2e00('0x28')]);}else{logger[_0x2e00('0x29')](_0x2e00('0x22'),_0x432c59,_0x2e00('0x23'));_0x1247f9(_0x45bb7c[_0x2e00('0x2a')][_0x2e00('0x28')]);}})[_0x2e00('0x2b')](function(_0x3c17f1){logger[_0x2e00('0x26')](_0x2e00('0x22'),_0x432c59,_0x3c17f1);_0x554dd4(_0x3c17f1);});});}function respondWithStatusCode(_0x1bcab6,_0x36d576){_0x36d576=_0x36d576||0xcc;return function(_0x811a65){if(_0x811a65){return _0x1bcab6['sendStatus'](_0x36d576);}return _0x1bcab6[_0x2e00('0x2c')](_0x36d576)[_0x2e00('0x2d')]();};}function respondWithResult(_0xe8ee4,_0x497b2d){_0x497b2d=_0x497b2d||0xc8;return function(_0x378ea8){if(_0x378ea8){return _0xe8ee4[_0x2e00('0x2c')](_0x497b2d)[_0x2e00('0x2e')](_0x378ea8);}};}function respondWithFilteredResult(_0x3e9a6c,_0x3d7dc6){return function(_0x54f5b1){if(_0x54f5b1){var _0x5e61c8=_0x54f5b1[_0x2e00('0x2f')],_0x5a75ad=_0x3d7dc6['offset'],_0x133967=_0x3d7dc6[_0x2e00('0x30')]+_0x3d7dc6[_0x2e00('0x31')],_0x4842c5;if(_0x133967>=_0x5e61c8){_0x133967=_0x5e61c8;_0x4842c5=0xc8;}else{_0x4842c5=0xce;}_0x3e9a6c[_0x2e00('0x2c')](_0x4842c5);return _0x3e9a6c['set'](_0x2e00('0x32'),_0x5a75ad+'-'+_0x133967+'/'+_0x5e61c8)[_0x2e00('0x2e')](_0x54f5b1);}return null;};}function patchUpdates(_0x2754bd){return function(_0x35c411){try{jsonpatch[_0x2e00('0x33')](_0x35c411,_0x2754bd,!![]);}catch(_0x4b1fbd){return BPromise[_0x2e00('0x34')](_0x4b1fbd);}return _0x35c411[_0x2e00('0x35')]();};}function saveUpdates(_0x2b78bc,_0x22bc40){return function(_0x249d7b){if(_0x249d7b){return _0x249d7b[_0x2e00('0x36')](_0x2b78bc)[_0x2e00('0x21')](function(_0x302065){return _0x302065;});}return null;};}function removeEntity(_0x4c1f3a,_0x161e47){return function(_0x5aa876){if(_0x5aa876){return _0x5aa876[_0x2e00('0x37')]()[_0x2e00('0x21')](function(){var _0x560e01=_0x5aa876[_0x2e00('0x38')]({'plain':!![]});var _0x25be83=_0x2e00('0x39');return db[_0x2e00('0x3a')][_0x2e00('0x37')]({'where':{'type':_0x25be83,'resourceId':_0x560e01['id']}})['then'](function(){return _0x5aa876;});})[_0x2e00('0x21')](function(){_0x4c1f3a[_0x2e00('0x2c')](0xcc)[_0x2e00('0x2d')]();});}};}function handleEntityNotFound(_0x5754c9,_0x17e785){return function(_0x703de2){if(!_0x703de2){_0x5754c9[_0x2e00('0x3b')](0x194);}return _0x703de2;};}function handleError(_0x2be216,_0x47657b){_0x47657b=_0x47657b||0x1f4;return function(_0x2ead67){logger[_0x2e00('0x26')](_0x2ead67[_0x2e00('0x3c')]);if(_0x2ead67['name']){delete _0x2ead67['name'];}_0x2be216['status'](_0x47657b)[_0x2e00('0x3d')](_0x2ead67);};}exports[_0x2e00('0x3e')]=function(_0x34bbcb,_0x30381b){var _0x53f876={'include':[{'model':db[_0x2e00('0x3f')],'as':_0x2e00('0x40')},{'model':db[_0x2e00('0x41')],'as':'Smtp'},{'model':db[_0x2e00('0x42')],'as':_0x2e00('0x43')}]},_0x23affb={},_0x224832={'count':0x0,'rows':[]};var _0x5eab34=db[_0x2e00('0x44')]['rawAttributes'];_0x23affb['model']=_[_0x2e00('0x45')](_0x5eab34);_0x23affb['query']=_[_0x2e00('0x45')](_0x34bbcb[_0x2e00('0x46')]);_0x23affb[_0x2e00('0x47')]=_['intersection'](_0x23affb['model'],_0x23affb[_0x2e00('0x46')]);_0x53f876['attributes']=_[_0x2e00('0x48')](_0x23affb[_0x2e00('0x49')],qs[_0x2e00('0x4a')](_0x34bbcb[_0x2e00('0x46')][_0x2e00('0x4a')]));_0x53f876[_0x2e00('0x4b')]=_0x53f876[_0x2e00('0x4b')][_0x2e00('0x4c')]?_0x53f876[_0x2e00('0x4b')]:_0x23affb['model'];if(!_0x34bbcb[_0x2e00('0x46')][_0x2e00('0x4d')](_0x2e00('0x4e'))){_0x53f876['limit']=qs[_0x2e00('0x31')](_0x34bbcb[_0x2e00('0x46')][_0x2e00('0x31')]);_0x53f876[_0x2e00('0x30')]=qs[_0x2e00('0x30')](_0x34bbcb[_0x2e00('0x46')]['offset']);}_0x53f876[_0x2e00('0x4f')]=qs[_0x2e00('0x50')](_0x34bbcb[_0x2e00('0x46')]['sort']);_0x53f876[_0x2e00('0x51')]=qs[_0x2e00('0x47')](_['pick'](_0x34bbcb[_0x2e00('0x46')],_0x23affb[_0x2e00('0x47')]));if(_0x34bbcb[_0x2e00('0x46')][_0x2e00('0x52')]){_0x53f876[_0x2e00('0x51')]=_['merge'](_0x53f876[_0x2e00('0x51')],{'$or':_[_0x2e00('0x53')](_0x5eab34,function(_0x4def49){if(_0x4def49['type'][_0x2e00('0x54')]!==_0x2e00('0x55')){var _0x580df6={};_0x580df6[_0x4def49[_0x2e00('0x56')]]={'$like':'%'+_0x34bbcb[_0x2e00('0x46')][_0x2e00('0x52')]+'%'};return _0x580df6;}})});}_0x53f876=_['merge']({},_0x53f876,_0x34bbcb[_0x2e00('0x57')]);var _0x351f1d={'where':_0x53f876[_0x2e00('0x51')]};return db['MailAccount']['count'](_0x351f1d)[_0x2e00('0x21')](function(_0xca2345){_0x224832[_0x2e00('0x2f')]=_0xca2345;if(_0x34bbcb[_0x2e00('0x46')]['includeAll']){_0x53f876[_0x2e00('0x58')]=[{'all':!![]}];}return db[_0x2e00('0x44')][_0x2e00('0x59')](_0x53f876);})[_0x2e00('0x21')](function(_0x4ced50){_0x224832[_0x2e00('0x5a')]=_0x4ced50;return _0x224832;})[_0x2e00('0x21')](respondWithFilteredResult(_0x30381b,_0x53f876))['catch'](handleError(_0x30381b,null));};exports['show']=function(_0x22dcfd,_0x1fa1cb){var _0x4d6dd6={'raw':![],'where':{'id':_0x22dcfd['params']['id']},'include':[{'model':db[_0x2e00('0x3f')],'as':_0x2e00('0x40')},{'model':db[_0x2e00('0x41')],'as':_0x2e00('0x5b')},{'model':db['Pause'],'as':'mandatoryDispositionPause'}]},_0x13d6a0={};_0x13d6a0[_0x2e00('0x49')]=_['keys'](db[_0x2e00('0x44')][_0x2e00('0x5c')]);_0x13d6a0[_0x2e00('0x46')]=_[_0x2e00('0x45')](_0x22dcfd['query']);_0x13d6a0[_0x2e00('0x47')]=_[_0x2e00('0x48')](_0x13d6a0['model'],_0x13d6a0['query']);_0x4d6dd6[_0x2e00('0x4b')]=_[_0x2e00('0x48')](_0x13d6a0[_0x2e00('0x49')],qs[_0x2e00('0x4a')](_0x22dcfd['query'][_0x2e00('0x4a')]));_0x4d6dd6['attributes']=_0x4d6dd6['attributes'][_0x2e00('0x4c')]?_0x4d6dd6[_0x2e00('0x4b')]:_0x13d6a0[_0x2e00('0x49')];if(_0x22dcfd[_0x2e00('0x46')][_0x2e00('0x5d')]){_0x4d6dd6[_0x2e00('0x58')]=[{'all':!![]}];}_0x4d6dd6=_[_0x2e00('0x5e')]({},_0x4d6dd6,_0x22dcfd['options']);return db[_0x2e00('0x44')][_0x2e00('0x5f')](_0x4d6dd6)[_0x2e00('0x21')](handleEntityNotFound(_0x1fa1cb,null))[_0x2e00('0x21')](respondWithResult(_0x1fa1cb,null))[_0x2e00('0x2b')](handleError(_0x1fa1cb,null));};exports[_0x2e00('0x36')]=function(_0x16a34c,_0x37094a){if(_0x16a34c['body']['id']){delete _0x16a34c[_0x2e00('0x60')]['id'];}return db[_0x2e00('0x44')]['find']({'where':{'id':_0x16a34c[_0x2e00('0x61')]['id']},'include':[{'model':db[_0x2e00('0x3f')],'as':'Imap'},{'model':db[_0x2e00('0x41')],'as':_0x2e00('0x5b')},{'model':db[_0x2e00('0x42')],'as':_0x2e00('0x43')}]})[_0x2e00('0x21')](handleEntityNotFound(_0x37094a,null))[_0x2e00('0x21')](saveUpdates(_0x16a34c[_0x2e00('0x60')],null))['then'](function(_0x456a38){if(_0x456a38&&_0x16a34c['body'][_0x2e00('0x40')]){return db[_0x2e00('0x3f')][_0x2e00('0x36')](_0x16a34c[_0x2e00('0x60')][_0x2e00('0x40')],{'where':{'MailAccountId':_0x456a38['id']}})[_0x2e00('0x21')](function(){return _0x456a38;});}return _0x456a38;})[_0x2e00('0x21')](function(_0x42647d){if(_0x42647d&&_0x16a34c[_0x2e00('0x60')][_0x2e00('0x5b')]){return db[_0x2e00('0x41')]['update'](_0x16a34c['body']['Smtp'],{'where':{'MailAccountId':_0x42647d['id']}})[_0x2e00('0x21')](function(){return _0x42647d;});}return _0x42647d;})['then'](respondWithResult(_0x37094a,null))['catch'](handleError(_0x37094a,null));};exports[_0x2e00('0x62')]=function(_0x32555b,_0x45f8e9){return db[_0x2e00('0x44')][_0x2e00('0x62')]()[_0x2e00('0x21')](respondWithResult(_0x45f8e9,null))['catch'](handleError(_0x45f8e9,null));};exports[_0x2e00('0x63')]=function(_0x383cf2,_0x108589,_0x2aeebd){if(_0x383cf2[_0x2e00('0x60')]['id']){delete _0x383cf2[_0x2e00('0x60')]['id'];}return db[_0x2e00('0x44')][_0x2e00('0x5f')]({'where':{'id':_0x383cf2[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x108589,null))[_0x2e00('0x21')](function(_0x5ceb89){if(_0x5ceb89){_0x383cf2[_0x2e00('0x60')][_0x2e00('0x64')]=_0x5ceb89['id'];return db[_0x2e00('0x65')][_0x2e00('0x66')](_0x383cf2[_0x2e00('0x60')]);}})[_0x2e00('0x21')](respondWithResult(_0x108589,null))[_0x2e00('0x2b')](handleError(_0x108589,null));};exports[_0x2e00('0x67')]=function(_0x33a2fa,_0x4f4136,_0x5a5128){var _0x52b367={'raw':![],'where':{}};var _0x125972={};var _0x5f46f3={'count':0x0,'rows':[]};return db['MailAccount'][_0x2e00('0x68')]({'where':{'id':_0x33a2fa['params']['id']}})['then'](handleEntityNotFound(_0x4f4136,null))['then'](function(_0x5c17df){if(_0x5c17df){_0x125972[_0x2e00('0x49')]=_['keys'](db[_0x2e00('0x65')][_0x2e00('0x5c')]);_0x125972['query']=_[_0x2e00('0x45')](_0x33a2fa[_0x2e00('0x46')]);_0x125972[_0x2e00('0x47')]=_[_0x2e00('0x48')](_0x125972[_0x2e00('0x49')],_0x125972['query']);_0x52b367[_0x2e00('0x4b')]=_[_0x2e00('0x48')](_0x125972['model'],qs[_0x2e00('0x4a')](_0x33a2fa['query'][_0x2e00('0x4a')]));_0x52b367[_0x2e00('0x4b')]=_0x52b367[_0x2e00('0x4b')]['length']?_0x52b367[_0x2e00('0x4b')]:_0x125972[_0x2e00('0x49')];if(!_0x33a2fa[_0x2e00('0x46')][_0x2e00('0x4d')](_0x2e00('0x4e'))){_0x52b367[_0x2e00('0x31')]=qs['limit'](_0x33a2fa[_0x2e00('0x46')][_0x2e00('0x31')]);_0x52b367[_0x2e00('0x30')]=qs[_0x2e00('0x30')](_0x33a2fa[_0x2e00('0x46')][_0x2e00('0x30')]);}_0x52b367[_0x2e00('0x4f')]=qs[_0x2e00('0x50')](_0x33a2fa['query'][_0x2e00('0x50')]);_0x52b367[_0x2e00('0x51')]=qs[_0x2e00('0x47')](_[_0x2e00('0x69')](_0x33a2fa[_0x2e00('0x46')],_0x125972[_0x2e00('0x47')]));_0x52b367[_0x2e00('0x51')][_0x2e00('0x64')]=_0x5c17df['id'];if(_0x33a2fa[_0x2e00('0x46')][_0x2e00('0x52')]){_0x52b367[_0x2e00('0x51')]=_[_0x2e00('0x5e')](_0x52b367[_0x2e00('0x51')],{'$or':_[_0x2e00('0x53')](_0x52b367[_0x2e00('0x4b')],function(_0x13fbb1){var _0x2c3b10={};_0x2c3b10[_0x13fbb1]={'$like':'%'+_0x33a2fa[_0x2e00('0x46')][_0x2e00('0x52')]+'%'};return _0x2c3b10;})});}_0x52b367=_[_0x2e00('0x5e')]({},_0x52b367,_0x33a2fa[_0x2e00('0x57')]);return db['Disposition']['count']({'where':_0x52b367[_0x2e00('0x51')]})[_0x2e00('0x21')](function(_0x50fb72){_0x5f46f3[_0x2e00('0x2f')]=_0x50fb72;if(_0x33a2fa[_0x2e00('0x46')][_0x2e00('0x5d')]){_0x52b367[_0x2e00('0x58')]=[{'all':!![]}];}return db[_0x2e00('0x65')][_0x2e00('0x59')](_0x52b367);})[_0x2e00('0x21')](function(_0x64a7ba){_0x5f46f3[_0x2e00('0x5a')]=_0x64a7ba;return _0x5f46f3;});}})['then'](respondWithFilteredResult(_0x4f4136,_0x52b367))[_0x2e00('0x2b')](handleError(_0x4f4136,null));};exports['removeDispositions']=function(_0x2f2a5d,_0xa3c636,_0x5cb2a8){var _0x2dbb13;return db['MailAccount'][_0x2e00('0x5f')]({'where':{'id':_0x2f2a5d[_0x2e00('0x61')]['id']}})['then'](handleEntityNotFound(_0xa3c636,null))[_0x2e00('0x21')](function(_0x4f581a){if(_0x4f581a){return _0x4f581a[_0x2e00('0x6a')](_0x2f2a5d[_0x2e00('0x46')]['ids']);}})['then'](respondWithStatusCode(_0xa3c636,null))[_0x2e00('0x2b')](handleError(_0xa3c636,null));};exports[_0x2e00('0x6b')]=function(_0x36ae72,_0x31680d,_0x588a61){if(_0x36ae72['body']['id']){delete _0x36ae72['body']['id'];}return db[_0x2e00('0x44')]['find']({'where':{'id':_0x36ae72[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x31680d,null))['then'](function(_0x444ef6){if(_0x444ef6){_0x36ae72['body'][_0x2e00('0x64')]=_0x444ef6['id'];return db['CannedAnswer'][_0x2e00('0x66')](_0x36ae72[_0x2e00('0x60')]);}})[_0x2e00('0x21')](respondWithResult(_0x31680d,null))[_0x2e00('0x2b')](handleError(_0x31680d,null));};exports['getAnswers']=function(_0x338729,_0x15e4e3,_0xc657a6){var _0x3e039f={'raw':![],'where':{}};var _0xcf4d6d={};var _0x4e0705={'count':0x0,'rows':[]};return db['MailAccount']['findOne']({'where':{'id':_0x338729[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x15e4e3,null))[_0x2e00('0x21')](function(_0x56c7d9){if(_0x56c7d9){_0xcf4d6d[_0x2e00('0x49')]=_[_0x2e00('0x45')](db['CannedAnswer']['rawAttributes']);_0xcf4d6d[_0x2e00('0x46')]=_[_0x2e00('0x45')](_0x338729['query']);_0xcf4d6d[_0x2e00('0x47')]=_[_0x2e00('0x48')](_0xcf4d6d[_0x2e00('0x49')],_0xcf4d6d[_0x2e00('0x46')]);_0x3e039f[_0x2e00('0x4b')]=_[_0x2e00('0x48')](_0xcf4d6d[_0x2e00('0x49')],qs['fields'](_0x338729['query'][_0x2e00('0x4a')]));_0x3e039f[_0x2e00('0x4b')]=_0x3e039f[_0x2e00('0x4b')][_0x2e00('0x4c')]?_0x3e039f[_0x2e00('0x4b')]:_0xcf4d6d['model'];if(!_0x338729['query'][_0x2e00('0x4d')]('nolimit')){_0x3e039f[_0x2e00('0x31')]=qs[_0x2e00('0x31')](_0x338729['query']['limit']);_0x3e039f[_0x2e00('0x30')]=qs['offset'](_0x338729[_0x2e00('0x46')][_0x2e00('0x30')]);}_0x3e039f[_0x2e00('0x4f')]=qs['sort'](_0x338729[_0x2e00('0x46')]['sort']);_0x3e039f[_0x2e00('0x51')]=qs['filters'](_['pick'](_0x338729[_0x2e00('0x46')],_0xcf4d6d[_0x2e00('0x47')]));_0x3e039f[_0x2e00('0x51')]['MailAccountId']=_0x56c7d9['id'];if(_0x338729[_0x2e00('0x46')][_0x2e00('0x52')]){_0x3e039f[_0x2e00('0x51')]=_['merge'](_0x3e039f[_0x2e00('0x51')],{'$or':_[_0x2e00('0x53')](_0x3e039f[_0x2e00('0x4b')],function(_0x5db4d7){var _0x1e2fa1={};_0x1e2fa1[_0x5db4d7]={'$like':'%'+_0x338729['query'][_0x2e00('0x52')]+'%'};return _0x1e2fa1;})});}_0x3e039f=_['merge']({},_0x3e039f,_0x338729[_0x2e00('0x57')]);return db['CannedAnswer'][_0x2e00('0x2f')]({'where':_0x3e039f[_0x2e00('0x51')]})['then'](function(_0x22b2f5){_0x4e0705[_0x2e00('0x2f')]=_0x22b2f5;if(_0x338729[_0x2e00('0x46')][_0x2e00('0x5d')]){_0x3e039f[_0x2e00('0x58')]=[{'all':!![]}];}return db[_0x2e00('0x6c')]['findAll'](_0x3e039f);})[_0x2e00('0x21')](function(_0x21392e){_0x4e0705[_0x2e00('0x5a')]=_0x21392e;return _0x4e0705;});}})[_0x2e00('0x21')](respondWithFilteredResult(_0x15e4e3,_0x3e039f))[_0x2e00('0x2b')](handleError(_0x15e4e3,null));};exports[_0x2e00('0x6d')]=function(_0x267420,_0x337d75,_0xbcb0ae){var _0x1e3242;return db['MailAccount'][_0x2e00('0x5f')]({'where':{'id':_0x267420[_0x2e00('0x61')]['id']}})['then'](handleEntityNotFound(_0x337d75,null))['then'](function(_0x1c27b5){if(_0x1c27b5){return _0x1c27b5[_0x2e00('0x6d')](_0x267420[_0x2e00('0x46')]['ids']);}})[_0x2e00('0x21')](respondWithStatusCode(_0x337d75,null))[_0x2e00('0x2b')](handleError(_0x337d75,null));};exports[_0x2e00('0x66')]=function(_0x3366f4,_0x297496){var _0x14eeb9={'name':_0x3366f4['body'][_0x2e00('0x6e')],'key':_0x3366f4[_0x2e00('0x60')]['key'],'email':_0x3366f4[_0x2e00('0x60')][_0x2e00('0x6f')],'ListId':_0x3366f4[_0x2e00('0x60')][_0x2e00('0x70')],'active':!_[_0x2e00('0x71')](_0x3366f4['body'][_0x2e00('0x72')])?_0x3366f4[_0x2e00('0x60')][_0x2e00('0x72')]:!![],'description':_0x3366f4['body'][_0x2e00('0x73')]||null,'Imap':{},'Smtp':{}};if(_[_0x2e00('0x71')](_0x3366f4[_0x2e00('0x60')][_0x2e00('0x74')])){if(_0x3366f4['body'][_0x2e00('0x75')]){_0x14eeb9[_0x2e00('0x40')][_0x2e00('0x76')]=_0x14eeb9[_0x2e00('0x5b')]['user']=_0x3366f4[_0x2e00('0x60')]['cuser'];_0x14eeb9[_0x2e00('0x40')][_0x2e00('0x77')]=_0x14eeb9['Smtp']['pass']=_0x3366f4[_0x2e00('0x60')][_0x2e00('0x78')];}else{_0x14eeb9['Imap']['authentication']=_0x14eeb9[_0x2e00('0x5b')]['authentication']=![];}_0x14eeb9[_0x2e00('0x40')][_0x2e00('0x79')]=_0x3366f4[_0x2e00('0x60')][_0x2e00('0x40')]['host'];_0x14eeb9[_0x2e00('0x40')][_0x2e00('0x7a')]=_0x3366f4[_0x2e00('0x60')][_0x2e00('0x40')][_0x2e00('0x7a')];_0x14eeb9[_0x2e00('0x5b')][_0x2e00('0x79')]=_0x3366f4['body']['Smtp'][_0x2e00('0x79')];_0x14eeb9['Smtp']['port']=_0x3366f4[_0x2e00('0x60')][_0x2e00('0x5b')][_0x2e00('0x7a')];}else{_0x14eeb9['Imap'][_0x2e00('0x7b')]=_0x14eeb9[_0x2e00('0x5b')][_0x2e00('0x7b')]=_0x3366f4['body'][_0x2e00('0x74')];_0x14eeb9[_0x2e00('0x40')][_0x2e00('0x76')]=_0x14eeb9[_0x2e00('0x5b')][_0x2e00('0x76')]=_0x3366f4['body'][_0x2e00('0x7c')];_0x14eeb9[_0x2e00('0x40')][_0x2e00('0x77')]=_0x14eeb9['Smtp'][_0x2e00('0x7d')]=_0x3366f4[_0x2e00('0x60')][_0x2e00('0x78')];}return db[_0x2e00('0x44')][_0x2e00('0x66')](_0x14eeb9,{'include':[{'model':db[_0x2e00('0x41')],'as':_0x2e00('0x5b')},{'model':db[_0x2e00('0x3f')],'as':_0x2e00('0x40')}]})['then'](function(_0x59c668){var _0x5dc32a=_0x3366f4[_0x2e00('0x76')][_0x2e00('0x38')]({'plain':!![]});if(!_0x5dc32a)throw new Error(_0x2e00('0x7e'));if(_0x5dc32a['role']===_0x2e00('0x76')){var _0x444625=_0x59c668[_0x2e00('0x38')]({'plain':!![]});return db[_0x2e00('0x7f')][_0x2e00('0x5f')]({'where':{'name':_0x2e00('0x39'),'userProfileId':_0x5dc32a['userProfileId']},'raw':!![]})[_0x2e00('0x21')](function(_0x130626){if(_0x130626&&_0x130626[_0x2e00('0x80')]===0x0){return db[_0x2e00('0x3a')]['create']({'name':_0x444625[_0x2e00('0x6e')],'resourceId':_0x444625['id'],'type':_0x130626['name'],'sectionId':_0x130626['id']},{})['then'](function(){return _0x59c668;});}else{return _0x59c668;}})[_0x2e00('0x2b')](function(_0x44b68d){logger[_0x2e00('0x26')](_0x2e00('0x81'),_0x44b68d);throw _0x44b68d;});}return _0x59c668;})[_0x2e00('0x21')](respondWithResult(_0x297496,0xc9))[_0x2e00('0x2b')](handleError(_0x297496,null));};exports['getImap']=function(_0x5c121d,_0x4f4d22,_0x1011ba){return db[_0x2e00('0x44')][_0x2e00('0x68')]({'where':{'id':_0x5c121d[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x4f4d22,null))[_0x2e00('0x21')](function(_0x1d8ae7){if(_0x1d8ae7){return _0x1d8ae7[_0x2e00('0x82')]();}return null;})['then'](respondWithResult(_0x4f4d22,null))[_0x2e00('0x2b')](handleError(_0x4f4d22,null));};exports['addImap']=function(_0x32bc95,_0x22115,_0x8a31ae){if(_0x32bc95[_0x2e00('0x60')]['id']){delete _0x32bc95['body']['id'];}return db[_0x2e00('0x44')][_0x2e00('0x5f')]({'where':{'id':_0x32bc95[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x22115,null))['then'](function(_0x52a489){if(_0x52a489){_0x32bc95[_0x2e00('0x60')][_0x2e00('0x64')]=_0x52a489['id'];return db[_0x2e00('0x3f')][_0x2e00('0x66')](_0x32bc95[_0x2e00('0x60')]);}})[_0x2e00('0x21')](respondWithResult(_0x22115,null))[_0x2e00('0x2b')](handleError(_0x22115,null));};exports[_0x2e00('0x83')]=function(_0x7a4fe2,_0x43df39,_0x4403cc){return db['MailAccount']['findOne']({'where':{'id':_0x7a4fe2[_0x2e00('0x61')]['id']}})['then'](handleEntityNotFound(_0x43df39,null))[_0x2e00('0x21')](function(_0x2fb0e6){if(_0x2fb0e6){return _0x2fb0e6[_0x2e00('0x84')](null);}return null;})[_0x2e00('0x21')](respondWithStatusCode(_0x43df39,null))[_0x2e00('0x2b')](handleError(_0x43df39,null));};exports[_0x2e00('0x85')]=function(_0x10eb15,_0x32d8d1,_0x3f05b2){return db['MailAccount'][_0x2e00('0x68')]({'where':{'id':_0x10eb15[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x32d8d1,null))[_0x2e00('0x21')](function(_0x2f24dd){if(_0x2f24dd){return _0x2f24dd['getSmtp']();}return null;})[_0x2e00('0x21')](respondWithResult(_0x32d8d1,null))[_0x2e00('0x2b')](handleError(_0x32d8d1,null));};exports[_0x2e00('0x86')]=function(_0x5cef2a,_0x49de2a,_0x48ce23){if(_0x5cef2a['body']['id']){delete _0x5cef2a['body']['id'];}return db[_0x2e00('0x44')][_0x2e00('0x5f')]({'where':{'id':_0x5cef2a['params']['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x49de2a,null))[_0x2e00('0x21')](function(_0x252ee6){if(_0x252ee6){_0x5cef2a[_0x2e00('0x60')][_0x2e00('0x64')]=_0x252ee6['id'];return db[_0x2e00('0x41')][_0x2e00('0x66')](_0x5cef2a[_0x2e00('0x60')]);}})['then'](respondWithResult(_0x49de2a,null))['catch'](handleError(_0x49de2a,null));};exports[_0x2e00('0x87')]=function(_0x4a136b,_0x3e1dff,_0x3cf069){return db[_0x2e00('0x44')][_0x2e00('0x68')]({'where':{'id':_0x4a136b['params']['id']}})['then'](handleEntityNotFound(_0x3e1dff,null))['then'](function(_0x3dec83){if(_0x3dec83){return _0x3dec83[_0x2e00('0x88')](null);}return null;})['then'](respondWithStatusCode(_0x3e1dff,null))[_0x2e00('0x2b')](handleError(_0x3e1dff,null));};exports['addInteraction']=function(_0x5ec633,_0x2dd1c0,_0x470fed){return db[_0x2e00('0x89')][_0x2e00('0x5f')]({'where':{'id':_0x5ec633[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x2dd1c0,null))[_0x2e00('0x21')](function(_0x174d7e){if(_0x174d7e){return _0x174d7e[_0x2e00('0x8a')](_0x5ec633[_0x2e00('0x60')][_0x2e00('0x8b')],_[_0x2e00('0x8c')](_0x5ec633[_0x2e00('0x60')],['ids','id'])||{});}})[_0x2e00('0x21')](respondWithResult(_0x2dd1c0,null))['catch'](handleError(_0x2dd1c0,null));};exports[_0x2e00('0x8d')]=function(_0x5551c2,_0x5d7cd6,_0xbab63){var _0x258d85={'raw':![],'where':{}};var _0xb3e88a={};var _0x41b8c9={'count':0x0,'rows':[]};return db[_0x2e00('0x44')][_0x2e00('0x68')]({'where':{'id':_0x5551c2['params']['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x5d7cd6,null))['then'](function(_0x487293){if(_0x487293){_0xb3e88a['model']=_[_0x2e00('0x45')](db[_0x2e00('0x89')][_0x2e00('0x5c')]);_0xb3e88a[_0x2e00('0x46')]=_[_0x2e00('0x45')](_0x5551c2[_0x2e00('0x46')]);_0xb3e88a[_0x2e00('0x47')]=_[_0x2e00('0x48')](_0xb3e88a['model'],_0xb3e88a[_0x2e00('0x46')]);_0x258d85['attributes']=_['intersection'](_0xb3e88a['model'],qs['fields'](_0x5551c2['query'][_0x2e00('0x4a')]));_0x258d85['attributes']=_0x258d85['attributes'][_0x2e00('0x4c')]?_0x258d85['attributes']:_0xb3e88a[_0x2e00('0x49')];if(!_0x5551c2[_0x2e00('0x46')]['hasOwnProperty']('nolimit')){_0x258d85[_0x2e00('0x31')]=qs[_0x2e00('0x31')](_0x5551c2[_0x2e00('0x46')][_0x2e00('0x31')]);_0x258d85[_0x2e00('0x30')]=qs[_0x2e00('0x30')](_0x5551c2[_0x2e00('0x46')][_0x2e00('0x30')]);}_0x258d85[_0x2e00('0x4f')]=qs[_0x2e00('0x50')](_0x5551c2['query'][_0x2e00('0x50')]);_0x258d85['where']=qs[_0x2e00('0x47')](_[_0x2e00('0x69')](_0x5551c2[_0x2e00('0x46')],_0xb3e88a['filters']));_0x258d85['where'][_0x2e00('0x64')]=_0x487293['id'];if(_0x5551c2[_0x2e00('0x46')][_0x2e00('0x52')]){_0x258d85[_0x2e00('0x51')]=_['merge'](_0x258d85[_0x2e00('0x51')],{'$or':_['map'](_0x258d85[_0x2e00('0x4b')],function(_0x5259ef){var _0x2438b2={};_0x2438b2[_0x5259ef]={'$like':'%'+_0x5551c2[_0x2e00('0x46')][_0x2e00('0x52')]+'%'};return _0x2438b2;})});}_0x258d85=_[_0x2e00('0x5e')]({},_0x258d85,_0x5551c2[_0x2e00('0x57')]);return db['MailInteraction']['count']({'where':_0x258d85[_0x2e00('0x51')]})[_0x2e00('0x21')](function(_0x28cbc3){_0x41b8c9['count']=_0x28cbc3;if(_0x5551c2[_0x2e00('0x46')][_0x2e00('0x5d')]){_0x258d85['include']=[{'model':db[_0x2e00('0x8e')],'as':_0x2e00('0x8f'),'required':![]},{'model':db[_0x2e00('0x90')],'as':_0x2e00('0x91'),'attributes':[_0x2e00('0x6e'),_0x2e00('0x92'),_0x2e00('0x93')],'required':![]},{'model':db[_0x2e00('0x94')],'as':'Tags','attributes':['id',_0x2e00('0x6e'),_0x2e00('0x95')],'where':_0x5551c2[_0x2e00('0x46')]['tag']?{'id':_0x5551c2[_0x2e00('0x46')][_0x2e00('0x96')]}:undefined,'required':_0x5551c2['query'][_0x2e00('0x96')]?!![]:![]}];}return db[_0x2e00('0x89')][_0x2e00('0x59')](_0x258d85);})[_0x2e00('0x21')](function(_0x33742e){_0x41b8c9[_0x2e00('0x5a')]=_0x33742e;return _0x41b8c9;});}})[_0x2e00('0x21')](respondWithFilteredResult(_0x5d7cd6,_0x258d85))[_0x2e00('0x2b')](handleError(_0x5d7cd6,null));};exports[_0x2e00('0x97')]=function(_0x4c580b,_0x17fe0d,_0x58b3bc){return db['MailAccount'][_0x2e00('0x68')]({'where':{'id':_0x4c580b[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x17fe0d,null))[_0x2e00('0x21')](function(_0x51756f){if(_0x51756f){return db[_0x2e00('0x98')]['transaction'](function(_0x28a9aa){return db[_0x2e00('0x99')][_0x2e00('0x37')]({'where':{'MailAccountId':_0x4c580b['params']['id']},'transaction':_0x28a9aa})['then'](function(_0x2f0aae){var _0x164b1d=_['map'](_0x4c580b[_0x2e00('0x60')],function(_0x3be943){_0x3be943[_0x2e00('0x64')]=_0x4c580b[_0x2e00('0x61')]['id'];return _0x3be943;});return db[_0x2e00('0x99')]['bulkCreate'](_0x164b1d,{'transaction':_0x28a9aa});});})['then'](function(){return db[_0x2e00('0x99')]['findAndCountAll']({'where':{'MailAccountId':_0x4c580b[_0x2e00('0x61')]['id']},'order':_0x2e00('0x9a')});});}})[_0x2e00('0x21')](respondWithResult(_0x17fe0d,null))['catch'](handleError(_0x17fe0d,null));};exports['getApplications']=function(_0x49e79b,_0x14f700,_0x48ad52){var _0x527eed={};var _0x4f4352={};var _0x40d1cd;var _0x2dae12;return db[_0x2e00('0x44')][_0x2e00('0x68')]({'where':{'id':_0x49e79b[_0x2e00('0x61')]['id']}})['then'](handleEntityNotFound(_0x14f700,null))[_0x2e00('0x21')](function(_0xbce594){if(_0xbce594){_0x40d1cd=_0xbce594;_0x4f4352['model']=_[_0x2e00('0x45')](db[_0x2e00('0x99')][_0x2e00('0x5c')]);_0x4f4352[_0x2e00('0x46')]=_[_0x2e00('0x45')](_0x49e79b['query']);_0x4f4352[_0x2e00('0x47')]=_[_0x2e00('0x48')](_0x4f4352[_0x2e00('0x49')],_0x4f4352[_0x2e00('0x46')]);_0x527eed[_0x2e00('0x4b')]=_['intersection'](_0x4f4352[_0x2e00('0x49')],qs[_0x2e00('0x4a')](_0x49e79b[_0x2e00('0x46')]['fields']));_0x527eed['attributes']=_0x527eed[_0x2e00('0x4b')][_0x2e00('0x4c')]?_0x527eed[_0x2e00('0x4b')]:_0x4f4352['model'];_0x527eed[_0x2e00('0x4f')]=qs[_0x2e00('0x50')](_0x49e79b[_0x2e00('0x46')]['sort']);_0x527eed[_0x2e00('0x51')]=qs[_0x2e00('0x47')](_[_0x2e00('0x69')](_0x49e79b[_0x2e00('0x46')],_0x4f4352[_0x2e00('0x47')]));if(_0x49e79b[_0x2e00('0x46')]['filter']){_0x527eed[_0x2e00('0x51')]=_[_0x2e00('0x5e')](_0x527eed[_0x2e00('0x51')],{'$or':_[_0x2e00('0x53')](_0x527eed[_0x2e00('0x4b')],function(_0x1ba7d6){var _0x8211f2={};_0x8211f2[_0x1ba7d6]={'$like':'%'+_0x49e79b[_0x2e00('0x46')][_0x2e00('0x52')]+'%'};return _0x8211f2;})});}_0x527eed=_['merge']({},_0x527eed,_0x49e79b[_0x2e00('0x57')]);return _0x40d1cd['getApplications'](_0x527eed);}})[_0x2e00('0x21')](function(_0x46ee29){if(_0x46ee29){_0x2dae12=_0x46ee29['length'];if(!_0x49e79b[_0x2e00('0x46')][_0x2e00('0x4d')](_0x2e00('0x4e'))){_0x527eed[_0x2e00('0x31')]=qs[_0x2e00('0x31')](_0x49e79b[_0x2e00('0x46')][_0x2e00('0x31')]);_0x527eed[_0x2e00('0x30')]=qs[_0x2e00('0x30')](_0x49e79b[_0x2e00('0x46')]['offset']);}return _0x40d1cd[_0x2e00('0x9b')](_0x527eed);}})['then'](function(_0x5dad55){if(_0x5dad55){return _0x5dad55?{'count':_0x2dae12,'rows':_0x5dad55}:null;}})[_0x2e00('0x21')](respondWithResult(_0x14f700,null))['catch'](handleError(_0x14f700,null));};exports[_0x2e00('0x9c')]=function(_0x456feb,_0x2c14bd,_0x2c2783){var _0x5c9c2b={'raw':!![],'where':{}};var _0x2666ec={};var _0x54fdbe={'count':0x0,'rows':[]};return db[_0x2e00('0x44')][_0x2e00('0x68')]({'where':{'id':_0x456feb['params']['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x2c14bd,null))[_0x2e00('0x21')](function(_0x382bf){if(_0x382bf){_0x2666ec[_0x2e00('0x49')]=_['keys'](db[_0x2e00('0x9d')]['rawAttributes']);_0x2666ec['query']=_[_0x2e00('0x45')](_0x456feb['query']);_0x2666ec[_0x2e00('0x47')]=_[_0x2e00('0x48')](_0x2666ec[_0x2e00('0x49')],_0x2666ec[_0x2e00('0x46')]);_0x5c9c2b['attributes']=_[_0x2e00('0x48')](_0x2666ec['model'],qs[_0x2e00('0x4a')](_0x456feb[_0x2e00('0x46')][_0x2e00('0x4a')]));_0x5c9c2b[_0x2e00('0x4b')]=_0x5c9c2b[_0x2e00('0x4b')]['length']?_0x5c9c2b[_0x2e00('0x4b')]:_0x2666ec[_0x2e00('0x49')];if(!_0x456feb['query'][_0x2e00('0x4d')](_0x2e00('0x4e'))){_0x5c9c2b[_0x2e00('0x31')]=qs[_0x2e00('0x31')](_0x456feb[_0x2e00('0x46')]['limit']);_0x5c9c2b['offset']=qs[_0x2e00('0x30')](_0x456feb[_0x2e00('0x46')][_0x2e00('0x30')]);}_0x5c9c2b[_0x2e00('0x4f')]=qs[_0x2e00('0x50')](_0x456feb['query'][_0x2e00('0x50')]);_0x5c9c2b[_0x2e00('0x51')]=qs[_0x2e00('0x47')](_['pick'](_0x456feb[_0x2e00('0x46')],_0x2666ec[_0x2e00('0x47')]));_0x5c9c2b[_0x2e00('0x51')]['MailAccountId']=_0x382bf['id'];if(_0x456feb[_0x2e00('0x46')]['filter']){_0x5c9c2b[_0x2e00('0x51')]=_[_0x2e00('0x5e')](_0x5c9c2b[_0x2e00('0x51')],{'$or':_[_0x2e00('0x53')](_0x5c9c2b[_0x2e00('0x4b')],function(_0x36b760){var _0x1a8a74={};_0x1a8a74[_0x36b760]={'$like':'%'+_0x456feb[_0x2e00('0x46')][_0x2e00('0x52')]+'%'};return _0x1a8a74;})});}if(_0x456feb[_0x2e00('0x46')][_0x2e00('0x9e')]){var _0xe618bc=_0x456feb[_0x2e00('0x46')][_0x2e00('0x9e')][_0x2e00('0x9f')](',');var _0xf919={};_0xf919[_0xe618bc[0x0]]={'$gte':moment(_0xe618bc[0x1])['format'](_0x2e00('0xa0'))};_0x5c9c2b[_0x2e00('0x51')]=_['merge'](_0x5c9c2b[_0x2e00('0x51')],_0xf919);}_0x5c9c2b=_[_0x2e00('0x5e')]({},_0x5c9c2b,_0x456feb[_0x2e00('0x57')]);return db[_0x2e00('0x9d')][_0x2e00('0x2f')]({'where':_0x5c9c2b['where']})['then'](function(_0x3a17b8){_0x54fdbe[_0x2e00('0x2f')]=_0x3a17b8;if(_0x456feb[_0x2e00('0x46')][_0x2e00('0x5d')]){_0x5c9c2b[_0x2e00('0x58')]=[{'all':!![]}];}return db[_0x2e00('0x9d')][_0x2e00('0x59')](_0x5c9c2b);})[_0x2e00('0x21')](function(_0x36603e){_0x54fdbe[_0x2e00('0x5a')]=_0x36603e;return _0x54fdbe;});}})[_0x2e00('0x21')](respondWithFilteredResult(_0x2c14bd,_0x5c9c2b))[_0x2e00('0x2b')](handleError(_0x2c14bd,null));};exports[_0x2e00('0x3d')]=function(_0x1ab2ba,_0x42b1a8,_0x504670){var _0x127331,_0x4e2610={},_0x362eb0;if(_0x1ab2ba['body']['to']){_0x362eb0=_0x1ab2ba[_0x2e00('0x60')]['to'][_0x2e00('0x9f')](',')[0x0];}return db[_0x2e00('0x44')][_0x2e00('0x5f')]({'where':{'id':_0x1ab2ba['params']['id']},'include':[{'model':db['CmList'],'as':_0x2e00('0xa1'),'include':[{'model':db[_0x2e00('0x8e')],'as':_0x2e00('0xa2'),'where':{'email':_0x362eb0},'limit':0x1,'order':[[_0x2e00('0xa3'),_0x2e00('0xa4')]]}]},{'model':db['MailServerOut'],'as':_0x2e00('0x5b'),'raw':!![]}]})['then'](handleEntityNotFound(_0x42b1a8,null))['then'](function(_0x35c52f){if(_0x35c52f){_0x127331=_0x35c52f;if(_0x35c52f[_0x2e00('0x5b')]){if(_[_0x2e00('0x71')](_0x1ab2ba[_0x2e00('0x60')][_0x2e00('0xa5')])){_0x1ab2ba[_0x2e00('0x60')][_0x2e00('0xa5')]=util[_0x2e00('0xa6')]('%s\x20<%s>',_0x35c52f['name'],_0x35c52f[_0x2e00('0x6f')]||_0x35c52f[_0x2e00('0x5b')]['user']);}if(_0x1ab2ba['body'][_0x2e00('0xa7')]&&_0x1ab2ba[_0x2e00('0x60')]['attachments']['length']){for(var _0x2e8e61=0x0;_0x2e8e61<_0x1ab2ba[_0x2e00('0x60')][_0x2e00('0xa7')][_0x2e00('0x4c')];_0x2e8e61+=0x1){_0x1ab2ba[_0x2e00('0x60')][_0x2e00('0xa7')][_0x2e8e61]={'filename':_0x1ab2ba[_0x2e00('0x60')]['attachments'][_0x2e8e61]['name'],'path':path['join'](config[_0x2e00('0xa8')],_0x2e00('0xa9'),_0x1ab2ba[_0x2e00('0x60')][_0x2e00('0xa7')][_0x2e8e61]['basename'])};}}var _0xb60edc={'tls':{'rejectUnauthorized':![]}};if(_[_0x2e00('0x71')](_0x35c52f[_0x2e00('0x5b')][_0x2e00('0x7b')])){if(_0x35c52f[_0x2e00('0x5b')][_0x2e00('0xaa')]){_0xb60edc[_0x2e00('0xab')]={'user':_0x35c52f['Smtp'][_0x2e00('0x76')],'pass':_0x35c52f['Smtp'][_0x2e00('0x7d')]};}_0xb60edc[_0x2e00('0x79')]=_0x35c52f[_0x2e00('0x5b')]['host'];_0xb60edc[_0x2e00('0x7a')]=_0x35c52f[_0x2e00('0x5b')][_0x2e00('0x7a')];_0xb60edc[_0x2e00('0xac')]=_0x35c52f['Smtp'][_0x2e00('0xac')];}else{_0xb60edc[_0x2e00('0x7b')]=_0x35c52f['Smtp'][_0x2e00('0x7b')];_0xb60edc[_0x2e00('0xab')]={'user':_0x35c52f[_0x2e00('0x5b')][_0x2e00('0x76')],'pass':_0x35c52f[_0x2e00('0x5b')]['pass']};}return respondWithRpcPromise('SendMail','sendMail',{'account':_0xb60edc,'message':_0x1ab2ba[_0x2e00('0x60')]});}else{throw new Error('List\x20not\x20found');}}})['then'](function(_0x5f03d7){if(_0x5f03d7){_0x4e2610=_0x5f03d7;if(_0x127331[_0x2e00('0xa1')]){if(_0x127331[_0x2e00('0xa1')]['Contacts'][_0x2e00('0x4c')]){return _0x127331['List']['Contacts'][0x0];}else{return db[_0x2e00('0x8e')]['create'](_[_0x2e00('0x19')](_0x1ab2ba[_0x2e00('0x60')],{'firstName':_0x1ab2ba[_0x2e00('0x60')]['to'],'email':_0x1ab2ba[_0x2e00('0x60')]['to'],'phone':_0x1ab2ba[_0x2e00('0x60')]['to'],'ListId':_0x127331[_0x2e00('0x70')]}));}}else{throw new Error(_0x2e00('0xad'));}}})[_0x2e00('0x21')](function(_0x37890e){if(_0x37890e){var _0x42f678={'UserId':_0x1ab2ba['user']['id'],'ContactId':_0x37890e['id'],'MailAccountId':_0x127331['id'],'inReplyTo':_0x4e2610[_0x2e00('0xae')],'to':_0x1ab2ba[_0x2e00('0x60')][_0x2e00('0xa5')],'cc':_0x1ab2ba['body']['cc'],'subject':_0x1ab2ba['body'][_0x2e00('0xaf')],'attach':_0x1ab2ba[_0x2e00('0x60')][_0x2e00('0xb0')],'firstMsgDirection':_0x2e00('0xb1'),'lastMsgAt':moment()[_0x2e00('0xa6')](_0x2e00('0xa0')),'lastMsgDirection':_0x2e00('0xb1'),'lastMsgBody':_0x1ab2ba['body'][_0x2e00('0x60')],'Messages':[_['merge'](_0x1ab2ba['body'],{'messageId':_0x4e2610[_0x2e00('0xae')],'sentAt':moment()[_0x2e00('0xa6')](_0x2e00('0xa0')),'read':!![],'MailAccountId':_0x127331['id'],'UserId':_0x1ab2ba[_0x2e00('0x76')]['id'],'ContactId':_0x37890e['id']})]};if(_0x1ab2ba[_0x2e00('0x60')][_0x2e00('0xb2')]){_0x42f678=_[_0x2e00('0x5e')](_0x42f678,_0x1ab2ba[_0x2e00('0x60')]['Interaction']);}return db[_0x2e00('0x89')][_0x2e00('0x66')](_0x42f678,{'include':[{'model':db[_0x2e00('0x9d')],'as':_0x2e00('0xb3')}]});}})['then'](respondWithResult(_0x42b1a8,null))['catch'](handleError(_0x42b1a8,null));};exports['verifySmtp']=function(_0x4e9d4d,_0x28a7e9,_0xe75bc3){return db['MailAccount'][_0x2e00('0x5f')]({'where':{'id':_0x4e9d4d[_0x2e00('0x61')]['id']},'include':[{'model':db[_0x2e00('0x41')],'as':_0x2e00('0x5b'),'raw':!![]}]})[_0x2e00('0x21')](handleEntityNotFound(_0x28a7e9,null))[_0x2e00('0x21')](function(_0x3075ee){if(_0x3075ee&&_0x3075ee['Smtp']){var _0xe84b4e={'id':_0x3075ee['id'],'tls':{'rejectUnauthorized':![]}};if(_0x3075ee['Smtp'][_0x2e00('0x7b')]){_0xe84b4e[_0x2e00('0x7b')]=_0x3075ee[_0x2e00('0x5b')][_0x2e00('0x7b')];}else{_0xe84b4e['host']=_0x3075ee[_0x2e00('0x5b')]['host'];_0xe84b4e[_0x2e00('0x7a')]=_0x3075ee[_0x2e00('0x5b')][_0x2e00('0x7a')];_0xe84b4e[_0x2e00('0xac')]=_0x3075ee[_0x2e00('0x5b')][_0x2e00('0xac')];}if(_0x3075ee[_0x2e00('0x5b')][_0x2e00('0xaa')]){_0xe84b4e['auth']={'user':_0x3075ee['Smtp'][_0x2e00('0x76')],'pass':_0x3075ee[_0x2e00('0x5b')][_0x2e00('0x7d')]};}return respondWithRpcPromise(_0x2e00('0xb4'),_0x2e00('0xb5'),{'account':_0xe84b4e});}})[_0x2e00('0x21')](respondWithResult(_0x28a7e9,null))[_0x2e00('0x2b')](handleError(_0x28a7e9,null));};exports[_0x2e00('0x37')]=function(_0x1a3063,_0x51cd0e){return db[_0x2e00('0x44')][_0x2e00('0x5f')]({'where':{'id':_0x1a3063[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x51cd0e,null))['then'](function(_0x391f3d){if(_0x391f3d&&_0x391f3d[_0x2e00('0x7b')]){throw new db[(_0x2e00('0xb6'))]['ValidationError']('You\x20can\x27t\x20remove\x20the\x20mail\x20service\x20account');}return _0x391f3d;})[_0x2e00('0x21')](removeEntity(_0x51cd0e,null))[_0x2e00('0x2b')](handleError(_0x51cd0e,null));};exports['addAgents']=function(_0x3ed282,_0x3edb31,_0x3e42a7){return db[_0x2e00('0x44')]['find']({'where':{'id':_0x3ed282['params']['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x3edb31,null))[_0x2e00('0x21')](function(_0x417f6f){if(_0x417f6f){return _0x417f6f[_0x2e00('0xb7')](_0x3ed282[_0x2e00('0x60')][_0x2e00('0x8b')],_['omit'](_0x3ed282['body'],[_0x2e00('0x8b'),'id'])||{})['spread'](function(_0x235433){for(var _0xb8f8ab=0x0;_0xb8f8ab<_0x3ed282[_0x2e00('0x60')][_0x2e00('0x8b')]['length'];_0xb8f8ab+=0x1){socket[_0x2e00('0xb8')](_0x2e00('0xb9'),{'UserId':_0x3ed282[_0x2e00('0x60')][_0x2e00('0x8b')][_0xb8f8ab],'MailAccountId':_0x3ed282[_0x2e00('0x61')]['id']});}return _0x235433;});}})[_0x2e00('0x21')](respondWithResult(_0x3edb31,null))[_0x2e00('0x2b')](handleError(_0x3edb31,null));};exports[_0x2e00('0xba')]=function(_0x3b27af,_0x4bf6e4,_0x1100f8){var _0x31d995;return db[_0x2e00('0x44')][_0x2e00('0x5f')]({'where':{'id':_0x3b27af['params']['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x4bf6e4,null))['then'](function(_0x50c128){if(_0x50c128){return _0x50c128[_0x2e00('0xba')](_0x3b27af[_0x2e00('0x46')]['ids'])['then'](function(_0x5b3957){if(_[_0x2e00('0xbb')](_0x3b27af[_0x2e00('0x46')][_0x2e00('0x8b')])){for(var _0x2aec55=0x0;_0x2aec55<_0x3b27af[_0x2e00('0x46')][_0x2e00('0x8b')][_0x2e00('0x4c')];_0x2aec55+=0x1){socket['emit']('userMailAccount:remove',{'UserId':_0x3b27af[_0x2e00('0x46')][_0x2e00('0x8b')][_0x2aec55],'MailAccountId':_0x3b27af[_0x2e00('0x61')]['id']});}}else{socket[_0x2e00('0xb8')](_0x2e00('0xbc'),{'UserId':_0x3b27af[_0x2e00('0x46')][_0x2e00('0x8b')],'MailAccountId':_0x3b27af[_0x2e00('0x61')]['id']});}});}})['then'](respondWithStatusCode(_0x4bf6e4,null))[_0x2e00('0x2b')](handleError(_0x4bf6e4,null));};exports[_0x2e00('0xbd')]=function(_0xc48eef,_0x565edd,_0x19f8e2){var _0x1e0375={};var _0x23351f={};var _0x1ee1af;var _0x13c151;return db['MailAccount']['findOne']({'where':{'id':_0xc48eef[_0x2e00('0x61')]['id']}})[_0x2e00('0x21')](handleEntityNotFound(_0x565edd,null))[_0x2e00('0x21')](function(_0x1c5207){if(_0x1c5207){_0x1ee1af=_0x1c5207;_0x23351f[_0x2e00('0x49')]=_[_0x2e00('0x45')](db[_0x2e00('0x90')][_0x2e00('0x5c')]);_0x23351f['query']=_[_0x2e00('0x45')](_0xc48eef['query']);_0x23351f['filters']=_[_0x2e00('0x48')](_0x23351f[_0x2e00('0x49')],_0x23351f[_0x2e00('0x46')]);_0x1e0375[_0x2e00('0x4b')]=_[_0x2e00('0x48')](_0x23351f[_0x2e00('0x49')],qs['fields'](_0xc48eef[_0x2e00('0x46')][_0x2e00('0x4a')]));_0x1e0375[_0x2e00('0x4b')]=_0x1e0375['attributes'][_0x2e00('0x4c')]?_0x1e0375[_0x2e00('0x4b')]:_0x23351f[_0x2e00('0x49')];_0x1e0375['order']=qs[_0x2e00('0x50')](_0xc48eef[_0x2e00('0x46')][_0x2e00('0x50')]);_0x1e0375[_0x2e00('0x51')]=qs[_0x2e00('0x47')](_[_0x2e00('0x69')](_0xc48eef[_0x2e00('0x46')],_0x23351f['filters']));if(_0xc48eef[_0x2e00('0x46')]['filter']){_0x1e0375[_0x2e00('0x51')]=_[_0x2e00('0x5e')](_0x1e0375[_0x2e00('0x51')],{'$or':_[_0x2e00('0x53')](_0x1e0375[_0x2e00('0x4b')],function(_0x573f6f){var _0x1dcb13={};_0x1dcb13[_0x573f6f]={'$like':'%'+_0xc48eef[_0x2e00('0x46')]['filter']+'%'};return _0x1dcb13;})});}_0x1e0375=_[_0x2e00('0x5e')]({},_0x1e0375,_0xc48eef['options']);return _0x1ee1af[_0x2e00('0xbd')](_0x1e0375);}})['then'](function(_0x48e4bb){if(_0x48e4bb){_0x13c151=_0x48e4bb['length'];if(!_0xc48eef[_0x2e00('0x46')][_0x2e00('0x4d')]('nolimit')){_0x1e0375[_0x2e00('0x31')]=qs[_0x2e00('0x31')](_0xc48eef['query'][_0x2e00('0x31')]);_0x1e0375[_0x2e00('0x30')]=qs['offset'](_0xc48eef[_0x2e00('0x46')][_0x2e00('0x30')]);}return _0x1ee1af[_0x2e00('0xbd')](_0x1e0375);}})[_0x2e00('0x21')](function(_0x296478){if(_0x296478){return _0x296478?{'count':_0x13c151,'rows':_0x296478}:null;}})['then'](respondWithResult(_0x565edd,null))[_0x2e00('0x2b')](handleError(_0x565edd,null));};
\ No newline at end of file
index 0b19c41..9020669 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc266=['update','remove','hasOwnProperty','hook','events','../../mysqldb','MailAccount','setMaxListeners'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0xc266,0x9c));var _0x6c26=function(_0x30c626,_0x5a90b7){_0x30c626=_0x30c626-0x0;var _0x2d8faf=_0xc266[_0x30c626];return _0x2d8faf;};'use strict';var EventEmitter=require(_0x6c26('0x0'));var MailAccount=require(_0x6c26('0x1'))['db'][_0x6c26('0x2')];var MailAccountEvents=new EventEmitter();MailAccountEvents[_0x6c26('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0x6c26('0x4'),'afterDestroy':_0x6c26('0x5')};function emitEvent(_0x11502a){return function(_0x605d65,_0x1d34ce,_0x24c647){MailAccountEvents['emit'](_0x11502a+':'+_0x605d65['id'],_0x605d65);MailAccountEvents['emit'](_0x11502a,_0x605d65);_0x24c647(null);};}for(var e in events){if(events[_0x6c26('0x6')](e)){var event=events[e];MailAccount[_0x6c26('0x7')](e,emitEvent(event));}}module['exports']=MailAccountEvents;
\ No newline at end of file
+var _0x386f=['update','remove','emit','hasOwnProperty','exports','events','../../mysqldb','MailAccount','setMaxListeners','save'];(function(_0x3e5086,_0x48f4a2){var _0xfeb102=function(_0x5a945f){while(--_0x5a945f){_0x3e5086['push'](_0x3e5086['shift']());}};_0xfeb102(++_0x48f4a2);}(_0x386f,0xff));var _0xf386=function(_0x38185a,_0xd7b31d){_0x38185a=_0x38185a-0x0;var _0x54c0e9=_0x386f[_0x38185a];return _0x54c0e9;};'use strict';var EventEmitter=require(_0xf386('0x0'));var MailAccount=require(_0xf386('0x1'))['db'][_0xf386('0x2')];var MailAccountEvents=new EventEmitter();MailAccountEvents[_0xf386('0x3')](0x0);var events={'afterCreate':_0xf386('0x4'),'afterUpdate':_0xf386('0x5'),'afterDestroy':_0xf386('0x6')};function emitEvent(_0x41608c){return function(_0x4c61fd,_0x1103b7,_0xf6a2b0){MailAccountEvents[_0xf386('0x7')](_0x41608c+':'+_0x4c61fd['id'],_0x4c61fd);MailAccountEvents['emit'](_0x41608c,_0x4c61fd);_0xf6a2b0(null);};}for(var e in events){if(events[_0xf386('0x8')](e)){var event=events[e];MailAccount['hook'](e,emitEvent(event));}}module[_0xf386('0x9')]=MailAccountEvents;
\ No newline at end of file
index a1aa9f2..a3c0270 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x593b=['exports','define','MailAccount','mail_accounts','lodash','util','../../config/logger','api','bluebird','request-promise','./mailAccount.attributes'];(function(_0x492221,_0x9e2521){var _0x398bf9=function(_0x303c5b){while(--_0x303c5b){_0x492221['push'](_0x492221['shift']());}};_0x398bf9(++_0x9e2521);}(_0x593b,0x1f3));var _0xb593=function(_0x557d9c,_0x2625ea){_0x557d9c=_0x557d9c-0x0;var _0x34f09f=_0x593b[_0x557d9c];return _0x34f09f;};'use strict';var _=require(_0xb593('0x0'));var util=require(_0xb593('0x1'));var logger=require(_0xb593('0x2'))(_0xb593('0x3'));var moment=require('moment');var BPromise=require(_0xb593('0x4'));var rp=require(_0xb593('0x5'));var attributes=require(_0xb593('0x6'));module[_0xb593('0x7')]=function(_0x5af5e5,_0x14ffc7){return _0x5af5e5[_0xb593('0x8')](_0xb593('0x9'),attributes,{'tableName':_0xb593('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x024b=['moment','bluebird','request-promise','./mailAccount.attributes','exports','mail_accounts','lodash','api'];(function(_0x5d26b9,_0x530c4f){var _0x3d05bb=function(_0x17a2ae){while(--_0x17a2ae){_0x5d26b9['push'](_0x5d26b9['shift']());}};_0x3d05bb(++_0x530c4f);}(_0x024b,0x116));var _0xb024=function(_0x22462b,_0x497dee){_0x22462b=_0x22462b-0x0;var _0x29bf62=_0x024b[_0x22462b];return _0x29bf62;};'use strict';var _=require(_0xb024('0x0'));var util=require('util');var logger=require('../../config/logger')(_0xb024('0x1'));var moment=require(_0xb024('0x2'));var BPromise=require(_0xb024('0x3'));var rp=require(_0xb024('0x4'));var attributes=require(_0xb024('0x5'));module[_0xb024('0x6')]=function(_0x449ec5,_0x2b9d76){return _0x449ec5['define']('MailAccount',attributes,{'tableName':_0xb024('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 7a63034..864a0d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd4a5=['catch','GetMailAccount','MailAccount','findAll','options','raw','where','attributes','map','model','include','ShowMailAccount','find','body','mail','difference','keys','rawAttributes','createdAt','updatedAt','CompanyId','ListId','isNil','from\x20is\x20mandatory','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','mapKey','from','CmList','CmContact','Contacts','DESC','MailApplication','Applications','Smtp','List','get','account','omit','applications','list','orderBy','priority','asc','autoclose','length','close','*,*,*,*','create','List\x20not\x20found','messageId','generate','subject','attach','YYYY-MM-DD\x20HH:mm:ss','MailInteraction','MailMessage','inReplyTo','Contact\x20not\x20found','update','format','interaction','created','contact','attachments','originTo','originCc','Attachment','Attachments','UserId','User','name','unshift','waitForTheAssignedAgent','Start','startRouting','lodash','bluebird','randomstring','ioredis','../../mysqldb','rpc','jayson/promise','client','http','defaults','redis','socket.io-emitter','./mailAccount.socket','register','request','then','info','MailAccount,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result'];(function(_0x209a34,_0x18e901){var _0x22e5ab=function(_0xb611fe){while(--_0xb611fe){_0x209a34['push'](_0x209a34['shift']());}};_0x22e5ab(++_0x18e901);}(_0xd4a5,0x1e0));var _0x5d4a=function(_0x49db78,_0x2741c8){_0x49db78=_0x49db78-0x0;var _0x48db41=_0xd4a5[_0x49db78];return _0x48db41;};'use strict';var _=require(_0x5d4a('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0x5d4a('0x1'));var rs=require(_0x5d4a('0x2'));var fs=require('fs');var Redis=require(_0x5d4a('0x3'));var db=require(_0x5d4a('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x5d4a('0x5'));var config=require('../../config/environment');var jayson=require(_0x5d4a('0x6'));var client=jayson[_0x5d4a('0x7')][_0x5d4a('0x8')]({'port':0x232c});config['redis']=_[_0x5d4a('0x9')](config[_0x5d4a('0xa')],{'host':'localhost','port':0x18eb});var socket=require(_0x5d4a('0xb'))(new Redis(config[_0x5d4a('0xa')]));require(_0x5d4a('0xc'))[_0x5d4a('0xd')](socket);function respondWithRpcPromise(_0x4e8ba7,_0x3099c1,_0x15deba){return new BPromise(function(_0xe5a591,_0x1522d2){return client[_0x5d4a('0xe')](_0x4e8ba7,_0x15deba)[_0x5d4a('0xf')](function(_0x15d334){logger[_0x5d4a('0x10')](_0x5d4a('0x11'),_0x3099c1,_0x5d4a('0x12'));logger[_0x5d4a('0x13')]('MailAccount,\x20%s,\x20%s,\x20%s',_0x3099c1,_0x5d4a('0x12'),JSON[_0x5d4a('0x14')](_0x15d334));if(_0x15d334['error']){if(_0x15d334[_0x5d4a('0x15')][_0x5d4a('0x16')]===0x1f4){logger[_0x5d4a('0x15')](_0x5d4a('0x11'),_0x3099c1,_0x15d334[_0x5d4a('0x15')][_0x5d4a('0x17')]);return _0x1522d2(_0x15d334[_0x5d4a('0x15')][_0x5d4a('0x17')]);}logger[_0x5d4a('0x15')](_0x5d4a('0x11'),_0x3099c1,_0x15d334[_0x5d4a('0x15')][_0x5d4a('0x17')]);return _0xe5a591(_0x15d334[_0x5d4a('0x15')][_0x5d4a('0x17')]);}else{logger[_0x5d4a('0x10')]('MailAccount,\x20%s,\x20%s',_0x3099c1,_0x5d4a('0x12'));_0xe5a591(_0x15d334[_0x5d4a('0x18')][_0x5d4a('0x17')]);}})[_0x5d4a('0x19')](function(_0xca1448){logger[_0x5d4a('0x15')]('MailAccount,\x20%s,\x20%s',_0x3099c1,_0xca1448);_0x1522d2(_0xca1448);});});}exports[_0x5d4a('0x1a')]=function(_0x2c0437){var _0x2c42f4=this;return new Promise(function(_0x10d7c3,_0x4f4048){return db[_0x5d4a('0x1b')][_0x5d4a('0x1c')]({'raw':_0x2c0437['options']?_0x2c0437[_0x5d4a('0x1d')][_0x5d4a('0x1e')]===undefined?!![]:![]:!![],'where':_0x2c0437[_0x5d4a('0x1d')]?_0x2c0437[_0x5d4a('0x1d')][_0x5d4a('0x1f')]||null:null,'attributes':_0x2c0437[_0x5d4a('0x1d')]?_0x2c0437[_0x5d4a('0x1d')][_0x5d4a('0x20')]||null:null,'limit':_0x2c0437['options']?_0x2c0437[_0x5d4a('0x1d')]['limit']||null:null,'include':_0x2c0437[_0x5d4a('0x1d')]?_0x2c0437[_0x5d4a('0x1d')]['include']?_[_0x5d4a('0x21')](_0x2c0437[_0x5d4a('0x1d')]['include'],function(_0x4991e4){return{'model':db[_0x4991e4[_0x5d4a('0x22')]],'as':_0x4991e4['as'],'attributes':_0x4991e4[_0x5d4a('0x20')],'include':_0x4991e4['include']?_['map'](_0x4991e4[_0x5d4a('0x23')],function(_0x2c1bd3){return{'model':db[_0x2c1bd3[_0x5d4a('0x22')]],'as':_0x2c1bd3['as'],'attributes':_0x2c1bd3[_0x5d4a('0x20')],'include':_0x2c1bd3[_0x5d4a('0x23')]?_[_0x5d4a('0x21')](_0x2c1bd3[_0x5d4a('0x23')],function(_0x5d3602){return{'model':db[_0x5d3602[_0x5d4a('0x22')]],'as':_0x5d3602['as'],'attributes':_0x5d3602['attributes']};}):[]};}):[]};}):[]:[]})[_0x5d4a('0xf')](function(_0x4ecd56){logger[_0x5d4a('0x10')](_0x5d4a('0x1a'),_0x2c0437);logger[_0x5d4a('0x13')]('GetMailAccount',_0x2c0437,JSON[_0x5d4a('0x14')](_0x4ecd56));_0x10d7c3(_0x4ecd56);})[_0x5d4a('0x19')](function(_0x3fe12e){logger[_0x5d4a('0x15')](_0x5d4a('0x1a'),_0x3fe12e[_0x5d4a('0x17')],_0x2c0437);_0x4f4048(_0x2c42f4[_0x5d4a('0x15')](0x1f4,_0x3fe12e[_0x5d4a('0x17')]));});});};exports[_0x5d4a('0x24')]=function(_0x12d010){var _0x106c8e=this;return new Promise(function(_0x37667a,_0xcc8fe7){return db[_0x5d4a('0x1b')][_0x5d4a('0x25')]({'raw':_0x12d010[_0x5d4a('0x1d')]?_0x12d010[_0x5d4a('0x1d')][_0x5d4a('0x1e')]===undefined?!![]:![]:!![],'where':_0x12d010[_0x5d4a('0x1d')]?_0x12d010[_0x5d4a('0x1d')][_0x5d4a('0x1f')]||null:null,'attributes':_0x12d010[_0x5d4a('0x1d')]?_0x12d010[_0x5d4a('0x1d')]['attributes']||null:null,'include':_0x12d010['options']?_0x12d010[_0x5d4a('0x1d')][_0x5d4a('0x23')]?_[_0x5d4a('0x21')](_0x12d010[_0x5d4a('0x1d')][_0x5d4a('0x23')],function(_0x5234a4){return{'model':db[_0x5234a4[_0x5d4a('0x22')]],'as':_0x5234a4['as'],'attributes':_0x5234a4[_0x5d4a('0x20')],'include':_0x5234a4[_0x5d4a('0x23')]?_['map'](_0x5234a4[_0x5d4a('0x23')],function(_0x296afe){return{'model':db[_0x296afe[_0x5d4a('0x22')]],'as':_0x296afe['as'],'attributes':_0x296afe[_0x5d4a('0x20')],'include':_0x296afe['include']?_[_0x5d4a('0x21')](_0x296afe[_0x5d4a('0x23')],function(_0x4c182c){return{'model':db[_0x4c182c[_0x5d4a('0x22')]],'as':_0x4c182c['as'],'attributes':_0x4c182c[_0x5d4a('0x20')]};}):[]};}):[]};}):[]:[]})[_0x5d4a('0xf')](function(_0xc5642a){logger[_0x5d4a('0x10')]('ShowMailAccount',_0x12d010);logger['debug']('ShowMailAccount',_0x12d010,JSON[_0x5d4a('0x14')](_0xc5642a));_0x37667a(_0xc5642a);})['catch'](function(_0x387d33){logger[_0x5d4a('0x15')](_0x5d4a('0x24'),_0x387d33['message'],_0x12d010);_0xcc8fe7(_0x106c8e[_0x5d4a('0x15')](0x1f4,_0x387d33[_0x5d4a('0x17')]));});});};exports['NotifyMailAccount']=function(_0x8efeb2){var _0x2260cd=this;return new Promise(function(_0x172608,_0x19e590){var _0x3bf0ab={'body':_0x8efeb2[_0x5d4a('0x26')],'channel':_0x5d4a('0x27')};var _0x13531e=_[_0x5d4a('0x28')](_[_0x5d4a('0x29')](db['CmContact'][_0x5d4a('0x2a')]),[_0x5d4a('0x2b'),_0x5d4a('0x2c'),_0x5d4a('0x2d'),_0x5d4a('0x2e')]);var _0x43309c=![];if(_0x8efeb2[_0x5d4a('0x26')]['id']){delete _0x8efeb2[_0x5d4a('0x26')]['id'];}if(_[_0x5d4a('0x2f')](_0x8efeb2[_0x5d4a('0x26')]['from'])){return _0x19e590(_0x2260cd[_0x5d4a('0x15')](0x1f4,_0x5d4a('0x30')));}if(_[_0x5d4a('0x2f')](_0x8efeb2['body']['body'])||_0x8efeb2[_0x5d4a('0x26')]['body']===''){return _0x19e590(_0x2260cd[_0x5d4a('0x15')](0x1f4,'body\x20is\x20mandatory\x20and\x20not\x20empty'));}if(_[_0x5d4a('0x2f')](_0x8efeb2[_0x5d4a('0x26')]['mapKey'])){return _0x19e590(_0x2260cd[_0x5d4a('0x15')](0x1f4,_0x5d4a('0x31')+_0x13531e));}if(!_[_0x5d4a('0x32')](_0x13531e,_0x8efeb2['body'][_0x5d4a('0x33')])){return _0x19e590(_0x2260cd[_0x5d4a('0x15')](0x1f4,'mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x13531e));}var _0x22c6c3={};_0x22c6c3[_0x8efeb2[_0x5d4a('0x26')]['mapKey']]=_0x8efeb2['body'][_0x5d4a('0x34')];return db[_0x5d4a('0x1b')][_0x5d4a('0x25')]({'where':{'id':_0x8efeb2['account']['id']},'include':[{'model':db[_0x5d4a('0x35')],'as':'List','include':[{'model':db[_0x5d4a('0x36')],'as':_0x5d4a('0x37'),'where':_0x22c6c3,'limit':0x1,'order':[[_0x5d4a('0x2c'),_0x5d4a('0x38')]]}]},{'model':db[_0x5d4a('0x39')],'as':_0x5d4a('0x3a')},{'model':db['MailServerOut'],'as':_0x5d4a('0x3b')}]})[_0x5d4a('0xf')](function(_0x3452ee){if(_0x3452ee&&_0x3452ee[_0x5d4a('0x3c')]){var _0x4f6724=_0x3452ee[_0x5d4a('0x3d')]({'plain':!![]});_0x3bf0ab[_0x5d4a('0x3e')]=_[_0x5d4a('0x3f')](_0x4f6724,[_0x5d4a('0x3a'),_0x5d4a('0x3c')]);_0x3bf0ab[_0x5d4a('0x40')]=_0x4f6724[_0x5d4a('0x3a')];_0x3bf0ab[_0x5d4a('0x41')]=_0x4f6724[_0x5d4a('0x3c')];_0x3bf0ab['applications']=_[_0x5d4a('0x42')](_0x3bf0ab[_0x5d4a('0x40')],[_0x5d4a('0x43')],[_0x5d4a('0x44')]);if(_0x3bf0ab[_0x5d4a('0x3e')]&&_0x3bf0ab[_0x5d4a('0x3e')][_0x5d4a('0x45')]){_0x3bf0ab['applications']['push']({'id':0x0,'priority':_0x3bf0ab[_0x5d4a('0x40')][_0x5d4a('0x46')]+0x1,'app':_0x5d4a('0x47'),'appdata':_0x5d4a('0x45'),'interval':_0x5d4a('0x48')});}if(_0x3bf0ab[_0x5d4a('0x3e')][_0x5d4a('0x3a')]){delete _0x3bf0ab['account']['Applications'];}if(_0x3bf0ab[_0x5d4a('0x3e')][_0x5d4a('0x3c')]){delete _0x3bf0ab[_0x5d4a('0x3e')]['List'];}if(_0x4f6724['List']['Contacts'][_0x5d4a('0x46')]){return _0x4f6724[_0x5d4a('0x3c')][_0x5d4a('0x37')][0x0];}var _0xb13979=_[_0x5d4a('0x9')](_0x8efeb2[_0x5d4a('0x26')],{'firstName':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x34')],'ListId':_0x4f6724[_0x5d4a('0x2e')]});_0xb13979[_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x33')]]=_0x8efeb2['body'][_0x5d4a('0x34')];return db[_0x5d4a('0x36')][_0x5d4a('0x49')](_0xb13979);}else{throw new Error(_0x5d4a('0x4a'));}})[_0x5d4a('0xf')](function(_0x53e3a5){_0x3bf0ab['contact']=_0x53e3a5;if(_0x53e3a5){if(!_0x8efeb2[_0x5d4a('0x26')]['message'][_0x5d4a('0x4b')]){_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')][_0x5d4a('0x4b')]=rs[_0x5d4a('0x4c')]()+'\x20'+_0x8efeb2['body'][_0x5d4a('0x17')][_0x5d4a('0x34')];}var _0x12b19b={'ContactId':_0x53e3a5['id'],'MailAccountId':_0x8efeb2[_0x5d4a('0x3e')]['id'],'inReplyTo':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')]['messageId'],'to':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')][_0x5d4a('0x34')],'cc':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')]['cc'],'subject':_0x8efeb2['body']['message'][_0x5d4a('0x4d')],'attach':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')][_0x5d4a('0x4e')],'lastMsgAt':moment()['format'](_0x5d4a('0x4f')),'lastMsgDirection':'in','lastMsgBody':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x26')]};return db[_0x5d4a('0x50')]['find']({'where':{'closed':![],'MailAccountId':_0x8efeb2['account']['id']},'include':[{'model':db[_0x5d4a('0x51')],'as':'Messages','attributes':['messageId'],'where':{'messageId':_0x8efeb2['body'][_0x5d4a('0x17')][_0x5d4a('0x52')]}}]})[_0x5d4a('0xf')](function(_0x404a94){if(_0x404a94){return[_0x404a94,![]];}return db['MailInteraction'][_0x5d4a('0x49')](_0x12b19b)['then'](function(_0x518d76){return[_0x518d76,!![]];});});}else{throw new Error(_0x5d4a('0x53'));}})['spread'](function(_0x430b3e,_0x538ea4){if(_0x430b3e){_0x43309c=_0x538ea4;if(!_0x538ea4){return _0x430b3e[_0x5d4a('0x54')]({'inReplyTo':_0x8efeb2['body'][_0x5d4a('0x17')]['messageId'],'to':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')]['from'],'cc':_0x8efeb2[_0x5d4a('0x26')]['message']['cc'],'subject':_0x8efeb2['body'][_0x5d4a('0x17')][_0x5d4a('0x4d')],'attach':_0x430b3e[_0x5d4a('0x4e')]?_0x430b3e[_0x5d4a('0x4e')]:_0x8efeb2[_0x5d4a('0x26')]['message']['attach'],'substatus':null,'substatusAt':moment()[_0x5d4a('0x55')]('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgAt':moment()[_0x5d4a('0x55')](_0x5d4a('0x4f')),'lastMsgDirection':'in','lastMsgBody':_0x8efeb2['body'][_0x5d4a('0x26')]});}else{return _0x430b3e;}}})[_0x5d4a('0xf')](function(_0x210062){_0x3bf0ab[_0x5d4a('0x56')]=_0x210062[_0x5d4a('0x3d')]({'plain':!![]});_0x3bf0ab[_0x5d4a('0x56')][_0x5d4a('0x57')]=_0x43309c;return db['MailMessage'][_0x5d4a('0x49')]({'body':_0x8efeb2['body'][_0x5d4a('0x26')],'MailAccountId':_0x8efeb2[_0x5d4a('0x3e')]['id'],'MailInteractionId':_0x210062['id'],'direction':'in','ContactId':_0x3bf0ab[_0x5d4a('0x58')]['id'],'messageId':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')][_0x5d4a('0x4b')],'from':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')]['from'],'to':_0x8efeb2['body'][_0x5d4a('0x17')]['to'],'cc':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')]['cc'],'subject':_0x8efeb2[_0x5d4a('0x26')]['message'][_0x5d4a('0x4d')],'attach':_0x8efeb2['body'][_0x5d4a('0x17')][_0x5d4a('0x4e')],'Attachments':_0x8efeb2['body'][_0x5d4a('0x17')][_0x5d4a('0x59')],'originTo':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')][_0x5d4a('0x5a')],'originCc':_0x8efeb2[_0x5d4a('0x26')]['message'][_0x5d4a('0x5b')],'bcc':_0x8efeb2[_0x5d4a('0x26')][_0x5d4a('0x17')]['bcc']},{'include':[{'model':db[_0x5d4a('0x5c')],'as':_0x5d4a('0x5d')}]});})['then'](function(_0x1eacb2){_0x3bf0ab['message']=_0x1eacb2;if(_0x3bf0ab[_0x5d4a('0x56')][_0x5d4a('0x5e')]){return db[_0x5d4a('0x5f')]['find']({'attributes':['id',_0x5d4a('0x60')],'where':{'id':_0x3bf0ab['interaction'][_0x5d4a('0x5e')]}})[_0x5d4a('0xf')](function(_0x10ec24){if(_0x10ec24){_0x3bf0ab[_0x5d4a('0x40')][_0x5d4a('0x61')]({'id':0x0,'priority':0x0,'app':'agent','appdata':_0x10ec24['name']+','+(_0x3bf0ab[_0x5d4a('0x3e')][_0x5d4a('0x62')]||0xa),'interval':'*,*,*,*'});}return respondWithRpcPromise(_0x5d4a('0x63'),_0x5d4a('0x64'),_0x3bf0ab);});}return respondWithRpcPromise(_0x5d4a('0x63'),_0x5d4a('0x64'),_0x3bf0ab);})[_0x5d4a('0xf')](function(_0x5d30db){_0x172608(_0x5d30db);})[_0x5d4a('0x19')](function(_0x259eec){_0x19e590(_0x2260cd[_0x5d4a('0x15')](0x1f4,_0x259eec[_0x5d4a('0x17')]));});});};
\ No newline at end of file
+var _0x5bde=['MailMessage','inReplyTo','Contact\x20not\x20found','spread','format','YYYY-MM-DD\x20HH:mm:ss','interaction','created','contact','attachments','originCc','bcc','Attachment','Attachments','unshift','agent','name','waitForTheAssignedAgent','Start','startRouting','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','redis','defaults','socket.io-emitter','./mailAccount.socket','register','MailAccount,\x20%s,\x20%s','debug','MailAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','GetMailAccount','MailAccount','options','raw','where','attributes','limit','include','map','model','then','ShowMailAccount','find','keys','rawAttributes','updatedAt','ListId','isNil','body','from','from\x20is\x20mandatory','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20','includes','account','CmList','CmContact','Contacts','DESC','MailApplication','Applications','Smtp','get','omit','List','applications','priority','asc','push','length','autoclose','*,*,*,*','create','messageId','subject','attach','MailInteraction'];(function(_0x1015ff,_0x5cadb5){var _0x28576d=function(_0x2b0142){while(--_0x2b0142){_0x1015ff['push'](_0x1015ff['shift']());}};_0x28576d(++_0x5cadb5);}(_0x5bde,0x18c));var _0xe5bd=function(_0x577fea,_0x48e761){_0x577fea=_0x577fea-0x0;var _0x149ef1=_0x5bde[_0x577fea];return _0x149ef1;};'use strict';var _=require(_0xe5bd('0x0'));var util=require(_0xe5bd('0x1'));var moment=require(_0xe5bd('0x2'));var BPromise=require(_0xe5bd('0x3'));var rs=require(_0xe5bd('0x4'));var fs=require('fs');var Redis=require(_0xe5bd('0x5'));var db=require(_0xe5bd('0x6'))['db'];var utils=require(_0xe5bd('0x7'));var logger=require(_0xe5bd('0x8'))('rpc');var config=require(_0xe5bd('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xe5bd('0xa')][_0xe5bd('0xb')]({'port':0x232c});config[_0xe5bd('0xc')]=_[_0xe5bd('0xd')](config[_0xe5bd('0xc')],{'host':'localhost','port':0x18eb});var socket=require(_0xe5bd('0xe'))(new Redis(config[_0xe5bd('0xc')]));require(_0xe5bd('0xf'))[_0xe5bd('0x10')](socket);function respondWithRpcPromise(_0x101f84,_0x4d82f0,_0x12dba2){return new BPromise(function(_0x3e061e,_0x286758){return client['request'](_0x101f84,_0x12dba2)['then'](function(_0x18a596){logger['info'](_0xe5bd('0x11'),_0x4d82f0,'request\x20sent');logger[_0xe5bd('0x12')](_0xe5bd('0x13'),_0x4d82f0,'request\x20sent',JSON[_0xe5bd('0x14')](_0x18a596));if(_0x18a596[_0xe5bd('0x15')]){if(_0x18a596[_0xe5bd('0x15')][_0xe5bd('0x16')]===0x1f4){logger['error']('MailAccount,\x20%s,\x20%s',_0x4d82f0,_0x18a596['error'][_0xe5bd('0x17')]);return _0x286758(_0x18a596[_0xe5bd('0x15')][_0xe5bd('0x17')]);}logger['error']('MailAccount,\x20%s,\x20%s',_0x4d82f0,_0x18a596['error'][_0xe5bd('0x17')]);return _0x3e061e(_0x18a596['error']['message']);}else{logger[_0xe5bd('0x18')](_0xe5bd('0x11'),_0x4d82f0,'request\x20sent');_0x3e061e(_0x18a596['result'][_0xe5bd('0x17')]);}})[_0xe5bd('0x19')](function(_0x4a3312){logger['error'](_0xe5bd('0x11'),_0x4d82f0,_0x4a3312);_0x286758(_0x4a3312);});});}exports[_0xe5bd('0x1a')]=function(_0x233bee){var _0x3191e5=this;return new Promise(function(_0x1f6f1f,_0xbab897){return db[_0xe5bd('0x1b')]['findAll']({'raw':_0x233bee[_0xe5bd('0x1c')]?_0x233bee['options'][_0xe5bd('0x1d')]===undefined?!![]:![]:!![],'where':_0x233bee[_0xe5bd('0x1c')]?_0x233bee[_0xe5bd('0x1c')][_0xe5bd('0x1e')]||null:null,'attributes':_0x233bee['options']?_0x233bee[_0xe5bd('0x1c')][_0xe5bd('0x1f')]||null:null,'limit':_0x233bee[_0xe5bd('0x1c')]?_0x233bee[_0xe5bd('0x1c')][_0xe5bd('0x20')]||null:null,'include':_0x233bee[_0xe5bd('0x1c')]?_0x233bee[_0xe5bd('0x1c')][_0xe5bd('0x21')]?_[_0xe5bd('0x22')](_0x233bee[_0xe5bd('0x1c')][_0xe5bd('0x21')],function(_0x41e15d){return{'model':db[_0x41e15d[_0xe5bd('0x23')]],'as':_0x41e15d['as'],'attributes':_0x41e15d[_0xe5bd('0x1f')],'include':_0x41e15d['include']?_['map'](_0x41e15d[_0xe5bd('0x21')],function(_0x46c83a){return{'model':db[_0x46c83a['model']],'as':_0x46c83a['as'],'attributes':_0x46c83a[_0xe5bd('0x1f')],'include':_0x46c83a[_0xe5bd('0x21')]?_[_0xe5bd('0x22')](_0x46c83a[_0xe5bd('0x21')],function(_0x514395){return{'model':db[_0x514395['model']],'as':_0x514395['as'],'attributes':_0x514395[_0xe5bd('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xe5bd('0x24')](function(_0x4c8d0a){logger[_0xe5bd('0x18')]('GetMailAccount',_0x233bee);logger[_0xe5bd('0x12')]('GetMailAccount',_0x233bee,JSON['stringify'](_0x4c8d0a));_0x1f6f1f(_0x4c8d0a);})[_0xe5bd('0x19')](function(_0x4264d7){logger[_0xe5bd('0x15')](_0xe5bd('0x1a'),_0x4264d7[_0xe5bd('0x17')],_0x233bee);_0xbab897(_0x3191e5[_0xe5bd('0x15')](0x1f4,_0x4264d7[_0xe5bd('0x17')]));});});};exports[_0xe5bd('0x25')]=function(_0x24782e){var _0x2e791f=this;return new Promise(function(_0x3a55cf,_0x3437b4){return db[_0xe5bd('0x1b')][_0xe5bd('0x26')]({'raw':_0x24782e['options']?_0x24782e[_0xe5bd('0x1c')]['raw']===undefined?!![]:![]:!![],'where':_0x24782e['options']?_0x24782e[_0xe5bd('0x1c')][_0xe5bd('0x1e')]||null:null,'attributes':_0x24782e[_0xe5bd('0x1c')]?_0x24782e[_0xe5bd('0x1c')][_0xe5bd('0x1f')]||null:null,'include':_0x24782e['options']?_0x24782e[_0xe5bd('0x1c')]['include']?_[_0xe5bd('0x22')](_0x24782e[_0xe5bd('0x1c')]['include'],function(_0x3bfe3b){return{'model':db[_0x3bfe3b[_0xe5bd('0x23')]],'as':_0x3bfe3b['as'],'attributes':_0x3bfe3b[_0xe5bd('0x1f')],'include':_0x3bfe3b[_0xe5bd('0x21')]?_[_0xe5bd('0x22')](_0x3bfe3b[_0xe5bd('0x21')],function(_0x3be8bf){return{'model':db[_0x3be8bf[_0xe5bd('0x23')]],'as':_0x3be8bf['as'],'attributes':_0x3be8bf[_0xe5bd('0x1f')],'include':_0x3be8bf[_0xe5bd('0x21')]?_['map'](_0x3be8bf[_0xe5bd('0x21')],function(_0x5de0bd){return{'model':db[_0x5de0bd['model']],'as':_0x5de0bd['as'],'attributes':_0x5de0bd[_0xe5bd('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xe5bd('0x24')](function(_0x22aa7b){logger[_0xe5bd('0x18')](_0xe5bd('0x25'),_0x24782e);logger[_0xe5bd('0x12')]('ShowMailAccount',_0x24782e,JSON['stringify'](_0x22aa7b));_0x3a55cf(_0x22aa7b);})[_0xe5bd('0x19')](function(_0x1ffa0d){logger['error'](_0xe5bd('0x25'),_0x1ffa0d['message'],_0x24782e);_0x3437b4(_0x2e791f['error'](0x1f4,_0x1ffa0d[_0xe5bd('0x17')]));});});};exports['NotifyMailAccount']=function(_0x5902c0){var _0x2b19a2=this;return new Promise(function(_0x1cabed,_0x29477a){var _0xf2e6cd={'body':_0x5902c0['body'],'channel':'mail'};var _0xf30ce1=_['difference'](_[_0xe5bd('0x27')](db['CmContact'][_0xe5bd('0x28')]),['createdAt',_0xe5bd('0x29'),'CompanyId',_0xe5bd('0x2a')]);var _0x337ce9=![];if(_0x5902c0['body']['id']){delete _0x5902c0['body']['id'];}if(_[_0xe5bd('0x2b')](_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x2d')])){return _0x29477a(_0x2b19a2['error'](0x1f4,_0xe5bd('0x2e')));}if(_['isNil'](_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x2c')])||_0x5902c0['body']['body']===''){return _0x29477a(_0x2b19a2[_0xe5bd('0x15')](0x1f4,_0xe5bd('0x2f')));}if(_[_0xe5bd('0x2b')](_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x30')])){return _0x29477a(_0x2b19a2[_0xe5bd('0x15')](0x1f4,_0xe5bd('0x31')+_0xf30ce1));}if(!_[_0xe5bd('0x32')](_0xf30ce1,_0x5902c0[_0xe5bd('0x2c')]['mapKey'])){return _0x29477a(_0x2b19a2[_0xe5bd('0x15')](0x1f4,'mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20'+_0xf30ce1));}var _0x988b02={};_0x988b02[_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x30')]]=_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x2d')];return db[_0xe5bd('0x1b')][_0xe5bd('0x26')]({'where':{'id':_0x5902c0[_0xe5bd('0x33')]['id']},'include':[{'model':db[_0xe5bd('0x34')],'as':'List','include':[{'model':db[_0xe5bd('0x35')],'as':_0xe5bd('0x36'),'where':_0x988b02,'limit':0x1,'order':[[_0xe5bd('0x29'),_0xe5bd('0x37')]]}]},{'model':db[_0xe5bd('0x38')],'as':_0xe5bd('0x39')},{'model':db['MailServerOut'],'as':_0xe5bd('0x3a')}]})[_0xe5bd('0x24')](function(_0x4a53cf){if(_0x4a53cf&&_0x4a53cf['List']){var _0x50a855=_0x4a53cf[_0xe5bd('0x3b')]({'plain':!![]});_0xf2e6cd[_0xe5bd('0x33')]=_[_0xe5bd('0x3c')](_0x50a855,[_0xe5bd('0x39'),_0xe5bd('0x3d')]);_0xf2e6cd['applications']=_0x50a855[_0xe5bd('0x39')];_0xf2e6cd['list']=_0x50a855[_0xe5bd('0x3d')];_0xf2e6cd[_0xe5bd('0x3e')]=_['orderBy'](_0xf2e6cd[_0xe5bd('0x3e')],[_0xe5bd('0x3f')],[_0xe5bd('0x40')]);if(_0xf2e6cd['account']&&_0xf2e6cd['account']['autoclose']){_0xf2e6cd[_0xe5bd('0x3e')][_0xe5bd('0x41')]({'id':0x0,'priority':_0xf2e6cd[_0xe5bd('0x3e')][_0xe5bd('0x42')]+0x1,'app':'close','appdata':_0xe5bd('0x43'),'interval':_0xe5bd('0x44')});}if(_0xf2e6cd['account'][_0xe5bd('0x39')]){delete _0xf2e6cd[_0xe5bd('0x33')][_0xe5bd('0x39')];}if(_0xf2e6cd[_0xe5bd('0x33')][_0xe5bd('0x3d')]){delete _0xf2e6cd[_0xe5bd('0x33')][_0xe5bd('0x3d')];}if(_0x50a855[_0xe5bd('0x3d')][_0xe5bd('0x36')][_0xe5bd('0x42')]){return _0x50a855[_0xe5bd('0x3d')][_0xe5bd('0x36')][0x0];}var _0x5347b8=_[_0xe5bd('0xd')](_0x5902c0[_0xe5bd('0x2c')],{'firstName':_0x5902c0[_0xe5bd('0x2c')]['from'],'ListId':_0x50a855[_0xe5bd('0x2a')]});_0x5347b8[_0x5902c0[_0xe5bd('0x2c')]['mapKey']]=_0x5902c0[_0xe5bd('0x2c')]['from'];return db[_0xe5bd('0x35')][_0xe5bd('0x45')](_0x5347b8);}else{throw new Error('List\x20not\x20found');}})['then'](function(_0x3dceaf){_0xf2e6cd['contact']=_0x3dceaf;if(_0x3dceaf){if(!_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')]['messageId']){_0x5902c0['body'][_0xe5bd('0x17')][_0xe5bd('0x46')]=rs['generate']()+'\x20'+_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')]['from'];}var _0x41e645={'ContactId':_0x3dceaf['id'],'MailAccountId':_0x5902c0[_0xe5bd('0x33')]['id'],'inReplyTo':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')]['messageId'],'to':_0x5902c0['body'][_0xe5bd('0x17')][_0xe5bd('0x2d')],'cc':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')]['cc'],'subject':_0x5902c0['body']['message'][_0xe5bd('0x47')],'attach':_0x5902c0['body'][_0xe5bd('0x17')][_0xe5bd('0x48')],'lastMsgAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgDirection':'in','lastMsgBody':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x2c')]};return db[_0xe5bd('0x49')][_0xe5bd('0x26')]({'where':{'closed':![],'MailAccountId':_0x5902c0[_0xe5bd('0x33')]['id']},'include':[{'model':db[_0xe5bd('0x4a')],'as':'Messages','attributes':[_0xe5bd('0x46')],'where':{'messageId':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x4b')]}}]})[_0xe5bd('0x24')](function(_0x4bfba6){if(_0x4bfba6){return[_0x4bfba6,![]];}return db[_0xe5bd('0x49')][_0xe5bd('0x45')](_0x41e645)[_0xe5bd('0x24')](function(_0x4ec16c){return[_0x4ec16c,!![]];});});}else{throw new Error(_0xe5bd('0x4c'));}})[_0xe5bd('0x4d')](function(_0x27f280,_0x327d01){if(_0x27f280){_0x337ce9=_0x327d01;if(!_0x327d01){return _0x27f280['update']({'inReplyTo':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x46')],'to':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')]['from'],'cc':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')]['cc'],'subject':_0x5902c0['body']['message'][_0xe5bd('0x47')],'attach':_0x27f280[_0xe5bd('0x48')]?_0x27f280[_0xe5bd('0x48')]:_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x48')],'substatus':null,'substatusAt':moment()[_0xe5bd('0x4e')]('YYYY-MM-DD\x20HH:mm:ss'),'lastMsgAt':moment()[_0xe5bd('0x4e')](_0xe5bd('0x4f')),'lastMsgDirection':'in','lastMsgBody':_0x5902c0['body'][_0xe5bd('0x2c')]});}else{return _0x27f280;}}})['then'](function(_0x1913cd){_0xf2e6cd[_0xe5bd('0x50')]=_0x1913cd['get']({'plain':!![]});_0xf2e6cd[_0xe5bd('0x50')][_0xe5bd('0x51')]=_0x337ce9;return db[_0xe5bd('0x4a')][_0xe5bd('0x45')]({'body':_0x5902c0['body'][_0xe5bd('0x2c')],'MailAccountId':_0x5902c0[_0xe5bd('0x33')]['id'],'MailInteractionId':_0x1913cd['id'],'direction':'in','ContactId':_0xf2e6cd[_0xe5bd('0x52')]['id'],'messageId':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x46')],'from':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x2d')],'to':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')]['to'],'cc':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')]['cc'],'subject':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x47')],'attach':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x48')],'Attachments':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x53')],'originTo':_0x5902c0[_0xe5bd('0x2c')]['message']['originTo'],'originCc':_0x5902c0['body']['message'][_0xe5bd('0x54')],'bcc':_0x5902c0[_0xe5bd('0x2c')][_0xe5bd('0x17')][_0xe5bd('0x55')]},{'include':[{'model':db[_0xe5bd('0x56')],'as':_0xe5bd('0x57')}]});})['then'](function(_0x2a7b6b){_0xf2e6cd[_0xe5bd('0x17')]=_0x2a7b6b;if(_0xf2e6cd[_0xe5bd('0x50')]['UserId']){return db['User'][_0xe5bd('0x26')]({'attributes':['id','name'],'where':{'id':_0xf2e6cd[_0xe5bd('0x50')]['UserId']}})[_0xe5bd('0x24')](function(_0x493ae7){if(_0x493ae7){_0xf2e6cd['applications'][_0xe5bd('0x58')]({'id':0x0,'priority':0x0,'app':_0xe5bd('0x59'),'appdata':_0x493ae7[_0xe5bd('0x5a')]+','+(_0xf2e6cd[_0xe5bd('0x33')][_0xe5bd('0x5b')]||0xa),'interval':'*,*,*,*'});}return respondWithRpcPromise(_0xe5bd('0x5c'),_0xe5bd('0x5d'),_0xf2e6cd);});}return respondWithRpcPromise(_0xe5bd('0x5c'),_0xe5bd('0x5d'),_0xf2e6cd);})[_0xe5bd('0x24')](function(_0x4b06fe){_0x1cabed(_0x4b06fe);})[_0xe5bd('0x19')](function(_0x4b0a7c){_0x29477a(_0x2b19a2[_0xe5bd('0x15')](0x1f4,_0x4b0a7c[_0xe5bd('0x17')]));});});};
\ No newline at end of file
index a48c25b..ebf3adf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0ef=['remove','update','length','mailAccount:','./mailAccount.events','save'];(function(_0x3bf0e5,_0xcc54f0){var _0x3d4edd=function(_0x3ac71d){while(--_0x3ac71d){_0x3bf0e5['push'](_0x3bf0e5['shift']());}};_0x3d4edd(++_0xcc54f0);}(_0xe0ef,0x112));var _0xfe0e=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0xe0ef[_0x40a045];return _0x1a687c;};'use strict';var MailAccountEvents=require(_0xfe0e('0x0'));var events=[_0xfe0e('0x1'),_0xfe0e('0x2'),_0xfe0e('0x3')];function createListener(_0x5bd32a,_0x433b7e){return function(_0x3efa40){_0x433b7e['emit'](_0x5bd32a,_0x3efa40);};}function removeListener(_0x1c6ca8,_0x29bf93){return function(){MailAccountEvents['removeListener'](_0x1c6ca8,_0x29bf93);};}exports['register']=function(_0x1f965d){for(var _0x2e047f=0x0,_0x529a2b=events[_0xfe0e('0x4')];_0x2e047f<_0x529a2b;_0x2e047f++){var _0x46aaa2=events[_0x2e047f];var _0x10933d=createListener(_0xfe0e('0x5')+_0x46aaa2,_0x1f965d);MailAccountEvents['on'](_0x46aaa2,_0x10933d);}};
\ No newline at end of file
+var _0x673d=['emit','removeListener','register','length','./mailAccount.events','save','update'];(function(_0x311909,_0x414bf7){var _0x8d3163=function(_0x226f55){while(--_0x226f55){_0x311909['push'](_0x311909['shift']());}};_0x8d3163(++_0x414bf7);}(_0x673d,0x12a));var _0xd673=function(_0x42e495,_0x49d9da){_0x42e495=_0x42e495-0x0;var _0x595da1=_0x673d[_0x42e495];return _0x595da1;};'use strict';var MailAccountEvents=require(_0xd673('0x0'));var events=[_0xd673('0x1'),'remove',_0xd673('0x2')];function createListener(_0x2fe8fa,_0x1f3873){return function(_0x3b28a1){_0x1f3873[_0xd673('0x3')](_0x2fe8fa,_0x3b28a1);};}function removeListener(_0x9cfdd8,_0x546c10){return function(){MailAccountEvents[_0xd673('0x4')](_0x9cfdd8,_0x546c10);};}exports[_0xd673('0x5')]=function(_0x51c129){for(var _0x438711=0x0,_0x417037=events[_0xd673('0x6')];_0x438711<_0x417037;_0x438711++){var _0x5e1259=events[_0x438711];var _0x5ef8d2=createListener('mailAccount:'+_0x5e1259,_0x51c129);MailAccountEvents['on'](_0x5e1259,_0x5ef8d2);}};
\ No newline at end of file
index 3752d49..5f46f6a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed95=['path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailApplication.controller','get','/:id','put','isAuthenticated','update','delete','exports','multer','util'];(function(_0x57bf1d,_0x34b04e){var _0x1a582c=function(_0x392fcf){while(--_0x392fcf){_0x57bf1d['push'](_0x57bf1d['shift']());}};_0x1a582c(++_0x34b04e);}(_0xed95,0xb9));var _0x5ed9=function(_0x4640a7,_0x18cec2){_0x4640a7=_0x4640a7-0x0;var _0x1c7890=_0xed95[_0x4640a7];return _0x1c7890;};'use strict';var multer=require(_0x5ed9('0x0'));var util=require(_0x5ed9('0x1'));var path=require(_0x5ed9('0x2'));var timeout=require(_0x5ed9('0x3'));var express=require(_0x5ed9('0x4'));var router=express[_0x5ed9('0x5')]();var auth=require(_0x5ed9('0x6'));var interaction=require(_0x5ed9('0x7'));var config=require(_0x5ed9('0x8'));var controller=require(_0x5ed9('0x9'));router[_0x5ed9('0xa')](_0x5ed9('0xb'),auth['isAuthenticated'](),controller['show']);router[_0x5ed9('0xc')](_0x5ed9('0xb'),auth[_0x5ed9('0xd')](),controller[_0x5ed9('0xe')]);router[_0x5ed9('0xf')](_0x5ed9('0xb'),auth['isAuthenticated'](),controller['destroy']);module[_0x5ed9('0x10')]=router;
\ No newline at end of file
+var _0xfd28=['isAuthenticated','show','put','update','delete','destroy','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','/:id'];(function(_0x5aacd5,_0xa394c4){var _0x49eee5=function(_0x334de6){while(--_0x334de6){_0x5aacd5['push'](_0x5aacd5['shift']());}};_0x49eee5(++_0xa394c4);}(_0xfd28,0x148));var _0x8fd2=function(_0x599f41,_0x4db732){_0x599f41=_0x599f41-0x0;var _0x2e4d58=_0xfd28[_0x599f41];return _0x2e4d58;};'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('./mailApplication.controller');router[_0x8fd2('0x6')](_0x8fd2('0x7'),auth[_0x8fd2('0x8')](),controller[_0x8fd2('0x9')]);router[_0x8fd2('0xa')]('/:id',auth['isAuthenticated'](),controller[_0x8fd2('0xb')]);router[_0x8fd2('0xc')](_0x8fd2('0x7'),auth['isAuthenticated'](),controller[_0x8fd2('0xd')]);module['exports']=router;
\ No newline at end of file
index 4540207..050b6f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c6a=['INTEGER','STRING','noop','TEXT','*,*,*,*','exports'];(function(_0x13ea00,_0x12f610){var _0x1f7347=function(_0x34ae63){while(--_0x34ae63){_0x13ea00['push'](_0x13ea00['shift']());}};_0x1f7347(++_0x12f610);}(_0x3c6a,0xd1));var _0xa3c6=function(_0x2e4aa2,_0x11956a){_0x2e4aa2=_0x2e4aa2-0x0;var _0x5e6092=_0x3c6a[_0x2e4aa2];return _0x5e6092;};'use strict';var Sequelize=require('sequelize');module[_0xa3c6('0x0')]={'priority':{'type':Sequelize[_0xa3c6('0x1')],'allowNull':![]},'app':{'type':Sequelize[_0xa3c6('0x2')],'allowNull':![],'defaultValue':_0xa3c6('0x3')},'appdata':{'type':Sequelize[_0xa3c6('0x4')]()},'description':{'type':Sequelize[_0xa3c6('0x2')]},'interval':{'type':Sequelize[_0xa3c6('0x2')],'defaultValue':_0xa3c6('0x5')}};
\ No newline at end of file
+var _0xd93e=['STRING','*,*,*,*','sequelize','exports','INTEGER','noop','TEXT'];(function(_0x32e649,_0x228649){var _0x14d386=function(_0x3fb3ed){while(--_0x3fb3ed){_0x32e649['push'](_0x32e649['shift']());}};_0x14d386(++_0x228649);}(_0xd93e,0x1d7));var _0xed93=function(_0x4ff09b,_0x53f67d){_0x4ff09b=_0x4ff09b-0x0;var _0x3f5c2e=_0xd93e[_0x4ff09b];return _0x3f5c2e;};'use strict';var Sequelize=require(_0xed93('0x0'));module[_0xed93('0x1')]={'priority':{'type':Sequelize[_0xed93('0x2')],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0xed93('0x3')},'appdata':{'type':Sequelize[_0xed93('0x4')]()},'description':{'type':Sequelize[_0xed93('0x5')]},'interval':{'type':Sequelize[_0xed93('0x5')],'defaultValue':_0xed93('0x6')}};
\ No newline at end of file
index 46365ce..7c36525 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['Content-Range','apply','reject','save','then','error','stack','send','show','params','keys','MailApplication','rawAttributes','query','filters','intersection','attributes','model','fields','length','includeAll','merge','find','catch','body','destroy','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','sendStatus','status','end','json','count','offset','limit','set'];(function(_0x3c2eec,_0x38f8b4){var _0x41937a=function(_0x285089){while(--_0x285089){_0x3c2eec['push'](_0x3c2eec['shift']());}};_0x41937a(++_0x38f8b4);}(_0xa9e0,0x123));var _0x0a9e=function(_0xf50820,_0x56f041){_0xf50820=_0xf50820-0x0;var _0x2a9b10=_0xa9e0[_0xf50820];return _0x2a9b10;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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={'raw':!![],'where':{'id':_0x33161b[_0x0a9e('0x24')]['id']}},_0x479bc4={};_0x479bc4['model']=_[_0x0a9e('0x25')](db[_0x0a9e('0x26')][_0x0a9e('0x27')]);_0x479bc4[_0x0a9e('0x28')]=_[_0x0a9e('0x25')](_0x33161b[_0x0a9e('0x28')]);_0x479bc4[_0x0a9e('0x29')]=_[_0x0a9e('0x2a')](_0x479bc4['model'],_0x479bc4[_0x0a9e('0x28')]);_0x384319[_0x0a9e('0x2b')]=_[_0x0a9e('0x2a')](_0x479bc4[_0x0a9e('0x2c')],qs['fields'](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x2d')]));_0x384319[_0x0a9e('0x2b')]=_0x384319[_0x0a9e('0x2b')][_0x0a9e('0x2e')]?_0x384319[_0x0a9e('0x2b')]:_0x479bc4[_0x0a9e('0x2c')];if(_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x2f')]){_0x384319['include']=[{'all':!![]}];}_0x384319=_[_0x0a9e('0x30')]({},_0x384319,_0x33161b['options']);return db[_0x0a9e('0x26')][_0x0a9e('0x31')](_0x384319)[_0x0a9e('0x1f')](handleEntityNotFound(_0x526cf3,null))[_0x0a9e('0x1f')](respondWithResult(_0x526cf3,null))[_0x0a9e('0x32')](handleError(_0x526cf3,null));};exports['update']=function(_0x66c1d2,_0x46f0a5){if(_0x66c1d2[_0x0a9e('0x33')]['id']){delete _0x66c1d2[_0x0a9e('0x33')]['id'];}return db[_0x0a9e('0x26')][_0x0a9e('0x31')]({'where':{'id':_0x66c1d2[_0x0a9e('0x24')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x46f0a5,null))['then'](saveUpdates(_0x66c1d2[_0x0a9e('0x33')],null))['then'](respondWithResult(_0x46f0a5,null))[_0x0a9e('0x32')](handleError(_0x46f0a5,null));};exports[_0x0a9e('0x34')]=function(_0x2b7e7f,_0x3f3d41){return db['MailApplication'][_0x0a9e('0x31')]({'where':{'id':_0x2b7e7f[_0x0a9e('0x24')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x3f3d41,null))[_0x0a9e('0x1f')](removeEntity(_0x3f3d41,null))['catch'](handleError(_0x3f3d41,null));};
\ No newline at end of file
+var _0xa9e0=['Content-Range','apply','reject','save','then','error','stack','send','show','params','keys','MailApplication','rawAttributes','query','filters','intersection','attributes','model','fields','length','includeAll','merge','find','catch','body','destroy','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','sendStatus','status','end','json','count','offset','limit','set'];(function(_0x33f676,_0x5919c2){var _0x2a755e=function(_0x377b96){while(--_0x377b96){_0x33f676['push'](_0x33f676['shift']());}};_0x2a755e(++_0x5919c2);}(_0xa9e0,0x123));var _0x0a9e=function(_0xf71120,_0x25b7f9){_0xf71120=_0xf71120-0x0;var _0xbe2fd3=_0xa9e0[_0xf71120];return _0xbe2fd3;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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={'raw':!![],'where':{'id':_0x33161b[_0x0a9e('0x24')]['id']}},_0x479bc4={};_0x479bc4['model']=_[_0x0a9e('0x25')](db[_0x0a9e('0x26')][_0x0a9e('0x27')]);_0x479bc4[_0x0a9e('0x28')]=_[_0x0a9e('0x25')](_0x33161b[_0x0a9e('0x28')]);_0x479bc4[_0x0a9e('0x29')]=_[_0x0a9e('0x2a')](_0x479bc4['model'],_0x479bc4[_0x0a9e('0x28')]);_0x384319[_0x0a9e('0x2b')]=_[_0x0a9e('0x2a')](_0x479bc4[_0x0a9e('0x2c')],qs['fields'](_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x2d')]));_0x384319[_0x0a9e('0x2b')]=_0x384319[_0x0a9e('0x2b')][_0x0a9e('0x2e')]?_0x384319[_0x0a9e('0x2b')]:_0x479bc4[_0x0a9e('0x2c')];if(_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x2f')]){_0x384319['include']=[{'all':!![]}];}_0x384319=_[_0x0a9e('0x30')]({},_0x384319,_0x33161b['options']);return db[_0x0a9e('0x26')][_0x0a9e('0x31')](_0x384319)[_0x0a9e('0x1f')](handleEntityNotFound(_0x526cf3,null))[_0x0a9e('0x1f')](respondWithResult(_0x526cf3,null))[_0x0a9e('0x32')](handleError(_0x526cf3,null));};exports['update']=function(_0x66c1d2,_0x46f0a5){if(_0x66c1d2[_0x0a9e('0x33')]['id']){delete _0x66c1d2[_0x0a9e('0x33')]['id'];}return db[_0x0a9e('0x26')][_0x0a9e('0x31')]({'where':{'id':_0x66c1d2[_0x0a9e('0x24')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x46f0a5,null))['then'](saveUpdates(_0x66c1d2[_0x0a9e('0x33')],null))['then'](respondWithResult(_0x46f0a5,null))[_0x0a9e('0x32')](handleError(_0x46f0a5,null));};exports[_0x0a9e('0x34')]=function(_0x2b7e7f,_0x3f3d41){return db['MailApplication'][_0x0a9e('0x31')]({'where':{'id':_0x2b7e7f[_0x0a9e('0x24')]['id']}})[_0x0a9e('0x1f')](handleEntityNotFound(_0x3f3d41,null))[_0x0a9e('0x1f')](removeEntity(_0x3f3d41,null))['catch'](handleError(_0x3f3d41,null));};
\ No newline at end of file
index 1c10d1a..bddc4fa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfb3b=['../../config/logger','bluebird','request-promise','exports','MailApplication','mail_applications','util'];(function(_0x580647,_0x43d2c3){var _0x5f0792=function(_0x386cef){while(--_0x386cef){_0x580647['push'](_0x580647['shift']());}};_0x5f0792(++_0x43d2c3);}(_0xfb3b,0xd8));var _0xbfb3=function(_0x5da5a6,_0x492e51){_0x5da5a6=_0x5da5a6-0x0;var _0x43561c=_0xfb3b[_0x5da5a6];return _0x43561c;};'use strict';var _=require('lodash');var util=require(_0xbfb3('0x0'));var logger=require(_0xbfb3('0x1'))('api');var moment=require('moment');var BPromise=require(_0xbfb3('0x2'));var rp=require(_0xbfb3('0x3'));var attributes=require('./mailApplication.attributes');module[_0xbfb3('0x4')]=function(_0x426d31,_0x47e95b){return _0x426d31['define'](_0xbfb3('0x5'),attributes,{'tableName':_0xbfb3('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x699a=['mail_applications','lodash','../../config/logger','bluebird','request-promise','./mailApplication.attributes','exports','MailApplication'];(function(_0x225ab6,_0x1e447a){var _0x1cec61=function(_0xd09caf){while(--_0xd09caf){_0x225ab6['push'](_0x225ab6['shift']());}};_0x1cec61(++_0x1e447a);}(_0x699a,0x161));var _0xa699=function(_0x55821d,_0x27a22e){_0x55821d=_0x55821d-0x0;var _0x58ea8a=_0x699a[_0x55821d];return _0x58ea8a;};'use strict';var _=require(_0xa699('0x0'));var util=require('util');var logger=require(_0xa699('0x1'))('api');var moment=require('moment');var BPromise=require(_0xa699('0x2'));var rp=require(_0xa699('0x3'));var attributes=require(_0xa699('0x4'));module[_0xa699('0x5')]=function(_0x358b66,_0x587ca3){return _0x358b66['define'](_0xa699('0x6'),attributes,{'tableName':_0xa699('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index badda1b..7b38d49 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','MailApplication,\x20%s,\x20%s','request\x20sent','debug','MailApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','UpdateMailApplication','update','options','raw','attributes','limit','lodash','util','moment'];(function(_0x3318c3,_0x35066){var _0x15c002=function(_0xd82271){while(--_0xd82271){_0x3318c3['push'](_0x3318c3['shift']());}};_0x15c002(++_0x35066);}(_0x9957,0x93));var _0x7995=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x9957[_0x2dafbe];return _0x58a45a;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7995('0x4'));var db=require(_0x7995('0x5'))['db'];var utils=require(_0x7995('0x6'));var logger=require(_0x7995('0x7'))('rpc');var config=require(_0x7995('0x8'));var jayson=require(_0x7995('0x9'));var client=jayson[_0x7995('0xa')][_0x7995('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xbda126,_0x326741,_0x4996ca){return new BPromise(function(_0x465276,_0x1cad37){return client['request'](_0xbda126,_0x4996ca)[_0x7995('0xc')](function(_0x3116fb){logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));logger[_0x7995('0x10')](_0x7995('0x11'),_0x326741,'request\x20sent',JSON[_0x7995('0x12')](_0x3116fb));if(_0x3116fb[_0x7995('0x13')]){if(_0x3116fb['error'][_0x7995('0x14')]===0x1f4){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x1cad37(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}logger['error']('MailApplication,\x20%s,\x20%s',_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x465276(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}else{logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));_0x465276(_0x3116fb[_0x7995('0x16')]['message']);}})[_0x7995('0x17')](function(_0x565d97){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x565d97);_0x1cad37(_0x565d97);});});}exports[_0x7995('0x18')]=function(_0x291317){var _0x1e1415=this;return new Promise(function(_0x37a7d4,_0x4faa60){return db['MailApplication'][_0x7995('0x19')](_0x291317['body'],{'raw':_0x291317['options']?_0x291317[_0x7995('0x1a')][_0x7995('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x291317['options']?_0x291317[_0x7995('0x1a')]['where']||null:null,'attributes':_0x291317['options']?_0x291317[_0x7995('0x1a')][_0x7995('0x1c')]||null:null,'limit':_0x291317[_0x7995('0x1a')]?_0x291317[_0x7995('0x1a')][_0x7995('0x1d')]||null:null})[_0x7995('0xc')](function(_0x5d40ae){logger[_0x7995('0xd')](_0x7995('0x18'),_0x291317);logger[_0x7995('0x10')](_0x7995('0x18'),_0x291317,JSON[_0x7995('0x12')](_0x5d40ae));_0x37a7d4(_0x5d40ae);})[_0x7995('0x17')](function(_0x475351){logger[_0x7995('0x13')]('UpdateMailApplication',_0x475351[_0x7995('0x15')],_0x291317);_0x4faa60(_0x1e1415[_0x7995('0x13')](0x1f4,_0x475351[_0x7995('0x15')]));});});};
\ No newline at end of file
+var _0x9957=['bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','MailApplication,\x20%s,\x20%s','request\x20sent','debug','MailApplication,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','UpdateMailApplication','update','options','raw','attributes','limit','lodash','util','moment'];(function(_0x47a72d,_0x42f970){var _0x34a01e=function(_0x59f783){while(--_0x59f783){_0x47a72d['push'](_0x47a72d['shift']());}};_0x34a01e(++_0x42f970);}(_0x9957,0x93));var _0x7995=function(_0xbca1b1,_0x33f0ce){_0xbca1b1=_0xbca1b1-0x0;var _0x4e1686=_0x9957[_0xbca1b1];return _0x4e1686;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var BPromise=require(_0x7995('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7995('0x4'));var db=require(_0x7995('0x5'))['db'];var utils=require(_0x7995('0x6'));var logger=require(_0x7995('0x7'))('rpc');var config=require(_0x7995('0x8'));var jayson=require(_0x7995('0x9'));var client=jayson[_0x7995('0xa')][_0x7995('0xb')]({'port':0x232a});function respondWithRpcPromise(_0xbda126,_0x326741,_0x4996ca){return new BPromise(function(_0x465276,_0x1cad37){return client['request'](_0xbda126,_0x4996ca)[_0x7995('0xc')](function(_0x3116fb){logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));logger[_0x7995('0x10')](_0x7995('0x11'),_0x326741,'request\x20sent',JSON[_0x7995('0x12')](_0x3116fb));if(_0x3116fb[_0x7995('0x13')]){if(_0x3116fb['error'][_0x7995('0x14')]===0x1f4){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x1cad37(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}logger['error']('MailApplication,\x20%s,\x20%s',_0x326741,_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);return _0x465276(_0x3116fb[_0x7995('0x13')][_0x7995('0x15')]);}else{logger[_0x7995('0xd')](_0x7995('0xe'),_0x326741,_0x7995('0xf'));_0x465276(_0x3116fb[_0x7995('0x16')]['message']);}})[_0x7995('0x17')](function(_0x565d97){logger[_0x7995('0x13')](_0x7995('0xe'),_0x326741,_0x565d97);_0x1cad37(_0x565d97);});});}exports[_0x7995('0x18')]=function(_0x291317){var _0x1e1415=this;return new Promise(function(_0x37a7d4,_0x4faa60){return db['MailApplication'][_0x7995('0x19')](_0x291317['body'],{'raw':_0x291317['options']?_0x291317[_0x7995('0x1a')][_0x7995('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x291317['options']?_0x291317[_0x7995('0x1a')]['where']||null:null,'attributes':_0x291317['options']?_0x291317[_0x7995('0x1a')][_0x7995('0x1c')]||null:null,'limit':_0x291317[_0x7995('0x1a')]?_0x291317[_0x7995('0x1a')][_0x7995('0x1d')]||null:null})[_0x7995('0xc')](function(_0x5d40ae){logger[_0x7995('0xd')](_0x7995('0x18'),_0x291317);logger[_0x7995('0x10')](_0x7995('0x18'),_0x291317,JSON[_0x7995('0x12')](_0x5d40ae));_0x37a7d4(_0x5d40ae);})[_0x7995('0x17')](function(_0x475351){logger[_0x7995('0x13')]('UpdateMailApplication',_0x475351[_0x7995('0x15')],_0x291317);_0x4faa60(_0x1e1415[_0x7995('0x13')](0x1f4,_0x475351[_0x7995('0x15')]));});});};
\ No newline at end of file
index 8e6c75c..9a4c4eb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b06=['util','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./mailInteraction.controller','get','isAuthenticated','describe','/:id','/:id/messages','getMessages','download','post','create','addMessage','/:id/tags','tracked','mail','mailinteraction:addtags','put','mailinteraction:update','update','delete','destroy','removeTags','exports','multer'];(function(_0x158a58,_0x28e8e7){var _0x4935d9=function(_0x1e698c){while(--_0x1e698c){_0x158a58['push'](_0x158a58['shift']());}};_0x4935d9(++_0x28e8e7);}(_0x7b06,0x1cf));var _0x67b0=function(_0x1fc18b,_0x13d27d){_0x1fc18b=_0x1fc18b-0x0;var _0x16a351=_0x7b06[_0x1fc18b];return _0x16a351;};'use strict';var multer=require(_0x67b0('0x0'));var util=require(_0x67b0('0x1'));var path=require('path');var timeout=require(_0x67b0('0x2'));var express=require(_0x67b0('0x3'));var router=express[_0x67b0('0x4')]();var auth=require(_0x67b0('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x67b0('0x6'));var controller=require(_0x67b0('0x7'));router[_0x67b0('0x8')]('/',auth['isAuthenticated'](),controller['index']);router['get']('/describe',auth[_0x67b0('0x9')](),controller[_0x67b0('0xa')]);router['get'](_0x67b0('0xb'),auth[_0x67b0('0x9')](),controller['show']);router[_0x67b0('0x8')](_0x67b0('0xc'),auth['isAuthenticated'](),controller[_0x67b0('0xd')]);router['get']('/:id/download',auth[_0x67b0('0x9')](),controller[_0x67b0('0xe')]);router[_0x67b0('0xf')]('/',auth[_0x67b0('0x9')](),controller[_0x67b0('0x10')]);router[_0x67b0('0xf')](_0x67b0('0xc'),auth[_0x67b0('0x9')](),controller[_0x67b0('0x11')]);router[_0x67b0('0xf')](_0x67b0('0x12'),auth[_0x67b0('0x9')](),interaction[_0x67b0('0x13')](_0x67b0('0x14'),_0x67b0('0x15')),controller['addTags']);router[_0x67b0('0x16')](_0x67b0('0xb'),auth['isAuthenticated'](),interaction[_0x67b0('0x13')]('mail',_0x67b0('0x17')),controller[_0x67b0('0x18')]);router[_0x67b0('0x19')](_0x67b0('0xb'),auth['isAuthenticated'](),interaction[_0x67b0('0x13')]('mail','mailinteraction:destroy'),controller[_0x67b0('0x1a')]);router[_0x67b0('0x19')](_0x67b0('0x12'),auth[_0x67b0('0x9')](),controller[_0x67b0('0x1b')]);module[_0x67b0('0x1c')]=router;
\ No newline at end of file
+var _0xf275=['update','delete','destroy','removeTags','exports','multer','util','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailInteraction.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/messages','getMessages','/:id/download','post','/:id/tags','tracked','mailinteraction:addtags','addTags','mailinteraction:update'];(function(_0xd547cd,_0x3ad91f){var _0x1e3cff=function(_0x313e02){while(--_0x313e02){_0xd547cd['push'](_0xd547cd['shift']());}};_0x1e3cff(++_0x3ad91f);}(_0xf275,0xd0));var _0x5f27=function(_0x8366c8,_0x131b6c){_0x8366c8=_0x8366c8-0x0;var _0x48605a=_0xf275[_0x8366c8];return _0x48605a;};'use strict';var multer=require(_0x5f27('0x0'));var util=require(_0x5f27('0x1'));var path=require('path');var timeout=require(_0x5f27('0x2'));var express=require(_0x5f27('0x3'));var router=express['Router']();var auth=require(_0x5f27('0x4'));var interaction=require(_0x5f27('0x5'));var config=require(_0x5f27('0x6'));var controller=require(_0x5f27('0x7'));router[_0x5f27('0x8')]('/',auth[_0x5f27('0x9')](),controller[_0x5f27('0xa')]);router[_0x5f27('0x8')](_0x5f27('0xb'),auth[_0x5f27('0x9')](),controller[_0x5f27('0xc')]);router[_0x5f27('0x8')](_0x5f27('0xd'),auth[_0x5f27('0x9')](),controller[_0x5f27('0xe')]);router[_0x5f27('0x8')](_0x5f27('0xf'),auth[_0x5f27('0x9')](),controller[_0x5f27('0x10')]);router['get'](_0x5f27('0x11'),auth[_0x5f27('0x9')](),controller['download']);router[_0x5f27('0x12')]('/',auth[_0x5f27('0x9')](),controller['create']);router[_0x5f27('0x12')]('/:id/messages',auth[_0x5f27('0x9')](),controller['addMessage']);router[_0x5f27('0x12')](_0x5f27('0x13'),auth[_0x5f27('0x9')](),interaction[_0x5f27('0x14')]('mail',_0x5f27('0x15')),controller[_0x5f27('0x16')]);router['put'](_0x5f27('0xd'),auth[_0x5f27('0x9')](),interaction[_0x5f27('0x14')]('mail',_0x5f27('0x17')),controller[_0x5f27('0x18')]);router[_0x5f27('0x19')](_0x5f27('0xd'),auth[_0x5f27('0x9')](),interaction['tracked']('mail','mailinteraction:destroy'),controller[_0x5f27('0x1a')]);router[_0x5f27('0x19')](_0x5f27('0x13'),auth[_0x5f27('0x9')](),controller[_0x5f27('0x1b')]);module[_0x5f27('0x1c')]=router;
\ No newline at end of file
index 4c7a37c..60ce639 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1f2b=['DATE','STRING','TEXT','BOOLEAN','ENUM','out','getDataValue','lastMsgBody','fromString','split','join','html-to-text','iconv','exports'];(function(_0x2d2c16,_0x4e88b6){var _0x53f2fb=function(_0x6b6dac){while(--_0x6b6dac){_0x2d2c16['push'](_0x2d2c16['shift']());}};_0x53f2fb(++_0x4e88b6);}(_0x1f2b,0x1cb));var _0xb1f2=function(_0x1cd3fd,_0x207373){_0x1cd3fd=_0x1cd3fd-0x0;var _0x369c49=_0x1f2b[_0x1cd3fd];return _0x369c49;};'use strict';var Sequelize=require('sequelize');var htmlToText=require(_0xb1f2('0x0'));var iconv=require(_0xb1f2('0x1'));module[_0xb1f2('0x2')]={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xb1f2('0x3')]},'disposition':{'type':Sequelize[_0xb1f2('0x4')]},'note':{'type':Sequelize['STRING']},'inReplyTo':{'type':Sequelize[_0xb1f2('0x4')](0x1fe)},'to':{'type':Sequelize[_0xb1f2('0x4')]},'cc':{'type':Sequelize[_0xb1f2('0x5')]('long')},'subject':{'type':Sequelize[_0xb1f2('0x5')]()},'attach':{'type':Sequelize[_0xb1f2('0x6')],'defaultValue':![]},'read1stAt':{'type':Sequelize[_0xb1f2('0x3')]},'substatus':{'type':Sequelize['STRING'](0x3c)},'substatusAt':{'type':Sequelize[_0xb1f2('0x3')]},'firstMsgDirection':{'type':Sequelize[_0xb1f2('0x7')]('in',_0xb1f2('0x8')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0xb1f2('0x3')]},'lastMsgDirection':{'type':Sequelize['ENUM']('in',_0xb1f2('0x8')),'defaultValue':'in','allowNull':![]},'lastMsgBody':{'type':Sequelize[_0xb1f2('0x5')]('long'),'get':function(){try{return this[_0xb1f2('0x9')](_0xb1f2('0xa'))?htmlToText[_0xb1f2('0xb')](this[_0xb1f2('0x9')](_0xb1f2('0xa')),{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'ignoreImage':!![]})[_0xb1f2('0xc')]('\x0a')['slice'](0x0,0x6)[_0xb1f2('0xd')]('\x0a'):null;}catch(_0x4fd9f3){return null;}}}};
\ No newline at end of file
+var _0x58de=['join','html-to-text','iconv','exports','BOOLEAN','DATE','STRING','TEXT','out','ENUM','long','getDataValue','lastMsgBody','fromString','split','slice'];(function(_0x4f6fb1,_0x1b28d6){var _0x3d0273=function(_0x5e80d6){while(--_0x5e80d6){_0x4f6fb1['push'](_0x4f6fb1['shift']());}};_0x3d0273(++_0x1b28d6);}(_0x58de,0x91));var _0xe58d=function(_0x3ed924,_0x2e78cd){_0x3ed924=_0x3ed924-0x0;var _0x587179=_0x58de[_0x3ed924];return _0x587179;};'use strict';var Sequelize=require('sequelize');var htmlToText=require(_0xe58d('0x0'));var iconv=require(_0xe58d('0x1'));module[_0xe58d('0x2')]={'closed':{'type':Sequelize[_0xe58d('0x3')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xe58d('0x4')]},'disposition':{'type':Sequelize[_0xe58d('0x5')]},'note':{'type':Sequelize[_0xe58d('0x5')]},'inReplyTo':{'type':Sequelize['STRING'](0x1fe)},'to':{'type':Sequelize[_0xe58d('0x5')]},'cc':{'type':Sequelize['TEXT']('long')},'subject':{'type':Sequelize[_0xe58d('0x6')]()},'attach':{'type':Sequelize[_0xe58d('0x3')],'defaultValue':![]},'read1stAt':{'type':Sequelize[_0xe58d('0x4')]},'substatus':{'type':Sequelize[_0xe58d('0x5')](0x3c)},'substatusAt':{'type':Sequelize[_0xe58d('0x4')]},'firstMsgDirection':{'type':Sequelize['ENUM']('in',_0xe58d('0x7')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize['DATE']},'lastMsgDirection':{'type':Sequelize[_0xe58d('0x8')]('in',_0xe58d('0x7')),'defaultValue':'in','allowNull':![]},'lastMsgBody':{'type':Sequelize[_0xe58d('0x6')](_0xe58d('0x9')),'get':function(){try{return this[_0xe58d('0xa')](_0xe58d('0xb'))?htmlToText[_0xe58d('0xc')](this[_0xe58d('0xa')](_0xe58d('0xb')),{'preserveNewlines':!![],'singleNewLineParagraphs':!![],'ignoreImage':!![]})[_0xe58d('0xd')]('\x0a')[_0xe58d('0xe')](0x0,0x6)[_0xe58d('0xf')]('\x0a'):null;}catch(_0x3dcfe7){return null;}}}};
\ No newline at end of file
index fff81d8..1dfe8c8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4b81=['unix','toString','join','server','files','attachments','root','tmp','interaction-%s.zip','getMessages','from','bcc','subject','Attachment','mkdirSync','each','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','Bcc','Attachments','readFileSync','writeFileSync','message%d.eml','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','register','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','stack','name','send','rawAttributes','query','keys','intersection','model','fields','attributes','length','hasOwnProperty','order','sort','where','filters','filter','merge','map','type','key','VIRTUAL','field','options','include','push','Tag','Tags','tag','distinct','read','MailMessage','createdAt','MailInteraction','User','Users','CmContact','Owner','fullname','internal','MailAccount','Account','Messages','direction','color','findAll','show','find','catch','body','params','addMessage','ids','nolimit','pick','MailInteractionId','split','format','YYYY-MM-DD\x20HH:mm:ss','includeAll','rows','addTags','setTags','omit','spread','mailInteractionTags:save','removeTags','download'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x4b81,0x9e));var _0x14b8=function(_0x56f740,_0x5f06f8){_0x56f740=_0x56f740-0x0;var _0x22af0f=_0x4b81[_0x56f740];return _0x22af0f;};'use strict';var pdf=require(_0x14b8('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x14b8('0x1'));var zipdir=require(_0x14b8('0x2'));var jsonpatch=require(_0x14b8('0x3'));var rp=require(_0x14b8('0x4'));var moment=require('moment');var BPromise=require(_0x14b8('0x5'));var Mustache=require(_0x14b8('0x6'));var util=require(_0x14b8('0x7'));var path=require(_0x14b8('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x14b8('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x14b8('0xa'));var crypto=require(_0x14b8('0xb'));var jsforce=require(_0x14b8('0xc'));var deskjs=require(_0x14b8('0xd'));var toCsv=require(_0x14b8('0xe'));var querystring=require(_0x14b8('0xf'));var Papa=require(_0x14b8('0x10'));var authService=require(_0x14b8('0x11'));var hardwareService=require(_0x14b8('0x12'));var Redis=require('ioredis');var qs=require(_0x14b8('0x13'));var logger=require(_0x14b8('0x14'))(_0x14b8('0x15'));var utils=require(_0x14b8('0x16'));var config=require(_0x14b8('0x17'));var db=require('../../mysqldb')['db'];config[_0x14b8('0x18')]=_[_0x14b8('0x19')](config[_0x14b8('0x18')],{'host':_0x14b8('0x1a'),'port':0x18eb});var socket=require(_0x14b8('0x1b'))(new Redis(config[_0x14b8('0x18')]));require('./mailInteraction.socket')[_0x14b8('0x1c')](socket);function respondWithStatusCode(_0x17de92,_0x5c34b0){_0x5c34b0=_0x5c34b0||0xcc;return function(_0x5cc27f){if(_0x5cc27f){return _0x17de92[_0x14b8('0x1d')](_0x5c34b0);}return _0x17de92[_0x14b8('0x1e')](_0x5c34b0)[_0x14b8('0x1f')]();};}function respondWithResult(_0x85b431,_0x5a6a11){_0x5a6a11=_0x5a6a11||0xc8;return function(_0x1eb9f6){if(_0x1eb9f6){return _0x85b431[_0x14b8('0x1e')](_0x5a6a11)[_0x14b8('0x20')](_0x1eb9f6);}};}function respondWithFilteredResult(_0x5638c4,_0x12d54a){return function(_0x3fece4){if(_0x3fece4){var _0x3039f3=_0x3fece4[_0x14b8('0x21')],_0x59dc31=_0x12d54a[_0x14b8('0x22')],_0x4a74e4=_0x12d54a[_0x14b8('0x22')]+_0x12d54a[_0x14b8('0x23')],_0x544990;if(_0x4a74e4>=_0x3039f3){_0x4a74e4=_0x3039f3;_0x544990=0xc8;}else{_0x544990=0xce;}_0x5638c4[_0x14b8('0x1e')](_0x544990);return _0x5638c4[_0x14b8('0x24')](_0x14b8('0x25'),_0x59dc31+'-'+_0x4a74e4+'/'+_0x3039f3)[_0x14b8('0x20')](_0x3fece4);}return null;};}function patchUpdates(_0x1aef32){return function(_0xb72313){try{jsonpatch[_0x14b8('0x26')](_0xb72313,_0x1aef32,!![]);}catch(_0x993731){return BPromise[_0x14b8('0x27')](_0x993731);}return _0xb72313['save']();};}function saveUpdates(_0xc17b48,_0x3abbc4){return function(_0x223c67){if(_0x223c67){return _0x223c67[_0x14b8('0x28')](_0xc17b48)[_0x14b8('0x29')](function(_0x11418a){return _0x11418a;});}return null;};}function removeEntity(_0x535b0b,_0x538864){return function(_0xbafa65){if(_0xbafa65){return _0xbafa65[_0x14b8('0x2a')]()[_0x14b8('0x29')](function(){_0x535b0b[_0x14b8('0x1e')](0xcc)['end']();});}};}function handleEntityNotFound(_0x214950,_0x3ed1ac){return function(_0x2892bc){if(!_0x2892bc){_0x214950[_0x14b8('0x1d')](0x194);}return _0x2892bc;};}function handleError(_0x354f4a,_0x451867){_0x451867=_0x451867||0x1f4;return function(_0x200191){logger[_0x14b8('0x2b')](_0x200191[_0x14b8('0x2c')]);if(_0x200191['name']){delete _0x200191[_0x14b8('0x2d')];}_0x354f4a['status'](_0x451867)[_0x14b8('0x2e')](_0x200191);};}exports['index']=function(_0x4e354b,_0x124bc9){var _0x404718={},_0x45b272={},_0x4f6e90={'count':0x0,'rows':[]};var _0x284fbf=db['MailInteraction'][_0x14b8('0x2f')];_0x45b272['model']=_['keys'](_0x284fbf);_0x45b272[_0x14b8('0x30')]=_[_0x14b8('0x31')](_0x4e354b[_0x14b8('0x30')]);_0x45b272['filters']=_[_0x14b8('0x32')](_0x45b272[_0x14b8('0x33')],_0x45b272[_0x14b8('0x30')]);_0x404718['attributes']=_[_0x14b8('0x32')](_0x45b272['model'],qs[_0x14b8('0x34')](_0x4e354b[_0x14b8('0x30')][_0x14b8('0x34')]));_0x404718[_0x14b8('0x35')]=_0x404718[_0x14b8('0x35')][_0x14b8('0x36')]?_0x404718[_0x14b8('0x35')]:_0x45b272['model'];if(!_0x4e354b['query'][_0x14b8('0x37')]('nolimit')){_0x404718[_0x14b8('0x23')]=qs[_0x14b8('0x23')](_0x4e354b[_0x14b8('0x30')][_0x14b8('0x23')]);_0x404718['offset']=qs[_0x14b8('0x22')](_0x4e354b[_0x14b8('0x30')][_0x14b8('0x22')]);}_0x404718[_0x14b8('0x38')]=qs[_0x14b8('0x39')](_0x4e354b['query'][_0x14b8('0x39')]);_0x404718[_0x14b8('0x3a')]=qs[_0x14b8('0x3b')](_['pick'](_0x4e354b['query'],_0x45b272[_0x14b8('0x3b')]));if(_0x4e354b[_0x14b8('0x30')][_0x14b8('0x3c')]){_0x404718[_0x14b8('0x3a')]=_[_0x14b8('0x3d')](_0x404718[_0x14b8('0x3a')],{'$or':_[_0x14b8('0x3e')](_0x284fbf,function(_0x4b08be){if(_0x4b08be[_0x14b8('0x3f')][_0x14b8('0x40')]!==_0x14b8('0x41')){var _0x1d637e={};_0x1d637e[_0x4b08be[_0x14b8('0x42')]]={'$like':'%'+_0x4e354b[_0x14b8('0x30')]['filter']+'%'};return _0x1d637e;}})});}_0x404718=_[_0x14b8('0x3d')]({},_0x404718,_0x4e354b[_0x14b8('0x43')]);var _0x1484ae={'where':_0x404718[_0x14b8('0x3a')]};_0x1484ae[_0x14b8('0x44')]=[];if(_0x4e354b[_0x14b8('0x30')]['tag']){_0x1484ae[_0x14b8('0x44')][_0x14b8('0x45')]({'model':db[_0x14b8('0x46')],'as':_0x14b8('0x47'),'attributes':['id'],'where':{'id':_0x4e354b[_0x14b8('0x30')][_0x14b8('0x48')]},'required':!![]});_0x1484ae[_0x14b8('0x49')]=!![];}if(_0x4e354b[_0x14b8('0x30')][_0x14b8('0x4a')]){_0x1484ae[_0x14b8('0x44')]['push']({'model':db[_0x14b8('0x4b')],'as':'Messages','attributes':['id','direction',_0x14b8('0x4c'),_0x14b8('0x4a')],'where':{'direction':'in','read':_0x4e354b[_0x14b8('0x30')][_0x14b8('0x4a')]||![]},'required':!![]});_0x1484ae[_0x14b8('0x49')]=!![];}return db[_0x14b8('0x4d')]['count'](_0x1484ae)[_0x14b8('0x29')](function(_0x140792){_0x4f6e90[_0x14b8('0x21')]=_0x140792;if(_0x4e354b[_0x14b8('0x30')]['includeAll']){_0x404718[_0x14b8('0x44')]=[{'model':db[_0x14b8('0x4e')],'as':_0x14b8('0x4f'),'required':![],'attributes':['id','name','fullname']},{'model':db[_0x14b8('0x50')],'as':'Contact','required':![]},{'model':db[_0x14b8('0x4e')],'as':_0x14b8('0x51'),'attributes':['name',_0x14b8('0x52'),_0x14b8('0x53')],'required':![]},{'model':db[_0x14b8('0x54')],'as':_0x14b8('0x55'),'attributes':[_0x14b8('0x2d'),'key','email'],'required':![]},{'model':db[_0x14b8('0x4b')],'as':_0x14b8('0x56'),'attributes':['id',_0x14b8('0x57'),_0x14b8('0x4c'),_0x14b8('0x4a')],'where':{'direction':'in','read':_0x4e354b[_0x14b8('0x30')][_0x14b8('0x4a')]||![]},'required':_0x4e354b[_0x14b8('0x30')][_0x14b8('0x4a')]||![]},{'model':db[_0x14b8('0x46')],'as':_0x14b8('0x47'),'attributes':['id',_0x14b8('0x2d'),_0x14b8('0x58')],'required':_0x4e354b[_0x14b8('0x30')][_0x14b8('0x48')]?!![]:![]},{'model':db['Tag'],'as':'ThroughTags','attributes':['id','name',_0x14b8('0x58')],'through':_0x4e354b[_0x14b8('0x30')][_0x14b8('0x48')]?{'attributes':[],'where':{'TagId':_0x4e354b['query'][_0x14b8('0x48')]||undefined}}:{},'required':_0x4e354b[_0x14b8('0x30')][_0x14b8('0x48')]?!![]:![]}];}return db['MailInteraction'][_0x14b8('0x59')](_0x404718);})['then'](function(_0x54be69){_0x4f6e90['rows']=_0x54be69;return _0x4f6e90;})[_0x14b8('0x29')](respondWithFilteredResult(_0x124bc9,_0x404718))['catch'](handleError(_0x124bc9,null));};exports[_0x14b8('0x5a')]=function(_0x9b6493,_0x39e6fc){var _0x3990da={'raw':![],'where':{'id':_0x9b6493['params']['id']}},_0x2da233={};_0x2da233[_0x14b8('0x33')]=_[_0x14b8('0x31')](db['MailInteraction']['rawAttributes']);_0x2da233[_0x14b8('0x30')]=_[_0x14b8('0x31')](_0x9b6493[_0x14b8('0x30')]);_0x2da233['filters']=_['intersection'](_0x2da233['model'],_0x2da233[_0x14b8('0x30')]);_0x3990da[_0x14b8('0x35')]=_[_0x14b8('0x32')](_0x2da233[_0x14b8('0x33')],qs[_0x14b8('0x34')](_0x9b6493['query']['fields']));_0x3990da[_0x14b8('0x35')]=_0x3990da[_0x14b8('0x35')][_0x14b8('0x36')]?_0x3990da[_0x14b8('0x35')]:_0x2da233[_0x14b8('0x33')];if(_0x9b6493['query']['includeAll']){_0x3990da['include']=[{'all':!![]}];}_0x3990da=_['merge']({},_0x3990da,_0x9b6493['options']);return db[_0x14b8('0x4d')][_0x14b8('0x5b')](_0x3990da)['then'](handleEntityNotFound(_0x39e6fc,null))[_0x14b8('0x29')](respondWithResult(_0x39e6fc,null))[_0x14b8('0x5c')](handleError(_0x39e6fc,null));};exports['create']=function(_0x289259,_0x1873a6){return db[_0x14b8('0x4d')]['create'](_0x289259[_0x14b8('0x5d')],{})[_0x14b8('0x29')](respondWithResult(_0x1873a6,0xc9))[_0x14b8('0x5c')](handleError(_0x1873a6,null));};exports[_0x14b8('0x28')]=function(_0x4bc4b4,_0xd5cdfb){if(_0x4bc4b4[_0x14b8('0x5d')]['id']){delete _0x4bc4b4[_0x14b8('0x5d')]['id'];}return db['MailInteraction'][_0x14b8('0x5b')]({'where':{'id':_0x4bc4b4['params']['id']}})['then'](handleEntityNotFound(_0xd5cdfb,null))[_0x14b8('0x29')](saveUpdates(_0x4bc4b4[_0x14b8('0x5d')],null))[_0x14b8('0x29')](respondWithResult(_0xd5cdfb,null))[_0x14b8('0x5c')](handleError(_0xd5cdfb,null));};exports['destroy']=function(_0x2db6bf,_0x3f39b2){return db[_0x14b8('0x4d')][_0x14b8('0x5b')]({'where':{'id':_0x2db6bf['params']['id']}})['then'](handleEntityNotFound(_0x3f39b2,null))[_0x14b8('0x29')](removeEntity(_0x3f39b2,null))[_0x14b8('0x5c')](handleError(_0x3f39b2,null));};exports['describe']=function(_0x5bdf05,_0x3601ef){return db[_0x14b8('0x4d')]['describe']()['then'](respondWithResult(_0x3601ef,null))[_0x14b8('0x5c')](handleError(_0x3601ef,null));};exports['addMessage']=function(_0x1c3e40,_0x352243,_0x160551){return db[_0x14b8('0x4b')]['find']({'where':{'id':_0x1c3e40[_0x14b8('0x5e')]['id']}})[_0x14b8('0x29')](handleEntityNotFound(_0x352243,null))[_0x14b8('0x29')](function(_0x5b78fd){if(_0x5b78fd){return _0x5b78fd[_0x14b8('0x5f')](_0x1c3e40[_0x14b8('0x5d')]['ids'],_['omit'](_0x1c3e40[_0x14b8('0x5d')],[_0x14b8('0x60'),'id'])||{});}})[_0x14b8('0x29')](respondWithResult(_0x352243,null))[_0x14b8('0x5c')](handleError(_0x352243,null));};exports['getMessages']=function(_0x5b0c67,_0x37bb46,_0x42f377){var _0xb7e937={'raw':![],'where':{}};var _0x1e103a={};var _0x49a98e={'count':0x0,'rows':[]};return db[_0x14b8('0x4d')]['findOne']({'where':{'id':_0x5b0c67['params']['id']}})['then'](handleEntityNotFound(_0x37bb46,null))['then'](function(_0x1f4093){if(_0x1f4093){_0x1e103a['model']=_['keys'](db[_0x14b8('0x4b')]['rawAttributes']);_0x1e103a['query']=_['keys'](_0x5b0c67['query']);_0x1e103a[_0x14b8('0x3b')]=_[_0x14b8('0x32')](_0x1e103a[_0x14b8('0x33')],_0x1e103a[_0x14b8('0x30')]);_0xb7e937['attributes']=_[_0x14b8('0x32')](_0x1e103a[_0x14b8('0x33')],qs[_0x14b8('0x34')](_0x5b0c67[_0x14b8('0x30')]['fields']));_0xb7e937[_0x14b8('0x35')]=_0xb7e937[_0x14b8('0x35')][_0x14b8('0x36')]?_0xb7e937['attributes']:_0x1e103a['model'];if(!_0x5b0c67['query']['hasOwnProperty'](_0x14b8('0x61'))){_0xb7e937['limit']=qs[_0x14b8('0x23')](_0x5b0c67[_0x14b8('0x30')][_0x14b8('0x23')]);_0xb7e937[_0x14b8('0x22')]=qs[_0x14b8('0x22')](_0x5b0c67['query']['offset']);}_0xb7e937[_0x14b8('0x38')]=qs[_0x14b8('0x39')](_0x5b0c67[_0x14b8('0x30')]['sort']);_0xb7e937[_0x14b8('0x3a')]=qs[_0x14b8('0x3b')](_[_0x14b8('0x62')](_0x5b0c67[_0x14b8('0x30')],_0x1e103a['filters']));_0xb7e937['where'][_0x14b8('0x63')]=_0x1f4093['id'];if(_0x5b0c67[_0x14b8('0x30')][_0x14b8('0x3c')]){_0xb7e937[_0x14b8('0x3a')]=_[_0x14b8('0x3d')](_0xb7e937[_0x14b8('0x3a')],{'$or':_['map'](_0xb7e937['attributes'],function(_0x4fbc87){var _0x287a1f={};_0x287a1f[_0x4fbc87]={'$like':'%'+_0x5b0c67['query'][_0x14b8('0x3c')]+'%'};return _0x287a1f;})});}if(_0x5b0c67[_0x14b8('0x30')]['$gte']){var _0x32bc9a=_0x5b0c67[_0x14b8('0x30')]['$gte'][_0x14b8('0x64')](',');var _0x5ee569={};_0x5ee569[_0x32bc9a[0x0]]={'$gte':moment(_0x32bc9a[0x1])[_0x14b8('0x65')](_0x14b8('0x66'))};_0xb7e937['where']=_[_0x14b8('0x3d')](_0xb7e937[_0x14b8('0x3a')],_0x5ee569);}_0xb7e937=_[_0x14b8('0x3d')]({},_0xb7e937,_0x5b0c67[_0x14b8('0x43')]);return db[_0x14b8('0x4b')][_0x14b8('0x21')]({'where':_0xb7e937[_0x14b8('0x3a')]})[_0x14b8('0x29')](function(_0x1be380){_0x49a98e[_0x14b8('0x21')]=_0x1be380;if(_0x5b0c67[_0x14b8('0x30')][_0x14b8('0x67')]){_0xb7e937[_0x14b8('0x44')]=[{'all':!![]}];}return db[_0x14b8('0x4b')]['findAll'](_0xb7e937);})['then'](function(_0x199f08){_0x49a98e[_0x14b8('0x68')]=_0x199f08;return _0x49a98e;});}})[_0x14b8('0x29')](respondWithFilteredResult(_0x37bb46,_0xb7e937))[_0x14b8('0x5c')](handleError(_0x37bb46,null));};exports[_0x14b8('0x69')]=function(_0x5cc0be,_0x93145b,_0x52c8d0){return db[_0x14b8('0x4d')][_0x14b8('0x5b')]({'where':{'id':_0x5cc0be['params']['id']}})[_0x14b8('0x29')](handleEntityNotFound(_0x93145b,null))['then'](function(_0x5b5717){if(_0x5b5717){return _0x5b5717[_0x14b8('0x6a')](_0x5cc0be[_0x14b8('0x5d')]['ids'],_[_0x14b8('0x6b')](_0x5cc0be[_0x14b8('0x5d')],[_0x14b8('0x60'),'id'])||{})[_0x14b8('0x6c')](function(){return db[_0x14b8('0x46')][_0x14b8('0x59')]({'attributes':['id',_0x14b8('0x2d'),_0x14b8('0x58')],'where':{'id':_0x5cc0be[_0x14b8('0x5d')][_0x14b8('0x60')]}});})['then'](function(_0x139b89){socket['emit'](_0x14b8('0x6d'),{'id':Number(_0x5cc0be[_0x14b8('0x5e')]['id']),'tags':_0x139b89||[]});return{'id':Number(_0x5cc0be[_0x14b8('0x5e')]['id']),'tags':_0x139b89||[]};});}})[_0x14b8('0x29')](respondWithResult(_0x93145b,null))[_0x14b8('0x5c')](handleError(_0x93145b,null));};exports[_0x14b8('0x6e')]=function(_0x5dbad8,_0x47f58d,_0x422118){var _0x3febbd;return db[_0x14b8('0x4d')][_0x14b8('0x5b')]({'where':{'id':_0x5dbad8[_0x14b8('0x5e')]['id']}})['then'](handleEntityNotFound(_0x47f58d,null))[_0x14b8('0x29')](function(_0xec2692){if(_0xec2692){return _0xec2692[_0x14b8('0x6e')](_0x5dbad8[_0x14b8('0x30')][_0x14b8('0x60')]);}})[_0x14b8('0x29')](respondWithStatusCode(_0x47f58d,null))['catch'](handleError(_0x47f58d,null));};exports[_0x14b8('0x6f')]=function(_0x56c616,_0x31f564){var _0x51e3f9=moment()[_0x14b8('0x70')]()[_0x14b8('0x71')]();var _0xa7e0e3=path[_0x14b8('0x72')](config['root'],_0x14b8('0x73'),_0x14b8('0x74'),_0x14b8('0x75'));var _0x397699=path['join'](config[_0x14b8('0x76')],_0x14b8('0x73'),_0x14b8('0x74'),_0x14b8('0x77'));var _0x973d92=path['join'](_0x397699,_0x51e3f9);var _0x5bc55d=util[_0x14b8('0x65')](_0x14b8('0x78'),_0x51e3f9);var _0x184523=path['join'](_0x397699,_0x5bc55d);var _0x42365b=![];return db[_0x14b8('0x4d')][_0x14b8('0x5b')]({'where':{'id':_0x56c616[_0x14b8('0x5e')]['id']}})['then'](handleEntityNotFound(_0x31f564,null))[_0x14b8('0x29')](function(_0x28cb00){if(_0x28cb00){return _0x28cb00[_0x14b8('0x79')]({'attributes':['id',_0x14b8('0x5d'),_0x14b8('0x7a'),'to','cc',_0x14b8('0x7b'),_0x14b8('0x7c'),_0x14b8('0x4c')],'where':{'secret':![]},'include':_0x56c616[_0x14b8('0x30')][_0x14b8('0x75')]?[{'model':db[_0x14b8('0x7d')],'as':'Attachments'}]:undefined,'order':qs[_0x14b8('0x39')]('id')});}return[];})[_0x14b8('0x29')](function(_0x42c9fe){_0x42365b=_0x42c9fe[_0x14b8('0x36')];if(_0x42c9fe[_0x14b8('0x36')]){fs[_0x14b8('0x7e')](_0x973d92);return BPromise[_0x14b8('0x7f')](_0x42c9fe,function(_0x1981cf,_0x170440){var _0xa3b1cc=_0x1981cf;var _0xc1bacf={'from':_0xa3b1cc['from'],'to':_0xa3b1cc['to'],'subject':_0xa3b1cc[_0x14b8('0x7c')],'html':_0xa3b1cc[_0x14b8('0x5d')],'headers':{'Date':moment(_0xa3b1cc[_0x14b8('0x4c')])[_0x14b8('0x65')](_0x14b8('0x80'))},'attachments':[]};if(_0x1981cf['cc']){_0xc1bacf[_0x14b8('0x81')]['Cc']=_0x1981cf['cc'];}if(_0x1981cf[_0x14b8('0x7b')]){_0xc1bacf[_0x14b8('0x81')][_0x14b8('0x82')]=_0x1981cf[_0x14b8('0x7b')];}return new BPromise(function(_0x383916,_0x147c51){if(_0x1981cf[_0x14b8('0x83')]){for(var _0x2599e4=0x0;_0x2599e4<_0x1981cf[_0x14b8('0x83')][_0x14b8('0x36')];_0x2599e4++){var _0x2b4b87=_0x1981cf['Attachments'][_0x2599e4];var _0x2cea40=path[_0x14b8('0x72')](_0xa7e0e3,_0x2b4b87['basename']);if(fs['existsSync'](_0x2cea40)){_0xc1bacf[_0x14b8('0x75')]['push']({'name':_0x2b4b87[_0x14b8('0x2d')],'contentType':_0x2b4b87[_0x14b8('0x3f')],'data':fs[_0x14b8('0x84')](_0x2cea40)});}}}emlformat['build'](_0xc1bacf,function(_0x348a6d,_0x12e761){if(_0x348a6d)return _0x147c51(_0x348a6d);fs[_0x14b8('0x85')](path[_0x14b8('0x72')](_0x973d92,util[_0x14b8('0x65')](_0x14b8('0x86'),_0x170440)),_0x12e761);return _0x383916(_0x12e761);});});});}})[_0x14b8('0x29')](function(){if(_0x42365b){return new BPromise(function(_0x10a265,_0xbad6f4){zipdir(_0x973d92,{'saveTo':_0x184523},function(_0x589e62,_0x3a0998){if(_0x589e62)return _0xbad6f4(_0x589e62);return _0x10a265(_0x3a0998);});});}})[_0x14b8('0x29')](function(){if(_0x42365b){return new BPromise(function(_0x50a746,_0x2a4889){rimraf(_0x973d92,function(_0x44df27){if(_0x44df27)_0x2a4889(_0x44df27);return _0x50a746();});});}})[_0x14b8('0x29')](function(){if(_0x42365b){return _0x31f564[_0x14b8('0x6f')](_0x184523,_0x5bc55d,function(_0x359697){if(_0x359697){console['log']('err',_0x359697);}else{fs['unlinkSync'](_0x184523);}});}else{return _0x31f564[_0x14b8('0x1d')](0xc8);}})[_0x14b8('0x5c')](handleError(_0x31f564,null));};
\ No newline at end of file
+var _0xa5ae=['Bcc','Attachments','basename','writeFileSync','message%d.eml','err','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','defaults','redis','socket.io-emitter','./mailInteraction.socket','register','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','send','index','MailInteraction','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','limit','order','sort','where','pick','filter','map','type','key','VIRTUAL','options','tag','include','push','Tag','Tags','distinct','MailMessage','Messages','read','includeAll','User','Users','CmContact','Contact','Owner','fullname','internal','MailAccount','Account','createdAt','color','ThroughTags','findAll','rows','catch','params','rawAttributes','merge','find','body','describe','addMessage','omit','ids','findOne','nolimit','$gte','split','addTags','setTags','spread','emit','mailInteractionTags:save','removeTags','download','unix','toString','files','attachments','join','root','server','format','interaction-%s.zip','getMessages','from','bcc','Attachment','mkdirSync','subject','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers'];(function(_0x35a274,_0x98b399){var _0x40d905=function(_0x5c8455){while(--_0x5c8455){_0x35a274['push'](_0x35a274['shift']());}};_0x40d905(++_0x98b399);}(_0xa5ae,0x11a));var _0xea5a=function(_0x89ee68,_0x18ca4d){_0x89ee68=_0x89ee68-0x0;var _0x1dfd3b=_0xa5ae[_0x89ee68];return _0x1dfd3b;};'use strict';var pdf=require(_0xea5a('0x0'));var emlformat=require(_0xea5a('0x1'));var rimraf=require(_0xea5a('0x2'));var zipdir=require(_0xea5a('0x3'));var jsonpatch=require(_0xea5a('0x4'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xea5a('0x5'));var util=require(_0xea5a('0x6'));var path=require(_0xea5a('0x7'));var sox=require(_0xea5a('0x8'));var csv=require(_0xea5a('0x9'));var ejs=require(_0xea5a('0xa'));var fs=require('fs');var _=require(_0xea5a('0xb'));var squel=require(_0xea5a('0xc'));var crypto=require(_0xea5a('0xd'));var jsforce=require(_0xea5a('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xea5a('0x9'));var querystring=require(_0xea5a('0xf'));var Papa=require(_0xea5a('0x10'));var authService=require(_0xea5a('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xea5a('0x12'));var qs=require(_0xea5a('0x13'));var logger=require(_0xea5a('0x14'))(_0xea5a('0x15'));var utils=require(_0xea5a('0x16'));var config=require(_0xea5a('0x17'));var db=require(_0xea5a('0x18'))['db'];config['redis']=_[_0xea5a('0x19')](config[_0xea5a('0x1a')],{'host':'localhost','port':0x18eb});var socket=require(_0xea5a('0x1b'))(new Redis(config[_0xea5a('0x1a')]));require(_0xea5a('0x1c'))[_0xea5a('0x1d')](socket);function respondWithStatusCode(_0x134b83,_0x12f538){_0x12f538=_0x12f538||0xcc;return function(_0x1364ac){if(_0x1364ac){return _0x134b83['sendStatus'](_0x12f538);}return _0x134b83[_0xea5a('0x1e')](_0x12f538)[_0xea5a('0x1f')]();};}function respondWithResult(_0x57d965,_0x538d2e){_0x538d2e=_0x538d2e||0xc8;return function(_0x263558){if(_0x263558){return _0x57d965[_0xea5a('0x1e')](_0x538d2e)[_0xea5a('0x20')](_0x263558);}};}function respondWithFilteredResult(_0x591004,_0x16a6ee){return function(_0x5b31ab){if(_0x5b31ab){var _0x1935b3=_0x5b31ab[_0xea5a('0x21')],_0x4100a7=_0x16a6ee['offset'],_0x4d00ae=_0x16a6ee[_0xea5a('0x22')]+_0x16a6ee['limit'],_0x4a58cd;if(_0x4d00ae>=_0x1935b3){_0x4d00ae=_0x1935b3;_0x4a58cd=0xc8;}else{_0x4a58cd=0xce;}_0x591004[_0xea5a('0x1e')](_0x4a58cd);return _0x591004[_0xea5a('0x23')](_0xea5a('0x24'),_0x4100a7+'-'+_0x4d00ae+'/'+_0x1935b3)[_0xea5a('0x20')](_0x5b31ab);}return null;};}function patchUpdates(_0x310867){return function(_0x1b3187){try{jsonpatch[_0xea5a('0x25')](_0x1b3187,_0x310867,!![]);}catch(_0x489de5){return BPromise[_0xea5a('0x26')](_0x489de5);}return _0x1b3187[_0xea5a('0x27')]();};}function saveUpdates(_0x1e3c69,_0x171715){return function(_0x34c1e1){if(_0x34c1e1){return _0x34c1e1[_0xea5a('0x28')](_0x1e3c69)[_0xea5a('0x29')](function(_0x5b0ff2){return _0x5b0ff2;});}return null;};}function removeEntity(_0xbf9bdd,_0x300918){return function(_0x55d8cf){if(_0x55d8cf){return _0x55d8cf[_0xea5a('0x2a')]()[_0xea5a('0x29')](function(){_0xbf9bdd['status'](0xcc)[_0xea5a('0x1f')]();});}};}function handleEntityNotFound(_0x3e1035,_0xb9fd62){return function(_0x44e114){if(!_0x44e114){_0x3e1035[_0xea5a('0x2b')](0x194);}return _0x44e114;};}function handleError(_0x949eab,_0x36c9ae){_0x36c9ae=_0x36c9ae||0x1f4;return function(_0x25bc2c){logger[_0xea5a('0x2c')](_0x25bc2c[_0xea5a('0x2d')]);if(_0x25bc2c['name']){delete _0x25bc2c[_0xea5a('0x2e')];}_0x949eab['status'](_0x36c9ae)[_0xea5a('0x2f')](_0x25bc2c);};}exports[_0xea5a('0x30')]=function(_0x94ed38,_0x112992){var _0x2e4b32={},_0x5d4b88={},_0x622fb1={'count':0x0,'rows':[]};var _0x57c839=db[_0xea5a('0x31')]['rawAttributes'];_0x5d4b88[_0xea5a('0x32')]=_[_0xea5a('0x33')](_0x57c839);_0x5d4b88['query']=_['keys'](_0x94ed38[_0xea5a('0x34')]);_0x5d4b88[_0xea5a('0x35')]=_[_0xea5a('0x36')](_0x5d4b88[_0xea5a('0x32')],_0x5d4b88[_0xea5a('0x34')]);_0x2e4b32[_0xea5a('0x37')]=_[_0xea5a('0x36')](_0x5d4b88[_0xea5a('0x32')],qs['fields'](_0x94ed38['query'][_0xea5a('0x38')]));_0x2e4b32[_0xea5a('0x37')]=_0x2e4b32['attributes'][_0xea5a('0x39')]?_0x2e4b32[_0xea5a('0x37')]:_0x5d4b88[_0xea5a('0x32')];if(!_0x94ed38[_0xea5a('0x34')][_0xea5a('0x3a')]('nolimit')){_0x2e4b32[_0xea5a('0x3b')]=qs[_0xea5a('0x3b')](_0x94ed38[_0xea5a('0x34')][_0xea5a('0x3b')]);_0x2e4b32[_0xea5a('0x22')]=qs[_0xea5a('0x22')](_0x94ed38['query']['offset']);}_0x2e4b32[_0xea5a('0x3c')]=qs[_0xea5a('0x3d')](_0x94ed38[_0xea5a('0x34')]['sort']);_0x2e4b32[_0xea5a('0x3e')]=qs[_0xea5a('0x35')](_[_0xea5a('0x3f')](_0x94ed38['query'],_0x5d4b88[_0xea5a('0x35')]));if(_0x94ed38[_0xea5a('0x34')][_0xea5a('0x40')]){_0x2e4b32['where']=_['merge'](_0x2e4b32['where'],{'$or':_[_0xea5a('0x41')](_0x57c839,function(_0x16aec1){if(_0x16aec1[_0xea5a('0x42')][_0xea5a('0x43')]!==_0xea5a('0x44')){var _0x11b732={};_0x11b732[_0x16aec1['field']]={'$like':'%'+_0x94ed38['query'][_0xea5a('0x40')]+'%'};return _0x11b732;}})});}_0x2e4b32=_['merge']({},_0x2e4b32,_0x94ed38[_0xea5a('0x45')]);var _0x32fc90={'where':_0x2e4b32[_0xea5a('0x3e')]};_0x32fc90['include']=[];if(_0x94ed38[_0xea5a('0x34')][_0xea5a('0x46')]){_0x32fc90[_0xea5a('0x47')][_0xea5a('0x48')]({'model':db[_0xea5a('0x49')],'as':_0xea5a('0x4a'),'attributes':['id'],'where':{'id':_0x94ed38['query'][_0xea5a('0x46')]},'required':!![]});_0x32fc90[_0xea5a('0x4b')]=!![];}if(_0x94ed38[_0xea5a('0x34')]['read']){_0x32fc90['include'][_0xea5a('0x48')]({'model':db[_0xea5a('0x4c')],'as':_0xea5a('0x4d'),'attributes':['id','direction','createdAt',_0xea5a('0x4e')],'where':{'direction':'in','read':_0x94ed38[_0xea5a('0x34')][_0xea5a('0x4e')]||![]},'required':!![]});_0x32fc90[_0xea5a('0x4b')]=!![];}return db[_0xea5a('0x31')][_0xea5a('0x21')](_0x32fc90)[_0xea5a('0x29')](function(_0x23fb99){_0x622fb1['count']=_0x23fb99;if(_0x94ed38[_0xea5a('0x34')][_0xea5a('0x4f')]){_0x2e4b32[_0xea5a('0x47')]=[{'model':db[_0xea5a('0x50')],'as':_0xea5a('0x51'),'required':![],'attributes':['id',_0xea5a('0x2e'),'fullname']},{'model':db[_0xea5a('0x52')],'as':_0xea5a('0x53'),'required':![]},{'model':db['User'],'as':_0xea5a('0x54'),'attributes':[_0xea5a('0x2e'),_0xea5a('0x55'),_0xea5a('0x56')],'required':![]},{'model':db[_0xea5a('0x57')],'as':_0xea5a('0x58'),'attributes':[_0xea5a('0x2e'),_0xea5a('0x43'),'email'],'required':![]},{'model':db[_0xea5a('0x4c')],'as':_0xea5a('0x4d'),'attributes':['id','direction',_0xea5a('0x59'),'read'],'where':{'direction':'in','read':_0x94ed38[_0xea5a('0x34')][_0xea5a('0x4e')]||![]},'required':_0x94ed38[_0xea5a('0x34')]['read']||![]},{'model':db[_0xea5a('0x49')],'as':'Tags','attributes':['id',_0xea5a('0x2e'),_0xea5a('0x5a')],'required':_0x94ed38['query'][_0xea5a('0x46')]?!![]:![]},{'model':db['Tag'],'as':_0xea5a('0x5b'),'attributes':['id','name','color'],'through':_0x94ed38[_0xea5a('0x34')][_0xea5a('0x46')]?{'attributes':[],'where':{'TagId':_0x94ed38[_0xea5a('0x34')][_0xea5a('0x46')]||undefined}}:{},'required':_0x94ed38['query'][_0xea5a('0x46')]?!![]:![]}];}return db[_0xea5a('0x31')][_0xea5a('0x5c')](_0x2e4b32);})[_0xea5a('0x29')](function(_0x4ef9c3){_0x622fb1[_0xea5a('0x5d')]=_0x4ef9c3;return _0x622fb1;})[_0xea5a('0x29')](respondWithFilteredResult(_0x112992,_0x2e4b32))[_0xea5a('0x5e')](handleError(_0x112992,null));};exports['show']=function(_0x2c322a,_0x59a584){var _0x5eb466={'raw':![],'where':{'id':_0x2c322a[_0xea5a('0x5f')]['id']}},_0x51ce50={};_0x51ce50[_0xea5a('0x32')]=_[_0xea5a('0x33')](db[_0xea5a('0x31')][_0xea5a('0x60')]);_0x51ce50['query']=_[_0xea5a('0x33')](_0x2c322a[_0xea5a('0x34')]);_0x51ce50[_0xea5a('0x35')]=_[_0xea5a('0x36')](_0x51ce50[_0xea5a('0x32')],_0x51ce50[_0xea5a('0x34')]);_0x5eb466[_0xea5a('0x37')]=_[_0xea5a('0x36')](_0x51ce50['model'],qs[_0xea5a('0x38')](_0x2c322a[_0xea5a('0x34')][_0xea5a('0x38')]));_0x5eb466['attributes']=_0x5eb466[_0xea5a('0x37')]['length']?_0x5eb466[_0xea5a('0x37')]:_0x51ce50[_0xea5a('0x32')];if(_0x2c322a[_0xea5a('0x34')][_0xea5a('0x4f')]){_0x5eb466['include']=[{'all':!![]}];}_0x5eb466=_[_0xea5a('0x61')]({},_0x5eb466,_0x2c322a[_0xea5a('0x45')]);return db[_0xea5a('0x31')][_0xea5a('0x62')](_0x5eb466)['then'](handleEntityNotFound(_0x59a584,null))[_0xea5a('0x29')](respondWithResult(_0x59a584,null))[_0xea5a('0x5e')](handleError(_0x59a584,null));};exports['create']=function(_0x109c2b,_0x2004b1){return db[_0xea5a('0x31')]['create'](_0x109c2b['body'],{})[_0xea5a('0x29')](respondWithResult(_0x2004b1,0xc9))[_0xea5a('0x5e')](handleError(_0x2004b1,null));};exports[_0xea5a('0x28')]=function(_0x2d44e0,_0x5e7fb0){if(_0x2d44e0[_0xea5a('0x63')]['id']){delete _0x2d44e0[_0xea5a('0x63')]['id'];}return db['MailInteraction'][_0xea5a('0x62')]({'where':{'id':_0x2d44e0[_0xea5a('0x5f')]['id']}})['then'](handleEntityNotFound(_0x5e7fb0,null))['then'](saveUpdates(_0x2d44e0[_0xea5a('0x63')],null))[_0xea5a('0x29')](respondWithResult(_0x5e7fb0,null))[_0xea5a('0x5e')](handleError(_0x5e7fb0,null));};exports[_0xea5a('0x2a')]=function(_0x30b13c,_0x1794be){return db['MailInteraction']['find']({'where':{'id':_0x30b13c[_0xea5a('0x5f')]['id']}})[_0xea5a('0x29')](handleEntityNotFound(_0x1794be,null))[_0xea5a('0x29')](removeEntity(_0x1794be,null))[_0xea5a('0x5e')](handleError(_0x1794be,null));};exports[_0xea5a('0x64')]=function(_0x220a43,_0x18f58e){return db[_0xea5a('0x31')][_0xea5a('0x64')]()[_0xea5a('0x29')](respondWithResult(_0x18f58e,null))[_0xea5a('0x5e')](handleError(_0x18f58e,null));};exports[_0xea5a('0x65')]=function(_0x29dafb,_0xb5dd9d,_0x169ce9){return db['MailMessage'][_0xea5a('0x62')]({'where':{'id':_0x29dafb[_0xea5a('0x5f')]['id']}})['then'](handleEntityNotFound(_0xb5dd9d,null))[_0xea5a('0x29')](function(_0x1b282f){if(_0x1b282f){return _0x1b282f[_0xea5a('0x65')](_0x29dafb[_0xea5a('0x63')]['ids'],_[_0xea5a('0x66')](_0x29dafb['body'],[_0xea5a('0x67'),'id'])||{});}})['then'](respondWithResult(_0xb5dd9d,null))[_0xea5a('0x5e')](handleError(_0xb5dd9d,null));};exports['getMessages']=function(_0x4f3be1,_0x2f1ee6,_0x2ee716){var _0x39333b={'raw':![],'where':{}};var _0x3a57e3={};var _0x40ee8c={'count':0x0,'rows':[]};return db['MailInteraction'][_0xea5a('0x68')]({'where':{'id':_0x4f3be1['params']['id']}})['then'](handleEntityNotFound(_0x2f1ee6,null))[_0xea5a('0x29')](function(_0x1b46b2){if(_0x1b46b2){_0x3a57e3[_0xea5a('0x32')]=_['keys'](db[_0xea5a('0x4c')][_0xea5a('0x60')]);_0x3a57e3[_0xea5a('0x34')]=_[_0xea5a('0x33')](_0x4f3be1['query']);_0x3a57e3[_0xea5a('0x35')]=_[_0xea5a('0x36')](_0x3a57e3[_0xea5a('0x32')],_0x3a57e3[_0xea5a('0x34')]);_0x39333b[_0xea5a('0x37')]=_[_0xea5a('0x36')](_0x3a57e3[_0xea5a('0x32')],qs[_0xea5a('0x38')](_0x4f3be1[_0xea5a('0x34')][_0xea5a('0x38')]));_0x39333b[_0xea5a('0x37')]=_0x39333b[_0xea5a('0x37')]['length']?_0x39333b[_0xea5a('0x37')]:_0x3a57e3['model'];if(!_0x4f3be1[_0xea5a('0x34')][_0xea5a('0x3a')](_0xea5a('0x69'))){_0x39333b[_0xea5a('0x3b')]=qs['limit'](_0x4f3be1['query'][_0xea5a('0x3b')]);_0x39333b['offset']=qs[_0xea5a('0x22')](_0x4f3be1[_0xea5a('0x34')][_0xea5a('0x22')]);}_0x39333b['order']=qs[_0xea5a('0x3d')](_0x4f3be1[_0xea5a('0x34')][_0xea5a('0x3d')]);_0x39333b[_0xea5a('0x3e')]=qs[_0xea5a('0x35')](_[_0xea5a('0x3f')](_0x4f3be1[_0xea5a('0x34')],_0x3a57e3[_0xea5a('0x35')]));_0x39333b[_0xea5a('0x3e')]['MailInteractionId']=_0x1b46b2['id'];if(_0x4f3be1[_0xea5a('0x34')][_0xea5a('0x40')]){_0x39333b[_0xea5a('0x3e')]=_[_0xea5a('0x61')](_0x39333b[_0xea5a('0x3e')],{'$or':_['map'](_0x39333b[_0xea5a('0x37')],function(_0x191e7c){var _0x4f33a7={};_0x4f33a7[_0x191e7c]={'$like':'%'+_0x4f3be1['query']['filter']+'%'};return _0x4f33a7;})});}if(_0x4f3be1[_0xea5a('0x34')][_0xea5a('0x6a')]){var _0xf88e53=_0x4f3be1[_0xea5a('0x34')][_0xea5a('0x6a')][_0xea5a('0x6b')](',');var _0x2d300d={};_0x2d300d[_0xf88e53[0x0]]={'$gte':moment(_0xf88e53[0x1])['format']('YYYY-MM-DD\x20HH:mm:ss')};_0x39333b[_0xea5a('0x3e')]=_[_0xea5a('0x61')](_0x39333b[_0xea5a('0x3e')],_0x2d300d);}_0x39333b=_['merge']({},_0x39333b,_0x4f3be1[_0xea5a('0x45')]);return db[_0xea5a('0x4c')]['count']({'where':_0x39333b['where']})[_0xea5a('0x29')](function(_0x17d99d){_0x40ee8c[_0xea5a('0x21')]=_0x17d99d;if(_0x4f3be1['query'][_0xea5a('0x4f')]){_0x39333b[_0xea5a('0x47')]=[{'all':!![]}];}return db[_0xea5a('0x4c')][_0xea5a('0x5c')](_0x39333b);})[_0xea5a('0x29')](function(_0x5963db){_0x40ee8c[_0xea5a('0x5d')]=_0x5963db;return _0x40ee8c;});}})[_0xea5a('0x29')](respondWithFilteredResult(_0x2f1ee6,_0x39333b))[_0xea5a('0x5e')](handleError(_0x2f1ee6,null));};exports[_0xea5a('0x6c')]=function(_0x3457b9,_0xaed4e5,_0xd8ccd9){return db[_0xea5a('0x31')][_0xea5a('0x62')]({'where':{'id':_0x3457b9[_0xea5a('0x5f')]['id']}})['then'](handleEntityNotFound(_0xaed4e5,null))[_0xea5a('0x29')](function(_0x122782){if(_0x122782){return _0x122782[_0xea5a('0x6d')](_0x3457b9[_0xea5a('0x63')][_0xea5a('0x67')],_[_0xea5a('0x66')](_0x3457b9[_0xea5a('0x63')],['ids','id'])||{})[_0xea5a('0x6e')](function(){return db[_0xea5a('0x49')]['findAll']({'attributes':['id',_0xea5a('0x2e'),_0xea5a('0x5a')],'where':{'id':_0x3457b9[_0xea5a('0x63')][_0xea5a('0x67')]}});})['then'](function(_0x5f57cc){socket[_0xea5a('0x6f')](_0xea5a('0x70'),{'id':Number(_0x3457b9[_0xea5a('0x5f')]['id']),'tags':_0x5f57cc||[]});return{'id':Number(_0x3457b9[_0xea5a('0x5f')]['id']),'tags':_0x5f57cc||[]};});}})[_0xea5a('0x29')](respondWithResult(_0xaed4e5,null))[_0xea5a('0x5e')](handleError(_0xaed4e5,null));};exports[_0xea5a('0x71')]=function(_0x49acdc,_0x163199,_0x1b692d){var _0xa57556;return db['MailInteraction'][_0xea5a('0x62')]({'where':{'id':_0x49acdc['params']['id']}})[_0xea5a('0x29')](handleEntityNotFound(_0x163199,null))[_0xea5a('0x29')](function(_0x21e117){if(_0x21e117){return _0x21e117['removeTags'](_0x49acdc[_0xea5a('0x34')][_0xea5a('0x67')]);}})[_0xea5a('0x29')](respondWithStatusCode(_0x163199,null))['catch'](handleError(_0x163199,null));};exports[_0xea5a('0x72')]=function(_0x358879,_0x157f3a){var _0x4e5459=moment()[_0xea5a('0x73')]()[_0xea5a('0x74')]();var _0x3d3e24=path['join'](config['root'],'server',_0xea5a('0x75'),_0xea5a('0x76'));var _0x5c469d=path[_0xea5a('0x77')](config[_0xea5a('0x78')],_0xea5a('0x79'),_0xea5a('0x75'),'tmp');var _0x1a7772=path['join'](_0x5c469d,_0x4e5459);var _0x7cf8ac=util[_0xea5a('0x7a')](_0xea5a('0x7b'),_0x4e5459);var _0x56461a=path['join'](_0x5c469d,_0x7cf8ac);var _0x32b82c=![];return db['MailInteraction']['find']({'where':{'id':_0x358879[_0xea5a('0x5f')]['id']}})[_0xea5a('0x29')](handleEntityNotFound(_0x157f3a,null))[_0xea5a('0x29')](function(_0x185ab6){if(_0x185ab6){return _0x185ab6[_0xea5a('0x7c')]({'attributes':['id',_0xea5a('0x63'),_0xea5a('0x7d'),'to','cc',_0xea5a('0x7e'),'subject',_0xea5a('0x59')],'where':{'secret':![]},'include':_0x358879[_0xea5a('0x34')][_0xea5a('0x76')]?[{'model':db[_0xea5a('0x7f')],'as':'Attachments'}]:undefined,'order':qs[_0xea5a('0x3d')]('id')});}return[];})[_0xea5a('0x29')](function(_0x284709){_0x32b82c=_0x284709[_0xea5a('0x39')];if(_0x284709[_0xea5a('0x39')]){fs[_0xea5a('0x80')](_0x1a7772);return BPromise['each'](_0x284709,function(_0x213be9,_0x69da6){var _0x3890ee=_0x213be9;var _0x1ee173={'from':_0x3890ee[_0xea5a('0x7d')],'to':_0x3890ee['to'],'subject':_0x3890ee[_0xea5a('0x81')],'html':_0x3890ee['body'],'headers':{'Date':moment(_0x3890ee[_0xea5a('0x59')])[_0xea5a('0x7a')](_0xea5a('0x82'))},'attachments':[]};if(_0x213be9['cc']){_0x1ee173[_0xea5a('0x83')]['Cc']=_0x213be9['cc'];}if(_0x213be9[_0xea5a('0x7e')]){_0x1ee173[_0xea5a('0x83')][_0xea5a('0x84')]=_0x213be9[_0xea5a('0x7e')];}return new BPromise(function(_0x471815,_0xb1c6d4){if(_0x213be9[_0xea5a('0x85')]){for(var _0x47eb57=0x0;_0x47eb57<_0x213be9[_0xea5a('0x85')][_0xea5a('0x39')];_0x47eb57++){var _0x48d165=_0x213be9[_0xea5a('0x85')][_0x47eb57];var _0x1b60ad=path[_0xea5a('0x77')](_0x3d3e24,_0x48d165[_0xea5a('0x86')]);if(fs['existsSync'](_0x1b60ad)){_0x1ee173[_0xea5a('0x76')]['push']({'name':_0x48d165[_0xea5a('0x2e')],'contentType':_0x48d165[_0xea5a('0x42')],'data':fs['readFileSync'](_0x1b60ad)});}}}emlformat['build'](_0x1ee173,function(_0x6fc924,_0x3dcc9d){if(_0x6fc924)return _0xb1c6d4(_0x6fc924);fs[_0xea5a('0x87')](path[_0xea5a('0x77')](_0x1a7772,util[_0xea5a('0x7a')](_0xea5a('0x88'),_0x69da6)),_0x3dcc9d);return _0x471815(_0x3dcc9d);});});});}})[_0xea5a('0x29')](function(){if(_0x32b82c){return new BPromise(function(_0x196a90,_0x34bd14){zipdir(_0x1a7772,{'saveTo':_0x56461a},function(_0x43d4f8,_0xb25c76){if(_0x43d4f8)return _0x34bd14(_0x43d4f8);return _0x196a90(_0xb25c76);});});}})[_0xea5a('0x29')](function(){if(_0x32b82c){return new BPromise(function(_0x5c02b6,_0x53c430){rimraf(_0x1a7772,function(_0xda7715){if(_0xda7715)_0x53c430(_0xda7715);return _0x5c02b6();});});}})[_0xea5a('0x29')](function(){if(_0x32b82c){return _0x157f3a[_0xea5a('0x72')](_0x56461a,_0x7cf8ac,function(_0x482a61){if(_0x482a61){console['log'](_0xea5a('0x89'),_0x482a61);}else{fs['unlinkSync'](_0x56461a);}});}else{return _0x157f3a['sendStatus'](0xc8);}})[_0xea5a('0x5e')](handleError(_0x157f3a,null));};
\ No newline at end of file
index 06a4b14..394f5d5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7077=['remove','emit','exports','events','../../mysqldb','MailInteraction','setMaxListeners'];(function(_0x1c9b2d,_0x439f74){var _0x3b44e7=function(_0x39342b){while(--_0x39342b){_0x1c9b2d['push'](_0x1c9b2d['shift']());}};_0x3b44e7(++_0x439f74);}(_0x7077,0x15a));var _0x7707=function(_0x5e3f2c,_0x45c235){_0x5e3f2c=_0x5e3f2c-0x0;var _0x5802be=_0x7077[_0x5e3f2c];return _0x5802be;};'use strict';var EventEmitter=require(_0x7707('0x0'));var MailInteraction=require(_0x7707('0x1'))['db'][_0x7707('0x2')];var MailInteractionEvents=new EventEmitter();MailInteractionEvents[_0x7707('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x7707('0x4')};function emitEvent(_0x1520a7){return function(_0x192baf,_0x3e1c4e,_0x4c0728){MailInteractionEvents[_0x7707('0x5')](_0x1520a7+':'+_0x192baf['id'],_0x192baf);MailInteractionEvents['emit'](_0x1520a7,_0x192baf);_0x4c0728(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];MailInteraction['hook'](e,emitEvent(event));}}module[_0x7707('0x6')]=MailInteractionEvents;
\ No newline at end of file
+var _0x4f7e=['setMaxListeners','save','update','remove','hasOwnProperty','hook','exports','events','../../mysqldb','MailInteraction'];(function(_0x395bfe,_0x4db521){var _0x35c81c=function(_0x484a1b){while(--_0x484a1b){_0x395bfe['push'](_0x395bfe['shift']());}};_0x35c81c(++_0x4db521);}(_0x4f7e,0x165));var _0xe4f7=function(_0x2a8f5c,_0x2934d6){_0x2a8f5c=_0x2a8f5c-0x0;var _0x4a6ab5=_0x4f7e[_0x2a8f5c];return _0x4a6ab5;};'use strict';var EventEmitter=require(_0xe4f7('0x0'));var MailInteraction=require(_0xe4f7('0x1'))['db'][_0xe4f7('0x2')];var MailInteractionEvents=new EventEmitter();MailInteractionEvents[_0xe4f7('0x3')](0x0);var events={'afterCreate':_0xe4f7('0x4'),'afterUpdate':_0xe4f7('0x5'),'afterDestroy':_0xe4f7('0x6')};function emitEvent(_0x37625e){return function(_0x1e13c8,_0x5ced33,_0x875a85){MailInteractionEvents['emit'](_0x37625e+':'+_0x1e13c8['id'],_0x1e13c8);MailInteractionEvents['emit'](_0x37625e,_0x1e13c8);_0x875a85(null);};}for(var e in events){if(events[_0xe4f7('0x7')](e)){var event=events[e];MailInteraction[_0xe4f7('0x8')](e,emitEvent(event));}}module[_0xe4f7('0x9')]=MailInteractionEvents;
\ No newline at end of file
index 083e0b0..294cd1e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e69=['request-promise','./mailInteraction.attributes','define','MailInteraction','mail_interactions','substatus','substatusAt','format','YYYY-MM-DD\x20HH:mm:ss','closed','closedAt','changed','utf8mb4','utf8mb4_unicode_ci','lodash','util','api','moment'];(function(_0x34de61,_0x286e3b){var _0x206a79=function(_0x20a6d2){while(--_0x20a6d2){_0x34de61['push'](_0x34de61['shift']());}};_0x206a79(++_0x286e3b);}(_0x3e69,0x1ac));var _0x93e6=function(_0x999b85,_0x1edc2b){_0x999b85=_0x999b85-0x0;var _0x1d7124=_0x3e69[_0x999b85];return _0x1d7124;};'use strict';var _=require(_0x93e6('0x0'));var util=require(_0x93e6('0x1'));var logger=require('../../config/logger')(_0x93e6('0x2'));var moment=require(_0x93e6('0x3'));var BPromise=require('bluebird');var rp=require(_0x93e6('0x4'));var attributes=require(_0x93e6('0x5'));module['exports']=function(_0x335686,_0x354bdb){return _0x335686[_0x93e6('0x6')](_0x93e6('0x7'),attributes,{'tableName':_0x93e6('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeCreate':function(_0x4ca196,_0x3f8050,_0x223d7e){if(_0x4ca196[_0x93e6('0x9')]){_0x4ca196[_0x93e6('0xa')]=moment()[_0x93e6('0xb')](_0x93e6('0xc'));}if(_0x4ca196[_0x93e6('0xd')]){_0x4ca196[_0x93e6('0xe')]=moment()[_0x93e6('0xb')]('YYYY-MM-DD\x20HH:mm:ss');}_0x223d7e(null,_0x3f8050);},'beforeUpdate':function(_0x4407ab,_0x26e2e4,_0x437a73){if(_0x4407ab[_0x93e6('0xf')]('substatus')){_0x4407ab['substatusAt']=moment()[_0x93e6('0xb')]('YYYY-MM-DD\x20HH:mm:ss');}if(_0x4407ab['changed'](_0x93e6('0xd'))){_0x4407ab[_0x93e6('0xe')]=moment()[_0x93e6('0xb')](_0x93e6('0xc'));}_0x437a73(null,_0x4407ab);}},'charset':_0x93e6('0x10'),'collate':_0x93e6('0x11')});};
\ No newline at end of file
+var _0x2876=['closedAt','changed','substatus','utf8mb4','utf8mb4_unicode_ci','lodash','api','moment','bluebird','request-promise','./mailInteraction.attributes','exports','define','MailInteraction','substatusAt','format','YYYY-MM-DD\x20HH:mm:ss','closed'];(function(_0x497e5b,_0x5ad1af){var _0x5c2aa6=function(_0x1c6a19){while(--_0x1c6a19){_0x497e5b['push'](_0x497e5b['shift']());}};_0x5c2aa6(++_0x5ad1af);}(_0x2876,0xef));var _0x6287=function(_0x3d0e9f,_0x3a30cd){_0x3d0e9f=_0x3d0e9f-0x0;var _0x500132=_0x2876[_0x3d0e9f];return _0x500132;};'use strict';var _=require(_0x6287('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x6287('0x1'));var moment=require(_0x6287('0x2'));var BPromise=require(_0x6287('0x3'));var rp=require(_0x6287('0x4'));var attributes=require(_0x6287('0x5'));module[_0x6287('0x6')]=function(_0x4bf632,_0x2988b0){return _0x4bf632[_0x6287('0x7')](_0x6287('0x8'),attributes,{'tableName':'mail_interactions','paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeCreate':function(_0x41a54b,_0x469f37,_0x30887c){if(_0x41a54b['substatus']){_0x41a54b[_0x6287('0x9')]=moment()[_0x6287('0xa')](_0x6287('0xb'));}if(_0x41a54b[_0x6287('0xc')]){_0x41a54b[_0x6287('0xd')]=moment()[_0x6287('0xa')]('YYYY-MM-DD\x20HH:mm:ss');}_0x30887c(null,_0x469f37);},'beforeUpdate':function(_0x3fa39c,_0x5e4570,_0x528654){if(_0x3fa39c[_0x6287('0xe')](_0x6287('0xf'))){_0x3fa39c[_0x6287('0x9')]=moment()[_0x6287('0xa')](_0x6287('0xb'));}if(_0x3fa39c[_0x6287('0xe')]('closed')){_0x3fa39c[_0x6287('0xd')]=moment()[_0x6287('0xa')]('YYYY-MM-DD\x20HH:mm:ss');}_0x528654(null,_0x3fa39c);}},'charset':_0x6287('0x10'),'collate':_0x6287('0x11')});};
\ No newline at end of file
index f6c5243..87cb1f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7374=['debug','MailInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','update','options','where','attributes','limit','UpdateMailInteraction','AddTagsToMailInteraction','MailInteraction','find','addTags','body','ids','omit','AddTags','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','redis','defaults','localhost','socket.io-emitter','./mailInteraction.socket','register','then','info','MailInteraction,\x20%s,\x20%s','request\x20sent'];(function(_0x414751,_0x285644){var _0x5f30ba=function(_0x3ff1af){while(--_0x3ff1af){_0x414751['push'](_0x414751['shift']());}};_0x5f30ba(++_0x285644);}(_0x7374,0x1b9));var _0x4737=function(_0x48bdfd,_0x2a49e8){_0x48bdfd=_0x48bdfd-0x0;var _0x271fb2=_0x7374[_0x48bdfd];return _0x271fb2;};'use strict';var _=require(_0x4737('0x0'));var util=require(_0x4737('0x1'));var moment=require(_0x4737('0x2'));var BPromise=require(_0x4737('0x3'));var rs=require(_0x4737('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x4737('0x5'))['db'];var utils=require(_0x4737('0x6'));var logger=require(_0x4737('0x7'))(_0x4737('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x4737('0x9')][_0x4737('0xa')]({'port':0x232a});config[_0x4737('0xb')]=_[_0x4737('0xc')](config['redis'],{'host':_0x4737('0xd'),'port':0x18eb});var socket=require(_0x4737('0xe'))(new Redis(config[_0x4737('0xb')]));require(_0x4737('0xf'))[_0x4737('0x10')](socket);function respondWithRpcPromise(_0x548637,_0x10dabc,_0x3a51a8){return new BPromise(function(_0x2367aa,_0x4f54ca){return client['request'](_0x548637,_0x3a51a8)[_0x4737('0x11')](function(_0x1a7840){logger[_0x4737('0x12')](_0x4737('0x13'),_0x10dabc,_0x4737('0x14'));logger[_0x4737('0x15')](_0x4737('0x16'),_0x10dabc,_0x4737('0x14'),JSON[_0x4737('0x17')](_0x1a7840));if(_0x1a7840['error']){if(_0x1a7840[_0x4737('0x18')][_0x4737('0x19')]===0x1f4){logger[_0x4737('0x18')](_0x4737('0x13'),_0x10dabc,_0x1a7840[_0x4737('0x18')]['message']);return _0x4f54ca(_0x1a7840['error'][_0x4737('0x1a')]);}logger['error'](_0x4737('0x13'),_0x10dabc,_0x1a7840[_0x4737('0x18')]['message']);return _0x2367aa(_0x1a7840[_0x4737('0x18')][_0x4737('0x1a')]);}else{logger[_0x4737('0x12')]('MailInteraction,\x20%s,\x20%s',_0x10dabc,_0x4737('0x14'));_0x2367aa(_0x1a7840['result'][_0x4737('0x1a')]);}})[_0x4737('0x1b')](function(_0x2d247e){logger[_0x4737('0x18')](_0x4737('0x13'),_0x10dabc,_0x2d247e);_0x4f54ca(_0x2d247e);});});}exports['UpdateMailInteraction']=function(_0x241ba7){var _0x3c822c=this;return new Promise(function(_0x6a2198,_0x354b71){return db['MailInteraction'][_0x4737('0x1c')](_0x241ba7['body'],{'raw':_0x241ba7[_0x4737('0x1d')]?_0x241ba7[_0x4737('0x1d')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x241ba7[_0x4737('0x1d')]?_0x241ba7[_0x4737('0x1d')][_0x4737('0x1e')]||null:null,'attributes':_0x241ba7[_0x4737('0x1d')]?_0x241ba7['options'][_0x4737('0x1f')]||null:null,'limit':_0x241ba7[_0x4737('0x1d')]?_0x241ba7['options'][_0x4737('0x20')]||null:null})['then'](function(_0x10ec05){logger[_0x4737('0x12')](_0x4737('0x21'),_0x241ba7);logger[_0x4737('0x15')](_0x4737('0x21'),_0x241ba7,JSON[_0x4737('0x17')](_0x10ec05));_0x6a2198(_0x10ec05);})['catch'](function(_0x1cc0c7){logger['error'](_0x4737('0x21'),_0x1cc0c7['message'],_0x241ba7);_0x354b71(_0x3c822c[_0x4737('0x18')](0x1f4,_0x1cc0c7[_0x4737('0x1a')]));});});};exports[_0x4737('0x22')]=function(_0x5e1f13){return new Promise(function(_0x4f3e2d,_0x2d7486){return db[_0x4737('0x23')][_0x4737('0x24')]({'where':_0x5e1f13[_0x4737('0x1d')]?_0x5e1f13[_0x4737('0x1d')]['where']||null:null})[_0x4737('0x11')](function(_0x2a8f99){if(_0x2a8f99){return _0x2a8f99[_0x4737('0x25')](_0x5e1f13[_0x4737('0x26')][_0x4737('0x27')],_[_0x4737('0x28')](_0x5e1f13[_0x4737('0x26')],[_0x4737('0x27'),'id'])||{});}})['spread'](function(_0x2664a1){logger[_0x4737('0x12')](_0x4737('0x29'),_0x5e1f13);logger[_0x4737('0x15')](_0x4737('0x29'),_0x5e1f13,JSON[_0x4737('0x17')](_0x2664a1));_0x4f3e2d(_0x2664a1);})[_0x4737('0x1b')](function(_0x3d4330){logger[_0x4737('0x18')]('AddTags',_0x3d4330['message'],_0x5e1f13);_0x2d7486(_this[_0x4737('0x18')](0x1f4,_0x3d4330[_0x4737('0x1a')]));});});};
\ No newline at end of file
+var _0xdedd=['error','message','result','catch','UpdateMailInteraction','MailInteraction','update','body','options','raw','where','limit','stringify','AddTagsToMailInteraction','find','addTags','ids','omit','spread','AddTags','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','localhost','./mailInteraction.socket','register','request','then','info','MailInteraction,\x20%s,\x20%s','request\x20sent','debug','MailInteraction,\x20%s,\x20%s,\x20%s'];(function(_0x57643b,_0x1706fe){var _0x53a35b=function(_0x2625e8){while(--_0x2625e8){_0x57643b['push'](_0x57643b['shift']());}};_0x53a35b(++_0x1706fe);}(_0xdedd,0x197));var _0xdded=function(_0x1fe806,_0x1071cb){_0x1fe806=_0x1fe806-0x0;var _0xed1160=_0xdedd[_0x1fe806];return _0xed1160;};'use strict';var _=require(_0xdded('0x0'));var util=require(_0xdded('0x1'));var moment=require(_0xdded('0x2'));var BPromise=require(_0xdded('0x3'));var rs=require(_0xdded('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xdded('0x5'))['db'];var utils=require(_0xdded('0x6'));var logger=require(_0xdded('0x7'))(_0xdded('0x8'));var config=require(_0xdded('0x9'));var jayson=require(_0xdded('0xa'));var client=jayson[_0xdded('0xb')][_0xdded('0xc')]({'port':0x232a});config['redis']=_['defaults'](config['redis'],{'host':_0xdded('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0xdded('0xe'))[_0xdded('0xf')](socket);function respondWithRpcPromise(_0x30db97,_0xc7fb6a,_0x4e53bb){return new BPromise(function(_0x91b36d,_0x4f3d66){return client[_0xdded('0x10')](_0x30db97,_0x4e53bb)[_0xdded('0x11')](function(_0x363291){logger[_0xdded('0x12')](_0xdded('0x13'),_0xc7fb6a,_0xdded('0x14'));logger[_0xdded('0x15')](_0xdded('0x16'),_0xc7fb6a,_0xdded('0x14'),JSON['stringify'](_0x363291));if(_0x363291[_0xdded('0x17')]){if(_0x363291[_0xdded('0x17')]['code']===0x1f4){logger[_0xdded('0x17')]('MailInteraction,\x20%s,\x20%s',_0xc7fb6a,_0x363291[_0xdded('0x17')]['message']);return _0x4f3d66(_0x363291[_0xdded('0x17')][_0xdded('0x18')]);}logger[_0xdded('0x17')]('MailInteraction,\x20%s,\x20%s',_0xc7fb6a,_0x363291[_0xdded('0x17')][_0xdded('0x18')]);return _0x91b36d(_0x363291[_0xdded('0x17')][_0xdded('0x18')]);}else{logger[_0xdded('0x12')](_0xdded('0x13'),_0xc7fb6a,_0xdded('0x14'));_0x91b36d(_0x363291[_0xdded('0x19')]['message']);}})[_0xdded('0x1a')](function(_0x1ff810){logger[_0xdded('0x17')](_0xdded('0x13'),_0xc7fb6a,_0x1ff810);_0x4f3d66(_0x1ff810);});});}exports[_0xdded('0x1b')]=function(_0x29eb80){var _0x43f005=this;return new Promise(function(_0x457ee4,_0x415b38){return db[_0xdded('0x1c')][_0xdded('0x1d')](_0x29eb80[_0xdded('0x1e')],{'raw':_0x29eb80[_0xdded('0x1f')]?_0x29eb80['options'][_0xdded('0x20')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x29eb80[_0xdded('0x1f')]?_0x29eb80[_0xdded('0x1f')][_0xdded('0x21')]||null:null,'attributes':_0x29eb80['options']?_0x29eb80[_0xdded('0x1f')]['attributes']||null:null,'limit':_0x29eb80[_0xdded('0x1f')]?_0x29eb80[_0xdded('0x1f')][_0xdded('0x22')]||null:null})[_0xdded('0x11')](function(_0x16cfff){logger['info'](_0xdded('0x1b'),_0x29eb80);logger[_0xdded('0x15')](_0xdded('0x1b'),_0x29eb80,JSON[_0xdded('0x23')](_0x16cfff));_0x457ee4(_0x16cfff);})[_0xdded('0x1a')](function(_0x4bd5c9){logger['error'](_0xdded('0x1b'),_0x4bd5c9[_0xdded('0x18')],_0x29eb80);_0x415b38(_0x43f005[_0xdded('0x17')](0x1f4,_0x4bd5c9[_0xdded('0x18')]));});});};exports[_0xdded('0x24')]=function(_0x591a94){return new Promise(function(_0x367154,_0x10c128){return db[_0xdded('0x1c')][_0xdded('0x25')]({'where':_0x591a94['options']?_0x591a94[_0xdded('0x1f')]['where']||null:null})[_0xdded('0x11')](function(_0x7b622b){if(_0x7b622b){return _0x7b622b[_0xdded('0x26')](_0x591a94[_0xdded('0x1e')][_0xdded('0x27')],_[_0xdded('0x28')](_0x591a94[_0xdded('0x1e')],['ids','id'])||{});}})[_0xdded('0x29')](function(_0x132c70){logger['info'](_0xdded('0x2a'),_0x591a94);logger[_0xdded('0x15')]('AddTags',_0x591a94,JSON['stringify'](_0x132c70));_0x367154(_0x132c70);})['catch'](function(_0x594766){logger[_0xdded('0x17')](_0xdded('0x2a'),_0x594766[_0xdded('0x18')],_0x591a94);_0x10c128(_this[_0xdded('0x17')](0x1f4,_0x594766[_0xdded('0x18')]));});});};
\ No newline at end of file
index 0df016f..32f0000 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8cfd=['removeListener','register','length','mailInteraction:','./mailInteraction.events','update','emit'];(function(_0x1c4324,_0x132209){var _0x55881a=function(_0x416c51){while(--_0x416c51){_0x1c4324['push'](_0x1c4324['shift']());}};_0x55881a(++_0x132209);}(_0x8cfd,0x1b6));var _0xd8cf=function(_0x491468,_0x42f169){_0x491468=_0x491468-0x0;var _0x5b8c22=_0x8cfd[_0x491468];return _0x5b8c22;};'use strict';var MailInteractionEvents=require(_0xd8cf('0x0'));var events=['save','remove',_0xd8cf('0x1')];function createListener(_0x105d6c,_0x1d0d09){return function(_0x2182e5){_0x1d0d09[_0xd8cf('0x2')](_0x105d6c,_0x2182e5);};}function removeListener(_0x5ed745,_0x621a23){return function(){MailInteractionEvents[_0xd8cf('0x3')](_0x5ed745,_0x621a23);};}exports[_0xd8cf('0x4')]=function(_0x535b3c){for(var _0x5ab71f=0x0,_0x149e32=events[_0xd8cf('0x5')];_0x5ab71f<_0x149e32;_0x5ab71f++){var _0x1a597e=events[_0x5ab71f];var _0x58327d=createListener(_0xd8cf('0x6')+_0x1a597e,_0x535b3c);MailInteractionEvents['on'](_0x1a597e,_0x58327d);}};
\ No newline at end of file
+var _0xbb1a=['mailInteraction:','./mailInteraction.events','remove','update','removeListener','register','length'];(function(_0xf34345,_0x3eb137){var _0x184c7b=function(_0x368ba8){while(--_0x368ba8){_0xf34345['push'](_0xf34345['shift']());}};_0x184c7b(++_0x3eb137);}(_0xbb1a,0x1cf));var _0xabb1=function(_0x1f36b9,_0x19e3bd){_0x1f36b9=_0x1f36b9-0x0;var _0x510fac=_0xbb1a[_0x1f36b9];return _0x510fac;};'use strict';var MailInteractionEvents=require(_0xabb1('0x0'));var events=['save',_0xabb1('0x1'),_0xabb1('0x2')];function createListener(_0x4fcc72,_0x3c5939){return function(_0x11904d){_0x3c5939['emit'](_0x4fcc72,_0x11904d);};}function removeListener(_0xed9325,_0x1d8f0c){return function(){MailInteractionEvents[_0xabb1('0x3')](_0xed9325,_0x1d8f0c);};}exports[_0xabb1('0x4')]=function(_0x574d97){for(var _0x3441f9=0x0,_0x247af4=events[_0xabb1('0x5')];_0x3441f9<_0x247af4;_0x3441f9++){var _0xc9868b=events[_0x3441f9];var _0x6ba9c3=createListener(_0xabb1('0x6')+_0xc9868b,_0x574d97);MailInteractionEvents['on'](_0xc9868b,_0x6ba9c3);}};
\ No newline at end of file
index 54cccd6..af41d5b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x31f0=['exports','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','./mailMessage.controller','get','/describe','describe','/:id','isAuthenticated','/:id/download','download','post','tracked','mail','create','put','update','/:id/accept','accept','/:id/reject','reject','destroy'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x31f0,0xb7));var _0x031f=function(_0x127e73,_0x5a4f68){_0x127e73=_0x127e73-0x0;var _0x14510e=_0x31f0[_0x127e73];return _0x14510e;};'use strict';var multer=require(_0x031f('0x0'));var util=require('util');var path=require(_0x031f('0x1'));var timeout=require('connect-timeout');var express=require(_0x031f('0x2'));var router=express[_0x031f('0x3')]();var auth=require(_0x031f('0x4'));var interaction=require(_0x031f('0x5'));var config=require('../../config/environment');var controller=require(_0x031f('0x6'));router[_0x031f('0x7')]('/',auth['isAuthenticated'](),controller['index']);router['get'](_0x031f('0x8'),auth['isAuthenticated'](),controller[_0x031f('0x9')]);router[_0x031f('0x7')](_0x031f('0xa'),auth[_0x031f('0xb')](),controller['show']);router[_0x031f('0x7')](_0x031f('0xc'),auth[_0x031f('0xb')](),controller[_0x031f('0xd')]);router[_0x031f('0xe')]('/',auth[_0x031f('0xb')](),interaction[_0x031f('0xf')](_0x031f('0x10'),'mailmessage:create'),controller[_0x031f('0x11')]);router[_0x031f('0x12')](_0x031f('0xa'),auth[_0x031f('0xb')](),controller[_0x031f('0x13')]);router[_0x031f('0x12')](_0x031f('0x14'),auth['isAuthenticated'](),controller[_0x031f('0x15')]);router[_0x031f('0x12')](_0x031f('0x16'),auth[_0x031f('0xb')](),controller[_0x031f('0x17')]);router['delete']('/:id',auth[_0x031f('0xb')](),controller[_0x031f('0x18')]);module[_0x031f('0x19')]=router;
\ No newline at end of file
+var _0xbd51=['path','connect-timeout','express','Router','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/download','download','post','tracked','mailmessage:create','put','update','/:id/accept','/:id/reject','reject','delete','destroy','exports','multer'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0xbd51,0x1a8));var _0x1bd5=function(_0x3b061e,_0x1b3267){_0x3b061e=_0x3b061e-0x0;var _0x4b0f1e=_0xbd51[_0x3b061e];return _0x4b0f1e;};'use strict';var multer=require(_0x1bd5('0x0'));var util=require('util');var path=require(_0x1bd5('0x1'));var timeout=require(_0x1bd5('0x2'));var express=require(_0x1bd5('0x3'));var router=express[_0x1bd5('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require('./mailMessage.controller');router[_0x1bd5('0x5')]('/',auth[_0x1bd5('0x6')](),controller[_0x1bd5('0x7')]);router['get'](_0x1bd5('0x8'),auth[_0x1bd5('0x6')](),controller[_0x1bd5('0x9')]);router[_0x1bd5('0x5')](_0x1bd5('0xa'),auth['isAuthenticated'](),controller[_0x1bd5('0xb')]);router['get'](_0x1bd5('0xc'),auth[_0x1bd5('0x6')](),controller[_0x1bd5('0xd')]);router[_0x1bd5('0xe')]('/',auth[_0x1bd5('0x6')](),interaction[_0x1bd5('0xf')]('mail',_0x1bd5('0x10')),controller['create']);router[_0x1bd5('0x11')](_0x1bd5('0xa'),auth[_0x1bd5('0x6')](),controller[_0x1bd5('0x12')]);router[_0x1bd5('0x11')](_0x1bd5('0x13'),auth[_0x1bd5('0x6')](),controller['accept']);router['put'](_0x1bd5('0x14'),auth[_0x1bd5('0x6')](),controller[_0x1bd5('0x15')]);router[_0x1bd5('0x16')]('/:id',auth['isAuthenticated'](),controller[_0x1bd5('0x17')]);module[_0x1bd5('0x18')]=router;
\ No newline at end of file
index f537dcd..e46f3a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f61=['TEXT','long','DATE','INTEGER','sequelize','exports','BOOLEAN','ENUM','out','STRING'];(function(_0x3caa43,_0x4d8a5b){var _0x35e7c4=function(_0x36e703){while(--_0x36e703){_0x3caa43['push'](_0x3caa43['shift']());}};_0x35e7c4(++_0x4d8a5b);}(_0x5f61,0x1d0));var _0x15f6=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x5f61[_0x20a584];return _0x4b41a8;};'use strict';var Sequelize=require(_0x15f6('0x0'));var _=require('lodash');module[_0x15f6('0x1')]={'body':{'type':Sequelize['TEXT']('long'),'allowNull':![]},'read':{'type':Sequelize[_0x15f6('0x2')],'defaultValue':![]},'direction':{'type':Sequelize[_0x15f6('0x3')]('in',_0x15f6('0x4')),'defaultValue':'out','allowNull':![]},'messageId':{'type':Sequelize[_0x15f6('0x5')](0x1fe)},'from':{'type':Sequelize[_0x15f6('0x5')]},'to':{'type':Sequelize[_0x15f6('0x6')](_0x15f6('0x7'))},'cc':{'type':Sequelize['TEXT'](_0x15f6('0x7'))},'bcc':{'type':Sequelize[_0x15f6('0x6')]('long')},'subject':{'type':Sequelize[_0x15f6('0x6')]},'sentAt':{'type':Sequelize[_0x15f6('0x8')]},'attach':{'type':Sequelize[_0x15f6('0x9')],'defaultValue':0x0},'secret':{'type':Sequelize[_0x15f6('0x2')],'defaultValue':![]},'readAt':{'type':Sequelize[_0x15f6('0x8')]},'originTo':{'type':Sequelize[_0x15f6('0x6')](_0x15f6('0x7'))},'originCc':{'type':Sequelize['TEXT'](_0x15f6('0x7'))}};
\ No newline at end of file
+var _0xaadc=['TEXT','BOOLEAN','out','STRING','long','DATE','INTEGER','sequelize','exports'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xaadc,0x154));var _0xcaad=function(_0x46c350,_0x27e589){_0x46c350=_0x46c350-0x0;var _0x4f876b=_0xaadc[_0x46c350];return _0x4f876b;};'use strict';var Sequelize=require(_0xcaad('0x0'));var _=require('lodash');module[_0xcaad('0x1')]={'body':{'type':Sequelize[_0xcaad('0x2')]('long'),'allowNull':![]},'read':{'type':Sequelize[_0xcaad('0x3')],'defaultValue':![]},'direction':{'type':Sequelize['ENUM']('in',_0xcaad('0x4')),'defaultValue':_0xcaad('0x4'),'allowNull':![]},'messageId':{'type':Sequelize[_0xcaad('0x5')](0x1fe)},'from':{'type':Sequelize[_0xcaad('0x5')]},'to':{'type':Sequelize[_0xcaad('0x2')](_0xcaad('0x6'))},'cc':{'type':Sequelize[_0xcaad('0x2')](_0xcaad('0x6'))},'bcc':{'type':Sequelize['TEXT'](_0xcaad('0x6'))},'subject':{'type':Sequelize[_0xcaad('0x2')]},'sentAt':{'type':Sequelize[_0xcaad('0x7')]},'attach':{'type':Sequelize[_0xcaad('0x8')],'defaultValue':0x0},'secret':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'readAt':{'type':Sequelize[_0xcaad('0x7')]},'originTo':{'type':Sequelize['TEXT']('long')},'originCc':{'type':Sequelize['TEXT'](_0xcaad('0x6'))}};
\ No newline at end of file
index 34e9997..e875c18 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c53=['find','describe','create','direction','out','secret','MailAccount','findOne','MailAccountId','MailServerOut','Smtp','isNil','service','host','port','secure','authentication','auth','user','pass','attachments','root','server/files/attachments','basename','sendMail','format','mail-interactions','accept','mail','read','readAt','YYYY-MM-DD\x20HH:mm:ss','UserId','Contact','get','MailInteraction','MailInteractionId','read1stAt','interaction','[MAILMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','AcceptMessage','acceptMessage','interface','SIP/%s','channel','event','EventManager','acceptmessage','[MAILMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','RejectMessage','rejectmessage','download','unix','join','server','files','tmp','message-%s.eml','from','bcc','subject','createdAt','Attachment','Attachments','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','existsSync','readFileSync','build','writeFileSync','log','err','html-pdf','eml-format','fast-json-patch','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./mailMessage.socket','register','http','client','request','then','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','status','end','json','offset','limit','set','apply','reject','save','update','destroy','sendStatus','name','send','index','MailMessage','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','count','includeAll','include','findAll','show','params','length','body'];(function(_0x4a747d,_0x3b747f){var _0x3a5b5c=function(_0x4b3e81){while(--_0x4b3e81){_0x4a747d['push'](_0x4a747d['shift']());}};_0x3a5b5c(++_0x3b747f);}(_0x3c53,0xef));var _0x33c5=function(_0x3d4454,_0x25d4d3){_0x3d4454=_0x3d4454-0x0;var _0x2425f9=_0x3c53[_0x3d4454];return _0x2425f9;};'use strict';var pdf=require(_0x33c5('0x0'));var emlformat=require(_0x33c5('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x33c5('0x2'));var rp=require(_0x33c5('0x3'));var moment=require(_0x33c5('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x33c5('0x5'));var util=require(_0x33c5('0x6'));var path=require(_0x33c5('0x7'));var sox=require('sox');var csv=require(_0x33c5('0x8'));var ejs=require(_0x33c5('0x9'));var fs=require('fs');var _=require(_0x33c5('0xa'));var squel=require(_0x33c5('0xb'));var crypto=require('crypto');var jsforce=require(_0x33c5('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x33c5('0x8'));var querystring=require(_0x33c5('0xd'));var Papa=require(_0x33c5('0xe'));var authService=require(_0x33c5('0xf'));var hardwareService=require(_0x33c5('0x10'));var Redis=require(_0x33c5('0x11'));var qs=require(_0x33c5('0x12'));var logger=require(_0x33c5('0x13'))(_0x33c5('0x14'));var utils=require(_0x33c5('0x15'));var config=require(_0x33c5('0x16'));var db=require(_0x33c5('0x17'))['db'];config[_0x33c5('0x18')]=_[_0x33c5('0x19')](config[_0x33c5('0x18')],{'host':_0x33c5('0x1a'),'port':0x18eb});var socket=require(_0x33c5('0x1b'))(new Redis(config[_0x33c5('0x18')]));require(_0x33c5('0x1c'))[_0x33c5('0x1d')](socket);var jayson=require('jayson/promise');var client=jayson['client'][_0x33c5('0x1e')]({'port':0x232c});var client9003=jayson['client'][_0x33c5('0x1e')]({'port':0x232b});var client9002=jayson[_0x33c5('0x1f')][_0x33c5('0x1e')]({'port':0x232a});function respondWithRpcPromise(_0x2e64d3,_0x5a728c,_0x5b30f5,_0x15e119){return new BPromise(function(_0x312544,_0x1911e0){var _0xfd87d3=_0x15e119||client;return _0xfd87d3[_0x33c5('0x20')](_0x2e64d3,_0x5b30f5)[_0x33c5('0x21')](function(_0x29adb4){logger['info'](_0x33c5('0x22'),_0x5a728c,_0x33c5('0x23'));logger[_0x33c5('0x24')](_0x33c5('0x25'),_0x5a728c,'request\x20sent',JSON[_0x33c5('0x26')](_0x29adb4));if(_0x29adb4[_0x33c5('0x27')]){if(_0x29adb4[_0x33c5('0x27')][_0x33c5('0x28')]===0x1f4){logger['error'](_0x33c5('0x22'),_0x5a728c,_0x29adb4[_0x33c5('0x27')]['message']);return _0x1911e0(_0x29adb4[_0x33c5('0x27')]['message']);}logger[_0x33c5('0x27')](_0x33c5('0x22'),_0x5a728c,_0x29adb4[_0x33c5('0x27')][_0x33c5('0x29')]);return _0x312544(_0x29adb4['error'][_0x33c5('0x29')]);}else{logger[_0x33c5('0x2a')]('MailMessage,\x20%s,\x20%s',_0x5a728c,'request\x20sent');_0x312544(_0x29adb4[_0x33c5('0x2b')][_0x33c5('0x29')]);}})[_0x33c5('0x2c')](function(_0x518c6f){logger[_0x33c5('0x27')](_0x33c5('0x22'),_0x5a728c,_0x518c6f);_0x1911e0(_0x518c6f);});});}function respondWithStatusCode(_0x24cf80,_0x509b7e){_0x509b7e=_0x509b7e||0xcc;return function(_0x24dfe7){if(_0x24dfe7){return _0x24cf80['sendStatus'](_0x509b7e);}return _0x24cf80[_0x33c5('0x2d')](_0x509b7e)[_0x33c5('0x2e')]();};}function respondWithResult(_0x3f20e1,_0x4ec1fc){_0x4ec1fc=_0x4ec1fc||0xc8;return function(_0x55d8c9){if(_0x55d8c9){return _0x3f20e1['status'](_0x4ec1fc)[_0x33c5('0x2f')](_0x55d8c9);}};}function respondWithFilteredResult(_0x54cdaf,_0x292ef4){return function(_0x4b0e6e){if(_0x4b0e6e){var _0x18cf87=_0x4b0e6e['count'],_0x30e0d1=_0x292ef4[_0x33c5('0x30')],_0x4b0185=_0x292ef4[_0x33c5('0x30')]+_0x292ef4[_0x33c5('0x31')],_0x14b0c2;if(_0x4b0185>=_0x18cf87){_0x4b0185=_0x18cf87;_0x14b0c2=0xc8;}else{_0x14b0c2=0xce;}_0x54cdaf[_0x33c5('0x2d')](_0x14b0c2);return _0x54cdaf[_0x33c5('0x32')]('Content-Range',_0x30e0d1+'-'+_0x4b0185+'/'+_0x18cf87)[_0x33c5('0x2f')](_0x4b0e6e);}return null;};}function patchUpdates(_0x375a2f){return function(_0x114fcc){try{jsonpatch[_0x33c5('0x33')](_0x114fcc,_0x375a2f,!![]);}catch(_0x478283){return BPromise[_0x33c5('0x34')](_0x478283);}return _0x114fcc[_0x33c5('0x35')]();};}function saveUpdates(_0xaed48a,_0x4e635d){return function(_0x474fe5){if(_0x474fe5){return _0x474fe5[_0x33c5('0x36')](_0xaed48a)['then'](function(_0x58e671){return _0x58e671;});}return null;};}function removeEntity(_0x3679b5,_0x3f97a9){return function(_0xd0315b){if(_0xd0315b){return _0xd0315b[_0x33c5('0x37')]()['then'](function(){_0x3679b5[_0x33c5('0x2d')](0xcc)[_0x33c5('0x2e')]();});}};}function handleEntityNotFound(_0xe39c4a,_0xc96dfe){return function(_0x488840){if(!_0x488840){_0xe39c4a[_0x33c5('0x38')](0x194);}return _0x488840;};}function handleError(_0x559434,_0x1cfdb3){_0x1cfdb3=_0x1cfdb3||0x1f4;return function(_0x59ea50){logger[_0x33c5('0x27')](_0x59ea50['stack']);if(_0x59ea50['name']){delete _0x59ea50[_0x33c5('0x39')];}_0x559434[_0x33c5('0x2d')](_0x1cfdb3)[_0x33c5('0x3a')](_0x59ea50);};}exports[_0x33c5('0x3b')]=function(_0x3f8932,_0xfc9dd2){var _0x427e99={},_0x258a59={},_0x3cb592={'count':0x0,'rows':[]};var _0x22e852=db[_0x33c5('0x3c')][_0x33c5('0x3d')];_0x258a59[_0x33c5('0x3e')]=_[_0x33c5('0x3f')](_0x22e852);_0x258a59[_0x33c5('0x40')]=_[_0x33c5('0x3f')](_0x3f8932[_0x33c5('0x40')]);_0x258a59[_0x33c5('0x41')]=_[_0x33c5('0x42')](_0x258a59[_0x33c5('0x3e')],_0x258a59[_0x33c5('0x40')]);_0x427e99[_0x33c5('0x43')]=_['intersection'](_0x258a59['model'],qs[_0x33c5('0x44')](_0x3f8932[_0x33c5('0x40')][_0x33c5('0x44')]));_0x427e99[_0x33c5('0x43')]=_0x427e99['attributes']['length']?_0x427e99['attributes']:_0x258a59[_0x33c5('0x3e')];if(!_0x3f8932['query'][_0x33c5('0x45')](_0x33c5('0x46'))){_0x427e99[_0x33c5('0x31')]=qs[_0x33c5('0x31')](_0x3f8932[_0x33c5('0x40')]['limit']);_0x427e99[_0x33c5('0x30')]=qs[_0x33c5('0x30')](_0x3f8932['query'][_0x33c5('0x30')]);}_0x427e99[_0x33c5('0x47')]=qs[_0x33c5('0x48')](_0x3f8932[_0x33c5('0x40')][_0x33c5('0x48')]);_0x427e99[_0x33c5('0x49')]=qs[_0x33c5('0x41')](_[_0x33c5('0x4a')](_0x3f8932['query'],_0x258a59[_0x33c5('0x41')]));if(_0x3f8932[_0x33c5('0x40')][_0x33c5('0x4b')]){_0x427e99[_0x33c5('0x49')]=_[_0x33c5('0x4c')](_0x427e99[_0x33c5('0x49')],{'$or':_[_0x33c5('0x4d')](_0x22e852,function(_0x4a1ac4){if(_0x4a1ac4[_0x33c5('0x4e')][_0x33c5('0x4f')]!==_0x33c5('0x50')){var _0x59ee42={};_0x59ee42[_0x4a1ac4[_0x33c5('0x51')]]={'$like':'%'+_0x3f8932[_0x33c5('0x40')][_0x33c5('0x4b')]+'%'};return _0x59ee42;}})});}_0x427e99=_[_0x33c5('0x4c')]({},_0x427e99,_0x3f8932[_0x33c5('0x52')]);var _0x15a087={'where':_0x427e99[_0x33c5('0x49')]};return db[_0x33c5('0x3c')][_0x33c5('0x53')](_0x15a087)[_0x33c5('0x21')](function(_0x521c88){_0x3cb592[_0x33c5('0x53')]=_0x521c88;if(_0x3f8932[_0x33c5('0x40')][_0x33c5('0x54')]){_0x427e99[_0x33c5('0x55')]=[{'all':!![]}];}return db[_0x33c5('0x3c')][_0x33c5('0x56')](_0x427e99);})[_0x33c5('0x21')](function(_0x149b47){_0x3cb592['rows']=_0x149b47;return _0x3cb592;})[_0x33c5('0x21')](respondWithFilteredResult(_0xfc9dd2,_0x427e99))['catch'](handleError(_0xfc9dd2,null));};exports[_0x33c5('0x57')]=function(_0x1eae42,_0x30540f){var _0xa6a358={'raw':!![],'where':{'id':_0x1eae42[_0x33c5('0x58')]['id']}},_0x484f2e={};_0x484f2e[_0x33c5('0x3e')]=_[_0x33c5('0x3f')](db[_0x33c5('0x3c')][_0x33c5('0x3d')]);_0x484f2e[_0x33c5('0x40')]=_[_0x33c5('0x3f')](_0x1eae42[_0x33c5('0x40')]);_0x484f2e[_0x33c5('0x41')]=_[_0x33c5('0x42')](_0x484f2e['model'],_0x484f2e[_0x33c5('0x40')]);_0xa6a358[_0x33c5('0x43')]=_[_0x33c5('0x42')](_0x484f2e[_0x33c5('0x3e')],qs[_0x33c5('0x44')](_0x1eae42[_0x33c5('0x40')][_0x33c5('0x44')]));_0xa6a358[_0x33c5('0x43')]=_0xa6a358[_0x33c5('0x43')][_0x33c5('0x59')]?_0xa6a358[_0x33c5('0x43')]:_0x484f2e[_0x33c5('0x3e')];if(_0x1eae42[_0x33c5('0x40')][_0x33c5('0x54')]){_0xa6a358[_0x33c5('0x55')]=[{'all':!![]}];}_0xa6a358=_[_0x33c5('0x4c')]({},_0xa6a358,_0x1eae42[_0x33c5('0x52')]);return db[_0x33c5('0x3c')]['find'](_0xa6a358)[_0x33c5('0x21')](handleEntityNotFound(_0x30540f,null))['then'](respondWithResult(_0x30540f,null))[_0x33c5('0x2c')](handleError(_0x30540f,null));};exports[_0x33c5('0x36')]=function(_0x137c69,_0x69be2c){if(_0x137c69['body']['id']){delete _0x137c69[_0x33c5('0x5a')]['id'];}return db[_0x33c5('0x3c')][_0x33c5('0x5b')]({'where':{'id':_0x137c69[_0x33c5('0x58')]['id']}})['then'](handleEntityNotFound(_0x69be2c,null))['then'](saveUpdates(_0x137c69[_0x33c5('0x5a')],null))[_0x33c5('0x21')](respondWithResult(_0x69be2c,null))[_0x33c5('0x2c')](handleError(_0x69be2c,null));};exports[_0x33c5('0x37')]=function(_0xd0cbd7,_0x1d6cfe){return db[_0x33c5('0x3c')][_0x33c5('0x5b')]({'where':{'id':_0xd0cbd7['params']['id']}})['then'](handleEntityNotFound(_0x1d6cfe,null))[_0x33c5('0x21')](removeEntity(_0x1d6cfe,null))[_0x33c5('0x2c')](handleError(_0x1d6cfe,null));};exports[_0x33c5('0x5c')]=function(_0x3600dd,_0x175393){return db[_0x33c5('0x3c')][_0x33c5('0x5c')]()[_0x33c5('0x21')](respondWithResult(_0x175393,null))['catch'](handleError(_0x175393,null));};exports[_0x33c5('0x5d')]=function(_0x29e1ca,_0x58a89b){return db[_0x33c5('0x3c')][_0x33c5('0x5d')](_0x29e1ca['body'])[_0x33c5('0x21')](function(_0x34aaa7){if(_0x34aaa7){if(_0x34aaa7[_0x33c5('0x5e')]===_0x33c5('0x5f')&&!_0x34aaa7[_0x33c5('0x60')]){return db[_0x33c5('0x61')][_0x33c5('0x62')]({'where':{'id':_0x34aaa7[_0x33c5('0x63')]},'include':[{'model':db[_0x33c5('0x64')],'as':_0x33c5('0x65'),'raw':!![]}]})[_0x33c5('0x21')](function(_0x4d52ba){if(_0x4d52ba&&_0x4d52ba[_0x33c5('0x65')]){var _0x40cd82={'tls':{'rejectUnauthorized':![]}};if(_[_0x33c5('0x66')](_0x4d52ba[_0x33c5('0x65')][_0x33c5('0x67')])){_0x40cd82[_0x33c5('0x68')]=_0x4d52ba[_0x33c5('0x65')][_0x33c5('0x68')];_0x40cd82[_0x33c5('0x69')]=_0x4d52ba[_0x33c5('0x65')][_0x33c5('0x69')];_0x40cd82['secure']=_0x4d52ba['Smtp'][_0x33c5('0x6a')];if(_0x4d52ba[_0x33c5('0x65')][_0x33c5('0x6b')]){_0x40cd82[_0x33c5('0x6c')]={'user':_0x4d52ba['Smtp'][_0x33c5('0x6d')],'pass':_0x4d52ba[_0x33c5('0x65')][_0x33c5('0x6e')]};}}else{_0x40cd82['service']=_0x4d52ba['Smtp']['service'];_0x40cd82[_0x33c5('0x6c')]={'user':_0x4d52ba[_0x33c5('0x65')][_0x33c5('0x6d')],'pass':_0x4d52ba[_0x33c5('0x65')]['pass']};_0x40cd82['secure']=_0x4d52ba[_0x33c5('0x65')]['secure'];}if(_0x29e1ca['body'][_0x33c5('0x6f')]&&_0x29e1ca[_0x33c5('0x5a')][_0x33c5('0x6f')]['length']){for(var _0x4aa623=0x0;_0x4aa623<_0x29e1ca['body'][_0x33c5('0x6f')][_0x33c5('0x59')];_0x4aa623+=0x1){_0x29e1ca[_0x33c5('0x5a')][_0x33c5('0x6f')][_0x4aa623]={'filename':_0x29e1ca[_0x33c5('0x5a')][_0x33c5('0x6f')][_0x4aa623][_0x33c5('0x39')],'path':path['join'](config[_0x33c5('0x70')],_0x33c5('0x71'),_0x29e1ca['body'][_0x33c5('0x6f')][_0x4aa623][_0x33c5('0x72')])};}}return{'account':_0x40cd82,'message':_0x29e1ca['body']};}})['then'](function(_0x2d698a){if(_0x2d698a){return respondWithRpcPromise('SendMail',_0x33c5('0x73'),_0x2d698a,client9003)[_0x33c5('0x21')](function(_0x4a2d50){return _0x34aaa7[_0x33c5('0x36')]({'read':!![],'messageId':_0x4a2d50['messageId'],'sentAt':moment()[_0x33c5('0x74')]('YYYY-MM-DD\x20HH:mm:ss')});})['catch'](function(_0x552100){logger[_0x33c5('0x27')]('%s',JSON[_0x33c5('0x26')](_0x552100));return _0x34aaa7;});}return _0x34aaa7;});}return _0x34aaa7;}})[_0x33c5('0x21')](respondWithResult(_0x58a89b,0xc9))[_0x33c5('0x2c')](handleError(_0x58a89b,null));};var interaction_log=require(_0x33c5('0x13'))(_0x33c5('0x75'));exports[_0x33c5('0x76')]=function(_0x368b7d,_0x391be3,_0x3f015d){var _0x11cd30={'channel':_0x33c5('0x77')};if(_0x368b7d['body']['id']){delete _0x368b7d[_0x33c5('0x5a')]['id'];}_0x368b7d[_0x33c5('0x5a')][_0x33c5('0x78')]=!![];_0x368b7d[_0x33c5('0x5a')][_0x33c5('0x79')]=moment()[_0x33c5('0x74')](_0x33c5('0x7a'));_0x368b7d['body'][_0x33c5('0x7b')]=_0x368b7d[_0x33c5('0x5a')][_0x33c5('0x7b')]||_0x368b7d[_0x33c5('0x6d')]['id'];return db[_0x33c5('0x3c')]['find']({'where':{'id':_0x368b7d[_0x33c5('0x58')]['id'],'UserId':null},'include':[{'model':db['CmContact'],'as':_0x33c5('0x7c')}]})[_0x33c5('0x21')](handleEntityNotFound(_0x391be3,null))[_0x33c5('0x21')](saveUpdates(_0x368b7d[_0x33c5('0x5a')],null))[_0x33c5('0x21')](function(_0x17328b){if(_0x17328b){_0x11cd30[_0x33c5('0x29')]=_0x17328b[_0x33c5('0x7d')]({'plain':!![]});return db[_0x33c5('0x7e')][_0x33c5('0x5b')]({'where':{'id':_0x17328b[_0x33c5('0x7f')]}});}return null;})[_0x33c5('0x21')](handleEntityNotFound(_0x391be3,null))[_0x33c5('0x21')](function(_0x537372){if(_0x537372){return _0x537372[_0x33c5('0x36')]({'UserId':_0x368b7d[_0x33c5('0x5a')][_0x33c5('0x7b')],'read1stAt':_[_0x33c5('0x66')](_0x537372[_0x33c5('0x80')])?moment()[_0x33c5('0x74')](_0x33c5('0x7a')):undefined});}return null;})[_0x33c5('0x21')](function(_0xa9ca1f){if(_0xa9ca1f){_0x11cd30[_0x33c5('0x81')]=_0xa9ca1f[_0x33c5('0x7d')]({'plain':!![]});interaction_log[_0x33c5('0x2a')](_0x33c5('0x82'),_0x368b7d['user']['id'],_0x368b7d['user'][_0x33c5('0x39')],_0x368b7d[_0x33c5('0x6d')][_0x33c5('0x83')],_0x11cd30['interaction']['id'],_0x368b7d[_0x33c5('0x5a')]?JSON[_0x33c5('0x26')](_0x368b7d[_0x33c5('0x5a')]):'null');return respondWithRpcPromise(_0x33c5('0x84'),_0x33c5('0x85'),_0x11cd30);}return null;})['then'](function(_0x1b4d8e){if(_0x1b4d8e){if(_0x368b7d[_0x33c5('0x5a')]['manual']){_0x11cd30[_0x33c5('0x29')][_0x33c5('0x86')]=util[_0x33c5('0x74')](_0x33c5('0x87'),_0x368b7d[_0x33c5('0x6d')][_0x33c5('0x39')]);_0x11cd30[_0x33c5('0x29')][_0x33c5('0x88')]=_0x11cd30[_0x33c5('0x88')];_0x11cd30[_0x33c5('0x29')][_0x33c5('0x89')]=_0x33c5('0x76');return respondWithRpcPromise(_0x33c5('0x8a'),_0x33c5('0x8a'),{'event':_0x33c5('0x8b'),'message':_0x11cd30[_0x33c5('0x29')]},client9002)['then'](function(){return _0x11cd30;});}return _0x11cd30;}return null;})[_0x33c5('0x21')](respondWithResult(_0x391be3,null))[_0x33c5('0x2c')](handleError(_0x391be3,null));};var interaction_log=require(_0x33c5('0x13'))(_0x33c5('0x75'));exports[_0x33c5('0x34')]=function(_0x59fb29,_0x1c14ce,_0x15f394){var _0x413516={'agent':{},'channel':_0x33c5('0x77')};if(_0x59fb29[_0x33c5('0x5a')]['id']){delete _0x59fb29[_0x33c5('0x5a')]['id'];}_0x59fb29[_0x33c5('0x5a')][_0x33c5('0x7b')]=_0x59fb29[_0x33c5('0x5a')][_0x33c5('0x7b')]||_0x59fb29[_0x33c5('0x6d')]['id'];_0x413516['agent']['id']=_0x59fb29[_0x33c5('0x5a')][_0x33c5('0x7b')];return db[_0x33c5('0x3c')]['find']({'where':{'id':_0x59fb29[_0x33c5('0x58')]['id'],'UserId':null}})[_0x33c5('0x21')](handleEntityNotFound(_0x1c14ce,null))[_0x33c5('0x21')](function(_0x142d27){if(_0x142d27){_0x413516[_0x33c5('0x29')]=_0x142d27[_0x33c5('0x7d')]({'plain':!![]});return db['MailInteraction'][_0x33c5('0x5b')]({'where':{'id':_0x142d27[_0x33c5('0x7f')]}});}return null;})['then'](handleEntityNotFound(_0x1c14ce,null))[_0x33c5('0x21')](function(_0x320d0f){if(_0x320d0f){_0x413516[_0x33c5('0x81')]=_0x320d0f[_0x33c5('0x7d')]({'plain':!![]});interaction_log[_0x33c5('0x2a')](_0x33c5('0x8c'),_0x59fb29[_0x33c5('0x6d')]['id'],_0x59fb29[_0x33c5('0x6d')][_0x33c5('0x39')],_0x59fb29[_0x33c5('0x6d')][_0x33c5('0x83')],_0x413516[_0x33c5('0x81')]['id'],_0x59fb29[_0x33c5('0x5a')]?JSON['stringify'](_0x59fb29[_0x33c5('0x5a')]):_0x33c5('0x8d'));return respondWithRpcPromise(_0x33c5('0x8e'),'rejectMessage',_0x413516);}return null;})[_0x33c5('0x21')](function(_0x388219){if(_0x388219){_0x388219['message']['interface']=util[_0x33c5('0x74')](_0x33c5('0x87'),_0x59fb29[_0x33c5('0x6d')][_0x33c5('0x39')]);_0x388219['message'][_0x33c5('0x88')]=_0x413516[_0x33c5('0x88')];_0x388219['message'][_0x33c5('0x89')]='reject';respondWithRpcPromise(_0x33c5('0x8a'),_0x33c5('0x8a'),{'event':_0x33c5('0x8f'),'message':_0x388219[_0x33c5('0x29')]},client9002);return _0x413516;}return null;})['then'](respondWithResult(_0x1c14ce,null))[_0x33c5('0x2c')](handleError(_0x1c14ce,null));};exports[_0x33c5('0x90')]=function(_0x28c382,_0x85e965){var _0x54c22f=moment()[_0x33c5('0x91')]()['toString']();var _0x52f719=path[_0x33c5('0x92')](config[_0x33c5('0x70')],_0x33c5('0x93'),_0x33c5('0x94'),_0x33c5('0x95'));var _0x1c6370=path[_0x33c5('0x92')](config[_0x33c5('0x70')],_0x33c5('0x93'),_0x33c5('0x94'),_0x33c5('0x6f'));var _0x5127e6=util[_0x33c5('0x74')](_0x33c5('0x96'),_0x54c22f);return db[_0x33c5('0x3c')][_0x33c5('0x5b')]({'where':{'id':_0x28c382[_0x33c5('0x58')]['id']},'attributes':['id',_0x33c5('0x5a'),_0x33c5('0x97'),'to','cc',_0x33c5('0x98'),_0x33c5('0x99'),_0x33c5('0x9a')],'include':_0x28c382[_0x33c5('0x40')]['attachments']?[{'model':db[_0x33c5('0x9b')],'as':_0x33c5('0x9c')}]:undefined})['then'](handleEntityNotFound(_0x85e965,null))[_0x33c5('0x21')](function(_0x512e14){if(_0x512e14){var _0x264099=_0x512e14;var _0x4427ed={'from':_0x264099[_0x33c5('0x97')],'to':_0x264099['to'],'subject':_0x264099[_0x33c5('0x99')],'html':_0x264099['body'],'headers':{'Date':moment(_0x264099[_0x33c5('0x9a')])[_0x33c5('0x74')](_0x33c5('0x9d'))},'attachments':[]};if(_0x512e14['cc']){_0x4427ed[_0x33c5('0x9e')]['Cc']=_0x512e14['cc'];}if(_0x512e14[_0x33c5('0x98')]){_0x4427ed['headers']['Bcc']=_0x512e14[_0x33c5('0x98')];}return new BPromise(function(_0x5ec871,_0x22bb2e){if(_0x512e14['Attachments']){for(var _0x255bfe=0x0;_0x255bfe<_0x512e14[_0x33c5('0x9c')][_0x33c5('0x59')];_0x255bfe++){var _0x19c4e1=_0x512e14[_0x33c5('0x9c')][_0x255bfe];var _0x3cc377=path[_0x33c5('0x92')](_0x1c6370,_0x19c4e1[_0x33c5('0x72')]);if(fs[_0x33c5('0x9f')](_0x3cc377)){_0x4427ed[_0x33c5('0x6f')]['push']({'name':_0x19c4e1[_0x33c5('0x39')],'contentType':_0x19c4e1[_0x33c5('0x4e')],'data':fs[_0x33c5('0xa0')](_0x3cc377)});}}}emlformat[_0x33c5('0xa1')](_0x4427ed,function(_0x515275,_0x2f5720){if(_0x515275)return _0x22bb2e(_0x515275);fs[_0x33c5('0xa2')](path[_0x33c5('0x92')](_0x52f719,_0x5127e6),_0x2f5720);return _0x5ec871(_0x2f5720);});});}})[_0x33c5('0x21')](function(_0x42231f){if(_0x42231f){return _0x85e965['download'](path[_0x33c5('0x92')](_0x52f719,_0x5127e6),_0x5127e6,function(_0x41fcc2){if(_0x41fcc2){console[_0x33c5('0xa3')](_0x33c5('0xa4'),_0x41fcc2);}else{fs['unlinkSync'](path[_0x33c5('0x92')](_0x52f719,_0x5127e6));}});}})[_0x33c5('0x2c')](handleError(_0x85e965,null));};
\ No newline at end of file
+var _0x9881=['[MAILMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','RejectMessage','rejectMessage','event','download','unix','toString','server','files','message-%s.eml','from','bcc','subject','createdAt','Attachment','Attachments','ddd,\x20DD\x20MMM\x20YYYY\x20HH:mm:ss\x20ZZ','headers','Bcc','basename','existsSync','writeFileSync','err','unlinkSync','html-pdf','eml-format','rimraf','fast-json-patch','moment','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','redis','localhost','socket.io-emitter','client','http','request','then','info','MailMessage,\x20%s,\x20%s','request\x20sent','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','status','json','count','offset','limit','set','Content-Range','apply','reject','destroy','end','sendStatus','stack','name','send','index','MailMessage','model','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','type','key','VIRTUAL','field','merge','includeAll','include','findAll','rows','params','keys','rawAttributes','options','find','update','body','describe','create','out','secret','MailAccount','findOne','MailAccountId','Smtp','isNil','service','host','port','secure','authentication','auth','pass','attachments','join','root','SendMail','messageId','format','YYYY-MM-DD\x20HH:mm:ss','mail-interactions','mail','read','readAt','UserId','user','CmContact','Contact','get','MailInteraction','MailInteractionId','read1stAt','interaction','null','AcceptMessage','acceptMessage','manual','SIP/%s','channel','accept','EventManager','agent'];(function(_0x2f1762,_0xab43df){var _0x8ab21=function(_0xf6c1f5){while(--_0xf6c1f5){_0x2f1762['push'](_0x2f1762['shift']());}};_0x8ab21(++_0xab43df);}(_0x9881,0xb4));var _0x1988=function(_0x36b890,_0x23faf2){_0x36b890=_0x36b890-0x0;var _0x1089a1=_0x9881[_0x36b890];return _0x1089a1;};'use strict';var pdf=require(_0x1988('0x0'));var emlformat=require(_0x1988('0x1'));var rimraf=require(_0x1988('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x1988('0x3'));var rp=require('request-promise');var moment=require(_0x1988('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x1988('0x5'));var util=require('util');var path=require(_0x1988('0x6'));var sox=require(_0x1988('0x7'));var csv=require(_0x1988('0x8'));var ejs=require(_0x1988('0x9'));var fs=require('fs');var _=require(_0x1988('0xa'));var squel=require(_0x1988('0xb'));var crypto=require(_0x1988('0xc'));var jsforce=require(_0x1988('0xd'));var deskjs=require(_0x1988('0xe'));var toCsv=require('to-csv');var querystring=require(_0x1988('0xf'));var Papa=require('papaparse');var authService=require(_0x1988('0x10'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x1988('0x11'));var qs=require(_0x1988('0x12'));var logger=require(_0x1988('0x13'))(_0x1988('0x14'));var utils=require(_0x1988('0x15'));var config=require('../../config/environment');var db=require(_0x1988('0x16'))['db'];config[_0x1988('0x17')]=_['defaults'](config['redis'],{'host':_0x1988('0x18'),'port':0x18eb});var socket=require(_0x1988('0x19'))(new Redis(config['redis']));require('./mailMessage.socket')['register'](socket);var jayson=require('jayson/promise');var client=jayson[_0x1988('0x1a')][_0x1988('0x1b')]({'port':0x232c});var client9003=jayson[_0x1988('0x1a')][_0x1988('0x1b')]({'port':0x232b});var client9002=jayson[_0x1988('0x1a')][_0x1988('0x1b')]({'port':0x232a});function respondWithRpcPromise(_0x2a1d35,_0x2518c5,_0x4d2211,_0x199812){return new BPromise(function(_0x19a27e,_0xf0ba27){var _0x4a50c8=_0x199812||client;return _0x4a50c8[_0x1988('0x1c')](_0x2a1d35,_0x4d2211)[_0x1988('0x1d')](function(_0x4dc31e){logger[_0x1988('0x1e')](_0x1988('0x1f'),_0x2518c5,_0x1988('0x20'));logger['debug'](_0x1988('0x21'),_0x2518c5,_0x1988('0x20'),JSON[_0x1988('0x22')](_0x4dc31e));if(_0x4dc31e[_0x1988('0x23')]){if(_0x4dc31e['error'][_0x1988('0x24')]===0x1f4){logger['error'](_0x1988('0x1f'),_0x2518c5,_0x4dc31e[_0x1988('0x23')][_0x1988('0x25')]);return _0xf0ba27(_0x4dc31e[_0x1988('0x23')][_0x1988('0x25')]);}logger[_0x1988('0x23')]('MailMessage,\x20%s,\x20%s',_0x2518c5,_0x4dc31e[_0x1988('0x23')][_0x1988('0x25')]);return _0x19a27e(_0x4dc31e['error'][_0x1988('0x25')]);}else{logger['info'](_0x1988('0x1f'),_0x2518c5,'request\x20sent');_0x19a27e(_0x4dc31e[_0x1988('0x26')][_0x1988('0x25')]);}})[_0x1988('0x27')](function(_0x14499c){logger[_0x1988('0x23')]('MailMessage,\x20%s,\x20%s',_0x2518c5,_0x14499c);_0xf0ba27(_0x14499c);});});}function respondWithStatusCode(_0x259338,_0x4e53db){_0x4e53db=_0x4e53db||0xcc;return function(_0x37832f){if(_0x37832f){return _0x259338['sendStatus'](_0x4e53db);}return _0x259338[_0x1988('0x28')](_0x4e53db)['end']();};}function respondWithResult(_0x29167e,_0x2e6664){_0x2e6664=_0x2e6664||0xc8;return function(_0x33b8b5){if(_0x33b8b5){return _0x29167e[_0x1988('0x28')](_0x2e6664)[_0x1988('0x29')](_0x33b8b5);}};}function respondWithFilteredResult(_0x117dd8,_0x1f5c33){return function(_0x1b0392){if(_0x1b0392){var _0x99a01f=_0x1b0392[_0x1988('0x2a')],_0x18462b=_0x1f5c33[_0x1988('0x2b')],_0xafd720=_0x1f5c33[_0x1988('0x2b')]+_0x1f5c33[_0x1988('0x2c')],_0x3e3d2e;if(_0xafd720>=_0x99a01f){_0xafd720=_0x99a01f;_0x3e3d2e=0xc8;}else{_0x3e3d2e=0xce;}_0x117dd8[_0x1988('0x28')](_0x3e3d2e);return _0x117dd8[_0x1988('0x2d')](_0x1988('0x2e'),_0x18462b+'-'+_0xafd720+'/'+_0x99a01f)[_0x1988('0x29')](_0x1b0392);}return null;};}function patchUpdates(_0x194dc1){return function(_0xb77791){try{jsonpatch[_0x1988('0x2f')](_0xb77791,_0x194dc1,!![]);}catch(_0x4f127f){return BPromise[_0x1988('0x30')](_0x4f127f);}return _0xb77791['save']();};}function saveUpdates(_0x430a7c,_0x5b992f){return function(_0x5c67d6){if(_0x5c67d6){return _0x5c67d6['update'](_0x430a7c)[_0x1988('0x1d')](function(_0x1a6385){return _0x1a6385;});}return null;};}function removeEntity(_0x4026d4,_0x5c5cdb){return function(_0x1000b2){if(_0x1000b2){return _0x1000b2[_0x1988('0x31')]()[_0x1988('0x1d')](function(){_0x4026d4[_0x1988('0x28')](0xcc)[_0x1988('0x32')]();});}};}function handleEntityNotFound(_0x34dc8f,_0x3ced73){return function(_0x5083f2){if(!_0x5083f2){_0x34dc8f[_0x1988('0x33')](0x194);}return _0x5083f2;};}function handleError(_0x14f8ad,_0x4756c9){_0x4756c9=_0x4756c9||0x1f4;return function(_0x3c293d){logger[_0x1988('0x23')](_0x3c293d[_0x1988('0x34')]);if(_0x3c293d[_0x1988('0x35')]){delete _0x3c293d['name'];}_0x14f8ad[_0x1988('0x28')](_0x4756c9)[_0x1988('0x36')](_0x3c293d);};}exports[_0x1988('0x37')]=function(_0x4c975c,_0x47c6fc){var _0x4dfd3f={},_0x1a36bc={},_0x13831f={'count':0x0,'rows':[]};var _0x52e3db=db[_0x1988('0x38')]['rawAttributes'];_0x1a36bc[_0x1988('0x39')]=_['keys'](_0x52e3db);_0x1a36bc[_0x1988('0x3a')]=_['keys'](_0x4c975c[_0x1988('0x3a')]);_0x1a36bc['filters']=_[_0x1988('0x3b')](_0x1a36bc[_0x1988('0x39')],_0x1a36bc[_0x1988('0x3a')]);_0x4dfd3f[_0x1988('0x3c')]=_['intersection'](_0x1a36bc[_0x1988('0x39')],qs['fields'](_0x4c975c[_0x1988('0x3a')][_0x1988('0x3d')]));_0x4dfd3f['attributes']=_0x4dfd3f[_0x1988('0x3c')][_0x1988('0x3e')]?_0x4dfd3f['attributes']:_0x1a36bc[_0x1988('0x39')];if(!_0x4c975c[_0x1988('0x3a')][_0x1988('0x3f')](_0x1988('0x40'))){_0x4dfd3f[_0x1988('0x2c')]=qs['limit'](_0x4c975c[_0x1988('0x3a')][_0x1988('0x2c')]);_0x4dfd3f['offset']=qs[_0x1988('0x2b')](_0x4c975c[_0x1988('0x3a')][_0x1988('0x2b')]);}_0x4dfd3f['order']=qs['sort'](_0x4c975c['query'][_0x1988('0x41')]);_0x4dfd3f[_0x1988('0x42')]=qs['filters'](_[_0x1988('0x43')](_0x4c975c[_0x1988('0x3a')],_0x1a36bc['filters']));if(_0x4c975c['query'][_0x1988('0x44')]){_0x4dfd3f[_0x1988('0x42')]=_['merge'](_0x4dfd3f[_0x1988('0x42')],{'$or':_['map'](_0x52e3db,function(_0x5a0906){if(_0x5a0906[_0x1988('0x45')][_0x1988('0x46')]!==_0x1988('0x47')){var _0x1dad8d={};_0x1dad8d[_0x5a0906[_0x1988('0x48')]]={'$like':'%'+_0x4c975c['query']['filter']+'%'};return _0x1dad8d;}})});}_0x4dfd3f=_[_0x1988('0x49')]({},_0x4dfd3f,_0x4c975c['options']);var _0x1be954={'where':_0x4dfd3f[_0x1988('0x42')]};return db[_0x1988('0x38')][_0x1988('0x2a')](_0x1be954)[_0x1988('0x1d')](function(_0x40d3c2){_0x13831f[_0x1988('0x2a')]=_0x40d3c2;if(_0x4c975c['query'][_0x1988('0x4a')]){_0x4dfd3f[_0x1988('0x4b')]=[{'all':!![]}];}return db['MailMessage'][_0x1988('0x4c')](_0x4dfd3f);})['then'](function(_0x239cd3){_0x13831f[_0x1988('0x4d')]=_0x239cd3;return _0x13831f;})[_0x1988('0x1d')](respondWithFilteredResult(_0x47c6fc,_0x4dfd3f))['catch'](handleError(_0x47c6fc,null));};exports['show']=function(_0x254123,_0x2f1024){var _0x583e26={'raw':!![],'where':{'id':_0x254123[_0x1988('0x4e')]['id']}},_0x1a0c82={};_0x1a0c82[_0x1988('0x39')]=_[_0x1988('0x4f')](db[_0x1988('0x38')][_0x1988('0x50')]);_0x1a0c82[_0x1988('0x3a')]=_[_0x1988('0x4f')](_0x254123[_0x1988('0x3a')]);_0x1a0c82['filters']=_[_0x1988('0x3b')](_0x1a0c82[_0x1988('0x39')],_0x1a0c82[_0x1988('0x3a')]);_0x583e26[_0x1988('0x3c')]=_['intersection'](_0x1a0c82[_0x1988('0x39')],qs['fields'](_0x254123[_0x1988('0x3a')][_0x1988('0x3d')]));_0x583e26['attributes']=_0x583e26[_0x1988('0x3c')][_0x1988('0x3e')]?_0x583e26[_0x1988('0x3c')]:_0x1a0c82[_0x1988('0x39')];if(_0x254123[_0x1988('0x3a')]['includeAll']){_0x583e26[_0x1988('0x4b')]=[{'all':!![]}];}_0x583e26=_[_0x1988('0x49')]({},_0x583e26,_0x254123[_0x1988('0x51')]);return db['MailMessage'][_0x1988('0x52')](_0x583e26)[_0x1988('0x1d')](handleEntityNotFound(_0x2f1024,null))[_0x1988('0x1d')](respondWithResult(_0x2f1024,null))[_0x1988('0x27')](handleError(_0x2f1024,null));};exports[_0x1988('0x53')]=function(_0xac78b1,_0x2d2ba9){if(_0xac78b1[_0x1988('0x54')]['id']){delete _0xac78b1[_0x1988('0x54')]['id'];}return db[_0x1988('0x38')]['find']({'where':{'id':_0xac78b1[_0x1988('0x4e')]['id']}})[_0x1988('0x1d')](handleEntityNotFound(_0x2d2ba9,null))[_0x1988('0x1d')](saveUpdates(_0xac78b1['body'],null))[_0x1988('0x1d')](respondWithResult(_0x2d2ba9,null))[_0x1988('0x27')](handleError(_0x2d2ba9,null));};exports[_0x1988('0x31')]=function(_0x871f80,_0x37f1eb){return db[_0x1988('0x38')]['find']({'where':{'id':_0x871f80[_0x1988('0x4e')]['id']}})[_0x1988('0x1d')](handleEntityNotFound(_0x37f1eb,null))['then'](removeEntity(_0x37f1eb,null))['catch'](handleError(_0x37f1eb,null));};exports['describe']=function(_0x2d2e93,_0xba1e94){return db[_0x1988('0x38')][_0x1988('0x55')]()[_0x1988('0x1d')](respondWithResult(_0xba1e94,null))[_0x1988('0x27')](handleError(_0xba1e94,null));};exports[_0x1988('0x56')]=function(_0xa49502,_0x2164dd){return db['MailMessage'][_0x1988('0x56')](_0xa49502['body'])[_0x1988('0x1d')](function(_0xb6356){if(_0xb6356){if(_0xb6356['direction']===_0x1988('0x57')&&!_0xb6356[_0x1988('0x58')]){return db[_0x1988('0x59')][_0x1988('0x5a')]({'where':{'id':_0xb6356[_0x1988('0x5b')]},'include':[{'model':db['MailServerOut'],'as':_0x1988('0x5c'),'raw':!![]}]})[_0x1988('0x1d')](function(_0x5e275b){if(_0x5e275b&&_0x5e275b[_0x1988('0x5c')]){var _0x57000f={'tls':{'rejectUnauthorized':![]}};if(_[_0x1988('0x5d')](_0x5e275b[_0x1988('0x5c')][_0x1988('0x5e')])){_0x57000f[_0x1988('0x5f')]=_0x5e275b['Smtp'][_0x1988('0x5f')];_0x57000f[_0x1988('0x60')]=_0x5e275b['Smtp'][_0x1988('0x60')];_0x57000f[_0x1988('0x61')]=_0x5e275b[_0x1988('0x5c')]['secure'];if(_0x5e275b['Smtp'][_0x1988('0x62')]){_0x57000f[_0x1988('0x63')]={'user':_0x5e275b['Smtp']['user'],'pass':_0x5e275b['Smtp'][_0x1988('0x64')]};}}else{_0x57000f['service']=_0x5e275b[_0x1988('0x5c')][_0x1988('0x5e')];_0x57000f[_0x1988('0x63')]={'user':_0x5e275b['Smtp']['user'],'pass':_0x5e275b[_0x1988('0x5c')][_0x1988('0x64')]};_0x57000f[_0x1988('0x61')]=_0x5e275b[_0x1988('0x5c')][_0x1988('0x61')];}if(_0xa49502[_0x1988('0x54')][_0x1988('0x65')]&&_0xa49502['body'][_0x1988('0x65')][_0x1988('0x3e')]){for(var _0xad9398=0x0;_0xad9398<_0xa49502[_0x1988('0x54')]['attachments']['length'];_0xad9398+=0x1){_0xa49502['body'][_0x1988('0x65')][_0xad9398]={'filename':_0xa49502['body']['attachments'][_0xad9398][_0x1988('0x35')],'path':path[_0x1988('0x66')](config[_0x1988('0x67')],'server/files/attachments',_0xa49502[_0x1988('0x54')]['attachments'][_0xad9398]['basename'])};}}return{'account':_0x57000f,'message':_0xa49502[_0x1988('0x54')]};}})['then'](function(_0x810a1e){if(_0x810a1e){return respondWithRpcPromise(_0x1988('0x68'),'sendMail',_0x810a1e,client9003)[_0x1988('0x1d')](function(_0x41c012){return _0xb6356[_0x1988('0x53')]({'read':!![],'messageId':_0x41c012[_0x1988('0x69')],'sentAt':moment()[_0x1988('0x6a')](_0x1988('0x6b'))});})[_0x1988('0x27')](function(_0x3ae194){logger[_0x1988('0x23')]('%s',JSON[_0x1988('0x22')](_0x3ae194));return _0xb6356;});}return _0xb6356;});}return _0xb6356;}})['then'](respondWithResult(_0x2164dd,0xc9))[_0x1988('0x27')](handleError(_0x2164dd,null));};var interaction_log=require(_0x1988('0x13'))(_0x1988('0x6c'));exports['accept']=function(_0x5467d5,_0x2b759e,_0x51e957){var _0x3d513b={'channel':_0x1988('0x6d')};if(_0x5467d5[_0x1988('0x54')]['id']){delete _0x5467d5[_0x1988('0x54')]['id'];}_0x5467d5[_0x1988('0x54')][_0x1988('0x6e')]=!![];_0x5467d5[_0x1988('0x54')][_0x1988('0x6f')]=moment()[_0x1988('0x6a')](_0x1988('0x6b'));_0x5467d5[_0x1988('0x54')][_0x1988('0x70')]=_0x5467d5[_0x1988('0x54')][_0x1988('0x70')]||_0x5467d5[_0x1988('0x71')]['id'];return db[_0x1988('0x38')]['find']({'where':{'id':_0x5467d5[_0x1988('0x4e')]['id'],'UserId':null},'include':[{'model':db[_0x1988('0x72')],'as':_0x1988('0x73')}]})[_0x1988('0x1d')](handleEntityNotFound(_0x2b759e,null))[_0x1988('0x1d')](saveUpdates(_0x5467d5[_0x1988('0x54')],null))['then'](function(_0x28104b){if(_0x28104b){_0x3d513b[_0x1988('0x25')]=_0x28104b[_0x1988('0x74')]({'plain':!![]});return db[_0x1988('0x75')][_0x1988('0x52')]({'where':{'id':_0x28104b[_0x1988('0x76')]}});}return null;})[_0x1988('0x1d')](handleEntityNotFound(_0x2b759e,null))[_0x1988('0x1d')](function(_0x2e10ea){if(_0x2e10ea){return _0x2e10ea[_0x1988('0x53')]({'UserId':_0x5467d5[_0x1988('0x54')][_0x1988('0x70')],'read1stAt':_[_0x1988('0x5d')](_0x2e10ea[_0x1988('0x77')])?moment()[_0x1988('0x6a')]('YYYY-MM-DD\x20HH:mm:ss'):undefined});}return null;})[_0x1988('0x1d')](function(_0x25053d){if(_0x25053d){_0x3d513b['interaction']=_0x25053d[_0x1988('0x74')]({'plain':!![]});interaction_log[_0x1988('0x1e')]('[MAILMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x5467d5[_0x1988('0x71')]['id'],_0x5467d5[_0x1988('0x71')][_0x1988('0x35')],_0x5467d5['user']['role'],_0x3d513b[_0x1988('0x78')]['id'],_0x5467d5[_0x1988('0x54')]?JSON[_0x1988('0x22')](_0x5467d5[_0x1988('0x54')]):_0x1988('0x79'));return respondWithRpcPromise(_0x1988('0x7a'),_0x1988('0x7b'),_0x3d513b);}return null;})['then'](function(_0x252c61){if(_0x252c61){if(_0x5467d5['body'][_0x1988('0x7c')]){_0x3d513b['message']['interface']=util['format'](_0x1988('0x7d'),_0x5467d5[_0x1988('0x71')]['name']);_0x3d513b['message'][_0x1988('0x7e')]=_0x3d513b[_0x1988('0x7e')];_0x3d513b[_0x1988('0x25')]['event']=_0x1988('0x7f');return respondWithRpcPromise(_0x1988('0x80'),'EventManager',{'event':'acceptmessage','message':_0x3d513b[_0x1988('0x25')]},client9002)[_0x1988('0x1d')](function(){return _0x3d513b;});}return _0x3d513b;}return null;})[_0x1988('0x1d')](respondWithResult(_0x2b759e,null))[_0x1988('0x27')](handleError(_0x2b759e,null));};var interaction_log=require(_0x1988('0x13'))(_0x1988('0x6c'));exports[_0x1988('0x30')]=function(_0x3c0c3a,_0x414811,_0xb0f2f8){var _0x1e2198={'agent':{},'channel':_0x1988('0x6d')};if(_0x3c0c3a['body']['id']){delete _0x3c0c3a[_0x1988('0x54')]['id'];}_0x3c0c3a[_0x1988('0x54')][_0x1988('0x70')]=_0x3c0c3a[_0x1988('0x54')][_0x1988('0x70')]||_0x3c0c3a[_0x1988('0x71')]['id'];_0x1e2198[_0x1988('0x81')]['id']=_0x3c0c3a[_0x1988('0x54')][_0x1988('0x70')];return db[_0x1988('0x38')][_0x1988('0x52')]({'where':{'id':_0x3c0c3a[_0x1988('0x4e')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x414811,null))[_0x1988('0x1d')](function(_0x134c5c){if(_0x134c5c){_0x1e2198[_0x1988('0x25')]=_0x134c5c[_0x1988('0x74')]({'plain':!![]});return db[_0x1988('0x75')][_0x1988('0x52')]({'where':{'id':_0x134c5c[_0x1988('0x76')]}});}return null;})[_0x1988('0x1d')](handleEntityNotFound(_0x414811,null))[_0x1988('0x1d')](function(_0x4c963b){if(_0x4c963b){_0x1e2198[_0x1988('0x78')]=_0x4c963b[_0x1988('0x74')]({'plain':!![]});interaction_log[_0x1988('0x1e')](_0x1988('0x82'),_0x3c0c3a[_0x1988('0x71')]['id'],_0x3c0c3a[_0x1988('0x71')][_0x1988('0x35')],_0x3c0c3a[_0x1988('0x71')][_0x1988('0x83')],_0x1e2198['interaction']['id'],_0x3c0c3a[_0x1988('0x54')]?JSON[_0x1988('0x22')](_0x3c0c3a[_0x1988('0x54')]):_0x1988('0x79'));return respondWithRpcPromise(_0x1988('0x84'),_0x1988('0x85'),_0x1e2198);}return null;})[_0x1988('0x1d')](function(_0x5076f0){if(_0x5076f0){_0x5076f0['message']['interface']=util['format']('SIP/%s',_0x3c0c3a[_0x1988('0x71')][_0x1988('0x35')]);_0x5076f0[_0x1988('0x25')][_0x1988('0x7e')]=_0x1e2198[_0x1988('0x7e')];_0x5076f0[_0x1988('0x25')][_0x1988('0x86')]=_0x1988('0x30');respondWithRpcPromise('EventManager',_0x1988('0x80'),{'event':'rejectmessage','message':_0x5076f0[_0x1988('0x25')]},client9002);return _0x1e2198;}return null;})['then'](respondWithResult(_0x414811,null))['catch'](handleError(_0x414811,null));};exports[_0x1988('0x87')]=function(_0x11701d,_0x7fa8d3){var _0x24b32c=moment()[_0x1988('0x88')]()[_0x1988('0x89')]();var _0x40f426=path[_0x1988('0x66')](config['root'],_0x1988('0x8a'),'files','tmp');var _0x2cb6a3=path['join'](config[_0x1988('0x67')],_0x1988('0x8a'),_0x1988('0x8b'),_0x1988('0x65'));var _0x1d307b=util[_0x1988('0x6a')](_0x1988('0x8c'),_0x24b32c);return db[_0x1988('0x38')][_0x1988('0x52')]({'where':{'id':_0x11701d[_0x1988('0x4e')]['id']},'attributes':['id',_0x1988('0x54'),_0x1988('0x8d'),'to','cc',_0x1988('0x8e'),_0x1988('0x8f'),_0x1988('0x90')],'include':_0x11701d[_0x1988('0x3a')][_0x1988('0x65')]?[{'model':db[_0x1988('0x91')],'as':_0x1988('0x92')}]:undefined})['then'](handleEntityNotFound(_0x7fa8d3,null))[_0x1988('0x1d')](function(_0x24819c){if(_0x24819c){var _0x1349e7=_0x24819c;var _0x54a8aa={'from':_0x1349e7[_0x1988('0x8d')],'to':_0x1349e7['to'],'subject':_0x1349e7[_0x1988('0x8f')],'html':_0x1349e7[_0x1988('0x54')],'headers':{'Date':moment(_0x1349e7[_0x1988('0x90')])[_0x1988('0x6a')](_0x1988('0x93'))},'attachments':[]};if(_0x24819c['cc']){_0x54a8aa[_0x1988('0x94')]['Cc']=_0x24819c['cc'];}if(_0x24819c[_0x1988('0x8e')]){_0x54a8aa[_0x1988('0x94')][_0x1988('0x95')]=_0x24819c[_0x1988('0x8e')];}return new BPromise(function(_0x146c5a,_0x2b5c05){if(_0x24819c[_0x1988('0x92')]){for(var _0x3aa9da=0x0;_0x3aa9da<_0x24819c['Attachments'][_0x1988('0x3e')];_0x3aa9da++){var _0x283b82=_0x24819c[_0x1988('0x92')][_0x3aa9da];var _0x238f4f=path[_0x1988('0x66')](_0x2cb6a3,_0x283b82[_0x1988('0x96')]);if(fs[_0x1988('0x97')](_0x238f4f)){_0x54a8aa[_0x1988('0x65')]['push']({'name':_0x283b82[_0x1988('0x35')],'contentType':_0x283b82['type'],'data':fs['readFileSync'](_0x238f4f)});}}}emlformat['build'](_0x54a8aa,function(_0x96c3f7,_0x65d506){if(_0x96c3f7)return _0x2b5c05(_0x96c3f7);fs[_0x1988('0x98')](path['join'](_0x40f426,_0x1d307b),_0x65d506);return _0x146c5a(_0x65d506);});});}})[_0x1988('0x1d')](function(_0x47c5d4){if(_0x47c5d4){return _0x7fa8d3[_0x1988('0x87')](path['join'](_0x40f426,_0x1d307b),_0x1d307b,function(_0x5cc43a){if(_0x5cc43a){console['log'](_0x1988('0x99'),_0x5cc43a);}else{fs[_0x1988('0x9a')](path[_0x1988('0x66')](_0x40f426,_0x1d307b));}});}})[_0x1988('0x27')](handleError(_0x7fa8d3,null));};
\ No newline at end of file
index 7e9a76a..0ce4b5d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe002=['save','update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','MailMessage'];(function(_0x41f49e,_0x37bc72){var _0x401aa7=function(_0x4aa62a){while(--_0x4aa62a){_0x41f49e['push'](_0x41f49e['shift']());}};_0x401aa7(++_0x37bc72);}(_0xe002,0xf7));var _0x2e00=function(_0x3b3f4f,_0x403216){_0x3b3f4f=_0x3b3f4f-0x0;var _0x174dbe=_0xe002[_0x3b3f4f];return _0x174dbe;};'use strict';var EventEmitter=require(_0x2e00('0x0'));var MailMessage=require(_0x2e00('0x1'))['db'][_0x2e00('0x2')];var MailMessageEvents=new EventEmitter();MailMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x2e00('0x3'),'afterUpdate':_0x2e00('0x4'),'afterDestroy':_0x2e00('0x5')};function emitEvent(_0x5ea0f5){return function(_0x34f964,_0xba44f2,_0x2cb0ac){MailMessageEvents[_0x2e00('0x6')](_0x5ea0f5+':'+_0x34f964['id'],_0x34f964);MailMessageEvents[_0x2e00('0x6')](_0x5ea0f5,_0x34f964);_0x2cb0ac(null);};}for(var e in events){if(events[_0x2e00('0x7')](e)){var event=events[e];MailMessage[_0x2e00('0x8')](e,emitEvent(event));}}module[_0x2e00('0x9')]=MailMessageEvents;
\ No newline at end of file
+var _0xdb2a=['../../mysqldb','MailMessage','update','remove','emit','hasOwnProperty','hook','events'];(function(_0x58024b,_0xb7e4cd){var _0x42e101=function(_0x262d09){while(--_0x262d09){_0x58024b['push'](_0x58024b['shift']());}};_0x42e101(++_0xb7e4cd);}(_0xdb2a,0x16f));var _0xadb2=function(_0x2937db,_0x117382){_0x2937db=_0x2937db-0x0;var _0x597ef1=_0xdb2a[_0x2937db];return _0x597ef1;};'use strict';var EventEmitter=require(_0xadb2('0x0'));var MailMessage=require(_0xadb2('0x1'))['db'][_0xadb2('0x2')];var MailMessageEvents=new EventEmitter();MailMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0xadb2('0x3'),'afterDestroy':_0xadb2('0x4')};function emitEvent(_0x5a3885){return function(_0x364980,_0x51f39a,_0x3aa5e1){MailMessageEvents[_0xadb2('0x5')](_0x5a3885+':'+_0x364980['id'],_0x364980);MailMessageEvents[_0xadb2('0x5')](_0x5a3885,_0x364980);_0x3aa5e1(null);};}for(var e in events){if(events[_0xadb2('0x6')](e)){var event=events[e];MailMessage[_0xadb2('0x7')](e,emitEvent(event));}}module['exports']=MailMessageEvents;
\ No newline at end of file
index 0b144f9..cbc7e96 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c51=['utf8mb4_unicode_ci','util','../../config/logger','api','moment','request-promise','./mailMessage.attributes','exports','MailMessage','mail_messages','models','toLowerCase','out','isNil','UserId','findOne','then','createdAt','direction','catch','error','utf8mb4'];(function(_0x27c248,_0x384dff){var _0x1b2fc2=function(_0x188255){while(--_0x188255){_0x27c248['push'](_0x27c248['shift']());}};_0x1b2fc2(++_0x384dff);}(_0x3c51,0x1b9));var _0x13c5=function(_0x5b565e,_0x284dfe){_0x5b565e=_0x5b565e-0x0;var _0xd447ae=_0x3c51[_0x5b565e];return _0xd447ae;};'use strict';var _=require('lodash');var util=require(_0x13c5('0x0'));var logger=require(_0x13c5('0x1'))(_0x13c5('0x2'));var moment=require(_0x13c5('0x3'));var BPromise=require('bluebird');var rp=require(_0x13c5('0x4'));var attributes=require(_0x13c5('0x5'));module[_0x13c5('0x6')]=function(_0x51b4e1,_0x51388a){return _0x51b4e1['define'](_0x13c5('0x7'),attributes,{'tableName':_0x13c5('0x8'),'paranoid':![],'indexes':[{'name':'messageId','fields':['messageId']}],'timestamps':!![],'hooks':{'afterCreate':function(_0x3087c9,_0x2e6ee6,_0x51cbcb){var _0x590bf1=_0x51b4e1[_0x13c5('0x9')];var _0x318cbc=_0x3087c9['get']({'plain':!![]});if(_0x318cbc['direction'][_0x13c5('0xa')]()==='in'||_0x318cbc['direction'][_0x13c5('0xa')]()===_0x13c5('0xb')&&!_0x318cbc['secret']&&!_[_0x13c5('0xc')](_0x318cbc[_0x13c5('0xd')])){_0x590bf1['MailInteraction'][_0x13c5('0xe')]({'where':{'id':_0x318cbc['MailInteractionId']}})[_0x13c5('0xf')](function(_0x57570a){if(_0x57570a){_0x57570a['update']({'lastMsgAt':_0x318cbc[_0x13c5('0x10')],'lastMsgDirection':_0x318cbc[_0x13c5('0x11')][_0x13c5('0xa')](),'lastMsgBody':_0x318cbc['body']});}})[_0x13c5('0x12')](function(_0x5a928a){console[_0x13c5('0x13')](_0x5a928a);});}_0x51cbcb();}},'charset':_0x13c5('0x14'),'collate':_0x13c5('0x15')});};
\ No newline at end of file
+var _0x10e9=['mail_messages','messageId','get','direction','toLowerCase','out','secret','UserId','findOne','MailInteractionId','then','update','createdAt','catch','error','utf8mb4_unicode_ci','lodash','util','../../config/logger','api','bluebird','request-promise','./mailMessage.attributes','exports','define','MailMessage'];(function(_0x137a9a,_0x294588){var _0x165d32=function(_0x1e7876){while(--_0x1e7876){_0x137a9a['push'](_0x137a9a['shift']());}};_0x165d32(++_0x294588);}(_0x10e9,0xfa));var _0x910e=function(_0x3aacea,_0x4dec2d){_0x3aacea=_0x3aacea-0x0;var _0xabe687=_0x10e9[_0x3aacea];return _0xabe687;};'use strict';var _=require(_0x910e('0x0'));var util=require(_0x910e('0x1'));var logger=require(_0x910e('0x2'))(_0x910e('0x3'));var moment=require('moment');var BPromise=require(_0x910e('0x4'));var rp=require(_0x910e('0x5'));var attributes=require(_0x910e('0x6'));module[_0x910e('0x7')]=function(_0xee3eb8,_0x3b9efb){return _0xee3eb8[_0x910e('0x8')](_0x910e('0x9'),attributes,{'tableName':_0x910e('0xa'),'paranoid':![],'indexes':[{'name':_0x910e('0xb'),'fields':[_0x910e('0xb')]}],'timestamps':!![],'hooks':{'afterCreate':function(_0x45ff60,_0x10c40f,_0x5b47a3){var _0x12ae3d=_0xee3eb8['models'];var _0x389e74=_0x45ff60[_0x910e('0xc')]({'plain':!![]});if(_0x389e74[_0x910e('0xd')]['toLowerCase']()==='in'||_0x389e74[_0x910e('0xd')][_0x910e('0xe')]()===_0x910e('0xf')&&!_0x389e74[_0x910e('0x10')]&&!_['isNil'](_0x389e74[_0x910e('0x11')])){_0x12ae3d['MailInteraction'][_0x910e('0x12')]({'where':{'id':_0x389e74[_0x910e('0x13')]}})[_0x910e('0x14')](function(_0x44a537){if(_0x44a537){_0x44a537[_0x910e('0x15')]({'lastMsgAt':_0x389e74[_0x910e('0x16')],'lastMsgDirection':_0x389e74[_0x910e('0xd')][_0x910e('0xe')](),'lastMsgBody':_0x389e74['body']});}})[_0x910e('0x17')](function(_0x33c267){console[_0x910e('0x18')](_0x33c267);});}_0x5b47a3();}},'charset':'utf8mb4','collate':_0x910e('0x19')});};
\ No newline at end of file
index 76271a6..83eb19e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0d4d=['randomstring','ioredis','../../config/utils','rpc','../../config/environment','client','http','redis','socket.io-emitter','./mailMessage.socket','register','request','then','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','CreateMailMessage','create','options','raw','lodash','util','moment','bluebird'];(function(_0x2ae7fc,_0x286901){var _0x111778=function(_0x2bcd16){while(--_0x2bcd16){_0x2ae7fc['push'](_0x2ae7fc['shift']());}};_0x111778(++_0x286901);}(_0x0d4d,0x132));var _0xd0d4=function(_0x5914ca,_0x5590c3){_0x5914ca=_0x5914ca-0x0;var _0x3e18ac=_0x0d4d[_0x5914ca];return _0x3e18ac;};'use strict';var _=require(_0xd0d4('0x0'));var util=require(_0xd0d4('0x1'));var moment=require(_0xd0d4('0x2'));var BPromise=require(_0xd0d4('0x3'));var rs=require(_0xd0d4('0x4'));var fs=require('fs');var Redis=require(_0xd0d4('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xd0d4('0x6'));var logger=require('../../config/logger')(_0xd0d4('0x7'));var config=require(_0xd0d4('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xd0d4('0x9')][_0xd0d4('0xa')]({'port':0x232a});config[_0xd0d4('0xb')]=_['defaults'](config[_0xd0d4('0xb')],{'host':'localhost','port':0x18eb});var socket=require(_0xd0d4('0xc'))(new Redis(config['redis']));require(_0xd0d4('0xd'))[_0xd0d4('0xe')](socket);function respondWithRpcPromise(_0xdfcbed,_0x5bdeab,_0x1ed4da){return new BPromise(function(_0x2014b6,_0x2a9607){return client[_0xd0d4('0xf')](_0xdfcbed,_0x1ed4da)[_0xd0d4('0x10')](function(_0xbf4c47){logger['info'](_0xd0d4('0x11'),_0x5bdeab,_0xd0d4('0x12'));logger[_0xd0d4('0x13')](_0xd0d4('0x14'),_0x5bdeab,_0xd0d4('0x12'),JSON[_0xd0d4('0x15')](_0xbf4c47));if(_0xbf4c47['error']){if(_0xbf4c47[_0xd0d4('0x16')][_0xd0d4('0x17')]===0x1f4){logger[_0xd0d4('0x16')]('MailMessage,\x20%s,\x20%s',_0x5bdeab,_0xbf4c47['error'][_0xd0d4('0x18')]);return _0x2a9607(_0xbf4c47[_0xd0d4('0x16')]['message']);}logger[_0xd0d4('0x16')](_0xd0d4('0x11'),_0x5bdeab,_0xbf4c47['error']['message']);return _0x2014b6(_0xbf4c47[_0xd0d4('0x16')][_0xd0d4('0x18')]);}else{logger[_0xd0d4('0x19')]('MailMessage,\x20%s,\x20%s',_0x5bdeab,'request\x20sent');_0x2014b6(_0xbf4c47['result'][_0xd0d4('0x18')]);}})[_0xd0d4('0x1a')](function(_0x1e8409){logger['error']('MailMessage,\x20%s,\x20%s',_0x5bdeab,_0x1e8409);_0x2a9607(_0x1e8409);});});}exports[_0xd0d4('0x1b')]=function(_0x4b3b77){var _0x2e6bbf=this;return new Promise(function(_0x272580,_0x1dcc1b){return db['MailMessage'][_0xd0d4('0x1c')](_0x4b3b77['body'],{'raw':_0x4b3b77['options']?_0x4b3b77[_0xd0d4('0x1d')][_0xd0d4('0x1e')]===undefined?!![]:![]:!![]})['then'](function(_0x50f959){logger[_0xd0d4('0x19')](_0xd0d4('0x1b'),_0x4b3b77);logger[_0xd0d4('0x13')](_0xd0d4('0x1b'),_0x4b3b77,JSON[_0xd0d4('0x15')](_0x50f959));_0x272580(_0x50f959);})[_0xd0d4('0x1a')](function(_0x4a7ac4){logger[_0xd0d4('0x16')]('CreateMailMessage',_0x4a7ac4[_0xd0d4('0x18')],_0x4b3b77);_0x1dcc1b(_0x2e6bbf[_0xd0d4('0x16')](0x1f4,_0x4a7ac4[_0xd0d4('0x18')]));});});};
\ No newline at end of file
+var _0x2f74=['../../mysqldb','../../config/utils','../../config/logger','rpc','http','redis','defaults','localhost','socket.io-emitter','./mailMessage.socket','request','info','MailMessage,\x20%s,\x20%s','request\x20sent','debug','MailMessage,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','MailMessage','options','raw','then','CreateMailMessage','lodash','moment','bluebird','randomstring','ioredis'];(function(_0x26de65,_0x51af04){var _0x3e0fc6=function(_0x8ccce1){while(--_0x8ccce1){_0x26de65['push'](_0x26de65['shift']());}};_0x3e0fc6(++_0x51af04);}(_0x2f74,0x7b));var _0x42f7=function(_0x26ac72,_0x482803){_0x26ac72=_0x26ac72-0x0;var _0x25fc90=_0x2f74[_0x26ac72];return _0x25fc90;};'use strict';var _=require(_0x42f7('0x0'));var util=require('util');var moment=require(_0x42f7('0x1'));var BPromise=require(_0x42f7('0x2'));var rs=require(_0x42f7('0x3'));var fs=require('fs');var Redis=require(_0x42f7('0x4'));var db=require(_0x42f7('0x5'))['db'];var utils=require(_0x42f7('0x6'));var logger=require(_0x42f7('0x7'))(_0x42f7('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson['client'][_0x42f7('0x9')]({'port':0x232a});config[_0x42f7('0xa')]=_[_0x42f7('0xb')](config[_0x42f7('0xa')],{'host':_0x42f7('0xc'),'port':0x18eb});var socket=require(_0x42f7('0xd'))(new Redis(config[_0x42f7('0xa')]));require(_0x42f7('0xe'))['register'](socket);function respondWithRpcPromise(_0x13538,_0x24fb3b,_0x106807){return new BPromise(function(_0x3a1a00,_0x1f56d2){return client[_0x42f7('0xf')](_0x13538,_0x106807)['then'](function(_0x44480d){logger[_0x42f7('0x10')](_0x42f7('0x11'),_0x24fb3b,_0x42f7('0x12'));logger[_0x42f7('0x13')](_0x42f7('0x14'),_0x24fb3b,_0x42f7('0x12'),JSON[_0x42f7('0x15')](_0x44480d));if(_0x44480d['error']){if(_0x44480d['error'][_0x42f7('0x16')]===0x1f4){logger[_0x42f7('0x17')](_0x42f7('0x11'),_0x24fb3b,_0x44480d[_0x42f7('0x17')][_0x42f7('0x18')]);return _0x1f56d2(_0x44480d['error'][_0x42f7('0x18')]);}logger['error'](_0x42f7('0x11'),_0x24fb3b,_0x44480d[_0x42f7('0x17')][_0x42f7('0x18')]);return _0x3a1a00(_0x44480d[_0x42f7('0x17')][_0x42f7('0x18')]);}else{logger[_0x42f7('0x10')](_0x42f7('0x11'),_0x24fb3b,'request\x20sent');_0x3a1a00(_0x44480d[_0x42f7('0x19')][_0x42f7('0x18')]);}})[_0x42f7('0x1a')](function(_0x61517a){logger[_0x42f7('0x17')](_0x42f7('0x11'),_0x24fb3b,_0x61517a);_0x1f56d2(_0x61517a);});});}exports['CreateMailMessage']=function(_0x2b1910){var _0x4f0fe4=this;return new Promise(function(_0x1ae649,_0x5d9fcf){return db[_0x42f7('0x1b')]['create'](_0x2b1910['body'],{'raw':_0x2b1910['options']?_0x2b1910[_0x42f7('0x1c')][_0x42f7('0x1d')]===undefined?!![]:![]:!![]})[_0x42f7('0x1e')](function(_0x2a755a){logger[_0x42f7('0x10')](_0x42f7('0x1f'),_0x2b1910);logger[_0x42f7('0x13')](_0x42f7('0x1f'),_0x2b1910,JSON[_0x42f7('0x15')](_0x2a755a));_0x1ae649(_0x2a755a);})[_0x42f7('0x1a')](function(_0x2730a1){logger[_0x42f7('0x17')](_0x42f7('0x1f'),_0x2730a1[_0x42f7('0x18')],_0x2b1910);_0x5d9fcf(_0x4f0fe4['error'](0x1f4,_0x2730a1['message']));});});};
\ No newline at end of file
index cef8a6d..3306043 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a12=['save','remove','update','removeListener','register','mailMessage:'];(function(_0x21511f,_0x389b06){var _0x3f9990=function(_0x4599ea){while(--_0x4599ea){_0x21511f['push'](_0x21511f['shift']());}};_0x3f9990(++_0x389b06);}(_0x0a12,0xc6));var _0x20a1=function(_0x4dc7b9,_0x319d5a){_0x4dc7b9=_0x4dc7b9-0x0;var _0x3ab114=_0x0a12[_0x4dc7b9];return _0x3ab114;};'use strict';var MailMessageEvents=require('./mailMessage.events');var events=[_0x20a1('0x0'),_0x20a1('0x1'),_0x20a1('0x2')];function createListener(_0xd54e69,_0x1e898a){return function(_0x44431d){_0x1e898a['emit'](_0xd54e69,_0x44431d);};}function removeListener(_0x3db4aa,_0x35f61f){return function(){MailMessageEvents[_0x20a1('0x3')](_0x3db4aa,_0x35f61f);};}exports[_0x20a1('0x4')]=function(_0x1caa36){for(var _0x39cf27=0x0,_0x2b8363=events['length'];_0x39cf27<_0x2b8363;_0x39cf27++){var _0x195fb4=events[_0x39cf27];var _0x1855b0=createListener(_0x20a1('0x5')+_0x195fb4,_0x1caa36);MailMessageEvents['on'](_0x195fb4,_0x1855b0);}};
\ No newline at end of file
+var _0x7971=['removeListener','register','length','mailMessage:','./mailMessage.events','save','remove','emit'];(function(_0xaeff8a,_0x506724){var _0x8a6ce3=function(_0x237855){while(--_0x237855){_0xaeff8a['push'](_0xaeff8a['shift']());}};_0x8a6ce3(++_0x506724);}(_0x7971,0x94));var _0x1797=function(_0x36c5b0,_0x5001da){_0x36c5b0=_0x36c5b0-0x0;var _0xf19333=_0x7971[_0x36c5b0];return _0xf19333;};'use strict';var MailMessageEvents=require(_0x1797('0x0'));var events=[_0x1797('0x1'),_0x1797('0x2'),'update'];function createListener(_0x2a3012,_0x3ff976){return function(_0x291316){_0x3ff976[_0x1797('0x3')](_0x2a3012,_0x291316);};}function removeListener(_0x3bb070,_0x1ab6ba){return function(){MailMessageEvents[_0x1797('0x4')](_0x3bb070,_0x1ab6ba);};}exports[_0x1797('0x5')]=function(_0x4f0127){for(var _0x35094a=0x0,_0x2793cd=events[_0x1797('0x6')];_0x35094a<_0x2793cd;_0x35094a++){var _0x29bfcf=events[_0x35094a];var _0x655de3=createListener(_0x1797('0x7')+_0x29bfcf,_0x4f0127);MailMessageEvents['on'](_0x29bfcf,_0x655de3);}};
\ No newline at end of file
index 4ab40f9..3d66f43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfdcd=['create','addTeams','update','delete','/:id','destroy','removeTeams','removeAgents','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailQueue.controller','get','isAuthenticated','/describe','describe','/:id/members','getMembers','/:id/teams','getTeams','/:id/users','getAgents','post'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0xfdcd,0x9a));var _0xdfdc=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xfdcd[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require(_0xdfdc('0x0'));var util=require(_0xdfdc('0x1'));var path=require(_0xdfdc('0x2'));var timeout=require(_0xdfdc('0x3'));var express=require(_0xdfdc('0x4'));var router=express['Router']();var auth=require(_0xdfdc('0x5'));var interaction=require(_0xdfdc('0x6'));var config=require(_0xdfdc('0x7'));var controller=require(_0xdfdc('0x8'));router[_0xdfdc('0x9')]('/',auth[_0xdfdc('0xa')](),controller['index']);router[_0xdfdc('0x9')](_0xdfdc('0xb'),auth[_0xdfdc('0xa')](),controller[_0xdfdc('0xc')]);router[_0xdfdc('0x9')]('/:id',auth[_0xdfdc('0xa')](),controller['show']);router[_0xdfdc('0x9')](_0xdfdc('0xd'),auth['isAuthenticated'](),controller[_0xdfdc('0xe')]);router[_0xdfdc('0x9')](_0xdfdc('0xf'),auth['isAuthenticated'](),controller[_0xdfdc('0x10')]);router['get'](_0xdfdc('0x11'),auth['isAuthenticated'](),controller[_0xdfdc('0x12')]);router[_0xdfdc('0x13')]('/',auth[_0xdfdc('0xa')](),controller[_0xdfdc('0x14')]);router[_0xdfdc('0x13')](_0xdfdc('0xf'),auth[_0xdfdc('0xa')](),controller[_0xdfdc('0x15')]);router[_0xdfdc('0x13')](_0xdfdc('0x11'),auth[_0xdfdc('0xa')](),controller['addAgents']);router['put']('/:id',auth[_0xdfdc('0xa')](),controller[_0xdfdc('0x16')]);router[_0xdfdc('0x17')](_0xdfdc('0x18'),auth[_0xdfdc('0xa')](),controller[_0xdfdc('0x19')]);router['delete'](_0xdfdc('0xf'),auth[_0xdfdc('0xa')](),controller[_0xdfdc('0x1a')]);router[_0xdfdc('0x17')](_0xdfdc('0x11'),auth['isAuthenticated'](),controller[_0xdfdc('0x1b')]);module[_0xdfdc('0x1c')]=router;
\ No newline at end of file
+var _0x6612=['../../config/environment','./mailQueue.controller','get','isAuthenticated','describe','show','/:id/members','getAgents','/:id/teams','addTeams','post','/:id/users','addAgents','put','/:id','update','destroy','delete','removeTeams','removeAgents','exports','util','path','connect-timeout','express','Router','../../components/interaction/service'];(function(_0x578f82,_0x1e37b5){var _0x1edb80=function(_0x41862f){while(--_0x41862f){_0x578f82['push'](_0x578f82['shift']());}};_0x1edb80(++_0x1e37b5);}(_0x6612,0xb7));var _0x2661=function(_0x481bf7,_0x437f69){_0x481bf7=_0x481bf7-0x0;var _0x461787=_0x6612[_0x481bf7];return _0x461787;};'use strict';var multer=require('multer');var util=require(_0x2661('0x0'));var path=require(_0x2661('0x1'));var timeout=require(_0x2661('0x2'));var express=require(_0x2661('0x3'));var router=express[_0x2661('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x2661('0x5'));var config=require(_0x2661('0x6'));var controller=require(_0x2661('0x7'));router[_0x2661('0x8')]('/',auth['isAuthenticated'](),controller['index']);router['get']('/describe',auth[_0x2661('0x9')](),controller[_0x2661('0xa')]);router[_0x2661('0x8')]('/:id',auth[_0x2661('0x9')](),controller[_0x2661('0xb')]);router[_0x2661('0x8')](_0x2661('0xc'),auth[_0x2661('0x9')](),controller['getMembers']);router[_0x2661('0x8')]('/:id/teams',auth[_0x2661('0x9')](),controller['getTeams']);router[_0x2661('0x8')]('/:id/users',auth[_0x2661('0x9')](),controller[_0x2661('0xd')]);router['post']('/',auth[_0x2661('0x9')](),controller['create']);router['post'](_0x2661('0xe'),auth['isAuthenticated'](),controller[_0x2661('0xf')]);router[_0x2661('0x10')](_0x2661('0x11'),auth[_0x2661('0x9')](),controller[_0x2661('0x12')]);router[_0x2661('0x13')](_0x2661('0x14'),auth[_0x2661('0x9')](),controller[_0x2661('0x15')]);router['delete'](_0x2661('0x14'),auth[_0x2661('0x9')](),controller[_0x2661('0x16')]);router[_0x2661('0x17')]('/:id/teams',auth[_0x2661('0x9')](),controller[_0x2661('0x18')]);router[_0x2661('0x17')]('/:id/users',auth['isAuthenticated'](),controller[_0x2661('0x19')]);module[_0x2661('0x1a')]=router;
\ No newline at end of file
index 8c1332c..5ad0bc1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x65aa=['rrmemory','sequelize','exports','name','INTEGER','ENUM'];(function(_0x1e00da,_0x4c1cf8){var _0x16e478=function(_0x2b06c0){while(--_0x2b06c0){_0x1e00da['push'](_0x1e00da['shift']());}};_0x16e478(++_0x4c1cf8);}(_0x65aa,0x181));var _0xa65a=function(_0xf39be1,_0x4db8cc){_0xf39be1=_0xf39be1-0x0;var _0x2119a9=_0x65aa[_0xf39be1];return _0x2119a9;};'use strict';var Sequelize=require(_0xa65a('0x0'));module[_0xa65a('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0xa65a('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize['STRING']},'timeout':{'type':Sequelize[_0xa65a('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xa65a('0x4')](_0xa65a('0x5'),'beepall','roundrobin')}};
\ No newline at end of file
+var _0x39b8=['ENUM','beepall','roundrobin','sequelize','exports','STRING','INTEGER'];(function(_0xe0b632,_0x5e6086){var _0x521c9f=function(_0x1bb8ff){while(--_0x1bb8ff){_0xe0b632['push'](_0xe0b632['shift']());}};_0x521c9f(++_0x5e6086);}(_0x39b8,0xab));var _0x839b=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x39b8[_0x3b380d];return _0x54502b;};'use strict';var Sequelize=require(_0x839b('0x0'));module[_0x839b('0x1')]={'name':{'type':Sequelize[_0x839b('0x2')],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x839b('0x2')]},'timeout':{'type':Sequelize[_0x839b('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0x839b('0x4')]('rrmemory',_0x839b('0x5'),_0x839b('0x6'))}};
\ No newline at end of file
index 3808a49..d7266ee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['stack','name','index','MailQueue','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','MailQueues','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','findOne','UserMailQueue','pick','MailQueueId','findAll','User','findAndCountAll','UserId','agent','mailPause','updatedAt','createdAt','format','%s/%s','SIP','getTeams','addTeams','Team','Agents','union','addAgents','penalty','ids','removeTeams','omit','emit','removeAgents','isArray','userMailQueue:remove','getAgents','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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'];(function(_0x512bdc,_0x2fcdcb){var _0x51a7f0=function(_0x4d279b){while(--_0x4d279b){_0x512bdc['push'](_0x512bdc['shift']());}};_0x51a7f0(++_0x2fcdcb);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5447fd,_0x52a6b5){_0x5447fd=_0x5447fd-0x0;var _0x15b28a=_0xa9e0[_0x5447fd];return _0x15b28a;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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('./mailQueue.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='MailQueues';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['MailQueue'][_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['MailQueue'][_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){return db['MailQueue'][_0x0a9e('0x4f')]()['then'](respondWithResult(_0x145931,null))[_0x0a9e('0x42')](handleError(_0x145931,null));};exports['getMembers']=function(_0x5da27d,_0x5df0ad,_0x2da03c){var _0x47de4c={'raw':!![],'where':{}},_0x2f7092={},_0x65432;return db[_0x0a9e('0x2a')][_0x0a9e('0x50')]({'where':{'id':_0x5da27d[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x5df0ad,null))[_0x0a9e('0x23')](function(_0x28d814){if(_0x28d814){_0x65432=_0x28d814['get']({'plain':!![]});_0x2f7092[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db[_0x0a9e('0x51')][_0x0a9e('0x2b')]);_0x2f7092[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0x5da27d['query']);_0x2f7092[_0x0a9e('0x36')]=_[_0x0a9e('0x2f')](_0x2f7092['model'],_0x2f7092[_0x0a9e('0x2e')]);_0x47de4c['attributes']=_[_0x0a9e('0x2f')](_0x2f7092['model'],qs['fields'](_0x5da27d['query'][_0x0a9e('0x31')]));_0x47de4c['attributes']=_0x47de4c[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x47de4c[_0x0a9e('0x30')]:_0x2f7092[_0x0a9e('0x2c')];if(!_0x5da27d[_0x0a9e('0x2e')][_0x0a9e('0x33')]('nolimit')){_0x47de4c[_0x0a9e('0x1d')]=qs['limit'](_0x5da27d[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x47de4c[_0x0a9e('0x1c')]=qs['offset'](_0x5da27d[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);}_0x47de4c[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x5da27d['query'][_0x0a9e('0x35')]);_0x47de4c[_0x0a9e('0x39')]=qs['filters'](_[_0x0a9e('0x52')](_0x5da27d[_0x0a9e('0x2e')],_0x2f7092[_0x0a9e('0x36')]));_0x47de4c[_0x0a9e('0x39')][_0x0a9e('0x53')]=_0x28d814['id'];if(_0x5da27d['query'][_0x0a9e('0x37')]){_0x47de4c[_0x0a9e('0x39')]=_[_0x0a9e('0x38')](_0x47de4c['where'],{'$or':_[_0x0a9e('0x3a')](_0x47de4c['attributes'],function(_0x5211e3){var _0x242745={};_0x242745[_0x5211e3]={'$like':'%'+_0x5da27d[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x242745;})});}_0x47de4c=_[_0x0a9e('0x38')]({},_0x47de4c,_0x5da27d[_0x0a9e('0x3e')]);return db[_0x0a9e('0x51')][_0x0a9e('0x54')](_0x47de4c);}})[_0x0a9e('0x23')](function(_0x2d7205){if(_0x2d7205){return db[_0x0a9e('0x55')][_0x0a9e('0x56')]({'where':{'id':_[_0x0a9e('0x3a')](_0x2d7205,_0x0a9e('0x57')),'role':_0x0a9e('0x58')},'attributes':['id',_0x0a9e('0x28'),_0x0a9e('0x59'),_0x0a9e('0x5a'),_0x0a9e('0x5b')]});}})['then'](function(_0x1b0b98){if(_0x1b0b98){return{'count':_0x1b0b98[_0x0a9e('0x1b')],'rows':_[_0x0a9e('0x3a')](_0x1b0b98['rows'],function(_0x1148a1){return{'membername':_0x1148a1[_0x0a9e('0x28')],'UserId':_0x1148a1['id'],'queue_name':_0x65432['name'],'MailQueueId':_0x65432['id'],'interface':util[_0x0a9e('0x5c')](_0x0a9e('0x5d'),_0x0a9e('0x5e'),_0x1148a1[_0x0a9e('0x28')]),'penalty':0x0,'paused':_0x1148a1[_0x0a9e('0x59')],'createdAt':_0x1148a1['createdAt'],'updatedAt':_0x1148a1['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x5df0ad,_0x47de4c))[_0x0a9e('0x42')](handleError(_0x5df0ad,null));};exports[_0x0a9e('0x5f')]=function(_0x1104ad,_0x23a7d3,_0x6abd03){var _0x380ab3={};var _0xeef20={};var _0x1a0677;var _0x5512d1;return db[_0x0a9e('0x2a')][_0x0a9e('0x50')]({'where':{'id':_0x1104ad[_0x0a9e('0x44')]['id']}})['then'](handleEntityNotFound(_0x23a7d3,null))[_0x0a9e('0x23')](function(_0x583b2e){if(_0x583b2e){_0x1a0677=_0x583b2e;_0xeef20[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db['Team'][_0x0a9e('0x2b')]);_0xeef20[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0x1104ad[_0x0a9e('0x2e')]);_0xeef20['filters']=_[_0x0a9e('0x2f')](_0xeef20[_0x0a9e('0x2c')],_0xeef20[_0x0a9e('0x2e')]);_0x380ab3[_0x0a9e('0x30')]=_['intersection'](_0xeef20[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0x1104ad[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x380ab3['attributes']=_0x380ab3[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x380ab3[_0x0a9e('0x30')]:_0xeef20[_0x0a9e('0x2c')];_0x380ab3[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x1104ad[_0x0a9e('0x2e')][_0x0a9e('0x35')]);_0x380ab3[_0x0a9e('0x39')]=qs[_0x0a9e('0x36')](_[_0x0a9e('0x52')](_0x1104ad[_0x0a9e('0x2e')],_0xeef20[_0x0a9e('0x36')]));if(_0x1104ad[_0x0a9e('0x2e')]['filter']){_0x380ab3[_0x0a9e('0x39')]=_[_0x0a9e('0x38')](_0x380ab3[_0x0a9e('0x39')],{'$or':_['map'](_0x380ab3[_0x0a9e('0x30')],function(_0x33dda0){var _0x8cea96={};_0x8cea96[_0x33dda0]={'$like':'%'+_0x1104ad[_0x0a9e('0x2e')]['filter']+'%'};return _0x8cea96;})});}_0x380ab3=_['merge']({},_0x380ab3,_0x1104ad[_0x0a9e('0x3e')]);return _0x1a0677[_0x0a9e('0x5f')](_0x380ab3);}})['then'](function(_0x45108c){if(_0x45108c){_0x5512d1=_0x45108c['length'];if(!_0x1104ad[_0x0a9e('0x2e')][_0x0a9e('0x33')]('nolimit')){_0x380ab3[_0x0a9e('0x1d')]=qs[_0x0a9e('0x1d')](_0x1104ad[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x380ab3[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0x1104ad[_0x0a9e('0x2e')]['offset']);}return _0x1a0677[_0x0a9e('0x5f')](_0x380ab3);}})[_0x0a9e('0x23')](function(_0x45c109){if(_0x45c109){return _0x45c109?{'count':_0x5512d1,'rows':_0x45c109}:null;}})[_0x0a9e('0x23')](respondWithResult(_0x23a7d3,null))['catch'](handleError(_0x23a7d3,null));};exports[_0x0a9e('0x60')]=function(_0xf0db1,_0x4bf3a5,_0x1d6834){var _0x5b7940=[];var _0x163710;return db[_0x0a9e('0x61')][_0x0a9e('0x54')]({'where':{'id':_0xf0db1[_0x0a9e('0x47')]['ids']},'attributes':['id'],'include':[{'model':db['User'],'as':_0x0a9e('0x62'),'attributes':['id'],'raw':!![]}]})[_0x0a9e('0x23')](function(_0x94dcf5){if(_0x94dcf5){for(var _0x5ac73d=0x0;_0x5ac73d<_0x94dcf5[_0x0a9e('0x32')];_0x5ac73d+=0x1){for(var _0x36e975=0x0;_0x36e975<_0x94dcf5[_0x5ac73d]['Agents']['length'];_0x36e975+=0x1){_0x5b7940=_[_0x0a9e('0x63')](_0x5b7940,[_0x94dcf5[_0x5ac73d]['Agents'][_0x36e975]['id']]);}}return _0x5b7940;}})['then'](function(_0x4dc6b3){if(_0x4dc6b3){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0xf0db1[_0x0a9e('0x44')]['id']}});}})[_0x0a9e('0x23')](function(_0x3c6dd6){if(_0x3c6dd6){_0x163710=_0x3c6dd6;return _0x163710[_0x0a9e('0x64')](_0x5b7940,{'penalty':_0xf0db1['body'][_0x0a9e('0x65')]});}})['then'](function(_0x2871c1){if(_0x2871c1){return _0x163710[_0x0a9e('0x60')](_0xf0db1[_0x0a9e('0x47')][_0x0a9e('0x66')]);}})['then'](handleEntityNotFound(_0x4bf3a5,null))[_0x0a9e('0x23')](respondWithStatusCode(_0x4bf3a5,null))[_0x0a9e('0x42')](handleError(_0x4bf3a5,null));};exports[_0x0a9e('0x67')]=function(_0x5b74c3,_0xb6e411,_0x21e592){var _0x2a563d=[];var _0x22063c;return db[_0x0a9e('0x61')][_0x0a9e('0x54')]({'where':{'id':_0x5b74c3[_0x0a9e('0x2e')][_0x0a9e('0x66')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x0a9e('0x62'),'attributes':['id'],'raw':!![]}]})[_0x0a9e('0x23')](function(_0x589ff3){if(_0x589ff3){for(var _0x40e0f0=0x0;_0x40e0f0<_0x589ff3[_0x0a9e('0x32')];_0x40e0f0+=0x1){for(var _0x3a1974=0x0;_0x3a1974<_0x589ff3[_0x40e0f0]['Agents'][_0x0a9e('0x32')];_0x3a1974+=0x1){_0x2a563d=_['union'](_0x2a563d,[_0x589ff3[_0x40e0f0][_0x0a9e('0x62')][_0x3a1974]['id']]);}}return _0x2a563d;}})[_0x0a9e('0x23')](function(_0x558a87){if(_0x558a87){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x5b74c3[_0x0a9e('0x44')]['id']}});}})[_0x0a9e('0x23')](function(_0x3a9a85){if(_0x3a9a85){_0x22063c=_0x3a9a85;return _0x22063c['removeAgents'](_0x2a563d);}})[_0x0a9e('0x23')](function(_0x31d25a){if(_0x22063c){return _0x22063c[_0x0a9e('0x67')](_0x5b74c3[_0x0a9e('0x2e')][_0x0a9e('0x66')]);}})[_0x0a9e('0x23')](handleEntityNotFound(_0xb6e411,null))[_0x0a9e('0x23')](respondWithStatusCode(_0xb6e411,null))[_0x0a9e('0x42')](handleError(_0xb6e411,null));};exports[_0x0a9e('0x64')]=function(_0x31af8c,_0x151956,_0x3754e2){return db[_0x0a9e('0x2a')]['find']({'where':{'id':_0x31af8c[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x151956,null))[_0x0a9e('0x23')](function(_0x2ed526){if(_0x2ed526){return _0x2ed526[_0x0a9e('0x64')](_0x31af8c['body'][_0x0a9e('0x66')],_[_0x0a9e('0x68')](_0x31af8c['body'],[_0x0a9e('0x66'),'id'])||{})['spread'](function(_0x45d113){for(var _0x27041d=0x0;_0x27041d<_0x31af8c[_0x0a9e('0x47')][_0x0a9e('0x66')]['length'];_0x27041d+=0x1){socket[_0x0a9e('0x69')]('userMailQueue:save',{'UserId':_0x31af8c[_0x0a9e('0x47')][_0x0a9e('0x66')][_0x27041d],'MailQueueId':_0x31af8c['params']['id']});}return _0x45d113;});}})[_0x0a9e('0x23')](respondWithResult(_0x151956,null))[_0x0a9e('0x42')](handleError(_0x151956,null));};exports[_0x0a9e('0x6a')]=function(_0x4ab276,_0x4c788f,_0x1b82b7){var _0x6ba2be;return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x4ab276[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x4c788f,null))[_0x0a9e('0x23')](function(_0x3c75b9){if(_0x3c75b9){return _0x3c75b9[_0x0a9e('0x6a')](_0x4ab276['query'][_0x0a9e('0x66')])['then'](function(_0x287324){if(_[_0x0a9e('0x6b')](_0x4ab276[_0x0a9e('0x2e')][_0x0a9e('0x66')])){for(var _0x1b61d5=0x0;_0x1b61d5<_0x4ab276['query'][_0x0a9e('0x66')][_0x0a9e('0x32')];_0x1b61d5+=0x1){socket[_0x0a9e('0x69')](_0x0a9e('0x6c'),{'UserId':_0x4ab276[_0x0a9e('0x2e')]['ids'][_0x1b61d5],'MailQueueId':_0x4ab276['params']['id']});}}else{socket[_0x0a9e('0x69')]('userMailQueue:remove',{'UserId':_0x4ab276[_0x0a9e('0x2e')][_0x0a9e('0x66')],'MailQueueId':_0x4ab276[_0x0a9e('0x44')]['id']});}});}})[_0x0a9e('0x23')](respondWithStatusCode(_0x4c788f,null))[_0x0a9e('0x42')](handleError(_0x4c788f,null));};exports[_0x0a9e('0x6d')]=function(_0x596312,_0x4db918,_0x1889ed){var _0x5dfbe2={};var _0x2469d1={};var _0x5c689c;var _0x427ccc;return db['MailQueue']['findOne']({'where':{'id':_0x596312[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x4db918,null))['then'](function(_0x170af6){if(_0x170af6){_0x5c689c=_0x170af6;_0x2469d1[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db[_0x0a9e('0x55')][_0x0a9e('0x2b')]);_0x2469d1['query']=_['keys'](_0x596312[_0x0a9e('0x2e')]);_0x2469d1[_0x0a9e('0x36')]=_[_0x0a9e('0x2f')](_0x2469d1[_0x0a9e('0x2c')],_0x2469d1[_0x0a9e('0x2e')]);_0x5dfbe2['attributes']=_[_0x0a9e('0x2f')](_0x2469d1[_0x0a9e('0x2c')],qs['fields'](_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x5dfbe2[_0x0a9e('0x30')]=_0x5dfbe2[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x5dfbe2[_0x0a9e('0x30')]:_0x2469d1[_0x0a9e('0x2c')];_0x5dfbe2[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x596312[_0x0a9e('0x2e')]['sort']);_0x5dfbe2[_0x0a9e('0x39')]=qs[_0x0a9e('0x36')](_[_0x0a9e('0x52')](_0x596312[_0x0a9e('0x2e')],_0x2469d1[_0x0a9e('0x36')]));if(_0x596312['query']['filter']){_0x5dfbe2[_0x0a9e('0x39')]=_[_0x0a9e('0x38')](_0x5dfbe2[_0x0a9e('0x39')],{'$or':_[_0x0a9e('0x3a')](_0x5dfbe2[_0x0a9e('0x30')],function(_0x59e46f){var _0x1339d0={};_0x1339d0[_0x59e46f]={'$like':'%'+_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x1339d0;})});}_0x5dfbe2=_['merge']({},_0x5dfbe2,_0x596312[_0x0a9e('0x3e')]);return _0x5c689c['getAgents'](_0x5dfbe2);}})[_0x0a9e('0x23')](function(_0x4799d4){if(_0x4799d4){_0x427ccc=_0x4799d4[_0x0a9e('0x32')];if(!_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x33')]('nolimit')){_0x5dfbe2[_0x0a9e('0x1d')]=qs['limit'](_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x5dfbe2[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);}return _0x5c689c[_0x0a9e('0x6d')](_0x5dfbe2);}})[_0x0a9e('0x23')](function(_0x2aaf07){if(_0x2aaf07){return _0x2aaf07?{'count':_0x427ccc,'rows':_0x2aaf07}:null;}})[_0x0a9e('0x23')](respondWithResult(_0x4db918,null))[_0x0a9e('0x42')](handleError(_0x4db918,null));};
\ No newline at end of file
+var _0xa9e0=['stack','name','index','MailQueue','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','MailQueues','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','findOne','UserMailQueue','pick','MailQueueId','findAll','User','findAndCountAll','UserId','agent','mailPause','updatedAt','createdAt','format','%s/%s','SIP','getTeams','addTeams','Team','Agents','union','addAgents','penalty','ids','removeTeams','omit','emit','removeAgents','isArray','userMailQueue:remove','getAgents','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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'];(function(_0x5763cf,_0x2761d1){var _0x4410fb=function(_0xf29599){while(--_0xf29599){_0x5763cf['push'](_0x5763cf['shift']());}};_0x4410fb(++_0x2761d1);}(_0xa9e0,0x123));var _0x0a9e=function(_0x187ee1,_0x3fd1e6){_0x187ee1=_0x187ee1-0x0;var _0x388160=_0xa9e0[_0x187ee1];return _0x388160;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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('./mailQueue.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='MailQueues';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['MailQueue'][_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['MailQueue'][_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){return db['MailQueue'][_0x0a9e('0x4f')]()['then'](respondWithResult(_0x145931,null))[_0x0a9e('0x42')](handleError(_0x145931,null));};exports['getMembers']=function(_0x5da27d,_0x5df0ad,_0x2da03c){var _0x47de4c={'raw':!![],'where':{}},_0x2f7092={},_0x65432;return db[_0x0a9e('0x2a')][_0x0a9e('0x50')]({'where':{'id':_0x5da27d[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x5df0ad,null))[_0x0a9e('0x23')](function(_0x28d814){if(_0x28d814){_0x65432=_0x28d814['get']({'plain':!![]});_0x2f7092[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db[_0x0a9e('0x51')][_0x0a9e('0x2b')]);_0x2f7092[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0x5da27d['query']);_0x2f7092[_0x0a9e('0x36')]=_[_0x0a9e('0x2f')](_0x2f7092['model'],_0x2f7092[_0x0a9e('0x2e')]);_0x47de4c['attributes']=_[_0x0a9e('0x2f')](_0x2f7092['model'],qs['fields'](_0x5da27d['query'][_0x0a9e('0x31')]));_0x47de4c['attributes']=_0x47de4c[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x47de4c[_0x0a9e('0x30')]:_0x2f7092[_0x0a9e('0x2c')];if(!_0x5da27d[_0x0a9e('0x2e')][_0x0a9e('0x33')]('nolimit')){_0x47de4c[_0x0a9e('0x1d')]=qs['limit'](_0x5da27d[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x47de4c[_0x0a9e('0x1c')]=qs['offset'](_0x5da27d[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);}_0x47de4c[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x5da27d['query'][_0x0a9e('0x35')]);_0x47de4c[_0x0a9e('0x39')]=qs['filters'](_[_0x0a9e('0x52')](_0x5da27d[_0x0a9e('0x2e')],_0x2f7092[_0x0a9e('0x36')]));_0x47de4c[_0x0a9e('0x39')][_0x0a9e('0x53')]=_0x28d814['id'];if(_0x5da27d['query'][_0x0a9e('0x37')]){_0x47de4c[_0x0a9e('0x39')]=_[_0x0a9e('0x38')](_0x47de4c['where'],{'$or':_[_0x0a9e('0x3a')](_0x47de4c['attributes'],function(_0x5211e3){var _0x242745={};_0x242745[_0x5211e3]={'$like':'%'+_0x5da27d[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x242745;})});}_0x47de4c=_[_0x0a9e('0x38')]({},_0x47de4c,_0x5da27d[_0x0a9e('0x3e')]);return db[_0x0a9e('0x51')][_0x0a9e('0x54')](_0x47de4c);}})[_0x0a9e('0x23')](function(_0x2d7205){if(_0x2d7205){return db[_0x0a9e('0x55')][_0x0a9e('0x56')]({'where':{'id':_[_0x0a9e('0x3a')](_0x2d7205,_0x0a9e('0x57')),'role':_0x0a9e('0x58')},'attributes':['id',_0x0a9e('0x28'),_0x0a9e('0x59'),_0x0a9e('0x5a'),_0x0a9e('0x5b')]});}})['then'](function(_0x1b0b98){if(_0x1b0b98){return{'count':_0x1b0b98[_0x0a9e('0x1b')],'rows':_[_0x0a9e('0x3a')](_0x1b0b98['rows'],function(_0x1148a1){return{'membername':_0x1148a1[_0x0a9e('0x28')],'UserId':_0x1148a1['id'],'queue_name':_0x65432['name'],'MailQueueId':_0x65432['id'],'interface':util[_0x0a9e('0x5c')](_0x0a9e('0x5d'),_0x0a9e('0x5e'),_0x1148a1[_0x0a9e('0x28')]),'penalty':0x0,'paused':_0x1148a1[_0x0a9e('0x59')],'createdAt':_0x1148a1['createdAt'],'updatedAt':_0x1148a1['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})['then'](respondWithFilteredResult(_0x5df0ad,_0x47de4c))[_0x0a9e('0x42')](handleError(_0x5df0ad,null));};exports[_0x0a9e('0x5f')]=function(_0x1104ad,_0x23a7d3,_0x6abd03){var _0x380ab3={};var _0xeef20={};var _0x1a0677;var _0x5512d1;return db[_0x0a9e('0x2a')][_0x0a9e('0x50')]({'where':{'id':_0x1104ad[_0x0a9e('0x44')]['id']}})['then'](handleEntityNotFound(_0x23a7d3,null))[_0x0a9e('0x23')](function(_0x583b2e){if(_0x583b2e){_0x1a0677=_0x583b2e;_0xeef20[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db['Team'][_0x0a9e('0x2b')]);_0xeef20[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0x1104ad[_0x0a9e('0x2e')]);_0xeef20['filters']=_[_0x0a9e('0x2f')](_0xeef20[_0x0a9e('0x2c')],_0xeef20[_0x0a9e('0x2e')]);_0x380ab3[_0x0a9e('0x30')]=_['intersection'](_0xeef20[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0x1104ad[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x380ab3['attributes']=_0x380ab3[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x380ab3[_0x0a9e('0x30')]:_0xeef20[_0x0a9e('0x2c')];_0x380ab3[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x1104ad[_0x0a9e('0x2e')][_0x0a9e('0x35')]);_0x380ab3[_0x0a9e('0x39')]=qs[_0x0a9e('0x36')](_[_0x0a9e('0x52')](_0x1104ad[_0x0a9e('0x2e')],_0xeef20[_0x0a9e('0x36')]));if(_0x1104ad[_0x0a9e('0x2e')]['filter']){_0x380ab3[_0x0a9e('0x39')]=_[_0x0a9e('0x38')](_0x380ab3[_0x0a9e('0x39')],{'$or':_['map'](_0x380ab3[_0x0a9e('0x30')],function(_0x33dda0){var _0x8cea96={};_0x8cea96[_0x33dda0]={'$like':'%'+_0x1104ad[_0x0a9e('0x2e')]['filter']+'%'};return _0x8cea96;})});}_0x380ab3=_['merge']({},_0x380ab3,_0x1104ad[_0x0a9e('0x3e')]);return _0x1a0677[_0x0a9e('0x5f')](_0x380ab3);}})['then'](function(_0x45108c){if(_0x45108c){_0x5512d1=_0x45108c['length'];if(!_0x1104ad[_0x0a9e('0x2e')][_0x0a9e('0x33')]('nolimit')){_0x380ab3[_0x0a9e('0x1d')]=qs[_0x0a9e('0x1d')](_0x1104ad[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x380ab3[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0x1104ad[_0x0a9e('0x2e')]['offset']);}return _0x1a0677[_0x0a9e('0x5f')](_0x380ab3);}})[_0x0a9e('0x23')](function(_0x45c109){if(_0x45c109){return _0x45c109?{'count':_0x5512d1,'rows':_0x45c109}:null;}})[_0x0a9e('0x23')](respondWithResult(_0x23a7d3,null))['catch'](handleError(_0x23a7d3,null));};exports[_0x0a9e('0x60')]=function(_0xf0db1,_0x4bf3a5,_0x1d6834){var _0x5b7940=[];var _0x163710;return db[_0x0a9e('0x61')][_0x0a9e('0x54')]({'where':{'id':_0xf0db1[_0x0a9e('0x47')]['ids']},'attributes':['id'],'include':[{'model':db['User'],'as':_0x0a9e('0x62'),'attributes':['id'],'raw':!![]}]})[_0x0a9e('0x23')](function(_0x94dcf5){if(_0x94dcf5){for(var _0x5ac73d=0x0;_0x5ac73d<_0x94dcf5[_0x0a9e('0x32')];_0x5ac73d+=0x1){for(var _0x36e975=0x0;_0x36e975<_0x94dcf5[_0x5ac73d]['Agents']['length'];_0x36e975+=0x1){_0x5b7940=_[_0x0a9e('0x63')](_0x5b7940,[_0x94dcf5[_0x5ac73d]['Agents'][_0x36e975]['id']]);}}return _0x5b7940;}})['then'](function(_0x4dc6b3){if(_0x4dc6b3){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0xf0db1[_0x0a9e('0x44')]['id']}});}})[_0x0a9e('0x23')](function(_0x3c6dd6){if(_0x3c6dd6){_0x163710=_0x3c6dd6;return _0x163710[_0x0a9e('0x64')](_0x5b7940,{'penalty':_0xf0db1['body'][_0x0a9e('0x65')]});}})['then'](function(_0x2871c1){if(_0x2871c1){return _0x163710[_0x0a9e('0x60')](_0xf0db1[_0x0a9e('0x47')][_0x0a9e('0x66')]);}})['then'](handleEntityNotFound(_0x4bf3a5,null))[_0x0a9e('0x23')](respondWithStatusCode(_0x4bf3a5,null))[_0x0a9e('0x42')](handleError(_0x4bf3a5,null));};exports[_0x0a9e('0x67')]=function(_0x5b74c3,_0xb6e411,_0x21e592){var _0x2a563d=[];var _0x22063c;return db[_0x0a9e('0x61')][_0x0a9e('0x54')]({'where':{'id':_0x5b74c3[_0x0a9e('0x2e')][_0x0a9e('0x66')]},'attributes':['id'],'include':[{'model':db['User'],'as':_0x0a9e('0x62'),'attributes':['id'],'raw':!![]}]})[_0x0a9e('0x23')](function(_0x589ff3){if(_0x589ff3){for(var _0x40e0f0=0x0;_0x40e0f0<_0x589ff3[_0x0a9e('0x32')];_0x40e0f0+=0x1){for(var _0x3a1974=0x0;_0x3a1974<_0x589ff3[_0x40e0f0]['Agents'][_0x0a9e('0x32')];_0x3a1974+=0x1){_0x2a563d=_['union'](_0x2a563d,[_0x589ff3[_0x40e0f0][_0x0a9e('0x62')][_0x3a1974]['id']]);}}return _0x2a563d;}})[_0x0a9e('0x23')](function(_0x558a87){if(_0x558a87){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x5b74c3[_0x0a9e('0x44')]['id']}});}})[_0x0a9e('0x23')](function(_0x3a9a85){if(_0x3a9a85){_0x22063c=_0x3a9a85;return _0x22063c['removeAgents'](_0x2a563d);}})[_0x0a9e('0x23')](function(_0x31d25a){if(_0x22063c){return _0x22063c[_0x0a9e('0x67')](_0x5b74c3[_0x0a9e('0x2e')][_0x0a9e('0x66')]);}})[_0x0a9e('0x23')](handleEntityNotFound(_0xb6e411,null))[_0x0a9e('0x23')](respondWithStatusCode(_0xb6e411,null))[_0x0a9e('0x42')](handleError(_0xb6e411,null));};exports[_0x0a9e('0x64')]=function(_0x31af8c,_0x151956,_0x3754e2){return db[_0x0a9e('0x2a')]['find']({'where':{'id':_0x31af8c[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x151956,null))[_0x0a9e('0x23')](function(_0x2ed526){if(_0x2ed526){return _0x2ed526[_0x0a9e('0x64')](_0x31af8c['body'][_0x0a9e('0x66')],_[_0x0a9e('0x68')](_0x31af8c['body'],[_0x0a9e('0x66'),'id'])||{})['spread'](function(_0x45d113){for(var _0x27041d=0x0;_0x27041d<_0x31af8c[_0x0a9e('0x47')][_0x0a9e('0x66')]['length'];_0x27041d+=0x1){socket[_0x0a9e('0x69')]('userMailQueue:save',{'UserId':_0x31af8c[_0x0a9e('0x47')][_0x0a9e('0x66')][_0x27041d],'MailQueueId':_0x31af8c['params']['id']});}return _0x45d113;});}})[_0x0a9e('0x23')](respondWithResult(_0x151956,null))[_0x0a9e('0x42')](handleError(_0x151956,null));};exports[_0x0a9e('0x6a')]=function(_0x4ab276,_0x4c788f,_0x1b82b7){var _0x6ba2be;return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x4ab276[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x4c788f,null))[_0x0a9e('0x23')](function(_0x3c75b9){if(_0x3c75b9){return _0x3c75b9[_0x0a9e('0x6a')](_0x4ab276['query'][_0x0a9e('0x66')])['then'](function(_0x287324){if(_[_0x0a9e('0x6b')](_0x4ab276[_0x0a9e('0x2e')][_0x0a9e('0x66')])){for(var _0x1b61d5=0x0;_0x1b61d5<_0x4ab276['query'][_0x0a9e('0x66')][_0x0a9e('0x32')];_0x1b61d5+=0x1){socket[_0x0a9e('0x69')](_0x0a9e('0x6c'),{'UserId':_0x4ab276[_0x0a9e('0x2e')]['ids'][_0x1b61d5],'MailQueueId':_0x4ab276['params']['id']});}}else{socket[_0x0a9e('0x69')]('userMailQueue:remove',{'UserId':_0x4ab276[_0x0a9e('0x2e')][_0x0a9e('0x66')],'MailQueueId':_0x4ab276[_0x0a9e('0x44')]['id']});}});}})[_0x0a9e('0x23')](respondWithStatusCode(_0x4c788f,null))[_0x0a9e('0x42')](handleError(_0x4c788f,null));};exports[_0x0a9e('0x6d')]=function(_0x596312,_0x4db918,_0x1889ed){var _0x5dfbe2={};var _0x2469d1={};var _0x5c689c;var _0x427ccc;return db['MailQueue']['findOne']({'where':{'id':_0x596312[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x4db918,null))['then'](function(_0x170af6){if(_0x170af6){_0x5c689c=_0x170af6;_0x2469d1[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db[_0x0a9e('0x55')][_0x0a9e('0x2b')]);_0x2469d1['query']=_['keys'](_0x596312[_0x0a9e('0x2e')]);_0x2469d1[_0x0a9e('0x36')]=_[_0x0a9e('0x2f')](_0x2469d1[_0x0a9e('0x2c')],_0x2469d1[_0x0a9e('0x2e')]);_0x5dfbe2['attributes']=_[_0x0a9e('0x2f')](_0x2469d1[_0x0a9e('0x2c')],qs['fields'](_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x5dfbe2[_0x0a9e('0x30')]=_0x5dfbe2[_0x0a9e('0x30')][_0x0a9e('0x32')]?_0x5dfbe2[_0x0a9e('0x30')]:_0x2469d1[_0x0a9e('0x2c')];_0x5dfbe2[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0x596312[_0x0a9e('0x2e')]['sort']);_0x5dfbe2[_0x0a9e('0x39')]=qs[_0x0a9e('0x36')](_[_0x0a9e('0x52')](_0x596312[_0x0a9e('0x2e')],_0x2469d1[_0x0a9e('0x36')]));if(_0x596312['query']['filter']){_0x5dfbe2[_0x0a9e('0x39')]=_[_0x0a9e('0x38')](_0x5dfbe2[_0x0a9e('0x39')],{'$or':_[_0x0a9e('0x3a')](_0x5dfbe2[_0x0a9e('0x30')],function(_0x59e46f){var _0x1339d0={};_0x1339d0[_0x59e46f]={'$like':'%'+_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x1339d0;})});}_0x5dfbe2=_['merge']({},_0x5dfbe2,_0x596312[_0x0a9e('0x3e')]);return _0x5c689c['getAgents'](_0x5dfbe2);}})[_0x0a9e('0x23')](function(_0x4799d4){if(_0x4799d4){_0x427ccc=_0x4799d4[_0x0a9e('0x32')];if(!_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x33')]('nolimit')){_0x5dfbe2[_0x0a9e('0x1d')]=qs['limit'](_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x1d')]);_0x5dfbe2[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0x596312[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);}return _0x5c689c[_0x0a9e('0x6d')](_0x5dfbe2);}})[_0x0a9e('0x23')](function(_0x2aaf07){if(_0x2aaf07){return _0x2aaf07?{'count':_0x427ccc,'rows':_0x2aaf07}:null;}})[_0x0a9e('0x23')](respondWithResult(_0x4db918,null))[_0x0a9e('0x42')](handleError(_0x4db918,null));};
\ No newline at end of file
index d4780d8..c9f8505 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x77bd=['../../mysqldb','setMaxListeners','update','remove','emit','hasOwnProperty'];(function(_0x53337e,_0x176938){var _0x1fc109=function(_0x9b6ea9){while(--_0x9b6ea9){_0x53337e['push'](_0x53337e['shift']());}};_0x1fc109(++_0x176938);}(_0x77bd,0x1d4));var _0xd77b=function(_0x4fa489,_0x4cba6b){_0x4fa489=_0x4fa489-0x0;var _0x41d2ce=_0x77bd[_0x4fa489];return _0x41d2ce;};'use strict';var EventEmitter=require('events');var MailQueue=require(_0xd77b('0x0'))['db']['MailQueue'];var MailQueueEvents=new EventEmitter();MailQueueEvents[_0xd77b('0x1')](0x0);var events={'afterCreate':'save','afterUpdate':_0xd77b('0x2'),'afterDestroy':_0xd77b('0x3')};function emitEvent(_0x5976a3){return function(_0xe26a46,_0x320849,_0x1acf52){MailQueueEvents[_0xd77b('0x4')](_0x5976a3+':'+_0xe26a46['id'],_0xe26a46);MailQueueEvents['emit'](_0x5976a3,_0xe26a46);_0x1acf52(null);};}for(var e in events){if(events[_0xd77b('0x5')](e)){var event=events[e];MailQueue['hook'](e,emitEvent(event));}}module['exports']=MailQueueEvents;
\ No newline at end of file
+var _0xb32c=['update','remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','MailQueue','setMaxListeners','save'];(function(_0xdf606e,_0x50217f){var _0xfa2a04=function(_0xea9819){while(--_0xea9819){_0xdf606e['push'](_0xdf606e['shift']());}};_0xfa2a04(++_0x50217f);}(_0xb32c,0xc1));var _0xcb32=function(_0xa64177,_0x4594db){_0xa64177=_0xa64177-0x0;var _0x16e911=_0xb32c[_0xa64177];return _0x16e911;};'use strict';var EventEmitter=require(_0xcb32('0x0'));var MailQueue=require(_0xcb32('0x1'))['db'][_0xcb32('0x2')];var MailQueueEvents=new EventEmitter();MailQueueEvents[_0xcb32('0x3')](0x0);var events={'afterCreate':_0xcb32('0x4'),'afterUpdate':_0xcb32('0x5'),'afterDestroy':_0xcb32('0x6')};function emitEvent(_0x29a504){return function(_0xdba168,_0x2b1a4e,_0x1e6ac5){MailQueueEvents[_0xcb32('0x7')](_0x29a504+':'+_0xdba168['id'],_0xdba168);MailQueueEvents[_0xcb32('0x7')](_0x29a504,_0xdba168);_0x1e6ac5(null);};}for(var e in events){if(events[_0xcb32('0x8')](e)){var event=events[e];MailQueue[_0xcb32('0x9')](e,emitEvent(event));}}module[_0xcb32('0xa')]=MailQueueEvents;
\ No newline at end of file
index ab56531..bc54db9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x88e0=['exports','define','MailQueue','mail_queues','lodash','util','../../config/logger','bluebird'];(function(_0x4aa9a4,_0x4cdce3){var _0x8eec91=function(_0x3bf29f){while(--_0x3bf29f){_0x4aa9a4['push'](_0x4aa9a4['shift']());}};_0x8eec91(++_0x4cdce3);}(_0x88e0,0x1cc));var _0x088e=function(_0x5b7258,_0x29cb60){_0x5b7258=_0x5b7258-0x0;var _0x1dce26=_0x88e0[_0x5b7258];return _0x1dce26;};'use strict';var _=require(_0x088e('0x0'));var util=require(_0x088e('0x1'));var logger=require(_0x088e('0x2'))('api');var moment=require('moment');var BPromise=require(_0x088e('0x3'));var rp=require('request-promise');var attributes=require('./mailQueue.attributes');module[_0x088e('0x4')]=function(_0x22b5c3,_0x1a3fd2){return _0x22b5c3[_0x088e('0x5')](_0x088e('0x6'),attributes,{'tableName':_0x088e('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe7e6=['moment','bluebird','request-promise','exports','define','MailQueue','mail_queues','lodash','util','../../config/logger'];(function(_0x87c166,_0x58ffcf){var _0x41217a=function(_0x488c6a){while(--_0x488c6a){_0x87c166['push'](_0x87c166['shift']());}};_0x41217a(++_0x58ffcf);}(_0xe7e6,0x1d3));var _0x6e7e=function(_0x3b67e9,_0x5697a7){_0x3b67e9=_0x3b67e9-0x0;var _0x5a3f64=_0xe7e6[_0x3b67e9];return _0x5a3f64;};'use strict';var _=require(_0x6e7e('0x0'));var util=require(_0x6e7e('0x1'));var logger=require(_0x6e7e('0x2'))('api');var moment=require(_0x6e7e('0x3'));var BPromise=require(_0x6e7e('0x4'));var rp=require(_0x6e7e('0x5'));var attributes=require('./mailQueue.attributes');module[_0x6e7e('0x6')]=function(_0x730af1,_0x528b73){return _0x730af1[_0x6e7e('0x7')](_0x6e7e('0x8'),attributes,{'tableName':_0x6e7e('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 2e5972c..b5cf218 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7f07=['then','ShowMailQueue','where','lodash','util','randomstring','../../mysqldb','../../config/logger','rpc','client','defaults','redis','localhost','register','request','info','MailQueue,\x20%s,\x20%s','debug','MailQueue,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','GetMailQueue','findAll','options','raw','attributes','limit','include','map','model'];(function(_0x3b5250,_0x7a0b2c){var _0xc844a1=function(_0x2fbc98){while(--_0x2fbc98){_0x3b5250['push'](_0x3b5250['shift']());}};_0xc844a1(++_0x7a0b2c);}(_0x7f07,0x161));var _0x77f0=function(_0x404b9a,_0xca0480){_0x404b9a=_0x404b9a-0x0;var _0x30ba61=_0x7f07[_0x404b9a];return _0x30ba61;};'use strict';var _=require(_0x77f0('0x0'));var util=require(_0x77f0('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x77f0('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x77f0('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x77f0('0x4'))(_0x77f0('0x5'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x77f0('0x6')]['http']({'port':0x232a});config['redis']=_[_0x77f0('0x7')](config[_0x77f0('0x8')],{'host':_0x77f0('0x9'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x77f0('0x8')]));require('./mailQueue.socket')[_0x77f0('0xa')](socket);function respondWithRpcPromise(_0x3e2090,_0x13916c,_0x2db051){return new BPromise(function(_0x440224,_0x15a0fb){return client[_0x77f0('0xb')](_0x3e2090,_0x2db051)['then'](function(_0x27a2dd){logger[_0x77f0('0xc')](_0x77f0('0xd'),_0x13916c,'request\x20sent');logger[_0x77f0('0xe')](_0x77f0('0xf'),_0x13916c,_0x77f0('0x10'),JSON[_0x77f0('0x11')](_0x27a2dd));if(_0x27a2dd[_0x77f0('0x12')]){if(_0x27a2dd[_0x77f0('0x12')][_0x77f0('0x13')]===0x1f4){logger[_0x77f0('0x12')](_0x77f0('0xd'),_0x13916c,_0x27a2dd[_0x77f0('0x12')][_0x77f0('0x14')]);return _0x15a0fb(_0x27a2dd[_0x77f0('0x12')][_0x77f0('0x14')]);}logger[_0x77f0('0x12')](_0x77f0('0xd'),_0x13916c,_0x27a2dd[_0x77f0('0x12')][_0x77f0('0x14')]);return _0x440224(_0x27a2dd[_0x77f0('0x12')][_0x77f0('0x14')]);}else{logger['info'](_0x77f0('0xd'),_0x13916c,_0x77f0('0x10'));_0x440224(_0x27a2dd[_0x77f0('0x15')][_0x77f0('0x14')]);}})[_0x77f0('0x16')](function(_0x248473){logger[_0x77f0('0x12')](_0x77f0('0xd'),_0x13916c,_0x248473);_0x15a0fb(_0x248473);});});}exports[_0x77f0('0x17')]=function(_0x43de4d){var _0x15393a=this;return new Promise(function(_0x5cdbe7,_0x385885){return db['MailQueue'][_0x77f0('0x18')]({'raw':_0x43de4d[_0x77f0('0x19')]?_0x43de4d['options'][_0x77f0('0x1a')]===undefined?!![]:![]:!![],'where':_0x43de4d[_0x77f0('0x19')]?_0x43de4d[_0x77f0('0x19')]['where']||null:null,'attributes':_0x43de4d['options']?_0x43de4d[_0x77f0('0x19')][_0x77f0('0x1b')]||null:null,'limit':_0x43de4d[_0x77f0('0x19')]?_0x43de4d['options'][_0x77f0('0x1c')]||null:null,'include':_0x43de4d[_0x77f0('0x19')]?_0x43de4d[_0x77f0('0x19')][_0x77f0('0x1d')]?_[_0x77f0('0x1e')](_0x43de4d['options'][_0x77f0('0x1d')],function(_0x111541){return{'model':db[_0x111541[_0x77f0('0x1f')]],'as':_0x111541['as'],'attributes':_0x111541['attributes'],'include':_0x111541[_0x77f0('0x1d')]?_[_0x77f0('0x1e')](_0x111541['include'],function(_0x5824a2){return{'model':db[_0x5824a2[_0x77f0('0x1f')]],'as':_0x5824a2['as'],'attributes':_0x5824a2[_0x77f0('0x1b')],'include':_0x5824a2['include']?_[_0x77f0('0x1e')](_0x5824a2[_0x77f0('0x1d')],function(_0x25012f){return{'model':db[_0x25012f[_0x77f0('0x1f')]],'as':_0x25012f['as'],'attributes':_0x25012f['attributes']};}):[]};}):[]};}):[]:[]})[_0x77f0('0x20')](function(_0x57519b){logger[_0x77f0('0xc')](_0x77f0('0x17'),_0x43de4d);logger['debug']('GetMailQueue',_0x43de4d,JSON[_0x77f0('0x11')](_0x57519b));_0x5cdbe7(_0x57519b);})[_0x77f0('0x16')](function(_0x174f1e){logger[_0x77f0('0x12')](_0x77f0('0x17'),_0x174f1e[_0x77f0('0x14')],_0x43de4d);_0x385885(_0x15393a[_0x77f0('0x12')](0x1f4,_0x174f1e['message']));});});};exports[_0x77f0('0x21')]=function(_0x50da93){var _0x42c756=this;return new Promise(function(_0x3a2c68,_0x7c5c18){return db['MailQueue']['find']({'raw':_0x50da93[_0x77f0('0x19')]?_0x50da93[_0x77f0('0x19')][_0x77f0('0x1a')]===undefined?!![]:![]:!![],'where':_0x50da93[_0x77f0('0x19')]?_0x50da93[_0x77f0('0x19')][_0x77f0('0x22')]||null:null,'attributes':_0x50da93['options']?_0x50da93[_0x77f0('0x19')][_0x77f0('0x1b')]||null:null,'include':_0x50da93[_0x77f0('0x19')]?_0x50da93[_0x77f0('0x19')][_0x77f0('0x1d')]?_[_0x77f0('0x1e')](_0x50da93[_0x77f0('0x19')][_0x77f0('0x1d')],function(_0x29df9e){return{'model':db[_0x29df9e[_0x77f0('0x1f')]],'as':_0x29df9e['as'],'attributes':_0x29df9e[_0x77f0('0x1b')],'include':_0x29df9e['include']?_[_0x77f0('0x1e')](_0x29df9e[_0x77f0('0x1d')],function(_0x1a7c61){return{'model':db[_0x1a7c61[_0x77f0('0x1f')]],'as':_0x1a7c61['as'],'attributes':_0x1a7c61[_0x77f0('0x1b')],'include':_0x1a7c61['include']?_[_0x77f0('0x1e')](_0x1a7c61[_0x77f0('0x1d')],function(_0x36c51e){return{'model':db[_0x36c51e['model']],'as':_0x36c51e['as'],'attributes':_0x36c51e[_0x77f0('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x41b0c8){logger['info'](_0x77f0('0x21'),_0x50da93);logger[_0x77f0('0xe')](_0x77f0('0x21'),_0x50da93,JSON['stringify'](_0x41b0c8));_0x3a2c68(_0x41b0c8);})[_0x77f0('0x16')](function(_0xafafe5){logger[_0x77f0('0x12')](_0x77f0('0x21'),_0xafafe5['message'],_0x50da93);_0x7c5c18(_0x42c756[_0x77f0('0x12')](0x1f4,_0xafafe5[_0x77f0('0x14')]));});});};
\ No newline at end of file
+var _0xc99f=['redis','defaults','socket.io-emitter','./mailQueue.socket','register','request','then','info','MailQueue,\x20%s,\x20%s','request\x20sent','debug','MailQueue,\x20%s,\x20%s,\x20%s','error','code','message','findAll','options','raw','where','attributes','limit','include','model','GetMailQueue','stringify','catch','ShowMailQueue','find','map','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x2e7bcc,_0x233bd9){var _0x3fc71c=function(_0x17006b){while(--_0x17006b){_0x2e7bcc['push'](_0x2e7bcc['shift']());}};_0x3fc71c(++_0x233bd9);}(_0xc99f,0x1eb));var _0xfc99=function(_0x3b5bca,_0x326805){_0x3b5bca=_0x3b5bca-0x0;var _0x39833=_0xc99f[_0x3b5bca];return _0x39833;};'use strict';var _=require(_0xfc99('0x0'));var util=require(_0xfc99('0x1'));var moment=require(_0xfc99('0x2'));var BPromise=require(_0xfc99('0x3'));var rs=require(_0xfc99('0x4'));var fs=require('fs');var Redis=require(_0xfc99('0x5'));var db=require(_0xfc99('0x6'))['db'];var utils=require(_0xfc99('0x7'));var logger=require(_0xfc99('0x8'))(_0xfc99('0x9'));var config=require(_0xfc99('0xa'));var jayson=require(_0xfc99('0xb'));var client=jayson[_0xfc99('0xc')]['http']({'port':0x232a});config[_0xfc99('0xd')]=_[_0xfc99('0xe')](config[_0xfc99('0xd')],{'host':'localhost','port':0x18eb});var socket=require(_0xfc99('0xf'))(new Redis(config[_0xfc99('0xd')]));require(_0xfc99('0x10'))[_0xfc99('0x11')](socket);function respondWithRpcPromise(_0x218faf,_0xff5822,_0x3585a1){return new BPromise(function(_0x5e5e8d,_0x1307fe){return client[_0xfc99('0x12')](_0x218faf,_0x3585a1)[_0xfc99('0x13')](function(_0x43c052){logger[_0xfc99('0x14')](_0xfc99('0x15'),_0xff5822,_0xfc99('0x16'));logger[_0xfc99('0x17')](_0xfc99('0x18'),_0xff5822,_0xfc99('0x16'),JSON['stringify'](_0x43c052));if(_0x43c052[_0xfc99('0x19')]){if(_0x43c052[_0xfc99('0x19')][_0xfc99('0x1a')]===0x1f4){logger[_0xfc99('0x19')](_0xfc99('0x15'),_0xff5822,_0x43c052[_0xfc99('0x19')][_0xfc99('0x1b')]);return _0x1307fe(_0x43c052['error']['message']);}logger[_0xfc99('0x19')](_0xfc99('0x15'),_0xff5822,_0x43c052[_0xfc99('0x19')][_0xfc99('0x1b')]);return _0x5e5e8d(_0x43c052[_0xfc99('0x19')][_0xfc99('0x1b')]);}else{logger[_0xfc99('0x14')](_0xfc99('0x15'),_0xff5822,_0xfc99('0x16'));_0x5e5e8d(_0x43c052['result'][_0xfc99('0x1b')]);}})['catch'](function(_0x32ba4a){logger[_0xfc99('0x19')](_0xfc99('0x15'),_0xff5822,_0x32ba4a);_0x1307fe(_0x32ba4a);});});}exports['GetMailQueue']=function(_0x53b082){var _0x3fa5ed=this;return new Promise(function(_0x22c824,_0x3cd06f){return db['MailQueue'][_0xfc99('0x1c')]({'raw':_0x53b082['options']?_0x53b082[_0xfc99('0x1d')][_0xfc99('0x1e')]===undefined?!![]:![]:!![],'where':_0x53b082[_0xfc99('0x1d')]?_0x53b082['options'][_0xfc99('0x1f')]||null:null,'attributes':_0x53b082[_0xfc99('0x1d')]?_0x53b082[_0xfc99('0x1d')][_0xfc99('0x20')]||null:null,'limit':_0x53b082['options']?_0x53b082[_0xfc99('0x1d')][_0xfc99('0x21')]||null:null,'include':_0x53b082['options']?_0x53b082[_0xfc99('0x1d')]['include']?_['map'](_0x53b082['options'][_0xfc99('0x22')],function(_0x381566){return{'model':db[_0x381566[_0xfc99('0x23')]],'as':_0x381566['as'],'attributes':_0x381566['attributes'],'include':_0x381566['include']?_['map'](_0x381566[_0xfc99('0x22')],function(_0xe7a8f7){return{'model':db[_0xe7a8f7['model']],'as':_0xe7a8f7['as'],'attributes':_0xe7a8f7['attributes'],'include':_0xe7a8f7['include']?_['map'](_0xe7a8f7['include'],function(_0x287da0){return{'model':db[_0x287da0['model']],'as':_0x287da0['as'],'attributes':_0x287da0[_0xfc99('0x20')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x30de94){logger[_0xfc99('0x14')](_0xfc99('0x24'),_0x53b082);logger[_0xfc99('0x17')](_0xfc99('0x24'),_0x53b082,JSON[_0xfc99('0x25')](_0x30de94));_0x22c824(_0x30de94);})[_0xfc99('0x26')](function(_0x1850aa){logger[_0xfc99('0x19')]('GetMailQueue',_0x1850aa[_0xfc99('0x1b')],_0x53b082);_0x3cd06f(_0x3fa5ed[_0xfc99('0x19')](0x1f4,_0x1850aa[_0xfc99('0x1b')]));});});};exports[_0xfc99('0x27')]=function(_0x48f791){var _0x40fd81=this;return new Promise(function(_0x51b9ed,_0x97c15c){return db['MailQueue'][_0xfc99('0x28')]({'raw':_0x48f791[_0xfc99('0x1d')]?_0x48f791['options'][_0xfc99('0x1e')]===undefined?!![]:![]:!![],'where':_0x48f791[_0xfc99('0x1d')]?_0x48f791[_0xfc99('0x1d')]['where']||null:null,'attributes':_0x48f791['options']?_0x48f791[_0xfc99('0x1d')][_0xfc99('0x20')]||null:null,'include':_0x48f791[_0xfc99('0x1d')]?_0x48f791['options'][_0xfc99('0x22')]?_[_0xfc99('0x29')](_0x48f791[_0xfc99('0x1d')][_0xfc99('0x22')],function(_0x2e94d7){return{'model':db[_0x2e94d7[_0xfc99('0x23')]],'as':_0x2e94d7['as'],'attributes':_0x2e94d7[_0xfc99('0x20')],'include':_0x2e94d7[_0xfc99('0x22')]?_[_0xfc99('0x29')](_0x2e94d7[_0xfc99('0x22')],function(_0x430da7){return{'model':db[_0x430da7['model']],'as':_0x430da7['as'],'attributes':_0x430da7[_0xfc99('0x20')],'include':_0x430da7[_0xfc99('0x22')]?_['map'](_0x430da7[_0xfc99('0x22')],function(_0x49c3fa){return{'model':db[_0x49c3fa[_0xfc99('0x23')]],'as':_0x49c3fa['as'],'attributes':_0x49c3fa[_0xfc99('0x20')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x370294){logger[_0xfc99('0x14')](_0xfc99('0x27'),_0x48f791);logger[_0xfc99('0x17')]('ShowMailQueue',_0x48f791,JSON[_0xfc99('0x25')](_0x370294));_0x51b9ed(_0x370294);})['catch'](function(_0x13b7ea){logger['error']('ShowMailQueue',_0x13b7ea[_0xfc99('0x1b')],_0x48f791);_0x97c15c(_0x40fd81[_0xfc99('0x19')](0x1f4,_0x13b7ea[_0xfc99('0x1b')]));});});};
\ No newline at end of file
index 0ffc445..0d72986 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7dee=['emit','removeListener','register','mailQueue:','./mailQueue.events','save','update'];(function(_0x2978a9,_0x3d745f){var _0x3aaaf7=function(_0x4a484e){while(--_0x4a484e){_0x2978a9['push'](_0x2978a9['shift']());}};_0x3aaaf7(++_0x3d745f);}(_0x7dee,0x1e0));var _0xe7de=function(_0x42ba34,_0x3ad914){_0x42ba34=_0x42ba34-0x0;var _0x24d538=_0x7dee[_0x42ba34];return _0x24d538;};'use strict';var MailQueueEvents=require(_0xe7de('0x0'));var events=[_0xe7de('0x1'),'remove',_0xe7de('0x2')];function createListener(_0x1e9ff3,_0x1da39e){return function(_0x3a8487){_0x1da39e[_0xe7de('0x3')](_0x1e9ff3,_0x3a8487);};}function removeListener(_0x39cbea,_0xa62df1){return function(){MailQueueEvents[_0xe7de('0x4')](_0x39cbea,_0xa62df1);};}exports[_0xe7de('0x5')]=function(_0x4a1ae8){for(var _0x4919bc=0x0,_0x31d375=events['length'];_0x4919bc<_0x31d375;_0x4919bc++){var _0x5efd51=events[_0x4919bc];var _0x36dfc8=createListener(_0xe7de('0x6')+_0x5efd51,_0x4a1ae8);MailQueueEvents['on'](_0x5efd51,_0x36dfc8);}};
\ No newline at end of file
+var _0xdd51=['mailQueue:','./mailQueue.events','remove','update','emit','register','length'];(function(_0x878d85,_0x1bbfff){var _0x2e4e48=function(_0x7041b0){while(--_0x7041b0){_0x878d85['push'](_0x878d85['shift']());}};_0x2e4e48(++_0x1bbfff);}(_0xdd51,0xfd));var _0x1dd5=function(_0x23e7c1,_0x35110c){_0x23e7c1=_0x23e7c1-0x0;var _0x1add43=_0xdd51[_0x23e7c1];return _0x1add43;};'use strict';var MailQueueEvents=require(_0x1dd5('0x0'));var events=['save',_0x1dd5('0x1'),_0x1dd5('0x2')];function createListener(_0x3820e6,_0x2d50b0){return function(_0x2cf151){_0x2d50b0[_0x1dd5('0x3')](_0x3820e6,_0x2cf151);};}function removeListener(_0x149787,_0x5bc01b){return function(){MailQueueEvents['removeListener'](_0x149787,_0x5bc01b);};}exports[_0x1dd5('0x4')]=function(_0x5a148d){for(var _0x259b2d=0x0,_0x25ad86=events[_0x1dd5('0x5')];_0x259b2d<_0x25ad86;_0x259b2d++){var _0x1c6b5c=events[_0x259b2d];var _0xd82399=createListener(_0x1dd5('0x6')+_0x1c6b5c,_0x5a148d);MailQueueEvents['on'](_0x1c6b5c,_0xd82399);}};
\ No newline at end of file
index f395e7f..1600d3b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0275=['../../config/environment','./mailQueueReport.controller','get','isAuthenticated','index','/describe','/:id','show','update','delete','destroy','exports','path','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x33c1be,_0x23f4e5){var _0x3e43da=function(_0x4e4dc8){while(--_0x4e4dc8){_0x33c1be['push'](_0x33c1be['shift']());}};_0x3e43da(++_0x23f4e5);}(_0x0275,0x1ac));var _0x5027=function(_0x3d6b01,_0x51d5ea){_0x3d6b01=_0x3d6b01-0x0;var _0x9331ea=_0x0275[_0x3d6b01];return _0x9331ea;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x5027('0x0'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x5027('0x1')]();var auth=require(_0x5027('0x2'));var interaction=require(_0x5027('0x3'));var config=require(_0x5027('0x4'));var controller=require(_0x5027('0x5'));router[_0x5027('0x6')]('/',auth[_0x5027('0x7')](),controller[_0x5027('0x8')]);router[_0x5027('0x6')](_0x5027('0x9'),auth['isAuthenticated'](),controller['describe']);router[_0x5027('0x6')](_0x5027('0xa'),auth[_0x5027('0x7')](),controller[_0x5027('0xb')]);router['post']('/',auth[_0x5027('0x7')](),controller['create']);router['put']('/:id',auth['isAuthenticated'](),controller[_0x5027('0xc')]);router[_0x5027('0xd')](_0x5027('0xa'),auth['isAuthenticated'](),controller[_0x5027('0xe')]);module[_0x5027('0xf')]=router;
\ No newline at end of file
+var _0x3e62=['../../config/environment','./mailQueueReport.controller','get','index','/describe','/:id','isAuthenticated','create','put','delete','destroy','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x2332e1,_0x433415){var _0x2c3bda=function(_0x253285){while(--_0x253285){_0x2332e1['push'](_0x2332e1['shift']());}};_0x2c3bda(++_0x433415);}(_0x3e62,0x9b));var _0x23e6=function(_0x47a047,_0x1f9c94){_0x47a047=_0x47a047-0x0;var _0x205a3c=_0x3e62[_0x47a047];return _0x205a3c;};'use strict';var multer=require(_0x23e6('0x0'));var util=require('util');var path=require(_0x23e6('0x1'));var timeout=require(_0x23e6('0x2'));var express=require(_0x23e6('0x3'));var router=express[_0x23e6('0x4')]();var auth=require(_0x23e6('0x5'));var interaction=require(_0x23e6('0x6'));var config=require(_0x23e6('0x7'));var controller=require(_0x23e6('0x8'));router[_0x23e6('0x9')]('/',auth['isAuthenticated'](),controller[_0x23e6('0xa')]);router[_0x23e6('0x9')](_0x23e6('0xb'),auth['isAuthenticated'](),controller['describe']);router[_0x23e6('0x9')](_0x23e6('0xc'),auth[_0x23e6('0xd')](),controller['show']);router['post']('/',auth[_0x23e6('0xd')](),controller[_0x23e6('0xe')]);router[_0x23e6('0xf')](_0x23e6('0xc'),auth[_0x23e6('0xd')](),controller['update']);router[_0x23e6('0x10')](_0x23e6('0xc'),auth[_0x23e6('0xd')](),controller[_0x23e6('0x11')]);module['exports']=router;
\ No newline at end of file
index 565ee02..3e122c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x659d=['moment','STRING','DATE'];(function(_0x3adb8e,_0x247ca2){var _0x3eacdb=function(_0x127ddf){while(--_0x127ddf){_0x3adb8e['push'](_0x3adb8e['shift']());}};_0x3eacdb(++_0x247ca2);}(_0x659d,0x13b));var _0xd659=function(_0x2e4aa2,_0x11956a){_0x2e4aa2=_0x2e4aa2-0x0;var _0x5e6092=_0x659d[_0x2e4aa2];return _0x5e6092;};'use strict';var moment=require(_0xd659('0x0'));var Sequelize=require('sequelize');module['exports']={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'from':{'type':Sequelize[_0xd659('0x1')]},'joinAt':{'type':Sequelize[_0xd659('0x2')]},'leaveAt':{'type':Sequelize[_0xd659('0x2')]},'acceptAt':{'type':Sequelize[_0xd659('0x2')]},'exitAt':{'type':Sequelize[_0xd659('0x2')]},'reason':{'type':Sequelize[_0xd659('0x1')]}};
\ No newline at end of file
+var _0xf599=['exports','STRING','DATE','moment','sequelize'];(function(_0x2f1762,_0xab43df){var _0x8ab21=function(_0xf6c1f5){while(--_0xf6c1f5){_0x2f1762['push'](_0x2f1762['shift']());}};_0x8ab21(++_0xab43df);}(_0xf599,0x148));var _0x9f59=function(_0x2a74f5,_0x542b0b){_0x2a74f5=_0x2a74f5-0x0;var _0x358258=_0xf599[_0x2a74f5];return _0x358258;};'use strict';var moment=require(_0x9f59('0x0'));var Sequelize=require(_0x9f59('0x1'));module[_0x9f59('0x2')]={'uniqueid':{'type':Sequelize[_0x9f59('0x3')],'allowNull':![]},'from':{'type':Sequelize[_0x9f59('0x3')]},'joinAt':{'type':Sequelize['DATE']},'leaveAt':{'type':Sequelize[_0x9f59('0x4')]},'acceptAt':{'type':Sequelize[_0x9f59('0x4')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize[_0x9f59('0x3')]}};
\ No newline at end of file
index aba2386..870d361 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x30c6=['filter','merge','map','type','VIRTUAL','field','options','includeAll','include','findAll','show','params','catch','create','body','find','describe','html-pdf','zip-dir','fast-json-patch','moment','bluebird','util','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../mysqldb','sendStatus','status','end','count','offset','limit','Content-Range','apply','save','update','then','error','stack','name','send','index','MailQueueReport','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','filters','pick'];(function(_0x271060,_0x3f86b1){var _0x40540b=function(_0x1735a7){while(--_0x1735a7){_0x271060['push'](_0x271060['shift']());}};_0x40540b(++_0x3f86b1);}(_0x30c6,0x125));var _0x630c=function(_0x5d3d76,_0x96f453){_0x5d3d76=_0x5d3d76-0x0;var _0x2382f9=_0x30c6[_0x5d3d76];return _0x2382f9;};'use strict';var pdf=require(_0x630c('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x630c('0x1'));var jsonpatch=require(_0x630c('0x2'));var rp=require('request-promise');var moment=require(_0x630c('0x3'));var BPromise=require(_0x630c('0x4'));var Mustache=require('mustache');var util=require(_0x630c('0x5'));var path=require('path');var sox=require(_0x630c('0x6'));var csv=require(_0x630c('0x7'));var ejs=require(_0x630c('0x8'));var fs=require('fs');var _=require(_0x630c('0x9'));var squel=require('squel');var crypto=require(_0x630c('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x630c('0xb'));var toCsv=require('to-csv');var querystring=require(_0x630c('0xc'));var Papa=require(_0x630c('0xd'));var authService=require(_0x630c('0xe'));var hardwareService=require(_0x630c('0xf'));var Redis=require(_0x630c('0x10'));var qs=require(_0x630c('0x11'));var logger=require(_0x630c('0x12'))(_0x630c('0x13'));var utils=require('../../config/utils');var config=require('../../config/environment');var db=require(_0x630c('0x14'))['db'];function respondWithStatusCode(_0x35a0e7,_0x3ac329){_0x3ac329=_0x3ac329||0xcc;return function(_0x2165cc){if(_0x2165cc){return _0x35a0e7[_0x630c('0x15')](_0x3ac329);}return _0x35a0e7[_0x630c('0x16')](_0x3ac329)[_0x630c('0x17')]();};}function respondWithResult(_0x7ea921,_0x90a551){_0x90a551=_0x90a551||0xc8;return function(_0x3adbb4){if(_0x3adbb4){return _0x7ea921[_0x630c('0x16')](_0x90a551)['json'](_0x3adbb4);}};}function respondWithFilteredResult(_0xf74eaf,_0x54ad7a){return function(_0x169c15){if(_0x169c15){var _0x2d23af=_0x169c15[_0x630c('0x18')],_0x261a14=_0x54ad7a[_0x630c('0x19')],_0x49020f=_0x54ad7a[_0x630c('0x19')]+_0x54ad7a[_0x630c('0x1a')],_0x851aef;if(_0x49020f>=_0x2d23af){_0x49020f=_0x2d23af;_0x851aef=0xc8;}else{_0x851aef=0xce;}_0xf74eaf[_0x630c('0x16')](_0x851aef);return _0xf74eaf['set'](_0x630c('0x1b'),_0x261a14+'-'+_0x49020f+'/'+_0x2d23af)['json'](_0x169c15);}return null;};}function patchUpdates(_0x4ae05b){return function(_0x173eb3){try{jsonpatch[_0x630c('0x1c')](_0x173eb3,_0x4ae05b,!![]);}catch(_0x3e4e4e){return BPromise['reject'](_0x3e4e4e);}return _0x173eb3[_0x630c('0x1d')]();};}function saveUpdates(_0x235160,_0x17841d){return function(_0x597606){if(_0x597606){return _0x597606[_0x630c('0x1e')](_0x235160)[_0x630c('0x1f')](function(_0x21a8c0){return _0x21a8c0;});}return null;};}function removeEntity(_0x2c5fb3,_0xcbbc4){return function(_0xaeb8a8){if(_0xaeb8a8){return _0xaeb8a8['destroy']()[_0x630c('0x1f')](function(){_0x2c5fb3[_0x630c('0x16')](0xcc)[_0x630c('0x17')]();});}};}function handleEntityNotFound(_0xfd88b2,_0x18ef36){return function(_0x2b9eaa){if(!_0x2b9eaa){_0xfd88b2[_0x630c('0x15')](0x194);}return _0x2b9eaa;};}function handleError(_0xf9acb2,_0x30daec){_0x30daec=_0x30daec||0x1f4;return function(_0x48279f){logger[_0x630c('0x20')](_0x48279f[_0x630c('0x21')]);if(_0x48279f[_0x630c('0x22')]){delete _0x48279f[_0x630c('0x22')];}_0xf9acb2[_0x630c('0x16')](_0x30daec)[_0x630c('0x23')](_0x48279f);};}exports[_0x630c('0x24')]=function(_0x243b3e,_0x39e342){var _0x220299={},_0x4017e0={},_0x174c71={'count':0x0,'rows':[]};var _0x7b2a22=db[_0x630c('0x25')][_0x630c('0x26')];_0x4017e0[_0x630c('0x27')]=_['keys'](_0x7b2a22);_0x4017e0['query']=_[_0x630c('0x28')](_0x243b3e[_0x630c('0x29')]);_0x4017e0['filters']=_[_0x630c('0x2a')](_0x4017e0[_0x630c('0x27')],_0x4017e0[_0x630c('0x29')]);_0x220299[_0x630c('0x2b')]=_[_0x630c('0x2a')](_0x4017e0[_0x630c('0x27')],qs['fields'](_0x243b3e[_0x630c('0x29')][_0x630c('0x2c')]));_0x220299[_0x630c('0x2b')]=_0x220299[_0x630c('0x2b')][_0x630c('0x2d')]?_0x220299['attributes']:_0x4017e0[_0x630c('0x27')];if(!_0x243b3e['query'][_0x630c('0x2e')](_0x630c('0x2f'))){_0x220299[_0x630c('0x1a')]=qs[_0x630c('0x1a')](_0x243b3e['query'][_0x630c('0x1a')]);_0x220299[_0x630c('0x19')]=qs[_0x630c('0x19')](_0x243b3e['query'][_0x630c('0x19')]);}_0x220299['order']=qs[_0x630c('0x30')](_0x243b3e[_0x630c('0x29')][_0x630c('0x30')]);_0x220299[_0x630c('0x31')]=qs[_0x630c('0x32')](_[_0x630c('0x33')](_0x243b3e[_0x630c('0x29')],_0x4017e0[_0x630c('0x32')]));if(_0x243b3e[_0x630c('0x29')][_0x630c('0x34')]){_0x220299['where']=_[_0x630c('0x35')](_0x220299[_0x630c('0x31')],{'$or':_[_0x630c('0x36')](_0x7b2a22,function(_0xbdb848){if(_0xbdb848[_0x630c('0x37')]['key']!==_0x630c('0x38')){var _0x19188e={};_0x19188e[_0xbdb848[_0x630c('0x39')]]={'$like':'%'+_0x243b3e[_0x630c('0x29')][_0x630c('0x34')]+'%'};return _0x19188e;}})});}_0x220299=_[_0x630c('0x35')]({},_0x220299,_0x243b3e[_0x630c('0x3a')]);var _0x562e10={'where':_0x220299[_0x630c('0x31')]};return db[_0x630c('0x25')][_0x630c('0x18')](_0x562e10)[_0x630c('0x1f')](function(_0x5689ce){_0x174c71[_0x630c('0x18')]=_0x5689ce;if(_0x243b3e[_0x630c('0x29')][_0x630c('0x3b')]){_0x220299[_0x630c('0x3c')]=[{'all':!![]}];}return db[_0x630c('0x25')][_0x630c('0x3d')](_0x220299);})[_0x630c('0x1f')](function(_0x23d5c6){_0x174c71['rows']=_0x23d5c6;return _0x174c71;})[_0x630c('0x1f')](respondWithFilteredResult(_0x39e342,_0x220299))['catch'](handleError(_0x39e342,null));};exports[_0x630c('0x3e')]=function(_0x18f082,_0x1fc9ab){var _0x3b35b7={'raw':!![],'where':{'id':_0x18f082[_0x630c('0x3f')]['id']}},_0xa032e2={};_0xa032e2[_0x630c('0x27')]=_['keys'](db['MailQueueReport'][_0x630c('0x26')]);_0xa032e2[_0x630c('0x29')]=_[_0x630c('0x28')](_0x18f082['query']);_0xa032e2[_0x630c('0x32')]=_[_0x630c('0x2a')](_0xa032e2[_0x630c('0x27')],_0xa032e2[_0x630c('0x29')]);_0x3b35b7['attributes']=_[_0x630c('0x2a')](_0xa032e2['model'],qs['fields'](_0x18f082[_0x630c('0x29')][_0x630c('0x2c')]));_0x3b35b7[_0x630c('0x2b')]=_0x3b35b7['attributes'][_0x630c('0x2d')]?_0x3b35b7['attributes']:_0xa032e2[_0x630c('0x27')];if(_0x18f082['query'][_0x630c('0x3b')]){_0x3b35b7['include']=[{'all':!![]}];}_0x3b35b7=_[_0x630c('0x35')]({},_0x3b35b7,_0x18f082[_0x630c('0x3a')]);return db[_0x630c('0x25')]['find'](_0x3b35b7)[_0x630c('0x1f')](handleEntityNotFound(_0x1fc9ab,null))['then'](respondWithResult(_0x1fc9ab,null))[_0x630c('0x40')](handleError(_0x1fc9ab,null));};exports[_0x630c('0x41')]=function(_0x8e93f0,_0x3450ef){return db[_0x630c('0x25')][_0x630c('0x41')](_0x8e93f0[_0x630c('0x42')],{})['then'](respondWithResult(_0x3450ef,0xc9))[_0x630c('0x40')](handleError(_0x3450ef,null));};exports[_0x630c('0x1e')]=function(_0xc928b7,_0x3d08bb){if(_0xc928b7[_0x630c('0x42')]['id']){delete _0xc928b7['body']['id'];}return db[_0x630c('0x25')][_0x630c('0x43')]({'where':{'id':_0xc928b7[_0x630c('0x3f')]['id']}})['then'](handleEntityNotFound(_0x3d08bb,null))[_0x630c('0x1f')](saveUpdates(_0xc928b7[_0x630c('0x42')],null))[_0x630c('0x1f')](respondWithResult(_0x3d08bb,null))[_0x630c('0x40')](handleError(_0x3d08bb,null));};exports['destroy']=function(_0x33bba1,_0x358546){return db['MailQueueReport'][_0x630c('0x43')]({'where':{'id':_0x33bba1[_0x630c('0x3f')]['id']}})['then'](handleEntityNotFound(_0x358546,null))[_0x630c('0x1f')](removeEntity(_0x358546,null))[_0x630c('0x40')](handleError(_0x358546,null));};exports[_0x630c('0x44')]=function(_0x300475,_0x52fe35){return db[_0x630c('0x25')][_0x630c('0x44')]()[_0x630c('0x1f')](respondWithResult(_0x52fe35,null))[_0x630c('0x40')](handleError(_0x52fe35,null));};
\ No newline at end of file
+var _0x8f1c=['rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','then','destroy','error','stack','name','send','rawAttributes','model','keys','query','intersection','attributes','fields','length','order','sort','filters','pick','filter','where','merge','map','type','VIRTUAL','field','options','MailQueueReport','include','rows','catch','show','params','includeAll','create','body','find','describe'];(function(_0x2cd2b4,_0x3d2ff2){var _0x396852=function(_0x30fd24){while(--_0x30fd24){_0x2cd2b4['push'](_0x2cd2b4['shift']());}};_0x396852(++_0x3d2ff2);}(_0x8f1c,0x88));var _0xc8f1=function(_0x510cc6,_0x329ff){_0x510cc6=_0x510cc6-0x0;var _0x2c0349=_0x8f1c[_0x510cc6];return _0x2c0349;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xc8f1('0x0'));var zipdir=require(_0xc8f1('0x1'));var jsonpatch=require(_0xc8f1('0x2'));var rp=require(_0xc8f1('0x3'));var moment=require('moment');var BPromise=require(_0xc8f1('0x4'));var Mustache=require(_0xc8f1('0x5'));var util=require(_0xc8f1('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0xc8f1('0x7'));var ejs=require(_0xc8f1('0x8'));var fs=require('fs');var _=require(_0xc8f1('0x9'));var squel=require('squel');var crypto=require(_0xc8f1('0xa'));var jsforce=require(_0xc8f1('0xb'));var deskjs=require(_0xc8f1('0xc'));var toCsv=require(_0xc8f1('0x7'));var querystring=require(_0xc8f1('0xd'));var Papa=require('papaparse');var authService=require(_0xc8f1('0xe'));var hardwareService=require(_0xc8f1('0xf'));var Redis=require('ioredis');var qs=require(_0xc8f1('0x10'));var logger=require('../../config/logger')('api');var utils=require(_0xc8f1('0x11'));var config=require(_0xc8f1('0x12'));var db=require(_0xc8f1('0x13'))['db'];function respondWithStatusCode(_0x3e5188,_0x5893e7){_0x5893e7=_0x5893e7||0xcc;return function(_0x2a7f29){if(_0x2a7f29){return _0x3e5188[_0xc8f1('0x14')](_0x5893e7);}return _0x3e5188[_0xc8f1('0x15')](_0x5893e7)[_0xc8f1('0x16')]();};}function respondWithResult(_0x169d8e,_0x58e39f){_0x58e39f=_0x58e39f||0xc8;return function(_0xf49b0){if(_0xf49b0){return _0x169d8e[_0xc8f1('0x15')](_0x58e39f)[_0xc8f1('0x17')](_0xf49b0);}};}function respondWithFilteredResult(_0x1b0bd8,_0x4474be){return function(_0xb777ed){if(_0xb777ed){var _0x5f09f0=_0xb777ed[_0xc8f1('0x18')],_0x7dd485=_0x4474be['offset'],_0x4d026f=_0x4474be[_0xc8f1('0x19')]+_0x4474be[_0xc8f1('0x1a')],_0x471253;if(_0x4d026f>=_0x5f09f0){_0x4d026f=_0x5f09f0;_0x471253=0xc8;}else{_0x471253=0xce;}_0x1b0bd8[_0xc8f1('0x15')](_0x471253);return _0x1b0bd8[_0xc8f1('0x1b')](_0xc8f1('0x1c'),_0x7dd485+'-'+_0x4d026f+'/'+_0x5f09f0)[_0xc8f1('0x17')](_0xb777ed);}return null;};}function patchUpdates(_0x27cfc9){return function(_0x111b3a){try{jsonpatch[_0xc8f1('0x1d')](_0x111b3a,_0x27cfc9,!![]);}catch(_0xa3b41){return BPromise[_0xc8f1('0x1e')](_0xa3b41);}return _0x111b3a['save']();};}function saveUpdates(_0x43f77c,_0x1c2916){return function(_0x3e959b){if(_0x3e959b){return _0x3e959b['update'](_0x43f77c)[_0xc8f1('0x1f')](function(_0x32e8cd){return _0x32e8cd;});}return null;};}function removeEntity(_0x2e9866,_0x35e07e){return function(_0x4f37bf){if(_0x4f37bf){return _0x4f37bf[_0xc8f1('0x20')]()[_0xc8f1('0x1f')](function(){_0x2e9866[_0xc8f1('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0x43b1db,_0x1c2fd6){return function(_0x4fde5f){if(!_0x4fde5f){_0x43b1db[_0xc8f1('0x14')](0x194);}return _0x4fde5f;};}function handleError(_0xc1b0b9,_0x170a3a){_0x170a3a=_0x170a3a||0x1f4;return function(_0x4c007a){logger[_0xc8f1('0x21')](_0x4c007a[_0xc8f1('0x22')]);if(_0x4c007a[_0xc8f1('0x23')]){delete _0x4c007a['name'];}_0xc1b0b9['status'](_0x170a3a)[_0xc8f1('0x24')](_0x4c007a);};}exports['index']=function(_0x4807cb,_0x5a3fa2){var _0x1f0945={},_0x1bae27={},_0x97576a={'count':0x0,'rows':[]};var _0x230e2c=db['MailQueueReport'][_0xc8f1('0x25')];_0x1bae27[_0xc8f1('0x26')]=_[_0xc8f1('0x27')](_0x230e2c);_0x1bae27[_0xc8f1('0x28')]=_[_0xc8f1('0x27')](_0x4807cb[_0xc8f1('0x28')]);_0x1bae27['filters']=_[_0xc8f1('0x29')](_0x1bae27[_0xc8f1('0x26')],_0x1bae27[_0xc8f1('0x28')]);_0x1f0945[_0xc8f1('0x2a')]=_[_0xc8f1('0x29')](_0x1bae27['model'],qs[_0xc8f1('0x2b')](_0x4807cb[_0xc8f1('0x28')][_0xc8f1('0x2b')]));_0x1f0945[_0xc8f1('0x2a')]=_0x1f0945[_0xc8f1('0x2a')][_0xc8f1('0x2c')]?_0x1f0945['attributes']:_0x1bae27[_0xc8f1('0x26')];if(!_0x4807cb[_0xc8f1('0x28')]['hasOwnProperty']('nolimit')){_0x1f0945[_0xc8f1('0x1a')]=qs[_0xc8f1('0x1a')](_0x4807cb[_0xc8f1('0x28')][_0xc8f1('0x1a')]);_0x1f0945[_0xc8f1('0x19')]=qs['offset'](_0x4807cb[_0xc8f1('0x28')]['offset']);}_0x1f0945[_0xc8f1('0x2d')]=qs['sort'](_0x4807cb['query'][_0xc8f1('0x2e')]);_0x1f0945['where']=qs[_0xc8f1('0x2f')](_[_0xc8f1('0x30')](_0x4807cb[_0xc8f1('0x28')],_0x1bae27[_0xc8f1('0x2f')]));if(_0x4807cb[_0xc8f1('0x28')][_0xc8f1('0x31')]){_0x1f0945[_0xc8f1('0x32')]=_[_0xc8f1('0x33')](_0x1f0945[_0xc8f1('0x32')],{'$or':_[_0xc8f1('0x34')](_0x230e2c,function(_0x3535f4){if(_0x3535f4[_0xc8f1('0x35')]['key']!==_0xc8f1('0x36')){var _0x3fbcc2={};_0x3fbcc2[_0x3535f4[_0xc8f1('0x37')]]={'$like':'%'+_0x4807cb[_0xc8f1('0x28')]['filter']+'%'};return _0x3fbcc2;}})});}_0x1f0945=_['merge']({},_0x1f0945,_0x4807cb[_0xc8f1('0x38')]);var _0x258971={'where':_0x1f0945['where']};return db[_0xc8f1('0x39')]['count'](_0x258971)[_0xc8f1('0x1f')](function(_0x5049f2){_0x97576a['count']=_0x5049f2;if(_0x4807cb['query']['includeAll']){_0x1f0945[_0xc8f1('0x3a')]=[{'all':!![]}];}return db[_0xc8f1('0x39')]['findAll'](_0x1f0945);})[_0xc8f1('0x1f')](function(_0x385ac1){_0x97576a[_0xc8f1('0x3b')]=_0x385ac1;return _0x97576a;})[_0xc8f1('0x1f')](respondWithFilteredResult(_0x5a3fa2,_0x1f0945))[_0xc8f1('0x3c')](handleError(_0x5a3fa2,null));};exports[_0xc8f1('0x3d')]=function(_0x2349c5,_0x83a5fb){var _0x45419f={'raw':!![],'where':{'id':_0x2349c5[_0xc8f1('0x3e')]['id']}},_0x23c0c9={};_0x23c0c9[_0xc8f1('0x26')]=_[_0xc8f1('0x27')](db[_0xc8f1('0x39')]['rawAttributes']);_0x23c0c9[_0xc8f1('0x28')]=_['keys'](_0x2349c5[_0xc8f1('0x28')]);_0x23c0c9[_0xc8f1('0x2f')]=_[_0xc8f1('0x29')](_0x23c0c9[_0xc8f1('0x26')],_0x23c0c9[_0xc8f1('0x28')]);_0x45419f['attributes']=_['intersection'](_0x23c0c9['model'],qs[_0xc8f1('0x2b')](_0x2349c5[_0xc8f1('0x28')][_0xc8f1('0x2b')]));_0x45419f[_0xc8f1('0x2a')]=_0x45419f[_0xc8f1('0x2a')]['length']?_0x45419f[_0xc8f1('0x2a')]:_0x23c0c9['model'];if(_0x2349c5[_0xc8f1('0x28')][_0xc8f1('0x3f')]){_0x45419f[_0xc8f1('0x3a')]=[{'all':!![]}];}_0x45419f=_[_0xc8f1('0x33')]({},_0x45419f,_0x2349c5[_0xc8f1('0x38')]);return db[_0xc8f1('0x39')]['find'](_0x45419f)['then'](handleEntityNotFound(_0x83a5fb,null))[_0xc8f1('0x1f')](respondWithResult(_0x83a5fb,null))['catch'](handleError(_0x83a5fb,null));};exports[_0xc8f1('0x40')]=function(_0x584e97,_0x3138bb){return db[_0xc8f1('0x39')][_0xc8f1('0x40')](_0x584e97['body'],{})['then'](respondWithResult(_0x3138bb,0xc9))[_0xc8f1('0x3c')](handleError(_0x3138bb,null));};exports['update']=function(_0x3e12e1,_0x46be0b){if(_0x3e12e1[_0xc8f1('0x41')]['id']){delete _0x3e12e1[_0xc8f1('0x41')]['id'];}return db[_0xc8f1('0x39')][_0xc8f1('0x42')]({'where':{'id':_0x3e12e1[_0xc8f1('0x3e')]['id']}})[_0xc8f1('0x1f')](handleEntityNotFound(_0x46be0b,null))[_0xc8f1('0x1f')](saveUpdates(_0x3e12e1[_0xc8f1('0x41')],null))['then'](respondWithResult(_0x46be0b,null))[_0xc8f1('0x3c')](handleError(_0x46be0b,null));};exports[_0xc8f1('0x20')]=function(_0x31acee,_0x30730e){return db['MailQueueReport'][_0xc8f1('0x42')]({'where':{'id':_0x31acee[_0xc8f1('0x3e')]['id']}})[_0xc8f1('0x1f')](handleEntityNotFound(_0x30730e,null))['then'](removeEntity(_0x30730e,null))[_0xc8f1('0x3c')](handleError(_0x30730e,null));};exports[_0xc8f1('0x43')]=function(_0x535a0b,_0x46425d){return db[_0xc8f1('0x39')][_0xc8f1('0x43')]()[_0xc8f1('0x1f')](respondWithResult(_0x46425d,null))[_0xc8f1('0x3c')](handleError(_0x46425d,null));};
\ No newline at end of file
index 2cf6116..beaa5a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4aaa=['bluebird','request-promise','./mailQueueReport.attributes','exports','define','MailQueueReport','report_mail_queue','uniqueid','lodash','util','../../config/logger','api','moment'];(function(_0x5bcfd6,_0x95456e){var _0x9141da=function(_0x2b3151){while(--_0x2b3151){_0x5bcfd6['push'](_0x5bcfd6['shift']());}};_0x9141da(++_0x95456e);}(_0x4aaa,0x126));var _0xa4aa=function(_0x427e6,_0x58a71d){_0x427e6=_0x427e6-0x0;var _0x1953ab=_0x4aaa[_0x427e6];return _0x1953ab;};'use strict';var _=require(_0xa4aa('0x0'));var util=require(_0xa4aa('0x1'));var logger=require(_0xa4aa('0x2'))(_0xa4aa('0x3'));var moment=require(_0xa4aa('0x4'));var BPromise=require(_0xa4aa('0x5'));var rp=require(_0xa4aa('0x6'));var attributes=require(_0xa4aa('0x7'));module[_0xa4aa('0x8')]=function(_0x4247c8,_0x5b9d01){return _0x4247c8[_0xa4aa('0x9')](_0xa4aa('0xa'),attributes,{'tableName':_0xa4aa('0xb'),'paranoid':![],'indexes':[{'name':_0xa4aa('0xc'),'fields':[_0xa4aa('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x16a4=['./mailQueueReport.attributes','exports','define','MailQueueReport','report_mail_queue','uniqueid','lodash','api','request-promise'];(function(_0x137dac,_0x1d2213){var _0x3c0f85=function(_0x5ba4c8){while(--_0x5ba4c8){_0x137dac['push'](_0x137dac['shift']());}};_0x3c0f85(++_0x1d2213);}(_0x16a4,0x1ec));var _0x416a=function(_0x3c0b83,_0x12b4dd){_0x3c0b83=_0x3c0b83-0x0;var _0x2c37c7=_0x16a4[_0x3c0b83];return _0x2c37c7;};'use strict';var _=require(_0x416a('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x416a('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x416a('0x2'));var attributes=require(_0x416a('0x3'));module[_0x416a('0x4')]=function(_0x533ef2,_0x6d3fcf){return _0x533ef2[_0x416a('0x5')](_0x416a('0x6'),attributes,{'tableName':_0x416a('0x7'),'paranoid':![],'indexes':[{'name':_0x416a('0x8'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index e9e9184..7af8591 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2005=['result','CreateMailQueueReport','MailQueueReport','create','options','debug','catch','update','body','where','attributes','limit','UpdateMailQueueReport','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','client','http','request','then','MailQueueReport,\x20%s,\x20%s','MailQueueReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info'];(function(_0x3c4dad,_0x25ffd5){var _0x1a4f49=function(_0x6fe6c){while(--_0x6fe6c){_0x3c4dad['push'](_0x3c4dad['shift']());}};_0x1a4f49(++_0x25ffd5);}(_0x2005,0x11d));var _0x5200=function(_0x2b869b,_0x81ce74){_0x2b869b=_0x2b869b-0x0;var _0x494958=_0x2005[_0x2b869b];return _0x494958;};'use strict';var _=require(_0x5200('0x0'));var util=require(_0x5200('0x1'));var moment=require(_0x5200('0x2'));var BPromise=require(_0x5200('0x3'));var rs=require(_0x5200('0x4'));var fs=require('fs');var Redis=require(_0x5200('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x5200('0x6'));var logger=require(_0x5200('0x7'))(_0x5200('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x5200('0x9')][_0x5200('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3b0c25,_0x1cc20f,_0x3db39f){return new BPromise(function(_0x404be8,_0x3ba14a){return client[_0x5200('0xb')](_0x3b0c25,_0x3db39f)[_0x5200('0xc')](function(_0x463754){logger['info'](_0x5200('0xd'),_0x1cc20f,'request\x20sent');logger['debug'](_0x5200('0xe'),_0x1cc20f,_0x5200('0xf'),JSON[_0x5200('0x10')](_0x463754));if(_0x463754[_0x5200('0x11')]){if(_0x463754['error'][_0x5200('0x12')]===0x1f4){logger[_0x5200('0x11')](_0x5200('0xd'),_0x1cc20f,_0x463754['error']['message']);return _0x3ba14a(_0x463754[_0x5200('0x11')][_0x5200('0x13')]);}logger[_0x5200('0x11')]('MailQueueReport,\x20%s,\x20%s',_0x1cc20f,_0x463754['error'][_0x5200('0x13')]);return _0x404be8(_0x463754[_0x5200('0x11')][_0x5200('0x13')]);}else{logger[_0x5200('0x14')]('MailQueueReport,\x20%s,\x20%s',_0x1cc20f,'request\x20sent');_0x404be8(_0x463754[_0x5200('0x15')][_0x5200('0x13')]);}})['catch'](function(_0x3aec62){logger[_0x5200('0x11')](_0x5200('0xd'),_0x1cc20f,_0x3aec62);_0x3ba14a(_0x3aec62);});});}exports[_0x5200('0x16')]=function(_0x5c3f21){var _0x303273=this;return new Promise(function(_0xdbd5b5,_0x1253cd){return db[_0x5200('0x17')][_0x5200('0x18')](_0x5c3f21['body'],{'raw':_0x5c3f21[_0x5200('0x19')]?_0x5c3f21['options']['raw']===undefined?!![]:![]:!![]})['then'](function(_0x5867d5){logger['info'](_0x5200('0x16'),_0x5c3f21);logger[_0x5200('0x1a')](_0x5200('0x16'),_0x5c3f21,JSON[_0x5200('0x10')](_0x5867d5));_0xdbd5b5(_0x5867d5);})[_0x5200('0x1b')](function(_0x26e571){logger[_0x5200('0x11')]('CreateMailQueueReport',_0x26e571['message'],_0x5c3f21);_0x1253cd(_0x303273[_0x5200('0x11')](0x1f4,_0x26e571[_0x5200('0x13')]));});});};exports['UpdateMailQueueReport']=function(_0x591ab1){var _0x58a708=this;return new Promise(function(_0xe1a35,_0x13d93){return db['MailQueueReport'][_0x5200('0x1c')](_0x591ab1[_0x5200('0x1d')],{'raw':_0x591ab1[_0x5200('0x19')]?_0x591ab1[_0x5200('0x19')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x591ab1[_0x5200('0x19')]?_0x591ab1[_0x5200('0x19')][_0x5200('0x1e')]||null:null,'attributes':_0x591ab1[_0x5200('0x19')]?_0x591ab1[_0x5200('0x19')][_0x5200('0x1f')]||null:null,'limit':_0x591ab1[_0x5200('0x19')]?_0x591ab1['options'][_0x5200('0x20')]||null:null})[_0x5200('0xc')](function(_0x37ba72){logger[_0x5200('0x14')](_0x5200('0x21'),_0x591ab1);logger[_0x5200('0x1a')]('UpdateMailQueueReport',_0x591ab1,JSON['stringify'](_0x37ba72));_0xe1a35(_0x37ba72);})[_0x5200('0x1b')](function(_0x3dfe76){logger[_0x5200('0x11')](_0x5200('0x21'),_0x3dfe76[_0x5200('0x13')],_0x591ab1);_0x13d93(_0x58a708[_0x5200('0x11')](0x1f4,_0x3dfe76[_0x5200('0x13')]));});});};
\ No newline at end of file
+var _0xc4f7=['catch','MailQueueReport','body','CreateMailQueueReport','stringify','update','options','where','limit','UpdateMailQueueReport','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','MailQueueReport,\x20%s,\x20%s','request\x20sent','debug','MailQueueReport,\x20%s,\x20%s,\x20%s','error','code','message','info','result'];(function(_0x211bc3,_0x5860c8){var _0x34c9a2=function(_0x4bfa37){while(--_0x4bfa37){_0x211bc3['push'](_0x211bc3['shift']());}};_0x34c9a2(++_0x5860c8);}(_0xc4f7,0x18a));var _0x7c4f=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xc4f7[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x7c4f('0x0'));var util=require(_0x7c4f('0x1'));var moment=require(_0x7c4f('0x2'));var BPromise=require('bluebird');var rs=require(_0x7c4f('0x3'));var fs=require('fs');var Redis=require(_0x7c4f('0x4'));var db=require(_0x7c4f('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x7c4f('0x6'))(_0x7c4f('0x7'));var config=require(_0x7c4f('0x8'));var jayson=require(_0x7c4f('0x9'));var client=jayson['client'][_0x7c4f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x297f67,_0xcd97cd,_0x23ec3a){return new BPromise(function(_0x421a68,_0x32bfcf){return client[_0x7c4f('0xb')](_0x297f67,_0x23ec3a)[_0x7c4f('0xc')](function(_0x54eee9){logger['info'](_0x7c4f('0xd'),_0xcd97cd,_0x7c4f('0xe'));logger[_0x7c4f('0xf')](_0x7c4f('0x10'),_0xcd97cd,'request\x20sent',JSON['stringify'](_0x54eee9));if(_0x54eee9[_0x7c4f('0x11')]){if(_0x54eee9[_0x7c4f('0x11')][_0x7c4f('0x12')]===0x1f4){logger[_0x7c4f('0x11')](_0x7c4f('0xd'),_0xcd97cd,_0x54eee9[_0x7c4f('0x11')]['message']);return _0x32bfcf(_0x54eee9[_0x7c4f('0x11')]['message']);}logger[_0x7c4f('0x11')](_0x7c4f('0xd'),_0xcd97cd,_0x54eee9['error'][_0x7c4f('0x13')]);return _0x421a68(_0x54eee9[_0x7c4f('0x11')]['message']);}else{logger[_0x7c4f('0x14')](_0x7c4f('0xd'),_0xcd97cd,_0x7c4f('0xe'));_0x421a68(_0x54eee9[_0x7c4f('0x15')][_0x7c4f('0x13')]);}})[_0x7c4f('0x16')](function(_0x118318){logger[_0x7c4f('0x11')]('MailQueueReport,\x20%s,\x20%s',_0xcd97cd,_0x118318);_0x32bfcf(_0x118318);});});}exports['CreateMailQueueReport']=function(_0x39d230){var _0x48d998=this;return new Promise(function(_0x59d1eb,_0x1a26ec){return db[_0x7c4f('0x17')]['create'](_0x39d230[_0x7c4f('0x18')],{'raw':_0x39d230['options']?_0x39d230['options']['raw']===undefined?!![]:![]:!![]})['then'](function(_0x265f11){logger[_0x7c4f('0x14')](_0x7c4f('0x19'),_0x39d230);logger[_0x7c4f('0xf')]('CreateMailQueueReport',_0x39d230,JSON[_0x7c4f('0x1a')](_0x265f11));_0x59d1eb(_0x265f11);})['catch'](function(_0xc5206b){logger['error'](_0x7c4f('0x19'),_0xc5206b[_0x7c4f('0x13')],_0x39d230);_0x1a26ec(_0x48d998[_0x7c4f('0x11')](0x1f4,_0xc5206b['message']));});});};exports['UpdateMailQueueReport']=function(_0x9f3202){var _0x49c9a4=this;return new Promise(function(_0x16aec9,_0x572318){return db[_0x7c4f('0x17')][_0x7c4f('0x1b')](_0x9f3202[_0x7c4f('0x18')],{'raw':_0x9f3202[_0x7c4f('0x1c')]?_0x9f3202[_0x7c4f('0x1c')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x9f3202[_0x7c4f('0x1c')]?_0x9f3202['options'][_0x7c4f('0x1d')]||null:null,'attributes':_0x9f3202[_0x7c4f('0x1c')]?_0x9f3202[_0x7c4f('0x1c')]['attributes']||null:null,'limit':_0x9f3202[_0x7c4f('0x1c')]?_0x9f3202[_0x7c4f('0x1c')][_0x7c4f('0x1e')]||null:null})[_0x7c4f('0xc')](function(_0x48cfd1){logger[_0x7c4f('0x14')](_0x7c4f('0x1f'),_0x9f3202);logger[_0x7c4f('0xf')](_0x7c4f('0x1f'),_0x9f3202,JSON['stringify'](_0x48cfd1));_0x16aec9(_0x48cfd1);})[_0x7c4f('0x16')](function(_0x28b2a3){logger[_0x7c4f('0x11')](_0x7c4f('0x1f'),_0x28b2a3[_0x7c4f('0x13')],_0x9f3202);_0x572318(_0x49c9a4[_0x7c4f('0x11')](0x1f4,_0x28b2a3['message']));});});};
\ No newline at end of file
index 2e74949..5f6f447 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ec2=['../../components/interaction/service','../../config/environment','exports','multer','util','path','connect-timeout','express','Router'];(function(_0x3e8c02,_0x1fe848){var _0x397eb8=function(_0x41a837){while(--_0x41a837){_0x3e8c02['push'](_0x3e8c02['shift']());}};_0x397eb8(++_0x1fe848);}(_0x6ec2,0x78));var _0x26ec=function(_0x54635c,_0x5bace9){_0x54635c=_0x54635c-0x0;var _0x1e7214=_0x6ec2[_0x54635c];return _0x1e7214;};'use strict';var multer=require(_0x26ec('0x0'));var util=require(_0x26ec('0x1'));var path=require(_0x26ec('0x2'));var timeout=require(_0x26ec('0x3'));var express=require(_0x26ec('0x4'));var router=express[_0x26ec('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x26ec('0x6'));var config=require(_0x26ec('0x7'));module[_0x26ec('0x8')]=router;
\ No newline at end of file
+var _0x4745=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util','path'];(function(_0x283909,_0x3f54cd){var _0xc61a62=function(_0x2a49d7){while(--_0x2a49d7){_0x283909['push'](_0x283909['shift']());}};_0xc61a62(++_0x3f54cd);}(_0x4745,0x1e7));var _0x5474=function(_0x484e36,_0x4482d8){_0x484e36=_0x484e36-0x0;var _0xafc85d=_0x4745[_0x484e36];return _0xafc85d;};'use strict';var multer=require(_0x5474('0x0'));var util=require(_0x5474('0x1'));var path=require(_0x5474('0x2'));var timeout=require(_0x5474('0x3'));var express=require(_0x5474('0x4'));var router=express[_0x5474('0x5')]();var auth=require(_0x5474('0x6'));var interaction=require(_0x5474('0x7'));var config=require(_0x5474('0x8'));module[_0x5474('0x9')]=router;
\ No newline at end of file
index fb20815..ceb99b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc36d=['exports','STRING','BOOLEAN','INTEGER','INBOX','sequelize'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xc36d,0x7d));var _0xdc36=function(_0x257e65,_0x3f4a68){_0x257e65=_0x257e65-0x0;var _0x3eef2f=_0xc36d[_0x257e65];return _0x3eef2f;};'use strict';var Sequelize=require(_0xdc36('0x0'));module[_0xdc36('0x1')]={'description':{'type':Sequelize[_0xdc36('0x2')]},'host':{'type':Sequelize[_0xdc36('0x2')]},'authentication':{'type':Sequelize[_0xdc36('0x3')],'defaultValue':!![]},'user':{'type':Sequelize[_0xdc36('0x2')],'unique':'username'},'password':{'type':Sequelize[_0xdc36('0x2')]},'port':{'type':Sequelize[_0xdc36('0x4')]},'tls':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'mailbox':{'type':Sequelize[_0xdc36('0x2')],'defaultValue':_0xdc36('0x5')},'connTimeout':{'type':Sequelize[_0xdc36('0x4')],'defaultValue':0xa},'authTimeout':{'type':Sequelize[_0xdc36('0x4')],'defaultValue':0x5},'service':{'type':Sequelize[_0xdc36('0x2')]}};
\ No newline at end of file
+var _0xe605=['exports','STRING','BOOLEAN','username','INTEGER','INBOX','sequelize'];(function(_0x185f65,_0x4d8080){var _0x132243=function(_0x413a89){while(--_0x413a89){_0x185f65['push'](_0x185f65['shift']());}};_0x132243(++_0x4d8080);}(_0xe605,0x92));var _0x5e60=function(_0x40dbe6,_0x402959){_0x40dbe6=_0x40dbe6-0x0;var _0x2f36b7=_0xe605[_0x40dbe6];return _0x2f36b7;};'use strict';var Sequelize=require(_0x5e60('0x0'));module[_0x5e60('0x1')]={'description':{'type':Sequelize['STRING']},'host':{'type':Sequelize[_0x5e60('0x2')]},'authentication':{'type':Sequelize[_0x5e60('0x3')],'defaultValue':!![]},'user':{'type':Sequelize[_0x5e60('0x2')],'unique':_0x5e60('0x4')},'password':{'type':Sequelize[_0x5e60('0x2')]},'port':{'type':Sequelize[_0x5e60('0x5')]},'tls':{'type':Sequelize[_0x5e60('0x3')],'defaultValue':!![]},'mailbox':{'type':Sequelize[_0x5e60('0x2')],'defaultValue':_0x5e60('0x6')},'connTimeout':{'type':Sequelize[_0x5e60('0x5')],'defaultValue':0xa},'authTimeout':{'type':Sequelize[_0x5e60('0x5')],'defaultValue':0x5},'service':{'type':Sequelize[_0x5e60('0x2')]}};
\ No newline at end of file
index 3fbef20..bf02808 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x13eb=['define','MailServerIn','mail_servers_in','lodash','util','api','moment','request-promise','./mailServerIn.attributes','exports'];(function(_0x66985c,_0x54f735){var _0xeaba02=function(_0xae86f3){while(--_0xae86f3){_0x66985c['push'](_0x66985c['shift']());}};_0xeaba02(++_0x54f735);}(_0x13eb,0x8f));var _0xb13e=function(_0x59ee41,_0xaf7db8){_0x59ee41=_0x59ee41-0x0;var _0x3ecd3e=_0x13eb[_0x59ee41];return _0x3ecd3e;};'use strict';var _=require(_0xb13e('0x0'));var util=require(_0xb13e('0x1'));var logger=require('../../config/logger')(_0xb13e('0x2'));var moment=require(_0xb13e('0x3'));var BPromise=require('bluebird');var rp=require(_0xb13e('0x4'));var attributes=require(_0xb13e('0x5'));module[_0xb13e('0x6')]=function(_0x4b3215,_0x4eb55b){return _0x4b3215[_0xb13e('0x7')](_0xb13e('0x8'),attributes,{'tableName':_0xb13e('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0457=['../../config/logger','moment','bluebird','request-promise','./mailServerIn.attributes','exports','define','mail_servers_in','util'];(function(_0x17c8a9,_0x531ca3){var _0x379aa6=function(_0x5ba780){while(--_0x5ba780){_0x17c8a9['push'](_0x17c8a9['shift']());}};_0x379aa6(++_0x531ca3);}(_0x0457,0x11f));var _0x7045=function(_0x39ab14,_0x1c6d59){_0x39ab14=_0x39ab14-0x0;var _0x5a661e=_0x0457[_0x39ab14];return _0x5a661e;};'use strict';var _=require('lodash');var util=require(_0x7045('0x0'));var logger=require(_0x7045('0x1'))('api');var moment=require(_0x7045('0x2'));var BPromise=require(_0x7045('0x3'));var rp=require(_0x7045('0x4'));var attributes=require(_0x7045('0x5'));module[_0x7045('0x6')]=function(_0x36df90,_0x5566a5){return _0x36df90[_0x7045('0x7')]('MailServerIn',attributes,{'tableName':_0x7045('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 46e026b..3fac54a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa14a=['request','then','info','MailServerIn,\x20%s,\x20%s','request\x20sent','debug','MailServerIn,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','MailServerIn','options','raw','attributes','limit','include','map','model','GetMailServerIn','lodash','moment','bluebird','randomstring','ioredis','rpc','../../config/environment','jayson/promise','http'];(function(_0x11b23a,_0x18173c){var _0x442155=function(_0x469708){while(--_0x469708){_0x11b23a['push'](_0x11b23a['shift']());}};_0x442155(++_0x18173c);}(_0xa14a,0x1b9));var _0xaa14=function(_0x5d4607,_0x6b5e7b){_0x5d4607=_0x5d4607-0x0;var _0x5e4a86=_0xa14a[_0x5d4607];return _0x5e4a86;};'use strict';var _=require(_0xaa14('0x0'));var util=require('util');var moment=require(_0xaa14('0x1'));var BPromise=require(_0xaa14('0x2'));var rs=require(_0xaa14('0x3'));var fs=require('fs');var Redis=require(_0xaa14('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xaa14('0x5'));var config=require(_0xaa14('0x6'));var jayson=require(_0xaa14('0x7'));var client=jayson['client'][_0xaa14('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x2b50ca,_0x427162,_0x553e49){return new BPromise(function(_0x34340b,_0x11b28a){return client[_0xaa14('0x9')](_0x2b50ca,_0x553e49)[_0xaa14('0xa')](function(_0xfe7f09){logger[_0xaa14('0xb')](_0xaa14('0xc'),_0x427162,_0xaa14('0xd'));logger[_0xaa14('0xe')](_0xaa14('0xf'),_0x427162,_0xaa14('0xd'),JSON[_0xaa14('0x10')](_0xfe7f09));if(_0xfe7f09[_0xaa14('0x11')]){if(_0xfe7f09[_0xaa14('0x11')]['code']===0x1f4){logger[_0xaa14('0x11')](_0xaa14('0xc'),_0x427162,_0xfe7f09[_0xaa14('0x11')][_0xaa14('0x12')]);return _0x11b28a(_0xfe7f09[_0xaa14('0x11')][_0xaa14('0x12')]);}logger['error'](_0xaa14('0xc'),_0x427162,_0xfe7f09[_0xaa14('0x11')][_0xaa14('0x12')]);return _0x34340b(_0xfe7f09['error']['message']);}else{logger[_0xaa14('0xb')](_0xaa14('0xc'),_0x427162,'request\x20sent');_0x34340b(_0xfe7f09[_0xaa14('0x13')][_0xaa14('0x12')]);}})[_0xaa14('0x14')](function(_0x50176b){logger[_0xaa14('0x11')](_0xaa14('0xc'),_0x427162,_0x50176b);_0x11b28a(_0x50176b);});});}exports['GetMailServerIn']=function(_0x5abc08){var _0x188cc3=this;return new Promise(function(_0x5c8258,_0x1d73fd){return db[_0xaa14('0x15')]['findAll']({'raw':_0x5abc08['options']?_0x5abc08[_0xaa14('0x16')][_0xaa14('0x17')]===undefined?!![]:![]:!![],'where':_0x5abc08[_0xaa14('0x16')]?_0x5abc08[_0xaa14('0x16')]['where']||null:null,'attributes':_0x5abc08[_0xaa14('0x16')]?_0x5abc08[_0xaa14('0x16')][_0xaa14('0x18')]||null:null,'limit':_0x5abc08[_0xaa14('0x16')]?_0x5abc08[_0xaa14('0x16')][_0xaa14('0x19')]||null:null,'include':_0x5abc08[_0xaa14('0x16')]?_0x5abc08['options'][_0xaa14('0x1a')]?_[_0xaa14('0x1b')](_0x5abc08[_0xaa14('0x16')]['include'],function(_0x11afc1){return{'model':db[_0x11afc1[_0xaa14('0x1c')]],'as':_0x11afc1['as'],'attributes':_0x11afc1[_0xaa14('0x18')],'include':_0x11afc1['include']?_[_0xaa14('0x1b')](_0x11afc1[_0xaa14('0x1a')],function(_0x2984b8){return{'model':db[_0x2984b8[_0xaa14('0x1c')]],'as':_0x2984b8['as'],'attributes':_0x2984b8[_0xaa14('0x18')],'include':_0x2984b8['include']?_['map'](_0x2984b8[_0xaa14('0x1a')],function(_0x8f8e45){return{'model':db[_0x8f8e45[_0xaa14('0x1c')]],'as':_0x8f8e45['as'],'attributes':_0x8f8e45[_0xaa14('0x18')]};}):[]};}):[]};}):[]:[]})[_0xaa14('0xa')](function(_0x5043f9){logger['info']('GetMailServerIn',_0x5abc08);logger['debug']('GetMailServerIn',_0x5abc08,JSON[_0xaa14('0x10')](_0x5043f9));_0x5c8258(_0x5043f9);})[_0xaa14('0x14')](function(_0x2ef4a7){logger[_0xaa14('0x11')](_0xaa14('0x1d'),_0x2ef4a7[_0xaa14('0x12')],_0x5abc08);_0x1d73fd(_0x188cc3[_0xaa14('0x11')](0x1f4,_0x2ef4a7[_0xaa14('0x12')]));});});};
\ No newline at end of file
+var _0x72b8=['catch','GetMailServerIn','MailServerIn','options','raw','where','attributes','limit','map','include','model','debug','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','MailServerIn,\x20%s,\x20%s','request\x20sent','MailServerIn,\x20%s,\x20%s,\x20%s','stringify','error','code','message'];(function(_0x1b8f14,_0xace83){var _0x1bc554=function(_0x4d005a){while(--_0x4d005a){_0x1b8f14['push'](_0x1b8f14['shift']());}};_0x1bc554(++_0xace83);}(_0x72b8,0xb6));var _0x872b=function(_0x3ab51d,_0x2fa01d){_0x3ab51d=_0x3ab51d-0x0;var _0x29a04e=_0x72b8[_0x3ab51d];return _0x29a04e;};'use strict';var _=require(_0x872b('0x0'));var util=require(_0x872b('0x1'));var moment=require(_0x872b('0x2'));var BPromise=require(_0x872b('0x3'));var rs=require(_0x872b('0x4'));var fs=require('fs');var Redis=require(_0x872b('0x5'));var db=require(_0x872b('0x6'))['db'];var utils=require(_0x872b('0x7'));var logger=require(_0x872b('0x8'))('rpc');var config=require(_0x872b('0x9'));var jayson=require(_0x872b('0xa'));var client=jayson[_0x872b('0xb')][_0x872b('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x573257,_0x57a85f,_0x68dabd){return new BPromise(function(_0x5591aa,_0xaa52d0){return client['request'](_0x573257,_0x68dabd)[_0x872b('0xd')](function(_0x28071d){logger[_0x872b('0xe')](_0x872b('0xf'),_0x57a85f,_0x872b('0x10'));logger['debug'](_0x872b('0x11'),_0x57a85f,_0x872b('0x10'),JSON[_0x872b('0x12')](_0x28071d));if(_0x28071d[_0x872b('0x13')]){if(_0x28071d[_0x872b('0x13')][_0x872b('0x14')]===0x1f4){logger['error'](_0x872b('0xf'),_0x57a85f,_0x28071d['error'][_0x872b('0x15')]);return _0xaa52d0(_0x28071d[_0x872b('0x13')][_0x872b('0x15')]);}logger[_0x872b('0x13')](_0x872b('0xf'),_0x57a85f,_0x28071d[_0x872b('0x13')][_0x872b('0x15')]);return _0x5591aa(_0x28071d['error'][_0x872b('0x15')]);}else{logger[_0x872b('0xe')](_0x872b('0xf'),_0x57a85f,_0x872b('0x10'));_0x5591aa(_0x28071d['result'][_0x872b('0x15')]);}})[_0x872b('0x16')](function(_0x5f1298){logger[_0x872b('0x13')](_0x872b('0xf'),_0x57a85f,_0x5f1298);_0xaa52d0(_0x5f1298);});});}exports[_0x872b('0x17')]=function(_0xba5030){var _0x51ea51=this;return new Promise(function(_0x4904ea,_0x4f99ef){return db[_0x872b('0x18')]['findAll']({'raw':_0xba5030['options']?_0xba5030[_0x872b('0x19')][_0x872b('0x1a')]===undefined?!![]:![]:!![],'where':_0xba5030[_0x872b('0x19')]?_0xba5030['options'][_0x872b('0x1b')]||null:null,'attributes':_0xba5030[_0x872b('0x19')]?_0xba5030[_0x872b('0x19')][_0x872b('0x1c')]||null:null,'limit':_0xba5030[_0x872b('0x19')]?_0xba5030[_0x872b('0x19')][_0x872b('0x1d')]||null:null,'include':_0xba5030[_0x872b('0x19')]?_0xba5030['options']['include']?_[_0x872b('0x1e')](_0xba5030[_0x872b('0x19')][_0x872b('0x1f')],function(_0x548044){return{'model':db[_0x548044['model']],'as':_0x548044['as'],'attributes':_0x548044[_0x872b('0x1c')],'include':_0x548044[_0x872b('0x1f')]?_[_0x872b('0x1e')](_0x548044['include'],function(_0x143c73){return{'model':db[_0x143c73['model']],'as':_0x143c73['as'],'attributes':_0x143c73[_0x872b('0x1c')],'include':_0x143c73['include']?_[_0x872b('0x1e')](_0x143c73[_0x872b('0x1f')],function(_0x2a148a){return{'model':db[_0x2a148a[_0x872b('0x20')]],'as':_0x2a148a['as'],'attributes':_0x2a148a[_0x872b('0x1c')]};}):[]};}):[]};}):[]:[]})[_0x872b('0xd')](function(_0x56810f){logger['info']('GetMailServerIn',_0xba5030);logger[_0x872b('0x21')]('GetMailServerIn',_0xba5030,JSON['stringify'](_0x56810f));_0x4904ea(_0x56810f);})[_0x872b('0x16')](function(_0xe971e2){logger[_0x872b('0x13')](_0x872b('0x17'),_0xe971e2[_0x872b('0x15')],_0xba5030);_0x4f99ef(_0x51ea51[_0x872b('0x13')](0x1f4,_0xe971e2[_0x872b('0x15')]));});});};
\ No newline at end of file
index 378cd4e..22a433e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0c98=['connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./mailServerOut.controller','get','index','isAuthenticated','post','create','put','/:id','destroy','multer','util','path'];(function(_0x47805d,_0x25a720){var _0x2d8dd8=function(_0x526aeb){while(--_0x526aeb){_0x47805d['push'](_0x47805d['shift']());}};_0x2d8dd8(++_0x25a720);}(_0x0c98,0xfc));var _0x80c9=function(_0x38fe92,_0x3ba625){_0x38fe92=_0x38fe92-0x0;var _0x4105a5=_0x0c98[_0x38fe92];return _0x4105a5;};'use strict';var multer=require(_0x80c9('0x0'));var util=require(_0x80c9('0x1'));var path=require(_0x80c9('0x2'));var timeout=require(_0x80c9('0x3'));var express=require(_0x80c9('0x4'));var router=express[_0x80c9('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x80c9('0x6'));var config=require(_0x80c9('0x7'));var controller=require(_0x80c9('0x8'));router[_0x80c9('0x9')]('/',auth['isAuthenticated'](),controller[_0x80c9('0xa')]);router[_0x80c9('0x9')]('/:id',auth[_0x80c9('0xb')](),controller['show']);router[_0x80c9('0xc')]('/',auth[_0x80c9('0xb')](),controller[_0x80c9('0xd')]);router[_0x80c9('0xe')](_0x80c9('0xf'),auth[_0x80c9('0xb')](),controller['update']);router['delete'](_0x80c9('0xf'),auth['isAuthenticated'](),controller[_0x80c9('0x10')]);module['exports']=router;
\ No newline at end of file
+var _0x05e6=['Router','../../components/auth/service','../../components/interaction/service','./mailServerOut.controller','get','show','put','/:id','update','delete','destroy','multer','util','path','express'];(function(_0x149b25,_0x2bb415){var _0x40b742=function(_0x103584){while(--_0x103584){_0x149b25['push'](_0x149b25['shift']());}};_0x40b742(++_0x2bb415);}(_0x05e6,0xdd));var _0x605e=function(_0x465028,_0x4570ac){_0x465028=_0x465028-0x0;var _0xb783d4=_0x05e6[_0x465028];return _0xb783d4;};'use strict';var multer=require(_0x605e('0x0'));var util=require(_0x605e('0x1'));var path=require(_0x605e('0x2'));var timeout=require('connect-timeout');var express=require(_0x605e('0x3'));var router=express[_0x605e('0x4')]();var auth=require(_0x605e('0x5'));var interaction=require(_0x605e('0x6'));var config=require('../../config/environment');var controller=require(_0x605e('0x7'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x605e('0x8')]('/:id',auth['isAuthenticated'](),controller[_0x605e('0x9')]);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0x605e('0xa')](_0x605e('0xb'),auth['isAuthenticated'](),controller[_0x605e('0xc')]);router[_0x605e('0xd')](_0x605e('0xb'),auth['isAuthenticated'](),controller[_0x605e('0xe')]);module['exports']=router;
\ No newline at end of file
index dd43bfe..ffd5c13 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd338=['exports','STRING','INTEGER','BOOLEAN','sequelize'];(function(_0x3f4493,_0x1bf5ae){var _0x450b1a=function(_0x107efb){while(--_0x107efb){_0x3f4493['push'](_0x3f4493['shift']());}};_0x450b1a(++_0x1bf5ae);}(_0xd338,0x9a));var _0x8d33=function(_0x4f35f4,_0x51a8c3){_0x4f35f4=_0x4f35f4-0x0;var _0x2e9a70=_0xd338[_0x4f35f4];return _0x2e9a70;};'use strict';var Sequelize=require(_0x8d33('0x0'));module[_0x8d33('0x1')]={'description':{'type':Sequelize[_0x8d33('0x2')]},'host':{'type':Sequelize[_0x8d33('0x2')]},'user':{'type':Sequelize[_0x8d33('0x2')]},'pass':{'type':Sequelize['STRING']},'port':{'type':Sequelize[_0x8d33('0x3')]},'secure':{'type':Sequelize[_0x8d33('0x4')],'defaultValue':![]},'service':{'type':Sequelize[_0x8d33('0x2')]},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
+var _0x8c26=['BOOLEAN','exports','STRING'];(function(_0xfe269c,_0x3ea766){var _0x37f8d3=function(_0x50dd5f){while(--_0x50dd5f){_0xfe269c['push'](_0xfe269c['shift']());}};_0x37f8d3(++_0x3ea766);}(_0x8c26,0x160));var _0x68c2=function(_0x505498,_0xdd7f02){_0x505498=_0x505498-0x0;var _0x5d90ba=_0x8c26[_0x505498];return _0x5d90ba;};'use strict';var Sequelize=require('sequelize');module[_0x68c2('0x0')]={'description':{'type':Sequelize[_0x68c2('0x1')]},'host':{'type':Sequelize[_0x68c2('0x1')]},'user':{'type':Sequelize['STRING']},'pass':{'type':Sequelize[_0x68c2('0x1')]},'port':{'type':Sequelize['INTEGER']},'secure':{'type':Sequelize[_0x68c2('0x2')],'defaultValue':![]},'service':{'type':Sequelize['STRING']},'authentication':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]}};
\ No newline at end of file
index 296ef46..090d77a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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','MailServerOut','includeAll','findAll','rows','catch','show','rawAttributes','include','find','create','body','params','destroy','html-pdf','eml-format','rimraf','zip-dir'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x34e8,0x12c));var _0x834e=function(_0x11e408,_0x2136f7){_0x11e408=_0x11e408-0x0;var _0x2eb728=_0x34e8[_0x11e408];return _0x2eb728;};'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 authService=require(_0x834e('0x13'));var hardwareService=require(_0x834e('0x14'));var Redis=require(_0x834e('0x15'));var qs=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['MailServerOut']['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']=[{'all':!![]}];}return db[_0x834e('0x3f')][_0x834e('0x41')](_0x3db026);})[_0x834e('0x28')](function(_0x3c59af){_0x3cd928[_0x834e('0x42')]=_0x3c59af;return _0x3cd928;})['then'](respondWithFilteredResult(_0x3f1b0b,_0x3db026))[_0x834e('0x43')](handleError(_0x3f1b0b,null));};exports[_0x834e('0x44')]=function(_0x38f266,_0x58c5fb){var _0x35380e={'raw':!![],'where':{'id':_0x38f266['params']['id']}},_0x16ac45={};_0x16ac45[_0x834e('0x2f')]=_['keys'](db[_0x834e('0x3f')][_0x834e('0x45')]);_0x16ac45['query']=_['keys'](_0x38f266[_0x834e('0x2c')]);_0x16ac45[_0x834e('0x38')]=_[_0x834e('0x2e')](_0x16ac45[_0x834e('0x2f')],_0x16ac45[_0x834e('0x2c')]);_0x35380e[_0x834e('0x30')]=_[_0x834e('0x2e')](_0x16ac45['model'],qs[_0x834e('0x31')](_0x38f266['query'][_0x834e('0x31')]));_0x35380e['attributes']=_0x35380e[_0x834e('0x30')]['length']?_0x35380e[_0x834e('0x30')]:_0x16ac45[_0x834e('0x2f')];if(_0x38f266['query'][_0x834e('0x40')]){_0x35380e[_0x834e('0x46')]=[{'all':!![]}];}_0x35380e=_[_0x834e('0x3a')]({},_0x35380e,_0x38f266[_0x834e('0x3e')]);return db[_0x834e('0x3f')][_0x834e('0x47')](_0x35380e)[_0x834e('0x28')](handleEntityNotFound(_0x58c5fb,null))[_0x834e('0x28')](respondWithResult(_0x58c5fb,null))[_0x834e('0x43')](handleError(_0x58c5fb,null));};exports[_0x834e('0x48')]=function(_0x5f3943,_0x3124be){return db[_0x834e('0x3f')]['create'](_0x5f3943[_0x834e('0x49')],{})[_0x834e('0x28')](respondWithResult(_0x3124be,0xc9))[_0x834e('0x43')](handleError(_0x3124be,null));};exports[_0x834e('0x27')]=function(_0x19b5ef,_0x4264b8){if(_0x19b5ef['body']['id']){delete _0x19b5ef['body']['id'];}return db[_0x834e('0x3f')][_0x834e('0x47')]({'where':{'id':_0x19b5ef[_0x834e('0x4a')]['id']}})[_0x834e('0x28')](handleEntityNotFound(_0x4264b8,null))[_0x834e('0x28')](saveUpdates(_0x19b5ef[_0x834e('0x49')],null))[_0x834e('0x28')](respondWithResult(_0x4264b8,null))[_0x834e('0x43')](handleError(_0x4264b8,null));};exports[_0x834e('0x4b')]=function(_0x390c45,_0xf02f0d){return db[_0x834e('0x3f')][_0x834e('0x47')]({'where':{'id':_0x390c45[_0x834e('0x4a')]['id']}})[_0x834e('0x28')](handleEntityNotFound(_0xf02f0d,null))[_0x834e('0x28')](removeEntity(_0xf02f0d,null))[_0x834e('0x43')](handleError(_0xf02f0d,null));};
\ No newline at end of file
+var _0x34e8=['request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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','MailServerOut','includeAll','findAll','rows','catch','show','rawAttributes','include','find','create','body','params','destroy','html-pdf','eml-format','rimraf','zip-dir'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0x34e8,0x12c));var _0x834e=function(_0x358175,_0x4102f0){_0x358175=_0x358175-0x0;var _0x47c433=_0x34e8[_0x358175];return _0x47c433;};'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 authService=require(_0x834e('0x13'));var hardwareService=require(_0x834e('0x14'));var Redis=require(_0x834e('0x15'));var qs=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['MailServerOut']['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']=[{'all':!![]}];}return db[_0x834e('0x3f')][_0x834e('0x41')](_0x3db026);})[_0x834e('0x28')](function(_0x3c59af){_0x3cd928[_0x834e('0x42')]=_0x3c59af;return _0x3cd928;})['then'](respondWithFilteredResult(_0x3f1b0b,_0x3db026))[_0x834e('0x43')](handleError(_0x3f1b0b,null));};exports[_0x834e('0x44')]=function(_0x38f266,_0x58c5fb){var _0x35380e={'raw':!![],'where':{'id':_0x38f266['params']['id']}},_0x16ac45={};_0x16ac45[_0x834e('0x2f')]=_['keys'](db[_0x834e('0x3f')][_0x834e('0x45')]);_0x16ac45['query']=_['keys'](_0x38f266[_0x834e('0x2c')]);_0x16ac45[_0x834e('0x38')]=_[_0x834e('0x2e')](_0x16ac45[_0x834e('0x2f')],_0x16ac45[_0x834e('0x2c')]);_0x35380e[_0x834e('0x30')]=_[_0x834e('0x2e')](_0x16ac45['model'],qs[_0x834e('0x31')](_0x38f266['query'][_0x834e('0x31')]));_0x35380e['attributes']=_0x35380e[_0x834e('0x30')]['length']?_0x35380e[_0x834e('0x30')]:_0x16ac45[_0x834e('0x2f')];if(_0x38f266['query'][_0x834e('0x40')]){_0x35380e[_0x834e('0x46')]=[{'all':!![]}];}_0x35380e=_[_0x834e('0x3a')]({},_0x35380e,_0x38f266[_0x834e('0x3e')]);return db[_0x834e('0x3f')][_0x834e('0x47')](_0x35380e)[_0x834e('0x28')](handleEntityNotFound(_0x58c5fb,null))[_0x834e('0x28')](respondWithResult(_0x58c5fb,null))[_0x834e('0x43')](handleError(_0x58c5fb,null));};exports[_0x834e('0x48')]=function(_0x5f3943,_0x3124be){return db[_0x834e('0x3f')]['create'](_0x5f3943[_0x834e('0x49')],{})[_0x834e('0x28')](respondWithResult(_0x3124be,0xc9))[_0x834e('0x43')](handleError(_0x3124be,null));};exports[_0x834e('0x27')]=function(_0x19b5ef,_0x4264b8){if(_0x19b5ef['body']['id']){delete _0x19b5ef['body']['id'];}return db[_0x834e('0x3f')][_0x834e('0x47')]({'where':{'id':_0x19b5ef[_0x834e('0x4a')]['id']}})[_0x834e('0x28')](handleEntityNotFound(_0x4264b8,null))[_0x834e('0x28')](saveUpdates(_0x19b5ef[_0x834e('0x49')],null))[_0x834e('0x28')](respondWithResult(_0x4264b8,null))[_0x834e('0x43')](handleError(_0x4264b8,null));};exports[_0x834e('0x4b')]=function(_0x390c45,_0xf02f0d){return db[_0x834e('0x3f')][_0x834e('0x47')]({'where':{'id':_0x390c45[_0x834e('0x4a')]['id']}})[_0x834e('0x28')](handleEntityNotFound(_0xf02f0d,null))[_0x834e('0x28')](removeEntity(_0xf02f0d,null))[_0x834e('0x43')](handleError(_0xf02f0d,null));};
\ No newline at end of file
index 086213b..f9cc0c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x444e=['lodash','../../config/logger','moment','request-promise','exports','define','MailServerOut','mail_servers_out'];(function(_0x5d4585,_0x490dab){var _0x340bdc=function(_0x3d8789){while(--_0x3d8789){_0x5d4585['push'](_0x5d4585['shift']());}};_0x340bdc(++_0x490dab);}(_0x444e,0xe8));var _0xe444=function(_0x4a4eb0,_0x247492){_0x4a4eb0=_0x4a4eb0-0x0;var _0x2a67b0=_0x444e[_0x4a4eb0];return _0x2a67b0;};'use strict';var _=require(_0xe444('0x0'));var util=require('util');var logger=require(_0xe444('0x1'))('api');var moment=require(_0xe444('0x2'));var BPromise=require('bluebird');var rp=require(_0xe444('0x3'));var attributes=require('./mailServerOut.attributes');module[_0xe444('0x4')]=function(_0x389c5b,_0x91763c){return _0x389c5b[_0xe444('0x5')](_0xe444('0x6'),attributes,{'tableName':_0xe444('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa899=['lodash','util','../../config/logger','moment','bluebird','request-promise','./mailServerOut.attributes','exports','define','MailServerOut','mail_servers_out'];(function(_0x661411,_0x42b8f8){var _0x32faae=function(_0x3ab358){while(--_0x3ab358){_0x661411['push'](_0x661411['shift']());}};_0x32faae(++_0x42b8f8);}(_0xa899,0x155));var _0x9a89=function(_0x107f10,_0x5529f2){_0x107f10=_0x107f10-0x0;var _0x811cab=_0xa899[_0x107f10];return _0x811cab;};'use strict';var _=require(_0x9a89('0x0'));var util=require(_0x9a89('0x1'));var logger=require(_0x9a89('0x2'))('api');var moment=require(_0x9a89('0x3'));var BPromise=require(_0x9a89('0x4'));var rp=require(_0x9a89('0x5'));var attributes=require(_0x9a89('0x6'));module[_0x9a89('0x7')]=function(_0x15c431,_0x105758){return _0x15c431[_0x9a89('0x8')](_0x9a89('0x9'),attributes,{'tableName':_0x9a89('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6da31b2..5b41905 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb6b=['request\x20sent','debug','MailServerOut,\x20%s,\x20%s,\x20%s','error','code','MailServerOut,\x20%s,\x20%s','message','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','client','http','request','info'];(function(_0x3f578f,_0x51f172){var _0x32c754=function(_0x1bd873){while(--_0x1bd873){_0x3f578f['push'](_0x3f578f['shift']());}};_0x32c754(++_0x51f172);}(_0xbb6b,0x112));var _0xbbb6=function(_0x44e97a,_0x4a01d2){_0x44e97a=_0x44e97a-0x0;var _0x15a999=_0xbb6b[_0x44e97a];return _0x15a999;};'use strict';var _=require(_0xbbb6('0x0'));var util=require(_0xbbb6('0x1'));var moment=require('moment');var BPromise=require(_0xbbb6('0x2'));var rs=require(_0xbbb6('0x3'));var fs=require('fs');var Redis=require(_0xbbb6('0x4'));var db=require(_0xbbb6('0x5'))['db'];var utils=require(_0xbbb6('0x6'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0xbbb6('0x7')][_0xbbb6('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x31a647,_0x20ffad,_0x2fc151){return new BPromise(function(_0x326b5f,_0x82c6f4){return client[_0xbbb6('0x9')](_0x31a647,_0x2fc151)['then'](function(_0x9fb396){logger[_0xbbb6('0xa')]('MailServerOut,\x20%s,\x20%s',_0x20ffad,_0xbbb6('0xb'));logger[_0xbbb6('0xc')](_0xbbb6('0xd'),_0x20ffad,_0xbbb6('0xb'),JSON['stringify'](_0x9fb396));if(_0x9fb396[_0xbbb6('0xe')]){if(_0x9fb396[_0xbbb6('0xe')][_0xbbb6('0xf')]===0x1f4){logger[_0xbbb6('0xe')](_0xbbb6('0x10'),_0x20ffad,_0x9fb396[_0xbbb6('0xe')][_0xbbb6('0x11')]);return _0x82c6f4(_0x9fb396['error'][_0xbbb6('0x11')]);}logger['error'](_0xbbb6('0x10'),_0x20ffad,_0x9fb396['error'][_0xbbb6('0x11')]);return _0x326b5f(_0x9fb396[_0xbbb6('0xe')][_0xbbb6('0x11')]);}else{logger[_0xbbb6('0xa')]('MailServerOut,\x20%s,\x20%s',_0x20ffad,_0xbbb6('0xb'));_0x326b5f(_0x9fb396['result'][_0xbbb6('0x11')]);}})[_0xbbb6('0x12')](function(_0x24abab){logger['error'](_0xbbb6('0x10'),_0x20ffad,_0x24abab);_0x82c6f4(_0x24abab);});});}
\ No newline at end of file
+var _0xf92a=['MailServerOut,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','info','MailServerOut,\x20%s,\x20%s','debug'];(function(_0x424d1d,_0x33893a){var _0xc6947f=function(_0x210044){while(--_0x210044){_0x424d1d['push'](_0x424d1d['shift']());}};_0xc6947f(++_0x33893a);}(_0xf92a,0x1d5));var _0xaf92=function(_0x2f92ff,_0x2163a8){_0x2f92ff=_0x2f92ff-0x0;var _0x367e2d=_0xf92a[_0x2f92ff];return _0x367e2d;};'use strict';var _=require(_0xaf92('0x0'));var util=require(_0xaf92('0x1'));var moment=require(_0xaf92('0x2'));var BPromise=require(_0xaf92('0x3'));var rs=require(_0xaf92('0x4'));var fs=require('fs');var Redis=require(_0xaf92('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xaf92('0x6'));var logger=require(_0xaf92('0x7'))('rpc');var config=require(_0xaf92('0x8'));var jayson=require(_0xaf92('0x9'));var client=jayson[_0xaf92('0xa')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5baa49,_0x551749,_0x457e07){return new BPromise(function(_0x3f251e,_0x408f2e){return client['request'](_0x5baa49,_0x457e07)['then'](function(_0x54f27a){logger[_0xaf92('0xb')](_0xaf92('0xc'),_0x551749,'request\x20sent');logger[_0xaf92('0xd')](_0xaf92('0xe'),_0x551749,_0xaf92('0xf'),JSON['stringify'](_0x54f27a));if(_0x54f27a[_0xaf92('0x10')]){if(_0x54f27a[_0xaf92('0x10')][_0xaf92('0x11')]===0x1f4){logger[_0xaf92('0x10')](_0xaf92('0xc'),_0x551749,_0x54f27a[_0xaf92('0x10')]['message']);return _0x408f2e(_0x54f27a[_0xaf92('0x10')][_0xaf92('0x12')]);}logger[_0xaf92('0x10')](_0xaf92('0xc'),_0x551749,_0x54f27a['error'][_0xaf92('0x12')]);return _0x3f251e(_0x54f27a[_0xaf92('0x10')][_0xaf92('0x12')]);}else{logger[_0xaf92('0xb')](_0xaf92('0xc'),_0x551749,_0xaf92('0xf'));_0x3f251e(_0x54f27a[_0xaf92('0x13')][_0xaf92('0x12')]);}})[_0xaf92('0x14')](function(_0x4fab45){logger[_0xaf92('0x10')]('MailServerOut,\x20%s,\x20%s',_0x551749,_0x4fab45);_0x408f2e(_0x4fab45);});});}
\ No newline at end of file
index b8d60c9..5547b22 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4047=['put','update','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./mailSubstatus.controller','index','get','/describe','isAuthenticated','/:id','show','post','create'];(function(_0x1fa6b3,_0x5664a0){var _0x3c8681=function(_0x330583){while(--_0x330583){_0x1fa6b3['push'](_0x1fa6b3['shift']());}};_0x3c8681(++_0x5664a0);}(_0x4047,0x17e));var _0x7404=function(_0x22149c,_0x13c8ab){_0x22149c=_0x22149c-0x0;var _0x15f67c=_0x4047[_0x22149c];return _0x15f67c;};'use strict';var multer=require(_0x7404('0x0'));var util=require(_0x7404('0x1'));var path=require(_0x7404('0x2'));var timeout=require(_0x7404('0x3'));var express=require(_0x7404('0x4'));var router=express[_0x7404('0x5')]();var auth=require(_0x7404('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x7404('0x7'));var controller=require(_0x7404('0x8'));router['get']('/',auth['isAuthenticated'](),controller[_0x7404('0x9')]);router[_0x7404('0xa')](_0x7404('0xb'),auth[_0x7404('0xc')](),controller['describe']);router[_0x7404('0xa')](_0x7404('0xd'),auth[_0x7404('0xc')](),controller[_0x7404('0xe')]);router[_0x7404('0xf')]('/',auth[_0x7404('0xc')](),controller[_0x7404('0x10')]);router[_0x7404('0x11')]('/:id',auth[_0x7404('0xc')](),controller[_0x7404('0x12')]);router['delete'](_0x7404('0xd'),auth[_0x7404('0xc')](),controller[_0x7404('0x13')]);module[_0x7404('0x14')]=router;
\ No newline at end of file
+var _0x0444=['../../config/environment','./mailSubstatus.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put','update','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x541b4a,_0x8bfa29){var _0x4f9a8e=function(_0x1d70e4){while(--_0x1d70e4){_0x541b4a['push'](_0x541b4a['shift']());}};_0x4f9a8e(++_0x8bfa29);}(_0x0444,0x151));var _0x4044=function(_0x450991,_0x462d40){_0x450991=_0x450991-0x0;var _0xb0d718=_0x0444[_0x450991];return _0xb0d718;};'use strict';var multer=require(_0x4044('0x0'));var util=require(_0x4044('0x1'));var path=require(_0x4044('0x2'));var timeout=require(_0x4044('0x3'));var express=require(_0x4044('0x4'));var router=express[_0x4044('0x5')]();var auth=require(_0x4044('0x6'));var interaction=require(_0x4044('0x7'));var config=require(_0x4044('0x8'));var controller=require(_0x4044('0x9'));router[_0x4044('0xa')]('/',auth[_0x4044('0xb')](),controller[_0x4044('0xc')]);router['get'](_0x4044('0xd'),auth[_0x4044('0xb')](),controller[_0x4044('0xe')]);router[_0x4044('0xa')](_0x4044('0xf'),auth[_0x4044('0xb')](),controller[_0x4044('0x10')]);router[_0x4044('0x11')]('/',auth[_0x4044('0xb')](),controller[_0x4044('0x12')]);router[_0x4044('0x13')](_0x4044('0xf'),auth[_0x4044('0xb')](),controller[_0x4044('0x14')]);router['delete']('/:id',auth[_0x4044('0xb')](),controller[_0x4044('0x15')]);module[_0x4044('0x16')]=router;
\ No newline at end of file
index 36b3d48..39fb535 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4213=['exports','STRING','name','sequelize'];(function(_0x142020,_0x1f7233){var _0x40da8f=function(_0x17f0a3){while(--_0x17f0a3){_0x142020['push'](_0x142020['shift']());}};_0x40da8f(++_0x1f7233);}(_0x4213,0x77));var _0x3421=function(_0x464014,_0x3b0eb2){_0x464014=_0x464014-0x0;var _0x56ae81=_0x4213[_0x464014];return _0x56ae81;};'use strict';var Sequelize=require(_0x3421('0x0'));module[_0x3421('0x1')]={'name':{'type':Sequelize[_0x3421('0x2')],'unique':_0x3421('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x3421('0x2')]}};
\ No newline at end of file
+var _0x9c02=['STRING','sequelize','exports'];(function(_0x59348f,_0x4162d1){var _0x42f6f1=function(_0x3c52d1){while(--_0x3c52d1){_0x59348f['push'](_0x59348f['shift']());}};_0x42f6f1(++_0x4162d1);}(_0x9c02,0x196));var _0x29c0=function(_0x37116d,_0x1da0d0){_0x37116d=_0x37116d-0x0;var _0x578b30=_0x9c02[_0x37116d];return _0x578b30;};'use strict';var Sequelize=require(_0x29c0('0x0'));module[_0x29c0('0x1')]={'name':{'type':Sequelize[_0x29c0('0x2')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 22ba2ab..9283d49 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa899=['name','index','rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','type','key','VIRTUAL','field','options','count','includeAll','include','MailSubstatus','findAll','catch','show','find','create','body','params','describe','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','querystring','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','offset','set','json','apply','reject','save','update','then','destroy','end','error','stack'];(function(_0x129aff,_0x16518c){var _0x2ddda1=function(_0x37216c){while(--_0x37216c){_0x129aff['push'](_0x129aff['shift']());}};_0x2ddda1(++_0x16518c);}(_0xa899,0x155));var _0x9a89=function(_0xfa634c,_0x414e0e){_0xfa634c=_0xfa634c-0x0;var _0x73e478=_0xa899[_0xfa634c];return _0x73e478;};'use strict';var pdf=require(_0x9a89('0x0'));var emlformat=require(_0x9a89('0x1'));var rimraf=require(_0x9a89('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x9a89('0x3'));var rp=require(_0x9a89('0x4'));var moment=require(_0x9a89('0x5'));var BPromise=require(_0x9a89('0x6'));var Mustache=require(_0x9a89('0x7'));var util=require(_0x9a89('0x8'));var path=require(_0x9a89('0x9'));var sox=require(_0x9a89('0xa'));var csv=require(_0x9a89('0xb'));var ejs=require(_0x9a89('0xc'));var fs=require('fs');var _=require(_0x9a89('0xd'));var squel=require(_0x9a89('0xe'));var crypto=require(_0x9a89('0xf'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x9a89('0xb'));var querystring=require(_0x9a89('0x10'));var Papa=require('papaparse');var authService=require(_0x9a89('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x9a89('0x12'));var qs=require(_0x9a89('0x13'));var logger=require(_0x9a89('0x14'))(_0x9a89('0x15'));var utils=require(_0x9a89('0x16'));var config=require(_0x9a89('0x17'));var db=require(_0x9a89('0x18'))['db'];function respondWithStatusCode(_0x507f0e,_0x51eb91){_0x51eb91=_0x51eb91||0xcc;return function(_0x4342c8){if(_0x4342c8){return _0x507f0e[_0x9a89('0x19')](_0x51eb91);}return _0x507f0e[_0x9a89('0x1a')](_0x51eb91)['end']();};}function respondWithResult(_0x5e4c98,_0x53acb4){_0x53acb4=_0x53acb4||0xc8;return function(_0x1c66a3){if(_0x1c66a3){return _0x5e4c98[_0x9a89('0x1a')](_0x53acb4)['json'](_0x1c66a3);}};}function respondWithFilteredResult(_0x187616,_0x427569){return function(_0x33a08f){if(_0x33a08f){var _0x203ee9=_0x33a08f['count'],_0x597e58=_0x427569['offset'],_0x11a933=_0x427569[_0x9a89('0x1b')]+_0x427569['limit'],_0x3fe542;if(_0x11a933>=_0x203ee9){_0x11a933=_0x203ee9;_0x3fe542=0xc8;}else{_0x3fe542=0xce;}_0x187616[_0x9a89('0x1a')](_0x3fe542);return _0x187616[_0x9a89('0x1c')]('Content-Range',_0x597e58+'-'+_0x11a933+'/'+_0x203ee9)[_0x9a89('0x1d')](_0x33a08f);}return null;};}function patchUpdates(_0x5d8a62){return function(_0x2d648f){try{jsonpatch[_0x9a89('0x1e')](_0x2d648f,_0x5d8a62,!![]);}catch(_0x54c45d){return BPromise[_0x9a89('0x1f')](_0x54c45d);}return _0x2d648f[_0x9a89('0x20')]();};}function saveUpdates(_0xf60649,_0x1619e0){return function(_0x66f8c7){if(_0x66f8c7){return _0x66f8c7[_0x9a89('0x21')](_0xf60649)[_0x9a89('0x22')](function(_0x1548db){return _0x1548db;});}return null;};}function removeEntity(_0x583227,_0x51618d){return function(_0x1ef5ef){if(_0x1ef5ef){return _0x1ef5ef[_0x9a89('0x23')]()[_0x9a89('0x22')](function(){_0x583227[_0x9a89('0x1a')](0xcc)[_0x9a89('0x24')]();});}};}function handleEntityNotFound(_0x3cc288,_0x4ac234){return function(_0x50adcf){if(!_0x50adcf){_0x3cc288[_0x9a89('0x19')](0x194);}return _0x50adcf;};}function handleError(_0x4f99e9,_0x3f5723){_0x3f5723=_0x3f5723||0x1f4;return function(_0x2cca01){logger[_0x9a89('0x25')](_0x2cca01[_0x9a89('0x26')]);if(_0x2cca01[_0x9a89('0x27')]){delete _0x2cca01[_0x9a89('0x27')];}_0x4f99e9[_0x9a89('0x1a')](_0x3f5723)['send'](_0x2cca01);};}exports[_0x9a89('0x28')]=function(_0x5002a2,_0xd64312){var _0x5a888b={},_0x5817e4={},_0x340999={'count':0x0,'rows':[]};var _0x2235e3=db['MailSubstatus'][_0x9a89('0x29')];_0x5817e4['model']=_[_0x9a89('0x2a')](_0x2235e3);_0x5817e4[_0x9a89('0x2b')]=_[_0x9a89('0x2a')](_0x5002a2[_0x9a89('0x2b')]);_0x5817e4[_0x9a89('0x2c')]=_[_0x9a89('0x2d')](_0x5817e4[_0x9a89('0x2e')],_0x5817e4['query']);_0x5a888b['attributes']=_['intersection'](_0x5817e4[_0x9a89('0x2e')],qs['fields'](_0x5002a2[_0x9a89('0x2b')][_0x9a89('0x2f')]));_0x5a888b[_0x9a89('0x30')]=_0x5a888b['attributes'][_0x9a89('0x31')]?_0x5a888b['attributes']:_0x5817e4[_0x9a89('0x2e')];if(!_0x5002a2[_0x9a89('0x2b')][_0x9a89('0x32')](_0x9a89('0x33'))){_0x5a888b[_0x9a89('0x34')]=qs['limit'](_0x5002a2[_0x9a89('0x2b')][_0x9a89('0x34')]);_0x5a888b[_0x9a89('0x1b')]=qs[_0x9a89('0x1b')](_0x5002a2[_0x9a89('0x2b')][_0x9a89('0x1b')]);}_0x5a888b[_0x9a89('0x35')]=qs[_0x9a89('0x36')](_0x5002a2[_0x9a89('0x2b')]['sort']);_0x5a888b[_0x9a89('0x37')]=qs[_0x9a89('0x2c')](_[_0x9a89('0x38')](_0x5002a2[_0x9a89('0x2b')],_0x5817e4[_0x9a89('0x2c')]));if(_0x5002a2[_0x9a89('0x2b')][_0x9a89('0x39')]){_0x5a888b[_0x9a89('0x37')]=_[_0x9a89('0x3a')](_0x5a888b[_0x9a89('0x37')],{'$or':_['map'](_0x2235e3,function(_0x587f4d){if(_0x587f4d[_0x9a89('0x3b')][_0x9a89('0x3c')]!==_0x9a89('0x3d')){var _0x4aac18={};_0x4aac18[_0x587f4d[_0x9a89('0x3e')]]={'$like':'%'+_0x5002a2[_0x9a89('0x2b')][_0x9a89('0x39')]+'%'};return _0x4aac18;}})});}_0x5a888b=_[_0x9a89('0x3a')]({},_0x5a888b,_0x5002a2[_0x9a89('0x3f')]);var _0x404511={'where':_0x5a888b[_0x9a89('0x37')]};return db['MailSubstatus'][_0x9a89('0x40')](_0x404511)['then'](function(_0x39d83b){_0x340999[_0x9a89('0x40')]=_0x39d83b;if(_0x5002a2[_0x9a89('0x2b')][_0x9a89('0x41')]){_0x5a888b[_0x9a89('0x42')]=[{'all':!![]}];}return db[_0x9a89('0x43')][_0x9a89('0x44')](_0x5a888b);})[_0x9a89('0x22')](function(_0x192138){_0x340999['rows']=_0x192138;return _0x340999;})[_0x9a89('0x22')](respondWithFilteredResult(_0xd64312,_0x5a888b))[_0x9a89('0x45')](handleError(_0xd64312,null));};exports[_0x9a89('0x46')]=function(_0x20c53b,_0x50bcfe){var _0x496244={'raw':!![],'where':{'id':_0x20c53b['params']['id']}},_0x46c1f9={};_0x46c1f9[_0x9a89('0x2e')]=_[_0x9a89('0x2a')](db[_0x9a89('0x43')][_0x9a89('0x29')]);_0x46c1f9[_0x9a89('0x2b')]=_[_0x9a89('0x2a')](_0x20c53b[_0x9a89('0x2b')]);_0x46c1f9[_0x9a89('0x2c')]=_['intersection'](_0x46c1f9['model'],_0x46c1f9['query']);_0x496244[_0x9a89('0x30')]=_['intersection'](_0x46c1f9['model'],qs[_0x9a89('0x2f')](_0x20c53b[_0x9a89('0x2b')][_0x9a89('0x2f')]));_0x496244['attributes']=_0x496244[_0x9a89('0x30')]['length']?_0x496244[_0x9a89('0x30')]:_0x46c1f9['model'];if(_0x20c53b[_0x9a89('0x2b')][_0x9a89('0x41')]){_0x496244[_0x9a89('0x42')]=[{'all':!![]}];}_0x496244=_['merge']({},_0x496244,_0x20c53b[_0x9a89('0x3f')]);return db[_0x9a89('0x43')][_0x9a89('0x47')](_0x496244)['then'](handleEntityNotFound(_0x50bcfe,null))['then'](respondWithResult(_0x50bcfe,null))[_0x9a89('0x45')](handleError(_0x50bcfe,null));};exports['create']=function(_0x4020df,_0x3d98d9){return db['MailSubstatus'][_0x9a89('0x48')](_0x4020df[_0x9a89('0x49')],{})['then'](respondWithResult(_0x3d98d9,0xc9))['catch'](handleError(_0x3d98d9,null));};exports[_0x9a89('0x21')]=function(_0x27620c,_0x5edb02){if(_0x27620c[_0x9a89('0x49')]['id']){delete _0x27620c['body']['id'];}return db[_0x9a89('0x43')][_0x9a89('0x47')]({'where':{'id':_0x27620c[_0x9a89('0x4a')]['id']}})[_0x9a89('0x22')](handleEntityNotFound(_0x5edb02,null))[_0x9a89('0x22')](saveUpdates(_0x27620c['body'],null))[_0x9a89('0x22')](respondWithResult(_0x5edb02,null))['catch'](handleError(_0x5edb02,null));};exports[_0x9a89('0x23')]=function(_0xc007aa,_0x58196c){return db[_0x9a89('0x43')][_0x9a89('0x47')]({'where':{'id':_0xc007aa[_0x9a89('0x4a')]['id']}})[_0x9a89('0x22')](handleEntityNotFound(_0x58196c,null))[_0x9a89('0x22')](removeEntity(_0x58196c,null))[_0x9a89('0x45')](handleError(_0x58196c,null));};exports[_0x9a89('0x4b')]=function(_0x44e9b7,_0x20d748){return db[_0x9a89('0x43')][_0x9a89('0x4b')]()['then'](respondWithResult(_0x20d748,null))[_0x9a89('0x45')](handleError(_0x20d748,null));};
\ No newline at end of file
+var _0x0c75=['model','keys','query','intersection','attributes','length','hasOwnProperty','nolimit','order','sort','where','filters','filter','map','type','key','VIRTUAL','field','merge','options','includeAll','findAll','rows','show','params','fields','include','find','catch','create','body','describe','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','reject','update','then','destroy','error','stack','name','send','index','MailSubstatus','rawAttributes'];(function(_0x4854d6,_0x2f1264){var _0x3885c0=function(_0x4d564d){while(--_0x4d564d){_0x4854d6['push'](_0x4854d6['shift']());}};_0x3885c0(++_0x2f1264);}(_0x0c75,0x6a));var _0x50c7=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x0c75[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x50c7('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x50c7('0x1'));var jsonpatch=require(_0x50c7('0x2'));var rp=require(_0x50c7('0x3'));var moment=require(_0x50c7('0x4'));var BPromise=require(_0x50c7('0x5'));var Mustache=require(_0x50c7('0x6'));var util=require(_0x50c7('0x7'));var path=require('path');var sox=require(_0x50c7('0x8'));var csv=require('to-csv');var ejs=require(_0x50c7('0x9'));var fs=require('fs');var _=require('lodash');var squel=require(_0x50c7('0xa'));var crypto=require(_0x50c7('0xb'));var jsforce=require(_0x50c7('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x50c7('0xd'));var Papa=require(_0x50c7('0xe'));var authService=require(_0x50c7('0xf'));var hardwareService=require(_0x50c7('0x10'));var Redis=require(_0x50c7('0x11'));var qs=require(_0x50c7('0x12'));var logger=require(_0x50c7('0x13'))('api');var utils=require('../../config/utils');var config=require(_0x50c7('0x14'));var db=require(_0x50c7('0x15'))['db'];function respondWithStatusCode(_0x249e08,_0x5d07b8){_0x5d07b8=_0x5d07b8||0xcc;return function(_0x2a6ef2){if(_0x2a6ef2){return _0x249e08[_0x50c7('0x16')](_0x5d07b8);}return _0x249e08[_0x50c7('0x17')](_0x5d07b8)[_0x50c7('0x18')]();};}function respondWithResult(_0x1e2dc5,_0x50c690){_0x50c690=_0x50c690||0xc8;return function(_0x5a3652){if(_0x5a3652){return _0x1e2dc5[_0x50c7('0x17')](_0x50c690)[_0x50c7('0x19')](_0x5a3652);}};}function respondWithFilteredResult(_0x5c8fa7,_0x19b580){return function(_0x1f1db1){if(_0x1f1db1){var _0x19ce5e=_0x1f1db1[_0x50c7('0x1a')],_0x4f092a=_0x19b580[_0x50c7('0x1b')],_0x552ffe=_0x19b580['offset']+_0x19b580[_0x50c7('0x1c')],_0x40d935;if(_0x552ffe>=_0x19ce5e){_0x552ffe=_0x19ce5e;_0x40d935=0xc8;}else{_0x40d935=0xce;}_0x5c8fa7[_0x50c7('0x17')](_0x40d935);return _0x5c8fa7[_0x50c7('0x1d')]('Content-Range',_0x4f092a+'-'+_0x552ffe+'/'+_0x19ce5e)[_0x50c7('0x19')](_0x1f1db1);}return null;};}function patchUpdates(_0x4e5651){return function(_0xd67dee){try{jsonpatch[_0x50c7('0x1e')](_0xd67dee,_0x4e5651,!![]);}catch(_0x3187ab){return BPromise[_0x50c7('0x1f')](_0x3187ab);}return _0xd67dee['save']();};}function saveUpdates(_0x59bbba,_0x526053){return function(_0x3cc394){if(_0x3cc394){return _0x3cc394[_0x50c7('0x20')](_0x59bbba)[_0x50c7('0x21')](function(_0x118a42){return _0x118a42;});}return null;};}function removeEntity(_0x564f9b,_0x39e331){return function(_0x3b4416){if(_0x3b4416){return _0x3b4416[_0x50c7('0x22')]()[_0x50c7('0x21')](function(){_0x564f9b['status'](0xcc)[_0x50c7('0x18')]();});}};}function handleEntityNotFound(_0x54b79b,_0x34d1bd){return function(_0x27f949){if(!_0x27f949){_0x54b79b[_0x50c7('0x16')](0x194);}return _0x27f949;};}function handleError(_0x598111,_0x4bb1a7){_0x4bb1a7=_0x4bb1a7||0x1f4;return function(_0x17de18){logger[_0x50c7('0x23')](_0x17de18[_0x50c7('0x24')]);if(_0x17de18[_0x50c7('0x25')]){delete _0x17de18[_0x50c7('0x25')];}_0x598111['status'](_0x4bb1a7)[_0x50c7('0x26')](_0x17de18);};}exports[_0x50c7('0x27')]=function(_0x5349a0,_0x1a3fd6){var _0x3bd031={},_0x42411c={},_0x1586cb={'count':0x0,'rows':[]};var _0x51b7d7=db[_0x50c7('0x28')][_0x50c7('0x29')];_0x42411c[_0x50c7('0x2a')]=_[_0x50c7('0x2b')](_0x51b7d7);_0x42411c[_0x50c7('0x2c')]=_[_0x50c7('0x2b')](_0x5349a0[_0x50c7('0x2c')]);_0x42411c['filters']=_[_0x50c7('0x2d')](_0x42411c[_0x50c7('0x2a')],_0x42411c[_0x50c7('0x2c')]);_0x3bd031[_0x50c7('0x2e')]=_[_0x50c7('0x2d')](_0x42411c[_0x50c7('0x2a')],qs['fields'](_0x5349a0[_0x50c7('0x2c')]['fields']));_0x3bd031['attributes']=_0x3bd031['attributes'][_0x50c7('0x2f')]?_0x3bd031[_0x50c7('0x2e')]:_0x42411c[_0x50c7('0x2a')];if(!_0x5349a0['query'][_0x50c7('0x30')](_0x50c7('0x31'))){_0x3bd031[_0x50c7('0x1c')]=qs[_0x50c7('0x1c')](_0x5349a0['query']['limit']);_0x3bd031[_0x50c7('0x1b')]=qs[_0x50c7('0x1b')](_0x5349a0[_0x50c7('0x2c')][_0x50c7('0x1b')]);}_0x3bd031[_0x50c7('0x32')]=qs[_0x50c7('0x33')](_0x5349a0[_0x50c7('0x2c')][_0x50c7('0x33')]);_0x3bd031[_0x50c7('0x34')]=qs['filters'](_['pick'](_0x5349a0[_0x50c7('0x2c')],_0x42411c[_0x50c7('0x35')]));if(_0x5349a0[_0x50c7('0x2c')][_0x50c7('0x36')]){_0x3bd031['where']=_['merge'](_0x3bd031[_0x50c7('0x34')],{'$or':_[_0x50c7('0x37')](_0x51b7d7,function(_0x53513e){if(_0x53513e[_0x50c7('0x38')][_0x50c7('0x39')]!==_0x50c7('0x3a')){var _0x15b2d0={};_0x15b2d0[_0x53513e[_0x50c7('0x3b')]]={'$like':'%'+_0x5349a0[_0x50c7('0x2c')]['filter']+'%'};return _0x15b2d0;}})});}_0x3bd031=_[_0x50c7('0x3c')]({},_0x3bd031,_0x5349a0[_0x50c7('0x3d')]);var _0x24ea03={'where':_0x3bd031[_0x50c7('0x34')]};return db['MailSubstatus'][_0x50c7('0x1a')](_0x24ea03)['then'](function(_0x3c9ecc){_0x1586cb['count']=_0x3c9ecc;if(_0x5349a0[_0x50c7('0x2c')][_0x50c7('0x3e')]){_0x3bd031['include']=[{'all':!![]}];}return db[_0x50c7('0x28')][_0x50c7('0x3f')](_0x3bd031);})[_0x50c7('0x21')](function(_0x36fe9a){_0x1586cb[_0x50c7('0x40')]=_0x36fe9a;return _0x1586cb;})['then'](respondWithFilteredResult(_0x1a3fd6,_0x3bd031))['catch'](handleError(_0x1a3fd6,null));};exports[_0x50c7('0x41')]=function(_0x218742,_0x120f72){var _0x573131={'raw':!![],'where':{'id':_0x218742[_0x50c7('0x42')]['id']}},_0x35550f={};_0x35550f[_0x50c7('0x2a')]=_['keys'](db[_0x50c7('0x28')][_0x50c7('0x29')]);_0x35550f[_0x50c7('0x2c')]=_[_0x50c7('0x2b')](_0x218742[_0x50c7('0x2c')]);_0x35550f[_0x50c7('0x35')]=_['intersection'](_0x35550f[_0x50c7('0x2a')],_0x35550f[_0x50c7('0x2c')]);_0x573131[_0x50c7('0x2e')]=_[_0x50c7('0x2d')](_0x35550f['model'],qs[_0x50c7('0x43')](_0x218742[_0x50c7('0x2c')][_0x50c7('0x43')]));_0x573131['attributes']=_0x573131[_0x50c7('0x2e')][_0x50c7('0x2f')]?_0x573131['attributes']:_0x35550f[_0x50c7('0x2a')];if(_0x218742[_0x50c7('0x2c')][_0x50c7('0x3e')]){_0x573131[_0x50c7('0x44')]=[{'all':!![]}];}_0x573131=_['merge']({},_0x573131,_0x218742[_0x50c7('0x3d')]);return db[_0x50c7('0x28')][_0x50c7('0x45')](_0x573131)[_0x50c7('0x21')](handleEntityNotFound(_0x120f72,null))[_0x50c7('0x21')](respondWithResult(_0x120f72,null))[_0x50c7('0x46')](handleError(_0x120f72,null));};exports[_0x50c7('0x47')]=function(_0x3f348e,_0x2793ed){return db[_0x50c7('0x28')][_0x50c7('0x47')](_0x3f348e['body'],{})['then'](respondWithResult(_0x2793ed,0xc9))[_0x50c7('0x46')](handleError(_0x2793ed,null));};exports[_0x50c7('0x20')]=function(_0xf5dbdf,_0x2ac267){if(_0xf5dbdf[_0x50c7('0x48')]['id']){delete _0xf5dbdf[_0x50c7('0x48')]['id'];}return db[_0x50c7('0x28')][_0x50c7('0x45')]({'where':{'id':_0xf5dbdf['params']['id']}})[_0x50c7('0x21')](handleEntityNotFound(_0x2ac267,null))[_0x50c7('0x21')](saveUpdates(_0xf5dbdf['body'],null))['then'](respondWithResult(_0x2ac267,null))[_0x50c7('0x46')](handleError(_0x2ac267,null));};exports[_0x50c7('0x22')]=function(_0x559e44,_0x41e7d2){return db['MailSubstatus']['find']({'where':{'id':_0x559e44[_0x50c7('0x42')]['id']}})['then'](handleEntityNotFound(_0x41e7d2,null))[_0x50c7('0x21')](removeEntity(_0x41e7d2,null))[_0x50c7('0x46')](handleError(_0x41e7d2,null));};exports['describe']=function(_0x269501,_0x120586){return db[_0x50c7('0x28')][_0x50c7('0x49')]()[_0x50c7('0x21')](respondWithResult(_0x120586,null))['catch'](handleError(_0x120586,null));};
\ No newline at end of file
index 9d7cbfa..f81eada 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa4a1=['bluebird','request-promise','./mailSubstatus.attributes','define','MailSubstatus','lodash','util','../../config/logger','api','moment'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa4a1,0x1d1));var _0x1a4a=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xa4a1[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x1a4a('0x0'));var util=require(_0x1a4a('0x1'));var logger=require(_0x1a4a('0x2'))(_0x1a4a('0x3'));var moment=require(_0x1a4a('0x4'));var BPromise=require(_0x1a4a('0x5'));var rp=require(_0x1a4a('0x6'));var attributes=require(_0x1a4a('0x7'));module['exports']=function(_0x64217f,_0x4eec82){return _0x64217f[_0x1a4a('0x8')](_0x1a4a('0x9'),attributes,{'tableName':'mail_substatuses','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x0ade=['api','moment','bluebird','request-promise','exports','define','MailSubstatus','mail_substatuses','lodash','util','../../config/logger'];(function(_0x257017,_0x330627){var _0x38536d=function(_0xdf92e){while(--_0xdf92e){_0x257017['push'](_0x257017['shift']());}};_0x38536d(++_0x330627);}(_0x0ade,0x1aa));var _0xe0ad=function(_0x10df0c,_0x144983){_0x10df0c=_0x10df0c-0x0;var _0x527960=_0x0ade[_0x10df0c];return _0x527960;};'use strict';var _=require(_0xe0ad('0x0'));var util=require(_0xe0ad('0x1'));var logger=require(_0xe0ad('0x2'))(_0xe0ad('0x3'));var moment=require(_0xe0ad('0x4'));var BPromise=require(_0xe0ad('0x5'));var rp=require(_0xe0ad('0x6'));var attributes=require('./mailSubstatus.attributes');module[_0xe0ad('0x7')]=function(_0x17c7c5,_0x3ab6ea){return _0x17c7c5[_0xe0ad('0x8')](_0xe0ad('0x9'),attributes,{'tableName':_0xe0ad('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 80bc825..e88feee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7989=['request','info','MailSubstatus,\x20%s,\x20%s','request\x20sent','MailSubstatus,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http'];(function(_0x55fd2c,_0x3fa39a){var _0x42f962=function(_0x65bbfd){while(--_0x65bbfd){_0x55fd2c['push'](_0x55fd2c['shift']());}};_0x42f962(++_0x3fa39a);}(_0x7989,0xf1));var _0x9798=function(_0xefb33e,_0x11bbb5){_0xefb33e=_0xefb33e-0x0;var _0x529db6=_0x7989[_0xefb33e];return _0x529db6;};'use strict';var _=require(_0x9798('0x0'));var util=require(_0x9798('0x1'));var moment=require(_0x9798('0x2'));var BPromise=require(_0x9798('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x9798('0x4'))['db'];var utils=require(_0x9798('0x5'));var logger=require(_0x9798('0x6'))(_0x9798('0x7'));var config=require(_0x9798('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x9798('0x9')][_0x9798('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x13a871,_0x5d8ed0,_0x1180bb){return new BPromise(function(_0x188d63,_0x3035c2){return client[_0x9798('0xb')](_0x13a871,_0x1180bb)['then'](function(_0x260017){logger[_0x9798('0xc')](_0x9798('0xd'),_0x5d8ed0,_0x9798('0xe'));logger['debug'](_0x9798('0xf'),_0x5d8ed0,_0x9798('0xe'),JSON[_0x9798('0x10')](_0x260017));if(_0x260017['error']){if(_0x260017[_0x9798('0x11')][_0x9798('0x12')]===0x1f4){logger[_0x9798('0x11')](_0x9798('0xd'),_0x5d8ed0,_0x260017[_0x9798('0x11')][_0x9798('0x13')]);return _0x3035c2(_0x260017[_0x9798('0x11')][_0x9798('0x13')]);}logger[_0x9798('0x11')]('MailSubstatus,\x20%s,\x20%s',_0x5d8ed0,_0x260017[_0x9798('0x11')][_0x9798('0x13')]);return _0x188d63(_0x260017[_0x9798('0x11')]['message']);}else{logger[_0x9798('0xc')]('MailSubstatus,\x20%s,\x20%s',_0x5d8ed0,_0x9798('0xe'));_0x188d63(_0x260017[_0x9798('0x14')][_0x9798('0x13')]);}})['catch'](function(_0x37e61f){logger[_0x9798('0x11')](_0x9798('0xd'),_0x5d8ed0,_0x37e61f);_0x3035c2(_0x37e61f);});});}
\ No newline at end of file
+var _0x3366=['debug','MailSubstatus,\x20%s,\x20%s,\x20%s','stringify','error','message','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','client','then','info','MailSubstatus,\x20%s,\x20%s','request\x20sent'];(function(_0x535ee2,_0x4ee4dc){var _0x16dbc7=function(_0x99c718){while(--_0x99c718){_0x535ee2['push'](_0x535ee2['shift']());}};_0x16dbc7(++_0x4ee4dc);}(_0x3366,0x11e));var _0x6336=function(_0x46a38b,_0x16ffb5){_0x46a38b=_0x46a38b-0x0;var _0x346e75=_0x3366[_0x46a38b];return _0x346e75;};'use strict';var _=require(_0x6336('0x0'));var util=require(_0x6336('0x1'));var moment=require(_0x6336('0x2'));var BPromise=require(_0x6336('0x3'));var rs=require(_0x6336('0x4'));var fs=require('fs');var Redis=require(_0x6336('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0x6336('0x6'));var logger=require(_0x6336('0x7'))(_0x6336('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x6336('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x44cd2d,_0x2393f5,_0x499cd4){return new BPromise(function(_0x2a0fcd,_0x2c88c4){return client['request'](_0x44cd2d,_0x499cd4)[_0x6336('0xa')](function(_0x1f022a){logger[_0x6336('0xb')](_0x6336('0xc'),_0x2393f5,_0x6336('0xd'));logger[_0x6336('0xe')](_0x6336('0xf'),_0x2393f5,_0x6336('0xd'),JSON[_0x6336('0x10')](_0x1f022a));if(_0x1f022a[_0x6336('0x11')]){if(_0x1f022a[_0x6336('0x11')]['code']===0x1f4){logger['error'](_0x6336('0xc'),_0x2393f5,_0x1f022a[_0x6336('0x11')]['message']);return _0x2c88c4(_0x1f022a[_0x6336('0x11')][_0x6336('0x12')]);}logger[_0x6336('0x11')]('MailSubstatus,\x20%s,\x20%s',_0x2393f5,_0x1f022a['error'][_0x6336('0x12')]);return _0x2a0fcd(_0x1f022a[_0x6336('0x11')]['message']);}else{logger[_0x6336('0xb')](_0x6336('0xc'),_0x2393f5,_0x6336('0xd'));_0x2a0fcd(_0x1f022a['result'][_0x6336('0x12')]);}})[_0x6336('0x13')](function(_0x13101f){logger[_0x6336('0x11')]('MailSubstatus,\x20%s,\x20%s',_0x2393f5,_0x13101f);_0x2c88c4(_0x13101f);});});}
\ No newline at end of file
index 29044b6..d9c2889 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6b0=['update','delete','destroy','exports','multer','util','express','Router','../../components/auth/service','../../config/environment','./mailTransferReport.controller','get','isAuthenticated','index','/describe','describe','/:id','create','put'];(function(_0x33ae4a,_0x5eaba3){var _0x13ed86=function(_0x416244){while(--_0x416244){_0x33ae4a['push'](_0x33ae4a['shift']());}};_0x13ed86(++_0x5eaba3);}(_0xa6b0,0xaf));var _0x0a6b=function(_0x4445cd,_0x47c7a7){_0x4445cd=_0x4445cd-0x0;var _0x4b55a7=_0xa6b0[_0x4445cd];return _0x4b55a7;};'use strict';var multer=require(_0x0a6b('0x0'));var util=require(_0x0a6b('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x0a6b('0x2'));var router=express[_0x0a6b('0x3')]();var auth=require(_0x0a6b('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x0a6b('0x5'));var controller=require(_0x0a6b('0x6'));router[_0x0a6b('0x7')]('/',auth[_0x0a6b('0x8')](),controller[_0x0a6b('0x9')]);router[_0x0a6b('0x7')](_0x0a6b('0xa'),auth[_0x0a6b('0x8')](),controller[_0x0a6b('0xb')]);router[_0x0a6b('0x7')](_0x0a6b('0xc'),auth[_0x0a6b('0x8')](),controller['show']);router['post']('/',auth[_0x0a6b('0x8')](),controller[_0x0a6b('0xd')]);router[_0x0a6b('0xe')](_0x0a6b('0xc'),auth[_0x0a6b('0x8')](),controller[_0x0a6b('0xf')]);router[_0x0a6b('0x10')](_0x0a6b('0xc'),auth[_0x0a6b('0x8')](),controller[_0x0a6b('0x11')]);module[_0x0a6b('0x12')]=router;
\ No newline at end of file
+var _0xe2fe=['connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./mailTransferReport.controller','isAuthenticated','index','/describe','get','show','create','delete','exports','multer'];(function(_0x4295fd,_0x1f2573){var _0x96f34e=function(_0x32bf59){while(--_0x32bf59){_0x4295fd['push'](_0x4295fd['shift']());}};_0x96f34e(++_0x1f2573);}(_0xe2fe,0x86));var _0xee2f=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xe2fe[_0x14add3];return _0x4a174f;};'use strict';var multer=require(_0xee2f('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xee2f('0x1'));var express=require('express');var router=express[_0xee2f('0x2')]();var auth=require(_0xee2f('0x3'));var interaction=require(_0xee2f('0x4'));var config=require(_0xee2f('0x5'));var controller=require(_0xee2f('0x6'));router['get']('/',auth[_0xee2f('0x7')](),controller[_0xee2f('0x8')]);router['get'](_0xee2f('0x9'),auth[_0xee2f('0x7')](),controller['describe']);router[_0xee2f('0xa')]('/:id',auth[_0xee2f('0x7')](),controller[_0xee2f('0xb')]);router['post']('/',auth[_0xee2f('0x7')](),controller[_0xee2f('0xc')]);router['put']('/:id',auth['isAuthenticated'](),controller['update']);router[_0xee2f('0xd')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0xee2f('0xe')]=router;
\ No newline at end of file
index 89b23c4..d919f6c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d03=['STRING','account','agent','queue','DATE','moment','sequelize','exports'];(function(_0x1035c1,_0x2d8583){var _0x308d67=function(_0x58ddb6){while(--_0x58ddb6){_0x1035c1['push'](_0x1035c1['shift']());}};_0x308d67(++_0x2d8583);}(_0x1d03,0x8d));var _0x31d0=function(_0x4de460,_0x15f724){_0x4de460=_0x4de460-0x0;var _0x3c3c97=_0x1d03[_0x4de460];return _0x3c3c97;};'use strict';var moment=require(_0x31d0('0x0'));var Sequelize=require(_0x31d0('0x1'));module[_0x31d0('0x2')]={'uniqueid':{'type':Sequelize[_0x31d0('0x3')],'allowNull':![]},'type':{'type':Sequelize['ENUM'](_0x31d0('0x4'),_0x31d0('0x5'),_0x31d0('0x6')),'allowNull':![],'defaultValue':_0x31d0('0x6')},'transferredAt':{'type':Sequelize[_0x31d0('0x7')],'allowNull':![],'defaultValue':Sequelize['NOW']}};
\ No newline at end of file
+var _0x8f79=['ENUM','account','agent','NOW','moment','sequelize','STRING'];(function(_0x139867,_0x103c57){var _0x3cfd99=function(_0x3640a3){while(--_0x3640a3){_0x139867['push'](_0x139867['shift']());}};_0x3cfd99(++_0x103c57);}(_0x8f79,0x7b));var _0x98f7=function(_0x460c41,_0x10df8e){_0x460c41=_0x460c41-0x0;var _0x19b931=_0x8f79[_0x460c41];return _0x19b931;};'use strict';var moment=require(_0x98f7('0x0'));var Sequelize=require(_0x98f7('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0x98f7('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x98f7('0x3')](_0x98f7('0x4'),_0x98f7('0x5'),'queue'),'allowNull':![],'defaultValue':'queue'},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0x98f7('0x6')]}};
\ No newline at end of file
index d513a67..a67a97c 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','update','destroy','describe','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','error','stack','send','index','MailTransferReport','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','nolimit','order','sort'];(function(_0x4713d0,_0x43d3ce){var _0x1ea994=function(_0x4bec09){while(--_0x4bec09){_0x4713d0['push'](_0x4713d0['shift']());}};_0x1ea994(++_0x43d3ce);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0xa9e0[_0x4cf98e];return _0x1623ac;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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['MailTransferReport'][_0x0a9e('0x17')](_0x381c37)[_0x0a9e('0x1f')](function(_0x3cae){_0x45a1e7['count']=_0x3cae;if(_0x33161b[_0x0a9e('0x28')][_0x0a9e('0x39')]){_0x384319[_0x0a9e('0x3a')]=[{'all':!![]}];}return db['MailTransferReport']['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['MailTransferReport'][_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
+var _0xda3f=['set','Content-Range','apply','save','then','destroy','error','name','send','index','MailTransferReport','model','keys','query','filters','intersection','attributes','fields','length','nolimit','sort','pick','filter','where','merge','type','key','options','includeAll','findAll','catch','show','params','rawAttributes','find','create','body','describe','eml-format','rimraf','moment','mustache','util','sox','to-csv','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','limit','status'];(function(_0x144fbb,_0x397f2d){var _0x2e222d=function(_0x234062){while(--_0x234062){_0x144fbb['push'](_0x144fbb['shift']());}};_0x2e222d(++_0x397f2d);}(_0xda3f,0xec));var _0xfda3=function(_0x47ade0,_0xe23a13){_0x47ade0=_0x47ade0-0x0;var _0x579b1c=_0xda3f[_0x47ade0];return _0x579b1c;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xfda3('0x0'));var rimraf=require(_0xfda3('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xfda3('0x2'));var BPromise=require('bluebird');var Mustache=require(_0xfda3('0x3'));var util=require(_0xfda3('0x4'));var path=require('path');var sox=require(_0xfda3('0x5'));var csv=require(_0xfda3('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xfda3('0x7'));var crypto=require(_0xfda3('0x8'));var jsforce=require(_0xfda3('0x9'));var deskjs=require(_0xfda3('0xa'));var toCsv=require(_0xfda3('0x6'));var querystring=require(_0xfda3('0xb'));var Papa=require(_0xfda3('0xc'));var authService=require(_0xfda3('0xd'));var hardwareService=require(_0xfda3('0xe'));var Redis=require(_0xfda3('0xf'));var qs=require(_0xfda3('0x10'));var logger=require(_0xfda3('0x11'))('api');var utils=require(_0xfda3('0x12'));var config=require(_0xfda3('0x13'));var db=require(_0xfda3('0x14'))['db'];function respondWithStatusCode(_0x11afc1,_0x1443f4){_0x1443f4=_0x1443f4||0xcc;return function(_0x4b77ea){if(_0x4b77ea){return _0x11afc1[_0xfda3('0x15')](_0x1443f4);}return _0x11afc1['status'](_0x1443f4)[_0xfda3('0x16')]();};}function respondWithResult(_0x1e7a55,_0x4929fa){_0x4929fa=_0x4929fa||0xc8;return function(_0x501588){if(_0x501588){return _0x1e7a55['status'](_0x4929fa)[_0xfda3('0x17')](_0x501588);}};}function respondWithFilteredResult(_0x477fc0,_0x5ea793){return function(_0x57a229){if(_0x57a229){var _0x533365=_0x57a229[_0xfda3('0x18')],_0x80ea80=_0x5ea793[_0xfda3('0x19')],_0x474707=_0x5ea793[_0xfda3('0x19')]+_0x5ea793[_0xfda3('0x1a')],_0x249dc6;if(_0x474707>=_0x533365){_0x474707=_0x533365;_0x249dc6=0xc8;}else{_0x249dc6=0xce;}_0x477fc0[_0xfda3('0x1b')](_0x249dc6);return _0x477fc0[_0xfda3('0x1c')](_0xfda3('0x1d'),_0x80ea80+'-'+_0x474707+'/'+_0x533365)['json'](_0x57a229);}return null;};}function patchUpdates(_0x15ddb9){return function(_0x1bbdda){try{jsonpatch[_0xfda3('0x1e')](_0x1bbdda,_0x15ddb9,!![]);}catch(_0x32855a){return BPromise['reject'](_0x32855a);}return _0x1bbdda[_0xfda3('0x1f')]();};}function saveUpdates(_0x43cfac,_0x2ee74c){return function(_0x51e731){if(_0x51e731){return _0x51e731['update'](_0x43cfac)[_0xfda3('0x20')](function(_0x38d428){return _0x38d428;});}return null;};}function removeEntity(_0x4ea9f5,_0x545320){return function(_0x3cf5a9){if(_0x3cf5a9){return _0x3cf5a9[_0xfda3('0x21')]()[_0xfda3('0x20')](function(){_0x4ea9f5[_0xfda3('0x1b')](0xcc)[_0xfda3('0x16')]();});}};}function handleEntityNotFound(_0x2b84b7,_0x2677f6){return function(_0xc6fb9a){if(!_0xc6fb9a){_0x2b84b7[_0xfda3('0x15')](0x194);}return _0xc6fb9a;};}function handleError(_0x5499f5,_0x82341b){_0x82341b=_0x82341b||0x1f4;return function(_0x2d5b44){logger[_0xfda3('0x22')](_0x2d5b44['stack']);if(_0x2d5b44[_0xfda3('0x23')]){delete _0x2d5b44[_0xfda3('0x23')];}_0x5499f5[_0xfda3('0x1b')](_0x82341b)[_0xfda3('0x24')](_0x2d5b44);};}exports[_0xfda3('0x25')]=function(_0xad9f7b,_0x514d2a){var _0x3c6d7d={},_0x1e87fe={},_0x2bef2b={'count':0x0,'rows':[]};var _0x1f2884=db[_0xfda3('0x26')]['rawAttributes'];_0x1e87fe[_0xfda3('0x27')]=_[_0xfda3('0x28')](_0x1f2884);_0x1e87fe[_0xfda3('0x29')]=_[_0xfda3('0x28')](_0xad9f7b[_0xfda3('0x29')]);_0x1e87fe[_0xfda3('0x2a')]=_[_0xfda3('0x2b')](_0x1e87fe['model'],_0x1e87fe['query']);_0x3c6d7d[_0xfda3('0x2c')]=_['intersection'](_0x1e87fe['model'],qs[_0xfda3('0x2d')](_0xad9f7b[_0xfda3('0x29')][_0xfda3('0x2d')]));_0x3c6d7d[_0xfda3('0x2c')]=_0x3c6d7d[_0xfda3('0x2c')][_0xfda3('0x2e')]?_0x3c6d7d[_0xfda3('0x2c')]:_0x1e87fe[_0xfda3('0x27')];if(!_0xad9f7b[_0xfda3('0x29')]['hasOwnProperty'](_0xfda3('0x2f'))){_0x3c6d7d[_0xfda3('0x1a')]=qs[_0xfda3('0x1a')](_0xad9f7b[_0xfda3('0x29')][_0xfda3('0x1a')]);_0x3c6d7d[_0xfda3('0x19')]=qs[_0xfda3('0x19')](_0xad9f7b[_0xfda3('0x29')][_0xfda3('0x19')]);}_0x3c6d7d['order']=qs['sort'](_0xad9f7b[_0xfda3('0x29')][_0xfda3('0x30')]);_0x3c6d7d['where']=qs[_0xfda3('0x2a')](_[_0xfda3('0x31')](_0xad9f7b[_0xfda3('0x29')],_0x1e87fe['filters']));if(_0xad9f7b[_0xfda3('0x29')][_0xfda3('0x32')]){_0x3c6d7d[_0xfda3('0x33')]=_[_0xfda3('0x34')](_0x3c6d7d[_0xfda3('0x33')],{'$or':_['map'](_0x1f2884,function(_0xc6dd4e){if(_0xc6dd4e[_0xfda3('0x35')][_0xfda3('0x36')]!=='VIRTUAL'){var _0x373c96={};_0x373c96[_0xc6dd4e['field']]={'$like':'%'+_0xad9f7b[_0xfda3('0x29')][_0xfda3('0x32')]+'%'};return _0x373c96;}})});}_0x3c6d7d=_[_0xfda3('0x34')]({},_0x3c6d7d,_0xad9f7b[_0xfda3('0x37')]);var _0x21c5cc={'where':_0x3c6d7d[_0xfda3('0x33')]};return db[_0xfda3('0x26')][_0xfda3('0x18')](_0x21c5cc)['then'](function(_0x24c7ad){_0x2bef2b[_0xfda3('0x18')]=_0x24c7ad;if(_0xad9f7b[_0xfda3('0x29')][_0xfda3('0x38')]){_0x3c6d7d['include']=[{'all':!![]}];}return db[_0xfda3('0x26')][_0xfda3('0x39')](_0x3c6d7d);})[_0xfda3('0x20')](function(_0x5bad90){_0x2bef2b['rows']=_0x5bad90;return _0x2bef2b;})[_0xfda3('0x20')](respondWithFilteredResult(_0x514d2a,_0x3c6d7d))[_0xfda3('0x3a')](handleError(_0x514d2a,null));};exports[_0xfda3('0x3b')]=function(_0x1aaa6c,_0x2b415d){var _0x115f20={'raw':!![],'where':{'id':_0x1aaa6c[_0xfda3('0x3c')]['id']}},_0x40b814={};_0x40b814[_0xfda3('0x27')]=_[_0xfda3('0x28')](db['MailTransferReport'][_0xfda3('0x3d')]);_0x40b814[_0xfda3('0x29')]=_['keys'](_0x1aaa6c[_0xfda3('0x29')]);_0x40b814['filters']=_['intersection'](_0x40b814['model'],_0x40b814[_0xfda3('0x29')]);_0x115f20[_0xfda3('0x2c')]=_[_0xfda3('0x2b')](_0x40b814[_0xfda3('0x27')],qs['fields'](_0x1aaa6c[_0xfda3('0x29')][_0xfda3('0x2d')]));_0x115f20[_0xfda3('0x2c')]=_0x115f20[_0xfda3('0x2c')]['length']?_0x115f20[_0xfda3('0x2c')]:_0x40b814[_0xfda3('0x27')];if(_0x1aaa6c[_0xfda3('0x29')]['includeAll']){_0x115f20['include']=[{'all':!![]}];}_0x115f20=_[_0xfda3('0x34')]({},_0x115f20,_0x1aaa6c[_0xfda3('0x37')]);return db[_0xfda3('0x26')][_0xfda3('0x3e')](_0x115f20)[_0xfda3('0x20')](handleEntityNotFound(_0x2b415d,null))[_0xfda3('0x20')](respondWithResult(_0x2b415d,null))[_0xfda3('0x3a')](handleError(_0x2b415d,null));};exports[_0xfda3('0x3f')]=function(_0x12b533,_0x3ed533){return db[_0xfda3('0x26')][_0xfda3('0x3f')](_0x12b533[_0xfda3('0x40')],{})[_0xfda3('0x20')](respondWithResult(_0x3ed533,0xc9))['catch'](handleError(_0x3ed533,null));};exports['update']=function(_0x52b5c3,_0x2acde1){if(_0x52b5c3[_0xfda3('0x40')]['id']){delete _0x52b5c3[_0xfda3('0x40')]['id'];}return db[_0xfda3('0x26')][_0xfda3('0x3e')]({'where':{'id':_0x52b5c3[_0xfda3('0x3c')]['id']}})[_0xfda3('0x20')](handleEntityNotFound(_0x2acde1,null))[_0xfda3('0x20')](saveUpdates(_0x52b5c3[_0xfda3('0x40')],null))['then'](respondWithResult(_0x2acde1,null))[_0xfda3('0x3a')](handleError(_0x2acde1,null));};exports[_0xfda3('0x21')]=function(_0x481356,_0x36aa3a){return db[_0xfda3('0x26')]['find']({'where':{'id':_0x481356[_0xfda3('0x3c')]['id']}})[_0xfda3('0x20')](handleEntityNotFound(_0x36aa3a,null))[_0xfda3('0x20')](removeEntity(_0x36aa3a,null))['catch'](handleError(_0x36aa3a,null));};exports[_0xfda3('0x41')]=function(_0x39c96f,_0x11addf){return db['MailTransferReport'][_0xfda3('0x41')]()[_0xfda3('0x20')](respondWithResult(_0x11addf,null))[_0xfda3('0x3a')](handleError(_0x11addf,null));};
\ No newline at end of file
index b804fd9..8a11349 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e33=['../../config/logger','bluebird','request-promise','define','MailTransferReport','report_mail_transfer','uniqueid','lodash'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x3e33,0x137));var _0x33e3=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x3e33[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x33e3('0x0'));var util=require('util');var logger=require(_0x33e3('0x1'))('api');var moment=require('moment');var BPromise=require(_0x33e3('0x2'));var rp=require(_0x33e3('0x3'));var attributes=require('./mailTransferReport.attributes');module['exports']=function(_0x5d49a2,_0x553277){return _0x5d49a2[_0x33e3('0x4')](_0x33e3('0x5'),attributes,{'tableName':_0x33e3('0x6'),'paranoid':![],'indexes':[{'name':_0x33e3('0x7'),'fields':[_0x33e3('0x7')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x271d=['util','../../config/logger','moment','bluebird','request-promise','./mailTransferReport.attributes','exports','MailTransferReport','report_mail_transfer','uniqueid','lodash'];(function(_0x1a7f6d,_0x3708d0){var _0x1e29c4=function(_0x58524e){while(--_0x58524e){_0x1a7f6d['push'](_0x1a7f6d['shift']());}};_0x1e29c4(++_0x3708d0);}(_0x271d,0xaf));var _0xd271=function(_0x12378b,_0x29a4b8){_0x12378b=_0x12378b-0x0;var _0x5e6932=_0x271d[_0x12378b];return _0x5e6932;};'use strict';var _=require(_0xd271('0x0'));var util=require(_0xd271('0x1'));var logger=require(_0xd271('0x2'))('api');var moment=require(_0xd271('0x3'));var BPromise=require(_0xd271('0x4'));var rp=require(_0xd271('0x5'));var attributes=require(_0xd271('0x6'));module[_0xd271('0x7')]=function(_0x2aadd8,_0x3ef8ae){return _0x2aadd8['define'](_0xd271('0x8'),attributes,{'tableName':_0xd271('0x9'),'paranoid':![],'indexes':[{'name':_0xd271('0xa'),'fields':[_0xd271('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index 544ef3e..e0cef43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa207=['info','MailTransferReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then'];(function(_0x14da12,_0x12b035){var _0x261fbe=function(_0x3218b0){while(--_0x3218b0){_0x14da12['push'](_0x14da12['shift']());}};_0x261fbe(++_0x12b035);}(_0xa207,0x8d));var _0x7a20=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xa207[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x7a20('0x0'));var util=require(_0x7a20('0x1'));var moment=require(_0x7a20('0x2'));var BPromise=require(_0x7a20('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x7a20('0x4'));var db=require(_0x7a20('0x5'))['db'];var utils=require(_0x7a20('0x6'));var logger=require(_0x7a20('0x7'))(_0x7a20('0x8'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x7a20('0x9')][_0x7a20('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x3ab2f3,_0x3e2659,_0x198650){return new BPromise(function(_0x5ba425,_0x5e5217){return client[_0x7a20('0xb')](_0x3ab2f3,_0x198650)[_0x7a20('0xc')](function(_0x85010e){logger[_0x7a20('0xd')](_0x7a20('0xe'),_0x3e2659,_0x7a20('0xf'));logger[_0x7a20('0x10')]('MailTransferReport,\x20%s,\x20%s,\x20%s',_0x3e2659,_0x7a20('0xf'),JSON[_0x7a20('0x11')](_0x85010e));if(_0x85010e[_0x7a20('0x12')]){if(_0x85010e[_0x7a20('0x12')]['code']===0x1f4){logger[_0x7a20('0x12')](_0x7a20('0xe'),_0x3e2659,_0x85010e[_0x7a20('0x12')][_0x7a20('0x13')]);return _0x5e5217(_0x85010e['error'][_0x7a20('0x13')]);}logger[_0x7a20('0x12')]('MailTransferReport,\x20%s,\x20%s',_0x3e2659,_0x85010e[_0x7a20('0x12')][_0x7a20('0x13')]);return _0x5ba425(_0x85010e[_0x7a20('0x12')][_0x7a20('0x13')]);}else{logger['info'](_0x7a20('0xe'),_0x3e2659,'request\x20sent');_0x5ba425(_0x85010e[_0x7a20('0x14')][_0x7a20('0x13')]);}})[_0x7a20('0x15')](function(_0x363c4b){logger[_0x7a20('0x12')](_0x7a20('0xe'),_0x3e2659,_0x363c4b);_0x5e5217(_0x363c4b);});});}
\ No newline at end of file
+var _0x4138=['MailTransferReport,\x20%s,\x20%s','request\x20sent','debug','MailTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','lodash','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','request','then','info'];(function(_0x22a993,_0x4a48ba){var _0x13c3a7=function(_0x3c7cbe){while(--_0x3c7cbe){_0x22a993['push'](_0x22a993['shift']());}};_0x13c3a7(++_0x4a48ba);}(_0x4138,0x111));var _0x8413=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x4138[_0x3bf83f];return _0x22c4a9;};'use strict';var _=require(_0x8413('0x0'));var util=require(_0x8413('0x1'));var moment=require(_0x8413('0x2'));var BPromise=require(_0x8413('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x8413('0x4'))['db'];var utils=require(_0x8413('0x5'));var logger=require(_0x8413('0x6'))(_0x8413('0x7'));var config=require(_0x8413('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x8413('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x33046f,_0x1afe38,_0x4c51a7){return new BPromise(function(_0xb05b57,_0x2f8d09){return client[_0x8413('0xa')](_0x33046f,_0x4c51a7)[_0x8413('0xb')](function(_0x56b0a2){logger[_0x8413('0xc')](_0x8413('0xd'),_0x1afe38,_0x8413('0xe'));logger[_0x8413('0xf')](_0x8413('0x10'),_0x1afe38,_0x8413('0xe'),JSON[_0x8413('0x11')](_0x56b0a2));if(_0x56b0a2[_0x8413('0x12')]){if(_0x56b0a2['error'][_0x8413('0x13')]===0x1f4){logger[_0x8413('0x12')]('MailTransferReport,\x20%s,\x20%s',_0x1afe38,_0x56b0a2['error']['message']);return _0x2f8d09(_0x56b0a2[_0x8413('0x12')][_0x8413('0x14')]);}logger[_0x8413('0x12')]('MailTransferReport,\x20%s,\x20%s',_0x1afe38,_0x56b0a2[_0x8413('0x12')][_0x8413('0x14')]);return _0xb05b57(_0x56b0a2[_0x8413('0x12')][_0x8413('0x14')]);}else{logger[_0x8413('0xc')](_0x8413('0xd'),_0x1afe38,_0x8413('0xe'));_0xb05b57(_0x56b0a2['result']['message']);}})[_0x8413('0x15')](function(_0x559e8c){logger[_0x8413('0x12')](_0x8413('0xd'),_0x1afe38,_0x559e8c);_0x2f8d09(_0x559e8c);});});}
\ No newline at end of file
index 74cd9f4..4180e13 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x18c5=['/:id','show','create','put','update','delete','destroy','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./memberReport.controller','isAuthenticated','index','/describe','describe','get'];(function(_0x2070da,_0x45e586){var _0x4f9fe1=function(_0x5b6f2a){while(--_0x5b6f2a){_0x2070da['push'](_0x2070da['shift']());}};_0x4f9fe1(++_0x45e586);}(_0x18c5,0xc4));var _0x518c=function(_0xf35bc1,_0x510803){_0xf35bc1=_0xf35bc1-0x0;var _0xa6b162=_0x18c5[_0xf35bc1];return _0xa6b162;};'use strict';var multer=require(_0x518c('0x0'));var util=require('util');var path=require(_0x518c('0x1'));var timeout=require(_0x518c('0x2'));var express=require(_0x518c('0x3'));var router=express[_0x518c('0x4')]();var auth=require(_0x518c('0x5'));var interaction=require(_0x518c('0x6'));var config=require(_0x518c('0x7'));var controller=require(_0x518c('0x8'));router['get']('/',auth[_0x518c('0x9')](),controller[_0x518c('0xa')]);router['get'](_0x518c('0xb'),auth['isAuthenticated'](),controller[_0x518c('0xc')]);router[_0x518c('0xd')](_0x518c('0xe'),auth['isAuthenticated'](),controller[_0x518c('0xf')]);router['post']('/',auth[_0x518c('0x9')](),controller[_0x518c('0x10')]);router[_0x518c('0x11')](_0x518c('0xe'),auth[_0x518c('0x9')](),controller[_0x518c('0x12')]);router[_0x518c('0x13')]('/:id',auth[_0x518c('0x9')](),controller[_0x518c('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0x6f5b=['express','../../components/auth/service','../../components/interaction/service','../../config/environment','./memberReport.controller','get','/describe','isAuthenticated','show','post','create','put','/:id','path'];(function(_0x9b8eab,_0x2749e4){var _0x123a58=function(_0x48bb4f){while(--_0x48bb4f){_0x9b8eab['push'](_0x9b8eab['shift']());}};_0x123a58(++_0x2749e4);}(_0x6f5b,0x125));var _0xb6f5=function(_0x34fe88,_0x36a469){_0x34fe88=_0x34fe88-0x0;var _0x3d6cd0=_0x6f5b[_0x34fe88];return _0x3d6cd0;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0xb6f5('0x0'));var timeout=require('connect-timeout');var express=require(_0xb6f5('0x1'));var router=express['Router']();var auth=require(_0xb6f5('0x2'));var interaction=require(_0xb6f5('0x3'));var config=require(_0xb6f5('0x4'));var controller=require(_0xb6f5('0x5'));router[_0xb6f5('0x6')]('/',auth['isAuthenticated'](),controller['index']);router[_0xb6f5('0x6')](_0xb6f5('0x7'),auth[_0xb6f5('0x8')](),controller['describe']);router[_0xb6f5('0x6')]('/:id',auth[_0xb6f5('0x8')](),controller[_0xb6f5('0x9')]);router[_0xb6f5('0xa')]('/',auth[_0xb6f5('0x8')](),controller[_0xb6f5('0xb')]);router[_0xb6f5('0xc')](_0xb6f5('0xd'),auth['isAuthenticated'](),controller['update']);router['delete'](_0xb6f5('0xd'),auth[_0xb6f5('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 792d746..da19abf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd9af=['LOGIN,\x20PAUSE,\x20TALKING','INTEGER','DATE','enterAt','diff','seconds','setDataValue','exitAt','duration','talk:[inbound,\x20outbound],\x20pause:[reason]','talk:[start]','talk:[destination]','talk:[queue]','sequelize','moment','exports','STRING','DEFAULT\x20PAUSE'];(function(_0x51dc70,_0x228df6){var _0x511813=function(_0x2ecd11){while(--_0x2ecd11){_0x51dc70['push'](_0x51dc70['shift']());}};_0x511813(++_0x228df6);}(_0xd9af,0xf7));var _0xfd9a=function(_0x3a1424,_0x3a23f2){_0x3a1424=_0x3a1424-0x0;var _0x2bb0a2=_0xd9af[_0x3a1424];return _0x2bb0a2;};'use strict';var Sequelize=require(_0xfd9a('0x0'));var moment=require(_0xfd9a('0x1'));module[_0xfd9a('0x2')]={'channel':{'type':Sequelize['STRING']},'membername':{'type':Sequelize[_0xfd9a('0x3')]},'interface':{'type':Sequelize[_0xfd9a('0x3')]},'type':{'type':Sequelize['STRING'],'defaultValue':_0xfd9a('0x4'),'comment':_0xfd9a('0x5')},'duration':{'type':Sequelize[_0xfd9a('0x6')]},'enterAt':{'type':Sequelize[_0xfd9a('0x7')]},'exitAt':{'type':Sequelize[_0xfd9a('0x7')],'set':function(_0x515553){var _0x297663=moment(_0x515553);var _0x3ccdb1=moment(this['getDataValue'](_0xfd9a('0x8')));var _0x187dfb=_0x297663[_0xfd9a('0x9')](_0x3ccdb1,_0xfd9a('0xa'));this[_0xfd9a('0xb')](_0xfd9a('0xc'),_0x515553);this[_0xfd9a('0xb')](_0xfd9a('0xd'),_0x187dfb||null);}},'data1':{'type':Sequelize[_0xfd9a('0x3')],'comment':_0xfd9a('0xe')},'data2':{'type':Sequelize[_0xfd9a('0x3')],'comment':_0xfd9a('0xf')},'data3':{'type':Sequelize[_0xfd9a('0x3')],'comment':_0xfd9a('0x10')},'data4':{'type':Sequelize[_0xfd9a('0x3')],'comment':'talk:[dial\x20string]'},'data5':{'type':Sequelize['STRING'],'comment':_0xfd9a('0x11')},'role':{'type':Sequelize[_0xfd9a('0x3')]},'internal':{'type':Sequelize[_0xfd9a('0x6')]},'uniqueid':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xa56b=['talk:[start]','talk:[destination]','talk:[dial\x20string]','talk:[queue]','sequelize','moment','STRING','DEFAULT\x20PAUSE','LOGIN,\x20PAUSE,\x20TALKING','INTEGER','DATE','getDataValue','enterAt','setDataValue','exitAt','duration','talk:[inbound,\x20outbound],\x20pause:[reason]'];(function(_0x42cb8d,_0x273bca){var _0x2713b6=function(_0x15b77f){while(--_0x15b77f){_0x42cb8d['push'](_0x42cb8d['shift']());}};_0x2713b6(++_0x273bca);}(_0xa56b,0xf2));var _0xba56=function(_0x1992f1,_0x5c61f0){_0x1992f1=_0x1992f1-0x0;var _0x413dfe=_0xa56b[_0x1992f1];return _0x413dfe;};'use strict';var Sequelize=require(_0xba56('0x0'));var moment=require(_0xba56('0x1'));module['exports']={'channel':{'type':Sequelize[_0xba56('0x2')]},'membername':{'type':Sequelize['STRING']},'interface':{'type':Sequelize[_0xba56('0x2')]},'type':{'type':Sequelize['STRING'],'defaultValue':_0xba56('0x3'),'comment':_0xba56('0x4')},'duration':{'type':Sequelize[_0xba56('0x5')]},'enterAt':{'type':Sequelize[_0xba56('0x6')]},'exitAt':{'type':Sequelize[_0xba56('0x6')],'set':function(_0xfa6992){var _0x4ba8eb=moment(_0xfa6992);var _0xcb7f68=moment(this[_0xba56('0x7')](_0xba56('0x8')));var _0x54eb30=_0x4ba8eb['diff'](_0xcb7f68,'seconds');this[_0xba56('0x9')](_0xba56('0xa'),_0xfa6992);this[_0xba56('0x9')](_0xba56('0xb'),_0x54eb30||null);}},'data1':{'type':Sequelize['STRING'],'comment':_0xba56('0xc')},'data2':{'type':Sequelize[_0xba56('0x2')],'comment':_0xba56('0xd')},'data3':{'type':Sequelize[_0xba56('0x2')],'comment':_0xba56('0xe')},'data4':{'type':Sequelize['STRING'],'comment':_0xba56('0xf')},'data5':{'type':Sequelize['STRING'],'comment':_0xba56('0x10')},'role':{'type':Sequelize[_0xba56('0x2')]},'internal':{'type':Sequelize[_0xba56('0x5')]},'uniqueid':{'type':Sequelize['STRING']}};
\ No newline at end of file
index c1c7c44..593afd9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4e39=['count','offset','limit','Content-Range','json','apply','reject','update','then','destroy','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','MemberReport','includeAll','rows','catch','show','params','include','create','body','find','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','ejs','lodash','squel','jsforce','desk.js','to-csv','querystring','papaparse','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end'];(function(_0x21778c,_0x2f3584){var _0x1ddafc=function(_0x4f7f3d){while(--_0x4f7f3d){_0x21778c['push'](_0x21778c['shift']());}};_0x1ddafc(++_0x2f3584);}(_0x4e39,0x14d));var _0x94e3=function(_0x2302a1,_0x4bc33d){_0x2302a1=_0x2302a1-0x0;var _0x413cae=_0x4e39[_0x2302a1];return _0x413cae;};'use strict';var pdf=require(_0x94e3('0x0'));var emlformat=require(_0x94e3('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x94e3('0x2'));var jsonpatch=require(_0x94e3('0x3'));var rp=require(_0x94e3('0x4'));var moment=require(_0x94e3('0x5'));var BPromise=require(_0x94e3('0x6'));var Mustache=require(_0x94e3('0x7'));var util=require(_0x94e3('0x8'));var path=require('path');var sox=require(_0x94e3('0x9'));var csv=require('to-csv');var ejs=require(_0x94e3('0xa'));var fs=require('fs');var _=require(_0x94e3('0xb'));var squel=require(_0x94e3('0xc'));var crypto=require('crypto');var jsforce=require(_0x94e3('0xd'));var deskjs=require(_0x94e3('0xe'));var toCsv=require(_0x94e3('0xf'));var querystring=require(_0x94e3('0x10'));var Papa=require(_0x94e3('0x11'));var authService=require('../../components/auth/service');var hardwareService=require(_0x94e3('0x12'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x94e3('0x13'))(_0x94e3('0x14'));var utils=require(_0x94e3('0x15'));var config=require(_0x94e3('0x16'));var db=require(_0x94e3('0x17'))['db'];function respondWithStatusCode(_0x3e5003,_0x1b3a71){_0x1b3a71=_0x1b3a71||0xcc;return function(_0x35b85b){if(_0x35b85b){return _0x3e5003[_0x94e3('0x18')](_0x1b3a71);}return _0x3e5003[_0x94e3('0x19')](_0x1b3a71)[_0x94e3('0x1a')]();};}function respondWithResult(_0x332421,_0x43d6dd){_0x43d6dd=_0x43d6dd||0xc8;return function(_0x24ddda){if(_0x24ddda){return _0x332421[_0x94e3('0x19')](_0x43d6dd)['json'](_0x24ddda);}};}function respondWithFilteredResult(_0x160580,_0x568c22){return function(_0xfc75d7){if(_0xfc75d7){var _0x4bb2b9=_0xfc75d7[_0x94e3('0x1b')],_0x267319=_0x568c22[_0x94e3('0x1c')],_0x52f480=_0x568c22[_0x94e3('0x1c')]+_0x568c22[_0x94e3('0x1d')],_0x22b548;if(_0x52f480>=_0x4bb2b9){_0x52f480=_0x4bb2b9;_0x22b548=0xc8;}else{_0x22b548=0xce;}_0x160580['status'](_0x22b548);return _0x160580['set'](_0x94e3('0x1e'),_0x267319+'-'+_0x52f480+'/'+_0x4bb2b9)[_0x94e3('0x1f')](_0xfc75d7);}return null;};}function patchUpdates(_0x1dcee2){return function(_0x31d683){try{jsonpatch[_0x94e3('0x20')](_0x31d683,_0x1dcee2,!![]);}catch(_0x8fb0a6){return BPromise[_0x94e3('0x21')](_0x8fb0a6);}return _0x31d683['save']();};}function saveUpdates(_0x4d3712,_0x73dfde){return function(_0xf29dc2){if(_0xf29dc2){return _0xf29dc2[_0x94e3('0x22')](_0x4d3712)[_0x94e3('0x23')](function(_0x1dce6c){return _0x1dce6c;});}return null;};}function removeEntity(_0x13822e,_0x2cb671){return function(_0x584a63){if(_0x584a63){return _0x584a63[_0x94e3('0x24')]()['then'](function(){_0x13822e[_0x94e3('0x19')](0xcc)[_0x94e3('0x1a')]();});}};}function handleEntityNotFound(_0x4362cc,_0x56a119){return function(_0x27ec4e){if(!_0x27ec4e){_0x4362cc[_0x94e3('0x18')](0x194);}return _0x27ec4e;};}function handleError(_0x44cab9,_0x5f5efc){_0x5f5efc=_0x5f5efc||0x1f4;return function(_0x42aae5){logger['error'](_0x42aae5['stack']);if(_0x42aae5[_0x94e3('0x25')]){delete _0x42aae5[_0x94e3('0x25')];}_0x44cab9[_0x94e3('0x19')](_0x5f5efc)[_0x94e3('0x26')](_0x42aae5);};}exports[_0x94e3('0x27')]=function(_0x3fbf25,_0x423c06){var _0x1b408b={},_0x3d5705={},_0x48a6a3={'count':0x0,'rows':[]};var _0x1317c6=db['MemberReport'][_0x94e3('0x28')];_0x3d5705[_0x94e3('0x29')]=_[_0x94e3('0x2a')](_0x1317c6);_0x3d5705[_0x94e3('0x2b')]=_[_0x94e3('0x2a')](_0x3fbf25[_0x94e3('0x2b')]);_0x3d5705[_0x94e3('0x2c')]=_[_0x94e3('0x2d')](_0x3d5705[_0x94e3('0x29')],_0x3d5705['query']);_0x1b408b[_0x94e3('0x2e')]=_[_0x94e3('0x2d')](_0x3d5705[_0x94e3('0x29')],qs[_0x94e3('0x2f')](_0x3fbf25['query'][_0x94e3('0x2f')]));_0x1b408b['attributes']=_0x1b408b[_0x94e3('0x2e')]['length']?_0x1b408b[_0x94e3('0x2e')]:_0x3d5705[_0x94e3('0x29')];if(!_0x3fbf25['query'][_0x94e3('0x30')](_0x94e3('0x31'))){_0x1b408b[_0x94e3('0x1d')]=qs['limit'](_0x3fbf25[_0x94e3('0x2b')]['limit']);_0x1b408b[_0x94e3('0x1c')]=qs['offset'](_0x3fbf25[_0x94e3('0x2b')][_0x94e3('0x1c')]);}_0x1b408b['order']=qs[_0x94e3('0x32')](_0x3fbf25['query'][_0x94e3('0x32')]);_0x1b408b[_0x94e3('0x33')]=qs[_0x94e3('0x2c')](_[_0x94e3('0x34')](_0x3fbf25['query'],_0x3d5705[_0x94e3('0x2c')]));if(_0x3fbf25[_0x94e3('0x2b')][_0x94e3('0x35')]){_0x1b408b['where']=_['merge'](_0x1b408b[_0x94e3('0x33')],{'$or':_[_0x94e3('0x36')](_0x1317c6,function(_0x28be6c){if(_0x28be6c[_0x94e3('0x37')][_0x94e3('0x38')]!==_0x94e3('0x39')){var _0x4fac4e={};_0x4fac4e[_0x28be6c[_0x94e3('0x3a')]]={'$like':'%'+_0x3fbf25[_0x94e3('0x2b')][_0x94e3('0x35')]+'%'};return _0x4fac4e;}})});}_0x1b408b=_[_0x94e3('0x3b')]({},_0x1b408b,_0x3fbf25[_0x94e3('0x3c')]);var _0x4a83c4={'where':_0x1b408b[_0x94e3('0x33')]};return db[_0x94e3('0x3d')]['count'](_0x4a83c4)[_0x94e3('0x23')](function(_0x5e6c7d){_0x48a6a3[_0x94e3('0x1b')]=_0x5e6c7d;if(_0x3fbf25['query'][_0x94e3('0x3e')]){_0x1b408b['include']=[{'all':!![]}];}return db[_0x94e3('0x3d')]['findAll'](_0x1b408b);})[_0x94e3('0x23')](function(_0x2b86c7){_0x48a6a3[_0x94e3('0x3f')]=_0x2b86c7;return _0x48a6a3;})[_0x94e3('0x23')](respondWithFilteredResult(_0x423c06,_0x1b408b))[_0x94e3('0x40')](handleError(_0x423c06,null));};exports[_0x94e3('0x41')]=function(_0x3b76bd,_0x2e7063){var _0xa4a375={'raw':!![],'where':{'id':_0x3b76bd[_0x94e3('0x42')]['id']}},_0x3d746b={};_0x3d746b[_0x94e3('0x29')]=_[_0x94e3('0x2a')](db['MemberReport'][_0x94e3('0x28')]);_0x3d746b['query']=_['keys'](_0x3b76bd[_0x94e3('0x2b')]);_0x3d746b['filters']=_[_0x94e3('0x2d')](_0x3d746b[_0x94e3('0x29')],_0x3d746b[_0x94e3('0x2b')]);_0xa4a375[_0x94e3('0x2e')]=_[_0x94e3('0x2d')](_0x3d746b[_0x94e3('0x29')],qs[_0x94e3('0x2f')](_0x3b76bd[_0x94e3('0x2b')][_0x94e3('0x2f')]));_0xa4a375[_0x94e3('0x2e')]=_0xa4a375['attributes']['length']?_0xa4a375[_0x94e3('0x2e')]:_0x3d746b[_0x94e3('0x29')];if(_0x3b76bd[_0x94e3('0x2b')][_0x94e3('0x3e')]){_0xa4a375[_0x94e3('0x43')]=[{'all':!![]}];}_0xa4a375=_[_0x94e3('0x3b')]({},_0xa4a375,_0x3b76bd['options']);return db[_0x94e3('0x3d')]['find'](_0xa4a375)[_0x94e3('0x23')](handleEntityNotFound(_0x2e7063,null))[_0x94e3('0x23')](respondWithResult(_0x2e7063,null))['catch'](handleError(_0x2e7063,null));};exports['create']=function(_0x4cec0f,_0x2a2662){return db['MemberReport'][_0x94e3('0x44')](_0x4cec0f[_0x94e3('0x45')],{})[_0x94e3('0x23')](respondWithResult(_0x2a2662,0xc9))[_0x94e3('0x40')](handleError(_0x2a2662,null));};exports[_0x94e3('0x22')]=function(_0x4942b2,_0x343217){if(_0x4942b2[_0x94e3('0x45')]['id']){delete _0x4942b2[_0x94e3('0x45')]['id'];}return db[_0x94e3('0x3d')][_0x94e3('0x46')]({'where':{'id':_0x4942b2[_0x94e3('0x42')]['id']}})[_0x94e3('0x23')](handleEntityNotFound(_0x343217,null))[_0x94e3('0x23')](saveUpdates(_0x4942b2['body'],null))[_0x94e3('0x23')](respondWithResult(_0x343217,null))[_0x94e3('0x40')](handleError(_0x343217,null));};exports[_0x94e3('0x24')]=function(_0x25771c,_0x86ce98){return db[_0x94e3('0x3d')][_0x94e3('0x46')]({'where':{'id':_0x25771c[_0x94e3('0x42')]['id']}})['then'](handleEntityNotFound(_0x86ce98,null))[_0x94e3('0x23')](removeEntity(_0x86ce98,null))[_0x94e3('0x40')](handleError(_0x86ce98,null));};exports[_0x94e3('0x47')]=function(_0x660ac8,_0x1fdc71){return db[_0x94e3('0x3d')][_0x94e3('0x47')]()[_0x94e3('0x23')](respondWithResult(_0x1fdc71,null))[_0x94e3('0x40')](handleError(_0x1fdc71,null));};
\ No newline at end of file
+var _0x6827=['catch','params','length','include','find','create','body','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','util','path','sox','lodash','squel','desk.js','to-csv','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','offset','limit','status','set','Content-Range','apply','reject','save','update','then','destroy','error','name','send','index','MemberReport','rawAttributes','model','keys','query','filters','attributes','intersection','fields','hasOwnProperty','nolimit','sort','where','pick','filter','merge','key','options','includeAll','findAll','rows'];(function(_0x105114,_0x213db9){var _0xea4357=function(_0x56a477){while(--_0x56a477){_0x105114['push'](_0x105114['shift']());}};_0xea4357(++_0x213db9);}(_0x6827,0xda));var _0x7682=function(_0x2cfd5c,_0x20ff82){_0x2cfd5c=_0x2cfd5c-0x0;var _0x578bf0=_0x6827[_0x2cfd5c];return _0x578bf0;};'use strict';var pdf=require(_0x7682('0x0'));var emlformat=require(_0x7682('0x1'));var rimraf=require(_0x7682('0x2'));var zipdir=require(_0x7682('0x3'));var jsonpatch=require(_0x7682('0x4'));var rp=require('request-promise');var moment=require(_0x7682('0x5'));var BPromise=require(_0x7682('0x6'));var Mustache=require('mustache');var util=require(_0x7682('0x7'));var path=require(_0x7682('0x8'));var sox=require(_0x7682('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x7682('0xa'));var squel=require(_0x7682('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x7682('0xc'));var toCsv=require(_0x7682('0xd'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x7682('0xe'));var hardwareService=require(_0x7682('0xf'));var Redis=require(_0x7682('0x10'));var qs=require(_0x7682('0x11'));var logger=require(_0x7682('0x12'))(_0x7682('0x13'));var utils=require(_0x7682('0x14'));var config=require(_0x7682('0x15'));var db=require(_0x7682('0x16'))['db'];function respondWithStatusCode(_0x11cbe9,_0x1513ff){_0x1513ff=_0x1513ff||0xcc;return function(_0x1e18f8){if(_0x1e18f8){return _0x11cbe9[_0x7682('0x17')](_0x1513ff);}return _0x11cbe9['status'](_0x1513ff)[_0x7682('0x18')]();};}function respondWithResult(_0x51d5c1,_0x1547d7){_0x1547d7=_0x1547d7||0xc8;return function(_0x1cc177){if(_0x1cc177){return _0x51d5c1['status'](_0x1547d7)[_0x7682('0x19')](_0x1cc177);}};}function respondWithFilteredResult(_0x51a082,_0x2b5171){return function(_0x20ffd){if(_0x20ffd){var _0x4a2548=_0x20ffd['count'],_0x3192d5=_0x2b5171[_0x7682('0x1a')],_0x4e2d6c=_0x2b5171[_0x7682('0x1a')]+_0x2b5171[_0x7682('0x1b')],_0x3ad05c;if(_0x4e2d6c>=_0x4a2548){_0x4e2d6c=_0x4a2548;_0x3ad05c=0xc8;}else{_0x3ad05c=0xce;}_0x51a082[_0x7682('0x1c')](_0x3ad05c);return _0x51a082[_0x7682('0x1d')](_0x7682('0x1e'),_0x3192d5+'-'+_0x4e2d6c+'/'+_0x4a2548)[_0x7682('0x19')](_0x20ffd);}return null;};}function patchUpdates(_0x4f0137){return function(_0x383e6e){try{jsonpatch[_0x7682('0x1f')](_0x383e6e,_0x4f0137,!![]);}catch(_0x2587ff){return BPromise[_0x7682('0x20')](_0x2587ff);}return _0x383e6e[_0x7682('0x21')]();};}function saveUpdates(_0x52eda6,_0x14d127){return function(_0x421a55){if(_0x421a55){return _0x421a55[_0x7682('0x22')](_0x52eda6)[_0x7682('0x23')](function(_0xfadb54){return _0xfadb54;});}return null;};}function removeEntity(_0x4f2d32,_0xef3a0c){return function(_0x11f9ac){if(_0x11f9ac){return _0x11f9ac[_0x7682('0x24')]()[_0x7682('0x23')](function(){_0x4f2d32[_0x7682('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x29a741,_0x216efd){return function(_0x2d418f){if(!_0x2d418f){_0x29a741[_0x7682('0x17')](0x194);}return _0x2d418f;};}function handleError(_0x1765ec,_0x3aa395){_0x3aa395=_0x3aa395||0x1f4;return function(_0x22de50){logger[_0x7682('0x25')](_0x22de50['stack']);if(_0x22de50[_0x7682('0x26')]){delete _0x22de50[_0x7682('0x26')];}_0x1765ec['status'](_0x3aa395)[_0x7682('0x27')](_0x22de50);};}exports[_0x7682('0x28')]=function(_0x2894ed,_0xefe347){var _0x128466={},_0x27cd2f={},_0x4b5d88={'count':0x0,'rows':[]};var _0x2975a8=db[_0x7682('0x29')][_0x7682('0x2a')];_0x27cd2f[_0x7682('0x2b')]=_[_0x7682('0x2c')](_0x2975a8);_0x27cd2f[_0x7682('0x2d')]=_[_0x7682('0x2c')](_0x2894ed['query']);_0x27cd2f[_0x7682('0x2e')]=_['intersection'](_0x27cd2f['model'],_0x27cd2f[_0x7682('0x2d')]);_0x128466[_0x7682('0x2f')]=_[_0x7682('0x30')](_0x27cd2f[_0x7682('0x2b')],qs['fields'](_0x2894ed[_0x7682('0x2d')][_0x7682('0x31')]));_0x128466[_0x7682('0x2f')]=_0x128466['attributes']['length']?_0x128466[_0x7682('0x2f')]:_0x27cd2f[_0x7682('0x2b')];if(!_0x2894ed[_0x7682('0x2d')][_0x7682('0x32')](_0x7682('0x33'))){_0x128466[_0x7682('0x1b')]=qs['limit'](_0x2894ed['query'][_0x7682('0x1b')]);_0x128466[_0x7682('0x1a')]=qs[_0x7682('0x1a')](_0x2894ed[_0x7682('0x2d')][_0x7682('0x1a')]);}_0x128466['order']=qs[_0x7682('0x34')](_0x2894ed[_0x7682('0x2d')][_0x7682('0x34')]);_0x128466[_0x7682('0x35')]=qs[_0x7682('0x2e')](_[_0x7682('0x36')](_0x2894ed[_0x7682('0x2d')],_0x27cd2f[_0x7682('0x2e')]));if(_0x2894ed[_0x7682('0x2d')][_0x7682('0x37')]){_0x128466[_0x7682('0x35')]=_[_0x7682('0x38')](_0x128466[_0x7682('0x35')],{'$or':_['map'](_0x2975a8,function(_0x451303){if(_0x451303['type'][_0x7682('0x39')]!=='VIRTUAL'){var _0x24cc1f={};_0x24cc1f[_0x451303['field']]={'$like':'%'+_0x2894ed['query']['filter']+'%'};return _0x24cc1f;}})});}_0x128466=_[_0x7682('0x38')]({},_0x128466,_0x2894ed[_0x7682('0x3a')]);var _0x338413={'where':_0x128466['where']};return db[_0x7682('0x29')]['count'](_0x338413)[_0x7682('0x23')](function(_0x295f6d){_0x4b5d88['count']=_0x295f6d;if(_0x2894ed['query'][_0x7682('0x3b')]){_0x128466['include']=[{'all':!![]}];}return db[_0x7682('0x29')][_0x7682('0x3c')](_0x128466);})[_0x7682('0x23')](function(_0xda9dba){_0x4b5d88[_0x7682('0x3d')]=_0xda9dba;return _0x4b5d88;})[_0x7682('0x23')](respondWithFilteredResult(_0xefe347,_0x128466))[_0x7682('0x3e')](handleError(_0xefe347,null));};exports['show']=function(_0x17edab,_0xa15750){var _0x3f3089={'raw':!![],'where':{'id':_0x17edab[_0x7682('0x3f')]['id']}},_0x1594dc={};_0x1594dc[_0x7682('0x2b')]=_[_0x7682('0x2c')](db[_0x7682('0x29')][_0x7682('0x2a')]);_0x1594dc[_0x7682('0x2d')]=_[_0x7682('0x2c')](_0x17edab[_0x7682('0x2d')]);_0x1594dc['filters']=_['intersection'](_0x1594dc[_0x7682('0x2b')],_0x1594dc['query']);_0x3f3089['attributes']=_[_0x7682('0x30')](_0x1594dc['model'],qs[_0x7682('0x31')](_0x17edab['query'][_0x7682('0x31')]));_0x3f3089['attributes']=_0x3f3089[_0x7682('0x2f')][_0x7682('0x40')]?_0x3f3089['attributes']:_0x1594dc[_0x7682('0x2b')];if(_0x17edab[_0x7682('0x2d')][_0x7682('0x3b')]){_0x3f3089[_0x7682('0x41')]=[{'all':!![]}];}_0x3f3089=_[_0x7682('0x38')]({},_0x3f3089,_0x17edab[_0x7682('0x3a')]);return db[_0x7682('0x29')][_0x7682('0x42')](_0x3f3089)[_0x7682('0x23')](handleEntityNotFound(_0xa15750,null))[_0x7682('0x23')](respondWithResult(_0xa15750,null))[_0x7682('0x3e')](handleError(_0xa15750,null));};exports['create']=function(_0xb88a63,_0x1e90b9){return db[_0x7682('0x29')][_0x7682('0x43')](_0xb88a63[_0x7682('0x44')],{})[_0x7682('0x23')](respondWithResult(_0x1e90b9,0xc9))[_0x7682('0x3e')](handleError(_0x1e90b9,null));};exports[_0x7682('0x22')]=function(_0x15da42,_0x5609a3){if(_0x15da42['body']['id']){delete _0x15da42[_0x7682('0x44')]['id'];}return db[_0x7682('0x29')]['find']({'where':{'id':_0x15da42[_0x7682('0x3f')]['id']}})[_0x7682('0x23')](handleEntityNotFound(_0x5609a3,null))[_0x7682('0x23')](saveUpdates(_0x15da42[_0x7682('0x44')],null))[_0x7682('0x23')](respondWithResult(_0x5609a3,null))['catch'](handleError(_0x5609a3,null));};exports[_0x7682('0x24')]=function(_0x5a5b00,_0xfbacdc){return db[_0x7682('0x29')][_0x7682('0x42')]({'where':{'id':_0x5a5b00[_0x7682('0x3f')]['id']}})[_0x7682('0x23')](handleEntityNotFound(_0xfbacdc,null))[_0x7682('0x23')](removeEntity(_0xfbacdc,null))['catch'](handleError(_0xfbacdc,null));};exports[_0x7682('0x45')]=function(_0x2a3ca7,_0x2781f6){return db[_0x7682('0x29')][_0x7682('0x45')]()[_0x7682('0x23')](respondWithResult(_0x2781f6,null))[_0x7682('0x3e')](handleError(_0x2781f6,null));};
\ No newline at end of file
index 4df2df0..0cfead9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2748=['api','bluebird','./memberReport.attributes','exports','define','MemberReport','report_member','membername_interface','membername','interface','util','../../config/logger'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x2748,0x1c6));var _0x8274=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x2748[_0x14add3];return _0x4a174f;};'use strict';var _=require('lodash');var util=require(_0x8274('0x0'));var logger=require(_0x8274('0x1'))(_0x8274('0x2'));var moment=require('moment');var BPromise=require(_0x8274('0x3'));var rp=require('request-promise');var attributes=require(_0x8274('0x4'));module[_0x8274('0x5')]=function(_0x5ba36f,_0x322e93){return _0x5ba36f[_0x8274('0x6')](_0x8274('0x7'),attributes,{'tableName':_0x8274('0x8'),'paranoid':![],'indexes':[{'name':_0x8274('0x9'),'fields':[_0x8274('0xa'),_0x8274('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x9c58=['MemberReport','report_member','membername_interface','membername','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./memberReport.attributes','exports','define'];(function(_0x188c88,_0x210793){var _0x4e4c38=function(_0x3d9e41){while(--_0x3d9e41){_0x188c88['push'](_0x188c88['shift']());}};_0x4e4c38(++_0x210793);}(_0x9c58,0x10e));var _0x89c5=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x9c58[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x89c5('0x0'));var util=require(_0x89c5('0x1'));var logger=require(_0x89c5('0x2'))(_0x89c5('0x3'));var moment=require(_0x89c5('0x4'));var BPromise=require(_0x89c5('0x5'));var rp=require(_0x89c5('0x6'));var attributes=require(_0x89c5('0x7'));module[_0x89c5('0x8')]=function(_0x2e56e6,_0x4fae6f){return _0x2e56e6[_0x89c5('0x9')](_0x89c5('0xa'),attributes,{'tableName':_0x89c5('0xb'),'paranoid':![],'indexes':[{'name':_0x89c5('0xc'),'fields':[_0x89c5('0xd'),'interface']}],'timestamps':!![]});};
\ No newline at end of file
index 7963ef9..b5387b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa8f3=['util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','request\x20sent','MemberReport,\x20%s,\x20%s,\x20%s','error','MemberReport,\x20%s,\x20%s','message','info','result','catch','GetMemberReport','MemberReport','findAll','options','where','attributes','limit','include','map','model','stringify','create','body','raw','CreateMemberReport','debug','UpdateMemberReport','update','lodash'];(function(_0x479650,_0x2bee99){var _0x26b288=function(_0x1ba49f){while(--_0x1ba49f){_0x479650['push'](_0x479650['shift']());}};_0x26b288(++_0x2bee99);}(_0xa8f3,0x167));var _0x3a8f=function(_0xa22240,_0x2dd35c){_0xa22240=_0xa22240-0x0;var _0x4b09d9=_0xa8f3[_0xa22240];return _0x4b09d9;};'use strict';var _=require(_0x3a8f('0x0'));var util=require(_0x3a8f('0x1'));var moment=require(_0x3a8f('0x2'));var BPromise=require(_0x3a8f('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x3a8f('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x3a8f('0x5'));var logger=require(_0x3a8f('0x6'))(_0x3a8f('0x7'));var config=require(_0x3a8f('0x8'));var jayson=require(_0x3a8f('0x9'));var client=jayson[_0x3a8f('0xa')][_0x3a8f('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5d3384,_0x392dd2,_0x4efc46){return new BPromise(function(_0x19d0d8,_0x48f54f){return client[_0x3a8f('0xc')](_0x5d3384,_0x4efc46)[_0x3a8f('0xd')](function(_0x5ca6fb){logger['info']('MemberReport,\x20%s,\x20%s',_0x392dd2,_0x3a8f('0xe'));logger['debug'](_0x3a8f('0xf'),_0x392dd2,_0x3a8f('0xe'),JSON['stringify'](_0x5ca6fb));if(_0x5ca6fb[_0x3a8f('0x10')]){if(_0x5ca6fb[_0x3a8f('0x10')]['code']===0x1f4){logger[_0x3a8f('0x10')](_0x3a8f('0x11'),_0x392dd2,_0x5ca6fb[_0x3a8f('0x10')][_0x3a8f('0x12')]);return _0x48f54f(_0x5ca6fb[_0x3a8f('0x10')][_0x3a8f('0x12')]);}logger[_0x3a8f('0x10')](_0x3a8f('0x11'),_0x392dd2,_0x5ca6fb[_0x3a8f('0x10')]['message']);return _0x19d0d8(_0x5ca6fb[_0x3a8f('0x10')][_0x3a8f('0x12')]);}else{logger[_0x3a8f('0x13')](_0x3a8f('0x11'),_0x392dd2,_0x3a8f('0xe'));_0x19d0d8(_0x5ca6fb[_0x3a8f('0x14')][_0x3a8f('0x12')]);}})[_0x3a8f('0x15')](function(_0x4816a3){logger[_0x3a8f('0x10')]('MemberReport,\x20%s,\x20%s',_0x392dd2,_0x4816a3);_0x48f54f(_0x4816a3);});});}exports[_0x3a8f('0x16')]=function(_0x814270){var _0x45afda=this;return new Promise(function(_0xfc1b43,_0x1b74e2){return db[_0x3a8f('0x17')][_0x3a8f('0x18')]({'raw':_0x814270['options']?_0x814270[_0x3a8f('0x19')]['raw']===undefined?!![]:![]:!![],'where':_0x814270['options']?_0x814270['options'][_0x3a8f('0x1a')]||null:null,'attributes':_0x814270[_0x3a8f('0x19')]?_0x814270[_0x3a8f('0x19')][_0x3a8f('0x1b')]||null:null,'limit':_0x814270['options']?_0x814270[_0x3a8f('0x19')][_0x3a8f('0x1c')]||null:null,'include':_0x814270['options']?_0x814270[_0x3a8f('0x19')][_0x3a8f('0x1d')]?_[_0x3a8f('0x1e')](_0x814270[_0x3a8f('0x19')][_0x3a8f('0x1d')],function(_0x34f318){return{'model':db[_0x34f318[_0x3a8f('0x1f')]],'as':_0x34f318['as'],'attributes':_0x34f318['attributes'],'include':_0x34f318[_0x3a8f('0x1d')]?_['map'](_0x34f318[_0x3a8f('0x1d')],function(_0xc51141){return{'model':db[_0xc51141['model']],'as':_0xc51141['as'],'attributes':_0xc51141['attributes'],'include':_0xc51141[_0x3a8f('0x1d')]?_['map'](_0xc51141['include'],function(_0x5807da){return{'model':db[_0x5807da[_0x3a8f('0x1f')]],'as':_0x5807da['as'],'attributes':_0x5807da[_0x3a8f('0x1b')]};}):[]};}):[]};}):[]:[]})[_0x3a8f('0xd')](function(_0x10aa95){logger[_0x3a8f('0x13')]('GetMemberReport',_0x814270);logger['debug'](_0x3a8f('0x16'),_0x814270,JSON[_0x3a8f('0x20')](_0x10aa95));_0xfc1b43(_0x10aa95);})['catch'](function(_0x548a0c){logger['error'](_0x3a8f('0x16'),_0x548a0c[_0x3a8f('0x12')],_0x814270);_0x1b74e2(_0x45afda[_0x3a8f('0x10')](0x1f4,_0x548a0c[_0x3a8f('0x12')]));});});};exports['CreateMemberReport']=function(_0x24c9b2){var _0x2ee78c=this;return new Promise(function(_0x4870ed,_0x3c1b67){return db[_0x3a8f('0x17')][_0x3a8f('0x21')](_0x24c9b2[_0x3a8f('0x22')],{'raw':_0x24c9b2[_0x3a8f('0x19')]?_0x24c9b2[_0x3a8f('0x19')][_0x3a8f('0x23')]===undefined?!![]:![]:!![]})[_0x3a8f('0xd')](function(_0x3268cb){logger['info'](_0x3a8f('0x24'),_0x24c9b2);logger[_0x3a8f('0x25')]('CreateMemberReport',_0x24c9b2,JSON[_0x3a8f('0x20')](_0x3268cb));_0x4870ed(_0x3268cb);})[_0x3a8f('0x15')](function(_0x1d5f1c){logger[_0x3a8f('0x10')](_0x3a8f('0x24'),_0x1d5f1c[_0x3a8f('0x12')],_0x24c9b2);_0x3c1b67(_0x2ee78c[_0x3a8f('0x10')](0x1f4,_0x1d5f1c[_0x3a8f('0x12')]));});});};exports[_0x3a8f('0x26')]=function(_0x498667){var _0x20c7c9=this;return new Promise(function(_0x3eebae,_0x21fb83){return db[_0x3a8f('0x17')][_0x3a8f('0x27')](_0x498667['body'],{'raw':_0x498667[_0x3a8f('0x19')]?_0x498667['options'][_0x3a8f('0x23')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x498667[_0x3a8f('0x19')]?_0x498667[_0x3a8f('0x19')][_0x3a8f('0x1a')]||null:null,'attributes':_0x498667['options']?_0x498667[_0x3a8f('0x19')][_0x3a8f('0x1b')]||null:null,'limit':_0x498667[_0x3a8f('0x19')]?_0x498667[_0x3a8f('0x19')][_0x3a8f('0x1c')]||null:null})['then'](function(_0x5b4cdc){logger[_0x3a8f('0x13')](_0x3a8f('0x26'),_0x498667);logger[_0x3a8f('0x25')](_0x3a8f('0x26'),_0x498667,JSON[_0x3a8f('0x20')](_0x5b4cdc));_0x3eebae(_0x5b4cdc);})[_0x3a8f('0x15')](function(_0x4db25c){logger[_0x3a8f('0x10')](_0x3a8f('0x26'),_0x4db25c['message'],_0x498667);_0x21fb83(_0x20c7c9['error'](0x1f4,_0x4db25c['message']));});});};
\ No newline at end of file
+var _0x5dff=['UpdateMemberReport','update','lodash','moment','randomstring','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','request','then','info','MemberReport,\x20%s,\x20%s','request\x20sent','debug','MemberReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','MemberReport','findAll','options','where','attributes','limit','map','include','model','GetMemberReport','CreateMemberReport','create','body','raw'];(function(_0x1c74ad,_0x759500){var _0x49b953=function(_0x10715a){while(--_0x10715a){_0x1c74ad['push'](_0x1c74ad['shift']());}};_0x49b953(++_0x759500);}(_0x5dff,0x71));var _0xf5df=function(_0x36da2a,_0x139b77){_0x36da2a=_0x36da2a-0x0;var _0x457b21=_0x5dff[_0x36da2a];return _0x457b21;};'use strict';var _=require(_0xf5df('0x0'));var util=require('util');var moment=require(_0xf5df('0x1'));var BPromise=require('bluebird');var rs=require(_0xf5df('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xf5df('0x3'))['db'];var utils=require(_0xf5df('0x4'));var logger=require('../../config/logger')('rpc');var config=require(_0xf5df('0x5'));var jayson=require(_0xf5df('0x6'));var client=jayson[_0xf5df('0x7')][_0xf5df('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x432017,_0x556367,_0x4f770a){return new BPromise(function(_0xd6175b,_0x5ee7c4){return client[_0xf5df('0x9')](_0x432017,_0x4f770a)[_0xf5df('0xa')](function(_0xda3c82){logger[_0xf5df('0xb')](_0xf5df('0xc'),_0x556367,_0xf5df('0xd'));logger[_0xf5df('0xe')](_0xf5df('0xf'),_0x556367,_0xf5df('0xd'),JSON[_0xf5df('0x10')](_0xda3c82));if(_0xda3c82['error']){if(_0xda3c82[_0xf5df('0x11')][_0xf5df('0x12')]===0x1f4){logger[_0xf5df('0x11')](_0xf5df('0xc'),_0x556367,_0xda3c82[_0xf5df('0x11')][_0xf5df('0x13')]);return _0x5ee7c4(_0xda3c82[_0xf5df('0x11')][_0xf5df('0x13')]);}logger[_0xf5df('0x11')]('MemberReport,\x20%s,\x20%s',_0x556367,_0xda3c82[_0xf5df('0x11')][_0xf5df('0x13')]);return _0xd6175b(_0xda3c82[_0xf5df('0x11')]['message']);}else{logger[_0xf5df('0xb')](_0xf5df('0xc'),_0x556367,'request\x20sent');_0xd6175b(_0xda3c82['result'][_0xf5df('0x13')]);}})[_0xf5df('0x14')](function(_0x72f7c8){logger[_0xf5df('0x11')](_0xf5df('0xc'),_0x556367,_0x72f7c8);_0x5ee7c4(_0x72f7c8);});});}exports['GetMemberReport']=function(_0x5c249a){var _0x3d5be4=this;return new Promise(function(_0x5af13b,_0xa2275a){return db[_0xf5df('0x15')][_0xf5df('0x16')]({'raw':_0x5c249a[_0xf5df('0x17')]?_0x5c249a[_0xf5df('0x17')]['raw']===undefined?!![]:![]:!![],'where':_0x5c249a[_0xf5df('0x17')]?_0x5c249a[_0xf5df('0x17')][_0xf5df('0x18')]||null:null,'attributes':_0x5c249a[_0xf5df('0x17')]?_0x5c249a[_0xf5df('0x17')][_0xf5df('0x19')]||null:null,'limit':_0x5c249a[_0xf5df('0x17')]?_0x5c249a[_0xf5df('0x17')][_0xf5df('0x1a')]||null:null,'include':_0x5c249a[_0xf5df('0x17')]?_0x5c249a['options']['include']?_[_0xf5df('0x1b')](_0x5c249a[_0xf5df('0x17')][_0xf5df('0x1c')],function(_0x298b48){return{'model':db[_0x298b48['model']],'as':_0x298b48['as'],'attributes':_0x298b48[_0xf5df('0x19')],'include':_0x298b48[_0xf5df('0x1c')]?_[_0xf5df('0x1b')](_0x298b48[_0xf5df('0x1c')],function(_0x52d9ba){return{'model':db[_0x52d9ba['model']],'as':_0x52d9ba['as'],'attributes':_0x52d9ba[_0xf5df('0x19')],'include':_0x52d9ba[_0xf5df('0x1c')]?_[_0xf5df('0x1b')](_0x52d9ba['include'],function(_0x1d3f00){return{'model':db[_0x1d3f00[_0xf5df('0x1d')]],'as':_0x1d3f00['as'],'attributes':_0x1d3f00[_0xf5df('0x19')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x1115e0){logger[_0xf5df('0xb')](_0xf5df('0x1e'),_0x5c249a);logger[_0xf5df('0xe')](_0xf5df('0x1e'),_0x5c249a,JSON['stringify'](_0x1115e0));_0x5af13b(_0x1115e0);})[_0xf5df('0x14')](function(_0x2ef1d7){logger[_0xf5df('0x11')]('GetMemberReport',_0x2ef1d7[_0xf5df('0x13')],_0x5c249a);_0xa2275a(_0x3d5be4[_0xf5df('0x11')](0x1f4,_0x2ef1d7[_0xf5df('0x13')]));});});};exports[_0xf5df('0x1f')]=function(_0x4363c7){var _0x39f8a7=this;return new Promise(function(_0x3c89a0,_0x5e5e0b){return db['MemberReport'][_0xf5df('0x20')](_0x4363c7[_0xf5df('0x21')],{'raw':_0x4363c7['options']?_0x4363c7[_0xf5df('0x17')][_0xf5df('0x22')]===undefined?!![]:![]:!![]})['then'](function(_0x464197){logger[_0xf5df('0xb')](_0xf5df('0x1f'),_0x4363c7);logger['debug'](_0xf5df('0x1f'),_0x4363c7,JSON['stringify'](_0x464197));_0x3c89a0(_0x464197);})[_0xf5df('0x14')](function(_0x18e057){logger[_0xf5df('0x11')](_0xf5df('0x1f'),_0x18e057[_0xf5df('0x13')],_0x4363c7);_0x5e5e0b(_0x39f8a7['error'](0x1f4,_0x18e057[_0xf5df('0x13')]));});});};exports[_0xf5df('0x23')]=function(_0x549d2d){var _0x29520c=this;return new Promise(function(_0x2f017f,_0x4f0a39){return db[_0xf5df('0x15')][_0xf5df('0x24')](_0x549d2d['body'],{'raw':_0x549d2d['options']?_0x549d2d['options'][_0xf5df('0x22')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x549d2d[_0xf5df('0x17')]?_0x549d2d[_0xf5df('0x17')][_0xf5df('0x18')]||null:null,'attributes':_0x549d2d[_0xf5df('0x17')]?_0x549d2d[_0xf5df('0x17')][_0xf5df('0x19')]||null:null,'limit':_0x549d2d[_0xf5df('0x17')]?_0x549d2d[_0xf5df('0x17')][_0xf5df('0x1a')]||null:null})[_0xf5df('0xa')](function(_0x45b82f){logger[_0xf5df('0xb')](_0xf5df('0x23'),_0x549d2d);logger[_0xf5df('0xe')](_0xf5df('0x23'),_0x549d2d,JSON[_0xf5df('0x10')](_0x45b82f));_0x2f017f(_0x45b82f);})[_0xf5df('0x14')](function(_0x295697){logger[_0xf5df('0x11')](_0xf5df('0x23'),_0x295697[_0xf5df('0x13')],_0x549d2d);_0x4f0a39(_0x29520c[_0xf5df('0x11')](0x1f4,_0x295697['message']));});});};
\ No newline at end of file
index 9d1ec5f..d3d313f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1788=['get','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./migration.controller'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0x1788,0x196));var _0x8178=function(_0x32f7d7,_0x54231b){_0x32f7d7=_0x32f7d7-0x0;var _0x133d09=_0x1788[_0x32f7d7];return _0x133d09;};'use strict';var multer=require('multer');var util=require(_0x8178('0x0'));var path=require(_0x8178('0x1'));var timeout=require(_0x8178('0x2'));var express=require(_0x8178('0x3'));var router=express[_0x8178('0x4')]();var auth=require(_0x8178('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x8178('0x6'));var controller=require(_0x8178('0x7'));router[_0x8178('0x8')]('/',controller['index']);module['exports']=router;
\ No newline at end of file
+var _0xce79=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./migration.controller','index','exports','multer','util','path','connect-timeout'];(function(_0x3bb5b4,_0x128455){var _0x586c60=function(_0x179226){while(--_0x179226){_0x3bb5b4['push'](_0x3bb5b4['shift']());}};_0x586c60(++_0x128455);}(_0xce79,0x140));var _0x9ce7=function(_0x4d9bb2,_0x3db50d){_0x4d9bb2=_0x4d9bb2-0x0;var _0x3179fe=_0xce79[_0x4d9bb2];return _0x3179fe;};'use strict';var multer=require(_0x9ce7('0x0'));var util=require(_0x9ce7('0x1'));var path=require(_0x9ce7('0x2'));var timeout=require(_0x9ce7('0x3'));var express=require(_0x9ce7('0x4'));var router=express[_0x9ce7('0x5')]();var auth=require(_0x9ce7('0x6'));var interaction=require(_0x9ce7('0x7'));var config=require(_0x9ce7('0x8'));var controller=require(_0x9ce7('0x9'));router['get']('/',controller[_0x9ce7('0xa')]);module[_0x9ce7('0xb')]=router;
\ No newline at end of file
index a70e7a5..5e75b61 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3aa=['STRING','exports'];(function(_0x3f93fa,_0x1aaf76){var _0x5167a4=function(_0x119b0b){while(--_0x119b0b){_0x3f93fa['push'](_0x3f93fa['shift']());}};_0x5167a4(++_0x1aaf76);}(_0xe3aa,0x1cd));var _0xae3a=function(_0x3cb95c,_0x5d3740){_0x3cb95c=_0x3cb95c-0x0;var _0x16a7da=_0xe3aa[_0x3cb95c];return _0x16a7da;};'use strict';var Sequelize=require('sequelize');module[_0xae3a('0x0')]={'version':{'type':Sequelize[_0xae3a('0x1')],'primaryKey':!![],'autoIncrement':![]}};
\ No newline at end of file
+var _0x97a1=['sequelize','STRING'];(function(_0x4f08dd,_0x3784ec){var _0x3017ee=function(_0x7d95be){while(--_0x7d95be){_0x4f08dd['push'](_0x4f08dd['shift']());}};_0x3017ee(++_0x3784ec);}(_0x97a1,0x1e6));var _0x197a=function(_0x22b64a,_0x15fc63){_0x22b64a=_0x22b64a-0x0;var _0x102de9=_0x97a1[_0x22b64a];return _0x102de9;};'use strict';var Sequelize=require(_0x197a('0x0'));module['exports']={'version':{'type':Sequelize[_0x197a('0x1')],'primaryKey':!![],'autoIncrement':![]}};
\ No newline at end of file
index ee977b1..6f0f5ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa144=['rawAttributes','keys','query','filters','intersection','attributes','model','fields','length','nolimit','limit','order','sort','where','merge','map','type','VIRTUAL','filter','options','includeAll','include','catch','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','mustache','util','path','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','update','then','destroy','stack','name','send','index','Migration'];(function(_0x886f43,_0x5ae30f){var _0x2d1688=function(_0x5c9b15){while(--_0x5c9b15){_0x886f43['push'](_0x886f43['shift']());}};_0x2d1688(++_0x5ae30f);}(_0xa144,0x191));var _0x4a14=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0xa144[_0x5b644e];return _0x49c6bf;};'use strict';var pdf=require(_0x4a14('0x0'));var emlformat=require(_0x4a14('0x1'));var rimraf=require(_0x4a14('0x2'));var zipdir=require(_0x4a14('0x3'));var jsonpatch=require(_0x4a14('0x4'));var rp=require('request-promise');var moment=require(_0x4a14('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x4a14('0x6'));var util=require(_0x4a14('0x7'));var path=require(_0x4a14('0x8'));var sox=require('sox');var csv=require(_0x4a14('0x9'));var ejs=require(_0x4a14('0xa'));var fs=require('fs');var _=require(_0x4a14('0xb'));var squel=require(_0x4a14('0xc'));var crypto=require('crypto');var jsforce=require(_0x4a14('0xd'));var deskjs=require(_0x4a14('0xe'));var toCsv=require(_0x4a14('0x9'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x4a14('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x4a14('0x10'));var qs=require(_0x4a14('0x11'));var logger=require(_0x4a14('0x12'))('api');var utils=require(_0x4a14('0x13'));var config=require(_0x4a14('0x14'));var db=require(_0x4a14('0x15'))['db'];function respondWithStatusCode(_0x2a543d,_0x1aefd4){_0x1aefd4=_0x1aefd4||0xcc;return function(_0x113531){if(_0x113531){return _0x2a543d[_0x4a14('0x16')](_0x1aefd4);}return _0x2a543d[_0x4a14('0x17')](_0x1aefd4)[_0x4a14('0x18')]();};}function respondWithResult(_0x2c66f2,_0xdeedb5){_0xdeedb5=_0xdeedb5||0xc8;return function(_0x550e6e){if(_0x550e6e){return _0x2c66f2[_0x4a14('0x17')](_0xdeedb5)[_0x4a14('0x19')](_0x550e6e);}};}function respondWithFilteredResult(_0x29d8c1,_0x5f3092){return function(_0x2f8fef){if(_0x2f8fef){var _0x43a49a=_0x2f8fef[_0x4a14('0x1a')],_0x8ac5c0=_0x5f3092[_0x4a14('0x1b')],_0x385a87=_0x5f3092[_0x4a14('0x1b')]+_0x5f3092['limit'],_0x26313d;if(_0x385a87>=_0x43a49a){_0x385a87=_0x43a49a;_0x26313d=0xc8;}else{_0x26313d=0xce;}_0x29d8c1['status'](_0x26313d);return _0x29d8c1[_0x4a14('0x1c')](_0x4a14('0x1d'),_0x8ac5c0+'-'+_0x385a87+'/'+_0x43a49a)[_0x4a14('0x19')](_0x2f8fef);}return null;};}function patchUpdates(_0x49a8fa){return function(_0xcf54ff){try{jsonpatch['apply'](_0xcf54ff,_0x49a8fa,!![]);}catch(_0x260bb1){return BPromise[_0x4a14('0x1e')](_0x260bb1);}return _0xcf54ff[_0x4a14('0x1f')]();};}function saveUpdates(_0x9668b7,_0x2c7e4d){return function(_0x4caaff){if(_0x4caaff){return _0x4caaff[_0x4a14('0x20')](_0x9668b7)[_0x4a14('0x21')](function(_0x326b29){return _0x326b29;});}return null;};}function removeEntity(_0x1c57ab,_0x37e7b1){return function(_0x29a2e1){if(_0x29a2e1){return _0x29a2e1[_0x4a14('0x22')]()[_0x4a14('0x21')](function(){_0x1c57ab[_0x4a14('0x17')](0xcc)[_0x4a14('0x18')]();});}};}function handleEntityNotFound(_0x47a2e0,_0x1da67e){return function(_0x4cc76f){if(!_0x4cc76f){_0x47a2e0['sendStatus'](0x194);}return _0x4cc76f;};}function handleError(_0x137101,_0x9dcc0e){_0x9dcc0e=_0x9dcc0e||0x1f4;return function(_0x10cb39){logger['error'](_0x10cb39[_0x4a14('0x23')]);if(_0x10cb39['name']){delete _0x10cb39[_0x4a14('0x24')];}_0x137101['status'](_0x9dcc0e)[_0x4a14('0x25')](_0x10cb39);};}exports[_0x4a14('0x26')]=function(_0xb8a207,_0x1c5d3a){var _0xe50c54={},_0x10a2b8={},_0x14e854={'count':0x0,'rows':[]};var _0xb732ef=db[_0x4a14('0x27')][_0x4a14('0x28')];_0x10a2b8['model']=_[_0x4a14('0x29')](_0xb732ef);_0x10a2b8[_0x4a14('0x2a')]=_[_0x4a14('0x29')](_0xb8a207[_0x4a14('0x2a')]);_0x10a2b8[_0x4a14('0x2b')]=_[_0x4a14('0x2c')](_0x10a2b8['model'],_0x10a2b8[_0x4a14('0x2a')]);_0xe50c54[_0x4a14('0x2d')]=_[_0x4a14('0x2c')](_0x10a2b8[_0x4a14('0x2e')],qs[_0x4a14('0x2f')](_0xb8a207[_0x4a14('0x2a')][_0x4a14('0x2f')]));_0xe50c54[_0x4a14('0x2d')]=_0xe50c54['attributes'][_0x4a14('0x30')]?_0xe50c54['attributes']:_0x10a2b8[_0x4a14('0x2e')];if(!_0xb8a207[_0x4a14('0x2a')]['hasOwnProperty'](_0x4a14('0x31'))){_0xe50c54[_0x4a14('0x32')]=qs[_0x4a14('0x32')](_0xb8a207[_0x4a14('0x2a')][_0x4a14('0x32')]);_0xe50c54[_0x4a14('0x1b')]=qs[_0x4a14('0x1b')](_0xb8a207[_0x4a14('0x2a')][_0x4a14('0x1b')]);}_0xe50c54[_0x4a14('0x33')]=qs[_0x4a14('0x34')](_0xb8a207[_0x4a14('0x2a')][_0x4a14('0x34')]);_0xe50c54[_0x4a14('0x35')]=qs[_0x4a14('0x2b')](_['pick'](_0xb8a207[_0x4a14('0x2a')],_0x10a2b8[_0x4a14('0x2b')]));if(_0xb8a207['query']['filter']){_0xe50c54[_0x4a14('0x35')]=_[_0x4a14('0x36')](_0xe50c54[_0x4a14('0x35')],{'$or':_[_0x4a14('0x37')](_0xb732ef,function(_0x567372){if(_0x567372[_0x4a14('0x38')]['key']!==_0x4a14('0x39')){var _0x2fdc91={};_0x2fdc91[_0x567372['field']]={'$like':'%'+_0xb8a207[_0x4a14('0x2a')][_0x4a14('0x3a')]+'%'};return _0x2fdc91;}})});}_0xe50c54=_['merge']({},_0xe50c54,_0xb8a207[_0x4a14('0x3b')]);var _0x3e8c48={'where':_0xe50c54['where']};return db[_0x4a14('0x27')]['count'](_0x3e8c48)['then'](function(_0x44a163){_0x14e854[_0x4a14('0x1a')]=_0x44a163;if(_0xb8a207[_0x4a14('0x2a')][_0x4a14('0x3c')]){_0xe50c54[_0x4a14('0x3d')]=[{'all':!![]}];}return db[_0x4a14('0x27')]['findAll'](_0xe50c54);})[_0x4a14('0x21')](function(_0x2a0048){_0x14e854['rows']=_0x2a0048;return _0x14e854;})[_0x4a14('0x21')](respondWithFilteredResult(_0x1c5d3a,_0xe50c54))[_0x4a14('0x3e')](handleError(_0x1c5d3a,null));};
\ No newline at end of file
+var _0x1541=['intersection','attributes','fields','hasOwnProperty','limit','order','where','pick','filter','merge','type','key','VIRTUAL','field','options','Migration','include','catch','eml-format','rimraf','fast-json-patch','request-promise','util','path','sox','ejs','lodash','squel','crypto','desk.js','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','Content-Range','apply','reject','save','update','then','destroy','stack','name','send','index','rawAttributes','model','keys','query','filters'];(function(_0x5eb3c1,_0x2d0bab){var _0xfafed=function(_0x5ec542){while(--_0x5ec542){_0x5eb3c1['push'](_0x5eb3c1['shift']());}};_0xfafed(++_0x2d0bab);}(_0x1541,0x180));var _0x1154=function(_0x205e5a,_0x5c19fb){_0x205e5a=_0x205e5a-0x0;var _0x10da58=_0x1541[_0x205e5a];return _0x10da58;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x1154('0x0'));var rimraf=require(_0x1154('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x1154('0x2'));var rp=require(_0x1154('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require(_0x1154('0x4'));var path=require(_0x1154('0x5'));var sox=require(_0x1154('0x6'));var csv=require('to-csv');var ejs=require(_0x1154('0x7'));var fs=require('fs');var _=require(_0x1154('0x8'));var squel=require(_0x1154('0x9'));var crypto=require(_0x1154('0xa'));var jsforce=require('jsforce');var deskjs=require(_0x1154('0xb'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x1154('0xc'));var hardwareService=require(_0x1154('0xd'));var Redis=require(_0x1154('0xe'));var qs=require(_0x1154('0xf'));var logger=require(_0x1154('0x10'))(_0x1154('0x11'));var utils=require(_0x1154('0x12'));var config=require(_0x1154('0x13'));var db=require(_0x1154('0x14'))['db'];function respondWithStatusCode(_0x25d96a,_0xd42351){_0xd42351=_0xd42351||0xcc;return function(_0x54f12b){if(_0x54f12b){return _0x25d96a[_0x1154('0x15')](_0xd42351);}return _0x25d96a[_0x1154('0x16')](_0xd42351)[_0x1154('0x17')]();};}function respondWithResult(_0x4b046e,_0x56dcf0){_0x56dcf0=_0x56dcf0||0xc8;return function(_0x35f0a2){if(_0x35f0a2){return _0x4b046e[_0x1154('0x16')](_0x56dcf0)[_0x1154('0x18')](_0x35f0a2);}};}function respondWithFilteredResult(_0x30d889,_0x191140){return function(_0x30f96a){if(_0x30f96a){var _0x47af60=_0x30f96a[_0x1154('0x19')],_0x3dd9fb=_0x191140[_0x1154('0x1a')],_0x1c212b=_0x191140[_0x1154('0x1a')]+_0x191140['limit'],_0x5ca99c;if(_0x1c212b>=_0x47af60){_0x1c212b=_0x47af60;_0x5ca99c=0xc8;}else{_0x5ca99c=0xce;}_0x30d889[_0x1154('0x16')](_0x5ca99c);return _0x30d889['set'](_0x1154('0x1b'),_0x3dd9fb+'-'+_0x1c212b+'/'+_0x47af60)[_0x1154('0x18')](_0x30f96a);}return null;};}function patchUpdates(_0x358bd2){return function(_0x5582d5){try{jsonpatch[_0x1154('0x1c')](_0x5582d5,_0x358bd2,!![]);}catch(_0x62367a){return BPromise[_0x1154('0x1d')](_0x62367a);}return _0x5582d5[_0x1154('0x1e')]();};}function saveUpdates(_0x5681ce,_0x5dac99){return function(_0xa9bae7){if(_0xa9bae7){return _0xa9bae7[_0x1154('0x1f')](_0x5681ce)[_0x1154('0x20')](function(_0x3eb3a9){return _0x3eb3a9;});}return null;};}function removeEntity(_0x5cfe49,_0x5de2d0){return function(_0x4f705b){if(_0x4f705b){return _0x4f705b[_0x1154('0x21')]()['then'](function(){_0x5cfe49['status'](0xcc)[_0x1154('0x17')]();});}};}function handleEntityNotFound(_0x40cf83,_0x246c84){return function(_0x4129da){if(!_0x4129da){_0x40cf83[_0x1154('0x15')](0x194);}return _0x4129da;};}function handleError(_0x478883,_0x5de5a1){_0x5de5a1=_0x5de5a1||0x1f4;return function(_0x482a9e){logger['error'](_0x482a9e[_0x1154('0x22')]);if(_0x482a9e[_0x1154('0x23')]){delete _0x482a9e[_0x1154('0x23')];}_0x478883['status'](_0x5de5a1)[_0x1154('0x24')](_0x482a9e);};}exports[_0x1154('0x25')]=function(_0x4ce934,_0x73cd54){var _0x46879a={},_0x4e7732={},_0x38d60c={'count':0x0,'rows':[]};var _0x59cce1=db['Migration'][_0x1154('0x26')];_0x4e7732[_0x1154('0x27')]=_[_0x1154('0x28')](_0x59cce1);_0x4e7732['query']=_[_0x1154('0x28')](_0x4ce934[_0x1154('0x29')]);_0x4e7732[_0x1154('0x2a')]=_[_0x1154('0x2b')](_0x4e7732['model'],_0x4e7732[_0x1154('0x29')]);_0x46879a[_0x1154('0x2c')]=_['intersection'](_0x4e7732[_0x1154('0x27')],qs[_0x1154('0x2d')](_0x4ce934[_0x1154('0x29')][_0x1154('0x2d')]));_0x46879a[_0x1154('0x2c')]=_0x46879a[_0x1154('0x2c')]['length']?_0x46879a['attributes']:_0x4e7732[_0x1154('0x27')];if(!_0x4ce934[_0x1154('0x29')][_0x1154('0x2e')]('nolimit')){_0x46879a[_0x1154('0x2f')]=qs['limit'](_0x4ce934[_0x1154('0x29')]['limit']);_0x46879a[_0x1154('0x1a')]=qs[_0x1154('0x1a')](_0x4ce934[_0x1154('0x29')][_0x1154('0x1a')]);}_0x46879a[_0x1154('0x30')]=qs['sort'](_0x4ce934[_0x1154('0x29')]['sort']);_0x46879a[_0x1154('0x31')]=qs[_0x1154('0x2a')](_[_0x1154('0x32')](_0x4ce934[_0x1154('0x29')],_0x4e7732[_0x1154('0x2a')]));if(_0x4ce934[_0x1154('0x29')][_0x1154('0x33')]){_0x46879a[_0x1154('0x31')]=_[_0x1154('0x34')](_0x46879a[_0x1154('0x31')],{'$or':_['map'](_0x59cce1,function(_0x342566){if(_0x342566[_0x1154('0x35')][_0x1154('0x36')]!==_0x1154('0x37')){var _0x19d1bb={};_0x19d1bb[_0x342566[_0x1154('0x38')]]={'$like':'%'+_0x4ce934[_0x1154('0x29')]['filter']+'%'};return _0x19d1bb;}})});}_0x46879a=_[_0x1154('0x34')]({},_0x46879a,_0x4ce934[_0x1154('0x39')]);var _0x53107c={'where':_0x46879a[_0x1154('0x31')]};return db[_0x1154('0x3a')][_0x1154('0x19')](_0x53107c)[_0x1154('0x20')](function(_0x5e4796){_0x38d60c[_0x1154('0x19')]=_0x5e4796;if(_0x4ce934[_0x1154('0x29')]['includeAll']){_0x46879a[_0x1154('0x3b')]=[{'all':!![]}];}return db['Migration']['findAll'](_0x46879a);})[_0x1154('0x20')](function(_0x480c31){_0x38d60c['rows']=_0x480c31;return _0x38d60c;})['then'](respondWithFilteredResult(_0x73cd54,_0x46879a))[_0x1154('0x3c')](handleError(_0x73cd54,null));};
\ No newline at end of file
index a413176..652b497 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xafb9=['request-promise','./migration.attributes','exports','define','migrations','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x49beea,_0x47add1){var _0x27693a=function(_0x192ed8){while(--_0x192ed8){_0x49beea['push'](_0x49beea['shift']());}};_0x27693a(++_0x47add1);}(_0xafb9,0x68));var _0x9afb=function(_0x659d15,_0x358d5c){_0x659d15=_0x659d15-0x0;var _0x5cb672=_0xafb9[_0x659d15];return _0x5cb672;};'use strict';var _=require(_0x9afb('0x0'));var util=require(_0x9afb('0x1'));var logger=require(_0x9afb('0x2'))(_0x9afb('0x3'));var moment=require(_0x9afb('0x4'));var BPromise=require(_0x9afb('0x5'));var rp=require(_0x9afb('0x6'));var attributes=require(_0x9afb('0x7'));module[_0x9afb('0x8')]=function(_0x4e983d,_0x498463){return _0x4e983d[_0x9afb('0x9')]('Migration',attributes,{'tableName':_0x9afb('0xa'),'paranoid':![],'indexes':[],'timestamps':![]});};
\ No newline at end of file
+var _0x8814=['api','bluebird','request-promise','./migration.attributes','exports','define','Migration','migrations','lodash'];(function(_0x145cc4,_0x510a61){var _0x2e2704=function(_0x3e988e){while(--_0x3e988e){_0x145cc4['push'](_0x145cc4['shift']());}};_0x2e2704(++_0x510a61);}(_0x8814,0x1b8));var _0x4881=function(_0x4e676e,_0x2a7c6d){_0x4e676e=_0x4e676e-0x0;var _0x336a3c=_0x8814[_0x4e676e];return _0x336a3c;};'use strict';var _=require(_0x4881('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x4881('0x1'));var moment=require('moment');var BPromise=require(_0x4881('0x2'));var rp=require(_0x4881('0x3'));var attributes=require(_0x4881('0x4'));module[_0x4881('0x5')]=function(_0x538391,_0x419475){return _0x538391[_0x4881('0x6')](_0x4881('0x7'),attributes,{'tableName':_0x4881('0x8'),'paranoid':![],'indexes':[],'timestamps':![]});};
\ No newline at end of file
index fb9742f..17f4ad7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a9a=['Migration,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','result','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','request','then'];(function(_0x23991f,_0x3cf4ee){var _0x536c7b=function(_0x1b9249){while(--_0x1b9249){_0x23991f['push'](_0x23991f['shift']());}};_0x536c7b(++_0x3cf4ee);}(_0x0a9a,0x183));var _0xa0a9=function(_0x93b6b5,_0x5ea4e1){_0x93b6b5=_0x93b6b5-0x0;var _0xe2eabf=_0x0a9a[_0x93b6b5];return _0xe2eabf;};'use strict';var _=require('lodash');var util=require(_0xa0a9('0x0'));var moment=require('moment');var BPromise=require(_0xa0a9('0x1'));var rs=require(_0xa0a9('0x2'));var fs=require('fs');var Redis=require(_0xa0a9('0x3'));var db=require(_0xa0a9('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xa0a9('0x5'))(_0xa0a9('0x6'));var config=require('../../config/environment');var jayson=require(_0xa0a9('0x7'));var client=jayson[_0xa0a9('0x8')][_0xa0a9('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x31d689,_0x499a29,_0x2b2eb4){return new BPromise(function(_0x520f42,_0x10aa8a){return client[_0xa0a9('0xa')](_0x31d689,_0x2b2eb4)[_0xa0a9('0xb')](function(_0x2d6ac0){logger['info'](_0xa0a9('0xc'),_0x499a29,_0xa0a9('0xd'));logger['debug']('Migration,\x20%s,\x20%s,\x20%s',_0x499a29,_0xa0a9('0xd'),JSON[_0xa0a9('0xe')](_0x2d6ac0));if(_0x2d6ac0['error']){if(_0x2d6ac0[_0xa0a9('0xf')]['code']===0x1f4){logger[_0xa0a9('0xf')]('Migration,\x20%s,\x20%s',_0x499a29,_0x2d6ac0[_0xa0a9('0xf')][_0xa0a9('0x10')]);return _0x10aa8a(_0x2d6ac0[_0xa0a9('0xf')][_0xa0a9('0x10')]);}logger[_0xa0a9('0xf')]('Migration,\x20%s,\x20%s',_0x499a29,_0x2d6ac0[_0xa0a9('0xf')][_0xa0a9('0x10')]);return _0x520f42(_0x2d6ac0[_0xa0a9('0xf')][_0xa0a9('0x10')]);}else{logger[_0xa0a9('0x11')](_0xa0a9('0xc'),_0x499a29,'request\x20sent');_0x520f42(_0x2d6ac0[_0xa0a9('0x12')]['message']);}})['catch'](function(_0x347092){logger[_0xa0a9('0xf')](_0xa0a9('0xc'),_0x499a29,_0x347092);_0x10aa8a(_0x347092);});});}
\ No newline at end of file
+var _0x826a=['debug','error','code','message','result','catch','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','info','Migration,\x20%s,\x20%s','request\x20sent'];(function(_0x42cae2,_0x284ef8){var _0x5f256f=function(_0x41abc8){while(--_0x41abc8){_0x42cae2['push'](_0x42cae2['shift']());}};_0x5f256f(++_0x284ef8);}(_0x826a,0x1aa));var _0xa826=function(_0x4314fb,_0x582e63){_0x4314fb=_0x4314fb-0x0;var _0x5a4546=_0x826a[_0x4314fb];return _0x5a4546;};'use strict';var _=require('lodash');var util=require(_0xa826('0x0'));var moment=require('moment');var BPromise=require(_0xa826('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xa826('0x2'));var db=require(_0xa826('0x3'))['db'];var utils=require(_0xa826('0x4'));var logger=require(_0xa826('0x5'))('rpc');var config=require(_0xa826('0x6'));var jayson=require(_0xa826('0x7'));var client=jayson[_0xa826('0x8')][_0xa826('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x45154f,_0x4124f5,_0x4339f9){return new BPromise(function(_0x14c2ba,_0xc348d2){return client[_0xa826('0xa')](_0x45154f,_0x4339f9)[_0xa826('0xb')](function(_0x1005e6){logger[_0xa826('0xc')](_0xa826('0xd'),_0x4124f5,_0xa826('0xe'));logger[_0xa826('0xf')]('Migration,\x20%s,\x20%s,\x20%s',_0x4124f5,_0xa826('0xe'),JSON['stringify'](_0x1005e6));if(_0x1005e6[_0xa826('0x10')]){if(_0x1005e6[_0xa826('0x10')][_0xa826('0x11')]===0x1f4){logger[_0xa826('0x10')](_0xa826('0xd'),_0x4124f5,_0x1005e6[_0xa826('0x10')][_0xa826('0x12')]);return _0xc348d2(_0x1005e6['error'][_0xa826('0x12')]);}logger['error'](_0xa826('0xd'),_0x4124f5,_0x1005e6[_0xa826('0x10')]['message']);return _0x14c2ba(_0x1005e6['error']['message']);}else{logger[_0xa826('0xc')]('Migration,\x20%s,\x20%s',_0x4124f5,'request\x20sent');_0x14c2ba(_0x1005e6[_0xa826('0x13')][_0xa826('0x12')]);}})[_0xa826('0x14')](function(_0x5832b9){logger[_0xa826('0x10')](_0xa826('0xd'),_0x4124f5,_0x5832b9);_0xc348d2(_0x5832b9);});});}
\ No newline at end of file
index 647d3c7..752fb97 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0453=['post','create','put','update','delete','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./network.controller','get','isAuthenticated','/:id'];(function(_0x55a120,_0x12b734){var _0x5b7fc8=function(_0x5c1afe){while(--_0x5c1afe){_0x55a120['push'](_0x55a120['shift']());}};_0x5b7fc8(++_0x12b734);}(_0x0453,0x155));var _0x3045=function(_0x5edfac,_0x56719a){_0x5edfac=_0x5edfac-0x0;var _0x2400c1=_0x0453[_0x5edfac];return _0x2400c1;};'use strict';var multer=require('multer');var util=require(_0x3045('0x0'));var path=require(_0x3045('0x1'));var timeout=require(_0x3045('0x2'));var express=require('express');var router=express[_0x3045('0x3')]();var auth=require(_0x3045('0x4'));var interaction=require(_0x3045('0x5'));var config=require(_0x3045('0x6'));var controller=require(_0x3045('0x7'));router[_0x3045('0x8')]('/',auth[_0x3045('0x9')](),controller['index']);router[_0x3045('0x8')](_0x3045('0xa'),auth[_0x3045('0x9')](),controller['show']);router[_0x3045('0xb')]('/',auth[_0x3045('0x9')](),controller[_0x3045('0xc')]);router[_0x3045('0xd')](_0x3045('0xa'),auth[_0x3045('0x9')](),controller[_0x3045('0xe')]);router[_0x3045('0xf')](_0x3045('0xa'),auth[_0x3045('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xd9a7=['index','get','/:id','isAuthenticated','show','post','create','put','update','destroy','exports','util','path','express','../../components/auth/service','../../components/interaction/service','./network.controller'];(function(_0x53ee12,_0x230194){var _0x158b96=function(_0x18853b){while(--_0x18853b){_0x53ee12['push'](_0x53ee12['shift']());}};_0x158b96(++_0x230194);}(_0xd9a7,0x12c));var _0x7d9a=function(_0x4a10a0,_0x269862){_0x4a10a0=_0x4a10a0-0x0;var _0x21e4fc=_0xd9a7[_0x4a10a0];return _0x21e4fc;};'use strict';var multer=require('multer');var util=require(_0x7d9a('0x0'));var path=require(_0x7d9a('0x1'));var timeout=require('connect-timeout');var express=require(_0x7d9a('0x2'));var router=express['Router']();var auth=require(_0x7d9a('0x3'));var interaction=require(_0x7d9a('0x4'));var config=require('../../config/environment');var controller=require(_0x7d9a('0x5'));router['get']('/',auth['isAuthenticated'](),controller[_0x7d9a('0x6')]);router[_0x7d9a('0x7')](_0x7d9a('0x8'),auth[_0x7d9a('0x9')](),controller[_0x7d9a('0xa')]);router[_0x7d9a('0xb')]('/',auth['isAuthenticated'](),controller[_0x7d9a('0xc')]);router[_0x7d9a('0xd')](_0x7d9a('0x8'),auth[_0x7d9a('0x9')](),controller[_0x7d9a('0xe')]);router['delete'](_0x7d9a('0x8'),auth[_0x7d9a('0x9')](),controller[_0x7d9a('0xf')]);module[_0x7d9a('0x10')]=router;
\ No newline at end of file
index f69e992..74d95c9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x11d2=['localnet'];(function(_0x3998aa,_0x145d03){var _0x4a24c8=function(_0x2139ae){while(--_0x2139ae){_0x3998aa['push'](_0x3998aa['shift']());}};_0x4a24c8(++_0x145d03);}(_0x11d2,0x7a));var _0x211d=function(_0x58e469,_0x95ee3e){_0x58e469=_0x58e469-0x0;var _0x4c01c5=_0x11d2[_0x58e469];return _0x4c01c5;};'use strict';var Sequelize=require('sequelize');module['exports']={'type':{'type':Sequelize['ENUM'](_0x211d('0x0'),'externip')},'value':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0xa799=['ENUM','localnet','externip','STRING','exports'];(function(_0x2b809f,_0x3136de){var _0x2745a8=function(_0x8b2b13){while(--_0x8b2b13){_0x2b809f['push'](_0x2b809f['shift']());}};_0x2745a8(++_0x3136de);}(_0xa799,0x72));var _0x9a79=function(_0xd6f45,_0x4d9600){_0xd6f45=_0xd6f45-0x0;var _0x4a5803=_0xa799[_0xd6f45];return _0x4a5803;};'use strict';var Sequelize=require('sequelize');module[_0x9a79('0x0')]={'type':{'type':Sequelize[_0x9a79('0x1')](_0x9a79('0x2'),_0x9a79('0x3'))},'value':{'type':Sequelize[_0x9a79('0x4')]}};
\ No newline at end of file
index 22036b4..bcc45b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9bed=['find','create','findAll','body','readFileSync','join','root','server/files/templates/network.ejs','utf8','render','writeFileSync','format','/etc/asterisk/sip_xcally_%s.conf','toLowerCase','Reload','chan_sip.so','transaction','params','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','client','http','then','info','Network,\x20%s,\x20%s','Network,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','message','error','result','status','end','json','count','offset','set','save','update','destroy','sendStatus','name','send','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','limit','order','sort','pick','filter','where','merge','map','type','key','field','options','include','rows','catch','Network'];(function(_0x554e60,_0xfd2441){var _0x4b4747=function(_0x4633a9){while(--_0x4633a9){_0x554e60['push'](_0x554e60['shift']());}};_0x4b4747(++_0xfd2441);}(_0x9bed,0x126));var _0xd9be=function(_0x48444d,_0x515708){_0x48444d=_0x48444d-0x0;var _0x318f7c=_0x9bed[_0x48444d];return _0x318f7c;};'use strict';var pdf=require(_0xd9be('0x0'));var emlformat=require(_0xd9be('0x1'));var rimraf=require(_0xd9be('0x2'));var zipdir=require(_0xd9be('0x3'));var jsonpatch=require(_0xd9be('0x4'));var rp=require(_0xd9be('0x5'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xd9be('0x6'));var util=require(_0xd9be('0x7'));var path=require(_0xd9be('0x8'));var sox=require('sox');var csv=require(_0xd9be('0x9'));var ejs=require(_0xd9be('0xa'));var fs=require('fs');var _=require(_0xd9be('0xb'));var squel=require(_0xd9be('0xc'));var crypto=require(_0xd9be('0xd'));var jsforce=require(_0xd9be('0xe'));var deskjs=require(_0xd9be('0xf'));var toCsv=require(_0xd9be('0x9'));var querystring=require(_0xd9be('0x10'));var Papa=require(_0xd9be('0x11'));var authService=require(_0xd9be('0x12'));var hardwareService=require(_0xd9be('0x13'));var Redis=require('ioredis');var qs=require(_0xd9be('0x14'));var logger=require(_0xd9be('0x15'))(_0xd9be('0x16'));var utils=require('../../config/utils');var config=require(_0xd9be('0x17'));var db=require(_0xd9be('0x18'))['db'];var jayson=require(_0xd9be('0x19'));var client=jayson[_0xd9be('0x1a')][_0xd9be('0x1b')]({'port':0x232a});function respondWithRpcPromise(_0xfef438,_0x1e4e99,_0x4172c2,_0x25af3c){return new BPromise(function(_0x25470f,_0x191402){var _0x5bfb99=_0x25af3c||client;return _0x5bfb99['request'](_0xfef438,_0x4172c2)[_0xd9be('0x1c')](function(_0x5db1ef){logger[_0xd9be('0x1d')](_0xd9be('0x1e'),_0x1e4e99,'request\x20sent');logger['debug'](_0xd9be('0x1f'),_0x1e4e99,_0xd9be('0x20'),JSON[_0xd9be('0x21')](_0x5db1ef));if(_0x5db1ef['error']){if(_0x5db1ef['error']['code']===0x1f4){logger['error'](_0xd9be('0x1e'),_0x1e4e99,_0x5db1ef['error'][_0xd9be('0x22')]);return _0x191402(_0x5db1ef[_0xd9be('0x23')][_0xd9be('0x22')]);}logger[_0xd9be('0x23')](_0xd9be('0x1e'),_0x1e4e99,_0x5db1ef['error'][_0xd9be('0x22')]);return _0x25470f(_0x5db1ef[_0xd9be('0x23')][_0xd9be('0x22')]);}else{logger['info'](_0xd9be('0x1e'),_0x1e4e99,_0xd9be('0x20'));_0x25470f(_0x5db1ef[_0xd9be('0x24')][_0xd9be('0x22')]);}})['catch'](function(_0x274889){logger[_0xd9be('0x23')](_0xd9be('0x1e'),_0x1e4e99,_0x274889);_0x191402(_0x274889);});});}function respondWithStatusCode(_0x550fc5,_0x3ceb1f){_0x3ceb1f=_0x3ceb1f||0xcc;return function(_0x28a3e2){if(_0x28a3e2){return _0x550fc5['sendStatus'](_0x3ceb1f);}return _0x550fc5[_0xd9be('0x25')](_0x3ceb1f)[_0xd9be('0x26')]();};}function respondWithResult(_0x5bc574,_0x3713dc){_0x3713dc=_0x3713dc||0xc8;return function(_0x821728){if(_0x821728){return _0x5bc574[_0xd9be('0x25')](_0x3713dc)[_0xd9be('0x27')](_0x821728);}};}function respondWithFilteredResult(_0x10127f,_0x51df51){return function(_0x2afb64){if(_0x2afb64){var _0x4e1169=_0x2afb64[_0xd9be('0x28')],_0x47f0df=_0x51df51['offset'],_0xff2589=_0x51df51[_0xd9be('0x29')]+_0x51df51['limit'],_0x1604f4;if(_0xff2589>=_0x4e1169){_0xff2589=_0x4e1169;_0x1604f4=0xc8;}else{_0x1604f4=0xce;}_0x10127f[_0xd9be('0x25')](_0x1604f4);return _0x10127f[_0xd9be('0x2a')]('Content-Range',_0x47f0df+'-'+_0xff2589+'/'+_0x4e1169)[_0xd9be('0x27')](_0x2afb64);}return null;};}function patchUpdates(_0x1d52f5){return function(_0x55494b){try{jsonpatch['apply'](_0x55494b,_0x1d52f5,!![]);}catch(_0x53d738){return BPromise['reject'](_0x53d738);}return _0x55494b[_0xd9be('0x2b')]();};}function saveUpdates(_0x47b853,_0x48d619){return function(_0x539dfd){if(_0x539dfd){return _0x539dfd[_0xd9be('0x2c')](_0x47b853)[_0xd9be('0x1c')](function(_0x599a7e){return _0x599a7e;});}return null;};}function removeEntity(_0x33e592,_0x3f66ff){return function(_0x58c3bf){if(_0x58c3bf){return _0x58c3bf[_0xd9be('0x2d')]()['then'](function(){_0x33e592['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x51c7f0,_0x2b5644){return function(_0x2604d8){if(!_0x2604d8){_0x51c7f0[_0xd9be('0x2e')](0x194);}return _0x2604d8;};}function handleError(_0x332267,_0x4e1dba){_0x4e1dba=_0x4e1dba||0x1f4;return function(_0x4aed35){logger[_0xd9be('0x23')](_0x4aed35['stack']);if(_0x4aed35[_0xd9be('0x2f')]){delete _0x4aed35[_0xd9be('0x2f')];}_0x332267[_0xd9be('0x25')](_0x4e1dba)[_0xd9be('0x30')](_0x4aed35);};}exports['index']=function(_0x2209b7,_0x5177d0){var _0x46a1d9={},_0xe0fdd2={},_0x3e850a={'count':0x0,'rows':[]};var _0x36273d=db['Network'][_0xd9be('0x31')];_0xe0fdd2[_0xd9be('0x32')]=_[_0xd9be('0x33')](_0x36273d);_0xe0fdd2[_0xd9be('0x34')]=_['keys'](_0x2209b7['query']);_0xe0fdd2[_0xd9be('0x35')]=_[_0xd9be('0x36')](_0xe0fdd2[_0xd9be('0x32')],_0xe0fdd2[_0xd9be('0x34')]);_0x46a1d9[_0xd9be('0x37')]=_['intersection'](_0xe0fdd2[_0xd9be('0x32')],qs[_0xd9be('0x38')](_0x2209b7[_0xd9be('0x34')][_0xd9be('0x38')]));_0x46a1d9[_0xd9be('0x37')]=_0x46a1d9[_0xd9be('0x37')]['length']?_0x46a1d9[_0xd9be('0x37')]:_0xe0fdd2[_0xd9be('0x32')];if(!_0x2209b7[_0xd9be('0x34')][_0xd9be('0x39')]('nolimit')){_0x46a1d9['limit']=qs['limit'](_0x2209b7[_0xd9be('0x34')][_0xd9be('0x3a')]);_0x46a1d9['offset']=qs[_0xd9be('0x29')](_0x2209b7['query'][_0xd9be('0x29')]);}_0x46a1d9[_0xd9be('0x3b')]=qs[_0xd9be('0x3c')](_0x2209b7['query'][_0xd9be('0x3c')]);_0x46a1d9['where']=qs[_0xd9be('0x35')](_[_0xd9be('0x3d')](_0x2209b7[_0xd9be('0x34')],_0xe0fdd2[_0xd9be('0x35')]));if(_0x2209b7[_0xd9be('0x34')][_0xd9be('0x3e')]){_0x46a1d9[_0xd9be('0x3f')]=_[_0xd9be('0x40')](_0x46a1d9['where'],{'$or':_[_0xd9be('0x41')](_0x36273d,function(_0x49697b){if(_0x49697b[_0xd9be('0x42')][_0xd9be('0x43')]!=='VIRTUAL'){var _0x21a6d5={};_0x21a6d5[_0x49697b[_0xd9be('0x44')]]={'$like':'%'+_0x2209b7[_0xd9be('0x34')][_0xd9be('0x3e')]+'%'};return _0x21a6d5;}})});}_0x46a1d9=_[_0xd9be('0x40')]({},_0x46a1d9,_0x2209b7[_0xd9be('0x45')]);var _0x1f9682={'where':_0x46a1d9[_0xd9be('0x3f')]};return db['Network'][_0xd9be('0x28')](_0x1f9682)[_0xd9be('0x1c')](function(_0x1019f8){_0x3e850a[_0xd9be('0x28')]=_0x1019f8;if(_0x2209b7[_0xd9be('0x34')]['includeAll']){_0x46a1d9[_0xd9be('0x46')]=[{'all':!![]}];}return db['Network']['findAll'](_0x46a1d9);})[_0xd9be('0x1c')](function(_0x4f0281){_0x3e850a[_0xd9be('0x47')]=_0x4f0281;return _0x3e850a;})[_0xd9be('0x1c')](respondWithFilteredResult(_0x5177d0,_0x46a1d9))[_0xd9be('0x48')](handleError(_0x5177d0,null));};exports['show']=function(_0x33ba50,_0x3c36ad){var _0x15616d={'raw':!![],'where':{'id':_0x33ba50['params']['id']}},_0x1f8947={};_0x1f8947[_0xd9be('0x32')]=_[_0xd9be('0x33')](db['Network'][_0xd9be('0x31')]);_0x1f8947['query']=_['keys'](_0x33ba50[_0xd9be('0x34')]);_0x1f8947[_0xd9be('0x35')]=_[_0xd9be('0x36')](_0x1f8947['model'],_0x1f8947[_0xd9be('0x34')]);_0x15616d[_0xd9be('0x37')]=_[_0xd9be('0x36')](_0x1f8947[_0xd9be('0x32')],qs[_0xd9be('0x38')](_0x33ba50[_0xd9be('0x34')][_0xd9be('0x38')]));_0x15616d[_0xd9be('0x37')]=_0x15616d[_0xd9be('0x37')]['length']?_0x15616d[_0xd9be('0x37')]:_0x1f8947[_0xd9be('0x32')];if(_0x33ba50[_0xd9be('0x34')]['includeAll']){_0x15616d['include']=[{'all':!![]}];}_0x15616d=_[_0xd9be('0x40')]({},_0x15616d,_0x33ba50[_0xd9be('0x45')]);return db[_0xd9be('0x49')][_0xd9be('0x4a')](_0x15616d)['then'](handleEntityNotFound(_0x3c36ad,null))[_0xd9be('0x1c')](respondWithResult(_0x3c36ad,null))[_0xd9be('0x48')](handleError(_0x3c36ad,null));};exports['create']=function(_0x58c764,_0x93b7c3,_0x1ba1da){var _0x5072c4;return db['sequelize']['transaction'](function(_0x2d2496){return db[_0xd9be('0x49')][_0xd9be('0x4b')](_0x58c764['body'],{'raw':!![]})[_0xd9be('0x1c')](function(_0x2b5028){_0x5072c4=_0x2b5028;return db['Network'][_0xd9be('0x4c')]({'where':{'type':_0x58c764[_0xd9be('0x4d')][_0xd9be('0x42')]},'raw':!![]});})[_0xd9be('0x1c')](function(_0x14c0b8){var _0x159d8f=fs[_0xd9be('0x4e')](path[_0xd9be('0x4f')](config[_0xd9be('0x50')],_0xd9be('0x51')),_0xd9be('0x52'));var _0x4b31ad=ejs[_0xd9be('0x53')](_0x159d8f,{'networks':_0x14c0b8||[]});fs[_0xd9be('0x54')](util[_0xd9be('0x55')](_0xd9be('0x56'),_0x58c764[_0xd9be('0x4d')][_0xd9be('0x42')][_0xd9be('0x57')]()),_0x4b31ad);})[_0xd9be('0x1c')](function(){return respondWithRpcPromise(_0xd9be('0x58'),_0xd9be('0x4b'),{'module':_0xd9be('0x59')});})[_0xd9be('0x1c')](function(){return _0x5072c4;});})['then'](respondWithResult(_0x93b7c3,0xc9))[_0xd9be('0x48')](handleError(_0x93b7c3,null));};exports[_0xd9be('0x2c')]=function(_0x1d2e86,_0x3eafce,_0x173186){var _0x5a64d5;return db['sequelize'][_0xd9be('0x5a')](function(_0xfe0cee){return db[_0xd9be('0x49')][_0xd9be('0x4a')]({'where':{'id':_0x1d2e86[_0xd9be('0x5b')]['id']}})[_0xd9be('0x1c')](handleEntityNotFound(_0x3eafce,null))[_0xd9be('0x1c')](saveUpdates(_0x1d2e86[_0xd9be('0x4d')],null))[_0xd9be('0x1c')](function(_0xc982b2){if(_0xc982b2){_0x5a64d5=_0xc982b2;return db[_0xd9be('0x49')][_0xd9be('0x4c')]({'where':{'type':_0x5a64d5[_0xd9be('0x42')]},'raw':!![]});}return null;})[_0xd9be('0x1c')](function(_0x11a659){if(_0x11a659){var _0x56063b=fs[_0xd9be('0x4e')](path[_0xd9be('0x4f')](config['root'],_0xd9be('0x51')),'utf8');var _0x257f14=ejs[_0xd9be('0x53')](_0x56063b,{'networks':_0x11a659||[]});fs['writeFileSync'](util[_0xd9be('0x55')](_0xd9be('0x56'),_0x5a64d5[_0xd9be('0x42')]['toLowerCase']()),_0x257f14);return respondWithRpcPromise(_0xd9be('0x58'),_0xd9be('0x2c'),{'module':'chan_sip.so'});}return null;})['then'](function(_0xee95c5){if(_0xee95c5){return _0x5a64d5;}return null;});})[_0xd9be('0x1c')](respondWithResult(_0x3eafce,null))[_0xd9be('0x48')](handleError(_0x3eafce,null));};exports[_0xd9be('0x2d')]=function(_0x1f1b89,_0x487b19,_0x12322d){var _0x183ba9;return db[_0xd9be('0x49')][_0xd9be('0x4a')]({'where':{'id':_0x1f1b89['params']['id']}})[_0xd9be('0x1c')](function(_0x210c06){_0x183ba9=_0x210c06;return _0x210c06;})['then'](handleEntityNotFound(_0x487b19,null))['then'](removeEntity(_0x487b19,null))[_0xd9be('0x1c')](function(){if(_0x183ba9){return db[_0xd9be('0x49')][_0xd9be('0x4c')]({'where':{'type':_0x183ba9[_0xd9be('0x42')]},'raw':!![]});}})[_0xd9be('0x1c')](function(_0x4e8228){if(_0x4e8228){var _0x3573da=fs[_0xd9be('0x4e')](path[_0xd9be('0x4f')](config['root'],_0xd9be('0x51')),_0xd9be('0x52'));var _0xb04820=ejs[_0xd9be('0x53')](_0x3573da,{'networks':_0x4e8228||[]});fs['writeFileSync'](util['format'](_0xd9be('0x56'),_0x183ba9[_0xd9be('0x42')][_0xd9be('0x57')]()),_0xb04820);return respondWithRpcPromise('Reload','destroy',{'module':'chan_sip.so'});}})['catch'](handleError(_0x487b19,null));};
\ No newline at end of file
+var _0xf2c6=['utf8','render','writeFileSync','format','/etc/asterisk/sip_xcally_%s.conf','Reload','chan_sip.so','join','toLowerCase','server/files/templates/network.ejs','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/utils','../../mysqldb','jayson/promise','client','http','request','then','info','Network,\x20%s,\x20%s','request\x20sent','debug','Network,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','sendStatus','status','end','json','count','offset','Content-Range','apply','update','destroy','stack','name','send','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','merge','map','type','VIRTUAL','filter','options','Network','includeAll','include','findAll','rows','show','params','find','create','sequelize','transaction','body','readFileSync','root'];(function(_0x1081a3,_0x2ac784){var _0x5696a2=function(_0x23d2f6){while(--_0x23d2f6){_0x1081a3['push'](_0x1081a3['shift']());}};_0x5696a2(++_0x2ac784);}(_0xf2c6,0x1ea));var _0x6f2c=function(_0x126fb9,_0x122c59){_0x126fb9=_0x126fb9-0x0;var _0xc8a3b1=_0xf2c6[_0x126fb9];return _0xc8a3b1;};'use strict';var pdf=require(_0x6f2c('0x0'));var emlformat=require(_0x6f2c('0x1'));var rimraf=require(_0x6f2c('0x2'));var zipdir=require(_0x6f2c('0x3'));var jsonpatch=require(_0x6f2c('0x4'));var rp=require(_0x6f2c('0x5'));var moment=require(_0x6f2c('0x6'));var BPromise=require(_0x6f2c('0x7'));var Mustache=require(_0x6f2c('0x8'));var util=require(_0x6f2c('0x9'));var path=require('path');var sox=require(_0x6f2c('0xa'));var csv=require(_0x6f2c('0xb'));var ejs=require(_0x6f2c('0xc'));var fs=require('fs');var _=require(_0x6f2c('0xd'));var squel=require(_0x6f2c('0xe'));var crypto=require('crypto');var jsforce=require(_0x6f2c('0xf'));var deskjs=require(_0x6f2c('0x10'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x6f2c('0x11'));var authService=require(_0x6f2c('0x12'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x6f2c('0x13'));var qs=require(_0x6f2c('0x14'));var logger=require('../../config/logger')('api');var utils=require(_0x6f2c('0x15'));var config=require('../../config/environment');var db=require(_0x6f2c('0x16'))['db'];var jayson=require(_0x6f2c('0x17'));var client=jayson[_0x6f2c('0x18')][_0x6f2c('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x4d679b,_0x390ac0,_0x5a1778,_0x178f94){return new BPromise(function(_0x11bc64,_0x4c6dc4){var _0x4bb8f9=_0x178f94||client;return _0x4bb8f9[_0x6f2c('0x1a')](_0x4d679b,_0x5a1778)[_0x6f2c('0x1b')](function(_0x4d43c1){logger[_0x6f2c('0x1c')](_0x6f2c('0x1d'),_0x390ac0,_0x6f2c('0x1e'));logger[_0x6f2c('0x1f')](_0x6f2c('0x20'),_0x390ac0,_0x6f2c('0x1e'),JSON[_0x6f2c('0x21')](_0x4d43c1));if(_0x4d43c1[_0x6f2c('0x22')]){if(_0x4d43c1[_0x6f2c('0x22')][_0x6f2c('0x23')]===0x1f4){logger[_0x6f2c('0x22')](_0x6f2c('0x1d'),_0x390ac0,_0x4d43c1[_0x6f2c('0x22')][_0x6f2c('0x24')]);return _0x4c6dc4(_0x4d43c1['error'][_0x6f2c('0x24')]);}logger[_0x6f2c('0x22')](_0x6f2c('0x1d'),_0x390ac0,_0x4d43c1[_0x6f2c('0x22')][_0x6f2c('0x24')]);return _0x11bc64(_0x4d43c1[_0x6f2c('0x22')][_0x6f2c('0x24')]);}else{logger[_0x6f2c('0x1c')]('Network,\x20%s,\x20%s',_0x390ac0,_0x6f2c('0x1e'));_0x11bc64(_0x4d43c1['result'][_0x6f2c('0x24')]);}})[_0x6f2c('0x25')](function(_0x32bff7){logger[_0x6f2c('0x22')](_0x6f2c('0x1d'),_0x390ac0,_0x32bff7);_0x4c6dc4(_0x32bff7);});});}function respondWithStatusCode(_0x490299,_0x19bc9b){_0x19bc9b=_0x19bc9b||0xcc;return function(_0x36e5a1){if(_0x36e5a1){return _0x490299[_0x6f2c('0x26')](_0x19bc9b);}return _0x490299[_0x6f2c('0x27')](_0x19bc9b)[_0x6f2c('0x28')]();};}function respondWithResult(_0x302b00,_0x25851c){_0x25851c=_0x25851c||0xc8;return function(_0x20effb){if(_0x20effb){return _0x302b00['status'](_0x25851c)[_0x6f2c('0x29')](_0x20effb);}};}function respondWithFilteredResult(_0x21a287,_0x57c473){return function(_0x1bcab0){if(_0x1bcab0){var _0x8393cc=_0x1bcab0[_0x6f2c('0x2a')],_0x532856=_0x57c473['offset'],_0x503225=_0x57c473[_0x6f2c('0x2b')]+_0x57c473['limit'],_0x59c834;if(_0x503225>=_0x8393cc){_0x503225=_0x8393cc;_0x59c834=0xc8;}else{_0x59c834=0xce;}_0x21a287[_0x6f2c('0x27')](_0x59c834);return _0x21a287['set'](_0x6f2c('0x2c'),_0x532856+'-'+_0x503225+'/'+_0x8393cc)[_0x6f2c('0x29')](_0x1bcab0);}return null;};}function patchUpdates(_0x49c68d){return function(_0x22024f){try{jsonpatch[_0x6f2c('0x2d')](_0x22024f,_0x49c68d,!![]);}catch(_0x3608e6){return BPromise['reject'](_0x3608e6);}return _0x22024f['save']();};}function saveUpdates(_0x6086c4,_0x944afd){return function(_0x35832){if(_0x35832){return _0x35832[_0x6f2c('0x2e')](_0x6086c4)[_0x6f2c('0x1b')](function(_0x315a24){return _0x315a24;});}return null;};}function removeEntity(_0x87d8ae,_0x1a0e5d){return function(_0x27669f){if(_0x27669f){return _0x27669f[_0x6f2c('0x2f')]()[_0x6f2c('0x1b')](function(){_0x87d8ae[_0x6f2c('0x27')](0xcc)[_0x6f2c('0x28')]();});}};}function handleEntityNotFound(_0x39c590,_0x519d42){return function(_0x22c035){if(!_0x22c035){_0x39c590[_0x6f2c('0x26')](0x194);}return _0x22c035;};}function handleError(_0xbd7c94,_0xb2b5cf){_0xb2b5cf=_0xb2b5cf||0x1f4;return function(_0x235042){logger[_0x6f2c('0x22')](_0x235042[_0x6f2c('0x30')]);if(_0x235042[_0x6f2c('0x31')]){delete _0x235042[_0x6f2c('0x31')];}_0xbd7c94[_0x6f2c('0x27')](_0xb2b5cf)[_0x6f2c('0x32')](_0x235042);};}exports['index']=function(_0x24dcef,_0x2f95c4){var _0x5ed1b1={},_0x1df882={},_0x200685={'count':0x0,'rows':[]};var _0x227bbc=db['Network']['rawAttributes'];_0x1df882[_0x6f2c('0x33')]=_[_0x6f2c('0x34')](_0x227bbc);_0x1df882[_0x6f2c('0x35')]=_[_0x6f2c('0x34')](_0x24dcef['query']);_0x1df882[_0x6f2c('0x36')]=_[_0x6f2c('0x37')](_0x1df882['model'],_0x1df882[_0x6f2c('0x35')]);_0x5ed1b1[_0x6f2c('0x38')]=_[_0x6f2c('0x37')](_0x1df882['model'],qs[_0x6f2c('0x39')](_0x24dcef[_0x6f2c('0x35')][_0x6f2c('0x39')]));_0x5ed1b1[_0x6f2c('0x38')]=_0x5ed1b1[_0x6f2c('0x38')][_0x6f2c('0x3a')]?_0x5ed1b1[_0x6f2c('0x38')]:_0x1df882[_0x6f2c('0x33')];if(!_0x24dcef[_0x6f2c('0x35')][_0x6f2c('0x3b')](_0x6f2c('0x3c'))){_0x5ed1b1[_0x6f2c('0x3d')]=qs[_0x6f2c('0x3d')](_0x24dcef[_0x6f2c('0x35')][_0x6f2c('0x3d')]);_0x5ed1b1[_0x6f2c('0x2b')]=qs[_0x6f2c('0x2b')](_0x24dcef['query']['offset']);}_0x5ed1b1[_0x6f2c('0x3e')]=qs[_0x6f2c('0x3f')](_0x24dcef[_0x6f2c('0x35')]['sort']);_0x5ed1b1[_0x6f2c('0x40')]=qs['filters'](_[_0x6f2c('0x41')](_0x24dcef[_0x6f2c('0x35')],_0x1df882[_0x6f2c('0x36')]));if(_0x24dcef[_0x6f2c('0x35')]['filter']){_0x5ed1b1[_0x6f2c('0x40')]=_[_0x6f2c('0x42')](_0x5ed1b1[_0x6f2c('0x40')],{'$or':_[_0x6f2c('0x43')](_0x227bbc,function(_0x4e7753){if(_0x4e7753[_0x6f2c('0x44')]['key']!==_0x6f2c('0x45')){var _0x1773e3={};_0x1773e3[_0x4e7753['field']]={'$like':'%'+_0x24dcef[_0x6f2c('0x35')][_0x6f2c('0x46')]+'%'};return _0x1773e3;}})});}_0x5ed1b1=_[_0x6f2c('0x42')]({},_0x5ed1b1,_0x24dcef[_0x6f2c('0x47')]);var _0x8d8a43={'where':_0x5ed1b1[_0x6f2c('0x40')]};return db[_0x6f2c('0x48')][_0x6f2c('0x2a')](_0x8d8a43)['then'](function(_0x56cda7){_0x200685[_0x6f2c('0x2a')]=_0x56cda7;if(_0x24dcef[_0x6f2c('0x35')][_0x6f2c('0x49')]){_0x5ed1b1[_0x6f2c('0x4a')]=[{'all':!![]}];}return db[_0x6f2c('0x48')][_0x6f2c('0x4b')](_0x5ed1b1);})[_0x6f2c('0x1b')](function(_0x2658a2){_0x200685[_0x6f2c('0x4c')]=_0x2658a2;return _0x200685;})['then'](respondWithFilteredResult(_0x2f95c4,_0x5ed1b1))[_0x6f2c('0x25')](handleError(_0x2f95c4,null));};exports[_0x6f2c('0x4d')]=function(_0x10fa85,_0x30b5d9){var _0x2fe3e7={'raw':!![],'where':{'id':_0x10fa85[_0x6f2c('0x4e')]['id']}},_0x26283c={};_0x26283c['model']=_[_0x6f2c('0x34')](db[_0x6f2c('0x48')]['rawAttributes']);_0x26283c['query']=_[_0x6f2c('0x34')](_0x10fa85['query']);_0x26283c[_0x6f2c('0x36')]=_[_0x6f2c('0x37')](_0x26283c['model'],_0x26283c['query']);_0x2fe3e7['attributes']=_[_0x6f2c('0x37')](_0x26283c[_0x6f2c('0x33')],qs[_0x6f2c('0x39')](_0x10fa85[_0x6f2c('0x35')][_0x6f2c('0x39')]));_0x2fe3e7[_0x6f2c('0x38')]=_0x2fe3e7[_0x6f2c('0x38')]['length']?_0x2fe3e7['attributes']:_0x26283c[_0x6f2c('0x33')];if(_0x10fa85['query']['includeAll']){_0x2fe3e7['include']=[{'all':!![]}];}_0x2fe3e7=_[_0x6f2c('0x42')]({},_0x2fe3e7,_0x10fa85[_0x6f2c('0x47')]);return db[_0x6f2c('0x48')][_0x6f2c('0x4f')](_0x2fe3e7)[_0x6f2c('0x1b')](handleEntityNotFound(_0x30b5d9,null))[_0x6f2c('0x1b')](respondWithResult(_0x30b5d9,null))[_0x6f2c('0x25')](handleError(_0x30b5d9,null));};exports[_0x6f2c('0x50')]=function(_0x237e15,_0x169321,_0xd9c096){var _0x1df36d;return db[_0x6f2c('0x51')][_0x6f2c('0x52')](function(_0x4c01a5){return db[_0x6f2c('0x48')][_0x6f2c('0x50')](_0x237e15[_0x6f2c('0x53')],{'raw':!![]})[_0x6f2c('0x1b')](function(_0x233a0b){_0x1df36d=_0x233a0b;return db[_0x6f2c('0x48')][_0x6f2c('0x4b')]({'where':{'type':_0x237e15['body'][_0x6f2c('0x44')]},'raw':!![]});})[_0x6f2c('0x1b')](function(_0x4770f6){var _0x25acd4=fs[_0x6f2c('0x54')](path['join'](config[_0x6f2c('0x55')],'server/files/templates/network.ejs'),_0x6f2c('0x56'));var _0x4c9e1e=ejs[_0x6f2c('0x57')](_0x25acd4,{'networks':_0x4770f6||[]});fs[_0x6f2c('0x58')](util[_0x6f2c('0x59')](_0x6f2c('0x5a'),_0x237e15[_0x6f2c('0x53')]['type']['toLowerCase']()),_0x4c9e1e);})['then'](function(){return respondWithRpcPromise(_0x6f2c('0x5b'),'create',{'module':_0x6f2c('0x5c')});})['then'](function(){return _0x1df36d;});})['then'](respondWithResult(_0x169321,0xc9))[_0x6f2c('0x25')](handleError(_0x169321,null));};exports[_0x6f2c('0x2e')]=function(_0x49ba55,_0x3896b7,_0x549a27){var _0x64e6bc;return db[_0x6f2c('0x51')]['transaction'](function(_0x1e56dc){return db[_0x6f2c('0x48')][_0x6f2c('0x4f')]({'where':{'id':_0x49ba55[_0x6f2c('0x4e')]['id']}})['then'](handleEntityNotFound(_0x3896b7,null))[_0x6f2c('0x1b')](saveUpdates(_0x49ba55[_0x6f2c('0x53')],null))[_0x6f2c('0x1b')](function(_0x3119e7){if(_0x3119e7){_0x64e6bc=_0x3119e7;return db[_0x6f2c('0x48')][_0x6f2c('0x4b')]({'where':{'type':_0x64e6bc['type']},'raw':!![]});}return null;})[_0x6f2c('0x1b')](function(_0x21479a){if(_0x21479a){var _0x252790=fs[_0x6f2c('0x54')](path[_0x6f2c('0x5d')](config[_0x6f2c('0x55')],'server/files/templates/network.ejs'),_0x6f2c('0x56'));var _0x2e1f70=ejs[_0x6f2c('0x57')](_0x252790,{'networks':_0x21479a||[]});fs[_0x6f2c('0x58')](util[_0x6f2c('0x59')]('/etc/asterisk/sip_xcally_%s.conf',_0x64e6bc[_0x6f2c('0x44')][_0x6f2c('0x5e')]()),_0x2e1f70);return respondWithRpcPromise(_0x6f2c('0x5b'),'update',{'module':'chan_sip.so'});}return null;})[_0x6f2c('0x1b')](function(_0x4fa737){if(_0x4fa737){return _0x64e6bc;}return null;});})[_0x6f2c('0x1b')](respondWithResult(_0x3896b7,null))[_0x6f2c('0x25')](handleError(_0x3896b7,null));};exports[_0x6f2c('0x2f')]=function(_0x1be34e,_0x12d615,_0x373697){var _0x2faf8c;return db[_0x6f2c('0x48')]['find']({'where':{'id':_0x1be34e['params']['id']}})[_0x6f2c('0x1b')](function(_0x18920f){_0x2faf8c=_0x18920f;return _0x18920f;})[_0x6f2c('0x1b')](handleEntityNotFound(_0x12d615,null))['then'](removeEntity(_0x12d615,null))[_0x6f2c('0x1b')](function(){if(_0x2faf8c){return db[_0x6f2c('0x48')][_0x6f2c('0x4b')]({'where':{'type':_0x2faf8c[_0x6f2c('0x44')]},'raw':!![]});}})[_0x6f2c('0x1b')](function(_0x3b8037){if(_0x3b8037){var _0x56dc01=fs[_0x6f2c('0x54')](path['join'](config[_0x6f2c('0x55')],_0x6f2c('0x5f')),_0x6f2c('0x56'));var _0x145d8c=ejs[_0x6f2c('0x57')](_0x56dc01,{'networks':_0x3b8037||[]});fs[_0x6f2c('0x58')](util[_0x6f2c('0x59')]('/etc/asterisk/sip_xcally_%s.conf',_0x2faf8c['type'][_0x6f2c('0x5e')]()),_0x145d8c);return respondWithRpcPromise(_0x6f2c('0x5b'),_0x6f2c('0x2f'),{'module':'chan_sip.so'});}})[_0x6f2c('0x25')](handleError(_0x12d615,null));};
\ No newline at end of file
index 6e6054a..658f3a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb686=['request-promise','./network.attributes','exports','define','Network','network','util','api','moment','bluebird'];(function(_0x5a3888,_0x23558c){var _0x9b754e=function(_0x3f401a){while(--_0x3f401a){_0x5a3888['push'](_0x5a3888['shift']());}};_0x9b754e(++_0x23558c);}(_0xb686,0xba));var _0x6b68=function(_0x465028,_0x4570ac){_0x465028=_0x465028-0x0;var _0xb783d4=_0xb686[_0x465028];return _0xb783d4;};'use strict';var _=require('lodash');var util=require(_0x6b68('0x0'));var logger=require('../../config/logger')(_0x6b68('0x1'));var moment=require(_0x6b68('0x2'));var BPromise=require(_0x6b68('0x3'));var rp=require(_0x6b68('0x4'));var attributes=require(_0x6b68('0x5'));module[_0x6b68('0x6')]=function(_0x248b75,_0x2ceda7){return _0x248b75[_0x6b68('0x7')](_0x6b68('0x8'),attributes,{'tableName':_0x6b68('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xa8ac=['Network','lodash','util','../../config/logger','api','bluebird','request-promise','./network.attributes','define'];(function(_0x48e94b,_0x227693){var _0x43de30=function(_0x25b725){while(--_0x25b725){_0x48e94b['push'](_0x48e94b['shift']());}};_0x43de30(++_0x227693);}(_0xa8ac,0x121));var _0xca8a=function(_0x442381,_0x2accb8){_0x442381=_0x442381-0x0;var _0x4ce9dd=_0xa8ac[_0x442381];return _0x4ce9dd;};'use strict';var _=require(_0xca8a('0x0'));var util=require(_0xca8a('0x1'));var logger=require(_0xca8a('0x2'))(_0xca8a('0x3'));var moment=require('moment');var BPromise=require(_0xca8a('0x4'));var rp=require(_0xca8a('0x5'));var attributes=require(_0xca8a('0x6'));module['exports']=function(_0x4fa117,_0x494db1){return _0x4fa117[_0xca8a('0x7')](_0xca8a('0x8'),attributes,{'tableName':'network','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 667eedc..3c76d8c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7217=['stringify','error','code','message','result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','request','then','info','Network,\x20%s,\x20%s','debug','Network,\x20%s,\x20%s,\x20%s','request\x20sent'];(function(_0x4fde08,_0x463a36){var _0x12e725=function(_0x2670c5){while(--_0x2670c5){_0x4fde08['push'](_0x4fde08['shift']());}};_0x12e725(++_0x463a36);}(_0x7217,0x19e));var _0x7721=function(_0x311c35,_0x534915){_0x311c35=_0x311c35-0x0;var _0x5cc50c=_0x7217[_0x311c35];return _0x5cc50c;};'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')]('Network,\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']('Network,\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
+var _0x71ab=['http','request','then','info','request\x20sent','Network,\x20%s,\x20%s,\x20%s','stringify','error','message','Network,\x20%s,\x20%s','result','catch','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client'];(function(_0x277b38,_0x3e3872){var _0x26010a=function(_0x168ec6){while(--_0x168ec6){_0x277b38['push'](_0x277b38['shift']());}};_0x26010a(++_0x3e3872);}(_0x71ab,0x64));var _0xb71a=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x71ab[_0xa464c9];return _0x3d73c4;};'use strict';var _=require('lodash');var util=require(_0xb71a('0x0'));var moment=require('moment');var BPromise=require(_0xb71a('0x1'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xb71a('0x2'));var db=require(_0xb71a('0x3'))['db'];var utils=require(_0xb71a('0x4'));var logger=require(_0xb71a('0x5'))(_0xb71a('0x6'));var config=require(_0xb71a('0x7'));var jayson=require(_0xb71a('0x8'));var client=jayson[_0xb71a('0x9')][_0xb71a('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x35a84e,_0x4358ce,_0x2a4c86){return new BPromise(function(_0x43ca14,_0x471ab6){return client[_0xb71a('0xb')](_0x35a84e,_0x2a4c86)[_0xb71a('0xc')](function(_0x378c96){logger[_0xb71a('0xd')]('Network,\x20%s,\x20%s',_0x4358ce,_0xb71a('0xe'));logger['debug'](_0xb71a('0xf'),_0x4358ce,_0xb71a('0xe'),JSON[_0xb71a('0x10')](_0x378c96));if(_0x378c96['error']){if(_0x378c96[_0xb71a('0x11')]['code']===0x1f4){logger[_0xb71a('0x11')]('Network,\x20%s,\x20%s',_0x4358ce,_0x378c96['error'][_0xb71a('0x12')]);return _0x471ab6(_0x378c96[_0xb71a('0x11')][_0xb71a('0x12')]);}logger[_0xb71a('0x11')]('Network,\x20%s,\x20%s',_0x4358ce,_0x378c96['error']['message']);return _0x43ca14(_0x378c96[_0xb71a('0x11')][_0xb71a('0x12')]);}else{logger[_0xb71a('0xd')](_0xb71a('0x13'),_0x4358ce,_0xb71a('0xe'));_0x43ca14(_0x378c96[_0xb71a('0x14')][_0xb71a('0x12')]);}})[_0xb71a('0x15')](function(_0x7710a8){logger['error'](_0xb71a('0x13'),_0x4358ce,_0x7710a8);_0x471ab6(_0x7710a8);});});}
\ No newline at end of file
index 19314c4..a77f775 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39bf=['describe','/:id','/:id/dispositions','getDispositions','/:id/canned_answers','getApplications','/:id/interactions','getInteractions','/:id/users','create','post','addDisposition','addAnswer','/:id/notify','notify','/:id/applications','addApplications','addAgents','/:id/send','send','put','update','delete','destroy','removeDispositions','removeAnswers','exports','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelAccount.controller','get','isAuthenticated','/describe'];(function(_0x560031,_0x454d29){var _0x45183c=function(_0x4d17f1){while(--_0x4d17f1){_0x560031['push'](_0x560031['shift']());}};_0x45183c(++_0x454d29);}(_0x39bf,0xde));var _0xf39b=function(_0xcef47e,_0x2d05b4){_0xcef47e=_0xcef47e-0x0;var _0x1d3e5b=_0x39bf[_0xcef47e];return _0x1d3e5b;};'use strict';var multer=require(_0xf39b('0x0'));var util=require(_0xf39b('0x1'));var path=require('path');var timeout=require(_0xf39b('0x2'));var express=require(_0xf39b('0x3'));var router=express[_0xf39b('0x4')]();var auth=require(_0xf39b('0x5'));var interaction=require(_0xf39b('0x6'));var config=require(_0xf39b('0x7'));var controller=require(_0xf39b('0x8'));router[_0xf39b('0x9')]('/',auth[_0xf39b('0xa')](),controller['index']);router[_0xf39b('0x9')](_0xf39b('0xb'),auth[_0xf39b('0xa')](),controller[_0xf39b('0xc')]);router[_0xf39b('0x9')](_0xf39b('0xd'),auth[_0xf39b('0xa')](),controller['show']);router[_0xf39b('0x9')](_0xf39b('0xe'),auth['isAuthenticated'](),controller[_0xf39b('0xf')]);router[_0xf39b('0x9')](_0xf39b('0x10'),auth[_0xf39b('0xa')](),controller['getAnswers']);router[_0xf39b('0x9')]('/:id/applications',auth[_0xf39b('0xa')](),controller[_0xf39b('0x11')]);router[_0xf39b('0x9')](_0xf39b('0x12'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x13')]);router[_0xf39b('0x9')](_0xf39b('0x14'),auth['isAuthenticated'](),controller['getAgents']);router['post']('/',auth[_0xf39b('0xa')](),controller[_0xf39b('0x15')]);router[_0xf39b('0x16')](_0xf39b('0xe'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x17')]);router[_0xf39b('0x16')](_0xf39b('0x10'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x18')]);router[_0xf39b('0x16')](_0xf39b('0x19'),controller[_0xf39b('0x1a')]);router[_0xf39b('0x16')](_0xf39b('0x1b'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x1c')]);router[_0xf39b('0x16')](_0xf39b('0x14'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x1d')]);router[_0xf39b('0x16')](_0xf39b('0x1e'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x1f')]);router[_0xf39b('0x20')](_0xf39b('0xd'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x21')]);router[_0xf39b('0x22')](_0xf39b('0xd'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x23')]);router[_0xf39b('0x22')](_0xf39b('0xe'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x24')]);router[_0xf39b('0x22')](_0xf39b('0x10'),auth[_0xf39b('0xa')](),controller[_0xf39b('0x25')]);router['delete']('/:id/users',auth[_0xf39b('0xa')](),controller['removeAgents']);module[_0xf39b('0x26')]=router;
\ No newline at end of file
+var _0xf4e0=['delete','removeAnswers','removeAgents','exports','multer','util','path','connect-timeout','express','../../components/interaction/service','./openchannelAccount.controller','get','isAuthenticated','index','/describe','describe','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','/:id/applications','getApplications','/:id/users','getAgents','post','create','addDisposition','addAnswer','/:id/notify','notify','/:id/send','send','put','/:id','update'];(function(_0x21f3ca,_0x493fa1){var _0x51e18e=function(_0x43db0f){while(--_0x43db0f){_0x21f3ca['push'](_0x21f3ca['shift']());}};_0x51e18e(++_0x493fa1);}(_0xf4e0,0x124));var _0x0f4e=function(_0x4565bf,_0x5ad9d6){_0x4565bf=_0x4565bf-0x0;var _0x5610ba=_0xf4e0[_0x4565bf];return _0x5610ba;};'use strict';var multer=require(_0x0f4e('0x0'));var util=require(_0x0f4e('0x1'));var path=require(_0x0f4e('0x2'));var timeout=require(_0x0f4e('0x3'));var express=require(_0x0f4e('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x0f4e('0x5'));var config=require('../../config/environment');var controller=require(_0x0f4e('0x6'));router[_0x0f4e('0x7')]('/',auth[_0x0f4e('0x8')](),controller[_0x0f4e('0x9')]);router[_0x0f4e('0x7')](_0x0f4e('0xa'),auth[_0x0f4e('0x8')](),controller[_0x0f4e('0xb')]);router[_0x0f4e('0x7')]('/:id',auth['isAuthenticated'](),controller[_0x0f4e('0xc')]);router[_0x0f4e('0x7')](_0x0f4e('0xd'),auth[_0x0f4e('0x8')](),controller[_0x0f4e('0xe')]);router[_0x0f4e('0x7')](_0x0f4e('0xf'),auth['isAuthenticated'](),controller[_0x0f4e('0x10')]);router[_0x0f4e('0x7')](_0x0f4e('0x11'),auth['isAuthenticated'](),controller[_0x0f4e('0x12')]);router[_0x0f4e('0x7')]('/:id/interactions',auth[_0x0f4e('0x8')](),controller['getInteractions']);router['get'](_0x0f4e('0x13'),auth['isAuthenticated'](),controller[_0x0f4e('0x14')]);router[_0x0f4e('0x15')]('/',auth[_0x0f4e('0x8')](),controller[_0x0f4e('0x16')]);router[_0x0f4e('0x15')](_0x0f4e('0xd'),auth['isAuthenticated'](),controller[_0x0f4e('0x17')]);router['post'](_0x0f4e('0xf'),auth[_0x0f4e('0x8')](),controller[_0x0f4e('0x18')]);router[_0x0f4e('0x15')](_0x0f4e('0x19'),controller[_0x0f4e('0x1a')]);router['post'](_0x0f4e('0x11'),auth[_0x0f4e('0x8')](),controller['addApplications']);router[_0x0f4e('0x15')](_0x0f4e('0x13'),auth[_0x0f4e('0x8')](),controller['addAgents']);router[_0x0f4e('0x15')](_0x0f4e('0x1b'),auth[_0x0f4e('0x8')](),controller[_0x0f4e('0x1c')]);router[_0x0f4e('0x1d')](_0x0f4e('0x1e'),auth[_0x0f4e('0x8')](),controller[_0x0f4e('0x1f')]);router['delete'](_0x0f4e('0x1e'),auth[_0x0f4e('0x8')](),controller['destroy']);router[_0x0f4e('0x20')](_0x0f4e('0xd'),auth[_0x0f4e('0x8')](),controller['removeDispositions']);router['delete']('/:id/canned_answers',auth[_0x0f4e('0x8')](),controller[_0x0f4e('0x21')]);router[_0x0f4e('0x20')]('/:id/users',auth['isAuthenticated'](),controller[_0x0f4e('0x22')]);module[_0x0f4e('0x23')]=router;
\ No newline at end of file
index 412b375..56f0288 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbcb4=['STRING','name','generate','TEXT','Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}','BOOLEAN','INTEGER','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','setDataValue','mandatoryDisposition','exports'];(function(_0x280221,_0x2d0576){var _0x11abd3=function(_0x503920){while(--_0x503920){_0x280221['push'](_0x280221['shift']());}};_0x11abd3(++_0x2d0576);}(_0xbcb4,0x1ac));var _0x4bcb=function(_0x165bab,_0x8f2312){_0x165bab=_0x165bab-0x0;var _0x21e7a9=_0xbcb4[_0x165bab];return _0x21e7a9;};'use strict';var Sequelize=require('sequelize');var rs=require('randomstring');module[_0x4bcb('0x0')]={'name':{'type':Sequelize[_0x4bcb('0x1')],'unique':_0x4bcb('0x2'),'allowNull':![]},'description':{'type':Sequelize['STRING']},'token':{'type':Sequelize[_0x4bcb('0x1')],'defaultValue':function(){return rs[_0x4bcb('0x3')]();}},'replyUri':{'type':Sequelize[_0x4bcb('0x1')],'validate':{'isUrl':!![]}},'key':{'type':Sequelize['STRING'],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0x4bcb('0x4')],'defaultValue':function(){return _0x4bcb('0x5');}},'notificationSound':{'type':Sequelize[_0x4bcb('0x6')],'defaultValue':!![]},'notificationShake':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x4bcb('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'mapKey':{'type':Sequelize[_0x4bcb('0x1')]},'queueTransfer':{'type':Sequelize[_0x4bcb('0x6')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x4bcb('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x4bcb('0x7')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0x4bcb('0x7')],'allowNull':!![],'defaultValue':null,'comment':_0x4bcb('0x8')},'mandatoryDisposition':{'type':Sequelize[_0x4bcb('0x6')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x1c6a49){if(!_0x1c6a49)this[_0x4bcb('0x9')]('mandatoryDispositionPauseId',null);this['setDataValue'](_0x4bcb('0xa'),_0x1c6a49);}}};
\ No newline at end of file
+var _0xd6bb=['sequelize','exports','STRING','name','TEXT','BOOLEAN','INTEGER','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','setDataValue','mandatoryDisposition'];(function(_0x29bf40,_0x5b2ab8){var _0x234644=function(_0xbfb127){while(--_0xbfb127){_0x29bf40['push'](_0x29bf40['shift']());}};_0x234644(++_0x5b2ab8);}(_0xd6bb,0x1cc));var _0xbd6b=function(_0x4d0662,_0x145963){_0x4d0662=_0x4d0662-0x0;var _0x6eea6d=_0xd6bb[_0x4d0662];return _0x6eea6d;};'use strict';var Sequelize=require(_0xbd6b('0x0'));var rs=require('randomstring');module[_0xbd6b('0x1')]={'name':{'type':Sequelize[_0xbd6b('0x2')],'unique':_0xbd6b('0x3'),'allowNull':![]},'description':{'type':Sequelize[_0xbd6b('0x2')]},'token':{'type':Sequelize[_0xbd6b('0x2')],'defaultValue':function(){return rs['generate']();}},'replyUri':{'type':Sequelize[_0xbd6b('0x2')],'validate':{'isUrl':!![]}},'key':{'type':Sequelize[_0xbd6b('0x2')],'allowNull':![]},'notificationTemplate':{'type':Sequelize[_0xbd6b('0x4')],'defaultValue':function(){return'Account:\x20{{account.name}}<br/>{{#queue}}Queue:\x20{{queue.name}}<br/>{{/queue}}From\x20:\x20{{from}}';}},'notificationSound':{'type':Sequelize[_0xbd6b('0x5')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0xbd6b('0x5')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0xbd6b('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'mapKey':{'type':Sequelize[_0xbd6b('0x2')]},'queueTransfer':{'type':Sequelize[_0xbd6b('0x5')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0xbd6b('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0xbd6b('0x5')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0xbd6b('0x6')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'mandatoryDispositionPauseId':{'type':Sequelize[_0xbd6b('0x6')],'allowNull':!![],'defaultValue':null,'comment':_0xbd6b('0x7')},'mandatoryDisposition':{'type':Sequelize[_0xbd6b('0x5')],'defaultValue':![],'comment':'Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','set':function(_0x3c24e5){if(!_0x3c24e5)this[_0xbd6b('0x8')]('mandatoryDispositionPauseId',null);this[_0xbd6b('0x8')](_0xbd6b('0x9'),_0x3c24e5);}}};
\ No newline at end of file
index ee1b519..0d91bf7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc090=['Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','describe','OpnechannelAccountId','Disposition','findOne','OpenchannelAccountId','removeDispositions','ids','addAnswer','getAnswers','CannedAnswer','findAll','removeAnswers','openchannel','CmContact','ValidationError','no\x20available\x20attributes','difference','updatedAt','createdAt','from','from\x20is\x20mandatory','isNil','Sequelize','body\x20is\x20mandatory\x20and\x20not\x20empty','mapKey','includes','mapKey\x20invalid,\x20please\x20use\x20one\x20of\x20these:\x20','CmList','DESC','OpenchannelApplication','Applications','list','List','applications','orderBy','priority','asc','account','Contacts','ListId','firstName','lastName','threadId','OpenchannelInteraction','externalUrl','ContactId','contact','messageId','interaction','created','autoclose','push','close','*,*,*,*','OpenchannelMessage','UserId','agent','waitForTheAssignedAgent','forcedOwnership','startRouting','Start','EventManager','notify','addApplications','transaction','bulkCreate','findAndCountAll','getApplications','getInteractions','Contact','User','Owner','fullname','Tag','Tags','color','tag','addAgents','omit','emit','userOpenchannelAccount:save','isArray','userOpenchannelAccount:remove','getAgents','out','spread','dataValues','Messages','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','defaults','socket.io-emitter','./openchannelAccount.socket','register','jayson/promise','client','http','request','then','info','OpenchannelAccount,\x20%s,\x20%s','request\x20sent','debug','OpenchannelAccount,\x20%s,\x20%s,\x20%s','error','message','result','catch','sendStatus','status','end','json','count','limit','Content-Range','apply','save','update','destroy','get','OpenchannelAccounts','UserProfileResource','stack','name','send','index','Pause','mandatoryDispositionPause','OpenchannelAccount','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','offset','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','options','includeAll','include','rows','show','params','length','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0xc090,0x112));var _0x0c09=function(_0x48de37,_0x2b85fa){_0x48de37=_0x48de37-0x0;var _0x3ef63b=_0xc090[_0x48de37];return _0x3ef63b;};'use strict';var pdf=require(_0x0c09('0x0'));var emlformat=require(_0x0c09('0x1'));var rimraf=require(_0x0c09('0x2'));var zipdir=require(_0x0c09('0x3'));var jsonpatch=require(_0x0c09('0x4'));var rp=require(_0x0c09('0x5'));var moment=require(_0x0c09('0x6'));var BPromise=require(_0x0c09('0x7'));var Mustache=require(_0x0c09('0x8'));var util=require('util');var path=require(_0x0c09('0x9'));var sox=require(_0x0c09('0xa'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x0c09('0xb'));var squel=require('squel');var crypto=require(_0x0c09('0xc'));var jsforce=require(_0x0c09('0xd'));var deskjs=require(_0x0c09('0xe'));var toCsv=require('to-csv');var querystring=require(_0x0c09('0xf'));var Papa=require(_0x0c09('0x10'));var authService=require('../../components/auth/service');var hardwareService=require(_0x0c09('0x11'));var Redis=require('ioredis');var qs=require(_0x0c09('0x12'));var logger=require(_0x0c09('0x13'))(_0x0c09('0x14'));var utils=require(_0x0c09('0x15'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config['redis']=_[_0x0c09('0x16')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x0c09('0x17'))(new Redis(config['redis']));require(_0x0c09('0x18'))[_0x0c09('0x19')](socket);var jayson=require(_0x0c09('0x1a'));var client=jayson[_0x0c09('0x1b')][_0x0c09('0x1c')]({'port':0x232c});var client9002=jayson[_0x0c09('0x1b')][_0x0c09('0x1c')]({'port':0x232a});function respondWithRpcPromise(_0x2dcdae,_0x367c86,_0x264d21,_0x482dc1){return new BPromise(function(_0x3ea66e,_0x38de60){var _0x173f4c=_0x482dc1||client;return _0x173f4c[_0x0c09('0x1d')](_0x2dcdae,_0x264d21)[_0x0c09('0x1e')](function(_0x14995e){logger[_0x0c09('0x1f')](_0x0c09('0x20'),_0x367c86,_0x0c09('0x21'));logger[_0x0c09('0x22')](_0x0c09('0x23'),_0x367c86,_0x0c09('0x21'),JSON['stringify'](_0x14995e));if(_0x14995e[_0x0c09('0x24')]){if(_0x14995e[_0x0c09('0x24')]['code']===0x1f4){logger['error'](_0x0c09('0x20'),_0x367c86,_0x14995e[_0x0c09('0x24')][_0x0c09('0x25')]);return _0x38de60(_0x14995e['error'][_0x0c09('0x25')]);}logger[_0x0c09('0x24')](_0x0c09('0x20'),_0x367c86,_0x14995e['error'][_0x0c09('0x25')]);return _0x3ea66e(_0x14995e['error'][_0x0c09('0x25')]);}else{logger[_0x0c09('0x1f')](_0x0c09('0x20'),_0x367c86,_0x0c09('0x21'));_0x3ea66e(_0x14995e[_0x0c09('0x26')][_0x0c09('0x25')]);}})[_0x0c09('0x27')](function(_0x42932e){logger['error']('OpenchannelAccount,\x20%s,\x20%s',_0x367c86,_0x42932e);_0x38de60(_0x42932e);});});}function respondWithStatusCode(_0xcf0257,_0x1b7731){_0x1b7731=_0x1b7731||0xcc;return function(_0x9acfd6){if(_0x9acfd6){return _0xcf0257[_0x0c09('0x28')](_0x1b7731);}return _0xcf0257[_0x0c09('0x29')](_0x1b7731)[_0x0c09('0x2a')]();};}function respondWithResult(_0x3cfa4a,_0x49d07a){_0x49d07a=_0x49d07a||0xc8;return function(_0x544393){if(_0x544393){return _0x3cfa4a[_0x0c09('0x29')](_0x49d07a)[_0x0c09('0x2b')](_0x544393);}};}function respondWithFilteredResult(_0x147627,_0x2d499c){return function(_0x2ce4e9){if(_0x2ce4e9){var _0x61a907=_0x2ce4e9[_0x0c09('0x2c')],_0x1dee90=_0x2d499c['offset'],_0x376742=_0x2d499c['offset']+_0x2d499c[_0x0c09('0x2d')],_0x1e20d7;if(_0x376742>=_0x61a907){_0x376742=_0x61a907;_0x1e20d7=0xc8;}else{_0x1e20d7=0xce;}_0x147627[_0x0c09('0x29')](_0x1e20d7);return _0x147627['set'](_0x0c09('0x2e'),_0x1dee90+'-'+_0x376742+'/'+_0x61a907)[_0x0c09('0x2b')](_0x2ce4e9);}return null;};}function patchUpdates(_0x178b29){return function(_0x2076d5){try{jsonpatch[_0x0c09('0x2f')](_0x2076d5,_0x178b29,!![]);}catch(_0x4550a4){return BPromise['reject'](_0x4550a4);}return _0x2076d5[_0x0c09('0x30')]();};}function saveUpdates(_0x3e4ed3,_0x36ed20){return function(_0x54c428){if(_0x54c428){return _0x54c428[_0x0c09('0x31')](_0x3e4ed3)['then'](function(_0x575677){return _0x575677;});}return null;};}function removeEntity(_0x55a886,_0x1f9604){return function(_0x786d77){if(_0x786d77){return _0x786d77[_0x0c09('0x32')]()[_0x0c09('0x1e')](function(){var _0xa4536c=_0x786d77[_0x0c09('0x33')]({'plain':!![]});var _0x59636d=_0x0c09('0x34');return db[_0x0c09('0x35')]['destroy']({'where':{'type':_0x59636d,'resourceId':_0xa4536c['id']}})[_0x0c09('0x1e')](function(){return _0x786d77;});})['then'](function(){_0x55a886['status'](0xcc)[_0x0c09('0x2a')]();});}};}function handleEntityNotFound(_0x5a34b7,_0x5c999b){return function(_0x3a4854){if(!_0x3a4854){_0x5a34b7[_0x0c09('0x28')](0x194);}return _0x3a4854;};}function handleError(_0x2ff36c,_0x1fef88){_0x1fef88=_0x1fef88||0x1f4;return function(_0x39cd87){logger[_0x0c09('0x24')](_0x39cd87[_0x0c09('0x36')]);if(_0x39cd87['name']){delete _0x39cd87[_0x0c09('0x37')];}_0x2ff36c[_0x0c09('0x29')](_0x1fef88)[_0x0c09('0x38')](_0x39cd87);};}exports[_0x0c09('0x39')]=function(_0x298239,_0x5c0543){var _0x341171={'include':[{'model':db[_0x0c09('0x3a')],'as':_0x0c09('0x3b')}]},_0x3afc74={},_0x22e39d={'count':0x0,'rows':[]};var _0x238c9b=db[_0x0c09('0x3c')][_0x0c09('0x3d')];_0x3afc74[_0x0c09('0x3e')]=_[_0x0c09('0x3f')](_0x238c9b);_0x3afc74[_0x0c09('0x40')]=_[_0x0c09('0x3f')](_0x298239[_0x0c09('0x40')]);_0x3afc74[_0x0c09('0x41')]=_[_0x0c09('0x42')](_0x3afc74[_0x0c09('0x3e')],_0x3afc74['query']);_0x341171['attributes']=_['intersection'](_0x3afc74[_0x0c09('0x3e')],qs[_0x0c09('0x43')](_0x298239[_0x0c09('0x40')][_0x0c09('0x43')]));_0x341171[_0x0c09('0x44')]=_0x341171[_0x0c09('0x44')]['length']?_0x341171[_0x0c09('0x44')]:_0x3afc74[_0x0c09('0x3e')];if(!_0x298239['query'][_0x0c09('0x45')](_0x0c09('0x46'))){_0x341171['limit']=qs[_0x0c09('0x2d')](_0x298239[_0x0c09('0x40')]['limit']);_0x341171[_0x0c09('0x47')]=qs[_0x0c09('0x47')](_0x298239['query'][_0x0c09('0x47')]);}_0x341171[_0x0c09('0x48')]=qs[_0x0c09('0x49')](_0x298239[_0x0c09('0x40')][_0x0c09('0x49')]);_0x341171[_0x0c09('0x4a')]=qs[_0x0c09('0x41')](_[_0x0c09('0x4b')](_0x298239['query'],_0x3afc74[_0x0c09('0x41')]));if(_0x298239[_0x0c09('0x40')][_0x0c09('0x4c')]){_0x341171['where']=_[_0x0c09('0x4d')](_0x341171[_0x0c09('0x4a')],{'$or':_[_0x0c09('0x4e')](_0x238c9b,function(_0x164f52){if(_0x164f52[_0x0c09('0x4f')][_0x0c09('0x50')]!==_0x0c09('0x51')){var _0x254113={};_0x254113[_0x164f52['field']]={'$like':'%'+_0x298239[_0x0c09('0x40')][_0x0c09('0x4c')]+'%'};return _0x254113;}})});}_0x341171=_[_0x0c09('0x4d')]({},_0x341171,_0x298239[_0x0c09('0x52')]);var _0x57b481={'where':_0x341171[_0x0c09('0x4a')]};return db[_0x0c09('0x3c')][_0x0c09('0x2c')](_0x57b481)[_0x0c09('0x1e')](function(_0xa21de3){_0x22e39d[_0x0c09('0x2c')]=_0xa21de3;if(_0x298239[_0x0c09('0x40')][_0x0c09('0x53')]){_0x341171[_0x0c09('0x54')]=[{'all':!![]}];}return db[_0x0c09('0x3c')]['findAll'](_0x341171);})['then'](function(_0x1279d2){_0x22e39d[_0x0c09('0x55')]=_0x1279d2;return _0x22e39d;})[_0x0c09('0x1e')](respondWithFilteredResult(_0x5c0543,_0x341171))[_0x0c09('0x27')](handleError(_0x5c0543,null));};exports[_0x0c09('0x56')]=function(_0x2e8f50,_0x191df1){var _0x5664d1={'raw':![],'where':{'id':_0x2e8f50[_0x0c09('0x57')]['id']},'include':[{'model':db['Pause'],'as':_0x0c09('0x3b')}]},_0x40066e={};_0x40066e[_0x0c09('0x3e')]=_[_0x0c09('0x3f')](db['OpenchannelAccount']['rawAttributes']);_0x40066e[_0x0c09('0x40')]=_[_0x0c09('0x3f')](_0x2e8f50[_0x0c09('0x40')]);_0x40066e[_0x0c09('0x41')]=_[_0x0c09('0x42')](_0x40066e['model'],_0x40066e[_0x0c09('0x40')]);_0x5664d1[_0x0c09('0x44')]=_[_0x0c09('0x42')](_0x40066e[_0x0c09('0x3e')],qs[_0x0c09('0x43')](_0x2e8f50[_0x0c09('0x40')][_0x0c09('0x43')]));_0x5664d1[_0x0c09('0x44')]=_0x5664d1['attributes'][_0x0c09('0x58')]?_0x5664d1[_0x0c09('0x44')]:_0x40066e['model'];if(_0x2e8f50[_0x0c09('0x40')][_0x0c09('0x53')]){_0x5664d1[_0x0c09('0x54')]=[{'all':!![]}];}_0x5664d1=_['merge']({},_0x5664d1,_0x2e8f50[_0x0c09('0x52')]);return db[_0x0c09('0x3c')][_0x0c09('0x59')](_0x5664d1)[_0x0c09('0x1e')](handleEntityNotFound(_0x191df1,null))[_0x0c09('0x1e')](respondWithResult(_0x191df1,null))[_0x0c09('0x27')](handleError(_0x191df1,null));};exports[_0x0c09('0x5a')]=function(_0x3486b1,_0x20368a){return db[_0x0c09('0x3c')][_0x0c09('0x5a')](_0x3486b1[_0x0c09('0x5b')],{})[_0x0c09('0x1e')](function(_0x2e990b){var _0x46c233=_0x3486b1[_0x0c09('0x5c')][_0x0c09('0x33')]({'plain':!![]});if(!_0x46c233)throw new Error(_0x0c09('0x5d'));if(_0x46c233[_0x0c09('0x5e')]===_0x0c09('0x5c')){var _0x5a1798=_0x2e990b[_0x0c09('0x33')]({'plain':!![]});var _0xdd43ec=_0x0c09('0x34');return db[_0x0c09('0x5f')][_0x0c09('0x59')]({'where':{'name':_0xdd43ec,'userProfileId':_0x46c233['userProfileId']},'raw':!![]})['then'](function(_0x17937f){if(_0x17937f&&_0x17937f['autoAssociation']===0x0){return db[_0x0c09('0x35')][_0x0c09('0x5a')]({'name':_0x5a1798['name'],'resourceId':_0x5a1798['id'],'type':_0x17937f[_0x0c09('0x37')],'sectionId':_0x17937f['id']},{})[_0x0c09('0x1e')](function(){return _0x2e990b;});}else{return _0x2e990b;}})[_0x0c09('0x27')](function(_0xbaa31d){logger['error'](_0x0c09('0x60'),_0xbaa31d);throw _0xbaa31d;});}return _0x2e990b;})[_0x0c09('0x1e')](respondWithResult(_0x20368a,0xc9))[_0x0c09('0x27')](handleError(_0x20368a,null));};exports[_0x0c09('0x31')]=function(_0x3fa60e,_0x513333){if(_0x3fa60e[_0x0c09('0x5b')]['id']){delete _0x3fa60e[_0x0c09('0x5b')]['id'];}return db[_0x0c09('0x3c')][_0x0c09('0x59')]({'where':{'id':_0x3fa60e[_0x0c09('0x57')]['id']},'include':[{'model':db[_0x0c09('0x3a')],'as':'mandatoryDispositionPause'}]})[_0x0c09('0x1e')](handleEntityNotFound(_0x513333,null))[_0x0c09('0x1e')](saveUpdates(_0x3fa60e[_0x0c09('0x5b')],null))[_0x0c09('0x1e')](respondWithResult(_0x513333,null))[_0x0c09('0x27')](handleError(_0x513333,null));};exports['destroy']=function(_0xdd288d,_0x2e2101){return db['OpenchannelAccount'][_0x0c09('0x59')]({'where':{'id':_0xdd288d['params']['id']}})[_0x0c09('0x1e')](handleEntityNotFound(_0x2e2101,null))[_0x0c09('0x1e')](removeEntity(_0x2e2101,null))[_0x0c09('0x27')](handleError(_0x2e2101,null));};exports['describe']=function(_0x37a82b,_0x6a0764){return db[_0x0c09('0x3c')][_0x0c09('0x61')]()[_0x0c09('0x1e')](respondWithResult(_0x6a0764,null))[_0x0c09('0x27')](handleError(_0x6a0764,null));};exports['addDisposition']=function(_0x22f93c,_0x87452,_0x4c6f8d){if(_0x22f93c[_0x0c09('0x5b')]['id']){delete _0x22f93c[_0x0c09('0x5b')]['id'];}return db[_0x0c09('0x3c')]['find']({'where':{'id':_0x22f93c[_0x0c09('0x57')]['id']}})[_0x0c09('0x1e')](handleEntityNotFound(_0x87452,null))[_0x0c09('0x1e')](function(_0xb7d8b1){if(_0xb7d8b1){_0x22f93c[_0x0c09('0x5b')][_0x0c09('0x62')]=_0xb7d8b1['id'];return db[_0x0c09('0x63')][_0x0c09('0x5a')](_0x22f93c[_0x0c09('0x5b')]);}})[_0x0c09('0x1e')](respondWithResult(_0x87452,null))[_0x0c09('0x27')](handleError(_0x87452,null));};exports['getDispositions']=function(_0x4eac8f,_0x3b5039,_0x37e81c){var _0x42efa8={'raw':![],'where':{}};var _0x4762c5={};var _0x18f39f={'count':0x0,'rows':[]};return db[_0x0c09('0x3c')][_0x0c09('0x64')]({'where':{'id':_0x4eac8f[_0x0c09('0x57')]['id']}})[_0x0c09('0x1e')](handleEntityNotFound(_0x3b5039,null))[_0x0c09('0x1e')](function(_0x145ee5){if(_0x145ee5){_0x4762c5['model']=_[_0x0c09('0x3f')](db[_0x0c09('0x63')]['rawAttributes']);_0x4762c5[_0x0c09('0x40')]=_[_0x0c09('0x3f')](_0x4eac8f[_0x0c09('0x40')]);_0x4762c5[_0x0c09('0x41')]=_[_0x0c09('0x42')](_0x4762c5[_0x0c09('0x3e')],_0x4762c5[_0x0c09('0x40')]);_0x42efa8[_0x0c09('0x44')]=_['intersection'](_0x4762c5['model'],qs[_0x0c09('0x43')](_0x4eac8f[_0x0c09('0x40')][_0x0c09('0x43')]));_0x42efa8['attributes']=_0x42efa8[_0x0c09('0x44')][_0x0c09('0x58')]?_0x42efa8[_0x0c09('0x44')]:_0x4762c5[_0x0c09('0x3e')];if(!_0x4eac8f[_0x0c09('0x40')][_0x0c09('0x45')](_0x0c09('0x46'))){_0x42efa8[_0x0c09('0x2d')]=qs[_0x0c09('0x2d')](_0x4eac8f[_0x0c09('0x40')][_0x0c09('0x2d')]);_0x42efa8['offset']=qs[_0x0c09('0x47')](_0x4eac8f['query']['offset']);}_0x42efa8[_0x0c09('0x48')]=qs['sort'](_0x4eac8f['query'][_0x0c09('0x49')]);_0x42efa8[_0x0c09('0x4a')]=qs['filters'](_[_0x0c09('0x4b')](_0x4eac8f[_0x0c09('0x40')],_0x4762c5[_0x0c09('0x41')]));_0x42efa8[_0x0c09('0x4a')][_0x0c09('0x65')]=_0x145ee5['id'];if(_0x4eac8f[_0x0c09('0x40')]['filter']){_0x42efa8[_0x0c09('0x4a')]=_[_0x0c09('0x4d')](_0x42efa8[_0x0c09('0x4a')],{'$or':_[_0x0c09('0x4e')](_0x42efa8[_0x0c09('0x44')],function(_0x4aa2ef){var _0x49bc01={};_0x49bc01[_0x4aa2ef]={'$like':'%'+_0x4eac8f[_0x0c09('0x40')][_0x0c09('0x4c')]+'%'};return _0x49bc01;})});}_0x42efa8=_[_0x0c09('0x4d')]({},_0x42efa8,_0x4eac8f[_0x0c09('0x52')]);return db[_0x0c09('0x63')][_0x0c09('0x2c')]({'where':_0x42efa8['where']})[_0x0c09('0x1e')](function(_0x4b3e94){_0x18f39f[_0x0c09('0x2c')]=_0x4b3e94;if(_0x4eac8f[_0x0c09('0x40')][_0x0c09('0x53')]){_0x42efa8[_0x0c09('0x54')]=[{'all':!![]}];}return db[_0x0c09('0x63')]['findAll'](_0x42efa8);})[_0x0c09('0x1e')](function(_0x369cf1){_0x18f39f[_0x0c09('0x55')]=_0x369cf1;return _0x18f39f;});}})[_0x0c09('0x1e')](respondWithFilteredResult(_0x3b5039,_0x42efa8))[_0x0c09('0x27')](handleError(_0x3b5039,null));};exports[_0x0c09('0x66')]=function(_0xef12e3,_0x55eb6c,_0x292be1){var _0x5e5b3d;return db['OpenchannelAccount'][_0x0c09('0x59')]({'where':{'id':_0xef12e3[_0x0c09('0x57')]['id']}})['then'](handleEntityNotFound(_0x55eb6c,null))[_0x0c09('0x1e')](function(_0x451e31){if(_0x451e31){return _0x451e31[_0x0c09('0x66')](_0xef12e3[_0x0c09('0x40')][_0x0c09('0x67')]);}})[_0x0c09('0x1e')](respondWithStatusCode(_0x55eb6c,null))['catch'](handleError(_0x55eb6c,null));};exports[_0x0c09('0x68')]=function(_0xf93164,_0x157aa6,_0x3662c3){if(_0xf93164[_0x0c09('0x5b')]['id']){delete _0xf93164[_0x0c09('0x5b')]['id'];}return db[_0x0c09('0x3c')]['find']({'where':{'id':_0xf93164[_0x0c09('0x57')]['id']}})['then'](handleEntityNotFound(_0x157aa6,null))['then'](function(_0x2183b8){if(_0x2183b8){_0xf93164['body']['OpenchannelAccountId']=_0x2183b8['id'];return db['CannedAnswer'][_0x0c09('0x5a')](_0xf93164[_0x0c09('0x5b')]);}})[_0x0c09('0x1e')](respondWithResult(_0x157aa6,null))[_0x0c09('0x27')](handleError(_0x157aa6,null));};exports[_0x0c09('0x69')]=function(_0x381bc8,_0x538e3f,_0x5de2a5){var _0x3cfa61={'raw':![],'where':{}};var _0x22ee14={};var _0x573c68={'count':0x0,'rows':[]};return db[_0x0c09('0x3c')][_0x0c09('0x64')]({'where':{'id':_0x381bc8[_0x0c09('0x57')]['id']}})[_0x0c09('0x1e')](handleEntityNotFound(_0x538e3f,null))['then'](function(_0x58dc3e){if(_0x58dc3e){_0x22ee14[_0x0c09('0x3e')]=_[_0x0c09('0x3f')](db[_0x0c09('0x6a')]['rawAttributes']);_0x22ee14['query']=_[_0x0c09('0x3f')](_0x381bc8[_0x0c09('0x40')]);_0x22ee14['filters']=_[_0x0c09('0x42')](_0x22ee14[_0x0c09('0x3e')],_0x22ee14[_0x0c09('0x40')]);_0x3cfa61[_0x0c09('0x44')]=_[_0x0c09('0x42')](_0x22ee14['model'],qs[_0x0c09('0x43')](_0x381bc8['query'][_0x0c09('0x43')]));_0x3cfa61['attributes']=_0x3cfa61[_0x0c09('0x44')][_0x0c09('0x58')]?_0x3cfa61['attributes']:_0x22ee14[_0x0c09('0x3e')];if(!_0x381bc8[_0x0c09('0x40')][_0x0c09('0x45')](_0x0c09('0x46'))){_0x3cfa61['limit']=qs[_0x0c09('0x2d')](_0x381bc8[_0x0c09('0x40')]['limit']);_0x3cfa61['offset']=qs[_0x0c09('0x47')](_0x381bc8[_0x0c09('0x40')][_0x0c09('0x47')]);}_0x3cfa61[_0x0c09('0x48')]=qs['sort'](_0x381bc8[_0x0c09('0x40')][_0x0c09('0x49')]);_0x3cfa61[_0x0c09('0x4a')]=qs[_0x0c09('0x41')](_['pick'](_0x381bc8[_0x0c09('0x40')],_0x22ee14[_0x0c09('0x41')]));_0x3cfa61[_0x0c09('0x4a')]['OpenchannelAccountId']=_0x58dc3e['id'];if(_0x381bc8[_0x0c09('0x40')][_0x0c09('0x4c')]){_0x3cfa61[_0x0c09('0x4a')]=_[_0x0c09('0x4d')](_0x3cfa61['where'],{'$or':_[_0x0c09('0x4e')](_0x3cfa61[_0x0c09('0x44')],function(_0x513d55){var _0x3d6ae7={};_0x3d6ae7[_0x513d55]={'$like':'%'+_0x381bc8[_0x0c09('0x40')][_0x0c09('0x4c')]+'%'};return _0x3d6ae7;})});}_0x3cfa61=_['merge']({},_0x3cfa61,_0x381bc8[_0x0c09('0x52')]);return db[_0x0c09('0x6a')][_0x0c09('0x2c')]({'where':_0x3cfa61['where']})['then'](function(_0xb5fe5a){_0x573c68[_0x0c09('0x2c')]=_0xb5fe5a;if(_0x381bc8[_0x0c09('0x40')][_0x0c09('0x53')]){_0x3cfa61[_0x0c09('0x54')]=[{'all':!![]}];}return db[_0x0c09('0x6a')][_0x0c09('0x6b')](_0x3cfa61);})[_0x0c09('0x1e')](function(_0xbc479b){_0x573c68[_0x0c09('0x55')]=_0xbc479b;return _0x573c68;});}})[_0x0c09('0x1e')](respondWithFilteredResult(_0x538e3f,_0x3cfa61))[_0x0c09('0x27')](handleError(_0x538e3f,null));};exports[_0x0c09('0x6c')]=function(_0x4fdda9,_0x4ba239,_0x4c3082){var _0x52a234;return db[_0x0c09('0x3c')]['find']({'where':{'id':_0x4fdda9['params']['id']}})['then'](handleEntityNotFound(_0x4ba239,null))[_0x0c09('0x1e')](function(_0x4bb8c7){if(_0x4bb8c7){return _0x4bb8c7['removeAnswers'](_0x4fdda9[_0x0c09('0x40')][_0x0c09('0x67')]);}})[_0x0c09('0x1e')](respondWithStatusCode(_0x4ba239,null))['catch'](handleError(_0x4ba239,null));};exports['notify']=function(_0x1d2bf4,_0x8efd18,_0x3a9ad5){var _0xf61840={'body':_0x1d2bf4[_0x0c09('0x5b')],'channel':_0x0c09('0x6d')};var _0x45e1eb=[];var _0x52207d=[];var _0x24001b={};var _0x6f4c4f=![];return db[_0x0c09('0x6e')][_0x0c09('0x61')]()['then'](function(_0x1ee898){if(!_0x1ee898){throw new db['Sequelize'][(_0x0c09('0x6f'))](_0x0c09('0x70'));}_0x45e1eb=_[_0x0c09('0x71')](_[_0x0c09('0x3f')](_0x1ee898),['createdAt',_0x0c09('0x72')]);_0x52207d=_[_0x0c09('0x71')](_[_0x0c09('0x3f')](_0x1ee898),[_0x0c09('0x73'),_0x0c09('0x72'),'CompanyId','ListId']);if(_0x1d2bf4[_0x0c09('0x5b')]['id']){delete _0x1d2bf4['body']['id'];}if(_['isNil'](_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x74')])){throw new db['Sequelize'][(_0x0c09('0x6f'))](_0x0c09('0x75'));}if(_[_0x0c09('0x76')](_0x1d2bf4['body'][_0x0c09('0x5b')])||_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x5b')]===''){throw new db[(_0x0c09('0x77'))]['ValidationError'](_0x0c09('0x78'));}if(_[_0x0c09('0x76')](_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x79')])){throw new db[(_0x0c09('0x77'))]['ValidationError']('mapKey\x20is\x20mandatory,\x20please\x20use\x20one\x20of\x20these:\x20'+_0x52207d);}if(!_[_0x0c09('0x7a')](_0x52207d,_0x1d2bf4['body'][_0x0c09('0x79')])){throw new db[(_0x0c09('0x77'))]['ValidationError'](_0x0c09('0x7b')+_0x52207d);}_0x24001b[_0x1d2bf4['body'][_0x0c09('0x79')]]=_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x74')];})[_0x0c09('0x1e')](function(){return db[_0x0c09('0x3c')][_0x0c09('0x59')]({'where':{'id':_0x1d2bf4[_0x0c09('0x57')]['id']},'include':[{'model':db[_0x0c09('0x7c')],'as':'List','include':[{'model':db[_0x0c09('0x6e')],'as':'Contacts','where':_0x24001b,'limit':0x1,'order':[['updatedAt',_0x0c09('0x7d')]]}]},{'model':db[_0x0c09('0x7e')],'as':_0x0c09('0x7f')}]});})['then'](handleEntityNotFound(_0x8efd18,null))[_0x0c09('0x1e')](function(_0x3ba386){if(_0x3ba386&&_0x3ba386['List']){_0xf61840['account']=_0x3ba386;_0xf61840['applications']=_0x3ba386['Applications'];_0xf61840[_0x0c09('0x80')]=_0x3ba386[_0x0c09('0x81')];_0xf61840[_0x0c09('0x82')]=_[_0x0c09('0x83')](_0xf61840[_0x0c09('0x82')],[_0x0c09('0x84')],[_0x0c09('0x85')]);if(_0xf61840[_0x0c09('0x86')][_0x0c09('0x7f')]){delete _0xf61840[_0x0c09('0x86')][_0x0c09('0x7f')];}if(_0xf61840[_0x0c09('0x86')][_0x0c09('0x81')]&&_0xf61840['account']['List'][_0x0c09('0x87')][_0x0c09('0x58')]){return _0xf61840[_0x0c09('0x86')][_0x0c09('0x81')][_0x0c09('0x87')][0x0];}var _0x129211=_[_0x0c09('0x16')](_0x1d2bf4[_0x0c09('0x5b')],{'firstName':_0x1d2bf4[_0x0c09('0x5b')]['from'],'ListId':_0x3ba386[_0x0c09('0x88')]});_0x129211[_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x79')]]=_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x74')];return db[_0x0c09('0x6e')][_0x0c09('0x5a')](_0x129211,{'fields':_0x45e1eb,'raw':!![]});}})[_0x0c09('0x1e')](handleEntityNotFound(_0x8efd18,null))[_0x0c09('0x1e')](function(_0x5d6fa2){_0xf61840['contact']=_0x5d6fa2;if(_0x5d6fa2){var _0x49fd23={'ContactId':_0x5d6fa2['id'],'OpenchannelAccountId':_0x1d2bf4[_0x0c09('0x57')]['id'],'from':(_0x5d6fa2[_0x0c09('0x89')]||'')+'\x20'+(_0x5d6fa2[_0x0c09('0x8a')]||'')};var _0x20da73={'OpenchannelAccountId':_0x1d2bf4[_0x0c09('0x57')]['id'],'closed':![]};if(_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x8b')]){_0x20da73[_0x0c09('0x8b')]=_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x8b')];return db[_0x0c09('0x8c')][_0x0c09('0x59')]({'where':_0x20da73})['then'](function(_0x1e6e2f){if(_0x1e6e2f){return[_0x1e6e2f,![]];}_0x49fd23['threadId']=_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x8b')];_0x49fd23[_0x0c09('0x8d')]=_0x1d2bf4[_0x0c09('0x5b')]['externalUrl'];return db[_0x0c09('0x8c')][_0x0c09('0x5a')](_0x49fd23)[_0x0c09('0x1e')](function(_0x49e83d){return[_0x49e83d,!![]];});});}else{_0x20da73[_0x0c09('0x8b')]=null;}_0x20da73[_0x0c09('0x8e')]=_0x5d6fa2['id'];return db[_0x0c09('0x8c')]['find']({'where':_0x20da73})[_0x0c09('0x1e')](function(_0x446e68){if(_0x446e68){return[_0x446e68,![]];}return db[_0x0c09('0x8c')][_0x0c09('0x5a')](_0x49fd23)[_0x0c09('0x1e')](function(_0x10e3e8){return[_0x10e3e8,!![]];});});}})['spread'](function(_0x5dd06c,_0x18df90){if(_0x5dd06c){_0x6f4c4f=_0x18df90;if(!_0x18df90){var _0x428b7b={'from':(_0xf61840[_0x0c09('0x8f')][_0x0c09('0x89')]||'')+'\x20'+(_0xf61840[_0x0c09('0x8f')][_0x0c09('0x8a')]||'')};if(_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x8b')]&&_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x90')]&&_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x8b')]!=_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x90')]){_0x428b7b[_0x0c09('0x8b')]=_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x90')];}return _0x5dd06c[_0x0c09('0x31')](_0x428b7b);}else{return _0x5dd06c;}}})[_0x0c09('0x1e')](function(_0xabce5e){_0xf61840[_0x0c09('0x91')]=_0xabce5e['get']({'plain':!![]});_0xf61840[_0x0c09('0x91')][_0x0c09('0x92')]=_0x6f4c4f;if(_0xf61840['interaction']['created']){if(_0xf61840[_0x0c09('0x86')][_0x0c09('0x93')]){_0xf61840[_0x0c09('0x82')][_0x0c09('0x94')]({'id':0x0,'priority':_0xf61840[_0x0c09('0x82')][_0x0c09('0x58')]+0x1,'app':_0x0c09('0x95'),'appdata':'unmanaged','interval':_0x0c09('0x96')});}}return db[_0x0c09('0x97')][_0x0c09('0x5a')]({'body':_0x1d2bf4[_0x0c09('0x5b')][_0x0c09('0x5b')],'OpenchannelAccountId':_0x1d2bf4[_0x0c09('0x57')]['id'],'OpenchannelInteractionId':_0xabce5e['id'],'direction':'in','ContactId':_0xf61840[_0x0c09('0x8f')]['id'],'AttachmentId':_0x1d2bf4[_0x0c09('0x5b')]['AttachmentId']});})[_0x0c09('0x1e')](function(_0x532225){_0xf61840[_0x0c09('0x25')]=_0x532225;if(_0xf61840[_0x0c09('0x91')]['UserId']){return db['User'][_0x0c09('0x59')]({'attributes':['id','name'],'where':{'id':_0xf61840[_0x0c09('0x91')][_0x0c09('0x98')]}})[_0x0c09('0x1e')](function(_0x4b25ec){if(_0x4b25ec){_0xf61840[_0x0c09('0x82')]['unshift']({'id':0x0,'priority':0x0,'app':_0x0c09('0x99'),'appdata':_0x4b25ec[_0x0c09('0x37')]+','+(_0xf61840['account'][_0x0c09('0x9a')]||0xa),'interval':_0x0c09('0x96')});_0xf61840[_0x0c09('0x9b')]=![];}return respondWithRpcPromise('Start',_0x0c09('0x9c'),_0xf61840);});}return respondWithRpcPromise(_0x0c09('0x9d'),_0x0c09('0x9c'),_0xf61840);})['then'](function(_0x542b08){respondWithRpcPromise(_0x0c09('0x9e'),_0x0c09('0x9e'),{'event':_0x0c09('0x9f'),'message':_0x542b08},client9002);return _0x542b08;})[_0x0c09('0x1e')](respondWithResult(_0x8efd18,null))[_0x0c09('0x27')](handleError(_0x8efd18,null));};exports[_0x0c09('0xa0')]=function(_0x5685c0,_0x2e5b92,_0x1501ec){return db['OpenchannelAccount'][_0x0c09('0x64')]({'where':{'id':_0x5685c0[_0x0c09('0x57')]['id']}})['then'](handleEntityNotFound(_0x2e5b92,null))['then'](function(_0x18c2fa){if(_0x18c2fa){return db['sequelize'][_0x0c09('0xa1')](function(_0x4e6bac){return db[_0x0c09('0x7e')][_0x0c09('0x32')]({'where':{'OpenchannelAccountId':_0x5685c0['params']['id']},'transaction':_0x4e6bac})[_0x0c09('0x1e')](function(_0x137caa){var _0x4947cb=_[_0x0c09('0x4e')](_0x5685c0[_0x0c09('0x5b')],function(_0xc2eb50){_0xc2eb50[_0x0c09('0x65')]=_0x5685c0[_0x0c09('0x57')]['id'];return _0xc2eb50;});return db[_0x0c09('0x7e')][_0x0c09('0xa2')](_0x4947cb,{'transaction':_0x4e6bac});});})[_0x0c09('0x1e')](function(){return db['OpenchannelApplication'][_0x0c09('0xa3')]({'where':{'OpenchannelAccountId':_0x5685c0[_0x0c09('0x57')]['id']},'order':'priority'});});}})[_0x0c09('0x1e')](respondWithResult(_0x2e5b92,null))[_0x0c09('0x27')](handleError(_0x2e5b92,null));};exports[_0x0c09('0xa4')]=function(_0x15676e,_0x1b76d9,_0x3835aa){var _0xbab123={};var _0x3d40f2={};var _0x422ffe;var _0x3db09d;return db[_0x0c09('0x3c')][_0x0c09('0x64')]({'where':{'id':_0x15676e[_0x0c09('0x57')]['id']}})['then'](handleEntityNotFound(_0x1b76d9,null))[_0x0c09('0x1e')](function(_0x58ef18){if(_0x58ef18){_0x422ffe=_0x58ef18;_0x3d40f2[_0x0c09('0x3e')]=_[_0x0c09('0x3f')](db[_0x0c09('0x7e')][_0x0c09('0x3d')]);_0x3d40f2[_0x0c09('0x40')]=_[_0x0c09('0x3f')](_0x15676e[_0x0c09('0x40')]);_0x3d40f2[_0x0c09('0x41')]=_[_0x0c09('0x42')](_0x3d40f2[_0x0c09('0x3e')],_0x3d40f2['query']);_0xbab123[_0x0c09('0x44')]=_[_0x0c09('0x42')](_0x3d40f2[_0x0c09('0x3e')],qs[_0x0c09('0x43')](_0x15676e[_0x0c09('0x40')][_0x0c09('0x43')]));_0xbab123[_0x0c09('0x44')]=_0xbab123['attributes'][_0x0c09('0x58')]?_0xbab123[_0x0c09('0x44')]:_0x3d40f2[_0x0c09('0x3e')];_0xbab123[_0x0c09('0x48')]=qs['sort'](_0x15676e[_0x0c09('0x40')]['sort']);_0xbab123[_0x0c09('0x4a')]=qs[_0x0c09('0x41')](_['pick'](_0x15676e['query'],_0x3d40f2[_0x0c09('0x41')]));if(_0x15676e[_0x0c09('0x40')][_0x0c09('0x4c')]){_0xbab123[_0x0c09('0x4a')]=_['merge'](_0xbab123[_0x0c09('0x4a')],{'$or':_[_0x0c09('0x4e')](_0xbab123[_0x0c09('0x44')],function(_0xd2dd87){var _0x28420f={};_0x28420f[_0xd2dd87]={'$like':'%'+_0x15676e[_0x0c09('0x40')]['filter']+'%'};return _0x28420f;})});}_0xbab123=_[_0x0c09('0x4d')]({},_0xbab123,_0x15676e['options']);return _0x422ffe[_0x0c09('0xa4')](_0xbab123);}})['then'](function(_0x574e60){if(_0x574e60){_0x3db09d=_0x574e60[_0x0c09('0x58')];if(!_0x15676e[_0x0c09('0x40')][_0x0c09('0x45')](_0x0c09('0x46'))){_0xbab123[_0x0c09('0x2d')]=qs[_0x0c09('0x2d')](_0x15676e[_0x0c09('0x40')]['limit']);_0xbab123[_0x0c09('0x47')]=qs[_0x0c09('0x47')](_0x15676e[_0x0c09('0x40')]['offset']);}return _0x422ffe[_0x0c09('0xa4')](_0xbab123);}})[_0x0c09('0x1e')](function(_0x8a1920){if(_0x8a1920){return _0x8a1920?{'count':_0x3db09d,'rows':_0x8a1920}:null;}})[_0x0c09('0x1e')](respondWithResult(_0x1b76d9,null))[_0x0c09('0x27')](handleError(_0x1b76d9,null));};exports[_0x0c09('0xa5')]=function(_0x1b4659,_0x43cbc2,_0x411367){var _0x17b118={'raw':![],'where':{}};var _0x1a30d5={};var _0x4e7d58={'count':0x0,'rows':[]};return db[_0x0c09('0x3c')]['findOne']({'where':{'id':_0x1b4659['params']['id']}})['then'](handleEntityNotFound(_0x43cbc2,null))[_0x0c09('0x1e')](function(_0x2f364c){if(_0x2f364c){_0x1a30d5[_0x0c09('0x3e')]=_['keys'](db[_0x0c09('0x8c')][_0x0c09('0x3d')]);_0x1a30d5[_0x0c09('0x40')]=_['keys'](_0x1b4659['query']);_0x1a30d5[_0x0c09('0x41')]=_[_0x0c09('0x42')](_0x1a30d5['model'],_0x1a30d5[_0x0c09('0x40')]);_0x17b118[_0x0c09('0x44')]=_[_0x0c09('0x42')](_0x1a30d5[_0x0c09('0x3e')],qs[_0x0c09('0x43')](_0x1b4659[_0x0c09('0x40')][_0x0c09('0x43')]));_0x17b118[_0x0c09('0x44')]=_0x17b118['attributes']['length']?_0x17b118[_0x0c09('0x44')]:_0x1a30d5[_0x0c09('0x3e')];if(!_0x1b4659[_0x0c09('0x40')]['hasOwnProperty']('nolimit')){_0x17b118[_0x0c09('0x2d')]=qs['limit'](_0x1b4659[_0x0c09('0x40')][_0x0c09('0x2d')]);_0x17b118[_0x0c09('0x47')]=qs[_0x0c09('0x47')](_0x1b4659['query'][_0x0c09('0x47')]);}_0x17b118[_0x0c09('0x48')]=qs[_0x0c09('0x49')](_0x1b4659[_0x0c09('0x40')][_0x0c09('0x49')]);_0x17b118[_0x0c09('0x4a')]=qs[_0x0c09('0x41')](_['pick'](_0x1b4659[_0x0c09('0x40')],_0x1a30d5['filters']));_0x17b118['where'][_0x0c09('0x65')]=_0x2f364c['id'];if(_0x1b4659[_0x0c09('0x40')]['filter']){_0x17b118[_0x0c09('0x4a')]=_['merge'](_0x17b118[_0x0c09('0x4a')],{'$or':_[_0x0c09('0x4e')](_0x17b118[_0x0c09('0x44')],function(_0x38b270){var _0x1c2961={};_0x1c2961[_0x38b270]={'$like':'%'+_0x1b4659[_0x0c09('0x40')][_0x0c09('0x4c')]+'%'};return _0x1c2961;})});}_0x17b118=_[_0x0c09('0x4d')]({},_0x17b118,_0x1b4659[_0x0c09('0x52')]);return db[_0x0c09('0x8c')]['count']({'where':_0x17b118['where']})[_0x0c09('0x1e')](function(_0x247817){_0x4e7d58[_0x0c09('0x2c')]=_0x247817;if(_0x1b4659[_0x0c09('0x40')][_0x0c09('0x53')]){_0x17b118[_0x0c09('0x54')]=[{'model':db[_0x0c09('0x6e')],'as':_0x0c09('0xa6'),'required':![]},{'model':db[_0x0c09('0xa7')],'as':_0x0c09('0xa8'),'attributes':[_0x0c09('0x37'),_0x0c09('0xa9'),'internal'],'required':![]},{'model':db[_0x0c09('0xaa')],'as':_0x0c09('0xab'),'attributes':['id','name',_0x0c09('0xac')],'where':_0x1b4659[_0x0c09('0x40')][_0x0c09('0xad')]?{'id':_0x1b4659[_0x0c09('0x40')][_0x0c09('0xad')]}:undefined,'required':_0x1b4659['query'][_0x0c09('0xad')]?!![]:![]}];}return db['OpenchannelInteraction'][_0x0c09('0x6b')](_0x17b118);})[_0x0c09('0x1e')](function(_0x1345e2){_0x4e7d58[_0x0c09('0x55')]=_0x1345e2;return _0x4e7d58;});}})[_0x0c09('0x1e')](respondWithFilteredResult(_0x43cbc2,_0x17b118))['catch'](handleError(_0x43cbc2,null));};exports[_0x0c09('0xae')]=function(_0x4baf4f,_0x1b7baf,_0x2d038d){return db[_0x0c09('0x3c')][_0x0c09('0x59')]({'where':{'id':_0x4baf4f[_0x0c09('0x57')]['id']}})[_0x0c09('0x1e')](handleEntityNotFound(_0x1b7baf,null))[_0x0c09('0x1e')](function(_0x4db283){if(_0x4db283){return _0x4db283[_0x0c09('0xae')](_0x4baf4f['body'][_0x0c09('0x67')],_[_0x0c09('0xaf')](_0x4baf4f[_0x0c09('0x5b')],['ids','id'])||{})['spread'](function(_0x4768e5){for(var _0x243543=0x0;_0x243543<_0x4baf4f[_0x0c09('0x5b')][_0x0c09('0x67')]['length'];_0x243543+=0x1){socket[_0x0c09('0xb0')](_0x0c09('0xb1'),{'UserId':_0x4baf4f['body'][_0x0c09('0x67')][_0x243543],'OpenchannelAccountId':_0x4baf4f[_0x0c09('0x57')]['id']});}return _0x4768e5;});}})[_0x0c09('0x1e')](respondWithResult(_0x1b7baf,null))[_0x0c09('0x27')](handleError(_0x1b7baf,null));};exports['removeAgents']=function(_0x4f044f,_0x4ec4f6,_0x14c0f3){var _0x187d38;return db['OpenchannelAccount']['find']({'where':{'id':_0x4f044f['params']['id']}})[_0x0c09('0x1e')](handleEntityNotFound(_0x4ec4f6,null))[_0x0c09('0x1e')](function(_0x49b40e){if(_0x49b40e){return _0x49b40e['removeAgents'](_0x4f044f['query'][_0x0c09('0x67')])[_0x0c09('0x1e')](function(_0x169fc7){if(_[_0x0c09('0xb2')](_0x4f044f['query']['ids'])){for(var _0x42f74f=0x0;_0x42f74f<_0x4f044f[_0x0c09('0x40')][_0x0c09('0x67')][_0x0c09('0x58')];_0x42f74f+=0x1){socket['emit']('userOpenchannelAccount:remove',{'UserId':_0x4f044f[_0x0c09('0x40')]['ids'][_0x42f74f],'OpenchannelAccountId':_0x4f044f[_0x0c09('0x57')]['id']});}}else{socket[_0x0c09('0xb0')](_0x0c09('0xb3'),{'UserId':_0x4f044f[_0x0c09('0x40')][_0x0c09('0x67')],'OpenchannelAccountId':_0x4f044f[_0x0c09('0x57')]['id']});}});}})[_0x0c09('0x1e')](respondWithStatusCode(_0x4ec4f6,null))['catch'](handleError(_0x4ec4f6,null));};exports[_0x0c09('0xb4')]=function(_0x53a6bf,_0x46f7a1,_0x2bf5ec){var _0x29f60a={};var _0xe5e4f6={};var _0x4cec2c;var _0x580e36;return db[_0x0c09('0x3c')][_0x0c09('0x64')]({'where':{'id':_0x53a6bf[_0x0c09('0x57')]['id']}})[_0x0c09('0x1e')](handleEntityNotFound(_0x46f7a1,null))[_0x0c09('0x1e')](function(_0x2d88ea){if(_0x2d88ea){_0x4cec2c=_0x2d88ea;_0xe5e4f6[_0x0c09('0x3e')]=_[_0x0c09('0x3f')](db[_0x0c09('0xa7')][_0x0c09('0x3d')]);_0xe5e4f6[_0x0c09('0x40')]=_['keys'](_0x53a6bf[_0x0c09('0x40')]);_0xe5e4f6['filters']=_['intersection'](_0xe5e4f6[_0x0c09('0x3e')],_0xe5e4f6[_0x0c09('0x40')]);_0x29f60a[_0x0c09('0x44')]=_['intersection'](_0xe5e4f6['model'],qs[_0x0c09('0x43')](_0x53a6bf['query'][_0x0c09('0x43')]));_0x29f60a[_0x0c09('0x44')]=_0x29f60a[_0x0c09('0x44')][_0x0c09('0x58')]?_0x29f60a[_0x0c09('0x44')]:_0xe5e4f6['model'];_0x29f60a[_0x0c09('0x48')]=qs[_0x0c09('0x49')](_0x53a6bf['query'][_0x0c09('0x49')]);_0x29f60a['where']=qs[_0x0c09('0x41')](_[_0x0c09('0x4b')](_0x53a6bf[_0x0c09('0x40')],_0xe5e4f6['filters']));if(_0x53a6bf[_0x0c09('0x40')][_0x0c09('0x4c')]){_0x29f60a[_0x0c09('0x4a')]=_[_0x0c09('0x4d')](_0x29f60a[_0x0c09('0x4a')],{'$or':_['map'](_0x29f60a['attributes'],function(_0x2fba4c){var _0x2263dd={};_0x2263dd[_0x2fba4c]={'$like':'%'+_0x53a6bf[_0x0c09('0x40')][_0x0c09('0x4c')]+'%'};return _0x2263dd;})});}_0x29f60a=_[_0x0c09('0x4d')]({},_0x29f60a,_0x53a6bf[_0x0c09('0x52')]);return _0x4cec2c['getAgents'](_0x29f60a);}})['then'](function(_0x415395){if(_0x415395){_0x580e36=_0x415395[_0x0c09('0x58')];if(!_0x53a6bf[_0x0c09('0x40')][_0x0c09('0x45')](_0x0c09('0x46'))){_0x29f60a[_0x0c09('0x2d')]=qs[_0x0c09('0x2d')](_0x53a6bf[_0x0c09('0x40')][_0x0c09('0x2d')]);_0x29f60a[_0x0c09('0x47')]=qs[_0x0c09('0x47')](_0x53a6bf[_0x0c09('0x40')][_0x0c09('0x47')]);}return _0x4cec2c[_0x0c09('0xb4')](_0x29f60a);}})['then'](function(_0x103771){if(_0x103771){return _0x103771?{'count':_0x580e36,'rows':_0x103771}:null;}})[_0x0c09('0x1e')](respondWithResult(_0x46f7a1,null))[_0x0c09('0x27')](handleError(_0x46f7a1,null));};exports[_0x0c09('0x38')]=function(_0x4128b7,_0x116205,_0x4ffe3c){var _0x5f5a98,_0x44ea65,_0x46a6c3;if(_[_0x0c09('0x76')](_0x4128b7[_0x0c09('0x5b')]['body'])||_0x4128b7[_0x0c09('0x5b')][_0x0c09('0x5b')]===''){throw new db[(_0x0c09('0x77'))][(_0x0c09('0x6f'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0x0c09('0x76')](_0x4128b7[_0x0c09('0x5b')]['to'])){}_0x5f5a98=_0x4128b7[_0x0c09('0x5b')]['to'];return db['OpenchannelAccount'][_0x0c09('0x64')]({'where':{'id':_0x4128b7[_0x0c09('0x57')]['id']}})[_0x0c09('0x1e')](handleEntityNotFound(_0x116205,null))[_0x0c09('0x1e')](function(_0x1511af){if(_0x1511af){return db['OpenchannelAccount']['find']({'where':{'id':_0x1511af['id']},'include':[{'model':db[_0x0c09('0x7c')],'as':_0x0c09('0x81'),'include':[{'model':db[_0x0c09('0x6e')],'as':'Contacts','where':{[_0x1511af['mapKey']]:_0x5f5a98},'limit':0x1,'order':[['updatedAt',_0x0c09('0x7d')]]}]}]})['then'](handleEntityNotFound(_0x116205,null))[_0x0c09('0x1e')](function(_0x4fa662){if(_0x4fa662&&_0x4fa662['List']){_0x44ea65=_0x4fa662[_0x0c09('0x33')]({'plain':!![]});if(_0x44ea65[_0x0c09('0x81')]&&_0x44ea65[_0x0c09('0x81')][_0x0c09('0x87')][_0x0c09('0x58')]){return _0x44ea65[_0x0c09('0x81')]['Contacts'][0x0];}return db[_0x0c09('0x6e')][_0x0c09('0x5a')](_['defaults'](_0x4128b7[_0x0c09('0x5b')],{'firstName':_0x5f5a98,[_0x4fa662[_0x0c09('0x79')]]:_0x5f5a98,'phone':_0x5f5a98,'ListId':_0x44ea65[_0x0c09('0x88')]}));}})[_0x0c09('0x1e')](handleEntityNotFound(_0x116205,null))[_0x0c09('0x1e')](function(_0x9b6a90){if(_0x9b6a90){_0x46a6c3=_0x9b6a90;return db[_0x0c09('0x8c')][_0x0c09('0x59')]({'where':{'ContactId':_0x46a6c3['id'],'closed':![],'OpenchannelAccountId':_0x44ea65['id']}})[_0x0c09('0x1e')](function(_0x427f21){if(_0x427f21){return[_0x427f21,![]];}return db[_0x0c09('0x8c')]['create']({'UserId':_0x4128b7[_0x0c09('0x5c')]['id'],'ContactId':_0x46a6c3['id'],'OpenchannelAccountId':_0x44ea65['id'],'lastMsgDirection':_0x0c09('0xb5'),'Messages':[_[_0x0c09('0x4d')](_0x4128b7['body'],{'read':![],'body':_0x4128b7[_0x0c09('0x5b')][_0x0c09('0x5b')],'OpenchannelAccountId':_0x44ea65['id'],'UserId':_0x4128b7[_0x0c09('0x5c')]['id'],'ContactId':_0x46a6c3['id']})]},{'include':[{'model':db[_0x0c09('0x97')],'as':'Messages'}]})[_0x0c09('0x1e')](function(_0x25fa69){return[_0x25fa69,!![]];});});}})[_0x0c09('0xb6')](function(_0x226c35,_0x5d1ac2){if(_0x5d1ac2){return _0x226c35;}return db[_0x0c09('0x97')]['create'](_[_0x0c09('0x4d')](_0x4128b7[_0x0c09('0x5b')],{'read':![],'body':_0x4128b7[_0x0c09('0x5b')][_0x0c09('0x5b')],'OpenchannelAccountId':_0x44ea65['id'],'OpenchannelInteractionId':_0x226c35['id'],'UserId':_0x4128b7['user']['id'],'ContactId':_0x46a6c3['id']}))[_0x0c09('0x1e')](function(_0x47f7be){_0x226c35[_0x0c09('0xb7')]['Messages']=[];_0x226c35[_0x0c09('0xb7')][_0x0c09('0xb8')][_0x0c09('0x94')](_0x47f7be[_0x0c09('0xb7')]);return _0x226c35;});});}})['then'](respondWithResult(_0x116205,null))[_0x0c09('0x27')](handleError(_0x116205,null));};
\ No newline at end of file
+var _0xb458=['OpenchannelApplication','List','account','applications','Applications','list','orderBy','priority','asc','Contacts','ListId','from','contact','firstName','lastName','threadId','externalUrl','OpenchannelInteraction','ContactId','spread','messageId','interaction','created','autoclose','push','close','unmanaged','*,*,*,*','OpenchannelMessage','UserId','User','unshift','agent','waitForTheAssignedAgent','forcedOwnership','Start','startRouting','EventManager','addApplications','sequelize','transaction','bulkCreate','findAndCountAll','getApplications','Contact','Owner','fullname','internal','Tag','Tags','color','tag','addAgents','omit','userOpenchannelAccount:save','removeAgents','isArray','emit','userOpenchannelAccount:remove','getAgents','out','Messages','dataValues','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','path','ejs','lodash','squel','crypto','jsforce','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','redis','defaults','socket.io-emitter','./openchannelAccount.socket','register','jayson/promise','client','http','request','then','info','OpenchannelAccount,\x20%s,\x20%s','request\x20sent','debug','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','destroy','get','OpenchannelAccounts','UserProfileResource','stack','name','send','index','Pause','mandatoryDispositionPause','OpenchannelAccount','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','catch','show','params','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','Disposition','getDispositions','findOne','sort','OpenchannelAccountId','removeDispositions','ids','addAnswer','CannedAnswer','getAnswers','removeAnswers','notify','Sequelize','ValidationError','no\x20available\x20attributes','createdAt','updatedAt','difference','CompanyId','isNil','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','CmContact','DESC'];(function(_0x3e4378,_0x5b8cb3){var _0x51feb0=function(_0x2935d3){while(--_0x2935d3){_0x3e4378['push'](_0x3e4378['shift']());}};_0x51feb0(++_0x5b8cb3);}(_0xb458,0x103));var _0x8b45=function(_0x3cc90b,_0x1b69d9){_0x3cc90b=_0x3cc90b-0x0;var _0x34051b=_0xb458[_0x3cc90b];return _0x34051b;};'use strict';var pdf=require(_0x8b45('0x0'));var emlformat=require(_0x8b45('0x1'));var rimraf=require(_0x8b45('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x8b45('0x3'));var moment=require(_0x8b45('0x4'));var BPromise=require(_0x8b45('0x5'));var Mustache=require(_0x8b45('0x6'));var util=require('util');var path=require(_0x8b45('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x8b45('0x8'));var fs=require('fs');var _=require(_0x8b45('0x9'));var squel=require(_0x8b45('0xa'));var crypto=require(_0x8b45('0xb'));var jsforce=require(_0x8b45('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x8b45('0xd'));var querystring=require(_0x8b45('0xe'));var Papa=require(_0x8b45('0xf'));var authService=require(_0x8b45('0x10'));var hardwareService=require(_0x8b45('0x11'));var Redis=require('ioredis');var qs=require(_0x8b45('0x12'));var logger=require(_0x8b45('0x13'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x8b45('0x14')]=_[_0x8b45('0x15')](config[_0x8b45('0x14')],{'host':'localhost','port':0x18eb});var socket=require(_0x8b45('0x16'))(new Redis(config[_0x8b45('0x14')]));require(_0x8b45('0x17'))[_0x8b45('0x18')](socket);var jayson=require(_0x8b45('0x19'));var client=jayson[_0x8b45('0x1a')]['http']({'port':0x232c});var client9002=jayson['client'][_0x8b45('0x1b')]({'port':0x232a});function respondWithRpcPromise(_0x23f1dd,_0x445170,_0x39c1d1,_0x4781d7){return new BPromise(function(_0x27ebb3,_0x902c50){var _0x147d6b=_0x4781d7||client;return _0x147d6b[_0x8b45('0x1c')](_0x23f1dd,_0x39c1d1)[_0x8b45('0x1d')](function(_0x287a3b){logger[_0x8b45('0x1e')](_0x8b45('0x1f'),_0x445170,_0x8b45('0x20'));logger[_0x8b45('0x21')](_0x8b45('0x22'),_0x445170,_0x8b45('0x20'),JSON[_0x8b45('0x23')](_0x287a3b));if(_0x287a3b['error']){if(_0x287a3b[_0x8b45('0x24')][_0x8b45('0x25')]===0x1f4){logger[_0x8b45('0x24')](_0x8b45('0x1f'),_0x445170,_0x287a3b[_0x8b45('0x24')][_0x8b45('0x26')]);return _0x902c50(_0x287a3b[_0x8b45('0x24')][_0x8b45('0x26')]);}logger['error']('OpenchannelAccount,\x20%s,\x20%s',_0x445170,_0x287a3b[_0x8b45('0x24')]['message']);return _0x27ebb3(_0x287a3b[_0x8b45('0x24')][_0x8b45('0x26')]);}else{logger[_0x8b45('0x1e')](_0x8b45('0x1f'),_0x445170,_0x8b45('0x20'));_0x27ebb3(_0x287a3b[_0x8b45('0x27')][_0x8b45('0x26')]);}})['catch'](function(_0x59d36b){logger[_0x8b45('0x24')](_0x8b45('0x1f'),_0x445170,_0x59d36b);_0x902c50(_0x59d36b);});});}function respondWithStatusCode(_0x500044,_0x5723a2){_0x5723a2=_0x5723a2||0xcc;return function(_0x129c35){if(_0x129c35){return _0x500044[_0x8b45('0x28')](_0x5723a2);}return _0x500044[_0x8b45('0x29')](_0x5723a2)[_0x8b45('0x2a')]();};}function respondWithResult(_0x4e84cc,_0x3df287){_0x3df287=_0x3df287||0xc8;return function(_0x24be07){if(_0x24be07){return _0x4e84cc[_0x8b45('0x29')](_0x3df287)[_0x8b45('0x2b')](_0x24be07);}};}function respondWithFilteredResult(_0x395dc3,_0xf334b2){return function(_0x461017){if(_0x461017){var _0x234f62=_0x461017[_0x8b45('0x2c')],_0x1733a7=_0xf334b2[_0x8b45('0x2d')],_0xf21bd1=_0xf334b2['offset']+_0xf334b2[_0x8b45('0x2e')],_0x339c73;if(_0xf21bd1>=_0x234f62){_0xf21bd1=_0x234f62;_0x339c73=0xc8;}else{_0x339c73=0xce;}_0x395dc3[_0x8b45('0x29')](_0x339c73);return _0x395dc3[_0x8b45('0x2f')](_0x8b45('0x30'),_0x1733a7+'-'+_0xf21bd1+'/'+_0x234f62)[_0x8b45('0x2b')](_0x461017);}return null;};}function patchUpdates(_0x638f26){return function(_0x1a8974){try{jsonpatch[_0x8b45('0x31')](_0x1a8974,_0x638f26,!![]);}catch(_0x5d8938){return BPromise[_0x8b45('0x32')](_0x5d8938);}return _0x1a8974[_0x8b45('0x33')]();};}function saveUpdates(_0x50302,_0xc2ae94){return function(_0x12b66d){if(_0x12b66d){return _0x12b66d['update'](_0x50302)[_0x8b45('0x1d')](function(_0x59f257){return _0x59f257;});}return null;};}function removeEntity(_0x5a07de,_0x1f8a11){return function(_0x94e3b6){if(_0x94e3b6){return _0x94e3b6[_0x8b45('0x34')]()[_0x8b45('0x1d')](function(){var _0x1e72d2=_0x94e3b6[_0x8b45('0x35')]({'plain':!![]});var _0x522628=_0x8b45('0x36');return db[_0x8b45('0x37')][_0x8b45('0x34')]({'where':{'type':_0x522628,'resourceId':_0x1e72d2['id']}})[_0x8b45('0x1d')](function(){return _0x94e3b6;});})['then'](function(){_0x5a07de[_0x8b45('0x29')](0xcc)[_0x8b45('0x2a')]();});}};}function handleEntityNotFound(_0x191db0,_0x55b76b){return function(_0x29c606){if(!_0x29c606){_0x191db0[_0x8b45('0x28')](0x194);}return _0x29c606;};}function handleError(_0x1571b7,_0x58f32e){_0x58f32e=_0x58f32e||0x1f4;return function(_0x1adc4e){logger[_0x8b45('0x24')](_0x1adc4e[_0x8b45('0x38')]);if(_0x1adc4e[_0x8b45('0x39')]){delete _0x1adc4e['name'];}_0x1571b7[_0x8b45('0x29')](_0x58f32e)[_0x8b45('0x3a')](_0x1adc4e);};}exports[_0x8b45('0x3b')]=function(_0x15df7c,_0x1c58a6){var _0x9acf8={'include':[{'model':db[_0x8b45('0x3c')],'as':_0x8b45('0x3d')}]},_0x56d959={},_0x5b7a7b={'count':0x0,'rows':[]};var _0x41d6b5=db[_0x8b45('0x3e')][_0x8b45('0x3f')];_0x56d959['model']=_[_0x8b45('0x40')](_0x41d6b5);_0x56d959['query']=_[_0x8b45('0x40')](_0x15df7c[_0x8b45('0x41')]);_0x56d959[_0x8b45('0x42')]=_[_0x8b45('0x43')](_0x56d959[_0x8b45('0x44')],_0x56d959[_0x8b45('0x41')]);_0x9acf8[_0x8b45('0x45')]=_[_0x8b45('0x43')](_0x56d959[_0x8b45('0x44')],qs[_0x8b45('0x46')](_0x15df7c[_0x8b45('0x41')]['fields']));_0x9acf8[_0x8b45('0x45')]=_0x9acf8['attributes'][_0x8b45('0x47')]?_0x9acf8['attributes']:_0x56d959[_0x8b45('0x44')];if(!_0x15df7c[_0x8b45('0x41')][_0x8b45('0x48')](_0x8b45('0x49'))){_0x9acf8[_0x8b45('0x2e')]=qs[_0x8b45('0x2e')](_0x15df7c['query'][_0x8b45('0x2e')]);_0x9acf8['offset']=qs['offset'](_0x15df7c[_0x8b45('0x41')][_0x8b45('0x2d')]);}_0x9acf8[_0x8b45('0x4a')]=qs['sort'](_0x15df7c[_0x8b45('0x41')]['sort']);_0x9acf8[_0x8b45('0x4b')]=qs[_0x8b45('0x42')](_[_0x8b45('0x4c')](_0x15df7c[_0x8b45('0x41')],_0x56d959[_0x8b45('0x42')]));if(_0x15df7c[_0x8b45('0x41')]['filter']){_0x9acf8[_0x8b45('0x4b')]=_[_0x8b45('0x4d')](_0x9acf8[_0x8b45('0x4b')],{'$or':_[_0x8b45('0x4e')](_0x41d6b5,function(_0x1a13dd){if(_0x1a13dd[_0x8b45('0x4f')][_0x8b45('0x50')]!==_0x8b45('0x51')){var _0x37b94a={};_0x37b94a[_0x1a13dd[_0x8b45('0x52')]]={'$like':'%'+_0x15df7c[_0x8b45('0x41')][_0x8b45('0x53')]+'%'};return _0x37b94a;}})});}_0x9acf8=_[_0x8b45('0x4d')]({},_0x9acf8,_0x15df7c[_0x8b45('0x54')]);var _0x399ac1={'where':_0x9acf8[_0x8b45('0x4b')]};return db['OpenchannelAccount']['count'](_0x399ac1)['then'](function(_0x308b0d){_0x5b7a7b[_0x8b45('0x2c')]=_0x308b0d;if(_0x15df7c[_0x8b45('0x41')][_0x8b45('0x55')]){_0x9acf8[_0x8b45('0x56')]=[{'all':!![]}];}return db[_0x8b45('0x3e')][_0x8b45('0x57')](_0x9acf8);})[_0x8b45('0x1d')](function(_0x5e2a03){_0x5b7a7b[_0x8b45('0x58')]=_0x5e2a03;return _0x5b7a7b;})['then'](respondWithFilteredResult(_0x1c58a6,_0x9acf8))[_0x8b45('0x59')](handleError(_0x1c58a6,null));};exports[_0x8b45('0x5a')]=function(_0x2eb5c9,_0x152740){var _0x51c87d={'raw':![],'where':{'id':_0x2eb5c9[_0x8b45('0x5b')]['id']},'include':[{'model':db['Pause'],'as':_0x8b45('0x3d')}]},_0xc49b81={};_0xc49b81[_0x8b45('0x44')]=_['keys'](db[_0x8b45('0x3e')][_0x8b45('0x3f')]);_0xc49b81[_0x8b45('0x41')]=_[_0x8b45('0x40')](_0x2eb5c9[_0x8b45('0x41')]);_0xc49b81[_0x8b45('0x42')]=_['intersection'](_0xc49b81['model'],_0xc49b81[_0x8b45('0x41')]);_0x51c87d[_0x8b45('0x45')]=_[_0x8b45('0x43')](_0xc49b81['model'],qs[_0x8b45('0x46')](_0x2eb5c9[_0x8b45('0x41')][_0x8b45('0x46')]));_0x51c87d[_0x8b45('0x45')]=_0x51c87d[_0x8b45('0x45')]['length']?_0x51c87d[_0x8b45('0x45')]:_0xc49b81[_0x8b45('0x44')];if(_0x2eb5c9['query'][_0x8b45('0x55')]){_0x51c87d['include']=[{'all':!![]}];}_0x51c87d=_[_0x8b45('0x4d')]({},_0x51c87d,_0x2eb5c9[_0x8b45('0x54')]);return db[_0x8b45('0x3e')][_0x8b45('0x5c')](_0x51c87d)['then'](handleEntityNotFound(_0x152740,null))[_0x8b45('0x1d')](respondWithResult(_0x152740,null))[_0x8b45('0x59')](handleError(_0x152740,null));};exports[_0x8b45('0x5d')]=function(_0x1d471e,_0x3e3df2){return db[_0x8b45('0x3e')][_0x8b45('0x5d')](_0x1d471e[_0x8b45('0x5e')],{})[_0x8b45('0x1d')](function(_0x5ba878){var _0x15ee1e=_0x1d471e[_0x8b45('0x5f')][_0x8b45('0x35')]({'plain':!![]});if(!_0x15ee1e)throw new Error(_0x8b45('0x60'));if(_0x15ee1e[_0x8b45('0x61')]==='user'){var _0x1744f8=_0x5ba878[_0x8b45('0x35')]({'plain':!![]});var _0x15c9ae='OpenchannelAccounts';return db[_0x8b45('0x62')][_0x8b45('0x5c')]({'where':{'name':_0x15c9ae,'userProfileId':_0x15ee1e[_0x8b45('0x63')]},'raw':!![]})[_0x8b45('0x1d')](function(_0x5795ca){if(_0x5795ca&&_0x5795ca[_0x8b45('0x64')]===0x0){return db[_0x8b45('0x37')][_0x8b45('0x5d')]({'name':_0x1744f8[_0x8b45('0x39')],'resourceId':_0x1744f8['id'],'type':_0x5795ca['name'],'sectionId':_0x5795ca['id']},{})[_0x8b45('0x1d')](function(){return _0x5ba878;});}else{return _0x5ba878;}})[_0x8b45('0x59')](function(_0x417778){logger[_0x8b45('0x24')](_0x8b45('0x65'),_0x417778);throw _0x417778;});}return _0x5ba878;})['then'](respondWithResult(_0x3e3df2,0xc9))[_0x8b45('0x59')](handleError(_0x3e3df2,null));};exports['update']=function(_0x153a08,_0x2f7ab0){if(_0x153a08[_0x8b45('0x5e')]['id']){delete _0x153a08[_0x8b45('0x5e')]['id'];}return db[_0x8b45('0x3e')][_0x8b45('0x5c')]({'where':{'id':_0x153a08['params']['id']},'include':[{'model':db['Pause'],'as':_0x8b45('0x3d')}]})[_0x8b45('0x1d')](handleEntityNotFound(_0x2f7ab0,null))['then'](saveUpdates(_0x153a08[_0x8b45('0x5e')],null))[_0x8b45('0x1d')](respondWithResult(_0x2f7ab0,null))[_0x8b45('0x59')](handleError(_0x2f7ab0,null));};exports['destroy']=function(_0x4da2dd,_0x11b405){return db[_0x8b45('0x3e')]['find']({'where':{'id':_0x4da2dd[_0x8b45('0x5b')]['id']}})['then'](handleEntityNotFound(_0x11b405,null))[_0x8b45('0x1d')](removeEntity(_0x11b405,null))['catch'](handleError(_0x11b405,null));};exports['describe']=function(_0x28e57a,_0x7f5a4e){return db['OpenchannelAccount'][_0x8b45('0x66')]()[_0x8b45('0x1d')](respondWithResult(_0x7f5a4e,null))[_0x8b45('0x59')](handleError(_0x7f5a4e,null));};exports[_0x8b45('0x67')]=function(_0x299b10,_0x54669b,_0x37f580){if(_0x299b10[_0x8b45('0x5e')]['id']){delete _0x299b10[_0x8b45('0x5e')]['id'];}return db['OpenchannelAccount']['find']({'where':{'id':_0x299b10[_0x8b45('0x5b')]['id']}})['then'](handleEntityNotFound(_0x54669b,null))[_0x8b45('0x1d')](function(_0x5a4834){if(_0x5a4834){_0x299b10['body']['OpnechannelAccountId']=_0x5a4834['id'];return db[_0x8b45('0x68')]['create'](_0x299b10[_0x8b45('0x5e')]);}})[_0x8b45('0x1d')](respondWithResult(_0x54669b,null))['catch'](handleError(_0x54669b,null));};exports[_0x8b45('0x69')]=function(_0x1b3890,_0x5f3477,_0x4352f9){var _0x46b686={'raw':![],'where':{}};var _0x4367bb={};var _0x1acfd7={'count':0x0,'rows':[]};return db[_0x8b45('0x3e')][_0x8b45('0x6a')]({'where':{'id':_0x1b3890[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x5f3477,null))[_0x8b45('0x1d')](function(_0x103d80){if(_0x103d80){_0x4367bb[_0x8b45('0x44')]=_[_0x8b45('0x40')](db['Disposition'][_0x8b45('0x3f')]);_0x4367bb[_0x8b45('0x41')]=_[_0x8b45('0x40')](_0x1b3890[_0x8b45('0x41')]);_0x4367bb[_0x8b45('0x42')]=_[_0x8b45('0x43')](_0x4367bb[_0x8b45('0x44')],_0x4367bb[_0x8b45('0x41')]);_0x46b686[_0x8b45('0x45')]=_[_0x8b45('0x43')](_0x4367bb[_0x8b45('0x44')],qs[_0x8b45('0x46')](_0x1b3890[_0x8b45('0x41')][_0x8b45('0x46')]));_0x46b686[_0x8b45('0x45')]=_0x46b686['attributes'][_0x8b45('0x47')]?_0x46b686[_0x8b45('0x45')]:_0x4367bb[_0x8b45('0x44')];if(!_0x1b3890[_0x8b45('0x41')][_0x8b45('0x48')](_0x8b45('0x49'))){_0x46b686[_0x8b45('0x2e')]=qs[_0x8b45('0x2e')](_0x1b3890['query'][_0x8b45('0x2e')]);_0x46b686[_0x8b45('0x2d')]=qs[_0x8b45('0x2d')](_0x1b3890[_0x8b45('0x41')][_0x8b45('0x2d')]);}_0x46b686[_0x8b45('0x4a')]=qs[_0x8b45('0x6b')](_0x1b3890[_0x8b45('0x41')][_0x8b45('0x6b')]);_0x46b686[_0x8b45('0x4b')]=qs[_0x8b45('0x42')](_['pick'](_0x1b3890['query'],_0x4367bb[_0x8b45('0x42')]));_0x46b686[_0x8b45('0x4b')][_0x8b45('0x6c')]=_0x103d80['id'];if(_0x1b3890[_0x8b45('0x41')][_0x8b45('0x53')]){_0x46b686[_0x8b45('0x4b')]=_[_0x8b45('0x4d')](_0x46b686[_0x8b45('0x4b')],{'$or':_[_0x8b45('0x4e')](_0x46b686['attributes'],function(_0x55acf0){var _0x135e1f={};_0x135e1f[_0x55acf0]={'$like':'%'+_0x1b3890[_0x8b45('0x41')][_0x8b45('0x53')]+'%'};return _0x135e1f;})});}_0x46b686=_[_0x8b45('0x4d')]({},_0x46b686,_0x1b3890['options']);return db[_0x8b45('0x68')][_0x8b45('0x2c')]({'where':_0x46b686[_0x8b45('0x4b')]})[_0x8b45('0x1d')](function(_0x1761d1){_0x1acfd7[_0x8b45('0x2c')]=_0x1761d1;if(_0x1b3890['query']['includeAll']){_0x46b686[_0x8b45('0x56')]=[{'all':!![]}];}return db['Disposition']['findAll'](_0x46b686);})['then'](function(_0xf602c7){_0x1acfd7[_0x8b45('0x58')]=_0xf602c7;return _0x1acfd7;});}})[_0x8b45('0x1d')](respondWithFilteredResult(_0x5f3477,_0x46b686))[_0x8b45('0x59')](handleError(_0x5f3477,null));};exports[_0x8b45('0x6d')]=function(_0x37ef4c,_0x274902,_0xc9be77){var _0xc89fc6;return db[_0x8b45('0x3e')][_0x8b45('0x5c')]({'where':{'id':_0x37ef4c[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x274902,null))[_0x8b45('0x1d')](function(_0x42b192){if(_0x42b192){return _0x42b192['removeDispositions'](_0x37ef4c[_0x8b45('0x41')][_0x8b45('0x6e')]);}})[_0x8b45('0x1d')](respondWithStatusCode(_0x274902,null))[_0x8b45('0x59')](handleError(_0x274902,null));};exports[_0x8b45('0x6f')]=function(_0x1446b1,_0x10f430,_0x251584){if(_0x1446b1[_0x8b45('0x5e')]['id']){delete _0x1446b1[_0x8b45('0x5e')]['id'];}return db['OpenchannelAccount'][_0x8b45('0x5c')]({'where':{'id':_0x1446b1[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x10f430,null))[_0x8b45('0x1d')](function(_0x4922e6){if(_0x4922e6){_0x1446b1[_0x8b45('0x5e')]['OpenchannelAccountId']=_0x4922e6['id'];return db[_0x8b45('0x70')]['create'](_0x1446b1[_0x8b45('0x5e')]);}})[_0x8b45('0x1d')](respondWithResult(_0x10f430,null))[_0x8b45('0x59')](handleError(_0x10f430,null));};exports[_0x8b45('0x71')]=function(_0x16bb83,_0x45beb9,_0x51d6c4){var _0x3e0054={'raw':![],'where':{}};var _0x2baa16={};var _0x17364d={'count':0x0,'rows':[]};return db[_0x8b45('0x3e')]['findOne']({'where':{'id':_0x16bb83[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x45beb9,null))['then'](function(_0x5c3dbd){if(_0x5c3dbd){_0x2baa16[_0x8b45('0x44')]=_[_0x8b45('0x40')](db[_0x8b45('0x70')]['rawAttributes']);_0x2baa16[_0x8b45('0x41')]=_['keys'](_0x16bb83[_0x8b45('0x41')]);_0x2baa16[_0x8b45('0x42')]=_['intersection'](_0x2baa16['model'],_0x2baa16[_0x8b45('0x41')]);_0x3e0054[_0x8b45('0x45')]=_[_0x8b45('0x43')](_0x2baa16[_0x8b45('0x44')],qs['fields'](_0x16bb83[_0x8b45('0x41')][_0x8b45('0x46')]));_0x3e0054[_0x8b45('0x45')]=_0x3e0054[_0x8b45('0x45')][_0x8b45('0x47')]?_0x3e0054[_0x8b45('0x45')]:_0x2baa16['model'];if(!_0x16bb83[_0x8b45('0x41')][_0x8b45('0x48')]('nolimit')){_0x3e0054[_0x8b45('0x2e')]=qs[_0x8b45('0x2e')](_0x16bb83['query']['limit']);_0x3e0054['offset']=qs[_0x8b45('0x2d')](_0x16bb83[_0x8b45('0x41')][_0x8b45('0x2d')]);}_0x3e0054[_0x8b45('0x4a')]=qs[_0x8b45('0x6b')](_0x16bb83[_0x8b45('0x41')][_0x8b45('0x6b')]);_0x3e0054['where']=qs[_0x8b45('0x42')](_[_0x8b45('0x4c')](_0x16bb83[_0x8b45('0x41')],_0x2baa16[_0x8b45('0x42')]));_0x3e0054[_0x8b45('0x4b')][_0x8b45('0x6c')]=_0x5c3dbd['id'];if(_0x16bb83['query'][_0x8b45('0x53')]){_0x3e0054[_0x8b45('0x4b')]=_[_0x8b45('0x4d')](_0x3e0054[_0x8b45('0x4b')],{'$or':_[_0x8b45('0x4e')](_0x3e0054['attributes'],function(_0x5588b5){var _0x1da121={};_0x1da121[_0x5588b5]={'$like':'%'+_0x16bb83[_0x8b45('0x41')][_0x8b45('0x53')]+'%'};return _0x1da121;})});}_0x3e0054=_[_0x8b45('0x4d')]({},_0x3e0054,_0x16bb83[_0x8b45('0x54')]);return db['CannedAnswer'][_0x8b45('0x2c')]({'where':_0x3e0054['where']})[_0x8b45('0x1d')](function(_0x493130){_0x17364d[_0x8b45('0x2c')]=_0x493130;if(_0x16bb83[_0x8b45('0x41')][_0x8b45('0x55')]){_0x3e0054[_0x8b45('0x56')]=[{'all':!![]}];}return db[_0x8b45('0x70')][_0x8b45('0x57')](_0x3e0054);})[_0x8b45('0x1d')](function(_0x46f88){_0x17364d[_0x8b45('0x58')]=_0x46f88;return _0x17364d;});}})[_0x8b45('0x1d')](respondWithFilteredResult(_0x45beb9,_0x3e0054))[_0x8b45('0x59')](handleError(_0x45beb9,null));};exports[_0x8b45('0x72')]=function(_0x2eb241,_0x18b68a,_0x4b66ff){var _0x3db51c;return db[_0x8b45('0x3e')][_0x8b45('0x5c')]({'where':{'id':_0x2eb241['params']['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x18b68a,null))['then'](function(_0x155041){if(_0x155041){return _0x155041[_0x8b45('0x72')](_0x2eb241['query'][_0x8b45('0x6e')]);}})['then'](respondWithStatusCode(_0x18b68a,null))[_0x8b45('0x59')](handleError(_0x18b68a,null));};exports[_0x8b45('0x73')]=function(_0x4033f3,_0xd524b7,_0x2af68a){var _0x3f920f={'body':_0x4033f3['body'],'channel':'openchannel'};var _0x3a339c=[];var _0x2bbc85=[];var _0x5b2538={};var _0x4c7051=![];return db['CmContact'][_0x8b45('0x66')]()['then'](function(_0x189c55){if(!_0x189c55){throw new db[(_0x8b45('0x74'))][(_0x8b45('0x75'))](_0x8b45('0x76'));}_0x3a339c=_['difference'](_[_0x8b45('0x40')](_0x189c55),[_0x8b45('0x77'),_0x8b45('0x78')]);_0x2bbc85=_[_0x8b45('0x79')](_[_0x8b45('0x40')](_0x189c55),[_0x8b45('0x77'),_0x8b45('0x78'),_0x8b45('0x7a'),'ListId']);if(_0x4033f3[_0x8b45('0x5e')]['id']){delete _0x4033f3['body']['id'];}if(_[_0x8b45('0x7b')](_0x4033f3['body']['from'])){throw new db['Sequelize'][(_0x8b45('0x75'))](_0x8b45('0x7c'));}if(_['isNil'](_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x5e')])||_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x5e')]===''){throw new db[(_0x8b45('0x74'))][(_0x8b45('0x75'))](_0x8b45('0x7d'));}if(_[_0x8b45('0x7b')](_0x4033f3[_0x8b45('0x5e')]['mapKey'])){throw new db[(_0x8b45('0x74'))][(_0x8b45('0x75'))](_0x8b45('0x7e')+_0x2bbc85);}if(!_[_0x8b45('0x7f')](_0x2bbc85,_0x4033f3['body'][_0x8b45('0x80')])){throw new db[(_0x8b45('0x74'))][(_0x8b45('0x75'))](_0x8b45('0x81')+_0x2bbc85);}_0x5b2538[_0x4033f3[_0x8b45('0x5e')]['mapKey']]=_0x4033f3[_0x8b45('0x5e')]['from'];})[_0x8b45('0x1d')](function(){return db[_0x8b45('0x3e')]['find']({'where':{'id':_0x4033f3['params']['id']},'include':[{'model':db[_0x8b45('0x82')],'as':'List','include':[{'model':db[_0x8b45('0x83')],'as':'Contacts','where':_0x5b2538,'limit':0x1,'order':[[_0x8b45('0x78'),_0x8b45('0x84')]]}]},{'model':db[_0x8b45('0x85')],'as':'Applications'}]});})[_0x8b45('0x1d')](handleEntityNotFound(_0xd524b7,null))['then'](function(_0x425a72){if(_0x425a72&&_0x425a72[_0x8b45('0x86')]){_0x3f920f[_0x8b45('0x87')]=_0x425a72;_0x3f920f[_0x8b45('0x88')]=_0x425a72[_0x8b45('0x89')];_0x3f920f[_0x8b45('0x8a')]=_0x425a72[_0x8b45('0x86')];_0x3f920f[_0x8b45('0x88')]=_[_0x8b45('0x8b')](_0x3f920f[_0x8b45('0x88')],[_0x8b45('0x8c')],[_0x8b45('0x8d')]);if(_0x3f920f[_0x8b45('0x87')][_0x8b45('0x89')]){delete _0x3f920f[_0x8b45('0x87')]['Applications'];}if(_0x3f920f[_0x8b45('0x87')][_0x8b45('0x86')]&&_0x3f920f['account']['List'][_0x8b45('0x8e')][_0x8b45('0x47')]){return _0x3f920f[_0x8b45('0x87')][_0x8b45('0x86')][_0x8b45('0x8e')][0x0];}var _0x3b2bb6=_[_0x8b45('0x15')](_0x4033f3[_0x8b45('0x5e')],{'firstName':_0x4033f3[_0x8b45('0x5e')]['from'],'ListId':_0x425a72[_0x8b45('0x8f')]});_0x3b2bb6[_0x4033f3[_0x8b45('0x5e')]['mapKey']]=_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x90')];return db[_0x8b45('0x83')][_0x8b45('0x5d')](_0x3b2bb6,{'fields':_0x3a339c,'raw':!![]});}})[_0x8b45('0x1d')](handleEntityNotFound(_0xd524b7,null))[_0x8b45('0x1d')](function(_0x39def){_0x3f920f[_0x8b45('0x91')]=_0x39def;if(_0x39def){var _0x1313c1={'ContactId':_0x39def['id'],'OpenchannelAccountId':_0x4033f3[_0x8b45('0x5b')]['id'],'from':(_0x39def[_0x8b45('0x92')]||'')+'\x20'+(_0x39def[_0x8b45('0x93')]||'')};var _0x121cfa={'OpenchannelAccountId':_0x4033f3['params']['id'],'closed':![]};if(_0x4033f3[_0x8b45('0x5e')]['threadId']){_0x121cfa[_0x8b45('0x94')]=_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x94')];return db['OpenchannelInteraction'][_0x8b45('0x5c')]({'where':_0x121cfa})[_0x8b45('0x1d')](function(_0x33d197){if(_0x33d197){return[_0x33d197,![]];}_0x1313c1[_0x8b45('0x94')]=_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x94')];_0x1313c1['externalUrl']=_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x95')];return db[_0x8b45('0x96')][_0x8b45('0x5d')](_0x1313c1)['then'](function(_0x3db5dc){return[_0x3db5dc,!![]];});});}else{_0x121cfa[_0x8b45('0x94')]=null;}_0x121cfa[_0x8b45('0x97')]=_0x39def['id'];return db[_0x8b45('0x96')]['find']({'where':_0x121cfa})[_0x8b45('0x1d')](function(_0x2a673b){if(_0x2a673b){return[_0x2a673b,![]];}return db[_0x8b45('0x96')]['create'](_0x1313c1)[_0x8b45('0x1d')](function(_0x1411e0){return[_0x1411e0,!![]];});});}})[_0x8b45('0x98')](function(_0x1d3a00,_0x2783b2){if(_0x1d3a00){_0x4c7051=_0x2783b2;if(!_0x2783b2){var _0x82ec51={'from':(_0x3f920f['contact'][_0x8b45('0x92')]||'')+'\x20'+(_0x3f920f[_0x8b45('0x91')]['lastName']||'')};if(_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x94')]&&_0x4033f3['body'][_0x8b45('0x99')]&&_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x94')]!=_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x99')]){_0x82ec51[_0x8b45('0x94')]=_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x99')];}return _0x1d3a00['update'](_0x82ec51);}else{return _0x1d3a00;}}})[_0x8b45('0x1d')](function(_0x526b8b){_0x3f920f[_0x8b45('0x9a')]=_0x526b8b[_0x8b45('0x35')]({'plain':!![]});_0x3f920f[_0x8b45('0x9a')]['created']=_0x4c7051;if(_0x3f920f[_0x8b45('0x9a')][_0x8b45('0x9b')]){if(_0x3f920f['account'][_0x8b45('0x9c')]){_0x3f920f[_0x8b45('0x88')][_0x8b45('0x9d')]({'id':0x0,'priority':_0x3f920f[_0x8b45('0x88')][_0x8b45('0x47')]+0x1,'app':_0x8b45('0x9e'),'appdata':_0x8b45('0x9f'),'interval':_0x8b45('0xa0')});}}return db[_0x8b45('0xa1')]['create']({'body':_0x4033f3[_0x8b45('0x5e')][_0x8b45('0x5e')],'OpenchannelAccountId':_0x4033f3[_0x8b45('0x5b')]['id'],'OpenchannelInteractionId':_0x526b8b['id'],'direction':'in','ContactId':_0x3f920f['contact']['id'],'AttachmentId':_0x4033f3[_0x8b45('0x5e')]['AttachmentId']});})[_0x8b45('0x1d')](function(_0x5ba957){_0x3f920f['message']=_0x5ba957;if(_0x3f920f[_0x8b45('0x9a')][_0x8b45('0xa2')]){return db[_0x8b45('0xa3')]['find']({'attributes':['id',_0x8b45('0x39')],'where':{'id':_0x3f920f[_0x8b45('0x9a')][_0x8b45('0xa2')]}})[_0x8b45('0x1d')](function(_0x256d7e){if(_0x256d7e){_0x3f920f[_0x8b45('0x88')][_0x8b45('0xa4')]({'id':0x0,'priority':0x0,'app':_0x8b45('0xa5'),'appdata':_0x256d7e['name']+','+(_0x3f920f[_0x8b45('0x87')][_0x8b45('0xa6')]||0xa),'interval':_0x8b45('0xa0')});_0x3f920f[_0x8b45('0xa7')]=![];}return respondWithRpcPromise(_0x8b45('0xa8'),_0x8b45('0xa9'),_0x3f920f);});}return respondWithRpcPromise('Start','startRouting',_0x3f920f);})[_0x8b45('0x1d')](function(_0x504e91){respondWithRpcPromise('EventManager',_0x8b45('0xaa'),{'event':_0x8b45('0x73'),'message':_0x504e91},client9002);return _0x504e91;})[_0x8b45('0x1d')](respondWithResult(_0xd524b7,null))[_0x8b45('0x59')](handleError(_0xd524b7,null));};exports[_0x8b45('0xab')]=function(_0x5660be,_0x4224fc,_0x1f1225){return db['OpenchannelAccount']['findOne']({'where':{'id':_0x5660be[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x4224fc,null))[_0x8b45('0x1d')](function(_0x42a3a5){if(_0x42a3a5){return db[_0x8b45('0xac')][_0x8b45('0xad')](function(_0x1ce69d){return db[_0x8b45('0x85')][_0x8b45('0x34')]({'where':{'OpenchannelAccountId':_0x5660be[_0x8b45('0x5b')]['id']},'transaction':_0x1ce69d})[_0x8b45('0x1d')](function(_0xe804a){var _0x584b98=_[_0x8b45('0x4e')](_0x5660be[_0x8b45('0x5e')],function(_0x181134){_0x181134['OpenchannelAccountId']=_0x5660be[_0x8b45('0x5b')]['id'];return _0x181134;});return db['OpenchannelApplication'][_0x8b45('0xae')](_0x584b98,{'transaction':_0x1ce69d});});})[_0x8b45('0x1d')](function(){return db[_0x8b45('0x85')][_0x8b45('0xaf')]({'where':{'OpenchannelAccountId':_0x5660be[_0x8b45('0x5b')]['id']},'order':_0x8b45('0x8c')});});}})[_0x8b45('0x1d')](respondWithResult(_0x4224fc,null))[_0x8b45('0x59')](handleError(_0x4224fc,null));};exports[_0x8b45('0xb0')]=function(_0x22eac9,_0x543f81,_0x40cb9d){var _0x3446b3={};var _0x5e8425={};var _0x252ef3;var _0x2a3676;return db[_0x8b45('0x3e')][_0x8b45('0x6a')]({'where':{'id':_0x22eac9[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x543f81,null))[_0x8b45('0x1d')](function(_0x593609){if(_0x593609){_0x252ef3=_0x593609;_0x5e8425[_0x8b45('0x44')]=_['keys'](db[_0x8b45('0x85')][_0x8b45('0x3f')]);_0x5e8425['query']=_[_0x8b45('0x40')](_0x22eac9[_0x8b45('0x41')]);_0x5e8425[_0x8b45('0x42')]=_[_0x8b45('0x43')](_0x5e8425[_0x8b45('0x44')],_0x5e8425['query']);_0x3446b3[_0x8b45('0x45')]=_['intersection'](_0x5e8425[_0x8b45('0x44')],qs[_0x8b45('0x46')](_0x22eac9['query']['fields']));_0x3446b3[_0x8b45('0x45')]=_0x3446b3['attributes'][_0x8b45('0x47')]?_0x3446b3[_0x8b45('0x45')]:_0x5e8425[_0x8b45('0x44')];_0x3446b3[_0x8b45('0x4a')]=qs[_0x8b45('0x6b')](_0x22eac9[_0x8b45('0x41')][_0x8b45('0x6b')]);_0x3446b3[_0x8b45('0x4b')]=qs[_0x8b45('0x42')](_[_0x8b45('0x4c')](_0x22eac9[_0x8b45('0x41')],_0x5e8425[_0x8b45('0x42')]));if(_0x22eac9[_0x8b45('0x41')][_0x8b45('0x53')]){_0x3446b3[_0x8b45('0x4b')]=_['merge'](_0x3446b3['where'],{'$or':_[_0x8b45('0x4e')](_0x3446b3[_0x8b45('0x45')],function(_0x5431fe){var _0x21fa3a={};_0x21fa3a[_0x5431fe]={'$like':'%'+_0x22eac9[_0x8b45('0x41')][_0x8b45('0x53')]+'%'};return _0x21fa3a;})});}_0x3446b3=_[_0x8b45('0x4d')]({},_0x3446b3,_0x22eac9[_0x8b45('0x54')]);return _0x252ef3[_0x8b45('0xb0')](_0x3446b3);}})['then'](function(_0x2c19a2){if(_0x2c19a2){_0x2a3676=_0x2c19a2['length'];if(!_0x22eac9['query'][_0x8b45('0x48')]('nolimit')){_0x3446b3[_0x8b45('0x2e')]=qs[_0x8b45('0x2e')](_0x22eac9[_0x8b45('0x41')][_0x8b45('0x2e')]);_0x3446b3[_0x8b45('0x2d')]=qs[_0x8b45('0x2d')](_0x22eac9[_0x8b45('0x41')][_0x8b45('0x2d')]);}return _0x252ef3[_0x8b45('0xb0')](_0x3446b3);}})[_0x8b45('0x1d')](function(_0xcb105e){if(_0xcb105e){return _0xcb105e?{'count':_0x2a3676,'rows':_0xcb105e}:null;}})[_0x8b45('0x1d')](respondWithResult(_0x543f81,null))[_0x8b45('0x59')](handleError(_0x543f81,null));};exports['getInteractions']=function(_0x2de88f,_0x26431f,_0x1a6f03){var _0x271c7b={'raw':![],'where':{}};var _0x709b7d={};var _0x4d7eb1={'count':0x0,'rows':[]};return db[_0x8b45('0x3e')][_0x8b45('0x6a')]({'where':{'id':_0x2de88f[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x26431f,null))[_0x8b45('0x1d')](function(_0x3b117e){if(_0x3b117e){_0x709b7d[_0x8b45('0x44')]=_[_0x8b45('0x40')](db[_0x8b45('0x96')][_0x8b45('0x3f')]);_0x709b7d[_0x8b45('0x41')]=_[_0x8b45('0x40')](_0x2de88f[_0x8b45('0x41')]);_0x709b7d[_0x8b45('0x42')]=_[_0x8b45('0x43')](_0x709b7d[_0x8b45('0x44')],_0x709b7d[_0x8b45('0x41')]);_0x271c7b[_0x8b45('0x45')]=_[_0x8b45('0x43')](_0x709b7d[_0x8b45('0x44')],qs[_0x8b45('0x46')](_0x2de88f['query'][_0x8b45('0x46')]));_0x271c7b[_0x8b45('0x45')]=_0x271c7b['attributes'][_0x8b45('0x47')]?_0x271c7b[_0x8b45('0x45')]:_0x709b7d[_0x8b45('0x44')];if(!_0x2de88f[_0x8b45('0x41')][_0x8b45('0x48')]('nolimit')){_0x271c7b[_0x8b45('0x2e')]=qs[_0x8b45('0x2e')](_0x2de88f[_0x8b45('0x41')][_0x8b45('0x2e')]);_0x271c7b[_0x8b45('0x2d')]=qs[_0x8b45('0x2d')](_0x2de88f['query']['offset']);}_0x271c7b[_0x8b45('0x4a')]=qs[_0x8b45('0x6b')](_0x2de88f[_0x8b45('0x41')]['sort']);_0x271c7b[_0x8b45('0x4b')]=qs[_0x8b45('0x42')](_['pick'](_0x2de88f[_0x8b45('0x41')],_0x709b7d['filters']));_0x271c7b[_0x8b45('0x4b')][_0x8b45('0x6c')]=_0x3b117e['id'];if(_0x2de88f[_0x8b45('0x41')][_0x8b45('0x53')]){_0x271c7b['where']=_[_0x8b45('0x4d')](_0x271c7b[_0x8b45('0x4b')],{'$or':_[_0x8b45('0x4e')](_0x271c7b[_0x8b45('0x45')],function(_0x5fa362){var _0xe8acbe={};_0xe8acbe[_0x5fa362]={'$like':'%'+_0x2de88f[_0x8b45('0x41')][_0x8b45('0x53')]+'%'};return _0xe8acbe;})});}_0x271c7b=_[_0x8b45('0x4d')]({},_0x271c7b,_0x2de88f['options']);return db[_0x8b45('0x96')]['count']({'where':_0x271c7b[_0x8b45('0x4b')]})[_0x8b45('0x1d')](function(_0x599350){_0x4d7eb1[_0x8b45('0x2c')]=_0x599350;if(_0x2de88f[_0x8b45('0x41')][_0x8b45('0x55')]){_0x271c7b[_0x8b45('0x56')]=[{'model':db[_0x8b45('0x83')],'as':_0x8b45('0xb1'),'required':![]},{'model':db[_0x8b45('0xa3')],'as':_0x8b45('0xb2'),'attributes':['name',_0x8b45('0xb3'),_0x8b45('0xb4')],'required':![]},{'model':db[_0x8b45('0xb5')],'as':_0x8b45('0xb6'),'attributes':['id',_0x8b45('0x39'),_0x8b45('0xb7')],'where':_0x2de88f['query'][_0x8b45('0xb8')]?{'id':_0x2de88f[_0x8b45('0x41')][_0x8b45('0xb8')]}:undefined,'required':_0x2de88f[_0x8b45('0x41')][_0x8b45('0xb8')]?!![]:![]}];}return db[_0x8b45('0x96')][_0x8b45('0x57')](_0x271c7b);})[_0x8b45('0x1d')](function(_0x3a0417){_0x4d7eb1[_0x8b45('0x58')]=_0x3a0417;return _0x4d7eb1;});}})[_0x8b45('0x1d')](respondWithFilteredResult(_0x26431f,_0x271c7b))['catch'](handleError(_0x26431f,null));};exports[_0x8b45('0xb9')]=function(_0xddecd0,_0x1a8389,_0x506cca){return db['OpenchannelAccount'][_0x8b45('0x5c')]({'where':{'id':_0xddecd0['params']['id']}})['then'](handleEntityNotFound(_0x1a8389,null))[_0x8b45('0x1d')](function(_0x43c29d){if(_0x43c29d){return _0x43c29d[_0x8b45('0xb9')](_0xddecd0[_0x8b45('0x5e')][_0x8b45('0x6e')],_[_0x8b45('0xba')](_0xddecd0[_0x8b45('0x5e')],[_0x8b45('0x6e'),'id'])||{})[_0x8b45('0x98')](function(_0x59e282){for(var _0x5eeacc=0x0;_0x5eeacc<_0xddecd0[_0x8b45('0x5e')][_0x8b45('0x6e')]['length'];_0x5eeacc+=0x1){socket['emit'](_0x8b45('0xbb'),{'UserId':_0xddecd0['body'][_0x8b45('0x6e')][_0x5eeacc],'OpenchannelAccountId':_0xddecd0[_0x8b45('0x5b')]['id']});}return _0x59e282;});}})[_0x8b45('0x1d')](respondWithResult(_0x1a8389,null))[_0x8b45('0x59')](handleError(_0x1a8389,null));};exports[_0x8b45('0xbc')]=function(_0x4032a5,_0x116cbb,_0x380400){var _0x358954;return db[_0x8b45('0x3e')][_0x8b45('0x5c')]({'where':{'id':_0x4032a5[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x116cbb,null))[_0x8b45('0x1d')](function(_0x4f1d30){if(_0x4f1d30){return _0x4f1d30[_0x8b45('0xbc')](_0x4032a5[_0x8b45('0x41')][_0x8b45('0x6e')])['then'](function(_0x5ae53d){if(_[_0x8b45('0xbd')](_0x4032a5[_0x8b45('0x41')][_0x8b45('0x6e')])){for(var _0x4e262a=0x0;_0x4e262a<_0x4032a5['query'][_0x8b45('0x6e')][_0x8b45('0x47')];_0x4e262a+=0x1){socket[_0x8b45('0xbe')](_0x8b45('0xbf'),{'UserId':_0x4032a5['query'][_0x8b45('0x6e')][_0x4e262a],'OpenchannelAccountId':_0x4032a5[_0x8b45('0x5b')]['id']});}}else{socket[_0x8b45('0xbe')](_0x8b45('0xbf'),{'UserId':_0x4032a5[_0x8b45('0x41')][_0x8b45('0x6e')],'OpenchannelAccountId':_0x4032a5[_0x8b45('0x5b')]['id']});}});}})[_0x8b45('0x1d')](respondWithStatusCode(_0x116cbb,null))[_0x8b45('0x59')](handleError(_0x116cbb,null));};exports[_0x8b45('0xc0')]=function(_0x527056,_0x4e8da8,_0x38e330){var _0x4cdd0e={};var _0x354d9d={};var _0x5adcd0;var _0x17e00a;return db[_0x8b45('0x3e')][_0x8b45('0x6a')]({'where':{'id':_0x527056['params']['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x4e8da8,null))[_0x8b45('0x1d')](function(_0x6760ef){if(_0x6760ef){_0x5adcd0=_0x6760ef;_0x354d9d[_0x8b45('0x44')]=_[_0x8b45('0x40')](db[_0x8b45('0xa3')][_0x8b45('0x3f')]);_0x354d9d[_0x8b45('0x41')]=_['keys'](_0x527056['query']);_0x354d9d[_0x8b45('0x42')]=_[_0x8b45('0x43')](_0x354d9d['model'],_0x354d9d[_0x8b45('0x41')]);_0x4cdd0e['attributes']=_[_0x8b45('0x43')](_0x354d9d[_0x8b45('0x44')],qs['fields'](_0x527056[_0x8b45('0x41')]['fields']));_0x4cdd0e['attributes']=_0x4cdd0e[_0x8b45('0x45')][_0x8b45('0x47')]?_0x4cdd0e[_0x8b45('0x45')]:_0x354d9d[_0x8b45('0x44')];_0x4cdd0e[_0x8b45('0x4a')]=qs['sort'](_0x527056[_0x8b45('0x41')][_0x8b45('0x6b')]);_0x4cdd0e['where']=qs[_0x8b45('0x42')](_[_0x8b45('0x4c')](_0x527056['query'],_0x354d9d['filters']));if(_0x527056[_0x8b45('0x41')][_0x8b45('0x53')]){_0x4cdd0e[_0x8b45('0x4b')]=_[_0x8b45('0x4d')](_0x4cdd0e['where'],{'$or':_[_0x8b45('0x4e')](_0x4cdd0e[_0x8b45('0x45')],function(_0x3fa2f4){var _0x2af329={};_0x2af329[_0x3fa2f4]={'$like':'%'+_0x527056[_0x8b45('0x41')][_0x8b45('0x53')]+'%'};return _0x2af329;})});}_0x4cdd0e=_[_0x8b45('0x4d')]({},_0x4cdd0e,_0x527056[_0x8b45('0x54')]);return _0x5adcd0[_0x8b45('0xc0')](_0x4cdd0e);}})[_0x8b45('0x1d')](function(_0x570a8c){if(_0x570a8c){_0x17e00a=_0x570a8c['length'];if(!_0x527056[_0x8b45('0x41')][_0x8b45('0x48')](_0x8b45('0x49'))){_0x4cdd0e[_0x8b45('0x2e')]=qs[_0x8b45('0x2e')](_0x527056[_0x8b45('0x41')]['limit']);_0x4cdd0e[_0x8b45('0x2d')]=qs[_0x8b45('0x2d')](_0x527056[_0x8b45('0x41')][_0x8b45('0x2d')]);}return _0x5adcd0[_0x8b45('0xc0')](_0x4cdd0e);}})[_0x8b45('0x1d')](function(_0x2611be){if(_0x2611be){return _0x2611be?{'count':_0x17e00a,'rows':_0x2611be}:null;}})[_0x8b45('0x1d')](respondWithResult(_0x4e8da8,null))[_0x8b45('0x59')](handleError(_0x4e8da8,null));};exports[_0x8b45('0x3a')]=function(_0xa97996,_0x2b7b52,_0x2ada90){var _0x2375f3,_0x35411a,_0x26e03d;if(_[_0x8b45('0x7b')](_0xa97996[_0x8b45('0x5e')][_0x8b45('0x5e')])||_0xa97996[_0x8b45('0x5e')][_0x8b45('0x5e')]===''){throw new db[(_0x8b45('0x74'))][(_0x8b45('0x75'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0x8b45('0x7b')](_0xa97996[_0x8b45('0x5e')]['to'])){}_0x2375f3=_0xa97996['body']['to'];return db[_0x8b45('0x3e')][_0x8b45('0x6a')]({'where':{'id':_0xa97996[_0x8b45('0x5b')]['id']}})[_0x8b45('0x1d')](handleEntityNotFound(_0x2b7b52,null))[_0x8b45('0x1d')](function(_0x399a70){if(_0x399a70){return db['OpenchannelAccount'][_0x8b45('0x5c')]({'where':{'id':_0x399a70['id']},'include':[{'model':db['CmList'],'as':_0x8b45('0x86'),'include':[{'model':db[_0x8b45('0x83')],'as':_0x8b45('0x8e'),'where':{[_0x399a70[_0x8b45('0x80')]]:_0x2375f3},'limit':0x1,'order':[['updatedAt',_0x8b45('0x84')]]}]}]})[_0x8b45('0x1d')](handleEntityNotFound(_0x2b7b52,null))[_0x8b45('0x1d')](function(_0x3c7e31){if(_0x3c7e31&&_0x3c7e31[_0x8b45('0x86')]){_0x35411a=_0x3c7e31['get']({'plain':!![]});if(_0x35411a[_0x8b45('0x86')]&&_0x35411a[_0x8b45('0x86')][_0x8b45('0x8e')]['length']){return _0x35411a[_0x8b45('0x86')][_0x8b45('0x8e')][0x0];}return db[_0x8b45('0x83')]['create'](_[_0x8b45('0x15')](_0xa97996[_0x8b45('0x5e')],{'firstName':_0x2375f3,[_0x3c7e31[_0x8b45('0x80')]]:_0x2375f3,'phone':_0x2375f3,'ListId':_0x35411a['ListId']}));}})[_0x8b45('0x1d')](handleEntityNotFound(_0x2b7b52,null))[_0x8b45('0x1d')](function(_0x54e723){if(_0x54e723){_0x26e03d=_0x54e723;return db[_0x8b45('0x96')][_0x8b45('0x5c')]({'where':{'ContactId':_0x26e03d['id'],'closed':![],'OpenchannelAccountId':_0x35411a['id']}})[_0x8b45('0x1d')](function(_0x1eeb71){if(_0x1eeb71){return[_0x1eeb71,![]];}return db[_0x8b45('0x96')]['create']({'UserId':_0xa97996['user']['id'],'ContactId':_0x26e03d['id'],'OpenchannelAccountId':_0x35411a['id'],'lastMsgDirection':_0x8b45('0xc1'),'Messages':[_['merge'](_0xa97996[_0x8b45('0x5e')],{'read':![],'body':_0xa97996['body'][_0x8b45('0x5e')],'OpenchannelAccountId':_0x35411a['id'],'UserId':_0xa97996[_0x8b45('0x5f')]['id'],'ContactId':_0x26e03d['id']})]},{'include':[{'model':db['OpenchannelMessage'],'as':_0x8b45('0xc2')}]})[_0x8b45('0x1d')](function(_0x4ab63b){return[_0x4ab63b,!![]];});});}})[_0x8b45('0x98')](function(_0x187485,_0x58117e){if(_0x58117e){return _0x187485;}return db[_0x8b45('0xa1')][_0x8b45('0x5d')](_[_0x8b45('0x4d')](_0xa97996[_0x8b45('0x5e')],{'read':![],'body':_0xa97996['body'][_0x8b45('0x5e')],'OpenchannelAccountId':_0x35411a['id'],'OpenchannelInteractionId':_0x187485['id'],'UserId':_0xa97996[_0x8b45('0x5f')]['id'],'ContactId':_0x26e03d['id']}))[_0x8b45('0x1d')](function(_0x32d3bf){_0x187485[_0x8b45('0xc3')][_0x8b45('0xc2')]=[];_0x187485[_0x8b45('0xc3')]['Messages']['push'](_0x32d3bf[_0x8b45('0xc3')]);return _0x187485;});});}})[_0x8b45('0x1d')](respondWithResult(_0x2b7b52,null))['catch'](handleError(_0x2b7b52,null));};
\ No newline at end of file
index 2c5b09f..958d5e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9aba=['hasOwnProperty','exports','events','../../mysqldb','OpenchannelAccount','setMaxListeners','update','remove','emit'];(function(_0xd55bd4,_0x291c8d){var _0x226911=function(_0x12059a){while(--_0x12059a){_0xd55bd4['push'](_0xd55bd4['shift']());}};_0x226911(++_0x291c8d);}(_0x9aba,0x1df));var _0xa9ab=function(_0xd97fc5,_0x1c1517){_0xd97fc5=_0xd97fc5-0x0;var _0x1c117a=_0x9aba[_0xd97fc5];return _0x1c117a;};'use strict';var EventEmitter=require(_0xa9ab('0x0'));var OpenchannelAccount=require(_0xa9ab('0x1'))['db'][_0xa9ab('0x2')];var OpenchannelAccountEvents=new EventEmitter();OpenchannelAccountEvents[_0xa9ab('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0xa9ab('0x4'),'afterDestroy':_0xa9ab('0x5')};function emitEvent(_0x3baa8e){return function(_0x2c39af,_0x5d2c1f,_0x3fa0fa){OpenchannelAccountEvents[_0xa9ab('0x6')](_0x3baa8e+':'+_0x2c39af['id'],_0x2c39af);OpenchannelAccountEvents[_0xa9ab('0x6')](_0x3baa8e,_0x2c39af);_0x3fa0fa(null);};}for(var e in events){if(events[_0xa9ab('0x7')](e)){var event=events[e];OpenchannelAccount['hook'](e,emitEvent(event));}}module[_0xa9ab('0x8')]=OpenchannelAccountEvents;
\ No newline at end of file
+var _0xd9a7=['emit','hasOwnProperty','hook','exports','../../mysqldb','OpenchannelAccount','save','remove'];(function(_0x45b034,_0x3a57dd){var _0x509cb0=function(_0x3a89d5){while(--_0x3a89d5){_0x45b034['push'](_0x45b034['shift']());}};_0x509cb0(++_0x3a57dd);}(_0xd9a7,0x12c));var _0x7d9a=function(_0x215648,_0x250798){_0x215648=_0x215648-0x0;var _0x47075e=_0xd9a7[_0x215648];return _0x47075e;};'use strict';var EventEmitter=require('events');var OpenchannelAccount=require(_0x7d9a('0x0'))['db'][_0x7d9a('0x1')];var OpenchannelAccountEvents=new EventEmitter();OpenchannelAccountEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x7d9a('0x2'),'afterUpdate':'update','afterDestroy':_0x7d9a('0x3')};function emitEvent(_0x267049){return function(_0x4ba711,_0x12a2a4,_0x5829a3){OpenchannelAccountEvents['emit'](_0x267049+':'+_0x4ba711['id'],_0x4ba711);OpenchannelAccountEvents[_0x7d9a('0x4')](_0x267049,_0x4ba711);_0x5829a3(null);};}for(var e in events){if(events[_0x7d9a('0x5')](e)){var event=events[e];OpenchannelAccount[_0x7d9a('0x6')](e,emitEvent(event));}}module[_0x7d9a('0x7')]=OpenchannelAccountEvents;
\ No newline at end of file
index 180fc5c..cb5795c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['request-promise','./openchannelAccount.attributes','exports','OpenchannelAccount','openchannel_accounts','lodash','util','bluebird'];(function(_0x395155,_0x192ffd){var _0x179767=function(_0xb18ee3){while(--_0xb18ee3){_0x395155['push'](_0x395155['shift']());}};_0x179767(++_0x192ffd);}(_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 logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0x0d8b('0x2'));var rp=require(_0x0d8b('0x3'));var attributes=require(_0x0d8b('0x4'));module[_0x0d8b('0x5')]=function(_0x8196ed,_0x577834){return _0x8196ed['define'](_0x0d8b('0x6'),attributes,{'tableName':_0x0d8b('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xac4a=['util','../../config/logger','api','moment','bluebird','exports','OpenchannelAccount','lodash'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0xac4a,0x13f));var _0xaac4=function(_0x510497,_0x52181e){_0x510497=_0x510497-0x0;var _0x129dc3=_0xac4a[_0x510497];return _0x129dc3;};'use strict';var _=require(_0xaac4('0x0'));var util=require(_0xaac4('0x1'));var logger=require(_0xaac4('0x2'))(_0xaac4('0x3'));var moment=require(_0xaac4('0x4'));var BPromise=require(_0xaac4('0x5'));var rp=require('request-promise');var attributes=require('./openchannelAccount.attributes');module[_0xaac4('0x6')]=function(_0x2a5762,_0x32d34c){return _0x2a5762['define'](_0xaac4('0x7'),attributes,{'tableName':'openchannel_accounts','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index df44e86..8243582 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x814b=['moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','./openchannelAccount.socket','register','request','OpenchannelAccount,\x20%s,\x20%s','request\x20sent','debug','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util'];(function(_0x53109d,_0x32d8ef){var _0x287700=function(_0x52912c){while(--_0x52912c){_0x53109d['push'](_0x53109d['shift']());}};_0x287700(++_0x32d8ef);}(_0x814b,0x1a2));var _0xb814=function(_0x3457b4,_0x4cd8f9){_0x3457b4=_0x3457b4-0x0;var _0xaa8fa9=_0x814b[_0x3457b4];return _0xaa8fa9;};'use strict';var _=require(_0xb814('0x0'));var util=require(_0xb814('0x1'));var moment=require(_0xb814('0x2'));var BPromise=require(_0xb814('0x3'));var rs=require(_0xb814('0x4'));var fs=require('fs');var Redis=require(_0xb814('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xb814('0x6'));var logger=require(_0xb814('0x7'))(_0xb814('0x8'));var config=require(_0xb814('0x9'));var jayson=require(_0xb814('0xa'));var client=jayson[_0xb814('0xb')]['http']({'port':0x232a});config[_0xb814('0xc')]=_[_0xb814('0xd')](config['redis'],{'host':_0xb814('0xe'),'port':0x18eb});var socket=require(_0xb814('0xf'))(new Redis(config[_0xb814('0xc')]));require(_0xb814('0x10'))[_0xb814('0x11')](socket);function respondWithRpcPromise(_0x21d4a5,_0x1086f8,_0x19aad8){return new BPromise(function(_0x207dbc,_0x3450f2){return client[_0xb814('0x12')](_0x21d4a5,_0x19aad8)['then'](function(_0x43dfe6){logger['info'](_0xb814('0x13'),_0x1086f8,_0xb814('0x14'));logger[_0xb814('0x15')](_0xb814('0x16'),_0x1086f8,_0xb814('0x14'),JSON[_0xb814('0x17')](_0x43dfe6));if(_0x43dfe6[_0xb814('0x18')]){if(_0x43dfe6[_0xb814('0x18')][_0xb814('0x19')]===0x1f4){logger[_0xb814('0x18')](_0xb814('0x13'),_0x1086f8,_0x43dfe6[_0xb814('0x18')][_0xb814('0x1a')]);return _0x3450f2(_0x43dfe6[_0xb814('0x18')][_0xb814('0x1a')]);}logger[_0xb814('0x18')](_0xb814('0x13'),_0x1086f8,_0x43dfe6[_0xb814('0x18')][_0xb814('0x1a')]);return _0x207dbc(_0x43dfe6[_0xb814('0x18')][_0xb814('0x1a')]);}else{logger['info'](_0xb814('0x13'),_0x1086f8,'request\x20sent');_0x207dbc(_0x43dfe6[_0xb814('0x1b')][_0xb814('0x1a')]);}})['catch'](function(_0x4b55a7){logger['error'](_0xb814('0x13'),_0x1086f8,_0x4b55a7);_0x3450f2(_0x4b55a7);});});}
\ No newline at end of file
+var _0x7a54=['result','catch','lodash','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','defaults','redis','socket.io-emitter','then','info','OpenchannelAccount,\x20%s,\x20%s','request\x20sent','debug','OpenchannelAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x7a54,0x106));var _0x47a5=function(_0x1c1198,_0x58522b){_0x1c1198=_0x1c1198-0x0;var _0x494f08=_0x7a54[_0x1c1198];return _0x494f08;};'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});config['redis']=_[_0x47a5('0xb')](config[_0x47a5('0xc')],{'host':'localhost','port':0x18eb});var socket=require(_0x47a5('0xd'))(new Redis(config['redis']));require('./openchannelAccount.socket')['register'](socket);function respondWithRpcPromise(_0x2a0e98,_0x2baee7,_0x5e31dd){return new BPromise(function(_0x2eb0dd,_0x49e844){return client['request'](_0x2a0e98,_0x5e31dd)[_0x47a5('0xe')](function(_0x69e4d4){logger[_0x47a5('0xf')](_0x47a5('0x10'),_0x2baee7,_0x47a5('0x11'));logger[_0x47a5('0x12')](_0x47a5('0x13'),_0x2baee7,'request\x20sent',JSON[_0x47a5('0x14')](_0x69e4d4));if(_0x69e4d4[_0x47a5('0x15')]){if(_0x69e4d4[_0x47a5('0x15')][_0x47a5('0x16')]===0x1f4){logger[_0x47a5('0x15')](_0x47a5('0x10'),_0x2baee7,_0x69e4d4[_0x47a5('0x15')][_0x47a5('0x17')]);return _0x49e844(_0x69e4d4['error'][_0x47a5('0x17')]);}logger[_0x47a5('0x15')](_0x47a5('0x10'),_0x2baee7,_0x69e4d4[_0x47a5('0x15')][_0x47a5('0x17')]);return _0x2eb0dd(_0x69e4d4['error']['message']);}else{logger[_0x47a5('0xf')]('OpenchannelAccount,\x20%s,\x20%s',_0x2baee7,'request\x20sent');_0x2eb0dd(_0x69e4d4[_0x47a5('0x18')][_0x47a5('0x17')]);}})[_0x47a5('0x19')](function(_0x1ef371){logger[_0x47a5('0x15')](_0x47a5('0x10'),_0x2baee7,_0x1ef371);_0x49e844(_0x1ef371);});});}
\ No newline at end of file
index b1d5850..e509823 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdac0=['remove','update','emit','register','length','./openchannelAccount.events','save'];(function(_0x4b1929,_0x680c2d){var _0x4dc37e=function(_0x307e2e){while(--_0x307e2e){_0x4b1929['push'](_0x4b1929['shift']());}};_0x4dc37e(++_0x680c2d);}(_0xdac0,0x1cc));var _0x0dac=function(_0x52def6,_0x133d2b){_0x52def6=_0x52def6-0x0;var _0x6f230a=_0xdac0[_0x52def6];return _0x6f230a;};'use strict';var OpenchannelAccountEvents=require(_0x0dac('0x0'));var events=[_0x0dac('0x1'),_0x0dac('0x2'),_0x0dac('0x3')];function createListener(_0x267b65,_0x2c415c){return function(_0x2170ed){_0x2c415c[_0x0dac('0x4')](_0x267b65,_0x2170ed);};}function removeListener(_0x4a2fef,_0x2ee25e){return function(){OpenchannelAccountEvents['removeListener'](_0x4a2fef,_0x2ee25e);};}exports[_0x0dac('0x5')]=function(_0x5a58c0){for(var _0x2c2a13=0x0,_0x212d35=events[_0x0dac('0x6')];_0x2c2a13<_0x212d35;_0x2c2a13++){var _0x514bc6=events[_0x2c2a13];var _0x2e8f6f=createListener('openchannelAccount:'+_0x514bc6,_0x5a58c0);OpenchannelAccountEvents['on'](_0x514bc6,_0x2e8f6f);}};
\ No newline at end of file
+var _0xa08a=['length','openchannelAccount:','save','update','removeListener','register'];(function(_0x294296,_0x5e19cd){var _0x55f4a7=function(_0x3c0831){while(--_0x3c0831){_0x294296['push'](_0x294296['shift']());}};_0x55f4a7(++_0x5e19cd);}(_0xa08a,0x176));var _0xaa08=function(_0x4b1012,_0x1415eb){_0x4b1012=_0x4b1012-0x0;var _0x23d715=_0xa08a[_0x4b1012];return _0x23d715;};'use strict';var OpenchannelAccountEvents=require('./openchannelAccount.events');var events=[_0xaa08('0x0'),'remove',_0xaa08('0x1')];function createListener(_0x62fb2b,_0x60735d){return function(_0x5020e4){_0x60735d['emit'](_0x62fb2b,_0x5020e4);};}function removeListener(_0x5d9246,_0x778742){return function(){OpenchannelAccountEvents[_0xaa08('0x2')](_0x5d9246,_0x778742);};}exports[_0xaa08('0x3')]=function(_0x29d2ce){for(var _0xe3c55=0x0,_0x97e784=events[_0xaa08('0x4')];_0xe3c55<_0x97e784;_0xe3c55++){var _0x750667=events[_0xe3c55];var _0x551fa7=createListener(_0xaa08('0x5')+_0x750667,_0x29d2ce);OpenchannelAccountEvents['on'](_0x750667,_0x551fa7);}};
\ No newline at end of file
index 24c5ec3..983d1e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x577f=['../../components/interaction/service','../../config/environment','./openchannelApplication.controller','get','index','/:id','isAuthenticated','show','post','create','put','update','delete','exports','util','path','connect-timeout','express','Router','../../components/auth/service'];(function(_0x5c9296,_0x144486){var _0x6b20b3=function(_0x18f8e0){while(--_0x18f8e0){_0x5c9296['push'](_0x5c9296['shift']());}};_0x6b20b3(++_0x144486);}(_0x577f,0x18a));var _0xf577=function(_0x1d33af,_0x4d3af1){_0x1d33af=_0x1d33af-0x0;var _0x3b772b=_0x577f[_0x1d33af];return _0x3b772b;};'use strict';var multer=require('multer');var util=require(_0xf577('0x0'));var path=require(_0xf577('0x1'));var timeout=require(_0xf577('0x2'));var express=require(_0xf577('0x3'));var router=express[_0xf577('0x4')]();var auth=require(_0xf577('0x5'));var interaction=require(_0xf577('0x6'));var config=require(_0xf577('0x7'));var controller=require(_0xf577('0x8'));router[_0xf577('0x9')]('/',auth['isAuthenticated'](),controller[_0xf577('0xa')]);router[_0xf577('0x9')](_0xf577('0xb'),auth[_0xf577('0xc')](),controller[_0xf577('0xd')]);router[_0xf577('0xe')]('/',auth[_0xf577('0xc')](),controller[_0xf577('0xf')]);router[_0xf577('0x10')]('/:id',auth[_0xf577('0xc')](),controller[_0xf577('0x11')]);router[_0xf577('0x12')](_0xf577('0xb'),auth[_0xf577('0xc')](),controller['destroy']);module[_0xf577('0x13')]=router;
\ No newline at end of file
+var _0xdf9d=['destroy','exports','util','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./openchannelApplication.controller','get','isAuthenticated','/:id','show','post','put','delete'];(function(_0x5b1f84,_0x45a609){var _0x48961c=function(_0x590781){while(--_0x590781){_0x5b1f84['push'](_0x5b1f84['shift']());}};_0x48961c(++_0x45a609);}(_0xdf9d,0x142));var _0xddf9=function(_0x89fffe,_0x1ef3ba){_0x89fffe=_0x89fffe-0x0;var _0x4a9fad=_0xdf9d[_0x89fffe];return _0x4a9fad;};'use strict';var multer=require('multer');var util=require(_0xddf9('0x0'));var path=require('path');var timeout=require(_0xddf9('0x1'));var express=require(_0xddf9('0x2'));var router=express['Router']();var auth=require(_0xddf9('0x3'));var interaction=require(_0xddf9('0x4'));var config=require(_0xddf9('0x5'));var controller=require(_0xddf9('0x6'));router[_0xddf9('0x7')]('/',auth[_0xddf9('0x8')](),controller['index']);router['get'](_0xddf9('0x9'),auth[_0xddf9('0x8')](),controller[_0xddf9('0xa')]);router[_0xddf9('0xb')]('/',auth[_0xddf9('0x8')](),controller['create']);router[_0xddf9('0xc')]('/:id',auth[_0xddf9('0x8')](),controller['update']);router[_0xddf9('0xd')]('/:id',auth[_0xddf9('0x8')](),controller[_0xddf9('0xe')]);module[_0xddf9('0xf')]=router;
\ No newline at end of file
index dd65e81..b1440d3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa6b0=['*,*,*,*','sequelize','exports','noop','TEXT','STRING'];(function(_0x36e2fb,_0x32ff16){var _0x31b433=function(_0x296f1c){while(--_0x296f1c){_0x36e2fb['push'](_0x36e2fb['shift']());}};_0x31b433(++_0x32ff16);}(_0xa6b0,0xaf));var _0x0a6b=function(_0x1e9f6d,_0x54966b){_0x1e9f6d=_0x1e9f6d-0x0;var _0x117079=_0xa6b0[_0x1e9f6d];return _0x117079;};'use strict';var Sequelize=require(_0x0a6b('0x0'));module[_0x0a6b('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x0a6b('0x2')},'appdata':{'type':Sequelize[_0x0a6b('0x3')]()},'description':{'type':Sequelize[_0x0a6b('0x4')]},'interval':{'type':Sequelize['STRING'],'defaultValue':_0x0a6b('0x5')}};
\ No newline at end of file
+var _0xdc6f=['TEXT','sequelize','exports','INTEGER','STRING','noop'];(function(_0x5c463f,_0x50e2dc){var _0xe89216=function(_0x339a19){while(--_0x339a19){_0x5c463f['push'](_0x5c463f['shift']());}};_0xe89216(++_0x50e2dc);}(_0xdc6f,0x6d));var _0xfdc6=function(_0x1250c9,_0x4034c2){_0x1250c9=_0x1250c9-0x0;var _0x6fbaa=_0xdc6f[_0x1250c9];return _0x6fbaa;};'use strict';var Sequelize=require(_0xfdc6('0x0'));module[_0xfdc6('0x1')]={'priority':{'type':Sequelize[_0xfdc6('0x2')],'allowNull':![]},'app':{'type':Sequelize[_0xfdc6('0x3')],'allowNull':![],'defaultValue':_0xfdc6('0x4')},'appdata':{'type':Sequelize[_0xfdc6('0x5')]()},'description':{'type':Sequelize[_0xfdc6('0x3')]},'interval':{'type':Sequelize['STRING'],'defaultValue':'*,*,*,*'}};
\ No newline at end of file
index 08b3d3b..9ecc82b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6f54=['reject','save','update','then','destroy','error','name','index','OpenchannelApplication','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','offset','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','squel','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','sendStatus','status','end','json','count','set','Content-Range'];(function(_0x4ee8ee,_0x55a029){var _0x3edef5=function(_0x535e80){while(--_0x535e80){_0x4ee8ee['push'](_0x4ee8ee['shift']());}};_0x3edef5(++_0x55a029);}(_0x6f54,0x1a3));var _0x46f5=function(_0x1ab6fb,_0x2054d1){_0x1ab6fb=_0x1ab6fb-0x0;var _0x36b3bd=_0x6f54[_0x1ab6fb];return _0x36b3bd;};'use strict';var pdf=require(_0x46f5('0x0'));var emlformat=require(_0x46f5('0x1'));var rimraf=require(_0x46f5('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x46f5('0x3'));var rp=require(_0x46f5('0x4'));var moment=require(_0x46f5('0x5'));var BPromise=require(_0x46f5('0x6'));var Mustache=require(_0x46f5('0x7'));var util=require(_0x46f5('0x8'));var path=require(_0x46f5('0x9'));var sox=require(_0x46f5('0xa'));var csv=require('to-csv');var ejs=require(_0x46f5('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x46f5('0xc'));var crypto=require('crypto');var jsforce=require(_0x46f5('0xd'));var deskjs=require(_0x46f5('0xe'));var toCsv=require(_0x46f5('0xf'));var querystring=require('querystring');var Papa=require(_0x46f5('0x10'));var authService=require(_0x46f5('0x11'));var hardwareService=require(_0x46f5('0x12'));var Redis=require(_0x46f5('0x13'));var qs=require(_0x46f5('0x14'));var logger=require(_0x46f5('0x15'))(_0x46f5('0x16'));var utils=require(_0x46f5('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5e13f0,_0x2c02b2){_0x2c02b2=_0x2c02b2||0xcc;return function(_0x121a64){if(_0x121a64){return _0x5e13f0[_0x46f5('0x18')](_0x2c02b2);}return _0x5e13f0[_0x46f5('0x19')](_0x2c02b2)[_0x46f5('0x1a')]();};}function respondWithResult(_0x19acce,_0x4a37c6){_0x4a37c6=_0x4a37c6||0xc8;return function(_0x52baf3){if(_0x52baf3){return _0x19acce[_0x46f5('0x19')](_0x4a37c6)[_0x46f5('0x1b')](_0x52baf3);}};}function respondWithFilteredResult(_0x52aca8,_0x35f06a){return function(_0xa0146a){if(_0xa0146a){var _0x5d6d95=_0xa0146a[_0x46f5('0x1c')],_0x52dce6=_0x35f06a['offset'],_0x457f8c=_0x35f06a['offset']+_0x35f06a['limit'],_0x352845;if(_0x457f8c>=_0x5d6d95){_0x457f8c=_0x5d6d95;_0x352845=0xc8;}else{_0x352845=0xce;}_0x52aca8[_0x46f5('0x19')](_0x352845);return _0x52aca8[_0x46f5('0x1d')](_0x46f5('0x1e'),_0x52dce6+'-'+_0x457f8c+'/'+_0x5d6d95)[_0x46f5('0x1b')](_0xa0146a);}return null;};}function patchUpdates(_0x2d76db){return function(_0x511b1e){try{jsonpatch['apply'](_0x511b1e,_0x2d76db,!![]);}catch(_0xbc634d){return BPromise[_0x46f5('0x1f')](_0xbc634d);}return _0x511b1e[_0x46f5('0x20')]();};}function saveUpdates(_0x208f08,_0x1157da){return function(_0x5029dc){if(_0x5029dc){return _0x5029dc[_0x46f5('0x21')](_0x208f08)[_0x46f5('0x22')](function(_0x3ba568){return _0x3ba568;});}return null;};}function removeEntity(_0x114370,_0x56367b){return function(_0x328ba8){if(_0x328ba8){return _0x328ba8[_0x46f5('0x23')]()['then'](function(){_0x114370[_0x46f5('0x19')](0xcc)[_0x46f5('0x1a')]();});}};}function handleEntityNotFound(_0x2acaf1,_0x2cd1e5){return function(_0x19f6b4){if(!_0x19f6b4){_0x2acaf1['sendStatus'](0x194);}return _0x19f6b4;};}function handleError(_0x3b0960,_0x1bc854){_0x1bc854=_0x1bc854||0x1f4;return function(_0x17310d){logger[_0x46f5('0x24')](_0x17310d['stack']);if(_0x17310d[_0x46f5('0x25')]){delete _0x17310d[_0x46f5('0x25')];}_0x3b0960['status'](_0x1bc854)['send'](_0x17310d);};}exports[_0x46f5('0x26')]=function(_0x440a36,_0x49c817){var _0x4b6cd2={},_0x4f0f3b={},_0x2e533a={'count':0x0,'rows':[]};var _0x42fe1e=db[_0x46f5('0x27')][_0x46f5('0x28')];_0x4f0f3b[_0x46f5('0x29')]=_[_0x46f5('0x2a')](_0x42fe1e);_0x4f0f3b[_0x46f5('0x2b')]=_['keys'](_0x440a36[_0x46f5('0x2b')]);_0x4f0f3b[_0x46f5('0x2c')]=_[_0x46f5('0x2d')](_0x4f0f3b['model'],_0x4f0f3b['query']);_0x4b6cd2['attributes']=_['intersection'](_0x4f0f3b[_0x46f5('0x29')],qs['fields'](_0x440a36[_0x46f5('0x2b')][_0x46f5('0x2e')]));_0x4b6cd2[_0x46f5('0x2f')]=_0x4b6cd2[_0x46f5('0x2f')][_0x46f5('0x30')]?_0x4b6cd2[_0x46f5('0x2f')]:_0x4f0f3b[_0x46f5('0x29')];if(!_0x440a36['query'][_0x46f5('0x31')](_0x46f5('0x32'))){_0x4b6cd2[_0x46f5('0x33')]=qs[_0x46f5('0x33')](_0x440a36['query'][_0x46f5('0x33')]);_0x4b6cd2[_0x46f5('0x34')]=qs[_0x46f5('0x34')](_0x440a36[_0x46f5('0x2b')][_0x46f5('0x34')]);}_0x4b6cd2[_0x46f5('0x35')]=qs['sort'](_0x440a36[_0x46f5('0x2b')][_0x46f5('0x36')]);_0x4b6cd2[_0x46f5('0x37')]=qs[_0x46f5('0x2c')](_[_0x46f5('0x38')](_0x440a36[_0x46f5('0x2b')],_0x4f0f3b[_0x46f5('0x2c')]));if(_0x440a36[_0x46f5('0x2b')][_0x46f5('0x39')]){_0x4b6cd2[_0x46f5('0x37')]=_[_0x46f5('0x3a')](_0x4b6cd2[_0x46f5('0x37')],{'$or':_[_0x46f5('0x3b')](_0x42fe1e,function(_0xf11f1e){if(_0xf11f1e[_0x46f5('0x3c')][_0x46f5('0x3d')]!==_0x46f5('0x3e')){var _0xde190e={};_0xde190e[_0xf11f1e[_0x46f5('0x3f')]]={'$like':'%'+_0x440a36['query'][_0x46f5('0x39')]+'%'};return _0xde190e;}})});}_0x4b6cd2=_[_0x46f5('0x3a')]({},_0x4b6cd2,_0x440a36[_0x46f5('0x40')]);var _0x411a1c={'where':_0x4b6cd2[_0x46f5('0x37')]};return db[_0x46f5('0x27')][_0x46f5('0x1c')](_0x411a1c)[_0x46f5('0x22')](function(_0x5e0cdf){_0x2e533a[_0x46f5('0x1c')]=_0x5e0cdf;if(_0x440a36['query'][_0x46f5('0x41')]){_0x4b6cd2[_0x46f5('0x42')]=[{'all':!![]}];}return db[_0x46f5('0x27')][_0x46f5('0x43')](_0x4b6cd2);})['then'](function(_0x57fe62){_0x2e533a[_0x46f5('0x44')]=_0x57fe62;return _0x2e533a;})[_0x46f5('0x22')](respondWithFilteredResult(_0x49c817,_0x4b6cd2))[_0x46f5('0x45')](handleError(_0x49c817,null));};exports[_0x46f5('0x46')]=function(_0x767231,_0x42467a){var _0x2ae544={'raw':!![],'where':{'id':_0x767231[_0x46f5('0x47')]['id']}},_0x434d71={};_0x434d71[_0x46f5('0x29')]=_['keys'](db[_0x46f5('0x27')][_0x46f5('0x28')]);_0x434d71[_0x46f5('0x2b')]=_[_0x46f5('0x2a')](_0x767231[_0x46f5('0x2b')]);_0x434d71[_0x46f5('0x2c')]=_[_0x46f5('0x2d')](_0x434d71[_0x46f5('0x29')],_0x434d71[_0x46f5('0x2b')]);_0x2ae544[_0x46f5('0x2f')]=_['intersection'](_0x434d71[_0x46f5('0x29')],qs['fields'](_0x767231['query'][_0x46f5('0x2e')]));_0x2ae544[_0x46f5('0x2f')]=_0x2ae544[_0x46f5('0x2f')]['length']?_0x2ae544['attributes']:_0x434d71[_0x46f5('0x29')];if(_0x767231['query'][_0x46f5('0x41')]){_0x2ae544[_0x46f5('0x42')]=[{'all':!![]}];}_0x2ae544=_[_0x46f5('0x3a')]({},_0x2ae544,_0x767231[_0x46f5('0x40')]);return db[_0x46f5('0x27')][_0x46f5('0x48')](_0x2ae544)[_0x46f5('0x22')](handleEntityNotFound(_0x42467a,null))[_0x46f5('0x22')](respondWithResult(_0x42467a,null))[_0x46f5('0x45')](handleError(_0x42467a,null));};exports[_0x46f5('0x49')]=function(_0x296578,_0x513942){return db[_0x46f5('0x27')][_0x46f5('0x49')](_0x296578[_0x46f5('0x4a')],{})['then'](respondWithResult(_0x513942,0xc9))[_0x46f5('0x45')](handleError(_0x513942,null));};exports['update']=function(_0x3b6c70,_0x51a86a){if(_0x3b6c70[_0x46f5('0x4a')]['id']){delete _0x3b6c70[_0x46f5('0x4a')]['id'];}return db[_0x46f5('0x27')][_0x46f5('0x48')]({'where':{'id':_0x3b6c70[_0x46f5('0x47')]['id']}})[_0x46f5('0x22')](handleEntityNotFound(_0x51a86a,null))[_0x46f5('0x22')](saveUpdates(_0x3b6c70[_0x46f5('0x4a')],null))['then'](respondWithResult(_0x51a86a,null))['catch'](handleError(_0x51a86a,null));};exports[_0x46f5('0x23')]=function(_0x5e316d,_0x457a87){return db['OpenchannelApplication'][_0x46f5('0x48')]({'where':{'id':_0x5e316d['params']['id']}})['then'](handleEntityNotFound(_0x457a87,null))[_0x46f5('0x22')](removeEntity(_0x457a87,null))[_0x46f5('0x45')](handleError(_0x457a87,null));};
\ No newline at end of file
+var _0x7dc9=['count','include','findAll','rows','catch','show','params','includeAll','find','create','body','update','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','offset','limit','set','Content-Range','apply','save','then','error','name','send','index','OpenchannelApplication','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','sort','where','filters','pick','merge','type','VIRTUAL','field','options'];(function(_0x27bc96,_0x5d9eb6){var _0x472484=function(_0x2aff95){while(--_0x2aff95){_0x27bc96['push'](_0x27bc96['shift']());}};_0x472484(++_0x5d9eb6);}(_0x7dc9,0x1b0));var _0x97dc=function(_0x31ca60,_0xfbef1c){_0x31ca60=_0x31ca60-0x0;var _0x38169d=_0x7dc9[_0x31ca60];return _0x38169d;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x97dc('0x0'));var rimraf=require(_0x97dc('0x1'));var zipdir=require(_0x97dc('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x97dc('0x3'));var moment=require(_0x97dc('0x4'));var BPromise=require(_0x97dc('0x5'));var Mustache=require(_0x97dc('0x6'));var util=require('util');var path=require(_0x97dc('0x7'));var sox=require(_0x97dc('0x8'));var csv=require(_0x97dc('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x97dc('0xa'));var squel=require(_0x97dc('0xb'));var crypto=require(_0x97dc('0xc'));var jsforce=require(_0x97dc('0xd'));var deskjs=require(_0x97dc('0xe'));var toCsv=require(_0x97dc('0x9'));var querystring=require(_0x97dc('0xf'));var Papa=require(_0x97dc('0x10'));var authService=require('../../components/auth/service');var hardwareService=require(_0x97dc('0x11'));var Redis=require(_0x97dc('0x12'));var qs=require(_0x97dc('0x13'));var logger=require(_0x97dc('0x14'))(_0x97dc('0x15'));var utils=require(_0x97dc('0x16'));var config=require(_0x97dc('0x17'));var db=require(_0x97dc('0x18'))['db'];function respondWithStatusCode(_0x3eea9b,_0x2d5231){_0x2d5231=_0x2d5231||0xcc;return function(_0x430e8c){if(_0x430e8c){return _0x3eea9b[_0x97dc('0x19')](_0x2d5231);}return _0x3eea9b[_0x97dc('0x1a')](_0x2d5231)['end']();};}function respondWithResult(_0x490098,_0x2ba738){_0x2ba738=_0x2ba738||0xc8;return function(_0x17e13a){if(_0x17e13a){return _0x490098['status'](_0x2ba738)[_0x97dc('0x1b')](_0x17e13a);}};}function respondWithFilteredResult(_0x1f7524,_0xf8ac2e){return function(_0x3709c8){if(_0x3709c8){var _0x1bd2ba=_0x3709c8['count'],_0x11d20d=_0xf8ac2e[_0x97dc('0x1c')],_0x24bd4b=_0xf8ac2e['offset']+_0xf8ac2e[_0x97dc('0x1d')],_0x5391fc;if(_0x24bd4b>=_0x1bd2ba){_0x24bd4b=_0x1bd2ba;_0x5391fc=0xc8;}else{_0x5391fc=0xce;}_0x1f7524[_0x97dc('0x1a')](_0x5391fc);return _0x1f7524[_0x97dc('0x1e')](_0x97dc('0x1f'),_0x11d20d+'-'+_0x24bd4b+'/'+_0x1bd2ba)['json'](_0x3709c8);}return null;};}function patchUpdates(_0x1f2692){return function(_0x187651){try{jsonpatch[_0x97dc('0x20')](_0x187651,_0x1f2692,!![]);}catch(_0x51cc56){return BPromise['reject'](_0x51cc56);}return _0x187651[_0x97dc('0x21')]();};}function saveUpdates(_0x10c37b,_0x14f8ea){return function(_0x2aa15e){if(_0x2aa15e){return _0x2aa15e['update'](_0x10c37b)[_0x97dc('0x22')](function(_0x78f0af){return _0x78f0af;});}return null;};}function removeEntity(_0xb022bc,_0x3e9823){return function(_0x4823ba){if(_0x4823ba){return _0x4823ba['destroy']()[_0x97dc('0x22')](function(){_0xb022bc[_0x97dc('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3321b9,_0x587ce6){return function(_0x329e93){if(!_0x329e93){_0x3321b9['sendStatus'](0x194);}return _0x329e93;};}function handleError(_0x3c1583,_0x5573a1){_0x5573a1=_0x5573a1||0x1f4;return function(_0x24f3c7){logger[_0x97dc('0x23')](_0x24f3c7['stack']);if(_0x24f3c7[_0x97dc('0x24')]){delete _0x24f3c7[_0x97dc('0x24')];}_0x3c1583[_0x97dc('0x1a')](_0x5573a1)[_0x97dc('0x25')](_0x24f3c7);};}exports[_0x97dc('0x26')]=function(_0x4011a9,_0x6da9b4){var _0x477772={},_0x1f5cb3={},_0x460248={'count':0x0,'rows':[]};var _0x14ea15=db[_0x97dc('0x27')][_0x97dc('0x28')];_0x1f5cb3[_0x97dc('0x29')]=_[_0x97dc('0x2a')](_0x14ea15);_0x1f5cb3[_0x97dc('0x2b')]=_[_0x97dc('0x2a')](_0x4011a9[_0x97dc('0x2b')]);_0x1f5cb3['filters']=_[_0x97dc('0x2c')](_0x1f5cb3[_0x97dc('0x29')],_0x1f5cb3[_0x97dc('0x2b')]);_0x477772[_0x97dc('0x2d')]=_[_0x97dc('0x2c')](_0x1f5cb3[_0x97dc('0x29')],qs[_0x97dc('0x2e')](_0x4011a9[_0x97dc('0x2b')][_0x97dc('0x2e')]));_0x477772['attributes']=_0x477772[_0x97dc('0x2d')][_0x97dc('0x2f')]?_0x477772['attributes']:_0x1f5cb3[_0x97dc('0x29')];if(!_0x4011a9['query']['hasOwnProperty'](_0x97dc('0x30'))){_0x477772[_0x97dc('0x1d')]=qs[_0x97dc('0x1d')](_0x4011a9[_0x97dc('0x2b')][_0x97dc('0x1d')]);_0x477772['offset']=qs[_0x97dc('0x1c')](_0x4011a9[_0x97dc('0x2b')][_0x97dc('0x1c')]);}_0x477772['order']=qs[_0x97dc('0x31')](_0x4011a9[_0x97dc('0x2b')][_0x97dc('0x31')]);_0x477772[_0x97dc('0x32')]=qs[_0x97dc('0x33')](_[_0x97dc('0x34')](_0x4011a9[_0x97dc('0x2b')],_0x1f5cb3[_0x97dc('0x33')]));if(_0x4011a9[_0x97dc('0x2b')]['filter']){_0x477772['where']=_[_0x97dc('0x35')](_0x477772[_0x97dc('0x32')],{'$or':_['map'](_0x14ea15,function(_0x4b6fc){if(_0x4b6fc[_0x97dc('0x36')]['key']!==_0x97dc('0x37')){var _0x59bbf4={};_0x59bbf4[_0x4b6fc[_0x97dc('0x38')]]={'$like':'%'+_0x4011a9[_0x97dc('0x2b')]['filter']+'%'};return _0x59bbf4;}})});}_0x477772=_['merge']({},_0x477772,_0x4011a9[_0x97dc('0x39')]);var _0x62de4d={'where':_0x477772['where']};return db[_0x97dc('0x27')][_0x97dc('0x3a')](_0x62de4d)[_0x97dc('0x22')](function(_0xd77150){_0x460248[_0x97dc('0x3a')]=_0xd77150;if(_0x4011a9[_0x97dc('0x2b')]['includeAll']){_0x477772[_0x97dc('0x3b')]=[{'all':!![]}];}return db[_0x97dc('0x27')][_0x97dc('0x3c')](_0x477772);})[_0x97dc('0x22')](function(_0x3b403d){_0x460248[_0x97dc('0x3d')]=_0x3b403d;return _0x460248;})[_0x97dc('0x22')](respondWithFilteredResult(_0x6da9b4,_0x477772))[_0x97dc('0x3e')](handleError(_0x6da9b4,null));};exports[_0x97dc('0x3f')]=function(_0x21ffdf,_0x3894fd){var _0x35d8bd={'raw':!![],'where':{'id':_0x21ffdf[_0x97dc('0x40')]['id']}},_0x1fae41={};_0x1fae41[_0x97dc('0x29')]=_[_0x97dc('0x2a')](db[_0x97dc('0x27')]['rawAttributes']);_0x1fae41[_0x97dc('0x2b')]=_['keys'](_0x21ffdf[_0x97dc('0x2b')]);_0x1fae41[_0x97dc('0x33')]=_[_0x97dc('0x2c')](_0x1fae41[_0x97dc('0x29')],_0x1fae41[_0x97dc('0x2b')]);_0x35d8bd[_0x97dc('0x2d')]=_[_0x97dc('0x2c')](_0x1fae41['model'],qs['fields'](_0x21ffdf['query'][_0x97dc('0x2e')]));_0x35d8bd[_0x97dc('0x2d')]=_0x35d8bd[_0x97dc('0x2d')][_0x97dc('0x2f')]?_0x35d8bd[_0x97dc('0x2d')]:_0x1fae41[_0x97dc('0x29')];if(_0x21ffdf[_0x97dc('0x2b')][_0x97dc('0x41')]){_0x35d8bd[_0x97dc('0x3b')]=[{'all':!![]}];}_0x35d8bd=_[_0x97dc('0x35')]({},_0x35d8bd,_0x21ffdf['options']);return db['OpenchannelApplication'][_0x97dc('0x42')](_0x35d8bd)[_0x97dc('0x22')](handleEntityNotFound(_0x3894fd,null))['then'](respondWithResult(_0x3894fd,null))[_0x97dc('0x3e')](handleError(_0x3894fd,null));};exports[_0x97dc('0x43')]=function(_0x1a4624,_0x49e27f){return db['OpenchannelApplication'][_0x97dc('0x43')](_0x1a4624[_0x97dc('0x44')],{})[_0x97dc('0x22')](respondWithResult(_0x49e27f,0xc9))[_0x97dc('0x3e')](handleError(_0x49e27f,null));};exports[_0x97dc('0x45')]=function(_0x3f3755,_0x19ed69){if(_0x3f3755[_0x97dc('0x44')]['id']){delete _0x3f3755[_0x97dc('0x44')]['id'];}return db[_0x97dc('0x27')][_0x97dc('0x42')]({'where':{'id':_0x3f3755[_0x97dc('0x40')]['id']}})[_0x97dc('0x22')](handleEntityNotFound(_0x19ed69,null))[_0x97dc('0x22')](saveUpdates(_0x3f3755[_0x97dc('0x44')],null))[_0x97dc('0x22')](respondWithResult(_0x19ed69,null))['catch'](handleError(_0x19ed69,null));};exports['destroy']=function(_0x4b1f7a,_0x33644e){return db[_0x97dc('0x27')]['find']({'where':{'id':_0x4b1f7a[_0x97dc('0x40')]['id']}})[_0x97dc('0x22')](handleEntityNotFound(_0x33644e,null))['then'](removeEntity(_0x33644e,null))['catch'](handleError(_0x33644e,null));};
\ No newline at end of file
index 7794b00..03139f1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6899=['openchannel_applications','lodash','util','moment','request-promise','exports','OpenchannelApplication'];(function(_0x45c32d,_0x151a62){var _0x1b1794=function(_0x13d69e){while(--_0x13d69e){_0x45c32d['push'](_0x45c32d['shift']());}};_0x1b1794(++_0x151a62);}(_0x6899,0x1c1));var _0x9689=function(_0xfef9e1,_0x571e5a){_0xfef9e1=_0xfef9e1-0x0;var _0x278f3d=_0x6899[_0xfef9e1];return _0x278f3d;};'use strict';var _=require(_0x9689('0x0'));var util=require(_0x9689('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x9689('0x2'));var BPromise=require('bluebird');var rp=require(_0x9689('0x3'));var attributes=require('./openchannelApplication.attributes');module[_0x9689('0x4')]=function(_0x53d4ee,_0x1529f8){return _0x53d4ee['define'](_0x9689('0x5'),attributes,{'tableName':_0x9689('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x7d7b=['openchannel_applications','lodash','util','api','moment','bluebird','request-promise','./openchannelApplication.attributes','define'];(function(_0x416d75,_0x2c8e81){var _0x10af66=function(_0x48f136){while(--_0x48f136){_0x416d75['push'](_0x416d75['shift']());}};_0x10af66(++_0x2c8e81);}(_0x7d7b,0x9a));var _0xb7d7=function(_0x8b9da8,_0x4fafc5){_0x8b9da8=_0x8b9da8-0x0;var _0x58de84=_0x7d7b[_0x8b9da8];return _0x58de84;};'use strict';var _=require(_0xb7d7('0x0'));var util=require(_0xb7d7('0x1'));var logger=require('../../config/logger')(_0xb7d7('0x2'));var moment=require(_0xb7d7('0x3'));var BPromise=require(_0xb7d7('0x4'));var rp=require(_0xb7d7('0x5'));var attributes=require(_0xb7d7('0x6'));module['exports']=function(_0x5cc5bd,_0x2c792a){return _0x5cc5bd[_0xb7d7('0x7')]('OpenchannelApplication',attributes,{'tableName':_0xb7d7('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d84a6f8..93dd78f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd5d=['lodash','util','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','OpenchannelApplication,\x20%s,\x20%s','request\x20sent','debug','OpenchannelApplication,\x20%s,\x20%s,\x20%s','error','message','info','result','UpdateOpenchannelApplication','OpenchannelApplication','update','options','raw','attributes','limit'];(function(_0x1674f9,_0x52f2dd){var _0x36e42e=function(_0x50afb0){while(--_0x50afb0){_0x1674f9['push'](_0x1674f9['shift']());}};_0x36e42e(++_0x52f2dd);}(_0xbd5d,0x118));var _0xdbd5=function(_0x2f503a,_0x44c458){_0x2f503a=_0x2f503a-0x0;var _0x33ae70=_0xbd5d[_0x2f503a];return _0x33ae70;};'use strict';var _=require(_0xdbd5('0x0'));var util=require(_0xdbd5('0x1'));var moment=require('moment');var BPromise=require(_0xdbd5('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xdbd5('0x3'))['db'];var utils=require(_0xdbd5('0x4'));var logger=require(_0xdbd5('0x5'))(_0xdbd5('0x6'));var config=require(_0xdbd5('0x7'));var jayson=require(_0xdbd5('0x8'));var client=jayson[_0xdbd5('0x9')][_0xdbd5('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x385154,_0xc2b019,_0x26ef60){return new BPromise(function(_0x1e73cc,_0x40c249){return client[_0xdbd5('0xb')](_0x385154,_0x26ef60)[_0xdbd5('0xc')](function(_0x476345){logger['info'](_0xdbd5('0xd'),_0xc2b019,_0xdbd5('0xe'));logger[_0xdbd5('0xf')](_0xdbd5('0x10'),_0xc2b019,_0xdbd5('0xe'),JSON['stringify'](_0x476345));if(_0x476345['error']){if(_0x476345[_0xdbd5('0x11')]['code']===0x1f4){logger[_0xdbd5('0x11')](_0xdbd5('0xd'),_0xc2b019,_0x476345[_0xdbd5('0x11')][_0xdbd5('0x12')]);return _0x40c249(_0x476345['error']['message']);}logger[_0xdbd5('0x11')]('OpenchannelApplication,\x20%s,\x20%s',_0xc2b019,_0x476345[_0xdbd5('0x11')][_0xdbd5('0x12')]);return _0x1e73cc(_0x476345[_0xdbd5('0x11')][_0xdbd5('0x12')]);}else{logger[_0xdbd5('0x13')]('OpenchannelApplication,\x20%s,\x20%s',_0xc2b019,'request\x20sent');_0x1e73cc(_0x476345[_0xdbd5('0x14')][_0xdbd5('0x12')]);}})['catch'](function(_0x2215d0){logger[_0xdbd5('0x11')]('OpenchannelApplication,\x20%s,\x20%s',_0xc2b019,_0x2215d0);_0x40c249(_0x2215d0);});});}exports[_0xdbd5('0x15')]=function(_0x2ec6ce){var _0x42bfc5=this;return new Promise(function(_0x37d95c,_0x3191a5){return db[_0xdbd5('0x16')][_0xdbd5('0x17')](_0x2ec6ce['body'],{'raw':_0x2ec6ce[_0xdbd5('0x18')]?_0x2ec6ce[_0xdbd5('0x18')][_0xdbd5('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2ec6ce['options']?_0x2ec6ce[_0xdbd5('0x18')]['where']||null:null,'attributes':_0x2ec6ce[_0xdbd5('0x18')]?_0x2ec6ce[_0xdbd5('0x18')][_0xdbd5('0x1a')]||null:null,'limit':_0x2ec6ce[_0xdbd5('0x18')]?_0x2ec6ce['options'][_0xdbd5('0x1b')]||null:null})[_0xdbd5('0xc')](function(_0x5da6d9){logger[_0xdbd5('0x13')](_0xdbd5('0x15'),_0x2ec6ce);logger[_0xdbd5('0xf')](_0xdbd5('0x15'),_0x2ec6ce,JSON['stringify'](_0x5da6d9));_0x37d95c(_0x5da6d9);})['catch'](function(_0x4a78d0){logger[_0xdbd5('0x11')]('UpdateOpenchannelApplication',_0x4a78d0[_0xdbd5('0x12')],_0x2ec6ce);_0x3191a5(_0x42bfc5['error'](0x1f4,_0x4a78d0[_0xdbd5('0x12')]));});});};
\ No newline at end of file
+var _0x3ecc=['../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','then','OpenchannelApplication,\x20%s,\x20%s','request\x20sent','stringify','error','message','info','result','catch','UpdateOpenchannelApplication','OpenchannelApplication','update','body','options','raw','attributes','debug','util','moment','randomstring','ioredis','../../mysqldb'];(function(_0x8e3949,_0x14145a){var _0x3354b4=function(_0x18fe33){while(--_0x18fe33){_0x8e3949['push'](_0x8e3949['shift']());}};_0x3354b4(++_0x14145a);}(_0x3ecc,0x12f));var _0xc3ec=function(_0x5144c4,_0x42dfca){_0x5144c4=_0x5144c4-0x0;var _0x134344=_0x3ecc[_0x5144c4];return _0x134344;};'use strict';var _=require('lodash');var util=require(_0xc3ec('0x0'));var moment=require(_0xc3ec('0x1'));var BPromise=require('bluebird');var rs=require(_0xc3ec('0x2'));var fs=require('fs');var Redis=require(_0xc3ec('0x3'));var db=require(_0xc3ec('0x4'))['db'];var utils=require(_0xc3ec('0x5'));var logger=require(_0xc3ec('0x6'))(_0xc3ec('0x7'));var config=require(_0xc3ec('0x8'));var jayson=require(_0xc3ec('0x9'));var client=jayson['client'][_0xc3ec('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2eb205,_0x223a1b,_0x33815d){return new BPromise(function(_0x2e5f7c,_0x41f29f){return client['request'](_0x2eb205,_0x33815d)[_0xc3ec('0xb')](function(_0xe5a6e){logger['info'](_0xc3ec('0xc'),_0x223a1b,'request\x20sent');logger['debug']('OpenchannelApplication,\x20%s,\x20%s,\x20%s',_0x223a1b,_0xc3ec('0xd'),JSON[_0xc3ec('0xe')](_0xe5a6e));if(_0xe5a6e[_0xc3ec('0xf')]){if(_0xe5a6e[_0xc3ec('0xf')]['code']===0x1f4){logger[_0xc3ec('0xf')](_0xc3ec('0xc'),_0x223a1b,_0xe5a6e[_0xc3ec('0xf')]['message']);return _0x41f29f(_0xe5a6e[_0xc3ec('0xf')]['message']);}logger[_0xc3ec('0xf')](_0xc3ec('0xc'),_0x223a1b,_0xe5a6e[_0xc3ec('0xf')][_0xc3ec('0x10')]);return _0x2e5f7c(_0xe5a6e[_0xc3ec('0xf')][_0xc3ec('0x10')]);}else{logger[_0xc3ec('0x11')](_0xc3ec('0xc'),_0x223a1b,_0xc3ec('0xd'));_0x2e5f7c(_0xe5a6e[_0xc3ec('0x12')][_0xc3ec('0x10')]);}})[_0xc3ec('0x13')](function(_0x3dff86){logger[_0xc3ec('0xf')](_0xc3ec('0xc'),_0x223a1b,_0x3dff86);_0x41f29f(_0x3dff86);});});}exports[_0xc3ec('0x14')]=function(_0x482d72){var _0x571d3f=this;return new Promise(function(_0x21cccc,_0x6cf9a4){return db[_0xc3ec('0x15')][_0xc3ec('0x16')](_0x482d72[_0xc3ec('0x17')],{'raw':_0x482d72[_0xc3ec('0x18')]?_0x482d72[_0xc3ec('0x18')][_0xc3ec('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x482d72['options']?_0x482d72['options']['where']||null:null,'attributes':_0x482d72[_0xc3ec('0x18')]?_0x482d72['options'][_0xc3ec('0x1a')]||null:null,'limit':_0x482d72[_0xc3ec('0x18')]?_0x482d72[_0xc3ec('0x18')]['limit']||null:null})['then'](function(_0x2aa0c1){logger['info'](_0xc3ec('0x14'),_0x482d72);logger[_0xc3ec('0x1b')](_0xc3ec('0x14'),_0x482d72,JSON[_0xc3ec('0xe')](_0x2aa0c1));_0x21cccc(_0x2aa0c1);})[_0xc3ec('0x13')](function(_0x3fc1b5){logger[_0xc3ec('0xf')](_0xc3ec('0x14'),_0x3fc1b5[_0xc3ec('0x10')],_0x482d72);_0x6cf9a4(_0x571d3f[_0xc3ec('0xf')](0x1f4,_0x3fc1b5['message']));});});};
\ No newline at end of file
index 3793cfd..02bec81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf509=['util','path','express','Router','../../components/auth/service','../../config/environment','./openchannelInteraction.controller','get','isAuthenticated','/describe','describe','show','/:id/messages','getMessages','download','create','post','addMessage','/:id/tags','tracked','openchannel','openchannelinteraction:addtags','put','/:id','update','openchannelinteraction:destroy','destroy','delete','removeTags','exports','multer'];(function(_0x3d19a5,_0x3ae502){var _0x457ab3=function(_0x8fad8a){while(--_0x8fad8a){_0x3d19a5['push'](_0x3d19a5['shift']());}};_0x457ab3(++_0x3ae502);}(_0xf509,0xd8));var _0x9f50=function(_0x1992f1,_0x5c61f0){_0x1992f1=_0x1992f1-0x0;var _0x413dfe=_0xf509[_0x1992f1];return _0x413dfe;};'use strict';var multer=require(_0x9f50('0x0'));var util=require(_0x9f50('0x1'));var path=require(_0x9f50('0x2'));var timeout=require('connect-timeout');var express=require(_0x9f50('0x3'));var router=express[_0x9f50('0x4')]();var auth=require(_0x9f50('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x9f50('0x6'));var controller=require(_0x9f50('0x7'));router[_0x9f50('0x8')]('/',auth[_0x9f50('0x9')](),controller['index']);router[_0x9f50('0x8')](_0x9f50('0xa'),auth[_0x9f50('0x9')](),controller[_0x9f50('0xb')]);router[_0x9f50('0x8')]('/:id',auth['isAuthenticated'](),controller[_0x9f50('0xc')]);router[_0x9f50('0x8')](_0x9f50('0xd'),auth[_0x9f50('0x9')](),controller[_0x9f50('0xe')]);router[_0x9f50('0x8')]('/:id/download',auth[_0x9f50('0x9')](),controller[_0x9f50('0xf')]);router['post']('/',auth[_0x9f50('0x9')](),controller[_0x9f50('0x10')]);router[_0x9f50('0x11')](_0x9f50('0xd'),auth[_0x9f50('0x9')](),controller[_0x9f50('0x12')]);router['post'](_0x9f50('0x13'),auth[_0x9f50('0x9')](),interaction[_0x9f50('0x14')](_0x9f50('0x15'),_0x9f50('0x16')),controller['addTags']);router[_0x9f50('0x17')](_0x9f50('0x18'),auth['isAuthenticated'](),interaction[_0x9f50('0x14')](_0x9f50('0x15'),'openchannelinteraction:update'),controller[_0x9f50('0x19')]);router['delete'](_0x9f50('0x18'),auth['isAuthenticated'](),interaction[_0x9f50('0x14')](_0x9f50('0x15'),_0x9f50('0x1a')),controller[_0x9f50('0x1b')]);router[_0x9f50('0x1c')](_0x9f50('0x13'),auth['isAuthenticated'](),controller[_0x9f50('0x1d')]);module[_0x9f50('0x1e')]=router;
\ No newline at end of file
+var _0xd64f=['isAuthenticated','index','/describe','/:id','getMessages','/:id/download','download','post','create','/:id/messages','addMessage','/:id/tags','tracked','openchannelinteraction:addtags','addTags','put','delete','exports','multer','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get'];(function(_0x2df507,_0x553862){var _0x1f7167=function(_0x11319e){while(--_0x11319e){_0x2df507['push'](_0x2df507['shift']());}};_0x1f7167(++_0x553862);}(_0xd64f,0x7a));var _0xfd64=function(_0x416899,_0x5efac1){_0x416899=_0x416899-0x0;var _0x21622b=_0xd64f[_0x416899];return _0x21622b;};'use strict';var multer=require(_0xfd64('0x0'));var util=require('util');var path=require('path');var timeout=require(_0xfd64('0x1'));var express=require(_0xfd64('0x2'));var router=express[_0xfd64('0x3')]();var auth=require(_0xfd64('0x4'));var interaction=require(_0xfd64('0x5'));var config=require(_0xfd64('0x6'));var controller=require('./openchannelInteraction.controller');router[_0xfd64('0x7')]('/',auth[_0xfd64('0x8')](),controller[_0xfd64('0x9')]);router['get'](_0xfd64('0xa'),auth[_0xfd64('0x8')](),controller['describe']);router[_0xfd64('0x7')](_0xfd64('0xb'),auth[_0xfd64('0x8')](),controller['show']);router['get']('/:id/messages',auth[_0xfd64('0x8')](),controller[_0xfd64('0xc')]);router[_0xfd64('0x7')](_0xfd64('0xd'),auth[_0xfd64('0x8')](),controller[_0xfd64('0xe')]);router[_0xfd64('0xf')]('/',auth[_0xfd64('0x8')](),controller[_0xfd64('0x10')]);router[_0xfd64('0xf')](_0xfd64('0x11'),auth[_0xfd64('0x8')](),controller[_0xfd64('0x12')]);router[_0xfd64('0xf')](_0xfd64('0x13'),auth[_0xfd64('0x8')](),interaction[_0xfd64('0x14')]('openchannel',_0xfd64('0x15')),controller[_0xfd64('0x16')]);router[_0xfd64('0x17')](_0xfd64('0xb'),auth['isAuthenticated'](),interaction['tracked']('openchannel','openchannelinteraction:update'),controller['update']);router[_0xfd64('0x18')](_0xfd64('0xb'),auth[_0xfd64('0x8')](),interaction['tracked']('openchannel','openchannelinteraction:destroy'),controller['destroy']);router['delete'](_0xfd64('0x13'),auth['isAuthenticated'](),controller['removeTags']);module[_0xfd64('0x19')]=router;
\ No newline at end of file
index 196eee4..4c67d01 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fec=['STRING','out','sequelize','DATE'];(function(_0x298ed3,_0x4ab5e1){var _0x5aad28=function(_0x168687){while(--_0x168687){_0x298ed3['push'](_0x298ed3['shift']());}};_0x5aad28(++_0x4ab5e1);}(_0x3fec,0x1ba));var _0xc3fe=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x3fec[_0x14add3];return _0x4a174f;};'use strict';var Sequelize=require(_0xc3fe('0x0'));module['exports']={'closed':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xc3fe('0x1')]},'disposition':{'type':Sequelize[_0xc3fe('0x2')]},'note':{'type':Sequelize['STRING']},'read1stAt':{'type':Sequelize[_0xc3fe('0x1')]},'threadId':{'type':Sequelize['STRING']},'externalUrl':{'type':Sequelize['STRING']},'lastMsgAt':{'type':Sequelize[_0xc3fe('0x1')]},'lastMsgDirection':{'type':Sequelize['ENUM']('in',_0xc3fe('0x3')),'defaultValue':'in','allowNull':![]},'from':{'type':Sequelize[_0xc3fe('0x2')]}};
\ No newline at end of file
+var _0x594d=['BOOLEAN','DATE','STRING','ENUM','out'];(function(_0x49f4c5,_0x2d618b){var _0x3ce8b9=function(_0x1856ba){while(--_0x1856ba){_0x49f4c5['push'](_0x49f4c5['shift']());}};_0x3ce8b9(++_0x2d618b);}(_0x594d,0x172));var _0xd594=function(_0x1bf300,_0x43574f){_0x1bf300=_0x1bf300-0x0;var _0x4d623c=_0x594d[_0x1bf300];return _0x4d623c;};'use strict';var Sequelize=require('sequelize');module['exports']={'closed':{'type':Sequelize[_0xd594('0x0')],'defaultValue':![]},'closedAt':{'type':Sequelize[_0xd594('0x1')]},'disposition':{'type':Sequelize[_0xd594('0x2')]},'note':{'type':Sequelize[_0xd594('0x2')]},'read1stAt':{'type':Sequelize[_0xd594('0x1')]},'threadId':{'type':Sequelize['STRING']},'externalUrl':{'type':Sequelize[_0xd594('0x2')]},'lastMsgAt':{'type':Sequelize[_0xd594('0x1')]},'lastMsgDirection':{'type':Sequelize[_0xd594('0x3')]('in',_0xd594('0x4')),'defaultValue':'in','allowNull':![]},'from':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 9a919e9..235bf09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e5=['sort','pick','where','type','key','VIRTUAL','field','merge','include','push','Tag','Tags','distinct','read','OpenchannelMessage','direction','createdAt','OpenchannelInteraction','count','includeAll','User','Users','name','CmContact','Owner','fullname','internal','OpenchannelAccount','Account','Messages','color','ThroughTags','tag','findAll','catch','show','params','rawAttributes','length','options','find','create','body','describe','addMessage','ids','omit','getMessages','findOne','nolimit','order','OpenchannelInteractionId','filter','map','$gte','format','setTags','emit','openchannelInteractionTags:save','removeTags','download','unix','toString','join','root','server','tmp','attachments','Contact','firstName','Attachment','Letter','1cm','mkdirSync','<h1>Openchannel\x20Interaction:\x20#%d</h1>','<h2>Date:\x20%s</h2>','MMMM\x20Do\x20YYYY,\x20HH:mm:ss','<hr>','<div\x20style=\x22border-style:\x20solid;\x20border-width:\x201px;\x20margin:\x203px;\x22>','<p\x20style=\x22margin:\x203px;\x22>%s:\x20%s</p>','</div>','basename','createReadStream','pipe','createWriteStream','toFile','interaction-','log','err','unlinkSync','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','../../components/auth/service','ioredis','../../config/logger','api','../../config/utils','../../mysqldb','redis','defaults','localhost','./openchannelInteraction.socket','register','sendStatus','status','end','offset','limit','set','json','apply','reject','save','update','then','destroy','error','stack','index','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x34e5,0x172));var _0x534e=function(_0x3c2fa5,_0x245cab){_0x3c2fa5=_0x3c2fa5-0x0;var _0x422683=_0x34e5[_0x3c2fa5];return _0x422683;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x534e('0x0'));var rimraf=require('rimraf');var zipdir=require(_0x534e('0x1'));var jsonpatch=require(_0x534e('0x2'));var rp=require(_0x534e('0x3'));var moment=require(_0x534e('0x4'));var BPromise=require(_0x534e('0x5'));var Mustache=require('mustache');var util=require(_0x534e('0x6'));var path=require(_0x534e('0x7'));var sox=require(_0x534e('0x8'));var csv=require(_0x534e('0x9'));var ejs=require(_0x534e('0xa'));var fs=require('fs');var _=require(_0x534e('0xb'));var squel=require(_0x534e('0xc'));var crypto=require('crypto');var jsforce=require(_0x534e('0xd'));var deskjs=require(_0x534e('0xe'));var toCsv=require(_0x534e('0x9'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0x534e('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x534e('0x10'));var qs=require('../../components/parsers/qs');var logger=require(_0x534e('0x11'))(_0x534e('0x12'));var utils=require(_0x534e('0x13'));var config=require('../../config/environment');var db=require(_0x534e('0x14'))['db'];config[_0x534e('0x15')]=_[_0x534e('0x16')](config[_0x534e('0x15')],{'host':_0x534e('0x17'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x534e('0x15')]));require(_0x534e('0x18'))[_0x534e('0x19')](socket);function respondWithStatusCode(_0x3ff42d,_0x359565){_0x359565=_0x359565||0xcc;return function(_0x478027){if(_0x478027){return _0x3ff42d[_0x534e('0x1a')](_0x359565);}return _0x3ff42d[_0x534e('0x1b')](_0x359565)[_0x534e('0x1c')]();};}function respondWithResult(_0x5282cb,_0x4171d6){_0x4171d6=_0x4171d6||0xc8;return function(_0x3940c3){if(_0x3940c3){return _0x5282cb['status'](_0x4171d6)['json'](_0x3940c3);}};}function respondWithFilteredResult(_0x2de9d0,_0x28ff67){return function(_0x9297b6){if(_0x9297b6){var _0x16ad40=_0x9297b6['count'],_0x22bc92=_0x28ff67[_0x534e('0x1d')],_0x26938d=_0x28ff67[_0x534e('0x1d')]+_0x28ff67[_0x534e('0x1e')],_0x100751;if(_0x26938d>=_0x16ad40){_0x26938d=_0x16ad40;_0x100751=0xc8;}else{_0x100751=0xce;}_0x2de9d0[_0x534e('0x1b')](_0x100751);return _0x2de9d0[_0x534e('0x1f')]('Content-Range',_0x22bc92+'-'+_0x26938d+'/'+_0x16ad40)[_0x534e('0x20')](_0x9297b6);}return null;};}function patchUpdates(_0x1b87d1){return function(_0x5f9ae9){try{jsonpatch[_0x534e('0x21')](_0x5f9ae9,_0x1b87d1,!![]);}catch(_0x4724f9){return BPromise[_0x534e('0x22')](_0x4724f9);}return _0x5f9ae9[_0x534e('0x23')]();};}function saveUpdates(_0x85188b,_0x21f2e1){return function(_0x5e086a){if(_0x5e086a){return _0x5e086a[_0x534e('0x24')](_0x85188b)[_0x534e('0x25')](function(_0x39466c){return _0x39466c;});}return null;};}function removeEntity(_0x4a09ed,_0x324205){return function(_0x44bbc1){if(_0x44bbc1){return _0x44bbc1[_0x534e('0x26')]()[_0x534e('0x25')](function(){_0x4a09ed['status'](0xcc)[_0x534e('0x1c')]();});}};}function handleEntityNotFound(_0x588c08,_0xb83f1){return function(_0x106b7a){if(!_0x106b7a){_0x588c08[_0x534e('0x1a')](0x194);}return _0x106b7a;};}function handleError(_0x1720f4,_0x174577){_0x174577=_0x174577||0x1f4;return function(_0x57b216){logger[_0x534e('0x27')](_0x57b216[_0x534e('0x28')]);if(_0x57b216['name']){delete _0x57b216['name'];}_0x1720f4[_0x534e('0x1b')](_0x174577)['send'](_0x57b216);};}exports[_0x534e('0x29')]=function(_0x3c5c11,_0x281cda){var _0x122225={},_0x15be5c={},_0x42119b={'count':0x0,'rows':[]};var _0x5253b5=db['OpenchannelInteraction']['rawAttributes'];_0x15be5c[_0x534e('0x2a')]=_[_0x534e('0x2b')](_0x5253b5);_0x15be5c[_0x534e('0x2c')]=_[_0x534e('0x2b')](_0x3c5c11[_0x534e('0x2c')]);_0x15be5c[_0x534e('0x2d')]=_[_0x534e('0x2e')](_0x15be5c[_0x534e('0x2a')],_0x15be5c[_0x534e('0x2c')]);_0x122225[_0x534e('0x2f')]=_[_0x534e('0x2e')](_0x15be5c[_0x534e('0x2a')],qs['fields'](_0x3c5c11[_0x534e('0x2c')][_0x534e('0x30')]));_0x122225['attributes']=_0x122225[_0x534e('0x2f')]['length']?_0x122225[_0x534e('0x2f')]:_0x15be5c[_0x534e('0x2a')];if(!_0x3c5c11[_0x534e('0x2c')][_0x534e('0x31')]('nolimit')){_0x122225[_0x534e('0x1e')]=qs[_0x534e('0x1e')](_0x3c5c11['query']['limit']);_0x122225[_0x534e('0x1d')]=qs[_0x534e('0x1d')](_0x3c5c11[_0x534e('0x2c')][_0x534e('0x1d')]);}_0x122225['order']=qs[_0x534e('0x32')](_0x3c5c11['query'][_0x534e('0x32')]);_0x122225['where']=qs[_0x534e('0x2d')](_[_0x534e('0x33')](_0x3c5c11['query'],_0x15be5c[_0x534e('0x2d')]));if(_0x3c5c11['query']['filter']){_0x122225['where']=_['merge'](_0x122225[_0x534e('0x34')],{'$or':_['map'](_0x5253b5,function(_0x49f188){if(_0x49f188[_0x534e('0x35')][_0x534e('0x36')]!==_0x534e('0x37')){var _0x5718fa={};_0x5718fa[_0x49f188[_0x534e('0x38')]]={'$like':'%'+_0x3c5c11[_0x534e('0x2c')]['filter']+'%'};return _0x5718fa;}})});}_0x122225=_[_0x534e('0x39')]({},_0x122225,_0x3c5c11['options']);var _0x6cc5e8={'where':_0x122225[_0x534e('0x34')]};_0x6cc5e8['include']=[];if(_0x3c5c11[_0x534e('0x2c')]['tag']){_0x6cc5e8[_0x534e('0x3a')][_0x534e('0x3b')]({'model':db[_0x534e('0x3c')],'as':_0x534e('0x3d'),'attributes':['id'],'where':{'id':_0x3c5c11['query']['tag']},'required':!![]});_0x6cc5e8[_0x534e('0x3e')]=!![];}if(_0x3c5c11['query'][_0x534e('0x3f')]){_0x6cc5e8[_0x534e('0x3a')][_0x534e('0x3b')]({'model':db[_0x534e('0x40')],'as':'Messages','attributes':['id',_0x534e('0x41'),_0x534e('0x42'),_0x534e('0x3f')],'where':{'direction':'in','read':_0x3c5c11['query'][_0x534e('0x3f')]||![]},'required':!![]});_0x6cc5e8['distinct']=!![];}return db[_0x534e('0x43')][_0x534e('0x44')](_0x6cc5e8)[_0x534e('0x25')](function(_0x5b81f6){_0x42119b[_0x534e('0x44')]=_0x5b81f6;if(_0x3c5c11[_0x534e('0x2c')][_0x534e('0x45')]){_0x122225[_0x534e('0x3a')]=[{'model':db[_0x534e('0x46')],'as':_0x534e('0x47'),'required':![],'attributes':['id',_0x534e('0x48'),'fullname']},{'model':db[_0x534e('0x49')],'as':'Contact','required':![]},{'model':db['User'],'as':_0x534e('0x4a'),'attributes':[_0x534e('0x48'),_0x534e('0x4b'),_0x534e('0x4c')],'required':![]},{'model':db[_0x534e('0x4d')],'as':_0x534e('0x4e'),'attributes':['name',_0x534e('0x36')],'required':![]},{'model':db[_0x534e('0x40')],'as':_0x534e('0x4f'),'attributes':['id','direction',_0x534e('0x42'),'read'],'where':{'direction':'in','read':_0x3c5c11[_0x534e('0x2c')][_0x534e('0x3f')]||![]},'required':_0x3c5c11[_0x534e('0x2c')][_0x534e('0x3f')]||![]},{'model':db[_0x534e('0x3c')],'as':_0x534e('0x3d'),'attributes':['id','name',_0x534e('0x50')],'required':_0x3c5c11['query']['tag']?!![]:![]},{'model':db[_0x534e('0x3c')],'as':_0x534e('0x51'),'attributes':['id',_0x534e('0x48'),_0x534e('0x50')],'through':_0x3c5c11[_0x534e('0x2c')][_0x534e('0x52')]?{'attributes':[],'where':{'TagId':_0x3c5c11[_0x534e('0x2c')][_0x534e('0x52')]||undefined}}:{},'required':_0x3c5c11[_0x534e('0x2c')]['tag']?!![]:![]}];}return db[_0x534e('0x43')][_0x534e('0x53')](_0x122225);})[_0x534e('0x25')](function(_0x317deb){_0x42119b['rows']=_0x317deb;return _0x42119b;})[_0x534e('0x25')](respondWithFilteredResult(_0x281cda,_0x122225))[_0x534e('0x54')](handleError(_0x281cda,null));};exports[_0x534e('0x55')]=function(_0x11b459,_0x21bfa2){var _0x176147={'raw':![],'where':{'id':_0x11b459[_0x534e('0x56')]['id']}},_0xc625df={};_0xc625df[_0x534e('0x2a')]=_[_0x534e('0x2b')](db[_0x534e('0x43')][_0x534e('0x57')]);_0xc625df['query']=_[_0x534e('0x2b')](_0x11b459[_0x534e('0x2c')]);_0xc625df['filters']=_[_0x534e('0x2e')](_0xc625df[_0x534e('0x2a')],_0xc625df[_0x534e('0x2c')]);_0x176147['attributes']=_['intersection'](_0xc625df[_0x534e('0x2a')],qs[_0x534e('0x30')](_0x11b459[_0x534e('0x2c')][_0x534e('0x30')]));_0x176147[_0x534e('0x2f')]=_0x176147[_0x534e('0x2f')][_0x534e('0x58')]?_0x176147[_0x534e('0x2f')]:_0xc625df[_0x534e('0x2a')];if(_0x11b459['query']['includeAll']){_0x176147[_0x534e('0x3a')]=[{'all':!![]}];}_0x176147=_['merge']({},_0x176147,_0x11b459[_0x534e('0x59')]);return db[_0x534e('0x43')][_0x534e('0x5a')](_0x176147)[_0x534e('0x25')](handleEntityNotFound(_0x21bfa2,null))[_0x534e('0x25')](respondWithResult(_0x21bfa2,null))['catch'](handleError(_0x21bfa2,null));};exports[_0x534e('0x5b')]=function(_0x2de255,_0x51f591){return db['OpenchannelInteraction'][_0x534e('0x5b')](_0x2de255['body'],{})['then'](respondWithResult(_0x51f591,0xc9))[_0x534e('0x54')](handleError(_0x51f591,null));};exports[_0x534e('0x24')]=function(_0x18c329,_0x482a1f){if(_0x18c329[_0x534e('0x5c')]['id']){delete _0x18c329[_0x534e('0x5c')]['id'];}return db['OpenchannelInteraction']['find']({'where':{'id':_0x18c329[_0x534e('0x56')]['id']}})[_0x534e('0x25')](handleEntityNotFound(_0x482a1f,null))['then'](saveUpdates(_0x18c329['body'],null))[_0x534e('0x25')](respondWithResult(_0x482a1f,null))['catch'](handleError(_0x482a1f,null));};exports['destroy']=function(_0x4a8e4b,_0x935a18){return db[_0x534e('0x43')][_0x534e('0x5a')]({'where':{'id':_0x4a8e4b[_0x534e('0x56')]['id']}})[_0x534e('0x25')](handleEntityNotFound(_0x935a18,null))[_0x534e('0x25')](removeEntity(_0x935a18,null))[_0x534e('0x54')](handleError(_0x935a18,null));};exports[_0x534e('0x5d')]=function(_0x238a4c,_0x464b0c){return db['OpenchannelInteraction'][_0x534e('0x5d')]()[_0x534e('0x25')](respondWithResult(_0x464b0c,null))[_0x534e('0x54')](handleError(_0x464b0c,null));};exports[_0x534e('0x5e')]=function(_0xff3569,_0x5c9004,_0x42f39f){return db['OpenchannelMessage'][_0x534e('0x5a')]({'where':{'id':_0xff3569[_0x534e('0x56')]['id']}})[_0x534e('0x25')](handleEntityNotFound(_0x5c9004,null))[_0x534e('0x25')](function(_0x581d5e){if(_0x581d5e){return _0x581d5e[_0x534e('0x5e')](_0xff3569['body'][_0x534e('0x5f')],_[_0x534e('0x60')](_0xff3569[_0x534e('0x5c')],[_0x534e('0x5f'),'id'])||{});}})[_0x534e('0x25')](respondWithResult(_0x5c9004,null))[_0x534e('0x54')](handleError(_0x5c9004,null));};exports[_0x534e('0x61')]=function(_0x35a0c6,_0x5775e7,_0x4ef094){var _0x104148={'raw':![],'where':{}};var _0x1e6cd1={};var _0x21a6f6={'count':0x0,'rows':[]};return db['OpenchannelInteraction'][_0x534e('0x62')]({'where':{'id':_0x35a0c6[_0x534e('0x56')]['id']}})[_0x534e('0x25')](handleEntityNotFound(_0x5775e7,null))[_0x534e('0x25')](function(_0x29c1d4){if(_0x29c1d4){_0x1e6cd1['model']=_[_0x534e('0x2b')](db[_0x534e('0x40')][_0x534e('0x57')]);_0x1e6cd1['query']=_['keys'](_0x35a0c6[_0x534e('0x2c')]);_0x1e6cd1[_0x534e('0x2d')]=_['intersection'](_0x1e6cd1[_0x534e('0x2a')],_0x1e6cd1[_0x534e('0x2c')]);_0x104148[_0x534e('0x2f')]=_['intersection'](_0x1e6cd1['model'],qs[_0x534e('0x30')](_0x35a0c6[_0x534e('0x2c')][_0x534e('0x30')]));_0x104148[_0x534e('0x2f')]=_0x104148[_0x534e('0x2f')]['length']?_0x104148[_0x534e('0x2f')]:_0x1e6cd1['model'];if(!_0x35a0c6[_0x534e('0x2c')][_0x534e('0x31')](_0x534e('0x63'))){_0x104148['limit']=qs[_0x534e('0x1e')](_0x35a0c6[_0x534e('0x2c')][_0x534e('0x1e')]);_0x104148[_0x534e('0x1d')]=qs['offset'](_0x35a0c6[_0x534e('0x2c')]['offset']);}_0x104148[_0x534e('0x64')]=qs[_0x534e('0x32')](_0x35a0c6['query'][_0x534e('0x32')]);_0x104148[_0x534e('0x34')]=qs[_0x534e('0x2d')](_[_0x534e('0x33')](_0x35a0c6[_0x534e('0x2c')],_0x1e6cd1['filters']));_0x104148[_0x534e('0x34')][_0x534e('0x65')]=_0x29c1d4['id'];if(_0x35a0c6[_0x534e('0x2c')][_0x534e('0x66')]){_0x104148['where']=_[_0x534e('0x39')](_0x104148['where'],{'$or':_[_0x534e('0x67')](_0x104148[_0x534e('0x2f')],function(_0x3c1f33){var _0x29ac17={};_0x29ac17[_0x3c1f33]={'$like':'%'+_0x35a0c6['query'][_0x534e('0x66')]+'%'};return _0x29ac17;})});}if(_0x35a0c6[_0x534e('0x2c')][_0x534e('0x68')]){var _0x5508f5=_0x35a0c6[_0x534e('0x2c')]['$gte']['split'](',');var _0x73d2fd={};_0x73d2fd[_0x5508f5[0x0]]={'$gte':moment(_0x5508f5[0x1])[_0x534e('0x69')]('YYYY-MM-DD\x20HH:mm:ss')};_0x104148[_0x534e('0x34')]=_[_0x534e('0x39')](_0x104148[_0x534e('0x34')],_0x73d2fd);}_0x104148=_[_0x534e('0x39')]({},_0x104148,_0x35a0c6[_0x534e('0x59')]);return db[_0x534e('0x40')]['count']({'where':_0x104148[_0x534e('0x34')]})[_0x534e('0x25')](function(_0x297b12){_0x21a6f6[_0x534e('0x44')]=_0x297b12;if(_0x35a0c6[_0x534e('0x2c')][_0x534e('0x45')]){_0x104148['include']=[{'all':!![]}];}return db['OpenchannelMessage'][_0x534e('0x53')](_0x104148);})[_0x534e('0x25')](function(_0x4e1f6d){_0x21a6f6['rows']=_0x4e1f6d;return _0x21a6f6;});}})[_0x534e('0x25')](respondWithFilteredResult(_0x5775e7,_0x104148))[_0x534e('0x54')](handleError(_0x5775e7,null));};exports['addTags']=function(_0x1602cf,_0x12f4fc,_0x3b754d){return db[_0x534e('0x43')][_0x534e('0x5a')]({'where':{'id':_0x1602cf[_0x534e('0x56')]['id']}})[_0x534e('0x25')](handleEntityNotFound(_0x12f4fc,null))[_0x534e('0x25')](function(_0x4f75b8){if(_0x4f75b8){return _0x4f75b8[_0x534e('0x6a')](_0x1602cf[_0x534e('0x5c')][_0x534e('0x5f')],_['omit'](_0x1602cf[_0x534e('0x5c')],[_0x534e('0x5f'),'id'])||{})['spread'](function(){return db['Tag'][_0x534e('0x53')]({'attributes':['id','name',_0x534e('0x50')],'where':{'id':_0x1602cf[_0x534e('0x5c')][_0x534e('0x5f')]}});})[_0x534e('0x25')](function(_0x2c134c){socket[_0x534e('0x6b')](_0x534e('0x6c'),{'id':Number(_0x1602cf[_0x534e('0x56')]['id']),'tags':_0x2c134c||[]});return{'id':Number(_0x1602cf['params']['id']),'tags':_0x2c134c||[]};});}})[_0x534e('0x25')](respondWithResult(_0x12f4fc,null))['catch'](handleError(_0x12f4fc,null));};exports[_0x534e('0x6d')]=function(_0x2b6cec,_0x53d1e4,_0x567a7c){var _0x4e39c4;return db[_0x534e('0x43')][_0x534e('0x5a')]({'where':{'id':_0x2b6cec['params']['id']}})[_0x534e('0x25')](handleEntityNotFound(_0x53d1e4,null))[_0x534e('0x25')](function(_0x447a25){if(_0x447a25){return _0x447a25['removeTags'](_0x2b6cec[_0x534e('0x2c')][_0x534e('0x5f')]);}})['then'](respondWithStatusCode(_0x53d1e4,null))[_0x534e('0x54')](handleError(_0x53d1e4,null));};exports[_0x534e('0x6e')]=function(_0x1c7e78,_0x2894c4){var _0x1f8400=moment()[_0x534e('0x6f')]()[_0x534e('0x70')]();var _0x132f24=path[_0x534e('0x71')](config[_0x534e('0x72')],_0x534e('0x73'),'files',_0x534e('0x74'));var _0x48a5cc=path[_0x534e('0x71')](config[_0x534e('0x72')],_0x534e('0x73'),'files',_0x534e('0x75'));var _0x47687f=path[_0x534e('0x71')](_0x132f24,_0x1f8400);var _0x283331=util[_0x534e('0x69')]('interaction-%s.zip',_0x1f8400);var _0x12cb7e=path['join'](_0x132f24,_0x283331);var _0x498f03=![];return db[_0x534e('0x43')][_0x534e('0x5a')]({'where':{'id':_0x1c7e78['params']['id']},'include':[{'model':db['OpenchannelMessage'],'as':_0x534e('0x4f'),'attributes':['id','body'],'include':[{'model':db[_0x534e('0x46')],'as':_0x534e('0x46'),'attributes':['id',_0x534e('0x4b')],'raw':!![]},{'model':db[_0x534e('0x49')],'as':_0x534e('0x76'),'attributes':['id',_0x534e('0x77')],'raw':!![]},{'model':db[_0x534e('0x78')],'as':_0x534e('0x78'),'raw':!![]}]}]})['then'](handleEntityNotFound(_0x2894c4,null))['then'](function(_0xcc5bec){if(_0xcc5bec){_0x498f03=!![];var _0x28948d='';var _0x55663b={'format':_0x534e('0x79'),'border':_0x534e('0x7a')};fs[_0x534e('0x7b')](_0x47687f);_0x28948d+=util['format'](_0x534e('0x7c'),_0xcc5bec['id']);_0x28948d+=util[_0x534e('0x69')](_0x534e('0x7d'),moment()[_0x534e('0x69')](_0x534e('0x7e'))[_0x534e('0x70')]());_0x28948d+=_0x534e('0x7f');for(var _0x2e55e4=0x0;_0x2e55e4<_0xcc5bec[_0x534e('0x4f')]['length'];_0x2e55e4++){var _0x5a523b=_0xcc5bec['Messages'][_0x2e55e4];_0x28948d+=_0x534e('0x80');_0x28948d+=util[_0x534e('0x69')](_0x534e('0x81'),_0x5a523b[_0x534e('0x46')]?_0x5a523b[_0x534e('0x46')][_0x534e('0x4b')]:_0x5a523b[_0x534e('0x76')][_0x534e('0x77')],_0x5a523b['body']);_0x28948d+=_0x534e('0x82');if(_0x5a523b['Attachment']){var _0x369ed6=_0x5a523b['Attachment'];var _0x5066db=path['join'](_0x48a5cc,_0x369ed6[_0x534e('0x83')]);if(fs['existsSync'](_0x5066db)){fs[_0x534e('0x84')](_0x5066db)[_0x534e('0x85')](fs[_0x534e('0x86')](path['join'](_0x47687f,_0x369ed6[_0x534e('0x83')])));}}}return new BPromise(function(_0x5a5210,_0x4a1d7d){pdf[_0x534e('0x5b')](_0x28948d,_0x55663b)[_0x534e('0x87')](path[_0x534e('0x71')](_0x47687f,_0x534e('0x88')+_0x1f8400+'.pdf'),function(_0x316a75,_0x1380c9){if(_0x316a75)return _0x4a1d7d(_0x316a75);_0x5a5210(_0x1380c9);});});}})[_0x534e('0x25')](function(){if(_0x498f03){return new BPromise(function(_0x1100ff,_0x4bb4a0){zipdir(_0x47687f,{'saveTo':_0x12cb7e},function(_0x4e6a71,_0x91af7b){if(_0x4e6a71)return _0x4bb4a0(_0x4e6a71);return _0x1100ff(_0x91af7b);});});}})[_0x534e('0x25')](function(){if(_0x498f03){return new BPromise(function(_0x37b923,_0x7aec59){rimraf(_0x47687f,function(_0x5cf127){if(_0x5cf127)_0x7aec59(_0x5cf127);return _0x37b923();});});}})[_0x534e('0x25')](function(){if(_0x498f03){return _0x2894c4[_0x534e('0x6e')](_0x12cb7e,_0x283331,function(_0x2ceb78){if(_0x2ceb78){console[_0x534e('0x89')](_0x534e('0x8a'),_0x2ceb78);}else{fs[_0x534e('0x8b')](_0x12cb7e);}});}else{return _0x2894c4[_0x534e('0x1a')](0xc8);}})[_0x534e('0x54')](handleError(_0x2894c4,null));};
\ No newline at end of file
+var _0x75f0=['../../mysqldb','redis','defaults','localhost','socket.io-emitter','./openchannelInteraction.socket','register','sendStatus','status','json','offset','limit','set','Content-Range','apply','reject','update','then','destroy','end','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','type','key','VIRTUAL','field','options','include','tag','push','Tag','Tags','distinct','read','OpenchannelMessage','direction','createdAt','OpenchannelInteraction','count','includeAll','Users','fullname','CmContact','Contact','User','Owner','OpenchannelAccount','Account','color','ThroughTags','findAll','rows','catch','show','params','merge','find','create','body','describe','addMessage','ids','getMessages','findOne','nolimit','OpenchannelInteractionId','filter','map','$gte','split','YYYY-MM-DD\x20HH:mm:ss','addTags','omit','spread','emit','openchannelInteractionTags:save','removeTags','download','unix','toString','join','root','files','tmp','server','attachments','format','firstName','Attachment','1cm','mkdirSync','<h1>Openchannel\x20Interaction:\x20#%d</h1>','<h2>Date:\x20%s</h2>','MMMM\x20Do\x20YYYY,\x20HH:mm:ss','<hr>','Messages','<div\x20style=\x22border-style:\x20solid;\x20border-width:\x201px;\x20margin:\x203px;\x22>','<p\x20style=\x22margin:\x203px;\x22>%s:\x20%s</p>','basename','existsSync','createWriteStream','toFile','interaction-','log','unlinkSync','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','sox','to-csv','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','api','../../config/utils','../../config/environment'];(function(_0x5ac4e1,_0xba424b){var _0x55e25b=function(_0x2f44e6){while(--_0x2f44e6){_0x5ac4e1['push'](_0x5ac4e1['shift']());}};_0x55e25b(++_0xba424b);}(_0x75f0,0x196));var _0x075f=function(_0x20029c,_0x42e8e2){_0x20029c=_0x20029c-0x0;var _0x1f602e=_0x75f0[_0x20029c];return _0x1f602e;};'use strict';var pdf=require(_0x075f('0x0'));var emlformat=require(_0x075f('0x1'));var rimraf=require(_0x075f('0x2'));var zipdir=require(_0x075f('0x3'));var jsonpatch=require(_0x075f('0x4'));var rp=require(_0x075f('0x5'));var moment=require(_0x075f('0x6'));var BPromise=require(_0x075f('0x7'));var Mustache=require(_0x075f('0x8'));var util=require('util');var path=require(_0x075f('0x9'));var sox=require(_0x075f('0xa'));var csv=require(_0x075f('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x075f('0xc'));var crypto=require('crypto');var jsforce=require(_0x075f('0xd'));var deskjs=require(_0x075f('0xe'));var toCsv=require('to-csv');var querystring=require(_0x075f('0xf'));var Papa=require(_0x075f('0x10'));var authService=require(_0x075f('0x11'));var hardwareService=require(_0x075f('0x12'));var Redis=require(_0x075f('0x13'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x075f('0x14'));var utils=require(_0x075f('0x15'));var config=require(_0x075f('0x16'));var db=require(_0x075f('0x17'))['db'];config[_0x075f('0x18')]=_[_0x075f('0x19')](config[_0x075f('0x18')],{'host':_0x075f('0x1a'),'port':0x18eb});var socket=require(_0x075f('0x1b'))(new Redis(config[_0x075f('0x18')]));require(_0x075f('0x1c'))[_0x075f('0x1d')](socket);function respondWithStatusCode(_0x255fe7,_0x3839f5){_0x3839f5=_0x3839f5||0xcc;return function(_0x26df3d){if(_0x26df3d){return _0x255fe7[_0x075f('0x1e')](_0x3839f5);}return _0x255fe7[_0x075f('0x1f')](_0x3839f5)['end']();};}function respondWithResult(_0x3a9807,_0x4c3c7c){_0x4c3c7c=_0x4c3c7c||0xc8;return function(_0x4c33f2){if(_0x4c33f2){return _0x3a9807[_0x075f('0x1f')](_0x4c3c7c)[_0x075f('0x20')](_0x4c33f2);}};}function respondWithFilteredResult(_0x146235,_0x4d31d8){return function(_0x26e52d){if(_0x26e52d){var _0x1d6a08=_0x26e52d['count'],_0x55a625=_0x4d31d8['offset'],_0x4cc5ab=_0x4d31d8[_0x075f('0x21')]+_0x4d31d8[_0x075f('0x22')],_0x355070;if(_0x4cc5ab>=_0x1d6a08){_0x4cc5ab=_0x1d6a08;_0x355070=0xc8;}else{_0x355070=0xce;}_0x146235[_0x075f('0x1f')](_0x355070);return _0x146235[_0x075f('0x23')](_0x075f('0x24'),_0x55a625+'-'+_0x4cc5ab+'/'+_0x1d6a08)[_0x075f('0x20')](_0x26e52d);}return null;};}function patchUpdates(_0x2bfede){return function(_0x30b678){try{jsonpatch[_0x075f('0x25')](_0x30b678,_0x2bfede,!![]);}catch(_0x85f244){return BPromise[_0x075f('0x26')](_0x85f244);}return _0x30b678['save']();};}function saveUpdates(_0x3004e1,_0x2eacad){return function(_0x14f5b7){if(_0x14f5b7){return _0x14f5b7[_0x075f('0x27')](_0x3004e1)[_0x075f('0x28')](function(_0x303dcc){return _0x303dcc;});}return null;};}function removeEntity(_0x33e870,_0x247e5e){return function(_0x167e19){if(_0x167e19){return _0x167e19[_0x075f('0x29')]()[_0x075f('0x28')](function(){_0x33e870[_0x075f('0x1f')](0xcc)[_0x075f('0x2a')]();});}};}function handleEntityNotFound(_0x508a8c,_0x30186b){return function(_0x5c284b){if(!_0x5c284b){_0x508a8c[_0x075f('0x1e')](0x194);}return _0x5c284b;};}function handleError(_0x59168c,_0x37415c){_0x37415c=_0x37415c||0x1f4;return function(_0x546529){logger['error'](_0x546529['stack']);if(_0x546529[_0x075f('0x2b')]){delete _0x546529['name'];}_0x59168c[_0x075f('0x1f')](_0x37415c)[_0x075f('0x2c')](_0x546529);};}exports[_0x075f('0x2d')]=function(_0x1d0afe,_0x523156){var _0x520f5b={},_0x2005bd={},_0x186e99={'count':0x0,'rows':[]};var _0x65b08e=db['OpenchannelInteraction'][_0x075f('0x2e')];_0x2005bd[_0x075f('0x2f')]=_[_0x075f('0x30')](_0x65b08e);_0x2005bd['query']=_[_0x075f('0x30')](_0x1d0afe[_0x075f('0x31')]);_0x2005bd[_0x075f('0x32')]=_[_0x075f('0x33')](_0x2005bd[_0x075f('0x2f')],_0x2005bd[_0x075f('0x31')]);_0x520f5b[_0x075f('0x34')]=_[_0x075f('0x33')](_0x2005bd[_0x075f('0x2f')],qs[_0x075f('0x35')](_0x1d0afe[_0x075f('0x31')][_0x075f('0x35')]));_0x520f5b[_0x075f('0x34')]=_0x520f5b['attributes'][_0x075f('0x36')]?_0x520f5b[_0x075f('0x34')]:_0x2005bd[_0x075f('0x2f')];if(!_0x1d0afe[_0x075f('0x31')][_0x075f('0x37')]('nolimit')){_0x520f5b[_0x075f('0x22')]=qs['limit'](_0x1d0afe[_0x075f('0x31')][_0x075f('0x22')]);_0x520f5b[_0x075f('0x21')]=qs[_0x075f('0x21')](_0x1d0afe['query'][_0x075f('0x21')]);}_0x520f5b[_0x075f('0x38')]=qs[_0x075f('0x39')](_0x1d0afe[_0x075f('0x31')][_0x075f('0x39')]);_0x520f5b[_0x075f('0x3a')]=qs['filters'](_[_0x075f('0x3b')](_0x1d0afe['query'],_0x2005bd[_0x075f('0x32')]));if(_0x1d0afe[_0x075f('0x31')]['filter']){_0x520f5b[_0x075f('0x3a')]=_['merge'](_0x520f5b['where'],{'$or':_['map'](_0x65b08e,function(_0x3af1ab){if(_0x3af1ab[_0x075f('0x3c')][_0x075f('0x3d')]!==_0x075f('0x3e')){var _0x5570b3={};_0x5570b3[_0x3af1ab[_0x075f('0x3f')]]={'$like':'%'+_0x1d0afe['query']['filter']+'%'};return _0x5570b3;}})});}_0x520f5b=_['merge']({},_0x520f5b,_0x1d0afe[_0x075f('0x40')]);var _0x546a2b={'where':_0x520f5b[_0x075f('0x3a')]};_0x546a2b[_0x075f('0x41')]=[];if(_0x1d0afe['query'][_0x075f('0x42')]){_0x546a2b[_0x075f('0x41')][_0x075f('0x43')]({'model':db[_0x075f('0x44')],'as':_0x075f('0x45'),'attributes':['id'],'where':{'id':_0x1d0afe['query']['tag']},'required':!![]});_0x546a2b[_0x075f('0x46')]=!![];}if(_0x1d0afe[_0x075f('0x31')][_0x075f('0x47')]){_0x546a2b[_0x075f('0x41')][_0x075f('0x43')]({'model':db[_0x075f('0x48')],'as':'Messages','attributes':['id',_0x075f('0x49'),_0x075f('0x4a'),'read'],'where':{'direction':'in','read':_0x1d0afe[_0x075f('0x31')]['read']||![]},'required':!![]});_0x546a2b['distinct']=!![];}return db[_0x075f('0x4b')][_0x075f('0x4c')](_0x546a2b)['then'](function(_0x356c10){_0x186e99['count']=_0x356c10;if(_0x1d0afe[_0x075f('0x31')][_0x075f('0x4d')]){_0x520f5b[_0x075f('0x41')]=[{'model':db['User'],'as':_0x075f('0x4e'),'required':![],'attributes':['id','name',_0x075f('0x4f')]},{'model':db[_0x075f('0x50')],'as':_0x075f('0x51'),'required':![]},{'model':db[_0x075f('0x52')],'as':_0x075f('0x53'),'attributes':[_0x075f('0x2b'),_0x075f('0x4f'),'internal'],'required':![]},{'model':db[_0x075f('0x54')],'as':_0x075f('0x55'),'attributes':[_0x075f('0x2b'),_0x075f('0x3d')],'required':![]},{'model':db[_0x075f('0x48')],'as':'Messages','attributes':['id','direction',_0x075f('0x4a'),_0x075f('0x47')],'where':{'direction':'in','read':_0x1d0afe[_0x075f('0x31')][_0x075f('0x47')]||![]},'required':_0x1d0afe['query'][_0x075f('0x47')]||![]},{'model':db[_0x075f('0x44')],'as':_0x075f('0x45'),'attributes':['id',_0x075f('0x2b'),_0x075f('0x56')],'required':_0x1d0afe[_0x075f('0x31')][_0x075f('0x42')]?!![]:![]},{'model':db['Tag'],'as':_0x075f('0x57'),'attributes':['id','name',_0x075f('0x56')],'through':_0x1d0afe[_0x075f('0x31')][_0x075f('0x42')]?{'attributes':[],'where':{'TagId':_0x1d0afe[_0x075f('0x31')][_0x075f('0x42')]||undefined}}:{},'required':_0x1d0afe[_0x075f('0x31')][_0x075f('0x42')]?!![]:![]}];}return db[_0x075f('0x4b')][_0x075f('0x58')](_0x520f5b);})[_0x075f('0x28')](function(_0x2de6e1){_0x186e99[_0x075f('0x59')]=_0x2de6e1;return _0x186e99;})[_0x075f('0x28')](respondWithFilteredResult(_0x523156,_0x520f5b))[_0x075f('0x5a')](handleError(_0x523156,null));};exports[_0x075f('0x5b')]=function(_0x2b7d23,_0x3effef){var _0xbaf4ae={'raw':![],'where':{'id':_0x2b7d23[_0x075f('0x5c')]['id']}},_0x11f77e={};_0x11f77e[_0x075f('0x2f')]=_[_0x075f('0x30')](db['OpenchannelInteraction'][_0x075f('0x2e')]);_0x11f77e[_0x075f('0x31')]=_[_0x075f('0x30')](_0x2b7d23[_0x075f('0x31')]);_0x11f77e[_0x075f('0x32')]=_[_0x075f('0x33')](_0x11f77e['model'],_0x11f77e[_0x075f('0x31')]);_0xbaf4ae[_0x075f('0x34')]=_['intersection'](_0x11f77e[_0x075f('0x2f')],qs[_0x075f('0x35')](_0x2b7d23[_0x075f('0x31')][_0x075f('0x35')]));_0xbaf4ae[_0x075f('0x34')]=_0xbaf4ae[_0x075f('0x34')][_0x075f('0x36')]?_0xbaf4ae[_0x075f('0x34')]:_0x11f77e['model'];if(_0x2b7d23[_0x075f('0x31')][_0x075f('0x4d')]){_0xbaf4ae['include']=[{'all':!![]}];}_0xbaf4ae=_[_0x075f('0x5d')]({},_0xbaf4ae,_0x2b7d23[_0x075f('0x40')]);return db[_0x075f('0x4b')][_0x075f('0x5e')](_0xbaf4ae)[_0x075f('0x28')](handleEntityNotFound(_0x3effef,null))[_0x075f('0x28')](respondWithResult(_0x3effef,null))['catch'](handleError(_0x3effef,null));};exports[_0x075f('0x5f')]=function(_0xe2d5b6,_0x18fa15){return db[_0x075f('0x4b')][_0x075f('0x5f')](_0xe2d5b6[_0x075f('0x60')],{})[_0x075f('0x28')](respondWithResult(_0x18fa15,0xc9))['catch'](handleError(_0x18fa15,null));};exports[_0x075f('0x27')]=function(_0x43f892,_0x514909){if(_0x43f892[_0x075f('0x60')]['id']){delete _0x43f892[_0x075f('0x60')]['id'];}return db[_0x075f('0x4b')][_0x075f('0x5e')]({'where':{'id':_0x43f892[_0x075f('0x5c')]['id']}})[_0x075f('0x28')](handleEntityNotFound(_0x514909,null))['then'](saveUpdates(_0x43f892[_0x075f('0x60')],null))[_0x075f('0x28')](respondWithResult(_0x514909,null))[_0x075f('0x5a')](handleError(_0x514909,null));};exports[_0x075f('0x29')]=function(_0x1a1ec0,_0x43bb83){return db[_0x075f('0x4b')]['find']({'where':{'id':_0x1a1ec0[_0x075f('0x5c')]['id']}})['then'](handleEntityNotFound(_0x43bb83,null))['then'](removeEntity(_0x43bb83,null))[_0x075f('0x5a')](handleError(_0x43bb83,null));};exports[_0x075f('0x61')]=function(_0xdde2c9,_0x53fca6){return db['OpenchannelInteraction']['describe']()[_0x075f('0x28')](respondWithResult(_0x53fca6,null))[_0x075f('0x5a')](handleError(_0x53fca6,null));};exports[_0x075f('0x62')]=function(_0x7d65b9,_0x466661,_0x1a0c94){return db[_0x075f('0x48')]['find']({'where':{'id':_0x7d65b9[_0x075f('0x5c')]['id']}})[_0x075f('0x28')](handleEntityNotFound(_0x466661,null))[_0x075f('0x28')](function(_0x17c00c){if(_0x17c00c){return _0x17c00c[_0x075f('0x62')](_0x7d65b9[_0x075f('0x60')][_0x075f('0x63')],_['omit'](_0x7d65b9[_0x075f('0x60')],[_0x075f('0x63'),'id'])||{});}})['then'](respondWithResult(_0x466661,null))[_0x075f('0x5a')](handleError(_0x466661,null));};exports[_0x075f('0x64')]=function(_0x4378e4,_0x4a1446,_0x25dc0d){var _0x2410cc={'raw':![],'where':{}};var _0x4d3c72={};var _0x1aeeb8={'count':0x0,'rows':[]};return db[_0x075f('0x4b')][_0x075f('0x65')]({'where':{'id':_0x4378e4['params']['id']}})['then'](handleEntityNotFound(_0x4a1446,null))[_0x075f('0x28')](function(_0x1a1c28){if(_0x1a1c28){_0x4d3c72[_0x075f('0x2f')]=_[_0x075f('0x30')](db[_0x075f('0x48')][_0x075f('0x2e')]);_0x4d3c72[_0x075f('0x31')]=_['keys'](_0x4378e4[_0x075f('0x31')]);_0x4d3c72[_0x075f('0x32')]=_[_0x075f('0x33')](_0x4d3c72[_0x075f('0x2f')],_0x4d3c72[_0x075f('0x31')]);_0x2410cc[_0x075f('0x34')]=_['intersection'](_0x4d3c72[_0x075f('0x2f')],qs[_0x075f('0x35')](_0x4378e4[_0x075f('0x31')][_0x075f('0x35')]));_0x2410cc[_0x075f('0x34')]=_0x2410cc[_0x075f('0x34')]['length']?_0x2410cc[_0x075f('0x34')]:_0x4d3c72[_0x075f('0x2f')];if(!_0x4378e4['query'][_0x075f('0x37')](_0x075f('0x66'))){_0x2410cc[_0x075f('0x22')]=qs['limit'](_0x4378e4[_0x075f('0x31')][_0x075f('0x22')]);_0x2410cc[_0x075f('0x21')]=qs[_0x075f('0x21')](_0x4378e4[_0x075f('0x31')][_0x075f('0x21')]);}_0x2410cc[_0x075f('0x38')]=qs['sort'](_0x4378e4['query'][_0x075f('0x39')]);_0x2410cc[_0x075f('0x3a')]=qs[_0x075f('0x32')](_['pick'](_0x4378e4[_0x075f('0x31')],_0x4d3c72[_0x075f('0x32')]));_0x2410cc[_0x075f('0x3a')][_0x075f('0x67')]=_0x1a1c28['id'];if(_0x4378e4[_0x075f('0x31')][_0x075f('0x68')]){_0x2410cc[_0x075f('0x3a')]=_[_0x075f('0x5d')](_0x2410cc[_0x075f('0x3a')],{'$or':_[_0x075f('0x69')](_0x2410cc[_0x075f('0x34')],function(_0x4a422a){var _0x28404d={};_0x28404d[_0x4a422a]={'$like':'%'+_0x4378e4[_0x075f('0x31')]['filter']+'%'};return _0x28404d;})});}if(_0x4378e4['query']['$gte']){var _0x144cd6=_0x4378e4[_0x075f('0x31')][_0x075f('0x6a')][_0x075f('0x6b')](',');var _0x4034af={};_0x4034af[_0x144cd6[0x0]]={'$gte':moment(_0x144cd6[0x1])['format'](_0x075f('0x6c'))};_0x2410cc[_0x075f('0x3a')]=_[_0x075f('0x5d')](_0x2410cc[_0x075f('0x3a')],_0x4034af);}_0x2410cc=_[_0x075f('0x5d')]({},_0x2410cc,_0x4378e4[_0x075f('0x40')]);return db[_0x075f('0x48')][_0x075f('0x4c')]({'where':_0x2410cc['where']})[_0x075f('0x28')](function(_0x56b45b){_0x1aeeb8['count']=_0x56b45b;if(_0x4378e4['query'][_0x075f('0x4d')]){_0x2410cc[_0x075f('0x41')]=[{'all':!![]}];}return db[_0x075f('0x48')][_0x075f('0x58')](_0x2410cc);})[_0x075f('0x28')](function(_0x5e4117){_0x1aeeb8[_0x075f('0x59')]=_0x5e4117;return _0x1aeeb8;});}})[_0x075f('0x28')](respondWithFilteredResult(_0x4a1446,_0x2410cc))[_0x075f('0x5a')](handleError(_0x4a1446,null));};exports[_0x075f('0x6d')]=function(_0x3f3c7f,_0x4b4a73,_0x48002a){return db[_0x075f('0x4b')]['find']({'where':{'id':_0x3f3c7f[_0x075f('0x5c')]['id']}})[_0x075f('0x28')](handleEntityNotFound(_0x4b4a73,null))['then'](function(_0x52a1ca){if(_0x52a1ca){return _0x52a1ca['setTags'](_0x3f3c7f[_0x075f('0x60')][_0x075f('0x63')],_[_0x075f('0x6e')](_0x3f3c7f[_0x075f('0x60')],['ids','id'])||{})[_0x075f('0x6f')](function(){return db[_0x075f('0x44')][_0x075f('0x58')]({'attributes':['id',_0x075f('0x2b'),_0x075f('0x56')],'where':{'id':_0x3f3c7f['body'][_0x075f('0x63')]}});})['then'](function(_0x479c5c){socket[_0x075f('0x70')](_0x075f('0x71'),{'id':Number(_0x3f3c7f[_0x075f('0x5c')]['id']),'tags':_0x479c5c||[]});return{'id':Number(_0x3f3c7f['params']['id']),'tags':_0x479c5c||[]};});}})[_0x075f('0x28')](respondWithResult(_0x4b4a73,null))[_0x075f('0x5a')](handleError(_0x4b4a73,null));};exports['removeTags']=function(_0x108a77,_0x20a982,_0xa75a2a){var _0x2f6dc1;return db['OpenchannelInteraction'][_0x075f('0x5e')]({'where':{'id':_0x108a77[_0x075f('0x5c')]['id']}})[_0x075f('0x28')](handleEntityNotFound(_0x20a982,null))[_0x075f('0x28')](function(_0x5f4898){if(_0x5f4898){return _0x5f4898[_0x075f('0x72')](_0x108a77['query'][_0x075f('0x63')]);}})[_0x075f('0x28')](respondWithStatusCode(_0x20a982,null))['catch'](handleError(_0x20a982,null));};exports[_0x075f('0x73')]=function(_0x1d0829,_0x533cf8){var _0x35838d=moment()[_0x075f('0x74')]()[_0x075f('0x75')]();var _0x27b1cc=path[_0x075f('0x76')](config[_0x075f('0x77')],'server',_0x075f('0x78'),_0x075f('0x79'));var _0x3f7931=path[_0x075f('0x76')](config[_0x075f('0x77')],_0x075f('0x7a'),_0x075f('0x78'),_0x075f('0x7b'));var _0xcebd6b=path[_0x075f('0x76')](_0x27b1cc,_0x35838d);var _0x27bcd0=util[_0x075f('0x7c')]('interaction-%s.zip',_0x35838d);var _0x2b858a=path['join'](_0x27b1cc,_0x27bcd0);var _0x2d5617=![];return db[_0x075f('0x4b')][_0x075f('0x5e')]({'where':{'id':_0x1d0829[_0x075f('0x5c')]['id']},'include':[{'model':db[_0x075f('0x48')],'as':'Messages','attributes':['id',_0x075f('0x60')],'include':[{'model':db[_0x075f('0x52')],'as':'User','attributes':['id','fullname'],'raw':!![]},{'model':db[_0x075f('0x50')],'as':_0x075f('0x51'),'attributes':['id',_0x075f('0x7d')],'raw':!![]},{'model':db[_0x075f('0x7e')],'as':_0x075f('0x7e'),'raw':!![]}]}]})['then'](handleEntityNotFound(_0x533cf8,null))[_0x075f('0x28')](function(_0x49379c){if(_0x49379c){_0x2d5617=!![];var _0x528cd8='';var _0x3c93fc={'format':'Letter','border':_0x075f('0x7f')};fs[_0x075f('0x80')](_0xcebd6b);_0x528cd8+=util[_0x075f('0x7c')](_0x075f('0x81'),_0x49379c['id']);_0x528cd8+=util[_0x075f('0x7c')](_0x075f('0x82'),moment()['format'](_0x075f('0x83'))['toString']());_0x528cd8+=_0x075f('0x84');for(var _0x423ecb=0x0;_0x423ecb<_0x49379c[_0x075f('0x85')][_0x075f('0x36')];_0x423ecb++){var _0x6d141c=_0x49379c[_0x075f('0x85')][_0x423ecb];_0x528cd8+=_0x075f('0x86');_0x528cd8+=util[_0x075f('0x7c')](_0x075f('0x87'),_0x6d141c['User']?_0x6d141c[_0x075f('0x52')][_0x075f('0x4f')]:_0x6d141c[_0x075f('0x51')][_0x075f('0x7d')],_0x6d141c[_0x075f('0x60')]);_0x528cd8+='</div>';if(_0x6d141c[_0x075f('0x7e')]){var _0x255aed=_0x6d141c[_0x075f('0x7e')];var _0x4bff3e=path[_0x075f('0x76')](_0x3f7931,_0x255aed[_0x075f('0x88')]);if(fs[_0x075f('0x89')](_0x4bff3e)){fs['createReadStream'](_0x4bff3e)['pipe'](fs[_0x075f('0x8a')](path[_0x075f('0x76')](_0xcebd6b,_0x255aed['basename'])));}}}return new BPromise(function(_0xaf74e7,_0x153122){pdf[_0x075f('0x5f')](_0x528cd8,_0x3c93fc)[_0x075f('0x8b')](path['join'](_0xcebd6b,_0x075f('0x8c')+_0x35838d+'.pdf'),function(_0x33c59e,_0x58c256){if(_0x33c59e)return _0x153122(_0x33c59e);_0xaf74e7(_0x58c256);});});}})[_0x075f('0x28')](function(){if(_0x2d5617){return new BPromise(function(_0x33337d,_0x24f900){zipdir(_0xcebd6b,{'saveTo':_0x2b858a},function(_0x55c870,_0x10c62d){if(_0x55c870)return _0x24f900(_0x55c870);return _0x33337d(_0x10c62d);});});}})[_0x075f('0x28')](function(){if(_0x2d5617){return new BPromise(function(_0x14862c,_0x3b20ff){rimraf(_0xcebd6b,function(_0x8c9d81){if(_0x8c9d81)_0x3b20ff(_0x8c9d81);return _0x14862c();});});}})['then'](function(){if(_0x2d5617){return _0x533cf8[_0x075f('0x73')](_0x2b858a,_0x27bcd0,function(_0x167288){if(_0x167288){console[_0x075f('0x8d')]('err',_0x167288);}else{fs[_0x075f('0x8e')](_0x2b858a);}});}else{return _0x533cf8[_0x075f('0x1e')](0xc8);}})['catch'](handleError(_0x533cf8,null));};
\ No newline at end of file
index adf616d..e98f990 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x31f6=['hasOwnProperty','hook','exports','events','../../mysqldb','OpenchannelInteraction','setMaxListeners','save','update','remove','emit'];(function(_0x259d59,_0x45debc){var _0x1bd3fd=function(_0x240302){while(--_0x240302){_0x259d59['push'](_0x259d59['shift']());}};_0x1bd3fd(++_0x45debc);}(_0x31f6,0x1a5));var _0x631f=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x31f6[_0x57b54c];return _0x59cc19;};'use strict';var EventEmitter=require(_0x631f('0x0'));var OpenchannelInteraction=require(_0x631f('0x1'))['db'][_0x631f('0x2')];var OpenchannelInteractionEvents=new EventEmitter();OpenchannelInteractionEvents[_0x631f('0x3')](0x0);var events={'afterCreate':_0x631f('0x4'),'afterUpdate':_0x631f('0x5'),'afterDestroy':_0x631f('0x6')};function emitEvent(_0x1b3679){return function(_0x492a11,_0x5104d6,_0x52743a){OpenchannelInteractionEvents[_0x631f('0x7')](_0x1b3679+':'+_0x492a11['id'],_0x492a11);OpenchannelInteractionEvents[_0x631f('0x7')](_0x1b3679,_0x492a11);_0x52743a(null);};}for(var e in events){if(events[_0x631f('0x8')](e)){var event=events[e];OpenchannelInteraction[_0x631f('0x9')](e,emitEvent(event));}}module[_0x631f('0xa')]=OpenchannelInteractionEvents;
\ No newline at end of file
+var _0x2e61=['../../mysqldb','OpenchannelInteraction','save','remove','emit','hasOwnProperty','hook','exports','events'];(function(_0x488437,_0x545872){var _0x5535b3=function(_0x3ea4e3){while(--_0x3ea4e3){_0x488437['push'](_0x488437['shift']());}};_0x5535b3(++_0x545872);}(_0x2e61,0x1af));var _0x12e6=function(_0x2c66d9,_0x1dabd4){_0x2c66d9=_0x2c66d9-0x0;var _0xbd2f2a=_0x2e61[_0x2c66d9];return _0xbd2f2a;};'use strict';var EventEmitter=require(_0x12e6('0x0'));var OpenchannelInteraction=require(_0x12e6('0x1'))['db'][_0x12e6('0x2')];var OpenchannelInteractionEvents=new EventEmitter();OpenchannelInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x12e6('0x3'),'afterUpdate':'update','afterDestroy':_0x12e6('0x4')};function emitEvent(_0x462242){return function(_0x7e86f2,_0x2e3792,_0x5db9e9){OpenchannelInteractionEvents[_0x12e6('0x5')](_0x462242+':'+_0x7e86f2['id'],_0x7e86f2);OpenchannelInteractionEvents[_0x12e6('0x5')](_0x462242,_0x7e86f2);_0x5db9e9(null);};}for(var e in events){if(events[_0x12e6('0x6')](e)){var event=events[e];OpenchannelInteraction[_0x12e6('0x7')](e,emitEvent(event));}}module[_0x12e6('0x8')]=OpenchannelInteractionEvents;
\ No newline at end of file
index 661a10d..dfe5e9d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2c55=['util','../../config/logger','api','moment','bluebird','request-promise','./openchannelInteraction.attributes','exports','define','OpenchannelInteraction','changed','closed','closedAt','format','YYYY-MM-DD\x20HH:mm:ss','lodash'];(function(_0x4c7407,_0x18d686){var _0x44719f=function(_0x486238){while(--_0x486238){_0x4c7407['push'](_0x4c7407['shift']());}};_0x44719f(++_0x18d686);}(_0x2c55,0x18f));var _0x52c5=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x2c55[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0x52c5('0x0'));var util=require(_0x52c5('0x1'));var logger=require(_0x52c5('0x2'))(_0x52c5('0x3'));var moment=require(_0x52c5('0x4'));var BPromise=require(_0x52c5('0x5'));var rp=require(_0x52c5('0x6'));var attributes=require(_0x52c5('0x7'));module[_0x52c5('0x8')]=function(_0xb47f05,_0x473c98){return _0xb47f05[_0x52c5('0x9')](_0x52c5('0xa'),attributes,{'tableName':'openchannel_interactions','paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x3b6301,_0xc2faee,_0xbb5269){if(_0x3b6301[_0x52c5('0xb')](_0x52c5('0xc'))){_0x3b6301[_0x52c5('0xd')]=moment()[_0x52c5('0xe')](_0x52c5('0xf'));}_0xbb5269(null,_0x3b6301);}}});};
\ No newline at end of file
+var _0x8bcf=['moment','request-promise','./openchannelInteraction.attributes','exports','openchannel_interactions','changed','closed','format','YYYY-MM-DD\x20HH:mm:ss','util','../../config/logger','api'];(function(_0x4325f7,_0x5a4935){var _0x26ff37=function(_0x58d29a){while(--_0x58d29a){_0x4325f7['push'](_0x4325f7['shift']());}};_0x26ff37(++_0x5a4935);}(_0x8bcf,0x195));var _0xf8bc=function(_0x2a98e8,_0x2fd0aa){_0x2a98e8=_0x2a98e8-0x0;var _0x5338d4=_0x8bcf[_0x2a98e8];return _0x5338d4;};'use strict';var _=require('lodash');var util=require(_0xf8bc('0x0'));var logger=require(_0xf8bc('0x1'))(_0xf8bc('0x2'));var moment=require(_0xf8bc('0x3'));var BPromise=require('bluebird');var rp=require(_0xf8bc('0x4'));var attributes=require(_0xf8bc('0x5'));module[_0xf8bc('0x6')]=function(_0x42cf4d,_0x45aaf2){return _0x42cf4d['define']('OpenchannelInteraction',attributes,{'tableName':_0xf8bc('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0x5379b0,_0x410669,_0x92762a){if(_0x5379b0[_0xf8bc('0x8')](_0xf8bc('0x9'))){_0x5379b0['closedAt']=moment()[_0xf8bc('0xa')](_0xf8bc('0xb'));}_0x92762a(null,_0x5379b0);}}});};
\ No newline at end of file
index 2b363fe..97a47ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5d58=['client','http','redis','localhost','register','request','then','info','OpenchannelInteraction,\x20%s,\x20%s','request\x20sent','debug','error','code','message','result','catch','UpdateOpenchannelInteraction','update','body','raw','options','AddTagsToOpenchannelInteraction','find','where','ids','omit','AddTags','stringify','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise'];(function(_0x117128,_0x4af930){var _0x1b6054=function(_0x4f1eac){while(--_0x4f1eac){_0x117128['push'](_0x117128['shift']());}};_0x1b6054(++_0x4af930);}(_0x5d58,0x187));var _0x85d5=function(_0x4b3105,_0x43a408){_0x4b3105=_0x4b3105-0x0;var _0x233761=_0x5d58[_0x4b3105];return _0x233761;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x85d5('0x0'));var db=require(_0x85d5('0x1'))['db'];var utils=require('../../config/utils');var logger=require(_0x85d5('0x2'))(_0x85d5('0x3'));var config=require('../../config/environment');var jayson=require(_0x85d5('0x4'));var client=jayson[_0x85d5('0x5')][_0x85d5('0x6')]({'port':0x232a});config[_0x85d5('0x7')]=_['defaults'](config[_0x85d5('0x7')],{'host':_0x85d5('0x8'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x85d5('0x7')]));require('./openchannelInteraction.socket')[_0x85d5('0x9')](socket);function respondWithRpcPromise(_0x2ce6b9,_0x258f0c,_0x488dcb){return new BPromise(function(_0x499b36,_0x4e147a){return client[_0x85d5('0xa')](_0x2ce6b9,_0x488dcb)[_0x85d5('0xb')](function(_0xde1063){logger[_0x85d5('0xc')](_0x85d5('0xd'),_0x258f0c,_0x85d5('0xe'));logger[_0x85d5('0xf')]('OpenchannelInteraction,\x20%s,\x20%s,\x20%s',_0x258f0c,'request\x20sent',JSON['stringify'](_0xde1063));if(_0xde1063[_0x85d5('0x10')]){if(_0xde1063[_0x85d5('0x10')][_0x85d5('0x11')]===0x1f4){logger[_0x85d5('0x10')](_0x85d5('0xd'),_0x258f0c,_0xde1063[_0x85d5('0x10')][_0x85d5('0x12')]);return _0x4e147a(_0xde1063['error'][_0x85d5('0x12')]);}logger[_0x85d5('0x10')](_0x85d5('0xd'),_0x258f0c,_0xde1063[_0x85d5('0x10')][_0x85d5('0x12')]);return _0x499b36(_0xde1063[_0x85d5('0x10')][_0x85d5('0x12')]);}else{logger[_0x85d5('0xc')](_0x85d5('0xd'),_0x258f0c,_0x85d5('0xe'));_0x499b36(_0xde1063[_0x85d5('0x13')][_0x85d5('0x12')]);}})[_0x85d5('0x14')](function(_0x3df634){logger[_0x85d5('0x10')](_0x85d5('0xd'),_0x258f0c,_0x3df634);_0x4e147a(_0x3df634);});});}exports[_0x85d5('0x15')]=function(_0x1d6134){var _0x53bd11=this;return new Promise(function(_0xc56ad1,_0x133fa9){return db['OpenchannelInteraction'][_0x85d5('0x16')](_0x1d6134[_0x85d5('0x17')],{'raw':_0x1d6134['options']?_0x1d6134['options'][_0x85d5('0x18')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x1d6134['options']?_0x1d6134[_0x85d5('0x19')]['where']||null:null,'attributes':_0x1d6134[_0x85d5('0x19')]?_0x1d6134[_0x85d5('0x19')]['attributes']||null:null,'limit':_0x1d6134['options']?_0x1d6134['options']['limit']||null:null})[_0x85d5('0xb')](function(_0x46c06e){logger[_0x85d5('0xc')](_0x85d5('0x15'),_0x1d6134);logger[_0x85d5('0xf')](_0x85d5('0x15'),_0x1d6134,JSON['stringify'](_0x46c06e));_0xc56ad1(_0x46c06e);})[_0x85d5('0x14')](function(_0x4f8c66){logger[_0x85d5('0x10')](_0x85d5('0x15'),_0x4f8c66[_0x85d5('0x12')],_0x1d6134);_0x133fa9(_0x53bd11['error'](0x1f4,_0x4f8c66[_0x85d5('0x12')]));});});};exports[_0x85d5('0x1a')]=function(_0x815808){return new Promise(function(_0x370c97,_0x4605c5){return db['OpenchannelInteraction'][_0x85d5('0x1b')]({'where':_0x815808[_0x85d5('0x19')]?_0x815808[_0x85d5('0x19')][_0x85d5('0x1c')]||null:null})[_0x85d5('0xb')](function(_0x572daf){if(_0x572daf){return _0x572daf['addTags'](_0x815808[_0x85d5('0x17')][_0x85d5('0x1d')],_[_0x85d5('0x1e')](_0x815808[_0x85d5('0x17')],[_0x85d5('0x1d'),'id'])||{});}})['spread'](function(_0x3553c0){logger[_0x85d5('0xc')]('AddTags',_0x815808);logger['debug'](_0x85d5('0x1f'),_0x815808,JSON[_0x85d5('0x20')](_0x3553c0));_0x370c97(_0x3553c0);})['catch'](function(_0x13e772){logger['error'](_0x85d5('0x1f'),_0x13e772[_0x85d5('0x12')],_0x815808);_0x4605c5(_this['error'](0x1f4,_0x13e772[_0x85d5('0x12')]));});});};
\ No newline at end of file
+var _0x2675=['body','AddTags','catch','lodash','randomstring','ioredis','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./openchannelInteraction.socket','then','info','OpenchannelInteraction,\x20%s,\x20%s','request\x20sent','debug','OpenchannelInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','UpdateOpenchannelInteraction','OpenchannelInteraction','update','options','raw','limit','find','where','ids','omit'];(function(_0x5e495a,_0x3c4896){var _0x149657=function(_0xc5e2dd){while(--_0xc5e2dd){_0x5e495a['push'](_0x5e495a['shift']());}};_0x149657(++_0x3c4896);}(_0x2675,0x75));var _0x5267=function(_0x579b90,_0x49559a){_0x579b90=_0x579b90-0x0;var _0x4455c8=_0x2675[_0x579b90];return _0x4455c8;};'use strict';var _=require(_0x5267('0x0'));var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x5267('0x1'));var fs=require('fs');var Redis=require(_0x5267('0x2'));var db=require('../../mysqldb')['db'];var utils=require(_0x5267('0x3'));var logger=require(_0x5267('0x4'))('rpc');var config=require(_0x5267('0x5'));var jayson=require(_0x5267('0x6'));var client=jayson[_0x5267('0x7')][_0x5267('0x8')]({'port':0x232a});config[_0x5267('0x9')]=_[_0x5267('0xa')](config['redis'],{'host':_0x5267('0xb'),'port':0x18eb});var socket=require(_0x5267('0xc'))(new Redis(config['redis']));require(_0x5267('0xd'))['register'](socket);function respondWithRpcPromise(_0x3ff4e9,_0x207d47,_0x26e22b){return new BPromise(function(_0x534c2b,_0x3e6964){return client['request'](_0x3ff4e9,_0x26e22b)[_0x5267('0xe')](function(_0x5bbf00){logger[_0x5267('0xf')](_0x5267('0x10'),_0x207d47,_0x5267('0x11'));logger[_0x5267('0x12')](_0x5267('0x13'),_0x207d47,_0x5267('0x11'),JSON[_0x5267('0x14')](_0x5bbf00));if(_0x5bbf00[_0x5267('0x15')]){if(_0x5bbf00[_0x5267('0x15')][_0x5267('0x16')]===0x1f4){logger[_0x5267('0x15')](_0x5267('0x10'),_0x207d47,_0x5bbf00[_0x5267('0x15')]['message']);return _0x3e6964(_0x5bbf00['error'][_0x5267('0x17')]);}logger[_0x5267('0x15')](_0x5267('0x10'),_0x207d47,_0x5bbf00[_0x5267('0x15')][_0x5267('0x17')]);return _0x534c2b(_0x5bbf00[_0x5267('0x15')][_0x5267('0x17')]);}else{logger[_0x5267('0xf')](_0x5267('0x10'),_0x207d47,_0x5267('0x11'));_0x534c2b(_0x5bbf00[_0x5267('0x18')][_0x5267('0x17')]);}})['catch'](function(_0x18f32e){logger[_0x5267('0x15')]('OpenchannelInteraction,\x20%s,\x20%s',_0x207d47,_0x18f32e);_0x3e6964(_0x18f32e);});});}exports[_0x5267('0x19')]=function(_0x56733e){var _0x1cf835=this;return new Promise(function(_0x1019e7,_0x39c0c3){return db[_0x5267('0x1a')][_0x5267('0x1b')](_0x56733e['body'],{'raw':_0x56733e[_0x5267('0x1c')]?_0x56733e['options'][_0x5267('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x56733e[_0x5267('0x1c')]?_0x56733e[_0x5267('0x1c')]['where']||null:null,'attributes':_0x56733e['options']?_0x56733e['options']['attributes']||null:null,'limit':_0x56733e['options']?_0x56733e[_0x5267('0x1c')][_0x5267('0x1e')]||null:null})[_0x5267('0xe')](function(_0x279377){logger[_0x5267('0xf')](_0x5267('0x19'),_0x56733e);logger[_0x5267('0x12')](_0x5267('0x19'),_0x56733e,JSON[_0x5267('0x14')](_0x279377));_0x1019e7(_0x279377);})['catch'](function(_0x5cb64f){logger[_0x5267('0x15')](_0x5267('0x19'),_0x5cb64f['message'],_0x56733e);_0x39c0c3(_0x1cf835[_0x5267('0x15')](0x1f4,_0x5cb64f['message']));});});};exports['AddTagsToOpenchannelInteraction']=function(_0x43e7e7){return new Promise(function(_0x273769,_0x1f33b7){return db[_0x5267('0x1a')][_0x5267('0x1f')]({'where':_0x43e7e7['options']?_0x43e7e7['options'][_0x5267('0x20')]||null:null})[_0x5267('0xe')](function(_0x24496d){if(_0x24496d){return _0x24496d['addTags'](_0x43e7e7['body'][_0x5267('0x21')],_[_0x5267('0x22')](_0x43e7e7[_0x5267('0x23')],['ids','id'])||{});}})['spread'](function(_0x2249a1){logger[_0x5267('0xf')](_0x5267('0x24'),_0x43e7e7);logger[_0x5267('0x12')]('AddTags',_0x43e7e7,JSON[_0x5267('0x14')](_0x2249a1));_0x273769(_0x2249a1);})[_0x5267('0x25')](function(_0x4344c5){logger[_0x5267('0x15')](_0x5267('0x24'),_0x4344c5[_0x5267('0x17')],_0x43e7e7);_0x1f33b7(_this[_0x5267('0x15')](0x1f4,_0x4344c5[_0x5267('0x17')]));});});};
\ No newline at end of file
index 080d08b..67e90de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x77da=['remove','update','emit','register','length','openchannelInteraction:','save'];(function(_0x120eb9,_0x1fc422){var _0x463cd2=function(_0x1cb429){while(--_0x1cb429){_0x120eb9['push'](_0x120eb9['shift']());}};_0x463cd2(++_0x1fc422);}(_0x77da,0x1cd));var _0xa77d=function(_0x32f191,_0x16ecd0){_0x32f191=_0x32f191-0x0;var _0x15aec0=_0x77da[_0x32f191];return _0x15aec0;};'use strict';var OpenchannelInteractionEvents=require('./openchannelInteraction.events');var events=[_0xa77d('0x0'),_0xa77d('0x1'),_0xa77d('0x2')];function createListener(_0x69c601,_0x355273){return function(_0x1934a7){_0x355273[_0xa77d('0x3')](_0x69c601,_0x1934a7);};}function removeListener(_0x358b44,_0x3a05bc){return function(){OpenchannelInteractionEvents['removeListener'](_0x358b44,_0x3a05bc);};}exports[_0xa77d('0x4')]=function(_0x285e9e){for(var _0x3e3def=0x0,_0x57dbd4=events[_0xa77d('0x5')];_0x3e3def<_0x57dbd4;_0x3e3def++){var _0x45e403=events[_0x3e3def];var _0x299694=createListener(_0xa77d('0x6')+_0x45e403,_0x285e9e);OpenchannelInteractionEvents['on'](_0x45e403,_0x299694);}};
\ No newline at end of file
+var _0x55c0=['length','openchannelInteraction:','./openchannelInteraction.events','save','update','emit','removeListener'];(function(_0x2a0afd,_0x4224c6){var _0x5c998f=function(_0x5eb695){while(--_0x5eb695){_0x2a0afd['push'](_0x2a0afd['shift']());}};_0x5c998f(++_0x4224c6);}(_0x55c0,0xe2));var _0x055c=function(_0x5da0d9,_0x49ee54){_0x5da0d9=_0x5da0d9-0x0;var _0x4b6d2f=_0x55c0[_0x5da0d9];return _0x4b6d2f;};'use strict';var OpenchannelInteractionEvents=require(_0x055c('0x0'));var events=[_0x055c('0x1'),'remove',_0x055c('0x2')];function createListener(_0x2e60f5,_0x272c5e){return function(_0x595c59){_0x272c5e[_0x055c('0x3')](_0x2e60f5,_0x595c59);};}function removeListener(_0x46e4af,_0x5d238d){return function(){OpenchannelInteractionEvents[_0x055c('0x4')](_0x46e4af,_0x5d238d);};}exports['register']=function(_0x1f6b3a){for(var _0x1bbfe8=0x0,_0x1758d5=events[_0x055c('0x5')];_0x1bbfe8<_0x1758d5;_0x1bbfe8++){var _0x5cf537=events[_0x1bbfe8];var _0xe48485=createListener(_0x055c('0x6')+_0x5cf537,_0x1f6b3a);OpenchannelInteractionEvents['on'](_0x5cf537,_0xe48485);}};
\ No newline at end of file
index 52355c9..ff2e3da 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3306=['tracked','openchannelmessage:create','create','put','update','/:id/reject','delete','destroy','exports','multer','connect-timeout','Router','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/describe','describe','/:id','show'];(function(_0x20efd7,_0x59dee7){var _0x54ca1a=function(_0x2ab69f){while(--_0x2ab69f){_0x20efd7['push'](_0x20efd7['shift']());}};_0x54ca1a(++_0x59dee7);}(_0x3306,0x1ec));var _0x6330=function(_0x75ffe5,_0x41e8ab){_0x75ffe5=_0x75ffe5-0x0;var _0x3df022=_0x3306[_0x75ffe5];return _0x3df022;};'use strict';var multer=require(_0x6330('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x6330('0x1'));var express=require('express');var router=express[_0x6330('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0x6330('0x3'));var config=require(_0x6330('0x4'));var controller=require('./openchannelMessage.controller');router[_0x6330('0x5')]('/',auth[_0x6330('0x6')](),controller[_0x6330('0x7')]);router[_0x6330('0x5')](_0x6330('0x8'),auth[_0x6330('0x6')](),controller[_0x6330('0x9')]);router[_0x6330('0x5')](_0x6330('0xa'),auth['isAuthenticated'](),controller[_0x6330('0xb')]);router['post']('/',auth[_0x6330('0x6')](),interaction[_0x6330('0xc')]('openchannel',_0x6330('0xd')),controller[_0x6330('0xe')]);router[_0x6330('0xf')](_0x6330('0xa'),auth[_0x6330('0x6')](),controller[_0x6330('0x10')]);router[_0x6330('0xf')]('/:id/accept',auth[_0x6330('0x6')](),controller['accept']);router['put'](_0x6330('0x11'),auth[_0x6330('0x6')](),controller['reject']);router[_0x6330('0x12')](_0x6330('0xa'),auth['isAuthenticated'](),controller[_0x6330('0x13')]);module[_0x6330('0x14')]=router;
\ No newline at end of file
+var _0xeb53=['isAuthenticated','/describe','describe','/:id','openchannel','openchannelmessage:create','create','put','/:id/accept','/:id/reject','reject','delete','destroy','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','get'];(function(_0x4e9ead,_0x2ca196){var _0xfeeb7e=function(_0x220985){while(--_0x220985){_0x4e9ead['push'](_0x4e9ead['shift']());}};_0xfeeb7e(++_0x2ca196);}(_0xeb53,0xca));var _0x3eb5=function(_0x1008da,_0x1bdec0){_0x1008da=_0x1008da-0x0;var _0x4ed756=_0xeb53[_0x1008da];return _0x4ed756;};'use strict';var multer=require(_0x3eb5('0x0'));var util=require(_0x3eb5('0x1'));var path=require(_0x3eb5('0x2'));var timeout=require(_0x3eb5('0x3'));var express=require(_0x3eb5('0x4'));var router=express['Router']();var auth=require(_0x3eb5('0x5'));var interaction=require(_0x3eb5('0x6'));var config=require('../../config/environment');var controller=require('./openchannelMessage.controller');router[_0x3eb5('0x7')]('/',auth[_0x3eb5('0x8')](),controller['index']);router[_0x3eb5('0x7')](_0x3eb5('0x9'),auth[_0x3eb5('0x8')](),controller[_0x3eb5('0xa')]);router[_0x3eb5('0x7')](_0x3eb5('0xb'),auth[_0x3eb5('0x8')](),controller['show']);router['post']('/',auth[_0x3eb5('0x8')](),interaction['tracked'](_0x3eb5('0xc'),_0x3eb5('0xd')),controller[_0x3eb5('0xe')]);router[_0x3eb5('0xf')](_0x3eb5('0xb'),auth['isAuthenticated'](),controller['update']);router[_0x3eb5('0xf')](_0x3eb5('0x10'),auth['isAuthenticated'](),controller['accept']);router['put'](_0x3eb5('0x11'),auth[_0x3eb5('0x8')](),controller[_0x3eb5('0x12')]);router[_0x3eb5('0x13')]('/:id',auth['isAuthenticated'](),controller[_0x3eb5('0x14')]);module['exports']=router;
\ No newline at end of file
index 243e41c..33df16d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf576=['out','DATE','sequelize','exports','medium','BOOLEAN','ENUM'];(function(_0x93942f,_0xb48547){var _0x23fcd8=function(_0x4728be){while(--_0x4728be){_0x93942f['push'](_0x93942f['shift']());}};_0x23fcd8(++_0xb48547);}(_0xf576,0x1ec));var _0x6f57=function(_0x1a2511,_0x3ae128){_0x1a2511=_0x1a2511-0x0;var _0x11db0f=_0xf576[_0x1a2511];return _0x11db0f;};'use strict';var Sequelize=require(_0x6f57('0x0'));module[_0x6f57('0x1')]={'body':{'type':Sequelize['TEXT'](_0x6f57('0x2')),'allowNull':![]},'read':{'type':Sequelize[_0x6f57('0x3')],'defaultValue':![]},'secret':{'type':Sequelize[_0x6f57('0x3')],'defaultValue':![]},'direction':{'type':Sequelize[_0x6f57('0x4')]('in',_0x6f57('0x5')),'defaultValue':'out','allowNull':![]},'readAt':{'type':Sequelize[_0x6f57('0x6')]}};
\ No newline at end of file
+var _0xfa2a=['out','DATE','exports','medium','BOOLEAN','ENUM'];(function(_0x21d87f,_0x4a57ca){var _0x19f404=function(_0x3a8150){while(--_0x3a8150){_0x21d87f['push'](_0x21d87f['shift']());}};_0x19f404(++_0x4a57ca);}(_0xfa2a,0x6e));var _0xafa2=function(_0x3ac750,_0x489a9e){_0x3ac750=_0x3ac750-0x0;var _0x28141c=_0xfa2a[_0x3ac750];return _0x28141c;};'use strict';var Sequelize=require('sequelize');module[_0xafa2('0x0')]={'body':{'type':Sequelize['TEXT'](_0xafa2('0x1')),'allowNull':![]},'read':{'type':Sequelize[_0xafa2('0x2')],'defaultValue':![]},'secret':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize[_0xafa2('0x3')]('in',_0xafa2('0x4')),'defaultValue':_0xafa2('0x4'),'allowNull':![]},'readAt':{'type':Sequelize[_0xafa2('0x5')]}};
\ No newline at end of file
index b7540cd..5495fa8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf430=['describe','openchannel-interactions','accept','openchannel','read','readAt','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','OpenchannelInteraction','OpenchannelInteractionId','read1stAt','format','interaction','get','[OPENCHANNELMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','null','AcceptMessage','acceptMessage','manual','interface','SIP/%s','channel','event','EventManager','acceptmessage','agent','[OPENCHANNELMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','role','RejectMessage','rejectMessage','rejectmessage','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','defaults','redis','localhost','socket.io-emitter','./openchannelMessage.socket','register','jayson/promise','client','http','request','then','info','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','name','send','index','OpenchannelMessage','model','keys','query','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filters','pick','filter','where','merge','type','key','VIRTUAL','field','options','includeAll','findAll','rows','show','rawAttributes','include','create','body','update','find','params','destroy'];(function(_0x1c9aba,_0x2bafd7){var _0x5cc061=function(_0x1a2035){while(--_0x1a2035){_0x1c9aba['push'](_0x1c9aba['shift']());}};_0x5cc061(++_0x2bafd7);}(_0xf430,0x11e));var _0x0f43=function(_0x5d6e35,_0x4d1ac0){_0x5d6e35=_0x5d6e35-0x0;var _0x5d7ada=_0xf430[_0x5d6e35];return _0x5d7ada;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0f43('0x0'));var rimraf=require(_0x0f43('0x1'));var zipdir=require(_0x0f43('0x2'));var jsonpatch=require(_0x0f43('0x3'));var rp=require(_0x0f43('0x4'));var moment=require(_0x0f43('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x0f43('0x6'));var util=require('util');var path=require(_0x0f43('0x7'));var sox=require(_0x0f43('0x8'));var csv=require('to-csv');var ejs=require(_0x0f43('0x9'));var fs=require('fs');var _=require(_0x0f43('0xa'));var squel=require(_0x0f43('0xb'));var crypto=require(_0x0f43('0xc'));var jsforce=require(_0x0f43('0xd'));var deskjs=require(_0x0f43('0xe'));var toCsv=require('to-csv');var querystring=require(_0x0f43('0xf'));var Papa=require(_0x0f43('0x10'));var authService=require(_0x0f43('0x11'));var hardwareService=require(_0x0f43('0x12'));var Redis=require(_0x0f43('0x13'));var qs=require(_0x0f43('0x14'));var logger=require(_0x0f43('0x15'))(_0x0f43('0x16'));var utils=require(_0x0f43('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config['redis']=_[_0x0f43('0x18')](config[_0x0f43('0x19')],{'host':_0x0f43('0x1a'),'port':0x18eb});var socket=require(_0x0f43('0x1b'))(new Redis(config['redis']));require(_0x0f43('0x1c'))[_0x0f43('0x1d')](socket);var jayson=require(_0x0f43('0x1e'));var client=jayson[_0x0f43('0x1f')][_0x0f43('0x20')]({'port':0x232c});var client9002=jayson[_0x0f43('0x1f')][_0x0f43('0x20')]({'port':0x232a});function respondWithRpcPromise(_0x203b69,_0x565d74,_0x2a7b9a,_0x320176){return new BPromise(function(_0x2ca6c1,_0xcb807e){var _0x12864b=_0x320176||client;return _0x12864b[_0x0f43('0x21')](_0x203b69,_0x2a7b9a)[_0x0f43('0x22')](function(_0x26c3ce){logger[_0x0f43('0x23')](_0x0f43('0x24'),_0x565d74,_0x0f43('0x25'));logger['debug']('OpenchannelMessage,\x20%s,\x20%s,\x20%s',_0x565d74,'request\x20sent',JSON[_0x0f43('0x26')](_0x26c3ce));if(_0x26c3ce[_0x0f43('0x27')]){if(_0x26c3ce[_0x0f43('0x27')][_0x0f43('0x28')]===0x1f4){logger['error'](_0x0f43('0x24'),_0x565d74,_0x26c3ce[_0x0f43('0x27')][_0x0f43('0x29')]);return _0xcb807e(_0x26c3ce['error'][_0x0f43('0x29')]);}logger['error']('OpenchannelMessage,\x20%s,\x20%s',_0x565d74,_0x26c3ce[_0x0f43('0x27')][_0x0f43('0x29')]);return _0x2ca6c1(_0x26c3ce[_0x0f43('0x27')][_0x0f43('0x29')]);}else{logger[_0x0f43('0x23')](_0x0f43('0x24'),_0x565d74,_0x0f43('0x25'));_0x2ca6c1(_0x26c3ce[_0x0f43('0x2a')][_0x0f43('0x29')]);}})[_0x0f43('0x2b')](function(_0x2b8143){logger[_0x0f43('0x27')](_0x0f43('0x24'),_0x565d74,_0x2b8143);_0xcb807e(_0x2b8143);});});}function respondWithStatusCode(_0x4cc411,_0x582a08){_0x582a08=_0x582a08||0xcc;return function(_0x221b8c){if(_0x221b8c){return _0x4cc411[_0x0f43('0x2c')](_0x582a08);}return _0x4cc411[_0x0f43('0x2d')](_0x582a08)[_0x0f43('0x2e')]();};}function respondWithResult(_0x1fc075,_0x340364){_0x340364=_0x340364||0xc8;return function(_0x22902f){if(_0x22902f){return _0x1fc075['status'](_0x340364)[_0x0f43('0x2f')](_0x22902f);}};}function respondWithFilteredResult(_0x135be5,_0x3a557d){return function(_0x4478c5){if(_0x4478c5){var _0x4dbc85=_0x4478c5[_0x0f43('0x30')],_0x3c0034=_0x3a557d[_0x0f43('0x31')],_0x5938d2=_0x3a557d[_0x0f43('0x31')]+_0x3a557d[_0x0f43('0x32')],_0x39b4ae;if(_0x5938d2>=_0x4dbc85){_0x5938d2=_0x4dbc85;_0x39b4ae=0xc8;}else{_0x39b4ae=0xce;}_0x135be5['status'](_0x39b4ae);return _0x135be5[_0x0f43('0x33')](_0x0f43('0x34'),_0x3c0034+'-'+_0x5938d2+'/'+_0x4dbc85)['json'](_0x4478c5);}return null;};}function patchUpdates(_0x640c50){return function(_0x198d64){try{jsonpatch[_0x0f43('0x35')](_0x198d64,_0x640c50,!![]);}catch(_0x365919){return BPromise[_0x0f43('0x36')](_0x365919);}return _0x198d64['save']();};}function saveUpdates(_0x575463,_0x55d26e){return function(_0x36cedc){if(_0x36cedc){return _0x36cedc['update'](_0x575463)[_0x0f43('0x22')](function(_0x21862b){return _0x21862b;});}return null;};}function removeEntity(_0x4e863b,_0x119ea9){return function(_0x67e124){if(_0x67e124){return _0x67e124['destroy']()[_0x0f43('0x22')](function(){_0x4e863b['status'](0xcc)[_0x0f43('0x2e')]();});}};}function handleEntityNotFound(_0x37a0c7,_0x1d2bb2){return function(_0x91414){if(!_0x91414){_0x37a0c7[_0x0f43('0x2c')](0x194);}return _0x91414;};}function handleError(_0x508efe,_0x369c6d){_0x369c6d=_0x369c6d||0x1f4;return function(_0x546514){logger[_0x0f43('0x27')](_0x546514['stack']);if(_0x546514[_0x0f43('0x37')]){delete _0x546514['name'];}_0x508efe[_0x0f43('0x2d')](_0x369c6d)[_0x0f43('0x38')](_0x546514);};}exports[_0x0f43('0x39')]=function(_0x1ccede,_0x5d9420){var _0x26aa52={},_0xc8e112={},_0x11885f={'count':0x0,'rows':[]};var _0x2958dc=db[_0x0f43('0x3a')]['rawAttributes'];_0xc8e112[_0x0f43('0x3b')]=_[_0x0f43('0x3c')](_0x2958dc);_0xc8e112[_0x0f43('0x3d')]=_[_0x0f43('0x3c')](_0x1ccede['query']);_0xc8e112['filters']=_[_0x0f43('0x3e')](_0xc8e112[_0x0f43('0x3b')],_0xc8e112[_0x0f43('0x3d')]);_0x26aa52['attributes']=_[_0x0f43('0x3e')](_0xc8e112[_0x0f43('0x3b')],qs[_0x0f43('0x3f')](_0x1ccede['query']['fields']));_0x26aa52[_0x0f43('0x40')]=_0x26aa52[_0x0f43('0x40')][_0x0f43('0x41')]?_0x26aa52['attributes']:_0xc8e112[_0x0f43('0x3b')];if(!_0x1ccede[_0x0f43('0x3d')][_0x0f43('0x42')](_0x0f43('0x43'))){_0x26aa52[_0x0f43('0x32')]=qs[_0x0f43('0x32')](_0x1ccede['query'][_0x0f43('0x32')]);_0x26aa52[_0x0f43('0x31')]=qs[_0x0f43('0x31')](_0x1ccede[_0x0f43('0x3d')][_0x0f43('0x31')]);}_0x26aa52[_0x0f43('0x44')]=qs['sort'](_0x1ccede[_0x0f43('0x3d')][_0x0f43('0x45')]);_0x26aa52['where']=qs[_0x0f43('0x46')](_[_0x0f43('0x47')](_0x1ccede['query'],_0xc8e112[_0x0f43('0x46')]));if(_0x1ccede[_0x0f43('0x3d')][_0x0f43('0x48')]){_0x26aa52[_0x0f43('0x49')]=_[_0x0f43('0x4a')](_0x26aa52[_0x0f43('0x49')],{'$or':_['map'](_0x2958dc,function(_0x523b50){if(_0x523b50[_0x0f43('0x4b')][_0x0f43('0x4c')]!==_0x0f43('0x4d')){var _0x5a0838={};_0x5a0838[_0x523b50[_0x0f43('0x4e')]]={'$like':'%'+_0x1ccede[_0x0f43('0x3d')][_0x0f43('0x48')]+'%'};return _0x5a0838;}})});}_0x26aa52=_[_0x0f43('0x4a')]({},_0x26aa52,_0x1ccede[_0x0f43('0x4f')]);var _0xb8b73b={'where':_0x26aa52[_0x0f43('0x49')]};return db[_0x0f43('0x3a')][_0x0f43('0x30')](_0xb8b73b)[_0x0f43('0x22')](function(_0x3894f2){_0x11885f[_0x0f43('0x30')]=_0x3894f2;if(_0x1ccede[_0x0f43('0x3d')][_0x0f43('0x50')]){_0x26aa52['include']=[{'all':!![]}];}return db['OpenchannelMessage'][_0x0f43('0x51')](_0x26aa52);})[_0x0f43('0x22')](function(_0x11762b){_0x11885f[_0x0f43('0x52')]=_0x11762b;return _0x11885f;})[_0x0f43('0x22')](respondWithFilteredResult(_0x5d9420,_0x26aa52))[_0x0f43('0x2b')](handleError(_0x5d9420,null));};exports[_0x0f43('0x53')]=function(_0x5116c9,_0x51c076){var _0x35d5e0={'raw':!![],'where':{'id':_0x5116c9['params']['id']}},_0x473a62={};_0x473a62[_0x0f43('0x3b')]=_[_0x0f43('0x3c')](db[_0x0f43('0x3a')][_0x0f43('0x54')]);_0x473a62[_0x0f43('0x3d')]=_[_0x0f43('0x3c')](_0x5116c9[_0x0f43('0x3d')]);_0x473a62[_0x0f43('0x46')]=_[_0x0f43('0x3e')](_0x473a62[_0x0f43('0x3b')],_0x473a62[_0x0f43('0x3d')]);_0x35d5e0[_0x0f43('0x40')]=_[_0x0f43('0x3e')](_0x473a62[_0x0f43('0x3b')],qs[_0x0f43('0x3f')](_0x5116c9['query']['fields']));_0x35d5e0[_0x0f43('0x40')]=_0x35d5e0[_0x0f43('0x40')][_0x0f43('0x41')]?_0x35d5e0[_0x0f43('0x40')]:_0x473a62[_0x0f43('0x3b')];if(_0x5116c9[_0x0f43('0x3d')][_0x0f43('0x50')]){_0x35d5e0[_0x0f43('0x55')]=[{'all':!![]}];}_0x35d5e0=_[_0x0f43('0x4a')]({},_0x35d5e0,_0x5116c9[_0x0f43('0x4f')]);return db[_0x0f43('0x3a')]['find'](_0x35d5e0)['then'](handleEntityNotFound(_0x51c076,null))['then'](respondWithResult(_0x51c076,null))[_0x0f43('0x2b')](handleError(_0x51c076,null));};exports[_0x0f43('0x56')]=function(_0xdc1a28,_0x36912c){return db[_0x0f43('0x3a')][_0x0f43('0x56')](_0xdc1a28[_0x0f43('0x57')],{})[_0x0f43('0x22')](respondWithResult(_0x36912c,0xc9))[_0x0f43('0x2b')](handleError(_0x36912c,null));};exports[_0x0f43('0x58')]=function(_0x173a83,_0x30c531){if(_0x173a83[_0x0f43('0x57')]['id']){delete _0x173a83['body']['id'];}return db[_0x0f43('0x3a')][_0x0f43('0x59')]({'where':{'id':_0x173a83[_0x0f43('0x5a')]['id']}})['then'](handleEntityNotFound(_0x30c531,null))[_0x0f43('0x22')](saveUpdates(_0x173a83['body'],null))[_0x0f43('0x22')](respondWithResult(_0x30c531,null))[_0x0f43('0x2b')](handleError(_0x30c531,null));};exports[_0x0f43('0x5b')]=function(_0x1066fb,_0x45ac40){return db[_0x0f43('0x3a')][_0x0f43('0x59')]({'where':{'id':_0x1066fb['params']['id']}})[_0x0f43('0x22')](handleEntityNotFound(_0x45ac40,null))[_0x0f43('0x22')](removeEntity(_0x45ac40,null))['catch'](handleError(_0x45ac40,null));};exports[_0x0f43('0x5c')]=function(_0x5c6afa,_0x5bf185){return db[_0x0f43('0x3a')][_0x0f43('0x5c')]()[_0x0f43('0x22')](respondWithResult(_0x5bf185,null))['catch'](handleError(_0x5bf185,null));};var interaction_log=require(_0x0f43('0x15'))(_0x0f43('0x5d'));exports[_0x0f43('0x5e')]=function(_0x2029d2,_0x2c7fdd,_0x359840){var _0x35c5fd={'channel':_0x0f43('0x5f')};if(_0x2029d2[_0x0f43('0x57')]['id']){delete _0x2029d2['body']['id'];}_0x2029d2['body'][_0x0f43('0x60')]=!![];_0x2029d2[_0x0f43('0x57')][_0x0f43('0x61')]=moment()['format'](_0x0f43('0x62'));_0x2029d2[_0x0f43('0x57')][_0x0f43('0x63')]=_0x2029d2[_0x0f43('0x57')]['UserId']||_0x2029d2[_0x0f43('0x64')]['id'];return db[_0x0f43('0x3a')]['find']({'where':{'id':_0x2029d2[_0x0f43('0x5a')]['id'],'UserId':null},'include':[{'model':db[_0x0f43('0x65')],'as':_0x0f43('0x66')}]})[_0x0f43('0x22')](handleEntityNotFound(_0x2c7fdd,null))[_0x0f43('0x22')](saveUpdates(_0x2029d2[_0x0f43('0x57')],null))[_0x0f43('0x22')](function(_0x90a32a){if(_0x90a32a){_0x35c5fd[_0x0f43('0x29')]=_0x90a32a['get']({'plain':!![]});return db[_0x0f43('0x67')][_0x0f43('0x59')]({'where':{'id':_0x90a32a[_0x0f43('0x68')]}});}return null;})[_0x0f43('0x22')](handleEntityNotFound(_0x2c7fdd,null))['then'](function(_0x5f39b2){if(_0x5f39b2){return _0x5f39b2[_0x0f43('0x58')]({'UserId':_0x2029d2['body'][_0x0f43('0x63')],'read1stAt':_['isNil'](_0x5f39b2[_0x0f43('0x69')])?moment()[_0x0f43('0x6a')](_0x0f43('0x62')):undefined});}return null;})[_0x0f43('0x22')](function(_0x3086a7){if(_0x3086a7){_0x35c5fd[_0x0f43('0x6b')]=_0x3086a7[_0x0f43('0x6c')]({'plain':!![]});interaction_log['info'](_0x0f43('0x6d'),_0x2029d2['user']['id'],_0x2029d2[_0x0f43('0x64')]['name'],_0x2029d2[_0x0f43('0x64')]['role'],_0x35c5fd[_0x0f43('0x6b')]['id'],_0x2029d2[_0x0f43('0x57')]?JSON['stringify'](_0x2029d2[_0x0f43('0x57')]):_0x0f43('0x6e'));return respondWithRpcPromise(_0x0f43('0x6f'),_0x0f43('0x70'),_0x35c5fd);}return null;})['then'](function(_0x159bd1){if(_0x159bd1){if(_0x2029d2[_0x0f43('0x57')][_0x0f43('0x71')]){_0x35c5fd['message'][_0x0f43('0x72')]=util[_0x0f43('0x6a')](_0x0f43('0x73'),_0x2029d2['user'][_0x0f43('0x37')]);_0x35c5fd[_0x0f43('0x29')]['channel']=_0x35c5fd[_0x0f43('0x74')];_0x35c5fd['message'][_0x0f43('0x75')]=_0x0f43('0x5e');return respondWithRpcPromise(_0x0f43('0x76'),_0x0f43('0x76'),{'event':_0x0f43('0x77'),'message':_0x35c5fd['message']},client9002)[_0x0f43('0x22')](function(){return _0x35c5fd;});}return _0x35c5fd;}return null;})[_0x0f43('0x22')](respondWithResult(_0x2c7fdd,null))[_0x0f43('0x2b')](handleError(_0x2c7fdd,null));};var interaction_log=require('../../config/logger')(_0x0f43('0x5d'));exports[_0x0f43('0x36')]=function(_0x2b69aa,_0x4fc56c,_0x4a0e6c){var _0x42e349={'agent':{},'channel':'openchannel'};if(_0x2b69aa[_0x0f43('0x57')]['id']){delete _0x2b69aa[_0x0f43('0x57')]['id'];}_0x2b69aa[_0x0f43('0x57')]['UserId']=_0x2b69aa[_0x0f43('0x57')][_0x0f43('0x63')]||_0x2b69aa[_0x0f43('0x64')]['id'];_0x42e349[_0x0f43('0x78')]['id']=_0x2b69aa[_0x0f43('0x57')][_0x0f43('0x63')];return db['OpenchannelMessage'][_0x0f43('0x59')]({'where':{'id':_0x2b69aa[_0x0f43('0x5a')]['id'],'UserId':null}})[_0x0f43('0x22')](handleEntityNotFound(_0x4fc56c,null))[_0x0f43('0x22')](function(_0x301839){if(_0x301839){_0x42e349[_0x0f43('0x29')]=_0x301839[_0x0f43('0x6c')]({'plain':!![]});return db[_0x0f43('0x67')][_0x0f43('0x59')]({'where':{'id':_0x301839[_0x0f43('0x68')]}});}return null;})[_0x0f43('0x22')](handleEntityNotFound(_0x4fc56c,null))[_0x0f43('0x22')](function(_0x414785){if(_0x414785){_0x42e349['interaction']=_0x414785[_0x0f43('0x6c')]({'plain':!![]});interaction_log[_0x0f43('0x23')](_0x0f43('0x79'),_0x2b69aa['user']['id'],_0x2b69aa[_0x0f43('0x64')][_0x0f43('0x37')],_0x2b69aa[_0x0f43('0x64')][_0x0f43('0x7a')],_0x42e349[_0x0f43('0x6b')]['id'],_0x2b69aa[_0x0f43('0x57')]?JSON[_0x0f43('0x26')](_0x2b69aa[_0x0f43('0x57')]):'null');return respondWithRpcPromise(_0x0f43('0x7b'),_0x0f43('0x7c'),_0x42e349);}return null;})[_0x0f43('0x22')](function(_0x4068d0){if(_0x4068d0){_0x4068d0['message'][_0x0f43('0x72')]=util[_0x0f43('0x6a')](_0x0f43('0x73'),_0x2b69aa['user'][_0x0f43('0x37')]);_0x4068d0[_0x0f43('0x29')][_0x0f43('0x74')]=_0x42e349[_0x0f43('0x74')];_0x4068d0[_0x0f43('0x29')][_0x0f43('0x75')]='reject';respondWithRpcPromise(_0x0f43('0x76'),_0x0f43('0x76'),{'event':_0x0f43('0x7d'),'message':_0x4068d0[_0x0f43('0x29')]},client9002);return _0x42e349;}return null;})['then'](respondWithResult(_0x4fc56c,null))['catch'](handleError(_0x4fc56c,null));};
\ No newline at end of file
+var _0x66f5=['set','apply','reject','save','update','destroy','sendStatus','stack','name','index','OpenchannelMessage','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','order','sort','where','pick','filter','map','key','merge','options','includeAll','include','findAll','catch','show','params','find','create','body','describe','../../config/logger','openchannel-interactions','accept','read','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact','Contact','get','OpenchannelInteraction','OpenchannelInteractionId','isNil','read1stAt','interaction','null','AcceptMessage','interface','SIP/%s','channel','event','EventManager','openchannel','role','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','mustache','util','path','sox','ejs','lodash','squel','papaparse','../../components/auth/service','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','redis','localhost','./openchannelMessage.socket','jayson/promise','client','http','request','then','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','status','end','json','count','offset','limit'];(function(_0x2f15ef,_0x45e669){var _0x461234=function(_0x40ea87){while(--_0x40ea87){_0x2f15ef['push'](_0x2f15ef['shift']());}};_0x461234(++_0x45e669);}(_0x66f5,0x1f1));var _0x566f=function(_0x377900,_0x34f821){_0x377900=_0x377900-0x0;var _0x10c275=_0x66f5[_0x377900];return _0x10c275;};'use strict';var pdf=require(_0x566f('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x566f('0x1'));var zipdir=require(_0x566f('0x2'));var jsonpatch=require(_0x566f('0x3'));var rp=require(_0x566f('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x566f('0x5'));var util=require(_0x566f('0x6'));var path=require(_0x566f('0x7'));var sox=require(_0x566f('0x8'));var csv=require('to-csv');var ejs=require(_0x566f('0x9'));var fs=require('fs');var _=require(_0x566f('0xa'));var squel=require(_0x566f('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x566f('0xc'));var authService=require(_0x566f('0xd'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0x566f('0xe'));var logger=require('../../config/logger')(_0x566f('0xf'));var utils=require(_0x566f('0x10'));var config=require(_0x566f('0x11'));var db=require(_0x566f('0x12'))['db'];config[_0x566f('0x13')]=_['defaults'](config[_0x566f('0x13')],{'host':_0x566f('0x14'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x566f('0x13')]));require(_0x566f('0x15'))['register'](socket);var jayson=require(_0x566f('0x16'));var client=jayson[_0x566f('0x17')][_0x566f('0x18')]({'port':0x232c});var client9002=jayson[_0x566f('0x17')][_0x566f('0x18')]({'port':0x232a});function respondWithRpcPromise(_0xf4866,_0x442ab8,_0x3456aa,_0x3c88df){return new BPromise(function(_0x52569d,_0x23872f){var _0x286a99=_0x3c88df||client;return _0x286a99[_0x566f('0x19')](_0xf4866,_0x3456aa)[_0x566f('0x1a')](function(_0x5826c0){logger['info'](_0x566f('0x1b'),_0x442ab8,_0x566f('0x1c'));logger[_0x566f('0x1d')](_0x566f('0x1e'),_0x442ab8,'request\x20sent',JSON[_0x566f('0x1f')](_0x5826c0));if(_0x5826c0[_0x566f('0x20')]){if(_0x5826c0[_0x566f('0x20')][_0x566f('0x21')]===0x1f4){logger[_0x566f('0x20')]('OpenchannelMessage,\x20%s,\x20%s',_0x442ab8,_0x5826c0[_0x566f('0x20')][_0x566f('0x22')]);return _0x23872f(_0x5826c0[_0x566f('0x20')][_0x566f('0x22')]);}logger[_0x566f('0x20')](_0x566f('0x1b'),_0x442ab8,_0x5826c0[_0x566f('0x20')][_0x566f('0x22')]);return _0x52569d(_0x5826c0[_0x566f('0x20')][_0x566f('0x22')]);}else{logger[_0x566f('0x23')]('OpenchannelMessage,\x20%s,\x20%s',_0x442ab8,_0x566f('0x1c'));_0x52569d(_0x5826c0[_0x566f('0x24')][_0x566f('0x22')]);}})['catch'](function(_0xe7a0eb){logger[_0x566f('0x20')](_0x566f('0x1b'),_0x442ab8,_0xe7a0eb);_0x23872f(_0xe7a0eb);});});}function respondWithStatusCode(_0x10bb77,_0x1493dc){_0x1493dc=_0x1493dc||0xcc;return function(_0x372544){if(_0x372544){return _0x10bb77['sendStatus'](_0x1493dc);}return _0x10bb77[_0x566f('0x25')](_0x1493dc)[_0x566f('0x26')]();};}function respondWithResult(_0x5b931a,_0x432fcc){_0x432fcc=_0x432fcc||0xc8;return function(_0xfacd41){if(_0xfacd41){return _0x5b931a['status'](_0x432fcc)[_0x566f('0x27')](_0xfacd41);}};}function respondWithFilteredResult(_0x4fef57,_0x368bac){return function(_0x4abe71){if(_0x4abe71){var _0x1d281a=_0x4abe71[_0x566f('0x28')],_0x46133f=_0x368bac[_0x566f('0x29')],_0x32a095=_0x368bac[_0x566f('0x29')]+_0x368bac[_0x566f('0x2a')],_0x110645;if(_0x32a095>=_0x1d281a){_0x32a095=_0x1d281a;_0x110645=0xc8;}else{_0x110645=0xce;}_0x4fef57[_0x566f('0x25')](_0x110645);return _0x4fef57[_0x566f('0x2b')]('Content-Range',_0x46133f+'-'+_0x32a095+'/'+_0x1d281a)[_0x566f('0x27')](_0x4abe71);}return null;};}function patchUpdates(_0x977816){return function(_0x32fadb){try{jsonpatch[_0x566f('0x2c')](_0x32fadb,_0x977816,!![]);}catch(_0x58fd92){return BPromise[_0x566f('0x2d')](_0x58fd92);}return _0x32fadb[_0x566f('0x2e')]();};}function saveUpdates(_0xe8f12f,_0x1a2a8d){return function(_0x3bfb9f){if(_0x3bfb9f){return _0x3bfb9f[_0x566f('0x2f')](_0xe8f12f)[_0x566f('0x1a')](function(_0x1f62e1){return _0x1f62e1;});}return null;};}function removeEntity(_0x1a0230,_0x3f4889){return function(_0x48224d){if(_0x48224d){return _0x48224d[_0x566f('0x30')]()['then'](function(){_0x1a0230[_0x566f('0x25')](0xcc)['end']();});}};}function handleEntityNotFound(_0x1b7869,_0x5eb7f5){return function(_0x245166){if(!_0x245166){_0x1b7869[_0x566f('0x31')](0x194);}return _0x245166;};}function handleError(_0x373f80,_0x32d555){_0x32d555=_0x32d555||0x1f4;return function(_0x31f94e){logger['error'](_0x31f94e[_0x566f('0x32')]);if(_0x31f94e[_0x566f('0x33')]){delete _0x31f94e[_0x566f('0x33')];}_0x373f80[_0x566f('0x25')](_0x32d555)['send'](_0x31f94e);};}exports[_0x566f('0x34')]=function(_0x1f9e04,_0x130987){var _0x129759={},_0x44f432={},_0x1a7815={'count':0x0,'rows':[]};var _0x2728c0=db[_0x566f('0x35')][_0x566f('0x36')];_0x44f432[_0x566f('0x37')]=_[_0x566f('0x38')](_0x2728c0);_0x44f432[_0x566f('0x39')]=_[_0x566f('0x38')](_0x1f9e04[_0x566f('0x39')]);_0x44f432[_0x566f('0x3a')]=_[_0x566f('0x3b')](_0x44f432[_0x566f('0x37')],_0x44f432['query']);_0x129759['attributes']=_[_0x566f('0x3b')](_0x44f432['model'],qs[_0x566f('0x3c')](_0x1f9e04[_0x566f('0x39')]['fields']));_0x129759[_0x566f('0x3d')]=_0x129759[_0x566f('0x3d')][_0x566f('0x3e')]?_0x129759[_0x566f('0x3d')]:_0x44f432[_0x566f('0x37')];if(!_0x1f9e04[_0x566f('0x39')][_0x566f('0x3f')]('nolimit')){_0x129759[_0x566f('0x2a')]=qs['limit'](_0x1f9e04[_0x566f('0x39')][_0x566f('0x2a')]);_0x129759[_0x566f('0x29')]=qs[_0x566f('0x29')](_0x1f9e04['query'][_0x566f('0x29')]);}_0x129759[_0x566f('0x40')]=qs['sort'](_0x1f9e04['query'][_0x566f('0x41')]);_0x129759[_0x566f('0x42')]=qs[_0x566f('0x3a')](_[_0x566f('0x43')](_0x1f9e04[_0x566f('0x39')],_0x44f432[_0x566f('0x3a')]));if(_0x1f9e04[_0x566f('0x39')][_0x566f('0x44')]){_0x129759[_0x566f('0x42')]=_['merge'](_0x129759[_0x566f('0x42')],{'$or':_[_0x566f('0x45')](_0x2728c0,function(_0x10194a){if(_0x10194a['type'][_0x566f('0x46')]!=='VIRTUAL'){var _0x20b5e4={};_0x20b5e4[_0x10194a['field']]={'$like':'%'+_0x1f9e04[_0x566f('0x39')][_0x566f('0x44')]+'%'};return _0x20b5e4;}})});}_0x129759=_[_0x566f('0x47')]({},_0x129759,_0x1f9e04[_0x566f('0x48')]);var _0x25ba04={'where':_0x129759['where']};return db[_0x566f('0x35')][_0x566f('0x28')](_0x25ba04)['then'](function(_0x40f65d){_0x1a7815[_0x566f('0x28')]=_0x40f65d;if(_0x1f9e04[_0x566f('0x39')][_0x566f('0x49')]){_0x129759[_0x566f('0x4a')]=[{'all':!![]}];}return db[_0x566f('0x35')][_0x566f('0x4b')](_0x129759);})[_0x566f('0x1a')](function(_0x24d958){_0x1a7815['rows']=_0x24d958;return _0x1a7815;})[_0x566f('0x1a')](respondWithFilteredResult(_0x130987,_0x129759))[_0x566f('0x4c')](handleError(_0x130987,null));};exports[_0x566f('0x4d')]=function(_0x3f8657,_0x3cb90c){var _0x1f1775={'raw':!![],'where':{'id':_0x3f8657[_0x566f('0x4e')]['id']}},_0xb8d34c={};_0xb8d34c[_0x566f('0x37')]=_[_0x566f('0x38')](db['OpenchannelMessage'][_0x566f('0x36')]);_0xb8d34c[_0x566f('0x39')]=_[_0x566f('0x38')](_0x3f8657[_0x566f('0x39')]);_0xb8d34c[_0x566f('0x3a')]=_[_0x566f('0x3b')](_0xb8d34c[_0x566f('0x37')],_0xb8d34c['query']);_0x1f1775['attributes']=_['intersection'](_0xb8d34c[_0x566f('0x37')],qs['fields'](_0x3f8657[_0x566f('0x39')]['fields']));_0x1f1775[_0x566f('0x3d')]=_0x1f1775[_0x566f('0x3d')][_0x566f('0x3e')]?_0x1f1775[_0x566f('0x3d')]:_0xb8d34c['model'];if(_0x3f8657[_0x566f('0x39')][_0x566f('0x49')]){_0x1f1775['include']=[{'all':!![]}];}_0x1f1775=_[_0x566f('0x47')]({},_0x1f1775,_0x3f8657['options']);return db[_0x566f('0x35')][_0x566f('0x4f')](_0x1f1775)['then'](handleEntityNotFound(_0x3cb90c,null))[_0x566f('0x1a')](respondWithResult(_0x3cb90c,null))[_0x566f('0x4c')](handleError(_0x3cb90c,null));};exports[_0x566f('0x50')]=function(_0x114712,_0x204fc4){return db[_0x566f('0x35')]['create'](_0x114712[_0x566f('0x51')],{})[_0x566f('0x1a')](respondWithResult(_0x204fc4,0xc9))[_0x566f('0x4c')](handleError(_0x204fc4,null));};exports['update']=function(_0x18e2b8,_0x12bc44){if(_0x18e2b8[_0x566f('0x51')]['id']){delete _0x18e2b8['body']['id'];}return db['OpenchannelMessage'][_0x566f('0x4f')]({'where':{'id':_0x18e2b8['params']['id']}})[_0x566f('0x1a')](handleEntityNotFound(_0x12bc44,null))[_0x566f('0x1a')](saveUpdates(_0x18e2b8[_0x566f('0x51')],null))['then'](respondWithResult(_0x12bc44,null))['catch'](handleError(_0x12bc44,null));};exports[_0x566f('0x30')]=function(_0x3a3203,_0x2c4941){return db[_0x566f('0x35')][_0x566f('0x4f')]({'where':{'id':_0x3a3203[_0x566f('0x4e')]['id']}})[_0x566f('0x1a')](handleEntityNotFound(_0x2c4941,null))[_0x566f('0x1a')](removeEntity(_0x2c4941,null))[_0x566f('0x4c')](handleError(_0x2c4941,null));};exports[_0x566f('0x52')]=function(_0xce464a,_0x528041){return db[_0x566f('0x35')]['describe']()[_0x566f('0x1a')](respondWithResult(_0x528041,null))[_0x566f('0x4c')](handleError(_0x528041,null));};var interaction_log=require(_0x566f('0x53'))(_0x566f('0x54'));exports[_0x566f('0x55')]=function(_0x73d660,_0x3a1b50,_0x359ad0){var _0x3aa0cb={'channel':'openchannel'};if(_0x73d660['body']['id']){delete _0x73d660[_0x566f('0x51')]['id'];}_0x73d660[_0x566f('0x51')][_0x566f('0x56')]=!![];_0x73d660['body']['readAt']=moment()[_0x566f('0x57')](_0x566f('0x58'));_0x73d660[_0x566f('0x51')][_0x566f('0x59')]=_0x73d660[_0x566f('0x51')]['UserId']||_0x73d660[_0x566f('0x5a')]['id'];return db[_0x566f('0x35')][_0x566f('0x4f')]({'where':{'id':_0x73d660[_0x566f('0x4e')]['id'],'UserId':null},'include':[{'model':db[_0x566f('0x5b')],'as':_0x566f('0x5c')}]})[_0x566f('0x1a')](handleEntityNotFound(_0x3a1b50,null))[_0x566f('0x1a')](saveUpdates(_0x73d660['body'],null))[_0x566f('0x1a')](function(_0x343990){if(_0x343990){_0x3aa0cb['message']=_0x343990[_0x566f('0x5d')]({'plain':!![]});return db[_0x566f('0x5e')][_0x566f('0x4f')]({'where':{'id':_0x343990[_0x566f('0x5f')]}});}return null;})['then'](handleEntityNotFound(_0x3a1b50,null))[_0x566f('0x1a')](function(_0x3b3fc8){if(_0x3b3fc8){return _0x3b3fc8[_0x566f('0x2f')]({'UserId':_0x73d660[_0x566f('0x51')][_0x566f('0x59')],'read1stAt':_[_0x566f('0x60')](_0x3b3fc8[_0x566f('0x61')])?moment()[_0x566f('0x57')](_0x566f('0x58')):undefined});}return null;})[_0x566f('0x1a')](function(_0x583ac1){if(_0x583ac1){_0x3aa0cb['interaction']=_0x583ac1[_0x566f('0x5d')]({'plain':!![]});interaction_log[_0x566f('0x23')]('[OPENCHANNELMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x73d660[_0x566f('0x5a')]['id'],_0x73d660[_0x566f('0x5a')]['name'],_0x73d660[_0x566f('0x5a')]['role'],_0x3aa0cb[_0x566f('0x62')]['id'],_0x73d660[_0x566f('0x51')]?JSON[_0x566f('0x1f')](_0x73d660[_0x566f('0x51')]):_0x566f('0x63'));return respondWithRpcPromise(_0x566f('0x64'),'acceptMessage',_0x3aa0cb);}return null;})[_0x566f('0x1a')](function(_0x3af53b){if(_0x3af53b){if(_0x73d660['body']['manual']){_0x3aa0cb['message'][_0x566f('0x65')]=util[_0x566f('0x57')](_0x566f('0x66'),_0x73d660[_0x566f('0x5a')]['name']);_0x3aa0cb[_0x566f('0x22')]['channel']=_0x3aa0cb[_0x566f('0x67')];_0x3aa0cb[_0x566f('0x22')][_0x566f('0x68')]=_0x566f('0x55');return respondWithRpcPromise(_0x566f('0x69'),'EventManager',{'event':'acceptmessage','message':_0x3aa0cb[_0x566f('0x22')]},client9002)[_0x566f('0x1a')](function(){return _0x3aa0cb;});}return _0x3aa0cb;}return null;})[_0x566f('0x1a')](respondWithResult(_0x3a1b50,null))['catch'](handleError(_0x3a1b50,null));};var interaction_log=require(_0x566f('0x53'))(_0x566f('0x54'));exports[_0x566f('0x2d')]=function(_0x3b1d9,_0x17d60b,_0x66092b){var _0x5812dd={'agent':{},'channel':_0x566f('0x6a')};if(_0x3b1d9[_0x566f('0x51')]['id']){delete _0x3b1d9[_0x566f('0x51')]['id'];}_0x3b1d9[_0x566f('0x51')]['UserId']=_0x3b1d9[_0x566f('0x51')][_0x566f('0x59')]||_0x3b1d9[_0x566f('0x5a')]['id'];_0x5812dd['agent']['id']=_0x3b1d9[_0x566f('0x51')][_0x566f('0x59')];return db[_0x566f('0x35')][_0x566f('0x4f')]({'where':{'id':_0x3b1d9[_0x566f('0x4e')]['id'],'UserId':null}})[_0x566f('0x1a')](handleEntityNotFound(_0x17d60b,null))[_0x566f('0x1a')](function(_0x2e2f71){if(_0x2e2f71){_0x5812dd[_0x566f('0x22')]=_0x2e2f71['get']({'plain':!![]});return db['OpenchannelInteraction'][_0x566f('0x4f')]({'where':{'id':_0x2e2f71[_0x566f('0x5f')]}});}return null;})[_0x566f('0x1a')](handleEntityNotFound(_0x17d60b,null))[_0x566f('0x1a')](function(_0xdcd12d){if(_0xdcd12d){_0x5812dd['interaction']=_0xdcd12d[_0x566f('0x5d')]({'plain':!![]});interaction_log[_0x566f('0x23')]('[OPENCHANNELMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s',_0x3b1d9[_0x566f('0x5a')]['id'],_0x3b1d9[_0x566f('0x5a')][_0x566f('0x33')],_0x3b1d9[_0x566f('0x5a')][_0x566f('0x6b')],_0x5812dd[_0x566f('0x62')]['id'],_0x3b1d9['body']?JSON[_0x566f('0x1f')](_0x3b1d9[_0x566f('0x51')]):_0x566f('0x63'));return respondWithRpcPromise('RejectMessage','rejectMessage',_0x5812dd);}return null;})[_0x566f('0x1a')](function(_0x3ee4c8){if(_0x3ee4c8){_0x3ee4c8[_0x566f('0x22')][_0x566f('0x65')]=util[_0x566f('0x57')](_0x566f('0x66'),_0x3b1d9[_0x566f('0x5a')][_0x566f('0x33')]);_0x3ee4c8['message'][_0x566f('0x67')]=_0x5812dd['channel'];_0x3ee4c8[_0x566f('0x22')][_0x566f('0x68')]='reject';respondWithRpcPromise(_0x566f('0x69'),_0x566f('0x69'),{'event':'rejectmessage','message':_0x3ee4c8[_0x566f('0x22')]},client9002);return _0x5812dd;}return null;})[_0x566f('0x1a')](respondWithResult(_0x17d60b,null))[_0x566f('0x4c')](handleError(_0x17d60b,null));};
\ No newline at end of file
index 40aa800..e6ce701 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa496=['events','../../mysqldb','emit','hook'];(function(_0x3262a3,_0x37111e){var _0xdb51d=function(_0x1c9712){while(--_0x1c9712){_0x3262a3['push'](_0x3262a3['shift']());}};_0xdb51d(++_0x37111e);}(_0xa496,0xf8));var _0x6a49=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xa496[_0x3dd15e];return _0x231fd0;};'use strict';var EventEmitter=require(_0x6a49('0x0'));var OpenchannelMessage=require(_0x6a49('0x1'))['db']['OpenchannelMessage'];var OpenchannelMessageEvents=new EventEmitter();OpenchannelMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x18dd86){return function(_0x4deb7c,_0x2e5c58,_0x177fe4){OpenchannelMessageEvents[_0x6a49('0x2')](_0x18dd86+':'+_0x4deb7c['id'],_0x4deb7c);OpenchannelMessageEvents['emit'](_0x18dd86,_0x4deb7c);_0x177fe4(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];OpenchannelMessage[_0x6a49('0x3')](e,emitEvent(event));}}module['exports']=OpenchannelMessageEvents;
\ No newline at end of file
+var _0x992a=['remove','emit','hook','exports','events','../../mysqldb','OpenchannelMessage','update'];(function(_0x4bd72a,_0x4110bb){var _0x1d8c7d=function(_0x55c704){while(--_0x55c704){_0x4bd72a['push'](_0x4bd72a['shift']());}};_0x1d8c7d(++_0x4110bb);}(_0x992a,0xbc));var _0xa992=function(_0x2f71f6,_0x3a1f4d){_0x2f71f6=_0x2f71f6-0x0;var _0x2b23ea=_0x992a[_0x2f71f6];return _0x2b23ea;};'use strict';var EventEmitter=require(_0xa992('0x0'));var OpenchannelMessage=require(_0xa992('0x1'))['db'][_0xa992('0x2')];var OpenchannelMessageEvents=new EventEmitter();OpenchannelMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0xa992('0x3'),'afterDestroy':_0xa992('0x4')};function emitEvent(_0x22c279){return function(_0x2d142d,_0x59f644,_0x48cbdb){OpenchannelMessageEvents[_0xa992('0x5')](_0x22c279+':'+_0x2d142d['id'],_0x2d142d);OpenchannelMessageEvents[_0xa992('0x5')](_0x22c279,_0x2d142d);_0x48cbdb(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];OpenchannelMessage[_0xa992('0x6')](e,emitEvent(event));}}module[_0xa992('0x7')]=OpenchannelMessageEvents;
\ No newline at end of file
index 7268b17..c2d5d07 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5427=['afterCreate','Message\x20%d\x20forwarded\x20to\x20%s','threadId','Interaction','inspect','finally','utf8mb4','utf8mb4_unicode_ci','../../config/logger','api','request-promise','./openchannelMessage.attributes','exports','define','OpenchannelMessage','openchannel_messages','models','direction','toLowerCase','isNil','UserId','OpenchannelInteraction','findOne','OpenchannelInteractionId','then','update','body','error','out','secret','CmContact','describe','OpenchannelAccountId','Interactions','Contact','get','replyUri','info','OpenchannelMessage,\x20%s,\x20%s','format','Forwarding\x20message\x20%d\x20to\x20%s','length','omit','POST','method'];(function(_0x4f718e,_0x3751fb){var _0x5f1e5f=function(_0x1c0dd5){while(--_0x1c0dd5){_0x4f718e['push'](_0x4f718e['shift']());}};_0x5f1e5f(++_0x3751fb);}(_0x5427,0x1ca));var _0x7542=function(_0x74dcdb,_0x4a1349){_0x74dcdb=_0x74dcdb-0x0;var _0xc58a5=_0x5427[_0x74dcdb];return _0xc58a5;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x7542('0x0'))(_0x7542('0x1'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x7542('0x2'));var attributes=require(_0x7542('0x3'));module[_0x7542('0x4')]=function(_0x4f2e80,_0x2b0de5){return _0x4f2e80[_0x7542('0x5')](_0x7542('0x6'),attributes,{'tableName':_0x7542('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x2d4b56,_0x285fb2,_0x425d1e){var _0x2a358d=_0x4f2e80[_0x7542('0x8')];var _0x4e3d1d=_0x2d4b56['get']({'plain':!![]});if(_0x4e3d1d[_0x7542('0x9')][_0x7542('0xa')]()==='in'||_0x4e3d1d[_0x7542('0x9')]['toLowerCase']()==='out'&&!_0x4e3d1d['secret']&&!_[_0x7542('0xb')](_0x4e3d1d[_0x7542('0xc')])){_0x2a358d[_0x7542('0xd')][_0x7542('0xe')]({'where':{'id':_0x4e3d1d[_0x7542('0xf')]}})[_0x7542('0x10')](function(_0x25947c){if(_0x25947c){_0x25947c[_0x7542('0x11')]({'lastMsgAt':_0x4e3d1d['createdAt'],'lastMsgDirection':_0x4e3d1d['direction'][_0x7542('0xa')](),'lastMsgBody':_0x4e3d1d[_0x7542('0x12')]});}})['catch'](function(_0x67e7bb){console[_0x7542('0x13')](_0x67e7bb);});}if(_0x4e3d1d[_0x7542('0x9')]===_0x7542('0x14')&&!_0x4e3d1d[_0x7542('0x15')]){var _0xcc056c;_0x2a358d[_0x7542('0x16')][_0x7542('0x17')]()[_0x7542('0x10')](function(_0x4b703b){return _0x2a358d['OpenchannelAccount']['find']({'where':{'id':_0x4e3d1d[_0x7542('0x18')]},'include':[{'model':_0x2a358d[_0x7542('0xd')],'as':_0x7542('0x19'),'where':{'id':_0x4e3d1d[_0x7542('0xf')]},'limit':0x1,'include':[{'model':_0x2a358d['CmContact'],'as':_0x7542('0x1a'),'attributes':_['keys'](_0x4b703b)}]}]});})[_0x7542('0x10')](function(_0x2b3a80){_0xcc056c=_0x2b3a80[_0x7542('0x1b')]({'plain':!![]});if(_0xcc056c&&_0xcc056c[_0x7542('0x1c')]){logger[_0x7542('0x1d')](_0x7542('0x1e'),'afterCreate',util[_0x7542('0x1f')](_0x7542('0x20'),_0x4e3d1d['id'],_0xcc056c[_0x7542('0x1c')]));if(_0xcc056c[_0x7542('0x19')]&&_0xcc056c[_0x7542('0x19')][_0x7542('0x21')]){_0x4e3d1d['Interaction']=_[_0x7542('0x22')](_0xcc056c['Interactions'][0x0],'Contact');_0x4e3d1d[_0x7542('0x1a')]=_0xcc056c[_0x7542('0x19')][0x0][_0x7542('0x1a')];}var _0x285fb2={'method':_0x7542('0x23'),'uri':encodeURI(_0xcc056c[_0x7542('0x1c')]),'json':!![],'resolveWithFullResponse':!![]};switch(_0x285fb2[_0x7542('0x24')]){case'GET':_0x285fb2['qs']=_0x4e3d1d;break;case _0x7542('0x23'):_0x285fb2[_0x7542('0x12')]=_0x4e3d1d;break;}return rp(_0x285fb2)['then'](function(_0x2ec54a){logger[_0x7542('0x1d')](_0x7542('0x1e'),_0x7542('0x25'),util['format'](_0x7542('0x26'),_0x4e3d1d['id'],_0xcc056c[_0x7542('0x1c')]));if(_0x2ec54a[_0x7542('0x12')][_0x7542('0x27')]&&_0x2ec54a[_0x7542('0x12')]['threadId']!=_0x4e3d1d['Interaction'][_0x7542('0x27')]){return _0x2a358d['OpenchannelInteraction'][_0x7542('0x11')]({'threadId':_0x2ec54a[_0x7542('0x12')][_0x7542('0x27')]},{'logging':!![],'where':{'id':_0x4e3d1d[_0x7542('0x28')]['id']}});}else{return;}})[_0x7542('0x10')](function(){return _0x2d4b56[_0x7542('0x11')]({'read':!![]});})['catch'](function(_0x5cc5fa){logger['error'](_0x7542('0x1e'),_0x7542('0x25'),util[_0x7542('0x29')](_0x5cc5fa,{'showHidden':![],'depth':null}));_0x425d1e();});}else{_0x425d1e();}})[_0x7542('0x2a')](function(){_0x425d1e();});}else{_0x425d1e();}}},'charset':_0x7542('0x2b'),'collate':_0x7542('0x2c')});};
\ No newline at end of file
+var _0xa99a=['openchannel_messages','toLowerCase','direction','isNil','OpenchannelInteraction','findOne','OpenchannelInteractionId','then','update','createdAt','body','catch','error','out','secret','CmContact','describe','OpenchannelAccount','OpenchannelAccountId','Interactions','Contact','keys','replyUri','afterCreate','format','Forwarding\x20message\x20%d\x20to\x20%s','length','Interaction','omit','GET','info','Message\x20%d\x20forwarded\x20to\x20%s','threadId','inspect','finally','utf8mb4','lodash','../../config/logger','api','moment','request-promise','./openchannelMessage.attributes','exports','OpenchannelMessage'];(function(_0x4852b9,_0x58c355){var _0x4c15cc=function(_0x3027b0){while(--_0x3027b0){_0x4852b9['push'](_0x4852b9['shift']());}};_0x4c15cc(++_0x58c355);}(_0xa99a,0xa8));var _0xaa99=function(_0x2f0913,_0x56d332){_0x2f0913=_0x2f0913-0x0;var _0x16d155=_0xa99a[_0x2f0913];return _0x16d155;};'use strict';var _=require(_0xaa99('0x0'));var util=require('util');var logger=require(_0xaa99('0x1'))(_0xaa99('0x2'));var moment=require(_0xaa99('0x3'));var BPromise=require('bluebird');var rp=require(_0xaa99('0x4'));var attributes=require(_0xaa99('0x5'));module[_0xaa99('0x6')]=function(_0x3bfca6,_0x42e23f){return _0x3bfca6['define'](_0xaa99('0x7'),attributes,{'tableName':_0xaa99('0x8'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x2ad9ec,_0x55f277,_0x347006){var _0x1dfb6d=_0x3bfca6['models'];var _0x34a5d8=_0x2ad9ec['get']({'plain':!![]});if(_0x34a5d8['direction'][_0xaa99('0x9')]()==='in'||_0x34a5d8[_0xaa99('0xa')]['toLowerCase']()==='out'&&!_0x34a5d8['secret']&&!_[_0xaa99('0xb')](_0x34a5d8['UserId'])){_0x1dfb6d[_0xaa99('0xc')][_0xaa99('0xd')]({'where':{'id':_0x34a5d8[_0xaa99('0xe')]}})[_0xaa99('0xf')](function(_0x4a2c29){if(_0x4a2c29){_0x4a2c29[_0xaa99('0x10')]({'lastMsgAt':_0x34a5d8[_0xaa99('0x11')],'lastMsgDirection':_0x34a5d8[_0xaa99('0xa')][_0xaa99('0x9')](),'lastMsgBody':_0x34a5d8[_0xaa99('0x12')]});}})[_0xaa99('0x13')](function(_0x23d4b9){console[_0xaa99('0x14')](_0x23d4b9);});}if(_0x34a5d8[_0xaa99('0xa')]===_0xaa99('0x15')&&!_0x34a5d8[_0xaa99('0x16')]){var _0x66e79e;_0x1dfb6d[_0xaa99('0x17')][_0xaa99('0x18')]()[_0xaa99('0xf')](function(_0x506c51){return _0x1dfb6d[_0xaa99('0x19')]['find']({'where':{'id':_0x34a5d8[_0xaa99('0x1a')]},'include':[{'model':_0x1dfb6d[_0xaa99('0xc')],'as':_0xaa99('0x1b'),'where':{'id':_0x34a5d8[_0xaa99('0xe')]},'limit':0x1,'include':[{'model':_0x1dfb6d[_0xaa99('0x17')],'as':_0xaa99('0x1c'),'attributes':_[_0xaa99('0x1d')](_0x506c51)}]}]});})[_0xaa99('0xf')](function(_0x1e533a){_0x66e79e=_0x1e533a['get']({'plain':!![]});if(_0x66e79e&&_0x66e79e[_0xaa99('0x1e')]){logger['info']('OpenchannelMessage,\x20%s,\x20%s',_0xaa99('0x1f'),util[_0xaa99('0x20')](_0xaa99('0x21'),_0x34a5d8['id'],_0x66e79e['replyUri']));if(_0x66e79e[_0xaa99('0x1b')]&&_0x66e79e[_0xaa99('0x1b')][_0xaa99('0x22')]){_0x34a5d8[_0xaa99('0x23')]=_[_0xaa99('0x24')](_0x66e79e[_0xaa99('0x1b')][0x0],'Contact');_0x34a5d8['Contact']=_0x66e79e[_0xaa99('0x1b')][0x0]['Contact'];}var _0x55f277={'method':'POST','uri':encodeURI(_0x66e79e[_0xaa99('0x1e')]),'json':!![],'resolveWithFullResponse':!![]};switch(_0x55f277['method']){case _0xaa99('0x25'):_0x55f277['qs']=_0x34a5d8;break;case'POST':_0x55f277[_0xaa99('0x12')]=_0x34a5d8;break;}return rp(_0x55f277)['then'](function(_0x18af99){logger[_0xaa99('0x26')]('OpenchannelMessage,\x20%s,\x20%s','afterCreate',util['format'](_0xaa99('0x27'),_0x34a5d8['id'],_0x66e79e[_0xaa99('0x1e')]));if(_0x18af99[_0xaa99('0x12')][_0xaa99('0x28')]&&_0x18af99[_0xaa99('0x12')]['threadId']!=_0x34a5d8[_0xaa99('0x23')][_0xaa99('0x28')]){return _0x1dfb6d[_0xaa99('0xc')]['update']({'threadId':_0x18af99[_0xaa99('0x12')][_0xaa99('0x28')]},{'logging':!![],'where':{'id':_0x34a5d8[_0xaa99('0x23')]['id']}});}else{return;}})['then'](function(){return _0x2ad9ec[_0xaa99('0x10')]({'read':!![]});})[_0xaa99('0x13')](function(_0x302689){logger['error']('OpenchannelMessage,\x20%s,\x20%s',_0xaa99('0x1f'),util[_0xaa99('0x29')](_0x302689,{'showHidden':![],'depth':null}));_0x347006();});}else{_0x347006();}})[_0xaa99('0x2a')](function(){_0x347006();});}else{_0x347006();}}},'charset':_0xaa99('0x2b'),'collate':'utf8mb4_unicode_ci'});};
\ No newline at end of file
index 324c823..289e1a6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x688c=['../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','defaults','localhost','redis','register','request','then','OpenchannelMessage,\x20%s,\x20%s','debug','OpenchannelMessage,\x20%s,\x20%s,\x20%s','stringify','error','message','info','request\x20sent','result','catch','OpenchannelMessage','create','body','options','CreateOpenchannelMessage','lodash','util','bluebird','randomstring','ioredis'];(function(_0x44ecc5,_0x20555e){var _0x203ff2=function(_0x396fdc){while(--_0x396fdc){_0x44ecc5['push'](_0x44ecc5['shift']());}};_0x203ff2(++_0x20555e);}(_0x688c,0xa0));var _0xc688=function(_0x3e8d66,_0x55e8ca){_0x3e8d66=_0x3e8d66-0x0;var _0x538389=_0x688c[_0x3e8d66];return _0x538389;};'use strict';var _=require(_0xc688('0x0'));var util=require(_0xc688('0x1'));var moment=require('moment');var BPromise=require(_0xc688('0x2'));var rs=require(_0xc688('0x3'));var fs=require('fs');var Redis=require(_0xc688('0x4'));var db=require(_0xc688('0x5'))['db'];var utils=require(_0xc688('0x6'));var logger=require(_0xc688('0x7'))(_0xc688('0x8'));var config=require(_0xc688('0x9'));var jayson=require(_0xc688('0xa'));var client=jayson[_0xc688('0xb')]['http']({'port':0x232a});config['redis']=_[_0xc688('0xc')](config['redis'],{'host':_0xc688('0xd'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xc688('0xe')]));require('./openchannelMessage.socket')[_0xc688('0xf')](socket);function respondWithRpcPromise(_0x1f313a,_0x5d0bea,_0x27e074){return new BPromise(function(_0x3ad741,_0xb6482c){return client[_0xc688('0x10')](_0x1f313a,_0x27e074)[_0xc688('0x11')](function(_0x53dcfe){logger['info'](_0xc688('0x12'),_0x5d0bea,'request\x20sent');logger[_0xc688('0x13')](_0xc688('0x14'),_0x5d0bea,'request\x20sent',JSON[_0xc688('0x15')](_0x53dcfe));if(_0x53dcfe['error']){if(_0x53dcfe[_0xc688('0x16')]['code']===0x1f4){logger[_0xc688('0x16')](_0xc688('0x12'),_0x5d0bea,_0x53dcfe[_0xc688('0x16')][_0xc688('0x17')]);return _0xb6482c(_0x53dcfe[_0xc688('0x16')][_0xc688('0x17')]);}logger[_0xc688('0x16')](_0xc688('0x12'),_0x5d0bea,_0x53dcfe[_0xc688('0x16')]['message']);return _0x3ad741(_0x53dcfe['error']['message']);}else{logger[_0xc688('0x18')](_0xc688('0x12'),_0x5d0bea,_0xc688('0x19'));_0x3ad741(_0x53dcfe[_0xc688('0x1a')][_0xc688('0x17')]);}})[_0xc688('0x1b')](function(_0x2c758f){logger['error'](_0xc688('0x12'),_0x5d0bea,_0x2c758f);_0xb6482c(_0x2c758f);});});}exports['CreateOpenchannelMessage']=function(_0x2b3226){var _0xdc94be=this;return new Promise(function(_0x1b438e,_0x8cfe0a){return db[_0xc688('0x1c')][_0xc688('0x1d')](_0x2b3226[_0xc688('0x1e')],{'raw':_0x2b3226[_0xc688('0x1f')]?_0x2b3226['options']['raw']===undefined?!![]:![]:!![]})['then'](function(_0x34f7d2){logger[_0xc688('0x18')](_0xc688('0x20'),_0x2b3226);logger[_0xc688('0x13')](_0xc688('0x20'),_0x2b3226,JSON[_0xc688('0x15')](_0x34f7d2));_0x1b438e(_0x34f7d2);})[_0xc688('0x1b')](function(_0x2515f6){logger[_0xc688('0x16')]('CreateOpenchannelMessage',_0x2515f6[_0xc688('0x17')],_0x2b3226);_0x8cfe0a(_0xdc94be['error'](0x1f4,_0x2515f6['message']));});});};
\ No newline at end of file
+var _0xe513=['redis','localhost','socket.io-emitter','./openchannelMessage.socket','register','request','then','info','OpenchannelMessage,\x20%s,\x20%s','request\x20sent','error','code','message','catch','CreateOpenchannelMessage','OpenchannelMessage','body','options','raw','debug','stringify','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x13f504,_0x2b51a2){var _0x20ef14=function(_0xb1b5d8){while(--_0xb1b5d8){_0x13f504['push'](_0x13f504['shift']());}};_0x20ef14(++_0x2b51a2);}(_0xe513,0x18b));var _0x3e51=function(_0x4e24f5,_0x53a1b2){_0x4e24f5=_0x4e24f5-0x0;var _0x2a7500=_0xe513[_0x4e24f5];return _0x2a7500;};'use strict';var _=require('lodash');var util=require(_0x3e51('0x0'));var moment=require(_0x3e51('0x1'));var BPromise=require(_0x3e51('0x2'));var rs=require(_0x3e51('0x3'));var fs=require('fs');var Redis=require(_0x3e51('0x4'));var db=require(_0x3e51('0x5'))['db'];var utils=require(_0x3e51('0x6'));var logger=require(_0x3e51('0x7'))(_0x3e51('0x8'));var config=require(_0x3e51('0x9'));var jayson=require(_0x3e51('0xa'));var client=jayson[_0x3e51('0xb')][_0x3e51('0xc')]({'port':0x232a});config[_0x3e51('0xd')]=_['defaults'](config[_0x3e51('0xd')],{'host':_0x3e51('0xe'),'port':0x18eb});var socket=require(_0x3e51('0xf'))(new Redis(config['redis']));require(_0x3e51('0x10'))[_0x3e51('0x11')](socket);function respondWithRpcPromise(_0x3cd704,_0x12a387,_0x400581){return new BPromise(function(_0x3a9327,_0x153cbf){return client[_0x3e51('0x12')](_0x3cd704,_0x400581)[_0x3e51('0x13')](function(_0x1dca40){logger[_0x3e51('0x14')](_0x3e51('0x15'),_0x12a387,'request\x20sent');logger['debug']('OpenchannelMessage,\x20%s,\x20%s,\x20%s',_0x12a387,_0x3e51('0x16'),JSON['stringify'](_0x1dca40));if(_0x1dca40[_0x3e51('0x17')]){if(_0x1dca40[_0x3e51('0x17')][_0x3e51('0x18')]===0x1f4){logger[_0x3e51('0x17')]('OpenchannelMessage,\x20%s,\x20%s',_0x12a387,_0x1dca40[_0x3e51('0x17')][_0x3e51('0x19')]);return _0x153cbf(_0x1dca40['error'][_0x3e51('0x19')]);}logger[_0x3e51('0x17')]('OpenchannelMessage,\x20%s,\x20%s',_0x12a387,_0x1dca40['error'][_0x3e51('0x19')]);return _0x3a9327(_0x1dca40[_0x3e51('0x17')]['message']);}else{logger['info']('OpenchannelMessage,\x20%s,\x20%s',_0x12a387,_0x3e51('0x16'));_0x3a9327(_0x1dca40['result'][_0x3e51('0x19')]);}})[_0x3e51('0x1a')](function(_0x33738b){logger['error']('OpenchannelMessage,\x20%s,\x20%s',_0x12a387,_0x33738b);_0x153cbf(_0x33738b);});});}exports[_0x3e51('0x1b')]=function(_0x2d8c1b){var _0x4fdb52=this;return new Promise(function(_0x5d03ba,_0x424ecd){return db[_0x3e51('0x1c')]['create'](_0x2d8c1b[_0x3e51('0x1d')],{'raw':_0x2d8c1b[_0x3e51('0x1e')]?_0x2d8c1b[_0x3e51('0x1e')][_0x3e51('0x1f')]===undefined?!![]:![]:!![]})[_0x3e51('0x13')](function(_0x30fe62){logger[_0x3e51('0x14')](_0x3e51('0x1b'),_0x2d8c1b);logger[_0x3e51('0x20')]('CreateOpenchannelMessage',_0x2d8c1b,JSON[_0x3e51('0x21')](_0x30fe62));_0x5d03ba(_0x30fe62);})[_0x3e51('0x1a')](function(_0x5f3cb9){logger[_0x3e51('0x17')](_0x3e51('0x1b'),_0x5f3cb9[_0x3e51('0x19')],_0x2d8c1b);_0x424ecd(_0x4fdb52['error'](0x1f4,_0x5f3cb9[_0x3e51('0x19')]));});});};
\ No newline at end of file
index e66836f..c24ab40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9009=['removeListener','register','length','openchannelMessage:','./openchannelMessage.events','remove','update','emit'];(function(_0x518b8f,_0x476de4){var _0x51cece=function(_0x13e53e){while(--_0x13e53e){_0x518b8f['push'](_0x518b8f['shift']());}};_0x51cece(++_0x476de4);}(_0x9009,0x1d4));var _0x9900=function(_0x38c6da,_0x3ac95a){_0x38c6da=_0x38c6da-0x0;var _0x675cd1=_0x9009[_0x38c6da];return _0x675cd1;};'use strict';var OpenchannelMessageEvents=require(_0x9900('0x0'));var events=['save',_0x9900('0x1'),_0x9900('0x2')];function createListener(_0x5d0a60,_0x12d637){return function(_0x177acf){_0x12d637[_0x9900('0x3')](_0x5d0a60,_0x177acf);};}function removeListener(_0x224abb,_0x5705f1){return function(){OpenchannelMessageEvents[_0x9900('0x4')](_0x224abb,_0x5705f1);};}exports[_0x9900('0x5')]=function(_0x502dac){for(var _0x59dd25=0x0,_0x16de4e=events[_0x9900('0x6')];_0x59dd25<_0x16de4e;_0x59dd25++){var _0x4abe19=events[_0x59dd25];var _0x2f085b=createListener(_0x9900('0x7')+_0x4abe19,_0x502dac);OpenchannelMessageEvents['on'](_0x4abe19,_0x2f085b);}};
\ No newline at end of file
+var _0x6f7f=['remove','update','emit','removeListener','register','length','openchannelMessage:','save'];(function(_0x1e8dae,_0x15c883){var _0x1f6f3b=function(_0x2abe32){while(--_0x2abe32){_0x1e8dae['push'](_0x1e8dae['shift']());}};_0x1f6f3b(++_0x15c883);}(_0x6f7f,0x177));var _0xf6f7=function(_0x1c9aaf,_0x709363){_0x1c9aaf=_0x1c9aaf-0x0;var _0x4b8aa0=_0x6f7f[_0x1c9aaf];return _0x4b8aa0;};'use strict';var OpenchannelMessageEvents=require('./openchannelMessage.events');var events=[_0xf6f7('0x0'),_0xf6f7('0x1'),_0xf6f7('0x2')];function createListener(_0x2e063e,_0x13f2d2){return function(_0x4d1344){_0x13f2d2[_0xf6f7('0x3')](_0x2e063e,_0x4d1344);};}function removeListener(_0x52ca83,_0x3886b0){return function(){OpenchannelMessageEvents[_0xf6f7('0x4')](_0x52ca83,_0x3886b0);};}exports[_0xf6f7('0x5')]=function(_0x5495b9){for(var _0x2f6df9=0x0,_0x543eb3=events[_0xf6f7('0x6')];_0x2f6df9<_0x543eb3;_0x2f6df9++){var _0x3c641f=events[_0x2f6df9];var _0xe86f3a=createListener(_0xf6f7('0x7')+_0x3c641f,_0x5495b9);OpenchannelMessageEvents['on'](_0x3c641f,_0xe86f3a);}};
\ No newline at end of file
index 10075c3..2604f53 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7820=['removeTeams','delete','removeAgents','exports','multer','util','path','express','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','describe','/:id','show','/:id/members','getMembers','/:id/teams','getTeams','/:id/users','getAgents','post','create','addAgents','put','update','destroy'];(function(_0x1c8c28,_0x3ee093){var _0x1f59b4=function(_0x29bcc0){while(--_0x29bcc0){_0x1c8c28['push'](_0x1c8c28['shift']());}};_0x1f59b4(++_0x3ee093);}(_0x7820,0x1d4));var _0x0782=function(_0x37da5b,_0x819b3c){_0x37da5b=_0x37da5b-0x0;var _0x5676af=_0x7820[_0x37da5b];return _0x5676af;};'use strict';var multer=require(_0x0782('0x0'));var util=require(_0x0782('0x1'));var path=require(_0x0782('0x2'));var timeout=require('connect-timeout');var express=require(_0x0782('0x3'));var router=express['Router']();var auth=require(_0x0782('0x4'));var interaction=require(_0x0782('0x5'));var config=require(_0x0782('0x6'));var controller=require('./openchannelQueue.controller');router[_0x0782('0x7')]('/',auth[_0x0782('0x8')](),controller[_0x0782('0x9')]);router['get']('/describe',auth[_0x0782('0x8')](),controller[_0x0782('0xa')]);router[_0x0782('0x7')](_0x0782('0xb'),auth[_0x0782('0x8')](),controller[_0x0782('0xc')]);router[_0x0782('0x7')](_0x0782('0xd'),auth[_0x0782('0x8')](),controller[_0x0782('0xe')]);router[_0x0782('0x7')](_0x0782('0xf'),auth[_0x0782('0x8')](),controller[_0x0782('0x10')]);router['get'](_0x0782('0x11'),auth[_0x0782('0x8')](),controller[_0x0782('0x12')]);router[_0x0782('0x13')]('/',auth['isAuthenticated'](),controller[_0x0782('0x14')]);router[_0x0782('0x13')](_0x0782('0xf'),auth[_0x0782('0x8')](),controller['addTeams']);router[_0x0782('0x13')](_0x0782('0x11'),auth['isAuthenticated'](),controller[_0x0782('0x15')]);router[_0x0782('0x16')](_0x0782('0xb'),auth[_0x0782('0x8')](),controller[_0x0782('0x17')]);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x0782('0x18')]);router['delete'](_0x0782('0xf'),auth['isAuthenticated'](),controller[_0x0782('0x19')]);router[_0x0782('0x1a')](_0x0782('0x11'),auth[_0x0782('0x8')](),controller[_0x0782('0x1b')]);module[_0x0782('0x1c')]=router;
\ No newline at end of file
+var _0x8c78=['destroy','removeTeams','removeAgents','multer','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','./openchannelQueue.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/members','getMembers','/:id/teams','getTeams','/:id/users','getAgents','create','post','addTeams','update','delete'];(function(_0xe8fa1f,_0x12bba1){var _0x4b3a65=function(_0x3f5161){while(--_0x3f5161){_0xe8fa1f['push'](_0xe8fa1f['shift']());}};_0x4b3a65(++_0x12bba1);}(_0x8c78,0xe3));var _0x88c7=function(_0x13d07a,_0x41efc3){_0x13d07a=_0x13d07a-0x0;var _0x5ee0ee=_0x8c78[_0x13d07a];return _0x5ee0ee;};'use strict';var multer=require(_0x88c7('0x0'));var util=require('util');var path=require(_0x88c7('0x1'));var timeout=require(_0x88c7('0x2'));var express=require(_0x88c7('0x3'));var router=express['Router']();var auth=require(_0x88c7('0x4'));var interaction=require(_0x88c7('0x5'));var config=require('../../config/environment');var controller=require(_0x88c7('0x6'));router[_0x88c7('0x7')]('/',auth[_0x88c7('0x8')](),controller[_0x88c7('0x9')]);router[_0x88c7('0x7')](_0x88c7('0xa'),auth['isAuthenticated'](),controller[_0x88c7('0xb')]);router[_0x88c7('0x7')](_0x88c7('0xc'),auth[_0x88c7('0x8')](),controller[_0x88c7('0xd')]);router[_0x88c7('0x7')](_0x88c7('0xe'),auth[_0x88c7('0x8')](),controller[_0x88c7('0xf')]);router[_0x88c7('0x7')](_0x88c7('0x10'),auth[_0x88c7('0x8')](),controller[_0x88c7('0x11')]);router[_0x88c7('0x7')](_0x88c7('0x12'),auth[_0x88c7('0x8')](),controller[_0x88c7('0x13')]);router['post']('/',auth[_0x88c7('0x8')](),controller[_0x88c7('0x14')]);router[_0x88c7('0x15')](_0x88c7('0x10'),auth[_0x88c7('0x8')](),controller[_0x88c7('0x16')]);router[_0x88c7('0x15')]('/:id/users',auth[_0x88c7('0x8')](),controller['addAgents']);router['put'](_0x88c7('0xc'),auth[_0x88c7('0x8')](),controller[_0x88c7('0x17')]);router[_0x88c7('0x18')]('/:id',auth[_0x88c7('0x8')](),controller[_0x88c7('0x19')]);router[_0x88c7('0x18')](_0x88c7('0x10'),auth[_0x88c7('0x8')](),controller[_0x88c7('0x1a')]);router[_0x88c7('0x18')](_0x88c7('0x12'),auth['isAuthenticated'](),controller[_0x88c7('0x1b')]);module['exports']=router;
\ No newline at end of file
index 4c409a6..a50e9de 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb91b=['roundrobin','sequelize','exports','STRING','name','ENUM','rrmemory','beepall'];(function(_0x3ceeb2,_0x4ced8d){var _0x2feb27=function(_0x3bd925){while(--_0x3bd925){_0x3ceeb2['push'](_0x3ceeb2['shift']());}};_0x2feb27(++_0x4ced8d);}(_0xb91b,0xb1));var _0xbb91=function(_0x46585c,_0x31ee16){_0x46585c=_0x46585c-0x0;var _0x5093c3=_0xb91b[_0x46585c];return _0x5093c3;};'use strict';var Sequelize=require(_0xbb91('0x0'));module[_0xbb91('0x1')]={'name':{'type':Sequelize[_0xbb91('0x2')],'unique':_0xbb91('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xbb91('0x2')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xbb91('0x4')](_0xbb91('0x5'),_0xbb91('0x6'),_0xbb91('0x7'))}};
\ No newline at end of file
+var _0xc3a6=['name','INTEGER','rrmemory','beepall','roundrobin','sequelize','STRING'];(function(_0x13137e,_0x29c0f3){var _0x346261=function(_0x8c7d4f){while(--_0x8c7d4f){_0x13137e['push'](_0x13137e['shift']());}};_0x346261(++_0x29c0f3);}(_0xc3a6,0x116));var _0x6c3a=function(_0x2e2104,_0x2d47bc){_0x2e2104=_0x2e2104-0x0;var _0x4a0d7e=_0xc3a6[_0x2e2104];return _0x4a0d7e;};'use strict';var Sequelize=require(_0x6c3a('0x0'));module['exports']={'name':{'type':Sequelize[_0x6c3a('0x1')],'unique':_0x6c3a('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0x6c3a('0x1')]},'timeout':{'type':Sequelize[_0x6c3a('0x3')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM'](_0x6c3a('0x4'),_0x6c3a('0x5'),_0x6c3a('0x6'))}};
\ No newline at end of file
index ef81541..20491fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['length','hasOwnProperty','nolimit','order','sort','filter','where','merge','type','key','VIRTUAL','field','options','includeAll','include','OpenchannelQueue','findAll','rows','params','find','catch','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','autoAssociation','UserProfileResource','describe','getMembers','UserOpenchannelQueue','pick','OpenchannelQueueId','map','User','findAndCountAll','agent','openchannelPause','updatedAt','createdAt','format','SIP','getTeams','findOne','Team','addTeams','ids','Agents','union','addAgents','removeTeams','omit','spread','emit','userOpenchannelQueue:save','removeAgents','isArray','userOpenchannelQueue:remove','getAgents','html-pdf','eml-format','request-promise','moment','bluebird','mustache','util','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./openchannelQueue.socket','register','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','OpenchannelQueues','end','error','name','index','rawAttributes','keys','query','filters','intersection','model','attributes','fields'];(function(_0x52e8ae,_0x163d7b){var _0x5193fa=function(_0x3c7408){while(--_0x3c7408){_0x52e8ae['push'](_0x52e8ae['shift']());}};_0x5193fa(++_0x163d7b);}(_0xd8b0,0xad));var _0x0d8b=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xd8b0[_0xa464c9];return _0x3d73c4;};'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 authService=require(_0x0d8b('0xe'));var hardwareService=require(_0x0d8b('0xf'));var Redis=require(_0x0d8b('0x10'));var qs=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'];config[_0x0d8b('0x15')]=_[_0x0d8b('0x16')](config[_0x0d8b('0x15')],{'host':_0x0d8b('0x17'),'port':0x18eb});var socket=require(_0x0d8b('0x18'))(new Redis(config[_0x0d8b('0x15')]));require(_0x0d8b('0x19'))[_0x0d8b('0x1a')](socket);function respondWithStatusCode(_0x2ce75e,_0x5ad086){_0x5ad086=_0x5ad086||0xcc;return function(_0xe65334){if(_0xe65334){return _0x2ce75e[_0x0d8b('0x1b')](_0x5ad086);}return _0x2ce75e[_0x0d8b('0x1c')](_0x5ad086)['end']();};}function respondWithResult(_0x23eb7b,_0xa86349){_0xa86349=_0xa86349||0xc8;return function(_0x17f7df){if(_0x17f7df){return _0x23eb7b[_0x0d8b('0x1c')](_0xa86349)[_0x0d8b('0x1d')](_0x17f7df);}};}function respondWithFilteredResult(_0x5cd485,_0x106a01){return function(_0x4586c2){if(_0x4586c2){var _0x2fd0fc=_0x4586c2[_0x0d8b('0x1e')],_0x5fecbd=_0x106a01[_0x0d8b('0x1f')],_0x333674=_0x106a01['offset']+_0x106a01[_0x0d8b('0x20')],_0x18dd2d;if(_0x333674>=_0x2fd0fc){_0x333674=_0x2fd0fc;_0x18dd2d=0xc8;}else{_0x18dd2d=0xce;}_0x5cd485[_0x0d8b('0x1c')](_0x18dd2d);return _0x5cd485[_0x0d8b('0x21')](_0x0d8b('0x22'),_0x5fecbd+'-'+_0x333674+'/'+_0x2fd0fc)[_0x0d8b('0x1d')](_0x4586c2);}return null;};}function patchUpdates(_0x5b709c){return function(_0x393beb){try{jsonpatch[_0x0d8b('0x23')](_0x393beb,_0x5b709c,!![]);}catch(_0x50ec1e){return BPromise['reject'](_0x50ec1e);}return _0x393beb[_0x0d8b('0x24')]();};}function saveUpdates(_0x54a9a7,_0x56c729){return function(_0x5527d8){if(_0x5527d8){return _0x5527d8[_0x0d8b('0x25')](_0x54a9a7)[_0x0d8b('0x26')](function(_0x214778){return _0x214778;});}return null;};}function removeEntity(_0x38efc8,_0x221071){return function(_0x2c64e2){if(_0x2c64e2){return _0x2c64e2[_0x0d8b('0x27')]()[_0x0d8b('0x26')](function(){var _0x27b695=_0x2c64e2['get']({'plain':!![]});var _0xe8bbee=_0x0d8b('0x28');return db['UserProfileResource'][_0x0d8b('0x27')]({'where':{'type':_0xe8bbee,'resourceId':_0x27b695['id']}})['then'](function(){return _0x2c64e2;});})[_0x0d8b('0x26')](function(){_0x38efc8[_0x0d8b('0x1c')](0xcc)[_0x0d8b('0x29')]();});}};}function handleEntityNotFound(_0x4fe6f9,_0x59a905){return function(_0x28f639){if(!_0x28f639){_0x4fe6f9[_0x0d8b('0x1b')](0x194);}return _0x28f639;};}function handleError(_0x4c05ee,_0xcbc4ac){_0xcbc4ac=_0xcbc4ac||0x1f4;return function(_0x59aa83){logger[_0x0d8b('0x2a')](_0x59aa83['stack']);if(_0x59aa83[_0x0d8b('0x2b')]){delete _0x59aa83['name'];}_0x4c05ee[_0x0d8b('0x1c')](_0xcbc4ac)['send'](_0x59aa83);};}exports[_0x0d8b('0x2c')]=function(_0x544735,_0x3c8887){var _0x106e4c={},_0x2c058d={},_0x56120a={'count':0x0,'rows':[]};var _0x4c80a2=db['OpenchannelQueue'][_0x0d8b('0x2d')];_0x2c058d['model']=_[_0x0d8b('0x2e')](_0x4c80a2);_0x2c058d['query']=_['keys'](_0x544735[_0x0d8b('0x2f')]);_0x2c058d[_0x0d8b('0x30')]=_[_0x0d8b('0x31')](_0x2c058d[_0x0d8b('0x32')],_0x2c058d[_0x0d8b('0x2f')]);_0x106e4c[_0x0d8b('0x33')]=_[_0x0d8b('0x31')](_0x2c058d[_0x0d8b('0x32')],qs['fields'](_0x544735[_0x0d8b('0x2f')][_0x0d8b('0x34')]));_0x106e4c['attributes']=_0x106e4c[_0x0d8b('0x33')][_0x0d8b('0x35')]?_0x106e4c[_0x0d8b('0x33')]:_0x2c058d['model'];if(!_0x544735[_0x0d8b('0x2f')][_0x0d8b('0x36')](_0x0d8b('0x37'))){_0x106e4c[_0x0d8b('0x20')]=qs[_0x0d8b('0x20')](_0x544735['query'][_0x0d8b('0x20')]);_0x106e4c[_0x0d8b('0x1f')]=qs['offset'](_0x544735[_0x0d8b('0x2f')][_0x0d8b('0x1f')]);}_0x106e4c[_0x0d8b('0x38')]=qs[_0x0d8b('0x39')](_0x544735[_0x0d8b('0x2f')]['sort']);_0x106e4c['where']=qs[_0x0d8b('0x30')](_['pick'](_0x544735['query'],_0x2c058d[_0x0d8b('0x30')]));if(_0x544735[_0x0d8b('0x2f')][_0x0d8b('0x3a')]){_0x106e4c[_0x0d8b('0x3b')]=_[_0x0d8b('0x3c')](_0x106e4c[_0x0d8b('0x3b')],{'$or':_['map'](_0x4c80a2,function(_0x6e5bab){if(_0x6e5bab[_0x0d8b('0x3d')][_0x0d8b('0x3e')]!==_0x0d8b('0x3f')){var _0x338ed3={};_0x338ed3[_0x6e5bab[_0x0d8b('0x40')]]={'$like':'%'+_0x544735[_0x0d8b('0x2f')]['filter']+'%'};return _0x338ed3;}})});}_0x106e4c=_[_0x0d8b('0x3c')]({},_0x106e4c,_0x544735[_0x0d8b('0x41')]);var _0x3fa955={'where':_0x106e4c[_0x0d8b('0x3b')]};return db['OpenchannelQueue'][_0x0d8b('0x1e')](_0x3fa955)['then'](function(_0x37b26c){_0x56120a[_0x0d8b('0x1e')]=_0x37b26c;if(_0x544735[_0x0d8b('0x2f')][_0x0d8b('0x42')]){_0x106e4c[_0x0d8b('0x43')]=[{'all':!![]}];}return db[_0x0d8b('0x44')][_0x0d8b('0x45')](_0x106e4c);})[_0x0d8b('0x26')](function(_0x89ab0d){_0x56120a[_0x0d8b('0x46')]=_0x89ab0d;return _0x56120a;})['then'](respondWithFilteredResult(_0x3c8887,_0x106e4c))['catch'](handleError(_0x3c8887,null));};exports['show']=function(_0x4d0811,_0x524d79){var _0x1a46f6={'raw':!![],'where':{'id':_0x4d0811[_0x0d8b('0x47')]['id']}},_0x402fe0={};_0x402fe0['model']=_['keys'](db[_0x0d8b('0x44')][_0x0d8b('0x2d')]);_0x402fe0[_0x0d8b('0x2f')]=_['keys'](_0x4d0811[_0x0d8b('0x2f')]);_0x402fe0[_0x0d8b('0x30')]=_['intersection'](_0x402fe0['model'],_0x402fe0[_0x0d8b('0x2f')]);_0x1a46f6['attributes']=_[_0x0d8b('0x31')](_0x402fe0['model'],qs['fields'](_0x4d0811[_0x0d8b('0x2f')][_0x0d8b('0x34')]));_0x1a46f6['attributes']=_0x1a46f6['attributes']['length']?_0x1a46f6['attributes']:_0x402fe0[_0x0d8b('0x32')];if(_0x4d0811[_0x0d8b('0x2f')][_0x0d8b('0x42')]){_0x1a46f6['include']=[{'all':!![]}];}_0x1a46f6=_[_0x0d8b('0x3c')]({},_0x1a46f6,_0x4d0811[_0x0d8b('0x41')]);return db[_0x0d8b('0x44')][_0x0d8b('0x48')](_0x1a46f6)[_0x0d8b('0x26')](handleEntityNotFound(_0x524d79,null))[_0x0d8b('0x26')](respondWithResult(_0x524d79,null))[_0x0d8b('0x49')](handleError(_0x524d79,null));};exports[_0x0d8b('0x4a')]=function(_0x384a5e,_0x1f2077){return db[_0x0d8b('0x44')][_0x0d8b('0x4a')](_0x384a5e[_0x0d8b('0x4b')],{})[_0x0d8b('0x26')](function(_0x570af8){var _0xdfcf32=_0x384a5e[_0x0d8b('0x4c')][_0x0d8b('0x4d')]({'plain':!![]});if(!_0xdfcf32)throw new Error(_0x0d8b('0x4e'));if(_0xdfcf32['role']===_0x0d8b('0x4c')){var _0x4d8850=_0x570af8['get']({'plain':!![]});var _0x39a31d=_0x0d8b('0x28');return db[_0x0d8b('0x4f')][_0x0d8b('0x48')]({'where':{'name':_0x39a31d,'userProfileId':_0xdfcf32['userProfileId']},'raw':!![]})[_0x0d8b('0x26')](function(_0x1106d6){if(_0x1106d6&&_0x1106d6[_0x0d8b('0x50')]===0x0){return db[_0x0d8b('0x51')][_0x0d8b('0x4a')]({'name':_0x4d8850['name'],'resourceId':_0x4d8850['id'],'type':_0x1106d6['name'],'sectionId':_0x1106d6['id']},{})['then'](function(){return _0x570af8;});}else{return _0x570af8;}})['catch'](function(_0x368ede){logger[_0x0d8b('0x2a')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x368ede);throw _0x368ede;});}return _0x570af8;})['then'](respondWithResult(_0x1f2077,0xc9))[_0x0d8b('0x49')](handleError(_0x1f2077,null));};exports[_0x0d8b('0x25')]=function(_0x5c5bd7,_0x5ef6c3){if(_0x5c5bd7[_0x0d8b('0x4b')]['id']){delete _0x5c5bd7[_0x0d8b('0x4b')]['id'];}return db[_0x0d8b('0x44')][_0x0d8b('0x48')]({'where':{'id':_0x5c5bd7[_0x0d8b('0x47')]['id']}})['then'](handleEntityNotFound(_0x5ef6c3,null))[_0x0d8b('0x26')](saveUpdates(_0x5c5bd7[_0x0d8b('0x4b')],null))['then'](respondWithResult(_0x5ef6c3,null))['catch'](handleError(_0x5ef6c3,null));};exports[_0x0d8b('0x27')]=function(_0x3f2d95,_0x546fef){return db['OpenchannelQueue'][_0x0d8b('0x48')]({'where':{'id':_0x3f2d95[_0x0d8b('0x47')]['id']}})[_0x0d8b('0x26')](handleEntityNotFound(_0x546fef,null))[_0x0d8b('0x26')](removeEntity(_0x546fef,null))['catch'](handleError(_0x546fef,null));};exports[_0x0d8b('0x52')]=function(_0x598e03,_0x5c271c){return db[_0x0d8b('0x44')][_0x0d8b('0x52')]()['then'](respondWithResult(_0x5c271c,null))['catch'](handleError(_0x5c271c,null));};exports[_0x0d8b('0x53')]=function(_0x3d7161,_0xccc2a9,_0x2c1eb0){var _0x3afc3a={'raw':!![],'where':{}},_0xb66e76={},_0x3978e5;return db[_0x0d8b('0x44')]['findOne']({'where':{'id':_0x3d7161[_0x0d8b('0x47')]['id']}})[_0x0d8b('0x26')](handleEntityNotFound(_0xccc2a9,null))[_0x0d8b('0x26')](function(_0x3c7efb){if(_0x3c7efb){_0x3978e5=_0x3c7efb[_0x0d8b('0x4d')]({'plain':!![]});_0xb66e76[_0x0d8b('0x32')]=_[_0x0d8b('0x2e')](db[_0x0d8b('0x54')][_0x0d8b('0x2d')]);_0xb66e76['query']=_[_0x0d8b('0x2e')](_0x3d7161[_0x0d8b('0x2f')]);_0xb66e76[_0x0d8b('0x30')]=_[_0x0d8b('0x31')](_0xb66e76[_0x0d8b('0x32')],_0xb66e76['query']);_0x3afc3a[_0x0d8b('0x33')]=_[_0x0d8b('0x31')](_0xb66e76[_0x0d8b('0x32')],qs[_0x0d8b('0x34')](_0x3d7161[_0x0d8b('0x2f')]['fields']));_0x3afc3a['attributes']=_0x3afc3a[_0x0d8b('0x33')][_0x0d8b('0x35')]?_0x3afc3a[_0x0d8b('0x33')]:_0xb66e76[_0x0d8b('0x32')];if(!_0x3d7161['query'][_0x0d8b('0x36')](_0x0d8b('0x37'))){_0x3afc3a[_0x0d8b('0x20')]=qs['limit'](_0x3d7161[_0x0d8b('0x2f')]['limit']);_0x3afc3a[_0x0d8b('0x1f')]=qs[_0x0d8b('0x1f')](_0x3d7161[_0x0d8b('0x2f')][_0x0d8b('0x1f')]);}_0x3afc3a[_0x0d8b('0x38')]=qs[_0x0d8b('0x39')](_0x3d7161['query'][_0x0d8b('0x39')]);_0x3afc3a['where']=qs[_0x0d8b('0x30')](_[_0x0d8b('0x55')](_0x3d7161[_0x0d8b('0x2f')],_0xb66e76[_0x0d8b('0x30')]));_0x3afc3a['where'][_0x0d8b('0x56')]=_0x3c7efb['id'];if(_0x3d7161[_0x0d8b('0x2f')][_0x0d8b('0x3a')]){_0x3afc3a[_0x0d8b('0x3b')]=_[_0x0d8b('0x3c')](_0x3afc3a[_0x0d8b('0x3b')],{'$or':_[_0x0d8b('0x57')](_0x3afc3a[_0x0d8b('0x33')],function(_0x2ce282){var _0x34affb={};_0x34affb[_0x2ce282]={'$like':'%'+_0x3d7161['query']['filter']+'%'};return _0x34affb;})});}_0x3afc3a=_[_0x0d8b('0x3c')]({},_0x3afc3a,_0x3d7161[_0x0d8b('0x41')]);return db['UserOpenchannelQueue'][_0x0d8b('0x45')](_0x3afc3a);}})['then'](function(_0x5cc960){if(_0x5cc960){return db[_0x0d8b('0x58')][_0x0d8b('0x59')]({'where':{'id':_['map'](_0x5cc960,'UserId'),'role':_0x0d8b('0x5a')},'attributes':['id',_0x0d8b('0x2b'),_0x0d8b('0x5b'),_0x0d8b('0x5c'),_0x0d8b('0x5d')]});}})[_0x0d8b('0x26')](function(_0x40d265){if(_0x40d265){return{'count':_0x40d265['count'],'rows':_[_0x0d8b('0x57')](_0x40d265['rows'],function(_0x1a203e){return{'membername':_0x1a203e[_0x0d8b('0x2b')],'UserId':_0x1a203e['id'],'queue_name':_0x3978e5[_0x0d8b('0x2b')],'OpenchannelQueueId':_0x3978e5['id'],'interface':util[_0x0d8b('0x5e')]('%s/%s',_0x0d8b('0x5f'),_0x1a203e['name']),'penalty':0x0,'paused':_0x1a203e[_0x0d8b('0x5b')],'createdAt':_0x1a203e[_0x0d8b('0x5d')],'updatedAt':_0x1a203e[_0x0d8b('0x5c')]};})};}else{return{'count':0x0,'rows':[]};}})[_0x0d8b('0x26')](respondWithFilteredResult(_0xccc2a9,_0x3afc3a))[_0x0d8b('0x49')](handleError(_0xccc2a9,null));};exports[_0x0d8b('0x60')]=function(_0x3e927c,_0x91aa89,_0x266a69){var _0x44aa74={};var _0x4eb07e={};var _0x1436b3;var _0x54c28b;return db[_0x0d8b('0x44')][_0x0d8b('0x61')]({'where':{'id':_0x3e927c['params']['id']}})[_0x0d8b('0x26')](handleEntityNotFound(_0x91aa89,null))['then'](function(_0x10c318){if(_0x10c318){_0x1436b3=_0x10c318;_0x4eb07e[_0x0d8b('0x32')]=_[_0x0d8b('0x2e')](db[_0x0d8b('0x62')][_0x0d8b('0x2d')]);_0x4eb07e[_0x0d8b('0x2f')]=_[_0x0d8b('0x2e')](_0x3e927c[_0x0d8b('0x2f')]);_0x4eb07e['filters']=_[_0x0d8b('0x31')](_0x4eb07e[_0x0d8b('0x32')],_0x4eb07e['query']);_0x44aa74[_0x0d8b('0x33')]=_[_0x0d8b('0x31')](_0x4eb07e[_0x0d8b('0x32')],qs[_0x0d8b('0x34')](_0x3e927c[_0x0d8b('0x2f')][_0x0d8b('0x34')]));_0x44aa74[_0x0d8b('0x33')]=_0x44aa74[_0x0d8b('0x33')][_0x0d8b('0x35')]?_0x44aa74[_0x0d8b('0x33')]:_0x4eb07e[_0x0d8b('0x32')];_0x44aa74[_0x0d8b('0x38')]=qs['sort'](_0x3e927c[_0x0d8b('0x2f')][_0x0d8b('0x39')]);_0x44aa74[_0x0d8b('0x3b')]=qs['filters'](_['pick'](_0x3e927c[_0x0d8b('0x2f')],_0x4eb07e[_0x0d8b('0x30')]));if(_0x3e927c[_0x0d8b('0x2f')]['filter']){_0x44aa74['where']=_[_0x0d8b('0x3c')](_0x44aa74[_0x0d8b('0x3b')],{'$or':_[_0x0d8b('0x57')](_0x44aa74[_0x0d8b('0x33')],function(_0x2a2b58){var _0x3f7895={};_0x3f7895[_0x2a2b58]={'$like':'%'+_0x3e927c[_0x0d8b('0x2f')][_0x0d8b('0x3a')]+'%'};return _0x3f7895;})});}_0x44aa74=_[_0x0d8b('0x3c')]({},_0x44aa74,_0x3e927c[_0x0d8b('0x41')]);return _0x1436b3[_0x0d8b('0x60')](_0x44aa74);}})[_0x0d8b('0x26')](function(_0x3b060e){if(_0x3b060e){_0x54c28b=_0x3b060e['length'];if(!_0x3e927c[_0x0d8b('0x2f')][_0x0d8b('0x36')]('nolimit')){_0x44aa74['limit']=qs[_0x0d8b('0x20')](_0x3e927c[_0x0d8b('0x2f')][_0x0d8b('0x20')]);_0x44aa74[_0x0d8b('0x1f')]=qs[_0x0d8b('0x1f')](_0x3e927c[_0x0d8b('0x2f')]['offset']);}return _0x1436b3['getTeams'](_0x44aa74);}})['then'](function(_0x1f1eae){if(_0x1f1eae){return _0x1f1eae?{'count':_0x54c28b,'rows':_0x1f1eae}:null;}})[_0x0d8b('0x26')](respondWithResult(_0x91aa89,null))[_0x0d8b('0x49')](handleError(_0x91aa89,null));};exports[_0x0d8b('0x63')]=function(_0x3f1eee,_0x21d620,_0x5ef461){var _0x302426=[];var _0x1d173f;return db['Team'][_0x0d8b('0x45')]({'where':{'id':_0x3f1eee['body'][_0x0d8b('0x64')]},'attributes':['id'],'include':[{'model':db[_0x0d8b('0x58')],'as':_0x0d8b('0x65'),'attributes':['id'],'raw':!![]}]})[_0x0d8b('0x26')](function(_0x10c7ab){if(_0x10c7ab){for(var _0x8fae7f=0x0;_0x8fae7f<_0x10c7ab[_0x0d8b('0x35')];_0x8fae7f+=0x1){for(var _0xb73e32=0x0;_0xb73e32<_0x10c7ab[_0x8fae7f][_0x0d8b('0x65')][_0x0d8b('0x35')];_0xb73e32+=0x1){_0x302426=_[_0x0d8b('0x66')](_0x302426,[_0x10c7ab[_0x8fae7f][_0x0d8b('0x65')][_0xb73e32]['id']]);}}return _0x302426;}})['then'](function(_0x4dd64b){if(_0x4dd64b){return db[_0x0d8b('0x44')][_0x0d8b('0x48')]({'where':{'id':_0x3f1eee[_0x0d8b('0x47')]['id']}});}})[_0x0d8b('0x26')](function(_0xf91ecd){if(_0xf91ecd){_0x1d173f=_0xf91ecd;return _0x1d173f[_0x0d8b('0x67')](_0x302426,{'penalty':_0x3f1eee[_0x0d8b('0x4b')]['penalty']});}})[_0x0d8b('0x26')](function(_0x4c3948){if(_0x4c3948){return _0x1d173f[_0x0d8b('0x63')](_0x3f1eee['body']['ids']);}})[_0x0d8b('0x26')](handleEntityNotFound(_0x21d620,null))[_0x0d8b('0x26')](respondWithStatusCode(_0x21d620,null))[_0x0d8b('0x49')](handleError(_0x21d620,null));};exports[_0x0d8b('0x68')]=function(_0x2cf02c,_0x2eece2,_0x3c7b9b){var _0x180eda=[];var _0x35267a;return db[_0x0d8b('0x62')][_0x0d8b('0x45')]({'where':{'id':_0x2cf02c[_0x0d8b('0x2f')]['ids']},'attributes':['id'],'include':[{'model':db[_0x0d8b('0x58')],'as':_0x0d8b('0x65'),'attributes':['id'],'raw':!![]}]})[_0x0d8b('0x26')](function(_0x5eba19){if(_0x5eba19){for(var _0x4ce443=0x0;_0x4ce443<_0x5eba19[_0x0d8b('0x35')];_0x4ce443+=0x1){for(var _0x671705=0x0;_0x671705<_0x5eba19[_0x4ce443][_0x0d8b('0x65')][_0x0d8b('0x35')];_0x671705+=0x1){_0x180eda=_[_0x0d8b('0x66')](_0x180eda,[_0x5eba19[_0x4ce443][_0x0d8b('0x65')][_0x671705]['id']]);}}return _0x180eda;}})['then'](function(_0x1a96ce){if(_0x1a96ce){return db[_0x0d8b('0x44')][_0x0d8b('0x48')]({'where':{'id':_0x2cf02c[_0x0d8b('0x47')]['id']}});}})[_0x0d8b('0x26')](function(_0x55ea97){if(_0x55ea97){_0x35267a=_0x55ea97;return _0x35267a['removeAgents'](_0x180eda);}})[_0x0d8b('0x26')](function(_0x41ea29){if(_0x35267a){return _0x35267a[_0x0d8b('0x68')](_0x2cf02c['query'][_0x0d8b('0x64')]);}})[_0x0d8b('0x26')](handleEntityNotFound(_0x2eece2,null))[_0x0d8b('0x26')](respondWithStatusCode(_0x2eece2,null))['catch'](handleError(_0x2eece2,null));};exports[_0x0d8b('0x67')]=function(_0x3bc6d5,_0xeca283,_0x9ec9bc){return db[_0x0d8b('0x44')][_0x0d8b('0x48')]({'where':{'id':_0x3bc6d5[_0x0d8b('0x47')]['id']}})[_0x0d8b('0x26')](handleEntityNotFound(_0xeca283,null))[_0x0d8b('0x26')](function(_0x4bb4c7){if(_0x4bb4c7){return _0x4bb4c7[_0x0d8b('0x67')](_0x3bc6d5[_0x0d8b('0x4b')][_0x0d8b('0x64')],_[_0x0d8b('0x69')](_0x3bc6d5[_0x0d8b('0x4b')],[_0x0d8b('0x64'),'id'])||{})[_0x0d8b('0x6a')](function(_0x673201){for(var _0x35ebba=0x0;_0x35ebba<_0x3bc6d5['body']['ids'][_0x0d8b('0x35')];_0x35ebba+=0x1){socket[_0x0d8b('0x6b')](_0x0d8b('0x6c'),{'UserId':_0x3bc6d5[_0x0d8b('0x4b')]['ids'][_0x35ebba],'OpenchannelQueueId':_0x3bc6d5[_0x0d8b('0x47')]['id']});}return _0x673201;});}})[_0x0d8b('0x26')](respondWithResult(_0xeca283,null))['catch'](handleError(_0xeca283,null));};exports[_0x0d8b('0x6d')]=function(_0x4e1b5b,_0x4fb226,_0x2e5f7a){var _0x33965a;return db[_0x0d8b('0x44')][_0x0d8b('0x48')]({'where':{'id':_0x4e1b5b[_0x0d8b('0x47')]['id']}})[_0x0d8b('0x26')](handleEntityNotFound(_0x4fb226,null))[_0x0d8b('0x26')](function(_0x4ceb3a){if(_0x4ceb3a){return _0x4ceb3a[_0x0d8b('0x6d')](_0x4e1b5b['query']['ids'])[_0x0d8b('0x26')](function(_0x5c50f2){if(_[_0x0d8b('0x6e')](_0x4e1b5b[_0x0d8b('0x2f')]['ids'])){for(var _0x12f2bb=0x0;_0x12f2bb<_0x4e1b5b['query']['ids'][_0x0d8b('0x35')];_0x12f2bb+=0x1){socket[_0x0d8b('0x6b')](_0x0d8b('0x6f'),{'UserId':_0x4e1b5b[_0x0d8b('0x2f')][_0x0d8b('0x64')][_0x12f2bb],'OpenchannelQueueId':_0x4e1b5b['params']['id']});}}else{socket['emit'](_0x0d8b('0x6f'),{'UserId':_0x4e1b5b[_0x0d8b('0x2f')][_0x0d8b('0x64')],'OpenchannelQueueId':_0x4e1b5b[_0x0d8b('0x47')]['id']});}});}})[_0x0d8b('0x26')](respondWithStatusCode(_0x4fb226,null))[_0x0d8b('0x49')](handleError(_0x4fb226,null));};exports[_0x0d8b('0x70')]=function(_0x21bfd1,_0x4e3dd1,_0x5ab046){var _0x3582d3={};var _0x2640a6={};var _0x4a453b;var _0x551995;return db['OpenchannelQueue'][_0x0d8b('0x61')]({'where':{'id':_0x21bfd1[_0x0d8b('0x47')]['id']}})[_0x0d8b('0x26')](handleEntityNotFound(_0x4e3dd1,null))['then'](function(_0x21643d){if(_0x21643d){_0x4a453b=_0x21643d;_0x2640a6[_0x0d8b('0x32')]=_[_0x0d8b('0x2e')](db['User'][_0x0d8b('0x2d')]);_0x2640a6['query']=_[_0x0d8b('0x2e')](_0x21bfd1['query']);_0x2640a6[_0x0d8b('0x30')]=_[_0x0d8b('0x31')](_0x2640a6[_0x0d8b('0x32')],_0x2640a6[_0x0d8b('0x2f')]);_0x3582d3[_0x0d8b('0x33')]=_['intersection'](_0x2640a6[_0x0d8b('0x32')],qs['fields'](_0x21bfd1[_0x0d8b('0x2f')]['fields']));_0x3582d3[_0x0d8b('0x33')]=_0x3582d3['attributes']['length']?_0x3582d3[_0x0d8b('0x33')]:_0x2640a6[_0x0d8b('0x32')];_0x3582d3['order']=qs[_0x0d8b('0x39')](_0x21bfd1[_0x0d8b('0x2f')][_0x0d8b('0x39')]);_0x3582d3['where']=qs['filters'](_['pick'](_0x21bfd1[_0x0d8b('0x2f')],_0x2640a6[_0x0d8b('0x30')]));if(_0x21bfd1[_0x0d8b('0x2f')][_0x0d8b('0x3a')]){_0x3582d3[_0x0d8b('0x3b')]=_[_0x0d8b('0x3c')](_0x3582d3[_0x0d8b('0x3b')],{'$or':_[_0x0d8b('0x57')](_0x3582d3[_0x0d8b('0x33')],function(_0xba602f){var _0x4dc5bd={};_0x4dc5bd[_0xba602f]={'$like':'%'+_0x21bfd1[_0x0d8b('0x2f')][_0x0d8b('0x3a')]+'%'};return _0x4dc5bd;})});}_0x3582d3=_[_0x0d8b('0x3c')]({},_0x3582d3,_0x21bfd1['options']);return _0x4a453b[_0x0d8b('0x70')](_0x3582d3);}})[_0x0d8b('0x26')](function(_0x13bce2){if(_0x13bce2){_0x551995=_0x13bce2[_0x0d8b('0x35')];if(!_0x21bfd1[_0x0d8b('0x2f')][_0x0d8b('0x36')](_0x0d8b('0x37'))){_0x3582d3[_0x0d8b('0x20')]=qs[_0x0d8b('0x20')](_0x21bfd1[_0x0d8b('0x2f')][_0x0d8b('0x20')]);_0x3582d3[_0x0d8b('0x1f')]=qs['offset'](_0x21bfd1[_0x0d8b('0x2f')][_0x0d8b('0x1f')]);}return _0x4a453b[_0x0d8b('0x70')](_0x3582d3);}})[_0x0d8b('0x26')](function(_0x590889){if(_0x590889){return _0x590889?{'count':_0x551995,'rows':_0x590889}:null;}})['then'](respondWithResult(_0x4e3dd1,null))[_0x0d8b('0x49')](handleError(_0x4e3dd1,null));};
\ No newline at end of file
+var _0xb10b=['name','send','OpenchannelQueue','keys','query','filters','intersection','model','attributes','fields','length','nolimit','limit','order','sort','where','pick','merge','type','key','field','filter','options','include','findAll','rows','catch','show','rawAttributes','includeAll','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','params','describe','getMembers','findOne','hasOwnProperty','OpenchannelQueueId','map','UserOpenchannelQueue','UserId','agent','updatedAt','createdAt','format','%s/%s','getTeams','Team','ids','User','Agents','union','addAgents','penalty','addTeams','removeTeams','removeAgents','spread','emit','userOpenchannelQueue:save','userOpenchannelQueue:remove','getAgents','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./openchannelQueue.socket','sendStatus','status','end','count','offset','set','Content-Range','json','reject','update','then','destroy','get','error','stack'];(function(_0x32bc4d,_0x3d45d1){var _0x35e6b0=function(_0x25734c){while(--_0x25734c){_0x32bc4d['push'](_0x32bc4d['shift']());}};_0x35e6b0(++_0x3d45d1);}(_0xb10b,0x12a));var _0xbb10=function(_0x548503,_0x1aa00c){_0x548503=_0x548503-0x0;var _0xf8f05f=_0xb10b[_0x548503];return _0xf8f05f;};'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 authService=require(_0xbb10('0x12'));var hardwareService=require(_0xbb10('0x13'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0xbb10('0x14'))(_0xbb10('0x15'));var utils=require(_0xbb10('0x16'));var config=require('../../config/environment');var db=require(_0xbb10('0x17'))['db'];config['redis']=_[_0xbb10('0x18')](config[_0xbb10('0x19')],{'host':_0xbb10('0x1a'),'port':0x18eb});var socket=require(_0xbb10('0x1b'))(new Redis(config[_0xbb10('0x19')]));require(_0xbb10('0x1c'))['register'](socket);function respondWithStatusCode(_0x26e021,_0x42d7e4){_0x42d7e4=_0x42d7e4||0xcc;return function(_0x45b9d6){if(_0x45b9d6){return _0x26e021[_0xbb10('0x1d')](_0x42d7e4);}return _0x26e021[_0xbb10('0x1e')](_0x42d7e4)[_0xbb10('0x1f')]();};}function respondWithResult(_0x24a57b,_0x36b5e8){_0x36b5e8=_0x36b5e8||0xc8;return function(_0x3e26f4){if(_0x3e26f4){return _0x24a57b[_0xbb10('0x1e')](_0x36b5e8)['json'](_0x3e26f4);}};}function respondWithFilteredResult(_0x2eca0f,_0x1145f1){return function(_0x133ac2){if(_0x133ac2){var _0x42db98=_0x133ac2[_0xbb10('0x20')],_0x378da8=_0x1145f1[_0xbb10('0x21')],_0x1682a4=_0x1145f1[_0xbb10('0x21')]+_0x1145f1['limit'],_0x575cca;if(_0x1682a4>=_0x42db98){_0x1682a4=_0x42db98;_0x575cca=0xc8;}else{_0x575cca=0xce;}_0x2eca0f[_0xbb10('0x1e')](_0x575cca);return _0x2eca0f[_0xbb10('0x22')](_0xbb10('0x23'),_0x378da8+'-'+_0x1682a4+'/'+_0x42db98)[_0xbb10('0x24')](_0x133ac2);}return null;};}function patchUpdates(_0xdf237d){return function(_0x44e563){try{jsonpatch['apply'](_0x44e563,_0xdf237d,!![]);}catch(_0x12f888){return BPromise[_0xbb10('0x25')](_0x12f888);}return _0x44e563['save']();};}function saveUpdates(_0x4c4b0d,_0x8e2b97){return function(_0x311abe){if(_0x311abe){return _0x311abe[_0xbb10('0x26')](_0x4c4b0d)[_0xbb10('0x27')](function(_0x445761){return _0x445761;});}return null;};}function removeEntity(_0x1824b7,_0x407cb4){return function(_0x436104){if(_0x436104){return _0x436104[_0xbb10('0x28')]()[_0xbb10('0x27')](function(){var _0x3ba6cd=_0x436104[_0xbb10('0x29')]({'plain':!![]});var _0x537898='OpenchannelQueues';return db['UserProfileResource'][_0xbb10('0x28')]({'where':{'type':_0x537898,'resourceId':_0x3ba6cd['id']}})[_0xbb10('0x27')](function(){return _0x436104;});})[_0xbb10('0x27')](function(){_0x1824b7['status'](0xcc)[_0xbb10('0x1f')]();});}};}function handleEntityNotFound(_0x24d586,_0x6ed43b){return function(_0x1d5e95){if(!_0x1d5e95){_0x24d586[_0xbb10('0x1d')](0x194);}return _0x1d5e95;};}function handleError(_0x20d946,_0x2a0e8b){_0x2a0e8b=_0x2a0e8b||0x1f4;return function(_0x4aabb9){logger[_0xbb10('0x2a')](_0x4aabb9[_0xbb10('0x2b')]);if(_0x4aabb9[_0xbb10('0x2c')]){delete _0x4aabb9[_0xbb10('0x2c')];}_0x20d946[_0xbb10('0x1e')](_0x2a0e8b)[_0xbb10('0x2d')](_0x4aabb9);};}exports['index']=function(_0x221624,_0x4ee02e){var _0x448d5c={},_0x56f2da={},_0x16ad2a={'count':0x0,'rows':[]};var _0x1dcc9c=db[_0xbb10('0x2e')]['rawAttributes'];_0x56f2da['model']=_[_0xbb10('0x2f')](_0x1dcc9c);_0x56f2da[_0xbb10('0x30')]=_['keys'](_0x221624[_0xbb10('0x30')]);_0x56f2da[_0xbb10('0x31')]=_[_0xbb10('0x32')](_0x56f2da[_0xbb10('0x33')],_0x56f2da[_0xbb10('0x30')]);_0x448d5c[_0xbb10('0x34')]=_[_0xbb10('0x32')](_0x56f2da['model'],qs[_0xbb10('0x35')](_0x221624[_0xbb10('0x30')][_0xbb10('0x35')]));_0x448d5c[_0xbb10('0x34')]=_0x448d5c[_0xbb10('0x34')][_0xbb10('0x36')]?_0x448d5c[_0xbb10('0x34')]:_0x56f2da[_0xbb10('0x33')];if(!_0x221624[_0xbb10('0x30')]['hasOwnProperty'](_0xbb10('0x37'))){_0x448d5c[_0xbb10('0x38')]=qs[_0xbb10('0x38')](_0x221624[_0xbb10('0x30')]['limit']);_0x448d5c[_0xbb10('0x21')]=qs['offset'](_0x221624['query'][_0xbb10('0x21')]);}_0x448d5c[_0xbb10('0x39')]=qs[_0xbb10('0x3a')](_0x221624[_0xbb10('0x30')][_0xbb10('0x3a')]);_0x448d5c[_0xbb10('0x3b')]=qs['filters'](_[_0xbb10('0x3c')](_0x221624[_0xbb10('0x30')],_0x56f2da['filters']));if(_0x221624['query']['filter']){_0x448d5c[_0xbb10('0x3b')]=_[_0xbb10('0x3d')](_0x448d5c[_0xbb10('0x3b')],{'$or':_['map'](_0x1dcc9c,function(_0x3c0cd7){if(_0x3c0cd7[_0xbb10('0x3e')][_0xbb10('0x3f')]!=='VIRTUAL'){var _0x17b6c5={};_0x17b6c5[_0x3c0cd7[_0xbb10('0x40')]]={'$like':'%'+_0x221624[_0xbb10('0x30')][_0xbb10('0x41')]+'%'};return _0x17b6c5;}})});}_0x448d5c=_['merge']({},_0x448d5c,_0x221624[_0xbb10('0x42')]);var _0x110eb5={'where':_0x448d5c['where']};return db[_0xbb10('0x2e')][_0xbb10('0x20')](_0x110eb5)[_0xbb10('0x27')](function(_0x3a9934){_0x16ad2a[_0xbb10('0x20')]=_0x3a9934;if(_0x221624[_0xbb10('0x30')]['includeAll']){_0x448d5c[_0xbb10('0x43')]=[{'all':!![]}];}return db[_0xbb10('0x2e')][_0xbb10('0x44')](_0x448d5c);})[_0xbb10('0x27')](function(_0x4943d9){_0x16ad2a[_0xbb10('0x45')]=_0x4943d9;return _0x16ad2a;})[_0xbb10('0x27')](respondWithFilteredResult(_0x4ee02e,_0x448d5c))[_0xbb10('0x46')](handleError(_0x4ee02e,null));};exports[_0xbb10('0x47')]=function(_0x5e2cfa,_0x351484){var _0x202c60={'raw':!![],'where':{'id':_0x5e2cfa['params']['id']}},_0x54ac18={};_0x54ac18[_0xbb10('0x33')]=_['keys'](db[_0xbb10('0x2e')][_0xbb10('0x48')]);_0x54ac18['query']=_[_0xbb10('0x2f')](_0x5e2cfa[_0xbb10('0x30')]);_0x54ac18[_0xbb10('0x31')]=_['intersection'](_0x54ac18[_0xbb10('0x33')],_0x54ac18[_0xbb10('0x30')]);_0x202c60[_0xbb10('0x34')]=_[_0xbb10('0x32')](_0x54ac18[_0xbb10('0x33')],qs[_0xbb10('0x35')](_0x5e2cfa[_0xbb10('0x30')][_0xbb10('0x35')]));_0x202c60[_0xbb10('0x34')]=_0x202c60[_0xbb10('0x34')][_0xbb10('0x36')]?_0x202c60[_0xbb10('0x34')]:_0x54ac18['model'];if(_0x5e2cfa[_0xbb10('0x30')][_0xbb10('0x49')]){_0x202c60['include']=[{'all':!![]}];}_0x202c60=_[_0xbb10('0x3d')]({},_0x202c60,_0x5e2cfa[_0xbb10('0x42')]);return db[_0xbb10('0x2e')][_0xbb10('0x4a')](_0x202c60)[_0xbb10('0x27')](handleEntityNotFound(_0x351484,null))[_0xbb10('0x27')](respondWithResult(_0x351484,null))[_0xbb10('0x46')](handleError(_0x351484,null));};exports['create']=function(_0x4a9793,_0xcb3354){return db[_0xbb10('0x2e')][_0xbb10('0x4b')](_0x4a9793['body'],{})['then'](function(_0x3cd6f3){var _0x34cf4e=_0x4a9793[_0xbb10('0x4c')][_0xbb10('0x29')]({'plain':!![]});if(!_0x34cf4e)throw new Error(_0xbb10('0x4d'));if(_0x34cf4e[_0xbb10('0x4e')]===_0xbb10('0x4c')){var _0x460788=_0x3cd6f3[_0xbb10('0x29')]({'plain':!![]});var _0x3d7e7e='OpenchannelQueues';return db['UserProfileSection'][_0xbb10('0x4a')]({'where':{'name':_0x3d7e7e,'userProfileId':_0x34cf4e[_0xbb10('0x4f')]},'raw':!![]})[_0xbb10('0x27')](function(_0xb014b0){if(_0xb014b0&&_0xb014b0[_0xbb10('0x50')]===0x0){return db[_0xbb10('0x51')][_0xbb10('0x4b')]({'name':_0x460788[_0xbb10('0x2c')],'resourceId':_0x460788['id'],'type':_0xb014b0[_0xbb10('0x2c')],'sectionId':_0xb014b0['id']},{})[_0xbb10('0x27')](function(){return _0x3cd6f3;});}else{return _0x3cd6f3;}})[_0xbb10('0x46')](function(_0x20e18a){logger[_0xbb10('0x2a')](_0xbb10('0x52'),_0x20e18a);throw _0x20e18a;});}return _0x3cd6f3;})[_0xbb10('0x27')](respondWithResult(_0xcb3354,0xc9))['catch'](handleError(_0xcb3354,null));};exports[_0xbb10('0x26')]=function(_0x5bd44d,_0x33d60a){if(_0x5bd44d[_0xbb10('0x53')]['id']){delete _0x5bd44d[_0xbb10('0x53')]['id'];}return db[_0xbb10('0x2e')][_0xbb10('0x4a')]({'where':{'id':_0x5bd44d[_0xbb10('0x54')]['id']}})[_0xbb10('0x27')](handleEntityNotFound(_0x33d60a,null))[_0xbb10('0x27')](saveUpdates(_0x5bd44d[_0xbb10('0x53')],null))[_0xbb10('0x27')](respondWithResult(_0x33d60a,null))[_0xbb10('0x46')](handleError(_0x33d60a,null));};exports[_0xbb10('0x28')]=function(_0x1d49e1,_0x3d7e17){return db[_0xbb10('0x2e')]['find']({'where':{'id':_0x1d49e1[_0xbb10('0x54')]['id']}})[_0xbb10('0x27')](handleEntityNotFound(_0x3d7e17,null))[_0xbb10('0x27')](removeEntity(_0x3d7e17,null))[_0xbb10('0x46')](handleError(_0x3d7e17,null));};exports[_0xbb10('0x55')]=function(_0x379d8c,_0x4bedd0){return db[_0xbb10('0x2e')][_0xbb10('0x55')]()[_0xbb10('0x27')](respondWithResult(_0x4bedd0,null))[_0xbb10('0x46')](handleError(_0x4bedd0,null));};exports[_0xbb10('0x56')]=function(_0x22de7f,_0x175872,_0x12ec18){var _0x205e01={'raw':!![],'where':{}},_0x40c4fb={},_0x2eb05a;return db[_0xbb10('0x2e')][_0xbb10('0x57')]({'where':{'id':_0x22de7f['params']['id']}})['then'](handleEntityNotFound(_0x175872,null))[_0xbb10('0x27')](function(_0x3e6338){if(_0x3e6338){_0x2eb05a=_0x3e6338[_0xbb10('0x29')]({'plain':!![]});_0x40c4fb[_0xbb10('0x33')]=_['keys'](db['UserOpenchannelQueue'][_0xbb10('0x48')]);_0x40c4fb[_0xbb10('0x30')]=_[_0xbb10('0x2f')](_0x22de7f[_0xbb10('0x30')]);_0x40c4fb[_0xbb10('0x31')]=_[_0xbb10('0x32')](_0x40c4fb[_0xbb10('0x33')],_0x40c4fb['query']);_0x205e01[_0xbb10('0x34')]=_[_0xbb10('0x32')](_0x40c4fb['model'],qs['fields'](_0x22de7f['query'][_0xbb10('0x35')]));_0x205e01[_0xbb10('0x34')]=_0x205e01[_0xbb10('0x34')]['length']?_0x205e01['attributes']:_0x40c4fb['model'];if(!_0x22de7f[_0xbb10('0x30')][_0xbb10('0x58')](_0xbb10('0x37'))){_0x205e01['limit']=qs[_0xbb10('0x38')](_0x22de7f[_0xbb10('0x30')]['limit']);_0x205e01['offset']=qs[_0xbb10('0x21')](_0x22de7f[_0xbb10('0x30')][_0xbb10('0x21')]);}_0x205e01[_0xbb10('0x39')]=qs['sort'](_0x22de7f[_0xbb10('0x30')][_0xbb10('0x3a')]);_0x205e01[_0xbb10('0x3b')]=qs['filters'](_[_0xbb10('0x3c')](_0x22de7f[_0xbb10('0x30')],_0x40c4fb[_0xbb10('0x31')]));_0x205e01['where'][_0xbb10('0x59')]=_0x3e6338['id'];if(_0x22de7f[_0xbb10('0x30')][_0xbb10('0x41')]){_0x205e01[_0xbb10('0x3b')]=_['merge'](_0x205e01[_0xbb10('0x3b')],{'$or':_[_0xbb10('0x5a')](_0x205e01[_0xbb10('0x34')],function(_0x2d0f4b){var _0x56b3a3={};_0x56b3a3[_0x2d0f4b]={'$like':'%'+_0x22de7f[_0xbb10('0x30')][_0xbb10('0x41')]+'%'};return _0x56b3a3;})});}_0x205e01=_[_0xbb10('0x3d')]({},_0x205e01,_0x22de7f[_0xbb10('0x42')]);return db[_0xbb10('0x5b')][_0xbb10('0x44')](_0x205e01);}})[_0xbb10('0x27')](function(_0x4a30c5){if(_0x4a30c5){return db['User']['findAndCountAll']({'where':{'id':_[_0xbb10('0x5a')](_0x4a30c5,_0xbb10('0x5c')),'role':_0xbb10('0x5d')},'attributes':['id','name','openchannelPause',_0xbb10('0x5e'),_0xbb10('0x5f')]});}})[_0xbb10('0x27')](function(_0x3a9677){if(_0x3a9677){return{'count':_0x3a9677[_0xbb10('0x20')],'rows':_[_0xbb10('0x5a')](_0x3a9677['rows'],function(_0x1a5ca5){return{'membername':_0x1a5ca5[_0xbb10('0x2c')],'UserId':_0x1a5ca5['id'],'queue_name':_0x2eb05a[_0xbb10('0x2c')],'OpenchannelQueueId':_0x2eb05a['id'],'interface':util[_0xbb10('0x60')](_0xbb10('0x61'),'SIP',_0x1a5ca5['name']),'penalty':0x0,'paused':_0x1a5ca5['openchannelPause'],'createdAt':_0x1a5ca5[_0xbb10('0x5f')],'updatedAt':_0x1a5ca5[_0xbb10('0x5e')]};})};}else{return{'count':0x0,'rows':[]};}})[_0xbb10('0x27')](respondWithFilteredResult(_0x175872,_0x205e01))[_0xbb10('0x46')](handleError(_0x175872,null));};exports[_0xbb10('0x62')]=function(_0x1d40b8,_0x5d942d,_0x93f3c4){var _0x4bc316={};var _0x4fe3b5={};var _0x519a54;var _0xdf634f;return db[_0xbb10('0x2e')][_0xbb10('0x57')]({'where':{'id':_0x1d40b8[_0xbb10('0x54')]['id']}})['then'](handleEntityNotFound(_0x5d942d,null))[_0xbb10('0x27')](function(_0x5c583b){if(_0x5c583b){_0x519a54=_0x5c583b;_0x4fe3b5['model']=_[_0xbb10('0x2f')](db[_0xbb10('0x63')][_0xbb10('0x48')]);_0x4fe3b5[_0xbb10('0x30')]=_[_0xbb10('0x2f')](_0x1d40b8['query']);_0x4fe3b5[_0xbb10('0x31')]=_[_0xbb10('0x32')](_0x4fe3b5[_0xbb10('0x33')],_0x4fe3b5[_0xbb10('0x30')]);_0x4bc316[_0xbb10('0x34')]=_[_0xbb10('0x32')](_0x4fe3b5[_0xbb10('0x33')],qs['fields'](_0x1d40b8[_0xbb10('0x30')][_0xbb10('0x35')]));_0x4bc316[_0xbb10('0x34')]=_0x4bc316[_0xbb10('0x34')][_0xbb10('0x36')]?_0x4bc316[_0xbb10('0x34')]:_0x4fe3b5[_0xbb10('0x33')];_0x4bc316[_0xbb10('0x39')]=qs['sort'](_0x1d40b8[_0xbb10('0x30')][_0xbb10('0x3a')]);_0x4bc316[_0xbb10('0x3b')]=qs['filters'](_['pick'](_0x1d40b8['query'],_0x4fe3b5[_0xbb10('0x31')]));if(_0x1d40b8['query']['filter']){_0x4bc316[_0xbb10('0x3b')]=_[_0xbb10('0x3d')](_0x4bc316[_0xbb10('0x3b')],{'$or':_[_0xbb10('0x5a')](_0x4bc316[_0xbb10('0x34')],function(_0x24dca6){var _0x33116={};_0x33116[_0x24dca6]={'$like':'%'+_0x1d40b8[_0xbb10('0x30')][_0xbb10('0x41')]+'%'};return _0x33116;})});}_0x4bc316=_['merge']({},_0x4bc316,_0x1d40b8[_0xbb10('0x42')]);return _0x519a54[_0xbb10('0x62')](_0x4bc316);}})[_0xbb10('0x27')](function(_0x35b811){if(_0x35b811){_0xdf634f=_0x35b811['length'];if(!_0x1d40b8['query'][_0xbb10('0x58')](_0xbb10('0x37'))){_0x4bc316[_0xbb10('0x38')]=qs[_0xbb10('0x38')](_0x1d40b8['query'][_0xbb10('0x38')]);_0x4bc316[_0xbb10('0x21')]=qs[_0xbb10('0x21')](_0x1d40b8[_0xbb10('0x30')][_0xbb10('0x21')]);}return _0x519a54['getTeams'](_0x4bc316);}})['then'](function(_0x372636){if(_0x372636){return _0x372636?{'count':_0xdf634f,'rows':_0x372636}:null;}})[_0xbb10('0x27')](respondWithResult(_0x5d942d,null))[_0xbb10('0x46')](handleError(_0x5d942d,null));};exports['addTeams']=function(_0x256b35,_0x13e2ab,_0x50bcc9){var _0x5caa06=[];var _0x2f667f;return db[_0xbb10('0x63')][_0xbb10('0x44')]({'where':{'id':_0x256b35['body'][_0xbb10('0x64')]},'attributes':['id'],'include':[{'model':db[_0xbb10('0x65')],'as':_0xbb10('0x66'),'attributes':['id'],'raw':!![]}]})[_0xbb10('0x27')](function(_0x2ef96f){if(_0x2ef96f){for(var _0x5de006=0x0;_0x5de006<_0x2ef96f[_0xbb10('0x36')];_0x5de006+=0x1){for(var _0x226363=0x0;_0x226363<_0x2ef96f[_0x5de006][_0xbb10('0x66')]['length'];_0x226363+=0x1){_0x5caa06=_[_0xbb10('0x67')](_0x5caa06,[_0x2ef96f[_0x5de006][_0xbb10('0x66')][_0x226363]['id']]);}}return _0x5caa06;}})[_0xbb10('0x27')](function(_0xdb7d3e){if(_0xdb7d3e){return db[_0xbb10('0x2e')][_0xbb10('0x4a')]({'where':{'id':_0x256b35[_0xbb10('0x54')]['id']}});}})[_0xbb10('0x27')](function(_0x17ed20){if(_0x17ed20){_0x2f667f=_0x17ed20;return _0x2f667f[_0xbb10('0x68')](_0x5caa06,{'penalty':_0x256b35[_0xbb10('0x53')][_0xbb10('0x69')]});}})['then'](function(_0x51f106){if(_0x51f106){return _0x2f667f[_0xbb10('0x6a')](_0x256b35[_0xbb10('0x53')][_0xbb10('0x64')]);}})[_0xbb10('0x27')](handleEntityNotFound(_0x13e2ab,null))[_0xbb10('0x27')](respondWithStatusCode(_0x13e2ab,null))['catch'](handleError(_0x13e2ab,null));};exports[_0xbb10('0x6b')]=function(_0x332fbe,_0x3b4d0b,_0x1a51d3){var _0x19694d=[];var _0x379d49;return db['Team'][_0xbb10('0x44')]({'where':{'id':_0x332fbe[_0xbb10('0x30')]['ids']},'attributes':['id'],'include':[{'model':db[_0xbb10('0x65')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0xbb10('0x27')](function(_0x28bd76){if(_0x28bd76){for(var _0x2b473c=0x0;_0x2b473c<_0x28bd76[_0xbb10('0x36')];_0x2b473c+=0x1){for(var _0x3a4a6e=0x0;_0x3a4a6e<_0x28bd76[_0x2b473c]['Agents'][_0xbb10('0x36')];_0x3a4a6e+=0x1){_0x19694d=_['union'](_0x19694d,[_0x28bd76[_0x2b473c][_0xbb10('0x66')][_0x3a4a6e]['id']]);}}return _0x19694d;}})[_0xbb10('0x27')](function(_0x5d767f){if(_0x5d767f){return db['OpenchannelQueue'][_0xbb10('0x4a')]({'where':{'id':_0x332fbe[_0xbb10('0x54')]['id']}});}})[_0xbb10('0x27')](function(_0x283bab){if(_0x283bab){_0x379d49=_0x283bab;return _0x379d49[_0xbb10('0x6c')](_0x19694d);}})[_0xbb10('0x27')](function(_0x1b6ebc){if(_0x379d49){return _0x379d49[_0xbb10('0x6b')](_0x332fbe[_0xbb10('0x30')][_0xbb10('0x64')]);}})[_0xbb10('0x27')](handleEntityNotFound(_0x3b4d0b,null))['then'](respondWithStatusCode(_0x3b4d0b,null))[_0xbb10('0x46')](handleError(_0x3b4d0b,null));};exports[_0xbb10('0x68')]=function(_0x1b0a6c,_0xcd5d35,_0xfe02f5){return db[_0xbb10('0x2e')][_0xbb10('0x4a')]({'where':{'id':_0x1b0a6c[_0xbb10('0x54')]['id']}})[_0xbb10('0x27')](handleEntityNotFound(_0xcd5d35,null))[_0xbb10('0x27')](function(_0x1c4235){if(_0x1c4235){return _0x1c4235[_0xbb10('0x68')](_0x1b0a6c['body'][_0xbb10('0x64')],_['omit'](_0x1b0a6c[_0xbb10('0x53')],[_0xbb10('0x64'),'id'])||{})[_0xbb10('0x6d')](function(_0x40236c){for(var _0x38d369=0x0;_0x38d369<_0x1b0a6c['body'][_0xbb10('0x64')][_0xbb10('0x36')];_0x38d369+=0x1){socket[_0xbb10('0x6e')](_0xbb10('0x6f'),{'UserId':_0x1b0a6c[_0xbb10('0x53')][_0xbb10('0x64')][_0x38d369],'OpenchannelQueueId':_0x1b0a6c['params']['id']});}return _0x40236c;});}})['then'](respondWithResult(_0xcd5d35,null))[_0xbb10('0x46')](handleError(_0xcd5d35,null));};exports[_0xbb10('0x6c')]=function(_0x41d4d0,_0x57d5a1,_0x124b32){var _0x3d6a91;return db['OpenchannelQueue'][_0xbb10('0x4a')]({'where':{'id':_0x41d4d0[_0xbb10('0x54')]['id']}})['then'](handleEntityNotFound(_0x57d5a1,null))[_0xbb10('0x27')](function(_0x4d7bca){if(_0x4d7bca){return _0x4d7bca[_0xbb10('0x6c')](_0x41d4d0[_0xbb10('0x30')]['ids'])[_0xbb10('0x27')](function(_0x28cc74){if(_['isArray'](_0x41d4d0['query'][_0xbb10('0x64')])){for(var _0x13ae83=0x0;_0x13ae83<_0x41d4d0[_0xbb10('0x30')][_0xbb10('0x64')][_0xbb10('0x36')];_0x13ae83+=0x1){socket['emit'](_0xbb10('0x70'),{'UserId':_0x41d4d0[_0xbb10('0x30')][_0xbb10('0x64')][_0x13ae83],'OpenchannelQueueId':_0x41d4d0['params']['id']});}}else{socket[_0xbb10('0x6e')](_0xbb10('0x70'),{'UserId':_0x41d4d0[_0xbb10('0x30')][_0xbb10('0x64')],'OpenchannelQueueId':_0x41d4d0[_0xbb10('0x54')]['id']});}});}})[_0xbb10('0x27')](respondWithStatusCode(_0x57d5a1,null))[_0xbb10('0x46')](handleError(_0x57d5a1,null));};exports[_0xbb10('0x71')]=function(_0x2010d4,_0x5f1fcd,_0x4fc544){var _0x37e40c={};var _0xe7238b={};var _0x293f3f;var _0x44f097;return db[_0xbb10('0x2e')][_0xbb10('0x57')]({'where':{'id':_0x2010d4[_0xbb10('0x54')]['id']}})[_0xbb10('0x27')](handleEntityNotFound(_0x5f1fcd,null))[_0xbb10('0x27')](function(_0x471827){if(_0x471827){_0x293f3f=_0x471827;_0xe7238b[_0xbb10('0x33')]=_[_0xbb10('0x2f')](db[_0xbb10('0x65')]['rawAttributes']);_0xe7238b[_0xbb10('0x30')]=_[_0xbb10('0x2f')](_0x2010d4[_0xbb10('0x30')]);_0xe7238b[_0xbb10('0x31')]=_[_0xbb10('0x32')](_0xe7238b[_0xbb10('0x33')],_0xe7238b[_0xbb10('0x30')]);_0x37e40c[_0xbb10('0x34')]=_[_0xbb10('0x32')](_0xe7238b[_0xbb10('0x33')],qs[_0xbb10('0x35')](_0x2010d4['query'][_0xbb10('0x35')]));_0x37e40c['attributes']=_0x37e40c[_0xbb10('0x34')][_0xbb10('0x36')]?_0x37e40c[_0xbb10('0x34')]:_0xe7238b[_0xbb10('0x33')];_0x37e40c[_0xbb10('0x39')]=qs[_0xbb10('0x3a')](_0x2010d4['query'][_0xbb10('0x3a')]);_0x37e40c['where']=qs[_0xbb10('0x31')](_[_0xbb10('0x3c')](_0x2010d4[_0xbb10('0x30')],_0xe7238b[_0xbb10('0x31')]));if(_0x2010d4[_0xbb10('0x30')][_0xbb10('0x41')]){_0x37e40c[_0xbb10('0x3b')]=_[_0xbb10('0x3d')](_0x37e40c[_0xbb10('0x3b')],{'$or':_[_0xbb10('0x5a')](_0x37e40c[_0xbb10('0x34')],function(_0xa09041){var _0x589565={};_0x589565[_0xa09041]={'$like':'%'+_0x2010d4[_0xbb10('0x30')]['filter']+'%'};return _0x589565;})});}_0x37e40c=_[_0xbb10('0x3d')]({},_0x37e40c,_0x2010d4[_0xbb10('0x42')]);return _0x293f3f[_0xbb10('0x71')](_0x37e40c);}})[_0xbb10('0x27')](function(_0x44c229){if(_0x44c229){_0x44f097=_0x44c229[_0xbb10('0x36')];if(!_0x2010d4[_0xbb10('0x30')]['hasOwnProperty'](_0xbb10('0x37'))){_0x37e40c['limit']=qs['limit'](_0x2010d4[_0xbb10('0x30')][_0xbb10('0x38')]);_0x37e40c[_0xbb10('0x21')]=qs[_0xbb10('0x21')](_0x2010d4[_0xbb10('0x30')][_0xbb10('0x21')]);}return _0x293f3f['getAgents'](_0x37e40c);}})[_0xbb10('0x27')](function(_0x2c25ab){if(_0x2c25ab){return _0x2c25ab?{'count':_0x44f097,'rows':_0x2c25ab}:null;}})[_0xbb10('0x27')](respondWithResult(_0x5f1fcd,null))[_0xbb10('0x46')](handleError(_0x5f1fcd,null));};
\ No newline at end of file
index 8f3a396..2745628 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x054a=['save','update','remove','emit','hasOwnProperty','hook','exports','events','OpenchannelQueue'];(function(_0x1d4d04,_0x17cc3e){var _0x24620d=function(_0x72c5fb){while(--_0x72c5fb){_0x1d4d04['push'](_0x1d4d04['shift']());}};_0x24620d(++_0x17cc3e);}(_0x054a,0xa0));var _0xa054=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x054a[_0x20a584];return _0x4b41a8;};'use strict';var EventEmitter=require(_0xa054('0x0'));var OpenchannelQueue=require('../../mysqldb')['db'][_0xa054('0x1')];var OpenchannelQueueEvents=new EventEmitter();OpenchannelQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xa054('0x2'),'afterUpdate':_0xa054('0x3'),'afterDestroy':_0xa054('0x4')};function emitEvent(_0x3f74a9){return function(_0x27b254,_0x522ec1,_0x28f2af){OpenchannelQueueEvents[_0xa054('0x5')](_0x3f74a9+':'+_0x27b254['id'],_0x27b254);OpenchannelQueueEvents[_0xa054('0x5')](_0x3f74a9,_0x27b254);_0x28f2af(null);};}for(var e in events){if(events[_0xa054('0x6')](e)){var event=events[e];OpenchannelQueue[_0xa054('0x7')](e,emitEvent(event));}}module[_0xa054('0x8')]=OpenchannelQueueEvents;
\ No newline at end of file
+var _0x2e08=['../../mysqldb','save','update','remove','emit','hasOwnProperty','hook','exports'];(function(_0x518392,_0x25ac70){var _0x344e59=function(_0xa99198){while(--_0xa99198){_0x518392['push'](_0x518392['shift']());}};_0x344e59(++_0x25ac70);}(_0x2e08,0x1b0));var _0x82e0=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x2e08[_0x42cae2];return _0x5f256f;};'use strict';var EventEmitter=require('events');var OpenchannelQueue=require(_0x82e0('0x0'))['db']['OpenchannelQueue'];var OpenchannelQueueEvents=new EventEmitter();OpenchannelQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x82e0('0x1'),'afterUpdate':_0x82e0('0x2'),'afterDestroy':_0x82e0('0x3')};function emitEvent(_0x3f91a0){return function(_0x5622bf,_0x543e9d,_0x4e9e66){OpenchannelQueueEvents[_0x82e0('0x4')](_0x3f91a0+':'+_0x5622bf['id'],_0x5622bf);OpenchannelQueueEvents[_0x82e0('0x4')](_0x3f91a0,_0x5622bf);_0x4e9e66(null);};}for(var e in events){if(events[_0x82e0('0x5')](e)){var event=events[e];OpenchannelQueue[_0x82e0('0x6')](e,emitEvent(event));}}module[_0x82e0('0x7')]=OpenchannelQueueEvents;
\ No newline at end of file
index 520603e..8a4c3f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa37e=['define','../../config/logger','api','moment','bluebird','./openchannelQueue.attributes'];(function(_0x5ac0c8,_0x59bfa5){var _0x25a670=function(_0x4ea96d){while(--_0x4ea96d){_0x5ac0c8['push'](_0x5ac0c8['shift']());}};_0x25a670(++_0x59bfa5);}(_0xa37e,0x97));var _0xea37=function(_0x515aaa,_0x2b8f29){_0x515aaa=_0x515aaa-0x0;var _0x3ea920=_0xa37e[_0x515aaa];return _0x3ea920;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xea37('0x0'))(_0xea37('0x1'));var moment=require(_0xea37('0x2'));var BPromise=require(_0xea37('0x3'));var rp=require('request-promise');var attributes=require(_0xea37('0x4'));module['exports']=function(_0x360ed5,_0x3eea71){return _0x360ed5[_0xea37('0x5')]('OpenchannelQueue',attributes,{'tableName':'openchannel_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4c6d=['./openchannelQueue.attributes','exports','define','openchannel_queues','lodash','util','../../config/logger','api','moment','request-promise'];(function(_0xffd9e8,_0x165d2a){var _0x5d6c6e=function(_0x51e3f9){while(--_0x51e3f9){_0xffd9e8['push'](_0xffd9e8['shift']());}};_0x5d6c6e(++_0x165d2a);}(_0x4c6d,0x1d0));var _0xd4c6=function(_0x56b0e0,_0x39dda0){_0x56b0e0=_0x56b0e0-0x0;var _0x95f306=_0x4c6d[_0x56b0e0];return _0x95f306;};'use strict';var _=require(_0xd4c6('0x0'));var util=require(_0xd4c6('0x1'));var logger=require(_0xd4c6('0x2'))(_0xd4c6('0x3'));var moment=require(_0xd4c6('0x4'));var BPromise=require('bluebird');var rp=require(_0xd4c6('0x5'));var attributes=require(_0xd4c6('0x6'));module[_0xd4c6('0x7')]=function(_0x4b2d75,_0x1b5bd1){return _0x4b2d75[_0xd4c6('0x8')]('OpenchannelQueue',attributes,{'tableName':_0xd4c6('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 36d9b97..0364169 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdad2=['ShowOpenchannelQueue','find','raw','where','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','jayson/promise','client','http','redis','localhost','socket.io-emitter','./openchannelQueue.socket','register','request','info','OpenchannelQueue,\x20%s,\x20%s','debug','OpenchannelQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','GetOpenchannelQueue','OpenchannelQueue','findAll','options','attributes','limit','include','map','model','then','catch'];(function(_0x1d227e,_0x491955){var _0x4f752a=function(_0x521229){while(--_0x521229){_0x1d227e['push'](_0x1d227e['shift']());}};_0x4f752a(++_0x491955);}(_0xdad2,0x14c));var _0x2dad=function(_0x178e48,_0x3c9509){_0x178e48=_0x178e48-0x0;var _0x440d7e=_0xdad2[_0x178e48];return _0x440d7e;};'use strict';var _=require('lodash');var util=require(_0x2dad('0x0'));var moment=require(_0x2dad('0x1'));var BPromise=require('bluebird');var rs=require(_0x2dad('0x2'));var fs=require('fs');var Redis=require(_0x2dad('0x3'));var db=require(_0x2dad('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x2dad('0x5'))(_0x2dad('0x6'));var config=require('../../config/environment');var jayson=require(_0x2dad('0x7'));var client=jayson[_0x2dad('0x8')][_0x2dad('0x9')]({'port':0x232a});config[_0x2dad('0xa')]=_['defaults'](config['redis'],{'host':_0x2dad('0xb'),'port':0x18eb});var socket=require(_0x2dad('0xc'))(new Redis(config[_0x2dad('0xa')]));require(_0x2dad('0xd'))[_0x2dad('0xe')](socket);function respondWithRpcPromise(_0x2cd8bc,_0x53485d,_0x346f72){return new BPromise(function(_0x57d1a2,_0x4258a0){return client[_0x2dad('0xf')](_0x2cd8bc,_0x346f72)['then'](function(_0x226dcb){logger[_0x2dad('0x10')](_0x2dad('0x11'),_0x53485d,'request\x20sent');logger[_0x2dad('0x12')](_0x2dad('0x13'),_0x53485d,'request\x20sent',JSON[_0x2dad('0x14')](_0x226dcb));if(_0x226dcb[_0x2dad('0x15')]){if(_0x226dcb[_0x2dad('0x15')][_0x2dad('0x16')]===0x1f4){logger['error'](_0x2dad('0x11'),_0x53485d,_0x226dcb[_0x2dad('0x15')][_0x2dad('0x17')]);return _0x4258a0(_0x226dcb[_0x2dad('0x15')][_0x2dad('0x17')]);}logger['error']('OpenchannelQueue,\x20%s,\x20%s',_0x53485d,_0x226dcb[_0x2dad('0x15')]['message']);return _0x57d1a2(_0x226dcb['error']['message']);}else{logger[_0x2dad('0x10')](_0x2dad('0x11'),_0x53485d,_0x2dad('0x18'));_0x57d1a2(_0x226dcb[_0x2dad('0x19')][_0x2dad('0x17')]);}})['catch'](function(_0x247de3){logger[_0x2dad('0x15')]('OpenchannelQueue,\x20%s,\x20%s',_0x53485d,_0x247de3);_0x4258a0(_0x247de3);});});}exports[_0x2dad('0x1a')]=function(_0x49cb11){var _0x514d13=this;return new Promise(function(_0xa123e6,_0xc8dd1f){return db[_0x2dad('0x1b')][_0x2dad('0x1c')]({'raw':_0x49cb11[_0x2dad('0x1d')]?_0x49cb11[_0x2dad('0x1d')]['raw']===undefined?!![]:![]:!![],'where':_0x49cb11['options']?_0x49cb11[_0x2dad('0x1d')]['where']||null:null,'attributes':_0x49cb11['options']?_0x49cb11[_0x2dad('0x1d')][_0x2dad('0x1e')]||null:null,'limit':_0x49cb11[_0x2dad('0x1d')]?_0x49cb11['options'][_0x2dad('0x1f')]||null:null,'include':_0x49cb11['options']?_0x49cb11[_0x2dad('0x1d')][_0x2dad('0x20')]?_[_0x2dad('0x21')](_0x49cb11['options'][_0x2dad('0x20')],function(_0x30e0fe){return{'model':db[_0x30e0fe[_0x2dad('0x22')]],'as':_0x30e0fe['as'],'attributes':_0x30e0fe['attributes'],'include':_0x30e0fe[_0x2dad('0x20')]?_[_0x2dad('0x21')](_0x30e0fe[_0x2dad('0x20')],function(_0x518ee2){return{'model':db[_0x518ee2[_0x2dad('0x22')]],'as':_0x518ee2['as'],'attributes':_0x518ee2[_0x2dad('0x1e')],'include':_0x518ee2[_0x2dad('0x20')]?_[_0x2dad('0x21')](_0x518ee2[_0x2dad('0x20')],function(_0x37c3e1){return{'model':db[_0x37c3e1[_0x2dad('0x22')]],'as':_0x37c3e1['as'],'attributes':_0x37c3e1['attributes']};}):[]};}):[]};}):[]:[]})[_0x2dad('0x23')](function(_0x1dd053){logger['info']('GetOpenchannelQueue',_0x49cb11);logger[_0x2dad('0x12')](_0x2dad('0x1a'),_0x49cb11,JSON['stringify'](_0x1dd053));_0xa123e6(_0x1dd053);})[_0x2dad('0x24')](function(_0x2f0a7a){logger[_0x2dad('0x15')]('GetOpenchannelQueue',_0x2f0a7a['message'],_0x49cb11);_0xc8dd1f(_0x514d13[_0x2dad('0x15')](0x1f4,_0x2f0a7a[_0x2dad('0x17')]));});});};exports[_0x2dad('0x25')]=function(_0x344ad3){var _0x3516c5=this;return new Promise(function(_0x590283,_0x3d1e69){return db['OpenchannelQueue'][_0x2dad('0x26')]({'raw':_0x344ad3[_0x2dad('0x1d')]?_0x344ad3[_0x2dad('0x1d')][_0x2dad('0x27')]===undefined?!![]:![]:!![],'where':_0x344ad3[_0x2dad('0x1d')]?_0x344ad3[_0x2dad('0x1d')][_0x2dad('0x28')]||null:null,'attributes':_0x344ad3[_0x2dad('0x1d')]?_0x344ad3[_0x2dad('0x1d')][_0x2dad('0x1e')]||null:null,'include':_0x344ad3[_0x2dad('0x1d')]?_0x344ad3[_0x2dad('0x1d')][_0x2dad('0x20')]?_[_0x2dad('0x21')](_0x344ad3[_0x2dad('0x1d')][_0x2dad('0x20')],function(_0xb7c090){return{'model':db[_0xb7c090[_0x2dad('0x22')]],'as':_0xb7c090['as'],'attributes':_0xb7c090['attributes'],'include':_0xb7c090[_0x2dad('0x20')]?_['map'](_0xb7c090[_0x2dad('0x20')],function(_0x351a67){return{'model':db[_0x351a67['model']],'as':_0x351a67['as'],'attributes':_0x351a67[_0x2dad('0x1e')],'include':_0x351a67[_0x2dad('0x20')]?_[_0x2dad('0x21')](_0x351a67[_0x2dad('0x20')],function(_0x520d3c){return{'model':db[_0x520d3c['model']],'as':_0x520d3c['as'],'attributes':_0x520d3c[_0x2dad('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x2dad('0x23')](function(_0x14e360){logger[_0x2dad('0x10')](_0x2dad('0x25'),_0x344ad3);logger[_0x2dad('0x12')]('ShowOpenchannelQueue',_0x344ad3,JSON[_0x2dad('0x14')](_0x14e360));_0x590283(_0x14e360);})[_0x2dad('0x24')](function(_0x101651){logger['error'](_0x2dad('0x25'),_0x101651[_0x2dad('0x17')],_0x344ad3);_0x3d1e69(_0x3516c5['error'](0x1f4,_0x101651[_0x2dad('0x17')]));});});};
\ No newline at end of file
+var _0x291c=['result','catch','GetOpenchannelQueue','OpenchannelQueue','findAll','options','raw','where','attributes','include','map','model','then','info','stringify','ShowOpenchannelQueue','find','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','defaults','redis','localhost','socket.io-emitter','./openchannelQueue.socket','register','request','OpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','error','code','message'];(function(_0x4cb8e7,_0x2e1d22){var _0x3d0188=function(_0x6c6a39){while(--_0x6c6a39){_0x4cb8e7['push'](_0x4cb8e7['shift']());}};_0x3d0188(++_0x2e1d22);}(_0x291c,0x137));var _0xc291=function(_0x59ee6f,_0x450239){_0x59ee6f=_0x59ee6f-0x0;var _0x4c0979=_0x291c[_0x59ee6f];return _0x4c0979;};'use strict';var _=require(_0xc291('0x0'));var util=require(_0xc291('0x1'));var moment=require(_0xc291('0x2'));var BPromise=require(_0xc291('0x3'));var rs=require(_0xc291('0x4'));var fs=require('fs');var Redis=require(_0xc291('0x5'));var db=require(_0xc291('0x6'))['db'];var utils=require(_0xc291('0x7'));var logger=require(_0xc291('0x8'))(_0xc291('0x9'));var config=require(_0xc291('0xa'));var jayson=require('jayson/promise');var client=jayson[_0xc291('0xb')]['http']({'port':0x232a});config['redis']=_[_0xc291('0xc')](config[_0xc291('0xd')],{'host':_0xc291('0xe'),'port':0x18eb});var socket=require(_0xc291('0xf'))(new Redis(config['redis']));require(_0xc291('0x10'))[_0xc291('0x11')](socket);function respondWithRpcPromise(_0x143a77,_0x173e88,_0xf1d8b6){return new BPromise(function(_0x24927d,_0x325e6e){return client[_0xc291('0x12')](_0x143a77,_0xf1d8b6)['then'](function(_0x49934e){logger['info'](_0xc291('0x13'),_0x173e88,_0xc291('0x14'));logger[_0xc291('0x15')]('OpenchannelQueue,\x20%s,\x20%s,\x20%s',_0x173e88,_0xc291('0x14'),JSON['stringify'](_0x49934e));if(_0x49934e[_0xc291('0x16')]){if(_0x49934e[_0xc291('0x16')][_0xc291('0x17')]===0x1f4){logger[_0xc291('0x16')](_0xc291('0x13'),_0x173e88,_0x49934e[_0xc291('0x16')][_0xc291('0x18')]);return _0x325e6e(_0x49934e[_0xc291('0x16')][_0xc291('0x18')]);}logger[_0xc291('0x16')]('OpenchannelQueue,\x20%s,\x20%s',_0x173e88,_0x49934e[_0xc291('0x16')][_0xc291('0x18')]);return _0x24927d(_0x49934e['error'][_0xc291('0x18')]);}else{logger['info']('OpenchannelQueue,\x20%s,\x20%s',_0x173e88,'request\x20sent');_0x24927d(_0x49934e[_0xc291('0x19')][_0xc291('0x18')]);}})[_0xc291('0x1a')](function(_0x212325){logger[_0xc291('0x16')](_0xc291('0x13'),_0x173e88,_0x212325);_0x325e6e(_0x212325);});});}exports[_0xc291('0x1b')]=function(_0x163227){var _0x1a27a3=this;return new Promise(function(_0x27a66a,_0x4b511c){return db[_0xc291('0x1c')][_0xc291('0x1d')]({'raw':_0x163227[_0xc291('0x1e')]?_0x163227['options'][_0xc291('0x1f')]===undefined?!![]:![]:!![],'where':_0x163227['options']?_0x163227[_0xc291('0x1e')][_0xc291('0x20')]||null:null,'attributes':_0x163227['options']?_0x163227['options'][_0xc291('0x21')]||null:null,'limit':_0x163227[_0xc291('0x1e')]?_0x163227[_0xc291('0x1e')]['limit']||null:null,'include':_0x163227[_0xc291('0x1e')]?_0x163227['options'][_0xc291('0x22')]?_[_0xc291('0x23')](_0x163227[_0xc291('0x1e')][_0xc291('0x22')],function(_0x879898){return{'model':db[_0x879898[_0xc291('0x24')]],'as':_0x879898['as'],'attributes':_0x879898[_0xc291('0x21')],'include':_0x879898[_0xc291('0x22')]?_['map'](_0x879898[_0xc291('0x22')],function(_0x273c0a){return{'model':db[_0x273c0a[_0xc291('0x24')]],'as':_0x273c0a['as'],'attributes':_0x273c0a['attributes'],'include':_0x273c0a[_0xc291('0x22')]?_[_0xc291('0x23')](_0x273c0a[_0xc291('0x22')],function(_0xd38395){return{'model':db[_0xd38395[_0xc291('0x24')]],'as':_0xd38395['as'],'attributes':_0xd38395['attributes']};}):[]};}):[]};}):[]:[]})[_0xc291('0x25')](function(_0x269c8e){logger[_0xc291('0x26')]('GetOpenchannelQueue',_0x163227);logger[_0xc291('0x15')](_0xc291('0x1b'),_0x163227,JSON[_0xc291('0x27')](_0x269c8e));_0x27a66a(_0x269c8e);})[_0xc291('0x1a')](function(_0x4d8ca7){logger['error']('GetOpenchannelQueue',_0x4d8ca7[_0xc291('0x18')],_0x163227);_0x4b511c(_0x1a27a3['error'](0x1f4,_0x4d8ca7['message']));});});};exports[_0xc291('0x28')]=function(_0x35fe84){var _0xf05ddf=this;return new Promise(function(_0x3059cb,_0x1fcace){return db[_0xc291('0x1c')][_0xc291('0x29')]({'raw':_0x35fe84[_0xc291('0x1e')]?_0x35fe84[_0xc291('0x1e')]['raw']===undefined?!![]:![]:!![],'where':_0x35fe84[_0xc291('0x1e')]?_0x35fe84['options'][_0xc291('0x20')]||null:null,'attributes':_0x35fe84[_0xc291('0x1e')]?_0x35fe84[_0xc291('0x1e')]['attributes']||null:null,'include':_0x35fe84[_0xc291('0x1e')]?_0x35fe84[_0xc291('0x1e')]['include']?_[_0xc291('0x23')](_0x35fe84[_0xc291('0x1e')][_0xc291('0x22')],function(_0x8b1cb){return{'model':db[_0x8b1cb[_0xc291('0x24')]],'as':_0x8b1cb['as'],'attributes':_0x8b1cb[_0xc291('0x21')],'include':_0x8b1cb[_0xc291('0x22')]?_[_0xc291('0x23')](_0x8b1cb[_0xc291('0x22')],function(_0x2a46f9){return{'model':db[_0x2a46f9['model']],'as':_0x2a46f9['as'],'attributes':_0x2a46f9[_0xc291('0x21')],'include':_0x2a46f9[_0xc291('0x22')]?_[_0xc291('0x23')](_0x2a46f9[_0xc291('0x22')],function(_0x21cca3){return{'model':db[_0x21cca3[_0xc291('0x24')]],'as':_0x21cca3['as'],'attributes':_0x21cca3['attributes']};}):[]};}):[]};}):[]:[]})[_0xc291('0x25')](function(_0x4e4f9a){logger['info'](_0xc291('0x28'),_0x35fe84);logger[_0xc291('0x15')](_0xc291('0x28'),_0x35fe84,JSON[_0xc291('0x27')](_0x4e4f9a));_0x3059cb(_0x4e4f9a);})['catch'](function(_0x523381){logger[_0xc291('0x16')]('ShowOpenchannelQueue',_0x523381['message'],_0x35fe84);_0x1fcace(_0xf05ddf[_0xc291('0x16')](0x1f4,_0x523381[_0xc291('0x18')]));});});};
\ No newline at end of file
index f3fae1f..82d0be1 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(_0x40a045,_0x516f0e){var _0x1a687c=function(_0x48c9fe){while(--_0x48c9fe){_0x40a045['push'](_0x40a045['shift']());}};_0x1a687c(++_0x516f0e);}(_0xa9e0,0x123));var _0x0a9e=function(_0x4c7fb5,_0x2548ef){_0x4c7fb5=_0x4c7fb5-0x0;var _0x2e10ac=_0xa9e0[_0x4c7fb5];return _0x2e10ac;};'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(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2576d7,_0x167624){_0x2576d7=_0x2576d7-0x0;var _0x16a08c=_0xa9e0[_0x2576d7];return _0x16a08c;};'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 d6ede45..a13fe98 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(_0x47df54,_0x1aeb61){var _0x261b87=function(_0x54bc77){while(--_0x54bc77){_0x47df54['push'](_0x47df54['shift']());}};_0x261b87(++_0x1aeb61);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3635ce,_0x33a6f9){_0x3635ce=_0x3635ce-0x0;var _0x97ecd0=_0xa9e0[_0x3635ce];return _0x97ecd0;};'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(_0x4b4f24,_0x5654a8){var _0x1c13d4=function(_0x4940bf){while(--_0x4940bf){_0x4b4f24['push'](_0x4b4f24['shift']());}};_0x1c13d4(++_0x5654a8);}(_0xb10b,0x12a));var _0xbb10=function(_0x278646,_0x25736a){_0x278646=_0x278646-0x0;var _0x1bba75=_0xb10b[_0x278646];return _0x1bba75;};'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 1f5b7bc..a43dddb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd495=['sequelize','STRING','DATE','moment'];(function(_0x52feac,_0xe9a2cf){var _0x30fdfd=function(_0x453cf0){while(--_0x453cf0){_0x52feac['push'](_0x52feac['shift']());}};_0x30fdfd(++_0xe9a2cf);}(_0xd495,0xa3));var _0x5d49=function(_0x1283d4,_0x36b6f1){_0x1283d4=_0x1283d4-0x0;var _0x433643=_0xd495[_0x1283d4];return _0x433643;};'use strict';var moment=require(_0x5d49('0x0'));var Sequelize=require(_0x5d49('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0x5d49('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0x5d49('0x2')]},'joinAt':{'type':Sequelize[_0x5d49('0x3')]},'leaveAt':{'type':Sequelize[_0x5d49('0x3')]},'acceptAt':{'type':Sequelize[_0x5d49('0x3')]},'exitAt':{'type':Sequelize['DATE']},'reason':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x0574=['DATE','moment','sequelize','STRING'];(function(_0x224636,_0x3a5804){var _0x273be8=function(_0x1e1b47){while(--_0x1e1b47){_0x224636['push'](_0x224636['shift']());}};_0x273be8(++_0x3a5804);}(_0x0574,0x181));var _0x4057=function(_0x5447aa,_0x3afc00){_0x5447aa=_0x5447aa-0x0;var _0xb21e53=_0x0574[_0x5447aa];return _0xb21e53;};'use strict';var moment=require(_0x4057('0x0'));var Sequelize=require(_0x4057('0x1'));module['exports']={'uniqueid':{'type':Sequelize[_0x4057('0x2')],'allowNull':![]},'from':{'type':Sequelize[_0x4057('0x2')]},'joinAt':{'type':Sequelize[_0x4057('0x3')]},'leaveAt':{'type':Sequelize['DATE']},'acceptAt':{'type':Sequelize[_0x4057('0x3')]},'exitAt':{'type':Sequelize[_0x4057('0x3')]},'reason':{'type':Sequelize[_0x4057('0x2')]}};
\ No newline at end of file
index 378e4fb..1319d78 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x88ba=['Content-Range','reject','save','destroy','then','index','OpenchannelQueueReport','rawAttributes','model','keys','query','intersection','attributes','fields','length','nolimit','where','filters','pick','filter','merge','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','describe','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','mustache','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','../../config/environment','status','end','json','count','offset','limit'];(function(_0x2bcb75,_0x5789a7){var _0x175345=function(_0x3a7d41){while(--_0x3a7d41){_0x2bcb75['push'](_0x2bcb75['shift']());}};_0x175345(++_0x5789a7);}(_0x88ba,0x66));var _0xa88b=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x88ba[_0x57b54c];return _0x59cc19;};'use strict';var pdf=require(_0xa88b('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xa88b('0x1'));var zipdir=require(_0xa88b('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xa88b('0x3'));var moment=require(_0xa88b('0x4'));var BPromise=require(_0xa88b('0x5'));var Mustache=require(_0xa88b('0x6'));var util=require('util');var path=require(_0xa88b('0x7'));var sox=require(_0xa88b('0x8'));var csv=require(_0xa88b('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xa88b('0xa'));var squel=require(_0xa88b('0xb'));var crypto=require(_0xa88b('0xc'));var jsforce=require(_0xa88b('0xd'));var deskjs=require(_0xa88b('0xe'));var toCsv=require(_0xa88b('0x9'));var querystring=require('querystring');var Papa=require(_0xa88b('0xf'));var authService=require(_0xa88b('0x10'));var hardwareService=require(_0xa88b('0x11'));var Redis=require('ioredis');var qs=require(_0xa88b('0x12'));var logger=require('../../config/logger')(_0xa88b('0x13'));var utils=require(_0xa88b('0x14'));var config=require(_0xa88b('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2ccfa4,_0x1c66fc){_0x1c66fc=_0x1c66fc||0xcc;return function(_0x30337b){if(_0x30337b){return _0x2ccfa4['sendStatus'](_0x1c66fc);}return _0x2ccfa4[_0xa88b('0x16')](_0x1c66fc)[_0xa88b('0x17')]();};}function respondWithResult(_0x357e10,_0x3f42a4){_0x3f42a4=_0x3f42a4||0xc8;return function(_0x2ccd31){if(_0x2ccd31){return _0x357e10['status'](_0x3f42a4)[_0xa88b('0x18')](_0x2ccd31);}};}function respondWithFilteredResult(_0x6630b6,_0x4cd13b){return function(_0x5ccbd6){if(_0x5ccbd6){var _0x1ef8ed=_0x5ccbd6[_0xa88b('0x19')],_0x23e4b8=_0x4cd13b['offset'],_0x14ced5=_0x4cd13b[_0xa88b('0x1a')]+_0x4cd13b[_0xa88b('0x1b')],_0x17ad20;if(_0x14ced5>=_0x1ef8ed){_0x14ced5=_0x1ef8ed;_0x17ad20=0xc8;}else{_0x17ad20=0xce;}_0x6630b6['status'](_0x17ad20);return _0x6630b6['set'](_0xa88b('0x1c'),_0x23e4b8+'-'+_0x14ced5+'/'+_0x1ef8ed)[_0xa88b('0x18')](_0x5ccbd6);}return null;};}function patchUpdates(_0x540701){return function(_0x107938){try{jsonpatch['apply'](_0x107938,_0x540701,!![]);}catch(_0x1fe93f){return BPromise[_0xa88b('0x1d')](_0x1fe93f);}return _0x107938[_0xa88b('0x1e')]();};}function saveUpdates(_0x414894,_0x583f1e){return function(_0x3e6942){if(_0x3e6942){return _0x3e6942['update'](_0x414894)['then'](function(_0x341cf1){return _0x341cf1;});}return null;};}function removeEntity(_0x16d639,_0x58e94e){return function(_0x690a20){if(_0x690a20){return _0x690a20[_0xa88b('0x1f')]()[_0xa88b('0x20')](function(){_0x16d639[_0xa88b('0x16')](0xcc)[_0xa88b('0x17')]();});}};}function handleEntityNotFound(_0x17c7ad,_0x41c73f){return function(_0x1f0b1d){if(!_0x1f0b1d){_0x17c7ad['sendStatus'](0x194);}return _0x1f0b1d;};}function handleError(_0x583e60,_0x44b832){_0x44b832=_0x44b832||0x1f4;return function(_0x137234){logger['error'](_0x137234['stack']);if(_0x137234['name']){delete _0x137234['name'];}_0x583e60[_0xa88b('0x16')](_0x44b832)['send'](_0x137234);};}exports[_0xa88b('0x21')]=function(_0x3733aa,_0x36755c){var _0x33e5a6={},_0x4f4950={},_0x106d79={'count':0x0,'rows':[]};var _0x46a0b2=db[_0xa88b('0x22')][_0xa88b('0x23')];_0x4f4950[_0xa88b('0x24')]=_[_0xa88b('0x25')](_0x46a0b2);_0x4f4950[_0xa88b('0x26')]=_[_0xa88b('0x25')](_0x3733aa['query']);_0x4f4950['filters']=_[_0xa88b('0x27')](_0x4f4950[_0xa88b('0x24')],_0x4f4950['query']);_0x33e5a6[_0xa88b('0x28')]=_[_0xa88b('0x27')](_0x4f4950['model'],qs[_0xa88b('0x29')](_0x3733aa['query'][_0xa88b('0x29')]));_0x33e5a6['attributes']=_0x33e5a6[_0xa88b('0x28')][_0xa88b('0x2a')]?_0x33e5a6[_0xa88b('0x28')]:_0x4f4950[_0xa88b('0x24')];if(!_0x3733aa[_0xa88b('0x26')]['hasOwnProperty'](_0xa88b('0x2b'))){_0x33e5a6[_0xa88b('0x1b')]=qs['limit'](_0x3733aa[_0xa88b('0x26')][_0xa88b('0x1b')]);_0x33e5a6[_0xa88b('0x1a')]=qs[_0xa88b('0x1a')](_0x3733aa[_0xa88b('0x26')][_0xa88b('0x1a')]);}_0x33e5a6['order']=qs['sort'](_0x3733aa[_0xa88b('0x26')]['sort']);_0x33e5a6[_0xa88b('0x2c')]=qs[_0xa88b('0x2d')](_[_0xa88b('0x2e')](_0x3733aa['query'],_0x4f4950[_0xa88b('0x2d')]));if(_0x3733aa[_0xa88b('0x26')][_0xa88b('0x2f')]){_0x33e5a6[_0xa88b('0x2c')]=_[_0xa88b('0x30')](_0x33e5a6[_0xa88b('0x2c')],{'$or':_['map'](_0x46a0b2,function(_0x1c24cb){if(_0x1c24cb[_0xa88b('0x31')][_0xa88b('0x32')]!==_0xa88b('0x33')){var _0x2e5a2e={};_0x2e5a2e[_0x1c24cb[_0xa88b('0x34')]]={'$like':'%'+_0x3733aa['query'][_0xa88b('0x2f')]+'%'};return _0x2e5a2e;}})});}_0x33e5a6=_['merge']({},_0x33e5a6,_0x3733aa[_0xa88b('0x35')]);var _0x222fb4={'where':_0x33e5a6[_0xa88b('0x2c')]};return db['OpenchannelQueueReport'][_0xa88b('0x19')](_0x222fb4)['then'](function(_0xabeccf){_0x106d79[_0xa88b('0x19')]=_0xabeccf;if(_0x3733aa[_0xa88b('0x26')][_0xa88b('0x36')]){_0x33e5a6[_0xa88b('0x37')]=[{'all':!![]}];}return db[_0xa88b('0x22')][_0xa88b('0x38')](_0x33e5a6);})[_0xa88b('0x20')](function(_0x2d7a88){_0x106d79[_0xa88b('0x39')]=_0x2d7a88;return _0x106d79;})[_0xa88b('0x20')](respondWithFilteredResult(_0x36755c,_0x33e5a6))[_0xa88b('0x3a')](handleError(_0x36755c,null));};exports[_0xa88b('0x3b')]=function(_0x42b9cf,_0x3bf515){var _0x292a5d={'raw':!![],'where':{'id':_0x42b9cf[_0xa88b('0x3c')]['id']}},_0x424ffd={};_0x424ffd[_0xa88b('0x24')]=_['keys'](db[_0xa88b('0x22')]['rawAttributes']);_0x424ffd[_0xa88b('0x26')]=_[_0xa88b('0x25')](_0x42b9cf['query']);_0x424ffd['filters']=_[_0xa88b('0x27')](_0x424ffd[_0xa88b('0x24')],_0x424ffd[_0xa88b('0x26')]);_0x292a5d[_0xa88b('0x28')]=_[_0xa88b('0x27')](_0x424ffd['model'],qs[_0xa88b('0x29')](_0x42b9cf[_0xa88b('0x26')][_0xa88b('0x29')]));_0x292a5d[_0xa88b('0x28')]=_0x292a5d['attributes'][_0xa88b('0x2a')]?_0x292a5d['attributes']:_0x424ffd[_0xa88b('0x24')];if(_0x42b9cf['query'][_0xa88b('0x36')]){_0x292a5d['include']=[{'all':!![]}];}_0x292a5d=_[_0xa88b('0x30')]({},_0x292a5d,_0x42b9cf[_0xa88b('0x35')]);return db['OpenchannelQueueReport'][_0xa88b('0x3d')](_0x292a5d)[_0xa88b('0x20')](handleEntityNotFound(_0x3bf515,null))[_0xa88b('0x20')](respondWithResult(_0x3bf515,null))[_0xa88b('0x3a')](handleError(_0x3bf515,null));};exports['create']=function(_0x412435,_0x461ab0){return db[_0xa88b('0x22')][_0xa88b('0x3e')](_0x412435[_0xa88b('0x3f')],{})[_0xa88b('0x20')](respondWithResult(_0x461ab0,0xc9))[_0xa88b('0x3a')](handleError(_0x461ab0,null));};exports['update']=function(_0x3626c0,_0x1500ff){if(_0x3626c0[_0xa88b('0x3f')]['id']){delete _0x3626c0['body']['id'];}return db[_0xa88b('0x22')][_0xa88b('0x3d')]({'where':{'id':_0x3626c0[_0xa88b('0x3c')]['id']}})[_0xa88b('0x20')](handleEntityNotFound(_0x1500ff,null))[_0xa88b('0x20')](saveUpdates(_0x3626c0['body'],null))[_0xa88b('0x20')](respondWithResult(_0x1500ff,null))[_0xa88b('0x3a')](handleError(_0x1500ff,null));};exports[_0xa88b('0x1f')]=function(_0x32ac45,_0xf392b3){return db[_0xa88b('0x22')][_0xa88b('0x3d')]({'where':{'id':_0x32ac45[_0xa88b('0x3c')]['id']}})[_0xa88b('0x20')](handleEntityNotFound(_0xf392b3,null))['then'](removeEntity(_0xf392b3,null))[_0xa88b('0x3a')](handleError(_0xf392b3,null));};exports[_0xa88b('0x40')]=function(_0x4db0c3,_0xb2cfab){return db[_0xa88b('0x22')]['describe']()[_0xa88b('0x20')](respondWithResult(_0xb2cfab,null))[_0xa88b('0x3a')](handleError(_0xb2cfab,null));};
\ No newline at end of file
+var _0xe74f=['reject','save','update','then','error','name','OpenchannelQueueReport','model','keys','query','filters','attributes','intersection','fields','hasOwnProperty','nolimit','limit','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','options','includeAll','include','findAll','rows','catch','params','rawAttributes','length','create','body','find','destroy','describe','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','sox','lodash','squel','crypto','jsforce','desk.js','../../components/auth/service','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','offset','set','Content-Range','apply'];(function(_0x51ffff,_0x40ba30){var _0x3d0d23=function(_0x1b1561){while(--_0x1b1561){_0x51ffff['push'](_0x51ffff['shift']());}};_0x3d0d23(++_0x40ba30);}(_0xe74f,0x13d));var _0xfe74=function(_0x3fb5eb,_0x5947a6){_0x3fb5eb=_0x3fb5eb-0x0;var _0x481291=_0xe74f[_0x3fb5eb];return _0x481291;};'use strict';var pdf=require(_0xfe74('0x0'));var emlformat=require(_0xfe74('0x1'));var rimraf=require(_0xfe74('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xfe74('0x3'));var moment=require(_0xfe74('0x4'));var BPromise=require(_0xfe74('0x5'));var Mustache=require(_0xfe74('0x6'));var util=require('util');var path=require('path');var sox=require(_0xfe74('0x7'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xfe74('0x8'));var squel=require(_0xfe74('0x9'));var crypto=require(_0xfe74('0xa'));var jsforce=require(_0xfe74('0xb'));var deskjs=require(_0xfe74('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0xfe74('0xd'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xfe74('0xe'));var qs=require(_0xfe74('0xf'));var logger=require('../../config/logger')(_0xfe74('0x10'));var utils=require(_0xfe74('0x11'));var config=require(_0xfe74('0x12'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4affce,_0x16d5c1){_0x16d5c1=_0x16d5c1||0xcc;return function(_0x2d230a){if(_0x2d230a){return _0x4affce[_0xfe74('0x13')](_0x16d5c1);}return _0x4affce[_0xfe74('0x14')](_0x16d5c1)[_0xfe74('0x15')]();};}function respondWithResult(_0x36b9cf,_0x40c5e1){_0x40c5e1=_0x40c5e1||0xc8;return function(_0x2a3ead){if(_0x2a3ead){return _0x36b9cf[_0xfe74('0x14')](_0x40c5e1)[_0xfe74('0x16')](_0x2a3ead);}};}function respondWithFilteredResult(_0x3b011f,_0x242113){return function(_0x2c3132){if(_0x2c3132){var _0x3d16a4=_0x2c3132[_0xfe74('0x17')],_0x60e977=_0x242113['offset'],_0x494a63=_0x242113[_0xfe74('0x18')]+_0x242113['limit'],_0xa68555;if(_0x494a63>=_0x3d16a4){_0x494a63=_0x3d16a4;_0xa68555=0xc8;}else{_0xa68555=0xce;}_0x3b011f[_0xfe74('0x14')](_0xa68555);return _0x3b011f[_0xfe74('0x19')](_0xfe74('0x1a'),_0x60e977+'-'+_0x494a63+'/'+_0x3d16a4)[_0xfe74('0x16')](_0x2c3132);}return null;};}function patchUpdates(_0xedd363){return function(_0x3b8a4a){try{jsonpatch[_0xfe74('0x1b')](_0x3b8a4a,_0xedd363,!![]);}catch(_0x217ac5){return BPromise[_0xfe74('0x1c')](_0x217ac5);}return _0x3b8a4a[_0xfe74('0x1d')]();};}function saveUpdates(_0x322d16,_0x47a76e){return function(_0x11e269){if(_0x11e269){return _0x11e269[_0xfe74('0x1e')](_0x322d16)['then'](function(_0x571613){return _0x571613;});}return null;};}function removeEntity(_0xdf5bc0,_0x43bd62){return function(_0x486223){if(_0x486223){return _0x486223['destroy']()[_0xfe74('0x1f')](function(){_0xdf5bc0['status'](0xcc)[_0xfe74('0x15')]();});}};}function handleEntityNotFound(_0x3b8184,_0x1990b7){return function(_0x36261b){if(!_0x36261b){_0x3b8184[_0xfe74('0x13')](0x194);}return _0x36261b;};}function handleError(_0x2e9bf2,_0x29dcad){_0x29dcad=_0x29dcad||0x1f4;return function(_0x7df37b){logger[_0xfe74('0x20')](_0x7df37b['stack']);if(_0x7df37b['name']){delete _0x7df37b[_0xfe74('0x21')];}_0x2e9bf2[_0xfe74('0x14')](_0x29dcad)['send'](_0x7df37b);};}exports['index']=function(_0x52354d,_0x623cd9){var _0x25b94e={},_0x3bf949={},_0x47ec8a={'count':0x0,'rows':[]};var _0x1cfa0c=db[_0xfe74('0x22')]['rawAttributes'];_0x3bf949[_0xfe74('0x23')]=_[_0xfe74('0x24')](_0x1cfa0c);_0x3bf949[_0xfe74('0x25')]=_[_0xfe74('0x24')](_0x52354d['query']);_0x3bf949[_0xfe74('0x26')]=_['intersection'](_0x3bf949[_0xfe74('0x23')],_0x3bf949[_0xfe74('0x25')]);_0x25b94e[_0xfe74('0x27')]=_[_0xfe74('0x28')](_0x3bf949['model'],qs[_0xfe74('0x29')](_0x52354d[_0xfe74('0x25')][_0xfe74('0x29')]));_0x25b94e[_0xfe74('0x27')]=_0x25b94e[_0xfe74('0x27')]['length']?_0x25b94e[_0xfe74('0x27')]:_0x3bf949[_0xfe74('0x23')];if(!_0x52354d[_0xfe74('0x25')][_0xfe74('0x2a')](_0xfe74('0x2b'))){_0x25b94e[_0xfe74('0x2c')]=qs[_0xfe74('0x2c')](_0x52354d[_0xfe74('0x25')][_0xfe74('0x2c')]);_0x25b94e[_0xfe74('0x18')]=qs[_0xfe74('0x18')](_0x52354d[_0xfe74('0x25')][_0xfe74('0x18')]);}_0x25b94e['order']=qs[_0xfe74('0x2d')](_0x52354d[_0xfe74('0x25')]['sort']);_0x25b94e[_0xfe74('0x2e')]=qs[_0xfe74('0x26')](_[_0xfe74('0x2f')](_0x52354d[_0xfe74('0x25')],_0x3bf949['filters']));if(_0x52354d[_0xfe74('0x25')]['filter']){_0x25b94e[_0xfe74('0x2e')]=_[_0xfe74('0x30')](_0x25b94e[_0xfe74('0x2e')],{'$or':_[_0xfe74('0x31')](_0x1cfa0c,function(_0x5a0800){if(_0x5a0800[_0xfe74('0x32')][_0xfe74('0x33')]!==_0xfe74('0x34')){var _0x5b8bc2={};_0x5b8bc2[_0x5a0800[_0xfe74('0x35')]]={'$like':'%'+_0x52354d[_0xfe74('0x25')][_0xfe74('0x36')]+'%'};return _0x5b8bc2;}})});}_0x25b94e=_[_0xfe74('0x30')]({},_0x25b94e,_0x52354d[_0xfe74('0x37')]);var _0x10dc1e={'where':_0x25b94e[_0xfe74('0x2e')]};return db['OpenchannelQueueReport'][_0xfe74('0x17')](_0x10dc1e)[_0xfe74('0x1f')](function(_0x28b430){_0x47ec8a[_0xfe74('0x17')]=_0x28b430;if(_0x52354d[_0xfe74('0x25')][_0xfe74('0x38')]){_0x25b94e[_0xfe74('0x39')]=[{'all':!![]}];}return db[_0xfe74('0x22')][_0xfe74('0x3a')](_0x25b94e);})[_0xfe74('0x1f')](function(_0x441d2b){_0x47ec8a[_0xfe74('0x3b')]=_0x441d2b;return _0x47ec8a;})[_0xfe74('0x1f')](respondWithFilteredResult(_0x623cd9,_0x25b94e))[_0xfe74('0x3c')](handleError(_0x623cd9,null));};exports['show']=function(_0x13fa53,_0x32c9c8){var _0x3405d2={'raw':!![],'where':{'id':_0x13fa53[_0xfe74('0x3d')]['id']}},_0x1a367c={};_0x1a367c[_0xfe74('0x23')]=_[_0xfe74('0x24')](db[_0xfe74('0x22')][_0xfe74('0x3e')]);_0x1a367c[_0xfe74('0x25')]=_[_0xfe74('0x24')](_0x13fa53['query']);_0x1a367c[_0xfe74('0x26')]=_[_0xfe74('0x28')](_0x1a367c[_0xfe74('0x23')],_0x1a367c[_0xfe74('0x25')]);_0x3405d2[_0xfe74('0x27')]=_['intersection'](_0x1a367c['model'],qs['fields'](_0x13fa53['query'][_0xfe74('0x29')]));_0x3405d2[_0xfe74('0x27')]=_0x3405d2[_0xfe74('0x27')][_0xfe74('0x3f')]?_0x3405d2[_0xfe74('0x27')]:_0x1a367c[_0xfe74('0x23')];if(_0x13fa53[_0xfe74('0x25')]['includeAll']){_0x3405d2[_0xfe74('0x39')]=[{'all':!![]}];}_0x3405d2=_['merge']({},_0x3405d2,_0x13fa53[_0xfe74('0x37')]);return db[_0xfe74('0x22')]['find'](_0x3405d2)[_0xfe74('0x1f')](handleEntityNotFound(_0x32c9c8,null))[_0xfe74('0x1f')](respondWithResult(_0x32c9c8,null))[_0xfe74('0x3c')](handleError(_0x32c9c8,null));};exports[_0xfe74('0x40')]=function(_0x182afd,_0x589574){return db['OpenchannelQueueReport']['create'](_0x182afd['body'],{})[_0xfe74('0x1f')](respondWithResult(_0x589574,0xc9))[_0xfe74('0x3c')](handleError(_0x589574,null));};exports[_0xfe74('0x1e')]=function(_0x41db2b,_0x11366e){if(_0x41db2b[_0xfe74('0x41')]['id']){delete _0x41db2b['body']['id'];}return db[_0xfe74('0x22')][_0xfe74('0x42')]({'where':{'id':_0x41db2b[_0xfe74('0x3d')]['id']}})[_0xfe74('0x1f')](handleEntityNotFound(_0x11366e,null))[_0xfe74('0x1f')](saveUpdates(_0x41db2b[_0xfe74('0x41')],null))['then'](respondWithResult(_0x11366e,null))[_0xfe74('0x3c')](handleError(_0x11366e,null));};exports[_0xfe74('0x43')]=function(_0x30e620,_0x2ab73a){return db[_0xfe74('0x22')][_0xfe74('0x42')]({'where':{'id':_0x30e620[_0xfe74('0x3d')]['id']}})[_0xfe74('0x1f')](handleEntityNotFound(_0x2ab73a,null))[_0xfe74('0x1f')](removeEntity(_0x2ab73a,null))[_0xfe74('0x3c')](handleError(_0x2ab73a,null));};exports[_0xfe74('0x44')]=function(_0x1b33c7,_0x343ced){return db[_0xfe74('0x22')]['describe']()[_0xfe74('0x1f')](respondWithResult(_0x343ced,null))[_0xfe74('0x3c')](handleError(_0x343ced,null));};
\ No newline at end of file
index ac2c202..e59597a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf70=['util','../../config/logger','moment','bluebird','./openchannelQueueReport.attributes','OpenchannelQueueReport','report_openchannel_queue','uniqueid','lodash'];(function(_0x4a4922,_0x82cb8f){var _0x55a8c6=function(_0x59712e){while(--_0x59712e){_0x4a4922['push'](_0x4a4922['shift']());}};_0x55a8c6(++_0x82cb8f);}(_0xdf70,0x86));var _0x0df7=function(_0x14f80d,_0x3a99aa){_0x14f80d=_0x14f80d-0x0;var _0x4a25ea=_0xdf70[_0x14f80d];return _0x4a25ea;};'use strict';var _=require(_0x0df7('0x0'));var util=require(_0x0df7('0x1'));var logger=require(_0x0df7('0x2'))('api');var moment=require(_0x0df7('0x3'));var BPromise=require(_0x0df7('0x4'));var rp=require('request-promise');var attributes=require(_0x0df7('0x5'));module['exports']=function(_0x278b96,_0x2f3c43){return _0x278b96['define'](_0x0df7('0x6'),attributes,{'tableName':_0x0df7('0x7'),'paranoid':![],'indexes':[{'name':_0x0df7('0x8'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x4508=['./openchannelQueueReport.attributes','exports','define','OpenchannelQueueReport','uniqueid','util','../../config/logger','api','bluebird','request-promise'];(function(_0x3635a9,_0x121f67){var _0x327cb0=function(_0x43b9d3){while(--_0x43b9d3){_0x3635a9['push'](_0x3635a9['shift']());}};_0x327cb0(++_0x121f67);}(_0x4508,0x1ef));var _0x8450=function(_0x117e8e,_0x1b3f9b){_0x117e8e=_0x117e8e-0x0;var _0x3c02f3=_0x4508[_0x117e8e];return _0x3c02f3;};'use strict';var _=require('lodash');var util=require(_0x8450('0x0'));var logger=require(_0x8450('0x1'))(_0x8450('0x2'));var moment=require('moment');var BPromise=require(_0x8450('0x3'));var rp=require(_0x8450('0x4'));var attributes=require(_0x8450('0x5'));module[_0x8450('0x6')]=function(_0x21f947,_0x239185){return _0x21f947[_0x8450('0x7')](_0x8450('0x8'),attributes,{'tableName':'report_openchannel_queue','paranoid':![],'indexes':[{'name':_0x8450('0x9'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index fdff233..b19f2d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe718=['update','raw','attributes','limit','then','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','info','request\x20sent','OpenchannelQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','OpenchannelQueueReport,\x20%s,\x20%s','message','result','catch','CreateOpenchannelQueueReport','OpenchannelQueueReport','create','body','options','debug','UpdateOpenchannelQueueReport'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0xe718,0x1bf));var _0x8e71=function(_0x5f3f88,_0x562baf){_0x5f3f88=_0x5f3f88-0x0;var _0xd08119=_0xe718[_0x5f3f88];return _0xd08119;};'use strict';var _=require(_0x8e71('0x0'));var util=require(_0x8e71('0x1'));var moment=require('moment');var BPromise=require(_0x8e71('0x2'));var rs=require(_0x8e71('0x3'));var fs=require('fs');var Redis=require(_0x8e71('0x4'));var db=require(_0x8e71('0x5'))['db'];var utils=require(_0x8e71('0x6'));var logger=require(_0x8e71('0x7'))(_0x8e71('0x8'));var config=require(_0x8e71('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x8e71('0xa')][_0x8e71('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x418e55,_0x1d9ce9,_0x452194){return new BPromise(function(_0x493c7b,_0x565b46){return client['request'](_0x418e55,_0x452194)['then'](function(_0x2e2cbd){logger[_0x8e71('0xc')]('OpenchannelQueueReport,\x20%s,\x20%s',_0x1d9ce9,_0x8e71('0xd'));logger['debug'](_0x8e71('0xe'),_0x1d9ce9,_0x8e71('0xd'),JSON[_0x8e71('0xf')](_0x2e2cbd));if(_0x2e2cbd[_0x8e71('0x10')]){if(_0x2e2cbd[_0x8e71('0x10')][_0x8e71('0x11')]===0x1f4){logger[_0x8e71('0x10')](_0x8e71('0x12'),_0x1d9ce9,_0x2e2cbd[_0x8e71('0x10')][_0x8e71('0x13')]);return _0x565b46(_0x2e2cbd['error'][_0x8e71('0x13')]);}logger[_0x8e71('0x10')](_0x8e71('0x12'),_0x1d9ce9,_0x2e2cbd[_0x8e71('0x10')][_0x8e71('0x13')]);return _0x493c7b(_0x2e2cbd['error'][_0x8e71('0x13')]);}else{logger['info'](_0x8e71('0x12'),_0x1d9ce9,_0x8e71('0xd'));_0x493c7b(_0x2e2cbd[_0x8e71('0x14')][_0x8e71('0x13')]);}})[_0x8e71('0x15')](function(_0x3b5fbd){logger[_0x8e71('0x10')](_0x8e71('0x12'),_0x1d9ce9,_0x3b5fbd);_0x565b46(_0x3b5fbd);});});}exports[_0x8e71('0x16')]=function(_0x584c16){var _0x3e8f2f=this;return new Promise(function(_0xfc9a56,_0xc0f36a){return db[_0x8e71('0x17')][_0x8e71('0x18')](_0x584c16[_0x8e71('0x19')],{'raw':_0x584c16[_0x8e71('0x1a')]?_0x584c16[_0x8e71('0x1a')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0xa6cdae){logger['info'](_0x8e71('0x16'),_0x584c16);logger[_0x8e71('0x1b')](_0x8e71('0x16'),_0x584c16,JSON[_0x8e71('0xf')](_0xa6cdae));_0xfc9a56(_0xa6cdae);})['catch'](function(_0x489359){logger[_0x8e71('0x10')](_0x8e71('0x16'),_0x489359[_0x8e71('0x13')],_0x584c16);_0xc0f36a(_0x3e8f2f['error'](0x1f4,_0x489359[_0x8e71('0x13')]));});});};exports[_0x8e71('0x1c')]=function(_0x36578f){var _0x4ee025=this;return new Promise(function(_0xbd0b04,_0xd702ea){return db[_0x8e71('0x17')][_0x8e71('0x1d')](_0x36578f['body'],{'raw':_0x36578f[_0x8e71('0x1a')]?_0x36578f[_0x8e71('0x1a')][_0x8e71('0x1e')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x36578f[_0x8e71('0x1a')]?_0x36578f[_0x8e71('0x1a')]['where']||null:null,'attributes':_0x36578f['options']?_0x36578f[_0x8e71('0x1a')][_0x8e71('0x1f')]||null:null,'limit':_0x36578f[_0x8e71('0x1a')]?_0x36578f['options'][_0x8e71('0x20')]||null:null})[_0x8e71('0x21')](function(_0x8b9f09){logger[_0x8e71('0xc')](_0x8e71('0x1c'),_0x36578f);logger[_0x8e71('0x1b')](_0x8e71('0x1c'),_0x36578f,JSON[_0x8e71('0xf')](_0x8b9f09));_0xbd0b04(_0x8b9f09);})[_0x8e71('0x15')](function(_0x46ba18){logger['error']('UpdateOpenchannelQueueReport',_0x46ba18['message'],_0x36578f);_0xd702ea(_0x4ee025['error'](0x1f4,_0x46ba18['message']));});});};
\ No newline at end of file
+var _0x75b0=['OpenchannelQueueReport,\x20%s,\x20%s,\x20%s','error','OpenchannelQueueReport,\x20%s,\x20%s','message','result','catch','CreateOpenchannelQueueReport','OpenchannelQueueReport','create','body','options','stringify','UpdateOpenchannelQueueReport','raw','where','attributes','limit','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','then','info','request\x20sent','debug'];(function(_0x418361,_0x5816c8){var _0x3f2c3c=function(_0x377769){while(--_0x377769){_0x418361['push'](_0x418361['shift']());}};_0x3f2c3c(++_0x5816c8);}(_0x75b0,0x13d));var _0x075b=function(_0x30e41d,_0xd8dfb7){_0x30e41d=_0x30e41d-0x0;var _0x56aeba=_0x75b0[_0x30e41d];return _0x56aeba;};'use strict';var _=require('lodash');var util=require(_0x075b('0x0'));var moment=require(_0x075b('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x075b('0x2'));var db=require('../../mysqldb')['db'];var utils=require(_0x075b('0x3'));var logger=require(_0x075b('0x4'))(_0x075b('0x5'));var config=require(_0x075b('0x6'));var jayson=require(_0x075b('0x7'));var client=jayson[_0x075b('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2c88f3,_0x4c7f9c,_0x180efb){return new BPromise(function(_0x3fb61e,_0x29fe04){return client['request'](_0x2c88f3,_0x180efb)[_0x075b('0x9')](function(_0x5de763){logger[_0x075b('0xa')]('OpenchannelQueueReport,\x20%s,\x20%s',_0x4c7f9c,_0x075b('0xb'));logger[_0x075b('0xc')](_0x075b('0xd'),_0x4c7f9c,_0x075b('0xb'),JSON['stringify'](_0x5de763));if(_0x5de763[_0x075b('0xe')]){if(_0x5de763[_0x075b('0xe')]['code']===0x1f4){logger['error'](_0x075b('0xf'),_0x4c7f9c,_0x5de763[_0x075b('0xe')][_0x075b('0x10')]);return _0x29fe04(_0x5de763[_0x075b('0xe')][_0x075b('0x10')]);}logger[_0x075b('0xe')](_0x075b('0xf'),_0x4c7f9c,_0x5de763[_0x075b('0xe')][_0x075b('0x10')]);return _0x3fb61e(_0x5de763[_0x075b('0xe')][_0x075b('0x10')]);}else{logger[_0x075b('0xa')](_0x075b('0xf'),_0x4c7f9c,'request\x20sent');_0x3fb61e(_0x5de763[_0x075b('0x11')][_0x075b('0x10')]);}})[_0x075b('0x12')](function(_0x523dac){logger[_0x075b('0xe')]('OpenchannelQueueReport,\x20%s,\x20%s',_0x4c7f9c,_0x523dac);_0x29fe04(_0x523dac);});});}exports[_0x075b('0x13')]=function(_0x262adc){var _0x39976b=this;return new Promise(function(_0x458f5a,_0x39fa55){return db[_0x075b('0x14')][_0x075b('0x15')](_0x262adc[_0x075b('0x16')],{'raw':_0x262adc[_0x075b('0x17')]?_0x262adc[_0x075b('0x17')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x50ddbe){logger[_0x075b('0xa')]('CreateOpenchannelQueueReport',_0x262adc);logger[_0x075b('0xc')]('CreateOpenchannelQueueReport',_0x262adc,JSON[_0x075b('0x18')](_0x50ddbe));_0x458f5a(_0x50ddbe);})[_0x075b('0x12')](function(_0x458694){logger[_0x075b('0xe')](_0x075b('0x13'),_0x458694[_0x075b('0x10')],_0x262adc);_0x39fa55(_0x39976b['error'](0x1f4,_0x458694['message']));});});};exports[_0x075b('0x19')]=function(_0x334998){var _0x120693=this;return new Promise(function(_0x4e7b64,_0x4f7272){return db['OpenchannelQueueReport']['update'](_0x334998['body'],{'raw':_0x334998['options']?_0x334998[_0x075b('0x17')][_0x075b('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x334998[_0x075b('0x17')]?_0x334998[_0x075b('0x17')][_0x075b('0x1b')]||null:null,'attributes':_0x334998[_0x075b('0x17')]?_0x334998[_0x075b('0x17')][_0x075b('0x1c')]||null:null,'limit':_0x334998[_0x075b('0x17')]?_0x334998[_0x075b('0x17')][_0x075b('0x1d')]||null:null})['then'](function(_0x3186da){logger['info'](_0x075b('0x19'),_0x334998);logger[_0x075b('0xc')](_0x075b('0x19'),_0x334998,JSON[_0x075b('0x18')](_0x3186da));_0x4e7b64(_0x3186da);})[_0x075b('0x12')](function(_0x285d83){logger['error'](_0x075b('0x19'),_0x285d83[_0x075b('0x10')],_0x334998);_0x4f7272(_0x120693[_0x075b('0xe')](0x1f4,_0x285d83[_0x075b('0x10')]));});});};
\ No newline at end of file
index 204c250..e7a1c65 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2916=['show','post','create','put','update','delete','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/describe','describe','/:id'];(function(_0x5f3905,_0x43a651){var _0x2923b1=function(_0x3c72d8){while(--_0x3c72d8){_0x5f3905['push'](_0x5f3905['shift']());}};_0x2923b1(++_0x43a651);}(_0x2916,0x8b));var _0x6291=function(_0xf52342,_0x2e9017){_0xf52342=_0xf52342-0x0;var _0x120899=_0x2916[_0xf52342];return _0x120899;};'use strict';var multer=require(_0x6291('0x0'));var util=require(_0x6291('0x1'));var path=require(_0x6291('0x2'));var timeout=require(_0x6291('0x3'));var express=require(_0x6291('0x4'));var router=express[_0x6291('0x5')]();var auth=require(_0x6291('0x6'));var interaction=require(_0x6291('0x7'));var config=require(_0x6291('0x8'));var controller=require('./openchannelTransferReport.controller');router['get']('/',auth[_0x6291('0x9')](),controller[_0x6291('0xa')]);router[_0x6291('0xb')](_0x6291('0xc'),auth[_0x6291('0x9')](),controller[_0x6291('0xd')]);router[_0x6291('0xb')](_0x6291('0xe'),auth[_0x6291('0x9')](),controller[_0x6291('0xf')]);router[_0x6291('0x10')]('/',auth[_0x6291('0x9')](),controller[_0x6291('0x11')]);router[_0x6291('0x12')](_0x6291('0xe'),auth[_0x6291('0x9')](),controller[_0x6291('0x13')]);router[_0x6291('0x14')](_0x6291('0xe'),auth[_0x6291('0x9')](),controller['destroy']);module[_0x6291('0x15')]=router;
\ No newline at end of file
+var _0xf5b8=['Router','./openchannelTransferReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create','put','update','exports','multer','util','path','connect-timeout','express'];(function(_0x4eb082,_0x5ee5de){var _0x2f17e0=function(_0x189b86){while(--_0x189b86){_0x4eb082['push'](_0x4eb082['shift']());}};_0x2f17e0(++_0x5ee5de);}(_0xf5b8,0x18a));var _0x8f5b=function(_0x1622a1,_0x4621cd){_0x1622a1=_0x1622a1-0x0;var _0x13e0b7=_0xf5b8[_0x1622a1];return _0x13e0b7;};'use strict';var multer=require(_0x8f5b('0x0'));var util=require(_0x8f5b('0x1'));var path=require(_0x8f5b('0x2'));var timeout=require(_0x8f5b('0x3'));var express=require(_0x8f5b('0x4'));var router=express[_0x8f5b('0x5')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x8f5b('0x6'));router[_0x8f5b('0x7')]('/',auth[_0x8f5b('0x8')](),controller[_0x8f5b('0x9')]);router[_0x8f5b('0x7')](_0x8f5b('0xa'),auth['isAuthenticated'](),controller[_0x8f5b('0xb')]);router[_0x8f5b('0x7')](_0x8f5b('0xc'),auth['isAuthenticated'](),controller[_0x8f5b('0xd')]);router[_0x8f5b('0xe')]('/',auth[_0x8f5b('0x8')](),controller[_0x8f5b('0xf')]);router[_0x8f5b('0x10')]('/:id',auth['isAuthenticated'](),controller[_0x8f5b('0x11')]);router['delete'](_0x8f5b('0xc'),auth['isAuthenticated'](),controller['destroy']);module[_0x8f5b('0x12')]=router;
\ No newline at end of file
index e81306d..166e4d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d6e=['queue','NOW','moment','sequelize','exports','agent'];(function(_0x276498,_0x4f3a3d){var _0x10a4a7=function(_0x159df1){while(--_0x159df1){_0x276498['push'](_0x276498['shift']());}};_0x10a4a7(++_0x4f3a3d);}(_0x2d6e,0xb0));var _0xe2d6=function(_0x99979b,_0x4ecbe9){_0x99979b=_0x99979b-0x0;var _0x284c97=_0x2d6e[_0x99979b];return _0x284c97;};'use strict';var moment=require(_0xe2d6('0x0'));var Sequelize=require(_0xe2d6('0x1'));module[_0xe2d6('0x2')]={'uniqueid':{'type':Sequelize['STRING'],'allowNull':![]},'type':{'type':Sequelize['ENUM']('account',_0xe2d6('0x3'),'queue'),'allowNull':![],'defaultValue':_0xe2d6('0x4')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0xe2d6('0x5')]}};
\ No newline at end of file
+var _0x07dd=['sequelize','exports','STRING','ENUM','account','queue','NOW','moment'];(function(_0xa65893,_0x1b64ba){var _0x517149=function(_0x5e9e89){while(--_0x5e9e89){_0xa65893['push'](_0xa65893['shift']());}};_0x517149(++_0x1b64ba);}(_0x07dd,0x17f));var _0xd07d=function(_0x3d6095,_0x57e878){_0x3d6095=_0x3d6095-0x0;var _0x2c25e2=_0x07dd[_0x3d6095];return _0x2c25e2;};'use strict';var moment=require(_0xd07d('0x0'));var Sequelize=require(_0xd07d('0x1'));module[_0xd07d('0x2')]={'uniqueid':{'type':Sequelize[_0xd07d('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0xd07d('0x4')](_0xd07d('0x5'),'agent',_0xd07d('0x6')),'allowNull':![],'defaultValue':_0xd07d('0x6')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0xd07d('0x7')]}};
\ No newline at end of file
index bba7b20..ac76e72 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','OpenchannelTransferReport','find','create','body','describe','html-pdf','eml-format','fast-json-patch','bluebird','mustache','util','ejs','squel','jsforce','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','offset','limit','Content-Range','json','apply','reject','save','update','then','destroy'];(function(_0x1fcc1a,_0x9e8f55){var _0x31a1eb=function(_0x387eee){while(--_0x387eee){_0x1fcc1a['push'](_0x1fcc1a['shift']());}};_0x31a1eb(++_0x9e8f55);}(_0x4b84,0x1cc));var _0x44b8=function(_0x18ab2a,_0x4debcd){_0x18ab2a=_0x18ab2a-0x0;var _0x16dcee=_0x4b84[_0x18ab2a];return _0x16dcee;};'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 authService=require(_0x44b8('0xb'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x44b8('0xc'));var qs=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['OpenchannelTransferReport'][_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['OpenchannelTransferReport'][_0x44b8('0x38')](_0x2c02d6)[_0x44b8('0x1c')](function(_0x4fcfa0){_0x470f49[_0x44b8('0x38')]=_0x4fcfa0;if(_0x41d673[_0x44b8('0x25')][_0x44b8('0x39')]){_0x549a26[_0x44b8('0x3a')]=[{'all':!![]}];}return db['OpenchannelTransferReport'][_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 _0x17ba=['intersection','fields','attributes','length','hasOwnProperty','limit','order','sort','filter','merge','where','type','key','VIRTUAL','count','includeAll','include','findAll','catch','params','options','find','create','body','describe','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','status','end','offset','set','Content-Range','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','OpenchannelTransferReport','rawAttributes','model','keys','query','filters'];(function(_0x1f6e37,_0x560390){var _0x3d17ad=function(_0x23a623){while(--_0x23a623){_0x1f6e37['push'](_0x1f6e37['shift']());}};_0x3d17ad(++_0x560390);}(_0x17ba,0xab));var _0xa17b=function(_0x4817cb,_0x1a381c){_0x4817cb=_0x4817cb-0x0;var _0x4612b1=_0x17ba[_0x4817cb];return _0x4612b1;};'use strict';var pdf=require(_0xa17b('0x0'));var emlformat=require(_0xa17b('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xa17b('0x2'));var jsonpatch=require(_0xa17b('0x3'));var rp=require(_0xa17b('0x4'));var moment=require(_0xa17b('0x5'));var BPromise=require(_0xa17b('0x6'));var Mustache=require(_0xa17b('0x7'));var util=require(_0xa17b('0x8'));var path=require(_0xa17b('0x9'));var sox=require(_0xa17b('0xa'));var csv=require(_0xa17b('0xb'));var ejs=require(_0xa17b('0xc'));var fs=require('fs');var _=require(_0xa17b('0xd'));var squel=require(_0xa17b('0xe'));var crypto=require(_0xa17b('0xf'));var jsforce=require(_0xa17b('0x10'));var deskjs=require(_0xa17b('0x11'));var toCsv=require(_0xa17b('0xb'));var querystring=require(_0xa17b('0x12'));var Papa=require(_0xa17b('0x13'));var authService=require('../../components/auth/service');var hardwareService=require(_0xa17b('0x14'));var Redis=require(_0xa17b('0x15'));var qs=require(_0xa17b('0x16'));var logger=require(_0xa17b('0x17'))(_0xa17b('0x18'));var utils=require(_0xa17b('0x19'));var config=require(_0xa17b('0x1a'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xd2ccce,_0x3e92e4){_0x3e92e4=_0x3e92e4||0xcc;return function(_0x3c3a8a){if(_0x3c3a8a){return _0xd2ccce['sendStatus'](_0x3e92e4);}return _0xd2ccce[_0xa17b('0x1b')](_0x3e92e4)[_0xa17b('0x1c')]();};}function respondWithResult(_0x30236c,_0xeeacaa){_0xeeacaa=_0xeeacaa||0xc8;return function(_0x4a222e){if(_0x4a222e){return _0x30236c[_0xa17b('0x1b')](_0xeeacaa)['json'](_0x4a222e);}};}function respondWithFilteredResult(_0x25f18a,_0x219385){return function(_0x5de138){if(_0x5de138){var _0x112764=_0x5de138['count'],_0x3c63e3=_0x219385[_0xa17b('0x1d')],_0x1c0578=_0x219385['offset']+_0x219385['limit'],_0x1f8141;if(_0x1c0578>=_0x112764){_0x1c0578=_0x112764;_0x1f8141=0xc8;}else{_0x1f8141=0xce;}_0x25f18a['status'](_0x1f8141);return _0x25f18a[_0xa17b('0x1e')](_0xa17b('0x1f'),_0x3c63e3+'-'+_0x1c0578+'/'+_0x112764)['json'](_0x5de138);}return null;};}function patchUpdates(_0x2ceafa){return function(_0x166d44){try{jsonpatch[_0xa17b('0x20')](_0x166d44,_0x2ceafa,!![]);}catch(_0x2fb679){return BPromise[_0xa17b('0x21')](_0x2fb679);}return _0x166d44[_0xa17b('0x22')]();};}function saveUpdates(_0x24afc2,_0x584a0a){return function(_0x610c2b){if(_0x610c2b){return _0x610c2b[_0xa17b('0x23')](_0x24afc2)[_0xa17b('0x24')](function(_0x52e75a){return _0x52e75a;});}return null;};}function removeEntity(_0x44f7bc,_0x1a6471){return function(_0x24d305){if(_0x24d305){return _0x24d305[_0xa17b('0x25')]()[_0xa17b('0x24')](function(){_0x44f7bc[_0xa17b('0x1b')](0xcc)['end']();});}};}function handleEntityNotFound(_0x3df11f,_0x4d4a65){return function(_0xa34739){if(!_0xa34739){_0x3df11f[_0xa17b('0x26')](0x194);}return _0xa34739;};}function handleError(_0x4ba608,_0x491764){_0x491764=_0x491764||0x1f4;return function(_0x2a298c){logger[_0xa17b('0x27')](_0x2a298c[_0xa17b('0x28')]);if(_0x2a298c[_0xa17b('0x29')]){delete _0x2a298c[_0xa17b('0x29')];}_0x4ba608[_0xa17b('0x1b')](_0x491764)['send'](_0x2a298c);};}exports['index']=function(_0x5c98fe,_0x4aad82){var _0x2b1708={},_0x5ef356={},_0x295e67={'count':0x0,'rows':[]};var _0x4ff3f8=db[_0xa17b('0x2a')][_0xa17b('0x2b')];_0x5ef356[_0xa17b('0x2c')]=_[_0xa17b('0x2d')](_0x4ff3f8);_0x5ef356[_0xa17b('0x2e')]=_[_0xa17b('0x2d')](_0x5c98fe[_0xa17b('0x2e')]);_0x5ef356[_0xa17b('0x2f')]=_[_0xa17b('0x30')](_0x5ef356[_0xa17b('0x2c')],_0x5ef356[_0xa17b('0x2e')]);_0x2b1708['attributes']=_['intersection'](_0x5ef356['model'],qs[_0xa17b('0x31')](_0x5c98fe[_0xa17b('0x2e')][_0xa17b('0x31')]));_0x2b1708[_0xa17b('0x32')]=_0x2b1708[_0xa17b('0x32')][_0xa17b('0x33')]?_0x2b1708[_0xa17b('0x32')]:_0x5ef356[_0xa17b('0x2c')];if(!_0x5c98fe['query'][_0xa17b('0x34')]('nolimit')){_0x2b1708[_0xa17b('0x35')]=qs[_0xa17b('0x35')](_0x5c98fe[_0xa17b('0x2e')][_0xa17b('0x35')]);_0x2b1708[_0xa17b('0x1d')]=qs[_0xa17b('0x1d')](_0x5c98fe['query'][_0xa17b('0x1d')]);}_0x2b1708[_0xa17b('0x36')]=qs[_0xa17b('0x37')](_0x5c98fe[_0xa17b('0x2e')][_0xa17b('0x37')]);_0x2b1708['where']=qs[_0xa17b('0x2f')](_['pick'](_0x5c98fe[_0xa17b('0x2e')],_0x5ef356['filters']));if(_0x5c98fe[_0xa17b('0x2e')][_0xa17b('0x38')]){_0x2b1708['where']=_[_0xa17b('0x39')](_0x2b1708[_0xa17b('0x3a')],{'$or':_['map'](_0x4ff3f8,function(_0x2fb380){if(_0x2fb380[_0xa17b('0x3b')][_0xa17b('0x3c')]!==_0xa17b('0x3d')){var _0xd71efd={};_0xd71efd[_0x2fb380['field']]={'$like':'%'+_0x5c98fe[_0xa17b('0x2e')]['filter']+'%'};return _0xd71efd;}})});}_0x2b1708=_[_0xa17b('0x39')]({},_0x2b1708,_0x5c98fe['options']);var _0x118ad9={'where':_0x2b1708['where']};return db[_0xa17b('0x2a')]['count'](_0x118ad9)[_0xa17b('0x24')](function(_0x493bba){_0x295e67[_0xa17b('0x3e')]=_0x493bba;if(_0x5c98fe[_0xa17b('0x2e')][_0xa17b('0x3f')]){_0x2b1708[_0xa17b('0x40')]=[{'all':!![]}];}return db[_0xa17b('0x2a')][_0xa17b('0x41')](_0x2b1708);})[_0xa17b('0x24')](function(_0xe57f94){_0x295e67['rows']=_0xe57f94;return _0x295e67;})[_0xa17b('0x24')](respondWithFilteredResult(_0x4aad82,_0x2b1708))[_0xa17b('0x42')](handleError(_0x4aad82,null));};exports['show']=function(_0x477922,_0x231b93){var _0x1c3fe5={'raw':!![],'where':{'id':_0x477922[_0xa17b('0x43')]['id']}},_0x318b3e={};_0x318b3e[_0xa17b('0x2c')]=_['keys'](db[_0xa17b('0x2a')][_0xa17b('0x2b')]);_0x318b3e[_0xa17b('0x2e')]=_['keys'](_0x477922['query']);_0x318b3e['filters']=_[_0xa17b('0x30')](_0x318b3e[_0xa17b('0x2c')],_0x318b3e[_0xa17b('0x2e')]);_0x1c3fe5[_0xa17b('0x32')]=_[_0xa17b('0x30')](_0x318b3e[_0xa17b('0x2c')],qs[_0xa17b('0x31')](_0x477922[_0xa17b('0x2e')][_0xa17b('0x31')]));_0x1c3fe5[_0xa17b('0x32')]=_0x1c3fe5[_0xa17b('0x32')][_0xa17b('0x33')]?_0x1c3fe5['attributes']:_0x318b3e[_0xa17b('0x2c')];if(_0x477922[_0xa17b('0x2e')][_0xa17b('0x3f')]){_0x1c3fe5[_0xa17b('0x40')]=[{'all':!![]}];}_0x1c3fe5=_[_0xa17b('0x39')]({},_0x1c3fe5,_0x477922[_0xa17b('0x44')]);return db['OpenchannelTransferReport'][_0xa17b('0x45')](_0x1c3fe5)[_0xa17b('0x24')](handleEntityNotFound(_0x231b93,null))[_0xa17b('0x24')](respondWithResult(_0x231b93,null))[_0xa17b('0x42')](handleError(_0x231b93,null));};exports[_0xa17b('0x46')]=function(_0x51945a,_0x27ff13){return db[_0xa17b('0x2a')][_0xa17b('0x46')](_0x51945a[_0xa17b('0x47')],{})['then'](respondWithResult(_0x27ff13,0xc9))[_0xa17b('0x42')](handleError(_0x27ff13,null));};exports[_0xa17b('0x23')]=function(_0x421470,_0x2906fd){if(_0x421470[_0xa17b('0x47')]['id']){delete _0x421470[_0xa17b('0x47')]['id'];}return db[_0xa17b('0x2a')]['find']({'where':{'id':_0x421470[_0xa17b('0x43')]['id']}})[_0xa17b('0x24')](handleEntityNotFound(_0x2906fd,null))['then'](saveUpdates(_0x421470[_0xa17b('0x47')],null))[_0xa17b('0x24')](respondWithResult(_0x2906fd,null))[_0xa17b('0x42')](handleError(_0x2906fd,null));};exports['destroy']=function(_0x187237,_0x4681ca){return db['OpenchannelTransferReport'][_0xa17b('0x45')]({'where':{'id':_0x187237[_0xa17b('0x43')]['id']}})['then'](handleEntityNotFound(_0x4681ca,null))[_0xa17b('0x24')](removeEntity(_0x4681ca,null))[_0xa17b('0x42')](handleError(_0x4681ca,null));};exports['describe']=function(_0x3eddb7,_0x44d408){return db[_0xa17b('0x2a')][_0xa17b('0x48')]()[_0xa17b('0x24')](respondWithResult(_0x44d408,null))[_0xa17b('0x42')](handleError(_0x44d408,null));};
\ No newline at end of file
index 1ea078d..498cd08 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f2f=['bluebird','request-promise','./openchannelTransferReport.attributes','define','OpenchannelTransferReport','report_openchannel_transfer','uniqueid','lodash','util','../../config/logger','api','moment'];(function(_0x37f1b2,_0x272dba){var _0x7c872d=function(_0x39a0b5){while(--_0x39a0b5){_0x37f1b2['push'](_0x37f1b2['shift']());}};_0x7c872d(++_0x272dba);}(_0x5f2f,0x73));var _0xf5f2=function(_0x2db29f,_0x156c89){_0x2db29f=_0x2db29f-0x0;var _0x1b1ed5=_0x5f2f[_0x2db29f];return _0x1b1ed5;};'use strict';var _=require(_0xf5f2('0x0'));var util=require(_0xf5f2('0x1'));var logger=require(_0xf5f2('0x2'))(_0xf5f2('0x3'));var moment=require(_0xf5f2('0x4'));var BPromise=require(_0xf5f2('0x5'));var rp=require(_0xf5f2('0x6'));var attributes=require(_0xf5f2('0x7'));module['exports']=function(_0x4854b6,_0x1665c7){return _0x4854b6[_0xf5f2('0x8')](_0xf5f2('0x9'),attributes,{'tableName':_0xf5f2('0xa'),'paranoid':![],'indexes':[{'name':_0xf5f2('0xb'),'fields':[_0xf5f2('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x5f2f=['bluebird','request-promise','./openchannelTransferReport.attributes','define','OpenchannelTransferReport','report_openchannel_transfer','uniqueid','lodash','util','../../config/logger','api','moment'];(function(_0x201502,_0x291cc8){var _0x5aaa1a=function(_0x3b7a54){while(--_0x3b7a54){_0x201502['push'](_0x201502['shift']());}};_0x5aaa1a(++_0x291cc8);}(_0x5f2f,0x73));var _0xf5f2=function(_0x5d6a1d,_0x3104e1){_0x5d6a1d=_0x5d6a1d-0x0;var _0x55eafd=_0x5f2f[_0x5d6a1d];return _0x55eafd;};'use strict';var _=require(_0xf5f2('0x0'));var util=require(_0xf5f2('0x1'));var logger=require(_0xf5f2('0x2'))(_0xf5f2('0x3'));var moment=require(_0xf5f2('0x4'));var BPromise=require(_0xf5f2('0x5'));var rp=require(_0xf5f2('0x6'));var attributes=require(_0xf5f2('0x7'));module['exports']=function(_0x4854b6,_0x1665c7){return _0x4854b6[_0xf5f2('0x8')](_0xf5f2('0x9'),attributes,{'tableName':_0xf5f2('0xa'),'paranoid':![],'indexes':[{'name':_0xf5f2('0xb'),'fields':[_0xf5f2('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 3bf445c..e701514 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6d4e=['../../config/environment','client','http','request','then','info','OpenchannelTransferReport,\x20%s,\x20%s','debug','OpenchannelTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','code','message','error','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x51482d,_0x1507b6){var _0x4a12e3=function(_0x53f586){while(--_0x53f586){_0x51482d['push'](_0x51482d['shift']());}};_0x4a12e3(++_0x1507b6);}(_0x6d4e,0x12e));var _0xe6d4=function(_0x1876b2,_0x5d0225){_0x1876b2=_0x1876b2-0x0;var _0x9fb1e0=_0x6d4e[_0x1876b2];return _0x9fb1e0;};'use strict';var _=require(_0xe6d4('0x0'));var util=require(_0xe6d4('0x1'));var moment=require(_0xe6d4('0x2'));var BPromise=require(_0xe6d4('0x3'));var rs=require(_0xe6d4('0x4'));var fs=require('fs');var Redis=require(_0xe6d4('0x5'));var db=require(_0xe6d4('0x6'))['db'];var utils=require(_0xe6d4('0x7'));var logger=require(_0xe6d4('0x8'))(_0xe6d4('0x9'));var config=require(_0xe6d4('0xa'));var jayson=require('jayson/promise');var client=jayson[_0xe6d4('0xb')][_0xe6d4('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x5e56b2,_0x25397f,_0x1c5205){return new BPromise(function(_0x90a6e0,_0x1390c8){return client[_0xe6d4('0xd')](_0x5e56b2,_0x1c5205)[_0xe6d4('0xe')](function(_0x28c7ed){logger[_0xe6d4('0xf')](_0xe6d4('0x10'),_0x25397f,'request\x20sent');logger[_0xe6d4('0x11')](_0xe6d4('0x12'),_0x25397f,_0xe6d4('0x13'),JSON[_0xe6d4('0x14')](_0x28c7ed));if(_0x28c7ed['error']){if(_0x28c7ed['error'][_0xe6d4('0x15')]===0x1f4){logger['error'](_0xe6d4('0x10'),_0x25397f,_0x28c7ed['error'][_0xe6d4('0x16')]);return _0x1390c8(_0x28c7ed[_0xe6d4('0x17')][_0xe6d4('0x16')]);}logger[_0xe6d4('0x17')](_0xe6d4('0x10'),_0x25397f,_0x28c7ed[_0xe6d4('0x17')][_0xe6d4('0x16')]);return _0x90a6e0(_0x28c7ed[_0xe6d4('0x17')][_0xe6d4('0x16')]);}else{logger[_0xe6d4('0xf')](_0xe6d4('0x10'),_0x25397f,'request\x20sent');_0x90a6e0(_0x28c7ed[_0xe6d4('0x18')][_0xe6d4('0x16')]);}})[_0xe6d4('0x19')](function(_0x20e83a){logger[_0xe6d4('0x17')](_0xe6d4('0x10'),_0x25397f,_0x20e83a);_0x1390c8(_0x20e83a);});});}
\ No newline at end of file
+var _0xab5b=['../../config/utils','rpc','../../config/environment','jayson/promise','client','http','request','info','OpenchannelTransferReport,\x20%s,\x20%s','debug','OpenchannelTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','lodash','util','bluebird','randomstring'];(function(_0x10b6d9,_0xc31308){var _0x484bd7=function(_0x24eaf4){while(--_0x24eaf4){_0x10b6d9['push'](_0x10b6d9['shift']());}};_0x484bd7(++_0xc31308);}(_0xab5b,0x11a));var _0xbab5=function(_0x207279,_0x530627){_0x207279=_0x207279-0x0;var _0x1f7e4e=_0xab5b[_0x207279];return _0x1f7e4e;};'use strict';var _=require(_0xbab5('0x0'));var util=require(_0xbab5('0x1'));var moment=require('moment');var BPromise=require(_0xbab5('0x2'));var rs=require(_0xbab5('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xbab5('0x4'));var logger=require('../../config/logger')(_0xbab5('0x5'));var config=require(_0xbab5('0x6'));var jayson=require(_0xbab5('0x7'));var client=jayson[_0xbab5('0x8')][_0xbab5('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5642aa,_0x102395,_0x10c7fe){return new BPromise(function(_0x395dd7,_0x4578ba){return client[_0xbab5('0xa')](_0x5642aa,_0x10c7fe)['then'](function(_0x180ac0){logger[_0xbab5('0xb')](_0xbab5('0xc'),_0x102395,'request\x20sent');logger[_0xbab5('0xd')](_0xbab5('0xe'),_0x102395,'request\x20sent',JSON[_0xbab5('0xf')](_0x180ac0));if(_0x180ac0[_0xbab5('0x10')]){if(_0x180ac0[_0xbab5('0x10')][_0xbab5('0x11')]===0x1f4){logger['error'](_0xbab5('0xc'),_0x102395,_0x180ac0['error'][_0xbab5('0x12')]);return _0x4578ba(_0x180ac0[_0xbab5('0x10')][_0xbab5('0x12')]);}logger[_0xbab5('0x10')](_0xbab5('0xc'),_0x102395,_0x180ac0['error'][_0xbab5('0x12')]);return _0x395dd7(_0x180ac0[_0xbab5('0x10')][_0xbab5('0x12')]);}else{logger[_0xbab5('0xb')](_0xbab5('0xc'),_0x102395,_0xbab5('0x13'));_0x395dd7(_0x180ac0[_0xbab5('0x14')][_0xbab5('0x12')]);}})[_0xbab5('0x15')](function(_0x59b10e){logger[_0xbab5('0x10')](_0xbab5('0xc'),_0x102395,_0x59b10e);_0x4578ba(_0x59b10e);});});}
\ No newline at end of file
index 11240cc..e0c5287 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7341=['post','create','update','delete','/:id','destroy','exports','path','express','Router','../../components/interaction/service','../../config/environment','./pause.controller','get','isAuthenticated','index','show'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x7341,0xe4));var _0x1734=function(_0x249a96,_0x5e5b80){_0x249a96=_0x249a96-0x0;var _0x5a9c71=_0x7341[_0x249a96];return _0x5a9c71;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x1734('0x0'));var timeout=require('connect-timeout');var express=require(_0x1734('0x1'));var router=express[_0x1734('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0x1734('0x3'));var config=require(_0x1734('0x4'));var controller=require(_0x1734('0x5'));router[_0x1734('0x6')]('/',auth[_0x1734('0x7')](),controller[_0x1734('0x8')]);router[_0x1734('0x6')]('/:id',auth[_0x1734('0x7')](),controller[_0x1734('0x9')]);router[_0x1734('0xa')]('/',auth['isAuthenticated'](),controller[_0x1734('0xb')]);router['put']('/:id',auth[_0x1734('0x7')](),controller[_0x1734('0xc')]);router[_0x1734('0xd')](_0x1734('0xe'),auth[_0x1734('0x7')](),controller[_0x1734('0xf')]);module[_0x1734('0x10')]=router;
\ No newline at end of file
+var _0x9990=['create','put','update','delete','destroy','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show','post'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x9990,0xf6));var _0x0999=function(_0x430ce1,_0x12449a){_0x430ce1=_0x430ce1-0x0;var _0x3c64e9=_0x9990[_0x430ce1];return _0x3c64e9;};'use strict';var multer=require('multer');var util=require(_0x0999('0x0'));var path=require(_0x0999('0x1'));var timeout=require(_0x0999('0x2'));var express=require(_0x0999('0x3'));var router=express[_0x0999('0x4')]();var auth=require(_0x0999('0x5'));var interaction=require(_0x0999('0x6'));var config=require(_0x0999('0x7'));var controller=require('./pause.controller');router[_0x0999('0x8')]('/',auth[_0x0999('0x9')](),controller[_0x0999('0xa')]);router['get'](_0x0999('0xb'),auth[_0x0999('0x9')](),controller[_0x0999('0xc')]);router[_0x0999('0xd')]('/',auth[_0x0999('0x9')](),controller[_0x0999('0xe')]);router[_0x0999('0xf')]('/:id',auth[_0x0999('0x9')](),controller[_0x0999('0x10')]);router[_0x0999('0x11')]('/:id',auth[_0x0999('0x9')](),controller[_0x0999('0x12')]);module[_0x0999('0x13')]=router;
\ No newline at end of file
index 687e22e..c3d6b5c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x210f=['exports','STRING','name','sequelize'];(function(_0x5bb957,_0x5a169b){var _0x57a6c3=function(_0x35c51c){while(--_0x35c51c){_0x5bb957['push'](_0x5bb957['shift']());}};_0x57a6c3(++_0x5a169b);}(_0x210f,0x67));var _0xf210=function(_0x22bd84,_0x671764){_0x22bd84=_0x22bd84-0x0;var _0x4fbcf5=_0x210f[_0x22bd84];return _0x4fbcf5;};'use strict';var Sequelize=require(_0xf210('0x0'));module[_0xf210('0x1')]={'name':{'type':Sequelize[_0xf210('0x2')],'unique':_0xf210('0x3'),'allowNull':![]},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x37e8=['exports','name','STRING','sequelize'];(function(_0x6fe169,_0xdfc5ea){var _0x21d430=function(_0x42700f){while(--_0x42700f){_0x6fe169['push'](_0x6fe169['shift']());}};_0x21d430(++_0xdfc5ea);}(_0x37e8,0xd7));var _0x837e=function(_0x2d4491,_0x5b4b4e){_0x2d4491=_0x2d4491-0x0;var _0x1341aa=_0x37e8[_0x2d4491];return _0x1341aa;};'use strict';var Sequelize=require(_0x837e('0x0'));module[_0x837e('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x837e('0x2'),'allowNull':![]},'description':{'type':Sequelize[_0x837e('0x3')]}};
\ No newline at end of file
index 97e8899..46d925c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0b45=['../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','get','Pauses','UserProfileResource','sendStatus','error','stack','name','Pause','rawAttributes','model','keys','query','fields','attributes','nolimit','order','sort','where','filters','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','catch','show','params','intersection','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','mustache','util','path','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring'];(function(_0x1ae915,_0xe5d3f6){var _0x5d53fa=function(_0x25b08c){while(--_0x25b08c){_0x1ae915['push'](_0x1ae915['shift']());}};_0x5d53fa(++_0xe5d3f6);}(_0x0b45,0x180));var _0x50b4=function(_0x4c1811,_0x11aa04){_0x4c1811=_0x4c1811-0x0;var _0x4711cb=_0x0b45[_0x4c1811];return _0x4711cb;};'use strict';var pdf=require(_0x50b4('0x0'));var emlformat=require(_0x50b4('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x50b4('0x2'));var jsonpatch=require(_0x50b4('0x3'));var rp=require(_0x50b4('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x50b4('0x5'));var util=require(_0x50b4('0x6'));var path=require(_0x50b4('0x7'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x50b4('0x8'));var fs=require('fs');var _=require(_0x50b4('0x9'));var squel=require(_0x50b4('0xa'));var crypto=require(_0x50b4('0xb'));var jsforce=require(_0x50b4('0xc'));var deskjs=require(_0x50b4('0xd'));var toCsv=require(_0x50b4('0xe'));var querystring=require(_0x50b4('0xf'));var Papa=require('papaparse');var authService=require(_0x50b4('0x10'));var hardwareService=require(_0x50b4('0x11'));var Redis=require(_0x50b4('0x12'));var qs=require(_0x50b4('0x13'));var logger=require(_0x50b4('0x14'))(_0x50b4('0x15'));var utils=require(_0x50b4('0x16'));var config=require(_0x50b4('0x17'));var db=require(_0x50b4('0x18'))['db'];function respondWithStatusCode(_0x40ceaf,_0x256432){_0x256432=_0x256432||0xcc;return function(_0x35e4c7){if(_0x35e4c7){return _0x40ceaf['sendStatus'](_0x256432);}return _0x40ceaf[_0x50b4('0x19')](_0x256432)[_0x50b4('0x1a')]();};}function respondWithResult(_0x15e151,_0x48a304){_0x48a304=_0x48a304||0xc8;return function(_0x2a7272){if(_0x2a7272){return _0x15e151['status'](_0x48a304)[_0x50b4('0x1b')](_0x2a7272);}};}function respondWithFilteredResult(_0xed18b6,_0x44e8c6){return function(_0x4418d1){if(_0x4418d1){var _0xf9bd83=_0x4418d1[_0x50b4('0x1c')],_0x5f288d=_0x44e8c6[_0x50b4('0x1d')],_0x3bef6d=_0x44e8c6[_0x50b4('0x1d')]+_0x44e8c6[_0x50b4('0x1e')],_0x316869;if(_0x3bef6d>=_0xf9bd83){_0x3bef6d=_0xf9bd83;_0x316869=0xc8;}else{_0x316869=0xce;}_0xed18b6[_0x50b4('0x19')](_0x316869);return _0xed18b6[_0x50b4('0x1f')](_0x50b4('0x20'),_0x5f288d+'-'+_0x3bef6d+'/'+_0xf9bd83)[_0x50b4('0x1b')](_0x4418d1);}return null;};}function patchUpdates(_0x5586ae){return function(_0x364bdc){try{jsonpatch[_0x50b4('0x21')](_0x364bdc,_0x5586ae,!![]);}catch(_0x2234d3){return BPromise[_0x50b4('0x22')](_0x2234d3);}return _0x364bdc['save']();};}function saveUpdates(_0x54d79e,_0x249d85){return function(_0x1da714){if(_0x1da714){return _0x1da714[_0x50b4('0x23')](_0x54d79e)[_0x50b4('0x24')](function(_0x39ea44){return _0x39ea44;});}return null;};}function removeEntity(_0x284651,_0x165ae9){return function(_0x538e45){if(_0x538e45){return _0x538e45[_0x50b4('0x25')]()['then'](function(){var _0x16848f=_0x538e45[_0x50b4('0x26')]({'plain':!![]});var _0x5c8781=_0x50b4('0x27');return db[_0x50b4('0x28')][_0x50b4('0x25')]({'where':{'type':_0x5c8781,'resourceId':_0x16848f['id']}})[_0x50b4('0x24')](function(){return _0x538e45;});})['then'](function(){_0x284651[_0x50b4('0x19')](0xcc)[_0x50b4('0x1a')]();});}};}function handleEntityNotFound(_0x397e61,_0x487a0c){return function(_0x5d2183){if(!_0x5d2183){_0x397e61[_0x50b4('0x29')](0x194);}return _0x5d2183;};}function handleError(_0x4abc93,_0x4138da){_0x4138da=_0x4138da||0x1f4;return function(_0x3595e2){logger[_0x50b4('0x2a')](_0x3595e2[_0x50b4('0x2b')]);if(_0x3595e2[_0x50b4('0x2c')]){delete _0x3595e2[_0x50b4('0x2c')];}_0x4abc93[_0x50b4('0x19')](_0x4138da)['send'](_0x3595e2);};}exports['index']=function(_0x529590,_0x58013b){var _0x1fb07a={},_0x3b2b14={},_0x4d3164={'count':0x0,'rows':[]};var _0xb55a7d=db[_0x50b4('0x2d')][_0x50b4('0x2e')];_0x3b2b14[_0x50b4('0x2f')]=_[_0x50b4('0x30')](_0xb55a7d);_0x3b2b14[_0x50b4('0x31')]=_[_0x50b4('0x30')](_0x529590[_0x50b4('0x31')]);_0x3b2b14['filters']=_['intersection'](_0x3b2b14[_0x50b4('0x2f')],_0x3b2b14['query']);_0x1fb07a['attributes']=_['intersection'](_0x3b2b14[_0x50b4('0x2f')],qs[_0x50b4('0x32')](_0x529590['query']['fields']));_0x1fb07a[_0x50b4('0x33')]=_0x1fb07a[_0x50b4('0x33')]['length']?_0x1fb07a[_0x50b4('0x33')]:_0x3b2b14[_0x50b4('0x2f')];if(!_0x529590['query']['hasOwnProperty'](_0x50b4('0x34'))){_0x1fb07a[_0x50b4('0x1e')]=qs[_0x50b4('0x1e')](_0x529590[_0x50b4('0x31')][_0x50b4('0x1e')]);_0x1fb07a[_0x50b4('0x1d')]=qs[_0x50b4('0x1d')](_0x529590[_0x50b4('0x31')][_0x50b4('0x1d')]);}_0x1fb07a[_0x50b4('0x35')]=qs['sort'](_0x529590[_0x50b4('0x31')][_0x50b4('0x36')]);_0x1fb07a[_0x50b4('0x37')]=qs[_0x50b4('0x38')](_[_0x50b4('0x39')](_0x529590[_0x50b4('0x31')],_0x3b2b14[_0x50b4('0x38')]));if(_0x529590[_0x50b4('0x31')][_0x50b4('0x3a')]){_0x1fb07a['where']=_[_0x50b4('0x3b')](_0x1fb07a[_0x50b4('0x37')],{'$or':_[_0x50b4('0x3c')](_0xb55a7d,function(_0x4ef192){if(_0x4ef192[_0x50b4('0x3d')][_0x50b4('0x3e')]!==_0x50b4('0x3f')){var _0x1844ea={};_0x1844ea[_0x4ef192[_0x50b4('0x40')]]={'$like':'%'+_0x529590[_0x50b4('0x31')][_0x50b4('0x3a')]+'%'};return _0x1844ea;}})});}_0x1fb07a=_[_0x50b4('0x3b')]({},_0x1fb07a,_0x529590[_0x50b4('0x41')]);var _0x4babac={'where':_0x1fb07a[_0x50b4('0x37')]};return db[_0x50b4('0x2d')][_0x50b4('0x1c')](_0x4babac)['then'](function(_0x7650d4){_0x4d3164['count']=_0x7650d4;if(_0x529590[_0x50b4('0x31')][_0x50b4('0x42')]){_0x1fb07a[_0x50b4('0x43')]=[{'all':!![]}];}return db[_0x50b4('0x2d')][_0x50b4('0x44')](_0x1fb07a);})[_0x50b4('0x24')](function(_0x4fa794){_0x4d3164['rows']=_0x4fa794;return _0x4d3164;})[_0x50b4('0x24')](respondWithFilteredResult(_0x58013b,_0x1fb07a))[_0x50b4('0x45')](handleError(_0x58013b,null));};exports[_0x50b4('0x46')]=function(_0x256fc4,_0x4eeebe){var _0x541837={'raw':!![],'where':{'id':_0x256fc4[_0x50b4('0x47')]['id']}},_0x241399={};_0x241399[_0x50b4('0x2f')]=_[_0x50b4('0x30')](db[_0x50b4('0x2d')][_0x50b4('0x2e')]);_0x241399[_0x50b4('0x31')]=_['keys'](_0x256fc4['query']);_0x241399['filters']=_[_0x50b4('0x48')](_0x241399[_0x50b4('0x2f')],_0x241399[_0x50b4('0x31')]);_0x541837[_0x50b4('0x33')]=_[_0x50b4('0x48')](_0x241399[_0x50b4('0x2f')],qs[_0x50b4('0x32')](_0x256fc4[_0x50b4('0x31')]['fields']));_0x541837['attributes']=_0x541837['attributes']['length']?_0x541837[_0x50b4('0x33')]:_0x241399[_0x50b4('0x2f')];if(_0x256fc4['query'][_0x50b4('0x42')]){_0x541837['include']=[{'all':!![]}];}_0x541837=_[_0x50b4('0x3b')]({},_0x541837,_0x256fc4[_0x50b4('0x41')]);return db[_0x50b4('0x2d')][_0x50b4('0x49')](_0x541837)[_0x50b4('0x24')](handleEntityNotFound(_0x4eeebe,null))[_0x50b4('0x24')](respondWithResult(_0x4eeebe,null))['catch'](handleError(_0x4eeebe,null));};exports[_0x50b4('0x4a')]=function(_0x2255e9,_0x1da39a){return db[_0x50b4('0x2d')][_0x50b4('0x4a')](_0x2255e9[_0x50b4('0x4b')],{})['then'](function(_0x4ccb4e){var _0x199138=_0x2255e9['user'][_0x50b4('0x26')]({'plain':!![]});if(!_0x199138)throw new Error(_0x50b4('0x4c'));if(_0x199138[_0x50b4('0x4d')]==='user'){var _0xa74db2=_0x4ccb4e['get']({'plain':!![]});var _0x55019a=_0x50b4('0x27');return db['UserProfileSection']['find']({'where':{'name':_0x55019a,'userProfileId':_0x199138['userProfileId']},'raw':!![]})[_0x50b4('0x24')](function(_0x6ee45b){if(_0x6ee45b&&_0x6ee45b[_0x50b4('0x4e')]===0x0){return db['UserProfileResource']['create']({'name':_0xa74db2[_0x50b4('0x2c')],'resourceId':_0xa74db2['id'],'type':_0x6ee45b['name'],'sectionId':_0x6ee45b['id']},{})[_0x50b4('0x24')](function(){return _0x4ccb4e;});}else{return _0x4ccb4e;}})[_0x50b4('0x45')](function(_0x47261d){logger[_0x50b4('0x2a')](_0x50b4('0x4f'),_0x47261d);throw _0x47261d;});}return _0x4ccb4e;})[_0x50b4('0x24')](respondWithResult(_0x1da39a,0xc9))[_0x50b4('0x45')](handleError(_0x1da39a,null));};exports[_0x50b4('0x23')]=function(_0x48616d,_0x53f902){if(_0x48616d['body']['id']){delete _0x48616d[_0x50b4('0x4b')]['id'];}return db['Pause']['find']({'where':{'id':_0x48616d[_0x50b4('0x47')]['id']}})[_0x50b4('0x24')](handleEntityNotFound(_0x53f902,null))[_0x50b4('0x24')](saveUpdates(_0x48616d[_0x50b4('0x4b')],null))[_0x50b4('0x24')](respondWithResult(_0x53f902,null))[_0x50b4('0x45')](handleError(_0x53f902,null));};exports[_0x50b4('0x25')]=function(_0x773240,_0x3785f3){return db[_0x50b4('0x2d')][_0x50b4('0x49')]({'where':{'id':_0x773240[_0x50b4('0x47')]['id']}})['then'](handleEntityNotFound(_0x3785f3,null))[_0x50b4('0x24')](removeEntity(_0x3785f3,null))[_0x50b4('0x45')](handleError(_0x3785f3,null));};
\ No newline at end of file
+var _0x85d3=['lodash','squel','crypto','jsforce','desk.js','querystring','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','then','destroy','get','Pauses','UserProfileResource','error','stack','name','send','index','rawAttributes','model','keys','query','intersection','fields','attributes','hasOwnProperty','order','sort','filter','where','merge','type','VIRTUAL','options','includeAll','Pause','findAll','rows','show','params','filters','length','include','find','catch','create','body','user','UserProfileSection','userProfileId','autoAssociation','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'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x85d3,0x189));var _0x385d=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x85d3[_0x6c993a];return _0x27f547;};'use strict';var pdf=require(_0x385d('0x0'));var emlformat=require(_0x385d('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x385d('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x385d('0x3'));var moment=require(_0x385d('0x4'));var BPromise=require(_0x385d('0x5'));var Mustache=require(_0x385d('0x6'));var util=require(_0x385d('0x7'));var path=require(_0x385d('0x8'));var sox=require(_0x385d('0x9'));var csv=require(_0x385d('0xa'));var ejs=require(_0x385d('0xb'));var fs=require('fs');var _=require(_0x385d('0xc'));var squel=require(_0x385d('0xd'));var crypto=require(_0x385d('0xe'));var jsforce=require(_0x385d('0xf'));var deskjs=require(_0x385d('0x10'));var toCsv=require(_0x385d('0xa'));var querystring=require(_0x385d('0x11'));var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x385d('0x12'));var Redis=require(_0x385d('0x13'));var qs=require(_0x385d('0x14'));var logger=require(_0x385d('0x15'))(_0x385d('0x16'));var utils=require(_0x385d('0x17'));var config=require(_0x385d('0x18'));var db=require(_0x385d('0x19'))['db'];function respondWithStatusCode(_0x6237a2,_0x285255){_0x285255=_0x285255||0xcc;return function(_0x43a12f){if(_0x43a12f){return _0x6237a2[_0x385d('0x1a')](_0x285255);}return _0x6237a2[_0x385d('0x1b')](_0x285255)[_0x385d('0x1c')]();};}function respondWithResult(_0x1bdd2b,_0x2596dd){_0x2596dd=_0x2596dd||0xc8;return function(_0x5249e0){if(_0x5249e0){return _0x1bdd2b[_0x385d('0x1b')](_0x2596dd)[_0x385d('0x1d')](_0x5249e0);}};}function respondWithFilteredResult(_0x45e950,_0x3e28fc){return function(_0x3b354e){if(_0x3b354e){var _0x5f596f=_0x3b354e[_0x385d('0x1e')],_0x3971f0=_0x3e28fc['offset'],_0x550223=_0x3e28fc[_0x385d('0x1f')]+_0x3e28fc[_0x385d('0x20')],_0x32f28e;if(_0x550223>=_0x5f596f){_0x550223=_0x5f596f;_0x32f28e=0xc8;}else{_0x32f28e=0xce;}_0x45e950['status'](_0x32f28e);return _0x45e950[_0x385d('0x21')](_0x385d('0x22'),_0x3971f0+'-'+_0x550223+'/'+_0x5f596f)[_0x385d('0x1d')](_0x3b354e);}return null;};}function patchUpdates(_0x21bf59){return function(_0x1aec58){try{jsonpatch[_0x385d('0x23')](_0x1aec58,_0x21bf59,!![]);}catch(_0x9f263f){return BPromise[_0x385d('0x24')](_0x9f263f);}return _0x1aec58['save']();};}function saveUpdates(_0x267f79,_0x16e665){return function(_0x4ad8e8){if(_0x4ad8e8){return _0x4ad8e8['update'](_0x267f79)[_0x385d('0x25')](function(_0x7d31fa){return _0x7d31fa;});}return null;};}function removeEntity(_0x27bdae,_0x8a654c){return function(_0xaede61){if(_0xaede61){return _0xaede61[_0x385d('0x26')]()['then'](function(){var _0x48280d=_0xaede61[_0x385d('0x27')]({'plain':!![]});var _0x26cad2=_0x385d('0x28');return db[_0x385d('0x29')]['destroy']({'where':{'type':_0x26cad2,'resourceId':_0x48280d['id']}})[_0x385d('0x25')](function(){return _0xaede61;});})[_0x385d('0x25')](function(){_0x27bdae['status'](0xcc)[_0x385d('0x1c')]();});}};}function handleEntityNotFound(_0x42e450,_0x371935){return function(_0xa3f942){if(!_0xa3f942){_0x42e450['sendStatus'](0x194);}return _0xa3f942;};}function handleError(_0x5679bd,_0x3c7d8d){_0x3c7d8d=_0x3c7d8d||0x1f4;return function(_0x49f205){logger[_0x385d('0x2a')](_0x49f205[_0x385d('0x2b')]);if(_0x49f205[_0x385d('0x2c')]){delete _0x49f205[_0x385d('0x2c')];}_0x5679bd[_0x385d('0x1b')](_0x3c7d8d)[_0x385d('0x2d')](_0x49f205);};}exports[_0x385d('0x2e')]=function(_0x1ea444,_0x13aaa9){var _0x4a6f95={},_0x584ed1={},_0x2de6de={'count':0x0,'rows':[]};var _0x47376e=db['Pause'][_0x385d('0x2f')];_0x584ed1[_0x385d('0x30')]=_[_0x385d('0x31')](_0x47376e);_0x584ed1[_0x385d('0x32')]=_['keys'](_0x1ea444[_0x385d('0x32')]);_0x584ed1['filters']=_[_0x385d('0x33')](_0x584ed1['model'],_0x584ed1[_0x385d('0x32')]);_0x4a6f95['attributes']=_[_0x385d('0x33')](_0x584ed1[_0x385d('0x30')],qs[_0x385d('0x34')](_0x1ea444[_0x385d('0x32')][_0x385d('0x34')]));_0x4a6f95[_0x385d('0x35')]=_0x4a6f95[_0x385d('0x35')]['length']?_0x4a6f95[_0x385d('0x35')]:_0x584ed1[_0x385d('0x30')];if(!_0x1ea444['query'][_0x385d('0x36')]('nolimit')){_0x4a6f95[_0x385d('0x20')]=qs[_0x385d('0x20')](_0x1ea444[_0x385d('0x32')]['limit']);_0x4a6f95['offset']=qs[_0x385d('0x1f')](_0x1ea444[_0x385d('0x32')]['offset']);}_0x4a6f95[_0x385d('0x37')]=qs['sort'](_0x1ea444[_0x385d('0x32')][_0x385d('0x38')]);_0x4a6f95['where']=qs['filters'](_['pick'](_0x1ea444[_0x385d('0x32')],_0x584ed1['filters']));if(_0x1ea444[_0x385d('0x32')][_0x385d('0x39')]){_0x4a6f95[_0x385d('0x3a')]=_[_0x385d('0x3b')](_0x4a6f95[_0x385d('0x3a')],{'$or':_['map'](_0x47376e,function(_0x171beb){if(_0x171beb[_0x385d('0x3c')]['key']!==_0x385d('0x3d')){var _0x2445bf={};_0x2445bf[_0x171beb['field']]={'$like':'%'+_0x1ea444['query'][_0x385d('0x39')]+'%'};return _0x2445bf;}})});}_0x4a6f95=_['merge']({},_0x4a6f95,_0x1ea444[_0x385d('0x3e')]);var _0x33fe97={'where':_0x4a6f95[_0x385d('0x3a')]};return db['Pause'][_0x385d('0x1e')](_0x33fe97)[_0x385d('0x25')](function(_0x586348){_0x2de6de[_0x385d('0x1e')]=_0x586348;if(_0x1ea444[_0x385d('0x32')][_0x385d('0x3f')]){_0x4a6f95['include']=[{'all':!![]}];}return db[_0x385d('0x40')][_0x385d('0x41')](_0x4a6f95);})['then'](function(_0xfb87d3){_0x2de6de[_0x385d('0x42')]=_0xfb87d3;return _0x2de6de;})[_0x385d('0x25')](respondWithFilteredResult(_0x13aaa9,_0x4a6f95))['catch'](handleError(_0x13aaa9,null));};exports[_0x385d('0x43')]=function(_0x825be2,_0x593977){var _0x3e6af5={'raw':!![],'where':{'id':_0x825be2[_0x385d('0x44')]['id']}},_0x2438bd={};_0x2438bd[_0x385d('0x30')]=_[_0x385d('0x31')](db[_0x385d('0x40')][_0x385d('0x2f')]);_0x2438bd[_0x385d('0x32')]=_[_0x385d('0x31')](_0x825be2[_0x385d('0x32')]);_0x2438bd[_0x385d('0x45')]=_[_0x385d('0x33')](_0x2438bd[_0x385d('0x30')],_0x2438bd[_0x385d('0x32')]);_0x3e6af5[_0x385d('0x35')]=_[_0x385d('0x33')](_0x2438bd[_0x385d('0x30')],qs[_0x385d('0x34')](_0x825be2[_0x385d('0x32')]['fields']));_0x3e6af5['attributes']=_0x3e6af5[_0x385d('0x35')][_0x385d('0x46')]?_0x3e6af5['attributes']:_0x2438bd['model'];if(_0x825be2[_0x385d('0x32')][_0x385d('0x3f')]){_0x3e6af5[_0x385d('0x47')]=[{'all':!![]}];}_0x3e6af5=_['merge']({},_0x3e6af5,_0x825be2[_0x385d('0x3e')]);return db[_0x385d('0x40')][_0x385d('0x48')](_0x3e6af5)[_0x385d('0x25')](handleEntityNotFound(_0x593977,null))['then'](respondWithResult(_0x593977,null))[_0x385d('0x49')](handleError(_0x593977,null));};exports['create']=function(_0x7ded21,_0x2ce46b){return db['Pause'][_0x385d('0x4a')](_0x7ded21[_0x385d('0x4b')],{})[_0x385d('0x25')](function(_0x4f627e){var _0x5ea378=_0x7ded21[_0x385d('0x4c')][_0x385d('0x27')]({'plain':!![]});if(!_0x5ea378)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x5ea378['role']===_0x385d('0x4c')){var _0x24d593=_0x4f627e[_0x385d('0x27')]({'plain':!![]});var _0xbd4d06=_0x385d('0x28');return db[_0x385d('0x4d')][_0x385d('0x48')]({'where':{'name':_0xbd4d06,'userProfileId':_0x5ea378[_0x385d('0x4e')]},'raw':!![]})['then'](function(_0x25d134){if(_0x25d134&&_0x25d134[_0x385d('0x4f')]===0x0){return db['UserProfileResource']['create']({'name':_0x24d593['name'],'resourceId':_0x24d593['id'],'type':_0x25d134['name'],'sectionId':_0x25d134['id']},{})[_0x385d('0x25')](function(){return _0x4f627e;});}else{return _0x4f627e;}})['catch'](function(_0x2e1f3f){logger['error'](_0x385d('0x50'),_0x2e1f3f);throw _0x2e1f3f;});}return _0x4f627e;})[_0x385d('0x25')](respondWithResult(_0x2ce46b,0xc9))['catch'](handleError(_0x2ce46b,null));};exports['update']=function(_0x2f261b,_0x428cb6){if(_0x2f261b['body']['id']){delete _0x2f261b['body']['id'];}return db[_0x385d('0x40')][_0x385d('0x48')]({'where':{'id':_0x2f261b['params']['id']}})[_0x385d('0x25')](handleEntityNotFound(_0x428cb6,null))[_0x385d('0x25')](saveUpdates(_0x2f261b[_0x385d('0x4b')],null))[_0x385d('0x25')](respondWithResult(_0x428cb6,null))[_0x385d('0x49')](handleError(_0x428cb6,null));};exports[_0x385d('0x26')]=function(_0x10d3b4,_0xf5c864){return db[_0x385d('0x40')][_0x385d('0x48')]({'where':{'id':_0x10d3b4[_0x385d('0x44')]['id']}})['then'](handleEntityNotFound(_0xf5c864,null))[_0x385d('0x25')](removeEntity(_0xf5c864,null))[_0x385d('0x49')](handleError(_0xf5c864,null));};
\ No newline at end of file
index 20a987f..0b94dc1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0c71=['request-promise','./pause.attributes','define','Pause','tools_pauses','util','api','moment'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0x0c71,0x8d));var _0x10c7=function(_0x46d051,_0x3d7c05){_0x46d051=_0x46d051-0x0;var _0x1bb73b=_0x0c71[_0x46d051];return _0x1bb73b;};'use strict';var _=require('lodash');var util=require(_0x10c7('0x0'));var logger=require('../../config/logger')(_0x10c7('0x1'));var moment=require(_0x10c7('0x2'));var BPromise=require('bluebird');var rp=require(_0x10c7('0x3'));var attributes=require(_0x10c7('0x4'));module['exports']=function(_0x4eafab,_0x4b0418){return _0x4eafab[_0x10c7('0x5')](_0x10c7('0x6'),attributes,{'tableName':_0x10c7('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb582=['exports','define','Pause','tools_pauses','lodash','api','moment','request-promise','./pause.attributes'];(function(_0x153136,_0x2be1b6){var _0x35abfd=function(_0xc9e71f){while(--_0xc9e71f){_0x153136['push'](_0x153136['shift']());}};_0x35abfd(++_0x2be1b6);}(_0xb582,0x13f));var _0x2b58=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0xb582[_0x5b644e];return _0x49c6bf;};'use strict';var _=require(_0x2b58('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x2b58('0x1'));var moment=require(_0x2b58('0x2'));var BPromise=require('bluebird');var rp=require(_0x2b58('0x3'));var attributes=require(_0x2b58('0x4'));module[_0x2b58('0x5')]=function(_0x10b362,_0x570c12){return _0x10b362[_0x2b58('0x6')](_0x2b58('0x7'),attributes,{'tableName':_0x2b58('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d5c3a4b..90e617c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x22fd=['request','then','info','Pause,\x20%s,\x20%s','request\x20sent','Pause,\x20%s,\x20%s,\x20%s','stringify','error','message','result','ShowPause','Pause','find','options','raw','where','attributes','map','model','include','debug','catch','lodash','moment','ioredis','../../mysqldb','../../config/utils','jayson/promise'];(function(_0x186222,_0x3bdfb0){var _0x226a38=function(_0x3b071f){while(--_0x3b071f){_0x186222['push'](_0x186222['shift']());}};_0x226a38(++_0x3bdfb0);}(_0x22fd,0x166));var _0xd22f=function(_0x16b9ed,_0x56517a){_0x16b9ed=_0x16b9ed-0x0;var _0x66b1f8=_0x22fd[_0x16b9ed];return _0x66b1f8;};'use strict';var _=require(_0xd22f('0x0'));var util=require('util');var moment=require(_0xd22f('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xd22f('0x2'));var db=require(_0xd22f('0x3'))['db'];var utils=require(_0xd22f('0x4'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require(_0xd22f('0x5'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x22e3e9,_0x4a3516,_0x3c21be){return new BPromise(function(_0x2cf2fc,_0x37dab4){return client[_0xd22f('0x6')](_0x22e3e9,_0x3c21be)[_0xd22f('0x7')](function(_0x4a8565){logger[_0xd22f('0x8')](_0xd22f('0x9'),_0x4a3516,_0xd22f('0xa'));logger['debug'](_0xd22f('0xb'),_0x4a3516,_0xd22f('0xa'),JSON[_0xd22f('0xc')](_0x4a8565));if(_0x4a8565[_0xd22f('0xd')]){if(_0x4a8565['error']['code']===0x1f4){logger[_0xd22f('0xd')]('Pause,\x20%s,\x20%s',_0x4a3516,_0x4a8565[_0xd22f('0xd')]['message']);return _0x37dab4(_0x4a8565[_0xd22f('0xd')][_0xd22f('0xe')]);}logger[_0xd22f('0xd')](_0xd22f('0x9'),_0x4a3516,_0x4a8565['error']['message']);return _0x2cf2fc(_0x4a8565['error'][_0xd22f('0xe')]);}else{logger['info'](_0xd22f('0x9'),_0x4a3516,'request\x20sent');_0x2cf2fc(_0x4a8565[_0xd22f('0xf')]['message']);}})['catch'](function(_0x59629d){logger[_0xd22f('0xd')]('Pause,\x20%s,\x20%s',_0x4a3516,_0x59629d);_0x37dab4(_0x59629d);});});}exports[_0xd22f('0x10')]=function(_0x2f238f){var _0x224dc0=this;return new Promise(function(_0xc86cff,_0x3e1cec){return db[_0xd22f('0x11')][_0xd22f('0x12')]({'raw':_0x2f238f['options']?_0x2f238f[_0xd22f('0x13')][_0xd22f('0x14')]===undefined?!![]:![]:!![],'where':_0x2f238f[_0xd22f('0x13')]?_0x2f238f[_0xd22f('0x13')][_0xd22f('0x15')]||null:null,'attributes':_0x2f238f[_0xd22f('0x13')]?_0x2f238f['options'][_0xd22f('0x16')]||null:null,'include':_0x2f238f[_0xd22f('0x13')]?_0x2f238f['options']['include']?_[_0xd22f('0x17')](_0x2f238f[_0xd22f('0x13')]['include'],function(_0x2b7780){return{'model':db[_0x2b7780[_0xd22f('0x18')]],'as':_0x2b7780['as'],'attributes':_0x2b7780[_0xd22f('0x16')],'include':_0x2b7780[_0xd22f('0x19')]?_[_0xd22f('0x17')](_0x2b7780[_0xd22f('0x19')],function(_0x383bfb){return{'model':db[_0x383bfb[_0xd22f('0x18')]],'as':_0x383bfb['as'],'attributes':_0x383bfb['attributes'],'include':_0x383bfb[_0xd22f('0x19')]?_[_0xd22f('0x17')](_0x383bfb[_0xd22f('0x19')],function(_0x513ea8){return{'model':db[_0x513ea8[_0xd22f('0x18')]],'as':_0x513ea8['as'],'attributes':_0x513ea8['attributes']};}):[]};}):[]};}):[]:[]})[_0xd22f('0x7')](function(_0x301f41){logger[_0xd22f('0x8')](_0xd22f('0x10'),_0x2f238f);logger[_0xd22f('0x1a')](_0xd22f('0x10'),_0x2f238f,JSON['stringify'](_0x301f41));_0xc86cff(_0x301f41);})[_0xd22f('0x1b')](function(_0x356ac9){logger[_0xd22f('0xd')](_0xd22f('0x10'),_0x356ac9['message'],_0x2f238f);_0x3e1cec(_0x224dc0[_0xd22f('0xd')](0x1f4,_0x356ac9[_0xd22f('0xe')]));});});};
\ No newline at end of file
+var _0x668b=['result','catch','ShowPause','find','options','raw','attributes','include','map','model','lodash','util','bluebird','randomstring','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','request','then','info','Pause,\x20%s,\x20%s','request\x20sent','debug','Pause,\x20%s,\x20%s,\x20%s','stringify','error','code','message'];(function(_0x2c5ecd,_0x5e8d6f){var _0x21c549=function(_0x5976e2){while(--_0x5976e2){_0x2c5ecd['push'](_0x2c5ecd['shift']());}};_0x21c549(++_0x5e8d6f);}(_0x668b,0x140));var _0xb668=function(_0x28394f,_0x5ebdd2){_0x28394f=_0x28394f-0x0;var _0x2618d2=_0x668b[_0x28394f];return _0x2618d2;};'use strict';var _=require(_0xb668('0x0'));var util=require(_0xb668('0x1'));var moment=require('moment');var BPromise=require(_0xb668('0x2'));var rs=require(_0xb668('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xb668('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xb668('0x5'))(_0xb668('0x6'));var config=require(_0xb668('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xb668('0x8')][_0xb668('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3be92e,_0x2778e9,_0x20b749){return new BPromise(function(_0x3f01bc,_0x517fc5){return client[_0xb668('0xa')](_0x3be92e,_0x20b749)[_0xb668('0xb')](function(_0x128cf5){logger[_0xb668('0xc')](_0xb668('0xd'),_0x2778e9,_0xb668('0xe'));logger[_0xb668('0xf')](_0xb668('0x10'),_0x2778e9,'request\x20sent',JSON[_0xb668('0x11')](_0x128cf5));if(_0x128cf5[_0xb668('0x12')]){if(_0x128cf5[_0xb668('0x12')][_0xb668('0x13')]===0x1f4){logger[_0xb668('0x12')](_0xb668('0xd'),_0x2778e9,_0x128cf5[_0xb668('0x12')][_0xb668('0x14')]);return _0x517fc5(_0x128cf5[_0xb668('0x12')][_0xb668('0x14')]);}logger[_0xb668('0x12')](_0xb668('0xd'),_0x2778e9,_0x128cf5[_0xb668('0x12')][_0xb668('0x14')]);return _0x3f01bc(_0x128cf5[_0xb668('0x12')][_0xb668('0x14')]);}else{logger[_0xb668('0xc')](_0xb668('0xd'),_0x2778e9,_0xb668('0xe'));_0x3f01bc(_0x128cf5[_0xb668('0x15')][_0xb668('0x14')]);}})[_0xb668('0x16')](function(_0x4ab137){logger[_0xb668('0x12')]('Pause,\x20%s,\x20%s',_0x2778e9,_0x4ab137);_0x517fc5(_0x4ab137);});});}exports[_0xb668('0x17')]=function(_0x89fe72){var _0x5438ff=this;return new Promise(function(_0x38595d,_0x18e9c1){return db['Pause'][_0xb668('0x18')]({'raw':_0x89fe72['options']?_0x89fe72[_0xb668('0x19')][_0xb668('0x1a')]===undefined?!![]:![]:!![],'where':_0x89fe72[_0xb668('0x19')]?_0x89fe72[_0xb668('0x19')]['where']||null:null,'attributes':_0x89fe72[_0xb668('0x19')]?_0x89fe72[_0xb668('0x19')][_0xb668('0x1b')]||null:null,'include':_0x89fe72['options']?_0x89fe72['options'][_0xb668('0x1c')]?_[_0xb668('0x1d')](_0x89fe72['options'][_0xb668('0x1c')],function(_0x4bf863){return{'model':db[_0x4bf863[_0xb668('0x1e')]],'as':_0x4bf863['as'],'attributes':_0x4bf863['attributes'],'include':_0x4bf863[_0xb668('0x1c')]?_[_0xb668('0x1d')](_0x4bf863[_0xb668('0x1c')],function(_0x3231b2){return{'model':db[_0x3231b2[_0xb668('0x1e')]],'as':_0x3231b2['as'],'attributes':_0x3231b2[_0xb668('0x1b')],'include':_0x3231b2['include']?_[_0xb668('0x1d')](_0x3231b2[_0xb668('0x1c')],function(_0x2ab8c2){return{'model':db[_0x2ab8c2['model']],'as':_0x2ab8c2['as'],'attributes':_0x2ab8c2['attributes']};}):[]};}):[]};}):[]:[]})[_0xb668('0xb')](function(_0x2a826d){logger[_0xb668('0xc')]('ShowPause',_0x89fe72);logger[_0xb668('0xf')](_0xb668('0x17'),_0x89fe72,JSON[_0xb668('0x11')](_0x2a826d));_0x38595d(_0x2a826d);})['catch'](function(_0x5709e2){logger[_0xb668('0x12')](_0xb668('0x17'),_0x5709e2['message'],_0x89fe72);_0x18e9c1(_0x5438ff[_0xb668('0x12')](0x1f4,_0x5709e2[_0xb668('0x14')]));});});};
\ No newline at end of file
index 4038b4f..e31c9b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa7e5=['webhookGet','/:id','show','/:id/download','download','diskStorage','root','originalname','replace','format','%s-%s%s','extname','now','post','single','file','put','update','delete','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./plugin.controller','isAuthenticated','get','/webhook'];(function(_0x27ef3c,_0x5918d4){var _0x6f3ef1=function(_0x1ad6f1){while(--_0x1ad6f1){_0x27ef3c['push'](_0x27ef3c['shift']());}};_0x6f3ef1(++_0x5918d4);}(_0xa7e5,0x1e2));var _0x5a7e=function(_0x187d02,_0xb8f24){_0x187d02=_0x187d02-0x0;var _0x42f011=_0xa7e5[_0x187d02];return _0x42f011;};'use strict';var multer=require(_0x5a7e('0x0'));var util=require(_0x5a7e('0x1'));var path=require(_0x5a7e('0x2'));var timeout=require(_0x5a7e('0x3'));var express=require(_0x5a7e('0x4'));var router=express[_0x5a7e('0x5')]();var auth=require(_0x5a7e('0x6'));var interaction=require(_0x5a7e('0x7'));var config=require(_0x5a7e('0x8'));var controller=require(_0x5a7e('0x9'));router['get']('/',auth[_0x5a7e('0xa')](),controller['index']);router[_0x5a7e('0xb')](_0x5a7e('0xc'),controller[_0x5a7e('0xd')]);router[_0x5a7e('0xb')](_0x5a7e('0xe'),auth[_0x5a7e('0xa')](),controller[_0x5a7e('0xf')]);router[_0x5a7e('0xb')](_0x5a7e('0x10'),auth[_0x5a7e('0xa')](),controller[_0x5a7e('0x11')]);var upload=multer({'storage':multer[_0x5a7e('0x12')]({'destination':function(_0x5c9d2f,_0x4ce672,_0x4b6759){_0x4b6759(null,path['join'](config[_0x5a7e('0x13')],'server/files/plugins'));},'filename':function(_0x164d5b,_0x60a898,_0x5443e8){_0x60a898[_0x5a7e('0x14')]=_0x60a898[_0x5a7e('0x14')][_0x5a7e('0x15')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x5443e8(null,util[_0x5a7e('0x16')](_0x5a7e('0x17'),path['basename'](_0x60a898['originalname'],path[_0x5a7e('0x18')](_0x60a898[_0x5a7e('0x14')])),Date[_0x5a7e('0x19')](),path['extname'](_0x60a898[_0x5a7e('0x14')])));}})});router[_0x5a7e('0x1a')]('/',upload[_0x5a7e('0x1b')](_0x5a7e('0x1c')),controller['upload']);router[_0x5a7e('0x1a')](_0x5a7e('0xc'),controller['webhookPost']);router[_0x5a7e('0x1d')]('/:id',auth[_0x5a7e('0xa')](),controller[_0x5a7e('0x1e')]);router[_0x5a7e('0x1f')](_0x5a7e('0xe'),auth['isAuthenticated'](),controller[_0x5a7e('0x1f')]);module[_0x5a7e('0x20')]=router;
\ No newline at end of file
+var _0x5343=['util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./plugin.controller','get','isAuthenticated','/webhook','webhookGet','/:id/download','diskStorage','join','server/files/plugins','originalname','replace','format','%s-%s%s','extname','now','post','single','file','upload','webhookPost','put','/:id','update','exports'];(function(_0x198c4d,_0x551445){var _0x59d1e5=function(_0x36120d){while(--_0x36120d){_0x198c4d['push'](_0x198c4d['shift']());}};_0x59d1e5(++_0x551445);}(_0x5343,0x80));var _0x3534=function(_0x63df9a,_0x2ce102){_0x63df9a=_0x63df9a-0x0;var _0x266681=_0x5343[_0x63df9a];return _0x266681;};'use strict';var multer=require('multer');var util=require(_0x3534('0x0'));var path=require(_0x3534('0x1'));var timeout=require(_0x3534('0x2'));var express=require(_0x3534('0x3'));var router=express[_0x3534('0x4')]();var auth=require(_0x3534('0x5'));var interaction=require(_0x3534('0x6'));var config=require(_0x3534('0x7'));var controller=require(_0x3534('0x8'));router[_0x3534('0x9')]('/',auth[_0x3534('0xa')](),controller['index']);router[_0x3534('0x9')](_0x3534('0xb'),controller[_0x3534('0xc')]);router['get']('/:id',auth['isAuthenticated'](),controller['show']);router[_0x3534('0x9')](_0x3534('0xd'),auth[_0x3534('0xa')](),controller['download']);var upload=multer({'storage':multer[_0x3534('0xe')]({'destination':function(_0x3022d5,_0x441e71,_0x13d3bd){_0x13d3bd(null,path[_0x3534('0xf')](config['root'],_0x3534('0x10')));},'filename':function(_0x2b2d76,_0xabe182,_0x5b9775){_0xabe182[_0x3534('0x11')]=_0xabe182['originalname'][_0x3534('0x12')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x5b9775(null,util[_0x3534('0x13')](_0x3534('0x14'),path['basename'](_0xabe182[_0x3534('0x11')],path[_0x3534('0x15')](_0xabe182['originalname'])),Date[_0x3534('0x16')](),path[_0x3534('0x15')](_0xabe182['originalname'])));}})});router[_0x3534('0x17')]('/',upload[_0x3534('0x18')](_0x3534('0x19')),controller[_0x3534('0x1a')]);router[_0x3534('0x17')](_0x3534('0xb'),controller[_0x3534('0x1b')]);router[_0x3534('0x1c')](_0x3534('0x1d'),auth[_0x3534('0xa')](),controller[_0x3534('0x1e')]);router['delete'](_0x3534('0x1d'),auth['isAuthenticated'](),controller['delete']);module[_0x3534('0x1f')]=router;
\ No newline at end of file
index e6f45f4..e47053b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7b24=['agentOnly','never','always','sequelize','exports','STRING','ENUM','html','script','TEXT','The\x20physical\x20path\x20where\x20the\x20plugin\x20is\x20stored.','adminOnly'];(function(_0x137702,_0xab9a9e){var _0xfbe321=function(_0x34f896){while(--_0x34f896){_0x137702['push'](_0x137702['shift']());}};_0xfbe321(++_0xab9a9e);}(_0x7b24,0x183));var _0x47b2=function(_0x23d9a9,_0x55dda5){_0x23d9a9=_0x23d9a9-0x0;var _0x4788d2=_0x7b24[_0x23d9a9];return _0x4788d2;};'use strict';var Sequelize=require(_0x47b2('0x0'));module[_0x47b2('0x1')]={'name':{'type':Sequelize[_0x47b2('0x2')]},'type':{'type':Sequelize[_0x47b2('0x3')](_0x47b2('0x4'),_0x47b2('0x5'))},'description':{'type':Sequelize[_0x47b2('0x6')]},'version':{'type':Sequelize['TEXT']},'path':{'type':Sequelize[_0x47b2('0x2')],'comment':_0x47b2('0x7')},'active':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':'Indicates\x20whether\x20the\x20plugin\x20is\x20installed.\x20Updated\x20when\x20the\x20plugin\x20is\x20installed/uninstalled.'},'sidebar':{'type':Sequelize[_0x47b2('0x3')](_0x47b2('0x8'),_0x47b2('0x9'),'always',_0x47b2('0xa')),'defaultValue':_0x47b2('0xb'),'comment':'Indicates\x20whether\x20to\x20display\x20the\x20plugin\x20in\x20the\x20sidebar.'},'icon':{'type':Sequelize[_0x47b2('0x2')]},'adminUrl':{'type':Sequelize[_0x47b2('0x2')]},'agentUrl':{'type':Sequelize['STRING']},'scriptName':{'type':Sequelize[_0x47b2('0x2')]},'scriptPath':{'type':Sequelize[_0x47b2('0x2')]}};
\ No newline at end of file
+var _0xdffc=['TEXT','The\x20physical\x20path\x20where\x20the\x20plugin\x20is\x20stored.','BOOLEAN','adminOnly','agentOnly','always','Indicates\x20whether\x20to\x20display\x20the\x20plugin\x20in\x20the\x20sidebar.','sequelize','exports','STRING','ENUM','html','script'];(function(_0x58f4dc,_0xa41168){var _0xeac9c9=function(_0x4fa4ee){while(--_0x4fa4ee){_0x58f4dc['push'](_0x58f4dc['shift']());}};_0xeac9c9(++_0xa41168);}(_0xdffc,0x1a7));var _0xcdff=function(_0x24f8d9,_0x153dec){_0x24f8d9=_0x24f8d9-0x0;var _0x489f43=_0xdffc[_0x24f8d9];return _0x489f43;};'use strict';var Sequelize=require(_0xcdff('0x0'));module[_0xcdff('0x1')]={'name':{'type':Sequelize[_0xcdff('0x2')]},'type':{'type':Sequelize[_0xcdff('0x3')](_0xcdff('0x4'),_0xcdff('0x5'))},'description':{'type':Sequelize[_0xcdff('0x6')]},'version':{'type':Sequelize['TEXT']},'path':{'type':Sequelize[_0xcdff('0x2')],'comment':_0xcdff('0x7')},'active':{'type':Sequelize[_0xcdff('0x8')],'defaultValue':0x0,'comment':'Indicates\x20whether\x20the\x20plugin\x20is\x20installed.\x20Updated\x20when\x20the\x20plugin\x20is\x20installed/uninstalled.'},'sidebar':{'type':Sequelize[_0xcdff('0x3')](_0xcdff('0x9'),_0xcdff('0xa'),_0xcdff('0xb'),'never'),'defaultValue':_0xcdff('0xb'),'comment':_0xcdff('0xc')},'icon':{'type':Sequelize[_0xcdff('0x2')]},'adminUrl':{'type':Sequelize[_0xcdff('0x2')]},'agentUrl':{'type':Sequelize[_0xcdff('0x2')]},'scriptName':{'type':Sequelize[_0xcdff('0x2')]},'scriptPath':{'type':Sequelize[_0xcdff('0x2')]}};
\ No newline at end of file
index c376f95..b7f2e2a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6142=['save','update','then','destroy','get','Plugins','stack','name','send','index','Plugin','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','filter','where','type','key','VIRTUAL','field','merge','options','findAll','catch','show','includeAll','download','find','params','join','root','server/files/plugins','format','%s.zip','path','createWriteStream','warning','code','ENOENT','error','Error','Error\x20while\x20generating\x20the\x20zip\x20archive','Sequelize','pipe','glob','**/*','basename','node_modules/**/*','attachments/**/*','existsSync','Plugin\x20not\x20found','Error\x20while\x20downloading\x20the\x20plugin','unlinkSync','info','Download\x20completed','Temporary\x20file\x20removed','upload','filename','extname','file','Plugin\x20upload\x20filepath:\x20%s','Plugin\x20upload\x20destination:\x20%s','readdirSync','Invalid\x20plugin\x20structure','lstatSync','isFile','isDirectory','some','manifest.json','readFileSync','parse','undefined','Invalid\x20manifest:\x20name\x20missing','Invalid\x20manifest:\x20type\x20missing','version','Invalid\x20manifest:\x20version\x20not\x20specified','Invalid\x20manifest:\x20parameters\x20missing','html','parameters','views','admin','agent','Invalid\x20manifest:\x20no\x20view\x20specified','script','scriptName','Invalid\x20manifest:\x20script\x20name\x20missing','scriptPath','Invalid\x20manifest:\x20script\x20path\x20missing','description','sidebar','always','icon','Warning:\x20admin\x20view\x20not\x20specified','test','plugins','Warning:\x20agent\x20view\x20not\x20specified','create','body','role','userProfileId','user','UserProfileSection','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','Zip\x20archive\x20removed','delete','dirname','webhookGet','resolve','\x27PATH\x27\x20parameter\x20not\x20specified','\x27PORT\x27\x20parameter\x20not\x20specified','hostname','port','http://localhost:','encoding','method','%s%s','headers','content-length','statusCode','webhookPost','eml-format','rimraf','fast-json-patch','mustache','util','sox','ejs','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','extract-zip','archiver','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','redis','socket.io-emitter','./plugin.socket','register','sendStatus','status','end','json','count','offset','limit','set','apply','reject'];(function(_0xd457da,_0x5ec338){var _0x331922=function(_0x5dfd95){while(--_0x5dfd95){_0xd457da['push'](_0xd457da['shift']());}};_0x331922(++_0x5ec338);}(_0x6142,0x129));var _0x2614=function(_0x40b05d,_0x45d9ca){_0x40b05d=_0x40b05d-0x0;var _0x4f36cc=_0x6142[_0x40b05d];return _0x4f36cc;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x2614('0x0'));var rimraf=require(_0x2614('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x2614('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x2614('0x3'));var util=require(_0x2614('0x4'));var path=require('path');var sox=require(_0x2614('0x5'));var csv=require('to-csv');var ejs=require(_0x2614('0x6'));var fs=require('fs');var _=require('lodash');var squel=require(_0x2614('0x7'));var crypto=require(_0x2614('0x8'));var jsforce=require(_0x2614('0x9'));var deskjs=require(_0x2614('0xa'));var toCsv=require(_0x2614('0xb'));var querystring=require(_0x2614('0xc'));var Papa=require(_0x2614('0xd'));var authService=require(_0x2614('0xe'));var hardwareService=require(_0x2614('0xf'));var Redis=require('ioredis');var extract=require(_0x2614('0x10'));var rimraf=require(_0x2614('0x1'));var archiver=require(_0x2614('0x11'));var qs=require(_0x2614('0x12'));var logger=require(_0x2614('0x13'))('api');var utils=require(_0x2614('0x14'));var config=require(_0x2614('0x15'));var db=require(_0x2614('0x16'))['db'];config['redis']=_['defaults'](config[_0x2614('0x17')],{'host':'localhost','port':0x18eb});var socket=require(_0x2614('0x18'))(new Redis(config['redis']));require(_0x2614('0x19'))[_0x2614('0x1a')](socket);function respondWithStatusCode(_0x1a13f5,_0x26247b){_0x26247b=_0x26247b||0xcc;return function(_0x436133){if(_0x436133){return _0x1a13f5[_0x2614('0x1b')](_0x26247b);}return _0x1a13f5[_0x2614('0x1c')](_0x26247b)[_0x2614('0x1d')]();};}function respondWithResult(_0x5a0182,_0x168e1a){_0x168e1a=_0x168e1a||0xc8;return function(_0xddc979){if(_0xddc979){return _0x5a0182['status'](_0x168e1a)[_0x2614('0x1e')](_0xddc979);}};}function respondWithFilteredResult(_0x33179b,_0x23075f){return function(_0x630761){if(_0x630761){var _0x24e568=_0x630761[_0x2614('0x1f')],_0x3080ae=_0x23075f['offset'],_0x4d1149=_0x23075f[_0x2614('0x20')]+_0x23075f[_0x2614('0x21')],_0x5bb503;if(_0x4d1149>=_0x24e568){_0x4d1149=_0x24e568;_0x5bb503=0xc8;}else{_0x5bb503=0xce;}_0x33179b[_0x2614('0x1c')](_0x5bb503);return _0x33179b[_0x2614('0x22')]('Content-Range',_0x3080ae+'-'+_0x4d1149+'/'+_0x24e568)['json'](_0x630761);}return null;};}function patchUpdates(_0x41494b){return function(_0x733a43){try{jsonpatch[_0x2614('0x23')](_0x733a43,_0x41494b,!![]);}catch(_0x27f1f3){return BPromise[_0x2614('0x24')](_0x27f1f3);}return _0x733a43[_0x2614('0x25')]();};}function saveUpdates(_0x20c84a,_0x2c7937){return function(_0x443d77){if(_0x443d77){return _0x443d77[_0x2614('0x26')](_0x20c84a)[_0x2614('0x27')](function(_0x112094){return _0x112094;});}return null;};}function removeEntity(_0x2bea47,_0x5a9577){return function(_0x3c3957){if(_0x3c3957){return _0x3c3957[_0x2614('0x28')]()[_0x2614('0x27')](function(){var _0x3d490c=_0x3c3957[_0x2614('0x29')]({'plain':!![]});var _0x34929c=_0x2614('0x2a');return db['UserProfileResource']['destroy']({'where':{'type':_0x34929c,'resourceId':_0x3d490c['id']}})[_0x2614('0x27')](function(){return _0x3c3957;});})['then'](function(){_0x2bea47['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x272864,_0x4ea943){return function(_0x806610){if(!_0x806610){_0x272864[_0x2614('0x1b')](0x194);}return _0x806610;};}function handleError(_0x149227,_0x3e7d6c){_0x3e7d6c=_0x3e7d6c||0x1f4;return function(_0x2862d5){logger['error'](_0x2862d5[_0x2614('0x2b')]);if(_0x2862d5[_0x2614('0x2c')]){delete _0x2862d5[_0x2614('0x2c')];}_0x149227[_0x2614('0x1c')](_0x3e7d6c)[_0x2614('0x2d')](_0x2862d5);};}exports[_0x2614('0x2e')]=function(_0x2f2173,_0x55e4ed){var _0x482367={},_0x2a5615={},_0x25a9d9={'count':0x0,'rows':[]};var _0x1e2838=db[_0x2614('0x2f')][_0x2614('0x30')];_0x2a5615[_0x2614('0x31')]=_[_0x2614('0x32')](_0x1e2838);_0x2a5615[_0x2614('0x33')]=_[_0x2614('0x32')](_0x2f2173[_0x2614('0x33')]);_0x2a5615[_0x2614('0x34')]=_[_0x2614('0x35')](_0x2a5615[_0x2614('0x31')],_0x2a5615[_0x2614('0x33')]);_0x482367['attributes']=_[_0x2614('0x35')](_0x2a5615[_0x2614('0x31')],qs[_0x2614('0x36')](_0x2f2173['query'][_0x2614('0x36')]));_0x482367[_0x2614('0x37')]=_0x482367[_0x2614('0x37')][_0x2614('0x38')]?_0x482367[_0x2614('0x37')]:_0x2a5615[_0x2614('0x31')];if(!_0x2f2173[_0x2614('0x33')][_0x2614('0x39')](_0x2614('0x3a'))){_0x482367[_0x2614('0x21')]=qs[_0x2614('0x21')](_0x2f2173[_0x2614('0x33')]['limit']);_0x482367[_0x2614('0x20')]=qs[_0x2614('0x20')](_0x2f2173['query']['offset']);}_0x482367[_0x2614('0x3b')]=qs[_0x2614('0x3c')](_0x2f2173[_0x2614('0x33')]['sort']);_0x482367['where']=qs[_0x2614('0x34')](_['pick'](_0x2f2173[_0x2614('0x33')],_0x2a5615[_0x2614('0x34')]));if(_0x2f2173['query'][_0x2614('0x3d')]){_0x482367[_0x2614('0x3e')]=_['merge'](_0x482367[_0x2614('0x3e')],{'$or':_['map'](_0x1e2838,function(_0x5ba511){if(_0x5ba511[_0x2614('0x3f')][_0x2614('0x40')]!==_0x2614('0x41')){var _0x2abfb7={};_0x2abfb7[_0x5ba511[_0x2614('0x42')]]={'$like':'%'+_0x2f2173[_0x2614('0x33')][_0x2614('0x3d')]+'%'};return _0x2abfb7;}})});}_0x482367=_[_0x2614('0x43')]({},_0x482367,_0x2f2173[_0x2614('0x44')]);var _0x39e16c={'where':_0x482367['where']};return db['Plugin'][_0x2614('0x1f')](_0x39e16c)[_0x2614('0x27')](function(_0x1e6690){_0x25a9d9['count']=_0x1e6690;if(_0x2f2173['query']['includeAll']){_0x482367['include']=[{'all':!![]}];}return db[_0x2614('0x2f')][_0x2614('0x45')](_0x482367);})[_0x2614('0x27')](function(_0x566734){_0x25a9d9['rows']=_0x566734;return _0x25a9d9;})[_0x2614('0x27')](respondWithFilteredResult(_0x55e4ed,_0x482367))[_0x2614('0x46')](handleError(_0x55e4ed,null));};exports[_0x2614('0x47')]=function(_0x32034c,_0x591c3e){var _0x25a826={'raw':!![],'where':{'id':_0x32034c['params']['id']}},_0x34e7d3={};_0x34e7d3[_0x2614('0x31')]=_[_0x2614('0x32')](db['Plugin'][_0x2614('0x30')]);_0x34e7d3[_0x2614('0x33')]=_[_0x2614('0x32')](_0x32034c['query']);_0x34e7d3[_0x2614('0x34')]=_[_0x2614('0x35')](_0x34e7d3['model'],_0x34e7d3[_0x2614('0x33')]);_0x25a826[_0x2614('0x37')]=_[_0x2614('0x35')](_0x34e7d3[_0x2614('0x31')],qs[_0x2614('0x36')](_0x32034c[_0x2614('0x33')]['fields']));_0x25a826['attributes']=_0x25a826[_0x2614('0x37')]['length']?_0x25a826[_0x2614('0x37')]:_0x34e7d3['model'];if(_0x32034c['query'][_0x2614('0x48')]){_0x25a826['include']=[{'all':!![]}];}_0x25a826=_[_0x2614('0x43')]({},_0x25a826,_0x32034c[_0x2614('0x44')]);return db[_0x2614('0x2f')]['find'](_0x25a826)[_0x2614('0x27')](handleEntityNotFound(_0x591c3e,null))['then'](respondWithResult(_0x591c3e,null))[_0x2614('0x46')](handleError(_0x591c3e,null));};exports[_0x2614('0x49')]=function(_0x94c02d,_0x4310f5,_0x214594){return db['Plugin'][_0x2614('0x4a')]({'where':{'id':_0x94c02d[_0x2614('0x4b')]['id']},'attributes':[_0x2614('0x2c'),'path'],'raw':!![]})[_0x2614('0x27')](handleEntityNotFound(_0x4310f5,null))[_0x2614('0x27')](function(_0x437c93){if(_0x437c93){var _0x35deba=path[_0x2614('0x4c')](config[_0x2614('0x4d')],_0x2614('0x4e'),util[_0x2614('0x4f')](_0x2614('0x50'),path['basename'](_0x437c93[_0x2614('0x51')])));var _0x4d4ff1=fs[_0x2614('0x52')](_0x35deba);var _0xa0eb0f=archiver('zip',{'zlib':{'level':0x9}});_0xa0eb0f['on'](_0x2614('0x53'),function(_0x982ce6){if(_0x982ce6[_0x2614('0x54')]===_0x2614('0x55')){logger[_0x2614('0x56')](_0x982ce6);}else{throw new db['Sequelize'][(_0x2614('0x57'))](_0x2614('0x58'));}});_0xa0eb0f['on'](_0x2614('0x56'),function(_0x2fb7b9){throw new db[(_0x2614('0x59'))][(_0x2614('0x57'))](_0x2614('0x58'));});_0xa0eb0f[_0x2614('0x5a')](_0x4d4ff1);_0xa0eb0f[_0x2614('0x5b')](_0x2614('0x5c'),{'cwd':path[_0x2614('0x4c')](config[_0x2614('0x4d')],'server/files/plugins',path['dirname'](_0x437c93['path'])),'ignore':[path[_0x2614('0x4c')](path[_0x2614('0x5d')](_0x437c93[_0x2614('0x51')]),_0x2614('0x5e')),path[_0x2614('0x4c')](path[_0x2614('0x5d')](_0x437c93['path']),_0x2614('0x5f'))],'nodir':!![]})['finalize']();_0x4d4ff1['on']('close',function(){if(!fs[_0x2614('0x60')](_0x35deba)){throw new db['Sequelize'][(_0x2614('0x57'))](_0x2614('0x61'));}return _0x4310f5[_0x2614('0x49')](_0x35deba,util[_0x2614('0x4f')]('%s.zip',path[_0x2614('0x5d')](_0x437c93[_0x2614('0x51')])),function(_0x216932){if(_0x216932){throw new db[(_0x2614('0x59'))]['Error'](_0x2614('0x62'));}fs[_0x2614('0x63')](_0x35deba);logger[_0x2614('0x64')](_0x2614('0x65'));logger[_0x2614('0x64')](_0x2614('0x66'));});});}return null;})[_0x2614('0x46')](handleError(_0x4310f5,null));};exports[_0x2614('0x67')]=function(_0x515c36,_0x61c581,_0x8208ee){var _0x44211e=path[_0x2614('0x5d')](_0x515c36['file'][_0x2614('0x68')],path[_0x2614('0x69')](_0x515c36[_0x2614('0x6a')]['filename']));var _0x762218=path['join'](config['root'],_0x2614('0x4e'),_0x515c36[_0x2614('0x6a')][_0x2614('0x68')]);var _0x13bc71=path[_0x2614('0x4c')](config[_0x2614('0x4d')],_0x2614('0x4e'),_0x44211e);logger[_0x2614('0x64')](_0x2614('0x6b'),_0x762218);logger[_0x2614('0x64')](_0x2614('0x6c'),_0x13bc71);try{fs['chmodSync'](_0x762218,parseInt('0777',0x8));extract(_0x762218,{'dir':_0x13bc71},function(_0x12fc19){if(_0x12fc19){logger[_0x2614('0x56')](_0x12fc19);handleError(_0x12fc19,!![]);};var _0x3de2df=fs[_0x2614('0x6d')](_0x13bc71);if(_0x3de2df['length']>0x1){removeReferences(_0x762218,_0x13bc71);logger[_0x2614('0x56')]('Invalid\x20plugin\x20structure');return _0x8208ee(new Error(_0x2614('0x6e')));}var _0x4ea4aa=fs[_0x2614('0x6f')](path[_0x2614('0x4c')](_0x13bc71,_0x3de2df[0x0]));if(_0x4ea4aa[_0x2614('0x70')]()){removeReferences(_0x762218,_0x13bc71);logger[_0x2614('0x56')](_0x2614('0x6e'));return _0x8208ee(new Error(_0x2614('0x6e')));}if(_0x4ea4aa[_0x2614('0x71')]()){var _0x6e4607=fs[_0x2614('0x6d')](path[_0x2614('0x4c')](_0x13bc71,_0x3de2df[0x0]));if(_0x6e4607[_0x2614('0x38')]===0x0){removeReferences(_0x762218,_0x13bc71);logger[_0x2614('0x56')](_0x2614('0x6e'));return _0x8208ee(new Error(_0x2614('0x6e')));}var _0x2825f9=_0x6e4607[_0x2614('0x72')](function(_0x16469f){return _0x16469f===_0x2614('0x73');});if(!_0x2825f9){return _0x8208ee(new Error('Plugin\x20manifest\x20missing'));}var _0x50ed46=fs[_0x2614('0x74')](path['join'](_0x13bc71,_0x3de2df[0x0],_0x2614('0x73')));var _0xd17f3e=JSON[_0x2614('0x75')](_0x50ed46);if(_0x2614('0x76')==typeof _0xd17f3e[_0x2614('0x2c')]){return _0x8208ee(new Error(_0x2614('0x77')));}if('undefined'==typeof _0xd17f3e[_0x2614('0x3f')]){return _0x8208ee(new Error(_0x2614('0x78')));}if(_0x2614('0x76')==typeof _0xd17f3e[_0x2614('0x79')]){return _0x8208ee(new Error(_0x2614('0x7a')));}if('undefined'==typeof _0xd17f3e['parameters']){return _0x8208ee(new Error(_0x2614('0x7b')));}if(_0xd17f3e['type']===_0x2614('0x7c')){if('undefined'==typeof _0xd17f3e[_0x2614('0x7d')]['views']){return _0x8208ee(new Error('Invalid\x20manifest:\x20views\x20missing'));}if(_0x2614('0x76')==typeof _0xd17f3e[_0x2614('0x7d')][_0x2614('0x7e')][_0x2614('0x7f')]&&'undefined'==typeof _0xd17f3e['parameters'][_0x2614('0x7e')][_0x2614('0x80')]){return _0x8208ee(new Error(_0x2614('0x81')));}}else if(_0xd17f3e[_0x2614('0x3f')]===_0x2614('0x82')){if(_0x2614('0x76')==typeof _0xd17f3e[_0x2614('0x7d')][_0x2614('0x83')]){return _0x8208ee(new Error(_0x2614('0x84')));}if(_0x2614('0x76')==typeof _0xd17f3e[_0x2614('0x7d')][_0x2614('0x85')]){return _0x8208ee(new Error(_0x2614('0x86')));}}else{return _0x8208ee(new Error('Invalid\x20manifest:\x20invalid\x20type'));}var _0x5dcef0=_0xd17f3e[_0x2614('0x2c')];var _0x26428e=_0xd17f3e[_0x2614('0x87')];var _0x8ebd4a=_0xd17f3e['type'];var _0x1d7714=_0xd17f3e[_0x2614('0x88')]?_0xd17f3e['sidebar']:_0x2614('0x89');var _0x533003=_0xd17f3e['icon']?_0xd17f3e[_0x2614('0x8a')]:'icon-apps';var _0x526732='';var _0x506ab1='';var _0x53177d='';var _0x4baa21='';var _0x3e578f=_0xd17f3e[_0x2614('0x79')];if(_0x8ebd4a==='html'){if('undefined'!=typeof _0xd17f3e[_0x2614('0x7d')][_0x2614('0x7e')][_0x2614('0x7f')]){var _0xf618b0=_0xd17f3e[_0x2614('0x7d')]['views'][_0x2614('0x7f')];if(!/^(f|ht)tps?:\/\//i['test'](_0xf618b0)){_0x526732=path['join']('plugins',_0x44211e,_0x3de2df[0x0],_0xf618b0);}else{_0x526732=_0xf618b0;}}else{logger['info'](_0x2614('0x8b'));}if(_0x2614('0x76')!=typeof _0xd17f3e['parameters']['views'][_0x2614('0x80')]){var _0x5e4afa=_0xd17f3e['parameters'][_0x2614('0x7e')][_0x2614('0x80')];if(!/^(f|ht)tps?:\/\//i[_0x2614('0x8c')](_0x5e4afa)){_0x506ab1=path[_0x2614('0x4c')](_0x2614('0x8d'),_0x44211e,_0x3de2df[0x0],_0x5e4afa);}else{_0x506ab1=_0x5e4afa;}}else{logger['info'](_0x2614('0x8e'));}}else if(_0x8ebd4a===_0x2614('0x82')){_0x53177d=_0xd17f3e[_0x2614('0x7d')][_0x2614('0x83')];_0x4baa21=_0xd17f3e[_0x2614('0x7d')]['scriptPath'];if(_0x2614('0x76')!=typeof _0xd17f3e[_0x2614('0x7d')]['views']){if(_0x2614('0x76')!=typeof _0xd17f3e[_0x2614('0x7d')][_0x2614('0x7e')][_0x2614('0x7f')]){var _0xf618b0=_0xd17f3e[_0x2614('0x7d')][_0x2614('0x7e')][_0x2614('0x7f')];if(!/^(f|ht)tps?:\/\//i[_0x2614('0x8c')](_0xf618b0)){_0x526732=path[_0x2614('0x4c')](_0x2614('0x8d'),_0x44211e,_0x3de2df[0x0],_0xf618b0);}else{_0x526732=_0xf618b0;}}if(_0x2614('0x76')!=typeof _0xd17f3e[_0x2614('0x7d')]['views'][_0x2614('0x80')]){var _0x5e4afa=_0xd17f3e[_0x2614('0x7d')]['views']['agent'];if(!/^(f|ht)tps?:\/\//i[_0x2614('0x8c')](_0x5e4afa)){_0x506ab1=path['join'](_0x2614('0x8d'),_0x44211e,_0x3de2df[0x0],_0x5e4afa);}else{_0x506ab1=_0x5e4afa;}}}}var _0x2efaea={'name':_0x5dcef0,'description':_0x26428e,'path':path['join'](_0x44211e,_0x3de2df[0x0]),'type':_0x8ebd4a,'sidebar':_0x1d7714,'icon':_0x533003,'adminUrl':_0x526732,'agentUrl':_0x506ab1,'scriptName':_0x53177d,'scriptPath':_0x4baa21,'version':_0x3e578f};removeReferences(_0x762218,null);return db[_0x2614('0x2f')][_0x2614('0x8f')](_0x2efaea)[_0x2614('0x27')](function(_0x46cace){var _0x25f466={'role':_0x515c36[_0x2614('0x90')][_0x2614('0x91')],'userProfileId':_0x515c36[_0x2614('0x90')][_0x2614('0x92')]};if(!_0x25f466)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x25f466['role']===_0x2614('0x93')){var _0x5c6b84=_0x46cace[_0x2614('0x29')]({'plain':!![]});return db[_0x2614('0x94')][_0x2614('0x4a')]({'where':{'name':_0x2614('0x2a'),'userProfileId':_0x25f466['userProfileId']},'raw':!![]})[_0x2614('0x27')](function(_0x50efbe){if(_0x50efbe&&_0x50efbe['autoAssociation']===0x0){return db['UserProfileResource']['create']({'name':_0x5c6b84[_0x2614('0x2c')],'resourceId':_0x5c6b84['id'],'type':_0x50efbe['name'],'sectionId':_0x50efbe['id']},{})[_0x2614('0x27')](function(){return _0x46cace;});}else{return _0x46cace;}})['catch'](function(_0x4c9e73){logger['error'](_0x2614('0x95'),_0x4c9e73);throw _0x4c9e73;});}return _0x46cace;})[_0x2614('0x27')](respondWithResult(_0x61c581,null))['catch'](handleError(_0x61c581,null));}});}catch(_0x559023){_0x61c581[_0x2614('0x1c')](0x1f4)[_0x2614('0x2d')](_0x559023);}};function removeReferences(_0xb4dbe6,_0x342088){try{if(_0xb4dbe6){fs[_0x2614('0x63')](_0xb4dbe6);logger[_0x2614('0x64')](_0x2614('0x96'));}if(_0x342088){rimraf(_0x342088,function(){});logger[_0x2614('0x64')]('Extracted\x20folder\x20removed');}}catch(_0x3af599){logger[_0x2614('0x56')](_0x3af599);}}exports[_0x2614('0x26')]=function(_0x259912,_0x2581b0,_0x35579a){return db[_0x2614('0x2f')][_0x2614('0x4a')]({'where':{'id':_0x259912[_0x2614('0x4b')]['id']}})[_0x2614('0x27')](handleEntityNotFound(_0x2581b0,null))[_0x2614('0x27')](saveUpdates(_0x259912[_0x2614('0x90')],null))[_0x2614('0x27')](respondWithResult(_0x2581b0,null))[_0x2614('0x46')](handleError(_0x2581b0,null));};exports[_0x2614('0x97')]=function(_0x12a3e1,_0x3c31f2,_0x591377){return db[_0x2614('0x2f')][_0x2614('0x4a')]({'where':{'id':_0x12a3e1[_0x2614('0x4b')]['id']}})[_0x2614('0x27')](function(_0x5976de){if(_0x5976de){return _0x5976de['destroy']();}})['then'](function(_0x4f4882){rimraf(path['join'](config['root'],'server/files/plugins',path[_0x2614('0x98')](_0x4f4882[_0x2614('0x51')])),function(){});return _0x4f4882;})[_0x2614('0x27')](handleEntityNotFound(_0x3c31f2,null))[_0x2614('0x27')](respondWithStatusCode(_0x3c31f2,null))['catch'](handleError(_0x3c31f2,null));};exports[_0x2614('0x99')]=function(_0x1f1a92,_0x3b7be0,_0x6987dc){return BPromise[_0x2614('0x9a')]()['then'](function(){if(!_0x1f1a92[_0x2614('0x33')][_0x2614('0x51')]){throw new Error(_0x2614('0x9b'));}if(!_0x1f1a92[_0x2614('0x33')]['port']){throw new Error(_0x2614('0x9c'));}var _0x1918f4=_0x1f1a92[_0x2614('0x33')][_0x2614('0x9d')]?_0x1f1a92[_0x2614('0x33')]['hostname']+':'+_0x1f1a92[_0x2614('0x33')][_0x2614('0x9e')]:_0x2614('0x9f')+_0x1f1a92[_0x2614('0x33')][_0x2614('0x9e')];var _0x279e8b=_0x1f1a92['query'][_0x2614('0x1e')]?_0x1f1a92[_0x2614('0x33')]['json']:!![];var _0x2f83e1=_0x1f1a92[_0x2614('0x33')][_0x2614('0xa0')]?_0x1f1a92[_0x2614('0x33')][_0x2614('0xa0')]:null;var _0x475957={'method':_0x1f1a92[_0x2614('0xa1')],'uri':util['format'](_0x2614('0xa2'),_0x1918f4,_0x1f1a92[_0x2614('0x33')][_0x2614('0x51')]),'json':_0x279e8b,'resolveWithFullResponse':!![],'encoding':_0x2f83e1,'qs':_0x1f1a92[_0x2614('0x33')]};if(_0x1f1a92[_0x2614('0xa3')]){_0x475957[_0x2614('0xa3')]=_0x1f1a92[_0x2614('0xa3')];if(_0x475957[_0x2614('0xa3')]['content-length']){delete _0x475957[_0x2614('0xa3')][_0x2614('0xa4')];}}return rp(_0x475957);})[_0x2614('0x27')](function(_0x47683b){if(_0x47683b){_0x3b7be0[_0x2614('0x22')](_0x47683b[_0x2614('0xa3')]);logger['info'](_0x47683b['body']);if(_['endsWith'](_0x1f1a92['query'][_0x2614('0x51')],_0x2614('0x49'))&&_0x47683b[_0x2614('0xa5')]==0x1f4){return _0x3b7be0[_0x2614('0x1b')](_0x47683b[_0x2614('0xa5')]);}else{return _0x3b7be0[_0x2614('0x1c')](_0x47683b[_0x2614('0xa5')])[_0x2614('0x2d')](_0x47683b[_0x2614('0x90')]);}}else{return _0x3b7be0['sendStatus'](0xc8);}})[_0x2614('0x46')](handleError(_0x3b7be0,null));};exports[_0x2614('0xa6')]=function(_0x54a4ec,_0x34eeff,_0x3c937c){return BPromise[_0x2614('0x9a')]()['then'](function(){if(!_0x54a4ec[_0x2614('0x33')][_0x2614('0x51')]){throw new Error('\x27PATH\x27\x20parameter\x20not\x20specified');}if(!_0x54a4ec[_0x2614('0x33')]['port']){throw new Error(_0x2614('0x9c'));}var _0x42b51a=_0x54a4ec['query'][_0x2614('0x9d')]?_0x54a4ec[_0x2614('0x33')][_0x2614('0x9d')]+':'+_0x54a4ec['query']['port']:'http://localhost:'+_0x54a4ec[_0x2614('0x33')][_0x2614('0x9e')];var _0x43ac6e=_0x54a4ec[_0x2614('0x33')][_0x2614('0x1e')]?_0x54a4ec[_0x2614('0x33')][_0x2614('0x1e')]:!![];var _0x69a6c4=_0x54a4ec['query'][_0x2614('0xa0')]?_0x54a4ec[_0x2614('0x33')][_0x2614('0xa0')]:null;var _0x3978b4={'method':_0x54a4ec[_0x2614('0xa1')],'uri':util[_0x2614('0x4f')](_0x2614('0xa2'),_0x42b51a,_0x54a4ec[_0x2614('0x33')][_0x2614('0x51')]),'json':_0x43ac6e,'resolveWithFullResponse':!![],'encoding':_0x69a6c4,'body':_0x54a4ec[_0x2614('0x90')]};if(_0x54a4ec[_0x2614('0xa3')]){_0x3978b4['headers']=_0x54a4ec[_0x2614('0xa3')];if(_0x3978b4['headers']['content-length']){delete _0x3978b4[_0x2614('0xa3')]['content-length'];}}return rp(_0x3978b4);})['then'](function(_0x3a3bb){if(_0x3a3bb){_0x34eeff[_0x2614('0x22')](_0x3a3bb['headers']);logger[_0x2614('0x64')](_0x3a3bb[_0x2614('0x90')]);return _0x34eeff[_0x2614('0x1c')](_0x3a3bb['statusCode'])[_0x2614('0x2d')](_0x3a3bb['body']);}else{return _0x34eeff[_0x2614('0x1b')](0xc8);}})[_0x2614('0x46')](handleError(_0x34eeff,null));};
\ No newline at end of file
+var _0xdee9=['scriptPath','create','body','role','user','userProfileId','Zip\x20archive\x20removed','Extracted\x20folder\x20removed','resolve','port','hostname','http://localhost:','encoding','method','%s%s','headers','content-length','endsWith','statusCode','webhookPost','\x27PATH\x27\x20parameter\x20not\x20specified','\x27PORT\x27\x20parameter\x20not\x20specified','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','squel','jsforce','to-csv','querystring','papaparse','../../config/license/hardware','ioredis','extract-zip','archiver','../../components/parsers/qs','../../config/logger','api','../../config/utils','defaults','localhost','socket.io-emitter','redis','./plugin.socket','register','sendStatus','end','status','json','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','get','Plugins','UserProfileResource','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','sort','where','pick','merge','map','type','key','VIRTUAL','field','options','Plugin','count','includeAll','include','findAll','rows','catch','show','params','length','download','find','join','root','server/files/plugins','format','basename','createWriteStream','zip','ENOENT','error','Sequelize','Error','Error\x20while\x20generating\x20the\x20zip\x20archive','glob','**/*','dirname','node_modules/**/*','attachments/**/*','finalize','close','existsSync','Plugin\x20not\x20found','%s.zip','unlinkSync','info','Download\x20completed','Temporary\x20file\x20removed','upload','file','filename','extname','Plugin\x20upload\x20filepath:\x20%s','Plugin\x20upload\x20destination:\x20%s','0777','readdirSync','Invalid\x20plugin\x20structure','isFile','isDirectory','readFileSync','manifest.json','parse','Invalid\x20manifest:\x20name\x20missing','undefined','version','Invalid\x20manifest:\x20version\x20not\x20specified','parameters','Invalid\x20manifest:\x20parameters\x20missing','html','views','agent','script','scriptName','Invalid\x20manifest:\x20script\x20name\x20missing','Invalid\x20manifest:\x20script\x20path\x20missing','Invalid\x20manifest:\x20invalid\x20type','description','sidebar','always','icon','admin','test','plugins','Warning:\x20admin\x20view\x20not\x20specified','Warning:\x20agent\x20view\x20not\x20specified'];(function(_0x1dc4c4,_0xf7ede1){var _0x444f6b=function(_0x1730f9){while(--_0x1730f9){_0x1dc4c4['push'](_0x1dc4c4['shift']());}};_0x444f6b(++_0xf7ede1);}(_0xdee9,0x16c));var _0x9dee=function(_0x4e6ae6,_0x49dba6){_0x4e6ae6=_0x4e6ae6-0x0;var _0x23c108=_0xdee9[_0x4e6ae6];return _0x23c108;};'use strict';var pdf=require(_0x9dee('0x0'));var emlformat=require(_0x9dee('0x1'));var rimraf=require(_0x9dee('0x2'));var zipdir=require(_0x9dee('0x3'));var jsonpatch=require(_0x9dee('0x4'));var rp=require(_0x9dee('0x5'));var moment=require(_0x9dee('0x6'));var BPromise=require(_0x9dee('0x7'));var Mustache=require(_0x9dee('0x8'));var util=require(_0x9dee('0x9'));var path=require(_0x9dee('0xa'));var sox=require(_0x9dee('0xb'));var csv=require('to-csv');var ejs=require(_0x9dee('0xc'));var fs=require('fs');var _=require(_0x9dee('0xd'));var squel=require(_0x9dee('0xe'));var crypto=require('crypto');var jsforce=require(_0x9dee('0xf'));var deskjs=require('desk.js');var toCsv=require(_0x9dee('0x10'));var querystring=require(_0x9dee('0x11'));var Papa=require(_0x9dee('0x12'));var authService=require('../../components/auth/service');var hardwareService=require(_0x9dee('0x13'));var Redis=require(_0x9dee('0x14'));var extract=require(_0x9dee('0x15'));var rimraf=require(_0x9dee('0x2'));var archiver=require(_0x9dee('0x16'));var qs=require(_0x9dee('0x17'));var logger=require(_0x9dee('0x18'))(_0x9dee('0x19'));var utils=require(_0x9dee('0x1a'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config['redis']=_[_0x9dee('0x1b')](config['redis'],{'host':_0x9dee('0x1c'),'port':0x18eb});var socket=require(_0x9dee('0x1d'))(new Redis(config[_0x9dee('0x1e')]));require(_0x9dee('0x1f'))[_0x9dee('0x20')](socket);function respondWithStatusCode(_0x34be85,_0x3cdceb){_0x3cdceb=_0x3cdceb||0xcc;return function(_0x40d464){if(_0x40d464){return _0x34be85[_0x9dee('0x21')](_0x3cdceb);}return _0x34be85['status'](_0x3cdceb)[_0x9dee('0x22')]();};}function respondWithResult(_0x140cf0,_0xa90acc){_0xa90acc=_0xa90acc||0xc8;return function(_0x31f1a5){if(_0x31f1a5){return _0x140cf0[_0x9dee('0x23')](_0xa90acc)[_0x9dee('0x24')](_0x31f1a5);}};}function respondWithFilteredResult(_0x2fb399,_0x84b628){return function(_0x44b178){if(_0x44b178){var _0x1d8f0b=_0x44b178['count'],_0x2cc044=_0x84b628[_0x9dee('0x25')],_0x54a00f=_0x84b628['offset']+_0x84b628[_0x9dee('0x26')],_0x2ff6a4;if(_0x54a00f>=_0x1d8f0b){_0x54a00f=_0x1d8f0b;_0x2ff6a4=0xc8;}else{_0x2ff6a4=0xce;}_0x2fb399[_0x9dee('0x23')](_0x2ff6a4);return _0x2fb399[_0x9dee('0x27')](_0x9dee('0x28'),_0x2cc044+'-'+_0x54a00f+'/'+_0x1d8f0b)[_0x9dee('0x24')](_0x44b178);}return null;};}function patchUpdates(_0x8a8622){return function(_0x52cf7d){try{jsonpatch[_0x9dee('0x29')](_0x52cf7d,_0x8a8622,!![]);}catch(_0x194207){return BPromise[_0x9dee('0x2a')](_0x194207);}return _0x52cf7d[_0x9dee('0x2b')]();};}function saveUpdates(_0x25fa6d,_0x1ca543){return function(_0xfcd66b){if(_0xfcd66b){return _0xfcd66b[_0x9dee('0x2c')](_0x25fa6d)[_0x9dee('0x2d')](function(_0x358a94){return _0x358a94;});}return null;};}function removeEntity(_0xe7b7e0,_0x549191){return function(_0x3b2212){if(_0x3b2212){return _0x3b2212[_0x9dee('0x2e')]()['then'](function(){var _0xc2e9f8=_0x3b2212[_0x9dee('0x2f')]({'plain':!![]});var _0x48237f=_0x9dee('0x30');return db[_0x9dee('0x31')]['destroy']({'where':{'type':_0x48237f,'resourceId':_0xc2e9f8['id']}})[_0x9dee('0x2d')](function(){return _0x3b2212;});})[_0x9dee('0x2d')](function(){_0xe7b7e0['status'](0xcc)[_0x9dee('0x22')]();});}};}function handleEntityNotFound(_0x5b5b98,_0x3f46a2){return function(_0x4df3aa){if(!_0x4df3aa){_0x5b5b98[_0x9dee('0x21')](0x194);}return _0x4df3aa;};}function handleError(_0x3f0c16,_0xcf58ab){_0xcf58ab=_0xcf58ab||0x1f4;return function(_0x26c34d){logger['error'](_0x26c34d[_0x9dee('0x32')]);if(_0x26c34d[_0x9dee('0x33')]){delete _0x26c34d[_0x9dee('0x33')];}_0x3f0c16['status'](_0xcf58ab)[_0x9dee('0x34')](_0x26c34d);};}exports[_0x9dee('0x35')]=function(_0x259bbb,_0x4b2a82){var _0xf7751a={},_0x524809={},_0x407fac={'count':0x0,'rows':[]};var _0x3355b7=db['Plugin'][_0x9dee('0x36')];_0x524809[_0x9dee('0x37')]=_[_0x9dee('0x38')](_0x3355b7);_0x524809[_0x9dee('0x39')]=_['keys'](_0x259bbb[_0x9dee('0x39')]);_0x524809[_0x9dee('0x3a')]=_[_0x9dee('0x3b')](_0x524809[_0x9dee('0x37')],_0x524809[_0x9dee('0x39')]);_0xf7751a[_0x9dee('0x3c')]=_[_0x9dee('0x3b')](_0x524809[_0x9dee('0x37')],qs[_0x9dee('0x3d')](_0x259bbb[_0x9dee('0x39')]['fields']));_0xf7751a[_0x9dee('0x3c')]=_0xf7751a[_0x9dee('0x3c')]['length']?_0xf7751a[_0x9dee('0x3c')]:_0x524809[_0x9dee('0x37')];if(!_0x259bbb[_0x9dee('0x39')][_0x9dee('0x3e')](_0x9dee('0x3f'))){_0xf7751a[_0x9dee('0x26')]=qs[_0x9dee('0x26')](_0x259bbb[_0x9dee('0x39')][_0x9dee('0x26')]);_0xf7751a[_0x9dee('0x25')]=qs['offset'](_0x259bbb['query'][_0x9dee('0x25')]);}_0xf7751a['order']=qs[_0x9dee('0x40')](_0x259bbb['query']['sort']);_0xf7751a[_0x9dee('0x41')]=qs[_0x9dee('0x3a')](_[_0x9dee('0x42')](_0x259bbb[_0x9dee('0x39')],_0x524809['filters']));if(_0x259bbb[_0x9dee('0x39')]['filter']){_0xf7751a[_0x9dee('0x41')]=_[_0x9dee('0x43')](_0xf7751a['where'],{'$or':_[_0x9dee('0x44')](_0x3355b7,function(_0x37070d){if(_0x37070d[_0x9dee('0x45')][_0x9dee('0x46')]!==_0x9dee('0x47')){var _0x770bb7={};_0x770bb7[_0x37070d[_0x9dee('0x48')]]={'$like':'%'+_0x259bbb[_0x9dee('0x39')]['filter']+'%'};return _0x770bb7;}})});}_0xf7751a=_[_0x9dee('0x43')]({},_0xf7751a,_0x259bbb[_0x9dee('0x49')]);var _0x597bb2={'where':_0xf7751a[_0x9dee('0x41')]};return db[_0x9dee('0x4a')][_0x9dee('0x4b')](_0x597bb2)[_0x9dee('0x2d')](function(_0x594da1){_0x407fac[_0x9dee('0x4b')]=_0x594da1;if(_0x259bbb[_0x9dee('0x39')][_0x9dee('0x4c')]){_0xf7751a[_0x9dee('0x4d')]=[{'all':!![]}];}return db[_0x9dee('0x4a')][_0x9dee('0x4e')](_0xf7751a);})[_0x9dee('0x2d')](function(_0x562bb5){_0x407fac[_0x9dee('0x4f')]=_0x562bb5;return _0x407fac;})[_0x9dee('0x2d')](respondWithFilteredResult(_0x4b2a82,_0xf7751a))[_0x9dee('0x50')](handleError(_0x4b2a82,null));};exports[_0x9dee('0x51')]=function(_0x5f5e9d,_0xe15024){var _0x186484={'raw':!![],'where':{'id':_0x5f5e9d[_0x9dee('0x52')]['id']}},_0x5022c5={};_0x5022c5['model']=_['keys'](db['Plugin'][_0x9dee('0x36')]);_0x5022c5[_0x9dee('0x39')]=_[_0x9dee('0x38')](_0x5f5e9d[_0x9dee('0x39')]);_0x5022c5['filters']=_[_0x9dee('0x3b')](_0x5022c5['model'],_0x5022c5[_0x9dee('0x39')]);_0x186484[_0x9dee('0x3c')]=_[_0x9dee('0x3b')](_0x5022c5[_0x9dee('0x37')],qs['fields'](_0x5f5e9d[_0x9dee('0x39')][_0x9dee('0x3d')]));_0x186484['attributes']=_0x186484['attributes'][_0x9dee('0x53')]?_0x186484[_0x9dee('0x3c')]:_0x5022c5['model'];if(_0x5f5e9d[_0x9dee('0x39')][_0x9dee('0x4c')]){_0x186484[_0x9dee('0x4d')]=[{'all':!![]}];}_0x186484=_[_0x9dee('0x43')]({},_0x186484,_0x5f5e9d[_0x9dee('0x49')]);return db[_0x9dee('0x4a')]['find'](_0x186484)['then'](handleEntityNotFound(_0xe15024,null))[_0x9dee('0x2d')](respondWithResult(_0xe15024,null))['catch'](handleError(_0xe15024,null));};exports[_0x9dee('0x54')]=function(_0x41cebd,_0x28d8c2,_0x55dff4){return db[_0x9dee('0x4a')][_0x9dee('0x55')]({'where':{'id':_0x41cebd[_0x9dee('0x52')]['id']},'attributes':['name','path'],'raw':!![]})['then'](handleEntityNotFound(_0x28d8c2,null))[_0x9dee('0x2d')](function(_0x7df721){if(_0x7df721){var _0x3dfc7a=path[_0x9dee('0x56')](config[_0x9dee('0x57')],_0x9dee('0x58'),util[_0x9dee('0x59')]('%s.zip',path[_0x9dee('0x5a')](_0x7df721['path'])));var _0x5d208b=fs[_0x9dee('0x5b')](_0x3dfc7a);var _0xe55a51=archiver(_0x9dee('0x5c'),{'zlib':{'level':0x9}});_0xe55a51['on']('warning',function(_0x3df2e2){if(_0x3df2e2['code']===_0x9dee('0x5d')){logger[_0x9dee('0x5e')](_0x3df2e2);}else{throw new db[(_0x9dee('0x5f'))][(_0x9dee('0x60'))](_0x9dee('0x61'));}});_0xe55a51['on']('error',function(_0x454ae7){throw new db[(_0x9dee('0x5f'))][(_0x9dee('0x60'))](_0x9dee('0x61'));});_0xe55a51['pipe'](_0x5d208b);_0xe55a51[_0x9dee('0x62')](_0x9dee('0x63'),{'cwd':path[_0x9dee('0x56')](config['root'],'server/files/plugins',path[_0x9dee('0x64')](_0x7df721[_0x9dee('0xa')])),'ignore':[path['join'](path[_0x9dee('0x5a')](_0x7df721['path']),_0x9dee('0x65')),path['join'](path[_0x9dee('0x5a')](_0x7df721[_0x9dee('0xa')]),_0x9dee('0x66'))],'nodir':!![]})[_0x9dee('0x67')]();_0x5d208b['on'](_0x9dee('0x68'),function(){if(!fs[_0x9dee('0x69')](_0x3dfc7a)){throw new db[(_0x9dee('0x5f'))][(_0x9dee('0x60'))](_0x9dee('0x6a'));}return _0x28d8c2[_0x9dee('0x54')](_0x3dfc7a,util[_0x9dee('0x59')](_0x9dee('0x6b'),path[_0x9dee('0x5a')](_0x7df721[_0x9dee('0xa')])),function(_0x2a29e6){if(_0x2a29e6){throw new db[(_0x9dee('0x5f'))][(_0x9dee('0x60'))]('Error\x20while\x20downloading\x20the\x20plugin');}fs[_0x9dee('0x6c')](_0x3dfc7a);logger[_0x9dee('0x6d')](_0x9dee('0x6e'));logger[_0x9dee('0x6d')](_0x9dee('0x6f'));});});}return null;})[_0x9dee('0x50')](handleError(_0x28d8c2,null));};exports[_0x9dee('0x70')]=function(_0x197e70,_0x5d5cb6,_0x5b7f4f){var _0x50da94=path[_0x9dee('0x5a')](_0x197e70[_0x9dee('0x71')][_0x9dee('0x72')],path[_0x9dee('0x73')](_0x197e70[_0x9dee('0x71')]['filename']));var _0x1f95de=path[_0x9dee('0x56')](config[_0x9dee('0x57')],'server/files/plugins',_0x197e70[_0x9dee('0x71')][_0x9dee('0x72')]);var _0x38be57=path['join'](config[_0x9dee('0x57')],_0x9dee('0x58'),_0x50da94);logger[_0x9dee('0x6d')](_0x9dee('0x74'),_0x1f95de);logger[_0x9dee('0x6d')](_0x9dee('0x75'),_0x38be57);try{fs['chmodSync'](_0x1f95de,parseInt(_0x9dee('0x76'),0x8));extract(_0x1f95de,{'dir':_0x38be57},function(_0x263373){if(_0x263373){logger[_0x9dee('0x5e')](_0x263373);handleError(_0x263373,!![]);};var _0x8d10ec=fs[_0x9dee('0x77')](_0x38be57);if(_0x8d10ec[_0x9dee('0x53')]>0x1){removeReferences(_0x1f95de,_0x38be57);logger[_0x9dee('0x5e')](_0x9dee('0x78'));return _0x5b7f4f(new Error(_0x9dee('0x78')));}var _0x5c08eb=fs['lstatSync'](path[_0x9dee('0x56')](_0x38be57,_0x8d10ec[0x0]));if(_0x5c08eb[_0x9dee('0x79')]()){removeReferences(_0x1f95de,_0x38be57);logger[_0x9dee('0x5e')](_0x9dee('0x78'));return _0x5b7f4f(new Error(_0x9dee('0x78')));}if(_0x5c08eb[_0x9dee('0x7a')]()){var _0x4a851a=fs[_0x9dee('0x77')](path['join'](_0x38be57,_0x8d10ec[0x0]));if(_0x4a851a[_0x9dee('0x53')]===0x0){removeReferences(_0x1f95de,_0x38be57);logger[_0x9dee('0x5e')]('Invalid\x20plugin\x20structure');return _0x5b7f4f(new Error(_0x9dee('0x78')));}var _0x419a07=_0x4a851a['some'](function(_0x11f55f){return _0x11f55f==='manifest.json';});if(!_0x419a07){return _0x5b7f4f(new Error('Plugin\x20manifest\x20missing'));}var _0x2c4c7b=fs[_0x9dee('0x7b')](path[_0x9dee('0x56')](_0x38be57,_0x8d10ec[0x0],_0x9dee('0x7c')));var _0x31f9f0=JSON[_0x9dee('0x7d')](_0x2c4c7b);if('undefined'==typeof _0x31f9f0[_0x9dee('0x33')]){return _0x5b7f4f(new Error(_0x9dee('0x7e')));}if(_0x9dee('0x7f')==typeof _0x31f9f0[_0x9dee('0x45')]){return _0x5b7f4f(new Error('Invalid\x20manifest:\x20type\x20missing'));}if('undefined'==typeof _0x31f9f0[_0x9dee('0x80')]){return _0x5b7f4f(new Error(_0x9dee('0x81')));}if(_0x9dee('0x7f')==typeof _0x31f9f0[_0x9dee('0x82')]){return _0x5b7f4f(new Error(_0x9dee('0x83')));}if(_0x31f9f0[_0x9dee('0x45')]===_0x9dee('0x84')){if(_0x9dee('0x7f')==typeof _0x31f9f0['parameters'][_0x9dee('0x85')]){return _0x5b7f4f(new Error('Invalid\x20manifest:\x20views\x20missing'));}if(_0x9dee('0x7f')==typeof _0x31f9f0[_0x9dee('0x82')]['views']['admin']&&_0x9dee('0x7f')==typeof _0x31f9f0['parameters'][_0x9dee('0x85')][_0x9dee('0x86')]){return _0x5b7f4f(new Error('Invalid\x20manifest:\x20no\x20view\x20specified'));}}else if(_0x31f9f0['type']===_0x9dee('0x87')){if(_0x9dee('0x7f')==typeof _0x31f9f0[_0x9dee('0x82')][_0x9dee('0x88')]){return _0x5b7f4f(new Error(_0x9dee('0x89')));}if('undefined'==typeof _0x31f9f0[_0x9dee('0x82')]['scriptPath']){return _0x5b7f4f(new Error(_0x9dee('0x8a')));}}else{return _0x5b7f4f(new Error(_0x9dee('0x8b')));}var _0x264a04=_0x31f9f0[_0x9dee('0x33')];var _0x6f4255=_0x31f9f0[_0x9dee('0x8c')];var _0x146351=_0x31f9f0[_0x9dee('0x45')];var _0x36d137=_0x31f9f0[_0x9dee('0x8d')]?_0x31f9f0[_0x9dee('0x8d')]:_0x9dee('0x8e');var _0x287cdd=_0x31f9f0[_0x9dee('0x8f')]?_0x31f9f0[_0x9dee('0x8f')]:'icon-apps';var _0x3b4343='';var _0x194033='';var _0x2c9126='';var _0x1526ad='';var _0x420985=_0x31f9f0[_0x9dee('0x80')];if(_0x146351===_0x9dee('0x84')){if(_0x9dee('0x7f')!=typeof _0x31f9f0[_0x9dee('0x82')][_0x9dee('0x85')][_0x9dee('0x90')]){var _0x51b180=_0x31f9f0[_0x9dee('0x82')][_0x9dee('0x85')][_0x9dee('0x90')];if(!/^(f|ht)tps?:\/\//i[_0x9dee('0x91')](_0x51b180)){_0x3b4343=path[_0x9dee('0x56')](_0x9dee('0x92'),_0x50da94,_0x8d10ec[0x0],_0x51b180);}else{_0x3b4343=_0x51b180;}}else{logger[_0x9dee('0x6d')](_0x9dee('0x93'));}if(_0x9dee('0x7f')!=typeof _0x31f9f0['parameters'][_0x9dee('0x85')][_0x9dee('0x86')]){var _0x60b9cd=_0x31f9f0[_0x9dee('0x82')][_0x9dee('0x85')][_0x9dee('0x86')];if(!/^(f|ht)tps?:\/\//i[_0x9dee('0x91')](_0x60b9cd)){_0x194033=path['join'](_0x9dee('0x92'),_0x50da94,_0x8d10ec[0x0],_0x60b9cd);}else{_0x194033=_0x60b9cd;}}else{logger[_0x9dee('0x6d')](_0x9dee('0x94'));}}else if(_0x146351===_0x9dee('0x87')){_0x2c9126=_0x31f9f0[_0x9dee('0x82')][_0x9dee('0x88')];_0x1526ad=_0x31f9f0[_0x9dee('0x82')][_0x9dee('0x95')];if(_0x9dee('0x7f')!=typeof _0x31f9f0[_0x9dee('0x82')][_0x9dee('0x85')]){if(_0x9dee('0x7f')!=typeof _0x31f9f0[_0x9dee('0x82')]['views'][_0x9dee('0x90')]){var _0x51b180=_0x31f9f0['parameters'][_0x9dee('0x85')][_0x9dee('0x90')];if(!/^(f|ht)tps?:\/\//i['test'](_0x51b180)){_0x3b4343=path['join'](_0x9dee('0x92'),_0x50da94,_0x8d10ec[0x0],_0x51b180);}else{_0x3b4343=_0x51b180;}}if('undefined'!=typeof _0x31f9f0[_0x9dee('0x82')]['views']['agent']){var _0x60b9cd=_0x31f9f0[_0x9dee('0x82')][_0x9dee('0x85')]['agent'];if(!/^(f|ht)tps?:\/\//i[_0x9dee('0x91')](_0x60b9cd)){_0x194033=path['join'](_0x9dee('0x92'),_0x50da94,_0x8d10ec[0x0],_0x60b9cd);}else{_0x194033=_0x60b9cd;}}}}var _0x265eca={'name':_0x264a04,'description':_0x6f4255,'path':path['join'](_0x50da94,_0x8d10ec[0x0]),'type':_0x146351,'sidebar':_0x36d137,'icon':_0x287cdd,'adminUrl':_0x3b4343,'agentUrl':_0x194033,'scriptName':_0x2c9126,'scriptPath':_0x1526ad,'version':_0x420985};removeReferences(_0x1f95de,null);return db[_0x9dee('0x4a')][_0x9dee('0x96')](_0x265eca)[_0x9dee('0x2d')](function(_0x4e93ee){var _0x1518a1={'role':_0x197e70[_0x9dee('0x97')][_0x9dee('0x98')],'userProfileId':_0x197e70[_0x9dee('0x97')]['userProfileId']};if(!_0x1518a1)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x1518a1[_0x9dee('0x98')]===_0x9dee('0x99')){var _0x1bef13=_0x4e93ee['get']({'plain':!![]});return db['UserProfileSection'][_0x9dee('0x55')]({'where':{'name':_0x9dee('0x30'),'userProfileId':_0x1518a1[_0x9dee('0x9a')]},'raw':!![]})['then'](function(_0x3f67c2){if(_0x3f67c2&&_0x3f67c2['autoAssociation']===0x0){return db[_0x9dee('0x31')][_0x9dee('0x96')]({'name':_0x1bef13[_0x9dee('0x33')],'resourceId':_0x1bef13['id'],'type':_0x3f67c2[_0x9dee('0x33')],'sectionId':_0x3f67c2['id']},{})[_0x9dee('0x2d')](function(){return _0x4e93ee;});}else{return _0x4e93ee;}})[_0x9dee('0x50')](function(_0x41f107){logger[_0x9dee('0x5e')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x41f107);throw _0x41f107;});}return _0x4e93ee;})[_0x9dee('0x2d')](respondWithResult(_0x5d5cb6,null))['catch'](handleError(_0x5d5cb6,null));}});}catch(_0x274983){_0x5d5cb6[_0x9dee('0x23')](0x1f4)[_0x9dee('0x34')](_0x274983);}};function removeReferences(_0x42ef3c,_0x59d2de){try{if(_0x42ef3c){fs[_0x9dee('0x6c')](_0x42ef3c);logger[_0x9dee('0x6d')](_0x9dee('0x9b'));}if(_0x59d2de){rimraf(_0x59d2de,function(){});logger[_0x9dee('0x6d')](_0x9dee('0x9c'));}}catch(_0x1fb534){logger[_0x9dee('0x5e')](_0x1fb534);}}exports[_0x9dee('0x2c')]=function(_0x516718,_0x1487ca,_0x211650){return db[_0x9dee('0x4a')][_0x9dee('0x55')]({'where':{'id':_0x516718[_0x9dee('0x52')]['id']}})[_0x9dee('0x2d')](handleEntityNotFound(_0x1487ca,null))[_0x9dee('0x2d')](saveUpdates(_0x516718[_0x9dee('0x97')],null))[_0x9dee('0x2d')](respondWithResult(_0x1487ca,null))[_0x9dee('0x50')](handleError(_0x1487ca,null));};exports['delete']=function(_0x4b03ec,_0x545fd3,_0x41fe41){return db[_0x9dee('0x4a')]['find']({'where':{'id':_0x4b03ec[_0x9dee('0x52')]['id']}})['then'](function(_0x40f85b){if(_0x40f85b){return _0x40f85b[_0x9dee('0x2e')]();}})[_0x9dee('0x2d')](function(_0x403d30){rimraf(path[_0x9dee('0x56')](config[_0x9dee('0x57')],_0x9dee('0x58'),path[_0x9dee('0x64')](_0x403d30[_0x9dee('0xa')])),function(){});return _0x403d30;})[_0x9dee('0x2d')](handleEntityNotFound(_0x545fd3,null))[_0x9dee('0x2d')](respondWithStatusCode(_0x545fd3,null))[_0x9dee('0x50')](handleError(_0x545fd3,null));};exports['webhookGet']=function(_0x5c7f1a,_0x557ee8,_0x1de2b6){return BPromise[_0x9dee('0x9d')]()[_0x9dee('0x2d')](function(){if(!_0x5c7f1a[_0x9dee('0x39')][_0x9dee('0xa')]){throw new Error('\x27PATH\x27\x20parameter\x20not\x20specified');}if(!_0x5c7f1a[_0x9dee('0x39')][_0x9dee('0x9e')]){throw new Error('\x27PORT\x27\x20parameter\x20not\x20specified');}var _0x41eaeb=_0x5c7f1a[_0x9dee('0x39')]['hostname']?_0x5c7f1a['query'][_0x9dee('0x9f')]+':'+_0x5c7f1a[_0x9dee('0x39')]['port']:_0x9dee('0xa0')+_0x5c7f1a['query']['port'];var _0x4843c9=_0x5c7f1a[_0x9dee('0x39')][_0x9dee('0x24')]?_0x5c7f1a['query'][_0x9dee('0x24')]:!![];var _0x46f163=_0x5c7f1a['query'][_0x9dee('0xa1')]?_0x5c7f1a[_0x9dee('0x39')][_0x9dee('0xa1')]:null;var _0x42cf7d={'method':_0x5c7f1a[_0x9dee('0xa2')],'uri':util[_0x9dee('0x59')](_0x9dee('0xa3'),_0x41eaeb,_0x5c7f1a[_0x9dee('0x39')][_0x9dee('0xa')]),'json':_0x4843c9,'resolveWithFullResponse':!![],'encoding':_0x46f163,'qs':_0x5c7f1a[_0x9dee('0x39')]};if(_0x5c7f1a[_0x9dee('0xa4')]){_0x42cf7d[_0x9dee('0xa4')]=_0x5c7f1a[_0x9dee('0xa4')];if(_0x42cf7d['headers'][_0x9dee('0xa5')]){delete _0x42cf7d[_0x9dee('0xa4')][_0x9dee('0xa5')];}}return rp(_0x42cf7d);})[_0x9dee('0x2d')](function(_0x1d9e62){if(_0x1d9e62){_0x557ee8[_0x9dee('0x27')](_0x1d9e62['headers']);logger[_0x9dee('0x6d')](_0x1d9e62[_0x9dee('0x97')]);if(_[_0x9dee('0xa6')](_0x5c7f1a[_0x9dee('0x39')][_0x9dee('0xa')],_0x9dee('0x54'))&&_0x1d9e62['statusCode']==0x1f4){return _0x557ee8[_0x9dee('0x21')](_0x1d9e62[_0x9dee('0xa7')]);}else{return _0x557ee8[_0x9dee('0x23')](_0x1d9e62[_0x9dee('0xa7')])[_0x9dee('0x34')](_0x1d9e62[_0x9dee('0x97')]);}}else{return _0x557ee8[_0x9dee('0x21')](0xc8);}})[_0x9dee('0x50')](handleError(_0x557ee8,null));};exports[_0x9dee('0xa8')]=function(_0x24e3d3,_0x9a1769,_0x4a03e2){return BPromise[_0x9dee('0x9d')]()[_0x9dee('0x2d')](function(){if(!_0x24e3d3[_0x9dee('0x39')][_0x9dee('0xa')]){throw new Error(_0x9dee('0xa9'));}if(!_0x24e3d3['query'][_0x9dee('0x9e')]){throw new Error(_0x9dee('0xaa'));}var _0x563ac4=_0x24e3d3['query'][_0x9dee('0x9f')]?_0x24e3d3[_0x9dee('0x39')]['hostname']+':'+_0x24e3d3[_0x9dee('0x39')][_0x9dee('0x9e')]:'http://localhost:'+_0x24e3d3[_0x9dee('0x39')][_0x9dee('0x9e')];var _0x5b0b1e=_0x24e3d3['query'][_0x9dee('0x24')]?_0x24e3d3['query'][_0x9dee('0x24')]:!![];var _0x1e37ec=_0x24e3d3['query']['encoding']?_0x24e3d3[_0x9dee('0x39')]['encoding']:null;var _0x1214f1={'method':_0x24e3d3['method'],'uri':util[_0x9dee('0x59')](_0x9dee('0xa3'),_0x563ac4,_0x24e3d3[_0x9dee('0x39')][_0x9dee('0xa')]),'json':_0x5b0b1e,'resolveWithFullResponse':!![],'encoding':_0x1e37ec,'body':_0x24e3d3[_0x9dee('0x97')]};if(_0x24e3d3[_0x9dee('0xa4')]){_0x1214f1['headers']=_0x24e3d3[_0x9dee('0xa4')];if(_0x1214f1[_0x9dee('0xa4')]['content-length']){delete _0x1214f1[_0x9dee('0xa4')][_0x9dee('0xa5')];}}return rp(_0x1214f1);})['then'](function(_0x25b156){if(_0x25b156){_0x9a1769[_0x9dee('0x27')](_0x25b156[_0x9dee('0xa4')]);logger['info'](_0x25b156['body']);return _0x9a1769[_0x9dee('0x23')](_0x25b156[_0x9dee('0xa7')])[_0x9dee('0x34')](_0x25b156[_0x9dee('0x97')]);}else{return _0x9a1769[_0x9dee('0x21')](0xc8);}})[_0x9dee('0x50')](handleError(_0x9a1769,null));};
\ No newline at end of file
index a85cd2e..49b42e8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['Plugin','save','update','emit','hasOwnProperty','exports','events','../../mysqldb'];(function(_0x45c4e5,_0x4e39c6){var _0x1aa845=function(_0x14f42e){while(--_0x14f42e){_0x45c4e5['push'](_0x45c4e5['shift']());}};_0x1aa845(++_0x4e39c6);}(_0x7a54,0x106));var _0x47a5=function(_0x51f084,_0x2b1e79){_0x51f084=_0x51f084-0x0;var _0x5262e5=_0x7a54[_0x51f084];return _0x5262e5;};'use strict';var EventEmitter=require(_0x47a5('0x0'));var Plugin=require(_0x47a5('0x1'))['db'][_0x47a5('0x2')];var PluginEvents=new EventEmitter();PluginEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x47a5('0x3'),'afterUpdate':_0x47a5('0x4'),'afterDestroy':'remove'};function emitEvent(_0x5f7f12){return function(_0x11bf85,_0x2a1a7e,_0x3717e1){PluginEvents[_0x47a5('0x5')](_0x5f7f12+':'+_0x11bf85['id'],_0x11bf85);PluginEvents['emit'](_0x5f7f12,_0x11bf85);_0x3717e1(null);};}for(var e in events){if(events[_0x47a5('0x6')](e)){var event=events[e];Plugin['hook'](e,emitEvent(event));}}module[_0x47a5('0x7')]=PluginEvents;
\ No newline at end of file
+var _0xb10b=['hasOwnProperty','hook','events','Plugin','setMaxListeners','save','remove','emit'];(function(_0x44aa5d,_0x252f17){var _0x71d814=function(_0x245ae7){while(--_0x245ae7){_0x44aa5d['push'](_0x44aa5d['shift']());}};_0x71d814(++_0x252f17);}(_0xb10b,0x12a));var _0xbb10=function(_0x460358,_0x354877){_0x460358=_0x460358-0x0;var _0xdfdfa8=_0xb10b[_0x460358];return _0xdfdfa8;};'use strict';var EventEmitter=require(_0xbb10('0x0'));var Plugin=require('../../mysqldb')['db'][_0xbb10('0x1')];var PluginEvents=new EventEmitter();PluginEvents[_0xbb10('0x2')](0x0);var events={'afterCreate':_0xbb10('0x3'),'afterUpdate':'update','afterDestroy':_0xbb10('0x4')};function emitEvent(_0x9bbed){return function(_0x460981,_0x22320e,_0x49baf4){PluginEvents[_0xbb10('0x5')](_0x9bbed+':'+_0x460981['id'],_0x460981);PluginEvents['emit'](_0x9bbed,_0x460981);_0x49baf4(null);};}for(var e in events){if(events[_0xbb10('0x6')](e)){var event=events[e];Plugin[_0xbb10('0x7')](e,emitEvent(event));}}module['exports']=PluginEvents;
\ No newline at end of file
index a3cd390..cc01a88 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x124b=['plugins','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./plugin.attributes','exports','define','Plugin'];(function(_0x3068d8,_0x70edfa){var _0x349d06=function(_0x55d445){while(--_0x55d445){_0x3068d8['push'](_0x3068d8['shift']());}};_0x349d06(++_0x70edfa);}(_0x124b,0x121));var _0xb124=function(_0xa763f0,_0x9690a7){_0xa763f0=_0xa763f0-0x0;var _0x2e89a3=_0x124b[_0xa763f0];return _0x2e89a3;};'use strict';var _=require(_0xb124('0x0'));var util=require(_0xb124('0x1'));var logger=require(_0xb124('0x2'))(_0xb124('0x3'));var moment=require(_0xb124('0x4'));var BPromise=require(_0xb124('0x5'));var rp=require(_0xb124('0x6'));var attributes=require(_0xb124('0x7'));module[_0xb124('0x8')]=function(_0x2024d0,_0x515456){return _0x2024d0[_0xb124('0x9')](_0xb124('0xa'),attributes,{'tableName':_0xb124('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x33f2=['util','../../config/logger','request-promise','exports','define','Plugin','plugins','lodash'];(function(_0x3485f8,_0x1b66cf){var _0x1fbba7=function(_0x135b73){while(--_0x135b73){_0x3485f8['push'](_0x3485f8['shift']());}};_0x1fbba7(++_0x1b66cf);}(_0x33f2,0x117));var _0x233f=function(_0x2dbcef,_0x1cfecb){_0x2dbcef=_0x2dbcef-0x0;var _0x5a90ea=_0x33f2[_0x2dbcef];return _0x5a90ea;};'use strict';var _=require(_0x233f('0x0'));var util=require(_0x233f('0x1'));var logger=require(_0x233f('0x2'))('api');var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x233f('0x3'));var attributes=require('./plugin.attributes');module[_0x233f('0x4')]=function(_0x59cd43,_0x39bf51){return _0x59cd43[_0x233f('0x5')](_0x233f('0x6'),attributes,{'tableName':_0x233f('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index fb9d7f1..447e2b7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d31=['info','result','catch','CreatePlugin','body','options','raw','debug','util','moment','bluebird','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','defaults','redis','localhost','socket.io-emitter','./plugin.socket','Plugin,\x20%s,\x20%s','request\x20sent','stringify','error','message'];(function(_0x18b2ce,_0x591981){var _0x436702=function(_0x5b6f63){while(--_0x5b6f63){_0x18b2ce['push'](_0x18b2ce['shift']());}};_0x436702(++_0x591981);}(_0x8d31,0x1d3));var _0x18d3=function(_0x1b6fdf,_0x186d1d){_0x1b6fdf=_0x1b6fdf-0x0;var _0xadde65=_0x8d31[_0x1b6fdf];return _0xadde65;};'use strict';var _=require('lodash');var util=require(_0x18d3('0x0'));var moment=require(_0x18d3('0x1'));var BPromise=require(_0x18d3('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0x18d3('0x3'))['db'];var utils=require(_0x18d3('0x4'));var logger=require(_0x18d3('0x5'))(_0x18d3('0x6'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x18d3('0x7')][_0x18d3('0x8')]({'port':0x232a});config['redis']=_[_0x18d3('0x9')](config[_0x18d3('0xa')],{'host':_0x18d3('0xb'),'port':0x18eb});var socket=require(_0x18d3('0xc'))(new Redis(config['redis']));require(_0x18d3('0xd'))['register'](socket);function respondWithRpcPromise(_0x583605,_0x21959d,_0x3b3424){return new BPromise(function(_0x56e218,_0xd80de1){return client['request'](_0x583605,_0x3b3424)['then'](function(_0x3edd30){logger['info'](_0x18d3('0xe'),_0x21959d,_0x18d3('0xf'));logger['debug']('Plugin,\x20%s,\x20%s,\x20%s',_0x21959d,_0x18d3('0xf'),JSON[_0x18d3('0x10')](_0x3edd30));if(_0x3edd30[_0x18d3('0x11')]){if(_0x3edd30[_0x18d3('0x11')]['code']===0x1f4){logger[_0x18d3('0x11')](_0x18d3('0xe'),_0x21959d,_0x3edd30[_0x18d3('0x11')][_0x18d3('0x12')]);return _0xd80de1(_0x3edd30[_0x18d3('0x11')][_0x18d3('0x12')]);}logger[_0x18d3('0x11')]('Plugin,\x20%s,\x20%s',_0x21959d,_0x3edd30[_0x18d3('0x11')][_0x18d3('0x12')]);return _0x56e218(_0x3edd30['error'][_0x18d3('0x12')]);}else{logger[_0x18d3('0x13')](_0x18d3('0xe'),_0x21959d,_0x18d3('0xf'));_0x56e218(_0x3edd30[_0x18d3('0x14')]['message']);}})[_0x18d3('0x15')](function(_0x2b833a){logger[_0x18d3('0x11')](_0x18d3('0xe'),_0x21959d,_0x2b833a);_0xd80de1(_0x2b833a);});});}exports[_0x18d3('0x16')]=function(_0x17d877){var _0x42983a=this;return new Promise(function(_0x2889a0,_0x2dfe62){return db['Plugin']['create'](_0x17d877[_0x18d3('0x17')],{'raw':_0x17d877[_0x18d3('0x18')]?_0x17d877[_0x18d3('0x18')][_0x18d3('0x19')]===undefined?!![]:![]:!![]})['then'](function(_0x392207){logger['info'](_0x18d3('0x16'),_0x17d877);logger[_0x18d3('0x1a')](_0x18d3('0x16'),_0x17d877,JSON[_0x18d3('0x10')](_0x392207));_0x2889a0(_0x392207);})[_0x18d3('0x15')](function(_0x2c465c){logger[_0x18d3('0x11')](_0x18d3('0x16'),_0x2c465c[_0x18d3('0x12')],_0x17d877);_0x2dfe62(_0x42983a[_0x18d3('0x11')](0x1f4,_0x2c465c[_0x18d3('0x12')]));});});};
\ No newline at end of file
+var _0x5801=['Plugin,\x20%s,\x20%s,\x20%s','stringify','error','code','Plugin,\x20%s,\x20%s','message','info','result','catch','CreatePlugin','Plugin','create','body','options','util','moment','bluebird','ioredis','../../mysqldb','../../config/logger','../../config/environment','jayson/promise','client','http','defaults','redis','localhost','socket.io-emitter','./plugin.socket','register','then','request\x20sent','debug'];(function(_0x1ae95d,_0x14fe88){var _0x3ac62d=function(_0x3955d0){while(--_0x3955d0){_0x1ae95d['push'](_0x1ae95d['shift']());}};_0x3ac62d(++_0x14fe88);}(_0x5801,0x158));var _0x1580=function(_0x30e9d2,_0xb8a634){_0x30e9d2=_0x30e9d2-0x0;var _0x9be41f=_0x5801[_0x30e9d2];return _0x9be41f;};'use strict';var _=require('lodash');var util=require(_0x1580('0x0'));var moment=require(_0x1580('0x1'));var BPromise=require(_0x1580('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x1580('0x3'));var db=require(_0x1580('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x1580('0x5'))('rpc');var config=require(_0x1580('0x6'));var jayson=require(_0x1580('0x7'));var client=jayson[_0x1580('0x8')][_0x1580('0x9')]({'port':0x232a});config['redis']=_[_0x1580('0xa')](config[_0x1580('0xb')],{'host':_0x1580('0xc'),'port':0x18eb});var socket=require(_0x1580('0xd'))(new Redis(config[_0x1580('0xb')]));require(_0x1580('0xe'))[_0x1580('0xf')](socket);function respondWithRpcPromise(_0x4b8643,_0x366cd9,_0x3f0347){return new BPromise(function(_0x273015,_0x370f29){return client['request'](_0x4b8643,_0x3f0347)[_0x1580('0x10')](function(_0x96da91){logger['info']('Plugin,\x20%s,\x20%s',_0x366cd9,_0x1580('0x11'));logger[_0x1580('0x12')](_0x1580('0x13'),_0x366cd9,_0x1580('0x11'),JSON[_0x1580('0x14')](_0x96da91));if(_0x96da91[_0x1580('0x15')]){if(_0x96da91[_0x1580('0x15')][_0x1580('0x16')]===0x1f4){logger[_0x1580('0x15')](_0x1580('0x17'),_0x366cd9,_0x96da91[_0x1580('0x15')][_0x1580('0x18')]);return _0x370f29(_0x96da91[_0x1580('0x15')]['message']);}logger[_0x1580('0x15')](_0x1580('0x17'),_0x366cd9,_0x96da91[_0x1580('0x15')]['message']);return _0x273015(_0x96da91['error'][_0x1580('0x18')]);}else{logger[_0x1580('0x19')]('Plugin,\x20%s,\x20%s',_0x366cd9,_0x1580('0x11'));_0x273015(_0x96da91[_0x1580('0x1a')][_0x1580('0x18')]);}})[_0x1580('0x1b')](function(_0x221ef7){logger['error']('Plugin,\x20%s,\x20%s',_0x366cd9,_0x221ef7);_0x370f29(_0x221ef7);});});}exports[_0x1580('0x1c')]=function(_0x12c2bf){var _0x436e45=this;return new Promise(function(_0x15d1e0,_0x583114){return db[_0x1580('0x1d')][_0x1580('0x1e')](_0x12c2bf[_0x1580('0x1f')],{'raw':_0x12c2bf[_0x1580('0x20')]?_0x12c2bf[_0x1580('0x20')]['raw']===undefined?!![]:![]:!![]})[_0x1580('0x10')](function(_0x315dcf){logger[_0x1580('0x19')](_0x1580('0x1c'),_0x12c2bf);logger[_0x1580('0x12')](_0x1580('0x1c'),_0x12c2bf,JSON[_0x1580('0x14')](_0x315dcf));_0x15d1e0(_0x315dcf);})[_0x1580('0x1b')](function(_0x579fa9){logger[_0x1580('0x15')](_0x1580('0x1c'),_0x579fa9[_0x1580('0x18')],_0x12c2bf);_0x583114(_0x436e45[_0x1580('0x15')](0x1f4,_0x579fa9[_0x1580('0x18')]));});});};
\ No newline at end of file
index c813d0a..75597e2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3295=['removeListener','register','length','./plugin.events','save','update','emit'];(function(_0x26dd64,_0x53993b){var _0x432211=function(_0x1db1c1){while(--_0x1db1c1){_0x26dd64['push'](_0x26dd64['shift']());}};_0x432211(++_0x53993b);}(_0x3295,0x114));var _0x5329=function(_0x5e6cb8,_0x16cf56){_0x5e6cb8=_0x5e6cb8-0x0;var _0x3faeb3=_0x3295[_0x5e6cb8];return _0x3faeb3;};'use strict';var PluginEvents=require(_0x5329('0x0'));var events=[_0x5329('0x1'),'remove',_0x5329('0x2')];function createListener(_0x5432cf,_0xcf278c){return function(_0x2809f1){_0xcf278c[_0x5329('0x3')](_0x5432cf,_0x2809f1);};}function removeListener(_0x447c71,_0x19d794){return function(){PluginEvents[_0x5329('0x4')](_0x447c71,_0x19d794);};}exports[_0x5329('0x5')]=function(_0x1ce150){for(var _0x3e9454=0x0,_0x38ba0e=events[_0x5329('0x6')];_0x3e9454<_0x38ba0e;_0x3e9454++){var _0x1fc23a=events[_0x3e9454];var _0x193a18=createListener('plugin:'+_0x1fc23a,_0x1ce150);PluginEvents['on'](_0x1fc23a,_0x193a18);}};
\ No newline at end of file
+var _0x935b=['emit','removeListener','register','length','plugin:','./plugin.events','save','remove'];(function(_0x519756,_0x288785){var _0x37047e=function(_0x3d64a7){while(--_0x3d64a7){_0x519756['push'](_0x519756['shift']());}};_0x37047e(++_0x288785);}(_0x935b,0x125));var _0xb935=function(_0x229829,_0x402296){_0x229829=_0x229829-0x0;var _0x40a2e5=_0x935b[_0x229829];return _0x40a2e5;};'use strict';var PluginEvents=require(_0xb935('0x0'));var events=[_0xb935('0x1'),_0xb935('0x2'),'update'];function createListener(_0x1bb77b,_0x139baa){return function(_0x4ed8db){_0x139baa[_0xb935('0x3')](_0x1bb77b,_0x4ed8db);};}function removeListener(_0xb23a1e,_0x5ed168){return function(){PluginEvents[_0xb935('0x4')](_0xb23a1e,_0x5ed168);};}exports[_0xb935('0x5')]=function(_0x3b7d33){for(var _0x2bfaf2=0x0,_0x1bb8f9=events[_0xb935('0x6')];_0x2bfaf2<_0x1bb8f9;_0x2bfaf2++){var _0x40627f=events[_0x2bfaf2];var _0x20ce02=createListener(_0xb935('0x7')+_0x40627f,_0x3b7d33);PluginEvents['on'](_0x40627f,_0x20ce02);}};
\ No newline at end of file
index 5ad81fd..3552c3a 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(_0x48b369,_0x540d7b){var _0x3e1226=function(_0x26f707){while(--_0x26f707){_0x48b369['push'](_0x48b369['shift']());}};_0x3e1226(++_0x540d7b);}(_0xa9e0,0x123));var _0x0a9e=function(_0x521929,_0x479be5){_0x521929=_0x521929-0x0;var _0x632436=_0xa9e0[_0x521929];return _0x632436;};'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(_0x34b6aa,_0x5ddd29){var _0x3ead29=function(_0x53979c){while(--_0x53979c){_0x34b6aa['push'](_0x34b6aa['shift']());}};_0x3ead29(++_0x5ddd29);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2b4411,_0x2625ed){_0x2b4411=_0x2b4411-0x0;var _0x8e41ef=_0xa9e0[_0x2b4411];return _0x8e41ef;};'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 f0b853d..9394548 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b24=['child_process','exec','bluebird','sendStatus','status','json','error','stack','name','npm\x20install','info','index','list','then','express','motion2','length','show','describe','params','body','script','join','../../files/plugins','cwd','chdir','dirname','start','catch','send','update','hasOwnProperty','destroy','delete','dump','Unknown\x20id','../../config/pm2','../../config/logger','path'];(function(_0x42bc91,_0x41f40a){var _0x3f5507=function(_0x20cfaf){while(--_0x20cfaf){_0x42bc91['push'](_0x42bc91['shift']());}};_0x3f5507(++_0x41f40a);}(_0x2b24,0x72));var _0x42b2=function(_0x3c84ea,_0x5e7acc){_0x3c84ea=_0x3c84ea-0x0;var _0x4808a4=_0x2b24[_0x3c84ea];return _0x4808a4;};'use strict';var _=require('lodash');var pm2=require(_0x42b2('0x0'));var logger=require(_0x42b2('0x1'))('api');var path=require(_0x42b2('0x2'));var exec=require(_0x42b2('0x3'))[_0x42b2('0x4')];var BPromise=require(_0x42b2('0x5'));function handleEntityNotFound(_0x5592d2,_0x460294){return function(_0x1f137e){if(!_0x1f137e){_0x5592d2[_0x42b2('0x6')](0x194);;}return _0x1f137e;};}function respondWithResult(_0x57fd0d,_0x1c45a6){_0x1c45a6=_0x1c45a6||0xc8;return function(_0xc4cfd2){if(_0xc4cfd2){return _0x57fd0d[_0x42b2('0x7')](_0x1c45a6)[_0x42b2('0x8')](_0xc4cfd2);}return null;};}function handleError(_0x30f7a7,_0x4de1e8){_0x4de1e8=_0x4de1e8||0x1f4;return function(_0x251639){logger[_0x42b2('0x9')](_0x251639[_0x42b2('0xa')]);if(_0x251639[_0x42b2('0xb')]){delete _0x251639[_0x42b2('0xb')];}_0x30f7a7[_0x42b2('0x7')](_0x4de1e8)['send'](_0x251639);};}function execChildProcess(){return new BPromise(function(_0x4ca172,_0x4573cc){exec(_0x42b2('0xc'),function(_0x4410e2,_0x51f1e1,_0x3c3bfb){logger[_0x42b2('0xd')](_0x51f1e1);logger[_0x42b2('0xd')](_0x3c3bfb);if(_0x4410e2){logger['error'](_0x4410e2);return _0x4573cc(_0x4410e2);}return _0x4ca172(_0x51f1e1);});});}exports[_0x42b2('0xe')]=function(_0x39e8d1,_0x1b2877){return pm2[_0x42b2('0xf')]()[_0x42b2('0x10')](function(_0x18fbda){if(_0x18fbda){var _0x260480=_['reject'](_0x18fbda,function(_0x4c4ce9){return _0x4c4ce9[_0x42b2('0xb')]===_0x42b2('0x11')||_0x4c4ce9[_0x42b2('0xb')]===_0x42b2('0x12');});return{'rows':_0x260480,'count':_0x260480[_0x42b2('0x13')]};}return null;})[_0x42b2('0x10')](respondWithResult(_0x1b2877,null))['catch'](handleError(_0x1b2877,null));};exports[_0x42b2('0x14')]=function(_0x1d4b41,_0x194103){return pm2[_0x42b2('0x15')](_0x1d4b41[_0x42b2('0x16')]['id'])[_0x42b2('0x10')](respondWithResult(_0x194103,null))[_0x42b2('0x10')](handleEntityNotFound(_0x194103,null))['catch'](handleError(_0x194103,null));};exports['create']=function(_0x48e965,_0x201c41){if(_0x48e965[_0x42b2('0x17')]['name']&&_0x48e965['body'][_0x42b2('0x18')]){var _0xb26ab3=path[_0x42b2('0x19')](__dirname,_0x42b2('0x1a'),_0x48e965[_0x42b2('0x17')][_0x42b2('0x18')]);var _0x2988de=process[_0x42b2('0x1b')]();process[_0x42b2('0x1c')](path[_0x42b2('0x1d')](_0xb26ab3));return execChildProcess()[_0x42b2('0x10')](function(_0x16337e){process['chdir'](_0x2988de);return pm2[_0x42b2('0x1e')]({'name':_0x48e965[_0x42b2('0x17')][_0x42b2('0xb')],'script':_0xb26ab3});})[_0x42b2('0x10')](function(_0x1c09b3){pm2['dump']();return _0x1c09b3[0x0];})[_0x42b2('0x10')](respondWithResult(_0x201c41,0xc9))[_0x42b2('0x1f')](handleError(_0x201c41,null));}else{return _0x201c41[_0x42b2('0x7')](0x1f4)[_0x42b2('0x20')]({'message':'Missing\x20name\x20and/or\x20path'});}};exports[_0x42b2('0x21')]=function(_0x264431,_0x3f1a1c){if(_0x264431[_0x42b2('0x17')]['id']){delete _0x264431['body']['id'];}var _0x566ebd={'online':'restart','stopped':'stop'};if(_0x566ebd[_0x42b2('0x22')](_0x264431[_0x42b2('0x17')][_0x42b2('0x7')])){return pm2[_0x566ebd[_0x264431[_0x42b2('0x17')][_0x42b2('0x7')]]](_0x264431['params']['id'])['then'](respondWithResult(_0x3f1a1c,0xc8))[_0x42b2('0x1f')](handleError(_0x3f1a1c,null));}else{return _0x3f1a1c['status'](0x1f4)[_0x42b2('0x20')]({'message':'Unknown\x20status'});}};exports[_0x42b2('0x23')]=function(_0x570bf8,_0x3e9c12){if(_0x570bf8[_0x42b2('0x17')]['id']){delete _0x570bf8[_0x42b2('0x17')]['id'];}if(_0x570bf8[_0x42b2('0x16')]['id']){return pm2[_0x42b2('0x24')](_0x570bf8['params']['id'])['then'](function(_0x1ae516){pm2[_0x42b2('0x25')]();return _0x1ae516[0x0];})['then'](respondWithResult(_0x3e9c12,null))[_0x42b2('0x1f')](handleError(_0x3e9c12,null));}else{return _0x3e9c12[_0x42b2('0x7')](0x1f4)[_0x42b2('0x20')]({'message':_0x42b2('0x26')});}};
\ No newline at end of file
+var _0x79a3=['sendStatus','error','stack','name','info','list','then','reject','express','length','catch','show','params','create','script','join','../../files/plugins','body','cwd','dirname','chdir','start','dump','send','update','stop','status','Unknown\x20status','Unknown\x20id','lodash','../../config/logger','api','child_process'];(function(_0x3a321d,_0x5d53b0){var _0x488eb5=function(_0x5e5342){while(--_0x5e5342){_0x3a321d['push'](_0x3a321d['shift']());}};_0x488eb5(++_0x5d53b0);}(_0x79a3,0x80));var _0x379a=function(_0x5bf42a,_0x3f6a6a){_0x5bf42a=_0x5bf42a-0x0;var _0x54c88e=_0x79a3[_0x5bf42a];return _0x54c88e;};'use strict';var _=require(_0x379a('0x0'));var pm2=require('../../config/pm2');var logger=require(_0x379a('0x1'))(_0x379a('0x2'));var path=require('path');var exec=require(_0x379a('0x3'))['exec'];var BPromise=require('bluebird');function handleEntityNotFound(_0x4c456f,_0x187d55){return function(_0x24dda6){if(!_0x24dda6){_0x4c456f[_0x379a('0x4')](0x194);;}return _0x24dda6;};}function respondWithResult(_0x14907a,_0x9e6da6){_0x9e6da6=_0x9e6da6||0xc8;return function(_0x4eacbe){if(_0x4eacbe){return _0x14907a['status'](_0x9e6da6)['json'](_0x4eacbe);}return null;};}function handleError(_0x23e684,_0x11d27d){_0x11d27d=_0x11d27d||0x1f4;return function(_0x2f0c65){logger[_0x379a('0x5')](_0x2f0c65[_0x379a('0x6')]);if(_0x2f0c65[_0x379a('0x7')]){delete _0x2f0c65[_0x379a('0x7')];}_0x23e684['status'](_0x11d27d)['send'](_0x2f0c65);};}function execChildProcess(){return new BPromise(function(_0x1f163a,_0x539147){exec('npm\x20install',function(_0x6b51ec,_0x359af3,_0x306d34){logger[_0x379a('0x8')](_0x359af3);logger['info'](_0x306d34);if(_0x6b51ec){logger['error'](_0x6b51ec);return _0x539147(_0x6b51ec);}return _0x1f163a(_0x359af3);});});}exports['index']=function(_0xcdcc65,_0x2b6ec6){return pm2[_0x379a('0x9')]()[_0x379a('0xa')](function(_0x561cbf){if(_0x561cbf){var _0x55a38d=_[_0x379a('0xb')](_0x561cbf,function(_0x1c04ea){return _0x1c04ea[_0x379a('0x7')]===_0x379a('0xc')||_0x1c04ea['name']==='motion2';});return{'rows':_0x55a38d,'count':_0x55a38d[_0x379a('0xd')]};}return null;})['then'](respondWithResult(_0x2b6ec6,null))[_0x379a('0xe')](handleError(_0x2b6ec6,null));};exports[_0x379a('0xf')]=function(_0x1c217d,_0x5828dc){return pm2['describe'](_0x1c217d[_0x379a('0x10')]['id'])[_0x379a('0xa')](respondWithResult(_0x5828dc,null))['then'](handleEntityNotFound(_0x5828dc,null))[_0x379a('0xe')](handleError(_0x5828dc,null));};exports[_0x379a('0x11')]=function(_0x51d67c,_0x56ab01){if(_0x51d67c['body'][_0x379a('0x7')]&&_0x51d67c['body'][_0x379a('0x12')]){var _0x1cdebe=path[_0x379a('0x13')](__dirname,_0x379a('0x14'),_0x51d67c[_0x379a('0x15')][_0x379a('0x12')]);var _0x1d3f0f=process[_0x379a('0x16')]();process['chdir'](path[_0x379a('0x17')](_0x1cdebe));return execChildProcess()[_0x379a('0xa')](function(_0x28aedc){process[_0x379a('0x18')](_0x1d3f0f);return pm2[_0x379a('0x19')]({'name':_0x51d67c[_0x379a('0x15')][_0x379a('0x7')],'script':_0x1cdebe});})['then'](function(_0x285c34){pm2[_0x379a('0x1a')]();return _0x285c34[0x0];})[_0x379a('0xa')](respondWithResult(_0x56ab01,0xc9))['catch'](handleError(_0x56ab01,null));}else{return _0x56ab01['status'](0x1f4)[_0x379a('0x1b')]({'message':'Missing\x20name\x20and/or\x20path'});}};exports[_0x379a('0x1c')]=function(_0xc1fc5a,_0x47a528){if(_0xc1fc5a[_0x379a('0x15')]['id']){delete _0xc1fc5a[_0x379a('0x15')]['id'];}var _0x19f945={'online':'restart','stopped':_0x379a('0x1d')};if(_0x19f945['hasOwnProperty'](_0xc1fc5a[_0x379a('0x15')][_0x379a('0x1e')])){return pm2[_0x19f945[_0xc1fc5a[_0x379a('0x15')][_0x379a('0x1e')]]](_0xc1fc5a['params']['id'])[_0x379a('0xa')](respondWithResult(_0x47a528,0xc8))[_0x379a('0xe')](handleError(_0x47a528,null));}else{return _0x47a528[_0x379a('0x1e')](0x1f4)[_0x379a('0x1b')]({'message':_0x379a('0x1f')});}};exports['destroy']=function(_0x23a45b,_0x37f538){if(_0x23a45b[_0x379a('0x15')]['id']){delete _0x23a45b[_0x379a('0x15')]['id'];}if(_0x23a45b[_0x379a('0x10')]['id']){return pm2['delete'](_0x23a45b[_0x379a('0x10')]['id'])[_0x379a('0xa')](function(_0x85c61e){pm2[_0x379a('0x1a')]();return _0x85c61e[0x0];})[_0x379a('0xa')](respondWithResult(_0x37f538,null))[_0x379a('0xe')](handleError(_0x37f538,null));}else{return _0x37f538['status'](0x1f4)['send']({'message':_0x379a('0x20')});}};
\ No newline at end of file
index 2c6019e..7ca84ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdf55=['connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','multer','util'];(function(_0x49caac,_0x21a342){var _0xa36f30=function(_0xffc7b8){while(--_0xffc7b8){_0x49caac['push'](_0x49caac['shift']());}};_0xa36f30(++_0x21a342);}(_0xdf55,0x83));var _0x5df5=function(_0x49ca18,_0x5e6d05){_0x49ca18=_0x49ca18-0x0;var _0x145d54=_0xdf55[_0x49ca18];return _0x145d54;};'use strict';var multer=require(_0x5df5('0x0'));var util=require(_0x5df5('0x1'));var path=require('path');var timeout=require(_0x5df5('0x2'));var express=require(_0x5df5('0x3'));var router=express['Router']();var auth=require(_0x5df5('0x4'));var interaction=require(_0x5df5('0x5'));var config=require(_0x5df5('0x6'));module['exports']=router;
\ No newline at end of file
+var _0x6dc0=['path','express','Router','../../components/auth/service','../../components/interaction/service','exports','multer','util'];(function(_0x104b64,_0x2df36b){var _0x3306c2=function(_0x198ed3){while(--_0x198ed3){_0x104b64['push'](_0x104b64['shift']());}};_0x3306c2(++_0x2df36b);}(_0x6dc0,0xb6));var _0x06dc=function(_0x15cf5c,_0xedf729){_0x15cf5c=_0x15cf5c-0x0;var _0x1655cf=_0x6dc0[_0x15cf5c];return _0x1655cf;};'use strict';var multer=require(_0x06dc('0x0'));var util=require(_0x06dc('0x1'));var path=require(_0x06dc('0x2'));var timeout=require('connect-timeout');var express=require(_0x06dc('0x3'));var router=express[_0x06dc('0x4')]();var auth=require(_0x06dc('0x5'));var interaction=require(_0x06dc('0x6'));var config=require('../../config/environment');module[_0x06dc('0x7')]=router;
\ No newline at end of file
index 6049b63..10111ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x450d=['exports','INTEGER','STRING','DATE','sequelize'];(function(_0x49c68e,_0x1c1673){var _0x33032b=function(_0x42ac31){while(--_0x42ac31){_0x49c68e['push'](_0x49c68e['shift']());}};_0x33032b(++_0x1c1673);}(_0x450d,0x15d));var _0xd450=function(_0x50aa2e,_0xfbd6f0){_0x50aa2e=_0x50aa2e-0x0;var _0x5e07f0=_0x450d[_0x50aa2e];return _0x5e07f0;};'use strict';var Sequelize=require(_0xd450('0x0'));module[_0xd450('0x1')]={'state':{'type':Sequelize[_0xd450('0x2')](0x2)},'statedesc':{'type':Sequelize[_0xd450('0x3')]},'scheduledat':{'type':Sequelize[_0xd450('0x4')]},'uniqueid':{'type':Sequelize['STRING']},'starttime':{'type':Sequelize[_0xd450('0x4')]},'responsetime':{'type':Sequelize[_0xd450('0x4')]},'ringtime':{'type':Sequelize[_0xd450('0x2')],'defaultValue':0x0},'campaign':{'type':Sequelize[_0xd450('0x3')]},'campaigntype':{'type':Sequelize[_0xd450('0x3')]},'membername':{'type':Sequelize[_0xd450('0x3')]}};
\ No newline at end of file
+var _0x0b7c=['STRING','DATE','sequelize','exports','INTEGER'];(function(_0x15d6f0,_0x28ebb0){var _0x5d32cd=function(_0x469bb1){while(--_0x469bb1){_0x15d6f0['push'](_0x15d6f0['shift']());}};_0x5d32cd(++_0x28ebb0);}(_0x0b7c,0x1ec));var _0xc0b7=function(_0x513254,_0x1305ca){_0x513254=_0x513254-0x0;var _0x384c92=_0x0b7c[_0x513254];return _0x384c92;};'use strict';var Sequelize=require(_0xc0b7('0x0'));module[_0xc0b7('0x1')]={'state':{'type':Sequelize[_0xc0b7('0x2')](0x2)},'statedesc':{'type':Sequelize[_0xc0b7('0x3')]},'scheduledat':{'type':Sequelize[_0xc0b7('0x4')]},'uniqueid':{'type':Sequelize[_0xc0b7('0x3')]},'starttime':{'type':Sequelize[_0xc0b7('0x4')]},'responsetime':{'type':Sequelize[_0xc0b7('0x4')]},'ringtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'campaign':{'type':Sequelize[_0xc0b7('0x3')]},'campaigntype':{'type':Sequelize['STRING']},'membername':{'type':Sequelize['STRING']}};
\ No newline at end of file
index dffc3f6..e87fd39 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xda19=['bluebird','request-promise','./reportAgentPreview.attributes','exports','lodash','util','moment'];(function(_0x21f843,_0x6e15b3){var _0x1ee7da=function(_0x2e9507){while(--_0x2e9507){_0x21f843['push'](_0x21f843['shift']());}};_0x1ee7da(++_0x6e15b3);}(_0xda19,0xe4));var _0x9da1=function(_0x39c7ff,_0x398afb){_0x39c7ff=_0x39c7ff-0x0;var _0x5813b9=_0xda19[_0x39c7ff];return _0x5813b9;};'use strict';var _=require(_0x9da1('0x0'));var util=require(_0x9da1('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x9da1('0x2'));var BPromise=require(_0x9da1('0x3'));var rp=require(_0x9da1('0x4'));var attributes=require(_0x9da1('0x5'));module[_0x9da1('0x6')]=function(_0x5176a9,_0x4c5f26){return _0x5176a9['define']('ReportAgentPreview',attributes,{'tableName':'report_agent_preview','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x3fde=['api','moment','request-promise','exports','ReportAgentPreview','../../config/logger'];(function(_0x1036ae,_0x3ca488){var _0x41ff5b=function(_0x338274){while(--_0x338274){_0x1036ae['push'](_0x1036ae['shift']());}};_0x41ff5b(++_0x3ca488);}(_0x3fde,0xdd));var _0xe3fd=function(_0x19950b,_0x53d0d7){_0x19950b=_0x19950b-0x0;var _0x3c6b41=_0x3fde[_0x19950b];return _0x3c6b41;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xe3fd('0x0'))(_0xe3fd('0x1'));var moment=require(_0xe3fd('0x2'));var BPromise=require('bluebird');var rp=require(_0xe3fd('0x3'));var attributes=require('./reportAgentPreview.attributes');module[_0xe3fd('0x4')]=function(_0x409763,_0x27da3a){return _0x409763['define'](_0xe3fd('0x5'),attributes,{'tableName':'report_agent_preview','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index aab701e..630c525 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9fa1=['ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','http','request','then','info','ReportAgentPreview,\x20%s,\x20%s','request\x20sent','debug','ReportAgentPreview,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','ReportAgentPreview','create','body','options','CreateReportAgentPreview','stringify','util','moment','bluebird','randomstring'];(function(_0x234f22,_0xa78829){var _0x47cda6=function(_0x338c84){while(--_0x338c84){_0x234f22['push'](_0x234f22['shift']());}};_0x47cda6(++_0xa78829);}(_0x9fa1,0x1e9));var _0x19fa=function(_0x49d41c,_0x2bdc35){_0x49d41c=_0x49d41c-0x0;var _0xb64c5f=_0x9fa1[_0x49d41c];return _0xb64c5f;};'use strict';var _=require('lodash');var util=require(_0x19fa('0x0'));var moment=require(_0x19fa('0x1'));var BPromise=require(_0x19fa('0x2'));var rs=require(_0x19fa('0x3'));var fs=require('fs');var Redis=require(_0x19fa('0x4'));var db=require(_0x19fa('0x5'))['db'];var utils=require(_0x19fa('0x6'));var logger=require(_0x19fa('0x7'))(_0x19fa('0x8'));var config=require('../../config/environment');var jayson=require(_0x19fa('0x9'));var client=jayson['client'][_0x19fa('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x258e88,_0x3d804d,_0x5beace){return new BPromise(function(_0x5148ff,_0xa26e2a){return client[_0x19fa('0xb')](_0x258e88,_0x5beace)[_0x19fa('0xc')](function(_0x4fc5eb){logger[_0x19fa('0xd')](_0x19fa('0xe'),_0x3d804d,_0x19fa('0xf'));logger[_0x19fa('0x10')](_0x19fa('0x11'),_0x3d804d,_0x19fa('0xf'),JSON['stringify'](_0x4fc5eb));if(_0x4fc5eb['error']){if(_0x4fc5eb[_0x19fa('0x12')][_0x19fa('0x13')]===0x1f4){logger[_0x19fa('0x12')](_0x19fa('0xe'),_0x3d804d,_0x4fc5eb['error'][_0x19fa('0x14')]);return _0xa26e2a(_0x4fc5eb[_0x19fa('0x12')]['message']);}logger[_0x19fa('0x12')](_0x19fa('0xe'),_0x3d804d,_0x4fc5eb['error']['message']);return _0x5148ff(_0x4fc5eb[_0x19fa('0x12')][_0x19fa('0x14')]);}else{logger[_0x19fa('0xd')](_0x19fa('0xe'),_0x3d804d,_0x19fa('0xf'));_0x5148ff(_0x4fc5eb[_0x19fa('0x15')]['message']);}})[_0x19fa('0x16')](function(_0x59f50a){logger[_0x19fa('0x12')]('ReportAgentPreview,\x20%s,\x20%s',_0x3d804d,_0x59f50a);_0xa26e2a(_0x59f50a);});});}exports['CreateReportAgentPreview']=function(_0x3aed27){var _0x32186a=this;return new Promise(function(_0x760a27,_0x3ab4c1){return db[_0x19fa('0x17')][_0x19fa('0x18')](_0x3aed27[_0x19fa('0x19')],{'raw':_0x3aed27[_0x19fa('0x1a')]?_0x3aed27[_0x19fa('0x1a')]['raw']===undefined?!![]:![]:!![]})[_0x19fa('0xc')](function(_0x2991a6){logger[_0x19fa('0xd')](_0x19fa('0x1b'),_0x3aed27);logger['debug']('CreateReportAgentPreview',_0x3aed27,JSON[_0x19fa('0x1c')](_0x2991a6));_0x760a27(_0x2991a6);})[_0x19fa('0x16')](function(_0x12cbfd){logger[_0x19fa('0x12')](_0x19fa('0x1b'),_0x12cbfd[_0x19fa('0x14')],_0x3aed27);_0x3ab4c1(_0x32186a[_0x19fa('0x12')](0x1f4,_0x12cbfd[_0x19fa('0x14')]));});});};
\ No newline at end of file
+var _0x9a6b=['request','then','info','ReportAgentPreview,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','CreateReportAgentPreview','create','options','util','moment','bluebird','ioredis','../../config/utils','rpc','../../config/environment','jayson/promise','client','http'];(function(_0xb358eb,_0x1c49c8){var _0x486599=function(_0x4c5c32){while(--_0x4c5c32){_0xb358eb['push'](_0xb358eb['shift']());}};_0x486599(++_0x1c49c8);}(_0x9a6b,0x1b8));var _0xb9a6=function(_0x43785d,_0x4ed005){_0x43785d=_0x43785d-0x0;var _0x9acbf5=_0x9a6b[_0x43785d];return _0x9acbf5;};'use strict';var _=require('lodash');var util=require(_0xb9a6('0x0'));var moment=require(_0xb9a6('0x1'));var BPromise=require(_0xb9a6('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xb9a6('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xb9a6('0x4'));var logger=require('../../config/logger')(_0xb9a6('0x5'));var config=require(_0xb9a6('0x6'));var jayson=require(_0xb9a6('0x7'));var client=jayson[_0xb9a6('0x8')][_0xb9a6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x36e4f2,_0x34c702,_0x27c2a1){return new BPromise(function(_0x40e63c,_0x314543){return client[_0xb9a6('0xa')](_0x36e4f2,_0x27c2a1)[_0xb9a6('0xb')](function(_0x1c406a){logger[_0xb9a6('0xc')](_0xb9a6('0xd'),_0x34c702,_0xb9a6('0xe'));logger[_0xb9a6('0xf')]('ReportAgentPreview,\x20%s,\x20%s,\x20%s',_0x34c702,'request\x20sent',JSON[_0xb9a6('0x10')](_0x1c406a));if(_0x1c406a[_0xb9a6('0x11')]){if(_0x1c406a['error'][_0xb9a6('0x12')]===0x1f4){logger[_0xb9a6('0x11')](_0xb9a6('0xd'),_0x34c702,_0x1c406a[_0xb9a6('0x11')][_0xb9a6('0x13')]);return _0x314543(_0x1c406a['error'][_0xb9a6('0x13')]);}logger['error'](_0xb9a6('0xd'),_0x34c702,_0x1c406a['error']['message']);return _0x40e63c(_0x1c406a[_0xb9a6('0x11')][_0xb9a6('0x13')]);}else{logger[_0xb9a6('0xc')]('ReportAgentPreview,\x20%s,\x20%s',_0x34c702,'request\x20sent');_0x40e63c(_0x1c406a[_0xb9a6('0x14')]['message']);}})[_0xb9a6('0x15')](function(_0x354c40){logger[_0xb9a6('0x11')]('ReportAgentPreview,\x20%s,\x20%s',_0x34c702,_0x354c40);_0x314543(_0x354c40);});});}exports[_0xb9a6('0x16')]=function(_0x462a80){var _0x41bad9=this;return new Promise(function(_0x41d833,_0x44d4f1){return db['ReportAgentPreview'][_0xb9a6('0x17')](_0x462a80['body'],{'raw':_0x462a80['options']?_0x462a80[_0xb9a6('0x18')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x2479fc){logger[_0xb9a6('0xc')](_0xb9a6('0x16'),_0x462a80);logger[_0xb9a6('0xf')](_0xb9a6('0x16'),_0x462a80,JSON[_0xb9a6('0x10')](_0x2479fc));_0x41d833(_0x2479fc);})[_0xb9a6('0x15')](function(_0x299c41){logger[_0xb9a6('0x11')](_0xb9a6('0x16'),_0x299c41['message'],_0x462a80);_0x44d4f1(_0x41bad9['error'](0x1f4,_0x299c41['message']));});});};
\ No newline at end of file
index 587d4f7..5ad60d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x943a=['agentCapacity','telephones','/trunks','trunks','/campaigns','campaigns','faxAccounts','/chat/queues/waitinginteractions','chatQueuesWaitingInteractions','/mail/queues/waitinginteractions','mailQueuesWaitingInteractions','/openchannel/queues/waitinginteractions','openchannelQueuesWaitingInteractions','/sms/queues/waitinginteractions','smsQueuesWaitingInteractions','/fax/queues/waitinginteractions','faxQueuesWaitingInteractions','/mail/queues/:id/notify','/mail/queues/:id','showMailQueues','/chat/queues/:id/notify','queueNotify','chat','/chat/queues/:id','showChatQueues','post','/fax/queues/:id/notify','fax','openchannel','/openchannel/queues/:id','/sms/queues/:id/notify','/sms/queues/:id','showSmsQueues','agentNotify','multer','util','path','express','Router','../../components/auth/service','./rpc.controller','get','/voice/channels','isAuthenticated','voiceChannels','/voice/channels/:uniqueid/mixmonitor','voiceChannelStopMixMonitor','/voice/queues','voiceQueues','/mail/queues','mailQueues','/mail/accounts','mailAccounts','openchannelQueues','/sms/queues','smsQueues','/fax/queues','faxQueues','/voice/queues/preview/:id','voiceQueuesPreview','/voice/queues/channels','/voice/queues/channels/:uniqueid','/voice/queues/channels/:uniqueid/hangup','voiceQueuesChannelHangup','voiceQueuesChannelRedirect','/voice/queues/:id','showVoiceQueues','/outbound','outboundChannels','/agents','agents','put','/agents/:id/capacity'];(function(_0x122ff5,_0x16d00c){var _0x30afd5=function(_0x5a845a){while(--_0x5a845a){_0x122ff5['push'](_0x122ff5['shift']());}};_0x30afd5(++_0x16d00c);}(_0x943a,0xfd));var _0xa943=function(_0x3c6a7d,_0x27fc04){_0x3c6a7d=_0x3c6a7d-0x0;var _0x417e98=_0x943a[_0x3c6a7d];return _0x417e98;};'use strict';var multer=require(_0xa943('0x0'));var util=require(_0xa943('0x1'));var path=require(_0xa943('0x2'));var express=require(_0xa943('0x3'));var router=express[_0xa943('0x4')]();var auth=require(_0xa943('0x5'));var controller=require(_0xa943('0x6'));router[_0xa943('0x7')](_0xa943('0x8'),auth[_0xa943('0x9')](),controller[_0xa943('0xa')]);router[_0xa943('0x7')](_0xa943('0xb'),auth[_0xa943('0x9')](),controller['voiceChannelMixMonitor']);router['get']('/voice/channels/:uniqueid/stopmixmonitor',auth['isAuthenticated'](),controller[_0xa943('0xc')]);router[_0xa943('0x7')](_0xa943('0xd'),auth[_0xa943('0x9')](),controller[_0xa943('0xe')]);router[_0xa943('0x7')]('/chat/queues',auth[_0xa943('0x9')](),controller['chatQueues']);router[_0xa943('0x7')](_0xa943('0xf'),auth[_0xa943('0x9')](),controller[_0xa943('0x10')]);router['get'](_0xa943('0x11'),auth[_0xa943('0x9')](),controller[_0xa943('0x12')]);router[_0xa943('0x7')]('/openchannel/queues',auth['isAuthenticated'](),controller[_0xa943('0x13')]);router[_0xa943('0x7')](_0xa943('0x14'),auth['isAuthenticated'](),controller[_0xa943('0x15')]);router['get'](_0xa943('0x16'),auth[_0xa943('0x9')](),controller[_0xa943('0x17')]);router['get'](_0xa943('0x18'),auth['isAuthenticated'](),controller[_0xa943('0x19')]);router['get'](_0xa943('0x1a'),auth[_0xa943('0x9')](),controller['voiceQueuesChannels']);router[_0xa943('0x7')](_0xa943('0x1b'),auth[_0xa943('0x9')](),controller['voiceQueuesChannel']);router['get'](_0xa943('0x1c'),auth[_0xa943('0x9')](),controller[_0xa943('0x1d')]);router[_0xa943('0x7')]('/voice/queues/channels/:uniqueid/redirect/:exten',auth['isAuthenticated'](),controller[_0xa943('0x1e')]);router[_0xa943('0x7')](_0xa943('0x1f'),auth[_0xa943('0x9')](),controller[_0xa943('0x20')]);router[_0xa943('0x7')](_0xa943('0x21'),auth[_0xa943('0x9')](),controller['outbound']);router['get']('/outbound/channels',auth['isAuthenticated'](),controller[_0xa943('0x22')]);router[_0xa943('0x7')](_0xa943('0x23'),auth[_0xa943('0x9')](),controller[_0xa943('0x24')]);router[_0xa943('0x25')](_0xa943('0x26'),auth[_0xa943('0x9')](),controller[_0xa943('0x27')]);router[_0xa943('0x7')]('/telephones',auth[_0xa943('0x9')](),controller[_0xa943('0x28')]);router['get'](_0xa943('0x29'),auth[_0xa943('0x9')](),controller[_0xa943('0x2a')]);router[_0xa943('0x7')](_0xa943('0x2b'),auth['isAuthenticated'](),controller[_0xa943('0x2c')]);router[_0xa943('0x7')]('/fax/accounts',auth[_0xa943('0x9')](),controller[_0xa943('0x2d')]);router[_0xa943('0x7')](_0xa943('0x2e'),auth[_0xa943('0x9')](),controller[_0xa943('0x2f')]);router['get'](_0xa943('0x30'),auth[_0xa943('0x9')](),controller[_0xa943('0x31')]);router['get'](_0xa943('0x32'),auth[_0xa943('0x9')](),controller[_0xa943('0x33')]);router[_0xa943('0x7')](_0xa943('0x34'),auth[_0xa943('0x9')](),controller[_0xa943('0x35')]);router['get'](_0xa943('0x36'),auth[_0xa943('0x9')](),controller[_0xa943('0x37')]);router['post'](_0xa943('0x38'),auth[_0xa943('0x9')](),controller['queueNotify']('mail'));router[_0xa943('0x7')](_0xa943('0x39'),auth[_0xa943('0x9')](),controller[_0xa943('0x3a')]);router['post'](_0xa943('0x3b'),auth[_0xa943('0x9')](),controller[_0xa943('0x3c')](_0xa943('0x3d')));router[_0xa943('0x7')](_0xa943('0x3e'),auth[_0xa943('0x9')](),controller[_0xa943('0x3f')]);router[_0xa943('0x40')](_0xa943('0x41'),auth[_0xa943('0x9')](),controller[_0xa943('0x3c')](_0xa943('0x42')));router[_0xa943('0x7')]('/fax/queues/:id',auth[_0xa943('0x9')](),controller['showFaxQueues']);router[_0xa943('0x40')]('/openchannel/queues/:id/notify',auth[_0xa943('0x9')](),controller[_0xa943('0x3c')](_0xa943('0x43')));router[_0xa943('0x7')](_0xa943('0x44'),auth['isAuthenticated'](),controller['showOpenchannelQueues']);router[_0xa943('0x40')](_0xa943('0x45'),auth[_0xa943('0x9')](),controller[_0xa943('0x3c')]('sms'));router[_0xa943('0x7')](_0xa943('0x46'),auth['isAuthenticated'](),controller[_0xa943('0x47')]);router['post']('/agents/:id/notify',auth[_0xa943('0x9')](),controller[_0xa943('0x48')]);module['exports']=router;
\ No newline at end of file
+var _0xf1a2=['util','path','express','Router','../../components/auth/service','./rpc.controller','get','/voice/channels','voiceChannels','/voice/channels/:uniqueid/mixmonitor','isAuthenticated','voiceChannelMixMonitor','voiceQueues','/chat/queues','/mail/queues','mailQueues','/mail/accounts','mailAccounts','/openchannel/queues','openchannelQueues','/sms/queues','smsQueues','/fax/queues','faxQueues','/voice/queues/preview/:id','voiceQueuesPreview','/voice/queues/channels','voiceQueuesChannels','/voice/queues/channels/:uniqueid','/voice/queues/channels/:uniqueid/hangup','voiceQueuesChannelRedirect','/voice/queues/:id','showVoiceQueues','/outbound/channels','outboundChannels','agents','put','/agents/:id/capacity','agentCapacity','/telephones','telephones','/trunks','/campaigns','/fax/accounts','faxAccounts','/chat/queues/waitinginteractions','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','/sms/queues/waitinginteractions','/fax/queues/waitinginteractions','faxQueuesWaitingInteractions','post','/mail/queues/:id/notify','/mail/queues/:id','showMailQueues','/chat/queues/:id/notify','queueNotify','chat','/chat/queues/:id','showChatQueues','fax','showFaxQueues','/openchannel/queues/:id','showOpenchannelQueues','/sms/queues/:id/notify','sms','/sms/queues/:id','showSmsQueues','agentNotify','multer'];(function(_0x3ef2b3,_0x1ca524){var _0xe7016d=function(_0x2c7f00){while(--_0x2c7f00){_0x3ef2b3['push'](_0x3ef2b3['shift']());}};_0xe7016d(++_0x1ca524);}(_0xf1a2,0x1f0));var _0x2f1a=function(_0x570db5,_0x13c3aa){_0x570db5=_0x570db5-0x0;var _0x2685ad=_0xf1a2[_0x570db5];return _0x2685ad;};'use strict';var multer=require(_0x2f1a('0x0'));var util=require(_0x2f1a('0x1'));var path=require(_0x2f1a('0x2'));var express=require(_0x2f1a('0x3'));var router=express[_0x2f1a('0x4')]();var auth=require(_0x2f1a('0x5'));var controller=require(_0x2f1a('0x6'));router[_0x2f1a('0x7')](_0x2f1a('0x8'),auth['isAuthenticated'](),controller[_0x2f1a('0x9')]);router[_0x2f1a('0x7')](_0x2f1a('0xa'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0xc')]);router[_0x2f1a('0x7')]('/voice/channels/:uniqueid/stopmixmonitor',auth[_0x2f1a('0xb')](),controller['voiceChannelStopMixMonitor']);router[_0x2f1a('0x7')]('/voice/queues',auth[_0x2f1a('0xb')](),controller[_0x2f1a('0xd')]);router[_0x2f1a('0x7')](_0x2f1a('0xe'),auth[_0x2f1a('0xb')](),controller['chatQueues']);router[_0x2f1a('0x7')](_0x2f1a('0xf'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x10')]);router[_0x2f1a('0x7')](_0x2f1a('0x11'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x12')]);router['get'](_0x2f1a('0x13'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x14')]);router[_0x2f1a('0x7')](_0x2f1a('0x15'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x16')]);router['get'](_0x2f1a('0x17'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x18')]);router['get'](_0x2f1a('0x19'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x1a')]);router[_0x2f1a('0x7')](_0x2f1a('0x1b'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x1c')]);router[_0x2f1a('0x7')](_0x2f1a('0x1d'),auth[_0x2f1a('0xb')](),controller['voiceQueuesChannel']);router[_0x2f1a('0x7')](_0x2f1a('0x1e'),auth[_0x2f1a('0xb')](),controller['voiceQueuesChannelHangup']);router[_0x2f1a('0x7')]('/voice/queues/channels/:uniqueid/redirect/:exten',auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x1f')]);router[_0x2f1a('0x7')](_0x2f1a('0x20'),auth['isAuthenticated'](),controller[_0x2f1a('0x21')]);router[_0x2f1a('0x7')]('/outbound',auth[_0x2f1a('0xb')](),controller['outbound']);router['get'](_0x2f1a('0x22'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x23')]);router[_0x2f1a('0x7')]('/agents',auth['isAuthenticated'](),controller[_0x2f1a('0x24')]);router[_0x2f1a('0x25')](_0x2f1a('0x26'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x27')]);router['get'](_0x2f1a('0x28'),auth['isAuthenticated'](),controller[_0x2f1a('0x29')]);router['get'](_0x2f1a('0x2a'),auth[_0x2f1a('0xb')](),controller['trunks']);router[_0x2f1a('0x7')](_0x2f1a('0x2b'),auth['isAuthenticated'](),controller['campaigns']);router[_0x2f1a('0x7')](_0x2f1a('0x2c'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x2d')]);router['get'](_0x2f1a('0x2e'),auth['isAuthenticated'](),controller[_0x2f1a('0x2f')]);router[_0x2f1a('0x7')]('/mail/queues/waitinginteractions',auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x30')]);router[_0x2f1a('0x7')]('/openchannel/queues/waitinginteractions',auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x31')]);router[_0x2f1a('0x7')](_0x2f1a('0x32'),auth[_0x2f1a('0xb')](),controller['smsQueuesWaitingInteractions']);router['get'](_0x2f1a('0x33'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x34')]);router[_0x2f1a('0x35')](_0x2f1a('0x36'),auth[_0x2f1a('0xb')](),controller['queueNotify']('mail'));router[_0x2f1a('0x7')](_0x2f1a('0x37'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x38')]);router[_0x2f1a('0x35')](_0x2f1a('0x39'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x3a')](_0x2f1a('0x3b')));router['get'](_0x2f1a('0x3c'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x3d')]);router[_0x2f1a('0x35')]('/fax/queues/:id/notify',auth['isAuthenticated'](),controller[_0x2f1a('0x3a')](_0x2f1a('0x3e')));router['get']('/fax/queues/:id',auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x3f')]);router[_0x2f1a('0x35')]('/openchannel/queues/:id/notify',auth[_0x2f1a('0xb')](),controller['queueNotify']('openchannel'));router[_0x2f1a('0x7')](_0x2f1a('0x40'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x41')]);router[_0x2f1a('0x35')](_0x2f1a('0x42'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x3a')](_0x2f1a('0x43')));router[_0x2f1a('0x7')](_0x2f1a('0x44'),auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x45')]);router[_0x2f1a('0x35')]('/agents/:id/notify',auth[_0x2f1a('0xb')](),controller[_0x2f1a('0x46')]);module['exports']=router;
\ No newline at end of file
index c2662b9..3c563b1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a87=['chat','User','Agent\x20not\x20found','TransferReport','bluebird','moment','lodash','util','../../mysqldb','../../config/logger','api','jayson/promise','client','http','request','then','error','code','message','result','catch','status','sendStatus','stack','name','isNil','rows','find','voiceChannels','query','VoiceChannelMixMonitor','merge','params','voiceChannelStopMixMonitor','VoiceChannelStopMixMonitor','showVoiceQueues','VoiceQueues','voiceQueuesPreview','VoiceQueuesPreview','voiceQueuesChannels','VoiceQueuesChannels','voiceQueuesChannel','VoiceQueuesChannel','voiceQueuesChannelHangup','VoiceQueuesChannelHangup','voiceQueuesChannelRedirect','VoiceQueuesChannelRedirect','outbound','Outbound','outboundChannels','OutboundChannels','agents','Agents','body','interaction','user','hasOwnProperty','MemberReport','INTERACTION','length','YYYY-MM-DD\x20HH:mm:ss','updateAttributes','interface','SIP/%s','format','agent','internal','capacity','trunks','Trunks','campaigns','Campaigns','showChatQueues','ChatQueues','showMailQueues','MailQueues','mailAccounts','MailAccounts','openchannelQueues','OpenchannelQueues','showOpenchannelQueues','smsQueues','SmsQueues','showSmsQueues','faxQueues','showFaxQueues','FaxQueues','faxAccounts','chatQueuesWaitingInteractions','ChatQueuesWaitingInteractions','mailQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','queueNotify','capitalize','Website','Account','findOne','\x20Queue\x20not\x20found','Message','messageId','Interaction','\x20Message\x20not\x20found','update','queue','MessageId','InteractionId','From','QueueId','create','Start','queueTransferTimeout','*,*,*,*','agentNotify','channel','Channel\x20field\x20is\x20mandatory'];(function(_0x50b5fa,_0xfc98f7){var _0xf9cded=function(_0x1d563b){while(--_0x1d563b){_0x50b5fa['push'](_0x50b5fa['shift']());}};_0xf9cded(++_0xfc98f7);}(_0x8a87,0x160));var _0x78a8=function(_0x4230f4,_0x38625b){_0x4230f4=_0x4230f4-0x0;var _0x4a12ac=_0x8a87[_0x4230f4];return _0x4a12ac;};'use strict';var BPromise=require(_0x78a8('0x0'));var moment=require(_0x78a8('0x1'));var _=require(_0x78a8('0x2'));var util=require(_0x78a8('0x3'));var db=require(_0x78a8('0x4'))['db'];var logger=require(_0x78a8('0x5'))(_0x78a8('0x6'));var jayson=require(_0x78a8('0x7'));var amiClient=jayson[_0x78a8('0x8')][_0x78a8('0x9')]({'port':0x232a});var mailClient=jayson[_0x78a8('0x8')]['http']({'port':0x232b});var routingClient=jayson['client'][_0x78a8('0x9')]({'port':0x232c});function respondWithRpcPromise(_0x14cf02,_0x57c7d3,_0x8f816d){return new BPromise(function(_0x2c63e5,_0x33b1d4){var _0x1335c3=_0x8f816d?_0x8f816d:amiClient;return _0x1335c3[_0x78a8('0xa')](_0x14cf02,_0x57c7d3)[_0x78a8('0xb')](function(_0x42d200){if(_0x42d200[_0x78a8('0xc')]){if(_0x42d200['error'][_0x78a8('0xd')]===0x1f4){return _0x33b1d4(_0x42d200[_0x78a8('0xc')][_0x78a8('0xe')]);}return _0x2c63e5(_0x42d200[_0x78a8('0xc')]['message']);}else{_0x2c63e5(_0x42d200[_0x78a8('0xf')]);}})[_0x78a8('0x10')](function(_0x343565){_0x33b1d4(_0x343565);});});}function respondWithResult(_0x176618,_0x1be7c0){_0x1be7c0=_0x1be7c0||0xc8;return function(_0x160ca1){if(_0x160ca1){return _0x176618[_0x78a8('0x11')](_0x1be7c0)['json'](_0x160ca1);}return _0x176618[_0x78a8('0x12')](0x194);};}function handleError(_0x12e565,_0x57afa6){_0x57afa6=_0x57afa6||0x1f4;return function(_0x2a63f6){logger[_0x78a8('0xc')](_0x2a63f6[_0x78a8('0x13')]);if(_0x2a63f6[_0x78a8('0x14')]){delete _0x2a63f6['name'];}_0x12e565[_0x78a8('0x11')](_0x57afa6)['send'](_0x2a63f6);};}function findById(_0x5d06af){return function(_0xcab2c7){if(!_[_0x78a8('0x15')](_0x5d06af)&&!_[_0x78a8('0x15')](_0xcab2c7)&&!_[_0x78a8('0x15')](_0xcab2c7[_0x78a8('0x16')])){return _[_0x78a8('0x17')](_0xcab2c7['rows'],function(_0x169f06){return _0x169f06['id']==_0x5d06af;});}return null;};}exports[_0x78a8('0x18')]=function(_0x4cefa6,_0xbc49af){return respondWithRpcPromise('VoiceChannels',_0x4cefa6[_0x78a8('0x19')])[_0x78a8('0xb')](respondWithResult(_0xbc49af,null))[_0x78a8('0x10')](handleError(_0xbc49af,null));};exports['voiceChannelMixMonitor']=function(_0x4c64d1,_0x2bfb07){return respondWithRpcPromise(_0x78a8('0x1a'),_[_0x78a8('0x1b')](_0x4c64d1[_0x78a8('0x19')],_0x4c64d1[_0x78a8('0x1c')]))['then'](respondWithResult(_0x2bfb07,null))['catch'](handleError(_0x2bfb07,null));};exports[_0x78a8('0x1d')]=function(_0x37ea2b,_0xb5c0fe){return respondWithRpcPromise(_0x78a8('0x1e'),_[_0x78a8('0x1b')](_0x37ea2b[_0x78a8('0x19')],_0x37ea2b[_0x78a8('0x1c')]))[_0x78a8('0xb')](respondWithResult(_0xb5c0fe,null))[_0x78a8('0x10')](handleError(_0xb5c0fe,null));};exports['voiceQueues']=function(_0x29e33b,_0x9d8e8a){return respondWithRpcPromise('VoiceQueues',_0x29e33b[_0x78a8('0x19')])[_0x78a8('0xb')](respondWithResult(_0x9d8e8a,null))[_0x78a8('0x10')](handleError(_0x9d8e8a,null));};exports[_0x78a8('0x1f')]=function(_0xe452ac,_0x321301){return respondWithRpcPromise(_0x78a8('0x20'),_0xe452ac[_0x78a8('0x19')])[_0x78a8('0xb')](findById(_0xe452ac['params']['id']))[_0x78a8('0xb')](respondWithResult(_0x321301,null))['catch'](handleError(_0x321301,null));};exports[_0x78a8('0x21')]=function(_0x5c2ced,_0x127b2e){return respondWithRpcPromise(_0x78a8('0x22'),_[_0x78a8('0x1b')](_0x5c2ced[_0x78a8('0x19')],_0x5c2ced[_0x78a8('0x1c')]))['then'](respondWithResult(_0x127b2e,null))['catch'](handleError(_0x127b2e,null));};exports[_0x78a8('0x23')]=function(_0x3c0910,_0x45ce54){return respondWithRpcPromise(_0x78a8('0x24'),_0x3c0910[_0x78a8('0x19')])[_0x78a8('0xb')](respondWithResult(_0x45ce54,null))[_0x78a8('0x10')](handleError(_0x45ce54,null));};exports[_0x78a8('0x25')]=function(_0x16d0ed,_0x30feba){return respondWithRpcPromise(_0x78a8('0x26'),_[_0x78a8('0x1b')](_0x16d0ed[_0x78a8('0x19')],_0x16d0ed['params']))[_0x78a8('0xb')](respondWithResult(_0x30feba,null))[_0x78a8('0x10')](handleError(_0x30feba,null));};exports[_0x78a8('0x27')]=function(_0x5986c7,_0x5de494){return respondWithRpcPromise(_0x78a8('0x28'),_[_0x78a8('0x1b')](_0x5986c7[_0x78a8('0x19')],_0x5986c7[_0x78a8('0x1c')]))[_0x78a8('0xb')](respondWithResult(_0x5de494,null))[_0x78a8('0x10')](handleError(_0x5de494,null));};exports[_0x78a8('0x29')]=function(_0x21adc6,_0x5ccd8c){return respondWithRpcPromise(_0x78a8('0x2a'),_[_0x78a8('0x1b')](_0x21adc6[_0x78a8('0x19')],_0x21adc6[_0x78a8('0x1c')]))[_0x78a8('0xb')](respondWithResult(_0x5ccd8c,null))[_0x78a8('0x10')](handleError(_0x5ccd8c,null));};exports[_0x78a8('0x2b')]=function(_0xb599b3,_0x4e458b){return respondWithRpcPromise(_0x78a8('0x2c'),_0xb599b3['query'])[_0x78a8('0xb')](respondWithResult(_0x4e458b,null))['catch'](handleError(_0x4e458b,null));};exports[_0x78a8('0x2d')]=function(_0x53e0d8,_0x5c1297){return respondWithRpcPromise(_0x78a8('0x2e'),_0x53e0d8[_0x78a8('0x19')])[_0x78a8('0xb')](respondWithResult(_0x5c1297,null))[_0x78a8('0x10')](handleError(_0x5c1297,null));};exports[_0x78a8('0x2f')]=function(_0x49a8be,_0x5190f2){var _0xb5723;return respondWithRpcPromise(_0x78a8('0x30'),_0x49a8be[_0x78a8('0x19')])['then'](function(_0x6d9351){_0xb5723=_0x6d9351;return respondWithRpcPromise('Agents',_0x49a8be['query'],routingClient);})[_0x78a8('0xb')](function(_0x59210a){return _[_0x78a8('0x1b')]({},_0x59210a,_0xb5723);})[_0x78a8('0xb')](respondWithResult(_0x5190f2,null))[_0x78a8('0x10')](handleError(_0x5190f2,null));};exports['agentCapacity']=function(_0xd3e5a0,_0x50e3aa){if(_0xd3e5a0[_0x78a8('0x31')]&&_0xd3e5a0['body'][_0x78a8('0x32')]&&_0xd3e5a0[_0x78a8('0x33')]&&_0xd3e5a0[_0x78a8('0x33')][_0x78a8('0x14')]){for(var _0x50ddc3 in _0xd3e5a0['body'][_0x78a8('0x32')]){if(_0xd3e5a0[_0x78a8('0x31')]['interaction'][_0x78a8('0x34')](_0x50ddc3)){db[_0x78a8('0x35')]['findAll']({'where':{'channel':_0x50ddc3,'membername':_0xd3e5a0[_0x78a8('0x33')][_0x78a8('0x14')],'type':_0x78a8('0x36'),'exitAt':null,'uniqueid':_0xd3e5a0[_0x78a8('0x31')]['interaction'][_0x50ddc3]&&_0xd3e5a0[_0x78a8('0x31')][_0x78a8('0x32')][_0x50ddc3][_0x78a8('0x37')]?{'$notIn':_0xd3e5a0[_0x78a8('0x31')]['interaction'][_0x50ddc3]}:{'$ne':null}}})[_0x78a8('0xb')](function(_0x2a5df3){var _0x16d099=moment()['format'](_0x78a8('0x38'));for(var _0x5b8cee=0x0,_0x1875fb=_0x2a5df3[_0x78a8('0x37')];_0x5b8cee<_0x1875fb;_0x5b8cee+=0x1){_0x2a5df3[_0x5b8cee][_0x78a8('0x39')]({'exitAt':_0x16d099});}});for(var _0x2ba68d=0x0;_0x2ba68d<_0xd3e5a0[_0x78a8('0x31')]['interaction'][_0x50ddc3][_0x78a8('0x37')];_0x2ba68d+=0x1){db[_0x78a8('0x35')]['findOrCreate']({'where':{'channel':_0x50ddc3,'membername':_0xd3e5a0['user']['name'],'type':_0x78a8('0x36'),'uniqueid':_0xd3e5a0[_0x78a8('0x31')][_0x78a8('0x32')][_0x50ddc3][_0x2ba68d],'exitAt':null},'defaults':{'channel':_0x50ddc3,'membername':_0xd3e5a0[_0x78a8('0x33')][_0x78a8('0x14')],'interface':_[_0x78a8('0x15')](_0xd3e5a0[_0x78a8('0x33')][_0x78a8('0x3a')])?util['format'](_0x78a8('0x3b'),_0xd3e5a0[_0x78a8('0x33')][_0x78a8('0x14')]):_0xd3e5a0['user'][_0x78a8('0x3a')],'type':_0x78a8('0x36'),'enterAt':moment()[_0x78a8('0x3c')](_0x78a8('0x38')),'role':_0x78a8('0x3d'),'internal':_0xd3e5a0[_0x78a8('0x33')][_0x78a8('0x3e')],'uniqueid':_0xd3e5a0['body'][_0x78a8('0x32')][_0x50ddc3][_0x2ba68d]}});}}}}return respondWithRpcPromise('AgentCapacity',{'id':_0xd3e5a0[_0x78a8('0x1c')]['id'],'capacity':_0xd3e5a0[_0x78a8('0x31')][_0x78a8('0x3f')]},routingClient)['then'](respondWithResult(_0x50e3aa,null))[_0x78a8('0x10')](handleError(_0x50e3aa,null));};exports['telephones']=function(_0x2e8690,_0x2279e4){return respondWithRpcPromise('Telephones',_0x2e8690[_0x78a8('0x19')])[_0x78a8('0xb')](respondWithResult(_0x2279e4,null))[_0x78a8('0x10')](handleError(_0x2279e4,null));};exports[_0x78a8('0x40')]=function(_0xf8052,_0x1ad895){return respondWithRpcPromise(_0x78a8('0x41'),_0xf8052[_0x78a8('0x19')])['then'](respondWithResult(_0x1ad895,null))[_0x78a8('0x10')](handleError(_0x1ad895,null));};exports[_0x78a8('0x42')]=function(_0x4d1b14,_0x27c02f){return respondWithRpcPromise(_0x78a8('0x43'),_0x4d1b14[_0x78a8('0x19')])[_0x78a8('0xb')](respondWithResult(_0x27c02f,null))[_0x78a8('0x10')](handleError(_0x27c02f,null));};exports['chatQueues']=function(_0x4ebe3c,_0xbe2402){return respondWithRpcPromise('ChatQueues',_0x4ebe3c[_0x78a8('0x19')],routingClient)[_0x78a8('0xb')](respondWithResult(_0xbe2402,null))[_0x78a8('0x10')](handleError(_0xbe2402,null));};exports[_0x78a8('0x44')]=function(_0x3ac688,_0x3e0827){return respondWithRpcPromise(_0x78a8('0x45'),_0x3ac688[_0x78a8('0x19')],routingClient)[_0x78a8('0xb')](findById(_0x3ac688[_0x78a8('0x1c')]['id']))[_0x78a8('0xb')](respondWithResult(_0x3e0827,null))[_0x78a8('0x10')](handleError(_0x3e0827,null));};exports['mailQueues']=function(_0x5d8331,_0x183c3c){return respondWithRpcPromise('MailQueues',_0x5d8331[_0x78a8('0x19')],routingClient)['then'](respondWithResult(_0x183c3c,null))['catch'](handleError(_0x183c3c,null));};exports[_0x78a8('0x46')]=function(_0x2569d5,_0x3090b2){return respondWithRpcPromise(_0x78a8('0x47'),_0x2569d5[_0x78a8('0x19')],routingClient)[_0x78a8('0xb')](findById(_0x2569d5['params']['id']))[_0x78a8('0xb')](respondWithResult(_0x3090b2,null))[_0x78a8('0x10')](handleError(_0x3090b2,null));};exports[_0x78a8('0x48')]=function(_0x2e78fa,_0x423d90){return respondWithRpcPromise(_0x78a8('0x49'),_0x2e78fa['query'],mailClient)[_0x78a8('0xb')](respondWithResult(_0x423d90,null))[_0x78a8('0x10')](handleError(_0x423d90,null));};exports[_0x78a8('0x4a')]=function(_0x350456,_0x47f4c0){return respondWithRpcPromise(_0x78a8('0x4b'),_0x350456[_0x78a8('0x19')],routingClient)[_0x78a8('0xb')](respondWithResult(_0x47f4c0,null))['catch'](handleError(_0x47f4c0,null));};exports[_0x78a8('0x4c')]=function(_0x500e45,_0x273706){return respondWithRpcPromise(_0x78a8('0x4b'),_0x500e45['query'],routingClient)[_0x78a8('0xb')](findById(_0x500e45[_0x78a8('0x1c')]['id']))[_0x78a8('0xb')](respondWithResult(_0x273706,null))[_0x78a8('0x10')](handleError(_0x273706,null));};exports[_0x78a8('0x4d')]=function(_0x8fcc8b,_0x28233e){return respondWithRpcPromise(_0x78a8('0x4e'),_0x8fcc8b[_0x78a8('0x19')],routingClient)['then'](respondWithResult(_0x28233e,null))['catch'](handleError(_0x28233e,null));};exports[_0x78a8('0x4f')]=function(_0x591ef3,_0x5bb6ae){return respondWithRpcPromise(_0x78a8('0x4e'),_0x591ef3[_0x78a8('0x19')],routingClient)[_0x78a8('0xb')](findById(_0x591ef3[_0x78a8('0x1c')]['id']))['then'](respondWithResult(_0x5bb6ae,null))[_0x78a8('0x10')](handleError(_0x5bb6ae,null));};exports[_0x78a8('0x50')]=function(_0x590a85,_0x5ca77a){return respondWithRpcPromise('FaxQueues',_0x590a85['query'],routingClient)[_0x78a8('0xb')](respondWithResult(_0x5ca77a,null))[_0x78a8('0x10')](handleError(_0x5ca77a,null));};exports[_0x78a8('0x51')]=function(_0x4958a5,_0x5e5bf4){return respondWithRpcPromise(_0x78a8('0x52'),_0x4958a5[_0x78a8('0x19')],routingClient)[_0x78a8('0xb')](findById(_0x4958a5[_0x78a8('0x1c')]['id']))[_0x78a8('0xb')](respondWithResult(_0x5e5bf4,null))['catch'](handleError(_0x5e5bf4,null));};exports[_0x78a8('0x53')]=function(_0x3b208f,_0x1de0e3){return respondWithRpcPromise('FaxAccounts',_0x3b208f[_0x78a8('0x19')])['then'](respondWithResult(_0x1de0e3,null))[_0x78a8('0x10')](handleError(_0x1de0e3,null));};exports[_0x78a8('0x54')]=function(_0x56a66a,_0x224374){return respondWithRpcPromise(_0x78a8('0x55'),_0x56a66a[_0x78a8('0x19')],routingClient)[_0x78a8('0xb')](respondWithResult(_0x224374,null))['catch'](handleError(_0x224374,null));};exports[_0x78a8('0x56')]=function(_0x5de600,_0xc6b400){return respondWithRpcPromise('MailQueuesWaitingInteractions',_0x5de600[_0x78a8('0x19')],routingClient)['then'](respondWithResult(_0xc6b400,null))[_0x78a8('0x10')](handleError(_0xc6b400,null));};exports['openchannelQueuesWaitingInteractions']=function(_0x243764,_0x50720a){return respondWithRpcPromise('OpenchannelQueuesWaitingInteractions',_0x243764[_0x78a8('0x19')],routingClient)['then'](respondWithResult(_0x50720a,null))[_0x78a8('0x10')](handleError(_0x50720a,null));};exports[_0x78a8('0x57')]=function(_0x5029ad,_0x37e7b7){return respondWithRpcPromise('SmsQueuesWaitingInteractions',_0x5029ad[_0x78a8('0x19')],routingClient)[_0x78a8('0xb')](respondWithResult(_0x37e7b7,null))[_0x78a8('0x10')](handleError(_0x37e7b7,null));};exports[_0x78a8('0x58')]=function(_0x516b0d,_0x1dec1f){return respondWithRpcPromise('FaxQueuesWaitingInteractions',_0x516b0d['query'],routingClient)['then'](respondWithResult(_0x1dec1f,null))['catch'](handleError(_0x1dec1f,null));};exports[_0x78a8('0x59')]=function(_0x4947c1){return function(_0x5dde20,_0x29a0c0){var _0x2c5514,_0x467a59;var _0x5560cd=_[_0x78a8('0x5a')](_0x4947c1);var _0x5e06da=_0x4947c1==='chat'?_0x78a8('0x5b'):_0x78a8('0x5c');return db[_0x5560cd+'Queue'][_0x78a8('0x5d')]({'raw':!![],'where':{'id':_0x5dde20[_0x78a8('0x1c')]['id']}})['then'](function(_0x589d32){if(_[_0x78a8('0x15')](_0x589d32)){throw new Error(_0x5560cd+_0x78a8('0x5e'));}_0x2c5514=_0x589d32;return db[_0x5560cd+_0x78a8('0x5f')][_0x78a8('0x5d')]({'where':{'id':_0x5dde20[_0x78a8('0x31')][_0x78a8('0x60')]},'include':[{'model':db[_0x5560cd+_0x78a8('0x61')],'as':_0x78a8('0x61')},{'model':db[_0x5560cd+_0x5e06da],'as':'Account'}]});})['then'](function(_0x452e91){if(_[_0x78a8('0x15')](_0x452e91)){throw new Error(_0x5560cd+_0x78a8('0x62'));}_0x467a59=_0x452e91;return _0x452e91[_0x78a8('0x63')]({'read':0x0,'readAt':null,'UserId':null});})[_0x78a8('0xb')](function(){var _0x321a68={'uniqueid':_0x4947c1+'.'+_0x467a59['id']+'.'+_0x467a59['Interaction']['id'],'FromUserId':_0x5dde20[_0x78a8('0x33')]['id'],'type':_0x78a8('0x64')};_0x321a68[_0x5560cd+_0x78a8('0x65')]=_0x467a59['id'];_0x321a68[_0x5560cd+_0x78a8('0x66')]=_0x467a59[_0x78a8('0x61')]['id'];_0x321a68[_0x78a8('0x67')+_0x5560cd+_0x5e06da+'Id']=_0x467a59[_0x78a8('0x5c')]['id'];_0x321a68['To'+_0x5560cd+_0x78a8('0x68')]=_0x2c5514['id'];return db[_0x5560cd+'TransferReport'][_0x78a8('0x69')](_0x321a68);})[_0x78a8('0xb')](function(){return respondWithRpcPromise(_0x78a8('0x6a'),{'channel':_0x4947c1,'interaction':_0x467a59[_0x78a8('0x61')],'message':_0x467a59,'account':_0x467a59[_0x78a8('0x5c')],'applications':[{'id':0x0,'priority':0x1,'app':_0x78a8('0x64'),'appdata':_0x2c5514[_0x78a8('0x14')]+','+(_0x467a59[_0x78a8('0x5c')][_0x78a8('0x6b')]||0x12c),'interval':_0x78a8('0x6c')}]},routingClient);})['then'](respondWithResult(_0x29a0c0,null))[_0x78a8('0x10')](handleError(_0x29a0c0,null));};};exports[_0x78a8('0x6d')]=function(_0x4e29da,_0x4d6495){var _0x227f35,_0x3ff898;if(_[_0x78a8('0x15')](_0x4e29da[_0x78a8('0x31')][_0x78a8('0x6e')])){throw new Error(_0x78a8('0x6f'));}var _0x34d21f=_0x4e29da[_0x78a8('0x31')][_0x78a8('0x6e')];var _0x103aaa=_[_0x78a8('0x5a')](_0x34d21f);var _0x49b2c7=_0x34d21f===_0x78a8('0x70')?'Website':_0x78a8('0x5c');return db[_0x78a8('0x71')]['findOne']({'raw':!![],'where':{'id':_0x4e29da[_0x78a8('0x1c')]['id'],'role':_0x78a8('0x3d')}})[_0x78a8('0xb')](function(_0x3af6ee){if(_[_0x78a8('0x15')](_0x3af6ee)){throw new Error(_0x78a8('0x72'));}_0x227f35=_0x3af6ee;return db[_0x103aaa+'Message'][_0x78a8('0x5d')]({'where':{'id':_0x4e29da[_0x78a8('0x31')]['messageId']},'include':[{'model':db[_0x103aaa+_0x78a8('0x61')],'as':'Interaction'},{'model':db[_0x103aaa+_0x49b2c7],'as':_0x78a8('0x5c')}]});})[_0x78a8('0xb')](function(_0x2315a8){if(_[_0x78a8('0x15')](_0x2315a8)){throw new Error(_0x103aaa+'\x20Message\x20not\x20found');}_0x3ff898=_0x2315a8;return _0x2315a8['update']({'read':0x0,'readAt':null,'UserId':null});})[_0x78a8('0xb')](function(){var _0x2d6424={'uniqueid':_0x34d21f+'.'+_0x3ff898['id']+'.'+_0x3ff898[_0x78a8('0x61')]['id'],'FromUserId':_0x4e29da[_0x78a8('0x33')]['id'],'type':_0x78a8('0x64'),'ToUserId':_0x227f35['id']};_0x2d6424[_0x103aaa+_0x78a8('0x65')]=_0x3ff898['id'];_0x2d6424[_0x103aaa+'InteractionId']=_0x3ff898['Interaction']['id'];_0x2d6424[_0x78a8('0x67')+_0x103aaa+_0x49b2c7+'Id']=_0x3ff898[_0x78a8('0x5c')]['id'];return db[_0x103aaa+_0x78a8('0x73')][_0x78a8('0x69')](_0x2d6424);})[_0x78a8('0xb')](function(){return respondWithRpcPromise('Start',{'channel':_0x34d21f,'interaction':_0x3ff898[_0x78a8('0x61')],'message':_0x3ff898,'account':_0x3ff898[_0x78a8('0x5c')],'applications':[{'id':0x0,'priority':0x1,'app':_0x78a8('0x3d'),'appdata':_0x227f35[_0x78a8('0x14')]+','+(_0x3ff898[_0x78a8('0x5c')]['agentTransferTimeout']||0x12c),'interval':_0x78a8('0x6c')}]},routingClient);})[_0x78a8('0xb')](respondWithResult(_0x4d6495,null))[_0x78a8('0x10')](handleError(_0x4d6495,null));};
\ No newline at end of file
+var _0xde91=['faxAccounts','FaxAccounts','chatQueuesWaitingInteractions','ChatQueuesWaitingInteractions','mailQueuesWaitingInteractions','MailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','OpenchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','SmsQueuesWaitingInteractions','faxQueuesWaitingInteractions','FaxQueuesWaitingInteractions','queueNotify','capitalize','Website','Account','Queue','findOne','messageId','Interaction','\x20Message\x20not\x20found','update','queue','QueueId','TransferReport','Start','agentNotify','channel','chat','User','agent','Message','MessageId','InteractionId','*,*,*,*','lodash','util','../../mysqldb','../../config/logger','jayson/promise','client','http','error','message','result','status','json','sendStatus','stack','name','send','isNil','rows','find','voiceChannels','VoiceChannels','query','then','catch','voiceChannelMixMonitor','VoiceChannelMixMonitor','merge','params','voiceChannelStopMixMonitor','VoiceChannelStopMixMonitor','voiceQueues','showVoiceQueues','voiceQueuesPreview','VoiceQueuesPreview','voiceQueuesChannels','voiceQueuesChannel','VoiceQueuesChannel','VoiceQueuesChannelHangup','voiceQueuesChannelRedirect','VoiceQueuesChannelRedirect','outbound','Outbound','outboundChannels','Agents','agentCapacity','body','interaction','user','hasOwnProperty','findAll','INTERACTION','length','YYYY-MM-DD\x20HH:mm:ss','updateAttributes','findOrCreate','format','SIP/%s','interface','internal','AgentCapacity','capacity','Telephones','trunks','Trunks','Campaigns','chatQueues','ChatQueues','showChatQueues','mailQueues','showMailQueues','MailAccounts','openchannelQueues','OpenchannelQueues','showOpenchannelQueues','smsQueues','SmsQueues','faxQueues','FaxQueues','showFaxQueues'];(function(_0x4826d0,_0x1c012b){var _0x237924=function(_0x1ae4d2){while(--_0x1ae4d2){_0x4826d0['push'](_0x4826d0['shift']());}};_0x237924(++_0x1c012b);}(_0xde91,0x95));var _0x1de9=function(_0x134192,_0x36adc5){_0x134192=_0x134192-0x0;var _0x3cd080=_0xde91[_0x134192];return _0x3cd080;};'use strict';var BPromise=require('bluebird');var moment=require('moment');var _=require(_0x1de9('0x0'));var util=require(_0x1de9('0x1'));var db=require(_0x1de9('0x2'))['db'];var logger=require(_0x1de9('0x3'))('api');var jayson=require(_0x1de9('0x4'));var amiClient=jayson[_0x1de9('0x5')][_0x1de9('0x6')]({'port':0x232a});var mailClient=jayson[_0x1de9('0x5')][_0x1de9('0x6')]({'port':0x232b});var routingClient=jayson[_0x1de9('0x5')][_0x1de9('0x6')]({'port':0x232c});function respondWithRpcPromise(_0x31384d,_0x2d0be2,_0xbe8c4f){return new BPromise(function(_0x229f31,_0x51c8af){var _0x4469dd=_0xbe8c4f?_0xbe8c4f:amiClient;return _0x4469dd['request'](_0x31384d,_0x2d0be2)['then'](function(_0x5c0e7e){if(_0x5c0e7e[_0x1de9('0x7')]){if(_0x5c0e7e[_0x1de9('0x7')]['code']===0x1f4){return _0x51c8af(_0x5c0e7e[_0x1de9('0x7')][_0x1de9('0x8')]);}return _0x229f31(_0x5c0e7e[_0x1de9('0x7')]['message']);}else{_0x229f31(_0x5c0e7e[_0x1de9('0x9')]);}})['catch'](function(_0x4a518e){_0x51c8af(_0x4a518e);});});}function respondWithResult(_0x3c297a,_0x16406d){_0x16406d=_0x16406d||0xc8;return function(_0x144b0a){if(_0x144b0a){return _0x3c297a[_0x1de9('0xa')](_0x16406d)[_0x1de9('0xb')](_0x144b0a);}return _0x3c297a[_0x1de9('0xc')](0x194);};}function handleError(_0x4a2f7a,_0x3a9036){_0x3a9036=_0x3a9036||0x1f4;return function(_0x1aa165){logger['error'](_0x1aa165[_0x1de9('0xd')]);if(_0x1aa165['name']){delete _0x1aa165[_0x1de9('0xe')];}_0x4a2f7a[_0x1de9('0xa')](_0x3a9036)[_0x1de9('0xf')](_0x1aa165);};}function findById(_0x249f97){return function(_0x59f603){if(!_[_0x1de9('0x10')](_0x249f97)&&!_[_0x1de9('0x10')](_0x59f603)&&!_[_0x1de9('0x10')](_0x59f603[_0x1de9('0x11')])){return _[_0x1de9('0x12')](_0x59f603['rows'],function(_0x30eb33){return _0x30eb33['id']==_0x249f97;});}return null;};}exports[_0x1de9('0x13')]=function(_0x5047a8,_0x30f4de){return respondWithRpcPromise(_0x1de9('0x14'),_0x5047a8[_0x1de9('0x15')])[_0x1de9('0x16')](respondWithResult(_0x30f4de,null))[_0x1de9('0x17')](handleError(_0x30f4de,null));};exports[_0x1de9('0x18')]=function(_0x4c3196,_0x140fbc){return respondWithRpcPromise(_0x1de9('0x19'),_[_0x1de9('0x1a')](_0x4c3196[_0x1de9('0x15')],_0x4c3196[_0x1de9('0x1b')]))[_0x1de9('0x16')](respondWithResult(_0x140fbc,null))[_0x1de9('0x17')](handleError(_0x140fbc,null));};exports[_0x1de9('0x1c')]=function(_0x20b354,_0x391e13){return respondWithRpcPromise(_0x1de9('0x1d'),_[_0x1de9('0x1a')](_0x20b354[_0x1de9('0x15')],_0x20b354['params']))['then'](respondWithResult(_0x391e13,null))[_0x1de9('0x17')](handleError(_0x391e13,null));};exports[_0x1de9('0x1e')]=function(_0x52d43a,_0x11e146){return respondWithRpcPromise('VoiceQueues',_0x52d43a[_0x1de9('0x15')])['then'](respondWithResult(_0x11e146,null))[_0x1de9('0x17')](handleError(_0x11e146,null));};exports[_0x1de9('0x1f')]=function(_0x3bb8b3,_0x415139){return respondWithRpcPromise('VoiceQueues',_0x3bb8b3[_0x1de9('0x15')])[_0x1de9('0x16')](findById(_0x3bb8b3[_0x1de9('0x1b')]['id']))[_0x1de9('0x16')](respondWithResult(_0x415139,null))[_0x1de9('0x17')](handleError(_0x415139,null));};exports[_0x1de9('0x20')]=function(_0x563a91,_0x56ce92){return respondWithRpcPromise(_0x1de9('0x21'),_[_0x1de9('0x1a')](_0x563a91[_0x1de9('0x15')],_0x563a91['params']))[_0x1de9('0x16')](respondWithResult(_0x56ce92,null))[_0x1de9('0x17')](handleError(_0x56ce92,null));};exports[_0x1de9('0x22')]=function(_0x491f8b,_0x1cf08d){return respondWithRpcPromise('VoiceQueuesChannels',_0x491f8b[_0x1de9('0x15')])[_0x1de9('0x16')](respondWithResult(_0x1cf08d,null))[_0x1de9('0x17')](handleError(_0x1cf08d,null));};exports[_0x1de9('0x23')]=function(_0x13ed26,_0x3e33af){return respondWithRpcPromise(_0x1de9('0x24'),_[_0x1de9('0x1a')](_0x13ed26[_0x1de9('0x15')],_0x13ed26[_0x1de9('0x1b')]))[_0x1de9('0x16')](respondWithResult(_0x3e33af,null))[_0x1de9('0x17')](handleError(_0x3e33af,null));};exports['voiceQueuesChannelHangup']=function(_0x4e3b8d,_0x27c95f){return respondWithRpcPromise(_0x1de9('0x25'),_[_0x1de9('0x1a')](_0x4e3b8d[_0x1de9('0x15')],_0x4e3b8d['params']))[_0x1de9('0x16')](respondWithResult(_0x27c95f,null))[_0x1de9('0x17')](handleError(_0x27c95f,null));};exports[_0x1de9('0x26')]=function(_0xffaa9b,_0x5f2994){return respondWithRpcPromise(_0x1de9('0x27'),_[_0x1de9('0x1a')](_0xffaa9b['query'],_0xffaa9b[_0x1de9('0x1b')]))[_0x1de9('0x16')](respondWithResult(_0x5f2994,null))[_0x1de9('0x17')](handleError(_0x5f2994,null));};exports[_0x1de9('0x28')]=function(_0x2cd36f,_0x5c8db8){return respondWithRpcPromise(_0x1de9('0x29'),_0x2cd36f[_0x1de9('0x15')])[_0x1de9('0x16')](respondWithResult(_0x5c8db8,null))['catch'](handleError(_0x5c8db8,null));};exports[_0x1de9('0x2a')]=function(_0x4023a9,_0x251f28){return respondWithRpcPromise('OutboundChannels',_0x4023a9[_0x1de9('0x15')])['then'](respondWithResult(_0x251f28,null))[_0x1de9('0x17')](handleError(_0x251f28,null));};exports['agents']=function(_0x34ea2c,_0x2117bb){var _0x1b9c57;return respondWithRpcPromise(_0x1de9('0x2b'),_0x34ea2c[_0x1de9('0x15')])[_0x1de9('0x16')](function(_0x891da){_0x1b9c57=_0x891da;return respondWithRpcPromise('Agents',_0x34ea2c[_0x1de9('0x15')],routingClient);})[_0x1de9('0x16')](function(_0x391374){return _[_0x1de9('0x1a')]({},_0x391374,_0x1b9c57);})['then'](respondWithResult(_0x2117bb,null))[_0x1de9('0x17')](handleError(_0x2117bb,null));};exports[_0x1de9('0x2c')]=function(_0x3679b7,_0x138026){if(_0x3679b7[_0x1de9('0x2d')]&&_0x3679b7[_0x1de9('0x2d')][_0x1de9('0x2e')]&&_0x3679b7[_0x1de9('0x2f')]&&_0x3679b7[_0x1de9('0x2f')][_0x1de9('0xe')]){for(var _0x4693f4 in _0x3679b7[_0x1de9('0x2d')]['interaction']){if(_0x3679b7[_0x1de9('0x2d')][_0x1de9('0x2e')][_0x1de9('0x30')](_0x4693f4)){db['MemberReport'][_0x1de9('0x31')]({'where':{'channel':_0x4693f4,'membername':_0x3679b7[_0x1de9('0x2f')][_0x1de9('0xe')],'type':_0x1de9('0x32'),'exitAt':null,'uniqueid':_0x3679b7['body'][_0x1de9('0x2e')][_0x4693f4]&&_0x3679b7[_0x1de9('0x2d')][_0x1de9('0x2e')][_0x4693f4][_0x1de9('0x33')]?{'$notIn':_0x3679b7[_0x1de9('0x2d')][_0x1de9('0x2e')][_0x4693f4]}:{'$ne':null}}})[_0x1de9('0x16')](function(_0x2a4912){var _0x2d5db3=moment()['format'](_0x1de9('0x34'));for(var _0x5a0b56=0x0,_0x5eee25=_0x2a4912[_0x1de9('0x33')];_0x5a0b56<_0x5eee25;_0x5a0b56+=0x1){_0x2a4912[_0x5a0b56][_0x1de9('0x35')]({'exitAt':_0x2d5db3});}});for(var _0x356fb7=0x0;_0x356fb7<_0x3679b7[_0x1de9('0x2d')][_0x1de9('0x2e')][_0x4693f4][_0x1de9('0x33')];_0x356fb7+=0x1){db['MemberReport'][_0x1de9('0x36')]({'where':{'channel':_0x4693f4,'membername':_0x3679b7[_0x1de9('0x2f')][_0x1de9('0xe')],'type':_0x1de9('0x32'),'uniqueid':_0x3679b7[_0x1de9('0x2d')][_0x1de9('0x2e')][_0x4693f4][_0x356fb7],'exitAt':null},'defaults':{'channel':_0x4693f4,'membername':_0x3679b7['user'][_0x1de9('0xe')],'interface':_[_0x1de9('0x10')](_0x3679b7[_0x1de9('0x2f')]['interface'])?util[_0x1de9('0x37')](_0x1de9('0x38'),_0x3679b7[_0x1de9('0x2f')][_0x1de9('0xe')]):_0x3679b7[_0x1de9('0x2f')][_0x1de9('0x39')],'type':'INTERACTION','enterAt':moment()['format'](_0x1de9('0x34')),'role':'agent','internal':_0x3679b7[_0x1de9('0x2f')][_0x1de9('0x3a')],'uniqueid':_0x3679b7['body']['interaction'][_0x4693f4][_0x356fb7]}});}}}}return respondWithRpcPromise(_0x1de9('0x3b'),{'id':_0x3679b7['params']['id'],'capacity':_0x3679b7['body'][_0x1de9('0x3c')]},routingClient)[_0x1de9('0x16')](respondWithResult(_0x138026,null))[_0x1de9('0x17')](handleError(_0x138026,null));};exports['telephones']=function(_0x1b82c3,_0x6d8046){return respondWithRpcPromise(_0x1de9('0x3d'),_0x1b82c3[_0x1de9('0x15')])[_0x1de9('0x16')](respondWithResult(_0x6d8046,null))[_0x1de9('0x17')](handleError(_0x6d8046,null));};exports[_0x1de9('0x3e')]=function(_0x48d860,_0x3ce24d){return respondWithRpcPromise(_0x1de9('0x3f'),_0x48d860[_0x1de9('0x15')])['then'](respondWithResult(_0x3ce24d,null))['catch'](handleError(_0x3ce24d,null));};exports['campaigns']=function(_0x118410,_0x57e7cd){return respondWithRpcPromise(_0x1de9('0x40'),_0x118410[_0x1de9('0x15')])[_0x1de9('0x16')](respondWithResult(_0x57e7cd,null))[_0x1de9('0x17')](handleError(_0x57e7cd,null));};exports[_0x1de9('0x41')]=function(_0x57d1e4,_0x3e0d3a){return respondWithRpcPromise(_0x1de9('0x42'),_0x57d1e4[_0x1de9('0x15')],routingClient)[_0x1de9('0x16')](respondWithResult(_0x3e0d3a,null))[_0x1de9('0x17')](handleError(_0x3e0d3a,null));};exports[_0x1de9('0x43')]=function(_0x1176b1,_0x2fd07b){return respondWithRpcPromise('ChatQueues',_0x1176b1[_0x1de9('0x15')],routingClient)[_0x1de9('0x16')](findById(_0x1176b1[_0x1de9('0x1b')]['id']))[_0x1de9('0x16')](respondWithResult(_0x2fd07b,null))[_0x1de9('0x17')](handleError(_0x2fd07b,null));};exports[_0x1de9('0x44')]=function(_0x4321b3,_0x22ca5d){return respondWithRpcPromise('MailQueues',_0x4321b3[_0x1de9('0x15')],routingClient)['then'](respondWithResult(_0x22ca5d,null))[_0x1de9('0x17')](handleError(_0x22ca5d,null));};exports[_0x1de9('0x45')]=function(_0x543733,_0x3cfe07){return respondWithRpcPromise('MailQueues',_0x543733[_0x1de9('0x15')],routingClient)['then'](findById(_0x543733[_0x1de9('0x1b')]['id']))[_0x1de9('0x16')](respondWithResult(_0x3cfe07,null))['catch'](handleError(_0x3cfe07,null));};exports['mailAccounts']=function(_0x34a897,_0x886a32){return respondWithRpcPromise(_0x1de9('0x46'),_0x34a897[_0x1de9('0x15')],mailClient)[_0x1de9('0x16')](respondWithResult(_0x886a32,null))['catch'](handleError(_0x886a32,null));};exports[_0x1de9('0x47')]=function(_0x3b5f95,_0xa48bbf){return respondWithRpcPromise(_0x1de9('0x48'),_0x3b5f95[_0x1de9('0x15')],routingClient)[_0x1de9('0x16')](respondWithResult(_0xa48bbf,null))[_0x1de9('0x17')](handleError(_0xa48bbf,null));};exports[_0x1de9('0x49')]=function(_0x39d069,_0x405c87){return respondWithRpcPromise('OpenchannelQueues',_0x39d069['query'],routingClient)[_0x1de9('0x16')](findById(_0x39d069[_0x1de9('0x1b')]['id']))[_0x1de9('0x16')](respondWithResult(_0x405c87,null))[_0x1de9('0x17')](handleError(_0x405c87,null));};exports[_0x1de9('0x4a')]=function(_0x20dc02,_0x8faf57){return respondWithRpcPromise(_0x1de9('0x4b'),_0x20dc02['query'],routingClient)['then'](respondWithResult(_0x8faf57,null))[_0x1de9('0x17')](handleError(_0x8faf57,null));};exports['showSmsQueues']=function(_0x164d3b,_0xf6faa){return respondWithRpcPromise(_0x1de9('0x4b'),_0x164d3b['query'],routingClient)[_0x1de9('0x16')](findById(_0x164d3b[_0x1de9('0x1b')]['id']))['then'](respondWithResult(_0xf6faa,null))[_0x1de9('0x17')](handleError(_0xf6faa,null));};exports[_0x1de9('0x4c')]=function(_0x396fd5,_0x4faa0e){return respondWithRpcPromise(_0x1de9('0x4d'),_0x396fd5[_0x1de9('0x15')],routingClient)[_0x1de9('0x16')](respondWithResult(_0x4faa0e,null))[_0x1de9('0x17')](handleError(_0x4faa0e,null));};exports[_0x1de9('0x4e')]=function(_0x4baa1e,_0x59e0ab){return respondWithRpcPromise('FaxQueues',_0x4baa1e[_0x1de9('0x15')],routingClient)['then'](findById(_0x4baa1e[_0x1de9('0x1b')]['id']))[_0x1de9('0x16')](respondWithResult(_0x59e0ab,null))[_0x1de9('0x17')](handleError(_0x59e0ab,null));};exports[_0x1de9('0x4f')]=function(_0x359c83,_0x25a8a9){return respondWithRpcPromise(_0x1de9('0x50'),_0x359c83[_0x1de9('0x15')])['then'](respondWithResult(_0x25a8a9,null))['catch'](handleError(_0x25a8a9,null));};exports[_0x1de9('0x51')]=function(_0x1978f4,_0x4c0ef1){return respondWithRpcPromise(_0x1de9('0x52'),_0x1978f4['query'],routingClient)[_0x1de9('0x16')](respondWithResult(_0x4c0ef1,null))[_0x1de9('0x17')](handleError(_0x4c0ef1,null));};exports[_0x1de9('0x53')]=function(_0x424ae5,_0x308bd1){return respondWithRpcPromise(_0x1de9('0x54'),_0x424ae5['query'],routingClient)[_0x1de9('0x16')](respondWithResult(_0x308bd1,null))[_0x1de9('0x17')](handleError(_0x308bd1,null));};exports[_0x1de9('0x55')]=function(_0x3a9aeb,_0x20a453){return respondWithRpcPromise(_0x1de9('0x56'),_0x3a9aeb['query'],routingClient)['then'](respondWithResult(_0x20a453,null))['catch'](handleError(_0x20a453,null));};exports[_0x1de9('0x57')]=function(_0x3dda31,_0x39beff){return respondWithRpcPromise(_0x1de9('0x58'),_0x3dda31['query'],routingClient)[_0x1de9('0x16')](respondWithResult(_0x39beff,null))[_0x1de9('0x17')](handleError(_0x39beff,null));};exports[_0x1de9('0x59')]=function(_0x2c80f0,_0x373e7){return respondWithRpcPromise(_0x1de9('0x5a'),_0x2c80f0[_0x1de9('0x15')],routingClient)[_0x1de9('0x16')](respondWithResult(_0x373e7,null))[_0x1de9('0x17')](handleError(_0x373e7,null));};exports[_0x1de9('0x5b')]=function(_0x54f299){return function(_0x4059c5,_0x883097){var _0x525439,_0x40e6fd;var _0x403c89=_[_0x1de9('0x5c')](_0x54f299);var _0x537e96=_0x54f299==='chat'?_0x1de9('0x5d'):_0x1de9('0x5e');return db[_0x403c89+_0x1de9('0x5f')][_0x1de9('0x60')]({'raw':!![],'where':{'id':_0x4059c5['params']['id']}})['then'](function(_0x486637){if(_[_0x1de9('0x10')](_0x486637)){throw new Error(_0x403c89+'\x20Queue\x20not\x20found');}_0x525439=_0x486637;return db[_0x403c89+'Message'][_0x1de9('0x60')]({'where':{'id':_0x4059c5[_0x1de9('0x2d')][_0x1de9('0x61')]},'include':[{'model':db[_0x403c89+_0x1de9('0x62')],'as':_0x1de9('0x62')},{'model':db[_0x403c89+_0x537e96],'as':_0x1de9('0x5e')}]});})['then'](function(_0x23dc76){if(_[_0x1de9('0x10')](_0x23dc76)){throw new Error(_0x403c89+_0x1de9('0x63'));}_0x40e6fd=_0x23dc76;return _0x23dc76[_0x1de9('0x64')]({'read':0x0,'readAt':null,'UserId':null});})[_0x1de9('0x16')](function(){var _0x1fb849={'uniqueid':_0x54f299+'.'+_0x40e6fd['id']+'.'+_0x40e6fd[_0x1de9('0x62')]['id'],'FromUserId':_0x4059c5['user']['id'],'type':_0x1de9('0x65')};_0x1fb849[_0x403c89+'MessageId']=_0x40e6fd['id'];_0x1fb849[_0x403c89+'InteractionId']=_0x40e6fd[_0x1de9('0x62')]['id'];_0x1fb849['From'+_0x403c89+_0x537e96+'Id']=_0x40e6fd[_0x1de9('0x5e')]['id'];_0x1fb849['To'+_0x403c89+_0x1de9('0x66')]=_0x525439['id'];return db[_0x403c89+_0x1de9('0x67')]['create'](_0x1fb849);})[_0x1de9('0x16')](function(){return respondWithRpcPromise(_0x1de9('0x68'),{'channel':_0x54f299,'interaction':_0x40e6fd['Interaction'],'message':_0x40e6fd,'account':_0x40e6fd[_0x1de9('0x5e')],'applications':[{'id':0x0,'priority':0x1,'app':_0x1de9('0x65'),'appdata':_0x525439[_0x1de9('0xe')]+','+(_0x40e6fd[_0x1de9('0x5e')]['queueTransferTimeout']||0x12c),'interval':'*,*,*,*'}]},routingClient);})[_0x1de9('0x16')](respondWithResult(_0x883097,null))[_0x1de9('0x17')](handleError(_0x883097,null));};};exports[_0x1de9('0x69')]=function(_0x4591be,_0x41200f){var _0x46da79,_0x2f3078;if(_[_0x1de9('0x10')](_0x4591be['body']['channel'])){throw new Error('Channel\x20field\x20is\x20mandatory');}var _0x44b450=_0x4591be['body'][_0x1de9('0x6a')];var _0xd578f7=_[_0x1de9('0x5c')](_0x44b450);var _0xae9705=_0x44b450===_0x1de9('0x6b')?_0x1de9('0x5d'):_0x1de9('0x5e');return db[_0x1de9('0x6c')]['findOne']({'raw':!![],'where':{'id':_0x4591be[_0x1de9('0x1b')]['id'],'role':_0x1de9('0x6d')}})[_0x1de9('0x16')](function(_0x28c322){if(_[_0x1de9('0x10')](_0x28c322)){throw new Error('Agent\x20not\x20found');}_0x46da79=_0x28c322;return db[_0xd578f7+_0x1de9('0x6e')][_0x1de9('0x60')]({'where':{'id':_0x4591be[_0x1de9('0x2d')]['messageId']},'include':[{'model':db[_0xd578f7+_0x1de9('0x62')],'as':'Interaction'},{'model':db[_0xd578f7+_0xae9705],'as':'Account'}]});})['then'](function(_0x3b9932){if(_[_0x1de9('0x10')](_0x3b9932)){throw new Error(_0xd578f7+_0x1de9('0x63'));}_0x2f3078=_0x3b9932;return _0x3b9932[_0x1de9('0x64')]({'read':0x0,'readAt':null,'UserId':null});})['then'](function(){var _0x1f3d7f={'uniqueid':_0x44b450+'.'+_0x2f3078['id']+'.'+_0x2f3078[_0x1de9('0x62')]['id'],'FromUserId':_0x4591be['user']['id'],'type':'queue','ToUserId':_0x46da79['id']};_0x1f3d7f[_0xd578f7+_0x1de9('0x6f')]=_0x2f3078['id'];_0x1f3d7f[_0xd578f7+_0x1de9('0x70')]=_0x2f3078[_0x1de9('0x62')]['id'];_0x1f3d7f['From'+_0xd578f7+_0xae9705+'Id']=_0x2f3078[_0x1de9('0x5e')]['id'];return db[_0xd578f7+_0x1de9('0x67')]['create'](_0x1f3d7f);})[_0x1de9('0x16')](function(){return respondWithRpcPromise(_0x1de9('0x68'),{'channel':_0x44b450,'interaction':_0x2f3078['Interaction'],'message':_0x2f3078,'account':_0x2f3078[_0x1de9('0x5e')],'applications':[{'id':0x0,'priority':0x1,'app':_0x1de9('0x6d'),'appdata':_0x46da79[_0x1de9('0xe')]+','+(_0x2f3078['Account']['agentTransferTimeout']||0x12c),'interval':_0x1de9('0x71')}]},routingClient);})[_0x1de9('0x16')](respondWithResult(_0x41200f,null))[_0x1de9('0x17')](handleError(_0x41200f,null));};
\ No newline at end of file
index d2a7245..4020731 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5cec=['express','Router','../../config/environment','./schedule.controller','get','index','/:id','isAuthenticated','show','/:id/run','run','post','create','update','delete','exports','multer','path','connect-timeout'];(function(_0x34c8be,_0x4d141a){var _0x172338=function(_0x543991){while(--_0x543991){_0x34c8be['push'](_0x34c8be['shift']());}};_0x172338(++_0x4d141a);}(_0x5cec,0x1eb));var _0xc5ce=function(_0x579eec,_0x462d25){_0x579eec=_0x579eec-0x0;var _0x3eef63=_0x5cec[_0x579eec];return _0x3eef63;};'use strict';var multer=require(_0xc5ce('0x0'));var util=require('util');var path=require(_0xc5ce('0x1'));var timeout=require(_0xc5ce('0x2'));var express=require(_0xc5ce('0x3'));var router=express[_0xc5ce('0x4')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xc5ce('0x5'));var controller=require(_0xc5ce('0x6'));router[_0xc5ce('0x7')]('/',auth['isAuthenticated'](),controller[_0xc5ce('0x8')]);router['get'](_0xc5ce('0x9'),auth[_0xc5ce('0xa')](),controller[_0xc5ce('0xb')]);router['get'](_0xc5ce('0xc'),auth['isAuthenticated'](),controller[_0xc5ce('0xd')]);router[_0xc5ce('0xe')]('/',auth['isAuthenticated'](),controller[_0xc5ce('0xf')]);router['put'](_0xc5ce('0x9'),auth[_0xc5ce('0xa')](),controller[_0xc5ce('0x10')]);router[_0xc5ce('0x11')]('/:id',auth[_0xc5ce('0xa')](),controller['destroy']);module[_0xc5ce('0x12')]=router;
\ No newline at end of file
+var _0x1453=['express','Router','../../components/interaction/service','../../config/environment','index','get','/:id','isAuthenticated','show','/:id/run','run','post','create','update','delete','destroy','exports','multer','path','connect-timeout'];(function(_0x436b0f,_0x2bee47){var _0x8c8df9=function(_0x570653){while(--_0x570653){_0x436b0f['push'](_0x436b0f['shift']());}};_0x8c8df9(++_0x2bee47);}(_0x1453,0x1a1));var _0x3145=function(_0x48affa,_0x52ed60){_0x48affa=_0x48affa-0x0;var _0x4ee41d=_0x1453[_0x48affa];return _0x4ee41d;};'use strict';var multer=require(_0x3145('0x0'));var util=require('util');var path=require(_0x3145('0x1'));var timeout=require(_0x3145('0x2'));var express=require(_0x3145('0x3'));var router=express[_0x3145('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x3145('0x5'));var config=require(_0x3145('0x6'));var controller=require('./schedule.controller');router['get']('/',auth['isAuthenticated'](),controller[_0x3145('0x7')]);router[_0x3145('0x8')](_0x3145('0x9'),auth[_0x3145('0xa')](),controller[_0x3145('0xb')]);router[_0x3145('0x8')](_0x3145('0xc'),auth[_0x3145('0xa')](),controller[_0x3145('0xd')]);router[_0x3145('0xe')]('/',auth[_0x3145('0xa')](),controller[_0x3145('0xf')]);router['put'](_0x3145('0x9'),auth[_0x3145('0xa')](),controller[_0x3145('0x10')]);router[_0x3145('0x11')](_0x3145('0x9'),auth['isAuthenticated'](),controller[_0x3145('0x12')]);module[_0x3145('0x13')]=router;
\ No newline at end of file
index fe4316f..97ca8b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xddbb=['DATE','years','months','weeks','days','minutes','ENUM','csv','pdf','xlsx','custom','TEXT','exports','STRING','BOOLEAN'];(function(_0x24e19d,_0x3ceab9){var _0x265a3b=function(_0x47c166){while(--_0x47c166){_0x24e19d['push'](_0x24e19d['shift']());}};_0x265a3b(++_0x3ceab9);}(_0xddbb,0x75));var _0xbddb=function(_0x28019d,_0x575211){_0x28019d=_0x28019d-0x0;var _0x3c6e60=_0xddbb[_0x28019d];return _0x3c6e60;};'use strict';var Sequelize=require('sequelize');module[_0xbddb('0x0')]={'name':{'type':Sequelize[_0xbddb('0x1')],'allowNull':![]},'description':{'type':Sequelize[_0xbddb('0x1')]},'active':{'type':Sequelize[_0xbddb('0x2')],'allowNull':![],'defaultValue':![]},'cron':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'0\x200\x20*\x20*\x20*'},'startAt':{'type':Sequelize[_0xbddb('0x3')],'allowNull':![]},'endAt':{'type':Sequelize['DATE'],'allowNull':![]},'subtractNumber':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1,'validate':{'min':0x1}},'subtractUnit':{'type':Sequelize['ENUM'](_0xbddb('0x4'),'quarters',_0xbddb('0x5'),_0xbddb('0x6'),_0xbddb('0x7'),'hours',_0xbddb('0x8')),'allowNull':![],'defaultValue':_0xbddb('0x7')},'output':{'type':Sequelize[_0xbddb('0x9')](_0xbddb('0xa'),_0xbddb('0xb'),_0xbddb('0xc')),'allowNull':![],'defaultValue':_0xbddb('0xa')},'type':{'type':Sequelize['ENUM'](_0xbddb('0xd'),'default'),'allowNull':![],'defaultValue':_0xbddb('0xd')},'sendMail':{'type':Sequelize[_0xbddb('0x2')],'defaultValue':![]},'email':{'type':Sequelize[_0xbddb('0x1')]},'cc':{'type':Sequelize[_0xbddb('0xe')]},'bcc':{'type':Sequelize[_0xbddb('0xe')]},'sendIfEmpty':{'type':Sequelize[_0xbddb('0x2')],'defaultValue':!![]}};
\ No newline at end of file
+var _0xd862=['xlsx','custom','default','TEXT','sequelize','exports','BOOLEAN','STRING','0\x200\x20*\x20*\x20*','DATE','ENUM','years','quarters','months','weeks','days','hours'];(function(_0x1f27df,_0x4f1a64){var _0x286ee2=function(_0x255ea7){while(--_0x255ea7){_0x1f27df['push'](_0x1f27df['shift']());}};_0x286ee2(++_0x4f1a64);}(_0xd862,0x1f1));var _0x2d86=function(_0x38ced4,_0x24263f){_0x38ced4=_0x38ced4-0x0;var _0x547c07=_0xd862[_0x38ced4];return _0x547c07;};'use strict';var Sequelize=require(_0x2d86('0x0'));module[_0x2d86('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![]},'description':{'type':Sequelize['STRING']},'active':{'type':Sequelize[_0x2d86('0x2')],'allowNull':![],'defaultValue':![]},'cron':{'type':Sequelize[_0x2d86('0x3')],'allowNull':![],'defaultValue':_0x2d86('0x4')},'startAt':{'type':Sequelize[_0x2d86('0x5')],'allowNull':![]},'endAt':{'type':Sequelize['DATE'],'allowNull':![]},'subtractNumber':{'type':Sequelize['INTEGER'],'allowNull':![],'defaultValue':0x1,'validate':{'min':0x1}},'subtractUnit':{'type':Sequelize[_0x2d86('0x6')](_0x2d86('0x7'),_0x2d86('0x8'),_0x2d86('0x9'),_0x2d86('0xa'),_0x2d86('0xb'),_0x2d86('0xc'),'minutes'),'allowNull':![],'defaultValue':_0x2d86('0xb')},'output':{'type':Sequelize[_0x2d86('0x6')]('csv','pdf',_0x2d86('0xd')),'allowNull':![],'defaultValue':'csv'},'type':{'type':Sequelize[_0x2d86('0x6')](_0x2d86('0xe'),_0x2d86('0xf')),'allowNull':![],'defaultValue':_0x2d86('0xe')},'sendMail':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'email':{'type':Sequelize['STRING']},'cc':{'type':Sequelize[_0x2d86('0x10')]},'bcc':{'type':Sequelize['TEXT']},'sendIfEmpty':{'type':Sequelize[_0x2d86('0x2')],'defaultValue':!![]}};
\ No newline at end of file
index bc2f2b4..0b7c44b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc51a=['fields','length','hasOwnProperty','limit','order','sort','where','filters','pick','merge','type','key','filter','options','count','includeAll','include','findAll','show','params','rawAttributes','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','find','autoAssociation','update','destroy','run','../../config/schedule','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','status','end','json','offset','set','Content-Range','apply','reject','then','get','UserProfileResource','sendStatus','error','stack','name','send','index','Schedule','model','query','keys','intersection','attributes'];(function(_0x2288c1,_0x2b8d64){var _0x180a01=function(_0x3117b8){while(--_0x3117b8){_0x2288c1['push'](_0x2288c1['shift']());}};_0x180a01(++_0x2b8d64);}(_0xc51a,0x6c));var _0xac51=function(_0x65d89,_0x387a0d){_0x65d89=_0x65d89-0x0;var _0x6f6e3c=_0xc51a[_0x65d89];return _0x6f6e3c;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xac51('0x0'));var rp=require(_0xac51('0x1'));var moment=require(_0xac51('0x2'));var BPromise=require(_0xac51('0x3'));var Mustache=require(_0xac51('0x4'));var util=require(_0xac51('0x5'));var path=require(_0xac51('0x6'));var sox=require(_0xac51('0x7'));var csv=require(_0xac51('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xac51('0x9'));var jsforce=require(_0xac51('0xa'));var deskjs=require(_0xac51('0xb'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0xac51('0xc'));var authService=require(_0xac51('0xd'));var hardwareService=require(_0xac51('0xe'));var Redis=require('ioredis');var qs=require(_0xac51('0xf'));var logger=require(_0xac51('0x10'))('api');var utils=require(_0xac51('0x11'));var config=require('../../config/environment');var db=require(_0xac51('0x12'))['db'];function respondWithStatusCode(_0x7f9f48,_0xbd4d7e){_0xbd4d7e=_0xbd4d7e||0xcc;return function(_0x37f873){if(_0x37f873){return _0x7f9f48['sendStatus'](_0xbd4d7e);}return _0x7f9f48[_0xac51('0x13')](_0xbd4d7e)[_0xac51('0x14')]();};}function respondWithResult(_0x384d54,_0x4cb31c){_0x4cb31c=_0x4cb31c||0xc8;return function(_0x206d7c){if(_0x206d7c){return _0x384d54['status'](_0x4cb31c)[_0xac51('0x15')](_0x206d7c);}};}function respondWithFilteredResult(_0xc01538,_0x4c8816){return function(_0x3402cf){if(_0x3402cf){var _0x10ca4e=_0x3402cf['count'],_0x488fab=_0x4c8816[_0xac51('0x16')],_0x1f894b=_0x4c8816['offset']+_0x4c8816['limit'],_0x247253;if(_0x1f894b>=_0x10ca4e){_0x1f894b=_0x10ca4e;_0x247253=0xc8;}else{_0x247253=0xce;}_0xc01538[_0xac51('0x13')](_0x247253);return _0xc01538[_0xac51('0x17')](_0xac51('0x18'),_0x488fab+'-'+_0x1f894b+'/'+_0x10ca4e)[_0xac51('0x15')](_0x3402cf);}return null;};}function patchUpdates(_0x295018){return function(_0x31e94c){try{jsonpatch[_0xac51('0x19')](_0x31e94c,_0x295018,!![]);}catch(_0x4f679f){return BPromise[_0xac51('0x1a')](_0x4f679f);}return _0x31e94c['save']();};}function saveUpdates(_0x211e6d,_0x2e0c5a){return function(_0x1a77de){if(_0x1a77de){return _0x1a77de['update'](_0x211e6d)['then'](function(_0x4bb86c){return _0x4bb86c;});}return null;};}function removeEntity(_0x304e8c,_0x25888a){return function(_0x3341b8){if(_0x3341b8){return _0x3341b8['destroy']()[_0xac51('0x1b')](function(){var _0x5793ef=_0x3341b8[_0xac51('0x1c')]({'plain':!![]});var _0x20d5c3='Scheduler';return db[_0xac51('0x1d')]['destroy']({'where':{'type':_0x20d5c3,'resourceId':_0x5793ef['id']}})[_0xac51('0x1b')](function(){return _0x3341b8;});})[_0xac51('0x1b')](function(){_0x304e8c[_0xac51('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4879ce,_0x32607d){return function(_0x1563d5){if(!_0x1563d5){_0x4879ce[_0xac51('0x1e')](0x194);}return _0x1563d5;};}function handleError(_0x375d13,_0x4099af){_0x4099af=_0x4099af||0x1f4;return function(_0x1c960b){logger[_0xac51('0x1f')](_0x1c960b[_0xac51('0x20')]);if(_0x1c960b[_0xac51('0x21')]){delete _0x1c960b[_0xac51('0x21')];}_0x375d13['status'](_0x4099af)[_0xac51('0x22')](_0x1c960b);};}exports[_0xac51('0x23')]=function(_0x55b00b,_0x35b79b){var _0x401d18={},_0x187677={},_0x399e24={'count':0x0,'rows':[]};var _0x151776=db[_0xac51('0x24')]['rawAttributes'];_0x187677[_0xac51('0x25')]=_['keys'](_0x151776);_0x187677[_0xac51('0x26')]=_[_0xac51('0x27')](_0x55b00b[_0xac51('0x26')]);_0x187677['filters']=_[_0xac51('0x28')](_0x187677[_0xac51('0x25')],_0x187677[_0xac51('0x26')]);_0x401d18[_0xac51('0x29')]=_['intersection'](_0x187677[_0xac51('0x25')],qs[_0xac51('0x2a')](_0x55b00b[_0xac51('0x26')][_0xac51('0x2a')]));_0x401d18[_0xac51('0x29')]=_0x401d18['attributes'][_0xac51('0x2b')]?_0x401d18[_0xac51('0x29')]:_0x187677[_0xac51('0x25')];if(!_0x55b00b[_0xac51('0x26')][_0xac51('0x2c')]('nolimit')){_0x401d18[_0xac51('0x2d')]=qs[_0xac51('0x2d')](_0x55b00b[_0xac51('0x26')]['limit']);_0x401d18[_0xac51('0x16')]=qs[_0xac51('0x16')](_0x55b00b[_0xac51('0x26')][_0xac51('0x16')]);}_0x401d18[_0xac51('0x2e')]=qs['sort'](_0x55b00b[_0xac51('0x26')][_0xac51('0x2f')]);_0x401d18[_0xac51('0x30')]=qs[_0xac51('0x31')](_[_0xac51('0x32')](_0x55b00b[_0xac51('0x26')],_0x187677[_0xac51('0x31')]));if(_0x55b00b[_0xac51('0x26')]['filter']){_0x401d18[_0xac51('0x30')]=_[_0xac51('0x33')](_0x401d18[_0xac51('0x30')],{'$or':_['map'](_0x151776,function(_0x25281e){if(_0x25281e[_0xac51('0x34')][_0xac51('0x35')]!=='VIRTUAL'){var _0x50aea1={};_0x50aea1[_0x25281e['field']]={'$like':'%'+_0x55b00b[_0xac51('0x26')][_0xac51('0x36')]+'%'};return _0x50aea1;}})});}_0x401d18=_[_0xac51('0x33')]({},_0x401d18,_0x55b00b[_0xac51('0x37')]);var _0x25b1dd={'where':_0x401d18[_0xac51('0x30')]};return db[_0xac51('0x24')][_0xac51('0x38')](_0x25b1dd)[_0xac51('0x1b')](function(_0x325829){_0x399e24[_0xac51('0x38')]=_0x325829;if(_0x55b00b[_0xac51('0x26')][_0xac51('0x39')]){_0x401d18[_0xac51('0x3a')]=[{'all':!![]}];}return db[_0xac51('0x24')][_0xac51('0x3b')](_0x401d18);})[_0xac51('0x1b')](function(_0x44c985){_0x399e24['rows']=_0x44c985;return _0x399e24;})[_0xac51('0x1b')](respondWithFilteredResult(_0x35b79b,_0x401d18))['catch'](handleError(_0x35b79b,null));};exports[_0xac51('0x3c')]=function(_0x24c34c,_0x32c759){var _0x777f1b={'raw':![],'where':{'id':_0x24c34c[_0xac51('0x3d')]['id']}},_0x1b29ec={};_0x1b29ec[_0xac51('0x25')]=_[_0xac51('0x27')](db[_0xac51('0x24')][_0xac51('0x3e')]);_0x1b29ec[_0xac51('0x26')]=_['keys'](_0x24c34c[_0xac51('0x26')]);_0x1b29ec[_0xac51('0x31')]=_[_0xac51('0x28')](_0x1b29ec[_0xac51('0x25')],_0x1b29ec[_0xac51('0x26')]);_0x777f1b[_0xac51('0x29')]=_[_0xac51('0x28')](_0x1b29ec[_0xac51('0x25')],qs['fields'](_0x24c34c[_0xac51('0x26')][_0xac51('0x2a')]));_0x777f1b['attributes']=_0x777f1b[_0xac51('0x29')][_0xac51('0x2b')]?_0x777f1b[_0xac51('0x29')]:_0x1b29ec['model'];if(_0x24c34c['query'][_0xac51('0x39')]){_0x777f1b['include']=[{'all':!![]}];}_0x777f1b=_[_0xac51('0x33')]({},_0x777f1b,_0x24c34c[_0xac51('0x37')]);return db['Schedule']['find'](_0x777f1b)['then'](handleEntityNotFound(_0x32c759,null))['then'](respondWithResult(_0x32c759,null))[_0xac51('0x3f')](handleError(_0x32c759,null));};exports[_0xac51('0x40')]=function(_0x42e90a,_0x558f74){return db['Schedule'][_0xac51('0x40')](_0x42e90a[_0xac51('0x41')],{})[_0xac51('0x1b')](function(_0x1e9d8c){var _0x13171c=_0x42e90a[_0xac51('0x42')][_0xac51('0x1c')]({'plain':!![]});if(!_0x13171c)throw new Error(_0xac51('0x43'));if(_0x13171c['role']===_0xac51('0x42')){var _0xcc9df2=_0x1e9d8c[_0xac51('0x1c')]({'plain':!![]});var _0x10722f='Scheduler';return db[_0xac51('0x44')][_0xac51('0x45')]({'where':{'name':_0x10722f,'userProfileId':_0x13171c['userProfileId']},'raw':!![]})[_0xac51('0x1b')](function(_0x4958cc){if(_0x4958cc&&_0x4958cc[_0xac51('0x46')]===0x0){return db[_0xac51('0x1d')][_0xac51('0x40')]({'name':_0xcc9df2[_0xac51('0x21')],'resourceId':_0xcc9df2['id'],'type':_0x4958cc[_0xac51('0x21')],'sectionId':_0x4958cc['id']},{})[_0xac51('0x1b')](function(){return _0x1e9d8c;});}else{return _0x1e9d8c;}})[_0xac51('0x3f')](function(_0x5866e8){logger[_0xac51('0x1f')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x5866e8);throw _0x5866e8;});}return _0x1e9d8c;})[_0xac51('0x1b')](respondWithResult(_0x558f74,0xc9))[_0xac51('0x3f')](handleError(_0x558f74,null));};exports[_0xac51('0x47')]=function(_0x2cd7b2,_0x3b2c66){if(_0x2cd7b2[_0xac51('0x41')]['id']){delete _0x2cd7b2[_0xac51('0x41')]['id'];}return db['Schedule']['find']({'where':{'id':_0x2cd7b2[_0xac51('0x3d')]['id']}})[_0xac51('0x1b')](handleEntityNotFound(_0x3b2c66,null))['then'](saveUpdates(_0x2cd7b2[_0xac51('0x41')],null))['then'](respondWithResult(_0x3b2c66,null))['catch'](handleError(_0x3b2c66,null));};exports[_0xac51('0x48')]=function(_0x4ddc8c,_0x316630){return db['Schedule'][_0xac51('0x45')]({'where':{'id':_0x4ddc8c[_0xac51('0x3d')]['id']}})[_0xac51('0x1b')](handleEntityNotFound(_0x316630,null))[_0xac51('0x1b')](removeEntity(_0x316630,null))[_0xac51('0x3f')](handleError(_0x316630,null));};exports[_0xac51('0x49')]=function(_0x435c67,_0x4f7c4e,_0x194ffc){var _0x16c7f5=require(_0xac51('0x4a'));return db[_0xac51('0x24')][_0xac51('0x45')]({'where':{'id':_0x435c67[_0xac51('0x3d')]['id']},'raw':!![]})['then'](handleEntityNotFound(_0x4f7c4e,null))[_0xac51('0x1b')](function(){_0x16c7f5['run'](_0x435c67[_0xac51('0x3d')]['id']);})[_0xac51('0x1b')](respondWithStatusCode(_0x4f7c4e,null))['catch'](handleError(_0x4f7c4e,null));};
\ No newline at end of file
+var _0x88a9=['autoAssociation','catch','error','run','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','get','Scheduler','UserProfileResource','sendStatus','stack','name','send','index','Schedule','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','where','filters','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','show','params','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId'];(function(_0xdbce01,_0x552d7d){var _0x4751ef=function(_0xcd8c37){while(--_0xcd8c37){_0xdbce01['push'](_0xdbce01['shift']());}};_0x4751ef(++_0x552d7d);}(_0x88a9,0x106));var _0x988a=function(_0x22fa7e,_0x147793){_0x22fa7e=_0x22fa7e-0x0;var _0x1874ed=_0x88a9[_0x22fa7e];return _0x1874ed;};'use strict';var pdf=require(_0x988a('0x0'));var emlformat=require(_0x988a('0x1'));var rimraf=require(_0x988a('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x988a('0x3'));var rp=require(_0x988a('0x4'));var moment=require('moment');var BPromise=require(_0x988a('0x5'));var Mustache=require(_0x988a('0x6'));var util=require(_0x988a('0x7'));var path=require(_0x988a('0x8'));var sox=require(_0x988a('0x9'));var csv=require(_0x988a('0xa'));var ejs=require(_0x988a('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x988a('0xc'));var crypto=require(_0x988a('0xd'));var jsforce=require(_0x988a('0xe'));var deskjs=require(_0x988a('0xf'));var toCsv=require(_0x988a('0xa'));var querystring=require(_0x988a('0x10'));var Papa=require(_0x988a('0x11'));var authService=require('../../components/auth/service');var hardwareService=require(_0x988a('0x12'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0x988a('0x13'))(_0x988a('0x14'));var utils=require(_0x988a('0x15'));var config=require(_0x988a('0x16'));var db=require(_0x988a('0x17'))['db'];function respondWithStatusCode(_0x17c6e9,_0x551fb8){_0x551fb8=_0x551fb8||0xcc;return function(_0x1c5ad0){if(_0x1c5ad0){return _0x17c6e9['sendStatus'](_0x551fb8);}return _0x17c6e9[_0x988a('0x18')](_0x551fb8)[_0x988a('0x19')]();};}function respondWithResult(_0x49bf09,_0x211d58){_0x211d58=_0x211d58||0xc8;return function(_0x20dc5c){if(_0x20dc5c){return _0x49bf09['status'](_0x211d58)[_0x988a('0x1a')](_0x20dc5c);}};}function respondWithFilteredResult(_0x26e4fe,_0x3b06bb){return function(_0x494adc){if(_0x494adc){var _0x76763e=_0x494adc[_0x988a('0x1b')],_0x51d365=_0x3b06bb[_0x988a('0x1c')],_0x4b4307=_0x3b06bb[_0x988a('0x1c')]+_0x3b06bb['limit'],_0x53a42b;if(_0x4b4307>=_0x76763e){_0x4b4307=_0x76763e;_0x53a42b=0xc8;}else{_0x53a42b=0xce;}_0x26e4fe['status'](_0x53a42b);return _0x26e4fe[_0x988a('0x1d')](_0x988a('0x1e'),_0x51d365+'-'+_0x4b4307+'/'+_0x76763e)[_0x988a('0x1a')](_0x494adc);}return null;};}function patchUpdates(_0x42b077){return function(_0x2cc403){try{jsonpatch[_0x988a('0x1f')](_0x2cc403,_0x42b077,!![]);}catch(_0x4b714b){return BPromise[_0x988a('0x20')](_0x4b714b);}return _0x2cc403[_0x988a('0x21')]();};}function saveUpdates(_0x143d08,_0x261cdc){return function(_0x3d9388){if(_0x3d9388){return _0x3d9388[_0x988a('0x22')](_0x143d08)[_0x988a('0x23')](function(_0x3a6599){return _0x3a6599;});}return null;};}function removeEntity(_0x3d5dc0,_0x2eb0cc){return function(_0x236160){if(_0x236160){return _0x236160[_0x988a('0x24')]()[_0x988a('0x23')](function(){var _0x509497=_0x236160[_0x988a('0x25')]({'plain':!![]});var _0x85a11c=_0x988a('0x26');return db[_0x988a('0x27')]['destroy']({'where':{'type':_0x85a11c,'resourceId':_0x509497['id']}})[_0x988a('0x23')](function(){return _0x236160;});})['then'](function(){_0x3d5dc0[_0x988a('0x18')](0xcc)[_0x988a('0x19')]();});}};}function handleEntityNotFound(_0x2b1640,_0x53d796){return function(_0x578248){if(!_0x578248){_0x2b1640[_0x988a('0x28')](0x194);}return _0x578248;};}function handleError(_0x2fc495,_0x2de8e4){_0x2de8e4=_0x2de8e4||0x1f4;return function(_0x1c33ff){logger['error'](_0x1c33ff[_0x988a('0x29')]);if(_0x1c33ff[_0x988a('0x2a')]){delete _0x1c33ff[_0x988a('0x2a')];}_0x2fc495[_0x988a('0x18')](_0x2de8e4)[_0x988a('0x2b')](_0x1c33ff);};}exports[_0x988a('0x2c')]=function(_0x349b3f,_0x15313e){var _0x2deb4b={},_0x531e8f={},_0x482f73={'count':0x0,'rows':[]};var _0x59532e=db[_0x988a('0x2d')][_0x988a('0x2e')];_0x531e8f[_0x988a('0x2f')]=_[_0x988a('0x30')](_0x59532e);_0x531e8f['query']=_[_0x988a('0x30')](_0x349b3f[_0x988a('0x31')]);_0x531e8f['filters']=_[_0x988a('0x32')](_0x531e8f[_0x988a('0x2f')],_0x531e8f[_0x988a('0x31')]);_0x2deb4b[_0x988a('0x33')]=_[_0x988a('0x32')](_0x531e8f[_0x988a('0x2f')],qs[_0x988a('0x34')](_0x349b3f[_0x988a('0x31')]['fields']));_0x2deb4b[_0x988a('0x33')]=_0x2deb4b[_0x988a('0x33')][_0x988a('0x35')]?_0x2deb4b[_0x988a('0x33')]:_0x531e8f[_0x988a('0x2f')];if(!_0x349b3f['query'][_0x988a('0x36')](_0x988a('0x37'))){_0x2deb4b[_0x988a('0x38')]=qs[_0x988a('0x38')](_0x349b3f[_0x988a('0x31')][_0x988a('0x38')]);_0x2deb4b[_0x988a('0x1c')]=qs['offset'](_0x349b3f[_0x988a('0x31')][_0x988a('0x1c')]);}_0x2deb4b['order']=qs['sort'](_0x349b3f[_0x988a('0x31')][_0x988a('0x39')]);_0x2deb4b[_0x988a('0x3a')]=qs[_0x988a('0x3b')](_[_0x988a('0x3c')](_0x349b3f['query'],_0x531e8f['filters']));if(_0x349b3f[_0x988a('0x31')][_0x988a('0x3d')]){_0x2deb4b[_0x988a('0x3a')]=_[_0x988a('0x3e')](_0x2deb4b[_0x988a('0x3a')],{'$or':_[_0x988a('0x3f')](_0x59532e,function(_0x39da2d){if(_0x39da2d[_0x988a('0x40')][_0x988a('0x41')]!==_0x988a('0x42')){var _0x264461={};_0x264461[_0x39da2d[_0x988a('0x43')]]={'$like':'%'+_0x349b3f['query']['filter']+'%'};return _0x264461;}})});}_0x2deb4b=_[_0x988a('0x3e')]({},_0x2deb4b,_0x349b3f[_0x988a('0x44')]);var _0x26076c={'where':_0x2deb4b[_0x988a('0x3a')]};return db[_0x988a('0x2d')][_0x988a('0x1b')](_0x26076c)[_0x988a('0x23')](function(_0x48b970){_0x482f73[_0x988a('0x1b')]=_0x48b970;if(_0x349b3f[_0x988a('0x31')][_0x988a('0x45')]){_0x2deb4b[_0x988a('0x46')]=[{'all':!![]}];}return db[_0x988a('0x2d')][_0x988a('0x47')](_0x2deb4b);})[_0x988a('0x23')](function(_0x3ecd97){_0x482f73[_0x988a('0x48')]=_0x3ecd97;return _0x482f73;})[_0x988a('0x23')](respondWithFilteredResult(_0x15313e,_0x2deb4b))['catch'](handleError(_0x15313e,null));};exports[_0x988a('0x49')]=function(_0x47de37,_0x5d5f96){var _0x205485={'raw':![],'where':{'id':_0x47de37[_0x988a('0x4a')]['id']}},_0x1d770f={};_0x1d770f['model']=_[_0x988a('0x30')](db[_0x988a('0x2d')][_0x988a('0x2e')]);_0x1d770f['query']=_[_0x988a('0x30')](_0x47de37[_0x988a('0x31')]);_0x1d770f[_0x988a('0x3b')]=_[_0x988a('0x32')](_0x1d770f['model'],_0x1d770f[_0x988a('0x31')]);_0x205485[_0x988a('0x33')]=_[_0x988a('0x32')](_0x1d770f[_0x988a('0x2f')],qs[_0x988a('0x34')](_0x47de37[_0x988a('0x31')][_0x988a('0x34')]));_0x205485[_0x988a('0x33')]=_0x205485[_0x988a('0x33')][_0x988a('0x35')]?_0x205485[_0x988a('0x33')]:_0x1d770f[_0x988a('0x2f')];if(_0x47de37[_0x988a('0x31')][_0x988a('0x45')]){_0x205485[_0x988a('0x46')]=[{'all':!![]}];}_0x205485=_[_0x988a('0x3e')]({},_0x205485,_0x47de37[_0x988a('0x44')]);return db['Schedule'][_0x988a('0x4b')](_0x205485)[_0x988a('0x23')](handleEntityNotFound(_0x5d5f96,null))[_0x988a('0x23')](respondWithResult(_0x5d5f96,null))['catch'](handleError(_0x5d5f96,null));};exports['create']=function(_0x3f6529,_0x2f8c7c){return db['Schedule'][_0x988a('0x4c')](_0x3f6529[_0x988a('0x4d')],{})[_0x988a('0x23')](function(_0x2e1ebb){var _0x31c8db=_0x3f6529[_0x988a('0x4e')][_0x988a('0x25')]({'plain':!![]});if(!_0x31c8db)throw new Error(_0x988a('0x4f'));if(_0x31c8db['role']===_0x988a('0x4e')){var _0x3f9202=_0x2e1ebb[_0x988a('0x25')]({'plain':!![]});var _0x4f85a7='Scheduler';return db[_0x988a('0x50')]['find']({'where':{'name':_0x4f85a7,'userProfileId':_0x31c8db[_0x988a('0x51')]},'raw':!![]})[_0x988a('0x23')](function(_0x4cf2e2){if(_0x4cf2e2&&_0x4cf2e2[_0x988a('0x52')]===0x0){return db[_0x988a('0x27')][_0x988a('0x4c')]({'name':_0x3f9202[_0x988a('0x2a')],'resourceId':_0x3f9202['id'],'type':_0x4cf2e2[_0x988a('0x2a')],'sectionId':_0x4cf2e2['id']},{})[_0x988a('0x23')](function(){return _0x2e1ebb;});}else{return _0x2e1ebb;}})[_0x988a('0x53')](function(_0x1b8db6){logger[_0x988a('0x54')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x1b8db6);throw _0x1b8db6;});}return _0x2e1ebb;})['then'](respondWithResult(_0x2f8c7c,0xc9))['catch'](handleError(_0x2f8c7c,null));};exports[_0x988a('0x22')]=function(_0x1dff69,_0x417499){if(_0x1dff69['body']['id']){delete _0x1dff69[_0x988a('0x4d')]['id'];}return db['Schedule'][_0x988a('0x4b')]({'where':{'id':_0x1dff69[_0x988a('0x4a')]['id']}})[_0x988a('0x23')](handleEntityNotFound(_0x417499,null))[_0x988a('0x23')](saveUpdates(_0x1dff69['body'],null))[_0x988a('0x23')](respondWithResult(_0x417499,null))[_0x988a('0x53')](handleError(_0x417499,null));};exports[_0x988a('0x24')]=function(_0x4a27d5,_0xc4e460){return db[_0x988a('0x2d')][_0x988a('0x4b')]({'where':{'id':_0x4a27d5[_0x988a('0x4a')]['id']}})[_0x988a('0x23')](handleEntityNotFound(_0xc4e460,null))[_0x988a('0x23')](removeEntity(_0xc4e460,null))[_0x988a('0x53')](handleError(_0xc4e460,null));};exports[_0x988a('0x55')]=function(_0x51e7ed,_0x5b70b1,_0x314a6e){var _0x2ffc8b=require('../../config/schedule');return db[_0x988a('0x2d')][_0x988a('0x4b')]({'where':{'id':_0x51e7ed[_0x988a('0x4a')]['id']},'raw':!![]})['then'](handleEntityNotFound(_0x5b70b1,null))['then'](function(){_0x2ffc8b[_0x988a('0x55')](_0x51e7ed['params']['id']);})['then'](respondWithStatusCode(_0x5b70b1,null))[_0x988a('0x53')](handleError(_0x5b70b1,null));};
\ No newline at end of file
index dd70f7d..f450e8a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x29b8=['api','moment','exports','define','Schedule','tools_schedules','lodash','../../config/logger'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x29b8,0x11e));var _0x829b=function(_0x37b3e5,_0x33b516){_0x37b3e5=_0x37b3e5-0x0;var _0x207f20=_0x29b8[_0x37b3e5];return _0x207f20;};'use strict';var _=require(_0x829b('0x0'));var util=require('util');var logger=require(_0x829b('0x1'))(_0x829b('0x2'));var moment=require(_0x829b('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require('./schedule.attributes');module[_0x829b('0x4')]=function(_0x5f3bf,_0x545730){return _0x5f3bf[_0x829b('0x5')](_0x829b('0x6'),attributes,{'tableName':_0x829b('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x14d8=['lodash','util','api','moment','bluebird','request-promise','./schedule.attributes','exports','define','Schedule'];(function(_0x119880,_0x4f291f){var _0x4a1707=function(_0x4e88c2){while(--_0x4e88c2){_0x119880['push'](_0x119880['shift']());}};_0x4a1707(++_0x4f291f);}(_0x14d8,0x168));var _0x814d=function(_0x27af45,_0x1b57aa){_0x27af45=_0x27af45-0x0;var _0x18df21=_0x14d8[_0x27af45];return _0x18df21;};'use strict';var _=require(_0x814d('0x0'));var util=require(_0x814d('0x1'));var logger=require('../../config/logger')(_0x814d('0x2'));var moment=require(_0x814d('0x3'));var BPromise=require(_0x814d('0x4'));var rp=require(_0x814d('0x5'));var attributes=require(_0x814d('0x6'));module[_0x814d('0x7')]=function(_0x50cc27,_0x4f7625){return _0x50cc27[_0x814d('0x8')](_0x814d('0x9'),attributes,{'tableName':'tools_schedules','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5481032..ab0a427 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaedd=['message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','rpc','../../config/environment','jayson/promise','client','http','request','then','info','request\x20sent','debug','stringify','error','code','Schedule,\x20%s,\x20%s'];(function(_0x3d2832,_0x14f82c){var _0x1a8d2a=function(_0x3b2053){while(--_0x3b2053){_0x3d2832['push'](_0x3d2832['shift']());}};_0x1a8d2a(++_0x14f82c);}(_0xaedd,0xab));var _0xdaed=function(_0x32b3e5,_0x206a65){_0x32b3e5=_0x32b3e5-0x0;var _0x3c1ad8=_0xaedd[_0x32b3e5];return _0x3c1ad8;};'use strict';var _=require(_0xdaed('0x0'));var util=require(_0xdaed('0x1'));var moment=require(_0xdaed('0x2'));var BPromise=require(_0xdaed('0x3'));var rs=require(_0xdaed('0x4'));var fs=require('fs');var Redis=require(_0xdaed('0x5'));var db=require(_0xdaed('0x6'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xdaed('0x7'));var config=require(_0xdaed('0x8'));var jayson=require(_0xdaed('0x9'));var client=jayson[_0xdaed('0xa')][_0xdaed('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x3682b2,_0x2bfce3,_0x30af6a){return new BPromise(function(_0x516521,_0x394ee0){return client[_0xdaed('0xc')](_0x3682b2,_0x30af6a)[_0xdaed('0xd')](function(_0x381d35){logger[_0xdaed('0xe')]('Schedule,\x20%s,\x20%s',_0x2bfce3,_0xdaed('0xf'));logger[_0xdaed('0x10')]('Schedule,\x20%s,\x20%s,\x20%s',_0x2bfce3,_0xdaed('0xf'),JSON[_0xdaed('0x11')](_0x381d35));if(_0x381d35[_0xdaed('0x12')]){if(_0x381d35['error'][_0xdaed('0x13')]===0x1f4){logger['error'](_0xdaed('0x14'),_0x2bfce3,_0x381d35[_0xdaed('0x12')][_0xdaed('0x15')]);return _0x394ee0(_0x381d35[_0xdaed('0x12')][_0xdaed('0x15')]);}logger[_0xdaed('0x12')](_0xdaed('0x14'),_0x2bfce3,_0x381d35['error']['message']);return _0x516521(_0x381d35[_0xdaed('0x12')][_0xdaed('0x15')]);}else{logger[_0xdaed('0xe')](_0xdaed('0x14'),_0x2bfce3,'request\x20sent');_0x516521(_0x381d35[_0xdaed('0x16')]['message']);}})[_0xdaed('0x17')](function(_0x286aeb){logger['error'](_0xdaed('0x14'),_0x2bfce3,_0x286aeb);_0x394ee0(_0x286aeb);});});}
\ No newline at end of file
+var _0x1c4d=['moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','jayson/promise','client','http','request','info','Schedule,\x20%s,\x20%s','request\x20sent','debug','Schedule,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util'];(function(_0x587bca,_0x3b71bc){var _0x2bebc4=function(_0x186f50){while(--_0x186f50){_0x587bca['push'](_0x587bca['shift']());}};_0x2bebc4(++_0x3b71bc);}(_0x1c4d,0x1b3));var _0xd1c4=function(_0x522ef1,_0x1ff255){_0x522ef1=_0x522ef1-0x0;var _0x29aa2c=_0x1c4d[_0x522ef1];return _0x29aa2c;};'use strict';var _=require(_0xd1c4('0x0'));var util=require(_0xd1c4('0x1'));var moment=require(_0xd1c4('0x2'));var BPromise=require(_0xd1c4('0x3'));var rs=require(_0xd1c4('0x4'));var fs=require('fs');var Redis=require(_0xd1c4('0x5'));var db=require('../../mysqldb')['db'];var utils=require(_0xd1c4('0x6'));var logger=require(_0xd1c4('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0xd1c4('0x8'));var client=jayson[_0xd1c4('0x9')][_0xd1c4('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5d0118,_0x50e2d7,_0x5411db){return new BPromise(function(_0x39fc52,_0x47fd83){return client[_0xd1c4('0xb')](_0x5d0118,_0x5411db)['then'](function(_0x10e3f4){logger[_0xd1c4('0xc')](_0xd1c4('0xd'),_0x50e2d7,_0xd1c4('0xe'));logger[_0xd1c4('0xf')](_0xd1c4('0x10'),_0x50e2d7,_0xd1c4('0xe'),JSON[_0xd1c4('0x11')](_0x10e3f4));if(_0x10e3f4[_0xd1c4('0x12')]){if(_0x10e3f4['error'][_0xd1c4('0x13')]===0x1f4){logger[_0xd1c4('0x12')](_0xd1c4('0xd'),_0x50e2d7,_0x10e3f4[_0xd1c4('0x12')]['message']);return _0x47fd83(_0x10e3f4[_0xd1c4('0x12')][_0xd1c4('0x14')]);}logger[_0xd1c4('0x12')](_0xd1c4('0xd'),_0x50e2d7,_0x10e3f4[_0xd1c4('0x12')]['message']);return _0x39fc52(_0x10e3f4['error']['message']);}else{logger[_0xd1c4('0xc')](_0xd1c4('0xd'),_0x50e2d7,_0xd1c4('0xe'));_0x39fc52(_0x10e3f4[_0xd1c4('0x15')][_0xd1c4('0x14')]);}})[_0xd1c4('0x16')](function(_0x3ccdfe){logger['error'](_0xd1c4('0xd'),_0x50e2d7,_0x3ccdfe);_0x47fd83(_0x3ccdfe);});});}
\ No newline at end of file
index 1239bad..af91679 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcfb3=['update','exports','util','path','Router','../../components/auth/service','../../components/interaction/service','./setting.controller','get','isAuthenticated','index','/:id','show','/:id/logo','getLogo','getLogoLogin','/:id/gdpr','gdpr','getPreferred','diskStorage','join','root','format','%s%s','logo','extname','originalname','post','single','file','addLogo','server/files/images/logos/','logologin','/:id/logo_login','addLogoLogin','preferred','/:id/preferred','addPreferred','put'];(function(_0x26f220,_0x4e7559){var _0x2ec28e=function(_0x505fe0){while(--_0x505fe0){_0x26f220['push'](_0x26f220['shift']());}};_0x2ec28e(++_0x4e7559);}(_0xcfb3,0x13a));var _0x3cfb=function(_0x404e12,_0xae822d){_0x404e12=_0x404e12-0x0;var _0x2bb863=_0xcfb3[_0x404e12];return _0x2bb863;};'use strict';var multer=require('multer');var util=require(_0x3cfb('0x0'));var path=require(_0x3cfb('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x3cfb('0x2')]();var auth=require(_0x3cfb('0x3'));var interaction=require(_0x3cfb('0x4'));var config=require('../../config/environment');var controller=require(_0x3cfb('0x5'));router[_0x3cfb('0x6')]('/',auth[_0x3cfb('0x7')](),controller[_0x3cfb('0x8')]);router[_0x3cfb('0x6')](_0x3cfb('0x9'),controller[_0x3cfb('0xa')]);router['get'](_0x3cfb('0xb'),controller[_0x3cfb('0xc')]);router['get']('/:id/logo_login',controller[_0x3cfb('0xd')]);router['get'](_0x3cfb('0xe'),controller[_0x3cfb('0xf')]);router[_0x3cfb('0x6')]('/:id/preferred',controller[_0x3cfb('0x10')]);var upload=multer({'storage':multer[_0x3cfb('0x11')]({'destination':function(_0x15ec69,_0x171813,_0x410dd3){_0x410dd3(null,path[_0x3cfb('0x12')](config[_0x3cfb('0x13')],'server/files/images/logos/'));},'filename':function(_0x21b765,_0x20b7ab,_0x2021ab){_0x2021ab(null,util[_0x3cfb('0x14')](_0x3cfb('0x15'),_0x3cfb('0x16'),path[_0x3cfb('0x17')](_0x20b7ab[_0x3cfb('0x18')])));}})});router[_0x3cfb('0x19')]('/:id/logo',upload[_0x3cfb('0x1a')](_0x3cfb('0x1b')),controller[_0x3cfb('0x1c')]);var upload=multer({'storage':multer[_0x3cfb('0x11')]({'destination':function(_0x5e98d9,_0x27d4ba,_0x10f703){_0x10f703(null,path['join'](config[_0x3cfb('0x13')],_0x3cfb('0x1d')));},'filename':function(_0x40fb7c,_0x3489ee,_0x3de834){_0x3de834(null,util['format'](_0x3cfb('0x15'),_0x3cfb('0x1e'),path[_0x3cfb('0x17')](_0x3489ee[_0x3cfb('0x18')])));}})});router[_0x3cfb('0x19')](_0x3cfb('0x1f'),upload[_0x3cfb('0x1a')](_0x3cfb('0x1b')),controller[_0x3cfb('0x20')]);var upload=multer({'storage':multer[_0x3cfb('0x11')]({'destination':function(_0x4dfa75,_0x235fa8,_0x18a61b){_0x18a61b(null,path[_0x3cfb('0x12')](config[_0x3cfb('0x13')],'server/files/images/logos/'));},'filename':function(_0x25101f,_0x41116d,_0x124eab){_0x124eab(null,util['format']('%s%s',_0x3cfb('0x21'),path[_0x3cfb('0x17')](_0x41116d[_0x3cfb('0x18')])));}})});router[_0x3cfb('0x19')](_0x3cfb('0x22'),upload['single']('file'),controller[_0x3cfb('0x23')]);router[_0x3cfb('0x24')](_0x3cfb('0x9'),auth[_0x3cfb('0x7')](),controller[_0x3cfb('0x25')]);module[_0x3cfb('0x26')]=router;
\ No newline at end of file
+var _0x2cde=['addPreferred','put','/:id','isAuthenticated','update','exports','multer','path','connect-timeout','express','../../components/interaction/service','../../config/environment','./setting.controller','index','get','show','/:id/logo','getLogo','/:id/logo_login','getLogoLogin','/:id/gdpr','gdpr','getPreferred','diskStorage','join','root','server/files/images/logos/','%s%s','logo','extname','originalname','post','single','addLogo','format','logologin','addLogoLogin','file'];(function(_0x4daebf,_0x26cb9c){var _0x266949=function(_0x26b26d){while(--_0x26b26d){_0x4daebf['push'](_0x4daebf['shift']());}};_0x266949(++_0x26cb9c);}(_0x2cde,0x1f4));var _0xe2cd=function(_0x42968e,_0x3bea04){_0x42968e=_0x42968e-0x0;var _0xe76974=_0x2cde[_0x42968e];return _0xe76974;};'use strict';var multer=require(_0xe2cd('0x0'));var util=require('util');var path=require(_0xe2cd('0x1'));var timeout=require(_0xe2cd('0x2'));var express=require(_0xe2cd('0x3'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xe2cd('0x4'));var config=require(_0xe2cd('0x5'));var controller=require(_0xe2cd('0x6'));router['get']('/',auth['isAuthenticated'](),controller[_0xe2cd('0x7')]);router[_0xe2cd('0x8')]('/:id',controller[_0xe2cd('0x9')]);router[_0xe2cd('0x8')](_0xe2cd('0xa'),controller[_0xe2cd('0xb')]);router[_0xe2cd('0x8')](_0xe2cd('0xc'),controller[_0xe2cd('0xd')]);router[_0xe2cd('0x8')](_0xe2cd('0xe'),controller[_0xe2cd('0xf')]);router[_0xe2cd('0x8')]('/:id/preferred',controller[_0xe2cd('0x10')]);var upload=multer({'storage':multer[_0xe2cd('0x11')]({'destination':function(_0x28c487,_0x2dec58,_0x362be8){_0x362be8(null,path[_0xe2cd('0x12')](config[_0xe2cd('0x13')],_0xe2cd('0x14')));},'filename':function(_0x2321c2,_0x5601a9,_0x4d8a88){_0x4d8a88(null,util['format'](_0xe2cd('0x15'),_0xe2cd('0x16'),path[_0xe2cd('0x17')](_0x5601a9[_0xe2cd('0x18')])));}})});router[_0xe2cd('0x19')](_0xe2cd('0xa'),upload[_0xe2cd('0x1a')]('file'),controller[_0xe2cd('0x1b')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0xbe75d6,_0x1d37c2,_0x44e788){_0x44e788(null,path[_0xe2cd('0x12')](config[_0xe2cd('0x13')],_0xe2cd('0x14')));},'filename':function(_0xda9655,_0x10ec2b,_0x598d5d){_0x598d5d(null,util[_0xe2cd('0x1c')](_0xe2cd('0x15'),_0xe2cd('0x1d'),path['extname'](_0x10ec2b['originalname'])));}})});router['post'](_0xe2cd('0xc'),upload[_0xe2cd('0x1a')]('file'),controller[_0xe2cd('0x1e')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x11ed87,_0x2a8ef2,_0x8c3eaa){_0x8c3eaa(null,path[_0xe2cd('0x12')](config[_0xe2cd('0x13')],_0xe2cd('0x14')));},'filename':function(_0x37ba42,_0x5ceef1,_0x351cc2){_0x351cc2(null,util[_0xe2cd('0x1c')](_0xe2cd('0x15'),'preferred',path[_0xe2cd('0x17')](_0x5ceef1[_0xe2cd('0x18')])));}})});router[_0xe2cd('0x19')]('/:id/preferred',upload[_0xe2cd('0x1a')](_0xe2cd('0x1f')),controller[_0xe2cd('0x20')]);router[_0xe2cd('0x21')](_0xe2cd('0x22'),auth[_0xe2cd('0x23')](),controller[_0xe2cd('0x24')]);module[_0xe2cd('0x25')]=router;
\ No newline at end of file
index 666e0c4..ea863b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9512=['sequelize','exports','INTEGER','min_internal','min_mailbox','/var/opt/motion2/server/files/sounds/converted','STRING','BOOLEAN','alternate'];(function(_0xf317e7,_0x57e0e2){var _0x312775=function(_0x123dd2){while(--_0x123dd2){_0xf317e7['push'](_0xf317e7['shift']());}};_0x312775(++_0x57e0e2);}(_0x9512,0x75));var _0x2951=function(_0x16972f,_0x24951d){_0x16972f=_0x16972f-0x0;var _0x3e2509=_0x9512[_0x16972f];return _0x3e2509;};'use strict';var Sequelize=require(_0x2951('0x0'));module[_0x2951('0x1')]={'min_internal':{'type':Sequelize[_0x2951('0x2')](0xb),'unique':_0x2951('0x3'),'defaultValue':0x3e8},'min_mailbox':{'type':Sequelize[_0x2951('0x2')](0xb),'unique':_0x2951('0x4'),'defaultValue':0x3e8},'agi_port':{'type':Sequelize[_0x2951('0x2')](0xb),'defaultValue':0x11dd},'soundPath':{'type':Sequelize['STRING'],'defaultValue':_0x2951('0x5')},'logo':{'type':Sequelize[_0x2951('0x6')]},'defaultLogo':{'type':Sequelize[_0x2951('0x7')],'defaultValue':!![]},'loginLogo':{'type':Sequelize[_0x2951('0x6')]},'defaultLoginLogo':{'type':Sequelize[_0x2951('0x7')],'defaultValue':!![]},'headerWhiteLabel':{'type':Sequelize[_0x2951('0x6')]},'defaultHeaderWhiteLabel':{'type':Sequelize[_0x2951('0x7')],'defaultValue':!![]},'securePassword':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'firstSetup':{'type':Sequelize[_0x2951('0x7')],'defaultValue':!![]},'stunaddr':{'type':Sequelize[_0x2951('0x6')]},'turnaddr':{'type':Sequelize[_0x2951('0x6')]},'turnusername':{'type':Sequelize[_0x2951('0x6')]},'turnpassword':{'type':Sequelize[_0x2951('0x6')]},'pageTitle':{'type':Sequelize[_0x2951('0x6')]},'defaultPageTitle':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'callRecordingEncryption':{'type':Sequelize[_0x2951('0x7')],'defaultValue':![]},'passwordExpiresDays':{'type':Sequelize[_0x2951('0x2')](0xb),'defaultValue':0x5a},'phoneBarAutoUpdater':{'type':Sequelize[_0x2951('0x7')],'defaultValue':!![]},'phoneBarAutoUpdaterUrl':{'type':Sequelize[_0x2951('0x6')],'defaultValue':'https://www.xcally.com/bar/phonebar/autoupdater.xml'},'enableEmailPreview':{'type':Sequelize[_0x2951('0x7')],'defaultValue':![]},'split':{'type':Sequelize[_0x2951('0x7')],'defaultValue':!![]},'splitSizeCsv':{'type':Sequelize[_0x2951('0x2')],'defaultValue':0x1388},'splitSizePdf':{'type':Sequelize[_0x2951('0x2')],'defaultValue':0x1388},'splitSizeXlsx':{'type':Sequelize[_0x2951('0x2')],'defaultValue':0x1388},'messagesAlignment':{'type':Sequelize['STRING'],'defaultValue':_0x2951('0x8')},'chatTimeout':{'type':Sequelize[_0x2951('0x2')],'defaultValue':0x1e},'phoneBarRememberMeEnabled':{'type':Sequelize[_0x2951('0x7')],'defaultValue':!![]},'preferred':{'type':Sequelize[_0x2951('0x6')]},'defaultPreferred':{'type':Sequelize[_0x2951('0x7')],'defaultValue':!![]},'rtlSupport':{'type':Sequelize[_0x2951('0x7')],'defaultValue':![]}};
\ No newline at end of file
+var _0xb03e=['STRING','/var/opt/motion2/server/files/sounds/converted','BOOLEAN','https://www.xcally.com/bar/phonebar/autoupdater.xml','alternate','exports','INTEGER','min_internal','min_mailbox'];(function(_0x13ff97,_0x2f1e42){var _0x182ae7=function(_0x4e153c){while(--_0x4e153c){_0x13ff97['push'](_0x13ff97['shift']());}};_0x182ae7(++_0x2f1e42);}(_0xb03e,0x1eb));var _0xeb03=function(_0x37e132,_0x5b10c4){_0x37e132=_0x37e132-0x0;var _0x662027=_0xb03e[_0x37e132];return _0x662027;};'use strict';var Sequelize=require('sequelize');module[_0xeb03('0x0')]={'min_internal':{'type':Sequelize[_0xeb03('0x1')](0xb),'unique':_0xeb03('0x2'),'defaultValue':0x3e8},'min_mailbox':{'type':Sequelize[_0xeb03('0x1')](0xb),'unique':_0xeb03('0x3'),'defaultValue':0x3e8},'agi_port':{'type':Sequelize[_0xeb03('0x1')](0xb),'defaultValue':0x11dd},'soundPath':{'type':Sequelize[_0xeb03('0x4')],'defaultValue':_0xeb03('0x5')},'logo':{'type':Sequelize[_0xeb03('0x4')]},'defaultLogo':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'loginLogo':{'type':Sequelize[_0xeb03('0x4')]},'defaultLoginLogo':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'headerWhiteLabel':{'type':Sequelize['STRING']},'defaultHeaderWhiteLabel':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'securePassword':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'firstSetup':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'stunaddr':{'type':Sequelize[_0xeb03('0x4')]},'turnaddr':{'type':Sequelize[_0xeb03('0x4')]},'turnusername':{'type':Sequelize[_0xeb03('0x4')]},'turnpassword':{'type':Sequelize['STRING']},'pageTitle':{'type':Sequelize[_0xeb03('0x4')]},'defaultPageTitle':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'callRecordingEncryption':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':![]},'passwordExpiresDays':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x5a},'phoneBarAutoUpdater':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'phoneBarAutoUpdaterUrl':{'type':Sequelize['STRING'],'defaultValue':_0xeb03('0x7')},'enableEmailPreview':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':![]},'split':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'splitSizeCsv':{'type':Sequelize[_0xeb03('0x1')],'defaultValue':0x1388},'splitSizePdf':{'type':Sequelize[_0xeb03('0x1')],'defaultValue':0x1388},'splitSizeXlsx':{'type':Sequelize[_0xeb03('0x1')],'defaultValue':0x1388},'messagesAlignment':{'type':Sequelize[_0xeb03('0x4')],'defaultValue':_0xeb03('0x8')},'chatTimeout':{'type':Sequelize[_0xeb03('0x1')],'defaultValue':0x1e},'phoneBarRememberMeEnabled':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'preferred':{'type':Sequelize[_0xeb03('0x4')]},'defaultPreferred':{'type':Sequelize[_0xeb03('0x6')],'defaultValue':!![]},'rtlSupport':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index 64d9b53..fb7402b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd663=['upperFirst','custom','default_loginLogo.png','ValidationError','Logo\x20not\x20found','gdpr','securePassword','addPreferred','getPreferred','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','lodash','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','jayson/promise','http','request','then','info','Setting,\x20%s,\x20%s','Setting,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','sendStatus','stack','name','send','index','rawAttributes','keys','query','filters','model','intersection','fields','attributes','length','hasOwnProperty','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','Setting','include','findAll','show','options','find','params','body','get','join','root','server/files/templates/stun.ejs','utf8','render','readFileSync','writeFileSync','/etc/asterisk/turn_xcally.conf','res_stun_monitor.so','Reload','res_rtp_asterisk.so','file','filename','logo','addLogoLogin','loginLogo','../../config/license/util','getLogo','getLicense','preferred','defaultLogo','defaultLoginLogo','defaultPreferred','toLower','default_logo.png','default','existsSync','Sequelize','download','getLogoLogin','server/files/images/logos'];(function(_0x3b0731,_0xcf9925){var _0x4204d7=function(_0x635ac5){while(--_0x635ac5){_0x3b0731['push'](_0x3b0731['shift']());}};_0x4204d7(++_0xcf9925);}(_0xd663,0x1ed));var _0x3d66=function(_0x4ed618,_0x29fd5f){_0x4ed618=_0x4ed618-0x0;var _0x2bb6c7=_0xd663[_0x4ed618];return _0x2bb6c7;};'use strict';var pdf=require(_0x3d66('0x0'));var emlformat=require(_0x3d66('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x3d66('0x2'));var jsonpatch=require(_0x3d66('0x3'));var rp=require(_0x3d66('0x4'));var moment=require(_0x3d66('0x5'));var BPromise=require(_0x3d66('0x6'));var Mustache=require('mustache');var util=require(_0x3d66('0x7'));var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x3d66('0x8'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x3d66('0x9'));var deskjs=require(_0x3d66('0xa'));var toCsv=require(_0x3d66('0xb'));var querystring=require(_0x3d66('0xc'));var Papa=require(_0x3d66('0xd'));var authService=require(_0x3d66('0xe'));var hardwareService=require(_0x3d66('0xf'));var Redis=require('ioredis');var qs=require(_0x3d66('0x10'));var logger=require(_0x3d66('0x11'))(_0x3d66('0x12'));var utils=require('../../config/utils');var config=require(_0x3d66('0x13'));var db=require(_0x3d66('0x14'))['db'];var jayson=require(_0x3d66('0x15'));var client=jayson['client'][_0x3d66('0x16')]({'port':0x232a});function respondWithRpcPromise(_0x223de6,_0x288693,_0x4447da,_0x5e1f6e){return new BPromise(function(_0x4007dc,_0x5a940c){var _0x15bba0=_0x5e1f6e||client;return _0x15bba0[_0x3d66('0x17')](_0x223de6,_0x4447da)[_0x3d66('0x18')](function(_0x3075e2){logger[_0x3d66('0x19')](_0x3d66('0x1a'),_0x288693,'request\x20sent');logger['debug'](_0x3d66('0x1b'),_0x288693,_0x3d66('0x1c'),JSON['stringify'](_0x3075e2));if(_0x3075e2[_0x3d66('0x1d')]){if(_0x3075e2[_0x3d66('0x1d')][_0x3d66('0x1e')]===0x1f4){logger[_0x3d66('0x1d')](_0x3d66('0x1a'),_0x288693,_0x3075e2[_0x3d66('0x1d')][_0x3d66('0x1f')]);return _0x5a940c(_0x3075e2[_0x3d66('0x1d')][_0x3d66('0x1f')]);}logger[_0x3d66('0x1d')](_0x3d66('0x1a'),_0x288693,_0x3075e2[_0x3d66('0x1d')][_0x3d66('0x1f')]);return _0x4007dc(_0x3075e2[_0x3d66('0x1d')][_0x3d66('0x1f')]);}else{logger['info'](_0x3d66('0x1a'),_0x288693,'request\x20sent');_0x4007dc(_0x3075e2[_0x3d66('0x20')][_0x3d66('0x1f')]);}})[_0x3d66('0x21')](function(_0x37ed73){logger[_0x3d66('0x1d')](_0x3d66('0x1a'),_0x288693,_0x37ed73);_0x5a940c(_0x37ed73);});});}function respondWithStatusCode(_0x1c851f,_0x1bfa81){_0x1bfa81=_0x1bfa81||0xcc;return function(_0x1eb922){if(_0x1eb922){return _0x1c851f['sendStatus'](_0x1bfa81);}return _0x1c851f[_0x3d66('0x22')](_0x1bfa81)[_0x3d66('0x23')]();};}function respondWithResult(_0x2c1779,_0x1cbf89){_0x1cbf89=_0x1cbf89||0xc8;return function(_0x47c6f1){if(_0x47c6f1){return _0x2c1779[_0x3d66('0x22')](_0x1cbf89)[_0x3d66('0x24')](_0x47c6f1);}};}function respondWithFilteredResult(_0x4302ad,_0x29819d){return function(_0x4f0d9e){if(_0x4f0d9e){var _0x402c4c=_0x4f0d9e[_0x3d66('0x25')],_0x3e6712=_0x29819d[_0x3d66('0x26')],_0x402a18=_0x29819d[_0x3d66('0x26')]+_0x29819d[_0x3d66('0x27')],_0x7350d8;if(_0x402a18>=_0x402c4c){_0x402a18=_0x402c4c;_0x7350d8=0xc8;}else{_0x7350d8=0xce;}_0x4302ad[_0x3d66('0x22')](_0x7350d8);return _0x4302ad[_0x3d66('0x28')]('Content-Range',_0x3e6712+'-'+_0x402a18+'/'+_0x402c4c)[_0x3d66('0x24')](_0x4f0d9e);}return null;};}function patchUpdates(_0x1dff3b){return function(_0x197c5e){try{jsonpatch[_0x3d66('0x29')](_0x197c5e,_0x1dff3b,!![]);}catch(_0x2b837c){return BPromise[_0x3d66('0x2a')](_0x2b837c);}return _0x197c5e[_0x3d66('0x2b')]();};}function saveUpdates(_0xabe382,_0x3044f2){return function(_0xab45d5){if(_0xab45d5){return _0xab45d5[_0x3d66('0x2c')](_0xabe382)['then'](function(_0x563dca){return _0x563dca;});}return null;};}function removeEntity(_0x3f641b,_0x19cfb1){return function(_0x279101){if(_0x279101){return _0x279101[_0x3d66('0x2d')]()[_0x3d66('0x18')](function(){_0x3f641b[_0x3d66('0x22')](0xcc)[_0x3d66('0x23')]();});}};}function handleEntityNotFound(_0x218ce8,_0x2af4b2){return function(_0x44de79){if(!_0x44de79){_0x218ce8[_0x3d66('0x2e')](0x194);}return _0x44de79;};}function handleError(_0x9424b5,_0x10bad8){_0x10bad8=_0x10bad8||0x1f4;return function(_0x216f36){logger[_0x3d66('0x1d')](_0x216f36[_0x3d66('0x2f')]);if(_0x216f36[_0x3d66('0x30')]){delete _0x216f36[_0x3d66('0x30')];}_0x9424b5[_0x3d66('0x22')](_0x10bad8)[_0x3d66('0x31')](_0x216f36);};}exports[_0x3d66('0x32')]=function(_0x13bd16,_0x443d0c){var _0x5b08a5={},_0x32ced6={},_0x5ef1b3={'count':0x0,'rows':[]};var _0xf1bcb4=db['Setting'][_0x3d66('0x33')];_0x32ced6['model']=_[_0x3d66('0x34')](_0xf1bcb4);_0x32ced6[_0x3d66('0x35')]=_['keys'](_0x13bd16[_0x3d66('0x35')]);_0x32ced6[_0x3d66('0x36')]=_['intersection'](_0x32ced6[_0x3d66('0x37')],_0x32ced6[_0x3d66('0x35')]);_0x5b08a5['attributes']=_[_0x3d66('0x38')](_0x32ced6[_0x3d66('0x37')],qs[_0x3d66('0x39')](_0x13bd16[_0x3d66('0x35')]['fields']));_0x5b08a5[_0x3d66('0x3a')]=_0x5b08a5['attributes'][_0x3d66('0x3b')]?_0x5b08a5['attributes']:_0x32ced6[_0x3d66('0x37')];if(!_0x13bd16[_0x3d66('0x35')][_0x3d66('0x3c')]('nolimit')){_0x5b08a5[_0x3d66('0x27')]=qs[_0x3d66('0x27')](_0x13bd16[_0x3d66('0x35')][_0x3d66('0x27')]);_0x5b08a5[_0x3d66('0x26')]=qs[_0x3d66('0x26')](_0x13bd16[_0x3d66('0x35')][_0x3d66('0x26')]);}_0x5b08a5[_0x3d66('0x3d')]=qs[_0x3d66('0x3e')](_0x13bd16[_0x3d66('0x35')][_0x3d66('0x3e')]);_0x5b08a5[_0x3d66('0x3f')]=qs['filters'](_[_0x3d66('0x40')](_0x13bd16[_0x3d66('0x35')],_0x32ced6[_0x3d66('0x36')]));if(_0x13bd16['query']['filter']){_0x5b08a5[_0x3d66('0x3f')]=_[_0x3d66('0x41')](_0x5b08a5[_0x3d66('0x3f')],{'$or':_[_0x3d66('0x42')](_0xf1bcb4,function(_0x283395){if(_0x283395[_0x3d66('0x43')][_0x3d66('0x44')]!==_0x3d66('0x45')){var _0x5e8d7e={};_0x5e8d7e[_0x283395[_0x3d66('0x46')]]={'$like':'%'+_0x13bd16[_0x3d66('0x35')][_0x3d66('0x47')]+'%'};return _0x5e8d7e;}})});}_0x5b08a5=_['merge']({},_0x5b08a5,_0x13bd16['options']);var _0x11712e={'where':_0x5b08a5[_0x3d66('0x3f')]};return db[_0x3d66('0x48')][_0x3d66('0x25')](_0x11712e)[_0x3d66('0x18')](function(_0x3e6308){_0x5ef1b3[_0x3d66('0x25')]=_0x3e6308;if(_0x13bd16[_0x3d66('0x35')]['includeAll']){_0x5b08a5[_0x3d66('0x49')]=[{'all':!![]}];}return db['Setting'][_0x3d66('0x4a')](_0x5b08a5);})[_0x3d66('0x18')](function(_0x13dbd0){_0x5ef1b3['rows']=_0x13dbd0;return _0x5ef1b3;})[_0x3d66('0x18')](respondWithFilteredResult(_0x443d0c,_0x5b08a5))[_0x3d66('0x21')](handleError(_0x443d0c,null));};exports[_0x3d66('0x4b')]=function(_0x3da5a2,_0x4c8c2d){var _0x5cb410={'raw':![],'where':{'id':_0x3da5a2['params']['id']}},_0x1c6575={};_0x1c6575['model']=_[_0x3d66('0x34')](db[_0x3d66('0x48')][_0x3d66('0x33')]);_0x1c6575[_0x3d66('0x35')]=_[_0x3d66('0x34')](_0x3da5a2[_0x3d66('0x35')]);_0x1c6575[_0x3d66('0x36')]=_['intersection'](_0x1c6575[_0x3d66('0x37')],_0x1c6575[_0x3d66('0x35')]);_0x5cb410[_0x3d66('0x3a')]=_[_0x3d66('0x38')](_0x1c6575[_0x3d66('0x37')],qs['fields'](_0x3da5a2[_0x3d66('0x35')][_0x3d66('0x39')]));_0x5cb410[_0x3d66('0x3a')]=_0x5cb410[_0x3d66('0x3a')][_0x3d66('0x3b')]?_0x5cb410[_0x3d66('0x3a')]:_0x1c6575[_0x3d66('0x37')];if(_0x3da5a2['query']['includeAll']){_0x5cb410['include']=[{'all':!![]}];}_0x5cb410=_[_0x3d66('0x41')]({},_0x5cb410,_0x3da5a2[_0x3d66('0x4c')]);return db['Setting'][_0x3d66('0x4d')](_0x5cb410)[_0x3d66('0x18')](handleEntityNotFound(_0x4c8c2d,null))[_0x3d66('0x18')](respondWithResult(_0x4c8c2d,null))[_0x3d66('0x21')](handleError(_0x4c8c2d,null));};exports[_0x3d66('0x2c')]=function(_0x3c1b6d,_0x17bc27,_0x39e123){var _0x30e223;return db['Setting']['find']({'where':{'id':_0x3c1b6d[_0x3d66('0x4e')]['id']}})['then'](handleEntityNotFound(_0x17bc27,null))['then'](saveUpdates(_0x3c1b6d[_0x3d66('0x4f')],null))[_0x3d66('0x18')](function(_0xc1a270){if(_0xc1a270){_0x30e223=_0xc1a270[_0x3d66('0x50')]({'plain':!![]});var _0x10694d=fs['readFileSync'](path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x3d66('0x53')),_0x3d66('0x54'));var _0x5ac044=ejs[_0x3d66('0x55')](_0x10694d,_0x30e223);var _0x320886=fs[_0x3d66('0x56')](path['join'](config['root'],'server/files/templates/turn.ejs'),_0x3d66('0x54'));var _0x8b3860=ejs[_0x3d66('0x55')](_0x320886,_0x30e223);fs[_0x3d66('0x57')]('/etc/asterisk/stun_xcally.conf',_0x5ac044);fs[_0x3d66('0x57')](_0x3d66('0x58'),_0x8b3860);return respondWithRpcPromise('Reload',_0x3d66('0x2c'),{'module':_0x3d66('0x59')});}})[_0x3d66('0x18')](function(){return respondWithRpcPromise(_0x3d66('0x5a'),_0x3d66('0x2c'),{'module':_0x3d66('0x5b')});})[_0x3d66('0x18')](function(){return _0x30e223||null;})['then'](respondWithResult(_0x17bc27,null))['catch'](handleError(_0x17bc27,null));};exports['addLogo']=function(_0x232dbf,_0x10177d,_0x2206c9){if(_0x232dbf[_0x3d66('0x5c')]&&_0x232dbf['file'][_0x3d66('0x5d')]){_0x232dbf[_0x3d66('0x4f')][_0x3d66('0x5e')]=_0x232dbf[_0x3d66('0x5c')][_0x3d66('0x5d')];}return db[_0x3d66('0x48')][_0x3d66('0x4d')]({'where':{'id':_0x232dbf[_0x3d66('0x4e')]['id']}})['then'](handleEntityNotFound(_0x10177d,null))[_0x3d66('0x18')](saveUpdates(_0x232dbf['body'],null))['then'](respondWithResult(_0x10177d,null))[_0x3d66('0x21')](handleError(_0x10177d,null));};exports[_0x3d66('0x5f')]=function(_0x172d4e,_0xa57d7a,_0x85c072){if(_0x172d4e[_0x3d66('0x5c')]&&_0x172d4e[_0x3d66('0x5c')][_0x3d66('0x5d')]){_0x172d4e[_0x3d66('0x4f')][_0x3d66('0x60')]=_0x172d4e[_0x3d66('0x5c')][_0x3d66('0x5d')];}return db['Setting'][_0x3d66('0x4d')]({'where':{'id':_0x172d4e['params']['id']}})[_0x3d66('0x18')](handleEntityNotFound(_0xa57d7a,null))['then'](saveUpdates(_0x172d4e['body'],null))[_0x3d66('0x18')](respondWithResult(_0xa57d7a,null))[_0x3d66('0x21')](handleError(_0xa57d7a,null));};var utilLicense=require(_0x3d66('0x61'));exports[_0x3d66('0x62')]=function(_0x411cf8,_0x13d75f,_0x409c3b){var _0x39e088='server/files/images/logos';var _0x3ccca9={'custom':![]};return utilLicense[_0x3d66('0x63')]()[_0x3d66('0x18')](function(_0x51e50a){if(_0x51e50a){_0x3ccca9=_0x51e50a;}return db[_0x3d66('0x48')][_0x3d66('0x4d')]({'where':{'id':_0x411cf8[_0x3d66('0x4e')]['id']},'attributes':[_0x3d66('0x5e'),_0x3d66('0x60'),_0x3d66('0x64'),_0x3d66('0x65'),_0x3d66('0x66'),_0x3d66('0x67')],'raw':!![]});})[_0x3d66('0x18')](handleEntityNotFound(_0x13d75f,null))['then'](function(_0x52a615){if(_0x52a615){var _0x1a8077=_0x52a615[_0x3d66('0x5e')]&&fs['existsSync'](path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x39e088,_[_0x3d66('0x68')](_0x52a615[_0x3d66('0x5e')])))?path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x39e088,_[_0x3d66('0x68')](_0x52a615['logo'])):path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x39e088,_['toLower'](_0x3d66('0x69')));var _0x197e1a=_0x3d66('0x6a')+_['upperFirst'](_0x3d66('0x5e'));if(_0x52a615[_0x197e1a]||!_0x3ccca9['custom']){_0x1a8077=path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x39e088,_[_0x3d66('0x68')](_0x3d66('0x69')));}if(!fs[_0x3d66('0x6b')](_0x1a8077)){throw new db[(_0x3d66('0x6c'))]['ValidationError']('Logo\x20not\x20found');}return _0x13d75f[_0x3d66('0x6d')](_0x1a8077);}})['catch'](handleError(_0x13d75f,null));};var utilLicense=require(_0x3d66('0x61'));exports[_0x3d66('0x6e')]=function(_0x3eeca9,_0x4eca49,_0x1aa8b4){var _0x294d43=_0x3d66('0x6f');var _0x4fbfab={'custom':![]};return utilLicense[_0x3d66('0x63')]()[_0x3d66('0x18')](function(_0x56f0bc){if(_0x56f0bc){_0x4fbfab=_0x56f0bc;}return db[_0x3d66('0x48')][_0x3d66('0x4d')]({'where':{'id':_0x3eeca9[_0x3d66('0x4e')]['id']},'attributes':[_0x3d66('0x5e'),_0x3d66('0x60'),'preferred',_0x3d66('0x65'),_0x3d66('0x66'),_0x3d66('0x67')],'raw':!![]});})[_0x3d66('0x18')](handleEntityNotFound(_0x4eca49,null))[_0x3d66('0x18')](function(_0x45c127){if(_0x45c127){var _0x2049ed=_0x45c127[_0x3d66('0x60')]&&fs[_0x3d66('0x6b')](path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x294d43,_[_0x3d66('0x68')](_0x45c127['loginLogo'])))?path[_0x3d66('0x51')](config['root'],_0x294d43,_[_0x3d66('0x68')](_0x45c127[_0x3d66('0x60')])):path[_0x3d66('0x51')](config['root'],_0x294d43,_[_0x3d66('0x68')]('default_loginLogo.png'));var _0x12f281=_0x3d66('0x6a')+_[_0x3d66('0x70')](_0x3d66('0x60'));if(_0x45c127[_0x12f281]||!_0x4fbfab[_0x3d66('0x71')]){_0x2049ed=path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x294d43,_[_0x3d66('0x68')](_0x3d66('0x72')));}if(!fs['existsSync'](_0x2049ed)){throw new db[(_0x3d66('0x6c'))][(_0x3d66('0x73'))](_0x3d66('0x74'));}return _0x4eca49[_0x3d66('0x6d')](_0x2049ed);}})[_0x3d66('0x21')](handleError(_0x4eca49,null));};exports[_0x3d66('0x75')]=function(_0x448f73,_0x3ca673){return db[_0x3d66('0x48')]['find']({'where':{'id':_0x448f73[_0x3d66('0x4e')]['id']},'attributes':[_0x3d66('0x76')]})[_0x3d66('0x18')](respondWithResult(_0x3ca673,null))[_0x3d66('0x21')](handleError(_0x3ca673,null));};exports[_0x3d66('0x77')]=function(_0x9f4000,_0x1ab607,_0xa939d7){if(_0x9f4000[_0x3d66('0x5c')]&&_0x9f4000[_0x3d66('0x5c')][_0x3d66('0x5d')]){_0x9f4000['body'][_0x3d66('0x64')]=_0x9f4000[_0x3d66('0x5c')]['filename'];}return db[_0x3d66('0x48')][_0x3d66('0x4d')]({'where':{'id':_0x9f4000['params']['id']}})['then'](handleEntityNotFound(_0x1ab607,null))[_0x3d66('0x18')](saveUpdates(_0x9f4000[_0x3d66('0x4f')],null))[_0x3d66('0x18')](respondWithResult(_0x1ab607,null))['catch'](handleError(_0x1ab607,null));};var utilLicense=require(_0x3d66('0x61'));exports[_0x3d66('0x78')]=function(_0x41b1c6,_0x2a48a0,_0x4ba700){var _0x2e23a2=_0x3d66('0x6f');var _0x338e56={'custom':![]};return utilLicense['getLicense']()[_0x3d66('0x18')](function(_0x1b3533){if(_0x1b3533){_0x338e56=_0x1b3533;}return db[_0x3d66('0x48')]['find']({'where':{'id':_0x41b1c6[_0x3d66('0x4e')]['id']},'attributes':['logo',_0x3d66('0x60'),_0x3d66('0x64'),_0x3d66('0x65'),'defaultLoginLogo',_0x3d66('0x67')],'raw':!![]});})[_0x3d66('0x18')](handleEntityNotFound(_0x2a48a0,null))['then'](function(_0x1dc7b5){if(_0x1dc7b5){var _0x4ed024=_0x1dc7b5[_0x3d66('0x64')]&&fs[_0x3d66('0x6b')](path[_0x3d66('0x51')](config['root'],_0x2e23a2,_[_0x3d66('0x68')](_0x1dc7b5[_0x3d66('0x64')])))?path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x2e23a2,_[_0x3d66('0x68')](_0x1dc7b5['preferred'])):path[_0x3d66('0x51')](config[_0x3d66('0x52')],_0x2e23a2,_[_0x3d66('0x68')]('default_preferred.png'));var _0xf65bd8=_0x3d66('0x6a')+_[_0x3d66('0x70')](_0x3d66('0x64'));if(_0x1dc7b5[_0xf65bd8]||!_0x338e56[_0x3d66('0x71')]||!_0x338e56['preferred']){_0x4ed024=path['join'](config[_0x3d66('0x52')],_0x2e23a2,_[_0x3d66('0x68')]('default_preferred.png'));}if(!fs[_0x3d66('0x6b')](_0x4ed024)){throw new db[(_0x3d66('0x6c'))][(_0x3d66('0x73'))]('Logo\x20not\x20found');}return _0x2a48a0[_0x3d66('0x6d')](_0x4ed024);}})[_0x3d66('0x21')](handleError(_0x2a48a0,null));};
\ No newline at end of file
+var _0xa7db=['name','send','index','Setting','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','order','sort','where','pick','filter','merge','map','type','field','options','count','include','show','params','update','find','body','get','readFileSync','join','root','server/files/templates/stun.ejs','utf8','render','/etc/asterisk/stun_xcally.conf','/etc/asterisk/turn_xcally.conf','Reload','res_stun_monitor.so','res_rtp_asterisk.so','addLogo','file','logo','filename','addLogoLogin','loginLogo','../../config/license/util','getLogo','server/files/images/logos','getLicense','preferred','defaultLogo','defaultPreferred','existsSync','toLower','default_logo.png','default','custom','ValidationError','getLogoLogin','defaultLoginLogo','default_loginLogo.png','upperFirst','Sequelize','download','gdpr','securePassword','addPreferred','getPreferred','default_preferred.png','html-pdf','eml-format','rimraf','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','jayson/promise','http','request','then','Setting,\x20%s,\x20%s','Setting,\x20%s,\x20%s,\x20%s','stringify','error','code','message','request\x20sent','result','catch','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','stack'];(function(_0x5090d4,_0x1950a7){var _0x56c310=function(_0x3d3d5c){while(--_0x3d3d5c){_0x5090d4['push'](_0x5090d4['shift']());}};_0x56c310(++_0x1950a7);}(_0xa7db,0xbf));var _0xba7d=function(_0x3c5acb,_0x35f0af){_0x3c5acb=_0x3c5acb-0x0;var _0x3e069c=_0xa7db[_0x3c5acb];return _0x3e069c;};'use strict';var pdf=require(_0xba7d('0x0'));var emlformat=require(_0xba7d('0x1'));var rimraf=require(_0xba7d('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xba7d('0x3'));var BPromise=require(_0xba7d('0x4'));var Mustache=require(_0xba7d('0x5'));var util=require(_0xba7d('0x6'));var path=require(_0xba7d('0x7'));var sox=require('sox');var csv=require(_0xba7d('0x8'));var ejs=require(_0xba7d('0x9'));var fs=require('fs');var _=require(_0xba7d('0xa'));var squel=require(_0xba7d('0xb'));var crypto=require(_0xba7d('0xc'));var jsforce=require(_0xba7d('0xd'));var deskjs=require('desk.js');var toCsv=require(_0xba7d('0x8'));var querystring=require(_0xba7d('0xe'));var Papa=require(_0xba7d('0xf'));var authService=require(_0xba7d('0x10'));var hardwareService=require(_0xba7d('0x11'));var Redis=require('ioredis');var qs=require(_0xba7d('0x12'));var logger=require(_0xba7d('0x13'))('api');var utils=require(_0xba7d('0x14'));var config=require(_0xba7d('0x15'));var db=require(_0xba7d('0x16'))['db'];var jayson=require(_0xba7d('0x17'));var client=jayson['client'][_0xba7d('0x18')]({'port':0x232a});function respondWithRpcPromise(_0xe87240,_0xb77a21,_0x7c2f13,_0x568f48){return new BPromise(function(_0x3616a2,_0x57f5f2){var _0x2db0e6=_0x568f48||client;return _0x2db0e6[_0xba7d('0x19')](_0xe87240,_0x7c2f13)[_0xba7d('0x1a')](function(_0x214019){logger['info'](_0xba7d('0x1b'),_0xb77a21,'request\x20sent');logger['debug'](_0xba7d('0x1c'),_0xb77a21,'request\x20sent',JSON[_0xba7d('0x1d')](_0x214019));if(_0x214019[_0xba7d('0x1e')]){if(_0x214019[_0xba7d('0x1e')][_0xba7d('0x1f')]===0x1f4){logger[_0xba7d('0x1e')](_0xba7d('0x1b'),_0xb77a21,_0x214019[_0xba7d('0x1e')][_0xba7d('0x20')]);return _0x57f5f2(_0x214019[_0xba7d('0x1e')][_0xba7d('0x20')]);}logger[_0xba7d('0x1e')](_0xba7d('0x1b'),_0xb77a21,_0x214019[_0xba7d('0x1e')][_0xba7d('0x20')]);return _0x3616a2(_0x214019[_0xba7d('0x1e')][_0xba7d('0x20')]);}else{logger['info'](_0xba7d('0x1b'),_0xb77a21,_0xba7d('0x21'));_0x3616a2(_0x214019[_0xba7d('0x22')][_0xba7d('0x20')]);}})[_0xba7d('0x23')](function(_0x103f35){logger[_0xba7d('0x1e')](_0xba7d('0x1b'),_0xb77a21,_0x103f35);_0x57f5f2(_0x103f35);});});}function respondWithStatusCode(_0x31dd42,_0x30e108){_0x30e108=_0x30e108||0xcc;return function(_0x2f674f){if(_0x2f674f){return _0x31dd42[_0xba7d('0x24')](_0x30e108);}return _0x31dd42[_0xba7d('0x25')](_0x30e108)[_0xba7d('0x26')]();};}function respondWithResult(_0x4faa59,_0x20cee4){_0x20cee4=_0x20cee4||0xc8;return function(_0x54e7ff){if(_0x54e7ff){return _0x4faa59[_0xba7d('0x25')](_0x20cee4)[_0xba7d('0x27')](_0x54e7ff);}};}function respondWithFilteredResult(_0x36cbd5,_0x9bdbef){return function(_0x38909f){if(_0x38909f){var _0x359ac2=_0x38909f['count'],_0x136889=_0x9bdbef['offset'],_0x417e55=_0x9bdbef[_0xba7d('0x28')]+_0x9bdbef[_0xba7d('0x29')],_0x24441c;if(_0x417e55>=_0x359ac2){_0x417e55=_0x359ac2;_0x24441c=0xc8;}else{_0x24441c=0xce;}_0x36cbd5[_0xba7d('0x25')](_0x24441c);return _0x36cbd5[_0xba7d('0x2a')](_0xba7d('0x2b'),_0x136889+'-'+_0x417e55+'/'+_0x359ac2)['json'](_0x38909f);}return null;};}function patchUpdates(_0x244233){return function(_0x524fe8){try{jsonpatch[_0xba7d('0x2c')](_0x524fe8,_0x244233,!![]);}catch(_0x2cbb2d){return BPromise[_0xba7d('0x2d')](_0x2cbb2d);}return _0x524fe8['save']();};}function saveUpdates(_0xc37911,_0x32d090){return function(_0x3298db){if(_0x3298db){return _0x3298db['update'](_0xc37911)[_0xba7d('0x1a')](function(_0x9a674){return _0x9a674;});}return null;};}function removeEntity(_0x2de38a,_0x21f892){return function(_0x55a4fe){if(_0x55a4fe){return _0x55a4fe['destroy']()[_0xba7d('0x1a')](function(){_0x2de38a['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x4339d9,_0x4443d4){return function(_0x2eae97){if(!_0x2eae97){_0x4339d9[_0xba7d('0x24')](0x194);}return _0x2eae97;};}function handleError(_0x401e2b,_0x25a34e){_0x25a34e=_0x25a34e||0x1f4;return function(_0x2172c4){logger[_0xba7d('0x1e')](_0x2172c4[_0xba7d('0x2e')]);if(_0x2172c4[_0xba7d('0x2f')]){delete _0x2172c4[_0xba7d('0x2f')];}_0x401e2b[_0xba7d('0x25')](_0x25a34e)[_0xba7d('0x30')](_0x2172c4);};}exports[_0xba7d('0x31')]=function(_0x26a22c,_0x22d462){var _0x1ccbf6={},_0x21fe30={},_0x5bd7b4={'count':0x0,'rows':[]};var _0x4140fa=db[_0xba7d('0x32')][_0xba7d('0x33')];_0x21fe30[_0xba7d('0x34')]=_[_0xba7d('0x35')](_0x4140fa);_0x21fe30['query']=_['keys'](_0x26a22c[_0xba7d('0x36')]);_0x21fe30[_0xba7d('0x37')]=_[_0xba7d('0x38')](_0x21fe30[_0xba7d('0x34')],_0x21fe30[_0xba7d('0x36')]);_0x1ccbf6['attributes']=_['intersection'](_0x21fe30[_0xba7d('0x34')],qs[_0xba7d('0x39')](_0x26a22c['query'][_0xba7d('0x39')]));_0x1ccbf6[_0xba7d('0x3a')]=_0x1ccbf6['attributes'][_0xba7d('0x3b')]?_0x1ccbf6[_0xba7d('0x3a')]:_0x21fe30['model'];if(!_0x26a22c['query']['hasOwnProperty']('nolimit')){_0x1ccbf6[_0xba7d('0x29')]=qs['limit'](_0x26a22c[_0xba7d('0x36')][_0xba7d('0x29')]);_0x1ccbf6[_0xba7d('0x28')]=qs['offset'](_0x26a22c[_0xba7d('0x36')][_0xba7d('0x28')]);}_0x1ccbf6[_0xba7d('0x3c')]=qs[_0xba7d('0x3d')](_0x26a22c[_0xba7d('0x36')][_0xba7d('0x3d')]);_0x1ccbf6[_0xba7d('0x3e')]=qs[_0xba7d('0x37')](_[_0xba7d('0x3f')](_0x26a22c[_0xba7d('0x36')],_0x21fe30['filters']));if(_0x26a22c[_0xba7d('0x36')][_0xba7d('0x40')]){_0x1ccbf6['where']=_[_0xba7d('0x41')](_0x1ccbf6[_0xba7d('0x3e')],{'$or':_[_0xba7d('0x42')](_0x4140fa,function(_0x2e09f9){if(_0x2e09f9[_0xba7d('0x43')]['key']!=='VIRTUAL'){var _0x13a3a7={};_0x13a3a7[_0x2e09f9[_0xba7d('0x44')]]={'$like':'%'+_0x26a22c[_0xba7d('0x36')][_0xba7d('0x40')]+'%'};return _0x13a3a7;}})});}_0x1ccbf6=_['merge']({},_0x1ccbf6,_0x26a22c[_0xba7d('0x45')]);var _0x31188e={'where':_0x1ccbf6[_0xba7d('0x3e')]};return db['Setting'][_0xba7d('0x46')](_0x31188e)['then'](function(_0xbd36c4){_0x5bd7b4[_0xba7d('0x46')]=_0xbd36c4;if(_0x26a22c[_0xba7d('0x36')]['includeAll']){_0x1ccbf6[_0xba7d('0x47')]=[{'all':!![]}];}return db[_0xba7d('0x32')]['findAll'](_0x1ccbf6);})['then'](function(_0x258d95){_0x5bd7b4['rows']=_0x258d95;return _0x5bd7b4;})['then'](respondWithFilteredResult(_0x22d462,_0x1ccbf6))[_0xba7d('0x23')](handleError(_0x22d462,null));};exports[_0xba7d('0x48')]=function(_0x59d661,_0x3790d6){var _0x1b1972={'raw':![],'where':{'id':_0x59d661[_0xba7d('0x49')]['id']}},_0x2b4708={};_0x2b4708[_0xba7d('0x34')]=_[_0xba7d('0x35')](db[_0xba7d('0x32')][_0xba7d('0x33')]);_0x2b4708[_0xba7d('0x36')]=_[_0xba7d('0x35')](_0x59d661[_0xba7d('0x36')]);_0x2b4708['filters']=_['intersection'](_0x2b4708['model'],_0x2b4708[_0xba7d('0x36')]);_0x1b1972[_0xba7d('0x3a')]=_['intersection'](_0x2b4708[_0xba7d('0x34')],qs[_0xba7d('0x39')](_0x59d661['query'][_0xba7d('0x39')]));_0x1b1972[_0xba7d('0x3a')]=_0x1b1972[_0xba7d('0x3a')][_0xba7d('0x3b')]?_0x1b1972[_0xba7d('0x3a')]:_0x2b4708[_0xba7d('0x34')];if(_0x59d661[_0xba7d('0x36')]['includeAll']){_0x1b1972[_0xba7d('0x47')]=[{'all':!![]}];}_0x1b1972=_[_0xba7d('0x41')]({},_0x1b1972,_0x59d661[_0xba7d('0x45')]);return db[_0xba7d('0x32')]['find'](_0x1b1972)[_0xba7d('0x1a')](handleEntityNotFound(_0x3790d6,null))[_0xba7d('0x1a')](respondWithResult(_0x3790d6,null))[_0xba7d('0x23')](handleError(_0x3790d6,null));};exports[_0xba7d('0x4a')]=function(_0x22b7ad,_0x1eda20,_0x2ed526){var _0x26800c;return db[_0xba7d('0x32')][_0xba7d('0x4b')]({'where':{'id':_0x22b7ad[_0xba7d('0x49')]['id']}})[_0xba7d('0x1a')](handleEntityNotFound(_0x1eda20,null))[_0xba7d('0x1a')](saveUpdates(_0x22b7ad[_0xba7d('0x4c')],null))[_0xba7d('0x1a')](function(_0x587f9d){if(_0x587f9d){_0x26800c=_0x587f9d[_0xba7d('0x4d')]({'plain':!![]});var _0x48cdd6=fs[_0xba7d('0x4e')](path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0xba7d('0x51')),_0xba7d('0x52'));var _0x2c006e=ejs['render'](_0x48cdd6,_0x26800c);var _0x224472=fs[_0xba7d('0x4e')](path[_0xba7d('0x4f')](config[_0xba7d('0x50')],'server/files/templates/turn.ejs'),_0xba7d('0x52'));var _0x3c415b=ejs[_0xba7d('0x53')](_0x224472,_0x26800c);fs['writeFileSync'](_0xba7d('0x54'),_0x2c006e);fs['writeFileSync'](_0xba7d('0x55'),_0x3c415b);return respondWithRpcPromise(_0xba7d('0x56'),_0xba7d('0x4a'),{'module':_0xba7d('0x57')});}})[_0xba7d('0x1a')](function(){return respondWithRpcPromise(_0xba7d('0x56'),'update',{'module':_0xba7d('0x58')});})[_0xba7d('0x1a')](function(){return _0x26800c||null;})[_0xba7d('0x1a')](respondWithResult(_0x1eda20,null))[_0xba7d('0x23')](handleError(_0x1eda20,null));};exports[_0xba7d('0x59')]=function(_0x12f9c0,_0x38495a,_0x3a586f){if(_0x12f9c0[_0xba7d('0x5a')]&&_0x12f9c0['file']['filename']){_0x12f9c0[_0xba7d('0x4c')][_0xba7d('0x5b')]=_0x12f9c0['file'][_0xba7d('0x5c')];}return db['Setting'][_0xba7d('0x4b')]({'where':{'id':_0x12f9c0[_0xba7d('0x49')]['id']}})[_0xba7d('0x1a')](handleEntityNotFound(_0x38495a,null))[_0xba7d('0x1a')](saveUpdates(_0x12f9c0[_0xba7d('0x4c')],null))[_0xba7d('0x1a')](respondWithResult(_0x38495a,null))[_0xba7d('0x23')](handleError(_0x38495a,null));};exports[_0xba7d('0x5d')]=function(_0x47180e,_0x43d984,_0x1841c9){if(_0x47180e['file']&&_0x47180e[_0xba7d('0x5a')]['filename']){_0x47180e['body'][_0xba7d('0x5e')]=_0x47180e[_0xba7d('0x5a')]['filename'];}return db[_0xba7d('0x32')][_0xba7d('0x4b')]({'where':{'id':_0x47180e['params']['id']}})['then'](handleEntityNotFound(_0x43d984,null))[_0xba7d('0x1a')](saveUpdates(_0x47180e['body'],null))['then'](respondWithResult(_0x43d984,null))[_0xba7d('0x23')](handleError(_0x43d984,null));};var utilLicense=require(_0xba7d('0x5f'));exports[_0xba7d('0x60')]=function(_0x3e17c3,_0x268ff4,_0x596db1){var _0x59218c=_0xba7d('0x61');var _0x2f2e1a={'custom':![]};return utilLicense[_0xba7d('0x62')]()[_0xba7d('0x1a')](function(_0x3f25aa){if(_0x3f25aa){_0x2f2e1a=_0x3f25aa;}return db[_0xba7d('0x32')][_0xba7d('0x4b')]({'where':{'id':_0x3e17c3[_0xba7d('0x49')]['id']},'attributes':['logo','loginLogo',_0xba7d('0x63'),_0xba7d('0x64'),'defaultLoginLogo',_0xba7d('0x65')],'raw':!![]});})['then'](handleEntityNotFound(_0x268ff4,null))[_0xba7d('0x1a')](function(_0x26948f){if(_0x26948f){var _0x14ac66=_0x26948f[_0xba7d('0x5b')]&&fs[_0xba7d('0x66')](path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0x59218c,_[_0xba7d('0x67')](_0x26948f[_0xba7d('0x5b')])))?path[_0xba7d('0x4f')](config['root'],_0x59218c,_[_0xba7d('0x67')](_0x26948f[_0xba7d('0x5b')])):path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0x59218c,_[_0xba7d('0x67')](_0xba7d('0x68')));var _0x489d07=_0xba7d('0x69')+_['upperFirst'](_0xba7d('0x5b'));if(_0x26948f[_0x489d07]||!_0x2f2e1a[_0xba7d('0x6a')]){_0x14ac66=path[_0xba7d('0x4f')](config['root'],_0x59218c,_[_0xba7d('0x67')](_0xba7d('0x68')));}if(!fs[_0xba7d('0x66')](_0x14ac66)){throw new db['Sequelize'][(_0xba7d('0x6b'))]('Logo\x20not\x20found');}return _0x268ff4['download'](_0x14ac66);}})[_0xba7d('0x23')](handleError(_0x268ff4,null));};var utilLicense=require('../../config/license/util');exports[_0xba7d('0x6c')]=function(_0x5369ea,_0x31038c,_0x10ab1b){var _0x1c2022=_0xba7d('0x61');var _0x3844c5={'custom':![]};return utilLicense['getLicense']()[_0xba7d('0x1a')](function(_0x177c6d){if(_0x177c6d){_0x3844c5=_0x177c6d;}return db[_0xba7d('0x32')][_0xba7d('0x4b')]({'where':{'id':_0x5369ea[_0xba7d('0x49')]['id']},'attributes':[_0xba7d('0x5b'),'loginLogo',_0xba7d('0x63'),'defaultLogo',_0xba7d('0x6d'),_0xba7d('0x65')],'raw':!![]});})[_0xba7d('0x1a')](handleEntityNotFound(_0x31038c,null))[_0xba7d('0x1a')](function(_0x553a6e){if(_0x553a6e){var _0xfd232c=_0x553a6e[_0xba7d('0x5e')]&&fs[_0xba7d('0x66')](path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0x1c2022,_[_0xba7d('0x67')](_0x553a6e[_0xba7d('0x5e')])))?path[_0xba7d('0x4f')](config['root'],_0x1c2022,_['toLower'](_0x553a6e[_0xba7d('0x5e')])):path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0x1c2022,_[_0xba7d('0x67')](_0xba7d('0x6e')));var _0x5451b2=_0xba7d('0x69')+_[_0xba7d('0x6f')](_0xba7d('0x5e'));if(_0x553a6e[_0x5451b2]||!_0x3844c5[_0xba7d('0x6a')]){_0xfd232c=path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0x1c2022,_['toLower'](_0xba7d('0x6e')));}if(!fs[_0xba7d('0x66')](_0xfd232c)){throw new db[(_0xba7d('0x70'))][(_0xba7d('0x6b'))]('Logo\x20not\x20found');}return _0x31038c[_0xba7d('0x71')](_0xfd232c);}})[_0xba7d('0x23')](handleError(_0x31038c,null));};exports[_0xba7d('0x72')]=function(_0x5a35c4,_0x309a08){return db[_0xba7d('0x32')]['find']({'where':{'id':_0x5a35c4[_0xba7d('0x49')]['id']},'attributes':[_0xba7d('0x73')]})[_0xba7d('0x1a')](respondWithResult(_0x309a08,null))['catch'](handleError(_0x309a08,null));};exports[_0xba7d('0x74')]=function(_0xfcae51,_0x3ee5fc,_0x481939){if(_0xfcae51[_0xba7d('0x5a')]&&_0xfcae51['file'][_0xba7d('0x5c')]){_0xfcae51[_0xba7d('0x4c')][_0xba7d('0x63')]=_0xfcae51[_0xba7d('0x5a')][_0xba7d('0x5c')];}return db[_0xba7d('0x32')]['find']({'where':{'id':_0xfcae51['params']['id']}})[_0xba7d('0x1a')](handleEntityNotFound(_0x3ee5fc,null))[_0xba7d('0x1a')](saveUpdates(_0xfcae51[_0xba7d('0x4c')],null))[_0xba7d('0x1a')](respondWithResult(_0x3ee5fc,null))['catch'](handleError(_0x3ee5fc,null));};var utilLicense=require(_0xba7d('0x5f'));exports[_0xba7d('0x75')]=function(_0xf1e163,_0x1189ae,_0x471a98){var _0x370560=_0xba7d('0x61');var _0xb1ccee={'custom':![]};return utilLicense['getLicense']()['then'](function(_0xb37237){if(_0xb37237){_0xb1ccee=_0xb37237;}return db['Setting'][_0xba7d('0x4b')]({'where':{'id':_0xf1e163[_0xba7d('0x49')]['id']},'attributes':[_0xba7d('0x5b'),_0xba7d('0x5e'),_0xba7d('0x63'),'defaultLogo',_0xba7d('0x6d'),_0xba7d('0x65')],'raw':!![]});})[_0xba7d('0x1a')](handleEntityNotFound(_0x1189ae,null))[_0xba7d('0x1a')](function(_0x43ab10){if(_0x43ab10){var _0x5ccee0=_0x43ab10[_0xba7d('0x63')]&&fs[_0xba7d('0x66')](path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0x370560,_['toLower'](_0x43ab10[_0xba7d('0x63')])))?path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0x370560,_[_0xba7d('0x67')](_0x43ab10['preferred'])):path['join'](config[_0xba7d('0x50')],_0x370560,_['toLower'](_0xba7d('0x76')));var _0x2fd0c9=_0xba7d('0x69')+_['upperFirst'](_0xba7d('0x63'));if(_0x43ab10[_0x2fd0c9]||!_0xb1ccee[_0xba7d('0x6a')]||!_0xb1ccee['preferred']){_0x5ccee0=path[_0xba7d('0x4f')](config[_0xba7d('0x50')],_0x370560,_[_0xba7d('0x67')](_0xba7d('0x76')));}if(!fs[_0xba7d('0x66')](_0x5ccee0)){throw new db[(_0xba7d('0x70'))][(_0xba7d('0x6b'))]('Logo\x20not\x20found');}return _0x1189ae[_0xba7d('0x71')](_0x5ccee0);}})[_0xba7d('0x23')](handleError(_0x1189ae,null));};
\ No newline at end of file
index 0ec70dd..16a492d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9053=['bluebird','exports','Setting','settings','lodash','../../config/logger','api','moment'];(function(_0x20a74e,_0x26c09d){var _0x513e0f=function(_0x4abe92){while(--_0x4abe92){_0x20a74e['push'](_0x20a74e['shift']());}};_0x513e0f(++_0x26c09d);}(_0x9053,0x16c));var _0x3905=function(_0x1afabf,_0x56fdcc){_0x1afabf=_0x1afabf-0x0;var _0x497ff1=_0x9053[_0x1afabf];return _0x497ff1;};'use strict';var _=require(_0x3905('0x0'));var util=require('util');var logger=require(_0x3905('0x1'))(_0x3905('0x2'));var moment=require(_0x3905('0x3'));var BPromise=require(_0x3905('0x4'));var rp=require('request-promise');var attributes=require('./setting.attributes');module[_0x3905('0x5')]=function(_0x5ec07d,_0x534b9a){return _0x5ec07d['define'](_0x3905('0x6'),attributes,{'tableName':_0x3905('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf11e=['define','Setting','settings','lodash','../../config/logger','api','moment','./setting.attributes'];(function(_0x3034be,_0x1dfa3f){var _0x4565a7=function(_0x39b68d){while(--_0x39b68d){_0x3034be['push'](_0x3034be['shift']());}};_0x4565a7(++_0x1dfa3f);}(_0xf11e,0x11b));var _0xef11=function(_0x5ebe52,_0x2a24f5){_0x5ebe52=_0x5ebe52-0x0;var _0x21440f=_0xf11e[_0x5ebe52];return _0x21440f;};'use strict';var _=require(_0xef11('0x0'));var util=require('util');var logger=require(_0xef11('0x1'))(_0xef11('0x2'));var moment=require(_0xef11('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xef11('0x4'));module['exports']=function(_0x594a7c,_0x23dbcb){return _0x594a7c[_0xef11('0x5')](_0xef11('0x6'),attributes,{'tableName':_0xef11('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1dd52f4..2fa0f33 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x395c=['then','info','Setting,\x20%s,\x20%s','debug','Setting,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','result','catch','lodash','util','moment','bluebird','../../config/utils','../../config/logger','../../config/environment','client','http'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x395c,0x8f));var _0xc395=function(_0x2ed4db,_0x5c107e){_0x2ed4db=_0x2ed4db-0x0;var _0x3b328a=_0x395c[_0x2ed4db];return _0x3b328a;};'use strict';var _=require(_0xc395('0x0'));var util=require(_0xc395('0x1'));var moment=require(_0xc395('0x2'));var BPromise=require(_0xc395('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xc395('0x4'));var logger=require(_0xc395('0x5'))('rpc');var config=require(_0xc395('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xc395('0x7')][_0xc395('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x202fe8,_0xc60d88,_0x1294d5){return new BPromise(function(_0x3af58f,_0x4391c0){return client['request'](_0x202fe8,_0x1294d5)[_0xc395('0x9')](function(_0x488057){logger[_0xc395('0xa')](_0xc395('0xb'),_0xc60d88,'request\x20sent');logger[_0xc395('0xc')](_0xc395('0xd'),_0xc60d88,_0xc395('0xe'),JSON['stringify'](_0x488057));if(_0x488057[_0xc395('0xf')]){if(_0x488057[_0xc395('0xf')]['code']===0x1f4){logger[_0xc395('0xf')]('Setting,\x20%s,\x20%s',_0xc60d88,_0x488057[_0xc395('0xf')][_0xc395('0x10')]);return _0x4391c0(_0x488057['error'][_0xc395('0x10')]);}logger[_0xc395('0xf')](_0xc395('0xb'),_0xc60d88,_0x488057['error'][_0xc395('0x10')]);return _0x3af58f(_0x488057['error']['message']);}else{logger['info']('Setting,\x20%s,\x20%s',_0xc60d88,_0xc395('0xe'));_0x3af58f(_0x488057[_0xc395('0x11')][_0xc395('0x10')]);}})[_0xc395('0x12')](function(_0x24734b){logger[_0xc395('0xf')]('Setting,\x20%s,\x20%s',_0xc60d88,_0x24734b);_0x4391c0(_0x24734b);});});}
\ No newline at end of file
+var _0x9d83=['../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','Setting,\x20%s,\x20%s','request\x20sent','debug','Setting,\x20%s,\x20%s,\x20%s','stringify','error','message','result','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb'];(function(_0x2080a3,_0x48acfa){var _0x8d7d17=function(_0x2dbc06){while(--_0x2dbc06){_0x2080a3['push'](_0x2080a3['shift']());}};_0x8d7d17(++_0x48acfa);}(_0x9d83,0x1f3));var _0x39d8=function(_0x18f137,_0x5e06b4){_0x18f137=_0x18f137-0x0;var _0x147221=_0x9d83[_0x18f137];return _0x147221;};'use strict';var _=require(_0x39d8('0x0'));var util=require(_0x39d8('0x1'));var moment=require(_0x39d8('0x2'));var BPromise=require(_0x39d8('0x3'));var rs=require(_0x39d8('0x4'));var fs=require('fs');var Redis=require(_0x39d8('0x5'));var db=require(_0x39d8('0x6'))['db'];var utils=require(_0x39d8('0x7'));var logger=require(_0x39d8('0x8'))('rpc');var config=require(_0x39d8('0x9'));var jayson=require(_0x39d8('0xa'));var client=jayson[_0x39d8('0xb')][_0x39d8('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x365be4,_0x20b101,_0x2f8b90){return new BPromise(function(_0x56cb7d,_0x4997b2){return client[_0x39d8('0xd')](_0x365be4,_0x2f8b90)['then'](function(_0x36717c){logger[_0x39d8('0xe')](_0x39d8('0xf'),_0x20b101,_0x39d8('0x10'));logger[_0x39d8('0x11')](_0x39d8('0x12'),_0x20b101,_0x39d8('0x10'),JSON[_0x39d8('0x13')](_0x36717c));if(_0x36717c[_0x39d8('0x14')]){if(_0x36717c[_0x39d8('0x14')]['code']===0x1f4){logger[_0x39d8('0x14')]('Setting,\x20%s,\x20%s',_0x20b101,_0x36717c[_0x39d8('0x14')]['message']);return _0x4997b2(_0x36717c[_0x39d8('0x14')]['message']);}logger[_0x39d8('0x14')](_0x39d8('0xf'),_0x20b101,_0x36717c[_0x39d8('0x14')][_0x39d8('0x15')]);return _0x56cb7d(_0x36717c[_0x39d8('0x14')][_0x39d8('0x15')]);}else{logger[_0x39d8('0xe')](_0x39d8('0xf'),_0x20b101,_0x39d8('0x10'));_0x56cb7d(_0x36717c[_0x39d8('0x16')]['message']);}})['catch'](function(_0x5ea468){logger[_0x39d8('0x14')]('Setting,\x20%s,\x20%s',_0x20b101,_0x5ea468);_0x4997b2(_0x5ea468);});});}
\ No newline at end of file
index a627894..41c9ac0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb079=['removeDispositions','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','./smsAccount.controller','get','isAuthenticated','describe','/:id','show','/:id/dispositions','/:id/canned_answers','getAnswers','/:id/applications','getApplications','statusGet','/:id/users','getAgents','post','create','addDisposition','addAnswer','notify','addApplications','/:id/send','send','/:id/status','status','update','delete'];(function(_0x35a779,_0x27f8fb){var _0xca723b=function(_0x298df7){while(--_0x298df7){_0x35a779['push'](_0x35a779['shift']());}};_0xca723b(++_0x27f8fb);}(_0xb079,0x133));var _0x9b07=function(_0x1ccf71,_0x4d574c){_0x1ccf71=_0x1ccf71-0x0;var _0xaaf685=_0xb079[_0x1ccf71];return _0xaaf685;};'use strict';var multer=require(_0x9b07('0x0'));var util=require(_0x9b07('0x1'));var path=require(_0x9b07('0x2'));var timeout=require('connect-timeout');var express=require(_0x9b07('0x3'));var router=express[_0x9b07('0x4')]();var auth=require(_0x9b07('0x5'));var interaction=require(_0x9b07('0x6'));var config=require('../../config/environment');var controller=require(_0x9b07('0x7'));router[_0x9b07('0x8')]('/',auth[_0x9b07('0x9')](),controller['index']);router[_0x9b07('0x8')]('/describe',auth['isAuthenticated'](),controller[_0x9b07('0xa')]);router[_0x9b07('0x8')](_0x9b07('0xb'),auth[_0x9b07('0x9')](),controller[_0x9b07('0xc')]);router[_0x9b07('0x8')](_0x9b07('0xd'),auth[_0x9b07('0x9')](),controller['getDispositions']);router['get'](_0x9b07('0xe'),auth[_0x9b07('0x9')](),controller[_0x9b07('0xf')]);router[_0x9b07('0x8')](_0x9b07('0x10'),auth[_0x9b07('0x9')](),controller[_0x9b07('0x11')]);router[_0x9b07('0x8')]('/:id/interactions',auth[_0x9b07('0x9')](),controller['getInteractions']);router[_0x9b07('0x8')]('/:id/status',controller[_0x9b07('0x12')]);router[_0x9b07('0x8')](_0x9b07('0x13'),auth[_0x9b07('0x9')](),controller[_0x9b07('0x14')]);router[_0x9b07('0x15')]('/',auth[_0x9b07('0x9')](),controller[_0x9b07('0x16')]);router[_0x9b07('0x15')](_0x9b07('0xd'),auth[_0x9b07('0x9')](),controller[_0x9b07('0x17')]);router['post'](_0x9b07('0xe'),auth[_0x9b07('0x9')](),controller[_0x9b07('0x18')]);router['post']('/:id/notify',controller[_0x9b07('0x19')]);router[_0x9b07('0x15')](_0x9b07('0x10'),auth['isAuthenticated'](),controller[_0x9b07('0x1a')]);router[_0x9b07('0x15')](_0x9b07('0x1b'),auth[_0x9b07('0x9')](),controller[_0x9b07('0x1c')]);router['post'](_0x9b07('0x1d'),controller[_0x9b07('0x1e')]);router[_0x9b07('0x15')](_0x9b07('0x13'),auth['isAuthenticated'](),controller['addAgents']);router['put'](_0x9b07('0xb'),auth['isAuthenticated'](),controller[_0x9b07('0x1f')]);router[_0x9b07('0x20')](_0x9b07('0xb'),auth[_0x9b07('0x9')](),controller['destroy']);router['delete']('/:id/dispositions',auth[_0x9b07('0x9')](),controller[_0x9b07('0x21')]);router[_0x9b07('0x20')](_0x9b07('0xe'),auth[_0x9b07('0x9')](),controller['removeAnswers']);router[_0x9b07('0x20')](_0x9b07('0x13'),auth[_0x9b07('0x9')](),controller['removeAgents']);module['exports']=router;
\ No newline at end of file
+var _0xd8af=['/:id/users','getAgents','post','create','addDisposition','/:id/notify','notify','send','status','put','delete','destroy','removeDispositions','removeAnswers','removeAgents','util','path','connect-timeout','../../components/auth/service','../../components/interaction/service','./smsAccount.controller','get','index','/describe','isAuthenticated','describe','/:id','show','/:id/dispositions','getDispositions','/:id/canned_answers','getAnswers','/:id/applications','getApplications','/:id/interactions','getInteractions','/:id/status','statusGet'];(function(_0x53fe34,_0x2a6e2b){var _0x5d124a=function(_0x438b29){while(--_0x438b29){_0x53fe34['push'](_0x53fe34['shift']());}};_0x5d124a(++_0x2a6e2b);}(_0xd8af,0x1d7));var _0xfd8a=function(_0x1126c3,_0x2b7a7d){_0x1126c3=_0x1126c3-0x0;var _0x233745=_0xd8af[_0x1126c3];return _0x233745;};'use strict';var multer=require('multer');var util=require(_0xfd8a('0x0'));var path=require(_0xfd8a('0x1'));var timeout=require(_0xfd8a('0x2'));var express=require('express');var router=express['Router']();var auth=require(_0xfd8a('0x3'));var interaction=require(_0xfd8a('0x4'));var config=require('../../config/environment');var controller=require(_0xfd8a('0x5'));router[_0xfd8a('0x6')]('/',auth['isAuthenticated'](),controller[_0xfd8a('0x7')]);router['get'](_0xfd8a('0x8'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0xa')]);router[_0xfd8a('0x6')](_0xfd8a('0xb'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0xc')]);router[_0xfd8a('0x6')](_0xfd8a('0xd'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0xe')]);router['get'](_0xfd8a('0xf'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x10')]);router['get'](_0xfd8a('0x11'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x12')]);router[_0xfd8a('0x6')](_0xfd8a('0x13'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x14')]);router[_0xfd8a('0x6')](_0xfd8a('0x15'),controller[_0xfd8a('0x16')]);router[_0xfd8a('0x6')](_0xfd8a('0x17'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x18')]);router[_0xfd8a('0x19')]('/',auth['isAuthenticated'](),controller[_0xfd8a('0x1a')]);router[_0xfd8a('0x19')](_0xfd8a('0xd'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x1b')]);router['post'](_0xfd8a('0xf'),auth['isAuthenticated'](),controller['addAnswer']);router[_0xfd8a('0x19')](_0xfd8a('0x1c'),controller[_0xfd8a('0x1d')]);router[_0xfd8a('0x19')]('/:id/applications',auth[_0xfd8a('0x9')](),controller['addApplications']);router[_0xfd8a('0x19')]('/:id/send',auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x1e')]);router[_0xfd8a('0x19')](_0xfd8a('0x15'),controller[_0xfd8a('0x1f')]);router[_0xfd8a('0x19')](_0xfd8a('0x17'),auth[_0xfd8a('0x9')](),controller['addAgents']);router[_0xfd8a('0x20')](_0xfd8a('0xb'),auth['isAuthenticated'](),controller['update']);router[_0xfd8a('0x21')]('/:id',auth['isAuthenticated'](),controller[_0xfd8a('0x22')]);router[_0xfd8a('0x21')]('/:id/dispositions',auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x23')]);router[_0xfd8a('0x21')](_0xfd8a('0xf'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x24')]);router[_0xfd8a('0x21')](_0xfd8a('0x17'),auth[_0xfd8a('0x9')](),controller[_0xfd8a('0x25')]);module['exports']=router;
\ No newline at end of file
index 64b97a0..c7fa8f5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6d2=['STRING','name','generate','ENUM','clicksend','clickatell','csc','infobip','intelepeer','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','mandatoryDispositionPauseId','setDataValue','mandatoryDisposition','sequelize'];(function(_0x4bd839,_0x1145f7){var _0x54332e=function(_0x569670){while(--_0x569670){_0x4bd839['push'](_0x4bd839['shift']());}};_0x54332e(++_0x1145f7);}(_0xc6d2,0xf6));var _0x2c6d=function(_0x1da065,_0x3a4b78){_0x1da065=_0x1da065-0x0;var _0x3e43e8=_0xc6d2[_0x1da065];return _0x3e43e8;};'use strict';var Sequelize=require(_0x2c6d('0x0'));var rs=require('randomstring');module['exports']={'name':{'type':Sequelize[_0x2c6d('0x1')],'unique':_0x2c6d('0x2'),'allowNull':![]},'key':{'type':Sequelize['STRING'],'allowNull':![]},'remote':{'type':Sequelize[_0x2c6d('0x1')],'allowNull':![]},'token':{'type':Sequelize[_0x2c6d('0x1')],'defaultValue':function(){return rs[_0x2c6d('0x3')]();}},'phone':{'type':Sequelize[_0x2c6d('0x1')]},'type':{'type':Sequelize[_0x2c6d('0x4')]('twilio','skebby','connectel',_0x2c6d('0x5'),'plivo',_0x2c6d('0x6'),_0x2c6d('0x7'),_0x2c6d('0x8'),_0x2c6d('0x9'))},'accountSid':{'type':Sequelize[_0x2c6d('0x1')]},'authId':{'type':Sequelize[_0x2c6d('0x1')]},'authToken':{'type':Sequelize[_0x2c6d('0x1')]},'smsMethod':{'type':Sequelize[_0x2c6d('0x4')]('SI','TI','GP')},'username':{'type':Sequelize['STRING']},'password':{'type':Sequelize[_0x2c6d('0x1')]},'apiKey':{'type':Sequelize[_0x2c6d('0x1')]},'senderString':{'type':Sequelize['STRING']},'deliveryReport':{'type':Sequelize[_0x2c6d('0xa')],'defaultValue':![]},'description':{'type':Sequelize['STRING']},'notificationTemplate':{'type':Sequelize[_0x2c6d('0xb')],'defaultValue':function(){return _0x2c6d('0xc');}},'notificationSound':{'type':Sequelize[_0x2c6d('0xa')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x2c6d('0xa')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x2c6d('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x2c6d('0xa')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x2c6d('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x2c6d('0xd')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'baseUrl':{'type':Sequelize[_0x2c6d('0x1')]},'mandatoryDispositionPauseId':{'type':Sequelize[_0x2c6d('0xd')],'comment':_0x2c6d('0xe')},'mandatoryDisposition':{'type':Sequelize[_0x2c6d('0xa')],'defaultValue':![],'comment':_0x2c6d('0xf'),'set':function(_0x57df31){if(!_0x57df31)this['setDataValue'](_0x2c6d('0x10'),null);this[_0x2c6d('0x11')](_0x2c6d('0x12'),_0x57df31);}}};
\ No newline at end of file
+var _0x7e47=['sequelize','exports','STRING','name','generate','ENUM','twilio','connectel','clicksend','plivo','clickatell','infobip','intelepeer','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'];(function(_0x22358c,_0x454fdd){var _0x254350=function(_0x297aa7){while(--_0x297aa7){_0x22358c['push'](_0x22358c['shift']());}};_0x254350(++_0x454fdd);}(_0x7e47,0x1a4));var _0x77e4=function(_0x3316b2,_0x3b8eb7){_0x3316b2=_0x3316b2-0x0;var _0x2ef946=_0x7e47[_0x3316b2];return _0x2ef946;};'use strict';var Sequelize=require(_0x77e4('0x0'));var rs=require('randomstring');module[_0x77e4('0x1')]={'name':{'type':Sequelize[_0x77e4('0x2')],'unique':_0x77e4('0x3'),'allowNull':![]},'key':{'type':Sequelize[_0x77e4('0x2')],'allowNull':![]},'remote':{'type':Sequelize[_0x77e4('0x2')],'allowNull':![]},'token':{'type':Sequelize[_0x77e4('0x2')],'defaultValue':function(){return rs[_0x77e4('0x4')]();}},'phone':{'type':Sequelize[_0x77e4('0x2')]},'type':{'type':Sequelize[_0x77e4('0x5')](_0x77e4('0x6'),'skebby',_0x77e4('0x7'),_0x77e4('0x8'),_0x77e4('0x9'),_0x77e4('0xa'),'csc',_0x77e4('0xb'),_0x77e4('0xc'))},'accountSid':{'type':Sequelize[_0x77e4('0x2')]},'authId':{'type':Sequelize[_0x77e4('0x2')]},'authToken':{'type':Sequelize[_0x77e4('0x2')]},'smsMethod':{'type':Sequelize[_0x77e4('0x5')]('SI','TI','GP')},'username':{'type':Sequelize[_0x77e4('0x2')]},'password':{'type':Sequelize['STRING']},'apiKey':{'type':Sequelize['STRING']},'senderString':{'type':Sequelize[_0x77e4('0x2')]},'deliveryReport':{'type':Sequelize[_0x77e4('0xd')],'defaultValue':![]},'description':{'type':Sequelize[_0x77e4('0x2')]},'notificationTemplate':{'type':Sequelize[_0x77e4('0xe')],'defaultValue':function(){return _0x77e4('0xf');}},'notificationSound':{'type':Sequelize[_0x77e4('0xd')],'defaultValue':!![]},'notificationShake':{'type':Sequelize[_0x77e4('0xd')],'defaultValue':![]},'waitForTheAssignedAgent':{'type':Sequelize[_0x77e4('0x10')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0xa},'queueTransfer':{'type':Sequelize[_0x77e4('0xd')],'defaultValue':![]},'queueTransferTimeout':{'type':Sequelize[_0x77e4('0x10')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'agentTransfer':{'type':Sequelize[_0x77e4('0xd')],'defaultValue':![]},'agentTransferTimeout':{'type':Sequelize[_0x77e4('0x10')],'validate':{'min':0x1,'max':0x20c49b},'defaultValue':0x12c},'baseUrl':{'type':Sequelize[_0x77e4('0x2')]},'mandatoryDispositionPauseId':{'type':Sequelize[_0x77e4('0x10')],'comment':_0x77e4('0x11')},'mandatoryDisposition':{'type':Sequelize[_0x77e4('0xd')],'defaultValue':![],'comment':_0x77e4('0x12'),'set':function(_0x42dc26){if(!_0x42dc26)this[_0x77e4('0x13')](_0x77e4('0x14'),null);this[_0x77e4('0x13')]('mandatoryDisposition',_0x42dc26);}}};
\ No newline at end of file
index 024ab7b..fc3834d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9261=['endpoint\x20/status\x20POST\x20/','inspect','skebby_dispatch_id','requestid','statusInt','status_code','groupName','DELIVERED','redif','error_code','DELIVERED_TO_GATEWAY','RECEIVED_BY_RECIPIENT','DELIVRD','ACCEPTD','statusGet','received\x20delivery\x20report\x20from','csc','message-id','state','addAgents','emit','userSmsAccount:save','removeAgents','isArray','userSmsAccount:remove','getAgents','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','ejs','squel','crypto','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./smsAccount.socket','register','jayson/promise','client','http','request','then','info','SmsAccount,\x20%s,\x20%s','request\x20sent','debug','SmsAccount,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','status','json','offset','limit','Content-Range','apply','reject','update','destroy','get','stack','name','send','Pause','mandatoryDispositionPause','SmsAccount','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','key','options','count','includeAll','findAll','rows','catch','show','params','include','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','SmsAccounts','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','describe','SmsAccountId','Disposition','getDispositions','findOne','length','removeDispositions','ids','getAnswers','CannedAnswer','removeAnswers','sms','SmsApplication','Applications','account','applications','orderBy','asc','CmContact','Sequelize','no\x20available\x20attributes','difference','createdAt','updatedAt','CompanyId','ListId','mobile','type','twilio','from','From','Body','messageId','MessageSid','skebby','connectel','clicksend','plivo','Text','MessageUUID','infobip','results','text','clickatell','fromNumber','replyMessageId','intelepeer','isNil','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','Contacts','DESC','omit','contact','SmsInteraction','spread','interaction','created','autoclose','push','close','unmanaged','*,*,*,*','SmsMessage','ContactId','AttachmentId','UserId','unshift','waitForTheAssignedAgent','Start','startRouting','receiveMessage','entity\x20found','SmsAccount,\x20%s,\x20%s,\x20%s,\x20%s','Content-Type','text/xml','addApplications','transaction','bulkCreate','findAndCountAll','priority','getApplications','getInteractions','Contact','User','Owner','internal','Tag','Tags','tag','to\x20is\x20mandatory','List','Messages','dataValues','log'];(function(_0x30d4b5,_0x144682){var _0x261aea=function(_0x245b91){while(--_0x245b91){_0x30d4b5['push'](_0x30d4b5['shift']());}};_0x261aea(++_0x144682);}(_0x9261,0x1de));var _0x1926=function(_0x5c7a85,_0x41dd19){_0x5c7a85=_0x5c7a85-0x0;var _0x35290f=_0x9261[_0x5c7a85];return _0x35290f;};'use strict';var pdf=require(_0x1926('0x0'));var emlformat=require(_0x1926('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x1926('0x2'));var jsonpatch=require(_0x1926('0x3'));var rp=require(_0x1926('0x4'));var moment=require('moment');var BPromise=require(_0x1926('0x5'));var Mustache=require(_0x1926('0x6'));var util=require(_0x1926('0x7'));var path=require(_0x1926('0x8'));var sox=require(_0x1926('0x9'));var csv=require('to-csv');var ejs=require(_0x1926('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x1926('0xb'));var crypto=require(_0x1926('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x1926('0xd'));var toCsv=require(_0x1926('0xe'));var querystring=require(_0x1926('0xf'));var Papa=require(_0x1926('0x10'));var authService=require(_0x1926('0x11'));var hardwareService=require(_0x1926('0x12'));var Redis=require(_0x1926('0x13'));var qs=require(_0x1926('0x14'));var logger=require(_0x1926('0x15'))(_0x1926('0x16'));var utils=require(_0x1926('0x17'));var config=require(_0x1926('0x18'));var db=require(_0x1926('0x19'))['db'];config[_0x1926('0x1a')]=_[_0x1926('0x1b')](config[_0x1926('0x1a')],{'host':_0x1926('0x1c'),'port':0x18eb});var socket=require(_0x1926('0x1d'))(new Redis(config[_0x1926('0x1a')]));require(_0x1926('0x1e'))[_0x1926('0x1f')](socket);var jayson=require(_0x1926('0x20'));var client=jayson[_0x1926('0x21')][_0x1926('0x22')]({'port':0x232c});function respondWithRpcPromise(_0x21ff67,_0x472e41,_0x53f820,_0xe13cde){return new BPromise(function(_0x348117,_0x42a80b){var _0x49fa33=_0xe13cde||client;return _0x49fa33[_0x1926('0x23')](_0x21ff67,_0x53f820)[_0x1926('0x24')](function(_0x50da1e){logger[_0x1926('0x25')](_0x1926('0x26'),_0x472e41,_0x1926('0x27'));logger[_0x1926('0x28')](_0x1926('0x29'),_0x472e41,_0x1926('0x27'),JSON[_0x1926('0x2a')](_0x50da1e));if(_0x50da1e[_0x1926('0x2b')]){if(_0x50da1e[_0x1926('0x2b')][_0x1926('0x2c')]===0x1f4){logger[_0x1926('0x2b')](_0x1926('0x26'),_0x472e41,_0x50da1e[_0x1926('0x2b')]['message']);return _0x42a80b(_0x50da1e['error'][_0x1926('0x2d')]);}logger[_0x1926('0x2b')](_0x1926('0x26'),_0x472e41,_0x50da1e[_0x1926('0x2b')][_0x1926('0x2d')]);return _0x348117(_0x50da1e[_0x1926('0x2b')][_0x1926('0x2d')]);}else{logger[_0x1926('0x25')](_0x1926('0x26'),_0x472e41,_0x1926('0x27'));_0x348117(_0x50da1e[_0x1926('0x2e')]['message']);}})['catch'](function(_0x589f52){logger['error'](_0x1926('0x26'),_0x472e41,_0x589f52);_0x42a80b(_0x589f52);});});}function respondWithStatusCode(_0xce8b91,_0x11e28e){_0x11e28e=_0x11e28e||0xcc;return function(_0x462c85){if(_0x462c85){return _0xce8b91['sendStatus'](_0x11e28e);}return _0xce8b91['status'](_0x11e28e)['end']();};}function respondWithResult(_0x3659fa,_0x142f45){_0x142f45=_0x142f45||0xc8;return function(_0x55385a){if(_0x55385a){return _0x3659fa[_0x1926('0x2f')](_0x142f45)[_0x1926('0x30')](_0x55385a);}};}function respondWithFilteredResult(_0x3cb4ee,_0x3c712b){return function(_0x3e4527){if(_0x3e4527){var _0x3bc3e2=_0x3e4527['count'],_0x267513=_0x3c712b[_0x1926('0x31')],_0xd60129=_0x3c712b[_0x1926('0x31')]+_0x3c712b[_0x1926('0x32')],_0x1c8290;if(_0xd60129>=_0x3bc3e2){_0xd60129=_0x3bc3e2;_0x1c8290=0xc8;}else{_0x1c8290=0xce;}_0x3cb4ee[_0x1926('0x2f')](_0x1c8290);return _0x3cb4ee['set'](_0x1926('0x33'),_0x267513+'-'+_0xd60129+'/'+_0x3bc3e2)[_0x1926('0x30')](_0x3e4527);}return null;};}function patchUpdates(_0x406631){return function(_0x11ecc9){try{jsonpatch[_0x1926('0x34')](_0x11ecc9,_0x406631,!![]);}catch(_0x5e28fe){return BPromise[_0x1926('0x35')](_0x5e28fe);}return _0x11ecc9['save']();};}function saveUpdates(_0x1367ff,_0x26bfd7){return function(_0x2dfb79){if(_0x2dfb79){return _0x2dfb79[_0x1926('0x36')](_0x1367ff)['then'](function(_0x18b46e){return _0x18b46e;});}return null;};}function removeEntity(_0x3ed2b3,_0x1c3664){return function(_0x4b91c3){if(_0x4b91c3){return _0x4b91c3[_0x1926('0x37')]()[_0x1926('0x24')](function(){var _0x187b1e=_0x4b91c3[_0x1926('0x38')]({'plain':!![]});var _0x39ed18='SmsAccounts';return db['UserProfileResource'][_0x1926('0x37')]({'where':{'type':_0x39ed18,'resourceId':_0x187b1e['id']}})['then'](function(){return _0x4b91c3;});})['then'](function(){_0x3ed2b3[_0x1926('0x2f')](0xcc)['end']();});}};}function handleEntityNotFound(_0x4085a0,_0x1960ef){return function(_0x300193){if(!_0x300193){_0x4085a0['sendStatus'](0x194);}return _0x300193;};}function handleError(_0x6502b,_0x318945){_0x318945=_0x318945||0x1f4;return function(_0x514886){logger['error'](_0x514886[_0x1926('0x39')]);if(_0x514886[_0x1926('0x3a')]){delete _0x514886[_0x1926('0x3a')];}_0x6502b[_0x1926('0x2f')](_0x318945)[_0x1926('0x3b')](_0x514886);};}exports['index']=function(_0x1ae6eb,_0x199e28){var _0x101a81={'include':[{'model':db[_0x1926('0x3c')],'as':_0x1926('0x3d')}]},_0x5bb3c0={},_0x3b1be0={'count':0x0,'rows':[]};var _0x286b40=db[_0x1926('0x3e')][_0x1926('0x3f')];_0x5bb3c0[_0x1926('0x40')]=_[_0x1926('0x41')](_0x286b40);_0x5bb3c0[_0x1926('0x42')]=_[_0x1926('0x41')](_0x1ae6eb[_0x1926('0x42')]);_0x5bb3c0[_0x1926('0x43')]=_[_0x1926('0x44')](_0x5bb3c0[_0x1926('0x40')],_0x5bb3c0[_0x1926('0x42')]);_0x101a81[_0x1926('0x45')]=_[_0x1926('0x44')](_0x5bb3c0['model'],qs[_0x1926('0x46')](_0x1ae6eb[_0x1926('0x42')]['fields']));_0x101a81[_0x1926('0x45')]=_0x101a81[_0x1926('0x45')]['length']?_0x101a81[_0x1926('0x45')]:_0x5bb3c0[_0x1926('0x40')];if(!_0x1ae6eb[_0x1926('0x42')][_0x1926('0x47')](_0x1926('0x48'))){_0x101a81['limit']=qs[_0x1926('0x32')](_0x1ae6eb[_0x1926('0x42')]['limit']);_0x101a81[_0x1926('0x31')]=qs['offset'](_0x1ae6eb[_0x1926('0x42')]['offset']);}_0x101a81[_0x1926('0x49')]=qs[_0x1926('0x4a')](_0x1ae6eb[_0x1926('0x42')][_0x1926('0x4a')]);_0x101a81[_0x1926('0x4b')]=qs['filters'](_[_0x1926('0x4c')](_0x1ae6eb[_0x1926('0x42')],_0x5bb3c0[_0x1926('0x43')]));if(_0x1ae6eb[_0x1926('0x42')][_0x1926('0x4d')]){_0x101a81[_0x1926('0x4b')]=_[_0x1926('0x4e')](_0x101a81[_0x1926('0x4b')],{'$or':_[_0x1926('0x4f')](_0x286b40,function(_0x5cdba8){if(_0x5cdba8['type'][_0x1926('0x50')]!=='VIRTUAL'){var _0x383c87={};_0x383c87[_0x5cdba8['field']]={'$like':'%'+_0x1ae6eb[_0x1926('0x42')][_0x1926('0x4d')]+'%'};return _0x383c87;}})});}_0x101a81=_[_0x1926('0x4e')]({},_0x101a81,_0x1ae6eb[_0x1926('0x51')]);var _0x53da9d={'where':_0x101a81[_0x1926('0x4b')]};return db[_0x1926('0x3e')][_0x1926('0x52')](_0x53da9d)[_0x1926('0x24')](function(_0x36e710){_0x3b1be0[_0x1926('0x52')]=_0x36e710;if(_0x1ae6eb['query'][_0x1926('0x53')]){_0x101a81['include']=[{'all':!![]}];}return db[_0x1926('0x3e')][_0x1926('0x54')](_0x101a81);})[_0x1926('0x24')](function(_0x470375){_0x3b1be0[_0x1926('0x55')]=_0x470375;return _0x3b1be0;})['then'](respondWithFilteredResult(_0x199e28,_0x101a81))[_0x1926('0x56')](handleError(_0x199e28,null));};exports[_0x1926('0x57')]=function(_0x33ed7b,_0x3d8d9f){var _0x3dd383={'raw':![],'where':{'id':_0x33ed7b[_0x1926('0x58')]['id']},'include':[{'model':db[_0x1926('0x3c')],'as':_0x1926('0x3d')}]},_0x49c6c8={};_0x49c6c8['model']=_['keys'](db[_0x1926('0x3e')][_0x1926('0x3f')]);_0x49c6c8['query']=_[_0x1926('0x41')](_0x33ed7b[_0x1926('0x42')]);_0x49c6c8[_0x1926('0x43')]=_['intersection'](_0x49c6c8[_0x1926('0x40')],_0x49c6c8[_0x1926('0x42')]);_0x3dd383[_0x1926('0x45')]=_[_0x1926('0x44')](_0x49c6c8['model'],qs[_0x1926('0x46')](_0x33ed7b[_0x1926('0x42')][_0x1926('0x46')]));_0x3dd383[_0x1926('0x45')]=_0x3dd383['attributes']['length']?_0x3dd383[_0x1926('0x45')]:_0x49c6c8[_0x1926('0x40')];if(_0x33ed7b[_0x1926('0x42')][_0x1926('0x53')]){_0x3dd383[_0x1926('0x59')]=[{'all':!![]}];}_0x3dd383=_[_0x1926('0x4e')]({},_0x3dd383,_0x33ed7b['options']);return db[_0x1926('0x3e')][_0x1926('0x5a')](_0x3dd383)[_0x1926('0x24')](handleEntityNotFound(_0x3d8d9f,null))[_0x1926('0x24')](respondWithResult(_0x3d8d9f,null))[_0x1926('0x56')](handleError(_0x3d8d9f,null));};exports['create']=function(_0x4a2932,_0x2017e8){return db[_0x1926('0x3e')][_0x1926('0x5b')](_0x4a2932['body'],{})['then'](function(_0x5da03f){var _0x45ba16=_0x4a2932[_0x1926('0x5c')][_0x1926('0x38')]({'plain':!![]});if(!_0x45ba16)throw new Error(_0x1926('0x5d'));if(_0x45ba16[_0x1926('0x5e')]===_0x1926('0x5c')){var _0x57850c=_0x5da03f[_0x1926('0x38')]({'plain':!![]});var _0x43a27e=_0x1926('0x5f');return db[_0x1926('0x60')][_0x1926('0x5a')]({'where':{'name':_0x43a27e,'userProfileId':_0x45ba16['userProfileId']},'raw':!![]})[_0x1926('0x24')](function(_0x3f7497){if(_0x3f7497&&_0x3f7497[_0x1926('0x61')]===0x0){return db['UserProfileResource'][_0x1926('0x5b')]({'name':_0x57850c['name'],'resourceId':_0x57850c['id'],'type':_0x3f7497['name'],'sectionId':_0x3f7497['id']},{})[_0x1926('0x24')](function(){return _0x5da03f;});}else{return _0x5da03f;}})[_0x1926('0x56')](function(_0x121373){logger[_0x1926('0x2b')](_0x1926('0x62'),_0x121373);throw _0x121373;});}return _0x5da03f;})[_0x1926('0x24')](respondWithResult(_0x2017e8,0xc9))['catch'](handleError(_0x2017e8,null));};exports[_0x1926('0x36')]=function(_0x101a96,_0x4d31ae){if(_0x101a96[_0x1926('0x63')]['id']){delete _0x101a96[_0x1926('0x63')]['id'];}return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0x101a96['params']['id']},'include':[{'model':db['Pause'],'as':'mandatoryDispositionPause'}]})[_0x1926('0x24')](handleEntityNotFound(_0x4d31ae,null))[_0x1926('0x24')](saveUpdates(_0x101a96[_0x1926('0x63')],null))[_0x1926('0x24')](respondWithResult(_0x4d31ae,null))['catch'](handleError(_0x4d31ae,null));};exports[_0x1926('0x37')]=function(_0x1ac0e4,_0x56e39e){return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0x1ac0e4['params']['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x56e39e,null))[_0x1926('0x24')](removeEntity(_0x56e39e,null))[_0x1926('0x56')](handleError(_0x56e39e,null));};exports[_0x1926('0x64')]=function(_0x17ff8f,_0x274f74){return db['SmsAccount'][_0x1926('0x64')]()[_0x1926('0x24')](respondWithResult(_0x274f74,null))[_0x1926('0x56')](handleError(_0x274f74,null));};exports['addDisposition']=function(_0xa2cac4,_0x1bca9c,_0x520270){if(_0xa2cac4[_0x1926('0x63')]['id']){delete _0xa2cac4['body']['id'];}return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0xa2cac4[_0x1926('0x58')]['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x1bca9c,null))[_0x1926('0x24')](function(_0x57924f){if(_0x57924f){_0xa2cac4[_0x1926('0x63')][_0x1926('0x65')]=_0x57924f['id'];return db[_0x1926('0x66')][_0x1926('0x5b')](_0xa2cac4[_0x1926('0x63')]);}})[_0x1926('0x24')](respondWithResult(_0x1bca9c,null))[_0x1926('0x56')](handleError(_0x1bca9c,null));};exports[_0x1926('0x67')]=function(_0x34a61,_0x3d31db,_0x5eb0a3){var _0x28b935={'raw':![],'where':{}};var _0x1537f6={};var _0x435f00={'count':0x0,'rows':[]};return db[_0x1926('0x3e')][_0x1926('0x68')]({'where':{'id':_0x34a61['params']['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x3d31db,null))['then'](function(_0x2d4b6a){if(_0x2d4b6a){_0x1537f6[_0x1926('0x40')]=_[_0x1926('0x41')](db[_0x1926('0x66')][_0x1926('0x3f')]);_0x1537f6[_0x1926('0x42')]=_[_0x1926('0x41')](_0x34a61[_0x1926('0x42')]);_0x1537f6[_0x1926('0x43')]=_[_0x1926('0x44')](_0x1537f6[_0x1926('0x40')],_0x1537f6['query']);_0x28b935[_0x1926('0x45')]=_[_0x1926('0x44')](_0x1537f6['model'],qs[_0x1926('0x46')](_0x34a61[_0x1926('0x42')]['fields']));_0x28b935[_0x1926('0x45')]=_0x28b935['attributes'][_0x1926('0x69')]?_0x28b935[_0x1926('0x45')]:_0x1537f6[_0x1926('0x40')];if(!_0x34a61[_0x1926('0x42')]['hasOwnProperty'](_0x1926('0x48'))){_0x28b935[_0x1926('0x32')]=qs[_0x1926('0x32')](_0x34a61[_0x1926('0x42')][_0x1926('0x32')]);_0x28b935[_0x1926('0x31')]=qs[_0x1926('0x31')](_0x34a61['query'][_0x1926('0x31')]);}_0x28b935[_0x1926('0x49')]=qs[_0x1926('0x4a')](_0x34a61[_0x1926('0x42')][_0x1926('0x4a')]);_0x28b935[_0x1926('0x4b')]=qs['filters'](_['pick'](_0x34a61[_0x1926('0x42')],_0x1537f6['filters']));_0x28b935['where'][_0x1926('0x65')]=_0x2d4b6a['id'];if(_0x34a61[_0x1926('0x42')]['filter']){_0x28b935['where']=_['merge'](_0x28b935[_0x1926('0x4b')],{'$or':_[_0x1926('0x4f')](_0x28b935['attributes'],function(_0x2179a7){var _0x26caf5={};_0x26caf5[_0x2179a7]={'$like':'%'+_0x34a61[_0x1926('0x42')]['filter']+'%'};return _0x26caf5;})});}_0x28b935=_[_0x1926('0x4e')]({},_0x28b935,_0x34a61[_0x1926('0x51')]);return db['Disposition'][_0x1926('0x52')]({'where':_0x28b935[_0x1926('0x4b')]})[_0x1926('0x24')](function(_0x342c23){_0x435f00[_0x1926('0x52')]=_0x342c23;if(_0x34a61[_0x1926('0x42')][_0x1926('0x53')]){_0x28b935[_0x1926('0x59')]=[{'all':!![]}];}return db['Disposition'][_0x1926('0x54')](_0x28b935);})[_0x1926('0x24')](function(_0x15e4ac){_0x435f00['rows']=_0x15e4ac;return _0x435f00;});}})[_0x1926('0x24')](respondWithFilteredResult(_0x3d31db,_0x28b935))[_0x1926('0x56')](handleError(_0x3d31db,null));};exports[_0x1926('0x6a')]=function(_0x42cede,_0x1e4205,_0x2fefd6){var _0x5c74f1;return db['SmsAccount'][_0x1926('0x5a')]({'where':{'id':_0x42cede[_0x1926('0x58')]['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x1e4205,null))[_0x1926('0x24')](function(_0x10300a){if(_0x10300a){return _0x10300a[_0x1926('0x6a')](_0x42cede[_0x1926('0x42')][_0x1926('0x6b')]);}})[_0x1926('0x24')](respondWithStatusCode(_0x1e4205,null))['catch'](handleError(_0x1e4205,null));};exports['addAnswer']=function(_0x33786f,_0x1b896c,_0x37d17c){if(_0x33786f[_0x1926('0x63')]['id']){delete _0x33786f['body']['id'];}return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0x33786f[_0x1926('0x58')]['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x1b896c,null))['then'](function(_0x5d181c){if(_0x5d181c){_0x33786f[_0x1926('0x63')][_0x1926('0x65')]=_0x5d181c['id'];return db['CannedAnswer'][_0x1926('0x5b')](_0x33786f[_0x1926('0x63')]);}})[_0x1926('0x24')](respondWithResult(_0x1b896c,null))[_0x1926('0x56')](handleError(_0x1b896c,null));};exports[_0x1926('0x6c')]=function(_0x15767c,_0x27deb7,_0x3b3768){var _0x8c5f1b={'raw':![],'where':{}};var _0x53bdf1={};var _0x432af3={'count':0x0,'rows':[]};return db[_0x1926('0x3e')][_0x1926('0x68')]({'where':{'id':_0x15767c['params']['id']}})['then'](handleEntityNotFound(_0x27deb7,null))[_0x1926('0x24')](function(_0x3c805e){if(_0x3c805e){_0x53bdf1[_0x1926('0x40')]=_[_0x1926('0x41')](db['CannedAnswer'][_0x1926('0x3f')]);_0x53bdf1[_0x1926('0x42')]=_[_0x1926('0x41')](_0x15767c[_0x1926('0x42')]);_0x53bdf1[_0x1926('0x43')]=_[_0x1926('0x44')](_0x53bdf1['model'],_0x53bdf1[_0x1926('0x42')]);_0x8c5f1b[_0x1926('0x45')]=_[_0x1926('0x44')](_0x53bdf1[_0x1926('0x40')],qs[_0x1926('0x46')](_0x15767c[_0x1926('0x42')]['fields']));_0x8c5f1b[_0x1926('0x45')]=_0x8c5f1b[_0x1926('0x45')][_0x1926('0x69')]?_0x8c5f1b[_0x1926('0x45')]:_0x53bdf1[_0x1926('0x40')];if(!_0x15767c['query'][_0x1926('0x47')](_0x1926('0x48'))){_0x8c5f1b[_0x1926('0x32')]=qs[_0x1926('0x32')](_0x15767c[_0x1926('0x42')][_0x1926('0x32')]);_0x8c5f1b['offset']=qs[_0x1926('0x31')](_0x15767c[_0x1926('0x42')][_0x1926('0x31')]);}_0x8c5f1b[_0x1926('0x49')]=qs[_0x1926('0x4a')](_0x15767c[_0x1926('0x42')][_0x1926('0x4a')]);_0x8c5f1b[_0x1926('0x4b')]=qs[_0x1926('0x43')](_[_0x1926('0x4c')](_0x15767c[_0x1926('0x42')],_0x53bdf1['filters']));_0x8c5f1b[_0x1926('0x4b')][_0x1926('0x65')]=_0x3c805e['id'];if(_0x15767c[_0x1926('0x42')][_0x1926('0x4d')]){_0x8c5f1b[_0x1926('0x4b')]=_['merge'](_0x8c5f1b['where'],{'$or':_[_0x1926('0x4f')](_0x8c5f1b[_0x1926('0x45')],function(_0x266433){var _0x4c4050={};_0x4c4050[_0x266433]={'$like':'%'+_0x15767c['query']['filter']+'%'};return _0x4c4050;})});}_0x8c5f1b=_['merge']({},_0x8c5f1b,_0x15767c[_0x1926('0x51')]);return db[_0x1926('0x6d')][_0x1926('0x52')]({'where':_0x8c5f1b['where']})[_0x1926('0x24')](function(_0x190ee5){_0x432af3[_0x1926('0x52')]=_0x190ee5;if(_0x15767c[_0x1926('0x42')][_0x1926('0x53')]){_0x8c5f1b[_0x1926('0x59')]=[{'all':!![]}];}return db[_0x1926('0x6d')][_0x1926('0x54')](_0x8c5f1b);})[_0x1926('0x24')](function(_0x26a1c6){_0x432af3[_0x1926('0x55')]=_0x26a1c6;return _0x432af3;});}})[_0x1926('0x24')](respondWithFilteredResult(_0x27deb7,_0x8c5f1b))[_0x1926('0x56')](handleError(_0x27deb7,null));};exports[_0x1926('0x6e')]=function(_0x370a27,_0x5ecddc,_0x2f1712){var _0x39cb5a;return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0x370a27[_0x1926('0x58')]['id']}})['then'](handleEntityNotFound(_0x5ecddc,null))[_0x1926('0x24')](function(_0x42e77f){if(_0x42e77f){return _0x42e77f['removeAnswers'](_0x370a27[_0x1926('0x42')][_0x1926('0x6b')]);}})['then'](respondWithStatusCode(_0x5ecddc,null))[_0x1926('0x56')](handleError(_0x5ecddc,null));};exports['notify']=function(_0x210d6d,_0x39ef32,_0x21a851){var _0x4f151e={'channel':_0x1926('0x6f')};var _0x303489=[];var _0x5bd997=[];var _0x3cf662={};return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0x210d6d['params']['id']},'include':[{'model':db[_0x1926('0x70')],'as':_0x1926('0x71')}]})[_0x1926('0x24')](handleEntityNotFound(_0x39ef32,null))['then'](function(_0x129f9e){_0x4f151e[_0x1926('0x72')]=_0x129f9e;_0x4f151e[_0x1926('0x73')]=_[_0x1926('0x74')](_0x129f9e[_0x1926('0x71')],['priority'],[_0x1926('0x75')]);if(_0x4f151e['account'][_0x1926('0x71')]){delete _0x4f151e[_0x1926('0x72')][_0x1926('0x71')];}return db[_0x1926('0x76')]['describe']();})[_0x1926('0x24')](function(_0x18df11){if(!_0x18df11){throw new db[(_0x1926('0x77'))]['ValidationError'](_0x1926('0x78'));}_0x303489=_[_0x1926('0x79')](_[_0x1926('0x41')](_0x18df11),[_0x1926('0x7a'),'updatedAt']);_0x5bd997=_[_0x1926('0x79')](_[_0x1926('0x41')](_0x18df11),['createdAt',_0x1926('0x7b'),_0x1926('0x7c'),_0x1926('0x7d')]);_0x4f151e['body']={'mapKey':_0x1926('0x7e')};if(_0x4f151e[_0x1926('0x72')]['type']){switch(_0x4f151e[_0x1926('0x72')][_0x1926('0x7f')]){case _0x1926('0x80'):_0x4f151e[_0x1926('0x63')][_0x1926('0x81')]=_0x210d6d['body'][_0x1926('0x82')];_0x4f151e[_0x1926('0x63')][_0x1926('0x63')]=_0x210d6d[_0x1926('0x63')][_0x1926('0x83')];_0x4f151e[_0x1926('0x63')][_0x1926('0x84')]=_0x210d6d['body'][_0x1926('0x85')];break;case _0x1926('0x86'):_0x4f151e['body'][_0x1926('0x81')]='+'+_0x210d6d[_0x1926('0x63')]['sender'];_0x4f151e[_0x1926('0x63')][_0x1926('0x63')]=_0x210d6d[_0x1926('0x63')]['text'];break;case _0x1926('0x87'):_0x4f151e[_0x1926('0x63')][_0x1926('0x81')]=_0x210d6d[_0x1926('0x63')][_0x1926('0x81')];_0x4f151e['body'][_0x1926('0x63')]=_0x210d6d['body'][_0x1926('0x2d')];break;case _0x1926('0x88'):_0x4f151e['body'][_0x1926('0x81')]=_0x210d6d[_0x1926('0x63')][_0x1926('0x81')];_0x4f151e[_0x1926('0x63')][_0x1926('0x63')]=_0x210d6d[_0x1926('0x63')][_0x1926('0x63')];_0x4f151e[_0x1926('0x63')][_0x1926('0x84')]=_0x210d6d[_0x1926('0x63')]['message_id'];break;case _0x1926('0x89'):_0x4f151e[_0x1926('0x63')][_0x1926('0x81')]=_0x210d6d['body'][_0x1926('0x82')];_0x4f151e[_0x1926('0x63')][_0x1926('0x63')]=_0x210d6d['body'][_0x1926('0x8a')];_0x4f151e['body'][_0x1926('0x84')]=_0x210d6d[_0x1926('0x63')][_0x1926('0x8b')];break;case _0x1926('0x8c'):_0x4f151e['body'][_0x1926('0x81')]='+'+_0x210d6d[_0x1926('0x63')][_0x1926('0x8d')][0x0]['from'];_0x4f151e[_0x1926('0x63')][_0x1926('0x63')]=_0x210d6d[_0x1926('0x63')][_0x1926('0x8d')][0x0][_0x1926('0x8e')];_0x4f151e[_0x1926('0x63')]['messageId']=_0x210d6d[_0x1926('0x63')][_0x1926('0x8d')][0x0][_0x1926('0x84')];break;case'csc':_0x4f151e[_0x1926('0x63')]['from']=_0x210d6d[_0x1926('0x63')]['originatingAddress'];_0x4f151e[_0x1926('0x63')][_0x1926('0x63')]=_0x210d6d[_0x1926('0x63')]['segmentedMessage'][_0x1926('0x2d')];break;case _0x1926('0x8f'):_0x4f151e['body']['from']=_0x210d6d[_0x1926('0x63')][_0x1926('0x90')];_0x4f151e[_0x1926('0x63')][_0x1926('0x63')]=_0x210d6d[_0x1926('0x63')]['text'];_0x4f151e['body'][_0x1926('0x84')]=_0x210d6d['body'][_0x1926('0x91')];break;case _0x1926('0x92'):_0x4f151e[_0x1926('0x63')][_0x1926('0x81')]=_0x210d6d[_0x1926('0x63')][_0x1926('0x81')];_0x4f151e[_0x1926('0x63')][_0x1926('0x63')]=_0x210d6d[_0x1926('0x63')][_0x1926('0x2d')];_0x4f151e[_0x1926('0x63')]['messageId']=_0x210d6d[_0x1926('0x63')]['refid'];break;}}if(_0x4f151e[_0x1926('0x63')]['id']){delete _0x4f151e[_0x1926('0x63')]['id'];}if(_[_0x1926('0x93')](_0x4f151e[_0x1926('0x63')][_0x1926('0x81')])){throw new db[(_0x1926('0x77'))][(_0x1926('0x94'))](_0x1926('0x95'));}if(_[_0x1926('0x93')](_0x4f151e[_0x1926('0x63')][_0x1926('0x63')])||_0x4f151e['body'][_0x1926('0x63')]===''){throw new db[(_0x1926('0x77'))][(_0x1926('0x94'))](_0x1926('0x96'));}if(_['isNil'](_0x4f151e['body'][_0x1926('0x97')])){throw new db[(_0x1926('0x77'))][(_0x1926('0x94'))](_0x1926('0x98')+_0x5bd997);}if(!_[_0x1926('0x99')](_0x5bd997,_0x4f151e[_0x1926('0x63')][_0x1926('0x97')])){throw new db['Sequelize']['ValidationError'](_0x1926('0x9a')+_0x5bd997);}_0x3cf662[_0x4f151e[_0x1926('0x63')][_0x1926('0x97')]]=_0x4f151e['body'][_0x1926('0x81')];return db['CmList'][_0x1926('0x5a')]({'where':{'id':_0x4f151e[_0x1926('0x72')][_0x1926('0x7d')]},'include':[{'model':db['CmContact'],'as':_0x1926('0x9b'),'where':_0x3cf662,'limit':0x1,'order':[[_0x1926('0x7b'),_0x1926('0x9c')]]}]});})[_0x1926('0x24')](handleEntityNotFound(_0x39ef32,null))[_0x1926('0x24')](function(_0x21bb9c){if(_0x21bb9c){_0x4f151e['list']=_[_0x1926('0x9d')](_0x21bb9c,[_0x1926('0x9b')]);if(_0x21bb9c[_0x1926('0x9b')][_0x1926('0x69')]){return _0x21bb9c[_0x1926('0x9b')][0x0];}var _0x2e853e=_['defaults'](_0x4f151e[_0x1926('0x63')],{'firstName':_0x4f151e['body']['from'],'ListId':_0x21bb9c['id']});_0x2e853e[_0x4f151e[_0x1926('0x63')]['mapKey']]=_0x4f151e[_0x1926('0x63')][_0x1926('0x81')];return db[_0x1926('0x76')][_0x1926('0x5b')](_0x2e853e,{'fields':_0x303489,'raw':!![]});}})[_0x1926('0x24')](handleEntityNotFound(_0x39ef32,null))['then'](function(_0x2fea44){if(_0x2fea44){_0x4f151e[_0x1926('0x9e')]=_0x2fea44;var _0x381300={'ContactId':_0x2fea44['id'],'phone':_0x4f151e[_0x1926('0x63')][_0x1926('0x81')],'SmsAccountId':_0x210d6d['params']['id']};var _0x2c53d5={'ContactId':_0x2fea44['id'],'SmsAccountId':_0x210d6d[_0x1926('0x58')]['id'],'closed':![]};return db[_0x1926('0x9f')][_0x1926('0x5a')]({'where':_0x2c53d5})['then'](function(_0x2e59e6){if(_0x2e59e6){return[_0x2e59e6,![]];}return db[_0x1926('0x9f')][_0x1926('0x5b')](_0x381300)['then'](function(_0x41e849){return[_0x41e849,!![]];});});}})[_0x1926('0xa0')](function(_0x31d6cb,_0x5db090){_0x4f151e[_0x1926('0xa1')]=_0x31d6cb[_0x1926('0x38')]({'plain':!![]});_0x4f151e[_0x1926('0xa1')][_0x1926('0xa2')]=![];if(_0x5db090){if(_0x4f151e[_0x1926('0x72')][_0x1926('0xa3')]){_0x4f151e[_0x1926('0x73')][_0x1926('0xa4')]({'id':0x0,'priority':_0x4f151e[_0x1926('0x73')][_0x1926('0x69')]+0x1,'app':_0x1926('0xa5'),'appdata':_0x1926('0xa6'),'interval':_0x1926('0xa7')});}_0x4f151e[_0x1926('0xa1')][_0x1926('0xa2')]=!![];}return db[_0x1926('0xa8')][_0x1926('0x5b')]({'phone':_0x4f151e[_0x1926('0x63')][_0x1926('0x81')],'messageId':_0x4f151e[_0x1926('0x63')][_0x1926('0x84')],'body':_0x4f151e[_0x1926('0x63')][_0x1926('0x63')],'SmsAccountId':_0x210d6d['params']['id'],'SmsInteractionId':_0x31d6cb['id'],'direction':'in','ContactId':_0x31d6cb[_0x1926('0xa9')],'AttachmentId':_0x4f151e[_0x1926('0x63')][_0x1926('0xaa')]});})['then'](function(_0x4eec26){_0x4f151e['message']=_0x4eec26;if(_0x4f151e['interaction'][_0x1926('0xab')]){return db['User'][_0x1926('0x5a')]({'attributes':['id',_0x1926('0x3a')],'where':{'id':_0x4f151e[_0x1926('0xa1')]['UserId']}})['then'](function(_0x1a15fa){if(_0x1a15fa){_0x4f151e[_0x1926('0x73')][_0x1926('0xac')]({'id':0x0,'priority':0x0,'app':'agent','appdata':_0x1a15fa[_0x1926('0x3a')]+','+(_0x4f151e[_0x1926('0x72')][_0x1926('0xad')]||0xa),'interval':_0x1926('0xa7')});}return respondWithRpcPromise(_0x1926('0xae'),_0x1926('0xaf'),_0x4f151e);});}return respondWithRpcPromise(_0x1926('0xae'),_0x1926('0xaf'),_0x4f151e);})[_0x1926('0x24')](function(_0xd4dfee){if(_0xd4dfee){var _0x59bd20=0xc8;var _0x236fa4=_0x1926('0xb0');logger['info'](_0x1926('0x29'),_0x236fa4,_0x59bd20,_0x1926('0xb1'));logger['debug'](_0x1926('0xb2'),_0x236fa4,_0x59bd20,_0x1926('0xb1'),JSON[_0x1926('0x2a')](_0xd4dfee));if(_0x4f151e[_0x1926('0x72')][_0x1926('0x7f')]===_0x1926('0x80')){return _0x39ef32['status'](_0x59bd20)['set'](_0x1926('0xb3'),_0x1926('0xb4'))['send']('<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<Response></Response>');}else{return _0x39ef32[_0x1926('0x2f')](_0x59bd20)[_0x1926('0x30')](_0xd4dfee);}}})[_0x1926('0x56')](handleError(_0x39ef32,null));};exports[_0x1926('0xb5')]=function(_0x44591a,_0x1db896,_0x111e85){return db[_0x1926('0x3e')][_0x1926('0x68')]({'where':{'id':_0x44591a[_0x1926('0x58')]['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x1db896,null))[_0x1926('0x24')](function(_0x57f574){if(_0x57f574){return db['sequelize'][_0x1926('0xb6')](function(_0x363aa5){return db[_0x1926('0x70')][_0x1926('0x37')]({'where':{'SmsAccountId':_0x44591a[_0x1926('0x58')]['id']},'transaction':_0x363aa5})['then'](function(_0x800c35){var _0x234e10=_['map'](_0x44591a[_0x1926('0x63')],function(_0x3f4bdb){_0x3f4bdb[_0x1926('0x65')]=_0x44591a['params']['id'];return _0x3f4bdb;});return db[_0x1926('0x70')][_0x1926('0xb7')](_0x234e10,{'transaction':_0x363aa5});});})[_0x1926('0x24')](function(){return db[_0x1926('0x70')][_0x1926('0xb8')]({'where':{'SmsAccountId':_0x44591a[_0x1926('0x58')]['id']},'order':_0x1926('0xb9')});});}})[_0x1926('0x24')](respondWithResult(_0x1db896,null))[_0x1926('0x56')](handleError(_0x1db896,null));};exports[_0x1926('0xba')]=function(_0x2f5f8d,_0x58fe6a,_0x1cd1a9){var _0x15a3fa={};var _0x26115a={};var _0x496e4c;var _0x399d09;return db[_0x1926('0x3e')][_0x1926('0x68')]({'where':{'id':_0x2f5f8d['params']['id']}})['then'](handleEntityNotFound(_0x58fe6a,null))[_0x1926('0x24')](function(_0x4dc34f){if(_0x4dc34f){_0x496e4c=_0x4dc34f;_0x26115a[_0x1926('0x40')]=_[_0x1926('0x41')](db[_0x1926('0x70')][_0x1926('0x3f')]);_0x26115a[_0x1926('0x42')]=_[_0x1926('0x41')](_0x2f5f8d[_0x1926('0x42')]);_0x26115a[_0x1926('0x43')]=_[_0x1926('0x44')](_0x26115a['model'],_0x26115a[_0x1926('0x42')]);_0x15a3fa[_0x1926('0x45')]=_[_0x1926('0x44')](_0x26115a[_0x1926('0x40')],qs['fields'](_0x2f5f8d[_0x1926('0x42')]['fields']));_0x15a3fa[_0x1926('0x45')]=_0x15a3fa['attributes']['length']?_0x15a3fa['attributes']:_0x26115a['model'];_0x15a3fa[_0x1926('0x49')]=qs[_0x1926('0x4a')](_0x2f5f8d['query'][_0x1926('0x4a')]);_0x15a3fa[_0x1926('0x4b')]=qs['filters'](_['pick'](_0x2f5f8d[_0x1926('0x42')],_0x26115a[_0x1926('0x43')]));if(_0x2f5f8d[_0x1926('0x42')]['filter']){_0x15a3fa[_0x1926('0x4b')]=_[_0x1926('0x4e')](_0x15a3fa[_0x1926('0x4b')],{'$or':_[_0x1926('0x4f')](_0x15a3fa['attributes'],function(_0x4dfa79){var _0x55c5e4={};_0x55c5e4[_0x4dfa79]={'$like':'%'+_0x2f5f8d['query'][_0x1926('0x4d')]+'%'};return _0x55c5e4;})});}_0x15a3fa=_['merge']({},_0x15a3fa,_0x2f5f8d[_0x1926('0x51')]);return _0x496e4c[_0x1926('0xba')](_0x15a3fa);}})[_0x1926('0x24')](function(_0x3ddb09){if(_0x3ddb09){_0x399d09=_0x3ddb09[_0x1926('0x69')];if(!_0x2f5f8d[_0x1926('0x42')][_0x1926('0x47')]('nolimit')){_0x15a3fa[_0x1926('0x32')]=qs['limit'](_0x2f5f8d[_0x1926('0x42')][_0x1926('0x32')]);_0x15a3fa[_0x1926('0x31')]=qs[_0x1926('0x31')](_0x2f5f8d[_0x1926('0x42')][_0x1926('0x31')]);}return _0x496e4c[_0x1926('0xba')](_0x15a3fa);}})['then'](function(_0x3fe08a){if(_0x3fe08a){return _0x3fe08a?{'count':_0x399d09,'rows':_0x3fe08a}:null;}})[_0x1926('0x24')](respondWithResult(_0x58fe6a,null))[_0x1926('0x56')](handleError(_0x58fe6a,null));};exports[_0x1926('0xbb')]=function(_0x5c329b,_0x583ca3,_0x507ac0){var _0x3694d9={'raw':![],'where':{}};var _0x2ab34f={};var _0x583d79={'count':0x0,'rows':[]};return db[_0x1926('0x3e')][_0x1926('0x68')]({'where':{'id':_0x5c329b[_0x1926('0x58')]['id']}})['then'](handleEntityNotFound(_0x583ca3,null))[_0x1926('0x24')](function(_0x36ef2e){if(_0x36ef2e){_0x2ab34f[_0x1926('0x40')]=_['keys'](db['SmsInteraction'][_0x1926('0x3f')]);_0x2ab34f['query']=_[_0x1926('0x41')](_0x5c329b['query']);_0x2ab34f[_0x1926('0x43')]=_[_0x1926('0x44')](_0x2ab34f[_0x1926('0x40')],_0x2ab34f[_0x1926('0x42')]);_0x3694d9[_0x1926('0x45')]=_[_0x1926('0x44')](_0x2ab34f[_0x1926('0x40')],qs[_0x1926('0x46')](_0x5c329b[_0x1926('0x42')]['fields']));_0x3694d9[_0x1926('0x45')]=_0x3694d9[_0x1926('0x45')]['length']?_0x3694d9[_0x1926('0x45')]:_0x2ab34f[_0x1926('0x40')];if(!_0x5c329b['query']['hasOwnProperty']('nolimit')){_0x3694d9['limit']=qs[_0x1926('0x32')](_0x5c329b[_0x1926('0x42')][_0x1926('0x32')]);_0x3694d9[_0x1926('0x31')]=qs[_0x1926('0x31')](_0x5c329b[_0x1926('0x42')][_0x1926('0x31')]);}_0x3694d9[_0x1926('0x49')]=qs[_0x1926('0x4a')](_0x5c329b['query'][_0x1926('0x4a')]);_0x3694d9['where']=qs[_0x1926('0x43')](_[_0x1926('0x4c')](_0x5c329b[_0x1926('0x42')],_0x2ab34f[_0x1926('0x43')]));_0x3694d9[_0x1926('0x4b')][_0x1926('0x65')]=_0x36ef2e['id'];if(_0x5c329b[_0x1926('0x42')][_0x1926('0x4d')]){_0x3694d9[_0x1926('0x4b')]=_['merge'](_0x3694d9[_0x1926('0x4b')],{'$or':_[_0x1926('0x4f')](_0x3694d9[_0x1926('0x45')],function(_0xcda980){var _0x5cbb96={};_0x5cbb96[_0xcda980]={'$like':'%'+_0x5c329b[_0x1926('0x42')][_0x1926('0x4d')]+'%'};return _0x5cbb96;})});}_0x3694d9=_[_0x1926('0x4e')]({},_0x3694d9,_0x5c329b[_0x1926('0x51')]);return db[_0x1926('0x9f')]['count']({'where':_0x3694d9[_0x1926('0x4b')]})[_0x1926('0x24')](function(_0x3e5307){_0x583d79['count']=_0x3e5307;if(_0x5c329b[_0x1926('0x42')][_0x1926('0x53')]){_0x3694d9[_0x1926('0x59')]=[{'model':db[_0x1926('0x76')],'as':_0x1926('0xbc'),'required':![]},{'model':db[_0x1926('0xbd')],'as':_0x1926('0xbe'),'attributes':[_0x1926('0x3a'),'fullname',_0x1926('0xbf')],'required':![]},{'model':db[_0x1926('0xc0')],'as':_0x1926('0xc1'),'attributes':['id','name','color'],'where':_0x5c329b[_0x1926('0x42')][_0x1926('0xc2')]?{'id':_0x5c329b['query']['tag']}:undefined,'required':_0x5c329b[_0x1926('0x42')][_0x1926('0xc2')]?!![]:![]}];}return db[_0x1926('0x9f')]['findAll'](_0x3694d9);})[_0x1926('0x24')](function(_0x4902ec){_0x583d79['rows']=_0x4902ec;return _0x583d79;});}})[_0x1926('0x24')](respondWithFilteredResult(_0x583ca3,_0x3694d9))[_0x1926('0x56')](handleError(_0x583ca3,null));};exports[_0x1926('0x3b')]=function(_0x19854f,_0x50fe9c,_0x212bd5){var _0x3bbeee,_0x19150e,_0x4e1671;if(_['isNil'](_0x19854f[_0x1926('0x63')]['body'])||_0x19854f[_0x1926('0x63')][_0x1926('0x63')]===''){throw new db[(_0x1926('0x77'))][(_0x1926('0x94'))]('body\x20is\x20mandatory\x20and\x20not\x20empty');}if(_[_0x1926('0x93')](_0x19854f[_0x1926('0x63')]['to'])){throw new db[(_0x1926('0x77'))][(_0x1926('0x94'))](_0x1926('0xc3'));}_0x3bbeee=_0x19854f['body']['to'];return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0x19854f[_0x1926('0x58')]['id']},'include':[{'model':db['CmList'],'as':'List','include':[{'model':db[_0x1926('0x76')],'as':'Contacts','where':{'mobile':_0x3bbeee},'limit':0x1,'order':[[_0x1926('0x7b'),_0x1926('0x9c')]]}]}]})['then'](handleEntityNotFound(_0x50fe9c,null))[_0x1926('0x24')](function(_0x368719){if(_0x368719&&_0x368719[_0x1926('0xc4')]){_0x19150e=_0x368719['get']({'plain':!![]});if(_0x19150e['List']&&_0x19150e[_0x1926('0xc4')][_0x1926('0x9b')]['length']){return _0x19150e['List'][_0x1926('0x9b')][0x0];}return db[_0x1926('0x76')][_0x1926('0x5b')](_[_0x1926('0x1b')](_0x19854f['body'],{'firstName':_0x3bbeee,'mobile':_0x3bbeee,'phone':_0x3bbeee,'ListId':_0x19150e[_0x1926('0x7d')]}));}})['then'](handleEntityNotFound(_0x50fe9c,null))[_0x1926('0x24')](function(_0x20b7dd){if(_0x20b7dd){_0x4e1671=_0x20b7dd;return db[_0x1926('0x9f')][_0x1926('0x5a')]({'where':{'ContactId':_0x4e1671['id'],'closed':![],'SmsAccountId':_0x19150e['id']}})[_0x1926('0x24')](function(_0x513e6f){if(_0x513e6f){return[_0x513e6f,![]];}return db[_0x1926('0x9f')][_0x1926('0x5b')]({'UserId':_0x19854f['user']['id'],'ContactId':_0x4e1671['id'],'SmsAccountId':_0x19150e['id'],'phone':_0x3bbeee,'firstMsgDirection':'out','Messages':[_['merge'](_0x19854f[_0x1926('0x63')],{'read':![],'body':_0x19854f['body'][_0x1926('0x63')],'phone':_0x3bbeee,'SmsAccountId':_0x19150e['id'],'UserId':_0x19854f[_0x1926('0x5c')]['id'],'ContactId':_0x4e1671['id']})]},{'include':[{'model':db[_0x1926('0xa8')],'as':_0x1926('0xc5')}]})[_0x1926('0x24')](function(_0x3cd856){return[_0x3cd856,!![]];});});}})[_0x1926('0xa0')](function(_0x141f70,_0x5afbd3){if(_0x5afbd3){return _0x141f70;}return db['SmsMessage'][_0x1926('0x5b')](_[_0x1926('0x4e')](_0x19854f[_0x1926('0x63')],{'read':![],'body':_0x19854f[_0x1926('0x63')][_0x1926('0x63')],'phone':_0x3bbeee,'SmsAccountId':_0x19150e['id'],'SmsInteractionId':_0x141f70['id'],'UserId':_0x19854f[_0x1926('0x5c')]['id'],'ContactId':_0x4e1671['id']}))[_0x1926('0x24')](function(_0x126ada){_0x141f70['dataValues'][_0x1926('0xc5')]=[];_0x141f70[_0x1926('0xc6')][_0x1926('0xc5')][_0x1926('0xa4')](_0x126ada[_0x1926('0xc6')]);return _0x141f70;});})[_0x1926('0x24')](respondWithResult(_0x50fe9c,null))[_0x1926('0x56')](handleError(_0x50fe9c,null));};exports['status']=function(_0x5d4864,_0x1d1bff,_0x57ecf9){if(_0x5d4864[_0x1926('0x63')]['id']){delete _0x5d4864[_0x1926('0x63')]['id'];}console[_0x1926('0xc7')](_0x1926('0xc8'),_0x5d4864['body']);var _0x1cfec0,_0x23fffe,_0x2dd7eb;return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0x5d4864[_0x1926('0x58')]['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x1d1bff,null))['then'](function(_0x92f385){if(_0x92f385){_0x2dd7eb=_0x92f385;logger[_0x1926('0x28')](_0x1926('0x29'),'status','received\x20delivery\x20report\x20from',_0x92f385[_0x1926('0x7f')],util[_0x1926('0xc9')](_0x5d4864[_0x1926('0x63')],{'showHidden':![],'depth':null}));switch(_0x92f385[_0x1926('0x7f')]){case _0x1926('0x86'):if(_0x5d4864['body'][_0x1926('0xca')]&&_0x5d4864[_0x1926('0x63')][_0x1926('0x2f')]){_0x23fffe=_0x5d4864[_0x1926('0x63')][_0x1926('0x2f')];return db[_0x1926('0xa8')][_0x1926('0x5a')]({'where':{'messageId':_0x5d4864[_0x1926('0x63')][_0x1926('0xca')]}});}break;case _0x1926('0x87'):if(_0x5d4864[_0x1926('0x63')][_0x1926('0xcb')]&&_0x5d4864[_0x1926('0x63')][_0x1926('0xcc')]){_0x23fffe=_0x5d4864[_0x1926('0x63')][_0x1926('0xcc')];return db[_0x1926('0xa8')]['find']({'where':{'messageId':_0x5d4864['body'][_0x1926('0xcb')]}});}break;case'clicksend':if(_0x5d4864[_0x1926('0x63')]['message_id']&&_0x5d4864['body'][_0x1926('0xcd')]){_0x23fffe=_0x5d4864[_0x1926('0x63')][_0x1926('0xcd')];return db[_0x1926('0xa8')][_0x1926('0x5a')]({'where':{'messageId':_0x5d4864[_0x1926('0x63')]['message_id']}});}break;case _0x1926('0x8c'):var _0x1d0bc8=_0x5d4864['body']['results'][0x0];if(_0x1d0bc8['messageId']&&_0x1d0bc8[_0x1926('0x2f')][_0x1926('0xce')]===_0x1926('0xcf')){_0x23fffe=_0x1d0bc8['status']['groupName'];return db['SmsMessage'][_0x1926('0x5a')]({'where':{'messageId':_0x1d0bc8[_0x1926('0x84')]}});}break;case'clickatell':if(_0x5d4864['body'][_0x1926('0x84')]&&_0x5d4864['body']['status']){_0x23fffe=_0x5d4864[_0x1926('0x63')][_0x1926('0x2f')];return db[_0x1926('0xa8')]['find']({'where':{'messageId':_0x5d4864[_0x1926('0x63')][_0x1926('0x84')]}});}break;case _0x1926('0x92'):if(_0x5d4864['body'][_0x1926('0xd0')]&&_0x5d4864[_0x1926('0x63')][_0x1926('0x2f')]){_0x23fffe=_0x5d4864[_0x1926('0x63')][_0x1926('0x2f')];return db[_0x1926('0xa8')][_0x1926('0x5a')]({'where':{'messageId':_0x5d4864[_0x1926('0x63')][_0x1926('0xd0')]}});}break;}}})['then'](handleEntityNotFound(_0x1d1bff,null))['then'](function(_0x2462b4){if(_0x2462b4){_0x1cfec0=_0x2462b4;switch(_0x2dd7eb[_0x1926('0x7f')]){case'skebby':if(_0x23fffe===_0x1926('0xcf')){return _0x1cfec0[_0x1926('0x36')]({'read':!![]});}else{logger[_0x1926('0x2b')](_0x1926('0x29'),_0x1926('0x2f'),_0x1926('0x86'),util['inspect'](_0x5d4864['body'],{'showHidden':![],'depth':null}));}break;case _0x1926('0x87'):if(_0x23fffe==='1'){return _0x1cfec0[_0x1926('0x36')]({'read':!![]});}else{logger[_0x1926('0x2b')](_0x1926('0x29'),_0x1926('0x2f'),_0x1926('0x86'),util[_0x1926('0xc9')](_0x5d4864['body'],{'showHidden':![],'depth':null}));}break;case _0x1926('0x88'):if(!_0x5d4864[_0x1926('0x63')][_0x1926('0xd1')]&&_0x23fffe>=0xc8&&_0x23fffe<=0xce){return _0x1cfec0['update']({'read':!![]});}else{logger[_0x1926('0x2b')](_0x1926('0x29'),_0x1926('0x2f'),_0x1926('0x88'),util['inspect'](_0x5d4864[_0x1926('0x63')],{'showHidden':![],'depth':null}));}break;case'infobip':var _0x59a183=_0x5d4864[_0x1926('0x63')][_0x1926('0x8d')][0x0];if(_0x59a183['status'][_0x1926('0xce')]===_0x1926('0xcf')){return _0x1cfec0[_0x1926('0x36')]({'read':!![]});}else{logger[_0x1926('0x2b')]('SmsAccount,\x20%s,\x20%s,\x20%s','status',_0x1926('0x8c'),util['inspect'](_0x5d4864[_0x1926('0x63')],{'showHidden':![],'depth':null}));}break;case _0x1926('0x8f'):if(_0x23fffe==_0x1926('0xd2')||_0x23fffe==_0x1926('0xd3')){return _0x1cfec0['update']({'read':!![]});}else{logger[_0x1926('0x2b')](_0x1926('0x29'),'status',_0x1926('0x8f'),util[_0x1926('0xc9')](_0x5d4864[_0x1926('0x63')],{'showHidden':![],'depth':null}));}break;case _0x1926('0x92'):if(_0x23fffe===_0x1926('0xd4')||_0x23fffe===_0x1926('0xd5')){return _0x1cfec0[_0x1926('0x36')]({'read':!![]});}else{logger[_0x1926('0x2b')](_0x1926('0x29'),_0x1926('0x2f'),_0x1926('0x92'),util['inspect'](_0x5d4864[_0x1926('0x63')],{'showHidden':![],'depth':null}));}break;}return _0x1cfec0;}})[_0x1926('0x24')](respondWithResult(_0x1d1bff,null))[_0x1926('0x56')](handleError(_0x1d1bff,null));};exports[_0x1926('0xd6')]=function(_0x5af9d5,_0x2a765a,_0x117aac){var _0x39208a,_0x22b7c8,_0x2cbcfa;return db[_0x1926('0x3e')]['find']({'where':{'id':_0x5af9d5[_0x1926('0x58')]['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x2a765a,null))[_0x1926('0x24')](function(_0x5ab455){if(_0x5ab455){_0x2cbcfa=_0x5ab455;logger[_0x1926('0x28')](_0x1926('0x29'),_0x1926('0x2f'),_0x1926('0xd7'),_0x5ab455['type'],util[_0x1926('0xc9')](_0x5af9d5[_0x1926('0x42')],{'showHidden':![],'depth':null}));switch(_0x5ab455['type']){case _0x1926('0xd8'):if(_0x5af9d5['query'][_0x1926('0xd9')]&&_0x5af9d5[_0x1926('0x42')][_0x1926('0xda')]){_0x22b7c8=_0x5af9d5[_0x1926('0x42')][_0x1926('0xda')];return db[_0x1926('0xa8')][_0x1926('0x5a')]({'where':{'messageId':_0x5af9d5[_0x1926('0x42')]['message-id']}});}break;}}})['then'](handleEntityNotFound(_0x2a765a,null))[_0x1926('0x24')](function(_0x4f270b){if(_0x4f270b){_0x39208a=_0x4f270b;switch(_0x2cbcfa[_0x1926('0x7f')]){case'csc':if(_0x22b7c8==='2'||_0x22b7c8==='6'){return _0x39208a['update']({'read':!![]});}else{logger['error'](_0x1926('0x29'),_0x1926('0x2f'),'csc',util[_0x1926('0xc9')](_0x5af9d5[_0x1926('0x42')],{'showHidden':![],'depth':null}));};break;}return _0x39208a;}})['then'](respondWithResult(_0x2a765a,null))['catch'](handleError(_0x2a765a,null));};exports[_0x1926('0xdb')]=function(_0x2b768c,_0x4d5e9c,_0x3fab6e){return db[_0x1926('0x3e')][_0x1926('0x5a')]({'where':{'id':_0x2b768c[_0x1926('0x58')]['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x4d5e9c,null))[_0x1926('0x24')](function(_0x292f97){if(_0x292f97){return _0x292f97[_0x1926('0xdb')](_0x2b768c['body'][_0x1926('0x6b')],_[_0x1926('0x9d')](_0x2b768c[_0x1926('0x63')],['ids','id'])||{})['spread'](function(_0x58593a){for(var _0x173b77=0x0;_0x173b77<_0x2b768c[_0x1926('0x63')][_0x1926('0x6b')][_0x1926('0x69')];_0x173b77+=0x1){socket[_0x1926('0xdc')](_0x1926('0xdd'),{'UserId':_0x2b768c[_0x1926('0x63')][_0x1926('0x6b')][_0x173b77],'SmsAccountId':_0x2b768c[_0x1926('0x58')]['id']});}return _0x58593a;});}})[_0x1926('0x24')](respondWithResult(_0x4d5e9c,null))[_0x1926('0x56')](handleError(_0x4d5e9c,null));};exports['removeAgents']=function(_0x24b60c,_0x2bfe0b,_0x211ada){var _0x88ec91;return db['SmsAccount'][_0x1926('0x5a')]({'where':{'id':_0x24b60c['params']['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x2bfe0b,null))[_0x1926('0x24')](function(_0x1d292c){if(_0x1d292c){return _0x1d292c[_0x1926('0xde')](_0x24b60c[_0x1926('0x42')]['ids'])['then'](function(_0x21b0e8){if(_[_0x1926('0xdf')](_0x24b60c[_0x1926('0x42')][_0x1926('0x6b')])){for(var _0x6ded2=0x0;_0x6ded2<_0x24b60c[_0x1926('0x42')][_0x1926('0x6b')][_0x1926('0x69')];_0x6ded2+=0x1){socket['emit']('userSmsAccount:remove',{'UserId':_0x24b60c[_0x1926('0x42')][_0x1926('0x6b')][_0x6ded2],'SmsAccountId':_0x24b60c[_0x1926('0x58')]['id']});}}else{socket['emit'](_0x1926('0xe0'),{'UserId':_0x24b60c[_0x1926('0x42')][_0x1926('0x6b')],'SmsAccountId':_0x24b60c[_0x1926('0x58')]['id']});}});}})['then'](respondWithStatusCode(_0x2bfe0b,null))[_0x1926('0x56')](handleError(_0x2bfe0b,null));};exports[_0x1926('0xe1')]=function(_0x125f4a,_0x2c63c9,_0x1b8df4){var _0x481a20={};var _0x2e5c13={};var _0x3ecbe2;var _0x112213;return db['SmsAccount'][_0x1926('0x68')]({'where':{'id':_0x125f4a['params']['id']}})[_0x1926('0x24')](handleEntityNotFound(_0x2c63c9,null))['then'](function(_0x5c4029){if(_0x5c4029){_0x3ecbe2=_0x5c4029;_0x2e5c13[_0x1926('0x40')]=_[_0x1926('0x41')](db[_0x1926('0xbd')][_0x1926('0x3f')]);_0x2e5c13[_0x1926('0x42')]=_['keys'](_0x125f4a[_0x1926('0x42')]);_0x2e5c13['filters']=_[_0x1926('0x44')](_0x2e5c13[_0x1926('0x40')],_0x2e5c13[_0x1926('0x42')]);_0x481a20[_0x1926('0x45')]=_[_0x1926('0x44')](_0x2e5c13[_0x1926('0x40')],qs[_0x1926('0x46')](_0x125f4a[_0x1926('0x42')][_0x1926('0x46')]));_0x481a20[_0x1926('0x45')]=_0x481a20[_0x1926('0x45')][_0x1926('0x69')]?_0x481a20[_0x1926('0x45')]:_0x2e5c13['model'];_0x481a20[_0x1926('0x49')]=qs[_0x1926('0x4a')](_0x125f4a[_0x1926('0x42')][_0x1926('0x4a')]);_0x481a20[_0x1926('0x4b')]=qs['filters'](_[_0x1926('0x4c')](_0x125f4a['query'],_0x2e5c13['filters']));if(_0x125f4a[_0x1926('0x42')][_0x1926('0x4d')]){_0x481a20[_0x1926('0x4b')]=_[_0x1926('0x4e')](_0x481a20[_0x1926('0x4b')],{'$or':_[_0x1926('0x4f')](_0x481a20[_0x1926('0x45')],function(_0x17587e){var _0x4f027c={};_0x4f027c[_0x17587e]={'$like':'%'+_0x125f4a['query'][_0x1926('0x4d')]+'%'};return _0x4f027c;})});}_0x481a20=_[_0x1926('0x4e')]({},_0x481a20,_0x125f4a[_0x1926('0x51')]);return _0x3ecbe2['getAgents'](_0x481a20);}})[_0x1926('0x24')](function(_0x1a21b6){if(_0x1a21b6){_0x112213=_0x1a21b6[_0x1926('0x69')];if(!_0x125f4a[_0x1926('0x42')]['hasOwnProperty'](_0x1926('0x48'))){_0x481a20['limit']=qs['limit'](_0x125f4a[_0x1926('0x42')][_0x1926('0x32')]);_0x481a20['offset']=qs[_0x1926('0x31')](_0x125f4a['query'][_0x1926('0x31')]);}return _0x3ecbe2[_0x1926('0xe1')](_0x481a20);}})[_0x1926('0x24')](function(_0xf58f22){if(_0xf58f22){return _0xf58f22?{'count':_0x112213,'rows':_0xf58f22}:null;}})[_0x1926('0x24')](respondWithResult(_0x2c63c9,null))[_0x1926('0x56')](handleError(_0x2c63c9,null));};
\ No newline at end of file
+var _0x7d18=['rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','VIRTUAL','field','options','SmsAccount','findAll','catch','show','includeAll','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','find','autoAssociation','update','params','describe','addDisposition','SmsAccountId','Disposition','getDispositions','findOne','include','rows','removeDispositions','ids','addAnswer','CannedAnswer','removeAnswers','notify','sms','SmsApplication','Applications','applications','orderBy','asc','account','CmContact','ValidationError','difference','createdAt','updatedAt','CompanyId','ListId','mobile','From','messageId','skebby','sender','text','from','plivo','Text','results','csc','originatingAddress','segmentedMessage','clickatell','replyMessageId','intelepeer','refid','isNil','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','Contacts','DESC','list','contact','SmsInteraction','interaction','created','push','close','unmanaged','*,*,*,*','AttachmentId','UserId','User','unshift','agent','waitForTheAssignedAgent','Start','startRouting','receiveMessage','SmsAccount,\x20%s,\x20%s,\x20%s','entity\x20found','stringify','twilio','Content-Type','text/xml','<?xml\x20version=\x221.0\x22\x20encoding=\x22UTF-8\x22?>\x0a<Response></Response>','addApplications','sequelize','transaction','map','bulkCreate','getApplications','getInteractions','Contact','Owner','fullname','Tag','tag','to\x20is\x20mandatory','List','SmsMessage','Messages','dataValues','log','endpoint\x20/status\x20POST\x20/','received\x20delivery\x20report\x20from','inspect','skebby_dispatch_id','connectel','statusInt','requestid','clicksend','message_id','status_code','groupName','DELIVERED','redif','error_code','infobip','DELIVERED_TO_GATEWAY','RECEIVED_BY_RECIPIENT','ACCEPTD','statusGet','message-id','state','addAgents','spread','removeAgents','isArray','emit','userSmsAccount:remove','getAgents','html-pdf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','./smsAccount.socket','register','jayson/promise','client','http','request','then','SmsAccount,\x20%s,\x20%s','request\x20sent','debug','error','message','info','result','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','reject','save','destroy','get','SmsAccounts','UserProfileResource','end','stack','name','send','index','Pause','mandatoryDispositionPause'];(function(_0x110c3d,_0x12ee06){var _0x226d67=function(_0x1fb6e1){while(--_0x1fb6e1){_0x110c3d['push'](_0x110c3d['shift']());}};_0x226d67(++_0x12ee06);}(_0x7d18,0xa3));var _0x87d1=function(_0x1bbc08,_0x444008){_0x1bbc08=_0x1bbc08-0x0;var _0x5d825b=_0x7d18[_0x1bbc08];return _0x5d825b;};'use strict';var pdf=require(_0x87d1('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x87d1('0x1'));var jsonpatch=require(_0x87d1('0x2'));var rp=require(_0x87d1('0x3'));var moment=require(_0x87d1('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x87d1('0x5'));var util=require(_0x87d1('0x6'));var path=require(_0x87d1('0x7'));var sox=require(_0x87d1('0x8'));var csv=require(_0x87d1('0x9'));var ejs=require(_0x87d1('0xa'));var fs=require('fs');var _=require(_0x87d1('0xb'));var squel=require(_0x87d1('0xc'));var crypto=require(_0x87d1('0xd'));var jsforce=require(_0x87d1('0xe'));var deskjs=require('desk.js');var toCsv=require(_0x87d1('0x9'));var querystring=require('querystring');var Papa=require(_0x87d1('0xf'));var authService=require(_0x87d1('0x10'));var hardwareService=require(_0x87d1('0x11'));var Redis=require(_0x87d1('0x12'));var qs=require('../../components/parsers/qs');var logger=require(_0x87d1('0x13'))('api');var utils=require(_0x87d1('0x14'));var config=require(_0x87d1('0x15'));var db=require('../../mysqldb')['db'];config[_0x87d1('0x16')]=_[_0x87d1('0x17')](config['redis'],{'host':_0x87d1('0x18'),'port':0x18eb});var socket=require(_0x87d1('0x19'))(new Redis(config['redis']));require(_0x87d1('0x1a'))[_0x87d1('0x1b')](socket);var jayson=require(_0x87d1('0x1c'));var client=jayson[_0x87d1('0x1d')][_0x87d1('0x1e')]({'port':0x232c});function respondWithRpcPromise(_0xdace76,_0x20211a,_0x10320f,_0x55a2d3){return new BPromise(function(_0x2c1458,_0x1cfa1a){var _0x34a698=_0x55a2d3||client;return _0x34a698[_0x87d1('0x1f')](_0xdace76,_0x10320f)[_0x87d1('0x20')](function(_0x44e395){logger['info'](_0x87d1('0x21'),_0x20211a,_0x87d1('0x22'));logger[_0x87d1('0x23')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x20211a,'request\x20sent',JSON['stringify'](_0x44e395));if(_0x44e395[_0x87d1('0x24')]){if(_0x44e395[_0x87d1('0x24')]['code']===0x1f4){logger['error']('SmsAccount,\x20%s,\x20%s',_0x20211a,_0x44e395[_0x87d1('0x24')][_0x87d1('0x25')]);return _0x1cfa1a(_0x44e395[_0x87d1('0x24')][_0x87d1('0x25')]);}logger[_0x87d1('0x24')](_0x87d1('0x21'),_0x20211a,_0x44e395['error'][_0x87d1('0x25')]);return _0x2c1458(_0x44e395['error'][_0x87d1('0x25')]);}else{logger[_0x87d1('0x26')](_0x87d1('0x21'),_0x20211a,_0x87d1('0x22'));_0x2c1458(_0x44e395[_0x87d1('0x27')][_0x87d1('0x25')]);}})['catch'](function(_0x465d4d){logger[_0x87d1('0x24')](_0x87d1('0x21'),_0x20211a,_0x465d4d);_0x1cfa1a(_0x465d4d);});});}function respondWithStatusCode(_0x417c4f,_0x18b6d8){_0x18b6d8=_0x18b6d8||0xcc;return function(_0x45b9b2){if(_0x45b9b2){return _0x417c4f[_0x87d1('0x28')](_0x18b6d8);}return _0x417c4f[_0x87d1('0x29')](_0x18b6d8)['end']();};}function respondWithResult(_0x504007,_0x3ce0e8){_0x3ce0e8=_0x3ce0e8||0xc8;return function(_0x1a9256){if(_0x1a9256){return _0x504007[_0x87d1('0x29')](_0x3ce0e8)[_0x87d1('0x2a')](_0x1a9256);}};}function respondWithFilteredResult(_0x6290d1,_0x12b6d3){return function(_0x244a55){if(_0x244a55){var _0x4373aa=_0x244a55[_0x87d1('0x2b')],_0xf1333c=_0x12b6d3[_0x87d1('0x2c')],_0x2b3df4=_0x12b6d3[_0x87d1('0x2c')]+_0x12b6d3[_0x87d1('0x2d')],_0x308e79;if(_0x2b3df4>=_0x4373aa){_0x2b3df4=_0x4373aa;_0x308e79=0xc8;}else{_0x308e79=0xce;}_0x6290d1[_0x87d1('0x29')](_0x308e79);return _0x6290d1[_0x87d1('0x2e')](_0x87d1('0x2f'),_0xf1333c+'-'+_0x2b3df4+'/'+_0x4373aa)[_0x87d1('0x2a')](_0x244a55);}return null;};}function patchUpdates(_0x5385b1){return function(_0x577e24){try{jsonpatch[_0x87d1('0x30')](_0x577e24,_0x5385b1,!![]);}catch(_0x361270){return BPromise[_0x87d1('0x31')](_0x361270);}return _0x577e24[_0x87d1('0x32')]();};}function saveUpdates(_0x3f06d6,_0x1ef922){return function(_0x3e2cb5){if(_0x3e2cb5){return _0x3e2cb5['update'](_0x3f06d6)[_0x87d1('0x20')](function(_0x5db6c7){return _0x5db6c7;});}return null;};}function removeEntity(_0x3bd16d,_0x27dbea){return function(_0x23f0bd){if(_0x23f0bd){return _0x23f0bd[_0x87d1('0x33')]()[_0x87d1('0x20')](function(){var _0x5141e2=_0x23f0bd[_0x87d1('0x34')]({'plain':!![]});var _0x4f7845=_0x87d1('0x35');return db[_0x87d1('0x36')][_0x87d1('0x33')]({'where':{'type':_0x4f7845,'resourceId':_0x5141e2['id']}})[_0x87d1('0x20')](function(){return _0x23f0bd;});})[_0x87d1('0x20')](function(){_0x3bd16d[_0x87d1('0x29')](0xcc)[_0x87d1('0x37')]();});}};}function handleEntityNotFound(_0x10d625,_0x223584){return function(_0x1ba435){if(!_0x1ba435){_0x10d625[_0x87d1('0x28')](0x194);}return _0x1ba435;};}function handleError(_0x57d7e9,_0x53a42f){_0x53a42f=_0x53a42f||0x1f4;return function(_0x5c6a07){logger[_0x87d1('0x24')](_0x5c6a07[_0x87d1('0x38')]);if(_0x5c6a07[_0x87d1('0x39')]){delete _0x5c6a07[_0x87d1('0x39')];}_0x57d7e9[_0x87d1('0x29')](_0x53a42f)[_0x87d1('0x3a')](_0x5c6a07);};}exports[_0x87d1('0x3b')]=function(_0x73fff5,_0x16ab25){var _0x224ebb={'include':[{'model':db[_0x87d1('0x3c')],'as':_0x87d1('0x3d')}]},_0x441f52={},_0x1992a1={'count':0x0,'rows':[]};var _0x382642=db['SmsAccount'][_0x87d1('0x3e')];_0x441f52[_0x87d1('0x3f')]=_[_0x87d1('0x40')](_0x382642);_0x441f52[_0x87d1('0x41')]=_[_0x87d1('0x40')](_0x73fff5[_0x87d1('0x41')]);_0x441f52[_0x87d1('0x42')]=_[_0x87d1('0x43')](_0x441f52[_0x87d1('0x3f')],_0x441f52[_0x87d1('0x41')]);_0x224ebb[_0x87d1('0x44')]=_[_0x87d1('0x43')](_0x441f52['model'],qs[_0x87d1('0x45')](_0x73fff5[_0x87d1('0x41')][_0x87d1('0x45')]));_0x224ebb[_0x87d1('0x44')]=_0x224ebb[_0x87d1('0x44')][_0x87d1('0x46')]?_0x224ebb[_0x87d1('0x44')]:_0x441f52[_0x87d1('0x3f')];if(!_0x73fff5[_0x87d1('0x41')][_0x87d1('0x47')](_0x87d1('0x48'))){_0x224ebb[_0x87d1('0x2d')]=qs[_0x87d1('0x2d')](_0x73fff5[_0x87d1('0x41')][_0x87d1('0x2d')]);_0x224ebb[_0x87d1('0x2c')]=qs[_0x87d1('0x2c')](_0x73fff5[_0x87d1('0x41')][_0x87d1('0x2c')]);}_0x224ebb[_0x87d1('0x49')]=qs['sort'](_0x73fff5[_0x87d1('0x41')][_0x87d1('0x4a')]);_0x224ebb[_0x87d1('0x4b')]=qs['filters'](_[_0x87d1('0x4c')](_0x73fff5[_0x87d1('0x41')],_0x441f52[_0x87d1('0x42')]));if(_0x73fff5['query'][_0x87d1('0x4d')]){_0x224ebb['where']=_[_0x87d1('0x4e')](_0x224ebb[_0x87d1('0x4b')],{'$or':_['map'](_0x382642,function(_0x7acd0f){if(_0x7acd0f[_0x87d1('0x4f')]['key']!==_0x87d1('0x50')){var _0xbc5791={};_0xbc5791[_0x7acd0f[_0x87d1('0x51')]]={'$like':'%'+_0x73fff5[_0x87d1('0x41')]['filter']+'%'};return _0xbc5791;}})});}_0x224ebb=_[_0x87d1('0x4e')]({},_0x224ebb,_0x73fff5[_0x87d1('0x52')]);var _0x5b1cd7={'where':_0x224ebb[_0x87d1('0x4b')]};return db[_0x87d1('0x53')][_0x87d1('0x2b')](_0x5b1cd7)[_0x87d1('0x20')](function(_0x17f664){_0x1992a1['count']=_0x17f664;if(_0x73fff5[_0x87d1('0x41')]['includeAll']){_0x224ebb['include']=[{'all':!![]}];}return db[_0x87d1('0x53')][_0x87d1('0x54')](_0x224ebb);})[_0x87d1('0x20')](function(_0x8763b7){_0x1992a1['rows']=_0x8763b7;return _0x1992a1;})[_0x87d1('0x20')](respondWithFilteredResult(_0x16ab25,_0x224ebb))[_0x87d1('0x55')](handleError(_0x16ab25,null));};exports[_0x87d1('0x56')]=function(_0x3ca374,_0x664fd1){var _0x5bd6c0={'raw':![],'where':{'id':_0x3ca374['params']['id']},'include':[{'model':db[_0x87d1('0x3c')],'as':_0x87d1('0x3d')}]},_0x1c0a6a={};_0x1c0a6a[_0x87d1('0x3f')]=_['keys'](db['SmsAccount'][_0x87d1('0x3e')]);_0x1c0a6a[_0x87d1('0x41')]=_[_0x87d1('0x40')](_0x3ca374[_0x87d1('0x41')]);_0x1c0a6a[_0x87d1('0x42')]=_[_0x87d1('0x43')](_0x1c0a6a[_0x87d1('0x3f')],_0x1c0a6a[_0x87d1('0x41')]);_0x5bd6c0[_0x87d1('0x44')]=_[_0x87d1('0x43')](_0x1c0a6a[_0x87d1('0x3f')],qs[_0x87d1('0x45')](_0x3ca374[_0x87d1('0x41')][_0x87d1('0x45')]));_0x5bd6c0[_0x87d1('0x44')]=_0x5bd6c0[_0x87d1('0x44')][_0x87d1('0x46')]?_0x5bd6c0[_0x87d1('0x44')]:_0x1c0a6a[_0x87d1('0x3f')];if(_0x3ca374['query'][_0x87d1('0x57')]){_0x5bd6c0['include']=[{'all':!![]}];}_0x5bd6c0=_[_0x87d1('0x4e')]({},_0x5bd6c0,_0x3ca374['options']);return db['SmsAccount']['find'](_0x5bd6c0)[_0x87d1('0x20')](handleEntityNotFound(_0x664fd1,null))[_0x87d1('0x20')](respondWithResult(_0x664fd1,null))[_0x87d1('0x55')](handleError(_0x664fd1,null));};exports[_0x87d1('0x58')]=function(_0x1f5d48,_0xa44086){return db[_0x87d1('0x53')][_0x87d1('0x58')](_0x1f5d48[_0x87d1('0x59')],{})[_0x87d1('0x20')](function(_0xad77fb){var _0x577bf8=_0x1f5d48[_0x87d1('0x5a')][_0x87d1('0x34')]({'plain':!![]});if(!_0x577bf8)throw new Error(_0x87d1('0x5b'));if(_0x577bf8[_0x87d1('0x5c')]===_0x87d1('0x5a')){var _0x6438e0=_0xad77fb[_0x87d1('0x34')]({'plain':!![]});var _0x1f7e3a=_0x87d1('0x35');return db[_0x87d1('0x5d')][_0x87d1('0x5e')]({'where':{'name':_0x1f7e3a,'userProfileId':_0x577bf8['userProfileId']},'raw':!![]})[_0x87d1('0x20')](function(_0x5ba239){if(_0x5ba239&&_0x5ba239[_0x87d1('0x5f')]===0x0){return db['UserProfileResource'][_0x87d1('0x58')]({'name':_0x6438e0['name'],'resourceId':_0x6438e0['id'],'type':_0x5ba239['name'],'sectionId':_0x5ba239['id']},{})[_0x87d1('0x20')](function(){return _0xad77fb;});}else{return _0xad77fb;}})[_0x87d1('0x55')](function(_0x192dda){logger[_0x87d1('0x24')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x192dda);throw _0x192dda;});}return _0xad77fb;})[_0x87d1('0x20')](respondWithResult(_0xa44086,0xc9))[_0x87d1('0x55')](handleError(_0xa44086,null));};exports[_0x87d1('0x60')]=function(_0x1cb055,_0x2f3c69){if(_0x1cb055[_0x87d1('0x59')]['id']){delete _0x1cb055[_0x87d1('0x59')]['id'];}return db['SmsAccount']['find']({'where':{'id':_0x1cb055[_0x87d1('0x61')]['id']},'include':[{'model':db['Pause'],'as':_0x87d1('0x3d')}]})[_0x87d1('0x20')](handleEntityNotFound(_0x2f3c69,null))[_0x87d1('0x20')](saveUpdates(_0x1cb055['body'],null))[_0x87d1('0x20')](respondWithResult(_0x2f3c69,null))[_0x87d1('0x55')](handleError(_0x2f3c69,null));};exports[_0x87d1('0x33')]=function(_0x95334e,_0x2e0678){return db[_0x87d1('0x53')][_0x87d1('0x5e')]({'where':{'id':_0x95334e[_0x87d1('0x61')]['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x2e0678,null))[_0x87d1('0x20')](removeEntity(_0x2e0678,null))['catch'](handleError(_0x2e0678,null));};exports['describe']=function(_0x250cf9,_0x5e657a){return db[_0x87d1('0x53')][_0x87d1('0x62')]()[_0x87d1('0x20')](respondWithResult(_0x5e657a,null))[_0x87d1('0x55')](handleError(_0x5e657a,null));};exports[_0x87d1('0x63')]=function(_0x1ed5a5,_0x498e55,_0x240f64){if(_0x1ed5a5[_0x87d1('0x59')]['id']){delete _0x1ed5a5[_0x87d1('0x59')]['id'];}return db['SmsAccount'][_0x87d1('0x5e')]({'where':{'id':_0x1ed5a5[_0x87d1('0x61')]['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x498e55,null))[_0x87d1('0x20')](function(_0x1048dd){if(_0x1048dd){_0x1ed5a5['body'][_0x87d1('0x64')]=_0x1048dd['id'];return db[_0x87d1('0x65')][_0x87d1('0x58')](_0x1ed5a5['body']);}})['then'](respondWithResult(_0x498e55,null))[_0x87d1('0x55')](handleError(_0x498e55,null));};exports[_0x87d1('0x66')]=function(_0x5e6636,_0x19af5d,_0x58ba38){var _0x3637d7={'raw':![],'where':{}};var _0x34024c={};var _0x1dea40={'count':0x0,'rows':[]};return db[_0x87d1('0x53')][_0x87d1('0x67')]({'where':{'id':_0x5e6636[_0x87d1('0x61')]['id']}})['then'](handleEntityNotFound(_0x19af5d,null))['then'](function(_0x2481f2){if(_0x2481f2){_0x34024c[_0x87d1('0x3f')]=_[_0x87d1('0x40')](db[_0x87d1('0x65')][_0x87d1('0x3e')]);_0x34024c[_0x87d1('0x41')]=_['keys'](_0x5e6636[_0x87d1('0x41')]);_0x34024c[_0x87d1('0x42')]=_[_0x87d1('0x43')](_0x34024c[_0x87d1('0x3f')],_0x34024c['query']);_0x3637d7[_0x87d1('0x44')]=_[_0x87d1('0x43')](_0x34024c[_0x87d1('0x3f')],qs[_0x87d1('0x45')](_0x5e6636['query'][_0x87d1('0x45')]));_0x3637d7['attributes']=_0x3637d7[_0x87d1('0x44')][_0x87d1('0x46')]?_0x3637d7[_0x87d1('0x44')]:_0x34024c[_0x87d1('0x3f')];if(!_0x5e6636[_0x87d1('0x41')][_0x87d1('0x47')]('nolimit')){_0x3637d7['limit']=qs[_0x87d1('0x2d')](_0x5e6636[_0x87d1('0x41')][_0x87d1('0x2d')]);_0x3637d7['offset']=qs[_0x87d1('0x2c')](_0x5e6636[_0x87d1('0x41')][_0x87d1('0x2c')]);}_0x3637d7[_0x87d1('0x49')]=qs[_0x87d1('0x4a')](_0x5e6636[_0x87d1('0x41')]['sort']);_0x3637d7['where']=qs[_0x87d1('0x42')](_[_0x87d1('0x4c')](_0x5e6636['query'],_0x34024c['filters']));_0x3637d7['where'][_0x87d1('0x64')]=_0x2481f2['id'];if(_0x5e6636['query'][_0x87d1('0x4d')]){_0x3637d7[_0x87d1('0x4b')]=_[_0x87d1('0x4e')](_0x3637d7[_0x87d1('0x4b')],{'$or':_['map'](_0x3637d7[_0x87d1('0x44')],function(_0x3ca468){var _0x1ff800={};_0x1ff800[_0x3ca468]={'$like':'%'+_0x5e6636[_0x87d1('0x41')][_0x87d1('0x4d')]+'%'};return _0x1ff800;})});}_0x3637d7=_[_0x87d1('0x4e')]({},_0x3637d7,_0x5e6636['options']);return db[_0x87d1('0x65')][_0x87d1('0x2b')]({'where':_0x3637d7['where']})[_0x87d1('0x20')](function(_0x2e42bb){_0x1dea40[_0x87d1('0x2b')]=_0x2e42bb;if(_0x5e6636['query'][_0x87d1('0x57')]){_0x3637d7[_0x87d1('0x68')]=[{'all':!![]}];}return db['Disposition'][_0x87d1('0x54')](_0x3637d7);})[_0x87d1('0x20')](function(_0x26d37c){_0x1dea40[_0x87d1('0x69')]=_0x26d37c;return _0x1dea40;});}})[_0x87d1('0x20')](respondWithFilteredResult(_0x19af5d,_0x3637d7))[_0x87d1('0x55')](handleError(_0x19af5d,null));};exports[_0x87d1('0x6a')]=function(_0x54b4d3,_0x36a283,_0x2e8511){var _0xcf1c40;return db[_0x87d1('0x53')][_0x87d1('0x5e')]({'where':{'id':_0x54b4d3['params']['id']}})['then'](handleEntityNotFound(_0x36a283,null))['then'](function(_0x3b9ad6){if(_0x3b9ad6){return _0x3b9ad6[_0x87d1('0x6a')](_0x54b4d3[_0x87d1('0x41')][_0x87d1('0x6b')]);}})[_0x87d1('0x20')](respondWithStatusCode(_0x36a283,null))[_0x87d1('0x55')](handleError(_0x36a283,null));};exports[_0x87d1('0x6c')]=function(_0x4936aa,_0x19ff04,_0x1de525){if(_0x4936aa[_0x87d1('0x59')]['id']){delete _0x4936aa[_0x87d1('0x59')]['id'];}return db['SmsAccount'][_0x87d1('0x5e')]({'where':{'id':_0x4936aa[_0x87d1('0x61')]['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x19ff04,null))['then'](function(_0x14c089){if(_0x14c089){_0x4936aa['body'][_0x87d1('0x64')]=_0x14c089['id'];return db[_0x87d1('0x6d')][_0x87d1('0x58')](_0x4936aa[_0x87d1('0x59')]);}})['then'](respondWithResult(_0x19ff04,null))[_0x87d1('0x55')](handleError(_0x19ff04,null));};exports['getAnswers']=function(_0x55b89d,_0x33b40c,_0x5d4f92){var _0xb1d711={'raw':![],'where':{}};var _0x2d8bbd={};var _0x50d786={'count':0x0,'rows':[]};return db[_0x87d1('0x53')][_0x87d1('0x67')]({'where':{'id':_0x55b89d[_0x87d1('0x61')]['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x33b40c,null))[_0x87d1('0x20')](function(_0x58ae74){if(_0x58ae74){_0x2d8bbd['model']=_['keys'](db[_0x87d1('0x6d')]['rawAttributes']);_0x2d8bbd[_0x87d1('0x41')]=_['keys'](_0x55b89d[_0x87d1('0x41')]);_0x2d8bbd[_0x87d1('0x42')]=_[_0x87d1('0x43')](_0x2d8bbd['model'],_0x2d8bbd[_0x87d1('0x41')]);_0xb1d711['attributes']=_[_0x87d1('0x43')](_0x2d8bbd['model'],qs['fields'](_0x55b89d[_0x87d1('0x41')][_0x87d1('0x45')]));_0xb1d711[_0x87d1('0x44')]=_0xb1d711[_0x87d1('0x44')]['length']?_0xb1d711[_0x87d1('0x44')]:_0x2d8bbd[_0x87d1('0x3f')];if(!_0x55b89d[_0x87d1('0x41')][_0x87d1('0x47')](_0x87d1('0x48'))){_0xb1d711[_0x87d1('0x2d')]=qs[_0x87d1('0x2d')](_0x55b89d[_0x87d1('0x41')][_0x87d1('0x2d')]);_0xb1d711[_0x87d1('0x2c')]=qs[_0x87d1('0x2c')](_0x55b89d['query'][_0x87d1('0x2c')]);}_0xb1d711[_0x87d1('0x49')]=qs['sort'](_0x55b89d[_0x87d1('0x41')][_0x87d1('0x4a')]);_0xb1d711['where']=qs[_0x87d1('0x42')](_[_0x87d1('0x4c')](_0x55b89d[_0x87d1('0x41')],_0x2d8bbd[_0x87d1('0x42')]));_0xb1d711['where'][_0x87d1('0x64')]=_0x58ae74['id'];if(_0x55b89d[_0x87d1('0x41')][_0x87d1('0x4d')]){_0xb1d711[_0x87d1('0x4b')]=_[_0x87d1('0x4e')](_0xb1d711['where'],{'$or':_['map'](_0xb1d711['attributes'],function(_0x46c10b){var _0x241e12={};_0x241e12[_0x46c10b]={'$like':'%'+_0x55b89d[_0x87d1('0x41')][_0x87d1('0x4d')]+'%'};return _0x241e12;})});}_0xb1d711=_[_0x87d1('0x4e')]({},_0xb1d711,_0x55b89d[_0x87d1('0x52')]);return db['CannedAnswer'][_0x87d1('0x2b')]({'where':_0xb1d711[_0x87d1('0x4b')]})['then'](function(_0x36c1e2){_0x50d786['count']=_0x36c1e2;if(_0x55b89d[_0x87d1('0x41')][_0x87d1('0x57')]){_0xb1d711[_0x87d1('0x68')]=[{'all':!![]}];}return db[_0x87d1('0x6d')][_0x87d1('0x54')](_0xb1d711);})[_0x87d1('0x20')](function(_0x860fe3){_0x50d786[_0x87d1('0x69')]=_0x860fe3;return _0x50d786;});}})[_0x87d1('0x20')](respondWithFilteredResult(_0x33b40c,_0xb1d711))[_0x87d1('0x55')](handleError(_0x33b40c,null));};exports[_0x87d1('0x6e')]=function(_0x3f9d5f,_0x96d470,_0x45a7b6){var _0x2346e7;return db[_0x87d1('0x53')][_0x87d1('0x5e')]({'where':{'id':_0x3f9d5f[_0x87d1('0x61')]['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x96d470,null))['then'](function(_0x41ce85){if(_0x41ce85){return _0x41ce85['removeAnswers'](_0x3f9d5f['query'][_0x87d1('0x6b')]);}})[_0x87d1('0x20')](respondWithStatusCode(_0x96d470,null))[_0x87d1('0x55')](handleError(_0x96d470,null));};exports[_0x87d1('0x6f')]=function(_0x44d1dd,_0x1cd750,_0x3dfeff){var _0x2dfc7f={'channel':_0x87d1('0x70')};var _0x215d45=[];var _0x26bb1a=[];var _0x2b91a2={};return db[_0x87d1('0x53')][_0x87d1('0x5e')]({'where':{'id':_0x44d1dd[_0x87d1('0x61')]['id']},'include':[{'model':db[_0x87d1('0x71')],'as':_0x87d1('0x72')}]})[_0x87d1('0x20')](handleEntityNotFound(_0x1cd750,null))['then'](function(_0x3a7f31){_0x2dfc7f['account']=_0x3a7f31;_0x2dfc7f[_0x87d1('0x73')]=_[_0x87d1('0x74')](_0x3a7f31[_0x87d1('0x72')],['priority'],[_0x87d1('0x75')]);if(_0x2dfc7f[_0x87d1('0x76')][_0x87d1('0x72')]){delete _0x2dfc7f[_0x87d1('0x76')][_0x87d1('0x72')];}return db[_0x87d1('0x77')][_0x87d1('0x62')]();})[_0x87d1('0x20')](function(_0x35f5a7){if(!_0x35f5a7){throw new db['Sequelize'][(_0x87d1('0x78'))]('no\x20available\x20attributes');}_0x215d45=_[_0x87d1('0x79')](_['keys'](_0x35f5a7),[_0x87d1('0x7a'),'updatedAt']);_0x26bb1a=_[_0x87d1('0x79')](_[_0x87d1('0x40')](_0x35f5a7),['createdAt',_0x87d1('0x7b'),_0x87d1('0x7c'),_0x87d1('0x7d')]);_0x2dfc7f['body']={'mapKey':_0x87d1('0x7e')};if(_0x2dfc7f[_0x87d1('0x76')][_0x87d1('0x4f')]){switch(_0x2dfc7f[_0x87d1('0x76')][_0x87d1('0x4f')]){case'twilio':_0x2dfc7f[_0x87d1('0x59')]['from']=_0x44d1dd['body'][_0x87d1('0x7f')];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x59')]=_0x44d1dd['body']['Body'];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x80')]=_0x44d1dd[_0x87d1('0x59')]['MessageSid'];break;case _0x87d1('0x81'):_0x2dfc7f[_0x87d1('0x59')]['from']='+'+_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x82')];_0x2dfc7f['body'][_0x87d1('0x59')]=_0x44d1dd['body'][_0x87d1('0x83')];break;case'connectel':_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')]=_0x44d1dd['body'][_0x87d1('0x84')];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x59')]=_0x44d1dd['body'][_0x87d1('0x25')];break;case'clicksend':_0x2dfc7f[_0x87d1('0x59')]['from']=_0x44d1dd[_0x87d1('0x59')]['from'];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x59')]=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x59')];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x80')]=_0x44d1dd[_0x87d1('0x59')]['message_id'];break;case _0x87d1('0x85'):_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')]=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x7f')];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x59')]=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x86')];_0x2dfc7f['body'][_0x87d1('0x80')]=_0x44d1dd[_0x87d1('0x59')]['MessageUUID'];break;case'infobip':_0x2dfc7f['body'][_0x87d1('0x84')]='+'+_0x44d1dd[_0x87d1('0x59')]['results'][0x0][_0x87d1('0x84')];_0x2dfc7f[_0x87d1('0x59')]['body']=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x87')][0x0][_0x87d1('0x83')];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x80')]=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x87')][0x0][_0x87d1('0x80')];break;case _0x87d1('0x88'):_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')]=_0x44d1dd['body'][_0x87d1('0x89')];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x59')]=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x8a')][_0x87d1('0x25')];break;case _0x87d1('0x8b'):_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')]=_0x44d1dd[_0x87d1('0x59')]['fromNumber'];_0x2dfc7f['body']['body']=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x83')];_0x2dfc7f[_0x87d1('0x59')]['messageId']=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x8c')];break;case _0x87d1('0x8d'):_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')]=_0x44d1dd['body'][_0x87d1('0x84')];_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x59')]=_0x44d1dd[_0x87d1('0x59')][_0x87d1('0x25')];_0x2dfc7f['body'][_0x87d1('0x80')]=_0x44d1dd['body'][_0x87d1('0x8e')];break;}}if(_0x2dfc7f['body']['id']){delete _0x2dfc7f[_0x87d1('0x59')]['id'];}if(_[_0x87d1('0x8f')](_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')])){throw new db[(_0x87d1('0x90'))][(_0x87d1('0x78'))](_0x87d1('0x91'));}if(_['isNil'](_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x59')])||_0x2dfc7f['body'][_0x87d1('0x59')]===''){throw new db[(_0x87d1('0x90'))][(_0x87d1('0x78'))](_0x87d1('0x92'));}if(_['isNil'](_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x93')])){throw new db[(_0x87d1('0x90'))]['ValidationError'](_0x87d1('0x94')+_0x26bb1a);}if(!_[_0x87d1('0x95')](_0x26bb1a,_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x93')])){throw new db[(_0x87d1('0x90'))]['ValidationError'](_0x87d1('0x96')+_0x26bb1a);}_0x2b91a2[_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x93')]]=_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')];return db[_0x87d1('0x97')][_0x87d1('0x5e')]({'where':{'id':_0x2dfc7f[_0x87d1('0x76')]['ListId']},'include':[{'model':db[_0x87d1('0x77')],'as':_0x87d1('0x98'),'where':_0x2b91a2,'limit':0x1,'order':[[_0x87d1('0x7b'),_0x87d1('0x99')]]}]});})[_0x87d1('0x20')](handleEntityNotFound(_0x1cd750,null))[_0x87d1('0x20')](function(_0x5cb876){if(_0x5cb876){_0x2dfc7f[_0x87d1('0x9a')]=_['omit'](_0x5cb876,[_0x87d1('0x98')]);if(_0x5cb876[_0x87d1('0x98')][_0x87d1('0x46')]){return _0x5cb876[_0x87d1('0x98')][0x0];}var _0x3c110b=_[_0x87d1('0x17')](_0x2dfc7f[_0x87d1('0x59')],{'firstName':_0x2dfc7f[_0x87d1('0x59')]['from'],'ListId':_0x5cb876['id']});_0x3c110b[_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x93')]]=_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')];return db[_0x87d1('0x77')][_0x87d1('0x58')](_0x3c110b,{'fields':_0x215d45,'raw':!![]});}})['then'](handleEntityNotFound(_0x1cd750,null))[_0x87d1('0x20')](function(_0x9e665b){if(_0x9e665b){_0x2dfc7f[_0x87d1('0x9b')]=_0x9e665b;var _0x548f55={'ContactId':_0x9e665b['id'],'phone':_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')],'SmsAccountId':_0x44d1dd[_0x87d1('0x61')]['id']};var _0x1402d6={'ContactId':_0x9e665b['id'],'SmsAccountId':_0x44d1dd[_0x87d1('0x61')]['id'],'closed':![]};return db[_0x87d1('0x9c')][_0x87d1('0x5e')]({'where':_0x1402d6})['then'](function(_0x57d6b2){if(_0x57d6b2){return[_0x57d6b2,![]];}return db['SmsInteraction'][_0x87d1('0x58')](_0x548f55)[_0x87d1('0x20')](function(_0x52f58e){return[_0x52f58e,!![]];});});}})['spread'](function(_0x2e0473,_0x270382){_0x2dfc7f[_0x87d1('0x9d')]=_0x2e0473['get']({'plain':!![]});_0x2dfc7f[_0x87d1('0x9d')][_0x87d1('0x9e')]=![];if(_0x270382){if(_0x2dfc7f[_0x87d1('0x76')]['autoclose']){_0x2dfc7f[_0x87d1('0x73')][_0x87d1('0x9f')]({'id':0x0,'priority':_0x2dfc7f[_0x87d1('0x73')][_0x87d1('0x46')]+0x1,'app':_0x87d1('0xa0'),'appdata':_0x87d1('0xa1'),'interval':_0x87d1('0xa2')});}_0x2dfc7f[_0x87d1('0x9d')][_0x87d1('0x9e')]=!![];}return db['SmsMessage'][_0x87d1('0x58')]({'phone':_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x84')],'messageId':_0x2dfc7f['body'][_0x87d1('0x80')],'body':_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0x59')],'SmsAccountId':_0x44d1dd[_0x87d1('0x61')]['id'],'SmsInteractionId':_0x2e0473['id'],'direction':'in','ContactId':_0x2e0473['ContactId'],'AttachmentId':_0x2dfc7f[_0x87d1('0x59')][_0x87d1('0xa3')]});})[_0x87d1('0x20')](function(_0x706022){_0x2dfc7f[_0x87d1('0x25')]=_0x706022;if(_0x2dfc7f['interaction'][_0x87d1('0xa4')]){return db[_0x87d1('0xa5')]['find']({'attributes':['id',_0x87d1('0x39')],'where':{'id':_0x2dfc7f[_0x87d1('0x9d')][_0x87d1('0xa4')]}})['then'](function(_0x542a38){if(_0x542a38){_0x2dfc7f['applications'][_0x87d1('0xa6')]({'id':0x0,'priority':0x0,'app':_0x87d1('0xa7'),'appdata':_0x542a38[_0x87d1('0x39')]+','+(_0x2dfc7f[_0x87d1('0x76')][_0x87d1('0xa8')]||0xa),'interval':_0x87d1('0xa2')});}return respondWithRpcPromise(_0x87d1('0xa9'),_0x87d1('0xaa'),_0x2dfc7f);});}return respondWithRpcPromise(_0x87d1('0xa9'),_0x87d1('0xaa'),_0x2dfc7f);})[_0x87d1('0x20')](function(_0x4d38dc){if(_0x4d38dc){var _0xca41f7=0xc8;var _0x349ca0=_0x87d1('0xab');logger[_0x87d1('0x26')](_0x87d1('0xac'),_0x349ca0,_0xca41f7,_0x87d1('0xad'));logger[_0x87d1('0x23')]('SmsAccount,\x20%s,\x20%s,\x20%s,\x20%s',_0x349ca0,_0xca41f7,_0x87d1('0xad'),JSON[_0x87d1('0xae')](_0x4d38dc));if(_0x2dfc7f['account'][_0x87d1('0x4f')]===_0x87d1('0xaf')){return _0x1cd750[_0x87d1('0x29')](_0xca41f7)[_0x87d1('0x2e')](_0x87d1('0xb0'),_0x87d1('0xb1'))[_0x87d1('0x3a')](_0x87d1('0xb2'));}else{return _0x1cd750[_0x87d1('0x29')](_0xca41f7)[_0x87d1('0x2a')](_0x4d38dc);}}})[_0x87d1('0x55')](handleError(_0x1cd750,null));};exports[_0x87d1('0xb3')]=function(_0x55aee2,_0x15ddec,_0x5ba583){return db[_0x87d1('0x53')][_0x87d1('0x67')]({'where':{'id':_0x55aee2[_0x87d1('0x61')]['id']}})['then'](handleEntityNotFound(_0x15ddec,null))['then'](function(_0x23a0c3){if(_0x23a0c3){return db[_0x87d1('0xb4')][_0x87d1('0xb5')](function(_0x5ebdee){return db['SmsApplication'][_0x87d1('0x33')]({'where':{'SmsAccountId':_0x55aee2[_0x87d1('0x61')]['id']},'transaction':_0x5ebdee})[_0x87d1('0x20')](function(_0x990d49){var _0x2bed19=_[_0x87d1('0xb6')](_0x55aee2['body'],function(_0x2256d3){_0x2256d3[_0x87d1('0x64')]=_0x55aee2['params']['id'];return _0x2256d3;});return db[_0x87d1('0x71')][_0x87d1('0xb7')](_0x2bed19,{'transaction':_0x5ebdee});});})[_0x87d1('0x20')](function(){return db[_0x87d1('0x71')]['findAndCountAll']({'where':{'SmsAccountId':_0x55aee2['params']['id']},'order':'priority'});});}})['then'](respondWithResult(_0x15ddec,null))['catch'](handleError(_0x15ddec,null));};exports[_0x87d1('0xb8')]=function(_0x5edb0c,_0x1725bd,_0x3e5a59){var _0x5938b9={};var _0x398838={};var _0x10f86d;var _0x488259;return db[_0x87d1('0x53')][_0x87d1('0x67')]({'where':{'id':_0x5edb0c['params']['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x1725bd,null))[_0x87d1('0x20')](function(_0x3ed6bf){if(_0x3ed6bf){_0x10f86d=_0x3ed6bf;_0x398838[_0x87d1('0x3f')]=_[_0x87d1('0x40')](db['SmsApplication'][_0x87d1('0x3e')]);_0x398838[_0x87d1('0x41')]=_[_0x87d1('0x40')](_0x5edb0c[_0x87d1('0x41')]);_0x398838['filters']=_['intersection'](_0x398838['model'],_0x398838[_0x87d1('0x41')]);_0x5938b9[_0x87d1('0x44')]=_[_0x87d1('0x43')](_0x398838[_0x87d1('0x3f')],qs[_0x87d1('0x45')](_0x5edb0c[_0x87d1('0x41')][_0x87d1('0x45')]));_0x5938b9['attributes']=_0x5938b9[_0x87d1('0x44')][_0x87d1('0x46')]?_0x5938b9['attributes']:_0x398838['model'];_0x5938b9[_0x87d1('0x49')]=qs[_0x87d1('0x4a')](_0x5edb0c['query'][_0x87d1('0x4a')]);_0x5938b9['where']=qs['filters'](_['pick'](_0x5edb0c[_0x87d1('0x41')],_0x398838[_0x87d1('0x42')]));if(_0x5edb0c[_0x87d1('0x41')][_0x87d1('0x4d')]){_0x5938b9[_0x87d1('0x4b')]=_[_0x87d1('0x4e')](_0x5938b9['where'],{'$or':_[_0x87d1('0xb6')](_0x5938b9[_0x87d1('0x44')],function(_0x286aca){var _0x291a7f={};_0x291a7f[_0x286aca]={'$like':'%'+_0x5edb0c[_0x87d1('0x41')][_0x87d1('0x4d')]+'%'};return _0x291a7f;})});}_0x5938b9=_['merge']({},_0x5938b9,_0x5edb0c[_0x87d1('0x52')]);return _0x10f86d[_0x87d1('0xb8')](_0x5938b9);}})[_0x87d1('0x20')](function(_0x5946c8){if(_0x5946c8){_0x488259=_0x5946c8[_0x87d1('0x46')];if(!_0x5edb0c[_0x87d1('0x41')][_0x87d1('0x47')](_0x87d1('0x48'))){_0x5938b9[_0x87d1('0x2d')]=qs['limit'](_0x5edb0c[_0x87d1('0x41')]['limit']);_0x5938b9[_0x87d1('0x2c')]=qs['offset'](_0x5edb0c['query'][_0x87d1('0x2c')]);}return _0x10f86d[_0x87d1('0xb8')](_0x5938b9);}})[_0x87d1('0x20')](function(_0x1c9092){if(_0x1c9092){return _0x1c9092?{'count':_0x488259,'rows':_0x1c9092}:null;}})[_0x87d1('0x20')](respondWithResult(_0x1725bd,null))[_0x87d1('0x55')](handleError(_0x1725bd,null));};exports[_0x87d1('0xb9')]=function(_0x12d24b,_0x35a604,_0xdc7f44){var _0x1f45e1={'raw':![],'where':{}};var _0x2af6c8={};var _0x30c2cb={'count':0x0,'rows':[]};return db[_0x87d1('0x53')]['findOne']({'where':{'id':_0x12d24b['params']['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x35a604,null))[_0x87d1('0x20')](function(_0x5b48f2){if(_0x5b48f2){_0x2af6c8[_0x87d1('0x3f')]=_[_0x87d1('0x40')](db[_0x87d1('0x9c')][_0x87d1('0x3e')]);_0x2af6c8[_0x87d1('0x41')]=_['keys'](_0x12d24b['query']);_0x2af6c8[_0x87d1('0x42')]=_[_0x87d1('0x43')](_0x2af6c8[_0x87d1('0x3f')],_0x2af6c8[_0x87d1('0x41')]);_0x1f45e1[_0x87d1('0x44')]=_['intersection'](_0x2af6c8[_0x87d1('0x3f')],qs[_0x87d1('0x45')](_0x12d24b['query']['fields']));_0x1f45e1[_0x87d1('0x44')]=_0x1f45e1[_0x87d1('0x44')]['length']?_0x1f45e1['attributes']:_0x2af6c8['model'];if(!_0x12d24b[_0x87d1('0x41')]['hasOwnProperty'](_0x87d1('0x48'))){_0x1f45e1[_0x87d1('0x2d')]=qs[_0x87d1('0x2d')](_0x12d24b[_0x87d1('0x41')][_0x87d1('0x2d')]);_0x1f45e1[_0x87d1('0x2c')]=qs[_0x87d1('0x2c')](_0x12d24b[_0x87d1('0x41')][_0x87d1('0x2c')]);}_0x1f45e1[_0x87d1('0x49')]=qs['sort'](_0x12d24b['query'][_0x87d1('0x4a')]);_0x1f45e1[_0x87d1('0x4b')]=qs['filters'](_[_0x87d1('0x4c')](_0x12d24b[_0x87d1('0x41')],_0x2af6c8['filters']));_0x1f45e1[_0x87d1('0x4b')]['SmsAccountId']=_0x5b48f2['id'];if(_0x12d24b[_0x87d1('0x41')][_0x87d1('0x4d')]){_0x1f45e1[_0x87d1('0x4b')]=_['merge'](_0x1f45e1[_0x87d1('0x4b')],{'$or':_[_0x87d1('0xb6')](_0x1f45e1[_0x87d1('0x44')],function(_0x33ca95){var _0x6b4a00={};_0x6b4a00[_0x33ca95]={'$like':'%'+_0x12d24b[_0x87d1('0x41')][_0x87d1('0x4d')]+'%'};return _0x6b4a00;})});}_0x1f45e1=_[_0x87d1('0x4e')]({},_0x1f45e1,_0x12d24b[_0x87d1('0x52')]);return db[_0x87d1('0x9c')][_0x87d1('0x2b')]({'where':_0x1f45e1[_0x87d1('0x4b')]})['then'](function(_0x50b968){_0x30c2cb[_0x87d1('0x2b')]=_0x50b968;if(_0x12d24b['query'][_0x87d1('0x57')]){_0x1f45e1[_0x87d1('0x68')]=[{'model':db['CmContact'],'as':_0x87d1('0xba'),'required':![]},{'model':db['User'],'as':_0x87d1('0xbb'),'attributes':[_0x87d1('0x39'),_0x87d1('0xbc'),'internal'],'required':![]},{'model':db[_0x87d1('0xbd')],'as':'Tags','attributes':['id',_0x87d1('0x39'),'color'],'where':_0x12d24b['query']['tag']?{'id':_0x12d24b[_0x87d1('0x41')][_0x87d1('0xbe')]}:undefined,'required':_0x12d24b[_0x87d1('0x41')]['tag']?!![]:![]}];}return db[_0x87d1('0x9c')][_0x87d1('0x54')](_0x1f45e1);})[_0x87d1('0x20')](function(_0x4b84a4){_0x30c2cb['rows']=_0x4b84a4;return _0x30c2cb;});}})['then'](respondWithFilteredResult(_0x35a604,_0x1f45e1))[_0x87d1('0x55')](handleError(_0x35a604,null));};exports[_0x87d1('0x3a')]=function(_0x1362c5,_0x412fad,_0x177132){var _0x2adb56,_0xc04a8,_0x39795a;if(_[_0x87d1('0x8f')](_0x1362c5[_0x87d1('0x59')][_0x87d1('0x59')])||_0x1362c5[_0x87d1('0x59')][_0x87d1('0x59')]===''){throw new db[(_0x87d1('0x90'))][(_0x87d1('0x78'))](_0x87d1('0x92'));}if(_[_0x87d1('0x8f')](_0x1362c5[_0x87d1('0x59')]['to'])){throw new db[(_0x87d1('0x90'))][(_0x87d1('0x78'))](_0x87d1('0xbf'));}_0x2adb56=_0x1362c5[_0x87d1('0x59')]['to'];return db['SmsAccount']['find']({'where':{'id':_0x1362c5[_0x87d1('0x61')]['id']},'include':[{'model':db[_0x87d1('0x97')],'as':_0x87d1('0xc0'),'include':[{'model':db['CmContact'],'as':_0x87d1('0x98'),'where':{'mobile':_0x2adb56},'limit':0x1,'order':[['updatedAt',_0x87d1('0x99')]]}]}]})['then'](handleEntityNotFound(_0x412fad,null))['then'](function(_0xec3a06){if(_0xec3a06&&_0xec3a06['List']){_0xc04a8=_0xec3a06[_0x87d1('0x34')]({'plain':!![]});if(_0xc04a8[_0x87d1('0xc0')]&&_0xc04a8[_0x87d1('0xc0')][_0x87d1('0x98')]['length']){return _0xc04a8[_0x87d1('0xc0')]['Contacts'][0x0];}return db[_0x87d1('0x77')][_0x87d1('0x58')](_[_0x87d1('0x17')](_0x1362c5[_0x87d1('0x59')],{'firstName':_0x2adb56,'mobile':_0x2adb56,'phone':_0x2adb56,'ListId':_0xc04a8[_0x87d1('0x7d')]}));}})[_0x87d1('0x20')](handleEntityNotFound(_0x412fad,null))['then'](function(_0x475f54){if(_0x475f54){_0x39795a=_0x475f54;return db[_0x87d1('0x9c')][_0x87d1('0x5e')]({'where':{'ContactId':_0x39795a['id'],'closed':![],'SmsAccountId':_0xc04a8['id']}})[_0x87d1('0x20')](function(_0x4034a1){if(_0x4034a1){return[_0x4034a1,![]];}return db[_0x87d1('0x9c')][_0x87d1('0x58')]({'UserId':_0x1362c5[_0x87d1('0x5a')]['id'],'ContactId':_0x39795a['id'],'SmsAccountId':_0xc04a8['id'],'phone':_0x2adb56,'firstMsgDirection':'out','Messages':[_[_0x87d1('0x4e')](_0x1362c5[_0x87d1('0x59')],{'read':![],'body':_0x1362c5[_0x87d1('0x59')][_0x87d1('0x59')],'phone':_0x2adb56,'SmsAccountId':_0xc04a8['id'],'UserId':_0x1362c5['user']['id'],'ContactId':_0x39795a['id']})]},{'include':[{'model':db[_0x87d1('0xc1')],'as':_0x87d1('0xc2')}]})[_0x87d1('0x20')](function(_0x24ebab){return[_0x24ebab,!![]];});});}})['spread'](function(_0x58e146,_0x5da7e3){if(_0x5da7e3){return _0x58e146;}return db[_0x87d1('0xc1')][_0x87d1('0x58')](_[_0x87d1('0x4e')](_0x1362c5[_0x87d1('0x59')],{'read':![],'body':_0x1362c5[_0x87d1('0x59')][_0x87d1('0x59')],'phone':_0x2adb56,'SmsAccountId':_0xc04a8['id'],'SmsInteractionId':_0x58e146['id'],'UserId':_0x1362c5[_0x87d1('0x5a')]['id'],'ContactId':_0x39795a['id']}))[_0x87d1('0x20')](function(_0x49e933){_0x58e146[_0x87d1('0xc3')]['Messages']=[];_0x58e146[_0x87d1('0xc3')][_0x87d1('0xc2')][_0x87d1('0x9f')](_0x49e933[_0x87d1('0xc3')]);return _0x58e146;});})[_0x87d1('0x20')](respondWithResult(_0x412fad,null))[_0x87d1('0x55')](handleError(_0x412fad,null));};exports[_0x87d1('0x29')]=function(_0x58762b,_0x222876,_0x300d0e){if(_0x58762b[_0x87d1('0x59')]['id']){delete _0x58762b['body']['id'];}console[_0x87d1('0xc4')](_0x87d1('0xc5'),_0x58762b[_0x87d1('0x59')]);var _0x186a98,_0x581b67,_0x397878;return db[_0x87d1('0x53')][_0x87d1('0x5e')]({'where':{'id':_0x58762b[_0x87d1('0x61')]['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x222876,null))[_0x87d1('0x20')](function(_0xdd3db2){if(_0xdd3db2){_0x397878=_0xdd3db2;logger[_0x87d1('0x23')](_0x87d1('0xac'),_0x87d1('0x29'),_0x87d1('0xc6'),_0xdd3db2['type'],util[_0x87d1('0xc7')](_0x58762b[_0x87d1('0x59')],{'showHidden':![],'depth':null}));switch(_0xdd3db2[_0x87d1('0x4f')]){case'skebby':if(_0x58762b['body']['skebby_dispatch_id']&&_0x58762b[_0x87d1('0x59')][_0x87d1('0x29')]){_0x581b67=_0x58762b[_0x87d1('0x59')]['status'];return db[_0x87d1('0xc1')][_0x87d1('0x5e')]({'where':{'messageId':_0x58762b[_0x87d1('0x59')][_0x87d1('0xc8')]}});}break;case _0x87d1('0xc9'):if(_0x58762b[_0x87d1('0x59')]['requestid']&&_0x58762b[_0x87d1('0x59')][_0x87d1('0xca')]){_0x581b67=_0x58762b[_0x87d1('0x59')][_0x87d1('0xca')];return db[_0x87d1('0xc1')][_0x87d1('0x5e')]({'where':{'messageId':_0x58762b[_0x87d1('0x59')][_0x87d1('0xcb')]}});}break;case _0x87d1('0xcc'):if(_0x58762b[_0x87d1('0x59')][_0x87d1('0xcd')]&&_0x58762b[_0x87d1('0x59')][_0x87d1('0xce')]){_0x581b67=_0x58762b[_0x87d1('0x59')][_0x87d1('0xce')];return db[_0x87d1('0xc1')][_0x87d1('0x5e')]({'where':{'messageId':_0x58762b['body'][_0x87d1('0xcd')]}});}break;case'infobip':var _0x529b83=_0x58762b[_0x87d1('0x59')][_0x87d1('0x87')][0x0];if(_0x529b83[_0x87d1('0x80')]&&_0x529b83[_0x87d1('0x29')][_0x87d1('0xcf')]===_0x87d1('0xd0')){_0x581b67=_0x529b83[_0x87d1('0x29')][_0x87d1('0xcf')];return db['SmsMessage']['find']({'where':{'messageId':_0x529b83[_0x87d1('0x80')]}});}break;case _0x87d1('0x8b'):if(_0x58762b[_0x87d1('0x59')][_0x87d1('0x80')]&&_0x58762b[_0x87d1('0x59')]['status']){_0x581b67=_0x58762b[_0x87d1('0x59')][_0x87d1('0x29')];return db[_0x87d1('0xc1')]['find']({'where':{'messageId':_0x58762b[_0x87d1('0x59')][_0x87d1('0x80')]}});}break;case _0x87d1('0x8d'):if(_0x58762b[_0x87d1('0x59')]['redif']&&_0x58762b[_0x87d1('0x59')][_0x87d1('0x29')]){_0x581b67=_0x58762b['body'][_0x87d1('0x29')];return db['SmsMessage'][_0x87d1('0x5e')]({'where':{'messageId':_0x58762b[_0x87d1('0x59')][_0x87d1('0xd1')]}});}break;}}})[_0x87d1('0x20')](handleEntityNotFound(_0x222876,null))['then'](function(_0x4bc9ae){if(_0x4bc9ae){_0x186a98=_0x4bc9ae;switch(_0x397878['type']){case _0x87d1('0x81'):if(_0x581b67==='DELIVERED'){return _0x186a98['update']({'read':!![]});}else{logger['error'](_0x87d1('0xac'),_0x87d1('0x29'),'skebby',util[_0x87d1('0xc7')](_0x58762b['body'],{'showHidden':![],'depth':null}));}break;case _0x87d1('0xc9'):if(_0x581b67==='1'){return _0x186a98[_0x87d1('0x60')]({'read':!![]});}else{logger['error']('SmsAccount,\x20%s,\x20%s,\x20%s',_0x87d1('0x29'),'skebby',util[_0x87d1('0xc7')](_0x58762b[_0x87d1('0x59')],{'showHidden':![],'depth':null}));}break;case _0x87d1('0xcc'):if(!_0x58762b[_0x87d1('0x59')][_0x87d1('0xd2')]&&_0x581b67>=0xc8&&_0x581b67<=0xce){return _0x186a98[_0x87d1('0x60')]({'read':!![]});}else{logger[_0x87d1('0x24')](_0x87d1('0xac'),'status',_0x87d1('0xcc'),util['inspect'](_0x58762b[_0x87d1('0x59')],{'showHidden':![],'depth':null}));}break;case _0x87d1('0xd3'):var _0x4cc284=_0x58762b['body']['results'][0x0];if(_0x4cc284[_0x87d1('0x29')][_0x87d1('0xcf')]==='DELIVERED'){return _0x186a98['update']({'read':!![]});}else{logger[_0x87d1('0x24')](_0x87d1('0xac'),_0x87d1('0x29'),_0x87d1('0xd3'),util['inspect'](_0x58762b[_0x87d1('0x59')],{'showHidden':![],'depth':null}));}break;case _0x87d1('0x8b'):if(_0x581b67==_0x87d1('0xd4')||_0x581b67==_0x87d1('0xd5')){return _0x186a98['update']({'read':!![]});}else{logger[_0x87d1('0x24')](_0x87d1('0xac'),_0x87d1('0x29'),'clickatell',util[_0x87d1('0xc7')](_0x58762b[_0x87d1('0x59')],{'showHidden':![],'depth':null}));}break;case'intelepeer':if(_0x581b67==='DELIVRD'||_0x581b67===_0x87d1('0xd6')){return _0x186a98['update']({'read':!![]});}else{logger['error']('SmsAccount,\x20%s,\x20%s,\x20%s',_0x87d1('0x29'),_0x87d1('0x8d'),util[_0x87d1('0xc7')](_0x58762b[_0x87d1('0x59')],{'showHidden':![],'depth':null}));}break;}return _0x186a98;}})[_0x87d1('0x20')](respondWithResult(_0x222876,null))[_0x87d1('0x55')](handleError(_0x222876,null));};exports[_0x87d1('0xd7')]=function(_0x42bf05,_0x851c0e,_0x57d8e4){var _0x150de9,_0x4155f0,_0x58f5da;return db[_0x87d1('0x53')][_0x87d1('0x5e')]({'where':{'id':_0x42bf05['params']['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x851c0e,null))[_0x87d1('0x20')](function(_0x5f0685){if(_0x5f0685){_0x58f5da=_0x5f0685;logger[_0x87d1('0x23')](_0x87d1('0xac'),_0x87d1('0x29'),_0x87d1('0xc6'),_0x5f0685['type'],util['inspect'](_0x42bf05[_0x87d1('0x41')],{'showHidden':![],'depth':null}));switch(_0x5f0685[_0x87d1('0x4f')]){case _0x87d1('0x88'):if(_0x42bf05[_0x87d1('0x41')][_0x87d1('0xd8')]&&_0x42bf05[_0x87d1('0x41')][_0x87d1('0xd9')]){_0x4155f0=_0x42bf05[_0x87d1('0x41')][_0x87d1('0xd9')];return db[_0x87d1('0xc1')][_0x87d1('0x5e')]({'where':{'messageId':_0x42bf05[_0x87d1('0x41')][_0x87d1('0xd8')]}});}break;}}})[_0x87d1('0x20')](handleEntityNotFound(_0x851c0e,null))[_0x87d1('0x20')](function(_0x159315){if(_0x159315){_0x150de9=_0x159315;switch(_0x58f5da[_0x87d1('0x4f')]){case'csc':if(_0x4155f0==='2'||_0x4155f0==='6'){return _0x150de9[_0x87d1('0x60')]({'read':!![]});}else{logger[_0x87d1('0x24')](_0x87d1('0xac'),_0x87d1('0x29'),_0x87d1('0x88'),util[_0x87d1('0xc7')](_0x42bf05[_0x87d1('0x41')],{'showHidden':![],'depth':null}));};break;}return _0x150de9;}})['then'](respondWithResult(_0x851c0e,null))['catch'](handleError(_0x851c0e,null));};exports[_0x87d1('0xda')]=function(_0x2048a4,_0x327063,_0x274ce7){return db[_0x87d1('0x53')][_0x87d1('0x5e')]({'where':{'id':_0x2048a4[_0x87d1('0x61')]['id']}})['then'](handleEntityNotFound(_0x327063,null))[_0x87d1('0x20')](function(_0x23e9ec){if(_0x23e9ec){return _0x23e9ec[_0x87d1('0xda')](_0x2048a4[_0x87d1('0x59')][_0x87d1('0x6b')],_['omit'](_0x2048a4[_0x87d1('0x59')],['ids','id'])||{})[_0x87d1('0xdb')](function(_0x3a4f38){for(var _0x39b59b=0x0;_0x39b59b<_0x2048a4[_0x87d1('0x59')][_0x87d1('0x6b')][_0x87d1('0x46')];_0x39b59b+=0x1){socket['emit']('userSmsAccount:save',{'UserId':_0x2048a4[_0x87d1('0x59')][_0x87d1('0x6b')][_0x39b59b],'SmsAccountId':_0x2048a4[_0x87d1('0x61')]['id']});}return _0x3a4f38;});}})[_0x87d1('0x20')](respondWithResult(_0x327063,null))['catch'](handleError(_0x327063,null));};exports[_0x87d1('0xdc')]=function(_0x1bab0c,_0x44e3bd,_0x388346){var _0x3697f2;return db[_0x87d1('0x53')][_0x87d1('0x5e')]({'where':{'id':_0x1bab0c['params']['id']}})[_0x87d1('0x20')](handleEntityNotFound(_0x44e3bd,null))[_0x87d1('0x20')](function(_0x45fc7f){if(_0x45fc7f){return _0x45fc7f[_0x87d1('0xdc')](_0x1bab0c[_0x87d1('0x41')][_0x87d1('0x6b')])['then'](function(_0x32d49a){if(_[_0x87d1('0xdd')](_0x1bab0c[_0x87d1('0x41')][_0x87d1('0x6b')])){for(var _0x4a5fe5=0x0;_0x4a5fe5<_0x1bab0c[_0x87d1('0x41')][_0x87d1('0x6b')][_0x87d1('0x46')];_0x4a5fe5+=0x1){socket[_0x87d1('0xde')](_0x87d1('0xdf'),{'UserId':_0x1bab0c[_0x87d1('0x41')][_0x87d1('0x6b')][_0x4a5fe5],'SmsAccountId':_0x1bab0c[_0x87d1('0x61')]['id']});}}else{socket['emit'](_0x87d1('0xdf'),{'UserId':_0x1bab0c[_0x87d1('0x41')][_0x87d1('0x6b')],'SmsAccountId':_0x1bab0c[_0x87d1('0x61')]['id']});}});}})[_0x87d1('0x20')](respondWithStatusCode(_0x44e3bd,null))[_0x87d1('0x55')](handleError(_0x44e3bd,null));};exports[_0x87d1('0xe0')]=function(_0x559932,_0x47e22e,_0x18b995){var _0x167e72={};var _0x2cb622={};var _0x3a09d7;var _0x4736e0;return db[_0x87d1('0x53')][_0x87d1('0x67')]({'where':{'id':_0x559932[_0x87d1('0x61')]['id']}})['then'](handleEntityNotFound(_0x47e22e,null))[_0x87d1('0x20')](function(_0x20e0c1){if(_0x20e0c1){_0x3a09d7=_0x20e0c1;_0x2cb622[_0x87d1('0x3f')]=_[_0x87d1('0x40')](db[_0x87d1('0xa5')][_0x87d1('0x3e')]);_0x2cb622['query']=_[_0x87d1('0x40')](_0x559932[_0x87d1('0x41')]);_0x2cb622[_0x87d1('0x42')]=_[_0x87d1('0x43')](_0x2cb622[_0x87d1('0x3f')],_0x2cb622['query']);_0x167e72[_0x87d1('0x44')]=_['intersection'](_0x2cb622[_0x87d1('0x3f')],qs['fields'](_0x559932[_0x87d1('0x41')][_0x87d1('0x45')]));_0x167e72[_0x87d1('0x44')]=_0x167e72[_0x87d1('0x44')][_0x87d1('0x46')]?_0x167e72['attributes']:_0x2cb622[_0x87d1('0x3f')];_0x167e72[_0x87d1('0x49')]=qs['sort'](_0x559932[_0x87d1('0x41')][_0x87d1('0x4a')]);_0x167e72[_0x87d1('0x4b')]=qs[_0x87d1('0x42')](_['pick'](_0x559932[_0x87d1('0x41')],_0x2cb622[_0x87d1('0x42')]));if(_0x559932['query']['filter']){_0x167e72[_0x87d1('0x4b')]=_[_0x87d1('0x4e')](_0x167e72[_0x87d1('0x4b')],{'$or':_[_0x87d1('0xb6')](_0x167e72[_0x87d1('0x44')],function(_0x3bfe9a){var _0x2b6107={};_0x2b6107[_0x3bfe9a]={'$like':'%'+_0x559932[_0x87d1('0x41')]['filter']+'%'};return _0x2b6107;})});}_0x167e72=_[_0x87d1('0x4e')]({},_0x167e72,_0x559932[_0x87d1('0x52')]);return _0x3a09d7[_0x87d1('0xe0')](_0x167e72);}})['then'](function(_0x834807){if(_0x834807){_0x4736e0=_0x834807['length'];if(!_0x559932[_0x87d1('0x41')][_0x87d1('0x47')](_0x87d1('0x48'))){_0x167e72['limit']=qs[_0x87d1('0x2d')](_0x559932['query'][_0x87d1('0x2d')]);_0x167e72[_0x87d1('0x2c')]=qs[_0x87d1('0x2c')](_0x559932['query']['offset']);}return _0x3a09d7['getAgents'](_0x167e72);}})[_0x87d1('0x20')](function(_0x2eb5a0){if(_0x2eb5a0){return _0x2eb5a0?{'count':_0x4736e0,'rows':_0x2eb5a0}:null;}})[_0x87d1('0x20')](respondWithResult(_0x47e22e,null))[_0x87d1('0x55')](handleError(_0x47e22e,null));};
\ No newline at end of file
index f7db63d..af2f54e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf21c=['hook','exports','events','SmsAccount','setMaxListeners','update','emit'];(function(_0x1d2652,_0x66516d){var _0x57c70a=function(_0x4dfb43){while(--_0x4dfb43){_0x1d2652['push'](_0x1d2652['shift']());}};_0x57c70a(++_0x66516d);}(_0xf21c,0x18a));var _0xcf21=function(_0x880aed,_0x16597b){_0x880aed=_0x880aed-0x0;var _0x40df37=_0xf21c[_0x880aed];return _0x40df37;};'use strict';var EventEmitter=require(_0xcf21('0x0'));var SmsAccount=require('../../mysqldb')['db'][_0xcf21('0x1')];var SmsAccountEvents=new EventEmitter();SmsAccountEvents[_0xcf21('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0xcf21('0x3'),'afterDestroy':'remove'};function emitEvent(_0x307e54){return function(_0x3974c8,_0x1f1d65,_0x3bf540){SmsAccountEvents[_0xcf21('0x4')](_0x307e54+':'+_0x3974c8['id'],_0x3974c8);SmsAccountEvents[_0xcf21('0x4')](_0x307e54,_0x3974c8);_0x3bf540(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsAccount[_0xcf21('0x5')](e,emitEvent(event));}}module[_0xcf21('0x6')]=SmsAccountEvents;
\ No newline at end of file
+var _0xddee=['save','update','remove','emit','hasOwnProperty','exports','events','SmsAccount'];(function(_0x50849a,_0x325c57){var _0x10bc40=function(_0x4cfeae){while(--_0x4cfeae){_0x50849a['push'](_0x50849a['shift']());}};_0x10bc40(++_0x325c57);}(_0xddee,0xb6));var _0xedde=function(_0x81dcac,_0x8ff7db){_0x81dcac=_0x81dcac-0x0;var _0xc7803b=_0xddee[_0x81dcac];return _0xc7803b;};'use strict';var EventEmitter=require(_0xedde('0x0'));var SmsAccount=require('../../mysqldb')['db'][_0xedde('0x1')];var SmsAccountEvents=new EventEmitter();SmsAccountEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xedde('0x2'),'afterUpdate':_0xedde('0x3'),'afterDestroy':_0xedde('0x4')};function emitEvent(_0x507c1e){return function(_0xdb67e3,_0x12465b,_0x2be13d){SmsAccountEvents[_0xedde('0x5')](_0x507c1e+':'+_0xdb67e3['id'],_0xdb67e3);SmsAccountEvents[_0xedde('0x5')](_0x507c1e,_0xdb67e3);_0x2be13d(null);};}for(var e in events){if(events[_0xedde('0x6')](e)){var event=events[e];SmsAccount['hook'](e,emitEvent(event));}}module[_0xedde('0x7')]=SmsAccountEvents;
\ No newline at end of file
index 0267f76..7d5f19d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8d57=['request-promise','./smsAccount.attributes','exports','SmsAccount','sms_accounts','util','../../config/logger','api','moment','bluebird'];(function(_0x1b5a05,_0x2c80de){var _0x347931=function(_0xd39454){while(--_0xd39454){_0x1b5a05['push'](_0x1b5a05['shift']());}};_0x347931(++_0x2c80de);}(_0x8d57,0xaf));var _0x78d5=function(_0x2bf141,_0x31eac7){_0x2bf141=_0x2bf141-0x0;var _0x48277b=_0x8d57[_0x2bf141];return _0x48277b;};'use strict';var _=require('lodash');var util=require(_0x78d5('0x0'));var logger=require(_0x78d5('0x1'))(_0x78d5('0x2'));var moment=require(_0x78d5('0x3'));var BPromise=require(_0x78d5('0x4'));var rp=require(_0x78d5('0x5'));var attributes=require(_0x78d5('0x6'));module[_0x78d5('0x7')]=function(_0x3de416,_0x3472d9){return _0x3de416['define'](_0x78d5('0x8'),attributes,{'tableName':_0x78d5('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xe605=['define','SmsAccount','sms_accounts','lodash','util','api','moment','bluebird','request-promise','./smsAccount.attributes','exports'];(function(_0x8b7efb,_0x4a7018){var _0x3d99e0=function(_0x3d2563){while(--_0x3d2563){_0x8b7efb['push'](_0x8b7efb['shift']());}};_0x3d99e0(++_0x4a7018);}(_0xe605,0x92));var _0x5e60=function(_0x3d144a,_0x109952){_0x3d144a=_0x3d144a-0x0;var _0x5e8f91=_0xe605[_0x3d144a];return _0x5e8f91;};'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 attributes=require(_0x5e60('0x6'));module[_0x5e60('0x7')]=function(_0x3a6c7c,_0x30d8fb){return _0x3a6c7c[_0x5e60('0x8')](_0x5e60('0x9'),attributes,{'tableName':_0x5e60('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d99b3b8..78b0cce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7931=['include','model','stringify','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','defaults','localhost','socket.io-emitter','redis','./smsAccount.socket','register','request','SmsAccount,\x20%s,\x20%s','debug','SmsAccount,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','info','result','ShowSmsAccount','find','options','where','attributes','map'];(function(_0x336264,_0x32e1d9){var _0x53cf91=function(_0x21026c){while(--_0x21026c){_0x336264['push'](_0x336264['shift']());}};_0x53cf91(++_0x32e1d9);}(_0x7931,0x76));var _0x1793=function(_0x2f72ca,_0x4a8433){_0x2f72ca=_0x2f72ca-0x0;var _0x150ec9=_0x7931[_0x2f72ca];return _0x150ec9;};'use strict';var _=require('lodash');var util=require(_0x1793('0x0'));var moment=require(_0x1793('0x1'));var BPromise=require(_0x1793('0x2'));var rs=require(_0x1793('0x3'));var fs=require('fs');var Redis=require(_0x1793('0x4'));var db=require(_0x1793('0x5'))['db'];var utils=require(_0x1793('0x6'));var logger=require(_0x1793('0x7'))(_0x1793('0x8'));var config=require(_0x1793('0x9'));var jayson=require('jayson/promise');var client=jayson[_0x1793('0xa')][_0x1793('0xb')]({'port':0x232a});config['redis']=_[_0x1793('0xc')](config['redis'],{'host':_0x1793('0xd'),'port':0x18eb});var socket=require(_0x1793('0xe'))(new Redis(config[_0x1793('0xf')]));require(_0x1793('0x10'))[_0x1793('0x11')](socket);function respondWithRpcPromise(_0x34d4f7,_0x4f010b,_0x39b038){return new BPromise(function(_0x411f0a,_0x312dbc){return client[_0x1793('0x12')](_0x34d4f7,_0x39b038)['then'](function(_0x12e8a1){logger['info'](_0x1793('0x13'),_0x4f010b,'request\x20sent');logger[_0x1793('0x14')](_0x1793('0x15'),_0x4f010b,_0x1793('0x16'),JSON['stringify'](_0x12e8a1));if(_0x12e8a1[_0x1793('0x17')]){if(_0x12e8a1[_0x1793('0x17')][_0x1793('0x18')]===0x1f4){logger[_0x1793('0x17')](_0x1793('0x13'),_0x4f010b,_0x12e8a1[_0x1793('0x17')][_0x1793('0x19')]);return _0x312dbc(_0x12e8a1[_0x1793('0x17')]['message']);}logger[_0x1793('0x17')](_0x1793('0x13'),_0x4f010b,_0x12e8a1['error'][_0x1793('0x19')]);return _0x411f0a(_0x12e8a1[_0x1793('0x17')][_0x1793('0x19')]);}else{logger[_0x1793('0x1a')]('SmsAccount,\x20%s,\x20%s',_0x4f010b,'request\x20sent');_0x411f0a(_0x12e8a1[_0x1793('0x1b')]['message']);}})['catch'](function(_0x5c3de3){logger['error'](_0x1793('0x13'),_0x4f010b,_0x5c3de3);_0x312dbc(_0x5c3de3);});});}exports[_0x1793('0x1c')]=function(_0x382fe5){var _0x2ea4a6=this;return new Promise(function(_0x59bacc,_0x49a0fc){return db['SmsAccount'][_0x1793('0x1d')]({'raw':_0x382fe5[_0x1793('0x1e')]?_0x382fe5[_0x1793('0x1e')]['raw']===undefined?!![]:![]:!![],'where':_0x382fe5[_0x1793('0x1e')]?_0x382fe5[_0x1793('0x1e')][_0x1793('0x1f')]||null:null,'attributes':_0x382fe5[_0x1793('0x1e')]?_0x382fe5[_0x1793('0x1e')][_0x1793('0x20')]||null:null,'include':_0x382fe5[_0x1793('0x1e')]?_0x382fe5['options']['include']?_[_0x1793('0x21')](_0x382fe5[_0x1793('0x1e')][_0x1793('0x22')],function(_0x48ef90){return{'model':db[_0x48ef90[_0x1793('0x23')]],'as':_0x48ef90['as'],'attributes':_0x48ef90[_0x1793('0x20')],'include':_0x48ef90[_0x1793('0x22')]?_[_0x1793('0x21')](_0x48ef90['include'],function(_0x26533d){return{'model':db[_0x26533d['model']],'as':_0x26533d['as'],'attributes':_0x26533d[_0x1793('0x20')],'include':_0x26533d[_0x1793('0x22')]?_['map'](_0x26533d[_0x1793('0x22')],function(_0x4c5f61){return{'model':db[_0x4c5f61[_0x1793('0x23')]],'as':_0x4c5f61['as'],'attributes':_0x4c5f61[_0x1793('0x20')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x350472){logger[_0x1793('0x1a')]('ShowSmsAccount',_0x382fe5);logger['debug'](_0x1793('0x1c'),_0x382fe5,JSON[_0x1793('0x24')](_0x350472));_0x59bacc(_0x350472);})[_0x1793('0x25')](function(_0x37c366){logger['error'](_0x1793('0x1c'),_0x37c366[_0x1793('0x19')],_0x382fe5);_0x49a0fc(_0x2ea4a6[_0x1793('0x17')](0x1f4,_0x37c366[_0x1793('0x19')]));});});};
\ No newline at end of file
+var _0x1b43=['localhost','socket.io-emitter','./smsAccount.socket','request','info','request\x20sent','debug','stringify','error','code','SmsAccount,\x20%s,\x20%s','message','result','catch','find','options','raw','attributes','include','model','map','then','ShowSmsAccount','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','defaults'];(function(_0x371d83,_0x49a0ce){var _0x27a8b8=function(_0x5acf2d){while(--_0x5acf2d){_0x371d83['push'](_0x371d83['shift']());}};_0x27a8b8(++_0x49a0ce);}(_0x1b43,0x137));var _0x31b4=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x1b43[_0x6131cd];return _0x47e916;};'use strict';var _=require('lodash');var util=require(_0x31b4('0x0'));var moment=require(_0x31b4('0x1'));var BPromise=require(_0x31b4('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x31b4('0x3'));var db=require(_0x31b4('0x4'))['db'];var utils=require(_0x31b4('0x5'));var logger=require('../../config/logger')(_0x31b4('0x6'));var config=require(_0x31b4('0x7'));var jayson=require(_0x31b4('0x8'));var client=jayson[_0x31b4('0x9')][_0x31b4('0xa')]({'port':0x232a});config[_0x31b4('0xb')]=_[_0x31b4('0xc')](config[_0x31b4('0xb')],{'host':_0x31b4('0xd'),'port':0x18eb});var socket=require(_0x31b4('0xe'))(new Redis(config[_0x31b4('0xb')]));require(_0x31b4('0xf'))['register'](socket);function respondWithRpcPromise(_0x33cb44,_0x14510f,_0x4ec69c){return new BPromise(function(_0x13bcda,_0x352548){return client[_0x31b4('0x10')](_0x33cb44,_0x4ec69c)['then'](function(_0x24370b){logger[_0x31b4('0x11')]('SmsAccount,\x20%s,\x20%s',_0x14510f,_0x31b4('0x12'));logger[_0x31b4('0x13')]('SmsAccount,\x20%s,\x20%s,\x20%s',_0x14510f,'request\x20sent',JSON[_0x31b4('0x14')](_0x24370b));if(_0x24370b[_0x31b4('0x15')]){if(_0x24370b['error'][_0x31b4('0x16')]===0x1f4){logger['error'](_0x31b4('0x17'),_0x14510f,_0x24370b['error'][_0x31b4('0x18')]);return _0x352548(_0x24370b[_0x31b4('0x15')]['message']);}logger[_0x31b4('0x15')](_0x31b4('0x17'),_0x14510f,_0x24370b[_0x31b4('0x15')]['message']);return _0x13bcda(_0x24370b[_0x31b4('0x15')][_0x31b4('0x18')]);}else{logger[_0x31b4('0x11')](_0x31b4('0x17'),_0x14510f,_0x31b4('0x12'));_0x13bcda(_0x24370b[_0x31b4('0x19')][_0x31b4('0x18')]);}})[_0x31b4('0x1a')](function(_0x5c2087){logger[_0x31b4('0x15')](_0x31b4('0x17'),_0x14510f,_0x5c2087);_0x352548(_0x5c2087);});});}exports['ShowSmsAccount']=function(_0x4eb6c3){var _0x24d510=this;return new Promise(function(_0x135eaa,_0x46b5df){return db['SmsAccount'][_0x31b4('0x1b')]({'raw':_0x4eb6c3[_0x31b4('0x1c')]?_0x4eb6c3[_0x31b4('0x1c')][_0x31b4('0x1d')]===undefined?!![]:![]:!![],'where':_0x4eb6c3[_0x31b4('0x1c')]?_0x4eb6c3[_0x31b4('0x1c')]['where']||null:null,'attributes':_0x4eb6c3[_0x31b4('0x1c')]?_0x4eb6c3[_0x31b4('0x1c')][_0x31b4('0x1e')]||null:null,'include':_0x4eb6c3[_0x31b4('0x1c')]?_0x4eb6c3[_0x31b4('0x1c')][_0x31b4('0x1f')]?_['map'](_0x4eb6c3[_0x31b4('0x1c')][_0x31b4('0x1f')],function(_0x46c1f7){return{'model':db[_0x46c1f7[_0x31b4('0x20')]],'as':_0x46c1f7['as'],'attributes':_0x46c1f7['attributes'],'include':_0x46c1f7[_0x31b4('0x1f')]?_[_0x31b4('0x21')](_0x46c1f7[_0x31b4('0x1f')],function(_0x491cfc){return{'model':db[_0x491cfc['model']],'as':_0x491cfc['as'],'attributes':_0x491cfc['attributes'],'include':_0x491cfc[_0x31b4('0x1f')]?_['map'](_0x491cfc[_0x31b4('0x1f')],function(_0x26e316){return{'model':db[_0x26e316['model']],'as':_0x26e316['as'],'attributes':_0x26e316[_0x31b4('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x31b4('0x22')](function(_0x117478){logger['info'](_0x31b4('0x23'),_0x4eb6c3);logger[_0x31b4('0x13')](_0x31b4('0x23'),_0x4eb6c3,JSON['stringify'](_0x117478));_0x135eaa(_0x117478);})[_0x31b4('0x1a')](function(_0x570539){logger[_0x31b4('0x15')](_0x31b4('0x23'),_0x570539['message'],_0x4eb6c3);_0x46b5df(_0x24d510['error'](0x1f4,_0x570539[_0x31b4('0x18')]));});});};
\ No newline at end of file
index afa122e..d9cb845 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5a43=['removeListener','register','length','smsAccount:','./smsAccount.events','save','remove','update','emit'];(function(_0x9eb525,_0x6fc09f){var _0x3bc272=function(_0x4588f2){while(--_0x4588f2){_0x9eb525['push'](_0x9eb525['shift']());}};_0x3bc272(++_0x6fc09f);}(_0x5a43,0xd3));var _0x35a4=function(_0x81b111,_0x34d5bb){_0x81b111=_0x81b111-0x0;var _0x2a0be1=_0x5a43[_0x81b111];return _0x2a0be1;};'use strict';var SmsAccountEvents=require(_0x35a4('0x0'));var events=[_0x35a4('0x1'),_0x35a4('0x2'),_0x35a4('0x3')];function createListener(_0x4bb5f1,_0x498f64){return function(_0x25e9c8){_0x498f64[_0x35a4('0x4')](_0x4bb5f1,_0x25e9c8);};}function removeListener(_0x4bf992,_0x30e7ff){return function(){SmsAccountEvents[_0x35a4('0x5')](_0x4bf992,_0x30e7ff);};}exports[_0x35a4('0x6')]=function(_0x42871e){for(var _0x38c448=0x0,_0x4969d6=events[_0x35a4('0x7')];_0x38c448<_0x4969d6;_0x38c448++){var _0x3133d5=events[_0x38c448];var _0x47746=createListener(_0x35a4('0x8')+_0x3133d5,_0x42871e);SmsAccountEvents['on'](_0x3133d5,_0x47746);}};
\ No newline at end of file
+var _0x8ec1=['save','remove','update','removeListener','register','length','smsAccount:'];(function(_0x1fef14,_0x2869e0){var _0x52ebe1=function(_0x561c26){while(--_0x561c26){_0x1fef14['push'](_0x1fef14['shift']());}};_0x52ebe1(++_0x2869e0);}(_0x8ec1,0x1e3));var _0x18ec=function(_0x13a5e2,_0x4e2d46){_0x13a5e2=_0x13a5e2-0x0;var _0x42c586=_0x8ec1[_0x13a5e2];return _0x42c586;};'use strict';var SmsAccountEvents=require('./smsAccount.events');var events=[_0x18ec('0x0'),_0x18ec('0x1'),_0x18ec('0x2')];function createListener(_0x1e79d6,_0x3cf2ab){return function(_0x2afac0){_0x3cf2ab['emit'](_0x1e79d6,_0x2afac0);};}function removeListener(_0x5179d5,_0x14afc7){return function(){SmsAccountEvents[_0x18ec('0x3')](_0x5179d5,_0x14afc7);};}exports[_0x18ec('0x4')]=function(_0x4b45cc){for(var _0x171688=0x0,_0x17e4f3=events[_0x18ec('0x5')];_0x171688<_0x17e4f3;_0x171688++){var _0x1c8f34=events[_0x171688];var _0x2c4be2=createListener(_0x18ec('0x6')+_0x1c8f34,_0x4b45cc);SmsAccountEvents['on'](_0x1c8f34,_0x2c4be2);}};
\ No newline at end of file
index 3f96da7..ac38091 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa184=['util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./smsApplication.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer'];(function(_0x33238c,_0x44861e){var _0x293485=function(_0x748dbd){while(--_0x748dbd){_0x33238c['push'](_0x33238c['shift']());}};_0x293485(++_0x44861e);}(_0xa184,0xe6));var _0x4a18=function(_0x4de9e8,_0x565ffa){_0x4de9e8=_0x4de9e8-0x0;var _0x4db0de=_0xa184[_0x4de9e8];return _0x4db0de;};'use strict';var multer=require(_0x4a18('0x0'));var util=require(_0x4a18('0x1'));var path=require(_0x4a18('0x2'));var timeout=require(_0x4a18('0x3'));var express=require(_0x4a18('0x4'));var router=express[_0x4a18('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0x4a18('0x6'));var config=require(_0x4a18('0x7'));var controller=require(_0x4a18('0x8'));router[_0x4a18('0x9')]('/',auth[_0x4a18('0xa')](),controller[_0x4a18('0xb')]);router[_0x4a18('0x9')](_0x4a18('0xc'),auth['isAuthenticated'](),controller[_0x4a18('0xd')]);router[_0x4a18('0xe')]('/',auth[_0x4a18('0xa')](),controller[_0x4a18('0xf')]);router[_0x4a18('0x10')](_0x4a18('0xc'),auth[_0x4a18('0xa')](),controller[_0x4a18('0x11')]);router[_0x4a18('0x12')]('/:id',auth[_0x4a18('0xa')](),controller[_0x4a18('0x13')]);module[_0x4a18('0x14')]=router;
\ No newline at end of file
+var _0x8a70=['../../components/auth/service','../../components/interaction/service','../../config/environment','./smsApplication.controller','get','isAuthenticated','/:id','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router'];(function(_0x4b1012,_0x1415eb){var _0x23d715=function(_0x25f330){while(--_0x25f330){_0x4b1012['push'](_0x4b1012['shift']());}};_0x23d715(++_0x1415eb);}(_0x8a70,0xd6));var _0x08a7=function(_0x312ad6,_0x5dcca8){_0x312ad6=_0x312ad6-0x0;var _0x1069dc=_0x8a70[_0x312ad6];return _0x1069dc;};'use strict';var multer=require(_0x08a7('0x0'));var util=require(_0x08a7('0x1'));var path=require(_0x08a7('0x2'));var timeout=require(_0x08a7('0x3'));var express=require(_0x08a7('0x4'));var router=express[_0x08a7('0x5')]();var auth=require(_0x08a7('0x6'));var interaction=require(_0x08a7('0x7'));var config=require(_0x08a7('0x8'));var controller=require(_0x08a7('0x9'));router[_0x08a7('0xa')]('/',auth[_0x08a7('0xb')](),controller['index']);router['get'](_0x08a7('0xc'),auth[_0x08a7('0xb')](),controller['show']);router[_0x08a7('0xd')]('/',auth['isAuthenticated'](),controller[_0x08a7('0xe')]);router[_0x08a7('0xf')]('/:id',auth[_0x08a7('0xb')](),controller[_0x08a7('0x10')]);router[_0x08a7('0x11')](_0x08a7('0xc'),auth['isAuthenticated'](),controller[_0x08a7('0x12')]);module[_0x08a7('0x13')]=router;
\ No newline at end of file
index 1ee51b1..65329f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f37=['*,*,*,*','sequelize','exports','STRING'];(function(_0x4c071f,_0x52b625){var _0x265f4d=function(_0x4273b2){while(--_0x4273b2){_0x4c071f['push'](_0x4c071f['shift']());}};_0x265f4d(++_0x52b625);}(_0x9f37,0xd1));var _0x79f3=function(_0x39096d,_0x51f8a0){_0x39096d=_0x39096d-0x0;var _0x13da4f=_0x9f37[_0x39096d];return _0x13da4f;};'use strict';var Sequelize=require(_0x79f3('0x0'));module[_0x79f3('0x1')]={'priority':{'type':Sequelize['INTEGER'],'allowNull':![]},'app':{'type':Sequelize[_0x79f3('0x2')],'allowNull':![],'defaultValue':'noop'},'appdata':{'type':Sequelize['TEXT']()},'description':{'type':Sequelize[_0x79f3('0x2')]},'interval':{'type':Sequelize[_0x79f3('0x2')],'defaultValue':_0x79f3('0x3')}};
\ No newline at end of file
+var _0x99d1=['TEXT','*,*,*,*','sequelize','INTEGER','STRING','noop'];(function(_0x474d97,_0x5909ce){var _0x1edf25=function(_0x2831df){while(--_0x2831df){_0x474d97['push'](_0x474d97['shift']());}};_0x1edf25(++_0x5909ce);}(_0x99d1,0x104));var _0x199d=function(_0x28684e,_0x4f9353){_0x28684e=_0x28684e-0x0;var _0x132817=_0x99d1[_0x28684e];return _0x132817;};'use strict';var Sequelize=require(_0x199d('0x0'));module['exports']={'priority':{'type':Sequelize[_0x199d('0x1')],'allowNull':![]},'app':{'type':Sequelize[_0x199d('0x2')],'allowNull':![],'defaultValue':_0x199d('0x3')},'appdata':{'type':Sequelize[_0x199d('0x4')]()},'description':{'type':Sequelize[_0x199d('0x2')]},'interval':{'type':Sequelize['STRING'],'defaultValue':_0x199d('0x5')}};
\ No newline at end of file
index 12327f7..bf8b544 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d37=['keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','map','type','key','VIRTUAL','field','filter','merge','options','includeAll','include','rows','params','find','catch','create','body','update','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','destroy','error','stack','name','send','index','SmsApplication','model'];(function(_0x4ec022,_0x3f7e02){var _0xc3cbac=function(_0x4086ab){while(--_0x4086ab){_0x4ec022['push'](_0x4ec022['shift']());}};_0xc3cbac(++_0x3f7e02);}(_0x2d37,0xff));var _0x72d3=function(_0x44ddc7,_0x3d58b9){_0x44ddc7=_0x44ddc7-0x0;var _0x36700f=_0x2d37[_0x44ddc7];return _0x36700f;};'use strict';var pdf=require(_0x72d3('0x0'));var emlformat=require(_0x72d3('0x1'));var rimraf=require(_0x72d3('0x2'));var zipdir=require(_0x72d3('0x3'));var jsonpatch=require(_0x72d3('0x4'));var rp=require(_0x72d3('0x5'));var moment=require(_0x72d3('0x6'));var BPromise=require(_0x72d3('0x7'));var Mustache=require(_0x72d3('0x8'));var util=require(_0x72d3('0x9'));var path=require(_0x72d3('0xa'));var sox=require(_0x72d3('0xb'));var csv=require(_0x72d3('0xc'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x72d3('0xd'));var squel=require(_0x72d3('0xe'));var crypto=require(_0x72d3('0xf'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x72d3('0x10'));var Papa=require(_0x72d3('0x11'));var authService=require(_0x72d3('0x12'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x72d3('0x13'));var qs=require(_0x72d3('0x14'));var logger=require(_0x72d3('0x15'))(_0x72d3('0x16'));var utils=require(_0x72d3('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1f94fb,_0x4ba01c){_0x4ba01c=_0x4ba01c||0xcc;return function(_0x4a6503){if(_0x4a6503){return _0x1f94fb[_0x72d3('0x18')](_0x4ba01c);}return _0x1f94fb[_0x72d3('0x19')](_0x4ba01c)[_0x72d3('0x1a')]();};}function respondWithResult(_0x13af78,_0x528ea0){_0x528ea0=_0x528ea0||0xc8;return function(_0x23df69){if(_0x23df69){return _0x13af78[_0x72d3('0x19')](_0x528ea0)[_0x72d3('0x1b')](_0x23df69);}};}function respondWithFilteredResult(_0x1b8bd8,_0x49ab51){return function(_0x52c021){if(_0x52c021){var _0x5b9c4f=_0x52c021[_0x72d3('0x1c')],_0x332609=_0x49ab51[_0x72d3('0x1d')],_0x2f1199=_0x49ab51['offset']+_0x49ab51[_0x72d3('0x1e')],_0x501768;if(_0x2f1199>=_0x5b9c4f){_0x2f1199=_0x5b9c4f;_0x501768=0xc8;}else{_0x501768=0xce;}_0x1b8bd8[_0x72d3('0x19')](_0x501768);return _0x1b8bd8[_0x72d3('0x1f')](_0x72d3('0x20'),_0x332609+'-'+_0x2f1199+'/'+_0x5b9c4f)[_0x72d3('0x1b')](_0x52c021);}return null;};}function patchUpdates(_0x49fd25){return function(_0x1bfbb7){try{jsonpatch[_0x72d3('0x21')](_0x1bfbb7,_0x49fd25,!![]);}catch(_0xb8daf7){return BPromise[_0x72d3('0x22')](_0xb8daf7);}return _0x1bfbb7[_0x72d3('0x23')]();};}function saveUpdates(_0x272197,_0x5b56dd){return function(_0x455392){if(_0x455392){return _0x455392['update'](_0x272197)[_0x72d3('0x24')](function(_0x2adef9){return _0x2adef9;});}return null;};}function removeEntity(_0x1c5869,_0x380d80){return function(_0x3ff501){if(_0x3ff501){return _0x3ff501[_0x72d3('0x25')]()[_0x72d3('0x24')](function(){_0x1c5869[_0x72d3('0x19')](0xcc)[_0x72d3('0x1a')]();});}};}function handleEntityNotFound(_0x23498d,_0x4afb6a){return function(_0x27bb72){if(!_0x27bb72){_0x23498d[_0x72d3('0x18')](0x194);}return _0x27bb72;};}function handleError(_0x35f2c2,_0x2ab242){_0x2ab242=_0x2ab242||0x1f4;return function(_0x134021){logger[_0x72d3('0x26')](_0x134021[_0x72d3('0x27')]);if(_0x134021[_0x72d3('0x28')]){delete _0x134021['name'];}_0x35f2c2['status'](_0x2ab242)[_0x72d3('0x29')](_0x134021);};}exports[_0x72d3('0x2a')]=function(_0x474962,_0x5348fe){var _0x467c5a={},_0x4a1336={},_0x543a42={'count':0x0,'rows':[]};var _0x5082ff=db[_0x72d3('0x2b')]['rawAttributes'];_0x4a1336[_0x72d3('0x2c')]=_[_0x72d3('0x2d')](_0x5082ff);_0x4a1336[_0x72d3('0x2e')]=_['keys'](_0x474962[_0x72d3('0x2e')]);_0x4a1336['filters']=_[_0x72d3('0x2f')](_0x4a1336[_0x72d3('0x2c')],_0x4a1336['query']);_0x467c5a[_0x72d3('0x30')]=_[_0x72d3('0x2f')](_0x4a1336[_0x72d3('0x2c')],qs[_0x72d3('0x31')](_0x474962[_0x72d3('0x2e')][_0x72d3('0x31')]));_0x467c5a[_0x72d3('0x30')]=_0x467c5a[_0x72d3('0x30')][_0x72d3('0x32')]?_0x467c5a['attributes']:_0x4a1336[_0x72d3('0x2c')];if(!_0x474962[_0x72d3('0x2e')][_0x72d3('0x33')](_0x72d3('0x34'))){_0x467c5a[_0x72d3('0x1e')]=qs[_0x72d3('0x1e')](_0x474962['query']['limit']);_0x467c5a['offset']=qs['offset'](_0x474962[_0x72d3('0x2e')]['offset']);}_0x467c5a[_0x72d3('0x35')]=qs[_0x72d3('0x36')](_0x474962[_0x72d3('0x2e')][_0x72d3('0x36')]);_0x467c5a[_0x72d3('0x37')]=qs[_0x72d3('0x38')](_[_0x72d3('0x39')](_0x474962['query'],_0x4a1336['filters']));if(_0x474962['query']['filter']){_0x467c5a[_0x72d3('0x37')]=_['merge'](_0x467c5a[_0x72d3('0x37')],{'$or':_[_0x72d3('0x3a')](_0x5082ff,function(_0x374f2f){if(_0x374f2f[_0x72d3('0x3b')][_0x72d3('0x3c')]!==_0x72d3('0x3d')){var _0x23a89f={};_0x23a89f[_0x374f2f[_0x72d3('0x3e')]]={'$like':'%'+_0x474962[_0x72d3('0x2e')][_0x72d3('0x3f')]+'%'};return _0x23a89f;}})});}_0x467c5a=_[_0x72d3('0x40')]({},_0x467c5a,_0x474962[_0x72d3('0x41')]);var _0x3af78f={'where':_0x467c5a[_0x72d3('0x37')]};return db[_0x72d3('0x2b')][_0x72d3('0x1c')](_0x3af78f)[_0x72d3('0x24')](function(_0x113da5){_0x543a42[_0x72d3('0x1c')]=_0x113da5;if(_0x474962[_0x72d3('0x2e')][_0x72d3('0x42')]){_0x467c5a[_0x72d3('0x43')]=[{'all':!![]}];}return db['SmsApplication']['findAll'](_0x467c5a);})[_0x72d3('0x24')](function(_0x3801a5){_0x543a42[_0x72d3('0x44')]=_0x3801a5;return _0x543a42;})[_0x72d3('0x24')](respondWithFilteredResult(_0x5348fe,_0x467c5a))['catch'](handleError(_0x5348fe,null));};exports['show']=function(_0x38a054,_0x226b43){var _0x416d35={'raw':!![],'where':{'id':_0x38a054[_0x72d3('0x45')]['id']}},_0x10a286={};_0x10a286[_0x72d3('0x2c')]=_[_0x72d3('0x2d')](db['SmsApplication']['rawAttributes']);_0x10a286[_0x72d3('0x2e')]=_['keys'](_0x38a054['query']);_0x10a286[_0x72d3('0x38')]=_[_0x72d3('0x2f')](_0x10a286[_0x72d3('0x2c')],_0x10a286[_0x72d3('0x2e')]);_0x416d35['attributes']=_[_0x72d3('0x2f')](_0x10a286[_0x72d3('0x2c')],qs['fields'](_0x38a054[_0x72d3('0x2e')][_0x72d3('0x31')]));_0x416d35[_0x72d3('0x30')]=_0x416d35[_0x72d3('0x30')][_0x72d3('0x32')]?_0x416d35[_0x72d3('0x30')]:_0x10a286[_0x72d3('0x2c')];if(_0x38a054[_0x72d3('0x2e')][_0x72d3('0x42')]){_0x416d35[_0x72d3('0x43')]=[{'all':!![]}];}_0x416d35=_[_0x72d3('0x40')]({},_0x416d35,_0x38a054['options']);return db['SmsApplication'][_0x72d3('0x46')](_0x416d35)[_0x72d3('0x24')](handleEntityNotFound(_0x226b43,null))['then'](respondWithResult(_0x226b43,null))[_0x72d3('0x47')](handleError(_0x226b43,null));};exports[_0x72d3('0x48')]=function(_0x5d9458,_0x351f50){return db[_0x72d3('0x2b')][_0x72d3('0x48')](_0x5d9458[_0x72d3('0x49')],{})[_0x72d3('0x24')](respondWithResult(_0x351f50,0xc9))[_0x72d3('0x47')](handleError(_0x351f50,null));};exports[_0x72d3('0x4a')]=function(_0x5bf2d5,_0x4ebc72){if(_0x5bf2d5[_0x72d3('0x49')]['id']){delete _0x5bf2d5[_0x72d3('0x49')]['id'];}return db['SmsApplication']['find']({'where':{'id':_0x5bf2d5[_0x72d3('0x45')]['id']}})[_0x72d3('0x24')](handleEntityNotFound(_0x4ebc72,null))['then'](saveUpdates(_0x5bf2d5[_0x72d3('0x49')],null))[_0x72d3('0x24')](respondWithResult(_0x4ebc72,null))[_0x72d3('0x47')](handleError(_0x4ebc72,null));};exports['destroy']=function(_0x192804,_0x112908){return db[_0x72d3('0x2b')][_0x72d3('0x46')]({'where':{'id':_0x192804[_0x72d3('0x45')]['id']}})['then'](handleEntityNotFound(_0x112908,null))[_0x72d3('0x24')](removeEntity(_0x112908,null))[_0x72d3('0x47')](handleError(_0x112908,null));};
\ No newline at end of file
+var _0xcd33=['attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','SmsApplication','count','includeAll','findAll','rows','catch','show','params','find','create','body','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','sox','squel','crypto','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','offset','limit','set','Content-Range','json','apply','reject','update','then','destroy','end','name','send','index','rawAttributes','keys','query','filters','model','intersection','fields'];(function(_0x2074db,_0x10b81b){var _0x27324c=function(_0x5c3d5c){while(--_0x5c3d5c){_0x2074db['push'](_0x2074db['shift']());}};_0x27324c(++_0x10b81b);}(_0xcd33,0xa9));var _0x3cd3=function(_0x3fede9,_0xbdfe31){_0x3fede9=_0x3fede9-0x0;var _0x39e900=_0xcd33[_0x3fede9];return _0x39e900;};'use strict';var pdf=require(_0x3cd3('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x3cd3('0x1'));var zipdir=require(_0x3cd3('0x2'));var jsonpatch=require(_0x3cd3('0x3'));var rp=require(_0x3cd3('0x4'));var moment=require(_0x3cd3('0x5'));var BPromise=require(_0x3cd3('0x6'));var Mustache=require('mustache');var util=require(_0x3cd3('0x7'));var path=require('path');var sox=require(_0x3cd3('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x3cd3('0x9'));var crypto=require(_0x3cd3('0xa'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x3cd3('0xb'));var querystring=require(_0x3cd3('0xc'));var Papa=require(_0x3cd3('0xd'));var authService=require(_0x3cd3('0xe'));var hardwareService=require(_0x3cd3('0xf'));var Redis=require(_0x3cd3('0x10'));var qs=require('../../components/parsers/qs');var logger=require(_0x3cd3('0x11'))('api');var utils=require(_0x3cd3('0x12'));var config=require(_0x3cd3('0x13'));var db=require(_0x3cd3('0x14'))['db'];function respondWithStatusCode(_0x1e60d9,_0x297759){_0x297759=_0x297759||0xcc;return function(_0x58ba9d){if(_0x58ba9d){return _0x1e60d9[_0x3cd3('0x15')](_0x297759);}return _0x1e60d9['status'](_0x297759)['end']();};}function respondWithResult(_0x575e7d,_0x38bb63){_0x38bb63=_0x38bb63||0xc8;return function(_0x7e1f87){if(_0x7e1f87){return _0x575e7d[_0x3cd3('0x16')](_0x38bb63)['json'](_0x7e1f87);}};}function respondWithFilteredResult(_0x36bd0c,_0x136246){return function(_0x37a69e){if(_0x37a69e){var _0x245a1f=_0x37a69e['count'],_0xe8283b=_0x136246[_0x3cd3('0x17')],_0xe72475=_0x136246[_0x3cd3('0x17')]+_0x136246[_0x3cd3('0x18')],_0x48f9c0;if(_0xe72475>=_0x245a1f){_0xe72475=_0x245a1f;_0x48f9c0=0xc8;}else{_0x48f9c0=0xce;}_0x36bd0c[_0x3cd3('0x16')](_0x48f9c0);return _0x36bd0c[_0x3cd3('0x19')](_0x3cd3('0x1a'),_0xe8283b+'-'+_0xe72475+'/'+_0x245a1f)[_0x3cd3('0x1b')](_0x37a69e);}return null;};}function patchUpdates(_0x1d6ab4){return function(_0x4a1f15){try{jsonpatch[_0x3cd3('0x1c')](_0x4a1f15,_0x1d6ab4,!![]);}catch(_0x1b3d3b){return BPromise[_0x3cd3('0x1d')](_0x1b3d3b);}return _0x4a1f15['save']();};}function saveUpdates(_0x3fd5e7,_0x10bcb8){return function(_0x141a7c){if(_0x141a7c){return _0x141a7c[_0x3cd3('0x1e')](_0x3fd5e7)[_0x3cd3('0x1f')](function(_0x2a2cd8){return _0x2a2cd8;});}return null;};}function removeEntity(_0x5f2165,_0x3cc355){return function(_0x3fcb75){if(_0x3fcb75){return _0x3fcb75[_0x3cd3('0x20')]()[_0x3cd3('0x1f')](function(){_0x5f2165[_0x3cd3('0x16')](0xcc)[_0x3cd3('0x21')]();});}};}function handleEntityNotFound(_0x17be02,_0xcd3279){return function(_0x3c9b21){if(!_0x3c9b21){_0x17be02[_0x3cd3('0x15')](0x194);}return _0x3c9b21;};}function handleError(_0x3df837,_0x13e99d){_0x13e99d=_0x13e99d||0x1f4;return function(_0x3d0731){logger['error'](_0x3d0731['stack']);if(_0x3d0731[_0x3cd3('0x22')]){delete _0x3d0731[_0x3cd3('0x22')];}_0x3df837['status'](_0x13e99d)[_0x3cd3('0x23')](_0x3d0731);};}exports[_0x3cd3('0x24')]=function(_0x631dcc,_0x22a414){var _0x31733f={},_0x4409cb={},_0x18c012={'count':0x0,'rows':[]};var _0x2d1b10=db['SmsApplication'][_0x3cd3('0x25')];_0x4409cb['model']=_[_0x3cd3('0x26')](_0x2d1b10);_0x4409cb[_0x3cd3('0x27')]=_['keys'](_0x631dcc['query']);_0x4409cb[_0x3cd3('0x28')]=_['intersection'](_0x4409cb[_0x3cd3('0x29')],_0x4409cb[_0x3cd3('0x27')]);_0x31733f['attributes']=_[_0x3cd3('0x2a')](_0x4409cb[_0x3cd3('0x29')],qs['fields'](_0x631dcc['query'][_0x3cd3('0x2b')]));_0x31733f[_0x3cd3('0x2c')]=_0x31733f[_0x3cd3('0x2c')][_0x3cd3('0x2d')]?_0x31733f[_0x3cd3('0x2c')]:_0x4409cb[_0x3cd3('0x29')];if(!_0x631dcc[_0x3cd3('0x27')][_0x3cd3('0x2e')](_0x3cd3('0x2f'))){_0x31733f[_0x3cd3('0x18')]=qs['limit'](_0x631dcc[_0x3cd3('0x27')][_0x3cd3('0x18')]);_0x31733f[_0x3cd3('0x17')]=qs[_0x3cd3('0x17')](_0x631dcc[_0x3cd3('0x27')][_0x3cd3('0x17')]);}_0x31733f[_0x3cd3('0x30')]=qs[_0x3cd3('0x31')](_0x631dcc[_0x3cd3('0x27')][_0x3cd3('0x31')]);_0x31733f[_0x3cd3('0x32')]=qs['filters'](_[_0x3cd3('0x33')](_0x631dcc[_0x3cd3('0x27')],_0x4409cb[_0x3cd3('0x28')]));if(_0x631dcc[_0x3cd3('0x27')][_0x3cd3('0x34')]){_0x31733f[_0x3cd3('0x32')]=_[_0x3cd3('0x35')](_0x31733f[_0x3cd3('0x32')],{'$or':_[_0x3cd3('0x36')](_0x2d1b10,function(_0xbfe958){if(_0xbfe958[_0x3cd3('0x37')][_0x3cd3('0x38')]!==_0x3cd3('0x39')){var _0x56c92e={};_0x56c92e[_0xbfe958[_0x3cd3('0x3a')]]={'$like':'%'+_0x631dcc[_0x3cd3('0x27')][_0x3cd3('0x34')]+'%'};return _0x56c92e;}})});}_0x31733f=_[_0x3cd3('0x35')]({},_0x31733f,_0x631dcc[_0x3cd3('0x3b')]);var _0x4256e4={'where':_0x31733f['where']};return db[_0x3cd3('0x3c')][_0x3cd3('0x3d')](_0x4256e4)[_0x3cd3('0x1f')](function(_0x504978){_0x18c012['count']=_0x504978;if(_0x631dcc[_0x3cd3('0x27')][_0x3cd3('0x3e')]){_0x31733f['include']=[{'all':!![]}];}return db[_0x3cd3('0x3c')][_0x3cd3('0x3f')](_0x31733f);})[_0x3cd3('0x1f')](function(_0x46a118){_0x18c012[_0x3cd3('0x40')]=_0x46a118;return _0x18c012;})[_0x3cd3('0x1f')](respondWithFilteredResult(_0x22a414,_0x31733f))[_0x3cd3('0x41')](handleError(_0x22a414,null));};exports[_0x3cd3('0x42')]=function(_0xa077eb,_0x38046b){var _0x294a46={'raw':!![],'where':{'id':_0xa077eb[_0x3cd3('0x43')]['id']}},_0x2bbbb8={};_0x2bbbb8[_0x3cd3('0x29')]=_['keys'](db['SmsApplication'][_0x3cd3('0x25')]);_0x2bbbb8[_0x3cd3('0x27')]=_['keys'](_0xa077eb[_0x3cd3('0x27')]);_0x2bbbb8[_0x3cd3('0x28')]=_['intersection'](_0x2bbbb8['model'],_0x2bbbb8[_0x3cd3('0x27')]);_0x294a46[_0x3cd3('0x2c')]=_[_0x3cd3('0x2a')](_0x2bbbb8[_0x3cd3('0x29')],qs[_0x3cd3('0x2b')](_0xa077eb[_0x3cd3('0x27')]['fields']));_0x294a46[_0x3cd3('0x2c')]=_0x294a46['attributes']['length']?_0x294a46[_0x3cd3('0x2c')]:_0x2bbbb8['model'];if(_0xa077eb['query'][_0x3cd3('0x3e')]){_0x294a46['include']=[{'all':!![]}];}_0x294a46=_['merge']({},_0x294a46,_0xa077eb['options']);return db[_0x3cd3('0x3c')][_0x3cd3('0x44')](_0x294a46)[_0x3cd3('0x1f')](handleEntityNotFound(_0x38046b,null))[_0x3cd3('0x1f')](respondWithResult(_0x38046b,null))[_0x3cd3('0x41')](handleError(_0x38046b,null));};exports[_0x3cd3('0x45')]=function(_0x108dfc,_0x4bf1c2){return db[_0x3cd3('0x3c')][_0x3cd3('0x45')](_0x108dfc['body'],{})['then'](respondWithResult(_0x4bf1c2,0xc9))['catch'](handleError(_0x4bf1c2,null));};exports['update']=function(_0x23f387,_0x1874d0){if(_0x23f387[_0x3cd3('0x46')]['id']){delete _0x23f387['body']['id'];}return db['SmsApplication']['find']({'where':{'id':_0x23f387['params']['id']}})[_0x3cd3('0x1f')](handleEntityNotFound(_0x1874d0,null))[_0x3cd3('0x1f')](saveUpdates(_0x23f387[_0x3cd3('0x46')],null))['then'](respondWithResult(_0x1874d0,null))[_0x3cd3('0x41')](handleError(_0x1874d0,null));};exports[_0x3cd3('0x20')]=function(_0x12fcd4,_0xfa6941){return db['SmsApplication'][_0x3cd3('0x44')]({'where':{'id':_0x12fcd4['params']['id']}})[_0x3cd3('0x1f')](handleEntityNotFound(_0xfa6941,null))[_0x3cd3('0x1f')](removeEntity(_0xfa6941,null))[_0x3cd3('0x41')](handleError(_0xfa6941,null));};
\ No newline at end of file
index 5ce1d5e..669de98 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf6d=['exports','SmsApplication','sms_applications','util','../../config/logger','api','moment','bluebird','request-promise','./smsApplication.attributes'];(function(_0x36ed3c,_0x44a00a){var _0x52a2e0=function(_0x3f7af9){while(--_0x3f7af9){_0x36ed3c['push'](_0x36ed3c['shift']());}};_0x52a2e0(++_0x44a00a);}(_0xbf6d,0x161));var _0xdbf6=function(_0x21ecd6,_0x53e0a6){_0x21ecd6=_0x21ecd6-0x0;var _0x5b2b5a=_0xbf6d[_0x21ecd6];return _0x5b2b5a;};'use strict';var _=require('lodash');var util=require(_0xdbf6('0x0'));var logger=require(_0xdbf6('0x1'))(_0xdbf6('0x2'));var moment=require(_0xdbf6('0x3'));var BPromise=require(_0xdbf6('0x4'));var rp=require(_0xdbf6('0x5'));var attributes=require(_0xdbf6('0x6'));module[_0xdbf6('0x7')]=function(_0xd99c47,_0x3ef1d5){return _0xd99c47['define'](_0xdbf6('0x8'),attributes,{'tableName':_0xdbf6('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4ea9=['request-promise','./smsApplication.attributes','exports','define','SmsApplication','sms_applications','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x5c9cc0,_0x1d49f0){var _0x2eff98=function(_0x3ab103){while(--_0x3ab103){_0x5c9cc0['push'](_0x5c9cc0['shift']());}};_0x2eff98(++_0x1d49f0);}(_0x4ea9,0xa2));var _0x94ea=function(_0x3a00a9,_0x511918){_0x3a00a9=_0x3a00a9-0x0;var _0xea2764=_0x4ea9[_0x3a00a9];return _0xea2764;};'use strict';var _=require(_0x94ea('0x0'));var util=require(_0x94ea('0x1'));var logger=require(_0x94ea('0x2'))(_0x94ea('0x3'));var moment=require(_0x94ea('0x4'));var BPromise=require(_0x94ea('0x5'));var rp=require(_0x94ea('0x6'));var attributes=require(_0x94ea('0x7'));module[_0x94ea('0x8')]=function(_0x2a492f,_0x37e2d3){return _0x2a492f[_0x94ea('0x9')](_0x94ea('0xa'),attributes,{'tableName':_0x94ea('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b30149c..d02d153 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2e38=['catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','http','request','then','info','SmsApplication,\x20%s,\x20%s','SmsApplication,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result'];(function(_0x20a725,_0x3c8c95){var _0xedc192=function(_0x1c0865){while(--_0x1c0865){_0x20a725['push'](_0x20a725['shift']());}};_0xedc192(++_0x3c8c95);}(_0x2e38,0x143));var _0x82e3=function(_0x874fbc,_0x39932c){_0x874fbc=_0x874fbc-0x0;var _0x40ed9f=_0x2e38[_0x874fbc];return _0x40ed9f;};'use strict';var _=require(_0x82e3('0x0'));var util=require(_0x82e3('0x1'));var moment=require(_0x82e3('0x2'));var BPromise=require(_0x82e3('0x3'));var rs=require(_0x82e3('0x4'));var fs=require('fs');var Redis=require(_0x82e3('0x5'));var db=require(_0x82e3('0x6'))['db'];var utils=require(_0x82e3('0x7'));var logger=require(_0x82e3('0x8'))('rpc');var config=require(_0x82e3('0x9'));var jayson=require('jayson/promise');var client=jayson['client'][_0x82e3('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4813f5,_0x64ff2f,_0x5bc967){return new BPromise(function(_0x348c5e,_0x2504e1){return client[_0x82e3('0xb')](_0x4813f5,_0x5bc967)[_0x82e3('0xc')](function(_0x2e2253){logger[_0x82e3('0xd')](_0x82e3('0xe'),_0x64ff2f,'request\x20sent');logger['debug'](_0x82e3('0xf'),_0x64ff2f,_0x82e3('0x10'),JSON[_0x82e3('0x11')](_0x2e2253));if(_0x2e2253['error']){if(_0x2e2253[_0x82e3('0x12')][_0x82e3('0x13')]===0x1f4){logger['error']('SmsApplication,\x20%s,\x20%s',_0x64ff2f,_0x2e2253[_0x82e3('0x12')]['message']);return _0x2504e1(_0x2e2253[_0x82e3('0x12')][_0x82e3('0x14')]);}logger[_0x82e3('0x12')]('SmsApplication,\x20%s,\x20%s',_0x64ff2f,_0x2e2253[_0x82e3('0x12')]['message']);return _0x348c5e(_0x2e2253[_0x82e3('0x12')][_0x82e3('0x14')]);}else{logger[_0x82e3('0xd')]('SmsApplication,\x20%s,\x20%s',_0x64ff2f,_0x82e3('0x10'));_0x348c5e(_0x2e2253[_0x82e3('0x15')][_0x82e3('0x14')]);}})[_0x82e3('0x16')](function(_0x764f36){logger[_0x82e3('0x12')](_0x82e3('0xe'),_0x64ff2f,_0x764f36);_0x2504e1(_0x764f36);});});}
\ No newline at end of file
+var _0xfe9a=['request','then','SmsApplication,\x20%s,\x20%s','request\x20sent','debug','SmsApplication,\x20%s,\x20%s,\x20%s','error','code','message','info','result','lodash','util','moment','bluebird','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http'];(function(_0x3670bd,_0x565db5){var _0x2ca38e=function(_0x519dbd){while(--_0x519dbd){_0x3670bd['push'](_0x3670bd['shift']());}};_0x2ca38e(++_0x565db5);}(_0xfe9a,0xe7));var _0xafe9=function(_0x35091d,_0x441fe4){_0x35091d=_0x35091d-0x0;var _0x183c10=_0xfe9a[_0x35091d];return _0x183c10;};'use strict';var _=require(_0xafe9('0x0'));var util=require(_0xafe9('0x1'));var moment=require(_0xafe9('0x2'));var BPromise=require(_0xafe9('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0xafe9('0x4'));var logger=require(_0xafe9('0x5'))(_0xafe9('0x6'));var config=require(_0xafe9('0x7'));var jayson=require(_0xafe9('0x8'));var client=jayson[_0xafe9('0x9')][_0xafe9('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2d6643,_0xe6b3ac,_0x382bb7){return new BPromise(function(_0x3794f9,_0x204199){return client[_0xafe9('0xb')](_0x2d6643,_0x382bb7)[_0xafe9('0xc')](function(_0x435a7a){logger['info'](_0xafe9('0xd'),_0xe6b3ac,_0xafe9('0xe'));logger[_0xafe9('0xf')](_0xafe9('0x10'),_0xe6b3ac,_0xafe9('0xe'),JSON['stringify'](_0x435a7a));if(_0x435a7a[_0xafe9('0x11')]){if(_0x435a7a[_0xafe9('0x11')][_0xafe9('0x12')]===0x1f4){logger[_0xafe9('0x11')](_0xafe9('0xd'),_0xe6b3ac,_0x435a7a[_0xafe9('0x11')][_0xafe9('0x13')]);return _0x204199(_0x435a7a[_0xafe9('0x11')]['message']);}logger[_0xafe9('0x11')](_0xafe9('0xd'),_0xe6b3ac,_0x435a7a['error'][_0xafe9('0x13')]);return _0x3794f9(_0x435a7a['error'][_0xafe9('0x13')]);}else{logger[_0xafe9('0x14')](_0xafe9('0xd'),_0xe6b3ac,'request\x20sent');_0x3794f9(_0x435a7a[_0xafe9('0x15')][_0xafe9('0x13')]);}})['catch'](function(_0x5ebd39){logger[_0xafe9('0x11')](_0xafe9('0xd'),_0xe6b3ac,_0x5ebd39);_0x204199(_0x5ebd39);});});}
\ No newline at end of file
index a69ef42..1659f7c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0304=['create','post','addMessage','/:id/tags','tracked','sms','smsinteraction:update','update','delete','smsinteraction:destroy','destroy','removeTags','exports','util','path','express','Router','../../components/auth/service','../../config/environment','./smsInteraction.controller','get','isAuthenticated','describe','/:id','show','/:id/messages','/:id/download','download'];(function(_0x4f118b,_0x2e3867){var _0x225719=function(_0x43f398){while(--_0x43f398){_0x4f118b['push'](_0x4f118b['shift']());}};_0x225719(++_0x2e3867);}(_0x0304,0x99));var _0x4030=function(_0x2283dc,_0x2fcfc5){_0x2283dc=_0x2283dc-0x0;var _0x16db90=_0x0304[_0x2283dc];return _0x16db90;};'use strict';var multer=require('multer');var util=require(_0x4030('0x0'));var path=require(_0x4030('0x1'));var timeout=require('connect-timeout');var express=require(_0x4030('0x2'));var router=express[_0x4030('0x3')]();var auth=require(_0x4030('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x4030('0x5'));var controller=require(_0x4030('0x6'));router[_0x4030('0x7')]('/',auth[_0x4030('0x8')](),controller['index']);router[_0x4030('0x7')]('/describe',auth[_0x4030('0x8')](),controller[_0x4030('0x9')]);router[_0x4030('0x7')](_0x4030('0xa'),auth['isAuthenticated'](),controller[_0x4030('0xb')]);router[_0x4030('0x7')](_0x4030('0xc'),auth[_0x4030('0x8')](),controller['getMessages']);router[_0x4030('0x7')](_0x4030('0xd'),auth[_0x4030('0x8')](),controller[_0x4030('0xe')]);router['post']('/',auth[_0x4030('0x8')](),controller[_0x4030('0xf')]);router[_0x4030('0x10')](_0x4030('0xc'),auth[_0x4030('0x8')](),controller[_0x4030('0x11')]);router[_0x4030('0x10')](_0x4030('0x12'),auth[_0x4030('0x8')](),interaction[_0x4030('0x13')](_0x4030('0x14'),'smsinteraction:addtags'),controller['addTags']);router['put'](_0x4030('0xa'),auth[_0x4030('0x8')](),interaction[_0x4030('0x13')](_0x4030('0x14'),_0x4030('0x15')),controller[_0x4030('0x16')]);router[_0x4030('0x17')](_0x4030('0xa'),auth['isAuthenticated'](),interaction[_0x4030('0x13')](_0x4030('0x14'),_0x4030('0x18')),controller[_0x4030('0x19')]);router['delete']('/:id/tags',auth['isAuthenticated'](),controller[_0x4030('0x1a')]);module[_0x4030('0x1b')]=router;
\ No newline at end of file
+var _0xf01d=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsInteraction.controller','get','isAuthenticated','index','/describe','describe','/:id','show','getMessages','download','post','create','/:id/messages','addMessage','/:id/tags','tracked','smsinteraction:addtags','addTags','put','sms','update','delete','smsinteraction:destroy','removeTags','exports'];(function(_0xbca1b1,_0x33f0ce){var _0x4e1686=function(_0x58a80c){while(--_0x58a80c){_0xbca1b1['push'](_0xbca1b1['shift']());}};_0x4e1686(++_0x33f0ce);}(_0xf01d,0xcc));var _0xdf01=function(_0x3a8a59,_0x151ad7){_0x3a8a59=_0x3a8a59-0x0;var _0x184058=_0xf01d[_0x3a8a59];return _0x184058;};'use strict';var multer=require(_0xdf01('0x0'));var util=require(_0xdf01('0x1'));var path=require(_0xdf01('0x2'));var timeout=require(_0xdf01('0x3'));var express=require(_0xdf01('0x4'));var router=express[_0xdf01('0x5')]();var auth=require(_0xdf01('0x6'));var interaction=require(_0xdf01('0x7'));var config=require(_0xdf01('0x8'));var controller=require(_0xdf01('0x9'));router[_0xdf01('0xa')]('/',auth[_0xdf01('0xb')](),controller[_0xdf01('0xc')]);router[_0xdf01('0xa')](_0xdf01('0xd'),auth['isAuthenticated'](),controller[_0xdf01('0xe')]);router[_0xdf01('0xa')](_0xdf01('0xf'),auth[_0xdf01('0xb')](),controller[_0xdf01('0x10')]);router[_0xdf01('0xa')]('/:id/messages',auth[_0xdf01('0xb')](),controller[_0xdf01('0x11')]);router[_0xdf01('0xa')]('/:id/download',auth['isAuthenticated'](),controller[_0xdf01('0x12')]);router[_0xdf01('0x13')]('/',auth[_0xdf01('0xb')](),controller[_0xdf01('0x14')]);router[_0xdf01('0x13')](_0xdf01('0x15'),auth[_0xdf01('0xb')](),controller[_0xdf01('0x16')]);router[_0xdf01('0x13')](_0xdf01('0x17'),auth[_0xdf01('0xb')](),interaction[_0xdf01('0x18')]('sms',_0xdf01('0x19')),controller[_0xdf01('0x1a')]);router[_0xdf01('0x1b')](_0xdf01('0xf'),auth[_0xdf01('0xb')](),interaction[_0xdf01('0x18')](_0xdf01('0x1c'),'smsinteraction:update'),controller[_0xdf01('0x1d')]);router[_0xdf01('0x1e')]('/:id',auth['isAuthenticated'](),interaction[_0xdf01('0x18')](_0xdf01('0x1c'),_0xdf01('0x1f')),controller['destroy']);router[_0xdf01('0x1e')](_0xdf01('0x17'),auth['isAuthenticated'](),controller[_0xdf01('0x20')]);module[_0xdf01('0x21')]=router;
\ No newline at end of file
index cd06fd2..64c5874 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7f64=['moment','exports','BOOLEAN','STRING','DATE','ENUM','out','sequelize'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x7f64,0x18f));var _0x47f6=function(_0x2adb07,_0xa55cf4){_0x2adb07=_0x2adb07-0x0;var _0x5bd93e=_0x7f64[_0x2adb07];return _0x5bd93e;};'use strict';var Sequelize=require(_0x47f6('0x0'));var moment=require(_0x47f6('0x1'));module[_0x47f6('0x2')]={'closed':{'type':Sequelize[_0x47f6('0x3')],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize[_0x47f6('0x4')]},'note':{'type':Sequelize['STRING']},'phone':{'type':Sequelize[_0x47f6('0x4')]},'read1stAt':{'type':Sequelize[_0x47f6('0x5')]},'firstMsgDirection':{'type':Sequelize[_0x47f6('0x6')]('in',_0x47f6('0x7')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0x47f6('0x5')]},'lastMsgDirection':{'type':Sequelize[_0x47f6('0x6')]('in',_0x47f6('0x7')),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
+var _0x122a=['out','ENUM','sequelize','moment','BOOLEAN','STRING','DATE'];(function(_0x3ff3ff,_0x420326){var _0x50d55f=function(_0x361d5b){while(--_0x361d5b){_0x3ff3ff['push'](_0x3ff3ff['shift']());}};_0x50d55f(++_0x420326);}(_0x122a,0x175));var _0xa122=function(_0x15fa2d,_0x378ddc){_0x15fa2d=_0x15fa2d-0x0;var _0x1b40ca=_0x122a[_0x15fa2d];return _0x1b40ca;};'use strict';var Sequelize=require(_0xa122('0x0'));var moment=require(_0xa122('0x1'));module['exports']={'closed':{'type':Sequelize[_0xa122('0x2')],'defaultValue':![]},'closedAt':{'type':Sequelize['DATE']},'disposition':{'type':Sequelize[_0xa122('0x3')]},'note':{'type':Sequelize[_0xa122('0x3')]},'phone':{'type':Sequelize[_0xa122('0x3')]},'read1stAt':{'type':Sequelize[_0xa122('0x4')]},'firstMsgDirection':{'type':Sequelize['ENUM']('in',_0xa122('0x5')),'defaultValue':'in','allowNull':![]},'lastMsgAt':{'type':Sequelize[_0xa122('0x4')]},'lastMsgDirection':{'type':Sequelize[_0xa122('0x6')]('in','out'),'defaultValue':'in','allowNull':![]}};
\ No newline at end of file
index ad3ad3b..8fb6d9e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde94=['destroy','describe','addMessage','omit','ids','getMessages','pick','SmsInteractionId','$gte','format','YYYY-MM-DD\x20HH:mm:ss','findAll','addTags','setTags','spread','emit','removeTags','download','join','root','files','tmp','server','interaction-%s.zip','CmContact','Letter','1cm','mkdirSync','<h1>Sms\x20Interaction:\x20#%d</h1>','<h2>Date:\x20%s</h2>','MMMM\x20Do\x20YYYY,\x20HH:mm:ss','toString','<hr>','<p\x20style=\x22margin:\x203px;\x22>%s:\x20%s</p>','</div>','toFile','interaction-','.pdf','log','unlinkSync','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','squel','crypto','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','redis','defaults','localhost','./smsInteraction.socket','register','end','status','json','offset','limit','set','Content-Range','apply','save','update','then','sendStatus','error','name','rawAttributes','model','query','keys','filters','intersection','fields','attributes','length','hasOwnProperty','order','sort','where','filter','merge','map','type','VIRTUAL','field','options','push','Tag','Tags','tag','distinct','read','include','SmsMessage','Messages','createdAt','SmsInteraction','count','includeAll','User','Users','fullname','Contact','Owner','internal','SmsAccount','key','direction','color','ThroughTags','rows','catch','show','params','find','create','body'];(function(_0x5f08fd,_0x27609d){var _0x566053=function(_0x5ab9c4){while(--_0x5ab9c4){_0x5f08fd['push'](_0x5f08fd['shift']());}};_0x566053(++_0x27609d);}(_0xde94,0x134));var _0x4de9=function(_0x77bb72,_0x3975c3){_0x77bb72=_0x77bb72-0x0;var _0x3b332d=_0xde94[_0x77bb72];return _0x3b332d;};'use strict';var pdf=require(_0x4de9('0x0'));var emlformat=require(_0x4de9('0x1'));var rimraf=require(_0x4de9('0x2'));var zipdir=require(_0x4de9('0x3'));var jsonpatch=require(_0x4de9('0x4'));var rp=require(_0x4de9('0x5'));var moment=require(_0x4de9('0x6'));var BPromise=require(_0x4de9('0x7'));var Mustache=require(_0x4de9('0x8'));var util=require(_0x4de9('0x9'));var path=require('path');var sox=require(_0x4de9('0xa'));var csv=require(_0x4de9('0xb'));var ejs=require(_0x4de9('0xc'));var fs=require('fs');var _=require('lodash');var squel=require(_0x4de9('0xd'));var crypto=require(_0x4de9('0xe'));var jsforce=require('jsforce');var deskjs=require(_0x4de9('0xf'));var toCsv=require('to-csv');var querystring=require(_0x4de9('0x10'));var Papa=require(_0x4de9('0x11'));var authService=require('../../components/auth/service');var hardwareService=require(_0x4de9('0x12'));var Redis=require(_0x4de9('0x13'));var qs=require(_0x4de9('0x14'));var logger=require(_0x4de9('0x15'))(_0x4de9('0x16'));var utils=require(_0x4de9('0x17'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];config[_0x4de9('0x18')]=_[_0x4de9('0x19')](config[_0x4de9('0x18')],{'host':_0x4de9('0x1a'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x4de9('0x18')]));require(_0x4de9('0x1b'))[_0x4de9('0x1c')](socket);function respondWithStatusCode(_0x39bf70,_0x1da092){_0x1da092=_0x1da092||0xcc;return function(_0xab9a4c){if(_0xab9a4c){return _0x39bf70['sendStatus'](_0x1da092);}return _0x39bf70['status'](_0x1da092)[_0x4de9('0x1d')]();};}function respondWithResult(_0x1e6bcc,_0x281206){_0x281206=_0x281206||0xc8;return function(_0x1ae2b5){if(_0x1ae2b5){return _0x1e6bcc[_0x4de9('0x1e')](_0x281206)[_0x4de9('0x1f')](_0x1ae2b5);}};}function respondWithFilteredResult(_0x5371b1,_0x5c36b1){return function(_0x132adf){if(_0x132adf){var _0x1f3f8a=_0x132adf['count'],_0xe1484e=_0x5c36b1[_0x4de9('0x20')],_0x310ab1=_0x5c36b1['offset']+_0x5c36b1[_0x4de9('0x21')],_0xf561d5;if(_0x310ab1>=_0x1f3f8a){_0x310ab1=_0x1f3f8a;_0xf561d5=0xc8;}else{_0xf561d5=0xce;}_0x5371b1[_0x4de9('0x1e')](_0xf561d5);return _0x5371b1[_0x4de9('0x22')](_0x4de9('0x23'),_0xe1484e+'-'+_0x310ab1+'/'+_0x1f3f8a)[_0x4de9('0x1f')](_0x132adf);}return null;};}function patchUpdates(_0x44f99e){return function(_0x39c563){try{jsonpatch[_0x4de9('0x24')](_0x39c563,_0x44f99e,!![]);}catch(_0x47d9f3){return BPromise['reject'](_0x47d9f3);}return _0x39c563[_0x4de9('0x25')]();};}function saveUpdates(_0x4388eb,_0x5d9790){return function(_0x58cd3b){if(_0x58cd3b){return _0x58cd3b[_0x4de9('0x26')](_0x4388eb)[_0x4de9('0x27')](function(_0x46ef56){return _0x46ef56;});}return null;};}function removeEntity(_0x1165d7,_0x3ec178){return function(_0x2724a5){if(_0x2724a5){return _0x2724a5['destroy']()[_0x4de9('0x27')](function(){_0x1165d7[_0x4de9('0x1e')](0xcc)[_0x4de9('0x1d')]();});}};}function handleEntityNotFound(_0x4b7f55,_0x202cfb){return function(_0xc41c90){if(!_0xc41c90){_0x4b7f55[_0x4de9('0x28')](0x194);}return _0xc41c90;};}function handleError(_0x4c3364,_0x49f728){_0x49f728=_0x49f728||0x1f4;return function(_0x1e4f93){logger[_0x4de9('0x29')](_0x1e4f93['stack']);if(_0x1e4f93[_0x4de9('0x2a')]){delete _0x1e4f93[_0x4de9('0x2a')];}_0x4c3364[_0x4de9('0x1e')](_0x49f728)['send'](_0x1e4f93);};}exports['index']=function(_0x443cf1,_0x45e262){var _0x5c4259={},_0x42f25a={},_0x222099={'count':0x0,'rows':[]};var _0x478d61=db['SmsInteraction'][_0x4de9('0x2b')];_0x42f25a[_0x4de9('0x2c')]=_['keys'](_0x478d61);_0x42f25a[_0x4de9('0x2d')]=_[_0x4de9('0x2e')](_0x443cf1[_0x4de9('0x2d')]);_0x42f25a[_0x4de9('0x2f')]=_[_0x4de9('0x30')](_0x42f25a['model'],_0x42f25a['query']);_0x5c4259['attributes']=_[_0x4de9('0x30')](_0x42f25a[_0x4de9('0x2c')],qs['fields'](_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x31')]));_0x5c4259[_0x4de9('0x32')]=_0x5c4259[_0x4de9('0x32')][_0x4de9('0x33')]?_0x5c4259['attributes']:_0x42f25a[_0x4de9('0x2c')];if(!_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x34')]('nolimit')){_0x5c4259[_0x4de9('0x21')]=qs[_0x4de9('0x21')](_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x21')]);_0x5c4259[_0x4de9('0x20')]=qs[_0x4de9('0x20')](_0x443cf1[_0x4de9('0x2d')]['offset']);}_0x5c4259[_0x4de9('0x35')]=qs['sort'](_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x36')]);_0x5c4259[_0x4de9('0x37')]=qs['filters'](_['pick'](_0x443cf1[_0x4de9('0x2d')],_0x42f25a[_0x4de9('0x2f')]));if(_0x443cf1['query'][_0x4de9('0x38')]){_0x5c4259[_0x4de9('0x37')]=_[_0x4de9('0x39')](_0x5c4259[_0x4de9('0x37')],{'$or':_[_0x4de9('0x3a')](_0x478d61,function(_0x279972){if(_0x279972[_0x4de9('0x3b')]['key']!==_0x4de9('0x3c')){var _0x14ab8a={};_0x14ab8a[_0x279972[_0x4de9('0x3d')]]={'$like':'%'+_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x38')]+'%'};return _0x14ab8a;}})});}_0x5c4259=_['merge']({},_0x5c4259,_0x443cf1[_0x4de9('0x3e')]);var _0x42d234={'where':_0x5c4259[_0x4de9('0x37')]};_0x42d234['include']=[];if(_0x443cf1[_0x4de9('0x2d')]['tag']){_0x42d234['include'][_0x4de9('0x3f')]({'model':db[_0x4de9('0x40')],'as':_0x4de9('0x41'),'attributes':['id'],'where':{'id':_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x42')]},'required':!![]});_0x42d234[_0x4de9('0x43')]=!![];}if(_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x44')]){_0x42d234[_0x4de9('0x45')]['push']({'model':db[_0x4de9('0x46')],'as':_0x4de9('0x47'),'attributes':['id','direction',_0x4de9('0x48'),_0x4de9('0x44')],'where':{'direction':'in','read':_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x44')]||![]},'required':!![]});_0x42d234[_0x4de9('0x43')]=!![];}return db[_0x4de9('0x49')][_0x4de9('0x4a')](_0x42d234)['then'](function(_0xcdbde){_0x222099['count']=_0xcdbde;if(_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x4b')]){_0x5c4259[_0x4de9('0x45')]=[{'model':db[_0x4de9('0x4c')],'as':_0x4de9('0x4d'),'required':![],'attributes':['id',_0x4de9('0x2a'),_0x4de9('0x4e')]},{'model':db['CmContact'],'as':_0x4de9('0x4f'),'required':![]},{'model':db[_0x4de9('0x4c')],'as':_0x4de9('0x50'),'attributes':[_0x4de9('0x2a'),_0x4de9('0x4e'),_0x4de9('0x51')],'required':![]},{'model':db[_0x4de9('0x52')],'as':'Account','attributes':[_0x4de9('0x2a'),_0x4de9('0x53')],'required':![]},{'model':db[_0x4de9('0x46')],'as':'Messages','attributes':['id',_0x4de9('0x54'),_0x4de9('0x48'),'read'],'where':{'direction':'in','read':_0x443cf1[_0x4de9('0x2d')]['read']||![]},'required':_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x44')]||![]},{'model':db[_0x4de9('0x40')],'as':_0x4de9('0x41'),'attributes':['id',_0x4de9('0x2a'),_0x4de9('0x55')],'required':_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x42')]?!![]:![]},{'model':db[_0x4de9('0x40')],'as':_0x4de9('0x56'),'attributes':['id',_0x4de9('0x2a'),'color'],'through':_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x42')]?{'attributes':[],'where':{'TagId':_0x443cf1[_0x4de9('0x2d')][_0x4de9('0x42')]||undefined}}:{},'required':_0x443cf1[_0x4de9('0x2d')]['tag']?!![]:![]}];}return db[_0x4de9('0x49')]['findAll'](_0x5c4259);})[_0x4de9('0x27')](function(_0x121c03){_0x222099[_0x4de9('0x57')]=_0x121c03;return _0x222099;})[_0x4de9('0x27')](respondWithFilteredResult(_0x45e262,_0x5c4259))[_0x4de9('0x58')](handleError(_0x45e262,null));};exports[_0x4de9('0x59')]=function(_0x2567fe,_0x353ebd){var _0x4edfb2={'raw':![],'where':{'id':_0x2567fe[_0x4de9('0x5a')]['id']}},_0x4cb1af={};_0x4cb1af['model']=_[_0x4de9('0x2e')](db[_0x4de9('0x49')][_0x4de9('0x2b')]);_0x4cb1af[_0x4de9('0x2d')]=_[_0x4de9('0x2e')](_0x2567fe['query']);_0x4cb1af[_0x4de9('0x2f')]=_[_0x4de9('0x30')](_0x4cb1af[_0x4de9('0x2c')],_0x4cb1af[_0x4de9('0x2d')]);_0x4edfb2[_0x4de9('0x32')]=_['intersection'](_0x4cb1af[_0x4de9('0x2c')],qs[_0x4de9('0x31')](_0x2567fe[_0x4de9('0x2d')]['fields']));_0x4edfb2['attributes']=_0x4edfb2[_0x4de9('0x32')][_0x4de9('0x33')]?_0x4edfb2[_0x4de9('0x32')]:_0x4cb1af[_0x4de9('0x2c')];if(_0x2567fe['query'][_0x4de9('0x4b')]){_0x4edfb2[_0x4de9('0x45')]=[{'all':!![]}];}_0x4edfb2=_[_0x4de9('0x39')]({},_0x4edfb2,_0x2567fe['options']);return db[_0x4de9('0x49')][_0x4de9('0x5b')](_0x4edfb2)[_0x4de9('0x27')](handleEntityNotFound(_0x353ebd,null))[_0x4de9('0x27')](respondWithResult(_0x353ebd,null))[_0x4de9('0x58')](handleError(_0x353ebd,null));};exports[_0x4de9('0x5c')]=function(_0x4fb821,_0x38445b){return db[_0x4de9('0x49')]['create'](_0x4fb821[_0x4de9('0x5d')],{})[_0x4de9('0x27')](respondWithResult(_0x38445b,0xc9))[_0x4de9('0x58')](handleError(_0x38445b,null));};exports[_0x4de9('0x26')]=function(_0x1594f1,_0x5c64f0){if(_0x1594f1[_0x4de9('0x5d')]['id']){delete _0x1594f1['body']['id'];}return db['SmsInteraction'][_0x4de9('0x5b')]({'where':{'id':_0x1594f1[_0x4de9('0x5a')]['id']}})['then'](handleEntityNotFound(_0x5c64f0,null))[_0x4de9('0x27')](saveUpdates(_0x1594f1[_0x4de9('0x5d')],null))[_0x4de9('0x27')](respondWithResult(_0x5c64f0,null))['catch'](handleError(_0x5c64f0,null));};exports[_0x4de9('0x5e')]=function(_0xad5a8e,_0x94c2f6){return db[_0x4de9('0x49')][_0x4de9('0x5b')]({'where':{'id':_0xad5a8e[_0x4de9('0x5a')]['id']}})[_0x4de9('0x27')](handleEntityNotFound(_0x94c2f6,null))['then'](removeEntity(_0x94c2f6,null))[_0x4de9('0x58')](handleError(_0x94c2f6,null));};exports['describe']=function(_0x4af2df,_0x2df21d){return db['SmsInteraction'][_0x4de9('0x5f')]()[_0x4de9('0x27')](respondWithResult(_0x2df21d,null))[_0x4de9('0x58')](handleError(_0x2df21d,null));};exports[_0x4de9('0x60')]=function(_0x101ff6,_0xbcfd83,_0x516322){return db[_0x4de9('0x46')]['find']({'where':{'id':_0x101ff6[_0x4de9('0x5a')]['id']}})[_0x4de9('0x27')](handleEntityNotFound(_0xbcfd83,null))[_0x4de9('0x27')](function(_0x2608ce){if(_0x2608ce){return _0x2608ce['addMessage'](_0x101ff6['body']['ids'],_[_0x4de9('0x61')](_0x101ff6[_0x4de9('0x5d')],[_0x4de9('0x62'),'id'])||{});}})[_0x4de9('0x27')](respondWithResult(_0xbcfd83,null))[_0x4de9('0x58')](handleError(_0xbcfd83,null));};exports[_0x4de9('0x63')]=function(_0x1f4971,_0x298680,_0x4e8cae){var _0x53162b={'raw':![],'where':{}};var _0x32af5c={};var _0x5336fd={'count':0x0,'rows':[]};return db[_0x4de9('0x49')]['findOne']({'where':{'id':_0x1f4971[_0x4de9('0x5a')]['id']}})['then'](handleEntityNotFound(_0x298680,null))[_0x4de9('0x27')](function(_0x3e16bb){if(_0x3e16bb){_0x32af5c['model']=_[_0x4de9('0x2e')](db['SmsMessage'][_0x4de9('0x2b')]);_0x32af5c[_0x4de9('0x2d')]=_[_0x4de9('0x2e')](_0x1f4971[_0x4de9('0x2d')]);_0x32af5c[_0x4de9('0x2f')]=_['intersection'](_0x32af5c['model'],_0x32af5c['query']);_0x53162b[_0x4de9('0x32')]=_['intersection'](_0x32af5c['model'],qs[_0x4de9('0x31')](_0x1f4971[_0x4de9('0x2d')][_0x4de9('0x31')]));_0x53162b['attributes']=_0x53162b['attributes'][_0x4de9('0x33')]?_0x53162b[_0x4de9('0x32')]:_0x32af5c[_0x4de9('0x2c')];if(!_0x1f4971['query']['hasOwnProperty']('nolimit')){_0x53162b['limit']=qs[_0x4de9('0x21')](_0x1f4971[_0x4de9('0x2d')]['limit']);_0x53162b['offset']=qs['offset'](_0x1f4971[_0x4de9('0x2d')][_0x4de9('0x20')]);}_0x53162b[_0x4de9('0x35')]=qs[_0x4de9('0x36')](_0x1f4971['query'][_0x4de9('0x36')]);_0x53162b[_0x4de9('0x37')]=qs[_0x4de9('0x2f')](_[_0x4de9('0x64')](_0x1f4971[_0x4de9('0x2d')],_0x32af5c[_0x4de9('0x2f')]));_0x53162b[_0x4de9('0x37')][_0x4de9('0x65')]=_0x3e16bb['id'];if(_0x1f4971['query'][_0x4de9('0x38')]){_0x53162b['where']=_[_0x4de9('0x39')](_0x53162b[_0x4de9('0x37')],{'$or':_['map'](_0x53162b[_0x4de9('0x32')],function(_0x3577cf){var _0x5be2af={};_0x5be2af[_0x3577cf]={'$like':'%'+_0x1f4971[_0x4de9('0x2d')]['filter']+'%'};return _0x5be2af;})});}if(_0x1f4971['query'][_0x4de9('0x66')]){var _0x35bfae=_0x1f4971['query'][_0x4de9('0x66')]['split'](',');var _0x1c8868={};_0x1c8868[_0x35bfae[0x0]]={'$gte':moment(_0x35bfae[0x1])[_0x4de9('0x67')](_0x4de9('0x68'))};_0x53162b[_0x4de9('0x37')]=_[_0x4de9('0x39')](_0x53162b[_0x4de9('0x37')],_0x1c8868);}_0x53162b=_[_0x4de9('0x39')]({},_0x53162b,_0x1f4971[_0x4de9('0x3e')]);return db[_0x4de9('0x46')][_0x4de9('0x4a')]({'where':_0x53162b[_0x4de9('0x37')]})[_0x4de9('0x27')](function(_0x1634b9){_0x5336fd['count']=_0x1634b9;if(_0x1f4971[_0x4de9('0x2d')][_0x4de9('0x4b')]){_0x53162b[_0x4de9('0x45')]=[{'all':!![]}];}return db[_0x4de9('0x46')][_0x4de9('0x69')](_0x53162b);})[_0x4de9('0x27')](function(_0x511254){_0x5336fd[_0x4de9('0x57')]=_0x511254;return _0x5336fd;});}})['then'](respondWithFilteredResult(_0x298680,_0x53162b))[_0x4de9('0x58')](handleError(_0x298680,null));};exports[_0x4de9('0x6a')]=function(_0x22bf5f,_0xcfb234,_0x5f30ec){return db[_0x4de9('0x49')][_0x4de9('0x5b')]({'where':{'id':_0x22bf5f[_0x4de9('0x5a')]['id']}})[_0x4de9('0x27')](handleEntityNotFound(_0xcfb234,null))[_0x4de9('0x27')](function(_0x5b95ad){if(_0x5b95ad){return _0x5b95ad[_0x4de9('0x6b')](_0x22bf5f[_0x4de9('0x5d')][_0x4de9('0x62')],_[_0x4de9('0x61')](_0x22bf5f['body'],[_0x4de9('0x62'),'id'])||{})[_0x4de9('0x6c')](function(){return db[_0x4de9('0x40')]['findAll']({'attributes':['id',_0x4de9('0x2a'),_0x4de9('0x55')],'where':{'id':_0x22bf5f['body'][_0x4de9('0x62')]}});})[_0x4de9('0x27')](function(_0x14dc1e){socket[_0x4de9('0x6d')]('smsInteractionTags:save',{'id':Number(_0x22bf5f[_0x4de9('0x5a')]['id']),'tags':_0x14dc1e||[]});return{'id':Number(_0x22bf5f[_0x4de9('0x5a')]['id']),'tags':_0x14dc1e||[]};});}})[_0x4de9('0x27')](respondWithResult(_0xcfb234,null))[_0x4de9('0x58')](handleError(_0xcfb234,null));};exports[_0x4de9('0x6e')]=function(_0x2fb07c,_0x5a41cf,_0x3cf6b5){var _0xdc7112;return db['SmsInteraction'][_0x4de9('0x5b')]({'where':{'id':_0x2fb07c[_0x4de9('0x5a')]['id']}})[_0x4de9('0x27')](handleEntityNotFound(_0x5a41cf,null))[_0x4de9('0x27')](function(_0x2c47a3){if(_0x2c47a3){return _0x2c47a3['removeTags'](_0x2fb07c[_0x4de9('0x2d')][_0x4de9('0x62')]);}})[_0x4de9('0x27')](respondWithStatusCode(_0x5a41cf,null))[_0x4de9('0x58')](handleError(_0x5a41cf,null));};exports[_0x4de9('0x6f')]=function(_0x5a4efc,_0x2e76e1){var _0x9d2d5=moment()['unix']()['toString']();var _0x5908f6=path[_0x4de9('0x70')](config[_0x4de9('0x71')],'server',_0x4de9('0x72'),_0x4de9('0x73'));var _0x4f92b5=path[_0x4de9('0x70')](config['root'],_0x4de9('0x74'),_0x4de9('0x72'),'attachments');var _0x3daffd=path['join'](_0x5908f6,_0x9d2d5);var _0x29b1b5=util[_0x4de9('0x67')](_0x4de9('0x75'),_0x9d2d5);var _0xf01ac3=path[_0x4de9('0x70')](_0x5908f6,_0x29b1b5);var _0x278cb9=![];return db[_0x4de9('0x49')][_0x4de9('0x5b')]({'where':{'id':_0x5a4efc['params']['id']},'include':[{'model':db[_0x4de9('0x46')],'as':'Messages','attributes':['id',_0x4de9('0x5d')],'include':[{'model':db[_0x4de9('0x4c')],'as':_0x4de9('0x4c'),'attributes':['id','fullname'],'raw':!![]},{'model':db[_0x4de9('0x76')],'as':'Contact','attributes':['id','firstName'],'raw':!![]}]}]})[_0x4de9('0x27')](handleEntityNotFound(_0x2e76e1,null))[_0x4de9('0x27')](function(_0x24fa25){if(_0x24fa25){_0x278cb9=!![];var _0x3b4f68='';var _0x1875c8={'format':_0x4de9('0x77'),'border':_0x4de9('0x78')};fs[_0x4de9('0x79')](_0x3daffd);_0x3b4f68+=util['format'](_0x4de9('0x7a'),_0x24fa25['id']);_0x3b4f68+=util[_0x4de9('0x67')](_0x4de9('0x7b'),moment()['format'](_0x4de9('0x7c'))[_0x4de9('0x7d')]());_0x3b4f68+=_0x4de9('0x7e');for(var _0x1a094f=0x0;_0x1a094f<_0x24fa25[_0x4de9('0x47')][_0x4de9('0x33')];_0x1a094f++){var _0x594469=_0x24fa25['Messages'][_0x1a094f];_0x3b4f68+='<div\x20style=\x22border-style:\x20solid;\x20border-width:\x201px;\x20margin:\x203px;\x22>';_0x3b4f68+=util[_0x4de9('0x67')](_0x4de9('0x7f'),_0x594469[_0x4de9('0x4c')]?_0x594469[_0x4de9('0x4c')]['fullname']:_0x594469[_0x4de9('0x4f')]['firstName'],_0x594469[_0x4de9('0x5d')]);_0x3b4f68+=_0x4de9('0x80');}return new BPromise(function(_0x309a70,_0x344414){pdf[_0x4de9('0x5c')](_0x3b4f68,_0x1875c8)[_0x4de9('0x81')](path[_0x4de9('0x70')](_0x3daffd,_0x4de9('0x82')+_0x9d2d5+_0x4de9('0x83')),function(_0x4e8283,_0x3b493a){if(_0x4e8283)return _0x344414(_0x4e8283);_0x309a70(_0x3b493a);});});}})[_0x4de9('0x27')](function(){if(_0x278cb9){return new BPromise(function(_0x5eeb68,_0xd635b0){zipdir(_0x3daffd,{'saveTo':_0xf01ac3},function(_0x390fcb,_0x52ae1d){if(_0x390fcb)return _0xd635b0(_0x390fcb);return _0x5eeb68(_0x52ae1d);});});}})[_0x4de9('0x27')](function(){if(_0x278cb9){return new BPromise(function(_0x59ef49,_0x537d5f){rimraf(_0x3daffd,function(_0x106c81){if(_0x106c81)_0x537d5f(_0x106c81);return _0x59ef49();});});}})[_0x4de9('0x27')](function(){if(_0x278cb9){return _0x2e76e1[_0x4de9('0x6f')](_0xf01ac3,_0x29b1b5,function(_0x28f4b7){if(_0x28f4b7){console[_0x4de9('0x84')]('err',_0x28f4b7);}else{fs[_0x4de9('0x85')](_0xf01ac3);}});}else{return _0x2e76e1[_0x4de9('0x28')](0xc8);}})[_0x4de9('0x58')](handleError(_0x2e76e1,null));};
\ No newline at end of file
+var _0xeb5d=['model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','limit','order','sort','where','filter','merge','map','type','key','VIRTUAL','field','include','tag','push','distinct','read','SmsMessage','Messages','createdAt','includeAll','User','Users','fullname','CmContact','Owner','internal','SmsAccount','Account','direction','Tag','Tags','ThroughTags','findAll','rows','catch','params','length','options','find','body','addMessage','omit','getMessages','findOne','pick','SmsInteractionId','$gte','split','format','ids','spread','color','emit','smsInteractionTags:save','removeTags','download','unix','toString','join','root','files','server','attachments','interaction-%s.zip','Contact','firstName','Letter','1cm','mkdirSync','<h1>Sms\x20Interaction:\x20#%d</h1>','<h2>Date:\x20%s</h2>','MMMM\x20Do\x20YYYY,\x20HH:mm:ss','<hr>','<div\x20style=\x22border-style:\x20solid;\x20border-width:\x201px;\x20margin:\x203px;\x22>','</div>','create','toFile','interaction-','.pdf','err','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./smsInteraction.socket','sendStatus','status','json','count','offset','set','Content-Range','apply','update','destroy','then','end','error','stack','name','send','SmsInteraction','rawAttributes'];(function(_0x46aeef,_0x13c87a){var _0x81e5e9=function(_0xd38a97){while(--_0xd38a97){_0x46aeef['push'](_0x46aeef['shift']());}};_0x81e5e9(++_0x13c87a);}(_0xeb5d,0x16b));var _0xdeb5=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xeb5d[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xdeb5('0x0'));var rimraf=require(_0xdeb5('0x1'));var zipdir=require(_0xdeb5('0x2'));var jsonpatch=require(_0xdeb5('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xdeb5('0x4'));var Mustache=require(_0xdeb5('0x5'));var util=require('util');var path=require(_0xdeb5('0x6'));var sox=require(_0xdeb5('0x7'));var csv=require(_0xdeb5('0x8'));var ejs=require(_0xdeb5('0x9'));var fs=require('fs');var _=require(_0xdeb5('0xa'));var squel=require(_0xdeb5('0xb'));var crypto=require(_0xdeb5('0xc'));var jsforce=require(_0xdeb5('0xd'));var deskjs=require(_0xdeb5('0xe'));var toCsv=require(_0xdeb5('0x8'));var querystring=require(_0xdeb5('0xf'));var Papa=require(_0xdeb5('0x10'));var authService=require(_0xdeb5('0x11'));var hardwareService=require(_0xdeb5('0x12'));var Redis=require(_0xdeb5('0x13'));var qs=require(_0xdeb5('0x14'));var logger=require(_0xdeb5('0x15'))('api');var utils=require(_0xdeb5('0x16'));var config=require(_0xdeb5('0x17'));var db=require(_0xdeb5('0x18'))['db'];config[_0xdeb5('0x19')]=_[_0xdeb5('0x1a')](config[_0xdeb5('0x19')],{'host':_0xdeb5('0x1b'),'port':0x18eb});var socket=require(_0xdeb5('0x1c'))(new Redis(config['redis']));require(_0xdeb5('0x1d'))['register'](socket);function respondWithStatusCode(_0xe648c0,_0x11d83a){_0x11d83a=_0x11d83a||0xcc;return function(_0x266aa2){if(_0x266aa2){return _0xe648c0[_0xdeb5('0x1e')](_0x11d83a);}return _0xe648c0[_0xdeb5('0x1f')](_0x11d83a)['end']();};}function respondWithResult(_0x82d3ba,_0x384145){_0x384145=_0x384145||0xc8;return function(_0x5caec0){if(_0x5caec0){return _0x82d3ba[_0xdeb5('0x1f')](_0x384145)[_0xdeb5('0x20')](_0x5caec0);}};}function respondWithFilteredResult(_0x3521b2,_0x4ca7dd){return function(_0x5c6b5d){if(_0x5c6b5d){var _0x3a44e1=_0x5c6b5d[_0xdeb5('0x21')],_0x5eb4fc=_0x4ca7dd['offset'],_0x1679ee=_0x4ca7dd[_0xdeb5('0x22')]+_0x4ca7dd['limit'],_0x31b6c1;if(_0x1679ee>=_0x3a44e1){_0x1679ee=_0x3a44e1;_0x31b6c1=0xc8;}else{_0x31b6c1=0xce;}_0x3521b2[_0xdeb5('0x1f')](_0x31b6c1);return _0x3521b2[_0xdeb5('0x23')](_0xdeb5('0x24'),_0x5eb4fc+'-'+_0x1679ee+'/'+_0x3a44e1)[_0xdeb5('0x20')](_0x5c6b5d);}return null;};}function patchUpdates(_0x3f7eff){return function(_0x540300){try{jsonpatch[_0xdeb5('0x25')](_0x540300,_0x3f7eff,!![]);}catch(_0x18877a){return BPromise['reject'](_0x18877a);}return _0x540300['save']();};}function saveUpdates(_0x5c8601,_0x1ca65d){return function(_0x14af0f){if(_0x14af0f){return _0x14af0f[_0xdeb5('0x26')](_0x5c8601)['then'](function(_0x1897ec){return _0x1897ec;});}return null;};}function removeEntity(_0x5cdf41,_0x37d039){return function(_0x30e5c3){if(_0x30e5c3){return _0x30e5c3[_0xdeb5('0x27')]()[_0xdeb5('0x28')](function(){_0x5cdf41[_0xdeb5('0x1f')](0xcc)[_0xdeb5('0x29')]();});}};}function handleEntityNotFound(_0x200e56,_0x3e9fe2){return function(_0x17fb18){if(!_0x17fb18){_0x200e56[_0xdeb5('0x1e')](0x194);}return _0x17fb18;};}function handleError(_0x5675a4,_0x466ca7){_0x466ca7=_0x466ca7||0x1f4;return function(_0x3bcc76){logger[_0xdeb5('0x2a')](_0x3bcc76[_0xdeb5('0x2b')]);if(_0x3bcc76[_0xdeb5('0x2c')]){delete _0x3bcc76['name'];}_0x5675a4[_0xdeb5('0x1f')](_0x466ca7)[_0xdeb5('0x2d')](_0x3bcc76);};}exports['index']=function(_0x1321ba,_0x4eb19b){var _0x41bf2b={},_0x37a417={},_0x5dc7e2={'count':0x0,'rows':[]};var _0x4a2065=db[_0xdeb5('0x2e')][_0xdeb5('0x2f')];_0x37a417[_0xdeb5('0x30')]=_[_0xdeb5('0x31')](_0x4a2065);_0x37a417[_0xdeb5('0x32')]=_['keys'](_0x1321ba[_0xdeb5('0x32')]);_0x37a417[_0xdeb5('0x33')]=_[_0xdeb5('0x34')](_0x37a417[_0xdeb5('0x30')],_0x37a417[_0xdeb5('0x32')]);_0x41bf2b[_0xdeb5('0x35')]=_[_0xdeb5('0x34')](_0x37a417[_0xdeb5('0x30')],qs[_0xdeb5('0x36')](_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x36')]));_0x41bf2b[_0xdeb5('0x35')]=_0x41bf2b[_0xdeb5('0x35')]['length']?_0x41bf2b[_0xdeb5('0x35')]:_0x37a417['model'];if(!_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x37')](_0xdeb5('0x38'))){_0x41bf2b['limit']=qs[_0xdeb5('0x39')](_0x1321ba['query']['limit']);_0x41bf2b[_0xdeb5('0x22')]=qs['offset'](_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x22')]);}_0x41bf2b[_0xdeb5('0x3a')]=qs[_0xdeb5('0x3b')](_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x3b')]);_0x41bf2b[_0xdeb5('0x3c')]=qs[_0xdeb5('0x33')](_['pick'](_0x1321ba[_0xdeb5('0x32')],_0x37a417['filters']));if(_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x3d')]){_0x41bf2b[_0xdeb5('0x3c')]=_[_0xdeb5('0x3e')](_0x41bf2b[_0xdeb5('0x3c')],{'$or':_[_0xdeb5('0x3f')](_0x4a2065,function(_0x216c67){if(_0x216c67[_0xdeb5('0x40')][_0xdeb5('0x41')]!==_0xdeb5('0x42')){var _0x243515={};_0x243515[_0x216c67[_0xdeb5('0x43')]]={'$like':'%'+_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x3d')]+'%'};return _0x243515;}})});}_0x41bf2b=_[_0xdeb5('0x3e')]({},_0x41bf2b,_0x1321ba['options']);var _0x45f6fe={'where':_0x41bf2b['where']};_0x45f6fe[_0xdeb5('0x44')]=[];if(_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x45')]){_0x45f6fe[_0xdeb5('0x44')][_0xdeb5('0x46')]({'model':db['Tag'],'as':'Tags','attributes':['id'],'where':{'id':_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x45')]},'required':!![]});_0x45f6fe[_0xdeb5('0x47')]=!![];}if(_0x1321ba['query'][_0xdeb5('0x48')]){_0x45f6fe['include'][_0xdeb5('0x46')]({'model':db[_0xdeb5('0x49')],'as':_0xdeb5('0x4a'),'attributes':['id','direction',_0xdeb5('0x4b'),_0xdeb5('0x48')],'where':{'direction':'in','read':_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x48')]||![]},'required':!![]});_0x45f6fe['distinct']=!![];}return db[_0xdeb5('0x2e')][_0xdeb5('0x21')](_0x45f6fe)['then'](function(_0x2c1b35){_0x5dc7e2[_0xdeb5('0x21')]=_0x2c1b35;if(_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x4c')]){_0x41bf2b[_0xdeb5('0x44')]=[{'model':db[_0xdeb5('0x4d')],'as':_0xdeb5('0x4e'),'required':![],'attributes':['id',_0xdeb5('0x2c'),_0xdeb5('0x4f')]},{'model':db[_0xdeb5('0x50')],'as':'Contact','required':![]},{'model':db[_0xdeb5('0x4d')],'as':_0xdeb5('0x51'),'attributes':[_0xdeb5('0x2c'),_0xdeb5('0x4f'),_0xdeb5('0x52')],'required':![]},{'model':db[_0xdeb5('0x53')],'as':_0xdeb5('0x54'),'attributes':[_0xdeb5('0x2c'),_0xdeb5('0x41')],'required':![]},{'model':db['SmsMessage'],'as':_0xdeb5('0x4a'),'attributes':['id',_0xdeb5('0x55'),'createdAt',_0xdeb5('0x48')],'where':{'direction':'in','read':_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x48')]||![]},'required':_0x1321ba[_0xdeb5('0x32')]['read']||![]},{'model':db[_0xdeb5('0x56')],'as':_0xdeb5('0x57'),'attributes':['id','name','color'],'required':_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x45')]?!![]:![]},{'model':db[_0xdeb5('0x56')],'as':_0xdeb5('0x58'),'attributes':['id',_0xdeb5('0x2c'),'color'],'through':_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x45')]?{'attributes':[],'where':{'TagId':_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x45')]||undefined}}:{},'required':_0x1321ba[_0xdeb5('0x32')][_0xdeb5('0x45')]?!![]:![]}];}return db[_0xdeb5('0x2e')][_0xdeb5('0x59')](_0x41bf2b);})[_0xdeb5('0x28')](function(_0x488c52){_0x5dc7e2[_0xdeb5('0x5a')]=_0x488c52;return _0x5dc7e2;})['then'](respondWithFilteredResult(_0x4eb19b,_0x41bf2b))[_0xdeb5('0x5b')](handleError(_0x4eb19b,null));};exports['show']=function(_0x27b352,_0x4467f7){var _0xeee8b9={'raw':![],'where':{'id':_0x27b352[_0xdeb5('0x5c')]['id']}},_0x1089f2={};_0x1089f2[_0xdeb5('0x30')]=_[_0xdeb5('0x31')](db[_0xdeb5('0x2e')][_0xdeb5('0x2f')]);_0x1089f2[_0xdeb5('0x32')]=_[_0xdeb5('0x31')](_0x27b352[_0xdeb5('0x32')]);_0x1089f2['filters']=_[_0xdeb5('0x34')](_0x1089f2[_0xdeb5('0x30')],_0x1089f2[_0xdeb5('0x32')]);_0xeee8b9['attributes']=_[_0xdeb5('0x34')](_0x1089f2[_0xdeb5('0x30')],qs[_0xdeb5('0x36')](_0x27b352['query'][_0xdeb5('0x36')]));_0xeee8b9[_0xdeb5('0x35')]=_0xeee8b9[_0xdeb5('0x35')][_0xdeb5('0x5d')]?_0xeee8b9['attributes']:_0x1089f2[_0xdeb5('0x30')];if(_0x27b352['query'][_0xdeb5('0x4c')]){_0xeee8b9[_0xdeb5('0x44')]=[{'all':!![]}];}_0xeee8b9=_['merge']({},_0xeee8b9,_0x27b352[_0xdeb5('0x5e')]);return db[_0xdeb5('0x2e')][_0xdeb5('0x5f')](_0xeee8b9)[_0xdeb5('0x28')](handleEntityNotFound(_0x4467f7,null))[_0xdeb5('0x28')](respondWithResult(_0x4467f7,null))['catch'](handleError(_0x4467f7,null));};exports['create']=function(_0x878408,_0x3e174a){return db['SmsInteraction']['create'](_0x878408[_0xdeb5('0x60')],{})[_0xdeb5('0x28')](respondWithResult(_0x3e174a,0xc9))[_0xdeb5('0x5b')](handleError(_0x3e174a,null));};exports['update']=function(_0x50dc7b,_0x571d61){if(_0x50dc7b[_0xdeb5('0x60')]['id']){delete _0x50dc7b[_0xdeb5('0x60')]['id'];}return db[_0xdeb5('0x2e')][_0xdeb5('0x5f')]({'where':{'id':_0x50dc7b[_0xdeb5('0x5c')]['id']}})[_0xdeb5('0x28')](handleEntityNotFound(_0x571d61,null))[_0xdeb5('0x28')](saveUpdates(_0x50dc7b[_0xdeb5('0x60')],null))[_0xdeb5('0x28')](respondWithResult(_0x571d61,null))[_0xdeb5('0x5b')](handleError(_0x571d61,null));};exports['destroy']=function(_0x1b6892,_0xe8f948){return db[_0xdeb5('0x2e')][_0xdeb5('0x5f')]({'where':{'id':_0x1b6892['params']['id']}})[_0xdeb5('0x28')](handleEntityNotFound(_0xe8f948,null))[_0xdeb5('0x28')](removeEntity(_0xe8f948,null))[_0xdeb5('0x5b')](handleError(_0xe8f948,null));};exports['describe']=function(_0x2df105,_0xd1118f){return db['SmsInteraction']['describe']()[_0xdeb5('0x28')](respondWithResult(_0xd1118f,null))[_0xdeb5('0x5b')](handleError(_0xd1118f,null));};exports[_0xdeb5('0x61')]=function(_0x3443cb,_0x23acb6,_0x4c353b){return db[_0xdeb5('0x49')]['find']({'where':{'id':_0x3443cb[_0xdeb5('0x5c')]['id']}})[_0xdeb5('0x28')](handleEntityNotFound(_0x23acb6,null))[_0xdeb5('0x28')](function(_0x51e3d8){if(_0x51e3d8){return _0x51e3d8['addMessage'](_0x3443cb[_0xdeb5('0x60')]['ids'],_[_0xdeb5('0x62')](_0x3443cb[_0xdeb5('0x60')],['ids','id'])||{});}})[_0xdeb5('0x28')](respondWithResult(_0x23acb6,null))[_0xdeb5('0x5b')](handleError(_0x23acb6,null));};exports[_0xdeb5('0x63')]=function(_0x46b364,_0x35a79f,_0x32b01c){var _0x3f946b={'raw':![],'where':{}};var _0x2918a8={};var _0x4d4a0d={'count':0x0,'rows':[]};return db['SmsInteraction'][_0xdeb5('0x64')]({'where':{'id':_0x46b364[_0xdeb5('0x5c')]['id']}})[_0xdeb5('0x28')](handleEntityNotFound(_0x35a79f,null))[_0xdeb5('0x28')](function(_0x226ccb){if(_0x226ccb){_0x2918a8['model']=_[_0xdeb5('0x31')](db[_0xdeb5('0x49')][_0xdeb5('0x2f')]);_0x2918a8[_0xdeb5('0x32')]=_[_0xdeb5('0x31')](_0x46b364['query']);_0x2918a8[_0xdeb5('0x33')]=_[_0xdeb5('0x34')](_0x2918a8[_0xdeb5('0x30')],_0x2918a8['query']);_0x3f946b['attributes']=_['intersection'](_0x2918a8[_0xdeb5('0x30')],qs[_0xdeb5('0x36')](_0x46b364[_0xdeb5('0x32')][_0xdeb5('0x36')]));_0x3f946b[_0xdeb5('0x35')]=_0x3f946b[_0xdeb5('0x35')]['length']?_0x3f946b[_0xdeb5('0x35')]:_0x2918a8[_0xdeb5('0x30')];if(!_0x46b364['query'][_0xdeb5('0x37')](_0xdeb5('0x38'))){_0x3f946b[_0xdeb5('0x39')]=qs[_0xdeb5('0x39')](_0x46b364[_0xdeb5('0x32')][_0xdeb5('0x39')]);_0x3f946b[_0xdeb5('0x22')]=qs[_0xdeb5('0x22')](_0x46b364['query'][_0xdeb5('0x22')]);}_0x3f946b[_0xdeb5('0x3a')]=qs['sort'](_0x46b364[_0xdeb5('0x32')][_0xdeb5('0x3b')]);_0x3f946b[_0xdeb5('0x3c')]=qs[_0xdeb5('0x33')](_[_0xdeb5('0x65')](_0x46b364[_0xdeb5('0x32')],_0x2918a8[_0xdeb5('0x33')]));_0x3f946b[_0xdeb5('0x3c')][_0xdeb5('0x66')]=_0x226ccb['id'];if(_0x46b364[_0xdeb5('0x32')][_0xdeb5('0x3d')]){_0x3f946b[_0xdeb5('0x3c')]=_[_0xdeb5('0x3e')](_0x3f946b[_0xdeb5('0x3c')],{'$or':_[_0xdeb5('0x3f')](_0x3f946b[_0xdeb5('0x35')],function(_0x180201){var _0x15cd7f={};_0x15cd7f[_0x180201]={'$like':'%'+_0x46b364['query']['filter']+'%'};return _0x15cd7f;})});}if(_0x46b364[_0xdeb5('0x32')][_0xdeb5('0x67')]){var _0x27b418=_0x46b364[_0xdeb5('0x32')][_0xdeb5('0x67')][_0xdeb5('0x68')](',');var _0x226576={};_0x226576[_0x27b418[0x0]]={'$gte':moment(_0x27b418[0x1])[_0xdeb5('0x69')]('YYYY-MM-DD\x20HH:mm:ss')};_0x3f946b[_0xdeb5('0x3c')]=_['merge'](_0x3f946b[_0xdeb5('0x3c')],_0x226576);}_0x3f946b=_['merge']({},_0x3f946b,_0x46b364[_0xdeb5('0x5e')]);return db[_0xdeb5('0x49')][_0xdeb5('0x21')]({'where':_0x3f946b[_0xdeb5('0x3c')]})[_0xdeb5('0x28')](function(_0x1dac99){_0x4d4a0d[_0xdeb5('0x21')]=_0x1dac99;if(_0x46b364[_0xdeb5('0x32')]['includeAll']){_0x3f946b['include']=[{'all':!![]}];}return db[_0xdeb5('0x49')][_0xdeb5('0x59')](_0x3f946b);})[_0xdeb5('0x28')](function(_0x530045){_0x4d4a0d['rows']=_0x530045;return _0x4d4a0d;});}})['then'](respondWithFilteredResult(_0x35a79f,_0x3f946b))[_0xdeb5('0x5b')](handleError(_0x35a79f,null));};exports['addTags']=function(_0x19c011,_0x365c2a,_0x52a930){return db[_0xdeb5('0x2e')][_0xdeb5('0x5f')]({'where':{'id':_0x19c011[_0xdeb5('0x5c')]['id']}})[_0xdeb5('0x28')](handleEntityNotFound(_0x365c2a,null))[_0xdeb5('0x28')](function(_0x4087e1){if(_0x4087e1){return _0x4087e1['setTags'](_0x19c011[_0xdeb5('0x60')][_0xdeb5('0x6a')],_[_0xdeb5('0x62')](_0x19c011[_0xdeb5('0x60')],['ids','id'])||{})[_0xdeb5('0x6b')](function(){return db[_0xdeb5('0x56')][_0xdeb5('0x59')]({'attributes':['id',_0xdeb5('0x2c'),_0xdeb5('0x6c')],'where':{'id':_0x19c011['body'][_0xdeb5('0x6a')]}});})[_0xdeb5('0x28')](function(_0xf1c69a){socket[_0xdeb5('0x6d')](_0xdeb5('0x6e'),{'id':Number(_0x19c011[_0xdeb5('0x5c')]['id']),'tags':_0xf1c69a||[]});return{'id':Number(_0x19c011[_0xdeb5('0x5c')]['id']),'tags':_0xf1c69a||[]};});}})['then'](respondWithResult(_0x365c2a,null))[_0xdeb5('0x5b')](handleError(_0x365c2a,null));};exports['removeTags']=function(_0x1cca7b,_0x25a5a6,_0x452458){var _0x87e97b;return db[_0xdeb5('0x2e')]['find']({'where':{'id':_0x1cca7b[_0xdeb5('0x5c')]['id']}})[_0xdeb5('0x28')](handleEntityNotFound(_0x25a5a6,null))['then'](function(_0x345bd2){if(_0x345bd2){return _0x345bd2[_0xdeb5('0x6f')](_0x1cca7b[_0xdeb5('0x32')][_0xdeb5('0x6a')]);}})[_0xdeb5('0x28')](respondWithStatusCode(_0x25a5a6,null))[_0xdeb5('0x5b')](handleError(_0x25a5a6,null));};exports[_0xdeb5('0x70')]=function(_0x31ef17,_0x5a8934){var _0x104d95=moment()[_0xdeb5('0x71')]()[_0xdeb5('0x72')]();var _0x54291d=path[_0xdeb5('0x73')](config[_0xdeb5('0x74')],'server',_0xdeb5('0x75'),'tmp');var _0x511326=path[_0xdeb5('0x73')](config[_0xdeb5('0x74')],_0xdeb5('0x76'),_0xdeb5('0x75'),_0xdeb5('0x77'));var _0x407798=path['join'](_0x54291d,_0x104d95);var _0x12ed42=util['format'](_0xdeb5('0x78'),_0x104d95);var _0x135c4a=path[_0xdeb5('0x73')](_0x54291d,_0x12ed42);var _0x31d80b=![];return db[_0xdeb5('0x2e')]['find']({'where':{'id':_0x31ef17[_0xdeb5('0x5c')]['id']},'include':[{'model':db['SmsMessage'],'as':_0xdeb5('0x4a'),'attributes':['id',_0xdeb5('0x60')],'include':[{'model':db[_0xdeb5('0x4d')],'as':_0xdeb5('0x4d'),'attributes':['id',_0xdeb5('0x4f')],'raw':!![]},{'model':db['CmContact'],'as':_0xdeb5('0x79'),'attributes':['id',_0xdeb5('0x7a')],'raw':!![]}]}]})[_0xdeb5('0x28')](handleEntityNotFound(_0x5a8934,null))[_0xdeb5('0x28')](function(_0x3c6f4a){if(_0x3c6f4a){_0x31d80b=!![];var _0x4509c3='';var _0x41608d={'format':_0xdeb5('0x7b'),'border':_0xdeb5('0x7c')};fs[_0xdeb5('0x7d')](_0x407798);_0x4509c3+=util['format'](_0xdeb5('0x7e'),_0x3c6f4a['id']);_0x4509c3+=util['format'](_0xdeb5('0x7f'),moment()[_0xdeb5('0x69')](_0xdeb5('0x80'))[_0xdeb5('0x72')]());_0x4509c3+=_0xdeb5('0x81');for(var _0x1e96ef=0x0;_0x1e96ef<_0x3c6f4a['Messages'][_0xdeb5('0x5d')];_0x1e96ef++){var _0x315383=_0x3c6f4a[_0xdeb5('0x4a')][_0x1e96ef];_0x4509c3+=_0xdeb5('0x82');_0x4509c3+=util[_0xdeb5('0x69')]('<p\x20style=\x22margin:\x203px;\x22>%s:\x20%s</p>',_0x315383[_0xdeb5('0x4d')]?_0x315383[_0xdeb5('0x4d')][_0xdeb5('0x4f')]:_0x315383[_0xdeb5('0x79')][_0xdeb5('0x7a')],_0x315383[_0xdeb5('0x60')]);_0x4509c3+=_0xdeb5('0x83');}return new BPromise(function(_0xeb8dd3,_0x42b9ad){pdf[_0xdeb5('0x84')](_0x4509c3,_0x41608d)[_0xdeb5('0x85')](path['join'](_0x407798,_0xdeb5('0x86')+_0x104d95+_0xdeb5('0x87')),function(_0x1b9a2f,_0x28794f){if(_0x1b9a2f)return _0x42b9ad(_0x1b9a2f);_0xeb8dd3(_0x28794f);});});}})[_0xdeb5('0x28')](function(){if(_0x31d80b){return new BPromise(function(_0x4abc70,_0x306dc5){zipdir(_0x407798,{'saveTo':_0x135c4a},function(_0x5596a1,_0x5af4e2){if(_0x5596a1)return _0x306dc5(_0x5596a1);return _0x4abc70(_0x5af4e2);});});}})['then'](function(){if(_0x31d80b){return new BPromise(function(_0xfd22d6,_0x5e680c){rimraf(_0x407798,function(_0x5b6811){if(_0x5b6811)_0x5e680c(_0x5b6811);return _0xfd22d6();});});}})[_0xdeb5('0x28')](function(){if(_0x31d80b){return _0x5a8934[_0xdeb5('0x70')](_0x135c4a,_0x12ed42,function(_0x1d94a9){if(_0x1d94a9){console['log'](_0xdeb5('0x88'),_0x1d94a9);}else{fs['unlinkSync'](_0x135c4a);}});}else{return _0x5a8934[_0xdeb5('0x1e')](0xc8);}})['catch'](handleError(_0x5a8934,null));};
\ No newline at end of file
index 362f516..8d34bce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x387c=['SmsInteraction','update','remove','emit','hook','exports','events'];(function(_0x2888a4,_0x1fc157){var _0x7f650c=function(_0x5e1880){while(--_0x5e1880){_0x2888a4['push'](_0x2888a4['shift']());}};_0x7f650c(++_0x1fc157);}(_0x387c,0x1b1));var _0xc387=function(_0x2f6541,_0x363cba){_0x2f6541=_0x2f6541-0x0;var _0x4d76d8=_0x387c[_0x2f6541];return _0x4d76d8;};'use strict';var EventEmitter=require(_0xc387('0x0'));var SmsInteraction=require('../../mysqldb')['db'][_0xc387('0x1')];var SmsInteractionEvents=new EventEmitter();SmsInteractionEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0xc387('0x2'),'afterDestroy':_0xc387('0x3')};function emitEvent(_0x266b8c){return function(_0xd0c80a,_0x3348d9,_0x8922ca){SmsInteractionEvents['emit'](_0x266b8c+':'+_0xd0c80a['id'],_0xd0c80a);SmsInteractionEvents[_0xc387('0x4')](_0x266b8c,_0xd0c80a);_0x8922ca(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsInteraction[_0xc387('0x5')](e,emitEvent(event));}}module[_0xc387('0x6')]=SmsInteractionEvents;
\ No newline at end of file
+var _0x1733=['emit','hasOwnProperty','exports','events','../../mysqldb','setMaxListeners','save','remove'];(function(_0xb21b18,_0x28ef68){var _0x4ba1bb=function(_0x57e8b8){while(--_0x57e8b8){_0xb21b18['push'](_0xb21b18['shift']());}};_0x4ba1bb(++_0x28ef68);}(_0x1733,0x93));var _0x3173=function(_0x473c5c,_0x369a10){_0x473c5c=_0x473c5c-0x0;var _0x2eb623=_0x1733[_0x473c5c];return _0x2eb623;};'use strict';var EventEmitter=require(_0x3173('0x0'));var SmsInteraction=require(_0x3173('0x1'))['db']['SmsInteraction'];var SmsInteractionEvents=new EventEmitter();SmsInteractionEvents[_0x3173('0x2')](0x0);var events={'afterCreate':_0x3173('0x3'),'afterUpdate':'update','afterDestroy':_0x3173('0x4')};function emitEvent(_0x370f1b){return function(_0x39268b,_0x4e9f12,_0x244724){SmsInteractionEvents[_0x3173('0x5')](_0x370f1b+':'+_0x39268b['id'],_0x39268b);SmsInteractionEvents[_0x3173('0x5')](_0x370f1b,_0x39268b);_0x244724(null);};}for(var e in events){if(events[_0x3173('0x6')](e)){var event=events[e];SmsInteraction['hook'](e,emitEvent(event));}}module[_0x3173('0x7')]=SmsInteractionEvents;
\ No newline at end of file
index 8c837b6..c7b072d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b68=['YYYY-MM-DD\x20HH:mm:ss','util','../../config/logger','api','request-promise','./smsInteraction.attributes','define','SmsInteraction','sms_interactions','changed','closedAt','format'];(function(_0x102914,_0x14a7fa){var _0x2dc143=function(_0x33a6b6){while(--_0x33a6b6){_0x102914['push'](_0x102914['shift']());}};_0x2dc143(++_0x14a7fa);}(_0x8b68,0x175));var _0x88b6=function(_0x42177e,_0x425156){_0x42177e=_0x42177e-0x0;var _0x1a955a=_0x8b68[_0x42177e];return _0x1a955a;};'use strict';var _=require('lodash');var util=require(_0x88b6('0x0'));var logger=require(_0x88b6('0x1'))(_0x88b6('0x2'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x88b6('0x3'));var attributes=require(_0x88b6('0x4'));module['exports']=function(_0x201274,_0x4d06b2){return _0x201274[_0x88b6('0x5')](_0x88b6('0x6'),attributes,{'tableName':_0x88b6('0x7'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0xfd999c,_0x2f9636,_0x3ef641){if(_0xfd999c[_0x88b6('0x8')]('closed')){_0xfd999c[_0x88b6('0x9')]=moment()[_0x88b6('0xa')](_0x88b6('0xb'));}_0x3ef641(null,_0xfd999c);}}});};
\ No newline at end of file
+var _0x4768=['../../config/logger','api','moment','bluebird','./smsInteraction.attributes','exports','define','SmsInteraction','sms_interactions','changed','closedAt','format','lodash','util'];(function(_0x3ab9ee,_0x4a74b8){var _0x82ee88=function(_0x6ccc7e){while(--_0x6ccc7e){_0x3ab9ee['push'](_0x3ab9ee['shift']());}};_0x82ee88(++_0x4a74b8);}(_0x4768,0x132));var _0x8476=function(_0x5f34be,_0x36d8b3){_0x5f34be=_0x5f34be-0x0;var _0x29a8fc=_0x4768[_0x5f34be];return _0x29a8fc;};'use strict';var _=require(_0x8476('0x0'));var util=require(_0x8476('0x1'));var logger=require(_0x8476('0x2'))(_0x8476('0x3'));var moment=require(_0x8476('0x4'));var BPromise=require(_0x8476('0x5'));var rp=require('request-promise');var attributes=require(_0x8476('0x6'));module[_0x8476('0x7')]=function(_0x21ca5c,_0x2161fd){return _0x21ca5c[_0x8476('0x8')](_0x8476('0x9'),attributes,{'tableName':_0x8476('0xa'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'beforeUpdate':function(_0xcc2cf,_0x5e7752,_0x377e43){if(_0xcc2cf[_0x8476('0xb')]('closed')){_0xcc2cf[_0x8476('0xc')]=moment()[_0x8476('0xd')]('YYYY-MM-DD\x20HH:mm:ss');}_0x377e43(null,_0xcc2cf);}}});};
\ No newline at end of file
index c1f0998..5408e99 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x32d2=['./smsInteraction.socket','register','then','info','SmsInteraction,\x20%s,\x20%s','request\x20sent','SmsInteraction,\x20%s,\x20%s,\x20%s','stringify','error','message','result','update','body','options','attributes','limit','UpdateSmsInteraction','debug','catch','AddTagsToSmsInteraction','find','where','addTags','ids','omit','AddTags','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','redis','defaults','localhost','socket.io-emitter'];(function(_0x5d2803,_0xf375bd){var _0xdcad2c=function(_0x3c3a98){while(--_0x3c3a98){_0x5d2803['push'](_0x5d2803['shift']());}};_0xdcad2c(++_0xf375bd);}(_0x32d2,0x179));var _0x232d=function(_0x400eb4,_0x229c79){_0x400eb4=_0x400eb4-0x0;var _0x544f8e=_0x32d2[_0x400eb4];return _0x544f8e;};'use strict';var _=require('lodash');var util=require(_0x232d('0x0'));var moment=require(_0x232d('0x1'));var BPromise=require('bluebird');var rs=require(_0x232d('0x2'));var fs=require('fs');var Redis=require(_0x232d('0x3'));var db=require(_0x232d('0x4'))['db'];var utils=require(_0x232d('0x5'));var logger=require(_0x232d('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x232d('0x7'));var client=jayson[_0x232d('0x8')]['http']({'port':0x232a});config[_0x232d('0x9')]=_[_0x232d('0xa')](config[_0x232d('0x9')],{'host':_0x232d('0xb'),'port':0x18eb});var socket=require(_0x232d('0xc'))(new Redis(config[_0x232d('0x9')]));require(_0x232d('0xd'))[_0x232d('0xe')](socket);function respondWithRpcPromise(_0x445e87,_0x134033,_0x495cf0){return new BPromise(function(_0x4fcc8a,_0x191bef){return client['request'](_0x445e87,_0x495cf0)[_0x232d('0xf')](function(_0x3798a6){logger[_0x232d('0x10')](_0x232d('0x11'),_0x134033,_0x232d('0x12'));logger['debug'](_0x232d('0x13'),_0x134033,_0x232d('0x12'),JSON[_0x232d('0x14')](_0x3798a6));if(_0x3798a6['error']){if(_0x3798a6[_0x232d('0x15')]['code']===0x1f4){logger[_0x232d('0x15')](_0x232d('0x11'),_0x134033,_0x3798a6[_0x232d('0x15')]['message']);return _0x191bef(_0x3798a6[_0x232d('0x15')][_0x232d('0x16')]);}logger[_0x232d('0x15')](_0x232d('0x11'),_0x134033,_0x3798a6['error']['message']);return _0x4fcc8a(_0x3798a6[_0x232d('0x15')][_0x232d('0x16')]);}else{logger['info'](_0x232d('0x11'),_0x134033,_0x232d('0x12'));_0x4fcc8a(_0x3798a6[_0x232d('0x17')][_0x232d('0x16')]);}})['catch'](function(_0xc0aade){logger[_0x232d('0x15')](_0x232d('0x11'),_0x134033,_0xc0aade);_0x191bef(_0xc0aade);});});}exports['UpdateSmsInteraction']=function(_0x176d22){var _0x2e098a=this;return new Promise(function(_0x53776b,_0x4936ad){return db['SmsInteraction'][_0x232d('0x18')](_0x176d22[_0x232d('0x19')],{'raw':_0x176d22[_0x232d('0x1a')]?_0x176d22[_0x232d('0x1a')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x176d22['options']?_0x176d22[_0x232d('0x1a')]['where']||null:null,'attributes':_0x176d22[_0x232d('0x1a')]?_0x176d22['options'][_0x232d('0x1b')]||null:null,'limit':_0x176d22[_0x232d('0x1a')]?_0x176d22[_0x232d('0x1a')][_0x232d('0x1c')]||null:null})[_0x232d('0xf')](function(_0x3f2242){logger[_0x232d('0x10')](_0x232d('0x1d'),_0x176d22);logger[_0x232d('0x1e')](_0x232d('0x1d'),_0x176d22,JSON[_0x232d('0x14')](_0x3f2242));_0x53776b(_0x3f2242);})[_0x232d('0x1f')](function(_0x40c67a){logger[_0x232d('0x15')](_0x232d('0x1d'),_0x40c67a[_0x232d('0x16')],_0x176d22);_0x4936ad(_0x2e098a[_0x232d('0x15')](0x1f4,_0x40c67a['message']));});});};exports[_0x232d('0x20')]=function(_0xf3bf3){return new Promise(function(_0x4fff8b,_0x377c1e){return db['SmsInteraction'][_0x232d('0x21')]({'where':_0xf3bf3[_0x232d('0x1a')]?_0xf3bf3['options'][_0x232d('0x22')]||null:null})[_0x232d('0xf')](function(_0x3f886d){if(_0x3f886d){return _0x3f886d[_0x232d('0x23')](_0xf3bf3[_0x232d('0x19')][_0x232d('0x24')],_[_0x232d('0x25')](_0xf3bf3['body'],['ids','id'])||{});}})['spread'](function(_0x174d7b){logger[_0x232d('0x10')](_0x232d('0x26'),_0xf3bf3);logger[_0x232d('0x1e')](_0x232d('0x26'),_0xf3bf3,JSON[_0x232d('0x14')](_0x174d7b));_0x4fff8b(_0x174d7b);})[_0x232d('0x1f')](function(_0x2680eb){logger[_0x232d('0x15')](_0x232d('0x26'),_0x2680eb[_0x232d('0x16')],_0xf3bf3);_0x377c1e(_this[_0x232d('0x15')](0x1f4,_0x2680eb['message']));});});};
\ No newline at end of file
+var _0x42b8=['SmsInteraction,\x20%s,\x20%s','request\x20sent','debug','SmsInteraction,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','UpdateSmsInteraction','SmsInteraction','body','options','raw','where','attributes','catch','AddTagsToSmsInteraction','find','ids','omit','spread','AddTags','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','register','request','then','info'];(function(_0x4fab63,_0x346a50){var _0x4e8bf7=function(_0x3b2f42){while(--_0x3b2f42){_0x4fab63['push'](_0x4fab63['shift']());}};_0x4e8bf7(++_0x346a50);}(_0x42b8,0xe4));var _0x842b=function(_0x4e676e,_0x2a7c6d){_0x4e676e=_0x4e676e-0x0;var _0x336a3c=_0x42b8[_0x4e676e];return _0x336a3c;};'use strict';var _=require(_0x842b('0x0'));var util=require(_0x842b('0x1'));var moment=require(_0x842b('0x2'));var BPromise=require(_0x842b('0x3'));var rs=require(_0x842b('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x842b('0x5'))['db'];var utils=require(_0x842b('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0x842b('0x7'));var jayson=require(_0x842b('0x8'));var client=jayson[_0x842b('0x9')]['http']({'port':0x232a});config[_0x842b('0xa')]=_[_0x842b('0xb')](config[_0x842b('0xa')],{'host':_0x842b('0xc'),'port':0x18eb});var socket=require(_0x842b('0xd'))(new Redis(config[_0x842b('0xa')]));require('./smsInteraction.socket')[_0x842b('0xe')](socket);function respondWithRpcPromise(_0x404eff,_0x51a86d,_0x15ac74){return new BPromise(function(_0x5c7fea,_0x5c8350){return client[_0x842b('0xf')](_0x404eff,_0x15ac74)[_0x842b('0x10')](function(_0x1924c9){logger[_0x842b('0x11')](_0x842b('0x12'),_0x51a86d,_0x842b('0x13'));logger[_0x842b('0x14')](_0x842b('0x15'),_0x51a86d,_0x842b('0x13'),JSON[_0x842b('0x16')](_0x1924c9));if(_0x1924c9['error']){if(_0x1924c9[_0x842b('0x17')][_0x842b('0x18')]===0x1f4){logger[_0x842b('0x17')](_0x842b('0x12'),_0x51a86d,_0x1924c9['error'][_0x842b('0x19')]);return _0x5c8350(_0x1924c9[_0x842b('0x17')][_0x842b('0x19')]);}logger[_0x842b('0x17')](_0x842b('0x12'),_0x51a86d,_0x1924c9[_0x842b('0x17')]['message']);return _0x5c7fea(_0x1924c9['error'][_0x842b('0x19')]);}else{logger[_0x842b('0x11')](_0x842b('0x12'),_0x51a86d,'request\x20sent');_0x5c7fea(_0x1924c9[_0x842b('0x1a')][_0x842b('0x19')]);}})['catch'](function(_0x27ff16){logger[_0x842b('0x17')]('SmsInteraction,\x20%s,\x20%s',_0x51a86d,_0x27ff16);_0x5c8350(_0x27ff16);});});}exports[_0x842b('0x1b')]=function(_0x38b1b2){var _0x146ae4=this;return new Promise(function(_0x44be8d,_0x21a7a0){return db[_0x842b('0x1c')]['update'](_0x38b1b2[_0x842b('0x1d')],{'raw':_0x38b1b2[_0x842b('0x1e')]?_0x38b1b2[_0x842b('0x1e')][_0x842b('0x1f')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x38b1b2[_0x842b('0x1e')]?_0x38b1b2['options'][_0x842b('0x20')]||null:null,'attributes':_0x38b1b2[_0x842b('0x1e')]?_0x38b1b2['options'][_0x842b('0x21')]||null:null,'limit':_0x38b1b2[_0x842b('0x1e')]?_0x38b1b2[_0x842b('0x1e')]['limit']||null:null})[_0x842b('0x10')](function(_0x10876f){logger[_0x842b('0x11')](_0x842b('0x1b'),_0x38b1b2);logger['debug'](_0x842b('0x1b'),_0x38b1b2,JSON[_0x842b('0x16')](_0x10876f));_0x44be8d(_0x10876f);})[_0x842b('0x22')](function(_0x110c57){logger[_0x842b('0x17')](_0x842b('0x1b'),_0x110c57[_0x842b('0x19')],_0x38b1b2);_0x21a7a0(_0x146ae4[_0x842b('0x17')](0x1f4,_0x110c57[_0x842b('0x19')]));});});};exports[_0x842b('0x23')]=function(_0x17d7f8){return new Promise(function(_0x30d99e,_0x48baf1){return db[_0x842b('0x1c')][_0x842b('0x24')]({'where':_0x17d7f8['options']?_0x17d7f8['options'][_0x842b('0x20')]||null:null})[_0x842b('0x10')](function(_0x3657e7){if(_0x3657e7){return _0x3657e7['addTags'](_0x17d7f8['body'][_0x842b('0x25')],_[_0x842b('0x26')](_0x17d7f8[_0x842b('0x1d')],[_0x842b('0x25'),'id'])||{});}})[_0x842b('0x27')](function(_0x4ca0bb){logger[_0x842b('0x11')](_0x842b('0x28'),_0x17d7f8);logger[_0x842b('0x14')](_0x842b('0x28'),_0x17d7f8,JSON[_0x842b('0x16')](_0x4ca0bb));_0x30d99e(_0x4ca0bb);})['catch'](function(_0x207d7d){logger[_0x842b('0x17')](_0x842b('0x28'),_0x207d7d['message'],_0x17d7f8);_0x48baf1(_this[_0x842b('0x17')](0x1f4,_0x207d7d['message']));});});};
\ No newline at end of file
index d2d1e08..11f7539 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc650=['smsInteraction:','./smsInteraction.events','save','remove','emit','removeListener','register','length'];(function(_0xc1d772,_0x5c499a){var _0x31e711=function(_0x2cab1f){while(--_0x2cab1f){_0xc1d772['push'](_0xc1d772['shift']());}};_0x31e711(++_0x5c499a);}(_0xc650,0xd9));var _0x0c65=function(_0x2182e2,_0x58de3e){_0x2182e2=_0x2182e2-0x0;var _0x248a06=_0xc650[_0x2182e2];return _0x248a06;};'use strict';var SmsInteractionEvents=require(_0x0c65('0x0'));var events=[_0x0c65('0x1'),_0x0c65('0x2'),'update'];function createListener(_0x263abc,_0x305cca){return function(_0x2e25c9){_0x305cca[_0x0c65('0x3')](_0x263abc,_0x2e25c9);};}function removeListener(_0x14a5a2,_0x2a12c2){return function(){SmsInteractionEvents[_0x0c65('0x4')](_0x14a5a2,_0x2a12c2);};}exports[_0x0c65('0x5')]=function(_0x5bc2ab){for(var _0x28cbb1=0x0,_0xd28ddd=events[_0x0c65('0x6')];_0x28cbb1<_0xd28ddd;_0x28cbb1++){var _0x327650=events[_0x28cbb1];var _0x359215=createListener(_0x0c65('0x7')+_0x327650,_0x5bc2ab);SmsInteractionEvents['on'](_0x327650,_0x359215);}};
\ No newline at end of file
+var _0x9a58=['length','save','remove','removeListener'];(function(_0x481c41,_0x48ba3c){var _0xf91fd=function(_0x557e14){while(--_0x557e14){_0x481c41['push'](_0x481c41['shift']());}};_0xf91fd(++_0x48ba3c);}(_0x9a58,0x11d));var _0x89a5=function(_0x24679e,_0x22d9d7){_0x24679e=_0x24679e-0x0;var _0x291f21=_0x9a58[_0x24679e];return _0x291f21;};'use strict';var SmsInteractionEvents=require('./smsInteraction.events');var events=[_0x89a5('0x0'),_0x89a5('0x1'),'update'];function createListener(_0x2c1b8b,_0x8fcf1c){return function(_0x29a3fb){_0x8fcf1c['emit'](_0x2c1b8b,_0x29a3fb);};}function removeListener(_0x51d4d5,_0x2a9e8a){return function(){SmsInteractionEvents[_0x89a5('0x2')](_0x51d4d5,_0x2a9e8a);};}exports['register']=function(_0x357f04){for(var _0x12afac=0x0,_0x2ebc99=events[_0x89a5('0x3')];_0x12afac<_0x2ebc99;_0x12afac++){var _0x36c8df=events[_0x12afac];var _0x4f8a87=createListener('smsInteraction:'+_0x36c8df,_0x357f04);SmsInteractionEvents['on'](_0x36c8df,_0x4f8a87);}};
\ No newline at end of file
index 807ad30..1c309e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ac3=['/:id','/:id/accept','/:id/reject','reject','delete','exports','util','express','Router','../../components/auth/service','../../components/interaction/service','./smsMessage.controller','isAuthenticated','index','/describe','describe','get','show','post','tracked','sms','create','/:id/status','status','put'];(function(_0xc0475a,_0x3a31fc){var _0x46ebb9=function(_0x239eda){while(--_0x239eda){_0xc0475a['push'](_0xc0475a['shift']());}};_0x46ebb9(++_0x3a31fc);}(_0x1ac3,0x1e1));var _0x31ac=function(_0x13e741,_0x5d3c24){_0x13e741=_0x13e741-0x0;var _0x3f8bb3=_0x1ac3[_0x13e741];return _0x3f8bb3;};'use strict';var multer=require('multer');var util=require(_0x31ac('0x0'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x31ac('0x1'));var router=express[_0x31ac('0x2')]();var auth=require(_0x31ac('0x3'));var interaction=require(_0x31ac('0x4'));var config=require('../../config/environment');var controller=require(_0x31ac('0x5'));router['get']('/',auth[_0x31ac('0x6')](),controller[_0x31ac('0x7')]);router['get'](_0x31ac('0x8'),auth[_0x31ac('0x6')](),controller[_0x31ac('0x9')]);router[_0x31ac('0xa')]('/:id',auth['isAuthenticated'](),controller[_0x31ac('0xb')]);router[_0x31ac('0xc')]('/',auth[_0x31ac('0x6')](),interaction[_0x31ac('0xd')](_0x31ac('0xe'),'smsmessage:create'),controller[_0x31ac('0xf')]);router[_0x31ac('0xc')](_0x31ac('0x10'),controller[_0x31ac('0x11')]);router[_0x31ac('0x12')](_0x31ac('0x13'),auth[_0x31ac('0x6')](),controller['update']);router[_0x31ac('0x12')](_0x31ac('0x14'),auth[_0x31ac('0x6')](),controller['accept']);router['put'](_0x31ac('0x15'),auth[_0x31ac('0x6')](),controller[_0x31ac('0x16')]);router[_0x31ac('0x17')](_0x31ac('0x13'),auth['isAuthenticated'](),controller['destroy']);module[_0x31ac('0x18')]=router;
\ No newline at end of file
+var _0xa1e8=['path','connect-timeout','express','../../components/auth/service','../../config/environment','./smsMessage.controller','get','isAuthenticated','/describe','describe','/:id','show','sms','smsmessage:create','/:id/status','status','put','update','accept','reject','delete','destroy','exports','multer'];(function(_0x4243a3,_0x447337){var _0x1b2a33=function(_0x6a8200){while(--_0x6a8200){_0x4243a3['push'](_0x4243a3['shift']());}};_0x1b2a33(++_0x447337);}(_0xa1e8,0x1af));var _0x8a1e=function(_0x5ef8e7,_0x319734){_0x5ef8e7=_0x5ef8e7-0x0;var _0x44dbf4=_0xa1e8[_0x5ef8e7];return _0x44dbf4;};'use strict';var multer=require(_0x8a1e('0x0'));var util=require('util');var path=require(_0x8a1e('0x1'));var timeout=require(_0x8a1e('0x2'));var express=require(_0x8a1e('0x3'));var router=express['Router']();var auth=require(_0x8a1e('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x8a1e('0x5'));var controller=require(_0x8a1e('0x6'));router[_0x8a1e('0x7')]('/',auth[_0x8a1e('0x8')](),controller['index']);router[_0x8a1e('0x7')](_0x8a1e('0x9'),auth[_0x8a1e('0x8')](),controller[_0x8a1e('0xa')]);router['get'](_0x8a1e('0xb'),auth[_0x8a1e('0x8')](),controller[_0x8a1e('0xc')]);router['post']('/',auth[_0x8a1e('0x8')](),interaction['tracked'](_0x8a1e('0xd'),_0x8a1e('0xe')),controller['create']);router['post'](_0x8a1e('0xf'),controller[_0x8a1e('0x10')]);router[_0x8a1e('0x11')](_0x8a1e('0xb'),auth[_0x8a1e('0x8')](),controller[_0x8a1e('0x12')]);router[_0x8a1e('0x11')]('/:id/accept',auth[_0x8a1e('0x8')](),controller[_0x8a1e('0x13')]);router[_0x8a1e('0x11')]('/:id/reject',auth[_0x8a1e('0x8')](),controller[_0x8a1e('0x14')]);router[_0x8a1e('0x15')]('/:id',auth[_0x8a1e('0x8')](),controller[_0x8a1e('0x16')]);module[_0x8a1e('0x17')]=router;
\ No newline at end of file
index e2d6f01..65942ac 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6dd1=['BOOLEAN','sequelize','TEXT','medium','ENUM','out','STRING','DATE'];(function(_0x19d9a8,_0x730d94){var _0xcd1f9b=function(_0x5a7142){while(--_0x5a7142){_0x19d9a8['push'](_0x19d9a8['shift']());}};_0xcd1f9b(++_0x730d94);}(_0x6dd1,0x111));var _0x16dd=function(_0x1715b9,_0x5edc2a){_0x1715b9=_0x1715b9-0x0;var _0x4bcc5d=_0x6dd1[_0x1715b9];return _0x4bcc5d;};'use strict';var Sequelize=require(_0x16dd('0x0'));module['exports']={'body':{'type':Sequelize[_0x16dd('0x1')](_0x16dd('0x2')),'allowNull':![]},'read':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'direction':{'type':Sequelize[_0x16dd('0x3')]('in',_0x16dd('0x4')),'defaultValue':_0x16dd('0x4'),'allowNull':![]},'messageId':{'type':Sequelize[_0x16dd('0x5')](0xbe)},'phone':{'type':Sequelize[_0x16dd('0x5')]},'readAt':{'type':Sequelize[_0x16dd('0x6')]},'secret':{'type':Sequelize[_0x16dd('0x7')],'defaultValue':![]}};
\ No newline at end of file
+var _0x3dd6=['out','STRING','DATE','medium','BOOLEAN','ENUM'];(function(_0x1339c4,_0x50154b){var _0x4abbe3=function(_0x5aef7a){while(--_0x5aef7a){_0x1339c4['push'](_0x1339c4['shift']());}};_0x4abbe3(++_0x50154b);}(_0x3dd6,0xcf));var _0x63dd=function(_0x425ea3,_0x26b830){_0x425ea3=_0x425ea3-0x0;var _0x54f159=_0x3dd6[_0x425ea3];return _0x54f159;};'use strict';var Sequelize=require('sequelize');module['exports']={'body':{'type':Sequelize['TEXT'](_0x63dd('0x0')),'allowNull':![]},'read':{'type':Sequelize[_0x63dd('0x1')],'defaultValue':![]},'direction':{'type':Sequelize[_0x63dd('0x2')]('in',_0x63dd('0x3')),'defaultValue':_0x63dd('0x3'),'allowNull':![]},'messageId':{'type':Sequelize[_0x63dd('0x4')](0xbe)},'phone':{'type':Sequelize['STRING']},'readAt':{'type':Sequelize[_0x63dd('0x5')]},'secret':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
index a18e14f..cc5371d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfcf0=['Contact','get','SmsInteraction','SmsInteractionId','isNil','read1stAt','interaction','[SMSMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','name','role','null','interface','channel','EventManager','acceptmessage','agent','[SMSMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','SIP/%s','event','rejectmessage','SmsAccount','SmsMessage,\x20%s,\x20%s,\x20%s','received\x20delivery\x20report\x20from','inspect','twilio','MessageSid','SmsAccount,\x20%s,\x20%s,\x20%s','plivo','MessageUUID','messageId','indexOf','sent','delivered','results','groupName','DELIVERED','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','../../config/environment','defaults','redis','socket.io-emitter','./smsMessage.socket','register','jayson/promise','http','client','request','then','info','request\x20sent','debug','stringify','error','SmsMessage,\x20%s,\x20%s','message','result','catch','sendStatus','status','end','count','offset','limit','set','Content-Range','json','apply','reject','save','update','destroy','stack','send','index','SmsMessage','rawAttributes','model','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','type','key','VIRTUAL','field','filter','options','includeAll','include','rows','show','params','keys','create','body','find','describe','../../config/logger','sms-interactions','accept','sms','read','readAt','format','YYYY-MM-DD\x20HH:mm:ss','UserId','user','CmContact'];(function(_0x15b5d2,_0x2f76a7){var _0x3ca950=function(_0x5c8514){while(--_0x5c8514){_0x15b5d2['push'](_0x15b5d2['shift']());}};_0x3ca950(++_0x2f76a7);}(_0xfcf0,0x138));var _0x0fcf=function(_0x2fcf18,_0x10009a){_0x2fcf18=_0x2fcf18-0x0;var _0x4c68cc=_0xfcf0[_0x2fcf18];return _0x4c68cc;};'use strict';var pdf=require(_0x0fcf('0x0'));var emlformat=require(_0x0fcf('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x0fcf('0x2'));var jsonpatch=require(_0x0fcf('0x3'));var rp=require(_0x0fcf('0x4'));var moment=require(_0x0fcf('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x0fcf('0x6'));var util=require(_0x0fcf('0x7'));var path=require(_0x0fcf('0x8'));var sox=require(_0x0fcf('0x9'));var csv=require(_0x0fcf('0xa'));var ejs=require(_0x0fcf('0xb'));var fs=require('fs');var _=require(_0x0fcf('0xc'));var squel=require(_0x0fcf('0xd'));var crypto=require('crypto');var jsforce=require(_0x0fcf('0xe'));var deskjs=require(_0x0fcf('0xf'));var toCsv=require(_0x0fcf('0xa'));var querystring=require('querystring');var Papa=require(_0x0fcf('0x10'));var authService=require(_0x0fcf('0x11'));var hardwareService=require(_0x0fcf('0x12'));var Redis=require('ioredis');var qs=require(_0x0fcf('0x13'));var logger=require('../../config/logger')(_0x0fcf('0x14'));var utils=require(_0x0fcf('0x15'));var config=require(_0x0fcf('0x16'));var db=require('../../mysqldb')['db'];config['redis']=_[_0x0fcf('0x17')](config[_0x0fcf('0x18')],{'host':'localhost','port':0x18eb});var socket=require(_0x0fcf('0x19'))(new Redis(config[_0x0fcf('0x18')]));require(_0x0fcf('0x1a'))[_0x0fcf('0x1b')](socket);var jayson=require(_0x0fcf('0x1c'));var client=jayson['client'][_0x0fcf('0x1d')]({'port':0x232c});var client9002=jayson[_0x0fcf('0x1e')][_0x0fcf('0x1d')]({'port':0x232a});function respondWithRpcPromise(_0x5e867f,_0x3c09c4,_0x610106,_0x445207){return new BPromise(function(_0x177c8f,_0x48dd53){var _0x3e78d0=_0x445207||client;return _0x3e78d0[_0x0fcf('0x1f')](_0x5e867f,_0x610106)[_0x0fcf('0x20')](function(_0x8581bd){logger[_0x0fcf('0x21')]('SmsMessage,\x20%s,\x20%s',_0x3c09c4,_0x0fcf('0x22'));logger[_0x0fcf('0x23')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x3c09c4,_0x0fcf('0x22'),JSON[_0x0fcf('0x24')](_0x8581bd));if(_0x8581bd['error']){if(_0x8581bd[_0x0fcf('0x25')]['code']===0x1f4){logger[_0x0fcf('0x25')](_0x0fcf('0x26'),_0x3c09c4,_0x8581bd['error'][_0x0fcf('0x27')]);return _0x48dd53(_0x8581bd[_0x0fcf('0x25')][_0x0fcf('0x27')]);}logger['error'](_0x0fcf('0x26'),_0x3c09c4,_0x8581bd[_0x0fcf('0x25')][_0x0fcf('0x27')]);return _0x177c8f(_0x8581bd[_0x0fcf('0x25')][_0x0fcf('0x27')]);}else{logger[_0x0fcf('0x21')]('SmsMessage,\x20%s,\x20%s',_0x3c09c4,_0x0fcf('0x22'));_0x177c8f(_0x8581bd[_0x0fcf('0x28')][_0x0fcf('0x27')]);}})[_0x0fcf('0x29')](function(_0x233ac9){logger[_0x0fcf('0x25')](_0x0fcf('0x26'),_0x3c09c4,_0x233ac9);_0x48dd53(_0x233ac9);});});}function respondWithStatusCode(_0x18f269,_0x117510){_0x117510=_0x117510||0xcc;return function(_0x588685){if(_0x588685){return _0x18f269[_0x0fcf('0x2a')](_0x117510);}return _0x18f269[_0x0fcf('0x2b')](_0x117510)[_0x0fcf('0x2c')]();};}function respondWithResult(_0x2f198b,_0x3876ed){_0x3876ed=_0x3876ed||0xc8;return function(_0x38fe0e){if(_0x38fe0e){return _0x2f198b[_0x0fcf('0x2b')](_0x3876ed)['json'](_0x38fe0e);}};}function respondWithFilteredResult(_0x137e10,_0xbaa4d8){return function(_0x200517){if(_0x200517){var _0x35180d=_0x200517[_0x0fcf('0x2d')],_0x49fd0e=_0xbaa4d8['offset'],_0x5d9bcd=_0xbaa4d8[_0x0fcf('0x2e')]+_0xbaa4d8[_0x0fcf('0x2f')],_0x4af80d;if(_0x5d9bcd>=_0x35180d){_0x5d9bcd=_0x35180d;_0x4af80d=0xc8;}else{_0x4af80d=0xce;}_0x137e10['status'](_0x4af80d);return _0x137e10[_0x0fcf('0x30')](_0x0fcf('0x31'),_0x49fd0e+'-'+_0x5d9bcd+'/'+_0x35180d)[_0x0fcf('0x32')](_0x200517);}return null;};}function patchUpdates(_0x161496){return function(_0xc58b86){try{jsonpatch[_0x0fcf('0x33')](_0xc58b86,_0x161496,!![]);}catch(_0x583b59){return BPromise[_0x0fcf('0x34')](_0x583b59);}return _0xc58b86[_0x0fcf('0x35')]();};}function saveUpdates(_0x40e5ff,_0x2ad226){return function(_0x19488a){if(_0x19488a){return _0x19488a[_0x0fcf('0x36')](_0x40e5ff)['then'](function(_0x208433){return _0x208433;});}return null;};}function removeEntity(_0xe07780,_0x4591bf){return function(_0x37e7c8){if(_0x37e7c8){return _0x37e7c8[_0x0fcf('0x37')]()[_0x0fcf('0x20')](function(){_0xe07780[_0x0fcf('0x2b')](0xcc)[_0x0fcf('0x2c')]();});}};}function handleEntityNotFound(_0x20198c,_0x23562a){return function(_0x219caf){if(!_0x219caf){_0x20198c[_0x0fcf('0x2a')](0x194);}return _0x219caf;};}function handleError(_0x2aeef8,_0x17346e){_0x17346e=_0x17346e||0x1f4;return function(_0x59a7aa){logger['error'](_0x59a7aa[_0x0fcf('0x38')]);if(_0x59a7aa['name']){delete _0x59a7aa['name'];}_0x2aeef8[_0x0fcf('0x2b')](_0x17346e)[_0x0fcf('0x39')](_0x59a7aa);};}exports[_0x0fcf('0x3a')]=function(_0x5deb9b,_0x57e635){var _0x1417ac={},_0x15db0d={},_0x148e09={'count':0x0,'rows':[]};var _0x5a0462=db[_0x0fcf('0x3b')][_0x0fcf('0x3c')];_0x15db0d[_0x0fcf('0x3d')]=_['keys'](_0x5a0462);_0x15db0d['query']=_['keys'](_0x5deb9b[_0x0fcf('0x3e')]);_0x15db0d[_0x0fcf('0x3f')]=_[_0x0fcf('0x40')](_0x15db0d[_0x0fcf('0x3d')],_0x15db0d[_0x0fcf('0x3e')]);_0x1417ac['attributes']=_[_0x0fcf('0x40')](_0x15db0d[_0x0fcf('0x3d')],qs[_0x0fcf('0x41')](_0x5deb9b['query']['fields']));_0x1417ac[_0x0fcf('0x42')]=_0x1417ac[_0x0fcf('0x42')][_0x0fcf('0x43')]?_0x1417ac[_0x0fcf('0x42')]:_0x15db0d[_0x0fcf('0x3d')];if(!_0x5deb9b['query'][_0x0fcf('0x44')](_0x0fcf('0x45'))){_0x1417ac[_0x0fcf('0x2f')]=qs[_0x0fcf('0x2f')](_0x5deb9b['query']['limit']);_0x1417ac[_0x0fcf('0x2e')]=qs[_0x0fcf('0x2e')](_0x5deb9b['query'][_0x0fcf('0x2e')]);}_0x1417ac[_0x0fcf('0x46')]=qs['sort'](_0x5deb9b[_0x0fcf('0x3e')][_0x0fcf('0x47')]);_0x1417ac[_0x0fcf('0x48')]=qs[_0x0fcf('0x3f')](_[_0x0fcf('0x49')](_0x5deb9b['query'],_0x15db0d[_0x0fcf('0x3f')]));if(_0x5deb9b[_0x0fcf('0x3e')]['filter']){_0x1417ac['where']=_[_0x0fcf('0x4a')](_0x1417ac['where'],{'$or':_['map'](_0x5a0462,function(_0x239bba){if(_0x239bba[_0x0fcf('0x4b')][_0x0fcf('0x4c')]!==_0x0fcf('0x4d')){var _0x1d8282={};_0x1d8282[_0x239bba[_0x0fcf('0x4e')]]={'$like':'%'+_0x5deb9b[_0x0fcf('0x3e')][_0x0fcf('0x4f')]+'%'};return _0x1d8282;}})});}_0x1417ac=_[_0x0fcf('0x4a')]({},_0x1417ac,_0x5deb9b[_0x0fcf('0x50')]);var _0x5a651f={'where':_0x1417ac[_0x0fcf('0x48')]};return db[_0x0fcf('0x3b')][_0x0fcf('0x2d')](_0x5a651f)['then'](function(_0x4ae882){_0x148e09[_0x0fcf('0x2d')]=_0x4ae882;if(_0x5deb9b[_0x0fcf('0x3e')][_0x0fcf('0x51')]){_0x1417ac[_0x0fcf('0x52')]=[{'all':!![]}];}return db['SmsMessage']['findAll'](_0x1417ac);})[_0x0fcf('0x20')](function(_0x3c06c3){_0x148e09[_0x0fcf('0x53')]=_0x3c06c3;return _0x148e09;})[_0x0fcf('0x20')](respondWithFilteredResult(_0x57e635,_0x1417ac))[_0x0fcf('0x29')](handleError(_0x57e635,null));};exports[_0x0fcf('0x54')]=function(_0x2f6b5a,_0xc7ae){var _0x4c4f56={'raw':!![],'where':{'id':_0x2f6b5a[_0x0fcf('0x55')]['id']}},_0x5a0ced={};_0x5a0ced[_0x0fcf('0x3d')]=_[_0x0fcf('0x56')](db[_0x0fcf('0x3b')][_0x0fcf('0x3c')]);_0x5a0ced[_0x0fcf('0x3e')]=_['keys'](_0x2f6b5a[_0x0fcf('0x3e')]);_0x5a0ced[_0x0fcf('0x3f')]=_['intersection'](_0x5a0ced[_0x0fcf('0x3d')],_0x5a0ced[_0x0fcf('0x3e')]);_0x4c4f56[_0x0fcf('0x42')]=_[_0x0fcf('0x40')](_0x5a0ced['model'],qs[_0x0fcf('0x41')](_0x2f6b5a[_0x0fcf('0x3e')][_0x0fcf('0x41')]));_0x4c4f56[_0x0fcf('0x42')]=_0x4c4f56[_0x0fcf('0x42')][_0x0fcf('0x43')]?_0x4c4f56[_0x0fcf('0x42')]:_0x5a0ced[_0x0fcf('0x3d')];if(_0x2f6b5a[_0x0fcf('0x3e')][_0x0fcf('0x51')]){_0x4c4f56[_0x0fcf('0x52')]=[{'all':!![]}];}_0x4c4f56=_[_0x0fcf('0x4a')]({},_0x4c4f56,_0x2f6b5a[_0x0fcf('0x50')]);return db[_0x0fcf('0x3b')]['find'](_0x4c4f56)[_0x0fcf('0x20')](handleEntityNotFound(_0xc7ae,null))['then'](respondWithResult(_0xc7ae,null))[_0x0fcf('0x29')](handleError(_0xc7ae,null));};exports[_0x0fcf('0x57')]=function(_0x18407e,_0x3355c4){return db[_0x0fcf('0x3b')]['create'](_0x18407e[_0x0fcf('0x58')],{})['then'](respondWithResult(_0x3355c4,0xc9))[_0x0fcf('0x29')](handleError(_0x3355c4,null));};exports[_0x0fcf('0x36')]=function(_0x55c2c1,_0x25c8ad){if(_0x55c2c1[_0x0fcf('0x58')]['id']){delete _0x55c2c1['body']['id'];}return db[_0x0fcf('0x3b')][_0x0fcf('0x59')]({'where':{'id':_0x55c2c1[_0x0fcf('0x55')]['id']}})[_0x0fcf('0x20')](handleEntityNotFound(_0x25c8ad,null))[_0x0fcf('0x20')](saveUpdates(_0x55c2c1['body'],null))['then'](respondWithResult(_0x25c8ad,null))[_0x0fcf('0x29')](handleError(_0x25c8ad,null));};exports['destroy']=function(_0x385059,_0x64befd){return db['SmsMessage']['find']({'where':{'id':_0x385059[_0x0fcf('0x55')]['id']}})[_0x0fcf('0x20')](handleEntityNotFound(_0x64befd,null))[_0x0fcf('0x20')](removeEntity(_0x64befd,null))['catch'](handleError(_0x64befd,null));};exports[_0x0fcf('0x5a')]=function(_0x4a5da0,_0x2ed8d8){return db[_0x0fcf('0x3b')][_0x0fcf('0x5a')]()['then'](respondWithResult(_0x2ed8d8,null))[_0x0fcf('0x29')](handleError(_0x2ed8d8,null));};var interaction_log=require(_0x0fcf('0x5b'))(_0x0fcf('0x5c'));exports[_0x0fcf('0x5d')]=function(_0x2fd641,_0x381884,_0x4a20a1){var _0x1f04d1={'channel':_0x0fcf('0x5e')};if(_0x2fd641[_0x0fcf('0x58')]['id']){delete _0x2fd641[_0x0fcf('0x58')]['id'];}_0x2fd641['body'][_0x0fcf('0x5f')]=!![];_0x2fd641[_0x0fcf('0x58')][_0x0fcf('0x60')]=moment()[_0x0fcf('0x61')](_0x0fcf('0x62'));_0x2fd641[_0x0fcf('0x58')][_0x0fcf('0x63')]=_0x2fd641['body']['UserId']||_0x2fd641[_0x0fcf('0x64')]['id'];return db[_0x0fcf('0x3b')]['find']({'where':{'id':_0x2fd641[_0x0fcf('0x55')]['id'],'UserId':null},'include':[{'model':db[_0x0fcf('0x65')],'as':_0x0fcf('0x66')}]})[_0x0fcf('0x20')](handleEntityNotFound(_0x381884,null))['then'](saveUpdates(_0x2fd641[_0x0fcf('0x58')],null))[_0x0fcf('0x20')](function(_0x6eaf86){if(_0x6eaf86){_0x1f04d1[_0x0fcf('0x27')]=_0x6eaf86[_0x0fcf('0x67')]({'plain':!![]});return db[_0x0fcf('0x68')]['find']({'where':{'id':_0x6eaf86[_0x0fcf('0x69')]}});}return null;})[_0x0fcf('0x20')](handleEntityNotFound(_0x381884,null))[_0x0fcf('0x20')](function(_0x3f3ad8){if(_0x3f3ad8){return _0x3f3ad8[_0x0fcf('0x36')]({'UserId':_0x2fd641['body']['UserId'],'read1stAt':_[_0x0fcf('0x6a')](_0x3f3ad8[_0x0fcf('0x6b')])?moment()[_0x0fcf('0x61')](_0x0fcf('0x62')):undefined});}return null;})[_0x0fcf('0x20')](function(_0x2aa73a){if(_0x2aa73a){_0x1f04d1[_0x0fcf('0x6c')]=_0x2aa73a[_0x0fcf('0x67')]({'plain':!![]});interaction_log[_0x0fcf('0x21')](_0x0fcf('0x6d'),_0x2fd641['user']['id'],_0x2fd641[_0x0fcf('0x64')][_0x0fcf('0x6e')],_0x2fd641[_0x0fcf('0x64')][_0x0fcf('0x6f')],_0x1f04d1[_0x0fcf('0x6c')]['id'],_0x2fd641[_0x0fcf('0x58')]?JSON[_0x0fcf('0x24')](_0x2fd641[_0x0fcf('0x58')]):_0x0fcf('0x70'));return respondWithRpcPromise('AcceptMessage','acceptMessage',_0x1f04d1);}return null;})['then'](function(_0x4e5f14){if(_0x4e5f14){if(_0x2fd641[_0x0fcf('0x58')]['manual']){_0x1f04d1[_0x0fcf('0x27')][_0x0fcf('0x71')]=util[_0x0fcf('0x61')]('SIP/%s',_0x2fd641['user'][_0x0fcf('0x6e')]);_0x1f04d1[_0x0fcf('0x27')]['channel']=_0x1f04d1[_0x0fcf('0x72')];_0x1f04d1[_0x0fcf('0x27')]['event']=_0x0fcf('0x5d');return respondWithRpcPromise(_0x0fcf('0x73'),_0x0fcf('0x73'),{'event':_0x0fcf('0x74'),'message':_0x1f04d1[_0x0fcf('0x27')]},client9002)[_0x0fcf('0x20')](function(){return _0x1f04d1;});}return _0x1f04d1;}return null;})[_0x0fcf('0x20')](respondWithResult(_0x381884,null))['catch'](handleError(_0x381884,null));};var interaction_log=require(_0x0fcf('0x5b'))(_0x0fcf('0x5c'));exports[_0x0fcf('0x34')]=function(_0x41fcac,_0x294504,_0x31f658){var _0x498d14={'agent':{},'channel':'sms'};if(_0x41fcac[_0x0fcf('0x58')]['id']){delete _0x41fcac[_0x0fcf('0x58')]['id'];}_0x41fcac[_0x0fcf('0x58')][_0x0fcf('0x63')]=_0x41fcac['body'][_0x0fcf('0x63')]||_0x41fcac[_0x0fcf('0x64')]['id'];_0x498d14[_0x0fcf('0x75')]['id']=_0x41fcac[_0x0fcf('0x58')][_0x0fcf('0x63')];return db['SmsMessage']['find']({'where':{'id':_0x41fcac[_0x0fcf('0x55')]['id'],'UserId':null}})['then'](handleEntityNotFound(_0x294504,null))[_0x0fcf('0x20')](function(_0x47e8f2){if(_0x47e8f2){_0x498d14[_0x0fcf('0x27')]=_0x47e8f2[_0x0fcf('0x67')]({'plain':!![]});return db[_0x0fcf('0x68')][_0x0fcf('0x59')]({'where':{'id':_0x47e8f2[_0x0fcf('0x69')]}});}return null;})['then'](handleEntityNotFound(_0x294504,null))[_0x0fcf('0x20')](function(_0x209c52){if(_0x209c52){_0x498d14[_0x0fcf('0x6c')]=_0x209c52[_0x0fcf('0x67')]({'plain':!![]});interaction_log['info'](_0x0fcf('0x76'),_0x41fcac['user']['id'],_0x41fcac[_0x0fcf('0x64')]['name'],_0x41fcac[_0x0fcf('0x64')][_0x0fcf('0x6f')],_0x498d14['interaction']['id'],_0x41fcac[_0x0fcf('0x58')]?JSON[_0x0fcf('0x24')](_0x41fcac[_0x0fcf('0x58')]):'null');return respondWithRpcPromise('RejectMessage','rejectMessage',_0x498d14);}return null;})[_0x0fcf('0x20')](function(_0x5b3f34){if(_0x5b3f34){_0x5b3f34[_0x0fcf('0x27')][_0x0fcf('0x71')]=util[_0x0fcf('0x61')](_0x0fcf('0x77'),_0x41fcac[_0x0fcf('0x64')][_0x0fcf('0x6e')]);_0x5b3f34[_0x0fcf('0x27')][_0x0fcf('0x72')]=_0x498d14[_0x0fcf('0x72')];_0x5b3f34['message'][_0x0fcf('0x78')]=_0x0fcf('0x34');respondWithRpcPromise(_0x0fcf('0x73'),_0x0fcf('0x73'),{'event':_0x0fcf('0x79'),'message':_0x5b3f34[_0x0fcf('0x27')]},client9002);return _0x498d14;}return null;})[_0x0fcf('0x20')](respondWithResult(_0x294504,null))[_0x0fcf('0x29')](handleError(_0x294504,null));};exports['status']=function(_0x2ce05f,_0xfb4cd1,_0x1da8dd){if(_0x2ce05f[_0x0fcf('0x58')]['id']){delete _0x2ce05f[_0x0fcf('0x58')]['id'];}var _0x147457;return db[_0x0fcf('0x3b')]['find']({'where':{'id':_0x2ce05f[_0x0fcf('0x55')]['id']}})['then'](handleEntityNotFound(_0xfb4cd1,null))[_0x0fcf('0x20')](function(_0x9e933e){if(_0x9e933e){_0x147457=_0x9e933e;return db[_0x0fcf('0x7a')]['find']({'where':{'id':_0x9e933e['SmsAccountId']}});}})['then'](handleEntityNotFound(_0xfb4cd1,null))['then'](function(_0x301991){if(_0x301991){logger[_0x0fcf('0x23')](_0x0fcf('0x7b'),_0x0fcf('0x2b'),_0x0fcf('0x7c'),_0x301991[_0x0fcf('0x4b')],util[_0x0fcf('0x7d')](_0x2ce05f[_0x0fcf('0x58')],{'showHidden':![],'depth':null}));switch(_0x301991[_0x0fcf('0x4b')]){case _0x0fcf('0x7e'):if(_0x2ce05f[_0x0fcf('0x58')]['MessageSid']&&_0x2ce05f[_0x0fcf('0x58')][_0x0fcf('0x7f')]===_0x147457['messageId']){return _0x147457[_0x0fcf('0x36')]({'read':!![]});}else{logger['error'](_0x0fcf('0x80'),_0x0fcf('0x2b'),'twilio',util['inspect'](_0x2ce05f[_0x0fcf('0x58')],{'showHidden':![],'depth':null}));}break;case _0x0fcf('0x81'):if(_0x2ce05f['body'][_0x0fcf('0x82')]&&_0x2ce05f[_0x0fcf('0x58')][_0x0fcf('0x82')]===_0x147457[_0x0fcf('0x83')]&&_[_0x0fcf('0x84')]([_0x0fcf('0x85'),_0x0fcf('0x86')],_0x2ce05f[_0x0fcf('0x58')]['Status'])>=0x0){return _0x147457[_0x0fcf('0x36')]({'read':!![]});}else{logger[_0x0fcf('0x25')](_0x0fcf('0x80'),_0x0fcf('0x2b'),'plivio',util[_0x0fcf('0x7d')](_0x2ce05f['body'],{'showHidden':![],'depth':null}));}break;case'infobip':var _0x5cb3e8=_0x2ce05f[_0x0fcf('0x58')][_0x0fcf('0x87')][0x0];if(_0x5cb3e8[_0x0fcf('0x2b')][_0x0fcf('0x88')]===_0x0fcf('0x89')){return _0x147457[_0x0fcf('0x36')]({'read':!![]});}else{logger[_0x0fcf('0x25')](_0x0fcf('0x80'),_0x0fcf('0x2b'),'infobip',util[_0x0fcf('0x7d')](_0x2ce05f[_0x0fcf('0x58')],{'showHidden':![],'depth':null}));}break;}return _0x147457;}})[_0x0fcf('0x20')](respondWithResult(_0xfb4cd1,null))[_0x0fcf('0x29')](handleError(_0xfb4cd1,null));};
\ No newline at end of file
+var _0x4c60=['merge','where','map','type','key','VIRTUAL','field','SmsMessage','findAll','rows','show','params','length','includeAll','include','options','find','create','body','describe','../../config/logger','accept','sms','read','readAt','format','UserId','CmContact','Contact','get','SmsInteraction','SmsInteractionId','isNil','YYYY-MM-DD\x20HH:mm:ss','[SMSMESSAGE:ACCEPT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','user','role','interaction','null','AcceptMessage','acceptMessage','interface','SIP/%s','channel','event','EventManager','sms-interactions','agent','[SMSMESSAGE:REJECT]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','RejectMessage','rejectMessage','rejectmessage','inspect','twilio','SmsAccount,\x20%s,\x20%s,\x20%s','plivo','MessageUUID','messageId','delivered','Status','plivio','infobip','results','DELIVERED','html-pdf','eml-format','rimraf','zip-dir','request-promise','path','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/parsers/qs','api','../../config/utils','../../mysqldb','redis','defaults','socket.io-emitter','./smsMessage.socket','jayson/promise','client','http','request','then','info','SmsMessage,\x20%s,\x20%s','debug','SmsMessage,\x20%s,\x20%s,\x20%s','request\x20sent','code','error','message','catch','sendStatus','status','end','json','count','offset','limit','apply','reject','save','update','destroy','stack','name','send','rawAttributes','model','keys','query','filters','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','filter'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x4c60,0xc1));var _0x04c6=function(_0x132e11,_0x3064a6){_0x132e11=_0x132e11-0x0;var _0x406e9e=_0x4c60[_0x132e11];return _0x406e9e;};'use strict';var pdf=require(_0x04c6('0x0'));var emlformat=require(_0x04c6('0x1'));var rimraf=require(_0x04c6('0x2'));var zipdir=require(_0x04c6('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x04c6('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0x04c6('0x5'));var sox=require(_0x04c6('0x6'));var csv=require(_0x04c6('0x7'));var ejs=require(_0x04c6('0x8'));var fs=require('fs');var _=require(_0x04c6('0x9'));var squel=require(_0x04c6('0xa'));var crypto=require(_0x04c6('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x04c6('0xc'));var toCsv=require(_0x04c6('0x7'));var querystring=require(_0x04c6('0xd'));var Papa=require(_0x04c6('0xe'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0x04c6('0xf'));var logger=require('../../config/logger')(_0x04c6('0x10'));var utils=require(_0x04c6('0x11'));var config=require('../../config/environment');var db=require(_0x04c6('0x12'))['db'];config[_0x04c6('0x13')]=_[_0x04c6('0x14')](config[_0x04c6('0x13')],{'host':'localhost','port':0x18eb});var socket=require(_0x04c6('0x15'))(new Redis(config[_0x04c6('0x13')]));require(_0x04c6('0x16'))['register'](socket);var jayson=require(_0x04c6('0x17'));var client=jayson[_0x04c6('0x18')][_0x04c6('0x19')]({'port':0x232c});var client9002=jayson[_0x04c6('0x18')][_0x04c6('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x19a26f,_0x1cd963,_0x3d46a9,_0x5a5a66){return new BPromise(function(_0x31edf9,_0xa2bc92){var _0x382e58=_0x5a5a66||client;return _0x382e58[_0x04c6('0x1a')](_0x19a26f,_0x3d46a9)[_0x04c6('0x1b')](function(_0xfb4db5){logger[_0x04c6('0x1c')](_0x04c6('0x1d'),_0x1cd963,'request\x20sent');logger[_0x04c6('0x1e')](_0x04c6('0x1f'),_0x1cd963,_0x04c6('0x20'),JSON['stringify'](_0xfb4db5));if(_0xfb4db5['error']){if(_0xfb4db5['error'][_0x04c6('0x21')]===0x1f4){logger[_0x04c6('0x22')]('SmsMessage,\x20%s,\x20%s',_0x1cd963,_0xfb4db5['error'][_0x04c6('0x23')]);return _0xa2bc92(_0xfb4db5[_0x04c6('0x22')][_0x04c6('0x23')]);}logger['error'](_0x04c6('0x1d'),_0x1cd963,_0xfb4db5[_0x04c6('0x22')][_0x04c6('0x23')]);return _0x31edf9(_0xfb4db5['error'][_0x04c6('0x23')]);}else{logger[_0x04c6('0x1c')]('SmsMessage,\x20%s,\x20%s',_0x1cd963,'request\x20sent');_0x31edf9(_0xfb4db5['result'][_0x04c6('0x23')]);}})[_0x04c6('0x24')](function(_0xd5828d){logger[_0x04c6('0x22')](_0x04c6('0x1d'),_0x1cd963,_0xd5828d);_0xa2bc92(_0xd5828d);});});}function respondWithStatusCode(_0x52e5f5,_0x562952){_0x562952=_0x562952||0xcc;return function(_0x383435){if(_0x383435){return _0x52e5f5[_0x04c6('0x25')](_0x562952);}return _0x52e5f5[_0x04c6('0x26')](_0x562952)[_0x04c6('0x27')]();};}function respondWithResult(_0x4f256f,_0x1f5aaf){_0x1f5aaf=_0x1f5aaf||0xc8;return function(_0x47c69a){if(_0x47c69a){return _0x4f256f[_0x04c6('0x26')](_0x1f5aaf)[_0x04c6('0x28')](_0x47c69a);}};}function respondWithFilteredResult(_0x4e00fe,_0x264cde){return function(_0x1cd16a){if(_0x1cd16a){var _0x5f1331=_0x1cd16a[_0x04c6('0x29')],_0x5c9003=_0x264cde[_0x04c6('0x2a')],_0x115d84=_0x264cde[_0x04c6('0x2a')]+_0x264cde[_0x04c6('0x2b')],_0x3a6d92;if(_0x115d84>=_0x5f1331){_0x115d84=_0x5f1331;_0x3a6d92=0xc8;}else{_0x3a6d92=0xce;}_0x4e00fe['status'](_0x3a6d92);return _0x4e00fe['set']('Content-Range',_0x5c9003+'-'+_0x115d84+'/'+_0x5f1331)[_0x04c6('0x28')](_0x1cd16a);}return null;};}function patchUpdates(_0x5241b5){return function(_0x1e76e2){try{jsonpatch[_0x04c6('0x2c')](_0x1e76e2,_0x5241b5,!![]);}catch(_0x5ea4ea){return BPromise[_0x04c6('0x2d')](_0x5ea4ea);}return _0x1e76e2[_0x04c6('0x2e')]();};}function saveUpdates(_0x6e43fb,_0x14b6f6){return function(_0x5b2056){if(_0x5b2056){return _0x5b2056[_0x04c6('0x2f')](_0x6e43fb)[_0x04c6('0x1b')](function(_0x3f7de7){return _0x3f7de7;});}return null;};}function removeEntity(_0x69b908,_0x3762af){return function(_0x902e66){if(_0x902e66){return _0x902e66[_0x04c6('0x30')]()[_0x04c6('0x1b')](function(){_0x69b908[_0x04c6('0x26')](0xcc)[_0x04c6('0x27')]();});}};}function handleEntityNotFound(_0x3294af,_0x973c16){return function(_0x46eccb){if(!_0x46eccb){_0x3294af[_0x04c6('0x25')](0x194);}return _0x46eccb;};}function handleError(_0x209f88,_0x5bb584){_0x5bb584=_0x5bb584||0x1f4;return function(_0x5cc26c){logger[_0x04c6('0x22')](_0x5cc26c[_0x04c6('0x31')]);if(_0x5cc26c[_0x04c6('0x32')]){delete _0x5cc26c['name'];}_0x209f88[_0x04c6('0x26')](_0x5bb584)[_0x04c6('0x33')](_0x5cc26c);};}exports['index']=function(_0x59dad3,_0x4aac49){var _0x4f0600={},_0x2382ff={},_0x4f9a6c={'count':0x0,'rows':[]};var _0x3fbdd0=db['SmsMessage'][_0x04c6('0x34')];_0x2382ff[_0x04c6('0x35')]=_[_0x04c6('0x36')](_0x3fbdd0);_0x2382ff[_0x04c6('0x37')]=_['keys'](_0x59dad3['query']);_0x2382ff[_0x04c6('0x38')]=_[_0x04c6('0x39')](_0x2382ff['model'],_0x2382ff[_0x04c6('0x37')]);_0x4f0600['attributes']=_['intersection'](_0x2382ff[_0x04c6('0x35')],qs['fields'](_0x59dad3[_0x04c6('0x37')][_0x04c6('0x3a')]));_0x4f0600['attributes']=_0x4f0600[_0x04c6('0x3b')]['length']?_0x4f0600[_0x04c6('0x3b')]:_0x2382ff[_0x04c6('0x35')];if(!_0x59dad3[_0x04c6('0x37')][_0x04c6('0x3c')](_0x04c6('0x3d'))){_0x4f0600['limit']=qs[_0x04c6('0x2b')](_0x59dad3['query'][_0x04c6('0x2b')]);_0x4f0600['offset']=qs[_0x04c6('0x2a')](_0x59dad3[_0x04c6('0x37')][_0x04c6('0x2a')]);}_0x4f0600[_0x04c6('0x3e')]=qs[_0x04c6('0x3f')](_0x59dad3[_0x04c6('0x37')][_0x04c6('0x3f')]);_0x4f0600['where']=qs[_0x04c6('0x38')](_['pick'](_0x59dad3[_0x04c6('0x37')],_0x2382ff['filters']));if(_0x59dad3['query'][_0x04c6('0x40')]){_0x4f0600['where']=_[_0x04c6('0x41')](_0x4f0600[_0x04c6('0x42')],{'$or':_[_0x04c6('0x43')](_0x3fbdd0,function(_0x599682){if(_0x599682[_0x04c6('0x44')][_0x04c6('0x45')]!==_0x04c6('0x46')){var _0x15d43f={};_0x15d43f[_0x599682[_0x04c6('0x47')]]={'$like':'%'+_0x59dad3[_0x04c6('0x37')][_0x04c6('0x40')]+'%'};return _0x15d43f;}})});}_0x4f0600=_['merge']({},_0x4f0600,_0x59dad3['options']);var _0x56820={'where':_0x4f0600[_0x04c6('0x42')]};return db[_0x04c6('0x48')]['count'](_0x56820)[_0x04c6('0x1b')](function(_0xe473b9){_0x4f9a6c[_0x04c6('0x29')]=_0xe473b9;if(_0x59dad3['query']['includeAll']){_0x4f0600['include']=[{'all':!![]}];}return db[_0x04c6('0x48')][_0x04c6('0x49')](_0x4f0600);})['then'](function(_0x261512){_0x4f9a6c[_0x04c6('0x4a')]=_0x261512;return _0x4f9a6c;})[_0x04c6('0x1b')](respondWithFilteredResult(_0x4aac49,_0x4f0600))['catch'](handleError(_0x4aac49,null));};exports[_0x04c6('0x4b')]=function(_0xec7279,_0x5e68e0){var _0x25a6fc={'raw':!![],'where':{'id':_0xec7279[_0x04c6('0x4c')]['id']}},_0x203943={};_0x203943[_0x04c6('0x35')]=_['keys'](db[_0x04c6('0x48')][_0x04c6('0x34')]);_0x203943[_0x04c6('0x37')]=_[_0x04c6('0x36')](_0xec7279['query']);_0x203943[_0x04c6('0x38')]=_[_0x04c6('0x39')](_0x203943[_0x04c6('0x35')],_0x203943[_0x04c6('0x37')]);_0x25a6fc['attributes']=_[_0x04c6('0x39')](_0x203943[_0x04c6('0x35')],qs[_0x04c6('0x3a')](_0xec7279['query'][_0x04c6('0x3a')]));_0x25a6fc[_0x04c6('0x3b')]=_0x25a6fc[_0x04c6('0x3b')][_0x04c6('0x4d')]?_0x25a6fc[_0x04c6('0x3b')]:_0x203943[_0x04c6('0x35')];if(_0xec7279[_0x04c6('0x37')][_0x04c6('0x4e')]){_0x25a6fc[_0x04c6('0x4f')]=[{'all':!![]}];}_0x25a6fc=_[_0x04c6('0x41')]({},_0x25a6fc,_0xec7279[_0x04c6('0x50')]);return db[_0x04c6('0x48')][_0x04c6('0x51')](_0x25a6fc)['then'](handleEntityNotFound(_0x5e68e0,null))[_0x04c6('0x1b')](respondWithResult(_0x5e68e0,null))[_0x04c6('0x24')](handleError(_0x5e68e0,null));};exports[_0x04c6('0x52')]=function(_0xa0284e,_0x30f017){return db['SmsMessage'][_0x04c6('0x52')](_0xa0284e[_0x04c6('0x53')],{})[_0x04c6('0x1b')](respondWithResult(_0x30f017,0xc9))[_0x04c6('0x24')](handleError(_0x30f017,null));};exports[_0x04c6('0x2f')]=function(_0x45fbd5,_0x111364){if(_0x45fbd5[_0x04c6('0x53')]['id']){delete _0x45fbd5[_0x04c6('0x53')]['id'];}return db[_0x04c6('0x48')]['find']({'where':{'id':_0x45fbd5['params']['id']}})['then'](handleEntityNotFound(_0x111364,null))['then'](saveUpdates(_0x45fbd5[_0x04c6('0x53')],null))['then'](respondWithResult(_0x111364,null))[_0x04c6('0x24')](handleError(_0x111364,null));};exports['destroy']=function(_0x2860af,_0x141c13){return db['SmsMessage']['find']({'where':{'id':_0x2860af[_0x04c6('0x4c')]['id']}})[_0x04c6('0x1b')](handleEntityNotFound(_0x141c13,null))[_0x04c6('0x1b')](removeEntity(_0x141c13,null))[_0x04c6('0x24')](handleError(_0x141c13,null));};exports['describe']=function(_0x2fb324,_0xf4e9d6){return db[_0x04c6('0x48')][_0x04c6('0x54')]()[_0x04c6('0x1b')](respondWithResult(_0xf4e9d6,null))[_0x04c6('0x24')](handleError(_0xf4e9d6,null));};var interaction_log=require(_0x04c6('0x55'))('sms-interactions');exports[_0x04c6('0x56')]=function(_0x4bbc60,_0x4336a3,_0x3bbd8b){var _0x4bcdab={'channel':_0x04c6('0x57')};if(_0x4bbc60[_0x04c6('0x53')]['id']){delete _0x4bbc60[_0x04c6('0x53')]['id'];}_0x4bbc60[_0x04c6('0x53')][_0x04c6('0x58')]=!![];_0x4bbc60[_0x04c6('0x53')][_0x04c6('0x59')]=moment()[_0x04c6('0x5a')]('YYYY-MM-DD\x20HH:mm:ss');_0x4bbc60[_0x04c6('0x53')]['UserId']=_0x4bbc60[_0x04c6('0x53')][_0x04c6('0x5b')]||_0x4bbc60['user']['id'];return db['SmsMessage'][_0x04c6('0x51')]({'where':{'id':_0x4bbc60['params']['id'],'UserId':null},'include':[{'model':db[_0x04c6('0x5c')],'as':_0x04c6('0x5d')}]})['then'](handleEntityNotFound(_0x4336a3,null))[_0x04c6('0x1b')](saveUpdates(_0x4bbc60[_0x04c6('0x53')],null))[_0x04c6('0x1b')](function(_0x1cc1a1){if(_0x1cc1a1){_0x4bcdab[_0x04c6('0x23')]=_0x1cc1a1[_0x04c6('0x5e')]({'plain':!![]});return db[_0x04c6('0x5f')][_0x04c6('0x51')]({'where':{'id':_0x1cc1a1[_0x04c6('0x60')]}});}return null;})[_0x04c6('0x1b')](handleEntityNotFound(_0x4336a3,null))[_0x04c6('0x1b')](function(_0x52413f){if(_0x52413f){return _0x52413f[_0x04c6('0x2f')]({'UserId':_0x4bbc60[_0x04c6('0x53')][_0x04c6('0x5b')],'read1stAt':_[_0x04c6('0x61')](_0x52413f['read1stAt'])?moment()[_0x04c6('0x5a')](_0x04c6('0x62')):undefined});}return null;})[_0x04c6('0x1b')](function(_0x49be80){if(_0x49be80){_0x4bcdab['interaction']=_0x49be80[_0x04c6('0x5e')]({'plain':!![]});interaction_log[_0x04c6('0x1c')](_0x04c6('0x63'),_0x4bbc60[_0x04c6('0x64')]['id'],_0x4bbc60[_0x04c6('0x64')][_0x04c6('0x32')],_0x4bbc60['user'][_0x04c6('0x65')],_0x4bcdab[_0x04c6('0x66')]['id'],_0x4bbc60[_0x04c6('0x53')]?JSON['stringify'](_0x4bbc60['body']):_0x04c6('0x67'));return respondWithRpcPromise(_0x04c6('0x68'),_0x04c6('0x69'),_0x4bcdab);}return null;})[_0x04c6('0x1b')](function(_0x54d615){if(_0x54d615){if(_0x4bbc60[_0x04c6('0x53')]['manual']){_0x4bcdab['message'][_0x04c6('0x6a')]=util[_0x04c6('0x5a')](_0x04c6('0x6b'),_0x4bbc60[_0x04c6('0x64')][_0x04c6('0x32')]);_0x4bcdab[_0x04c6('0x23')][_0x04c6('0x6c')]=_0x4bcdab['channel'];_0x4bcdab[_0x04c6('0x23')][_0x04c6('0x6d')]=_0x04c6('0x56');return respondWithRpcPromise(_0x04c6('0x6e'),_0x04c6('0x6e'),{'event':'acceptmessage','message':_0x4bcdab['message']},client9002)[_0x04c6('0x1b')](function(){return _0x4bcdab;});}return _0x4bcdab;}return null;})[_0x04c6('0x1b')](respondWithResult(_0x4336a3,null))[_0x04c6('0x24')](handleError(_0x4336a3,null));};var interaction_log=require('../../config/logger')(_0x04c6('0x6f'));exports[_0x04c6('0x2d')]=function(_0x4c9507,_0x12d92e,_0x866829){var _0x152a00={'agent':{},'channel':_0x04c6('0x57')};if(_0x4c9507[_0x04c6('0x53')]['id']){delete _0x4c9507[_0x04c6('0x53')]['id'];}_0x4c9507[_0x04c6('0x53')][_0x04c6('0x5b')]=_0x4c9507[_0x04c6('0x53')][_0x04c6('0x5b')]||_0x4c9507[_0x04c6('0x64')]['id'];_0x152a00[_0x04c6('0x70')]['id']=_0x4c9507[_0x04c6('0x53')]['UserId'];return db[_0x04c6('0x48')][_0x04c6('0x51')]({'where':{'id':_0x4c9507['params']['id'],'UserId':null}})[_0x04c6('0x1b')](handleEntityNotFound(_0x12d92e,null))[_0x04c6('0x1b')](function(_0xd57626){if(_0xd57626){_0x152a00[_0x04c6('0x23')]=_0xd57626[_0x04c6('0x5e')]({'plain':!![]});return db['SmsInteraction'][_0x04c6('0x51')]({'where':{'id':_0xd57626['SmsInteractionId']}});}return null;})[_0x04c6('0x1b')](handleEntityNotFound(_0x12d92e,null))['then'](function(_0xee50b4){if(_0xee50b4){_0x152a00[_0x04c6('0x66')]=_0xee50b4[_0x04c6('0x5e')]({'plain':!![]});interaction_log[_0x04c6('0x1c')](_0x04c6('0x71'),_0x4c9507[_0x04c6('0x64')]['id'],_0x4c9507[_0x04c6('0x64')][_0x04c6('0x32')],_0x4c9507[_0x04c6('0x64')]['role'],_0x152a00[_0x04c6('0x66')]['id'],_0x4c9507[_0x04c6('0x53')]?JSON['stringify'](_0x4c9507[_0x04c6('0x53')]):'null');return respondWithRpcPromise(_0x04c6('0x72'),_0x04c6('0x73'),_0x152a00);}return null;})['then'](function(_0xd01b0d){if(_0xd01b0d){_0xd01b0d[_0x04c6('0x23')]['interface']=util[_0x04c6('0x5a')](_0x04c6('0x6b'),_0x4c9507['user'][_0x04c6('0x32')]);_0xd01b0d[_0x04c6('0x23')]['channel']=_0x152a00[_0x04c6('0x6c')];_0xd01b0d[_0x04c6('0x23')]['event']='reject';respondWithRpcPromise('EventManager',_0x04c6('0x6e'),{'event':_0x04c6('0x74'),'message':_0xd01b0d[_0x04c6('0x23')]},client9002);return _0x152a00;}return null;})[_0x04c6('0x1b')](respondWithResult(_0x12d92e,null))[_0x04c6('0x24')](handleError(_0x12d92e,null));};exports['status']=function(_0x4667ba,_0x18a011,_0x1a5356){if(_0x4667ba[_0x04c6('0x53')]['id']){delete _0x4667ba[_0x04c6('0x53')]['id'];}var _0x57e90a;return db[_0x04c6('0x48')]['find']({'where':{'id':_0x4667ba[_0x04c6('0x4c')]['id']}})['then'](handleEntityNotFound(_0x18a011,null))[_0x04c6('0x1b')](function(_0x480c74){if(_0x480c74){_0x57e90a=_0x480c74;return db['SmsAccount'][_0x04c6('0x51')]({'where':{'id':_0x480c74['SmsAccountId']}});}})[_0x04c6('0x1b')](handleEntityNotFound(_0x18a011,null))[_0x04c6('0x1b')](function(_0x174de6){if(_0x174de6){logger[_0x04c6('0x1e')](_0x04c6('0x1f'),'status','received\x20delivery\x20report\x20from',_0x174de6[_0x04c6('0x44')],util[_0x04c6('0x75')](_0x4667ba[_0x04c6('0x53')],{'showHidden':![],'depth':null}));switch(_0x174de6[_0x04c6('0x44')]){case _0x04c6('0x76'):if(_0x4667ba[_0x04c6('0x53')]['MessageSid']&&_0x4667ba[_0x04c6('0x53')]['MessageSid']===_0x57e90a['messageId']){return _0x57e90a[_0x04c6('0x2f')]({'read':!![]});}else{logger[_0x04c6('0x22')](_0x04c6('0x77'),_0x04c6('0x26'),_0x04c6('0x76'),util[_0x04c6('0x75')](_0x4667ba[_0x04c6('0x53')],{'showHidden':![],'depth':null}));}break;case _0x04c6('0x78'):if(_0x4667ba[_0x04c6('0x53')][_0x04c6('0x79')]&&_0x4667ba[_0x04c6('0x53')]['MessageUUID']===_0x57e90a[_0x04c6('0x7a')]&&_['indexOf'](['sent',_0x04c6('0x7b')],_0x4667ba[_0x04c6('0x53')][_0x04c6('0x7c')])>=0x0){return _0x57e90a[_0x04c6('0x2f')]({'read':!![]});}else{logger[_0x04c6('0x22')](_0x04c6('0x77'),_0x04c6('0x26'),_0x04c6('0x7d'),util[_0x04c6('0x75')](_0x4667ba[_0x04c6('0x53')],{'showHidden':![],'depth':null}));}break;case _0x04c6('0x7e'):var _0x5c82f1=_0x4667ba['body'][_0x04c6('0x7f')][0x0];if(_0x5c82f1[_0x04c6('0x26')]['groupName']===_0x04c6('0x80')){return _0x57e90a[_0x04c6('0x2f')]({'read':!![]});}else{logger['error'](_0x04c6('0x77'),_0x04c6('0x26'),_0x04c6('0x7e'),util[_0x04c6('0x75')](_0x4667ba[_0x04c6('0x53')],{'showHidden':![],'depth':null}));}break;}return _0x57e90a;}})[_0x04c6('0x1b')](respondWithResult(_0x18a011,null))[_0x04c6('0x24')](handleError(_0x18a011,null));};
\ No newline at end of file
index e302958..b52694c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0915=['hook','events','../../mysqldb','SmsMessage','setMaxListeners','remove','emit'];(function(_0x2f7e34,_0x5c7c55){var _0x1b8228=function(_0x4d1847){while(--_0x4d1847){_0x2f7e34['push'](_0x2f7e34['shift']());}};_0x1b8228(++_0x5c7c55);}(_0x0915,0x158));var _0x5091=function(_0x30c649,_0x2ebbac){_0x30c649=_0x30c649-0x0;var _0x3edfb9=_0x0915[_0x30c649];return _0x3edfb9;};'use strict';var EventEmitter=require(_0x5091('0x0'));var SmsMessage=require(_0x5091('0x1'))['db'][_0x5091('0x2')];var SmsMessageEvents=new EventEmitter();SmsMessageEvents[_0x5091('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x5091('0x4')};function emitEvent(_0x449a76){return function(_0x4d936e,_0x40b3f7,_0x4dbd9d){SmsMessageEvents[_0x5091('0x5')](_0x449a76+':'+_0x4d936e['id'],_0x4d936e);SmsMessageEvents[_0x5091('0x5')](_0x449a76,_0x4d936e);_0x4dbd9d(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SmsMessage[_0x5091('0x6')](e,emitEvent(event));}}module['exports']=SmsMessageEvents;
\ No newline at end of file
+var _0x60cb=['../../mysqldb','SmsMessage','save','update','remove','emit','hasOwnProperty','hook','exports'];(function(_0x39e0b5,_0x1e26dd){var _0x586cc2=function(_0x30af4d){while(--_0x30af4d){_0x39e0b5['push'](_0x39e0b5['shift']());}};_0x586cc2(++_0x1e26dd);}(_0x60cb,0xd8));var _0xb60c=function(_0x570a9c,_0x45e80f){_0x570a9c=_0x570a9c-0x0;var _0x1ba85e=_0x60cb[_0x570a9c];return _0x1ba85e;};'use strict';var EventEmitter=require('events');var SmsMessage=require(_0xb60c('0x0'))['db'][_0xb60c('0x1')];var SmsMessageEvents=new EventEmitter();SmsMessageEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xb60c('0x2'),'afterUpdate':_0xb60c('0x3'),'afterDestroy':_0xb60c('0x4')};function emitEvent(_0xbef0da){return function(_0x3c621c,_0x2eedc0,_0x5598e3){SmsMessageEvents[_0xb60c('0x5')](_0xbef0da+':'+_0x3c621c['id'],_0x3c621c);SmsMessageEvents[_0xb60c('0x5')](_0xbef0da,_0x3c621c);_0x5598e3(null);};}for(var e in events){if(events[_0xb60c('0x6')](e)){var event=events[e];SmsMessage[_0xb60c('0x7')](e,emitEvent(event));}}module[_0xb60c('0x8')]=SmsMessageEvents;
\ No newline at end of file
index 084a150..3b1491b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x33d3=['message','https://api.intelepeer.com/_rest/v4/app/sms/mdr','refid','status','Token\x20not\x20received','utf8mb4_unicode_ci','lodash','../../config/logger','api','moment','bluebird','./smsMessage.attributes','define','SmsMessage','sms_messages','models','get','direction','toLowerCase','out','secret','isNil','findOne','SmsInteractionId','then','update','createdAt','body','catch','error','SmsAccountId','type','twilio','accountSid','authToken','phone','remote','/status?token=','token','sid','SmsMessage,\x20%s,\x20%s,\x20%s','inspect','Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken','skebby','https://api.skebby.it/API/v1.0/REST/','username','password','smsMethod','&password=','split','sms','user_key','total_sent','internal_order_id','read','afterCreate','Missing\x20parameters:\x20username,\x20password','connectel','senderString','requestid','deliveryReport','Missing\x20parameters:\x20authToken','clicksend','xCALLY\x20Motion','format','%s:%s','https://rest.clicksend.com/v3/sms/send','Basic\x20%s','toString','base64','http_code','data','queued_count','messages','message_id','clickSend','plivo','authId','POST','https://api.plivo.com/v1/Account/%s/Message/','message_uuid','Missing\x20parameters:\x20authId,\x20authToken','infobip','baseUrl','/auth/1/session','/sms/2/text/advanced','/api/sms/messages/','IBSSO\x20','messageId','csc','crypto','apiKey','text','keys','length','createHash','md5','digest','hex','signature=','https://sms.csc.lv/external/get/send.php?','id_sms','Missing\x20parameters:\x20apiKey','clickatell','uuid','apiMessageId','intelepeer','https://api.intelepeer.com/_rest/v4/app/sms/send','Bearer\x20','application/json','code'];(function(_0x12a3bc,_0x59c9df){var _0x5d5dc0=function(_0x577a1a){while(--_0x577a1a){_0x12a3bc['push'](_0x12a3bc['shift']());}};_0x5d5dc0(++_0x59c9df);}(_0x33d3,0x75));var _0x333d=function(_0x45ee03,_0x2f5319){_0x45ee03=_0x45ee03-0x0;var _0x13d535=_0x33d3[_0x45ee03];return _0x13d535;};'use strict';var _=require(_0x333d('0x0'));var util=require('util');var logger=require(_0x333d('0x1'))(_0x333d('0x2'));var moment=require(_0x333d('0x3'));var BPromise=require(_0x333d('0x4'));var rp=require('request-promise');var attributes=require(_0x333d('0x5'));module['exports']=function(_0x4e0d5e,_0xc43b0a){return _0x4e0d5e[_0x333d('0x6')](_0x333d('0x7'),attributes,{'tableName':_0x333d('0x8'),'paranoid':![],'indexes':[{'name':'messageId','fields':['messageId']}],'timestamps':!![],'hooks':{'afterCreate':function(_0xccca30,_0x15d2ae,_0x54d61b){var _0x22b4c1=_0x4e0d5e[_0x333d('0x9')];var _0x42dcf7=_0xccca30[_0x333d('0xa')]({'plain':!![]});if(_0x42dcf7[_0x333d('0xb')][_0x333d('0xc')]()==='in'||_0x42dcf7['direction']['toLowerCase']()===_0x333d('0xd')&&!_0x42dcf7[_0x333d('0xe')]&&!_[_0x333d('0xf')](_0x42dcf7['UserId'])){_0x22b4c1['SmsInteraction'][_0x333d('0x10')]({'where':{'id':_0x42dcf7[_0x333d('0x11')]}})[_0x333d('0x12')](function(_0x42c333){if(_0x42c333){_0x42c333[_0x333d('0x13')]({'lastMsgAt':_0x42dcf7[_0x333d('0x14')],'lastMsgDirection':_0x42dcf7[_0x333d('0xb')]['toLowerCase'](),'lastMsgBody':_0x42dcf7[_0x333d('0x15')]});}})[_0x333d('0x16')](function(_0x481954){console[_0x333d('0x17')](_0x481954);});}if(_0x42dcf7['direction']===_0x333d('0xd')&&!_0x42dcf7['secret']){var _0x9d997e;_0x22b4c1['SmsAccount']['find']({'where':{'id':_0x42dcf7[_0x333d('0x18')]},'raw':!![]})['then'](function(_0xfbeec1){_0x9d997e=_0xfbeec1;if(_0x9d997e&&_0x9d997e[_0x333d('0x19')]){switch(_0x9d997e['type']){case'twilio':var _0x578bdf=require(_0x333d('0x1a'));if(_0x9d997e[_0x333d('0x1b')]&&_0x9d997e[_0x333d('0x1c')]&&_0x9d997e[_0x333d('0x1d')]){var _0x2e04af=new _0x578bdf(_0x9d997e[_0x333d('0x1b')],_0x9d997e[_0x333d('0x1c')]);_0x2e04af['messages']['create']({'body':_0x42dcf7[_0x333d('0x15')],'to':_0x42dcf7[_0x333d('0x1d')],'from':_0x9d997e['phone'],'statusCallback':_0x9d997e[_0x333d('0x1e')]+'/api/sms/messages/'+_0x42dcf7['id']+_0x333d('0x1f')+_0x9d997e[_0x333d('0x20')]})[_0x333d('0x12')](function(_0x282849){if(_0x282849['sid']){return _0xccca30[_0x333d('0x13')]({'messageId':_0x282849[_0x333d('0x21')]});}})['catch'](function(_0x55d2d6){logger[_0x333d('0x17')](_0x333d('0x22'),'afterCreate',_0x333d('0x1a'),util[_0x333d('0x23')](_0x55d2d6,{'showHidden':![],'depth':null}));});}else{logger[_0x333d('0x17')](_0x333d('0x22'),'afterCreate',_0x333d('0x1a'),_0x333d('0x24'));}break;case _0x333d('0x25'):var _0x1bf901=_0x333d('0x26');if(_0x9d997e[_0x333d('0x27')]&&_0x9d997e[_0x333d('0x28')]){var _0x341c9b={'recipient':[_0x42dcf7['phone']],'message':_0x42dcf7[_0x333d('0x15')],'message_type':_0x9d997e[_0x333d('0x29')]};var _0x437b13={'url':_0x1bf901+'login?username='+_0x9d997e['username']+_0x333d('0x2a')+_0x9d997e[_0x333d('0x28')],'method':'GET'};rp(_0x437b13)[_0x333d('0x12')](function(_0x592e1d){var _0x3dfca0=_0x592e1d[_0x333d('0x2b')](';');var _0x159fc4={'user_key':_0x3dfca0[0x0],'session_key':_0x3dfca0[0x1]};_0x437b13={'url':_0x1bf901+_0x333d('0x2c'),'method':'POST','headers':{'user_key':_0x159fc4[_0x333d('0x2d')],'Session_key':_0x159fc4['session_key']},'json':!![],'body':_0x341c9b};return rp(_0x437b13);})[_0x333d('0x12')](function(_0x442230){if(_0x442230[_0x333d('0x2e')]>=0x1){var _0xd8d493={'messageId':_0x442230[_0x333d('0x2f')]};if(_0x9d997e[_0x333d('0x29')]!=='GP'||!_0x9d997e['deliveryReport']){_0xd8d493[_0x333d('0x30')]=!![];}return _0xccca30['update'](_0xd8d493);}else{return logger[_0x333d('0x17')](_0x333d('0x22'),'afterCreate',_0x333d('0x25'),util[_0x333d('0x23')](_0x442230,{'showHidden':![],'depth':null}));}})[_0x333d('0x16')](function(_0x26531f){return logger['error'](_0x333d('0x22'),'afterCreate',_0x333d('0x25'),util[_0x333d('0x23')](_0x26531f,{'showHidden':![],'depth':null}));});}else{logger[_0x333d('0x17')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x333d('0x31'),_0x333d('0x25'),_0x333d('0x32'));}break;case _0x333d('0x33'):if(_0x9d997e[_0x333d('0x1c')]){var _0x3ebbb4={'recipient':_0x42dcf7[_0x333d('0x1d')],'message':_0x42dcf7[_0x333d('0x15')],'sender':_0x9d997e[_0x333d('0x34')]||_0x9d997e[_0x333d('0x1d')],'authorization':_0x9d997e[_0x333d('0x1c')]};var _0x15d2ae={'method':'POST','uri':'https://smsapi.connectel.se/api/send/','body':_0x3ebbb4,'json':!![]};rp(_0x15d2ae)['then'](function(_0x55786b){var _0x32d70a={'messageId':_0x55786b[_0x333d('0x35')]};if(!_0x9d997e[_0x333d('0x36')]){_0x32d70a[_0x333d('0x30')]=!![];}return _0xccca30[_0x333d('0x13')](_0x32d70a);})[_0x333d('0x16')](function(_0x1ba1ac){logger['error'](_0x333d('0x22'),_0x333d('0x31'),_0x333d('0x33'),util[_0x333d('0x23')](_0x1ba1ac,{'showHidden':![],'depth':null}));});}else{logger[_0x333d('0x17')](_0x333d('0x22'),'afterCreate',_0x333d('0x33'),_0x333d('0x37'));}break;case _0x333d('0x38'):if(_0x9d997e[_0x333d('0x27')]&&_0x9d997e[_0x333d('0x28')]){var _0x3ebbb4={'messages':[{'source':_0x333d('0x39'),'to':_0x42dcf7[_0x333d('0x1d')],'body':_0x42dcf7[_0x333d('0x15')],'from':_0x9d997e[_0x333d('0x34')]||_0x9d997e[_0x333d('0x1d')]}]};var _0x537509=util[_0x333d('0x3a')](_0x333d('0x3b'),_0x9d997e[_0x333d('0x27')],_0x9d997e[_0x333d('0x28')]);var _0x15d2ae={'method':'POST','uri':_0x333d('0x3c'),'body':_0x3ebbb4,'headers':{'Authorization':util['format'](_0x333d('0x3d'),new Buffer(_0x537509)[_0x333d('0x3e')](_0x333d('0x3f')))},'json':!![]};rp(_0x15d2ae)['then'](function(_0x9aabb5){if(_0x9aabb5['http_code']>=0xc8&&_0x9aabb5[_0x333d('0x40')]<=0xce){if(_0x9aabb5['data']&&_0x9aabb5[_0x333d('0x41')][_0x333d('0x42')]>0x0){var _0x318cd0=_['head'](_0x9aabb5['data'][_0x333d('0x43')]);var _0x1d2bb9={'messageId':_0x318cd0[_0x333d('0x44')]};if(!_0x9d997e['deliveryReport']){_0x1d2bb9[_0x333d('0x30')]=!![];}return _0xccca30[_0x333d('0x13')](_0x1d2bb9);}else{logger[_0x333d('0x17')](_0x333d('0x22'),'afterCreate',_0x333d('0x45'),util[_0x333d('0x23')](_0x9aabb5,{'showHidden':![],'depth':null}));}}else{logger[_0x333d('0x17')](_0x333d('0x22'),_0x333d('0x31'),'clickSend',util[_0x333d('0x23')](_0x9aabb5,{'showHidden':![],'depth':null}));}})[_0x333d('0x16')](function(_0x2d6116){logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x333d('0x45'),util[_0x333d('0x23')](_0x2d6116,{'showHidden':![],'depth':null}));});}else{logger[_0x333d('0x17')](_0x333d('0x22'),'afterCreate','clickSend',_0x333d('0x32'));}break;case _0x333d('0x46'):if(_0x9d997e['authId']&&_0x9d997e[_0x333d('0x1c')]){var _0x3ebbb4={'dst':_0x42dcf7[_0x333d('0x1d')],'text':_0x42dcf7[_0x333d('0x15')],'src':_0x9d997e[_0x333d('0x34')]||_0x9d997e['phone'],'url':_0x9d997e[_0x333d('0x1e')]+'/api/sms/messages/'+_0x42dcf7['id']+_0x333d('0x1f')+_0x9d997e[_0x333d('0x20')]};var _0x537509=util[_0x333d('0x3a')](_0x333d('0x3b'),_0x9d997e[_0x333d('0x47')],_0x9d997e[_0x333d('0x1c')]);var _0x15d2ae={'method':_0x333d('0x48'),'uri':util['format'](_0x333d('0x49'),_0x9d997e[_0x333d('0x47')]),'body':_0x3ebbb4,'headers':{'Authorization':util['format'](_0x333d('0x3d'),new Buffer(_0x537509)['toString'](_0x333d('0x3f')))},'json':!![]};rp(_0x15d2ae)[_0x333d('0x12')](function(_0x1873d8){var _0x259ecc={'messageId':_0x1873d8[_0x333d('0x4a')][0x0]};return _0xccca30[_0x333d('0x13')](_0x259ecc);})[_0x333d('0x16')](function(_0x1eac3f){logger['error'](_0x333d('0x22'),_0x333d('0x31'),_0x333d('0x46'),util[_0x333d('0x23')](_0x1eac3f,{'showHidden':![],'depth':null}));});}else{logger['error'](_0x333d('0x22'),_0x333d('0x31'),'plivo',_0x333d('0x4b'));}break;case _0x333d('0x4c'):if(_0x9d997e[_0x333d('0x27')]&&_0x9d997e['password']){if(_0x9d997e[_0x333d('0x4d')]){var _0x5256d2={'method':'POST','uri':_0x9d997e[_0x333d('0x4d')]+_0x333d('0x4e'),'body':{'username':_0x9d997e[_0x333d('0x27')],'password':_0x9d997e[_0x333d('0x28')]},'json':!![]};return rp(_0x5256d2)[_0x333d('0x12')](function(_0x13834b){var _0x6a50b1={'method':_0x333d('0x48'),'uri':_0x9d997e['baseUrl']+_0x333d('0x4f'),'body':{'messages':[{'from':_0x9d997e[_0x333d('0x1d')],'destinations':[{'to':_0x42dcf7[_0x333d('0x1d')]}],'text':_0x42dcf7['body'],'notifyUrl':_0x9d997e[_0x333d('0x1e')]+_0x333d('0x50')+_0x42dcf7['id']+_0x333d('0x1f')+_0x9d997e[_0x333d('0x20')],'notifyContentType':'application/json','callbackData':_0x9d997e[_0x333d('0x1d')]+';'+_0x42dcf7[_0x333d('0x15')]}]},'headers':{'Authorization':_0x333d('0x51')+_0x13834b['token']},'json':!![]};return rp(_0x6a50b1)[_0x333d('0x12')](function(_0x33dcde){if(_0x33dcde[_0x333d('0x43')]){var _0x415e03={'messageId':_0x33dcde[_0x333d('0x43')][0x0][_0x333d('0x52')]};if(!_0x9d997e[_0x333d('0x36')]){_0x415e03[_0x333d('0x30')]=!![];}return _0xccca30[_0x333d('0x13')](_0x415e03);}else{return logger[_0x333d('0x17')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x333d('0x4c'),util[_0x333d('0x23')](_0x33dcde,{'showHidden':![],'depth':null}));}});})['catch'](function(_0x250b1e){return logger[_0x333d('0x17')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x333d('0x31'),_0x333d('0x4c'),util[_0x333d('0x23')](_0x250b1e,{'showHidden':![],'depth':null}));});}else{logger[_0x333d('0x17')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x333d('0x31'),'infobip','Missing\x20parameters:\x20base_url');}}else{logger[_0x333d('0x17')](_0x333d('0x22'),_0x333d('0x31'),'infobip','Missing\x20parameters:\x20username,\x20password');}break;case _0x333d('0x53'):var _0x5e9f9c=require(_0x333d('0x54'));if(_0x9d997e[_0x333d('0x55')]){var _0x7d4584={};_0x7d4584['login']=_0x9d997e[_0x333d('0x27')];_0x7d4584['phone']=_0x42dcf7[_0x333d('0x1d')];_0x7d4584['sender']=_0x9d997e['phone'];_0x7d4584[_0x333d('0x56')]=_0x42dcf7[_0x333d('0x15')];_0x7d4584['timestamp']=+new Date();var _0x105c53='';var _0x57256e='';var _0x3f0044=Object[_0x333d('0x57')](_0x7d4584);_0x3f0044['sort']();for(var _0x38b972=0x0;_0x38b972<_0x3f0044[_0x333d('0x58')];_0x38b972++){if(_0x105c53!=''){_0x105c53+='&';}_0x105c53+=_0x3f0044[_0x38b972]+'='+encodeURIComponent(_0x7d4584[_0x3f0044[_0x38b972]]);_0x57256e+=_0x7d4584[_0x3f0044[_0x38b972]];}_0x57256e+=_0x9d997e[_0x333d('0x55')];_0x57256e=_0x5e9f9c[_0x333d('0x59')](_0x333d('0x5a'))[_0x333d('0x13')](_0x57256e)[_0x333d('0x5b')](_0x333d('0x5c'));if(_0x105c53!==''){_0x105c53+='&';}_0x105c53+=_0x333d('0x5d')+_0x57256e;var _0x437b13={'method':'GET','uri':_0x333d('0x5e')+_0x105c53,'json':!![]};return rp(_0x437b13)[_0x333d('0x12')](function(_0x3fe208){var _0x9e77a=Object['keys'](_0x3fe208);if(_0x3fe208[_0x9e77a[0x0]]['error']&&parseInt(_0x3fe208[_0x9e77a[0x0]][_0x333d('0x17')])===0x0){var _0xd1dc40={'messageId':_0x3fe208[_0x9e77a[0x0]][_0x333d('0x5f')]};if(!_0x9d997e['deliveryReport']){_0xd1dc40[_0x333d('0x30')]=!![];}return _0xccca30[_0x333d('0x13')](_0xd1dc40);}else{return logger[_0x333d('0x17')](_0x333d('0x22'),_0x333d('0x31'),_0x333d('0x53'),util[_0x333d('0x23')](_0x3fe208['error'],{'showHidden':![],'depth':null}));}})[_0x333d('0x16')](function(_0x212d23){return logger['error'](_0x333d('0x22'),_0x333d('0x31'),'csc',util[_0x333d('0x23')](_0x212d23,{'showHidden':![],'depth':null}));});}else{logger[_0x333d('0x17')](_0x333d('0x22'),'afterCreate',_0x333d('0x53'),_0x333d('0x60'));}break;case _0x333d('0x61'):if(_0x9d997e[_0x333d('0x55')]){var _0x28093b={'method':_0x333d('0x48'),'uri':'https://platform.clickatell.com/messages','headers':{'Authorization':_0x9d997e['apiKey']},'body':{'content':_0x42dcf7['body'],'to':[_0x42dcf7[_0x333d('0x1d')]],'from':_0x9d997e[_0x333d('0x1d')],'binary':![],'clientMessageId':_0x333d('0x62'),'charset':'UTF-8'},'json':!![]};rp(_0x28093b)[_0x333d('0x12')](function(_0x4e0d91){if(!_0x4e0d91['error']){var _0x1e1544={'messageId':_0x4e0d91[_0x333d('0x43')][0x0][_0x333d('0x63')]};if(!_0x9d997e[_0x333d('0x36')]){_0x1e1544[_0x333d('0x30')]=!![];}return _0xccca30[_0x333d('0x13')](_0x1e1544);}else{return logger[_0x333d('0x17')](_0x333d('0x22'),_0x333d('0x31'),_0x333d('0x61'),util[_0x333d('0x23')](_0x4e0d91['error'],{'showHidden':![],'depth':null}));}})[_0x333d('0x16')](function(_0x29a26d){return logger[_0x333d('0x17')](_0x333d('0x22'),_0x333d('0x31'),_0x333d('0x61'),util[_0x333d('0x23')](_0x29a26d,{'showHidden':![],'depth':null}));});}else{logger['error'](_0x333d('0x22'),_0x333d('0x31'),'clickatell',_0x333d('0x60'));}break;case _0x333d('0x64'):if(_0x9d997e['apiKey']){var _0x265bfe={};var _0x437b13={'method':_0x333d('0x48'),'uri':_0x333d('0x65'),'headers':{'Authorization':_0x333d('0x66')+_0x9d997e[_0x333d('0x55')],'Content-Type':_0x333d('0x67')},'body':{'from':_0x9d997e[_0x333d('0x1d')],'to':_0x42dcf7[_0x333d('0x1d')],'text':_0x42dcf7[_0x333d('0x15')]},'json':!![]};return rp(_0x437b13)[_0x333d('0x12')](function(_0x5a7fcc){if(_0x5a7fcc[_0x333d('0x68')]==0xca){_0x265bfe[_0x333d('0x69')]=_0x5a7fcc;var _0x50dd15={'method':_0x333d('0x48'),'uri':_0x333d('0x6a'),'headers':{'Authorization':'Bearer\x20'+_0x9d997e['apiKey'],'Content-Type':_0x333d('0x67')},'body':{'refid':_0x265bfe[_0x333d('0x69')][_0x333d('0x6b')]},'json':!![]};return rp(_0x50dd15)[_0x333d('0x12')](function(_0x5d901b){_0x265bfe[_0x333d('0x6c')]=_0x5d901b;var _0x214691={'messageId':_0x265bfe[_0x333d('0x69')][_0x333d('0x6b')],'read':!![]};return _0xccca30['update'](_0x214691);});}else{return logger[_0x333d('0x17')](_0x333d('0x22'),_0x333d('0x31'),_0x333d('0x64'),util[_0x333d('0x23')](_0x5a7fcc,{'showHidden':![],'depth':null}));}})[_0x333d('0x16')](function(_0x1b8dc1){return logger[_0x333d('0x17')]('SmsMessage,\x20%s,\x20%s,\x20%s','afterCreate',_0x333d('0x64'),util[_0x333d('0x23')](_0x1b8dc1,{'showHidden':![],'depth':null}));});}else{return logger[_0x333d('0x17')](_0x333d('0x22'),_0x333d('0x31'),_0x333d('0x64'),_0x333d('0x6d'));}break;}}})['finally'](function(){_0x54d61b();});}else{_0x54d61b();}}},'charset':'utf8mb4','collate':_0x333d('0x6e')});};
\ No newline at end of file
+var _0xe319=['https://api.plivo.com/v1/Account/%s/Message/','message_uuid','Missing\x20parameters:\x20authId,\x20authToken','infobip','baseUrl','/sms/2/text/advanced','IBSSO\x20','Missing\x20parameters:\x20base_url','csc','crypto','apiKey','sender','text','timestamp','keys','sort','length','md5','digest','signature=','GET','https://sms.csc.lv/external/get/send.php?','id_sms','Missing\x20parameters:\x20apiKey','uuid','UTF-8','apiMessageId','clickatell','intelepeer','https://api.intelepeer.com/_rest/v4/app/sms/send','Bearer\x20','code','message','https://api.intelepeer.com/_rest/v4/app/sms/mdr','status','refid','utf8mb4','utf8mb4_unicode_ci','lodash','util','moment','bluebird','./smsMessage.attributes','exports','define','SmsMessage','sms_messages','messageId','models','get','direction','toLowerCase','out','secret','isNil','SmsInteraction','findOne','SmsInteractionId','then','update','createdAt','body','catch','error','SmsAccount','find','SmsAccountId','type','twilio','accountSid','authToken','messages','create','phone','/status?token=','token','sid','afterCreate','inspect','SmsMessage,\x20%s,\x20%s,\x20%s','skebby','https://api.skebby.it/API/v1.0/REST/','username','password','smsMethod','login?username=','&password=','split','sms','POST','user_key','session_key','total_sent','internal_order_id','deliveryReport','Missing\x20parameters:\x20username,\x20password','connectel','senderString','Missing\x20parameters:\x20authToken','clicksend','xCALLY\x20Motion','format','%s:%s','https://rest.clicksend.com/v3/sms/send','Basic\x20%s','toString','base64','http_code','head','data','read','clickSend','plivo','authId','remote','/api/sms/messages/'];(function(_0x51a049,_0x46353b){var _0x4d1063=function(_0x1a95dc){while(--_0x1a95dc){_0x51a049['push'](_0x51a049['shift']());}};_0x4d1063(++_0x46353b);}(_0xe319,0x182));var _0x9e31=function(_0x4f3e09,_0x5aef38){_0x4f3e09=_0x4f3e09-0x0;var _0x3f6966=_0xe319[_0x4f3e09];return _0x3f6966;};'use strict';var _=require(_0x9e31('0x0'));var util=require(_0x9e31('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x9e31('0x2'));var BPromise=require(_0x9e31('0x3'));var rp=require('request-promise');var attributes=require(_0x9e31('0x4'));module[_0x9e31('0x5')]=function(_0x1573e0,_0x45c8d9){return _0x1573e0[_0x9e31('0x6')](_0x9e31('0x7'),attributes,{'tableName':_0x9e31('0x8'),'paranoid':![],'indexes':[{'name':_0x9e31('0x9'),'fields':[_0x9e31('0x9')]}],'timestamps':!![],'hooks':{'afterCreate':function(_0x3f3b4d,_0x5bdc59,_0xcb5727){var _0x5cd61d=_0x1573e0[_0x9e31('0xa')];var _0x4c31cb=_0x3f3b4d[_0x9e31('0xb')]({'plain':!![]});if(_0x4c31cb[_0x9e31('0xc')][_0x9e31('0xd')]()==='in'||_0x4c31cb[_0x9e31('0xc')][_0x9e31('0xd')]()===_0x9e31('0xe')&&!_0x4c31cb[_0x9e31('0xf')]&&!_[_0x9e31('0x10')](_0x4c31cb['UserId'])){_0x5cd61d[_0x9e31('0x11')][_0x9e31('0x12')]({'where':{'id':_0x4c31cb[_0x9e31('0x13')]}})[_0x9e31('0x14')](function(_0x5852c0){if(_0x5852c0){_0x5852c0[_0x9e31('0x15')]({'lastMsgAt':_0x4c31cb[_0x9e31('0x16')],'lastMsgDirection':_0x4c31cb[_0x9e31('0xc')][_0x9e31('0xd')](),'lastMsgBody':_0x4c31cb[_0x9e31('0x17')]});}})[_0x9e31('0x18')](function(_0x3d7c1a){console[_0x9e31('0x19')](_0x3d7c1a);});}if(_0x4c31cb[_0x9e31('0xc')]===_0x9e31('0xe')&&!_0x4c31cb['secret']){var _0x1e0448;_0x5cd61d[_0x9e31('0x1a')][_0x9e31('0x1b')]({'where':{'id':_0x4c31cb[_0x9e31('0x1c')]},'raw':!![]})[_0x9e31('0x14')](function(_0x3d4f22){_0x1e0448=_0x3d4f22;if(_0x1e0448&&_0x1e0448['type']){switch(_0x1e0448[_0x9e31('0x1d')]){case'twilio':var _0xcbcf66=require(_0x9e31('0x1e'));if(_0x1e0448[_0x9e31('0x1f')]&&_0x1e0448[_0x9e31('0x20')]&&_0x1e0448['phone']){var _0xe6a61=new _0xcbcf66(_0x1e0448[_0x9e31('0x1f')],_0x1e0448[_0x9e31('0x20')]);_0xe6a61[_0x9e31('0x21')][_0x9e31('0x22')]({'body':_0x4c31cb[_0x9e31('0x17')],'to':_0x4c31cb[_0x9e31('0x23')],'from':_0x1e0448['phone'],'statusCallback':_0x1e0448['remote']+'/api/sms/messages/'+_0x4c31cb['id']+_0x9e31('0x24')+_0x1e0448[_0x9e31('0x25')]})[_0x9e31('0x14')](function(_0x5b3545){if(_0x5b3545[_0x9e31('0x26')]){return _0x3f3b4d['update']({'messageId':_0x5b3545['sid']});}})[_0x9e31('0x18')](function(_0x12d6f0){logger['error']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e31('0x27'),_0x9e31('0x1e'),util[_0x9e31('0x28')](_0x12d6f0,{'showHidden':![],'depth':null}));});}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),'twilio','Missing\x20parameters:\x20phone,\x20accountSid\x20or\x20authToken');}break;case _0x9e31('0x2a'):var _0x19e39e=_0x9e31('0x2b');if(_0x1e0448[_0x9e31('0x2c')]&&_0x1e0448[_0x9e31('0x2d')]){var _0x1a0649={'recipient':[_0x4c31cb['phone']],'message':_0x4c31cb[_0x9e31('0x17')],'message_type':_0x1e0448[_0x9e31('0x2e')]};var _0x5772ae={'url':_0x19e39e+_0x9e31('0x2f')+_0x1e0448[_0x9e31('0x2c')]+_0x9e31('0x30')+_0x1e0448[_0x9e31('0x2d')],'method':'GET'};rp(_0x5772ae)[_0x9e31('0x14')](function(_0x30e6dd){var _0x404fc0=_0x30e6dd[_0x9e31('0x31')](';');var _0x46d91c={'user_key':_0x404fc0[0x0],'session_key':_0x404fc0[0x1]};_0x5772ae={'url':_0x19e39e+_0x9e31('0x32'),'method':_0x9e31('0x33'),'headers':{'user_key':_0x46d91c[_0x9e31('0x34')],'Session_key':_0x46d91c[_0x9e31('0x35')]},'json':!![],'body':_0x1a0649};return rp(_0x5772ae);})['then'](function(_0x4037c9){if(_0x4037c9[_0x9e31('0x36')]>=0x1){var _0x298ec4={'messageId':_0x4037c9[_0x9e31('0x37')]};if(_0x1e0448[_0x9e31('0x2e')]!=='GP'||!_0x1e0448[_0x9e31('0x38')]){_0x298ec4['read']=!![];}return _0x3f3b4d[_0x9e31('0x15')](_0x298ec4);}else{return logger[_0x9e31('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e31('0x27'),_0x9e31('0x2a'),util['inspect'](_0x4037c9,{'showHidden':![],'depth':null}));}})[_0x9e31('0x18')](function(_0x491123){return logger[_0x9e31('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e31('0x27'),_0x9e31('0x2a'),util[_0x9e31('0x28')](_0x491123,{'showHidden':![],'depth':null}));});}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),'skebby',_0x9e31('0x39'));}break;case _0x9e31('0x3a'):if(_0x1e0448[_0x9e31('0x20')]){var _0x2a72f5={'recipient':_0x4c31cb[_0x9e31('0x23')],'message':_0x4c31cb['body'],'sender':_0x1e0448[_0x9e31('0x3b')]||_0x1e0448[_0x9e31('0x23')],'authorization':_0x1e0448['authToken']};var _0x5bdc59={'method':'POST','uri':'https://smsapi.connectel.se/api/send/','body':_0x2a72f5,'json':!![]};rp(_0x5bdc59)[_0x9e31('0x14')](function(_0xd453f3){var _0x3da38={'messageId':_0xd453f3['requestid']};if(!_0x1e0448[_0x9e31('0x38')]){_0x3da38['read']=!![];}return _0x3f3b4d['update'](_0x3da38);})[_0x9e31('0x18')](function(_0x5b2ed0){logger[_0x9e31('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e31('0x27'),_0x9e31('0x3a'),util[_0x9e31('0x28')](_0x5b2ed0,{'showHidden':![],'depth':null}));});}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x3a'),_0x9e31('0x3c'));}break;case _0x9e31('0x3d'):if(_0x1e0448[_0x9e31('0x2c')]&&_0x1e0448['password']){var _0x2a72f5={'messages':[{'source':_0x9e31('0x3e'),'to':_0x4c31cb['phone'],'body':_0x4c31cb['body'],'from':_0x1e0448[_0x9e31('0x3b')]||_0x1e0448[_0x9e31('0x23')]}]};var _0x1daf0a=util[_0x9e31('0x3f')](_0x9e31('0x40'),_0x1e0448[_0x9e31('0x2c')],_0x1e0448[_0x9e31('0x2d')]);var _0x5bdc59={'method':_0x9e31('0x33'),'uri':_0x9e31('0x41'),'body':_0x2a72f5,'headers':{'Authorization':util[_0x9e31('0x3f')](_0x9e31('0x42'),new Buffer(_0x1daf0a)[_0x9e31('0x43')](_0x9e31('0x44')))},'json':!![]};rp(_0x5bdc59)[_0x9e31('0x14')](function(_0x44d396){if(_0x44d396['http_code']>=0xc8&&_0x44d396[_0x9e31('0x45')]<=0xce){if(_0x44d396['data']&&_0x44d396['data']['queued_count']>0x0){var _0x1e875a=_[_0x9e31('0x46')](_0x44d396[_0x9e31('0x47')]['messages']);var _0x28887b={'messageId':_0x1e875a['message_id']};if(!_0x1e0448['deliveryReport']){_0x28887b[_0x9e31('0x48')]=!![];}return _0x3f3b4d[_0x9e31('0x15')](_0x28887b);}else{logger[_0x9e31('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e31('0x27'),_0x9e31('0x49'),util[_0x9e31('0x28')](_0x44d396,{'showHidden':![],'depth':null}));}}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x49'),util[_0x9e31('0x28')](_0x44d396,{'showHidden':![],'depth':null}));}})[_0x9e31('0x18')](function(_0x2d0ab8){logger[_0x9e31('0x19')](_0x9e31('0x29'),'afterCreate','clickSend',util[_0x9e31('0x28')](_0x2d0ab8,{'showHidden':![],'depth':null}));});}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x49'),'Missing\x20parameters:\x20username,\x20password');}break;case _0x9e31('0x4a'):if(_0x1e0448[_0x9e31('0x4b')]&&_0x1e0448[_0x9e31('0x20')]){var _0x2a72f5={'dst':_0x4c31cb[_0x9e31('0x23')],'text':_0x4c31cb[_0x9e31('0x17')],'src':_0x1e0448['senderString']||_0x1e0448[_0x9e31('0x23')],'url':_0x1e0448[_0x9e31('0x4c')]+_0x9e31('0x4d')+_0x4c31cb['id']+_0x9e31('0x24')+_0x1e0448[_0x9e31('0x25')]};var _0x1daf0a=util[_0x9e31('0x3f')](_0x9e31('0x40'),_0x1e0448[_0x9e31('0x4b')],_0x1e0448['authToken']);var _0x5bdc59={'method':_0x9e31('0x33'),'uri':util[_0x9e31('0x3f')](_0x9e31('0x4e'),_0x1e0448[_0x9e31('0x4b')]),'body':_0x2a72f5,'headers':{'Authorization':util[_0x9e31('0x3f')]('Basic\x20%s',new Buffer(_0x1daf0a)[_0x9e31('0x43')]('base64'))},'json':!![]};rp(_0x5bdc59)[_0x9e31('0x14')](function(_0x3f22d8){var _0x1ec913={'messageId':_0x3f22d8[_0x9e31('0x4f')][0x0]};return _0x3f3b4d['update'](_0x1ec913);})['catch'](function(_0x45ca72){logger[_0x9e31('0x19')](_0x9e31('0x29'),'afterCreate','plivo',util['inspect'](_0x45ca72,{'showHidden':![],'depth':null}));});}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x4a'),_0x9e31('0x50'));}break;case _0x9e31('0x51'):if(_0x1e0448[_0x9e31('0x2c')]&&_0x1e0448[_0x9e31('0x2d')]){if(_0x1e0448[_0x9e31('0x52')]){var _0x529167={'method':_0x9e31('0x33'),'uri':_0x1e0448[_0x9e31('0x52')]+'/auth/1/session','body':{'username':_0x1e0448[_0x9e31('0x2c')],'password':_0x1e0448[_0x9e31('0x2d')]},'json':!![]};return rp(_0x529167)[_0x9e31('0x14')](function(_0x44e3e3){var _0x20333f={'method':_0x9e31('0x33'),'uri':_0x1e0448[_0x9e31('0x52')]+_0x9e31('0x53'),'body':{'messages':[{'from':_0x1e0448[_0x9e31('0x23')],'destinations':[{'to':_0x4c31cb[_0x9e31('0x23')]}],'text':_0x4c31cb['body'],'notifyUrl':_0x1e0448[_0x9e31('0x4c')]+_0x9e31('0x4d')+_0x4c31cb['id']+_0x9e31('0x24')+_0x1e0448['token'],'notifyContentType':'application/json','callbackData':_0x1e0448['phone']+';'+_0x4c31cb[_0x9e31('0x17')]}]},'headers':{'Authorization':_0x9e31('0x54')+_0x44e3e3['token']},'json':!![]};return rp(_0x20333f)[_0x9e31('0x14')](function(_0x455080){if(_0x455080['messages']){var _0x20bf4a={'messageId':_0x455080[_0x9e31('0x21')][0x0][_0x9e31('0x9')]};if(!_0x1e0448['deliveryReport']){_0x20bf4a[_0x9e31('0x48')]=!![];}return _0x3f3b4d['update'](_0x20bf4a);}else{return logger[_0x9e31('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e31('0x27'),_0x9e31('0x51'),util[_0x9e31('0x28')](_0x455080,{'showHidden':![],'depth':null}));}});})[_0x9e31('0x18')](function(_0x5b497b){return logger['error'](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x51'),util[_0x9e31('0x28')](_0x5b497b,{'showHidden':![],'depth':null}));});}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x51'),_0x9e31('0x55'));}}else{logger['error'](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x51'),_0x9e31('0x39'));}break;case _0x9e31('0x56'):var _0xe00e1f=require(_0x9e31('0x57'));if(_0x1e0448[_0x9e31('0x58')]){var _0x11e87b={};_0x11e87b['login']=_0x1e0448[_0x9e31('0x2c')];_0x11e87b[_0x9e31('0x23')]=_0x4c31cb[_0x9e31('0x23')];_0x11e87b[_0x9e31('0x59')]=_0x1e0448[_0x9e31('0x23')];_0x11e87b[_0x9e31('0x5a')]=_0x4c31cb['body'];_0x11e87b[_0x9e31('0x5b')]=+new Date();var _0x52232d='';var _0x281f60='';var _0x58725a=Object[_0x9e31('0x5c')](_0x11e87b);_0x58725a[_0x9e31('0x5d')]();for(var _0x5b59b4=0x0;_0x5b59b4<_0x58725a[_0x9e31('0x5e')];_0x5b59b4++){if(_0x52232d!=''){_0x52232d+='&';}_0x52232d+=_0x58725a[_0x5b59b4]+'='+encodeURIComponent(_0x11e87b[_0x58725a[_0x5b59b4]]);_0x281f60+=_0x11e87b[_0x58725a[_0x5b59b4]];}_0x281f60+=_0x1e0448[_0x9e31('0x58')];_0x281f60=_0xe00e1f['createHash'](_0x9e31('0x5f'))[_0x9e31('0x15')](_0x281f60)[_0x9e31('0x60')]('hex');if(_0x52232d!==''){_0x52232d+='&';}_0x52232d+=_0x9e31('0x61')+_0x281f60;var _0x5772ae={'method':_0x9e31('0x62'),'uri':_0x9e31('0x63')+_0x52232d,'json':!![]};return rp(_0x5772ae)[_0x9e31('0x14')](function(_0x417127){var _0x2473e9=Object[_0x9e31('0x5c')](_0x417127);if(_0x417127[_0x2473e9[0x0]][_0x9e31('0x19')]&&parseInt(_0x417127[_0x2473e9[0x0]][_0x9e31('0x19')])===0x0){var _0x250f92={'messageId':_0x417127[_0x2473e9[0x0]][_0x9e31('0x64')]};if(!_0x1e0448[_0x9e31('0x38')]){_0x250f92[_0x9e31('0x48')]=!![];}return _0x3f3b4d['update'](_0x250f92);}else{return logger[_0x9e31('0x19')]('SmsMessage,\x20%s,\x20%s,\x20%s',_0x9e31('0x27'),_0x9e31('0x56'),util[_0x9e31('0x28')](_0x417127['error'],{'showHidden':![],'depth':null}));}})['catch'](function(_0x795c6){return logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x56'),util[_0x9e31('0x28')](_0x795c6,{'showHidden':![],'depth':null}));});}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x56'),_0x9e31('0x65'));}break;case'clickatell':if(_0x1e0448[_0x9e31('0x58')]){var _0x431996={'method':_0x9e31('0x33'),'uri':'https://platform.clickatell.com/messages','headers':{'Authorization':_0x1e0448['apiKey']},'body':{'content':_0x4c31cb[_0x9e31('0x17')],'to':[_0x4c31cb['phone']],'from':_0x1e0448[_0x9e31('0x23')],'binary':![],'clientMessageId':_0x9e31('0x66'),'charset':_0x9e31('0x67')},'json':!![]};rp(_0x431996)[_0x9e31('0x14')](function(_0x2e533d){if(!_0x2e533d[_0x9e31('0x19')]){var _0x512724={'messageId':_0x2e533d[_0x9e31('0x21')][0x0][_0x9e31('0x68')]};if(!_0x1e0448[_0x9e31('0x38')]){_0x512724[_0x9e31('0x48')]=!![];}return _0x3f3b4d[_0x9e31('0x15')](_0x512724);}else{return logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x69'),util[_0x9e31('0x28')](_0x2e533d['error'],{'showHidden':![],'depth':null}));}})[_0x9e31('0x18')](function(_0x39b7f0){return logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),'clickatell',util[_0x9e31('0x28')](_0x39b7f0,{'showHidden':![],'depth':null}));});}else{logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),'clickatell',_0x9e31('0x65'));}break;case _0x9e31('0x6a'):if(_0x1e0448['apiKey']){var _0xb345c3={};var _0x5772ae={'method':'POST','uri':_0x9e31('0x6b'),'headers':{'Authorization':_0x9e31('0x6c')+_0x1e0448[_0x9e31('0x58')],'Content-Type':'application/json'},'body':{'from':_0x1e0448[_0x9e31('0x23')],'to':_0x4c31cb[_0x9e31('0x23')],'text':_0x4c31cb[_0x9e31('0x17')]},'json':!![]};return rp(_0x5772ae)['then'](function(_0x2130ee){if(_0x2130ee[_0x9e31('0x6d')]==0xca){_0xb345c3[_0x9e31('0x6e')]=_0x2130ee;var _0x303134={'method':_0x9e31('0x33'),'uri':_0x9e31('0x6f'),'headers':{'Authorization':_0x9e31('0x6c')+_0x1e0448[_0x9e31('0x58')],'Content-Type':'application/json'},'body':{'refid':_0xb345c3[_0x9e31('0x6e')]['refid']},'json':!![]};return rp(_0x303134)[_0x9e31('0x14')](function(_0x1323dd){_0xb345c3[_0x9e31('0x70')]=_0x1323dd;var _0xa3e2d3={'messageId':_0xb345c3[_0x9e31('0x6e')][_0x9e31('0x71')],'read':!![]};return _0x3f3b4d[_0x9e31('0x15')](_0xa3e2d3);});}else{return logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),'intelepeer',util['inspect'](_0x2130ee,{'showHidden':![],'depth':null}));}})['catch'](function(_0x5ba657){return logger['error'](_0x9e31('0x29'),_0x9e31('0x27'),_0x9e31('0x6a'),util[_0x9e31('0x28')](_0x5ba657,{'showHidden':![],'depth':null}));});}else{return logger[_0x9e31('0x19')](_0x9e31('0x29'),_0x9e31('0x27'),'intelepeer','Token\x20not\x20received');}break;}}})['finally'](function(){_0xcb5727();});}else{_0xcb5727();}}},'charset':_0x9e31('0x72'),'collate':_0x9e31('0x73')});};
\ No newline at end of file
index 28841c7..743e1d3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4194=['code','message','result','catch','CreateSmsMessage','create','body','options','raw','then','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','localhost','socket.io-emitter','./smsMessage.socket','register','request','info','SmsMessage,\x20%s,\x20%s','request\x20sent','debug','SmsMessage,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x36b8ab,_0x350cee){var _0x3d1be9=function(_0x2a94b8){while(--_0x2a94b8){_0x36b8ab['push'](_0x36b8ab['shift']());}};_0x3d1be9(++_0x350cee);}(_0x4194,0x18b));var _0x4419=function(_0x439535,_0x12731e){_0x439535=_0x439535-0x0;var _0x2fa590=_0x4194[_0x439535];return _0x2fa590;};'use strict';var _=require(_0x4419('0x0'));var util=require(_0x4419('0x1'));var moment=require(_0x4419('0x2'));var BPromise=require('bluebird');var rs=require(_0x4419('0x3'));var fs=require('fs');var Redis=require(_0x4419('0x4'));var db=require(_0x4419('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0x4419('0x6'))(_0x4419('0x7'));var config=require(_0x4419('0x8'));var jayson=require(_0x4419('0x9'));var client=jayson['client'][_0x4419('0xa')]({'port':0x232a});config[_0x4419('0xb')]=_[_0x4419('0xc')](config[_0x4419('0xb')],{'host':_0x4419('0xd'),'port':0x18eb});var socket=require(_0x4419('0xe'))(new Redis(config[_0x4419('0xb')]));require(_0x4419('0xf'))[_0x4419('0x10')](socket);function respondWithRpcPromise(_0x2c3d7c,_0x502c54,_0x15c4a5){return new BPromise(function(_0xc1deb7,_0x400ba4){return client[_0x4419('0x11')](_0x2c3d7c,_0x15c4a5)['then'](function(_0x12b7a1){logger[_0x4419('0x12')](_0x4419('0x13'),_0x502c54,_0x4419('0x14'));logger[_0x4419('0x15')](_0x4419('0x16'),_0x502c54,_0x4419('0x14'),JSON[_0x4419('0x17')](_0x12b7a1));if(_0x12b7a1[_0x4419('0x18')]){if(_0x12b7a1[_0x4419('0x18')][_0x4419('0x19')]===0x1f4){logger['error'](_0x4419('0x13'),_0x502c54,_0x12b7a1['error']['message']);return _0x400ba4(_0x12b7a1['error']['message']);}logger[_0x4419('0x18')]('SmsMessage,\x20%s,\x20%s',_0x502c54,_0x12b7a1[_0x4419('0x18')][_0x4419('0x1a')]);return _0xc1deb7(_0x12b7a1[_0x4419('0x18')]['message']);}else{logger[_0x4419('0x12')](_0x4419('0x13'),_0x502c54,_0x4419('0x14'));_0xc1deb7(_0x12b7a1[_0x4419('0x1b')]['message']);}})[_0x4419('0x1c')](function(_0x5b4492){logger['error'](_0x4419('0x13'),_0x502c54,_0x5b4492);_0x400ba4(_0x5b4492);});});}exports[_0x4419('0x1d')]=function(_0x40475d){var _0x3fadba=this;return new Promise(function(_0x326d3d,_0x53fd87){return db['SmsMessage'][_0x4419('0x1e')](_0x40475d[_0x4419('0x1f')],{'raw':_0x40475d[_0x4419('0x20')]?_0x40475d[_0x4419('0x20')][_0x4419('0x21')]===undefined?!![]:![]:!![]})[_0x4419('0x22')](function(_0x18cafb){logger[_0x4419('0x12')](_0x4419('0x1d'),_0x40475d);logger[_0x4419('0x15')]('CreateSmsMessage',_0x40475d,JSON[_0x4419('0x17')](_0x18cafb));_0x326d3d(_0x18cafb);})['catch'](function(_0x394001){logger['error'](_0x4419('0x1d'),_0x394001[_0x4419('0x1a')],_0x40475d);_0x53fd87(_0x3fadba[_0x4419('0x18')](0x1f4,_0x394001[_0x4419('0x1a')]));});});};
\ No newline at end of file
+var _0x4ede=['http','defaults','localhost','socket.io-emitter','redis','./smsMessage.socket','register','request','info','SmsMessage,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','CreateSmsMessage','SmsMessage','create','body','options','raw','then','debug','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise'];(function(_0x624756,_0x150dcc){var _0x304da1=function(_0x5e962d){while(--_0x5e962d){_0x624756['push'](_0x624756['shift']());}};_0x304da1(++_0x150dcc);}(_0x4ede,0xc8));var _0xe4ed=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x4ede[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0xe4ed('0x0'));var util=require(_0xe4ed('0x1'));var moment=require(_0xe4ed('0x2'));var BPromise=require('bluebird');var rs=require(_0xe4ed('0x3'));var fs=require('fs');var Redis=require(_0xe4ed('0x4'));var db=require(_0xe4ed('0x5'))['db'];var utils=require(_0xe4ed('0x6'));var logger=require(_0xe4ed('0x7'))(_0xe4ed('0x8'));var config=require('../../config/environment');var jayson=require(_0xe4ed('0x9'));var client=jayson['client'][_0xe4ed('0xa')]({'port':0x232a});config['redis']=_[_0xe4ed('0xb')](config['redis'],{'host':_0xe4ed('0xc'),'port':0x18eb});var socket=require(_0xe4ed('0xd'))(new Redis(config[_0xe4ed('0xe')]));require(_0xe4ed('0xf'))[_0xe4ed('0x10')](socket);function respondWithRpcPromise(_0x196f33,_0x5c822c,_0x43e00b){return new BPromise(function(_0x39bc8b,_0x429172){return client[_0xe4ed('0x11')](_0x196f33,_0x43e00b)['then'](function(_0x4d0376){logger[_0xe4ed('0x12')](_0xe4ed('0x13'),_0x5c822c,'request\x20sent');logger['debug']('SmsMessage,\x20%s,\x20%s,\x20%s',_0x5c822c,_0xe4ed('0x14'),JSON[_0xe4ed('0x15')](_0x4d0376));if(_0x4d0376['error']){if(_0x4d0376[_0xe4ed('0x16')][_0xe4ed('0x17')]===0x1f4){logger['error'](_0xe4ed('0x13'),_0x5c822c,_0x4d0376['error'][_0xe4ed('0x18')]);return _0x429172(_0x4d0376[_0xe4ed('0x16')][_0xe4ed('0x18')]);}logger[_0xe4ed('0x16')]('SmsMessage,\x20%s,\x20%s',_0x5c822c,_0x4d0376[_0xe4ed('0x16')][_0xe4ed('0x18')]);return _0x39bc8b(_0x4d0376[_0xe4ed('0x16')]['message']);}else{logger[_0xe4ed('0x12')](_0xe4ed('0x13'),_0x5c822c,'request\x20sent');_0x39bc8b(_0x4d0376[_0xe4ed('0x19')][_0xe4ed('0x18')]);}})[_0xe4ed('0x1a')](function(_0x130835){logger[_0xe4ed('0x16')](_0xe4ed('0x13'),_0x5c822c,_0x130835);_0x429172(_0x130835);});});}exports[_0xe4ed('0x1b')]=function(_0x5e2170){var _0x4b981c=this;return new Promise(function(_0x392a5e,_0x2726d9){return db[_0xe4ed('0x1c')][_0xe4ed('0x1d')](_0x5e2170[_0xe4ed('0x1e')],{'raw':_0x5e2170[_0xe4ed('0x1f')]?_0x5e2170[_0xe4ed('0x1f')][_0xe4ed('0x20')]===undefined?!![]:![]:!![]})[_0xe4ed('0x21')](function(_0x44b9f4){logger[_0xe4ed('0x12')](_0xe4ed('0x1b'),_0x5e2170);logger[_0xe4ed('0x22')](_0xe4ed('0x1b'),_0x5e2170,JSON[_0xe4ed('0x15')](_0x44b9f4));_0x392a5e(_0x44b9f4);})[_0xe4ed('0x1a')](function(_0x2b086b){logger[_0xe4ed('0x16')](_0xe4ed('0x1b'),_0x2b086b[_0xe4ed('0x18')],_0x5e2170);_0x2726d9(_0x4b981c[_0xe4ed('0x16')](0x1f4,_0x2b086b[_0xe4ed('0x18')]));});});};
\ No newline at end of file
index d6c1ae7..1955715 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x31a1=['save','remove','update','emit','removeListener','register','smsMessage:'];(function(_0x1b4868,_0x2c6522){var _0xfe0603=function(_0x3eb8a8){while(--_0x3eb8a8){_0x1b4868['push'](_0x1b4868['shift']());}};_0xfe0603(++_0x2c6522);}(_0x31a1,0x142));var _0x131a=function(_0x342baa,_0x4a110f){_0x342baa=_0x342baa-0x0;var _0x1208f3=_0x31a1[_0x342baa];return _0x1208f3;};'use strict';var SmsMessageEvents=require('./smsMessage.events');var events=[_0x131a('0x0'),_0x131a('0x1'),_0x131a('0x2')];function createListener(_0x41262a,_0x575bbb){return function(_0x77ae7){_0x575bbb[_0x131a('0x3')](_0x41262a,_0x77ae7);};}function removeListener(_0x17dff4,_0x11a1e9){return function(){SmsMessageEvents[_0x131a('0x4')](_0x17dff4,_0x11a1e9);};}exports[_0x131a('0x5')]=function(_0x12f265){for(var _0x32ad33=0x0,_0x3ce084=events['length'];_0x32ad33<_0x3ce084;_0x32ad33++){var _0x4041c2=events[_0x32ad33];var _0x2f7997=createListener(_0x131a('0x6')+_0x4041c2,_0x12f265);SmsMessageEvents['on'](_0x4041c2,_0x2f7997);}};
\ No newline at end of file
+var _0x6cc8=['save','update','emit','register','length','smsMessage:','./smsMessage.events'];(function(_0x522c30,_0x8d1391){var _0x13b55d=function(_0x4d07e4){while(--_0x4d07e4){_0x522c30['push'](_0x522c30['shift']());}};_0x13b55d(++_0x8d1391);}(_0x6cc8,0x1a3));var _0x86cc=function(_0x122096,_0x60c295){_0x122096=_0x122096-0x0;var _0x3d1966=_0x6cc8[_0x122096];return _0x3d1966;};'use strict';var SmsMessageEvents=require(_0x86cc('0x0'));var events=[_0x86cc('0x1'),'remove',_0x86cc('0x2')];function createListener(_0x128aa1,_0xc562ac){return function(_0x5afe72){_0xc562ac[_0x86cc('0x3')](_0x128aa1,_0x5afe72);};}function removeListener(_0x3a968d,_0x123c7c){return function(){SmsMessageEvents['removeListener'](_0x3a968d,_0x123c7c);};}exports[_0x86cc('0x4')]=function(_0xa12dc4){for(var _0x1f071c=0x0,_0x37e3c1=events[_0x86cc('0x5')];_0x1f071c<_0x37e3c1;_0x1f071c++){var _0x411547=events[_0x1f071c];var _0x18611a=createListener(_0x86cc('0x6')+_0x411547,_0xa12dc4);SmsMessageEvents['on'](_0x411547,_0x18611a);}};
\ No newline at end of file
index 97f80f5..a2c1293 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b6c=['destroy','removeAgents','multer','path','connect-timeout','../../components/interaction/service','../../config/environment','./smsQueue.controller','get','isAuthenticated','describe','/:id','show','getMembers','/:id/teams','/:id/users','getAgents','post','addTeams','put','delete'];(function(_0xd5905,_0x15e17d){var _0x4ebd5a=function(_0x4305f9){while(--_0x4305f9){_0xd5905['push'](_0xd5905['shift']());}};_0x4ebd5a(++_0x15e17d);}(_0x8b6c,0x13d));var _0xc8b6=function(_0x191386,_0x4b8b2d){_0x191386=_0x191386-0x0;var _0x40f6b4=_0x8b6c[_0x191386];return _0x40f6b4;};'use strict';var multer=require(_0xc8b6('0x0'));var util=require('util');var path=require(_0xc8b6('0x1'));var timeout=require(_0xc8b6('0x2'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xc8b6('0x3'));var config=require(_0xc8b6('0x4'));var controller=require(_0xc8b6('0x5'));router[_0xc8b6('0x6')]('/',auth[_0xc8b6('0x7')](),controller['index']);router[_0xc8b6('0x6')]('/describe',auth[_0xc8b6('0x7')](),controller[_0xc8b6('0x8')]);router[_0xc8b6('0x6')](_0xc8b6('0x9'),auth[_0xc8b6('0x7')](),controller[_0xc8b6('0xa')]);router[_0xc8b6('0x6')]('/:id/members',auth[_0xc8b6('0x7')](),controller[_0xc8b6('0xb')]);router[_0xc8b6('0x6')](_0xc8b6('0xc'),auth[_0xc8b6('0x7')](),controller['getTeams']);router[_0xc8b6('0x6')](_0xc8b6('0xd'),auth[_0xc8b6('0x7')](),controller[_0xc8b6('0xe')]);router[_0xc8b6('0xf')]('/',auth[_0xc8b6('0x7')](),controller['create']);router['post'](_0xc8b6('0xc'),auth[_0xc8b6('0x7')](),controller[_0xc8b6('0x10')]);router[_0xc8b6('0xf')](_0xc8b6('0xd'),auth[_0xc8b6('0x7')](),controller['addAgents']);router[_0xc8b6('0x11')](_0xc8b6('0x9'),auth[_0xc8b6('0x7')](),controller['update']);router[_0xc8b6('0x12')](_0xc8b6('0x9'),auth[_0xc8b6('0x7')](),controller[_0xc8b6('0x13')]);router[_0xc8b6('0x12')](_0xc8b6('0xc'),auth[_0xc8b6('0x7')](),controller['removeTeams']);router[_0xc8b6('0x12')]('/:id/users',auth['isAuthenticated'](),controller[_0xc8b6('0x14')]);module['exports']=router;
\ No newline at end of file
+var _0x5b66=['/:id/users','getAgents','post','create','addAgents','put','/:id','update','destroy','delete','removeTeams','removeAgents','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsQueue.controller','get','index','describe','isAuthenticated','getMembers','/:id/teams','getTeams'];(function(_0x4a747d,_0x3b747f){var _0x3a5b5c=function(_0x4b3e81){while(--_0x4b3e81){_0x4a747d['push'](_0x4a747d['shift']());}};_0x3a5b5c(++_0x3b747f);}(_0x5b66,0x1cf));var _0x65b6=function(_0x52731f,_0x8a5791){_0x52731f=_0x52731f-0x0;var _0x182084=_0x5b66[_0x52731f];return _0x182084;};'use strict';var multer=require(_0x65b6('0x0'));var util=require(_0x65b6('0x1'));var path=require(_0x65b6('0x2'));var timeout=require(_0x65b6('0x3'));var express=require(_0x65b6('0x4'));var router=express[_0x65b6('0x5')]();var auth=require(_0x65b6('0x6'));var interaction=require(_0x65b6('0x7'));var config=require(_0x65b6('0x8'));var controller=require(_0x65b6('0x9'));router[_0x65b6('0xa')]('/',auth['isAuthenticated'](),controller[_0x65b6('0xb')]);router[_0x65b6('0xa')]('/describe',auth['isAuthenticated'](),controller[_0x65b6('0xc')]);router[_0x65b6('0xa')]('/:id',auth[_0x65b6('0xd')](),controller['show']);router[_0x65b6('0xa')]('/:id/members',auth[_0x65b6('0xd')](),controller[_0x65b6('0xe')]);router['get'](_0x65b6('0xf'),auth[_0x65b6('0xd')](),controller[_0x65b6('0x10')]);router[_0x65b6('0xa')](_0x65b6('0x11'),auth[_0x65b6('0xd')](),controller[_0x65b6('0x12')]);router[_0x65b6('0x13')]('/',auth[_0x65b6('0xd')](),controller[_0x65b6('0x14')]);router['post'](_0x65b6('0xf'),auth[_0x65b6('0xd')](),controller['addTeams']);router[_0x65b6('0x13')](_0x65b6('0x11'),auth[_0x65b6('0xd')](),controller[_0x65b6('0x15')]);router[_0x65b6('0x16')](_0x65b6('0x17'),auth[_0x65b6('0xd')](),controller[_0x65b6('0x18')]);router['delete'](_0x65b6('0x17'),auth['isAuthenticated'](),controller[_0x65b6('0x19')]);router[_0x65b6('0x1a')](_0x65b6('0xf'),auth[_0x65b6('0xd')](),controller[_0x65b6('0x1b')]);router[_0x65b6('0x1a')](_0x65b6('0x11'),auth[_0x65b6('0xd')](),controller[_0x65b6('0x1c')]);module[_0x65b6('0x1d')]=router;
\ No newline at end of file
index c91e66c..c06e152 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x384e=['name','roundrobin','sequelize','exports','STRING'];(function(_0x4a2673,_0x1290a1){var _0x20f7ff=function(_0x48b1b3){while(--_0x48b1b3){_0x4a2673['push'](_0x4a2673['shift']());}};_0x20f7ff(++_0x1290a1);}(_0x384e,0xcf));var _0xe384=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x384e[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xe384('0x0'));module[_0xe384('0x1')]={'name':{'type':Sequelize[_0xe384('0x2')],'unique':_0xe384('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xe384('0x2')]},'timeout':{'type':Sequelize['INTEGER'],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize['ENUM']('rrmemory','beepall',_0xe384('0x4'))}};
\ No newline at end of file
+var _0x31be=['exports','STRING','name','INTEGER','ENUM','rrmemory','beepall','roundrobin','sequelize'];(function(_0x992bc1,_0x3497fb){var _0x4ed5dd=function(_0x42adf5){while(--_0x42adf5){_0x992bc1['push'](_0x992bc1['shift']());}};_0x4ed5dd(++_0x3497fb);}(_0x31be,0x128));var _0xe31b=function(_0x56d7ee,_0x27a0b0){_0x56d7ee=_0x56d7ee-0x0;var _0x40ef0c=_0x31be[_0x56d7ee];return _0x40ef0c;};'use strict';var Sequelize=require(_0xe31b('0x0'));module[_0xe31b('0x1')]={'name':{'type':Sequelize[_0xe31b('0x2')],'unique':_0xe31b('0x3'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'description':{'type':Sequelize[_0xe31b('0x2')]},'timeout':{'type':Sequelize[_0xe31b('0x4')],'validate':{'min':0x1,'max':0x20c49b}},'strategy':{'type':Sequelize[_0xe31b('0x5')](_0xe31b('0x6'),_0xe31b('0x7'),_0xe31b('0x8'))}};
\ No newline at end of file
index 9193327..c9baa81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x786f=['error','name','send','SmsQueue','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','type','key','VIRTUAL','field','filter','count','includeAll','include','findAll','rows','catch','show','length','options','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','get','UserProfileSection','autoAssociation','body','params','describe','getMembers','SmsQueueId','UserSmsQueue','findAndCountAll','UserId','smsPause','updatedAt','createdAt','format','SIP','getTeams','findOne','Team','addTeams','ids','User','Agents','union','addAgents','removeTeams','omit','spread','emit','removeAgents','isArray','userSmsQueue:remove','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','mustache','sox','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','./smsQueue.socket','register','sendStatus','status','end','json','offset','limit','Content-Range','reject','update','then','SmsQueues','UserProfileResource','destroy'];(function(_0x7d1d8c,_0x44607e){var _0x271cea=function(_0x496f04){while(--_0x496f04){_0x7d1d8c['push'](_0x7d1d8c['shift']());}};_0x271cea(++_0x44607e);}(_0x786f,0xb7));var _0xf786=function(_0x2eea9a,_0x368daf){_0x2eea9a=_0x2eea9a-0x0;var _0x1ec61e=_0x786f[_0x2eea9a];return _0x1ec61e;};'use strict';var pdf=require(_0xf786('0x0'));var emlformat=require(_0xf786('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xf786('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xf786('0x3'));var moment=require(_0xf786('0x4'));var BPromise=require(_0xf786('0x5'));var Mustache=require(_0xf786('0x6'));var util=require('util');var path=require('path');var sox=require(_0xf786('0x7'));var csv=require(_0xf786('0x8'));var ejs=require(_0xf786('0x9'));var fs=require('fs');var _=require(_0xf786('0xa'));var squel=require(_0xf786('0xb'));var crypto=require(_0xf786('0xc'));var jsforce=require('jsforce');var deskjs=require(_0xf786('0xd'));var toCsv=require(_0xf786('0x8'));var querystring=require(_0xf786('0xe'));var Papa=require(_0xf786('0xf'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0xf786('0x10'));var qs=require(_0xf786('0x11'));var logger=require(_0xf786('0x12'))(_0xf786('0x13'));var utils=require(_0xf786('0x14'));var config=require(_0xf786('0x15'));var db=require(_0xf786('0x16'))['db'];config[_0xf786('0x17')]=_[_0xf786('0x18')](config[_0xf786('0x17')],{'host':_0xf786('0x19'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xf786('0x17')]));require(_0xf786('0x1a'))[_0xf786('0x1b')](socket);function respondWithStatusCode(_0x10bd1b,_0x496a38){_0x496a38=_0x496a38||0xcc;return function(_0x2e836d){if(_0x2e836d){return _0x10bd1b[_0xf786('0x1c')](_0x496a38);}return _0x10bd1b[_0xf786('0x1d')](_0x496a38)[_0xf786('0x1e')]();};}function respondWithResult(_0x1cdb55,_0x5d9050){_0x5d9050=_0x5d9050||0xc8;return function(_0x4f0938){if(_0x4f0938){return _0x1cdb55['status'](_0x5d9050)[_0xf786('0x1f')](_0x4f0938);}};}function respondWithFilteredResult(_0x588ac5,_0x49a793){return function(_0x4fec2b){if(_0x4fec2b){var _0x18c54f=_0x4fec2b['count'],_0x51ecb0=_0x49a793[_0xf786('0x20')],_0x4ab25a=_0x49a793[_0xf786('0x20')]+_0x49a793[_0xf786('0x21')],_0x19d314;if(_0x4ab25a>=_0x18c54f){_0x4ab25a=_0x18c54f;_0x19d314=0xc8;}else{_0x19d314=0xce;}_0x588ac5[_0xf786('0x1d')](_0x19d314);return _0x588ac5['set'](_0xf786('0x22'),_0x51ecb0+'-'+_0x4ab25a+'/'+_0x18c54f)['json'](_0x4fec2b);}return null;};}function patchUpdates(_0x31304c){return function(_0x565fb8){try{jsonpatch['apply'](_0x565fb8,_0x31304c,!![]);}catch(_0x3624c0){return BPromise[_0xf786('0x23')](_0x3624c0);}return _0x565fb8['save']();};}function saveUpdates(_0x39417a,_0x58bc86){return function(_0x2278b8){if(_0x2278b8){return _0x2278b8[_0xf786('0x24')](_0x39417a)[_0xf786('0x25')](function(_0x232bd8){return _0x232bd8;});}return null;};}function removeEntity(_0x422179,_0x104e1a){return function(_0x359250){if(_0x359250){return _0x359250['destroy']()[_0xf786('0x25')](function(){var _0x36681a=_0x359250['get']({'plain':!![]});var _0x16bffe=_0xf786('0x26');return db[_0xf786('0x27')][_0xf786('0x28')]({'where':{'type':_0x16bffe,'resourceId':_0x36681a['id']}})[_0xf786('0x25')](function(){return _0x359250;});})[_0xf786('0x25')](function(){_0x422179['status'](0xcc)[_0xf786('0x1e')]();});}};}function handleEntityNotFound(_0x38e254,_0x29222d){return function(_0x58b93a){if(!_0x58b93a){_0x38e254[_0xf786('0x1c')](0x194);}return _0x58b93a;};}function handleError(_0x389d02,_0x2384fd){_0x2384fd=_0x2384fd||0x1f4;return function(_0x1e4e19){logger[_0xf786('0x29')](_0x1e4e19['stack']);if(_0x1e4e19[_0xf786('0x2a')]){delete _0x1e4e19[_0xf786('0x2a')];}_0x389d02[_0xf786('0x1d')](_0x2384fd)[_0xf786('0x2b')](_0x1e4e19);};}exports['index']=function(_0x418f49,_0x501e10){var _0x55b1a5={},_0x594498={},_0x3821dd={'count':0x0,'rows':[]};var _0x31091a=db[_0xf786('0x2c')][_0xf786('0x2d')];_0x594498[_0xf786('0x2e')]=_[_0xf786('0x2f')](_0x31091a);_0x594498[_0xf786('0x30')]=_['keys'](_0x418f49['query']);_0x594498[_0xf786('0x31')]=_[_0xf786('0x32')](_0x594498[_0xf786('0x2e')],_0x594498[_0xf786('0x30')]);_0x55b1a5[_0xf786('0x33')]=_['intersection'](_0x594498[_0xf786('0x2e')],qs[_0xf786('0x34')](_0x418f49[_0xf786('0x30')]['fields']));_0x55b1a5[_0xf786('0x33')]=_0x55b1a5['attributes']['length']?_0x55b1a5[_0xf786('0x33')]:_0x594498[_0xf786('0x2e')];if(!_0x418f49[_0xf786('0x30')][_0xf786('0x35')](_0xf786('0x36'))){_0x55b1a5[_0xf786('0x21')]=qs[_0xf786('0x21')](_0x418f49[_0xf786('0x30')][_0xf786('0x21')]);_0x55b1a5[_0xf786('0x20')]=qs[_0xf786('0x20')](_0x418f49[_0xf786('0x30')]['offset']);}_0x55b1a5[_0xf786('0x37')]=qs[_0xf786('0x38')](_0x418f49[_0xf786('0x30')][_0xf786('0x38')]);_0x55b1a5[_0xf786('0x39')]=qs[_0xf786('0x31')](_[_0xf786('0x3a')](_0x418f49[_0xf786('0x30')],_0x594498[_0xf786('0x31')]));if(_0x418f49[_0xf786('0x30')]['filter']){_0x55b1a5['where']=_[_0xf786('0x3b')](_0x55b1a5[_0xf786('0x39')],{'$or':_[_0xf786('0x3c')](_0x31091a,function(_0x5336ee){if(_0x5336ee[_0xf786('0x3d')][_0xf786('0x3e')]!==_0xf786('0x3f')){var _0x3e3b87={};_0x3e3b87[_0x5336ee[_0xf786('0x40')]]={'$like':'%'+_0x418f49['query'][_0xf786('0x41')]+'%'};return _0x3e3b87;}})});}_0x55b1a5=_[_0xf786('0x3b')]({},_0x55b1a5,_0x418f49['options']);var _0x2e442e={'where':_0x55b1a5[_0xf786('0x39')]};return db[_0xf786('0x2c')][_0xf786('0x42')](_0x2e442e)['then'](function(_0x2d3c2b){_0x3821dd['count']=_0x2d3c2b;if(_0x418f49[_0xf786('0x30')][_0xf786('0x43')]){_0x55b1a5[_0xf786('0x44')]=[{'all':!![]}];}return db[_0xf786('0x2c')][_0xf786('0x45')](_0x55b1a5);})[_0xf786('0x25')](function(_0x68ecdd){_0x3821dd[_0xf786('0x46')]=_0x68ecdd;return _0x3821dd;})[_0xf786('0x25')](respondWithFilteredResult(_0x501e10,_0x55b1a5))[_0xf786('0x47')](handleError(_0x501e10,null));};exports[_0xf786('0x48')]=function(_0x538e2b,_0x531eae){var _0x156045={'raw':!![],'where':{'id':_0x538e2b['params']['id']}},_0x1b4b59={};_0x1b4b59[_0xf786('0x2e')]=_[_0xf786('0x2f')](db[_0xf786('0x2c')][_0xf786('0x2d')]);_0x1b4b59[_0xf786('0x30')]=_[_0xf786('0x2f')](_0x538e2b[_0xf786('0x30')]);_0x1b4b59[_0xf786('0x31')]=_[_0xf786('0x32')](_0x1b4b59['model'],_0x1b4b59[_0xf786('0x30')]);_0x156045[_0xf786('0x33')]=_['intersection'](_0x1b4b59[_0xf786('0x2e')],qs[_0xf786('0x34')](_0x538e2b[_0xf786('0x30')]['fields']));_0x156045['attributes']=_0x156045[_0xf786('0x33')][_0xf786('0x49')]?_0x156045[_0xf786('0x33')]:_0x1b4b59[_0xf786('0x2e')];if(_0x538e2b[_0xf786('0x30')]['includeAll']){_0x156045['include']=[{'all':!![]}];}_0x156045=_[_0xf786('0x3b')]({},_0x156045,_0x538e2b[_0xf786('0x4a')]);return db['SmsQueue'][_0xf786('0x4b')](_0x156045)[_0xf786('0x25')](handleEntityNotFound(_0x531eae,null))['then'](respondWithResult(_0x531eae,null))['catch'](handleError(_0x531eae,null));};exports[_0xf786('0x4c')]=function(_0x3ec62d,_0xd9d99c){return db[_0xf786('0x2c')][_0xf786('0x4c')](_0x3ec62d['body'],{})[_0xf786('0x25')](function(_0x2e2845){var _0x33f05c=_0x3ec62d[_0xf786('0x4d')]['get']({'plain':!![]});if(!_0x33f05c)throw new Error(_0xf786('0x4e'));if(_0x33f05c[_0xf786('0x4f')]==='user'){var _0x1d278f=_0x2e2845[_0xf786('0x50')]({'plain':!![]});var _0xf1e3cb='SmsQueues';return db[_0xf786('0x51')][_0xf786('0x4b')]({'where':{'name':_0xf1e3cb,'userProfileId':_0x33f05c['userProfileId']},'raw':!![]})[_0xf786('0x25')](function(_0x4bbb93){if(_0x4bbb93&&_0x4bbb93[_0xf786('0x52')]===0x0){return db[_0xf786('0x27')][_0xf786('0x4c')]({'name':_0x1d278f['name'],'resourceId':_0x1d278f['id'],'type':_0x4bbb93[_0xf786('0x2a')],'sectionId':_0x4bbb93['id']},{})['then'](function(){return _0x2e2845;});}else{return _0x2e2845;}})[_0xf786('0x47')](function(_0x5e3153){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x5e3153);throw _0x5e3153;});}return _0x2e2845;})['then'](respondWithResult(_0xd9d99c,0xc9))['catch'](handleError(_0xd9d99c,null));};exports[_0xf786('0x24')]=function(_0x3c7671,_0x1f16f8){if(_0x3c7671['body']['id']){delete _0x3c7671[_0xf786('0x53')]['id'];}return db[_0xf786('0x2c')]['find']({'where':{'id':_0x3c7671[_0xf786('0x54')]['id']}})[_0xf786('0x25')](handleEntityNotFound(_0x1f16f8,null))[_0xf786('0x25')](saveUpdates(_0x3c7671[_0xf786('0x53')],null))['then'](respondWithResult(_0x1f16f8,null))[_0xf786('0x47')](handleError(_0x1f16f8,null));};exports[_0xf786('0x28')]=function(_0x1fdb7f,_0x14ddf8){return db[_0xf786('0x2c')][_0xf786('0x4b')]({'where':{'id':_0x1fdb7f['params']['id']}})[_0xf786('0x25')](handleEntityNotFound(_0x14ddf8,null))['then'](removeEntity(_0x14ddf8,null))[_0xf786('0x47')](handleError(_0x14ddf8,null));};exports['describe']=function(_0x89f234,_0x7d1a05){return db[_0xf786('0x2c')][_0xf786('0x55')]()[_0xf786('0x25')](respondWithResult(_0x7d1a05,null))['catch'](handleError(_0x7d1a05,null));};exports[_0xf786('0x56')]=function(_0x22cf60,_0x7e48af,_0x3623db){var _0x3280f2={'raw':!![],'where':{}},_0x13f4da={},_0x59c3d1;return db[_0xf786('0x2c')]['findOne']({'where':{'id':_0x22cf60[_0xf786('0x54')]['id']}})['then'](handleEntityNotFound(_0x7e48af,null))['then'](function(_0x59b895){if(_0x59b895){_0x59c3d1=_0x59b895[_0xf786('0x50')]({'plain':!![]});_0x13f4da['model']=_['keys'](db['UserSmsQueue'][_0xf786('0x2d')]);_0x13f4da['query']=_[_0xf786('0x2f')](_0x22cf60[_0xf786('0x30')]);_0x13f4da[_0xf786('0x31')]=_[_0xf786('0x32')](_0x13f4da[_0xf786('0x2e')],_0x13f4da['query']);_0x3280f2['attributes']=_[_0xf786('0x32')](_0x13f4da[_0xf786('0x2e')],qs['fields'](_0x22cf60['query']['fields']));_0x3280f2['attributes']=_0x3280f2[_0xf786('0x33')]['length']?_0x3280f2[_0xf786('0x33')]:_0x13f4da['model'];if(!_0x22cf60['query'][_0xf786('0x35')](_0xf786('0x36'))){_0x3280f2['limit']=qs[_0xf786('0x21')](_0x22cf60[_0xf786('0x30')][_0xf786('0x21')]);_0x3280f2['offset']=qs[_0xf786('0x20')](_0x22cf60[_0xf786('0x30')][_0xf786('0x20')]);}_0x3280f2[_0xf786('0x37')]=qs[_0xf786('0x38')](_0x22cf60['query']['sort']);_0x3280f2[_0xf786('0x39')]=qs[_0xf786('0x31')](_[_0xf786('0x3a')](_0x22cf60['query'],_0x13f4da[_0xf786('0x31')]));_0x3280f2[_0xf786('0x39')][_0xf786('0x57')]=_0x59b895['id'];if(_0x22cf60['query'][_0xf786('0x41')]){_0x3280f2[_0xf786('0x39')]=_['merge'](_0x3280f2[_0xf786('0x39')],{'$or':_[_0xf786('0x3c')](_0x3280f2['attributes'],function(_0x62f55f){var _0x1dd124={};_0x1dd124[_0x62f55f]={'$like':'%'+_0x22cf60[_0xf786('0x30')][_0xf786('0x41')]+'%'};return _0x1dd124;})});}_0x3280f2=_[_0xf786('0x3b')]({},_0x3280f2,_0x22cf60[_0xf786('0x4a')]);return db[_0xf786('0x58')]['findAll'](_0x3280f2);}})[_0xf786('0x25')](function(_0x3d8a6f){if(_0x3d8a6f){return db['User'][_0xf786('0x59')]({'where':{'id':_[_0xf786('0x3c')](_0x3d8a6f,_0xf786('0x5a')),'role':'agent'},'attributes':['id',_0xf786('0x2a'),_0xf786('0x5b'),_0xf786('0x5c'),_0xf786('0x5d')]});}})[_0xf786('0x25')](function(_0x2cb41e){if(_0x2cb41e){return{'count':_0x2cb41e['count'],'rows':_[_0xf786('0x3c')](_0x2cb41e['rows'],function(_0xb7ac7a){return{'membername':_0xb7ac7a[_0xf786('0x2a')],'UserId':_0xb7ac7a['id'],'queue_name':_0x59c3d1[_0xf786('0x2a')],'SmsQueueId':_0x59c3d1['id'],'interface':util[_0xf786('0x5e')]('%s/%s',_0xf786('0x5f'),_0xb7ac7a['name']),'penalty':0x0,'paused':_0xb7ac7a[_0xf786('0x5b')],'createdAt':_0xb7ac7a[_0xf786('0x5d')],'updatedAt':_0xb7ac7a[_0xf786('0x5c')]};})};}else{return{'count':0x0,'rows':[]};}})[_0xf786('0x25')](respondWithFilteredResult(_0x7e48af,_0x3280f2))['catch'](handleError(_0x7e48af,null));};exports[_0xf786('0x60')]=function(_0x48186b,_0x4604a1,_0x4f72ea){var _0x5d846c={};var _0x542c80={};var _0x417156;var _0x5a5b18;return db[_0xf786('0x2c')][_0xf786('0x61')]({'where':{'id':_0x48186b[_0xf786('0x54')]['id']}})[_0xf786('0x25')](handleEntityNotFound(_0x4604a1,null))['then'](function(_0x1303b1){if(_0x1303b1){_0x417156=_0x1303b1;_0x542c80[_0xf786('0x2e')]=_[_0xf786('0x2f')](db[_0xf786('0x62')]['rawAttributes']);_0x542c80[_0xf786('0x30')]=_[_0xf786('0x2f')](_0x48186b[_0xf786('0x30')]);_0x542c80['filters']=_[_0xf786('0x32')](_0x542c80[_0xf786('0x2e')],_0x542c80['query']);_0x5d846c['attributes']=_['intersection'](_0x542c80[_0xf786('0x2e')],qs[_0xf786('0x34')](_0x48186b[_0xf786('0x30')][_0xf786('0x34')]));_0x5d846c[_0xf786('0x33')]=_0x5d846c['attributes']['length']?_0x5d846c[_0xf786('0x33')]:_0x542c80[_0xf786('0x2e')];_0x5d846c[_0xf786('0x37')]=qs[_0xf786('0x38')](_0x48186b[_0xf786('0x30')][_0xf786('0x38')]);_0x5d846c[_0xf786('0x39')]=qs['filters'](_[_0xf786('0x3a')](_0x48186b[_0xf786('0x30')],_0x542c80[_0xf786('0x31')]));if(_0x48186b[_0xf786('0x30')][_0xf786('0x41')]){_0x5d846c[_0xf786('0x39')]=_[_0xf786('0x3b')](_0x5d846c[_0xf786('0x39')],{'$or':_[_0xf786('0x3c')](_0x5d846c['attributes'],function(_0x4427a1){var _0x17cfda={};_0x17cfda[_0x4427a1]={'$like':'%'+_0x48186b[_0xf786('0x30')][_0xf786('0x41')]+'%'};return _0x17cfda;})});}_0x5d846c=_['merge']({},_0x5d846c,_0x48186b[_0xf786('0x4a')]);return _0x417156[_0xf786('0x60')](_0x5d846c);}})[_0xf786('0x25')](function(_0x713d50){if(_0x713d50){_0x5a5b18=_0x713d50[_0xf786('0x49')];if(!_0x48186b[_0xf786('0x30')][_0xf786('0x35')]('nolimit')){_0x5d846c[_0xf786('0x21')]=qs[_0xf786('0x21')](_0x48186b[_0xf786('0x30')]['limit']);_0x5d846c['offset']=qs[_0xf786('0x20')](_0x48186b[_0xf786('0x30')][_0xf786('0x20')]);}return _0x417156[_0xf786('0x60')](_0x5d846c);}})['then'](function(_0x7d570d){if(_0x7d570d){return _0x7d570d?{'count':_0x5a5b18,'rows':_0x7d570d}:null;}})[_0xf786('0x25')](respondWithResult(_0x4604a1,null))[_0xf786('0x47')](handleError(_0x4604a1,null));};exports[_0xf786('0x63')]=function(_0x3a7894,_0x44f7e7,_0x362692){var _0xcad145=[];var _0x5411ff;return db['Team'][_0xf786('0x45')]({'where':{'id':_0x3a7894[_0xf786('0x53')][_0xf786('0x64')]},'attributes':['id'],'include':[{'model':db[_0xf786('0x65')],'as':_0xf786('0x66'),'attributes':['id'],'raw':!![]}]})['then'](function(_0x7038b4){if(_0x7038b4){for(var _0x32e48d=0x0;_0x32e48d<_0x7038b4[_0xf786('0x49')];_0x32e48d+=0x1){for(var _0x41e187=0x0;_0x41e187<_0x7038b4[_0x32e48d]['Agents'][_0xf786('0x49')];_0x41e187+=0x1){_0xcad145=_[_0xf786('0x67')](_0xcad145,[_0x7038b4[_0x32e48d]['Agents'][_0x41e187]['id']]);}}return _0xcad145;}})[_0xf786('0x25')](function(_0xb80a58){if(_0xb80a58){return db[_0xf786('0x2c')][_0xf786('0x4b')]({'where':{'id':_0x3a7894[_0xf786('0x54')]['id']}});}})[_0xf786('0x25')](function(_0xc663dc){if(_0xc663dc){_0x5411ff=_0xc663dc;return _0x5411ff[_0xf786('0x68')](_0xcad145,{'penalty':_0x3a7894['body']['penalty']});}})['then'](function(_0x485417){if(_0x485417){return _0x5411ff['addTeams'](_0x3a7894[_0xf786('0x53')][_0xf786('0x64')]);}})['then'](handleEntityNotFound(_0x44f7e7,null))['then'](respondWithStatusCode(_0x44f7e7,null))[_0xf786('0x47')](handleError(_0x44f7e7,null));};exports[_0xf786('0x69')]=function(_0x231d69,_0x4d2bf2,_0x46b50c){var _0x256dd7=[];var _0x2795fa;return db[_0xf786('0x62')][_0xf786('0x45')]({'where':{'id':_0x231d69['query'][_0xf786('0x64')]},'attributes':['id'],'include':[{'model':db[_0xf786('0x65')],'as':_0xf786('0x66'),'attributes':['id'],'raw':!![]}]})[_0xf786('0x25')](function(_0x3a15f6){if(_0x3a15f6){for(var _0x2f77d6=0x0;_0x2f77d6<_0x3a15f6[_0xf786('0x49')];_0x2f77d6+=0x1){for(var _0x41d642=0x0;_0x41d642<_0x3a15f6[_0x2f77d6]['Agents'][_0xf786('0x49')];_0x41d642+=0x1){_0x256dd7=_[_0xf786('0x67')](_0x256dd7,[_0x3a15f6[_0x2f77d6][_0xf786('0x66')][_0x41d642]['id']]);}}return _0x256dd7;}})[_0xf786('0x25')](function(_0x473295){if(_0x473295){return db[_0xf786('0x2c')][_0xf786('0x4b')]({'where':{'id':_0x231d69[_0xf786('0x54')]['id']}});}})['then'](function(_0x44134c){if(_0x44134c){_0x2795fa=_0x44134c;return _0x2795fa['removeAgents'](_0x256dd7);}})[_0xf786('0x25')](function(_0x401e9a){if(_0x2795fa){return _0x2795fa['removeTeams'](_0x231d69[_0xf786('0x30')][_0xf786('0x64')]);}})[_0xf786('0x25')](handleEntityNotFound(_0x4d2bf2,null))[_0xf786('0x25')](respondWithStatusCode(_0x4d2bf2,null))['catch'](handleError(_0x4d2bf2,null));};exports[_0xf786('0x68')]=function(_0x58a670,_0x5c8d52,_0xe55d5){return db[_0xf786('0x2c')][_0xf786('0x4b')]({'where':{'id':_0x58a670[_0xf786('0x54')]['id']}})['then'](handleEntityNotFound(_0x5c8d52,null))[_0xf786('0x25')](function(_0x4d1709){if(_0x4d1709){return _0x4d1709[_0xf786('0x68')](_0x58a670[_0xf786('0x53')][_0xf786('0x64')],_[_0xf786('0x6a')](_0x58a670[_0xf786('0x53')],[_0xf786('0x64'),'id'])||{})[_0xf786('0x6b')](function(_0xe4af8d){for(var _0x4d4b60=0x0;_0x4d4b60<_0x58a670[_0xf786('0x53')]['ids'][_0xf786('0x49')];_0x4d4b60+=0x1){socket[_0xf786('0x6c')]('userSmsQueue:save',{'UserId':_0x58a670[_0xf786('0x53')]['ids'][_0x4d4b60],'SmsQueueId':_0x58a670[_0xf786('0x54')]['id']});}return _0xe4af8d;});}})[_0xf786('0x25')](respondWithResult(_0x5c8d52,null))[_0xf786('0x47')](handleError(_0x5c8d52,null));};exports[_0xf786('0x6d')]=function(_0x175132,_0x301a63,_0x40379d){var _0x59077e;return db[_0xf786('0x2c')]['find']({'where':{'id':_0x175132[_0xf786('0x54')]['id']}})['then'](handleEntityNotFound(_0x301a63,null))[_0xf786('0x25')](function(_0x22fdab){if(_0x22fdab){return _0x22fdab[_0xf786('0x6d')](_0x175132[_0xf786('0x30')]['ids'])[_0xf786('0x25')](function(_0x128255){if(_[_0xf786('0x6e')](_0x175132['query'][_0xf786('0x64')])){for(var _0xb4e1e5=0x0;_0xb4e1e5<_0x175132[_0xf786('0x30')][_0xf786('0x64')][_0xf786('0x49')];_0xb4e1e5+=0x1){socket['emit'](_0xf786('0x6f'),{'UserId':_0x175132['query']['ids'][_0xb4e1e5],'SmsQueueId':_0x175132[_0xf786('0x54')]['id']});}}else{socket[_0xf786('0x6c')]('userSmsQueue:remove',{'UserId':_0x175132[_0xf786('0x30')]['ids'],'SmsQueueId':_0x175132['params']['id']});}});}})[_0xf786('0x25')](respondWithStatusCode(_0x301a63,null))['catch'](handleError(_0x301a63,null));};exports['getAgents']=function(_0x3296da,_0x1449a7,_0x12e60f){var _0x3da5eb={};var _0x4ea0a0={};var _0x5ee408;var _0xe298b2;return db[_0xf786('0x2c')][_0xf786('0x61')]({'where':{'id':_0x3296da['params']['id']}})[_0xf786('0x25')](handleEntityNotFound(_0x1449a7,null))[_0xf786('0x25')](function(_0x272c93){if(_0x272c93){_0x5ee408=_0x272c93;_0x4ea0a0[_0xf786('0x2e')]=_['keys'](db[_0xf786('0x65')]['rawAttributes']);_0x4ea0a0['query']=_[_0xf786('0x2f')](_0x3296da[_0xf786('0x30')]);_0x4ea0a0['filters']=_[_0xf786('0x32')](_0x4ea0a0[_0xf786('0x2e')],_0x4ea0a0[_0xf786('0x30')]);_0x3da5eb[_0xf786('0x33')]=_[_0xf786('0x32')](_0x4ea0a0['model'],qs[_0xf786('0x34')](_0x3296da[_0xf786('0x30')][_0xf786('0x34')]));_0x3da5eb['attributes']=_0x3da5eb[_0xf786('0x33')]['length']?_0x3da5eb[_0xf786('0x33')]:_0x4ea0a0[_0xf786('0x2e')];_0x3da5eb[_0xf786('0x37')]=qs[_0xf786('0x38')](_0x3296da[_0xf786('0x30')][_0xf786('0x38')]);_0x3da5eb[_0xf786('0x39')]=qs[_0xf786('0x31')](_[_0xf786('0x3a')](_0x3296da[_0xf786('0x30')],_0x4ea0a0[_0xf786('0x31')]));if(_0x3296da[_0xf786('0x30')][_0xf786('0x41')]){_0x3da5eb[_0xf786('0x39')]=_['merge'](_0x3da5eb[_0xf786('0x39')],{'$or':_['map'](_0x3da5eb['attributes'],function(_0x44c88f){var _0x3f4986={};_0x3f4986[_0x44c88f]={'$like':'%'+_0x3296da[_0xf786('0x30')][_0xf786('0x41')]+'%'};return _0x3f4986;})});}_0x3da5eb=_[_0xf786('0x3b')]({},_0x3da5eb,_0x3296da[_0xf786('0x4a')]);return _0x5ee408['getAgents'](_0x3da5eb);}})['then'](function(_0x4b8f7f){if(_0x4b8f7f){_0xe298b2=_0x4b8f7f[_0xf786('0x49')];if(!_0x3296da['query'][_0xf786('0x35')](_0xf786('0x36'))){_0x3da5eb[_0xf786('0x21')]=qs[_0xf786('0x21')](_0x3296da['query'][_0xf786('0x21')]);_0x3da5eb['offset']=qs['offset'](_0x3296da[_0xf786('0x30')][_0xf786('0x20')]);}return _0x5ee408['getAgents'](_0x3da5eb);}})[_0xf786('0x25')](function(_0x586ac5){if(_0x586ac5){return _0x586ac5?{'count':_0xe298b2,'rows':_0x586ac5}:null;}})[_0xf786('0x25')](respondWithResult(_0x1449a7,null))['catch'](handleError(_0x1449a7,null));};
\ No newline at end of file
+var _0x9e4e=['type','VIRTUAL','field','merge','options','rows','catch','params','includeAll','include','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','find','describe','getMembers','findOne','UserSmsQueue','length','hasOwnProperty','findAll','User','findAndCountAll','UserId','agent','smsPause','SIP','getTeams','Team','ids','Agents','addAgents','addTeams','removeTeams','union','omit','emit','userSmsQueue:save','removeAgents','isArray','userSmsQueue:remove','getAgents','html-pdf','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','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./smsQueue.socket','register','sendStatus','status','end','json','count','limit','set','Content-Range','apply','reject','save','update','then','destroy','get','SmsQueues','UserProfileResource','error','stack','name','index','SmsQueue','rawAttributes','keys','query','filters','intersection','model','fields','attributes','nolimit','offset','order','sort','where','pick','filter','map'];(function(_0x58736a,_0x5d0121){var _0x4518e2=function(_0x2d9433){while(--_0x2d9433){_0x58736a['push'](_0x58736a['shift']());}};_0x4518e2(++_0x5d0121);}(_0x9e4e,0x117));var _0xe9e4=function(_0x2cceb2,_0x11cb55){_0x2cceb2=_0x2cceb2-0x0;var _0xd6c7c4=_0x9e4e[_0x2cceb2];return _0xd6c7c4;};'use strict';var pdf=require(_0xe9e4('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xe9e4('0x1'));var zipdir=require(_0xe9e4('0x2'));var jsonpatch=require(_0xe9e4('0x3'));var rp=require(_0xe9e4('0x4'));var moment=require('moment');var BPromise=require(_0xe9e4('0x5'));var Mustache=require(_0xe9e4('0x6'));var util=require(_0xe9e4('0x7'));var path=require(_0xe9e4('0x8'));var sox=require(_0xe9e4('0x9'));var csv=require(_0xe9e4('0xa'));var ejs=require(_0xe9e4('0xb'));var fs=require('fs');var _=require(_0xe9e4('0xc'));var squel=require(_0xe9e4('0xd'));var crypto=require(_0xe9e4('0xe'));var jsforce=require(_0xe9e4('0xf'));var deskjs=require(_0xe9e4('0x10'));var toCsv=require(_0xe9e4('0xa'));var querystring=require(_0xe9e4('0x11'));var Papa=require(_0xe9e4('0x12'));var authService=require(_0xe9e4('0x13'));var hardwareService=require(_0xe9e4('0x14'));var Redis=require(_0xe9e4('0x15'));var qs=require(_0xe9e4('0x16'));var logger=require(_0xe9e4('0x17'))(_0xe9e4('0x18'));var utils=require(_0xe9e4('0x19'));var config=require(_0xe9e4('0x1a'));var db=require(_0xe9e4('0x1b'))['db'];config[_0xe9e4('0x1c')]=_[_0xe9e4('0x1d')](config['redis'],{'host':_0xe9e4('0x1e'),'port':0x18eb});var socket=require(_0xe9e4('0x1f'))(new Redis(config[_0xe9e4('0x1c')]));require(_0xe9e4('0x20'))[_0xe9e4('0x21')](socket);function respondWithStatusCode(_0x5c77c8,_0x4f9001){_0x4f9001=_0x4f9001||0xcc;return function(_0x2f01db){if(_0x2f01db){return _0x5c77c8[_0xe9e4('0x22')](_0x4f9001);}return _0x5c77c8[_0xe9e4('0x23')](_0x4f9001)[_0xe9e4('0x24')]();};}function respondWithResult(_0xca8b02,_0x2519f6){_0x2519f6=_0x2519f6||0xc8;return function(_0x419e43){if(_0x419e43){return _0xca8b02[_0xe9e4('0x23')](_0x2519f6)[_0xe9e4('0x25')](_0x419e43);}};}function respondWithFilteredResult(_0x86f3af,_0x3e102a){return function(_0x2fd241){if(_0x2fd241){var _0x3abe5b=_0x2fd241[_0xe9e4('0x26')],_0x34b813=_0x3e102a['offset'],_0x403cef=_0x3e102a['offset']+_0x3e102a[_0xe9e4('0x27')],_0x38798d;if(_0x403cef>=_0x3abe5b){_0x403cef=_0x3abe5b;_0x38798d=0xc8;}else{_0x38798d=0xce;}_0x86f3af['status'](_0x38798d);return _0x86f3af[_0xe9e4('0x28')](_0xe9e4('0x29'),_0x34b813+'-'+_0x403cef+'/'+_0x3abe5b)['json'](_0x2fd241);}return null;};}function patchUpdates(_0x66cb74){return function(_0x372c57){try{jsonpatch[_0xe9e4('0x2a')](_0x372c57,_0x66cb74,!![]);}catch(_0x3c1582){return BPromise[_0xe9e4('0x2b')](_0x3c1582);}return _0x372c57[_0xe9e4('0x2c')]();};}function saveUpdates(_0x5236d7,_0x5db0eb){return function(_0x462b5a){if(_0x462b5a){return _0x462b5a[_0xe9e4('0x2d')](_0x5236d7)[_0xe9e4('0x2e')](function(_0x4997b0){return _0x4997b0;});}return null;};}function removeEntity(_0x470580,_0x33a6f6){return function(_0x3eefa0){if(_0x3eefa0){return _0x3eefa0[_0xe9e4('0x2f')]()[_0xe9e4('0x2e')](function(){var _0x4fdf02=_0x3eefa0[_0xe9e4('0x30')]({'plain':!![]});var _0x49439b=_0xe9e4('0x31');return db[_0xe9e4('0x32')]['destroy']({'where':{'type':_0x49439b,'resourceId':_0x4fdf02['id']}})[_0xe9e4('0x2e')](function(){return _0x3eefa0;});})['then'](function(){_0x470580[_0xe9e4('0x23')](0xcc)[_0xe9e4('0x24')]();});}};}function handleEntityNotFound(_0x5c56fd,_0x3e3698){return function(_0x5989bd){if(!_0x5989bd){_0x5c56fd[_0xe9e4('0x22')](0x194);}return _0x5989bd;};}function handleError(_0x435ee2,_0x189482){_0x189482=_0x189482||0x1f4;return function(_0x356419){logger[_0xe9e4('0x33')](_0x356419[_0xe9e4('0x34')]);if(_0x356419['name']){delete _0x356419[_0xe9e4('0x35')];}_0x435ee2[_0xe9e4('0x23')](_0x189482)['send'](_0x356419);};}exports[_0xe9e4('0x36')]=function(_0x2adf08,_0x227cad){var _0x102218={},_0x2b3b88={},_0x17da65={'count':0x0,'rows':[]};var _0x2efa4e=db[_0xe9e4('0x37')][_0xe9e4('0x38')];_0x2b3b88['model']=_[_0xe9e4('0x39')](_0x2efa4e);_0x2b3b88[_0xe9e4('0x3a')]=_[_0xe9e4('0x39')](_0x2adf08[_0xe9e4('0x3a')]);_0x2b3b88[_0xe9e4('0x3b')]=_[_0xe9e4('0x3c')](_0x2b3b88[_0xe9e4('0x3d')],_0x2b3b88[_0xe9e4('0x3a')]);_0x102218['attributes']=_[_0xe9e4('0x3c')](_0x2b3b88[_0xe9e4('0x3d')],qs[_0xe9e4('0x3e')](_0x2adf08[_0xe9e4('0x3a')][_0xe9e4('0x3e')]));_0x102218['attributes']=_0x102218[_0xe9e4('0x3f')]['length']?_0x102218[_0xe9e4('0x3f')]:_0x2b3b88[_0xe9e4('0x3d')];if(!_0x2adf08['query']['hasOwnProperty'](_0xe9e4('0x40'))){_0x102218[_0xe9e4('0x27')]=qs[_0xe9e4('0x27')](_0x2adf08[_0xe9e4('0x3a')]['limit']);_0x102218[_0xe9e4('0x41')]=qs['offset'](_0x2adf08[_0xe9e4('0x3a')]['offset']);}_0x102218[_0xe9e4('0x42')]=qs['sort'](_0x2adf08['query'][_0xe9e4('0x43')]);_0x102218[_0xe9e4('0x44')]=qs[_0xe9e4('0x3b')](_[_0xe9e4('0x45')](_0x2adf08[_0xe9e4('0x3a')],_0x2b3b88[_0xe9e4('0x3b')]));if(_0x2adf08[_0xe9e4('0x3a')][_0xe9e4('0x46')]){_0x102218[_0xe9e4('0x44')]=_['merge'](_0x102218['where'],{'$or':_[_0xe9e4('0x47')](_0x2efa4e,function(_0x21bd31){if(_0x21bd31[_0xe9e4('0x48')]['key']!==_0xe9e4('0x49')){var _0x4c7af0={};_0x4c7af0[_0x21bd31[_0xe9e4('0x4a')]]={'$like':'%'+_0x2adf08[_0xe9e4('0x3a')][_0xe9e4('0x46')]+'%'};return _0x4c7af0;}})});}_0x102218=_[_0xe9e4('0x4b')]({},_0x102218,_0x2adf08[_0xe9e4('0x4c')]);var _0x64b25a={'where':_0x102218[_0xe9e4('0x44')]};return db[_0xe9e4('0x37')][_0xe9e4('0x26')](_0x64b25a)[_0xe9e4('0x2e')](function(_0x2e24ff){_0x17da65[_0xe9e4('0x26')]=_0x2e24ff;if(_0x2adf08[_0xe9e4('0x3a')]['includeAll']){_0x102218['include']=[{'all':!![]}];}return db[_0xe9e4('0x37')]['findAll'](_0x102218);})[_0xe9e4('0x2e')](function(_0x364ae2){_0x17da65[_0xe9e4('0x4d')]=_0x364ae2;return _0x17da65;})[_0xe9e4('0x2e')](respondWithFilteredResult(_0x227cad,_0x102218))[_0xe9e4('0x4e')](handleError(_0x227cad,null));};exports['show']=function(_0x54d7fa,_0x3e5267){var _0x45f076={'raw':!![],'where':{'id':_0x54d7fa[_0xe9e4('0x4f')]['id']}},_0x219c82={};_0x219c82[_0xe9e4('0x3d')]=_['keys'](db['SmsQueue'][_0xe9e4('0x38')]);_0x219c82['query']=_[_0xe9e4('0x39')](_0x54d7fa['query']);_0x219c82[_0xe9e4('0x3b')]=_[_0xe9e4('0x3c')](_0x219c82[_0xe9e4('0x3d')],_0x219c82[_0xe9e4('0x3a')]);_0x45f076[_0xe9e4('0x3f')]=_['intersection'](_0x219c82[_0xe9e4('0x3d')],qs[_0xe9e4('0x3e')](_0x54d7fa['query']['fields']));_0x45f076[_0xe9e4('0x3f')]=_0x45f076[_0xe9e4('0x3f')]['length']?_0x45f076['attributes']:_0x219c82['model'];if(_0x54d7fa[_0xe9e4('0x3a')][_0xe9e4('0x50')]){_0x45f076[_0xe9e4('0x51')]=[{'all':!![]}];}_0x45f076=_[_0xe9e4('0x4b')]({},_0x45f076,_0x54d7fa[_0xe9e4('0x4c')]);return db[_0xe9e4('0x37')]['find'](_0x45f076)[_0xe9e4('0x2e')](handleEntityNotFound(_0x3e5267,null))[_0xe9e4('0x2e')](respondWithResult(_0x3e5267,null))[_0xe9e4('0x4e')](handleError(_0x3e5267,null));};exports[_0xe9e4('0x52')]=function(_0x2f2735,_0x3fee07){return db[_0xe9e4('0x37')][_0xe9e4('0x52')](_0x2f2735[_0xe9e4('0x53')],{})[_0xe9e4('0x2e')](function(_0x598dee){var _0x5a2f05=_0x2f2735[_0xe9e4('0x54')][_0xe9e4('0x30')]({'plain':!![]});if(!_0x5a2f05)throw new Error(_0xe9e4('0x55'));if(_0x5a2f05['role']===_0xe9e4('0x54')){var _0x4616fe=_0x598dee['get']({'plain':!![]});var _0x37f02f='SmsQueues';return db['UserProfileSection']['find']({'where':{'name':_0x37f02f,'userProfileId':_0x5a2f05['userProfileId']},'raw':!![]})[_0xe9e4('0x2e')](function(_0x131ed2){if(_0x131ed2&&_0x131ed2[_0xe9e4('0x56')]===0x0){return db[_0xe9e4('0x32')]['create']({'name':_0x4616fe[_0xe9e4('0x35')],'resourceId':_0x4616fe['id'],'type':_0x131ed2[_0xe9e4('0x35')],'sectionId':_0x131ed2['id']},{})[_0xe9e4('0x2e')](function(){return _0x598dee;});}else{return _0x598dee;}})['catch'](function(_0xd955f4){logger[_0xe9e4('0x33')](_0xe9e4('0x57'),_0xd955f4);throw _0xd955f4;});}return _0x598dee;})[_0xe9e4('0x2e')](respondWithResult(_0x3fee07,0xc9))[_0xe9e4('0x4e')](handleError(_0x3fee07,null));};exports[_0xe9e4('0x2d')]=function(_0xad95e6,_0x14db14){if(_0xad95e6['body']['id']){delete _0xad95e6[_0xe9e4('0x53')]['id'];}return db['SmsQueue'][_0xe9e4('0x58')]({'where':{'id':_0xad95e6['params']['id']}})['then'](handleEntityNotFound(_0x14db14,null))[_0xe9e4('0x2e')](saveUpdates(_0xad95e6['body'],null))['then'](respondWithResult(_0x14db14,null))[_0xe9e4('0x4e')](handleError(_0x14db14,null));};exports['destroy']=function(_0x4a77de,_0x5ce50a){return db[_0xe9e4('0x37')][_0xe9e4('0x58')]({'where':{'id':_0x4a77de[_0xe9e4('0x4f')]['id']}})[_0xe9e4('0x2e')](handleEntityNotFound(_0x5ce50a,null))[_0xe9e4('0x2e')](removeEntity(_0x5ce50a,null))[_0xe9e4('0x4e')](handleError(_0x5ce50a,null));};exports['describe']=function(_0x5efc6c,_0x2dd500){return db[_0xe9e4('0x37')][_0xe9e4('0x59')]()[_0xe9e4('0x2e')](respondWithResult(_0x2dd500,null))[_0xe9e4('0x4e')](handleError(_0x2dd500,null));};exports[_0xe9e4('0x5a')]=function(_0x42fd46,_0x37bd05,_0x271b9f){var _0x2295b0={'raw':!![],'where':{}},_0x573504={},_0x8bcf7f;return db['SmsQueue'][_0xe9e4('0x5b')]({'where':{'id':_0x42fd46[_0xe9e4('0x4f')]['id']}})[_0xe9e4('0x2e')](handleEntityNotFound(_0x37bd05,null))['then'](function(_0xb21242){if(_0xb21242){_0x8bcf7f=_0xb21242[_0xe9e4('0x30')]({'plain':!![]});_0x573504[_0xe9e4('0x3d')]=_[_0xe9e4('0x39')](db[_0xe9e4('0x5c')][_0xe9e4('0x38')]);_0x573504['query']=_['keys'](_0x42fd46[_0xe9e4('0x3a')]);_0x573504[_0xe9e4('0x3b')]=_['intersection'](_0x573504[_0xe9e4('0x3d')],_0x573504[_0xe9e4('0x3a')]);_0x2295b0[_0xe9e4('0x3f')]=_[_0xe9e4('0x3c')](_0x573504[_0xe9e4('0x3d')],qs[_0xe9e4('0x3e')](_0x42fd46[_0xe9e4('0x3a')]['fields']));_0x2295b0[_0xe9e4('0x3f')]=_0x2295b0[_0xe9e4('0x3f')][_0xe9e4('0x5d')]?_0x2295b0[_0xe9e4('0x3f')]:_0x573504[_0xe9e4('0x3d')];if(!_0x42fd46['query'][_0xe9e4('0x5e')]('nolimit')){_0x2295b0['limit']=qs[_0xe9e4('0x27')](_0x42fd46[_0xe9e4('0x3a')][_0xe9e4('0x27')]);_0x2295b0['offset']=qs['offset'](_0x42fd46[_0xe9e4('0x3a')][_0xe9e4('0x41')]);}_0x2295b0[_0xe9e4('0x42')]=qs[_0xe9e4('0x43')](_0x42fd46[_0xe9e4('0x3a')][_0xe9e4('0x43')]);_0x2295b0['where']=qs[_0xe9e4('0x3b')](_[_0xe9e4('0x45')](_0x42fd46[_0xe9e4('0x3a')],_0x573504['filters']));_0x2295b0['where']['SmsQueueId']=_0xb21242['id'];if(_0x42fd46['query'][_0xe9e4('0x46')]){_0x2295b0[_0xe9e4('0x44')]=_['merge'](_0x2295b0['where'],{'$or':_[_0xe9e4('0x47')](_0x2295b0[_0xe9e4('0x3f')],function(_0x4c3fde){var _0xb30e47={};_0xb30e47[_0x4c3fde]={'$like':'%'+_0x42fd46['query'][_0xe9e4('0x46')]+'%'};return _0xb30e47;})});}_0x2295b0=_[_0xe9e4('0x4b')]({},_0x2295b0,_0x42fd46[_0xe9e4('0x4c')]);return db[_0xe9e4('0x5c')][_0xe9e4('0x5f')](_0x2295b0);}})[_0xe9e4('0x2e')](function(_0x4290ba){if(_0x4290ba){return db[_0xe9e4('0x60')][_0xe9e4('0x61')]({'where':{'id':_['map'](_0x4290ba,_0xe9e4('0x62')),'role':_0xe9e4('0x63')},'attributes':['id',_0xe9e4('0x35'),_0xe9e4('0x64'),'updatedAt','createdAt']});}})[_0xe9e4('0x2e')](function(_0xa796e0){if(_0xa796e0){return{'count':_0xa796e0[_0xe9e4('0x26')],'rows':_[_0xe9e4('0x47')](_0xa796e0[_0xe9e4('0x4d')],function(_0x44ae60){return{'membername':_0x44ae60['name'],'UserId':_0x44ae60['id'],'queue_name':_0x8bcf7f['name'],'SmsQueueId':_0x8bcf7f['id'],'interface':util['format']('%s/%s',_0xe9e4('0x65'),_0x44ae60[_0xe9e4('0x35')]),'penalty':0x0,'paused':_0x44ae60[_0xe9e4('0x64')],'createdAt':_0x44ae60['createdAt'],'updatedAt':_0x44ae60['updatedAt']};})};}else{return{'count':0x0,'rows':[]};}})[_0xe9e4('0x2e')](respondWithFilteredResult(_0x37bd05,_0x2295b0))[_0xe9e4('0x4e')](handleError(_0x37bd05,null));};exports[_0xe9e4('0x66')]=function(_0x3bb66c,_0x124532,_0x149525){var _0x233557={};var _0x16811c={};var _0x209876;var _0x26cba8;return db[_0xe9e4('0x37')]['findOne']({'where':{'id':_0x3bb66c[_0xe9e4('0x4f')]['id']}})[_0xe9e4('0x2e')](handleEntityNotFound(_0x124532,null))['then'](function(_0x3747ae){if(_0x3747ae){_0x209876=_0x3747ae;_0x16811c[_0xe9e4('0x3d')]=_['keys'](db['Team'][_0xe9e4('0x38')]);_0x16811c[_0xe9e4('0x3a')]=_[_0xe9e4('0x39')](_0x3bb66c['query']);_0x16811c['filters']=_[_0xe9e4('0x3c')](_0x16811c[_0xe9e4('0x3d')],_0x16811c[_0xe9e4('0x3a')]);_0x233557[_0xe9e4('0x3f')]=_[_0xe9e4('0x3c')](_0x16811c[_0xe9e4('0x3d')],qs['fields'](_0x3bb66c[_0xe9e4('0x3a')][_0xe9e4('0x3e')]));_0x233557['attributes']=_0x233557[_0xe9e4('0x3f')][_0xe9e4('0x5d')]?_0x233557[_0xe9e4('0x3f')]:_0x16811c[_0xe9e4('0x3d')];_0x233557['order']=qs[_0xe9e4('0x43')](_0x3bb66c[_0xe9e4('0x3a')][_0xe9e4('0x43')]);_0x233557[_0xe9e4('0x44')]=qs[_0xe9e4('0x3b')](_[_0xe9e4('0x45')](_0x3bb66c[_0xe9e4('0x3a')],_0x16811c['filters']));if(_0x3bb66c[_0xe9e4('0x3a')]['filter']){_0x233557[_0xe9e4('0x44')]=_[_0xe9e4('0x4b')](_0x233557[_0xe9e4('0x44')],{'$or':_['map'](_0x233557[_0xe9e4('0x3f')],function(_0x3bd6c9){var _0x5bb8ec={};_0x5bb8ec[_0x3bd6c9]={'$like':'%'+_0x3bb66c[_0xe9e4('0x3a')][_0xe9e4('0x46')]+'%'};return _0x5bb8ec;})});}_0x233557=_['merge']({},_0x233557,_0x3bb66c['options']);return _0x209876[_0xe9e4('0x66')](_0x233557);}})[_0xe9e4('0x2e')](function(_0x12e434){if(_0x12e434){_0x26cba8=_0x12e434[_0xe9e4('0x5d')];if(!_0x3bb66c[_0xe9e4('0x3a')]['hasOwnProperty'](_0xe9e4('0x40'))){_0x233557[_0xe9e4('0x27')]=qs['limit'](_0x3bb66c[_0xe9e4('0x3a')]['limit']);_0x233557['offset']=qs[_0xe9e4('0x41')](_0x3bb66c[_0xe9e4('0x3a')]['offset']);}return _0x209876[_0xe9e4('0x66')](_0x233557);}})['then'](function(_0x28d1d1){if(_0x28d1d1){return _0x28d1d1?{'count':_0x26cba8,'rows':_0x28d1d1}:null;}})['then'](respondWithResult(_0x124532,null))[_0xe9e4('0x4e')](handleError(_0x124532,null));};exports['addTeams']=function(_0x7f3f3f,_0x50aaad,_0x4c323b){var _0x13d5f0=[];var _0x4c8f0a;return db[_0xe9e4('0x67')][_0xe9e4('0x5f')]({'where':{'id':_0x7f3f3f[_0xe9e4('0x53')][_0xe9e4('0x68')]},'attributes':['id'],'include':[{'model':db[_0xe9e4('0x60')],'as':_0xe9e4('0x69'),'attributes':['id'],'raw':!![]}]})[_0xe9e4('0x2e')](function(_0x2e9010){if(_0x2e9010){for(var _0x519130=0x0;_0x519130<_0x2e9010[_0xe9e4('0x5d')];_0x519130+=0x1){for(var _0x20efad=0x0;_0x20efad<_0x2e9010[_0x519130][_0xe9e4('0x69')]['length'];_0x20efad+=0x1){_0x13d5f0=_['union'](_0x13d5f0,[_0x2e9010[_0x519130][_0xe9e4('0x69')][_0x20efad]['id']]);}}return _0x13d5f0;}})['then'](function(_0x1ae311){if(_0x1ae311){return db['SmsQueue'][_0xe9e4('0x58')]({'where':{'id':_0x7f3f3f[_0xe9e4('0x4f')]['id']}});}})[_0xe9e4('0x2e')](function(_0x220e2c){if(_0x220e2c){_0x4c8f0a=_0x220e2c;return _0x4c8f0a[_0xe9e4('0x6a')](_0x13d5f0,{'penalty':_0x7f3f3f[_0xe9e4('0x53')]['penalty']});}})[_0xe9e4('0x2e')](function(_0x25f14e){if(_0x25f14e){return _0x4c8f0a[_0xe9e4('0x6b')](_0x7f3f3f['body']['ids']);}})['then'](handleEntityNotFound(_0x50aaad,null))[_0xe9e4('0x2e')](respondWithStatusCode(_0x50aaad,null))[_0xe9e4('0x4e')](handleError(_0x50aaad,null));};exports[_0xe9e4('0x6c')]=function(_0x23f042,_0x12a0c3,_0x35f333){var _0x7ece5a=[];var _0x4e19e7;return db[_0xe9e4('0x67')][_0xe9e4('0x5f')]({'where':{'id':_0x23f042['query'][_0xe9e4('0x68')]},'attributes':['id'],'include':[{'model':db['User'],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0xe9e4('0x2e')](function(_0x19335e){if(_0x19335e){for(var _0x5443e0=0x0;_0x5443e0<_0x19335e['length'];_0x5443e0+=0x1){for(var _0x5ea013=0x0;_0x5ea013<_0x19335e[_0x5443e0][_0xe9e4('0x69')][_0xe9e4('0x5d')];_0x5ea013+=0x1){_0x7ece5a=_[_0xe9e4('0x6d')](_0x7ece5a,[_0x19335e[_0x5443e0]['Agents'][_0x5ea013]['id']]);}}return _0x7ece5a;}})[_0xe9e4('0x2e')](function(_0x542f75){if(_0x542f75){return db[_0xe9e4('0x37')]['find']({'where':{'id':_0x23f042[_0xe9e4('0x4f')]['id']}});}})['then'](function(_0x29e11b){if(_0x29e11b){_0x4e19e7=_0x29e11b;return _0x4e19e7['removeAgents'](_0x7ece5a);}})[_0xe9e4('0x2e')](function(_0x5830a9){if(_0x4e19e7){return _0x4e19e7['removeTeams'](_0x23f042[_0xe9e4('0x3a')][_0xe9e4('0x68')]);}})['then'](handleEntityNotFound(_0x12a0c3,null))[_0xe9e4('0x2e')](respondWithStatusCode(_0x12a0c3,null))[_0xe9e4('0x4e')](handleError(_0x12a0c3,null));};exports['addAgents']=function(_0x3ffff8,_0x2c20da,_0x2085c2){return db[_0xe9e4('0x37')][_0xe9e4('0x58')]({'where':{'id':_0x3ffff8['params']['id']}})[_0xe9e4('0x2e')](handleEntityNotFound(_0x2c20da,null))[_0xe9e4('0x2e')](function(_0x1d5562){if(_0x1d5562){return _0x1d5562[_0xe9e4('0x6a')](_0x3ffff8[_0xe9e4('0x53')][_0xe9e4('0x68')],_[_0xe9e4('0x6e')](_0x3ffff8[_0xe9e4('0x53')],['ids','id'])||{})['spread'](function(_0x13cb22){for(var _0x5ed518=0x0;_0x5ed518<_0x3ffff8[_0xe9e4('0x53')][_0xe9e4('0x68')][_0xe9e4('0x5d')];_0x5ed518+=0x1){socket[_0xe9e4('0x6f')](_0xe9e4('0x70'),{'UserId':_0x3ffff8[_0xe9e4('0x53')]['ids'][_0x5ed518],'SmsQueueId':_0x3ffff8[_0xe9e4('0x4f')]['id']});}return _0x13cb22;});}})[_0xe9e4('0x2e')](respondWithResult(_0x2c20da,null))[_0xe9e4('0x4e')](handleError(_0x2c20da,null));};exports[_0xe9e4('0x71')]=function(_0x496b8d,_0x4734d7,_0x105694){var _0x6ea3ac;return db[_0xe9e4('0x37')][_0xe9e4('0x58')]({'where':{'id':_0x496b8d['params']['id']}})[_0xe9e4('0x2e')](handleEntityNotFound(_0x4734d7,null))[_0xe9e4('0x2e')](function(_0x254cad){if(_0x254cad){return _0x254cad[_0xe9e4('0x71')](_0x496b8d[_0xe9e4('0x3a')]['ids'])[_0xe9e4('0x2e')](function(_0x3409cb){if(_[_0xe9e4('0x72')](_0x496b8d[_0xe9e4('0x3a')]['ids'])){for(var _0x488100=0x0;_0x488100<_0x496b8d['query'][_0xe9e4('0x68')][_0xe9e4('0x5d')];_0x488100+=0x1){socket[_0xe9e4('0x6f')](_0xe9e4('0x73'),{'UserId':_0x496b8d[_0xe9e4('0x3a')]['ids'][_0x488100],'SmsQueueId':_0x496b8d[_0xe9e4('0x4f')]['id']});}}else{socket[_0xe9e4('0x6f')](_0xe9e4('0x73'),{'UserId':_0x496b8d[_0xe9e4('0x3a')][_0xe9e4('0x68')],'SmsQueueId':_0x496b8d[_0xe9e4('0x4f')]['id']});}});}})[_0xe9e4('0x2e')](respondWithStatusCode(_0x4734d7,null))[_0xe9e4('0x4e')](handleError(_0x4734d7,null));};exports[_0xe9e4('0x74')]=function(_0x5f5c1d,_0x5809ff,_0x239234){var _0x113e9f={};var _0x1df58c={};var _0x3494d1;var _0x4dba70;return db[_0xe9e4('0x37')][_0xe9e4('0x5b')]({'where':{'id':_0x5f5c1d[_0xe9e4('0x4f')]['id']}})[_0xe9e4('0x2e')](handleEntityNotFound(_0x5809ff,null))[_0xe9e4('0x2e')](function(_0x174b84){if(_0x174b84){_0x3494d1=_0x174b84;_0x1df58c[_0xe9e4('0x3d')]=_[_0xe9e4('0x39')](db['User'][_0xe9e4('0x38')]);_0x1df58c[_0xe9e4('0x3a')]=_['keys'](_0x5f5c1d[_0xe9e4('0x3a')]);_0x1df58c['filters']=_['intersection'](_0x1df58c['model'],_0x1df58c['query']);_0x113e9f[_0xe9e4('0x3f')]=_[_0xe9e4('0x3c')](_0x1df58c[_0xe9e4('0x3d')],qs[_0xe9e4('0x3e')](_0x5f5c1d[_0xe9e4('0x3a')][_0xe9e4('0x3e')]));_0x113e9f[_0xe9e4('0x3f')]=_0x113e9f['attributes']['length']?_0x113e9f[_0xe9e4('0x3f')]:_0x1df58c[_0xe9e4('0x3d')];_0x113e9f[_0xe9e4('0x42')]=qs[_0xe9e4('0x43')](_0x5f5c1d[_0xe9e4('0x3a')][_0xe9e4('0x43')]);_0x113e9f['where']=qs[_0xe9e4('0x3b')](_[_0xe9e4('0x45')](_0x5f5c1d['query'],_0x1df58c['filters']));if(_0x5f5c1d[_0xe9e4('0x3a')][_0xe9e4('0x46')]){_0x113e9f[_0xe9e4('0x44')]=_['merge'](_0x113e9f[_0xe9e4('0x44')],{'$or':_[_0xe9e4('0x47')](_0x113e9f[_0xe9e4('0x3f')],function(_0x47199e){var _0x15552c={};_0x15552c[_0x47199e]={'$like':'%'+_0x5f5c1d[_0xe9e4('0x3a')][_0xe9e4('0x46')]+'%'};return _0x15552c;})});}_0x113e9f=_['merge']({},_0x113e9f,_0x5f5c1d[_0xe9e4('0x4c')]);return _0x3494d1[_0xe9e4('0x74')](_0x113e9f);}})['then'](function(_0x51eae0){if(_0x51eae0){_0x4dba70=_0x51eae0[_0xe9e4('0x5d')];if(!_0x5f5c1d[_0xe9e4('0x3a')][_0xe9e4('0x5e')](_0xe9e4('0x40'))){_0x113e9f[_0xe9e4('0x27')]=qs[_0xe9e4('0x27')](_0x5f5c1d[_0xe9e4('0x3a')][_0xe9e4('0x27')]);_0x113e9f[_0xe9e4('0x41')]=qs[_0xe9e4('0x41')](_0x5f5c1d['query'][_0xe9e4('0x41')]);}return _0x3494d1[_0xe9e4('0x74')](_0x113e9f);}})[_0xe9e4('0x2e')](function(_0x5ba60b){if(_0x5ba60b){return _0x5ba60b?{'count':_0x4dba70,'rows':_0x5ba60b}:null;}})[_0xe9e4('0x2e')](respondWithResult(_0x5809ff,null))['catch'](handleError(_0x5809ff,null));};
\ No newline at end of file
index 441eed8..62deec8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x87e4=['save','emit','hasOwnProperty','exports','events','../../mysqldb','SmsQueue'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0x87e4,0x74));var _0x487e=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x87e4[_0x3947c9];return _0x2e7871;};'use strict';var EventEmitter=require(_0x487e('0x0'));var SmsQueue=require(_0x487e('0x1'))['db'][_0x487e('0x2')];var SmsQueueEvents=new EventEmitter();SmsQueueEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x487e('0x3'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x4ad235){return function(_0x3505cb,_0x1b5ecc,_0x4fb428){SmsQueueEvents[_0x487e('0x4')](_0x4ad235+':'+_0x3505cb['id'],_0x3505cb);SmsQueueEvents[_0x487e('0x4')](_0x4ad235,_0x3505cb);_0x4fb428(null);};}for(var e in events){if(events[_0x487e('0x5')](e)){var event=events[e];SmsQueue['hook'](e,emitEvent(event));}}module[_0x487e('0x6')]=SmsQueueEvents;
\ No newline at end of file
+var _0xcce1=['setMaxListeners','save','update','remove','emit','hasOwnProperty','exports','events','SmsQueue'];(function(_0x109828,_0x44c0ef){var _0x3585b7=function(_0x12e76d){while(--_0x12e76d){_0x109828['push'](_0x109828['shift']());}};_0x3585b7(++_0x44c0ef);}(_0xcce1,0x103));var _0x1cce=function(_0x2a6501,_0x9c5a0e){_0x2a6501=_0x2a6501-0x0;var _0x34d3ae=_0xcce1[_0x2a6501];return _0x34d3ae;};'use strict';var EventEmitter=require(_0x1cce('0x0'));var SmsQueue=require('../../mysqldb')['db'][_0x1cce('0x1')];var SmsQueueEvents=new EventEmitter();SmsQueueEvents[_0x1cce('0x2')](0x0);var events={'afterCreate':_0x1cce('0x3'),'afterUpdate':_0x1cce('0x4'),'afterDestroy':_0x1cce('0x5')};function emitEvent(_0x5f5c32){return function(_0x266160,_0x3fbc54,_0x579bb8){SmsQueueEvents['emit'](_0x5f5c32+':'+_0x266160['id'],_0x266160);SmsQueueEvents[_0x1cce('0x6')](_0x5f5c32,_0x266160);_0x579bb8(null);};}for(var e in events){if(events[_0x1cce('0x7')](e)){var event=events[e];SmsQueue['hook'](e,emitEvent(event));}}module[_0x1cce('0x8')]=SmsQueueEvents;
\ No newline at end of file
index c5bda54..ebdb86e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd87a=['./smsQueue.attributes','exports','define','moment','bluebird'];(function(_0x411add,_0x1aed38){var _0x238242=function(_0x4a1cd5){while(--_0x4a1cd5){_0x411add['push'](_0x411add['shift']());}};_0x238242(++_0x1aed38);}(_0xd87a,0xbc));var _0xad87=function(_0x2ef8c1,_0x2f72f4){_0x2ef8c1=_0x2ef8c1-0x0;var _0x288305=_0xd87a[_0x2ef8c1];return _0x288305;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0xad87('0x0'));var BPromise=require(_0xad87('0x1'));var rp=require('request-promise');var attributes=require(_0xad87('0x2'));module[_0xad87('0x3')]=function(_0x5d6d83,_0xf2a6df){return _0x5d6d83[_0xad87('0x4')]('SmsQueue',attributes,{'tableName':'sms_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xdf20=['moment','bluebird','./smsQueue.attributes','exports','sms_queues','util','../../config/logger','api'];(function(_0xfb42e6,_0x5f5d4b){var _0x27265b=function(_0x163e81){while(--_0x163e81){_0xfb42e6['push'](_0xfb42e6['shift']());}};_0x27265b(++_0x5f5d4b);}(_0xdf20,0x12d));var _0x0df2=function(_0x273422,_0x25dc6f){_0x273422=_0x273422-0x0;var _0x577dbd=_0xdf20[_0x273422];return _0x577dbd;};'use strict';var _=require('lodash');var util=require(_0x0df2('0x0'));var logger=require(_0x0df2('0x1'))(_0x0df2('0x2'));var moment=require(_0x0df2('0x3'));var BPromise=require(_0x0df2('0x4'));var rp=require('request-promise');var attributes=require(_0x0df2('0x5'));module[_0x0df2('0x6')]=function(_0xf224dc,_0x293a91){return _0xf224dc['define']('SmsQueue',attributes,{'tableName':_0x0df2('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index f95d267..ea5a9f9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaf23=['stringify','error','result','message','catch','GetSmsQueue','findAll','options','raw','include','model','attributes','map','then','ShowSmsQueue','SmsQueue','where','lodash','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/environment','jayson/promise','client','defaults','redis','./smsQueue.socket','register','info','SmsQueue,\x20%s,\x20%s','request\x20sent','debug','SmsQueue,\x20%s,\x20%s,\x20%s'];(function(_0xa6b4c0,_0x4d3e42){var _0x3cd4c5=function(_0x5e8059){while(--_0x5e8059){_0xa6b4c0['push'](_0xa6b4c0['shift']());}};_0x3cd4c5(++_0x4d3e42);}(_0xaf23,0x106));var _0x3af2=function(_0x22ee0f,_0x22e6d2){_0x22ee0f=_0x22ee0f-0x0;var _0x204696=_0xaf23[_0x22ee0f];return _0x204696;};'use strict';var _=require(_0x3af2('0x0'));var util=require('util');var moment=require(_0x3af2('0x1'));var BPromise=require(_0x3af2('0x2'));var rs=require(_0x3af2('0x3'));var fs=require('fs');var Redis=require(_0x3af2('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x3af2('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0x3af2('0x6'));var jayson=require(_0x3af2('0x7'));var client=jayson[_0x3af2('0x8')]['http']({'port':0x232a});config['redis']=_[_0x3af2('0x9')](config[_0x3af2('0xa')],{'host':'localhost','port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config['redis']));require(_0x3af2('0xb'))[_0x3af2('0xc')](socket);function respondWithRpcPromise(_0xdd6c35,_0x5d6717,_0x3c7966){return new BPromise(function(_0x3f7fa9,_0x2b204a){return client['request'](_0xdd6c35,_0x3c7966)['then'](function(_0x584bc2){logger[_0x3af2('0xd')](_0x3af2('0xe'),_0x5d6717,_0x3af2('0xf'));logger[_0x3af2('0x10')](_0x3af2('0x11'),_0x5d6717,_0x3af2('0xf'),JSON[_0x3af2('0x12')](_0x584bc2));if(_0x584bc2[_0x3af2('0x13')]){if(_0x584bc2[_0x3af2('0x13')]['code']===0x1f4){logger[_0x3af2('0x13')](_0x3af2('0xe'),_0x5d6717,_0x584bc2[_0x3af2('0x13')]['message']);return _0x2b204a(_0x584bc2['error']['message']);}logger[_0x3af2('0x13')](_0x3af2('0xe'),_0x5d6717,_0x584bc2[_0x3af2('0x13')]['message']);return _0x3f7fa9(_0x584bc2[_0x3af2('0x13')]['message']);}else{logger['info']('SmsQueue,\x20%s,\x20%s',_0x5d6717,_0x3af2('0xf'));_0x3f7fa9(_0x584bc2[_0x3af2('0x14')][_0x3af2('0x15')]);}})[_0x3af2('0x16')](function(_0x5282f2){logger[_0x3af2('0x13')]('SmsQueue,\x20%s,\x20%s',_0x5d6717,_0x5282f2);_0x2b204a(_0x5282f2);});});}exports[_0x3af2('0x17')]=function(_0x17bb85){var _0x7321a4=this;return new Promise(function(_0x3f260b,_0x299877){return db['SmsQueue'][_0x3af2('0x18')]({'raw':_0x17bb85[_0x3af2('0x19')]?_0x17bb85[_0x3af2('0x19')][_0x3af2('0x1a')]===undefined?!![]:![]:!![],'where':_0x17bb85[_0x3af2('0x19')]?_0x17bb85['options']['where']||null:null,'attributes':_0x17bb85[_0x3af2('0x19')]?_0x17bb85[_0x3af2('0x19')]['attributes']||null:null,'limit':_0x17bb85[_0x3af2('0x19')]?_0x17bb85[_0x3af2('0x19')]['limit']||null:null,'include':_0x17bb85['options']?_0x17bb85[_0x3af2('0x19')][_0x3af2('0x1b')]?_['map'](_0x17bb85['options'][_0x3af2('0x1b')],function(_0x375f77){return{'model':db[_0x375f77[_0x3af2('0x1c')]],'as':_0x375f77['as'],'attributes':_0x375f77[_0x3af2('0x1d')],'include':_0x375f77[_0x3af2('0x1b')]?_[_0x3af2('0x1e')](_0x375f77[_0x3af2('0x1b')],function(_0x55ab8f){return{'model':db[_0x55ab8f[_0x3af2('0x1c')]],'as':_0x55ab8f['as'],'attributes':_0x55ab8f['attributes'],'include':_0x55ab8f['include']?_[_0x3af2('0x1e')](_0x55ab8f['include'],function(_0x1af2c7){return{'model':db[_0x1af2c7['model']],'as':_0x1af2c7['as'],'attributes':_0x1af2c7[_0x3af2('0x1d')]};}):[]};}):[]};}):[]:[]})[_0x3af2('0x1f')](function(_0x1c2664){logger[_0x3af2('0xd')](_0x3af2('0x17'),_0x17bb85);logger[_0x3af2('0x10')](_0x3af2('0x17'),_0x17bb85,JSON['stringify'](_0x1c2664));_0x3f260b(_0x1c2664);})[_0x3af2('0x16')](function(_0x3f5fbe){logger[_0x3af2('0x13')](_0x3af2('0x17'),_0x3f5fbe[_0x3af2('0x15')],_0x17bb85);_0x299877(_0x7321a4['error'](0x1f4,_0x3f5fbe[_0x3af2('0x15')]));});});};exports[_0x3af2('0x20')]=function(_0x2c1fe0){var _0x415e85=this;return new Promise(function(_0x2a232f,_0x4e20d4){return db[_0x3af2('0x21')]['find']({'raw':_0x2c1fe0[_0x3af2('0x19')]?_0x2c1fe0['options'][_0x3af2('0x1a')]===undefined?!![]:![]:!![],'where':_0x2c1fe0[_0x3af2('0x19')]?_0x2c1fe0[_0x3af2('0x19')][_0x3af2('0x22')]||null:null,'attributes':_0x2c1fe0[_0x3af2('0x19')]?_0x2c1fe0[_0x3af2('0x19')][_0x3af2('0x1d')]||null:null,'include':_0x2c1fe0[_0x3af2('0x19')]?_0x2c1fe0[_0x3af2('0x19')][_0x3af2('0x1b')]?_[_0x3af2('0x1e')](_0x2c1fe0[_0x3af2('0x19')][_0x3af2('0x1b')],function(_0x5918e4){return{'model':db[_0x5918e4[_0x3af2('0x1c')]],'as':_0x5918e4['as'],'attributes':_0x5918e4[_0x3af2('0x1d')],'include':_0x5918e4[_0x3af2('0x1b')]?_['map'](_0x5918e4[_0x3af2('0x1b')],function(_0x1fb3a7){return{'model':db[_0x1fb3a7[_0x3af2('0x1c')]],'as':_0x1fb3a7['as'],'attributes':_0x1fb3a7['attributes'],'include':_0x1fb3a7[_0x3af2('0x1b')]?_['map'](_0x1fb3a7[_0x3af2('0x1b')],function(_0x497ad2){return{'model':db[_0x497ad2[_0x3af2('0x1c')]],'as':_0x497ad2['as'],'attributes':_0x497ad2['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x2b6f14){logger[_0x3af2('0xd')](_0x3af2('0x20'),_0x2c1fe0);logger[_0x3af2('0x10')]('ShowSmsQueue',_0x2c1fe0,JSON[_0x3af2('0x12')](_0x2b6f14));_0x2a232f(_0x2b6f14);})['catch'](function(_0x27e1e2){logger[_0x3af2('0x13')](_0x3af2('0x20'),_0x27e1e2['message'],_0x2c1fe0);_0x4e20d4(_0x415e85[_0x3af2('0x13')](0x1f4,_0x27e1e2['message']));});});};
\ No newline at end of file
+var _0x907a=['../../config/logger','rpc','../../config/environment','client','defaults','redis','localhost','socket.io-emitter','register','request','info','SmsQueue,\x20%s,\x20%s','request\x20sent','debug','SmsQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','GetSmsQueue','SmsQueue','findAll','options','raw','attributes','limit','map','include','model','then','ShowSmsQueue','where','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x130864,_0x5e81d3){var _0x23d7c3=function(_0x1c075a){while(--_0x1c075a){_0x130864['push'](_0x130864['shift']());}};_0x23d7c3(++_0x5e81d3);}(_0x907a,0xe9));var _0xa907=function(_0x2d0b45,_0x25e1ce){_0x2d0b45=_0x2d0b45-0x0;var _0x681687=_0x907a[_0x2d0b45];return _0x681687;};'use strict';var _=require('lodash');var util=require(_0xa907('0x0'));var moment=require(_0xa907('0x1'));var BPromise=require(_0xa907('0x2'));var rs=require(_0xa907('0x3'));var fs=require('fs');var Redis=require(_0xa907('0x4'));var db=require(_0xa907('0x5'))['db'];var utils=require(_0xa907('0x6'));var logger=require(_0xa907('0x7'))(_0xa907('0x8'));var config=require(_0xa907('0x9'));var jayson=require('jayson/promise');var client=jayson[_0xa907('0xa')]['http']({'port':0x232a});config['redis']=_[_0xa907('0xb')](config[_0xa907('0xc')],{'host':_0xa907('0xd'),'port':0x18eb});var socket=require(_0xa907('0xe'))(new Redis(config[_0xa907('0xc')]));require('./smsQueue.socket')[_0xa907('0xf')](socket);function respondWithRpcPromise(_0x4008a7,_0x57cbc6,_0x512ddd){return new BPromise(function(_0x31efea,_0x2b625c){return client[_0xa907('0x10')](_0x4008a7,_0x512ddd)['then'](function(_0x517f3a){logger[_0xa907('0x11')](_0xa907('0x12'),_0x57cbc6,_0xa907('0x13'));logger[_0xa907('0x14')](_0xa907('0x15'),_0x57cbc6,_0xa907('0x13'),JSON[_0xa907('0x16')](_0x517f3a));if(_0x517f3a['error']){if(_0x517f3a[_0xa907('0x17')][_0xa907('0x18')]===0x1f4){logger[_0xa907('0x17')](_0xa907('0x12'),_0x57cbc6,_0x517f3a['error'][_0xa907('0x19')]);return _0x2b625c(_0x517f3a[_0xa907('0x17')][_0xa907('0x19')]);}logger['error'](_0xa907('0x12'),_0x57cbc6,_0x517f3a[_0xa907('0x17')][_0xa907('0x19')]);return _0x31efea(_0x517f3a[_0xa907('0x17')][_0xa907('0x19')]);}else{logger[_0xa907('0x11')]('SmsQueue,\x20%s,\x20%s',_0x57cbc6,_0xa907('0x13'));_0x31efea(_0x517f3a['result'][_0xa907('0x19')]);}})['catch'](function(_0x1ab640){logger[_0xa907('0x17')](_0xa907('0x12'),_0x57cbc6,_0x1ab640);_0x2b625c(_0x1ab640);});});}exports[_0xa907('0x1a')]=function(_0xada604){var _0x3d115b=this;return new Promise(function(_0x37b5db,_0x4a71b8){return db[_0xa907('0x1b')][_0xa907('0x1c')]({'raw':_0xada604[_0xa907('0x1d')]?_0xada604[_0xa907('0x1d')][_0xa907('0x1e')]===undefined?!![]:![]:!![],'where':_0xada604[_0xa907('0x1d')]?_0xada604[_0xa907('0x1d')]['where']||null:null,'attributes':_0xada604[_0xa907('0x1d')]?_0xada604['options'][_0xa907('0x1f')]||null:null,'limit':_0xada604[_0xa907('0x1d')]?_0xada604[_0xa907('0x1d')][_0xa907('0x20')]||null:null,'include':_0xada604[_0xa907('0x1d')]?_0xada604['options']['include']?_[_0xa907('0x21')](_0xada604['options'][_0xa907('0x22')],function(_0x5775c4){return{'model':db[_0x5775c4[_0xa907('0x23')]],'as':_0x5775c4['as'],'attributes':_0x5775c4[_0xa907('0x1f')],'include':_0x5775c4[_0xa907('0x22')]?_['map'](_0x5775c4[_0xa907('0x22')],function(_0x59828d){return{'model':db[_0x59828d[_0xa907('0x23')]],'as':_0x59828d['as'],'attributes':_0x59828d[_0xa907('0x1f')],'include':_0x59828d[_0xa907('0x22')]?_[_0xa907('0x21')](_0x59828d[_0xa907('0x22')],function(_0x1333ef){return{'model':db[_0x1333ef['model']],'as':_0x1333ef['as'],'attributes':_0x1333ef[_0xa907('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xa907('0x24')](function(_0x3c91a1){logger[_0xa907('0x11')]('GetSmsQueue',_0xada604);logger['debug']('GetSmsQueue',_0xada604,JSON[_0xa907('0x16')](_0x3c91a1));_0x37b5db(_0x3c91a1);})['catch'](function(_0x40e213){logger[_0xa907('0x17')](_0xa907('0x1a'),_0x40e213[_0xa907('0x19')],_0xada604);_0x4a71b8(_0x3d115b[_0xa907('0x17')](0x1f4,_0x40e213[_0xa907('0x19')]));});});};exports[_0xa907('0x25')]=function(_0x4e59bd){var _0x25cfdb=this;return new Promise(function(_0x2dae52,_0x43aca4){return db[_0xa907('0x1b')]['find']({'raw':_0x4e59bd[_0xa907('0x1d')]?_0x4e59bd[_0xa907('0x1d')]['raw']===undefined?!![]:![]:!![],'where':_0x4e59bd[_0xa907('0x1d')]?_0x4e59bd[_0xa907('0x1d')][_0xa907('0x26')]||null:null,'attributes':_0x4e59bd[_0xa907('0x1d')]?_0x4e59bd[_0xa907('0x1d')][_0xa907('0x1f')]||null:null,'include':_0x4e59bd[_0xa907('0x1d')]?_0x4e59bd[_0xa907('0x1d')]['include']?_[_0xa907('0x21')](_0x4e59bd[_0xa907('0x1d')][_0xa907('0x22')],function(_0x54c249){return{'model':db[_0x54c249[_0xa907('0x23')]],'as':_0x54c249['as'],'attributes':_0x54c249[_0xa907('0x1f')],'include':_0x54c249[_0xa907('0x22')]?_[_0xa907('0x21')](_0x54c249[_0xa907('0x22')],function(_0x4df316){return{'model':db[_0x4df316[_0xa907('0x23')]],'as':_0x4df316['as'],'attributes':_0x4df316[_0xa907('0x1f')],'include':_0x4df316['include']?_[_0xa907('0x21')](_0x4df316[_0xa907('0x22')],function(_0xb32140){return{'model':db[_0xb32140[_0xa907('0x23')]],'as':_0xb32140['as'],'attributes':_0xb32140[_0xa907('0x1f')]};}):[]};}):[]};}):[]:[]})[_0xa907('0x24')](function(_0x2f6877){logger['info'](_0xa907('0x25'),_0x4e59bd);logger[_0xa907('0x14')](_0xa907('0x25'),_0x4e59bd,JSON['stringify'](_0x2f6877));_0x2dae52(_0x2f6877);})[_0xa907('0x27')](function(_0x203b21){logger['error'](_0xa907('0x25'),_0x203b21['message'],_0x4e59bd);_0x43aca4(_0x25cfdb['error'](0x1f4,_0x203b21[_0xa907('0x19')]));});});};
\ No newline at end of file
index 4f9a9a7..4d469c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x176c=['./smsQueue.events','save','remove','update','register','length','smsQueue:'];(function(_0x34880d,_0x1e3dad){var _0x580cf0=function(_0x31e490){while(--_0x31e490){_0x34880d['push'](_0x34880d['shift']());}};_0x580cf0(++_0x1e3dad);}(_0x176c,0x134));var _0xc176=function(_0x555d5e,_0x13b3c7){_0x555d5e=_0x555d5e-0x0;var _0xa4ecb9=_0x176c[_0x555d5e];return _0xa4ecb9;};'use strict';var SmsQueueEvents=require(_0xc176('0x0'));var events=[_0xc176('0x1'),_0xc176('0x2'),_0xc176('0x3')];function createListener(_0x383e05,_0x88a1e0){return function(_0x185e8a){_0x88a1e0['emit'](_0x383e05,_0x185e8a);};}function removeListener(_0x452510,_0x24433a){return function(){SmsQueueEvents['removeListener'](_0x452510,_0x24433a);};}exports[_0xc176('0x4')]=function(_0x299972){for(var _0xc86b41=0x0,_0x55595c=events[_0xc176('0x5')];_0xc86b41<_0x55595c;_0xc86b41++){var _0x3b9798=events[_0xc86b41];var _0x71eb43=createListener(_0xc176('0x6')+_0x3b9798,_0x299972);SmsQueueEvents['on'](_0x3b9798,_0x71eb43);}};
\ No newline at end of file
+var _0xb934=['register','smsQueue:','./smsQueue.events','save','remove','emit'];(function(_0x48a234,_0x416f12){var _0x4b07b0=function(_0x1d2f78){while(--_0x1d2f78){_0x48a234['push'](_0x48a234['shift']());}};_0x4b07b0(++_0x416f12);}(_0xb934,0x92));var _0x4b93=function(_0x49524d,_0x5ae7a9){_0x49524d=_0x49524d-0x0;var _0x221976=_0xb934[_0x49524d];return _0x221976;};'use strict';var SmsQueueEvents=require(_0x4b93('0x0'));var events=[_0x4b93('0x1'),_0x4b93('0x2'),'update'];function createListener(_0x42be3a,_0xc1a91){return function(_0x3c5578){_0xc1a91[_0x4b93('0x3')](_0x42be3a,_0x3c5578);};}function removeListener(_0x17c638,_0x50c02e){return function(){SmsQueueEvents['removeListener'](_0x17c638,_0x50c02e);};}exports[_0x4b93('0x4')]=function(_0x1fa8af){for(var _0x2ea5ad=0x0,_0x403554=events['length'];_0x2ea5ad<_0x403554;_0x2ea5ad++){var _0x3ee934=events[_0x2ea5ad];var _0x20d624=createListener(_0x4b93('0x5')+_0x3ee934,_0x1fa8af);SmsQueueEvents['on'](_0x3ee934,_0x20d624);}};
\ No newline at end of file
index 4edca34..67f702f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbe52=['delete','/:id','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsQueueReport.controller','get','isAuthenticated','index','/describe','describe','show','post','create','update'];(function(_0x197ab1,_0x398e3c){var _0x3b391b=function(_0x3fe9d9){while(--_0x3fe9d9){_0x197ab1['push'](_0x197ab1['shift']());}};_0x3b391b(++_0x398e3c);}(_0xbe52,0x164));var _0x2be5=function(_0x4a1483,_0x5b845c){_0x4a1483=_0x4a1483-0x0;var _0x125034=_0xbe52[_0x4a1483];return _0x125034;};'use strict';var multer=require(_0x2be5('0x0'));var util=require(_0x2be5('0x1'));var path=require(_0x2be5('0x2'));var timeout=require(_0x2be5('0x3'));var express=require(_0x2be5('0x4'));var router=express['Router']();var auth=require(_0x2be5('0x5'));var interaction=require(_0x2be5('0x6'));var config=require(_0x2be5('0x7'));var controller=require(_0x2be5('0x8'));router[_0x2be5('0x9')]('/',auth[_0x2be5('0xa')](),controller[_0x2be5('0xb')]);router[_0x2be5('0x9')](_0x2be5('0xc'),auth[_0x2be5('0xa')](),controller[_0x2be5('0xd')]);router[_0x2be5('0x9')]('/:id',auth[_0x2be5('0xa')](),controller[_0x2be5('0xe')]);router[_0x2be5('0xf')]('/',auth['isAuthenticated'](),controller[_0x2be5('0x10')]);router['put']('/:id',auth[_0x2be5('0xa')](),controller[_0x2be5('0x11')]);router[_0x2be5('0x12')](_0x2be5('0x13'),auth['isAuthenticated'](),controller[_0x2be5('0x14')]);module[_0x2be5('0x15')]=router;
\ No newline at end of file
+var _0xd206=['index','isAuthenticated','describe','/:id','show','post','delete','multer','util','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./smsQueueReport.controller','get'];(function(_0x487b0c,_0x14ff74){var _0x1adbdc=function(_0x2e7b9d){while(--_0x2e7b9d){_0x487b0c['push'](_0x487b0c['shift']());}};_0x1adbdc(++_0x14ff74);}(_0xd206,0x107));var _0x6d20=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0xd206[_0x122ef9];return _0x42fba0;};'use strict';var multer=require(_0x6d20('0x0'));var util=require(_0x6d20('0x1'));var path=require('path');var timeout=require(_0x6d20('0x2'));var express=require(_0x6d20('0x3'));var router=express[_0x6d20('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x6d20('0x5'));var config=require(_0x6d20('0x6'));var controller=require(_0x6d20('0x7'));router[_0x6d20('0x8')]('/',auth['isAuthenticated'](),controller[_0x6d20('0x9')]);router['get']('/describe',auth[_0x6d20('0xa')](),controller[_0x6d20('0xb')]);router['get'](_0x6d20('0xc'),auth['isAuthenticated'](),controller[_0x6d20('0xd')]);router[_0x6d20('0xe')]('/',auth['isAuthenticated'](),controller['create']);router['put'](_0x6d20('0xc'),auth[_0x6d20('0xa')](),controller['update']);router[_0x6d20('0xf')]('/:id',auth[_0x6d20('0xa')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index b7da4eb..5fd400b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7709=['DATE','exports','STRING'];(function(_0x2cf431,_0x229d97){var _0x4dfe6a=function(_0x7e85cc){while(--_0x7e85cc){_0x2cf431['push'](_0x2cf431['shift']());}};_0x4dfe6a(++_0x229d97);}(_0x7709,0x11b));var _0x9770=function(_0x25abc5,_0x55dbfe){_0x25abc5=_0x25abc5-0x0;var _0x11547b=_0x7709[_0x25abc5];return _0x11547b;};'use strict';var moment=require('moment');var Sequelize=require('sequelize');module[_0x9770('0x0')]={'uniqueid':{'type':Sequelize[_0x9770('0x1')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0x9770('0x2')]},'leaveAt':{'type':Sequelize[_0x9770('0x2')]},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize[_0x9770('0x2')]},'reason':{'type':Sequelize[_0x9770('0x1')]}};
\ No newline at end of file
+var _0x6744=['exports','STRING','DATE','sequelize'];(function(_0x59ee6f,_0x450239){var _0x4c0979=function(_0x565e92){while(--_0x565e92){_0x59ee6f['push'](_0x59ee6f['shift']());}};_0x4c0979(++_0x450239);}(_0x6744,0x67));var _0x4674=function(_0x30622f,_0x487d74){_0x30622f=_0x30622f-0x0;var _0x12ada9=_0x6744[_0x30622f];return _0x12ada9;};'use strict';var moment=require('moment');var Sequelize=require(_0x4674('0x0'));module[_0x4674('0x1')]={'uniqueid':{'type':Sequelize[_0x4674('0x2')],'allowNull':![]},'from':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0x4674('0x3')]},'leaveAt':{'type':Sequelize[_0x4674('0x3')]},'acceptAt':{'type':Sequelize['DATE']},'exitAt':{'type':Sequelize[_0x4674('0x3')]},'reason':{'type':Sequelize[_0x4674('0x2')]}};
\ No newline at end of file
index 020f431..29bdbf2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b98=['../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','then','error','stack','name','send','SmsQueueReport','model','keys','filters','intersection','query','attributes','fields','length','nolimit','order','sort','where','filter','merge','map','type','field','options','includeAll','include','findAll','rows','catch','show','params','rawAttributes','find','create','body','destroy','describe','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','sox','to-csv','squel','crypto','jsforce','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment'];(function(_0x3c23a1,_0x2c037d){var _0x30b445=function(_0x162f06){while(--_0x162f06){_0x3c23a1['push'](_0x3c23a1['shift']());}};_0x30b445(++_0x2c037d);}(_0x2b98,0x10a));var _0x82b9=function(_0x2763f2,_0x416af8){_0x2763f2=_0x2763f2-0x0;var _0x3ef471=_0x2b98[_0x2763f2];return _0x3ef471;};'use strict';var pdf=require(_0x82b9('0x0'));var emlformat=require(_0x82b9('0x1'));var rimraf=require(_0x82b9('0x2'));var zipdir=require(_0x82b9('0x3'));var jsonpatch=require(_0x82b9('0x4'));var rp=require(_0x82b9('0x5'));var moment=require('moment');var BPromise=require(_0x82b9('0x6'));var Mustache=require(_0x82b9('0x7'));var util=require('util');var path=require(_0x82b9('0x8'));var sox=require(_0x82b9('0x9'));var csv=require(_0x82b9('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x82b9('0xb'));var crypto=require(_0x82b9('0xc'));var jsforce=require(_0x82b9('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x82b9('0xa'));var querystring=require(_0x82b9('0xe'));var Papa=require(_0x82b9('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0x82b9('0x10'));var Redis=require(_0x82b9('0x11'));var qs=require(_0x82b9('0x12'));var logger=require(_0x82b9('0x13'))(_0x82b9('0x14'));var utils=require('../../config/utils');var config=require(_0x82b9('0x15'));var db=require(_0x82b9('0x16'))['db'];function respondWithStatusCode(_0x44eda9,_0xa24422){_0xa24422=_0xa24422||0xcc;return function(_0x4b9e0b){if(_0x4b9e0b){return _0x44eda9[_0x82b9('0x17')](_0xa24422);}return _0x44eda9[_0x82b9('0x18')](_0xa24422)[_0x82b9('0x19')]();};}function respondWithResult(_0xa65182,_0x44af90){_0x44af90=_0x44af90||0xc8;return function(_0x498597){if(_0x498597){return _0xa65182[_0x82b9('0x18')](_0x44af90)[_0x82b9('0x1a')](_0x498597);}};}function respondWithFilteredResult(_0x23d89e,_0x5a46a8){return function(_0x5c682d){if(_0x5c682d){var _0x17e916=_0x5c682d[_0x82b9('0x1b')],_0x5616dc=_0x5a46a8[_0x82b9('0x1c')],_0x49ec2d=_0x5a46a8['offset']+_0x5a46a8[_0x82b9('0x1d')],_0x1f8bc4;if(_0x49ec2d>=_0x17e916){_0x49ec2d=_0x17e916;_0x1f8bc4=0xc8;}else{_0x1f8bc4=0xce;}_0x23d89e[_0x82b9('0x18')](_0x1f8bc4);return _0x23d89e[_0x82b9('0x1e')]('Content-Range',_0x5616dc+'-'+_0x49ec2d+'/'+_0x17e916)[_0x82b9('0x1a')](_0x5c682d);}return null;};}function patchUpdates(_0x36ed16){return function(_0x27fd96){try{jsonpatch[_0x82b9('0x1f')](_0x27fd96,_0x36ed16,!![]);}catch(_0x4e6e85){return BPromise[_0x82b9('0x20')](_0x4e6e85);}return _0x27fd96[_0x82b9('0x21')]();};}function saveUpdates(_0x10ada4,_0x1faa1b){return function(_0x594e04){if(_0x594e04){return _0x594e04[_0x82b9('0x22')](_0x10ada4)[_0x82b9('0x23')](function(_0x37cf70){return _0x37cf70;});}return null;};}function removeEntity(_0x175c92,_0x51d119){return function(_0x3f74ed){if(_0x3f74ed){return _0x3f74ed['destroy']()[_0x82b9('0x23')](function(){_0x175c92[_0x82b9('0x18')](0xcc)[_0x82b9('0x19')]();});}};}function handleEntityNotFound(_0x29aed8,_0x27893d){return function(_0x4e522a){if(!_0x4e522a){_0x29aed8[_0x82b9('0x17')](0x194);}return _0x4e522a;};}function handleError(_0x5924a6,_0x2287c6){_0x2287c6=_0x2287c6||0x1f4;return function(_0x5612c9){logger[_0x82b9('0x24')](_0x5612c9[_0x82b9('0x25')]);if(_0x5612c9[_0x82b9('0x26')]){delete _0x5612c9['name'];}_0x5924a6['status'](_0x2287c6)[_0x82b9('0x27')](_0x5612c9);};}exports['index']=function(_0xf668c7,_0x3d8cb7){var _0x1ab994={},_0x304b37={},_0x25f6c3={'count':0x0,'rows':[]};var _0x3ca728=db[_0x82b9('0x28')]['rawAttributes'];_0x304b37[_0x82b9('0x29')]=_['keys'](_0x3ca728);_0x304b37['query']=_[_0x82b9('0x2a')](_0xf668c7['query']);_0x304b37[_0x82b9('0x2b')]=_[_0x82b9('0x2c')](_0x304b37['model'],_0x304b37[_0x82b9('0x2d')]);_0x1ab994[_0x82b9('0x2e')]=_[_0x82b9('0x2c')](_0x304b37[_0x82b9('0x29')],qs[_0x82b9('0x2f')](_0xf668c7['query'][_0x82b9('0x2f')]));_0x1ab994['attributes']=_0x1ab994['attributes'][_0x82b9('0x30')]?_0x1ab994['attributes']:_0x304b37[_0x82b9('0x29')];if(!_0xf668c7[_0x82b9('0x2d')]['hasOwnProperty'](_0x82b9('0x31'))){_0x1ab994['limit']=qs[_0x82b9('0x1d')](_0xf668c7['query']['limit']);_0x1ab994[_0x82b9('0x1c')]=qs[_0x82b9('0x1c')](_0xf668c7[_0x82b9('0x2d')]['offset']);}_0x1ab994[_0x82b9('0x32')]=qs[_0x82b9('0x33')](_0xf668c7[_0x82b9('0x2d')][_0x82b9('0x33')]);_0x1ab994[_0x82b9('0x34')]=qs['filters'](_['pick'](_0xf668c7[_0x82b9('0x2d')],_0x304b37[_0x82b9('0x2b')]));if(_0xf668c7[_0x82b9('0x2d')][_0x82b9('0x35')]){_0x1ab994[_0x82b9('0x34')]=_[_0x82b9('0x36')](_0x1ab994['where'],{'$or':_[_0x82b9('0x37')](_0x3ca728,function(_0x8f3bb2){if(_0x8f3bb2[_0x82b9('0x38')]['key']!=='VIRTUAL'){var _0x3eb3ae={};_0x3eb3ae[_0x8f3bb2[_0x82b9('0x39')]]={'$like':'%'+_0xf668c7[_0x82b9('0x2d')][_0x82b9('0x35')]+'%'};return _0x3eb3ae;}})});}_0x1ab994=_['merge']({},_0x1ab994,_0xf668c7[_0x82b9('0x3a')]);var _0x16ceb7={'where':_0x1ab994[_0x82b9('0x34')]};return db['SmsQueueReport']['count'](_0x16ceb7)[_0x82b9('0x23')](function(_0x35f7d8){_0x25f6c3['count']=_0x35f7d8;if(_0xf668c7[_0x82b9('0x2d')][_0x82b9('0x3b')]){_0x1ab994[_0x82b9('0x3c')]=[{'all':!![]}];}return db[_0x82b9('0x28')][_0x82b9('0x3d')](_0x1ab994);})[_0x82b9('0x23')](function(_0x127477){_0x25f6c3[_0x82b9('0x3e')]=_0x127477;return _0x25f6c3;})['then'](respondWithFilteredResult(_0x3d8cb7,_0x1ab994))[_0x82b9('0x3f')](handleError(_0x3d8cb7,null));};exports[_0x82b9('0x40')]=function(_0x5de1cf,_0x2b1384){var _0x4801ae={'raw':!![],'where':{'id':_0x5de1cf[_0x82b9('0x41')]['id']}},_0x2119ac={};_0x2119ac['model']=_[_0x82b9('0x2a')](db[_0x82b9('0x28')][_0x82b9('0x42')]);_0x2119ac['query']=_[_0x82b9('0x2a')](_0x5de1cf[_0x82b9('0x2d')]);_0x2119ac[_0x82b9('0x2b')]=_['intersection'](_0x2119ac[_0x82b9('0x29')],_0x2119ac[_0x82b9('0x2d')]);_0x4801ae[_0x82b9('0x2e')]=_['intersection'](_0x2119ac[_0x82b9('0x29')],qs[_0x82b9('0x2f')](_0x5de1cf[_0x82b9('0x2d')][_0x82b9('0x2f')]));_0x4801ae[_0x82b9('0x2e')]=_0x4801ae[_0x82b9('0x2e')][_0x82b9('0x30')]?_0x4801ae['attributes']:_0x2119ac[_0x82b9('0x29')];if(_0x5de1cf[_0x82b9('0x2d')][_0x82b9('0x3b')]){_0x4801ae['include']=[{'all':!![]}];}_0x4801ae=_[_0x82b9('0x36')]({},_0x4801ae,_0x5de1cf[_0x82b9('0x3a')]);return db[_0x82b9('0x28')][_0x82b9('0x43')](_0x4801ae)[_0x82b9('0x23')](handleEntityNotFound(_0x2b1384,null))[_0x82b9('0x23')](respondWithResult(_0x2b1384,null))['catch'](handleError(_0x2b1384,null));};exports[_0x82b9('0x44')]=function(_0x555f04,_0x1e799e){return db[_0x82b9('0x28')][_0x82b9('0x44')](_0x555f04['body'],{})[_0x82b9('0x23')](respondWithResult(_0x1e799e,0xc9))[_0x82b9('0x3f')](handleError(_0x1e799e,null));};exports['update']=function(_0x44bd2f,_0x52873c){if(_0x44bd2f['body']['id']){delete _0x44bd2f['body']['id'];}return db[_0x82b9('0x28')][_0x82b9('0x43')]({'where':{'id':_0x44bd2f[_0x82b9('0x41')]['id']}})['then'](handleEntityNotFound(_0x52873c,null))[_0x82b9('0x23')](saveUpdates(_0x44bd2f[_0x82b9('0x45')],null))[_0x82b9('0x23')](respondWithResult(_0x52873c,null))['catch'](handleError(_0x52873c,null));};exports[_0x82b9('0x46')]=function(_0x19e79a,_0x423ec4){return db[_0x82b9('0x28')]['find']({'where':{'id':_0x19e79a[_0x82b9('0x41')]['id']}})[_0x82b9('0x23')](handleEntityNotFound(_0x423ec4,null))[_0x82b9('0x23')](removeEntity(_0x423ec4,null))['catch'](handleError(_0x423ec4,null));};exports[_0x82b9('0x47')]=function(_0x598009,_0x51de5d){return db[_0x82b9('0x28')][_0x82b9('0x47')]()[_0x82b9('0x23')](respondWithResult(_0x51de5d,null))[_0x82b9('0x3f')](handleError(_0x51de5d,null));};
\ No newline at end of file
+var _0x31bd=['limit','set','apply','reject','save','update','then','destroy','name','SmsQueueReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','include','findAll','rows','show','create','body','catch','params','find','describe','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/environment','sendStatus','status','end','json','count','offset'];(function(_0x1385f0,_0x5550bb){var _0x36ca00=function(_0x1bc769){while(--_0x1bc769){_0x1385f0['push'](_0x1385f0['shift']());}};_0x36ca00(++_0x5550bb);}(_0x31bd,0xbb));var _0xd31b=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x31bd[_0x1facfa];return _0x9ec701;};'use strict';var pdf=require(_0xd31b('0x0'));var emlformat=require(_0xd31b('0x1'));var rimraf=require(_0xd31b('0x2'));var zipdir=require(_0xd31b('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0xd31b('0x4'));var moment=require('moment');var BPromise=require(_0xd31b('0x5'));var Mustache=require(_0xd31b('0x6'));var util=require(_0xd31b('0x7'));var path=require(_0xd31b('0x8'));var sox=require(_0xd31b('0x9'));var csv=require('to-csv');var ejs=require(_0xd31b('0xa'));var fs=require('fs');var _=require(_0xd31b('0xb'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xd31b('0xc'));var deskjs=require(_0xd31b('0xd'));var toCsv=require(_0xd31b('0xe'));var querystring=require(_0xd31b('0xf'));var Papa=require(_0xd31b('0x10'));var authService=require(_0xd31b('0x11'));var hardwareService=require(_0xd31b('0x12'));var Redis=require(_0xd31b('0x13'));var qs=require(_0xd31b('0x14'));var logger=require(_0xd31b('0x15'))('api');var utils=require('../../config/utils');var config=require(_0xd31b('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x5f0219,_0x1702a1){_0x1702a1=_0x1702a1||0xcc;return function(_0x2e939c){if(_0x2e939c){return _0x5f0219[_0xd31b('0x17')](_0x1702a1);}return _0x5f0219[_0xd31b('0x18')](_0x1702a1)[_0xd31b('0x19')]();};}function respondWithResult(_0x9b2441,_0x3016eb){_0x3016eb=_0x3016eb||0xc8;return function(_0x2dc211){if(_0x2dc211){return _0x9b2441['status'](_0x3016eb)[_0xd31b('0x1a')](_0x2dc211);}};}function respondWithFilteredResult(_0x4b3bd5,_0x44228f){return function(_0x3d90c0){if(_0x3d90c0){var _0x46a901=_0x3d90c0[_0xd31b('0x1b')],_0x1923d1=_0x44228f[_0xd31b('0x1c')],_0x499ba6=_0x44228f[_0xd31b('0x1c')]+_0x44228f[_0xd31b('0x1d')],_0xed5be6;if(_0x499ba6>=_0x46a901){_0x499ba6=_0x46a901;_0xed5be6=0xc8;}else{_0xed5be6=0xce;}_0x4b3bd5[_0xd31b('0x18')](_0xed5be6);return _0x4b3bd5[_0xd31b('0x1e')]('Content-Range',_0x1923d1+'-'+_0x499ba6+'/'+_0x46a901)[_0xd31b('0x1a')](_0x3d90c0);}return null;};}function patchUpdates(_0x46149a){return function(_0x16dd71){try{jsonpatch[_0xd31b('0x1f')](_0x16dd71,_0x46149a,!![]);}catch(_0x3049b5){return BPromise[_0xd31b('0x20')](_0x3049b5);}return _0x16dd71[_0xd31b('0x21')]();};}function saveUpdates(_0xe82056,_0x1a112d){return function(_0x27cbac){if(_0x27cbac){return _0x27cbac[_0xd31b('0x22')](_0xe82056)[_0xd31b('0x23')](function(_0x525488){return _0x525488;});}return null;};}function removeEntity(_0x41dad6,_0x16dad7){return function(_0x4df132){if(_0x4df132){return _0x4df132[_0xd31b('0x24')]()['then'](function(){_0x41dad6[_0xd31b('0x18')](0xcc)[_0xd31b('0x19')]();});}};}function handleEntityNotFound(_0x38e70e,_0x55be19){return function(_0x48ff23){if(!_0x48ff23){_0x38e70e[_0xd31b('0x17')](0x194);}return _0x48ff23;};}function handleError(_0x558221,_0x1dcee2){_0x1dcee2=_0x1dcee2||0x1f4;return function(_0x4a9eef){logger['error'](_0x4a9eef['stack']);if(_0x4a9eef[_0xd31b('0x25')]){delete _0x4a9eef[_0xd31b('0x25')];}_0x558221[_0xd31b('0x18')](_0x1dcee2)['send'](_0x4a9eef);};}exports['index']=function(_0x510df2,_0x46b430){var _0x519c40={},_0x54a351={},_0x44b529={'count':0x0,'rows':[]};var _0x582356=db[_0xd31b('0x26')][_0xd31b('0x27')];_0x54a351[_0xd31b('0x28')]=_[_0xd31b('0x29')](_0x582356);_0x54a351[_0xd31b('0x2a')]=_[_0xd31b('0x29')](_0x510df2['query']);_0x54a351[_0xd31b('0x2b')]=_[_0xd31b('0x2c')](_0x54a351['model'],_0x54a351[_0xd31b('0x2a')]);_0x519c40[_0xd31b('0x2d')]=_[_0xd31b('0x2c')](_0x54a351['model'],qs[_0xd31b('0x2e')](_0x510df2['query'][_0xd31b('0x2e')]));_0x519c40[_0xd31b('0x2d')]=_0x519c40[_0xd31b('0x2d')][_0xd31b('0x2f')]?_0x519c40[_0xd31b('0x2d')]:_0x54a351[_0xd31b('0x28')];if(!_0x510df2[_0xd31b('0x2a')][_0xd31b('0x30')](_0xd31b('0x31'))){_0x519c40['limit']=qs[_0xd31b('0x1d')](_0x510df2[_0xd31b('0x2a')][_0xd31b('0x1d')]);_0x519c40['offset']=qs['offset'](_0x510df2['query']['offset']);}_0x519c40[_0xd31b('0x32')]=qs[_0xd31b('0x33')](_0x510df2[_0xd31b('0x2a')][_0xd31b('0x33')]);_0x519c40[_0xd31b('0x34')]=qs[_0xd31b('0x2b')](_[_0xd31b('0x35')](_0x510df2[_0xd31b('0x2a')],_0x54a351[_0xd31b('0x2b')]));if(_0x510df2['query'][_0xd31b('0x36')]){_0x519c40[_0xd31b('0x34')]=_[_0xd31b('0x37')](_0x519c40[_0xd31b('0x34')],{'$or':_[_0xd31b('0x38')](_0x582356,function(_0x305c56){if(_0x305c56[_0xd31b('0x39')][_0xd31b('0x3a')]!=='VIRTUAL'){var _0x49ed19={};_0x49ed19[_0x305c56[_0xd31b('0x3b')]]={'$like':'%'+_0x510df2['query']['filter']+'%'};return _0x49ed19;}})});}_0x519c40=_[_0xd31b('0x37')]({},_0x519c40,_0x510df2[_0xd31b('0x3c')]);var _0x4c4572={'where':_0x519c40[_0xd31b('0x34')]};return db[_0xd31b('0x26')][_0xd31b('0x1b')](_0x4c4572)[_0xd31b('0x23')](function(_0x2e06eb){_0x44b529[_0xd31b('0x1b')]=_0x2e06eb;if(_0x510df2[_0xd31b('0x2a')][_0xd31b('0x3d')]){_0x519c40[_0xd31b('0x3e')]=[{'all':!![]}];}return db['SmsQueueReport'][_0xd31b('0x3f')](_0x519c40);})[_0xd31b('0x23')](function(_0x2513ed){_0x44b529[_0xd31b('0x40')]=_0x2513ed;return _0x44b529;})['then'](respondWithFilteredResult(_0x46b430,_0x519c40))['catch'](handleError(_0x46b430,null));};exports[_0xd31b('0x41')]=function(_0x42d0dc,_0x4ef0d7){var _0x229617={'raw':!![],'where':{'id':_0x42d0dc['params']['id']}},_0x9e568b={};_0x9e568b['model']=_[_0xd31b('0x29')](db[_0xd31b('0x26')][_0xd31b('0x27')]);_0x9e568b[_0xd31b('0x2a')]=_[_0xd31b('0x29')](_0x42d0dc[_0xd31b('0x2a')]);_0x9e568b[_0xd31b('0x2b')]=_[_0xd31b('0x2c')](_0x9e568b[_0xd31b('0x28')],_0x9e568b['query']);_0x229617[_0xd31b('0x2d')]=_[_0xd31b('0x2c')](_0x9e568b[_0xd31b('0x28')],qs[_0xd31b('0x2e')](_0x42d0dc[_0xd31b('0x2a')][_0xd31b('0x2e')]));_0x229617[_0xd31b('0x2d')]=_0x229617[_0xd31b('0x2d')][_0xd31b('0x2f')]?_0x229617['attributes']:_0x9e568b[_0xd31b('0x28')];if(_0x42d0dc[_0xd31b('0x2a')][_0xd31b('0x3d')]){_0x229617[_0xd31b('0x3e')]=[{'all':!![]}];}_0x229617=_[_0xd31b('0x37')]({},_0x229617,_0x42d0dc['options']);return db[_0xd31b('0x26')]['find'](_0x229617)[_0xd31b('0x23')](handleEntityNotFound(_0x4ef0d7,null))[_0xd31b('0x23')](respondWithResult(_0x4ef0d7,null))['catch'](handleError(_0x4ef0d7,null));};exports[_0xd31b('0x42')]=function(_0x519efa,_0x256b5a){return db[_0xd31b('0x26')][_0xd31b('0x42')](_0x519efa[_0xd31b('0x43')],{})['then'](respondWithResult(_0x256b5a,0xc9))[_0xd31b('0x44')](handleError(_0x256b5a,null));};exports[_0xd31b('0x22')]=function(_0x343bae,_0xf122bc){if(_0x343bae[_0xd31b('0x43')]['id']){delete _0x343bae[_0xd31b('0x43')]['id'];}return db[_0xd31b('0x26')]['find']({'where':{'id':_0x343bae[_0xd31b('0x45')]['id']}})[_0xd31b('0x23')](handleEntityNotFound(_0xf122bc,null))['then'](saveUpdates(_0x343bae['body'],null))[_0xd31b('0x23')](respondWithResult(_0xf122bc,null))[_0xd31b('0x44')](handleError(_0xf122bc,null));};exports[_0xd31b('0x24')]=function(_0x4852d9,_0x3a4fc8){return db[_0xd31b('0x26')][_0xd31b('0x46')]({'where':{'id':_0x4852d9[_0xd31b('0x45')]['id']}})[_0xd31b('0x23')](handleEntityNotFound(_0x3a4fc8,null))[_0xd31b('0x23')](removeEntity(_0x3a4fc8,null))[_0xd31b('0x44')](handleError(_0x3a4fc8,null));};exports['describe']=function(_0x590bb1,_0x18623e){return db['SmsQueueReport'][_0xd31b('0x47')]()[_0xd31b('0x23')](respondWithResult(_0x18623e,null))[_0xd31b('0x44')](handleError(_0x18623e,null));};
\ No newline at end of file
index 0eeb20f..917648d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ba0=['api','moment','bluebird','request-promise','./smsQueueReport.attributes','exports','define','SmsQueueReport','uniqueid','lodash','../../config/logger'];(function(_0x531d15,_0x599af5){var _0x271a18=function(_0x31284d){while(--_0x31284d){_0x531d15['push'](_0x531d15['shift']());}};_0x271a18(++_0x599af5);}(_0x3ba0,0x195));var _0x03ba=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x3ba0[_0x19e35c];return _0x3e1fe8;};'use strict';var _=require(_0x03ba('0x0'));var util=require('util');var logger=require(_0x03ba('0x1'))(_0x03ba('0x2'));var moment=require(_0x03ba('0x3'));var BPromise=require(_0x03ba('0x4'));var rp=require(_0x03ba('0x5'));var attributes=require(_0x03ba('0x6'));module[_0x03ba('0x7')]=function(_0x381204,_0xff0ff5){return _0x381204[_0x03ba('0x8')](_0x03ba('0x9'),attributes,{'tableName':'report_sms_queue','paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x03ba('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x6f3a=['request-promise','exports','define','SmsQueueReport','report_sms_queue','uniqueid','util','../../config/logger','moment'];(function(_0x3c8e9a,_0x384306){var _0x2d4c57=function(_0x43d408){while(--_0x43d408){_0x3c8e9a['push'](_0x3c8e9a['shift']());}};_0x2d4c57(++_0x384306);}(_0x6f3a,0xe7));var _0xa6f3=function(_0x40a045,_0x516f0e){_0x40a045=_0x40a045-0x0;var _0x1a687c=_0x6f3a[_0x40a045];return _0x1a687c;};'use strict';var _=require('lodash');var util=require(_0xa6f3('0x0'));var logger=require(_0xa6f3('0x1'))('api');var moment=require(_0xa6f3('0x2'));var BPromise=require('bluebird');var rp=require(_0xa6f3('0x3'));var attributes=require('./smsQueueReport.attributes');module[_0xa6f3('0x4')]=function(_0x30c810,_0x427072){return _0x30c810[_0xa6f3('0x5')](_0xa6f3('0x6'),attributes,{'tableName':_0xa6f3('0x7'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0xa6f3('0x8')]}],'timestamps':!![]});};
\ No newline at end of file
index 431fdcd..0d0637f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d2b=['options','then','CreateSmsQueueReport','catch','update','where','limit','UpdateSmsQueueReport','lodash','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','http','request','info','SmsQueueReport,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','SmsQueueReport','create'];(function(_0xaa0309,_0x1c8008){var _0x5de7ce=function(_0x3aa6ae){while(--_0x3aa6ae){_0xaa0309['push'](_0xaa0309['shift']());}};_0x5de7ce(++_0x1c8008);}(_0x1d2b,0x104));var _0xb1d2=function(_0x40ac5e,_0x2de228){_0x40ac5e=_0x40ac5e-0x0;var _0x2839d6=_0x1d2b[_0x40ac5e];return _0x2839d6;};'use strict';var _=require(_0xb1d2('0x0'));var util=require('util');var moment=require('moment');var BPromise=require(_0xb1d2('0x1'));var rs=require(_0xb1d2('0x2'));var fs=require('fs');var Redis=require(_0xb1d2('0x3'));var db=require(_0xb1d2('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xb1d2('0x5'))(_0xb1d2('0x6'));var config=require(_0xb1d2('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0xb1d2('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x202548,_0x1ac299,_0x592c37){return new BPromise(function(_0x119cea,_0x2bddc2){return client[_0xb1d2('0x9')](_0x202548,_0x592c37)['then'](function(_0x386be4){logger[_0xb1d2('0xa')](_0xb1d2('0xb'),_0x1ac299,_0xb1d2('0xc'));logger[_0xb1d2('0xd')]('SmsQueueReport,\x20%s,\x20%s,\x20%s',_0x1ac299,'request\x20sent',JSON[_0xb1d2('0xe')](_0x386be4));if(_0x386be4[_0xb1d2('0xf')]){if(_0x386be4['error']['code']===0x1f4){logger['error']('SmsQueueReport,\x20%s,\x20%s',_0x1ac299,_0x386be4['error'][_0xb1d2('0x10')]);return _0x2bddc2(_0x386be4[_0xb1d2('0xf')]['message']);}logger['error'](_0xb1d2('0xb'),_0x1ac299,_0x386be4[_0xb1d2('0xf')][_0xb1d2('0x10')]);return _0x119cea(_0x386be4['error'][_0xb1d2('0x10')]);}else{logger[_0xb1d2('0xa')](_0xb1d2('0xb'),_0x1ac299,_0xb1d2('0xc'));_0x119cea(_0x386be4[_0xb1d2('0x11')][_0xb1d2('0x10')]);}})['catch'](function(_0x3681f1){logger[_0xb1d2('0xf')]('SmsQueueReport,\x20%s,\x20%s',_0x1ac299,_0x3681f1);_0x2bddc2(_0x3681f1);});});}exports['CreateSmsQueueReport']=function(_0x244bcc){var _0x4777d0=this;return new Promise(function(_0x413af8,_0x61abb){return db[_0xb1d2('0x12')][_0xb1d2('0x13')](_0x244bcc['body'],{'raw':_0x244bcc['options']?_0x244bcc[_0xb1d2('0x14')]['raw']===undefined?!![]:![]:!![]})[_0xb1d2('0x15')](function(_0x18efa6){logger[_0xb1d2('0xa')](_0xb1d2('0x16'),_0x244bcc);logger[_0xb1d2('0xd')](_0xb1d2('0x16'),_0x244bcc,JSON[_0xb1d2('0xe')](_0x18efa6));_0x413af8(_0x18efa6);})[_0xb1d2('0x17')](function(_0x5ec5ac){logger[_0xb1d2('0xf')](_0xb1d2('0x16'),_0x5ec5ac['message'],_0x244bcc);_0x61abb(_0x4777d0[_0xb1d2('0xf')](0x1f4,_0x5ec5ac[_0xb1d2('0x10')]));});});};exports['UpdateSmsQueueReport']=function(_0x4a1700){var _0x145b60=this;return new Promise(function(_0x3d94b1,_0x179799){return db[_0xb1d2('0x12')][_0xb1d2('0x18')](_0x4a1700['body'],{'raw':_0x4a1700[_0xb1d2('0x14')]?_0x4a1700[_0xb1d2('0x14')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x4a1700[_0xb1d2('0x14')]?_0x4a1700[_0xb1d2('0x14')][_0xb1d2('0x19')]||null:null,'attributes':_0x4a1700[_0xb1d2('0x14')]?_0x4a1700['options']['attributes']||null:null,'limit':_0x4a1700['options']?_0x4a1700[_0xb1d2('0x14')][_0xb1d2('0x1a')]||null:null})['then'](function(_0x567dc8){logger[_0xb1d2('0xa')]('UpdateSmsQueueReport',_0x4a1700);logger[_0xb1d2('0xd')](_0xb1d2('0x1b'),_0x4a1700,JSON[_0xb1d2('0xe')](_0x567dc8));_0x3d94b1(_0x567dc8);})[_0xb1d2('0x17')](function(_0x5d56b7){logger['error'](_0xb1d2('0x1b'),_0x5d56b7[_0xb1d2('0x10')],_0x4a1700);_0x179799(_0x145b60['error'](0x1f4,_0x5d56b7[_0xb1d2('0x10')]));});});};
\ No newline at end of file
+var _0xacdb=['result','catch','SmsQueueReport','create','body','options','raw','CreateSmsQueueReport','UpdateSmsQueueReport','update','attributes','limit','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','request','then','SmsQueueReport,\x20%s,\x20%s','request\x20sent','debug','SmsQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info'];(function(_0x4da87c,_0x5aecb2){var _0x328598=function(_0x359f27){while(--_0x359f27){_0x4da87c['push'](_0x4da87c['shift']());}};_0x328598(++_0x5aecb2);}(_0xacdb,0x198));var _0xbacd=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xacdb[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xbacd('0x0'));var util=require(_0xbacd('0x1'));var moment=require('moment');var BPromise=require(_0xbacd('0x2'));var rs=require(_0xbacd('0x3'));var fs=require('fs');var Redis=require(_0xbacd('0x4'));var db=require(_0xbacd('0x5'))['db'];var utils=require('../../config/utils');var logger=require(_0xbacd('0x6'))(_0xbacd('0x7'));var config=require(_0xbacd('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xbacd('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3d0602,_0x54f879,_0x5412e4){return new BPromise(function(_0x49ac22,_0x582957){return client[_0xbacd('0xa')](_0x3d0602,_0x5412e4)[_0xbacd('0xb')](function(_0x5d6ad8){logger['info'](_0xbacd('0xc'),_0x54f879,_0xbacd('0xd'));logger[_0xbacd('0xe')](_0xbacd('0xf'),_0x54f879,'request\x20sent',JSON[_0xbacd('0x10')](_0x5d6ad8));if(_0x5d6ad8[_0xbacd('0x11')]){if(_0x5d6ad8[_0xbacd('0x11')][_0xbacd('0x12')]===0x1f4){logger[_0xbacd('0x11')]('SmsQueueReport,\x20%s,\x20%s',_0x54f879,_0x5d6ad8[_0xbacd('0x11')][_0xbacd('0x13')]);return _0x582957(_0x5d6ad8[_0xbacd('0x11')]['message']);}logger['error'](_0xbacd('0xc'),_0x54f879,_0x5d6ad8['error'][_0xbacd('0x13')]);return _0x49ac22(_0x5d6ad8[_0xbacd('0x11')][_0xbacd('0x13')]);}else{logger[_0xbacd('0x14')](_0xbacd('0xc'),_0x54f879,_0xbacd('0xd'));_0x49ac22(_0x5d6ad8[_0xbacd('0x15')][_0xbacd('0x13')]);}})[_0xbacd('0x16')](function(_0x1f34d5){logger[_0xbacd('0x11')]('SmsQueueReport,\x20%s,\x20%s',_0x54f879,_0x1f34d5);_0x582957(_0x1f34d5);});});}exports['CreateSmsQueueReport']=function(_0x519072){var _0x486f2c=this;return new Promise(function(_0x30df0e,_0x4f58f1){return db[_0xbacd('0x17')][_0xbacd('0x18')](_0x519072[_0xbacd('0x19')],{'raw':_0x519072[_0xbacd('0x1a')]?_0x519072['options'][_0xbacd('0x1b')]===undefined?!![]:![]:!![]})[_0xbacd('0xb')](function(_0x59b8fc){logger[_0xbacd('0x14')](_0xbacd('0x1c'),_0x519072);logger[_0xbacd('0xe')](_0xbacd('0x1c'),_0x519072,JSON['stringify'](_0x59b8fc));_0x30df0e(_0x59b8fc);})[_0xbacd('0x16')](function(_0x1048ab){logger['error'](_0xbacd('0x1c'),_0x1048ab[_0xbacd('0x13')],_0x519072);_0x4f58f1(_0x486f2c[_0xbacd('0x11')](0x1f4,_0x1048ab['message']));});});};exports[_0xbacd('0x1d')]=function(_0xe51c08){var _0x4dc485=this;return new Promise(function(_0x13ef90,_0x217ab5){return db[_0xbacd('0x17')][_0xbacd('0x1e')](_0xe51c08['body'],{'raw':_0xe51c08['options']?_0xe51c08[_0xbacd('0x1a')][_0xbacd('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xe51c08[_0xbacd('0x1a')]?_0xe51c08[_0xbacd('0x1a')]['where']||null:null,'attributes':_0xe51c08['options']?_0xe51c08['options'][_0xbacd('0x1f')]||null:null,'limit':_0xe51c08['options']?_0xe51c08[_0xbacd('0x1a')][_0xbacd('0x20')]||null:null})['then'](function(_0x1cbc6c){logger[_0xbacd('0x14')]('UpdateSmsQueueReport',_0xe51c08);logger[_0xbacd('0xe')](_0xbacd('0x1d'),_0xe51c08,JSON['stringify'](_0x1cbc6c));_0x13ef90(_0x1cbc6c);})[_0xbacd('0x16')](function(_0x539db0){logger['error']('UpdateSmsQueueReport',_0x539db0[_0xbacd('0x13')],_0xe51c08);_0x217ab5(_0x4dc485['error'](0x1f4,_0x539db0['message']));});});};
\ No newline at end of file
index 7ee3525..2fdcc7a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7df4=['path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsTransferReport.controller','get','index','describe','/:id','create','put','isAuthenticated','update','delete','destroy','exports','multer','util'];(function(_0x5bed39,_0x3d4347){var _0x523a8e=function(_0x294bc6){while(--_0x294bc6){_0x5bed39['push'](_0x5bed39['shift']());}};_0x523a8e(++_0x3d4347);}(_0x7df4,0x152));var _0x47df=function(_0x55ddb3,_0x438146){_0x55ddb3=_0x55ddb3-0x0;var _0x355a70=_0x7df4[_0x55ddb3];return _0x355a70;};'use strict';var multer=require(_0x47df('0x0'));var util=require(_0x47df('0x1'));var path=require(_0x47df('0x2'));var timeout=require(_0x47df('0x3'));var express=require(_0x47df('0x4'));var router=express['Router']();var auth=require(_0x47df('0x5'));var interaction=require(_0x47df('0x6'));var config=require(_0x47df('0x7'));var controller=require(_0x47df('0x8'));router[_0x47df('0x9')]('/',auth['isAuthenticated'](),controller[_0x47df('0xa')]);router['get']('/describe',auth['isAuthenticated'](),controller[_0x47df('0xb')]);router['get'](_0x47df('0xc'),auth['isAuthenticated'](),controller['show']);router['post']('/',auth['isAuthenticated'](),controller[_0x47df('0xd')]);router[_0x47df('0xe')](_0x47df('0xc'),auth[_0x47df('0xf')](),controller[_0x47df('0x10')]);router[_0x47df('0x11')](_0x47df('0xc'),auth[_0x47df('0xf')](),controller[_0x47df('0x12')]);module[_0x47df('0x13')]=router;
\ No newline at end of file
+var _0xd8e1=['delete','destroy','exports','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./smsTransferReport.controller','get','isAuthenticated','index','/describe','/:id','show','post','create','put'];(function(_0x51020b,_0x38c2c7){var _0x371e47=function(_0x2a538f){while(--_0x2a538f){_0x51020b['push'](_0x51020b['shift']());}};_0x371e47(++_0x38c2c7);}(_0xd8e1,0x96));var _0x1d8e=function(_0x44268d,_0xad8443){_0x44268d=_0x44268d-0x0;var _0x4be92d=_0xd8e1[_0x44268d];return _0x4be92d;};'use strict';var multer=require(_0x1d8e('0x0'));var util=require(_0x1d8e('0x1'));var path=require(_0x1d8e('0x2'));var timeout=require(_0x1d8e('0x3'));var express=require('express');var router=express[_0x1d8e('0x4')]();var auth=require(_0x1d8e('0x5'));var interaction=require(_0x1d8e('0x6'));var config=require(_0x1d8e('0x7'));var controller=require(_0x1d8e('0x8'));router[_0x1d8e('0x9')]('/',auth[_0x1d8e('0xa')](),controller[_0x1d8e('0xb')]);router['get'](_0x1d8e('0xc'),auth[_0x1d8e('0xa')](),controller['describe']);router[_0x1d8e('0x9')](_0x1d8e('0xd'),auth['isAuthenticated'](),controller[_0x1d8e('0xe')]);router[_0x1d8e('0xf')]('/',auth['isAuthenticated'](),controller[_0x1d8e('0x10')]);router[_0x1d8e('0x11')](_0x1d8e('0xd'),auth['isAuthenticated'](),controller['update']);router[_0x1d8e('0x12')](_0x1d8e('0xd'),auth[_0x1d8e('0xa')](),controller[_0x1d8e('0x13')]);module[_0x1d8e('0x14')]=router;
\ No newline at end of file
index cea2e7f..882f50f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa1d1=['NOW','moment','exports','STRING','ENUM','account','agent','queue','DATE'];(function(_0x5bd29d,_0x268f85){var _0x15dd71=function(_0x2d40dc){while(--_0x2d40dc){_0x5bd29d['push'](_0x5bd29d['shift']());}};_0x15dd71(++_0x268f85);}(_0xa1d1,0x106));var _0x1a1d=function(_0x459c7b,_0x171745){_0x459c7b=_0x459c7b-0x0;var _0x55c2d7=_0xa1d1[_0x459c7b];return _0x55c2d7;};'use strict';var moment=require(_0x1a1d('0x0'));var Sequelize=require('sequelize');module[_0x1a1d('0x1')]={'uniqueid':{'type':Sequelize[_0x1a1d('0x2')],'allowNull':![]},'type':{'type':Sequelize[_0x1a1d('0x3')](_0x1a1d('0x4'),_0x1a1d('0x5'),_0x1a1d('0x6')),'allowNull':![],'defaultValue':_0x1a1d('0x6')},'transferredAt':{'type':Sequelize[_0x1a1d('0x7')],'allowNull':![],'defaultValue':Sequelize[_0x1a1d('0x8')]}};
\ No newline at end of file
+var _0xf3d5=['NOW','moment','sequelize','exports','STRING','ENUM','agent','queue'];(function(_0x15c421,_0x6366f7){var _0x5e5ed5=function(_0x206e66){while(--_0x206e66){_0x15c421['push'](_0x15c421['shift']());}};_0x5e5ed5(++_0x6366f7);}(_0xf3d5,0x89));var _0x5f3d=function(_0x3c719c,_0x29afd9){_0x3c719c=_0x3c719c-0x0;var _0x160782=_0xf3d5[_0x3c719c];return _0x160782;};'use strict';var moment=require(_0x5f3d('0x0'));var Sequelize=require(_0x5f3d('0x1'));module[_0x5f3d('0x2')]={'uniqueid':{'type':Sequelize[_0x5f3d('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x5f3d('0x4')]('account',_0x5f3d('0x5'),_0x5f3d('0x6')),'allowNull':![],'defaultValue':_0x5f3d('0x6')},'transferredAt':{'type':Sequelize['DATE'],'allowNull':![],'defaultValue':Sequelize[_0x5f3d('0x7')]}};
\ No newline at end of file
index bb0b091..ab1edfc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x608f=['ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','count','offset','limit','set','Content-Range','json','apply','reject','then','destroy','error','stack','name','send','index','SmsTransferReport','rawAttributes','model','keys','query','filters','intersection','fields','attributes','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','includeAll','include','findAll','catch','show','params','length','options','create','body','update','find','describe','html-pdf','rimraf','zip-dir','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware'];(function(_0x4f7576,_0x138a8f){var _0x45d522=function(_0x1662ee){while(--_0x1662ee){_0x4f7576['push'](_0x4f7576['shift']());}};_0x45d522(++_0x138a8f);}(_0x608f,0x1bb));var _0xf608=function(_0x5dc549,_0x3a2ad4){_0x5dc549=_0x5dc549-0x0;var _0x420af2=_0x608f[_0x5dc549];return _0x420af2;};'use strict';var pdf=require(_0xf608('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xf608('0x1'));var zipdir=require(_0xf608('0x2'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0xf608('0x3'));var BPromise=require(_0xf608('0x4'));var Mustache=require(_0xf608('0x5'));var util=require(_0xf608('0x6'));var path=require(_0xf608('0x7'));var sox=require(_0xf608('0x8'));var csv=require('to-csv');var ejs=require(_0xf608('0x9'));var fs=require('fs');var _=require(_0xf608('0xa'));var squel=require('squel');var crypto=require(_0xf608('0xb'));var jsforce=require(_0xf608('0xc'));var deskjs=require(_0xf608('0xd'));var toCsv=require(_0xf608('0xe'));var querystring=require(_0xf608('0xf'));var Papa=require(_0xf608('0x10'));var authService=require(_0xf608('0x11'));var hardwareService=require(_0xf608('0x12'));var Redis=require(_0xf608('0x13'));var qs=require(_0xf608('0x14'));var logger=require(_0xf608('0x15'))(_0xf608('0x16'));var utils=require(_0xf608('0x17'));var config=require(_0xf608('0x18'));var db=require(_0xf608('0x19'))['db'];function respondWithStatusCode(_0x18675f,_0x3f4b00){_0x3f4b00=_0x3f4b00||0xcc;return function(_0x2794fb){if(_0x2794fb){return _0x18675f[_0xf608('0x1a')](_0x3f4b00);}return _0x18675f['status'](_0x3f4b00)[_0xf608('0x1b')]();};}function respondWithResult(_0xf1ec79,_0x12cd42){_0x12cd42=_0x12cd42||0xc8;return function(_0x204f35){if(_0x204f35){return _0xf1ec79[_0xf608('0x1c')](_0x12cd42)['json'](_0x204f35);}};}function respondWithFilteredResult(_0x5e053b,_0x93b2da){return function(_0x33b3c1){if(_0x33b3c1){var _0x40638f=_0x33b3c1[_0xf608('0x1d')],_0x89f2c1=_0x93b2da[_0xf608('0x1e')],_0x24395e=_0x93b2da[_0xf608('0x1e')]+_0x93b2da[_0xf608('0x1f')],_0x5d38b1;if(_0x24395e>=_0x40638f){_0x24395e=_0x40638f;_0x5d38b1=0xc8;}else{_0x5d38b1=0xce;}_0x5e053b[_0xf608('0x1c')](_0x5d38b1);return _0x5e053b[_0xf608('0x20')](_0xf608('0x21'),_0x89f2c1+'-'+_0x24395e+'/'+_0x40638f)[_0xf608('0x22')](_0x33b3c1);}return null;};}function patchUpdates(_0x3c4a33){return function(_0x4370c1){try{jsonpatch[_0xf608('0x23')](_0x4370c1,_0x3c4a33,!![]);}catch(_0x5bd36b){return BPromise[_0xf608('0x24')](_0x5bd36b);}return _0x4370c1['save']();};}function saveUpdates(_0x4cd78f,_0x3913aa){return function(_0x1a98fb){if(_0x1a98fb){return _0x1a98fb['update'](_0x4cd78f)[_0xf608('0x25')](function(_0x4b5619){return _0x4b5619;});}return null;};}function removeEntity(_0x5398dd,_0x28831c){return function(_0x9abc52){if(_0x9abc52){return _0x9abc52[_0xf608('0x26')]()['then'](function(){_0x5398dd[_0xf608('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x557fa2,_0x132a18){return function(_0x154c28){if(!_0x154c28){_0x557fa2[_0xf608('0x1a')](0x194);}return _0x154c28;};}function handleError(_0x5af9f4,_0xfd2fd1){_0xfd2fd1=_0xfd2fd1||0x1f4;return function(_0x279ca8){logger[_0xf608('0x27')](_0x279ca8[_0xf608('0x28')]);if(_0x279ca8[_0xf608('0x29')]){delete _0x279ca8['name'];}_0x5af9f4[_0xf608('0x1c')](_0xfd2fd1)[_0xf608('0x2a')](_0x279ca8);};}exports[_0xf608('0x2b')]=function(_0x90d251,_0x5d3d91){var _0x28162a={},_0x35262c={},_0x5e13c5={'count':0x0,'rows':[]};var _0x577b01=db[_0xf608('0x2c')][_0xf608('0x2d')];_0x35262c[_0xf608('0x2e')]=_[_0xf608('0x2f')](_0x577b01);_0x35262c['query']=_['keys'](_0x90d251[_0xf608('0x30')]);_0x35262c[_0xf608('0x31')]=_[_0xf608('0x32')](_0x35262c[_0xf608('0x2e')],_0x35262c['query']);_0x28162a['attributes']=_['intersection'](_0x35262c[_0xf608('0x2e')],qs[_0xf608('0x33')](_0x90d251[_0xf608('0x30')][_0xf608('0x33')]));_0x28162a['attributes']=_0x28162a[_0xf608('0x34')]['length']?_0x28162a[_0xf608('0x34')]:_0x35262c[_0xf608('0x2e')];if(!_0x90d251[_0xf608('0x30')]['hasOwnProperty'](_0xf608('0x35'))){_0x28162a['limit']=qs[_0xf608('0x1f')](_0x90d251['query'][_0xf608('0x1f')]);_0x28162a[_0xf608('0x1e')]=qs['offset'](_0x90d251[_0xf608('0x30')][_0xf608('0x1e')]);}_0x28162a[_0xf608('0x36')]=qs[_0xf608('0x37')](_0x90d251[_0xf608('0x30')]['sort']);_0x28162a[_0xf608('0x38')]=qs[_0xf608('0x31')](_[_0xf608('0x39')](_0x90d251[_0xf608('0x30')],_0x35262c[_0xf608('0x31')]));if(_0x90d251[_0xf608('0x30')][_0xf608('0x3a')]){_0x28162a[_0xf608('0x38')]=_[_0xf608('0x3b')](_0x28162a[_0xf608('0x38')],{'$or':_[_0xf608('0x3c')](_0x577b01,function(_0x3ba4ba){if(_0x3ba4ba[_0xf608('0x3d')][_0xf608('0x3e')]!==_0xf608('0x3f')){var _0x38330e={};_0x38330e[_0x3ba4ba['field']]={'$like':'%'+_0x90d251['query']['filter']+'%'};return _0x38330e;}})});}_0x28162a=_[_0xf608('0x3b')]({},_0x28162a,_0x90d251['options']);var _0x417548={'where':_0x28162a[_0xf608('0x38')]};return db[_0xf608('0x2c')][_0xf608('0x1d')](_0x417548)['then'](function(_0x28f7b2){_0x5e13c5[_0xf608('0x1d')]=_0x28f7b2;if(_0x90d251[_0xf608('0x30')][_0xf608('0x40')]){_0x28162a[_0xf608('0x41')]=[{'all':!![]}];}return db[_0xf608('0x2c')][_0xf608('0x42')](_0x28162a);})[_0xf608('0x25')](function(_0x498054){_0x5e13c5['rows']=_0x498054;return _0x5e13c5;})['then'](respondWithFilteredResult(_0x5d3d91,_0x28162a))[_0xf608('0x43')](handleError(_0x5d3d91,null));};exports[_0xf608('0x44')]=function(_0x41caf8,_0x41e7ab){var _0x1147ce={'raw':!![],'where':{'id':_0x41caf8[_0xf608('0x45')]['id']}},_0x33b7ad={};_0x33b7ad['model']=_[_0xf608('0x2f')](db[_0xf608('0x2c')][_0xf608('0x2d')]);_0x33b7ad[_0xf608('0x30')]=_[_0xf608('0x2f')](_0x41caf8[_0xf608('0x30')]);_0x33b7ad['filters']=_[_0xf608('0x32')](_0x33b7ad['model'],_0x33b7ad[_0xf608('0x30')]);_0x1147ce[_0xf608('0x34')]=_[_0xf608('0x32')](_0x33b7ad[_0xf608('0x2e')],qs[_0xf608('0x33')](_0x41caf8[_0xf608('0x30')][_0xf608('0x33')]));_0x1147ce['attributes']=_0x1147ce[_0xf608('0x34')][_0xf608('0x46')]?_0x1147ce[_0xf608('0x34')]:_0x33b7ad['model'];if(_0x41caf8[_0xf608('0x30')]['includeAll']){_0x1147ce[_0xf608('0x41')]=[{'all':!![]}];}_0x1147ce=_[_0xf608('0x3b')]({},_0x1147ce,_0x41caf8[_0xf608('0x47')]);return db[_0xf608('0x2c')]['find'](_0x1147ce)['then'](handleEntityNotFound(_0x41e7ab,null))[_0xf608('0x25')](respondWithResult(_0x41e7ab,null))['catch'](handleError(_0x41e7ab,null));};exports[_0xf608('0x48')]=function(_0x3919ac,_0xac4820){return db[_0xf608('0x2c')]['create'](_0x3919ac[_0xf608('0x49')],{})[_0xf608('0x25')](respondWithResult(_0xac4820,0xc9))[_0xf608('0x43')](handleError(_0xac4820,null));};exports[_0xf608('0x4a')]=function(_0xf5bbfd,_0x1b100f){if(_0xf5bbfd[_0xf608('0x49')]['id']){delete _0xf5bbfd[_0xf608('0x49')]['id'];}return db[_0xf608('0x2c')][_0xf608('0x4b')]({'where':{'id':_0xf5bbfd['params']['id']}})[_0xf608('0x25')](handleEntityNotFound(_0x1b100f,null))['then'](saveUpdates(_0xf5bbfd[_0xf608('0x49')],null))[_0xf608('0x25')](respondWithResult(_0x1b100f,null))[_0xf608('0x43')](handleError(_0x1b100f,null));};exports[_0xf608('0x26')]=function(_0x59973a,_0x433438){return db[_0xf608('0x2c')][_0xf608('0x4b')]({'where':{'id':_0x59973a[_0xf608('0x45')]['id']}})[_0xf608('0x25')](handleEntityNotFound(_0x433438,null))[_0xf608('0x25')](removeEntity(_0x433438,null))['catch'](handleError(_0x433438,null));};exports[_0xf608('0x4c')]=function(_0x55a29c,_0x428415){return db['SmsTransferReport'][_0xf608('0x4c')]()[_0xf608('0x25')](respondWithResult(_0x428415,null))['catch'](handleError(_0x428415,null));};
\ No newline at end of file
+var _0x6a30=['findAll','rows','show','params','find','catch','create','body','describe','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','count','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','end','error','stack','name','send','index','SmsTransferReport','rawAttributes','keys','query','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','filters','pick','filter','merge','key','VIRTUAL','options','includeAll','include'];(function(_0x5c9169,_0x2d6d0f){var _0x5b81bd=function(_0x1a429c){while(--_0x1a429c){_0x5c9169['push'](_0x5c9169['shift']());}};_0x5b81bd(++_0x2d6d0f);}(_0x6a30,0x9d));var _0x06a3=function(_0x24ba7c,_0x47c888){_0x24ba7c=_0x24ba7c-0x0;var _0x14afb4=_0x6a30[_0x24ba7c];return _0x14afb4;};'use strict';var pdf=require(_0x06a3('0x0'));var emlformat=require(_0x06a3('0x1'));var rimraf=require(_0x06a3('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0x06a3('0x3'));var rp=require(_0x06a3('0x4'));var moment=require('moment');var BPromise=require(_0x06a3('0x5'));var Mustache=require(_0x06a3('0x6'));var util=require(_0x06a3('0x7'));var path=require(_0x06a3('0x8'));var sox=require(_0x06a3('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x06a3('0xa'));var squel=require(_0x06a3('0xb'));var crypto=require('crypto');var jsforce=require(_0x06a3('0xc'));var deskjs=require(_0x06a3('0xd'));var toCsv=require('to-csv');var querystring=require(_0x06a3('0xe'));var Papa=require(_0x06a3('0xf'));var authService=require(_0x06a3('0x10'));var hardwareService=require(_0x06a3('0x11'));var Redis=require(_0x06a3('0x12'));var qs=require(_0x06a3('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0x06a3('0x14'));var config=require(_0x06a3('0x15'));var db=require(_0x06a3('0x16'))['db'];function respondWithStatusCode(_0x13c265,_0x5e78b2){_0x5e78b2=_0x5e78b2||0xcc;return function(_0x2bb89d){if(_0x2bb89d){return _0x13c265[_0x06a3('0x17')](_0x5e78b2);}return _0x13c265[_0x06a3('0x18')](_0x5e78b2)['end']();};}function respondWithResult(_0x397321,_0x1041ef){_0x1041ef=_0x1041ef||0xc8;return function(_0x49d830){if(_0x49d830){return _0x397321[_0x06a3('0x18')](_0x1041ef)['json'](_0x49d830);}};}function respondWithFilteredResult(_0x55dc4e,_0x15dd6b){return function(_0x455b23){if(_0x455b23){var _0x107995=_0x455b23[_0x06a3('0x19')],_0xdb1dea=_0x15dd6b['offset'],_0x25f260=_0x15dd6b['offset']+_0x15dd6b[_0x06a3('0x1a')],_0x30fea3;if(_0x25f260>=_0x107995){_0x25f260=_0x107995;_0x30fea3=0xc8;}else{_0x30fea3=0xce;}_0x55dc4e[_0x06a3('0x18')](_0x30fea3);return _0x55dc4e[_0x06a3('0x1b')](_0x06a3('0x1c'),_0xdb1dea+'-'+_0x25f260+'/'+_0x107995)[_0x06a3('0x1d')](_0x455b23);}return null;};}function patchUpdates(_0x5ea039){return function(_0x766883){try{jsonpatch[_0x06a3('0x1e')](_0x766883,_0x5ea039,!![]);}catch(_0x47eb7c){return BPromise[_0x06a3('0x1f')](_0x47eb7c);}return _0x766883[_0x06a3('0x20')]();};}function saveUpdates(_0x570e22,_0x6dafd1){return function(_0x840c08){if(_0x840c08){return _0x840c08[_0x06a3('0x21')](_0x570e22)[_0x06a3('0x22')](function(_0x3f7092){return _0x3f7092;});}return null;};}function removeEntity(_0xec3ed9,_0x45634c){return function(_0xf07c4a){if(_0xf07c4a){return _0xf07c4a[_0x06a3('0x23')]()[_0x06a3('0x22')](function(){_0xec3ed9[_0x06a3('0x18')](0xcc)[_0x06a3('0x24')]();});}};}function handleEntityNotFound(_0x1d47da,_0x1932d5){return function(_0x472b9b){if(!_0x472b9b){_0x1d47da[_0x06a3('0x17')](0x194);}return _0x472b9b;};}function handleError(_0xe31d56,_0x582211){_0x582211=_0x582211||0x1f4;return function(_0x1cdafb){logger[_0x06a3('0x25')](_0x1cdafb[_0x06a3('0x26')]);if(_0x1cdafb[_0x06a3('0x27')]){delete _0x1cdafb[_0x06a3('0x27')];}_0xe31d56[_0x06a3('0x18')](_0x582211)[_0x06a3('0x28')](_0x1cdafb);};}exports[_0x06a3('0x29')]=function(_0x1f2b75,_0x5f5543){var _0x2276fb={},_0x2707dc={},_0x1c791f={'count':0x0,'rows':[]};var _0x51c8b3=db[_0x06a3('0x2a')][_0x06a3('0x2b')];_0x2707dc['model']=_['keys'](_0x51c8b3);_0x2707dc['query']=_[_0x06a3('0x2c')](_0x1f2b75[_0x06a3('0x2d')]);_0x2707dc['filters']=_[_0x06a3('0x2e')](_0x2707dc['model'],_0x2707dc['query']);_0x2276fb['attributes']=_[_0x06a3('0x2e')](_0x2707dc[_0x06a3('0x2f')],qs[_0x06a3('0x30')](_0x1f2b75[_0x06a3('0x2d')]['fields']));_0x2276fb[_0x06a3('0x31')]=_0x2276fb[_0x06a3('0x31')][_0x06a3('0x32')]?_0x2276fb[_0x06a3('0x31')]:_0x2707dc['model'];if(!_0x1f2b75[_0x06a3('0x2d')][_0x06a3('0x33')](_0x06a3('0x34'))){_0x2276fb[_0x06a3('0x1a')]=qs[_0x06a3('0x1a')](_0x1f2b75[_0x06a3('0x2d')][_0x06a3('0x1a')]);_0x2276fb['offset']=qs['offset'](_0x1f2b75[_0x06a3('0x2d')]['offset']);}_0x2276fb[_0x06a3('0x35')]=qs[_0x06a3('0x36')](_0x1f2b75[_0x06a3('0x2d')]['sort']);_0x2276fb[_0x06a3('0x37')]=qs[_0x06a3('0x38')](_[_0x06a3('0x39')](_0x1f2b75[_0x06a3('0x2d')],_0x2707dc[_0x06a3('0x38')]));if(_0x1f2b75[_0x06a3('0x2d')][_0x06a3('0x3a')]){_0x2276fb[_0x06a3('0x37')]=_[_0x06a3('0x3b')](_0x2276fb[_0x06a3('0x37')],{'$or':_['map'](_0x51c8b3,function(_0x45124d){if(_0x45124d['type'][_0x06a3('0x3c')]!==_0x06a3('0x3d')){var _0x29a19b={};_0x29a19b[_0x45124d['field']]={'$like':'%'+_0x1f2b75['query'][_0x06a3('0x3a')]+'%'};return _0x29a19b;}})});}_0x2276fb=_[_0x06a3('0x3b')]({},_0x2276fb,_0x1f2b75[_0x06a3('0x3e')]);var _0x1ce03b={'where':_0x2276fb['where']};return db['SmsTransferReport']['count'](_0x1ce03b)[_0x06a3('0x22')](function(_0x33a1a5){_0x1c791f[_0x06a3('0x19')]=_0x33a1a5;if(_0x1f2b75[_0x06a3('0x2d')][_0x06a3('0x3f')]){_0x2276fb[_0x06a3('0x40')]=[{'all':!![]}];}return db[_0x06a3('0x2a')][_0x06a3('0x41')](_0x2276fb);})[_0x06a3('0x22')](function(_0x3d7b3c){_0x1c791f[_0x06a3('0x42')]=_0x3d7b3c;return _0x1c791f;})[_0x06a3('0x22')](respondWithFilteredResult(_0x5f5543,_0x2276fb))['catch'](handleError(_0x5f5543,null));};exports[_0x06a3('0x43')]=function(_0x315df1,_0x24088c){var _0x146ac8={'raw':!![],'where':{'id':_0x315df1[_0x06a3('0x44')]['id']}},_0x583a04={};_0x583a04[_0x06a3('0x2f')]=_[_0x06a3('0x2c')](db['SmsTransferReport']['rawAttributes']);_0x583a04[_0x06a3('0x2d')]=_[_0x06a3('0x2c')](_0x315df1[_0x06a3('0x2d')]);_0x583a04[_0x06a3('0x38')]=_['intersection'](_0x583a04['model'],_0x583a04[_0x06a3('0x2d')]);_0x146ac8[_0x06a3('0x31')]=_['intersection'](_0x583a04[_0x06a3('0x2f')],qs[_0x06a3('0x30')](_0x315df1['query']['fields']));_0x146ac8[_0x06a3('0x31')]=_0x146ac8[_0x06a3('0x31')]['length']?_0x146ac8[_0x06a3('0x31')]:_0x583a04['model'];if(_0x315df1['query'][_0x06a3('0x3f')]){_0x146ac8['include']=[{'all':!![]}];}_0x146ac8=_[_0x06a3('0x3b')]({},_0x146ac8,_0x315df1[_0x06a3('0x3e')]);return db['SmsTransferReport'][_0x06a3('0x45')](_0x146ac8)[_0x06a3('0x22')](handleEntityNotFound(_0x24088c,null))[_0x06a3('0x22')](respondWithResult(_0x24088c,null))[_0x06a3('0x46')](handleError(_0x24088c,null));};exports[_0x06a3('0x47')]=function(_0x4d6e7a,_0x2f5b70){return db['SmsTransferReport'][_0x06a3('0x47')](_0x4d6e7a['body'],{})['then'](respondWithResult(_0x2f5b70,0xc9))[_0x06a3('0x46')](handleError(_0x2f5b70,null));};exports[_0x06a3('0x21')]=function(_0x3305fa,_0x15d195){if(_0x3305fa[_0x06a3('0x48')]['id']){delete _0x3305fa[_0x06a3('0x48')]['id'];}return db[_0x06a3('0x2a')][_0x06a3('0x45')]({'where':{'id':_0x3305fa[_0x06a3('0x44')]['id']}})[_0x06a3('0x22')](handleEntityNotFound(_0x15d195,null))[_0x06a3('0x22')](saveUpdates(_0x3305fa[_0x06a3('0x48')],null))[_0x06a3('0x22')](respondWithResult(_0x15d195,null))[_0x06a3('0x46')](handleError(_0x15d195,null));};exports['destroy']=function(_0x5f36d8,_0x1b9f44){return db[_0x06a3('0x2a')][_0x06a3('0x45')]({'where':{'id':_0x5f36d8['params']['id']}})[_0x06a3('0x22')](handleEntityNotFound(_0x1b9f44,null))['then'](removeEntity(_0x1b9f44,null))[_0x06a3('0x46')](handleError(_0x1b9f44,null));};exports[_0x06a3('0x49')]=function(_0x4329c1,_0x21ca54){return db['SmsTransferReport'][_0x06a3('0x49')]()[_0x06a3('0x22')](respondWithResult(_0x21ca54,null))[_0x06a3('0x46')](handleError(_0x21ca54,null));};
\ No newline at end of file
index 06d647b..4d63120 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34e8=['define','report_sms_transfer','uniqueid','lodash','util','../../config/logger','api','bluebird','request-promise','./smsTransferReport.attributes','exports'];(function(_0x279d37,_0x14de3f){var _0x530173=function(_0x37fc79){while(--_0x37fc79){_0x279d37['push'](_0x279d37['shift']());}};_0x530173(++_0x14de3f);}(_0x34e8,0x12c));var _0x834e=function(_0x2f6409,_0x36c48f){_0x2f6409=_0x2f6409-0x0;var _0x36c9fa=_0x34e8[_0x2f6409];return _0x36c9fa;};'use strict';var _=require(_0x834e('0x0'));var util=require(_0x834e('0x1'));var logger=require(_0x834e('0x2'))(_0x834e('0x3'));var moment=require('moment');var BPromise=require(_0x834e('0x4'));var rp=require(_0x834e('0x5'));var attributes=require(_0x834e('0x6'));module[_0x834e('0x7')]=function(_0x289ef2,_0x19a3e0){return _0x289ef2[_0x834e('0x8')]('SmsTransferReport',attributes,{'tableName':_0x834e('0x9'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x834e('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x008c=['moment','request-promise','./smsTransferReport.attributes','exports','define','SmsTransferReport','report_sms_transfer','uniqueid','lodash','util','../../config/logger','api'];(function(_0x4f2bca,_0x1a9515){var _0x419781=function(_0x27c15e){while(--_0x27c15e){_0x4f2bca['push'](_0x4f2bca['shift']());}};_0x419781(++_0x1a9515);}(_0x008c,0x188));var _0xc008=function(_0xf64026,_0x43afd3){_0xf64026=_0xf64026-0x0;var _0x1050be=_0x008c[_0xf64026];return _0x1050be;};'use strict';var _=require(_0xc008('0x0'));var util=require(_0xc008('0x1'));var logger=require(_0xc008('0x2'))(_0xc008('0x3'));var moment=require(_0xc008('0x4'));var BPromise=require('bluebird');var rp=require(_0xc008('0x5'));var attributes=require(_0xc008('0x6'));module[_0xc008('0x7')]=function(_0x163bd9,_0x1cbe76){return _0x163bd9[_0xc008('0x8')](_0xc008('0x9'),attributes,{'tableName':_0xc008('0xa'),'paranoid':![],'indexes':[{'name':_0xc008('0xb'),'fields':['uniqueid']}],'timestamps':!![]});};
\ No newline at end of file
index e8624ec..0a8594b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd509=['request','then','info','debug','request\x20sent','stringify','error','code','SmsTransferReport,\x20%s,\x20%s','message','result','moment','bluebird','randomstring','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client'];(function(_0xd51fae,_0x4084db){var _0x48b9b9=function(_0x2cd84e){while(--_0x2cd84e){_0xd51fae['push'](_0xd51fae['shift']());}};_0x48b9b9(++_0x4084db);}(_0xd509,0xc9));var _0x9d50=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xd509[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x9d50('0x0'));var BPromise=require(_0x9d50('0x1'));var rs=require(_0x9d50('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x9d50('0x3'));var logger=require(_0x9d50('0x4'))('rpc');var config=require(_0x9d50('0x5'));var jayson=require(_0x9d50('0x6'));var client=jayson[_0x9d50('0x7')]['http']({'port':0x232a});function respondWithRpcPromise(_0x907927,_0x57ca79,_0x427cee){return new BPromise(function(_0x9b5ecd,_0x2f7c2f){return client[_0x9d50('0x8')](_0x907927,_0x427cee)[_0x9d50('0x9')](function(_0x5380be){logger[_0x9d50('0xa')]('SmsTransferReport,\x20%s,\x20%s',_0x57ca79,'request\x20sent');logger[_0x9d50('0xb')]('SmsTransferReport,\x20%s,\x20%s,\x20%s',_0x57ca79,_0x9d50('0xc'),JSON[_0x9d50('0xd')](_0x5380be));if(_0x5380be[_0x9d50('0xe')]){if(_0x5380be[_0x9d50('0xe')][_0x9d50('0xf')]===0x1f4){logger[_0x9d50('0xe')](_0x9d50('0x10'),_0x57ca79,_0x5380be['error'][_0x9d50('0x11')]);return _0x2f7c2f(_0x5380be['error'][_0x9d50('0x11')]);}logger[_0x9d50('0xe')](_0x9d50('0x10'),_0x57ca79,_0x5380be[_0x9d50('0xe')][_0x9d50('0x11')]);return _0x9b5ecd(_0x5380be[_0x9d50('0xe')][_0x9d50('0x11')]);}else{logger[_0x9d50('0xa')](_0x9d50('0x10'),_0x57ca79,_0x9d50('0xc'));_0x9b5ecd(_0x5380be[_0x9d50('0x12')][_0x9d50('0x11')]);}})['catch'](function(_0x12d178){logger[_0x9d50('0xe')](_0x9d50('0x10'),_0x57ca79,_0x12d178);_0x2f7c2f(_0x12d178);});});}
\ No newline at end of file
+var _0x11f3=['util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','http','request','then','info','request\x20sent','debug','SmsTransferReport,\x20%s,\x20%s,\x20%s','stringify','error','code','SmsTransferReport,\x20%s,\x20%s','message','result','catch','lodash'];(function(_0x4cf98e,_0xba4b79){var _0x1623ac=function(_0x459bc0){while(--_0x459bc0){_0x4cf98e['push'](_0x4cf98e['shift']());}};_0x1623ac(++_0xba4b79);}(_0x11f3,0x149));var _0x311f=function(_0x2905a3,_0x306563){_0x2905a3=_0x2905a3-0x0;var _0x51301d=_0x11f3[_0x2905a3];return _0x51301d;};'use strict';var _=require(_0x311f('0x0'));var util=require(_0x311f('0x1'));var moment=require(_0x311f('0x2'));var BPromise=require('bluebird');var rs=require(_0x311f('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x311f('0x4'))['db'];var utils=require(_0x311f('0x5'));var logger=require(_0x311f('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x311f('0x7'));var client=jayson['client'][_0x311f('0x8')]({'port':0x232a});function respondWithRpcPromise(_0xcbec7b,_0x11c88d,_0x3381a7){return new BPromise(function(_0x565d4d,_0x24a3fc){return client[_0x311f('0x9')](_0xcbec7b,_0x3381a7)[_0x311f('0xa')](function(_0x21b762){logger[_0x311f('0xb')]('SmsTransferReport,\x20%s,\x20%s',_0x11c88d,_0x311f('0xc'));logger[_0x311f('0xd')](_0x311f('0xe'),_0x11c88d,_0x311f('0xc'),JSON[_0x311f('0xf')](_0x21b762));if(_0x21b762[_0x311f('0x10')]){if(_0x21b762[_0x311f('0x10')][_0x311f('0x11')]===0x1f4){logger[_0x311f('0x10')](_0x311f('0x12'),_0x11c88d,_0x21b762[_0x311f('0x10')][_0x311f('0x13')]);return _0x24a3fc(_0x21b762[_0x311f('0x10')][_0x311f('0x13')]);}logger[_0x311f('0x10')](_0x311f('0x12'),_0x11c88d,_0x21b762[_0x311f('0x10')][_0x311f('0x13')]);return _0x565d4d(_0x21b762[_0x311f('0x10')]['message']);}else{logger['info']('SmsTransferReport,\x20%s,\x20%s',_0x11c88d,_0x311f('0xc'));_0x565d4d(_0x21b762[_0x311f('0x14')][_0x311f('0x13')]);}})[_0x311f('0x15')](function(_0xb8227e){logger[_0x311f('0x10')](_0x311f('0x12'),_0x11c88d,_0xb8227e);_0x24a3fc(_0xb8227e);});});}
\ No newline at end of file
index 4c5d425..4821f92 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x48bc=['server/files/sounds/original/','originalname','replace','format','basename','extname','now','post','single','create','put','update','delete','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./sound.controller','get','isAuthenticated','index','/:id','show','/:id/download','download','diskStorage','join','root'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x48bc,0x6e));var _0xc48b=function(_0x1c3b4b,_0x391b1e){_0x1c3b4b=_0x1c3b4b-0x0;var _0x11da66=_0x48bc[_0x1c3b4b];return _0x11da66;};'use strict';var multer=require('multer');var util=require(_0xc48b('0x0'));var path=require(_0xc48b('0x1'));var timeout=require(_0xc48b('0x2'));var express=require(_0xc48b('0x3'));var router=express[_0xc48b('0x4')]();var auth=require(_0xc48b('0x5'));var interaction=require(_0xc48b('0x6'));var config=require('../../config/environment');var controller=require(_0xc48b('0x7'));router[_0xc48b('0x8')]('/',auth[_0xc48b('0x9')](),controller[_0xc48b('0xa')]);router['get'](_0xc48b('0xb'),auth[_0xc48b('0x9')](),controller[_0xc48b('0xc')]);router[_0xc48b('0x8')](_0xc48b('0xd'),auth['isAuthenticated'](),controller[_0xc48b('0xe')]);var upload=multer({'storage':multer[_0xc48b('0xf')]({'destination':function(_0x550369,_0x1e522a,_0x1d1d89){_0x1d1d89(null,path[_0xc48b('0x10')](config[_0xc48b('0x11')],_0xc48b('0x12')));},'filename':function(_0x4860c5,_0x2cd60c,_0x5e38ce){_0x2cd60c[_0xc48b('0x13')]=_0x2cd60c['originalname'][_0xc48b('0x14')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x5e38ce(null,util[_0xc48b('0x15')]('%s-%s%s',path[_0xc48b('0x16')](_0x2cd60c['originalname'],path[_0xc48b('0x17')](_0x2cd60c['originalname'])),Date[_0xc48b('0x18')](),path['extname'](_0x2cd60c[_0xc48b('0x13')])));}})});router[_0xc48b('0x19')]('/',upload[_0xc48b('0x1a')]('file'),controller[_0xc48b('0x1b')]);router[_0xc48b('0x1c')](_0xc48b('0xb'),auth['isAuthenticated'](),controller[_0xc48b('0x1d')]);router[_0xc48b('0x1e')](_0xc48b('0xb'),auth['isAuthenticated'](),controller[_0xc48b('0x1e')]);module[_0xc48b('0x1f')]=router;
\ No newline at end of file
+var _0x5e07=['extname','post','single','file','put','delete','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','./sound.controller','isAuthenticated','get','/:id','show','/:id/download','download','join','server/files/sounds/original/','originalname','replace','basename'];(function(_0x3c114a,_0x574afc){var _0x102b2b=function(_0x382e6d){while(--_0x382e6d){_0x3c114a['push'](_0x3c114a['shift']());}};_0x102b2b(++_0x574afc);}(_0x5e07,0xbd));var _0x75e0=function(_0x5b561d,_0x422b7c){_0x5b561d=_0x5b561d-0x0;var _0x431060=_0x5e07[_0x5b561d];return _0x431060;};'use strict';var multer=require(_0x75e0('0x0'));var util=require(_0x75e0('0x1'));var path=require(_0x75e0('0x2'));var timeout=require(_0x75e0('0x3'));var express=require(_0x75e0('0x4'));var router=express['Router']();var auth=require(_0x75e0('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x75e0('0x6'));var controller=require(_0x75e0('0x7'));router['get']('/',auth[_0x75e0('0x8')](),controller['index']);router[_0x75e0('0x9')](_0x75e0('0xa'),auth['isAuthenticated'](),controller[_0x75e0('0xb')]);router['get'](_0x75e0('0xc'),auth[_0x75e0('0x8')](),controller[_0x75e0('0xd')]);var upload=multer({'storage':multer['diskStorage']({'destination':function(_0x809521,_0x42da24,_0x196630){_0x196630(null,path[_0x75e0('0xe')](config['root'],_0x75e0('0xf')));},'filename':function(_0x58fe75,_0x46efd3,_0x592b9f){_0x46efd3[_0x75e0('0x10')]=_0x46efd3[_0x75e0('0x10')][_0x75e0('0x11')](/[+@&\/\\#,+()$~%'":*?<>{}\s\\|]/g,'-');_0x592b9f(null,util['format']('%s-%s%s',path[_0x75e0('0x12')](_0x46efd3[_0x75e0('0x10')],path['extname'](_0x46efd3[_0x75e0('0x10')])),Date['now'](),path[_0x75e0('0x13')](_0x46efd3[_0x75e0('0x10')])));}})});router[_0x75e0('0x14')]('/',upload[_0x75e0('0x15')](_0x75e0('0x16')),controller['create']);router[_0x75e0('0x17')]('/:id',auth[_0x75e0('0x8')](),controller['update']);router[_0x75e0('0x18')](_0x75e0('0xa'),auth[_0x75e0('0x8')](),controller[_0x75e0('0x18')]);module[_0x75e0('0x19')]=router;
\ No newline at end of file
index 3a5e0aa..deba81e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x622d=['BIGINT','sequelize','exports','STRING','INTEGER','FLOAT'];(function(_0x2ac13,_0x3f98a5){var _0x2a5c5f=function(_0x55f050){while(--_0x55f050){_0x2ac13['push'](_0x2ac13['shift']());}};_0x2a5c5f(++_0x3f98a5);}(_0x622d,0x1a5));var _0xd622=function(_0x4d475c,_0x13e67a){_0x4d475c=_0x4d475c-0x0;var _0x840c43=_0x622d[_0x4d475c];return _0x840c43;};'use strict';var Sequelize=require(_0xd622('0x0'));module[_0xd622('0x1')]={'name':{'type':Sequelize[_0xd622('0x2')],'unique':'name','allowNull':![]},'save_name':{'type':Sequelize['STRING']},'display_name':{'type':Sequelize['STRING'],'defaultValue':''},'description':{'type':Sequelize[_0xd622('0x2')]},'original_format':{'type':Sequelize[_0xd622('0x2')]},'original_duration':{'type':Sequelize['FLOAT']},'original_sampleCount':{'type':Sequelize['BIGINT']},'original_channelCount':{'type':Sequelize[_0xd622('0x3')]},'original_bitRate':{'type':Sequelize['BIGINT']},'original_sampleRate':{'type':Sequelize[_0xd622('0x3')]},'converted_format':{'type':Sequelize[_0xd622('0x2')]},'converted_duration':{'type':Sequelize[_0xd622('0x4')]},'converted_sampleCount':{'type':Sequelize[_0xd622('0x5')]},'converted_channelCount':{'type':Sequelize['INTEGER']},'converted_bitRate':{'type':Sequelize['BIGINT']},'converted_sampleRate':{'type':Sequelize[_0xd622('0x3')]}};
\ No newline at end of file
+var _0x87b5=['STRING','name','FLOAT','BIGINT','INTEGER','exports'];(function(_0x154983,_0xc29edf){var _0x3d1243=function(_0x5cb7a4){while(--_0x5cb7a4){_0x154983['push'](_0x154983['shift']());}};_0x3d1243(++_0xc29edf);}(_0x87b5,0x161));var _0x587b=function(_0x317bbf,_0x2e4091){_0x317bbf=_0x317bbf-0x0;var _0x4833e1=_0x87b5[_0x317bbf];return _0x4833e1;};'use strict';var Sequelize=require('sequelize');module[_0x587b('0x0')]={'name':{'type':Sequelize[_0x587b('0x1')],'unique':_0x587b('0x2'),'allowNull':![]},'save_name':{'type':Sequelize[_0x587b('0x1')]},'display_name':{'type':Sequelize[_0x587b('0x1')],'defaultValue':''},'description':{'type':Sequelize[_0x587b('0x1')]},'original_format':{'type':Sequelize[_0x587b('0x1')]},'original_duration':{'type':Sequelize[_0x587b('0x3')]},'original_sampleCount':{'type':Sequelize['BIGINT']},'original_channelCount':{'type':Sequelize['INTEGER']},'original_bitRate':{'type':Sequelize['BIGINT']},'original_sampleRate':{'type':Sequelize['INTEGER']},'converted_format':{'type':Sequelize[_0x587b('0x1')]},'converted_duration':{'type':Sequelize[_0x587b('0x3')]},'converted_sampleCount':{'type':Sequelize['BIGINT']},'converted_channelCount':{'type':Sequelize['INTEGER']},'converted_bitRate':{'type':Sequelize[_0x587b('0x4')]},'converted_sampleRate':{'type':Sequelize[_0x587b('0x5')]}};
\ No newline at end of file
index c238d40..bfdeda7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fab=['html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','squel','crypto','jsforce','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','limit','set','Content-Range','apply','reject','save','then','destroy','Sounds','UserProfileResource','end','name','send','index','Sound','rawAttributes','model','keys','query','filters','intersection','attributes','length','nolimit','offset','order','sort','where','pick','filter','merge','field','options','includeAll','findAll','rows','catch','show','params','fields','include','find','download','save_name','converted_format','existsSync','join','Sequelize','ValidationError','root','server/files/sounds/converted','format','%s.%s','create','basename','file','originalname','extname','filename','substring','wav','server/files/sounds/original','info','Sound\x20upload\x20filepath:\x20%s','Sound\x20upload\x20destination:\x20%s','chmodSync','transcode','error','src','original_duration','duration','original_sampleCount','sampleCount','original_channelCount','channelCount','original_bitRate','bitRate','original_sampleRate','sampleRate','dest','converted_duration','converted_sampleCount','converted_channelCount','converted_bitRate','body','userProfileId','Unable\x20to\x20retrieve\x20the\x20current\x20user','user','get','UserProfileSection','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','start','description','delete','original_format','unlinkSync'];(function(_0xeeb156,_0x5392f4){var _0x4b7c74=function(_0x5705bb){while(--_0x5705bb){_0xeeb156['push'](_0xeeb156['shift']());}};_0x4b7c74(++_0x5392f4);}(_0x5fab,0x177));var _0xb5fa=function(_0x4b332a,_0x5ec2db){_0x4b332a=_0x4b332a-0x0;var _0x115a04=_0x5fab[_0x4b332a];return _0x115a04;};'use strict';var pdf=require(_0xb5fa('0x0'));var emlformat=require(_0xb5fa('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xb5fa('0x2'));var jsonpatch=require(_0xb5fa('0x3'));var rp=require(_0xb5fa('0x4'));var moment=require(_0xb5fa('0x5'));var BPromise=require(_0xb5fa('0x6'));var Mustache=require(_0xb5fa('0x7'));var util=require(_0xb5fa('0x8'));var path=require(_0xb5fa('0x9'));var sox=require(_0xb5fa('0xa'));var csv=require(_0xb5fa('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0xb5fa('0xc'));var crypto=require(_0xb5fa('0xd'));var jsforce=require(_0xb5fa('0xe'));var deskjs=require('desk.js');var toCsv=require(_0xb5fa('0xb'));var querystring=require(_0xb5fa('0xf'));var Papa=require(_0xb5fa('0x10'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0xb5fa('0x11'));var qs=require(_0xb5fa('0x12'));var logger=require(_0xb5fa('0x13'))(_0xb5fa('0x14'));var utils=require(_0xb5fa('0x15'));var config=require(_0xb5fa('0x16'));var db=require(_0xb5fa('0x17'))['db'];function respondWithStatusCode(_0x46da66,_0x309740){_0x309740=_0x309740||0xcc;return function(_0x4d3576){if(_0x4d3576){return _0x46da66[_0xb5fa('0x18')](_0x309740);}return _0x46da66[_0xb5fa('0x19')](_0x309740)['end']();};}function respondWithResult(_0x116849,_0x577af0){_0x577af0=_0x577af0||0xc8;return function(_0x265992){if(_0x265992){return _0x116849[_0xb5fa('0x19')](_0x577af0)[_0xb5fa('0x1a')](_0x265992);}};}function respondWithFilteredResult(_0xca8d82,_0x8e9d1c){return function(_0x5371cf){if(_0x5371cf){var _0x567f31=_0x5371cf[_0xb5fa('0x1b')],_0x38e964=_0x8e9d1c['offset'],_0x587043=_0x8e9d1c['offset']+_0x8e9d1c[_0xb5fa('0x1c')],_0x31f252;if(_0x587043>=_0x567f31){_0x587043=_0x567f31;_0x31f252=0xc8;}else{_0x31f252=0xce;}_0xca8d82[_0xb5fa('0x19')](_0x31f252);return _0xca8d82[_0xb5fa('0x1d')](_0xb5fa('0x1e'),_0x38e964+'-'+_0x587043+'/'+_0x567f31)[_0xb5fa('0x1a')](_0x5371cf);}return null;};}function patchUpdates(_0x13e82b){return function(_0x3b0f69){try{jsonpatch[_0xb5fa('0x1f')](_0x3b0f69,_0x13e82b,!![]);}catch(_0xc14dc4){return BPromise[_0xb5fa('0x20')](_0xc14dc4);}return _0x3b0f69[_0xb5fa('0x21')]();};}function saveUpdates(_0x1f5064,_0x5cd822){return function(_0x432bfa){if(_0x432bfa){return _0x432bfa['update'](_0x1f5064)[_0xb5fa('0x22')](function(_0x4a6c04){return _0x4a6c04;});}return null;};}function removeEntity(_0xd0fe2b,_0x43c09f){return function(_0x4e05c0){if(_0x4e05c0){return _0x4e05c0[_0xb5fa('0x23')]()[_0xb5fa('0x22')](function(){var _0x283a56=_0x4e05c0['get']({'plain':!![]});var _0x32a85c=_0xb5fa('0x24');return db[_0xb5fa('0x25')]['destroy']({'where':{'type':_0x32a85c,'resourceId':_0x283a56['id']}})[_0xb5fa('0x22')](function(){return _0x4e05c0;});})['then'](function(){_0xd0fe2b[_0xb5fa('0x19')](0xcc)[_0xb5fa('0x26')]();});}};}function handleEntityNotFound(_0x11053a,_0x543edf){return function(_0x2dbd22){if(!_0x2dbd22){_0x11053a[_0xb5fa('0x18')](0x194);}return _0x2dbd22;};}function handleError(_0x6a455c,_0x20d649){_0x20d649=_0x20d649||0x1f4;return function(_0x568870){logger['error'](_0x568870['stack']);if(_0x568870['name']){delete _0x568870[_0xb5fa('0x27')];}_0x6a455c[_0xb5fa('0x19')](_0x20d649)[_0xb5fa('0x28')](_0x568870);};}exports[_0xb5fa('0x29')]=function(_0x534884,_0x3506a4){var _0x358549={},_0x353314={},_0x409af9={'count':0x0,'rows':[]};var _0x2a5690=db[_0xb5fa('0x2a')][_0xb5fa('0x2b')];_0x353314[_0xb5fa('0x2c')]=_[_0xb5fa('0x2d')](_0x2a5690);_0x353314[_0xb5fa('0x2e')]=_[_0xb5fa('0x2d')](_0x534884[_0xb5fa('0x2e')]);_0x353314[_0xb5fa('0x2f')]=_[_0xb5fa('0x30')](_0x353314[_0xb5fa('0x2c')],_0x353314[_0xb5fa('0x2e')]);_0x358549[_0xb5fa('0x31')]=_[_0xb5fa('0x30')](_0x353314[_0xb5fa('0x2c')],qs['fields'](_0x534884[_0xb5fa('0x2e')]['fields']));_0x358549['attributes']=_0x358549['attributes'][_0xb5fa('0x32')]?_0x358549['attributes']:_0x353314[_0xb5fa('0x2c')];if(!_0x534884['query']['hasOwnProperty'](_0xb5fa('0x33'))){_0x358549[_0xb5fa('0x1c')]=qs['limit'](_0x534884['query'][_0xb5fa('0x1c')]);_0x358549[_0xb5fa('0x34')]=qs[_0xb5fa('0x34')](_0x534884['query'][_0xb5fa('0x34')]);}_0x358549[_0xb5fa('0x35')]=qs['sort'](_0x534884[_0xb5fa('0x2e')][_0xb5fa('0x36')]);_0x358549[_0xb5fa('0x37')]=qs['filters'](_[_0xb5fa('0x38')](_0x534884[_0xb5fa('0x2e')],_0x353314[_0xb5fa('0x2f')]));if(_0x534884['query'][_0xb5fa('0x39')]){_0x358549[_0xb5fa('0x37')]=_[_0xb5fa('0x3a')](_0x358549[_0xb5fa('0x37')],{'$or':_['map'](_0x2a5690,function(_0x4bba91){if(_0x4bba91['type']['key']!=='VIRTUAL'){var _0x4dff5d={};_0x4dff5d[_0x4bba91[_0xb5fa('0x3b')]]={'$like':'%'+_0x534884['query'][_0xb5fa('0x39')]+'%'};return _0x4dff5d;}})});}_0x358549=_[_0xb5fa('0x3a')]({},_0x358549,_0x534884[_0xb5fa('0x3c')]);var _0x30b288={'where':_0x358549[_0xb5fa('0x37')]};return db[_0xb5fa('0x2a')]['count'](_0x30b288)['then'](function(_0x4c4bf0){_0x409af9[_0xb5fa('0x1b')]=_0x4c4bf0;if(_0x534884['query'][_0xb5fa('0x3d')]){_0x358549['include']=[{'all':!![]}];}return db['Sound'][_0xb5fa('0x3e')](_0x358549);})[_0xb5fa('0x22')](function(_0x2e056e){_0x409af9[_0xb5fa('0x3f')]=_0x2e056e;return _0x409af9;})[_0xb5fa('0x22')](respondWithFilteredResult(_0x3506a4,_0x358549))[_0xb5fa('0x40')](handleError(_0x3506a4,null));};exports[_0xb5fa('0x41')]=function(_0x83df0b,_0x19e370){var _0x402a68={'raw':!![],'where':{'id':_0x83df0b[_0xb5fa('0x42')]['id']}},_0x5acc08={};_0x5acc08['model']=_[_0xb5fa('0x2d')](db[_0xb5fa('0x2a')][_0xb5fa('0x2b')]);_0x5acc08[_0xb5fa('0x2e')]=_[_0xb5fa('0x2d')](_0x83df0b[_0xb5fa('0x2e')]);_0x5acc08[_0xb5fa('0x2f')]=_[_0xb5fa('0x30')](_0x5acc08['model'],_0x5acc08[_0xb5fa('0x2e')]);_0x402a68[_0xb5fa('0x31')]=_['intersection'](_0x5acc08[_0xb5fa('0x2c')],qs['fields'](_0x83df0b[_0xb5fa('0x2e')][_0xb5fa('0x43')]));_0x402a68['attributes']=_0x402a68['attributes'][_0xb5fa('0x32')]?_0x402a68[_0xb5fa('0x31')]:_0x5acc08[_0xb5fa('0x2c')];if(_0x83df0b[_0xb5fa('0x2e')][_0xb5fa('0x3d')]){_0x402a68[_0xb5fa('0x44')]=[{'all':!![]}];}_0x402a68=_[_0xb5fa('0x3a')]({},_0x402a68,_0x83df0b[_0xb5fa('0x3c')]);return db['Sound'][_0xb5fa('0x45')](_0x402a68)[_0xb5fa('0x22')](handleEntityNotFound(_0x19e370,null))['then'](respondWithResult(_0x19e370,null))[_0xb5fa('0x40')](handleError(_0x19e370,null));};exports[_0xb5fa('0x46')]=function(_0x247999,_0x43b056,_0x30d0d4){return db[_0xb5fa('0x2a')][_0xb5fa('0x45')]({'where':{'id':_0x247999[_0xb5fa('0x42')]['id']},'attributes':[_0xb5fa('0x27'),_0xb5fa('0x47'),_0xb5fa('0x48')],'raw':!![]})[_0xb5fa('0x22')](handleEntityNotFound(_0x43b056,null))[_0xb5fa('0x22')](function(_0x23be4c){if(_0x23be4c){if(!fs[_0xb5fa('0x49')](path[_0xb5fa('0x4a')](config['root'],'server/files/sounds/converted',_0x23be4c[_0xb5fa('0x47')]+'.'+_0x23be4c['converted_format']))){throw new db[(_0xb5fa('0x4b'))][(_0xb5fa('0x4c'))]('Sound\x20not\x20found');}return _0x43b056[_0xb5fa('0x46')](path[_0xb5fa('0x4a')](config[_0xb5fa('0x4d')],_0xb5fa('0x4e'),util[_0xb5fa('0x4f')](_0xb5fa('0x50'),_0x23be4c['save_name'],_0x23be4c[_0xb5fa('0x48')])),util['format'](_0xb5fa('0x50'),_0x23be4c[_0xb5fa('0x27')],_0x23be4c[_0xb5fa('0x48')]));}return null;})['catch'](handleError(_0x43b056,null));};exports[_0xb5fa('0x51')]=function(_0x130a0d,_0x4dea87,_0x4f6ffa){var _0x3f19ee={'name':path[_0xb5fa('0x52')](_0x130a0d[_0xb5fa('0x53')][_0xb5fa('0x54')],path[_0xb5fa('0x55')](_0x130a0d[_0xb5fa('0x53')][_0xb5fa('0x54')])),'save_name':path[_0xb5fa('0x52')](_0x130a0d[_0xb5fa('0x53')][_0xb5fa('0x56')],path[_0xb5fa('0x55')](_0x130a0d[_0xb5fa('0x53')][_0xb5fa('0x56')])),'original_format':path[_0xb5fa('0x55')](_0x130a0d[_0xb5fa('0x53')][_0xb5fa('0x54')])[_0xb5fa('0x57')](0x1),'converted_format':_0xb5fa('0x58')};var _0x58739d=path[_0xb5fa('0x4a')](config[_0xb5fa('0x4d')],_0xb5fa('0x59'),_0x130a0d[_0xb5fa('0x53')][_0xb5fa('0x56')]);var _0x170c76=path[_0xb5fa('0x4a')](config[_0xb5fa('0x4d')],_0xb5fa('0x4e'),util[_0xb5fa('0x4f')]('%s.%s',path['basename'](_0x130a0d[_0xb5fa('0x53')][_0xb5fa('0x56')],path[_0xb5fa('0x55')](_0x130a0d['file'][_0xb5fa('0x56')])),_0x3f19ee[_0xb5fa('0x48')]));logger[_0xb5fa('0x5a')](_0xb5fa('0x5b'),_0x58739d);logger[_0xb5fa('0x5a')](_0xb5fa('0x5c'),_0x170c76);try{fs[_0xb5fa('0x5d')](_0x58739d,parseInt('0777',0x8));var _0x7bcd09=sox[_0xb5fa('0x5e')](_0x58739d,_0x170c76,{'sampleRate':0x1f40,'format':'wav','channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x7bcd09['on'](_0xb5fa('0x5f'),function(_0x26bc03){fs['unlinkSync'](_0x58739d);_0x4dea87[_0xb5fa('0x19')](0x1f4)[_0xb5fa('0x28')](_0x26bc03);});_0x7bcd09['on'](_0xb5fa('0x60'),function(_0x2b9a45){_0x3f19ee[_0xb5fa('0x61')]=isNaN(_0x2b9a45[_0xb5fa('0x62')])?null:_0x2b9a45[_0xb5fa('0x62')]*0x3e8;_0x3f19ee[_0xb5fa('0x63')]=isNaN(_0x2b9a45[_0xb5fa('0x64')])?null:_0x2b9a45[_0xb5fa('0x64')];_0x3f19ee[_0xb5fa('0x65')]=isNaN(_0x2b9a45[_0xb5fa('0x66')])?null:_0x2b9a45[_0xb5fa('0x66')];_0x3f19ee[_0xb5fa('0x67')]=isNaN(_0x2b9a45[_0xb5fa('0x68')])?null:_0x2b9a45[_0xb5fa('0x68')];_0x3f19ee[_0xb5fa('0x69')]=isNaN(_0x2b9a45[_0xb5fa('0x6a')])?null:_0x2b9a45[_0xb5fa('0x6a')];});_0x7bcd09['on'](_0xb5fa('0x6b'),function(_0x421a93){_0x3f19ee[_0xb5fa('0x6c')]=isNaN(_0x421a93['duration'])?null:_0x421a93[_0xb5fa('0x62')]*0x3e8;_0x3f19ee[_0xb5fa('0x6d')]=isNaN(_0x421a93[_0xb5fa('0x64')])?null:_0x421a93['sampleCount'];_0x3f19ee[_0xb5fa('0x6e')]=isNaN(_0x421a93[_0xb5fa('0x66')])?null:_0x421a93['channelCount'];_0x3f19ee[_0xb5fa('0x6f')]=isNaN(_0x421a93[_0xb5fa('0x68')])?null:_0x421a93[_0xb5fa('0x68')];_0x3f19ee['converted_sampleRate']=isNaN(_0x421a93['sampleRate'])?null:_0x421a93[_0xb5fa('0x6a')];});_0x7bcd09['on'](_0xb5fa('0x26'),function(){fs[_0xb5fa('0x5d')](_0x170c76,parseInt('0777',0x8));return db[_0xb5fa('0x2a')][_0xb5fa('0x51')](_0x3f19ee)[_0xb5fa('0x22')](function(_0x12b0a2){var _0x5e7e21={'role':_0x130a0d['body']['role'],'userProfileId':_0x130a0d[_0xb5fa('0x70')][_0xb5fa('0x71')]};if(!_0x5e7e21)throw new Error(_0xb5fa('0x72'));if(_0x5e7e21['role']===_0xb5fa('0x73')){var _0x29f65b=_0x12b0a2[_0xb5fa('0x74')]({'plain':!![]});return db[_0xb5fa('0x75')][_0xb5fa('0x45')]({'where':{'name':_0xb5fa('0x24'),'userProfileId':_0x5e7e21[_0xb5fa('0x71')]},'raw':!![]})[_0xb5fa('0x22')](function(_0x35eeb9){if(_0x35eeb9&&_0x35eeb9[_0xb5fa('0x76')]===0x0){return db[_0xb5fa('0x25')][_0xb5fa('0x51')]({'name':_0x29f65b[_0xb5fa('0x27')],'resourceId':_0x29f65b['id'],'type':_0x35eeb9[_0xb5fa('0x27')],'sectionId':_0x35eeb9['id']},{})[_0xb5fa('0x22')](function(){return _0x12b0a2;});}else{return _0x12b0a2;}})['catch'](function(_0xf173e4){logger['error'](_0xb5fa('0x77'),_0xf173e4);throw _0xf173e4;});}return _0x12b0a2;})[_0xb5fa('0x22')](respondWithResult(_0x4dea87,null))[_0xb5fa('0x40')](handleError(_0x4dea87,null));});_0x7bcd09[_0xb5fa('0x78')]();}catch(_0x339dfb){_0x4dea87['status'](0x1f4)[_0xb5fa('0x28')](_0x339dfb);}};exports['update']=function(_0x77a831,_0x3ab924,_0x118a0e){return db[_0xb5fa('0x2a')]['find']({'where':{'id':_0x77a831['params']['id']}})['then'](handleEntityNotFound(_0x3ab924,null))[_0xb5fa('0x22')](saveUpdates(_[_0xb5fa('0x38')](_0x77a831[_0xb5fa('0x70')],[_0xb5fa('0x27'),_0xb5fa('0x79')]),null))[_0xb5fa('0x22')](respondWithResult(_0x3ab924,null))['catch'](handleError(_0x3ab924,null));};exports[_0xb5fa('0x7a')]=function(_0x5c08e1,_0x4ca73e,_0x234b95){return db['Sound']['find']({'where':{'id':_0x5c08e1['params']['id']}})[_0xb5fa('0x22')](function(_0x5cbd84){if(_0x5cbd84){return _0x5cbd84[_0xb5fa('0x23')]();}})[_0xb5fa('0x22')](function(_0x1f05f7){var _0x4e4e2a=path['join'](config[_0xb5fa('0x4d')],_0xb5fa('0x59'),util['format'](_0xb5fa('0x50'),_0x1f05f7[_0xb5fa('0x47')],_0x1f05f7[_0xb5fa('0x7b')]));var _0x2aaa2c=path['join'](config[_0xb5fa('0x4d')],_0xb5fa('0x4e'),util[_0xb5fa('0x4f')](_0xb5fa('0x50'),_0x1f05f7[_0xb5fa('0x47')],_0x1f05f7[_0xb5fa('0x48')]));fs[_0xb5fa('0x7c')](_0x4e4e2a);fs['unlinkSync'](_0x2aaa2c);return _0x1f05f7;})[_0xb5fa('0x22')](function(_0x59777b){if(_0x59777b){return _0x4ca73e[_0xb5fa('0x19')](0xcc)[_0xb5fa('0x26')]();}})['then'](handleEntityNotFound(_0x4ca73e,null))[_0xb5fa('0x40')](handleError(_0x4ca73e,null));};
\ No newline at end of file
+var _0x1a85=['original_duration','duration','original_sampleCount','sampleCount','original_channelCount','channelCount','original_bitRate','bitRate','original_sampleRate','sampleRate','dest','converted_sampleRate','0777','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','get','UserProfileSection','Sounds','userProfileId','autoAssociation','UserProfileResource','start','pick','delete','original_format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','sox','ejs','squel','crypto','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','set','Content-Range','reject','save','update','then','destroy','error','stack','name','send','index','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','nolimit','limit','sort','filter','where','merge','field','options','include','Sound','findAll','rows','catch','show','params','intersection','includeAll','find','download','save_name','converted_format','existsSync','join','root','Sequelize','ValidationError','Sound\x20not\x20found','format','%s.%s','basename','file','originalname','extname','filename','server/files/sounds/original','server/files/sounds/converted','Sound\x20upload\x20destination:\x20%s','chmodSync','wav','unlinkSync'];(function(_0x4ca6a4,_0x5e9694){var _0x120555=function(_0x56888c){while(--_0x56888c){_0x4ca6a4['push'](_0x4ca6a4['shift']());}};_0x120555(++_0x5e9694);}(_0x1a85,0x178));var _0x51a8=function(_0x167b19,_0x56081a){_0x167b19=_0x167b19-0x0;var _0x1fcca2=_0x1a85[_0x167b19];return _0x1fcca2;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x51a8('0x0'));var zipdir=require(_0x51a8('0x1'));var jsonpatch=require(_0x51a8('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0x51a8('0x3'));var Mustache=require(_0x51a8('0x4'));var util=require(_0x51a8('0x5'));var path=require('path');var sox=require(_0x51a8('0x6'));var csv=require('to-csv');var ejs=require(_0x51a8('0x7'));var fs=require('fs');var _=require('lodash');var squel=require(_0x51a8('0x8'));var crypto=require(_0x51a8('0x9'));var jsforce=require('jsforce');var deskjs=require(_0x51a8('0xa'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x51a8('0xb'));var authService=require(_0x51a8('0xc'));var hardwareService=require(_0x51a8('0xd'));var Redis=require(_0x51a8('0xe'));var qs=require(_0x51a8('0xf'));var logger=require(_0x51a8('0x10'))(_0x51a8('0x11'));var utils=require(_0x51a8('0x12'));var config=require(_0x51a8('0x13'));var db=require(_0x51a8('0x14'))['db'];function respondWithStatusCode(_0xc7c203,_0xc46d7){_0xc46d7=_0xc46d7||0xcc;return function(_0x38a1d2){if(_0x38a1d2){return _0xc7c203[_0x51a8('0x15')](_0xc46d7);}return _0xc7c203[_0x51a8('0x16')](_0xc46d7)[_0x51a8('0x17')]();};}function respondWithResult(_0x2de2f9,_0x47b988){_0x47b988=_0x47b988||0xc8;return function(_0x461f5c){if(_0x461f5c){return _0x2de2f9[_0x51a8('0x16')](_0x47b988)[_0x51a8('0x18')](_0x461f5c);}};}function respondWithFilteredResult(_0x50d992,_0xf4eb6e){return function(_0x547d40){if(_0x547d40){var _0x10584b=_0x547d40[_0x51a8('0x19')],_0x2b8d37=_0xf4eb6e[_0x51a8('0x1a')],_0x39cd45=_0xf4eb6e[_0x51a8('0x1a')]+_0xf4eb6e['limit'],_0x2b0521;if(_0x39cd45>=_0x10584b){_0x39cd45=_0x10584b;_0x2b0521=0xc8;}else{_0x2b0521=0xce;}_0x50d992[_0x51a8('0x16')](_0x2b0521);return _0x50d992[_0x51a8('0x1b')](_0x51a8('0x1c'),_0x2b8d37+'-'+_0x39cd45+'/'+_0x10584b)[_0x51a8('0x18')](_0x547d40);}return null;};}function patchUpdates(_0x3bc1a2){return function(_0x544886){try{jsonpatch['apply'](_0x544886,_0x3bc1a2,!![]);}catch(_0x1df8c2){return BPromise[_0x51a8('0x1d')](_0x1df8c2);}return _0x544886[_0x51a8('0x1e')]();};}function saveUpdates(_0x2f2681,_0x2a4c4c){return function(_0x3bc044){if(_0x3bc044){return _0x3bc044[_0x51a8('0x1f')](_0x2f2681)[_0x51a8('0x20')](function(_0x5ac1c0){return _0x5ac1c0;});}return null;};}function removeEntity(_0xf80fa9,_0x53438c){return function(_0xfe0ddb){if(_0xfe0ddb){return _0xfe0ddb[_0x51a8('0x21')]()[_0x51a8('0x20')](function(){var _0x3759d6=_0xfe0ddb['get']({'plain':!![]});var _0xae3588='Sounds';return db['UserProfileResource'][_0x51a8('0x21')]({'where':{'type':_0xae3588,'resourceId':_0x3759d6['id']}})['then'](function(){return _0xfe0ddb;});})[_0x51a8('0x20')](function(){_0xf80fa9[_0x51a8('0x16')](0xcc)[_0x51a8('0x17')]();});}};}function handleEntityNotFound(_0x18e2f3,_0x157554){return function(_0x2f2f05){if(!_0x2f2f05){_0x18e2f3[_0x51a8('0x15')](0x194);}return _0x2f2f05;};}function handleError(_0x1326a2,_0x5b3f49){_0x5b3f49=_0x5b3f49||0x1f4;return function(_0x273ce2){logger[_0x51a8('0x22')](_0x273ce2[_0x51a8('0x23')]);if(_0x273ce2[_0x51a8('0x24')]){delete _0x273ce2[_0x51a8('0x24')];}_0x1326a2[_0x51a8('0x16')](_0x5b3f49)[_0x51a8('0x25')](_0x273ce2);};}exports[_0x51a8('0x26')]=function(_0xec08ae,_0x4b5cda){var _0x20c6b5={},_0x347a02={},_0x4a1548={'count':0x0,'rows':[]};var _0x2f9d53=db['Sound'][_0x51a8('0x27')];_0x347a02[_0x51a8('0x28')]=_[_0x51a8('0x29')](_0x2f9d53);_0x347a02[_0x51a8('0x2a')]=_[_0x51a8('0x29')](_0xec08ae['query']);_0x347a02[_0x51a8('0x2b')]=_['intersection'](_0x347a02[_0x51a8('0x28')],_0x347a02[_0x51a8('0x2a')]);_0x20c6b5[_0x51a8('0x2c')]=_['intersection'](_0x347a02[_0x51a8('0x28')],qs['fields'](_0xec08ae[_0x51a8('0x2a')][_0x51a8('0x2d')]));_0x20c6b5[_0x51a8('0x2c')]=_0x20c6b5[_0x51a8('0x2c')][_0x51a8('0x2e')]?_0x20c6b5['attributes']:_0x347a02[_0x51a8('0x28')];if(!_0xec08ae['query'][_0x51a8('0x2f')](_0x51a8('0x30'))){_0x20c6b5[_0x51a8('0x31')]=qs['limit'](_0xec08ae[_0x51a8('0x2a')][_0x51a8('0x31')]);_0x20c6b5[_0x51a8('0x1a')]=qs[_0x51a8('0x1a')](_0xec08ae[_0x51a8('0x2a')]['offset']);}_0x20c6b5['order']=qs['sort'](_0xec08ae[_0x51a8('0x2a')][_0x51a8('0x32')]);_0x20c6b5['where']=qs[_0x51a8('0x2b')](_['pick'](_0xec08ae[_0x51a8('0x2a')],_0x347a02[_0x51a8('0x2b')]));if(_0xec08ae[_0x51a8('0x2a')][_0x51a8('0x33')]){_0x20c6b5[_0x51a8('0x34')]=_[_0x51a8('0x35')](_0x20c6b5['where'],{'$or':_['map'](_0x2f9d53,function(_0x377b4c){if(_0x377b4c['type']['key']!=='VIRTUAL'){var _0x1d775e={};_0x1d775e[_0x377b4c[_0x51a8('0x36')]]={'$like':'%'+_0xec08ae[_0x51a8('0x2a')]['filter']+'%'};return _0x1d775e;}})});}_0x20c6b5=_[_0x51a8('0x35')]({},_0x20c6b5,_0xec08ae[_0x51a8('0x37')]);var _0x2e6432={'where':_0x20c6b5[_0x51a8('0x34')]};return db['Sound'][_0x51a8('0x19')](_0x2e6432)[_0x51a8('0x20')](function(_0x1b0333){_0x4a1548['count']=_0x1b0333;if(_0xec08ae[_0x51a8('0x2a')]['includeAll']){_0x20c6b5[_0x51a8('0x38')]=[{'all':!![]}];}return db[_0x51a8('0x39')][_0x51a8('0x3a')](_0x20c6b5);})[_0x51a8('0x20')](function(_0x5c44a9){_0x4a1548[_0x51a8('0x3b')]=_0x5c44a9;return _0x4a1548;})[_0x51a8('0x20')](respondWithFilteredResult(_0x4b5cda,_0x20c6b5))[_0x51a8('0x3c')](handleError(_0x4b5cda,null));};exports[_0x51a8('0x3d')]=function(_0xa33fc,_0x35c1c9){var _0x56b125={'raw':!![],'where':{'id':_0xa33fc[_0x51a8('0x3e')]['id']}},_0x1cdec6={};_0x1cdec6['model']=_[_0x51a8('0x29')](db[_0x51a8('0x39')]['rawAttributes']);_0x1cdec6['query']=_[_0x51a8('0x29')](_0xa33fc[_0x51a8('0x2a')]);_0x1cdec6[_0x51a8('0x2b')]=_[_0x51a8('0x3f')](_0x1cdec6[_0x51a8('0x28')],_0x1cdec6[_0x51a8('0x2a')]);_0x56b125[_0x51a8('0x2c')]=_[_0x51a8('0x3f')](_0x1cdec6[_0x51a8('0x28')],qs[_0x51a8('0x2d')](_0xa33fc['query'][_0x51a8('0x2d')]));_0x56b125[_0x51a8('0x2c')]=_0x56b125[_0x51a8('0x2c')][_0x51a8('0x2e')]?_0x56b125[_0x51a8('0x2c')]:_0x1cdec6[_0x51a8('0x28')];if(_0xa33fc['query'][_0x51a8('0x40')]){_0x56b125['include']=[{'all':!![]}];}_0x56b125=_[_0x51a8('0x35')]({},_0x56b125,_0xa33fc[_0x51a8('0x37')]);return db[_0x51a8('0x39')][_0x51a8('0x41')](_0x56b125)[_0x51a8('0x20')](handleEntityNotFound(_0x35c1c9,null))['then'](respondWithResult(_0x35c1c9,null))['catch'](handleError(_0x35c1c9,null));};exports[_0x51a8('0x42')]=function(_0x3ce04e,_0x41cfda,_0x35e510){return db[_0x51a8('0x39')]['find']({'where':{'id':_0x3ce04e['params']['id']},'attributes':[_0x51a8('0x24'),_0x51a8('0x43'),_0x51a8('0x44')],'raw':!![]})[_0x51a8('0x20')](handleEntityNotFound(_0x41cfda,null))[_0x51a8('0x20')](function(_0x1cf058){if(_0x1cf058){if(!fs[_0x51a8('0x45')](path[_0x51a8('0x46')](config[_0x51a8('0x47')],'server/files/sounds/converted',_0x1cf058['save_name']+'.'+_0x1cf058['converted_format']))){throw new db[(_0x51a8('0x48'))][(_0x51a8('0x49'))](_0x51a8('0x4a'));}return _0x41cfda['download'](path[_0x51a8('0x46')](config[_0x51a8('0x47')],'server/files/sounds/converted',util[_0x51a8('0x4b')]('%s.%s',_0x1cf058['save_name'],_0x1cf058[_0x51a8('0x44')])),util[_0x51a8('0x4b')](_0x51a8('0x4c'),_0x1cf058['name'],_0x1cf058['converted_format']));}return null;})[_0x51a8('0x3c')](handleError(_0x41cfda,null));};exports['create']=function(_0x21c4da,_0xc89617,_0x3623d4){var _0x1ace5b={'name':path[_0x51a8('0x4d')](_0x21c4da[_0x51a8('0x4e')][_0x51a8('0x4f')],path[_0x51a8('0x50')](_0x21c4da[_0x51a8('0x4e')]['originalname'])),'save_name':path[_0x51a8('0x4d')](_0x21c4da[_0x51a8('0x4e')][_0x51a8('0x51')],path[_0x51a8('0x50')](_0x21c4da['file'][_0x51a8('0x51')])),'original_format':path['extname'](_0x21c4da[_0x51a8('0x4e')][_0x51a8('0x4f')])['substring'](0x1),'converted_format':'wav'};var _0x2628d4=path[_0x51a8('0x46')](config[_0x51a8('0x47')],_0x51a8('0x52'),_0x21c4da[_0x51a8('0x4e')]['filename']);var _0x43b79a=path[_0x51a8('0x46')](config[_0x51a8('0x47')],_0x51a8('0x53'),util[_0x51a8('0x4b')]('%s.%s',path[_0x51a8('0x4d')](_0x21c4da[_0x51a8('0x4e')][_0x51a8('0x51')],path[_0x51a8('0x50')](_0x21c4da[_0x51a8('0x4e')][_0x51a8('0x51')])),_0x1ace5b['converted_format']));logger['info']('Sound\x20upload\x20filepath:\x20%s',_0x2628d4);logger['info'](_0x51a8('0x54'),_0x43b79a);try{fs[_0x51a8('0x55')](_0x2628d4,parseInt('0777',0x8));var _0x7ac0ae=sox['transcode'](_0x2628d4,_0x43b79a,{'sampleRate':0x1f40,'format':_0x51a8('0x56'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x7ac0ae['on']('error',function(_0x3947e1){fs[_0x51a8('0x57')](_0x2628d4);_0xc89617['status'](0x1f4)['send'](_0x3947e1);});_0x7ac0ae['on']('src',function(_0x44d67a){_0x1ace5b[_0x51a8('0x58')]=isNaN(_0x44d67a[_0x51a8('0x59')])?null:_0x44d67a[_0x51a8('0x59')]*0x3e8;_0x1ace5b[_0x51a8('0x5a')]=isNaN(_0x44d67a[_0x51a8('0x5b')])?null:_0x44d67a[_0x51a8('0x5b')];_0x1ace5b[_0x51a8('0x5c')]=isNaN(_0x44d67a['channelCount'])?null:_0x44d67a[_0x51a8('0x5d')];_0x1ace5b[_0x51a8('0x5e')]=isNaN(_0x44d67a['bitRate'])?null:_0x44d67a[_0x51a8('0x5f')];_0x1ace5b[_0x51a8('0x60')]=isNaN(_0x44d67a[_0x51a8('0x61')])?null:_0x44d67a[_0x51a8('0x61')];});_0x7ac0ae['on'](_0x51a8('0x62'),function(_0x2a5684){_0x1ace5b['converted_duration']=isNaN(_0x2a5684['duration'])?null:_0x2a5684[_0x51a8('0x59')]*0x3e8;_0x1ace5b['converted_sampleCount']=isNaN(_0x2a5684['sampleCount'])?null:_0x2a5684['sampleCount'];_0x1ace5b['converted_channelCount']=isNaN(_0x2a5684['channelCount'])?null:_0x2a5684[_0x51a8('0x5d')];_0x1ace5b['converted_bitRate']=isNaN(_0x2a5684[_0x51a8('0x5f')])?null:_0x2a5684[_0x51a8('0x5f')];_0x1ace5b[_0x51a8('0x63')]=isNaN(_0x2a5684[_0x51a8('0x61')])?null:_0x2a5684[_0x51a8('0x61')];});_0x7ac0ae['on'](_0x51a8('0x17'),function(){fs[_0x51a8('0x55')](_0x43b79a,parseInt(_0x51a8('0x64'),0x8));return db[_0x51a8('0x39')][_0x51a8('0x65')](_0x1ace5b)['then'](function(_0x3e66d0){var _0x220886={'role':_0x21c4da[_0x51a8('0x66')]['role'],'userProfileId':_0x21c4da['body']['userProfileId']};if(!_0x220886)throw new Error(_0x51a8('0x67'));if(_0x220886[_0x51a8('0x68')]===_0x51a8('0x69')){var _0x348950=_0x3e66d0[_0x51a8('0x6a')]({'plain':!![]});return db[_0x51a8('0x6b')][_0x51a8('0x41')]({'where':{'name':_0x51a8('0x6c'),'userProfileId':_0x220886[_0x51a8('0x6d')]},'raw':!![]})[_0x51a8('0x20')](function(_0x45aabc){if(_0x45aabc&&_0x45aabc[_0x51a8('0x6e')]===0x0){return db[_0x51a8('0x6f')]['create']({'name':_0x348950[_0x51a8('0x24')],'resourceId':_0x348950['id'],'type':_0x45aabc[_0x51a8('0x24')],'sectionId':_0x45aabc['id']},{})['then'](function(){return _0x3e66d0;});}else{return _0x3e66d0;}})[_0x51a8('0x3c')](function(_0x5140b8){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x5140b8);throw _0x5140b8;});}return _0x3e66d0;})[_0x51a8('0x20')](respondWithResult(_0xc89617,null))[_0x51a8('0x3c')](handleError(_0xc89617,null));});_0x7ac0ae[_0x51a8('0x70')]();}catch(_0x283385){_0xc89617[_0x51a8('0x16')](0x1f4)[_0x51a8('0x25')](_0x283385);}};exports[_0x51a8('0x1f')]=function(_0x5a37c1,_0x5958be,_0x51b004){return db[_0x51a8('0x39')][_0x51a8('0x41')]({'where':{'id':_0x5a37c1[_0x51a8('0x3e')]['id']}})[_0x51a8('0x20')](handleEntityNotFound(_0x5958be,null))[_0x51a8('0x20')](saveUpdates(_[_0x51a8('0x71')](_0x5a37c1['body'],[_0x51a8('0x24'),'description']),null))[_0x51a8('0x20')](respondWithResult(_0x5958be,null))[_0x51a8('0x3c')](handleError(_0x5958be,null));};exports[_0x51a8('0x72')]=function(_0x43124d,_0x149a40,_0x3aca4a){return db[_0x51a8('0x39')][_0x51a8('0x41')]({'where':{'id':_0x43124d[_0x51a8('0x3e')]['id']}})[_0x51a8('0x20')](function(_0x2289d9){if(_0x2289d9){return _0x2289d9['destroy']();}})['then'](function(_0x21912f){var _0xf0c644=path[_0x51a8('0x46')](config[_0x51a8('0x47')],'server/files/sounds/original',util[_0x51a8('0x4b')]('%s.%s',_0x21912f[_0x51a8('0x43')],_0x21912f[_0x51a8('0x73')]));var _0xbee86f=path[_0x51a8('0x46')](config[_0x51a8('0x47')],_0x51a8('0x53'),util[_0x51a8('0x4b')](_0x51a8('0x4c'),_0x21912f[_0x51a8('0x43')],_0x21912f['converted_format']));fs[_0x51a8('0x57')](_0xf0c644);fs[_0x51a8('0x57')](_0xbee86f);return _0x21912f;})[_0x51a8('0x20')](function(_0x353e90){if(_0x353e90){return _0x149a40['status'](0xcc)['end']();}})[_0x51a8('0x20')](handleEntityNotFound(_0x149a40,null))['catch'](handleError(_0x149a40,null));};
\ No newline at end of file
index 25a384b..fe88d57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x070b=['moment','bluebird','request-promise','./sound.attributes','exports','Sound','tools_sounds','lodash','util','api'];(function(_0x8cf40e,_0x443c07){var _0x3aa262=function(_0x2f9b46){while(--_0x2f9b46){_0x8cf40e['push'](_0x8cf40e['shift']());}};_0x3aa262(++_0x443c07);}(_0x070b,0xed));var _0xb070=function(_0x5d3032,_0x2a562d){_0x5d3032=_0x5d3032-0x0;var _0x3a73cb=_0x070b[_0x5d3032];return _0x3a73cb;};'use strict';var _=require(_0xb070('0x0'));var util=require(_0xb070('0x1'));var logger=require('../../config/logger')(_0xb070('0x2'));var moment=require(_0xb070('0x3'));var BPromise=require(_0xb070('0x4'));var rp=require(_0xb070('0x5'));var attributes=require(_0xb070('0x6'));module[_0xb070('0x7')]=function(_0x1bbf96,_0x5020e7){return _0x1bbf96['define'](_0xb070('0x8'),attributes,{'tableName':_0xb070('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x160b=['lodash','util','../../config/logger','moment','./sound.attributes','exports','define','Sound','tools_sounds'];(function(_0x539f3c,_0x5b40db){var _0x17a4ba=function(_0x2d388b){while(--_0x2d388b){_0x539f3c['push'](_0x539f3c['shift']());}};_0x17a4ba(++_0x5b40db);}(_0x160b,0xc6));var _0xb160=function(_0x122e61,_0x2b8d73){_0x122e61=_0x122e61-0x0;var _0x444ad4=_0x160b[_0x122e61];return _0x444ad4;};'use strict';var _=require(_0xb160('0x0'));var util=require(_0xb160('0x1'));var logger=require(_0xb160('0x2'))('api');var moment=require(_0xb160('0x3'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xb160('0x4'));module[_0xb160('0x5')]=function(_0x298b39,_0x11f8aa){return _0x298b39[_0xb160('0x6')](_0xb160('0x7'),attributes,{'tableName':_0xb160('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 611bed5..e14d16d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['catch','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','Sound,\x20%s,\x20%s','Sound,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','message','result','ShowSound','Sound','find','options','raw','where','attributes','map','include','model','debug'];(function(_0x2f020a,_0x1c6557){var _0x4c671f=function(_0x4940bf){while(--_0x4940bf){_0x2f020a['push'](_0x2f020a['shift']());}};_0x4c671f(++_0x1c6557);}(_0xb10b,0x12a));var _0xbb10=function(_0x215eab,_0x3c3938){_0x215eab=_0x215eab-0x0;var _0x31d024=_0xb10b[_0x215eab];return _0x31d024;};'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});function respondWithRpcPromise(_0x3cdd53,_0x513741,_0x1b9e94){return new BPromise(function(_0x3fb675,_0x21370f){return client[_0xbb10('0xb')](_0x3cdd53,_0x1b9e94)[_0xbb10('0xc')](function(_0x1ce33e){logger[_0xbb10('0xd')](_0xbb10('0xe'),_0x513741,'request\x20sent');logger['debug'](_0xbb10('0xf'),_0x513741,_0xbb10('0x10'),JSON[_0xbb10('0x11')](_0x1ce33e));if(_0x1ce33e['error']){if(_0x1ce33e[_0xbb10('0x12')]['code']===0x1f4){logger[_0xbb10('0x12')](_0xbb10('0xe'),_0x513741,_0x1ce33e[_0xbb10('0x12')][_0xbb10('0x13')]);return _0x21370f(_0x1ce33e[_0xbb10('0x12')][_0xbb10('0x13')]);}logger['error'](_0xbb10('0xe'),_0x513741,_0x1ce33e[_0xbb10('0x12')][_0xbb10('0x13')]);return _0x3fb675(_0x1ce33e[_0xbb10('0x12')][_0xbb10('0x13')]);}else{logger[_0xbb10('0xd')](_0xbb10('0xe'),_0x513741,_0xbb10('0x10'));_0x3fb675(_0x1ce33e[_0xbb10('0x14')][_0xbb10('0x13')]);}})['catch'](function(_0x2eca0f){logger[_0xbb10('0x12')](_0xbb10('0xe'),_0x513741,_0x2eca0f);_0x21370f(_0x2eca0f);});});}exports[_0xbb10('0x15')]=function(_0x378da8){var _0x1682a4=this;return new Promise(function(_0x575cca,_0x30efc6){return db[_0xbb10('0x16')][_0xbb10('0x17')]({'raw':_0x378da8['options']?_0x378da8[_0xbb10('0x18')][_0xbb10('0x19')]===undefined?!![]:![]:!![],'where':_0x378da8[_0xbb10('0x18')]?_0x378da8[_0xbb10('0x18')][_0xbb10('0x1a')]||null:null,'attributes':_0x378da8[_0xbb10('0x18')]?_0x378da8['options'][_0xbb10('0x1b')]||null:null,'include':_0x378da8[_0xbb10('0x18')]?_0x378da8['options']['include']?_[_0xbb10('0x1c')](_0x378da8[_0xbb10('0x18')][_0xbb10('0x1d')],function(_0x317da4){return{'model':db[_0x317da4[_0xbb10('0x1e')]],'as':_0x317da4['as'],'attributes':_0x317da4[_0xbb10('0x1b')],'include':_0x317da4[_0xbb10('0x1d')]?_[_0xbb10('0x1c')](_0x317da4[_0xbb10('0x1d')],function(_0x395404){return{'model':db[_0x395404[_0xbb10('0x1e')]],'as':_0x395404['as'],'attributes':_0x395404[_0xbb10('0x1b')],'include':_0x395404['include']?_['map'](_0x395404['include'],function(_0xc93a04){return{'model':db[_0xc93a04[_0xbb10('0x1e')]],'as':_0xc93a04['as'],'attributes':_0xc93a04[_0xbb10('0x1b')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x2fdde9){logger[_0xbb10('0xd')](_0xbb10('0x15'),_0x378da8);logger[_0xbb10('0x1f')](_0xbb10('0x15'),_0x378da8,JSON[_0xbb10('0x11')](_0x2fdde9));_0x575cca(_0x2fdde9);})[_0xbb10('0x20')](function(_0x4aabb9){logger[_0xbb10('0x12')](_0xbb10('0x15'),_0x4aabb9[_0xbb10('0x13')],_0x378da8);_0x30efc6(_0x1682a4[_0xbb10('0x12')](0x1f4,_0x4aabb9[_0xbb10('0x13')]));});});};
\ No newline at end of file
+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(_0x710815,_0x520da8){var _0x5b3b89=function(_0x2e1a8e){while(--_0x2e1a8e){_0x710815['push'](_0x710815['shift']());}};_0x5b3b89(++_0x520da8);}(_0xa9e0,0x123));var _0x0a9e=function(_0x484e36,_0x4482d8){_0x484e36=_0x484e36-0x0;var _0xafc85d=_0xa9e0[_0x484e36];return _0xafc85d;};'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
index a524cde..0474142 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa8ac=['/:id','show','post','isAuthenticated','create','put','update','delete','destroy','util','path','express','Router','../../config/environment','get','index'];(function(_0x38a372,_0x18390d){var _0x2e454b=function(_0xad347b){while(--_0xad347b){_0x38a372['push'](_0x38a372['shift']());}};_0x2e454b(++_0x18390d);}(_0xa8ac,0xd9));var _0xca8a=function(_0x4f1767,_0x122a5f){_0x4f1767=_0x4f1767-0x0;var _0x2054cc=_0xa8ac[_0x4f1767];return _0x2054cc;};'use strict';var multer=require('multer');var util=require(_0xca8a('0x0'));var path=require(_0xca8a('0x1'));var timeout=require('connect-timeout');var express=require(_0xca8a('0x2'));var router=express[_0xca8a('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0xca8a('0x4'));var controller=require('./squareMessage.controller');router[_0xca8a('0x5')]('/',auth['isAuthenticated'](),controller[_0xca8a('0x6')]);router['get'](_0xca8a('0x7'),auth['isAuthenticated'](),controller[_0xca8a('0x8')]);router[_0xca8a('0x9')]('/',auth[_0xca8a('0xa')](),controller[_0xca8a('0xb')]);router[_0xca8a('0xc')](_0xca8a('0x7'),auth[_0xca8a('0xa')](),controller[_0xca8a('0xd')]);router[_0xca8a('0xe')](_0xca8a('0x7'),auth['isAuthenticated'](),controller[_0xca8a('0xf')]);module['exports']=router;
\ No newline at end of file
+var _0xf1a7=['delete','destroy','exports','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareMessage.controller','get','isAuthenticated','index','show','post','create','put','/:id','update'];(function(_0xeb553b,_0x5b2e8a){var _0xd6b535=function(_0x3743bc){while(--_0x3743bc){_0xeb553b['push'](_0xeb553b['shift']());}};_0xd6b535(++_0x5b2e8a);}(_0xf1a7,0x8f));var _0x7f1a=function(_0x4693d3,_0x216026){_0x4693d3=_0x4693d3-0x0;var _0x126617=_0xf1a7[_0x4693d3];return _0x126617;};'use strict';var multer=require('multer');var util=require(_0x7f1a('0x0'));var path=require('path');var timeout=require(_0x7f1a('0x1'));var express=require(_0x7f1a('0x2'));var router=express[_0x7f1a('0x3')]();var auth=require(_0x7f1a('0x4'));var interaction=require(_0x7f1a('0x5'));var config=require(_0x7f1a('0x6'));var controller=require(_0x7f1a('0x7'));router[_0x7f1a('0x8')]('/',auth[_0x7f1a('0x9')](),controller[_0x7f1a('0xa')]);router[_0x7f1a('0x8')]('/:id',auth[_0x7f1a('0x9')](),controller[_0x7f1a('0xb')]);router[_0x7f1a('0xc')]('/',auth[_0x7f1a('0x9')](),controller[_0x7f1a('0xd')]);router[_0x7f1a('0xe')](_0x7f1a('0xf'),auth[_0x7f1a('0x9')](),controller[_0x7f1a('0x10')]);router[_0x7f1a('0x11')](_0x7f1a('0xf'),auth[_0x7f1a('0x9')](),controller[_0x7f1a('0x12')]);module[_0x7f1a('0x13')]=router;
\ No newline at end of file
index 9350704..8cc4eec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8e9=['sequelize','exports','STRING','TEXT','medium','ENUM','out'];(function(_0x36adf0,_0x1c5ba0){var _0x26c05d=function(_0x233666){while(--_0x233666){_0x36adf0['push'](_0x36adf0['shift']());}};_0x26c05d(++_0x1c5ba0);}(_0xd8e9,0x126));var _0x9d8e=function(_0x32fba1,_0x485363){_0x32fba1=_0x32fba1-0x0;var _0x32b2b2=_0xd8e9[_0x32fba1];return _0x32b2b2;};'use strict';var Sequelize=require(_0x9d8e('0x0'));module[_0x9d8e('0x1')]={'uniqueid':{'type':Sequelize[_0x9d8e('0x2')]},'body':{'type':Sequelize[_0x9d8e('0x3')](_0x9d8e('0x4')),'allowNull':![]},'direction':{'type':Sequelize[_0x9d8e('0x5')]('in',_0x9d8e('0x6')),'defaultValue':'out','allowNull':![]}};
\ No newline at end of file
+var _0xd0f4=['sequelize','exports','STRING','TEXT','medium','ENUM','out'];(function(_0x5a2a22,_0x1f3dc8){var _0xf9f942=function(_0xa0aad2){while(--_0xa0aad2){_0x5a2a22['push'](_0x5a2a22['shift']());}};_0xf9f942(++_0x1f3dc8);}(_0xd0f4,0x142));var _0x4d0f=function(_0x530b0f,_0x279f3e){_0x530b0f=_0x530b0f-0x0;var _0x5e8c60=_0xd0f4[_0x530b0f];return _0x5e8c60;};'use strict';var Sequelize=require(_0x4d0f('0x0'));module[_0x4d0f('0x1')]={'uniqueid':{'type':Sequelize[_0x4d0f('0x2')]},'body':{'type':Sequelize[_0x4d0f('0x3')](_0x4d0f('0x4')),'allowNull':![]},'direction':{'type':Sequelize[_0x4d0f('0x5')]('in',_0x4d0f('0x6')),'defaultValue':_0x4d0f('0x6'),'allowNull':![]}};
\ No newline at end of file
index 1830bdc..934c211 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf7b3=['error','name','index','rawAttributes','keys','query','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','filters','where','merge','map','field','options','includeAll','include','SquareMessage','findAll','rows','catch','show','params','find','create','body','update','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache','path','sox','to-csv','ejs','lodash','squel','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','then','destroy'];(function(_0x599f41,_0x4db732){var _0x2e4d58=function(_0x14c882){while(--_0x14c882){_0x599f41['push'](_0x599f41['shift']());}};_0x2e4d58(++_0x4db732);}(_0xf7b3,0x66));var _0x3f7b=function(_0x35f7f5,_0x4e2ee1){_0x35f7f5=_0x35f7f5-0x0;var _0x5567a4=_0xf7b3[_0x35f7f5];return _0x5567a4;};'use strict';var pdf=require(_0x3f7b('0x0'));var emlformat=require(_0x3f7b('0x1'));var rimraf=require(_0x3f7b('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x3f7b('0x3'));var moment=require(_0x3f7b('0x4'));var BPromise=require(_0x3f7b('0x5'));var Mustache=require(_0x3f7b('0x6'));var util=require('util');var path=require(_0x3f7b('0x7'));var sox=require(_0x3f7b('0x8'));var csv=require(_0x3f7b('0x9'));var ejs=require(_0x3f7b('0xa'));var fs=require('fs');var _=require(_0x3f7b('0xb'));var squel=require(_0x3f7b('0xc'));var crypto=require('crypto');var jsforce=require(_0x3f7b('0xd'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x3f7b('0xe'));var Papa=require(_0x3f7b('0xf'));var authService=require(_0x3f7b('0x10'));var hardwareService=require(_0x3f7b('0x11'));var Redis=require(_0x3f7b('0x12'));var qs=require(_0x3f7b('0x13'));var logger=require(_0x3f7b('0x14'))(_0x3f7b('0x15'));var utils=require(_0x3f7b('0x16'));var config=require(_0x3f7b('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1c004,_0x3449c2){_0x3449c2=_0x3449c2||0xcc;return function(_0x44e46c){if(_0x44e46c){return _0x1c004[_0x3f7b('0x18')](_0x3449c2);}return _0x1c004['status'](_0x3449c2)[_0x3f7b('0x19')]();};}function respondWithResult(_0x4b0faf,_0x6ce426){_0x6ce426=_0x6ce426||0xc8;return function(_0x1f13ac){if(_0x1f13ac){return _0x4b0faf[_0x3f7b('0x1a')](_0x6ce426)[_0x3f7b('0x1b')](_0x1f13ac);}};}function respondWithFilteredResult(_0x26764e,_0x129bd0){return function(_0x2dcc47){if(_0x2dcc47){var _0x22b965=_0x2dcc47[_0x3f7b('0x1c')],_0x5ccd8b=_0x129bd0['offset'],_0xebc026=_0x129bd0[_0x3f7b('0x1d')]+_0x129bd0[_0x3f7b('0x1e')],_0x396420;if(_0xebc026>=_0x22b965){_0xebc026=_0x22b965;_0x396420=0xc8;}else{_0x396420=0xce;}_0x26764e[_0x3f7b('0x1a')](_0x396420);return _0x26764e[_0x3f7b('0x1f')](_0x3f7b('0x20'),_0x5ccd8b+'-'+_0xebc026+'/'+_0x22b965)['json'](_0x2dcc47);}return null;};}function patchUpdates(_0x256eeb){return function(_0x1fcad2){try{jsonpatch[_0x3f7b('0x21')](_0x1fcad2,_0x256eeb,!![]);}catch(_0x1413b5){return BPromise[_0x3f7b('0x22')](_0x1413b5);}return _0x1fcad2[_0x3f7b('0x23')]();};}function saveUpdates(_0x45bfba,_0x240c59){return function(_0x3bd104){if(_0x3bd104){return _0x3bd104['update'](_0x45bfba)[_0x3f7b('0x24')](function(_0x577e89){return _0x577e89;});}return null;};}function removeEntity(_0x515e5b,_0x26ab2e){return function(_0x5b1890){if(_0x5b1890){return _0x5b1890[_0x3f7b('0x25')]()[_0x3f7b('0x24')](function(){_0x515e5b[_0x3f7b('0x1a')](0xcc)[_0x3f7b('0x19')]();});}};}function handleEntityNotFound(_0x3ed3c8,_0x2c7b0c){return function(_0x3915d5){if(!_0x3915d5){_0x3ed3c8[_0x3f7b('0x18')](0x194);}return _0x3915d5;};}function handleError(_0x48dfc7,_0x44b933){_0x44b933=_0x44b933||0x1f4;return function(_0x1b60b3){logger[_0x3f7b('0x26')](_0x1b60b3['stack']);if(_0x1b60b3['name']){delete _0x1b60b3[_0x3f7b('0x27')];}_0x48dfc7[_0x3f7b('0x1a')](_0x44b933)['send'](_0x1b60b3);};}exports[_0x3f7b('0x28')]=function(_0x477d5c,_0x4522bb){var _0x3b7047={},_0x2d060f={},_0x157979={'count':0x0,'rows':[]};var _0x12ca82=db['SquareMessage'][_0x3f7b('0x29')];_0x2d060f['model']=_['keys'](_0x12ca82);_0x2d060f['query']=_[_0x3f7b('0x2a')](_0x477d5c[_0x3f7b('0x2b')]);_0x2d060f['filters']=_[_0x3f7b('0x2c')](_0x2d060f[_0x3f7b('0x2d')],_0x2d060f[_0x3f7b('0x2b')]);_0x3b7047[_0x3f7b('0x2e')]=_[_0x3f7b('0x2c')](_0x2d060f['model'],qs[_0x3f7b('0x2f')](_0x477d5c['query'][_0x3f7b('0x2f')]));_0x3b7047['attributes']=_0x3b7047[_0x3f7b('0x2e')][_0x3f7b('0x30')]?_0x3b7047[_0x3f7b('0x2e')]:_0x2d060f[_0x3f7b('0x2d')];if(!_0x477d5c['query'][_0x3f7b('0x31')](_0x3f7b('0x32'))){_0x3b7047[_0x3f7b('0x1e')]=qs['limit'](_0x477d5c[_0x3f7b('0x2b')][_0x3f7b('0x1e')]);_0x3b7047[_0x3f7b('0x1d')]=qs[_0x3f7b('0x1d')](_0x477d5c[_0x3f7b('0x2b')][_0x3f7b('0x1d')]);}_0x3b7047[_0x3f7b('0x33')]=qs['sort'](_0x477d5c[_0x3f7b('0x2b')]['sort']);_0x3b7047['where']=qs[_0x3f7b('0x34')](_['pick'](_0x477d5c[_0x3f7b('0x2b')],_0x2d060f['filters']));if(_0x477d5c[_0x3f7b('0x2b')]['filter']){_0x3b7047[_0x3f7b('0x35')]=_[_0x3f7b('0x36')](_0x3b7047['where'],{'$or':_[_0x3f7b('0x37')](_0x12ca82,function(_0x38e467){if(_0x38e467['type']['key']!=='VIRTUAL'){var _0x12121e={};_0x12121e[_0x38e467[_0x3f7b('0x38')]]={'$like':'%'+_0x477d5c[_0x3f7b('0x2b')]['filter']+'%'};return _0x12121e;}})});}_0x3b7047=_['merge']({},_0x3b7047,_0x477d5c[_0x3f7b('0x39')]);var _0x58febf={'where':_0x3b7047[_0x3f7b('0x35')]};return db['SquareMessage'][_0x3f7b('0x1c')](_0x58febf)[_0x3f7b('0x24')](function(_0x37cf73){_0x157979['count']=_0x37cf73;if(_0x477d5c['query'][_0x3f7b('0x3a')]){_0x3b7047[_0x3f7b('0x3b')]=[{'all':!![]}];}return db[_0x3f7b('0x3c')][_0x3f7b('0x3d')](_0x3b7047);})[_0x3f7b('0x24')](function(_0x553c9a){_0x157979[_0x3f7b('0x3e')]=_0x553c9a;return _0x157979;})['then'](respondWithFilteredResult(_0x4522bb,_0x3b7047))[_0x3f7b('0x3f')](handleError(_0x4522bb,null));};exports[_0x3f7b('0x40')]=function(_0x37b9fb,_0x18d678){var _0x35834a={'raw':!![],'where':{'id':_0x37b9fb[_0x3f7b('0x41')]['id']}},_0x940f68={};_0x940f68[_0x3f7b('0x2d')]=_[_0x3f7b('0x2a')](db[_0x3f7b('0x3c')][_0x3f7b('0x29')]);_0x940f68['query']=_[_0x3f7b('0x2a')](_0x37b9fb['query']);_0x940f68[_0x3f7b('0x34')]=_['intersection'](_0x940f68[_0x3f7b('0x2d')],_0x940f68[_0x3f7b('0x2b')]);_0x35834a[_0x3f7b('0x2e')]=_[_0x3f7b('0x2c')](_0x940f68[_0x3f7b('0x2d')],qs[_0x3f7b('0x2f')](_0x37b9fb['query'][_0x3f7b('0x2f')]));_0x35834a[_0x3f7b('0x2e')]=_0x35834a['attributes'][_0x3f7b('0x30')]?_0x35834a[_0x3f7b('0x2e')]:_0x940f68[_0x3f7b('0x2d')];if(_0x37b9fb[_0x3f7b('0x2b')]['includeAll']){_0x35834a[_0x3f7b('0x3b')]=[{'all':!![]}];}_0x35834a=_[_0x3f7b('0x36')]({},_0x35834a,_0x37b9fb[_0x3f7b('0x39')]);return db[_0x3f7b('0x3c')][_0x3f7b('0x42')](_0x35834a)[_0x3f7b('0x24')](handleEntityNotFound(_0x18d678,null))[_0x3f7b('0x24')](respondWithResult(_0x18d678,null))[_0x3f7b('0x3f')](handleError(_0x18d678,null));};exports[_0x3f7b('0x43')]=function(_0x424a80,_0x1eaa26){return db[_0x3f7b('0x3c')][_0x3f7b('0x43')](_0x424a80[_0x3f7b('0x44')],{})[_0x3f7b('0x24')](respondWithResult(_0x1eaa26,0xc9))['catch'](handleError(_0x1eaa26,null));};exports[_0x3f7b('0x45')]=function(_0x2a6db2,_0x375d94){if(_0x2a6db2[_0x3f7b('0x44')]['id']){delete _0x2a6db2[_0x3f7b('0x44')]['id'];}return db[_0x3f7b('0x3c')][_0x3f7b('0x42')]({'where':{'id':_0x2a6db2['params']['id']}})[_0x3f7b('0x24')](handleEntityNotFound(_0x375d94,null))[_0x3f7b('0x24')](saveUpdates(_0x2a6db2['body'],null))[_0x3f7b('0x24')](respondWithResult(_0x375d94,null))[_0x3f7b('0x3f')](handleError(_0x375d94,null));};exports[_0x3f7b('0x25')]=function(_0x4e35ee,_0xdf329b){return db[_0x3f7b('0x3c')]['find']({'where':{'id':_0x4e35ee[_0x3f7b('0x41')]['id']}})[_0x3f7b('0x24')](handleEntityNotFound(_0xdf329b,null))[_0x3f7b('0x24')](removeEntity(_0xdf329b,null))[_0x3f7b('0x3f')](handleError(_0xdf329b,null));};
\ No newline at end of file
+var _0xc1f2=['index','SquareMessage','rawAttributes','keys','query','filters','intersection','attributes','fields','nolimit','limit','sort','where','pick','filter','map','key','VIRTUAL','field','merge','count','includeAll','include','findAll','rows','catch','show','model','length','options','find','create','body','params','html-pdf','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','crypto','jsforce','desk.js','querystring','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','end','json','offset','status','Content-Range','apply','save','update','then','destroy','error','stack','name','send'];(function(_0x401e82,_0x4623f3){var _0x2a33ca=function(_0xd5d689){while(--_0xd5d689){_0x401e82['push'](_0x401e82['shift']());}};_0x2a33ca(++_0x4623f3);}(_0xc1f2,0xfd));var _0x2c1f=function(_0x2eeb73,_0x413219){_0x2eeb73=_0x2eeb73-0x0;var _0x421024=_0xc1f2[_0x2eeb73];return _0x421024;};'use strict';var pdf=require(_0x2c1f('0x0'));var emlformat=require(_0x2c1f('0x1'));var rimraf=require(_0x2c1f('0x2'));var zipdir=require(_0x2c1f('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x2c1f('0x4'));var moment=require(_0x2c1f('0x5'));var BPromise=require(_0x2c1f('0x6'));var Mustache=require(_0x2c1f('0x7'));var util=require(_0x2c1f('0x8'));var path=require(_0x2c1f('0x9'));var sox=require('sox');var csv=require(_0x2c1f('0xa'));var ejs=require(_0x2c1f('0xb'));var fs=require('fs');var _=require(_0x2c1f('0xc'));var squel=require('squel');var crypto=require(_0x2c1f('0xd'));var jsforce=require(_0x2c1f('0xe'));var deskjs=require(_0x2c1f('0xf'));var toCsv=require('to-csv');var querystring=require(_0x2c1f('0x10'));var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x2c1f('0x11'));var Redis=require(_0x2c1f('0x12'));var qs=require(_0x2c1f('0x13'));var logger=require(_0x2c1f('0x14'))(_0x2c1f('0x15'));var utils=require(_0x2c1f('0x16'));var config=require(_0x2c1f('0x17'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4fa57a,_0x4c497d){_0x4c497d=_0x4c497d||0xcc;return function(_0x4c5c51){if(_0x4c5c51){return _0x4fa57a[_0x2c1f('0x18')](_0x4c497d);}return _0x4fa57a['status'](_0x4c497d)[_0x2c1f('0x19')]();};}function respondWithResult(_0x2cd62f,_0x28c714){_0x28c714=_0x28c714||0xc8;return function(_0x4558c8){if(_0x4558c8){return _0x2cd62f['status'](_0x28c714)[_0x2c1f('0x1a')](_0x4558c8);}};}function respondWithFilteredResult(_0xb4d84d,_0x2e387c){return function(_0x1da653){if(_0x1da653){var _0xc7eac9=_0x1da653['count'],_0x3a305f=_0x2e387c[_0x2c1f('0x1b')],_0x454ce5=_0x2e387c[_0x2c1f('0x1b')]+_0x2e387c['limit'],_0xb2c6ee;if(_0x454ce5>=_0xc7eac9){_0x454ce5=_0xc7eac9;_0xb2c6ee=0xc8;}else{_0xb2c6ee=0xce;}_0xb4d84d[_0x2c1f('0x1c')](_0xb2c6ee);return _0xb4d84d['set'](_0x2c1f('0x1d'),_0x3a305f+'-'+_0x454ce5+'/'+_0xc7eac9)[_0x2c1f('0x1a')](_0x1da653);}return null;};}function patchUpdates(_0x1bc746){return function(_0x4f5bb3){try{jsonpatch[_0x2c1f('0x1e')](_0x4f5bb3,_0x1bc746,!![]);}catch(_0x122768){return BPromise['reject'](_0x122768);}return _0x4f5bb3[_0x2c1f('0x1f')]();};}function saveUpdates(_0x115354,_0x3497b7){return function(_0x1db8f8){if(_0x1db8f8){return _0x1db8f8[_0x2c1f('0x20')](_0x115354)[_0x2c1f('0x21')](function(_0x554da3){return _0x554da3;});}return null;};}function removeEntity(_0x1991ca,_0x2b9c07){return function(_0x4b9060){if(_0x4b9060){return _0x4b9060[_0x2c1f('0x22')]()['then'](function(){_0x1991ca[_0x2c1f('0x1c')](0xcc)['end']();});}};}function handleEntityNotFound(_0x580350,_0x466cea){return function(_0x14d5a1){if(!_0x14d5a1){_0x580350['sendStatus'](0x194);}return _0x14d5a1;};}function handleError(_0x53efcb,_0x1285b4){_0x1285b4=_0x1285b4||0x1f4;return function(_0x30e0e2){logger[_0x2c1f('0x23')](_0x30e0e2[_0x2c1f('0x24')]);if(_0x30e0e2['name']){delete _0x30e0e2[_0x2c1f('0x25')];}_0x53efcb[_0x2c1f('0x1c')](_0x1285b4)[_0x2c1f('0x26')](_0x30e0e2);};}exports[_0x2c1f('0x27')]=function(_0x25e584,_0x5bf8f6){var _0x523aa7={},_0x46d638={},_0x29b601={'count':0x0,'rows':[]};var _0x4c0564=db[_0x2c1f('0x28')][_0x2c1f('0x29')];_0x46d638['model']=_[_0x2c1f('0x2a')](_0x4c0564);_0x46d638[_0x2c1f('0x2b')]=_[_0x2c1f('0x2a')](_0x25e584[_0x2c1f('0x2b')]);_0x46d638[_0x2c1f('0x2c')]=_[_0x2c1f('0x2d')](_0x46d638['model'],_0x46d638[_0x2c1f('0x2b')]);_0x523aa7[_0x2c1f('0x2e')]=_['intersection'](_0x46d638['model'],qs[_0x2c1f('0x2f')](_0x25e584[_0x2c1f('0x2b')][_0x2c1f('0x2f')]));_0x523aa7[_0x2c1f('0x2e')]=_0x523aa7['attributes']['length']?_0x523aa7[_0x2c1f('0x2e')]:_0x46d638['model'];if(!_0x25e584['query']['hasOwnProperty'](_0x2c1f('0x30'))){_0x523aa7[_0x2c1f('0x31')]=qs[_0x2c1f('0x31')](_0x25e584[_0x2c1f('0x2b')][_0x2c1f('0x31')]);_0x523aa7[_0x2c1f('0x1b')]=qs[_0x2c1f('0x1b')](_0x25e584['query'][_0x2c1f('0x1b')]);}_0x523aa7['order']=qs[_0x2c1f('0x32')](_0x25e584[_0x2c1f('0x2b')][_0x2c1f('0x32')]);_0x523aa7[_0x2c1f('0x33')]=qs['filters'](_[_0x2c1f('0x34')](_0x25e584[_0x2c1f('0x2b')],_0x46d638[_0x2c1f('0x2c')]));if(_0x25e584['query'][_0x2c1f('0x35')]){_0x523aa7[_0x2c1f('0x33')]=_['merge'](_0x523aa7['where'],{'$or':_[_0x2c1f('0x36')](_0x4c0564,function(_0x3a2131){if(_0x3a2131['type'][_0x2c1f('0x37')]!==_0x2c1f('0x38')){var _0x216259={};_0x216259[_0x3a2131[_0x2c1f('0x39')]]={'$like':'%'+_0x25e584['query']['filter']+'%'};return _0x216259;}})});}_0x523aa7=_[_0x2c1f('0x3a')]({},_0x523aa7,_0x25e584['options']);var _0x40c743={'where':_0x523aa7[_0x2c1f('0x33')]};return db[_0x2c1f('0x28')][_0x2c1f('0x3b')](_0x40c743)[_0x2c1f('0x21')](function(_0x3a7d2b){_0x29b601[_0x2c1f('0x3b')]=_0x3a7d2b;if(_0x25e584['query'][_0x2c1f('0x3c')]){_0x523aa7[_0x2c1f('0x3d')]=[{'all':!![]}];}return db[_0x2c1f('0x28')][_0x2c1f('0x3e')](_0x523aa7);})[_0x2c1f('0x21')](function(_0x30b14f){_0x29b601[_0x2c1f('0x3f')]=_0x30b14f;return _0x29b601;})[_0x2c1f('0x21')](respondWithFilteredResult(_0x5bf8f6,_0x523aa7))[_0x2c1f('0x40')](handleError(_0x5bf8f6,null));};exports[_0x2c1f('0x41')]=function(_0x35ae64,_0x568682){var _0x58cc5b={'raw':!![],'where':{'id':_0x35ae64['params']['id']}},_0x5f44b9={};_0x5f44b9[_0x2c1f('0x42')]=_[_0x2c1f('0x2a')](db[_0x2c1f('0x28')][_0x2c1f('0x29')]);_0x5f44b9['query']=_[_0x2c1f('0x2a')](_0x35ae64[_0x2c1f('0x2b')]);_0x5f44b9[_0x2c1f('0x2c')]=_[_0x2c1f('0x2d')](_0x5f44b9[_0x2c1f('0x42')],_0x5f44b9['query']);_0x58cc5b[_0x2c1f('0x2e')]=_[_0x2c1f('0x2d')](_0x5f44b9[_0x2c1f('0x42')],qs['fields'](_0x35ae64[_0x2c1f('0x2b')][_0x2c1f('0x2f')]));_0x58cc5b['attributes']=_0x58cc5b[_0x2c1f('0x2e')][_0x2c1f('0x43')]?_0x58cc5b['attributes']:_0x5f44b9['model'];if(_0x35ae64[_0x2c1f('0x2b')][_0x2c1f('0x3c')]){_0x58cc5b[_0x2c1f('0x3d')]=[{'all':!![]}];}_0x58cc5b=_[_0x2c1f('0x3a')]({},_0x58cc5b,_0x35ae64[_0x2c1f('0x44')]);return db[_0x2c1f('0x28')][_0x2c1f('0x45')](_0x58cc5b)[_0x2c1f('0x21')](handleEntityNotFound(_0x568682,null))[_0x2c1f('0x21')](respondWithResult(_0x568682,null))[_0x2c1f('0x40')](handleError(_0x568682,null));};exports[_0x2c1f('0x46')]=function(_0x3992a5,_0x12b5cc){return db[_0x2c1f('0x28')][_0x2c1f('0x46')](_0x3992a5[_0x2c1f('0x47')],{})[_0x2c1f('0x21')](respondWithResult(_0x12b5cc,0xc9))[_0x2c1f('0x40')](handleError(_0x12b5cc,null));};exports[_0x2c1f('0x20')]=function(_0x17d043,_0x814f83){if(_0x17d043[_0x2c1f('0x47')]['id']){delete _0x17d043['body']['id'];}return db[_0x2c1f('0x28')][_0x2c1f('0x45')]({'where':{'id':_0x17d043[_0x2c1f('0x48')]['id']}})[_0x2c1f('0x21')](handleEntityNotFound(_0x814f83,null))[_0x2c1f('0x21')](saveUpdates(_0x17d043[_0x2c1f('0x47')],null))['then'](respondWithResult(_0x814f83,null))[_0x2c1f('0x40')](handleError(_0x814f83,null));};exports[_0x2c1f('0x22')]=function(_0x5671bd,_0xb116a1){return db[_0x2c1f('0x28')][_0x2c1f('0x45')]({'where':{'id':_0x5671bd[_0x2c1f('0x48')]['id']}})[_0x2c1f('0x21')](handleEntityNotFound(_0xb116a1,null))[_0x2c1f('0x21')](removeEntity(_0xb116a1,null))[_0x2c1f('0x40')](handleError(_0xb116a1,null));};
\ No newline at end of file
index 8625298..80db565 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1ccd=['util','../../config/logger','api','bluebird','request-promise','./squareMessage.attributes','exports','define','SquareMessage','square_messages','lodash'];(function(_0x1013ff,_0x5218ad){var _0xc00260=function(_0x42e511){while(--_0x42e511){_0x1013ff['push'](_0x1013ff['shift']());}};_0xc00260(++_0x5218ad);}(_0x1ccd,0x6d));var _0xd1cc=function(_0x2ae2ad,_0xac5b0c){_0x2ae2ad=_0x2ae2ad-0x0;var _0x26dbd7=_0x1ccd[_0x2ae2ad];return _0x26dbd7;};'use strict';var _=require(_0xd1cc('0x0'));var util=require(_0xd1cc('0x1'));var logger=require(_0xd1cc('0x2'))(_0xd1cc('0x3'));var moment=require('moment');var BPromise=require(_0xd1cc('0x4'));var rp=require(_0xd1cc('0x5'));var attributes=require(_0xd1cc('0x6'));module[_0xd1cc('0x7')]=function(_0x5dd10a,_0x48cad2){return _0x5dd10a[_0xd1cc('0x8')](_0xd1cc('0x9'),attributes,{'tableName':_0xd1cc('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4740=['SquareMessage','util','../../config/logger','moment','bluebird','request-promise','exports'];(function(_0x48f4c5,_0x56e4c3){var _0x40ab65=function(_0x27426b){while(--_0x27426b){_0x48f4c5['push'](_0x48f4c5['shift']());}};_0x40ab65(++_0x56e4c3);}(_0x4740,0x6a));var _0x0474=function(_0x4b8c60,_0x586c8d){_0x4b8c60=_0x4b8c60-0x0;var _0x1696c5=_0x4740[_0x4b8c60];return _0x1696c5;};'use strict';var _=require('lodash');var util=require(_0x0474('0x0'));var logger=require(_0x0474('0x1'))('api');var moment=require(_0x0474('0x2'));var BPromise=require(_0x0474('0x3'));var rp=require(_0x0474('0x4'));var attributes=require('./squareMessage.attributes');module[_0x0474('0x5')]=function(_0x13e315,_0x449c9b){return _0x13e315['define'](_0x0474('0x6'),attributes,{'tableName':'square_messages','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6ec863e..8b86e28 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x20e2=['result','catch','CreateSquareMessage','SquareMessage','body','options','raw','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','SquareMessage,\x20%s,\x20%s','request\x20sent','debug','SquareMessage,\x20%s,\x20%s,\x20%s','stringify','error','message'];(function(_0x7a112,_0x2eb4a0){var _0x136dc5=function(_0x437650){while(--_0x437650){_0x7a112['push'](_0x7a112['shift']());}};_0x136dc5(++_0x2eb4a0);}(_0x20e2,0xd9));var _0x220e=function(_0x402374,_0x558582){_0x402374=_0x402374-0x0;var _0x5d7f37=_0x20e2[_0x402374];return _0x5d7f37;};'use strict';var _=require(_0x220e('0x0'));var util=require('util');var moment=require(_0x220e('0x1'));var BPromise=require(_0x220e('0x2'));var rs=require(_0x220e('0x3'));var fs=require('fs');var Redis=require(_0x220e('0x4'));var db=require(_0x220e('0x5'))['db'];var utils=require(_0x220e('0x6'));var logger=require(_0x220e('0x7'))(_0x220e('0x8'));var config=require(_0x220e('0x9'));var jayson=require(_0x220e('0xa'));var client=jayson[_0x220e('0xb')][_0x220e('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x38de6f,_0xf205a7,_0x1ce53a){return new BPromise(function(_0x5c7221,_0x239c69){return client[_0x220e('0xd')](_0x38de6f,_0x1ce53a)[_0x220e('0xe')](function(_0x333632){logger[_0x220e('0xf')](_0x220e('0x10'),_0xf205a7,_0x220e('0x11'));logger[_0x220e('0x12')](_0x220e('0x13'),_0xf205a7,'request\x20sent',JSON[_0x220e('0x14')](_0x333632));if(_0x333632[_0x220e('0x15')]){if(_0x333632[_0x220e('0x15')]['code']===0x1f4){logger[_0x220e('0x15')](_0x220e('0x10'),_0xf205a7,_0x333632['error'][_0x220e('0x16')]);return _0x239c69(_0x333632[_0x220e('0x15')]['message']);}logger[_0x220e('0x15')](_0x220e('0x10'),_0xf205a7,_0x333632[_0x220e('0x15')][_0x220e('0x16')]);return _0x5c7221(_0x333632[_0x220e('0x15')][_0x220e('0x16')]);}else{logger[_0x220e('0xf')](_0x220e('0x10'),_0xf205a7,_0x220e('0x11'));_0x5c7221(_0x333632[_0x220e('0x17')][_0x220e('0x16')]);}})[_0x220e('0x18')](function(_0x50c316){logger[_0x220e('0x15')](_0x220e('0x10'),_0xf205a7,_0x50c316);_0x239c69(_0x50c316);});});}exports[_0x220e('0x19')]=function(_0x463b4a){var _0x36d05=this;return new Promise(function(_0x21808,_0x1efbcd){return db[_0x220e('0x1a')]['create'](_0x463b4a[_0x220e('0x1b')],{'raw':_0x463b4a[_0x220e('0x1c')]?_0x463b4a['options'][_0x220e('0x1d')]===undefined?!![]:![]:!![]})[_0x220e('0xe')](function(_0x44a767){logger[_0x220e('0xf')]('CreateSquareMessage',_0x463b4a);logger[_0x220e('0x12')](_0x220e('0x19'),_0x463b4a,JSON[_0x220e('0x14')](_0x44a767));_0x21808(_0x44a767);})[_0x220e('0x18')](function(_0x315355){logger[_0x220e('0x15')]('CreateSquareMessage',_0x315355[_0x220e('0x16')],_0x463b4a);_0x1efbcd(_0x36d05[_0x220e('0x15')](0x1f4,_0x315355[_0x220e('0x16')]));});});};
\ No newline at end of file
+var _0x79d1=['then','info','SquareMessage,\x20%s,\x20%s','request\x20sent','debug','SquareMessage,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','CreateSquareMessage','create','body','options','util','moment','bluebird','randomstring','ioredis','rpc','../../config/environment','jayson/promise','client','request'];(function(_0x2d76a3,_0x1f5764){var _0x16c960=function(_0x57f846){while(--_0x57f846){_0x2d76a3['push'](_0x2d76a3['shift']());}};_0x16c960(++_0x1f5764);}(_0x79d1,0xac));var _0x179d=function(_0xfae23b,_0x2be4ba){_0xfae23b=_0xfae23b-0x0;var _0x200640=_0x79d1[_0xfae23b];return _0x200640;};'use strict';var _=require('lodash');var util=require(_0x179d('0x0'));var moment=require(_0x179d('0x1'));var BPromise=require(_0x179d('0x2'));var rs=require(_0x179d('0x3'));var fs=require('fs');var Redis=require(_0x179d('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x179d('0x5'));var config=require(_0x179d('0x6'));var jayson=require(_0x179d('0x7'));var client=jayson[_0x179d('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0xea6a3,_0x357c1e,_0x3c9825){return new BPromise(function(_0x394e56,_0x3ee566){return client[_0x179d('0x9')](_0xea6a3,_0x3c9825)[_0x179d('0xa')](function(_0xc20495){logger[_0x179d('0xb')](_0x179d('0xc'),_0x357c1e,_0x179d('0xd'));logger[_0x179d('0xe')](_0x179d('0xf'),_0x357c1e,'request\x20sent',JSON[_0x179d('0x10')](_0xc20495));if(_0xc20495['error']){if(_0xc20495[_0x179d('0x11')][_0x179d('0x12')]===0x1f4){logger[_0x179d('0x11')]('SquareMessage,\x20%s,\x20%s',_0x357c1e,_0xc20495[_0x179d('0x11')][_0x179d('0x13')]);return _0x3ee566(_0xc20495[_0x179d('0x11')]['message']);}logger[_0x179d('0x11')](_0x179d('0xc'),_0x357c1e,_0xc20495[_0x179d('0x11')][_0x179d('0x13')]);return _0x394e56(_0xc20495[_0x179d('0x11')][_0x179d('0x13')]);}else{logger[_0x179d('0xb')](_0x179d('0xc'),_0x357c1e,_0x179d('0xd'));_0x394e56(_0xc20495[_0x179d('0x14')]['message']);}})[_0x179d('0x15')](function(_0x9fb567){logger['error'](_0x179d('0xc'),_0x357c1e,_0x9fb567);_0x3ee566(_0x9fb567);});});}exports[_0x179d('0x16')]=function(_0x14a15a){var _0x112980=this;return new Promise(function(_0x2bf99f,_0x20d3a4){return db['SquareMessage'][_0x179d('0x17')](_0x14a15a[_0x179d('0x18')],{'raw':_0x14a15a[_0x179d('0x19')]?_0x14a15a['options']['raw']===undefined?!![]:![]:!![]})[_0x179d('0xa')](function(_0x1065d5){logger[_0x179d('0xb')](_0x179d('0x16'),_0x14a15a);logger['debug'](_0x179d('0x16'),_0x14a15a,JSON['stringify'](_0x1065d5));_0x2bf99f(_0x1065d5);})[_0x179d('0x15')](function(_0x3823aa){logger[_0x179d('0x11')](_0x179d('0x16'),_0x3823aa['message'],_0x14a15a);_0x20d3a4(_0x112980[_0x179d('0x11')](0x1f4,_0x3823aa[_0x179d('0x13')]));});});};
\ No newline at end of file
index b2eaabe..d57d316 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb677=['exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareOdbc.controller','isAuthenticated','index','get','/:id','/:id/test','15s','post','put','update','delete'];(function(_0x4c46d8,_0x49f591){var _0x3c2cf5=function(_0x456cf0){while(--_0x456cf0){_0x4c46d8['push'](_0x4c46d8['shift']());}};_0x3c2cf5(++_0x49f591);}(_0xb677,0x119));var _0x7b67=function(_0xd9ed4c,_0x35a262){_0xd9ed4c=_0xd9ed4c-0x0;var _0x5cf1e3=_0xb677[_0xd9ed4c];return _0x5cf1e3;};'use strict';var multer=require(_0x7b67('0x0'));var util=require('util');var path=require(_0x7b67('0x1'));var timeout=require(_0x7b67('0x2'));var express=require(_0x7b67('0x3'));var router=express[_0x7b67('0x4')]();var auth=require(_0x7b67('0x5'));var interaction=require(_0x7b67('0x6'));var config=require(_0x7b67('0x7'));var controller=require(_0x7b67('0x8'));router['get']('/',auth[_0x7b67('0x9')](),controller[_0x7b67('0xa')]);router[_0x7b67('0xb')](_0x7b67('0xc'),auth['isAuthenticated'](),controller['show']);router['get'](_0x7b67('0xd'),auth['isAuthenticated'](),timeout(_0x7b67('0xe')),controller['test']);router[_0x7b67('0xf')]('/',auth[_0x7b67('0x9')](),controller['create']);router[_0x7b67('0x10')]('/:id',auth[_0x7b67('0x9')](),controller[_0x7b67('0x11')]);router[_0x7b67('0x12')]('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x7b67('0x13')]=router;
\ No newline at end of file
+var _0x3fb7=['isAuthenticated','index','/:id','show','/:id/test','15s','test','post','create','put','update','delete','exports','util','connect-timeout','express','../../components/auth/service','../../config/environment','./squareOdbc.controller','get'];(function(_0x25c40f,_0x171fdd){var _0x4bf9d6=function(_0x5fe175){while(--_0x5fe175){_0x25c40f['push'](_0x25c40f['shift']());}};_0x4bf9d6(++_0x171fdd);}(_0x3fb7,0x189));var _0x73fb=function(_0x22c9f6,_0x44e67e){_0x22c9f6=_0x22c9f6-0x0;var _0x521be4=_0x3fb7[_0x22c9f6];return _0x521be4;};'use strict';var multer=require('multer');var util=require(_0x73fb('0x0'));var path=require('path');var timeout=require(_0x73fb('0x1'));var express=require(_0x73fb('0x2'));var router=express['Router']();var auth=require(_0x73fb('0x3'));var interaction=require('../../components/interaction/service');var config=require(_0x73fb('0x4'));var controller=require(_0x73fb('0x5'));router[_0x73fb('0x6')]('/',auth[_0x73fb('0x7')](),controller[_0x73fb('0x8')]);router[_0x73fb('0x6')](_0x73fb('0x9'),auth[_0x73fb('0x7')](),controller[_0x73fb('0xa')]);router[_0x73fb('0x6')](_0x73fb('0xb'),auth[_0x73fb('0x7')](),timeout(_0x73fb('0xc')),controller[_0x73fb('0xd')]);router[_0x73fb('0xe')]('/',auth[_0x73fb('0x7')](),controller[_0x73fb('0xf')]);router[_0x73fb('0x10')](_0x73fb('0x9'),auth[_0x73fb('0x7')](),controller[_0x73fb('0x11')]);router[_0x73fb('0x12')]('/:id',auth[_0x73fb('0x7')](),controller['destroy']);module[_0x73fb('0x13')]=router;
\ No newline at end of file
index ba75cc6..adbf885 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa47a=['name','sequelize','STRING'];(function(_0x147394,_0x55b063){var _0x3bfcaa=function(_0xa027ef){while(--_0xa027ef){_0x147394['push'](_0x147394['shift']());}};_0x3bfcaa(++_0x55b063);}(_0xa47a,0x1db));var _0xaa47=function(_0x3441e0,_0x316614){_0x3441e0=_0x3441e0-0x0;var _0x25427f=_0xa47a[_0x3441e0];return _0x25427f;};'use strict';var Sequelize=require(_0xaa47('0x0'));module['exports']={'name':{'type':Sequelize[_0xaa47('0x1')],'unique':_0xaa47('0x2'),'allowNull':![]},'dsn':{'type':Sequelize[_0xaa47('0x1')]},'description':{'type':Sequelize[_0xaa47('0x1')]}};
\ No newline at end of file
+var _0xdd98=['name','STRING','sequelize','exports'];(function(_0x4baae2,_0x487ab6){var _0x1a2285=function(_0x1cea47){while(--_0x1cea47){_0x4baae2['push'](_0x4baae2['shift']());}};_0x1a2285(++_0x487ab6);}(_0xdd98,0x1e6));var _0x8dd9=function(_0x339969,_0x51a7c6){_0x339969=_0x339969-0x0;var _0xd4165d=_0xdd98[_0x339969];return _0xd4165d;};'use strict';var Sequelize=require(_0x8dd9('0x0'));module[_0x8dd9('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x8dd9('0x2'),'allowNull':![]},'dsn':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x8dd9('0x3')]}};
\ No newline at end of file
index 32d6330..9bbc519 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeb93=['query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','limit','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','count','rows','catch','show','params','rawAttributes','include','find','create','body','user','get','UserProfileSection','userProfileId','name','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','test','dsn','openSync','html-pdf','rimraf','zip-dir','request-promise','moment','mustache','util','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','status','end','json','offset','set','apply','save','update','then','destroy','ODBC','UserProfileResource','sendStatus','error','stack','send','SquareOdbc','model','keys'];(function(_0x5759d3,_0x56f825){var _0x32cb6f=function(_0x556ad0){while(--_0x556ad0){_0x5759d3['push'](_0x5759d3['shift']());}};_0x32cb6f(++_0x56f825);}(_0xeb93,0xc4));var _0x3eb9=function(_0x2179f1,_0x21c653){_0x2179f1=_0x2179f1-0x0;var _0x176ec9=_0xeb93[_0x2179f1];return _0x176ec9;};'use strict';var pdf=require(_0x3eb9('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x3eb9('0x1'));var zipdir=require(_0x3eb9('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3eb9('0x3'));var moment=require(_0x3eb9('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x3eb9('0x5'));var util=require(_0x3eb9('0x6'));var path=require('path');var sox=require('sox');var csv=require(_0x3eb9('0x7'));var ejs=require(_0x3eb9('0x8'));var fs=require('fs');var _=require(_0x3eb9('0x9'));var squel=require(_0x3eb9('0xa'));var crypto=require(_0x3eb9('0xb'));var jsforce=require(_0x3eb9('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x3eb9('0x7'));var querystring=require(_0x3eb9('0xd'));var Papa=require(_0x3eb9('0xe'));var authService=require('../../components/auth/service');var hardwareService=require(_0x3eb9('0xf'));var Redis=require(_0x3eb9('0x10'));var qs=require(_0x3eb9('0x11'));var logger=require(_0x3eb9('0x12'))(_0x3eb9('0x13'));var utils=require(_0x3eb9('0x14'));var config=require('../../config/environment');var db=require(_0x3eb9('0x15'))['db'];function respondWithStatusCode(_0x432b0b,_0x37fd2b){_0x37fd2b=_0x37fd2b||0xcc;return function(_0x404f4f){if(_0x404f4f){return _0x432b0b['sendStatus'](_0x37fd2b);}return _0x432b0b[_0x3eb9('0x16')](_0x37fd2b)[_0x3eb9('0x17')]();};}function respondWithResult(_0x20b5d6,_0x1e61a7){_0x1e61a7=_0x1e61a7||0xc8;return function(_0x2c7c5c){if(_0x2c7c5c){return _0x20b5d6[_0x3eb9('0x16')](_0x1e61a7)[_0x3eb9('0x18')](_0x2c7c5c);}};}function respondWithFilteredResult(_0x4fa698,_0x548ff7){return function(_0x25381a){if(_0x25381a){var _0x5c196e=_0x25381a['count'],_0xab48f=_0x548ff7[_0x3eb9('0x19')],_0x44c934=_0x548ff7[_0x3eb9('0x19')]+_0x548ff7['limit'],_0x28648a;if(_0x44c934>=_0x5c196e){_0x44c934=_0x5c196e;_0x28648a=0xc8;}else{_0x28648a=0xce;}_0x4fa698[_0x3eb9('0x16')](_0x28648a);return _0x4fa698[_0x3eb9('0x1a')]('Content-Range',_0xab48f+'-'+_0x44c934+'/'+_0x5c196e)['json'](_0x25381a);}return null;};}function patchUpdates(_0x306ca3){return function(_0x21860e){try{jsonpatch[_0x3eb9('0x1b')](_0x21860e,_0x306ca3,!![]);}catch(_0x22513f){return BPromise['reject'](_0x22513f);}return _0x21860e[_0x3eb9('0x1c')]();};}function saveUpdates(_0x371744,_0x33cf50){return function(_0x48c3a9){if(_0x48c3a9){return _0x48c3a9[_0x3eb9('0x1d')](_0x371744)[_0x3eb9('0x1e')](function(_0x44b497){return _0x44b497;});}return null;};}function removeEntity(_0x32c8a4,_0x34b504){return function(_0x16a5b2){if(_0x16a5b2){return _0x16a5b2[_0x3eb9('0x1f')]()[_0x3eb9('0x1e')](function(){var _0xd4d0e1=_0x16a5b2['get']({'plain':!![]});var _0x24f2c5=_0x3eb9('0x20');return db[_0x3eb9('0x21')][_0x3eb9('0x1f')]({'where':{'type':_0x24f2c5,'resourceId':_0xd4d0e1['id']}})[_0x3eb9('0x1e')](function(){return _0x16a5b2;});})['then'](function(){_0x32c8a4[_0x3eb9('0x16')](0xcc)[_0x3eb9('0x17')]();});}};}function handleEntityNotFound(_0xb6a8df,_0x1cb2c6){return function(_0x5074a9){if(!_0x5074a9){_0xb6a8df[_0x3eb9('0x22')](0x194);}return _0x5074a9;};}function handleError(_0x133815,_0x51aab7){_0x51aab7=_0x51aab7||0x1f4;return function(_0x170a42){logger[_0x3eb9('0x23')](_0x170a42[_0x3eb9('0x24')]);if(_0x170a42['name']){delete _0x170a42['name'];}_0x133815['status'](_0x51aab7)[_0x3eb9('0x25')](_0x170a42);};}exports['index']=function(_0x52e149,_0x5c310b){var _0x2ece63={},_0x21b97a={},_0x59ff86={'count':0x0,'rows':[]};var _0x271c8d=db[_0x3eb9('0x26')]['rawAttributes'];_0x21b97a[_0x3eb9('0x27')]=_[_0x3eb9('0x28')](_0x271c8d);_0x21b97a[_0x3eb9('0x29')]=_[_0x3eb9('0x28')](_0x52e149['query']);_0x21b97a[_0x3eb9('0x2a')]=_['intersection'](_0x21b97a[_0x3eb9('0x27')],_0x21b97a[_0x3eb9('0x29')]);_0x2ece63[_0x3eb9('0x2b')]=_[_0x3eb9('0x2c')](_0x21b97a[_0x3eb9('0x27')],qs[_0x3eb9('0x2d')](_0x52e149['query']['fields']));_0x2ece63['attributes']=_0x2ece63[_0x3eb9('0x2b')][_0x3eb9('0x2e')]?_0x2ece63[_0x3eb9('0x2b')]:_0x21b97a[_0x3eb9('0x27')];if(!_0x52e149['query'][_0x3eb9('0x2f')](_0x3eb9('0x30'))){_0x2ece63[_0x3eb9('0x31')]=qs['limit'](_0x52e149[_0x3eb9('0x29')]['limit']);_0x2ece63['offset']=qs[_0x3eb9('0x19')](_0x52e149[_0x3eb9('0x29')][_0x3eb9('0x19')]);}_0x2ece63['order']=qs['sort'](_0x52e149[_0x3eb9('0x29')]['sort']);_0x2ece63[_0x3eb9('0x32')]=qs['filters'](_[_0x3eb9('0x33')](_0x52e149['query'],_0x21b97a['filters']));if(_0x52e149[_0x3eb9('0x29')][_0x3eb9('0x34')]){_0x2ece63['where']=_[_0x3eb9('0x35')](_0x2ece63[_0x3eb9('0x32')],{'$or':_[_0x3eb9('0x36')](_0x271c8d,function(_0x3af993){if(_0x3af993[_0x3eb9('0x37')][_0x3eb9('0x38')]!==_0x3eb9('0x39')){var _0x4498a8={};_0x4498a8[_0x3af993[_0x3eb9('0x3a')]]={'$like':'%'+_0x52e149['query'][_0x3eb9('0x34')]+'%'};return _0x4498a8;}})});}_0x2ece63=_[_0x3eb9('0x35')]({},_0x2ece63,_0x52e149[_0x3eb9('0x3b')]);var _0x30f95f={'where':_0x2ece63[_0x3eb9('0x32')]};return db[_0x3eb9('0x26')][_0x3eb9('0x3c')](_0x30f95f)[_0x3eb9('0x1e')](function(_0x216db4){_0x59ff86[_0x3eb9('0x3c')]=_0x216db4;if(_0x52e149['query']['includeAll']){_0x2ece63['include']=[{'all':!![]}];}return db[_0x3eb9('0x26')]['findAll'](_0x2ece63);})[_0x3eb9('0x1e')](function(_0x1a3cfd){_0x59ff86[_0x3eb9('0x3d')]=_0x1a3cfd;return _0x59ff86;})[_0x3eb9('0x1e')](respondWithFilteredResult(_0x5c310b,_0x2ece63))[_0x3eb9('0x3e')](handleError(_0x5c310b,null));};exports[_0x3eb9('0x3f')]=function(_0x59893e,_0x2426c6){var _0xc274cd={'raw':!![],'where':{'id':_0x59893e[_0x3eb9('0x40')]['id']}},_0x5558d5={};_0x5558d5[_0x3eb9('0x27')]=_[_0x3eb9('0x28')](db[_0x3eb9('0x26')][_0x3eb9('0x41')]);_0x5558d5[_0x3eb9('0x29')]=_[_0x3eb9('0x28')](_0x59893e[_0x3eb9('0x29')]);_0x5558d5[_0x3eb9('0x2a')]=_['intersection'](_0x5558d5[_0x3eb9('0x27')],_0x5558d5['query']);_0xc274cd[_0x3eb9('0x2b')]=_['intersection'](_0x5558d5[_0x3eb9('0x27')],qs['fields'](_0x59893e[_0x3eb9('0x29')][_0x3eb9('0x2d')]));_0xc274cd['attributes']=_0xc274cd[_0x3eb9('0x2b')][_0x3eb9('0x2e')]?_0xc274cd[_0x3eb9('0x2b')]:_0x5558d5[_0x3eb9('0x27')];if(_0x59893e[_0x3eb9('0x29')]['includeAll']){_0xc274cd[_0x3eb9('0x42')]=[{'all':!![]}];}_0xc274cd=_['merge']({},_0xc274cd,_0x59893e[_0x3eb9('0x3b')]);return db['SquareOdbc'][_0x3eb9('0x43')](_0xc274cd)[_0x3eb9('0x1e')](handleEntityNotFound(_0x2426c6,null))[_0x3eb9('0x1e')](respondWithResult(_0x2426c6,null))[_0x3eb9('0x3e')](handleError(_0x2426c6,null));};exports['create']=function(_0x4e1ec4,_0x2d0b17){return db[_0x3eb9('0x26')][_0x3eb9('0x44')](_0x4e1ec4[_0x3eb9('0x45')],{})[_0x3eb9('0x1e')](function(_0x2a97f8){var _0x46cd2b=_0x4e1ec4[_0x3eb9('0x46')][_0x3eb9('0x47')]({'plain':!![]});if(!_0x46cd2b)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x46cd2b['role']===_0x3eb9('0x46')){var _0x4b04e0=_0x2a97f8[_0x3eb9('0x47')]({'plain':!![]});var _0x5cdeba=_0x3eb9('0x20');return db[_0x3eb9('0x48')][_0x3eb9('0x43')]({'where':{'name':_0x5cdeba,'userProfileId':_0x46cd2b[_0x3eb9('0x49')]},'raw':!![]})['then'](function(_0x299146){if(_0x299146&&_0x299146['autoAssociation']===0x0){return db[_0x3eb9('0x21')][_0x3eb9('0x44')]({'name':_0x4b04e0[_0x3eb9('0x4a')],'resourceId':_0x4b04e0['id'],'type':_0x299146[_0x3eb9('0x4a')],'sectionId':_0x299146['id']},{})[_0x3eb9('0x1e')](function(){return _0x2a97f8;});}else{return _0x2a97f8;}})[_0x3eb9('0x3e')](function(_0x26344a){logger[_0x3eb9('0x23')](_0x3eb9('0x4b'),_0x26344a);throw _0x26344a;});}return _0x2a97f8;})[_0x3eb9('0x1e')](respondWithResult(_0x2d0b17,0xc9))['catch'](handleError(_0x2d0b17,null));};exports[_0x3eb9('0x1d')]=function(_0x64f895,_0x38cfeb){if(_0x64f895['body']['id']){delete _0x64f895['body']['id'];}return db[_0x3eb9('0x26')][_0x3eb9('0x43')]({'where':{'id':_0x64f895[_0x3eb9('0x40')]['id']}})[_0x3eb9('0x1e')](handleEntityNotFound(_0x38cfeb,null))[_0x3eb9('0x1e')](saveUpdates(_0x64f895['body'],null))[_0x3eb9('0x1e')](respondWithResult(_0x38cfeb,null))['catch'](handleError(_0x38cfeb,null));};exports[_0x3eb9('0x1f')]=function(_0x52ec71,_0x11ee06){return db[_0x3eb9('0x26')][_0x3eb9('0x43')]({'where':{'id':_0x52ec71[_0x3eb9('0x40')]['id']}})[_0x3eb9('0x1e')](handleEntityNotFound(_0x11ee06,null))[_0x3eb9('0x1e')](removeEntity(_0x11ee06,null))[_0x3eb9('0x3e')](handleError(_0x11ee06,null));};exports[_0x3eb9('0x4c')]=function(_0x5b4b95,_0x3215ee,_0x12122c){var _0x5279b8;return db[_0x3eb9('0x26')][_0x3eb9('0x43')]({'where':{'id':_0x5b4b95['params']['id']},'attributes':['id',_0x3eb9('0x4d')]})[_0x3eb9('0x1e')](handleEntityNotFound(_0x3215ee,null))[_0x3eb9('0x1e')](function(_0x240560){if(_0x240560){var _0x445139=require('odbc')();_0x445139[_0x3eb9('0x4e')](_0x240560[_0x3eb9('0x4d')]);_0x445139['closeSync']();return _0x240560;}})[_0x3eb9('0x1e')](respondWithResult(_0x3215ee,null))[_0x3eb9('0x3e')](handleError(_0x3215ee,null));};
\ No newline at end of file
+var _0x6aee=['zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','papaparse','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','end','status','count','offset','limit','set','Content-Range','json','apply','reject','destroy','then','get','UserProfileResource','sendStatus','error','stack','name','send','index','SquareOdbc','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','sort','filters','pick','where','merge','map','type','key','VIRTUAL','filter','includeAll','include','findAll','catch','show','params','create','body','user','role','ODBC','UserProfileSection','find','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','test','dsn','odbc','closeSync','html-pdf','eml-format'];(function(_0x2ec461,_0x5f588a){var _0x28603d=function(_0x21114b){while(--_0x21114b){_0x2ec461['push'](_0x2ec461['shift']());}};_0x28603d(++_0x5f588a);}(_0x6aee,0x14e));var _0xe6ae=function(_0x20cdea,_0x5a9d3e){_0x20cdea=_0x20cdea-0x0;var _0x520302=_0x6aee[_0x20cdea];return _0x520302;};'use strict';var pdf=require(_0xe6ae('0x0'));var emlformat=require(_0xe6ae('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xe6ae('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xe6ae('0x3'));var moment=require(_0xe6ae('0x4'));var BPromise=require(_0xe6ae('0x5'));var Mustache=require(_0xe6ae('0x6'));var util=require(_0xe6ae('0x7'));var path=require(_0xe6ae('0x8'));var sox=require(_0xe6ae('0x9'));var csv=require(_0xe6ae('0xa'));var ejs=require(_0xe6ae('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0xe6ae('0xc'));var crypto=require(_0xe6ae('0xd'));var jsforce=require(_0xe6ae('0xe'));var deskjs=require(_0xe6ae('0xf'));var toCsv=require(_0xe6ae('0xa'));var querystring=require('querystring');var Papa=require(_0xe6ae('0x10'));var authService=require('../../components/auth/service');var hardwareService=require(_0xe6ae('0x11'));var Redis=require('ioredis');var qs=require(_0xe6ae('0x12'));var logger=require(_0xe6ae('0x13'))(_0xe6ae('0x14'));var utils=require('../../config/utils');var config=require(_0xe6ae('0x15'));var db=require(_0xe6ae('0x16'))['db'];function respondWithStatusCode(_0x3bbe94,_0xdd59a9){_0xdd59a9=_0xdd59a9||0xcc;return function(_0x1c098a){if(_0x1c098a){return _0x3bbe94['sendStatus'](_0xdd59a9);}return _0x3bbe94['status'](_0xdd59a9)[_0xe6ae('0x17')]();};}function respondWithResult(_0x38e737,_0x3748a2){_0x3748a2=_0x3748a2||0xc8;return function(_0x2a5d35){if(_0x2a5d35){return _0x38e737[_0xe6ae('0x18')](_0x3748a2)['json'](_0x2a5d35);}};}function respondWithFilteredResult(_0x40ff79,_0x27fbe4){return function(_0x577aeb){if(_0x577aeb){var _0x543560=_0x577aeb[_0xe6ae('0x19')],_0x3ca04a=_0x27fbe4[_0xe6ae('0x1a')],_0x3985ce=_0x27fbe4['offset']+_0x27fbe4[_0xe6ae('0x1b')],_0x54ea9b;if(_0x3985ce>=_0x543560){_0x3985ce=_0x543560;_0x54ea9b=0xc8;}else{_0x54ea9b=0xce;}_0x40ff79['status'](_0x54ea9b);return _0x40ff79[_0xe6ae('0x1c')](_0xe6ae('0x1d'),_0x3ca04a+'-'+_0x3985ce+'/'+_0x543560)[_0xe6ae('0x1e')](_0x577aeb);}return null;};}function patchUpdates(_0x3b6a4b){return function(_0x1b7d46){try{jsonpatch[_0xe6ae('0x1f')](_0x1b7d46,_0x3b6a4b,!![]);}catch(_0x33b425){return BPromise[_0xe6ae('0x20')](_0x33b425);}return _0x1b7d46['save']();};}function saveUpdates(_0x1302c6,_0x37d5b1){return function(_0x4f20a4){if(_0x4f20a4){return _0x4f20a4['update'](_0x1302c6)['then'](function(_0x2a4aa7){return _0x2a4aa7;});}return null;};}function removeEntity(_0x50196b,_0x487ae4){return function(_0x3529af){if(_0x3529af){return _0x3529af[_0xe6ae('0x21')]()[_0xe6ae('0x22')](function(){var _0x681b08=_0x3529af[_0xe6ae('0x23')]({'plain':!![]});var _0x2b67c5='ODBC';return db[_0xe6ae('0x24')][_0xe6ae('0x21')]({'where':{'type':_0x2b67c5,'resourceId':_0x681b08['id']}})[_0xe6ae('0x22')](function(){return _0x3529af;});})[_0xe6ae('0x22')](function(){_0x50196b[_0xe6ae('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x31ef38,_0x49c4eb){return function(_0xe29d8f){if(!_0xe29d8f){_0x31ef38[_0xe6ae('0x25')](0x194);}return _0xe29d8f;};}function handleError(_0x41043e,_0x2be938){_0x2be938=_0x2be938||0x1f4;return function(_0x194a52){logger[_0xe6ae('0x26')](_0x194a52[_0xe6ae('0x27')]);if(_0x194a52['name']){delete _0x194a52[_0xe6ae('0x28')];}_0x41043e[_0xe6ae('0x18')](_0x2be938)[_0xe6ae('0x29')](_0x194a52);};}exports[_0xe6ae('0x2a')]=function(_0x43ab1a,_0x23806c){var _0x51f79b={},_0x3b6acc={},_0x2d6995={'count':0x0,'rows':[]};var _0x1bc7ba=db[_0xe6ae('0x2b')][_0xe6ae('0x2c')];_0x3b6acc[_0xe6ae('0x2d')]=_[_0xe6ae('0x2e')](_0x1bc7ba);_0x3b6acc[_0xe6ae('0x2f')]=_['keys'](_0x43ab1a[_0xe6ae('0x2f')]);_0x3b6acc['filters']=_[_0xe6ae('0x30')](_0x3b6acc[_0xe6ae('0x2d')],_0x3b6acc[_0xe6ae('0x2f')]);_0x51f79b[_0xe6ae('0x31')]=_[_0xe6ae('0x30')](_0x3b6acc[_0xe6ae('0x2d')],qs[_0xe6ae('0x32')](_0x43ab1a[_0xe6ae('0x2f')][_0xe6ae('0x32')]));_0x51f79b[_0xe6ae('0x31')]=_0x51f79b['attributes'][_0xe6ae('0x33')]?_0x51f79b[_0xe6ae('0x31')]:_0x3b6acc[_0xe6ae('0x2d')];if(!_0x43ab1a[_0xe6ae('0x2f')][_0xe6ae('0x34')]('nolimit')){_0x51f79b[_0xe6ae('0x1b')]=qs['limit'](_0x43ab1a[_0xe6ae('0x2f')][_0xe6ae('0x1b')]);_0x51f79b['offset']=qs[_0xe6ae('0x1a')](_0x43ab1a[_0xe6ae('0x2f')][_0xe6ae('0x1a')]);}_0x51f79b[_0xe6ae('0x35')]=qs[_0xe6ae('0x36')](_0x43ab1a[_0xe6ae('0x2f')][_0xe6ae('0x36')]);_0x51f79b['where']=qs[_0xe6ae('0x37')](_[_0xe6ae('0x38')](_0x43ab1a[_0xe6ae('0x2f')],_0x3b6acc[_0xe6ae('0x37')]));if(_0x43ab1a[_0xe6ae('0x2f')]['filter']){_0x51f79b[_0xe6ae('0x39')]=_[_0xe6ae('0x3a')](_0x51f79b['where'],{'$or':_[_0xe6ae('0x3b')](_0x1bc7ba,function(_0x355386){if(_0x355386[_0xe6ae('0x3c')][_0xe6ae('0x3d')]!==_0xe6ae('0x3e')){var _0x498cc5={};_0x498cc5[_0x355386['field']]={'$like':'%'+_0x43ab1a[_0xe6ae('0x2f')][_0xe6ae('0x3f')]+'%'};return _0x498cc5;}})});}_0x51f79b=_[_0xe6ae('0x3a')]({},_0x51f79b,_0x43ab1a['options']);var _0x3e9897={'where':_0x51f79b[_0xe6ae('0x39')]};return db['SquareOdbc'][_0xe6ae('0x19')](_0x3e9897)['then'](function(_0x2b013c){_0x2d6995[_0xe6ae('0x19')]=_0x2b013c;if(_0x43ab1a[_0xe6ae('0x2f')][_0xe6ae('0x40')]){_0x51f79b[_0xe6ae('0x41')]=[{'all':!![]}];}return db[_0xe6ae('0x2b')][_0xe6ae('0x42')](_0x51f79b);})['then'](function(_0x1169b5){_0x2d6995['rows']=_0x1169b5;return _0x2d6995;})[_0xe6ae('0x22')](respondWithFilteredResult(_0x23806c,_0x51f79b))[_0xe6ae('0x43')](handleError(_0x23806c,null));};exports[_0xe6ae('0x44')]=function(_0x3ed158,_0x2281a2){var _0x5c5928={'raw':!![],'where':{'id':_0x3ed158[_0xe6ae('0x45')]['id']}},_0x8c039a={};_0x8c039a[_0xe6ae('0x2d')]=_[_0xe6ae('0x2e')](db[_0xe6ae('0x2b')][_0xe6ae('0x2c')]);_0x8c039a[_0xe6ae('0x2f')]=_['keys'](_0x3ed158['query']);_0x8c039a[_0xe6ae('0x37')]=_[_0xe6ae('0x30')](_0x8c039a[_0xe6ae('0x2d')],_0x8c039a['query']);_0x5c5928[_0xe6ae('0x31')]=_[_0xe6ae('0x30')](_0x8c039a[_0xe6ae('0x2d')],qs[_0xe6ae('0x32')](_0x3ed158['query'][_0xe6ae('0x32')]));_0x5c5928[_0xe6ae('0x31')]=_0x5c5928['attributes']['length']?_0x5c5928[_0xe6ae('0x31')]:_0x8c039a['model'];if(_0x3ed158[_0xe6ae('0x2f')][_0xe6ae('0x40')]){_0x5c5928[_0xe6ae('0x41')]=[{'all':!![]}];}_0x5c5928=_['merge']({},_0x5c5928,_0x3ed158['options']);return db[_0xe6ae('0x2b')]['find'](_0x5c5928)[_0xe6ae('0x22')](handleEntityNotFound(_0x2281a2,null))[_0xe6ae('0x22')](respondWithResult(_0x2281a2,null))[_0xe6ae('0x43')](handleError(_0x2281a2,null));};exports[_0xe6ae('0x46')]=function(_0x5c9baf,_0x24e01b){return db[_0xe6ae('0x2b')][_0xe6ae('0x46')](_0x5c9baf[_0xe6ae('0x47')],{})[_0xe6ae('0x22')](function(_0x2faae7){var _0x34fa63=_0x5c9baf[_0xe6ae('0x48')]['get']({'plain':!![]});if(!_0x34fa63)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x34fa63[_0xe6ae('0x49')]===_0xe6ae('0x48')){var _0x4d67ce=_0x2faae7[_0xe6ae('0x23')]({'plain':!![]});var _0x165b1d=_0xe6ae('0x4a');return db[_0xe6ae('0x4b')][_0xe6ae('0x4c')]({'where':{'name':_0x165b1d,'userProfileId':_0x34fa63[_0xe6ae('0x4d')]},'raw':!![]})[_0xe6ae('0x22')](function(_0x5c0d2e){if(_0x5c0d2e&&_0x5c0d2e[_0xe6ae('0x4e')]===0x0){return db[_0xe6ae('0x24')][_0xe6ae('0x46')]({'name':_0x4d67ce[_0xe6ae('0x28')],'resourceId':_0x4d67ce['id'],'type':_0x5c0d2e['name'],'sectionId':_0x5c0d2e['id']},{})[_0xe6ae('0x22')](function(){return _0x2faae7;});}else{return _0x2faae7;}})['catch'](function(_0x189545){logger[_0xe6ae('0x26')](_0xe6ae('0x4f'),_0x189545);throw _0x189545;});}return _0x2faae7;})[_0xe6ae('0x22')](respondWithResult(_0x24e01b,0xc9))[_0xe6ae('0x43')](handleError(_0x24e01b,null));};exports['update']=function(_0x3dc243,_0x5cefa6){if(_0x3dc243['body']['id']){delete _0x3dc243[_0xe6ae('0x47')]['id'];}return db[_0xe6ae('0x2b')]['find']({'where':{'id':_0x3dc243[_0xe6ae('0x45')]['id']}})['then'](handleEntityNotFound(_0x5cefa6,null))[_0xe6ae('0x22')](saveUpdates(_0x3dc243[_0xe6ae('0x47')],null))[_0xe6ae('0x22')](respondWithResult(_0x5cefa6,null))['catch'](handleError(_0x5cefa6,null));};exports[_0xe6ae('0x21')]=function(_0x2ad1c5,_0x3240b9){return db[_0xe6ae('0x2b')][_0xe6ae('0x4c')]({'where':{'id':_0x2ad1c5[_0xe6ae('0x45')]['id']}})[_0xe6ae('0x22')](handleEntityNotFound(_0x3240b9,null))[_0xe6ae('0x22')](removeEntity(_0x3240b9,null))['catch'](handleError(_0x3240b9,null));};exports[_0xe6ae('0x50')]=function(_0x4f74b9,_0x322bef,_0xf40cc3){var _0x5174fb;return db[_0xe6ae('0x2b')][_0xe6ae('0x4c')]({'where':{'id':_0x4f74b9[_0xe6ae('0x45')]['id']},'attributes':['id',_0xe6ae('0x51')]})[_0xe6ae('0x22')](handleEntityNotFound(_0x322bef,null))[_0xe6ae('0x22')](function(_0x4559f0){if(_0x4559f0){var _0x31c132=require(_0xe6ae('0x52'))();_0x31c132['openSync'](_0x4559f0[_0xe6ae('0x51')]);_0x31c132[_0xe6ae('0x53')]();return _0x4559f0;}})[_0xe6ae('0x22')](respondWithResult(_0x322bef,null))['catch'](handleError(_0x322bef,null));};
\ No newline at end of file
index e80b31f..34ce7a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb91=['square_odbc','../../config/logger','api','moment','bluebird','./squareOdbc.attributes','exports','define'];(function(_0x4552f5,_0x413fa0){var _0x4a7d47=function(_0x4ab549){while(--_0x4ab549){_0x4552f5['push'](_0x4552f5['shift']());}};_0x4a7d47(++_0x413fa0);}(_0xcb91,0x1a9));var _0x1cb9=function(_0x15c421,_0x6366f7){_0x15c421=_0x15c421-0x0;var _0x5e5ed5=_0xcb91[_0x15c421];return _0x5e5ed5;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x1cb9('0x0'))(_0x1cb9('0x1'));var moment=require(_0x1cb9('0x2'));var BPromise=require(_0x1cb9('0x3'));var rp=require('request-promise');var attributes=require(_0x1cb9('0x4'));module[_0x1cb9('0x5')]=function(_0x545a34,_0x13d5fd){return _0x545a34[_0x1cb9('0x6')]('SquareOdbc',attributes,{'tableName':_0x1cb9('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x99e9=['util','../../config/logger','api','moment','request-promise','./squareOdbc.attributes','exports','SquareOdbc','square_odbc'];(function(_0x194c5f,_0xae761b){var _0x5098e0=function(_0x11582b){while(--_0x11582b){_0x194c5f['push'](_0x194c5f['shift']());}};_0x5098e0(++_0xae761b);}(_0x99e9,0xb4));var _0x999e=function(_0x43444b,_0x8cf95b){_0x43444b=_0x43444b-0x0;var _0x392fe5=_0x99e9[_0x43444b];return _0x392fe5;};'use strict';var _=require('lodash');var util=require(_0x999e('0x0'));var logger=require(_0x999e('0x1'))(_0x999e('0x2'));var moment=require(_0x999e('0x3'));var BPromise=require('bluebird');var rp=require(_0x999e('0x4'));var attributes=require(_0x999e('0x5'));module[_0x999e('0x6')]=function(_0x4e2112,_0x296411){return _0x4e2112['define'](_0x999e('0x7'),attributes,{'tableName':_0x999e('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6f7b68e..8728347 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd6c9=['raw','map','include','model','attributes','debug','util','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','request','then','info','SquareOdbc,\x20%s,\x20%s','SquareOdbc,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','catch','ShowSquareOdbc','SquareOdbc','find','options'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xd6c9,0x1f3));var _0x9d6c=function(_0x18a529,_0x2bea53){_0x18a529=_0x18a529-0x0;var _0x216fb8=_0xd6c9[_0x18a529];return _0x216fb8;};'use strict';var _=require('lodash');var util=require(_0x9d6c('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x9d6c('0x1'));var db=require(_0x9d6c('0x2'))['db'];var utils=require(_0x9d6c('0x3'));var logger=require(_0x9d6c('0x4'))('rpc');var config=require('../../config/environment');var jayson=require(_0x9d6c('0x5'));var client=jayson[_0x9d6c('0x6')][_0x9d6c('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x78ff51,_0xd0616d,_0x18cd28){return new BPromise(function(_0x11347a,_0x5673b8){return client[_0x9d6c('0x8')](_0x78ff51,_0x18cd28)[_0x9d6c('0x9')](function(_0x343607){logger[_0x9d6c('0xa')](_0x9d6c('0xb'),_0xd0616d,'request\x20sent');logger['debug'](_0x9d6c('0xc'),_0xd0616d,_0x9d6c('0xd'),JSON[_0x9d6c('0xe')](_0x343607));if(_0x343607['error']){if(_0x343607[_0x9d6c('0xf')][_0x9d6c('0x10')]===0x1f4){logger[_0x9d6c('0xf')](_0x9d6c('0xb'),_0xd0616d,_0x343607['error']['message']);return _0x5673b8(_0x343607[_0x9d6c('0xf')][_0x9d6c('0x11')]);}logger[_0x9d6c('0xf')](_0x9d6c('0xb'),_0xd0616d,_0x343607[_0x9d6c('0xf')][_0x9d6c('0x11')]);return _0x11347a(_0x343607[_0x9d6c('0xf')][_0x9d6c('0x11')]);}else{logger['info'](_0x9d6c('0xb'),_0xd0616d,_0x9d6c('0xd'));_0x11347a(_0x343607['result']['message']);}})[_0x9d6c('0x12')](function(_0x9bafcb){logger[_0x9d6c('0xf')]('SquareOdbc,\x20%s,\x20%s',_0xd0616d,_0x9bafcb);_0x5673b8(_0x9bafcb);});});}exports[_0x9d6c('0x13')]=function(_0x405ca4){var _0x35d8f0=this;return new Promise(function(_0x1a058e,_0x15e9ad){return db[_0x9d6c('0x14')][_0x9d6c('0x15')]({'raw':_0x405ca4[_0x9d6c('0x16')]?_0x405ca4['options'][_0x9d6c('0x17')]===undefined?!![]:![]:!![],'where':_0x405ca4[_0x9d6c('0x16')]?_0x405ca4[_0x9d6c('0x16')]['where']||null:null,'attributes':_0x405ca4[_0x9d6c('0x16')]?_0x405ca4['options']['attributes']||null:null,'include':_0x405ca4[_0x9d6c('0x16')]?_0x405ca4[_0x9d6c('0x16')]['include']?_[_0x9d6c('0x18')](_0x405ca4[_0x9d6c('0x16')][_0x9d6c('0x19')],function(_0x3cb940){return{'model':db[_0x3cb940[_0x9d6c('0x1a')]],'as':_0x3cb940['as'],'attributes':_0x3cb940[_0x9d6c('0x1b')],'include':_0x3cb940[_0x9d6c('0x19')]?_[_0x9d6c('0x18')](_0x3cb940[_0x9d6c('0x19')],function(_0x5832e4){return{'model':db[_0x5832e4['model']],'as':_0x5832e4['as'],'attributes':_0x5832e4['attributes'],'include':_0x5832e4[_0x9d6c('0x19')]?_[_0x9d6c('0x18')](_0x5832e4[_0x9d6c('0x19')],function(_0xabb29c){return{'model':db[_0xabb29c[_0x9d6c('0x1a')]],'as':_0xabb29c['as'],'attributes':_0xabb29c['attributes']};}):[]};}):[]};}):[]:[]})[_0x9d6c('0x9')](function(_0x46fe0e){logger['info'](_0x9d6c('0x13'),_0x405ca4);logger[_0x9d6c('0x1c')](_0x9d6c('0x13'),_0x405ca4,JSON[_0x9d6c('0xe')](_0x46fe0e));_0x1a058e(_0x46fe0e);})[_0x9d6c('0x12')](function(_0x41eb22){logger[_0x9d6c('0xf')]('ShowSquareOdbc',_0x41eb22[_0x9d6c('0x11')],_0x405ca4);_0x15e9ad(_0x35d8f0[_0x9d6c('0xf')](0x1f4,_0x41eb22[_0x9d6c('0x11')]));});});};
\ No newline at end of file
+var _0x5191=['result','catch','ShowSquareOdbc','SquareOdbc','find','raw','options','where','attributes','include','model','map','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request','then','info','SquareOdbc,\x20%s,\x20%s','request\x20sent','debug','SquareOdbc,\x20%s,\x20%s,\x20%s','stringify','error','message'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x5191,0x12c));var _0x1519=function(_0x59107e,_0x44032c){_0x59107e=_0x59107e-0x0;var _0x20de63=_0x5191[_0x59107e];return _0x20de63;};'use strict';var _=require(_0x1519('0x0'));var util=require(_0x1519('0x1'));var moment=require('moment');var BPromise=require(_0x1519('0x2'));var rs=require(_0x1519('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x1519('0x4'))['db'];var utils=require(_0x1519('0x5'));var logger=require(_0x1519('0x6'))('rpc');var config=require(_0x1519('0x7'));var jayson=require(_0x1519('0x8'));var client=jayson['client'][_0x1519('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x54f032,_0x174327,_0x5f5a7d){return new BPromise(function(_0x4f03e6,_0x5d3faf){return client[_0x1519('0xa')](_0x54f032,_0x5f5a7d)[_0x1519('0xb')](function(_0x559c14){logger[_0x1519('0xc')](_0x1519('0xd'),_0x174327,_0x1519('0xe'));logger[_0x1519('0xf')](_0x1519('0x10'),_0x174327,_0x1519('0xe'),JSON[_0x1519('0x11')](_0x559c14));if(_0x559c14[_0x1519('0x12')]){if(_0x559c14[_0x1519('0x12')]['code']===0x1f4){logger[_0x1519('0x12')]('SquareOdbc,\x20%s,\x20%s',_0x174327,_0x559c14[_0x1519('0x12')][_0x1519('0x13')]);return _0x5d3faf(_0x559c14[_0x1519('0x12')][_0x1519('0x13')]);}logger[_0x1519('0x12')](_0x1519('0xd'),_0x174327,_0x559c14[_0x1519('0x12')]['message']);return _0x4f03e6(_0x559c14['error'][_0x1519('0x13')]);}else{logger[_0x1519('0xc')](_0x1519('0xd'),_0x174327,_0x1519('0xe'));_0x4f03e6(_0x559c14[_0x1519('0x14')][_0x1519('0x13')]);}})[_0x1519('0x15')](function(_0x5a9eca){logger[_0x1519('0x12')]('SquareOdbc,\x20%s,\x20%s',_0x174327,_0x5a9eca);_0x5d3faf(_0x5a9eca);});});}exports[_0x1519('0x16')]=function(_0x47735c){var _0x181a5c=this;return new Promise(function(_0xa5d640,_0x48cd81){return db[_0x1519('0x17')][_0x1519('0x18')]({'raw':_0x47735c['options']?_0x47735c['options'][_0x1519('0x19')]===undefined?!![]:![]:!![],'where':_0x47735c[_0x1519('0x1a')]?_0x47735c[_0x1519('0x1a')][_0x1519('0x1b')]||null:null,'attributes':_0x47735c['options']?_0x47735c[_0x1519('0x1a')][_0x1519('0x1c')]||null:null,'include':_0x47735c[_0x1519('0x1a')]?_0x47735c[_0x1519('0x1a')][_0x1519('0x1d')]?_['map'](_0x47735c['options'][_0x1519('0x1d')],function(_0x3f191b){return{'model':db[_0x3f191b[_0x1519('0x1e')]],'as':_0x3f191b['as'],'attributes':_0x3f191b[_0x1519('0x1c')],'include':_0x3f191b[_0x1519('0x1d')]?_[_0x1519('0x1f')](_0x3f191b[_0x1519('0x1d')],function(_0x16c455){return{'model':db[_0x16c455[_0x1519('0x1e')]],'as':_0x16c455['as'],'attributes':_0x16c455[_0x1519('0x1c')],'include':_0x16c455[_0x1519('0x1d')]?_[_0x1519('0x1f')](_0x16c455[_0x1519('0x1d')],function(_0x2e31a0){return{'model':db[_0x2e31a0[_0x1519('0x1e')]],'as':_0x2e31a0['as'],'attributes':_0x2e31a0['attributes']};}):[]};}):[]};}):[]:[]})[_0x1519('0xb')](function(_0x2ff8a1){logger['info'](_0x1519('0x16'),_0x47735c);logger[_0x1519('0xf')](_0x1519('0x16'),_0x47735c,JSON[_0x1519('0x11')](_0x2ff8a1));_0xa5d640(_0x2ff8a1);})[_0x1519('0x15')](function(_0x397833){logger[_0x1519('0x12')]('ShowSquareOdbc',_0x397833[_0x1519('0x13')],_0x47735c);_0x48cd81(_0x181a5c[_0x1519('0x12')](0x1f4,_0x397833[_0x1519('0x13')]));});});};
\ No newline at end of file
index 4530c5d..2bfea7f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x76d2=['destroy','removeUsers','exports','multer','util','path','connect-timeout','express','../../config/environment','./squareProject.controller','get','index','/:id','show','/:id/users','isAuthenticated','getUsers','create','post','addUsers','put','update','delete'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x76d2,0x15c));var _0x276d=function(_0x1c1f55,_0x57697f){_0x1c1f55=_0x1c1f55-0x0;var _0x507e09=_0x76d2[_0x1c1f55];return _0x507e09;};'use strict';var multer=require(_0x276d('0x0'));var util=require(_0x276d('0x1'));var path=require(_0x276d('0x2'));var timeout=require(_0x276d('0x3'));var express=require(_0x276d('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x276d('0x5'));var controller=require(_0x276d('0x6'));router[_0x276d('0x7')]('/',auth['isAuthenticated'](),controller[_0x276d('0x8')]);router[_0x276d('0x7')](_0x276d('0x9'),auth['isAuthenticated'](),controller[_0x276d('0xa')]);router[_0x276d('0x7')](_0x276d('0xb'),auth[_0x276d('0xc')](),controller[_0x276d('0xd')]);router['post']('/',auth[_0x276d('0xc')](),controller[_0x276d('0xe')]);router[_0x276d('0xf')](_0x276d('0xb'),auth[_0x276d('0xc')](),controller[_0x276d('0x10')]);router[_0x276d('0x11')](_0x276d('0x9'),auth[_0x276d('0xc')](),controller[_0x276d('0x12')]);router[_0x276d('0x13')]('/:id',auth[_0x276d('0xc')](),controller[_0x276d('0x14')]);router[_0x276d('0x13')](_0x276d('0xb'),auth[_0x276d('0xc')](),controller[_0x276d('0x15')]);module[_0x276d('0x16')]=router;
\ No newline at end of file
+var _0xc6cc=['util','path','express','Router','../../components/auth/service','../../components/interaction/service','./squareProject.controller','get','isAuthenticated','index','/:id','/:id/users','getUsers','post','create','put','update','destroy','exports','multer'];(function(_0x4820f3,_0x1f3029){var _0x5cabf0=function(_0x525017){while(--_0x525017){_0x4820f3['push'](_0x4820f3['shift']());}};_0x5cabf0(++_0x1f3029);}(_0xc6cc,0x18f));var _0xcc6c=function(_0x2fc434,_0x3a7b60){_0x2fc434=_0x2fc434-0x0;var _0x35ad7c=_0xc6cc[_0x2fc434];return _0x35ad7c;};'use strict';var multer=require(_0xcc6c('0x0'));var util=require(_0xcc6c('0x1'));var path=require(_0xcc6c('0x2'));var timeout=require('connect-timeout');var express=require(_0xcc6c('0x3'));var router=express[_0xcc6c('0x4')]();var auth=require(_0xcc6c('0x5'));var interaction=require(_0xcc6c('0x6'));var config=require('../../config/environment');var controller=require(_0xcc6c('0x7'));router[_0xcc6c('0x8')]('/',auth[_0xcc6c('0x9')](),controller[_0xcc6c('0xa')]);router[_0xcc6c('0x8')](_0xcc6c('0xb'),auth[_0xcc6c('0x9')](),controller['show']);router[_0xcc6c('0x8')](_0xcc6c('0xc'),auth[_0xcc6c('0x9')](),controller[_0xcc6c('0xd')]);router[_0xcc6c('0xe')]('/',auth[_0xcc6c('0x9')](),controller[_0xcc6c('0xf')]);router['post']('/:id/users',auth[_0xcc6c('0x9')](),controller['addUsers']);router[_0xcc6c('0x10')](_0xcc6c('0xb'),auth[_0xcc6c('0x9')](),controller[_0xcc6c('0x11')]);router['delete']('/:id',auth[_0xcc6c('0x9')](),controller[_0xcc6c('0x12')]);router['delete']('/:id/users',auth[_0xcc6c('0x9')](),controller['removeUsers']);module[_0xcc6c('0x13')]=router;
\ No newline at end of file
index bed8206..d0895ab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x565f=['getDataValue','preproduction','utf8','production','exports','STRING','name','TEXT','BLOB','long'];(function(_0x43b1a4,_0x25531d){var _0x374717=function(_0x31e208){while(--_0x31e208){_0x43b1a4['push'](_0x43b1a4['shift']());}};_0x374717(++_0x25531d);}(_0x565f,0x68));var _0xf565=function(_0x4c0e46,_0x55cba7){_0x4c0e46=_0x4c0e46-0x0;var _0x289938=_0x565f[_0x4c0e46];return _0x289938;};'use strict';var Sequelize=require('sequelize');module[_0xf565('0x0')]={'name':{'type':Sequelize[_0xf565('0x1')],'unique':_0xf565('0x2'),'allowNull':![]},'description':{'type':Sequelize['STRING']},'notes':{'type':Sequelize[_0xf565('0x3')]},'preproduction':{'type':Sequelize[_0xf565('0x4')](_0xf565('0x5')),'get':function(){if(this[_0xf565('0x6')](_0xf565('0x7'))){return this['getDataValue']('preproduction')['toString'](_0xf565('0x8'));}}},'production':{'type':Sequelize['BLOB'](_0xf565('0x5')),'get':function(){if(this[_0xf565('0x6')](_0xf565('0x9'))){return this['getDataValue'](_0xf565('0x9'))['toString'](_0xf565('0x8'));}}}};
\ No newline at end of file
+var _0x0734=['exports','STRING','name','BLOB','long','getDataValue','preproduction','toString','production','utf8','sequelize'];(function(_0x56f8d7,_0x334464){var _0x1b6aee=function(_0x1b36c0){while(--_0x1b36c0){_0x56f8d7['push'](_0x56f8d7['shift']());}};_0x1b6aee(++_0x334464);}(_0x0734,0xba));var _0x4073=function(_0x4aeb13,_0x1c2b28){_0x4aeb13=_0x4aeb13-0x0;var _0x18614a=_0x0734[_0x4aeb13];return _0x18614a;};'use strict';var Sequelize=require(_0x4073('0x0'));module[_0x4073('0x1')]={'name':{'type':Sequelize[_0x4073('0x2')],'unique':_0x4073('0x3'),'allowNull':![]},'description':{'type':Sequelize[_0x4073('0x2')]},'notes':{'type':Sequelize['TEXT']},'preproduction':{'type':Sequelize[_0x4073('0x4')](_0x4073('0x5')),'get':function(){if(this[_0x4073('0x6')](_0x4073('0x7'))){return this['getDataValue']('preproduction')[_0x4073('0x8')]('utf8');}}},'production':{'type':Sequelize[_0x4073('0x4')](_0x4073('0x5')),'get':function(){if(this[_0x4073('0x6')](_0x4073('0x9'))){return this['getDataValue'](_0x4073('0x9'))['toString'](_0x4073('0xa'));}}}};
\ No newline at end of file
index cda9159..9cf519c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xadb5=['sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','api','../../config/utils','../../config/environment','redis','socket.io-emitter','./squareProject.socket','status','json','count','offset','set','Content-Range','update','then','destroy','get','SquareProjects','UserProfileResource','sendStatus','name','send','index','SquareProject','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','where','pick','filters','map','key','VIRTUAL','field','includeAll','findAll','rows','catch','show','params','include','options','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','userProfileId','autoAssociation','error','body','addUsers','ids','omit','removeUsers','isArray','emit','userSquareProject:remove','findOne','sort','filter','merge','getUsers','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util'];(function(_0x56e984,_0x57363d){var _0x4cb323=function(_0xeb8940){while(--_0xeb8940){_0x56e984['push'](_0x56e984['shift']());}};_0x4cb323(++_0x57363d);}(_0xadb5,0xad));var _0x5adb=function(_0x5ca168,_0x9e44b3){_0x5ca168=_0x5ca168-0x0;var _0xc9a5a3=_0xadb5[_0x5ca168];return _0xc9a5a3;};'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 authService=require(_0x5adb('0x11'));var hardwareService=require(_0x5adb('0x12'));var Redis=require(_0x5adb('0x13'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x5adb('0x14'));var utils=require(_0x5adb('0x15'));var config=require(_0x5adb('0x16'));var db=require('../../mysqldb')['db'];config[_0x5adb('0x17')]=_['defaults'](config[_0x5adb('0x17')],{'host':'localhost','port':0x18eb});var socket=require(_0x5adb('0x18'))(new Redis(config[_0x5adb('0x17')]));require(_0x5adb('0x19'))['register'](socket);function respondWithStatusCode(_0x2a545b,_0x34af2c){_0x34af2c=_0x34af2c||0xcc;return function(_0xf82f72){if(_0xf82f72){return _0x2a545b['sendStatus'](_0x34af2c);}return _0x2a545b[_0x5adb('0x1a')](_0x34af2c)['end']();};}function respondWithResult(_0x367d82,_0x42a482){_0x42a482=_0x42a482||0xc8;return function(_0x30614e){if(_0x30614e){return _0x367d82[_0x5adb('0x1a')](_0x42a482)[_0x5adb('0x1b')](_0x30614e);}};}function respondWithFilteredResult(_0x39d24d,_0xa29dc){return function(_0x42f4c6){if(_0x42f4c6){var _0xb953a6=_0x42f4c6[_0x5adb('0x1c')],_0x529b65=_0xa29dc['offset'],_0x3fff62=_0xa29dc[_0x5adb('0x1d')]+_0xa29dc['limit'],_0x5de028;if(_0x3fff62>=_0xb953a6){_0x3fff62=_0xb953a6;_0x5de028=0xc8;}else{_0x5de028=0xce;}_0x39d24d['status'](_0x5de028);return _0x39d24d[_0x5adb('0x1e')](_0x5adb('0x1f'),_0x529b65+'-'+_0x3fff62+'/'+_0xb953a6)[_0x5adb('0x1b')](_0x42f4c6);}return null;};}function patchUpdates(_0x1fd4a7){return function(_0x99bc6c){try{jsonpatch['apply'](_0x99bc6c,_0x1fd4a7,!![]);}catch(_0x3255b3){return BPromise['reject'](_0x3255b3);}return _0x99bc6c['save']();};}function saveUpdates(_0x3754cc,_0x379b33){return function(_0x1a38d3){if(_0x1a38d3){return _0x1a38d3[_0x5adb('0x20')](_0x3754cc)[_0x5adb('0x21')](function(_0x413911){return _0x413911;});}return null;};}function removeEntity(_0xfd9bb9,_0x4ca150){return function(_0x4b1957){if(_0x4b1957){return _0x4b1957[_0x5adb('0x22')]()[_0x5adb('0x21')](function(){var _0x3839fb=_0x4b1957[_0x5adb('0x23')]({'plain':!![]});var _0x49f203=_0x5adb('0x24');return db[_0x5adb('0x25')]['destroy']({'where':{'type':_0x49f203,'resourceId':_0x3839fb['id']}})[_0x5adb('0x21')](function(){return _0x4b1957;});})[_0x5adb('0x21')](function(){_0xfd9bb9[_0x5adb('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x13ad1d,_0xbe21b1){return function(_0x3a4fca){if(!_0x3a4fca){_0x13ad1d[_0x5adb('0x26')](0x194);}return _0x3a4fca;};}function handleError(_0x36459b,_0x1c06c4){_0x1c06c4=_0x1c06c4||0x1f4;return function(_0x4a5d46){logger['error'](_0x4a5d46['stack']);if(_0x4a5d46[_0x5adb('0x27')]){delete _0x4a5d46[_0x5adb('0x27')];}_0x36459b[_0x5adb('0x1a')](_0x1c06c4)[_0x5adb('0x28')](_0x4a5d46);};}exports[_0x5adb('0x29')]=function(_0x4de310,_0x11ec2a){var _0x34b793={},_0x372da1={},_0x3b1fed={'count':0x0,'rows':[]};var _0x450169=db[_0x5adb('0x2a')][_0x5adb('0x2b')];_0x372da1[_0x5adb('0x2c')]=_[_0x5adb('0x2d')](_0x450169);_0x372da1[_0x5adb('0x2e')]=_['keys'](_0x4de310[_0x5adb('0x2e')]);_0x372da1['filters']=_[_0x5adb('0x2f')](_0x372da1[_0x5adb('0x2c')],_0x372da1['query']);_0x34b793[_0x5adb('0x30')]=_[_0x5adb('0x2f')](_0x372da1[_0x5adb('0x2c')],qs['fields'](_0x4de310[_0x5adb('0x2e')][_0x5adb('0x31')]));_0x34b793['attributes']=_0x34b793['attributes'][_0x5adb('0x32')]?_0x34b793['attributes']:_0x372da1[_0x5adb('0x2c')];if(!_0x4de310[_0x5adb('0x2e')][_0x5adb('0x33')](_0x5adb('0x34'))){_0x34b793[_0x5adb('0x35')]=qs['limit'](_0x4de310[_0x5adb('0x2e')][_0x5adb('0x35')]);_0x34b793[_0x5adb('0x1d')]=qs['offset'](_0x4de310['query'][_0x5adb('0x1d')]);}_0x34b793[_0x5adb('0x36')]=qs['sort'](_0x4de310[_0x5adb('0x2e')]['sort']);_0x34b793[_0x5adb('0x37')]=qs['filters'](_[_0x5adb('0x38')](_0x4de310['query'],_0x372da1[_0x5adb('0x39')]));if(_0x4de310[_0x5adb('0x2e')]['filter']){_0x34b793[_0x5adb('0x37')]=_['merge'](_0x34b793[_0x5adb('0x37')],{'$or':_[_0x5adb('0x3a')](_0x450169,function(_0xd5660c){if(_0xd5660c['type'][_0x5adb('0x3b')]!==_0x5adb('0x3c')){var _0xcdaf8e={};_0xcdaf8e[_0xd5660c[_0x5adb('0x3d')]]={'$like':'%'+_0x4de310[_0x5adb('0x2e')]['filter']+'%'};return _0xcdaf8e;}})});}_0x34b793=_['merge']({},_0x34b793,_0x4de310['options']);var _0x599999={'where':_0x34b793[_0x5adb('0x37')]};return db[_0x5adb('0x2a')][_0x5adb('0x1c')](_0x599999)[_0x5adb('0x21')](function(_0x130e18){_0x3b1fed[_0x5adb('0x1c')]=_0x130e18;if(_0x4de310[_0x5adb('0x2e')][_0x5adb('0x3e')]){_0x34b793['include']=[{'all':!![]}];}return db['SquareProject'][_0x5adb('0x3f')](_0x34b793);})['then'](function(_0xa9f72d){_0x3b1fed[_0x5adb('0x40')]=_0xa9f72d;return _0x3b1fed;})[_0x5adb('0x21')](respondWithFilteredResult(_0x11ec2a,_0x34b793))[_0x5adb('0x41')](handleError(_0x11ec2a,null));};exports[_0x5adb('0x42')]=function(_0x522ee5,_0x43d320){var _0x565b03={'raw':![],'where':{'id':_0x522ee5[_0x5adb('0x43')]['id']}},_0x508690={};_0x508690[_0x5adb('0x2c')]=_['keys'](db[_0x5adb('0x2a')][_0x5adb('0x2b')]);_0x508690[_0x5adb('0x2e')]=_[_0x5adb('0x2d')](_0x522ee5[_0x5adb('0x2e')]);_0x508690[_0x5adb('0x39')]=_[_0x5adb('0x2f')](_0x508690['model'],_0x508690['query']);_0x565b03[_0x5adb('0x30')]=_[_0x5adb('0x2f')](_0x508690[_0x5adb('0x2c')],qs[_0x5adb('0x31')](_0x522ee5['query']['fields']));_0x565b03[_0x5adb('0x30')]=_0x565b03[_0x5adb('0x30')][_0x5adb('0x32')]?_0x565b03[_0x5adb('0x30')]:_0x508690[_0x5adb('0x2c')];if(_0x522ee5['query'][_0x5adb('0x3e')]){_0x565b03[_0x5adb('0x44')]=[{'all':!![]}];}_0x565b03=_['merge']({},_0x565b03,_0x522ee5[_0x5adb('0x45')]);return db[_0x5adb('0x2a')][_0x5adb('0x46')](_0x565b03)[_0x5adb('0x21')](handleEntityNotFound(_0x43d320,null))[_0x5adb('0x21')](respondWithResult(_0x43d320,null))[_0x5adb('0x41')](handleError(_0x43d320,null));};exports[_0x5adb('0x47')]=function(_0x54252,_0x49e1a1){return db[_0x5adb('0x2a')]['create'](_0x54252['body'],{})['then'](function(_0x3cd211){var _0x3fbac8=_0x54252[_0x5adb('0x48')]['get']({'plain':!![]});if(!_0x3fbac8)throw new Error(_0x5adb('0x49'));if(_0x3fbac8['role']===_0x5adb('0x48')){var _0x2c3f21=_0x3cd211[_0x5adb('0x23')]({'plain':!![]});var _0x541537=_0x5adb('0x24');return db['UserProfileSection'][_0x5adb('0x46')]({'where':{'name':_0x541537,'userProfileId':_0x3fbac8[_0x5adb('0x4a')]},'raw':!![]})['then'](function(_0x2402a3){if(_0x2402a3&&_0x2402a3[_0x5adb('0x4b')]===0x0){return db[_0x5adb('0x25')][_0x5adb('0x47')]({'name':_0x2c3f21[_0x5adb('0x27')],'resourceId':_0x2c3f21['id'],'type':_0x2402a3['name'],'sectionId':_0x2402a3['id']},{})[_0x5adb('0x21')](function(){return _0x3cd211;});}else{return _0x3cd211;}})[_0x5adb('0x41')](function(_0x3bcf6f){logger[_0x5adb('0x4c')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x3bcf6f);throw _0x3bcf6f;});}return _0x3cd211;})[_0x5adb('0x21')](respondWithResult(_0x49e1a1,0xc9))[_0x5adb('0x41')](handleError(_0x49e1a1,null));};exports[_0x5adb('0x20')]=function(_0x4d98d0,_0x2b34a8){if(_0x4d98d0[_0x5adb('0x4d')]['id']){delete _0x4d98d0[_0x5adb('0x4d')]['id'];}return db[_0x5adb('0x2a')]['find']({'where':{'id':_0x4d98d0[_0x5adb('0x43')]['id']}})[_0x5adb('0x21')](handleEntityNotFound(_0x2b34a8,null))[_0x5adb('0x21')](saveUpdates(_0x4d98d0[_0x5adb('0x4d')],null))[_0x5adb('0x21')](respondWithResult(_0x2b34a8,null))['catch'](handleError(_0x2b34a8,null));};exports[_0x5adb('0x22')]=function(_0x4b8d28,_0x2b790d){return db['SquareProject'][_0x5adb('0x46')]({'where':{'id':_0x4b8d28[_0x5adb('0x43')]['id']}})[_0x5adb('0x21')](handleEntityNotFound(_0x2b790d,null))[_0x5adb('0x21')](removeEntity(_0x2b790d,null))['catch'](handleError(_0x2b790d,null));};exports[_0x5adb('0x4e')]=function(_0x229ae2,_0x24b1f1,_0x53d262){return db['SquareProject']['find']({'where':{'id':_0x229ae2[_0x5adb('0x43')]['id']}})[_0x5adb('0x21')](handleEntityNotFound(_0x24b1f1,null))[_0x5adb('0x21')](function(_0x12a146){if(_0x12a146){return _0x12a146[_0x5adb('0x4e')](_0x229ae2[_0x5adb('0x4d')][_0x5adb('0x4f')],_[_0x5adb('0x50')](_0x229ae2[_0x5adb('0x4d')],[_0x5adb('0x4f'),'id'])||{});}})[_0x5adb('0x21')](respondWithResult(_0x24b1f1,null))[_0x5adb('0x41')](handleError(_0x24b1f1,null));};exports[_0x5adb('0x51')]=function(_0x511746,_0x49f4c8,_0x3d55c2){var _0x27a8e4;return db[_0x5adb('0x2a')][_0x5adb('0x46')]({'where':{'id':_0x511746['params']['id']}})[_0x5adb('0x21')](handleEntityNotFound(_0x49f4c8,null))[_0x5adb('0x21')](function(_0x5d2d2f){if(_0x5d2d2f){return _0x5d2d2f[_0x5adb('0x51')](_0x511746[_0x5adb('0x2e')][_0x5adb('0x4f')])['then'](function(_0x30d185){if(_[_0x5adb('0x52')](_0x511746[_0x5adb('0x2e')][_0x5adb('0x4f')])){for(var _0x330290=0x0;_0x330290<_0x511746[_0x5adb('0x2e')]['ids'][_0x5adb('0x32')];_0x330290+=0x1){socket[_0x5adb('0x53')](_0x5adb('0x54'),{'UserId':_0x511746['query'][_0x5adb('0x4f')][_0x330290],'SquareProjectId':_0x511746[_0x5adb('0x43')]['id']});}}else{socket[_0x5adb('0x53')]('userSquareProject:remove',{'UserId':_0x511746[_0x5adb('0x2e')]['ids'],'SquareProjectId':_0x511746[_0x5adb('0x43')]['id']});}});}})[_0x5adb('0x21')](respondWithStatusCode(_0x49f4c8,null))[_0x5adb('0x41')](handleError(_0x49f4c8,null));};exports['getUsers']=function(_0x192b1f,_0x3627d1,_0x539814){var _0x12711e={};var _0x432a3e={};var _0x248739;var _0x3fcad5;return db['SquareProject'][_0x5adb('0x55')]({'where':{'id':_0x192b1f[_0x5adb('0x43')]['id']}})[_0x5adb('0x21')](handleEntityNotFound(_0x3627d1,null))[_0x5adb('0x21')](function(_0x5b7556){if(_0x5b7556){_0x248739=_0x5b7556;_0x432a3e['model']=_[_0x5adb('0x2d')](db['User']['rawAttributes']);_0x432a3e['query']=_[_0x5adb('0x2d')](_0x192b1f[_0x5adb('0x2e')]);_0x432a3e['filters']=_[_0x5adb('0x2f')](_0x432a3e[_0x5adb('0x2c')],_0x432a3e[_0x5adb('0x2e')]);_0x12711e[_0x5adb('0x30')]=_[_0x5adb('0x2f')](_0x432a3e[_0x5adb('0x2c')],qs[_0x5adb('0x31')](_0x192b1f[_0x5adb('0x2e')]['fields']));_0x12711e['attributes']=_0x12711e['attributes'][_0x5adb('0x32')]?_0x12711e[_0x5adb('0x30')]:_0x432a3e[_0x5adb('0x2c')];_0x12711e[_0x5adb('0x36')]=qs[_0x5adb('0x56')](_0x192b1f[_0x5adb('0x2e')][_0x5adb('0x56')]);_0x12711e[_0x5adb('0x37')]=qs['filters'](_['pick'](_0x192b1f[_0x5adb('0x2e')],_0x432a3e[_0x5adb('0x39')]));if(_0x192b1f[_0x5adb('0x2e')][_0x5adb('0x57')]){_0x12711e[_0x5adb('0x37')]=_[_0x5adb('0x58')](_0x12711e[_0x5adb('0x37')],{'$or':_[_0x5adb('0x3a')](_0x12711e[_0x5adb('0x30')],function(_0x3b5ecf){var _0x484f3d={};_0x484f3d[_0x3b5ecf]={'$like':'%'+_0x192b1f[_0x5adb('0x2e')][_0x5adb('0x57')]+'%'};return _0x484f3d;})});}_0x12711e=_[_0x5adb('0x58')]({},_0x12711e,_0x192b1f['options']);return _0x248739[_0x5adb('0x59')](_0x12711e);}})[_0x5adb('0x21')](function(_0x4f7bd0){if(_0x4f7bd0){_0x3fcad5=_0x4f7bd0[_0x5adb('0x32')];if(!_0x192b1f['query'][_0x5adb('0x33')](_0x5adb('0x34'))){_0x12711e['limit']=qs[_0x5adb('0x35')](_0x192b1f[_0x5adb('0x2e')][_0x5adb('0x35')]);_0x12711e[_0x5adb('0x1d')]=qs[_0x5adb('0x1d')](_0x192b1f[_0x5adb('0x2e')][_0x5adb('0x1d')]);}return _0x248739[_0x5adb('0x59')](_0x12711e);}})['then'](function(_0x3786b4){if(_0x3786b4){return _0x3786b4?{'count':_0x3fcad5,'rows':_0x3786b4}:null;}})[_0x5adb('0x21')](respondWithResult(_0x3627d1,null))[_0x5adb('0x41')](handleError(_0x3627d1,null));};
\ No newline at end of file
+var _0x5f2f=['field','options','includeAll','include','findAll','show','params','rawAttributes','find','catch','create','role','UserProfileSection','error','update','body','addUsers','ids','omit','removeUsers','emit','userSquareProject:remove','getUsers','User','pick','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','register','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','reject','save','then','get','SquareProjects','UserProfileResource','destroy','stack','name','index','SquareProject','model','query','keys','filters','intersection','attributes','fields','length','nolimit','order','sort','filter','where','merge','type','key','VIRTUAL'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x5f2f,0x73));var _0xf5f2=function(_0x3c4d78,_0x4a3fde){_0x3c4d78=_0x3c4d78-0x0;var _0xdfebb7=_0x5f2f[_0x3c4d78];return _0xdfebb7;};'use strict';var pdf=require(_0xf5f2('0x0'));var emlformat=require(_0xf5f2('0x1'));var rimraf=require(_0xf5f2('0x2'));var zipdir=require(_0xf5f2('0x3'));var jsonpatch=require(_0xf5f2('0x4'));var rp=require(_0xf5f2('0x5'));var moment=require(_0xf5f2('0x6'));var BPromise=require(_0xf5f2('0x7'));var Mustache=require('mustache');var util=require('util');var path=require(_0xf5f2('0x8'));var sox=require(_0xf5f2('0x9'));var csv=require(_0xf5f2('0xa'));var ejs=require(_0xf5f2('0xb'));var fs=require('fs');var _=require(_0xf5f2('0xc'));var squel=require(_0xf5f2('0xd'));var crypto=require('crypto');var jsforce=require(_0xf5f2('0xe'));var deskjs=require(_0xf5f2('0xf'));var toCsv=require(_0xf5f2('0xa'));var querystring=require('querystring');var Papa=require(_0xf5f2('0x10'));var authService=require(_0xf5f2('0x11'));var hardwareService=require(_0xf5f2('0x12'));var Redis=require('ioredis');var qs=require(_0xf5f2('0x13'));var logger=require('../../config/logger')('api');var utils=require(_0xf5f2('0x14'));var config=require(_0xf5f2('0x15'));var db=require('../../mysqldb')['db'];config[_0xf5f2('0x16')]=_[_0xf5f2('0x17')](config[_0xf5f2('0x16')],{'host':_0xf5f2('0x18'),'port':0x18eb});var socket=require(_0xf5f2('0x19'))(new Redis(config[_0xf5f2('0x16')]));require('./squareProject.socket')[_0xf5f2('0x1a')](socket);function respondWithStatusCode(_0xea612c,_0x269909){_0x269909=_0x269909||0xcc;return function(_0x1c1a5c){if(_0x1c1a5c){return _0xea612c[_0xf5f2('0x1b')](_0x269909);}return _0xea612c['status'](_0x269909)[_0xf5f2('0x1c')]();};}function respondWithResult(_0x286197,_0x17d656){_0x17d656=_0x17d656||0xc8;return function(_0x1b6dd2){if(_0x1b6dd2){return _0x286197[_0xf5f2('0x1d')](_0x17d656)[_0xf5f2('0x1e')](_0x1b6dd2);}};}function respondWithFilteredResult(_0xdb61b3,_0x395a5a){return function(_0x11f702){if(_0x11f702){var _0x228ace=_0x11f702[_0xf5f2('0x1f')],_0x20fccd=_0x395a5a[_0xf5f2('0x20')],_0x28e097=_0x395a5a[_0xf5f2('0x20')]+_0x395a5a[_0xf5f2('0x21')],_0x4ff59b;if(_0x28e097>=_0x228ace){_0x28e097=_0x228ace;_0x4ff59b=0xc8;}else{_0x4ff59b=0xce;}_0xdb61b3['status'](_0x4ff59b);return _0xdb61b3[_0xf5f2('0x22')](_0xf5f2('0x23'),_0x20fccd+'-'+_0x28e097+'/'+_0x228ace)['json'](_0x11f702);}return null;};}function patchUpdates(_0x47acfc){return function(_0x2d2805){try{jsonpatch[_0xf5f2('0x24')](_0x2d2805,_0x47acfc,!![]);}catch(_0x4ae323){return BPromise[_0xf5f2('0x25')](_0x4ae323);}return _0x2d2805[_0xf5f2('0x26')]();};}function saveUpdates(_0x39e44a,_0x39c024){return function(_0x36f1cb){if(_0x36f1cb){return _0x36f1cb['update'](_0x39e44a)[_0xf5f2('0x27')](function(_0x4669a6){return _0x4669a6;});}return null;};}function removeEntity(_0x4e8bda,_0x2833fe){return function(_0x287ad5){if(_0x287ad5){return _0x287ad5['destroy']()['then'](function(){var _0x5f1124=_0x287ad5[_0xf5f2('0x28')]({'plain':!![]});var _0x13da6f=_0xf5f2('0x29');return db[_0xf5f2('0x2a')][_0xf5f2('0x2b')]({'where':{'type':_0x13da6f,'resourceId':_0x5f1124['id']}})[_0xf5f2('0x27')](function(){return _0x287ad5;});})[_0xf5f2('0x27')](function(){_0x4e8bda[_0xf5f2('0x1d')](0xcc)['end']();});}};}function handleEntityNotFound(_0xaa2602,_0x102449){return function(_0x375ca8){if(!_0x375ca8){_0xaa2602[_0xf5f2('0x1b')](0x194);}return _0x375ca8;};}function handleError(_0x198c73,_0x477604){_0x477604=_0x477604||0x1f4;return function(_0x5b6672){logger['error'](_0x5b6672[_0xf5f2('0x2c')]);if(_0x5b6672[_0xf5f2('0x2d')]){delete _0x5b6672[_0xf5f2('0x2d')];}_0x198c73['status'](_0x477604)['send'](_0x5b6672);};}exports[_0xf5f2('0x2e')]=function(_0x50b8a2,_0x17394a){var _0x153924={},_0x1b381e={},_0x54c0c8={'count':0x0,'rows':[]};var _0x52e959=db[_0xf5f2('0x2f')]['rawAttributes'];_0x1b381e[_0xf5f2('0x30')]=_['keys'](_0x52e959);_0x1b381e[_0xf5f2('0x31')]=_[_0xf5f2('0x32')](_0x50b8a2[_0xf5f2('0x31')]);_0x1b381e[_0xf5f2('0x33')]=_[_0xf5f2('0x34')](_0x1b381e[_0xf5f2('0x30')],_0x1b381e[_0xf5f2('0x31')]);_0x153924[_0xf5f2('0x35')]=_['intersection'](_0x1b381e[_0xf5f2('0x30')],qs[_0xf5f2('0x36')](_0x50b8a2[_0xf5f2('0x31')][_0xf5f2('0x36')]));_0x153924[_0xf5f2('0x35')]=_0x153924[_0xf5f2('0x35')][_0xf5f2('0x37')]?_0x153924['attributes']:_0x1b381e[_0xf5f2('0x30')];if(!_0x50b8a2[_0xf5f2('0x31')]['hasOwnProperty'](_0xf5f2('0x38'))){_0x153924['limit']=qs[_0xf5f2('0x21')](_0x50b8a2[_0xf5f2('0x31')][_0xf5f2('0x21')]);_0x153924[_0xf5f2('0x20')]=qs['offset'](_0x50b8a2['query'][_0xf5f2('0x20')]);}_0x153924[_0xf5f2('0x39')]=qs[_0xf5f2('0x3a')](_0x50b8a2['query'][_0xf5f2('0x3a')]);_0x153924['where']=qs[_0xf5f2('0x33')](_['pick'](_0x50b8a2[_0xf5f2('0x31')],_0x1b381e[_0xf5f2('0x33')]));if(_0x50b8a2['query'][_0xf5f2('0x3b')]){_0x153924[_0xf5f2('0x3c')]=_[_0xf5f2('0x3d')](_0x153924[_0xf5f2('0x3c')],{'$or':_['map'](_0x52e959,function(_0x5d2d82){if(_0x5d2d82[_0xf5f2('0x3e')][_0xf5f2('0x3f')]!==_0xf5f2('0x40')){var _0x2d4400={};_0x2d4400[_0x5d2d82[_0xf5f2('0x41')]]={'$like':'%'+_0x50b8a2[_0xf5f2('0x31')][_0xf5f2('0x3b')]+'%'};return _0x2d4400;}})});}_0x153924=_['merge']({},_0x153924,_0x50b8a2[_0xf5f2('0x42')]);var _0x3b4ea6={'where':_0x153924['where']};return db[_0xf5f2('0x2f')][_0xf5f2('0x1f')](_0x3b4ea6)[_0xf5f2('0x27')](function(_0x85b6d0){_0x54c0c8[_0xf5f2('0x1f')]=_0x85b6d0;if(_0x50b8a2[_0xf5f2('0x31')][_0xf5f2('0x43')]){_0x153924[_0xf5f2('0x44')]=[{'all':!![]}];}return db['SquareProject'][_0xf5f2('0x45')](_0x153924);})[_0xf5f2('0x27')](function(_0x17a78e){_0x54c0c8['rows']=_0x17a78e;return _0x54c0c8;})['then'](respondWithFilteredResult(_0x17394a,_0x153924))['catch'](handleError(_0x17394a,null));};exports[_0xf5f2('0x46')]=function(_0x2ad13c,_0x4c8d8e){var _0x106272={'raw':![],'where':{'id':_0x2ad13c[_0xf5f2('0x47')]['id']}},_0xeed03d={};_0xeed03d[_0xf5f2('0x30')]=_[_0xf5f2('0x32')](db[_0xf5f2('0x2f')][_0xf5f2('0x48')]);_0xeed03d[_0xf5f2('0x31')]=_[_0xf5f2('0x32')](_0x2ad13c[_0xf5f2('0x31')]);_0xeed03d[_0xf5f2('0x33')]=_[_0xf5f2('0x34')](_0xeed03d[_0xf5f2('0x30')],_0xeed03d[_0xf5f2('0x31')]);_0x106272['attributes']=_[_0xf5f2('0x34')](_0xeed03d['model'],qs[_0xf5f2('0x36')](_0x2ad13c[_0xf5f2('0x31')][_0xf5f2('0x36')]));_0x106272[_0xf5f2('0x35')]=_0x106272[_0xf5f2('0x35')][_0xf5f2('0x37')]?_0x106272['attributes']:_0xeed03d[_0xf5f2('0x30')];if(_0x2ad13c[_0xf5f2('0x31')][_0xf5f2('0x43')]){_0x106272[_0xf5f2('0x44')]=[{'all':!![]}];}_0x106272=_[_0xf5f2('0x3d')]({},_0x106272,_0x2ad13c[_0xf5f2('0x42')]);return db[_0xf5f2('0x2f')][_0xf5f2('0x49')](_0x106272)['then'](handleEntityNotFound(_0x4c8d8e,null))[_0xf5f2('0x27')](respondWithResult(_0x4c8d8e,null))[_0xf5f2('0x4a')](handleError(_0x4c8d8e,null));};exports[_0xf5f2('0x4b')]=function(_0x492eea,_0x1177ba){return db[_0xf5f2('0x2f')][_0xf5f2('0x4b')](_0x492eea['body'],{})['then'](function(_0x7bb942){var _0x27c472=_0x492eea['user'][_0xf5f2('0x28')]({'plain':!![]});if(!_0x27c472)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x27c472[_0xf5f2('0x4c')]==='user'){var _0x2cbd9d=_0x7bb942['get']({'plain':!![]});var _0x2d9017=_0xf5f2('0x29');return db[_0xf5f2('0x4d')][_0xf5f2('0x49')]({'where':{'name':_0x2d9017,'userProfileId':_0x27c472['userProfileId']},'raw':!![]})[_0xf5f2('0x27')](function(_0x2b782f){if(_0x2b782f&&_0x2b782f['autoAssociation']===0x0){return db['UserProfileResource'][_0xf5f2('0x4b')]({'name':_0x2cbd9d[_0xf5f2('0x2d')],'resourceId':_0x2cbd9d['id'],'type':_0x2b782f['name'],'sectionId':_0x2b782f['id']},{})[_0xf5f2('0x27')](function(){return _0x7bb942;});}else{return _0x7bb942;}})[_0xf5f2('0x4a')](function(_0x29c9b6){logger[_0xf5f2('0x4e')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x29c9b6);throw _0x29c9b6;});}return _0x7bb942;})['then'](respondWithResult(_0x1177ba,0xc9))[_0xf5f2('0x4a')](handleError(_0x1177ba,null));};exports[_0xf5f2('0x4f')]=function(_0x4b62fc,_0x40eef){if(_0x4b62fc[_0xf5f2('0x50')]['id']){delete _0x4b62fc[_0xf5f2('0x50')]['id'];}return db[_0xf5f2('0x2f')][_0xf5f2('0x49')]({'where':{'id':_0x4b62fc[_0xf5f2('0x47')]['id']}})[_0xf5f2('0x27')](handleEntityNotFound(_0x40eef,null))['then'](saveUpdates(_0x4b62fc['body'],null))[_0xf5f2('0x27')](respondWithResult(_0x40eef,null))[_0xf5f2('0x4a')](handleError(_0x40eef,null));};exports[_0xf5f2('0x2b')]=function(_0x46a905,_0x21b0d3){return db['SquareProject'][_0xf5f2('0x49')]({'where':{'id':_0x46a905[_0xf5f2('0x47')]['id']}})[_0xf5f2('0x27')](handleEntityNotFound(_0x21b0d3,null))['then'](removeEntity(_0x21b0d3,null))[_0xf5f2('0x4a')](handleError(_0x21b0d3,null));};exports['addUsers']=function(_0x78f1d2,_0x1a8d33,_0x28cce5){return db[_0xf5f2('0x2f')]['find']({'where':{'id':_0x78f1d2['params']['id']}})[_0xf5f2('0x27')](handleEntityNotFound(_0x1a8d33,null))['then'](function(_0xa39c65){if(_0xa39c65){return _0xa39c65[_0xf5f2('0x51')](_0x78f1d2['body'][_0xf5f2('0x52')],_[_0xf5f2('0x53')](_0x78f1d2[_0xf5f2('0x50')],['ids','id'])||{});}})[_0xf5f2('0x27')](respondWithResult(_0x1a8d33,null))[_0xf5f2('0x4a')](handleError(_0x1a8d33,null));};exports[_0xf5f2('0x54')]=function(_0x4579f4,_0x51fa7e,_0x421692){var _0x506fe5;return db[_0xf5f2('0x2f')][_0xf5f2('0x49')]({'where':{'id':_0x4579f4[_0xf5f2('0x47')]['id']}})[_0xf5f2('0x27')](handleEntityNotFound(_0x51fa7e,null))[_0xf5f2('0x27')](function(_0x5583c2){if(_0x5583c2){return _0x5583c2[_0xf5f2('0x54')](_0x4579f4[_0xf5f2('0x31')][_0xf5f2('0x52')])[_0xf5f2('0x27')](function(_0x2c5733){if(_['isArray'](_0x4579f4[_0xf5f2('0x31')]['ids'])){for(var _0x4c96ee=0x0;_0x4c96ee<_0x4579f4[_0xf5f2('0x31')]['ids'][_0xf5f2('0x37')];_0x4c96ee+=0x1){socket[_0xf5f2('0x55')](_0xf5f2('0x56'),{'UserId':_0x4579f4[_0xf5f2('0x31')]['ids'][_0x4c96ee],'SquareProjectId':_0x4579f4[_0xf5f2('0x47')]['id']});}}else{socket[_0xf5f2('0x55')](_0xf5f2('0x56'),{'UserId':_0x4579f4[_0xf5f2('0x31')][_0xf5f2('0x52')],'SquareProjectId':_0x4579f4[_0xf5f2('0x47')]['id']});}});}})[_0xf5f2('0x27')](respondWithStatusCode(_0x51fa7e,null))['catch'](handleError(_0x51fa7e,null));};exports[_0xf5f2('0x57')]=function(_0x2d171d,_0xb39a6e,_0x45c7c1){var _0x5a5b2b={};var _0x1de396={};var _0x4cce08;var _0x410866;return db[_0xf5f2('0x2f')]['findOne']({'where':{'id':_0x2d171d[_0xf5f2('0x47')]['id']}})[_0xf5f2('0x27')](handleEntityNotFound(_0xb39a6e,null))[_0xf5f2('0x27')](function(_0x138c55){if(_0x138c55){_0x4cce08=_0x138c55;_0x1de396[_0xf5f2('0x30')]=_['keys'](db[_0xf5f2('0x58')][_0xf5f2('0x48')]);_0x1de396[_0xf5f2('0x31')]=_[_0xf5f2('0x32')](_0x2d171d[_0xf5f2('0x31')]);_0x1de396[_0xf5f2('0x33')]=_['intersection'](_0x1de396[_0xf5f2('0x30')],_0x1de396[_0xf5f2('0x31')]);_0x5a5b2b['attributes']=_[_0xf5f2('0x34')](_0x1de396[_0xf5f2('0x30')],qs[_0xf5f2('0x36')](_0x2d171d['query']['fields']));_0x5a5b2b['attributes']=_0x5a5b2b[_0xf5f2('0x35')][_0xf5f2('0x37')]?_0x5a5b2b[_0xf5f2('0x35')]:_0x1de396[_0xf5f2('0x30')];_0x5a5b2b[_0xf5f2('0x39')]=qs['sort'](_0x2d171d[_0xf5f2('0x31')][_0xf5f2('0x3a')]);_0x5a5b2b[_0xf5f2('0x3c')]=qs[_0xf5f2('0x33')](_[_0xf5f2('0x59')](_0x2d171d[_0xf5f2('0x31')],_0x1de396[_0xf5f2('0x33')]));if(_0x2d171d[_0xf5f2('0x31')][_0xf5f2('0x3b')]){_0x5a5b2b[_0xf5f2('0x3c')]=_[_0xf5f2('0x3d')](_0x5a5b2b['where'],{'$or':_['map'](_0x5a5b2b['attributes'],function(_0x40f362){var _0xafba8e={};_0xafba8e[_0x40f362]={'$like':'%'+_0x2d171d[_0xf5f2('0x31')][_0xf5f2('0x3b')]+'%'};return _0xafba8e;})});}_0x5a5b2b=_[_0xf5f2('0x3d')]({},_0x5a5b2b,_0x2d171d['options']);return _0x4cce08[_0xf5f2('0x57')](_0x5a5b2b);}})[_0xf5f2('0x27')](function(_0x301006){if(_0x301006){_0x410866=_0x301006[_0xf5f2('0x37')];if(!_0x2d171d[_0xf5f2('0x31')]['hasOwnProperty'](_0xf5f2('0x38'))){_0x5a5b2b[_0xf5f2('0x21')]=qs['limit'](_0x2d171d[_0xf5f2('0x31')][_0xf5f2('0x21')]);_0x5a5b2b[_0xf5f2('0x20')]=qs[_0xf5f2('0x20')](_0x2d171d['query'][_0xf5f2('0x20')]);}return _0x4cce08[_0xf5f2('0x57')](_0x5a5b2b);}})[_0xf5f2('0x27')](function(_0x2adeb4){if(_0x2adeb4){return _0x2adeb4?{'count':_0x410866,'rows':_0x2adeb4}:null;}})[_0xf5f2('0x27')](respondWithResult(_0xb39a6e,null))['catch'](handleError(_0xb39a6e,null));};
\ No newline at end of file
index 69c4614..1088d86 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b6f=['remove','emit','hasOwnProperty','hook','exports','events','../../mysqldb','SquareProject','setMaxListeners','update'];(function(_0x288213,_0xf3e707){var _0x2ecee0=function(_0x37e246){while(--_0x37e246){_0x288213['push'](_0x288213['shift']());}};_0x2ecee0(++_0xf3e707);}(_0x8b6f,0x177));var _0xf8b6=function(_0x272d90,_0x5e70ff){_0x272d90=_0x272d90-0x0;var _0x2bf4a2=_0x8b6f[_0x272d90];return _0x2bf4a2;};'use strict';var EventEmitter=require(_0xf8b6('0x0'));var SquareProject=require(_0xf8b6('0x1'))['db'][_0xf8b6('0x2')];var SquareProjectEvents=new EventEmitter();SquareProjectEvents[_0xf8b6('0x3')](0x0);var events={'afterCreate':'save','afterUpdate':_0xf8b6('0x4'),'afterDestroy':_0xf8b6('0x5')};function emitEvent(_0x487c04){return function(_0x5e81e6,_0x4f1b95,_0x28d940){SquareProjectEvents[_0xf8b6('0x6')](_0x487c04+':'+_0x5e81e6['id'],_0x5e81e6);SquareProjectEvents[_0xf8b6('0x6')](_0x487c04,_0x5e81e6);_0x28d940(null);};}for(var e in events){if(events[_0xf8b6('0x7')](e)){var event=events[e];SquareProject[_0xf8b6('0x8')](e,emitEvent(event));}}module[_0xf8b6('0x9')]=SquareProjectEvents;
\ No newline at end of file
+var _0xe1b8=['../../mysqldb','SquareProject','save','update','hook','exports','events'];(function(_0x41d02a,_0x355e19){var _0x4c3983=function(_0x4802a7){while(--_0x4802a7){_0x41d02a['push'](_0x41d02a['shift']());}};_0x4c3983(++_0x355e19);}(_0xe1b8,0x110));var _0x8e1b=function(_0x482bd5,_0x5ab157){_0x482bd5=_0x482bd5-0x0;var _0x3073d2=_0xe1b8[_0x482bd5];return _0x3073d2;};'use strict';var EventEmitter=require(_0x8e1b('0x0'));var SquareProject=require(_0x8e1b('0x1'))['db'][_0x8e1b('0x2')];var SquareProjectEvents=new EventEmitter();SquareProjectEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x8e1b('0x3'),'afterUpdate':_0x8e1b('0x4'),'afterDestroy':'remove'};function emitEvent(_0x299f25){return function(_0xdc223d,_0x56d991,_0x557856){SquareProjectEvents['emit'](_0x299f25+':'+_0xdc223d['id'],_0xdc223d);SquareProjectEvents['emit'](_0x299f25,_0xdc223d);_0x557856(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];SquareProject[_0x8e1b('0x5')](e,emitEvent(event));}}module[_0x8e1b('0x6')]=SquareProjectEvents;
\ No newline at end of file
index 4cb3a7d..b710a3f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6610=['define','square_projects','lodash','moment','bluebird','request-promise','./squareProject.attributes','exports'];(function(_0xa464c9,_0x7c86d8){var _0x3d73c4=function(_0x5c2056){while(--_0x5c2056){_0xa464c9['push'](_0xa464c9['shift']());}};_0x3d73c4(++_0x7c86d8);}(_0x6610,0x152));var _0x0661=function(_0x137ae5,_0x38c847){_0x137ae5=_0x137ae5-0x0;var _0x10ae10=_0x6610[_0x137ae5];return _0x10ae10;};'use strict';var _=require(_0x0661('0x0'));var util=require('util');var logger=require('../../config/logger')('api');var moment=require(_0x0661('0x1'));var BPromise=require(_0x0661('0x2'));var rp=require(_0x0661('0x3'));var attributes=require(_0x0661('0x4'));module[_0x0661('0x5')]=function(_0x7a4fb3,_0x38b6ce){return _0x7a4fb3[_0x0661('0x6')]('SquareProject',attributes,{'tableName':_0x0661('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x8fdc=['util','api','moment','request-promise','./squareProject.attributes','exports','define','SquareProject','square_projects'];(function(_0x391fc7,_0x61b906){var _0xb16669=function(_0x525d14){while(--_0x525d14){_0x391fc7['push'](_0x391fc7['shift']());}};_0xb16669(++_0x61b906);}(_0x8fdc,0x195));var _0xc8fd=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x8fdc[_0x3bf83f];return _0x22c4a9;};'use strict';var _=require('lodash');var util=require(_0xc8fd('0x0'));var logger=require('../../config/logger')(_0xc8fd('0x1'));var moment=require(_0xc8fd('0x2'));var BPromise=require('bluebird');var rp=require(_0xc8fd('0x3'));var attributes=require(_0xc8fd('0x4'));module[_0xc8fd('0x5')]=function(_0x53dd8b,_0x2a2ce7){return _0x53dd8b[_0xc8fd('0x6')](_0xc8fd('0x7'),attributes,{'tableName':_0xc8fd('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 1f35679..42c4126 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(_0x2eeb31,_0x4917f5){var _0x13f89b=function(_0x5cc746){while(--_0x5cc746){_0x2eeb31['push'](_0x2eeb31['shift']());}};_0x13f89b(++_0x4917f5);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5c351c,_0x2046d8){_0x5c351c=_0x5c351c-0x0;var _0x26f3b3=_0xa9e0[_0x5c351c];return _0x26f3b3;};'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(_0x3cbc22,_0x1edc01){var _0xa0e2ae=function(_0x232b41){while(--_0x232b41){_0x3cbc22['push'](_0x3cbc22['shift']());}};_0xa0e2ae(++_0x1edc01);}(_0xa9e0,0x123));var _0x0a9e=function(_0x484e36,_0x4482d8){_0x484e36=_0x484e36-0x0;var _0xafc85d=_0xa9e0[_0x484e36];return _0xafc85d;};'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 30657fb..40cc8af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8bdf=['./squareProject.events','save','remove','update','emit','removeListener','register','length','squareProject:'];(function(_0x565658,_0xd0c820){var _0x351451=function(_0x415c89){while(--_0x415c89){_0x565658['push'](_0x565658['shift']());}};_0x351451(++_0xd0c820);}(_0x8bdf,0x1a7));var _0xf8bd=function(_0xefd519,_0xc62635){_0xefd519=_0xefd519-0x0;var _0x4bb882=_0x8bdf[_0xefd519];return _0x4bb882;};'use strict';var SquareProjectEvents=require(_0xf8bd('0x0'));var events=[_0xf8bd('0x1'),_0xf8bd('0x2'),_0xf8bd('0x3')];function createListener(_0x336d9f,_0x57e7be){return function(_0x35ddcf){_0x57e7be[_0xf8bd('0x4')](_0x336d9f,_0x35ddcf);};}function removeListener(_0x147fea,_0x3b32a1){return function(){SquareProjectEvents[_0xf8bd('0x5')](_0x147fea,_0x3b32a1);};}exports[_0xf8bd('0x6')]=function(_0x59eff9){for(var _0x4ed701=0x0,_0x504c82=events[_0xf8bd('0x7')];_0x4ed701<_0x504c82;_0x4ed701++){var _0x22a277=events[_0x4ed701];var _0x3e1db1=createListener(_0xf8bd('0x8')+_0x22a277,_0x59eff9);SquareProjectEvents['on'](_0x22a277,_0x3e1db1);}};
\ No newline at end of file
+var _0x1c42=['remove','update','emit','removeListener','register','length','save'];(function(_0x56857c,_0x4868cb){var _0x4027e7=function(_0x1b452f){while(--_0x1b452f){_0x56857c['push'](_0x56857c['shift']());}};_0x4027e7(++_0x4868cb);}(_0x1c42,0x13a));var _0x21c4=function(_0x109697,_0x3a2431){_0x109697=_0x109697-0x0;var _0x5c9058=_0x1c42[_0x109697];return _0x5c9058;};'use strict';var SquareProjectEvents=require('./squareProject.events');var events=[_0x21c4('0x0'),_0x21c4('0x1'),_0x21c4('0x2')];function createListener(_0x558257,_0x27cb4a){return function(_0x40bc3e){_0x27cb4a[_0x21c4('0x3')](_0x558257,_0x40bc3e);};}function removeListener(_0xd7340,_0x435179){return function(){SquareProjectEvents[_0x21c4('0x4')](_0xd7340,_0x435179);};}exports[_0x21c4('0x5')]=function(_0x8d4312){for(var _0x4fc4da=0x0,_0x247ec9=events[_0x21c4('0x6')];_0x4fc4da<_0x247ec9;_0x4fc4da++){var _0x54b2ea=events[_0x4fc4da];var _0x184e75=createListener('squareProject:'+_0x54b2ea,_0x8d4312);SquareProjectEvents['on'](_0x54b2ea,_0x184e75);}};
\ No newline at end of file
index 9fccc11..43bdf69 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd0bb=['express','../../components/auth/service','../../components/interaction/service','./squareRecording.controller','isAuthenticated','index','get','/:id','/:id/download','download','post','put','update','delete','destroy','exports','multer','util','path'];(function(_0x2cebe3,_0x4636e9){var _0x57010b=function(_0x3a8865){while(--_0x3a8865){_0x2cebe3['push'](_0x2cebe3['shift']());}};_0x57010b(++_0x4636e9);}(_0xd0bb,0x1eb));var _0xbd0b=function(_0x372590,_0x1ebb65){_0x372590=_0x372590-0x0;var _0x21abe6=_0xd0bb[_0x372590];return _0x21abe6;};'use strict';var multer=require(_0xbd0b('0x0'));var util=require(_0xbd0b('0x1'));var path=require(_0xbd0b('0x2'));var timeout=require('connect-timeout');var express=require(_0xbd0b('0x3'));var router=express['Router']();var auth=require(_0xbd0b('0x4'));var interaction=require(_0xbd0b('0x5'));var config=require('../../config/environment');var controller=require(_0xbd0b('0x6'));router['get']('/',auth[_0xbd0b('0x7')](),controller[_0xbd0b('0x8')]);router[_0xbd0b('0x9')](_0xbd0b('0xa'),auth[_0xbd0b('0x7')](),controller['show']);router[_0xbd0b('0x9')](_0xbd0b('0xb'),auth[_0xbd0b('0x7')](),controller[_0xbd0b('0xc')]);router[_0xbd0b('0xd')]('/',auth['isAuthenticated'](),controller['create']);router[_0xbd0b('0xe')](_0xbd0b('0xa'),auth['isAuthenticated'](),controller[_0xbd0b('0xf')]);router[_0xbd0b('0x10')]('/:id',auth[_0xbd0b('0x7')](),controller[_0xbd0b('0x11')]);module[_0xbd0b('0x12')]=router;
\ No newline at end of file
+var _0x5b78=['path','Router','../../components/interaction/service','../../config/environment','./squareRecording.controller','get','isAuthenticated','index','/:id','show','/:id/download','download','post','put','delete','exports','multer','util'];(function(_0x1dd0ad,_0xb5bff9){var _0x218d2e=function(_0x16f559){while(--_0x16f559){_0x1dd0ad['push'](_0x1dd0ad['shift']());}};_0x218d2e(++_0xb5bff9);}(_0x5b78,0xfa));var _0x85b7=function(_0x224312,_0x14c597){_0x224312=_0x224312-0x0;var _0x5457e8=_0x5b78[_0x224312];return _0x5457e8;};'use strict';var multer=require(_0x85b7('0x0'));var util=require(_0x85b7('0x1'));var path=require(_0x85b7('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x85b7('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x85b7('0x4'));var config=require(_0x85b7('0x5'));var controller=require(_0x85b7('0x6'));router[_0x85b7('0x7')]('/',auth[_0x85b7('0x8')](),controller[_0x85b7('0x9')]);router[_0x85b7('0x7')](_0x85b7('0xa'),auth['isAuthenticated'](),controller[_0x85b7('0xb')]);router[_0x85b7('0x7')](_0x85b7('0xc'),auth[_0x85b7('0x8')](),controller[_0x85b7('0xd')]);router[_0x85b7('0xe')]('/',auth['isAuthenticated'](),controller['create']);router[_0x85b7('0xf')](_0x85b7('0xa'),auth[_0x85b7('0x8')](),controller['update']);router[_0x85b7('0x10')](_0x85b7('0xa'),auth[_0x85b7('0x8')](),controller['destroy']);module[_0x85b7('0x11')]=router;
\ No newline at end of file
index 398185d..279ebc7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9bee=['STRING','sequelize','exports'];(function(_0xac8690,_0x7bd26a){var _0x17d499=function(_0x335752){while(--_0x335752){_0xac8690['push'](_0xac8690['shift']());}};_0x17d499(++_0x7bd26a);}(_0x9bee,0x1a2));var _0xe9be=function(_0x4ef734,_0x5826d){_0x4ef734=_0x4ef734-0x0;var _0x33a7cb=_0x9bee[_0x4ef734];return _0x33a7cb;};'use strict';var Sequelize=require(_0xe9be('0x0'));module[_0xe9be('0x1')]={'uniqueid':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize[_0xe9be('0x2')]},'calleridname':{'type':Sequelize[_0xe9be('0x2')]},'context':{'type':Sequelize['STRING']},'extension':{'type':Sequelize[_0xe9be('0x2')]},'priority':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize['STRING']},'dnid':{'type':Sequelize[_0xe9be('0x2')]},'projectName':{'type':Sequelize[_0xe9be('0x2')]},'saveName':{'type':Sequelize[_0xe9be('0x2')]},'filename':{'type':Sequelize['STRING']},'savePath':{'type':Sequelize[_0xe9be('0x2')]}};
\ No newline at end of file
+var _0x6178=['sequelize','exports','STRING'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x6178,0x1ef));var _0x8617=function(_0x10c08e,_0x161efb){_0x10c08e=_0x10c08e-0x0;var _0x326e1a=_0x6178[_0x10c08e];return _0x326e1a;};'use strict';var Sequelize=require(_0x8617('0x0'));module[_0x8617('0x1')]={'uniqueid':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize['STRING']},'context':{'type':Sequelize['STRING']},'extension':{'type':Sequelize[_0x8617('0x2')]},'priority':{'type':Sequelize[_0x8617('0x2')]},'accountcode':{'type':Sequelize['STRING']},'dnid':{'type':Sequelize[_0x8617('0x2')]},'projectName':{'type':Sequelize['STRING']},'saveName':{'type':Sequelize[_0x8617('0x2')]},'filename':{'type':Sequelize['STRING']},'savePath':{'type':Sequelize[_0x8617('0x2')]}};
\ No newline at end of file
index 8284d65..e93e39e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x044c=['rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','key','field','options','includeAll','include','findAll','catch','show','find','create','body','update','params','destroy','download','../../components/encryptor','type','uniqueid','savePath','filename','format','%s.cypher','value','existsSync','decryptFile','secrets','recording','ValidationError','SquareRecording\x20not\x20found','unlink','html-pdf','rimraf','zip-dir','request-promise','mustache','util','path','sox','to-csv','ejs','lodash','squel','desk.js','querystring','papaparse','ioredis','api','../../config/utils','../../config/environment','sendStatus','status','json','count','offset','limit','set','apply','then','end','error','stack','name','index','SquareRecording'];(function(_0x220005,_0x5a7b54){var _0x3b0496=function(_0x355ef2){while(--_0x355ef2){_0x220005['push'](_0x220005['shift']());}};_0x3b0496(++_0x5a7b54);}(_0x044c,0xd4));var _0xc044=function(_0xaf68ee,_0x3a10de){_0xaf68ee=_0xaf68ee-0x0;var _0x1c5594=_0x044c[_0xaf68ee];return _0x1c5594;};'use strict';var pdf=require(_0xc044('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xc044('0x1'));var zipdir=require(_0xc044('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xc044('0x3'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xc044('0x4'));var util=require(_0xc044('0x5'));var path=require(_0xc044('0x6'));var sox=require(_0xc044('0x7'));var csv=require(_0xc044('0x8'));var ejs=require(_0xc044('0x9'));var fs=require('fs');var _=require(_0xc044('0xa'));var squel=require(_0xc044('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0xc044('0xc'));var toCsv=require(_0xc044('0x8'));var querystring=require(_0xc044('0xd'));var Papa=require(_0xc044('0xe'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0xc044('0xf'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0xc044('0x10'));var utils=require(_0xc044('0x11'));var config=require(_0xc044('0x12'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x441cbe,_0xd1b087){_0xd1b087=_0xd1b087||0xcc;return function(_0x23c697){if(_0x23c697){return _0x441cbe[_0xc044('0x13')](_0xd1b087);}return _0x441cbe[_0xc044('0x14')](_0xd1b087)['end']();};}function respondWithResult(_0xd6e135,_0x15a82b){_0x15a82b=_0x15a82b||0xc8;return function(_0xda9a7a){if(_0xda9a7a){return _0xd6e135['status'](_0x15a82b)[_0xc044('0x15')](_0xda9a7a);}};}function respondWithFilteredResult(_0x4c2e90,_0x4f843f){return function(_0x51e803){if(_0x51e803){var _0x4afbfb=_0x51e803[_0xc044('0x16')],_0x58f7ea=_0x4f843f['offset'],_0x2eff28=_0x4f843f[_0xc044('0x17')]+_0x4f843f[_0xc044('0x18')],_0x41f3d6;if(_0x2eff28>=_0x4afbfb){_0x2eff28=_0x4afbfb;_0x41f3d6=0xc8;}else{_0x41f3d6=0xce;}_0x4c2e90[_0xc044('0x14')](_0x41f3d6);return _0x4c2e90[_0xc044('0x19')]('Content-Range',_0x58f7ea+'-'+_0x2eff28+'/'+_0x4afbfb)[_0xc044('0x15')](_0x51e803);}return null;};}function patchUpdates(_0x15c57b){return function(_0x518076){try{jsonpatch[_0xc044('0x1a')](_0x518076,_0x15c57b,!![]);}catch(_0x3d24c8){return BPromise['reject'](_0x3d24c8);}return _0x518076['save']();};}function saveUpdates(_0x5a10a8,_0x5db10e){return function(_0x26cd9c){if(_0x26cd9c){return _0x26cd9c['update'](_0x5a10a8)['then'](function(_0xe1adcb){return _0xe1adcb;});}return null;};}function removeEntity(_0x16889d,_0x8b472d){return function(_0x96806){if(_0x96806){return _0x96806['destroy']()[_0xc044('0x1b')](function(){_0x16889d['status'](0xcc)[_0xc044('0x1c')]();});}};}function handleEntityNotFound(_0xf0ff85,_0x22800b){return function(_0xc97ab9){if(!_0xc97ab9){_0xf0ff85['sendStatus'](0x194);}return _0xc97ab9;};}function handleError(_0xf469e6,_0x354577){_0x354577=_0x354577||0x1f4;return function(_0x1b60ac){logger[_0xc044('0x1d')](_0x1b60ac[_0xc044('0x1e')]);if(_0x1b60ac[_0xc044('0x1f')]){delete _0x1b60ac[_0xc044('0x1f')];}_0xf469e6[_0xc044('0x14')](_0x354577)['send'](_0x1b60ac);};}exports[_0xc044('0x20')]=function(_0x32595b,_0x5a0925){var _0x4ed131={},_0x5a1fca={},_0x47596a={'count':0x0,'rows':[]};var _0x3bb3f8=db[_0xc044('0x21')][_0xc044('0x22')];_0x5a1fca[_0xc044('0x23')]=_['keys'](_0x3bb3f8);_0x5a1fca[_0xc044('0x24')]=_[_0xc044('0x25')](_0x32595b[_0xc044('0x24')]);_0x5a1fca[_0xc044('0x26')]=_[_0xc044('0x27')](_0x5a1fca[_0xc044('0x23')],_0x5a1fca['query']);_0x4ed131[_0xc044('0x28')]=_[_0xc044('0x27')](_0x5a1fca['model'],qs[_0xc044('0x29')](_0x32595b['query'][_0xc044('0x29')]));_0x4ed131[_0xc044('0x28')]=_0x4ed131[_0xc044('0x28')][_0xc044('0x2a')]?_0x4ed131[_0xc044('0x28')]:_0x5a1fca['model'];if(!_0x32595b[_0xc044('0x24')][_0xc044('0x2b')](_0xc044('0x2c'))){_0x4ed131[_0xc044('0x18')]=qs[_0xc044('0x18')](_0x32595b['query'][_0xc044('0x18')]);_0x4ed131[_0xc044('0x17')]=qs[_0xc044('0x17')](_0x32595b[_0xc044('0x24')][_0xc044('0x17')]);}_0x4ed131[_0xc044('0x2d')]=qs[_0xc044('0x2e')](_0x32595b[_0xc044('0x24')][_0xc044('0x2e')]);_0x4ed131['where']=qs[_0xc044('0x26')](_[_0xc044('0x2f')](_0x32595b['query'],_0x5a1fca[_0xc044('0x26')]));if(_0x32595b['query'][_0xc044('0x30')]){_0x4ed131[_0xc044('0x31')]=_[_0xc044('0x32')](_0x4ed131[_0xc044('0x31')],{'$or':_[_0xc044('0x33')](_0x3bb3f8,function(_0x1a19ae){if(_0x1a19ae['type'][_0xc044('0x34')]!=='VIRTUAL'){var _0x4daa5c={};_0x4daa5c[_0x1a19ae[_0xc044('0x35')]]={'$like':'%'+_0x32595b[_0xc044('0x24')]['filter']+'%'};return _0x4daa5c;}})});}_0x4ed131=_[_0xc044('0x32')]({},_0x4ed131,_0x32595b[_0xc044('0x36')]);var _0x1b7b82={'where':_0x4ed131[_0xc044('0x31')]};return db[_0xc044('0x21')][_0xc044('0x16')](_0x1b7b82)[_0xc044('0x1b')](function(_0x4c4cf0){_0x47596a['count']=_0x4c4cf0;if(_0x32595b[_0xc044('0x24')][_0xc044('0x37')]){_0x4ed131[_0xc044('0x38')]=[{'all':!![]}];}return db[_0xc044('0x21')][_0xc044('0x39')](_0x4ed131);})['then'](function(_0x38caac){_0x47596a['rows']=_0x38caac;return _0x47596a;})[_0xc044('0x1b')](respondWithFilteredResult(_0x5a0925,_0x4ed131))[_0xc044('0x3a')](handleError(_0x5a0925,null));};exports[_0xc044('0x3b')]=function(_0xb73a2d,_0x19aa2d){var _0x759a0b={'raw':!![],'where':{'id':_0xb73a2d['params']['id']}},_0x40b75d={};_0x40b75d[_0xc044('0x23')]=_[_0xc044('0x25')](db[_0xc044('0x21')][_0xc044('0x22')]);_0x40b75d[_0xc044('0x24')]=_[_0xc044('0x25')](_0xb73a2d[_0xc044('0x24')]);_0x40b75d['filters']=_['intersection'](_0x40b75d['model'],_0x40b75d[_0xc044('0x24')]);_0x759a0b[_0xc044('0x28')]=_[_0xc044('0x27')](_0x40b75d[_0xc044('0x23')],qs[_0xc044('0x29')](_0xb73a2d['query']['fields']));_0x759a0b['attributes']=_0x759a0b[_0xc044('0x28')]['length']?_0x759a0b[_0xc044('0x28')]:_0x40b75d['model'];if(_0xb73a2d['query'][_0xc044('0x37')]){_0x759a0b[_0xc044('0x38')]=[{'all':!![]}];}_0x759a0b=_[_0xc044('0x32')]({},_0x759a0b,_0xb73a2d[_0xc044('0x36')]);return db[_0xc044('0x21')][_0xc044('0x3c')](_0x759a0b)['then'](handleEntityNotFound(_0x19aa2d,null))[_0xc044('0x1b')](respondWithResult(_0x19aa2d,null))['catch'](handleError(_0x19aa2d,null));};exports[_0xc044('0x3d')]=function(_0x50e4d7,_0x2d7c48){return db[_0xc044('0x21')]['create'](_0x50e4d7[_0xc044('0x3e')],{})[_0xc044('0x1b')](respondWithResult(_0x2d7c48,0xc9))[_0xc044('0x3a')](handleError(_0x2d7c48,null));};exports[_0xc044('0x3f')]=function(_0x5acc16,_0x3b4720){if(_0x5acc16[_0xc044('0x3e')]['id']){delete _0x5acc16[_0xc044('0x3e')]['id'];}return db[_0xc044('0x21')]['find']({'where':{'id':_0x5acc16[_0xc044('0x40')]['id']}})[_0xc044('0x1b')](handleEntityNotFound(_0x3b4720,null))[_0xc044('0x1b')](saveUpdates(_0x5acc16['body'],null))[_0xc044('0x1b')](respondWithResult(_0x3b4720,null))[_0xc044('0x3a')](handleError(_0x3b4720,null));};exports[_0xc044('0x41')]=function(_0x18cdd0,_0x275dec){return db[_0xc044('0x21')][_0xc044('0x3c')]({'where':{'id':_0x18cdd0[_0xc044('0x40')]['id']}})['then'](handleEntityNotFound(_0x275dec,null))[_0xc044('0x1b')](removeEntity(_0x275dec,null))[_0xc044('0x3a')](handleError(_0x275dec,null));};exports[_0xc044('0x42')]=function(_0xa01106,_0x305639,_0x82042f){var _0xab590c=require(_0xc044('0x43'));var _0x4f1ebe=![];var _0x48abfb={};if(_0xa01106[_0xc044('0x24')][_0xc044('0x44')]&&_0xa01106[_0xc044('0x24')][_0xc044('0x44')]===_0xc044('0x45')){_0x48abfb[_0xc044('0x45')]=_0xa01106[_0xc044('0x40')]['id'];}else{_0x48abfb['id']=_0xa01106['params']['id'];}return db[_0xc044('0x21')][_0xc044('0x3c')]({'where':_0x48abfb,'attributes':['id',_0xc044('0x46'),_0xc044('0x47')],'raw':!![]})[_0xc044('0x1b')](handleEntityNotFound(_0x305639,null))[_0xc044('0x1b')](function(_0x4a544d){if(_0x4a544d){var _0x852ef8=util[_0xc044('0x48')](_0xc044('0x49'),_0x4a544d[_0xc044('0x4a')]);if(fs[_0xc044('0x4b')](_0x852ef8)){_0x4f1ebe=!![];return _0xab590c[_0xc044('0x4c')](_0x852ef8,_0x4a544d[_0xc044('0x46')],config[_0xc044('0x4d')][_0xc044('0x4e')])[_0xc044('0x1b')](function(){return _0x4a544d;});}return _0x4a544d;}})['then'](function(_0x2d5a91){if(_0x2d5a91){if(!fs['existsSync'](_0x2d5a91['savePath'])){throw new db['Sequelize'][(_0xc044('0x4f'))](_0xc044('0x50'));}if(_0x2d5a91[_0xc044('0x47')]){return _0x305639[_0xc044('0x42')](_0x2d5a91[_0xc044('0x46')],_0x2d5a91[_0xc044('0x47')]+path['extname'](_0x2d5a91[_0xc044('0x46')]),function(){if(_0x4f1ebe){fs[_0xc044('0x51')](_0x2d5a91[_0xc044('0x46')]);}});}else{return _0x305639[_0xc044('0x42')](_0x2d5a91['savePath'],function(_0x5d6581){if(_0x4f1ebe){fs[_0xc044('0x51')](_0x2d5a91[_0xc044('0x46')]);}});}}})['catch'](handleError(_0x305639,null));};
\ No newline at end of file
+var _0x93df=['eml-format','rimraf','fast-json-patch','bluebird','mustache','sox','to-csv','ejs','squel','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','status','end','json','count','offset','limit','Content-Range','update','then','destroy','error','stack','name','index','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','order','sort','where','pick','key','filter','merge','options','SquareRecording','includeAll','include','findAll','rows','catch','show','params','rawAttributes','find','create','body','../../components/encryptor','type','uniqueid','savePath','format','%s.cypher','value','existsSync','decryptFile','recording','Sequelize','ValidationError','SquareRecording\x20not\x20found','filename','extname','download','unlink','html-pdf'];(function(_0x35b06d,_0x597b70){var _0x28d7ab=function(_0x9b9c74){while(--_0x9b9c74){_0x35b06d['push'](_0x35b06d['shift']());}};_0x28d7ab(++_0x597b70);}(_0x93df,0x1e5));var _0xf93d=function(_0x28972d,_0x5cd0ba){_0x28972d=_0x28972d-0x0;var _0x302084=_0x93df[_0x28972d];return _0x302084;};'use strict';var pdf=require(_0xf93d('0x0'));var emlformat=require(_0xf93d('0x1'));var rimraf=require(_0xf93d('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xf93d('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xf93d('0x4'));var Mustache=require(_0xf93d('0x5'));var util=require('util');var path=require('path');var sox=require(_0xf93d('0x6'));var csv=require(_0xf93d('0x7'));var ejs=require(_0xf93d('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xf93d('0x9'));var crypto=require('crypto');var jsforce=require(_0xf93d('0xa'));var deskjs=require(_0xf93d('0xb'));var toCsv=require(_0xf93d('0x7'));var querystring=require(_0xf93d('0xc'));var Papa=require(_0xf93d('0xd'));var authService=require('../../components/auth/service');var hardwareService=require(_0xf93d('0xe'));var Redis=require(_0xf93d('0xf'));var qs=require(_0xf93d('0x10'));var logger=require(_0xf93d('0x11'))(_0xf93d('0x12'));var utils=require('../../config/utils');var config=require(_0xf93d('0x13'));var db=require(_0xf93d('0x14'))['db'];function respondWithStatusCode(_0x8d82f5,_0x454cba){_0x454cba=_0x454cba||0xcc;return function(_0x59355b){if(_0x59355b){return _0x8d82f5['sendStatus'](_0x454cba);}return _0x8d82f5[_0xf93d('0x15')](_0x454cba)[_0xf93d('0x16')]();};}function respondWithResult(_0x397077,_0x1e1efc){_0x1e1efc=_0x1e1efc||0xc8;return function(_0xefad4c){if(_0xefad4c){return _0x397077[_0xf93d('0x15')](_0x1e1efc)[_0xf93d('0x17')](_0xefad4c);}};}function respondWithFilteredResult(_0x513c77,_0x4b8cf7){return function(_0x36c3a1){if(_0x36c3a1){var _0x92fe4b=_0x36c3a1[_0xf93d('0x18')],_0x30f9b0=_0x4b8cf7[_0xf93d('0x19')],_0x4159ff=_0x4b8cf7[_0xf93d('0x19')]+_0x4b8cf7[_0xf93d('0x1a')],_0x19ee66;if(_0x4159ff>=_0x92fe4b){_0x4159ff=_0x92fe4b;_0x19ee66=0xc8;}else{_0x19ee66=0xce;}_0x513c77[_0xf93d('0x15')](_0x19ee66);return _0x513c77['set'](_0xf93d('0x1b'),_0x30f9b0+'-'+_0x4159ff+'/'+_0x92fe4b)[_0xf93d('0x17')](_0x36c3a1);}return null;};}function patchUpdates(_0x331dcd){return function(_0x585ca0){try{jsonpatch['apply'](_0x585ca0,_0x331dcd,!![]);}catch(_0x197be0){return BPromise['reject'](_0x197be0);}return _0x585ca0['save']();};}function saveUpdates(_0x4ce97f,_0x1a2bec){return function(_0x51aab4){if(_0x51aab4){return _0x51aab4[_0xf93d('0x1c')](_0x4ce97f)[_0xf93d('0x1d')](function(_0x37ed87){return _0x37ed87;});}return null;};}function removeEntity(_0xf337f,_0x42da09){return function(_0x572c45){if(_0x572c45){return _0x572c45[_0xf93d('0x1e')]()[_0xf93d('0x1d')](function(){_0xf337f['status'](0xcc)[_0xf93d('0x16')]();});}};}function handleEntityNotFound(_0x1a0194,_0x63ea42){return function(_0x587c5e){if(!_0x587c5e){_0x1a0194['sendStatus'](0x194);}return _0x587c5e;};}function handleError(_0x4f49fc,_0x3de9a3){_0x3de9a3=_0x3de9a3||0x1f4;return function(_0x4428e6){logger[_0xf93d('0x1f')](_0x4428e6[_0xf93d('0x20')]);if(_0x4428e6[_0xf93d('0x21')]){delete _0x4428e6[_0xf93d('0x21')];}_0x4f49fc['status'](_0x3de9a3)['send'](_0x4428e6);};}exports[_0xf93d('0x22')]=function(_0x34eee9,_0xe5078){var _0x243760={},_0x5ecffc={},_0x443a3f={'count':0x0,'rows':[]};var _0x13189f=db['SquareRecording']['rawAttributes'];_0x5ecffc[_0xf93d('0x23')]=_[_0xf93d('0x24')](_0x13189f);_0x5ecffc[_0xf93d('0x25')]=_[_0xf93d('0x24')](_0x34eee9[_0xf93d('0x25')]);_0x5ecffc[_0xf93d('0x26')]=_[_0xf93d('0x27')](_0x5ecffc[_0xf93d('0x23')],_0x5ecffc['query']);_0x243760['attributes']=_[_0xf93d('0x27')](_0x5ecffc[_0xf93d('0x23')],qs[_0xf93d('0x28')](_0x34eee9['query'][_0xf93d('0x28')]));_0x243760[_0xf93d('0x29')]=_0x243760[_0xf93d('0x29')][_0xf93d('0x2a')]?_0x243760['attributes']:_0x5ecffc[_0xf93d('0x23')];if(!_0x34eee9['query'][_0xf93d('0x2b')]('nolimit')){_0x243760[_0xf93d('0x1a')]=qs['limit'](_0x34eee9[_0xf93d('0x25')][_0xf93d('0x1a')]);_0x243760[_0xf93d('0x19')]=qs[_0xf93d('0x19')](_0x34eee9[_0xf93d('0x25')][_0xf93d('0x19')]);}_0x243760[_0xf93d('0x2c')]=qs[_0xf93d('0x2d')](_0x34eee9[_0xf93d('0x25')][_0xf93d('0x2d')]);_0x243760[_0xf93d('0x2e')]=qs[_0xf93d('0x26')](_[_0xf93d('0x2f')](_0x34eee9[_0xf93d('0x25')],_0x5ecffc['filters']));if(_0x34eee9[_0xf93d('0x25')]['filter']){_0x243760[_0xf93d('0x2e')]=_['merge'](_0x243760[_0xf93d('0x2e')],{'$or':_['map'](_0x13189f,function(_0x3a53c6){if(_0x3a53c6['type'][_0xf93d('0x30')]!=='VIRTUAL'){var _0x302e56={};_0x302e56[_0x3a53c6['field']]={'$like':'%'+_0x34eee9[_0xf93d('0x25')][_0xf93d('0x31')]+'%'};return _0x302e56;}})});}_0x243760=_[_0xf93d('0x32')]({},_0x243760,_0x34eee9[_0xf93d('0x33')]);var _0x15f078={'where':_0x243760[_0xf93d('0x2e')]};return db[_0xf93d('0x34')]['count'](_0x15f078)[_0xf93d('0x1d')](function(_0x41a5f8){_0x443a3f[_0xf93d('0x18')]=_0x41a5f8;if(_0x34eee9[_0xf93d('0x25')][_0xf93d('0x35')]){_0x243760[_0xf93d('0x36')]=[{'all':!![]}];}return db[_0xf93d('0x34')][_0xf93d('0x37')](_0x243760);})[_0xf93d('0x1d')](function(_0x29abd7){_0x443a3f[_0xf93d('0x38')]=_0x29abd7;return _0x443a3f;})['then'](respondWithFilteredResult(_0xe5078,_0x243760))[_0xf93d('0x39')](handleError(_0xe5078,null));};exports[_0xf93d('0x3a')]=function(_0x33afd9,_0x115ebf){var _0x2eb908={'raw':!![],'where':{'id':_0x33afd9[_0xf93d('0x3b')]['id']}},_0x586f43={};_0x586f43['model']=_['keys'](db[_0xf93d('0x34')][_0xf93d('0x3c')]);_0x586f43[_0xf93d('0x25')]=_['keys'](_0x33afd9['query']);_0x586f43[_0xf93d('0x26')]=_[_0xf93d('0x27')](_0x586f43['model'],_0x586f43[_0xf93d('0x25')]);_0x2eb908[_0xf93d('0x29')]=_[_0xf93d('0x27')](_0x586f43[_0xf93d('0x23')],qs[_0xf93d('0x28')](_0x33afd9[_0xf93d('0x25')][_0xf93d('0x28')]));_0x2eb908[_0xf93d('0x29')]=_0x2eb908[_0xf93d('0x29')]['length']?_0x2eb908[_0xf93d('0x29')]:_0x586f43[_0xf93d('0x23')];if(_0x33afd9[_0xf93d('0x25')][_0xf93d('0x35')]){_0x2eb908['include']=[{'all':!![]}];}_0x2eb908=_['merge']({},_0x2eb908,_0x33afd9[_0xf93d('0x33')]);return db['SquareRecording'][_0xf93d('0x3d')](_0x2eb908)[_0xf93d('0x1d')](handleEntityNotFound(_0x115ebf,null))[_0xf93d('0x1d')](respondWithResult(_0x115ebf,null))[_0xf93d('0x39')](handleError(_0x115ebf,null));};exports[_0xf93d('0x3e')]=function(_0x4a1fea,_0x4a282b){return db['SquareRecording'][_0xf93d('0x3e')](_0x4a1fea[_0xf93d('0x3f')],{})['then'](respondWithResult(_0x4a282b,0xc9))[_0xf93d('0x39')](handleError(_0x4a282b,null));};exports[_0xf93d('0x1c')]=function(_0x5b359d,_0x26ce23){if(_0x5b359d[_0xf93d('0x3f')]['id']){delete _0x5b359d[_0xf93d('0x3f')]['id'];}return db[_0xf93d('0x34')][_0xf93d('0x3d')]({'where':{'id':_0x5b359d[_0xf93d('0x3b')]['id']}})[_0xf93d('0x1d')](handleEntityNotFound(_0x26ce23,null))[_0xf93d('0x1d')](saveUpdates(_0x5b359d['body'],null))[_0xf93d('0x1d')](respondWithResult(_0x26ce23,null))[_0xf93d('0x39')](handleError(_0x26ce23,null));};exports[_0xf93d('0x1e')]=function(_0x321c61,_0x4010a8){return db[_0xf93d('0x34')][_0xf93d('0x3d')]({'where':{'id':_0x321c61[_0xf93d('0x3b')]['id']}})['then'](handleEntityNotFound(_0x4010a8,null))[_0xf93d('0x1d')](removeEntity(_0x4010a8,null))[_0xf93d('0x39')](handleError(_0x4010a8,null));};exports['download']=function(_0x54611f,_0x1aa6b3,_0x4c8699){var _0x32f15a=require(_0xf93d('0x40'));var _0x4278fa=![];var _0x30b3ba={};if(_0x54611f[_0xf93d('0x25')][_0xf93d('0x41')]&&_0x54611f[_0xf93d('0x25')][_0xf93d('0x41')]===_0xf93d('0x42')){_0x30b3ba['uniqueid']=_0x54611f[_0xf93d('0x3b')]['id'];}else{_0x30b3ba['id']=_0x54611f[_0xf93d('0x3b')]['id'];}return db[_0xf93d('0x34')][_0xf93d('0x3d')]({'where':_0x30b3ba,'attributes':['id',_0xf93d('0x43'),'filename'],'raw':!![]})['then'](handleEntityNotFound(_0x1aa6b3,null))[_0xf93d('0x1d')](function(_0x48dc0b){if(_0x48dc0b){var _0x2b221c=util[_0xf93d('0x44')](_0xf93d('0x45'),_0x48dc0b[_0xf93d('0x46')]);if(fs[_0xf93d('0x47')](_0x2b221c)){_0x4278fa=!![];return _0x32f15a[_0xf93d('0x48')](_0x2b221c,_0x48dc0b['savePath'],config['secrets'][_0xf93d('0x49')])[_0xf93d('0x1d')](function(){return _0x48dc0b;});}return _0x48dc0b;}})[_0xf93d('0x1d')](function(_0x249cb2){if(_0x249cb2){if(!fs[_0xf93d('0x47')](_0x249cb2['savePath'])){throw new db[(_0xf93d('0x4a'))][(_0xf93d('0x4b'))](_0xf93d('0x4c'));}if(_0x249cb2[_0xf93d('0x4d')]){return _0x1aa6b3['download'](_0x249cb2[_0xf93d('0x43')],_0x249cb2['filename']+path[_0xf93d('0x4e')](_0x249cb2[_0xf93d('0x43')]),function(){if(_0x4278fa){fs['unlink'](_0x249cb2[_0xf93d('0x43')]);}});}else{return _0x1aa6b3[_0xf93d('0x4f')](_0x249cb2[_0xf93d('0x43')],function(_0x1b103b){if(_0x4278fa){fs[_0xf93d('0x50')](_0x249cb2[_0xf93d('0x43')]);}});}}})[_0xf93d('0x39')](handleError(_0x1aa6b3,null));};
\ No newline at end of file
index 228750c..b0f927e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd7ce=['define','SquareRecording','square_recordings','lodash','util','../../config/logger','api','request-promise'];(function(_0x42e8f3,_0x5c8dba){var _0x47feab=function(_0x35fbf7){while(--_0x35fbf7){_0x42e8f3['push'](_0x42e8f3['shift']());}};_0x47feab(++_0x5c8dba);}(_0xd7ce,0x16b));var _0xed7c=function(_0x420f2a,_0x2cc58d){_0x420f2a=_0x420f2a-0x0;var _0x28f802=_0xd7ce[_0x420f2a];return _0x28f802;};'use strict';var _=require(_0xed7c('0x0'));var util=require(_0xed7c('0x1'));var logger=require(_0xed7c('0x2'))(_0xed7c('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xed7c('0x4'));var attributes=require('./squareRecording.attributes');module['exports']=function(_0x587c5a,_0x17560f){return _0x587c5a[_0xed7c('0x5')](_0xed7c('0x6'),attributes,{'tableName':_0xed7c('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd13e=['./squareRecording.attributes','lodash','util','../../config/logger','api','bluebird'];(function(_0x11aee5,_0x27fa94){var _0x2e8c9d=function(_0x33ff83){while(--_0x33ff83){_0x11aee5['push'](_0x11aee5['shift']());}};_0x2e8c9d(++_0x27fa94);}(_0xd13e,0x193));var _0xed13=function(_0x2bb859,_0x5e5deb){_0x2bb859=_0x2bb859-0x0;var _0x41e778=_0xd13e[_0x2bb859];return _0x41e778;};'use strict';var _=require(_0xed13('0x0'));var util=require(_0xed13('0x1'));var logger=require(_0xed13('0x2'))(_0xed13('0x3'));var moment=require('moment');var BPromise=require(_0xed13('0x4'));var rp=require('request-promise');var attributes=require(_0xed13('0x5'));module['exports']=function(_0x46158d,_0xcba1c4){return _0x46158d['define']('SquareRecording',attributes,{'tableName':'square_recordings','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 9b2d630..8d3200b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0813=['raw','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','http','SquareRecording,\x20%s,\x20%s','request\x20sent','debug','SquareRecording,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','CreateSquareRecording','SquareRecording','body','options'];(function(_0x40701a,_0x3eea28){var _0x4e01f4=function(_0xc3aec6){while(--_0xc3aec6){_0x40701a['push'](_0x40701a['shift']());}};_0x4e01f4(++_0x3eea28);}(_0x0813,0xc5));var _0x3081=function(_0x3b9ca0,_0x56ef56){_0x3b9ca0=_0x3b9ca0-0x0;var _0x150b8e=_0x0813[_0x3b9ca0];return _0x150b8e;};'use strict';var _=require(_0x3081('0x0'));var util=require(_0x3081('0x1'));var moment=require(_0x3081('0x2'));var BPromise=require(_0x3081('0x3'));var rs=require(_0x3081('0x4'));var fs=require('fs');var Redis=require(_0x3081('0x5'));var db=require(_0x3081('0x6'))['db'];var utils=require(_0x3081('0x7'));var logger=require(_0x3081('0x8'))(_0x3081('0x9'));var config=require('../../config/environment');var jayson=require(_0x3081('0xa'));var client=jayson[_0x3081('0xb')][_0x3081('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x1f6919,_0x49ecec,_0x33bddd){return new BPromise(function(_0x230ee7,_0x421f85){return client['request'](_0x1f6919,_0x33bddd)['then'](function(_0x4f7580){logger['info'](_0x3081('0xd'),_0x49ecec,_0x3081('0xe'));logger[_0x3081('0xf')](_0x3081('0x10'),_0x49ecec,'request\x20sent',JSON[_0x3081('0x11')](_0x4f7580));if(_0x4f7580['error']){if(_0x4f7580[_0x3081('0x12')][_0x3081('0x13')]===0x1f4){logger['error'](_0x3081('0xd'),_0x49ecec,_0x4f7580['error'][_0x3081('0x14')]);return _0x421f85(_0x4f7580['error'][_0x3081('0x14')]);}logger[_0x3081('0x12')]('SquareRecording,\x20%s,\x20%s',_0x49ecec,_0x4f7580[_0x3081('0x12')]['message']);return _0x230ee7(_0x4f7580[_0x3081('0x12')][_0x3081('0x14')]);}else{logger[_0x3081('0x15')](_0x3081('0xd'),_0x49ecec,'request\x20sent');_0x230ee7(_0x4f7580['result'][_0x3081('0x14')]);}})[_0x3081('0x16')](function(_0x534882){logger[_0x3081('0x12')](_0x3081('0xd'),_0x49ecec,_0x534882);_0x421f85(_0x534882);});});}exports[_0x3081('0x17')]=function(_0x2b470f){var _0x4e194f=this;return new Promise(function(_0x93f5ad,_0x5bce51){return db[_0x3081('0x18')]['create'](_0x2b470f[_0x3081('0x19')],{'raw':_0x2b470f[_0x3081('0x1a')]?_0x2b470f['options'][_0x3081('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x245eff){logger['info']('CreateSquareRecording',_0x2b470f);logger[_0x3081('0xf')](_0x3081('0x17'),_0x2b470f,JSON['stringify'](_0x245eff));_0x93f5ad(_0x245eff);})[_0x3081('0x16')](function(_0x14c63e){logger[_0x3081('0x12')](_0x3081('0x17'),_0x14c63e[_0x3081('0x14')],_0x2b470f);_0x5bce51(_0x4e194f[_0x3081('0x12')](0x1f4,_0x14c63e[_0x3081('0x14')]));});});};
\ No newline at end of file
+var _0x99f6=['rpc','client','then','info','SquareRecording,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','SquareRecording','create','body','options','CreateSquareRecording','lodash','util','moment','randomstring','../../mysqldb'];(function(_0x32bc7f,_0x510da2){var _0x3049fd=function(_0x3ab939){while(--_0x3ab939){_0x32bc7f['push'](_0x32bc7f['shift']());}};_0x3049fd(++_0x510da2);}(_0x99f6,0xca));var _0x699f=function(_0x13f5a2,_0x435893){_0x13f5a2=_0x13f5a2-0x0;var _0x1c2719=_0x99f6[_0x13f5a2];return _0x1c2719;};'use strict';var _=require(_0x699f('0x0'));var util=require(_0x699f('0x1'));var moment=require(_0x699f('0x2'));var BPromise=require('bluebird');var rs=require(_0x699f('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x699f('0x4'))['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x699f('0x5'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x699f('0x6')]['http']({'port':0x232a});function respondWithRpcPromise(_0x581039,_0x24868d,_0x3b783e){return new BPromise(function(_0x29e700,_0x4d6c52){return client['request'](_0x581039,_0x3b783e)[_0x699f('0x7')](function(_0x16f6f4){logger[_0x699f('0x8')](_0x699f('0x9'),_0x24868d,_0x699f('0xa'));logger[_0x699f('0xb')]('SquareRecording,\x20%s,\x20%s,\x20%s',_0x24868d,_0x699f('0xa'),JSON[_0x699f('0xc')](_0x16f6f4));if(_0x16f6f4[_0x699f('0xd')]){if(_0x16f6f4[_0x699f('0xd')][_0x699f('0xe')]===0x1f4){logger['error']('SquareRecording,\x20%s,\x20%s',_0x24868d,_0x16f6f4[_0x699f('0xd')][_0x699f('0xf')]);return _0x4d6c52(_0x16f6f4[_0x699f('0xd')][_0x699f('0xf')]);}logger['error'](_0x699f('0x9'),_0x24868d,_0x16f6f4[_0x699f('0xd')][_0x699f('0xf')]);return _0x29e700(_0x16f6f4[_0x699f('0xd')][_0x699f('0xf')]);}else{logger[_0x699f('0x8')](_0x699f('0x9'),_0x24868d,'request\x20sent');_0x29e700(_0x16f6f4[_0x699f('0x10')]['message']);}})[_0x699f('0x11')](function(_0xc951e3){logger[_0x699f('0xd')](_0x699f('0x9'),_0x24868d,_0xc951e3);_0x4d6c52(_0xc951e3);});});}exports['CreateSquareRecording']=function(_0x32dc49){var _0x3eb208=this;return new Promise(function(_0xc75c97,_0x45efae){return db[_0x699f('0x12')][_0x699f('0x13')](_0x32dc49[_0x699f('0x14')],{'raw':_0x32dc49[_0x699f('0x15')]?_0x32dc49['options']['raw']===undefined?!![]:![]:!![]})['then'](function(_0x17511b){logger[_0x699f('0x8')]('CreateSquareRecording',_0x32dc49);logger[_0x699f('0xb')](_0x699f('0x16'),_0x32dc49,JSON[_0x699f('0xc')](_0x17511b));_0xc75c97(_0x17511b);})['catch'](function(_0x29fbfc){logger[_0x699f('0xd')](_0x699f('0x16'),_0x29fbfc[_0x699f('0xf')],_0x32dc49);_0x45efae(_0x3eb208[_0x699f('0xd')](0x1f4,_0x29fbfc[_0x699f('0xf')]));});});};
\ No newline at end of file
index b151357..db719a2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1c36=['/describe','describe','/:id','put','update','destroy','exports','multer','connect-timeout','express','Router','../../config/environment','./squareReport.controller','get','isAuthenticated','index'];(function(_0x346737,_0x3e6081){var _0x1ade2e=function(_0x15e50e){while(--_0x15e50e){_0x346737['push'](_0x346737['shift']());}};_0x1ade2e(++_0x3e6081);}(_0x1c36,0x67));var _0x61c3=function(_0x5b8b97,_0x6b4dfa){_0x5b8b97=_0x5b8b97-0x0;var _0x1fdf84=_0x1c36[_0x5b8b97];return _0x1fdf84;};'use strict';var multer=require(_0x61c3('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x61c3('0x1'));var express=require(_0x61c3('0x2'));var router=express[_0x61c3('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x61c3('0x4'));var controller=require(_0x61c3('0x5'));router[_0x61c3('0x6')]('/',auth[_0x61c3('0x7')](),controller[_0x61c3('0x8')]);router[_0x61c3('0x6')](_0x61c3('0x9'),auth['isAuthenticated'](),controller[_0x61c3('0xa')]);router['get'](_0x61c3('0xb'),auth[_0x61c3('0x7')](),controller['show']);router['post']('/',auth[_0x61c3('0x7')](),controller['create']);router[_0x61c3('0xc')](_0x61c3('0xb'),auth[_0x61c3('0x7')](),controller[_0x61c3('0xd')]);router['delete'](_0x61c3('0xb'),auth[_0x61c3('0x7')](),controller[_0x61c3('0xe')]);module[_0x61c3('0xf')]=router;
\ No newline at end of file
+var _0x1078=['isAuthenticated','/:id','show','post','create','put','update','delete','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareReport.controller','get'];(function(_0x40be86,_0x68fe5d){var _0xda3c3b=function(_0x39deab){while(--_0x39deab){_0x40be86['push'](_0x40be86['shift']());}};_0xda3c3b(++_0x68fe5d);}(_0x1078,0x10d));var _0x8107=function(_0x47b496,_0x34a7f7){_0x47b496=_0x47b496-0x0;var _0x250cda=_0x1078[_0x47b496];return _0x250cda;};'use strict';var multer=require(_0x8107('0x0'));var util=require(_0x8107('0x1'));var path=require(_0x8107('0x2'));var timeout=require(_0x8107('0x3'));var express=require(_0x8107('0x4'));var router=express[_0x8107('0x5')]();var auth=require(_0x8107('0x6'));var interaction=require(_0x8107('0x7'));var config=require(_0x8107('0x8'));var controller=require(_0x8107('0x9'));router[_0x8107('0xa')]('/',auth['isAuthenticated'](),controller['index']);router[_0x8107('0xa')]('/describe',auth[_0x8107('0xb')](),controller['describe']);router[_0x8107('0xa')](_0x8107('0xc'),auth['isAuthenticated'](),controller[_0x8107('0xd')]);router[_0x8107('0xe')]('/',auth[_0x8107('0xb')](),controller[_0x8107('0xf')]);router[_0x8107('0x10')](_0x8107('0xc'),auth[_0x8107('0xb')](),controller[_0x8107('0x11')]);router[_0x8107('0x12')]('/:id',auth['isAuthenticated'](),controller[_0x8107('0x13')]);module['exports']=router;
\ No newline at end of file
index 0b88648..ee382b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5bbd=['exports','STRING','DATE','BOOLEAN','sequelize'];(function(_0x1a97e2,_0x460b70){var _0x1cd0f0=function(_0x191d8b){while(--_0x191d8b){_0x1a97e2['push'](_0x1a97e2['shift']());}};_0x1cd0f0(++_0x460b70);}(_0x5bbd,0x12b));var _0xd5bb=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x5bbd[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xd5bb('0x0'));module[_0xd5bb('0x1')]={'network':{'type':Sequelize[_0xd5bb('0x2')]},'network_script':{'type':Sequelize[_0xd5bb('0x2')]},'request':{'type':Sequelize[_0xd5bb('0x2')]},'channel':{'type':Sequelize[_0xd5bb('0x2')]},'language':{'type':Sequelize[_0xd5bb('0x2')]},'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize['STRING']},'version':{'type':Sequelize['STRING']},'callerid':{'type':Sequelize[_0xd5bb('0x2')]},'calleridname':{'type':Sequelize[_0xd5bb('0x2')]},'callingpres':{'type':Sequelize['STRING']},'callingani2':{'type':Sequelize['STRING']},'callington':{'type':Sequelize[_0xd5bb('0x2')]},'callingtns':{'type':Sequelize['STRING']},'dnid':{'type':Sequelize[_0xd5bb('0x2')]},'rdnis':{'type':Sequelize[_0xd5bb('0x2')]},'context':{'type':Sequelize[_0xd5bb('0x2')]},'extension':{'type':Sequelize['STRING']},'priority':{'type':Sequelize['STRING']},'enhanced':{'type':Sequelize[_0xd5bb('0x2')]},'accountcode':{'type':Sequelize[_0xd5bb('0x2')]},'threadid':{'type':Sequelize[_0xd5bb('0x2')]},'project_name':{'type':Sequelize['STRING']},'joinAt':{'type':Sequelize[_0xd5bb('0x3')]},'leaveAt':{'type':Sequelize[_0xd5bb('0x3')]},'bot':{'type':Sequelize[_0xd5bb('0x4')],'defaultValue':![]}};
\ No newline at end of file
+var _0x20ce=['exports','STRING','DATE','BOOLEAN','sequelize'];(function(_0x442f3a,_0x1ac71a){var _0x3aee26=function(_0x291861){while(--_0x291861){_0x442f3a['push'](_0x442f3a['shift']());}};_0x3aee26(++_0x1ac71a);}(_0x20ce,0x10d));var _0xe20c=function(_0x4a4dca,_0x209ba0){_0x4a4dca=_0x4a4dca-0x0;var _0x2f2ab8=_0x20ce[_0x4a4dca];return _0x2f2ab8;};'use strict';var Sequelize=require(_0xe20c('0x0'));module[_0xe20c('0x1')]={'network':{'type':Sequelize[_0xe20c('0x2')]},'network_script':{'type':Sequelize['STRING']},'request':{'type':Sequelize[_0xe20c('0x2')]},'channel':{'type':Sequelize[_0xe20c('0x2')]},'language':{'type':Sequelize[_0xe20c('0x2')]},'type':{'type':Sequelize[_0xe20c('0x2')]},'uniqueid':{'type':Sequelize[_0xe20c('0x2')]},'version':{'type':Sequelize[_0xe20c('0x2')]},'callerid':{'type':Sequelize[_0xe20c('0x2')]},'calleridname':{'type':Sequelize[_0xe20c('0x2')]},'callingpres':{'type':Sequelize[_0xe20c('0x2')]},'callingani2':{'type':Sequelize[_0xe20c('0x2')]},'callington':{'type':Sequelize[_0xe20c('0x2')]},'callingtns':{'type':Sequelize[_0xe20c('0x2')]},'dnid':{'type':Sequelize[_0xe20c('0x2')]},'rdnis':{'type':Sequelize[_0xe20c('0x2')]},'context':{'type':Sequelize[_0xe20c('0x2')]},'extension':{'type':Sequelize[_0xe20c('0x2')]},'priority':{'type':Sequelize[_0xe20c('0x2')]},'enhanced':{'type':Sequelize[_0xe20c('0x2')]},'accountcode':{'type':Sequelize[_0xe20c('0x2')]},'threadid':{'type':Sequelize[_0xe20c('0x2')]},'project_name':{'type':Sequelize[_0xe20c('0x2')]},'joinAt':{'type':Sequelize[_0xe20c('0x3')]},'leaveAt':{'type':Sequelize[_0xe20c('0x3')]},'bot':{'type':Sequelize[_0xe20c('0x4')],'defaultValue':![]}};
\ No newline at end of file
index 0009e4d..070eb5a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3fe=['../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','count','offset','limit','apply','reject','save','update','then','error','stack','send','SquareReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','pick','merge','map','type','key','VIRTUAL','options','includeAll','include','findAll','catch','show','create','body','find','destroy','params','describe','html-pdf','eml-format','fast-json-patch','mustache','util','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse'];(function(_0x1fcf1b,_0x214549){var _0x5d2952=function(_0x3331b7){while(--_0x3331b7){_0x1fcf1b['push'](_0x1fcf1b['shift']());}};_0x5d2952(++_0x214549);}(_0xe3fe,0xbe));var _0xee3f=function(_0x195f2c,_0x3e0fa7){_0x195f2c=_0x195f2c-0x0;var _0x35d3fb=_0xe3fe[_0x195f2c];return _0x35d3fb;};'use strict';var pdf=require(_0xee3f('0x0'));var emlformat=require(_0xee3f('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0xee3f('0x2'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0xee3f('0x3'));var util=require(_0xee3f('0x4'));var path=require('path');var sox=require('sox');var csv=require(_0xee3f('0x5'));var ejs=require(_0xee3f('0x6'));var fs=require('fs');var _=require(_0xee3f('0x7'));var squel=require(_0xee3f('0x8'));var crypto=require(_0xee3f('0x9'));var jsforce=require(_0xee3f('0xa'));var deskjs=require(_0xee3f('0xb'));var toCsv=require(_0xee3f('0x5'));var querystring=require(_0xee3f('0xc'));var Papa=require(_0xee3f('0xd'));var authService=require(_0xee3f('0xe'));var hardwareService=require(_0xee3f('0xf'));var Redis=require('ioredis');var qs=require(_0xee3f('0x10'));var logger=require(_0xee3f('0x11'))(_0xee3f('0x12'));var utils=require(_0xee3f('0x13'));var config=require(_0xee3f('0x14'));var db=require(_0xee3f('0x15'))['db'];function respondWithStatusCode(_0x55f8ad,_0x4d4452){_0x4d4452=_0x4d4452||0xcc;return function(_0x3d4932){if(_0x3d4932){return _0x55f8ad[_0xee3f('0x16')](_0x4d4452);}return _0x55f8ad[_0xee3f('0x17')](_0x4d4452)[_0xee3f('0x18')]();};}function respondWithResult(_0x479387,_0x700836){_0x700836=_0x700836||0xc8;return function(_0x565351){if(_0x565351){return _0x479387[_0xee3f('0x17')](_0x700836)['json'](_0x565351);}};}function respondWithFilteredResult(_0x2ec836,_0x16bd44){return function(_0x22a286){if(_0x22a286){var _0xb8925c=_0x22a286[_0xee3f('0x19')],_0x5576a2=_0x16bd44[_0xee3f('0x1a')],_0x4931ac=_0x16bd44[_0xee3f('0x1a')]+_0x16bd44[_0xee3f('0x1b')],_0x2f27a9;if(_0x4931ac>=_0xb8925c){_0x4931ac=_0xb8925c;_0x2f27a9=0xc8;}else{_0x2f27a9=0xce;}_0x2ec836[_0xee3f('0x17')](_0x2f27a9);return _0x2ec836['set']('Content-Range',_0x5576a2+'-'+_0x4931ac+'/'+_0xb8925c)['json'](_0x22a286);}return null;};}function patchUpdates(_0x44f564){return function(_0xe94a9d){try{jsonpatch[_0xee3f('0x1c')](_0xe94a9d,_0x44f564,!![]);}catch(_0x49662f){return BPromise[_0xee3f('0x1d')](_0x49662f);}return _0xe94a9d[_0xee3f('0x1e')]();};}function saveUpdates(_0x1fe980,_0x31d72e){return function(_0x38cf28){if(_0x38cf28){return _0x38cf28[_0xee3f('0x1f')](_0x1fe980)[_0xee3f('0x20')](function(_0x9a1e70){return _0x9a1e70;});}return null;};}function removeEntity(_0x2edc04,_0x28cb21){return function(_0x400324){if(_0x400324){return _0x400324['destroy']()['then'](function(){_0x2edc04['status'](0xcc)[_0xee3f('0x18')]();});}};}function handleEntityNotFound(_0x40c5a2,_0x3d8216){return function(_0x509b0e){if(!_0x509b0e){_0x40c5a2['sendStatus'](0x194);}return _0x509b0e;};}function handleError(_0x2e26ad,_0x334229){_0x334229=_0x334229||0x1f4;return function(_0x5aa2ec){logger[_0xee3f('0x21')](_0x5aa2ec[_0xee3f('0x22')]);if(_0x5aa2ec['name']){delete _0x5aa2ec['name'];}_0x2e26ad[_0xee3f('0x17')](_0x334229)[_0xee3f('0x23')](_0x5aa2ec);};}exports['index']=function(_0x1c80c3,_0x16bfb3){var _0x43fa76={},_0x1630aa={},_0x1a8cf8={'count':0x0,'rows':[]};var _0x1129a8=db[_0xee3f('0x24')][_0xee3f('0x25')];_0x1630aa[_0xee3f('0x26')]=_[_0xee3f('0x27')](_0x1129a8);_0x1630aa[_0xee3f('0x28')]=_[_0xee3f('0x27')](_0x1c80c3[_0xee3f('0x28')]);_0x1630aa[_0xee3f('0x29')]=_[_0xee3f('0x2a')](_0x1630aa[_0xee3f('0x26')],_0x1630aa[_0xee3f('0x28')]);_0x43fa76[_0xee3f('0x2b')]=_['intersection'](_0x1630aa[_0xee3f('0x26')],qs[_0xee3f('0x2c')](_0x1c80c3[_0xee3f('0x28')][_0xee3f('0x2c')]));_0x43fa76['attributes']=_0x43fa76[_0xee3f('0x2b')][_0xee3f('0x2d')]?_0x43fa76[_0xee3f('0x2b')]:_0x1630aa[_0xee3f('0x26')];if(!_0x1c80c3[_0xee3f('0x28')][_0xee3f('0x2e')]('nolimit')){_0x43fa76[_0xee3f('0x1b')]=qs[_0xee3f('0x1b')](_0x1c80c3['query'][_0xee3f('0x1b')]);_0x43fa76['offset']=qs['offset'](_0x1c80c3[_0xee3f('0x28')][_0xee3f('0x1a')]);}_0x43fa76[_0xee3f('0x2f')]=qs[_0xee3f('0x30')](_0x1c80c3[_0xee3f('0x28')][_0xee3f('0x30')]);_0x43fa76[_0xee3f('0x31')]=qs[_0xee3f('0x29')](_[_0xee3f('0x32')](_0x1c80c3[_0xee3f('0x28')],_0x1630aa[_0xee3f('0x29')]));if(_0x1c80c3['query']['filter']){_0x43fa76['where']=_[_0xee3f('0x33')](_0x43fa76[_0xee3f('0x31')],{'$or':_[_0xee3f('0x34')](_0x1129a8,function(_0xc1902d){if(_0xc1902d[_0xee3f('0x35')][_0xee3f('0x36')]!==_0xee3f('0x37')){var _0x25dafb={};_0x25dafb[_0xc1902d['field']]={'$like':'%'+_0x1c80c3[_0xee3f('0x28')]['filter']+'%'};return _0x25dafb;}})});}_0x43fa76=_['merge']({},_0x43fa76,_0x1c80c3[_0xee3f('0x38')]);var _0x277b55={'where':_0x43fa76[_0xee3f('0x31')]};return db[_0xee3f('0x24')][_0xee3f('0x19')](_0x277b55)[_0xee3f('0x20')](function(_0x376c22){_0x1a8cf8[_0xee3f('0x19')]=_0x376c22;if(_0x1c80c3[_0xee3f('0x28')][_0xee3f('0x39')]){_0x43fa76[_0xee3f('0x3a')]=[{'all':!![]}];}return db[_0xee3f('0x24')][_0xee3f('0x3b')](_0x43fa76);})[_0xee3f('0x20')](function(_0x3bfef5){_0x1a8cf8['rows']=_0x3bfef5;return _0x1a8cf8;})[_0xee3f('0x20')](respondWithFilteredResult(_0x16bfb3,_0x43fa76))[_0xee3f('0x3c')](handleError(_0x16bfb3,null));};exports[_0xee3f('0x3d')]=function(_0x3bcc46,_0x3b31ec){var _0x19e0cc={'raw':!![],'where':{'id':_0x3bcc46['params']['id']}},_0x4ff40e={};_0x4ff40e['model']=_[_0xee3f('0x27')](db['SquareReport'][_0xee3f('0x25')]);_0x4ff40e[_0xee3f('0x28')]=_[_0xee3f('0x27')](_0x3bcc46[_0xee3f('0x28')]);_0x4ff40e[_0xee3f('0x29')]=_[_0xee3f('0x2a')](_0x4ff40e[_0xee3f('0x26')],_0x4ff40e['query']);_0x19e0cc['attributes']=_[_0xee3f('0x2a')](_0x4ff40e['model'],qs[_0xee3f('0x2c')](_0x3bcc46[_0xee3f('0x28')]['fields']));_0x19e0cc[_0xee3f('0x2b')]=_0x19e0cc[_0xee3f('0x2b')]['length']?_0x19e0cc[_0xee3f('0x2b')]:_0x4ff40e[_0xee3f('0x26')];if(_0x3bcc46['query']['includeAll']){_0x19e0cc[_0xee3f('0x3a')]=[{'all':!![]}];}_0x19e0cc=_[_0xee3f('0x33')]({},_0x19e0cc,_0x3bcc46[_0xee3f('0x38')]);return db[_0xee3f('0x24')]['find'](_0x19e0cc)[_0xee3f('0x20')](handleEntityNotFound(_0x3b31ec,null))[_0xee3f('0x20')](respondWithResult(_0x3b31ec,null))[_0xee3f('0x3c')](handleError(_0x3b31ec,null));};exports[_0xee3f('0x3e')]=function(_0x59f65e,_0x337a00){return db[_0xee3f('0x24')][_0xee3f('0x3e')](_0x59f65e[_0xee3f('0x3f')],{})[_0xee3f('0x20')](respondWithResult(_0x337a00,0xc9))[_0xee3f('0x3c')](handleError(_0x337a00,null));};exports[_0xee3f('0x1f')]=function(_0xf61c67,_0x1f5f9a){if(_0xf61c67[_0xee3f('0x3f')]['id']){delete _0xf61c67['body']['id'];}return db['SquareReport'][_0xee3f('0x40')]({'where':{'id':_0xf61c67['params']['id']}})['then'](handleEntityNotFound(_0x1f5f9a,null))[_0xee3f('0x20')](saveUpdates(_0xf61c67[_0xee3f('0x3f')],null))['then'](respondWithResult(_0x1f5f9a,null))[_0xee3f('0x3c')](handleError(_0x1f5f9a,null));};exports[_0xee3f('0x41')]=function(_0x1f6fcf,_0x371125){return db[_0xee3f('0x24')][_0xee3f('0x40')]({'where':{'id':_0x1f6fcf[_0xee3f('0x42')]['id']}})['then'](handleEntityNotFound(_0x371125,null))[_0xee3f('0x20')](removeEntity(_0x371125,null))[_0xee3f('0x3c')](handleError(_0x371125,null));};exports[_0xee3f('0x43')]=function(_0x5aa3cd,_0x44ba90){return db[_0xee3f('0x24')][_0xee3f('0x43')]()[_0xee3f('0x20')](respondWithResult(_0x44ba90,null))[_0xee3f('0x3c')](handleError(_0x44ba90,null));};
\ No newline at end of file
+var _0x209a=['sox','ejs','squel','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','update','destroy','then','name','send','index','SquareReport','rawAttributes','keys','query','filters','intersection','attributes','model','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','includeAll','rows','catch','show','params','length','include','find','create','body','describe','html-pdf','eml-format','rimraf','request-promise','moment','bluebird','mustache'];(function(_0x1f7928,_0x30e1c3){var _0x7b839d=function(_0x3f1b08){while(--_0x3f1b08){_0x1f7928['push'](_0x1f7928['shift']());}};_0x7b839d(++_0x30e1c3);}(_0x209a,0x85));var _0xa209=function(_0x2fb0b4,_0x13f9c7){_0x2fb0b4=_0x2fb0b4-0x0;var _0x14f866=_0x209a[_0x2fb0b4];return _0x14f866;};'use strict';var pdf=require(_0xa209('0x0'));var emlformat=require(_0xa209('0x1'));var rimraf=require(_0xa209('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xa209('0x3'));var moment=require(_0xa209('0x4'));var BPromise=require(_0xa209('0x5'));var Mustache=require(_0xa209('0x6'));var util=require('util');var path=require('path');var sox=require(_0xa209('0x7'));var csv=require('to-csv');var ejs=require(_0xa209('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xa209('0x9'));var crypto=require('crypto');var jsforce=require(_0xa209('0xa'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xa209('0xb'));var Papa=require(_0xa209('0xc'));var authService=require(_0xa209('0xd'));var hardwareService=require(_0xa209('0xe'));var Redis=require(_0xa209('0xf'));var qs=require('../../components/parsers/qs');var logger=require(_0xa209('0x10'))(_0xa209('0x11'));var utils=require(_0xa209('0x12'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2f7c5a,_0x1bbf7f){_0x1bbf7f=_0x1bbf7f||0xcc;return function(_0x1dfdd1){if(_0x1dfdd1){return _0x2f7c5a[_0xa209('0x13')](_0x1bbf7f);}return _0x2f7c5a[_0xa209('0x14')](_0x1bbf7f)[_0xa209('0x15')]();};}function respondWithResult(_0xa3c20d,_0x2b73ad){_0x2b73ad=_0x2b73ad||0xc8;return function(_0x489203){if(_0x489203){return _0xa3c20d[_0xa209('0x14')](_0x2b73ad)[_0xa209('0x16')](_0x489203);}};}function respondWithFilteredResult(_0x12ba2b,_0x109fcf){return function(_0x4eed34){if(_0x4eed34){var _0x5ded88=_0x4eed34[_0xa209('0x17')],_0x193642=_0x109fcf[_0xa209('0x18')],_0x240e96=_0x109fcf[_0xa209('0x18')]+_0x109fcf[_0xa209('0x19')],_0x2a6956;if(_0x240e96>=_0x5ded88){_0x240e96=_0x5ded88;_0x2a6956=0xc8;}else{_0x2a6956=0xce;}_0x12ba2b[_0xa209('0x14')](_0x2a6956);return _0x12ba2b[_0xa209('0x1a')]('Content-Range',_0x193642+'-'+_0x240e96+'/'+_0x5ded88)[_0xa209('0x16')](_0x4eed34);}return null;};}function patchUpdates(_0x159f01){return function(_0x29b369){try{jsonpatch[_0xa209('0x1b')](_0x29b369,_0x159f01,!![]);}catch(_0x282ebe){return BPromise[_0xa209('0x1c')](_0x282ebe);}return _0x29b369[_0xa209('0x1d')]();};}function saveUpdates(_0x12999b,_0x13320b){return function(_0x615c1){if(_0x615c1){return _0x615c1[_0xa209('0x1e')](_0x12999b)['then'](function(_0x1a5fdc){return _0x1a5fdc;});}return null;};}function removeEntity(_0x18a2da,_0x3a358b){return function(_0xc767a5){if(_0xc767a5){return _0xc767a5[_0xa209('0x1f')]()[_0xa209('0x20')](function(){_0x18a2da[_0xa209('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2c6212,_0x401264){return function(_0x5af689){if(!_0x5af689){_0x2c6212['sendStatus'](0x194);}return _0x5af689;};}function handleError(_0x2b32a3,_0x24b58f){_0x24b58f=_0x24b58f||0x1f4;return function(_0x101e74){logger['error'](_0x101e74['stack']);if(_0x101e74[_0xa209('0x21')]){delete _0x101e74['name'];}_0x2b32a3['status'](_0x24b58f)[_0xa209('0x22')](_0x101e74);};}exports[_0xa209('0x23')]=function(_0x1680d3,_0xb57170){var _0xf42a77={},_0x16895a={},_0x2180a1={'count':0x0,'rows':[]};var _0x2cbab5=db[_0xa209('0x24')][_0xa209('0x25')];_0x16895a['model']=_[_0xa209('0x26')](_0x2cbab5);_0x16895a[_0xa209('0x27')]=_[_0xa209('0x26')](_0x1680d3['query']);_0x16895a[_0xa209('0x28')]=_[_0xa209('0x29')](_0x16895a['model'],_0x16895a['query']);_0xf42a77[_0xa209('0x2a')]=_[_0xa209('0x29')](_0x16895a[_0xa209('0x2b')],qs[_0xa209('0x2c')](_0x1680d3[_0xa209('0x27')]['fields']));_0xf42a77['attributes']=_0xf42a77[_0xa209('0x2a')]['length']?_0xf42a77[_0xa209('0x2a')]:_0x16895a['model'];if(!_0x1680d3[_0xa209('0x27')][_0xa209('0x2d')](_0xa209('0x2e'))){_0xf42a77[_0xa209('0x19')]=qs['limit'](_0x1680d3[_0xa209('0x27')]['limit']);_0xf42a77[_0xa209('0x18')]=qs[_0xa209('0x18')](_0x1680d3[_0xa209('0x27')]['offset']);}_0xf42a77[_0xa209('0x2f')]=qs[_0xa209('0x30')](_0x1680d3[_0xa209('0x27')][_0xa209('0x30')]);_0xf42a77[_0xa209('0x31')]=qs[_0xa209('0x28')](_[_0xa209('0x32')](_0x1680d3['query'],_0x16895a['filters']));if(_0x1680d3['query'][_0xa209('0x33')]){_0xf42a77['where']=_['merge'](_0xf42a77[_0xa209('0x31')],{'$or':_[_0xa209('0x34')](_0x2cbab5,function(_0x437c2c){if(_0x437c2c[_0xa209('0x35')][_0xa209('0x36')]!==_0xa209('0x37')){var _0x9c7eaf={};_0x9c7eaf[_0x437c2c[_0xa209('0x38')]]={'$like':'%'+_0x1680d3[_0xa209('0x27')][_0xa209('0x33')]+'%'};return _0x9c7eaf;}})});}_0xf42a77=_[_0xa209('0x39')]({},_0xf42a77,_0x1680d3[_0xa209('0x3a')]);var _0x3824e9={'where':_0xf42a77[_0xa209('0x31')]};return db[_0xa209('0x24')]['count'](_0x3824e9)[_0xa209('0x20')](function(_0x28c6bb){_0x2180a1['count']=_0x28c6bb;if(_0x1680d3['query'][_0xa209('0x3b')]){_0xf42a77['include']=[{'all':!![]}];}return db['SquareReport']['findAll'](_0xf42a77);})[_0xa209('0x20')](function(_0x5ab1ff){_0x2180a1[_0xa209('0x3c')]=_0x5ab1ff;return _0x2180a1;})[_0xa209('0x20')](respondWithFilteredResult(_0xb57170,_0xf42a77))[_0xa209('0x3d')](handleError(_0xb57170,null));};exports[_0xa209('0x3e')]=function(_0x199abc,_0x2d809e){var _0xb13c22={'raw':!![],'where':{'id':_0x199abc[_0xa209('0x3f')]['id']}},_0x24de52={};_0x24de52['model']=_[_0xa209('0x26')](db['SquareReport'][_0xa209('0x25')]);_0x24de52[_0xa209('0x27')]=_[_0xa209('0x26')](_0x199abc[_0xa209('0x27')]);_0x24de52['filters']=_[_0xa209('0x29')](_0x24de52['model'],_0x24de52[_0xa209('0x27')]);_0xb13c22[_0xa209('0x2a')]=_[_0xa209('0x29')](_0x24de52['model'],qs[_0xa209('0x2c')](_0x199abc['query'][_0xa209('0x2c')]));_0xb13c22[_0xa209('0x2a')]=_0xb13c22[_0xa209('0x2a')][_0xa209('0x40')]?_0xb13c22[_0xa209('0x2a')]:_0x24de52[_0xa209('0x2b')];if(_0x199abc[_0xa209('0x27')][_0xa209('0x3b')]){_0xb13c22[_0xa209('0x41')]=[{'all':!![]}];}_0xb13c22=_[_0xa209('0x39')]({},_0xb13c22,_0x199abc[_0xa209('0x3a')]);return db[_0xa209('0x24')][_0xa209('0x42')](_0xb13c22)[_0xa209('0x20')](handleEntityNotFound(_0x2d809e,null))[_0xa209('0x20')](respondWithResult(_0x2d809e,null))['catch'](handleError(_0x2d809e,null));};exports[_0xa209('0x43')]=function(_0x2df615,_0x1fa8db){return db[_0xa209('0x24')][_0xa209('0x43')](_0x2df615[_0xa209('0x44')],{})['then'](respondWithResult(_0x1fa8db,0xc9))[_0xa209('0x3d')](handleError(_0x1fa8db,null));};exports[_0xa209('0x1e')]=function(_0x1e93c2,_0x49dd1d){if(_0x1e93c2['body']['id']){delete _0x1e93c2[_0xa209('0x44')]['id'];}return db[_0xa209('0x24')]['find']({'where':{'id':_0x1e93c2[_0xa209('0x3f')]['id']}})[_0xa209('0x20')](handleEntityNotFound(_0x49dd1d,null))[_0xa209('0x20')](saveUpdates(_0x1e93c2[_0xa209('0x44')],null))['then'](respondWithResult(_0x49dd1d,null))[_0xa209('0x3d')](handleError(_0x49dd1d,null));};exports[_0xa209('0x1f')]=function(_0x7294f6,_0x55a622){return db[_0xa209('0x24')][_0xa209('0x42')]({'where':{'id':_0x7294f6['params']['id']}})[_0xa209('0x20')](handleEntityNotFound(_0x55a622,null))[_0xa209('0x20')](removeEntity(_0x55a622,null))[_0xa209('0x3d')](handleError(_0x55a622,null));};exports['describe']=function(_0x10355e,_0x3b9376){return db[_0xa209('0x24')][_0xa209('0x45')]()[_0xa209('0x20')](respondWithResult(_0x3b9376,null))[_0xa209('0x3d')](handleError(_0x3b9376,null));};
\ No newline at end of file
index 46ae6e1..ccac90d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0fea=['leaveAt','lodash','util','../../config/logger','moment','bluebird','request-promise','./squareReport.attributes','exports','SquareReport','report_square','uid_pname','uniqueid'];(function(_0x256011,_0x28bb88){var _0xcb704f=function(_0x31feb3){while(--_0x31feb3){_0x256011['push'](_0x256011['shift']());}};_0xcb704f(++_0x28bb88);}(_0x0fea,0x194));var _0xa0fe=function(_0x4acd65,_0x193e16){_0x4acd65=_0x4acd65-0x0;var _0x1e7c1d=_0x0fea[_0x4acd65];return _0x1e7c1d;};'use strict';var _=require(_0xa0fe('0x0'));var util=require(_0xa0fe('0x1'));var logger=require(_0xa0fe('0x2'))('api');var moment=require(_0xa0fe('0x3'));var BPromise=require(_0xa0fe('0x4'));var rp=require(_0xa0fe('0x5'));var attributes=require(_0xa0fe('0x6'));module[_0xa0fe('0x7')]=function(_0x5029e3,_0x42b06b){return _0x5029e3['define'](_0xa0fe('0x8'),attributes,{'tableName':_0xa0fe('0x9'),'paranoid':![],'indexes':[{'name':_0xa0fe('0xa'),'fields':[_0xa0fe('0xb'),'project_name']},{'name':_0xa0fe('0xc'),'fields':[_0xa0fe('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x6ed2=['util','../../config/logger','moment','bluebird','request-promise','./squareReport.attributes','exports','define','SquareReport','report_square','uid_pname','uniqueid','project_name','leaveAt'];(function(_0x2ce4ff,_0xc68503){var _0x6c9f96=function(_0x58a5dc){while(--_0x58a5dc){_0x2ce4ff['push'](_0x2ce4ff['shift']());}};_0x6c9f96(++_0xc68503);}(_0x6ed2,0x142));var _0x26ed=function(_0x542ce8,_0x475277){_0x542ce8=_0x542ce8-0x0;var _0x2409eb=_0x6ed2[_0x542ce8];return _0x2409eb;};'use strict';var _=require('lodash');var util=require(_0x26ed('0x0'));var logger=require(_0x26ed('0x1'))('api');var moment=require(_0x26ed('0x2'));var BPromise=require(_0x26ed('0x3'));var rp=require(_0x26ed('0x4'));var attributes=require(_0x26ed('0x5'));module[_0x26ed('0x6')]=function(_0x216c57,_0x4c6f03){return _0x216c57[_0x26ed('0x7')](_0x26ed('0x8'),attributes,{'tableName':_0x26ed('0x9'),'paranoid':![],'indexes':[{'name':_0x26ed('0xa'),'fields':[_0x26ed('0xb'),_0x26ed('0xc')]},{'name':_0x26ed('0xd'),'fields':[_0x26ed('0xd')]}],'timestamps':!![]});};
\ No newline at end of file
index 47ba3f9..0499027 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x89e8=['message','catch','body','then','CreateSquareReport','SquareReport','update','options','raw','where','attributes','limit','UpdateSquareReport','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','info','SquareReport,\x20%s,\x20%s','debug','SquareReport,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0x89e8,0xf4));var _0x889e=function(_0x6c993a,_0x5ea3ab){_0x6c993a=_0x6c993a-0x0;var _0x27f547=_0x89e8[_0x6c993a];return _0x27f547;};'use strict';var _=require('lodash');var util=require(_0x889e('0x0'));var moment=require(_0x889e('0x1'));var BPromise=require(_0x889e('0x2'));var rs=require(_0x889e('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x889e('0x4'))['db'];var utils=require(_0x889e('0x5'));var logger=require(_0x889e('0x6'))(_0x889e('0x7'));var config=require(_0x889e('0x8'));var jayson=require(_0x889e('0x9'));var client=jayson[_0x889e('0xa')][_0x889e('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x481d81,_0x1361c1,_0x2b25e4){return new BPromise(function(_0x5ad592,_0x6284a1){return client['request'](_0x481d81,_0x2b25e4)['then'](function(_0x45671f){logger[_0x889e('0xc')](_0x889e('0xd'),_0x1361c1,'request\x20sent');logger[_0x889e('0xe')](_0x889e('0xf'),_0x1361c1,_0x889e('0x10'),JSON[_0x889e('0x11')](_0x45671f));if(_0x45671f['error']){if(_0x45671f[_0x889e('0x12')][_0x889e('0x13')]===0x1f4){logger['error'](_0x889e('0xd'),_0x1361c1,_0x45671f[_0x889e('0x12')][_0x889e('0x14')]);return _0x6284a1(_0x45671f['error'][_0x889e('0x14')]);}logger[_0x889e('0x12')]('SquareReport,\x20%s,\x20%s',_0x1361c1,_0x45671f['error'][_0x889e('0x14')]);return _0x5ad592(_0x45671f['error'][_0x889e('0x14')]);}else{logger[_0x889e('0xc')](_0x889e('0xd'),_0x1361c1,_0x889e('0x10'));_0x5ad592(_0x45671f['result'][_0x889e('0x14')]);}})[_0x889e('0x15')](function(_0xed75b9){logger[_0x889e('0x12')](_0x889e('0xd'),_0x1361c1,_0xed75b9);_0x6284a1(_0xed75b9);});});}exports['CreateSquareReport']=function(_0x2aeb58){var _0x2a8fa7=this;return new Promise(function(_0x4e7fc4,_0x5159b6){return db['SquareReport']['create'](_0x2aeb58[_0x889e('0x16')],{'raw':_0x2aeb58['options']?_0x2aeb58['options']['raw']===undefined?!![]:![]:!![]})[_0x889e('0x17')](function(_0x88ece1){logger[_0x889e('0xc')](_0x889e('0x18'),_0x2aeb58);logger['debug'](_0x889e('0x18'),_0x2aeb58,JSON[_0x889e('0x11')](_0x88ece1));_0x4e7fc4(_0x88ece1);})['catch'](function(_0x475889){logger[_0x889e('0x12')](_0x889e('0x18'),_0x475889[_0x889e('0x14')],_0x2aeb58);_0x5159b6(_0x2a8fa7['error'](0x1f4,_0x475889[_0x889e('0x14')]));});});};exports['UpdateSquareReport']=function(_0x20d104){var _0x2bc1a0=this;return new Promise(function(_0x1804ff,_0x2130e0){return db[_0x889e('0x19')][_0x889e('0x1a')](_0x20d104[_0x889e('0x16')],{'raw':_0x20d104[_0x889e('0x1b')]?_0x20d104[_0x889e('0x1b')][_0x889e('0x1c')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x20d104['options']?_0x20d104['options'][_0x889e('0x1d')]||null:null,'attributes':_0x20d104[_0x889e('0x1b')]?_0x20d104['options'][_0x889e('0x1e')]||null:null,'limit':_0x20d104[_0x889e('0x1b')]?_0x20d104[_0x889e('0x1b')][_0x889e('0x1f')]||null:null})[_0x889e('0x17')](function(_0x50f5c1){logger['info'](_0x889e('0x20'),_0x20d104);logger[_0x889e('0xe')](_0x889e('0x20'),_0x20d104,JSON[_0x889e('0x11')](_0x50f5c1));_0x1804ff(_0x50f5c1);})[_0x889e('0x15')](function(_0x5710c4){logger['error']('UpdateSquareReport',_0x5710c4[_0x889e('0x14')],_0x20d104);_0x2130e0(_0x2bc1a0['error'](0x1f4,_0x5710c4['message']));});});};
\ No newline at end of file
+var _0xd198=['client','http','request','info','request\x20sent','debug','stringify','error','SquareReport,\x20%s,\x20%s','message','result','catch','CreateSquareReport','SquareReport','create','options','raw','then','update','body','where','attributes','limit','UpdateSquareReport','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise'];(function(_0x458f6e,_0x551bd4){var _0x5c17d2=function(_0x4c6386){while(--_0x4c6386){_0x458f6e['push'](_0x458f6e['shift']());}};_0x5c17d2(++_0x551bd4);}(_0xd198,0x7e));var _0x8d19=function(_0x3280a2,_0x4a8c8e){_0x3280a2=_0x3280a2-0x0;var _0x22e7d5=_0xd198[_0x3280a2];return _0x22e7d5;};'use strict';var _=require(_0x8d19('0x0'));var util=require(_0x8d19('0x1'));var moment=require('moment');var BPromise=require(_0x8d19('0x2'));var rs=require(_0x8d19('0x3'));var fs=require('fs');var Redis=require(_0x8d19('0x4'));var db=require(_0x8d19('0x5'))['db'];var utils=require(_0x8d19('0x6'));var logger=require(_0x8d19('0x7'))(_0x8d19('0x8'));var config=require('../../config/environment');var jayson=require(_0x8d19('0x9'));var client=jayson[_0x8d19('0xa')][_0x8d19('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x231d68,_0x3f6791,_0x4a9f29){return new BPromise(function(_0x27f074,_0x118dbf){return client[_0x8d19('0xc')](_0x231d68,_0x4a9f29)['then'](function(_0x31d8b2){logger[_0x8d19('0xd')]('SquareReport,\x20%s,\x20%s',_0x3f6791,_0x8d19('0xe'));logger[_0x8d19('0xf')]('SquareReport,\x20%s,\x20%s,\x20%s',_0x3f6791,_0x8d19('0xe'),JSON[_0x8d19('0x10')](_0x31d8b2));if(_0x31d8b2[_0x8d19('0x11')]){if(_0x31d8b2['error']['code']===0x1f4){logger[_0x8d19('0x11')](_0x8d19('0x12'),_0x3f6791,_0x31d8b2['error'][_0x8d19('0x13')]);return _0x118dbf(_0x31d8b2[_0x8d19('0x11')][_0x8d19('0x13')]);}logger[_0x8d19('0x11')](_0x8d19('0x12'),_0x3f6791,_0x31d8b2[_0x8d19('0x11')]['message']);return _0x27f074(_0x31d8b2[_0x8d19('0x11')]['message']);}else{logger[_0x8d19('0xd')](_0x8d19('0x12'),_0x3f6791,_0x8d19('0xe'));_0x27f074(_0x31d8b2[_0x8d19('0x14')][_0x8d19('0x13')]);}})[_0x8d19('0x15')](function(_0xa5cc70){logger[_0x8d19('0x11')](_0x8d19('0x12'),_0x3f6791,_0xa5cc70);_0x118dbf(_0xa5cc70);});});}exports[_0x8d19('0x16')]=function(_0x5ebf8a){var _0x41d6d0=this;return new Promise(function(_0x2da9eb,_0x15790e){return db[_0x8d19('0x17')][_0x8d19('0x18')](_0x5ebf8a['body'],{'raw':_0x5ebf8a[_0x8d19('0x19')]?_0x5ebf8a[_0x8d19('0x19')][_0x8d19('0x1a')]===undefined?!![]:![]:!![]})[_0x8d19('0x1b')](function(_0x32907a){logger[_0x8d19('0xd')](_0x8d19('0x16'),_0x5ebf8a);logger[_0x8d19('0xf')]('CreateSquareReport',_0x5ebf8a,JSON[_0x8d19('0x10')](_0x32907a));_0x2da9eb(_0x32907a);})[_0x8d19('0x15')](function(_0xab426e){logger[_0x8d19('0x11')](_0x8d19('0x16'),_0xab426e['message'],_0x5ebf8a);_0x15790e(_0x41d6d0['error'](0x1f4,_0xab426e[_0x8d19('0x13')]));});});};exports['UpdateSquareReport']=function(_0x2e99c0){var _0x535e99=this;return new Promise(function(_0x930537,_0x25b0d2){return db[_0x8d19('0x17')][_0x8d19('0x1c')](_0x2e99c0[_0x8d19('0x1d')],{'raw':_0x2e99c0[_0x8d19('0x19')]?_0x2e99c0[_0x8d19('0x19')][_0x8d19('0x1a')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2e99c0[_0x8d19('0x19')]?_0x2e99c0['options'][_0x8d19('0x1e')]||null:null,'attributes':_0x2e99c0['options']?_0x2e99c0[_0x8d19('0x19')][_0x8d19('0x1f')]||null:null,'limit':_0x2e99c0[_0x8d19('0x19')]?_0x2e99c0['options'][_0x8d19('0x20')]||null:null})[_0x8d19('0x1b')](function(_0x4df182){logger[_0x8d19('0xd')](_0x8d19('0x21'),_0x2e99c0);logger[_0x8d19('0xf')](_0x8d19('0x21'),_0x2e99c0,JSON[_0x8d19('0x10')](_0x4df182));_0x930537(_0x4df182);})[_0x8d19('0x15')](function(_0x5a8d71){logger[_0x8d19('0x11')]('UpdateSquareReport',_0x5a8d71['message'],_0x2e99c0);_0x25b0d2(_0x535e99['error'](0x1f4,_0x5a8d71['message']));});});};
\ No newline at end of file
index 3848ca1..7228dad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x64c1=['show','post','put','update','delete','destroy','exports','multer','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./squareReportDetail.controller','isAuthenticated','index','get','/describe','describe','/:id'];(function(_0x425a90,_0x47f575){var _0xdf6d9a=function(_0x5bb3fd){while(--_0x5bb3fd){_0x425a90['push'](_0x425a90['shift']());}};_0xdf6d9a(++_0x47f575);}(_0x64c1,0x85));var _0x164c=function(_0xd63319,_0x1ce0b7){_0xd63319=_0xd63319-0x0;var _0xde435=_0x64c1[_0xd63319];return _0xde435;};'use strict';var multer=require(_0x164c('0x0'));var util=require('util');var path=require(_0x164c('0x1'));var timeout=require(_0x164c('0x2'));var express=require(_0x164c('0x3'));var router=express['Router']();var auth=require(_0x164c('0x4'));var interaction=require(_0x164c('0x5'));var config=require(_0x164c('0x6'));var controller=require(_0x164c('0x7'));router['get']('/',auth[_0x164c('0x8')](),controller[_0x164c('0x9')]);router[_0x164c('0xa')](_0x164c('0xb'),auth[_0x164c('0x8')](),controller[_0x164c('0xc')]);router[_0x164c('0xa')](_0x164c('0xd'),auth['isAuthenticated'](),controller[_0x164c('0xe')]);router[_0x164c('0xf')]('/',auth['isAuthenticated'](),controller['create']);router[_0x164c('0x10')](_0x164c('0xd'),auth['isAuthenticated'](),controller[_0x164c('0x11')]);router[_0x164c('0x12')](_0x164c('0xd'),auth[_0x164c('0x8')](),controller[_0x164c('0x13')]);module[_0x164c('0x14')]=router;
\ No newline at end of file
+var _0x3a71=['../../components/interaction/service','../../config/environment','isAuthenticated','get','/:id','post','create','update','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service'];(function(_0x109fe8,_0x56f3fc){var _0x18d075=function(_0x3df5d1){while(--_0x3df5d1){_0x109fe8['push'](_0x109fe8['shift']());}};_0x18d075(++_0x56f3fc);}(_0x3a71,0x11b));var _0x13a7=function(_0x3c27b8,_0x226fca){_0x3c27b8=_0x3c27b8-0x0;var _0x244d80=_0x3a71[_0x3c27b8];return _0x244d80;};'use strict';var multer=require(_0x13a7('0x0'));var util=require(_0x13a7('0x1'));var path=require(_0x13a7('0x2'));var timeout=require('connect-timeout');var express=require(_0x13a7('0x3'));var router=express[_0x13a7('0x4')]();var auth=require(_0x13a7('0x5'));var interaction=require(_0x13a7('0x6'));var config=require(_0x13a7('0x7'));var controller=require('./squareReportDetail.controller');router['get']('/',auth[_0x13a7('0x8')](),controller['index']);router[_0x13a7('0x9')]('/describe',auth['isAuthenticated'](),controller['describe']);router[_0x13a7('0x9')](_0x13a7('0xa'),auth['isAuthenticated'](),controller['show']);router[_0x13a7('0xb')]('/',auth[_0x13a7('0x8')](),controller[_0x13a7('0xc')]);router['put'](_0x13a7('0xa'),auth[_0x13a7('0x8')](),controller[_0x13a7('0xd')]);router[_0x13a7('0xe')](_0x13a7('0xa'),auth[_0x13a7('0x8')](),controller[_0x13a7('0xf')]);module[_0x13a7('0x10')]=router;
\ No newline at end of file
index 5f7763c..53b06fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f78=['sequelize','STRING'];(function(_0x423bfb,_0x5dac82){var _0x7331e0=function(_0x1e0293){while(--_0x1e0293){_0x423bfb['push'](_0x423bfb['shift']());}};_0x7331e0(++_0x5dac82);}(_0x4f78,0x76));var _0x84f7=function(_0x3b86f5,_0x37aee3){_0x3b86f5=_0x3b86f5-0x0;var _0x21aaff=_0x4f78[_0x3b86f5];return _0x21aaff;};'use strict';var Sequelize=require(_0x84f7('0x0'));module['exports']={'uniqueid':{'type':Sequelize[_0x84f7('0x1')]},'node':{'type':Sequelize[_0x84f7('0x1')]},'application':{'type':Sequelize[_0x84f7('0x1')]},'data':{'type':Sequelize['TEXT']},'project_name':{'type':Sequelize[_0x84f7('0x1')]},'callerid':{'type':Sequelize[_0x84f7('0x1')]}};
\ No newline at end of file
+var _0xf0fc=['STRING','exports'];(function(_0x2f319a,_0xa0677a){var _0xd74283=function(_0x2809e1){while(--_0x2809e1){_0x2f319a['push'](_0x2f319a['shift']());}};_0xd74283(++_0xa0677a);}(_0xf0fc,0x11d));var _0xcf0f=function(_0x46b40d,_0x21c982){_0x46b40d=_0x46b40d-0x0;var _0x390581=_0xf0fc[_0x46b40d];return _0x390581;};'use strict';var Sequelize=require('sequelize');module[_0xcf0f('0x0')]={'uniqueid':{'type':Sequelize[_0xcf0f('0x1')]},'node':{'type':Sequelize[_0xcf0f('0x1')]},'application':{'type':Sequelize[_0xcf0f('0x1')]},'data':{'type':Sequelize['TEXT']},'project_name':{'type':Sequelize[_0xcf0f('0x1')]},'callerid':{'type':Sequelize['STRING']}};
\ No newline at end of file
index 26dd46d..aed45a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa4a7=['index','SquareDetailsReport','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','nolimit','limit','order','sort','pick','filter','where','merge','map','key','VIRTUAL','field','options','includeAll','include','show','params','find','create','body','catch','describe','html-pdf','zip-dir','fast-json-patch','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','count','offset','set','json','save','update','then','destroy','error','stack','name','send'];(function(_0x1db831,_0x42b7b5){var _0x39ba56=function(_0x2c2dd3){while(--_0x2c2dd3){_0x1db831['push'](_0x1db831['shift']());}};_0x39ba56(++_0x42b7b5);}(_0xa4a7,0xf9));var _0x7a4a=function(_0x48bfcd,_0x47a6d5){_0x48bfcd=_0x48bfcd-0x0;var _0xc7fb23=_0xa4a7[_0x48bfcd];return _0xc7fb23;};'use strict';var pdf=require(_0x7a4a('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x7a4a('0x1'));var jsonpatch=require(_0x7a4a('0x2'));var rp=require('request-promise');var moment=require(_0x7a4a('0x3'));var BPromise=require('bluebird');var Mustache=require(_0x7a4a('0x4'));var util=require(_0x7a4a('0x5'));var path=require(_0x7a4a('0x6'));var sox=require(_0x7a4a('0x7'));var csv=require(_0x7a4a('0x8'));var ejs=require(_0x7a4a('0x9'));var fs=require('fs');var _=require(_0x7a4a('0xa'));var squel=require(_0x7a4a('0xb'));var crypto=require(_0x7a4a('0xc'));var jsforce=require(_0x7a4a('0xd'));var deskjs=require(_0x7a4a('0xe'));var toCsv=require(_0x7a4a('0x8'));var querystring=require(_0x7a4a('0xf'));var Papa=require('papaparse');var authService=require(_0x7a4a('0x10'));var hardwareService=require(_0x7a4a('0x11'));var Redis=require(_0x7a4a('0x12'));var qs=require(_0x7a4a('0x13'));var logger=require(_0x7a4a('0x14'))(_0x7a4a('0x15'));var utils=require(_0x7a4a('0x16'));var config=require('../../config/environment');var db=require(_0x7a4a('0x17'))['db'];function respondWithStatusCode(_0x175f21,_0x417836){_0x417836=_0x417836||0xcc;return function(_0x4407b7){if(_0x4407b7){return _0x175f21[_0x7a4a('0x18')](_0x417836);}return _0x175f21[_0x7a4a('0x19')](_0x417836)[_0x7a4a('0x1a')]();};}function respondWithResult(_0x3c39df,_0x17495c){_0x17495c=_0x17495c||0xc8;return function(_0x2a8197){if(_0x2a8197){return _0x3c39df['status'](_0x17495c)['json'](_0x2a8197);}};}function respondWithFilteredResult(_0x53dbb8,_0x1b4d0d){return function(_0x314468){if(_0x314468){var _0x2e83db=_0x314468[_0x7a4a('0x1b')],_0x3d26e9=_0x1b4d0d[_0x7a4a('0x1c')],_0x1a9069=_0x1b4d0d['offset']+_0x1b4d0d['limit'],_0x577c18;if(_0x1a9069>=_0x2e83db){_0x1a9069=_0x2e83db;_0x577c18=0xc8;}else{_0x577c18=0xce;}_0x53dbb8[_0x7a4a('0x19')](_0x577c18);return _0x53dbb8[_0x7a4a('0x1d')]('Content-Range',_0x3d26e9+'-'+_0x1a9069+'/'+_0x2e83db)[_0x7a4a('0x1e')](_0x314468);}return null;};}function patchUpdates(_0x4e72b8){return function(_0xeec8fd){try{jsonpatch['apply'](_0xeec8fd,_0x4e72b8,!![]);}catch(_0x12efe5){return BPromise['reject'](_0x12efe5);}return _0xeec8fd[_0x7a4a('0x1f')]();};}function saveUpdates(_0x4807ed,_0x2a56c0){return function(_0x1c6c79){if(_0x1c6c79){return _0x1c6c79[_0x7a4a('0x20')](_0x4807ed)[_0x7a4a('0x21')](function(_0x3bf1b8){return _0x3bf1b8;});}return null;};}function removeEntity(_0x12e82b,_0x2393bc){return function(_0x60e526){if(_0x60e526){return _0x60e526[_0x7a4a('0x22')]()[_0x7a4a('0x21')](function(){_0x12e82b[_0x7a4a('0x19')](0xcc)[_0x7a4a('0x1a')]();});}};}function handleEntityNotFound(_0x401649,_0x4c4f31){return function(_0x41c538){if(!_0x41c538){_0x401649[_0x7a4a('0x18')](0x194);}return _0x41c538;};}function handleError(_0x43ec76,_0x52d325){_0x52d325=_0x52d325||0x1f4;return function(_0x3b286a){logger[_0x7a4a('0x23')](_0x3b286a[_0x7a4a('0x24')]);if(_0x3b286a[_0x7a4a('0x25')]){delete _0x3b286a[_0x7a4a('0x25')];}_0x43ec76['status'](_0x52d325)[_0x7a4a('0x26')](_0x3b286a);};}exports[_0x7a4a('0x27')]=function(_0x445c97,_0x2e98a7){var _0x5efe24={},_0x1508d6={},_0x10d125={'count':0x0,'rows':[]};var _0x4d5e13=db[_0x7a4a('0x28')][_0x7a4a('0x29')];_0x1508d6[_0x7a4a('0x2a')]=_[_0x7a4a('0x2b')](_0x4d5e13);_0x1508d6[_0x7a4a('0x2c')]=_['keys'](_0x445c97[_0x7a4a('0x2c')]);_0x1508d6[_0x7a4a('0x2d')]=_[_0x7a4a('0x2e')](_0x1508d6['model'],_0x1508d6[_0x7a4a('0x2c')]);_0x5efe24['attributes']=_[_0x7a4a('0x2e')](_0x1508d6[_0x7a4a('0x2a')],qs['fields'](_0x445c97[_0x7a4a('0x2c')][_0x7a4a('0x2f')]));_0x5efe24[_0x7a4a('0x30')]=_0x5efe24[_0x7a4a('0x30')][_0x7a4a('0x31')]?_0x5efe24[_0x7a4a('0x30')]:_0x1508d6[_0x7a4a('0x2a')];if(!_0x445c97[_0x7a4a('0x2c')]['hasOwnProperty'](_0x7a4a('0x32'))){_0x5efe24['limit']=qs[_0x7a4a('0x33')](_0x445c97[_0x7a4a('0x2c')]['limit']);_0x5efe24[_0x7a4a('0x1c')]=qs[_0x7a4a('0x1c')](_0x445c97[_0x7a4a('0x2c')][_0x7a4a('0x1c')]);}_0x5efe24[_0x7a4a('0x34')]=qs[_0x7a4a('0x35')](_0x445c97[_0x7a4a('0x2c')][_0x7a4a('0x35')]);_0x5efe24['where']=qs[_0x7a4a('0x2d')](_[_0x7a4a('0x36')](_0x445c97[_0x7a4a('0x2c')],_0x1508d6[_0x7a4a('0x2d')]));if(_0x445c97['query'][_0x7a4a('0x37')]){_0x5efe24[_0x7a4a('0x38')]=_[_0x7a4a('0x39')](_0x5efe24[_0x7a4a('0x38')],{'$or':_[_0x7a4a('0x3a')](_0x4d5e13,function(_0x310f72){if(_0x310f72['type'][_0x7a4a('0x3b')]!==_0x7a4a('0x3c')){var _0x52965b={};_0x52965b[_0x310f72[_0x7a4a('0x3d')]]={'$like':'%'+_0x445c97['query'][_0x7a4a('0x37')]+'%'};return _0x52965b;}})});}_0x5efe24=_[_0x7a4a('0x39')]({},_0x5efe24,_0x445c97[_0x7a4a('0x3e')]);var _0x23382d={'where':_0x5efe24[_0x7a4a('0x38')]};return db[_0x7a4a('0x28')][_0x7a4a('0x1b')](_0x23382d)['then'](function(_0x590f97){_0x10d125['count']=_0x590f97;if(_0x445c97[_0x7a4a('0x2c')][_0x7a4a('0x3f')]){_0x5efe24[_0x7a4a('0x40')]=[{'all':!![]}];}return db[_0x7a4a('0x28')]['findAll'](_0x5efe24);})['then'](function(_0x4ecef1){_0x10d125['rows']=_0x4ecef1;return _0x10d125;})['then'](respondWithFilteredResult(_0x2e98a7,_0x5efe24))['catch'](handleError(_0x2e98a7,null));};exports[_0x7a4a('0x41')]=function(_0x1d03f6,_0x55c3cd){var _0x114b50={'raw':!![],'where':{'id':_0x1d03f6[_0x7a4a('0x42')]['id']}},_0x226e6d={};_0x226e6d['model']=_[_0x7a4a('0x2b')](db[_0x7a4a('0x28')]['rawAttributes']);_0x226e6d['query']=_['keys'](_0x1d03f6[_0x7a4a('0x2c')]);_0x226e6d['filters']=_[_0x7a4a('0x2e')](_0x226e6d[_0x7a4a('0x2a')],_0x226e6d['query']);_0x114b50['attributes']=_[_0x7a4a('0x2e')](_0x226e6d[_0x7a4a('0x2a')],qs[_0x7a4a('0x2f')](_0x1d03f6[_0x7a4a('0x2c')][_0x7a4a('0x2f')]));_0x114b50['attributes']=_0x114b50[_0x7a4a('0x30')][_0x7a4a('0x31')]?_0x114b50[_0x7a4a('0x30')]:_0x226e6d[_0x7a4a('0x2a')];if(_0x1d03f6[_0x7a4a('0x2c')][_0x7a4a('0x3f')]){_0x114b50[_0x7a4a('0x40')]=[{'all':!![]}];}_0x114b50=_[_0x7a4a('0x39')]({},_0x114b50,_0x1d03f6[_0x7a4a('0x3e')]);return db['SquareDetailsReport'][_0x7a4a('0x43')](_0x114b50)['then'](handleEntityNotFound(_0x55c3cd,null))[_0x7a4a('0x21')](respondWithResult(_0x55c3cd,null))['catch'](handleError(_0x55c3cd,null));};exports['create']=function(_0x361ed0,_0x162603){return db[_0x7a4a('0x28')][_0x7a4a('0x44')](_0x361ed0[_0x7a4a('0x45')],{})['then'](respondWithResult(_0x162603,0xc9))[_0x7a4a('0x46')](handleError(_0x162603,null));};exports[_0x7a4a('0x20')]=function(_0xb25dc4,_0x2b7932){if(_0xb25dc4['body']['id']){delete _0xb25dc4[_0x7a4a('0x45')]['id'];}return db[_0x7a4a('0x28')][_0x7a4a('0x43')]({'where':{'id':_0xb25dc4[_0x7a4a('0x42')]['id']}})[_0x7a4a('0x21')](handleEntityNotFound(_0x2b7932,null))[_0x7a4a('0x21')](saveUpdates(_0xb25dc4[_0x7a4a('0x45')],null))['then'](respondWithResult(_0x2b7932,null))[_0x7a4a('0x46')](handleError(_0x2b7932,null));};exports['destroy']=function(_0x3add9d,_0x4b0447){return db[_0x7a4a('0x28')][_0x7a4a('0x43')]({'where':{'id':_0x3add9d[_0x7a4a('0x42')]['id']}})[_0x7a4a('0x21')](handleEntityNotFound(_0x4b0447,null))[_0x7a4a('0x21')](removeEntity(_0x4b0447,null))[_0x7a4a('0x46')](handleError(_0x4b0447,null));};exports[_0x7a4a('0x47')]=function(_0x3e86f0,_0x391a48){return db[_0x7a4a('0x28')][_0x7a4a('0x47')]()[_0x7a4a('0x21')](respondWithResult(_0x391a48,null))[_0x7a4a('0x46')](handleError(_0x391a48,null));};
\ No newline at end of file
+var _0xf9ff=['findAll','rows','catch','show','params','include','find','create','body','describe','html-pdf','rimraf','request-promise','moment','mustache','util','path','to-csv','ejs','lodash','squel','crypto','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','count','offset','limit','set','json','apply','reject','then','destroy','error','name','send','index','SquareDetailsReport','rawAttributes','model','keys','query','filters','intersection','attributes','fields','nolimit','sort','where','pick','filter','merge','map','type','key','field','options','includeAll'];(function(_0xd8763b,_0x3b1e59){var _0x30924c=function(_0x4d4b90){while(--_0x4d4b90){_0xd8763b['push'](_0xd8763b['shift']());}};_0x30924c(++_0x3b1e59);}(_0xf9ff,0x15e));var _0xff9f=function(_0x10f68e,_0xf198ea){_0x10f68e=_0x10f68e-0x0;var _0x4c8372=_0xf9ff[_0x10f68e];return _0x4c8372;};'use strict';var pdf=require(_0xff9f('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xff9f('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xff9f('0x2'));var moment=require(_0xff9f('0x3'));var BPromise=require('bluebird');var Mustache=require(_0xff9f('0x4'));var util=require(_0xff9f('0x5'));var path=require(_0xff9f('0x6'));var sox=require('sox');var csv=require(_0xff9f('0x7'));var ejs=require(_0xff9f('0x8'));var fs=require('fs');var _=require(_0xff9f('0x9'));var squel=require(_0xff9f('0xa'));var crypto=require(_0xff9f('0xb'));var jsforce=require('jsforce');var deskjs=require(_0xff9f('0xc'));var toCsv=require(_0xff9f('0x7'));var querystring=require(_0xff9f('0xd'));var Papa=require(_0xff9f('0xe'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0xff9f('0xf'));var qs=require(_0xff9f('0x10'));var logger=require(_0xff9f('0x11'))(_0xff9f('0x12'));var utils=require(_0xff9f('0x13'));var config=require('../../config/environment');var db=require(_0xff9f('0x14'))['db'];function respondWithStatusCode(_0x2010e4,_0x296754){_0x296754=_0x296754||0xcc;return function(_0x3f805d){if(_0x3f805d){return _0x2010e4[_0xff9f('0x15')](_0x296754);}return _0x2010e4[_0xff9f('0x16')](_0x296754)[_0xff9f('0x17')]();};}function respondWithResult(_0xc47c24,_0x40a6dd){_0x40a6dd=_0x40a6dd||0xc8;return function(_0x46491a){if(_0x46491a){return _0xc47c24[_0xff9f('0x16')](_0x40a6dd)['json'](_0x46491a);}};}function respondWithFilteredResult(_0x503a0,_0x4efa6d){return function(_0x2a2884){if(_0x2a2884){var _0x5ea2d4=_0x2a2884[_0xff9f('0x18')],_0x272397=_0x4efa6d[_0xff9f('0x19')],_0xc046d8=_0x4efa6d[_0xff9f('0x19')]+_0x4efa6d[_0xff9f('0x1a')],_0x1f546f;if(_0xc046d8>=_0x5ea2d4){_0xc046d8=_0x5ea2d4;_0x1f546f=0xc8;}else{_0x1f546f=0xce;}_0x503a0[_0xff9f('0x16')](_0x1f546f);return _0x503a0[_0xff9f('0x1b')]('Content-Range',_0x272397+'-'+_0xc046d8+'/'+_0x5ea2d4)[_0xff9f('0x1c')](_0x2a2884);}return null;};}function patchUpdates(_0x3ce6a7){return function(_0x47cd70){try{jsonpatch[_0xff9f('0x1d')](_0x47cd70,_0x3ce6a7,!![]);}catch(_0x17ce75){return BPromise[_0xff9f('0x1e')](_0x17ce75);}return _0x47cd70['save']();};}function saveUpdates(_0x185a9a,_0x25f257){return function(_0x51486a){if(_0x51486a){return _0x51486a['update'](_0x185a9a)[_0xff9f('0x1f')](function(_0x40ba1f){return _0x40ba1f;});}return null;};}function removeEntity(_0x5531eb,_0x30f418){return function(_0x3ce3a1){if(_0x3ce3a1){return _0x3ce3a1[_0xff9f('0x20')]()[_0xff9f('0x1f')](function(){_0x5531eb['status'](0xcc)[_0xff9f('0x17')]();});}};}function handleEntityNotFound(_0x42af8a,_0x1ee137){return function(_0x1a3f68){if(!_0x1a3f68){_0x42af8a[_0xff9f('0x15')](0x194);}return _0x1a3f68;};}function handleError(_0x2159cb,_0x44be0c){_0x44be0c=_0x44be0c||0x1f4;return function(_0x30c201){logger[_0xff9f('0x21')](_0x30c201['stack']);if(_0x30c201['name']){delete _0x30c201[_0xff9f('0x22')];}_0x2159cb[_0xff9f('0x16')](_0x44be0c)[_0xff9f('0x23')](_0x30c201);};}exports[_0xff9f('0x24')]=function(_0x3c7dd9,_0x505027){var _0x4c9118={},_0x1ce80c={},_0x3ab70d={'count':0x0,'rows':[]};var _0x1b8ebe=db[_0xff9f('0x25')][_0xff9f('0x26')];_0x1ce80c[_0xff9f('0x27')]=_['keys'](_0x1b8ebe);_0x1ce80c['query']=_[_0xff9f('0x28')](_0x3c7dd9[_0xff9f('0x29')]);_0x1ce80c[_0xff9f('0x2a')]=_[_0xff9f('0x2b')](_0x1ce80c[_0xff9f('0x27')],_0x1ce80c[_0xff9f('0x29')]);_0x4c9118[_0xff9f('0x2c')]=_[_0xff9f('0x2b')](_0x1ce80c['model'],qs[_0xff9f('0x2d')](_0x3c7dd9[_0xff9f('0x29')][_0xff9f('0x2d')]));_0x4c9118[_0xff9f('0x2c')]=_0x4c9118['attributes']['length']?_0x4c9118['attributes']:_0x1ce80c[_0xff9f('0x27')];if(!_0x3c7dd9[_0xff9f('0x29')]['hasOwnProperty'](_0xff9f('0x2e'))){_0x4c9118[_0xff9f('0x1a')]=qs[_0xff9f('0x1a')](_0x3c7dd9[_0xff9f('0x29')][_0xff9f('0x1a')]);_0x4c9118[_0xff9f('0x19')]=qs[_0xff9f('0x19')](_0x3c7dd9['query'][_0xff9f('0x19')]);}_0x4c9118['order']=qs[_0xff9f('0x2f')](_0x3c7dd9[_0xff9f('0x29')][_0xff9f('0x2f')]);_0x4c9118[_0xff9f('0x30')]=qs['filters'](_[_0xff9f('0x31')](_0x3c7dd9[_0xff9f('0x29')],_0x1ce80c[_0xff9f('0x2a')]));if(_0x3c7dd9['query'][_0xff9f('0x32')]){_0x4c9118[_0xff9f('0x30')]=_[_0xff9f('0x33')](_0x4c9118[_0xff9f('0x30')],{'$or':_[_0xff9f('0x34')](_0x1b8ebe,function(_0x5bd302){if(_0x5bd302[_0xff9f('0x35')][_0xff9f('0x36')]!=='VIRTUAL'){var _0x12eb29={};_0x12eb29[_0x5bd302[_0xff9f('0x37')]]={'$like':'%'+_0x3c7dd9[_0xff9f('0x29')][_0xff9f('0x32')]+'%'};return _0x12eb29;}})});}_0x4c9118=_[_0xff9f('0x33')]({},_0x4c9118,_0x3c7dd9[_0xff9f('0x38')]);var _0x2bb65e={'where':_0x4c9118[_0xff9f('0x30')]};return db[_0xff9f('0x25')][_0xff9f('0x18')](_0x2bb65e)['then'](function(_0x3777cf){_0x3ab70d[_0xff9f('0x18')]=_0x3777cf;if(_0x3c7dd9['query'][_0xff9f('0x39')]){_0x4c9118['include']=[{'all':!![]}];}return db[_0xff9f('0x25')][_0xff9f('0x3a')](_0x4c9118);})['then'](function(_0x56ddae){_0x3ab70d[_0xff9f('0x3b')]=_0x56ddae;return _0x3ab70d;})[_0xff9f('0x1f')](respondWithFilteredResult(_0x505027,_0x4c9118))[_0xff9f('0x3c')](handleError(_0x505027,null));};exports[_0xff9f('0x3d')]=function(_0x30fdc3,_0x234b87){var _0x5715f7={'raw':!![],'where':{'id':_0x30fdc3[_0xff9f('0x3e')]['id']}},_0xa19c83={};_0xa19c83['model']=_[_0xff9f('0x28')](db[_0xff9f('0x25')][_0xff9f('0x26')]);_0xa19c83[_0xff9f('0x29')]=_[_0xff9f('0x28')](_0x30fdc3[_0xff9f('0x29')]);_0xa19c83[_0xff9f('0x2a')]=_[_0xff9f('0x2b')](_0xa19c83[_0xff9f('0x27')],_0xa19c83['query']);_0x5715f7[_0xff9f('0x2c')]=_[_0xff9f('0x2b')](_0xa19c83['model'],qs['fields'](_0x30fdc3[_0xff9f('0x29')][_0xff9f('0x2d')]));_0x5715f7['attributes']=_0x5715f7[_0xff9f('0x2c')]['length']?_0x5715f7[_0xff9f('0x2c')]:_0xa19c83[_0xff9f('0x27')];if(_0x30fdc3[_0xff9f('0x29')]['includeAll']){_0x5715f7[_0xff9f('0x3f')]=[{'all':!![]}];}_0x5715f7=_[_0xff9f('0x33')]({},_0x5715f7,_0x30fdc3[_0xff9f('0x38')]);return db['SquareDetailsReport'][_0xff9f('0x40')](_0x5715f7)['then'](handleEntityNotFound(_0x234b87,null))[_0xff9f('0x1f')](respondWithResult(_0x234b87,null))[_0xff9f('0x3c')](handleError(_0x234b87,null));};exports[_0xff9f('0x41')]=function(_0x12424e,_0x523b94){return db[_0xff9f('0x25')]['create'](_0x12424e[_0xff9f('0x42')],{})['then'](respondWithResult(_0x523b94,0xc9))[_0xff9f('0x3c')](handleError(_0x523b94,null));};exports['update']=function(_0x414edc,_0x2cb0d9){if(_0x414edc[_0xff9f('0x42')]['id']){delete _0x414edc[_0xff9f('0x42')]['id'];}return db['SquareDetailsReport'][_0xff9f('0x40')]({'where':{'id':_0x414edc['params']['id']}})[_0xff9f('0x1f')](handleEntityNotFound(_0x2cb0d9,null))[_0xff9f('0x1f')](saveUpdates(_0x414edc[_0xff9f('0x42')],null))[_0xff9f('0x1f')](respondWithResult(_0x2cb0d9,null))[_0xff9f('0x3c')](handleError(_0x2cb0d9,null));};exports[_0xff9f('0x20')]=function(_0x368112,_0x5a8dcd){return db[_0xff9f('0x25')]['find']({'where':{'id':_0x368112['params']['id']}})[_0xff9f('0x1f')](handleEntityNotFound(_0x5a8dcd,null))[_0xff9f('0x1f')](removeEntity(_0x5a8dcd,null))['catch'](handleError(_0x5a8dcd,null));};exports['describe']=function(_0x228a6c,_0x5c0a70){return db[_0xff9f('0x25')][_0xff9f('0x43')]()[_0xff9f('0x1f')](respondWithResult(_0x5c0a70,null))[_0xff9f('0x3c')](handleError(_0x5c0a70,null));};
\ No newline at end of file
index bd60be6..e6e9f57 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfe21=['moment','bluebird','./squareReportDetail.attributes','exports','define','SquareDetailsReport','report_square_details','util','../../config/logger'];(function(_0x549c39,_0x1f88de){var _0xb88b84=function(_0x1dee91){while(--_0x1dee91){_0x549c39['push'](_0x549c39['shift']());}};_0xb88b84(++_0x1f88de);}(_0xfe21,0x193));var _0x1fe2=function(_0x5bf2be,_0xfe76ab){_0x5bf2be=_0x5bf2be-0x0;var _0x199deb=_0xfe21[_0x5bf2be];return _0x199deb;};'use strict';var _=require('lodash');var util=require(_0x1fe2('0x0'));var logger=require(_0x1fe2('0x1'))('api');var moment=require(_0x1fe2('0x2'));var BPromise=require(_0x1fe2('0x3'));var rp=require('request-promise');var attributes=require(_0x1fe2('0x4'));module[_0x1fe2('0x5')]=function(_0x2b64e,_0xa9a7a1){return _0x2b64e[_0x1fe2('0x6')](_0x1fe2('0x7'),attributes,{'tableName':_0x1fe2('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4166=['define','SquareDetailsReport','report_square_details','lodash','util','../../config/logger','moment','bluebird','request-promise','exports'];(function(_0x357cfd,_0xcf2cb7){var _0x5e1d7a=function(_0x1c205b){while(--_0x1c205b){_0x357cfd['push'](_0x357cfd['shift']());}};_0x5e1d7a(++_0xcf2cb7);}(_0x4166,0xdf));var _0x6416=function(_0x26afd3,_0x58b932){_0x26afd3=_0x26afd3-0x0;var _0x2ebe2e=_0x4166[_0x26afd3];return _0x2ebe2e;};'use strict';var _=require(_0x6416('0x0'));var util=require(_0x6416('0x1'));var logger=require(_0x6416('0x2'))('api');var moment=require(_0x6416('0x3'));var BPromise=require(_0x6416('0x4'));var rp=require(_0x6416('0x5'));var attributes=require('./squareReportDetail.attributes');module[_0x6416('0x6')]=function(_0x4ea7cc,_0x259d11){return _0x4ea7cc[_0x6416('0x7')](_0x6416('0x8'),attributes,{'tableName':_0x6416('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index effb945..9c353e8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0fda=['error','code','message','SquareDetailsReport,\x20%s,\x20%s','result','CreateSquareDetailsReport','SquareDetailsReport','body','options','raw','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','request','then','info','request\x20sent','debug','SquareDetailsReport,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x17dfc2,_0x1d0de3){var _0x3816c0=function(_0x15db24){while(--_0x15db24){_0x17dfc2['push'](_0x17dfc2['shift']());}};_0x3816c0(++_0x1d0de3);}(_0x0fda,0x1a0));var _0xa0fd=function(_0x40b15e,_0xfa58a3){_0x40b15e=_0x40b15e-0x0;var _0x452d0b=_0x0fda[_0x40b15e];return _0x452d0b;};'use strict';var _=require(_0xa0fd('0x0'));var util=require('util');var moment=require(_0xa0fd('0x1'));var BPromise=require(_0xa0fd('0x2'));var rs=require(_0xa0fd('0x3'));var fs=require('fs');var Redis=require(_0xa0fd('0x4'));var db=require(_0xa0fd('0x5'))['db'];var utils=require(_0xa0fd('0x6'));var logger=require(_0xa0fd('0x7'))('rpc');var config=require('../../config/environment');var jayson=require(_0xa0fd('0x8'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x868183,_0x62b109,_0x1aab41){return new BPromise(function(_0x248cca,_0x5d996b){return client[_0xa0fd('0x9')](_0x868183,_0x1aab41)[_0xa0fd('0xa')](function(_0x231ca4){logger[_0xa0fd('0xb')]('SquareDetailsReport,\x20%s,\x20%s',_0x62b109,_0xa0fd('0xc'));logger[_0xa0fd('0xd')](_0xa0fd('0xe'),_0x62b109,'request\x20sent',JSON[_0xa0fd('0xf')](_0x231ca4));if(_0x231ca4[_0xa0fd('0x10')]){if(_0x231ca4[_0xa0fd('0x10')][_0xa0fd('0x11')]===0x1f4){logger[_0xa0fd('0x10')]('SquareDetailsReport,\x20%s,\x20%s',_0x62b109,_0x231ca4['error'][_0xa0fd('0x12')]);return _0x5d996b(_0x231ca4[_0xa0fd('0x10')]['message']);}logger[_0xa0fd('0x10')](_0xa0fd('0x13'),_0x62b109,_0x231ca4[_0xa0fd('0x10')][_0xa0fd('0x12')]);return _0x248cca(_0x231ca4[_0xa0fd('0x10')][_0xa0fd('0x12')]);}else{logger[_0xa0fd('0xb')]('SquareDetailsReport,\x20%s,\x20%s',_0x62b109,_0xa0fd('0xc'));_0x248cca(_0x231ca4[_0xa0fd('0x14')]['message']);}})['catch'](function(_0x205506){logger[_0xa0fd('0x10')]('SquareDetailsReport,\x20%s,\x20%s',_0x62b109,_0x205506);_0x5d996b(_0x205506);});});}exports[_0xa0fd('0x15')]=function(_0x22a876){var _0x1cb027=this;return new Promise(function(_0x5073a8,_0x50cde2){return db[_0xa0fd('0x16')]['create'](_0x22a876[_0xa0fd('0x17')],{'raw':_0x22a876[_0xa0fd('0x18')]?_0x22a876[_0xa0fd('0x18')][_0xa0fd('0x19')]===undefined?!![]:![]:!![]})[_0xa0fd('0xa')](function(_0x2273f4){logger[_0xa0fd('0xb')]('CreateSquareDetailsReport',_0x22a876);logger[_0xa0fd('0xd')](_0xa0fd('0x15'),_0x22a876,JSON[_0xa0fd('0xf')](_0x2273f4));_0x5073a8(_0x2273f4);})[_0xa0fd('0x1a')](function(_0x26e3a4){logger[_0xa0fd('0x10')](_0xa0fd('0x15'),_0x26e3a4[_0xa0fd('0x12')],_0x22a876);_0x50cde2(_0x1cb027[_0xa0fd('0x10')](0x1f4,_0x26e3a4[_0xa0fd('0x12')]));});});};
\ No newline at end of file
+var _0xb957=['stringify','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','SquareDetailsReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','SquareDetailsReport,\x20%s,\x20%s','result','catch','CreateSquareDetailsReport','SquareDetailsReport','create','body','options','debug'];(function(_0x36c21c,_0x228f2b){var _0x4d2809=function(_0x27d7c2){while(--_0x27d7c2){_0x36c21c['push'](_0x36c21c['shift']());}};_0x4d2809(++_0x228f2b);}(_0xb957,0x6d));var _0x7b95=function(_0x1fcaa4,_0x3ee528){_0x1fcaa4=_0x1fcaa4-0x0;var _0x3c22c=_0xb957[_0x1fcaa4];return _0x3c22c;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x7b95('0x0'));var BPromise=require('bluebird');var rs=require(_0x7b95('0x1'));var fs=require('fs');var Redis=require(_0x7b95('0x2'));var db=require(_0x7b95('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0x7b95('0x4'))(_0x7b95('0x5'));var config=require(_0x7b95('0x6'));var jayson=require(_0x7b95('0x7'));var client=jayson[_0x7b95('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x2912d5,_0x16b05a,_0x161768){return new BPromise(function(_0x495bea,_0x5e1421){return client[_0x7b95('0x9')](_0x2912d5,_0x161768)[_0x7b95('0xa')](function(_0x2e82e6){logger[_0x7b95('0xb')]('SquareDetailsReport,\x20%s,\x20%s',_0x16b05a,'request\x20sent');logger['debug'](_0x7b95('0xc'),_0x16b05a,_0x7b95('0xd'),JSON['stringify'](_0x2e82e6));if(_0x2e82e6['error']){if(_0x2e82e6[_0x7b95('0xe')][_0x7b95('0xf')]===0x1f4){logger[_0x7b95('0xe')]('SquareDetailsReport,\x20%s,\x20%s',_0x16b05a,_0x2e82e6['error'][_0x7b95('0x10')]);return _0x5e1421(_0x2e82e6['error'][_0x7b95('0x10')]);}logger[_0x7b95('0xe')](_0x7b95('0x11'),_0x16b05a,_0x2e82e6[_0x7b95('0xe')]['message']);return _0x495bea(_0x2e82e6['error'][_0x7b95('0x10')]);}else{logger[_0x7b95('0xb')](_0x7b95('0x11'),_0x16b05a,_0x7b95('0xd'));_0x495bea(_0x2e82e6[_0x7b95('0x12')][_0x7b95('0x10')]);}})[_0x7b95('0x13')](function(_0x44e836){logger[_0x7b95('0xe')](_0x7b95('0x11'),_0x16b05a,_0x44e836);_0x5e1421(_0x44e836);});});}exports[_0x7b95('0x14')]=function(_0x4eea43){var _0x8696c=this;return new Promise(function(_0xed383,_0x400fff){return db[_0x7b95('0x15')][_0x7b95('0x16')](_0x4eea43[_0x7b95('0x17')],{'raw':_0x4eea43[_0x7b95('0x18')]?_0x4eea43[_0x7b95('0x18')]['raw']===undefined?!![]:![]:!![]})[_0x7b95('0xa')](function(_0x342ecc){logger[_0x7b95('0xb')](_0x7b95('0x14'),_0x4eea43);logger[_0x7b95('0x19')](_0x7b95('0x14'),_0x4eea43,JSON[_0x7b95('0x1a')](_0x342ecc));_0xed383(_0x342ecc);})[_0x7b95('0x13')](function(_0x2144c1){logger[_0x7b95('0xe')](_0x7b95('0x14'),_0x2144c1[_0x7b95('0x10')],_0x4eea43);_0x400fff(_0x8696c[_0x7b95('0xe')](0x1f4,_0x2144c1[_0x7b95('0x10')]));});});};
\ No newline at end of file
index f88ec58..1062233 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x19ca=['express','Router','../../components/auth/service','./system.controller','isAuthenticated','get','/process/:pid/kill','exports'];(function(_0x5081f3,_0x29a1b3){var _0x40ff43=function(_0x29c639){while(--_0x29c639){_0x5081f3['push'](_0x5081f3['shift']());}};_0x40ff43(++_0x29a1b3);}(_0x19ca,0xe8));var _0xa19c=function(_0x17d9e3,_0x1f969c){_0x17d9e3=_0x17d9e3-0x0;var _0x14192d=_0x19ca[_0x17d9e3];return _0x14192d;};'use strict';var express=require(_0xa19c('0x0'));var router=express[_0xa19c('0x1')]();var auth=require(_0xa19c('0x2'));var controller=require(_0xa19c('0x3'));router['get']('/',auth[_0xa19c('0x4')](),controller['index']);router[_0xa19c('0x5')](_0xa19c('0x6'),auth[_0xa19c('0x4')](),controller['killProcess']);module[_0xa19c('0x7')]=router;
\ No newline at end of file
+var _0xe2fa=['exports','Router','../../components/auth/service','get','isAuthenticated','index','/process/:pid/kill','killProcess'];(function(_0x323591,_0x518650){var _0x423982=function(_0x1b7a15){while(--_0x1b7a15){_0x323591['push'](_0x323591['shift']());}};_0x423982(++_0x518650);}(_0xe2fa,0x159));var _0xae2f=function(_0x35bb74,_0x2d13bc){_0x35bb74=_0x35bb74-0x0;var _0xa78c7d=_0xe2fa[_0x35bb74];return _0xa78c7d;};'use strict';var express=require('express');var router=express[_0xae2f('0x0')]();var auth=require(_0xae2f('0x1'));var controller=require('./system.controller');router[_0xae2f('0x2')]('/',auth[_0xae2f('0x3')](),controller[_0xae2f('0x4')]);router[_0xae2f('0x2')](_0xae2f('0x5'),auth[_0xae2f('0x3')](),controller[_0xae2f('0x6')]);module[_0xae2f('0x7')]=router;
\ No newline at end of file
index 44a2f11..b23e5c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x23e7=['exec','../../config/logger','api','bluebird','lodash','error','<%-\x20name\x20%>,\x20%s,\x20%s,\x20%s','inspect','name','status','send','index','getAllData','then','killProcess','format','ps\x20-p\x20%s\x20-ww\x20-o\x20args','params','pid','split','length','indexOf','Process\x20with\x20pid\x20%s\x20not\x20found!','kill','Process\x20with\x20pid\x20%s\x20killed\x20correctly','systeminformation','child_process'];(function(_0x8f036c,_0x3ceea9){var _0x350049=function(_0x6d27f6){while(--_0x6d27f6){_0x8f036c['push'](_0x8f036c['shift']());}};_0x350049(++_0x3ceea9);}(_0x23e7,0x1e4));var _0x723e=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x23e7[_0x6131cd];return _0x47e916;};'use strict';var info=require(_0x723e('0x0'));var exec=require(_0x723e('0x1'))[_0x723e('0x2')];var logger=require(_0x723e('0x3'))(_0x723e('0x4'));var util=require('util');var BPromise=require(_0x723e('0x5'));var _=require(_0x723e('0x6'));function handleError(_0x34d90a,_0x1f7520,_0xef2bea){_0x1f7520=_0x1f7520||0x1f4;return function(_0x4de8a1){logger[_0x723e('0x7')](_0x723e('0x8'),_0xef2bea,_0x1f7520,util[_0x723e('0x9')](_0x4de8a1,{'showHidden':![],'depth':null}));delete _0x4de8a1[_0x723e('0xa')];_0x34d90a[_0x723e('0xb')](_0x1f7520)[_0x723e('0xc')](_0x4de8a1);};}exports[_0x723e('0xd')]=function(_0x4c782b,_0x4d0570){return info[_0x723e('0xe')]()[_0x723e('0xf')](function(_0x612f8){return _0x4d0570[_0x723e('0xb')](0xc8)['json'](_0x612f8);})['catch'](function(_0x39d06e){return _0x4d0570['status'](0x1f4)['json'](_0x39d06e);});};exports[_0x723e('0x10')]=function(_0x46669f,_0x414e3b){var _0x14ff8e=['components/import/cm'];return new BPromise(function(_0x46cd80,_0x5dc0ee){return exec(util[_0x723e('0x11')](_0x723e('0x12'),_0x46669f[_0x723e('0x13')][_0x723e('0x14')]),function(_0x104a57,_0x14213e,_0x5aab44){if(_0x104a57){return _0x5dc0ee(_0x104a57);}return _0x46cd80(_0x14213e);});})['then'](function(_0x1a8192){var _0x37d4de=![];var _0x212d24=_0x1a8192[_0x723e('0x15')](/\n/);for(var _0x1746fe=0x0,_0x2002f1=_0x14ff8e[_0x723e('0x16')];_0x1746fe<_0x2002f1,_0x37d4de===![];_0x1746fe+=0x1){if(_0x1a8192[_0x723e('0x17')](_0x14ff8e[_0x1746fe])>=0x0){_0x37d4de=!![];}}if(!_0x37d4de){throw new Error(util[_0x723e('0x11')](_0x723e('0x18'),_0x46669f[_0x723e('0x13')][_0x723e('0x14')]));}process[_0x723e('0x19')](_0x46669f['params'][_0x723e('0x14')],'SIGINT');return _0x414e3b[_0x723e('0xb')](0xc8)['json']({'message':util[_0x723e('0x11')](_0x723e('0x1a'),_0x46669f[_0x723e('0x13')][_0x723e('0x14')])});})['catch'](handleError(_0x414e3b,null,'killProcess'));};
\ No newline at end of file
+var _0x3a5e=['bluebird','lodash','error','<%-\x20name\x20%>,\x20%s,\x20%s,\x20%s','inspect','status','index','getAllData','then','json','killProcess','components/import/cm','format','ps\x20-p\x20%s\x20-ww\x20-o\x20args','pid','split','Process\x20with\x20pid\x20%s\x20not\x20found!','params','kill','SIGINT','Process\x20with\x20pid\x20%s\x20killed\x20correctly','catch','systeminformation','child_process','exec','util'];(function(_0x8c43de,_0x90ff31){var _0xa6591b=function(_0x469716){while(--_0x469716){_0x8c43de['push'](_0x8c43de['shift']());}};_0xa6591b(++_0x90ff31);}(_0x3a5e,0x98));var _0xe3a5=function(_0xc29895,_0x227002){_0xc29895=_0xc29895-0x0;var _0x45c42f=_0x3a5e[_0xc29895];return _0x45c42f;};'use strict';var info=require(_0xe3a5('0x0'));var exec=require(_0xe3a5('0x1'))[_0xe3a5('0x2')];var logger=require('../../config/logger')('api');var util=require(_0xe3a5('0x3'));var BPromise=require(_0xe3a5('0x4'));var _=require(_0xe3a5('0x5'));function handleError(_0x30a836,_0x4a45d5,_0x426b6e){_0x4a45d5=_0x4a45d5||0x1f4;return function(_0x29f9be){logger[_0xe3a5('0x6')](_0xe3a5('0x7'),_0x426b6e,_0x4a45d5,util[_0xe3a5('0x8')](_0x29f9be,{'showHidden':![],'depth':null}));delete _0x29f9be['name'];_0x30a836[_0xe3a5('0x9')](_0x4a45d5)['send'](_0x29f9be);};}exports[_0xe3a5('0xa')]=function(_0x384aa8,_0x301dd9){return info[_0xe3a5('0xb')]()[_0xe3a5('0xc')](function(_0x2db591){return _0x301dd9['status'](0xc8)[_0xe3a5('0xd')](_0x2db591);})['catch'](function(_0x191214){return _0x301dd9['status'](0x1f4)['json'](_0x191214);});};exports[_0xe3a5('0xe')]=function(_0x2e82fb,_0x58d6ab){var _0x9f0c82=[_0xe3a5('0xf')];return new BPromise(function(_0x55a9ef,_0x2cf32d){return exec(util[_0xe3a5('0x10')](_0xe3a5('0x11'),_0x2e82fb['params'][_0xe3a5('0x12')]),function(_0x1b2aca,_0x1108a4,_0x5a0728){if(_0x1b2aca){return _0x2cf32d(_0x1b2aca);}return _0x55a9ef(_0x1108a4);});})[_0xe3a5('0xc')](function(_0x2fe975){var _0x4aa18c=![];var _0x4aebbb=_0x2fe975[_0xe3a5('0x13')](/\n/);for(var _0x4fbc58=0x0,_0x6e1d5b=_0x9f0c82['length'];_0x4fbc58<_0x6e1d5b,_0x4aa18c===![];_0x4fbc58+=0x1){if(_0x2fe975['indexOf'](_0x9f0c82[_0x4fbc58])>=0x0){_0x4aa18c=!![];}}if(!_0x4aa18c){throw new Error(util[_0xe3a5('0x10')](_0xe3a5('0x14'),_0x2e82fb[_0xe3a5('0x15')][_0xe3a5('0x12')]));}process[_0xe3a5('0x16')](_0x2e82fb['params']['pid'],_0xe3a5('0x17'));return _0x58d6ab[_0xe3a5('0x9')](0xc8)[_0xe3a5('0xd')]({'message':util['format'](_0xe3a5('0x18'),_0x2e82fb[_0xe3a5('0x15')][_0xe3a5('0x12')])});})[_0xe3a5('0x19')](handleError(_0x58d6ab,null,_0xe3a5('0xe')));};
\ No newline at end of file
index 5ee1fde..0e314dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2032=['get','isAuthenticated','index','/:id','show','post','update','delete','destroy','util','path','connect-timeout','Router','../../components/auth/service','../../config/environment','./tag.controller'];(function(_0x3e752c,_0x2235ee){var _0xd8cc12=function(_0x232155){while(--_0x232155){_0x3e752c['push'](_0x3e752c['shift']());}};_0xd8cc12(++_0x2235ee);}(_0x2032,0xd9));var _0x2203=function(_0x3b3e13,_0x1c30cd){_0x3b3e13=_0x3b3e13-0x0;var _0x5a21c8=_0x2032[_0x3b3e13];return _0x5a21c8;};'use strict';var multer=require('multer');var util=require(_0x2203('0x0'));var path=require(_0x2203('0x1'));var timeout=require(_0x2203('0x2'));var express=require('express');var router=express[_0x2203('0x3')]();var auth=require(_0x2203('0x4'));var interaction=require('../../components/interaction/service');var config=require(_0x2203('0x5'));var controller=require(_0x2203('0x6'));router[_0x2203('0x7')]('/',auth[_0x2203('0x8')](),controller[_0x2203('0x9')]);router[_0x2203('0x7')](_0x2203('0xa'),auth[_0x2203('0x8')](),controller[_0x2203('0xb')]);router[_0x2203('0xc')]('/',auth[_0x2203('0x8')](),controller['create']);router['put'](_0x2203('0xa'),auth['isAuthenticated'](),controller[_0x2203('0xd')]);router[_0x2203('0xe')](_0x2203('0xa'),auth['isAuthenticated'](),controller[_0x2203('0xf')]);module['exports']=router;
\ No newline at end of file
+var _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(_0x260c92,_0x562956){var _0x2dd892=function(_0x285e10){while(--_0x285e10){_0x260c92['push'](_0x260c92['shift']());}};_0x2dd892(++_0x562956);}(_0x4fc2,0x111));var _0x24fc=function(_0x473a38,_0x1c0e5e){_0x473a38=_0x473a38-0x0;var _0x569d43=_0x4fc2[_0x473a38];return _0x569d43;};'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
index d263959..5328c08 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x35de=['name','#0091EA','exports','STRING'];(function(_0x2a83a3,_0xcfe83b){var _0x3a067a=function(_0x57f160){while(--_0x57f160){_0x2a83a3['push'](_0x2a83a3['shift']());}};_0x3a067a(++_0xcfe83b);}(_0x35de,0xce));var _0xe35d=function(_0x1b6c6d,_0x2983b0){_0x1b6c6d=_0x1b6c6d-0x0;var _0x290d9d=_0x35de[_0x1b6c6d];return _0x290d9d;};'use strict';var Sequelize=require('sequelize');module[_0xe35d('0x0')]={'name':{'type':Sequelize[_0xe35d('0x1')],'unique':_0xe35d('0x2'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'color':{'type':Sequelize[_0xe35d('0x1')],'defaultValue':_0xe35d('0x3')},'description':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x7fcd=['name','#0091EA','sequelize','exports','STRING'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x7fcd,0xc0));var _0xd7fc=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7fcd[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0xd7fc('0x0'));module[_0xd7fc('0x1')]={'name':{'type':Sequelize[_0xd7fc('0x2')],'unique':_0xd7fc('0x3'),'allowNull':![],'validate':{'is':/[A-Za-z0-9._\\+*!-]+/,'notEmpty':!![]}},'color':{'type':Sequelize[_0xd7fc('0x2')],'defaultValue':_0xd7fc('0x4')},'description':{'type':Sequelize[_0xd7fc('0x2')]}};
\ No newline at end of file
index 15fcc1b..738f1db 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfff0=['../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','status','offset','Content-Range','json','apply','save','then','destroy','get','Tags','end','sendStatus','error','stack','name','send','index','Tag','model','keys','query','filters','attributes','intersection','fields','hasOwnProperty','nolimit','limit','order','sort','where','pick','filter','merge','map','key','VIRTUAL','field','options','count','include','findAll','catch','show','rawAttributes','length','includeAll','find','create','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','userProfileId','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','body','params','eml-format','rimraf','zip-dir','request-promise','moment','bluebird','util','path','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse'];(function(_0x1231ac,_0x40a578){var _0x537a63=function(_0x148250){while(--_0x148250){_0x1231ac['push'](_0x1231ac['shift']());}};_0x537a63(++_0x40a578);}(_0xfff0,0x139));var _0x0fff=function(_0x53b5ee,_0xa7396d){_0x53b5ee=_0x53b5ee-0x0;var _0x3ce4e4=_0xfff0[_0x53b5ee];return _0x3ce4e4;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x0fff('0x0'));var rimraf=require(_0x0fff('0x1'));var zipdir=require(_0x0fff('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x0fff('0x3'));var moment=require(_0x0fff('0x4'));var BPromise=require(_0x0fff('0x5'));var Mustache=require('mustache');var util=require(_0x0fff('0x6'));var path=require(_0x0fff('0x7'));var sox=require('sox');var csv=require(_0x0fff('0x8'));var ejs=require(_0x0fff('0x9'));var fs=require('fs');var _=require(_0x0fff('0xa'));var squel=require('squel');var crypto=require(_0x0fff('0xb'));var jsforce=require('jsforce');var deskjs=require(_0x0fff('0xc'));var toCsv=require('to-csv');var querystring=require(_0x0fff('0xd'));var Papa=require(_0x0fff('0xe'));var authService=require('../../components/auth/service');var hardwareService=require(_0x0fff('0xf'));var Redis=require(_0x0fff('0x10'));var qs=require(_0x0fff('0x11'));var logger=require(_0x0fff('0x12'))(_0x0fff('0x13'));var utils=require(_0x0fff('0x14'));var config=require(_0x0fff('0x15'));var db=require(_0x0fff('0x16'))['db'];function respondWithStatusCode(_0x2a0e49,_0x411ffc){_0x411ffc=_0x411ffc||0xcc;return function(_0x13f768){if(_0x13f768){return _0x2a0e49['sendStatus'](_0x411ffc);}return _0x2a0e49[_0x0fff('0x17')](_0x411ffc)['end']();};}function respondWithResult(_0x277b37,_0x431efa){_0x431efa=_0x431efa||0xc8;return function(_0x38fc82){if(_0x38fc82){return _0x277b37[_0x0fff('0x17')](_0x431efa)['json'](_0x38fc82);}};}function respondWithFilteredResult(_0x53bde9,_0x1daf30){return function(_0x50a9e4){if(_0x50a9e4){var _0x5636fd=_0x50a9e4['count'],_0x51ceea=_0x1daf30[_0x0fff('0x18')],_0x1fb430=_0x1daf30[_0x0fff('0x18')]+_0x1daf30['limit'],_0x41e2e7;if(_0x1fb430>=_0x5636fd){_0x1fb430=_0x5636fd;_0x41e2e7=0xc8;}else{_0x41e2e7=0xce;}_0x53bde9['status'](_0x41e2e7);return _0x53bde9['set'](_0x0fff('0x19'),_0x51ceea+'-'+_0x1fb430+'/'+_0x5636fd)[_0x0fff('0x1a')](_0x50a9e4);}return null;};}function patchUpdates(_0x46a02d){return function(_0x3762dc){try{jsonpatch[_0x0fff('0x1b')](_0x3762dc,_0x46a02d,!![]);}catch(_0xe89b4a){return BPromise['reject'](_0xe89b4a);}return _0x3762dc[_0x0fff('0x1c')]();};}function saveUpdates(_0x136520,_0x48e6f9){return function(_0x49d211){if(_0x49d211){return _0x49d211['update'](_0x136520)[_0x0fff('0x1d')](function(_0x330e29){return _0x330e29;});}return null;};}function removeEntity(_0x1f97c5,_0x3c4f8f){return function(_0x502393){if(_0x502393){return _0x502393[_0x0fff('0x1e')]()[_0x0fff('0x1d')](function(){var _0x29d703=_0x502393[_0x0fff('0x1f')]({'plain':!![]});var _0x16e7f4=_0x0fff('0x20');return db['UserProfileResource'][_0x0fff('0x1e')]({'where':{'type':_0x16e7f4,'resourceId':_0x29d703['id']}})[_0x0fff('0x1d')](function(){return _0x502393;});})[_0x0fff('0x1d')](function(){_0x1f97c5[_0x0fff('0x17')](0xcc)[_0x0fff('0x21')]();});}};}function handleEntityNotFound(_0x23d9f8,_0x482e1e){return function(_0x2c9725){if(!_0x2c9725){_0x23d9f8[_0x0fff('0x22')](0x194);}return _0x2c9725;};}function handleError(_0x2d1610,_0x440f56){_0x440f56=_0x440f56||0x1f4;return function(_0x36d268){logger[_0x0fff('0x23')](_0x36d268[_0x0fff('0x24')]);if(_0x36d268[_0x0fff('0x25')]){delete _0x36d268[_0x0fff('0x25')];}_0x2d1610[_0x0fff('0x17')](_0x440f56)[_0x0fff('0x26')](_0x36d268);};}exports[_0x0fff('0x27')]=function(_0x495734,_0x7046a3){var _0x2d1800={},_0x17ab6f={},_0x42441e={'count':0x0,'rows':[]};var _0x1f643d=db[_0x0fff('0x28')]['rawAttributes'];_0x17ab6f[_0x0fff('0x29')]=_[_0x0fff('0x2a')](_0x1f643d);_0x17ab6f[_0x0fff('0x2b')]=_['keys'](_0x495734[_0x0fff('0x2b')]);_0x17ab6f[_0x0fff('0x2c')]=_['intersection'](_0x17ab6f[_0x0fff('0x29')],_0x17ab6f[_0x0fff('0x2b')]);_0x2d1800[_0x0fff('0x2d')]=_[_0x0fff('0x2e')](_0x17ab6f[_0x0fff('0x29')],qs[_0x0fff('0x2f')](_0x495734[_0x0fff('0x2b')][_0x0fff('0x2f')]));_0x2d1800[_0x0fff('0x2d')]=_0x2d1800[_0x0fff('0x2d')]['length']?_0x2d1800[_0x0fff('0x2d')]:_0x17ab6f[_0x0fff('0x29')];if(!_0x495734[_0x0fff('0x2b')][_0x0fff('0x30')](_0x0fff('0x31'))){_0x2d1800['limit']=qs['limit'](_0x495734[_0x0fff('0x2b')][_0x0fff('0x32')]);_0x2d1800[_0x0fff('0x18')]=qs[_0x0fff('0x18')](_0x495734['query'][_0x0fff('0x18')]);}_0x2d1800[_0x0fff('0x33')]=qs[_0x0fff('0x34')](_0x495734[_0x0fff('0x2b')]['sort']);_0x2d1800[_0x0fff('0x35')]=qs[_0x0fff('0x2c')](_[_0x0fff('0x36')](_0x495734[_0x0fff('0x2b')],_0x17ab6f[_0x0fff('0x2c')]));if(_0x495734[_0x0fff('0x2b')][_0x0fff('0x37')]){_0x2d1800[_0x0fff('0x35')]=_[_0x0fff('0x38')](_0x2d1800[_0x0fff('0x35')],{'$or':_[_0x0fff('0x39')](_0x1f643d,function(_0xeea9a7){if(_0xeea9a7['type'][_0x0fff('0x3a')]!==_0x0fff('0x3b')){var _0x45ba02={};_0x45ba02[_0xeea9a7[_0x0fff('0x3c')]]={'$like':'%'+_0x495734[_0x0fff('0x2b')][_0x0fff('0x37')]+'%'};return _0x45ba02;}})});}_0x2d1800=_['merge']({},_0x2d1800,_0x495734[_0x0fff('0x3d')]);var _0x44e547={'where':_0x2d1800[_0x0fff('0x35')]};return db[_0x0fff('0x28')][_0x0fff('0x3e')](_0x44e547)[_0x0fff('0x1d')](function(_0x3dc0b8){_0x42441e[_0x0fff('0x3e')]=_0x3dc0b8;if(_0x495734[_0x0fff('0x2b')]['includeAll']){_0x2d1800[_0x0fff('0x3f')]=[{'all':!![]}];}return db['Tag'][_0x0fff('0x40')](_0x2d1800);})[_0x0fff('0x1d')](function(_0x126f6a){_0x42441e['rows']=_0x126f6a;return _0x42441e;})['then'](respondWithFilteredResult(_0x7046a3,_0x2d1800))[_0x0fff('0x41')](handleError(_0x7046a3,null));};exports[_0x0fff('0x42')]=function(_0x311348,_0x4f18dd){var _0x536cc2={'raw':!![],'where':{'id':_0x311348['params']['id']}},_0x4668b3={};_0x4668b3[_0x0fff('0x29')]=_[_0x0fff('0x2a')](db[_0x0fff('0x28')][_0x0fff('0x43')]);_0x4668b3[_0x0fff('0x2b')]=_[_0x0fff('0x2a')](_0x311348['query']);_0x4668b3[_0x0fff('0x2c')]=_[_0x0fff('0x2e')](_0x4668b3[_0x0fff('0x29')],_0x4668b3[_0x0fff('0x2b')]);_0x536cc2[_0x0fff('0x2d')]=_[_0x0fff('0x2e')](_0x4668b3[_0x0fff('0x29')],qs['fields'](_0x311348[_0x0fff('0x2b')][_0x0fff('0x2f')]));_0x536cc2[_0x0fff('0x2d')]=_0x536cc2['attributes'][_0x0fff('0x44')]?_0x536cc2[_0x0fff('0x2d')]:_0x4668b3[_0x0fff('0x29')];if(_0x311348[_0x0fff('0x2b')][_0x0fff('0x45')]){_0x536cc2[_0x0fff('0x3f')]=[{'all':!![]}];}_0x536cc2=_[_0x0fff('0x38')]({},_0x536cc2,_0x311348[_0x0fff('0x3d')]);return db[_0x0fff('0x28')][_0x0fff('0x46')](_0x536cc2)[_0x0fff('0x1d')](handleEntityNotFound(_0x4f18dd,null))['then'](respondWithResult(_0x4f18dd,null))[_0x0fff('0x41')](handleError(_0x4f18dd,null));};exports[_0x0fff('0x47')]=function(_0x5c9dad,_0x38c058){return db[_0x0fff('0x28')][_0x0fff('0x47')](_0x5c9dad['body'],{})['then'](function(_0x2a0b10){var _0x497704=_0x5c9dad['user'][_0x0fff('0x1f')]({'plain':!![]});if(!_0x497704)throw new Error(_0x0fff('0x48'));if(_0x497704[_0x0fff('0x49')]===_0x0fff('0x4a')){var _0x3b4b8e=_0x2a0b10[_0x0fff('0x1f')]({'plain':!![]});var _0x552440=_0x0fff('0x20');return db[_0x0fff('0x4b')][_0x0fff('0x46')]({'where':{'name':_0x552440,'userProfileId':_0x497704[_0x0fff('0x4c')]},'raw':!![]})[_0x0fff('0x1d')](function(_0x2c725c){if(_0x2c725c&&_0x2c725c['autoAssociation']===0x0){return db[_0x0fff('0x4d')][_0x0fff('0x47')]({'name':_0x3b4b8e['name'],'resourceId':_0x3b4b8e['id'],'type':_0x2c725c[_0x0fff('0x25')],'sectionId':_0x2c725c['id']},{})['then'](function(){return _0x2a0b10;});}else{return _0x2a0b10;}})['catch'](function(_0x5aa5d3){logger[_0x0fff('0x23')](_0x0fff('0x4e'),_0x5aa5d3);throw _0x5aa5d3;});}return _0x2a0b10;})[_0x0fff('0x1d')](respondWithResult(_0x38c058,0xc9))[_0x0fff('0x41')](handleError(_0x38c058,null));};exports[_0x0fff('0x4f')]=function(_0x4bf98d,_0x2524ad){if(_0x4bf98d[_0x0fff('0x50')]['id']){delete _0x4bf98d[_0x0fff('0x50')]['id'];}return db[_0x0fff('0x28')][_0x0fff('0x46')]({'where':{'id':_0x4bf98d['params']['id']}})[_0x0fff('0x1d')](handleEntityNotFound(_0x2524ad,null))[_0x0fff('0x1d')](saveUpdates(_0x4bf98d[_0x0fff('0x50')],null))[_0x0fff('0x1d')](respondWithResult(_0x2524ad,null))[_0x0fff('0x41')](handleError(_0x2524ad,null));};exports[_0x0fff('0x1e')]=function(_0x1af59f,_0x236da3){return db[_0x0fff('0x28')][_0x0fff('0x46')]({'where':{'id':_0x1af59f[_0x0fff('0x51')]['id']}})[_0x0fff('0x1d')](handleEntityNotFound(_0x236da3,null))[_0x0fff('0x1d')](removeEntity(_0x236da3,null))[_0x0fff('0x41')](handleError(_0x236da3,null));};
\ No newline at end of file
+var _0xf61e=['../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','error','stack','name','send','index','Tag','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','field','merge','options','include','findAll','rows','catch','params','length','includeAll','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','get','Tags','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','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api'];(function(_0x5e1e25,_0xdc1421){var _0x548e5f=function(_0x576360){while(--_0x576360){_0x5e1e25['push'](_0x5e1e25['shift']());}};_0x548e5f(++_0xdc1421);}(_0xf61e,0x191));var _0xef61=function(_0x18dd57,_0x214508){_0x18dd57=_0x18dd57-0x0;var _0x1681f0=_0xf61e[_0x18dd57];return _0x1681f0;};'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 authService=require(_0xef61('0x12'));var hardwareService=require(_0xef61('0x13'));var Redis=require(_0xef61('0x14'));var qs=require(_0xef61('0x15'));var logger=require(_0xef61('0x16'))(_0xef61('0x17'));var utils=require(_0xef61('0x18'));var config=require(_0xef61('0x19'));var db=require(_0xef61('0x1a'))['db'];function respondWithStatusCode(_0x28d4f7,_0x2f203c){_0x2f203c=_0x2f203c||0xcc;return function(_0x114e1f){if(_0x114e1f){return _0x28d4f7[_0xef61('0x1b')](_0x2f203c);}return _0x28d4f7['status'](_0x2f203c)[_0xef61('0x1c')]();};}function respondWithResult(_0x58d9a0,_0x106472){_0x106472=_0x106472||0xc8;return function(_0x1db2a9){if(_0x1db2a9){return _0x58d9a0[_0xef61('0x1d')](_0x106472)[_0xef61('0x1e')](_0x1db2a9);}};}function respondWithFilteredResult(_0x4c64b5,_0x2ac1b2){return function(_0x435beb){if(_0x435beb){var _0x1224c2=_0x435beb[_0xef61('0x1f')],_0x78ff22=_0x2ac1b2['offset'],_0x588a61=_0x2ac1b2[_0xef61('0x20')]+_0x2ac1b2[_0xef61('0x21')],_0x66fa62;if(_0x588a61>=_0x1224c2){_0x588a61=_0x1224c2;_0x66fa62=0xc8;}else{_0x66fa62=0xce;}_0x4c64b5[_0xef61('0x1d')](_0x66fa62);return _0x4c64b5[_0xef61('0x22')](_0xef61('0x23'),_0x78ff22+'-'+_0x588a61+'/'+_0x1224c2)[_0xef61('0x1e')](_0x435beb);}return null;};}function patchUpdates(_0xdd5e38){return function(_0x55f887){try{jsonpatch[_0xef61('0x24')](_0x55f887,_0xdd5e38,!![]);}catch(_0x2c8dad){return BPromise['reject'](_0x2c8dad);}return _0x55f887[_0xef61('0x25')]();};}function saveUpdates(_0x36966a,_0x29c13c){return function(_0x26cf42){if(_0x26cf42){return _0x26cf42[_0xef61('0x26')](_0x36966a)[_0xef61('0x27')](function(_0x92ea33){return _0x92ea33;});}return null;};}function removeEntity(_0x51f9ca,_0x536e9e){return function(_0x3d31c1){if(_0x3d31c1){return _0x3d31c1['destroy']()[_0xef61('0x27')](function(){var _0x5ae7a2=_0x3d31c1['get']({'plain':!![]});var _0x2f0569='Tags';return db['UserProfileResource'][_0xef61('0x28')]({'where':{'type':_0x2f0569,'resourceId':_0x5ae7a2['id']}})[_0xef61('0x27')](function(){return _0x3d31c1;});})[_0xef61('0x27')](function(){_0x51f9ca[_0xef61('0x1d')](0xcc)['end']();});}};}function handleEntityNotFound(_0x16b144,_0x4e738f){return function(_0x2a6832){if(!_0x2a6832){_0x16b144[_0xef61('0x1b')](0x194);}return _0x2a6832;};}function handleError(_0x2419a9,_0xf4c7c9){_0xf4c7c9=_0xf4c7c9||0x1f4;return function(_0x2155f1){logger[_0xef61('0x29')](_0x2155f1[_0xef61('0x2a')]);if(_0x2155f1[_0xef61('0x2b')]){delete _0x2155f1[_0xef61('0x2b')];}_0x2419a9[_0xef61('0x1d')](_0xf4c7c9)[_0xef61('0x2c')](_0x2155f1);};}exports[_0xef61('0x2d')]=function(_0xeb9a62,_0x63edd4){var _0x1f3572={},_0x85978={},_0x39c15e={'count':0x0,'rows':[]};var _0x393ea9=db[_0xef61('0x2e')][_0xef61('0x2f')];_0x85978[_0xef61('0x30')]=_[_0xef61('0x31')](_0x393ea9);_0x85978['query']=_['keys'](_0xeb9a62[_0xef61('0x32')]);_0x85978[_0xef61('0x33')]=_[_0xef61('0x34')](_0x85978['model'],_0x85978[_0xef61('0x32')]);_0x1f3572[_0xef61('0x35')]=_['intersection'](_0x85978[_0xef61('0x30')],qs['fields'](_0xeb9a62['query'][_0xef61('0x36')]));_0x1f3572['attributes']=_0x1f3572[_0xef61('0x35')]['length']?_0x1f3572[_0xef61('0x35')]:_0x85978[_0xef61('0x30')];if(!_0xeb9a62[_0xef61('0x32')][_0xef61('0x37')](_0xef61('0x38'))){_0x1f3572[_0xef61('0x21')]=qs[_0xef61('0x21')](_0xeb9a62[_0xef61('0x32')][_0xef61('0x21')]);_0x1f3572[_0xef61('0x20')]=qs['offset'](_0xeb9a62[_0xef61('0x32')][_0xef61('0x20')]);}_0x1f3572[_0xef61('0x39')]=qs[_0xef61('0x3a')](_0xeb9a62[_0xef61('0x32')]['sort']);_0x1f3572[_0xef61('0x3b')]=qs[_0xef61('0x33')](_[_0xef61('0x3c')](_0xeb9a62['query'],_0x85978['filters']));if(_0xeb9a62['query'][_0xef61('0x3d')]){_0x1f3572['where']=_['merge'](_0x1f3572['where'],{'$or':_[_0xef61('0x3e')](_0x393ea9,function(_0x294063){if(_0x294063[_0xef61('0x3f')]['key']!=='VIRTUAL'){var _0x4afb2c={};_0x4afb2c[_0x294063[_0xef61('0x40')]]={'$like':'%'+_0xeb9a62[_0xef61('0x32')]['filter']+'%'};return _0x4afb2c;}})});}_0x1f3572=_[_0xef61('0x41')]({},_0x1f3572,_0xeb9a62[_0xef61('0x42')]);var _0x74ced={'where':_0x1f3572[_0xef61('0x3b')]};return db['Tag'][_0xef61('0x1f')](_0x74ced)[_0xef61('0x27')](function(_0x3103d4){_0x39c15e[_0xef61('0x1f')]=_0x3103d4;if(_0xeb9a62['query']['includeAll']){_0x1f3572[_0xef61('0x43')]=[{'all':!![]}];}return db[_0xef61('0x2e')][_0xef61('0x44')](_0x1f3572);})['then'](function(_0x3eee46){_0x39c15e[_0xef61('0x45')]=_0x3eee46;return _0x39c15e;})[_0xef61('0x27')](respondWithFilteredResult(_0x63edd4,_0x1f3572))[_0xef61('0x46')](handleError(_0x63edd4,null));};exports['show']=function(_0x545597,_0x52bbe3){var _0x30efe9={'raw':!![],'where':{'id':_0x545597[_0xef61('0x47')]['id']}},_0x43b93b={};_0x43b93b[_0xef61('0x30')]=_[_0xef61('0x31')](db[_0xef61('0x2e')][_0xef61('0x2f')]);_0x43b93b['query']=_[_0xef61('0x31')](_0x545597[_0xef61('0x32')]);_0x43b93b[_0xef61('0x33')]=_[_0xef61('0x34')](_0x43b93b['model'],_0x43b93b[_0xef61('0x32')]);_0x30efe9[_0xef61('0x35')]=_[_0xef61('0x34')](_0x43b93b[_0xef61('0x30')],qs[_0xef61('0x36')](_0x545597[_0xef61('0x32')]['fields']));_0x30efe9[_0xef61('0x35')]=_0x30efe9[_0xef61('0x35')][_0xef61('0x48')]?_0x30efe9['attributes']:_0x43b93b[_0xef61('0x30')];if(_0x545597[_0xef61('0x32')][_0xef61('0x49')]){_0x30efe9[_0xef61('0x43')]=[{'all':!![]}];}_0x30efe9=_[_0xef61('0x41')]({},_0x30efe9,_0x545597[_0xef61('0x42')]);return db['Tag'][_0xef61('0x4a')](_0x30efe9)[_0xef61('0x27')](handleEntityNotFound(_0x52bbe3,null))['then'](respondWithResult(_0x52bbe3,null))[_0xef61('0x46')](handleError(_0x52bbe3,null));};exports[_0xef61('0x4b')]=function(_0x183ddd,_0x3dbd56){return db['Tag'][_0xef61('0x4b')](_0x183ddd[_0xef61('0x4c')],{})[_0xef61('0x27')](function(_0x47b09d){var _0x3ed63f=_0x183ddd[_0xef61('0x4d')]['get']({'plain':!![]});if(!_0x3ed63f)throw new Error(_0xef61('0x4e'));if(_0x3ed63f[_0xef61('0x4f')]===_0xef61('0x4d')){var _0x2904e0=_0x47b09d[_0xef61('0x50')]({'plain':!![]});var _0x781823=_0xef61('0x51');return db['UserProfileSection'][_0xef61('0x4a')]({'where':{'name':_0x781823,'userProfileId':_0x3ed63f['userProfileId']},'raw':!![]})[_0xef61('0x27')](function(_0x2444a4){if(_0x2444a4&&_0x2444a4[_0xef61('0x52')]===0x0){return db[_0xef61('0x53')][_0xef61('0x4b')]({'name':_0x2904e0[_0xef61('0x2b')],'resourceId':_0x2904e0['id'],'type':_0x2444a4[_0xef61('0x2b')],'sectionId':_0x2444a4['id']},{})[_0xef61('0x27')](function(){return _0x47b09d;});}else{return _0x47b09d;}})[_0xef61('0x46')](function(_0x4af2f3){logger[_0xef61('0x29')](_0xef61('0x54'),_0x4af2f3);throw _0x4af2f3;});}return _0x47b09d;})['then'](respondWithResult(_0x3dbd56,0xc9))['catch'](handleError(_0x3dbd56,null));};exports[_0xef61('0x26')]=function(_0x1ce127,_0x504389){if(_0x1ce127[_0xef61('0x4c')]['id']){delete _0x1ce127['body']['id'];}return db[_0xef61('0x2e')][_0xef61('0x4a')]({'where':{'id':_0x1ce127[_0xef61('0x47')]['id']}})[_0xef61('0x27')](handleEntityNotFound(_0x504389,null))[_0xef61('0x27')](saveUpdates(_0x1ce127[_0xef61('0x4c')],null))['then'](respondWithResult(_0x504389,null))[_0xef61('0x46')](handleError(_0x504389,null));};exports[_0xef61('0x28')]=function(_0x5373f5,_0x29863d){return db[_0xef61('0x2e')]['find']({'where':{'id':_0x5373f5['params']['id']}})[_0xef61('0x27')](handleEntityNotFound(_0x29863d,null))['then'](removeEntity(_0x29863d,null))['catch'](handleError(_0x29863d,null));};
\ No newline at end of file
index 067e7b9..36d7c73 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2c80=['util','../../config/logger','moment','bluebird','request-promise','define','Tag','tools_tags','lodash'];(function(_0x56a40d,_0x931121){var _0xc9b722=function(_0x3af581){while(--_0x3af581){_0x56a40d['push'](_0x56a40d['shift']());}};_0xc9b722(++_0x931121);}(_0x2c80,0x1dc));var _0x02c8=function(_0x3db470,_0xd63502){_0x3db470=_0x3db470-0x0;var _0x44758a=_0x2c80[_0x3db470];return _0x44758a;};'use strict';var _=require(_0x02c8('0x0'));var util=require(_0x02c8('0x1'));var logger=require(_0x02c8('0x2'))('api');var moment=require(_0x02c8('0x3'));var BPromise=require(_0x02c8('0x4'));var rp=require(_0x02c8('0x5'));var attributes=require('./tag.attributes');module['exports']=function(_0x2cabfa,_0x39c201){return _0x2cabfa[_0x02c8('0x6')](_0x02c8('0x7'),attributes,{'tableName':_0x02c8('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x27de=['request-promise','./tag.attributes','exports','define','api','moment','bluebird'];(function(_0x16c31f,_0x6b4aa9){var _0x29ab5c=function(_0x4745ef){while(--_0x4745ef){_0x16c31f['push'](_0x16c31f['shift']());}};_0x29ab5c(++_0x6b4aa9);}(_0x27de,0xc8));var _0xe27d=function(_0x4e4810,_0x441d17){_0x4e4810=_0x4e4810-0x0;var _0xbd0d9d=_0x27de[_0x4e4810];return _0xbd0d9d;};'use strict';var _=require('lodash');var util=require('util');var logger=require('../../config/logger')(_0xe27d('0x0'));var moment=require(_0xe27d('0x1'));var BPromise=require(_0xe27d('0x2'));var rp=require(_0xe27d('0x3'));var attributes=require(_0xe27d('0x4'));module[_0xe27d('0x5')]=function(_0x51a554,_0x3c5ce3){return _0x51a554[_0xe27d('0x6')]('Tag',attributes,{'tableName':'tools_tags','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6e4e0b8..88cd9a7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x95d9=['message','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','client','http','request','then','info','Tag,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x677b67,_0x28cfa1){var _0x49815e=function(_0x2b038c){while(--_0x2b038c){_0x677b67['push'](_0x677b67['shift']());}};_0x49815e(++_0x28cfa1);}(_0x95d9,0x17e));var _0x995d=function(_0x2f1762,_0xab43df){_0x2f1762=_0x2f1762-0x0;var _0x8ab21=_0x95d9[_0x2f1762];return _0x8ab21;};'use strict';var _=require(_0x995d('0x0'));var util=require(_0x995d('0x1'));var moment=require(_0x995d('0x2'));var BPromise=require('bluebird');var rs=require(_0x995d('0x3'));var fs=require('fs');var Redis=require(_0x995d('0x4'));var db=require(_0x995d('0x5'))['db'];var utils=require(_0x995d('0x6'));var logger=require('../../config/logger')('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x995d('0x7')][_0x995d('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x35fbd1,_0x319052,_0xc50614){return new BPromise(function(_0x87caad,_0x47748){return client[_0x995d('0x9')](_0x35fbd1,_0xc50614)[_0x995d('0xa')](function(_0x247f7e){logger[_0x995d('0xb')](_0x995d('0xc'),_0x319052,_0x995d('0xd'));logger['debug']('Tag,\x20%s,\x20%s,\x20%s',_0x319052,_0x995d('0xd'),JSON[_0x995d('0xe')](_0x247f7e));if(_0x247f7e['error']){if(_0x247f7e[_0x995d('0xf')][_0x995d('0x10')]===0x1f4){logger[_0x995d('0xf')](_0x995d('0xc'),_0x319052,_0x247f7e['error'][_0x995d('0x11')]);return _0x47748(_0x247f7e[_0x995d('0xf')]['message']);}logger[_0x995d('0xf')](_0x995d('0xc'),_0x319052,_0x247f7e['error']['message']);return _0x87caad(_0x247f7e[_0x995d('0xf')][_0x995d('0x11')]);}else{logger['info'](_0x995d('0xc'),_0x319052,_0x995d('0xd'));_0x87caad(_0x247f7e[_0x995d('0x12')]['message']);}})['catch'](function(_0x37bf6f){logger[_0x995d('0xf')]('Tag,\x20%s,\x20%s',_0x319052,_0x37bf6f);_0x47748(_0x37bf6f);});});}
\ No newline at end of file
+var _0x80a9=['../../config/logger','../../config/environment','jayson/promise','client','http','request','info','Tag,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','util','randomstring','ioredis','../../mysqldb','../../config/utils'];(function(_0x397e5f,_0x454c8f){var _0x5302b8=function(_0x1a29ef){while(--_0x1a29ef){_0x397e5f['push'](_0x397e5f['shift']());}};_0x5302b8(++_0x454c8f);}(_0x80a9,0xc3));var _0x980a=function(_0x1b7368,_0x3286ed){_0x1b7368=_0x1b7368-0x0;var _0x25d54c=_0x80a9[_0x1b7368];return _0x25d54c;};'use strict';var _=require('lodash');var util=require(_0x980a('0x0'));var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x980a('0x1'));var fs=require('fs');var Redis=require(_0x980a('0x2'));var db=require(_0x980a('0x3'))['db'];var utils=require(_0x980a('0x4'));var logger=require(_0x980a('0x5'))('rpc');var config=require(_0x980a('0x6'));var jayson=require(_0x980a('0x7'));var client=jayson[_0x980a('0x8')][_0x980a('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x4d2e22,_0x253536,_0x2c4f8f){return new BPromise(function(_0xca82dc,_0x3b7811){return client[_0x980a('0xa')](_0x4d2e22,_0x2c4f8f)['then'](function(_0x497977){logger[_0x980a('0xb')](_0x980a('0xc'),_0x253536,_0x980a('0xd'));logger['debug']('Tag,\x20%s,\x20%s,\x20%s',_0x253536,_0x980a('0xd'),JSON[_0x980a('0xe')](_0x497977));if(_0x497977[_0x980a('0xf')]){if(_0x497977[_0x980a('0xf')][_0x980a('0x10')]===0x1f4){logger[_0x980a('0xf')]('Tag,\x20%s,\x20%s',_0x253536,_0x497977['error'][_0x980a('0x11')]);return _0x3b7811(_0x497977[_0x980a('0xf')][_0x980a('0x11')]);}logger['error']('Tag,\x20%s,\x20%s',_0x253536,_0x497977[_0x980a('0xf')][_0x980a('0x11')]);return _0xca82dc(_0x497977[_0x980a('0xf')][_0x980a('0x11')]);}else{logger[_0x980a('0xb')](_0x980a('0xc'),_0x253536,_0x980a('0xd'));_0xca82dc(_0x497977[_0x980a('0x12')]['message']);}})[_0x980a('0x13')](function(_0x3dd9f1){logger[_0x980a('0xf')](_0x980a('0xc'),_0x253536,_0x3dd9f1);_0x3b7811(_0x3dd9f1);});});}
\ No newline at end of file
index 0fc087c..bbe022d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb232=['express','../../components/auth/service','../../components/interaction/service','./team.controller','get','isAuthenticated','index','/:id','show','getQueues','post','addQueues','addAgents','put','update','delete','/:id/queues','removeQueues','/:id/users','removeAgents','exports','multer','path','connect-timeout'];(function(_0x250b16,_0x29e45a){var _0x4e6de3=function(_0x112671){while(--_0x112671){_0x250b16['push'](_0x250b16['shift']());}};_0x4e6de3(++_0x29e45a);}(_0xb232,0x8d));var _0x2b23=function(_0x5a7f64,_0x347d57){_0x5a7f64=_0x5a7f64-0x0;var _0x3d30f1=_0xb232[_0x5a7f64];return _0x3d30f1;};'use strict';var multer=require(_0x2b23('0x0'));var util=require('util');var path=require(_0x2b23('0x1'));var timeout=require(_0x2b23('0x2'));var express=require(_0x2b23('0x3'));var router=express['Router']();var auth=require(_0x2b23('0x4'));var interaction=require(_0x2b23('0x5'));var config=require('../../config/environment');var controller=require(_0x2b23('0x6'));router[_0x2b23('0x7')]('/',auth[_0x2b23('0x8')](),controller[_0x2b23('0x9')]);router[_0x2b23('0x7')](_0x2b23('0xa'),auth[_0x2b23('0x8')](),controller[_0x2b23('0xb')]);router[_0x2b23('0x7')]('/:id/queues',auth['isAuthenticated'](),controller[_0x2b23('0xc')]);router[_0x2b23('0x7')]('/:id/users',auth['isAuthenticated'](),controller['getAgents']);router[_0x2b23('0xd')]('/',auth[_0x2b23('0x8')](),controller['create']);router[_0x2b23('0xd')]('/:id/queues',auth[_0x2b23('0x8')](),controller[_0x2b23('0xe')]);router[_0x2b23('0xd')]('/:id/users',auth[_0x2b23('0x8')](),controller[_0x2b23('0xf')]);router[_0x2b23('0x10')](_0x2b23('0xa'),auth['isAuthenticated'](),controller[_0x2b23('0x11')]);router[_0x2b23('0x12')](_0x2b23('0xa'),auth[_0x2b23('0x8')](),controller['destroy']);router[_0x2b23('0x12')](_0x2b23('0x13'),auth['isAuthenticated'](),controller[_0x2b23('0x14')]);router['delete'](_0x2b23('0x15'),auth[_0x2b23('0x8')](),controller[_0x2b23('0x16')]);module[_0x2b23('0x17')]=router;
\ No newline at end of file
+var _0x6a8b=['delete','destroy','removeQueues','removeAgents','exports','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./team.controller','isAuthenticated','index','get','/:id','show','/:id/queues','/:id/users','post','create','addQueues','addAgents','put','update'];(function(_0x5b0b5c,_0x2af6ab){var _0x43132f=function(_0x16a8b3){while(--_0x16a8b3){_0x5b0b5c['push'](_0x5b0b5c['shift']());}};_0x43132f(++_0x2af6ab);}(_0x6a8b,0x71));var _0xb6a8=function(_0x3bf83f,_0x181cac){_0x3bf83f=_0x3bf83f-0x0;var _0x22c4a9=_0x6a8b[_0x3bf83f];return _0x22c4a9;};'use strict';var multer=require('multer');var util=require(_0xb6a8('0x0'));var path=require(_0xb6a8('0x1'));var timeout=require(_0xb6a8('0x2'));var express=require(_0xb6a8('0x3'));var router=express[_0xb6a8('0x4')]();var auth=require(_0xb6a8('0x5'));var interaction=require(_0xb6a8('0x6'));var config=require(_0xb6a8('0x7'));var controller=require(_0xb6a8('0x8'));router['get']('/',auth[_0xb6a8('0x9')](),controller[_0xb6a8('0xa')]);router[_0xb6a8('0xb')](_0xb6a8('0xc'),auth[_0xb6a8('0x9')](),controller[_0xb6a8('0xd')]);router[_0xb6a8('0xb')](_0xb6a8('0xe'),auth[_0xb6a8('0x9')](),controller['getQueues']);router[_0xb6a8('0xb')](_0xb6a8('0xf'),auth['isAuthenticated'](),controller['getAgents']);router[_0xb6a8('0x10')]('/',auth['isAuthenticated'](),controller[_0xb6a8('0x11')]);router[_0xb6a8('0x10')](_0xb6a8('0xe'),auth[_0xb6a8('0x9')](),controller[_0xb6a8('0x12')]);router[_0xb6a8('0x10')](_0xb6a8('0xf'),auth[_0xb6a8('0x9')](),controller[_0xb6a8('0x13')]);router[_0xb6a8('0x14')](_0xb6a8('0xc'),auth[_0xb6a8('0x9')](),controller[_0xb6a8('0x15')]);router[_0xb6a8('0x16')](_0xb6a8('0xc'),auth[_0xb6a8('0x9')](),controller[_0xb6a8('0x17')]);router['delete'](_0xb6a8('0xe'),auth['isAuthenticated'](),controller[_0xb6a8('0x18')]);router[_0xb6a8('0x16')](_0xb6a8('0xf'),auth[_0xb6a8('0x9')](),controller[_0xb6a8('0x19')]);module[_0xb6a8('0x1a')]=router;
\ No newline at end of file
index 43a9837..57da918 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c62=['STRING','name','sequelize','exports'];(function(_0x3482d7,_0x4214eb){var _0x5a574b=function(_0x59aeda){while(--_0x59aeda){_0x3482d7['push'](_0x3482d7['shift']());}};_0x5a574b(++_0x4214eb);}(_0x3c62,0x9e));var _0x23c6=function(_0x29b609,_0x19d388){_0x29b609=_0x29b609-0x0;var _0x54c952=_0x3c62[_0x29b609];return _0x54c952;};'use strict';var Sequelize=require(_0x23c6('0x0'));module[_0x23c6('0x1')]={'name':{'type':Sequelize[_0x23c6('0x2')],'allowNull':![],'unique':_0x23c6('0x3')},'description':{'type':Sequelize[_0x23c6('0x2')]}};
\ No newline at end of file
+var _0xd833=['sequelize','STRING','name'];(function(_0x10abeb,_0x309e6d){var _0x2a873f=function(_0x42095a){while(--_0x42095a){_0x10abeb['push'](_0x10abeb['shift']());}};_0x2a873f(++_0x309e6d);}(_0xd833,0x16e));var _0x3d83=function(_0x2a76fa,_0x1cee7d){_0x2a76fa=_0x2a76fa-0x0;var _0x2d2442=_0xd833[_0x2a76fa];return _0x2d2442;};'use strict';var Sequelize=require(_0x3d83('0x0'));module['exports']={'name':{'type':Sequelize[_0x3d83('0x1')],'allowNull':![],'unique':_0x3d83('0x2')},'description':{'type':Sequelize[_0x3d83('0x1')]}};
\ No newline at end of file
index f83d96d..0c4b1d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['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','addQueues','findOne','add','ids','removeQueues','remove','voice','chat','mail','sms','fax','openchannel','each','addAgents','User','findAll','loginInPause','voicePause','UserVoiceQueueRt','upsert','isNil','interface','format','omit','spread','userTeam:save','removeAgents','isArray','emit','userTeam:remove','getAgents','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa9e0,0x123));var _0x0a9e=function(_0x5037ab,_0x43209e){_0x5037ab=_0x5037ab-0x0;var _0x512adb=_0xa9e0[_0x5037ab];return _0x512adb;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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){return BPromise['each']([_0x0a9e('0x60'),_0x0a9e('0x61'),_0x0a9e('0x62'),_0x0a9e('0x63'),_0x0a9e('0x64'),_0x0a9e('0x65')],function(_0x40fc56){return _0x361b21[_0x0a9e('0x25')+_[_0x0a9e('0x55')](_0x40fc56)+_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(_0x40fc56===_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){if(_0x40fc56===_0x0a9e('0x60')){return BPromise[_0x0a9e('0x66')](_0x53a6a1,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){var _0x9044fe;return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x4dc6b3[_0x0a9e('0x44')]['id']}})['then'](handleEntityNotFound(_0x81d748,null))[_0x0a9e('0x23')](function(_0x5955f1){if(_0x5955f1){return BPromise[_0x0a9e('0x66')]([_0x0a9e('0x60'),_0x0a9e('0x61'),_0x0a9e('0x62'),'sms',_0x0a9e('0x64'),_0x0a9e('0x65')],function(_0x1d4877){return _0x5955f1['get'+_[_0x0a9e('0x55')](_0x1d4877)+_0x0a9e('0x59')]({'attributes':['id',_0x0a9e('0x28')]})[_0x0a9e('0x23')](function(_0x255e49){return BPromise[_0x0a9e('0x66')](_0x255e49,function(_0x32b9bd){return _0x32b9bd[_0x0a9e('0x74')](_0x4dc6b3['query'][_0x0a9e('0x5d')])[_0x0a9e('0x23')](function(){if(_0x1d4877==='voice'){return db[_0x0a9e('0x6c')][_0x0a9e('0x24')]({'where':{'VoiceQueueId':_0x32b9bd['id'],'UserId':_0x4dc6b3[_0x0a9e('0x2e')]['ids']}});}});});})[_0x0a9e('0x23')](function(){return _0x5955f1;});})['then'](function(){return _0x5955f1;});}})[_0x0a9e('0x23')](function(_0x2b5148){if(_0x2b5148){return _0x2b5148[_0x0a9e('0x74')](_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')])[_0x0a9e('0x23')](function(_0x16a039){if(_[_0x0a9e('0x75')](_0x4dc6b3['query'][_0x0a9e('0x5d')])){for(var _0x31d25a=0x0;_0x31d25a<_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')][_0x0a9e('0x32')];_0x31d25a+=0x1){socket[_0x0a9e('0x76')](_0x0a9e('0x77'),{'UserId':_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')][_0x31d25a],'TeamId':_0x4dc6b3[_0x0a9e('0x44')]['id']});}}else{socket[_0x0a9e('0x76')](_0x0a9e('0x77'),{'UserId':_0x4dc6b3[_0x0a9e('0x2e')]['ids'],'TeamId':_0x4dc6b3[_0x0a9e('0x44')]['id']});}});}})[_0x0a9e('0x23')](respondWithStatusCode(_0x81d748,null))[_0x0a9e('0x42')](handleError(_0x81d748,null));};exports[_0x0a9e('0x78')]=function(_0xb0599a,_0x5d9ddb,_0x3afc8c){var _0x1756c7={};var _0x5ce99d={};var _0x23b447;var _0x5e725e;return db[_0x0a9e('0x2a')][_0x0a9e('0x5b')]({'where':{'id':_0xb0599a[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x5d9ddb,null))['then'](function(_0x3ceba6){if(_0x3ceba6){_0x23b447=_0x3ceba6;_0x5ce99d['model']=_[_0x0a9e('0x2d')](db[_0x0a9e('0x68')]['rawAttributes']);_0x5ce99d[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0xb0599a[_0x0a9e('0x2e')]);_0x5ce99d['filters']=_['intersection'](_0x5ce99d[_0x0a9e('0x2c')],_0x5ce99d[_0x0a9e('0x2e')]);_0x1756c7[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x5ce99d[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0xb0599a[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x1756c7[_0x0a9e('0x30')]=_0x1756c7['attributes'][_0x0a9e('0x32')]?_0x1756c7['attributes']:_0x5ce99d[_0x0a9e('0x2c')];_0x1756c7[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0xb0599a[_0x0a9e('0x2e')][_0x0a9e('0x35')]);_0x1756c7['where']=qs[_0x0a9e('0x36')](_[_0x0a9e('0x58')](_0xb0599a[_0x0a9e('0x2e')],_0x5ce99d[_0x0a9e('0x36')]));if(_0xb0599a[_0x0a9e('0x2e')]['filter']){_0x1756c7['where']=_[_0x0a9e('0x38')](_0x1756c7['where'],{'$or':_[_0x0a9e('0x3a')](_0x1756c7[_0x0a9e('0x30')],function(_0x4672e1){var _0x16313e={};_0x16313e[_0x4672e1]={'$like':'%'+_0xb0599a[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x16313e;})});}_0x1756c7=_['merge']({},_0x1756c7,_0xb0599a['options']);return _0x23b447[_0x0a9e('0x78')](_0x1756c7);}})['then'](function(_0x2469d1){if(_0x2469d1){_0x5e725e=_0x2469d1['length'];if(!_0xb0599a[_0x0a9e('0x2e')]['hasOwnProperty']('nolimit')){_0x1756c7[_0x0a9e('0x1d')]=qs[_0x0a9e('0x1d')](_0xb0599a['query'][_0x0a9e('0x1d')]);_0x1756c7[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0xb0599a[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);}return _0x23b447['getAgents'](_0x1756c7);}})['then'](function(_0x16449b){if(_0x16449b){return _0x16449b?{'count':_0x5e725e,'rows':_0x16449b}:null;}})[_0x0a9e('0x23')](respondWithResult(_0x5d9ddb,null))[_0x0a9e('0x42')](handleError(_0x5d9ddb,null));};
\ No newline at end of file
+var _0xa9e0=['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','addQueues','findOne','add','ids','removeQueues','remove','voice','chat','mail','sms','fax','openchannel','each','addAgents','User','findAll','loginInPause','voicePause','UserVoiceQueueRt','upsert','isNil','interface','format','omit','spread','userTeam:save','removeAgents','isArray','emit','userTeam:remove','getAgents','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xa9e0,0x123));var _0x0a9e=function(_0x49ca18,_0x5e6d05){_0x49ca18=_0x49ca18-0x0;var _0x145d54=_0xa9e0[_0x49ca18];return _0x145d54;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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){return BPromise['each']([_0x0a9e('0x60'),_0x0a9e('0x61'),_0x0a9e('0x62'),_0x0a9e('0x63'),_0x0a9e('0x64'),_0x0a9e('0x65')],function(_0x40fc56){return _0x361b21[_0x0a9e('0x25')+_[_0x0a9e('0x55')](_0x40fc56)+_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(_0x40fc56===_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){if(_0x40fc56===_0x0a9e('0x60')){return BPromise[_0x0a9e('0x66')](_0x53a6a1,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){var _0x9044fe;return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x4dc6b3[_0x0a9e('0x44')]['id']}})['then'](handleEntityNotFound(_0x81d748,null))[_0x0a9e('0x23')](function(_0x5955f1){if(_0x5955f1){return BPromise[_0x0a9e('0x66')]([_0x0a9e('0x60'),_0x0a9e('0x61'),_0x0a9e('0x62'),'sms',_0x0a9e('0x64'),_0x0a9e('0x65')],function(_0x1d4877){return _0x5955f1['get'+_[_0x0a9e('0x55')](_0x1d4877)+_0x0a9e('0x59')]({'attributes':['id',_0x0a9e('0x28')]})[_0x0a9e('0x23')](function(_0x255e49){return BPromise[_0x0a9e('0x66')](_0x255e49,function(_0x32b9bd){return _0x32b9bd[_0x0a9e('0x74')](_0x4dc6b3['query'][_0x0a9e('0x5d')])[_0x0a9e('0x23')](function(){if(_0x1d4877==='voice'){return db[_0x0a9e('0x6c')][_0x0a9e('0x24')]({'where':{'VoiceQueueId':_0x32b9bd['id'],'UserId':_0x4dc6b3[_0x0a9e('0x2e')]['ids']}});}});});})[_0x0a9e('0x23')](function(){return _0x5955f1;});})['then'](function(){return _0x5955f1;});}})[_0x0a9e('0x23')](function(_0x2b5148){if(_0x2b5148){return _0x2b5148[_0x0a9e('0x74')](_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')])[_0x0a9e('0x23')](function(_0x16a039){if(_[_0x0a9e('0x75')](_0x4dc6b3['query'][_0x0a9e('0x5d')])){for(var _0x31d25a=0x0;_0x31d25a<_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')][_0x0a9e('0x32')];_0x31d25a+=0x1){socket[_0x0a9e('0x76')](_0x0a9e('0x77'),{'UserId':_0x4dc6b3[_0x0a9e('0x2e')][_0x0a9e('0x5d')][_0x31d25a],'TeamId':_0x4dc6b3[_0x0a9e('0x44')]['id']});}}else{socket[_0x0a9e('0x76')](_0x0a9e('0x77'),{'UserId':_0x4dc6b3[_0x0a9e('0x2e')]['ids'],'TeamId':_0x4dc6b3[_0x0a9e('0x44')]['id']});}});}})[_0x0a9e('0x23')](respondWithStatusCode(_0x81d748,null))[_0x0a9e('0x42')](handleError(_0x81d748,null));};exports[_0x0a9e('0x78')]=function(_0xb0599a,_0x5d9ddb,_0x3afc8c){var _0x1756c7={};var _0x5ce99d={};var _0x23b447;var _0x5e725e;return db[_0x0a9e('0x2a')][_0x0a9e('0x5b')]({'where':{'id':_0xb0599a[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x5d9ddb,null))['then'](function(_0x3ceba6){if(_0x3ceba6){_0x23b447=_0x3ceba6;_0x5ce99d['model']=_[_0x0a9e('0x2d')](db[_0x0a9e('0x68')]['rawAttributes']);_0x5ce99d[_0x0a9e('0x2e')]=_[_0x0a9e('0x2d')](_0xb0599a[_0x0a9e('0x2e')]);_0x5ce99d['filters']=_['intersection'](_0x5ce99d[_0x0a9e('0x2c')],_0x5ce99d[_0x0a9e('0x2e')]);_0x1756c7[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x5ce99d[_0x0a9e('0x2c')],qs[_0x0a9e('0x31')](_0xb0599a[_0x0a9e('0x2e')][_0x0a9e('0x31')]));_0x1756c7[_0x0a9e('0x30')]=_0x1756c7['attributes'][_0x0a9e('0x32')]?_0x1756c7['attributes']:_0x5ce99d[_0x0a9e('0x2c')];_0x1756c7[_0x0a9e('0x34')]=qs[_0x0a9e('0x35')](_0xb0599a[_0x0a9e('0x2e')][_0x0a9e('0x35')]);_0x1756c7['where']=qs[_0x0a9e('0x36')](_[_0x0a9e('0x58')](_0xb0599a[_0x0a9e('0x2e')],_0x5ce99d[_0x0a9e('0x36')]));if(_0xb0599a[_0x0a9e('0x2e')]['filter']){_0x1756c7['where']=_[_0x0a9e('0x38')](_0x1756c7['where'],{'$or':_[_0x0a9e('0x3a')](_0x1756c7[_0x0a9e('0x30')],function(_0x4672e1){var _0x16313e={};_0x16313e[_0x4672e1]={'$like':'%'+_0xb0599a[_0x0a9e('0x2e')][_0x0a9e('0x37')]+'%'};return _0x16313e;})});}_0x1756c7=_['merge']({},_0x1756c7,_0xb0599a['options']);return _0x23b447[_0x0a9e('0x78')](_0x1756c7);}})['then'](function(_0x2469d1){if(_0x2469d1){_0x5e725e=_0x2469d1['length'];if(!_0xb0599a[_0x0a9e('0x2e')]['hasOwnProperty']('nolimit')){_0x1756c7[_0x0a9e('0x1d')]=qs[_0x0a9e('0x1d')](_0xb0599a['query'][_0x0a9e('0x1d')]);_0x1756c7[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0xb0599a[_0x0a9e('0x2e')][_0x0a9e('0x1c')]);}return _0x23b447['getAgents'](_0x1756c7);}})['then'](function(_0x16449b){if(_0x16449b){return _0x16449b?{'count':_0x5e725e,'rows':_0x16449b}:null;}})[_0x0a9e('0x23')](respondWithResult(_0x5d9ddb,null))[_0x0a9e('0x42')](handleError(_0x5d9ddb,null));};
\ No newline at end of file
index e1cd65e..1c41005 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9528=['../../mysqldb','Team','save','remove','emit','hasOwnProperty','exports','events'];(function(_0x111311,_0x1e2f69){var _0x4cef39=function(_0x382ab2){while(--_0x382ab2){_0x111311['push'](_0x111311['shift']());}};_0x4cef39(++_0x1e2f69);}(_0x9528,0xaf));var _0x8952=function(_0x37f8ad,_0x574f07){_0x37f8ad=_0x37f8ad-0x0;var _0xd33f15=_0x9528[_0x37f8ad];return _0xd33f15;};'use strict';var EventEmitter=require(_0x8952('0x0'));var Team=require(_0x8952('0x1'))['db'][_0x8952('0x2')];var TeamEvents=new EventEmitter();TeamEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x8952('0x3'),'afterUpdate':'update','afterDestroy':_0x8952('0x4')};function emitEvent(_0x401e59){return function(_0x56bc7a,_0xdd550e,_0x445166){TeamEvents['emit'](_0x401e59+':'+_0x56bc7a['id'],_0x56bc7a);TeamEvents[_0x8952('0x5')](_0x401e59,_0x56bc7a);_0x445166(null);};}for(var e in events){if(events[_0x8952('0x6')](e)){var event=events[e];Team['hook'](e,emitEvent(event));}}module[_0x8952('0x7')]=TeamEvents;
\ No newline at end of file
+var _0x49af=['save','remove','emit','hasOwnProperty','hook','exports','../../mysqldb','setMaxListeners'];(function(_0x42245d,_0x51758f){var _0x4b211a=function(_0x2634e){while(--_0x2634e){_0x42245d['push'](_0x42245d['shift']());}};_0x4b211a(++_0x51758f);}(_0x49af,0xae));var _0xf49a=function(_0x29cf67,_0x356702){_0x29cf67=_0x29cf67-0x0;var _0x40200b=_0x49af[_0x29cf67];return _0x40200b;};'use strict';var EventEmitter=require('events');var Team=require(_0xf49a('0x0'))['db']['Team'];var TeamEvents=new EventEmitter();TeamEvents[_0xf49a('0x1')](0x0);var events={'afterCreate':_0xf49a('0x2'),'afterUpdate':'update','afterDestroy':_0xf49a('0x3')};function emitEvent(_0x2a774d){return function(_0x438647,_0x2ba0e5,_0x58efe2){TeamEvents['emit'](_0x2a774d+':'+_0x438647['id'],_0x438647);TeamEvents[_0xf49a('0x4')](_0x2a774d,_0x438647);_0x58efe2(null);};}for(var e in events){if(events[_0xf49a('0x5')](e)){var event=events[e];Team[_0xf49a('0x6')](e,emitEvent(event));}}module[_0xf49a('0x7')]=TeamEvents;
\ No newline at end of file
index ac8bf9b..858657c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['moment','request-promise','./team.attributes','exports','define','Team','teams','lodash','util','../../config/logger','api'];(function(_0x5e301f,_0x39167b){var _0x42f5dc=function(_0x4534cd){while(--_0x4534cd){_0x5e301f['push'](_0x5e301f['shift']());}};_0x42f5dc(++_0x39167b);}(_0x008c,0x188));var _0xc008=function(_0x10bae6,_0x41d85f){_0x10bae6=_0x10bae6-0x0;var _0x251123=_0x008c[_0x10bae6];return _0x251123;};'use strict';var _=require(_0xc008('0x0'));var util=require(_0xc008('0x1'));var logger=require(_0xc008('0x2'))(_0xc008('0x3'));var moment=require(_0xc008('0x4'));var BPromise=require('bluebird');var rp=require(_0xc008('0x5'));var attributes=require(_0xc008('0x6'));module[_0xc008('0x7')]=function(_0x163bd9,_0x1cbe76){return _0x163bd9[_0xc008('0x8')](_0xc008('0x9'),attributes,{'tableName':_0xc008('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xedd9=['../../config/logger','api','moment','bluebird','request-promise','./team.attributes','exports','define','Team','teams','util'];(function(_0x234956,_0x3f69df){var _0x2f1233=function(_0x8674c7){while(--_0x8674c7){_0x234956['push'](_0x234956['shift']());}};_0x2f1233(++_0x3f69df);}(_0xedd9,0xfc));var _0x9edd=function(_0x5bf328,_0x24c070){_0x5bf328=_0x5bf328-0x0;var _0x91c32f=_0xedd9[_0x5bf328];return _0x91c32f;};'use strict';var _=require('lodash');var util=require(_0x9edd('0x0'));var logger=require(_0x9edd('0x1'))(_0x9edd('0x2'));var moment=require(_0x9edd('0x3'));var BPromise=require(_0x9edd('0x4'));var rp=require(_0x9edd('0x5'));var attributes=require(_0x9edd('0x6'));module[_0x9edd('0x7')]=function(_0x5943b3,_0x33679f){return _0x5943b3[_0x9edd('0x8')](_0x9edd('0x9'),attributes,{'tableName':_0x9edd('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5eb1e0e..8f6533e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3cce=['error','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','defaults','redis','localhost','socket.io-emitter','register','request','info','Team,\x20%s,\x20%s','request\x20sent','debug','Team,\x20%s,\x20%s,\x20%s'];(function(_0x558a9c,_0x1e20aa){var _0x172c05=function(_0x46cf16){while(--_0x46cf16){_0x558a9c['push'](_0x558a9c['shift']());}};_0x172c05(++_0x1e20aa);}(_0x3cce,0x6c));var _0xe3cc=function(_0x493a72,_0x52200b){_0x493a72=_0x493a72-0x0;var _0x10f939=_0x3cce[_0x493a72];return _0x10f939;};'use strict';var _=require(_0xe3cc('0x0'));var util=require(_0xe3cc('0x1'));var moment=require('moment');var BPromise=require(_0xe3cc('0x2'));var rs=require(_0xe3cc('0x3'));var fs=require('fs');var Redis=require(_0xe3cc('0x4'));var db=require(_0xe3cc('0x5'))['db'];var utils=require(_0xe3cc('0x6'));var logger=require(_0xe3cc('0x7'))(_0xe3cc('0x8'));var config=require('../../config/environment');var jayson=require(_0xe3cc('0x9'));var client=jayson[_0xe3cc('0xa')]['http']({'port':0x232a});config['redis']=_[_0xe3cc('0xb')](config[_0xe3cc('0xc')],{'host':_0xe3cc('0xd'),'port':0x18eb});var socket=require(_0xe3cc('0xe'))(new Redis(config[_0xe3cc('0xc')]));require('./team.socket')[_0xe3cc('0xf')](socket);function respondWithRpcPromise(_0x4362c4,_0x469d58,_0x2d93eb){return new BPromise(function(_0x3aeddb,_0x20f273){return client[_0xe3cc('0x10')](_0x4362c4,_0x2d93eb)['then'](function(_0x4c7911){logger[_0xe3cc('0x11')](_0xe3cc('0x12'),_0x469d58,_0xe3cc('0x13'));logger[_0xe3cc('0x14')](_0xe3cc('0x15'),_0x469d58,_0xe3cc('0x13'),JSON['stringify'](_0x4c7911));if(_0x4c7911[_0xe3cc('0x16')]){if(_0x4c7911[_0xe3cc('0x16')]['code']===0x1f4){logger[_0xe3cc('0x16')](_0xe3cc('0x12'),_0x469d58,_0x4c7911[_0xe3cc('0x16')][_0xe3cc('0x17')]);return _0x20f273(_0x4c7911[_0xe3cc('0x16')][_0xe3cc('0x17')]);}logger['error'](_0xe3cc('0x12'),_0x469d58,_0x4c7911[_0xe3cc('0x16')][_0xe3cc('0x17')]);return _0x3aeddb(_0x4c7911[_0xe3cc('0x16')]['message']);}else{logger[_0xe3cc('0x11')]('Team,\x20%s,\x20%s',_0x469d58,'request\x20sent');_0x3aeddb(_0x4c7911[_0xe3cc('0x18')][_0xe3cc('0x17')]);}})[_0xe3cc('0x19')](function(_0x196380){logger[_0xe3cc('0x16')](_0xe3cc('0x12'),_0x469d58,_0x196380);_0x20f273(_0x196380);});});}
\ No newline at end of file
+var _0xa24c=['Team,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','redis','defaults','localhost','socket.io-emitter','./team.socket','register','request','then','info','Team,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x7f162d,_0x190ff5){var _0x2d58d8=function(_0x5a93cf){while(--_0x5a93cf){_0x7f162d['push'](_0x7f162d['shift']());}};_0x2d58d8(++_0x190ff5);}(_0xa24c,0x128));var _0xca24=function(_0x4ecb8e,_0x467eb1){_0x4ecb8e=_0x4ecb8e-0x0;var _0x400662=_0xa24c[_0x4ecb8e];return _0x400662;};'use strict';var _=require(_0xca24('0x0'));var util=require('util');var moment=require(_0xca24('0x1'));var BPromise=require(_0xca24('0x2'));var rs=require(_0xca24('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xca24('0x4'))['db'];var utils=require(_0xca24('0x5'));var logger=require(_0xca24('0x6'))(_0xca24('0x7'));var config=require(_0xca24('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xca24('0x9')][_0xca24('0xa')]({'port':0x232a});config[_0xca24('0xb')]=_[_0xca24('0xc')](config[_0xca24('0xb')],{'host':_0xca24('0xd'),'port':0x18eb});var socket=require(_0xca24('0xe'))(new Redis(config[_0xca24('0xb')]));require(_0xca24('0xf'))[_0xca24('0x10')](socket);function respondWithRpcPromise(_0x2a3c16,_0x520da2,_0x469dca){return new BPromise(function(_0xfaba63,_0x23dcbe){return client[_0xca24('0x11')](_0x2a3c16,_0x469dca)[_0xca24('0x12')](function(_0x4ae2b7){logger[_0xca24('0x13')](_0xca24('0x14'),_0x520da2,_0xca24('0x15'));logger[_0xca24('0x16')](_0xca24('0x17'),_0x520da2,_0xca24('0x15'),JSON[_0xca24('0x18')](_0x4ae2b7));if(_0x4ae2b7[_0xca24('0x19')]){if(_0x4ae2b7[_0xca24('0x19')]['code']===0x1f4){logger[_0xca24('0x19')]('Team,\x20%s,\x20%s',_0x520da2,_0x4ae2b7['error'][_0xca24('0x1a')]);return _0x23dcbe(_0x4ae2b7['error'][_0xca24('0x1a')]);}logger[_0xca24('0x19')](_0xca24('0x14'),_0x520da2,_0x4ae2b7[_0xca24('0x19')]['message']);return _0xfaba63(_0x4ae2b7[_0xca24('0x19')][_0xca24('0x1a')]);}else{logger[_0xca24('0x13')]('Team,\x20%s,\x20%s',_0x520da2,'request\x20sent');_0xfaba63(_0x4ae2b7[_0xca24('0x1b')][_0xca24('0x1a')]);}})[_0xca24('0x1c')](function(_0x3ffed8){logger[_0xca24('0x19')](_0xca24('0x14'),_0x520da2,_0x3ffed8);_0x23dcbe(_0x3ffed8);});});}
\ No newline at end of file
index ebf887f..b02823f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x492c=['remove','update','emit','length','./team.events','save'];(function(_0x15bc81,_0x4d4f77){var _0x59440e=function(_0x1b60f2){while(--_0x1b60f2){_0x15bc81['push'](_0x15bc81['shift']());}};_0x59440e(++_0x4d4f77);}(_0x492c,0x142));var _0xc492=function(_0xde9c3d,_0xb541e9){_0xde9c3d=_0xde9c3d-0x0;var _0x4da06e=_0x492c[_0xde9c3d];return _0x4da06e;};'use strict';var TeamEvents=require(_0xc492('0x0'));var events=[_0xc492('0x1'),_0xc492('0x2'),_0xc492('0x3')];function createListener(_0x3df083,_0x8fd70){return function(_0x1baae8){_0x8fd70[_0xc492('0x4')](_0x3df083,_0x1baae8);};}function removeListener(_0x409443,_0x200537){return function(){TeamEvents['removeListener'](_0x409443,_0x200537);};}exports['register']=function(_0x175463){for(var _0x5c850c=0x0,_0x458285=events[_0xc492('0x5')];_0x5c850c<_0x458285;_0x5c850c++){var _0x5919b1=events[_0x5c850c];var _0x128070=createListener('team:'+_0x5919b1,_0x175463);TeamEvents['on'](_0x5919b1,_0x128070);}};
\ No newline at end of file
+var _0x193b=['remove','update','removeListener','register','length','./team.events'];(function(_0x40ddc0,_0x41c082){var _0x1aebf1=function(_0x3ba1f6){while(--_0x3ba1f6){_0x40ddc0['push'](_0x40ddc0['shift']());}};_0x1aebf1(++_0x41c082);}(_0x193b,0xad));var _0xb193=function(_0x56a1f0,_0x211471){_0x56a1f0=_0x56a1f0-0x0;var _0xc48f6=_0x193b[_0x56a1f0];return _0xc48f6;};'use strict';var TeamEvents=require(_0xb193('0x0'));var events=['save',_0xb193('0x1'),_0xb193('0x2')];function createListener(_0x505724,_0x54b0af){return function(_0x1f06a0){_0x54b0af['emit'](_0x505724,_0x1f06a0);};}function removeListener(_0x3db399,_0x53b5a1){return function(){TeamEvents[_0xb193('0x3')](_0x3db399,_0x53b5a1);};}exports[_0xb193('0x4')]=function(_0xcb63f9){for(var _0x3256ec=0x0,_0x462dd2=events[_0xb193('0x5')];_0x3256ec<_0x462dd2;_0x3256ec++){var _0x2bb352=events[_0x3256ec];var _0x47c332=createListener('team:'+_0x2bb352,_0xcb63f9);TeamEvents['on'](_0x2bb352,_0x47c332);}};
\ No newline at end of file
index dfb6b40..25d065f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5a65=['put','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./template.controller','get','/:id','isAuthenticated','show','post','create'];(function(_0x142ba8,_0x2c3265){var _0x4dc848=function(_0x331a51){while(--_0x331a51){_0x142ba8['push'](_0x142ba8['shift']());}};_0x4dc848(++_0x2c3265);}(_0x5a65,0x68));var _0x55a6=function(_0x20f981,_0x17f24c){_0x20f981=_0x20f981-0x0;var _0x4f930c=_0x5a65[_0x20f981];return _0x4f930c;};'use strict';var multer=require(_0x55a6('0x0'));var util=require(_0x55a6('0x1'));var path=require(_0x55a6('0x2'));var timeout=require(_0x55a6('0x3'));var express=require(_0x55a6('0x4'));var router=express[_0x55a6('0x5')]();var auth=require(_0x55a6('0x6'));var interaction=require(_0x55a6('0x7'));var config=require(_0x55a6('0x8'));var controller=require(_0x55a6('0x9'));router[_0x55a6('0xa')]('/',auth['isAuthenticated'](),controller['index']);router[_0x55a6('0xa')](_0x55a6('0xb'),auth[_0x55a6('0xc')](),controller[_0x55a6('0xd')]);router[_0x55a6('0xe')]('/',auth[_0x55a6('0xc')](),controller[_0x55a6('0xf')]);router[_0x55a6('0x10')]('/:id',auth[_0x55a6('0xc')](),controller['update']);router[_0x55a6('0x11')](_0x55a6('0xb'),auth['isAuthenticated'](),controller[_0x55a6('0x12')]);module[_0x55a6('0x13')]=router;
\ No newline at end of file
+var _0x23cd=['isAuthenticated','show','post','create','put','delete','exports','multer','util','path','connect-timeout','express','Router','../../components/interaction/service','../../config/environment','./template.controller','get','index','/:id'];(function(_0x4d2bbb,_0x5ec375){var _0x5b326d=function(_0x4ce380){while(--_0x4ce380){_0x4d2bbb['push'](_0x4d2bbb['shift']());}};_0x5b326d(++_0x5ec375);}(_0x23cd,0xfe));var _0xd23c=function(_0x1f0f34,_0x2b1525){_0x1f0f34=_0x1f0f34-0x0;var _0x4e0858=_0x23cd[_0x1f0f34];return _0x4e0858;};'use strict';var multer=require(_0xd23c('0x0'));var util=require(_0xd23c('0x1'));var path=require(_0xd23c('0x2'));var timeout=require(_0xd23c('0x3'));var express=require(_0xd23c('0x4'));var router=express[_0xd23c('0x5')]();var auth=require('../../components/auth/service');var interaction=require(_0xd23c('0x6'));var config=require(_0xd23c('0x7'));var controller=require(_0xd23c('0x8'));router[_0xd23c('0x9')]('/',auth['isAuthenticated'](),controller[_0xd23c('0xa')]);router[_0xd23c('0x9')](_0xd23c('0xb'),auth[_0xd23c('0xc')](),controller[_0xd23c('0xd')]);router[_0xd23c('0xe')]('/',auth[_0xd23c('0xc')](),controller[_0xd23c('0xf')]);router[_0xd23c('0x10')]('/:id',auth[_0xd23c('0xc')](),controller['update']);router[_0xd23c('0x11')](_0xd23c('0xb'),auth[_0xd23c('0xc')](),controller['destroy']);module[_0xd23c('0x12')]=router;
\ No newline at end of file
index 2dd599f..2cb69ed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5ee2=['exports'];(function(_0x44277b,_0x48b213){var _0x52fc9e=function(_0x648876){while(--_0x648876){_0x44277b['push'](_0x44277b['shift']());}};_0x52fc9e(++_0x48b213);}(_0x5ee2,0x188));var _0x25ee=function(_0x29c97b,_0x1b98da){_0x29c97b=_0x29c97b-0x0;var _0x4040c1=_0x5ee2[_0x29c97b];return _0x4040c1;};'use strict';var Sequelize=require('sequelize');module[_0x25ee('0x0')]={'name':{'type':Sequelize['STRING']},'description':{'type':Sequelize['STRING']},'html':{'type':Sequelize['TEXT']}};
\ No newline at end of file
+var _0xb11a=['exports','STRING','sequelize'];(function(_0xc5b5d4,_0x22cc0e){var _0x46fae5=function(_0x4a88ae){while(--_0x4a88ae){_0xc5b5d4['push'](_0xc5b5d4['shift']());}};_0x46fae5(++_0x22cc0e);}(_0xb11a,0x167));var _0xab11=function(_0x45bf86,_0x75586e){_0x45bf86=_0x45bf86-0x0;var _0x1f02b7=_0xb11a[_0x45bf86];return _0x1f02b7;};'use strict';var Sequelize=require(_0xab11('0x0'));module[_0xab11('0x1')]={'name':{'type':Sequelize[_0xab11('0x2')]},'description':{'type':Sequelize[_0xab11('0x2')]},'html':{'type':Sequelize['TEXT']}};
\ No newline at end of file
index 5252e43..db8e0f7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc9cd=['keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','sort','pick','filter','where','map','type','merge','options','Template','include','findAll','rows','catch','show','find','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','Templates','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','html-pdf','eml-format','rimraf','fast-json-patch','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','status','end','json','count','offset','set','apply','reject','update','then','destroy','get','UserProfileResource','sendStatus','error','stack','name','send','index','rawAttributes','model'];(function(_0x999b85,_0x1edc2b){var _0x1d7124=function(_0x59cd29){while(--_0x59cd29){_0x999b85['push'](_0x999b85['shift']());}};_0x1d7124(++_0x1edc2b);}(_0xc9cd,0x100));var _0xdc9c=function(_0x250f95,_0x5a5728){_0x250f95=_0x250f95-0x0;var _0x4ada97=_0xc9cd[_0x250f95];return _0x4ada97;};'use strict';var pdf=require(_0xdc9c('0x0'));var emlformat=require(_0xdc9c('0x1'));var rimraf=require(_0xdc9c('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xdc9c('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require('path');var sox=require('sox');var csv=require(_0xdc9c('0x4'));var ejs=require(_0xdc9c('0x5'));var fs=require('fs');var _=require(_0xdc9c('0x6'));var squel=require(_0xdc9c('0x7'));var crypto=require(_0xdc9c('0x8'));var jsforce=require(_0xdc9c('0x9'));var deskjs=require(_0xdc9c('0xa'));var toCsv=require(_0xdc9c('0x4'));var querystring=require('querystring');var Papa=require(_0xdc9c('0xb'));var authService=require(_0xdc9c('0xc'));var hardwareService=require(_0xdc9c('0xd'));var Redis=require(_0xdc9c('0xe'));var qs=require(_0xdc9c('0xf'));var logger=require(_0xdc9c('0x10'))('api');var utils=require(_0xdc9c('0x11'));var config=require('../../config/environment');var db=require(_0xdc9c('0x12'))['db'];function respondWithStatusCode(_0x1e51ea,_0x320378){_0x320378=_0x320378||0xcc;return function(_0x3495a1){if(_0x3495a1){return _0x1e51ea['sendStatus'](_0x320378);}return _0x1e51ea[_0xdc9c('0x13')](_0x320378)[_0xdc9c('0x14')]();};}function respondWithResult(_0x5e8204,_0x54ad50){_0x54ad50=_0x54ad50||0xc8;return function(_0x3528f4){if(_0x3528f4){return _0x5e8204[_0xdc9c('0x13')](_0x54ad50)[_0xdc9c('0x15')](_0x3528f4);}};}function respondWithFilteredResult(_0x86c336,_0x515568){return function(_0x519b1e){if(_0x519b1e){var _0x4d918a=_0x519b1e[_0xdc9c('0x16')],_0x119d38=_0x515568[_0xdc9c('0x17')],_0xc768da=_0x515568[_0xdc9c('0x17')]+_0x515568['limit'],_0x1744be;if(_0xc768da>=_0x4d918a){_0xc768da=_0x4d918a;_0x1744be=0xc8;}else{_0x1744be=0xce;}_0x86c336[_0xdc9c('0x13')](_0x1744be);return _0x86c336[_0xdc9c('0x18')]('Content-Range',_0x119d38+'-'+_0xc768da+'/'+_0x4d918a)[_0xdc9c('0x15')](_0x519b1e);}return null;};}function patchUpdates(_0x485d8c){return function(_0x35f0a4){try{jsonpatch[_0xdc9c('0x19')](_0x35f0a4,_0x485d8c,!![]);}catch(_0x4ee06c){return BPromise[_0xdc9c('0x1a')](_0x4ee06c);}return _0x35f0a4['save']();};}function saveUpdates(_0x34cf06,_0x227e0c){return function(_0x19e80e){if(_0x19e80e){return _0x19e80e[_0xdc9c('0x1b')](_0x34cf06)[_0xdc9c('0x1c')](function(_0x254883){return _0x254883;});}return null;};}function removeEntity(_0x1b7c0e,_0x351a2f){return function(_0x333272){if(_0x333272){return _0x333272[_0xdc9c('0x1d')]()[_0xdc9c('0x1c')](function(){var _0x2e25d8=_0x333272[_0xdc9c('0x1e')]({'plain':!![]});var _0x139771='Templates';return db[_0xdc9c('0x1f')]['destroy']({'where':{'type':_0x139771,'resourceId':_0x2e25d8['id']}})[_0xdc9c('0x1c')](function(){return _0x333272;});})['then'](function(){_0x1b7c0e['status'](0xcc)[_0xdc9c('0x14')]();});}};}function handleEntityNotFound(_0x551cae,_0xf22f92){return function(_0x321161){if(!_0x321161){_0x551cae[_0xdc9c('0x20')](0x194);}return _0x321161;};}function handleError(_0x3c7278,_0xa968ab){_0xa968ab=_0xa968ab||0x1f4;return function(_0x515fac){logger[_0xdc9c('0x21')](_0x515fac[_0xdc9c('0x22')]);if(_0x515fac[_0xdc9c('0x23')]){delete _0x515fac[_0xdc9c('0x23')];}_0x3c7278[_0xdc9c('0x13')](_0xa968ab)[_0xdc9c('0x24')](_0x515fac);};}exports[_0xdc9c('0x25')]=function(_0x581574,_0x4590cb){var _0x5a7fc3={},_0xd77d27={},_0x37a08a={'count':0x0,'rows':[]};var _0x352b42=db['Template'][_0xdc9c('0x26')];_0xd77d27[_0xdc9c('0x27')]=_[_0xdc9c('0x28')](_0x352b42);_0xd77d27['query']=_[_0xdc9c('0x28')](_0x581574[_0xdc9c('0x29')]);_0xd77d27[_0xdc9c('0x2a')]=_[_0xdc9c('0x2b')](_0xd77d27[_0xdc9c('0x27')],_0xd77d27[_0xdc9c('0x29')]);_0x5a7fc3['attributes']=_['intersection'](_0xd77d27[_0xdc9c('0x27')],qs[_0xdc9c('0x2c')](_0x581574['query']['fields']));_0x5a7fc3[_0xdc9c('0x2d')]=_0x5a7fc3['attributes'][_0xdc9c('0x2e')]?_0x5a7fc3['attributes']:_0xd77d27[_0xdc9c('0x27')];if(!_0x581574[_0xdc9c('0x29')][_0xdc9c('0x2f')](_0xdc9c('0x30'))){_0x5a7fc3['limit']=qs[_0xdc9c('0x31')](_0x581574['query'][_0xdc9c('0x31')]);_0x5a7fc3[_0xdc9c('0x17')]=qs[_0xdc9c('0x17')](_0x581574[_0xdc9c('0x29')][_0xdc9c('0x17')]);}_0x5a7fc3['order']=qs['sort'](_0x581574['query'][_0xdc9c('0x32')]);_0x5a7fc3['where']=qs[_0xdc9c('0x2a')](_[_0xdc9c('0x33')](_0x581574['query'],_0xd77d27[_0xdc9c('0x2a')]));if(_0x581574[_0xdc9c('0x29')][_0xdc9c('0x34')]){_0x5a7fc3[_0xdc9c('0x35')]=_['merge'](_0x5a7fc3[_0xdc9c('0x35')],{'$or':_[_0xdc9c('0x36')](_0x352b42,function(_0x39cfbe){if(_0x39cfbe[_0xdc9c('0x37')]['key']!=='VIRTUAL'){var _0x5c1ea7={};_0x5c1ea7[_0x39cfbe['field']]={'$like':'%'+_0x581574[_0xdc9c('0x29')][_0xdc9c('0x34')]+'%'};return _0x5c1ea7;}})});}_0x5a7fc3=_[_0xdc9c('0x38')]({},_0x5a7fc3,_0x581574[_0xdc9c('0x39')]);var _0x3f10ce={'where':_0x5a7fc3[_0xdc9c('0x35')]};return db[_0xdc9c('0x3a')][_0xdc9c('0x16')](_0x3f10ce)[_0xdc9c('0x1c')](function(_0x2a1d9c){_0x37a08a[_0xdc9c('0x16')]=_0x2a1d9c;if(_0x581574[_0xdc9c('0x29')]['includeAll']){_0x5a7fc3[_0xdc9c('0x3b')]=[{'all':!![]}];}return db['Template'][_0xdc9c('0x3c')](_0x5a7fc3);})[_0xdc9c('0x1c')](function(_0x3fc4e2){_0x37a08a[_0xdc9c('0x3d')]=_0x3fc4e2;return _0x37a08a;})[_0xdc9c('0x1c')](respondWithFilteredResult(_0x4590cb,_0x5a7fc3))[_0xdc9c('0x3e')](handleError(_0x4590cb,null));};exports[_0xdc9c('0x3f')]=function(_0x36da8a,_0x4204c9){var _0xaf56dc={'raw':!![],'where':{'id':_0x36da8a['params']['id']}},_0x59fabc={};_0x59fabc[_0xdc9c('0x27')]=_['keys'](db[_0xdc9c('0x3a')][_0xdc9c('0x26')]);_0x59fabc[_0xdc9c('0x29')]=_[_0xdc9c('0x28')](_0x36da8a[_0xdc9c('0x29')]);_0x59fabc['filters']=_[_0xdc9c('0x2b')](_0x59fabc[_0xdc9c('0x27')],_0x59fabc[_0xdc9c('0x29')]);_0xaf56dc[_0xdc9c('0x2d')]=_[_0xdc9c('0x2b')](_0x59fabc[_0xdc9c('0x27')],qs[_0xdc9c('0x2c')](_0x36da8a['query'][_0xdc9c('0x2c')]));_0xaf56dc[_0xdc9c('0x2d')]=_0xaf56dc['attributes'][_0xdc9c('0x2e')]?_0xaf56dc[_0xdc9c('0x2d')]:_0x59fabc[_0xdc9c('0x27')];if(_0x36da8a['query']['includeAll']){_0xaf56dc[_0xdc9c('0x3b')]=[{'all':!![]}];}_0xaf56dc=_[_0xdc9c('0x38')]({},_0xaf56dc,_0x36da8a[_0xdc9c('0x39')]);return db[_0xdc9c('0x3a')][_0xdc9c('0x40')](_0xaf56dc)[_0xdc9c('0x1c')](handleEntityNotFound(_0x4204c9,null))[_0xdc9c('0x1c')](respondWithResult(_0x4204c9,null))[_0xdc9c('0x3e')](handleError(_0x4204c9,null));};exports[_0xdc9c('0x41')]=function(_0x3297da,_0x5acaf8){return db[_0xdc9c('0x3a')][_0xdc9c('0x41')](_0x3297da[_0xdc9c('0x42')],{})[_0xdc9c('0x1c')](function(_0x1bb420){var _0x7b8e13=_0x3297da[_0xdc9c('0x43')][_0xdc9c('0x1e')]({'plain':!![]});if(!_0x7b8e13)throw new Error(_0xdc9c('0x44'));if(_0x7b8e13[_0xdc9c('0x45')]===_0xdc9c('0x43')){var _0x4feb47=_0x1bb420[_0xdc9c('0x1e')]({'plain':!![]});var _0x96e3a4=_0xdc9c('0x46');return db['UserProfileSection'][_0xdc9c('0x40')]({'where':{'name':_0x96e3a4,'userProfileId':_0x7b8e13['userProfileId']},'raw':!![]})[_0xdc9c('0x1c')](function(_0x23059b){if(_0x23059b&&_0x23059b[_0xdc9c('0x47')]===0x0){return db['UserProfileResource'][_0xdc9c('0x41')]({'name':_0x4feb47[_0xdc9c('0x23')],'resourceId':_0x4feb47['id'],'type':_0x23059b['name'],'sectionId':_0x23059b['id']},{})[_0xdc9c('0x1c')](function(){return _0x1bb420;});}else{return _0x1bb420;}})['catch'](function(_0x5e8676){logger[_0xdc9c('0x21')](_0xdc9c('0x48'),_0x5e8676);throw _0x5e8676;});}return _0x1bb420;})['then'](respondWithResult(_0x5acaf8,0xc9))['catch'](handleError(_0x5acaf8,null));};exports[_0xdc9c('0x1b')]=function(_0x4897f0,_0x30c8a5){if(_0x4897f0['body']['id']){delete _0x4897f0[_0xdc9c('0x42')]['id'];}return db['Template'][_0xdc9c('0x40')]({'where':{'id':_0x4897f0['params']['id']}})['then'](handleEntityNotFound(_0x30c8a5,null))[_0xdc9c('0x1c')](saveUpdates(_0x4897f0[_0xdc9c('0x42')],null))[_0xdc9c('0x1c')](respondWithResult(_0x30c8a5,null))['catch'](handleError(_0x30c8a5,null));};exports[_0xdc9c('0x1d')]=function(_0x159db5,_0x1df3e7){return db[_0xdc9c('0x3a')]['find']({'where':{'id':_0x159db5[_0xdc9c('0x49')]['id']}})[_0xdc9c('0x1c')](handleEntityNotFound(_0x1df3e7,null))[_0xdc9c('0x1c')](removeEntity(_0x1df3e7,null))['catch'](handleError(_0x1df3e7,null));};
\ No newline at end of file
+var _0xa59e=['autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','zip-dir','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','reject','save','destroy','then','get','Templates','error','stack','name','send','index','Template','rawAttributes','filters','model','attributes','intersection','query','length','hasOwnProperty','nolimit','filter','merge','map','type','key','VIRTUAL','field','where','includeAll','rows','params','keys','fields','include','options','find','catch','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection'];(function(_0x4d6674,_0x4c9301){var _0x2739e9=function(_0x2bc88b){while(--_0x2bc88b){_0x4d6674['push'](_0x4d6674['shift']());}};_0x2739e9(++_0x4c9301);}(_0xa59e,0x184));var _0xea59=function(_0x28beb5,_0x484076){_0x28beb5=_0x28beb5-0x0;var _0x328563=_0xa59e[_0x28beb5];return _0x328563;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0xea59('0x0'));var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xea59('0x1'));var Mustache=require(_0xea59('0x2'));var util=require(_0xea59('0x3'));var path=require(_0xea59('0x4'));var sox=require(_0xea59('0x5'));var csv=require(_0xea59('0x6'));var ejs=require(_0xea59('0x7'));var fs=require('fs');var _=require(_0xea59('0x8'));var squel=require(_0xea59('0x9'));var crypto=require('crypto');var jsforce=require(_0xea59('0xa'));var deskjs=require(_0xea59('0xb'));var toCsv=require(_0xea59('0x6'));var querystring=require(_0xea59('0xc'));var Papa=require(_0xea59('0xd'));var authService=require('../../components/auth/service');var hardwareService=require(_0xea59('0xe'));var Redis=require(_0xea59('0xf'));var qs=require(_0xea59('0x10'));var logger=require(_0xea59('0x11'))('api');var utils=require(_0xea59('0x12'));var config=require(_0xea59('0x13'));var db=require(_0xea59('0x14'))['db'];function respondWithStatusCode(_0x15df08,_0xd76822){_0xd76822=_0xd76822||0xcc;return function(_0xd87c3b){if(_0xd87c3b){return _0x15df08[_0xea59('0x15')](_0xd76822);}return _0x15df08[_0xea59('0x16')](_0xd76822)[_0xea59('0x17')]();};}function respondWithResult(_0x45bd46,_0x51e297){_0x51e297=_0x51e297||0xc8;return function(_0x3cb2b5){if(_0x3cb2b5){return _0x45bd46[_0xea59('0x16')](_0x51e297)[_0xea59('0x18')](_0x3cb2b5);}};}function respondWithFilteredResult(_0x1c9b11,_0x2993a1){return function(_0x347aff){if(_0x347aff){var _0x47f6bf=_0x347aff[_0xea59('0x19')],_0xdae74a=_0x2993a1['offset'],_0x33cf41=_0x2993a1[_0xea59('0x1a')]+_0x2993a1[_0xea59('0x1b')],_0x3d2972;if(_0x33cf41>=_0x47f6bf){_0x33cf41=_0x47f6bf;_0x3d2972=0xc8;}else{_0x3d2972=0xce;}_0x1c9b11[_0xea59('0x16')](_0x3d2972);return _0x1c9b11[_0xea59('0x1c')]('Content-Range',_0xdae74a+'-'+_0x33cf41+'/'+_0x47f6bf)[_0xea59('0x18')](_0x347aff);}return null;};}function patchUpdates(_0x4ecad9){return function(_0x387461){try{jsonpatch[_0xea59('0x1d')](_0x387461,_0x4ecad9,!![]);}catch(_0x52ef1d){return BPromise[_0xea59('0x1e')](_0x52ef1d);}return _0x387461[_0xea59('0x1f')]();};}function saveUpdates(_0x5a7820,_0x479189){return function(_0x4189d3){if(_0x4189d3){return _0x4189d3['update'](_0x5a7820)['then'](function(_0xac60bf){return _0xac60bf;});}return null;};}function removeEntity(_0xcccd18,_0x2a4ede){return function(_0x5567ea){if(_0x5567ea){return _0x5567ea[_0xea59('0x20')]()[_0xea59('0x21')](function(){var _0x36202a=_0x5567ea[_0xea59('0x22')]({'plain':!![]});var _0x22d7dd=_0xea59('0x23');return db['UserProfileResource'][_0xea59('0x20')]({'where':{'type':_0x22d7dd,'resourceId':_0x36202a['id']}})['then'](function(){return _0x5567ea;});})[_0xea59('0x21')](function(){_0xcccd18[_0xea59('0x16')](0xcc)[_0xea59('0x17')]();});}};}function handleEntityNotFound(_0x363ac8,_0x237916){return function(_0x262fb8){if(!_0x262fb8){_0x363ac8[_0xea59('0x15')](0x194);}return _0x262fb8;};}function handleError(_0x2119c9,_0x15c371){_0x15c371=_0x15c371||0x1f4;return function(_0x32d512){logger[_0xea59('0x24')](_0x32d512[_0xea59('0x25')]);if(_0x32d512[_0xea59('0x26')]){delete _0x32d512[_0xea59('0x26')];}_0x2119c9[_0xea59('0x16')](_0x15c371)[_0xea59('0x27')](_0x32d512);};}exports[_0xea59('0x28')]=function(_0x5bd595,_0x354ec4){var _0x45946c={},_0x4609b1={},_0x4bc1b9={'count':0x0,'rows':[]};var _0x152f96=db[_0xea59('0x29')][_0xea59('0x2a')];_0x4609b1['model']=_['keys'](_0x152f96);_0x4609b1['query']=_['keys'](_0x5bd595['query']);_0x4609b1[_0xea59('0x2b')]=_['intersection'](_0x4609b1[_0xea59('0x2c')],_0x4609b1['query']);_0x45946c[_0xea59('0x2d')]=_[_0xea59('0x2e')](_0x4609b1[_0xea59('0x2c')],qs['fields'](_0x5bd595[_0xea59('0x2f')]['fields']));_0x45946c[_0xea59('0x2d')]=_0x45946c[_0xea59('0x2d')][_0xea59('0x30')]?_0x45946c[_0xea59('0x2d')]:_0x4609b1[_0xea59('0x2c')];if(!_0x5bd595[_0xea59('0x2f')][_0xea59('0x31')](_0xea59('0x32'))){_0x45946c['limit']=qs[_0xea59('0x1b')](_0x5bd595[_0xea59('0x2f')]['limit']);_0x45946c['offset']=qs[_0xea59('0x1a')](_0x5bd595['query'][_0xea59('0x1a')]);}_0x45946c['order']=qs['sort'](_0x5bd595['query']['sort']);_0x45946c['where']=qs[_0xea59('0x2b')](_['pick'](_0x5bd595['query'],_0x4609b1[_0xea59('0x2b')]));if(_0x5bd595['query'][_0xea59('0x33')]){_0x45946c['where']=_[_0xea59('0x34')](_0x45946c['where'],{'$or':_[_0xea59('0x35')](_0x152f96,function(_0x94e228){if(_0x94e228[_0xea59('0x36')][_0xea59('0x37')]!==_0xea59('0x38')){var _0x363c6a={};_0x363c6a[_0x94e228[_0xea59('0x39')]]={'$like':'%'+_0x5bd595[_0xea59('0x2f')][_0xea59('0x33')]+'%'};return _0x363c6a;}})});}_0x45946c=_[_0xea59('0x34')]({},_0x45946c,_0x5bd595['options']);var _0x358ff9={'where':_0x45946c[_0xea59('0x3a')]};return db[_0xea59('0x29')][_0xea59('0x19')](_0x358ff9)[_0xea59('0x21')](function(_0x10d6bf){_0x4bc1b9[_0xea59('0x19')]=_0x10d6bf;if(_0x5bd595['query'][_0xea59('0x3b')]){_0x45946c['include']=[{'all':!![]}];}return db[_0xea59('0x29')]['findAll'](_0x45946c);})['then'](function(_0x4b4be0){_0x4bc1b9[_0xea59('0x3c')]=_0x4b4be0;return _0x4bc1b9;})['then'](respondWithFilteredResult(_0x354ec4,_0x45946c))['catch'](handleError(_0x354ec4,null));};exports['show']=function(_0x5ce3ef,_0x589291){var _0x568053={'raw':!![],'where':{'id':_0x5ce3ef[_0xea59('0x3d')]['id']}},_0x3efae5={};_0x3efae5[_0xea59('0x2c')]=_[_0xea59('0x3e')](db[_0xea59('0x29')][_0xea59('0x2a')]);_0x3efae5[_0xea59('0x2f')]=_[_0xea59('0x3e')](_0x5ce3ef['query']);_0x3efae5['filters']=_[_0xea59('0x2e')](_0x3efae5[_0xea59('0x2c')],_0x3efae5[_0xea59('0x2f')]);_0x568053[_0xea59('0x2d')]=_['intersection'](_0x3efae5[_0xea59('0x2c')],qs['fields'](_0x5ce3ef[_0xea59('0x2f')][_0xea59('0x3f')]));_0x568053[_0xea59('0x2d')]=_0x568053[_0xea59('0x2d')][_0xea59('0x30')]?_0x568053[_0xea59('0x2d')]:_0x3efae5[_0xea59('0x2c')];if(_0x5ce3ef[_0xea59('0x2f')]['includeAll']){_0x568053[_0xea59('0x40')]=[{'all':!![]}];}_0x568053=_[_0xea59('0x34')]({},_0x568053,_0x5ce3ef[_0xea59('0x41')]);return db[_0xea59('0x29')][_0xea59('0x42')](_0x568053)[_0xea59('0x21')](handleEntityNotFound(_0x589291,null))['then'](respondWithResult(_0x589291,null))[_0xea59('0x43')](handleError(_0x589291,null));};exports[_0xea59('0x44')]=function(_0x582d9a,_0xf19e1c){return db[_0xea59('0x29')][_0xea59('0x44')](_0x582d9a[_0xea59('0x45')],{})[_0xea59('0x21')](function(_0x54ffb8){var _0x54a803=_0x582d9a[_0xea59('0x46')][_0xea59('0x22')]({'plain':!![]});if(!_0x54a803)throw new Error(_0xea59('0x47'));if(_0x54a803[_0xea59('0x48')]===_0xea59('0x46')){var _0x541183=_0x54ffb8['get']({'plain':!![]});var _0x495cf5=_0xea59('0x23');return db[_0xea59('0x49')]['find']({'where':{'name':_0x495cf5,'userProfileId':_0x54a803['userProfileId']},'raw':!![]})[_0xea59('0x21')](function(_0xebb8e0){if(_0xebb8e0&&_0xebb8e0[_0xea59('0x4a')]===0x0){return db['UserProfileResource'][_0xea59('0x44')]({'name':_0x541183[_0xea59('0x26')],'resourceId':_0x541183['id'],'type':_0xebb8e0[_0xea59('0x26')],'sectionId':_0xebb8e0['id']},{})[_0xea59('0x21')](function(){return _0x54ffb8;});}else{return _0x54ffb8;}})['catch'](function(_0x142f2f){logger[_0xea59('0x24')](_0xea59('0x4b'),_0x142f2f);throw _0x142f2f;});}return _0x54ffb8;})[_0xea59('0x21')](respondWithResult(_0xf19e1c,0xc9))[_0xea59('0x43')](handleError(_0xf19e1c,null));};exports[_0xea59('0x4c')]=function(_0x180dbd,_0x198da4){if(_0x180dbd[_0xea59('0x45')]['id']){delete _0x180dbd['body']['id'];}return db['Template'][_0xea59('0x42')]({'where':{'id':_0x180dbd[_0xea59('0x3d')]['id']}})['then'](handleEntityNotFound(_0x198da4,null))[_0xea59('0x21')](saveUpdates(_0x180dbd[_0xea59('0x45')],null))['then'](respondWithResult(_0x198da4,null))[_0xea59('0x43')](handleError(_0x198da4,null));};exports[_0xea59('0x20')]=function(_0x26f243,_0x1430e5){return db[_0xea59('0x29')][_0xea59('0x42')]({'where':{'id':_0x26f243[_0xea59('0x3d')]['id']}})['then'](handleEntityNotFound(_0x1430e5,null))[_0xea59('0x21')](removeEntity(_0x1430e5,null))['catch'](handleError(_0x1430e5,null));};
\ No newline at end of file
index 258b729..f556adc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ba1=['moment','bluebird','request-promise','./template.attributes','Template','tools_templates','lodash','api'];(function(_0x285e95,_0x12037b){var _0x1d9dc1=function(_0x280155){while(--_0x280155){_0x285e95['push'](_0x285e95['shift']());}};_0x1d9dc1(++_0x12037b);}(_0x3ba1,0x86));var _0x13ba=function(_0x1996b5,_0x1bd7d7){_0x1996b5=_0x1996b5-0x0;var _0x48a147=_0x3ba1[_0x1996b5];return _0x48a147;};'use strict';var _=require(_0x13ba('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x13ba('0x1'));var moment=require(_0x13ba('0x2'));var BPromise=require(_0x13ba('0x3'));var rp=require(_0x13ba('0x4'));var attributes=require(_0x13ba('0x5'));module['exports']=function(_0x39ad76,_0x3f015d){return _0x39ad76['define'](_0x13ba('0x6'),attributes,{'tableName':_0x13ba('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xcb65=['../../config/logger','api','moment','request-promise','./template.attributes','tools_templates','lodash'];(function(_0x2797bc,_0x3617b0){var _0x24a66c=function(_0x2bc0ff){while(--_0x2bc0ff){_0x2797bc['push'](_0x2797bc['shift']());}};_0x24a66c(++_0x3617b0);}(_0xcb65,0xa7));var _0x5cb6=function(_0x4b1032,_0x36952e){_0x4b1032=_0x4b1032-0x0;var _0x5a1d55=_0xcb65[_0x4b1032];return _0x5a1d55;};'use strict';var _=require(_0x5cb6('0x0'));var util=require('util');var logger=require(_0x5cb6('0x1'))(_0x5cb6('0x2'));var moment=require(_0x5cb6('0x3'));var BPromise=require('bluebird');var rp=require(_0x5cb6('0x4'));var attributes=require(_0x5cb6('0x5'));module['exports']=function(_0x185529,_0x1c4b7a){return _0x185529['define']('Template',attributes,{'tableName':_0x5cb6('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 4336558..059a73f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xad4f=['../../config/utils','rpc','../../config/environment','jayson/promise','client','request','Template,\x20%s,\x20%s','request\x20sent','debug','Template,\x20%s,\x20%s,\x20%s','error','code','message','info','result','GetTemplate','findAll','options','raw','attributes','include','map','model','then','stringify','catch','lodash','util','bluebird','randomstring','../../mysqldb'];(function(_0x579b3c,_0x4b9351){var _0x4d1256=function(_0x44db6e){while(--_0x44db6e){_0x579b3c['push'](_0x579b3c['shift']());}};_0x4d1256(++_0x4b9351);}(_0xad4f,0xf3));var _0xfad4=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0xad4f[_0x4cf98e];return _0x1623ac;};'use strict';var _=require(_0xfad4('0x0'));var util=require(_0xfad4('0x1'));var moment=require('moment');var BPromise=require(_0xfad4('0x2'));var rs=require(_0xfad4('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xfad4('0x4'))['db'];var utils=require(_0xfad4('0x5'));var logger=require('../../config/logger')(_0xfad4('0x6'));var config=require(_0xfad4('0x7'));var jayson=require(_0xfad4('0x8'));var client=jayson[_0xfad4('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x5d5a1d,_0x3eeaea,_0x4c1e78){return new BPromise(function(_0x4d1165,_0x191cca){return client[_0xfad4('0xa')](_0x5d5a1d,_0x4c1e78)['then'](function(_0x35c7d5){logger['info'](_0xfad4('0xb'),_0x3eeaea,_0xfad4('0xc'));logger[_0xfad4('0xd')](_0xfad4('0xe'),_0x3eeaea,'request\x20sent',JSON['stringify'](_0x35c7d5));if(_0x35c7d5[_0xfad4('0xf')]){if(_0x35c7d5['error'][_0xfad4('0x10')]===0x1f4){logger[_0xfad4('0xf')]('Template,\x20%s,\x20%s',_0x3eeaea,_0x35c7d5[_0xfad4('0xf')][_0xfad4('0x11')]);return _0x191cca(_0x35c7d5['error']['message']);}logger['error'](_0xfad4('0xb'),_0x3eeaea,_0x35c7d5[_0xfad4('0xf')][_0xfad4('0x11')]);return _0x4d1165(_0x35c7d5[_0xfad4('0xf')][_0xfad4('0x11')]);}else{logger[_0xfad4('0x12')](_0xfad4('0xb'),_0x3eeaea,_0xfad4('0xc'));_0x4d1165(_0x35c7d5[_0xfad4('0x13')][_0xfad4('0x11')]);}})['catch'](function(_0x5f323f){logger[_0xfad4('0xf')](_0xfad4('0xb'),_0x3eeaea,_0x5f323f);_0x191cca(_0x5f323f);});});}exports[_0xfad4('0x14')]=function(_0x46e182){var _0x18d4f9=this;return new Promise(function(_0x271167,_0x598edf){return db['Template'][_0xfad4('0x15')]({'raw':_0x46e182[_0xfad4('0x16')]?_0x46e182[_0xfad4('0x16')][_0xfad4('0x17')]===undefined?!![]:![]:!![],'where':_0x46e182['options']?_0x46e182[_0xfad4('0x16')]['where']||null:null,'attributes':_0x46e182[_0xfad4('0x16')]?_0x46e182[_0xfad4('0x16')][_0xfad4('0x18')]||null:null,'limit':_0x46e182['options']?_0x46e182[_0xfad4('0x16')]['limit']||null:null,'include':_0x46e182[_0xfad4('0x16')]?_0x46e182[_0xfad4('0x16')][_0xfad4('0x19')]?_[_0xfad4('0x1a')](_0x46e182[_0xfad4('0x16')][_0xfad4('0x19')],function(_0x2d42ec){return{'model':db[_0x2d42ec[_0xfad4('0x1b')]],'as':_0x2d42ec['as'],'attributes':_0x2d42ec[_0xfad4('0x18')],'include':_0x2d42ec[_0xfad4('0x19')]?_[_0xfad4('0x1a')](_0x2d42ec[_0xfad4('0x19')],function(_0x173962){return{'model':db[_0x173962[_0xfad4('0x1b')]],'as':_0x173962['as'],'attributes':_0x173962[_0xfad4('0x18')],'include':_0x173962[_0xfad4('0x19')]?_['map'](_0x173962[_0xfad4('0x19')],function(_0xece8f9){return{'model':db[_0xece8f9['model']],'as':_0xece8f9['as'],'attributes':_0xece8f9[_0xfad4('0x18')]};}):[]};}):[]};}):[]:[]})[_0xfad4('0x1c')](function(_0x118b7e){logger[_0xfad4('0x12')](_0xfad4('0x14'),_0x46e182);logger[_0xfad4('0xd')](_0xfad4('0x14'),_0x46e182,JSON[_0xfad4('0x1d')](_0x118b7e));_0x271167(_0x118b7e);})[_0xfad4('0x1e')](function(_0x51396c){logger['error'](_0xfad4('0x14'),_0x51396c[_0xfad4('0x11')],_0x46e182);_0x598edf(_0x18d4f9['error'](0x1f4,_0x51396c[_0xfad4('0x11')]));});});};
\ No newline at end of file
+var _0x40a9=['error','message','result','catch','GetTemplate','Template','findAll','options','raw','where','limit','include','map','model','attributes','stringify','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','info','Template,\x20%s,\x20%s','debug','request\x20sent'];(function(_0x2adb96,_0x4bb606){var _0x1f44bd=function(_0x2e14ae){while(--_0x2e14ae){_0x2adb96['push'](_0x2adb96['shift']());}};_0x1f44bd(++_0x4bb606);}(_0x40a9,0x98));var _0x940a=function(_0x1979b9,_0x563b23){_0x1979b9=_0x1979b9-0x0;var _0x1bd63e=_0x40a9[_0x1979b9];return _0x1bd63e;};'use strict';var _=require(_0x940a('0x0'));var util=require(_0x940a('0x1'));var moment=require(_0x940a('0x2'));var BPromise=require(_0x940a('0x3'));var rs=require(_0x940a('0x4'));var fs=require('fs');var Redis=require(_0x940a('0x5'));var db=require(_0x940a('0x6'))['db'];var utils=require(_0x940a('0x7'));var logger=require(_0x940a('0x8'))('rpc');var config=require(_0x940a('0x9'));var jayson=require(_0x940a('0xa'));var client=jayson[_0x940a('0xb')][_0x940a('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x5cec85,_0x285c83,_0x36c704){return new BPromise(function(_0x5b9328,_0x28e46e){return client[_0x940a('0xd')](_0x5cec85,_0x36c704)['then'](function(_0x4d38ae){logger[_0x940a('0xe')](_0x940a('0xf'),_0x285c83,'request\x20sent');logger[_0x940a('0x10')]('Template,\x20%s,\x20%s,\x20%s',_0x285c83,_0x940a('0x11'),JSON['stringify'](_0x4d38ae));if(_0x4d38ae[_0x940a('0x12')]){if(_0x4d38ae[_0x940a('0x12')]['code']===0x1f4){logger['error'](_0x940a('0xf'),_0x285c83,_0x4d38ae['error'][_0x940a('0x13')]);return _0x28e46e(_0x4d38ae[_0x940a('0x12')][_0x940a('0x13')]);}logger[_0x940a('0x12')](_0x940a('0xf'),_0x285c83,_0x4d38ae[_0x940a('0x12')][_0x940a('0x13')]);return _0x5b9328(_0x4d38ae['error'][_0x940a('0x13')]);}else{logger[_0x940a('0xe')](_0x940a('0xf'),_0x285c83,_0x940a('0x11'));_0x5b9328(_0x4d38ae[_0x940a('0x14')][_0x940a('0x13')]);}})[_0x940a('0x15')](function(_0x27bbcb){logger[_0x940a('0x12')](_0x940a('0xf'),_0x285c83,_0x27bbcb);_0x28e46e(_0x27bbcb);});});}exports[_0x940a('0x16')]=function(_0x16556d){var _0x1d526c=this;return new Promise(function(_0x210a78,_0x5399ce){return db[_0x940a('0x17')][_0x940a('0x18')]({'raw':_0x16556d[_0x940a('0x19')]?_0x16556d[_0x940a('0x19')][_0x940a('0x1a')]===undefined?!![]:![]:!![],'where':_0x16556d[_0x940a('0x19')]?_0x16556d[_0x940a('0x19')][_0x940a('0x1b')]||null:null,'attributes':_0x16556d[_0x940a('0x19')]?_0x16556d[_0x940a('0x19')]['attributes']||null:null,'limit':_0x16556d[_0x940a('0x19')]?_0x16556d[_0x940a('0x19')][_0x940a('0x1c')]||null:null,'include':_0x16556d['options']?_0x16556d[_0x940a('0x19')][_0x940a('0x1d')]?_[_0x940a('0x1e')](_0x16556d['options'][_0x940a('0x1d')],function(_0x252496){return{'model':db[_0x252496[_0x940a('0x1f')]],'as':_0x252496['as'],'attributes':_0x252496[_0x940a('0x20')],'include':_0x252496['include']?_[_0x940a('0x1e')](_0x252496[_0x940a('0x1d')],function(_0x5cb362){return{'model':db[_0x5cb362[_0x940a('0x1f')]],'as':_0x5cb362['as'],'attributes':_0x5cb362[_0x940a('0x20')],'include':_0x5cb362['include']?_[_0x940a('0x1e')](_0x5cb362[_0x940a('0x1d')],function(_0x5ece3e){return{'model':db[_0x5ece3e[_0x940a('0x1f')]],'as':_0x5ece3e['as'],'attributes':_0x5ece3e['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x126c31){logger[_0x940a('0xe')](_0x940a('0x16'),_0x16556d);logger[_0x940a('0x10')](_0x940a('0x16'),_0x16556d,JSON[_0x940a('0x21')](_0x126c31));_0x210a78(_0x126c31);})[_0x940a('0x15')](function(_0x59b8e3){logger['error'](_0x940a('0x16'),_0x59b8e3[_0x940a('0x13')],_0x16556d);_0x5399ce(_0x1d526c[_0x940a('0x12')](0x1f4,_0x59b8e3[_0x940a('0x13')]));});});};
\ No newline at end of file
index 525cc1e..c8e4fe4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4225=['multer','util','path','connect-timeout','express','Router','../../config/environment','isAuthenticated','get','show','/:id/all_conditions','/:id/any_conditions','getAnyConditions','/:id/actions','getActions','post','addAnyCondition','addAction','/:id','update','delete','destroy','exports'];(function(_0x3fa0e0,_0x47bbc3){var _0x15882a=function(_0x15725e){while(--_0x15725e){_0x3fa0e0['push'](_0x3fa0e0['shift']());}};_0x15882a(++_0x47bbc3);}(_0x4225,0x142));var _0x5422=function(_0x38dc57,_0x46a84d){_0x38dc57=_0x38dc57-0x0;var _0x17c56e=_0x4225[_0x38dc57];return _0x17c56e;};'use strict';var multer=require(_0x5422('0x0'));var util=require(_0x5422('0x1'));var path=require(_0x5422('0x2'));var timeout=require(_0x5422('0x3'));var express=require(_0x5422('0x4'));var router=express[_0x5422('0x5')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x5422('0x6'));var controller=require('./trigger.controller');router['get']('/',auth[_0x5422('0x7')](),controller['index']);router[_0x5422('0x8')]('/:id',auth[_0x5422('0x7')](),controller[_0x5422('0x9')]);router[_0x5422('0x8')](_0x5422('0xa'),auth[_0x5422('0x7')](),controller['getAllConditions']);router[_0x5422('0x8')](_0x5422('0xb'),auth['isAuthenticated'](),controller[_0x5422('0xc')]);router['get'](_0x5422('0xd'),auth[_0x5422('0x7')](),controller[_0x5422('0xe')]);router[_0x5422('0xf')]('/',auth[_0x5422('0x7')](),controller['create']);router[_0x5422('0xf')](_0x5422('0xa'),auth[_0x5422('0x7')](),controller['addAllCondition']);router[_0x5422('0xf')]('/:id/any_conditions',auth['isAuthenticated'](),controller[_0x5422('0x10')]);router[_0x5422('0xf')](_0x5422('0xd'),auth[_0x5422('0x7')](),controller[_0x5422('0x11')]);router['put'](_0x5422('0x12'),auth['isAuthenticated'](),controller[_0x5422('0x13')]);router[_0x5422('0x14')](_0x5422('0x12'),auth[_0x5422('0x7')](),controller[_0x5422('0x15')]);module[_0x5422('0x16')]=router;
\ No newline at end of file
+var _0xd6a6=['connect-timeout','../../components/interaction/service','get','show','/:id/all_conditions','isAuthenticated','getAllConditions','/:id/any_conditions','getActions','post','create','addAllCondition','addAnyCondition','/:id/actions','put','/:id','update','delete','exports','path'];(function(_0x1135e7,_0x4b8f66){var _0x2f9fe4=function(_0x54eabf){while(--_0x54eabf){_0x1135e7['push'](_0x1135e7['shift']());}};_0x2f9fe4(++_0x4b8f66);}(_0xd6a6,0x18f));var _0x6d6a=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xd6a6[_0x14add3];return _0x4a174f;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x6d6a('0x0'));var timeout=require(_0x6d6a('0x1'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x6d6a('0x2'));var config=require('../../config/environment');var controller=require('./trigger.controller');router[_0x6d6a('0x3')]('/',auth['isAuthenticated'](),controller['index']);router[_0x6d6a('0x3')]('/:id',auth['isAuthenticated'](),controller[_0x6d6a('0x4')]);router[_0x6d6a('0x3')](_0x6d6a('0x5'),auth[_0x6d6a('0x6')](),controller[_0x6d6a('0x7')]);router['get'](_0x6d6a('0x8'),auth[_0x6d6a('0x6')](),controller['getAnyConditions']);router[_0x6d6a('0x3')]('/:id/actions',auth[_0x6d6a('0x6')](),controller[_0x6d6a('0x9')]);router[_0x6d6a('0xa')]('/',auth[_0x6d6a('0x6')](),controller[_0x6d6a('0xb')]);router[_0x6d6a('0xa')](_0x6d6a('0x5'),auth[_0x6d6a('0x6')](),controller[_0x6d6a('0xc')]);router[_0x6d6a('0xa')](_0x6d6a('0x8'),auth[_0x6d6a('0x6')](),controller[_0x6d6a('0xd')]);router[_0x6d6a('0xa')](_0x6d6a('0xe'),auth[_0x6d6a('0x6')](),controller['addAction']);router[_0x6d6a('0xf')](_0x6d6a('0x10'),auth[_0x6d6a('0x6')](),controller[_0x6d6a('0x11')]);router[_0x6d6a('0x12')](_0x6d6a('0x10'),auth[_0x6d6a('0x6')](),controller['destroy']);module[_0x6d6a('0x13')]=router;
\ No newline at end of file
index 181fa84..ddf08d5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4eab=['STRING','sequelize'];(function(_0x49b207,_0x408ade){var _0x2dc8fa=function(_0x150975){while(--_0x150975){_0x49b207['push'](_0x49b207['shift']());}};_0x2dc8fa(++_0x408ade);}(_0x4eab,0x115));var _0xb4ea=function(_0x46dd38,_0x2449c8){_0x46dd38=_0x46dd38-0x0;var _0x3aff33=_0x4eab[_0x46dd38];return _0x3aff33;};'use strict';var Sequelize=require(_0xb4ea('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0xb4ea('0x1')]},'description':{'type':Sequelize[_0xb4ea('0x1')]},'status':{'type':Sequelize['BOOLEAN'],'defaultValue':![]}};
\ No newline at end of file
+var _0x7c10=['sequelize','exports','STRING','BOOLEAN'];(function(_0x451df9,_0x5e6047){var _0x59da59=function(_0x42bcd8){while(--_0x42bcd8){_0x451df9['push'](_0x451df9['shift']());}};_0x59da59(++_0x5e6047);}(_0x7c10,0x8c));var _0x07c1=function(_0x199572,_0x33e667){_0x199572=_0x199572-0x0;var _0x13cfa3=_0x7c10[_0x199572];return _0x13cfa3;};'use strict';var Sequelize=require(_0x07c1('0x0'));module[_0x07c1('0x1')]={'name':{'type':Sequelize['STRING']},'channel':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0x07c1('0x2')]},'status':{'type':Sequelize[_0x07c1('0x3')],'defaultValue':![]}};
\ No newline at end of file
index 877b58b..03b4f27 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0f49=['jsforce','to-csv','querystring','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','json','count','offset','limit','set','Content-Range','reject','update','then','destroy','get','Triggers','UserProfileResource','sendStatus','stack','name','send','keys','filters','model','query','attributes','intersection','fields','length','hasOwnProperty','order','sort','pick','filter','where','map','type','key','field','merge','options','Trigger','include','findAll','rows','show','params','rawAttributes','includeAll','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','find','autoAssociation','catch','addAllCondition','TriggerAllId','Condition','addAnyCondition','TriggerAnyId','getAllConditions','nolimit','getAnyConditions','findOne','addAction','TriggerId','Action','getActions','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','mustache','util','path','ejs','lodash','squel'];(function(_0xec7674,_0x386123){var _0x1d70e5=function(_0x3f9fc1){while(--_0x3f9fc1){_0xec7674['push'](_0xec7674['shift']());}};_0x1d70e5(++_0x386123);}(_0x0f49,0x158));var _0x90f4=function(_0x29e3ec,_0x138a18){_0x29e3ec=_0x29e3ec-0x0;var _0x25727e=_0x0f49[_0x29e3ec];return _0x25727e;};'use strict';var pdf=require(_0x90f4('0x0'));var emlformat=require(_0x90f4('0x1'));var rimraf=require(_0x90f4('0x2'));var zipdir=require(_0x90f4('0x3'));var jsonpatch=require(_0x90f4('0x4'));var rp=require(_0x90f4('0x5'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x90f4('0x6'));var util=require(_0x90f4('0x7'));var path=require(_0x90f4('0x8'));var sox=require('sox');var csv=require('to-csv');var ejs=require(_0x90f4('0x9'));var fs=require('fs');var _=require(_0x90f4('0xa'));var squel=require(_0x90f4('0xb'));var crypto=require('crypto');var jsforce=require(_0x90f4('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x90f4('0xd'));var querystring=require(_0x90f4('0xe'));var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x90f4('0xf'));var Redis=require(_0x90f4('0x10'));var qs=require(_0x90f4('0x11'));var logger=require('../../config/logger')(_0x90f4('0x12'));var utils=require(_0x90f4('0x13'));var config=require(_0x90f4('0x14'));var db=require(_0x90f4('0x15'))['db'];function respondWithStatusCode(_0x3fdda9,_0x29dd98){_0x29dd98=_0x29dd98||0xcc;return function(_0x26f800){if(_0x26f800){return _0x3fdda9['sendStatus'](_0x29dd98);}return _0x3fdda9[_0x90f4('0x16')](_0x29dd98)['end']();};}function respondWithResult(_0xdb3d81,_0x4f3c0f){_0x4f3c0f=_0x4f3c0f||0xc8;return function(_0x29f19c){if(_0x29f19c){return _0xdb3d81['status'](_0x4f3c0f)[_0x90f4('0x17')](_0x29f19c);}};}function respondWithFilteredResult(_0x3dbf3d,_0x272e51){return function(_0x23e426){if(_0x23e426){var _0x55db66=_0x23e426[_0x90f4('0x18')],_0x4cc877=_0x272e51[_0x90f4('0x19')],_0x556ab1=_0x272e51[_0x90f4('0x19')]+_0x272e51[_0x90f4('0x1a')],_0x503d1e;if(_0x556ab1>=_0x55db66){_0x556ab1=_0x55db66;_0x503d1e=0xc8;}else{_0x503d1e=0xce;}_0x3dbf3d['status'](_0x503d1e);return _0x3dbf3d[_0x90f4('0x1b')](_0x90f4('0x1c'),_0x4cc877+'-'+_0x556ab1+'/'+_0x55db66)[_0x90f4('0x17')](_0x23e426);}return null;};}function patchUpdates(_0x550eca){return function(_0x5a81cb){try{jsonpatch['apply'](_0x5a81cb,_0x550eca,!![]);}catch(_0x1a1059){return BPromise[_0x90f4('0x1d')](_0x1a1059);}return _0x5a81cb['save']();};}function saveUpdates(_0x44188a,_0x803619){return function(_0x49872d){if(_0x49872d){return _0x49872d[_0x90f4('0x1e')](_0x44188a)[_0x90f4('0x1f')](function(_0x31588d){return _0x31588d;});}return null;};}function removeEntity(_0x54571c,_0x5c199f){return function(_0xb0d349){if(_0xb0d349){return _0xb0d349[_0x90f4('0x20')]()[_0x90f4('0x1f')](function(){var _0x10bc9d=_0xb0d349[_0x90f4('0x21')]({'plain':!![]});var _0xb9950e=_0x90f4('0x22');return db[_0x90f4('0x23')][_0x90f4('0x20')]({'where':{'type':_0xb9950e,'resourceId':_0x10bc9d['id']}})[_0x90f4('0x1f')](function(){return _0xb0d349;});})[_0x90f4('0x1f')](function(){_0x54571c['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x376746,_0x38514b){return function(_0x20b9d6){if(!_0x20b9d6){_0x376746[_0x90f4('0x24')](0x194);}return _0x20b9d6;};}function handleError(_0x20a29c,_0x375d87){_0x375d87=_0x375d87||0x1f4;return function(_0x546086){logger['error'](_0x546086[_0x90f4('0x25')]);if(_0x546086[_0x90f4('0x26')]){delete _0x546086[_0x90f4('0x26')];}_0x20a29c[_0x90f4('0x16')](_0x375d87)[_0x90f4('0x27')](_0x546086);};}exports['index']=function(_0x4a10c3,_0x1ccdd8){var _0x563758={},_0x5a6f54={},_0x242ac3={'count':0x0,'rows':[]};var _0x3395fe=db['Trigger']['rawAttributes'];_0x5a6f54['model']=_[_0x90f4('0x28')](_0x3395fe);_0x5a6f54['query']=_[_0x90f4('0x28')](_0x4a10c3['query']);_0x5a6f54[_0x90f4('0x29')]=_['intersection'](_0x5a6f54[_0x90f4('0x2a')],_0x5a6f54[_0x90f4('0x2b')]);_0x563758[_0x90f4('0x2c')]=_[_0x90f4('0x2d')](_0x5a6f54[_0x90f4('0x2a')],qs['fields'](_0x4a10c3['query'][_0x90f4('0x2e')]));_0x563758[_0x90f4('0x2c')]=_0x563758[_0x90f4('0x2c')][_0x90f4('0x2f')]?_0x563758[_0x90f4('0x2c')]:_0x5a6f54[_0x90f4('0x2a')];if(!_0x4a10c3[_0x90f4('0x2b')][_0x90f4('0x30')]('nolimit')){_0x563758[_0x90f4('0x1a')]=qs['limit'](_0x4a10c3[_0x90f4('0x2b')]['limit']);_0x563758[_0x90f4('0x19')]=qs[_0x90f4('0x19')](_0x4a10c3['query']['offset']);}_0x563758[_0x90f4('0x31')]=qs[_0x90f4('0x32')](_0x4a10c3[_0x90f4('0x2b')][_0x90f4('0x32')]);_0x563758['where']=qs[_0x90f4('0x29')](_[_0x90f4('0x33')](_0x4a10c3[_0x90f4('0x2b')],_0x5a6f54[_0x90f4('0x29')]));if(_0x4a10c3[_0x90f4('0x2b')][_0x90f4('0x34')]){_0x563758['where']=_['merge'](_0x563758[_0x90f4('0x35')],{'$or':_[_0x90f4('0x36')](_0x3395fe,function(_0x538efb){if(_0x538efb[_0x90f4('0x37')][_0x90f4('0x38')]!=='VIRTUAL'){var _0x4b4b4b={};_0x4b4b4b[_0x538efb[_0x90f4('0x39')]]={'$like':'%'+_0x4a10c3['query'][_0x90f4('0x34')]+'%'};return _0x4b4b4b;}})});}_0x563758=_[_0x90f4('0x3a')]({},_0x563758,_0x4a10c3[_0x90f4('0x3b')]);var _0x6124f0={'where':_0x563758[_0x90f4('0x35')]};return db[_0x90f4('0x3c')][_0x90f4('0x18')](_0x6124f0)['then'](function(_0x3f41ee){_0x242ac3[_0x90f4('0x18')]=_0x3f41ee;if(_0x4a10c3[_0x90f4('0x2b')]['includeAll']){_0x563758[_0x90f4('0x3d')]=[{'all':!![]}];}return db['Trigger'][_0x90f4('0x3e')](_0x563758);})[_0x90f4('0x1f')](function(_0x3a44c9){_0x242ac3[_0x90f4('0x3f')]=_0x3a44c9;return _0x242ac3;})['then'](respondWithFilteredResult(_0x1ccdd8,_0x563758))['catch'](handleError(_0x1ccdd8,null));};exports[_0x90f4('0x40')]=function(_0x5ddd7a,_0x2a0ed0){var _0x2cb2f0={'raw':![],'where':{'id':_0x5ddd7a[_0x90f4('0x41')]['id']}},_0x250611={};_0x250611[_0x90f4('0x2a')]=_['keys'](db[_0x90f4('0x3c')][_0x90f4('0x42')]);_0x250611[_0x90f4('0x2b')]=_[_0x90f4('0x28')](_0x5ddd7a[_0x90f4('0x2b')]);_0x250611['filters']=_[_0x90f4('0x2d')](_0x250611[_0x90f4('0x2a')],_0x250611['query']);_0x2cb2f0[_0x90f4('0x2c')]=_[_0x90f4('0x2d')](_0x250611[_0x90f4('0x2a')],qs[_0x90f4('0x2e')](_0x5ddd7a[_0x90f4('0x2b')]['fields']));_0x2cb2f0[_0x90f4('0x2c')]=_0x2cb2f0[_0x90f4('0x2c')][_0x90f4('0x2f')]?_0x2cb2f0[_0x90f4('0x2c')]:_0x250611[_0x90f4('0x2a')];if(_0x5ddd7a[_0x90f4('0x2b')][_0x90f4('0x43')]){_0x2cb2f0[_0x90f4('0x3d')]=[{'all':!![]}];}_0x2cb2f0=_[_0x90f4('0x3a')]({},_0x2cb2f0,_0x5ddd7a[_0x90f4('0x3b')]);return db['Trigger']['find'](_0x2cb2f0)['then'](handleEntityNotFound(_0x2a0ed0,null))[_0x90f4('0x1f')](respondWithResult(_0x2a0ed0,null))['catch'](handleError(_0x2a0ed0,null));};exports['create']=function(_0x4e6458,_0x5c66e){return db[_0x90f4('0x3c')][_0x90f4('0x44')](_0x4e6458[_0x90f4('0x45')],{})[_0x90f4('0x1f')](function(_0x37481b){var _0x409320=_0x4e6458[_0x90f4('0x46')][_0x90f4('0x21')]({'plain':!![]});if(!_0x409320)throw new Error(_0x90f4('0x47'));if(_0x409320[_0x90f4('0x48')]===_0x90f4('0x46')){var _0x24edc8=_0x37481b[_0x90f4('0x21')]({'plain':!![]});var _0x14e274=_0x90f4('0x22');return db['UserProfileSection'][_0x90f4('0x49')]({'where':{'name':_0x14e274,'userProfileId':_0x409320['userProfileId']},'raw':!![]})[_0x90f4('0x1f')](function(_0x195f94){if(_0x195f94&&_0x195f94[_0x90f4('0x4a')]===0x0){return db[_0x90f4('0x23')][_0x90f4('0x44')]({'name':_0x24edc8['name'],'resourceId':_0x24edc8['id'],'type':_0x195f94[_0x90f4('0x26')],'sectionId':_0x195f94['id']},{})[_0x90f4('0x1f')](function(){return _0x37481b;});}else{return _0x37481b;}})['catch'](function(_0x18a267){logger['error']('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x18a267);throw _0x18a267;});}return _0x37481b;})['then'](respondWithResult(_0x5c66e,0xc9))['catch'](handleError(_0x5c66e,null));};exports['update']=function(_0x2da6dc,_0x39f9e9){if(_0x2da6dc[_0x90f4('0x45')]['id']){delete _0x2da6dc[_0x90f4('0x45')]['id'];}return db[_0x90f4('0x3c')][_0x90f4('0x49')]({'where':{'id':_0x2da6dc[_0x90f4('0x41')]['id']}})['then'](handleEntityNotFound(_0x39f9e9,null))['then'](saveUpdates(_0x2da6dc[_0x90f4('0x45')],null))[_0x90f4('0x1f')](respondWithResult(_0x39f9e9,null))[_0x90f4('0x4b')](handleError(_0x39f9e9,null));};exports[_0x90f4('0x20')]=function(_0x4958d8,_0x524707){return db[_0x90f4('0x3c')][_0x90f4('0x49')]({'where':{'id':_0x4958d8[_0x90f4('0x41')]['id']}})[_0x90f4('0x1f')](handleEntityNotFound(_0x524707,null))[_0x90f4('0x1f')](removeEntity(_0x524707,null))[_0x90f4('0x4b')](handleError(_0x524707,null));};exports[_0x90f4('0x4c')]=function(_0x1ba058,_0x3f1a4a,_0x84789){if(_0x1ba058['body']['id']){delete _0x1ba058['body']['id'];}return db[_0x90f4('0x3c')][_0x90f4('0x49')]({'where':{'id':_0x1ba058[_0x90f4('0x41')]['id']}})['then'](handleEntityNotFound(_0x3f1a4a,null))[_0x90f4('0x1f')](function(_0x66a578){if(_0x66a578){_0x1ba058['body'][_0x90f4('0x4d')]=_0x66a578['id'];return db[_0x90f4('0x4e')][_0x90f4('0x44')](_0x1ba058[_0x90f4('0x45')]);}})[_0x90f4('0x1f')](respondWithResult(_0x3f1a4a,null))['catch'](handleError(_0x3f1a4a,null));};exports[_0x90f4('0x4f')]=function(_0x3f8f59,_0x25e0d9,_0x231c14){if(_0x3f8f59['body']['id']){delete _0x3f8f59[_0x90f4('0x45')]['id'];}return db[_0x90f4('0x3c')][_0x90f4('0x49')]({'where':{'id':_0x3f8f59[_0x90f4('0x41')]['id']}})[_0x90f4('0x1f')](handleEntityNotFound(_0x25e0d9,null))['then'](function(_0x2d39a7){if(_0x2d39a7){_0x3f8f59[_0x90f4('0x45')][_0x90f4('0x50')]=_0x2d39a7['id'];return db[_0x90f4('0x4e')][_0x90f4('0x44')](_0x3f8f59[_0x90f4('0x45')]);}})[_0x90f4('0x1f')](respondWithResult(_0x25e0d9,null))[_0x90f4('0x4b')](handleError(_0x25e0d9,null));};exports[_0x90f4('0x51')]=function(_0x593b36,_0x5e460e,_0x3d9954){var _0x24a30d={};var _0x3571e5={};var _0x4377f8;var _0x3cb3b2;return db[_0x90f4('0x3c')]['findOne']({'where':{'id':_0x593b36[_0x90f4('0x41')]['id']}})[_0x90f4('0x1f')](handleEntityNotFound(_0x5e460e,null))[_0x90f4('0x1f')](function(_0x1d5c31){if(_0x1d5c31){_0x4377f8=_0x1d5c31;_0x3571e5[_0x90f4('0x2a')]=_[_0x90f4('0x28')](db['Condition'][_0x90f4('0x42')]);_0x3571e5[_0x90f4('0x2b')]=_[_0x90f4('0x28')](_0x593b36[_0x90f4('0x2b')]);_0x3571e5[_0x90f4('0x29')]=_[_0x90f4('0x2d')](_0x3571e5[_0x90f4('0x2a')],_0x3571e5[_0x90f4('0x2b')]);_0x24a30d[_0x90f4('0x2c')]=_[_0x90f4('0x2d')](_0x3571e5[_0x90f4('0x2a')],qs[_0x90f4('0x2e')](_0x593b36['query']['fields']));_0x24a30d[_0x90f4('0x2c')]=_0x24a30d[_0x90f4('0x2c')][_0x90f4('0x2f')]?_0x24a30d[_0x90f4('0x2c')]:_0x3571e5[_0x90f4('0x2a')];_0x24a30d[_0x90f4('0x31')]=qs[_0x90f4('0x32')](_0x593b36[_0x90f4('0x2b')]['sort']);_0x24a30d['where']=qs[_0x90f4('0x29')](_[_0x90f4('0x33')](_0x593b36['query'],_0x3571e5[_0x90f4('0x29')]));if(_0x593b36[_0x90f4('0x2b')]['filter']){_0x24a30d[_0x90f4('0x35')]=_[_0x90f4('0x3a')](_0x24a30d[_0x90f4('0x35')],{'$or':_[_0x90f4('0x36')](_0x24a30d[_0x90f4('0x2c')],function(_0x39f2e8){var _0x96f7c2={};_0x96f7c2[_0x39f2e8]={'$like':'%'+_0x593b36[_0x90f4('0x2b')]['filter']+'%'};return _0x96f7c2;})});}_0x24a30d=_[_0x90f4('0x3a')]({},_0x24a30d,_0x593b36[_0x90f4('0x3b')]);return _0x4377f8['getAllConditions'](_0x24a30d);}})[_0x90f4('0x1f')](function(_0x59c06d){if(_0x59c06d){_0x3cb3b2=_0x59c06d['length'];if(!_0x593b36[_0x90f4('0x2b')][_0x90f4('0x30')](_0x90f4('0x52'))){_0x24a30d[_0x90f4('0x1a')]=qs[_0x90f4('0x1a')](_0x593b36[_0x90f4('0x2b')][_0x90f4('0x1a')]);_0x24a30d[_0x90f4('0x19')]=qs[_0x90f4('0x19')](_0x593b36[_0x90f4('0x2b')]['offset']);}return _0x4377f8['getAllConditions'](_0x24a30d);}})[_0x90f4('0x1f')](function(_0x3ec34c){if(_0x3ec34c){return _0x3ec34c?{'count':_0x3cb3b2,'rows':_0x3ec34c}:null;}})[_0x90f4('0x1f')](respondWithResult(_0x5e460e,null))[_0x90f4('0x4b')](handleError(_0x5e460e,null));};exports[_0x90f4('0x53')]=function(_0x55eb25,_0x38d5cc,_0x39e1ca){var _0x424429={};var _0x377708={};var _0x1944ab;var _0x5a65b2;return db[_0x90f4('0x3c')][_0x90f4('0x54')]({'where':{'id':_0x55eb25['params']['id']}})[_0x90f4('0x1f')](handleEntityNotFound(_0x38d5cc,null))[_0x90f4('0x1f')](function(_0x5d45f9){if(_0x5d45f9){_0x1944ab=_0x5d45f9;_0x377708[_0x90f4('0x2a')]=_[_0x90f4('0x28')](db[_0x90f4('0x4e')][_0x90f4('0x42')]);_0x377708[_0x90f4('0x2b')]=_[_0x90f4('0x28')](_0x55eb25['query']);_0x377708[_0x90f4('0x29')]=_[_0x90f4('0x2d')](_0x377708[_0x90f4('0x2a')],_0x377708[_0x90f4('0x2b')]);_0x424429['attributes']=_[_0x90f4('0x2d')](_0x377708['model'],qs['fields'](_0x55eb25[_0x90f4('0x2b')][_0x90f4('0x2e')]));_0x424429[_0x90f4('0x2c')]=_0x424429[_0x90f4('0x2c')]['length']?_0x424429[_0x90f4('0x2c')]:_0x377708['model'];_0x424429[_0x90f4('0x31')]=qs[_0x90f4('0x32')](_0x55eb25[_0x90f4('0x2b')][_0x90f4('0x32')]);_0x424429[_0x90f4('0x35')]=qs[_0x90f4('0x29')](_[_0x90f4('0x33')](_0x55eb25['query'],_0x377708[_0x90f4('0x29')]));if(_0x55eb25[_0x90f4('0x2b')]['filter']){_0x424429[_0x90f4('0x35')]=_[_0x90f4('0x3a')](_0x424429['where'],{'$or':_['map'](_0x424429['attributes'],function(_0x123da7){var _0x48d2d3={};_0x48d2d3[_0x123da7]={'$like':'%'+_0x55eb25[_0x90f4('0x2b')][_0x90f4('0x34')]+'%'};return _0x48d2d3;})});}_0x424429=_['merge']({},_0x424429,_0x55eb25[_0x90f4('0x3b')]);return _0x1944ab[_0x90f4('0x53')](_0x424429);}})[_0x90f4('0x1f')](function(_0x345d08){if(_0x345d08){_0x5a65b2=_0x345d08[_0x90f4('0x2f')];if(!_0x55eb25[_0x90f4('0x2b')][_0x90f4('0x30')](_0x90f4('0x52'))){_0x424429['limit']=qs['limit'](_0x55eb25['query']['limit']);_0x424429[_0x90f4('0x19')]=qs[_0x90f4('0x19')](_0x55eb25['query']['offset']);}return _0x1944ab[_0x90f4('0x53')](_0x424429);}})[_0x90f4('0x1f')](function(_0xa20c88){if(_0xa20c88){return _0xa20c88?{'count':_0x5a65b2,'rows':_0xa20c88}:null;}})[_0x90f4('0x1f')](respondWithResult(_0x38d5cc,null))[_0x90f4('0x4b')](handleError(_0x38d5cc,null));};exports[_0x90f4('0x55')]=function(_0x1a2e05,_0x1bea6c,_0x14a086){if(_0x1a2e05[_0x90f4('0x45')]['id']){delete _0x1a2e05[_0x90f4('0x45')]['id'];}return db[_0x90f4('0x3c')][_0x90f4('0x49')]({'where':{'id':_0x1a2e05[_0x90f4('0x41')]['id']}})[_0x90f4('0x1f')](handleEntityNotFound(_0x1bea6c,null))[_0x90f4('0x1f')](function(_0x1d8787){if(_0x1d8787){_0x1a2e05['body'][_0x90f4('0x56')]=_0x1d8787['id'];return db[_0x90f4('0x57')][_0x90f4('0x44')](_0x1a2e05[_0x90f4('0x45')]);}})[_0x90f4('0x1f')](respondWithResult(_0x1bea6c,null))[_0x90f4('0x4b')](handleError(_0x1bea6c,null));};exports[_0x90f4('0x58')]=function(_0xc3ab43,_0x6878a4,_0x4217b8){var _0x4f9e37={};var _0x2899db={};var _0x23e467;var _0xe1a8b6;return db['Trigger'][_0x90f4('0x54')]({'where':{'id':_0xc3ab43[_0x90f4('0x41')]['id']}})[_0x90f4('0x1f')](handleEntityNotFound(_0x6878a4,null))[_0x90f4('0x1f')](function(_0x3e7fa2){if(_0x3e7fa2){_0x23e467=_0x3e7fa2;_0x2899db[_0x90f4('0x2a')]=_[_0x90f4('0x28')](db['Action'][_0x90f4('0x42')]);_0x2899db['query']=_[_0x90f4('0x28')](_0xc3ab43[_0x90f4('0x2b')]);_0x2899db[_0x90f4('0x29')]=_['intersection'](_0x2899db[_0x90f4('0x2a')],_0x2899db[_0x90f4('0x2b')]);_0x4f9e37[_0x90f4('0x2c')]=_[_0x90f4('0x2d')](_0x2899db[_0x90f4('0x2a')],qs[_0x90f4('0x2e')](_0xc3ab43['query'][_0x90f4('0x2e')]));_0x4f9e37[_0x90f4('0x2c')]=_0x4f9e37['attributes'][_0x90f4('0x2f')]?_0x4f9e37['attributes']:_0x2899db[_0x90f4('0x2a')];_0x4f9e37[_0x90f4('0x31')]=qs[_0x90f4('0x32')](_0xc3ab43[_0x90f4('0x2b')][_0x90f4('0x32')]);_0x4f9e37['where']=qs[_0x90f4('0x29')](_['pick'](_0xc3ab43[_0x90f4('0x2b')],_0x2899db[_0x90f4('0x29')]));if(_0xc3ab43[_0x90f4('0x2b')]['filter']){_0x4f9e37[_0x90f4('0x35')]=_[_0x90f4('0x3a')](_0x4f9e37['where'],{'$or':_['map'](_0x4f9e37['attributes'],function(_0x37f8ef){var _0x2c6431={};_0x2c6431[_0x37f8ef]={'$like':'%'+_0xc3ab43[_0x90f4('0x2b')][_0x90f4('0x34')]+'%'};return _0x2c6431;})});}_0x4f9e37=_[_0x90f4('0x3a')]({},_0x4f9e37,_0xc3ab43[_0x90f4('0x3b')]);return _0x23e467[_0x90f4('0x58')](_0x4f9e37);}})[_0x90f4('0x1f')](function(_0x221755){if(_0x221755){_0xe1a8b6=_0x221755['length'];if(!_0xc3ab43[_0x90f4('0x2b')][_0x90f4('0x30')](_0x90f4('0x52'))){_0x4f9e37[_0x90f4('0x1a')]=qs[_0x90f4('0x1a')](_0xc3ab43[_0x90f4('0x2b')][_0x90f4('0x1a')]);_0x4f9e37['offset']=qs[_0x90f4('0x19')](_0xc3ab43[_0x90f4('0x2b')][_0x90f4('0x19')]);}return _0x23e467['getActions'](_0x4f9e37);}})[_0x90f4('0x1f')](function(_0x565fdb){if(_0x565fdb){return _0x565fdb?{'count':_0xe1a8b6,'rows':_0x565fdb}:null;}})[_0x90f4('0x1f')](respondWithResult(_0x6878a4,null))[_0x90f4('0x4b')](handleError(_0x6878a4,null));};
\ No newline at end of file
+var _0xff0b=['ioredis','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','set','Content-Range','apply','reject','save','update','then','UserProfileResource','error','stack','name','index','rawAttributes','model','keys','query','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','pick','map','type','VIRTUAL','field','filter','merge','options','count','includeAll','include','findAll','rows','catch','show','params','Trigger','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','get','UserProfileSection','find','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','destroy','addAllCondition','TriggerAllId','Condition','addAnyCondition','TriggerAnyId','getAllConditions','findOne','getAnyConditions','addAction','TriggerId','getActions','Action','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv','lodash','squel','crypto','desk.js','papaparse'];(function(_0x30c649,_0x2ebbac){var _0x3edfb9=function(_0xab82f5){while(--_0xab82f5){_0x30c649['push'](_0x30c649['shift']());}};_0x3edfb9(++_0x2ebbac);}(_0xff0b,0x1c0));var _0xbff0=function(_0x53e4a9,_0x523ec9){_0x53e4a9=_0x53e4a9-0x0;var _0x1365ed=_0xff0b[_0x53e4a9];return _0x1365ed;};'use strict';var pdf=require(_0xbff0('0x0'));var emlformat=require(_0xbff0('0x1'));var rimraf=require(_0xbff0('0x2'));var zipdir=require(_0xbff0('0x3'));var jsonpatch=require(_0xbff0('0x4'));var rp=require(_0xbff0('0x5'));var moment=require(_0xbff0('0x6'));var BPromise=require(_0xbff0('0x7'));var Mustache=require('mustache');var util=require(_0xbff0('0x8'));var path=require(_0xbff0('0x9'));var sox=require(_0xbff0('0xa'));var csv=require(_0xbff0('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xbff0('0xc'));var squel=require(_0xbff0('0xd'));var crypto=require(_0xbff0('0xe'));var jsforce=require('jsforce');var deskjs=require(_0xbff0('0xf'));var toCsv=require(_0xbff0('0xb'));var querystring=require('querystring');var Papa=require(_0xbff0('0x10'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0xbff0('0x11'));var qs=require(_0xbff0('0x12'));var logger=require(_0xbff0('0x13'))('api');var utils=require(_0xbff0('0x14'));var config=require(_0xbff0('0x15'));var db=require(_0xbff0('0x16'))['db'];function respondWithStatusCode(_0x537e13,_0x5afe42){_0x5afe42=_0x5afe42||0xcc;return function(_0x5cb36f){if(_0x5cb36f){return _0x537e13[_0xbff0('0x17')](_0x5afe42);}return _0x537e13[_0xbff0('0x18')](_0x5afe42)[_0xbff0('0x19')]();};}function respondWithResult(_0x56c440,_0x33c6c5){_0x33c6c5=_0x33c6c5||0xc8;return function(_0x1767d9){if(_0x1767d9){return _0x56c440[_0xbff0('0x18')](_0x33c6c5)[_0xbff0('0x1a')](_0x1767d9);}};}function respondWithFilteredResult(_0x6a5dd6,_0x58dd87){return function(_0x2fed96){if(_0x2fed96){var _0x5a99f1=_0x2fed96['count'],_0x202637=_0x58dd87['offset'],_0x59f672=_0x58dd87[_0xbff0('0x1b')]+_0x58dd87['limit'],_0x247d46;if(_0x59f672>=_0x5a99f1){_0x59f672=_0x5a99f1;_0x247d46=0xc8;}else{_0x247d46=0xce;}_0x6a5dd6[_0xbff0('0x18')](_0x247d46);return _0x6a5dd6[_0xbff0('0x1c')](_0xbff0('0x1d'),_0x202637+'-'+_0x59f672+'/'+_0x5a99f1)[_0xbff0('0x1a')](_0x2fed96);}return null;};}function patchUpdates(_0x3a98e2){return function(_0x30e8c4){try{jsonpatch[_0xbff0('0x1e')](_0x30e8c4,_0x3a98e2,!![]);}catch(_0x4ab5d9){return BPromise[_0xbff0('0x1f')](_0x4ab5d9);}return _0x30e8c4[_0xbff0('0x20')]();};}function saveUpdates(_0x5c9119,_0x5a3677){return function(_0x142654){if(_0x142654){return _0x142654[_0xbff0('0x21')](_0x5c9119)[_0xbff0('0x22')](function(_0x891d60){return _0x891d60;});}return null;};}function removeEntity(_0x5e243a,_0x2f3279){return function(_0x12de75){if(_0x12de75){return _0x12de75['destroy']()['then'](function(){var _0x821e15=_0x12de75['get']({'plain':!![]});var _0x2eadb1='Triggers';return db[_0xbff0('0x23')]['destroy']({'where':{'type':_0x2eadb1,'resourceId':_0x821e15['id']}})[_0xbff0('0x22')](function(){return _0x12de75;});})[_0xbff0('0x22')](function(){_0x5e243a[_0xbff0('0x18')](0xcc)[_0xbff0('0x19')]();});}};}function handleEntityNotFound(_0x1c489e,_0x462760){return function(_0x2e6701){if(!_0x2e6701){_0x1c489e['sendStatus'](0x194);}return _0x2e6701;};}function handleError(_0x25f8f6,_0x488994){_0x488994=_0x488994||0x1f4;return function(_0x354372){logger[_0xbff0('0x24')](_0x354372[_0xbff0('0x25')]);if(_0x354372[_0xbff0('0x26')]){delete _0x354372[_0xbff0('0x26')];}_0x25f8f6[_0xbff0('0x18')](_0x488994)['send'](_0x354372);};}exports[_0xbff0('0x27')]=function(_0x1b6457,_0x1cc3be){var _0x6662e3={},_0x66eea={},_0x211d6e={'count':0x0,'rows':[]};var _0x9f9a26=db['Trigger'][_0xbff0('0x28')];_0x66eea[_0xbff0('0x29')]=_[_0xbff0('0x2a')](_0x9f9a26);_0x66eea[_0xbff0('0x2b')]=_[_0xbff0('0x2a')](_0x1b6457[_0xbff0('0x2b')]);_0x66eea['filters']=_[_0xbff0('0x2c')](_0x66eea[_0xbff0('0x29')],_0x66eea['query']);_0x6662e3['attributes']=_[_0xbff0('0x2c')](_0x66eea[_0xbff0('0x29')],qs[_0xbff0('0x2d')](_0x1b6457[_0xbff0('0x2b')][_0xbff0('0x2d')]));_0x6662e3[_0xbff0('0x2e')]=_0x6662e3[_0xbff0('0x2e')][_0xbff0('0x2f')]?_0x6662e3['attributes']:_0x66eea[_0xbff0('0x29')];if(!_0x1b6457['query'][_0xbff0('0x30')](_0xbff0('0x31'))){_0x6662e3['limit']=qs[_0xbff0('0x32')](_0x1b6457[_0xbff0('0x2b')][_0xbff0('0x32')]);_0x6662e3['offset']=qs[_0xbff0('0x1b')](_0x1b6457['query']['offset']);}_0x6662e3[_0xbff0('0x33')]=qs[_0xbff0('0x34')](_0x1b6457[_0xbff0('0x2b')][_0xbff0('0x34')]);_0x6662e3[_0xbff0('0x35')]=qs[_0xbff0('0x36')](_[_0xbff0('0x37')](_0x1b6457[_0xbff0('0x2b')],_0x66eea['filters']));if(_0x1b6457['query']['filter']){_0x6662e3[_0xbff0('0x35')]=_['merge'](_0x6662e3[_0xbff0('0x35')],{'$or':_[_0xbff0('0x38')](_0x9f9a26,function(_0x44610b){if(_0x44610b[_0xbff0('0x39')]['key']!==_0xbff0('0x3a')){var _0x1c2071={};_0x1c2071[_0x44610b[_0xbff0('0x3b')]]={'$like':'%'+_0x1b6457['query'][_0xbff0('0x3c')]+'%'};return _0x1c2071;}})});}_0x6662e3=_[_0xbff0('0x3d')]({},_0x6662e3,_0x1b6457[_0xbff0('0x3e')]);var _0x274a19={'where':_0x6662e3[_0xbff0('0x35')]};return db['Trigger']['count'](_0x274a19)[_0xbff0('0x22')](function(_0x439730){_0x211d6e[_0xbff0('0x3f')]=_0x439730;if(_0x1b6457[_0xbff0('0x2b')][_0xbff0('0x40')]){_0x6662e3[_0xbff0('0x41')]=[{'all':!![]}];}return db['Trigger'][_0xbff0('0x42')](_0x6662e3);})[_0xbff0('0x22')](function(_0x446442){_0x211d6e[_0xbff0('0x43')]=_0x446442;return _0x211d6e;})[_0xbff0('0x22')](respondWithFilteredResult(_0x1cc3be,_0x6662e3))[_0xbff0('0x44')](handleError(_0x1cc3be,null));};exports[_0xbff0('0x45')]=function(_0x58fd09,_0x16d0b5){var _0x47eb91={'raw':![],'where':{'id':_0x58fd09[_0xbff0('0x46')]['id']}},_0x54dfb0={};_0x54dfb0['model']=_['keys'](db[_0xbff0('0x47')][_0xbff0('0x28')]);_0x54dfb0[_0xbff0('0x2b')]=_[_0xbff0('0x2a')](_0x58fd09[_0xbff0('0x2b')]);_0x54dfb0[_0xbff0('0x36')]=_[_0xbff0('0x2c')](_0x54dfb0['model'],_0x54dfb0[_0xbff0('0x2b')]);_0x47eb91[_0xbff0('0x2e')]=_[_0xbff0('0x2c')](_0x54dfb0['model'],qs[_0xbff0('0x2d')](_0x58fd09['query'][_0xbff0('0x2d')]));_0x47eb91['attributes']=_0x47eb91[_0xbff0('0x2e')][_0xbff0('0x2f')]?_0x47eb91['attributes']:_0x54dfb0[_0xbff0('0x29')];if(_0x58fd09[_0xbff0('0x2b')][_0xbff0('0x40')]){_0x47eb91['include']=[{'all':!![]}];}_0x47eb91=_[_0xbff0('0x3d')]({},_0x47eb91,_0x58fd09[_0xbff0('0x3e')]);return db[_0xbff0('0x47')]['find'](_0x47eb91)[_0xbff0('0x22')](handleEntityNotFound(_0x16d0b5,null))[_0xbff0('0x22')](respondWithResult(_0x16d0b5,null))[_0xbff0('0x44')](handleError(_0x16d0b5,null));};exports[_0xbff0('0x48')]=function(_0x56f05b,_0x56602c){return db['Trigger'][_0xbff0('0x48')](_0x56f05b[_0xbff0('0x49')],{})[_0xbff0('0x22')](function(_0x49c2a8){var _0x36214c=_0x56f05b[_0xbff0('0x4a')]['get']({'plain':!![]});if(!_0x36214c)throw new Error(_0xbff0('0x4b'));if(_0x36214c['role']===_0xbff0('0x4a')){var _0x3628cf=_0x49c2a8[_0xbff0('0x4c')]({'plain':!![]});var _0x2ca3c1='Triggers';return db[_0xbff0('0x4d')][_0xbff0('0x4e')]({'where':{'name':_0x2ca3c1,'userProfileId':_0x36214c['userProfileId']},'raw':!![]})[_0xbff0('0x22')](function(_0x29c297){if(_0x29c297&&_0x29c297['autoAssociation']===0x0){return db[_0xbff0('0x23')][_0xbff0('0x48')]({'name':_0x3628cf[_0xbff0('0x26')],'resourceId':_0x3628cf['id'],'type':_0x29c297['name'],'sectionId':_0x29c297['id']},{})['then'](function(){return _0x49c2a8;});}else{return _0x49c2a8;}})[_0xbff0('0x44')](function(_0x1aa79c){logger[_0xbff0('0x24')](_0xbff0('0x4f'),_0x1aa79c);throw _0x1aa79c;});}return _0x49c2a8;})[_0xbff0('0x22')](respondWithResult(_0x56602c,0xc9))[_0xbff0('0x44')](handleError(_0x56602c,null));};exports[_0xbff0('0x21')]=function(_0x50bec4,_0x74ecba){if(_0x50bec4['body']['id']){delete _0x50bec4[_0xbff0('0x49')]['id'];}return db['Trigger'][_0xbff0('0x4e')]({'where':{'id':_0x50bec4['params']['id']}})['then'](handleEntityNotFound(_0x74ecba,null))['then'](saveUpdates(_0x50bec4[_0xbff0('0x49')],null))[_0xbff0('0x22')](respondWithResult(_0x74ecba,null))[_0xbff0('0x44')](handleError(_0x74ecba,null));};exports[_0xbff0('0x50')]=function(_0x3e84ff,_0x5e4d98){return db[_0xbff0('0x47')][_0xbff0('0x4e')]({'where':{'id':_0x3e84ff[_0xbff0('0x46')]['id']}})[_0xbff0('0x22')](handleEntityNotFound(_0x5e4d98,null))[_0xbff0('0x22')](removeEntity(_0x5e4d98,null))[_0xbff0('0x44')](handleError(_0x5e4d98,null));};exports[_0xbff0('0x51')]=function(_0x59e265,_0x1136e5,_0xa1d56f){if(_0x59e265[_0xbff0('0x49')]['id']){delete _0x59e265['body']['id'];}return db[_0xbff0('0x47')][_0xbff0('0x4e')]({'where':{'id':_0x59e265[_0xbff0('0x46')]['id']}})[_0xbff0('0x22')](handleEntityNotFound(_0x1136e5,null))[_0xbff0('0x22')](function(_0x5a6059){if(_0x5a6059){_0x59e265[_0xbff0('0x49')][_0xbff0('0x52')]=_0x5a6059['id'];return db[_0xbff0('0x53')][_0xbff0('0x48')](_0x59e265[_0xbff0('0x49')]);}})['then'](respondWithResult(_0x1136e5,null))[_0xbff0('0x44')](handleError(_0x1136e5,null));};exports[_0xbff0('0x54')]=function(_0x29cf7b,_0x5f1dcb,_0x2b8bb6){if(_0x29cf7b[_0xbff0('0x49')]['id']){delete _0x29cf7b[_0xbff0('0x49')]['id'];}return db[_0xbff0('0x47')][_0xbff0('0x4e')]({'where':{'id':_0x29cf7b[_0xbff0('0x46')]['id']}})[_0xbff0('0x22')](handleEntityNotFound(_0x5f1dcb,null))['then'](function(_0x26fca9){if(_0x26fca9){_0x29cf7b[_0xbff0('0x49')][_0xbff0('0x55')]=_0x26fca9['id'];return db[_0xbff0('0x53')]['create'](_0x29cf7b[_0xbff0('0x49')]);}})['then'](respondWithResult(_0x5f1dcb,null))[_0xbff0('0x44')](handleError(_0x5f1dcb,null));};exports[_0xbff0('0x56')]=function(_0x390164,_0x39a2d3,_0x49fe02){var _0x2b28d0={};var _0x427007={};var _0x8c1c8b;var _0x1c61dc;return db['Trigger'][_0xbff0('0x57')]({'where':{'id':_0x390164[_0xbff0('0x46')]['id']}})[_0xbff0('0x22')](handleEntityNotFound(_0x39a2d3,null))[_0xbff0('0x22')](function(_0x1101c8){if(_0x1101c8){_0x8c1c8b=_0x1101c8;_0x427007['model']=_[_0xbff0('0x2a')](db[_0xbff0('0x53')][_0xbff0('0x28')]);_0x427007[_0xbff0('0x2b')]=_[_0xbff0('0x2a')](_0x390164[_0xbff0('0x2b')]);_0x427007[_0xbff0('0x36')]=_['intersection'](_0x427007['model'],_0x427007[_0xbff0('0x2b')]);_0x2b28d0[_0xbff0('0x2e')]=_[_0xbff0('0x2c')](_0x427007['model'],qs[_0xbff0('0x2d')](_0x390164[_0xbff0('0x2b')][_0xbff0('0x2d')]));_0x2b28d0['attributes']=_0x2b28d0[_0xbff0('0x2e')][_0xbff0('0x2f')]?_0x2b28d0[_0xbff0('0x2e')]:_0x427007[_0xbff0('0x29')];_0x2b28d0[_0xbff0('0x33')]=qs[_0xbff0('0x34')](_0x390164[_0xbff0('0x2b')][_0xbff0('0x34')]);_0x2b28d0[_0xbff0('0x35')]=qs[_0xbff0('0x36')](_[_0xbff0('0x37')](_0x390164[_0xbff0('0x2b')],_0x427007['filters']));if(_0x390164[_0xbff0('0x2b')][_0xbff0('0x3c')]){_0x2b28d0[_0xbff0('0x35')]=_[_0xbff0('0x3d')](_0x2b28d0[_0xbff0('0x35')],{'$or':_[_0xbff0('0x38')](_0x2b28d0[_0xbff0('0x2e')],function(_0x32cc36){var _0x27cae7={};_0x27cae7[_0x32cc36]={'$like':'%'+_0x390164['query']['filter']+'%'};return _0x27cae7;})});}_0x2b28d0=_[_0xbff0('0x3d')]({},_0x2b28d0,_0x390164[_0xbff0('0x3e')]);return _0x8c1c8b['getAllConditions'](_0x2b28d0);}})['then'](function(_0x22af40){if(_0x22af40){_0x1c61dc=_0x22af40[_0xbff0('0x2f')];if(!_0x390164[_0xbff0('0x2b')][_0xbff0('0x30')](_0xbff0('0x31'))){_0x2b28d0[_0xbff0('0x32')]=qs[_0xbff0('0x32')](_0x390164[_0xbff0('0x2b')][_0xbff0('0x32')]);_0x2b28d0[_0xbff0('0x1b')]=qs['offset'](_0x390164[_0xbff0('0x2b')]['offset']);}return _0x8c1c8b[_0xbff0('0x56')](_0x2b28d0);}})[_0xbff0('0x22')](function(_0x5de7fb){if(_0x5de7fb){return _0x5de7fb?{'count':_0x1c61dc,'rows':_0x5de7fb}:null;}})[_0xbff0('0x22')](respondWithResult(_0x39a2d3,null))[_0xbff0('0x44')](handleError(_0x39a2d3,null));};exports[_0xbff0('0x58')]=function(_0x4265f7,_0x4125d0,_0x26f181){var _0x5b06b5={};var _0x3f9a49={};var _0x17fafc;var _0x3f0322;return db[_0xbff0('0x47')][_0xbff0('0x57')]({'where':{'id':_0x4265f7['params']['id']}})[_0xbff0('0x22')](handleEntityNotFound(_0x4125d0,null))[_0xbff0('0x22')](function(_0x1d6009){if(_0x1d6009){_0x17fafc=_0x1d6009;_0x3f9a49[_0xbff0('0x29')]=_['keys'](db[_0xbff0('0x53')][_0xbff0('0x28')]);_0x3f9a49[_0xbff0('0x2b')]=_[_0xbff0('0x2a')](_0x4265f7['query']);_0x3f9a49[_0xbff0('0x36')]=_['intersection'](_0x3f9a49['model'],_0x3f9a49['query']);_0x5b06b5['attributes']=_[_0xbff0('0x2c')](_0x3f9a49['model'],qs[_0xbff0('0x2d')](_0x4265f7['query'][_0xbff0('0x2d')]));_0x5b06b5[_0xbff0('0x2e')]=_0x5b06b5[_0xbff0('0x2e')]['length']?_0x5b06b5['attributes']:_0x3f9a49[_0xbff0('0x29')];_0x5b06b5[_0xbff0('0x33')]=qs[_0xbff0('0x34')](_0x4265f7[_0xbff0('0x2b')][_0xbff0('0x34')]);_0x5b06b5[_0xbff0('0x35')]=qs[_0xbff0('0x36')](_[_0xbff0('0x37')](_0x4265f7[_0xbff0('0x2b')],_0x3f9a49[_0xbff0('0x36')]));if(_0x4265f7['query']['filter']){_0x5b06b5[_0xbff0('0x35')]=_['merge'](_0x5b06b5['where'],{'$or':_[_0xbff0('0x38')](_0x5b06b5['attributes'],function(_0x34e2bf){var _0x495e20={};_0x495e20[_0x34e2bf]={'$like':'%'+_0x4265f7[_0xbff0('0x2b')]['filter']+'%'};return _0x495e20;})});}_0x5b06b5=_[_0xbff0('0x3d')]({},_0x5b06b5,_0x4265f7[_0xbff0('0x3e')]);return _0x17fafc['getAnyConditions'](_0x5b06b5);}})[_0xbff0('0x22')](function(_0x46aa31){if(_0x46aa31){_0x3f0322=_0x46aa31['length'];if(!_0x4265f7[_0xbff0('0x2b')][_0xbff0('0x30')](_0xbff0('0x31'))){_0x5b06b5[_0xbff0('0x32')]=qs[_0xbff0('0x32')](_0x4265f7[_0xbff0('0x2b')][_0xbff0('0x32')]);_0x5b06b5['offset']=qs[_0xbff0('0x1b')](_0x4265f7[_0xbff0('0x2b')][_0xbff0('0x1b')]);}return _0x17fafc[_0xbff0('0x58')](_0x5b06b5);}})['then'](function(_0x2dfcd8){if(_0x2dfcd8){return _0x2dfcd8?{'count':_0x3f0322,'rows':_0x2dfcd8}:null;}})[_0xbff0('0x22')](respondWithResult(_0x4125d0,null))[_0xbff0('0x44')](handleError(_0x4125d0,null));};exports[_0xbff0('0x59')]=function(_0x2be95c,_0x2970ed,_0x537383){if(_0x2be95c[_0xbff0('0x49')]['id']){delete _0x2be95c[_0xbff0('0x49')]['id'];}return db[_0xbff0('0x47')]['find']({'where':{'id':_0x2be95c[_0xbff0('0x46')]['id']}})[_0xbff0('0x22')](handleEntityNotFound(_0x2970ed,null))[_0xbff0('0x22')](function(_0x504906){if(_0x504906){_0x2be95c[_0xbff0('0x49')][_0xbff0('0x5a')]=_0x504906['id'];return db['Action'][_0xbff0('0x48')](_0x2be95c[_0xbff0('0x49')]);}})[_0xbff0('0x22')](respondWithResult(_0x2970ed,null))[_0xbff0('0x44')](handleError(_0x2970ed,null));};exports[_0xbff0('0x5b')]=function(_0x4e089e,_0x5627bf,_0x79a8d3){var _0x2617d8={};var _0x344273={};var _0x3cb764;var _0x19da34;return db[_0xbff0('0x47')][_0xbff0('0x57')]({'where':{'id':_0x4e089e[_0xbff0('0x46')]['id']}})[_0xbff0('0x22')](handleEntityNotFound(_0x5627bf,null))[_0xbff0('0x22')](function(_0x51c588){if(_0x51c588){_0x3cb764=_0x51c588;_0x344273['model']=_[_0xbff0('0x2a')](db[_0xbff0('0x5c')][_0xbff0('0x28')]);_0x344273[_0xbff0('0x2b')]=_[_0xbff0('0x2a')](_0x4e089e[_0xbff0('0x2b')]);_0x344273[_0xbff0('0x36')]=_[_0xbff0('0x2c')](_0x344273['model'],_0x344273[_0xbff0('0x2b')]);_0x2617d8['attributes']=_['intersection'](_0x344273[_0xbff0('0x29')],qs['fields'](_0x4e089e[_0xbff0('0x2b')][_0xbff0('0x2d')]));_0x2617d8[_0xbff0('0x2e')]=_0x2617d8[_0xbff0('0x2e')][_0xbff0('0x2f')]?_0x2617d8[_0xbff0('0x2e')]:_0x344273[_0xbff0('0x29')];_0x2617d8[_0xbff0('0x33')]=qs[_0xbff0('0x34')](_0x4e089e[_0xbff0('0x2b')][_0xbff0('0x34')]);_0x2617d8[_0xbff0('0x35')]=qs[_0xbff0('0x36')](_['pick'](_0x4e089e['query'],_0x344273[_0xbff0('0x36')]));if(_0x4e089e['query'][_0xbff0('0x3c')]){_0x2617d8['where']=_[_0xbff0('0x3d')](_0x2617d8[_0xbff0('0x35')],{'$or':_[_0xbff0('0x38')](_0x2617d8[_0xbff0('0x2e')],function(_0xdd5f1a){var _0x24712d={};_0x24712d[_0xdd5f1a]={'$like':'%'+_0x4e089e['query'][_0xbff0('0x3c')]+'%'};return _0x24712d;})});}_0x2617d8=_[_0xbff0('0x3d')]({},_0x2617d8,_0x4e089e[_0xbff0('0x3e')]);return _0x3cb764[_0xbff0('0x5b')](_0x2617d8);}})['then'](function(_0x28ae27){if(_0x28ae27){_0x19da34=_0x28ae27[_0xbff0('0x2f')];if(!_0x4e089e['query'][_0xbff0('0x30')](_0xbff0('0x31'))){_0x2617d8['limit']=qs[_0xbff0('0x32')](_0x4e089e['query'][_0xbff0('0x32')]);_0x2617d8['offset']=qs[_0xbff0('0x1b')](_0x4e089e[_0xbff0('0x2b')][_0xbff0('0x1b')]);}return _0x3cb764[_0xbff0('0x5b')](_0x2617d8);}})[_0xbff0('0x22')](function(_0x289f03){if(_0x289f03){return _0x289f03?{'count':_0x19da34,'rows':_0x289f03}:null;}})['then'](respondWithResult(_0x5627bf,null))['catch'](handleError(_0x5627bf,null));};
\ No newline at end of file
index 656e264..2e7c4b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x469b=['lodash','util','../../config/logger','api','bluebird','request-promise','./trigger.attributes','define','Trigger','tools_triggers'];(function(_0x1f9f37,_0x18776e){var _0x21c080=function(_0x4acb93){while(--_0x4acb93){_0x1f9f37['push'](_0x1f9f37['shift']());}};_0x21c080(++_0x18776e);}(_0x469b,0x8c));var _0xb469=function(_0x1cdf19,_0x2c4b46){_0x1cdf19=_0x1cdf19-0x0;var _0x340a02=_0x469b[_0x1cdf19];return _0x340a02;};'use strict';var _=require(_0xb469('0x0'));var util=require(_0xb469('0x1'));var logger=require(_0xb469('0x2'))(_0xb469('0x3'));var moment=require('moment');var BPromise=require(_0xb469('0x4'));var rp=require(_0xb469('0x5'));var attributes=require(_0xb469('0x6'));module['exports']=function(_0x139a82,_0x57bdf2){return _0x139a82[_0xb469('0x7')](_0xb469('0x8'),attributes,{'tableName':_0xb469('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x4c47=['tools_triggers','lodash','../../config/logger','api','moment','bluebird','request-promise','./trigger.attributes','exports','Trigger'];(function(_0x1ff414,_0x12c95d){var _0x52c0fa=function(_0x57f936){while(--_0x57f936){_0x1ff414['push'](_0x1ff414['shift']());}};_0x52c0fa(++_0x12c95d);}(_0x4c47,0x141));var _0x74c4=function(_0x185b58,_0x44751d){_0x185b58=_0x185b58-0x0;var _0x47995a=_0x4c47[_0x185b58];return _0x47995a;};'use strict';var _=require(_0x74c4('0x0'));var util=require('util');var logger=require(_0x74c4('0x1'))(_0x74c4('0x2'));var moment=require(_0x74c4('0x3'));var BPromise=require(_0x74c4('0x4'));var rp=require(_0x74c4('0x5'));var attributes=require(_0x74c4('0x6'));module[_0x74c4('0x7')]=function(_0x45dcc7,_0x5a14fd){return _0x45dcc7['define'](_0x74c4('0x8'),attributes,{'tableName':_0x74c4('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index b10045f..c579693 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b7f=['../../config/environment','jayson/promise','client','http','request','then','info','Trigger,\x20%s,\x20%s','request\x20sent','debug','Trigger,\x20%s,\x20%s,\x20%s','stringify','error','code','message','catch','GetTrigger','Trigger','findAll','options','raw','where','attributes','limit','include','model','map','ShowTrigger','find','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','rpc'];(function(_0x10a985,_0x2c5252){var _0x46f374=function(_0xf636b4){while(--_0xf636b4){_0x10a985['push'](_0x10a985['shift']());}};_0x46f374(++_0x2c5252);}(_0x8b7f,0x89));var _0xf8b7=function(_0x660a43,_0x880e5a){_0x660a43=_0x660a43-0x0;var _0x2b4b1e=_0x8b7f[_0x660a43];return _0x2b4b1e;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xf8b7('0x0'));var BPromise=require(_0xf8b7('0x1'));var rs=require(_0xf8b7('0x2'));var fs=require('fs');var Redis=require(_0xf8b7('0x3'));var db=require(_0xf8b7('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0xf8b7('0x5'))(_0xf8b7('0x6'));var config=require(_0xf8b7('0x7'));var jayson=require(_0xf8b7('0x8'));var client=jayson[_0xf8b7('0x9')][_0xf8b7('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x4272a4,_0x5c0380,_0x4ab52b){return new BPromise(function(_0x3391f0,_0x59f02b){return client[_0xf8b7('0xb')](_0x4272a4,_0x4ab52b)[_0xf8b7('0xc')](function(_0x3494bc){logger[_0xf8b7('0xd')](_0xf8b7('0xe'),_0x5c0380,_0xf8b7('0xf'));logger[_0xf8b7('0x10')](_0xf8b7('0x11'),_0x5c0380,'request\x20sent',JSON[_0xf8b7('0x12')](_0x3494bc));if(_0x3494bc[_0xf8b7('0x13')]){if(_0x3494bc['error'][_0xf8b7('0x14')]===0x1f4){logger[_0xf8b7('0x13')](_0xf8b7('0xe'),_0x5c0380,_0x3494bc['error'][_0xf8b7('0x15')]);return _0x59f02b(_0x3494bc[_0xf8b7('0x13')]['message']);}logger[_0xf8b7('0x13')]('Trigger,\x20%s,\x20%s',_0x5c0380,_0x3494bc['error'][_0xf8b7('0x15')]);return _0x3391f0(_0x3494bc[_0xf8b7('0x13')][_0xf8b7('0x15')]);}else{logger[_0xf8b7('0xd')](_0xf8b7('0xe'),_0x5c0380,'request\x20sent');_0x3391f0(_0x3494bc['result'][_0xf8b7('0x15')]);}})[_0xf8b7('0x16')](function(_0x3a762f){logger[_0xf8b7('0x13')](_0xf8b7('0xe'),_0x5c0380,_0x3a762f);_0x59f02b(_0x3a762f);});});}exports[_0xf8b7('0x17')]=function(_0x3eb63d){var _0xd1ac69=this;return new Promise(function(_0x519a43,_0x22acdd){return db[_0xf8b7('0x18')][_0xf8b7('0x19')]({'raw':_0x3eb63d['options']?_0x3eb63d[_0xf8b7('0x1a')][_0xf8b7('0x1b')]===undefined?!![]:![]:!![],'where':_0x3eb63d[_0xf8b7('0x1a')]?_0x3eb63d[_0xf8b7('0x1a')][_0xf8b7('0x1c')]||null:null,'attributes':_0x3eb63d['options']?_0x3eb63d[_0xf8b7('0x1a')][_0xf8b7('0x1d')]||null:null,'limit':_0x3eb63d[_0xf8b7('0x1a')]?_0x3eb63d[_0xf8b7('0x1a')][_0xf8b7('0x1e')]||null:null,'include':_0x3eb63d[_0xf8b7('0x1a')]?_0x3eb63d[_0xf8b7('0x1a')][_0xf8b7('0x1f')]?_['map'](_0x3eb63d[_0xf8b7('0x1a')][_0xf8b7('0x1f')],function(_0xae0364){return{'model':db[_0xae0364[_0xf8b7('0x20')]],'as':_0xae0364['as'],'attributes':_0xae0364[_0xf8b7('0x1d')],'include':_0xae0364[_0xf8b7('0x1f')]?_[_0xf8b7('0x21')](_0xae0364[_0xf8b7('0x1f')],function(_0x72a7e6){return{'model':db[_0x72a7e6['model']],'as':_0x72a7e6['as'],'attributes':_0x72a7e6[_0xf8b7('0x1d')],'include':_0x72a7e6[_0xf8b7('0x1f')]?_[_0xf8b7('0x21')](_0x72a7e6['include'],function(_0x100064){return{'model':db[_0x100064['model']],'as':_0x100064['as'],'attributes':_0x100064[_0xf8b7('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xf8b7('0xc')](function(_0xed3bf4){logger[_0xf8b7('0xd')](_0xf8b7('0x17'),_0x3eb63d);logger[_0xf8b7('0x10')](_0xf8b7('0x17'),_0x3eb63d,JSON[_0xf8b7('0x12')](_0xed3bf4));_0x519a43(_0xed3bf4);})['catch'](function(_0x1326e4){logger['error'](_0xf8b7('0x17'),_0x1326e4[_0xf8b7('0x15')],_0x3eb63d);_0x22acdd(_0xd1ac69[_0xf8b7('0x13')](0x1f4,_0x1326e4[_0xf8b7('0x15')]));});});};exports[_0xf8b7('0x22')]=function(_0x48d009){var _0x318174=this;return new Promise(function(_0x4c7dc0,_0x484aed){return db[_0xf8b7('0x18')][_0xf8b7('0x23')]({'raw':_0x48d009[_0xf8b7('0x1a')]?_0x48d009[_0xf8b7('0x1a')]['raw']===undefined?!![]:![]:!![],'where':_0x48d009[_0xf8b7('0x1a')]?_0x48d009[_0xf8b7('0x1a')][_0xf8b7('0x1c')]||null:null,'attributes':_0x48d009[_0xf8b7('0x1a')]?_0x48d009[_0xf8b7('0x1a')][_0xf8b7('0x1d')]||null:null,'include':_0x48d009[_0xf8b7('0x1a')]?_0x48d009[_0xf8b7('0x1a')][_0xf8b7('0x1f')]?_['map'](_0x48d009[_0xf8b7('0x1a')][_0xf8b7('0x1f')],function(_0x15122c){return{'model':db[_0x15122c[_0xf8b7('0x20')]],'as':_0x15122c['as'],'attributes':_0x15122c[_0xf8b7('0x1d')],'include':_0x15122c['include']?_[_0xf8b7('0x21')](_0x15122c[_0xf8b7('0x1f')],function(_0xb02ef5){return{'model':db[_0xb02ef5['model']],'as':_0xb02ef5['as'],'attributes':_0xb02ef5['attributes'],'include':_0xb02ef5['include']?_[_0xf8b7('0x21')](_0xb02ef5[_0xf8b7('0x1f')],function(_0xbc5db6){return{'model':db[_0xbc5db6[_0xf8b7('0x20')]],'as':_0xbc5db6['as'],'attributes':_0xbc5db6[_0xf8b7('0x1d')]};}):[]};}):[]};}):[]:[]})[_0xf8b7('0xc')](function(_0x93873a){logger[_0xf8b7('0xd')](_0xf8b7('0x22'),_0x48d009);logger['debug'](_0xf8b7('0x22'),_0x48d009,JSON[_0xf8b7('0x12')](_0x93873a));_0x4c7dc0(_0x93873a);})[_0xf8b7('0x16')](function(_0x569093){logger['error'](_0xf8b7('0x22'),_0x569093[_0xf8b7('0x15')],_0x48d009);_0x484aed(_0x318174[_0xf8b7('0x13')](0x1f4,_0x569093[_0xf8b7('0x15')]));});});};
\ No newline at end of file
+var _0x2791=['attributes','include','map','model','ShowTrigger','Trigger','find','where','util','moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','client','http','request','then','info','Trigger,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','result','catch','GetTrigger','findAll','options'];(function(_0x3eb36b,_0x5be33f){var _0x1cc15d=function(_0x1b0ac5){while(--_0x1b0ac5){_0x3eb36b['push'](_0x3eb36b['shift']());}};_0x1cc15d(++_0x5be33f);}(_0x2791,0x17c));var _0x1279=function(_0x149e23,_0x247451){_0x149e23=_0x149e23-0x0;var _0xf44fa5=_0x2791[_0x149e23];return _0xf44fa5;};'use strict';var _=require('lodash');var util=require(_0x1279('0x0'));var moment=require(_0x1279('0x1'));var BPromise=require(_0x1279('0x2'));var rs=require(_0x1279('0x3'));var fs=require('fs');var Redis=require(_0x1279('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x1279('0x5'));var logger=require(_0x1279('0x6'))('rpc');var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x1279('0x7')][_0x1279('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x37a5e0,_0x5aefdb,_0xbb18e6){return new BPromise(function(_0x3ab378,_0x2894a7){return client[_0x1279('0x9')](_0x37a5e0,_0xbb18e6)[_0x1279('0xa')](function(_0x45399d){logger[_0x1279('0xb')](_0x1279('0xc'),_0x5aefdb,_0x1279('0xd'));logger[_0x1279('0xe')]('Trigger,\x20%s,\x20%s,\x20%s',_0x5aefdb,_0x1279('0xd'),JSON[_0x1279('0xf')](_0x45399d));if(_0x45399d[_0x1279('0x10')]){if(_0x45399d[_0x1279('0x10')]['code']===0x1f4){logger[_0x1279('0x10')](_0x1279('0xc'),_0x5aefdb,_0x45399d[_0x1279('0x10')]['message']);return _0x2894a7(_0x45399d[_0x1279('0x10')][_0x1279('0x11')]);}logger[_0x1279('0x10')](_0x1279('0xc'),_0x5aefdb,_0x45399d[_0x1279('0x10')][_0x1279('0x11')]);return _0x3ab378(_0x45399d['error']['message']);}else{logger['info'](_0x1279('0xc'),_0x5aefdb,_0x1279('0xd'));_0x3ab378(_0x45399d[_0x1279('0x12')][_0x1279('0x11')]);}})[_0x1279('0x13')](function(_0x441e8c){logger[_0x1279('0x10')](_0x1279('0xc'),_0x5aefdb,_0x441e8c);_0x2894a7(_0x441e8c);});});}exports[_0x1279('0x14')]=function(_0x473b88){var _0x2adc97=this;return new Promise(function(_0x485cd4,_0x1019ee){return db['Trigger'][_0x1279('0x15')]({'raw':_0x473b88[_0x1279('0x16')]?_0x473b88[_0x1279('0x16')]['raw']===undefined?!![]:![]:!![],'where':_0x473b88['options']?_0x473b88[_0x1279('0x16')]['where']||null:null,'attributes':_0x473b88[_0x1279('0x16')]?_0x473b88[_0x1279('0x16')][_0x1279('0x17')]||null:null,'limit':_0x473b88[_0x1279('0x16')]?_0x473b88['options']['limit']||null:null,'include':_0x473b88[_0x1279('0x16')]?_0x473b88[_0x1279('0x16')][_0x1279('0x18')]?_[_0x1279('0x19')](_0x473b88[_0x1279('0x16')][_0x1279('0x18')],function(_0x23290a){return{'model':db[_0x23290a[_0x1279('0x1a')]],'as':_0x23290a['as'],'attributes':_0x23290a['attributes'],'include':_0x23290a[_0x1279('0x18')]?_['map'](_0x23290a['include'],function(_0xfd0e7b){return{'model':db[_0xfd0e7b[_0x1279('0x1a')]],'as':_0xfd0e7b['as'],'attributes':_0xfd0e7b['attributes'],'include':_0xfd0e7b['include']?_[_0x1279('0x19')](_0xfd0e7b['include'],function(_0x29e36f){return{'model':db[_0x29e36f[_0x1279('0x1a')]],'as':_0x29e36f['as'],'attributes':_0x29e36f[_0x1279('0x17')]};}):[]};}):[]};}):[]:[]})[_0x1279('0xa')](function(_0x437d1e){logger[_0x1279('0xb')](_0x1279('0x14'),_0x473b88);logger[_0x1279('0xe')]('GetTrigger',_0x473b88,JSON[_0x1279('0xf')](_0x437d1e));_0x485cd4(_0x437d1e);})[_0x1279('0x13')](function(_0x179c8e){logger[_0x1279('0x10')](_0x1279('0x14'),_0x179c8e['message'],_0x473b88);_0x1019ee(_0x2adc97[_0x1279('0x10')](0x1f4,_0x179c8e[_0x1279('0x11')]));});});};exports[_0x1279('0x1b')]=function(_0x4b7f24){var _0x4addbd=this;return new Promise(function(_0x87986,_0x29cc72){return db[_0x1279('0x1c')][_0x1279('0x1d')]({'raw':_0x4b7f24[_0x1279('0x16')]?_0x4b7f24['options']['raw']===undefined?!![]:![]:!![],'where':_0x4b7f24[_0x1279('0x16')]?_0x4b7f24[_0x1279('0x16')][_0x1279('0x1e')]||null:null,'attributes':_0x4b7f24[_0x1279('0x16')]?_0x4b7f24['options'][_0x1279('0x17')]||null:null,'include':_0x4b7f24[_0x1279('0x16')]?_0x4b7f24[_0x1279('0x16')][_0x1279('0x18')]?_[_0x1279('0x19')](_0x4b7f24['options'][_0x1279('0x18')],function(_0x49ccd1){return{'model':db[_0x49ccd1[_0x1279('0x1a')]],'as':_0x49ccd1['as'],'attributes':_0x49ccd1[_0x1279('0x17')],'include':_0x49ccd1[_0x1279('0x18')]?_[_0x1279('0x19')](_0x49ccd1[_0x1279('0x18')],function(_0xfabdd5){return{'model':db[_0xfabdd5[_0x1279('0x1a')]],'as':_0xfabdd5['as'],'attributes':_0xfabdd5[_0x1279('0x17')],'include':_0xfabdd5['include']?_[_0x1279('0x19')](_0xfabdd5[_0x1279('0x18')],function(_0x40d535){return{'model':db[_0x40d535[_0x1279('0x1a')]],'as':_0x40d535['as'],'attributes':_0x40d535[_0x1279('0x17')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x488df0){logger['info'](_0x1279('0x1b'),_0x4b7f24);logger[_0x1279('0xe')](_0x1279('0x1b'),_0x4b7f24,JSON[_0x1279('0xf')](_0x488df0));_0x87986(_0x488df0);})[_0x1279('0x13')](function(_0x3c9dfa){logger[_0x1279('0x10')](_0x1279('0x1b'),_0x3c9dfa['message'],_0x4b7f24);_0x29cc72(_0x4addbd[_0x1279('0x10')](0x1f4,_0x3c9dfa[_0x1279('0x11')]));});});};
\ No newline at end of file
index 6198810..0f2735b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaf0b=['../../components/auth/service','../../components/interaction/service','./trunk.controller','get','index','isAuthenticated','show','post','clone','create','put','/:id','delete','destroy','exports','multer','util','path','connect-timeout','express','Router'];(function(_0x291f8b,_0x3b5591){var _0x275171=function(_0xb33d67){while(--_0xb33d67){_0x291f8b['push'](_0x291f8b['shift']());}};_0x275171(++_0x3b5591);}(_0xaf0b,0x135));var _0xbaf0=function(_0x17a04a,_0x24be89){_0x17a04a=_0x17a04a-0x0;var _0x49d52b=_0xaf0b[_0x17a04a];return _0x49d52b;};'use strict';var multer=require(_0xbaf0('0x0'));var util=require(_0xbaf0('0x1'));var path=require(_0xbaf0('0x2'));var timeout=require(_0xbaf0('0x3'));var express=require(_0xbaf0('0x4'));var router=express[_0xbaf0('0x5')]();var auth=require(_0xbaf0('0x6'));var interaction=require(_0xbaf0('0x7'));var config=require('../../config/environment');var controller=require(_0xbaf0('0x8'));router[_0xbaf0('0x9')]('/',auth['isAuthenticated'](),controller[_0xbaf0('0xa')]);router['get']('/:id',auth[_0xbaf0('0xb')](),controller[_0xbaf0('0xc')]);router[_0xbaf0('0xd')]('/:id/clone',auth[_0xbaf0('0xb')](),controller[_0xbaf0('0xe')]);router[_0xbaf0('0xd')]('/',auth['isAuthenticated'](),controller[_0xbaf0('0xf')]);router[_0xbaf0('0x10')](_0xbaf0('0x11'),auth['isAuthenticated'](),controller['update']);router[_0xbaf0('0x12')](_0xbaf0('0x11'),auth[_0xbaf0('0xb')](),controller[_0xbaf0('0x13')]);module[_0xbaf0('0x14')]=router;
\ No newline at end of file
+var _0x7f5d=['../../config/environment','./trunk.controller','get','index','/:id','isAuthenticated','show','post','/:id/clone','create','put','delete','destroy','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x5cff84,_0x1073eb){var _0x3fb471=function(_0x2e645a){while(--_0x2e645a){_0x5cff84['push'](_0x5cff84['shift']());}};_0x3fb471(++_0x1073eb);}(_0x7f5d,0x10a));var _0xd7f5=function(_0x31af80,_0x43a66d){_0x31af80=_0x31af80-0x0;var _0x5ee520=_0x7f5d[_0x31af80];return _0x5ee520;};'use strict';var multer=require(_0xd7f5('0x0'));var util=require(_0xd7f5('0x1'));var path=require(_0xd7f5('0x2'));var timeout=require('connect-timeout');var express=require(_0xd7f5('0x3'));var router=express[_0xd7f5('0x4')]();var auth=require(_0xd7f5('0x5'));var interaction=require(_0xd7f5('0x6'));var config=require(_0xd7f5('0x7'));var controller=require(_0xd7f5('0x8'));router[_0xd7f5('0x9')]('/',auth['isAuthenticated'](),controller[_0xd7f5('0xa')]);router[_0xd7f5('0x9')](_0xd7f5('0xb'),auth[_0xd7f5('0xc')](),controller[_0xd7f5('0xd')]);router[_0xd7f5('0xe')](_0xd7f5('0xf'),auth[_0xd7f5('0xc')](),controller['clone']);router[_0xd7f5('0xe')]('/',auth[_0xd7f5('0xc')](),controller[_0xd7f5('0x10')]);router[_0xd7f5('0x11')](_0xd7f5('0xb'),auth['isAuthenticated'](),controller['update']);router[_0xd7f5('0x12')](_0xd7f5('0xb'),auth[_0xd7f5('0xc')](),controller[_0xd7f5('0x13')]);module[_0xd7f5('0x14')]=router;
\ No newline at end of file
index 153d65e..f78892a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbaf0=['setDataValue','transport','join','getDataValue','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','rfc2833','shortinfo','inband','auto','yes','outgoing','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\x22alaw\x22]','port,invite','insecure','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]','never','\x22\x22\x20<>','INTEGER','always','accept','refuse','originate','uac','uas','pai','fingerprint','active','passive','actpass','dynamic','nonat','update,nonat','exports','STRING','name','ENUM','friend','user','from-voip-provider','ALLOWED_NOT_SCREENED','ALLOWED_PASSED_SCREEN','ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_NOT_SCREENED','PROHIB_FAILED_SCREEN','udp'];(function(_0x2813fa,_0x3211d4){var _0x8a2acb=function(_0x4a9602){while(--_0x4a9602){_0x2813fa['push'](_0x2813fa['shift']());}};_0x8a2acb(++_0x3211d4);}(_0xbaf0,0x12a));var _0x0baf=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xbaf0[_0xa464c9];return _0x3d73c4;};'use strict';var Sequelize=require('sequelize');module[_0x0baf('0x0')]={'name':{'type':Sequelize[_0x0baf('0x1')],'allowNull':![],'unique':_0x0baf('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x4'),_0x0baf('0x5'),'peer'),'allowNull':![],'defaultValue':_0x0baf('0x4')},'context':{'type':Sequelize[_0x0baf('0x1')],'allowNull':![],'defaultValue':_0x0baf('0x6')},'callingpres':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x7'),_0x0baf('0x8'),_0x0baf('0x9'),_0x0baf('0xa'),_0x0baf('0xb'),'PROHIB_PASSED_SCREEN',_0x0baf('0xc'),'PROHIB')},'deny':{'type':Sequelize[_0x0baf('0x1')]},'permit':{'type':Sequelize[_0x0baf('0x1')]},'secret':{'type':Sequelize[_0x0baf('0x1')]},'md5secret':{'type':Sequelize[_0x0baf('0x1')]},'remotesecret':{'type':Sequelize[_0x0baf('0x1')]},'transport':{'type':Sequelize[_0x0baf('0x1')],'defaultValue':_0x0baf('0xd'),'set':function(_0x245a6b){this[_0x0baf('0xe')](_0x0baf('0xf'),_0x245a6b?_0x245a6b[_0x0baf('0x10')](','):null);},'get':function(){return this['getDataValue']('transport')?this[_0x0baf('0x11')](_0x0baf('0xf'))[_0x0baf('0x12')](','):null;},'comment':_0x0baf('0x13')},'dtmfmode':{'type':Sequelize['ENUM'](_0x0baf('0x14'),'info',_0x0baf('0x15'),_0x0baf('0x16'),_0x0baf('0x17')),'defaultValue':_0x0baf('0x14')},'directmedia':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no','nonat','update',_0x0baf('0x19')),'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no'),'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x0baf('0x1')]},'directmediadeny':{'type':Sequelize[_0x0baf('0x1')]},'nat':{'type':Sequelize[_0x0baf('0x1')],'defaultValue':'force_rport,comedia','set':function(_0x63c820){this[_0x0baf('0xe')](_0x0baf('0x1a'),_0x63c820?_0x63c820[_0x0baf('0x10')](','):null);},'get':function(){return this[_0x0baf('0x11')](_0x0baf('0x1a'))?this['getDataValue']('nat')[_0x0baf('0x12')](','):null;},'comment':_0x0baf('0x1b')},'callgroup':{'type':Sequelize[_0x0baf('0x1')]},'namedcallgroup':{'type':Sequelize[_0x0baf('0x1')]},'pickupgroup':{'type':Sequelize[_0x0baf('0x1')]},'namedpickupgroup':{'type':Sequelize[_0x0baf('0x1')]},'language':{'type':Sequelize[_0x0baf('0x1')],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x0baf('0x1')],'allowNull':!![]},'disallow':{'type':Sequelize[_0x0baf('0x1')],'defaultValue':_0x0baf('0x1c')},'allow':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x0baf('0x1d'),'set':function(_0x482522){this[_0x0baf('0xe')]('allow',_0x482522?_0x482522['join'](';'):_0x0baf('0x1d'));},'get':function(){return this['getDataValue']('allow')?this[_0x0baf('0x11')](_0x0baf('0x1e'))[_0x0baf('0x12')](';'):null;},'comment':_0x0baf('0x1f')},'autoframing':{'type':Sequelize[_0x0baf('0x3')]('yes','no')},'insecure':{'type':Sequelize[_0x0baf('0x1')],'defaultValue':_0x0baf('0x20'),'set':function(_0x1ca35a){this[_0x0baf('0xe')](_0x0baf('0x21'),_0x1ca35a?_0x1ca35a[_0x0baf('0x10')](','):null);},'get':function(){return this[_0x0baf('0x11')]('insecure')?this[_0x0baf('0x11')](_0x0baf('0x21'))[_0x0baf('0x12')](','):null;},'comment':_0x0baf('0x22')},'trustrpid':{'type':Sequelize['ENUM'](_0x0baf('0x18'),'no'),'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0x0baf('0x3')]('yes','no'),'defaultValue':'no'},'progressinband':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no',_0x0baf('0x23'))},'promiscredir':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'useclientcode':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'accountcode':{'type':Sequelize['INTEGER'](0xb)},'setvar':{'type':Sequelize[_0x0baf('0x1')]},'callerid':{'type':Sequelize[_0x0baf('0x1')],'defaultValue':_0x0baf('0x24')},'amaflags':{'type':Sequelize[_0x0baf('0x1')]},'callcounter':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no'),'defaultValue':_0x0baf('0x18')},'busylevel':{'type':Sequelize[_0x0baf('0x25')](0xb)},'allowoverlap':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'allowsubscribe':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'allowtransfer':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'ignoresdpversion':{'type':Sequelize['ENUM'](_0x0baf('0x18'),'no')},'subscribecontext':{'type':Sequelize['STRING']},'template':{'type':Sequelize[_0x0baf('0x1')]},'videosupport':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no',_0x0baf('0x26')),'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize['INTEGER'](0xb)},'rfc2833compensate':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'mailbox':{'type':Sequelize['STRING']},'session_timers':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x27'),_0x0baf('0x28'),_0x0baf('0x29'))},'session_expires':{'type':Sequelize[_0x0baf('0x25')](0xb)},'session_minse':{'type':Sequelize[_0x0baf('0x25')](0xb)},'session_refresher':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x2a'),'uas'),'defaultValue':_0x0baf('0x2b')},'t38pt_usertpsource':{'type':Sequelize[_0x0baf('0x1')]},'regexten':{'type':Sequelize['STRING']},'fromdomain':{'type':Sequelize[_0x0baf('0x1')]},'fromuser':{'type':Sequelize['STRING']},'port':{'type':Sequelize['INTEGER'](0x5)},'qualify':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no'),'defaultValue':'yes'},'keepalive':{'type':Sequelize['INTEGER'](0xb)},'defaultip':{'type':Sequelize[_0x0baf('0x1')]},'defaultuser':{'type':Sequelize[_0x0baf('0x1')]},'rtptimeout':{'type':Sequelize[_0x0baf('0x25')](0xb)},'rtpholdtimeout':{'type':Sequelize[_0x0baf('0x25')](0xb)},'rtpkeepalive':{'type':Sequelize[_0x0baf('0x25')](0xb)},'sendrpid':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no',_0x0baf('0x2c')),'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0x0baf('0x1')]},'callbackextension':{'type':Sequelize[_0x0baf('0x1')]},'timert1':{'type':Sequelize[_0x0baf('0x25')](0xb)},'timerb':{'type':Sequelize[_0x0baf('0x25')](0xb)},'qualifyfreq':{'type':Sequelize[_0x0baf('0x25')](0xb)},'contactpermit':{'type':Sequelize[_0x0baf('0x1')]},'contactdeny':{'type':Sequelize['STRING']},'contactacl':{'type':Sequelize[_0x0baf('0x1')]},'unsolicited_mailbox':{'type':Sequelize[_0x0baf('0x1')]},'use_q850_reason':{'type':Sequelize['STRING']},'maxforwards':{'type':Sequelize[_0x0baf('0x25')](0xb)},'encryption':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no'),'defaultValue':'no'},'avpf':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'force_avp':{'type':Sequelize[_0x0baf('0x3')]('yes','no')},'icesupport':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'dtlsenable':{'type':Sequelize['ENUM'](_0x0baf('0x18'),'no')},'dtlsverify':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no',_0x0baf('0x2d'),'certificate')},'dtlsrekey':{'type':Sequelize[_0x0baf('0x25')](0xb)},'dtlscertfile':{'type':Sequelize[_0x0baf('0x1')]},'dtlsprivatekey':{'type':Sequelize[_0x0baf('0x1')]},'dtlscipher':{'type':Sequelize[_0x0baf('0x1')]},'dtlscafile':{'type':Sequelize[_0x0baf('0x1')]},'dtlscapath':{'type':Sequelize[_0x0baf('0x1')]},'dtlssetup':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x2e'),_0x0baf('0x2f'),_0x0baf('0x30')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize['STRING']},'usereqphone':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no'),'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x0baf('0x1')]},'recordofffeature':{'type':Sequelize[_0x0baf('0x1')]},'call_limit':{'type':Sequelize[_0x0baf('0x25')](0xb),'defaultValue':0x3e8},'registertrying':{'type':Sequelize['ENUM'](_0x0baf('0x18'),'no')},'subscribemwi':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no')},'vmexten':{'type':Sequelize[_0x0baf('0x1')]},'mohinterpret':{'type':Sequelize[_0x0baf('0x1')]},'mohsuggest':{'type':Sequelize['STRING']},'parkinglot':{'type':Sequelize[_0x0baf('0x1')]},'description':{'type':Sequelize[_0x0baf('0x1')]},'host':{'type':Sequelize[_0x0baf('0x1')],'defaultValue':_0x0baf('0x31')},'canreinvite':{'type':Sequelize[_0x0baf('0x3')](_0x0baf('0x18'),'no',_0x0baf('0x32'),'update',_0x0baf('0x33')),'defaultValue':'no'},'registry':{'type':Sequelize[_0x0baf('0x1')]},'otherFields':{'type':Sequelize[_0x0baf('0x1')]},'active':{'type':Sequelize['BOOLEAN'],'allowNull':![],'defaultValue':!![]},'t38pt_udptl':{'type':Sequelize[_0x0baf('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(_0x517be1,_0xce2bf3){var _0x4b628c=function(_0x10309e){while(--_0x10309e){_0x517be1['push'](_0x517be1['shift']());}};_0x4b628c(++_0xce2bf3);}(_0x757a,0xde));var _0xa757=function(_0x2be2f0,_0x1b6c12){_0x2be2f0=_0x2be2f0-0x0;var _0x66b179=_0x757a[_0x2be2f0];return _0x66b179;};'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 b20b3b5..48d84ef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x372a=['model','keys','query','filters','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','map','type','key','VIRTUAL','options','includeAll','findAll','show','params','intersection','clone','include','omit','createdAt','updatedAt','body','user','role','UserProfileSection','find','userProfileId','autoAssociation','UserProfileResource','create','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','readFileSync','join','root','utf8','server/files/templates/registry.ejs','render','writeFileSync','/etc/asterisk/sip_xcally_trunks.conf','registry','Reload','chan_sip.so','Unable\x20to\x20retrieve\x20the\x20current\x20user','Trunks','server/files/templates/trunk.ejs','/etc/asterisk/sip_xcally_registers.conf','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','../../components/parsers/qs','api','../../config/utils','../../config/environment','jayson/promise','client','http','request','then','info','Trunk,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','sendStatus','status','end','json','count','offset','limit','set','Content-Range','save','update','destroy','get','stack','name','send','index','Trunk','rawAttributes'];(function(_0x123911,_0x22f898){var _0x32a27d=function(_0x5c3ce2){while(--_0x5c3ce2){_0x123911['push'](_0x123911['shift']());}};_0x32a27d(++_0x22f898);}(_0x372a,0x177));var _0xa372=function(_0x55768b,_0x384908){_0x55768b=_0x55768b-0x0;var _0x184b01=_0x372a[_0x55768b];return _0x184b01;};'use strict';var pdf=require(_0xa372('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xa372('0x1'));var zipdir=require(_0xa372('0x2'));var jsonpatch=require(_0xa372('0x3'));var rp=require(_0xa372('0x4'));var moment=require('moment');var BPromise=require(_0xa372('0x5'));var Mustache=require(_0xa372('0x6'));var util=require(_0xa372('0x7'));var path=require('path');var sox=require('sox');var csv=require(_0xa372('0x8'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xa372('0x9'));var squel=require(_0xa372('0xa'));var crypto=require(_0xa372('0xb'));var jsforce=require(_0xa372('0xc'));var deskjs=require(_0xa372('0xd'));var toCsv=require(_0xa372('0x8'));var querystring=require(_0xa372('0xe'));var Papa=require(_0xa372('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0xa372('0x10'));var Redis=require('ioredis');var qs=require(_0xa372('0x11'));var logger=require('../../config/logger')(_0xa372('0x12'));var utils=require(_0xa372('0x13'));var config=require(_0xa372('0x14'));var db=require('../../mysqldb')['db'];var jayson=require(_0xa372('0x15'));var client=jayson[_0xa372('0x16')][_0xa372('0x17')]({'port':0x232a});function respondWithRpcPromise(_0x2aca1f,_0x2c6847,_0x4f9aea,_0x277d97){return new BPromise(function(_0x243b8f,_0x221b84){var _0x128d74=_0x277d97||client;return _0x128d74[_0xa372('0x18')](_0x2aca1f,_0x4f9aea)[_0xa372('0x19')](function(_0x17de60){logger[_0xa372('0x1a')](_0xa372('0x1b'),_0x2c6847,_0xa372('0x1c'));logger['debug']('Trunk,\x20%s,\x20%s,\x20%s',_0x2c6847,'request\x20sent',JSON['stringify'](_0x17de60));if(_0x17de60[_0xa372('0x1d')]){if(_0x17de60[_0xa372('0x1d')][_0xa372('0x1e')]===0x1f4){logger[_0xa372('0x1d')](_0xa372('0x1b'),_0x2c6847,_0x17de60[_0xa372('0x1d')][_0xa372('0x1f')]);return _0x221b84(_0x17de60[_0xa372('0x1d')][_0xa372('0x1f')]);}logger[_0xa372('0x1d')](_0xa372('0x1b'),_0x2c6847,_0x17de60[_0xa372('0x1d')][_0xa372('0x1f')]);return _0x243b8f(_0x17de60[_0xa372('0x1d')][_0xa372('0x1f')]);}else{logger[_0xa372('0x1a')](_0xa372('0x1b'),_0x2c6847,_0xa372('0x1c'));_0x243b8f(_0x17de60[_0xa372('0x20')]['message']);}})[_0xa372('0x21')](function(_0x24bcda){logger[_0xa372('0x1d')](_0xa372('0x1b'),_0x2c6847,_0x24bcda);_0x221b84(_0x24bcda);});});}function respondWithStatusCode(_0x91979d,_0x462ef6){_0x462ef6=_0x462ef6||0xcc;return function(_0x55624c){if(_0x55624c){return _0x91979d[_0xa372('0x22')](_0x462ef6);}return _0x91979d[_0xa372('0x23')](_0x462ef6)[_0xa372('0x24')]();};}function respondWithResult(_0x7f1335,_0x2d08fe){_0x2d08fe=_0x2d08fe||0xc8;return function(_0x328455){if(_0x328455){return _0x7f1335['status'](_0x2d08fe)[_0xa372('0x25')](_0x328455);}};}function respondWithFilteredResult(_0x487b7d,_0x7d1615){return function(_0x58e96d){if(_0x58e96d){var _0x34bd90=_0x58e96d[_0xa372('0x26')],_0x3455e5=_0x7d1615['offset'],_0x217d07=_0x7d1615[_0xa372('0x27')]+_0x7d1615[_0xa372('0x28')],_0x1e141e;if(_0x217d07>=_0x34bd90){_0x217d07=_0x34bd90;_0x1e141e=0xc8;}else{_0x1e141e=0xce;}_0x487b7d[_0xa372('0x23')](_0x1e141e);return _0x487b7d[_0xa372('0x29')](_0xa372('0x2a'),_0x3455e5+'-'+_0x217d07+'/'+_0x34bd90)[_0xa372('0x25')](_0x58e96d);}return null;};}function patchUpdates(_0xa88f87){return function(_0x406cdc){try{jsonpatch['apply'](_0x406cdc,_0xa88f87,!![]);}catch(_0x1aff97){return BPromise['reject'](_0x1aff97);}return _0x406cdc[_0xa372('0x2b')]();};}function saveUpdates(_0x1803eb,_0x2e2f21){return function(_0x55444a){if(_0x55444a){return _0x55444a[_0xa372('0x2c')](_0x1803eb)[_0xa372('0x19')](function(_0x5b0183){return _0x5b0183;});}return null;};}function removeEntity(_0x3521d8,_0x155e21){return function(_0x161f36){if(_0x161f36){return _0x161f36[_0xa372('0x2d')]()[_0xa372('0x19')](function(){var _0x5600b1=_0x161f36[_0xa372('0x2e')]({'plain':!![]});var _0x358340='Trunks';return db['UserProfileResource']['destroy']({'where':{'type':_0x358340,'resourceId':_0x5600b1['id']}})[_0xa372('0x19')](function(){return _0x161f36;});})[_0xa372('0x19')](function(){_0x3521d8[_0xa372('0x23')](0xcc)[_0xa372('0x24')]();});}};}function handleEntityNotFound(_0x45b6f2,_0x21c999){return function(_0x5d94bf){if(!_0x5d94bf){_0x45b6f2[_0xa372('0x22')](0x194);}return _0x5d94bf;};}function handleError(_0x247808,_0xe3a907){_0xe3a907=_0xe3a907||0x1f4;return function(_0x17d5ec){logger[_0xa372('0x1d')](_0x17d5ec[_0xa372('0x2f')]);if(_0x17d5ec[_0xa372('0x30')]){delete _0x17d5ec[_0xa372('0x30')];}_0x247808[_0xa372('0x23')](_0xe3a907)[_0xa372('0x31')](_0x17d5ec);};}exports[_0xa372('0x32')]=function(_0x3af514,_0x146722){var _0x24093a={},_0x1c82e6={},_0x28103e={'count':0x0,'rows':[]};var _0x398a0b=db[_0xa372('0x33')][_0xa372('0x34')];_0x1c82e6[_0xa372('0x35')]=_[_0xa372('0x36')](_0x398a0b);_0x1c82e6[_0xa372('0x37')]=_[_0xa372('0x36')](_0x3af514['query']);_0x1c82e6[_0xa372('0x38')]=_['intersection'](_0x1c82e6[_0xa372('0x35')],_0x1c82e6[_0xa372('0x37')]);_0x24093a['attributes']=_['intersection'](_0x1c82e6[_0xa372('0x35')],qs[_0xa372('0x39')](_0x3af514['query'][_0xa372('0x39')]));_0x24093a['attributes']=_0x24093a[_0xa372('0x3a')][_0xa372('0x3b')]?_0x24093a[_0xa372('0x3a')]:_0x1c82e6[_0xa372('0x35')];if(!_0x3af514[_0xa372('0x37')][_0xa372('0x3c')](_0xa372('0x3d'))){_0x24093a['limit']=qs['limit'](_0x3af514['query'][_0xa372('0x28')]);_0x24093a[_0xa372('0x27')]=qs[_0xa372('0x27')](_0x3af514[_0xa372('0x37')][_0xa372('0x27')]);}_0x24093a[_0xa372('0x3e')]=qs['sort'](_0x3af514['query'][_0xa372('0x3f')]);_0x24093a[_0xa372('0x40')]=qs[_0xa372('0x38')](_[_0xa372('0x41')](_0x3af514['query'],_0x1c82e6[_0xa372('0x38')]));if(_0x3af514[_0xa372('0x37')]['filter']){_0x24093a[_0xa372('0x40')]=_[_0xa372('0x42')](_0x24093a['where'],{'$or':_[_0xa372('0x43')](_0x398a0b,function(_0x2ba574){if(_0x2ba574[_0xa372('0x44')][_0xa372('0x45')]!==_0xa372('0x46')){var _0x28d956={};_0x28d956[_0x2ba574['field']]={'$like':'%'+_0x3af514[_0xa372('0x37')]['filter']+'%'};return _0x28d956;}})});}_0x24093a=_['merge']({},_0x24093a,_0x3af514[_0xa372('0x47')]);var _0x1143fb={'where':_0x24093a[_0xa372('0x40')]};return db[_0xa372('0x33')][_0xa372('0x26')](_0x1143fb)[_0xa372('0x19')](function(_0x18b3bb){_0x28103e[_0xa372('0x26')]=_0x18b3bb;if(_0x3af514[_0xa372('0x37')][_0xa372('0x48')]){_0x24093a['include']=[{'all':!![]}];}return db[_0xa372('0x33')][_0xa372('0x49')](_0x24093a);})[_0xa372('0x19')](function(_0x4bec11){_0x28103e['rows']=_0x4bec11;return _0x28103e;})[_0xa372('0x19')](respondWithFilteredResult(_0x146722,_0x24093a))[_0xa372('0x21')](handleError(_0x146722,null));};exports[_0xa372('0x4a')]=function(_0x346bc9,_0x27df0c){var _0x18d790={'raw':![],'where':{'id':_0x346bc9[_0xa372('0x4b')]['id']}},_0x3c0e2c={};_0x3c0e2c['model']=_[_0xa372('0x36')](db[_0xa372('0x33')]['rawAttributes']);_0x3c0e2c[_0xa372('0x37')]=_[_0xa372('0x36')](_0x346bc9[_0xa372('0x37')]);_0x3c0e2c[_0xa372('0x38')]=_[_0xa372('0x4c')](_0x3c0e2c[_0xa372('0x35')],_0x3c0e2c[_0xa372('0x37')]);_0x18d790['attributes']=_['intersection'](_0x3c0e2c[_0xa372('0x35')],qs[_0xa372('0x39')](_0x346bc9[_0xa372('0x37')]['fields']));_0x18d790['attributes']=_0x18d790[_0xa372('0x3a')][_0xa372('0x3b')]?_0x18d790[_0xa372('0x3a')]:_0x3c0e2c[_0xa372('0x35')];if(_0x346bc9['query']['includeAll']){_0x18d790['include']=[{'all':!![]}];}_0x18d790=_[_0xa372('0x42')]({},_0x18d790,_0x346bc9[_0xa372('0x47')]);return db[_0xa372('0x33')]['find'](_0x18d790)[_0xa372('0x19')](handleEntityNotFound(_0x27df0c,null))[_0xa372('0x19')](respondWithResult(_0x27df0c,null))['catch'](handleError(_0x27df0c,null));};exports[_0xa372('0x4d')]=function(_0x36f5f6,_0x44a27d){var _0x12ac30={'raw':![],'where':{'id':_0x36f5f6[_0xa372('0x4b')]['id']}},_0x29e9d9={};_0x29e9d9['model']=_[_0xa372('0x36')](db[_0xa372('0x33')][_0xa372('0x34')]);_0x12ac30['attributes']=_['intersection'](_0x29e9d9[_0xa372('0x35')],qs[_0xa372('0x39')](_0x36f5f6[_0xa372('0x37')][_0xa372('0x39')]));_0x12ac30[_0xa372('0x3a')]=_0x12ac30[_0xa372('0x3a')][_0xa372('0x3b')]?_0x12ac30[_0xa372('0x3a')]:_0x29e9d9[_0xa372('0x35')];if(_0x36f5f6[_0xa372('0x37')][_0xa372('0x48')]){_0x12ac30[_0xa372('0x4e')]=[{'all':!![]}];}_0x12ac30=_[_0xa372('0x42')]({},_0x12ac30,_0x36f5f6[_0xa372('0x47')]);return db['Trunk']['find'](_0x12ac30)[_0xa372('0x19')](handleEntityNotFound(_0x44a27d,null))[_0xa372('0x19')](function(_0x3be7b8){if(_0x3be7b8){var _0xafb03b=_0x3be7b8[_0xa372('0x2e')]({'plain':!![]});_0xafb03b=qs[_0xa372('0x4f')](_0xafb03b,['id',_0xa372('0x50'),_0xa372('0x51')]);_0x36f5f6[_0xa372('0x52')]=_[_0xa372('0x4f')](_0x36f5f6[_0xa372('0x52')],['id',_0xa372('0x50'),'updatedAt']);return db[_0xa372('0x33')]['create'](_[_0xa372('0x42')](_0xafb03b,_0x36f5f6[_0xa372('0x52')]),{'include':_0x36f5f6[_0xa372('0x37')][_0xa372('0x48')]?[{'all':!![]}]:undefined})[_0xa372('0x19')](function(_0x13d214){var _0x391efd=_0x36f5f6[_0xa372('0x53')][_0xa372('0x2e')]({'plain':!![]});if(!_0x391efd)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x391efd[_0xa372('0x54')]==='user'){var _0x4545c1=_0x13d214[_0xa372('0x2e')]({'plain':!![]});var _0x42a5bf='Trunks';return db[_0xa372('0x55')][_0xa372('0x56')]({'where':{'name':_0x42a5bf,'userProfileId':_0x391efd[_0xa372('0x57')]},'raw':!![]})[_0xa372('0x19')](function(_0x507ba6){if(_0x507ba6&&_0x507ba6[_0xa372('0x58')]===0x0){return db[_0xa372('0x59')][_0xa372('0x5a')]({'name':_0x4545c1['name'],'resourceId':_0x4545c1['id'],'type':_0x507ba6[_0xa372('0x30')],'sectionId':_0x507ba6['id']},{})['then'](function(){return _0x13d214;});}else{return _0x13d214;}})['catch'](function(_0x2cad8a){logger['error'](_0xa372('0x5b'),_0x2cad8a);throw _0x2cad8a;});}return _0x13d214;});}})[_0xa372('0x19')](respondWithResult(_0x44a27d,0xc9))[_0xa372('0x21')](handleError(_0x44a27d,null));};exports[_0xa372('0x5a')]=function(_0x44e6df,_0x4eb218,_0x1b2fca){var _0x3e7f93;return db[_0xa372('0x33')][_0xa372('0x5a')](_0x44e6df[_0xa372('0x52')],{'raw':!![]})[_0xa372('0x19')](function(_0x20b5df){_0x3e7f93=_0x20b5df;return db[_0xa372('0x33')][_0xa372('0x49')]({'raw':!![]});})[_0xa372('0x19')](function(_0x504785){var _0x2a0822=fs[_0xa372('0x5c')](path[_0xa372('0x5d')](config[_0xa372('0x5e')],'server/files/templates/trunk.ejs'),_0xa372('0x5f'));var _0x1b1815=fs['readFileSync'](path['join'](config[_0xa372('0x5e')],_0xa372('0x60')),_0xa372('0x5f'));var _0x17f639=ejs[_0xa372('0x61')](_0x2a0822,{'trunks':_0x504785||[]});fs[_0xa372('0x62')](_0xa372('0x63'),_0x17f639);if(_0x3e7f93[_0xa372('0x64')]){var _0x515c15=ejs[_0xa372('0x61')](_0x1b1815,{'trunks':_0x504785||[]});fs['writeFileSync']('/etc/asterisk/sip_xcally_registers.conf',_0x515c15);}})['then'](function(){return respondWithRpcPromise(_0xa372('0x65'),_0xa372('0x5a'),{'module':_0xa372('0x66')});})['then'](function(){var _0x10551d=_0x44e6df['user'][_0xa372('0x2e')]({'plain':!![]});if(!_0x10551d)throw new Error(_0xa372('0x67'));if(_0x10551d[_0xa372('0x54')]===_0xa372('0x53')){var _0x24a287=_0x3e7f93[_0xa372('0x2e')]({'plain':!![]});return db[_0xa372('0x55')][_0xa372('0x56')]({'where':{'name':_0xa372('0x68'),'userProfileId':_0x10551d['userProfileId']},'raw':!![]})[_0xa372('0x19')](function(_0x2f75bb){if(_0x2f75bb&&_0x2f75bb[_0xa372('0x58')]===0x0){return db[_0xa372('0x59')]['create']({'name':_0x24a287[_0xa372('0x30')],'resourceId':_0x24a287['id'],'type':_0x2f75bb[_0xa372('0x30')],'sectionId':_0x2f75bb['id']},{})[_0xa372('0x19')](function(){return _0x3e7f93;});}else{return _0x3e7f93;}})['catch'](function(_0x1ee24e){logger[_0xa372('0x1d')](_0xa372('0x5b'),_0x1ee24e);throw _0x1ee24e;});}return _0x3e7f93;})[_0xa372('0x19')](respondWithResult(_0x4eb218,0xc9))[_0xa372('0x21')](handleError(_0x4eb218,null));};exports['update']=function(_0x33ba29,_0x42ef70,_0x494b1c){var _0x2069ea;return db[_0xa372('0x33')][_0xa372('0x56')]({'where':{'id':_0x33ba29[_0xa372('0x4b')]['id']}})[_0xa372('0x19')](handleEntityNotFound(_0x42ef70,null))['then'](saveUpdates(_0x33ba29['body'],null))['then'](function(_0xc0c641){if(_0xc0c641){_0x2069ea=_0xc0c641;return db[_0xa372('0x33')][_0xa372('0x49')]({'raw':!![]});}})['then'](function(_0x2dd195){if(_0x2dd195){var _0x248445=fs['readFileSync'](path[_0xa372('0x5d')](config['root'],'server/files/templates/trunk.ejs'),'utf8');var _0x46070f=fs[_0xa372('0x5c')](path['join'](config[_0xa372('0x5e')],'server/files/templates/registry.ejs'),_0xa372('0x5f'));var _0x4641cd=ejs[_0xa372('0x61')](_0x248445,{'trunks':_0x2dd195||[]});fs[_0xa372('0x62')](_0xa372('0x63'),_0x4641cd);var _0x3ca6aa=ejs[_0xa372('0x61')](_0x46070f,{'trunks':_0x2dd195||[]});fs[_0xa372('0x62')]('/etc/asterisk/sip_xcally_registers.conf',_0x3ca6aa);return respondWithRpcPromise(_0xa372('0x65'),'update',{'module':'chan_sip.so'});}return null;})[_0xa372('0x19')](function(_0x5a5417){if(_0x5a5417){return _0x2069ea;}})[_0xa372('0x19')](respondWithResult(_0x42ef70,null))[_0xa372('0x21')](handleError(_0x42ef70,null));};exports[_0xa372('0x2d')]=function(_0x3f3a05,_0x1544fc,_0x225226){var _0xf32173;return db[_0xa372('0x33')][_0xa372('0x56')]({'where':{'id':_0x3f3a05[_0xa372('0x4b')]['id']}})[_0xa372('0x19')](handleEntityNotFound(_0x1544fc,null))['then'](removeEntity(_0x1544fc,null))[_0xa372('0x19')](function(){return db[_0xa372('0x33')][_0xa372('0x49')]({'raw':!![]});})[_0xa372('0x19')](function(_0xe93cbd){var _0x11b492=fs[_0xa372('0x5c')](path[_0xa372('0x5d')](config[_0xa372('0x5e')],_0xa372('0x69')),'utf8');var _0x2e8280=fs[_0xa372('0x5c')](path[_0xa372('0x5d')](config[_0xa372('0x5e')],_0xa372('0x60')),'utf8');var _0x266dbf=ejs[_0xa372('0x61')](_0x11b492,{'trunks':_0xe93cbd});var _0x50ede9=ejs[_0xa372('0x61')](_0x2e8280,{'trunks':_0xe93cbd});fs[_0xa372('0x62')]('/etc/asterisk/sip_xcally_trunks.conf',_0x266dbf);fs['writeFileSync'](_0xa372('0x6a'),_0x50ede9);return respondWithRpcPromise(_0xa372('0x65'),_0xa372('0x2d'),{'module':_0xa372('0x66')});})[_0xa372('0x21')](handleError(_0x1544fc,null));};
\ No newline at end of file
+var _0xf5e1=['Trunk,\x20%s,\x20%s','message','catch','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','get','Trunks','UserProfileResource','sendStatus','stack','name','send','index','Trunk','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','count','includeAll','include','show','params','clone','find','omit','body','createdAt','updatedAt','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','findAll','join','server/files/templates/trunk.ejs','root','server/files/templates/registry.ejs','writeFileSync','/etc/asterisk/sip_xcally_trunks.conf','registry','render','/etc/asterisk/sip_xcally_registers.conf','UserProfileSection','userProfileId','readFileSync','utf8','Reload','chan_sip.so','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/environment','client','http','request','info','request\x20sent','debug','stringify','error','code'];(function(_0x48c4ef,_0x319d44){var _0x435715=function(_0x925d50){while(--_0x925d50){_0x48c4ef['push'](_0x48c4ef['shift']());}};_0x435715(++_0x319d44);}(_0xf5e1,0x12b));var _0x1f5e=function(_0x356dcc,_0xb32b97){_0x356dcc=_0x356dcc-0x0;var _0x2aa02c=_0xf5e1[_0x356dcc];return _0x2aa02c;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x1f5e('0x0'));var rimraf=require(_0x1f5e('0x1'));var zipdir=require('zip-dir');var jsonpatch=require(_0x1f5e('0x2'));var rp=require(_0x1f5e('0x3'));var moment=require(_0x1f5e('0x4'));var BPromise=require(_0x1f5e('0x5'));var Mustache=require('mustache');var util=require('util');var path=require(_0x1f5e('0x6'));var sox=require(_0x1f5e('0x7'));var csv=require(_0x1f5e('0x8'));var ejs=require(_0x1f5e('0x9'));var fs=require('fs');var _=require(_0x1f5e('0xa'));var squel=require(_0x1f5e('0xb'));var crypto=require('crypto');var jsforce=require(_0x1f5e('0xc'));var deskjs=require(_0x1f5e('0xd'));var toCsv=require('to-csv');var querystring=require(_0x1f5e('0xe'));var Papa=require(_0x1f5e('0xf'));var authService=require(_0x1f5e('0x10'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x1f5e('0x11'));var qs=require(_0x1f5e('0x12'));var logger=require(_0x1f5e('0x13'))(_0x1f5e('0x14'));var utils=require('../../config/utils');var config=require(_0x1f5e('0x15'));var db=require('../../mysqldb')['db'];var jayson=require('jayson/promise');var client=jayson[_0x1f5e('0x16')][_0x1f5e('0x17')]({'port':0x232a});function respondWithRpcPromise(_0x4c60ad,_0x143523,_0x3224a2,_0x19633d){return new BPromise(function(_0xb7968e,_0x175fd4){var _0x61cbb8=_0x19633d||client;return _0x61cbb8[_0x1f5e('0x18')](_0x4c60ad,_0x3224a2)['then'](function(_0x5739c5){logger[_0x1f5e('0x19')]('Trunk,\x20%s,\x20%s',_0x143523,_0x1f5e('0x1a'));logger[_0x1f5e('0x1b')]('Trunk,\x20%s,\x20%s,\x20%s',_0x143523,_0x1f5e('0x1a'),JSON[_0x1f5e('0x1c')](_0x5739c5));if(_0x5739c5[_0x1f5e('0x1d')]){if(_0x5739c5[_0x1f5e('0x1d')][_0x1f5e('0x1e')]===0x1f4){logger[_0x1f5e('0x1d')](_0x1f5e('0x1f'),_0x143523,_0x5739c5[_0x1f5e('0x1d')][_0x1f5e('0x20')]);return _0x175fd4(_0x5739c5[_0x1f5e('0x1d')]['message']);}logger['error'](_0x1f5e('0x1f'),_0x143523,_0x5739c5['error'][_0x1f5e('0x20')]);return _0xb7968e(_0x5739c5[_0x1f5e('0x1d')]['message']);}else{logger[_0x1f5e('0x19')](_0x1f5e('0x1f'),_0x143523,_0x1f5e('0x1a'));_0xb7968e(_0x5739c5['result'][_0x1f5e('0x20')]);}})[_0x1f5e('0x21')](function(_0x287df6){logger[_0x1f5e('0x1d')](_0x1f5e('0x1f'),_0x143523,_0x287df6);_0x175fd4(_0x287df6);});});}function respondWithStatusCode(_0x14be9d,_0x32c85a){_0x32c85a=_0x32c85a||0xcc;return function(_0x57d56b){if(_0x57d56b){return _0x14be9d['sendStatus'](_0x32c85a);}return _0x14be9d[_0x1f5e('0x22')](_0x32c85a)[_0x1f5e('0x23')]();};}function respondWithResult(_0x5e21e9,_0x416322){_0x416322=_0x416322||0xc8;return function(_0x58d2a8){if(_0x58d2a8){return _0x5e21e9[_0x1f5e('0x22')](_0x416322)[_0x1f5e('0x24')](_0x58d2a8);}};}function respondWithFilteredResult(_0x3b4f91,_0x1004ca){return function(_0x23ef84){if(_0x23ef84){var _0x2c5b9d=_0x23ef84['count'],_0x5de55f=_0x1004ca[_0x1f5e('0x25')],_0x43c7c2=_0x1004ca['offset']+_0x1004ca[_0x1f5e('0x26')],_0x328559;if(_0x43c7c2>=_0x2c5b9d){_0x43c7c2=_0x2c5b9d;_0x328559=0xc8;}else{_0x328559=0xce;}_0x3b4f91[_0x1f5e('0x22')](_0x328559);return _0x3b4f91[_0x1f5e('0x27')](_0x1f5e('0x28'),_0x5de55f+'-'+_0x43c7c2+'/'+_0x2c5b9d)[_0x1f5e('0x24')](_0x23ef84);}return null;};}function patchUpdates(_0x58efb8){return function(_0x582370){try{jsonpatch[_0x1f5e('0x29')](_0x582370,_0x58efb8,!![]);}catch(_0x2c59ca){return BPromise[_0x1f5e('0x2a')](_0x2c59ca);}return _0x582370[_0x1f5e('0x2b')]();};}function saveUpdates(_0x2d910,_0x197fa2){return function(_0x93fc1f){if(_0x93fc1f){return _0x93fc1f[_0x1f5e('0x2c')](_0x2d910)[_0x1f5e('0x2d')](function(_0x5c391e){return _0x5c391e;});}return null;};}function removeEntity(_0x56cbbf,_0x253acb){return function(_0x4680f8){if(_0x4680f8){return _0x4680f8[_0x1f5e('0x2e')]()[_0x1f5e('0x2d')](function(){var _0x525710=_0x4680f8[_0x1f5e('0x2f')]({'plain':!![]});var _0x508d25=_0x1f5e('0x30');return db[_0x1f5e('0x31')][_0x1f5e('0x2e')]({'where':{'type':_0x508d25,'resourceId':_0x525710['id']}})[_0x1f5e('0x2d')](function(){return _0x4680f8;});})[_0x1f5e('0x2d')](function(){_0x56cbbf[_0x1f5e('0x22')](0xcc)[_0x1f5e('0x23')]();});}};}function handleEntityNotFound(_0x3af012,_0x13ce5a){return function(_0x522a12){if(!_0x522a12){_0x3af012[_0x1f5e('0x32')](0x194);}return _0x522a12;};}function handleError(_0x434ff7,_0x19e80d){_0x19e80d=_0x19e80d||0x1f4;return function(_0x3958a7){logger['error'](_0x3958a7[_0x1f5e('0x33')]);if(_0x3958a7[_0x1f5e('0x34')]){delete _0x3958a7[_0x1f5e('0x34')];}_0x434ff7[_0x1f5e('0x22')](_0x19e80d)[_0x1f5e('0x35')](_0x3958a7);};}exports[_0x1f5e('0x36')]=function(_0x32bc32,_0x10686a){var _0x5e3ee8={},_0x237fbb={},_0x2cd256={'count':0x0,'rows':[]};var _0x27c7cf=db[_0x1f5e('0x37')]['rawAttributes'];_0x237fbb[_0x1f5e('0x38')]=_[_0x1f5e('0x39')](_0x27c7cf);_0x237fbb[_0x1f5e('0x3a')]=_['keys'](_0x32bc32['query']);_0x237fbb[_0x1f5e('0x3b')]=_[_0x1f5e('0x3c')](_0x237fbb[_0x1f5e('0x38')],_0x237fbb[_0x1f5e('0x3a')]);_0x5e3ee8[_0x1f5e('0x3d')]=_[_0x1f5e('0x3c')](_0x237fbb['model'],qs['fields'](_0x32bc32[_0x1f5e('0x3a')][_0x1f5e('0x3e')]));_0x5e3ee8['attributes']=_0x5e3ee8[_0x1f5e('0x3d')][_0x1f5e('0x3f')]?_0x5e3ee8['attributes']:_0x237fbb[_0x1f5e('0x38')];if(!_0x32bc32[_0x1f5e('0x3a')]['hasOwnProperty'](_0x1f5e('0x40'))){_0x5e3ee8[_0x1f5e('0x26')]=qs['limit'](_0x32bc32[_0x1f5e('0x3a')][_0x1f5e('0x26')]);_0x5e3ee8[_0x1f5e('0x25')]=qs[_0x1f5e('0x25')](_0x32bc32[_0x1f5e('0x3a')]['offset']);}_0x5e3ee8[_0x1f5e('0x41')]=qs[_0x1f5e('0x42')](_0x32bc32[_0x1f5e('0x3a')]['sort']);_0x5e3ee8[_0x1f5e('0x43')]=qs[_0x1f5e('0x3b')](_[_0x1f5e('0x44')](_0x32bc32[_0x1f5e('0x3a')],_0x237fbb[_0x1f5e('0x3b')]));if(_0x32bc32[_0x1f5e('0x3a')][_0x1f5e('0x45')]){_0x5e3ee8[_0x1f5e('0x43')]=_['merge'](_0x5e3ee8[_0x1f5e('0x43')],{'$or':_[_0x1f5e('0x46')](_0x27c7cf,function(_0x457e32){if(_0x457e32[_0x1f5e('0x47')][_0x1f5e('0x48')]!==_0x1f5e('0x49')){var _0x49619a={};_0x49619a[_0x457e32[_0x1f5e('0x4a')]]={'$like':'%'+_0x32bc32[_0x1f5e('0x3a')][_0x1f5e('0x45')]+'%'};return _0x49619a;}})});}_0x5e3ee8=_[_0x1f5e('0x4b')]({},_0x5e3ee8,_0x32bc32[_0x1f5e('0x4c')]);var _0x54746c={'where':_0x5e3ee8[_0x1f5e('0x43')]};return db[_0x1f5e('0x37')][_0x1f5e('0x4d')](_0x54746c)[_0x1f5e('0x2d')](function(_0x3cb9b1){_0x2cd256[_0x1f5e('0x4d')]=_0x3cb9b1;if(_0x32bc32[_0x1f5e('0x3a')][_0x1f5e('0x4e')]){_0x5e3ee8[_0x1f5e('0x4f')]=[{'all':!![]}];}return db[_0x1f5e('0x37')]['findAll'](_0x5e3ee8);})[_0x1f5e('0x2d')](function(_0x24b8f2){_0x2cd256['rows']=_0x24b8f2;return _0x2cd256;})['then'](respondWithFilteredResult(_0x10686a,_0x5e3ee8))[_0x1f5e('0x21')](handleError(_0x10686a,null));};exports[_0x1f5e('0x50')]=function(_0x184f4f,_0x1feba4){var _0x37e328={'raw':![],'where':{'id':_0x184f4f[_0x1f5e('0x51')]['id']}},_0x11b4f4={};_0x11b4f4[_0x1f5e('0x38')]=_['keys'](db['Trunk']['rawAttributes']);_0x11b4f4[_0x1f5e('0x3a')]=_[_0x1f5e('0x39')](_0x184f4f[_0x1f5e('0x3a')]);_0x11b4f4['filters']=_[_0x1f5e('0x3c')](_0x11b4f4[_0x1f5e('0x38')],_0x11b4f4[_0x1f5e('0x3a')]);_0x37e328[_0x1f5e('0x3d')]=_[_0x1f5e('0x3c')](_0x11b4f4[_0x1f5e('0x38')],qs[_0x1f5e('0x3e')](_0x184f4f[_0x1f5e('0x3a')][_0x1f5e('0x3e')]));_0x37e328[_0x1f5e('0x3d')]=_0x37e328[_0x1f5e('0x3d')]['length']?_0x37e328[_0x1f5e('0x3d')]:_0x11b4f4[_0x1f5e('0x38')];if(_0x184f4f[_0x1f5e('0x3a')][_0x1f5e('0x4e')]){_0x37e328[_0x1f5e('0x4f')]=[{'all':!![]}];}_0x37e328=_[_0x1f5e('0x4b')]({},_0x37e328,_0x184f4f[_0x1f5e('0x4c')]);return db[_0x1f5e('0x37')]['find'](_0x37e328)[_0x1f5e('0x2d')](handleEntityNotFound(_0x1feba4,null))[_0x1f5e('0x2d')](respondWithResult(_0x1feba4,null))[_0x1f5e('0x21')](handleError(_0x1feba4,null));};exports[_0x1f5e('0x52')]=function(_0x4bf59e,_0xf3fc92){var _0x1f8a45={'raw':![],'where':{'id':_0x4bf59e[_0x1f5e('0x51')]['id']}},_0x3cf4cf={};_0x3cf4cf['model']=_[_0x1f5e('0x39')](db[_0x1f5e('0x37')]['rawAttributes']);_0x1f8a45[_0x1f5e('0x3d')]=_[_0x1f5e('0x3c')](_0x3cf4cf[_0x1f5e('0x38')],qs[_0x1f5e('0x3e')](_0x4bf59e['query']['fields']));_0x1f8a45['attributes']=_0x1f8a45[_0x1f5e('0x3d')][_0x1f5e('0x3f')]?_0x1f8a45[_0x1f5e('0x3d')]:_0x3cf4cf[_0x1f5e('0x38')];if(_0x4bf59e['query'][_0x1f5e('0x4e')]){_0x1f8a45[_0x1f5e('0x4f')]=[{'all':!![]}];}_0x1f8a45=_[_0x1f5e('0x4b')]({},_0x1f8a45,_0x4bf59e['options']);return db[_0x1f5e('0x37')][_0x1f5e('0x53')](_0x1f8a45)[_0x1f5e('0x2d')](handleEntityNotFound(_0xf3fc92,null))[_0x1f5e('0x2d')](function(_0x963259){if(_0x963259){var _0x229122=_0x963259['get']({'plain':!![]});_0x229122=qs[_0x1f5e('0x54')](_0x229122,['id','createdAt','updatedAt']);_0x4bf59e[_0x1f5e('0x55')]=_[_0x1f5e('0x54')](_0x4bf59e[_0x1f5e('0x55')],['id',_0x1f5e('0x56'),_0x1f5e('0x57')]);return db['Trunk'][_0x1f5e('0x58')](_[_0x1f5e('0x4b')](_0x229122,_0x4bf59e['body']),{'include':_0x4bf59e['query'][_0x1f5e('0x4e')]?[{'all':!![]}]:undefined})['then'](function(_0x6361a5){var _0x818b1d=_0x4bf59e[_0x1f5e('0x59')][_0x1f5e('0x2f')]({'plain':!![]});if(!_0x818b1d)throw new Error(_0x1f5e('0x5a'));if(_0x818b1d[_0x1f5e('0x5b')]===_0x1f5e('0x59')){var _0x39c0e4=_0x6361a5['get']({'plain':!![]});var _0x28daa9=_0x1f5e('0x30');return db['UserProfileSection'][_0x1f5e('0x53')]({'where':{'name':_0x28daa9,'userProfileId':_0x818b1d['userProfileId']},'raw':!![]})[_0x1f5e('0x2d')](function(_0x39e1b8){if(_0x39e1b8&&_0x39e1b8[_0x1f5e('0x5c')]===0x0){return db['UserProfileResource'][_0x1f5e('0x58')]({'name':_0x39c0e4[_0x1f5e('0x34')],'resourceId':_0x39c0e4['id'],'type':_0x39e1b8[_0x1f5e('0x34')],'sectionId':_0x39e1b8['id']},{})['then'](function(){return _0x6361a5;});}else{return _0x6361a5;}})[_0x1f5e('0x21')](function(_0x3c16c6){logger[_0x1f5e('0x1d')](_0x1f5e('0x5d'),_0x3c16c6);throw _0x3c16c6;});}return _0x6361a5;});}})[_0x1f5e('0x2d')](respondWithResult(_0xf3fc92,0xc9))[_0x1f5e('0x21')](handleError(_0xf3fc92,null));};exports['create']=function(_0x7c6a33,_0x152181,_0x3de8e3){var _0x3ff2a7;return db[_0x1f5e('0x37')][_0x1f5e('0x58')](_0x7c6a33['body'],{'raw':!![]})['then'](function(_0x5e89ad){_0x3ff2a7=_0x5e89ad;return db[_0x1f5e('0x37')][_0x1f5e('0x5e')]({'raw':!![]});})[_0x1f5e('0x2d')](function(_0x4bc082){var _0x118988=fs['readFileSync'](path[_0x1f5e('0x5f')](config['root'],_0x1f5e('0x60')),'utf8');var _0x5b13a0=fs['readFileSync'](path[_0x1f5e('0x5f')](config[_0x1f5e('0x61')],_0x1f5e('0x62')),'utf8');var _0x5462ff=ejs['render'](_0x118988,{'trunks':_0x4bc082||[]});fs[_0x1f5e('0x63')](_0x1f5e('0x64'),_0x5462ff);if(_0x3ff2a7[_0x1f5e('0x65')]){var _0x4dda3a=ejs[_0x1f5e('0x66')](_0x5b13a0,{'trunks':_0x4bc082||[]});fs[_0x1f5e('0x63')](_0x1f5e('0x67'),_0x4dda3a);}})[_0x1f5e('0x2d')](function(){return respondWithRpcPromise('Reload',_0x1f5e('0x58'),{'module':'chan_sip.so'});})[_0x1f5e('0x2d')](function(){var _0xfb378d=_0x7c6a33[_0x1f5e('0x59')][_0x1f5e('0x2f')]({'plain':!![]});if(!_0xfb378d)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0xfb378d[_0x1f5e('0x5b')]===_0x1f5e('0x59')){var _0x37e9f0=_0x3ff2a7['get']({'plain':!![]});return db[_0x1f5e('0x68')][_0x1f5e('0x53')]({'where':{'name':_0x1f5e('0x30'),'userProfileId':_0xfb378d[_0x1f5e('0x69')]},'raw':!![]})[_0x1f5e('0x2d')](function(_0x8492c2){if(_0x8492c2&&_0x8492c2[_0x1f5e('0x5c')]===0x0){return db[_0x1f5e('0x31')][_0x1f5e('0x58')]({'name':_0x37e9f0[_0x1f5e('0x34')],'resourceId':_0x37e9f0['id'],'type':_0x8492c2[_0x1f5e('0x34')],'sectionId':_0x8492c2['id']},{})[_0x1f5e('0x2d')](function(){return _0x3ff2a7;});}else{return _0x3ff2a7;}})['catch'](function(_0xfdbbdd){logger[_0x1f5e('0x1d')](_0x1f5e('0x5d'),_0xfdbbdd);throw _0xfdbbdd;});}return _0x3ff2a7;})['then'](respondWithResult(_0x152181,0xc9))[_0x1f5e('0x21')](handleError(_0x152181,null));};exports[_0x1f5e('0x2c')]=function(_0x5be801,_0x2f1649,_0x5f039a){var _0xef3e68;return db[_0x1f5e('0x37')][_0x1f5e('0x53')]({'where':{'id':_0x5be801[_0x1f5e('0x51')]['id']}})[_0x1f5e('0x2d')](handleEntityNotFound(_0x2f1649,null))[_0x1f5e('0x2d')](saveUpdates(_0x5be801[_0x1f5e('0x55')],null))['then'](function(_0x54caa8){if(_0x54caa8){_0xef3e68=_0x54caa8;return db[_0x1f5e('0x37')][_0x1f5e('0x5e')]({'raw':!![]});}})[_0x1f5e('0x2d')](function(_0xa6a364){if(_0xa6a364){var _0x12fae2=fs[_0x1f5e('0x6a')](path[_0x1f5e('0x5f')](config[_0x1f5e('0x61')],_0x1f5e('0x60')),_0x1f5e('0x6b'));var _0x184806=fs['readFileSync'](path['join'](config[_0x1f5e('0x61')],'server/files/templates/registry.ejs'),_0x1f5e('0x6b'));var _0x52fab4=ejs[_0x1f5e('0x66')](_0x12fae2,{'trunks':_0xa6a364||[]});fs[_0x1f5e('0x63')]('/etc/asterisk/sip_xcally_trunks.conf',_0x52fab4);var _0x623d25=ejs[_0x1f5e('0x66')](_0x184806,{'trunks':_0xa6a364||[]});fs['writeFileSync'](_0x1f5e('0x67'),_0x623d25);return respondWithRpcPromise(_0x1f5e('0x6c'),_0x1f5e('0x2c'),{'module':_0x1f5e('0x6d')});}return null;})['then'](function(_0x434cf8){if(_0x434cf8){return _0xef3e68;}})[_0x1f5e('0x2d')](respondWithResult(_0x2f1649,null))[_0x1f5e('0x21')](handleError(_0x2f1649,null));};exports['destroy']=function(_0x1536ff,_0x3aebf9,_0x3847f1){var _0x35b23c;return db['Trunk'][_0x1f5e('0x53')]({'where':{'id':_0x1536ff['params']['id']}})[_0x1f5e('0x2d')](handleEntityNotFound(_0x3aebf9,null))[_0x1f5e('0x2d')](removeEntity(_0x3aebf9,null))[_0x1f5e('0x2d')](function(){return db['Trunk'][_0x1f5e('0x5e')]({'raw':!![]});})[_0x1f5e('0x2d')](function(_0x5baf5f){var _0x3f652c=fs['readFileSync'](path[_0x1f5e('0x5f')](config[_0x1f5e('0x61')],'server/files/templates/trunk.ejs'),'utf8');var _0x4bbbe0=fs[_0x1f5e('0x6a')](path[_0x1f5e('0x5f')](config[_0x1f5e('0x61')],_0x1f5e('0x62')),_0x1f5e('0x6b'));var _0x58ebc2=ejs[_0x1f5e('0x66')](_0x3f652c,{'trunks':_0x5baf5f});var _0x5b9e5e=ejs[_0x1f5e('0x66')](_0x4bbbe0,{'trunks':_0x5baf5f});fs[_0x1f5e('0x63')](_0x1f5e('0x64'),_0x58ebc2);fs[_0x1f5e('0x63')](_0x1f5e('0x67'),_0x5b9e5e);return respondWithRpcPromise('Reload',_0x1f5e('0x2e'),{'module':'chan_sip.so'});})['catch'](handleError(_0x3aebf9,null));};
\ No newline at end of file
index 1a5ea88..a069bfc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb0dd=['request-promise','./trunk.attributes','exports','define','tools_trunks','lodash','util','api','moment'];(function(_0x249dfe,_0x21f85c){var _0xc7c7be=function(_0x3d0837){while(--_0x3d0837){_0x249dfe['push'](_0x249dfe['shift']());}};_0xc7c7be(++_0x21f85c);}(_0xb0dd,0x1b5));var _0xdb0d=function(_0x5cae02,_0x1d8e48){_0x5cae02=_0x5cae02-0x0;var _0x4c3ea8=_0xb0dd[_0x5cae02];return _0x4c3ea8;};'use strict';var _=require(_0xdb0d('0x0'));var util=require(_0xdb0d('0x1'));var logger=require('../../config/logger')(_0xdb0d('0x2'));var moment=require(_0xdb0d('0x3'));var BPromise=require('bluebird');var rp=require(_0xdb0d('0x4'));var attributes=require(_0xdb0d('0x5'));module[_0xdb0d('0x6')]=function(_0x1fffb3,_0xa8b2be){return _0x1fffb3[_0xdb0d('0x7')]('Trunk',attributes,{'tableName':_0xdb0d('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x376d=['api','bluebird','request-promise','./trunk.attributes','Trunk','tools_trunks','lodash','util','../../config/logger'];(function(_0x503ed1,_0x4980d2){var _0x34e9b7=function(_0x2fc4d8){while(--_0x2fc4d8){_0x503ed1['push'](_0x503ed1['shift']());}};_0x34e9b7(++_0x4980d2);}(_0x376d,0x165));var _0xd376=function(_0x146a19,_0x5c180e){_0x146a19=_0x146a19-0x0;var _0xe72d67=_0x376d[_0x146a19];return _0xe72d67;};'use strict';var _=require(_0xd376('0x0'));var util=require(_0xd376('0x1'));var logger=require(_0xd376('0x2'))(_0xd376('0x3'));var moment=require('moment');var BPromise=require(_0xd376('0x4'));var rp=require(_0xd376('0x5'));var attributes=require(_0xd376('0x6'));module['exports']=function(_0x543ebb,_0x40898a){return _0x543ebb['define'](_0xd376('0x7'),attributes,{'tableName':_0xd376('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index c8c0db1..cebc6e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ac4=['Trunk,\x20%s,\x20%s','request\x20sent','debug','error','code','message','catch','GetTrunk','Trunk','findAll','options','raw','where','attributes','limit','include','map','model','find','ShowTrunk','stringify','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','then','info'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3ac4,0x15f));var _0x43ac=function(_0x4557de,_0x254cf5){_0x4557de=_0x4557de-0x0;var _0x1d1d0c=_0x3ac4[_0x4557de];return _0x1d1d0c;};'use strict';var _=require(_0x43ac('0x0'));var util=require('util');var moment=require(_0x43ac('0x1'));var BPromise=require(_0x43ac('0x2'));var rs=require(_0x43ac('0x3'));var fs=require('fs');var Redis=require(_0x43ac('0x4'));var db=require(_0x43ac('0x5'))['db'];var utils=require(_0x43ac('0x6'));var logger=require(_0x43ac('0x7'))('rpc');var config=require(_0x43ac('0x8'));var jayson=require(_0x43ac('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x25f641,_0x47ea80,_0x3402c2){return new BPromise(function(_0x498593,_0x41495a){return client['request'](_0x25f641,_0x3402c2)[_0x43ac('0xa')](function(_0xd4c9ce){logger[_0x43ac('0xb')](_0x43ac('0xc'),_0x47ea80,_0x43ac('0xd'));logger[_0x43ac('0xe')]('Trunk,\x20%s,\x20%s,\x20%s',_0x47ea80,'request\x20sent',JSON['stringify'](_0xd4c9ce));if(_0xd4c9ce[_0x43ac('0xf')]){if(_0xd4c9ce[_0x43ac('0xf')][_0x43ac('0x10')]===0x1f4){logger['error'](_0x43ac('0xc'),_0x47ea80,_0xd4c9ce[_0x43ac('0xf')][_0x43ac('0x11')]);return _0x41495a(_0xd4c9ce['error']['message']);}logger[_0x43ac('0xf')](_0x43ac('0xc'),_0x47ea80,_0xd4c9ce[_0x43ac('0xf')]['message']);return _0x498593(_0xd4c9ce['error']['message']);}else{logger[_0x43ac('0xb')](_0x43ac('0xc'),_0x47ea80,_0x43ac('0xd'));_0x498593(_0xd4c9ce['result'][_0x43ac('0x11')]);}})[_0x43ac('0x12')](function(_0xb9b25d){logger['error'](_0x43ac('0xc'),_0x47ea80,_0xb9b25d);_0x41495a(_0xb9b25d);});});}exports[_0x43ac('0x13')]=function(_0x5c17b7){var _0x3f32dd=this;return new Promise(function(_0xfb2dff,_0x447ab4){return db[_0x43ac('0x14')][_0x43ac('0x15')]({'raw':_0x5c17b7[_0x43ac('0x16')]?_0x5c17b7[_0x43ac('0x16')][_0x43ac('0x17')]===undefined?!![]:![]:!![],'where':_0x5c17b7[_0x43ac('0x16')]?_0x5c17b7[_0x43ac('0x16')][_0x43ac('0x18')]||null:null,'attributes':_0x5c17b7[_0x43ac('0x16')]?_0x5c17b7[_0x43ac('0x16')][_0x43ac('0x19')]||null:null,'limit':_0x5c17b7[_0x43ac('0x16')]?_0x5c17b7['options'][_0x43ac('0x1a')]||null:null,'include':_0x5c17b7[_0x43ac('0x16')]?_0x5c17b7[_0x43ac('0x16')][_0x43ac('0x1b')]?_[_0x43ac('0x1c')](_0x5c17b7[_0x43ac('0x16')]['include'],function(_0x2308c6){return{'model':db[_0x2308c6[_0x43ac('0x1d')]],'as':_0x2308c6['as'],'attributes':_0x2308c6[_0x43ac('0x19')],'include':_0x2308c6[_0x43ac('0x1b')]?_['map'](_0x2308c6[_0x43ac('0x1b')],function(_0x513c06){return{'model':db[_0x513c06[_0x43ac('0x1d')]],'as':_0x513c06['as'],'attributes':_0x513c06['attributes'],'include':_0x513c06['include']?_[_0x43ac('0x1c')](_0x513c06['include'],function(_0x1e50c4){return{'model':db[_0x1e50c4[_0x43ac('0x1d')]],'as':_0x1e50c4['as'],'attributes':_0x1e50c4[_0x43ac('0x19')]};}):[]};}):[]};}):[]:[]})[_0x43ac('0xa')](function(_0x45cf7a){logger[_0x43ac('0xb')](_0x43ac('0x13'),_0x5c17b7);logger[_0x43ac('0xe')](_0x43ac('0x13'),_0x5c17b7,JSON['stringify'](_0x45cf7a));_0xfb2dff(_0x45cf7a);})['catch'](function(_0x5db5ec){logger[_0x43ac('0xf')](_0x43ac('0x13'),_0x5db5ec[_0x43ac('0x11')],_0x5c17b7);_0x447ab4(_0x3f32dd[_0x43ac('0xf')](0x1f4,_0x5db5ec[_0x43ac('0x11')]));});});};exports['ShowTrunk']=function(_0x57f7e9){var _0x51c926=this;return new Promise(function(_0x10a8c9,_0x30d972){return db[_0x43ac('0x14')][_0x43ac('0x1e')]({'raw':_0x57f7e9['options']?_0x57f7e9[_0x43ac('0x16')]['raw']===undefined?!![]:![]:!![],'where':_0x57f7e9[_0x43ac('0x16')]?_0x57f7e9[_0x43ac('0x16')][_0x43ac('0x18')]||null:null,'attributes':_0x57f7e9['options']?_0x57f7e9['options'][_0x43ac('0x19')]||null:null,'include':_0x57f7e9[_0x43ac('0x16')]?_0x57f7e9[_0x43ac('0x16')][_0x43ac('0x1b')]?_[_0x43ac('0x1c')](_0x57f7e9[_0x43ac('0x16')][_0x43ac('0x1b')],function(_0x309339){return{'model':db[_0x309339[_0x43ac('0x1d')]],'as':_0x309339['as'],'attributes':_0x309339[_0x43ac('0x19')],'include':_0x309339[_0x43ac('0x1b')]?_[_0x43ac('0x1c')](_0x309339[_0x43ac('0x1b')],function(_0xae8a20){return{'model':db[_0xae8a20[_0x43ac('0x1d')]],'as':_0xae8a20['as'],'attributes':_0xae8a20[_0x43ac('0x19')],'include':_0xae8a20[_0x43ac('0x1b')]?_[_0x43ac('0x1c')](_0xae8a20[_0x43ac('0x1b')],function(_0x49e1de){return{'model':db[_0x49e1de[_0x43ac('0x1d')]],'as':_0x49e1de['as'],'attributes':_0x49e1de['attributes']};}):[]};}):[]};}):[]:[]})[_0x43ac('0xa')](function(_0x2d96c6){logger[_0x43ac('0xb')](_0x43ac('0x1f'),_0x57f7e9);logger[_0x43ac('0xe')](_0x43ac('0x1f'),_0x57f7e9,JSON[_0x43ac('0x20')](_0x2d96c6));_0x10a8c9(_0x2d96c6);})['catch'](function(_0x194f8){logger[_0x43ac('0xf')](_0x43ac('0x1f'),_0x194f8[_0x43ac('0x11')],_0x57f7e9);_0x30d972(_0x51c926[_0x43ac('0xf')](0x1f4,_0x194f8[_0x43ac('0x11')]));});});};
\ No newline at end of file
+var _0x3362=['http','request','then','info','Trunk,\x20%s,\x20%s','request\x20sent','debug','Trunk,\x20%s,\x20%s,\x20%s','error','code','message','result','GetTrunk','Trunk','options','where','attributes','limit','include','map','model','stringify','catch','ShowTrunk','find','raw','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client'];(function(_0x173d7e,_0x3242fd){var _0x2220d6=function(_0x462828){while(--_0x462828){_0x173d7e['push'](_0x173d7e['shift']());}};_0x2220d6(++_0x3242fd);}(_0x3362,0x182));var _0x2336=function(_0x2b938c,_0x529f60){_0x2b938c=_0x2b938c-0x0;var _0x50cd1c=_0x3362[_0x2b938c];return _0x50cd1c;};'use strict';var _=require('lodash');var util=require(_0x2336('0x0'));var moment=require(_0x2336('0x1'));var BPromise=require(_0x2336('0x2'));var rs=require(_0x2336('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x2336('0x4'))['db'];var utils=require(_0x2336('0x5'));var logger=require(_0x2336('0x6'))(_0x2336('0x7'));var config=require('../../config/environment');var jayson=require(_0x2336('0x8'));var client=jayson[_0x2336('0x9')][_0x2336('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x42cdb8,_0x129fec,_0x32b6b8){return new BPromise(function(_0x4ef105,_0x50dc85){return client[_0x2336('0xb')](_0x42cdb8,_0x32b6b8)[_0x2336('0xc')](function(_0xa5435c){logger[_0x2336('0xd')](_0x2336('0xe'),_0x129fec,_0x2336('0xf'));logger[_0x2336('0x10')](_0x2336('0x11'),_0x129fec,_0x2336('0xf'),JSON['stringify'](_0xa5435c));if(_0xa5435c[_0x2336('0x12')]){if(_0xa5435c[_0x2336('0x12')][_0x2336('0x13')]===0x1f4){logger['error'](_0x2336('0xe'),_0x129fec,_0xa5435c[_0x2336('0x12')]['message']);return _0x50dc85(_0xa5435c[_0x2336('0x12')][_0x2336('0x14')]);}logger[_0x2336('0x12')](_0x2336('0xe'),_0x129fec,_0xa5435c[_0x2336('0x12')]['message']);return _0x4ef105(_0xa5435c['error']['message']);}else{logger[_0x2336('0xd')](_0x2336('0xe'),_0x129fec,_0x2336('0xf'));_0x4ef105(_0xa5435c[_0x2336('0x15')][_0x2336('0x14')]);}})['catch'](function(_0x5edda8){logger[_0x2336('0x12')](_0x2336('0xe'),_0x129fec,_0x5edda8);_0x50dc85(_0x5edda8);});});}exports[_0x2336('0x16')]=function(_0x3aca9e){var _0x4c8ad9=this;return new Promise(function(_0x3f2977,_0x2f4cf5){return db[_0x2336('0x17')]['findAll']({'raw':_0x3aca9e[_0x2336('0x18')]?_0x3aca9e[_0x2336('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0x3aca9e[_0x2336('0x18')]?_0x3aca9e[_0x2336('0x18')][_0x2336('0x19')]||null:null,'attributes':_0x3aca9e[_0x2336('0x18')]?_0x3aca9e['options'][_0x2336('0x1a')]||null:null,'limit':_0x3aca9e[_0x2336('0x18')]?_0x3aca9e[_0x2336('0x18')][_0x2336('0x1b')]||null:null,'include':_0x3aca9e['options']?_0x3aca9e[_0x2336('0x18')][_0x2336('0x1c')]?_[_0x2336('0x1d')](_0x3aca9e[_0x2336('0x18')][_0x2336('0x1c')],function(_0x2fc3ac){return{'model':db[_0x2fc3ac['model']],'as':_0x2fc3ac['as'],'attributes':_0x2fc3ac[_0x2336('0x1a')],'include':_0x2fc3ac[_0x2336('0x1c')]?_[_0x2336('0x1d')](_0x2fc3ac[_0x2336('0x1c')],function(_0x3f350){return{'model':db[_0x3f350[_0x2336('0x1e')]],'as':_0x3f350['as'],'attributes':_0x3f350['attributes'],'include':_0x3f350[_0x2336('0x1c')]?_[_0x2336('0x1d')](_0x3f350[_0x2336('0x1c')],function(_0x1edc41){return{'model':db[_0x1edc41[_0x2336('0x1e')]],'as':_0x1edc41['as'],'attributes':_0x1edc41[_0x2336('0x1a')]};}):[]};}):[]};}):[]:[]})[_0x2336('0xc')](function(_0x2e730d){logger[_0x2336('0xd')](_0x2336('0x16'),_0x3aca9e);logger[_0x2336('0x10')]('GetTrunk',_0x3aca9e,JSON[_0x2336('0x1f')](_0x2e730d));_0x3f2977(_0x2e730d);})[_0x2336('0x20')](function(_0x7357c4){logger[_0x2336('0x12')](_0x2336('0x16'),_0x7357c4['message'],_0x3aca9e);_0x2f4cf5(_0x4c8ad9[_0x2336('0x12')](0x1f4,_0x7357c4[_0x2336('0x14')]));});});};exports[_0x2336('0x21')]=function(_0x34d668){var _0x48327d=this;return new Promise(function(_0x16e70f,_0x534c8d){return db['Trunk'][_0x2336('0x22')]({'raw':_0x34d668[_0x2336('0x18')]?_0x34d668[_0x2336('0x18')][_0x2336('0x23')]===undefined?!![]:![]:!![],'where':_0x34d668[_0x2336('0x18')]?_0x34d668['options'][_0x2336('0x19')]||null:null,'attributes':_0x34d668[_0x2336('0x18')]?_0x34d668['options'][_0x2336('0x1a')]||null:null,'include':_0x34d668['options']?_0x34d668[_0x2336('0x18')][_0x2336('0x1c')]?_[_0x2336('0x1d')](_0x34d668[_0x2336('0x18')][_0x2336('0x1c')],function(_0x352db1){return{'model':db[_0x352db1['model']],'as':_0x352db1['as'],'attributes':_0x352db1[_0x2336('0x1a')],'include':_0x352db1['include']?_[_0x2336('0x1d')](_0x352db1['include'],function(_0x4370a4){return{'model':db[_0x4370a4[_0x2336('0x1e')]],'as':_0x4370a4['as'],'attributes':_0x4370a4[_0x2336('0x1a')],'include':_0x4370a4[_0x2336('0x1c')]?_[_0x2336('0x1d')](_0x4370a4['include'],function(_0x30a49d){return{'model':db[_0x30a49d[_0x2336('0x1e')]],'as':_0x30a49d['as'],'attributes':_0x30a49d['attributes']};}):[]};}):[]};}):[]:[]})[_0x2336('0xc')](function(_0x4ecd77){logger[_0x2336('0xd')](_0x2336('0x21'),_0x34d668);logger[_0x2336('0x10')](_0x2336('0x21'),_0x34d668,JSON[_0x2336('0x1f')](_0x4ecd77));_0x16e70f(_0x4ecd77);})[_0x2336('0x20')](function(_0x5697d0){logger['error'](_0x2336('0x21'),_0x5697d0[_0x2336('0x14')],_0x34d668);_0x534c8d(_0x48327d[_0x2336('0x12')](0x1f4,_0x5697d0[_0x2336('0x14')]));});});};
\ No newline at end of file
index ed51a2e..c26148b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1076=['/:id/openchannel_interactions','addOpenchannelInteractions','addFaxAccounts','/:id/mail_accounts','/:id/openchannel_accounts','addOpenchannelAccounts','addSmsAccounts','addChatWebsites','addSquareProjects','createApiKey','update','put','changePassword','delete','removeTeams','destroy','removeChatInteractions','removeFaxInteractions','removeSmsInteractions','/:id/fax_accounts','removeMailAccounts','removeOpenchannelAccounts','removeSmsAccounts','removeSquareProjects','multer','util','path','express','Router','../../components/interaction/service','../../config/environment','isAuthenticated','index','get','/:id','/:id/avatar','getAvatar','/:id/contacts','getContacts','getQueues','/:id/queues_rt','/:id/groups','getGroups','/:id/recordings','/:id/chat/interactions','/:id/openchannel/interactions','getOpenchannelInteractions','/:id/mail/interactions','getMailInteractions','/:id/sms/interactions','getSmsInteractions','/:id/fax/interactions','getFaxInteractions','/:id/teams','getTeams','/:id/lists','getLists','getAgents','getVoicePrefixes','getFaxAccounts','getMailAccounts','getOpenchannelAccounts','/:id/sms_accounts','getSmsAccounts','/:id/chat_websites','getChatWebsites','/:id/square_projects','getSquareProjects','/:id/api_key','getApiKey','post','/create_many','bulkCreate','create','/:id/queues','addQueues','diskStorage','root','server/files/images/','format','now','originalname','file','addAvatar','/:id/login','login','/:id/logout','logout','/:id/pause','pause','/:id/unpause','unpause','/:id/chat_interactions','addChatInteractions','/:id/mail_interactions','addMailInteractions','/:id/fax_interactions','/:id/sms_interactions','addSmsInteractions'];(function(_0xfedc72,_0x292f02){var _0x2c7c78=function(_0x12fbf1){while(--_0x12fbf1){_0xfedc72['push'](_0xfedc72['shift']());}};_0x2c7c78(++_0x292f02);}(_0x1076,0x1a4));var _0x6107=function(_0xd0b415,_0x149675){_0xd0b415=_0xd0b415-0x0;var _0x2bdf2c=_0x1076[_0xd0b415];return _0x2bdf2c;};'use strict';var multer=require(_0x6107('0x0'));var util=require(_0x6107('0x1'));var path=require(_0x6107('0x2'));var timeout=require('connect-timeout');var express=require(_0x6107('0x3'));var router=express[_0x6107('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x6107('0x5'));var config=require(_0x6107('0x6'));var controller=require('./user.controller');router['get']('/',auth[_0x6107('0x7')](),controller[_0x6107('0x8')]);router[_0x6107('0x9')]('/describe',auth[_0x6107('0x7')](),controller['describe']);router[_0x6107('0x9')](_0x6107('0xa'),auth[_0x6107('0x7')](),controller['show']);router[_0x6107('0x9')](_0x6107('0xb'),controller[_0x6107('0xc')]);router[_0x6107('0x9')](_0x6107('0xd'),auth[_0x6107('0x7')](),controller[_0x6107('0xe')]);router[_0x6107('0x9')]('/:id/queues',auth[_0x6107('0x7')](),controller[_0x6107('0xf')]);router[_0x6107('0x9')](_0x6107('0x10'),auth[_0x6107('0x7')](),controller['getVoiceQueuesRt']);router[_0x6107('0x9')](_0x6107('0x11'),auth[_0x6107('0x7')](),controller[_0x6107('0x12')]);router[_0x6107('0x9')](_0x6107('0x13'),auth[_0x6107('0x7')](),controller['getRecordings']);router[_0x6107('0x9')](_0x6107('0x14'),auth[_0x6107('0x7')](),controller['getChatInteractions']);router[_0x6107('0x9')](_0x6107('0x15'),auth[_0x6107('0x7')](),controller[_0x6107('0x16')]);router[_0x6107('0x9')](_0x6107('0x17'),auth[_0x6107('0x7')](),controller[_0x6107('0x18')]);router[_0x6107('0x9')](_0x6107('0x19'),auth[_0x6107('0x7')](),controller[_0x6107('0x1a')]);router[_0x6107('0x9')](_0x6107('0x1b'),auth[_0x6107('0x7')](),controller[_0x6107('0x1c')]);router[_0x6107('0x9')](_0x6107('0x1d'),auth[_0x6107('0x7')](),controller[_0x6107('0x1e')]);router[_0x6107('0x9')](_0x6107('0x1f'),auth[_0x6107('0x7')](),controller[_0x6107('0x20')]);router[_0x6107('0x9')]('/:id/agents',auth[_0x6107('0x7')](),controller[_0x6107('0x21')]);router[_0x6107('0x9')]('/:id/prefixes',auth[_0x6107('0x7')](),controller[_0x6107('0x22')]);router[_0x6107('0x9')]('/:id/fax_accounts',auth[_0x6107('0x7')](),controller[_0x6107('0x23')]);router[_0x6107('0x9')]('/:id/mail_accounts',auth['isAuthenticated'](),controller[_0x6107('0x24')]);router[_0x6107('0x9')]('/:id/openchannel_accounts',auth[_0x6107('0x7')](),controller[_0x6107('0x25')]);router[_0x6107('0x9')](_0x6107('0x26'),auth[_0x6107('0x7')](),controller[_0x6107('0x27')]);router[_0x6107('0x9')](_0x6107('0x28'),auth['isAuthenticated'](),controller[_0x6107('0x29')]);router[_0x6107('0x9')](_0x6107('0x2a'),auth[_0x6107('0x7')](),controller[_0x6107('0x2b')]);router['get']('/:id/scheduled_calls',auth[_0x6107('0x7')](),controller['getScheduledCalls']);router[_0x6107('0x9')](_0x6107('0x2c'),auth[_0x6107('0x7')](),controller[_0x6107('0x2d')]);router[_0x6107('0x2e')](_0x6107('0x2f'),auth['isAuthenticated'](),controller[_0x6107('0x30')]);router[_0x6107('0x2e')](_0x6107('0xd'),auth[_0x6107('0x7')](),controller['addContacts']);router[_0x6107('0x2e')]('/',auth[_0x6107('0x7')](),controller[_0x6107('0x31')]);router['post'](_0x6107('0x32'),auth['isAuthenticated'](),controller[_0x6107('0x33')]);var upload=multer({'storage':multer[_0x6107('0x34')]({'destination':function(_0x5809cd,_0x4d24fc,_0x45d936){_0x45d936(null,path['join'](config[_0x6107('0x35')],_0x6107('0x36')));},'filename':function(_0x2a5180,_0xf7ec6e,_0x1fa3cb){_0x1fa3cb(null,util[_0x6107('0x37')]('%s-%s',Date[_0x6107('0x38')](),_0xf7ec6e[_0x6107('0x39')]));}})});router[_0x6107('0x2e')](_0x6107('0xb'),upload['single'](_0x6107('0x3a')),controller[_0x6107('0x3b')]);router['post'](_0x6107('0x3c'),auth[_0x6107('0x7')](),controller[_0x6107('0x3d')]);router['post'](_0x6107('0x3e'),auth[_0x6107('0x7')](),controller[_0x6107('0x3f')]);router[_0x6107('0x2e')](_0x6107('0x40'),auth[_0x6107('0x7')](),controller[_0x6107('0x41')]);router[_0x6107('0x2e')](_0x6107('0x42'),auth[_0x6107('0x7')](),controller[_0x6107('0x43')]);router[_0x6107('0x2e')](_0x6107('0x1d'),auth[_0x6107('0x7')](),controller['addTeams']);router[_0x6107('0x2e')](_0x6107('0x44'),auth[_0x6107('0x7')](),controller[_0x6107('0x45')]);router[_0x6107('0x2e')](_0x6107('0x46'),auth['isAuthenticated'](),controller[_0x6107('0x47')]);router[_0x6107('0x2e')](_0x6107('0x48'),auth[_0x6107('0x7')](),controller['addFaxInteractions']);router['post'](_0x6107('0x49'),auth[_0x6107('0x7')](),controller[_0x6107('0x4a')]);router[_0x6107('0x2e')](_0x6107('0x4b'),auth['isAuthenticated'](),controller[_0x6107('0x4c')]);router[_0x6107('0x2e')]('/:id/fax_accounts',auth[_0x6107('0x7')](),controller[_0x6107('0x4d')]);router[_0x6107('0x2e')](_0x6107('0x4e'),auth['isAuthenticated'](),controller['addMailAccounts']);router['post'](_0x6107('0x4f'),auth[_0x6107('0x7')](),controller[_0x6107('0x50')]);router[_0x6107('0x2e')](_0x6107('0x26'),auth[_0x6107('0x7')](),controller[_0x6107('0x51')]);router[_0x6107('0x2e')](_0x6107('0x28'),auth['isAuthenticated'](),controller[_0x6107('0x52')]);router[_0x6107('0x2e')](_0x6107('0x2a'),auth[_0x6107('0x7')](),controller[_0x6107('0x53')]);router['post'](_0x6107('0x2c'),auth[_0x6107('0x7')](),controller[_0x6107('0x54')]);router['put'](_0x6107('0xa'),auth['isAuthenticated'](),controller[_0x6107('0x55')]);router[_0x6107('0x56')]('/:id/password',auth[_0x6107('0x7')](),controller[_0x6107('0x57')]);router[_0x6107('0x58')](_0x6107('0x32'),auth[_0x6107('0x7')](),controller['removeQueues']);router[_0x6107('0x58')]('/:id/teams',auth[_0x6107('0x7')](),controller[_0x6107('0x59')]);router[_0x6107('0x58')](_0x6107('0xa'),auth[_0x6107('0x7')](),controller[_0x6107('0x5a')]);router['delete'](_0x6107('0x44'),auth['isAuthenticated'](),controller[_0x6107('0x5b')]);router[_0x6107('0x58')](_0x6107('0x46'),auth[_0x6107('0x7')](),controller['removeMailInteractions']);router[_0x6107('0x58')]('/:id/fax_interactions',auth['isAuthenticated'](),controller[_0x6107('0x5c')]);router[_0x6107('0x58')](_0x6107('0x49'),auth[_0x6107('0x7')](),controller[_0x6107('0x5d')]);router['delete']('/:id/openchannel_interactions',auth['isAuthenticated'](),controller['removeOpenchannelInteractions']);router[_0x6107('0x58')](_0x6107('0x5e'),auth['isAuthenticated'](),controller['removeFaxAccounts']);router['delete'](_0x6107('0x4e'),auth[_0x6107('0x7')](),controller[_0x6107('0x5f')]);router['delete'](_0x6107('0x4f'),auth[_0x6107('0x7')](),controller[_0x6107('0x60')]);router['delete'](_0x6107('0x26'),auth['isAuthenticated'](),controller[_0x6107('0x61')]);router[_0x6107('0x58')]('/:id/chat_websites',auth['isAuthenticated'](),controller['removeChatWebsites']);router[_0x6107('0x58')]('/:id/square_projects',auth[_0x6107('0x7')](),controller[_0x6107('0x62')]);router[_0x6107('0x58')]('/:id/api_key',auth[_0x6107('0x7')](),controller['removeApiKey']);module['exports']=router;
\ No newline at end of file
+var _0xf625=['logout','/:id/pause','pause','unpause','addTeams','addMailInteractions','addFaxInteractions','/:id/sms_interactions','addSmsInteractions','addOpenchannelInteractions','/:id/fax_accounts','addMailAccounts','addOpenchannelAccounts','addSmsAccounts','/:id/chat_websites','addSquareProjects','createApiKey','put','/:id/password','changePassword','delete','removeQueues','removeTeams','/:id/chat_interactions','removeChatInteractions','/:id/mail_interactions','removeMailInteractions','/:id/fax_interactions','removeFaxInteractions','removeSmsInteractions','removeOpenchannelInteractions','removeFaxAccounts','removeMailAccounts','removeOpenchannelAccounts','removeSmsAccounts','removeSquareProjects','removeApiKey','exports','multer','util','path','Router','../../components/interaction/service','../../config/environment','./user.controller','get','isAuthenticated','describe','/:id','show','/:id/avatar','getAvatar','/:id/contacts','getContacts','getQueues','/:id/queues_rt','getVoiceQueuesRt','getGroups','getRecordings','/:id/chat/interactions','getChatInteractions','/:id/openchannel/interactions','getOpenchannelInteractions','/:id/mail/interactions','getMailInteractions','/:id/fax/interactions','getFaxInteractions','/:id/teams','/:id/lists','getLists','/:id/agents','getAgents','/:id/prefixes','getVoicePrefixes','/:id/mail_accounts','getMailAccounts','/:id/openchannel_accounts','getOpenchannelAccounts','/:id/sms_accounts','getSmsAccounts','/:id/square_projects','getSquareProjects','/:id/scheduled_calls','getScheduledCalls','/:id/api_key','getApiKey','post','/create_many','addContacts','/:id/queues','addQueues','diskStorage','root','server/files/images/','format','%s-%s','originalname','addAvatar','login','/:id/logout'];(function(_0x3a6c6d,_0x2dda5c){var _0x4868ed=function(_0x3f3682){while(--_0x3f3682){_0x3a6c6d['push'](_0x3a6c6d['shift']());}};_0x4868ed(++_0x2dda5c);}(_0xf625,0x1b6));var _0x5f62=function(_0xe31165,_0x23cebf){_0xe31165=_0xe31165-0x0;var _0x3cd681=_0xf625[_0xe31165];return _0x3cd681;};'use strict';var multer=require(_0x5f62('0x0'));var util=require(_0x5f62('0x1'));var path=require(_0x5f62('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express[_0x5f62('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x5f62('0x4'));var config=require(_0x5f62('0x5'));var controller=require(_0x5f62('0x6'));router[_0x5f62('0x7')]('/',auth[_0x5f62('0x8')](),controller['index']);router[_0x5f62('0x7')]('/describe',auth[_0x5f62('0x8')](),controller[_0x5f62('0x9')]);router[_0x5f62('0x7')](_0x5f62('0xa'),auth[_0x5f62('0x8')](),controller[_0x5f62('0xb')]);router['get'](_0x5f62('0xc'),controller[_0x5f62('0xd')]);router['get'](_0x5f62('0xe'),auth[_0x5f62('0x8')](),controller[_0x5f62('0xf')]);router[_0x5f62('0x7')]('/:id/queues',auth['isAuthenticated'](),controller[_0x5f62('0x10')]);router[_0x5f62('0x7')](_0x5f62('0x11'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x12')]);router[_0x5f62('0x7')]('/:id/groups',auth[_0x5f62('0x8')](),controller[_0x5f62('0x13')]);router[_0x5f62('0x7')]('/:id/recordings',auth[_0x5f62('0x8')](),controller[_0x5f62('0x14')]);router[_0x5f62('0x7')](_0x5f62('0x15'),auth['isAuthenticated'](),controller[_0x5f62('0x16')]);router[_0x5f62('0x7')](_0x5f62('0x17'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x18')]);router[_0x5f62('0x7')](_0x5f62('0x19'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x1a')]);router['get']('/:id/sms/interactions',auth[_0x5f62('0x8')](),controller['getSmsInteractions']);router[_0x5f62('0x7')](_0x5f62('0x1b'),auth['isAuthenticated'](),controller[_0x5f62('0x1c')]);router[_0x5f62('0x7')](_0x5f62('0x1d'),auth[_0x5f62('0x8')](),controller['getTeams']);router[_0x5f62('0x7')](_0x5f62('0x1e'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x1f')]);router[_0x5f62('0x7')](_0x5f62('0x20'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x21')]);router['get'](_0x5f62('0x22'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x23')]);router[_0x5f62('0x7')]('/:id/fax_accounts',auth[_0x5f62('0x8')](),controller['getFaxAccounts']);router[_0x5f62('0x7')](_0x5f62('0x24'),auth['isAuthenticated'](),controller[_0x5f62('0x25')]);router[_0x5f62('0x7')](_0x5f62('0x26'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x27')]);router['get'](_0x5f62('0x28'),auth['isAuthenticated'](),controller[_0x5f62('0x29')]);router[_0x5f62('0x7')]('/:id/chat_websites',auth[_0x5f62('0x8')](),controller['getChatWebsites']);router['get'](_0x5f62('0x2a'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x2b')]);router['get'](_0x5f62('0x2c'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x2d')]);router[_0x5f62('0x7')](_0x5f62('0x2e'),auth['isAuthenticated'](),controller[_0x5f62('0x2f')]);router[_0x5f62('0x30')](_0x5f62('0x31'),auth[_0x5f62('0x8')](),controller['bulkCreate']);router[_0x5f62('0x30')](_0x5f62('0xe'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x32')]);router['post']('/',auth[_0x5f62('0x8')](),controller['create']);router[_0x5f62('0x30')](_0x5f62('0x33'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x34')]);var upload=multer({'storage':multer[_0x5f62('0x35')]({'destination':function(_0x2082b9,_0x1867bd,_0x284edc){_0x284edc(null,path['join'](config[_0x5f62('0x36')],_0x5f62('0x37')));},'filename':function(_0x5d8bed,_0x1087d0,_0x2b7999){_0x2b7999(null,util[_0x5f62('0x38')](_0x5f62('0x39'),Date['now'](),_0x1087d0[_0x5f62('0x3a')]));}})});router[_0x5f62('0x30')]('/:id/avatar',upload['single']('file'),controller[_0x5f62('0x3b')]);router['post']('/:id/login',auth['isAuthenticated'](),controller[_0x5f62('0x3c')]);router[_0x5f62('0x30')](_0x5f62('0x3d'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x3e')]);router[_0x5f62('0x30')](_0x5f62('0x3f'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x40')]);router['post']('/:id/unpause',auth[_0x5f62('0x8')](),controller[_0x5f62('0x41')]);router[_0x5f62('0x30')]('/:id/teams',auth[_0x5f62('0x8')](),controller[_0x5f62('0x42')]);router[_0x5f62('0x30')]('/:id/chat_interactions',auth[_0x5f62('0x8')](),controller['addChatInteractions']);router[_0x5f62('0x30')]('/:id/mail_interactions',auth[_0x5f62('0x8')](),controller[_0x5f62('0x43')]);router[_0x5f62('0x30')]('/:id/fax_interactions',auth[_0x5f62('0x8')](),controller[_0x5f62('0x44')]);router[_0x5f62('0x30')](_0x5f62('0x45'),auth['isAuthenticated'](),controller[_0x5f62('0x46')]);router[_0x5f62('0x30')]('/:id/openchannel_interactions',auth[_0x5f62('0x8')](),controller[_0x5f62('0x47')]);router['post'](_0x5f62('0x48'),auth['isAuthenticated'](),controller['addFaxAccounts']);router[_0x5f62('0x30')]('/:id/mail_accounts',auth[_0x5f62('0x8')](),controller[_0x5f62('0x49')]);router[_0x5f62('0x30')](_0x5f62('0x26'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x4a')]);router[_0x5f62('0x30')](_0x5f62('0x28'),auth['isAuthenticated'](),controller[_0x5f62('0x4b')]);router[_0x5f62('0x30')](_0x5f62('0x4c'),auth[_0x5f62('0x8')](),controller['addChatWebsites']);router[_0x5f62('0x30')](_0x5f62('0x2a'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x4d')]);router[_0x5f62('0x30')](_0x5f62('0x2e'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x4e')]);router[_0x5f62('0x4f')](_0x5f62('0xa'),auth[_0x5f62('0x8')](),controller['update']);router[_0x5f62('0x4f')](_0x5f62('0x50'),auth['isAuthenticated'](),controller[_0x5f62('0x51')]);router[_0x5f62('0x52')](_0x5f62('0x33'),auth['isAuthenticated'](),controller[_0x5f62('0x53')]);router[_0x5f62('0x52')](_0x5f62('0x1d'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x54')]);router[_0x5f62('0x52')](_0x5f62('0xa'),auth[_0x5f62('0x8')](),controller['destroy']);router['delete'](_0x5f62('0x55'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x56')]);router['delete'](_0x5f62('0x57'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x58')]);router['delete'](_0x5f62('0x59'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x5a')]);router[_0x5f62('0x52')](_0x5f62('0x45'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x5b')]);router[_0x5f62('0x52')]('/:id/openchannel_interactions',auth['isAuthenticated'](),controller[_0x5f62('0x5c')]);router[_0x5f62('0x52')](_0x5f62('0x48'),auth['isAuthenticated'](),controller[_0x5f62('0x5d')]);router[_0x5f62('0x52')]('/:id/mail_accounts',auth[_0x5f62('0x8')](),controller[_0x5f62('0x5e')]);router[_0x5f62('0x52')](_0x5f62('0x26'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x5f')]);router[_0x5f62('0x52')](_0x5f62('0x28'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x60')]);router['delete']('/:id/chat_websites',auth[_0x5f62('0x8')](),controller['removeChatWebsites']);router['delete'](_0x5f62('0x2a'),auth[_0x5f62('0x8')](),controller[_0x5f62('0x61')]);router[_0x5f62('0x52')]('/:id/api_key',auth[_0x5f62('0x8')](),controller[_0x5f62('0x62')]);module[_0x5f62('0x63')]=router;
\ No newline at end of file
index 3836823..ba0226b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ae9=['join','split','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]','rfc2833','info','inband','nonat','update','outgoing','yes','nat','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]','all','ulaw;alaw;gsm','allow','insecure','String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]','never','\x22\x22\x20<>','always','accept','originate','uas','fingerprint','certificate','active','passive','actpass','update,nonat','showWebBar','isArray','wss','encryption','avpf','icesupport','dtlsenable','dtlsverify','dtlssetup','dtlscertfile','dtlsprivatekey','rtcp_mux','/etc/pki/tls/private/motion.key','TEXT','permissions','map','sequelize','moment','lodash','exports','STRING','setDataValue','name','defaultuser','The\x20name\x20of\x20the\x20user','callerid','\x22%s\x22\x20<%s>','getDataValue','internal','email','toLowerCase','ENUM','admin','agent','local','INTEGER','format','fullname','DATE','BOOLEAN','DEFAULT\x20PAUSE','friend','user','from-sip','ALLOWED_NOT_SCREENED','ALLOWED_PASSED_SCREEN','ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN','udp','transport'];(function(_0x2db7bd,_0x4869e8){var _0x1a2ff9=function(_0x5dde55){while(--_0x5dde55){_0x2db7bd['push'](_0x2db7bd['shift']());}};_0x1a2ff9(++_0x4869e8);}(_0x8ae9,0x171));var _0x98ae=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8ae9[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require(_0x98ae('0x0'));var moment=require(_0x98ae('0x1'));var util=require('util');var _=require(_0x98ae('0x2'));module[_0x98ae('0x3')]={'name':{'type':Sequelize[_0x98ae('0x4')],'allowNull':![],'unique':'name','validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i},'set':function(_0x53f42b){this[_0x98ae('0x5')](_0x98ae('0x6'),_0x53f42b);this['setDataValue'](_0x98ae('0x7'),_0x53f42b);},'comment':_0x98ae('0x8')},'fullname':{'type':Sequelize[_0x98ae('0x4')],'allowNull':![],'set':function(_0x5c07fe){this[_0x98ae('0x5')]('fullname',_0x5c07fe);this['setDataValue'](_0x98ae('0x9'),util['format'](_0x98ae('0xa'),_0x5c07fe,this[_0x98ae('0xb')](_0x98ae('0xc'))));}},'alias':{'type':Sequelize[_0x98ae('0x4')]},'email':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x98ae('0xd'),'validate':{'isEmail':!![]},'set':function(_0x33745f){if(_0x33745f){this[_0x98ae('0x5')](_0x98ae('0xd'),_0x33745f[_0x98ae('0xe')]());}}},'role':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x10'),'user',_0x98ae('0x11'),'telephone'),'allowNull':![]},'password':{'type':Sequelize[_0x98ae('0x4')],'allowNull':![],'validate':{'notEmpty':!![]}},'provider':{'type':Sequelize[_0x98ae('0x4')],'defaultValue':_0x98ae('0x12')},'internal':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':![],'unique':_0x98ae('0xc'),'set':function(_0x4a2750){this[_0x98ae('0x5')](_0x98ae('0xc'),_0x4a2750);this[_0x98ae('0x5')]('accountcode',_0x4a2750);this[_0x98ae('0x5')]('callerid',util[_0x98ae('0x14')]('\x22%s\x22\x20<%s>',this[_0x98ae('0xb')](_0x98ae('0x15')),_0x4a2750));}},'salt':{'type':Sequelize[_0x98ae('0x4')]},'phone':{'type':Sequelize[_0x98ae('0x4')]},'mobile':{'type':Sequelize['STRING']},'address':{'type':Sequelize[_0x98ae('0x4')]},'zipcode':{'type':Sequelize[_0x98ae('0x4')]},'userpic':{'type':Sequelize['STRING']},'city':{'type':Sequelize[_0x98ae('0x4')]},'country':{'type':Sequelize['STRING']},'online':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'lastLoginAt':{'type':Sequelize[_0x98ae('0x16')]},'voicePause':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'chatPause':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'mailPause':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'faxPause':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'smsPause':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'openchannelPause':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'pauseType':{'type':Sequelize[_0x98ae('0x4')],'defaultValue':_0x98ae('0x18')},'lastPauseAt':{'type':Sequelize['DATE']},'chatCapacity':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x0},'mailCapacity':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x0},'faxCapacity':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x0},'smsCapacity':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x0},'openchannelCapacity':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x0},'phoneBarAutoAnswer':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'phoneBarEnableSettings':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':!![]},'phoneBarListenPort':{'type':Sequelize[_0x98ae('0x13')](0x5),'defaultValue':0x1428},'phoneBarExpires':{'type':Sequelize[_0x98ae('0x13')](0x5),'defaultValue':0x78},'phoneBarRemoteControl':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'phoneBarRemoteControlPort':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x26a0},'phoneBarEnableRecording':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarRingInUse':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'chanspy':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'description':{'type':Sequelize['STRING'],'allowNull':!![]},'host':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':'dynamic'},'ipaddr':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'port':{'type':Sequelize[_0x98ae('0x13')](0x5),'allowNull':!![]},'regseconds':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'fullcontact':{'type':Sequelize['STRING'],'allowNull':!![]},'regserver':{'type':Sequelize['STRING'],'allowNull':!![]},'useragent':{'type':Sequelize['STRING'],'allowNull':!![]},'lastms':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'type':{'type':Sequelize['ENUM'](_0x98ae('0x19'),_0x98ae('0x1a'),'peer'),'allowNull':!![],'defaultValue':_0x98ae('0x19')},'context':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![],'defaultValue':_0x98ae('0x1b')},'callingpres':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x1c'),_0x98ae('0x1d'),_0x98ae('0x1e'),_0x98ae('0x1f'),'PROHIB_NOT_SCREENED',_0x98ae('0x20'),_0x98ae('0x21'),'PROHIB'),'allowNull':!![]},'deny':{'type':Sequelize['STRING'],'allowNull':!![]},'permit':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'secret':{'type':Sequelize['STRING'],'allowNull':!![]},'md5secret':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'remotesecret':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'transport':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![],'defaultValue':_0x98ae('0x22'),'set':function(_0x16f921){this[_0x98ae('0x5')](_0x98ae('0x23'),_0x16f921?_0x16f921[_0x98ae('0x24')](','):null);},'get':function(){return this[_0x98ae('0xb')](_0x98ae('0x23'))?this[_0x98ae('0xb')](_0x98ae('0x23'))[_0x98ae('0x25')](','):null;},'comment':_0x98ae('0x26')},'dtmfmode':{'type':Sequelize['ENUM'](_0x98ae('0x27'),_0x98ae('0x28'),'shortinfo',_0x98ae('0x29'),'auto'),'allowNull':!![],'defaultValue':_0x98ae('0x27')},'directmedia':{'type':Sequelize[_0x98ae('0xf')]('yes','no',_0x98ae('0x2a'),_0x98ae('0x2b'),_0x98ae('0x2c')),'allowNull':!![],'defaultValue':'no'},'directrtpsetup':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![],'defaultValue':'no'},'directmediapermit':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'directmediadeny':{'type':Sequelize['STRING'],'allowNull':!![]},'nat':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![],'defaultValue':'force_rport,comedia','set':function(_0x49016c){this['setDataValue'](_0x98ae('0x2e'),_0x49016c?_0x49016c['join'](','):null);},'get':function(){return this['getDataValue'](_0x98ae('0x2e'))?this[_0x98ae('0xb')](_0x98ae('0x2e'))['split'](','):null;},'comment':_0x98ae('0x2f')},'callgroup':{'type':Sequelize[_0x98ae('0x4')]},'namedcallgroup':{'type':Sequelize['STRING']},'pickupgroup':{'type':Sequelize[_0x98ae('0x4')]},'namedpickupgroup':{'type':Sequelize[_0x98ae('0x4')]},'language':{'type':Sequelize[_0x98ae('0x4')],'defaultValue':'en'},'tonezone':{'type':Sequelize['STRING']},'disallow':{'type':Sequelize[_0x98ae('0x4')],'allowNull':![],'defaultValue':_0x98ae('0x30')},'allow':{'type':Sequelize[_0x98ae('0x4')],'allowNull':![],'defaultValue':_0x98ae('0x31'),'set':function(_0x21387d){this[_0x98ae('0x5')](_0x98ae('0x32'),_0x21387d?_0x21387d[_0x98ae('0x24')](';'):_0x98ae('0x31'));},'get':function(){return this[_0x98ae('0xb')]('allow')?this[_0x98ae('0xb')](_0x98ae('0x32'))[_0x98ae('0x25')](';'):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22gsm\x22]'},'autoframing':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'insecure':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![],'set':function(_0x51f5c2){this[_0x98ae('0x5')](_0x98ae('0x33'),_0x51f5c2?_0x51f5c2[_0x98ae('0x24')](','):null);},'get':function(){return this[_0x98ae('0xb')](_0x98ae('0x33'))?this[_0x98ae('0xb')](_0x98ae('0x33'))[_0x98ae('0x25')](','):null;},'comment':_0x98ae('0x34')},'trustrpid':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![],'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0x98ae('0xf')]('yes','no'),'allowNull':!![],'defaultValue':'no'},'progressinband':{'type':Sequelize['ENUM'](_0x98ae('0x2d'),'no',_0x98ae('0x35')),'allowNull':!![]},'promiscredir':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'useclientcode':{'type':Sequelize['ENUM']('yes','no'),'allowNull':!![]},'accountcode':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'setvar':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'callerid':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![],'defaultValue':_0x98ae('0x36')},'amaflags':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'callcounter':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![],'defaultValue':_0x98ae('0x2d')},'busylevel':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'allowoverlap':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'allowsubscribe':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'allowtransfer':{'type':Sequelize[_0x98ae('0xf')]('yes','no'),'allowNull':!![]},'ignoresdpversion':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'subscribecontext':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'template':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'videosupport':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no',_0x98ae('0x37')),'allowNull':!![],'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'rfc2833compensate':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'mailbox':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'session_timers':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x38'),'refuse',_0x98ae('0x39')),'allowNull':!![]},'session_expires':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'session_minse':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'session_refresher':{'type':Sequelize[_0x98ae('0xf')]('uac','uas'),'allowNull':!![],'defaultValue':_0x98ae('0x3a')},'t38pt_usertpsource':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'regexten':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'fromdomain':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'fromuser':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'qualify':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![],'defaultValue':_0x98ae('0x2d')},'keepalive':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'defaultip':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'defaultuser':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'rtptimeout':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'rtpholdtimeout':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'rtpkeepalive':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'sendrpid':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![],'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'callbackextension':{'type':Sequelize['STRING'],'allowNull':!![]},'timert1':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'timerb':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'qualifyfreq':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'contactpermit':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'contactdeny':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'contactacl':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'unsolicited_mailbox':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'use_q850_reason':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'maxforwards':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'encryption':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![],'defaultValue':'no'},'avpf':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'force_avp':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'icesupport':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'dtlsenable':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'dtlsverify':{'type':Sequelize[_0x98ae('0xf')]('yes','no',_0x98ae('0x3b'),_0x98ae('0x3c')),'allowNull':!![]},'dtlsrekey':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![]},'dtlscertfile':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'dtlsprivatekey':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'dtlscipher':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'dtlscafile':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'dtlscapath':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'dtlssetup':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x3d'),_0x98ae('0x3e'),_0x98ae('0x3f')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'usereqphone':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![],'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'recordofffeature':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'call_limit':{'type':Sequelize[_0x98ae('0x13')](0xb),'allowNull':!![],'defaultValue':0xa},'registertrying':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'subscribemwi':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'allowNull':!![]},'vmexten':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'mohinterpret':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'mohsuggest':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'parkinglot':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]},'canreinvite':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no',_0x98ae('0x2a'),_0x98ae('0x2b'),_0x98ae('0x40')),'allowNull':!![],'defaultValue':'no'},'loginInPause':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'resetPasswordToken':{'type':Sequelize['STRING']},'resetPasswordExpires':{'type':Sequelize['DATE']},'showWebBar':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x0,'set':function(_0xe4490d){this['setDataValue'](_0x98ae('0x41'),_0xe4490d);var _0xe266cf=this['get']({'plain':!![]});switch(_0xe4490d){case 0x0:case 0x1:var _0x39a090=_0xe266cf['transport']?_[_0x98ae('0x42')](_0xe266cf[_0x98ae('0x23')])?_0xe266cf[_0x98ae('0x23')][_0x98ae('0x24')]():_0xe266cf[_0x98ae('0x23')]:_0x98ae('0x22');if(_0x39a090===_0x98ae('0x43')){_0x39a090=_0x98ae('0x22');}this[_0x98ae('0x5')]('transport',_0x39a090);this[_0x98ae('0x5')](_0x98ae('0x44'),'no');this[_0x98ae('0x5')](_0x98ae('0x45'),null);this[_0x98ae('0x5')]('force_avp',null);this[_0x98ae('0x5')](_0x98ae('0x46'),null);this[_0x98ae('0x5')](_0x98ae('0x47'),null);this[_0x98ae('0x5')](_0x98ae('0x48'),null);this[_0x98ae('0x5')](_0x98ae('0x49'),null);this[_0x98ae('0x5')](_0x98ae('0x4a'),null);this['setDataValue'](_0x98ae('0x4b'),null);this[_0x98ae('0x5')](_0x98ae('0x4c'),'no');break;case 0x2:this[_0x98ae('0x5')]('transport',_0x98ae('0x43'));this[_0x98ae('0x5')]('encryption',_0x98ae('0x2d'));this[_0x98ae('0x5')](_0x98ae('0x45'),'yes');this['setDataValue']('force_avp','yes');this[_0x98ae('0x5')]('icesupport','yes');this[_0x98ae('0x5')](_0x98ae('0x47'),'yes');this[_0x98ae('0x5')]('dtlsverify','no');this[_0x98ae('0x5')](_0x98ae('0x49'),'actpass');this[_0x98ae('0x5')]('dtlscertfile',_0xe266cf[_0x98ae('0x4a')]||'/etc/pki/tls/certs/motion.crt');this[_0x98ae('0x5')](_0x98ae('0x4b'),_0xe266cf['dtlsprivatekey']||_0x98ae('0x4d'));this[_0x98ae('0x5')](_0x98ae('0x4c'),_0x98ae('0x2d'));break;default:}}},'permissions':{'type':Sequelize[_0x98ae('0x4e')],'set':function(_0x1853c3){this['setDataValue']('permissions',_0x1853c3?_0x1853c3[_0x98ae('0x24')](','):[]);},'get':function(){return this[_0x98ae('0xb')](_0x98ae('0x4f'))?_[_0x98ae('0x50')](this['getDataValue'](_0x98ae('0x4f'))[_0x98ae('0x25')](','),function(_0x3b5cc3){return parseInt(_0x3b5cc3,0xa);}):[];}},'phoneBarUnconditionalNumber':{'type':Sequelize[_0x98ae('0x4')]},'phoneBarNoReplyNumber':{'type':Sequelize['STRING']},'phoneBarBusyNumber':{'type':Sequelize[_0x98ae('0x4')]},'phoneBarUnconditional':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'phoneBarNoReply':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'phoneBarBusy':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'phoneBarDnd':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'phoneBarUnansweredCallBadge':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':!![]},'phoneBarEnableDtmfTone':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarAutoAnswerDelay':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x0},'extensionMonitor':{'type':Sequelize[_0x98ae('0x4')],'defaultValue':''},'crudPermissions':{'type':Sequelize[_0x98ae('0x13')],'defaultValue':0x0},'rtcp_mux':{'type':Sequelize[_0x98ae('0xf')](_0x98ae('0x2d'),'no'),'defaultValue':'no'},'allowmessenger':{'type':Sequelize['BOOLEAN'],'defaultValue':!![]},'phoneBarOutboundProxy':{'type':Sequelize[_0x98ae('0x4')]},'passwordResetAt':{'type':Sequelize[_0x98ae('0x16')],'defaultValue':null},'phoneBarEnableJaws':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'phoneBarEnableVideoRecording':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'phoneBarPrefixRequired':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'hotdesk':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'interface':{'type':Sequelize[_0x98ae('0x4')],'defaultValue':null},'privacyEnabled':{'type':Sequelize[_0x98ae('0x17')],'defaultValue':![]},'apiKeyNonce':{'type':Sequelize['STRING'],'allowNull':!![]},'apiKeyIat':{'type':Sequelize[_0x98ae('0x4')],'allowNull':!![]}};
\ No newline at end of file
+var _0x6695=['uas','certificate','active','passive','actpass','update,nonat','showWebBar','isArray','avpf','force_avp','icesupport','dtlssetup','dtlscertfile','dtlsprivatekey','wss','encryption','dtlsenable','dtlsverify','/etc/pki/tls/certs/motion.crt','TEXT','permissions','map','sequelize','lodash','exports','STRING','name','setDataValue','defaultuser','The\x20name\x20of\x20the\x20user','fullname','format','\x22%s\x22\x20<%s>','internal','email','toLowerCase','ENUM','admin','user','agent','telephone','local','accountcode','callerid','getDataValue','BOOLEAN','DATE','INTEGER','friend','peer','ALLOWED_NOT_SCREENED','ALLOWED_FAILED_SCREEN','ALLOWED','PROHIB_NOT_SCREENED','PROHIB','udp','transport','join','split','info','inband','auto','yes','nonat','update','outgoing','force_rport,comedia','nat','ulaw;alaw;gsm','allow','insecure','never','\x22\x22\x20<>','accept','refuse','uac'];(function(_0x30d49f,_0xba546a){var _0x5f5c80=function(_0x370c62){while(--_0x370c62){_0x30d49f['push'](_0x30d49f['shift']());}};_0x5f5c80(++_0xba546a);}(_0x6695,0xae));var _0x5669=function(_0x4bd965,_0x49cb4a){_0x4bd965=_0x4bd965-0x0;var _0x3b7492=_0x6695[_0x4bd965];return _0x3b7492;};'use strict';var Sequelize=require(_0x5669('0x0'));var moment=require('moment');var util=require('util');var _=require(_0x5669('0x1'));module[_0x5669('0x2')]={'name':{'type':Sequelize[_0x5669('0x3')],'allowNull':![],'unique':_0x5669('0x4'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i},'set':function(_0x10c2b2){this[_0x5669('0x5')](_0x5669('0x4'),_0x10c2b2);this[_0x5669('0x5')](_0x5669('0x6'),_0x10c2b2);},'comment':_0x5669('0x7')},'fullname':{'type':Sequelize['STRING'],'allowNull':![],'set':function(_0x22eb8c){this[_0x5669('0x5')](_0x5669('0x8'),_0x22eb8c);this[_0x5669('0x5')]('callerid',util[_0x5669('0x9')](_0x5669('0xa'),_0x22eb8c,this['getDataValue'](_0x5669('0xb'))));}},'alias':{'type':Sequelize[_0x5669('0x3')]},'email':{'type':Sequelize[_0x5669('0x3')],'allowNull':![],'unique':_0x5669('0xc'),'validate':{'isEmail':!![]},'set':function(_0x2cddca){if(_0x2cddca){this[_0x5669('0x5')](_0x5669('0xc'),_0x2cddca[_0x5669('0xd')]());}}},'role':{'type':Sequelize[_0x5669('0xe')](_0x5669('0xf'),_0x5669('0x10'),_0x5669('0x11'),_0x5669('0x12')),'allowNull':![]},'password':{'type':Sequelize[_0x5669('0x3')],'allowNull':![],'validate':{'notEmpty':!![]}},'provider':{'type':Sequelize[_0x5669('0x3')],'defaultValue':_0x5669('0x13')},'internal':{'type':Sequelize['INTEGER'](0xb),'allowNull':![],'unique':_0x5669('0xb'),'set':function(_0x48d074){this[_0x5669('0x5')](_0x5669('0xb'),_0x48d074);this[_0x5669('0x5')](_0x5669('0x14'),_0x48d074);this['setDataValue'](_0x5669('0x15'),util['format'](_0x5669('0xa'),this[_0x5669('0x16')](_0x5669('0x8')),_0x48d074));}},'salt':{'type':Sequelize[_0x5669('0x3')]},'phone':{'type':Sequelize[_0x5669('0x3')]},'mobile':{'type':Sequelize[_0x5669('0x3')]},'address':{'type':Sequelize[_0x5669('0x3')]},'zipcode':{'type':Sequelize[_0x5669('0x3')]},'userpic':{'type':Sequelize[_0x5669('0x3')]},'city':{'type':Sequelize['STRING']},'country':{'type':Sequelize['STRING']},'online':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'lastLoginAt':{'type':Sequelize[_0x5669('0x18')]},'voicePause':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'chatPause':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'mailPause':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'faxPause':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'smsPause':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'openchannelPause':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'pauseType':{'type':Sequelize[_0x5669('0x3')],'defaultValue':'DEFAULT\x20PAUSE'},'lastPauseAt':{'type':Sequelize[_0x5669('0x18')]},'chatCapacity':{'type':Sequelize[_0x5669('0x19')],'defaultValue':0x0},'mailCapacity':{'type':Sequelize[_0x5669('0x19')],'defaultValue':0x0},'faxCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'smsCapacity':{'type':Sequelize[_0x5669('0x19')],'defaultValue':0x0},'openchannelCapacity':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'phoneBarAutoAnswer':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'phoneBarEnableSettings':{'type':Sequelize[_0x5669('0x17')],'defaultValue':!![]},'phoneBarListenPort':{'type':Sequelize[_0x5669('0x19')](0x5),'defaultValue':0x1428},'phoneBarExpires':{'type':Sequelize['INTEGER'](0x5),'defaultValue':0x78},'phoneBarRemoteControl':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'phoneBarRemoteControlPort':{'type':Sequelize[_0x5669('0x19')],'defaultValue':0x26a0},'phoneBarEnableRecording':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'phoneBarRingInUse':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'chanspy':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'description':{'type':Sequelize['STRING'],'allowNull':!![]},'host':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![],'defaultValue':'dynamic'},'ipaddr':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'port':{'type':Sequelize['INTEGER'](0x5),'allowNull':!![]},'regseconds':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'fullcontact':{'type':Sequelize['STRING'],'allowNull':!![]},'regserver':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'useragent':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'lastms':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'type':{'type':Sequelize['ENUM'](_0x5669('0x1a'),_0x5669('0x10'),_0x5669('0x1b')),'allowNull':!![],'defaultValue':_0x5669('0x1a')},'context':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![],'defaultValue':'from-sip'},'callingpres':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x1c'),'ALLOWED_PASSED_SCREEN',_0x5669('0x1d'),_0x5669('0x1e'),_0x5669('0x1f'),'PROHIB_PASSED_SCREEN','PROHIB_FAILED_SCREEN',_0x5669('0x20')),'allowNull':!![]},'deny':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'permit':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'secret':{'type':Sequelize['STRING'],'allowNull':!![]},'md5secret':{'type':Sequelize['STRING'],'allowNull':!![]},'remotesecret':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'transport':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![],'defaultValue':_0x5669('0x21'),'set':function(_0x3393ee){this[_0x5669('0x5')](_0x5669('0x22'),_0x3393ee?_0x3393ee[_0x5669('0x23')](','):null);},'get':function(){return this[_0x5669('0x16')]('transport')?this[_0x5669('0x16')]('transport')[_0x5669('0x24')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22udp\x22,\x20\x22tcp\x22]'},'dtmfmode':{'type':Sequelize[_0x5669('0xe')]('rfc2833',_0x5669('0x25'),'shortinfo',_0x5669('0x26'),_0x5669('0x27')),'allowNull':!![],'defaultValue':'rfc2833'},'directmedia':{'type':Sequelize['ENUM'](_0x5669('0x28'),'no',_0x5669('0x29'),_0x5669('0x2a'),_0x5669('0x2b')),'allowNull':!![],'defaultValue':'no'},'directrtpsetup':{'type':Sequelize['ENUM'](_0x5669('0x28'),'no'),'allowNull':!![],'defaultValue':'no'},'directmediapermit':{'type':Sequelize['STRING'],'allowNull':!![]},'directmediadeny':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'nat':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![],'defaultValue':_0x5669('0x2c'),'set':function(_0x4887f9){this['setDataValue'](_0x5669('0x2d'),_0x4887f9?_0x4887f9[_0x5669('0x23')](','):null);},'get':function(){return this['getDataValue'](_0x5669('0x2d'))?this[_0x5669('0x16')](_0x5669('0x2d'))[_0x5669('0x24')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22force_rport\x22,\x20\x22comedia\x22]'},'callgroup':{'type':Sequelize[_0x5669('0x3')]},'namedcallgroup':{'type':Sequelize['STRING']},'pickupgroup':{'type':Sequelize[_0x5669('0x3')]},'namedpickupgroup':{'type':Sequelize[_0x5669('0x3')]},'language':{'type':Sequelize[_0x5669('0x3')],'defaultValue':'en'},'tonezone':{'type':Sequelize[_0x5669('0x3')]},'disallow':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'all'},'allow':{'type':Sequelize[_0x5669('0x3')],'allowNull':![],'defaultValue':_0x5669('0x2e'),'set':function(_0x157966){this[_0x5669('0x5')]('allow',_0x157966?_0x157966[_0x5669('0x23')](';'):_0x5669('0x2e'));},'get':function(){return this[_0x5669('0x16')](_0x5669('0x2f'))?this[_0x5669('0x16')](_0x5669('0x2f'))[_0x5669('0x24')](';'):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22ulaw\x22,\x20\x22alaw\x22,\x20\x22gsm\x22]'},'autoframing':{'type':Sequelize[_0x5669('0xe')]('yes','no'),'allowNull':!![]},'insecure':{'type':Sequelize['STRING'],'allowNull':!![],'set':function(_0x5580fe){this[_0x5669('0x5')](_0x5669('0x30'),_0x5580fe?_0x5580fe[_0x5669('0x23')](','):null);},'get':function(){return this[_0x5669('0x16')](_0x5669('0x30'))?this[_0x5669('0x16')](_0x5669('0x30'))[_0x5669('0x24')](','):null;},'comment':'String\x20is\x20deprecated.\x20Please\x20use\x20an\x20Array\x20as\x20[\x22port\x22,\x20\x22invite\x22]'},'trustrpid':{'type':Sequelize['ENUM'](_0x5669('0x28'),'no'),'allowNull':!![],'defaultValue':'no'},'trust_id_outbound':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![],'defaultValue':'no'},'progressinband':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no',_0x5669('0x31')),'allowNull':!![]},'promiscredir':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'useclientcode':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'accountcode':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'setvar':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'callerid':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![],'defaultValue':_0x5669('0x32')},'amaflags':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'callcounter':{'type':Sequelize[_0x5669('0xe')]('yes','no'),'allowNull':!![],'defaultValue':_0x5669('0x28')},'busylevel':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'allowoverlap':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'allowsubscribe':{'type':Sequelize[_0x5669('0xe')]('yes','no'),'allowNull':!![]},'allowtransfer':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'ignoresdpversion':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'subscribecontext':{'type':Sequelize['STRING'],'allowNull':!![]},'template':{'type':Sequelize['STRING'],'allowNull':!![]},'videosupport':{'type':Sequelize['ENUM']('yes','no','always'),'allowNull':!![],'defaultValue':'no'},'maxcallbitrate':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'rfc2833compensate':{'type':Sequelize['ENUM'](_0x5669('0x28'),'no'),'allowNull':!![]},'mailbox':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'session_timers':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x33'),_0x5669('0x34'),'originate'),'allowNull':!![]},'session_expires':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'session_minse':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'session_refresher':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x35'),_0x5669('0x36')),'allowNull':!![],'defaultValue':_0x5669('0x36')},'t38pt_usertpsource':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'regexten':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'fromdomain':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'fromuser':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'qualify':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![],'defaultValue':'yes'},'keepalive':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'defaultip':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'defaultuser':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'rtptimeout':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'rtpholdtimeout':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'rtpkeepalive':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'sendrpid':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![],'defaultValue':'no'},'outboundproxy':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'callbackextension':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'timert1':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'timerb':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'qualifyfreq':{'type':Sequelize['INTEGER'](0xb),'allowNull':!![]},'contactpermit':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'contactdeny':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'contactacl':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'unsolicited_mailbox':{'type':Sequelize['STRING'],'allowNull':!![]},'use_q850_reason':{'type':Sequelize['STRING'],'allowNull':!![]},'maxforwards':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'encryption':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![],'defaultValue':'no'},'avpf':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'force_avp':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'icesupport':{'type':Sequelize['ENUM'](_0x5669('0x28'),'no'),'allowNull':!![]},'dtlsenable':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'dtlsverify':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no','fingerprint',_0x5669('0x37')),'allowNull':!![]},'dtlsrekey':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![]},'dtlscertfile':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'dtlsprivatekey':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'dtlscipher':{'type':Sequelize['STRING'],'allowNull':!![]},'dtlscafile':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'dtlscapath':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'dtlssetup':{'type':Sequelize['ENUM'](_0x5669('0x38'),_0x5669('0x39'),_0x5669('0x3a')),'allowNull':!![]},'dtlsfingerprint':{'type':Sequelize['STRING'],'allowNull':!![]},'usereqphone':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![],'defaultValue':'no'},'recordonfeature':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'recordofffeature':{'type':Sequelize['STRING'],'allowNull':!![]},'call_limit':{'type':Sequelize[_0x5669('0x19')](0xb),'allowNull':!![],'defaultValue':0xa},'registertrying':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'subscribemwi':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'allowNull':!![]},'vmexten':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'mohinterpret':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'mohsuggest':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'parkinglot':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]},'canreinvite':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no',_0x5669('0x29'),_0x5669('0x2a'),_0x5669('0x3b')),'allowNull':!![],'defaultValue':'no'},'loginInPause':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'resetPasswordToken':{'type':Sequelize['STRING']},'resetPasswordExpires':{'type':Sequelize[_0x5669('0x18')]},'showWebBar':{'type':Sequelize[_0x5669('0x19')],'defaultValue':0x0,'set':function(_0x14773a){this[_0x5669('0x5')](_0x5669('0x3c'),_0x14773a);var _0x26a054=this['get']({'plain':!![]});switch(_0x14773a){case 0x0:case 0x1:var _0x5b9175=_0x26a054[_0x5669('0x22')]?_[_0x5669('0x3d')](_0x26a054[_0x5669('0x22')])?_0x26a054[_0x5669('0x22')][_0x5669('0x23')]():_0x26a054[_0x5669('0x22')]:'udp';if(_0x5b9175==='wss'){_0x5b9175=_0x5669('0x21');}this[_0x5669('0x5')]('transport',_0x5b9175);this[_0x5669('0x5')]('encryption','no');this[_0x5669('0x5')](_0x5669('0x3e'),null);this[_0x5669('0x5')](_0x5669('0x3f'),null);this[_0x5669('0x5')](_0x5669('0x40'),null);this[_0x5669('0x5')]('dtlsenable',null);this[_0x5669('0x5')]('dtlsverify',null);this['setDataValue'](_0x5669('0x41'),null);this[_0x5669('0x5')](_0x5669('0x42'),null);this[_0x5669('0x5')](_0x5669('0x43'),null);this[_0x5669('0x5')]('rtcp_mux','no');break;case 0x2:this['setDataValue'](_0x5669('0x22'),_0x5669('0x44'));this[_0x5669('0x5')](_0x5669('0x45'),_0x5669('0x28'));this[_0x5669('0x5')](_0x5669('0x3e'),_0x5669('0x28'));this[_0x5669('0x5')](_0x5669('0x3f'),_0x5669('0x28'));this[_0x5669('0x5')](_0x5669('0x40'),_0x5669('0x28'));this[_0x5669('0x5')](_0x5669('0x46'),'yes');this[_0x5669('0x5')](_0x5669('0x47'),'no');this['setDataValue']('dtlssetup',_0x5669('0x3a'));this[_0x5669('0x5')]('dtlscertfile',_0x26a054[_0x5669('0x42')]||_0x5669('0x48'));this[_0x5669('0x5')](_0x5669('0x43'),_0x26a054[_0x5669('0x43')]||'/etc/pki/tls/private/motion.key');this[_0x5669('0x5')]('rtcp_mux',_0x5669('0x28'));break;default:}}},'permissions':{'type':Sequelize[_0x5669('0x49')],'set':function(_0x46d096){this[_0x5669('0x5')](_0x5669('0x4a'),_0x46d096?_0x46d096[_0x5669('0x23')](','):[]);},'get':function(){return this[_0x5669('0x16')](_0x5669('0x4a'))?_[_0x5669('0x4b')](this[_0x5669('0x16')](_0x5669('0x4a'))[_0x5669('0x24')](','),function(_0x542461){return parseInt(_0x542461,0xa);}):[];}},'phoneBarUnconditionalNumber':{'type':Sequelize[_0x5669('0x3')]},'phoneBarNoReplyNumber':{'type':Sequelize['STRING']},'phoneBarBusyNumber':{'type':Sequelize[_0x5669('0x3')]},'phoneBarUnconditional':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarNoReply':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'phoneBarBusy':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'phoneBarDnd':{'type':Sequelize[_0x5669('0x17')],'defaultValue':!![]},'phoneBarUnansweredCallBadge':{'type':Sequelize[_0x5669('0x17')],'defaultValue':!![]},'phoneBarEnableDtmfTone':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'phoneBarAutoAnswerDelay':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'extensionMonitor':{'type':Sequelize[_0x5669('0x3')],'defaultValue':''},'crudPermissions':{'type':Sequelize[_0x5669('0x19')],'defaultValue':0x0},'rtcp_mux':{'type':Sequelize[_0x5669('0xe')](_0x5669('0x28'),'no'),'defaultValue':'no'},'allowmessenger':{'type':Sequelize[_0x5669('0x17')],'defaultValue':!![]},'phoneBarOutboundProxy':{'type':Sequelize['STRING']},'passwordResetAt':{'type':Sequelize[_0x5669('0x18')],'defaultValue':null},'phoneBarEnableJaws':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'phoneBarEnableVideoRecording':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'phoneBarPrefixRequired':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'hotdesk':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'interface':{'type':Sequelize[_0x5669('0x3')],'defaultValue':null},'privacyEnabled':{'type':Sequelize[_0x5669('0x17')],'defaultValue':![]},'apiKeyNonce':{'type':Sequelize['STRING'],'allowNull':!![]},'apiKeyIat':{'type':Sequelize[_0x5669('0x3')],'allowNull':!![]}};
\ No newline at end of file
index c1ce852..a75ee4a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x700f=['device','PAUSE','LOGININPAUSE','MemberReport','logout','pause','QueuePause','DEFAULT\x20PAUSE','type','unpause','openchannelPause','pauseType','lastPauseAt','mail','chat','fax','sms','openchannel','manual','getTeams','Team','addTeams','removeTeams','getLists','CmList','getAgents','values','You\x20can\x27t\x20delete\x20yourself','addChatInteractions','user_has_chat_interactions:save','removeChatInteractions','isArray','user_has_chat_interactions:remove','addMailInteractions','spread','user_has_mail_interactions:save','removeMailInteractions','user_has_mail_interactions:remove','addFaxInteractions','user_has_fax_interactions:save','removeFaxInteractions','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','addFaxAccounts','getMailAccounts','removeMailAccounts','getOpenchannelAccounts','OpenchannelAccount','addOpenchannelAccounts','removeOpenchannelAccounts','getSmsAccounts','addSmsAccounts','removeSmsAccounts','getChatWebsites','ChatWebsite','addChatWebsites','removeChatWebsites','SquareProject','getSquareProjects','addSquareProjects','getScheduledCalls','concat','$or','$gt','$gte','$lt','$ne','$eq','$not','$between','$notBetween','$in','$notIn','$notLike','$iLike','$notILike','$like','$contains','$contained','$any','lastName','dialActive','VoiceQueue','getApiKey','No\x20API\x20access\x20key\x20found!','generateApiKey','apiKeyNonce','apiKeyIat','removeApiKey','API\x20key\x20not\x20available','html-pdf','eml-format','rimraf','fast-json-patch','moment','bluebird','util','path','sox','lodash','squel','crypto','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','./user.socket','register','jayson/promise','http','request','then','User,\x20%s,\x20%s','debug','request\x20sent','stringify','code','error','message','result','catch','sendStatus','status','end','json','limit','set','Content-Range','apply','reject','save','get','Users','user','Agents','agent','Telephones','ignore','value','includes','role','find','name','UserProfileResource','destroy','stack','send','index','User','rawAttributes','model','keys','salt','filters','query','attributes','intersection','fields','length','hasOwnProperty','nolimit','offset','sort','pick','where','merge','lower','sequelize','filter','options','count','includeAll','include','rows','show','params','password','bulkCreate','update','body','describe','addContacts','ids','omit','agent\x20role','telephone','../../config/license/util','getLicense','isNil','License\x20limit\x20reached','format','count\x20%s:\x20%s','create','internal','findById','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)','from','voicemail','mailbox','VoiceMail','email','102','103','110','104','105','106','107','108','100','111','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','changePassword','oldPassword','newPassword','Sequelize','ValidationError','Invalid\x20body\x20format.\x20Use\x20oldPassord\x20and\x20newPassword','authenticate','Wrong\x20credentials','New\x20password\x20must\x20be\x20different\x20from\x20old\x20password','Unauthorized','addQueues','loginInPause','isValidChannel','Unknown\x20channel','add','capitalize','channel','toLowerCase','penalty','QueueId','emit','Queue:save','voice','push','interface','SIP/%s','voicePause','each','UserVoiceQueueRt','upsert','removeQueues','remove','Queues','Queue:remove','addAvatar','userpic','file','filename','getAvatar','join','server/files/images/logos/default_profile.png','download','existsSync','root','server/files/images/','getContacts','CmContact','map','List','Tag','color','tag','findOne','Queue','order','admin','findAll','Unknown\x20role','getVoiceQueuesRt','getGroups','VoiceRecording','ChatInteraction','getChatInteractions','getOpenchannelInteractions','OpenchannelInteraction','UserId','MailInteraction','getSmsInteractions','SmsInteraction','FaxInteraction','getFaxInteractions','phone','mobile','LOCAL/%s@from-sip/n','intrf','user:%s','headers','x-forwarded-for','connection','remoteAddress','socket','UserVoiceQueue.penalty','forEach','YYYY-MM-DD\x20HH:mm:ss','all','getChannels','LOGIN'];(function(_0x2fd82b,_0x26d7e0){var _0x5bbaa7=function(_0x72afda){while(--_0x72afda){_0x2fd82b['push'](_0x2fd82b['shift']());}};_0x5bbaa7(++_0x26d7e0);}(_0x700f,0x1a6));var _0xf700=function(_0x43251e,_0x584e7f){_0x43251e=_0x43251e-0x0;var _0x5c8edc=_0x700f[_0x43251e];return _0x5c8edc;};'use strict';var pdf=require(_0xf700('0x0'));var emlformat=require(_0xf700('0x1'));var rimraf=require(_0xf700('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xf700('0x3'));var rp=require('request-promise');var moment=require(_0xf700('0x4'));var BPromise=require(_0xf700('0x5'));var Mustache=require('mustache');var util=require(_0xf700('0x6'));var path=require(_0xf700('0x7'));var sox=require(_0xf700('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xf700('0x9'));var squel=require(_0xf700('0xa'));var crypto=require(_0xf700('0xb'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xf700('0xc'));var querystring=require(_0xf700('0xd'));var Papa=require(_0xf700('0xe'));var authService=require(_0xf700('0xf'));var hardwareService=require(_0xf700('0x10'));var Redis=require(_0xf700('0x11'));var qs=require(_0xf700('0x12'));var logger=require(_0xf700('0x13'))(_0xf700('0x14'));var utils=require(_0xf700('0x15'));var config=require(_0xf700('0x16'));var db=require(_0xf700('0x17'))['db'];config[_0xf700('0x18')]=_[_0xf700('0x19')](config['redis'],{'host':_0xf700('0x1a'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0xf700('0x18')]));require(_0xf700('0x1b'))[_0xf700('0x1c')](socket);var jayson=require(_0xf700('0x1d'));var client=jayson['client'][_0xf700('0x1e')]({'port':0x232a});function respondWithRpcPromise(_0x1364b6,_0x2b171e,_0x29433d,_0x37efe8){return new BPromise(function(_0x582643,_0x59593e){var _0x1b8507=_0x37efe8||client;return _0x1b8507[_0xf700('0x1f')](_0x1364b6,_0x29433d)[_0xf700('0x20')](function(_0x59e1d7){logger['info'](_0xf700('0x21'),_0x2b171e,'request\x20sent');logger[_0xf700('0x22')]('User,\x20%s,\x20%s,\x20%s',_0x2b171e,_0xf700('0x23'),JSON[_0xf700('0x24')](_0x59e1d7));if(_0x59e1d7['error']){if(_0x59e1d7['error'][_0xf700('0x25')]===0x1f4){logger[_0xf700('0x26')](_0xf700('0x21'),_0x2b171e,_0x59e1d7[_0xf700('0x26')][_0xf700('0x27')]);return _0x59593e(_0x59e1d7[_0xf700('0x26')][_0xf700('0x27')]);}logger[_0xf700('0x26')](_0xf700('0x21'),_0x2b171e,_0x59e1d7[_0xf700('0x26')]['message']);return _0x582643(_0x59e1d7[_0xf700('0x26')][_0xf700('0x27')]);}else{logger['info']('User,\x20%s,\x20%s',_0x2b171e,_0xf700('0x23'));_0x582643(_0x59e1d7[_0xf700('0x28')][_0xf700('0x27')]);}})[_0xf700('0x29')](function(_0x47f08a){logger['error'](_0xf700('0x21'),_0x2b171e,_0x47f08a);_0x59593e(_0x47f08a);});});}function respondWithStatusCode(_0x47e58a,_0x4d27d7){_0x4d27d7=_0x4d27d7||0xcc;return function(_0x579721){if(_0x579721){return _0x47e58a[_0xf700('0x2a')](_0x4d27d7);}return _0x47e58a[_0xf700('0x2b')](_0x4d27d7)[_0xf700('0x2c')]();};}function respondWithResult(_0x3b8fd6,_0x358403){_0x358403=_0x358403||0xc8;return function(_0x2493d6){if(_0x2493d6){return _0x3b8fd6[_0xf700('0x2b')](_0x358403)[_0xf700('0x2d')](_0x2493d6);}};}function respondWithFilteredResult(_0x1729a7,_0x100bc8){return function(_0x3a8824){if(_0x3a8824){var _0x27cfb7=_0x3a8824['count'],_0x5aef49=_0x100bc8['offset'],_0x5ae89a=_0x100bc8['offset']+_0x100bc8[_0xf700('0x2e')],_0x35c67d;if(_0x5ae89a>=_0x27cfb7){_0x5ae89a=_0x27cfb7;_0x35c67d=0xc8;}else{_0x35c67d=0xce;}_0x1729a7['status'](_0x35c67d);return _0x1729a7[_0xf700('0x2f')](_0xf700('0x30'),_0x5aef49+'-'+_0x5ae89a+'/'+_0x27cfb7)[_0xf700('0x2d')](_0x3a8824);}return null;};}function patchUpdates(_0x2dd673){return function(_0x12e71e){try{jsonpatch[_0xf700('0x31')](_0x12e71e,_0x2dd673,!![]);}catch(_0x511381){return BPromise[_0xf700('0x32')](_0x511381);}return _0x12e71e[_0xf700('0x33')]();};}function saveUpdates(_0x400437,_0x3bb64f){return function(_0x4e4b72){if(_0x4e4b72){return _0x4e4b72['update'](_0x400437)[_0xf700('0x20')](function(_0x5c8cf8){return _0x5c8cf8;});}return null;};}function removeEntity(_0xf067fe,_0x5dc261){return function(_0x3091a4){if(_0x3091a4){return _0x3091a4['destroy']()[_0xf700('0x20')](function(){var _0x13cc99=_0x3091a4[_0xf700('0x34')]({'plain':!![]});var _0x2e13bc=[{'name':_0xf700('0x35'),'value':_0xf700('0x36'),'ignore':!![]},{'name':_0xf700('0x37'),'value':_0xf700('0x38'),'ignore':![]},{'name':_0xf700('0x39'),'value':'telephone','ignore':![]}];var _0x172263=_(_0x2e13bc)['filter'](_0xf700('0x3a'))['map'](_0xf700('0x3b'))[_0xf700('0x3b')]();if(_[_0xf700('0x3c')](_0x172263,_0x13cc99[_0xf700('0x3d')])){return;}var _0x47c883=_[_0xf700('0x3e')](_0x2e13bc,[_0xf700('0x3b'),_0x13cc99[_0xf700('0x3d')]])[_0xf700('0x3f')];return db[_0xf700('0x40')][_0xf700('0x41')]({'where':{'type':_0x47c883,'resourceId':_0x13cc99['id']}})[_0xf700('0x20')](function(){return _0x3091a4;});})[_0xf700('0x20')](function(){_0xf067fe[_0xf700('0x2b')](0xcc)[_0xf700('0x2c')]();});}};}function handleEntityNotFound(_0x672fb1,_0x4ade73){return function(_0x232f68){if(!_0x232f68){_0x672fb1[_0xf700('0x2a')](0x194);}return _0x232f68;};}function handleError(_0x5db48b,_0x3195ab){_0x3195ab=_0x3195ab||0x1f4;return function(_0xa8d5e1){logger[_0xf700('0x26')](_0xa8d5e1[_0xf700('0x42')]);if(_0xa8d5e1['name']){delete _0xa8d5e1[_0xf700('0x3f')];}_0x5db48b[_0xf700('0x2b')](_0x3195ab)[_0xf700('0x43')](_0xa8d5e1);};}exports[_0xf700('0x44')]=function(_0x14c7fc,_0x261588){var _0x16180a={},_0x34325a={},_0x13d464={'count':0x0,'rows':[]};var _0x2f8b2c=db[_0xf700('0x45')][_0xf700('0x46')];_0x34325a[_0xf700('0x47')]=_['differenceBy'](_[_0xf700('0x48')](_0x2f8b2c),['password',_0xf700('0x49')]);_0x34325a['query']=_[_0xf700('0x48')](_0x14c7fc['query']);_0x34325a[_0xf700('0x4a')]=_['intersection'](_0x34325a['model'],_0x34325a[_0xf700('0x4b')]);_0x16180a[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x34325a[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x14c7fc[_0xf700('0x4b')][_0xf700('0x4e')]));_0x16180a[_0xf700('0x4c')]=_0x16180a[_0xf700('0x4c')][_0xf700('0x4f')]?_0x16180a[_0xf700('0x4c')]:_0x34325a[_0xf700('0x47')];if(!_0x14c7fc['query'][_0xf700('0x50')](_0xf700('0x51'))){_0x16180a[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x14c7fc[_0xf700('0x4b')][_0xf700('0x2e')]);_0x16180a['offset']=qs[_0xf700('0x52')](_0x14c7fc[_0xf700('0x4b')][_0xf700('0x52')]);}_0x16180a['order']=qs[_0xf700('0x53')](_0x14c7fc[_0xf700('0x4b')][_0xf700('0x53')]);_0x16180a['where']=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x14c7fc['query'],_0x34325a[_0xf700('0x4a')]));if(_0x14c7fc[_0xf700('0x4b')]['filter']){_0x16180a[_0xf700('0x55')]=_[_0xf700('0x56')](_0x16180a['where'],{'$or':_['map'](_0x2f8b2c,function(_0xe25430){return db['sequelize']['where'](db['sequelize']['fn'](_0xf700('0x57'),db[_0xf700('0x58')]['col'](_0xe25430['field'])),{'$like':db[_0xf700('0x58')]['fn'](_0xf700('0x57'),'%'+_0x14c7fc[_0xf700('0x4b')][_0xf700('0x59')]+'%')});})});}_0x16180a=_[_0xf700('0x56')]({},_0x16180a,_0x14c7fc[_0xf700('0x5a')]);var _0x378587={'where':_0x16180a[_0xf700('0x55')]};return db[_0xf700('0x45')][_0xf700('0x5b')](_0x378587)[_0xf700('0x20')](function(_0x13bf5c){_0x13d464['count']=_0x13bf5c;if(_0x14c7fc[_0xf700('0x4b')][_0xf700('0x5c')]){_0x16180a[_0xf700('0x5d')]=[{'all':!![]}];}return db[_0xf700('0x45')]['findAll'](_0x16180a);})[_0xf700('0x20')](function(_0x5a3dc9){_0x13d464[_0xf700('0x5e')]=_0x5a3dc9;return _0x13d464;})['then'](respondWithFilteredResult(_0x261588,_0x16180a))[_0xf700('0x29')](handleError(_0x261588,null));};exports[_0xf700('0x5f')]=function(_0x20b384,_0x394952){var _0x254b6c={'raw':![],'where':{'id':_0x20b384[_0xf700('0x60')]['id']}},_0x3263d4={};_0x3263d4[_0xf700('0x47')]=_['differenceBy'](_[_0xf700('0x48')](db[_0xf700('0x45')][_0xf700('0x46')]),[_0xf700('0x61'),_0xf700('0x49')]);_0x3263d4[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x20b384[_0xf700('0x4b')]);_0x3263d4[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x3263d4[_0xf700('0x47')],_0x3263d4[_0xf700('0x4b')]);_0x254b6c[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x3263d4[_0xf700('0x47')],qs['fields'](_0x20b384[_0xf700('0x4b')]['fields']));_0x254b6c[_0xf700('0x4c')]=_0x254b6c[_0xf700('0x4c')][_0xf700('0x4f')]?_0x254b6c[_0xf700('0x4c')]:_0x3263d4[_0xf700('0x47')];if(_0x20b384[_0xf700('0x4b')][_0xf700('0x5c')]){_0x254b6c[_0xf700('0x5d')]=[{'all':!![]}];}_0x254b6c=_[_0xf700('0x56')]({},_0x254b6c,_0x20b384[_0xf700('0x5a')]);return db[_0xf700('0x45')][_0xf700('0x3e')](_0x254b6c)[_0xf700('0x20')](handleEntityNotFound(_0x394952,null))['then'](respondWithResult(_0x394952,null))[_0xf700('0x29')](handleError(_0x394952,null));};exports['bulkCreate']=function(_0x13b64b,_0x325f34){return db['User'][_0xf700('0x62')](_0x13b64b['body'],{'raw':![],'individualHooks':!![]})['then'](respondWithResult(_0x325f34,0xc9))[_0xf700('0x29')](handleError(_0x325f34,null));};exports[_0xf700('0x63')]=function(_0xa2a91d,_0x2a2006){if(_0xa2a91d[_0xf700('0x64')]['id']){delete _0xa2a91d[_0xf700('0x64')]['id'];}delete _0xa2a91d['body']['role'];return db['User'][_0xf700('0x3e')]({'where':{'id':_0xa2a91d[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x2a2006,null))[_0xf700('0x20')](saveUpdates(_0xa2a91d[_0xf700('0x64')],null))[_0xf700('0x20')](respondWithResult(_0x2a2006,null))['catch'](handleError(_0x2a2006,null));};exports[_0xf700('0x65')]=function(_0x3f2c74,_0x52ec72){return db[_0xf700('0x45')][_0xf700('0x65')]()[_0xf700('0x20')](respondWithResult(_0x52ec72,null))[_0xf700('0x29')](handleError(_0x52ec72,null));};exports[_0xf700('0x66')]=function(_0x3c5ee5,_0x2760d3,_0x3d9b33){return db['User'][_0xf700('0x3e')]({'where':{'id':_0x3c5ee5['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x2760d3,null))[_0xf700('0x20')](function(_0x361568){if(_0x361568){return _0x361568[_0xf700('0x66')](_0x3c5ee5[_0xf700('0x64')][_0xf700('0x67')],_[_0xf700('0x68')](_0x3c5ee5[_0xf700('0x64')],['ids','id'])||{});}})[_0xf700('0x20')](respondWithResult(_0x2760d3,null))['catch'](handleError(_0x2760d3,null));};var getLicense=function(_0x2e7962){return new BPromise(function(_0x145195,_0x2e17e9){var _0x1f48c9=0x0;_0x2e7962[_0xf700('0x64')][_0xf700('0x3d')]==='agent'&&_0x145195(_0xf700('0x69'));return db[_0xf700('0x45')][_0xf700('0x5b')]({'where':{'$or':[{'role':_0x2e7962[_0xf700('0x64')][_0xf700('0x3d')]==='telephone'?_0xf700('0x6a'):['admin',_0xf700('0x36')]}]}})[_0xf700('0x20')](function(_0x208a9f){_0x1f48c9=_0x208a9f;return require(_0xf700('0x6b'))[_0xf700('0x6c')]();})[_0xf700('0x20')](function(_0x545850){var _0x293d0e=_0x2e7962[_0xf700('0x64')][_0xf700('0x3d')]===_0xf700('0x6a')?'telephones':'users';if(!_[_0xf700('0x6d')](_0x545850[_0x293d0e])&&_0x1f48c9>=_0x545850[_0x293d0e]){return _0x2e17e9({'message':_0xf700('0x6e')});}return _0x145195(util[_0xf700('0x6f')](_0xf700('0x70'),_0x293d0e,_0x1f48c9));})['catch'](function(_0x30eaed){return _0x2e17e9(_0x30eaed);});});};exports[_0xf700('0x71')]=function(_0x48aad6,_0x1abdb8){return getLicense(_0x48aad6)[_0xf700('0x20')](function(_0x43fb1c){if(!_0x48aad6[_0xf700('0x64')][_0xf700('0x72')]){var _0x4f8ca9;return db['Setting'][_0xf700('0x73')](0x1)[_0xf700('0x20')](function(_0x86eb3e){_0x4f8ca9=_0x86eb3e[_0xf700('0x74')];return db['User'][_0xf700('0x75')](_0xf700('0x72'));})[_0xf700('0x20')](function(_0x46ef2f){if(_[_0xf700('0x6d')](_0x46ef2f)){if(_0x4f8ca9){_0x48aad6[_0xf700('0x64')][_0xf700('0x72')]=_0x4f8ca9;}else{_0x48aad6[_0xf700('0x64')][_0xf700('0x72')]=0x1;}}else{if(_['isNil'](_0x4f8ca9)||_0x4f8ca9==_0x46ef2f){_0x48aad6[_0xf700('0x64')]['internal']=_0x46ef2f+0x1;}else if(_0x4f8ca9>_0x46ef2f){_0x48aad6[_0xf700('0x64')][_0xf700('0x72')]=_0x4f8ca9;}else{return db[_0xf700('0x58')][_0xf700('0x4b')](_0xf700('0x76'),{'type':db[_0xf700('0x58')]['QueryTypes']['SELECT']})[_0xf700('0x20')](function(_0x2c26ec){if(_0x2c26ec&&_0x2c26ec[_0xf700('0x4f')]){for(var _0x19a851=0x0,_0x234f2a=_0x2c26ec[_0xf700('0x4f')];_0x19a851<_0x234f2a&&_['isNil'](_0x48aad6[_0xf700('0x64')][_0xf700('0x72')]);_0x19a851++){if(_0x4f8ca9<=_0x2c26ec[_0x19a851][_0xf700('0x77')]){_0x48aad6[_0xf700('0x64')]['internal']=_0x2c26ec[_0x19a851][_0xf700('0x77')];}else if(_0x4f8ca9>_0x2c26ec[_0x19a851][_0xf700('0x77')]&&_0x4f8ca9<=_0x2c26ec[_0x19a851]['to']){_0x48aad6[_0xf700('0x64')][_0xf700('0x72')]=_0x4f8ca9;}}}if(_[_0xf700('0x6d')](_0x48aad6[_0xf700('0x64')][_0xf700('0x72')])){_0x48aad6['body'][_0xf700('0x72')]=_0x46ef2f+0x1;}});}}});}})[_0xf700('0x20')](function(){if(_0x48aad6[_0xf700('0x64')][_0xf700('0x78')]){_0x48aad6[_0xf700('0x64')][_0xf700('0x79')]=_0x48aad6['body'][_0xf700('0x72')];_0x48aad6[_0xf700('0x64')][_0xf700('0x7a')]={'mailbox':_0x48aad6['body'][_0xf700('0x72')],'password':_0x48aad6[_0xf700('0x64')]['password'],'fullname':_0x48aad6[_0xf700('0x64')]['fullname'],'email':_0x48aad6['body'][_0xf700('0x7b')]};}if(_0x48aad6[_0xf700('0x64')]&&_0x48aad6[_0xf700('0x64')]['role']==='agent'){_0x48aad6['body']['permissions']=['101',_0xf700('0x7c'),_0xf700('0x7d'),_0xf700('0x7e'),_0xf700('0x7f'),_0xf700('0x80'),_0xf700('0x81'),_0xf700('0x82'),_0xf700('0x83'),'109',_0xf700('0x84'),_0xf700('0x85')];}return db[_0xf700('0x45')][_0xf700('0x71')](_0x48aad6['body'],{'include':[{'model':db[_0xf700('0x7a')],'as':_0xf700('0x7a')}]});})[_0xf700('0x20')](function(_0x506eee){if(_0x48aad6[_0xf700('0x64')]['role']===_0xf700('0x36'))return _0x506eee;var _0x1cdee3=_0x48aad6[_0xf700('0x36')][_0xf700('0x34')]({'plain':!![]});if(!_0x1cdee3)throw new Error(_0xf700('0x86'));if(_0x1cdee3[_0xf700('0x3d')]===_0xf700('0x36')){var _0x1fe634=_0x506eee[_0xf700('0x34')]({'plain':!![]});var _0xc77cfe=[{'name':_0xf700('0x37'),'value':'agent'},{'name':'Telephones','value':_0xf700('0x6a')}];var _0x528abd=_[_0xf700('0x3e')](_0xc77cfe,[_0xf700('0x3b'),_0x1fe634[_0xf700('0x3d')]])['name'];return db[_0xf700('0x87')][_0xf700('0x3e')]({'where':{'name':_0x528abd,'userProfileId':_0x1cdee3[_0xf700('0x88')]},'raw':!![]})[_0xf700('0x20')](function(_0x4d8716){if(_0x4d8716&&_0x4d8716[_0xf700('0x89')]===0x0){return db[_0xf700('0x40')][_0xf700('0x71')]({'name':_0x1fe634[_0xf700('0x3f')],'resourceId':_0x1fe634['id'],'type':_0x4d8716[_0xf700('0x3f')],'sectionId':_0x4d8716['id']},{})['then'](function(){return _0x506eee;});}else{return _0x506eee;}})[_0xf700('0x29')](function(_0x2dc068){logger[_0xf700('0x26')](_0xf700('0x8a'),_0x2dc068);throw _0x2dc068;});}return _0x506eee;})['then'](respondWithResult(_0x1abdb8,0xc9))['catch'](handleError(_0x1abdb8,null));};exports[_0xf700('0x8b')]=function(_0x2aecd4,_0x5a1f9b,_0x1652db){if(_0x2aecd4[_0xf700('0x64')]['id']){delete _0x2aecd4['body']['id'];}return db[_0xf700('0x45')]['find']({'where':{'id':_0x2aecd4[_0xf700('0x60')]['id']}})[_0xf700('0x20')](function(_0x49f925){if(_0x49f925){if(_0x49f925['id']==_0x2aecd4[_0xf700('0x36')]['id']){if(!_0x2aecd4[_0xf700('0x64')][_0xf700('0x8c')]||!_0x2aecd4['body'][_0xf700('0x8d')]){throw new db[(_0xf700('0x8e'))][(_0xf700('0x8f'))](_0xf700('0x90'));}if(!_0x49f925[_0xf700('0x91')](_0x2aecd4[_0xf700('0x64')][_0xf700('0x8c')])){throw new db['Sequelize'][(_0xf700('0x8f'))](_0xf700('0x92'));}if(_0x2aecd4[_0xf700('0x64')][_0xf700('0x8c')]==_0x2aecd4[_0xf700('0x64')][_0xf700('0x8d')]){throw new db[(_0xf700('0x8e'))][(_0xf700('0x8f'))](_0xf700('0x93'));}return _0x49f925;}else if(_0x2aecd4[_0xf700('0x36')][_0xf700('0x3d')]=='admin'){if(!_0x2aecd4[_0xf700('0x64')][_0xf700('0x8d')]){throw new db['Sequelize']['ValidationError']('Invalid\x20body\x20format.\x20Use\x20newPassword');}return _0x49f925;}else if(_0x2aecd4['user'][_0xf700('0x3d')]==_0xf700('0x36')){if(!_0x2aecd4[_0xf700('0x64')]['newPassword']){throw new db[(_0xf700('0x8e'))]['ValidationError']('Invalid\x20body\x20format.\x20Use\x20newPassword');}if(_0x49f925[_0xf700('0x3d')]!=_0xf700('0x38')){throw new db[(_0xf700('0x8e'))][(_0xf700('0x8f'))](_0xf700('0x94'));}return _0x49f925;}else{throw new db[(_0xf700('0x8e'))]['ValidationError']('Unauthorized');}}return null;})['then'](handleEntityNotFound(_0x5a1f9b,null))[_0xf700('0x20')](saveUpdates({'password':_0x2aecd4[_0xf700('0x64')][_0xf700('0x8d')],'passwordResetAt':_0x2aecd4[_0xf700('0x36')]['id']==_0x2aecd4[_0xf700('0x60')]['id']?moment():null},null))['then'](respondWithResult(_0x5a1f9b,null))[_0xf700('0x29')](handleError(_0x5a1f9b,null));};exports[_0xf700('0x95')]=function(_0x20e025,_0x1613f4,_0x21efb0){var _0x1e1783;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x20e025[_0xf700('0x60')]['id']},'attributes':['id',_0xf700('0x3f'),_0xf700('0x3d'),_0xf700('0x96'),'voicePause','interface']})['then'](handleEntityNotFound(_0x1613f4,null))[_0xf700('0x20')](function(_0x46a212){if(_0x46a212){_0x1e1783=_0x46a212;if(!utils[_0xf700('0x97')](_0x20e025[_0xf700('0x64')]['channel'])){throw new db[(_0xf700('0x8e'))][(_0xf700('0x8f'))](_0xf700('0x98'));}return _0x46a212[_0xf700('0x99')+_[_0xf700('0x9a')](_0x20e025[_0xf700('0x64')][_0xf700('0x9b')][_0xf700('0x9c')]())+'Queues'](_0x20e025['body']['ids'],{'penalty':_0x20e025[_0xf700('0x64')][_0xf700('0x9d')]||0x0});}})['spread'](function(_0xb55438){for(var _0x14ca9a=0x0;_0x14ca9a<_0x20e025[_0xf700('0x64')][_0xf700('0x67')][_0xf700('0x4f')];_0x14ca9a+=0x1){var _0x1785e2={'UserId':_0x20e025[_0xf700('0x60')]['id']};_0x1785e2[_[_0xf700('0x9a')](_0x20e025[_0xf700('0x64')][_0xf700('0x9b')][_0xf700('0x9c')]())+_0xf700('0x9e')]=_0x20e025[_0xf700('0x64')][_0xf700('0x67')][_0x14ca9a];socket[_0xf700('0x9f')](_0xf700('0x36')+_[_0xf700('0x9a')](_0x20e025[_0xf700('0x64')][_0xf700('0x9b')][_0xf700('0x9c')]())+_0xf700('0xa0'),_0x1785e2);}return _0xb55438;})['then'](function(){if(_0x20e025[_0xf700('0x64')][_0xf700('0x9b')]===_0xf700('0xa1')){return db['VoiceQueue']['findAll']({'where':{'id':_0x20e025[_0xf700('0x64')][_0xf700('0x67')]||[]},'raw':!![],'attributes':['id',_0xf700('0x3f')]});}})[_0xf700('0x20')](function(_0x41b572){var _0x59f3d1=[];if(_0x20e025[_0xf700('0x64')][_0xf700('0x9b')]===_0xf700('0xa1')&&_0x1e1783[_0xf700('0x3d')]==='agent'){for(var _0x221f18=0x0;_0x221f18<_0x41b572[_0xf700('0x4f')];_0x221f18+=0x1){_0x59f3d1[_0xf700('0xa2')]({'membername':_0x1e1783['name'],'UserId':_0x1e1783['id'],'queue_name':_0x41b572[_0x221f18][_0xf700('0x3f')],'VoiceQueueId':_0x41b572[_0x221f18]['id'],'interface':_[_0xf700('0x6d')](_0x1e1783[_0xf700('0xa3')])?util[_0xf700('0x6f')](_0xf700('0xa4'),_0x1e1783[_0xf700('0x3f')]):_0x1e1783[_0xf700('0xa3')],'paused':_0x1e1783[_0xf700('0xa5')]||![],'penalty':_0x20e025['body'][_0xf700('0x9d')]||0x0});}return BPromise[_0xf700('0xa6')](_0x59f3d1,function(_0x2538df){return db[_0xf700('0xa7')][_0xf700('0xa8')](_0x2538df);});}return _0x1e1783;})[_0xf700('0x20')](respondWithStatusCode(_0x1613f4,null))[_0xf700('0x29')](handleError(_0x1613f4,null));};exports[_0xf700('0xa9')]=function(_0xf7efe2,_0x1a5d52,_0x4f1583){var _0x49f362;return db[_0xf700('0x45')]['find']({'where':{'id':_0xf7efe2[_0xf700('0x60')]['id']},'attributes':['id','name',_0xf700('0x3d')]})[_0xf700('0x20')](handleEntityNotFound(_0x1a5d52,null))['then'](function(_0x11c779){if(_0x11c779){_0x49f362=_0x11c779;if(!_0xf7efe2['query'][_0xf700('0x9b')]||!utils[_0xf700('0x97')](_0xf7efe2[_0xf700('0x4b')][_0xf700('0x9b')])){throw new db[(_0xf700('0x8e'))][(_0xf700('0x8f'))](_0xf700('0x98'));}return _0x11c779[_0xf700('0xaa')+_[_0xf700('0x9a')](_0xf7efe2['query'][_0xf700('0x9b')][_0xf700('0x9c')]())+_0xf700('0xab')](_0xf7efe2[_0xf700('0x4b')][_0xf700('0x67')]);}})['then'](function(_0x2048d5){for(var _0x3a854d=0x0;_0x3a854d<_0xf7efe2[_0xf700('0x4b')][_0xf700('0x67')][_0xf700('0x4f')];_0x3a854d+=0x1){var _0x158f27={'UserId':_0xf7efe2[_0xf700('0x60')]['id']};_0x158f27[_['capitalize'](_0xf7efe2[_0xf700('0x4b')][_0xf700('0x9b')]['toLowerCase']())+_0xf700('0x9e')]=_0xf7efe2[_0xf700('0x4b')][_0xf700('0x67')][_0x3a854d];socket['emit'](_0xf700('0x36')+_[_0xf700('0x9a')](_0xf7efe2[_0xf700('0x4b')][_0xf700('0x9b')][_0xf700('0x9c')]())+_0xf700('0xac'),_0x158f27);}return _0x2048d5;})[_0xf700('0x20')](function(){if(_0xf7efe2[_0xf700('0x4b')][_0xf700('0x9b')]===_0xf700('0xa1')){return db[_0xf700('0xa7')][_0xf700('0x41')]({'where':{'UserId':_0xf7efe2[_0xf700('0x60')]['id'],'VoiceQueueId':_0xf7efe2[_0xf700('0x4b')][_0xf700('0x67')]},'individualHooks':!![]})[_0xf700('0x20')](function(){return _0x49f362;});}return _0x49f362;})[_0xf700('0x20')](respondWithStatusCode(_0x1a5d52,null))[_0xf700('0x29')](handleError(_0x1a5d52,null));};exports[_0xf700('0xad')]=function(_0x5319ec,_0x1bf2fc,_0x5721a2){_0x5319ec[_0xf700('0x64')][_0xf700('0xae')]=_0x5319ec[_0xf700('0xaf')][_0xf700('0xb0')];return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x5319ec[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x1bf2fc,null))['then'](saveUpdates(_0x5319ec[_0xf700('0x64')],null))[_0xf700('0x20')](respondWithResult(_0x1bf2fc,null))['catch'](handleError(_0x1bf2fc,null));};exports[_0xf700('0xb1')]=function(_0x537b26,_0x392fdf,_0x4d2dd8){var _0x24aa97=path[_0xf700('0xb2')](config['root'],_0xf700('0xb3'));return db[_0xf700('0x45')]['find']({'where':{'id':_0x537b26[_0xf700('0x60')]['id']},'attributes':['id',_0xf700('0xae')],'raw':!![]})[_0xf700('0x20')](handleEntityNotFound(_0x392fdf,null))[_0xf700('0x20')](function(_0x49a010){if(_0x49a010){if(_[_0xf700('0x6d')](_0x49a010[_0xf700('0xae')])){return _0x392fdf[_0xf700('0xb4')](_0x24aa97);}else{if(!fs[_0xf700('0xb5')](path[_0xf700('0xb2')](config[_0xf700('0xb6')],_0xf700('0xb7'),_0x49a010[_0xf700('0xae')]))){return _0x392fdf['download'](_0x24aa97);}return _0x392fdf['download'](path['join'](config[_0xf700('0xb6')],_0xf700('0xb7'),_0x49a010[_0xf700('0xae')]));}}})[_0xf700('0x29')](handleError(_0x392fdf,null));};exports[_0xf700('0xb8')]=function(_0x44065d,_0x4ff010,_0x3602b5){var _0x4b626b={};var _0x119b23={};var _0x23d6c7;var _0xd895a9;return db[_0xf700('0x45')]['findOne']({'where':{'id':_0x44065d[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x4ff010,null))[_0xf700('0x20')](function(_0x2b906b){if(_0x2b906b){_0x23d6c7=_0x2b906b;_0x119b23[_0xf700('0x47')]=_[_0xf700('0x48')](db[_0xf700('0xb9')][_0xf700('0x46')]);_0x119b23[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x44065d[_0xf700('0x4b')]);_0x119b23[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x119b23['model'],_0x119b23['query']);_0x4b626b[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x119b23[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x44065d[_0xf700('0x4b')]['fields']));_0x4b626b[_0xf700('0x4c')]=_0x4b626b[_0xf700('0x4c')][_0xf700('0x4f')]?_0x4b626b[_0xf700('0x4c')]:_0x119b23[_0xf700('0x47')];_0x4b626b['order']=qs[_0xf700('0x53')](_0x44065d[_0xf700('0x4b')][_0xf700('0x53')]);_0x4b626b['where']=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x44065d[_0xf700('0x4b')],_0x119b23[_0xf700('0x4a')]));if(_0x44065d[_0xf700('0x4b')][_0xf700('0x59')]){_0x4b626b[_0xf700('0x55')]=_[_0xf700('0x56')](_0x4b626b[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x4b626b['attributes'],function(_0x417cd5){var _0xe6e74f={};_0xe6e74f[_0x417cd5]={'$like':'%'+_0x44065d[_0xf700('0x4b')]['filter']+'%'};return _0xe6e74f;})});}_0x4b626b=_['merge']({},_0x4b626b,_0x44065d[_0xf700('0x5a')]);return _0x23d6c7[_0xf700('0xb8')](_0x4b626b);}})[_0xf700('0x20')](function(_0x1b4308){if(_0x1b4308){_0xd895a9=_0x1b4308[_0xf700('0x4f')];if(_0x44065d[_0xf700('0x4b')][_0xf700('0x50')](_0xf700('0x5c'))){_0x4b626b[_0xf700('0x5d')]=[{'model':db['CmList'],'as':_0xf700('0xbb'),'required':![]},{'model':db[_0xf700('0xbc')],'as':'Tags','attributes':['id',_0xf700('0x3f'),_0xf700('0xbd')],'where':_0x44065d['query'][_0xf700('0xbe')]?{'id':_0x44065d[_0xf700('0x4b')][_0xf700('0xbe')]}:undefined,'required':_0x44065d[_0xf700('0x4b')]['tag']?!![]:![]}];}if(!_0x44065d[_0xf700('0x4b')][_0xf700('0x50')](_0xf700('0x51'))){_0x4b626b[_0xf700('0x2e')]=qs['limit'](_0x44065d['query'][_0xf700('0x2e')]);_0x4b626b[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x44065d[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x23d6c7['getContacts'](_0x4b626b);}})[_0xf700('0x20')](function(_0x596e86){if(_0x596e86){return _0x596e86?{'count':_0xd895a9,'rows':_0x596e86}:null;}})[_0xf700('0x20')](respondWithResult(_0x4ff010,null))[_0xf700('0x29')](handleError(_0x4ff010,null));};exports['getQueues']=function(_0x20cf01,_0x2c5c1b,_0x20d0ec){var _0xd649e3;var _0x41a7a0;var _0x400110={};var _0x16fa87;return db['User'][_0xf700('0xbf')]({'where':{'id':_0x20cf01[_0xf700('0x60')]['id']},'attributes':['id',_0xf700('0x3f'),_0xf700('0x3d')]})[_0xf700('0x20')](handleEntityNotFound(_0x2c5c1b,null))['then'](function(_0x52e30e){if(!utils[_0xf700('0x97')](_0x20cf01[_0xf700('0x4b')]['channel'])){throw new db[(_0xf700('0x8e'))][(_0xf700('0x8f'))](_0xf700('0x98'));}_0xd649e3=_0x52e30e;var _0x5d2dbe={};_0x5d2dbe[_0xf700('0x47')]=_['keys'](db[_[_0xf700('0x9a')](_0x20cf01[_0xf700('0x4b')][_0xf700('0x9b')])+_0xf700('0xc0')][_0xf700('0x46')]);_0x5d2dbe['query']=_[_0xf700('0x48')](_0x20cf01[_0xf700('0x4b')]);_0x5d2dbe[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x5d2dbe[_0xf700('0x47')],_0x5d2dbe[_0xf700('0x4b')]);_0x400110[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x5d2dbe['model'],qs['fields'](_0x20cf01[_0xf700('0x4b')]['fields']));_0x400110[_0xf700('0x4c')]=_0x400110[_0xf700('0x4c')][_0xf700('0x4f')]?_0x400110[_0xf700('0x4c')]:_0x5d2dbe[_0xf700('0x47')];_0x400110[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x20cf01[_0xf700('0x4b')]['sort']);_0x400110[_0xf700('0x55')]=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x20cf01[_0xf700('0x4b')],_0x5d2dbe[_0xf700('0x4a')]));if(_0x20cf01[_0xf700('0x4b')]['filter']){_0x400110[_0xf700('0x55')]=_[_0xf700('0x56')](_0x400110[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x400110[_0xf700('0x4c')],function(_0x3d95c2){var _0x48defd={};_0x48defd[_0x3d95c2]={'$like':'%'+_0x20cf01['query'][_0xf700('0x59')]+'%'};return _0x48defd;})});}_0x400110=_[_0xf700('0x56')]({},_0x400110,_0x20cf01['options']);switch(_0xd649e3[_0xf700('0x3d')]){case _0xf700('0xc2'):return db[_[_0xf700('0x9a')](_0x20cf01['query'][_0xf700('0x9b')])+'Queue'][_0xf700('0xc3')](_0x400110);case _0xf700('0x36'):case _0xf700('0x38'):return _0xd649e3[_0xf700('0x34')+_['capitalize'](_0x20cf01[_0xf700('0x4b')]['channel'])+_0xf700('0xab')](_0x400110);default:throw new db[(_0xf700('0x8e'))]['ValidationError'](_0xf700('0xc4'));}})[_0xf700('0x20')](function(_0x1ed4ba){_0x16fa87=_0x1ed4ba[_0xf700('0x4f')];if(!_0x20cf01['query'][_0xf700('0x50')]('nolimit')){_0x400110[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x20cf01[_0xf700('0x4b')][_0xf700('0x2e')]);_0x400110[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x20cf01[_0xf700('0x4b')][_0xf700('0x52')]);}switch(_0xd649e3[_0xf700('0x3d')]){case _0xf700('0xc2'):return db[_[_0xf700('0x9a')](_0x20cf01['query'][_0xf700('0x9b')])+_0xf700('0xc0')][_0xf700('0xc3')](_0x400110);case'user':case'agent':return _0xd649e3[_0xf700('0x34')+_[_0xf700('0x9a')](_0x20cf01['query'][_0xf700('0x9b')])+_0xf700('0xab')](_0x400110);}})[_0xf700('0x20')](function(_0xb7f965){return{'count':_0x16fa87,'rows':_0xb7f965};})[_0xf700('0x20')](respondWithResult(_0x2c5c1b,null))[_0xf700('0x29')](handleError(_0x2c5c1b,null));};exports[_0xf700('0xc5')]=function(_0x45fd7e,_0x2d0b0f,_0x49079a){var _0x4d88c7={};var _0x2eae67={};var _0x19b4be;var _0x954c40;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x45fd7e[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x2d0b0f,null))['then'](function(_0x561867){if(_0x561867){_0x19b4be=_0x561867;_0x2eae67['model']=_['keys'](db[_0xf700('0xa7')]['rawAttributes']);_0x2eae67['query']=_[_0xf700('0x48')](_0x45fd7e['query']);_0x2eae67[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x2eae67[_0xf700('0x47')],_0x2eae67[_0xf700('0x4b')]);_0x4d88c7['attributes']=_[_0xf700('0x4d')](_0x2eae67[_0xf700('0x47')],qs['fields'](_0x45fd7e[_0xf700('0x4b')][_0xf700('0x4e')]));_0x4d88c7[_0xf700('0x4c')]=_0x4d88c7['attributes'][_0xf700('0x4f')]?_0x4d88c7[_0xf700('0x4c')]:_0x2eae67[_0xf700('0x47')];_0x4d88c7['order']=qs[_0xf700('0x53')](_0x45fd7e['query']['sort']);_0x4d88c7[_0xf700('0x55')]=qs['filters'](_[_0xf700('0x54')](_0x45fd7e[_0xf700('0x4b')],_0x2eae67[_0xf700('0x4a')]));if(_0x45fd7e[_0xf700('0x4b')][_0xf700('0x59')]){_0x4d88c7[_0xf700('0x55')]=_[_0xf700('0x56')](_0x4d88c7['where'],{'$or':_[_0xf700('0xba')](_0x4d88c7[_0xf700('0x4c')],function(_0x190e95){var _0x5325d2={};_0x5325d2[_0x190e95]={'$like':'%'+_0x45fd7e[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x5325d2;})});}_0x4d88c7=_[_0xf700('0x56')]({},_0x4d88c7,_0x45fd7e['options']);return _0x19b4be[_0xf700('0xc5')](_0x4d88c7);}})[_0xf700('0x20')](function(_0x1c4481){if(_0x1c4481){_0x954c40=_0x1c4481[_0xf700('0x4f')];if(!_0x45fd7e[_0xf700('0x4b')]['hasOwnProperty'](_0xf700('0x51'))){_0x4d88c7[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x45fd7e[_0xf700('0x4b')]['limit']);_0x4d88c7[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x45fd7e[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x19b4be[_0xf700('0xc5')](_0x4d88c7);}})[_0xf700('0x20')](function(_0x617c2e){if(_0x617c2e){return _0x617c2e?{'count':_0x954c40,'rows':_0x617c2e}:null;}})[_0xf700('0x20')](respondWithResult(_0x2d0b0f,null))[_0xf700('0x29')](handleError(_0x2d0b0f,null));};exports['getGroups']=function(_0x354e8f,_0x29a5e2,_0x2c66c7){var _0x435adf={};var _0x577ccf={};var _0xdaf808;var _0x17ba9f;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x354e8f[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x29a5e2,null))[_0xf700('0x20')](function(_0x3dd6c6){if(_0x3dd6c6){_0xdaf808=_0x3dd6c6;_0x577ccf[_0xf700('0x47')]=_['keys'](db['ChatGroup'][_0xf700('0x46')]);_0x577ccf[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x354e8f['query']);_0x577ccf[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x577ccf[_0xf700('0x47')],_0x577ccf[_0xf700('0x4b')]);_0x435adf['attributes']=_[_0xf700('0x4d')](_0x577ccf[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x354e8f[_0xf700('0x4b')][_0xf700('0x4e')]));_0x435adf[_0xf700('0x4c')]=_0x435adf[_0xf700('0x4c')][_0xf700('0x4f')]?_0x435adf[_0xf700('0x4c')]:_0x577ccf['model'];_0x435adf[_0xf700('0xc1')]=qs['sort'](_0x354e8f[_0xf700('0x4b')][_0xf700('0x53')]);_0x435adf[_0xf700('0x55')]=qs[_0xf700('0x4a')](_['pick'](_0x354e8f['query'],_0x577ccf['filters']));if(_0x354e8f[_0xf700('0x4b')][_0xf700('0x59')]){_0x435adf[_0xf700('0x55')]=_['merge'](_0x435adf[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x435adf[_0xf700('0x4c')],function(_0x16ebe6){var _0x2534ba={};_0x2534ba[_0x16ebe6]={'$like':'%'+_0x354e8f[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x2534ba;})});}_0x435adf=_[_0xf700('0x56')]({},_0x435adf,_0x354e8f['options']);return _0xdaf808['getGroups'](_0x435adf);}})[_0xf700('0x20')](function(_0x5ab126){if(_0x5ab126){_0x17ba9f=_0x5ab126[_0xf700('0x4f')];if(!_0x354e8f[_0xf700('0x4b')][_0xf700('0x50')](_0xf700('0x51'))){_0x435adf[_0xf700('0x2e')]=qs['limit'](_0x354e8f[_0xf700('0x4b')][_0xf700('0x2e')]);_0x435adf['offset']=qs[_0xf700('0x52')](_0x354e8f[_0xf700('0x4b')][_0xf700('0x52')]);}return _0xdaf808[_0xf700('0xc6')](_0x435adf);}})[_0xf700('0x20')](function(_0x469c2f){if(_0x469c2f){return _0x469c2f?{'count':_0x17ba9f,'rows':_0x469c2f}:null;}})[_0xf700('0x20')](respondWithResult(_0x29a5e2,null))[_0xf700('0x29')](handleError(_0x29a5e2,null));};exports['getRecordings']=function(_0x6c71d0,_0xc438a,_0x19210f){var _0x43d816={'raw':!![],'where':{}};var _0x1bf501={};var _0x5cbe70={'count':0x0,'rows':[]};return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x6c71d0[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0xc438a,null))[_0xf700('0x20')](function(_0x17cb91){if(_0x17cb91){_0x1bf501[_0xf700('0x47')]=_[_0xf700('0x48')](db[_0xf700('0xc7')][_0xf700('0x46')]);_0x1bf501['query']=_[_0xf700('0x48')](_0x6c71d0['query']);_0x1bf501[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x1bf501[_0xf700('0x47')],_0x1bf501[_0xf700('0x4b')]);_0x43d816[_0xf700('0x4c')]=_['intersection'](_0x1bf501[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x6c71d0[_0xf700('0x4b')][_0xf700('0x4e')]));_0x43d816[_0xf700('0x4c')]=_0x43d816['attributes']['length']?_0x43d816[_0xf700('0x4c')]:_0x1bf501[_0xf700('0x47')];if(!_0x6c71d0['query']['hasOwnProperty'](_0xf700('0x51'))){_0x43d816['limit']=qs['limit'](_0x6c71d0['query']['limit']);_0x43d816[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x6c71d0[_0xf700('0x4b')]['offset']);}_0x43d816[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x6c71d0['query']['sort']);_0x43d816[_0xf700('0x55')]=qs['filters'](_[_0xf700('0x54')](_0x6c71d0['query'],_0x1bf501[_0xf700('0x4a')]));_0x43d816[_0xf700('0x55')]['UserId']=_0x17cb91['id'];if(_0x6c71d0[_0xf700('0x4b')][_0xf700('0x59')]){_0x43d816[_0xf700('0x55')]=_[_0xf700('0x56')](_0x43d816[_0xf700('0x55')],{'$or':_['map'](_0x43d816[_0xf700('0x4c')],function(_0x2134c2){var _0xa438d2={};_0xa438d2[_0x2134c2]={'$like':'%'+_0x6c71d0[_0xf700('0x4b')]['filter']+'%'};return _0xa438d2;})});}_0x43d816=_[_0xf700('0x56')]({},_0x43d816,_0x6c71d0[_0xf700('0x5a')]);return db[_0xf700('0xc7')]['count']({'where':_0x43d816[_0xf700('0x55')]})[_0xf700('0x20')](function(_0x581ab3){_0x5cbe70[_0xf700('0x5b')]=_0x581ab3;if(_0x6c71d0[_0xf700('0x4b')]['includeAll']){_0x43d816[_0xf700('0x5d')]=[{'all':!![]}];}return db['VoiceRecording'][_0xf700('0xc3')](_0x43d816);})[_0xf700('0x20')](function(_0x8c91cb){_0x5cbe70['rows']=_0x8c91cb;return _0x5cbe70;});}})[_0xf700('0x20')](respondWithFilteredResult(_0xc438a,_0x43d816))[_0xf700('0x29')](handleError(_0xc438a,null));};exports['getChatInteractions']=function(_0x1dd882,_0x1418c3,_0x32cf34){var _0x560662={};var _0x33a3c9={};var _0x4f1289;var _0x278cd1;return db['User']['findOne']({'where':{'id':_0x1dd882['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x1418c3,null))[_0xf700('0x20')](function(_0xa7993){if(_0xa7993){_0x4f1289=_0xa7993;_0x33a3c9[_0xf700('0x47')]=_[_0xf700('0x48')](db[_0xf700('0xc8')][_0xf700('0x46')]);_0x33a3c9[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x1dd882[_0xf700('0x4b')]);_0x33a3c9['filters']=_[_0xf700('0x4d')](_0x33a3c9[_0xf700('0x47')],_0x33a3c9['query']);_0x560662[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x33a3c9['model'],qs[_0xf700('0x4e')](_0x1dd882[_0xf700('0x4b')][_0xf700('0x4e')]));_0x560662[_0xf700('0x4c')]=_0x560662[_0xf700('0x4c')][_0xf700('0x4f')]?_0x560662[_0xf700('0x4c')]:_0x33a3c9[_0xf700('0x47')];_0x560662[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x1dd882[_0xf700('0x4b')]['sort']);_0x560662[_0xf700('0x55')]=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x1dd882[_0xf700('0x4b')],_0x33a3c9['filters']));if(_0x1dd882[_0xf700('0x4b')][_0xf700('0x59')]){_0x560662[_0xf700('0x55')]=_[_0xf700('0x56')](_0x560662[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x560662[_0xf700('0x4c')],function(_0x40782f){var _0x69832={};_0x69832[_0x40782f]={'$like':'%'+_0x1dd882[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x69832;})});}_0x560662=_[_0xf700('0x56')]({},_0x560662,_0x1dd882[_0xf700('0x5a')]);return _0x4f1289[_0xf700('0xc9')](_0x560662);}})[_0xf700('0x20')](function(_0x43f10a){if(_0x43f10a){_0x278cd1=_0x43f10a[_0xf700('0x4f')];if(!_0x1dd882[_0xf700('0x4b')][_0xf700('0x50')](_0xf700('0x51'))){_0x560662['limit']=qs[_0xf700('0x2e')](_0x1dd882['query'][_0xf700('0x2e')]);_0x560662['offset']=qs['offset'](_0x1dd882[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x4f1289['getChatInteractions'](_0x560662);}})['then'](function(_0x325199){if(_0x325199){return _0x325199?{'count':_0x278cd1,'rows':_0x325199}:null;}})[_0xf700('0x20')](respondWithResult(_0x1418c3,null))[_0xf700('0x29')](handleError(_0x1418c3,null));};exports[_0xf700('0xca')]=function(_0x598580,_0x394f59,_0x1d90eb){var _0x304c44={};var _0x18ad97={};var _0x15743a;var _0x5ac1bd;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x598580[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x394f59,null))['then'](function(_0x4a1908){if(_0x4a1908){_0x15743a=_0x4a1908;_0x18ad97[_0xf700('0x47')]=_['keys'](db[_0xf700('0xcb')][_0xf700('0x46')]);_0x18ad97['query']=_[_0xf700('0x48')](_0x598580[_0xf700('0x4b')]);_0x18ad97[_0xf700('0x4a')]=_['intersection'](_0x18ad97['model'],_0x18ad97[_0xf700('0x4b')]);_0x304c44['attributes']=_[_0xf700('0x4d')](_0x18ad97[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x598580[_0xf700('0x4b')]['fields']));_0x304c44[_0xf700('0x4c')]=_0x304c44[_0xf700('0x4c')][_0xf700('0x4f')]?_0x304c44[_0xf700('0x4c')]:_0x18ad97[_0xf700('0x47')];_0x304c44['order']=qs[_0xf700('0x53')](_0x598580[_0xf700('0x4b')]['sort']);_0x304c44['where']=qs[_0xf700('0x4a')](_['pick'](_0x598580[_0xf700('0x4b')],_0x18ad97['filters']));if(_0x598580[_0xf700('0x4b')][_0xf700('0x59')]){_0x304c44[_0xf700('0x55')]=_[_0xf700('0x56')](_0x304c44[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x304c44[_0xf700('0x4c')],function(_0x51f9b7){var _0x3d40e1={};_0x3d40e1[_0x51f9b7]={'$like':'%'+_0x598580[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x3d40e1;})});}_0x304c44=_[_0xf700('0x56')]({},_0x304c44,_0x598580['options']);return _0x15743a[_0xf700('0xca')](_0x304c44);}})[_0xf700('0x20')](function(_0x3f1882){if(_0x3f1882){_0x5ac1bd=_0x3f1882['length'];if(!_0x598580[_0xf700('0x4b')][_0xf700('0x50')]('nolimit')){_0x304c44[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x598580[_0xf700('0x4b')][_0xf700('0x2e')]);_0x304c44[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x598580[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x15743a[_0xf700('0xca')](_0x304c44);}})[_0xf700('0x20')](function(_0x3f50ea){if(_0x3f50ea){return _0x3f50ea?{'count':_0x5ac1bd,'rows':_0x3f50ea}:null;}})[_0xf700('0x20')](respondWithResult(_0x394f59,null))[_0xf700('0x29')](handleError(_0x394f59,null));};exports['getMailInteractions']=function(_0x618817,_0x10e629,_0x27dd51){var _0x401c51={'raw':!![],'where':{}};var _0x4b008c={};var _0x36972b={'count':0x0,'rows':[]};return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x618817[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x10e629,null))[_0xf700('0x20')](function(_0x555128){if(_0x555128){_0x4b008c[_0xf700('0x47')]=_[_0xf700('0x48')](db['MailInteraction'][_0xf700('0x46')]);_0x4b008c[_0xf700('0x4b')]=_['keys'](_0x618817[_0xf700('0x4b')]);_0x4b008c[_0xf700('0x4a')]=_['intersection'](_0x4b008c[_0xf700('0x47')],_0x4b008c[_0xf700('0x4b')]);_0x401c51['attributes']=_['intersection'](_0x4b008c[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x618817['query'][_0xf700('0x4e')]));_0x401c51['attributes']=_0x401c51[_0xf700('0x4c')][_0xf700('0x4f')]?_0x401c51[_0xf700('0x4c')]:_0x4b008c[_0xf700('0x47')];if(!_0x618817['query']['hasOwnProperty'](_0xf700('0x51'))){_0x401c51[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x618817['query'][_0xf700('0x2e')]);_0x401c51[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x618817[_0xf700('0x4b')][_0xf700('0x52')]);}_0x401c51[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x618817[_0xf700('0x4b')]['sort']);_0x401c51[_0xf700('0x55')]=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x618817[_0xf700('0x4b')],_0x4b008c[_0xf700('0x4a')]));_0x401c51[_0xf700('0x55')][_0xf700('0xcc')]=_0x555128['id'];if(_0x618817[_0xf700('0x4b')]['filter']){_0x401c51[_0xf700('0x55')]=_[_0xf700('0x56')](_0x401c51[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x401c51[_0xf700('0x4c')],function(_0x543fef){var _0x5e839d={};_0x5e839d[_0x543fef]={'$like':'%'+_0x618817['query']['filter']+'%'};return _0x5e839d;})});}_0x401c51=_['merge']({},_0x401c51,_0x618817['options']);return db[_0xf700('0xcd')][_0xf700('0x5b')]({'where':_0x401c51['where']})['then'](function(_0x444277){_0x36972b[_0xf700('0x5b')]=_0x444277;if(_0x618817[_0xf700('0x4b')][_0xf700('0x5c')]){_0x401c51['include']=[{'all':!![]}];}return db[_0xf700('0xcd')][_0xf700('0xc3')](_0x401c51);})[_0xf700('0x20')](function(_0x42ba16){_0x36972b[_0xf700('0x5e')]=_0x42ba16;return _0x36972b;});}})[_0xf700('0x20')](respondWithFilteredResult(_0x10e629,_0x401c51))[_0xf700('0x29')](handleError(_0x10e629,null));};exports[_0xf700('0xce')]=function(_0x48e969,_0xe01b32,_0x248e98){var _0x3f3e9a={};var _0x51d421={};var _0x39ae52;var _0x503462;return db['User'][_0xf700('0xbf')]({'where':{'id':_0x48e969['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0xe01b32,null))['then'](function(_0x1c27b5){if(_0x1c27b5){_0x39ae52=_0x1c27b5;_0x51d421['model']=_[_0xf700('0x48')](db[_0xf700('0xcf')][_0xf700('0x46')]);_0x51d421[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x48e969[_0xf700('0x4b')]);_0x51d421[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x51d421[_0xf700('0x47')],_0x51d421['query']);_0x3f3e9a[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x51d421[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x48e969[_0xf700('0x4b')][_0xf700('0x4e')]));_0x3f3e9a[_0xf700('0x4c')]=_0x3f3e9a[_0xf700('0x4c')][_0xf700('0x4f')]?_0x3f3e9a[_0xf700('0x4c')]:_0x51d421[_0xf700('0x47')];_0x3f3e9a[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x48e969[_0xf700('0x4b')][_0xf700('0x53')]);_0x3f3e9a[_0xf700('0x55')]=qs[_0xf700('0x4a')](_['pick'](_0x48e969[_0xf700('0x4b')],_0x51d421[_0xf700('0x4a')]));if(_0x48e969[_0xf700('0x4b')][_0xf700('0x59')]){_0x3f3e9a[_0xf700('0x55')]=_[_0xf700('0x56')](_0x3f3e9a[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x3f3e9a[_0xf700('0x4c')],function(_0x563fb9){var _0x4235ad={};_0x4235ad[_0x563fb9]={'$like':'%'+_0x48e969['query'][_0xf700('0x59')]+'%'};return _0x4235ad;})});}_0x3f3e9a=_['merge']({},_0x3f3e9a,_0x48e969[_0xf700('0x5a')]);return _0x39ae52['getSmsInteractions'](_0x3f3e9a);}})[_0xf700('0x20')](function(_0x20acc7){if(_0x20acc7){_0x503462=_0x20acc7[_0xf700('0x4f')];if(!_0x48e969['query'][_0xf700('0x50')](_0xf700('0x51'))){_0x3f3e9a[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x48e969[_0xf700('0x4b')][_0xf700('0x2e')]);_0x3f3e9a[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x48e969[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x39ae52[_0xf700('0xce')](_0x3f3e9a);}})[_0xf700('0x20')](function(_0x2cc0e7){if(_0x2cc0e7){return _0x2cc0e7?{'count':_0x503462,'rows':_0x2cc0e7}:null;}})[_0xf700('0x20')](respondWithResult(_0xe01b32,null))[_0xf700('0x29')](handleError(_0xe01b32,null));};exports['getFaxInteractions']=function(_0x2dbf7a,_0x24db19,_0x428f3e){var _0x5cf84e={};var _0x3d2106={};var _0x264629;var _0x4295e4;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x2dbf7a[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x24db19,null))[_0xf700('0x20')](function(_0x3833a8){if(_0x3833a8){_0x264629=_0x3833a8;_0x3d2106[_0xf700('0x47')]=_['keys'](db[_0xf700('0xd0')][_0xf700('0x46')]);_0x3d2106[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x2dbf7a[_0xf700('0x4b')]);_0x3d2106['filters']=_['intersection'](_0x3d2106[_0xf700('0x47')],_0x3d2106['query']);_0x5cf84e['attributes']=_['intersection'](_0x3d2106[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x2dbf7a['query'][_0xf700('0x4e')]));_0x5cf84e[_0xf700('0x4c')]=_0x5cf84e[_0xf700('0x4c')]['length']?_0x5cf84e[_0xf700('0x4c')]:_0x3d2106['model'];_0x5cf84e[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x2dbf7a[_0xf700('0x4b')][_0xf700('0x53')]);_0x5cf84e[_0xf700('0x55')]=qs['filters'](_['pick'](_0x2dbf7a[_0xf700('0x4b')],_0x3d2106[_0xf700('0x4a')]));if(_0x2dbf7a[_0xf700('0x4b')][_0xf700('0x59')]){_0x5cf84e[_0xf700('0x55')]=_[_0xf700('0x56')](_0x5cf84e[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x5cf84e['attributes'],function(_0x54e959){var _0x3a2600={};_0x3a2600[_0x54e959]={'$like':'%'+_0x2dbf7a[_0xf700('0x4b')]['filter']+'%'};return _0x3a2600;})});}_0x5cf84e=_['merge']({},_0x5cf84e,_0x2dbf7a[_0xf700('0x5a')]);return _0x264629[_0xf700('0xd1')](_0x5cf84e);}})['then'](function(_0x3f7e97){if(_0x3f7e97){_0x4295e4=_0x3f7e97[_0xf700('0x4f')];if(!_0x2dbf7a[_0xf700('0x4b')]['hasOwnProperty'](_0xf700('0x51'))){_0x5cf84e[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x2dbf7a[_0xf700('0x4b')][_0xf700('0x2e')]);_0x5cf84e[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x2dbf7a[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x264629[_0xf700('0xd1')](_0x5cf84e);}})[_0xf700('0x20')](function(_0x12e454){if(_0x12e454){return _0x12e454?{'count':_0x4295e4,'rows':_0x12e454}:null;}})[_0xf700('0x20')](respondWithResult(_0x24db19,null))[_0xf700('0x29')](handleError(_0x24db19,null));};exports['login']=function(_0x484c2b,_0x20f536,_0x90698e){var _0x213731;var _0x36c4a1;var _0x24f7ac;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x484c2b[_0xf700('0x60')]['id'],'role':_0xf700('0x38')},'attributes':['id','name',_0xf700('0xd2'),_0xf700('0xd3'),_0xf700('0x3d'),_0xf700('0x72'),_0xf700('0x96')]})[_0xf700('0x20')](handleEntityNotFound(_0x20f536,null))['then'](function(_0x45ea70){if(_0x45ea70){_0x213731=_0x45ea70;if(_0x484c2b[_0xf700('0x64')]['interface']){_0x24f7ac=util[_0xf700('0x6f')](_0xf700('0xd4'),_0x213731[_0x484c2b[_0xf700('0x64')]['interface']]);}else if(_0x484c2b[_0xf700('0x64')]['intrf']){_0x24f7ac=util[_0xf700('0x6f')](_0xf700('0xa4'),_0x484c2b[_0xf700('0x64')][_0xf700('0xd5')]);}else{_0x24f7ac=util[_0xf700('0x6f')](_0xf700('0xa4'),_0x213731[_0xf700('0x3f')]);}socket['to'](util[_0xf700('0x6f')](_0xf700('0xd6'),_0x213731[_0xf700('0x3f')]))[_0xf700('0x9f')]('user:forcelogout',{'ip':_0x484c2b[_0xf700('0xd7')][_0xf700('0xd8')]||_0x484c2b[_0xf700('0xd9')][_0xf700('0xda')]||_0x484c2b['socket']['remoteAddress']||_0x484c2b[_0xf700('0xd9')][_0xf700('0xdb')]['remoteAddress']});return db[_0xf700('0xa7')][_0xf700('0x41')]({'where':{'membername':_0x213731[_0xf700('0x3f')]},'individualHooks':!![]});}})[_0xf700('0x20')](function(_0x3189e2){if(_0x213731){return _0x213731['getVoiceQueues']({'raw':!![]});}})['then'](function(_0x4712ce){var _0xf1969=[];if(_0x4712ce){_0x36c4a1=_0x4712ce;if(_0x36c4a1[_0xf700('0x4f')]){for(var _0x3d7509=0x0;_0x3d7509<_0x36c4a1['length'];_0x3d7509++){_0xf1969[_0xf700('0xa2')]({'membername':_0x213731['name'],'UserId':_0x213731['id'],'queue_name':_0x36c4a1[_0x3d7509][_0xf700('0x3f')],'VoiceQueueId':_0x36c4a1[_0x3d7509]['id'],'interface':_0x24f7ac,'paused':_0x213731[_0xf700('0x96')]||![],'penalty':_0x36c4a1[_0x3d7509][_0xf700('0xdc')]||0x0});}return BPromise['each'](_0xf1969,function(_0x540b45){return db['UserVoiceQueueRt']['upsert'](_0x540b45);});}}})['then'](function(){return db['MemberReport'][_0xf700('0xc3')]({'where':{'membername':_0x213731[_0xf700('0x3f')],'exitAt':null}});})[_0xf700('0x20')](function(_0x1e416c){var _0x496053=[];_0x1e416c[_0xf700('0xdd')](function(_0x513af5){_0x496053[_0xf700('0xa2')](_0x513af5['update']({'exitAt':moment()['format'](_0xf700('0xde'))}));});return BPromise[_0xf700('0xdf')](_0x496053);})[_0xf700('0x20')](function(){var _0x1e050e=[];var _0x1db891=[];var _0x5d1928=utils[_0xf700('0xe0')]();var _0x206191={'membername':_0x213731[_0xf700('0x3f')],'interface':_0x24f7ac,'enterAt':moment()[_0xf700('0x6f')](_0xf700('0xde')),'role':_0x213731[_0xf700('0x3d')],'internal':_0x213731['internal']};_0x5d1928['forEach'](function(_0x116697){_0x1e050e['push'](_[_0xf700('0x56')]({'channel':_0x116697,'type':_0xf700('0xe1'),'data1':_0x484c2b[_0xf700('0x64')][_0xf700('0xe2')],'data2':_0x24f7ac},_0x206191));if(_0x213731['loginInPause']){_0x1db891['push'](_[_0xf700('0x56')]({'channel':_0x116697,'type':_0xf700('0xe3'),'data1':_0xf700('0xe4')},_0x206191));}});return db[_0xf700('0xe5')][_0xf700('0x62')](_0x1e050e['concat'](_0x1db891),{'individualHooks':!![]});})[_0xf700('0x20')](function(){return _0x213731[_0xf700('0x63')]({'online':!![],'lastLoginAt':moment()[_0xf700('0x6f')]('YYYY-MM-DD\x20HH:mm:ss'),'voicePause':_0x213731[_0xf700('0x96')]||![],'mailPause':_0x213731[_0xf700('0x96')]||![],'chatPause':_0x213731[_0xf700('0x96')]||![],'faxPause':_0x213731['loginInPause']||![],'smsPause':_0x213731[_0xf700('0x96')]||![],'openchannelPause':_0x213731['loginInPause']||![],'pauseType':_0x213731[_0xf700('0x96')]?_0xf700('0xe4'):null,'interface':_0x24f7ac,'lastPauseAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')});})['then'](respondWithResult(_0x20f536,null))[_0xf700('0x29')](handleError(_0x20f536,null));};exports[_0xf700('0xe6')]=function(_0x332977,_0x22f9fc,_0x1ba1e3){var _0x24f3f9;return db['User']['find']({'where':{'id':_0x332977[_0xf700('0x60')]['id'],'role':'agent'},'attributes':['id',_0xf700('0x3f'),'role']})['then'](handleEntityNotFound(_0x22f9fc,null))[_0xf700('0x20')](function(_0x5420f7){if(_0x5420f7){_0x24f3f9=_0x5420f7;return db[_0xf700('0xa7')][_0xf700('0x41')]({'where':{'membername':_0x24f3f9['name']},'individualHooks':!![]});}})[_0xf700('0x20')](function(){return db[_0xf700('0xe5')]['findAll']({'where':{'membername':_0x24f3f9[_0xf700('0x3f')],'exitAt':null}});})['then'](function(_0x3785e2){var _0x54e3bb=[];_0x3785e2[_0xf700('0xdd')](function(_0x304290){_0x54e3bb['push'](_0x304290[_0xf700('0x63')]({'exitAt':moment()[_0xf700('0x6f')](_0xf700('0xde'))}));});return BPromise[_0xf700('0xdf')](_0x54e3bb);})['then'](function(){return _0x24f3f9['update']({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![],'interface':null});})[_0xf700('0x20')](respondWithResult(_0x22f9fc,null))[_0xf700('0x29')](handleError(_0x22f9fc,null));};exports[_0xf700('0xe7')]=function(_0x3a7e1e,_0x578573,_0x953d05){var _0x3290d8;return db[_0xf700('0xa7')][_0xf700('0x63')]({'paused':0x1},{'where':{'UserId':_0x3a7e1e[_0xf700('0x60')]['id']},'individualHooks':!![]})['then'](function(){return db[_0xf700('0x45')]['find']({'where':{'id':_0x3a7e1e['params']['id'],'role':_0xf700('0x38')},'attributes':['id',_0xf700('0x3f'),_0xf700('0x3d'),'internal',_0xf700('0xa3')]});})[_0xf700('0x20')](handleEntityNotFound(_0x578573,null))[_0xf700('0x20')](function(_0xf692ce){if(_0xf692ce){_0x3290d8=_0xf692ce;return respondWithRpcPromise(_0xf700('0xe8'),_0xf700('0xe7'),{'id':_0x3290d8['id'],'name':_0x3290d8['name'],'pause':!![]});}})[_0xf700('0x20')](function(){if(_0x3290d8){return db['MemberReport'][_0xf700('0xc3')]({'where':{'membername':_0x3290d8[_0xf700('0x3f')],'type':'PAUSE','exitAt':null}});}})[_0xf700('0x20')](function(_0x334bb2){if(_0x334bb2[_0xf700('0x4f')]){var _0x364b15=moment()[_0xf700('0x6f')]('YYYY-MM-DD\x20HH:mm:ss');for(var _0x3df8c7=0x0,_0x4bc607=_0x334bb2[_0xf700('0x4f')];_0x3df8c7<_0x4bc607;_0x3df8c7++){_0x334bb2[_0x3df8c7]['updateAttributes']({'exitAt':_0x364b15});}}})[_0xf700('0x20')](function(){var _0x11f8b3=[];var _0x115a5a=utils['getChannels']();_0x115a5a[_0xf700('0xdd')](function(_0x2a077a){_0x11f8b3['push']({'channel':_0x2a077a,'membername':_0x3290d8[_0xf700('0x3f')],'interface':_[_0xf700('0x6d')](_0x3290d8[_0xf700('0xa3')])?util[_0xf700('0x6f')](_0xf700('0xa4'),_0x3290d8['name']):_0x3290d8[_0xf700('0xa3')],'type':_0xf700('0xe3'),'enterAt':moment()[_0xf700('0x6f')](_0xf700('0xde')),'data1':_0x3a7e1e['body']['type']||_0xf700('0xe9'),'role':_0x3290d8[_0xf700('0x3d')],'internal':_0x3290d8['internal']});});return db[_0xf700('0xe5')][_0xf700('0x62')](_0x11f8b3,{'individualHooks':!![]});})[_0xf700('0x20')](function(){return _0x3290d8[_0xf700('0x63')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x3a7e1e['body'][_0xf700('0xea')]||_0xf700('0xe9'),'lastPauseAt':moment()['format'](_0xf700('0xde'))});})[_0xf700('0x20')](respondWithResult(_0x578573,null))[_0xf700('0x29')](handleError(_0x578573,null));};exports[_0xf700('0xeb')]=function(_0x104e96,_0x57e85d,_0x31c846){var _0x2e277e;return db['User'][_0xf700('0x3e')]({'where':{'id':_0x104e96[_0xf700('0x60')]['id']},'attributes':['id',_0xf700('0x3f'),_0xf700('0x3d'),_0xf700('0xa5'),'mailPause','chatPause','faxPause',_0xf700('0xec'),'smsPause',_0xf700('0xed'),_0xf700('0xee')]})[_0xf700('0x20')](handleEntityNotFound(_0x57e85d,null))[_0xf700('0x20')](function(_0x4afd2b){if(_0x4afd2b){_0x2e277e=_0x4afd2b;if(_0x104e96[_0xf700('0x64')][_0xf700('0x9b')]&&!utils['isValidChannel'](_0x104e96['body']['channel'])){throw new db[(_0xf700('0x8e'))][(_0xf700('0x8f'))](_0xf700('0x98'));}switch(_0x104e96[_0xf700('0x64')][_0xf700('0x9b')]){case _0xf700('0xa1'):return respondWithRpcPromise(_0xf700('0xe8'),_0xf700('0xeb'),{'id':_0x2e277e['id'],'name':_0x2e277e[_0xf700('0x3f')],'pause':![]})[_0xf700('0x20')](function(){return db[_0xf700('0xa7')][_0xf700('0x63')]({'paused':0x0},{'where':{'UserId':_0x2e277e['id']},'individualHooks':!![]});})[_0xf700('0x20')](function(){return db[_0xf700('0xe5')][_0xf700('0x3e')]({'where':{'channel':_0x104e96[_0xf700('0x64')][_0xf700('0x9b')],'membername':_0x2e277e[_0xf700('0x3f')],'type':_0xf700('0xe3'),'exitAt':null}});})[_0xf700('0x20')](function(_0x1c2234){if(_0x1c2234){return _0x1c2234[_0xf700('0x63')]({'exitAt':moment()['format'](_0xf700('0xde')),'data2':'manual'},{'individualHooks':!![]});}return null;})['then'](function(){return _0x2e277e[_0xf700('0x63')]({'voicePause':![]});});case _0xf700('0xef'):case _0xf700('0xf0'):case _0xf700('0xf1'):case _0xf700('0xf2'):case _0xf700('0xf3'):return db['MemberReport'][_0xf700('0x3e')]({'where':{'channel':_0x104e96[_0xf700('0x64')][_0xf700('0x9b')],'membername':_0x2e277e[_0xf700('0x3f')],'type':_0xf700('0xe3'),'exitAt':null}})[_0xf700('0x20')](function(_0x49161a){if(_0x49161a){return _0x49161a['update']({'exitAt':moment()[_0xf700('0x6f')](_0xf700('0xde')),'data2':'manual'},{'individualHooks':!![]});}return null;})[_0xf700('0x20')](function(){var _0x3074da={};_['set'](_0x3074da,util['format']('%s%s',_0x104e96[_0xf700('0x64')][_0xf700('0x9b')],'Pause'),![]);return _0x2e277e[_0xf700('0x63')](_0x3074da);});default:return respondWithRpcPromise(_0xf700('0xe8'),_0xf700('0xeb'),{'id':_0x2e277e['id'],'name':_0x2e277e[_0xf700('0x3f')],'pause':![]})['then'](function(){return db['UserVoiceQueueRt'][_0xf700('0x63')]({'paused':0x0},{'where':{'UserId':_0x2e277e['id']}});})['then'](function(){return db['MemberReport'][_0xf700('0xc3')]({'where':{'membername':_0x2e277e[_0xf700('0x3f')],'type':_0xf700('0xe3'),'exitAt':null}});})[_0xf700('0x20')](function(_0x1d0e4a){var _0x362111=[];_0x1d0e4a[_0xf700('0xdd')](function(_0x5ed21a){_0x362111['push'](_0x5ed21a[_0xf700('0x63')]({'exitAt':moment()['format'](_0xf700('0xde')),'data2':_0xf700('0xf4')}));});return BPromise[_0xf700('0xdf')](_0x362111);})[_0xf700('0x20')](function(){return _0x2e277e[_0xf700('0x63')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0xf700('0x20')](respondWithResult(_0x57e85d,null))[_0xf700('0x29')](handleError(_0x57e85d,null));};exports[_0xf700('0xf5')]=function(_0x4d2a2d,_0x46cb1e,_0x2e5d94){var _0xbb7a2e={};var _0x45f734={};var _0x11f8c0;var _0x5c185e;return db[_0xf700('0x45')]['findOne']({'where':{'id':_0x4d2a2d[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x46cb1e,null))[_0xf700('0x20')](function(_0x1ccbfe){if(_0x1ccbfe){_0x11f8c0=_0x1ccbfe;_0x45f734[_0xf700('0x47')]=_[_0xf700('0x48')](db[_0xf700('0xf6')][_0xf700('0x46')]);_0x45f734['query']=_[_0xf700('0x48')](_0x4d2a2d[_0xf700('0x4b')]);_0x45f734['filters']=_[_0xf700('0x4d')](_0x45f734['model'],_0x45f734[_0xf700('0x4b')]);_0xbb7a2e[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x45f734['model'],qs[_0xf700('0x4e')](_0x4d2a2d[_0xf700('0x4b')][_0xf700('0x4e')]));_0xbb7a2e[_0xf700('0x4c')]=_0xbb7a2e[_0xf700('0x4c')]['length']?_0xbb7a2e[_0xf700('0x4c')]:_0x45f734['model'];_0xbb7a2e[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x4d2a2d[_0xf700('0x4b')][_0xf700('0x53')]);_0xbb7a2e[_0xf700('0x55')]=qs['filters'](_['pick'](_0x4d2a2d['query'],_0x45f734['filters']));if(_0x4d2a2d[_0xf700('0x4b')][_0xf700('0x59')]){_0xbb7a2e['where']=_[_0xf700('0x56')](_0xbb7a2e[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0xbb7a2e[_0xf700('0x4c')],function(_0x5dbeb0){var _0x544b60={};_0x544b60[_0x5dbeb0]={'$like':'%'+_0x4d2a2d[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x544b60;})});}_0xbb7a2e=_['merge']({},_0xbb7a2e,_0x4d2a2d[_0xf700('0x5a')]);return _0x11f8c0['getTeams'](_0xbb7a2e);}})['then'](function(_0xa138c7){if(_0xa138c7){_0x5c185e=_0xa138c7[_0xf700('0x4f')];if(!_0x4d2a2d[_0xf700('0x4b')][_0xf700('0x50')]('nolimit')){_0xbb7a2e['limit']=qs[_0xf700('0x2e')](_0x4d2a2d['query'][_0xf700('0x2e')]);_0xbb7a2e[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x4d2a2d[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x11f8c0[_0xf700('0xf5')](_0xbb7a2e);}})[_0xf700('0x20')](function(_0x431258){if(_0x431258){return _0x431258?{'count':_0x5c185e,'rows':_0x431258}:null;}})[_0xf700('0x20')](respondWithResult(_0x46cb1e,null))[_0xf700('0x29')](handleError(_0x46cb1e,null));};exports[_0xf700('0xf7')]=function(_0x177c86,_0xce9f59,_0x238180){return db['User'][_0xf700('0x3e')]({'where':{'id':_0x177c86[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0xce9f59,null))[_0xf700('0x20')](function(_0x4deeb7){if(_0x4deeb7){return _0x4deeb7[_0xf700('0xf7')](_0x177c86[_0xf700('0x64')][_0xf700('0x67')],_[_0xf700('0x68')](_0x177c86[_0xf700('0x64')],[_0xf700('0x67'),'id'])||{});}})[_0xf700('0x20')](respondWithResult(_0xce9f59,null))[_0xf700('0x29')](handleError(_0xce9f59,null));};exports[_0xf700('0xf8')]=function(_0x2800ea,_0x4f8afe,_0x11b9df){var _0x1d41cf;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x2800ea[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x4f8afe,null))[_0xf700('0x20')](function(_0x39b201){if(_0x39b201){return _0x39b201[_0xf700('0xf8')](_0x2800ea[_0xf700('0x4b')]['ids']);}})[_0xf700('0x20')](respondWithStatusCode(_0x4f8afe,null))[_0xf700('0x29')](handleError(_0x4f8afe,null));};exports[_0xf700('0xf9')]=function(_0x53150a,_0x426fe3,_0x9ec2b8){var _0x28cddb={};var _0x28b4a4={};var _0x10807d;var _0x51ee8;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x53150a['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x426fe3,null))['then'](function(_0x120845){if(_0x120845){_0x10807d=_0x120845;_0x28b4a4[_0xf700('0x47')]=_[_0xf700('0x48')](db[_0xf700('0xfa')][_0xf700('0x46')]);_0x28b4a4[_0xf700('0x4b')]=_['keys'](_0x53150a['query']);_0x28b4a4[_0xf700('0x4a')]=_['intersection'](_0x28b4a4['model'],_0x28b4a4[_0xf700('0x4b')]);_0x28cddb[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x28b4a4['model'],qs['fields'](_0x53150a[_0xf700('0x4b')][_0xf700('0x4e')]));_0x28cddb[_0xf700('0x4c')]=_0x28cddb[_0xf700('0x4c')]['length']?_0x28cddb[_0xf700('0x4c')]:_0x28b4a4[_0xf700('0x47')];_0x28cddb[_0xf700('0xc1')]=qs['sort'](_0x53150a[_0xf700('0x4b')]['sort']);_0x28cddb[_0xf700('0x55')]=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x53150a[_0xf700('0x4b')],_0x28b4a4['filters']));if(_0x53150a['query'][_0xf700('0x59')]){_0x28cddb[_0xf700('0x55')]=_[_0xf700('0x56')](_0x28cddb[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x28cddb[_0xf700('0x4c')],function(_0x334db6){var _0x58cf3f={};_0x58cf3f[_0x334db6]={'$like':'%'+_0x53150a[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x58cf3f;})});}_0x28cddb=_[_0xf700('0x56')]({},_0x28cddb,_0x53150a[_0xf700('0x5a')]);return _0x10807d['getLists'](_0x28cddb);}})[_0xf700('0x20')](function(_0x304991){if(_0x304991){_0x51ee8=_0x304991['length'];if(!_0x53150a[_0xf700('0x4b')][_0xf700('0x50')](_0xf700('0x51'))){_0x28cddb['limit']=qs['limit'](_0x53150a[_0xf700('0x4b')][_0xf700('0x2e')]);_0x28cddb[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x53150a[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x10807d[_0xf700('0xf9')](_0x28cddb);}})['then'](function(_0x2ec1ff){if(_0x2ec1ff){return _0x2ec1ff?{'count':_0x51ee8,'rows':_0x2ec1ff}:null;}})[_0xf700('0x20')](respondWithResult(_0x426fe3,null))[_0xf700('0x29')](handleError(_0x426fe3,null));};exports[_0xf700('0xfb')]=function(_0x5a7550,_0x24655b,_0x4f4789){var _0x41d249={};var _0x1afd03={};var _0x6d8d7c;var _0x4ccf23;return db['User'][_0xf700('0xbf')]({'where':{'id':_0x5a7550['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x24655b,null))[_0xf700('0x20')](function(_0xf59331){if(_0xf59331){_0x6d8d7c=_0xf59331;_0x1afd03[_0xf700('0x47')]=_['keys'](db[_0xf700('0x45')][_0xf700('0x46')]);_0x1afd03['query']=_[_0xf700('0x48')](_0x5a7550['query']);_0x1afd03[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x1afd03['model'],_0x1afd03[_0xf700('0x4b')]);_0x41d249[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x1afd03[_0xf700('0x47')],qs['fields'](_0x5a7550[_0xf700('0x4b')][_0xf700('0x4e')]));_0x41d249['attributes']=_0x41d249['attributes'][_0xf700('0x4f')]?_0x41d249[_0xf700('0x4c')]:_0x1afd03[_0xf700('0x47')];_0x41d249['order']=qs[_0xf700('0x53')](_0x5a7550[_0xf700('0x4b')][_0xf700('0x53')]);_0x41d249[_0xf700('0x55')]=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x5a7550[_0xf700('0x4b')],_0x1afd03[_0xf700('0x4a')]));if(_0x5a7550[_0xf700('0x4b')]['filter']){_0x41d249[_0xf700('0x55')]=_['merge'](_0x41d249['where'],{'$or':_[_0xf700('0xba')](_0x41d249['attributes'],function(_0x392e29){var _0x18bf12={};_0x18bf12[_0x392e29]={'$like':'%'+_0x5a7550[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x18bf12;})});}_0x41d249[_0xf700('0x47')]=db['User'];_0x41d249['as']=_0xf700('0x37');_0x41d249=_[_0xf700('0x56')]({},_0x41d249,_0x5a7550[_0xf700('0x5a')]);return _0x6d8d7c['getVoiceQueues']({'include':[_0x41d249]});}})[_0xf700('0x20')](function(_0x40fd0d){if(_0x40fd0d){var _0x17c560={},_0x4dd6e2=[],_0xa6e65f=0x0;for(var _0x490030=0x0;_0x490030<_0x40fd0d[_0xf700('0x4f')];_0x490030+=0x1){for(var _0x42d143=0x0,_0xcb0252;_0x42d143<_0x40fd0d[_0x490030]['Agents'][_0xf700('0x4f')];_0x42d143+=0x1){_0xcb0252=_0x40fd0d[_0x490030][_0xf700('0x37')][_0x42d143][_0xf700('0x34')]({'plain':!![]});_0x17c560[_0xcb0252['id']]=_0xcb0252;}}_0x17c560=_[_0xf700('0xfc')](_0x17c560);for(var _0x34c42c=qs[_0xf700('0x52')](_0x5a7550['query'][_0xf700('0x52')]);_0x34c42c<_0x17c560['length']&&_0x4dd6e2[_0xf700('0x4f')]<qs[_0xf700('0x2e')](_0x5a7550[_0xf700('0x4b')][_0xf700('0x2e')]);_0x34c42c+=0x1){if(_0x17c560[_0x34c42c]){_0x4dd6e2['push'](_0x17c560[_0x34c42c]);}}return{'count':_0x17c560[_0xf700('0x4f')],'rows':_0x4dd6e2};}})[_0xf700('0x20')](respondWithResult(_0x24655b,null))[_0xf700('0x29')](handleError(_0x24655b,null));};exports['destroy']=function(_0x1172e8,_0x5e310b){if(_0x1172e8[_0xf700('0x36')]['id']==_0x1172e8[_0xf700('0x60')]['id']){return _0x5e310b['status'](0x1f4)[_0xf700('0x43')]({'message':_0xf700('0xfd')});}return db[_0xf700('0x45')]['find']({'where':{'id':_0x1172e8[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x5e310b,null))[_0xf700('0x20')](removeEntity(_0x5e310b,null))[_0xf700('0x29')](handleError(_0x5e310b,null));};exports[_0xf700('0xfe')]=function(_0x23241d,_0x55c649,_0x17ead0){return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x23241d[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x55c649,null))[_0xf700('0x20')](function(_0x4aded4){if(_0x4aded4){return _0x4aded4[_0xf700('0xfe')](_0x23241d['body']['ids'],_['omit'](_0x23241d[_0xf700('0x64')],['ids','id'])||{})['spread'](function(){for(var _0x29d138=0x0;_0x29d138<_0x23241d[_0xf700('0x64')][_0xf700('0x67')]['length'];_0x29d138+=0x1){socket['emit'](_0xf700('0xff'),{'ChatInteractionId':Number(_0x23241d['body']['ids'][_0x29d138]),'UserId':Number(_0x23241d[_0xf700('0x60')]['id'])});}return _0x23241d[_0xf700('0x64')][_0xf700('0x67')];});}})[_0xf700('0x20')](respondWithResult(_0x55c649,null))[_0xf700('0x29')](handleError(_0x55c649,null));};exports[_0xf700('0x100')]=function(_0x760566,_0x27bab1,_0x430625){var _0x4ebe4c;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x760566['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x27bab1,null))[_0xf700('0x20')](function(_0xdaa4fb){if(_0xdaa4fb){return _0xdaa4fb[_0xf700('0x100')](_0x760566['query'][_0xf700('0x67')])[_0xf700('0x20')](function(_0x1d692d){if(_[_0xf700('0x101')](_0x760566[_0xf700('0x4b')][_0xf700('0x67')])){for(var _0x51199e=0x0;_0x51199e<_0x760566['query'][_0xf700('0x67')][_0xf700('0x4f')];_0x51199e+=0x1){socket[_0xf700('0x9f')](_0xf700('0x102'),{'ChatInteractionId':Number(_0x760566[_0xf700('0x4b')][_0xf700('0x67')][_0x51199e]),'UserId':Number(_0x760566['params']['id'])});}}else{socket[_0xf700('0x9f')](_0xf700('0x102'),{'ChatInteractionId':Number(_0x760566[_0xf700('0x4b')][_0xf700('0x67')]),'UserId':Number(_0x760566[_0xf700('0x60')]['id'])});}});}})[_0xf700('0x20')](respondWithStatusCode(_0x27bab1,null))['catch'](handleError(_0x27bab1,null));};exports['addMailInteractions']=function(_0x4e283d,_0x2d88bb,_0x2be435){return db[_0xf700('0x45')]['find']({'where':{'id':_0x4e283d['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x2d88bb,null))[_0xf700('0x20')](function(_0x546d32){if(_0x546d32){return _0x546d32[_0xf700('0x103')](_0x4e283d[_0xf700('0x64')][_0xf700('0x67')],_[_0xf700('0x68')](_0x4e283d['body'],[_0xf700('0x67'),'id'])||{})[_0xf700('0x104')](function(){for(var _0x4f7759=0x0;_0x4f7759<_0x4e283d[_0xf700('0x64')][_0xf700('0x67')][_0xf700('0x4f')];_0x4f7759+=0x1){socket[_0xf700('0x9f')](_0xf700('0x105'),{'MailInteractionId':Number(_0x4e283d['body'][_0xf700('0x67')][_0x4f7759]),'UserId':Number(_0x4e283d['params']['id'])});}return _0x4e283d[_0xf700('0x64')][_0xf700('0x67')];});}})['then'](respondWithResult(_0x2d88bb,null))['catch'](handleError(_0x2d88bb,null));};exports[_0xf700('0x106')]=function(_0x3c9828,_0x186271,_0xf0cc39){var _0x470c95;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x3c9828['params']['id']}})['then'](handleEntityNotFound(_0x186271,null))['then'](function(_0x234e64){if(_0x234e64){return _0x234e64[_0xf700('0x106')](_0x3c9828[_0xf700('0x4b')][_0xf700('0x67')])['then'](function(_0x4dc339){if(_[_0xf700('0x101')](_0x3c9828[_0xf700('0x4b')]['ids'])){for(var _0x493f58=0x0;_0x493f58<_0x3c9828[_0xf700('0x4b')][_0xf700('0x67')][_0xf700('0x4f')];_0x493f58+=0x1){socket[_0xf700('0x9f')](_0xf700('0x107'),{'MailInteractionId':Number(_0x3c9828['query'][_0xf700('0x67')][_0x493f58]),'UserId':Number(_0x3c9828[_0xf700('0x60')]['id'])});}}else{socket[_0xf700('0x9f')]('user_has_mail_interactions:remove',{'MailInteractionId':Number(_0x3c9828['query'][_0xf700('0x67')]),'UserId':Number(_0x3c9828[_0xf700('0x60')]['id'])});}});}})[_0xf700('0x20')](respondWithStatusCode(_0x186271,null))[_0xf700('0x29')](handleError(_0x186271,null));};exports[_0xf700('0x108')]=function(_0x1d539f,_0x590012,_0x149afe){return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x1d539f[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x590012,null))[_0xf700('0x20')](function(_0x2fce4b){if(_0x2fce4b){return _0x2fce4b[_0xf700('0x108')](_0x1d539f[_0xf700('0x64')][_0xf700('0x67')],_[_0xf700('0x68')](_0x1d539f[_0xf700('0x64')],[_0xf700('0x67'),'id'])||{})[_0xf700('0x104')](function(){for(var _0x444edd=0x0;_0x444edd<_0x1d539f[_0xf700('0x64')][_0xf700('0x67')][_0xf700('0x4f')];_0x444edd+=0x1){socket[_0xf700('0x9f')](_0xf700('0x109'),{'FaxInteractionId':Number(_0x1d539f['body'][_0xf700('0x67')][_0x444edd]),'UserId':Number(_0x1d539f[_0xf700('0x60')]['id'])});}return _0x1d539f[_0xf700('0x64')][_0xf700('0x67')];});}})[_0xf700('0x20')](respondWithResult(_0x590012,null))[_0xf700('0x29')](handleError(_0x590012,null));};exports[_0xf700('0x10a')]=function(_0x44689d,_0x517fa5,_0x5a7005){var _0x2f0178;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x44689d[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x517fa5,null))[_0xf700('0x20')](function(_0x51536d){if(_0x51536d){return _0x51536d[_0xf700('0x10a')](_0x44689d[_0xf700('0x4b')][_0xf700('0x67')])['then'](function(_0x3c0765){if(_[_0xf700('0x101')](_0x44689d[_0xf700('0x4b')][_0xf700('0x67')])){for(var _0x1568c9=0x0;_0x1568c9<_0x44689d['query'][_0xf700('0x67')]['length'];_0x1568c9+=0x1){socket[_0xf700('0x9f')]('user_has_fax_interactions:remove',{'FaxInteractionId':Number(_0x44689d[_0xf700('0x4b')][_0xf700('0x67')][_0x1568c9]),'UserId':Number(_0x44689d[_0xf700('0x60')]['id'])});}}else{socket[_0xf700('0x9f')]('user_has_fax_interactions:remove',{'FaxInteractionId':Number(_0x44689d[_0xf700('0x4b')]['ids']),'UserId':Number(_0x44689d['params']['id'])});}});}})[_0xf700('0x20')](respondWithStatusCode(_0x517fa5,null))['catch'](handleError(_0x517fa5,null));};exports[_0xf700('0x10b')]=function(_0x33800f,_0x16dd74,_0x33f741){return db['User'][_0xf700('0x3e')]({'where':{'id':_0x33800f['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x16dd74,null))[_0xf700('0x20')](function(_0x208fab){if(_0x208fab){return _0x208fab[_0xf700('0x10b')](_0x33800f[_0xf700('0x64')][_0xf700('0x67')],_[_0xf700('0x68')](_0x33800f['body'],[_0xf700('0x67'),'id'])||{})[_0xf700('0x104')](function(){for(var _0x178867=0x0;_0x178867<_0x33800f[_0xf700('0x64')]['ids'][_0xf700('0x4f')];_0x178867+=0x1){socket[_0xf700('0x9f')](_0xf700('0x10c'),{'SmsInteractionId':Number(_0x33800f[_0xf700('0x64')][_0xf700('0x67')][_0x178867]),'UserId':Number(_0x33800f['params']['id'])});}return _0x33800f[_0xf700('0x64')][_0xf700('0x67')];});}})[_0xf700('0x20')](respondWithResult(_0x16dd74,null))[_0xf700('0x29')](handleError(_0x16dd74,null));};exports[_0xf700('0x10d')]=function(_0x565577,_0x2e102e,_0x1f2463){var _0x4c7a78;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x565577[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x2e102e,null))[_0xf700('0x20')](function(_0x3fc3d7){if(_0x3fc3d7){return _0x3fc3d7['removeSmsInteractions'](_0x565577[_0xf700('0x4b')][_0xf700('0x67')])[_0xf700('0x20')](function(_0x36456f){if(_['isArray'](_0x565577[_0xf700('0x4b')]['ids'])){for(var _0x1ff2ba=0x0;_0x1ff2ba<_0x565577[_0xf700('0x4b')]['ids'][_0xf700('0x4f')];_0x1ff2ba+=0x1){socket['emit'](_0xf700('0x10e'),{'SmsInteractionId':Number(_0x565577['query'][_0xf700('0x67')][_0x1ff2ba]),'UserId':Number(_0x565577[_0xf700('0x60')]['id'])});}}else{socket[_0xf700('0x9f')]('user_has_sms_interactions:remove',{'SmsInteractionId':Number(_0x565577[_0xf700('0x4b')][_0xf700('0x67')]),'UserId':Number(_0x565577['params']['id'])});}});}})[_0xf700('0x20')](respondWithStatusCode(_0x2e102e,null))['catch'](handleError(_0x2e102e,null));};exports[_0xf700('0x10f')]=function(_0x1828f4,_0x225350,_0x1a9906){return db['User'][_0xf700('0x3e')]({'where':{'id':_0x1828f4[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x225350,null))['then'](function(_0x20fedf){if(_0x20fedf){return _0x20fedf['addOpenchannelInteractions'](_0x1828f4[_0xf700('0x64')]['ids'],_[_0xf700('0x68')](_0x1828f4[_0xf700('0x64')],[_0xf700('0x67'),'id'])||{})['spread'](function(){for(var _0x52f5df=0x0;_0x52f5df<_0x1828f4[_0xf700('0x64')][_0xf700('0x67')][_0xf700('0x4f')];_0x52f5df+=0x1){socket[_0xf700('0x9f')](_0xf700('0x110'),{'OpenchannelInteractionId':Number(_0x1828f4[_0xf700('0x64')][_0xf700('0x67')][_0x52f5df]),'UserId':Number(_0x1828f4[_0xf700('0x60')]['id'])});}return _0x1828f4[_0xf700('0x64')][_0xf700('0x67')];});}})[_0xf700('0x20')](respondWithResult(_0x225350,null))[_0xf700('0x29')](handleError(_0x225350,null));};exports['removeOpenchannelInteractions']=function(_0x54e297,_0x329d50,_0x550772){var _0x3a8801;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x54e297[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x329d50,null))['then'](function(_0x313800){if(_0x313800){return _0x313800[_0xf700('0x111')](_0x54e297['query'][_0xf700('0x67')])['then'](function(_0x43edb0){if(_['isArray'](_0x54e297[_0xf700('0x4b')][_0xf700('0x67')])){for(var _0x3368d3=0x0;_0x3368d3<_0x54e297[_0xf700('0x4b')][_0xf700('0x67')][_0xf700('0x4f')];_0x3368d3+=0x1){socket[_0xf700('0x9f')](_0xf700('0x112'),{'OpenchannelInteractionId':Number(_0x54e297[_0xf700('0x4b')][_0xf700('0x67')][_0x3368d3]),'UserId':Number(_0x54e297['params']['id'])});}}else{socket[_0xf700('0x9f')]('user_has_openchannel_interactions:remove',{'OpenchannelInteractionId':Number(_0x54e297[_0xf700('0x4b')]['ids']),'UserId':Number(_0x54e297[_0xf700('0x60')]['id'])});}});}})[_0xf700('0x20')](respondWithStatusCode(_0x329d50,null))[_0xf700('0x29')](handleError(_0x329d50,null));};exports[_0xf700('0x113')]=function(_0x4c0cde,_0x42ae2a,_0x47e9bf){var _0x412453={};var _0x56259b={};var _0x245f3a;var _0x58a307;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x4c0cde[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x42ae2a,null))[_0xf700('0x20')](function(_0xca84e6){if(_0xca84e6){_0x245f3a=_0xca84e6;_0x56259b[_0xf700('0x47')]=_[_0xf700('0x48')](db['VoicePrefix'][_0xf700('0x46')]);_0x56259b[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x4c0cde[_0xf700('0x4b')]);_0x56259b['filters']=_[_0xf700('0x4d')](_0x56259b['model'],_0x56259b[_0xf700('0x4b')]);_0x412453['attributes']=_['intersection'](_0x56259b[_0xf700('0x47')],qs['fields'](_0x4c0cde[_0xf700('0x4b')]['fields']));_0x412453[_0xf700('0x4c')]=_0x412453[_0xf700('0x4c')]['length']?_0x412453['attributes']:_0x56259b[_0xf700('0x47')];_0x412453[_0xf700('0xc1')]=qs['sort'](_0x4c0cde[_0xf700('0x4b')][_0xf700('0x53')]);_0x412453[_0xf700('0x55')]=qs[_0xf700('0x4a')](_['pick'](_0x4c0cde[_0xf700('0x4b')],_0x56259b[_0xf700('0x4a')]));if(_0x4c0cde[_0xf700('0x4b')]['filter']){_0x412453[_0xf700('0x55')]=_[_0xf700('0x56')](_0x412453[_0xf700('0x55')],{'$or':_['map'](_0x412453[_0xf700('0x4c')],function(_0x58c996){var _0x4b84a5={};_0x4b84a5[_0x58c996]={'$like':'%'+_0x4c0cde['query'][_0xf700('0x59')]+'%'};return _0x4b84a5;})});}_0x412453=_['merge']({},_0x412453,_0x4c0cde[_0xf700('0x5a')]);return _0x245f3a[_0xf700('0x113')](_0x412453);}})[_0xf700('0x20')](function(_0x3b88ce){if(_0x3b88ce){_0x58a307=_0x3b88ce['length'];if(!_0x4c0cde['query'][_0xf700('0x50')](_0xf700('0x51'))){_0x412453[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x4c0cde['query'][_0xf700('0x2e')]);_0x412453[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x4c0cde[_0xf700('0x4b')]['offset']);}return _0x245f3a[_0xf700('0x113')](_0x412453);}})[_0xf700('0x20')](function(_0x2fed75){if(_0x2fed75){return _0x2fed75?{'count':_0x58a307,'rows':_0x2fed75}:null;}})['then'](respondWithResult(_0x42ae2a,null))[_0xf700('0x29')](handleError(_0x42ae2a,null));};exports[_0xf700('0x114')]=function(_0x48629d,_0x4b4a6b,_0x12139a){var _0x378146={};var _0x663458={};var _0x432d83;var _0x1c137f;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x48629d[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x4b4a6b,null))['then'](function(_0xec03de){if(_0xec03de){_0x432d83=_0xec03de;_0x663458['model']=_[_0xf700('0x48')](db['FaxAccount'][_0xf700('0x46')]);_0x663458['query']=_[_0xf700('0x48')](_0x48629d[_0xf700('0x4b')]);_0x663458['filters']=_[_0xf700('0x4d')](_0x663458[_0xf700('0x47')],_0x663458['query']);_0x378146[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x663458['model'],qs['fields'](_0x48629d[_0xf700('0x4b')][_0xf700('0x4e')]));_0x378146[_0xf700('0x4c')]=_0x378146[_0xf700('0x4c')]['length']?_0x378146['attributes']:_0x663458[_0xf700('0x47')];_0x378146[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x48629d[_0xf700('0x4b')][_0xf700('0x53')]);_0x378146['where']=qs['filters'](_[_0xf700('0x54')](_0x48629d['query'],_0x663458[_0xf700('0x4a')]));if(_0x48629d[_0xf700('0x4b')][_0xf700('0x59')]){_0x378146['where']=_[_0xf700('0x56')](_0x378146[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x378146[_0xf700('0x4c')],function(_0x380eb2){var _0x11e746={};_0x11e746[_0x380eb2]={'$like':'%'+_0x48629d[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x11e746;})});}_0x378146=_['merge']({},_0x378146,_0x48629d[_0xf700('0x5a')]);return _0x432d83[_0xf700('0x114')](_0x378146);}})[_0xf700('0x20')](function(_0x3744ca){if(_0x3744ca){_0x1c137f=_0x3744ca[_0xf700('0x4f')];if(!_0x48629d['query'][_0xf700('0x50')](_0xf700('0x51'))){_0x378146[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x48629d[_0xf700('0x4b')][_0xf700('0x2e')]);_0x378146[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x48629d[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x432d83[_0xf700('0x114')](_0x378146);}})[_0xf700('0x20')](function(_0x364d52){if(_0x364d52){return _0x364d52?{'count':_0x1c137f,'rows':_0x364d52}:null;}})[_0xf700('0x20')](respondWithResult(_0x4b4a6b,null))[_0xf700('0x29')](handleError(_0x4b4a6b,null));};exports[_0xf700('0x115')]=function(_0xb63668,_0x481411,_0xffd484){return db['User'][_0xf700('0x3e')]({'where':{'id':_0xb63668[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x481411,null))['then'](function(_0xc2f7b6){if(_0xc2f7b6){return _0xc2f7b6[_0xf700('0x115')](_0xb63668[_0xf700('0x64')]['ids'],_[_0xf700('0x68')](_0xb63668[_0xf700('0x64')],[_0xf700('0x67'),'id'])||{});}})[_0xf700('0x20')](respondWithResult(_0x481411,null))['catch'](handleError(_0x481411,null));};exports['removeFaxAccounts']=function(_0x3925f4,_0x2600a1,_0x50b27){var _0x31491b;return db[_0xf700('0x45')]['find']({'where':{'id':_0x3925f4['params']['id']}})['then'](handleEntityNotFound(_0x2600a1,null))['then'](function(_0x494296){if(_0x494296){return _0x494296['removeFaxAccounts'](_0x3925f4[_0xf700('0x4b')][_0xf700('0x67')]);}})[_0xf700('0x20')](respondWithStatusCode(_0x2600a1,null))[_0xf700('0x29')](handleError(_0x2600a1,null));};exports[_0xf700('0x116')]=function(_0x49c13c,_0x291807,_0x554456){var _0x4cf99d={};var _0x436f93={};var _0x165285;var _0x5e2b22;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x49c13c[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x291807,null))['then'](function(_0xb578c6){if(_0xb578c6){_0x165285=_0xb578c6;_0x436f93[_0xf700('0x47')]=_[_0xf700('0x48')](db['MailAccount'][_0xf700('0x46')]);_0x436f93['query']=_['keys'](_0x49c13c[_0xf700('0x4b')]);_0x436f93[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x436f93[_0xf700('0x47')],_0x436f93['query']);_0x4cf99d[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x436f93[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x49c13c[_0xf700('0x4b')][_0xf700('0x4e')]));_0x4cf99d[_0xf700('0x4c')]=_0x4cf99d[_0xf700('0x4c')][_0xf700('0x4f')]?_0x4cf99d['attributes']:_0x436f93['model'];_0x4cf99d[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x49c13c[_0xf700('0x4b')][_0xf700('0x53')]);_0x4cf99d[_0xf700('0x55')]=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x49c13c[_0xf700('0x4b')],_0x436f93[_0xf700('0x4a')]));if(_0x49c13c[_0xf700('0x4b')]['filter']){_0x4cf99d[_0xf700('0x55')]=_[_0xf700('0x56')](_0x4cf99d[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x4cf99d[_0xf700('0x4c')],function(_0x538892){var _0x209d31={};_0x209d31[_0x538892]={'$like':'%'+_0x49c13c[_0xf700('0x4b')]['filter']+'%'};return _0x209d31;})});}_0x4cf99d=_[_0xf700('0x56')]({},_0x4cf99d,_0x49c13c['options']);return _0x165285['getMailAccounts'](_0x4cf99d);}})[_0xf700('0x20')](function(_0x58d452){if(_0x58d452){_0x5e2b22=_0x58d452[_0xf700('0x4f')];if(!_0x49c13c[_0xf700('0x4b')][_0xf700('0x50')](_0xf700('0x51'))){_0x4cf99d[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x49c13c['query'][_0xf700('0x2e')]);_0x4cf99d[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x49c13c[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x165285[_0xf700('0x116')](_0x4cf99d);}})[_0xf700('0x20')](function(_0x29a3a8){if(_0x29a3a8){return _0x29a3a8?{'count':_0x5e2b22,'rows':_0x29a3a8}:null;}})[_0xf700('0x20')](respondWithResult(_0x291807,null))[_0xf700('0x29')](handleError(_0x291807,null));};exports['addMailAccounts']=function(_0x1dfab3,_0x2caae2,_0xecb7cf){return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x1dfab3[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x2caae2,null))[_0xf700('0x20')](function(_0x398892){if(_0x398892){return _0x398892['addMailAccounts'](_0x1dfab3[_0xf700('0x64')][_0xf700('0x67')],_[_0xf700('0x68')](_0x1dfab3[_0xf700('0x64')],[_0xf700('0x67'),'id'])||{});}})['then'](respondWithResult(_0x2caae2,null))[_0xf700('0x29')](handleError(_0x2caae2,null));};exports[_0xf700('0x117')]=function(_0x3ecbe7,_0x5603b2,_0x22495f){var _0x626c02;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x3ecbe7['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x5603b2,null))[_0xf700('0x20')](function(_0x6703c2){if(_0x6703c2){return _0x6703c2['removeMailAccounts'](_0x3ecbe7[_0xf700('0x4b')][_0xf700('0x67')]);}})[_0xf700('0x20')](respondWithStatusCode(_0x5603b2,null))[_0xf700('0x29')](handleError(_0x5603b2,null));};exports[_0xf700('0x118')]=function(_0x211ce9,_0x1557b2,_0x424199){var _0xd57482={};var _0x359f17={};var _0x42c5d2;var _0xfe77aa;return db['User'][_0xf700('0xbf')]({'where':{'id':_0x211ce9[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x1557b2,null))[_0xf700('0x20')](function(_0x33beb3){if(_0x33beb3){_0x42c5d2=_0x33beb3;_0x359f17[_0xf700('0x47')]=_['keys'](db[_0xf700('0x119')][_0xf700('0x46')]);_0x359f17[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x211ce9[_0xf700('0x4b')]);_0x359f17[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x359f17[_0xf700('0x47')],_0x359f17[_0xf700('0x4b')]);_0xd57482[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x359f17['model'],qs[_0xf700('0x4e')](_0x211ce9[_0xf700('0x4b')][_0xf700('0x4e')]));_0xd57482[_0xf700('0x4c')]=_0xd57482[_0xf700('0x4c')][_0xf700('0x4f')]?_0xd57482[_0xf700('0x4c')]:_0x359f17[_0xf700('0x47')];_0xd57482['order']=qs['sort'](_0x211ce9[_0xf700('0x4b')][_0xf700('0x53')]);_0xd57482[_0xf700('0x55')]=qs['filters'](_[_0xf700('0x54')](_0x211ce9[_0xf700('0x4b')],_0x359f17[_0xf700('0x4a')]));if(_0x211ce9[_0xf700('0x4b')][_0xf700('0x59')]){_0xd57482[_0xf700('0x55')]=_['merge'](_0xd57482['where'],{'$or':_['map'](_0xd57482['attributes'],function(_0x2f8468){var _0x4a8cb7={};_0x4a8cb7[_0x2f8468]={'$like':'%'+_0x211ce9[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x4a8cb7;})});}_0xd57482=_[_0xf700('0x56')]({},_0xd57482,_0x211ce9['options']);return _0x42c5d2['getOpenchannelAccounts'](_0xd57482);}})[_0xf700('0x20')](function(_0x4956d8){if(_0x4956d8){_0xfe77aa=_0x4956d8[_0xf700('0x4f')];if(!_0x211ce9['query'][_0xf700('0x50')](_0xf700('0x51'))){_0xd57482[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x211ce9[_0xf700('0x4b')][_0xf700('0x2e')]);_0xd57482[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x211ce9['query'][_0xf700('0x52')]);}return _0x42c5d2['getOpenchannelAccounts'](_0xd57482);}})[_0xf700('0x20')](function(_0x2292e9){if(_0x2292e9){return _0x2292e9?{'count':_0xfe77aa,'rows':_0x2292e9}:null;}})[_0xf700('0x20')](respondWithResult(_0x1557b2,null))[_0xf700('0x29')](handleError(_0x1557b2,null));};exports[_0xf700('0x11a')]=function(_0x5bfc79,_0x3096b1,_0x49f516){return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x5bfc79[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x3096b1,null))[_0xf700('0x20')](function(_0x4e9218){if(_0x4e9218){return _0x4e9218[_0xf700('0x11a')](_0x5bfc79[_0xf700('0x64')]['ids'],_[_0xf700('0x68')](_0x5bfc79[_0xf700('0x64')],['ids','id'])||{});}})['then'](respondWithResult(_0x3096b1,null))[_0xf700('0x29')](handleError(_0x3096b1,null));};exports[_0xf700('0x11b')]=function(_0x6ec45c,_0x195593,_0x2b4da4){var _0x49b8ae;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x6ec45c[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x195593,null))[_0xf700('0x20')](function(_0x1c1d25){if(_0x1c1d25){return _0x1c1d25[_0xf700('0x11b')](_0x6ec45c['query'][_0xf700('0x67')]);}})['then'](respondWithStatusCode(_0x195593,null))[_0xf700('0x29')](handleError(_0x195593,null));};exports[_0xf700('0x11c')]=function(_0x4de9c1,_0x402a0a,_0x5a8c1a){var _0x3dcdd6={};var _0x5427d5={};var _0x2da694;var _0x442586;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x4de9c1['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x402a0a,null))['then'](function(_0x4e9418){if(_0x4e9418){_0x2da694=_0x4e9418;_0x5427d5[_0xf700('0x47')]=_[_0xf700('0x48')](db['SmsAccount'][_0xf700('0x46')]);_0x5427d5[_0xf700('0x4b')]=_['keys'](_0x4de9c1[_0xf700('0x4b')]);_0x5427d5['filters']=_[_0xf700('0x4d')](_0x5427d5[_0xf700('0x47')],_0x5427d5[_0xf700('0x4b')]);_0x3dcdd6['attributes']=_[_0xf700('0x4d')](_0x5427d5[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x4de9c1[_0xf700('0x4b')][_0xf700('0x4e')]));_0x3dcdd6[_0xf700('0x4c')]=_0x3dcdd6[_0xf700('0x4c')][_0xf700('0x4f')]?_0x3dcdd6[_0xf700('0x4c')]:_0x5427d5['model'];_0x3dcdd6[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x4de9c1['query'][_0xf700('0x53')]);_0x3dcdd6[_0xf700('0x55')]=qs[_0xf700('0x4a')](_[_0xf700('0x54')](_0x4de9c1[_0xf700('0x4b')],_0x5427d5[_0xf700('0x4a')]));if(_0x4de9c1[_0xf700('0x4b')][_0xf700('0x59')]){_0x3dcdd6[_0xf700('0x55')]=_[_0xf700('0x56')](_0x3dcdd6[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x3dcdd6['attributes'],function(_0x1997ab){var _0x2d54d0={};_0x2d54d0[_0x1997ab]={'$like':'%'+_0x4de9c1[_0xf700('0x4b')]['filter']+'%'};return _0x2d54d0;})});}_0x3dcdd6=_['merge']({},_0x3dcdd6,_0x4de9c1[_0xf700('0x5a')]);return _0x2da694['getSmsAccounts'](_0x3dcdd6);}})[_0xf700('0x20')](function(_0x1b5ab2){if(_0x1b5ab2){_0x442586=_0x1b5ab2[_0xf700('0x4f')];if(!_0x4de9c1[_0xf700('0x4b')]['hasOwnProperty']('nolimit')){_0x3dcdd6[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x4de9c1['query']['limit']);_0x3dcdd6[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x4de9c1[_0xf700('0x4b')][_0xf700('0x52')]);}return _0x2da694[_0xf700('0x11c')](_0x3dcdd6);}})[_0xf700('0x20')](function(_0x419e0b){if(_0x419e0b){return _0x419e0b?{'count':_0x442586,'rows':_0x419e0b}:null;}})[_0xf700('0x20')](respondWithResult(_0x402a0a,null))['catch'](handleError(_0x402a0a,null));};exports[_0xf700('0x11d')]=function(_0x93878a,_0x2f8c83,_0x75f11e){return db[_0xf700('0x45')]['find']({'where':{'id':_0x93878a[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x2f8c83,null))['then'](function(_0x8b7265){if(_0x8b7265){return _0x8b7265[_0xf700('0x11d')](_0x93878a[_0xf700('0x64')][_0xf700('0x67')],_[_0xf700('0x68')](_0x93878a[_0xf700('0x64')],[_0xf700('0x67'),'id'])||{});}})[_0xf700('0x20')](respondWithResult(_0x2f8c83,null))[_0xf700('0x29')](handleError(_0x2f8c83,null));};exports[_0xf700('0x11e')]=function(_0xf9e2e,_0x2d8c64,_0x5f8167){var _0x3fa22d;return db[_0xf700('0x45')]['find']({'where':{'id':_0xf9e2e['params']['id']}})['then'](handleEntityNotFound(_0x2d8c64,null))[_0xf700('0x20')](function(_0x4431e0){if(_0x4431e0){return _0x4431e0['removeSmsAccounts'](_0xf9e2e[_0xf700('0x4b')]['ids']);}})[_0xf700('0x20')](respondWithStatusCode(_0x2d8c64,null))[_0xf700('0x29')](handleError(_0x2d8c64,null));};exports[_0xf700('0x11f')]=function(_0x40f0f3,_0x2f00a5,_0xfb6cdd){var _0x1a04e2={};var _0x29914b={};var _0xd7d5dd;var _0x4bd05f;return db[_0xf700('0x45')][_0xf700('0xbf')]({'where':{'id':_0x40f0f3['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x2f00a5,null))[_0xf700('0x20')](function(_0x21830f){if(_0x21830f){_0xd7d5dd=_0x21830f;_0x29914b[_0xf700('0x47')]=_[_0xf700('0x48')](db[_0xf700('0x120')][_0xf700('0x46')]);_0x29914b[_0xf700('0x4b')]=_[_0xf700('0x48')](_0x40f0f3[_0xf700('0x4b')]);_0x29914b[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0x29914b[_0xf700('0x47')],_0x29914b[_0xf700('0x4b')]);_0x1a04e2[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0x29914b[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x40f0f3[_0xf700('0x4b')][_0xf700('0x4e')]));_0x1a04e2[_0xf700('0x4c')]=_0x1a04e2[_0xf700('0x4c')][_0xf700('0x4f')]?_0x1a04e2['attributes']:_0x29914b[_0xf700('0x47')];_0x1a04e2[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x40f0f3[_0xf700('0x4b')][_0xf700('0x53')]);_0x1a04e2[_0xf700('0x55')]=qs['filters'](_[_0xf700('0x54')](_0x40f0f3[_0xf700('0x4b')],_0x29914b['filters']));if(_0x40f0f3[_0xf700('0x4b')]['filter']){_0x1a04e2[_0xf700('0x55')]=_['merge'](_0x1a04e2[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x1a04e2['attributes'],function(_0x3678c2){var _0xa099dd={};_0xa099dd[_0x3678c2]={'$like':'%'+_0x40f0f3[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0xa099dd;})});}_0x1a04e2=_[_0xf700('0x56')]({},_0x1a04e2,_0x40f0f3[_0xf700('0x5a')]);return _0xd7d5dd['getChatWebsites'](_0x1a04e2);}})[_0xf700('0x20')](function(_0x545e3b){if(_0x545e3b){_0x4bd05f=_0x545e3b['length'];if(!_0x40f0f3[_0xf700('0x4b')][_0xf700('0x50')]('nolimit')){_0x1a04e2[_0xf700('0x2e')]=qs['limit'](_0x40f0f3[_0xf700('0x4b')][_0xf700('0x2e')]);_0x1a04e2[_0xf700('0x52')]=qs['offset'](_0x40f0f3[_0xf700('0x4b')][_0xf700('0x52')]);}return _0xd7d5dd[_0xf700('0x11f')](_0x1a04e2);}})[_0xf700('0x20')](function(_0x1a4518){if(_0x1a4518){return _0x1a4518?{'count':_0x4bd05f,'rows':_0x1a4518}:null;}})[_0xf700('0x20')](respondWithResult(_0x2f00a5,null))['catch'](handleError(_0x2f00a5,null));};exports[_0xf700('0x121')]=function(_0x91b987,_0x2da345,_0x2476b4){return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x91b987[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x2da345,null))[_0xf700('0x20')](function(_0x372a9f){if(_0x372a9f){return _0x372a9f[_0xf700('0x121')](_0x91b987[_0xf700('0x64')][_0xf700('0x67')],_[_0xf700('0x68')](_0x91b987[_0xf700('0x64')],[_0xf700('0x67'),'id'])||{});}})['then'](respondWithResult(_0x2da345,null))[_0xf700('0x29')](handleError(_0x2da345,null));};exports[_0xf700('0x122')]=function(_0x49a8b7,_0x39e85e,_0x3cb058){var _0x533d79;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x49a8b7[_0xf700('0x60')]['id']}})['then'](handleEntityNotFound(_0x39e85e,null))[_0xf700('0x20')](function(_0x1860e8){if(_0x1860e8){return _0x1860e8[_0xf700('0x122')](_0x49a8b7[_0xf700('0x4b')][_0xf700('0x67')]);}})['then'](respondWithStatusCode(_0x39e85e,null))[_0xf700('0x29')](handleError(_0x39e85e,null));};exports['getSquareProjects']=function(_0x1dc636,_0x4660c7,_0x7b51c6){var _0x39c4ec={};var _0x4d986c={};var _0xeb9566;var _0x37414b;return db['User'][_0xf700('0xbf')]({'where':{'id':_0x1dc636['params']['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x4660c7,null))[_0xf700('0x20')](function(_0x32fa0f){if(_0x32fa0f){_0xeb9566=_0x32fa0f;_0x4d986c[_0xf700('0x47')]=_[_0xf700('0x48')](db[_0xf700('0x123')][_0xf700('0x46')]);_0x4d986c['query']=_[_0xf700('0x48')](_0x1dc636['query']);_0x4d986c[_0xf700('0x4a')]=_['intersection'](_0x4d986c[_0xf700('0x47')],_0x4d986c['query']);_0x39c4ec[_0xf700('0x4c')]=_['intersection'](_0x4d986c[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x1dc636['query']['fields']));_0x39c4ec['attributes']=_0x39c4ec[_0xf700('0x4c')][_0xf700('0x4f')]?_0x39c4ec[_0xf700('0x4c')]:_0x4d986c['model'];_0x39c4ec[_0xf700('0xc1')]=qs[_0xf700('0x53')](_0x1dc636[_0xf700('0x4b')][_0xf700('0x53')]);_0x39c4ec[_0xf700('0x55')]=qs['filters'](_[_0xf700('0x54')](_0x1dc636[_0xf700('0x4b')],_0x4d986c[_0xf700('0x4a')]));if(_0x1dc636[_0xf700('0x4b')][_0xf700('0x59')]){_0x39c4ec[_0xf700('0x55')]=_[_0xf700('0x56')](_0x39c4ec[_0xf700('0x55')],{'$or':_[_0xf700('0xba')](_0x39c4ec[_0xf700('0x4c')],function(_0x506462){var _0x4ac9e6={};_0x4ac9e6[_0x506462]={'$like':'%'+_0x1dc636[_0xf700('0x4b')][_0xf700('0x59')]+'%'};return _0x4ac9e6;})});}_0x39c4ec=_[_0xf700('0x56')]({},_0x39c4ec,_0x1dc636['options']);return _0xeb9566['getSquareProjects'](_0x39c4ec);}})['then'](function(_0x37f45a){if(_0x37f45a){_0x37414b=_0x37f45a[_0xf700('0x4f')];if(!_0x1dc636[_0xf700('0x4b')]['hasOwnProperty'](_0xf700('0x51'))){_0x39c4ec[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x1dc636[_0xf700('0x4b')][_0xf700('0x2e')]);_0x39c4ec[_0xf700('0x52')]=qs[_0xf700('0x52')](_0x1dc636[_0xf700('0x4b')][_0xf700('0x52')]);}return _0xeb9566[_0xf700('0x124')](_0x39c4ec);}})[_0xf700('0x20')](function(_0x11588b){if(_0x11588b){return _0x11588b?{'count':_0x37414b,'rows':_0x11588b}:null;}})[_0xf700('0x20')](respondWithResult(_0x4660c7,null))['catch'](handleError(_0x4660c7,null));};exports['addSquareProjects']=function(_0x382c24,_0x7e9212,_0x4cea89){return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x382c24[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x7e9212,null))['then'](function(_0x42d53f){if(_0x42d53f){return _0x42d53f[_0xf700('0x125')](_0x382c24['body'][_0xf700('0x67')],_[_0xf700('0x68')](_0x382c24[_0xf700('0x64')],[_0xf700('0x67'),'id'])||{});}})['then'](respondWithResult(_0x7e9212,null))[_0xf700('0x29')](handleError(_0x7e9212,null));};exports['removeSquareProjects']=function(_0x42d11b,_0x317470,_0x234d23){var _0xef8a96;return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x42d11b[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x317470,null))['then'](function(_0x49ec1d){if(_0x49ec1d){return _0x49ec1d['removeSquareProjects'](_0x42d11b[_0xf700('0x4b')][_0xf700('0x67')]);}})[_0xf700('0x20')](respondWithStatusCode(_0x317470,null))['catch'](handleError(_0x317470,null));};exports[_0xf700('0x126')]=function(_0x1143b1,_0x5e92fd){var _0xc3189a={},_0xebb6a8={},_0x14810d={'count':0x0,'rows':[]};var _0x173f23=db['CmHopper']['rawAttributes'];_0xebb6a8[_0xf700('0x47')]=_[_0xf700('0x48')](_0x173f23);_0xebb6a8['query']=_[_0xf700('0x48')](_0x1143b1['query']);_0xebb6a8[_0xf700('0x4a')]=_[_0xf700('0x4d')](_0xebb6a8[_0xf700('0x47')],_0xebb6a8[_0xf700('0x4b')]);_0xebb6a8[_0xf700('0x4a')]=_[_0xf700('0x127')](_0xebb6a8['filters'],['$and',_0xf700('0x128'),_0xf700('0x129'),_0xf700('0x12a'),_0xf700('0x12b'),'$lte',_0xf700('0x12c'),_0xf700('0x12d'),_0xf700('0x12e'),_0xf700('0x12f'),_0xf700('0x130'),_0xf700('0x131'),_0xf700('0x132'),'$like',_0xf700('0x133'),_0xf700('0x134'),_0xf700('0x135'),_0xf700('0x136'),'$overlap',_0xf700('0x137'),_0xf700('0x138'),_0xf700('0x139')]);_0xc3189a[_0xf700('0x4c')]=_[_0xf700('0x4d')](_0xebb6a8[_0xf700('0x47')],qs[_0xf700('0x4e')](_0x1143b1[_0xf700('0x4b')][_0xf700('0x4e')]));_0xc3189a[_0xf700('0x4c')]=_0xc3189a[_0xf700('0x4c')]['length']?_0xc3189a[_0xf700('0x4c')]:_0xebb6a8['model'];if(!_0x1143b1['query']['hasOwnProperty'](_0xf700('0x51'))){_0xc3189a[_0xf700('0x2e')]=qs[_0xf700('0x2e')](_0x1143b1[_0xf700('0x4b')][_0xf700('0x2e')]);_0xc3189a['offset']=qs['offset'](_0x1143b1[_0xf700('0x4b')][_0xf700('0x52')]);}_0xc3189a['order']=qs[_0xf700('0x53')](_0x1143b1[_0xf700('0x4b')]['sort']);_0xc3189a[_0xf700('0x55')]=qs['filters'](_['pick'](_0x1143b1[_0xf700('0x4b')],_0xebb6a8[_0xf700('0x4a')]));if(_0x1143b1[_0xf700('0x4b')]['filter']){_0xc3189a['where']=_['merge'](_0xc3189a[_0xf700('0x55')],{'$or':_['map'](_0xc3189a[_0xf700('0x4c')],function(_0x21abc0){var _0x14aab1={};_0x14aab1[_0x21abc0]={'$like':'%'+_0x1143b1['query'][_0xf700('0x59')]+'%'};return _0x14aab1;})});}_0xc3189a[_0xf700('0x55')]={'$and':[_0xc3189a['where'],{'$or':[{'UserId':_0x1143b1['params']['id']},{'OwnerId':_0x1143b1[_0xf700('0x60')]['id']}]}]};_0xc3189a=_['merge']({},_0xc3189a,_0x1143b1['options']);var _0x341b98={'where':_0xc3189a[_0xf700('0x55')]};return db['CmHopper'][_0xf700('0x5b')](_0x341b98)[_0xf700('0x20')](function(_0x3239f7){_0x14810d[_0xf700('0x5b')]=_0x3239f7;if(_0x1143b1['query'][_0xf700('0x5c')]){_0xc3189a['include']=[{'attributes':['id','firstName',_0xf700('0x13a'),_0xf700('0xd2')],'model':db[_0xf700('0xb9')],'as':'Contact'},{'attributes':['id',_0xf700('0x3f'),_0xf700('0x13b')],'model':db[_0xf700('0x13c')],'as':_0xf700('0xc0')}];}return db['CmHopper']['findAll'](_0xc3189a);})[_0xf700('0x20')](function(_0x274f18){_0x14810d[_0xf700('0x5e')]=_0x274f18;return _0x14810d;})['then'](respondWithFilteredResult(_0x5e92fd,_0xc3189a))['catch'](handleError(_0x5e92fd,null));};exports[_0xf700('0x13d')]=function(_0x1f74c5,_0x5e281b,_0x5d5b75){if(!_[_0xf700('0x6d')](_0x1f74c5[_0xf700('0x36')]['id'])&&(_0x1f74c5[_0xf700('0x36')][_0xf700('0x3d')]=='admin'||_0x1f74c5[_0xf700('0x36')][_0xf700('0x3d')]=='user')){return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x1f74c5[_0xf700('0x60')]['id']}})[_0xf700('0x20')](function(_0xb0a8ce){var _0x352fc3=authService['retrieveApiKey'](_0xb0a8ce);if(_0x352fc3)return _0x5e281b[_0xf700('0x2b')](0xc8)[_0xf700('0x2d')]({'api_key':_0x352fc3});else return _0x5e281b[_0xf700('0x2b')](0xcc)[_0xf700('0x2d')]({'message':_0xf700('0x13e')});})['catch'](handleError(_0x5e281b,0x193));}else{return _0x5e281b[_0xf700('0x2b')](0x191)[_0xf700('0x2d')]({'message':'You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.'});}};exports['createApiKey']=function(_0x5aff98,_0x42b076,_0xe9f54f){var _0x12b938;if(!_[_0xf700('0x6d')](_0x5aff98['user']['id'])&&(_0x5aff98[_0xf700('0x36')][_0xf700('0x3d')]==_0xf700('0xc2')||_0x5aff98[_0xf700('0x36')][_0xf700('0x3d')]=='user')){return db[_0xf700('0x45')][_0xf700('0x3e')]({'where':{'id':_0x5aff98['params']['id']}})[_0xf700('0x20')](function(_0xc481ea){return[_0xc481ea,authService[_0xf700('0x13f')](_0xc481ea)];})['then'](function(_0x16db9b){_0x12b938=_0x16db9b;return db['User'][_0xf700('0x63')]({'apiKeyNonce':_0x12b938[0x0][_0xf700('0x140')],'apiKeyIat':_0x12b938[0x0][_0xf700('0x141')]},{'where':{'id':_0x5aff98['params']['id']}});})[_0xf700('0x20')](function(){return _0x42b076[_0xf700('0x2b')](0xc8)[_0xf700('0x2d')]({'api_key':_0x12b938[0x1]});})[_0xf700('0x29')](handleError(_0x42b076,0x193));}else{return _0x42b076['status'](0x191)[_0xf700('0x2d')]({'message':'You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.'});}};exports[_0xf700('0x142')]=function(_0x546d1f,_0x27976b,_0x3e09db){if(!_[_0xf700('0x6d')](_0x546d1f[_0xf700('0x36')]['id'])&&(_0x546d1f[_0xf700('0x36')][_0xf700('0x3d')]==_0xf700('0xc2')||_0x546d1f[_0xf700('0x36')]['role']==_0xf700('0x36'))){return db[_0xf700('0x45')]['find']({'where':{'id':_0x546d1f[_0xf700('0x60')]['id']}})[_0xf700('0x20')](handleEntityNotFound(_0x27976b,null))[_0xf700('0x20')](function(_0x4569e8){if(_0x4569e8&&_0x4569e8['apiKeyNonce']&&_0x4569e8[_0xf700('0x141')])return _0x4569e8;else throw{'message':_0xf700('0x143')};})[_0xf700('0x20')](function(_0xbc8eab){return db[_0xf700('0x45')]['update']({'apiKeyNonce':null,'apiKeyIat':null},{'where':{'id':_0x546d1f[_0xf700('0x60')]['id']}});})[_0xf700('0x20')](respondWithStatusCode(_0x27976b,0xc8))[_0xf700('0x29')](handleError(_0x27976b,0x193));}else{return _0x27976b[_0xf700('0x2b')](0x191)[_0xf700('0x2d')]({'message':'You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.'});}};
\ No newline at end of file
+var _0x289a=['108','109','100','111','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','changePassword','newPassword','Sequelize','Invalid\x20body\x20format.\x20Use\x20oldPassord\x20and\x20newPassword','authenticate','oldPassword','Wrong\x20credentials','ValidationError','New\x20password\x20must\x20be\x20different\x20from\x20old\x20password','Invalid\x20body\x20format.\x20Use\x20newPassword','addQueues','voicePause','isValidChannel','channel','Unknown\x20channel','add','capitalize','toLowerCase','penalty','spread','QueueId','emit','Queue:save','voice','VoiceQueue','push','interface','SIP/%s','each','UserVoiceQueueRt','removeQueues','Queues','Queue:remove','userpic','file','filename','getAvatar','join','root','server/files/images/logos/default_profile.png','download','existsSync','server/files/images/','getContacts','findOne','CmContact','rawAttributes','CmList','List','Tag','Tags','color','tag','getQueues','Queue','Unknown\x20role','getVoiceQueuesRt','ChatGroup','getGroups','getRecordings','VoiceRecording','getChatInteractions','ChatInteraction','getOpenchannelInteractions','OpenchannelInteraction','getMailInteractions','MailInteraction','getSmsInteractions','SmsInteraction','FaxInteraction','getFaxInteractions','login','phone','mobile','loginInPause','intrf','user:%s','user:forcelogout','headers','connection','remoteAddress','socket','getVoiceQueues','UserVoiceQueue.penalty','upsert','MemberReport','forEach','YYYY-MM-DD\x20HH:mm:ss','all','getChannels','device','concat','LOGININPAUSE','logout','pause','QueuePause','PAUSE','updateAttributes','type','DEFAULT\x20PAUSE','mailPause','chatPause','openchannelPause','smsPause','pauseType','lastPauseAt','unpause','manual','mail','fax','sms','openchannel','%s%s','getTeams','addTeams','removeTeams','getLists','You\x20can\x27t\x20delete\x20yourself','addChatInteractions','user_has_chat_interactions:save','removeChatInteractions','isArray','user_has_chat_interactions:remove','addMailInteractions','user_has_mail_interactions:save','removeMailInteractions','user_has_mail_interactions:remove','addFaxInteractions','user_has_fax_interactions:save','removeFaxInteractions','user_has_fax_interactions:remove','addSmsInteractions','removeSmsInteractions','user_has_sms_interactions:remove','addOpenchannelInteractions','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','getVoicePrefixes','VoicePrefix','getFaxAccounts','FaxAccount','addFaxAccounts','removeFaxAccounts','getMailAccounts','MailAccount','addMailAccounts','removeMailAccounts','getOpenchannelAccounts','removeOpenchannelAccounts','getSmsAccounts','SmsAccount','addSmsAccounts','removeSmsAccounts','getChatWebsites','ChatWebsite','removeChatWebsites','getSquareProjects','SquareProject','addSquareProjects','removeSquareProjects','getScheduledCalls','CmHopper','$and','$or','$gt','$lt','$not','$between','$notBetween','$in','$like','$notLike','$iLike','$notILike','$overlap','$contains','$contained','$any','firstName','lastName','Contact','retrieveApiKey','No\x20API\x20access\x20key\x20found!','createApiKey','generateApiKey','apiKeyIat','You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.','removeApiKey','apiKeyNonce','API\x20key\x20not\x20available','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./user.socket','jayson/promise','client','http','request','info','User,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','catch','sendStatus','status','end','count','offset','limit','set','json','apply','reject','save','update','then','destroy','get','Users','Agents','agent','Telephones','telephone','filter','map','value','includes','find','role','name','stack','send','index','differenceBy','keys','password','salt','filters','intersection','model','attributes','fields','query','length','hasOwnProperty','nolimit','order','sort','where','pick','merge','sequelize','col','field','options','includeAll','include','User','findAll','rows','show','params','bulkCreate','body','describe','ids','omit','agent\x20role','admin','user','getLicense','telephones','users','isNil','License\x20limit\x20reached','format','count\x20%s:\x20%s','create','Setting','findById','min_internal','max','internal','select\x20(select\x20IFNULL(max(internal)+1,1)\x20from\x20users\x20where\x20internal\x20<\x20md.internal)\x20as\x20\x27from\x27,\x20md.internal\x20-\x201\x20as\x20\x27to\x27\x20from\x20users\x20md\x20where\x20md.internal\x20!=\x201\x20and\x20not\x20exists\x20(select\x201\x20from\x20users\x20md2\x20where\x20md2.internal\x20=\x20md.internal\x20-\x201)','QueryTypes','SELECT','from','voicemail','mailbox','VoiceMail','fullname','email','101','102','103','110','104','105','106','107'];(function(_0x515698,_0x36384f){var _0x2f67ac=function(_0x25c08e){while(--_0x25c08e){_0x515698['push'](_0x515698['shift']());}};_0x2f67ac(++_0x36384f);}(_0x289a,0xc7));var _0xa289=function(_0x2bf8f2,_0x27c758){_0x2bf8f2=_0x2bf8f2-0x0;var _0x1ba2fa=_0x289a[_0x2bf8f2];return _0x1ba2fa;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xa289('0x0'));var rimraf=require(_0xa289('0x1'));var zipdir=require(_0xa289('0x2'));var jsonpatch=require(_0xa289('0x3'));var rp=require(_0xa289('0x4'));var moment=require('moment');var BPromise=require(_0xa289('0x5'));var Mustache=require(_0xa289('0x6'));var util=require(_0xa289('0x7'));var path=require(_0xa289('0x8'));var sox=require(_0xa289('0x9'));var csv=require('to-csv');var ejs=require(_0xa289('0xa'));var fs=require('fs');var _=require(_0xa289('0xb'));var squel=require(_0xa289('0xc'));var crypto=require(_0xa289('0xd'));var jsforce=require(_0xa289('0xe'));var deskjs=require(_0xa289('0xf'));var toCsv=require(_0xa289('0x10'));var querystring=require('querystring');var Papa=require(_0xa289('0x11'));var authService=require(_0xa289('0x12'));var hardwareService=require(_0xa289('0x13'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require(_0xa289('0x14'))(_0xa289('0x15'));var utils=require('../../config/utils');var config=require(_0xa289('0x16'));var db=require(_0xa289('0x17'))['db'];config[_0xa289('0x18')]=_[_0xa289('0x19')](config[_0xa289('0x18')],{'host':_0xa289('0x1a'),'port':0x18eb});var socket=require(_0xa289('0x1b'))(new Redis(config['redis']));require(_0xa289('0x1c'))['register'](socket);var jayson=require(_0xa289('0x1d'));var client=jayson[_0xa289('0x1e')][_0xa289('0x1f')]({'port':0x232a});function respondWithRpcPromise(_0x5de21f,_0x43c0c7,_0x2b8b78,_0x4ac843){return new BPromise(function(_0x5cd53b,_0xa7bff8){var _0x268111=_0x4ac843||client;return _0x268111[_0xa289('0x20')](_0x5de21f,_0x2b8b78)['then'](function(_0x3d6dce){logger[_0xa289('0x21')](_0xa289('0x22'),_0x43c0c7,'request\x20sent');logger[_0xa289('0x23')]('User,\x20%s,\x20%s,\x20%s',_0x43c0c7,_0xa289('0x24'),JSON[_0xa289('0x25')](_0x3d6dce));if(_0x3d6dce['error']){if(_0x3d6dce[_0xa289('0x26')][_0xa289('0x27')]===0x1f4){logger[_0xa289('0x26')]('User,\x20%s,\x20%s',_0x43c0c7,_0x3d6dce[_0xa289('0x26')]['message']);return _0xa7bff8(_0x3d6dce['error']['message']);}logger[_0xa289('0x26')](_0xa289('0x22'),_0x43c0c7,_0x3d6dce[_0xa289('0x26')][_0xa289('0x28')]);return _0x5cd53b(_0x3d6dce['error']['message']);}else{logger[_0xa289('0x21')](_0xa289('0x22'),_0x43c0c7,_0xa289('0x24'));_0x5cd53b(_0x3d6dce[_0xa289('0x29')][_0xa289('0x28')]);}})[_0xa289('0x2a')](function(_0x594f4e){logger[_0xa289('0x26')](_0xa289('0x22'),_0x43c0c7,_0x594f4e);_0xa7bff8(_0x594f4e);});});}function respondWithStatusCode(_0x2a5b83,_0x3745be){_0x3745be=_0x3745be||0xcc;return function(_0x3b4bb7){if(_0x3b4bb7){return _0x2a5b83[_0xa289('0x2b')](_0x3745be);}return _0x2a5b83[_0xa289('0x2c')](_0x3745be)[_0xa289('0x2d')]();};}function respondWithResult(_0x26bfba,_0x130c7e){_0x130c7e=_0x130c7e||0xc8;return function(_0xd913b){if(_0xd913b){return _0x26bfba[_0xa289('0x2c')](_0x130c7e)['json'](_0xd913b);}};}function respondWithFilteredResult(_0x2f772b,_0x571b4d){return function(_0x1a0d83){if(_0x1a0d83){var _0xe8d9c4=_0x1a0d83[_0xa289('0x2e')],_0xd47627=_0x571b4d[_0xa289('0x2f')],_0x138588=_0x571b4d[_0xa289('0x2f')]+_0x571b4d[_0xa289('0x30')],_0x216a2d;if(_0x138588>=_0xe8d9c4){_0x138588=_0xe8d9c4;_0x216a2d=0xc8;}else{_0x216a2d=0xce;}_0x2f772b[_0xa289('0x2c')](_0x216a2d);return _0x2f772b[_0xa289('0x31')]('Content-Range',_0xd47627+'-'+_0x138588+'/'+_0xe8d9c4)[_0xa289('0x32')](_0x1a0d83);}return null;};}function patchUpdates(_0x297461){return function(_0x13386a){try{jsonpatch[_0xa289('0x33')](_0x13386a,_0x297461,!![]);}catch(_0x19d83f){return BPromise[_0xa289('0x34')](_0x19d83f);}return _0x13386a[_0xa289('0x35')]();};}function saveUpdates(_0x5b3b43,_0xc94ed8){return function(_0x402de9){if(_0x402de9){return _0x402de9[_0xa289('0x36')](_0x5b3b43)[_0xa289('0x37')](function(_0x36532f){return _0x36532f;});}return null;};}function removeEntity(_0x481f55,_0x1c97dd){return function(_0x3a2d53){if(_0x3a2d53){return _0x3a2d53[_0xa289('0x38')]()[_0xa289('0x37')](function(){var _0x363de0=_0x3a2d53[_0xa289('0x39')]({'plain':!![]});var _0x4a506a=[{'name':_0xa289('0x3a'),'value':'user','ignore':!![]},{'name':_0xa289('0x3b'),'value':_0xa289('0x3c'),'ignore':![]},{'name':_0xa289('0x3d'),'value':_0xa289('0x3e'),'ignore':![]}];var _0x3cf07c=_(_0x4a506a)[_0xa289('0x3f')]('ignore')[_0xa289('0x40')](_0xa289('0x41'))[_0xa289('0x41')]();if(_[_0xa289('0x42')](_0x3cf07c,_0x363de0['role'])){return;}var _0x5429bb=_[_0xa289('0x43')](_0x4a506a,[_0xa289('0x41'),_0x363de0[_0xa289('0x44')]])[_0xa289('0x45')];return db['UserProfileResource']['destroy']({'where':{'type':_0x5429bb,'resourceId':_0x363de0['id']}})[_0xa289('0x37')](function(){return _0x3a2d53;});})[_0xa289('0x37')](function(){_0x481f55[_0xa289('0x2c')](0xcc)[_0xa289('0x2d')]();});}};}function handleEntityNotFound(_0x29f49d,_0x728cbb){return function(_0x308960){if(!_0x308960){_0x29f49d[_0xa289('0x2b')](0x194);}return _0x308960;};}function handleError(_0x36b8c1,_0x47835f){_0x47835f=_0x47835f||0x1f4;return function(_0x1fdc54){logger[_0xa289('0x26')](_0x1fdc54[_0xa289('0x46')]);if(_0x1fdc54[_0xa289('0x45')]){delete _0x1fdc54[_0xa289('0x45')];}_0x36b8c1[_0xa289('0x2c')](_0x47835f)[_0xa289('0x47')](_0x1fdc54);};}exports[_0xa289('0x48')]=function(_0x485d19,_0x11bceb){var _0x14a8b8={},_0x50b9b7={},_0x30624e={'count':0x0,'rows':[]};var _0xce949b=db['User']['rawAttributes'];_0x50b9b7['model']=_[_0xa289('0x49')](_[_0xa289('0x4a')](_0xce949b),[_0xa289('0x4b'),_0xa289('0x4c')]);_0x50b9b7['query']=_[_0xa289('0x4a')](_0x485d19['query']);_0x50b9b7[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x50b9b7[_0xa289('0x4f')],_0x50b9b7['query']);_0x14a8b8[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x50b9b7[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x485d19[_0xa289('0x52')]['fields']));_0x14a8b8[_0xa289('0x50')]=_0x14a8b8[_0xa289('0x50')][_0xa289('0x53')]?_0x14a8b8[_0xa289('0x50')]:_0x50b9b7[_0xa289('0x4f')];if(!_0x485d19[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x14a8b8['limit']=qs[_0xa289('0x30')](_0x485d19[_0xa289('0x52')][_0xa289('0x30')]);_0x14a8b8[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x485d19[_0xa289('0x52')][_0xa289('0x2f')]);}_0x14a8b8[_0xa289('0x56')]=qs['sort'](_0x485d19[_0xa289('0x52')][_0xa289('0x57')]);_0x14a8b8[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x485d19['query'],_0x50b9b7[_0xa289('0x4d')]));if(_0x485d19[_0xa289('0x52')][_0xa289('0x3f')]){_0x14a8b8[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x14a8b8[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0xce949b,function(_0x517326){return db[_0xa289('0x5b')]['where'](db[_0xa289('0x5b')]['fn']('lower',db['sequelize'][_0xa289('0x5c')](_0x517326[_0xa289('0x5d')])),{'$like':db[_0xa289('0x5b')]['fn']('lower','%'+_0x485d19[_0xa289('0x52')][_0xa289('0x3f')]+'%')});})});}_0x14a8b8=_['merge']({},_0x14a8b8,_0x485d19[_0xa289('0x5e')]);var _0x21412c={'where':_0x14a8b8[_0xa289('0x58')]};return db['User'][_0xa289('0x2e')](_0x21412c)[_0xa289('0x37')](function(_0x29dd87){_0x30624e[_0xa289('0x2e')]=_0x29dd87;if(_0x485d19[_0xa289('0x52')][_0xa289('0x5f')]){_0x14a8b8[_0xa289('0x60')]=[{'all':!![]}];}return db[_0xa289('0x61')][_0xa289('0x62')](_0x14a8b8);})[_0xa289('0x37')](function(_0x3009f1){_0x30624e[_0xa289('0x63')]=_0x3009f1;return _0x30624e;})['then'](respondWithFilteredResult(_0x11bceb,_0x14a8b8))[_0xa289('0x2a')](handleError(_0x11bceb,null));};exports[_0xa289('0x64')]=function(_0x1aaa13,_0x49d221){var _0x4320c9={'raw':![],'where':{'id':_0x1aaa13[_0xa289('0x65')]['id']}},_0xd36893={};_0xd36893['model']=_['differenceBy'](_[_0xa289('0x4a')](db['User']['rawAttributes']),[_0xa289('0x4b'),_0xa289('0x4c')]);_0xd36893[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x1aaa13[_0xa289('0x52')]);_0xd36893[_0xa289('0x4d')]=_['intersection'](_0xd36893['model'],_0xd36893['query']);_0x4320c9['attributes']=_[_0xa289('0x4e')](_0xd36893[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x1aaa13[_0xa289('0x52')][_0xa289('0x51')]));_0x4320c9[_0xa289('0x50')]=_0x4320c9['attributes']['length']?_0x4320c9[_0xa289('0x50')]:_0xd36893[_0xa289('0x4f')];if(_0x1aaa13['query']['includeAll']){_0x4320c9[_0xa289('0x60')]=[{'all':!![]}];}_0x4320c9=_[_0xa289('0x5a')]({},_0x4320c9,_0x1aaa13[_0xa289('0x5e')]);return db[_0xa289('0x61')]['find'](_0x4320c9)[_0xa289('0x37')](handleEntityNotFound(_0x49d221,null))[_0xa289('0x37')](respondWithResult(_0x49d221,null))['catch'](handleError(_0x49d221,null));};exports[_0xa289('0x66')]=function(_0x7caf14,_0x3bb1fa){return db[_0xa289('0x61')][_0xa289('0x66')](_0x7caf14[_0xa289('0x67')],{'raw':![],'individualHooks':!![]})['then'](respondWithResult(_0x3bb1fa,0xc9))[_0xa289('0x2a')](handleError(_0x3bb1fa,null));};exports[_0xa289('0x36')]=function(_0x16f37a,_0x46be15){if(_0x16f37a[_0xa289('0x67')]['id']){delete _0x16f37a[_0xa289('0x67')]['id'];}delete _0x16f37a[_0xa289('0x67')]['role'];return db[_0xa289('0x61')]['find']({'where':{'id':_0x16f37a[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x46be15,null))['then'](saveUpdates(_0x16f37a[_0xa289('0x67')],null))['then'](respondWithResult(_0x46be15,null))[_0xa289('0x2a')](handleError(_0x46be15,null));};exports[_0xa289('0x68')]=function(_0x503a9a,_0x5e9d56){return db[_0xa289('0x61')][_0xa289('0x68')]()[_0xa289('0x37')](respondWithResult(_0x5e9d56,null))[_0xa289('0x2a')](handleError(_0x5e9d56,null));};exports['addContacts']=function(_0x4babe8,_0x34afb1,_0x285113){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x4babe8['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x34afb1,null))[_0xa289('0x37')](function(_0x7507a3){if(_0x7507a3){return _0x7507a3['addContacts'](_0x4babe8[_0xa289('0x67')][_0xa289('0x69')],_[_0xa289('0x6a')](_0x4babe8['body'],['ids','id'])||{});}})[_0xa289('0x37')](respondWithResult(_0x34afb1,null))[_0xa289('0x2a')](handleError(_0x34afb1,null));};var getLicense=function(_0x325ad2){return new BPromise(function(_0x5a35eb,_0x2ac816){var _0x45adf8=0x0;_0x325ad2[_0xa289('0x67')]['role']===_0xa289('0x3c')&&_0x5a35eb(_0xa289('0x6b'));return db['User'][_0xa289('0x2e')]({'where':{'$or':[{'role':_0x325ad2['body'][_0xa289('0x44')]===_0xa289('0x3e')?_0xa289('0x3e'):[_0xa289('0x6c'),_0xa289('0x6d')]}]}})[_0xa289('0x37')](function(_0x2b0b1c){_0x45adf8=_0x2b0b1c;return require('../../config/license/util')[_0xa289('0x6e')]();})['then'](function(_0x8a00e0){var _0x327572=_0x325ad2['body'][_0xa289('0x44')]===_0xa289('0x3e')?_0xa289('0x6f'):_0xa289('0x70');if(!_[_0xa289('0x71')](_0x8a00e0[_0x327572])&&_0x45adf8>=_0x8a00e0[_0x327572]){return _0x2ac816({'message':_0xa289('0x72')});}return _0x5a35eb(util[_0xa289('0x73')](_0xa289('0x74'),_0x327572,_0x45adf8));})[_0xa289('0x2a')](function(_0x4d064c){return _0x2ac816(_0x4d064c);});});};exports[_0xa289('0x75')]=function(_0x1e3fa0,_0x391638){return getLicense(_0x1e3fa0)['then'](function(_0x336377){if(!_0x1e3fa0[_0xa289('0x67')]['internal']){var _0x5444b7;return db[_0xa289('0x76')][_0xa289('0x77')](0x1)[_0xa289('0x37')](function(_0x573288){_0x5444b7=_0x573288[_0xa289('0x78')];return db[_0xa289('0x61')][_0xa289('0x79')](_0xa289('0x7a'));})[_0xa289('0x37')](function(_0x1f74d6){if(_[_0xa289('0x71')](_0x1f74d6)){if(_0x5444b7){_0x1e3fa0[_0xa289('0x67')][_0xa289('0x7a')]=_0x5444b7;}else{_0x1e3fa0[_0xa289('0x67')][_0xa289('0x7a')]=0x1;}}else{if(_[_0xa289('0x71')](_0x5444b7)||_0x5444b7==_0x1f74d6){_0x1e3fa0[_0xa289('0x67')][_0xa289('0x7a')]=_0x1f74d6+0x1;}else if(_0x5444b7>_0x1f74d6){_0x1e3fa0[_0xa289('0x67')][_0xa289('0x7a')]=_0x5444b7;}else{return db['sequelize']['query'](_0xa289('0x7b'),{'type':db[_0xa289('0x5b')][_0xa289('0x7c')][_0xa289('0x7d')]})[_0xa289('0x37')](function(_0x33aa2b){if(_0x33aa2b&&_0x33aa2b['length']){for(var _0x33c019=0x0,_0x561cd0=_0x33aa2b[_0xa289('0x53')];_0x33c019<_0x561cd0&&_['isNil'](_0x1e3fa0['body'][_0xa289('0x7a')]);_0x33c019++){if(_0x5444b7<=_0x33aa2b[_0x33c019][_0xa289('0x7e')]){_0x1e3fa0[_0xa289('0x67')][_0xa289('0x7a')]=_0x33aa2b[_0x33c019][_0xa289('0x7e')];}else if(_0x5444b7>_0x33aa2b[_0x33c019]['from']&&_0x5444b7<=_0x33aa2b[_0x33c019]['to']){_0x1e3fa0[_0xa289('0x67')]['internal']=_0x5444b7;}}}if(_[_0xa289('0x71')](_0x1e3fa0[_0xa289('0x67')][_0xa289('0x7a')])){_0x1e3fa0['body'][_0xa289('0x7a')]=_0x1f74d6+0x1;}});}}});}})[_0xa289('0x37')](function(){if(_0x1e3fa0[_0xa289('0x67')][_0xa289('0x7f')]){_0x1e3fa0[_0xa289('0x67')][_0xa289('0x80')]=_0x1e3fa0['body']['internal'];_0x1e3fa0[_0xa289('0x67')][_0xa289('0x81')]={'mailbox':_0x1e3fa0[_0xa289('0x67')][_0xa289('0x7a')],'password':_0x1e3fa0[_0xa289('0x67')]['password'],'fullname':_0x1e3fa0['body'][_0xa289('0x82')],'email':_0x1e3fa0[_0xa289('0x67')][_0xa289('0x83')]};}if(_0x1e3fa0[_0xa289('0x67')]&&_0x1e3fa0['body'][_0xa289('0x44')]===_0xa289('0x3c')){_0x1e3fa0[_0xa289('0x67')]['permissions']=[_0xa289('0x84'),_0xa289('0x85'),_0xa289('0x86'),_0xa289('0x87'),_0xa289('0x88'),_0xa289('0x89'),_0xa289('0x8a'),_0xa289('0x8b'),_0xa289('0x8c'),_0xa289('0x8d'),_0xa289('0x8e'),_0xa289('0x8f')];}return db['User']['create'](_0x1e3fa0['body'],{'include':[{'model':db[_0xa289('0x81')],'as':_0xa289('0x81')}]});})[_0xa289('0x37')](function(_0x1294e8){if(_0x1e3fa0['body'][_0xa289('0x44')]==='user')return _0x1294e8;var _0x119cbb=_0x1e3fa0[_0xa289('0x6d')][_0xa289('0x39')]({'plain':!![]});if(!_0x119cbb)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x119cbb[_0xa289('0x44')]===_0xa289('0x6d')){var _0xa7592f=_0x1294e8['get']({'plain':!![]});var _0x1eb7e8=[{'name':_0xa289('0x3b'),'value':_0xa289('0x3c')},{'name':_0xa289('0x3d'),'value':_0xa289('0x3e')}];var _0x13f58d=_[_0xa289('0x43')](_0x1eb7e8,[_0xa289('0x41'),_0xa7592f[_0xa289('0x44')]])[_0xa289('0x45')];return db[_0xa289('0x90')][_0xa289('0x43')]({'where':{'name':_0x13f58d,'userProfileId':_0x119cbb[_0xa289('0x91')]},'raw':!![]})[_0xa289('0x37')](function(_0x51609b){if(_0x51609b&&_0x51609b[_0xa289('0x92')]===0x0){return db[_0xa289('0x93')][_0xa289('0x75')]({'name':_0xa7592f[_0xa289('0x45')],'resourceId':_0xa7592f['id'],'type':_0x51609b['name'],'sectionId':_0x51609b['id']},{})[_0xa289('0x37')](function(){return _0x1294e8;});}else{return _0x1294e8;}})['catch'](function(_0x1f7c68){logger[_0xa289('0x26')](_0xa289('0x94'),_0x1f7c68);throw _0x1f7c68;});}return _0x1294e8;})[_0xa289('0x37')](respondWithResult(_0x391638,0xc9))[_0xa289('0x2a')](handleError(_0x391638,null));};exports[_0xa289('0x95')]=function(_0x28435d,_0x13f4fc,_0x2bf65c){if(_0x28435d[_0xa289('0x67')]['id']){delete _0x28435d[_0xa289('0x67')]['id'];}return db['User'][_0xa289('0x43')]({'where':{'id':_0x28435d[_0xa289('0x65')]['id']}})[_0xa289('0x37')](function(_0x4fcea3){if(_0x4fcea3){if(_0x4fcea3['id']==_0x28435d[_0xa289('0x6d')]['id']){if(!_0x28435d['body']['oldPassword']||!_0x28435d[_0xa289('0x67')][_0xa289('0x96')]){throw new db[(_0xa289('0x97'))]['ValidationError'](_0xa289('0x98'));}if(!_0x4fcea3[_0xa289('0x99')](_0x28435d[_0xa289('0x67')][_0xa289('0x9a')])){throw new db[(_0xa289('0x97'))]['ValidationError'](_0xa289('0x9b'));}if(_0x28435d[_0xa289('0x67')][_0xa289('0x9a')]==_0x28435d['body'][_0xa289('0x96')]){throw new db[(_0xa289('0x97'))][(_0xa289('0x9c'))](_0xa289('0x9d'));}return _0x4fcea3;}else if(_0x28435d[_0xa289('0x6d')][_0xa289('0x44')]==_0xa289('0x6c')){if(!_0x28435d[_0xa289('0x67')]['newPassword']){throw new db[(_0xa289('0x97'))][(_0xa289('0x9c'))](_0xa289('0x9e'));}return _0x4fcea3;}else if(_0x28435d[_0xa289('0x6d')][_0xa289('0x44')]==_0xa289('0x6d')){if(!_0x28435d['body'][_0xa289('0x96')]){throw new db['Sequelize'][(_0xa289('0x9c'))]('Invalid\x20body\x20format.\x20Use\x20newPassword');}if(_0x4fcea3[_0xa289('0x44')]!=_0xa289('0x3c')){throw new db[(_0xa289('0x97'))][(_0xa289('0x9c'))]('Unauthorized');}return _0x4fcea3;}else{throw new db[(_0xa289('0x97'))][(_0xa289('0x9c'))]('Unauthorized');}}return null;})[_0xa289('0x37')](handleEntityNotFound(_0x13f4fc,null))['then'](saveUpdates({'password':_0x28435d[_0xa289('0x67')][_0xa289('0x96')],'passwordResetAt':_0x28435d[_0xa289('0x6d')]['id']==_0x28435d[_0xa289('0x65')]['id']?moment():null},null))[_0xa289('0x37')](respondWithResult(_0x13f4fc,null))[_0xa289('0x2a')](handleError(_0x13f4fc,null));};exports[_0xa289('0x9f')]=function(_0x4fb34f,_0x5f0de1,_0x22dd20){var _0x2e8cfd;return db['User']['find']({'where':{'id':_0x4fb34f[_0xa289('0x65')]['id']},'attributes':['id','name',_0xa289('0x44'),'loginInPause',_0xa289('0xa0'),'interface']})[_0xa289('0x37')](handleEntityNotFound(_0x5f0de1,null))[_0xa289('0x37')](function(_0x163224){if(_0x163224){_0x2e8cfd=_0x163224;if(!utils[_0xa289('0xa1')](_0x4fb34f[_0xa289('0x67')][_0xa289('0xa2')])){throw new db[(_0xa289('0x97'))][(_0xa289('0x9c'))](_0xa289('0xa3'));}return _0x163224[_0xa289('0xa4')+_[_0xa289('0xa5')](_0x4fb34f[_0xa289('0x67')][_0xa289('0xa2')][_0xa289('0xa6')]())+'Queues'](_0x4fb34f['body']['ids'],{'penalty':_0x4fb34f['body'][_0xa289('0xa7')]||0x0});}})[_0xa289('0xa8')](function(_0x428ef7){for(var _0x255563=0x0;_0x255563<_0x4fb34f[_0xa289('0x67')]['ids'][_0xa289('0x53')];_0x255563+=0x1){var _0x46cd80={'UserId':_0x4fb34f[_0xa289('0x65')]['id']};_0x46cd80[_[_0xa289('0xa5')](_0x4fb34f[_0xa289('0x67')]['channel'][_0xa289('0xa6')]())+_0xa289('0xa9')]=_0x4fb34f[_0xa289('0x67')][_0xa289('0x69')][_0x255563];socket[_0xa289('0xaa')](_0xa289('0x6d')+_[_0xa289('0xa5')](_0x4fb34f['body'][_0xa289('0xa2')][_0xa289('0xa6')]())+_0xa289('0xab'),_0x46cd80);}return _0x428ef7;})[_0xa289('0x37')](function(){if(_0x4fb34f[_0xa289('0x67')][_0xa289('0xa2')]===_0xa289('0xac')){return db[_0xa289('0xad')]['findAll']({'where':{'id':_0x4fb34f['body'][_0xa289('0x69')]||[]},'raw':!![],'attributes':['id',_0xa289('0x45')]});}})[_0xa289('0x37')](function(_0x19e2c6){var _0x42b7e3=[];if(_0x4fb34f[_0xa289('0x67')][_0xa289('0xa2')]===_0xa289('0xac')&&_0x2e8cfd[_0xa289('0x44')]===_0xa289('0x3c')){for(var _0x25ff7d=0x0;_0x25ff7d<_0x19e2c6[_0xa289('0x53')];_0x25ff7d+=0x1){_0x42b7e3[_0xa289('0xae')]({'membername':_0x2e8cfd[_0xa289('0x45')],'UserId':_0x2e8cfd['id'],'queue_name':_0x19e2c6[_0x25ff7d]['name'],'VoiceQueueId':_0x19e2c6[_0x25ff7d]['id'],'interface':_[_0xa289('0x71')](_0x2e8cfd[_0xa289('0xaf')])?util[_0xa289('0x73')](_0xa289('0xb0'),_0x2e8cfd[_0xa289('0x45')]):_0x2e8cfd[_0xa289('0xaf')],'paused':_0x2e8cfd['voicePause']||![],'penalty':_0x4fb34f[_0xa289('0x67')]['penalty']||0x0});}return BPromise[_0xa289('0xb1')](_0x42b7e3,function(_0x4a2de7){return db[_0xa289('0xb2')]['upsert'](_0x4a2de7);});}return _0x2e8cfd;})[_0xa289('0x37')](respondWithStatusCode(_0x5f0de1,null))['catch'](handleError(_0x5f0de1,null));};exports[_0xa289('0xb3')]=function(_0x47e715,_0x43f589,_0x2d72dc){var _0x2d350e;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x47e715[_0xa289('0x65')]['id']},'attributes':['id',_0xa289('0x45'),_0xa289('0x44')]})[_0xa289('0x37')](handleEntityNotFound(_0x43f589,null))['then'](function(_0xb88a26){if(_0xb88a26){_0x2d350e=_0xb88a26;if(!_0x47e715[_0xa289('0x52')][_0xa289('0xa2')]||!utils['isValidChannel'](_0x47e715['query'][_0xa289('0xa2')])){throw new db[(_0xa289('0x97'))][(_0xa289('0x9c'))]('Unknown\x20channel');}return _0xb88a26['remove'+_[_0xa289('0xa5')](_0x47e715[_0xa289('0x52')]['channel'][_0xa289('0xa6')]())+_0xa289('0xb4')](_0x47e715[_0xa289('0x52')][_0xa289('0x69')]);}})['then'](function(_0x1b2563){for(var _0x455c69=0x0;_0x455c69<_0x47e715[_0xa289('0x52')][_0xa289('0x69')][_0xa289('0x53')];_0x455c69+=0x1){var _0x142e36={'UserId':_0x47e715[_0xa289('0x65')]['id']};_0x142e36[_[_0xa289('0xa5')](_0x47e715[_0xa289('0x52')][_0xa289('0xa2')][_0xa289('0xa6')]())+_0xa289('0xa9')]=_0x47e715[_0xa289('0x52')]['ids'][_0x455c69];socket[_0xa289('0xaa')](_0xa289('0x6d')+_[_0xa289('0xa5')](_0x47e715['query'][_0xa289('0xa2')][_0xa289('0xa6')]())+_0xa289('0xb5'),_0x142e36);}return _0x1b2563;})[_0xa289('0x37')](function(){if(_0x47e715[_0xa289('0x52')][_0xa289('0xa2')]===_0xa289('0xac')){return db[_0xa289('0xb2')]['destroy']({'where':{'UserId':_0x47e715[_0xa289('0x65')]['id'],'VoiceQueueId':_0x47e715['query'][_0xa289('0x69')]},'individualHooks':!![]})[_0xa289('0x37')](function(){return _0x2d350e;});}return _0x2d350e;})[_0xa289('0x37')](respondWithStatusCode(_0x43f589,null))[_0xa289('0x2a')](handleError(_0x43f589,null));};exports['addAvatar']=function(_0x4958ea,_0x7cd07f,_0x4f12a8){_0x4958ea['body'][_0xa289('0xb6')]=_0x4958ea[_0xa289('0xb7')][_0xa289('0xb8')];return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x4958ea['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x7cd07f,null))['then'](saveUpdates(_0x4958ea['body'],null))[_0xa289('0x37')](respondWithResult(_0x7cd07f,null))[_0xa289('0x2a')](handleError(_0x7cd07f,null));};exports[_0xa289('0xb9')]=function(_0x3d4448,_0x331e98,_0x59488c){var _0x4a2f50=path[_0xa289('0xba')](config[_0xa289('0xbb')],_0xa289('0xbc'));return db['User'][_0xa289('0x43')]({'where':{'id':_0x3d4448[_0xa289('0x65')]['id']},'attributes':['id',_0xa289('0xb6')],'raw':!![]})[_0xa289('0x37')](handleEntityNotFound(_0x331e98,null))['then'](function(_0x26fb3f){if(_0x26fb3f){if(_[_0xa289('0x71')](_0x26fb3f['userpic'])){return _0x331e98[_0xa289('0xbd')](_0x4a2f50);}else{if(!fs[_0xa289('0xbe')](path[_0xa289('0xba')](config['root'],'server/files/images/',_0x26fb3f[_0xa289('0xb6')]))){return _0x331e98['download'](_0x4a2f50);}return _0x331e98[_0xa289('0xbd')](path[_0xa289('0xba')](config[_0xa289('0xbb')],_0xa289('0xbf'),_0x26fb3f[_0xa289('0xb6')]));}}})[_0xa289('0x2a')](handleError(_0x331e98,null));};exports[_0xa289('0xc0')]=function(_0x44ce60,_0x1f980c,_0x138672){var _0x274ff6={};var _0x1caed1={};var _0x43f073;var _0x4fb4d3;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x44ce60[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x1f980c,null))['then'](function(_0x3afedc){if(_0x3afedc){_0x43f073=_0x3afedc;_0x1caed1[_0xa289('0x4f')]=_['keys'](db[_0xa289('0xc2')][_0xa289('0xc3')]);_0x1caed1[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x44ce60[_0xa289('0x52')]);_0x1caed1[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x1caed1['model'],_0x1caed1[_0xa289('0x52')]);_0x274ff6[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x1caed1['model'],qs[_0xa289('0x51')](_0x44ce60[_0xa289('0x52')][_0xa289('0x51')]));_0x274ff6[_0xa289('0x50')]=_0x274ff6[_0xa289('0x50')][_0xa289('0x53')]?_0x274ff6[_0xa289('0x50')]:_0x1caed1[_0xa289('0x4f')];_0x274ff6[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x44ce60[_0xa289('0x52')][_0xa289('0x57')]);_0x274ff6[_0xa289('0x58')]=qs['filters'](_[_0xa289('0x59')](_0x44ce60[_0xa289('0x52')],_0x1caed1[_0xa289('0x4d')]));if(_0x44ce60[_0xa289('0x52')][_0xa289('0x3f')]){_0x274ff6[_0xa289('0x58')]=_['merge'](_0x274ff6[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x274ff6[_0xa289('0x50')],function(_0x10db52){var _0x472343={};_0x472343[_0x10db52]={'$like':'%'+_0x44ce60['query']['filter']+'%'};return _0x472343;})});}_0x274ff6=_[_0xa289('0x5a')]({},_0x274ff6,_0x44ce60['options']);return _0x43f073[_0xa289('0xc0')](_0x274ff6);}})[_0xa289('0x37')](function(_0x153099){if(_0x153099){_0x4fb4d3=_0x153099[_0xa289('0x53')];if(_0x44ce60[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x5f'))){_0x274ff6['include']=[{'model':db[_0xa289('0xc4')],'as':_0xa289('0xc5'),'required':![]},{'model':db[_0xa289('0xc6')],'as':_0xa289('0xc7'),'attributes':['id',_0xa289('0x45'),_0xa289('0xc8')],'where':_0x44ce60[_0xa289('0x52')][_0xa289('0xc9')]?{'id':_0x44ce60[_0xa289('0x52')]['tag']}:undefined,'required':_0x44ce60[_0xa289('0x52')][_0xa289('0xc9')]?!![]:![]}];}if(!_0x44ce60[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x274ff6['limit']=qs['limit'](_0x44ce60[_0xa289('0x52')][_0xa289('0x30')]);_0x274ff6['offset']=qs['offset'](_0x44ce60[_0xa289('0x52')]['offset']);}return _0x43f073[_0xa289('0xc0')](_0x274ff6);}})[_0xa289('0x37')](function(_0xce3d2c){if(_0xce3d2c){return _0xce3d2c?{'count':_0x4fb4d3,'rows':_0xce3d2c}:null;}})[_0xa289('0x37')](respondWithResult(_0x1f980c,null))[_0xa289('0x2a')](handleError(_0x1f980c,null));};exports[_0xa289('0xca')]=function(_0x4b6d6,_0x34c6f4,_0x47180e){var _0x2b3bae;var _0x58d9b3;var _0x9fda68={};var _0xc841d5;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x4b6d6[_0xa289('0x65')]['id']},'attributes':['id','name',_0xa289('0x44')]})[_0xa289('0x37')](handleEntityNotFound(_0x34c6f4,null))[_0xa289('0x37')](function(_0x39f1ed){if(!utils['isValidChannel'](_0x4b6d6[_0xa289('0x52')]['channel'])){throw new db[(_0xa289('0x97'))][(_0xa289('0x9c'))]('Unknown\x20channel');}_0x2b3bae=_0x39f1ed;var _0x2a9fa0={};_0x2a9fa0[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_['capitalize'](_0x4b6d6[_0xa289('0x52')]['channel'])+_0xa289('0xcb')]['rawAttributes']);_0x2a9fa0[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x4b6d6['query']);_0x2a9fa0[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x2a9fa0[_0xa289('0x4f')],_0x2a9fa0['query']);_0x9fda68[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x2a9fa0[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x4b6d6[_0xa289('0x52')][_0xa289('0x51')]));_0x9fda68[_0xa289('0x50')]=_0x9fda68[_0xa289('0x50')][_0xa289('0x53')]?_0x9fda68[_0xa289('0x50')]:_0x2a9fa0[_0xa289('0x4f')];_0x9fda68['order']=qs[_0xa289('0x57')](_0x4b6d6[_0xa289('0x52')][_0xa289('0x57')]);_0x9fda68['where']=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x4b6d6[_0xa289('0x52')],_0x2a9fa0[_0xa289('0x4d')]));if(_0x4b6d6['query'][_0xa289('0x3f')]){_0x9fda68[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x9fda68['where'],{'$or':_['map'](_0x9fda68['attributes'],function(_0x2372d0){var _0x375399={};_0x375399[_0x2372d0]={'$like':'%'+_0x4b6d6[_0xa289('0x52')]['filter']+'%'};return _0x375399;})});}_0x9fda68=_['merge']({},_0x9fda68,_0x4b6d6[_0xa289('0x5e')]);switch(_0x2b3bae['role']){case _0xa289('0x6c'):return db[_[_0xa289('0xa5')](_0x4b6d6[_0xa289('0x52')][_0xa289('0xa2')])+_0xa289('0xcb')][_0xa289('0x62')](_0x9fda68);case'user':case'agent':return _0x2b3bae[_0xa289('0x39')+_['capitalize'](_0x4b6d6[_0xa289('0x52')][_0xa289('0xa2')])+_0xa289('0xb4')](_0x9fda68);default:throw new db[(_0xa289('0x97'))][(_0xa289('0x9c'))](_0xa289('0xcc'));}})[_0xa289('0x37')](function(_0x4e03b0){_0xc841d5=_0x4e03b0['length'];if(!_0x4b6d6['query']['hasOwnProperty'](_0xa289('0x55'))){_0x9fda68[_0xa289('0x30')]=qs['limit'](_0x4b6d6['query'][_0xa289('0x30')]);_0x9fda68['offset']=qs[_0xa289('0x2f')](_0x4b6d6[_0xa289('0x52')][_0xa289('0x2f')]);}switch(_0x2b3bae[_0xa289('0x44')]){case _0xa289('0x6c'):return db[_[_0xa289('0xa5')](_0x4b6d6['query'][_0xa289('0xa2')])+_0xa289('0xcb')][_0xa289('0x62')](_0x9fda68);case _0xa289('0x6d'):case _0xa289('0x3c'):return _0x2b3bae[_0xa289('0x39')+_[_0xa289('0xa5')](_0x4b6d6[_0xa289('0x52')][_0xa289('0xa2')])+_0xa289('0xb4')](_0x9fda68);}})[_0xa289('0x37')](function(_0x7dad6){return{'count':_0xc841d5,'rows':_0x7dad6};})['then'](respondWithResult(_0x34c6f4,null))[_0xa289('0x2a')](handleError(_0x34c6f4,null));};exports[_0xa289('0xcd')]=function(_0x336295,_0x5d248b,_0x4d9a4d){var _0x1d80e5={};var _0x338281={};var _0x5343b2;var _0x4a3243;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x336295['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x5d248b,null))['then'](function(_0x4a2597){if(_0x4a2597){_0x5343b2=_0x4a2597;_0x338281[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0xb2')][_0xa289('0xc3')]);_0x338281['query']=_['keys'](_0x336295[_0xa289('0x52')]);_0x338281[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x338281[_0xa289('0x4f')],_0x338281[_0xa289('0x52')]);_0x1d80e5[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x338281[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x336295['query']['fields']));_0x1d80e5[_0xa289('0x50')]=_0x1d80e5['attributes']['length']?_0x1d80e5[_0xa289('0x50')]:_0x338281[_0xa289('0x4f')];_0x1d80e5[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x336295[_0xa289('0x52')]['sort']);_0x1d80e5[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x336295[_0xa289('0x52')],_0x338281[_0xa289('0x4d')]));if(_0x336295[_0xa289('0x52')]['filter']){_0x1d80e5[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x1d80e5[_0xa289('0x58')],{'$or':_['map'](_0x1d80e5[_0xa289('0x50')],function(_0x3ff2d0){var _0x25b8b9={};_0x25b8b9[_0x3ff2d0]={'$like':'%'+_0x336295[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x25b8b9;})});}_0x1d80e5=_[_0xa289('0x5a')]({},_0x1d80e5,_0x336295[_0xa289('0x5e')]);return _0x5343b2['getVoiceQueuesRt'](_0x1d80e5);}})[_0xa289('0x37')](function(_0xa6b0ab){if(_0xa6b0ab){_0x4a3243=_0xa6b0ab[_0xa289('0x53')];if(!_0x336295[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x1d80e5[_0xa289('0x30')]=qs[_0xa289('0x30')](_0x336295[_0xa289('0x52')][_0xa289('0x30')]);_0x1d80e5[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x336295['query'][_0xa289('0x2f')]);}return _0x5343b2['getVoiceQueuesRt'](_0x1d80e5);}})[_0xa289('0x37')](function(_0x3eb799){if(_0x3eb799){return _0x3eb799?{'count':_0x4a3243,'rows':_0x3eb799}:null;}})[_0xa289('0x37')](respondWithResult(_0x5d248b,null))[_0xa289('0x2a')](handleError(_0x5d248b,null));};exports['getGroups']=function(_0x1745b1,_0x57f6a8,_0x53a9b5){var _0xc87f2f={};var _0x3244a={};var _0x36f4b2;var _0x398561;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x1745b1[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x57f6a8,null))[_0xa289('0x37')](function(_0x4370a4){if(_0x4370a4){_0x36f4b2=_0x4370a4;_0x3244a[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0xce')][_0xa289('0xc3')]);_0x3244a[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x1745b1[_0xa289('0x52')]);_0x3244a['filters']=_[_0xa289('0x4e')](_0x3244a['model'],_0x3244a[_0xa289('0x52')]);_0xc87f2f['attributes']=_[_0xa289('0x4e')](_0x3244a[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x1745b1[_0xa289('0x52')][_0xa289('0x51')]));_0xc87f2f[_0xa289('0x50')]=_0xc87f2f[_0xa289('0x50')]['length']?_0xc87f2f[_0xa289('0x50')]:_0x3244a[_0xa289('0x4f')];_0xc87f2f[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x1745b1[_0xa289('0x52')][_0xa289('0x57')]);_0xc87f2f[_0xa289('0x58')]=qs['filters'](_[_0xa289('0x59')](_0x1745b1[_0xa289('0x52')],_0x3244a[_0xa289('0x4d')]));if(_0x1745b1[_0xa289('0x52')][_0xa289('0x3f')]){_0xc87f2f['where']=_[_0xa289('0x5a')](_0xc87f2f['where'],{'$or':_[_0xa289('0x40')](_0xc87f2f[_0xa289('0x50')],function(_0x5e96e0){var _0x366d27={};_0x366d27[_0x5e96e0]={'$like':'%'+_0x1745b1[_0xa289('0x52')]['filter']+'%'};return _0x366d27;})});}_0xc87f2f=_[_0xa289('0x5a')]({},_0xc87f2f,_0x1745b1[_0xa289('0x5e')]);return _0x36f4b2[_0xa289('0xcf')](_0xc87f2f);}})[_0xa289('0x37')](function(_0x87511c){if(_0x87511c){_0x398561=_0x87511c[_0xa289('0x53')];if(!_0x1745b1[_0xa289('0x52')][_0xa289('0x54')]('nolimit')){_0xc87f2f[_0xa289('0x30')]=qs[_0xa289('0x30')](_0x1745b1[_0xa289('0x52')][_0xa289('0x30')]);_0xc87f2f[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x1745b1[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x36f4b2[_0xa289('0xcf')](_0xc87f2f);}})[_0xa289('0x37')](function(_0x569826){if(_0x569826){return _0x569826?{'count':_0x398561,'rows':_0x569826}:null;}})[_0xa289('0x37')](respondWithResult(_0x57f6a8,null))[_0xa289('0x2a')](handleError(_0x57f6a8,null));};exports[_0xa289('0xd0')]=function(_0x42ab36,_0x4e2d8f,_0xe81ff7){var _0x5351f9={'raw':!![],'where':{}};var _0x4fd10c={};var _0x1dafb5={'count':0x0,'rows':[]};return db[_0xa289('0x61')]['findOne']({'where':{'id':_0x42ab36['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x4e2d8f,null))[_0xa289('0x37')](function(_0x117134){if(_0x117134){_0x4fd10c['model']=_[_0xa289('0x4a')](db[_0xa289('0xd1')]['rawAttributes']);_0x4fd10c[_0xa289('0x52')]=_['keys'](_0x42ab36['query']);_0x4fd10c['filters']=_[_0xa289('0x4e')](_0x4fd10c[_0xa289('0x4f')],_0x4fd10c['query']);_0x5351f9[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x4fd10c['model'],qs[_0xa289('0x51')](_0x42ab36['query'][_0xa289('0x51')]));_0x5351f9[_0xa289('0x50')]=_0x5351f9[_0xa289('0x50')][_0xa289('0x53')]?_0x5351f9[_0xa289('0x50')]:_0x4fd10c['model'];if(!_0x42ab36[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x5351f9[_0xa289('0x30')]=qs['limit'](_0x42ab36[_0xa289('0x52')]['limit']);_0x5351f9[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x42ab36['query']['offset']);}_0x5351f9['order']=qs[_0xa289('0x57')](_0x42ab36['query']['sort']);_0x5351f9[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x42ab36[_0xa289('0x52')],_0x4fd10c[_0xa289('0x4d')]));_0x5351f9[_0xa289('0x58')]['UserId']=_0x117134['id'];if(_0x42ab36[_0xa289('0x52')]['filter']){_0x5351f9[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x5351f9[_0xa289('0x58')],{'$or':_['map'](_0x5351f9['attributes'],function(_0x595d6d){var _0x5b362a={};_0x5b362a[_0x595d6d]={'$like':'%'+_0x42ab36[_0xa289('0x52')]['filter']+'%'};return _0x5b362a;})});}_0x5351f9=_['merge']({},_0x5351f9,_0x42ab36[_0xa289('0x5e')]);return db['VoiceRecording'][_0xa289('0x2e')]({'where':_0x5351f9[_0xa289('0x58')]})[_0xa289('0x37')](function(_0x5b838a){_0x1dafb5[_0xa289('0x2e')]=_0x5b838a;if(_0x42ab36[_0xa289('0x52')]['includeAll']){_0x5351f9[_0xa289('0x60')]=[{'all':!![]}];}return db[_0xa289('0xd1')][_0xa289('0x62')](_0x5351f9);})[_0xa289('0x37')](function(_0xca2f50){_0x1dafb5[_0xa289('0x63')]=_0xca2f50;return _0x1dafb5;});}})[_0xa289('0x37')](respondWithFilteredResult(_0x4e2d8f,_0x5351f9))[_0xa289('0x2a')](handleError(_0x4e2d8f,null));};exports[_0xa289('0xd2')]=function(_0x54b580,_0x2869a3,_0x3c08f5){var _0x162b41={};var _0x3b8c0c={};var _0x558858;var _0x5d5952;return db[_0xa289('0x61')]['findOne']({'where':{'id':_0x54b580[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x2869a3,null))[_0xa289('0x37')](function(_0x28a42d){if(_0x28a42d){_0x558858=_0x28a42d;_0x3b8c0c[_0xa289('0x4f')]=_['keys'](db[_0xa289('0xd3')][_0xa289('0xc3')]);_0x3b8c0c[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x54b580['query']);_0x3b8c0c[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x3b8c0c[_0xa289('0x4f')],_0x3b8c0c['query']);_0x162b41[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x3b8c0c[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x54b580[_0xa289('0x52')]['fields']));_0x162b41['attributes']=_0x162b41[_0xa289('0x50')][_0xa289('0x53')]?_0x162b41['attributes']:_0x3b8c0c[_0xa289('0x4f')];_0x162b41[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x54b580[_0xa289('0x52')]['sort']);_0x162b41[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x54b580[_0xa289('0x52')],_0x3b8c0c[_0xa289('0x4d')]));if(_0x54b580[_0xa289('0x52')][_0xa289('0x3f')]){_0x162b41[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x162b41['where'],{'$or':_['map'](_0x162b41['attributes'],function(_0x455bb5){var _0x541dcd={};_0x541dcd[_0x455bb5]={'$like':'%'+_0x54b580[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x541dcd;})});}_0x162b41=_[_0xa289('0x5a')]({},_0x162b41,_0x54b580[_0xa289('0x5e')]);return _0x558858['getChatInteractions'](_0x162b41);}})[_0xa289('0x37')](function(_0x3c6336){if(_0x3c6336){_0x5d5952=_0x3c6336[_0xa289('0x53')];if(!_0x54b580[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x162b41[_0xa289('0x30')]=qs[_0xa289('0x30')](_0x54b580[_0xa289('0x52')]['limit']);_0x162b41[_0xa289('0x2f')]=qs['offset'](_0x54b580['query'][_0xa289('0x2f')]);}return _0x558858[_0xa289('0xd2')](_0x162b41);}})[_0xa289('0x37')](function(_0x4b2280){if(_0x4b2280){return _0x4b2280?{'count':_0x5d5952,'rows':_0x4b2280}:null;}})['then'](respondWithResult(_0x2869a3,null))[_0xa289('0x2a')](handleError(_0x2869a3,null));};exports[_0xa289('0xd4')]=function(_0x102371,_0x3de713,_0x22dd5a){var _0x5a8f80={};var _0x6d5409={};var _0x491e6e;var _0x473ec1;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x102371[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x3de713,null))['then'](function(_0x1b22f3){if(_0x1b22f3){_0x491e6e=_0x1b22f3;_0x6d5409[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0xd5')][_0xa289('0xc3')]);_0x6d5409[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x102371[_0xa289('0x52')]);_0x6d5409[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x6d5409['model'],_0x6d5409[_0xa289('0x52')]);_0x5a8f80['attributes']=_['intersection'](_0x6d5409['model'],qs[_0xa289('0x51')](_0x102371[_0xa289('0x52')][_0xa289('0x51')]));_0x5a8f80[_0xa289('0x50')]=_0x5a8f80[_0xa289('0x50')][_0xa289('0x53')]?_0x5a8f80[_0xa289('0x50')]:_0x6d5409[_0xa289('0x4f')];_0x5a8f80[_0xa289('0x56')]=qs['sort'](_0x102371['query'][_0xa289('0x57')]);_0x5a8f80[_0xa289('0x58')]=qs['filters'](_[_0xa289('0x59')](_0x102371['query'],_0x6d5409[_0xa289('0x4d')]));if(_0x102371[_0xa289('0x52')][_0xa289('0x3f')]){_0x5a8f80[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x5a8f80[_0xa289('0x58')],{'$or':_['map'](_0x5a8f80['attributes'],function(_0x3d2a47){var _0x4a786f={};_0x4a786f[_0x3d2a47]={'$like':'%'+_0x102371['query'][_0xa289('0x3f')]+'%'};return _0x4a786f;})});}_0x5a8f80=_[_0xa289('0x5a')]({},_0x5a8f80,_0x102371['options']);return _0x491e6e[_0xa289('0xd4')](_0x5a8f80);}})[_0xa289('0x37')](function(_0x1c219e){if(_0x1c219e){_0x473ec1=_0x1c219e[_0xa289('0x53')];if(!_0x102371[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x5a8f80[_0xa289('0x30')]=qs['limit'](_0x102371[_0xa289('0x52')][_0xa289('0x30')]);_0x5a8f80[_0xa289('0x2f')]=qs['offset'](_0x102371[_0xa289('0x52')]['offset']);}return _0x491e6e[_0xa289('0xd4')](_0x5a8f80);}})[_0xa289('0x37')](function(_0xb920c3){if(_0xb920c3){return _0xb920c3?{'count':_0x473ec1,'rows':_0xb920c3}:null;}})[_0xa289('0x37')](respondWithResult(_0x3de713,null))[_0xa289('0x2a')](handleError(_0x3de713,null));};exports[_0xa289('0xd6')]=function(_0x3804d4,_0x516875,_0x4f86e1){var _0x4052ee={'raw':!![],'where':{}};var _0x99e2bd={};var _0x1f0b77={'count':0x0,'rows':[]};return db[_0xa289('0x61')]['findOne']({'where':{'id':_0x3804d4['params']['id']}})['then'](handleEntityNotFound(_0x516875,null))[_0xa289('0x37')](function(_0x4e166a){if(_0x4e166a){_0x99e2bd[_0xa289('0x4f')]=_[_0xa289('0x4a')](db['MailInteraction'][_0xa289('0xc3')]);_0x99e2bd[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x3804d4[_0xa289('0x52')]);_0x99e2bd[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x99e2bd[_0xa289('0x4f')],_0x99e2bd[_0xa289('0x52')]);_0x4052ee[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x99e2bd['model'],qs['fields'](_0x3804d4[_0xa289('0x52')][_0xa289('0x51')]));_0x4052ee[_0xa289('0x50')]=_0x4052ee[_0xa289('0x50')]['length']?_0x4052ee[_0xa289('0x50')]:_0x99e2bd[_0xa289('0x4f')];if(!_0x3804d4[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x4052ee['limit']=qs[_0xa289('0x30')](_0x3804d4['query'][_0xa289('0x30')]);_0x4052ee['offset']=qs[_0xa289('0x2f')](_0x3804d4[_0xa289('0x52')]['offset']);}_0x4052ee[_0xa289('0x56')]=qs['sort'](_0x3804d4['query'][_0xa289('0x57')]);_0x4052ee['where']=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x3804d4[_0xa289('0x52')],_0x99e2bd[_0xa289('0x4d')]));_0x4052ee[_0xa289('0x58')]['UserId']=_0x4e166a['id'];if(_0x3804d4['query'][_0xa289('0x3f')]){_0x4052ee[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x4052ee[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x4052ee['attributes'],function(_0x3919c8){var _0x4a169c={};_0x4a169c[_0x3919c8]={'$like':'%'+_0x3804d4[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x4a169c;})});}_0x4052ee=_[_0xa289('0x5a')]({},_0x4052ee,_0x3804d4[_0xa289('0x5e')]);return db[_0xa289('0xd7')][_0xa289('0x2e')]({'where':_0x4052ee[_0xa289('0x58')]})[_0xa289('0x37')](function(_0x73c30){_0x1f0b77[_0xa289('0x2e')]=_0x73c30;if(_0x3804d4[_0xa289('0x52')][_0xa289('0x5f')]){_0x4052ee[_0xa289('0x60')]=[{'all':!![]}];}return db[_0xa289('0xd7')][_0xa289('0x62')](_0x4052ee);})[_0xa289('0x37')](function(_0x3d04d5){_0x1f0b77[_0xa289('0x63')]=_0x3d04d5;return _0x1f0b77;});}})[_0xa289('0x37')](respondWithFilteredResult(_0x516875,_0x4052ee))[_0xa289('0x2a')](handleError(_0x516875,null));};exports[_0xa289('0xd8')]=function(_0x35b492,_0x3d7e41,_0x53410f){var _0x1ffd54={};var _0x2baf51={};var _0x4dd5ca;var _0x4005ec;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x35b492[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x3d7e41,null))[_0xa289('0x37')](function(_0x507c08){if(_0x507c08){_0x4dd5ca=_0x507c08;_0x2baf51[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0xd9')]['rawAttributes']);_0x2baf51[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x35b492[_0xa289('0x52')]);_0x2baf51[_0xa289('0x4d')]=_['intersection'](_0x2baf51[_0xa289('0x4f')],_0x2baf51[_0xa289('0x52')]);_0x1ffd54[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x2baf51[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x35b492['query']['fields']));_0x1ffd54[_0xa289('0x50')]=_0x1ffd54[_0xa289('0x50')]['length']?_0x1ffd54[_0xa289('0x50')]:_0x2baf51[_0xa289('0x4f')];_0x1ffd54['order']=qs[_0xa289('0x57')](_0x35b492['query']['sort']);_0x1ffd54[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x35b492[_0xa289('0x52')],_0x2baf51[_0xa289('0x4d')]));if(_0x35b492[_0xa289('0x52')][_0xa289('0x3f')]){_0x1ffd54[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x1ffd54[_0xa289('0x58')],{'$or':_['map'](_0x1ffd54['attributes'],function(_0x24caad){var _0x3c8d86={};_0x3c8d86[_0x24caad]={'$like':'%'+_0x35b492[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x3c8d86;})});}_0x1ffd54=_[_0xa289('0x5a')]({},_0x1ffd54,_0x35b492[_0xa289('0x5e')]);return _0x4dd5ca[_0xa289('0xd8')](_0x1ffd54);}})[_0xa289('0x37')](function(_0x4a814a){if(_0x4a814a){_0x4005ec=_0x4a814a['length'];if(!_0x35b492[_0xa289('0x52')]['hasOwnProperty'](_0xa289('0x55'))){_0x1ffd54[_0xa289('0x30')]=qs['limit'](_0x35b492[_0xa289('0x52')][_0xa289('0x30')]);_0x1ffd54[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x35b492[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x4dd5ca[_0xa289('0xd8')](_0x1ffd54);}})[_0xa289('0x37')](function(_0x2f4f13){if(_0x2f4f13){return _0x2f4f13?{'count':_0x4005ec,'rows':_0x2f4f13}:null;}})['then'](respondWithResult(_0x3d7e41,null))[_0xa289('0x2a')](handleError(_0x3d7e41,null));};exports['getFaxInteractions']=function(_0x48a443,_0x287fc7,_0x5b8a1e){var _0x338c7b={};var _0x4b575d={};var _0x343537;var _0x58f511;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x48a443[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x287fc7,null))['then'](function(_0x223d97){if(_0x223d97){_0x343537=_0x223d97;_0x4b575d[_0xa289('0x4f')]=_['keys'](db[_0xa289('0xda')]['rawAttributes']);_0x4b575d['query']=_['keys'](_0x48a443[_0xa289('0x52')]);_0x4b575d[_0xa289('0x4d')]=_['intersection'](_0x4b575d['model'],_0x4b575d[_0xa289('0x52')]);_0x338c7b[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x4b575d['model'],qs[_0xa289('0x51')](_0x48a443[_0xa289('0x52')][_0xa289('0x51')]));_0x338c7b[_0xa289('0x50')]=_0x338c7b[_0xa289('0x50')][_0xa289('0x53')]?_0x338c7b[_0xa289('0x50')]:_0x4b575d[_0xa289('0x4f')];_0x338c7b[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x48a443['query'][_0xa289('0x57')]);_0x338c7b[_0xa289('0x58')]=qs['filters'](_['pick'](_0x48a443[_0xa289('0x52')],_0x4b575d[_0xa289('0x4d')]));if(_0x48a443[_0xa289('0x52')][_0xa289('0x3f')]){_0x338c7b['where']=_[_0xa289('0x5a')](_0x338c7b[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x338c7b[_0xa289('0x50')],function(_0x569feb){var _0x2cc9c7={};_0x2cc9c7[_0x569feb]={'$like':'%'+_0x48a443['query'][_0xa289('0x3f')]+'%'};return _0x2cc9c7;})});}_0x338c7b=_[_0xa289('0x5a')]({},_0x338c7b,_0x48a443[_0xa289('0x5e')]);return _0x343537[_0xa289('0xdb')](_0x338c7b);}})[_0xa289('0x37')](function(_0x949519){if(_0x949519){_0x58f511=_0x949519['length'];if(!_0x48a443[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x338c7b[_0xa289('0x30')]=qs[_0xa289('0x30')](_0x48a443[_0xa289('0x52')][_0xa289('0x30')]);_0x338c7b[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x48a443[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x343537[_0xa289('0xdb')](_0x338c7b);}})[_0xa289('0x37')](function(_0x20bbce){if(_0x20bbce){return _0x20bbce?{'count':_0x58f511,'rows':_0x20bbce}:null;}})['then'](respondWithResult(_0x287fc7,null))['catch'](handleError(_0x287fc7,null));};exports[_0xa289('0xdc')]=function(_0x4b9e56,_0x362fda,_0x1f5e45){var _0x1c999c;var _0x1b8d3a;var _0x16e1b3;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x4b9e56['params']['id'],'role':'agent'},'attributes':['id',_0xa289('0x45'),_0xa289('0xdd'),_0xa289('0xde'),'role',_0xa289('0x7a'),_0xa289('0xdf')]})['then'](handleEntityNotFound(_0x362fda,null))['then'](function(_0x5b6663){if(_0x5b6663){_0x1c999c=_0x5b6663;if(_0x4b9e56[_0xa289('0x67')][_0xa289('0xaf')]){_0x16e1b3=util[_0xa289('0x73')]('LOCAL/%s@from-sip/n',_0x1c999c[_0x4b9e56[_0xa289('0x67')]['interface']]);}else if(_0x4b9e56[_0xa289('0x67')][_0xa289('0xe0')]){_0x16e1b3=util[_0xa289('0x73')](_0xa289('0xb0'),_0x4b9e56[_0xa289('0x67')]['intrf']);}else{_0x16e1b3=util[_0xa289('0x73')](_0xa289('0xb0'),_0x1c999c['name']);}socket['to'](util[_0xa289('0x73')](_0xa289('0xe1'),_0x1c999c[_0xa289('0x45')]))[_0xa289('0xaa')](_0xa289('0xe2'),{'ip':_0x4b9e56[_0xa289('0xe3')]['x-forwarded-for']||_0x4b9e56[_0xa289('0xe4')][_0xa289('0xe5')]||_0x4b9e56[_0xa289('0xe6')][_0xa289('0xe5')]||_0x4b9e56[_0xa289('0xe4')][_0xa289('0xe6')][_0xa289('0xe5')]});return db[_0xa289('0xb2')][_0xa289('0x38')]({'where':{'membername':_0x1c999c['name']},'individualHooks':!![]});}})[_0xa289('0x37')](function(_0x3699c3){if(_0x1c999c){return _0x1c999c[_0xa289('0xe7')]({'raw':!![]});}})[_0xa289('0x37')](function(_0x425a45){var _0x2500c5=[];if(_0x425a45){_0x1b8d3a=_0x425a45;if(_0x1b8d3a[_0xa289('0x53')]){for(var _0x4e9b28=0x0;_0x4e9b28<_0x1b8d3a['length'];_0x4e9b28++){_0x2500c5[_0xa289('0xae')]({'membername':_0x1c999c[_0xa289('0x45')],'UserId':_0x1c999c['id'],'queue_name':_0x1b8d3a[_0x4e9b28][_0xa289('0x45')],'VoiceQueueId':_0x1b8d3a[_0x4e9b28]['id'],'interface':_0x16e1b3,'paused':_0x1c999c['loginInPause']||![],'penalty':_0x1b8d3a[_0x4e9b28][_0xa289('0xe8')]||0x0});}return BPromise[_0xa289('0xb1')](_0x2500c5,function(_0x106c0b){return db[_0xa289('0xb2')][_0xa289('0xe9')](_0x106c0b);});}}})['then'](function(){return db[_0xa289('0xea')][_0xa289('0x62')]({'where':{'membername':_0x1c999c[_0xa289('0x45')],'exitAt':null}});})[_0xa289('0x37')](function(_0x4db0ff){var _0x2cd55=[];_0x4db0ff[_0xa289('0xeb')](function(_0x52de2a){_0x2cd55[_0xa289('0xae')](_0x52de2a[_0xa289('0x36')]({'exitAt':moment()[_0xa289('0x73')](_0xa289('0xec'))}));});return BPromise[_0xa289('0xed')](_0x2cd55);})[_0xa289('0x37')](function(){var _0x5e3fd5=[];var _0x2c3be7=[];var _0x2399f6=utils[_0xa289('0xee')]();var _0x37db23={'membername':_0x1c999c['name'],'interface':_0x16e1b3,'enterAt':moment()[_0xa289('0x73')]('YYYY-MM-DD\x20HH:mm:ss'),'role':_0x1c999c['role'],'internal':_0x1c999c[_0xa289('0x7a')]};_0x2399f6[_0xa289('0xeb')](function(_0x1f7871){_0x5e3fd5[_0xa289('0xae')](_['merge']({'channel':_0x1f7871,'type':'LOGIN','data1':_0x4b9e56[_0xa289('0x67')][_0xa289('0xef')],'data2':_0x16e1b3},_0x37db23));if(_0x1c999c[_0xa289('0xdf')]){_0x2c3be7[_0xa289('0xae')](_[_0xa289('0x5a')]({'channel':_0x1f7871,'type':'PAUSE','data1':'LOGININPAUSE'},_0x37db23));}});return db[_0xa289('0xea')][_0xa289('0x66')](_0x5e3fd5[_0xa289('0xf0')](_0x2c3be7),{'individualHooks':!![]});})['then'](function(){return _0x1c999c[_0xa289('0x36')]({'online':!![],'lastLoginAt':moment()[_0xa289('0x73')](_0xa289('0xec')),'voicePause':_0x1c999c[_0xa289('0xdf')]||![],'mailPause':_0x1c999c[_0xa289('0xdf')]||![],'chatPause':_0x1c999c['loginInPause']||![],'faxPause':_0x1c999c['loginInPause']||![],'smsPause':_0x1c999c['loginInPause']||![],'openchannelPause':_0x1c999c[_0xa289('0xdf')]||![],'pauseType':_0x1c999c[_0xa289('0xdf')]?_0xa289('0xf1'):null,'interface':_0x16e1b3,'lastPauseAt':moment()[_0xa289('0x73')](_0xa289('0xec'))});})[_0xa289('0x37')](respondWithResult(_0x362fda,null))[_0xa289('0x2a')](handleError(_0x362fda,null));};exports[_0xa289('0xf2')]=function(_0x401236,_0x457feb,_0x4dd303){var _0x39a109;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x401236[_0xa289('0x65')]['id'],'role':_0xa289('0x3c')},'attributes':['id',_0xa289('0x45'),'role']})[_0xa289('0x37')](handleEntityNotFound(_0x457feb,null))['then'](function(_0x4956c5){if(_0x4956c5){_0x39a109=_0x4956c5;return db[_0xa289('0xb2')][_0xa289('0x38')]({'where':{'membername':_0x39a109['name']},'individualHooks':!![]});}})[_0xa289('0x37')](function(){return db[_0xa289('0xea')][_0xa289('0x62')]({'where':{'membername':_0x39a109[_0xa289('0x45')],'exitAt':null}});})[_0xa289('0x37')](function(_0x2a012d){var _0x533a9e=[];_0x2a012d[_0xa289('0xeb')](function(_0x333aee){_0x533a9e['push'](_0x333aee['update']({'exitAt':moment()[_0xa289('0x73')](_0xa289('0xec'))}));});return BPromise['all'](_0x533a9e);})['then'](function(){return _0x39a109['update']({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![],'interface':null});})[_0xa289('0x37')](respondWithResult(_0x457feb,null))[_0xa289('0x2a')](handleError(_0x457feb,null));};exports[_0xa289('0xf3')]=function(_0x447bdd,_0x24ba74,_0x4a3710){var _0x7f47a4;return db[_0xa289('0xb2')][_0xa289('0x36')]({'paused':0x1},{'where':{'UserId':_0x447bdd['params']['id']},'individualHooks':!![]})['then'](function(){return db[_0xa289('0x61')]['find']({'where':{'id':_0x447bdd[_0xa289('0x65')]['id'],'role':'agent'},'attributes':['id','name',_0xa289('0x44'),_0xa289('0x7a'),_0xa289('0xaf')]});})[_0xa289('0x37')](handleEntityNotFound(_0x24ba74,null))[_0xa289('0x37')](function(_0x8dcba3){if(_0x8dcba3){_0x7f47a4=_0x8dcba3;return respondWithRpcPromise(_0xa289('0xf4'),_0xa289('0xf3'),{'id':_0x7f47a4['id'],'name':_0x7f47a4[_0xa289('0x45')],'pause':!![]});}})['then'](function(){if(_0x7f47a4){return db[_0xa289('0xea')]['findAll']({'where':{'membername':_0x7f47a4[_0xa289('0x45')],'type':_0xa289('0xf5'),'exitAt':null}});}})[_0xa289('0x37')](function(_0x1bd424){if(_0x1bd424['length']){var _0x44f01d=moment()[_0xa289('0x73')](_0xa289('0xec'));for(var _0x57f2e9=0x0,_0x3ddc6a=_0x1bd424['length'];_0x57f2e9<_0x3ddc6a;_0x57f2e9++){_0x1bd424[_0x57f2e9][_0xa289('0xf6')]({'exitAt':_0x44f01d});}}})[_0xa289('0x37')](function(){var _0x3538d3=[];var _0x28c404=utils[_0xa289('0xee')]();_0x28c404[_0xa289('0xeb')](function(_0x22f832){_0x3538d3['push']({'channel':_0x22f832,'membername':_0x7f47a4[_0xa289('0x45')],'interface':_['isNil'](_0x7f47a4['interface'])?util[_0xa289('0x73')](_0xa289('0xb0'),_0x7f47a4[_0xa289('0x45')]):_0x7f47a4[_0xa289('0xaf')],'type':_0xa289('0xf5'),'enterAt':moment()[_0xa289('0x73')](_0xa289('0xec')),'data1':_0x447bdd[_0xa289('0x67')][_0xa289('0xf7')]||_0xa289('0xf8'),'role':_0x7f47a4[_0xa289('0x44')],'internal':_0x7f47a4[_0xa289('0x7a')]});});return db[_0xa289('0xea')][_0xa289('0x66')](_0x3538d3,{'individualHooks':!![]});})[_0xa289('0x37')](function(){return _0x7f47a4[_0xa289('0x36')]({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x447bdd[_0xa289('0x67')][_0xa289('0xf7')]||_0xa289('0xf8'),'lastPauseAt':moment()[_0xa289('0x73')](_0xa289('0xec'))});})[_0xa289('0x37')](respondWithResult(_0x24ba74,null))['catch'](handleError(_0x24ba74,null));};exports['unpause']=function(_0x39987e,_0x223f29,_0x2e7d26){var _0x2afde3;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x39987e[_0xa289('0x65')]['id']},'attributes':['id',_0xa289('0x45'),'role',_0xa289('0xa0'),_0xa289('0xf9'),_0xa289('0xfa'),'faxPause',_0xa289('0xfb'),_0xa289('0xfc'),_0xa289('0xfd'),_0xa289('0xfe')]})[_0xa289('0x37')](handleEntityNotFound(_0x223f29,null))['then'](function(_0x24c7aa){if(_0x24c7aa){_0x2afde3=_0x24c7aa;if(_0x39987e['body'][_0xa289('0xa2')]&&!utils[_0xa289('0xa1')](_0x39987e[_0xa289('0x67')][_0xa289('0xa2')])){throw new db[(_0xa289('0x97'))]['ValidationError'](_0xa289('0xa3'));}switch(_0x39987e[_0xa289('0x67')]['channel']){case'voice':return respondWithRpcPromise(_0xa289('0xf4'),_0xa289('0xff'),{'id':_0x2afde3['id'],'name':_0x2afde3[_0xa289('0x45')],'pause':![]})['then'](function(){return db[_0xa289('0xb2')]['update']({'paused':0x0},{'where':{'UserId':_0x2afde3['id']},'individualHooks':!![]});})[_0xa289('0x37')](function(){return db[_0xa289('0xea')][_0xa289('0x43')]({'where':{'channel':_0x39987e[_0xa289('0x67')][_0xa289('0xa2')],'membername':_0x2afde3[_0xa289('0x45')],'type':'PAUSE','exitAt':null}});})['then'](function(_0x3ccfaf){if(_0x3ccfaf){return _0x3ccfaf[_0xa289('0x36')]({'exitAt':moment()[_0xa289('0x73')](_0xa289('0xec')),'data2':_0xa289('0x100')},{'individualHooks':!![]});}return null;})[_0xa289('0x37')](function(){return _0x2afde3['update']({'voicePause':![]});});case _0xa289('0x101'):case'chat':case _0xa289('0x102'):case _0xa289('0x103'):case _0xa289('0x104'):return db['MemberReport'][_0xa289('0x43')]({'where':{'channel':_0x39987e[_0xa289('0x67')][_0xa289('0xa2')],'membername':_0x2afde3[_0xa289('0x45')],'type':_0xa289('0xf5'),'exitAt':null}})[_0xa289('0x37')](function(_0x3ff8e5){if(_0x3ff8e5){return _0x3ff8e5[_0xa289('0x36')]({'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0xa289('0x100')},{'individualHooks':!![]});}return null;})['then'](function(){var _0x1748c7={};_[_0xa289('0x31')](_0x1748c7,util[_0xa289('0x73')](_0xa289('0x105'),_0x39987e[_0xa289('0x67')][_0xa289('0xa2')],'Pause'),![]);return _0x2afde3[_0xa289('0x36')](_0x1748c7);});default:return respondWithRpcPromise(_0xa289('0xf4'),_0xa289('0xff'),{'id':_0x2afde3['id'],'name':_0x2afde3['name'],'pause':![]})[_0xa289('0x37')](function(){return db['UserVoiceQueueRt'][_0xa289('0x36')]({'paused':0x0},{'where':{'UserId':_0x2afde3['id']}});})['then'](function(){return db[_0xa289('0xea')][_0xa289('0x62')]({'where':{'membername':_0x2afde3[_0xa289('0x45')],'type':'PAUSE','exitAt':null}});})[_0xa289('0x37')](function(_0x31b252){var _0x18d732=[];_0x31b252[_0xa289('0xeb')](function(_0x453ca1){_0x18d732[_0xa289('0xae')](_0x453ca1[_0xa289('0x36')]({'exitAt':moment()[_0xa289('0x73')](_0xa289('0xec')),'data2':_0xa289('0x100')}));});return BPromise[_0xa289('0xed')](_0x18d732);})[_0xa289('0x37')](function(){return _0x2afde3[_0xa289('0x36')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0xa289('0x37')](respondWithResult(_0x223f29,null))[_0xa289('0x2a')](handleError(_0x223f29,null));};exports['getTeams']=function(_0x29ef41,_0x2557cc,_0x544752){var _0x442b57={};var _0x5d6d8d={};var _0x3d0495;var _0x363589;return db['User'][_0xa289('0xc1')]({'where':{'id':_0x29ef41[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x2557cc,null))[_0xa289('0x37')](function(_0x3ab086){if(_0x3ab086){_0x3d0495=_0x3ab086;_0x5d6d8d[_0xa289('0x4f')]=_[_0xa289('0x4a')](db['Team']['rawAttributes']);_0x5d6d8d[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x29ef41['query']);_0x5d6d8d[_0xa289('0x4d')]=_['intersection'](_0x5d6d8d[_0xa289('0x4f')],_0x5d6d8d[_0xa289('0x52')]);_0x442b57['attributes']=_[_0xa289('0x4e')](_0x5d6d8d[_0xa289('0x4f')],qs['fields'](_0x29ef41[_0xa289('0x52')][_0xa289('0x51')]));_0x442b57[_0xa289('0x50')]=_0x442b57[_0xa289('0x50')]['length']?_0x442b57[_0xa289('0x50')]:_0x5d6d8d[_0xa289('0x4f')];_0x442b57[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x29ef41['query'][_0xa289('0x57')]);_0x442b57[_0xa289('0x58')]=qs[_0xa289('0x4d')](_['pick'](_0x29ef41[_0xa289('0x52')],_0x5d6d8d[_0xa289('0x4d')]));if(_0x29ef41[_0xa289('0x52')][_0xa289('0x3f')]){_0x442b57[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x442b57['where'],{'$or':_[_0xa289('0x40')](_0x442b57[_0xa289('0x50')],function(_0x2b79db){var _0x112158={};_0x112158[_0x2b79db]={'$like':'%'+_0x29ef41[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x112158;})});}_0x442b57=_[_0xa289('0x5a')]({},_0x442b57,_0x29ef41[_0xa289('0x5e')]);return _0x3d0495[_0xa289('0x106')](_0x442b57);}})[_0xa289('0x37')](function(_0x44bd60){if(_0x44bd60){_0x363589=_0x44bd60['length'];if(!_0x29ef41[_0xa289('0x52')]['hasOwnProperty'](_0xa289('0x55'))){_0x442b57['limit']=qs['limit'](_0x29ef41['query']['limit']);_0x442b57[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x29ef41[_0xa289('0x52')]['offset']);}return _0x3d0495['getTeams'](_0x442b57);}})[_0xa289('0x37')](function(_0x4164e0){if(_0x4164e0){return _0x4164e0?{'count':_0x363589,'rows':_0x4164e0}:null;}})[_0xa289('0x37')](respondWithResult(_0x2557cc,null))[_0xa289('0x2a')](handleError(_0x2557cc,null));};exports[_0xa289('0x107')]=function(_0x429d0e,_0x5aacda,_0x413364){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x429d0e['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x5aacda,null))[_0xa289('0x37')](function(_0x4ce01a){if(_0x4ce01a){return _0x4ce01a[_0xa289('0x107')](_0x429d0e[_0xa289('0x67')][_0xa289('0x69')],_[_0xa289('0x6a')](_0x429d0e[_0xa289('0x67')],[_0xa289('0x69'),'id'])||{});}})[_0xa289('0x37')](respondWithResult(_0x5aacda,null))[_0xa289('0x2a')](handleError(_0x5aacda,null));};exports[_0xa289('0x108')]=function(_0x47438b,_0x2d88d8,_0xb0d8d1){var _0x2fe7bd;return db[_0xa289('0x61')]['find']({'where':{'id':_0x47438b[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x2d88d8,null))[_0xa289('0x37')](function(_0x1a2d3c){if(_0x1a2d3c){return _0x1a2d3c[_0xa289('0x108')](_0x47438b['query'][_0xa289('0x69')]);}})[_0xa289('0x37')](respondWithStatusCode(_0x2d88d8,null))[_0xa289('0x2a')](handleError(_0x2d88d8,null));};exports[_0xa289('0x109')]=function(_0x20c1d0,_0x58b1a4,_0x1905bd){var _0x4251c5={};var _0x46a7a6={};var _0x44ff1a;var _0x34dbb2;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x20c1d0[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x58b1a4,null))[_0xa289('0x37')](function(_0x3efd07){if(_0x3efd07){_0x44ff1a=_0x3efd07;_0x46a7a6[_0xa289('0x4f')]=_[_0xa289('0x4a')](db['CmList']['rawAttributes']);_0x46a7a6[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x20c1d0[_0xa289('0x52')]);_0x46a7a6['filters']=_[_0xa289('0x4e')](_0x46a7a6[_0xa289('0x4f')],_0x46a7a6['query']);_0x4251c5[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x46a7a6['model'],qs[_0xa289('0x51')](_0x20c1d0[_0xa289('0x52')]['fields']));_0x4251c5[_0xa289('0x50')]=_0x4251c5['attributes']['length']?_0x4251c5[_0xa289('0x50')]:_0x46a7a6['model'];_0x4251c5[_0xa289('0x56')]=qs['sort'](_0x20c1d0[_0xa289('0x52')][_0xa289('0x57')]);_0x4251c5[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x20c1d0[_0xa289('0x52')],_0x46a7a6[_0xa289('0x4d')]));if(_0x20c1d0[_0xa289('0x52')][_0xa289('0x3f')]){_0x4251c5[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x4251c5['where'],{'$or':_[_0xa289('0x40')](_0x4251c5['attributes'],function(_0x1e5f77){var _0x2ae2c9={};_0x2ae2c9[_0x1e5f77]={'$like':'%'+_0x20c1d0[_0xa289('0x52')]['filter']+'%'};return _0x2ae2c9;})});}_0x4251c5=_[_0xa289('0x5a')]({},_0x4251c5,_0x20c1d0[_0xa289('0x5e')]);return _0x44ff1a[_0xa289('0x109')](_0x4251c5);}})[_0xa289('0x37')](function(_0x2f5a2f){if(_0x2f5a2f){_0x34dbb2=_0x2f5a2f[_0xa289('0x53')];if(!_0x20c1d0[_0xa289('0x52')][_0xa289('0x54')]('nolimit')){_0x4251c5[_0xa289('0x30')]=qs['limit'](_0x20c1d0[_0xa289('0x52')][_0xa289('0x30')]);_0x4251c5[_0xa289('0x2f')]=qs['offset'](_0x20c1d0[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x44ff1a[_0xa289('0x109')](_0x4251c5);}})[_0xa289('0x37')](function(_0x543047){if(_0x543047){return _0x543047?{'count':_0x34dbb2,'rows':_0x543047}:null;}})['then'](respondWithResult(_0x58b1a4,null))[_0xa289('0x2a')](handleError(_0x58b1a4,null));};exports['getAgents']=function(_0x19b6fd,_0x46a8eb,_0x30743b){var _0x381f50={};var _0x174a45={};var _0xb4483c;var _0x3ae084;return db['User']['findOne']({'where':{'id':_0x19b6fd[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x46a8eb,null))[_0xa289('0x37')](function(_0x2a296f){if(_0x2a296f){_0xb4483c=_0x2a296f;_0x174a45[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0x61')][_0xa289('0xc3')]);_0x174a45[_0xa289('0x52')]=_['keys'](_0x19b6fd['query']);_0x174a45['filters']=_['intersection'](_0x174a45[_0xa289('0x4f')],_0x174a45[_0xa289('0x52')]);_0x381f50[_0xa289('0x50')]=_['intersection'](_0x174a45[_0xa289('0x4f')],qs['fields'](_0x19b6fd[_0xa289('0x52')][_0xa289('0x51')]));_0x381f50[_0xa289('0x50')]=_0x381f50[_0xa289('0x50')]['length']?_0x381f50[_0xa289('0x50')]:_0x174a45[_0xa289('0x4f')];_0x381f50[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x19b6fd['query']['sort']);_0x381f50['where']=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x19b6fd[_0xa289('0x52')],_0x174a45['filters']));if(_0x19b6fd['query'][_0xa289('0x3f')]){_0x381f50['where']=_['merge'](_0x381f50[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x381f50['attributes'],function(_0x5e2ce1){var _0xfc13eb={};_0xfc13eb[_0x5e2ce1]={'$like':'%'+_0x19b6fd[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0xfc13eb;})});}_0x381f50['model']=db['User'];_0x381f50['as']=_0xa289('0x3b');_0x381f50=_['merge']({},_0x381f50,_0x19b6fd[_0xa289('0x5e')]);return _0xb4483c[_0xa289('0xe7')]({'include':[_0x381f50]});}})[_0xa289('0x37')](function(_0x23d011){if(_0x23d011){var _0x4c3cc5={},_0xc775c2=[],_0x5e7fb2=0x0;for(var _0x5888f2=0x0;_0x5888f2<_0x23d011[_0xa289('0x53')];_0x5888f2+=0x1){for(var _0xd3e4d4=0x0,_0xd00c0;_0xd3e4d4<_0x23d011[_0x5888f2][_0xa289('0x3b')][_0xa289('0x53')];_0xd3e4d4+=0x1){_0xd00c0=_0x23d011[_0x5888f2]['Agents'][_0xd3e4d4][_0xa289('0x39')]({'plain':!![]});_0x4c3cc5[_0xd00c0['id']]=_0xd00c0;}}_0x4c3cc5=_['values'](_0x4c3cc5);for(var _0x314c0c=qs[_0xa289('0x2f')](_0x19b6fd['query'][_0xa289('0x2f')]);_0x314c0c<_0x4c3cc5[_0xa289('0x53')]&&_0xc775c2['length']<qs['limit'](_0x19b6fd['query'][_0xa289('0x30')]);_0x314c0c+=0x1){if(_0x4c3cc5[_0x314c0c]){_0xc775c2[_0xa289('0xae')](_0x4c3cc5[_0x314c0c]);}}return{'count':_0x4c3cc5[_0xa289('0x53')],'rows':_0xc775c2};}})[_0xa289('0x37')](respondWithResult(_0x46a8eb,null))['catch'](handleError(_0x46a8eb,null));};exports[_0xa289('0x38')]=function(_0x39ff81,_0x502c6b){if(_0x39ff81[_0xa289('0x6d')]['id']==_0x39ff81['params']['id']){return _0x502c6b['status'](0x1f4)['send']({'message':_0xa289('0x10a')});}return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x39ff81['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x502c6b,null))[_0xa289('0x37')](removeEntity(_0x502c6b,null))[_0xa289('0x2a')](handleError(_0x502c6b,null));};exports[_0xa289('0x10b')]=function(_0x44f02a,_0x1a9217,_0x1ac448){return db['User'][_0xa289('0x43')]({'where':{'id':_0x44f02a[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x1a9217,null))[_0xa289('0x37')](function(_0x103a3b){if(_0x103a3b){return _0x103a3b['addChatInteractions'](_0x44f02a['body'][_0xa289('0x69')],_[_0xa289('0x6a')](_0x44f02a['body'],[_0xa289('0x69'),'id'])||{})[_0xa289('0xa8')](function(){for(var _0x2ce62d=0x0;_0x2ce62d<_0x44f02a['body'][_0xa289('0x69')][_0xa289('0x53')];_0x2ce62d+=0x1){socket[_0xa289('0xaa')](_0xa289('0x10c'),{'ChatInteractionId':Number(_0x44f02a[_0xa289('0x67')][_0xa289('0x69')][_0x2ce62d]),'UserId':Number(_0x44f02a['params']['id'])});}return _0x44f02a[_0xa289('0x67')]['ids'];});}})[_0xa289('0x37')](respondWithResult(_0x1a9217,null))[_0xa289('0x2a')](handleError(_0x1a9217,null));};exports[_0xa289('0x10d')]=function(_0x11514f,_0x2d1a7,_0x564108){var _0x29aca8;return db[_0xa289('0x61')]['find']({'where':{'id':_0x11514f['params']['id']}})['then'](handleEntityNotFound(_0x2d1a7,null))[_0xa289('0x37')](function(_0x17029b){if(_0x17029b){return _0x17029b[_0xa289('0x10d')](_0x11514f[_0xa289('0x52')]['ids'])[_0xa289('0x37')](function(_0x1b1922){if(_[_0xa289('0x10e')](_0x11514f[_0xa289('0x52')][_0xa289('0x69')])){for(var _0x4444da=0x0;_0x4444da<_0x11514f[_0xa289('0x52')][_0xa289('0x69')][_0xa289('0x53')];_0x4444da+=0x1){socket['emit']('user_has_chat_interactions:remove',{'ChatInteractionId':Number(_0x11514f['query'][_0xa289('0x69')][_0x4444da]),'UserId':Number(_0x11514f[_0xa289('0x65')]['id'])});}}else{socket[_0xa289('0xaa')](_0xa289('0x10f'),{'ChatInteractionId':Number(_0x11514f[_0xa289('0x52')][_0xa289('0x69')]),'UserId':Number(_0x11514f['params']['id'])});}});}})[_0xa289('0x37')](respondWithStatusCode(_0x2d1a7,null))[_0xa289('0x2a')](handleError(_0x2d1a7,null));};exports['addMailInteractions']=function(_0x51e550,_0x22d3dd,_0x4b9ebd){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x51e550[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x22d3dd,null))[_0xa289('0x37')](function(_0x425e46){if(_0x425e46){return _0x425e46[_0xa289('0x110')](_0x51e550[_0xa289('0x67')][_0xa289('0x69')],_[_0xa289('0x6a')](_0x51e550['body'],['ids','id'])||{})[_0xa289('0xa8')](function(){for(var _0x3b6c40=0x0;_0x3b6c40<_0x51e550[_0xa289('0x67')][_0xa289('0x69')][_0xa289('0x53')];_0x3b6c40+=0x1){socket[_0xa289('0xaa')](_0xa289('0x111'),{'MailInteractionId':Number(_0x51e550[_0xa289('0x67')][_0xa289('0x69')][_0x3b6c40]),'UserId':Number(_0x51e550['params']['id'])});}return _0x51e550[_0xa289('0x67')][_0xa289('0x69')];});}})[_0xa289('0x37')](respondWithResult(_0x22d3dd,null))[_0xa289('0x2a')](handleError(_0x22d3dd,null));};exports[_0xa289('0x112')]=function(_0x336a12,_0x580e3c,_0x1a7bb5){var _0x58c678;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x336a12[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x580e3c,null))[_0xa289('0x37')](function(_0x3d4b0b){if(_0x3d4b0b){return _0x3d4b0b[_0xa289('0x112')](_0x336a12['query']['ids'])[_0xa289('0x37')](function(_0x46023e){if(_[_0xa289('0x10e')](_0x336a12[_0xa289('0x52')]['ids'])){for(var _0x425579=0x0;_0x425579<_0x336a12[_0xa289('0x52')][_0xa289('0x69')][_0xa289('0x53')];_0x425579+=0x1){socket['emit']('user_has_mail_interactions:remove',{'MailInteractionId':Number(_0x336a12[_0xa289('0x52')][_0xa289('0x69')][_0x425579]),'UserId':Number(_0x336a12[_0xa289('0x65')]['id'])});}}else{socket[_0xa289('0xaa')](_0xa289('0x113'),{'MailInteractionId':Number(_0x336a12['query'][_0xa289('0x69')]),'UserId':Number(_0x336a12['params']['id'])});}});}})[_0xa289('0x37')](respondWithStatusCode(_0x580e3c,null))['catch'](handleError(_0x580e3c,null));};exports[_0xa289('0x114')]=function(_0x1d358e,_0x591d66,_0x598851){return db[_0xa289('0x61')]['find']({'where':{'id':_0x1d358e['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x591d66,null))[_0xa289('0x37')](function(_0x1264d9){if(_0x1264d9){return _0x1264d9[_0xa289('0x114')](_0x1d358e[_0xa289('0x67')][_0xa289('0x69')],_[_0xa289('0x6a')](_0x1d358e[_0xa289('0x67')],['ids','id'])||{})[_0xa289('0xa8')](function(){for(var _0x544190=0x0;_0x544190<_0x1d358e['body']['ids'][_0xa289('0x53')];_0x544190+=0x1){socket[_0xa289('0xaa')](_0xa289('0x115'),{'FaxInteractionId':Number(_0x1d358e[_0xa289('0x67')][_0xa289('0x69')][_0x544190]),'UserId':Number(_0x1d358e[_0xa289('0x65')]['id'])});}return _0x1d358e['body'][_0xa289('0x69')];});}})['then'](respondWithResult(_0x591d66,null))[_0xa289('0x2a')](handleError(_0x591d66,null));};exports[_0xa289('0x116')]=function(_0x3482bd,_0x4059b8,_0xcadc2a){var _0x244064;return db[_0xa289('0x61')]['find']({'where':{'id':_0x3482bd[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x4059b8,null))['then'](function(_0x31608b){if(_0x31608b){return _0x31608b[_0xa289('0x116')](_0x3482bd[_0xa289('0x52')][_0xa289('0x69')])['then'](function(_0x18ea55){if(_[_0xa289('0x10e')](_0x3482bd[_0xa289('0x52')][_0xa289('0x69')])){for(var _0x5bcb40=0x0;_0x5bcb40<_0x3482bd[_0xa289('0x52')][_0xa289('0x69')]['length'];_0x5bcb40+=0x1){socket[_0xa289('0xaa')](_0xa289('0x117'),{'FaxInteractionId':Number(_0x3482bd[_0xa289('0x52')][_0xa289('0x69')][_0x5bcb40]),'UserId':Number(_0x3482bd[_0xa289('0x65')]['id'])});}}else{socket[_0xa289('0xaa')](_0xa289('0x117'),{'FaxInteractionId':Number(_0x3482bd['query'][_0xa289('0x69')]),'UserId':Number(_0x3482bd[_0xa289('0x65')]['id'])});}});}})['then'](respondWithStatusCode(_0x4059b8,null))[_0xa289('0x2a')](handleError(_0x4059b8,null));};exports[_0xa289('0x118')]=function(_0x2c6308,_0x54b3a1,_0x378935){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x2c6308['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x54b3a1,null))[_0xa289('0x37')](function(_0x1a5319){if(_0x1a5319){return _0x1a5319['addSmsInteractions'](_0x2c6308[_0xa289('0x67')][_0xa289('0x69')],_[_0xa289('0x6a')](_0x2c6308[_0xa289('0x67')],[_0xa289('0x69'),'id'])||{})[_0xa289('0xa8')](function(){for(var _0x266bd4=0x0;_0x266bd4<_0x2c6308['body']['ids']['length'];_0x266bd4+=0x1){socket[_0xa289('0xaa')]('user_has_sms_interactions:save',{'SmsInteractionId':Number(_0x2c6308[_0xa289('0x67')][_0xa289('0x69')][_0x266bd4]),'UserId':Number(_0x2c6308[_0xa289('0x65')]['id'])});}return _0x2c6308['body'][_0xa289('0x69')];});}})[_0xa289('0x37')](respondWithResult(_0x54b3a1,null))[_0xa289('0x2a')](handleError(_0x54b3a1,null));};exports['removeSmsInteractions']=function(_0x3fc42d,_0x290483,_0x375a84){var _0x24c293;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x3fc42d[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x290483,null))[_0xa289('0x37')](function(_0x280242){if(_0x280242){return _0x280242[_0xa289('0x119')](_0x3fc42d[_0xa289('0x52')][_0xa289('0x69')])['then'](function(_0x121b46){if(_[_0xa289('0x10e')](_0x3fc42d[_0xa289('0x52')][_0xa289('0x69')])){for(var _0x2f49a1=0x0;_0x2f49a1<_0x3fc42d['query'][_0xa289('0x69')][_0xa289('0x53')];_0x2f49a1+=0x1){socket[_0xa289('0xaa')](_0xa289('0x11a'),{'SmsInteractionId':Number(_0x3fc42d['query'][_0xa289('0x69')][_0x2f49a1]),'UserId':Number(_0x3fc42d[_0xa289('0x65')]['id'])});}}else{socket[_0xa289('0xaa')]('user_has_sms_interactions:remove',{'SmsInteractionId':Number(_0x3fc42d['query'][_0xa289('0x69')]),'UserId':Number(_0x3fc42d[_0xa289('0x65')]['id'])});}});}})[_0xa289('0x37')](respondWithStatusCode(_0x290483,null))[_0xa289('0x2a')](handleError(_0x290483,null));};exports[_0xa289('0x11b')]=function(_0x5d6100,_0x37df1d,_0x335b4c){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x5d6100[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x37df1d,null))[_0xa289('0x37')](function(_0xcdd416){if(_0xcdd416){return _0xcdd416[_0xa289('0x11b')](_0x5d6100['body'][_0xa289('0x69')],_[_0xa289('0x6a')](_0x5d6100[_0xa289('0x67')],[_0xa289('0x69'),'id'])||{})[_0xa289('0xa8')](function(){for(var _0x3380d1=0x0;_0x3380d1<_0x5d6100[_0xa289('0x67')][_0xa289('0x69')][_0xa289('0x53')];_0x3380d1+=0x1){socket[_0xa289('0xaa')]('user_has_openchannel_interactions:save',{'OpenchannelInteractionId':Number(_0x5d6100[_0xa289('0x67')]['ids'][_0x3380d1]),'UserId':Number(_0x5d6100[_0xa289('0x65')]['id'])});}return _0x5d6100[_0xa289('0x67')][_0xa289('0x69')];});}})[_0xa289('0x37')](respondWithResult(_0x37df1d,null))[_0xa289('0x2a')](handleError(_0x37df1d,null));};exports[_0xa289('0x11c')]=function(_0xc7def4,_0x1487f9,_0x1c5bed){var _0x12727d;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0xc7def4[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x1487f9,null))[_0xa289('0x37')](function(_0x4e2468){if(_0x4e2468){return _0x4e2468[_0xa289('0x11c')](_0xc7def4[_0xa289('0x52')][_0xa289('0x69')])[_0xa289('0x37')](function(_0x48bc8c){if(_['isArray'](_0xc7def4[_0xa289('0x52')][_0xa289('0x69')])){for(var _0x500222=0x0;_0x500222<_0xc7def4['query']['ids']['length'];_0x500222+=0x1){socket['emit'](_0xa289('0x11d'),{'OpenchannelInteractionId':Number(_0xc7def4[_0xa289('0x52')][_0xa289('0x69')][_0x500222]),'UserId':Number(_0xc7def4[_0xa289('0x65')]['id'])});}}else{socket['emit']('user_has_openchannel_interactions:remove',{'OpenchannelInteractionId':Number(_0xc7def4[_0xa289('0x52')][_0xa289('0x69')]),'UserId':Number(_0xc7def4[_0xa289('0x65')]['id'])});}});}})[_0xa289('0x37')](respondWithStatusCode(_0x1487f9,null))[_0xa289('0x2a')](handleError(_0x1487f9,null));};exports[_0xa289('0x11e')]=function(_0x2f401a,_0x3a300e,_0xef20d2){var _0x2e110b={};var _0x444b1b={};var _0x5f113e;var _0x3fd2ba;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x2f401a[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x3a300e,null))[_0xa289('0x37')](function(_0x375f76){if(_0x375f76){_0x5f113e=_0x375f76;_0x444b1b[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0x11f')][_0xa289('0xc3')]);_0x444b1b[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x2f401a['query']);_0x444b1b[_0xa289('0x4d')]=_['intersection'](_0x444b1b[_0xa289('0x4f')],_0x444b1b[_0xa289('0x52')]);_0x2e110b[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x444b1b[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x2f401a[_0xa289('0x52')][_0xa289('0x51')]));_0x2e110b[_0xa289('0x50')]=_0x2e110b[_0xa289('0x50')][_0xa289('0x53')]?_0x2e110b[_0xa289('0x50')]:_0x444b1b[_0xa289('0x4f')];_0x2e110b[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x2f401a[_0xa289('0x52')][_0xa289('0x57')]);_0x2e110b[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x2f401a['query'],_0x444b1b['filters']));if(_0x2f401a[_0xa289('0x52')][_0xa289('0x3f')]){_0x2e110b['where']=_[_0xa289('0x5a')](_0x2e110b[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x2e110b[_0xa289('0x50')],function(_0x5491ff){var _0x3fec1a={};_0x3fec1a[_0x5491ff]={'$like':'%'+_0x2f401a[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x3fec1a;})});}_0x2e110b=_[_0xa289('0x5a')]({},_0x2e110b,_0x2f401a[_0xa289('0x5e')]);return _0x5f113e[_0xa289('0x11e')](_0x2e110b);}})[_0xa289('0x37')](function(_0x43f5f9){if(_0x43f5f9){_0x3fd2ba=_0x43f5f9['length'];if(!_0x2f401a[_0xa289('0x52')][_0xa289('0x54')]('nolimit')){_0x2e110b[_0xa289('0x30')]=qs['limit'](_0x2f401a[_0xa289('0x52')]['limit']);_0x2e110b[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x2f401a[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x5f113e[_0xa289('0x11e')](_0x2e110b);}})['then'](function(_0x4c1727){if(_0x4c1727){return _0x4c1727?{'count':_0x3fd2ba,'rows':_0x4c1727}:null;}})['then'](respondWithResult(_0x3a300e,null))[_0xa289('0x2a')](handleError(_0x3a300e,null));};exports[_0xa289('0x120')]=function(_0x111641,_0x2b395d,_0xdba178){var _0x42b8af={};var _0x542200={};var _0x3132b6;var _0x2f36e2;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x111641[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x2b395d,null))['then'](function(_0x15ab73){if(_0x15ab73){_0x3132b6=_0x15ab73;_0x542200[_0xa289('0x4f')]=_['keys'](db[_0xa289('0x121')][_0xa289('0xc3')]);_0x542200[_0xa289('0x52')]=_['keys'](_0x111641[_0xa289('0x52')]);_0x542200['filters']=_['intersection'](_0x542200[_0xa289('0x4f')],_0x542200[_0xa289('0x52')]);_0x42b8af['attributes']=_[_0xa289('0x4e')](_0x542200[_0xa289('0x4f')],qs['fields'](_0x111641[_0xa289('0x52')]['fields']));_0x42b8af['attributes']=_0x42b8af['attributes']['length']?_0x42b8af[_0xa289('0x50')]:_0x542200[_0xa289('0x4f')];_0x42b8af['order']=qs[_0xa289('0x57')](_0x111641[_0xa289('0x52')][_0xa289('0x57')]);_0x42b8af[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x111641[_0xa289('0x52')],_0x542200[_0xa289('0x4d')]));if(_0x111641[_0xa289('0x52')]['filter']){_0x42b8af[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x42b8af[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x42b8af[_0xa289('0x50')],function(_0x10d511){var _0x1a8a3d={};_0x1a8a3d[_0x10d511]={'$like':'%'+_0x111641['query']['filter']+'%'};return _0x1a8a3d;})});}_0x42b8af=_[_0xa289('0x5a')]({},_0x42b8af,_0x111641[_0xa289('0x5e')]);return _0x3132b6['getFaxAccounts'](_0x42b8af);}})[_0xa289('0x37')](function(_0x2fc323){if(_0x2fc323){_0x2f36e2=_0x2fc323[_0xa289('0x53')];if(!_0x111641[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x42b8af[_0xa289('0x30')]=qs['limit'](_0x111641[_0xa289('0x52')][_0xa289('0x30')]);_0x42b8af[_0xa289('0x2f')]=qs['offset'](_0x111641[_0xa289('0x52')]['offset']);}return _0x3132b6['getFaxAccounts'](_0x42b8af);}})[_0xa289('0x37')](function(_0x5dfc6e){if(_0x5dfc6e){return _0x5dfc6e?{'count':_0x2f36e2,'rows':_0x5dfc6e}:null;}})[_0xa289('0x37')](respondWithResult(_0x2b395d,null))[_0xa289('0x2a')](handleError(_0x2b395d,null));};exports[_0xa289('0x122')]=function(_0x3df01d,_0x58424e,_0x3245a2){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x3df01d['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x58424e,null))[_0xa289('0x37')](function(_0x587534){if(_0x587534){return _0x587534[_0xa289('0x122')](_0x3df01d[_0xa289('0x67')][_0xa289('0x69')],_['omit'](_0x3df01d['body'],[_0xa289('0x69'),'id'])||{});}})[_0xa289('0x37')](respondWithResult(_0x58424e,null))[_0xa289('0x2a')](handleError(_0x58424e,null));};exports[_0xa289('0x123')]=function(_0x2958af,_0x4c3d8b,_0x2d794f){var _0x2d35ac;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x2958af[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x4c3d8b,null))[_0xa289('0x37')](function(_0x17e7cd){if(_0x17e7cd){return _0x17e7cd[_0xa289('0x123')](_0x2958af[_0xa289('0x52')][_0xa289('0x69')]);}})[_0xa289('0x37')](respondWithStatusCode(_0x4c3d8b,null))[_0xa289('0x2a')](handleError(_0x4c3d8b,null));};exports[_0xa289('0x124')]=function(_0x5e015b,_0xda7d8b,_0x25702b){var _0x52d0b7={};var _0x11d35b={};var _0x75d112;var _0x4f935b;return db[_0xa289('0x61')]['findOne']({'where':{'id':_0x5e015b[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0xda7d8b,null))[_0xa289('0x37')](function(_0x357a50){if(_0x357a50){_0x75d112=_0x357a50;_0x11d35b[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0x125')]['rawAttributes']);_0x11d35b[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x5e015b[_0xa289('0x52')]);_0x11d35b['filters']=_['intersection'](_0x11d35b[_0xa289('0x4f')],_0x11d35b[_0xa289('0x52')]);_0x52d0b7[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x11d35b[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x5e015b[_0xa289('0x52')][_0xa289('0x51')]));_0x52d0b7[_0xa289('0x50')]=_0x52d0b7[_0xa289('0x50')][_0xa289('0x53')]?_0x52d0b7[_0xa289('0x50')]:_0x11d35b['model'];_0x52d0b7[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x5e015b[_0xa289('0x52')][_0xa289('0x57')]);_0x52d0b7[_0xa289('0x58')]=qs['filters'](_[_0xa289('0x59')](_0x5e015b[_0xa289('0x52')],_0x11d35b[_0xa289('0x4d')]));if(_0x5e015b['query'][_0xa289('0x3f')]){_0x52d0b7['where']=_['merge'](_0x52d0b7[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x52d0b7[_0xa289('0x50')],function(_0x8dc07c){var _0x3a29f4={};_0x3a29f4[_0x8dc07c]={'$like':'%'+_0x5e015b[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x3a29f4;})});}_0x52d0b7=_[_0xa289('0x5a')]({},_0x52d0b7,_0x5e015b[_0xa289('0x5e')]);return _0x75d112[_0xa289('0x124')](_0x52d0b7);}})[_0xa289('0x37')](function(_0x54216f){if(_0x54216f){_0x4f935b=_0x54216f[_0xa289('0x53')];if(!_0x5e015b['query'][_0xa289('0x54')](_0xa289('0x55'))){_0x52d0b7[_0xa289('0x30')]=qs['limit'](_0x5e015b['query'][_0xa289('0x30')]);_0x52d0b7['offset']=qs[_0xa289('0x2f')](_0x5e015b[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x75d112[_0xa289('0x124')](_0x52d0b7);}})['then'](function(_0x276ca8){if(_0x276ca8){return _0x276ca8?{'count':_0x4f935b,'rows':_0x276ca8}:null;}})['then'](respondWithResult(_0xda7d8b,null))['catch'](handleError(_0xda7d8b,null));};exports[_0xa289('0x126')]=function(_0x33cdcf,_0x1de0bc,_0x5585e3){return db['User']['find']({'where':{'id':_0x33cdcf[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x1de0bc,null))[_0xa289('0x37')](function(_0x74c9db){if(_0x74c9db){return _0x74c9db['addMailAccounts'](_0x33cdcf[_0xa289('0x67')]['ids'],_[_0xa289('0x6a')](_0x33cdcf[_0xa289('0x67')],[_0xa289('0x69'),'id'])||{});}})[_0xa289('0x37')](respondWithResult(_0x1de0bc,null))[_0xa289('0x2a')](handleError(_0x1de0bc,null));};exports['removeMailAccounts']=function(_0x7bfe02,_0x299b2b,_0x2fba69){var _0x2f9cce;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x7bfe02['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x299b2b,null))[_0xa289('0x37')](function(_0x4a0622){if(_0x4a0622){return _0x4a0622[_0xa289('0x127')](_0x7bfe02[_0xa289('0x52')][_0xa289('0x69')]);}})[_0xa289('0x37')](respondWithStatusCode(_0x299b2b,null))[_0xa289('0x2a')](handleError(_0x299b2b,null));};exports[_0xa289('0x128')]=function(_0x5456e1,_0x59ea00,_0x1fefb0){var _0xdc18b6={};var _0x57c4f4={};var _0x26886c;var _0x409870;return db[_0xa289('0x61')]['findOne']({'where':{'id':_0x5456e1['params']['id']}})['then'](handleEntityNotFound(_0x59ea00,null))[_0xa289('0x37')](function(_0x587ede){if(_0x587ede){_0x26886c=_0x587ede;_0x57c4f4['model']=_[_0xa289('0x4a')](db['OpenchannelAccount'][_0xa289('0xc3')]);_0x57c4f4[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x5456e1[_0xa289('0x52')]);_0x57c4f4[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x57c4f4['model'],_0x57c4f4[_0xa289('0x52')]);_0xdc18b6[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x57c4f4[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x5456e1[_0xa289('0x52')][_0xa289('0x51')]));_0xdc18b6[_0xa289('0x50')]=_0xdc18b6[_0xa289('0x50')][_0xa289('0x53')]?_0xdc18b6['attributes']:_0x57c4f4[_0xa289('0x4f')];_0xdc18b6['order']=qs[_0xa289('0x57')](_0x5456e1['query'][_0xa289('0x57')]);_0xdc18b6[_0xa289('0x58')]=qs[_0xa289('0x4d')](_['pick'](_0x5456e1[_0xa289('0x52')],_0x57c4f4[_0xa289('0x4d')]));if(_0x5456e1['query']['filter']){_0xdc18b6[_0xa289('0x58')]=_[_0xa289('0x5a')](_0xdc18b6['where'],{'$or':_[_0xa289('0x40')](_0xdc18b6['attributes'],function(_0x189294){var _0x1539f4={};_0x1539f4[_0x189294]={'$like':'%'+_0x5456e1[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x1539f4;})});}_0xdc18b6=_[_0xa289('0x5a')]({},_0xdc18b6,_0x5456e1['options']);return _0x26886c[_0xa289('0x128')](_0xdc18b6);}})[_0xa289('0x37')](function(_0x563d97){if(_0x563d97){_0x409870=_0x563d97[_0xa289('0x53')];if(!_0x5456e1['query'][_0xa289('0x54')](_0xa289('0x55'))){_0xdc18b6[_0xa289('0x30')]=qs['limit'](_0x5456e1[_0xa289('0x52')]['limit']);_0xdc18b6[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x5456e1[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x26886c['getOpenchannelAccounts'](_0xdc18b6);}})[_0xa289('0x37')](function(_0x218086){if(_0x218086){return _0x218086?{'count':_0x409870,'rows':_0x218086}:null;}})[_0xa289('0x37')](respondWithResult(_0x59ea00,null))[_0xa289('0x2a')](handleError(_0x59ea00,null));};exports['addOpenchannelAccounts']=function(_0x533575,_0x3931b2,_0x306a6e){return db[_0xa289('0x61')]['find']({'where':{'id':_0x533575['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x3931b2,null))[_0xa289('0x37')](function(_0x1c9a9a){if(_0x1c9a9a){return _0x1c9a9a['addOpenchannelAccounts'](_0x533575[_0xa289('0x67')]['ids'],_['omit'](_0x533575['body'],[_0xa289('0x69'),'id'])||{});}})[_0xa289('0x37')](respondWithResult(_0x3931b2,null))[_0xa289('0x2a')](handleError(_0x3931b2,null));};exports[_0xa289('0x129')]=function(_0x44d58b,_0xe6b76e,_0x28e1cb){var _0x378a05;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x44d58b['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0xe6b76e,null))[_0xa289('0x37')](function(_0x447afc){if(_0x447afc){return _0x447afc['removeOpenchannelAccounts'](_0x44d58b[_0xa289('0x52')][_0xa289('0x69')]);}})[_0xa289('0x37')](respondWithStatusCode(_0xe6b76e,null))[_0xa289('0x2a')](handleError(_0xe6b76e,null));};exports[_0xa289('0x12a')]=function(_0x4ff5c0,_0x46a447,_0x39ce07){var _0x347ca1={};var _0x5a1e0c={};var _0x48a96e;var _0x3948dc;return db['User'][_0xa289('0xc1')]({'where':{'id':_0x4ff5c0[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x46a447,null))[_0xa289('0x37')](function(_0x4b1ec9){if(_0x4b1ec9){_0x48a96e=_0x4b1ec9;_0x5a1e0c[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0x12b')][_0xa289('0xc3')]);_0x5a1e0c[_0xa289('0x52')]=_['keys'](_0x4ff5c0['query']);_0x5a1e0c['filters']=_[_0xa289('0x4e')](_0x5a1e0c[_0xa289('0x4f')],_0x5a1e0c[_0xa289('0x52')]);_0x347ca1[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x5a1e0c['model'],qs[_0xa289('0x51')](_0x4ff5c0['query'][_0xa289('0x51')]));_0x347ca1[_0xa289('0x50')]=_0x347ca1[_0xa289('0x50')][_0xa289('0x53')]?_0x347ca1[_0xa289('0x50')]:_0x5a1e0c[_0xa289('0x4f')];_0x347ca1['order']=qs[_0xa289('0x57')](_0x4ff5c0[_0xa289('0x52')][_0xa289('0x57')]);_0x347ca1[_0xa289('0x58')]=qs['filters'](_['pick'](_0x4ff5c0[_0xa289('0x52')],_0x5a1e0c[_0xa289('0x4d')]));if(_0x4ff5c0[_0xa289('0x52')]['filter']){_0x347ca1[_0xa289('0x58')]=_[_0xa289('0x5a')](_0x347ca1[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x347ca1[_0xa289('0x50')],function(_0x5f212d){var _0x2f20be={};_0x2f20be[_0x5f212d]={'$like':'%'+_0x4ff5c0[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x2f20be;})});}_0x347ca1=_[_0xa289('0x5a')]({},_0x347ca1,_0x4ff5c0[_0xa289('0x5e')]);return _0x48a96e[_0xa289('0x12a')](_0x347ca1);}})[_0xa289('0x37')](function(_0x7c0b10){if(_0x7c0b10){_0x3948dc=_0x7c0b10[_0xa289('0x53')];if(!_0x4ff5c0[_0xa289('0x52')][_0xa289('0x54')](_0xa289('0x55'))){_0x347ca1[_0xa289('0x30')]=qs[_0xa289('0x30')](_0x4ff5c0[_0xa289('0x52')][_0xa289('0x30')]);_0x347ca1[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x4ff5c0[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x48a96e[_0xa289('0x12a')](_0x347ca1);}})[_0xa289('0x37')](function(_0x5993ed){if(_0x5993ed){return _0x5993ed?{'count':_0x3948dc,'rows':_0x5993ed}:null;}})['then'](respondWithResult(_0x46a447,null))[_0xa289('0x2a')](handleError(_0x46a447,null));};exports[_0xa289('0x12c')]=function(_0x56585c,_0x13ed69,_0x5b17c7){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x56585c[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x13ed69,null))[_0xa289('0x37')](function(_0x1b59a2){if(_0x1b59a2){return _0x1b59a2[_0xa289('0x12c')](_0x56585c[_0xa289('0x67')][_0xa289('0x69')],_[_0xa289('0x6a')](_0x56585c[_0xa289('0x67')],['ids','id'])||{});}})[_0xa289('0x37')](respondWithResult(_0x13ed69,null))[_0xa289('0x2a')](handleError(_0x13ed69,null));};exports[_0xa289('0x12d')]=function(_0x58dadf,_0x300b4d,_0x243ffa){var _0x11d699;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x58dadf[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x300b4d,null))[_0xa289('0x37')](function(_0x5a3135){if(_0x5a3135){return _0x5a3135[_0xa289('0x12d')](_0x58dadf[_0xa289('0x52')]['ids']);}})[_0xa289('0x37')](respondWithStatusCode(_0x300b4d,null))[_0xa289('0x2a')](handleError(_0x300b4d,null));};exports[_0xa289('0x12e')]=function(_0x4d7e66,_0x13e955,_0x1d5b43){var _0x496410={};var _0x554b68={};var _0x3969c0;var _0x7d5afa;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x4d7e66[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x13e955,null))[_0xa289('0x37')](function(_0x38dc99){if(_0x38dc99){_0x3969c0=_0x38dc99;_0x554b68[_0xa289('0x4f')]=_[_0xa289('0x4a')](db[_0xa289('0x12f')]['rawAttributes']);_0x554b68[_0xa289('0x52')]=_['keys'](_0x4d7e66[_0xa289('0x52')]);_0x554b68[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x554b68['model'],_0x554b68['query']);_0x496410[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x554b68[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x4d7e66[_0xa289('0x52')]['fields']));_0x496410[_0xa289('0x50')]=_0x496410['attributes'][_0xa289('0x53')]?_0x496410['attributes']:_0x554b68[_0xa289('0x4f')];_0x496410['order']=qs['sort'](_0x4d7e66[_0xa289('0x52')]['sort']);_0x496410[_0xa289('0x58')]=qs['filters'](_[_0xa289('0x59')](_0x4d7e66[_0xa289('0x52')],_0x554b68[_0xa289('0x4d')]));if(_0x4d7e66[_0xa289('0x52')][_0xa289('0x3f')]){_0x496410[_0xa289('0x58')]=_['merge'](_0x496410[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x496410[_0xa289('0x50')],function(_0xf4bdf5){var _0x958b91={};_0x958b91[_0xf4bdf5]={'$like':'%'+_0x4d7e66[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x958b91;})});}_0x496410=_[_0xa289('0x5a')]({},_0x496410,_0x4d7e66[_0xa289('0x5e')]);return _0x3969c0[_0xa289('0x12e')](_0x496410);}})[_0xa289('0x37')](function(_0x7c361b){if(_0x7c361b){_0x7d5afa=_0x7c361b[_0xa289('0x53')];if(!_0x4d7e66['query'][_0xa289('0x54')]('nolimit')){_0x496410[_0xa289('0x30')]=qs[_0xa289('0x30')](_0x4d7e66['query'][_0xa289('0x30')]);_0x496410[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x4d7e66[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x3969c0['getChatWebsites'](_0x496410);}})[_0xa289('0x37')](function(_0x3c462e){if(_0x3c462e){return _0x3c462e?{'count':_0x7d5afa,'rows':_0x3c462e}:null;}})[_0xa289('0x37')](respondWithResult(_0x13e955,null))[_0xa289('0x2a')](handleError(_0x13e955,null));};exports['addChatWebsites']=function(_0x3f3066,_0x3c56e2,_0x3db72c){return db[_0xa289('0x61')]['find']({'where':{'id':_0x3f3066[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x3c56e2,null))['then'](function(_0x33dc1a){if(_0x33dc1a){return _0x33dc1a['addChatWebsites'](_0x3f3066[_0xa289('0x67')]['ids'],_[_0xa289('0x6a')](_0x3f3066[_0xa289('0x67')],[_0xa289('0x69'),'id'])||{});}})[_0xa289('0x37')](respondWithResult(_0x3c56e2,null))['catch'](handleError(_0x3c56e2,null));};exports['removeChatWebsites']=function(_0x569881,_0x1106bc,_0x894a7d){var _0x16dd4e;return db['User'][_0xa289('0x43')]({'where':{'id':_0x569881[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x1106bc,null))[_0xa289('0x37')](function(_0x378e64){if(_0x378e64){return _0x378e64[_0xa289('0x130')](_0x569881['query'][_0xa289('0x69')]);}})[_0xa289('0x37')](respondWithStatusCode(_0x1106bc,null))['catch'](handleError(_0x1106bc,null));};exports[_0xa289('0x131')]=function(_0x123316,_0x3fdc1a,_0x32317f){var _0x517656={};var _0x2be274={};var _0x59d419;var _0x299139;return db[_0xa289('0x61')][_0xa289('0xc1')]({'where':{'id':_0x123316[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x3fdc1a,null))[_0xa289('0x37')](function(_0x42fe00){if(_0x42fe00){_0x59d419=_0x42fe00;_0x2be274['model']=_[_0xa289('0x4a')](db[_0xa289('0x132')][_0xa289('0xc3')]);_0x2be274['query']=_[_0xa289('0x4a')](_0x123316['query']);_0x2be274[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x2be274[_0xa289('0x4f')],_0x2be274['query']);_0x517656[_0xa289('0x50')]=_['intersection'](_0x2be274[_0xa289('0x4f')],qs[_0xa289('0x51')](_0x123316['query'][_0xa289('0x51')]));_0x517656[_0xa289('0x50')]=_0x517656[_0xa289('0x50')]['length']?_0x517656[_0xa289('0x50')]:_0x2be274[_0xa289('0x4f')];_0x517656[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x123316[_0xa289('0x52')]['sort']);_0x517656[_0xa289('0x58')]=qs['filters'](_[_0xa289('0x59')](_0x123316[_0xa289('0x52')],_0x2be274[_0xa289('0x4d')]));if(_0x123316[_0xa289('0x52')][_0xa289('0x3f')]){_0x517656[_0xa289('0x58')]=_['merge'](_0x517656[_0xa289('0x58')],{'$or':_[_0xa289('0x40')](_0x517656[_0xa289('0x50')],function(_0x42d416){var _0x25918b={};_0x25918b[_0x42d416]={'$like':'%'+_0x123316['query'][_0xa289('0x3f')]+'%'};return _0x25918b;})});}_0x517656=_['merge']({},_0x517656,_0x123316[_0xa289('0x5e')]);return _0x59d419[_0xa289('0x131')](_0x517656);}})[_0xa289('0x37')](function(_0x3d58a1){if(_0x3d58a1){_0x299139=_0x3d58a1[_0xa289('0x53')];if(!_0x123316[_0xa289('0x52')]['hasOwnProperty'](_0xa289('0x55'))){_0x517656[_0xa289('0x30')]=qs[_0xa289('0x30')](_0x123316[_0xa289('0x52')][_0xa289('0x30')]);_0x517656[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x123316[_0xa289('0x52')][_0xa289('0x2f')]);}return _0x59d419[_0xa289('0x131')](_0x517656);}})['then'](function(_0x57f69d){if(_0x57f69d){return _0x57f69d?{'count':_0x299139,'rows':_0x57f69d}:null;}})[_0xa289('0x37')](respondWithResult(_0x3fdc1a,null))[_0xa289('0x2a')](handleError(_0x3fdc1a,null));};exports[_0xa289('0x133')]=function(_0x377d57,_0x379ccf,_0x10b7e4){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x377d57[_0xa289('0x65')]['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x379ccf,null))[_0xa289('0x37')](function(_0x2eb348){if(_0x2eb348){return _0x2eb348[_0xa289('0x133')](_0x377d57[_0xa289('0x67')][_0xa289('0x69')],_[_0xa289('0x6a')](_0x377d57['body'],[_0xa289('0x69'),'id'])||{});}})[_0xa289('0x37')](respondWithResult(_0x379ccf,null))[_0xa289('0x2a')](handleError(_0x379ccf,null));};exports[_0xa289('0x134')]=function(_0xb6a4cc,_0x100f3c,_0x28ea1f){var _0x589cd8;return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0xb6a4cc['params']['id']}})[_0xa289('0x37')](handleEntityNotFound(_0x100f3c,null))[_0xa289('0x37')](function(_0x2fa445){if(_0x2fa445){return _0x2fa445[_0xa289('0x134')](_0xb6a4cc[_0xa289('0x52')]['ids']);}})['then'](respondWithStatusCode(_0x100f3c,null))['catch'](handleError(_0x100f3c,null));};exports[_0xa289('0x135')]=function(_0x98fc61,_0x51820f){var _0xa1c9c2={},_0x3fa417={},_0x20b591={'count':0x0,'rows':[]};var _0x445122=db[_0xa289('0x136')][_0xa289('0xc3')];_0x3fa417[_0xa289('0x4f')]=_['keys'](_0x445122);_0x3fa417[_0xa289('0x52')]=_[_0xa289('0x4a')](_0x98fc61[_0xa289('0x52')]);_0x3fa417[_0xa289('0x4d')]=_[_0xa289('0x4e')](_0x3fa417[_0xa289('0x4f')],_0x3fa417['query']);_0x3fa417['filters']=_['concat'](_0x3fa417[_0xa289('0x4d')],[_0xa289('0x137'),_0xa289('0x138'),_0xa289('0x139'),'$gte',_0xa289('0x13a'),'$lte','$ne','$eq',_0xa289('0x13b'),_0xa289('0x13c'),_0xa289('0x13d'),_0xa289('0x13e'),'$notIn',_0xa289('0x13f'),_0xa289('0x140'),_0xa289('0x141'),_0xa289('0x142'),_0xa289('0x13f'),_0xa289('0x143'),_0xa289('0x144'),_0xa289('0x145'),_0xa289('0x146')]);_0xa1c9c2[_0xa289('0x50')]=_[_0xa289('0x4e')](_0x3fa417[_0xa289('0x4f')],qs['fields'](_0x98fc61[_0xa289('0x52')][_0xa289('0x51')]));_0xa1c9c2[_0xa289('0x50')]=_0xa1c9c2[_0xa289('0x50')]['length']?_0xa1c9c2[_0xa289('0x50')]:_0x3fa417[_0xa289('0x4f')];if(!_0x98fc61['query'][_0xa289('0x54')](_0xa289('0x55'))){_0xa1c9c2[_0xa289('0x30')]=qs[_0xa289('0x30')](_0x98fc61[_0xa289('0x52')][_0xa289('0x30')]);_0xa1c9c2[_0xa289('0x2f')]=qs[_0xa289('0x2f')](_0x98fc61['query']['offset']);}_0xa1c9c2[_0xa289('0x56')]=qs[_0xa289('0x57')](_0x98fc61[_0xa289('0x52')][_0xa289('0x57')]);_0xa1c9c2[_0xa289('0x58')]=qs[_0xa289('0x4d')](_[_0xa289('0x59')](_0x98fc61[_0xa289('0x52')],_0x3fa417[_0xa289('0x4d')]));if(_0x98fc61[_0xa289('0x52')]['filter']){_0xa1c9c2[_0xa289('0x58')]=_[_0xa289('0x5a')](_0xa1c9c2['where'],{'$or':_[_0xa289('0x40')](_0xa1c9c2[_0xa289('0x50')],function(_0x1282b6){var _0x4a388e={};_0x4a388e[_0x1282b6]={'$like':'%'+_0x98fc61[_0xa289('0x52')][_0xa289('0x3f')]+'%'};return _0x4a388e;})});}_0xa1c9c2[_0xa289('0x58')]={'$and':[_0xa1c9c2[_0xa289('0x58')],{'$or':[{'UserId':_0x98fc61[_0xa289('0x65')]['id']},{'OwnerId':_0x98fc61['params']['id']}]}]};_0xa1c9c2=_['merge']({},_0xa1c9c2,_0x98fc61[_0xa289('0x5e')]);var _0x5057d2={'where':_0xa1c9c2[_0xa289('0x58')]};return db['CmHopper'][_0xa289('0x2e')](_0x5057d2)[_0xa289('0x37')](function(_0xada933){_0x20b591[_0xa289('0x2e')]=_0xada933;if(_0x98fc61['query']['includeAll']){_0xa1c9c2['include']=[{'attributes':['id',_0xa289('0x147'),_0xa289('0x148'),_0xa289('0xdd')],'model':db[_0xa289('0xc2')],'as':_0xa289('0x149')},{'attributes':['id',_0xa289('0x45'),'dialActive'],'model':db[_0xa289('0xad')],'as':_0xa289('0xcb')}];}return db['CmHopper']['findAll'](_0xa1c9c2);})['then'](function(_0x5b022a){_0x20b591[_0xa289('0x63')]=_0x5b022a;return _0x20b591;})[_0xa289('0x37')](respondWithFilteredResult(_0x51820f,_0xa1c9c2))[_0xa289('0x2a')](handleError(_0x51820f,null));};exports['getApiKey']=function(_0x48b403,_0x304c8d,_0x12e722){if(!_[_0xa289('0x71')](_0x48b403[_0xa289('0x6d')]['id'])&&(_0x48b403[_0xa289('0x6d')][_0xa289('0x44')]==_0xa289('0x6c')||_0x48b403[_0xa289('0x6d')][_0xa289('0x44')]==_0xa289('0x6d'))){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0x48b403[_0xa289('0x65')]['id']}})[_0xa289('0x37')](function(_0x1a2efc){var _0x392c3e=authService[_0xa289('0x14a')](_0x1a2efc);if(_0x392c3e)return _0x304c8d[_0xa289('0x2c')](0xc8)['json']({'api_key':_0x392c3e});else return _0x304c8d[_0xa289('0x2c')](0xcc)[_0xa289('0x32')]({'message':_0xa289('0x14b')});})[_0xa289('0x2a')](handleError(_0x304c8d,0x193));}else{return _0x304c8d[_0xa289('0x2c')](0x191)[_0xa289('0x32')]({'message':'You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.'});}};exports[_0xa289('0x14c')]=function(_0xd2e545,_0x320f68,_0x4e9502){var _0x304d0e;if(!_['isNil'](_0xd2e545[_0xa289('0x6d')]['id'])&&(_0xd2e545[_0xa289('0x6d')][_0xa289('0x44')]==_0xa289('0x6c')||_0xd2e545[_0xa289('0x6d')]['role']=='user')){return db['User'][_0xa289('0x43')]({'where':{'id':_0xd2e545[_0xa289('0x65')]['id']}})[_0xa289('0x37')](function(_0x54e970){return[_0x54e970,authService[_0xa289('0x14d')](_0x54e970)];})[_0xa289('0x37')](function(_0xa96f3a){_0x304d0e=_0xa96f3a;return db[_0xa289('0x61')][_0xa289('0x36')]({'apiKeyNonce':_0x304d0e[0x0]['apiKeyNonce'],'apiKeyIat':_0x304d0e[0x0][_0xa289('0x14e')]},{'where':{'id':_0xd2e545[_0xa289('0x65')]['id']}});})[_0xa289('0x37')](function(){return _0x320f68[_0xa289('0x2c')](0xc8)[_0xa289('0x32')]({'api_key':_0x304d0e[0x1]});})[_0xa289('0x2a')](handleError(_0x320f68,0x193));}else{return _0x320f68[_0xa289('0x2c')](0x191)[_0xa289('0x32')]({'message':_0xa289('0x14f')});}};exports[_0xa289('0x150')]=function(_0xa37328,_0x47c42e,_0x1f2805){if(!_[_0xa289('0x71')](_0xa37328[_0xa289('0x6d')]['id'])&&(_0xa37328[_0xa289('0x6d')][_0xa289('0x44')]==_0xa289('0x6c')||_0xa37328['user'][_0xa289('0x44')]==_0xa289('0x6d'))){return db[_0xa289('0x61')][_0xa289('0x43')]({'where':{'id':_0xa37328[_0xa289('0x65')]['id']}})['then'](handleEntityNotFound(_0x47c42e,null))[_0xa289('0x37')](function(_0x3a5825){if(_0x3a5825&&_0x3a5825[_0xa289('0x151')]&&_0x3a5825[_0xa289('0x14e')])return _0x3a5825;else throw{'message':_0xa289('0x152')};})[_0xa289('0x37')](function(_0x38248a){return db[_0xa289('0x61')][_0xa289('0x36')]({'apiKeyNonce':null,'apiKeyIat':null},{'where':{'id':_0xa37328[_0xa289('0x65')]['id']}});})[_0xa289('0x37')](respondWithStatusCode(_0x47c42e,0xc8))[_0xa289('0x2a')](handleError(_0x47c42e,0x193));}else{return _0x47c42e['status'](0x191)[_0xa289('0x32')]({'message':'You\x20don\x27t\x20have\x20sufficient\x20privelages\x20to\x20access\x20this\x20resource.'});}};
\ No newline at end of file
index 1ab0ca3..53930e3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1cb9=['exports','events','User','setMaxListeners','save','update','emit','hasOwnProperty','hook'];(function(_0x5dbc4a,_0x590e7b){var _0x34106d=function(_0x4980bd){while(--_0x4980bd){_0x5dbc4a['push'](_0x5dbc4a['shift']());}};_0x34106d(++_0x590e7b);}(_0x1cb9,0x14e));var _0x91cb=function(_0x4bea52,_0x44cb00){_0x4bea52=_0x4bea52-0x0;var _0x4d804f=_0x1cb9[_0x4bea52];return _0x4d804f;};'use strict';var EventEmitter=require(_0x91cb('0x0'));var User=require('../../mysqldb')['db'][_0x91cb('0x1')];var UserEvents=new EventEmitter();UserEvents[_0x91cb('0x2')](0x0);var events={'afterCreate':_0x91cb('0x3'),'afterUpdate':_0x91cb('0x4'),'afterDestroy':'remove'};function emitEvent(_0x42910d){return function(_0x2b7314,_0x5652cd,_0x17c21c){UserEvents[_0x91cb('0x5')](_0x42910d+':'+_0x2b7314['id'],_0x2b7314);UserEvents[_0x91cb('0x5')](_0x42910d,_0x2b7314);_0x17c21c(null);};}for(var e in events){if(events[_0x91cb('0x6')](e)){var event=events[e];User[_0x91cb('0x7')](e,emitEvent(event));}}module[_0x91cb('0x8')]=UserEvents;
\ No newline at end of file
+var _0x7a54=['User','save','update','emit','hasOwnProperty','exports','events','../../mysqldb'];(function(_0x16897b,_0xc869bf){var _0x409f63=function(_0x384fc3){while(--_0x384fc3){_0x16897b['push'](_0x16897b['shift']());}};_0x409f63(++_0xc869bf);}(_0x7a54,0x106));var _0x47a5=function(_0x11e776,_0x449922){_0x11e776=_0x11e776-0x0;var _0x3fafb6=_0x7a54[_0x11e776];return _0x3fafb6;};'use strict';var EventEmitter=require(_0x47a5('0x0'));var User=require(_0x47a5('0x1'))['db'][_0x47a5('0x2')];var UserEvents=new EventEmitter();UserEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x47a5('0x3'),'afterUpdate':_0x47a5('0x4'),'afterDestroy':'remove'};function emitEvent(_0x5f7f12){return function(_0x11bf85,_0x2a1a7e,_0x3717e1){UserEvents[_0x47a5('0x5')](_0x5f7f12+':'+_0x11bf85['id'],_0x11bf85);UserEvents['emit'](_0x5f7f12,_0x11bf85);_0x3717e1(null);};}for(var e in events){if(events[_0x47a5('0x6')](e)){var event=events[e];User['hook'](e,emitEvent(event));}}module[_0x47a5('0x7')]=UserEvents;
\ No newline at end of file
index de882ed..28f549f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['findAll','internal','concat','catch','exports','define','User','users','utf8','utf8_bin','updateMd5Password','changed','updatePassword','bulkCreate','chanspy','then','VoiceExtension','destroy','encryptPassword','function','Missing\x20Callback','randomBytes','toString','salt','base64','sha1','pbkdf2','indexOf','Invalid\x20password','makeSalt','md5secret','bluebird','crypto','util','./user.attributes','length','context','from-sip','system','format','%s%s','prefix','record','push','merge','auth','Authenticate','password','ChanSpy','SIP/%s,%s','name','options','wav','gsm','Set','CDR(type)=internal','extensionMonitor','includes','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','Dial','SIP/%s,,tTxXU(xcally-mixmonitor-context)','SIP/%s,,tTxX','Hangup','priority','defaults'];(function(_0x5129f4,_0x26380b){var _0x3b1d9a=function(_0x59ea05){while(--_0x59ea05){_0x5129f4['push'](_0x5129f4['shift']());}};_0x3b1d9a(++_0x26380b);}(_0xa9e0,0x123));var _0x0a9e=function(_0x55f8b4,_0x43f30d){_0x55f8b4=_0x55f8b4-0x0;var _0x2475f9=_0xa9e0[_0x55f8b4];return _0x2475f9;};'use strict';var BPromise=require(_0x0a9e('0x0'));var crypto=require(_0x0a9e('0x1'));var util=require(_0x0a9e('0x2'));var md5=require('md5');var _=require('lodash');var attributes=require(_0x0a9e('0x3'));var authTypes=['google'];var validatePresenceOf=function(_0x333808){return _0x333808&&_0x333808[_0x0a9e('0x4')];};var getChanSpyApplications=function(_0x2ab90b,_0x991246,_0x981158){var _0x57b080={'context':_0x2ab90b[_0x0a9e('0x5')]||_0x0a9e('0x6'),'type':_0x0a9e('0x7'),'isApp':![],'UserId':_0x2ab90b['id']};var _0x5f41ea=[];for(var _0x503809=0x0,_0xe42b77=0x1;_0x503809<_0x981158['length'];_0x503809++,_0xe42b77=0x1){var _0x52cace={'exten':util[_0x0a9e('0x8')](_0x0a9e('0x9'),_0x981158[_0x503809][_0x0a9e('0xa')],_0x991246),'ChanSpyId':_0x981158[_0x503809]['id']};if(_0x981158[_0x503809][_0x0a9e('0xb')]){_0x5f41ea[_0x0a9e('0xc')](_[_0x0a9e('0xd')]({'app':'MixMonitor','appdata':util['format']('${UNIQUEID}.%s,ab',_0x981158[_0x503809]['recordingFormat']),'priority':_0xe42b77++},_0x57b080,_0x52cace));}if(_0x981158[_0x503809][_0x0a9e('0xe')]){_0x5f41ea[_0x0a9e('0xc')](_[_0x0a9e('0xd')]({'app':_0x0a9e('0xf'),'appdata':_0x981158[_0x503809][_0x0a9e('0x10')],'priority':_0xe42b77++},_0x57b080,_0x52cace));}_0x5f41ea[_0x0a9e('0xc')](_['merge']({'app':_0x0a9e('0x11'),'appdata':util[_0x0a9e('0x8')](_0x0a9e('0x12'),_0x2ab90b[_0x0a9e('0x13')],_0x981158[_0x503809][_0x0a9e('0x14')]?_0x981158[_0x503809][_0x0a9e('0x14')]['join'](''):''),'priority':_0xe42b77++},_0x57b080,_0x52cace));if(_0x981158[_0x503809][_0x0a9e('0xb')]){_0x5f41ea['push'](_[_0x0a9e('0xd')]({'app':'StopMixMonitor','priority':_0xe42b77++},_0x57b080,_0x52cace));}}return _0x5f41ea;};var getUserApplications=function(_0x16033c,_0x12066b){var _0x48f32d=[_0x0a9e('0x15'),'WAV',_0x0a9e('0x16')];var _0x478723={'context':_0x16033c[_0x0a9e('0x5')]||_0x0a9e('0x6'),'exten':_0x12066b,'type':_0x0a9e('0x7'),'isApp':![],'UserId':_0x16033c['id']};var _0x2eb11f=[{'app':_0x0a9e('0x17'),'appdata':_0x0a9e('0x18')}];if(_0x16033c[_0x0a9e('0x19')]&&_[_0x0a9e('0x1a')](_0x48f32d,_0x16033c[_0x0a9e('0x19')])){_0x2eb11f[_0x0a9e('0xc')]({'app':'Set','appdata':_0x0a9e('0x1b')});_0x2eb11f[_0x0a9e('0xc')]({'app':'Set','appdata':util[_0x0a9e('0x8')]('_XCALLY_MIXMONITOR_FORMAT=%s',_0x16033c['extensionMonitor'])});_0x2eb11f[_0x0a9e('0xc')]({'app':_0x0a9e('0x1c'),'appdata':util[_0x0a9e('0x8')](_0x0a9e('0x1d'),_0x16033c['name'])});}else{_0x2eb11f[_0x0a9e('0xc')]({'app':_0x0a9e('0x1c'),'appdata':util[_0x0a9e('0x8')](_0x0a9e('0x1e'),_0x16033c[_0x0a9e('0x13')])});}_0x2eb11f[_0x0a9e('0xc')]({'app':_0x0a9e('0x1f')});for(var _0x5ea472=0x0;_0x5ea472<_0x2eb11f['length'];_0x5ea472++){_0x2eb11f[_0x5ea472][_0x0a9e('0x20')]=_0x5ea472+0x1;_0x2eb11f[_0x5ea472]=_[_0x0a9e('0x21')](_0x2eb11f[_0x5ea472],_0x478723);}return _0x2eb11f;};var getChanSpyPromise=function(_0x40c424,_0x33161b){return new BPromise(function(_0x526cf3,_0x384319){return _0x40c424['VoiceChanSpy'][_0x0a9e('0x22')]()['then'](function(_0x1dc186){if(_0x1dc186){var _0x34dc65=getChanSpyApplications(_0x33161b,_0x33161b[_0x0a9e('0x23')],_0x1dc186);if(_0x33161b[_0x0a9e('0x23')]!=_0x33161b[_0x0a9e('0x13')]){_0x34dc65=_0x34dc65[_0x0a9e('0x24')](getChanSpyApplications(_0x33161b,_0x33161b[_0x0a9e('0x13')],_0x1dc186));}return _0x526cf3(_0x34dc65);}return _0x526cf3([]);})[_0x0a9e('0x25')](function(_0x5a101a){_0x384319(_0x5a101a);});});};module[_0x0a9e('0x26')]=function(_0x468813,_0x2b1f27){var _0x2ec755=_0x468813['models'];return _0x468813[_0x0a9e('0x27')](_0x0a9e('0x28'),attributes,{'tableName':_0x0a9e('0x29'),'charset':_0x0a9e('0x2a'),'collate':_0x0a9e('0x2b'),'hooks':{'beforeCreate':function(_0x563b45,_0x296f41,_0x2e8759){_0x563b45[_0x0a9e('0x2c')]();_0x563b45['updatePassword'](_0x2e8759);},'beforeUpdate':function(_0x426950,_0x5d1e0e,_0x2407f9){if(_0x426950[_0x0a9e('0x2d')](_0x0a9e('0x10'))){_0x426950[_0x0a9e('0x2c')]();return _0x426950[_0x0a9e('0x2e')](_0x2407f9);}_0x2407f9();},'afterCreate':function(_0x5180f1,_0x66c1d2,_0x46f0a5){var _0x40cb85=getUserApplications(_0x5180f1,_0x5180f1[_0x0a9e('0x23')]);if(_0x5180f1[_0x0a9e('0x23')]!=_0x5180f1[_0x0a9e('0x13')]){_0x40cb85=_0x40cb85[_0x0a9e('0x24')](getUserApplications(_0x5180f1,_0x5180f1[_0x0a9e('0x13')]));}return _0x2ec755['VoiceExtension'][_0x0a9e('0x2f')](_0x40cb85)['then'](function(){if(_0x5180f1[_0x0a9e('0x30')]){return getChanSpyPromise(_0x2ec755,_0x5180f1);}})[_0x0a9e('0x31')](function(_0x2b7e7f){if(_0x2b7e7f&&_0x2b7e7f[_0x0a9e('0x4')]){return _0x2ec755['VoiceExtension'][_0x0a9e('0x2f')](_0x2b7e7f);}})[_0x0a9e('0x31')](function(){_0x46f0a5();})[_0x0a9e('0x25')](function(_0x15de0e){_0x46f0a5(_0x15de0e);});},'afterUpdate':function(_0x4853b1,_0x54135e,_0x1e8694){return BPromise['resolve']()[_0x0a9e('0x31')](function(){if(_0x4853b1[_0x0a9e('0x2d')](_0x0a9e('0x30'))||_0x4853b1[_0x0a9e('0x2d')]('context')){return _0x2ec755[_0x0a9e('0x32')][_0x0a9e('0x33')]({'where':{'UserId':_0x4853b1['id'],'type':_0x0a9e('0x7'),'ChanSpyId':{'$ne':null}}})['then'](function(){if(_0x4853b1[_0x0a9e('0x30')]){return getChanSpyPromise(_0x2ec755,_0x4853b1)[_0x0a9e('0x31')](function(_0x289467){if(_0x289467&&_0x289467['length']){return _0x2ec755['VoiceExtension'][_0x0a9e('0x2f')](_0x289467);}});}});}})[_0x0a9e('0x31')](function(){if(_0x4853b1['changed'](_0x0a9e('0x19'))||_0x4853b1[_0x0a9e('0x2d')](_0x0a9e('0x5'))){return _0x2ec755[_0x0a9e('0x32')]['destroy']({'where':{'UserId':_0x4853b1['id'],'type':'system','ChanSpyId':null}})[_0x0a9e('0x31')](function(){var _0x45b3d0=getUserApplications(_0x4853b1,_0x4853b1['internal']);if(_0x4853b1[_0x0a9e('0x23')]!=_0x4853b1[_0x0a9e('0x13')]){_0x45b3d0=_0x45b3d0[_0x0a9e('0x24')](getUserApplications(_0x4853b1,_0x4853b1['name']));}return _0x2ec755[_0x0a9e('0x32')][_0x0a9e('0x2f')](_0x45b3d0);});}})[_0x0a9e('0x31')](function(){_0x1e8694();})[_0x0a9e('0x25')](function(_0x13cb1f){_0x1e8694(_0x13cb1f);});},'afterDestroy':function(_0xeaa5e5,_0x2881b3){return _0x2ec755[_0x0a9e('0x32')][_0x0a9e('0x33')]({'where':{'UserId':_0xeaa5e5['id'],'type':_0x0a9e('0x7')}});}},'instanceMethods':{'authenticate':function(_0x2c3711,_0x148007){if(!_0x148007){return this[_0x0a9e('0x10')]===this[_0x0a9e('0x34')](_0x2c3711);}var _0x37f6cc=this;this['encryptPassword'](_0x2c3711,function(_0x52628e,_0x473fdc){if(_0x52628e){_0x148007(_0x52628e);}if(_0x37f6cc[_0x0a9e('0x10')]===_0x473fdc){_0x148007(null,!![]);}else{_0x148007(null,![]);}});},'makeSalt':function(_0x405c8f,_0x315881){var _0x1a69dd=0x10;if(typeof arguments[0x0]===_0x0a9e('0x35')){_0x315881=arguments[0x0];_0x405c8f=_0x1a69dd;}else if(typeof arguments[0x1]===_0x0a9e('0x35')){_0x315881=arguments[0x1];}else{throw new Error(_0x0a9e('0x36'));}if(!_0x405c8f){_0x405c8f=_0x1a69dd;}return crypto[_0x0a9e('0x37')](_0x405c8f,function(_0x25c6e6,_0x2c2cb0){if(_0x25c6e6){_0x315881(_0x25c6e6);}return _0x315881(null,_0x2c2cb0[_0x0a9e('0x38')]('base64'));});},'encryptPassword':function(_0x117c99,_0x138b8b){if(!_0x117c99||!this[_0x0a9e('0x39')]){return _0x138b8b?_0x138b8b(null):null;}var _0xfbd5ad=0x2710;var _0x2e8caf=0x40;var _0xbe9d19=new Buffer(this[_0x0a9e('0x39')],_0x0a9e('0x3a'));if(!_0x138b8b){return crypto['pbkdf2Sync'](_0x117c99,_0xbe9d19,_0xfbd5ad,_0x2e8caf,_0x0a9e('0x3b'))['toString'](_0x0a9e('0x3a'));}return crypto[_0x0a9e('0x3c')](_0x117c99,_0xbe9d19,_0xfbd5ad,_0x2e8caf,_0x0a9e('0x3b'),function(_0x562fb4,_0x14bec2){if(_0x562fb4){_0x138b8b(_0x562fb4);}return _0x138b8b(null,_0x14bec2[_0x0a9e('0x38')](_0x0a9e('0x3a')));});},'updatePassword':function(_0x34aa5a){if(!this[_0x0a9e('0x10')]){return _0x34aa5a(null);}if(!validatePresenceOf(this[_0x0a9e('0x10')])&&authTypes[_0x0a9e('0x3d')](this['provider'])===-0x1){_0x34aa5a(new Error(_0x0a9e('0x3e')));}var _0x1bde3c=this;this[_0x0a9e('0x3f')](function(_0x16f976,_0x409789){if(_0x16f976){return _0x34aa5a(_0x16f976);}_0x1bde3c[_0x0a9e('0x39')]=_0x409789;_0x1bde3c[_0x0a9e('0x34')](_0x1bde3c[_0x0a9e('0x10')],function(_0x34febd,_0x58a5c2){if(_0x34febd){_0x34aa5a(_0x34febd);}_0x1bde3c[_0x0a9e('0x10')]=_0x58a5c2;_0x34aa5a(null);});});},'updateMd5Password':function(){this[_0x0a9e('0x40')]=md5(this['name']+':asterisk:'+this['password']);return this[_0x0a9e('0x40')];}}});};
\ No newline at end of file
+var _0xa9e0=['findAll','internal','concat','catch','exports','define','User','users','utf8','utf8_bin','updateMd5Password','changed','updatePassword','bulkCreate','chanspy','then','VoiceExtension','destroy','encryptPassword','function','Missing\x20Callback','randomBytes','toString','salt','base64','sha1','pbkdf2','indexOf','Invalid\x20password','makeSalt','md5secret','bluebird','crypto','util','./user.attributes','length','context','from-sip','system','format','%s%s','prefix','record','push','merge','auth','Authenticate','password','ChanSpy','SIP/%s,%s','name','options','wav','gsm','Set','CDR(type)=internal','extensionMonitor','includes','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','Dial','SIP/%s,,tTxXU(xcally-mixmonitor-context)','SIP/%s,,tTxX','Hangup','priority','defaults'];(function(_0x31a447,_0x125cb6){var _0x317e8a=function(_0x3841c4){while(--_0x3841c4){_0x31a447['push'](_0x31a447['shift']());}};_0x317e8a(++_0x125cb6);}(_0xa9e0,0x123));var _0x0a9e=function(_0x220dbb,_0x99328d){_0x220dbb=_0x220dbb-0x0;var _0x2b77de=_0xa9e0[_0x220dbb];return _0x2b77de;};'use strict';var BPromise=require(_0x0a9e('0x0'));var crypto=require(_0x0a9e('0x1'));var util=require(_0x0a9e('0x2'));var md5=require('md5');var _=require('lodash');var attributes=require(_0x0a9e('0x3'));var authTypes=['google'];var validatePresenceOf=function(_0x333808){return _0x333808&&_0x333808[_0x0a9e('0x4')];};var getChanSpyApplications=function(_0x2ab90b,_0x991246,_0x981158){var _0x57b080={'context':_0x2ab90b[_0x0a9e('0x5')]||_0x0a9e('0x6'),'type':_0x0a9e('0x7'),'isApp':![],'UserId':_0x2ab90b['id']};var _0x5f41ea=[];for(var _0x503809=0x0,_0xe42b77=0x1;_0x503809<_0x981158['length'];_0x503809++,_0xe42b77=0x1){var _0x52cace={'exten':util[_0x0a9e('0x8')](_0x0a9e('0x9'),_0x981158[_0x503809][_0x0a9e('0xa')],_0x991246),'ChanSpyId':_0x981158[_0x503809]['id']};if(_0x981158[_0x503809][_0x0a9e('0xb')]){_0x5f41ea[_0x0a9e('0xc')](_[_0x0a9e('0xd')]({'app':'MixMonitor','appdata':util['format']('${UNIQUEID}.%s,ab',_0x981158[_0x503809]['recordingFormat']),'priority':_0xe42b77++},_0x57b080,_0x52cace));}if(_0x981158[_0x503809][_0x0a9e('0xe')]){_0x5f41ea[_0x0a9e('0xc')](_[_0x0a9e('0xd')]({'app':_0x0a9e('0xf'),'appdata':_0x981158[_0x503809][_0x0a9e('0x10')],'priority':_0xe42b77++},_0x57b080,_0x52cace));}_0x5f41ea[_0x0a9e('0xc')](_['merge']({'app':_0x0a9e('0x11'),'appdata':util[_0x0a9e('0x8')](_0x0a9e('0x12'),_0x2ab90b[_0x0a9e('0x13')],_0x981158[_0x503809][_0x0a9e('0x14')]?_0x981158[_0x503809][_0x0a9e('0x14')]['join'](''):''),'priority':_0xe42b77++},_0x57b080,_0x52cace));if(_0x981158[_0x503809][_0x0a9e('0xb')]){_0x5f41ea['push'](_[_0x0a9e('0xd')]({'app':'StopMixMonitor','priority':_0xe42b77++},_0x57b080,_0x52cace));}}return _0x5f41ea;};var getUserApplications=function(_0x16033c,_0x12066b){var _0x48f32d=[_0x0a9e('0x15'),'WAV',_0x0a9e('0x16')];var _0x478723={'context':_0x16033c[_0x0a9e('0x5')]||_0x0a9e('0x6'),'exten':_0x12066b,'type':_0x0a9e('0x7'),'isApp':![],'UserId':_0x16033c['id']};var _0x2eb11f=[{'app':_0x0a9e('0x17'),'appdata':_0x0a9e('0x18')}];if(_0x16033c[_0x0a9e('0x19')]&&_[_0x0a9e('0x1a')](_0x48f32d,_0x16033c[_0x0a9e('0x19')])){_0x2eb11f[_0x0a9e('0xc')]({'app':'Set','appdata':_0x0a9e('0x1b')});_0x2eb11f[_0x0a9e('0xc')]({'app':'Set','appdata':util[_0x0a9e('0x8')]('_XCALLY_MIXMONITOR_FORMAT=%s',_0x16033c['extensionMonitor'])});_0x2eb11f[_0x0a9e('0xc')]({'app':_0x0a9e('0x1c'),'appdata':util[_0x0a9e('0x8')](_0x0a9e('0x1d'),_0x16033c['name'])});}else{_0x2eb11f[_0x0a9e('0xc')]({'app':_0x0a9e('0x1c'),'appdata':util[_0x0a9e('0x8')](_0x0a9e('0x1e'),_0x16033c[_0x0a9e('0x13')])});}_0x2eb11f[_0x0a9e('0xc')]({'app':_0x0a9e('0x1f')});for(var _0x5ea472=0x0;_0x5ea472<_0x2eb11f['length'];_0x5ea472++){_0x2eb11f[_0x5ea472][_0x0a9e('0x20')]=_0x5ea472+0x1;_0x2eb11f[_0x5ea472]=_[_0x0a9e('0x21')](_0x2eb11f[_0x5ea472],_0x478723);}return _0x2eb11f;};var getChanSpyPromise=function(_0x40c424,_0x33161b){return new BPromise(function(_0x526cf3,_0x384319){return _0x40c424['VoiceChanSpy'][_0x0a9e('0x22')]()['then'](function(_0x1dc186){if(_0x1dc186){var _0x34dc65=getChanSpyApplications(_0x33161b,_0x33161b[_0x0a9e('0x23')],_0x1dc186);if(_0x33161b[_0x0a9e('0x23')]!=_0x33161b[_0x0a9e('0x13')]){_0x34dc65=_0x34dc65[_0x0a9e('0x24')](getChanSpyApplications(_0x33161b,_0x33161b[_0x0a9e('0x13')],_0x1dc186));}return _0x526cf3(_0x34dc65);}return _0x526cf3([]);})[_0x0a9e('0x25')](function(_0x5a101a){_0x384319(_0x5a101a);});});};module[_0x0a9e('0x26')]=function(_0x468813,_0x2b1f27){var _0x2ec755=_0x468813['models'];return _0x468813[_0x0a9e('0x27')](_0x0a9e('0x28'),attributes,{'tableName':_0x0a9e('0x29'),'charset':_0x0a9e('0x2a'),'collate':_0x0a9e('0x2b'),'hooks':{'beforeCreate':function(_0x563b45,_0x296f41,_0x2e8759){_0x563b45[_0x0a9e('0x2c')]();_0x563b45['updatePassword'](_0x2e8759);},'beforeUpdate':function(_0x426950,_0x5d1e0e,_0x2407f9){if(_0x426950[_0x0a9e('0x2d')](_0x0a9e('0x10'))){_0x426950[_0x0a9e('0x2c')]();return _0x426950[_0x0a9e('0x2e')](_0x2407f9);}_0x2407f9();},'afterCreate':function(_0x5180f1,_0x66c1d2,_0x46f0a5){var _0x40cb85=getUserApplications(_0x5180f1,_0x5180f1[_0x0a9e('0x23')]);if(_0x5180f1[_0x0a9e('0x23')]!=_0x5180f1[_0x0a9e('0x13')]){_0x40cb85=_0x40cb85[_0x0a9e('0x24')](getUserApplications(_0x5180f1,_0x5180f1[_0x0a9e('0x13')]));}return _0x2ec755['VoiceExtension'][_0x0a9e('0x2f')](_0x40cb85)['then'](function(){if(_0x5180f1[_0x0a9e('0x30')]){return getChanSpyPromise(_0x2ec755,_0x5180f1);}})[_0x0a9e('0x31')](function(_0x2b7e7f){if(_0x2b7e7f&&_0x2b7e7f[_0x0a9e('0x4')]){return _0x2ec755['VoiceExtension'][_0x0a9e('0x2f')](_0x2b7e7f);}})[_0x0a9e('0x31')](function(){_0x46f0a5();})[_0x0a9e('0x25')](function(_0x15de0e){_0x46f0a5(_0x15de0e);});},'afterUpdate':function(_0x4853b1,_0x54135e,_0x1e8694){return BPromise['resolve']()[_0x0a9e('0x31')](function(){if(_0x4853b1[_0x0a9e('0x2d')](_0x0a9e('0x30'))||_0x4853b1[_0x0a9e('0x2d')]('context')){return _0x2ec755[_0x0a9e('0x32')][_0x0a9e('0x33')]({'where':{'UserId':_0x4853b1['id'],'type':_0x0a9e('0x7'),'ChanSpyId':{'$ne':null}}})['then'](function(){if(_0x4853b1[_0x0a9e('0x30')]){return getChanSpyPromise(_0x2ec755,_0x4853b1)[_0x0a9e('0x31')](function(_0x289467){if(_0x289467&&_0x289467['length']){return _0x2ec755['VoiceExtension'][_0x0a9e('0x2f')](_0x289467);}});}});}})[_0x0a9e('0x31')](function(){if(_0x4853b1['changed'](_0x0a9e('0x19'))||_0x4853b1[_0x0a9e('0x2d')](_0x0a9e('0x5'))){return _0x2ec755[_0x0a9e('0x32')]['destroy']({'where':{'UserId':_0x4853b1['id'],'type':'system','ChanSpyId':null}})[_0x0a9e('0x31')](function(){var _0x45b3d0=getUserApplications(_0x4853b1,_0x4853b1['internal']);if(_0x4853b1[_0x0a9e('0x23')]!=_0x4853b1[_0x0a9e('0x13')]){_0x45b3d0=_0x45b3d0[_0x0a9e('0x24')](getUserApplications(_0x4853b1,_0x4853b1['name']));}return _0x2ec755[_0x0a9e('0x32')][_0x0a9e('0x2f')](_0x45b3d0);});}})[_0x0a9e('0x31')](function(){_0x1e8694();})[_0x0a9e('0x25')](function(_0x13cb1f){_0x1e8694(_0x13cb1f);});},'afterDestroy':function(_0xeaa5e5,_0x2881b3){return _0x2ec755[_0x0a9e('0x32')][_0x0a9e('0x33')]({'where':{'UserId':_0xeaa5e5['id'],'type':_0x0a9e('0x7')}});}},'instanceMethods':{'authenticate':function(_0x2c3711,_0x148007){if(!_0x148007){return this[_0x0a9e('0x10')]===this[_0x0a9e('0x34')](_0x2c3711);}var _0x37f6cc=this;this['encryptPassword'](_0x2c3711,function(_0x52628e,_0x473fdc){if(_0x52628e){_0x148007(_0x52628e);}if(_0x37f6cc[_0x0a9e('0x10')]===_0x473fdc){_0x148007(null,!![]);}else{_0x148007(null,![]);}});},'makeSalt':function(_0x405c8f,_0x315881){var _0x1a69dd=0x10;if(typeof arguments[0x0]===_0x0a9e('0x35')){_0x315881=arguments[0x0];_0x405c8f=_0x1a69dd;}else if(typeof arguments[0x1]===_0x0a9e('0x35')){_0x315881=arguments[0x1];}else{throw new Error(_0x0a9e('0x36'));}if(!_0x405c8f){_0x405c8f=_0x1a69dd;}return crypto[_0x0a9e('0x37')](_0x405c8f,function(_0x25c6e6,_0x2c2cb0){if(_0x25c6e6){_0x315881(_0x25c6e6);}return _0x315881(null,_0x2c2cb0[_0x0a9e('0x38')]('base64'));});},'encryptPassword':function(_0x117c99,_0x138b8b){if(!_0x117c99||!this[_0x0a9e('0x39')]){return _0x138b8b?_0x138b8b(null):null;}var _0xfbd5ad=0x2710;var _0x2e8caf=0x40;var _0xbe9d19=new Buffer(this[_0x0a9e('0x39')],_0x0a9e('0x3a'));if(!_0x138b8b){return crypto['pbkdf2Sync'](_0x117c99,_0xbe9d19,_0xfbd5ad,_0x2e8caf,_0x0a9e('0x3b'))['toString'](_0x0a9e('0x3a'));}return crypto[_0x0a9e('0x3c')](_0x117c99,_0xbe9d19,_0xfbd5ad,_0x2e8caf,_0x0a9e('0x3b'),function(_0x562fb4,_0x14bec2){if(_0x562fb4){_0x138b8b(_0x562fb4);}return _0x138b8b(null,_0x14bec2[_0x0a9e('0x38')](_0x0a9e('0x3a')));});},'updatePassword':function(_0x34aa5a){if(!this[_0x0a9e('0x10')]){return _0x34aa5a(null);}if(!validatePresenceOf(this[_0x0a9e('0x10')])&&authTypes[_0x0a9e('0x3d')](this['provider'])===-0x1){_0x34aa5a(new Error(_0x0a9e('0x3e')));}var _0x1bde3c=this;this[_0x0a9e('0x3f')](function(_0x16f976,_0x409789){if(_0x16f976){return _0x34aa5a(_0x16f976);}_0x1bde3c[_0x0a9e('0x39')]=_0x409789;_0x1bde3c[_0x0a9e('0x34')](_0x1bde3c[_0x0a9e('0x10')],function(_0x34febd,_0x58a5c2){if(_0x34febd){_0x34aa5a(_0x34febd);}_0x1bde3c[_0x0a9e('0x10')]=_0x58a5c2;_0x34aa5a(null);});});},'updateMd5Password':function(){this[_0x0a9e('0x40')]=md5(this['name']+':asterisk:'+this['password']);return this[_0x0a9e('0x40')];}}});};
\ No newline at end of file
index b0afece..08e769e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f2f=['set','%s%s','Pause','all','LogoutUser','findOne','destroy','LoginUser','mobile','agent','../../config/license/util','getLicense','agents','Maximum\x20login\x20has\x20been\x20reached','getVoiceQueues','loginInPause','UserVoiceQueue.penalty','LOGIN','callysquare','merge','LOGININPAUSE','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','register','then','User,\x20%s,\x20%s','request\x20sent','debug','User,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','User','findAll','options','raw','where','attributes','limit','include','map','model','GetUser','find','ShowUser','PauseUser','name','role','internal','interface','UserVoiceQueueRt','update','PAUSE','length','format','YYYY-MM-DD\x20HH:mm:ss','updateAttributes','getChannels','forEach','push','isNil','SIP/%s','body','type','DEFAULT\x20PAUSE','MemberReport','bulkCreate','isValidChannel','channel','Unknown\x20channel','voice','system','mail','chat','fax','openchannel'];(function(_0x525467,_0x283a14){var _0x1e0e02=function(_0x1c64e5){while(--_0x1c64e5){_0x525467['push'](_0x525467['shift']());}};_0x1e0e02(++_0x283a14);}(_0x5f2f,0x73));var _0xf5f2=function(_0x17f2b7,_0x32a8b0){_0x17f2b7=_0x17f2b7-0x0;var _0x4164f6=_0x5f2f[_0x17f2b7];return _0x4164f6;};'use strict';var _=require(_0xf5f2('0x0'));var util=require(_0xf5f2('0x1'));var moment=require(_0xf5f2('0x2'));var BPromise=require(_0xf5f2('0x3'));var rs=require(_0xf5f2('0x4'));var fs=require('fs');var Redis=require(_0xf5f2('0x5'));var db=require(_0xf5f2('0x6'))['db'];var utils=require(_0xf5f2('0x7'));var logger=require('../../config/logger')('rpc');var config=require(_0xf5f2('0x8'));var jayson=require(_0xf5f2('0x9'));var client=jayson[_0xf5f2('0xa')][_0xf5f2('0xb')]({'port':0x232a});config[_0xf5f2('0xc')]=_[_0xf5f2('0xd')](config['redis'],{'host':_0xf5f2('0xe'),'port':0x18eb});var socket=require(_0xf5f2('0xf'))(new Redis(config[_0xf5f2('0xc')]));require('./user.socket')[_0xf5f2('0x10')](socket);function respondWithRpcPromise(_0x15dd7c,_0x218ae3,_0x4e0e6b){return new BPromise(function(_0x977a59,_0x4ebbbe){return client['request'](_0x15dd7c,_0x4e0e6b)[_0xf5f2('0x11')](function(_0x151aba){logger['info'](_0xf5f2('0x12'),_0x218ae3,_0xf5f2('0x13'));logger[_0xf5f2('0x14')](_0xf5f2('0x15'),_0x218ae3,_0xf5f2('0x13'),JSON[_0xf5f2('0x16')](_0x151aba));if(_0x151aba['error']){if(_0x151aba[_0xf5f2('0x17')][_0xf5f2('0x18')]===0x1f4){logger[_0xf5f2('0x17')](_0xf5f2('0x12'),_0x218ae3,_0x151aba[_0xf5f2('0x17')]['message']);return _0x4ebbbe(_0x151aba[_0xf5f2('0x17')][_0xf5f2('0x19')]);}logger[_0xf5f2('0x17')](_0xf5f2('0x12'),_0x218ae3,_0x151aba[_0xf5f2('0x17')][_0xf5f2('0x19')]);return _0x977a59(_0x151aba[_0xf5f2('0x17')][_0xf5f2('0x19')]);}else{logger[_0xf5f2('0x1a')](_0xf5f2('0x12'),_0x218ae3,_0xf5f2('0x13'));_0x977a59(_0x151aba[_0xf5f2('0x1b')][_0xf5f2('0x19')]);}})[_0xf5f2('0x1c')](function(_0x3cf5ea){logger[_0xf5f2('0x17')](_0xf5f2('0x12'),_0x218ae3,_0x3cf5ea);_0x4ebbbe(_0x3cf5ea);});});}exports['GetUser']=function(_0x34706d){var _0x47101e=this;return new Promise(function(_0x49dac2,_0x47acfc){return db[_0xf5f2('0x1d')][_0xf5f2('0x1e')]({'raw':_0x34706d['options']?_0x34706d[_0xf5f2('0x1f')][_0xf5f2('0x20')]===undefined?!![]:![]:!![],'where':_0x34706d[_0xf5f2('0x1f')]?_0x34706d[_0xf5f2('0x1f')][_0xf5f2('0x21')]||null:null,'attributes':_0x34706d['options']?_0x34706d[_0xf5f2('0x1f')][_0xf5f2('0x22')]||null:null,'limit':_0x34706d[_0xf5f2('0x1f')]?_0x34706d[_0xf5f2('0x1f')][_0xf5f2('0x23')]||null:null,'include':_0x34706d['options']?_0x34706d['options'][_0xf5f2('0x24')]?_[_0xf5f2('0x25')](_0x34706d[_0xf5f2('0x1f')][_0xf5f2('0x24')],function(_0xf6c58d){return{'model':db[_0xf6c58d[_0xf5f2('0x26')]],'as':_0xf6c58d['as'],'attributes':_0xf6c58d[_0xf5f2('0x22')],'include':_0xf6c58d[_0xf5f2('0x24')]?_[_0xf5f2('0x25')](_0xf6c58d['include'],function(_0xaa2602){return{'model':db[_0xaa2602[_0xf5f2('0x26')]],'as':_0xaa2602['as'],'attributes':_0xaa2602[_0xf5f2('0x22')],'include':_0xaa2602[_0xf5f2('0x24')]?_[_0xf5f2('0x25')](_0xaa2602[_0xf5f2('0x24')],function(_0x5b6672){return{'model':db[_0x5b6672['model']],'as':_0x5b6672['as'],'attributes':_0x5b6672[_0xf5f2('0x22')]};}):[]};}):[]};}):[]:[]})[_0xf5f2('0x11')](function(_0x11c771){logger['info']('GetUser',_0x34706d);logger[_0xf5f2('0x14')](_0xf5f2('0x27'),_0x34706d,JSON[_0xf5f2('0x16')](_0x11c771));_0x49dac2(_0x11c771);})[_0xf5f2('0x1c')](function(_0x1b381e){logger['error']('GetUser',_0x1b381e[_0xf5f2('0x19')],_0x34706d);_0x47acfc(_0x47101e['error'](0x1f4,_0x1b381e[_0xf5f2('0x19')]));});});};exports['ShowUser']=function(_0x45b643){var _0x31087c=this;return new Promise(function(_0x7b6817,_0x428770){return db[_0xf5f2('0x1d')][_0xf5f2('0x28')]({'raw':_0x45b643[_0xf5f2('0x1f')]?_0x45b643[_0xf5f2('0x1f')]['raw']===undefined?!![]:![]:!![],'where':_0x45b643[_0xf5f2('0x1f')]?_0x45b643[_0xf5f2('0x1f')][_0xf5f2('0x21')]||null:null,'attributes':_0x45b643[_0xf5f2('0x1f')]?_0x45b643[_0xf5f2('0x1f')][_0xf5f2('0x22')]||null:null,'include':_0x45b643[_0xf5f2('0x1f')]?_0x45b643['options'][_0xf5f2('0x24')]?_[_0xf5f2('0x25')](_0x45b643['options'][_0xf5f2('0x24')],function(_0x4b8c42){return{'model':db[_0x4b8c42[_0xf5f2('0x26')]],'as':_0x4b8c42['as'],'attributes':_0x4b8c42[_0xf5f2('0x22')],'include':_0x4b8c42[_0xf5f2('0x24')]?_[_0xf5f2('0x25')](_0x4b8c42['include'],function(_0x5a98d7){return{'model':db[_0x5a98d7[_0xf5f2('0x26')]],'as':_0x5a98d7['as'],'attributes':_0x5a98d7[_0xf5f2('0x22')],'include':_0x5a98d7[_0xf5f2('0x24')]?_['map'](_0x5a98d7[_0xf5f2('0x24')],function(_0x4f7f80){return{'model':db[_0x4f7f80[_0xf5f2('0x26')]],'as':_0x4f7f80['as'],'attributes':_0x4f7f80['attributes']};}):[]};}):[]};}):[]:[]})[_0xf5f2('0x11')](function(_0x456764){logger['info'](_0xf5f2('0x29'),_0x45b643);logger[_0xf5f2('0x14')](_0xf5f2('0x29'),_0x45b643,JSON[_0xf5f2('0x16')](_0x456764));_0x7b6817(_0x456764);})['catch'](function(_0x5d2d82){logger[_0xf5f2('0x17')](_0xf5f2('0x29'),_0x5d2d82[_0xf5f2('0x19')],_0x45b643);_0x428770(_0x31087c[_0xf5f2('0x17')](0x1f4,_0x5d2d82[_0xf5f2('0x19')]));});});};exports[_0xf5f2('0x2a')]=function(_0x2bc20e){var _0x4c0ac7=this;return new Promise(function(_0x110fe5,_0x3b4ea6){var _0x536501;return db[_0xf5f2('0x1d')][_0xf5f2('0x28')]({'where':_0x2bc20e[_0xf5f2('0x1f')][_0xf5f2('0x21')]||{},'attributes':['id',_0xf5f2('0x2b'),_0xf5f2('0x2c'),_0xf5f2('0x2d'),_0xf5f2('0x2e')]})['then'](function(_0x31c3c){if(_0x31c3c){_0x536501=_0x31c3c;return db[_0xf5f2('0x2f')][_0xf5f2('0x30')]({'paused':0x1},{'where':{'UserId':_0x536501['id']},'individualHooks':!![]});}})['then'](function(){if(_0x536501){return db['MemberReport']['findAll']({'where':{'membername':_0x536501[_0xf5f2('0x2b')],'type':_0xf5f2('0x31'),'exitAt':null}});}})['then'](function(_0x106272){if(_0x536501){if(_0x106272&&_0x106272[_0xf5f2('0x32')]){var _0x28e33f=moment()[_0xf5f2('0x33')](_0xf5f2('0x34'));for(var _0x2b3b1c=0x0,_0x1a6ec1=_0x106272[_0xf5f2('0x32')];_0x2b3b1c<_0x1a6ec1;_0x2b3b1c++){_0x106272[_0x2b3b1c][_0xf5f2('0x35')]({'exitAt':_0x28e33f});}}}})[_0xf5f2('0x11')](function(){if(_0x536501){var _0x444317=[];var _0x4773cd=utils[_0xf5f2('0x36')]();_0x4773cd[_0xf5f2('0x37')](function(_0x4faeed){_0x444317[_0xf5f2('0x38')]({'channel':_0x4faeed,'membername':_0x536501['name'],'interface':_[_0xf5f2('0x39')](_0x536501[_0xf5f2('0x2e')])?util[_0xf5f2('0x33')](_0xf5f2('0x3a'),_0x536501[_0xf5f2('0x2b')]):_0x536501[_0xf5f2('0x2e')],'type':'PAUSE','enterAt':moment()[_0xf5f2('0x33')](_0xf5f2('0x34')),'data1':_0x2bc20e[_0xf5f2('0x3b')][_0xf5f2('0x3c')]||_0xf5f2('0x3d'),'role':_0x536501[_0xf5f2('0x2c')],'internal':_0x536501[_0xf5f2('0x2d')],'uniqueid':_0x2bc20e[_0xf5f2('0x3b')]['uniqueid']||null});});return db[_0xf5f2('0x3e')][_0xf5f2('0x3f')](_0x444317,{'individualHooks':!![]});}})[_0xf5f2('0x11')](function(){if(_0x536501){return _0x536501['update']({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x2bc20e[_0xf5f2('0x3b')][_0xf5f2('0x3c')]||_0xf5f2('0x3d'),'lastPauseAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')});}})[_0xf5f2('0x11')](function(_0x27c472){_0x110fe5(_0x27c472);})['catch'](function(_0x14aa81){_0x3b4ea6(_0x4c0ac7['error'](0x1f4,_0x14aa81[_0xf5f2('0x19')]));});});};exports['UnpauseUser']=function(_0x2cbd9d){var _0x5d9120=this;return new Promise(function(_0x2d9017,_0xb8ea3a){var _0xbb658c;return db[_0xf5f2('0x1d')]['findOne']({'where':_0x2cbd9d[_0xf5f2('0x1f')][_0xf5f2('0x21')]||{},'attributes':['id','name']})['then'](function(_0xc3d4f){if(_0xc3d4f){_0xbb658c=_0xc3d4f;if(_0x2cbd9d[_0xf5f2('0x3b')]['channel']&&!utils[_0xf5f2('0x40')](_0x2cbd9d[_0xf5f2('0x3b')][_0xf5f2('0x41')])){throw new Error(_0xf5f2('0x42'));}switch(_0x2cbd9d['body']['channel']){case _0xf5f2('0x43'):return db[_0xf5f2('0x2f')]['update']({'paused':0x0},{'where':{'UserId':_0xbb658c['id']}})[_0xf5f2('0x11')](function(){return db[_0xf5f2('0x3e')][_0xf5f2('0x28')]({'where':{'channel':_0x2cbd9d[_0xf5f2('0x3b')][_0xf5f2('0x41')],'membername':_0xbb658c[_0xf5f2('0x2b')],'type':_0xf5f2('0x31'),'exitAt':null}});})['then'](function(_0x59e8ef){if(_0x59e8ef){return _0x59e8ef[_0xf5f2('0x30')]({'exitAt':moment()[_0xf5f2('0x33')](_0xf5f2('0x34')),'data2':_0xf5f2('0x44')},{'individualHooks':!![]});}return null;})[_0xf5f2('0x11')](function(){return _0xbb658c['update']({'voicePause':![]});});case _0xf5f2('0x45'):case _0xf5f2('0x46'):case _0xf5f2('0x47'):case'sms':case _0xf5f2('0x48'):return db['MemberReport'][_0xf5f2('0x28')]({'where':{'channel':_0x2cbd9d[_0xf5f2('0x3b')][_0xf5f2('0x41')],'membername':_0xbb658c[_0xf5f2('0x2b')],'type':'PAUSE','exitAt':null}})['then'](function(_0x756f1f){return _0x756f1f['update']({'exitAt':moment()[_0xf5f2('0x33')](_0xf5f2('0x34')),'data2':'system'},{'individualHooks':!![]});})[_0xf5f2('0x11')](function(){var _0xa4c0be={};_[_0xf5f2('0x49')](_0xa4c0be,util['format'](_0xf5f2('0x4a'),_0x2cbd9d[_0xf5f2('0x3b')][_0xf5f2('0x41')],_0xf5f2('0x4b')),![]);return _0xbb658c['update'](_0xa4c0be);});default:return db[_0xf5f2('0x2f')]['update']({'paused':0x0},{'where':{'UserId':_0xbb658c['id']}})[_0xf5f2('0x11')](function(){return db[_0xf5f2('0x3e')][_0xf5f2('0x1e')]({'where':{'membername':_0xbb658c[_0xf5f2('0x2b')],'type':_0xf5f2('0x31'),'exitAt':null}});})['then'](function(_0xda8dda){var _0xacd80=[];_0xda8dda[_0xf5f2('0x37')](function(_0x212639){_0xacd80[_0xf5f2('0x38')](_0x212639['update']({'exitAt':moment()[_0xf5f2('0x33')]('YYYY-MM-DD\x20HH:mm:ss'),'data2':'system'}));});return BPromise[_0xf5f2('0x4c')](_0xacd80);})['then'](function(){return _0xbb658c[_0xf5f2('0x30')]({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})[_0xf5f2('0x11')](function(_0x420784){_0x2d9017(_0x420784);})[_0xf5f2('0x1c')](function(_0x5767fc){_0xb8ea3a(_0x5d9120[_0xf5f2('0x17')](0x1f4,_0x5767fc[_0xf5f2('0x19')]));});});};exports[_0xf5f2('0x4d')]=function(_0x18c41f){var _0x15b680=this;return new Promise(function(_0x35d868,_0x158768){var _0x4a7be9;return db[_0xf5f2('0x1d')][_0xf5f2('0x4e')]({'where':_0x18c41f[_0xf5f2('0x1f')][_0xf5f2('0x21')]||{},'attributes':['id','name']})[_0xf5f2('0x11')](function(_0x4cce08){if(_0x4cce08){_0x4a7be9=_0x4cce08;return db[_0xf5f2('0x2f')][_0xf5f2('0x4f')]({'where':{'membername':_0x4a7be9['name']},'individualHooks':!![]});}})[_0xf5f2('0x11')](function(){if(_0x4a7be9){return db[_0xf5f2('0x3e')][_0xf5f2('0x1e')]({'where':{'membername':_0x4a7be9[_0xf5f2('0x2b')],'exitAt':null}});}})[_0xf5f2('0x11')](function(_0x4bd113){if(_0x4a7be9){if(_0x4bd113&&_0x4bd113[_0xf5f2('0x32')]){var _0x21c107=[];_0x4bd113[_0xf5f2('0x37')](function(_0xbf9f55){_0x21c107[_0xf5f2('0x38')](_0xbf9f55[_0xf5f2('0x30')]({'exitAt':moment()['format'](_0xf5f2('0x34'))}));});return BPromise[_0xf5f2('0x4c')](_0x21c107);}}})['then'](function(){if(_0x4a7be9){return _0x4a7be9[_0xf5f2('0x30')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});}})[_0xf5f2('0x11')](function(_0x377aad){_0x35d868(_0x377aad);})['catch'](function(_0x551cc9){_0x158768(_0x15b680['error'](0x1f4,_0x551cc9[_0xf5f2('0x19')]));});});};exports[_0xf5f2('0x50')]=function(_0x35f6a2){var _0x450691=this;return new Promise(function(_0x55da4d,_0x4d878e){var _0x278b76;var _0x3a98b4;var _0xc10cf3;var _0xe8a9b7;return db[_0xf5f2('0x1d')][_0xf5f2('0x4e')]({'where':_0x35f6a2[_0xf5f2('0x1f')][_0xf5f2('0x21')]||{},'attributes':['id',_0xf5f2('0x2b'),_0xf5f2('0x2c'),_0xf5f2('0x51'),'phone','internal','loginInPause',_0xf5f2('0x2e')]})[_0xf5f2('0x11')](function(_0x3d3181){if(_0x3d3181){_0x278b76=_0x3d3181;_0xe8a9b7=_0x35f6a2[_0xf5f2('0x3b')][_0xf5f2('0x2e')]?_0x35f6a2['body'][_0xf5f2('0x2e')]:util[_0xf5f2('0x33')](_0xf5f2('0x3a'),_0x278b76[_0xf5f2('0x2b')]);return db[_0xf5f2('0x1d')]['count']({'where':{'role':_0xf5f2('0x52'),'online':!![],'id':{'$ne':_0x278b76['id']}}});}})[_0xf5f2('0x11')](function(_0x517c15){if(_0x517c15){_0xc10cf3=_0x517c15;return require(_0xf5f2('0x53'))[_0xf5f2('0x54')]();}})[_0xf5f2('0x11')](function(_0x30ac41){if(_0x30ac41&&_0x30ac41['agents']&&_0xc10cf3>=_0x30ac41[_0xf5f2('0x55')]){throw new Error(_0xf5f2('0x56'));}})[_0xf5f2('0x11')](function(){if(_0x278b76){return db[_0xf5f2('0x2f')][_0xf5f2('0x4f')]({'where':{'membername':_0x278b76['name']},'individualHooks':!![]});}})['then'](function(){if(_0x278b76){return _0x278b76[_0xf5f2('0x57')]({'raw':!![]});}})[_0xf5f2('0x11')](function(_0x17eb69){if(_0x278b76){if(_0x17eb69){var _0xe3ea1e=[];_0x3a98b4=_0x17eb69;if(_0x3a98b4['length']){for(var _0x5a2f9f=0x0;_0x5a2f9f<_0x3a98b4[_0xf5f2('0x32')];_0x5a2f9f++){_0xe3ea1e['push'](db['UserVoiceQueueRt']['upsert']({'membername':_0x278b76['name'],'UserId':_0x278b76['id'],'queue_name':_0x3a98b4[_0x5a2f9f][_0xf5f2('0x2b')],'VoiceQueueId':_0x3a98b4[_0x5a2f9f]['id'],'interface':_0xe8a9b7,'paused':_0x278b76[_0xf5f2('0x58')]||![],'penalty':_0x3a98b4[_0x5a2f9f][_0xf5f2('0x59')]||0x0}));}return BPromise[_0xf5f2('0x4c')](_0xe3ea1e);}}}})[_0xf5f2('0x11')](function(){if(_0x278b76){return db[_0xf5f2('0x3e')][_0xf5f2('0x1e')]({'where':{'membername':_0x278b76[_0xf5f2('0x2b')],'exitAt':null}});}})[_0xf5f2('0x11')](function(_0x26b251){if(_0x278b76){if(_0x26b251&&_0x26b251[_0xf5f2('0x32')]){var _0x2afeac=[];_0x26b251[_0xf5f2('0x37')](function(_0x1680a6){_0x2afeac[_0xf5f2('0x38')](_0x1680a6[_0xf5f2('0x30')]({'exitAt':moment()[_0xf5f2('0x33')](_0xf5f2('0x34'))}));});return BPromise['all'](_0x2afeac);}}})[_0xf5f2('0x11')](function(_0x35299d){if(_0x278b76){var _0x21043b=[];var _0x2811ad=[];var _0x18c353=utils[_0xf5f2('0x36')]();var _0x16491c={'membername':_0x278b76[_0xf5f2('0x2b')],'interface':_0xe8a9b7,'enterAt':moment()['format'](_0xf5f2('0x34')),'role':_0x278b76['role'],'internal':_0x278b76['internal']};_0x18c353['forEach'](function(_0x53449e){_0x21043b['push'](_['merge']({'channel':_0x53449e,'type':_0xf5f2('0x5a'),'data1':_0xf5f2('0x5b'),'data2':_0xe8a9b7},_0x16491c));if(_0x278b76[_0xf5f2('0x58')]){_0x2811ad[_0xf5f2('0x38')](_[_0xf5f2('0x5c')]({'channel':_0x53449e,'type':_0xf5f2('0x31'),'data1':'LOGININPAUSE'},_0x16491c));}});return db['MemberReport'][_0xf5f2('0x3f')](_0x21043b['concat'](_0x2811ad),{'individualHooks':!![]});}})[_0xf5f2('0x11')](function(){if(_0x278b76){return _0x278b76[_0xf5f2('0x30')]({'online':!![],'lastLoginAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'voicePause':_0x278b76[_0xf5f2('0x58')]||![],'mailPause':_0x278b76[_0xf5f2('0x58')]||![],'chatPause':_0x278b76['loginInPause']||![],'faxPause':_0x278b76[_0xf5f2('0x58')]||![],'smsPause':_0x278b76[_0xf5f2('0x58')]||![],'openchannelPause':_0x278b76['loginInPause']||![],'pauseType':_0x278b76[_0xf5f2('0x58')]?_0xf5f2('0x5d'):null,'lastPauseAt':moment()[_0xf5f2('0x33')]('YYYY-MM-DD\x20HH:mm:ss'),'interface':_0xe8a9b7});}})[_0xf5f2('0x11')](function(_0xc28adc){_0x55da4d(_0xc28adc);})[_0xf5f2('0x1c')](function(_0x3247c4){_0x4d878e(_0x450691[_0xf5f2('0x17')](0x1f4,_0x3247c4[_0xf5f2('0x19')]));});});};
\ No newline at end of file
+var _0xb10b=['destroy','length','LoginUser','loginInPause','count','agent','../../config/license/util','agents','Maximum\x20login\x20has\x20been\x20reached','getVoiceQueues','upsert','merge','LOGIN','callysquare','LOGININPAUSE','concat','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','localhost','socket.io-emitter','./user.socket','register','request','then','info','request\x20sent','debug','User,\x20%s,\x20%s,\x20%s','stringify','error','code','User,\x20%s,\x20%s','message','result','catch','GetUser','User','options','where','attributes','limit','include','map','model','ShowUser','find','raw','PauseUser','name','role','interface','UserVoiceQueueRt','MemberReport','findAll','format','updateAttributes','getChannels','forEach','push','isNil','SIP/%s','PAUSE','YYYY-MM-DD\x20HH:mm:ss','body','DEFAULT\x20PAUSE','internal','uniqueid','bulkCreate','type','UnpauseUser','findOne','channel','isValidChannel','Unknown\x20channel','update','system','chat','fax','sms','openchannel','set','Pause','all','LogoutUser'];(function(_0x5a7414,_0x3d73c1){var _0x12d543=function(_0x5802de){while(--_0x5802de){_0x5a7414['push'](_0x5a7414['shift']());}};_0x12d543(++_0x3d73c1);}(_0xb10b,0x12a));var _0xbb10=function(_0x277415,_0x38968b){_0x277415=_0x277415-0x0;var _0x376342=_0xb10b[_0x277415];return _0x376342;};'use strict';var _=require(_0xbb10('0x0'));var util=require('util');var moment=require(_0xbb10('0x1'));var BPromise=require(_0xbb10('0x2'));var rs=require(_0xbb10('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xbb10('0x4'))['db'];var utils=require(_0xbb10('0x5'));var logger=require(_0xbb10('0x6'))(_0xbb10('0x7'));var config=require(_0xbb10('0x8'));var jayson=require(_0xbb10('0x9'));var client=jayson['client'][_0xbb10('0xa')]({'port':0x232a});config[_0xbb10('0xb')]=_['defaults'](config[_0xbb10('0xb')],{'host':_0xbb10('0xc'),'port':0x18eb});var socket=require(_0xbb10('0xd'))(new Redis(config[_0xbb10('0xb')]));require(_0xbb10('0xe'))[_0xbb10('0xf')](socket);function respondWithRpcPromise(_0x229887,_0xa3adc8,_0x5ab04a){return new BPromise(function(_0x4e47f8,_0x20bd61){return client[_0xbb10('0x10')](_0x229887,_0x5ab04a)[_0xbb10('0x11')](function(_0x5e136d){logger[_0xbb10('0x12')]('User,\x20%s,\x20%s',_0xa3adc8,_0xbb10('0x13'));logger[_0xbb10('0x14')](_0xbb10('0x15'),_0xa3adc8,_0xbb10('0x13'),JSON[_0xbb10('0x16')](_0x5e136d));if(_0x5e136d[_0xbb10('0x17')]){if(_0x5e136d['error'][_0xbb10('0x18')]===0x1f4){logger[_0xbb10('0x17')](_0xbb10('0x19'),_0xa3adc8,_0x5e136d[_0xbb10('0x17')][_0xbb10('0x1a')]);return _0x20bd61(_0x5e136d[_0xbb10('0x17')][_0xbb10('0x1a')]);}logger[_0xbb10('0x17')](_0xbb10('0x19'),_0xa3adc8,_0x5e136d[_0xbb10('0x17')]['message']);return _0x4e47f8(_0x5e136d[_0xbb10('0x17')][_0xbb10('0x1a')]);}else{logger[_0xbb10('0x12')](_0xbb10('0x19'),_0xa3adc8,_0xbb10('0x13'));_0x4e47f8(_0x5e136d[_0xbb10('0x1b')][_0xbb10('0x1a')]);}})[_0xbb10('0x1c')](function(_0xbf2906){logger[_0xbb10('0x17')]('User,\x20%s,\x20%s',_0xa3adc8,_0xbf2906);_0x20bd61(_0xbf2906);});});}exports[_0xbb10('0x1d')]=function(_0x19f48d){var _0x388fab=this;return new Promise(function(_0x109908,_0xdf237d){return db[_0xbb10('0x1e')]['findAll']({'raw':_0x19f48d[_0xbb10('0x1f')]?_0x19f48d[_0xbb10('0x1f')]['raw']===undefined?!![]:![]:!![],'where':_0x19f48d['options']?_0x19f48d[_0xbb10('0x1f')][_0xbb10('0x20')]||null:null,'attributes':_0x19f48d[_0xbb10('0x1f')]?_0x19f48d[_0xbb10('0x1f')][_0xbb10('0x21')]||null:null,'limit':_0x19f48d[_0xbb10('0x1f')]?_0x19f48d[_0xbb10('0x1f')][_0xbb10('0x22')]||null:null,'include':_0x19f48d[_0xbb10('0x1f')]?_0x19f48d[_0xbb10('0x1f')][_0xbb10('0x23')]?_[_0xbb10('0x24')](_0x19f48d['options']['include'],function(_0x4fb5e0){return{'model':db[_0x4fb5e0[_0xbb10('0x25')]],'as':_0x4fb5e0['as'],'attributes':_0x4fb5e0[_0xbb10('0x21')],'include':_0x4fb5e0[_0xbb10('0x23')]?_['map'](_0x4fb5e0[_0xbb10('0x23')],function(_0x24d586){return{'model':db[_0x24d586[_0xbb10('0x25')]],'as':_0x24d586['as'],'attributes':_0x24d586[_0xbb10('0x21')],'include':_0x24d586[_0xbb10('0x23')]?_[_0xbb10('0x24')](_0x24d586[_0xbb10('0x23')],function(_0x4aabb9){return{'model':db[_0x4aabb9[_0xbb10('0x25')]],'as':_0x4aabb9['as'],'attributes':_0x4aabb9[_0xbb10('0x21')]};}):[]};}):[]};}):[]:[]})[_0xbb10('0x11')](function(_0x2e0249){logger[_0xbb10('0x12')](_0xbb10('0x1d'),_0x19f48d);logger['debug'](_0xbb10('0x1d'),_0x19f48d,JSON['stringify'](_0x2e0249));_0x109908(_0x2e0249);})[_0xbb10('0x1c')](function(_0x56f2da){logger[_0xbb10('0x17')](_0xbb10('0x1d'),_0x56f2da[_0xbb10('0x1a')],_0x19f48d);_0xdf237d(_0x388fab['error'](0x1f4,_0x56f2da['message']));});});};exports[_0xbb10('0x26')]=function(_0x34f65e){var _0x4f590d=this;return new Promise(function(_0x359ad4,_0x37dde7){return db[_0xbb10('0x1e')][_0xbb10('0x27')]({'raw':_0x34f65e[_0xbb10('0x1f')]?_0x34f65e[_0xbb10('0x1f')][_0xbb10('0x28')]===undefined?!![]:![]:!![],'where':_0x34f65e['options']?_0x34f65e[_0xbb10('0x1f')][_0xbb10('0x20')]||null:null,'attributes':_0x34f65e[_0xbb10('0x1f')]?_0x34f65e[_0xbb10('0x1f')][_0xbb10('0x21')]||null:null,'include':_0x34f65e[_0xbb10('0x1f')]?_0x34f65e[_0xbb10('0x1f')][_0xbb10('0x23')]?_[_0xbb10('0x24')](_0x34f65e['options'][_0xbb10('0x23')],function(_0x150107){return{'model':db[_0x150107[_0xbb10('0x25')]],'as':_0x150107['as'],'attributes':_0x150107[_0xbb10('0x21')],'include':_0x150107['include']?_[_0xbb10('0x24')](_0x150107['include'],function(_0x4e2754){return{'model':db[_0x4e2754[_0xbb10('0x25')]],'as':_0x4e2754['as'],'attributes':_0x4e2754[_0xbb10('0x21')],'include':_0x4e2754[_0xbb10('0x23')]?_[_0xbb10('0x24')](_0x4e2754[_0xbb10('0x23')],function(_0x29d11a){return{'model':db[_0x29d11a['model']],'as':_0x29d11a['as'],'attributes':_0x29d11a[_0xbb10('0x21')]};}):[]};}):[]};}):[]:[]})[_0xbb10('0x11')](function(_0x52de31){logger['info']('ShowUser',_0x34f65e);logger[_0xbb10('0x14')](_0xbb10('0x26'),_0x34f65e,JSON[_0xbb10('0x16')](_0x52de31));_0x359ad4(_0x52de31);})['catch'](function(_0x3c0cd7){logger[_0xbb10('0x17')](_0xbb10('0x26'),_0x3c0cd7['message'],_0x34f65e);_0x37dde7(_0x4f590d[_0xbb10('0x17')](0x1f4,_0x3c0cd7[_0xbb10('0x1a')]));});});};exports[_0xbb10('0x29')]=function(_0x446f49){var _0x4f1cdd=this;return new Promise(function(_0xd238e9,_0x110eb5){var _0x5835fd;return db[_0xbb10('0x1e')][_0xbb10('0x27')]({'where':_0x446f49[_0xbb10('0x1f')][_0xbb10('0x20')]||{},'attributes':['id',_0xbb10('0x2a'),_0xbb10('0x2b'),'internal',_0xbb10('0x2c')]})[_0xbb10('0x11')](function(_0x3e7b4c){if(_0x3e7b4c){_0x5835fd=_0x3e7b4c;return db[_0xbb10('0x2d')]['update']({'paused':0x1},{'where':{'UserId':_0x5835fd['id']},'individualHooks':!![]});}})[_0xbb10('0x11')](function(){if(_0x5835fd){return db[_0xbb10('0x2e')][_0xbb10('0x2f')]({'where':{'membername':_0x5835fd[_0xbb10('0x2a')],'type':'PAUSE','exitAt':null}});}})[_0xbb10('0x11')](function(_0x202c60){if(_0x5835fd){if(_0x202c60&&_0x202c60['length']){var _0x5d9a4f=moment()[_0xbb10('0x30')]('YYYY-MM-DD\x20HH:mm:ss');for(var _0x318984=0x0,_0x180933=_0x202c60['length'];_0x318984<_0x180933;_0x318984++){_0x202c60[_0x318984][_0xbb10('0x31')]({'exitAt':_0x5d9a4f});}}}})[_0xbb10('0x11')](function(){if(_0x5835fd){var _0x474e99=[];var _0x5cf4f8=utils[_0xbb10('0x32')]();_0x5cf4f8[_0xbb10('0x33')](function(_0x3b9fdf){_0x474e99[_0xbb10('0x34')]({'channel':_0x3b9fdf,'membername':_0x5835fd[_0xbb10('0x2a')],'interface':_[_0xbb10('0x35')](_0x5835fd[_0xbb10('0x2c')])?util[_0xbb10('0x30')](_0xbb10('0x36'),_0x5835fd[_0xbb10('0x2a')]):_0x5835fd[_0xbb10('0x2c')],'type':_0xbb10('0x37'),'enterAt':moment()['format'](_0xbb10('0x38')),'data1':_0x446f49[_0xbb10('0x39')]['type']||_0xbb10('0x3a'),'role':_0x5835fd[_0xbb10('0x2b')],'internal':_0x5835fd[_0xbb10('0x3b')],'uniqueid':_0x446f49[_0xbb10('0x39')][_0xbb10('0x3c')]||null});});return db[_0xbb10('0x2e')][_0xbb10('0x3d')](_0x474e99,{'individualHooks':!![]});}})['then'](function(){if(_0x5835fd){return _0x5835fd['update']({'voicePause':!![],'mailPause':!![],'chatPause':!![],'faxPause':!![],'smsPause':!![],'openchannelPause':!![],'pauseType':_0x446f49[_0xbb10('0x39')][_0xbb10('0x3e')]||_0xbb10('0x3a'),'lastPauseAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')});}})[_0xbb10('0x11')](function(_0x34cf4e){_0xd238e9(_0x34cf4e);})[_0xbb10('0x1c')](function(_0xf820fe){_0x110eb5(_0x4f1cdd[_0xbb10('0x17')](0x1f4,_0xf820fe[_0xbb10('0x1a')]));});});};exports[_0xbb10('0x3f')]=function(_0x460788){var _0x2626d8=this;return new Promise(function(_0x3d7e7e,_0x550111){var _0x5eafac;return db[_0xbb10('0x1e')][_0xbb10('0x40')]({'where':_0x460788[_0xbb10('0x1f')][_0xbb10('0x20')]||{},'attributes':['id',_0xbb10('0x2a')]})[_0xbb10('0x11')](function(_0x358e7e){if(_0x358e7e){_0x5eafac=_0x358e7e;if(_0x460788[_0xbb10('0x39')][_0xbb10('0x41')]&&!utils[_0xbb10('0x42')](_0x460788[_0xbb10('0x39')][_0xbb10('0x41')])){throw new Error(_0xbb10('0x43'));}switch(_0x460788[_0xbb10('0x39')][_0xbb10('0x41')]){case'voice':return db[_0xbb10('0x2d')]['update']({'paused':0x0},{'where':{'UserId':_0x5eafac['id']}})[_0xbb10('0x11')](function(){return db[_0xbb10('0x2e')][_0xbb10('0x27')]({'where':{'channel':_0x460788[_0xbb10('0x39')][_0xbb10('0x41')],'membername':_0x5eafac[_0xbb10('0x2a')],'type':_0xbb10('0x37'),'exitAt':null}});})[_0xbb10('0x11')](function(_0x180400){if(_0x180400){return _0x180400[_0xbb10('0x44')]({'exitAt':moment()[_0xbb10('0x30')](_0xbb10('0x38')),'data2':_0xbb10('0x45')},{'individualHooks':!![]});}return null;})[_0xbb10('0x11')](function(){return _0x5eafac[_0xbb10('0x44')]({'voicePause':![]});});case'mail':case _0xbb10('0x46'):case _0xbb10('0x47'):case _0xbb10('0x48'):case _0xbb10('0x49'):return db[_0xbb10('0x2e')][_0xbb10('0x27')]({'where':{'channel':_0x460788['body'][_0xbb10('0x41')],'membername':_0x5eafac[_0xbb10('0x2a')],'type':_0xbb10('0x37'),'exitAt':null}})[_0xbb10('0x11')](function(_0x432728){return _0x432728[_0xbb10('0x44')]({'exitAt':moment()[_0xbb10('0x30')](_0xbb10('0x38')),'data2':_0xbb10('0x45')},{'individualHooks':!![]});})[_0xbb10('0x11')](function(){var _0x2eb05a={};_[_0xbb10('0x4a')](_0x2eb05a,util[_0xbb10('0x30')]('%s%s',_0x460788['body'][_0xbb10('0x41')],_0xbb10('0x4b')),![]);return _0x5eafac[_0xbb10('0x44')](_0x2eb05a);});default:return db[_0xbb10('0x2d')]['update']({'paused':0x0},{'where':{'UserId':_0x5eafac['id']}})['then'](function(){return db[_0xbb10('0x2e')][_0xbb10('0x2f')]({'where':{'membername':_0x5eafac[_0xbb10('0x2a')],'type':_0xbb10('0x37'),'exitAt':null}});})[_0xbb10('0x11')](function(_0x3e9753){var _0x45c0dc=[];_0x3e9753['forEach'](function(_0x117e84){_0x45c0dc[_0xbb10('0x34')](_0x117e84['update']({'exitAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'data2':_0xbb10('0x45')}));});return BPromise[_0xbb10('0x4c')](_0x45c0dc);})[_0xbb10('0x11')](function(){return _0x5eafac['update']({'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});});}}})['then'](function(_0x5846d1){_0x3d7e7e(_0x5846d1);})[_0xbb10('0x1c')](function(_0x249b33){_0x550111(_0x2626d8[_0xbb10('0x17')](0x1f4,_0x249b33['message']));});});};exports[_0xbb10('0x4d')]=function(_0x13131c){var _0x5a6538=this;return new Promise(function(_0x4a560c,_0x27d7b9){var _0x308896;return db[_0xbb10('0x1e')][_0xbb10('0x40')]({'where':_0x13131c['options'][_0xbb10('0x20')]||{},'attributes':['id',_0xbb10('0x2a')]})[_0xbb10('0x11')](function(_0x5202d7){if(_0x5202d7){_0x308896=_0x5202d7;return db[_0xbb10('0x2d')][_0xbb10('0x4e')]({'where':{'membername':_0x308896[_0xbb10('0x2a')]},'individualHooks':!![]});}})['then'](function(){if(_0x308896){return db[_0xbb10('0x2e')][_0xbb10('0x2f')]({'where':{'membername':_0x308896[_0xbb10('0x2a')],'exitAt':null}});}})[_0xbb10('0x11')](function(_0x5e4a6e){if(_0x308896){if(_0x5e4a6e&&_0x5e4a6e[_0xbb10('0x4f')]){var _0x258e55=[];_0x5e4a6e[_0xbb10('0x33')](function(_0x2d0f4b){_0x258e55['push'](_0x2d0f4b[_0xbb10('0x44')]({'exitAt':moment()[_0xbb10('0x30')](_0xbb10('0x38'))}));});return BPromise[_0xbb10('0x4c')](_0x258e55);}}})[_0xbb10('0x11')](function(){if(_0x308896){return _0x308896[_0xbb10('0x44')]({'online':![],'lastLoginAt':null,'voicePause':![],'mailPause':![],'chatPause':![],'faxPause':![],'smsPause':![],'openchannelPause':![]});}})[_0xbb10('0x11')](function(_0x4a30c5){_0x4a560c(_0x4a30c5);})['catch'](function(_0x5acd5e){_0x27d7b9(_0x5a6538[_0xbb10('0x17')](0x1f4,_0x5acd5e[_0xbb10('0x1a')]));});});};exports[_0xbb10('0x50')]=function(_0x5c9afc){var _0x5cd089=this;return new Promise(function(_0x46f462,_0x1b11c0){var _0xd9e743;var _0x3a9677;var _0x260e06;var _0x1ad2ed;return db['User'][_0xbb10('0x40')]({'where':_0x5c9afc[_0xbb10('0x1f')][_0xbb10('0x20')]||{},'attributes':['id',_0xbb10('0x2a'),_0xbb10('0x2b'),'mobile','phone','internal',_0xbb10('0x51'),_0xbb10('0x2c')]})[_0xbb10('0x11')](function(_0x21459e){if(_0x21459e){_0xd9e743=_0x21459e;_0x1ad2ed=_0x5c9afc[_0xbb10('0x39')][_0xbb10('0x2c')]?_0x5c9afc['body'][_0xbb10('0x2c')]:util['format']('SIP/%s',_0xd9e743['name']);return db[_0xbb10('0x1e')][_0xbb10('0x52')]({'where':{'role':_0xbb10('0x53'),'online':!![],'id':{'$ne':_0xd9e743['id']}}});}})[_0xbb10('0x11')](function(_0x5ce94f){if(_0x5ce94f){_0x260e06=_0x5ce94f;return require(_0xbb10('0x54'))['getLicense']();}})['then'](function(_0x165fe9){if(_0x165fe9&&_0x165fe9[_0xbb10('0x55')]&&_0x260e06>=_0x165fe9[_0xbb10('0x55')]){throw new Error(_0xbb10('0x56'));}})[_0xbb10('0x11')](function(){if(_0xd9e743){return db['UserVoiceQueueRt'][_0xbb10('0x4e')]({'where':{'membername':_0xd9e743[_0xbb10('0x2a')]},'individualHooks':!![]});}})[_0xbb10('0x11')](function(){if(_0xd9e743){return _0xd9e743[_0xbb10('0x57')]({'raw':!![]});}})[_0xbb10('0x11')](function(_0x27f42f){if(_0xd9e743){if(_0x27f42f){var _0x174395=[];_0x3a9677=_0x27f42f;if(_0x3a9677['length']){for(var _0x387b10=0x0;_0x387b10<_0x3a9677[_0xbb10('0x4f')];_0x387b10++){_0x174395[_0xbb10('0x34')](db[_0xbb10('0x2d')][_0xbb10('0x58')]({'membername':_0xd9e743[_0xbb10('0x2a')],'UserId':_0xd9e743['id'],'queue_name':_0x3a9677[_0x387b10][_0xbb10('0x2a')],'VoiceQueueId':_0x3a9677[_0x387b10]['id'],'interface':_0x1ad2ed,'paused':_0xd9e743[_0xbb10('0x51')]||![],'penalty':_0x3a9677[_0x387b10]['UserVoiceQueue.penalty']||0x0}));}return BPromise[_0xbb10('0x4c')](_0x174395);}}}})[_0xbb10('0x11')](function(){if(_0xd9e743){return db[_0xbb10('0x2e')]['findAll']({'where':{'membername':_0xd9e743['name'],'exitAt':null}});}})['then'](function(_0x23286d){if(_0xd9e743){if(_0x23286d&&_0x23286d['length']){var _0x4e3d6a=[];_0x23286d[_0xbb10('0x33')](function(_0x3ee56b){_0x4e3d6a[_0xbb10('0x34')](_0x3ee56b[_0xbb10('0x44')]({'exitAt':moment()[_0xbb10('0x30')](_0xbb10('0x38'))}));});return BPromise[_0xbb10('0x4c')](_0x4e3d6a);}}})[_0xbb10('0x11')](function(_0x188b97){if(_0xd9e743){var _0x5206e1=[];var _0x318a14=[];var _0x1351eb=utils[_0xbb10('0x32')]();var _0x35b811={'membername':_0xd9e743['name'],'interface':_0x1ad2ed,'enterAt':moment()['format'](_0xbb10('0x38')),'role':_0xd9e743[_0xbb10('0x2b')],'internal':_0xd9e743[_0xbb10('0x3b')]};_0x1351eb[_0xbb10('0x33')](function(_0x5ee705){_0x5206e1[_0xbb10('0x34')](_[_0xbb10('0x59')]({'channel':_0x5ee705,'type':_0xbb10('0x5a'),'data1':_0xbb10('0x5b'),'data2':_0x1ad2ed},_0x35b811));if(_0xd9e743[_0xbb10('0x51')]){_0x318a14['push'](_['merge']({'channel':_0x5ee705,'type':_0xbb10('0x37'),'data1':_0xbb10('0x5c')},_0x35b811));}});return db[_0xbb10('0x2e')]['bulkCreate'](_0x5206e1[_0xbb10('0x5d')](_0x318a14),{'individualHooks':!![]});}})[_0xbb10('0x11')](function(){if(_0xd9e743){return _0xd9e743['update']({'online':!![],'lastLoginAt':moment()['format'](_0xbb10('0x38')),'voicePause':_0xd9e743[_0xbb10('0x51')]||![],'mailPause':_0xd9e743[_0xbb10('0x51')]||![],'chatPause':_0xd9e743['loginInPause']||![],'faxPause':_0xd9e743[_0xbb10('0x51')]||![],'smsPause':_0xd9e743[_0xbb10('0x51')]||![],'openchannelPause':_0xd9e743[_0xbb10('0x51')]||![],'pauseType':_0xd9e743[_0xbb10('0x51')]?_0xbb10('0x5c'):null,'lastPauseAt':moment()[_0xbb10('0x30')](_0xbb10('0x38')),'interface':_0x1ad2ed});}})[_0xbb10('0x11')](function(_0x3e6246){_0x46f462(_0x3e6246);})['catch'](function(_0x3367d4){_0x1b11c0(_0x5cd089[_0xbb10('0x17')](0x1f4,_0x3367d4[_0xbb10('0x1a')]));});});};
\ No newline at end of file
index a1d3579..25f3e12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x45aa=['removeListener','register','user:','./user.events','save','update','emit'];(function(_0x4282f6,_0x2a7d81){var _0x66386c=function(_0x2eb517){while(--_0x2eb517){_0x4282f6['push'](_0x4282f6['shift']());}};_0x66386c(++_0x2a7d81);}(_0x45aa,0xff));var _0xa45a=function(_0x30347c,_0x4d6c70){_0x30347c=_0x30347c-0x0;var _0x12f64c=_0x45aa[_0x30347c];return _0x12f64c;};'use strict';var UserEvents=require(_0xa45a('0x0'));var events=[_0xa45a('0x1'),'remove',_0xa45a('0x2')];function createListener(_0x4ffaa0,_0x38696b){return function(_0x452451){_0x38696b[_0xa45a('0x3')](_0x4ffaa0,_0x452451);};}function removeListener(_0x58641e,_0x23a2c1){return function(){UserEvents[_0xa45a('0x4')](_0x58641e,_0x23a2c1);};}exports[_0xa45a('0x5')]=function(_0xcc0f4b){for(var _0x1c3bb5=0x0,_0xdd9503=events['length'];_0x1c3bb5<_0xdd9503;_0x1c3bb5++){var _0x3e48ae=events[_0x1c3bb5];var _0x306d6c=createListener(_0xa45a('0x6')+_0x3e48ae,_0xcc0f4b);UserEvents['on'](_0x3e48ae,_0x306d6c);}};
\ No newline at end of file
+var _0x6b67=['register','length','user:','./user.events','save'];(function(_0x109647,_0xf32e0){var _0xae9526=function(_0x58519b){while(--_0x58519b){_0x109647['push'](_0x109647['shift']());}};_0xae9526(++_0xf32e0);}(_0x6b67,0x94));var _0x76b6=function(_0x36921f,_0x3d8888){_0x36921f=_0x36921f-0x0;var _0x2a20bb=_0x6b67[_0x36921f];return _0x2a20bb;};'use strict';var UserEvents=require(_0x76b6('0x0'));var events=[_0x76b6('0x1'),'remove','update'];function createListener(_0x4ba072,_0x1418a5){return function(_0x868402){_0x1418a5['emit'](_0x4ba072,_0x868402);};}function removeListener(_0x35b6b2,_0x1c23ca){return function(){UserEvents['removeListener'](_0x35b6b2,_0x1c23ca);};}exports[_0x76b6('0x2')]=function(_0x4bd918){for(var _0x3e1700=0x0,_0x190f42=events[_0x76b6('0x3')];_0x3e1700<_0x190f42;_0x3e1700++){var _0x2f96e9=events[_0x3e1700];var _0x1e1952=createListener(_0x76b6('0x4')+_0x2f96e9,_0x4bd918);UserEvents['on'](_0x2f96e9,_0x1e1952);}};
\ No newline at end of file
index 5e2e7eb..fda54b4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1115=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','util','path','connect-timeout'];(function(_0x501510,_0x61caa9){var _0x1e6ee5=function(_0x32845b){while(--_0x32845b){_0x501510['push'](_0x501510['shift']());}};_0x1e6ee5(++_0x61caa9);}(_0x1115,0x1b6));var _0x5111=function(_0x4e4f5d,_0x2f873f){_0x4e4f5d=_0x4e4f5d-0x0;var _0x1a9b69=_0x1115[_0x4e4f5d];return _0x1a9b69;};'use strict';var multer=require('multer');var util=require(_0x5111('0x0'));var path=require(_0x5111('0x1'));var timeout=require(_0x5111('0x2'));var express=require(_0x5111('0x3'));var router=express[_0x5111('0x4')]();var auth=require(_0x5111('0x5'));var interaction=require(_0x5111('0x6'));var config=require(_0x5111('0x7'));module[_0x5111('0x8')]=router;
\ No newline at end of file
+var _0x202a=['Router','exports','util','path','connect-timeout'];(function(_0x96a02,_0x3a40bc){var _0x2c6037=function(_0x4f5f76){while(--_0x4f5f76){_0x96a02['push'](_0x96a02['shift']());}};_0x2c6037(++_0x3a40bc);}(_0x202a,0xc0));var _0xa202=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x202a[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require('multer');var util=require(_0xa202('0x0'));var path=require(_0xa202('0x1'));var timeout=require(_0xa202('0x2'));var express=require('express');var router=express[_0xa202('0x3')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');module[_0xa202('0x4')]=router;
\ No newline at end of file
index 09925e5..98f77c8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x294b=['INTEGER','exports'];(function(_0x218ca4,_0x41cc40){var _0x1b3ff9=function(_0x5003cd){while(--_0x5003cd){_0x218ca4['push'](_0x218ca4['shift']());}};_0x1b3ff9(++_0x41cc40);}(_0x294b,0x1c7));var _0xb294=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x294b[_0x3dd15e];return _0x231fd0;};'use strict';var Sequelize=require('sequelize');module[_0xb294('0x0')]={'penalty':{'type':Sequelize[_0xb294('0x1')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xfc99=['INTEGER'];(function(_0x43cf0c,_0x3efe0a){var _0x24dd16=function(_0x41ddbd){while(--_0x41ddbd){_0x43cf0c['push'](_0x43cf0c['shift']());}};_0x24dd16(++_0x3efe0a);}(_0xfc99,0x117));var _0x9fc9=function(_0x4e91ff,_0x4130d6){_0x4e91ff=_0x4e91ff-0x0;var _0x179d63=_0xfc99[_0x4e91ff];return _0x179d63;};'use strict';var Sequelize=require('sequelize');module['exports']={'penalty':{'type':Sequelize[_0x9fc9('0x0')],'defaultValue':0x0}};
\ No newline at end of file
index e009198..aa94729 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdc9b=['lodash','util','../../config/logger','moment','bluebird','exports','define','UserChatQueue'];(function(_0x2ba8fc,_0x166587){var _0x19bc2d=function(_0x2bf68a){while(--_0x2bf68a){_0x2ba8fc['push'](_0x2ba8fc['shift']());}};_0x19bc2d(++_0x166587);}(_0xdc9b,0x70));var _0xbdc9=function(_0x306fb9,_0xb83470){_0x306fb9=_0x306fb9-0x0;var _0x54fa6e=_0xdc9b[_0x306fb9];return _0x54fa6e;};'use strict';var _=require(_0xbdc9('0x0'));var util=require(_0xbdc9('0x1'));var logger=require(_0xbdc9('0x2'))('api');var moment=require(_0xbdc9('0x3'));var BPromise=require(_0xbdc9('0x4'));var rp=require('request-promise');var attributes=require('./userChatQueue.attributes');module[_0xbdc9('0x5')]=function(_0x28fa82,_0x599fd5){return _0x28fa82[_0xbdc9('0x6')](_0xbdc9('0x7'),attributes,{'tableName':'user_has_chat_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x93e9=['request-promise','define','UserChatQueue','user_has_chat_queues','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x4b369d,_0x265eb8){var _0x571a98=function(_0x56341a){while(--_0x56341a){_0x4b369d['push'](_0x4b369d['shift']());}};_0x571a98(++_0x265eb8);}(_0x93e9,0xcc));var _0x993e=function(_0x361945,_0x5a1358){_0x361945=_0x361945-0x0;var _0x14e349=_0x93e9[_0x361945];return _0x14e349;};'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 attributes=require('./userChatQueue.attributes');module['exports']=function(_0x1b762e,_0x255045){return _0x1b762e[_0x993e('0x7')](_0x993e('0x8'),attributes,{'tableName':_0x993e('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ff9631a..5e55465 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x24e2=['request','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','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','client','http'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x24e2,0x109));var _0x224e=function(_0x5e5dd2,_0x3729d1){_0x5e5dd2=_0x5e5dd2-0x0;var _0x13af8e=_0x24e2[_0x5e5dd2];return _0x13af8e;};'use strict';var _=require(_0x224e('0x0'));var util=require(_0x224e('0x1'));var moment=require(_0x224e('0x2'));var BPromise=require('bluebird');var rs=require(_0x224e('0x3'));var fs=require('fs');var Redis=require(_0x224e('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x224e('0x5'));var logger=require(_0x224e('0x6'))(_0x224e('0x7'));var config=require(_0x224e('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x224e('0x9')][_0x224e('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x6500fb,_0x3a4aae,_0x61249e){return new BPromise(function(_0x4048dd,_0x30c83d){return client[_0x224e('0xb')](_0x6500fb,_0x61249e)[_0x224e('0xc')](function(_0x5b810b){logger[_0x224e('0xd')](_0x224e('0xe'),_0x3a4aae,_0x224e('0xf'));logger['debug'](_0x224e('0x10'),_0x3a4aae,_0x224e('0xf'),JSON[_0x224e('0x11')](_0x5b810b));if(_0x5b810b[_0x224e('0x12')]){if(_0x5b810b[_0x224e('0x12')][_0x224e('0x13')]===0x1f4){logger[_0x224e('0x12')]('UserChatQueue,\x20%s,\x20%s',_0x3a4aae,_0x5b810b[_0x224e('0x12')]['message']);return _0x30c83d(_0x5b810b[_0x224e('0x12')]['message']);}logger[_0x224e('0x12')](_0x224e('0xe'),_0x3a4aae,_0x5b810b[_0x224e('0x12')][_0x224e('0x14')]);return _0x4048dd(_0x5b810b[_0x224e('0x12')]['message']);}else{logger[_0x224e('0xd')](_0x224e('0xe'),_0x3a4aae,'request\x20sent');_0x4048dd(_0x5b810b[_0x224e('0x15')][_0x224e('0x14')]);}})[_0x224e('0x16')](function(_0x469128){logger[_0x224e('0x12')](_0x224e('0xe'),_0x3a4aae,_0x469128);_0x30c83d(_0x469128);});});}
\ No newline at end of file
+var _0x5d2f=['catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/environment','client','http','request','then','info','debug','UserChatQueue,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','UserChatQueue,\x20%s,\x20%s','result'];(function(_0xe947bb,_0x535ce1){var _0x513bb1=function(_0x1f8a8d){while(--_0x1f8a8d){_0xe947bb['push'](_0xe947bb['shift']());}};_0x513bb1(++_0x535ce1);}(_0x5d2f,0x94));var _0xf5d2=function(_0x55bd12,_0x3ccb52){_0x55bd12=_0x55bd12-0x0;var _0x1941dd=_0x5d2f[_0x55bd12];return _0x1941dd;};'use strict';var _=require(_0xf5d2('0x0'));var util=require(_0xf5d2('0x1'));var moment=require(_0xf5d2('0x2'));var BPromise=require(_0xf5d2('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xf5d2('0x4'));var db=require(_0xf5d2('0x5'))['db'];var utils=require(_0xf5d2('0x6'));var logger=require('../../config/logger')('rpc');var config=require(_0xf5d2('0x7'));var jayson=require('jayson/promise');var client=jayson[_0xf5d2('0x8')][_0xf5d2('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x2e85ad,_0x54f480,_0x417fd6){return new BPromise(function(_0x1c36c0,_0x3d9c4d){return client[_0xf5d2('0xa')](_0x2e85ad,_0x417fd6)[_0xf5d2('0xb')](function(_0xf17c47){logger[_0xf5d2('0xc')]('UserChatQueue,\x20%s,\x20%s',_0x54f480,'request\x20sent');logger[_0xf5d2('0xd')](_0xf5d2('0xe'),_0x54f480,_0xf5d2('0xf'),JSON['stringify'](_0xf17c47));if(_0xf17c47['error']){if(_0xf17c47[_0xf5d2('0x10')]['code']===0x1f4){logger[_0xf5d2('0x10')]('UserChatQueue,\x20%s,\x20%s',_0x54f480,_0xf17c47[_0xf5d2('0x10')][_0xf5d2('0x11')]);return _0x3d9c4d(_0xf17c47[_0xf5d2('0x10')][_0xf5d2('0x11')]);}logger[_0xf5d2('0x10')](_0xf5d2('0x12'),_0x54f480,_0xf17c47[_0xf5d2('0x10')][_0xf5d2('0x11')]);return _0x1c36c0(_0xf17c47[_0xf5d2('0x10')][_0xf5d2('0x11')]);}else{logger[_0xf5d2('0xc')](_0xf5d2('0x12'),_0x54f480,_0xf5d2('0xf'));_0x1c36c0(_0xf17c47[_0xf5d2('0x13')][_0xf5d2('0x11')]);}})[_0xf5d2('0x14')](function(_0x1966eb){logger[_0xf5d2('0x10')](_0xf5d2('0x12'),_0x54f480,_0x1966eb);_0x3d9c4d(_0x1966eb);});});}
\ No newline at end of file
index e271e15..6d69f54 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd0a=['../../components/interaction/service','../../config/environment','exports','multer','path','../../components/auth/service'];(function(_0x2726ad,_0x5073b1){var _0xd87993=function(_0x1cb35b){while(--_0x1cb35b){_0x2726ad['push'](_0x2726ad['shift']());}};_0xd87993(++_0x5073b1);}(_0xbd0a,0x1b9));var _0xabd0=function(_0x357d6a,_0x809975){_0x357d6a=_0x357d6a-0x0;var _0x1b682b=_0xbd0a[_0x357d6a];return _0x1b682b;};'use strict';var multer=require(_0xabd0('0x0'));var util=require('util');var path=require(_0xabd0('0x1'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require(_0xabd0('0x2'));var interaction=require(_0xabd0('0x3'));var config=require(_0xabd0('0x4'));module[_0xabd0('0x5')]=router;
\ No newline at end of file
+var _0x2a07=['util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer'];(function(_0x34919b,_0x1e409a){var _0x505b56=function(_0x59986c){while(--_0x59986c){_0x34919b['push'](_0x34919b['shift']());}};_0x505b56(++_0x1e409a);}(_0x2a07,0x74));var _0x72a0=function(_0x4017b0,_0x4347db){_0x4017b0=_0x4017b0-0x0;var _0x5ed4f7=_0x2a07[_0x4017b0];return _0x5ed4f7;};'use strict';var multer=require(_0x72a0('0x0'));var util=require(_0x72a0('0x1'));var path=require(_0x72a0('0x2'));var timeout=require(_0x72a0('0x3'));var express=require(_0x72a0('0x4'));var router=express['Router']();var auth=require(_0x72a0('0x5'));var interaction=require(_0x72a0('0x6'));var config=require(_0x72a0('0x7'));module[_0x72a0('0x8')]=router;
\ No newline at end of file
index 26b93c3..f765036 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf81a=['exports','INTEGER','STRING','sequelize'];(function(_0x2c7ff5,_0x504abe){var _0x42fef4=function(_0x117eec){while(--_0x117eec){_0x2c7ff5['push'](_0x2c7ff5['shift']());}};_0x42fef4(++_0x504abe);}(_0xf81a,0x16b));var _0xaf81=function(_0x2e2449,_0x314168){_0x2e2449=_0x2e2449-0x0;var _0x5491ea=_0xf81a[_0x2e2449];return _0x5491ea;};'use strict';var Sequelize=require(_0xaf81('0x0'));module[_0xaf81('0x1')]={'penalty':{'type':Sequelize[_0xaf81('0x2')],'defaultValue':0x0},'assigned':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'queue':{'type':Sequelize[_0xaf81('0x3')]}};
\ No newline at end of file
+var _0xa176=['STRING','sequelize','exports','INTEGER'];(function(_0x9690f3,_0x119b02){var _0xf8b1ad=function(_0x4a88a4){while(--_0x4a88a4){_0x9690f3['push'](_0x9690f3['shift']());}};_0xf8b1ad(++_0x119b02);}(_0xa176,0xf5));var _0x6a17=function(_0x15158e,_0x349933){_0x15158e=_0x15158e-0x0;var _0x487e47=_0xa176[_0x15158e];return _0x487e47;};'use strict';var Sequelize=require(_0x6a17('0x0'));module[_0x6a17('0x1')]={'penalty':{'type':Sequelize[_0x6a17('0x2')],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x6a17('0x2')],'defaultValue':0x0},'queue':{'type':Sequelize[_0x6a17('0x3')]}};
\ No newline at end of file
index 4f6dc31..158f778 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa41a=['moment','bluebird','request-promise','./userFaxQueue.attributes','exports','UserFaxQueue','user_has_fax_queues','lodash','util','api'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0xa41a,0x6b));var _0xaa41=function(_0xb35caa,_0x3d2d7a){_0xb35caa=_0xb35caa-0x0;var _0x3a63da=_0xa41a[_0xb35caa];return _0x3a63da;};'use strict';var _=require(_0xaa41('0x0'));var util=require(_0xaa41('0x1'));var logger=require('../../config/logger')(_0xaa41('0x2'));var moment=require(_0xaa41('0x3'));var BPromise=require(_0xaa41('0x4'));var rp=require(_0xaa41('0x5'));var attributes=require(_0xaa41('0x6'));module[_0xaa41('0x7')]=function(_0x42896b,_0x251efa){return _0x42896b['define'](_0xaa41('0x8'),attributes,{'tableName':_0xaa41('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xb66c=['exports','define','lodash','../../config/logger','moment','bluebird','request-promise'];(function(_0x36c5b0,_0x5001da){var _0xf19333=function(_0x1e880a){while(--_0x1e880a){_0x36c5b0['push'](_0x36c5b0['shift']());}};_0xf19333(++_0x5001da);}(_0xb66c,0x175));var _0xcb66=function(_0x1c90d1,_0x27b30a){_0x1c90d1=_0x1c90d1-0x0;var _0xce788=_0xb66c[_0x1c90d1];return _0xce788;};'use strict';var _=require(_0xcb66('0x0'));var util=require('util');var logger=require(_0xcb66('0x1'))('api');var moment=require(_0xcb66('0x2'));var BPromise=require(_0xcb66('0x3'));var rp=require(_0xcb66('0x4'));var attributes=require('./userFaxQueue.attributes');module[_0xcb66('0x5')]=function(_0x386241,_0x3f7cc7){return _0x386241[_0xcb66('0x6')]('UserFaxQueue',attributes,{'tableName':'user_has_fax_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 40d9899..ddf04b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x17d3=['then','UserFaxQueue,\x20%s,\x20%s','request\x20sent','UserFaxQueue,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','request'];(function(_0x2556ab,_0x148044){var _0x40caa9=function(_0x2f577f){while(--_0x2f577f){_0x2556ab['push'](_0x2556ab['shift']());}};_0x40caa9(++_0x148044);}(_0x17d3,0x121));var _0x317d=function(_0x4e5aeb,_0x28faa1){_0x4e5aeb=_0x4e5aeb-0x0;var _0x9a211d=_0x17d3[_0x4e5aeb];return _0x9a211d;};'use strict';var _=require(_0x317d('0x0'));var util=require(_0x317d('0x1'));var moment=require('moment');var BPromise=require(_0x317d('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x317d('0x3'));var db=require(_0x317d('0x4'))['db'];var utils=require(_0x317d('0x5'));var logger=require(_0x317d('0x6'))(_0x317d('0x7'));var config=require(_0x317d('0x8'));var jayson=require(_0x317d('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x57db30,_0x2e7542,_0xc380f9){return new BPromise(function(_0x2aef0a,_0x437c03){return client[_0x317d('0xa')](_0x57db30,_0xc380f9)[_0x317d('0xb')](function(_0x1713ad){logger['info'](_0x317d('0xc'),_0x2e7542,_0x317d('0xd'));logger['debug'](_0x317d('0xe'),_0x2e7542,_0x317d('0xd'),JSON['stringify'](_0x1713ad));if(_0x1713ad[_0x317d('0xf')]){if(_0x1713ad[_0x317d('0xf')][_0x317d('0x10')]===0x1f4){logger['error'](_0x317d('0xc'),_0x2e7542,_0x1713ad[_0x317d('0xf')][_0x317d('0x11')]);return _0x437c03(_0x1713ad[_0x317d('0xf')][_0x317d('0x11')]);}logger[_0x317d('0xf')](_0x317d('0xc'),_0x2e7542,_0x1713ad[_0x317d('0xf')][_0x317d('0x11')]);return _0x2aef0a(_0x1713ad[_0x317d('0xf')][_0x317d('0x11')]);}else{logger['info'](_0x317d('0xc'),_0x2e7542,_0x317d('0xd'));_0x2aef0a(_0x1713ad[_0x317d('0x12')]['message']);}})[_0x317d('0x13')](function(_0xfd09ca){logger['error'](_0x317d('0xc'),_0x2e7542,_0xfd09ca);_0x437c03(_0xfd09ca);});});}
\ No newline at end of file
+var _0xd025=['ioredis','../../config/logger','rpc','../../config/environment','client','http','request','then','info','UserFaxQueue,\x20%s,\x20%s','UserFaxQueue,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring'];(function(_0x4d2c7e,_0x5df3bc){var _0x1f837f=function(_0xaf0e3b){while(--_0xaf0e3b){_0x4d2c7e['push'](_0x4d2c7e['shift']());}};_0x1f837f(++_0x5df3bc);}(_0xd025,0x145));var _0x5d02=function(_0x448d64,_0x5437bc){_0x448d64=_0x448d64-0x0;var _0x2edd8b=_0xd025[_0x448d64];return _0x2edd8b;};'use strict';var _=require(_0x5d02('0x0'));var util=require(_0x5d02('0x1'));var moment=require(_0x5d02('0x2'));var BPromise=require(_0x5d02('0x3'));var rs=require(_0x5d02('0x4'));var fs=require('fs');var Redis=require(_0x5d02('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x5d02('0x6'))(_0x5d02('0x7'));var config=require(_0x5d02('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x5d02('0x9')][_0x5d02('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x5ba0b8,_0x13b2ad,_0x37a8de){return new BPromise(function(_0x2df627,_0x17c9ac){return client[_0x5d02('0xb')](_0x5ba0b8,_0x37a8de)[_0x5d02('0xc')](function(_0x2e86d2){logger[_0x5d02('0xd')](_0x5d02('0xe'),_0x13b2ad,'request\x20sent');logger['debug'](_0x5d02('0xf'),_0x13b2ad,_0x5d02('0x10'),JSON['stringify'](_0x2e86d2));if(_0x2e86d2[_0x5d02('0x11')]){if(_0x2e86d2[_0x5d02('0x11')][_0x5d02('0x12')]===0x1f4){logger[_0x5d02('0x11')](_0x5d02('0xe'),_0x13b2ad,_0x2e86d2[_0x5d02('0x11')][_0x5d02('0x13')]);return _0x17c9ac(_0x2e86d2[_0x5d02('0x11')]['message']);}logger[_0x5d02('0x11')](_0x5d02('0xe'),_0x13b2ad,_0x2e86d2['error'][_0x5d02('0x13')]);return _0x2df627(_0x2e86d2['error'][_0x5d02('0x13')]);}else{logger[_0x5d02('0xd')](_0x5d02('0xe'),_0x13b2ad,'request\x20sent');_0x2df627(_0x2e86d2[_0x5d02('0x14')][_0x5d02('0x13')]);}})[_0x5d02('0x15')](function(_0x4f892f){logger[_0x5d02('0x11')](_0x5d02('0xe'),_0x13b2ad,_0x4f892f);_0x17c9ac(_0x4f892f);});});}
\ No newline at end of file
index fced771..4e66dc9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4745=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util','path'];(function(_0x563c59,_0x173d2e){var _0x1ef54b=function(_0x35fde2){while(--_0x35fde2){_0x563c59['push'](_0x563c59['shift']());}};_0x1ef54b(++_0x173d2e);}(_0x4745,0x1e7));var _0x5474=function(_0x24237f,_0x4cf32c){_0x24237f=_0x24237f-0x0;var _0x48298e=_0x4745[_0x24237f];return _0x48298e;};'use strict';var multer=require(_0x5474('0x0'));var util=require(_0x5474('0x1'));var path=require(_0x5474('0x2'));var timeout=require(_0x5474('0x3'));var express=require(_0x5474('0x4'));var router=express[_0x5474('0x5')]();var auth=require(_0x5474('0x6'));var interaction=require(_0x5474('0x7'));var config=require(_0x5474('0x8'));module[_0x5474('0x9')]=router;
\ No newline at end of file
+var _0x236d=['multer','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment'];(function(_0x622220,_0x2e874b){var _0x4b371c=function(_0x2b1d24){while(--_0x2b1d24){_0x622220['push'](_0x622220['shift']());}};_0x4b371c(++_0x2e874b);}(_0x236d,0x7e));var _0xd236=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x236d[_0x321bb2];return _0x9c12ed;};'use strict';var multer=require(_0xd236('0x0'));var util=require(_0xd236('0x1'));var path=require('path');var timeout=require(_0xd236('0x2'));var express=require('express');var router=express[_0xd236('0x3')]();var auth=require(_0xd236('0x4'));var interaction=require(_0xd236('0x5'));var config=require(_0xd236('0x6'));module['exports']=router;
\ No newline at end of file
index 4b30c06..893ca24 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x34f7=['sequelize','INTEGER'];(function(_0xa92961,_0x435a27){var _0x40128d=function(_0xdf51ca){while(--_0xdf51ca){_0xa92961['push'](_0xa92961['shift']());}};_0x40128d(++_0x435a27);}(_0x34f7,0x134));var _0x734f=function(_0x637757,_0x517dc1){_0x637757=_0x637757-0x0;var _0x5c6d08=_0x34f7[_0x637757];return _0x5c6d08;};'use strict';var Sequelize=require(_0x734f('0x0'));module['exports']={'penalty':{'type':Sequelize[_0x734f('0x1')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xcfd6=['sequelize','exports','INTEGER'];(function(_0x3f0c03,_0x2425c5){var _0xf99aec=function(_0x35de1c){while(--_0x35de1c){_0x3f0c03['push'](_0x3f0c03['shift']());}};_0xf99aec(++_0x2425c5);}(_0xcfd6,0x1c5));var _0x6cfd=function(_0x2d0ffb,_0xef592d){_0x2d0ffb=_0x2d0ffb-0x0;var _0x3d7ad5=_0xcfd6[_0x2d0ffb];return _0x3d7ad5;};'use strict';var Sequelize=require(_0x6cfd('0x0'));module[_0x6cfd('0x1')]={'penalty':{'type':Sequelize[_0x6cfd('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 55129b4..a1e6957 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5360=['lodash','util','../../config/logger','api','request-promise','exports','user_has_mail_queues'];(function(_0x2ab64d,_0x28393f){var _0x3dd38a=function(_0x622581){while(--_0x622581){_0x2ab64d['push'](_0x2ab64d['shift']());}};_0x3dd38a(++_0x28393f);}(_0x5360,0x157));var _0x0536=function(_0x116d18,_0x4d26a3){_0x116d18=_0x116d18-0x0;var _0x40d426=_0x5360[_0x116d18];return _0x40d426;};'use strict';var _=require(_0x0536('0x0'));var util=require(_0x0536('0x1'));var logger=require(_0x0536('0x2'))(_0x0536('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0x0536('0x4'));var attributes=require('./userMailQueue.attributes');module[_0x0536('0x5')]=function(_0x30dd81,_0x5cdbb2){return _0x30dd81['define']('UserMailQueue',attributes,{'tableName':_0x0536('0x6'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x9db7=['api','bluebird','./userMailQueue.attributes','exports','define','UserMailQueue','user_has_mail_queues','lodash','util','../../config/logger'];(function(_0x3d4583,_0x39d833){var _0x1ad697=function(_0x192825){while(--_0x192825){_0x3d4583['push'](_0x3d4583['shift']());}};_0x1ad697(++_0x39d833);}(_0x9db7,0x1bf));var _0x79db=function(_0x3d2f7c,_0x4a780c){_0x3d2f7c=_0x3d2f7c-0x0;var _0x2b36a1=_0x9db7[_0x3d2f7c];return _0x2b36a1;};'use strict';var _=require(_0x79db('0x0'));var util=require(_0x79db('0x1'));var logger=require(_0x79db('0x2'))(_0x79db('0x3'));var moment=require('moment');var BPromise=require(_0x79db('0x4'));var rp=require('request-promise');var attributes=require(_0x79db('0x5'));module[_0x79db('0x6')]=function(_0x59ad03,_0x12ef88){return _0x59ad03[_0x79db('0x7')](_0x79db('0x8'),attributes,{'tableName':_0x79db('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index a817799..4f63f80 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x504a=['result','catch','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','then','info','UserMailQueue,\x20%s,\x20%s','request\x20sent','debug','UserMailQueue,\x20%s,\x20%s,\x20%s','stringify','error','message'];(function(_0x3c487b,_0x44c5e2){var _0x1d65f6=function(_0x135e6d){while(--_0x135e6d){_0x3c487b['push'](_0x3c487b['shift']());}};_0x1d65f6(++_0x44c5e2);}(_0x504a,0x1ce));var _0xa504=function(_0x1bbda2,_0x3de852){_0x1bbda2=_0x1bbda2-0x0;var _0x4e59f6=_0x504a[_0x1bbda2];return _0x4e59f6;};'use strict';var _=require(_0xa504('0x0'));var util=require('util');var moment=require(_0xa504('0x1'));var BPromise=require(_0xa504('0x2'));var rs=require(_0xa504('0x3'));var fs=require('fs');var Redis=require(_0xa504('0x4'));var db=require(_0xa504('0x5'))['db'];var utils=require(_0xa504('0x6'));var logger=require(_0xa504('0x7'))('rpc');var config=require(_0xa504('0x8'));var jayson=require(_0xa504('0x9'));var client=jayson[_0xa504('0xa')][_0xa504('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x55cbf6,_0x44ca07,_0x518090){return new BPromise(function(_0x1cbe6e,_0x53104f){return client['request'](_0x55cbf6,_0x518090)[_0xa504('0xc')](function(_0x41f1af){logger[_0xa504('0xd')](_0xa504('0xe'),_0x44ca07,_0xa504('0xf'));logger[_0xa504('0x10')](_0xa504('0x11'),_0x44ca07,_0xa504('0xf'),JSON[_0xa504('0x12')](_0x41f1af));if(_0x41f1af['error']){if(_0x41f1af[_0xa504('0x13')]['code']===0x1f4){logger[_0xa504('0x13')](_0xa504('0xe'),_0x44ca07,_0x41f1af[_0xa504('0x13')][_0xa504('0x14')]);return _0x53104f(_0x41f1af['error']['message']);}logger['error']('UserMailQueue,\x20%s,\x20%s',_0x44ca07,_0x41f1af[_0xa504('0x13')][_0xa504('0x14')]);return _0x1cbe6e(_0x41f1af[_0xa504('0x13')]['message']);}else{logger[_0xa504('0xd')](_0xa504('0xe'),_0x44ca07,_0xa504('0xf'));_0x1cbe6e(_0x41f1af[_0xa504('0x15')][_0xa504('0x14')]);}})[_0xa504('0x16')](function(_0x24904e){logger['error'](_0xa504('0xe'),_0x44ca07,_0x24904e);_0x53104f(_0x24904e);});});}
\ No newline at end of file
+var _0xcf78=['../../config/environment','jayson/promise','client','http','then','UserMailQueue,\x20%s,\x20%s','request\x20sent','debug','UserMailQueue,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc'];(function(_0x3cab62,_0x5c3f8b){var _0x29f213=function(_0x48c467){while(--_0x48c467){_0x3cab62['push'](_0x3cab62['shift']());}};_0x29f213(++_0x5c3f8b);}(_0xcf78,0x98));var _0x8cf7=function(_0x5071cd,_0xf7410b){_0x5071cd=_0x5071cd-0x0;var _0x29fc9d=_0xcf78[_0x5071cd];return _0x29fc9d;};'use strict';var _=require(_0x8cf7('0x0'));var util=require(_0x8cf7('0x1'));var moment=require(_0x8cf7('0x2'));var BPromise=require('bluebird');var rs=require(_0x8cf7('0x3'));var fs=require('fs');var Redis=require(_0x8cf7('0x4'));var db=require(_0x8cf7('0x5'))['db'];var utils=require(_0x8cf7('0x6'));var logger=require(_0x8cf7('0x7'))(_0x8cf7('0x8'));var config=require(_0x8cf7('0x9'));var jayson=require(_0x8cf7('0xa'));var client=jayson[_0x8cf7('0xb')][_0x8cf7('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x457d5d,_0x1b3d25,_0x1fd0c0){return new BPromise(function(_0x2e8cff,_0x505a19){return client['request'](_0x457d5d,_0x1fd0c0)[_0x8cf7('0xd')](function(_0x360c97){logger['info'](_0x8cf7('0xe'),_0x1b3d25,_0x8cf7('0xf'));logger[_0x8cf7('0x10')](_0x8cf7('0x11'),_0x1b3d25,_0x8cf7('0xf'),JSON[_0x8cf7('0x12')](_0x360c97));if(_0x360c97[_0x8cf7('0x13')]){if(_0x360c97[_0x8cf7('0x13')][_0x8cf7('0x14')]===0x1f4){logger[_0x8cf7('0x13')]('UserMailQueue,\x20%s,\x20%s',_0x1b3d25,_0x360c97['error'][_0x8cf7('0x15')]);return _0x505a19(_0x360c97[_0x8cf7('0x13')][_0x8cf7('0x15')]);}logger['error'](_0x8cf7('0xe'),_0x1b3d25,_0x360c97[_0x8cf7('0x13')][_0x8cf7('0x15')]);return _0x2e8cff(_0x360c97[_0x8cf7('0x13')][_0x8cf7('0x15')]);}else{logger['info'](_0x8cf7('0xe'),_0x1b3d25,_0x8cf7('0xf'));_0x2e8cff(_0x360c97[_0x8cf7('0x16')]['message']);}})['catch'](function(_0x4fa91b){logger[_0x8cf7('0x13')]('UserMailQueue,\x20%s,\x20%s',_0x1b3d25,_0x4fa91b);_0x505a19(_0x4fa91b);});});}
\ No newline at end of file
index 8480d49..d1efd62 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b1b=['path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','util'];(function(_0x178a19,_0x1d95b3){var _0x48445e=function(_0x2ce9d8){while(--_0x2ce9d8){_0x178a19['push'](_0x178a19['shift']());}};_0x48445e(++_0x1d95b3);}(_0x6b1b,0x1e7));var _0xb6b1=function(_0x1abb09,_0x18ee91){_0x1abb09=_0x1abb09-0x0;var _0xea1c07=_0x6b1b[_0x1abb09];return _0xea1c07;};'use strict';var multer=require('multer');var util=require(_0xb6b1('0x0'));var path=require(_0xb6b1('0x1'));var timeout=require(_0xb6b1('0x2'));var express=require('express');var router=express[_0xb6b1('0x3')]();var auth=require(_0xb6b1('0x4'));var interaction=require(_0xb6b1('0x5'));var config=require(_0xb6b1('0x6'));module[_0xb6b1('0x7')]=router;
\ No newline at end of file
+var _0xef4d=['connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','exports','multer','util','path'];(function(_0x17a744,_0x23d71a){var _0x5ce470=function(_0x3b2386){while(--_0x3b2386){_0x17a744['push'](_0x17a744['shift']());}};_0x5ce470(++_0x23d71a);}(_0xef4d,0x165));var _0xdef4=function(_0x376b45,_0x5964fb){_0x376b45=_0x376b45-0x0;var _0x2341b3=_0xef4d[_0x376b45];return _0x2341b3;};'use strict';var multer=require(_0xdef4('0x0'));var util=require(_0xdef4('0x1'));var path=require(_0xdef4('0x2'));var timeout=require(_0xdef4('0x3'));var express=require(_0xdef4('0x4'));var router=express[_0xdef4('0x5')]();var auth=require(_0xdef4('0x6'));var interaction=require(_0xdef4('0x7'));var config=require(_0xdef4('0x8'));module[_0xdef4('0x9')]=router;
\ No newline at end of file
index 79654ab..9ee976e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xee57=['INTEGER','exports'];(function(_0x4792c8,_0x5158a1){var _0x35edb1=function(_0x2472d3){while(--_0x2472d3){_0x4792c8['push'](_0x4792c8['shift']());}};_0x35edb1(++_0x5158a1);}(_0xee57,0xe3));var _0x7ee5=function(_0x52c78d,_0x47703a){_0x52c78d=_0x52c78d-0x0;var _0x35537b=_0xee57[_0x52c78d];return _0x35537b;};'use strict';var Sequelize=require('sequelize');module[_0x7ee5('0x0')]={'penalty':{'type':Sequelize[_0x7ee5('0x1')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x8794=['INTEGER','sequelize','exports'];(function(_0x540c49,_0x3e88d9){var _0x390f69=function(_0x4cdf60){while(--_0x4cdf60){_0x540c49['push'](_0x540c49['shift']());}};_0x390f69(++_0x3e88d9);}(_0x8794,0xc7));var _0x4879=function(_0x3885cb,_0x469dde){_0x3885cb=_0x3885cb-0x0;var _0x1926ef=_0x8794[_0x3885cb];return _0x1926ef;};'use strict';var Sequelize=require(_0x4879('0x0'));module[_0x4879('0x1')]={'penalty':{'type':Sequelize[_0x4879('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 051b8f8..259b0b6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xace0=['exports','define','UserOpenchannelQueue','util','../../config/logger','bluebird','request-promise'];(function(_0x31ddba,_0x28ec26){var _0x3f014c=function(_0x24aa10){while(--_0x24aa10){_0x31ddba['push'](_0x31ddba['shift']());}};_0x3f014c(++_0x28ec26);}(_0xace0,0x114));var _0x0ace=function(_0x567312,_0x33020e){_0x567312=_0x567312-0x0;var _0xea4df1=_0xace0[_0x567312];return _0xea4df1;};'use strict';var _=require('lodash');var util=require(_0x0ace('0x0'));var logger=require(_0x0ace('0x1'))('api');var moment=require('moment');var BPromise=require(_0x0ace('0x2'));var rp=require(_0x0ace('0x3'));var attributes=require('./userOpenchannelQueue.attributes');module[_0x0ace('0x4')]=function(_0x2eb3a9,_0x1def5e){return _0x2eb3a9[_0x0ace('0x5')](_0x0ace('0x6'),attributes,{'tableName':'user_has_openchannel_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x091a=['bluebird','request-promise','define','UserOpenchannelQueue','user_has_openchannel_queues','../../config/logger','api','moment'];(function(_0x7125b3,_0x84dd7b){var _0x1a71b5=function(_0x193667){while(--_0x193667){_0x7125b3['push'](_0x7125b3['shift']());}};_0x1a71b5(++_0x84dd7b);}(_0x091a,0x65));var _0xa091=function(_0x618414,_0x1a7a60){_0x618414=_0x618414-0x0;var _0x21c19a=_0x091a[_0x618414];return _0x21c19a;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xa091('0x0'))(_0xa091('0x1'));var moment=require(_0xa091('0x2'));var BPromise=require(_0xa091('0x3'));var rp=require(_0xa091('0x4'));var attributes=require('./userOpenchannelQueue.attributes');module['exports']=function(_0x5a171c,_0x11f9a4){return _0x5a171c[_0xa091('0x5')](_0xa091('0x6'),attributes,{'tableName':_0xa091('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 8a28122..9e0983f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x871a=['../../config/environment','jayson/promise','then','info','request\x20sent','debug','UserOpenchannelQueue,\x20%s,\x20%s,\x20%s','stringify','error','UserOpenchannelQueue,\x20%s,\x20%s','message','result','catch','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x5679f4,_0x5ace54){var _0x2f9e94=function(_0x5d5ccb){while(--_0x5d5ccb){_0x5679f4['push'](_0x5679f4['shift']());}};_0x2f9e94(++_0x5ace54);}(_0x871a,0x1db));var _0xa871=function(_0x31c19c,_0xbe4b70){_0x31c19c=_0x31c19c-0x0;var _0x1a87f7=_0x871a[_0x31c19c];return _0x1a87f7;};'use strict';var _=require('lodash');var util=require(_0xa871('0x0'));var moment=require(_0xa871('0x1'));var BPromise=require(_0xa871('0x2'));var rs=require(_0xa871('0x3'));var fs=require('fs');var Redis=require(_0xa871('0x4'));var db=require(_0xa871('0x5'))['db'];var utils=require(_0xa871('0x6'));var logger=require(_0xa871('0x7'))('rpc');var config=require(_0xa871('0x8'));var jayson=require(_0xa871('0x9'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x14194b,_0x570071,_0xbdd83f){return new BPromise(function(_0xafaff3,_0x8ce54){return client['request'](_0x14194b,_0xbdd83f)[_0xa871('0xa')](function(_0x2d0284){logger[_0xa871('0xb')]('UserOpenchannelQueue,\x20%s,\x20%s',_0x570071,_0xa871('0xc'));logger[_0xa871('0xd')](_0xa871('0xe'),_0x570071,_0xa871('0xc'),JSON[_0xa871('0xf')](_0x2d0284));if(_0x2d0284['error']){if(_0x2d0284[_0xa871('0x10')]['code']===0x1f4){logger[_0xa871('0x10')](_0xa871('0x11'),_0x570071,_0x2d0284[_0xa871('0x10')][_0xa871('0x12')]);return _0x8ce54(_0x2d0284['error'][_0xa871('0x12')]);}logger[_0xa871('0x10')](_0xa871('0x11'),_0x570071,_0x2d0284[_0xa871('0x10')]['message']);return _0xafaff3(_0x2d0284['error'][_0xa871('0x12')]);}else{logger['info']('UserOpenchannelQueue,\x20%s,\x20%s',_0x570071,_0xa871('0xc'));_0xafaff3(_0x2d0284[_0xa871('0x13')]['message']);}})[_0xa871('0x14')](function(_0x1697f3){logger[_0xa871('0x10')](_0xa871('0x11'),_0x570071,_0x1697f3);_0x8ce54(_0x1697f3);});});}
\ No newline at end of file
+var _0xac9f=['bluebird','randomstring','../../config/logger','rpc','jayson/promise','client','http','request','UserOpenchannelQueue,\x20%s,\x20%s','request\x20sent','debug','stringify','error','message','info','result','moment'];(function(_0x251dd,_0x337816){var _0x1a421b=function(_0x1674ba){while(--_0x1674ba){_0x251dd['push'](_0x251dd['shift']());}};_0x1a421b(++_0x337816);}(_0xac9f,0x1db));var _0xfac9=function(_0x50358a,_0x3b048d){_0x50358a=_0x50358a-0x0;var _0x15844e=_0xac9f[_0x50358a];return _0x15844e;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xfac9('0x0'));var BPromise=require(_0xfac9('0x1'));var rs=require(_0xfac9('0x2'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xfac9('0x3'))(_0xfac9('0x4'));var config=require('../../config/environment');var jayson=require(_0xfac9('0x5'));var client=jayson[_0xfac9('0x6')][_0xfac9('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x4cf759,_0x9c5758,_0x272959){return new BPromise(function(_0x454cd4,_0x2472f9){return client[_0xfac9('0x8')](_0x4cf759,_0x272959)['then'](function(_0x18fb40){logger['info'](_0xfac9('0x9'),_0x9c5758,_0xfac9('0xa'));logger[_0xfac9('0xb')]('UserOpenchannelQueue,\x20%s,\x20%s,\x20%s',_0x9c5758,_0xfac9('0xa'),JSON[_0xfac9('0xc')](_0x18fb40));if(_0x18fb40[_0xfac9('0xd')]){if(_0x18fb40['error']['code']===0x1f4){logger[_0xfac9('0xd')](_0xfac9('0x9'),_0x9c5758,_0x18fb40[_0xfac9('0xd')]['message']);return _0x2472f9(_0x18fb40[_0xfac9('0xd')][_0xfac9('0xe')]);}logger[_0xfac9('0xd')](_0xfac9('0x9'),_0x9c5758,_0x18fb40[_0xfac9('0xd')][_0xfac9('0xe')]);return _0x454cd4(_0x18fb40['error'][_0xfac9('0xe')]);}else{logger[_0xfac9('0xf')](_0xfac9('0x9'),_0x9c5758,_0xfac9('0xa'));_0x454cd4(_0x18fb40[_0xfac9('0x10')][_0xfac9('0xe')]);}})['catch'](function(_0x38bd6f){logger[_0xfac9('0xd')](_0xfac9('0x9'),_0x9c5758,_0x38bd6f);_0x2472f9(_0x38bd6f);});});}
\ No newline at end of file
index 628dfb8..f6f7f8f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x05b5=['delete','destroy','removeSections','removeResources','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./userProfile.controller','isAuthenticated','index','get','describe','/:id','/:id/resources','post','create','/:id/clone','/:id/sections','addSections','addResources','update'];(function(_0x1fa841,_0x37a70c){var _0x384b67=function(_0x248c40){while(--_0x248c40){_0x1fa841['push'](_0x1fa841['shift']());}};_0x384b67(++_0x37a70c);}(_0x05b5,0xa6));var _0x505b=function(_0x13d07a,_0x41efc3){_0x13d07a=_0x13d07a-0x0;var _0x5ee0ee=_0x05b5[_0x13d07a];return _0x5ee0ee;};'use strict';var multer=require(_0x505b('0x0'));var util=require(_0x505b('0x1'));var path=require(_0x505b('0x2'));var timeout=require(_0x505b('0x3'));var express=require(_0x505b('0x4'));var router=express[_0x505b('0x5')]();var auth=require(_0x505b('0x6'));var interaction=require(_0x505b('0x7'));var config=require(_0x505b('0x8'));var controller=require(_0x505b('0x9'));router['get']('/',auth[_0x505b('0xa')](),controller[_0x505b('0xb')]);router[_0x505b('0xc')]('/describe',auth[_0x505b('0xa')](),controller[_0x505b('0xd')]);router[_0x505b('0xc')](_0x505b('0xe'),auth[_0x505b('0xa')](),controller['show']);router[_0x505b('0xc')](_0x505b('0xf'),auth[_0x505b('0xa')](),controller['getResources']);router[_0x505b('0x10')]('/',auth['isAuthenticated'](),controller[_0x505b('0x11')]);router[_0x505b('0x10')](_0x505b('0x12'),auth[_0x505b('0xa')](),controller['clone']);router[_0x505b('0x10')](_0x505b('0x13'),auth[_0x505b('0xa')](),controller[_0x505b('0x14')]);router[_0x505b('0x10')](_0x505b('0xf'),auth[_0x505b('0xa')](),controller[_0x505b('0x15')]);router['put'](_0x505b('0xe'),auth[_0x505b('0xa')](),controller[_0x505b('0x16')]);router[_0x505b('0x17')](_0x505b('0xe'),auth[_0x505b('0xa')](),controller[_0x505b('0x18')]);router[_0x505b('0x17')](_0x505b('0x13'),auth[_0x505b('0xa')](),controller[_0x505b('0x19')]);router[_0x505b('0x17')](_0x505b('0xf'),auth['isAuthenticated'](),controller[_0x505b('0x1a')]);module['exports']=router;
\ No newline at end of file
+var _0x3a2f=['connect-timeout','../../components/interaction/service','./userProfile.controller','get','isAuthenticated','index','/describe','describe','/:id','getResources','create','post','clone','/:id/sections','addSections','/:id/resources','addResources','put','update','destroy','delete','removeSections','removeResources','exports','util','path'];(function(_0x12e3e3,_0x501eaf){var _0x26602e=function(_0x427882){while(--_0x427882){_0x12e3e3['push'](_0x12e3e3['shift']());}};_0x26602e(++_0x501eaf);}(_0x3a2f,0x16a));var _0xf3a2=function(_0x124a05,_0x14c2e3){_0x124a05=_0x124a05-0x0;var _0x2f4504=_0x3a2f[_0x124a05];return _0x2f4504;};'use strict';var multer=require('multer');var util=require(_0xf3a2('0x0'));var path=require(_0xf3a2('0x1'));var timeout=require(_0xf3a2('0x2'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xf3a2('0x3'));var config=require('../../config/environment');var controller=require(_0xf3a2('0x4'));router[_0xf3a2('0x5')]('/',auth[_0xf3a2('0x6')](),controller[_0xf3a2('0x7')]);router[_0xf3a2('0x5')](_0xf3a2('0x8'),auth[_0xf3a2('0x6')](),controller[_0xf3a2('0x9')]);router[_0xf3a2('0x5')](_0xf3a2('0xa'),auth['isAuthenticated'](),controller['show']);router[_0xf3a2('0x5')]('/:id/resources',auth[_0xf3a2('0x6')](),controller[_0xf3a2('0xb')]);router['post']('/',auth[_0xf3a2('0x6')](),controller[_0xf3a2('0xc')]);router[_0xf3a2('0xd')]('/:id/clone',auth[_0xf3a2('0x6')](),controller[_0xf3a2('0xe')]);router[_0xf3a2('0xd')](_0xf3a2('0xf'),auth[_0xf3a2('0x6')](),controller[_0xf3a2('0x10')]);router[_0xf3a2('0xd')](_0xf3a2('0x11'),auth['isAuthenticated'](),controller[_0xf3a2('0x12')]);router[_0xf3a2('0x13')]('/:id',auth[_0xf3a2('0x6')](),controller[_0xf3a2('0x14')]);router['delete']('/:id',auth[_0xf3a2('0x6')](),controller[_0xf3a2('0x15')]);router[_0xf3a2('0x16')]('/:id/sections',auth[_0xf3a2('0x6')](),controller[_0xf3a2('0x17')]);router[_0xf3a2('0x16')](_0xf3a2('0x11'),auth[_0xf3a2('0x6')](),controller[_0xf3a2('0x18')]);module[_0xf3a2('0x19')]=router;
\ No newline at end of file
index a20edd5..28c61df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fba=['STRING','name','setDataValue','crudPermissions','getDataValue','exports'];(function(_0x14dd47,_0xaafef){var _0x1f1541=function(_0x18d6c3){while(--_0x18d6c3){_0x14dd47['push'](_0x14dd47['shift']());}};_0x1f1541(++_0xaafef);}(_0x5fba,0x1b5));var _0xa5fb=function(_0xcaa0c8,_0xf55b10){_0xcaa0c8=_0xcaa0c8-0x0;var _0x3cfa47=_0x5fba[_0xcaa0c8];return _0x3cfa47;};'use strict';var Sequelize=require('sequelize');module[_0xa5fb('0x0')]={'name':{'type':Sequelize[_0xa5fb('0x1')],'allowNull':![],'unique':_0xa5fb('0x2')},'crudPermissions':{'type':Sequelize['STRING'],'set':function(_0x277122){this[_0xa5fb('0x3')](_0xa5fb('0x4'),_0x277122?_0x277122['join'](''):[]);},'get':function(){return this[_0xa5fb('0x5')](_0xa5fb('0x4'))?this[_0xa5fb('0x5')]('crudPermissions')['split'](''):[];},'allowNull':![],'defaultValue':'r'},'description':{'type':Sequelize[_0xa5fb('0x1')],'allowNull':!![]}};
\ No newline at end of file
+var _0x6c93=['join','getDataValue','STRING','name','setDataValue','crudPermissions'];(function(_0x4e04cd,_0x3293ec){var _0xfe94fc=function(_0x38e872){while(--_0x38e872){_0x4e04cd['push'](_0x4e04cd['shift']());}};_0xfe94fc(++_0x3293ec);}(_0x6c93,0xb6));var _0x36c9=function(_0xb8efe0,_0x1dd3f1){_0xb8efe0=_0xb8efe0-0x0;var _0x2154af=_0x6c93[_0xb8efe0];return _0x2154af;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0x36c9('0x0')],'allowNull':![],'unique':_0x36c9('0x1')},'crudPermissions':{'type':Sequelize['STRING'],'set':function(_0x706b0){this[_0x36c9('0x2')](_0x36c9('0x3'),_0x706b0?_0x706b0[_0x36c9('0x4')](''):[]);},'get':function(){return this['getDataValue'](_0x36c9('0x3'))?this[_0x36c9('0x5')](_0x36c9('0x3'))['split'](''):[];},'allowNull':![],'defaultValue':'r'},'description':{'type':Sequelize[_0x36c9('0x0')],'allowNull':!![]}};
\ No newline at end of file
index c96710f..f18d296 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x719b=['then','destroy','error','stack','name','index','UserProfile','model','query','keys','filters','intersection','fields','attributes','length','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','show','params','create','body','rawAttributes','include','find','omit','createdAt','updatedAt','crudPermissions','transaction','get','UserProfileSection','each','autoAssociation','UserProfileResource','sectionId','userProfileId','Resources','describe','addSections','sequelize','push','removeSections','ids','addResources','bulkCreate','getResources','undefined','Unknown\x20section','mergeResources','childModel','Sequelize','Invalid\x20section\x20\x27','isEmpty','parentSections','findOne','all','ignore','union','hasOwnProperty','resourceFields','resourceIds','forEach','AnalyticExtractedReport','reportType','default','reportId','DefaultReports','custom','CustomReports','CmContact','Tag','Tags','color','tag','ThroughTags','value','resourceId','toLowerCase','squareprojects','SquareProject','odbc','SquareOdbc','squarerecordings','SquareRecording','SquareProjects','projectName','projects','JscriptyProject','contacts','Lists','ListId','CmList','companies','CmCompany','globalcustomfields','CmCustomField','chatqueues','ChatQueue','faxaccounts','FaxAccount','inboundroutes','outboundroutes','contexts','VoiceContext','VoiceMail','voicerecordings','VoiceRecording','membername','User','role','agent','Telephones','telephone','VoiceQueues','queue','VoiceQueue','outbound','VoiceMusicOnHold','VoiceChanSpy','voiceprefixes','ivrcampaigns','Campaign','MailQueue','mailaccounts','MailAccount','mailsubstatuses','openchannelaccounts','SmsQueue','SmsAccount','teams','voicequeues','queuecampaigns','QueueCampaigns','users','telephones','Users','admin','user','Agents','zendeskaccounts','ZendeskAccount','salesforceaccounts','sugarcrmaccounts','SugarcrmAccount','deskaccounts','zohoaccounts','ZohoAccount','vtigeraccounts','cannedanswers','CannedAnswer','Disposition','customdashboards','Dashboard','intervals','Interval','pauses','Pause','scheduler','Schedule','Sound','tags','templates','Template','triggers','Trigger','Trunk','variables','Variable','Plugin','extractedreports','Reports','metrics','AnalyticMetric','html-pdf','request-promise','moment','bluebird','mustache','util','sox','lodash','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','socket.io-emitter','./userProfile.socket','sendStatus','status','end','json','count','offset','limit','set','Content-Range','save','update'];(function(_0x5a8f34,_0x11c27b){var _0x497614=function(_0x2089e3){while(--_0x2089e3){_0x5a8f34['push'](_0x5a8f34['shift']());}};_0x497614(++_0x11c27b);}(_0x719b,0x19d));var _0xb719=function(_0x32f7f5,_0x363170){_0x32f7f5=_0x32f7f5-0x0;var _0x1c7f8=_0x719b[_0x32f7f5];return _0x1c7f8;};'use strict';var pdf=require(_0xb719('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0xb719('0x1'));var moment=require(_0xb719('0x2'));var BPromise=require(_0xb719('0x3'));var Mustache=require(_0xb719('0x4'));var util=require(_0xb719('0x5'));var path=require('path');var sox=require(_0xb719('0x6'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xb719('0x7'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xb719('0x8'));var deskjs=require(_0xb719('0x9'));var toCsv=require(_0xb719('0xa'));var querystring=require(_0xb719('0xb'));var Papa=require(_0xb719('0xc'));var authService=require(_0xb719('0xd'));var hardwareService=require(_0xb719('0xe'));var Redis=require(_0xb719('0xf'));var qs=require(_0xb719('0x10'));var logger=require(_0xb719('0x11'))(_0xb719('0x12'));var utils=require(_0xb719('0x13'));var config=require(_0xb719('0x14'));var db=require(_0xb719('0x15'))['db'];config[_0xb719('0x16')]=_[_0xb719('0x17')](config[_0xb719('0x16')],{'host':'localhost','port':0x18eb});var socket=require(_0xb719('0x18'))(new Redis(config[_0xb719('0x16')]));require(_0xb719('0x19'))['register'](socket);function respondWithStatusCode(_0x4fd44c,_0x48add7){_0x48add7=_0x48add7||0xcc;return function(_0xddec92){if(_0xddec92){return _0x4fd44c[_0xb719('0x1a')](_0x48add7);}return _0x4fd44c[_0xb719('0x1b')](_0x48add7)[_0xb719('0x1c')]();};}function respondWithResult(_0x163b77,_0x36e066){_0x36e066=_0x36e066||0xc8;return function(_0x1ad78b){if(_0x1ad78b){return _0x163b77[_0xb719('0x1b')](_0x36e066)[_0xb719('0x1d')](_0x1ad78b);}};}function respondWithFilteredResult(_0x2f8441,_0x93fbb4){return function(_0x807c4a){if(_0x807c4a){var _0x49a4b0=_0x807c4a[_0xb719('0x1e')],_0x4723a2=_0x93fbb4[_0xb719('0x1f')],_0x52cb8f=_0x93fbb4['offset']+_0x93fbb4[_0xb719('0x20')],_0x7792e8;if(_0x52cb8f>=_0x49a4b0){_0x52cb8f=_0x49a4b0;_0x7792e8=0xc8;}else{_0x7792e8=0xce;}_0x2f8441['status'](_0x7792e8);return _0x2f8441[_0xb719('0x21')](_0xb719('0x22'),_0x4723a2+'-'+_0x52cb8f+'/'+_0x49a4b0)[_0xb719('0x1d')](_0x807c4a);}return null;};}function patchUpdates(_0x380371){return function(_0x599c84){try{jsonpatch['apply'](_0x599c84,_0x380371,!![]);}catch(_0x245968){return BPromise['reject'](_0x245968);}return _0x599c84[_0xb719('0x23')]();};}function saveUpdates(_0x4b722c,_0x41d232){return function(_0x1c5388){if(_0x1c5388){return _0x1c5388[_0xb719('0x24')](_0x4b722c)[_0xb719('0x25')](function(_0x3317e3){return _0x3317e3;});}return null;};}function removeEntity(_0x3efff9,_0x5db5a2){return function(_0x4406db){if(_0x4406db){return _0x4406db[_0xb719('0x26')]()[_0xb719('0x25')](function(){_0x3efff9[_0xb719('0x1b')](0xcc)[_0xb719('0x1c')]();});}};}function handleEntityNotFound(_0x3cdb6e,_0x74934e){return function(_0x522f0e){if(!_0x522f0e){_0x3cdb6e[_0xb719('0x1a')](0x194);}return _0x522f0e;};}function handleError(_0x36de9a,_0x1ddb2c){_0x1ddb2c=_0x1ddb2c||0x1f4;return function(_0x505238){logger[_0xb719('0x27')](_0x505238[_0xb719('0x28')]);if(_0x505238[_0xb719('0x29')]){delete _0x505238[_0xb719('0x29')];}_0x36de9a[_0xb719('0x1b')](_0x1ddb2c)['send'](_0x505238);};}exports[_0xb719('0x2a')]=function(_0x4436a2,_0x3a19c7){var _0x454fb1={},_0x15516f={},_0x3640e4={'count':0x0,'rows':[]};var _0x445f93=db[_0xb719('0x2b')]['rawAttributes'];_0x15516f[_0xb719('0x2c')]=_['keys'](_0x445f93);_0x15516f[_0xb719('0x2d')]=_[_0xb719('0x2e')](_0x4436a2[_0xb719('0x2d')]);_0x15516f[_0xb719('0x2f')]=_[_0xb719('0x30')](_0x15516f[_0xb719('0x2c')],_0x15516f[_0xb719('0x2d')]);_0x454fb1['attributes']=_[_0xb719('0x30')](_0x15516f[_0xb719('0x2c')],qs[_0xb719('0x31')](_0x4436a2['query'][_0xb719('0x31')]));_0x454fb1[_0xb719('0x32')]=_0x454fb1['attributes'][_0xb719('0x33')]?_0x454fb1[_0xb719('0x32')]:_0x15516f[_0xb719('0x2c')];if(!_0x4436a2[_0xb719('0x2d')]['hasOwnProperty'](_0xb719('0x34'))){_0x454fb1[_0xb719('0x20')]=qs[_0xb719('0x20')](_0x4436a2[_0xb719('0x2d')][_0xb719('0x20')]);_0x454fb1['offset']=qs['offset'](_0x4436a2[_0xb719('0x2d')][_0xb719('0x1f')]);}_0x454fb1[_0xb719('0x35')]=qs[_0xb719('0x36')](_0x4436a2[_0xb719('0x2d')][_0xb719('0x36')]);_0x454fb1[_0xb719('0x37')]=qs[_0xb719('0x2f')](_[_0xb719('0x38')](_0x4436a2[_0xb719('0x2d')],_0x15516f['filters']));if(_0x4436a2[_0xb719('0x2d')][_0xb719('0x39')]){_0x454fb1[_0xb719('0x37')]=_[_0xb719('0x3a')](_0x454fb1['where'],{'$or':_[_0xb719('0x3b')](_0x445f93,function(_0x23dbb9){if(_0x23dbb9[_0xb719('0x3c')][_0xb719('0x3d')]!==_0xb719('0x3e')){var _0x24c538={};_0x24c538[_0x23dbb9[_0xb719('0x3f')]]={'$like':'%'+_0x4436a2['query'][_0xb719('0x39')]+'%'};return _0x24c538;}})});}_0x454fb1=_['merge']({},_0x454fb1,_0x4436a2[_0xb719('0x40')]);var _0x56c71e={'where':_0x454fb1['where']};return db[_0xb719('0x2b')][_0xb719('0x1e')](_0x56c71e)['then'](function(_0x13a254){_0x3640e4['count']=_0x13a254;if(_0x4436a2[_0xb719('0x2d')][_0xb719('0x41')]){_0x454fb1['include']=[{'all':!![]}];}return db[_0xb719('0x2b')][_0xb719('0x42')](_0x454fb1);})['then'](function(_0x86313){_0x3640e4[_0xb719('0x43')]=_0x86313;return _0x3640e4;})[_0xb719('0x25')](respondWithFilteredResult(_0x3a19c7,_0x454fb1))[_0xb719('0x44')](handleError(_0x3a19c7,null));};exports[_0xb719('0x45')]=function(_0x3c8c5b,_0x57b913){var _0x39ac23={'raw':![],'where':{'id':_0x3c8c5b[_0xb719('0x46')]['id']}},_0x4f20f1={};_0x4f20f1[_0xb719('0x2c')]=_['keys'](db['UserProfile']['rawAttributes']);_0x4f20f1[_0xb719('0x2d')]=_['keys'](_0x3c8c5b[_0xb719('0x2d')]);_0x4f20f1[_0xb719('0x2f')]=_['intersection'](_0x4f20f1[_0xb719('0x2c')],_0x4f20f1[_0xb719('0x2d')]);_0x39ac23['attributes']=_[_0xb719('0x30')](_0x4f20f1[_0xb719('0x2c')],qs['fields'](_0x3c8c5b[_0xb719('0x2d')]['fields']));_0x39ac23[_0xb719('0x32')]=_0x39ac23[_0xb719('0x32')]['length']?_0x39ac23[_0xb719('0x32')]:_0x4f20f1[_0xb719('0x2c')];if(_0x3c8c5b['query'][_0xb719('0x41')]){_0x39ac23['include']=[{'all':!![]}];}_0x39ac23=_[_0xb719('0x3a')]({},_0x39ac23,_0x3c8c5b['options']);return db[_0xb719('0x2b')]['find'](_0x39ac23)[_0xb719('0x25')](handleEntityNotFound(_0x57b913,null))['then'](respondWithResult(_0x57b913,null))[_0xb719('0x44')](handleError(_0x57b913,null));};exports['create']=function(_0x45a66b,_0x236ab7){return db[_0xb719('0x2b')][_0xb719('0x47')](_0x45a66b[_0xb719('0x48')],{})[_0xb719('0x25')](respondWithResult(_0x236ab7,0xc9))[_0xb719('0x44')](handleError(_0x236ab7,null));};exports['clone']=function(_0xc10705,_0x1742b9){var _0x38cc58={'raw':![],'where':{'id':_0xc10705[_0xb719('0x46')]['id']}},_0x46405c={};_0x46405c[_0xb719('0x2c')]=_['keys'](db[_0xb719('0x2b')][_0xb719('0x49')]);_0x38cc58[_0xb719('0x32')]=_[_0xb719('0x30')](_0x46405c[_0xb719('0x2c')],qs[_0xb719('0x31')](_0xc10705['query'][_0xb719('0x31')]));_0x38cc58['attributes']=_0x38cc58[_0xb719('0x32')][_0xb719('0x33')]?_0x38cc58[_0xb719('0x32')]:_0x46405c[_0xb719('0x2c')];if(_0xc10705[_0xb719('0x2d')][_0xb719('0x41')]){_0x38cc58[_0xb719('0x4a')]=[{'all':!![]}];}_0x38cc58=_['merge']({},_0x38cc58,_0xc10705[_0xb719('0x40')]);return db[_0xb719('0x2b')][_0xb719('0x4b')](_0x38cc58)[_0xb719('0x25')](handleEntityNotFound(_0x1742b9,null))[_0xb719('0x25')](function(_0x16567a){if(_0x16567a){var _0xb1f2c2=_0x16567a['get']({'plain':!![]});_0xb1f2c2=qs[_0xb719('0x4c')](_0xb1f2c2,['id',_0xb719('0x4d'),_0xb719('0x4e'),_0xb719('0x4f')]);_0xc10705[_0xb719('0x48')]=_[_0xb719('0x4c')](_0xc10705['body'],['id',_0xb719('0x4d'),'updatedAt']);return db['sequelize'][_0xb719('0x50')](function(_0x3972a1){return db['UserProfile'][_0xb719('0x47')](_[_0xb719('0x3a')](_0xb1f2c2,_0xc10705[_0xb719('0x48')]),{'include':_0xc10705['query']['includeAll']?[{'all':!![]}]:undefined,'transaction':_0x3972a1})[_0xb719('0x25')](function(_0x1a3e03){var _0x3ade37=_0x1a3e03[_0xb719('0x51')]({'plain':!![]});return db[_0xb719('0x52')][_0xb719('0x42')]({'where':{'userProfileId':_0xc10705['params']['id']},'raw':!![]})[_0xb719('0x25')](function(_0x2bbce2){if(_0x2bbce2){return BPromise[_0xb719('0x53')](_0x2bbce2,function(_0x53deff){return new BPromise(function(_0x3dfde2,_0x18f927){if(_0x53deff[_0xb719('0x54')]===null||_0x53deff[_0xb719('0x54')]===0x1)_0x3dfde2(null);return db[_0xb719('0x55')][_0xb719('0x42')]({'where':{'sectionId':_0x53deff['id']},'raw':!![]})[_0xb719('0x25')](function(_0x3da39e){var _0x478a9c=_[_0xb719('0x3b')](_0x3da39e,function(_0x68107f){return qs['omit'](_0x68107f,['id','createdAt',_0xb719('0x4e'),_0xb719('0x56')]);});_0x3dfde2(_0x478a9c);})[_0xb719('0x44')](function(_0xc22787){_0x18f927(_0xc22787);});})['then'](function(_0x24fb33){var _0x421e47=qs[_0xb719('0x4c')](_0x53deff,['id',_0xb719('0x4d'),_0xb719('0x4e')]);_0x421e47[_0xb719('0x57')]=_0x3ade37['id'];if(_0x24fb33)_0x421e47[_0xb719('0x58')]=_0x24fb33;return _0x421e47;})[_0xb719('0x25')](function(_0x29be44){return db['UserProfileSection'][_0xb719('0x47')](_0x29be44,{'include':[{'model':db['UserProfileResource'],'as':_0xb719('0x58')}],'raw':!![],'transaction':_0x3972a1});});})[_0xb719('0x25')](function(){return _0x3ade37;});}});});});}})['then'](respondWithResult(_0x1742b9,0xc9))[_0xb719('0x44')](handleError(_0x1742b9,null));};exports[_0xb719('0x24')]=function(_0x58e2cb,_0x4c979d){if(_0x58e2cb[_0xb719('0x48')]['id']){delete _0x58e2cb['body']['id'];}return db[_0xb719('0x2b')][_0xb719('0x4b')]({'where':{'id':_0x58e2cb[_0xb719('0x46')]['id']}})['then'](handleEntityNotFound(_0x4c979d,null))['then'](saveUpdates(_0x58e2cb[_0xb719('0x48')],null))[_0xb719('0x25')](respondWithResult(_0x4c979d,null))['catch'](handleError(_0x4c979d,null));};exports['destroy']=function(_0x243cc4,_0x32fc02){return db[_0xb719('0x2b')]['find']({'where':{'id':_0x243cc4[_0xb719('0x46')]['id']}})['then'](handleEntityNotFound(_0x32fc02,null))[_0xb719('0x25')](removeEntity(_0x32fc02,null))[_0xb719('0x44')](handleError(_0x32fc02,null));};exports[_0xb719('0x59')]=function(_0x2ec4a6,_0x4739d3){return db[_0xb719('0x2b')][_0xb719('0x59')]()[_0xb719('0x25')](respondWithResult(_0x4739d3,null))[_0xb719('0x44')](handleError(_0x4739d3,null));};exports[_0xb719('0x5a')]=function(_0x41e319,_0x3862a5){var _0x104da6=_0x41e319['body'];return db['UserProfile'][_0xb719('0x4b')]({'where':{'id':_0x41e319['params']['id']}})[_0xb719('0x25')](handleEntityNotFound(_0x3862a5,null))[_0xb719('0x25')](function(_0x4194c1){if(_0x4194c1){return db[_0xb719('0x5b')]['transaction'](function(_0x3a7c6e){return db['UserProfileSection']['destroy']({'where':{'userProfileId':_0x41e319[_0xb719('0x46')]['id'],'sectionId':_[_0xb719('0x3b')](_0x104da6,function(_0x31ab3b){return _0x31ab3b['sectionId'];})},'transaction':_0x3a7c6e})['then'](function(){var _0x2883f3=_['map'](_0x104da6,function(_0x4aa201){_0x4aa201[_0xb719('0x57')]=_0x41e319[_0xb719('0x46')]['id'];return _0x4aa201;});var _0x3645c9=[];return BPromise[_0xb719('0x53')](_0x2883f3,function(_0x3f687c){return db[_0xb719('0x52')][_0xb719('0x47')](_0x3f687c,{'include':[{'model':db[_0xb719('0x55')],'as':_0xb719('0x58')}],'raw':!![],'transaction':_0x3a7c6e})[_0xb719('0x25')](function(_0x11cde7){_0x3645c9[_0xb719('0x5c')](_0x11cde7[_0xb719('0x51')]({'plain':!![]}));});})[_0xb719('0x25')](function(){return _0x3645c9;});});});}})[_0xb719('0x25')](function(_0x380a64){return _0x380a64;})[_0xb719('0x25')](respondWithResult(_0x3862a5,null))[_0xb719('0x44')](handleError(_0x3862a5,null));};exports[_0xb719('0x5d')]=function(_0x1b0b1e,_0x34633a){var _0xcd2898;return db['UserProfile'][_0xb719('0x4b')]({'where':{'id':_0x1b0b1e[_0xb719('0x46')]['id']},'attributes':['id',_0xb719('0x29')]})[_0xb719('0x25')](handleEntityNotFound(_0x34633a,null))[_0xb719('0x25')](function(_0x20acfc){if(_0x20acfc){_0xcd2898=_0x20acfc;return db['UserProfileSection'][_0xb719('0x26')]({'where':{'userProfileId':_0x1b0b1e[_0xb719('0x46')]['id'],'sectionId':_0x1b0b1e['query'][_0xb719('0x5e')]}});}})[_0xb719('0x25')](function(){return _0xcd2898;})['then'](respondWithStatusCode(_0x34633a,null))['catch'](handleError(_0x34633a,null));};exports[_0xb719('0x5f')]=function(_0xace555,_0x5d84e9){return db[_0xb719('0x2b')][_0xb719('0x4b')]({'where':{'id':_0xace555[_0xb719('0x46')]['id']}})[_0xb719('0x25')](handleEntityNotFound(_0x5d84e9,null))[_0xb719('0x25')](function(_0x4cab5f){if(_0x4cab5f){return db[_0xb719('0x5b')]['transaction'](function(_0x246f82){return db[_0xb719('0x52')][_0xb719('0x42')]({'where':{'userProfileId':_0xace555[_0xb719('0x46')]['id']},'attributes':['id'],'raw':!![]})['then'](function(_0x403f1f){if(_0x403f1f){return db[_0xb719('0x52')][_0xb719('0x26')]({'where':{'userProfileId':_0xace555[_0xb719('0x46')]['id'],'id':_[_0xb719('0x3b')](_0x403f1f,function(_0x54b775){return _0x54b775['id'];})},'transaction':_0x246f82});}})[_0xb719('0x25')](function(_0x59bc81){var _0x140147=_[_0xb719('0x3b')](_0xace555['body'],function(_0x3e2e39){_0x3e2e39[_0xb719('0x57')]=_0xace555['params']['id'];return _0x3e2e39;});return db[_0xb719('0x52')][_0xb719('0x60')](_0x140147,{'raw':!![],'transaction':_0x246f82});})[_0xb719('0x25')](function(_0x130648){var _0x286d22=_[_0xb719('0x39')](_[_0xb719('0x3b')](_0x130648,function(_0x11f177){return _0x11f177[_0xb719('0x51')]({'plain':!![]});}),{'includeAll':![]});if(_0x286d22){return db[_0xb719('0x52')][_0xb719('0x42')]({'where':{'userProfileId':_0xace555[_0xb719('0x46')]['id'],'sectionId':_[_0xb719('0x3b')](_0x286d22,function(_0x59cfd3){return _0x59cfd3[_0xb719('0x56')];})},'attributes':['id',_0xb719('0x56')],'raw':!![]})[_0xb719('0x25')](function(_0x22c819){var _0x18cc59=_[_0xb719('0x3b')](_0xace555['body'],function(_0x228781){_0x228781[_0xb719('0x57')]=_0xace555[_0xb719('0x46')]['id'];return _0x228781;});return db[_0xb719('0x55')][_0xb719('0x60')](_0x18cc59,{'raw':!![],'transaction':_0x246f82});});}})[_0xb719('0x44')](handleError(_0x5d84e9,null));});}})[_0xb719('0x25')](function(_0x33de4a){var _0x2470db=_[_0xb719('0x3b')](_0x33de4a,function(_0x30738b){return _0x30738b[_0xb719('0x51')]({'plain':!![]});});})[_0xb719('0x25')](respondWithResult(_0x5d84e9,null))[_0xb719('0x44')](handleError(_0x5d84e9,null));};exports['removeResources']=function(_0x3d301f,_0x540923,_0x2dbae8){var _0x14e75a;return db['UserProfile']['find']({'where':{'id':_0x3d301f[_0xb719('0x46')]['id']}})[_0xb719('0x25')](handleEntityNotFound(_0x540923,null))[_0xb719('0x25')](function(_0x57a93c){if(_0x57a93c){return _0x57a93c['removeResources'](_0x3d301f[_0xb719('0x2d')]['ids']);}})[_0xb719('0x25')](respondWithStatusCode(_0x540923,null))[_0xb719('0x44')](handleError(_0x540923,null));};exports[_0xb719('0x61')]=function(_0x8de7c,_0x2b3be1){var _0x5b0d1c={'raw':![],'where':{}};var _0x57a71d={};var _0x577d78={'count':0x0,'rows':[]};var _0x3f9b7b=_0x8de7c[_0xb719('0x2d')]['section'];if(typeof _0x3f9b7b===_0xb719('0x62')){throw new db['Sequelize']['ValidationError'](_0xb719('0x63'));}var _0x11f399=_0x8de7c[_0xb719('0x2d')][_0xb719('0x64')]||![];var _0x57fb4d=getQueryModels(_0x3f9b7b,_0x11f399);if(typeof _0x57fb4d[_0xb719('0x65')]===_0xb719('0x62')){throw new db[(_0xb719('0x66'))]['ValidationError'](_0xb719('0x67')+_0x3f9b7b+'\x27');}var _0x13087d=[];if(!_[_0xb719('0x68')](_0x57fb4d[_0xb719('0x69')])){_0x13087d=_0x57fb4d['parentSections'];}else{_0x13087d=[{'name':_0x3f9b7b}];}return db[_0xb719('0x2b')][_0xb719('0x6a')]({'where':{'id':_0x8de7c[_0xb719('0x46')]['id']}})[_0xb719('0x25')](handleEntityNotFound(_0x2b3be1,null))[_0xb719('0x25')](function(_0x4ab4ba){if(_0x4ab4ba){var _0x3207b5=[];for(var _0x3b196d=0x0;_0x3b196d<_0x13087d[_0xb719('0x33')];_0x3b196d++){_0x3207b5[_0xb719('0x5c')](db[_0xb719('0x52')]['findOne']({'where':{'userProfileId':_0x4ab4ba['id'],'name':_0x13087d[_0x3b196d][_0xb719('0x29')]},'raw':!![]}));}return BPromise[_0xb719('0x6b')](_0x3207b5);}})['then'](function(_0x49761f){var _0x4fa89f=_[_0xb719('0x39')](_0x49761f,function(_0x3e327c){return _0x3e327c?_0x3e327c:undefined;});var _0xaaeec8=_[_0xb719('0x39')](_0x13087d,[_0xb719('0x6c'),!![]]);var _0xa4c125=_['isEmpty'](_0x4fa89f)&&_['isEmpty'](_0xaaeec8)?null:_[_0xb719('0x6d')](_0xaaeec8,_0x4fa89f);if(_0xa4c125){var _0x35624c=[];for(var _0x22204f=0x0;_0x22204f<_0xa4c125['length'];_0x22204f++){var _0x445f10=_[_0xb719('0x4b')](_0x13087d,function(_0x2f5657){return _0xa4c125[_0x22204f]?_0x2f5657['name']===_0xa4c125[_0x22204f][_0xb719('0x29')]:null;});if(_0x445f10){if(_0xa4c125[_0x22204f][_0xb719('0x6c')]){_0x35624c['push'](getAllResources(_0x57fb4d[_0xb719('0x65')],_0xa4c125[_0x22204f]));}else{if(!_0xa4c125[_0x22204f]['autoAssociation']){_0x35624c[_0xb719('0x5c')](getAllowedResources(_0x445f10,_0xa4c125[_0x22204f]));}else{if(_0x445f10[_0xb719('0x2c')]){_0x35624c[_0xb719('0x5c')](getAllFilteredResources(_0x445f10,_0xa4c125[_0x22204f]));}}}}}return BPromise[_0xb719('0x6b')](_0x35624c);}else{return null;}})[_0xb719('0x25')](function(_0x56829d){var _0x164673=_0x56829d;var _0x291839=null;if(_0x164673){_0x291839=_0x164673['length']===0x1?_0x164673[0x0]:null;}if(_0x291839||_0x164673){var _0x285f99=db[_0x57fb4d['childModel']][_0xb719('0x49')];_0x57a71d['model']=_[_0xb719('0x2e')](_0x285f99);_0x57a71d[_0xb719('0x2d')]=_['keys'](_0x8de7c['query']);_0x57a71d['filters']=_[_0xb719('0x30')](_0x57a71d[_0xb719('0x2c')],_0x57a71d['query']);_0x5b0d1c[_0xb719('0x32')]=_[_0xb719('0x30')](_0x57a71d[_0xb719('0x2c')],qs['fields'](_0x8de7c[_0xb719('0x2d')][_0xb719('0x31')]));_0x5b0d1c[_0xb719('0x32')]=_0x5b0d1c['attributes'][_0xb719('0x33')]?_0x5b0d1c[_0xb719('0x32')]:_0x57a71d[_0xb719('0x2c')];if(!_0x8de7c['query'][_0xb719('0x6e')](_0xb719('0x34'))){_0x5b0d1c[_0xb719('0x20')]=qs['limit'](_0x8de7c[_0xb719('0x2d')][_0xb719('0x20')]);_0x5b0d1c[_0xb719('0x1f')]=qs[_0xb719('0x1f')](_0x8de7c[_0xb719('0x2d')][_0xb719('0x1f')]);}_0x5b0d1c[_0xb719('0x35')]=qs[_0xb719('0x36')](_0x8de7c[_0xb719('0x2d')][_0xb719('0x36')]);_0x5b0d1c[_0xb719('0x37')]=qs['filters'](_[_0xb719('0x38')](_0x8de7c[_0xb719('0x2d')],_0x57a71d[_0xb719('0x2f')]));var _0x35dd61=[];if(_0x291839){var _0x1addb2=_[_0xb719('0x4b')](_0x13087d,[_0xb719('0x29'),_0x291839[_0xb719('0x29')]]);if(_0x1addb2[_0xb719('0x3f')]){var _0x85ba2c={};_0x85ba2c[_0x1addb2['foreignKey']]=_0x291839[_0xb719('0x6f')];_0x35dd61['push'](_0x85ba2c);}else{_0x5b0d1c['where']['id']=_0x291839[_0xb719('0x70')];}}else{var _0x35dd61=[];for(var _0x58f669=0x0;_0x58f669<_0x164673[_0xb719('0x33')];_0x58f669++){var _0x1addb2=_[_0xb719('0x4b')](_0x13087d,[_0xb719('0x29'),_0x164673[_0x58f669][_0xb719('0x29')]]);if(_0x1addb2[_0xb719('0x3f')]){var _0x85ba2c={};if(_0x1addb2['field']==='id'){_0x85ba2c[_0x1addb2['foreignKey']]=_0x164673[_0x58f669][_0xb719('0x70')];}else{_0x85ba2c[_0x1addb2['foreignKey']]=_0x164673[_0x58f669]['resourceFields'];}_0x35dd61[_0xb719('0x5c')](_0x85ba2c);}else{if(!_0x5b0d1c[_0xb719('0x37')]['id'])_0x5b0d1c['where']['id']=[];_0x164673[_0x58f669][_0xb719('0x70')][_0xb719('0x71')](function(_0x4fba71){_0x5b0d1c[_0xb719('0x37')]['id'][_0xb719('0x5c')](_0x4fba71);});}}}if(!_['isEmpty'](_0x35dd61)){_0x5b0d1c[_0xb719('0x37')]=_[_0xb719('0x3a')](_0x5b0d1c[_0xb719('0x37')],{'$or':_0x35dd61});}if(_0x8de7c[_0xb719('0x2d')][_0xb719('0x39')]){_0x5b0d1c[_0xb719('0x37')]=_[_0xb719('0x3a')](_0x5b0d1c[_0xb719('0x37')],{'$or':_[_0xb719('0x3b')](_0x285f99,function(_0x1882d2){if(_0x1882d2[_0xb719('0x3c')][_0xb719('0x3d')]!==_0xb719('0x3e')){var _0x57944e={};_0x57944e[_0x1882d2[_0xb719('0x3f')]]={'$like':'%'+_0x8de7c['query'][_0xb719('0x39')]+'%'};return _0x57944e;}})});}_0x5b0d1c=_['merge']({},_0x5b0d1c,_0x8de7c[_0xb719('0x40')]);if(_0x291839&&!_0x291839[_0xb719('0x54')]&&_0x57fb4d['childModel']===_0xb719('0x72')){if(_0x8de7c[_0xb719('0x2d')][_0xb719('0x41')]){_0x5b0d1c[_0xb719('0x4a')]=[{'all':!![]}];}return db[_0x57fb4d[_0xb719('0x65')]]['findAll'](_0x5b0d1c)[_0xb719('0x25')](function(_0x9b183e){var _0x4a82f1=[];_0x9b183e[_0xb719('0x71')](function(_0x1532e9){var _0x1617fa;switch(_0x1532e9[_0xb719('0x73')]){case _0xb719('0x74'):_0x1617fa=_['find'](_0x291839[_0xb719('0x70')],function(_0x4fb164){return _0x4fb164['id']===_0x1532e9[_0xb719('0x75')]&&_0x4fb164[_0xb719('0x3c')]===_0xb719('0x76');});break;case _0xb719('0x77'):_0x1617fa=_['find'](_0x291839['resourceIds'],function(_0x830156){return _0x830156['id']===_0x1532e9[_0xb719('0x75')]&&_0x830156[_0xb719('0x3c')]===_0xb719('0x78');});break;}if(_0x1617fa)_0x4a82f1[_0xb719('0x5c')](_0x1532e9);});_0x577d78[_0xb719('0x1e')]=_0x4a82f1[_0xb719('0x33')];_0x577d78[_0xb719('0x43')]=_0x4a82f1;return _0x577d78;});}else{return db[_0x57fb4d[_0xb719('0x65')]][_0xb719('0x1e')]({'where':_0x5b0d1c[_0xb719('0x37')]})[_0xb719('0x25')](function(_0x11be16){_0x577d78['count']=_0x11be16;if(_0x8de7c[_0xb719('0x2d')][_0xb719('0x41')]){if(_0x57fb4d[_0xb719('0x65')]===_0xb719('0x79')){_0x5b0d1c['include']=[{'model':db[_0xb719('0x7a')],'as':_0xb719('0x7b'),'attributes':['id','name',_0xb719('0x7c')],'required':_0x8de7c[_0xb719('0x2d')][_0xb719('0x7d')]?!![]:![]},{'model':db[_0xb719('0x7a')],'as':_0xb719('0x7e'),'attributes':['id','name',_0xb719('0x7c')],'through':_0x8de7c[_0xb719('0x2d')]['tag']?{'attributes':[],'where':{'TagId':_0x8de7c[_0xb719('0x2d')][_0xb719('0x7d')]||undefined}}:{},'required':_0x8de7c[_0xb719('0x2d')][_0xb719('0x7d')]?!![]:![]}];}else{_0x5b0d1c[_0xb719('0x4a')]=[{'all':!![]}];}}return db[_0x57fb4d[_0xb719('0x65')]][_0xb719('0x42')](_0x5b0d1c);})['then'](function(_0x258aaf){_0x577d78[_0xb719('0x43')]=_0x258aaf;return _0x577d78;});}}else{return _0x577d78;}})['then'](respondWithFilteredResult(_0x2b3be1,_0x5b0d1c))[_0xb719('0x44')](handleError(_0x2b3be1,null));};function getAllResources(_0x4cef95,_0x5911c1){return new BPromise(function(_0x53f636,_0xd87122){if(_0x5911c1){var _0x84e98c=_0x5911c1['filter']?{[_0x5911c1['filter'][_0xb719('0x3f')]]:_0x5911c1[_0xb719('0x39')][_0xb719('0x7f')]}:undefined;return db[_0x4cef95][_0xb719('0x42')]({'where':_0x84e98c,'raw':!![]})[_0xb719('0x25')](function(_0x434e29){_0x5911c1[_0xb719('0x70')]=_[_0xb719('0x3b')](_0x434e29,'id');_0x53f636(_0x5911c1);})[_0xb719('0x44')](function(_0x5cf987){_0xd87122(_0x5cf987);});}else{_0x53f636(null);}});}function getAllFilteredResources(_0x2bd1ed,_0x26b401){return new BPromise(function(_0x16b749,_0x470614){var _0x3576b4=_0x2bd1ed[_0xb719('0x39')]?{[_0x2bd1ed[_0xb719('0x39')]['field']]:_0x2bd1ed[_0xb719('0x39')][_0xb719('0x7f')]}:undefined;return db[_0x2bd1ed[_0xb719('0x2c')]]['findAll']({'where':_0x3576b4,'raw':!![]})['then'](function(_0x514736){_0x26b401[_0xb719('0x6f')]=_[_0xb719('0x3b')](_0x514736,function(_0x2bef3e){return _0x2bef3e[_0xb719('0x29')];});_0x16b749(_0x26b401);})[_0xb719('0x44')](function(_0x1285d4){_0x470614(_0x1285d4);});});}function getAllowedResources(_0x22779b,_0x202bb7){return new BPromise(function(_0x5587ca,_0xbe5043){if(_0x202bb7){return db[_0xb719('0x55')]['findAll']({'where':{'sectionId':_0x202bb7['id']},'raw':!![]})[_0xb719('0x25')](function(_0xfb7b80){if(_0x22779b[_0xb719('0x3f')]&&_0x22779b[_0xb719('0x3f')]!=='id'){_0x202bb7[_0xb719('0x6f')]=_['map'](_0xfb7b80,function(_0x29d971){return _0x29d971[_0x22779b[_0xb719('0x3f')]];});}else{if(_0x22779b[_0xb719('0x65')]===_0xb719('0x72')){_0x202bb7[_0xb719('0x70')]=_[_0xb719('0x3b')](_0xfb7b80,function(_0x1f3e5f){return{'id':_0x1f3e5f[_0xb719('0x80')],'type':_0x1f3e5f[_0xb719('0x3c')]};});}else{_0x202bb7[_0xb719('0x70')]=_['map'](_0xfb7b80,function(_0x16c579){return _0x16c579['resourceId'];});}}_0x5587ca(_0x202bb7);})[_0xb719('0x44')](function(_0x523f04){_0xbe5043(_0x523f04);});}else{_0x5587ca(null);}});}function getQueryModels(_0x51c4ae,_0x404fc8){var _0x76acc2=_0x51c4ae[_0xb719('0x81')]();var _0x12fbcb={'childModel':undefined,'parentSections':[]};switch(_0x76acc2){case _0xb719('0x82'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x83');break;case _0xb719('0x84'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x85');break;case _0xb719('0x86'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x87');_0x12fbcb[_0xb719('0x69')]=[{'name':_0xb719('0x88'),'field':'name','foreignKey':_0xb719('0x89')}];break;case _0xb719('0x8a'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x8b');break;case _0xb719('0x8c'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x79');_0x12fbcb[_0xb719('0x69')]=[{'name':_0xb719('0x8d'),'field':'id','foreignKey':_0xb719('0x8e')}];break;case'lists':_0x12fbcb[_0xb719('0x65')]=_0xb719('0x8f');break;case _0xb719('0x90'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x91');break;case _0xb719('0x92'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x93');break;case _0xb719('0x94'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x95');break;case'chatwebsites':_0x12fbcb[_0xb719('0x65')]='ChatWebsite';break;case'faxqueues':_0x12fbcb[_0xb719('0x65')]='FaxQueue';break;case _0xb719('0x96'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x97');break;case _0xb719('0x98'):case'internalroutes':case _0xb719('0x99'):_0x12fbcb[_0xb719('0x65')]='VoiceExtension';break;case _0xb719('0x9a'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x9b');break;case'voicemails':_0x12fbcb['childModel']=_0xb719('0x9c');break;case _0xb719('0x9d'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x9e');_0x12fbcb['parentSections']=[{'name':'Agents','field':_0xb719('0x29'),'foreignKey':_0xb719('0x9f'),'model':_0xb719('0xa0'),'filter':{'field':_0xb719('0xa1'),'value':[_0xb719('0xa2')]}},{'name':_0xb719('0xa3'),'field':_0xb719('0x29'),'foreignKey':_0xb719('0x9f'),'model':_0xb719('0xa0'),'filter':{'field':_0xb719('0xa1'),'value':[_0xb719('0xa4')]}},{'name':_0xb719('0xa5'),'field':_0xb719('0x29'),'foreignKey':_0xb719('0xa6'),'model':'VoiceQueue','filter':{'field':_0xb719('0x3c'),'value':['inbound']}},{'name':'QueueCampaigns','field':_0xb719('0x29'),'foreignKey':_0xb719('0xa6'),'model':_0xb719('0xa7'),'filter':{'field':_0xb719('0x3c'),'value':[_0xb719('0xa8')]}}];break;case'musiconholds':_0x12fbcb[_0xb719('0x65')]=_0xb719('0xa9');break;case'chanspies':_0x12fbcb[_0xb719('0x65')]=_0xb719('0xaa');break;case _0xb719('0xab'):_0x12fbcb['childModel']='VoicePrefix';break;case _0xb719('0xac'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xad');break;case'mailqueues':_0x12fbcb[_0xb719('0x65')]=_0xb719('0xae');break;case _0xb719('0xaf'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xb0');break;case _0xb719('0xb1'):_0x12fbcb[_0xb719('0x65')]='MailSubstatus';break;case'openchannelqueues':_0x12fbcb['childModel']='OpenchannelQueue';break;case _0xb719('0xb2'):_0x12fbcb[_0xb719('0x65')]='OpenchannelAccount';break;case'smsqueues':_0x12fbcb[_0xb719('0x65')]=_0xb719('0xb3');break;case'smsaccounts':_0x12fbcb[_0xb719('0x65')]=_0xb719('0xb4');break;case _0xb719('0xb5'):_0x12fbcb[_0xb719('0x65')]='Team';break;case _0xb719('0xb6'):case _0xb719('0xb7'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xa7');if(_0x404fc8){_0x12fbcb[_0xb719('0x69')]=[{'name':_0xb719('0xa5')},{'name':_0xb719('0xb8')}];}break;case _0xb719('0xb9'):case'agents':case _0xb719('0xba'):_0x12fbcb['childModel']='User';if(_0x404fc8){_0x12fbcb[_0xb719('0x69')]=[{'name':_0xb719('0xbb'),'filter':{'field':_0xb719('0xa1'),'value':[_0xb719('0xbc'),_0xb719('0xbd')]},'ignore':!![]},{'name':_0xb719('0xbe')},{'name':_0xb719('0xa3')}];}break;case _0xb719('0xbf'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xc0');break;case _0xb719('0xc1'):_0x12fbcb[_0xb719('0x65')]='SalesforceAccount';break;case'freshdeskaccounts':_0x12fbcb[_0xb719('0x65')]='FreshdeskAccount';break;case _0xb719('0xc2'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xc3');break;case _0xb719('0xc4'):_0x12fbcb[_0xb719('0x65')]='DeskAccount';break;case _0xb719('0xc5'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xc6');break;case _0xb719('0xc7'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xa0');break;case _0xb719('0xc8'):_0x12fbcb['childModel']=_0xb719('0xc9');break;case'dispositions':_0x12fbcb[_0xb719('0x65')]=_0xb719('0xca');break;case _0xb719('0xcb'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xcc');break;case _0xb719('0xcd'):_0x12fbcb['childModel']=_0xb719('0xce');break;case _0xb719('0xcf'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xd0');break;case _0xb719('0xd1'):_0x12fbcb['childModel']=_0xb719('0xd2');break;case'sounds':_0x12fbcb[_0xb719('0x65')]=_0xb719('0xd3');break;case _0xb719('0xd4'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0x7a');break;case _0xb719('0xd5'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xd6');break;case _0xb719('0xd7'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xd8');break;case'trunks':_0x12fbcb[_0xb719('0x65')]=_0xb719('0xd9');break;case _0xb719('0xda'):_0x12fbcb[_0xb719('0x65')]=_0xb719('0xdb');break;case'plugins':_0x12fbcb['childModel']=_0xb719('0xdc');break;case _0xb719('0xdd'):_0x12fbcb[_0xb719('0x65')]='AnalyticExtractedReport';_0x12fbcb[_0xb719('0x69')]=[{'name':_0xb719('0xde'),'field':'id','foreignKey':_0xb719('0x75')}];break;case _0xb719('0xdf'):_0x12fbcb['childModel']=_0xb719('0xe0');break;default:return _0x12fbcb;}return _0x12fbcb;}
\ No newline at end of file
+var _0xd73e=['Plugin','extractedreports','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','./userProfile.socket','register','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','then','destroy','error','stack','name','send','index','rawAttributes','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','order','sort','where','filter','merge','type','VIRTUAL','field','options','UserProfile','count','includeAll','include','findAll','rows','catch','length','find','create','body','params','omit','createdAt','updatedAt','sequelize','get','UserProfileSection','each','autoAssociation','UserProfileResource','map','userProfileId','update','describe','addSections','transaction','sectionId','Resources','push','removeSections','addResources','bulkCreate','removeResources','ids','section','Sequelize','ValidationError','Unknown\x20section','mergeResources','undefined','isEmpty','parentSections','findOne','all','ignore','childModel','foreignKey','resourceFields','resourceIds','AnalyticExtractedReport','forEach','default','DefaultReports','reportId','CmContact','Tag','Tags','color','tag','value','resourceId','toLowerCase','squareprojects','SquareOdbc','SquareProjects','projectName','projects','JscriptyProject','contacts','Lists','ListId','lists','CmList','companies','CmCompany','globalcustomfields','CmCustomField','chatqueues','ChatQueue','chatwebsites','ChatWebsite','inboundroutes','outboundroutes','VoiceExtension','contexts','VoiceContext','voicemails','VoiceMail','voicerecordings','VoiceRecording','membername','User','role','agent','VoiceQueues','queue','inbound','QueueCampaigns','VoiceQueue','outbound','musiconholds','chanspies','VoiceChanSpy','voiceprefixes','VoicePrefix','ivrcampaigns','Campaign','MailQueue','mailsubstatuses','MailSubstatus','openchannelaccounts','smsqueues','smsaccounts','SmsAccount','teams','Team','voicequeues','queuecampaigns','users','agents','telephones','admin','user','Agents','zendeskaccounts','ZendeskAccount','SalesforceAccount','freshdeskaccounts','FreshdeskAccount','sugarcrmaccounts','SugarcrmAccount','deskaccounts','DeskAccount','zohoaccounts','ZohoAccount','cannedanswers','CannedAnswer','dispositions','customdashboards','intervals','Interval','pauses','Pause','scheduler','Schedule','sounds','Sound','tags','Template','triggers','Trigger','trunks','Trunk','variables','Variable','plugins'];(function(_0x5b5c47,_0x4578d9){var _0x1d9304=function(_0x4ebb63){while(--_0x4ebb63){_0x5b5c47['push'](_0x5b5c47['shift']());}};_0x1d9304(++_0x4578d9);}(_0xd73e,0x1c4));var _0xed73=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xd73e[_0x14add3];return _0x4a174f;};'use strict';var pdf=require(_0xed73('0x0'));var emlformat=require(_0xed73('0x1'));var rimraf=require(_0xed73('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xed73('0x3'));var rp=require(_0xed73('0x4'));var moment=require(_0xed73('0x5'));var BPromise=require(_0xed73('0x6'));var Mustache=require(_0xed73('0x7'));var util=require(_0xed73('0x8'));var path=require(_0xed73('0x9'));var sox=require(_0xed73('0xa'));var csv=require(_0xed73('0xb'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xed73('0xc'));var squel=require(_0xed73('0xd'));var crypto=require(_0xed73('0xe'));var jsforce=require(_0xed73('0xf'));var deskjs=require('desk.js');var toCsv=require(_0xed73('0xb'));var querystring=require('querystring');var Papa=require('papaparse');var authService=require(_0xed73('0x10'));var hardwareService=require(_0xed73('0x11'));var Redis=require(_0xed73('0x12'));var qs=require(_0xed73('0x13'));var logger=require('../../config/logger')(_0xed73('0x14'));var utils=require('../../config/utils');var config=require(_0xed73('0x15'));var db=require(_0xed73('0x16'))['db'];config[_0xed73('0x17')]=_[_0xed73('0x18')](config[_0xed73('0x17')],{'host':_0xed73('0x19'),'port':0x18eb});var socket=require(_0xed73('0x1a'))(new Redis(config[_0xed73('0x17')]));require(_0xed73('0x1b'))[_0xed73('0x1c')](socket);function respondWithStatusCode(_0xde9a54,_0x2cceba){_0x2cceba=_0x2cceba||0xcc;return function(_0x56cd86){if(_0x56cd86){return _0xde9a54[_0xed73('0x1d')](_0x2cceba);}return _0xde9a54[_0xed73('0x1e')](_0x2cceba)[_0xed73('0x1f')]();};}function respondWithResult(_0xc61340,_0x38e65c){_0x38e65c=_0x38e65c||0xc8;return function(_0x173bbf){if(_0x173bbf){return _0xc61340['status'](_0x38e65c)[_0xed73('0x20')](_0x173bbf);}};}function respondWithFilteredResult(_0x410b65,_0x518cab){return function(_0x2d96e8){if(_0x2d96e8){var _0x49a2eb=_0x2d96e8['count'],_0x44e8e2=_0x518cab[_0xed73('0x21')],_0x5637c4=_0x518cab[_0xed73('0x21')]+_0x518cab[_0xed73('0x22')],_0x6f374a;if(_0x5637c4>=_0x49a2eb){_0x5637c4=_0x49a2eb;_0x6f374a=0xc8;}else{_0x6f374a=0xce;}_0x410b65[_0xed73('0x1e')](_0x6f374a);return _0x410b65[_0xed73('0x23')](_0xed73('0x24'),_0x44e8e2+'-'+_0x5637c4+'/'+_0x49a2eb)[_0xed73('0x20')](_0x2d96e8);}return null;};}function patchUpdates(_0xbc8bff){return function(_0xe0b49a){try{jsonpatch[_0xed73('0x25')](_0xe0b49a,_0xbc8bff,!![]);}catch(_0x332af9){return BPromise[_0xed73('0x26')](_0x332af9);}return _0xe0b49a[_0xed73('0x27')]();};}function saveUpdates(_0x32f4d9,_0x558bc5){return function(_0x59d849){if(_0x59d849){return _0x59d849['update'](_0x32f4d9)[_0xed73('0x28')](function(_0x34a5f0){return _0x34a5f0;});}return null;};}function removeEntity(_0x1dbcb5,_0x5d798d){return function(_0x2604a3){if(_0x2604a3){return _0x2604a3[_0xed73('0x29')]()[_0xed73('0x28')](function(){_0x1dbcb5['status'](0xcc)[_0xed73('0x1f')]();});}};}function handleEntityNotFound(_0x4adfa1,_0x15d912){return function(_0x110899){if(!_0x110899){_0x4adfa1[_0xed73('0x1d')](0x194);}return _0x110899;};}function handleError(_0x340ae8,_0x4d99fb){_0x4d99fb=_0x4d99fb||0x1f4;return function(_0x56ad1c){logger[_0xed73('0x2a')](_0x56ad1c[_0xed73('0x2b')]);if(_0x56ad1c[_0xed73('0x2c')]){delete _0x56ad1c[_0xed73('0x2c')];}_0x340ae8[_0xed73('0x1e')](_0x4d99fb)[_0xed73('0x2d')](_0x56ad1c);};}exports[_0xed73('0x2e')]=function(_0x5d07d5,_0x1dac1a){var _0x113692={},_0x53b8fa={},_0x48977a={'count':0x0,'rows':[]};var _0x57f927=db['UserProfile'][_0xed73('0x2f')];_0x53b8fa[_0xed73('0x30')]=_[_0xed73('0x31')](_0x57f927);_0x53b8fa['query']=_[_0xed73('0x31')](_0x5d07d5[_0xed73('0x32')]);_0x53b8fa[_0xed73('0x33')]=_[_0xed73('0x34')](_0x53b8fa[_0xed73('0x30')],_0x53b8fa[_0xed73('0x32')]);_0x113692[_0xed73('0x35')]=_['intersection'](_0x53b8fa[_0xed73('0x30')],qs[_0xed73('0x36')](_0x5d07d5[_0xed73('0x32')][_0xed73('0x36')]));_0x113692[_0xed73('0x35')]=_0x113692[_0xed73('0x35')]['length']?_0x113692[_0xed73('0x35')]:_0x53b8fa[_0xed73('0x30')];if(!_0x5d07d5[_0xed73('0x32')][_0xed73('0x37')](_0xed73('0x38'))){_0x113692['limit']=qs[_0xed73('0x22')](_0x5d07d5[_0xed73('0x32')][_0xed73('0x22')]);_0x113692[_0xed73('0x21')]=qs[_0xed73('0x21')](_0x5d07d5['query'][_0xed73('0x21')]);}_0x113692[_0xed73('0x39')]=qs['sort'](_0x5d07d5[_0xed73('0x32')][_0xed73('0x3a')]);_0x113692[_0xed73('0x3b')]=qs[_0xed73('0x33')](_['pick'](_0x5d07d5[_0xed73('0x32')],_0x53b8fa[_0xed73('0x33')]));if(_0x5d07d5[_0xed73('0x32')][_0xed73('0x3c')]){_0x113692[_0xed73('0x3b')]=_[_0xed73('0x3d')](_0x113692[_0xed73('0x3b')],{'$or':_['map'](_0x57f927,function(_0x5bc3f5){if(_0x5bc3f5[_0xed73('0x3e')]['key']!==_0xed73('0x3f')){var _0x3c321b={};_0x3c321b[_0x5bc3f5[_0xed73('0x40')]]={'$like':'%'+_0x5d07d5['query'][_0xed73('0x3c')]+'%'};return _0x3c321b;}})});}_0x113692=_['merge']({},_0x113692,_0x5d07d5[_0xed73('0x41')]);var _0x2e4055={'where':_0x113692[_0xed73('0x3b')]};return db[_0xed73('0x42')][_0xed73('0x43')](_0x2e4055)[_0xed73('0x28')](function(_0x44b00d){_0x48977a[_0xed73('0x43')]=_0x44b00d;if(_0x5d07d5['query'][_0xed73('0x44')]){_0x113692[_0xed73('0x45')]=[{'all':!![]}];}return db[_0xed73('0x42')][_0xed73('0x46')](_0x113692);})['then'](function(_0x9ddd36){_0x48977a[_0xed73('0x47')]=_0x9ddd36;return _0x48977a;})['then'](respondWithFilteredResult(_0x1dac1a,_0x113692))[_0xed73('0x48')](handleError(_0x1dac1a,null));};exports['show']=function(_0x28e6a6,_0x294090){var _0x1ce5ff={'raw':![],'where':{'id':_0x28e6a6['params']['id']}},_0x467979={};_0x467979['model']=_['keys'](db[_0xed73('0x42')][_0xed73('0x2f')]);_0x467979['query']=_['keys'](_0x28e6a6[_0xed73('0x32')]);_0x467979[_0xed73('0x33')]=_[_0xed73('0x34')](_0x467979['model'],_0x467979[_0xed73('0x32')]);_0x1ce5ff[_0xed73('0x35')]=_[_0xed73('0x34')](_0x467979[_0xed73('0x30')],qs[_0xed73('0x36')](_0x28e6a6[_0xed73('0x32')][_0xed73('0x36')]));_0x1ce5ff['attributes']=_0x1ce5ff[_0xed73('0x35')][_0xed73('0x49')]?_0x1ce5ff[_0xed73('0x35')]:_0x467979[_0xed73('0x30')];if(_0x28e6a6[_0xed73('0x32')][_0xed73('0x44')]){_0x1ce5ff[_0xed73('0x45')]=[{'all':!![]}];}_0x1ce5ff=_[_0xed73('0x3d')]({},_0x1ce5ff,_0x28e6a6[_0xed73('0x41')]);return db[_0xed73('0x42')][_0xed73('0x4a')](_0x1ce5ff)[_0xed73('0x28')](handleEntityNotFound(_0x294090,null))[_0xed73('0x28')](respondWithResult(_0x294090,null))[_0xed73('0x48')](handleError(_0x294090,null));};exports['create']=function(_0x147ddd,_0x225a47){return db[_0xed73('0x42')][_0xed73('0x4b')](_0x147ddd[_0xed73('0x4c')],{})['then'](respondWithResult(_0x225a47,0xc9))[_0xed73('0x48')](handleError(_0x225a47,null));};exports['clone']=function(_0x58b31f,_0x33b240){var _0x3fccd3={'raw':![],'where':{'id':_0x58b31f[_0xed73('0x4d')]['id']}},_0x1d9354={};_0x1d9354[_0xed73('0x30')]=_['keys'](db['UserProfile'][_0xed73('0x2f')]);_0x3fccd3['attributes']=_['intersection'](_0x1d9354[_0xed73('0x30')],qs[_0xed73('0x36')](_0x58b31f[_0xed73('0x32')][_0xed73('0x36')]));_0x3fccd3[_0xed73('0x35')]=_0x3fccd3[_0xed73('0x35')][_0xed73('0x49')]?_0x3fccd3[_0xed73('0x35')]:_0x1d9354[_0xed73('0x30')];if(_0x58b31f[_0xed73('0x32')][_0xed73('0x44')]){_0x3fccd3[_0xed73('0x45')]=[{'all':!![]}];}_0x3fccd3=_[_0xed73('0x3d')]({},_0x3fccd3,_0x58b31f[_0xed73('0x41')]);return db[_0xed73('0x42')][_0xed73('0x4a')](_0x3fccd3)[_0xed73('0x28')](handleEntityNotFound(_0x33b240,null))[_0xed73('0x28')](function(_0x15270a){if(_0x15270a){var _0x30d910=_0x15270a['get']({'plain':!![]});_0x30d910=qs[_0xed73('0x4e')](_0x30d910,['id',_0xed73('0x4f'),_0xed73('0x50'),'crudPermissions']);_0x58b31f[_0xed73('0x4c')]=_[_0xed73('0x4e')](_0x58b31f[_0xed73('0x4c')],['id',_0xed73('0x4f'),_0xed73('0x50')]);return db[_0xed73('0x51')]['transaction'](function(_0x126acb){return db[_0xed73('0x42')]['create'](_[_0xed73('0x3d')](_0x30d910,_0x58b31f[_0xed73('0x4c')]),{'include':_0x58b31f[_0xed73('0x32')][_0xed73('0x44')]?[{'all':!![]}]:undefined,'transaction':_0x126acb})['then'](function(_0x5a08b1){var _0x21830f=_0x5a08b1[_0xed73('0x52')]({'plain':!![]});return db[_0xed73('0x53')][_0xed73('0x46')]({'where':{'userProfileId':_0x58b31f[_0xed73('0x4d')]['id']},'raw':!![]})['then'](function(_0x13ebc4){if(_0x13ebc4){return BPromise[_0xed73('0x54')](_0x13ebc4,function(_0x26c8c6){return new BPromise(function(_0x519fd7,_0x32e0df){if(_0x26c8c6['autoAssociation']===null||_0x26c8c6[_0xed73('0x55')]===0x1)_0x519fd7(null);return db[_0xed73('0x56')]['findAll']({'where':{'sectionId':_0x26c8c6['id']},'raw':!![]})[_0xed73('0x28')](function(_0x832a33){var _0xe9ad28=_[_0xed73('0x57')](_0x832a33,function(_0x3ac9a9){return qs[_0xed73('0x4e')](_0x3ac9a9,['id',_0xed73('0x4f'),_0xed73('0x50'),'sectionId']);});_0x519fd7(_0xe9ad28);})[_0xed73('0x48')](function(_0x31dd46){_0x32e0df(_0x31dd46);});})[_0xed73('0x28')](function(_0x2b27e6){var _0x591759=qs[_0xed73('0x4e')](_0x26c8c6,['id',_0xed73('0x4f'),'updatedAt']);_0x591759[_0xed73('0x58')]=_0x21830f['id'];if(_0x2b27e6)_0x591759['Resources']=_0x2b27e6;return _0x591759;})[_0xed73('0x28')](function(_0x20ff8d){return db[_0xed73('0x53')][_0xed73('0x4b')](_0x20ff8d,{'include':[{'model':db[_0xed73('0x56')],'as':'Resources'}],'raw':!![],'transaction':_0x126acb});});})[_0xed73('0x28')](function(){return _0x21830f;});}});});});}})[_0xed73('0x28')](respondWithResult(_0x33b240,0xc9))[_0xed73('0x48')](handleError(_0x33b240,null));};exports[_0xed73('0x59')]=function(_0x5a6419,_0x4d388e){if(_0x5a6419[_0xed73('0x4c')]['id']){delete _0x5a6419[_0xed73('0x4c')]['id'];}return db[_0xed73('0x42')]['find']({'where':{'id':_0x5a6419[_0xed73('0x4d')]['id']}})[_0xed73('0x28')](handleEntityNotFound(_0x4d388e,null))['then'](saveUpdates(_0x5a6419[_0xed73('0x4c')],null))[_0xed73('0x28')](respondWithResult(_0x4d388e,null))['catch'](handleError(_0x4d388e,null));};exports[_0xed73('0x29')]=function(_0x2160ec,_0x196386){return db[_0xed73('0x42')][_0xed73('0x4a')]({'where':{'id':_0x2160ec[_0xed73('0x4d')]['id']}})['then'](handleEntityNotFound(_0x196386,null))[_0xed73('0x28')](removeEntity(_0x196386,null))[_0xed73('0x48')](handleError(_0x196386,null));};exports[_0xed73('0x5a')]=function(_0x4e5a17,_0x2913bf){return db[_0xed73('0x42')][_0xed73('0x5a')]()[_0xed73('0x28')](respondWithResult(_0x2913bf,null))[_0xed73('0x48')](handleError(_0x2913bf,null));};exports[_0xed73('0x5b')]=function(_0x5ca08e,_0x198037){var _0x115c71=_0x5ca08e['body'];return db['UserProfile'][_0xed73('0x4a')]({'where':{'id':_0x5ca08e['params']['id']}})[_0xed73('0x28')](handleEntityNotFound(_0x198037,null))['then'](function(_0x2ec30a){if(_0x2ec30a){return db[_0xed73('0x51')][_0xed73('0x5c')](function(_0x3ffa1f){return db[_0xed73('0x53')][_0xed73('0x29')]({'where':{'userProfileId':_0x5ca08e['params']['id'],'sectionId':_[_0xed73('0x57')](_0x115c71,function(_0x14fdc2){return _0x14fdc2[_0xed73('0x5d')];})},'transaction':_0x3ffa1f})[_0xed73('0x28')](function(){var _0x183983=_[_0xed73('0x57')](_0x115c71,function(_0x5c65c2){_0x5c65c2[_0xed73('0x58')]=_0x5ca08e[_0xed73('0x4d')]['id'];return _0x5c65c2;});var _0x550549=[];return BPromise[_0xed73('0x54')](_0x183983,function(_0x101300){return db['UserProfileSection'][_0xed73('0x4b')](_0x101300,{'include':[{'model':db[_0xed73('0x56')],'as':_0xed73('0x5e')}],'raw':!![],'transaction':_0x3ffa1f})[_0xed73('0x28')](function(_0x532dfe){_0x550549[_0xed73('0x5f')](_0x532dfe[_0xed73('0x52')]({'plain':!![]}));});})[_0xed73('0x28')](function(){return _0x550549;});});});}})['then'](function(_0xc0c29b){return _0xc0c29b;})[_0xed73('0x28')](respondWithResult(_0x198037,null))['catch'](handleError(_0x198037,null));};exports[_0xed73('0x60')]=function(_0x968892,_0x3e1785){var _0x24748c;return db[_0xed73('0x42')][_0xed73('0x4a')]({'where':{'id':_0x968892[_0xed73('0x4d')]['id']},'attributes':['id',_0xed73('0x2c')]})['then'](handleEntityNotFound(_0x3e1785,null))[_0xed73('0x28')](function(_0x5e283f){if(_0x5e283f){_0x24748c=_0x5e283f;return db[_0xed73('0x53')][_0xed73('0x29')]({'where':{'userProfileId':_0x968892[_0xed73('0x4d')]['id'],'sectionId':_0x968892['query']['ids']}});}})[_0xed73('0x28')](function(){return _0x24748c;})['then'](respondWithStatusCode(_0x3e1785,null))[_0xed73('0x48')](handleError(_0x3e1785,null));};exports[_0xed73('0x61')]=function(_0x448ae9,_0x5e5d0a){return db[_0xed73('0x42')][_0xed73('0x4a')]({'where':{'id':_0x448ae9['params']['id']}})[_0xed73('0x28')](handleEntityNotFound(_0x5e5d0a,null))[_0xed73('0x28')](function(_0x8b7778){if(_0x8b7778){return db[_0xed73('0x51')][_0xed73('0x5c')](function(_0x5ed858){return db[_0xed73('0x53')][_0xed73('0x46')]({'where':{'userProfileId':_0x448ae9[_0xed73('0x4d')]['id']},'attributes':['id'],'raw':!![]})[_0xed73('0x28')](function(_0x13cf5c){if(_0x13cf5c){return db[_0xed73('0x53')][_0xed73('0x29')]({'where':{'userProfileId':_0x448ae9['params']['id'],'id':_[_0xed73('0x57')](_0x13cf5c,function(_0x16d5bf){return _0x16d5bf['id'];})},'transaction':_0x5ed858});}})['then'](function(_0x239aa0){var _0x14a348=_[_0xed73('0x57')](_0x448ae9[_0xed73('0x4c')],function(_0x5c0bda){_0x5c0bda[_0xed73('0x58')]=_0x448ae9[_0xed73('0x4d')]['id'];return _0x5c0bda;});return db[_0xed73('0x53')][_0xed73('0x62')](_0x14a348,{'raw':!![],'transaction':_0x5ed858});})['then'](function(_0x352c72){var _0x328cdd=_[_0xed73('0x3c')](_['map'](_0x352c72,function(_0x968a4e){return _0x968a4e[_0xed73('0x52')]({'plain':!![]});}),{'includeAll':![]});if(_0x328cdd){return db['UserProfileSection'][_0xed73('0x46')]({'where':{'userProfileId':_0x448ae9[_0xed73('0x4d')]['id'],'sectionId':_[_0xed73('0x57')](_0x328cdd,function(_0x1e5db6){return _0x1e5db6[_0xed73('0x5d')];})},'attributes':['id',_0xed73('0x5d')],'raw':!![]})[_0xed73('0x28')](function(_0x38d216){var _0x362d55=_['map'](_0x448ae9[_0xed73('0x4c')],function(_0x29bd63){_0x29bd63[_0xed73('0x58')]=_0x448ae9[_0xed73('0x4d')]['id'];return _0x29bd63;});return db[_0xed73('0x56')][_0xed73('0x62')](_0x362d55,{'raw':!![],'transaction':_0x5ed858});});}})[_0xed73('0x48')](handleError(_0x5e5d0a,null));});}})[_0xed73('0x28')](function(_0x4faea8){var _0x10c9aa=_[_0xed73('0x57')](_0x4faea8,function(_0x35448d){return _0x35448d[_0xed73('0x52')]({'plain':!![]});});})[_0xed73('0x28')](respondWithResult(_0x5e5d0a,null))[_0xed73('0x48')](handleError(_0x5e5d0a,null));};exports[_0xed73('0x63')]=function(_0x2713a6,_0x16b972,_0x1c381c){var _0x5d2c76;return db[_0xed73('0x42')][_0xed73('0x4a')]({'where':{'id':_0x2713a6['params']['id']}})[_0xed73('0x28')](handleEntityNotFound(_0x16b972,null))[_0xed73('0x28')](function(_0x4449e3){if(_0x4449e3){return _0x4449e3[_0xed73('0x63')](_0x2713a6['query'][_0xed73('0x64')]);}})[_0xed73('0x28')](respondWithStatusCode(_0x16b972,null))[_0xed73('0x48')](handleError(_0x16b972,null));};exports['getResources']=function(_0x1d92b3,_0x272ce7){var _0x279fe6={'raw':![],'where':{}};var _0x51ae84={};var _0x160e5f={'count':0x0,'rows':[]};var _0x4baf7c=_0x1d92b3['query'][_0xed73('0x65')];if(typeof _0x4baf7c==='undefined'){throw new db[(_0xed73('0x66'))][(_0xed73('0x67'))](_0xed73('0x68'));}var _0x112a82=_0x1d92b3[_0xed73('0x32')][_0xed73('0x69')]||![];var _0x4c45e4=getQueryModels(_0x4baf7c,_0x112a82);if(typeof _0x4c45e4['childModel']===_0xed73('0x6a')){throw new db[(_0xed73('0x66'))]['ValidationError']('Invalid\x20section\x20\x27'+_0x4baf7c+'\x27');}var _0x9e1a07=[];if(!_[_0xed73('0x6b')](_0x4c45e4[_0xed73('0x6c')])){_0x9e1a07=_0x4c45e4[_0xed73('0x6c')];}else{_0x9e1a07=[{'name':_0x4baf7c}];}return db[_0xed73('0x42')][_0xed73('0x6d')]({'where':{'id':_0x1d92b3['params']['id']}})[_0xed73('0x28')](handleEntityNotFound(_0x272ce7,null))['then'](function(_0x393c13){if(_0x393c13){var _0x6ef368=[];for(var _0x115c99=0x0;_0x115c99<_0x9e1a07['length'];_0x115c99++){_0x6ef368['push'](db[_0xed73('0x53')][_0xed73('0x6d')]({'where':{'userProfileId':_0x393c13['id'],'name':_0x9e1a07[_0x115c99][_0xed73('0x2c')]},'raw':!![]}));}return BPromise[_0xed73('0x6e')](_0x6ef368);}})[_0xed73('0x28')](function(_0x526a4b){var _0x466d2c=_[_0xed73('0x3c')](_0x526a4b,function(_0xc8c62e){return _0xc8c62e?_0xc8c62e:undefined;});var _0x5b09f5=_['filter'](_0x9e1a07,['ignore',!![]]);var _0x49b308=_[_0xed73('0x6b')](_0x466d2c)&&_[_0xed73('0x6b')](_0x5b09f5)?null:_['union'](_0x5b09f5,_0x466d2c);if(_0x49b308){var _0x5e4bc9=[];for(var _0x10e6e7=0x0;_0x10e6e7<_0x49b308['length'];_0x10e6e7++){var _0x276c3b=_[_0xed73('0x4a')](_0x9e1a07,function(_0x2896d2){return _0x49b308[_0x10e6e7]?_0x2896d2[_0xed73('0x2c')]===_0x49b308[_0x10e6e7][_0xed73('0x2c')]:null;});if(_0x276c3b){if(_0x49b308[_0x10e6e7][_0xed73('0x6f')]){_0x5e4bc9[_0xed73('0x5f')](getAllResources(_0x4c45e4[_0xed73('0x70')],_0x49b308[_0x10e6e7]));}else{if(!_0x49b308[_0x10e6e7][_0xed73('0x55')]){_0x5e4bc9['push'](getAllowedResources(_0x276c3b,_0x49b308[_0x10e6e7]));}else{if(_0x276c3b[_0xed73('0x30')]){_0x5e4bc9['push'](getAllFilteredResources(_0x276c3b,_0x49b308[_0x10e6e7]));}}}}}return BPromise[_0xed73('0x6e')](_0x5e4bc9);}else{return null;}})['then'](function(_0x4d61c4){var _0x168ee3=_0x4d61c4;var _0x40218c=null;if(_0x168ee3){_0x40218c=_0x168ee3[_0xed73('0x49')]===0x1?_0x168ee3[0x0]:null;}if(_0x40218c||_0x168ee3){var _0x432c32=db[_0x4c45e4[_0xed73('0x70')]][_0xed73('0x2f')];_0x51ae84[_0xed73('0x30')]=_[_0xed73('0x31')](_0x432c32);_0x51ae84[_0xed73('0x32')]=_[_0xed73('0x31')](_0x1d92b3[_0xed73('0x32')]);_0x51ae84[_0xed73('0x33')]=_[_0xed73('0x34')](_0x51ae84[_0xed73('0x30')],_0x51ae84[_0xed73('0x32')]);_0x279fe6['attributes']=_[_0xed73('0x34')](_0x51ae84['model'],qs[_0xed73('0x36')](_0x1d92b3[_0xed73('0x32')][_0xed73('0x36')]));_0x279fe6['attributes']=_0x279fe6['attributes'][_0xed73('0x49')]?_0x279fe6['attributes']:_0x51ae84[_0xed73('0x30')];if(!_0x1d92b3[_0xed73('0x32')][_0xed73('0x37')](_0xed73('0x38'))){_0x279fe6[_0xed73('0x22')]=qs[_0xed73('0x22')](_0x1d92b3['query'][_0xed73('0x22')]);_0x279fe6[_0xed73('0x21')]=qs[_0xed73('0x21')](_0x1d92b3[_0xed73('0x32')][_0xed73('0x21')]);}_0x279fe6[_0xed73('0x39')]=qs[_0xed73('0x3a')](_0x1d92b3['query'][_0xed73('0x3a')]);_0x279fe6[_0xed73('0x3b')]=qs['filters'](_['pick'](_0x1d92b3[_0xed73('0x32')],_0x51ae84[_0xed73('0x33')]));var _0x4ac90a=[];if(_0x40218c){var _0x173945=_['find'](_0x9e1a07,['name',_0x40218c[_0xed73('0x2c')]]);if(_0x173945[_0xed73('0x40')]){var _0xf514d1={};_0xf514d1[_0x173945[_0xed73('0x71')]]=_0x40218c[_0xed73('0x72')];_0x4ac90a['push'](_0xf514d1);}else{_0x279fe6[_0xed73('0x3b')]['id']=_0x40218c['resourceIds'];}}else{var _0x4ac90a=[];for(var _0x51b3fe=0x0;_0x51b3fe<_0x168ee3[_0xed73('0x49')];_0x51b3fe++){var _0x173945=_[_0xed73('0x4a')](_0x9e1a07,[_0xed73('0x2c'),_0x168ee3[_0x51b3fe][_0xed73('0x2c')]]);if(_0x173945[_0xed73('0x40')]){var _0xf514d1={};if(_0x173945[_0xed73('0x40')]==='id'){_0xf514d1[_0x173945['foreignKey']]=_0x168ee3[_0x51b3fe][_0xed73('0x73')];}else{_0xf514d1[_0x173945[_0xed73('0x71')]]=_0x168ee3[_0x51b3fe][_0xed73('0x72')];}_0x4ac90a[_0xed73('0x5f')](_0xf514d1);}else{if(!_0x279fe6['where']['id'])_0x279fe6['where']['id']=[];_0x168ee3[_0x51b3fe][_0xed73('0x73')]['forEach'](function(_0xea6f50){_0x279fe6[_0xed73('0x3b')]['id'][_0xed73('0x5f')](_0xea6f50);});}}}if(!_['isEmpty'](_0x4ac90a)){_0x279fe6[_0xed73('0x3b')]=_['merge'](_0x279fe6[_0xed73('0x3b')],{'$or':_0x4ac90a});}if(_0x1d92b3[_0xed73('0x32')][_0xed73('0x3c')]){_0x279fe6[_0xed73('0x3b')]=_[_0xed73('0x3d')](_0x279fe6[_0xed73('0x3b')],{'$or':_['map'](_0x432c32,function(_0x1a17da){if(_0x1a17da[_0xed73('0x3e')]['key']!=='VIRTUAL'){var _0x10b817={};_0x10b817[_0x1a17da[_0xed73('0x40')]]={'$like':'%'+_0x1d92b3['query']['filter']+'%'};return _0x10b817;}})});}_0x279fe6=_[_0xed73('0x3d')]({},_0x279fe6,_0x1d92b3[_0xed73('0x41')]);if(_0x40218c&&!_0x40218c[_0xed73('0x55')]&&_0x4c45e4['childModel']===_0xed73('0x74')){if(_0x1d92b3['query'][_0xed73('0x44')]){_0x279fe6[_0xed73('0x45')]=[{'all':!![]}];}return db[_0x4c45e4[_0xed73('0x70')]][_0xed73('0x46')](_0x279fe6)['then'](function(_0x50ebff){var _0x26f75f=[];_0x50ebff[_0xed73('0x75')](function(_0x1ac63a){var _0x11551f;switch(_0x1ac63a['reportType']){case _0xed73('0x76'):_0x11551f=_[_0xed73('0x4a')](_0x40218c[_0xed73('0x73')],function(_0x20f66f){return _0x20f66f['id']===_0x1ac63a['reportId']&&_0x20f66f[_0xed73('0x3e')]===_0xed73('0x77');});break;case'custom':_0x11551f=_[_0xed73('0x4a')](_0x40218c[_0xed73('0x73')],function(_0x53b81c){return _0x53b81c['id']===_0x1ac63a[_0xed73('0x78')]&&_0x53b81c[_0xed73('0x3e')]==='CustomReports';});break;}if(_0x11551f)_0x26f75f[_0xed73('0x5f')](_0x1ac63a);});_0x160e5f[_0xed73('0x43')]=_0x26f75f[_0xed73('0x49')];_0x160e5f[_0xed73('0x47')]=_0x26f75f;return _0x160e5f;});}else{return db[_0x4c45e4['childModel']]['count']({'where':_0x279fe6['where']})[_0xed73('0x28')](function(_0x1022ef){_0x160e5f['count']=_0x1022ef;if(_0x1d92b3['query'][_0xed73('0x44')]){if(_0x4c45e4[_0xed73('0x70')]===_0xed73('0x79')){_0x279fe6[_0xed73('0x45')]=[{'model':db[_0xed73('0x7a')],'as':_0xed73('0x7b'),'attributes':['id','name',_0xed73('0x7c')],'required':_0x1d92b3[_0xed73('0x32')][_0xed73('0x7d')]?!![]:![]},{'model':db[_0xed73('0x7a')],'as':'ThroughTags','attributes':['id','name','color'],'through':_0x1d92b3[_0xed73('0x32')][_0xed73('0x7d')]?{'attributes':[],'where':{'TagId':_0x1d92b3[_0xed73('0x32')][_0xed73('0x7d')]||undefined}}:{},'required':_0x1d92b3[_0xed73('0x32')][_0xed73('0x7d')]?!![]:![]}];}else{_0x279fe6[_0xed73('0x45')]=[{'all':!![]}];}}return db[_0x4c45e4['childModel']][_0xed73('0x46')](_0x279fe6);})[_0xed73('0x28')](function(_0x3637eb){_0x160e5f[_0xed73('0x47')]=_0x3637eb;return _0x160e5f;});}}else{return _0x160e5f;}})['then'](respondWithFilteredResult(_0x272ce7,_0x279fe6))['catch'](handleError(_0x272ce7,null));};function getAllResources(_0x12157d,_0x32385f){return new BPromise(function(_0x2cf504,_0x37911d){if(_0x32385f){var _0x17e359=_0x32385f[_0xed73('0x3c')]?{[_0x32385f[_0xed73('0x3c')]['field']]:_0x32385f[_0xed73('0x3c')][_0xed73('0x7e')]}:undefined;return db[_0x12157d]['findAll']({'where':_0x17e359,'raw':!![]})[_0xed73('0x28')](function(_0xdd29eb){_0x32385f['resourceIds']=_[_0xed73('0x57')](_0xdd29eb,'id');_0x2cf504(_0x32385f);})[_0xed73('0x48')](function(_0x71eb3b){_0x37911d(_0x71eb3b);});}else{_0x2cf504(null);}});}function getAllFilteredResources(_0x4119d4,_0x54269b){return new BPromise(function(_0x5bef81,_0x3ce3eb){var _0x383876=_0x4119d4['filter']?{[_0x4119d4[_0xed73('0x3c')][_0xed73('0x40')]]:_0x4119d4[_0xed73('0x3c')][_0xed73('0x7e')]}:undefined;return db[_0x4119d4[_0xed73('0x30')]][_0xed73('0x46')]({'where':_0x383876,'raw':!![]})[_0xed73('0x28')](function(_0x11f1fa){_0x54269b[_0xed73('0x72')]=_[_0xed73('0x57')](_0x11f1fa,function(_0x2e111c){return _0x2e111c[_0xed73('0x2c')];});_0x5bef81(_0x54269b);})[_0xed73('0x48')](function(_0xd3737f){_0x3ce3eb(_0xd3737f);});});}function getAllowedResources(_0x6df47d,_0x1be846){return new BPromise(function(_0x5646eb,_0x4fead7){if(_0x1be846){return db[_0xed73('0x56')][_0xed73('0x46')]({'where':{'sectionId':_0x1be846['id']},'raw':!![]})['then'](function(_0x1426fa){if(_0x6df47d['field']&&_0x6df47d[_0xed73('0x40')]!=='id'){_0x1be846['resourceFields']=_['map'](_0x1426fa,function(_0x9b166d){return _0x9b166d[_0x6df47d[_0xed73('0x40')]];});}else{if(_0x6df47d[_0xed73('0x70')]===_0xed73('0x74')){_0x1be846[_0xed73('0x73')]=_['map'](_0x1426fa,function(_0x237baf){return{'id':_0x237baf[_0xed73('0x7f')],'type':_0x237baf['type']};});}else{_0x1be846[_0xed73('0x73')]=_[_0xed73('0x57')](_0x1426fa,function(_0x50cf3e){return _0x50cf3e[_0xed73('0x7f')];});}}_0x5646eb(_0x1be846);})[_0xed73('0x48')](function(_0x2373fc){_0x4fead7(_0x2373fc);});}else{_0x5646eb(null);}});}function getQueryModels(_0x2c221c,_0x31abdb){var _0x54c719=_0x2c221c[_0xed73('0x80')]();var _0x21a5c4={'childModel':undefined,'parentSections':[]};switch(_0x54c719){case _0xed73('0x81'):_0x21a5c4['childModel']='SquareProject';break;case'odbc':_0x21a5c4[_0xed73('0x70')]=_0xed73('0x82');break;case'squarerecordings':_0x21a5c4['childModel']='SquareRecording';_0x21a5c4[_0xed73('0x6c')]=[{'name':_0xed73('0x83'),'field':'name','foreignKey':_0xed73('0x84')}];break;case _0xed73('0x85'):_0x21a5c4['childModel']=_0xed73('0x86');break;case _0xed73('0x87'):_0x21a5c4['childModel']='CmContact';_0x21a5c4['parentSections']=[{'name':_0xed73('0x88'),'field':'id','foreignKey':_0xed73('0x89')}];break;case _0xed73('0x8a'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0x8b');break;case _0xed73('0x8c'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0x8d');break;case _0xed73('0x8e'):_0x21a5c4['childModel']=_0xed73('0x8f');break;case _0xed73('0x90'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0x91');break;case _0xed73('0x92'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0x93');break;case'faxqueues':_0x21a5c4[_0xed73('0x70')]='FaxQueue';break;case'faxaccounts':_0x21a5c4['childModel']='FaxAccount';break;case _0xed73('0x94'):case'internalroutes':case _0xed73('0x95'):_0x21a5c4['childModel']=_0xed73('0x96');break;case _0xed73('0x97'):_0x21a5c4['childModel']=_0xed73('0x98');break;case _0xed73('0x99'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0x9a');break;case _0xed73('0x9b'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0x9c');_0x21a5c4[_0xed73('0x6c')]=[{'name':'Agents','field':_0xed73('0x2c'),'foreignKey':_0xed73('0x9d'),'model':_0xed73('0x9e'),'filter':{'field':_0xed73('0x9f'),'value':[_0xed73('0xa0')]}},{'name':'Telephones','field':_0xed73('0x2c'),'foreignKey':'membername','model':_0xed73('0x9e'),'filter':{'field':_0xed73('0x9f'),'value':['telephone']}},{'name':_0xed73('0xa1'),'field':_0xed73('0x2c'),'foreignKey':_0xed73('0xa2'),'model':'VoiceQueue','filter':{'field':_0xed73('0x3e'),'value':[_0xed73('0xa3')]}},{'name':_0xed73('0xa4'),'field':'name','foreignKey':_0xed73('0xa2'),'model':_0xed73('0xa5'),'filter':{'field':_0xed73('0x3e'),'value':[_0xed73('0xa6')]}}];break;case _0xed73('0xa7'):_0x21a5c4[_0xed73('0x70')]='VoiceMusicOnHold';break;case _0xed73('0xa8'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xa9');break;case _0xed73('0xaa'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xab');break;case _0xed73('0xac'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xad');break;case'mailqueues':_0x21a5c4['childModel']=_0xed73('0xae');break;case'mailaccounts':_0x21a5c4[_0xed73('0x70')]='MailAccount';break;case _0xed73('0xaf'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xb0');break;case'openchannelqueues':_0x21a5c4[_0xed73('0x70')]='OpenchannelQueue';break;case _0xed73('0xb1'):_0x21a5c4[_0xed73('0x70')]='OpenchannelAccount';break;case _0xed73('0xb2'):_0x21a5c4[_0xed73('0x70')]='SmsQueue';break;case _0xed73('0xb3'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xb4');break;case _0xed73('0xb5'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xb6');break;case _0xed73('0xb7'):case _0xed73('0xb8'):_0x21a5c4[_0xed73('0x70')]='VoiceQueue';if(_0x31abdb){_0x21a5c4[_0xed73('0x6c')]=[{'name':_0xed73('0xa1')},{'name':'QueueCampaigns'}];}break;case _0xed73('0xb9'):case _0xed73('0xba'):case _0xed73('0xbb'):_0x21a5c4['childModel']=_0xed73('0x9e');if(_0x31abdb){_0x21a5c4[_0xed73('0x6c')]=[{'name':'Users','filter':{'field':_0xed73('0x9f'),'value':[_0xed73('0xbc'),_0xed73('0xbd')]},'ignore':!![]},{'name':_0xed73('0xbe')},{'name':'Telephones'}];}break;case _0xed73('0xbf'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xc0');break;case'salesforceaccounts':_0x21a5c4['childModel']=_0xed73('0xc1');break;case _0xed73('0xc2'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xc3');break;case _0xed73('0xc4'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xc5');break;case _0xed73('0xc6'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xc7');break;case _0xed73('0xc8'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xc9');break;case'vtigeraccounts':_0x21a5c4[_0xed73('0x70')]='User';break;case _0xed73('0xca'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xcb');break;case _0xed73('0xcc'):_0x21a5c4[_0xed73('0x70')]='Disposition';break;case _0xed73('0xcd'):_0x21a5c4[_0xed73('0x70')]='Dashboard';break;case _0xed73('0xce'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xcf');break;case _0xed73('0xd0'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xd1');break;case _0xed73('0xd2'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xd3');break;case _0xed73('0xd4'):_0x21a5c4['childModel']=_0xed73('0xd5');break;case _0xed73('0xd6'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0x7a');break;case'templates':_0x21a5c4['childModel']=_0xed73('0xd7');break;case _0xed73('0xd8'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xd9');break;case _0xed73('0xda'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xdb');break;case _0xed73('0xdc'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xdd');break;case _0xed73('0xde'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0xdf');break;case _0xed73('0xe0'):_0x21a5c4[_0xed73('0x70')]=_0xed73('0x74');_0x21a5c4[_0xed73('0x6c')]=[{'name':'Reports','field':'id','foreignKey':_0xed73('0x78')}];break;case'metrics':_0x21a5c4[_0xed73('0x70')]='AnalyticMetric';break;default:return _0x21a5c4;}return _0x21a5c4;}
\ No newline at end of file
index c63caab..e777610 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe451=['exports','UserProfile','remove','emit','hasOwnProperty'];(function(_0x1b997a,_0x3e1d6b){var _0x22c982=function(_0xb9e9c1){while(--_0xb9e9c1){_0x1b997a['push'](_0x1b997a['shift']());}};_0x22c982(++_0x3e1d6b);}(_0xe451,0xec));var _0x1e45=function(_0x116e33,_0x664df8){_0x116e33=_0x116e33-0x0;var _0x29a097=_0xe451[_0x116e33];return _0x29a097;};'use strict';var EventEmitter=require('events');var UserProfile=require('../../mysqldb')['db'][_0x1e45('0x0')];var UserProfileEvents=new EventEmitter();UserProfileEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x1e45('0x1')};function emitEvent(_0x363caa){return function(_0x1f9061,_0x197c03,_0x5cc973){UserProfileEvents[_0x1e45('0x2')](_0x363caa+':'+_0x1f9061['id'],_0x1f9061);UserProfileEvents[_0x1e45('0x2')](_0x363caa,_0x1f9061);_0x5cc973(null);};}for(var e in events){if(events[_0x1e45('0x3')](e)){var event=events[e];UserProfile['hook'](e,emitEvent(event));}}module[_0x1e45('0x4')]=UserProfileEvents;
\ No newline at end of file
+var _0x0aee=['UserProfile','save','emit','hasOwnProperty','hook','exports','events'];(function(_0x1b1715,_0x2a086e){var _0x73fb68=function(_0x334ce3){while(--_0x334ce3){_0x1b1715['push'](_0x1b1715['shift']());}};_0x73fb68(++_0x2a086e);}(_0x0aee,0x1a3));var _0xe0ae=function(_0x18d373,_0x187a94){_0x18d373=_0x18d373-0x0;var _0xdbbab8=_0x0aee[_0x18d373];return _0xdbbab8;};'use strict';var EventEmitter=require(_0xe0ae('0x0'));var UserProfile=require('../../mysqldb')['db'][_0xe0ae('0x1')];var UserProfileEvents=new EventEmitter();UserProfileEvents['setMaxListeners'](0x0);var events={'afterCreate':_0xe0ae('0x2'),'afterUpdate':'update','afterDestroy':'remove'};function emitEvent(_0x3ec645){return function(_0x252f8f,_0x369e5a,_0x4870e0){UserProfileEvents[_0xe0ae('0x3')](_0x3ec645+':'+_0x252f8f['id'],_0x252f8f);UserProfileEvents[_0xe0ae('0x3')](_0x3ec645,_0x252f8f);_0x4870e0(null);};}for(var e in events){if(events[_0xe0ae('0x4')](e)){var event=events[e];UserProfile[_0xe0ae('0x5')](e,emitEvent(event));}}module[_0xe0ae('0x6')]=UserProfileEvents;
\ No newline at end of file
index 00f190a..ebf9a6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7133=['bluebird','request-promise','./userProfile.attributes','define','UserProfile','lodash','api','moment'];(function(_0x59f2a2,_0x544813){var _0x3fd3b7=function(_0x5a3bf6){while(--_0x5a3bf6){_0x59f2a2['push'](_0x59f2a2['shift']());}};_0x3fd3b7(++_0x544813);}(_0x7133,0xa5));var _0x3713=function(_0x37bd26,_0x5ad346){_0x37bd26=_0x37bd26-0x0;var _0xe83dc4=_0x7133[_0x37bd26];return _0xe83dc4;};'use strict';var _=require(_0x3713('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x3713('0x1'));var moment=require(_0x3713('0x2'));var BPromise=require(_0x3713('0x3'));var rp=require(_0x3713('0x4'));var attributes=require(_0x3713('0x5'));module['exports']=function(_0x358e67,_0x3eaa1f){return _0x358e67[_0x3713('0x6')](_0x3713('0x7'),attributes,{'tableName':'user_profiles','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xdaef=['util','../../config/logger','moment','bluebird','request-promise','./userProfile.attributes','exports','define','UserProfile','user_profiles','lodash'];(function(_0x295efa,_0x3be1e4){var _0x3a22ea=function(_0x261b9e){while(--_0x261b9e){_0x295efa['push'](_0x295efa['shift']());}};_0x3a22ea(++_0x3be1e4);}(_0xdaef,0x83));var _0xfdae=function(_0x5aba3a,_0x56fd5f){_0x5aba3a=_0x5aba3a-0x0;var _0x42b8b5=_0xdaef[_0x5aba3a];return _0x42b8b5;};'use strict';var _=require(_0xfdae('0x0'));var util=require(_0xfdae('0x1'));var logger=require(_0xfdae('0x2'))('api');var moment=require(_0xfdae('0x3'));var BPromise=require(_0xfdae('0x4'));var rp=require(_0xfdae('0x5'));var attributes=require(_0xfdae('0x6'));module[_0xfdae('0x7')]=function(_0x5e030c,_0x20fcd5){return _0x5e030c[_0xfdae('0x8')](_0xfdae('0x9'),attributes,{'tableName':_0xfdae('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ed54dfc..c2368b8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde37=['moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','redis','defaults','localhost','socket.io-emitter','./userProfile.socket','register','request','then','UserProfile,\x20%s,\x20%s','request\x20sent','UserProfile,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','lodash'];(function(_0x1e7b16,_0x4607a1){var _0x37fadc=function(_0x1fc9ce){while(--_0x1fc9ce){_0x1e7b16['push'](_0x1e7b16['shift']());}};_0x37fadc(++_0x4607a1);}(_0xde37,0x195));var _0x7de3=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xde37[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x7de3('0x0'));var util=require('util');var moment=require(_0x7de3('0x1'));var BPromise=require(_0x7de3('0x2'));var rs=require(_0x7de3('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x7de3('0x4'))['db'];var utils=require(_0x7de3('0x5'));var logger=require('../../config/logger')(_0x7de3('0x6'));var config=require(_0x7de3('0x7'));var jayson=require(_0x7de3('0x8'));var client=jayson[_0x7de3('0x9')][_0x7de3('0xa')]({'port':0x232a});config[_0x7de3('0xb')]=_[_0x7de3('0xc')](config['redis'],{'host':_0x7de3('0xd'),'port':0x18eb});var socket=require(_0x7de3('0xe'))(new Redis(config[_0x7de3('0xb')]));require(_0x7de3('0xf'))[_0x7de3('0x10')](socket);function respondWithRpcPromise(_0x2da544,_0x4a9f6d,_0x2cc376){return new BPromise(function(_0x2b11d0,_0x95e768){return client[_0x7de3('0x11')](_0x2da544,_0x2cc376)[_0x7de3('0x12')](function(_0x1439a5){logger['info'](_0x7de3('0x13'),_0x4a9f6d,_0x7de3('0x14'));logger['debug'](_0x7de3('0x15'),_0x4a9f6d,'request\x20sent',JSON[_0x7de3('0x16')](_0x1439a5));if(_0x1439a5[_0x7de3('0x17')]){if(_0x1439a5[_0x7de3('0x17')][_0x7de3('0x18')]===0x1f4){logger[_0x7de3('0x17')](_0x7de3('0x13'),_0x4a9f6d,_0x1439a5['error'][_0x7de3('0x19')]);return _0x95e768(_0x1439a5[_0x7de3('0x17')][_0x7de3('0x19')]);}logger[_0x7de3('0x17')](_0x7de3('0x13'),_0x4a9f6d,_0x1439a5[_0x7de3('0x17')][_0x7de3('0x19')]);return _0x2b11d0(_0x1439a5[_0x7de3('0x17')][_0x7de3('0x19')]);}else{logger[_0x7de3('0x1a')](_0x7de3('0x13'),_0x4a9f6d,_0x7de3('0x14'));_0x2b11d0(_0x1439a5[_0x7de3('0x1b')][_0x7de3('0x19')]);}})[_0x7de3('0x1c')](function(_0x26e2ad){logger[_0x7de3('0x17')](_0x7de3('0x13'),_0x4a9f6d,_0x26e2ad);_0x95e768(_0x26e2ad);});});}
\ No newline at end of file
+var _0xd208=['client','http','redis','defaults','socket.io-emitter','./userProfile.socket','register','request','info','UserProfile,\x20%s,\x20%s','request\x20sent','debug','UserProfile,\x20%s,\x20%s,\x20%s','stringify','error','code','message','lodash','util','moment','bluebird','randomstring','../../config/utils','../../config/environment','jayson/promise'];(function(_0x5afc67,_0x5d2743){var _0x39bbd7=function(_0x53e5b9){while(--_0x53e5b9){_0x5afc67['push'](_0x5afc67['shift']());}};_0x39bbd7(++_0x5d2743);}(_0xd208,0x13d));var _0x8d20=function(_0x4a4645,_0x1b3dfc){_0x4a4645=_0x4a4645-0x0;var _0x4e87d0=_0xd208[_0x4a4645];return _0x4e87d0;};'use strict';var _=require(_0x8d20('0x0'));var util=require(_0x8d20('0x1'));var moment=require(_0x8d20('0x2'));var BPromise=require(_0x8d20('0x3'));var rs=require(_0x8d20('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x8d20('0x5'));var logger=require('../../config/logger')('rpc');var config=require(_0x8d20('0x6'));var jayson=require(_0x8d20('0x7'));var client=jayson[_0x8d20('0x8')][_0x8d20('0x9')]({'port':0x232a});config[_0x8d20('0xa')]=_[_0x8d20('0xb')](config['redis'],{'host':'localhost','port':0x18eb});var socket=require(_0x8d20('0xc'))(new Redis(config['redis']));require(_0x8d20('0xd'))[_0x8d20('0xe')](socket);function respondWithRpcPromise(_0x32fa99,_0x323967,_0x31a947){return new BPromise(function(_0x574964,_0x360205){return client[_0x8d20('0xf')](_0x32fa99,_0x31a947)['then'](function(_0x56a9b2){logger[_0x8d20('0x10')](_0x8d20('0x11'),_0x323967,_0x8d20('0x12'));logger[_0x8d20('0x13')](_0x8d20('0x14'),_0x323967,_0x8d20('0x12'),JSON[_0x8d20('0x15')](_0x56a9b2));if(_0x56a9b2[_0x8d20('0x16')]){if(_0x56a9b2[_0x8d20('0x16')][_0x8d20('0x17')]===0x1f4){logger[_0x8d20('0x16')]('UserProfile,\x20%s,\x20%s',_0x323967,_0x56a9b2[_0x8d20('0x16')][_0x8d20('0x18')]);return _0x360205(_0x56a9b2[_0x8d20('0x16')][_0x8d20('0x18')]);}logger[_0x8d20('0x16')](_0x8d20('0x11'),_0x323967,_0x56a9b2[_0x8d20('0x16')]['message']);return _0x574964(_0x56a9b2['error']['message']);}else{logger[_0x8d20('0x10')]('UserProfile,\x20%s,\x20%s',_0x323967,'request\x20sent');_0x574964(_0x56a9b2['result'][_0x8d20('0x18')]);}})['catch'](function(_0x433b77){logger['error'](_0x8d20('0x11'),_0x323967,_0x433b77);_0x360205(_0x433b77);});});}
\ No newline at end of file
index 1df81c6..2b43915 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc999=['remove','update','removeListener','userProfile:','save'];(function(_0x3bd37a,_0x1e7c38){var _0x2642d3=function(_0x351f5e){while(--_0x351f5e){_0x3bd37a['push'](_0x3bd37a['shift']());}};_0x2642d3(++_0x1e7c38);}(_0xc999,0x176));var _0x9c99=function(_0x30f5bb,_0x4db4bd){_0x30f5bb=_0x30f5bb-0x0;var _0x1cfc00=_0xc999[_0x30f5bb];return _0x1cfc00;};'use strict';var UserProfileEvents=require('./userProfile.events');var events=[_0x9c99('0x0'),_0x9c99('0x1'),_0x9c99('0x2')];function createListener(_0x4cf49d,_0x590362){return function(_0x5473fe){_0x590362['emit'](_0x4cf49d,_0x5473fe);};}function removeListener(_0x3cecf2,_0x47e037){return function(){UserProfileEvents[_0x9c99('0x3')](_0x3cecf2,_0x47e037);};}exports['register']=function(_0x35f5f4){for(var _0x1ce762=0x0,_0xe80252=events['length'];_0x1ce762<_0xe80252;_0x1ce762++){var _0xfa25e1=events[_0x1ce762];var _0x323317=createListener(_0x9c99('0x4')+_0xfa25e1,_0x35f5f4);UserProfileEvents['on'](_0xfa25e1,_0x323317);}};
\ No newline at end of file
+var _0x6f47=['userProfile:','save','remove','removeListener','register','length'];(function(_0x52ad34,_0x48e2c9){var _0x516f32=function(_0x55d873){while(--_0x55d873){_0x52ad34['push'](_0x52ad34['shift']());}};_0x516f32(++_0x48e2c9);}(_0x6f47,0xc7));var _0x76f4=function(_0xf50820,_0x56f041){_0xf50820=_0xf50820-0x0;var _0x2a9b10=_0x6f47[_0xf50820];return _0x2a9b10;};'use strict';var UserProfileEvents=require('./userProfile.events');var events=[_0x76f4('0x0'),_0x76f4('0x1'),'update'];function createListener(_0x2092f3,_0x5765c1){return function(_0x698b39){_0x5765c1['emit'](_0x2092f3,_0x698b39);};}function removeListener(_0xe214ad,_0xc5dddc){return function(){UserProfileEvents[_0x76f4('0x2')](_0xe214ad,_0xc5dddc);};}exports[_0x76f4('0x3')]=function(_0x5754ca){for(var _0x35602f=0x0,_0xfc2405=events[_0x76f4('0x4')];_0x35602f<_0xfc2405;_0x35602f++){var _0x497f99=events[_0x35602f];var _0x1a3172=createListener(_0x76f4('0x5')+_0x497f99,_0x5754ca);UserProfileEvents['on'](_0x497f99,_0x1a3172);}};
\ No newline at end of file
index 49c21fd..b9dfcc2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5853=['destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service','../../config/environment','./userProfileResource.controller','get','isAuthenticated','describe','/:id','show','post','create','put','update','delete'];(function(_0x1bc1ce,_0x32ce7e){var _0x2cd98d=function(_0xebf05b){while(--_0xebf05b){_0x1bc1ce['push'](_0x1bc1ce['shift']());}};_0x2cd98d(++_0x32ce7e);}(_0x5853,0x113));var _0x3585=function(_0x4969d0,_0x4a5788){_0x4969d0=_0x4969d0-0x0;var _0x754944=_0x5853[_0x4969d0];return _0x754944;};'use strict';var multer=require(_0x3585('0x0'));var util=require(_0x3585('0x1'));var path=require(_0x3585('0x2'));var timeout=require(_0x3585('0x3'));var express=require(_0x3585('0x4'));var router=express['Router']();var auth=require(_0x3585('0x5'));var interaction=require(_0x3585('0x6'));var config=require(_0x3585('0x7'));var controller=require(_0x3585('0x8'));router[_0x3585('0x9')]('/',auth[_0x3585('0xa')](),controller['index']);router[_0x3585('0x9')]('/describe',auth['isAuthenticated'](),controller[_0x3585('0xb')]);router['get'](_0x3585('0xc'),auth[_0x3585('0xa')](),controller[_0x3585('0xd')]);router[_0x3585('0xe')]('/',auth[_0x3585('0xa')](),controller[_0x3585('0xf')]);router[_0x3585('0x10')]('/:id',auth[_0x3585('0xa')](),controller[_0x3585('0x11')]);router[_0x3585('0x12')](_0x3585('0xc'),auth[_0x3585('0xa')](),controller[_0x3585('0x13')]);module[_0x3585('0x14')]=router;
\ No newline at end of file
+var _0x0c3a=['isAuthenticated','index','/describe','get','/:id','show','create','update','destroy','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./userProfileResource.controller'];(function(_0x52e68e,_0x309912){var _0x3211a4=function(_0x467c01){while(--_0x467c01){_0x52e68e['push'](_0x52e68e['shift']());}};_0x3211a4(++_0x309912);}(_0x0c3a,0x171));var _0xa0c3=function(_0x39acb8,_0x31d58d){_0x39acb8=_0x39acb8-0x0;var _0x521785=_0x0c3a[_0x39acb8];return _0x521785;};'use strict';var multer=require(_0xa0c3('0x0'));var util=require(_0xa0c3('0x1'));var path=require(_0xa0c3('0x2'));var timeout=require(_0xa0c3('0x3'));var express=require(_0xa0c3('0x4'));var router=express[_0xa0c3('0x5')]();var auth=require(_0xa0c3('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0xa0c3('0x7'));var controller=require(_0xa0c3('0x8'));router['get']('/',auth[_0xa0c3('0x9')](),controller[_0xa0c3('0xa')]);router['get'](_0xa0c3('0xb'),auth['isAuthenticated'](),controller['describe']);router[_0xa0c3('0xc')](_0xa0c3('0xd'),auth[_0xa0c3('0x9')](),controller[_0xa0c3('0xe')]);router['post']('/',auth[_0xa0c3('0x9')](),controller[_0xa0c3('0xf')]);router['put']('/:id',auth[_0xa0c3('0x9')](),controller[_0xa0c3('0x10')]);router['delete'](_0xa0c3('0xd'),auth[_0xa0c3('0x9')](),controller[_0xa0c3('0x11')]);module['exports']=router;
\ No newline at end of file
index 9c5a1e5..d46767f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x356a=['STRING','INTEGER'];(function(_0x449895,_0x5197af){var _0x3b077f=function(_0x324a46){while(--_0x324a46){_0x449895['push'](_0x449895['shift']());}};_0x3b077f(++_0x5197af);}(_0x356a,0x1e0));var _0xa356=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x356a[_0x5b644e];return _0x49c6bf;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize[_0xa356('0x0')],'allowNull':![]},'resourceId':{'type':Sequelize[_0xa356('0x1')],'allowNull':![]},'type':{'type':Sequelize['STRING'],'allowNull':![]}};
\ No newline at end of file
+var _0x04b3=['exports','STRING','INTEGER','sequelize'];(function(_0x2c5a94,_0x2e8f31){var _0x27ef4a=function(_0x3b4745){while(--_0x3b4745){_0x2c5a94['push'](_0x2c5a94['shift']());}};_0x27ef4a(++_0x2e8f31);}(_0x04b3,0x1ef));var _0x304b=function(_0x2a143c,_0x3dced4){_0x2a143c=_0x2a143c-0x0;var _0x501f76=_0x04b3[_0x2a143c];return _0x501f76;};'use strict';var Sequelize=require(_0x304b('0x0'));module[_0x304b('0x1')]={'name':{'type':Sequelize[_0x304b('0x2')],'allowNull':![]},'resourceId':{'type':Sequelize[_0x304b('0x3')],'allowNull':![]},'type':{'type':Sequelize[_0x304b('0x2')],'allowNull':![]}};
\ No newline at end of file
index d951fd1..a9f6069 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['includeAll','findAll','catch','params','model','options','find','create','body','describe','html-pdf','rimraf','zip-dir','fast-json-patch','moment','bluebird','mustache','util','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../config/logger','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','destroy','then','error','send','index','UserProfileResource','rawAttributes','keys','query','filters','intersection','fields','length','attributes','hasOwnProperty','nolimit','order','sort','where','filter','merge','type','key','VIRTUAL','field','count'];(function(_0x1840b1,_0x2d021e){var _0x54ee73=function(_0x313ab9){while(--_0x313ab9){_0x1840b1['push'](_0x1840b1['shift']());}};_0x54ee73(++_0x2d021e);}(_0xb10b,0x12a));var _0xbb10=function(_0x259c7e,_0x96223a){_0x259c7e=_0x259c7e-0x0;var _0x15d791=_0xb10b[_0x259c7e];return _0x15d791;};'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 authService=require(_0xbb10('0x12'));var hardwareService=require(_0xbb10('0x13'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');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));};exports[_0xbb10('0x47')]=function(_0x2626d8,_0x3d7e7e){return db['UserProfileResource']['describe']()[_0xbb10('0x25')](respondWithResult(_0x3d7e7e,null))[_0xbb10('0x40')](handleError(_0x3d7e7e,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','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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(_0x5d977c,_0x3681b4){var _0x4786c1=function(_0xd0b65){while(--_0xd0b65){_0x5d977c['push'](_0x5d977c['shift']());}};_0x4786c1(++_0x3681b4);}(_0xa9e0,0x123));var _0x0a9e=function(_0x298ed3,_0x4ab5e1){_0x298ed3=_0x298ed3-0x0;var _0x5aad28=_0xa9e0[_0x298ed3];return _0x5aad28;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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 a09a276..73cc954 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x436a=['../../config/logger','api','moment','bluebird','request-promise','./userProfileResource.attributes','exports','define','UserProfileResource','compositeIndex','resourceId','sectionId','lodash'];(function(_0x32fb07,_0x38e9fa){var _0x5a8090=function(_0x3e9397){while(--_0x3e9397){_0x32fb07['push'](_0x32fb07['shift']());}};_0x5a8090(++_0x38e9fa);}(_0x436a,0x1b9));var _0xa436=function(_0x4f2ce6,_0x2a0163){_0x4f2ce6=_0x4f2ce6-0x0;var _0x3dbb40=_0x436a[_0x4f2ce6];return _0x3dbb40;};'use strict';var _=require(_0xa436('0x0'));var util=require('util');var logger=require(_0xa436('0x1'))(_0xa436('0x2'));var moment=require(_0xa436('0x3'));var BPromise=require(_0xa436('0x4'));var rp=require(_0xa436('0x5'));var attributes=require(_0xa436('0x6'));module[_0xa436('0x7')]=function(_0x4930de,_0xac689b){return _0x4930de[_0xa436('0x8')](_0xa436('0x9'),attributes,{'tableName':'user_profile_has_resources','paranoid':![],'indexes':[{'name':_0xa436('0xa'),'fields':[_0xa436('0xb'),_0xa436('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xa662=['define','user_profile_has_resources','compositeIndex','resourceId','sectionId','lodash','util','moment','bluebird','request-promise'];(function(_0x47dbc8,_0x4aa88c){var _0x521b36=function(_0x35b32b){while(--_0x35b32b){_0x47dbc8['push'](_0x47dbc8['shift']());}};_0x521b36(++_0x4aa88c);}(_0xa662,0x127));var _0x2a66=function(_0x2044ec,_0x86721e){_0x2044ec=_0x2044ec-0x0;var _0x4472e3=_0xa662[_0x2044ec];return _0x4472e3;};'use strict';var _=require(_0x2a66('0x0'));var util=require(_0x2a66('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0x2a66('0x2'));var BPromise=require(_0x2a66('0x3'));var rp=require(_0x2a66('0x4'));var attributes=require('./userProfileResource.attributes');module['exports']=function(_0x4d0488,_0x35edb2){return _0x4d0488[_0x2a66('0x5')]('UserProfileResource',attributes,{'tableName':_0x2a66('0x6'),'paranoid':![],'indexes':[{'name':_0x2a66('0x7'),'fields':[_0x2a66('0x8'),_0x2a66('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index a51316f..64c0b5f 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(_0x1b1d11,_0x3fd5fa){var _0x41023d=function(_0x14c87d){while(--_0x14c87d){_0x1b1d11['push'](_0x1b1d11['shift']());}};_0x41023d(++_0x3fd5fa);}(_0x7b84,0x17c));var _0x47b8=function(_0x2f224a,_0x6dff9e){_0x2f224a=_0x2f224a-0x0;var _0x541a52=_0x7b84[_0x2f224a];return _0x541a52;};'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 _0x524e=['randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','request','then','info','UserProfileResource,\x20%s,\x20%s','request\x20sent','debug','UserProfileResource,\x20%s,\x20%s,\x20%s','stringify','error','code','message','moment','bluebird'];(function(_0x4a96d2,_0x689504){var _0x38af04=function(_0x3a67cd){while(--_0x3a67cd){_0x4a96d2['push'](_0x4a96d2['shift']());}};_0x38af04(++_0x689504);}(_0x524e,0x15e));var _0xe524=function(_0x68e347,_0x19fa95){_0x68e347=_0x68e347-0x0;var _0x215a96=_0x524e[_0x68e347];return _0x215a96;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xe524('0x0'));var BPromise=require(_0xe524('0x1'));var rs=require(_0xe524('0x2'));var fs=require('fs');var Redis=require(_0xe524('0x3'));var db=require(_0xe524('0x4'))['db'];var utils=require(_0xe524('0x5'));var logger=require(_0xe524('0x6'))(_0xe524('0x7'));var config=require(_0xe524('0x8'));var jayson=require(_0xe524('0x9'));var client=jayson['client'][_0xe524('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x41e1a3,_0x347bed,_0x533c14){return new BPromise(function(_0x384935,_0x3e4cda){return client[_0xe524('0xb')](_0x41e1a3,_0x533c14)[_0xe524('0xc')](function(_0x991924){logger[_0xe524('0xd')](_0xe524('0xe'),_0x347bed,_0xe524('0xf'));logger[_0xe524('0x10')](_0xe524('0x11'),_0x347bed,_0xe524('0xf'),JSON[_0xe524('0x12')](_0x991924));if(_0x991924[_0xe524('0x13')]){if(_0x991924[_0xe524('0x13')][_0xe524('0x14')]===0x1f4){logger[_0xe524('0x13')]('UserProfileResource,\x20%s,\x20%s',_0x347bed,_0x991924['error'][_0xe524('0x15')]);return _0x3e4cda(_0x991924[_0xe524('0x13')][_0xe524('0x15')]);}logger[_0xe524('0x13')](_0xe524('0xe'),_0x347bed,_0x991924['error'][_0xe524('0x15')]);return _0x384935(_0x991924['error'][_0xe524('0x15')]);}else{logger[_0xe524('0xd')]('UserProfileResource,\x20%s,\x20%s',_0x347bed,_0xe524('0xf'));_0x384935(_0x991924['result'][_0xe524('0x15')]);}})['catch'](function(_0x29a031){logger['error']('UserProfileResource,\x20%s,\x20%s',_0x347bed,_0x29a031);_0x3e4cda(_0x29a031);});});}
\ No newline at end of file
index ed0a6ff..a49bf82 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6248=['path','connect-timeout','express','../../components/interaction/service','../../config/environment','./userProfileSection.controller','get','isAuthenticated','index','/describe','show','post','create','put','/:id','delete','destroy','exports','multer','util'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x6248,0xb2));var _0x8624=function(_0x4eb1bf,_0x2a479d){_0x4eb1bf=_0x4eb1bf-0x0;var _0x2a42d7=_0x6248[_0x4eb1bf];return _0x2a42d7;};'use strict';var multer=require(_0x8624('0x0'));var util=require(_0x8624('0x1'));var path=require(_0x8624('0x2'));var timeout=require(_0x8624('0x3'));var express=require(_0x8624('0x4'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x8624('0x5'));var config=require(_0x8624('0x6'));var controller=require(_0x8624('0x7'));router[_0x8624('0x8')]('/',auth[_0x8624('0x9')](),controller[_0x8624('0xa')]);router[_0x8624('0x8')](_0x8624('0xb'),auth[_0x8624('0x9')](),controller['describe']);router[_0x8624('0x8')]('/:id',auth['isAuthenticated'](),controller[_0x8624('0xc')]);router[_0x8624('0xd')]('/',auth['isAuthenticated'](),controller[_0x8624('0xe')]);router[_0x8624('0xf')](_0x8624('0x10'),auth['isAuthenticated'](),controller['update']);router[_0x8624('0x11')](_0x8624('0x10'),auth[_0x8624('0x9')](),controller[_0x8624('0x12')]);module[_0x8624('0x13')]=router;
\ No newline at end of file
+var _0x15b4=['../../components/interaction/service','../../config/environment','./userProfileSection.controller','get','isAuthenticated','/describe','describe','/:id','post','put','delete','exports','util','path','express','Router','../../components/auth/service'];(function(_0x263dcd,_0xb620ed){var _0x2cc375=function(_0x2a9fe9){while(--_0x2a9fe9){_0x263dcd['push'](_0x263dcd['shift']());}};_0x2cc375(++_0xb620ed);}(_0x15b4,0x11c));var _0x415b=function(_0x88cd7b,_0x4c884c){_0x88cd7b=_0x88cd7b-0x0;var _0x56fcc8=_0x15b4[_0x88cd7b];return _0x56fcc8;};'use strict';var multer=require('multer');var util=require(_0x415b('0x0'));var path=require(_0x415b('0x1'));var timeout=require('connect-timeout');var express=require(_0x415b('0x2'));var router=express[_0x415b('0x3')]();var auth=require(_0x415b('0x4'));var interaction=require(_0x415b('0x5'));var config=require(_0x415b('0x6'));var controller=require(_0x415b('0x7'));router[_0x415b('0x8')]('/',auth[_0x415b('0x9')](),controller['index']);router[_0x415b('0x8')](_0x415b('0xa'),auth[_0x415b('0x9')](),controller[_0x415b('0xb')]);router[_0x415b('0x8')](_0x415b('0xc'),auth[_0x415b('0x9')](),controller['show']);router[_0x415b('0xd')]('/',auth[_0x415b('0x9')](),controller['create']);router[_0x415b('0xe')](_0x415b('0xc'),auth[_0x415b('0x9')](),controller['update']);router[_0x415b('0xf')]('/:id',auth[_0x415b('0x9')](),controller['destroy']);module[_0x415b('0x10')]=router;
\ No newline at end of file
index 3f4f905..92e4414 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['getDataValue','split','sequelize','exports','STRING','INTEGER','BOOLEAN','setDataValue','crudPermissions','join'];(function(_0x58952f,_0xeed25f){var _0x3217ca=function(_0x3fda09){while(--_0x3fda09){_0x58952f['push'](_0x58952f['shift']());}};_0x3217ca(++_0xeed25f);}(_0x008c,0x188));var _0xc008=function(_0x25a4a1,_0x516862){_0x25a4a1=_0x25a4a1-0x0;var _0x3cac71=_0x008c[_0x25a4a1];return _0x3cac71;};'use strict';var Sequelize=require(_0xc008('0x0'));module[_0xc008('0x1')]={'name':{'type':Sequelize[_0xc008('0x2')],'allowNull':![]},'category':{'type':Sequelize[_0xc008('0x2')],'allowNull':![]},'sectionId':{'type':Sequelize[_0xc008('0x3')],'allowNull':![]},'enabled':{'type':Sequelize['BOOLEAN'],'defaultValue':null},'autoAssociation':{'type':Sequelize[_0xc008('0x4')],'defaultValue':null},'crudPermissions':{'type':Sequelize[_0xc008('0x2')],'set':function(_0x10b33c){this[_0xc008('0x5')](_0xc008('0x6'),_0x10b33c?_0x10b33c[_0xc008('0x7')](''):[]);},'get':function(){return this[_0xc008('0x8')](_0xc008('0x6'))?this[_0xc008('0x8')]('crudPermissions')[_0xc008('0x9')](''):[];}}};
\ No newline at end of file
+var _0x70e0=['split','sequelize','exports','STRING','BOOLEAN','crudPermissions','getDataValue'];(function(_0x53b398,_0x39bfd8){var _0x32c9ed=function(_0x5f5c4f){while(--_0x5f5c4f){_0x53b398['push'](_0x53b398['shift']());}};_0x32c9ed(++_0x39bfd8);}(_0x70e0,0x17b));var _0x070e=function(_0xfc8ff7,_0x4b28ea){_0xfc8ff7=_0xfc8ff7-0x0;var _0x5f53da=_0x70e0[_0xfc8ff7];return _0x5f53da;};'use strict';var Sequelize=require(_0x070e('0x0'));module[_0x070e('0x1')]={'name':{'type':Sequelize[_0x070e('0x2')],'allowNull':![]},'category':{'type':Sequelize['STRING'],'allowNull':![]},'sectionId':{'type':Sequelize['INTEGER'],'allowNull':![]},'enabled':{'type':Sequelize[_0x070e('0x3')],'defaultValue':null},'autoAssociation':{'type':Sequelize[_0x070e('0x3')],'defaultValue':null},'crudPermissions':{'type':Sequelize[_0x070e('0x2')],'set':function(_0x2593e5){this['setDataValue'](_0x070e('0x4'),_0x2593e5?_0x2593e5['join'](''):[]);},'get':function(){return this[_0x070e('0x5')]('crudPermissions')?this['getDataValue']('crudPermissions')[_0x070e('0x6')](''):[];}}};
\ No newline at end of file
index 2157c2a..a3b53fd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa07c=['api','../../config/utils','../../config/environment','status','end','json','count','offset','limit','set','Content-Range','apply','reject','update','then','destroy','sendStatus','error','name','send','index','UserProfileSection','rawAttributes','keys','query','filters','intersection','model','attributes','fields','hasOwnProperty','nolimit','order','sort','where','pick','filter','map','type','key','VIRTUAL','field','merge','options','include','findAll','rows','catch','params','length','includeAll','find','create','body','describe','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs'];(function(_0x10d7bd,_0x1ee905){var _0x3fcb8e=function(_0x1ddafe){while(--_0x1ddafe){_0x10d7bd['push'](_0x10d7bd['shift']());}};_0x3fcb8e(++_0x1ee905);}(_0xa07c,0x11e));var _0xca07=function(_0xa5b5a4,_0x562f3f){_0xa5b5a4=_0xa5b5a4-0x0;var _0x52ee08=_0xa07c[_0xa5b5a4];return _0x52ee08;};'use strict';var pdf=require(_0xca07('0x0'));var emlformat=require('eml-format');var rimraf=require(_0xca07('0x1'));var zipdir=require(_0xca07('0x2'));var jsonpatch=require(_0xca07('0x3'));var rp=require(_0xca07('0x4'));var moment=require(_0xca07('0x5'));var BPromise=require('bluebird');var Mustache=require(_0xca07('0x6'));var util=require(_0xca07('0x7'));var path=require(_0xca07('0x8'));var sox=require(_0xca07('0x9'));var csv=require(_0xca07('0xa'));var ejs=require(_0xca07('0xb'));var fs=require('fs');var _=require(_0xca07('0xc'));var squel=require(_0xca07('0xd'));var crypto=require(_0xca07('0xe'));var jsforce=require(_0xca07('0xf'));var deskjs=require(_0xca07('0x10'));var toCsv=require('to-csv');var querystring=require(_0xca07('0x11'));var Papa=require('papaparse');var authService=require(_0xca07('0x12'));var hardwareService=require(_0xca07('0x13'));var Redis=require(_0xca07('0x14'));var qs=require(_0xca07('0x15'));var logger=require('../../config/logger')(_0xca07('0x16'));var utils=require(_0xca07('0x17'));var config=require(_0xca07('0x18'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x47f6ae,_0x2b7190){_0x2b7190=_0x2b7190||0xcc;return function(_0xdd9f39){if(_0xdd9f39){return _0x47f6ae['sendStatus'](_0x2b7190);}return _0x47f6ae[_0xca07('0x19')](_0x2b7190)[_0xca07('0x1a')]();};}function respondWithResult(_0x22643d,_0x4b5353){_0x4b5353=_0x4b5353||0xc8;return function(_0x15ea6d){if(_0x15ea6d){return _0x22643d['status'](_0x4b5353)[_0xca07('0x1b')](_0x15ea6d);}};}function respondWithFilteredResult(_0x35b55d,_0xfcb6d6){return function(_0x54b21a){if(_0x54b21a){var _0x3f7698=_0x54b21a[_0xca07('0x1c')],_0x157ede=_0xfcb6d6[_0xca07('0x1d')],_0x521bef=_0xfcb6d6['offset']+_0xfcb6d6[_0xca07('0x1e')],_0x510814;if(_0x521bef>=_0x3f7698){_0x521bef=_0x3f7698;_0x510814=0xc8;}else{_0x510814=0xce;}_0x35b55d['status'](_0x510814);return _0x35b55d[_0xca07('0x1f')](_0xca07('0x20'),_0x157ede+'-'+_0x521bef+'/'+_0x3f7698)[_0xca07('0x1b')](_0x54b21a);}return null;};}function patchUpdates(_0xb284b2){return function(_0x4ff93f){try{jsonpatch[_0xca07('0x21')](_0x4ff93f,_0xb284b2,!![]);}catch(_0x5725b4){return BPromise[_0xca07('0x22')](_0x5725b4);}return _0x4ff93f['save']();};}function saveUpdates(_0x43864a,_0x152605){return function(_0x4ab3bd){if(_0x4ab3bd){return _0x4ab3bd[_0xca07('0x23')](_0x43864a)[_0xca07('0x24')](function(_0x5dc448){return _0x5dc448;});}return null;};}function removeEntity(_0x54feb4,_0x202fac){return function(_0x4573ee){if(_0x4573ee){return _0x4573ee[_0xca07('0x25')]()[_0xca07('0x24')](function(){_0x54feb4[_0xca07('0x19')](0xcc)[_0xca07('0x1a')]();});}};}function handleEntityNotFound(_0x1e51ef,_0x2000c6){return function(_0x2583ae){if(!_0x2583ae){_0x1e51ef[_0xca07('0x26')](0x194);}return _0x2583ae;};}function handleError(_0xe58e5d,_0x345e5d){_0x345e5d=_0x345e5d||0x1f4;return function(_0x54732d){logger[_0xca07('0x27')](_0x54732d['stack']);if(_0x54732d[_0xca07('0x28')]){delete _0x54732d[_0xca07('0x28')];}_0xe58e5d['status'](_0x345e5d)[_0xca07('0x29')](_0x54732d);};}exports[_0xca07('0x2a')]=function(_0x20ab15,_0x3755b9){var _0x2207ea={},_0x55534d={},_0x1785af={'count':0x0,'rows':[]};var _0x49d471=db[_0xca07('0x2b')][_0xca07('0x2c')];_0x55534d['model']=_[_0xca07('0x2d')](_0x49d471);_0x55534d['query']=_['keys'](_0x20ab15[_0xca07('0x2e')]);_0x55534d[_0xca07('0x2f')]=_[_0xca07('0x30')](_0x55534d[_0xca07('0x31')],_0x55534d[_0xca07('0x2e')]);_0x2207ea[_0xca07('0x32')]=_[_0xca07('0x30')](_0x55534d[_0xca07('0x31')],qs[_0xca07('0x33')](_0x20ab15['query'][_0xca07('0x33')]));_0x2207ea[_0xca07('0x32')]=_0x2207ea[_0xca07('0x32')]['length']?_0x2207ea[_0xca07('0x32')]:_0x55534d[_0xca07('0x31')];if(!_0x20ab15[_0xca07('0x2e')][_0xca07('0x34')](_0xca07('0x35'))){_0x2207ea['limit']=qs[_0xca07('0x1e')](_0x20ab15['query']['limit']);_0x2207ea['offset']=qs[_0xca07('0x1d')](_0x20ab15[_0xca07('0x2e')][_0xca07('0x1d')]);}_0x2207ea[_0xca07('0x36')]=qs[_0xca07('0x37')](_0x20ab15[_0xca07('0x2e')][_0xca07('0x37')]);_0x2207ea[_0xca07('0x38')]=qs[_0xca07('0x2f')](_[_0xca07('0x39')](_0x20ab15[_0xca07('0x2e')],_0x55534d[_0xca07('0x2f')]));if(_0x20ab15[_0xca07('0x2e')][_0xca07('0x3a')]){_0x2207ea[_0xca07('0x38')]=_['merge'](_0x2207ea[_0xca07('0x38')],{'$or':_[_0xca07('0x3b')](_0x49d471,function(_0x10a007){if(_0x10a007[_0xca07('0x3c')][_0xca07('0x3d')]!==_0xca07('0x3e')){var _0x24ed28={};_0x24ed28[_0x10a007[_0xca07('0x3f')]]={'$like':'%'+_0x20ab15[_0xca07('0x2e')][_0xca07('0x3a')]+'%'};return _0x24ed28;}})});}_0x2207ea=_[_0xca07('0x40')]({},_0x2207ea,_0x20ab15[_0xca07('0x41')]);var _0x62d600={'where':_0x2207ea[_0xca07('0x38')]};return db[_0xca07('0x2b')][_0xca07('0x1c')](_0x62d600)[_0xca07('0x24')](function(_0x3c210d){_0x1785af['count']=_0x3c210d;if(_0x20ab15[_0xca07('0x2e')]['includeAll']){_0x2207ea[_0xca07('0x42')]=[{'all':!![]}];}return db[_0xca07('0x2b')][_0xca07('0x43')](_0x2207ea);})[_0xca07('0x24')](function(_0x126a50){_0x1785af[_0xca07('0x44')]=_0x126a50;return _0x1785af;})[_0xca07('0x24')](respondWithFilteredResult(_0x3755b9,_0x2207ea))[_0xca07('0x45')](handleError(_0x3755b9,null));};exports['show']=function(_0x210346,_0x3ef797){var _0x4b560c={'raw':![],'where':{'id':_0x210346[_0xca07('0x46')]['id']}},_0x5ac509={};_0x5ac509['model']=_[_0xca07('0x2d')](db[_0xca07('0x2b')][_0xca07('0x2c')]);_0x5ac509[_0xca07('0x2e')]=_[_0xca07('0x2d')](_0x210346[_0xca07('0x2e')]);_0x5ac509['filters']=_[_0xca07('0x30')](_0x5ac509[_0xca07('0x31')],_0x5ac509[_0xca07('0x2e')]);_0x4b560c['attributes']=_['intersection'](_0x5ac509[_0xca07('0x31')],qs['fields'](_0x210346['query'][_0xca07('0x33')]));_0x4b560c[_0xca07('0x32')]=_0x4b560c[_0xca07('0x32')][_0xca07('0x47')]?_0x4b560c['attributes']:_0x5ac509[_0xca07('0x31')];if(_0x210346[_0xca07('0x2e')][_0xca07('0x48')]){_0x4b560c[_0xca07('0x42')]=[{'all':!![]}];}_0x4b560c=_[_0xca07('0x40')]({},_0x4b560c,_0x210346[_0xca07('0x41')]);return db[_0xca07('0x2b')][_0xca07('0x49')](_0x4b560c)[_0xca07('0x24')](handleEntityNotFound(_0x3ef797,null))[_0xca07('0x24')](respondWithResult(_0x3ef797,null))[_0xca07('0x45')](handleError(_0x3ef797,null));};exports[_0xca07('0x4a')]=function(_0x3becf5,_0x115cfc){return db[_0xca07('0x2b')][_0xca07('0x4a')](_0x3becf5[_0xca07('0x4b')],{})['then'](respondWithResult(_0x115cfc,0xc9))['catch'](handleError(_0x115cfc,null));};exports[_0xca07('0x23')]=function(_0x14dc93,_0x20beec){if(_0x14dc93[_0xca07('0x4b')]['id']){delete _0x14dc93[_0xca07('0x4b')]['id'];}return db[_0xca07('0x2b')][_0xca07('0x49')]({'where':{'id':_0x14dc93[_0xca07('0x46')]['id']}})[_0xca07('0x24')](handleEntityNotFound(_0x20beec,null))[_0xca07('0x24')](saveUpdates(_0x14dc93[_0xca07('0x4b')],null))['then'](respondWithResult(_0x20beec,null))[_0xca07('0x45')](handleError(_0x20beec,null));};exports[_0xca07('0x25')]=function(_0x164dc7,_0xfa26fb){return db['UserProfileSection'][_0xca07('0x49')]({'where':{'id':_0x164dc7['params']['id']}})[_0xca07('0x24')](handleEntityNotFound(_0xfa26fb,null))[_0xca07('0x24')](removeEntity(_0xfa26fb,null))['catch'](handleError(_0xfa26fb,null));};exports[_0xca07('0x4c')]=function(_0x55c722,_0x4e3979){return db[_0xca07('0x2b')][_0xca07('0x4c')]()['then'](respondWithResult(_0x4e3979,null))[_0xca07('0x45')](handleError(_0x4e3979,null));};
\ No newline at end of file
+var _0xaf23=['moment','bluebird','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','apply','reject','save','then','error','stack','name','send','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','order','sort','where','filter','merge','map','type','VIRTUAL','options','UserProfileSection','includeAll','include','findAll','find','catch','create','body','update','params','destroy','describe','html-pdf','eml-format','zip-dir','request-promise'];(function(_0x1dae94,_0x239003){var _0x36ce2d=function(_0x295f18){while(--_0x295f18){_0x1dae94['push'](_0x1dae94['shift']());}};_0x36ce2d(++_0x239003);}(_0xaf23,0x8c));var _0x3af2=function(_0x478a60,_0x43cfc5){_0x478a60=_0x478a60-0x0;var _0x4021b7=_0xaf23[_0x478a60];return _0x4021b7;};'use strict';var pdf=require(_0x3af2('0x0'));var emlformat=require(_0x3af2('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x3af2('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3af2('0x3'));var moment=require(_0x3af2('0x4'));var BPromise=require(_0x3af2('0x5'));var Mustache=require('mustache');var util=require(_0x3af2('0x6'));var path=require(_0x3af2('0x7'));var sox=require(_0x3af2('0x8'));var csv=require(_0x3af2('0x9'));var ejs=require(_0x3af2('0xa'));var fs=require('fs');var _=require(_0x3af2('0xb'));var squel=require(_0x3af2('0xc'));var crypto=require(_0x3af2('0xd'));var jsforce=require(_0x3af2('0xe'));var deskjs=require(_0x3af2('0xf'));var toCsv=require(_0x3af2('0x9'));var querystring=require(_0x3af2('0x10'));var Papa=require(_0x3af2('0x11'));var authService=require(_0x3af2('0x12'));var hardwareService=require(_0x3af2('0x13'));var Redis=require(_0x3af2('0x14'));var qs=require(_0x3af2('0x15'));var logger=require('../../config/logger')('api');var utils=require('../../config/utils');var config=require(_0x3af2('0x16'));var db=require(_0x3af2('0x17'))['db'];function respondWithStatusCode(_0x47aaf5,_0x3b4f26){_0x3b4f26=_0x3b4f26||0xcc;return function(_0x590ec7){if(_0x590ec7){return _0x47aaf5[_0x3af2('0x18')](_0x3b4f26);}return _0x47aaf5[_0x3af2('0x19')](_0x3b4f26)[_0x3af2('0x1a')]();};}function respondWithResult(_0x3808d8,_0x5dd9e7){_0x5dd9e7=_0x5dd9e7||0xc8;return function(_0x6499e9){if(_0x6499e9){return _0x3808d8[_0x3af2('0x19')](_0x5dd9e7)[_0x3af2('0x1b')](_0x6499e9);}};}function respondWithFilteredResult(_0x1b6acb,_0x307c62){return function(_0x361b51){if(_0x361b51){var _0x2622b2=_0x361b51[_0x3af2('0x1c')],_0x3f199b=_0x307c62[_0x3af2('0x1d')],_0x84f8bd=_0x307c62[_0x3af2('0x1d')]+_0x307c62[_0x3af2('0x1e')],_0x4b9c18;if(_0x84f8bd>=_0x2622b2){_0x84f8bd=_0x2622b2;_0x4b9c18=0xc8;}else{_0x4b9c18=0xce;}_0x1b6acb['status'](_0x4b9c18);return _0x1b6acb[_0x3af2('0x1f')](_0x3af2('0x20'),_0x3f199b+'-'+_0x84f8bd+'/'+_0x2622b2)['json'](_0x361b51);}return null;};}function patchUpdates(_0x5c5db5){return function(_0x2c9dd2){try{jsonpatch[_0x3af2('0x21')](_0x2c9dd2,_0x5c5db5,!![]);}catch(_0x29a1a6){return BPromise[_0x3af2('0x22')](_0x29a1a6);}return _0x2c9dd2[_0x3af2('0x23')]();};}function saveUpdates(_0x7e84d9,_0xadd9f7){return function(_0x31ec04){if(_0x31ec04){return _0x31ec04['update'](_0x7e84d9)[_0x3af2('0x24')](function(_0x2edf3){return _0x2edf3;});}return null;};}function removeEntity(_0xbfb64,_0x3cc48b){return function(_0x241a85){if(_0x241a85){return _0x241a85['destroy']()[_0x3af2('0x24')](function(){_0xbfb64[_0x3af2('0x19')](0xcc)[_0x3af2('0x1a')]();});}};}function handleEntityNotFound(_0x22c936,_0x39bf50){return function(_0x4592d2){if(!_0x4592d2){_0x22c936['sendStatus'](0x194);}return _0x4592d2;};}function handleError(_0x21f46f,_0x20901c){_0x20901c=_0x20901c||0x1f4;return function(_0x5ce957){logger[_0x3af2('0x25')](_0x5ce957[_0x3af2('0x26')]);if(_0x5ce957[_0x3af2('0x27')]){delete _0x5ce957[_0x3af2('0x27')];}_0x21f46f[_0x3af2('0x19')](_0x20901c)[_0x3af2('0x28')](_0x5ce957);};}exports['index']=function(_0x196f12,_0x5ab171){var _0x5522c3={},_0x4479cc={},_0xeb62c6={'count':0x0,'rows':[]};var _0x458b85=db['UserProfileSection'][_0x3af2('0x29')];_0x4479cc[_0x3af2('0x2a')]=_[_0x3af2('0x2b')](_0x458b85);_0x4479cc['query']=_[_0x3af2('0x2b')](_0x196f12[_0x3af2('0x2c')]);_0x4479cc[_0x3af2('0x2d')]=_[_0x3af2('0x2e')](_0x4479cc[_0x3af2('0x2a')],_0x4479cc[_0x3af2('0x2c')]);_0x5522c3[_0x3af2('0x2f')]=_[_0x3af2('0x2e')](_0x4479cc[_0x3af2('0x2a')],qs[_0x3af2('0x30')](_0x196f12[_0x3af2('0x2c')]['fields']));_0x5522c3[_0x3af2('0x2f')]=_0x5522c3[_0x3af2('0x2f')][_0x3af2('0x31')]?_0x5522c3['attributes']:_0x4479cc[_0x3af2('0x2a')];if(!_0x196f12[_0x3af2('0x2c')][_0x3af2('0x32')]('nolimit')){_0x5522c3[_0x3af2('0x1e')]=qs[_0x3af2('0x1e')](_0x196f12['query'][_0x3af2('0x1e')]);_0x5522c3[_0x3af2('0x1d')]=qs['offset'](_0x196f12['query'][_0x3af2('0x1d')]);}_0x5522c3[_0x3af2('0x33')]=qs[_0x3af2('0x34')](_0x196f12['query'][_0x3af2('0x34')]);_0x5522c3[_0x3af2('0x35')]=qs[_0x3af2('0x2d')](_['pick'](_0x196f12[_0x3af2('0x2c')],_0x4479cc[_0x3af2('0x2d')]));if(_0x196f12[_0x3af2('0x2c')][_0x3af2('0x36')]){_0x5522c3[_0x3af2('0x35')]=_[_0x3af2('0x37')](_0x5522c3[_0x3af2('0x35')],{'$or':_[_0x3af2('0x38')](_0x458b85,function(_0xd78854){if(_0xd78854[_0x3af2('0x39')]['key']!==_0x3af2('0x3a')){var _0x35086d={};_0x35086d[_0xd78854['field']]={'$like':'%'+_0x196f12[_0x3af2('0x2c')][_0x3af2('0x36')]+'%'};return _0x35086d;}})});}_0x5522c3=_[_0x3af2('0x37')]({},_0x5522c3,_0x196f12[_0x3af2('0x3b')]);var _0x426ccc={'where':_0x5522c3[_0x3af2('0x35')]};return db[_0x3af2('0x3c')][_0x3af2('0x1c')](_0x426ccc)[_0x3af2('0x24')](function(_0x4b7124){_0xeb62c6['count']=_0x4b7124;if(_0x196f12[_0x3af2('0x2c')][_0x3af2('0x3d')]){_0x5522c3[_0x3af2('0x3e')]=[{'all':!![]}];}return db[_0x3af2('0x3c')][_0x3af2('0x3f')](_0x5522c3);})[_0x3af2('0x24')](function(_0x1058bb){_0xeb62c6['rows']=_0x1058bb;return _0xeb62c6;})[_0x3af2('0x24')](respondWithFilteredResult(_0x5ab171,_0x5522c3))['catch'](handleError(_0x5ab171,null));};exports['show']=function(_0x2404dc,_0x3b08bb){var _0x33deb7={'raw':![],'where':{'id':_0x2404dc['params']['id']}},_0x5a1625={};_0x5a1625[_0x3af2('0x2a')]=_['keys'](db[_0x3af2('0x3c')]['rawAttributes']);_0x5a1625['query']=_[_0x3af2('0x2b')](_0x2404dc[_0x3af2('0x2c')]);_0x5a1625[_0x3af2('0x2d')]=_[_0x3af2('0x2e')](_0x5a1625['model'],_0x5a1625[_0x3af2('0x2c')]);_0x33deb7['attributes']=_[_0x3af2('0x2e')](_0x5a1625[_0x3af2('0x2a')],qs['fields'](_0x2404dc[_0x3af2('0x2c')][_0x3af2('0x30')]));_0x33deb7[_0x3af2('0x2f')]=_0x33deb7[_0x3af2('0x2f')][_0x3af2('0x31')]?_0x33deb7['attributes']:_0x5a1625[_0x3af2('0x2a')];if(_0x2404dc[_0x3af2('0x2c')][_0x3af2('0x3d')]){_0x33deb7[_0x3af2('0x3e')]=[{'all':!![]}];}_0x33deb7=_[_0x3af2('0x37')]({},_0x33deb7,_0x2404dc['options']);return db['UserProfileSection'][_0x3af2('0x40')](_0x33deb7)[_0x3af2('0x24')](handleEntityNotFound(_0x3b08bb,null))[_0x3af2('0x24')](respondWithResult(_0x3b08bb,null))[_0x3af2('0x41')](handleError(_0x3b08bb,null));};exports[_0x3af2('0x42')]=function(_0x209e22,_0x5c2038){return db['UserProfileSection'][_0x3af2('0x42')](_0x209e22[_0x3af2('0x43')],{})['then'](respondWithResult(_0x5c2038,0xc9))[_0x3af2('0x41')](handleError(_0x5c2038,null));};exports[_0x3af2('0x44')]=function(_0x714537,_0x980b0b){if(_0x714537[_0x3af2('0x43')]['id']){delete _0x714537[_0x3af2('0x43')]['id'];}return db[_0x3af2('0x3c')][_0x3af2('0x40')]({'where':{'id':_0x714537[_0x3af2('0x45')]['id']}})[_0x3af2('0x24')](handleEntityNotFound(_0x980b0b,null))['then'](saveUpdates(_0x714537['body'],null))[_0x3af2('0x24')](respondWithResult(_0x980b0b,null))[_0x3af2('0x41')](handleError(_0x980b0b,null));};exports[_0x3af2('0x46')]=function(_0x423bc6,_0x600daf){return db[_0x3af2('0x3c')]['find']({'where':{'id':_0x423bc6[_0x3af2('0x45')]['id']}})[_0x3af2('0x24')](handleEntityNotFound(_0x600daf,null))[_0x3af2('0x24')](removeEntity(_0x600daf,null))['catch'](handleError(_0x600daf,null));};exports[_0x3af2('0x47')]=function(_0x149cdd,_0x51b33b){return db['UserProfileSection'][_0x3af2('0x47')]()[_0x3af2('0x24')](respondWithResult(_0x51b33b,null))[_0x3af2('0x41')](handleError(_0x51b33b,null));};
\ No newline at end of file
index 86301c5..4d3e7d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe6c5=['user_profile_has_sections','compositeIndex','sectionId','lodash','api','moment','bluebird','request-promise','exports','define'];(function(_0x52684e,_0x36adb8){var _0x5800d6=function(_0x1ed460){while(--_0x1ed460){_0x52684e['push'](_0x52684e['shift']());}};_0x5800d6(++_0x36adb8);}(_0xe6c5,0x67));var _0x5e6c=function(_0x188555,_0x2d5ec8){_0x188555=_0x188555-0x0;var _0x462392=_0xe6c5[_0x188555];return _0x462392;};'use strict';var _=require(_0x5e6c('0x0'));var util=require('util');var logger=require('../../config/logger')(_0x5e6c('0x1'));var moment=require(_0x5e6c('0x2'));var BPromise=require(_0x5e6c('0x3'));var rp=require(_0x5e6c('0x4'));var attributes=require('./userProfileSection.attributes');module[_0x5e6c('0x5')]=function(_0x243866,_0x2e4a67){return _0x243866[_0x5e6c('0x6')]('UserProfileSection',attributes,{'tableName':_0x5e6c('0x7'),'paranoid':![],'indexes':[{'name':_0x5e6c('0x8'),'fields':[_0x5e6c('0x9'),'userProfileId']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x6927=['define','user_profile_has_sections','compositeIndex','userProfileId','lodash','../../config/logger','api','moment','bluebird','request-promise','./userProfileSection.attributes'];(function(_0x2782db,_0x2a516f){var _0x4af4e4=function(_0x17316a){while(--_0x17316a){_0x2782db['push'](_0x2782db['shift']());}};_0x4af4e4(++_0x2a516f);}(_0x6927,0xf6));var _0x7692=function(_0x141f13,_0x5eabe8){_0x141f13=_0x141f13-0x0;var _0x34fa22=_0x6927[_0x141f13];return _0x34fa22;};'use strict';var _=require(_0x7692('0x0'));var util=require('util');var logger=require(_0x7692('0x1'))(_0x7692('0x2'));var moment=require(_0x7692('0x3'));var BPromise=require(_0x7692('0x4'));var rp=require(_0x7692('0x5'));var attributes=require(_0x7692('0x6'));module['exports']=function(_0x48e3c4,_0x1471e9){return _0x48e3c4[_0x7692('0x7')]('UserProfileSection',attributes,{'tableName':_0x7692('0x8'),'paranoid':![],'indexes':[{'name':_0x7692('0x9'),'fields':['sectionId',_0x7692('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
index f911033..82b6d8a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7c35=['result','catch','util','bluebird','randomstring','ioredis','../../config/logger','../../config/environment','client','http','request','then','info','UserProfileSection,\x20%s,\x20%s','request\x20sent','debug','UserProfileSection,\x20%s,\x20%s,\x20%s','stringify','error','code','message'];(function(_0x54c2cf,_0x1e7a53){var _0x7ee2b=function(_0x52e9b2){while(--_0x52e9b2){_0x54c2cf['push'](_0x54c2cf['shift']());}};_0x7ee2b(++_0x1e7a53);}(_0x7c35,0x128));var _0x57c3=function(_0x220f98,_0x2576d7){_0x220f98=_0x220f98-0x0;var _0x32842d=_0x7c35[_0x220f98];return _0x32842d;};'use strict';var _=require('lodash');var util=require(_0x57c3('0x0'));var moment=require('moment');var BPromise=require(_0x57c3('0x1'));var rs=require(_0x57c3('0x2'));var fs=require('fs');var Redis=require(_0x57c3('0x3'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x57c3('0x4'))('rpc');var config=require(_0x57c3('0x5'));var jayson=require('jayson/promise');var client=jayson[_0x57c3('0x6')][_0x57c3('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x121af9,_0x301fcc,_0x29e2c1){return new BPromise(function(_0x8d104f,_0x194b80){return client[_0x57c3('0x8')](_0x121af9,_0x29e2c1)[_0x57c3('0x9')](function(_0x23f1b0){logger[_0x57c3('0xa')](_0x57c3('0xb'),_0x301fcc,_0x57c3('0xc'));logger[_0x57c3('0xd')](_0x57c3('0xe'),_0x301fcc,_0x57c3('0xc'),JSON[_0x57c3('0xf')](_0x23f1b0));if(_0x23f1b0[_0x57c3('0x10')]){if(_0x23f1b0[_0x57c3('0x10')][_0x57c3('0x11')]===0x1f4){logger[_0x57c3('0x10')]('UserProfileSection,\x20%s,\x20%s',_0x301fcc,_0x23f1b0['error']['message']);return _0x194b80(_0x23f1b0[_0x57c3('0x10')]['message']);}logger['error'](_0x57c3('0xb'),_0x301fcc,_0x23f1b0[_0x57c3('0x10')][_0x57c3('0x12')]);return _0x8d104f(_0x23f1b0[_0x57c3('0x10')][_0x57c3('0x12')]);}else{logger['info'](_0x57c3('0xb'),_0x301fcc,_0x57c3('0xc'));_0x8d104f(_0x23f1b0[_0x57c3('0x13')][_0x57c3('0x12')]);}})[_0x57c3('0x14')](function(_0x5364bd){logger[_0x57c3('0x10')](_0x57c3('0xb'),_0x301fcc,_0x5364bd);_0x194b80(_0x5364bd);});});}
\ No newline at end of file
+var _0x8c97=['code','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','client','http','request','then','info','UserProfileSection,\x20%s,\x20%s','request\x20sent','error'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0x8c97,0x158));var _0x78c9=function(_0x1bf90b,_0x1a5fa6){_0x1bf90b=_0x1bf90b-0x0;var _0x47f3fc=_0x8c97[_0x1bf90b];return _0x47f3fc;};'use strict';var _=require('lodash');var util=require(_0x78c9('0x0'));var moment=require(_0x78c9('0x1'));var BPromise=require(_0x78c9('0x2'));var rs=require(_0x78c9('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x78c9('0x4'))['db'];var utils=require(_0x78c9('0x5'));var logger=require(_0x78c9('0x6'))(_0x78c9('0x7'));var config=require('../../config/environment');var jayson=require('jayson/promise');var client=jayson[_0x78c9('0x8')][_0x78c9('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3b279f,_0x86d99,_0x4c537a){return new BPromise(function(_0x32f957,_0x26a9c6){return client[_0x78c9('0xa')](_0x3b279f,_0x4c537a)[_0x78c9('0xb')](function(_0x4f3da9){logger[_0x78c9('0xc')](_0x78c9('0xd'),_0x86d99,_0x78c9('0xe'));logger['debug']('UserProfileSection,\x20%s,\x20%s,\x20%s',_0x86d99,'request\x20sent',JSON['stringify'](_0x4f3da9));if(_0x4f3da9[_0x78c9('0xf')]){if(_0x4f3da9[_0x78c9('0xf')][_0x78c9('0x10')]===0x1f4){logger[_0x78c9('0xf')](_0x78c9('0xd'),_0x86d99,_0x4f3da9[_0x78c9('0xf')]['message']);return _0x26a9c6(_0x4f3da9[_0x78c9('0xf')][_0x78c9('0x11')]);}logger['error'](_0x78c9('0xd'),_0x86d99,_0x4f3da9['error'][_0x78c9('0x11')]);return _0x32f957(_0x4f3da9[_0x78c9('0xf')][_0x78c9('0x11')]);}else{logger[_0x78c9('0xc')](_0x78c9('0xd'),_0x86d99,'request\x20sent');_0x32f957(_0x4f3da9[_0x78c9('0x12')][_0x78c9('0x11')]);}})[_0x78c9('0x13')](function(_0x148ede){logger[_0x78c9('0xf')](_0x78c9('0xd'),_0x86d99,_0x148ede);_0x26a9c6(_0x148ede);});});}
\ No newline at end of file
index 4158df7..de83277 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9206=['path','connect-timeout','express','Router','../../config/environment','exports','multer','util'];(function(_0x1a3483,_0x341a88){var _0x5bd1c6=function(_0x18127e){while(--_0x18127e){_0x1a3483['push'](_0x1a3483['shift']());}};_0x5bd1c6(++_0x341a88);}(_0x9206,0x176));var _0x6920=function(_0x3577ce,_0x465719){_0x3577ce=_0x3577ce-0x0;var _0x3ef103=_0x9206[_0x3577ce];return _0x3ef103;};'use strict';var multer=require(_0x6920('0x0'));var util=require(_0x6920('0x1'));var path=require(_0x6920('0x2'));var timeout=require(_0x6920('0x3'));var express=require(_0x6920('0x4'));var router=express[_0x6920('0x5')]();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require(_0x6920('0x6'));module[_0x6920('0x7')]=router;
\ No newline at end of file
+var _0x2542=['exports','multer','util','path','connect-timeout','Router','../../components/interaction/service','../../config/environment'];(function(_0x307d86,_0x9264f2){var _0x361745=function(_0x1b64e1){while(--_0x1b64e1){_0x307d86['push'](_0x307d86['shift']());}};_0x361745(++_0x9264f2);}(_0x2542,0x169));var _0x2254=function(_0x4b3a18,_0x4869e0){_0x4b3a18=_0x4b3a18-0x0;var _0x18bdd2=_0x2542[_0x4b3a18];return _0x18bdd2;};'use strict';var multer=require(_0x2254('0x0'));var util=require(_0x2254('0x1'));var path=require(_0x2254('0x2'));var timeout=require(_0x2254('0x3'));var express=require('express');var router=express[_0x2254('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0x2254('0x5'));var config=require(_0x2254('0x6'));module[_0x2254('0x7')]=router;
\ No newline at end of file
index f079e34..74c5f32 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8533=['sequelize','exports','INTEGER'];(function(_0x366961,_0xb08071){var _0x32a852=function(_0x22600a){while(--_0x22600a){_0x366961['push'](_0x366961['shift']());}};_0x32a852(++_0xb08071);}(_0x8533,0x15f));var _0x3853=function(_0x1666b6,_0x4e85ee){_0x1666b6=_0x1666b6-0x0;var _0x195742=_0x8533[_0x1666b6];return _0x195742;};'use strict';var Sequelize=require(_0x3853('0x0'));module[_0x3853('0x1')]={'penalty':{'type':Sequelize[_0x3853('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x393b=['INTEGER','sequelize','exports'];(function(_0x1365f2,_0x933fb9){var _0x2a0895=function(_0x2b1973){while(--_0x2b1973){_0x1365f2['push'](_0x1365f2['shift']());}};_0x2a0895(++_0x933fb9);}(_0x393b,0x16c));var _0xb393=function(_0x343090,_0x433a80){_0x343090=_0x343090-0x0;var _0x3ff3e8=_0x393b[_0x343090];return _0x3ff3e8;};'use strict';var Sequelize=require(_0xb393('0x0'));module[_0xb393('0x1')]={'penalty':{'type':Sequelize[_0xb393('0x2')],'defaultValue':0x0}};
\ No newline at end of file
index 61bbee4..51f27d2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x09ec=['lodash','util','../../config/logger','moment','bluebird','request-promise','./userSmsQueue.attributes','exports','define','UserSmsQueue','user_has_sms_queues'];(function(_0x5725fd,_0x4405b7){var _0x140234=function(_0x544205){while(--_0x544205){_0x5725fd['push'](_0x5725fd['shift']());}};_0x140234(++_0x4405b7);}(_0x09ec,0x129));var _0xc09e=function(_0x3df223,_0x1740fc){_0x3df223=_0x3df223-0x0;var _0x562d11=_0x09ec[_0x3df223];return _0x562d11;};'use strict';var _=require(_0xc09e('0x0'));var util=require(_0xc09e('0x1'));var logger=require(_0xc09e('0x2'))('api');var moment=require(_0xc09e('0x3'));var BPromise=require(_0xc09e('0x4'));var rp=require(_0xc09e('0x5'));var attributes=require(_0xc09e('0x6'));module[_0xc09e('0x7')]=function(_0x32e73e,_0x805248){return _0x32e73e[_0xc09e('0x8')](_0xc09e('0x9'),attributes,{'tableName':_0xc09e('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xba67=['UserSmsQueue','lodash','util','../../config/logger','bluebird','request-promise','./userSmsQueue.attributes','exports'];(function(_0x55f8b4,_0x43f30d){var _0x2475f9=function(_0xdd6f4a){while(--_0xdd6f4a){_0x55f8b4['push'](_0x55f8b4['shift']());}};_0x2475f9(++_0x43f30d);}(_0xba67,0x161));var _0x7ba6=function(_0x497b45,_0x3ffaf7){_0x497b45=_0x497b45-0x0;var _0x382292=_0xba67[_0x497b45];return _0x382292;};'use strict';var _=require(_0x7ba6('0x0'));var util=require(_0x7ba6('0x1'));var logger=require(_0x7ba6('0x2'))('api');var moment=require('moment');var BPromise=require(_0x7ba6('0x3'));var rp=require(_0x7ba6('0x4'));var attributes=require(_0x7ba6('0x5'));module[_0x7ba6('0x6')]=function(_0x472368,_0x20bb04){return _0x472368['define'](_0x7ba6('0x7'),attributes,{'tableName':'user_has_sms_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 5008a4d..820a588 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa2f6=['client','http','request','then','UserSmsQueue,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','info','result','catch','lodash','util','moment','randomstring','ioredis','rpc','../../config/environment','jayson/promise'];(function(_0xf312e,_0x58c025){var _0x3852d4=function(_0x51de43){while(--_0x51de43){_0xf312e['push'](_0xf312e['shift']());}};_0x3852d4(++_0x58c025);}(_0xa2f6,0xa0));var _0x6a2f=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xa2f6[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x6a2f('0x0'));var util=require(_0x6a2f('0x1'));var moment=require(_0x6a2f('0x2'));var BPromise=require('bluebird');var rs=require(_0x6a2f('0x3'));var fs=require('fs');var Redis=require(_0x6a2f('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0x6a2f('0x5'));var config=require(_0x6a2f('0x6'));var jayson=require(_0x6a2f('0x7'));var client=jayson[_0x6a2f('0x8')][_0x6a2f('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x3010da,_0x31634d,_0x3cdd03){return new BPromise(function(_0x5cb0b1,_0x5e7a09){return client[_0x6a2f('0xa')](_0x3010da,_0x3cdd03)[_0x6a2f('0xb')](function(_0xe6b708){logger['info'](_0x6a2f('0xc'),_0x31634d,_0x6a2f('0xd'));logger['debug']('UserSmsQueue,\x20%s,\x20%s,\x20%s',_0x31634d,'request\x20sent',JSON[_0x6a2f('0xe')](_0xe6b708));if(_0xe6b708[_0x6a2f('0xf')]){if(_0xe6b708[_0x6a2f('0xf')][_0x6a2f('0x10')]===0x1f4){logger[_0x6a2f('0xf')](_0x6a2f('0xc'),_0x31634d,_0xe6b708['error'][_0x6a2f('0x11')]);return _0x5e7a09(_0xe6b708[_0x6a2f('0xf')][_0x6a2f('0x11')]);}logger[_0x6a2f('0xf')](_0x6a2f('0xc'),_0x31634d,_0xe6b708[_0x6a2f('0xf')]['message']);return _0x5cb0b1(_0xe6b708['error'][_0x6a2f('0x11')]);}else{logger[_0x6a2f('0x12')](_0x6a2f('0xc'),_0x31634d,_0x6a2f('0xd'));_0x5cb0b1(_0xe6b708[_0x6a2f('0x13')]['message']);}})[_0x6a2f('0x14')](function(_0x361d5e){logger['error'](_0x6a2f('0xc'),_0x31634d,_0x361d5e);_0x5e7a09(_0x361d5e);});});}
\ No newline at end of file
+var _0x1d1c=['UserSmsQueue,\x20%s,\x20%s','debug','request\x20sent','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info'];(function(_0x1e2080,_0x53283b){var _0x260111=function(_0x15da5e){while(--_0x15da5e){_0x1e2080['push'](_0x1e2080['shift']());}};_0x260111(++_0x53283b);}(_0x1d1c,0x11c));var _0xc1d1=function(_0x1182db,_0x3eadf7){_0x1182db=_0x1182db-0x0;var _0x1eea10=_0x1d1c[_0x1182db];return _0x1eea10;};'use strict';var _=require(_0xc1d1('0x0'));var util=require(_0xc1d1('0x1'));var moment=require(_0xc1d1('0x2'));var BPromise=require(_0xc1d1('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xc1d1('0x4'));var db=require(_0xc1d1('0x5'))['db'];var utils=require(_0xc1d1('0x6'));var logger=require(_0xc1d1('0x7'))(_0xc1d1('0x8'));var config=require(_0xc1d1('0x9'));var jayson=require(_0xc1d1('0xa'));var client=jayson[_0xc1d1('0xb')][_0xc1d1('0xc')]({'port':0x232a});function respondWithRpcPromise(_0x131633,_0xea3dda,_0x19b93f){return new BPromise(function(_0x529312,_0x154346){return client[_0xc1d1('0xd')](_0x131633,_0x19b93f)[_0xc1d1('0xe')](function(_0x5c92a9){logger[_0xc1d1('0xf')](_0xc1d1('0x10'),_0xea3dda,'request\x20sent');logger[_0xc1d1('0x11')]('UserSmsQueue,\x20%s,\x20%s,\x20%s',_0xea3dda,_0xc1d1('0x12'),JSON[_0xc1d1('0x13')](_0x5c92a9));if(_0x5c92a9[_0xc1d1('0x14')]){if(_0x5c92a9[_0xc1d1('0x14')][_0xc1d1('0x15')]===0x1f4){logger[_0xc1d1('0x14')](_0xc1d1('0x10'),_0xea3dda,_0x5c92a9[_0xc1d1('0x14')][_0xc1d1('0x16')]);return _0x154346(_0x5c92a9[_0xc1d1('0x14')][_0xc1d1('0x16')]);}logger[_0xc1d1('0x14')](_0xc1d1('0x10'),_0xea3dda,_0x5c92a9[_0xc1d1('0x14')]['message']);return _0x529312(_0x5c92a9[_0xc1d1('0x14')][_0xc1d1('0x16')]);}else{logger[_0xc1d1('0xf')](_0xc1d1('0x10'),_0xea3dda,'request\x20sent');_0x529312(_0x5c92a9[_0xc1d1('0x17')]['message']);}})[_0xc1d1('0x18')](function(_0x395195){logger[_0xc1d1('0x14')]('UserSmsQueue,\x20%s,\x20%s',_0xea3dda,_0x395195);_0x154346(_0x395195);});});}
\ No newline at end of file
index 7be48d9..673e1af 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf562=['Router','../../components/auth/service','../../components/interaction/service','../../config/environment','multer','util','path','connect-timeout','express'];(function(_0x460142,_0x24f662){var _0x27b3af=function(_0x2e250e){while(--_0x2e250e){_0x460142['push'](_0x460142['shift']());}};_0x27b3af(++_0x24f662);}(_0xf562,0x100));var _0x2f56=function(_0x18d696,_0x49fbd0){_0x18d696=_0x18d696-0x0;var _0x468cb0=_0xf562[_0x18d696];return _0x468cb0;};'use strict';var multer=require(_0x2f56('0x0'));var util=require(_0x2f56('0x1'));var path=require(_0x2f56('0x2'));var timeout=require(_0x2f56('0x3'));var express=require(_0x2f56('0x4'));var router=express[_0x2f56('0x5')]();var auth=require(_0x2f56('0x6'));var interaction=require(_0x2f56('0x7'));var config=require(_0x2f56('0x8'));module['exports']=router;
\ No newline at end of file
+var _0x90ec=['Router','../../components/auth/service','../../components/interaction/service','exports','multer','util','connect-timeout','express'];(function(_0x502056,_0x2e7f78){var _0x53ddde=function(_0x2c7a30){while(--_0x2c7a30){_0x502056['push'](_0x502056['shift']());}};_0x53ddde(++_0x2e7f78);}(_0x90ec,0x1d4));var _0xc90e=function(_0xb3254a,_0x4520ee){_0xb3254a=_0xb3254a-0x0;var _0x35e30b=_0x90ec[_0xb3254a];return _0x35e30b;};'use strict';var multer=require(_0xc90e('0x0'));var util=require(_0xc90e('0x1'));var path=require('path');var timeout=require(_0xc90e('0x2'));var express=require(_0xc90e('0x3'));var router=express[_0xc90e('0x4')]();var auth=require(_0xc90e('0x5'));var interaction=require(_0xc90e('0x6'));var config=require('../../config/environment');module[_0xc90e('0x7')]=router;
\ No newline at end of file
index 2b403a4..a07417c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb9b=['INTEGER','sequelize','exports'];(function(_0x10cc8b,_0x8f5caf){var _0x1c9b18=function(_0x8b9382){while(--_0x8b9382){_0x10cc8b['push'](_0x10cc8b['shift']());}};_0x1c9b18(++_0x8f5caf);}(_0xbb9b,0x18d));var _0xbbb9=function(_0x5ddd87,_0x4cee42){_0x5ddd87=_0x5ddd87-0x0;var _0x4e4161=_0xbb9b[_0x5ddd87];return _0x4e4161;};'use strict';var Sequelize=require(_0xbbb9('0x0'));module[_0xbbb9('0x1')]={'penalty':{'type':Sequelize[_0xbbb9('0x2')],'defaultValue':0x0}};
\ No newline at end of file
+var _0x10ba=['INTEGER','exports'];(function(_0x305914,_0x249320){var _0x5cea12=function(_0x5d851c){while(--_0x5d851c){_0x305914['push'](_0x305914['shift']());}};_0x5cea12(++_0x249320);}(_0x10ba,0x175));var _0xa10b=function(_0x58547b,_0x4b89c2){_0x58547b=_0x58547b-0x0;var _0x1d3fd2=_0x10ba[_0x58547b];return _0x1d3fd2;};'use strict';var Sequelize=require('sequelize');module[_0xa10b('0x0')]={'penalty':{'type':Sequelize[_0xa10b('0x1')],'defaultValue':0x0}};
\ No newline at end of file
index 287b7a1..367edef 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfc19=['bluebird','request-promise','./userVoiceQueue.attributes','exports','define','UserVoiceQueue','user_has_voice_queues','util','../../config/logger','api','moment'];(function(_0x4f6f84,_0x31e197){var _0x20d989=function(_0x34db70){while(--_0x34db70){_0x4f6f84['push'](_0x4f6f84['shift']());}};_0x20d989(++_0x31e197);}(_0xfc19,0x13b));var _0x9fc1=function(_0x561ffe,_0x2a95dd){_0x561ffe=_0x561ffe-0x0;var _0x3b0749=_0xfc19[_0x561ffe];return _0x3b0749;};'use strict';var _=require('lodash');var util=require(_0x9fc1('0x0'));var logger=require(_0x9fc1('0x1'))(_0x9fc1('0x2'));var moment=require(_0x9fc1('0x3'));var BPromise=require(_0x9fc1('0x4'));var rp=require(_0x9fc1('0x5'));var attributes=require(_0x9fc1('0x6'));module[_0x9fc1('0x7')]=function(_0x26906a,_0x5a74f5){return _0x26906a[_0x9fc1('0x8')](_0x9fc1('0x9'),attributes,{'tableName':_0x9fc1('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x6e0c=['../../config/logger','api','moment','bluebird','request-promise','./userVoiceQueue.attributes','define','UserVoiceQueue','user_has_voice_queues','lodash','util'];(function(_0x5c16aa,_0x546fee){var _0x358ab7=function(_0x1085a5){while(--_0x1085a5){_0x5c16aa['push'](_0x5c16aa['shift']());}};_0x358ab7(++_0x546fee);}(_0x6e0c,0x148));var _0xc6e0=function(_0x5a5dc6,_0x1ad6dd){_0x5a5dc6=_0x5a5dc6-0x0;var _0x4c47b9=_0x6e0c[_0x5a5dc6];return _0x4c47b9;};'use strict';var _=require(_0xc6e0('0x0'));var util=require(_0xc6e0('0x1'));var logger=require(_0xc6e0('0x2'))(_0xc6e0('0x3'));var moment=require(_0xc6e0('0x4'));var BPromise=require(_0xc6e0('0x5'));var rp=require(_0xc6e0('0x6'));var attributes=require(_0xc6e0('0x7'));module['exports']=function(_0x4d9fec,_0x8bf6de){return _0x4d9fec[_0xc6e0('0x8')](_0xc6e0('0x9'),attributes,{'tableName':_0xc6e0('0xa'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index e86bd81..20f34e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x10ac=['UserVoiceQueue,\x20%s,\x20%s','request\x20sent','debug','UserVoiceQueue,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','lodash','util','moment','bluebird','randomstring','rpc','../../config/environment','http','then','info'];(function(_0x51846b,_0x3dd939){var _0x4e48d8=function(_0x3c8c9c){while(--_0x3c8c9c){_0x51846b['push'](_0x51846b['shift']());}};_0x4e48d8(++_0x3dd939);}(_0x10ac,0xb4));var _0xc10a=function(_0x4e9d3c,_0x1f4b98){_0x4e9d3c=_0x4e9d3c-0x0;var _0x2d0825=_0x10ac[_0x4e9d3c];return _0x2d0825;};'use strict';var _=require(_0xc10a('0x0'));var util=require(_0xc10a('0x1'));var moment=require(_0xc10a('0x2'));var BPromise=require(_0xc10a('0x3'));var rs=require(_0xc10a('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require('../../config/logger')(_0xc10a('0x5'));var config=require(_0xc10a('0x6'));var jayson=require('jayson/promise');var client=jayson['client'][_0xc10a('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x35e015,_0x1ce334,_0x108bb2){return new BPromise(function(_0xe9cfd7,_0x1d9e3e){return client['request'](_0x35e015,_0x108bb2)[_0xc10a('0x8')](function(_0x24411d){logger[_0xc10a('0x9')](_0xc10a('0xa'),_0x1ce334,_0xc10a('0xb'));logger[_0xc10a('0xc')](_0xc10a('0xd'),_0x1ce334,'request\x20sent',JSON[_0xc10a('0xe')](_0x24411d));if(_0x24411d[_0xc10a('0xf')]){if(_0x24411d[_0xc10a('0xf')]['code']===0x1f4){logger['error'](_0xc10a('0xa'),_0x1ce334,_0x24411d[_0xc10a('0xf')][_0xc10a('0x10')]);return _0x1d9e3e(_0x24411d['error']['message']);}logger['error']('UserVoiceQueue,\x20%s,\x20%s',_0x1ce334,_0x24411d['error'][_0xc10a('0x10')]);return _0xe9cfd7(_0x24411d[_0xc10a('0xf')]['message']);}else{logger[_0xc10a('0x9')](_0xc10a('0xa'),_0x1ce334,_0xc10a('0xb'));_0xe9cfd7(_0x24411d[_0xc10a('0x11')]['message']);}})[_0xc10a('0x12')](function(_0x179ef9){logger[_0xc10a('0xf')](_0xc10a('0xa'),_0x1ce334,_0x179ef9);_0x1d9e3e(_0x179ef9);});});}
\ No newline at end of file
+var _0xce0c=['then','info','UserVoiceQueue,\x20%s,\x20%s','request\x20sent','UserVoiceQueue,\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','jayson/promise','client','http'];(function(_0x16ac45,_0x4bed54){var _0x1110df=function(_0x49787e){while(--_0x49787e){_0x16ac45['push'](_0x16ac45['shift']());}};_0x1110df(++_0x4bed54);}(_0xce0c,0x1ea));var _0xcce0=function(_0x226ad1,_0x2858e2){_0x226ad1=_0x226ad1-0x0;var _0x16b625=_0xce0c[_0x226ad1];return _0x16b625;};'use strict';var _=require(_0xcce0('0x0'));var util=require(_0xcce0('0x1'));var moment=require(_0xcce0('0x2'));var BPromise=require(_0xcce0('0x3'));var rs=require(_0xcce0('0x4'));var fs=require('fs');var Redis=require(_0xcce0('0x5'));var db=require(_0xcce0('0x6'))['db'];var utils=require(_0xcce0('0x7'));var logger=require(_0xcce0('0x8'))(_0xcce0('0x9'));var config=require(_0xcce0('0xa'));var jayson=require(_0xcce0('0xb'));var client=jayson[_0xcce0('0xc')][_0xcce0('0xd')]({'port':0x232a});function respondWithRpcPromise(_0x4a0982,_0x4be05a,_0x2dee38){return new BPromise(function(_0x1d0421,_0x20a936){return client['request'](_0x4a0982,_0x2dee38)[_0xcce0('0xe')](function(_0x4c3348){logger[_0xcce0('0xf')](_0xcce0('0x10'),_0x4be05a,_0xcce0('0x11'));logger['debug'](_0xcce0('0x12'),_0x4be05a,_0xcce0('0x11'),JSON['stringify'](_0x4c3348));if(_0x4c3348['error']){if(_0x4c3348[_0xcce0('0x13')][_0xcce0('0x14')]===0x1f4){logger[_0xcce0('0x13')](_0xcce0('0x10'),_0x4be05a,_0x4c3348[_0xcce0('0x13')]['message']);return _0x20a936(_0x4c3348[_0xcce0('0x13')][_0xcce0('0x15')]);}logger[_0xcce0('0x13')]('UserVoiceQueue,\x20%s,\x20%s',_0x4be05a,_0x4c3348['error'][_0xcce0('0x15')]);return _0x1d0421(_0x4c3348[_0xcce0('0x13')][_0xcce0('0x15')]);}else{logger[_0xcce0('0xf')](_0xcce0('0x10'),_0x4be05a,'request\x20sent');_0x1d0421(_0x4c3348[_0xcce0('0x16')][_0xcce0('0x15')]);}})[_0xcce0('0x17')](function(_0x4a51a7){logger[_0xcce0('0x13')](_0xcce0('0x10'),_0x4be05a,_0x4a51a7);_0x20a936(_0x4a51a7);});});}
\ No newline at end of file
index fc18cdf..4b8c633 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(_0x2962b4,_0x4b0786){var _0x411b7d=function(_0x363aad){while(--_0x363aad){_0x2962b4['push'](_0x2962b4['shift']());}};_0x411b7d(++_0x4b0786);}(_0xa899,0x155));var _0x9a89=function(_0xda464c,_0x26e47d){_0xda464c=_0xda464c-0x0;var _0x19e222=_0xa899[_0xda464c];return _0x19e222;};'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 _0xfd20=['../../components/interaction/service','exports','util','express','Router'];(function(_0xfae23b,_0x2be4ba){var _0x200640=function(_0x4ae258){while(--_0x4ae258){_0xfae23b['push'](_0xfae23b['shift']());}};_0x200640(++_0x2be4ba);}(_0xfd20,0x66));var _0x0fd2=function(_0x30382f,_0x1df507){_0x30382f=_0x30382f-0x0;var _0x4e3368=_0xfd20[_0x30382f];return _0x4e3368;};'use strict';var multer=require('multer');var util=require(_0x0fd2('0x0'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x0fd2('0x1'));var router=express[_0x0fd2('0x2')]();var auth=require('../../components/auth/service');var interaction=require(_0x0fd2('0x3'));var config=require('../../config/environment');module[_0x0fd2('0x4')]=router;
\ No newline at end of file
index c4420cc..eb665fe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1536=['Required\x20by\x20Asterisk','STRING','queue_interface','exports','INTEGER'];(function(_0x34df4a,_0x209d10){var _0x145c69=function(_0xb9bcbd){while(--_0xb9bcbd){_0x34df4a['push'](_0x34df4a['shift']());}};_0x145c69(++_0x209d10);}(_0x1536,0xe4));var _0x6153=function(_0x549b56,_0x2c964f){_0x549b56=_0x549b56-0x0;var _0x36337e=_0x1536[_0x549b56];return _0x36337e;};'use strict';var Sequelize=require('sequelize');module[_0x6153('0x0')]={'uniqueid':{'type':Sequelize[_0x6153('0x1')],'primaryKey':!![],'autoIncrement':!![],'comment':_0x6153('0x2')},'membername':{'type':Sequelize[_0x6153('0x3')],'allowNull':![],'comment':'Required\x20by\x20Asterisk'},'UserId':{'type':Sequelize[_0x6153('0x1')],'allowNull':![]},'queue_name':{'type':Sequelize[_0x6153('0x3')],'allowNull':![],'unique':_0x6153('0x4'),'comment':_0x6153('0x2')},'VoiceQueueId':{'type':Sequelize[_0x6153('0x1')],'allowNull':![]},'interface':{'type':Sequelize[_0x6153('0x3')],'allowNull':![],'unique':'queue_interface','comment':_0x6153('0x2')},'penalty':{'type':Sequelize[_0x6153('0x1')](0xb),'defaultValue':0x0,'comment':_0x6153('0x2')},'paused':{'type':Sequelize[_0x6153('0x1')](0xb),'defaultValue':0x0,'comment':_0x6153('0x2')}};
\ No newline at end of file
+var _0x54e0=['INTEGER','Required\x20by\x20Asterisk','STRING','queue_interface','sequelize'];(function(_0x44881b,_0x541447){var _0x59b5cf=function(_0x13b51e){while(--_0x13b51e){_0x44881b['push'](_0x44881b['shift']());}};_0x59b5cf(++_0x541447);}(_0x54e0,0xc2));var _0x054e=function(_0x5bed47,_0xd5f081){_0x5bed47=_0x5bed47-0x0;var _0x21ced7=_0x54e0[_0x5bed47];return _0x21ced7;};'use strict';var Sequelize=require(_0x054e('0x0'));module['exports']={'uniqueid':{'type':Sequelize[_0x054e('0x1')],'primaryKey':!![],'autoIncrement':!![],'comment':_0x054e('0x2')},'membername':{'type':Sequelize[_0x054e('0x3')],'allowNull':![],'comment':_0x054e('0x2')},'UserId':{'type':Sequelize[_0x054e('0x1')],'allowNull':![]},'queue_name':{'type':Sequelize[_0x054e('0x3')],'allowNull':![],'unique':'queue_interface','comment':_0x054e('0x2')},'VoiceQueueId':{'type':Sequelize['INTEGER'],'allowNull':![]},'interface':{'type':Sequelize[_0x054e('0x3')],'allowNull':![],'unique':_0x054e('0x4'),'comment':_0x054e('0x2')},'penalty':{'type':Sequelize[_0x054e('0x1')](0xb),'defaultValue':0x0,'comment':_0x054e('0x2')},'paused':{'type':Sequelize[_0x054e('0x1')](0xb),'defaultValue':0x0,'comment':_0x054e('0x2')}};
\ No newline at end of file
index 438cef1..f5f67e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5041=['emit','hasOwnProperty','exports','events','UserVoiceQueueRt','setMaxListeners','remove'];(function(_0x472873,_0x4bb7f9){var _0x5347c2=function(_0x3e5076){while(--_0x3e5076){_0x472873['push'](_0x472873['shift']());}};_0x5347c2(++_0x4bb7f9);}(_0x5041,0x130));var _0x1504=function(_0x300381,_0x7b94c){_0x300381=_0x300381-0x0;var _0x5da040=_0x5041[_0x300381];return _0x5da040;};'use strict';var EventEmitter=require(_0x1504('0x0'));var UserVoiceQueueRt=require('../../mysqldb')['db'][_0x1504('0x1')];var UserVoiceQueueRtEvents=new EventEmitter();UserVoiceQueueRtEvents[_0x1504('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':'update','afterDestroy':_0x1504('0x3')};function emitEvent(_0x2bfff7){return function(_0x46c92d,_0x1072fa,_0xab4bd0){UserVoiceQueueRtEvents['emit'](_0x2bfff7+':'+_0x46c92d['id'],_0x46c92d);UserVoiceQueueRtEvents[_0x1504('0x4')](_0x2bfff7,_0x46c92d);_0xab4bd0(null);};}for(var e in events){if(events[_0x1504('0x5')](e)){var event=events[e];UserVoiceQueueRt['hook'](e,emitEvent(event));}}module[_0x1504('0x6')]=UserVoiceQueueRtEvents;
\ No newline at end of file
+var _0xe9c2=['update','remove','emit','hasOwnProperty','hook','events','UserVoiceQueueRt','save'];(function(_0x3469c8,_0xe103fe){var _0x317fd9=function(_0x43eb0f){while(--_0x43eb0f){_0x3469c8['push'](_0x3469c8['shift']());}};_0x317fd9(++_0xe103fe);}(_0xe9c2,0xd5));var _0x2e9c=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0xe9c2[_0x57b54c];return _0x59cc19;};'use strict';var EventEmitter=require(_0x2e9c('0x0'));var UserVoiceQueueRt=require('../../mysqldb')['db'][_0x2e9c('0x1')];var UserVoiceQueueRtEvents=new EventEmitter();UserVoiceQueueRtEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x2e9c('0x2'),'afterUpdate':_0x2e9c('0x3'),'afterDestroy':_0x2e9c('0x4')};function emitEvent(_0x3fd9ad){return function(_0x56365a,_0x4c5c28,_0x486668){UserVoiceQueueRtEvents['emit'](_0x3fd9ad+':'+_0x56365a['id'],_0x56365a);UserVoiceQueueRtEvents[_0x2e9c('0x5')](_0x3fd9ad,_0x56365a);_0x486668(null);};}for(var e in events){if(events[_0x2e9c('0x6')](e)){var event=events[e];UserVoiceQueueRt[_0x2e9c('0x7')](e,emitEvent(event));}}module['exports']=UserVoiceQueueRtEvents;
\ No newline at end of file
index 095f699..c38c40b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x216a=['moment','bluebird','request-promise','./userVoiceQueueRt.attributes','exports','define','UserVoiceQueueRt','user_has_voice_queues_rt','../../config/logger','api'];(function(_0x124873,_0x2e5497){var _0x2b962f=function(_0x48d16c){while(--_0x48d16c){_0x124873['push'](_0x124873['shift']());}};_0x2b962f(++_0x2e5497);}(_0x216a,0xd0));var _0xa216=function(_0x3aa84b,_0x42d5ae){_0x3aa84b=_0x3aa84b-0x0;var _0x136a34=_0x216a[_0x3aa84b];return _0x136a34;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0xa216('0x0'))(_0xa216('0x1'));var moment=require(_0xa216('0x2'));var BPromise=require(_0xa216('0x3'));var rp=require(_0xa216('0x4'));var attributes=require(_0xa216('0x5'));module[_0xa216('0x6')]=function(_0x4d988f,_0x5552bc){return _0x4d988f[_0xa216('0x7')](_0xa216('0x8'),attributes,{'tableName':_0xa216('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xbd05=['UserVoiceQueueRt','lodash','util','../../config/logger','moment','bluebird','./userVoiceQueueRt.attributes','exports'];(function(_0x5edd83,_0x55b699){var _0x5d062f=function(_0x484fc5){while(--_0x484fc5){_0x5edd83['push'](_0x5edd83['shift']());}};_0x5d062f(++_0x55b699);}(_0xbd05,0x109));var _0x5bd0=function(_0x496333,_0x1c47d6){_0x496333=_0x496333-0x0;var _0x44256e=_0xbd05[_0x496333];return _0x44256e;};'use strict';var _=require(_0x5bd0('0x0'));var util=require(_0x5bd0('0x1'));var logger=require(_0x5bd0('0x2'))('api');var moment=require(_0x5bd0('0x3'));var BPromise=require(_0x5bd0('0x4'));var rp=require('request-promise');var attributes=require(_0x5bd0('0x5'));module[_0x5bd0('0x6')]=function(_0x58c54d,_0x417e4c){return _0x58c54d['define'](_0x5bd0('0x7'),attributes,{'tableName':'user_has_voice_queues_rt','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 3125e06..930ee7f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb51=['message','result','catch','GetVoiceQueueRtPauses','options','raw','where','COUNT','sequelize','literal','`paused`\x20=\x201,\x201,\x20null','outboundQueuePauses','debug','util','moment','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','redis','defaults','localhost','socket.io-emitter','./userVoiceQueueRt.socket','register','request','then','info','UserVoiceQueueRt,\x20%s,\x20%s','UserVoiceQueueRt,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code'];(function(_0x311c35,_0x534915){var _0x5cc50c=function(_0x3ad680){while(--_0x3ad680){_0x311c35['push'](_0x311c35['shift']());}};_0x5cc50c(++_0x534915);}(_0xbb51,0x1ee));var _0x1bb5=function(_0x273c39,_0x1052e6){_0x273c39=_0x273c39-0x0;var _0x46d6b5=_0xbb51[_0x273c39];return _0x46d6b5;};'use strict';var _=require('lodash');var util=require(_0x1bb5('0x0'));var moment=require(_0x1bb5('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x1bb5('0x2'));var db=require(_0x1bb5('0x3'))['db'];var utils=require(_0x1bb5('0x4'));var logger=require(_0x1bb5('0x5'))(_0x1bb5('0x6'));var config=require('../../config/environment');var jayson=require(_0x1bb5('0x7'));var client=jayson[_0x1bb5('0x8')]['http']({'port':0x232a});config[_0x1bb5('0x9')]=_[_0x1bb5('0xa')](config[_0x1bb5('0x9')],{'host':_0x1bb5('0xb'),'port':0x18eb});var socket=require(_0x1bb5('0xc'))(new Redis(config[_0x1bb5('0x9')]));require(_0x1bb5('0xd'))[_0x1bb5('0xe')](socket);function respondWithRpcPromise(_0xf60d3e,_0x2ec5d,_0x15fe0a){return new BPromise(function(_0x3f1fec,_0x159a5d){return client[_0x1bb5('0xf')](_0xf60d3e,_0x15fe0a)[_0x1bb5('0x10')](function(_0x527f41){logger[_0x1bb5('0x11')](_0x1bb5('0x12'),_0x2ec5d,'request\x20sent');logger['debug'](_0x1bb5('0x13'),_0x2ec5d,_0x1bb5('0x14'),JSON[_0x1bb5('0x15')](_0x527f41));if(_0x527f41[_0x1bb5('0x16')]){if(_0x527f41[_0x1bb5('0x16')][_0x1bb5('0x17')]===0x1f4){logger[_0x1bb5('0x16')](_0x1bb5('0x12'),_0x2ec5d,_0x527f41['error'][_0x1bb5('0x18')]);return _0x159a5d(_0x527f41[_0x1bb5('0x16')][_0x1bb5('0x18')]);}logger[_0x1bb5('0x16')](_0x1bb5('0x12'),_0x2ec5d,_0x527f41[_0x1bb5('0x16')][_0x1bb5('0x18')]);return _0x3f1fec(_0x527f41[_0x1bb5('0x16')][_0x1bb5('0x18')]);}else{logger[_0x1bb5('0x11')](_0x1bb5('0x12'),_0x2ec5d,_0x1bb5('0x14'));_0x3f1fec(_0x527f41[_0x1bb5('0x19')][_0x1bb5('0x18')]);}})[_0x1bb5('0x1a')](function(_0x894ef0){logger[_0x1bb5('0x16')](_0x1bb5('0x12'),_0x2ec5d,_0x894ef0);_0x159a5d(_0x894ef0);});});}exports[_0x1bb5('0x1b')]=function(_0x521c31){var _0xc4f352=this;return new Promise(function(_0xa4e23f,_0x5ea7e1){return db['UserVoiceQueueRt']['findAll']({'raw':_0x521c31['options']?_0x521c31[_0x1bb5('0x1c')][_0x1bb5('0x1d')]===undefined?!![]:![]:!![],'where':_0x521c31['options']?_0x521c31[_0x1bb5('0x1c')][_0x1bb5('0x1e')]||null:null,'attributes':[[db['sequelize']['fn'](_0x1bb5('0x1f'),db['sequelize']['fn']('IF',db[_0x1bb5('0x20')][_0x1bb5('0x21')](_0x1bb5('0x22')))),_0x1bb5('0x23')]]})[_0x1bb5('0x10')](function(_0x22de1d){logger[_0x1bb5('0x11')](_0x1bb5('0x1b'),_0x521c31);logger[_0x1bb5('0x24')](_0x1bb5('0x1b'),_0x521c31,JSON['stringify'](_0x22de1d));_0xa4e23f(_0x22de1d);})['catch'](function(_0x2df446){logger['error'](_0x1bb5('0x1b'),_0x2df446[_0x1bb5('0x18')],_0x521c31);_0x5ea7e1(_0xc4f352[_0x1bb5('0x16')](0x1f4,_0x2df446[_0x1bb5('0x18')]));});});};
\ No newline at end of file
+var _0x7097=['UserVoiceQueueRt,\x20%s,\x20%s','request\x20sent','UserVoiceQueueRt,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','UserVoiceQueueRt','findAll','options','where','sequelize','COUNT','`paused`\x20=\x201,\x201,\x20null','then','GetVoiceQueueRtPauses','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/logger','../../config/environment','client','redis','defaults','localhost','./userVoiceQueueRt.socket','request','info'];(function(_0xbd9433,_0x349017){var _0x2b4316=function(_0x57202f){while(--_0x57202f){_0xbd9433['push'](_0xbd9433['shift']());}};_0x2b4316(++_0x349017);}(_0x7097,0x119));var _0x7709=function(_0x544cad,_0x50d557){_0x544cad=_0x544cad-0x0;var _0x43f9bb=_0x7097[_0x544cad];return _0x43f9bb;};'use strict';var _=require(_0x7709('0x0'));var util=require(_0x7709('0x1'));var moment=require(_0x7709('0x2'));var BPromise=require(_0x7709('0x3'));var rs=require(_0x7709('0x4'));var fs=require('fs');var Redis=require(_0x7709('0x5'));var db=require(_0x7709('0x6'))['db'];var utils=require('../../config/utils');var logger=require(_0x7709('0x7'))('rpc');var config=require(_0x7709('0x8'));var jayson=require('jayson/promise');var client=jayson[_0x7709('0x9')]['http']({'port':0x232a});config[_0x7709('0xa')]=_[_0x7709('0xb')](config[_0x7709('0xa')],{'host':_0x7709('0xc'),'port':0x18eb});var socket=require('socket.io-emitter')(new Redis(config[_0x7709('0xa')]));require(_0x7709('0xd'))['register'](socket);function respondWithRpcPromise(_0x23efd6,_0x5aefb3,_0x27279c){return new BPromise(function(_0x135cce,_0x3e7670){return client[_0x7709('0xe')](_0x23efd6,_0x27279c)['then'](function(_0x191a9a){logger[_0x7709('0xf')](_0x7709('0x10'),_0x5aefb3,_0x7709('0x11'));logger['debug'](_0x7709('0x12'),_0x5aefb3,_0x7709('0x11'),JSON[_0x7709('0x13')](_0x191a9a));if(_0x191a9a[_0x7709('0x14')]){if(_0x191a9a[_0x7709('0x14')]['code']===0x1f4){logger['error'](_0x7709('0x10'),_0x5aefb3,_0x191a9a[_0x7709('0x14')][_0x7709('0x15')]);return _0x3e7670(_0x191a9a[_0x7709('0x14')][_0x7709('0x15')]);}logger[_0x7709('0x14')](_0x7709('0x10'),_0x5aefb3,_0x191a9a['error'][_0x7709('0x15')]);return _0x135cce(_0x191a9a[_0x7709('0x14')][_0x7709('0x15')]);}else{logger[_0x7709('0xf')](_0x7709('0x10'),_0x5aefb3,_0x7709('0x11'));_0x135cce(_0x191a9a[_0x7709('0x16')][_0x7709('0x15')]);}})[_0x7709('0x17')](function(_0x1e03e2){logger['error'](_0x7709('0x10'),_0x5aefb3,_0x1e03e2);_0x3e7670(_0x1e03e2);});});}exports['GetVoiceQueueRtPauses']=function(_0x4b2e89){var _0x341cf3=this;return new Promise(function(_0x31e3c9,_0x4dae6b){return db[_0x7709('0x18')][_0x7709('0x19')]({'raw':_0x4b2e89[_0x7709('0x1a')]?_0x4b2e89['options']['raw']===undefined?!![]:![]:!![],'where':_0x4b2e89[_0x7709('0x1a')]?_0x4b2e89['options'][_0x7709('0x1b')]||null:null,'attributes':[[db[_0x7709('0x1c')]['fn'](_0x7709('0x1d'),db[_0x7709('0x1c')]['fn']('IF',db[_0x7709('0x1c')]['literal'](_0x7709('0x1e')))),'outboundQueuePauses']]})[_0x7709('0x1f')](function(_0x1e631a){logger[_0x7709('0xf')](_0x7709('0x20'),_0x4b2e89);logger['debug'](_0x7709('0x20'),_0x4b2e89,JSON[_0x7709('0x13')](_0x1e631a));_0x31e3c9(_0x1e631a);})[_0x7709('0x17')](function(_0x94af9b){logger[_0x7709('0x14')](_0x7709('0x20'),_0x94af9b[_0x7709('0x15')],_0x4b2e89);_0x4dae6b(_0x341cf3[_0x7709('0x14')](0x1f4,_0x94af9b[_0x7709('0x15')]));});});};
\ No newline at end of file
index 6610f4b..eb4dcc1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd51=['removeListener','register','length','userVoiceQueueRt:','./userVoiceQueueRt.events','remove','update'];(function(_0x30be39,_0xfb49ad){var _0x4d99d6=function(_0x1e7665){while(--_0x1e7665){_0x30be39['push'](_0x30be39['shift']());}};_0x4d99d6(++_0xfb49ad);}(_0xbd51,0x1a8));var _0x1bd5=function(_0x5c44d4,_0x2258d4){_0x5c44d4=_0x5c44d4-0x0;var _0x27d9f4=_0xbd51[_0x5c44d4];return _0x27d9f4;};'use strict';var UserVoiceQueueRtEvents=require(_0x1bd5('0x0'));var events=['save',_0x1bd5('0x1'),_0x1bd5('0x2')];function createListener(_0x3b9f71,_0x1a9dcc){return function(_0x545aac){_0x1a9dcc['emit'](_0x3b9f71,_0x545aac);};}function removeListener(_0x58af16,_0x531028){return function(){UserVoiceQueueRtEvents[_0x1bd5('0x3')](_0x58af16,_0x531028);};}exports[_0x1bd5('0x4')]=function(_0x43e6b6){for(var _0x59ddfb=0x0,_0x29abea=events[_0x1bd5('0x5')];_0x59ddfb<_0x29abea;_0x59ddfb++){var _0x19077c=events[_0x59ddfb];var _0x27d58f=createListener(_0x1bd5('0x6')+_0x19077c,_0x43e6b6);UserVoiceQueueRtEvents['on'](_0x19077c,_0x27d58f);}};
\ No newline at end of file
+var _0x0309=['removeListener','userVoiceQueueRt:','./userVoiceQueueRt.events','remove','emit'];(function(_0x13ea00,_0x12f610){var _0x1f7347=function(_0x34ae63){while(--_0x34ae63){_0x13ea00['push'](_0x13ea00['shift']());}};_0x1f7347(++_0x12f610);}(_0x0309,0x165));var _0x9030=function(_0x41af80,_0x6d53ce){_0x41af80=_0x41af80-0x0;var _0x13c782=_0x0309[_0x41af80];return _0x13c782;};'use strict';var UserVoiceQueueRtEvents=require(_0x9030('0x0'));var events=['save',_0x9030('0x1'),'update'];function createListener(_0x5b1a40,_0x352a94){return function(_0x40e75e){_0x352a94[_0x9030('0x2')](_0x5b1a40,_0x40e75e);};}function removeListener(_0x29e331,_0x2e6276){return function(){UserVoiceQueueRtEvents[_0x9030('0x3')](_0x29e331,_0x2e6276);};}exports['register']=function(_0x5a3334){for(var _0x1c9c7b=0x0,_0x105c15=events['length'];_0x1c9c7b<_0x105c15;_0x1c9c7b++){var _0xb53eb4=events[_0x1c9c7b];var _0x4e6c7b=createListener(_0x9030('0x4')+_0xb53eb4,_0x5a3334);UserVoiceQueueRtEvents['on'](_0xb53eb4,_0x4e6c7b);}};
\ No newline at end of file
index e109159..ded9317 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x91a7=['show','create','put','/:id','delete','destroy','exports','util','path','connect-timeout','Router','../../components/interaction/service','get','isAuthenticated'];(function(_0x161370,_0x5860e1){var _0x4c8d0d=function(_0x1c1e8d){while(--_0x1c1e8d){_0x161370['push'](_0x161370['shift']());}};_0x4c8d0d(++_0x5860e1);}(_0x91a7,0xe7));var _0x791a=function(_0xb6afe,_0x38671f){_0xb6afe=_0xb6afe-0x0;var _0x335218=_0x91a7[_0xb6afe];return _0x335218;};'use strict';var multer=require('multer');var util=require(_0x791a('0x0'));var path=require(_0x791a('0x1'));var timeout=require(_0x791a('0x2'));var express=require('express');var router=express[_0x791a('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x791a('0x4'));var config=require('../../config/environment');var controller=require('./variable.controller');router[_0x791a('0x5')]('/',auth[_0x791a('0x6')](),controller['index']);router[_0x791a('0x5')]('/:id',auth[_0x791a('0x6')](),controller[_0x791a('0x7')]);router['post']('/',auth[_0x791a('0x6')](),controller[_0x791a('0x8')]);router[_0x791a('0x9')](_0x791a('0xa'),auth[_0x791a('0x6')](),controller['update']);router[_0x791a('0xb')](_0x791a('0xa'),auth['isAuthenticated'](),controller[_0x791a('0xc')]);module[_0x791a('0xd')]=router;
\ No newline at end of file
+var _0xaa88=['post','put','/:id','delete','destroy','multer','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./variable.controller','get','isAuthenticated','show'];(function(_0x318629,_0x415e3d){var _0x37f628=function(_0x4940b7){while(--_0x4940b7){_0x318629['push'](_0x318629['shift']());}};_0x37f628(++_0x415e3d);}(_0xaa88,0x137));var _0x8aa8=function(_0x2af29a,_0x4f44bc){_0x2af29a=_0x2af29a-0x0;var _0x5ef02f=_0xaa88[_0x2af29a];return _0x5ef02f;};'use strict';var multer=require(_0x8aa8('0x0'));var util=require(_0x8aa8('0x1'));var path=require(_0x8aa8('0x2'));var timeout=require(_0x8aa8('0x3'));var express=require('express');var router=express[_0x8aa8('0x4')]();var auth=require(_0x8aa8('0x5'));var interaction=require(_0x8aa8('0x6'));var config=require(_0x8aa8('0x7'));var controller=require(_0x8aa8('0x8'));router[_0x8aa8('0x9')]('/',auth['isAuthenticated'](),controller['index']);router[_0x8aa8('0x9')]('/:id',auth[_0x8aa8('0xa')](),controller[_0x8aa8('0xb')]);router[_0x8aa8('0xc')]('/',auth[_0x8aa8('0xa')](),controller['create']);router[_0x8aa8('0xd')](_0x8aa8('0xe'),auth[_0x8aa8('0xa')](),controller['update']);router[_0x8aa8('0xf')](_0x8aa8('0xe'),auth[_0x8aa8('0xa')](),controller[_0x8aa8('0x10')]);module['exports']=router;
\ No newline at end of file
index efafbfc..670cca2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5322=['sequelize','exports','STRING'];(function(_0x5a776b,_0x46f785){var _0xbbef59=function(_0x38313e){while(--_0x38313e){_0x5a776b['push'](_0x5a776b['shift']());}};_0xbbef59(++_0x46f785);}(_0x5322,0xff));var _0x2532=function(_0x5d9ceb,_0x1a49f5){_0x5d9ceb=_0x5d9ceb-0x0;var _0x33ce82=_0x5322[_0x5d9ceb];return _0x33ce82;};'use strict';var Sequelize=require(_0x2532('0x0'));module[_0x2532('0x1')]={'name':{'type':Sequelize[_0x2532('0x2')],'unique':'name','allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x2532('0x2')]}};
\ No newline at end of file
+var _0x9448=['exports','STRING','name','sequelize'];(function(_0xaf5a1,_0x225443){var _0x5a65c1=function(_0x2072fc){while(--_0x2072fc){_0xaf5a1['push'](_0xaf5a1['shift']());}};_0x5a65c1(++_0x225443);}(_0x9448,0x127));var _0x8944=function(_0x5e76c6,_0xf16290){_0x5e76c6=_0x5e76c6-0x0;var _0x43fb22=_0x9448[_0x5e76c6];return _0x43fb22;};'use strict';var Sequelize=require(_0x8944('0x0'));module[_0x8944('0x1')]={'name':{'type':Sequelize[_0x8944('0x2')],'unique':_0x8944('0x3'),'allowNull':![],'validate':{'notEmpty':!![]}},'description':{'type':Sequelize[_0x8944('0x2')]}};
\ No newline at end of file
index 73860cb..22da719 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x93a4=['../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','limit','set','Content-Range','apply','save','then','Variables','destroy','error','stack','name','Variable','rawAttributes','model','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','offset','order','where','merge','map','type','key','VIRTUAL','filter','includeAll','include','findAll','rows','catch','show','params','find','create','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','update','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs'];(function(_0x36ed48,_0x1ee0d4){var _0x51c63a=function(_0x2d0a40){while(--_0x2d0a40){_0x36ed48['push'](_0x36ed48['shift']());}};_0x51c63a(++_0x1ee0d4);}(_0x93a4,0x8f));var _0x493a=function(_0x3487cd,_0x4d1c85){_0x3487cd=_0x3487cd-0x0;var _0x41679d=_0x93a4[_0x3487cd];return _0x41679d;};'use strict';var pdf=require(_0x493a('0x0'));var emlformat=require(_0x493a('0x1'));var rimraf=require(_0x493a('0x2'));var zipdir=require(_0x493a('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x493a('0x4'));var moment=require('moment');var BPromise=require(_0x493a('0x5'));var Mustache=require(_0x493a('0x6'));var util=require(_0x493a('0x7'));var path=require(_0x493a('0x8'));var sox=require(_0x493a('0x9'));var csv=require(_0x493a('0xa'));var ejs=require(_0x493a('0xb'));var fs=require('fs');var _=require(_0x493a('0xc'));var squel=require(_0x493a('0xd'));var crypto=require(_0x493a('0xe'));var jsforce=require(_0x493a('0xf'));var deskjs=require(_0x493a('0x10'));var toCsv=require(_0x493a('0xa'));var querystring=require(_0x493a('0x11'));var Papa=require(_0x493a('0x12'));var authService=require(_0x493a('0x13'));var hardwareService=require(_0x493a('0x14'));var Redis=require(_0x493a('0x15'));var qs=require(_0x493a('0x16'));var logger=require(_0x493a('0x17'))(_0x493a('0x18'));var utils=require(_0x493a('0x19'));var config=require(_0x493a('0x1a'));var db=require(_0x493a('0x1b'))['db'];function respondWithStatusCode(_0xac034d,_0x543cf8){_0x543cf8=_0x543cf8||0xcc;return function(_0x34b808){if(_0x34b808){return _0xac034d[_0x493a('0x1c')](_0x543cf8);}return _0xac034d[_0x493a('0x1d')](_0x543cf8)[_0x493a('0x1e')]();};}function respondWithResult(_0x31f052,_0x41f72b){_0x41f72b=_0x41f72b||0xc8;return function(_0x2f78e2){if(_0x2f78e2){return _0x31f052[_0x493a('0x1d')](_0x41f72b)[_0x493a('0x1f')](_0x2f78e2);}};}function respondWithFilteredResult(_0x212481,_0x525f5c){return function(_0x59cfad){if(_0x59cfad){var _0x4ee2e7=_0x59cfad[_0x493a('0x20')],_0xedacd2=_0x525f5c['offset'],_0x30b41f=_0x525f5c['offset']+_0x525f5c[_0x493a('0x21')],_0x2dc32e;if(_0x30b41f>=_0x4ee2e7){_0x30b41f=_0x4ee2e7;_0x2dc32e=0xc8;}else{_0x2dc32e=0xce;}_0x212481[_0x493a('0x1d')](_0x2dc32e);return _0x212481[_0x493a('0x22')](_0x493a('0x23'),_0xedacd2+'-'+_0x30b41f+'/'+_0x4ee2e7)[_0x493a('0x1f')](_0x59cfad);}return null;};}function patchUpdates(_0x28dfce){return function(_0x1f5af2){try{jsonpatch[_0x493a('0x24')](_0x1f5af2,_0x28dfce,!![]);}catch(_0x114d61){return BPromise['reject'](_0x114d61);}return _0x1f5af2[_0x493a('0x25')]();};}function saveUpdates(_0x325db4,_0x20c2c1){return function(_0x534a1d){if(_0x534a1d){return _0x534a1d['update'](_0x325db4)[_0x493a('0x26')](function(_0x35346d){return _0x35346d;});}return null;};}function removeEntity(_0x1b98f0,_0xccf735){return function(_0x231601){if(_0x231601){return _0x231601['destroy']()[_0x493a('0x26')](function(){var _0x11a0eb=_0x231601['get']({'plain':!![]});var _0x58fdd8=_0x493a('0x27');return db['UserProfileResource'][_0x493a('0x28')]({'where':{'type':_0x58fdd8,'resourceId':_0x11a0eb['id']}})[_0x493a('0x26')](function(){return _0x231601;});})[_0x493a('0x26')](function(){_0x1b98f0[_0x493a('0x1d')](0xcc)['end']();});}};}function handleEntityNotFound(_0x16762c,_0x1f0f1a){return function(_0x1cc2af){if(!_0x1cc2af){_0x16762c['sendStatus'](0x194);}return _0x1cc2af;};}function handleError(_0x10bbb5,_0x23e8b1){_0x23e8b1=_0x23e8b1||0x1f4;return function(_0x4bc8ce){logger[_0x493a('0x29')](_0x4bc8ce[_0x493a('0x2a')]);if(_0x4bc8ce[_0x493a('0x2b')]){delete _0x4bc8ce[_0x493a('0x2b')];}_0x10bbb5[_0x493a('0x1d')](_0x23e8b1)['send'](_0x4bc8ce);};}exports['index']=function(_0x3e6a6f,_0x575295){var _0x1da6b3={},_0x4b5fee={},_0x5838fd={'count':0x0,'rows':[]};var _0x20f3ef=db[_0x493a('0x2c')][_0x493a('0x2d')];_0x4b5fee[_0x493a('0x2e')]=_[_0x493a('0x2f')](_0x20f3ef);_0x4b5fee['query']=_['keys'](_0x3e6a6f[_0x493a('0x30')]);_0x4b5fee[_0x493a('0x31')]=_[_0x493a('0x32')](_0x4b5fee[_0x493a('0x2e')],_0x4b5fee[_0x493a('0x30')]);_0x1da6b3[_0x493a('0x33')]=_[_0x493a('0x32')](_0x4b5fee[_0x493a('0x2e')],qs[_0x493a('0x34')](_0x3e6a6f[_0x493a('0x30')]['fields']));_0x1da6b3[_0x493a('0x33')]=_0x1da6b3[_0x493a('0x33')][_0x493a('0x35')]?_0x1da6b3['attributes']:_0x4b5fee[_0x493a('0x2e')];if(!_0x3e6a6f[_0x493a('0x30')][_0x493a('0x36')]('nolimit')){_0x1da6b3['limit']=qs[_0x493a('0x21')](_0x3e6a6f['query']['limit']);_0x1da6b3[_0x493a('0x37')]=qs['offset'](_0x3e6a6f[_0x493a('0x30')][_0x493a('0x37')]);}_0x1da6b3[_0x493a('0x38')]=qs['sort'](_0x3e6a6f['query']['sort']);_0x1da6b3[_0x493a('0x39')]=qs[_0x493a('0x31')](_['pick'](_0x3e6a6f[_0x493a('0x30')],_0x4b5fee[_0x493a('0x31')]));if(_0x3e6a6f['query']['filter']){_0x1da6b3['where']=_[_0x493a('0x3a')](_0x1da6b3[_0x493a('0x39')],{'$or':_[_0x493a('0x3b')](_0x20f3ef,function(_0xc788ed){if(_0xc788ed[_0x493a('0x3c')][_0x493a('0x3d')]!==_0x493a('0x3e')){var _0xb5086e={};_0xb5086e[_0xc788ed['field']]={'$like':'%'+_0x3e6a6f[_0x493a('0x30')][_0x493a('0x3f')]+'%'};return _0xb5086e;}})});}_0x1da6b3=_[_0x493a('0x3a')]({},_0x1da6b3,_0x3e6a6f['options']);var _0x3bddac={'where':_0x1da6b3[_0x493a('0x39')]};return db['Variable'][_0x493a('0x20')](_0x3bddac)[_0x493a('0x26')](function(_0x1e33d4){_0x5838fd['count']=_0x1e33d4;if(_0x3e6a6f['query'][_0x493a('0x40')]){_0x1da6b3[_0x493a('0x41')]=[{'all':!![]}];}return db['Variable'][_0x493a('0x42')](_0x1da6b3);})[_0x493a('0x26')](function(_0x25a1fa){_0x5838fd[_0x493a('0x43')]=_0x25a1fa;return _0x5838fd;})[_0x493a('0x26')](respondWithFilteredResult(_0x575295,_0x1da6b3))[_0x493a('0x44')](handleError(_0x575295,null));};exports[_0x493a('0x45')]=function(_0x26f3a1,_0x1d3e76){var _0x3ad73d={'raw':!![],'where':{'id':_0x26f3a1[_0x493a('0x46')]['id']}},_0xc114ff={};_0xc114ff[_0x493a('0x2e')]=_[_0x493a('0x2f')](db[_0x493a('0x2c')][_0x493a('0x2d')]);_0xc114ff['query']=_['keys'](_0x26f3a1[_0x493a('0x30')]);_0xc114ff[_0x493a('0x31')]=_[_0x493a('0x32')](_0xc114ff[_0x493a('0x2e')],_0xc114ff[_0x493a('0x30')]);_0x3ad73d[_0x493a('0x33')]=_[_0x493a('0x32')](_0xc114ff['model'],qs[_0x493a('0x34')](_0x26f3a1['query']['fields']));_0x3ad73d['attributes']=_0x3ad73d[_0x493a('0x33')][_0x493a('0x35')]?_0x3ad73d[_0x493a('0x33')]:_0xc114ff[_0x493a('0x2e')];if(_0x26f3a1[_0x493a('0x30')][_0x493a('0x40')]){_0x3ad73d[_0x493a('0x41')]=[{'all':!![]}];}_0x3ad73d=_['merge']({},_0x3ad73d,_0x26f3a1['options']);return db[_0x493a('0x2c')][_0x493a('0x47')](_0x3ad73d)['then'](handleEntityNotFound(_0x1d3e76,null))[_0x493a('0x26')](respondWithResult(_0x1d3e76,null))[_0x493a('0x44')](handleError(_0x1d3e76,null));};exports['create']=function(_0x1ae70d,_0x2d7232){return db['Variable'][_0x493a('0x48')](_0x1ae70d[_0x493a('0x49')],{})['then'](function(_0x2bbe84){var _0x527d77=_0x1ae70d[_0x493a('0x4a')][_0x493a('0x4b')]({'plain':!![]});if(!_0x527d77)throw new Error(_0x493a('0x4c'));if(_0x527d77['role']===_0x493a('0x4a')){var _0x350809=_0x2bbe84[_0x493a('0x4b')]({'plain':!![]});var _0xec0ca3=_0x493a('0x27');return db[_0x493a('0x4d')][_0x493a('0x47')]({'where':{'name':_0xec0ca3,'userProfileId':_0x527d77[_0x493a('0x4e')]},'raw':!![]})[_0x493a('0x26')](function(_0x820133){if(_0x820133&&_0x820133[_0x493a('0x4f')]===0x0){return db[_0x493a('0x50')][_0x493a('0x48')]({'name':_0x350809[_0x493a('0x2b')],'resourceId':_0x350809['id'],'type':_0x820133['name'],'sectionId':_0x820133['id']},{})['then'](function(){return _0x2bbe84;});}else{return _0x2bbe84;}})[_0x493a('0x44')](function(_0x59b975){logger[_0x493a('0x29')](_0x493a('0x51'),_0x59b975);throw _0x59b975;});}return _0x2bbe84;})[_0x493a('0x26')](respondWithResult(_0x2d7232,0xc9))[_0x493a('0x44')](handleError(_0x2d7232,null));};exports[_0x493a('0x52')]=function(_0x203365,_0x3f57a2){if(_0x203365[_0x493a('0x49')]['id']){delete _0x203365[_0x493a('0x49')]['id'];}return db['Variable'][_0x493a('0x47')]({'where':{'id':_0x203365[_0x493a('0x46')]['id']}})[_0x493a('0x26')](handleEntityNotFound(_0x3f57a2,null))[_0x493a('0x26')](saveUpdates(_0x203365[_0x493a('0x49')],null))[_0x493a('0x26')](respondWithResult(_0x3f57a2,null))['catch'](handleError(_0x3f57a2,null));};exports[_0x493a('0x28')]=function(_0x41e071,_0x285192){return db[_0x493a('0x2c')][_0x493a('0x47')]({'where':{'id':_0x41e071[_0x493a('0x46')]['id']}})[_0x493a('0x26')](handleEntityNotFound(_0x285192,null))['then'](removeEntity(_0x285192,null))[_0x493a('0x44')](handleError(_0x285192,null));};
\ No newline at end of file
+var _0xb3f5=['Variables','UserProfileResource','status','error','stack','name','send','index','Variable','rawAttributes','query','keys','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','where','filters','merge','map','type','key','VIRTUAL','field','filter','options','includeAll','include','rows','catch','show','params','find','create','body','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','get','UserProfileSection','userProfileId','autoAssociation','update','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','path','to-csv','squel','desk.js','querystring','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','set','apply','reject','save','then','destroy'];(function(_0x45187e,_0x33b2a1){var _0x493515=function(_0x49bfe1){while(--_0x49bfe1){_0x45187e['push'](_0x45187e['shift']());}};_0x493515(++_0x33b2a1);}(_0xb3f5,0x127));var _0x5b3f=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xb3f5[_0x3dd15e];return _0x231fd0;};'use strict';var pdf=require(_0x5b3f('0x0'));var emlformat=require(_0x5b3f('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x5b3f('0x2'));var jsonpatch=require(_0x5b3f('0x3'));var rp=require(_0x5b3f('0x4'));var moment=require(_0x5b3f('0x5'));var BPromise=require(_0x5b3f('0x6'));var Mustache=require(_0x5b3f('0x7'));var util=require('util');var path=require(_0x5b3f('0x8'));var sox=require('sox');var csv=require(_0x5b3f('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require('lodash');var squel=require(_0x5b3f('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x5b3f('0xb'));var toCsv=require('to-csv');var querystring=require(_0x5b3f('0xc'));var Papa=require('papaparse');var authService=require(_0x5b3f('0xd'));var hardwareService=require(_0x5b3f('0xe'));var Redis=require(_0x5b3f('0xf'));var qs=require(_0x5b3f('0x10'));var logger=require(_0x5b3f('0x11'))(_0x5b3f('0x12'));var utils=require(_0x5b3f('0x13'));var config=require(_0x5b3f('0x14'));var db=require(_0x5b3f('0x15'))['db'];function respondWithStatusCode(_0x3b7740,_0x1e9ffb){_0x1e9ffb=_0x1e9ffb||0xcc;return function(_0x3586cb){if(_0x3586cb){return _0x3b7740[_0x5b3f('0x16')](_0x1e9ffb);}return _0x3b7740['status'](_0x1e9ffb)[_0x5b3f('0x17')]();};}function respondWithResult(_0x1d8cbd,_0x4bf49f){_0x4bf49f=_0x4bf49f||0xc8;return function(_0x67927){if(_0x67927){return _0x1d8cbd['status'](_0x4bf49f)[_0x5b3f('0x18')](_0x67927);}};}function respondWithFilteredResult(_0x5c4aa7,_0x283c50){return function(_0x5cd92a){if(_0x5cd92a){var _0x308bbe=_0x5cd92a[_0x5b3f('0x19')],_0x914b3a=_0x283c50['offset'],_0xd9920b=_0x283c50[_0x5b3f('0x1a')]+_0x283c50['limit'],_0x1a04e4;if(_0xd9920b>=_0x308bbe){_0xd9920b=_0x308bbe;_0x1a04e4=0xc8;}else{_0x1a04e4=0xce;}_0x5c4aa7['status'](_0x1a04e4);return _0x5c4aa7[_0x5b3f('0x1b')]('Content-Range',_0x914b3a+'-'+_0xd9920b+'/'+_0x308bbe)[_0x5b3f('0x18')](_0x5cd92a);}return null;};}function patchUpdates(_0x108ea3){return function(_0x588139){try{jsonpatch[_0x5b3f('0x1c')](_0x588139,_0x108ea3,!![]);}catch(_0x3725e7){return BPromise[_0x5b3f('0x1d')](_0x3725e7);}return _0x588139[_0x5b3f('0x1e')]();};}function saveUpdates(_0x5bdd5f,_0x21fdcf){return function(_0x130762){if(_0x130762){return _0x130762['update'](_0x5bdd5f)[_0x5b3f('0x1f')](function(_0x1d7039){return _0x1d7039;});}return null;};}function removeEntity(_0x35b81a,_0x3c7381){return function(_0x479cd2){if(_0x479cd2){return _0x479cd2[_0x5b3f('0x20')]()[_0x5b3f('0x1f')](function(){var _0x28815a=_0x479cd2['get']({'plain':!![]});var _0x10a85b=_0x5b3f('0x21');return db[_0x5b3f('0x22')]['destroy']({'where':{'type':_0x10a85b,'resourceId':_0x28815a['id']}})[_0x5b3f('0x1f')](function(){return _0x479cd2;});})[_0x5b3f('0x1f')](function(){_0x35b81a[_0x5b3f('0x23')](0xcc)[_0x5b3f('0x17')]();});}};}function handleEntityNotFound(_0xff2bf4,_0x40127f){return function(_0x50a864){if(!_0x50a864){_0xff2bf4[_0x5b3f('0x16')](0x194);}return _0x50a864;};}function handleError(_0x2d392b,_0x153f82){_0x153f82=_0x153f82||0x1f4;return function(_0xdc138f){logger[_0x5b3f('0x24')](_0xdc138f[_0x5b3f('0x25')]);if(_0xdc138f[_0x5b3f('0x26')]){delete _0xdc138f[_0x5b3f('0x26')];}_0x2d392b['status'](_0x153f82)[_0x5b3f('0x27')](_0xdc138f);};}exports[_0x5b3f('0x28')]=function(_0x111439,_0x3b3a4d){var _0x1ccb0a={},_0x1c1ff9={},_0x5da169={'count':0x0,'rows':[]};var _0xa5b95=db[_0x5b3f('0x29')][_0x5b3f('0x2a')];_0x1c1ff9['model']=_['keys'](_0xa5b95);_0x1c1ff9[_0x5b3f('0x2b')]=_[_0x5b3f('0x2c')](_0x111439['query']);_0x1c1ff9['filters']=_[_0x5b3f('0x2d')](_0x1c1ff9[_0x5b3f('0x2e')],_0x1c1ff9[_0x5b3f('0x2b')]);_0x1ccb0a[_0x5b3f('0x2f')]=_['intersection'](_0x1c1ff9[_0x5b3f('0x2e')],qs[_0x5b3f('0x30')](_0x111439['query']['fields']));_0x1ccb0a[_0x5b3f('0x2f')]=_0x1ccb0a['attributes'][_0x5b3f('0x31')]?_0x1ccb0a[_0x5b3f('0x2f')]:_0x1c1ff9['model'];if(!_0x111439[_0x5b3f('0x2b')][_0x5b3f('0x32')](_0x5b3f('0x33'))){_0x1ccb0a[_0x5b3f('0x34')]=qs[_0x5b3f('0x34')](_0x111439[_0x5b3f('0x2b')]['limit']);_0x1ccb0a[_0x5b3f('0x1a')]=qs[_0x5b3f('0x1a')](_0x111439[_0x5b3f('0x2b')][_0x5b3f('0x1a')]);}_0x1ccb0a[_0x5b3f('0x35')]=qs[_0x5b3f('0x36')](_0x111439['query']['sort']);_0x1ccb0a[_0x5b3f('0x37')]=qs[_0x5b3f('0x38')](_['pick'](_0x111439['query'],_0x1c1ff9[_0x5b3f('0x38')]));if(_0x111439[_0x5b3f('0x2b')]['filter']){_0x1ccb0a[_0x5b3f('0x37')]=_[_0x5b3f('0x39')](_0x1ccb0a[_0x5b3f('0x37')],{'$or':_[_0x5b3f('0x3a')](_0xa5b95,function(_0x63d506){if(_0x63d506[_0x5b3f('0x3b')][_0x5b3f('0x3c')]!==_0x5b3f('0x3d')){var _0x36f2fe={};_0x36f2fe[_0x63d506[_0x5b3f('0x3e')]]={'$like':'%'+_0x111439[_0x5b3f('0x2b')][_0x5b3f('0x3f')]+'%'};return _0x36f2fe;}})});}_0x1ccb0a=_[_0x5b3f('0x39')]({},_0x1ccb0a,_0x111439[_0x5b3f('0x40')]);var _0x1633b6={'where':_0x1ccb0a[_0x5b3f('0x37')]};return db[_0x5b3f('0x29')][_0x5b3f('0x19')](_0x1633b6)['then'](function(_0x320ce1){_0x5da169[_0x5b3f('0x19')]=_0x320ce1;if(_0x111439[_0x5b3f('0x2b')][_0x5b3f('0x41')]){_0x1ccb0a[_0x5b3f('0x42')]=[{'all':!![]}];}return db[_0x5b3f('0x29')]['findAll'](_0x1ccb0a);})['then'](function(_0x2a3d3e){_0x5da169[_0x5b3f('0x43')]=_0x2a3d3e;return _0x5da169;})[_0x5b3f('0x1f')](respondWithFilteredResult(_0x3b3a4d,_0x1ccb0a))[_0x5b3f('0x44')](handleError(_0x3b3a4d,null));};exports[_0x5b3f('0x45')]=function(_0x5b7f40,_0x914f6c){var _0x6a07a4={'raw':!![],'where':{'id':_0x5b7f40[_0x5b3f('0x46')]['id']}},_0x1805bf={};_0x1805bf[_0x5b3f('0x2e')]=_[_0x5b3f('0x2c')](db[_0x5b3f('0x29')][_0x5b3f('0x2a')]);_0x1805bf[_0x5b3f('0x2b')]=_[_0x5b3f('0x2c')](_0x5b7f40[_0x5b3f('0x2b')]);_0x1805bf[_0x5b3f('0x38')]=_[_0x5b3f('0x2d')](_0x1805bf[_0x5b3f('0x2e')],_0x1805bf[_0x5b3f('0x2b')]);_0x6a07a4['attributes']=_['intersection'](_0x1805bf[_0x5b3f('0x2e')],qs[_0x5b3f('0x30')](_0x5b7f40[_0x5b3f('0x2b')][_0x5b3f('0x30')]));_0x6a07a4['attributes']=_0x6a07a4[_0x5b3f('0x2f')]['length']?_0x6a07a4['attributes']:_0x1805bf[_0x5b3f('0x2e')];if(_0x5b7f40['query'][_0x5b3f('0x41')]){_0x6a07a4[_0x5b3f('0x42')]=[{'all':!![]}];}_0x6a07a4=_['merge']({},_0x6a07a4,_0x5b7f40[_0x5b3f('0x40')]);return db[_0x5b3f('0x29')][_0x5b3f('0x47')](_0x6a07a4)['then'](handleEntityNotFound(_0x914f6c,null))['then'](respondWithResult(_0x914f6c,null))['catch'](handleError(_0x914f6c,null));};exports[_0x5b3f('0x48')]=function(_0x1be701,_0x15e927){return db[_0x5b3f('0x29')][_0x5b3f('0x48')](_0x1be701[_0x5b3f('0x49')],{})[_0x5b3f('0x1f')](function(_0x56e413){var _0x305bdd=_0x1be701['user']['get']({'plain':!![]});if(!_0x305bdd)throw new Error(_0x5b3f('0x4a'));if(_0x305bdd[_0x5b3f('0x4b')]===_0x5b3f('0x4c')){var _0x1ee8fc=_0x56e413[_0x5b3f('0x4d')]({'plain':!![]});var _0x2165b5=_0x5b3f('0x21');return db[_0x5b3f('0x4e')][_0x5b3f('0x47')]({'where':{'name':_0x2165b5,'userProfileId':_0x305bdd[_0x5b3f('0x4f')]},'raw':!![]})[_0x5b3f('0x1f')](function(_0x2f069a){if(_0x2f069a&&_0x2f069a[_0x5b3f('0x50')]===0x0){return db[_0x5b3f('0x22')]['create']({'name':_0x1ee8fc[_0x5b3f('0x26')],'resourceId':_0x1ee8fc['id'],'type':_0x2f069a[_0x5b3f('0x26')],'sectionId':_0x2f069a['id']},{})[_0x5b3f('0x1f')](function(){return _0x56e413;});}else{return _0x56e413;}})[_0x5b3f('0x44')](function(_0x228e1c){logger[_0x5b3f('0x24')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x228e1c);throw _0x228e1c;});}return _0x56e413;})['then'](respondWithResult(_0x15e927,0xc9))[_0x5b3f('0x44')](handleError(_0x15e927,null));};exports[_0x5b3f('0x51')]=function(_0x54c783,_0x42477c){if(_0x54c783[_0x5b3f('0x49')]['id']){delete _0x54c783['body']['id'];}return db[_0x5b3f('0x29')][_0x5b3f('0x47')]({'where':{'id':_0x54c783[_0x5b3f('0x46')]['id']}})[_0x5b3f('0x1f')](handleEntityNotFound(_0x42477c,null))[_0x5b3f('0x1f')](saveUpdates(_0x54c783[_0x5b3f('0x49')],null))[_0x5b3f('0x1f')](respondWithResult(_0x42477c,null))[_0x5b3f('0x44')](handleError(_0x42477c,null));};exports[_0x5b3f('0x20')]=function(_0x5aacfe,_0x1aafc5){return db[_0x5b3f('0x29')][_0x5b3f('0x47')]({'where':{'id':_0x5aacfe[_0x5b3f('0x46')]['id']}})['then'](handleEntityNotFound(_0x1aafc5,null))[_0x5b3f('0x1f')](removeEntity(_0x1aafc5,null))[_0x5b3f('0x44')](handleError(_0x1aafc5,null));};
\ No newline at end of file
index 260b9f2..02bf27e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['tools_variables','lodash','util','../../config/logger','moment','bluebird','./variable.attributes','exports','define'];(function(_0x437e08,_0x1cab6c){var _0xcf57f2=function(_0x2ef02e){while(--_0x2ef02e){_0x437e08['push'](_0x437e08['shift']());}};_0xcf57f2(++_0x1cab6c);}(_0x7a54,0x106));var _0x47a5=function(_0x2a91a3,_0x3173ef){_0x2a91a3=_0x2a91a3-0x0;var _0x78e83c=_0x7a54[_0x2a91a3];return _0x78e83c;};'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 attributes=require(_0x47a5('0x5'));module[_0x47a5('0x6')]=function(_0x2a1a7e,_0x3717e1){return _0x2a1a7e[_0x47a5('0x7')]('Variable',attributes,{'tableName':_0x47a5('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x53ec=['./variable.attributes','Variable','lodash','util','../../config/logger','api','moment','bluebird'];(function(_0x22c0f2,_0x523b56){var _0x23e689=function(_0x2a7613){while(--_0x2a7613){_0x22c0f2['push'](_0x22c0f2['shift']());}};_0x23e689(++_0x523b56);}(_0x53ec,0x192));var _0xc53e=function(_0xa2049b,_0x7eeb1e){_0xa2049b=_0xa2049b-0x0;var _0x2fd615=_0x53ec[_0xa2049b];return _0x2fd615;};'use strict';var _=require(_0xc53e('0x0'));var util=require(_0xc53e('0x1'));var logger=require(_0xc53e('0x2'))(_0xc53e('0x3'));var moment=require(_0xc53e('0x4'));var BPromise=require(_0xc53e('0x5'));var rp=require('request-promise');var attributes=require(_0xc53e('0x6'));module['exports']=function(_0x2b90f6,_0x38033d){return _0x2b90f6['define'](_0xc53e('0x7'),attributes,{'tableName':'tools_variables','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index d0a7097..ae86d6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47f2=['rpc','../../config/environment','jayson/promise','client','http','then','info','Variable,\x20%s,\x20%s','request\x20sent','stringify','code','error','message','find','options','include','map','model','attributes','ShowVariable','debug','catch','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger'];(function(_0x578c04,_0x38cd84){var _0x56457a=function(_0x58c57f){while(--_0x58c57f){_0x578c04['push'](_0x578c04['shift']());}};_0x56457a(++_0x38cd84);}(_0x47f2,0x1f2));var _0x247f=function(_0x317fa4,_0x5d944c){_0x317fa4=_0x317fa4-0x0;var _0x2265dc=_0x47f2[_0x317fa4];return _0x2265dc;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require(_0x247f('0x0'));var rs=require(_0x247f('0x1'));var fs=require('fs');var Redis=require(_0x247f('0x2'));var db=require(_0x247f('0x3'))['db'];var utils=require(_0x247f('0x4'));var logger=require(_0x247f('0x5'))(_0x247f('0x6'));var config=require(_0x247f('0x7'));var jayson=require(_0x247f('0x8'));var client=jayson[_0x247f('0x9')][_0x247f('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x489a52,_0x1a74ac,_0x55b7b4){return new BPromise(function(_0x1763e2,_0x272096){return client['request'](_0x489a52,_0x55b7b4)[_0x247f('0xb')](function(_0x42c0fb){logger[_0x247f('0xc')](_0x247f('0xd'),_0x1a74ac,_0x247f('0xe'));logger['debug']('Variable,\x20%s,\x20%s,\x20%s',_0x1a74ac,_0x247f('0xe'),JSON[_0x247f('0xf')](_0x42c0fb));if(_0x42c0fb['error']){if(_0x42c0fb['error'][_0x247f('0x10')]===0x1f4){logger[_0x247f('0x11')](_0x247f('0xd'),_0x1a74ac,_0x42c0fb[_0x247f('0x11')][_0x247f('0x12')]);return _0x272096(_0x42c0fb[_0x247f('0x11')][_0x247f('0x12')]);}logger['error'](_0x247f('0xd'),_0x1a74ac,_0x42c0fb[_0x247f('0x11')][_0x247f('0x12')]);return _0x1763e2(_0x42c0fb[_0x247f('0x11')][_0x247f('0x12')]);}else{logger[_0x247f('0xc')]('Variable,\x20%s,\x20%s',_0x1a74ac,_0x247f('0xe'));_0x1763e2(_0x42c0fb['result'][_0x247f('0x12')]);}})['catch'](function(_0x46bc0f){logger[_0x247f('0x11')](_0x247f('0xd'),_0x1a74ac,_0x46bc0f);_0x272096(_0x46bc0f);});});}exports['ShowVariable']=function(_0x42a484){var _0x30cfed=this;return new Promise(function(_0x54297c,_0x4bbda2){return db['Variable'][_0x247f('0x13')]({'raw':_0x42a484[_0x247f('0x14')]?_0x42a484[_0x247f('0x14')]['raw']===undefined?!![]:![]:!![],'where':_0x42a484['options']?_0x42a484[_0x247f('0x14')]['where']||null:null,'attributes':_0x42a484[_0x247f('0x14')]?_0x42a484[_0x247f('0x14')]['attributes']||null:null,'include':_0x42a484['options']?_0x42a484[_0x247f('0x14')][_0x247f('0x15')]?_[_0x247f('0x16')](_0x42a484[_0x247f('0x14')][_0x247f('0x15')],function(_0x21ef2b){return{'model':db[_0x21ef2b['model']],'as':_0x21ef2b['as'],'attributes':_0x21ef2b['attributes'],'include':_0x21ef2b['include']?_[_0x247f('0x16')](_0x21ef2b[_0x247f('0x15')],function(_0xf6be05){return{'model':db[_0xf6be05[_0x247f('0x17')]],'as':_0xf6be05['as'],'attributes':_0xf6be05[_0x247f('0x18')],'include':_0xf6be05[_0x247f('0x15')]?_['map'](_0xf6be05['include'],function(_0x1c6bdb){return{'model':db[_0x1c6bdb[_0x247f('0x17')]],'as':_0x1c6bdb['as'],'attributes':_0x1c6bdb[_0x247f('0x18')]};}):[]};}):[]};}):[]:[]})[_0x247f('0xb')](function(_0x1d1421){logger['info'](_0x247f('0x19'),_0x42a484);logger[_0x247f('0x1a')]('ShowVariable',_0x42a484,JSON[_0x247f('0xf')](_0x1d1421));_0x54297c(_0x1d1421);})[_0x247f('0x1b')](function(_0x535054){logger['error'](_0x247f('0x19'),_0x535054['message'],_0x42a484);_0x4bbda2(_0x30cfed[_0x247f('0x11')](0x1f4,_0x535054['message']));});});};
\ No newline at end of file
+var _0xcdf3=['Variable,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','catch','ShowVariable','Variable','find','options','raw','where','attributes','include','map','model','then','lodash','util','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request','info','Variable,\x20%s,\x20%s','request\x20sent','debug'];(function(_0x538478,_0x1ec91a){var _0x173ca5=function(_0x41ca41){while(--_0x41ca41){_0x538478['push'](_0x538478['shift']());}};_0x173ca5(++_0x1ec91a);}(_0xcdf3,0x122));var _0x3cdf=function(_0x1bf5ab,_0x51c355){_0x1bf5ab=_0x1bf5ab-0x0;var _0x4a4990=_0xcdf3[_0x1bf5ab];return _0x4a4990;};'use strict';var _=require(_0x3cdf('0x0'));var util=require(_0x3cdf('0x1'));var moment=require(_0x3cdf('0x2'));var BPromise=require('bluebird');var rs=require(_0x3cdf('0x3'));var fs=require('fs');var Redis=require(_0x3cdf('0x4'));var db=require(_0x3cdf('0x5'))['db'];var utils=require(_0x3cdf('0x6'));var logger=require(_0x3cdf('0x7'))('rpc');var config=require(_0x3cdf('0x8'));var jayson=require(_0x3cdf('0x9'));var client=jayson['client'][_0x3cdf('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x17b173,_0x18697d,_0x1107db){return new BPromise(function(_0x493e4a,_0x4a69d8){return client[_0x3cdf('0xb')](_0x17b173,_0x1107db)['then'](function(_0x1b0ee2){logger[_0x3cdf('0xc')](_0x3cdf('0xd'),_0x18697d,_0x3cdf('0xe'));logger[_0x3cdf('0xf')](_0x3cdf('0x10'),_0x18697d,_0x3cdf('0xe'),JSON[_0x3cdf('0x11')](_0x1b0ee2));if(_0x1b0ee2['error']){if(_0x1b0ee2['error'][_0x3cdf('0x12')]===0x1f4){logger[_0x3cdf('0x13')](_0x3cdf('0xd'),_0x18697d,_0x1b0ee2[_0x3cdf('0x13')][_0x3cdf('0x14')]);return _0x4a69d8(_0x1b0ee2[_0x3cdf('0x13')][_0x3cdf('0x14')]);}logger[_0x3cdf('0x13')](_0x3cdf('0xd'),_0x18697d,_0x1b0ee2[_0x3cdf('0x13')][_0x3cdf('0x14')]);return _0x493e4a(_0x1b0ee2['error'][_0x3cdf('0x14')]);}else{logger['info'](_0x3cdf('0xd'),_0x18697d,_0x3cdf('0xe'));_0x493e4a(_0x1b0ee2[_0x3cdf('0x15')]['message']);}})[_0x3cdf('0x16')](function(_0x17bbd3){logger[_0x3cdf('0x13')](_0x3cdf('0xd'),_0x18697d,_0x17bbd3);_0x4a69d8(_0x17bbd3);});});}exports[_0x3cdf('0x17')]=function(_0x5d1e8c){var _0x56188b=this;return new Promise(function(_0x18bb0d,_0x4abe81){return db[_0x3cdf('0x18')][_0x3cdf('0x19')]({'raw':_0x5d1e8c[_0x3cdf('0x1a')]?_0x5d1e8c[_0x3cdf('0x1a')][_0x3cdf('0x1b')]===undefined?!![]:![]:!![],'where':_0x5d1e8c[_0x3cdf('0x1a')]?_0x5d1e8c['options'][_0x3cdf('0x1c')]||null:null,'attributes':_0x5d1e8c[_0x3cdf('0x1a')]?_0x5d1e8c[_0x3cdf('0x1a')][_0x3cdf('0x1d')]||null:null,'include':_0x5d1e8c[_0x3cdf('0x1a')]?_0x5d1e8c[_0x3cdf('0x1a')][_0x3cdf('0x1e')]?_[_0x3cdf('0x1f')](_0x5d1e8c[_0x3cdf('0x1a')]['include'],function(_0x23aaf2){return{'model':db[_0x23aaf2[_0x3cdf('0x20')]],'as':_0x23aaf2['as'],'attributes':_0x23aaf2['attributes'],'include':_0x23aaf2[_0x3cdf('0x1e')]?_[_0x3cdf('0x1f')](_0x23aaf2[_0x3cdf('0x1e')],function(_0x409914){return{'model':db[_0x409914[_0x3cdf('0x20')]],'as':_0x409914['as'],'attributes':_0x409914[_0x3cdf('0x1d')],'include':_0x409914[_0x3cdf('0x1e')]?_['map'](_0x409914[_0x3cdf('0x1e')],function(_0x1cd277){return{'model':db[_0x1cd277[_0x3cdf('0x20')]],'as':_0x1cd277['as'],'attributes':_0x1cd277['attributes']};}):[]};}):[]};}):[]:[]})[_0x3cdf('0x21')](function(_0x69f4af){logger[_0x3cdf('0xc')](_0x3cdf('0x17'),_0x5d1e8c);logger[_0x3cdf('0xf')]('ShowVariable',_0x5d1e8c,JSON[_0x3cdf('0x11')](_0x69f4af));_0x18bb0d(_0x69f4af);})['catch'](function(_0x61b228){logger[_0x3cdf('0x13')]('ShowVariable',_0x61b228[_0x3cdf('0x14')],_0x5d1e8c);_0x4abe81(_0x56188b['error'](0x1f4,_0x61b228[_0x3cdf('0x14')]));});});};
\ No newline at end of file
index 758ceb8..7cbc8f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d46=['../../components/auth/service','./version.controller','get','/fetch','isAuthenticated','canUpdate','fetch','/reset','reset','/restart','restart','/migrations','migrations','exports','express','Router'];(function(_0x139cc4,_0x2780bd){var _0xf6477c=function(_0x272163){while(--_0x272163){_0x139cc4['push'](_0x139cc4['shift']());}};_0xf6477c(++_0x2780bd);}(_0x7d46,0x19e));var _0x67d4=function(_0x1dc24d,_0x541fa4){_0x1dc24d=_0x1dc24d-0x0;var _0x5d7fb2=_0x7d46[_0x1dc24d];return _0x5d7fb2;};'use strict';var express=require(_0x67d4('0x0'));var router=express[_0x67d4('0x1')]();var auth=require(_0x67d4('0x2'));var controller=require(_0x67d4('0x3'));router['get']('/',controller['index']);router[_0x67d4('0x4')](_0x67d4('0x5'),auth[_0x67d4('0x6')](),auth[_0x67d4('0x7')](),controller[_0x67d4('0x8')]);router[_0x67d4('0x4')](_0x67d4('0x9'),auth['isAuthenticated'](),auth['canUpdate'](),controller[_0x67d4('0xa')]);router[_0x67d4('0x4')]('/pull',auth[_0x67d4('0x6')](),auth[_0x67d4('0x7')](),controller['pull']);router[_0x67d4('0x4')](_0x67d4('0xb'),auth[_0x67d4('0x6')](),controller[_0x67d4('0xc')]);router[_0x67d4('0x4')](_0x67d4('0xd'),controller[_0x67d4('0xe')]);module[_0x67d4('0xf')]=router;
\ No newline at end of file
+var _0x4ec9=['Router','../../components/auth/service','./version.controller','get','index','/fetch','isAuthenticated','canUpdate','/reset','reset','/pull','pull','/restart','restart','migrations','exports','express'];(function(_0x458765,_0x567cb1){var _0x179349=function(_0x4aebcc){while(--_0x4aebcc){_0x458765['push'](_0x458765['shift']());}};_0x179349(++_0x567cb1);}(_0x4ec9,0x186));var _0x94ec=function(_0x20e764,_0x19811d){_0x20e764=_0x20e764-0x0;var _0x4ebc22=_0x4ec9[_0x20e764];return _0x4ebc22;};'use strict';var express=require(_0x94ec('0x0'));var router=express[_0x94ec('0x1')]();var auth=require(_0x94ec('0x2'));var controller=require(_0x94ec('0x3'));router[_0x94ec('0x4')]('/',controller[_0x94ec('0x5')]);router[_0x94ec('0x4')](_0x94ec('0x6'),auth[_0x94ec('0x7')](),auth[_0x94ec('0x8')](),controller['fetch']);router['get'](_0x94ec('0x9'),auth[_0x94ec('0x7')](),auth[_0x94ec('0x8')](),controller[_0x94ec('0xa')]);router[_0x94ec('0x4')](_0x94ec('0xb'),auth[_0x94ec('0x7')](),auth[_0x94ec('0x8')](),controller[_0x94ec('0xc')]);router[_0x94ec('0x4')](_0x94ec('0xd'),auth[_0x94ec('0x7')](),controller[_0x94ec('0xe')]);router[_0x94ec('0x4')]('/migrations',controller[_0x94ec('0xf')]);module[_0x94ec('0x10')]=router;
\ No newline at end of file
index 2761502..5a873e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['status','json','master','error','info','git\x20fetch','git\x20fetch\x20origin\x20master','reset','--hard','FETCH_HEAD','pull','npm\x20install\x20--production','restart','then','pm2\x20restart\x20motion\x20%s','catch','migrations','Migration','constructor','Migration\x20tried\x20to\x20use\x20old\x20style\x20\x22done\x22\x20callback.\x20Please\x20upgrade\x20to\x20\x22umzug\x22\x20and\x20return\x20a\x20promise\x20instead.','join','server','.js','Database\x20Migration\x20Completed!','umzug','path','pkginfo','version','exec','../../mysqldb','../../config/environment','../../config/pm2','update','simple-git','root','index','exports','query','latest','fetch','tags'];(function(_0x5121de,_0x1b0a53){var _0x372f80=function(_0xd9ce3a){while(--_0xd9ce3a){_0x5121de['push'](_0x5121de['shift']());}};_0x372f80(++_0x1b0a53);}(_0x9957,0x93));var _0x7995=function(_0x2dafbe,_0x5d04de){_0x2dafbe=_0x2dafbe-0x0;var _0x58a45a=_0x9957[_0x2dafbe];return _0x58a45a;};'use strict';var Umzug=require(_0x7995('0x0'));var path=require(_0x7995('0x1'));var pkginfo=require(_0x7995('0x2'))(module,_0x7995('0x3'));var exec=require('child_process')[_0x7995('0x4')];var db=require(_0x7995('0x5'))['db'];var config=require(_0x7995('0x6'));var pm2=require(_0x7995('0x7'));var logger=require('../../config/logger')(_0x7995('0x8'));var git=require(_0x7995('0x9'))(config[_0x7995('0xa')]);exports[_0x7995('0xb')]=function(_0xbda126,_0x326741){var _0x4996ca={'current':module[_0x7995('0xc')][_0x7995('0x3')],'phonebar':0x2};if(_0xbda126['query']&&_0xbda126[_0x7995('0xd')][_0x7995('0xe')]){return git[_0x7995('0xf')]()[_0x7995('0x10')](function(_0x3c1d19,_0x1e400a){_0x4996ca[_0x7995('0xe')]=(_0x3c1d19?module['exports'][_0x7995('0x3')]:_0x1e400a[_0x7995('0xe')])||'2.0.0';return _0x326741[_0x7995('0x11')](0xc8)[_0x7995('0x12')](_0x4996ca);});}else{return _0x326741[_0x7995('0x11')](0xc8)[_0x7995('0x12')](_0x4996ca);}};exports[_0x7995('0xf')]=function(_0x23999f,_0x2bbe7a){return git['fetch'](['origin',_0x7995('0x13')],function(_0x2233dd){if(_0x2233dd){logger[_0x7995('0x14')](_0x2233dd);return _0x2bbe7a[_0x7995('0x11')](0x1f4)[_0x7995('0x12')](_0x2233dd);}logger[_0x7995('0x15')](_0x7995('0x16'));return _0x2bbe7a[_0x7995('0x11')](0xc8)['json']({'output':_0x7995('0x17')});});};exports['reset']=function(_0x2f832e,_0x37f297){return git[_0x7995('0x18')]([_0x7995('0x19'),_0x7995('0x1a')],function(_0x37a7d4){if(_0x37a7d4){logger['error'](_0x37a7d4);return _0x37f297['status'](0x1f4)[_0x7995('0x12')](_0x37a7d4);}logger['info']('git\x20reset\x20--hard\x20FETCH_HEAD');return _0x37f297[_0x7995('0x11')](0xc8)[_0x7995('0x12')]({'output':'git\x20reset\x20--hard'});});};exports[_0x7995('0x1b')]=function(_0x51f276,_0x4b1a8e){exec(_0x7995('0x1c'),function(_0x327b1f,_0x350fd9,_0x1a8568){logger[_0x7995('0x15')](_0x350fd9);logger[_0x7995('0x15')](_0x1a8568);if(_0x327b1f){logger['error'](_0x327b1f);return _0x4b1a8e[_0x7995('0x11')](0x1f4)[_0x7995('0x12')](_0x327b1f);}return _0x4b1a8e[_0x7995('0x11')](0xc8)[_0x7995('0x12')]({'output':_0x350fd9});});};exports[_0x7995('0x1d')]=function(_0x13bc35,_0x475351){return pm2[_0x7995('0x1d')]('motion2')[_0x7995('0x1e')](function(_0x34e70c){logger[_0x7995('0x15')](_0x7995('0x1f'),_0x34e70c);return _0x475351[_0x7995('0x11')](0xc8)[_0x7995('0x12')]({'output':'Your\x20system\x20has\x20been\x20restart\x20successfully'});})[_0x7995('0x20')](function(_0x5911c3){logger[_0x7995('0x14')](_0x5911c3);return _0x475351[_0x7995('0x11')](0x1f4)[_0x7995('0x12')](_0x5911c3);});};exports[_0x7995('0x21')]=function(_0x11c1eb,_0x4b6f99){var _0x9b2a15=new Umzug({'storage':'sequelize','storageOptions':{'model':db[_0x7995('0x22')],'modelName':_0x7995('0x22'),'columnName':_0x7995('0x3')},'migrations':{'params':[db['sequelize']['getQueryInterface'](),db['sequelize'][_0x7995('0x23')],function(){throw new Error(_0x7995('0x24'));}],'path':path[_0x7995('0x25')](config[_0x7995('0xa')],_0x7995('0x26'),_0x7995('0x21')),'pattern':/\.js$/}});_0x9b2a15['up']({'from':module['exports']['version']+_0x7995('0x27')})['then'](function(){return _0x4b6f99[_0x7995('0x11')](0xc8)[_0x7995('0x12')]({'output':_0x7995('0x28')});})[_0x7995('0x20')](function(_0x1f7d27){return _0x4b6f99['status'](0x1f4)[_0x7995('0x12')](_0x1f7d27);});};
\ No newline at end of file
+var _0x9957=['status','json','master','error','info','git\x20fetch','git\x20fetch\x20origin\x20master','reset','--hard','FETCH_HEAD','pull','npm\x20install\x20--production','restart','then','pm2\x20restart\x20motion\x20%s','catch','migrations','Migration','constructor','Migration\x20tried\x20to\x20use\x20old\x20style\x20\x22done\x22\x20callback.\x20Please\x20upgrade\x20to\x20\x22umzug\x22\x20and\x20return\x20a\x20promise\x20instead.','join','server','.js','Database\x20Migration\x20Completed!','umzug','path','pkginfo','version','exec','../../mysqldb','../../config/environment','../../config/pm2','update','simple-git','root','index','exports','query','latest','fetch','tags'];(function(_0x52e422,_0x2b4a02){var _0xec4089=function(_0x7123c){while(--_0x7123c){_0x52e422['push'](_0x52e422['shift']());}};_0xec4089(++_0x2b4a02);}(_0x9957,0x93));var _0x7995=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x9957[_0x19e35c];return _0x3e1fe8;};'use strict';var Umzug=require(_0x7995('0x0'));var path=require(_0x7995('0x1'));var pkginfo=require(_0x7995('0x2'))(module,_0x7995('0x3'));var exec=require('child_process')[_0x7995('0x4')];var db=require(_0x7995('0x5'))['db'];var config=require(_0x7995('0x6'));var pm2=require(_0x7995('0x7'));var logger=require('../../config/logger')(_0x7995('0x8'));var git=require(_0x7995('0x9'))(config[_0x7995('0xa')]);exports[_0x7995('0xb')]=function(_0xbda126,_0x326741){var _0x4996ca={'current':module[_0x7995('0xc')][_0x7995('0x3')],'phonebar':0x2};if(_0xbda126['query']&&_0xbda126[_0x7995('0xd')][_0x7995('0xe')]){return git[_0x7995('0xf')]()[_0x7995('0x10')](function(_0x3c1d19,_0x1e400a){_0x4996ca[_0x7995('0xe')]=(_0x3c1d19?module['exports'][_0x7995('0x3')]:_0x1e400a[_0x7995('0xe')])||'2.0.0';return _0x326741[_0x7995('0x11')](0xc8)[_0x7995('0x12')](_0x4996ca);});}else{return _0x326741[_0x7995('0x11')](0xc8)[_0x7995('0x12')](_0x4996ca);}};exports[_0x7995('0xf')]=function(_0x23999f,_0x2bbe7a){return git['fetch'](['origin',_0x7995('0x13')],function(_0x2233dd){if(_0x2233dd){logger[_0x7995('0x14')](_0x2233dd);return _0x2bbe7a[_0x7995('0x11')](0x1f4)[_0x7995('0x12')](_0x2233dd);}logger[_0x7995('0x15')](_0x7995('0x16'));return _0x2bbe7a[_0x7995('0x11')](0xc8)['json']({'output':_0x7995('0x17')});});};exports['reset']=function(_0x2f832e,_0x37f297){return git[_0x7995('0x18')]([_0x7995('0x19'),_0x7995('0x1a')],function(_0x37a7d4){if(_0x37a7d4){logger['error'](_0x37a7d4);return _0x37f297['status'](0x1f4)[_0x7995('0x12')](_0x37a7d4);}logger['info']('git\x20reset\x20--hard\x20FETCH_HEAD');return _0x37f297[_0x7995('0x11')](0xc8)[_0x7995('0x12')]({'output':'git\x20reset\x20--hard'});});};exports[_0x7995('0x1b')]=function(_0x51f276,_0x4b1a8e){exec(_0x7995('0x1c'),function(_0x327b1f,_0x350fd9,_0x1a8568){logger[_0x7995('0x15')](_0x350fd9);logger[_0x7995('0x15')](_0x1a8568);if(_0x327b1f){logger['error'](_0x327b1f);return _0x4b1a8e[_0x7995('0x11')](0x1f4)[_0x7995('0x12')](_0x327b1f);}return _0x4b1a8e[_0x7995('0x11')](0xc8)[_0x7995('0x12')]({'output':_0x350fd9});});};exports[_0x7995('0x1d')]=function(_0x13bc35,_0x475351){return pm2[_0x7995('0x1d')]('motion2')[_0x7995('0x1e')](function(_0x34e70c){logger[_0x7995('0x15')](_0x7995('0x1f'),_0x34e70c);return _0x475351[_0x7995('0x11')](0xc8)[_0x7995('0x12')]({'output':'Your\x20system\x20has\x20been\x20restart\x20successfully'});})[_0x7995('0x20')](function(_0x5911c3){logger[_0x7995('0x14')](_0x5911c3);return _0x475351[_0x7995('0x11')](0x1f4)[_0x7995('0x12')](_0x5911c3);});};exports[_0x7995('0x21')]=function(_0x11c1eb,_0x4b6f99){var _0x9b2a15=new Umzug({'storage':'sequelize','storageOptions':{'model':db[_0x7995('0x22')],'modelName':_0x7995('0x22'),'columnName':_0x7995('0x3')},'migrations':{'params':[db['sequelize']['getQueryInterface'](),db['sequelize'][_0x7995('0x23')],function(){throw new Error(_0x7995('0x24'));}],'path':path[_0x7995('0x25')](config[_0x7995('0xa')],_0x7995('0x26'),_0x7995('0x21')),'pattern':/\.js$/}});_0x9b2a15['up']({'from':module['exports']['version']+_0x7995('0x27')})['then'](function(){return _0x4b6f99[_0x7995('0x11')](0xc8)[_0x7995('0x12')]({'output':_0x7995('0x28')});})[_0x7995('0x20')](function(_0x1f7d27){return _0x4b6f99['status'](0x1f4)[_0x7995('0x12')](_0x1f7d27);});};
\ No newline at end of file
index afe5704..42f03c6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeda8=['../../components/interaction/service','../../config/environment','./voiceAgentReport.controller','get','isAuthenticated','index','/describe','describe','/:id','put','delete','destroy','exports','multer','util','connect-timeout','express','Router','../../components/auth/service'];(function(_0x2b1551,_0x344e21){var _0x23ecb1=function(_0x45965e){while(--_0x45965e){_0x2b1551['push'](_0x2b1551['shift']());}};_0x23ecb1(++_0x344e21);}(_0xeda8,0x104));var _0x8eda=function(_0x61c8a5,_0x31a25c){_0x61c8a5=_0x61c8a5-0x0;var _0x2a24d7=_0xeda8[_0x61c8a5];return _0x2a24d7;};'use strict';var multer=require(_0x8eda('0x0'));var util=require(_0x8eda('0x1'));var path=require('path');var timeout=require(_0x8eda('0x2'));var express=require(_0x8eda('0x3'));var router=express[_0x8eda('0x4')]();var auth=require(_0x8eda('0x5'));var interaction=require(_0x8eda('0x6'));var config=require(_0x8eda('0x7'));var controller=require(_0x8eda('0x8'));router[_0x8eda('0x9')]('/',auth[_0x8eda('0xa')](),controller[_0x8eda('0xb')]);router[_0x8eda('0x9')](_0x8eda('0xc'),auth['isAuthenticated'](),controller[_0x8eda('0xd')]);router[_0x8eda('0x9')](_0x8eda('0xe'),auth[_0x8eda('0xa')](),controller['show']);router['post']('/',auth['isAuthenticated'](),controller['create']);router[_0x8eda('0xf')](_0x8eda('0xe'),auth[_0x8eda('0xa')](),controller['update']);router[_0x8eda('0x10')]('/:id',auth[_0x8eda('0xa')](),controller[_0x8eda('0x11')]);module[_0x8eda('0x12')]=router;
\ No newline at end of file
+var _0x3a6d=['put','update','delete','multer','util','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./voiceAgentReport.controller','get','isAuthenticated','index','/describe','describe','/:id','show','post','create'];(function(_0x1ba6f0,_0xf2108){var _0x1a5412=function(_0x55e7e2){while(--_0x55e7e2){_0x1ba6f0['push'](_0x1ba6f0['shift']());}};_0x1a5412(++_0xf2108);}(_0x3a6d,0x143));var _0xd3a6=function(_0x422905,_0x3bce3a){_0x422905=_0x422905-0x0;var _0x33dc6c=_0x3a6d[_0x422905];return _0x33dc6c;};'use strict';var multer=require(_0xd3a6('0x0'));var util=require(_0xd3a6('0x1'));var path=require('path');var timeout=require(_0xd3a6('0x2'));var express=require(_0xd3a6('0x3'));var router=express[_0xd3a6('0x4')]();var auth=require(_0xd3a6('0x5'));var interaction=require(_0xd3a6('0x6'));var config=require('../../config/environment');var controller=require(_0xd3a6('0x7'));router[_0xd3a6('0x8')]('/',auth[_0xd3a6('0x9')](),controller[_0xd3a6('0xa')]);router[_0xd3a6('0x8')](_0xd3a6('0xb'),auth['isAuthenticated'](),controller[_0xd3a6('0xc')]);router[_0xd3a6('0x8')](_0xd3a6('0xd'),auth[_0xd3a6('0x9')](),controller[_0xd3a6('0xe')]);router[_0xd3a6('0xf')]('/',auth[_0xd3a6('0x9')](),controller[_0xd3a6('0x10')]);router[_0xd3a6('0x11')]('/:id',auth[_0xd3a6('0x9')](),controller[_0xd3a6('0x12')]);router[_0xd3a6('0x13')](_0xd3a6('0xd'),auth[_0xd3a6('0x9')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 8cd7ed7..54cf554 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x70ae=['INTEGER','sequelize','STRING','DATE','BOOLEAN'];(function(_0x5be527,_0x47a3f2){var _0x3f0f16=function(_0x16a756){while(--_0x16a756){_0x5be527['push'](_0x5be527['shift']());}};_0x3f0f16(++_0x47a3f2);}(_0x70ae,0x16e));var _0xe70a=function(_0x499b83,_0xde81d0){_0x499b83=_0x499b83-0x0;var _0x15d62a=_0x70ae[_0x499b83];return _0x15d62a;};'use strict';var Sequelize=require(_0xe70a('0x0'));module['exports']={'type':{'type':Sequelize[_0xe70a('0x1')]},'uniqueid':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0xe70a('0x1')]},'calleridname':{'type':Sequelize['STRING']},'queue':{'type':Sequelize['STRING']},'interface':{'type':Sequelize[_0xe70a('0x1')]},'membername':{'type':Sequelize[_0xe70a('0x1')]},'agentcalledAt':{'type':Sequelize[_0xe70a('0x2')]},'agentconnectAt':{'type':Sequelize[_0xe70a('0x2')]},'agentcompleteAt':{'type':Sequelize[_0xe70a('0x2')]},'agentringnoanswerAt':{'type':Sequelize[_0xe70a('0x2')]},'agentdumpAt':{'type':Sequelize[_0xe70a('0x2')]},'holdtime':{'type':Sequelize['INTEGER']},'agentcomplete':{'type':Sequelize[_0xe70a('0x3')],'defaultValue':![]},'agentringnoanswer':{'type':Sequelize[_0xe70a('0x3')],'defaultValue':![]},'agentdump':{'type':Sequelize[_0xe70a('0x3')],'defaultValue':![]},'talktime':{'type':Sequelize[_0xe70a('0x4')]},'agentacw':{'type':Sequelize[_0xe70a('0x3')],'defaultValue':![]},'acwtime':{'type':Sequelize[_0xe70a('0x4')]},'reason':{'type':Sequelize[_0xe70a('0x1')]},'lastevent':{'type':Sequelize[_0xe70a('0x1')]},'channel':{'type':Sequelize[_0xe70a('0x1')]},'channelstate':{'type':Sequelize['INTEGER']},'channelstatedesc':{'type':Sequelize[_0xe70a('0x1')]},'connectedlinenum':{'type':Sequelize[_0xe70a('0x1')]},'connectedlinename':{'type':Sequelize[_0xe70a('0x1')]},'language':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0xe70a('0x1')]},'context':{'type':Sequelize[_0xe70a('0x1')]},'exten':{'type':Sequelize[_0xe70a('0x1')]},'priority':{'type':Sequelize[_0xe70a('0x1')]},'destchannel':{'type':Sequelize[_0xe70a('0x1')]},'destchannelstate':{'type':Sequelize[_0xe70a('0x4')]},'destchannelstatedesc':{'type':Sequelize[_0xe70a('0x1')]},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize[_0xe70a('0x1')]},'destconnectedlinenum':{'type':Sequelize['STRING']},'destconnectedlinename':{'type':Sequelize[_0xe70a('0x1')]},'destlanguage':{'type':Sequelize[_0xe70a('0x1')]},'destaccountcode':{'type':Sequelize['STRING']},'destcontext':{'type':Sequelize['STRING']},'destexten':{'type':Sequelize['STRING']},'destpriority':{'type':Sequelize[_0xe70a('0x1')]},'destuniqueid':{'type':Sequelize[_0xe70a('0x1')]},'answeredelsewheredestinationuniqueid':{'type':Sequelize['STRING']},'answeredelsewheremembername':{'type':Sequelize['STRING']},'transfer':{'type':Sequelize[_0xe70a('0x3')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0xe70a('0x1')],'comment':'FORWARD,\x20BLIND,\x20ATTENDED'},'transferexten':{'type':Sequelize[_0xe70a('0x1')]},'transferuniqueid':{'type':Sequelize[_0xe70a('0x1')]},'agententerreason':{'type':Sequelize[_0xe70a('0x4')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xfb22=['DATE','BOOLEAN','INTEGER','FORWARD,\x20BLIND,\x20ATTENDED','sequelize','exports','STRING'];(function(_0x485b5a,_0x2b289b){var _0xd2b34d=function(_0x34dcbd){while(--_0x34dcbd){_0x485b5a['push'](_0x485b5a['shift']());}};_0xd2b34d(++_0x2b289b);}(_0xfb22,0x1d2));var _0x2fb2=function(_0x2dea24,_0x2fc021){_0x2dea24=_0x2dea24-0x0;var _0x309d58=_0xfb22[_0x2dea24];return _0x309d58;};'use strict';var Sequelize=require(_0x2fb2('0x0'));module[_0x2fb2('0x1')]={'type':{'type':Sequelize['STRING']},'uniqueid':{'type':Sequelize[_0x2fb2('0x2')]},'calleridnum':{'type':Sequelize[_0x2fb2('0x2')]},'calleridname':{'type':Sequelize[_0x2fb2('0x2')]},'queue':{'type':Sequelize[_0x2fb2('0x2')]},'interface':{'type':Sequelize[_0x2fb2('0x2')]},'membername':{'type':Sequelize[_0x2fb2('0x2')]},'agentcalledAt':{'type':Sequelize[_0x2fb2('0x3')]},'agentconnectAt':{'type':Sequelize[_0x2fb2('0x3')]},'agentcompleteAt':{'type':Sequelize[_0x2fb2('0x3')]},'agentringnoanswerAt':{'type':Sequelize[_0x2fb2('0x3')]},'agentdumpAt':{'type':Sequelize[_0x2fb2('0x3')]},'holdtime':{'type':Sequelize['INTEGER']},'agentcomplete':{'type':Sequelize[_0x2fb2('0x4')],'defaultValue':![]},'agentringnoanswer':{'type':Sequelize[_0x2fb2('0x4')],'defaultValue':![]},'agentdump':{'type':Sequelize[_0x2fb2('0x4')],'defaultValue':![]},'talktime':{'type':Sequelize[_0x2fb2('0x5')]},'agentacw':{'type':Sequelize[_0x2fb2('0x4')],'defaultValue':![]},'acwtime':{'type':Sequelize['INTEGER']},'reason':{'type':Sequelize['STRING']},'lastevent':{'type':Sequelize[_0x2fb2('0x2')]},'channel':{'type':Sequelize[_0x2fb2('0x2')]},'channelstate':{'type':Sequelize[_0x2fb2('0x5')]},'channelstatedesc':{'type':Sequelize[_0x2fb2('0x2')]},'connectedlinenum':{'type':Sequelize[_0x2fb2('0x2')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize[_0x2fb2('0x2')]},'accountcode':{'type':Sequelize[_0x2fb2('0x2')]},'context':{'type':Sequelize[_0x2fb2('0x2')]},'exten':{'type':Sequelize['STRING']},'priority':{'type':Sequelize[_0x2fb2('0x2')]},'destchannel':{'type':Sequelize[_0x2fb2('0x2')]},'destchannelstate':{'type':Sequelize[_0x2fb2('0x5')]},'destchannelstatedesc':{'type':Sequelize['STRING']},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize[_0x2fb2('0x2')]},'destconnectedlinenum':{'type':Sequelize[_0x2fb2('0x2')]},'destconnectedlinename':{'type':Sequelize[_0x2fb2('0x2')]},'destlanguage':{'type':Sequelize[_0x2fb2('0x2')]},'destaccountcode':{'type':Sequelize[_0x2fb2('0x2')]},'destcontext':{'type':Sequelize[_0x2fb2('0x2')]},'destexten':{'type':Sequelize[_0x2fb2('0x2')]},'destpriority':{'type':Sequelize[_0x2fb2('0x2')]},'destuniqueid':{'type':Sequelize['STRING']},'answeredelsewheredestinationuniqueid':{'type':Sequelize[_0x2fb2('0x2')]},'answeredelsewheremembername':{'type':Sequelize[_0x2fb2('0x2')]},'transfer':{'type':Sequelize[_0x2fb2('0x4')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x2fb2('0x2')],'comment':_0x2fb2('0x6')},'transferexten':{'type':Sequelize[_0x2fb2('0x2')]},'transferuniqueid':{'type':Sequelize['STRING']},'agententerreason':{'type':Sequelize[_0x2fb2('0x5')],'defaultValue':0x0}};
\ No newline at end of file
index 1de581c..6c8938d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1339=['sendStatus','status','json','count','offset','limit','set','apply','reject','update','destroy','then','end','error','stack','name','send','index','VoiceAgentReport','rawAttributes','query','keys','filters','intersection','model','fields','attributes','nolimit','order','sort','where','filter','merge','map','type','key','field','options','includeAll','include','findAll','catch','show','params','length','create','body','find','describe','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb'];(function(_0x416cdc,_0x213b87){var _0x1931ce=function(_0x1dc762){while(--_0x1dc762){_0x416cdc['push'](_0x416cdc['shift']());}};_0x1931ce(++_0x213b87);}(_0x1339,0x1ed));var _0x9133=function(_0x953f0a,_0x4f69e3){_0x953f0a=_0x953f0a-0x0;var _0x37092e=_0x1339[_0x953f0a];return _0x37092e;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0x9133('0x0'));var zipdir=require(_0x9133('0x1'));var jsonpatch=require(_0x9133('0x2'));var rp=require(_0x9133('0x3'));var moment=require(_0x9133('0x4'));var BPromise=require(_0x9133('0x5'));var Mustache=require(_0x9133('0x6'));var util=require(_0x9133('0x7'));var path=require('path');var sox=require(_0x9133('0x8'));var csv=require(_0x9133('0x9'));var ejs=require(_0x9133('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x9133('0xb'));var crypto=require(_0x9133('0xc'));var jsforce=require(_0x9133('0xd'));var deskjs=require(_0x9133('0xe'));var toCsv=require(_0x9133('0x9'));var querystring=require(_0x9133('0xf'));var Papa=require(_0x9133('0x10'));var authService=require(_0x9133('0x11'));var hardwareService=require(_0x9133('0x12'));var Redis=require(_0x9133('0x13'));var qs=require('../../components/parsers/qs');var logger=require(_0x9133('0x14'))(_0x9133('0x15'));var utils=require(_0x9133('0x16'));var config=require(_0x9133('0x17'));var db=require(_0x9133('0x18'))['db'];function respondWithStatusCode(_0x244ced,_0x5ef6b5){_0x5ef6b5=_0x5ef6b5||0xcc;return function(_0xb64550){if(_0xb64550){return _0x244ced[_0x9133('0x19')](_0x5ef6b5);}return _0x244ced['status'](_0x5ef6b5)['end']();};}function respondWithResult(_0x10475c,_0x4bf947){_0x4bf947=_0x4bf947||0xc8;return function(_0x22132a){if(_0x22132a){return _0x10475c[_0x9133('0x1a')](_0x4bf947)[_0x9133('0x1b')](_0x22132a);}};}function respondWithFilteredResult(_0x464ec5,_0x31847a){return function(_0x4327b3){if(_0x4327b3){var _0x49cc5d=_0x4327b3[_0x9133('0x1c')],_0x13f8fc=_0x31847a[_0x9133('0x1d')],_0x1e23ce=_0x31847a[_0x9133('0x1d')]+_0x31847a[_0x9133('0x1e')],_0x4f4f14;if(_0x1e23ce>=_0x49cc5d){_0x1e23ce=_0x49cc5d;_0x4f4f14=0xc8;}else{_0x4f4f14=0xce;}_0x464ec5['status'](_0x4f4f14);return _0x464ec5[_0x9133('0x1f')]('Content-Range',_0x13f8fc+'-'+_0x1e23ce+'/'+_0x49cc5d)[_0x9133('0x1b')](_0x4327b3);}return null;};}function patchUpdates(_0x5d4a77){return function(_0x115ee8){try{jsonpatch[_0x9133('0x20')](_0x115ee8,_0x5d4a77,!![]);}catch(_0x5e8620){return BPromise[_0x9133('0x21')](_0x5e8620);}return _0x115ee8['save']();};}function saveUpdates(_0x2f91f8,_0x57af5e){return function(_0x5e4f0c){if(_0x5e4f0c){return _0x5e4f0c[_0x9133('0x22')](_0x2f91f8)['then'](function(_0x12c2d4){return _0x12c2d4;});}return null;};}function removeEntity(_0x4c1088,_0x5d4608){return function(_0x4c846e){if(_0x4c846e){return _0x4c846e[_0x9133('0x23')]()[_0x9133('0x24')](function(){_0x4c1088['status'](0xcc)[_0x9133('0x25')]();});}};}function handleEntityNotFound(_0x3f5d0e,_0xff08d5){return function(_0x26190c){if(!_0x26190c){_0x3f5d0e['sendStatus'](0x194);}return _0x26190c;};}function handleError(_0xdb7a98,_0x5c4614){_0x5c4614=_0x5c4614||0x1f4;return function(_0x187e32){logger[_0x9133('0x26')](_0x187e32[_0x9133('0x27')]);if(_0x187e32[_0x9133('0x28')]){delete _0x187e32[_0x9133('0x28')];}_0xdb7a98[_0x9133('0x1a')](_0x5c4614)[_0x9133('0x29')](_0x187e32);};}exports[_0x9133('0x2a')]=function(_0x1b6b3e,_0x46050b){var _0x51de62={},_0x517e7b={},_0x477bf1={'count':0x0,'rows':[]};var _0x3dfdc2=db[_0x9133('0x2b')][_0x9133('0x2c')];_0x517e7b['model']=_['keys'](_0x3dfdc2);_0x517e7b[_0x9133('0x2d')]=_[_0x9133('0x2e')](_0x1b6b3e[_0x9133('0x2d')]);_0x517e7b[_0x9133('0x2f')]=_[_0x9133('0x30')](_0x517e7b[_0x9133('0x31')],_0x517e7b['query']);_0x51de62['attributes']=_['intersection'](_0x517e7b[_0x9133('0x31')],qs['fields'](_0x1b6b3e[_0x9133('0x2d')][_0x9133('0x32')]));_0x51de62['attributes']=_0x51de62[_0x9133('0x33')]['length']?_0x51de62[_0x9133('0x33')]:_0x517e7b[_0x9133('0x31')];if(!_0x1b6b3e[_0x9133('0x2d')]['hasOwnProperty'](_0x9133('0x34'))){_0x51de62[_0x9133('0x1e')]=qs[_0x9133('0x1e')](_0x1b6b3e['query'][_0x9133('0x1e')]);_0x51de62[_0x9133('0x1d')]=qs[_0x9133('0x1d')](_0x1b6b3e['query'][_0x9133('0x1d')]);}_0x51de62[_0x9133('0x35')]=qs[_0x9133('0x36')](_0x1b6b3e[_0x9133('0x2d')]['sort']);_0x51de62[_0x9133('0x37')]=qs[_0x9133('0x2f')](_['pick'](_0x1b6b3e[_0x9133('0x2d')],_0x517e7b[_0x9133('0x2f')]));if(_0x1b6b3e[_0x9133('0x2d')][_0x9133('0x38')]){_0x51de62[_0x9133('0x37')]=_[_0x9133('0x39')](_0x51de62[_0x9133('0x37')],{'$or':_[_0x9133('0x3a')](_0x3dfdc2,function(_0x4172e3){if(_0x4172e3[_0x9133('0x3b')][_0x9133('0x3c')]!=='VIRTUAL'){var _0x17bb4c={};_0x17bb4c[_0x4172e3[_0x9133('0x3d')]]={'$like':'%'+_0x1b6b3e['query'][_0x9133('0x38')]+'%'};return _0x17bb4c;}})});}_0x51de62=_[_0x9133('0x39')]({},_0x51de62,_0x1b6b3e[_0x9133('0x3e')]);var _0x40bc43={'where':_0x51de62[_0x9133('0x37')]};return db[_0x9133('0x2b')]['count'](_0x40bc43)['then'](function(_0x33c05b){_0x477bf1[_0x9133('0x1c')]=_0x33c05b;if(_0x1b6b3e[_0x9133('0x2d')][_0x9133('0x3f')]){_0x51de62[_0x9133('0x40')]=[{'all':!![]}];}return db[_0x9133('0x2b')][_0x9133('0x41')](_0x51de62);})[_0x9133('0x24')](function(_0x720048){_0x477bf1['rows']=_0x720048;return _0x477bf1;})[_0x9133('0x24')](respondWithFilteredResult(_0x46050b,_0x51de62))[_0x9133('0x42')](handleError(_0x46050b,null));};exports[_0x9133('0x43')]=function(_0x199ae9,_0x3df6ca){var _0x4c045e={'raw':![],'where':{'id':_0x199ae9[_0x9133('0x44')]['id']}},_0x3c691e={};_0x3c691e[_0x9133('0x31')]=_[_0x9133('0x2e')](db['VoiceAgentReport'][_0x9133('0x2c')]);_0x3c691e[_0x9133('0x2d')]=_[_0x9133('0x2e')](_0x199ae9[_0x9133('0x2d')]);_0x3c691e[_0x9133('0x2f')]=_[_0x9133('0x30')](_0x3c691e[_0x9133('0x31')],_0x3c691e['query']);_0x4c045e[_0x9133('0x33')]=_['intersection'](_0x3c691e['model'],qs[_0x9133('0x32')](_0x199ae9[_0x9133('0x2d')][_0x9133('0x32')]));_0x4c045e[_0x9133('0x33')]=_0x4c045e[_0x9133('0x33')][_0x9133('0x45')]?_0x4c045e[_0x9133('0x33')]:_0x3c691e[_0x9133('0x31')];if(_0x199ae9[_0x9133('0x2d')]['includeAll']){_0x4c045e[_0x9133('0x40')]=[{'all':!![]}];}_0x4c045e=_[_0x9133('0x39')]({},_0x4c045e,_0x199ae9[_0x9133('0x3e')]);return db['VoiceAgentReport']['find'](_0x4c045e)[_0x9133('0x24')](handleEntityNotFound(_0x3df6ca,null))[_0x9133('0x24')](respondWithResult(_0x3df6ca,null))['catch'](handleError(_0x3df6ca,null));};exports[_0x9133('0x46')]=function(_0x3320d1,_0x2bbaba){return db[_0x9133('0x2b')][_0x9133('0x46')](_0x3320d1['body'],{})[_0x9133('0x24')](respondWithResult(_0x2bbaba,0xc9))[_0x9133('0x42')](handleError(_0x2bbaba,null));};exports[_0x9133('0x22')]=function(_0x573be5,_0x3d884d){if(_0x573be5[_0x9133('0x47')]['id']){delete _0x573be5['body']['id'];}return db['VoiceAgentReport'][_0x9133('0x48')]({'where':{'id':_0x573be5[_0x9133('0x44')]['id']}})[_0x9133('0x24')](handleEntityNotFound(_0x3d884d,null))[_0x9133('0x24')](saveUpdates(_0x573be5[_0x9133('0x47')],null))[_0x9133('0x24')](respondWithResult(_0x3d884d,null))[_0x9133('0x42')](handleError(_0x3d884d,null));};exports[_0x9133('0x23')]=function(_0x23f134,_0xf07fbb){return db[_0x9133('0x2b')][_0x9133('0x48')]({'where':{'id':_0x23f134['params']['id']}})['then'](handleEntityNotFound(_0xf07fbb,null))[_0x9133('0x24')](removeEntity(_0xf07fbb,null))['catch'](handleError(_0xf07fbb,null));};exports[_0x9133('0x49')]=function(_0x4091d3,_0x6fbb11){return db[_0x9133('0x2b')]['describe']()[_0x9133('0x24')](respondWithResult(_0x6fbb11,null))[_0x9133('0x42')](handleError(_0x6fbb11,null));};
\ No newline at end of file
+var _0xc14d=['desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','api','../../config/utils','../../config/environment','status','end','offset','limit','set','Content-Range','json','apply','reject','update','then','destroy','sendStatus','error','stack','name','send','index','VoiceAgentReport','rawAttributes','model','query','keys','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','filter','merge','type','key','VIRTUAL','field','options','count','includeAll','include','findAll','rows','catch','create','body','find','describe','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','crypto','jsforce'];(function(_0x29fff8,_0x1a670a){var _0x133d9d=function(_0x3a2ff3){while(--_0x3a2ff3){_0x29fff8['push'](_0x29fff8['shift']());}};_0x133d9d(++_0x1a670a);}(_0xc14d,0x1ea));var _0xdc14=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xc14d[_0x14add3];return _0x4a174f;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require(_0xdc14('0x0'));var zipdir=require(_0xdc14('0x1'));var jsonpatch=require(_0xdc14('0x2'));var rp=require(_0xdc14('0x3'));var moment=require(_0xdc14('0x4'));var BPromise=require(_0xdc14('0x5'));var Mustache=require(_0xdc14('0x6'));var util=require(_0xdc14('0x7'));var path=require(_0xdc14('0x8'));var sox=require(_0xdc14('0x9'));var csv=require(_0xdc14('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0xdc14('0xb'));var squel=require('squel');var crypto=require(_0xdc14('0xc'));var jsforce=require(_0xdc14('0xd'));var deskjs=require(_0xdc14('0xe'));var toCsv=require('to-csv');var querystring=require(_0xdc14('0xf'));var Papa=require(_0xdc14('0x10'));var authService=require(_0xdc14('0x11'));var hardwareService=require(_0xdc14('0x12'));var Redis=require('ioredis');var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0xdc14('0x13'));var utils=require(_0xdc14('0x14'));var config=require(_0xdc14('0x15'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x871c4,_0x19248b){_0x19248b=_0x19248b||0xcc;return function(_0x18ca3d){if(_0x18ca3d){return _0x871c4['sendStatus'](_0x19248b);}return _0x871c4[_0xdc14('0x16')](_0x19248b)[_0xdc14('0x17')]();};}function respondWithResult(_0x4a21c6,_0x5b015a){_0x5b015a=_0x5b015a||0xc8;return function(_0x3450b5){if(_0x3450b5){return _0x4a21c6['status'](_0x5b015a)['json'](_0x3450b5);}};}function respondWithFilteredResult(_0x2849ef,_0x57f364){return function(_0x1782fe){if(_0x1782fe){var _0x13f392=_0x1782fe['count'],_0x57de8f=_0x57f364[_0xdc14('0x18')],_0xc0bf6b=_0x57f364[_0xdc14('0x18')]+_0x57f364[_0xdc14('0x19')],_0x358a69;if(_0xc0bf6b>=_0x13f392){_0xc0bf6b=_0x13f392;_0x358a69=0xc8;}else{_0x358a69=0xce;}_0x2849ef['status'](_0x358a69);return _0x2849ef[_0xdc14('0x1a')](_0xdc14('0x1b'),_0x57de8f+'-'+_0xc0bf6b+'/'+_0x13f392)[_0xdc14('0x1c')](_0x1782fe);}return null;};}function patchUpdates(_0x102869){return function(_0x14e5ec){try{jsonpatch[_0xdc14('0x1d')](_0x14e5ec,_0x102869,!![]);}catch(_0x20fe42){return BPromise[_0xdc14('0x1e')](_0x20fe42);}return _0x14e5ec['save']();};}function saveUpdates(_0x4e0b89,_0x5d354b){return function(_0x2cebd1){if(_0x2cebd1){return _0x2cebd1[_0xdc14('0x1f')](_0x4e0b89)[_0xdc14('0x20')](function(_0x549341){return _0x549341;});}return null;};}function removeEntity(_0x4799ec,_0x3d44b9){return function(_0x38a811){if(_0x38a811){return _0x38a811[_0xdc14('0x21')]()[_0xdc14('0x20')](function(){_0x4799ec[_0xdc14('0x16')](0xcc)[_0xdc14('0x17')]();});}};}function handleEntityNotFound(_0x1dab5d,_0x1f5a17){return function(_0x41c75e){if(!_0x41c75e){_0x1dab5d[_0xdc14('0x22')](0x194);}return _0x41c75e;};}function handleError(_0x443bce,_0x2cbf24){_0x2cbf24=_0x2cbf24||0x1f4;return function(_0x24cdd5){logger[_0xdc14('0x23')](_0x24cdd5[_0xdc14('0x24')]);if(_0x24cdd5[_0xdc14('0x25')]){delete _0x24cdd5[_0xdc14('0x25')];}_0x443bce['status'](_0x2cbf24)[_0xdc14('0x26')](_0x24cdd5);};}exports[_0xdc14('0x27')]=function(_0x80ee62,_0x546451){var _0x21ecda={},_0x2207a4={},_0x1f6595={'count':0x0,'rows':[]};var _0x323f89=db[_0xdc14('0x28')][_0xdc14('0x29')];_0x2207a4[_0xdc14('0x2a')]=_['keys'](_0x323f89);_0x2207a4[_0xdc14('0x2b')]=_[_0xdc14('0x2c')](_0x80ee62[_0xdc14('0x2b')]);_0x2207a4[_0xdc14('0x2d')]=_[_0xdc14('0x2e')](_0x2207a4['model'],_0x2207a4[_0xdc14('0x2b')]);_0x21ecda[_0xdc14('0x2f')]=_['intersection'](_0x2207a4[_0xdc14('0x2a')],qs[_0xdc14('0x30')](_0x80ee62['query'][_0xdc14('0x30')]));_0x21ecda[_0xdc14('0x2f')]=_0x21ecda[_0xdc14('0x2f')][_0xdc14('0x31')]?_0x21ecda[_0xdc14('0x2f')]:_0x2207a4[_0xdc14('0x2a')];if(!_0x80ee62['query'][_0xdc14('0x32')](_0xdc14('0x33'))){_0x21ecda[_0xdc14('0x19')]=qs[_0xdc14('0x19')](_0x80ee62[_0xdc14('0x2b')][_0xdc14('0x19')]);_0x21ecda[_0xdc14('0x18')]=qs['offset'](_0x80ee62[_0xdc14('0x2b')][_0xdc14('0x18')]);}_0x21ecda[_0xdc14('0x34')]=qs['sort'](_0x80ee62['query'][_0xdc14('0x35')]);_0x21ecda[_0xdc14('0x36')]=qs[_0xdc14('0x2d')](_['pick'](_0x80ee62[_0xdc14('0x2b')],_0x2207a4['filters']));if(_0x80ee62[_0xdc14('0x2b')][_0xdc14('0x37')]){_0x21ecda[_0xdc14('0x36')]=_[_0xdc14('0x38')](_0x21ecda['where'],{'$or':_['map'](_0x323f89,function(_0x165f98){if(_0x165f98[_0xdc14('0x39')][_0xdc14('0x3a')]!==_0xdc14('0x3b')){var _0x34453b={};_0x34453b[_0x165f98[_0xdc14('0x3c')]]={'$like':'%'+_0x80ee62[_0xdc14('0x2b')][_0xdc14('0x37')]+'%'};return _0x34453b;}})});}_0x21ecda=_[_0xdc14('0x38')]({},_0x21ecda,_0x80ee62[_0xdc14('0x3d')]);var _0x113bdf={'where':_0x21ecda[_0xdc14('0x36')]};return db[_0xdc14('0x28')][_0xdc14('0x3e')](_0x113bdf)[_0xdc14('0x20')](function(_0x5ca867){_0x1f6595[_0xdc14('0x3e')]=_0x5ca867;if(_0x80ee62[_0xdc14('0x2b')][_0xdc14('0x3f')]){_0x21ecda[_0xdc14('0x40')]=[{'all':!![]}];}return db[_0xdc14('0x28')][_0xdc14('0x41')](_0x21ecda);})[_0xdc14('0x20')](function(_0x5a4795){_0x1f6595[_0xdc14('0x42')]=_0x5a4795;return _0x1f6595;})[_0xdc14('0x20')](respondWithFilteredResult(_0x546451,_0x21ecda))[_0xdc14('0x43')](handleError(_0x546451,null));};exports['show']=function(_0x11bbc1,_0x532562){var _0x46023c={'raw':![],'where':{'id':_0x11bbc1['params']['id']}},_0x58ce3f={};_0x58ce3f[_0xdc14('0x2a')]=_[_0xdc14('0x2c')](db[_0xdc14('0x28')][_0xdc14('0x29')]);_0x58ce3f[_0xdc14('0x2b')]=_['keys'](_0x11bbc1['query']);_0x58ce3f[_0xdc14('0x2d')]=_[_0xdc14('0x2e')](_0x58ce3f['model'],_0x58ce3f[_0xdc14('0x2b')]);_0x46023c[_0xdc14('0x2f')]=_['intersection'](_0x58ce3f[_0xdc14('0x2a')],qs[_0xdc14('0x30')](_0x11bbc1['query'][_0xdc14('0x30')]));_0x46023c[_0xdc14('0x2f')]=_0x46023c[_0xdc14('0x2f')][_0xdc14('0x31')]?_0x46023c['attributes']:_0x58ce3f[_0xdc14('0x2a')];if(_0x11bbc1[_0xdc14('0x2b')]['includeAll']){_0x46023c[_0xdc14('0x40')]=[{'all':!![]}];}_0x46023c=_[_0xdc14('0x38')]({},_0x46023c,_0x11bbc1[_0xdc14('0x3d')]);return db[_0xdc14('0x28')]['find'](_0x46023c)[_0xdc14('0x20')](handleEntityNotFound(_0x532562,null))[_0xdc14('0x20')](respondWithResult(_0x532562,null))[_0xdc14('0x43')](handleError(_0x532562,null));};exports[_0xdc14('0x44')]=function(_0x40322c,_0x162821){return db['VoiceAgentReport'][_0xdc14('0x44')](_0x40322c['body'],{})[_0xdc14('0x20')](respondWithResult(_0x162821,0xc9))[_0xdc14('0x43')](handleError(_0x162821,null));};exports[_0xdc14('0x1f')]=function(_0x54db09,_0x31de36){if(_0x54db09[_0xdc14('0x45')]['id']){delete _0x54db09[_0xdc14('0x45')]['id'];}return db['VoiceAgentReport'][_0xdc14('0x46')]({'where':{'id':_0x54db09['params']['id']}})['then'](handleEntityNotFound(_0x31de36,null))[_0xdc14('0x20')](saveUpdates(_0x54db09['body'],null))[_0xdc14('0x20')](respondWithResult(_0x31de36,null))[_0xdc14('0x43')](handleError(_0x31de36,null));};exports['destroy']=function(_0x56761c,_0x5d00f3){return db[_0xdc14('0x28')][_0xdc14('0x46')]({'where':{'id':_0x56761c['params']['id']}})['then'](handleEntityNotFound(_0x5d00f3,null))[_0xdc14('0x20')](removeEntity(_0x5d00f3,null))[_0xdc14('0x43')](handleError(_0x5d00f3,null));};exports[_0xdc14('0x47')]=function(_0x12d902,_0x1647bb){return db[_0xdc14('0x28')][_0xdc14('0x47')]()[_0xdc14('0x20')](respondWithResult(_0x1647bb,null))[_0xdc14('0x43')](handleError(_0x1647bb,null));};
\ No newline at end of file
index 7bbc965..dcedba4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x522d=['define','VoiceAgentReport','report_agent','uniqueid','lodash','util','../../config/logger','bluebird','request-promise','exports'];(function(_0x5ee7cd,_0x5edd3b){var _0x5896a9=function(_0x1ea16f){while(--_0x1ea16f){_0x5ee7cd['push'](_0x5ee7cd['shift']());}};_0x5896a9(++_0x5edd3b);}(_0x522d,0x126));var _0xd522=function(_0x1a900d,_0x48f779){_0x1a900d=_0x1a900d-0x0;var _0x1f9a8a=_0x522d[_0x1a900d];return _0x1f9a8a;};'use strict';var _=require(_0xd522('0x0'));var util=require(_0xd522('0x1'));var logger=require(_0xd522('0x2'))('api');var moment=require('moment');var BPromise=require(_0xd522('0x3'));var rp=require(_0xd522('0x4'));var attributes=require('./voiceAgentReport.attributes');module[_0xd522('0x5')]=function(_0x382638,_0x5944a4){return _0x382638[_0xd522('0x6')](_0xd522('0x7'),attributes,{'tableName':_0xd522('0x8'),'paranoid':![],'indexes':[{'fields':[_0xd522('0x9'),'destuniqueid']}],'timestamps':!![]});};
\ No newline at end of file
+var _0x4349=['VoiceAgentReport','report_agent','uniqueid','destuniqueid','lodash','util','../../config/logger','api','moment','bluebird','request-promise','./voiceAgentReport.attributes','exports'];(function(_0x3a55a8,_0x53ec10){var _0x19cd3f=function(_0x5dc97e){while(--_0x5dc97e){_0x3a55a8['push'](_0x3a55a8['shift']());}};_0x19cd3f(++_0x53ec10);}(_0x4349,0xd4));var _0x9434=function(_0xe4c38f,_0x3ee52b){_0xe4c38f=_0xe4c38f-0x0;var _0x258c30=_0x4349[_0xe4c38f];return _0x258c30;};'use strict';var _=require(_0x9434('0x0'));var util=require(_0x9434('0x1'));var logger=require(_0x9434('0x2'))(_0x9434('0x3'));var moment=require(_0x9434('0x4'));var BPromise=require(_0x9434('0x5'));var rp=require(_0x9434('0x6'));var attributes=require(_0x9434('0x7'));module[_0x9434('0x8')]=function(_0x23e659,_0x12d388){return _0x23e659['define'](_0x9434('0x9'),attributes,{'tableName':_0x9434('0xa'),'paranoid':![],'indexes':[{'fields':[_0x9434('0xb'),_0x9434('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
index 8ae1c13..6d5818d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a54=['moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','info','VoiceAgentReport,\x20%s,\x20%s','debug','stringify','error','code','message','request\x20sent','result','catch','VoiceAgentReport','create','body','options','raw','CreateVoiceAgentReport','UpdateVoiceAgentReport','update','where','attributes','limit','then','lodash','util'];(function(_0x26528a,_0x2d445c){var _0x1af261=function(_0x3b8d66){while(--_0x3b8d66){_0x26528a['push'](_0x26528a['shift']());}};_0x1af261(++_0x2d445c);}(_0x7a54,0x106));var _0x47a5=function(_0x21e7d5,_0x80e23c){_0x21e7d5=_0x21e7d5-0x0;var _0x362ab7=_0x7a54[_0x21e7d5];return _0x362ab7;};'use strict';var _=require(_0x47a5('0x0'));var util=require(_0x47a5('0x1'));var moment=require(_0x47a5('0x2'));var BPromise=require('bluebird');var rs=require(_0x47a5('0x3'));var fs=require('fs');var Redis=require(_0x47a5('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x47a5('0x5'));var logger=require(_0x47a5('0x6'))(_0x47a5('0x7'));var config=require(_0x47a5('0x8'));var jayson=require(_0x47a5('0x9'));var client=jayson['client'][_0x47a5('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x59199c,_0x343372,_0x30e405){return new BPromise(function(_0x506eda,_0x194fb0){return client['request'](_0x59199c,_0x30e405)['then'](function(_0x582352){logger[_0x47a5('0xb')](_0x47a5('0xc'),_0x343372,'request\x20sent');logger[_0x47a5('0xd')]('VoiceAgentReport,\x20%s,\x20%s,\x20%s',_0x343372,'request\x20sent',JSON[_0x47a5('0xe')](_0x582352));if(_0x582352[_0x47a5('0xf')]){if(_0x582352[_0x47a5('0xf')][_0x47a5('0x10')]===0x1f4){logger[_0x47a5('0xf')](_0x47a5('0xc'),_0x343372,_0x582352[_0x47a5('0xf')]['message']);return _0x194fb0(_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);}logger[_0x47a5('0xf')](_0x47a5('0xc'),_0x343372,_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);return _0x506eda(_0x582352[_0x47a5('0xf')][_0x47a5('0x11')]);}else{logger['info'](_0x47a5('0xc'),_0x343372,_0x47a5('0x12'));_0x506eda(_0x582352[_0x47a5('0x13')][_0x47a5('0x11')]);}})[_0x47a5('0x14')](function(_0x574af6){logger['error'](_0x47a5('0xc'),_0x343372,_0x574af6);_0x194fb0(_0x574af6);});});}exports['CreateVoiceAgentReport']=function(_0x5247fd){var _0x423a81=this;return new Promise(function(_0xaf70a6,_0x2ce454){return db[_0x47a5('0x15')][_0x47a5('0x16')](_0x5247fd[_0x47a5('0x17')],{'raw':_0x5247fd[_0x47a5('0x18')]?_0x5247fd[_0x47a5('0x18')][_0x47a5('0x19')]===undefined?!![]:![]:!![]})['then'](function(_0x1570bc){logger[_0x47a5('0xb')]('CreateVoiceAgentReport',_0x5247fd);logger[_0x47a5('0xd')](_0x47a5('0x1a'),_0x5247fd,JSON[_0x47a5('0xe')](_0x1570bc));_0xaf70a6(_0x1570bc);})['catch'](function(_0xb8ae6c){logger[_0x47a5('0xf')](_0x47a5('0x1a'),_0xb8ae6c[_0x47a5('0x11')],_0x5247fd);_0x2ce454(_0x423a81['error'](0x1f4,_0xb8ae6c[_0x47a5('0x11')]));});});};exports[_0x47a5('0x1b')]=function(_0x513981){var _0x28747d=this;return new Promise(function(_0xc4cd63,_0x4437f1){return db[_0x47a5('0x15')][_0x47a5('0x1c')](_0x513981['body'],{'raw':_0x513981['options']?_0x513981[_0x47a5('0x18')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x513981[_0x47a5('0x18')]?_0x513981['options'][_0x47a5('0x1d')]||null:null,'attributes':_0x513981[_0x47a5('0x18')]?_0x513981[_0x47a5('0x18')][_0x47a5('0x1e')]||null:null,'limit':_0x513981[_0x47a5('0x18')]?_0x513981[_0x47a5('0x18')][_0x47a5('0x1f')]||null:null})[_0x47a5('0x20')](function(_0x16631f){logger[_0x47a5('0xb')](_0x47a5('0x1b'),_0x513981);logger[_0x47a5('0xd')](_0x47a5('0x1b'),_0x513981,JSON['stringify'](_0x16631f));_0xc4cd63(_0x16631f);})[_0x47a5('0x14')](function(_0x51833b){logger[_0x47a5('0xf')](_0x47a5('0x1b'),_0x51833b[_0x47a5('0x11')],_0x513981);_0x4437f1(_0x28747d['error'](0x1f4,_0x51833b[_0x47a5('0x11')]));});});};
\ No newline at end of file
+var _0x814b=['moment','bluebird','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','request','then','info','VoiceAgentReport,\x20%s,\x20%s','request\x20sent','debug','VoiceAgentReport,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','CreateVoiceAgentReport','body','raw','stringify','VoiceAgentReport','update','options','where','attributes','limit','UpdateVoiceAgentReport','lodash','util'];(function(_0x3d09e2,_0x58e784){var _0x5d03cd=function(_0x40f355){while(--_0x40f355){_0x3d09e2['push'](_0x3d09e2['shift']());}};_0x5d03cd(++_0x58e784);}(_0x814b,0x1a2));var _0xb814=function(_0x1943d9,_0x245bb8){_0x1943d9=_0x1943d9-0x0;var _0x4b4f3f=_0x814b[_0x1943d9];return _0x4b4f3f;};'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 d507d4a..5a65c42 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5862=['show','post','create','/:id','update','destroy','exports','multer','util','path','./voiceCallReport.controller','get','isAuthenticated','index','/describe'];(function(_0x51b52e,_0x3c2506){var _0x59a011=function(_0x397663){while(--_0x397663){_0x51b52e['push'](_0x51b52e['shift']());}};_0x59a011(++_0x3c2506);}(_0x5862,0x115));var _0x2586=function(_0x4aefc9,_0x27bfdc){_0x4aefc9=_0x4aefc9-0x0;var _0x1537a4=_0x5862[_0x4aefc9];return _0x1537a4;};'use strict';var multer=require(_0x2586('0x0'));var util=require(_0x2586('0x1'));var path=require(_0x2586('0x2'));var timeout=require('connect-timeout');var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x2586('0x3'));router[_0x2586('0x4')]('/',auth[_0x2586('0x5')](),controller[_0x2586('0x6')]);router[_0x2586('0x4')](_0x2586('0x7'),auth[_0x2586('0x5')](),controller['describe']);router[_0x2586('0x4')]('/:id',auth[_0x2586('0x5')](),controller[_0x2586('0x8')]);router[_0x2586('0x9')]('/',auth[_0x2586('0x5')](),controller[_0x2586('0xa')]);router['put'](_0x2586('0xb'),auth[_0x2586('0x5')](),controller[_0x2586('0xc')]);router['delete'](_0x2586('0xb'),auth['isAuthenticated'](),controller[_0x2586('0xd')]);module[_0x2586('0xe')]=router;
\ No newline at end of file
+var _0xa98e=['isAuthenticated','/describe','show','post','create','put','/:id','update','delete','destroy','multer','express','../../components/interaction/service','./voiceCallReport.controller','get'];(function(_0x12e73c,_0x2cbe1d){var _0x4c41cb=function(_0x10283b){while(--_0x10283b){_0x12e73c['push'](_0x12e73c['shift']());}};_0x4c41cb(++_0x2cbe1d);}(_0xa98e,0x163));var _0xea98=function(_0x5708cc,_0x3dc566){_0x5708cc=_0x5708cc-0x0;var _0x48f2b8=_0xa98e[_0x5708cc];return _0x48f2b8;};'use strict';var multer=require(_0xea98('0x0'));var util=require('util');var path=require('path');var timeout=require('connect-timeout');var express=require(_0xea98('0x1'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xea98('0x2'));var config=require('../../config/environment');var controller=require(_0xea98('0x3'));router[_0xea98('0x4')]('/',auth[_0xea98('0x5')](),controller['index']);router[_0xea98('0x4')](_0xea98('0x6'),auth['isAuthenticated'](),controller['describe']);router[_0xea98('0x4')]('/:id',auth[_0xea98('0x5')](),controller[_0xea98('0x7')]);router[_0xea98('0x8')]('/',auth[_0xea98('0x5')](),controller[_0xea98('0x9')]);router[_0xea98('0xa')](_0xea98('0xb'),auth[_0xea98('0x5')](),controller[_0xea98('0xc')]);router[_0xea98('0xd')]('/:id',auth[_0xea98('0x5')](),controller[_0xea98('0xe')]);module['exports']=router;
\ No newline at end of file
index 6f48d20..5cc47bc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe0b8=['outbound','inbound-fax','outbound-fax','dialer','STRING','DATE','INTEGER','exports','inbound','internal'];(function(_0x556927,_0x34b53f){var _0x5f1235=function(_0x4f4e44){while(--_0x4f4e44){_0x556927['push'](_0x556927['shift']());}};_0x5f1235(++_0x34b53f);}(_0xe0b8,0x1ab));var _0x8e0b=function(_0x30abee,_0xda50ec){_0x30abee=_0x30abee-0x0;var _0x53d4ea=_0xe0b8[_0x30abee];return _0x53d4ea;};'use strict';var Sequelize=require('sequelize');module[_0x8e0b('0x0')]={'uniqueid':{'type':Sequelize['STRING']},'type':{'type':Sequelize['ENUM'](_0x8e0b('0x1'),_0x8e0b('0x2'),_0x8e0b('0x3'),_0x8e0b('0x4'),_0x8e0b('0x5'),_0x8e0b('0x6'))},'tag':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize[_0x8e0b('0x7')]},'source':{'type':Sequelize[_0x8e0b('0x7')]},'destination':{'type':Sequelize[_0x8e0b('0x7')]},'destinationcontext':{'type':Sequelize[_0x8e0b('0x7')]},'callerid':{'type':Sequelize['STRING']},'channel':{'type':Sequelize['STRING']},'destinationchannel':{'type':Sequelize['STRING']},'lastapplication':{'type':Sequelize['STRING']},'lastdata':{'type':Sequelize['TEXT']},'starttime':{'type':Sequelize[_0x8e0b('0x8')]},'systemanswertime':{'type':Sequelize[_0x8e0b('0x8')]},'answertime':{'type':Sequelize[_0x8e0b('0x8')]},'endtime':{'type':Sequelize[_0x8e0b('0x8')]},'duration':{'type':Sequelize[_0x8e0b('0x9')]},'billableseconds':{'type':Sequelize[_0x8e0b('0x9')]},'mohtime':{'type':Sequelize[_0x8e0b('0x9')],'defaultValue':0x0},'disposition':{'type':Sequelize[_0x8e0b('0x7')]},'amaflags':{'type':Sequelize[_0x8e0b('0x7')]},'userfield':{'type':Sequelize[_0x8e0b('0x7')]},'userDisposition':{'type':Sequelize[_0x8e0b('0x7')]},'note':{'type':Sequelize[_0x8e0b('0x7')]},'prefix':{'type':Sequelize[_0x8e0b('0x7')]},'routeid':{'type':Sequelize[_0x8e0b('0x9')]},'sipcallid':{'type':Sequelize[_0x8e0b('0x7')]}};
\ No newline at end of file
+var _0x0ff7=['ENUM','inbound','internal','outbound','inbound-fax','outbound-fax','dialer','DATE','INTEGER','exports','STRING'];(function(_0x1fabd9,_0x44c6f5){var _0x5b2b8=function(_0x6c8c8c){while(--_0x6c8c8c){_0x1fabd9['push'](_0x1fabd9['shift']());}};_0x5b2b8(++_0x44c6f5);}(_0x0ff7,0x169));var _0x70ff=function(_0x29d915,_0x54a040){_0x29d915=_0x29d915-0x0;var _0x160f86=_0x0ff7[_0x29d915];return _0x160f86;};'use strict';var Sequelize=require('sequelize');module[_0x70ff('0x0')]={'uniqueid':{'type':Sequelize[_0x70ff('0x1')]},'type':{'type':Sequelize[_0x70ff('0x2')](_0x70ff('0x3'),_0x70ff('0x4'),_0x70ff('0x5'),_0x70ff('0x6'),_0x70ff('0x7'),_0x70ff('0x8'))},'tag':{'type':Sequelize['STRING']},'accountcode':{'type':Sequelize['STRING']},'source':{'type':Sequelize[_0x70ff('0x1')]},'destination':{'type':Sequelize[_0x70ff('0x1')]},'destinationcontext':{'type':Sequelize[_0x70ff('0x1')]},'callerid':{'type':Sequelize['STRING']},'channel':{'type':Sequelize['STRING']},'destinationchannel':{'type':Sequelize[_0x70ff('0x1')]},'lastapplication':{'type':Sequelize[_0x70ff('0x1')]},'lastdata':{'type':Sequelize['TEXT']},'starttime':{'type':Sequelize[_0x70ff('0x9')]},'systemanswertime':{'type':Sequelize[_0x70ff('0x9')]},'answertime':{'type':Sequelize[_0x70ff('0x9')]},'endtime':{'type':Sequelize[_0x70ff('0x9')]},'duration':{'type':Sequelize['INTEGER']},'billableseconds':{'type':Sequelize['INTEGER']},'mohtime':{'type':Sequelize[_0x70ff('0xa')],'defaultValue':0x0},'disposition':{'type':Sequelize[_0x70ff('0x1')]},'amaflags':{'type':Sequelize[_0x70ff('0x1')]},'userfield':{'type':Sequelize[_0x70ff('0x1')]},'userDisposition':{'type':Sequelize[_0x70ff('0x1')]},'note':{'type':Sequelize['STRING']},'prefix':{'type':Sequelize[_0x70ff('0x1')]},'routeid':{'type':Sequelize[_0x70ff('0xa')]},'sipcallid':{'type':Sequelize[_0x70ff('0x1')]}};
\ No newline at end of file
index 15ae688..c7a3357 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb01d=['ejs','lodash','squel','crypto','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','Content-Range','reject','save','update','then','destroy','error','stack','name','send','VoiceCallReport','rawAttributes','keys','query','filters','model','attributes','fields','hasOwnProperty','nolimit','sort','pick','filter','where','merge','map','type','key','options','include','fullname','alias','User','findAll','show','intersection','length','includeAll','create','body','params','catch','describe','uniqueid','find','user','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','util','path','sox','to-csv'];(function(_0x40c143,_0x3753c9){var _0x399aaa=function(_0x52ad7e){while(--_0x52ad7e){_0x40c143['push'](_0x40c143['shift']());}};_0x399aaa(++_0x3753c9);}(_0xb01d,0x17f));var _0xdb01=function(_0x3d0c82,_0x40e5b8){_0x3d0c82=_0x3d0c82-0x0;var _0x22ab74=_0xb01d[_0x3d0c82];return _0x22ab74;};'use strict';var pdf=require(_0xdb01('0x0'));var emlformat=require(_0xdb01('0x1'));var rimraf=require(_0xdb01('0x2'));var zipdir=require(_0xdb01('0x3'));var jsonpatch=require(_0xdb01('0x4'));var rp=require(_0xdb01('0x5'));var moment=require(_0xdb01('0x6'));var BPromise=require(_0xdb01('0x7'));var Mustache=require('mustache');var util=require(_0xdb01('0x8'));var path=require(_0xdb01('0x9'));var sox=require(_0xdb01('0xa'));var csv=require(_0xdb01('0xb'));var ejs=require(_0xdb01('0xc'));var fs=require('fs');var _=require(_0xdb01('0xd'));var squel=require(_0xdb01('0xe'));var crypto=require(_0xdb01('0xf'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0xdb01('0xb'));var querystring=require(_0xdb01('0x10'));var Papa=require(_0xdb01('0x11'));var authService=require(_0xdb01('0x12'));var hardwareService=require(_0xdb01('0x13'));var Redis=require(_0xdb01('0x14'));var qs=require(_0xdb01('0x15'));var logger=require('../../config/logger')(_0xdb01('0x16'));var utils=require(_0xdb01('0x17'));var config=require('../../config/environment');var db=require(_0xdb01('0x18'))['db'];function respondWithStatusCode(_0x1dfb30,_0x5b88b0){_0x5b88b0=_0x5b88b0||0xcc;return function(_0x788b66){if(_0x788b66){return _0x1dfb30[_0xdb01('0x19')](_0x5b88b0);}return _0x1dfb30[_0xdb01('0x1a')](_0x5b88b0)[_0xdb01('0x1b')]();};}function respondWithResult(_0x451240,_0x4a49c0){_0x4a49c0=_0x4a49c0||0xc8;return function(_0x368a03){if(_0x368a03){return _0x451240['status'](_0x4a49c0)[_0xdb01('0x1c')](_0x368a03);}};}function respondWithFilteredResult(_0x5c6d1b,_0x91a802){return function(_0x5d890b){if(_0x5d890b){var _0x3f0a69=_0x5d890b[_0xdb01('0x1d')],_0x283c63=_0x91a802[_0xdb01('0x1e')],_0x3e3dab=_0x91a802[_0xdb01('0x1e')]+_0x91a802[_0xdb01('0x1f')],_0x25ba6a;if(_0x3e3dab>=_0x3f0a69){_0x3e3dab=_0x3f0a69;_0x25ba6a=0xc8;}else{_0x25ba6a=0xce;}_0x5c6d1b['status'](_0x25ba6a);return _0x5c6d1b[_0xdb01('0x20')](_0xdb01('0x21'),_0x283c63+'-'+_0x3e3dab+'/'+_0x3f0a69)[_0xdb01('0x1c')](_0x5d890b);}return null;};}function patchUpdates(_0x1c5a01){return function(_0x1c2dde){try{jsonpatch['apply'](_0x1c2dde,_0x1c5a01,!![]);}catch(_0x5101ea){return BPromise[_0xdb01('0x22')](_0x5101ea);}return _0x1c2dde[_0xdb01('0x23')]();};}function saveUpdates(_0x3c85b5,_0x320010){return function(_0x10f958){if(_0x10f958){return _0x10f958[_0xdb01('0x24')](_0x3c85b5)[_0xdb01('0x25')](function(_0x3f70e8){return _0x3f70e8;});}return null;};}function removeEntity(_0x242112,_0x3ec353){return function(_0x58fb5b){if(_0x58fb5b){return _0x58fb5b[_0xdb01('0x26')]()['then'](function(){_0x242112['status'](0xcc)['end']();});}};}function handleEntityNotFound(_0x6a523c,_0x23b574){return function(_0xf84c2c){if(!_0xf84c2c){_0x6a523c['sendStatus'](0x194);}return _0xf84c2c;};}function handleError(_0x173a7b,_0x490c65){_0x490c65=_0x490c65||0x1f4;return function(_0x441bc1){logger[_0xdb01('0x27')](_0x441bc1[_0xdb01('0x28')]);if(_0x441bc1[_0xdb01('0x29')]){delete _0x441bc1['name'];}_0x173a7b[_0xdb01('0x1a')](_0x490c65)[_0xdb01('0x2a')](_0x441bc1);};}exports['index']=function(_0x4931a0,_0x1f4cf1){var _0x5f3370={},_0x59774c={},_0x14250b={'count':0x0,'rows':[]};var _0x8895d2=db[_0xdb01('0x2b')][_0xdb01('0x2c')];_0x59774c['model']=_[_0xdb01('0x2d')](_0x8895d2);_0x59774c[_0xdb01('0x2e')]=_[_0xdb01('0x2d')](_0x4931a0[_0xdb01('0x2e')]);_0x59774c[_0xdb01('0x2f')]=_['intersection'](_0x59774c[_0xdb01('0x30')],_0x59774c[_0xdb01('0x2e')]);_0x5f3370[_0xdb01('0x31')]=_['intersection'](_0x59774c['model'],qs[_0xdb01('0x32')](_0x4931a0[_0xdb01('0x2e')][_0xdb01('0x32')]));_0x5f3370['attributes']=_0x5f3370[_0xdb01('0x31')]['length']?_0x5f3370['attributes']:_0x59774c[_0xdb01('0x30')];if(!_0x4931a0[_0xdb01('0x2e')][_0xdb01('0x33')](_0xdb01('0x34'))){_0x5f3370[_0xdb01('0x1f')]=qs[_0xdb01('0x1f')](_0x4931a0[_0xdb01('0x2e')][_0xdb01('0x1f')]);_0x5f3370['offset']=qs[_0xdb01('0x1e')](_0x4931a0[_0xdb01('0x2e')]['offset']);}_0x5f3370['order']=qs[_0xdb01('0x35')](_0x4931a0[_0xdb01('0x2e')]['sort']);_0x5f3370['where']=qs[_0xdb01('0x2f')](_[_0xdb01('0x36')](_0x4931a0[_0xdb01('0x2e')],_0x59774c[_0xdb01('0x2f')]));if(_0x4931a0['query'][_0xdb01('0x37')]){_0x5f3370[_0xdb01('0x38')]=_[_0xdb01('0x39')](_0x5f3370[_0xdb01('0x38')],{'$or':_[_0xdb01('0x3a')](_0x8895d2,function(_0x1f0507){if(_0x1f0507[_0xdb01('0x3b')][_0xdb01('0x3c')]!=='VIRTUAL'){var _0x28b82b={};_0x28b82b[_0x1f0507['field']]={'$like':'%'+_0x4931a0[_0xdb01('0x2e')][_0xdb01('0x37')]+'%'};return _0x28b82b;}})});}_0x5f3370=_[_0xdb01('0x39')]({},_0x5f3370,_0x4931a0[_0xdb01('0x3d')]);var _0x5019df={'where':_0x5f3370['where']};return db[_0xdb01('0x2b')][_0xdb01('0x1d')](_0x5019df)['then'](function(_0x360cff){_0x14250b[_0xdb01('0x1d')]=_0x360cff;if(_0x4931a0[_0xdb01('0x2e')]['includeAll']){_0x5f3370[_0xdb01('0x3e')]=[{'attributes':['id',_0xdb01('0x29'),_0xdb01('0x3f'),_0xdb01('0x40')],'model':db[_0xdb01('0x41')],'as':'User'}];}return db['VoiceCallReport'][_0xdb01('0x42')](_0x5f3370);})[_0xdb01('0x25')](function(_0x2eeedc){_0x14250b['rows']=_0x2eeedc;return _0x14250b;})[_0xdb01('0x25')](respondWithFilteredResult(_0x1f4cf1,_0x5f3370))['catch'](handleError(_0x1f4cf1,null));};exports[_0xdb01('0x43')]=function(_0x5392b9,_0x2b950a){var _0x3cdac7={'raw':!![],'where':{'id':_0x5392b9['params']['id']}},_0x56f60a={};_0x56f60a[_0xdb01('0x30')]=_[_0xdb01('0x2d')](db[_0xdb01('0x2b')][_0xdb01('0x2c')]);_0x56f60a[_0xdb01('0x2e')]=_[_0xdb01('0x2d')](_0x5392b9[_0xdb01('0x2e')]);_0x56f60a[_0xdb01('0x2f')]=_[_0xdb01('0x44')](_0x56f60a[_0xdb01('0x30')],_0x56f60a[_0xdb01('0x2e')]);_0x3cdac7[_0xdb01('0x31')]=_[_0xdb01('0x44')](_0x56f60a[_0xdb01('0x30')],qs[_0xdb01('0x32')](_0x5392b9[_0xdb01('0x2e')][_0xdb01('0x32')]));_0x3cdac7[_0xdb01('0x31')]=_0x3cdac7[_0xdb01('0x31')][_0xdb01('0x45')]?_0x3cdac7[_0xdb01('0x31')]:_0x56f60a['model'];if(_0x5392b9['query'][_0xdb01('0x46')]){_0x3cdac7[_0xdb01('0x3e')]=[{'all':!![]}];}_0x3cdac7=_['merge']({},_0x3cdac7,_0x5392b9[_0xdb01('0x3d')]);return db['VoiceCallReport']['find'](_0x3cdac7)[_0xdb01('0x25')](handleEntityNotFound(_0x2b950a,null))[_0xdb01('0x25')](respondWithResult(_0x2b950a,null))['catch'](handleError(_0x2b950a,null));};exports['create']=function(_0x454081,_0x35a96b){return db['VoiceCallReport'][_0xdb01('0x47')](_0x454081[_0xdb01('0x48')],{})[_0xdb01('0x25')](respondWithResult(_0x35a96b,0xc9))['catch'](handleError(_0x35a96b,null));};exports[_0xdb01('0x26')]=function(_0x5c1906,_0x15de27){return db[_0xdb01('0x2b')]['find']({'where':{'id':_0x5c1906[_0xdb01('0x49')]['id']}})[_0xdb01('0x25')](handleEntityNotFound(_0x15de27,null))['then'](removeEntity(_0x15de27,null))[_0xdb01('0x4a')](handleError(_0x15de27,null));};exports[_0xdb01('0x4b')]=function(_0x159e79,_0x556434){return db[_0xdb01('0x2b')]['describe']()[_0xdb01('0x25')](respondWithResult(_0x556434,null))['catch'](handleError(_0x556434,null));};exports[_0xdb01('0x24')]=function(_0x3bebb2,_0x1a5664){if(_0x3bebb2[_0xdb01('0x48')][_0xdb01('0x4c')]){delete _0x3bebb2[_0xdb01('0x48')][_0xdb01('0x4c')];}return db[_0xdb01('0x2b')][_0xdb01('0x4d')]({'where':{'uniqueid':_0x3bebb2[_0xdb01('0x49')]['id'],'UserId':{'$or':[null,_0x3bebb2[_0xdb01('0x4e')]['id']]}}})['then'](handleEntityNotFound(_0x1a5664,null))['then'](saveUpdates(_0x3bebb2[_0xdb01('0x48')],null))['then'](respondWithResult(_0x1a5664,null))[_0xdb01('0x4a')](handleError(_0x1a5664,null));};
\ No newline at end of file
+var _0xfdeb=['../../components/parsers/qs','../../config/logger','api','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','then','destroy','error','stack','name','send','VoiceCallReport','model','keys','query','filters','intersection','attributes','fields','length','nolimit','order','sort','where','pick','filter','merge','map','type','key','VIRTUAL','options','count','includeAll','include','fullname','alias','User','findAll','rows','catch','params','rawAttributes','create','body','describe','update','find','user','html-pdf','eml-format','rimraf','fast-json-patch','request-promise','bluebird','mustache','util','path','to-csv','ejs','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../config/license/hardware'];(function(_0x4ed37d,_0x1a84c9){var _0x4fb2c5=function(_0x5c9013){while(--_0x5c9013){_0x4ed37d['push'](_0x4ed37d['shift']());}};_0x4fb2c5(++_0x1a84c9);}(_0xfdeb,0x89));var _0xbfde=function(_0x4358f5,_0x5b1ac6){_0x4358f5=_0x4358f5-0x0;var _0x4d8104=_0xfdeb[_0x4358f5];return _0x4d8104;};'use strict';var pdf=require(_0xbfde('0x0'));var emlformat=require(_0xbfde('0x1'));var rimraf=require(_0xbfde('0x2'));var zipdir=require('zip-dir');var jsonpatch=require(_0xbfde('0x3'));var rp=require(_0xbfde('0x4'));var moment=require('moment');var BPromise=require(_0xbfde('0x5'));var Mustache=require(_0xbfde('0x6'));var util=require(_0xbfde('0x7'));var path=require(_0xbfde('0x8'));var sox=require('sox');var csv=require(_0xbfde('0x9'));var ejs=require(_0xbfde('0xa'));var fs=require('fs');var _=require('lodash');var squel=require('squel');var crypto=require(_0xbfde('0xb'));var jsforce=require(_0xbfde('0xc'));var deskjs=require(_0xbfde('0xd'));var toCsv=require(_0xbfde('0x9'));var querystring=require(_0xbfde('0xe'));var Papa=require('papaparse');var authService=require(_0xbfde('0xf'));var hardwareService=require(_0xbfde('0x10'));var Redis=require('ioredis');var qs=require(_0xbfde('0x11'));var logger=require(_0xbfde('0x12'))(_0xbfde('0x13'));var utils=require('../../config/utils');var config=require(_0xbfde('0x14'));var db=require(_0xbfde('0x15'))['db'];function respondWithStatusCode(_0x288ca6,_0x3d2bbc){_0x3d2bbc=_0x3d2bbc||0xcc;return function(_0x7536b7){if(_0x7536b7){return _0x288ca6[_0xbfde('0x16')](_0x3d2bbc);}return _0x288ca6[_0xbfde('0x17')](_0x3d2bbc)[_0xbfde('0x18')]();};}function respondWithResult(_0x34b845,_0x5c27a7){_0x5c27a7=_0x5c27a7||0xc8;return function(_0x27a54d){if(_0x27a54d){return _0x34b845['status'](_0x5c27a7)[_0xbfde('0x19')](_0x27a54d);}};}function respondWithFilteredResult(_0x4db749,_0x4ba911){return function(_0x4a088d){if(_0x4a088d){var _0x1399e1=_0x4a088d['count'],_0x63a698=_0x4ba911[_0xbfde('0x1a')],_0x583333=_0x4ba911[_0xbfde('0x1a')]+_0x4ba911[_0xbfde('0x1b')],_0x2a71ef;if(_0x583333>=_0x1399e1){_0x583333=_0x1399e1;_0x2a71ef=0xc8;}else{_0x2a71ef=0xce;}_0x4db749[_0xbfde('0x17')](_0x2a71ef);return _0x4db749[_0xbfde('0x1c')](_0xbfde('0x1d'),_0x63a698+'-'+_0x583333+'/'+_0x1399e1)['json'](_0x4a088d);}return null;};}function patchUpdates(_0x20277f){return function(_0x364336){try{jsonpatch[_0xbfde('0x1e')](_0x364336,_0x20277f,!![]);}catch(_0x4393d0){return BPromise[_0xbfde('0x1f')](_0x4393d0);}return _0x364336[_0xbfde('0x20')]();};}function saveUpdates(_0x4b6243,_0x4416e5){return function(_0x29d9de){if(_0x29d9de){return _0x29d9de['update'](_0x4b6243)[_0xbfde('0x21')](function(_0x1e9f4d){return _0x1e9f4d;});}return null;};}function removeEntity(_0x22b80b,_0x27a7df){return function(_0x11b3f6){if(_0x11b3f6){return _0x11b3f6[_0xbfde('0x22')]()[_0xbfde('0x21')](function(){_0x22b80b[_0xbfde('0x17')](0xcc)[_0xbfde('0x18')]();});}};}function handleEntityNotFound(_0x37eaef,_0x3f4e9e){return function(_0x349d3d){if(!_0x349d3d){_0x37eaef['sendStatus'](0x194);}return _0x349d3d;};}function handleError(_0x3882e0,_0x180f9a){_0x180f9a=_0x180f9a||0x1f4;return function(_0x43f7b3){logger[_0xbfde('0x23')](_0x43f7b3[_0xbfde('0x24')]);if(_0x43f7b3['name']){delete _0x43f7b3[_0xbfde('0x25')];}_0x3882e0[_0xbfde('0x17')](_0x180f9a)[_0xbfde('0x26')](_0x43f7b3);};}exports['index']=function(_0x109c93,_0x44a857){var _0x5d6a51={},_0x488531={},_0x11bbca={'count':0x0,'rows':[]};var _0x3bb76e=db[_0xbfde('0x27')]['rawAttributes'];_0x488531[_0xbfde('0x28')]=_[_0xbfde('0x29')](_0x3bb76e);_0x488531['query']=_[_0xbfde('0x29')](_0x109c93[_0xbfde('0x2a')]);_0x488531[_0xbfde('0x2b')]=_[_0xbfde('0x2c')](_0x488531[_0xbfde('0x28')],_0x488531['query']);_0x5d6a51[_0xbfde('0x2d')]=_['intersection'](_0x488531['model'],qs[_0xbfde('0x2e')](_0x109c93[_0xbfde('0x2a')][_0xbfde('0x2e')]));_0x5d6a51[_0xbfde('0x2d')]=_0x5d6a51[_0xbfde('0x2d')][_0xbfde('0x2f')]?_0x5d6a51[_0xbfde('0x2d')]:_0x488531['model'];if(!_0x109c93[_0xbfde('0x2a')]['hasOwnProperty'](_0xbfde('0x30'))){_0x5d6a51[_0xbfde('0x1b')]=qs['limit'](_0x109c93[_0xbfde('0x2a')][_0xbfde('0x1b')]);_0x5d6a51['offset']=qs[_0xbfde('0x1a')](_0x109c93['query']['offset']);}_0x5d6a51[_0xbfde('0x31')]=qs[_0xbfde('0x32')](_0x109c93[_0xbfde('0x2a')][_0xbfde('0x32')]);_0x5d6a51[_0xbfde('0x33')]=qs[_0xbfde('0x2b')](_[_0xbfde('0x34')](_0x109c93[_0xbfde('0x2a')],_0x488531[_0xbfde('0x2b')]));if(_0x109c93['query'][_0xbfde('0x35')]){_0x5d6a51[_0xbfde('0x33')]=_[_0xbfde('0x36')](_0x5d6a51[_0xbfde('0x33')],{'$or':_[_0xbfde('0x37')](_0x3bb76e,function(_0x86dd9d){if(_0x86dd9d[_0xbfde('0x38')][_0xbfde('0x39')]!==_0xbfde('0x3a')){var _0x5af719={};_0x5af719[_0x86dd9d['field']]={'$like':'%'+_0x109c93['query'][_0xbfde('0x35')]+'%'};return _0x5af719;}})});}_0x5d6a51=_['merge']({},_0x5d6a51,_0x109c93[_0xbfde('0x3b')]);var _0x198ebf={'where':_0x5d6a51['where']};return db['VoiceCallReport']['count'](_0x198ebf)[_0xbfde('0x21')](function(_0x29ebb9){_0x11bbca[_0xbfde('0x3c')]=_0x29ebb9;if(_0x109c93[_0xbfde('0x2a')][_0xbfde('0x3d')]){_0x5d6a51[_0xbfde('0x3e')]=[{'attributes':['id',_0xbfde('0x25'),_0xbfde('0x3f'),_0xbfde('0x40')],'model':db[_0xbfde('0x41')],'as':'User'}];}return db['VoiceCallReport'][_0xbfde('0x42')](_0x5d6a51);})[_0xbfde('0x21')](function(_0x12a75f){_0x11bbca[_0xbfde('0x43')]=_0x12a75f;return _0x11bbca;})[_0xbfde('0x21')](respondWithFilteredResult(_0x44a857,_0x5d6a51))[_0xbfde('0x44')](handleError(_0x44a857,null));};exports['show']=function(_0x338171,_0x1f8b47){var _0x513770={'raw':!![],'where':{'id':_0x338171[_0xbfde('0x45')]['id']}},_0x18f914={};_0x18f914[_0xbfde('0x28')]=_['keys'](db[_0xbfde('0x27')][_0xbfde('0x46')]);_0x18f914[_0xbfde('0x2a')]=_['keys'](_0x338171[_0xbfde('0x2a')]);_0x18f914['filters']=_[_0xbfde('0x2c')](_0x18f914['model'],_0x18f914[_0xbfde('0x2a')]);_0x513770[_0xbfde('0x2d')]=_[_0xbfde('0x2c')](_0x18f914[_0xbfde('0x28')],qs['fields'](_0x338171[_0xbfde('0x2a')][_0xbfde('0x2e')]));_0x513770['attributes']=_0x513770[_0xbfde('0x2d')][_0xbfde('0x2f')]?_0x513770[_0xbfde('0x2d')]:_0x18f914[_0xbfde('0x28')];if(_0x338171[_0xbfde('0x2a')]['includeAll']){_0x513770[_0xbfde('0x3e')]=[{'all':!![]}];}_0x513770=_[_0xbfde('0x36')]({},_0x513770,_0x338171['options']);return db[_0xbfde('0x27')]['find'](_0x513770)['then'](handleEntityNotFound(_0x1f8b47,null))[_0xbfde('0x21')](respondWithResult(_0x1f8b47,null))[_0xbfde('0x44')](handleError(_0x1f8b47,null));};exports[_0xbfde('0x47')]=function(_0x38e05e,_0xf08f6b){return db[_0xbfde('0x27')][_0xbfde('0x47')](_0x38e05e[_0xbfde('0x48')],{})[_0xbfde('0x21')](respondWithResult(_0xf08f6b,0xc9))[_0xbfde('0x44')](handleError(_0xf08f6b,null));};exports['destroy']=function(_0x32052e,_0x549ac9){return db[_0xbfde('0x27')]['find']({'where':{'id':_0x32052e[_0xbfde('0x45')]['id']}})['then'](handleEntityNotFound(_0x549ac9,null))[_0xbfde('0x21')](removeEntity(_0x549ac9,null))[_0xbfde('0x44')](handleError(_0x549ac9,null));};exports[_0xbfde('0x49')]=function(_0x478f73,_0x4be8f0){return db[_0xbfde('0x27')]['describe']()[_0xbfde('0x21')](respondWithResult(_0x4be8f0,null))[_0xbfde('0x44')](handleError(_0x4be8f0,null));};exports[_0xbfde('0x4a')]=function(_0x15d18d,_0x42c050){if(_0x15d18d['body']['uniqueid']){delete _0x15d18d[_0xbfde('0x48')]['uniqueid'];}return db['VoiceCallReport'][_0xbfde('0x4b')]({'where':{'uniqueid':_0x15d18d[_0xbfde('0x45')]['id'],'UserId':{'$or':[null,_0x15d18d[_0xbfde('0x4c')]['id']]}}})[_0xbfde('0x21')](handleEntityNotFound(_0x42c050,null))[_0xbfde('0x21')](saveUpdates(_0x15d18d[_0xbfde('0x48')],null))[_0xbfde('0x21')](respondWithResult(_0x42c050,null))[_0xbfde('0x44')](handleError(_0x42c050,null));};
\ No newline at end of file
index 938693e..b3b1f2f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4eaa=['moment','bluebird','./voiceCallReport.attributes','exports','define','VoiceCallReport','report_call','uniqueid','lodash','util','api'];(function(_0x201aef,_0x26f3cf){var _0x5d448a=function(_0xc453f6){while(--_0xc453f6){_0x201aef['push'](_0x201aef['shift']());}};_0x5d448a(++_0x26f3cf);}(_0x4eaa,0x19f));var _0xa4ea=function(_0x7c87df,_0x5bda34){_0x7c87df=_0x7c87df-0x0;var _0x36cf5c=_0x4eaa[_0x7c87df];return _0x36cf5c;};'use strict';var _=require(_0xa4ea('0x0'));var util=require(_0xa4ea('0x1'));var logger=require('../../config/logger')(_0xa4ea('0x2'));var moment=require(_0xa4ea('0x3'));var BPromise=require(_0xa4ea('0x4'));var rp=require('request-promise');var attributes=require(_0xa4ea('0x5'));module[_0xa4ea('0x6')]=function(_0x3bee71,_0x46b78f){return _0x3bee71[_0xa4ea('0x7')](_0xa4ea('0x8'),attributes,{'tableName':_0xa4ea('0x9'),'paranoid':![],'indexes':[{'fields':[_0xa4ea('0xa')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x6722=['uniqueid','lodash','util','../../config/logger','moment','request-promise','./voiceCallReport.attributes','exports','VoiceCallReport','report_call'];(function(_0x4b055c,_0x4b870b){var _0x4b62bb=function(_0x4884c2){while(--_0x4884c2){_0x4b055c['push'](_0x4b055c['shift']());}};_0x4b62bb(++_0x4b870b);}(_0x6722,0xdd));var _0x2672=function(_0xa997b6,_0x2763cc){_0xa997b6=_0xa997b6-0x0;var _0x32bf77=_0x6722[_0xa997b6];return _0x32bf77;};'use strict';var _=require(_0x2672('0x0'));var util=require(_0x2672('0x1'));var logger=require(_0x2672('0x2'))('api');var moment=require(_0x2672('0x3'));var BPromise=require('bluebird');var rp=require(_0x2672('0x4'));var attributes=require(_0x2672('0x5'));module[_0x2672('0x6')]=function(_0x5bb94b,_0xfe3825){return _0x5bb94b['define'](_0x2672('0x7'),attributes,{'tableName':_0x2672('0x8'),'paranoid':![],'indexes':[{'fields':[_0x2672('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index 13d87ec..e166164 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3707=['result','GetVoiceCallReport','VoiceCallReport','findAll','options','where','limit','include','model','attributes','map','debug','catch','CreateVoiceCallReport','create','raw','stringify','update','body','UpdateVoiceCallReport','lodash','util','moment','randomstring','../../config/utils','rpc','../../config/environment','client','http','request','then','info','request\x20sent','error','message','VoiceCallReport,\x20%s,\x20%s'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3707,0x17c));var _0x7370=function(_0x22c414,_0x35a0ba){_0x22c414=_0x22c414-0x0;var _0xe2c74f=_0x3707[_0x22c414];return _0xe2c74f;};'use strict';var _=require(_0x7370('0x0'));var util=require(_0x7370('0x1'));var moment=require(_0x7370('0x2'));var BPromise=require('bluebird');var rs=require(_0x7370('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require(_0x7370('0x4'));var logger=require('../../config/logger')(_0x7370('0x5'));var config=require(_0x7370('0x6'));var jayson=require('jayson/promise');var client=jayson[_0x7370('0x7')][_0x7370('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x55c9e2,_0x2d1a54,_0x2f6ab7){return new BPromise(function(_0x71d110,_0x342e30){return client[_0x7370('0x9')](_0x55c9e2,_0x2f6ab7)[_0x7370('0xa')](function(_0x429f42){logger[_0x7370('0xb')]('VoiceCallReport,\x20%s,\x20%s',_0x2d1a54,_0x7370('0xc'));logger['debug']('VoiceCallReport,\x20%s,\x20%s,\x20%s',_0x2d1a54,'request\x20sent',JSON['stringify'](_0x429f42));if(_0x429f42['error']){if(_0x429f42['error']['code']===0x1f4){logger[_0x7370('0xd')]('VoiceCallReport,\x20%s,\x20%s',_0x2d1a54,_0x429f42[_0x7370('0xd')][_0x7370('0xe')]);return _0x342e30(_0x429f42[_0x7370('0xd')][_0x7370('0xe')]);}logger['error'](_0x7370('0xf'),_0x2d1a54,_0x429f42[_0x7370('0xd')][_0x7370('0xe')]);return _0x71d110(_0x429f42[_0x7370('0xd')][_0x7370('0xe')]);}else{logger[_0x7370('0xb')](_0x7370('0xf'),_0x2d1a54,_0x7370('0xc'));_0x71d110(_0x429f42[_0x7370('0x10')][_0x7370('0xe')]);}})['catch'](function(_0x96adaf){logger[_0x7370('0xd')](_0x7370('0xf'),_0x2d1a54,_0x96adaf);_0x342e30(_0x96adaf);});});}exports[_0x7370('0x11')]=function(_0xfcdea5){var _0x34d7ef=this;return new Promise(function(_0x428c85,_0x1518fc){return db[_0x7370('0x12')][_0x7370('0x13')]({'raw':_0xfcdea5['options']?_0xfcdea5[_0x7370('0x14')]['raw']===undefined?!![]:![]:!![],'where':_0xfcdea5['options']?_0xfcdea5[_0x7370('0x14')][_0x7370('0x15')]||null:null,'attributes':_0xfcdea5[_0x7370('0x14')]?_0xfcdea5[_0x7370('0x14')]['attributes']||null:null,'limit':_0xfcdea5[_0x7370('0x14')]?_0xfcdea5[_0x7370('0x14')][_0x7370('0x16')]||null:null,'include':_0xfcdea5[_0x7370('0x14')]?_0xfcdea5[_0x7370('0x14')][_0x7370('0x17')]?_['map'](_0xfcdea5[_0x7370('0x14')][_0x7370('0x17')],function(_0x480cff){return{'model':db[_0x480cff[_0x7370('0x18')]],'as':_0x480cff['as'],'attributes':_0x480cff[_0x7370('0x19')],'include':_0x480cff[_0x7370('0x17')]?_['map'](_0x480cff['include'],function(_0x1680b2){return{'model':db[_0x1680b2[_0x7370('0x18')]],'as':_0x1680b2['as'],'attributes':_0x1680b2['attributes'],'include':_0x1680b2['include']?_[_0x7370('0x1a')](_0x1680b2[_0x7370('0x17')],function(_0x4962fa){return{'model':db[_0x4962fa[_0x7370('0x18')]],'as':_0x4962fa['as'],'attributes':_0x4962fa['attributes']};}):[]};}):[]};}):[]:[]})['then'](function(_0x3304a0){logger[_0x7370('0xb')]('GetVoiceCallReport',_0xfcdea5);logger[_0x7370('0x1b')](_0x7370('0x11'),_0xfcdea5,JSON['stringify'](_0x3304a0));_0x428c85(_0x3304a0);})[_0x7370('0x1c')](function(_0x4478f9){logger[_0x7370('0xd')]('GetVoiceCallReport',_0x4478f9['message'],_0xfcdea5);_0x1518fc(_0x34d7ef[_0x7370('0xd')](0x1f4,_0x4478f9[_0x7370('0xe')]));});});};exports[_0x7370('0x1d')]=function(_0x4af7ff){var _0x4e7227=this;return new Promise(function(_0x190fc2,_0x1d7897){return db['VoiceCallReport'][_0x7370('0x1e')](_0x4af7ff['body'],{'raw':_0x4af7ff[_0x7370('0x14')]?_0x4af7ff[_0x7370('0x14')][_0x7370('0x1f')]===undefined?!![]:![]:!![]})[_0x7370('0xa')](function(_0x85d93b){logger[_0x7370('0xb')](_0x7370('0x1d'),_0x4af7ff);logger[_0x7370('0x1b')]('CreateVoiceCallReport',_0x4af7ff,JSON[_0x7370('0x20')](_0x85d93b));_0x190fc2(_0x85d93b);})[_0x7370('0x1c')](function(_0x541d59){logger[_0x7370('0xd')](_0x7370('0x1d'),_0x541d59[_0x7370('0xe')],_0x4af7ff);_0x1d7897(_0x4e7227[_0x7370('0xd')](0x1f4,_0x541d59[_0x7370('0xe')]));});});};exports['UpdateVoiceCallReport']=function(_0x436df5){var _0x2ec550=this;return new Promise(function(_0x5464c0,_0xff0d42){return db[_0x7370('0x12')][_0x7370('0x21')](_0x436df5[_0x7370('0x22')],{'raw':_0x436df5['options']?_0x436df5['options'][_0x7370('0x1f')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x436df5[_0x7370('0x14')]?_0x436df5[_0x7370('0x14')][_0x7370('0x15')]||null:null,'attributes':_0x436df5['options']?_0x436df5['options'][_0x7370('0x19')]||null:null,'limit':_0x436df5['options']?_0x436df5[_0x7370('0x14')][_0x7370('0x16')]||null:null})['then'](function(_0x5d1c8b){logger[_0x7370('0xb')](_0x7370('0x23'),_0x436df5);logger['debug'](_0x7370('0x23'),_0x436df5,JSON[_0x7370('0x20')](_0x5d1c8b));_0x5464c0(_0x5d1c8b);})[_0x7370('0x1c')](function(_0x950d57){logger['error']('UpdateVoiceCallReport',_0x950d57['message'],_0x436df5);_0xff0d42(_0x2ec550['error'](0x1f4,_0x950d57['message']));});});};
\ No newline at end of file
+var _0x422e=['update','lodash','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request','then','info','VoiceCallReport,\x20%s,\x20%s','request\x20sent','VoiceCallReport,\x20%s,\x20%s,\x20%s','stringify','error','message','result','findAll','options','raw','where','attributes','limit','include','model','map','GetVoiceCallReport','debug','VoiceCallReport','body','CreateVoiceCallReport','catch','UpdateVoiceCallReport'];(function(_0x73f3af,_0x5587b0){var _0x2d1872=function(_0xc3ca0d){while(--_0xc3ca0d){_0x73f3af['push'](_0x73f3af['shift']());}};_0x2d1872(++_0x5587b0);}(_0x422e,0xbf));var _0xe422=function(_0x396fc3,_0x2a6366){_0x396fc3=_0x396fc3-0x0;var _0x27f765=_0x422e[_0x396fc3];return _0x27f765;};'use strict';var _=require(_0xe422('0x0'));var util=require('util');var moment=require(_0xe422('0x1'));var BPromise=require(_0xe422('0x2'));var rs=require(_0xe422('0x3'));var fs=require('fs');var Redis=require(_0xe422('0x4'));var db=require(_0xe422('0x5'))['db'];var utils=require(_0xe422('0x6'));var logger=require(_0xe422('0x7'))('rpc');var config=require(_0xe422('0x8'));var jayson=require(_0xe422('0x9'));var client=jayson['client'][_0xe422('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x35e4bf,_0x1df8bd,_0x6a75d4){return new BPromise(function(_0xf62ee5,_0x143626){return client[_0xe422('0xb')](_0x35e4bf,_0x6a75d4)[_0xe422('0xc')](function(_0x3a239d){logger[_0xe422('0xd')](_0xe422('0xe'),_0x1df8bd,_0xe422('0xf'));logger['debug'](_0xe422('0x10'),_0x1df8bd,_0xe422('0xf'),JSON[_0xe422('0x11')](_0x3a239d));if(_0x3a239d[_0xe422('0x12')]){if(_0x3a239d['error']['code']===0x1f4){logger[_0xe422('0x12')]('VoiceCallReport,\x20%s,\x20%s',_0x1df8bd,_0x3a239d[_0xe422('0x12')][_0xe422('0x13')]);return _0x143626(_0x3a239d[_0xe422('0x12')][_0xe422('0x13')]);}logger[_0xe422('0x12')]('VoiceCallReport,\x20%s,\x20%s',_0x1df8bd,_0x3a239d['error']['message']);return _0xf62ee5(_0x3a239d[_0xe422('0x12')]['message']);}else{logger['info']('VoiceCallReport,\x20%s,\x20%s',_0x1df8bd,'request\x20sent');_0xf62ee5(_0x3a239d[_0xe422('0x14')][_0xe422('0x13')]);}})['catch'](function(_0x533842){logger[_0xe422('0x12')](_0xe422('0xe'),_0x1df8bd,_0x533842);_0x143626(_0x533842);});});}exports['GetVoiceCallReport']=function(_0x23dab0){var _0x1d1ff0=this;return new Promise(function(_0x50733e,_0x555a0e){return db['VoiceCallReport'][_0xe422('0x15')]({'raw':_0x23dab0[_0xe422('0x16')]?_0x23dab0[_0xe422('0x16')][_0xe422('0x17')]===undefined?!![]:![]:!![],'where':_0x23dab0[_0xe422('0x16')]?_0x23dab0[_0xe422('0x16')][_0xe422('0x18')]||null:null,'attributes':_0x23dab0[_0xe422('0x16')]?_0x23dab0[_0xe422('0x16')][_0xe422('0x19')]||null:null,'limit':_0x23dab0[_0xe422('0x16')]?_0x23dab0[_0xe422('0x16')][_0xe422('0x1a')]||null:null,'include':_0x23dab0['options']?_0x23dab0[_0xe422('0x16')][_0xe422('0x1b')]?_['map'](_0x23dab0[_0xe422('0x16')][_0xe422('0x1b')],function(_0x7caa04){return{'model':db[_0x7caa04['model']],'as':_0x7caa04['as'],'attributes':_0x7caa04[_0xe422('0x19')],'include':_0x7caa04['include']?_['map'](_0x7caa04['include'],function(_0x156a8c){return{'model':db[_0x156a8c[_0xe422('0x1c')]],'as':_0x156a8c['as'],'attributes':_0x156a8c[_0xe422('0x19')],'include':_0x156a8c[_0xe422('0x1b')]?_[_0xe422('0x1d')](_0x156a8c[_0xe422('0x1b')],function(_0x5799cd){return{'model':db[_0x5799cd[_0xe422('0x1c')]],'as':_0x5799cd['as'],'attributes':_0x5799cd[_0xe422('0x19')]};}):[]};}):[]};}):[]:[]})['then'](function(_0x375625){logger[_0xe422('0xd')](_0xe422('0x1e'),_0x23dab0);logger[_0xe422('0x1f')](_0xe422('0x1e'),_0x23dab0,JSON['stringify'](_0x375625));_0x50733e(_0x375625);})['catch'](function(_0x2b148e){logger['error'](_0xe422('0x1e'),_0x2b148e[_0xe422('0x13')],_0x23dab0);_0x555a0e(_0x1d1ff0[_0xe422('0x12')](0x1f4,_0x2b148e[_0xe422('0x13')]));});});};exports['CreateVoiceCallReport']=function(_0x4ce61e){var _0x4ce711=this;return new Promise(function(_0x5b9e1,_0x5127a0){return db[_0xe422('0x20')]['create'](_0x4ce61e[_0xe422('0x21')],{'raw':_0x4ce61e[_0xe422('0x16')]?_0x4ce61e[_0xe422('0x16')]['raw']===undefined?!![]:![]:!![]})['then'](function(_0x1e33e8){logger[_0xe422('0xd')](_0xe422('0x22'),_0x4ce61e);logger[_0xe422('0x1f')]('CreateVoiceCallReport',_0x4ce61e,JSON[_0xe422('0x11')](_0x1e33e8));_0x5b9e1(_0x1e33e8);})[_0xe422('0x23')](function(_0x4e13d6){logger[_0xe422('0x12')]('CreateVoiceCallReport',_0x4e13d6[_0xe422('0x13')],_0x4ce61e);_0x5127a0(_0x4ce711[_0xe422('0x12')](0x1f4,_0x4e13d6[_0xe422('0x13')]));});});};exports[_0xe422('0x24')]=function(_0x785b9){var _0x226d49=this;return new Promise(function(_0x14418b,_0x171fe7){return db[_0xe422('0x20')][_0xe422('0x25')](_0x785b9['body'],{'raw':_0x785b9['options']?_0x785b9['options'][_0xe422('0x17')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x785b9['options']?_0x785b9[_0xe422('0x16')]['where']||null:null,'attributes':_0x785b9[_0xe422('0x16')]?_0x785b9[_0xe422('0x16')][_0xe422('0x19')]||null:null,'limit':_0x785b9[_0xe422('0x16')]?_0x785b9[_0xe422('0x16')][_0xe422('0x1a')]||null:null})[_0xe422('0xc')](function(_0x445c3d){logger[_0xe422('0xd')]('UpdateVoiceCallReport',_0x785b9);logger[_0xe422('0x1f')](_0xe422('0x24'),_0x785b9,JSON[_0xe422('0x11')](_0x445c3d));_0x14418b(_0x445c3d);})[_0xe422('0x23')](function(_0x30ea71){logger[_0xe422('0x12')](_0xe422('0x24'),_0x30ea71[_0xe422('0x13')],_0x785b9);_0x171fe7(_0x226d49[_0xe422('0x12')](0x1f4,_0x30ea71[_0xe422('0x13')]));});});};
\ No newline at end of file
index 6ccad6e..ed0c810 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6695=['../../config/environment','./voiceChanSpy.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service'];(function(_0x3e2b8b,_0x5467e8){var _0x389b62=function(_0x293328){while(--_0x293328){_0x3e2b8b['push'](_0x3e2b8b['shift']());}};_0x389b62(++_0x5467e8);}(_0x6695,0xae));var _0x5669=function(_0x2fd5db,_0x7cb751){_0x2fd5db=_0x2fd5db-0x0;var _0x5bba07=_0x6695[_0x2fd5db];return _0x5bba07;};'use strict';var multer=require(_0x5669('0x0'));var util=require('util');var path=require('path');var timeout=require(_0x5669('0x1'));var express=require(_0x5669('0x2'));var router=express[_0x5669('0x3')]();var auth=require(_0x5669('0x4'));var interaction=require(_0x5669('0x5'));var config=require(_0x5669('0x6'));var controller=require(_0x5669('0x7'));router[_0x5669('0x8')]('/',auth[_0x5669('0x9')](),controller[_0x5669('0xa')]);router['get'](_0x5669('0xb'),auth[_0x5669('0x9')](),controller[_0x5669('0xc')]);router[_0x5669('0xd')]('/',auth['isAuthenticated'](),controller[_0x5669('0xe')]);router[_0x5669('0xf')]('/:id',auth[_0x5669('0x9')](),controller[_0x5669('0x10')]);router[_0x5669('0x11')](_0x5669('0xb'),auth[_0x5669('0x9')](),controller[_0x5669('0x12')]);module[_0x5669('0x13')]=router;
\ No newline at end of file
+var _0xc98f=['exports','multer','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceChanSpy.controller','isAuthenticated','index','get','show','post','create','put','update','delete','/:id','destroy'];(function(_0x44deb5,_0x24a468){var _0x4c6038=function(_0x50a442){while(--_0x50a442){_0x44deb5['push'](_0x44deb5['shift']());}};_0x4c6038(++_0x24a468);}(_0xc98f,0x1a5));var _0xfc98=function(_0x257650,_0x368882){_0x257650=_0x257650-0x0;var _0x17bb95=_0xc98f[_0x257650];return _0x17bb95;};'use strict';var multer=require(_0xfc98('0x0'));var util=require('util');var path=require(_0xfc98('0x1'));var timeout=require(_0xfc98('0x2'));var express=require(_0xfc98('0x3'));var router=express[_0xfc98('0x4')]();var auth=require(_0xfc98('0x5'));var interaction=require(_0xfc98('0x6'));var config=require(_0xfc98('0x7'));var controller=require(_0xfc98('0x8'));router['get']('/',auth[_0xfc98('0x9')](),controller[_0xfc98('0xa')]);router[_0xfc98('0xb')]('/:id',auth['isAuthenticated'](),controller[_0xfc98('0xc')]);router[_0xfc98('0xd')]('/',auth[_0xfc98('0x9')](),controller[_0xfc98('0xe')]);router[_0xfc98('0xf')]('/:id',auth[_0xfc98('0x9')](),controller[_0xfc98('0x10')]);router[_0xfc98('0x11')](_0xfc98('0x12'),auth[_0xfc98('0x9')](),controller[_0xfc98('0x13')]);module[_0xfc98('0x14')]=router;
\ No newline at end of file
index f9a1f88..6aa8558 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa5c6=['split','BOOLEAN','sequelize','STRING','name','setDataValue','getDataValue','options'];(function(_0x3ae2b2,_0x2d936f){var _0x1dbf00=function(_0x4072e9){while(--_0x4072e9){_0x3ae2b2['push'](_0x3ae2b2['shift']());}};_0x1dbf00(++_0x2d936f);}(_0xa5c6,0x72));var _0x6a5c=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0xa5c6[_0x321bb2];return _0x9c12ed;};'use strict';var Sequelize=require(_0x6a5c('0x0'));module['exports']={'name':{'type':Sequelize['STRING']},'prefix':{'type':Sequelize[_0x6a5c('0x1')],'unique':_0x6a5c('0x2'),'allowNull':![]},'options':{'type':Sequelize[_0x6a5c('0x1')],'set':function(_0x557b41){this[_0x6a5c('0x3')]('options',_0x557b41?_0x557b41['join'](''):[]);},'get':function(){return this[_0x6a5c('0x4')](_0x6a5c('0x5'))?this[_0x6a5c('0x4')]('options')[_0x6a5c('0x6')](''):[];}},'auth':{'type':Sequelize[_0x6a5c('0x7')],'defaultValue':![]},'password':{'type':Sequelize[_0x6a5c('0x1')]},'record':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'recordingFormat':{'type':Sequelize[_0x6a5c('0x1')]},'description':{'type':Sequelize[_0x6a5c('0x1')]}};
\ No newline at end of file
+var _0xc262=['name','options','join','getDataValue','split','BOOLEAN','exports','STRING'];(function(_0x7e2ae3,_0x54040f){var _0x16e459=function(_0x3297f0){while(--_0x3297f0){_0x7e2ae3['push'](_0x7e2ae3['shift']());}};_0x16e459(++_0x54040f);}(_0xc262,0x16e));var _0x2c26=function(_0x49e489,_0x198e41){_0x49e489=_0x49e489-0x0;var _0xcc7a16=_0xc262[_0x49e489];return _0xcc7a16;};'use strict';var Sequelize=require('sequelize');module[_0x2c26('0x0')]={'name':{'type':Sequelize[_0x2c26('0x1')]},'prefix':{'type':Sequelize[_0x2c26('0x1')],'unique':_0x2c26('0x2'),'allowNull':![]},'options':{'type':Sequelize[_0x2c26('0x1')],'set':function(_0x13ac73){this['setDataValue'](_0x2c26('0x3'),_0x13ac73?_0x13ac73[_0x2c26('0x4')](''):[]);},'get':function(){return this['getDataValue']('options')?this[_0x2c26('0x5')](_0x2c26('0x3'))[_0x2c26('0x6')](''):[];}},'auth':{'type':Sequelize[_0x2c26('0x7')],'defaultValue':![]},'password':{'type':Sequelize['STRING']},'record':{'type':Sequelize[_0x2c26('0x7')],'defaultValue':![]},'recordingFormat':{'type':Sequelize[_0x2c26('0x1')]},'description':{'type':Sequelize[_0x2c26('0x1')]}};
\ No newline at end of file
index ce5b0bd..901b2d4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0a20=['merge','map','key','field','options','includeAll','findAll','rows','params','include','find','catch','body','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','error','html-pdf','eml-format','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','../../components/auth/service','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','status','json','count','offset','limit','set','apply','reject','save','update','then','destroy','ChanSpies','stack','name','send','index','VoiceChanSpy','rawAttributes','keys','query','filters','intersection','attributes','fields','model','hasOwnProperty','nolimit','sort','where','pick','filter'];(function(_0x28c13e,_0x295841){var _0x569776=function(_0x4cc689){while(--_0x4cc689){_0x28c13e['push'](_0x28c13e['shift']());}};_0x569776(++_0x295841);}(_0x0a20,0x65));var _0x00a2=function(_0x237ab2,_0x345540){_0x237ab2=_0x237ab2-0x0;var _0x52c2f4=_0x0a20[_0x237ab2];return _0x52c2f4;};'use strict';var pdf=require(_0x00a2('0x0'));var emlformat=require(_0x00a2('0x1'));var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x00a2('0x2'));var rp=require(_0x00a2('0x3'));var moment=require(_0x00a2('0x4'));var BPromise=require(_0x00a2('0x5'));var Mustache=require(_0x00a2('0x6'));var util=require(_0x00a2('0x7'));var path=require(_0x00a2('0x8'));var sox=require(_0x00a2('0x9'));var csv=require(_0x00a2('0xa'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x00a2('0xb'));var squel=require(_0x00a2('0xc'));var crypto=require(_0x00a2('0xd'));var jsforce=require(_0x00a2('0xe'));var deskjs=require(_0x00a2('0xf'));var toCsv=require('to-csv');var querystring=require(_0x00a2('0x10'));var Papa=require('papaparse');var authService=require(_0x00a2('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0x00a2('0x12'));var logger=require(_0x00a2('0x13'))('api');var utils=require(_0x00a2('0x14'));var config=require(_0x00a2('0x15'));var db=require(_0x00a2('0x16'))['db'];function respondWithStatusCode(_0xffa1e3,_0x5cee8d){_0x5cee8d=_0x5cee8d||0xcc;return function(_0x26a2b8){if(_0x26a2b8){return _0xffa1e3[_0x00a2('0x17')](_0x5cee8d);}return _0xffa1e3['status'](_0x5cee8d)[_0x00a2('0x18')]();};}function respondWithResult(_0x4167b1,_0x34f534){_0x34f534=_0x34f534||0xc8;return function(_0x164e04){if(_0x164e04){return _0x4167b1[_0x00a2('0x19')](_0x34f534)[_0x00a2('0x1a')](_0x164e04);}};}function respondWithFilteredResult(_0x31a8c8,_0x507f9a){return function(_0x3c5c19){if(_0x3c5c19){var _0x52e0b4=_0x3c5c19[_0x00a2('0x1b')],_0x2ca3b7=_0x507f9a[_0x00a2('0x1c')],_0x4903b8=_0x507f9a[_0x00a2('0x1c')]+_0x507f9a[_0x00a2('0x1d')],_0x511952;if(_0x4903b8>=_0x52e0b4){_0x4903b8=_0x52e0b4;_0x511952=0xc8;}else{_0x511952=0xce;}_0x31a8c8[_0x00a2('0x19')](_0x511952);return _0x31a8c8[_0x00a2('0x1e')]('Content-Range',_0x2ca3b7+'-'+_0x4903b8+'/'+_0x52e0b4)['json'](_0x3c5c19);}return null;};}function patchUpdates(_0x462c27){return function(_0x36cbd9){try{jsonpatch[_0x00a2('0x1f')](_0x36cbd9,_0x462c27,!![]);}catch(_0x21a726){return BPromise[_0x00a2('0x20')](_0x21a726);}return _0x36cbd9[_0x00a2('0x21')]();};}function saveUpdates(_0x24b740,_0xf3dcbf){return function(_0x734d6){if(_0x734d6){return _0x734d6[_0x00a2('0x22')](_0x24b740)[_0x00a2('0x23')](function(_0xc75bba){return _0xc75bba;});}return null;};}function removeEntity(_0x553252,_0x32b155){return function(_0x492935){if(_0x492935){return _0x492935[_0x00a2('0x24')]()[_0x00a2('0x23')](function(){var _0x235071=_0x492935['get']({'plain':!![]});var _0x58db61=_0x00a2('0x25');return db['UserProfileResource'][_0x00a2('0x24')]({'where':{'type':_0x58db61,'resourceId':_0x235071['id']}})[_0x00a2('0x23')](function(){return _0x492935;});})['then'](function(){_0x553252[_0x00a2('0x19')](0xcc)[_0x00a2('0x18')]();});}};}function handleEntityNotFound(_0x18fe7f,_0x34623f){return function(_0x164069){if(!_0x164069){_0x18fe7f[_0x00a2('0x17')](0x194);}return _0x164069;};}function handleError(_0x128cb6,_0x989bea){_0x989bea=_0x989bea||0x1f4;return function(_0x140a5d){logger['error'](_0x140a5d[_0x00a2('0x26')]);if(_0x140a5d[_0x00a2('0x27')]){delete _0x140a5d[_0x00a2('0x27')];}_0x128cb6[_0x00a2('0x19')](_0x989bea)[_0x00a2('0x28')](_0x140a5d);};}exports[_0x00a2('0x29')]=function(_0x19439f,_0x2e4655){var _0x1bfcb0={},_0x23ac51={},_0x974673={'count':0x0,'rows':[]};var _0x46b74b=db[_0x00a2('0x2a')][_0x00a2('0x2b')];_0x23ac51['model']=_[_0x00a2('0x2c')](_0x46b74b);_0x23ac51[_0x00a2('0x2d')]=_[_0x00a2('0x2c')](_0x19439f['query']);_0x23ac51[_0x00a2('0x2e')]=_[_0x00a2('0x2f')](_0x23ac51['model'],_0x23ac51['query']);_0x1bfcb0[_0x00a2('0x30')]=_[_0x00a2('0x2f')](_0x23ac51['model'],qs[_0x00a2('0x31')](_0x19439f[_0x00a2('0x2d')]['fields']));_0x1bfcb0[_0x00a2('0x30')]=_0x1bfcb0[_0x00a2('0x30')]['length']?_0x1bfcb0[_0x00a2('0x30')]:_0x23ac51[_0x00a2('0x32')];if(!_0x19439f[_0x00a2('0x2d')][_0x00a2('0x33')](_0x00a2('0x34'))){_0x1bfcb0[_0x00a2('0x1d')]=qs['limit'](_0x19439f[_0x00a2('0x2d')][_0x00a2('0x1d')]);_0x1bfcb0[_0x00a2('0x1c')]=qs[_0x00a2('0x1c')](_0x19439f['query'][_0x00a2('0x1c')]);}_0x1bfcb0['order']=qs[_0x00a2('0x35')](_0x19439f[_0x00a2('0x2d')][_0x00a2('0x35')]);_0x1bfcb0[_0x00a2('0x36')]=qs['filters'](_[_0x00a2('0x37')](_0x19439f[_0x00a2('0x2d')],_0x23ac51[_0x00a2('0x2e')]));if(_0x19439f['query'][_0x00a2('0x38')]){_0x1bfcb0['where']=_[_0x00a2('0x39')](_0x1bfcb0[_0x00a2('0x36')],{'$or':_[_0x00a2('0x3a')](_0x46b74b,function(_0x333946){if(_0x333946['type'][_0x00a2('0x3b')]!=='VIRTUAL'){var _0x417a31={};_0x417a31[_0x333946[_0x00a2('0x3c')]]={'$like':'%'+_0x19439f[_0x00a2('0x2d')][_0x00a2('0x38')]+'%'};return _0x417a31;}})});}_0x1bfcb0=_[_0x00a2('0x39')]({},_0x1bfcb0,_0x19439f[_0x00a2('0x3d')]);var _0x4cf84b={'where':_0x1bfcb0['where']};return db[_0x00a2('0x2a')][_0x00a2('0x1b')](_0x4cf84b)[_0x00a2('0x23')](function(_0x242dbd){_0x974673[_0x00a2('0x1b')]=_0x242dbd;if(_0x19439f[_0x00a2('0x2d')][_0x00a2('0x3e')]){_0x1bfcb0['include']=[{'all':!![]}];}return db[_0x00a2('0x2a')][_0x00a2('0x3f')](_0x1bfcb0);})[_0x00a2('0x23')](function(_0x14b04f){_0x974673[_0x00a2('0x40')]=_0x14b04f;return _0x974673;})['then'](respondWithFilteredResult(_0x2e4655,_0x1bfcb0))['catch'](handleError(_0x2e4655,null));};exports['show']=function(_0xed6f18,_0xd10bf){var _0x3664f6={'raw':![],'where':{'id':_0xed6f18[_0x00a2('0x41')]['id']}},_0x2ad7f6={};_0x2ad7f6[_0x00a2('0x32')]=_['keys'](db['VoiceChanSpy'][_0x00a2('0x2b')]);_0x2ad7f6[_0x00a2('0x2d')]=_[_0x00a2('0x2c')](_0xed6f18[_0x00a2('0x2d')]);_0x2ad7f6[_0x00a2('0x2e')]=_[_0x00a2('0x2f')](_0x2ad7f6[_0x00a2('0x32')],_0x2ad7f6['query']);_0x3664f6[_0x00a2('0x30')]=_[_0x00a2('0x2f')](_0x2ad7f6[_0x00a2('0x32')],qs[_0x00a2('0x31')](_0xed6f18[_0x00a2('0x2d')]['fields']));_0x3664f6[_0x00a2('0x30')]=_0x3664f6['attributes']['length']?_0x3664f6[_0x00a2('0x30')]:_0x2ad7f6['model'];if(_0xed6f18['query'][_0x00a2('0x3e')]){_0x3664f6[_0x00a2('0x42')]=[{'all':!![]}];}_0x3664f6=_[_0x00a2('0x39')]({},_0x3664f6,_0xed6f18[_0x00a2('0x3d')]);return db[_0x00a2('0x2a')][_0x00a2('0x43')](_0x3664f6)[_0x00a2('0x23')](handleEntityNotFound(_0xd10bf,null))['then'](respondWithResult(_0xd10bf,null))[_0x00a2('0x44')](handleError(_0xd10bf,null));};exports['create']=function(_0x39c6bd,_0x3f269b){return db[_0x00a2('0x2a')]['create'](_0x39c6bd[_0x00a2('0x45')],{})[_0x00a2('0x23')](function(_0x1f6cc6){var _0x55d4ab=_0x39c6bd[_0x00a2('0x46')][_0x00a2('0x47')]({'plain':!![]});if(!_0x55d4ab)throw new Error(_0x00a2('0x48'));if(_0x55d4ab[_0x00a2('0x49')]===_0x00a2('0x46')){var _0x15b5d7=_0x1f6cc6[_0x00a2('0x47')]({'plain':!![]});var _0x229c61=_0x00a2('0x25');return db[_0x00a2('0x4a')][_0x00a2('0x43')]({'where':{'name':_0x229c61,'userProfileId':_0x55d4ab[_0x00a2('0x4b')]},'raw':!![]})[_0x00a2('0x23')](function(_0x9bdf10){if(_0x9bdf10&&_0x9bdf10[_0x00a2('0x4c')]===0x0){return db[_0x00a2('0x4d')]['create']({'name':_0x15b5d7[_0x00a2('0x27')],'resourceId':_0x15b5d7['id'],'type':_0x9bdf10['name'],'sectionId':_0x9bdf10['id']},{})[_0x00a2('0x23')](function(){return _0x1f6cc6;});}else{return _0x1f6cc6;}})[_0x00a2('0x44')](function(_0x2aad67){logger[_0x00a2('0x4e')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x2aad67);throw _0x2aad67;});}return _0x1f6cc6;})[_0x00a2('0x23')](respondWithResult(_0x3f269b,0xc9))[_0x00a2('0x44')](handleError(_0x3f269b,null));};exports[_0x00a2('0x22')]=function(_0x336752,_0x4c5a5d){if(_0x336752[_0x00a2('0x45')]['id']){delete _0x336752['body']['id'];}return db[_0x00a2('0x2a')]['find']({'where':{'id':_0x336752['params']['id']}})[_0x00a2('0x23')](handleEntityNotFound(_0x4c5a5d,null))[_0x00a2('0x23')](saveUpdates(_0x336752[_0x00a2('0x45')],null))[_0x00a2('0x23')](respondWithResult(_0x4c5a5d,null))[_0x00a2('0x44')](handleError(_0x4c5a5d,null));};exports[_0x00a2('0x24')]=function(_0xb1e211,_0x4d772e){return db[_0x00a2('0x2a')][_0x00a2('0x43')]({'where':{'id':_0xb1e211['params']['id']}})[_0x00a2('0x23')](handleEntityNotFound(_0x4d772e,null))[_0x00a2('0x23')](removeEntity(_0x4d772e,null))[_0x00a2('0x44')](handleError(_0x4d772e,null));};
\ No newline at end of file
+var _0xf254=['field','options','includeAll','include','findAll','catch','params','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs','squel','crypto','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/environment','status','end','count','offset','limit','set','Content-Range','apply','reject','save','destroy','then','get','UserProfileResource','sendStatus','stack','name','send','index','VoiceChanSpy','rawAttributes','keys','query','filters','intersection','model','attributes','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','type','key'];(function(_0x1d2bc8,_0x2860bc){var _0x1857e1=function(_0x3a3073){while(--_0x3a3073){_0x1d2bc8['push'](_0x1d2bc8['shift']());}};_0x1857e1(++_0x2860bc);}(_0xf254,0x1e6));var _0x4f25=function(_0x3399bb,_0x5e7c53){_0x3399bb=_0x3399bb-0x0;var _0x1afd51=_0xf254[_0x3399bb];return _0x1afd51;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x4f25('0x0'));var rimraf=require(_0x4f25('0x1'));var zipdir=require(_0x4f25('0x2'));var jsonpatch=require(_0x4f25('0x3'));var rp=require(_0x4f25('0x4'));var moment=require('moment');var BPromise=require(_0x4f25('0x5'));var Mustache=require(_0x4f25('0x6'));var util=require(_0x4f25('0x7'));var path=require(_0x4f25('0x8'));var sox=require(_0x4f25('0x9'));var csv=require(_0x4f25('0xa'));var ejs=require(_0x4f25('0xb'));var fs=require('fs');var _=require('lodash');var squel=require(_0x4f25('0xc'));var crypto=require(_0x4f25('0xd'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x4f25('0xa'));var querystring=require('querystring');var Papa=require(_0x4f25('0xe'));var authService=require(_0x4f25('0xf'));var hardwareService=require(_0x4f25('0x10'));var Redis=require('ioredis');var qs=require(_0x4f25('0x11'));var logger=require(_0x4f25('0x12'))(_0x4f25('0x13'));var utils=require('../../config/utils');var config=require(_0x4f25('0x14'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x23c2c3,_0x4e05b7){_0x4e05b7=_0x4e05b7||0xcc;return function(_0x339f8b){if(_0x339f8b){return _0x23c2c3['sendStatus'](_0x4e05b7);}return _0x23c2c3[_0x4f25('0x15')](_0x4e05b7)[_0x4f25('0x16')]();};}function respondWithResult(_0x2d38df,_0x4b2ede){_0x4b2ede=_0x4b2ede||0xc8;return function(_0x5ed904){if(_0x5ed904){return _0x2d38df[_0x4f25('0x15')](_0x4b2ede)['json'](_0x5ed904);}};}function respondWithFilteredResult(_0x2030eb,_0x61c530){return function(_0x389691){if(_0x389691){var _0x3ef410=_0x389691[_0x4f25('0x17')],_0x2a17ee=_0x61c530[_0x4f25('0x18')],_0x512979=_0x61c530[_0x4f25('0x18')]+_0x61c530[_0x4f25('0x19')],_0x392602;if(_0x512979>=_0x3ef410){_0x512979=_0x3ef410;_0x392602=0xc8;}else{_0x392602=0xce;}_0x2030eb[_0x4f25('0x15')](_0x392602);return _0x2030eb[_0x4f25('0x1a')](_0x4f25('0x1b'),_0x2a17ee+'-'+_0x512979+'/'+_0x3ef410)['json'](_0x389691);}return null;};}function patchUpdates(_0x2ccebd){return function(_0x2c65b8){try{jsonpatch[_0x4f25('0x1c')](_0x2c65b8,_0x2ccebd,!![]);}catch(_0x12d053){return BPromise[_0x4f25('0x1d')](_0x12d053);}return _0x2c65b8[_0x4f25('0x1e')]();};}function saveUpdates(_0x33d284,_0x4e648e){return function(_0x2e9bcf){if(_0x2e9bcf){return _0x2e9bcf['update'](_0x33d284)['then'](function(_0x36abbb){return _0x36abbb;});}return null;};}function removeEntity(_0x448599,_0xaec785){return function(_0x90954a){if(_0x90954a){return _0x90954a[_0x4f25('0x1f')]()[_0x4f25('0x20')](function(){var _0x83a2a2=_0x90954a[_0x4f25('0x21')]({'plain':!![]});var _0x1378ff='ChanSpies';return db[_0x4f25('0x22')]['destroy']({'where':{'type':_0x1378ff,'resourceId':_0x83a2a2['id']}})['then'](function(){return _0x90954a;});})[_0x4f25('0x20')](function(){_0x448599[_0x4f25('0x15')](0xcc)['end']();});}};}function handleEntityNotFound(_0xc2dcb,_0x52c444){return function(_0x2e7aff){if(!_0x2e7aff){_0xc2dcb[_0x4f25('0x23')](0x194);}return _0x2e7aff;};}function handleError(_0x24c281,_0x35fb2b){_0x35fb2b=_0x35fb2b||0x1f4;return function(_0x4d4fd7){logger['error'](_0x4d4fd7[_0x4f25('0x24')]);if(_0x4d4fd7[_0x4f25('0x25')]){delete _0x4d4fd7['name'];}_0x24c281[_0x4f25('0x15')](_0x35fb2b)[_0x4f25('0x26')](_0x4d4fd7);};}exports[_0x4f25('0x27')]=function(_0x192db8,_0xb996cb){var _0x59c1e1={},_0x518ec0={},_0x10eea8={'count':0x0,'rows':[]};var _0x370bca=db[_0x4f25('0x28')][_0x4f25('0x29')];_0x518ec0['model']=_[_0x4f25('0x2a')](_0x370bca);_0x518ec0[_0x4f25('0x2b')]=_['keys'](_0x192db8['query']);_0x518ec0[_0x4f25('0x2c')]=_[_0x4f25('0x2d')](_0x518ec0[_0x4f25('0x2e')],_0x518ec0[_0x4f25('0x2b')]);_0x59c1e1[_0x4f25('0x2f')]=_[_0x4f25('0x2d')](_0x518ec0[_0x4f25('0x2e')],qs['fields'](_0x192db8[_0x4f25('0x2b')][_0x4f25('0x30')]));_0x59c1e1[_0x4f25('0x2f')]=_0x59c1e1[_0x4f25('0x2f')][_0x4f25('0x31')]?_0x59c1e1[_0x4f25('0x2f')]:_0x518ec0[_0x4f25('0x2e')];if(!_0x192db8[_0x4f25('0x2b')][_0x4f25('0x32')](_0x4f25('0x33'))){_0x59c1e1[_0x4f25('0x19')]=qs[_0x4f25('0x19')](_0x192db8['query'][_0x4f25('0x19')]);_0x59c1e1['offset']=qs[_0x4f25('0x18')](_0x192db8[_0x4f25('0x2b')]['offset']);}_0x59c1e1[_0x4f25('0x34')]=qs[_0x4f25('0x35')](_0x192db8[_0x4f25('0x2b')]['sort']);_0x59c1e1[_0x4f25('0x36')]=qs[_0x4f25('0x2c')](_[_0x4f25('0x37')](_0x192db8['query'],_0x518ec0['filters']));if(_0x192db8['query'][_0x4f25('0x38')]){_0x59c1e1[_0x4f25('0x36')]=_[_0x4f25('0x39')](_0x59c1e1[_0x4f25('0x36')],{'$or':_['map'](_0x370bca,function(_0x23cb3a){if(_0x23cb3a[_0x4f25('0x3a')][_0x4f25('0x3b')]!=='VIRTUAL'){var _0x5501f3={};_0x5501f3[_0x23cb3a[_0x4f25('0x3c')]]={'$like':'%'+_0x192db8['query'][_0x4f25('0x38')]+'%'};return _0x5501f3;}})});}_0x59c1e1=_[_0x4f25('0x39')]({},_0x59c1e1,_0x192db8[_0x4f25('0x3d')]);var _0x231938={'where':_0x59c1e1[_0x4f25('0x36')]};return db[_0x4f25('0x28')][_0x4f25('0x17')](_0x231938)[_0x4f25('0x20')](function(_0x382eb4){_0x10eea8[_0x4f25('0x17')]=_0x382eb4;if(_0x192db8['query'][_0x4f25('0x3e')]){_0x59c1e1[_0x4f25('0x3f')]=[{'all':!![]}];}return db[_0x4f25('0x28')][_0x4f25('0x40')](_0x59c1e1);})[_0x4f25('0x20')](function(_0x39d056){_0x10eea8['rows']=_0x39d056;return _0x10eea8;})['then'](respondWithFilteredResult(_0xb996cb,_0x59c1e1))[_0x4f25('0x41')](handleError(_0xb996cb,null));};exports['show']=function(_0x306030,_0xeea900){var _0x4d7a66={'raw':![],'where':{'id':_0x306030[_0x4f25('0x42')]['id']}},_0x56f4ff={};_0x56f4ff[_0x4f25('0x2e')]=_['keys'](db['VoiceChanSpy'][_0x4f25('0x29')]);_0x56f4ff[_0x4f25('0x2b')]=_['keys'](_0x306030[_0x4f25('0x2b')]);_0x56f4ff['filters']=_[_0x4f25('0x2d')](_0x56f4ff[_0x4f25('0x2e')],_0x56f4ff[_0x4f25('0x2b')]);_0x4d7a66['attributes']=_['intersection'](_0x56f4ff[_0x4f25('0x2e')],qs['fields'](_0x306030[_0x4f25('0x2b')][_0x4f25('0x30')]));_0x4d7a66['attributes']=_0x4d7a66[_0x4f25('0x2f')]['length']?_0x4d7a66[_0x4f25('0x2f')]:_0x56f4ff[_0x4f25('0x2e')];if(_0x306030[_0x4f25('0x2b')]['includeAll']){_0x4d7a66[_0x4f25('0x3f')]=[{'all':!![]}];}_0x4d7a66=_[_0x4f25('0x39')]({},_0x4d7a66,_0x306030[_0x4f25('0x3d')]);return db[_0x4f25('0x28')][_0x4f25('0x43')](_0x4d7a66)[_0x4f25('0x20')](handleEntityNotFound(_0xeea900,null))[_0x4f25('0x20')](respondWithResult(_0xeea900,null))[_0x4f25('0x41')](handleError(_0xeea900,null));};exports[_0x4f25('0x44')]=function(_0x1972ba,_0x37d768){return db[_0x4f25('0x28')][_0x4f25('0x44')](_0x1972ba['body'],{})[_0x4f25('0x20')](function(_0x29381d){var _0x4f4cfa=_0x1972ba[_0x4f25('0x45')][_0x4f25('0x21')]({'plain':!![]});if(!_0x4f4cfa)throw new Error(_0x4f25('0x46'));if(_0x4f4cfa[_0x4f25('0x47')]==='user'){var _0x5230ea=_0x29381d[_0x4f25('0x21')]({'plain':!![]});var _0x44799c='ChanSpies';return db[_0x4f25('0x48')]['find']({'where':{'name':_0x44799c,'userProfileId':_0x4f4cfa[_0x4f25('0x49')]},'raw':!![]})[_0x4f25('0x20')](function(_0x573e41){if(_0x573e41&&_0x573e41[_0x4f25('0x4a')]===0x0){return db[_0x4f25('0x22')]['create']({'name':_0x5230ea[_0x4f25('0x25')],'resourceId':_0x5230ea['id'],'type':_0x573e41[_0x4f25('0x25')],'sectionId':_0x573e41['id']},{})['then'](function(){return _0x29381d;});}else{return _0x29381d;}})[_0x4f25('0x41')](function(_0x558e02){logger[_0x4f25('0x4b')](_0x4f25('0x4c'),_0x558e02);throw _0x558e02;});}return _0x29381d;})[_0x4f25('0x20')](respondWithResult(_0x37d768,0xc9))[_0x4f25('0x41')](handleError(_0x37d768,null));};exports['update']=function(_0x383bec,_0x25e218){if(_0x383bec[_0x4f25('0x4d')]['id']){delete _0x383bec[_0x4f25('0x4d')]['id'];}return db[_0x4f25('0x28')]['find']({'where':{'id':_0x383bec[_0x4f25('0x42')]['id']}})[_0x4f25('0x20')](handleEntityNotFound(_0x25e218,null))['then'](saveUpdates(_0x383bec[_0x4f25('0x4d')],null))[_0x4f25('0x20')](respondWithResult(_0x25e218,null))[_0x4f25('0x41')](handleError(_0x25e218,null));};exports['destroy']=function(_0xd244e,_0x429538){return db[_0x4f25('0x28')]['find']({'where':{'id':_0xd244e[_0x4f25('0x42')]['id']}})['then'](handleEntityNotFound(_0x429538,null))[_0x4f25('0x20')](removeEntity(_0x429538,null))[_0x4f25('0x41')](handleError(_0x429538,null));};
\ No newline at end of file
index b9350c7..4ed4aa6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd447=['%s%s','prefix','merge','CDR(type)=%s','chanspy','push','${UNIQUEID}.%s,ab','recordingFormat','auth','Authenticate','ChanSpy','SIP/%s,%s','name','options','join','record','concat','User','findAll','internal','agent','then','catch','models','define','VoiceChanSpy','voice_chanspy','length','VoiceExtension','bulkCreate','destroy','lodash','util','bluebird','api','from-sip','system','format'];(function(_0x2bc3f4,_0x470b26){var _0x14ac53=function(_0x5121bd){while(--_0x5121bd){_0x2bc3f4['push'](_0x2bc3f4['shift']());}};_0x14ac53(++_0x470b26);}(_0xd447,0xb7));var _0x7d44=function(_0x295f56,_0x33c8fa){_0x295f56=_0x295f56-0x0;var _0x358371=_0xd447[_0x295f56];return _0x358371;};'use strict';var _=require(_0x7d44('0x0'));var util=require(_0x7d44('0x1'));var BPromise=require(_0x7d44('0x2'));var logger=require('../../config/logger')(_0x7d44('0x3'));var attributes=require('./voiceChanSpy.attributes');var getUserApplications=function(_0x451d79,_0x35414b,_0x17cbdd){var _0x4eab9e=0x1;var _0x5bcfa6=[];var _0x144afe={'context':_0x7d44('0x4'),'type':_0x7d44('0x5'),'isApp':![]};var _0x516b59={'exten':util[_0x7d44('0x6')](_0x7d44('0x7'),_0x451d79[_0x7d44('0x8')],_0x17cbdd),'ChanSpyId':_0x451d79['id'],'UserId':_0x35414b['id']};_0x5bcfa6['push'](_[_0x7d44('0x9')]({'app':'Set','appdata':util[_0x7d44('0x6')](_0x7d44('0xa'),_0x7d44('0xb')),'priority':_0x4eab9e++},_0x144afe,_0x516b59));if(_0x451d79['record']){_0x5bcfa6[_0x7d44('0xc')](_[_0x7d44('0x9')]({'app':'MixMonitor','appdata':util[_0x7d44('0x6')](_0x7d44('0xd'),_0x451d79[_0x7d44('0xe')]),'priority':_0x4eab9e++},_0x144afe,_0x516b59));}if(_0x451d79[_0x7d44('0xf')]){_0x5bcfa6[_0x7d44('0xc')](_[_0x7d44('0x9')]({'app':_0x7d44('0x10'),'appdata':_0x451d79['password'],'priority':_0x4eab9e++},_0x144afe,_0x516b59));}_0x5bcfa6[_0x7d44('0xc')](_[_0x7d44('0x9')]({'app':_0x7d44('0x11'),'appdata':util[_0x7d44('0x6')](_0x7d44('0x12'),_0x35414b[_0x7d44('0x13')],_0x451d79[_0x7d44('0x14')]?_0x451d79[_0x7d44('0x14')][_0x7d44('0x15')](''):''),'priority':_0x4eab9e++},_0x144afe,_0x516b59));if(_0x451d79[_0x7d44('0x16')]){_0x5bcfa6[_0x7d44('0xc')](_[_0x7d44('0x9')]({'app':'StopMixMonitor','priority':_0x4eab9e++},_0x144afe,_0x516b59));}return _0x5bcfa6;};var getChanSpyApplications=function(_0x22ec84,_0xcbc630){var _0x15ab01=[];for(var _0x2c01f6=0x0,_0x51252c=0x1;_0x2c01f6<_0xcbc630['length'];_0x2c01f6++,_0x51252c=0x1){var _0x10fddb=getUserApplications(_0x22ec84,_0xcbc630[_0x2c01f6],_0xcbc630[_0x2c01f6]['internal']);var _0x19d3f2=getUserApplications(_0x22ec84,_0xcbc630[_0x2c01f6],_0xcbc630[_0x2c01f6][_0x7d44('0x13')]);_0x15ab01=_0x15ab01[_0x7d44('0x17')](_0x10fddb,_0x19d3f2);}return _0x15ab01;};var getChanSpyPromise=function(_0x54acda,_0xbea55){return new BPromise(function(_0x571d9d,_0x357089){return _0x54acda[_0x7d44('0x18')][_0x7d44('0x19')]({'attributes':['id',_0x7d44('0x13'),_0x7d44('0x1a')],'where':{'role':_0x7d44('0x1b'),'chanspy':!![]},'raw':!![]})[_0x7d44('0x1c')](function(_0xe9b8ca){if(_0xe9b8ca){return _0x571d9d(getChanSpyApplications(_0xbea55,_0xe9b8ca));}return _0x571d9d([]);})[_0x7d44('0x1d')](function(_0x58880f){_0x357089(_0x58880f);});});};module['exports']=function(_0x5bea1c,_0x20237d){var _0x5446f9=_0x5bea1c[_0x7d44('0x1e')];return _0x5bea1c[_0x7d44('0x1f')](_0x7d44('0x20'),attributes,{'tableName':_0x7d44('0x21'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x4a8c40,_0x407672,_0x17af3c){return getChanSpyPromise(_0x5446f9,_0x4a8c40)['then'](function(_0x26582f){if(_0x26582f&&_0x26582f[_0x7d44('0x22')]){return _0x5446f9[_0x7d44('0x23')][_0x7d44('0x24')](_0x26582f);}})[_0x7d44('0x1c')](function(){_0x17af3c();})[_0x7d44('0x1d')](function(_0x42e7b3){_0x17af3c(_0x42e7b3);});},'afterUpdate':function(_0x1e3e98,_0xbb726a,_0x31b949){return _0x5446f9[_0x7d44('0x23')][_0x7d44('0x25')]({'where':{'ChanSpyId':_0x1e3e98['id']}})[_0x7d44('0x1c')](function(){return getChanSpyPromise(_0x5446f9,_0x1e3e98);})[_0x7d44('0x1c')](function(_0x2297e4){if(_0x2297e4&&_0x2297e4[_0x7d44('0x22')]){return _0x5446f9['VoiceExtension'][_0x7d44('0x24')](_0x2297e4);}})[_0x7d44('0x1c')](function(){_0x31b949();})[_0x7d44('0x1d')](function(_0x1b0ce1){_0x31b949(_0x1b0ce1);});},'afterDestroy':function(_0xf7e2e4,_0x16ceb3,_0x3a5617){return _0x5446f9[_0x7d44('0x23')][_0x7d44('0x25')]({'where':{'ChanSpyId':_0xf7e2e4['id']}})[_0x7d44('0x1c')](function(){_0x3a5617();})['catch'](function(_0xdcd183){_0x3a5617(_0xdcd183);});}}});};
\ No newline at end of file
+var _0x663b=['catch','exports','models','define','VoiceChanSpy','voice_chanspy','bulkCreate','VoiceExtension','destroy','lodash','util','bluebird','../../config/logger','api','./voiceChanSpy.attributes','from-sip','%s%s','prefix','push','merge','format','CDR(type)=%s','chanspy','record','recordingFormat','auth','Authenticate','password','SIP/%s,%s','name','options','join','StopMixMonitor','length','concat','User','internal','agent','then'];(function(_0x582269,_0x529ef3){var _0x506c1f=function(_0x361bc0){while(--_0x361bc0){_0x582269['push'](_0x582269['shift']());}};_0x506c1f(++_0x529ef3);}(_0x663b,0x7e));var _0xb663=function(_0x500419,_0x549162){_0x500419=_0x500419-0x0;var _0x241c1a=_0x663b[_0x500419];return _0x241c1a;};'use strict';var _=require(_0xb663('0x0'));var util=require(_0xb663('0x1'));var BPromise=require(_0xb663('0x2'));var logger=require(_0xb663('0x3'))(_0xb663('0x4'));var attributes=require(_0xb663('0x5'));var getUserApplications=function(_0x49a052,_0x134494,_0x5e207c){var _0x179220=0x1;var _0x4dddf6=[];var _0x2dcf1f={'context':_0xb663('0x6'),'type':'system','isApp':![]};var _0x1da690={'exten':util['format'](_0xb663('0x7'),_0x49a052[_0xb663('0x8')],_0x5e207c),'ChanSpyId':_0x49a052['id'],'UserId':_0x134494['id']};_0x4dddf6[_0xb663('0x9')](_[_0xb663('0xa')]({'app':'Set','appdata':util[_0xb663('0xb')](_0xb663('0xc'),_0xb663('0xd')),'priority':_0x179220++},_0x2dcf1f,_0x1da690));if(_0x49a052[_0xb663('0xe')]){_0x4dddf6['push'](_[_0xb663('0xa')]({'app':'MixMonitor','appdata':util[_0xb663('0xb')]('${UNIQUEID}.%s,ab',_0x49a052[_0xb663('0xf')]),'priority':_0x179220++},_0x2dcf1f,_0x1da690));}if(_0x49a052[_0xb663('0x10')]){_0x4dddf6[_0xb663('0x9')](_[_0xb663('0xa')]({'app':_0xb663('0x11'),'appdata':_0x49a052[_0xb663('0x12')],'priority':_0x179220++},_0x2dcf1f,_0x1da690));}_0x4dddf6['push'](_[_0xb663('0xa')]({'app':'ChanSpy','appdata':util['format'](_0xb663('0x13'),_0x134494[_0xb663('0x14')],_0x49a052[_0xb663('0x15')]?_0x49a052[_0xb663('0x15')][_0xb663('0x16')](''):''),'priority':_0x179220++},_0x2dcf1f,_0x1da690));if(_0x49a052['record']){_0x4dddf6[_0xb663('0x9')](_[_0xb663('0xa')]({'app':_0xb663('0x17'),'priority':_0x179220++},_0x2dcf1f,_0x1da690));}return _0x4dddf6;};var getChanSpyApplications=function(_0x392e40,_0x5d9743){var _0xa78ae4=[];for(var _0x160eb4=0x0,_0x527113=0x1;_0x160eb4<_0x5d9743[_0xb663('0x18')];_0x160eb4++,_0x527113=0x1){var _0x25d7d1=getUserApplications(_0x392e40,_0x5d9743[_0x160eb4],_0x5d9743[_0x160eb4]['internal']);var _0x325cb9=getUserApplications(_0x392e40,_0x5d9743[_0x160eb4],_0x5d9743[_0x160eb4][_0xb663('0x14')]);_0xa78ae4=_0xa78ae4[_0xb663('0x19')](_0x25d7d1,_0x325cb9);}return _0xa78ae4;};var getChanSpyPromise=function(_0x312076,_0x3e9e5c){return new BPromise(function(_0x1eb60d,_0x45ec49){return _0x312076[_0xb663('0x1a')]['findAll']({'attributes':['id','name',_0xb663('0x1b')],'where':{'role':_0xb663('0x1c'),'chanspy':!![]},'raw':!![]})[_0xb663('0x1d')](function(_0xfe1bff){if(_0xfe1bff){return _0x1eb60d(getChanSpyApplications(_0x3e9e5c,_0xfe1bff));}return _0x1eb60d([]);})[_0xb663('0x1e')](function(_0x2f37f3){_0x45ec49(_0x2f37f3);});});};module[_0xb663('0x1f')]=function(_0x151f69,_0x1a0c98){var _0xc23d3=_0x151f69[_0xb663('0x20')];return _0x151f69[_0xb663('0x21')](_0xb663('0x22'),attributes,{'tableName':_0xb663('0x23'),'paranoid':![],'indexes':[],'timestamps':!![],'hooks':{'afterCreate':function(_0x541155,_0x36408e,_0x2f551f){return getChanSpyPromise(_0xc23d3,_0x541155)['then'](function(_0x3405cb){if(_0x3405cb&&_0x3405cb[_0xb663('0x18')]){return _0xc23d3['VoiceExtension'][_0xb663('0x24')](_0x3405cb);}})[_0xb663('0x1d')](function(){_0x2f551f();})[_0xb663('0x1e')](function(_0x2c2272){_0x2f551f(_0x2c2272);});},'afterUpdate':function(_0xc880ac,_0x363dec,_0x5c8778){return _0xc23d3[_0xb663('0x25')]['destroy']({'where':{'ChanSpyId':_0xc880ac['id']}})[_0xb663('0x1d')](function(){return getChanSpyPromise(_0xc23d3,_0xc880ac);})['then'](function(_0x2241f6){if(_0x2241f6&&_0x2241f6[_0xb663('0x18')]){return _0xc23d3[_0xb663('0x25')]['bulkCreate'](_0x2241f6);}})[_0xb663('0x1d')](function(){_0x5c8778();})[_0xb663('0x1e')](function(_0x1963af){_0x5c8778(_0x1963af);});},'afterDestroy':function(_0x5878bc,_0x234569,_0x16c13a){return _0xc23d3[_0xb663('0x25')][_0xb663('0x26')]({'where':{'ChanSpyId':_0x5878bc['id']}})['then'](function(){_0x16c13a();})[_0xb663('0x1e')](function(_0x391935){_0x16c13a(_0x391935);});}}});};
\ No newline at end of file
index b854985..c9f2aed 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfc2=['error','code','VoiceChanSpy,\x20%s,\x20%s','message','result','catch','util','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','then','info','request\x20sent','debug','VoiceChanSpy,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x17e771,_0x55fd17){var _0x1f3a6d=function(_0x346ee3){while(--_0x346ee3){_0x17e771['push'](_0x17e771['shift']());}};_0x1f3a6d(++_0x55fd17);}(_0xbfc2,0xcc));var _0x2bfc=function(_0xfae23b,_0x2be4ba){_0xfae23b=_0xfae23b-0x0;var _0x200640=_0xbfc2[_0xfae23b];return _0x200640;};'use strict';var _=require('lodash');var util=require(_0x2bfc('0x0'));var moment=require(_0x2bfc('0x1'));var BPromise=require('bluebird');var rs=require(_0x2bfc('0x2'));var fs=require('fs');var Redis=require(_0x2bfc('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0x2bfc('0x4'));var logger=require(_0x2bfc('0x5'))(_0x2bfc('0x6'));var config=require(_0x2bfc('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x2bfc('0x8')][_0x2bfc('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5dfc05,_0x3c32e5,_0x4398f4){return new BPromise(function(_0x574a5b,_0x1c0ac3){return client['request'](_0x5dfc05,_0x4398f4)[_0x2bfc('0xa')](function(_0x5d702a){logger[_0x2bfc('0xb')]('VoiceChanSpy,\x20%s,\x20%s',_0x3c32e5,_0x2bfc('0xc'));logger[_0x2bfc('0xd')](_0x2bfc('0xe'),_0x3c32e5,_0x2bfc('0xc'),JSON[_0x2bfc('0xf')](_0x5d702a));if(_0x5d702a[_0x2bfc('0x10')]){if(_0x5d702a['error'][_0x2bfc('0x11')]===0x1f4){logger['error']('VoiceChanSpy,\x20%s,\x20%s',_0x3c32e5,_0x5d702a[_0x2bfc('0x10')]['message']);return _0x1c0ac3(_0x5d702a[_0x2bfc('0x10')]['message']);}logger[_0x2bfc('0x10')](_0x2bfc('0x12'),_0x3c32e5,_0x5d702a['error'][_0x2bfc('0x13')]);return _0x574a5b(_0x5d702a[_0x2bfc('0x10')]['message']);}else{logger['info'](_0x2bfc('0x12'),_0x3c32e5,_0x2bfc('0xc'));_0x574a5b(_0x5d702a[_0x2bfc('0x14')][_0x2bfc('0x13')]);}})[_0x2bfc('0x15')](function(_0x5e6586){logger[_0x2bfc('0x10')](_0x2bfc('0x12'),_0x3c32e5,_0x5e6586);_0x1c0ac3(_0x5e6586);});});}
\ No newline at end of file
+var _0x42f9=['VoiceChanSpy,\x20%s,\x20%s','message','result','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','info','request\x20sent','debug','VoiceChanSpy,\x20%s,\x20%s,\x20%s','stringify','error','code'];(function(_0x13040c,_0x8926d3){var _0x258b2d=function(_0x32c89e){while(--_0x32c89e){_0x13040c['push'](_0x13040c['shift']());}};_0x258b2d(++_0x8926d3);}(_0x42f9,0xc9));var _0x942f=function(_0x3b7eaa,_0x1c2d87){_0x3b7eaa=_0x3b7eaa-0x0;var _0x26d7a4=_0x42f9[_0x3b7eaa];return _0x26d7a4;};'use strict';var _=require('lodash');var util=require('util');var moment=require('moment');var BPromise=require('bluebird');var rs=require(_0x942f('0x0'));var fs=require('fs');var Redis=require(_0x942f('0x1'));var db=require(_0x942f('0x2'))['db'];var utils=require('../../config/utils');var logger=require(_0x942f('0x3'))(_0x942f('0x4'));var config=require(_0x942f('0x5'));var jayson=require('jayson/promise');var client=jayson[_0x942f('0x6')][_0x942f('0x7')]({'port':0x232a});function respondWithRpcPromise(_0x378863,_0x3c4297,_0x502a58){return new BPromise(function(_0x450563,_0xa3665d){return client['request'](_0x378863,_0x502a58)['then'](function(_0x387fd8){logger[_0x942f('0x8')]('VoiceChanSpy,\x20%s,\x20%s',_0x3c4297,_0x942f('0x9'));logger[_0x942f('0xa')](_0x942f('0xb'),_0x3c4297,'request\x20sent',JSON[_0x942f('0xc')](_0x387fd8));if(_0x387fd8[_0x942f('0xd')]){if(_0x387fd8[_0x942f('0xd')][_0x942f('0xe')]===0x1f4){logger[_0x942f('0xd')](_0x942f('0xf'),_0x3c4297,_0x387fd8['error'][_0x942f('0x10')]);return _0xa3665d(_0x387fd8[_0x942f('0xd')][_0x942f('0x10')]);}logger['error']('VoiceChanSpy,\x20%s,\x20%s',_0x3c4297,_0x387fd8['error'][_0x942f('0x10')]);return _0x450563(_0x387fd8[_0x942f('0xd')]['message']);}else{logger[_0x942f('0x8')]('VoiceChanSpy,\x20%s,\x20%s',_0x3c4297,_0x942f('0x9'));_0x450563(_0x387fd8[_0x942f('0x11')]['message']);}})['catch'](function(_0x461e59){logger['error'](_0x942f('0xf'),_0x3c4297,_0x461e59);_0xa3665d(_0x461e59);});});}
\ No newline at end of file
index 12c4c34..13ff61c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6b19=['isAuthenticated','/:id','post','put','update','delete','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get'];(function(_0x355479,_0x3ef6d7){var _0x2b72d3=function(_0x4a400c){while(--_0x4a400c){_0x355479['push'](_0x355479['shift']());}};_0x2b72d3(++_0x3ef6d7);}(_0x6b19,0xf4));var _0x96b1=function(_0x33c31d,_0x217a59){_0x33c31d=_0x33c31d-0x0;var _0x224013=_0x6b19[_0x33c31d];return _0x224013;};'use strict';var multer=require(_0x96b1('0x0'));var util=require('util');var path=require(_0x96b1('0x1'));var timeout=require(_0x96b1('0x2'));var express=require('express');var router=express[_0x96b1('0x3')]();var auth=require(_0x96b1('0x4'));var interaction=require(_0x96b1('0x5'));var config=require(_0x96b1('0x6'));var controller=require('./voiceContext.controller');router[_0x96b1('0x7')]('/',auth[_0x96b1('0x8')](),controller['index']);router['get'](_0x96b1('0x9'),auth[_0x96b1('0x8')](),controller['show']);router[_0x96b1('0xa')]('/',auth[_0x96b1('0x8')](),controller['create']);router[_0x96b1('0xb')](_0x96b1('0x9'),auth[_0x96b1('0x8')](),controller[_0x96b1('0xc')]);router[_0x96b1('0xd')]('/:id',auth[_0x96b1('0x8')](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0x3423=['../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceContext.controller','get','isAuthenticated','index','/:id','show','post','create','put','update','exports','path','connect-timeout','express','Router'];(function(_0x723d05,_0xc78c19){var _0x171f66=function(_0x253328){while(--_0x253328){_0x723d05['push'](_0x723d05['shift']());}};_0x171f66(++_0xc78c19);}(_0x3423,0x188));var _0x3342=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x3423[_0x3dd15e];return _0x231fd0;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x3342('0x0'));var timeout=require(_0x3342('0x1'));var express=require(_0x3342('0x2'));var router=express[_0x3342('0x3')]();var auth=require(_0x3342('0x4'));var interaction=require(_0x3342('0x5'));var config=require(_0x3342('0x6'));var controller=require(_0x3342('0x7'));router[_0x3342('0x8')]('/',auth[_0x3342('0x9')](),controller[_0x3342('0xa')]);router[_0x3342('0x8')](_0x3342('0xb'),auth[_0x3342('0x9')](),controller[_0x3342('0xc')]);router[_0x3342('0xd')]('/',auth[_0x3342('0x9')](),controller[_0x3342('0xe')]);router[_0x3342('0xf')]('/:id',auth['isAuthenticated'](),controller[_0x3342('0x10')]);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module[_0x3342('0x11')]=router;
\ No newline at end of file
index 5676ff0..b1aa618 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc9a6=['name','STRING','BOOLEAN','sequelize','exports'];(function(_0x57d574,_0x26fa11){var _0x141a04=function(_0xfdb4a1){while(--_0xfdb4a1){_0x57d574['push'](_0x57d574['shift']());}};_0x141a04(++_0x26fa11);}(_0xc9a6,0xd5));var _0x6c9a=function(_0xf920a6,_0x17018a){_0xf920a6=_0xf920a6-0x0;var _0x4cf8e0=_0xc9a6[_0xf920a6];return _0x4cf8e0;};'use strict';var Sequelize=require(_0x6c9a('0x0'));module[_0x6c9a('0x1')]={'name':{'type':Sequelize['STRING'],'unique':_0x6c9a('0x2')},'description':{'type':Sequelize[_0x6c9a('0x3')],'allowNull':!![]},'defaultEntry':{'type':Sequelize[_0x6c9a('0x4')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xff44=['STRING','name','BOOLEAN','exports'];(function(_0x3381f6,_0x2ab916){var _0x394f34=function(_0x4be8e1){while(--_0x4be8e1){_0x3381f6['push'](_0x3381f6['shift']());}};_0x394f34(++_0x2ab916);}(_0xff44,0x9b));var _0x4ff4=function(_0x30b094,_0x555417){_0x30b094=_0x30b094-0x0;var _0x4337f3=_0xff44[_0x30b094];return _0x4337f3;};'use strict';var Sequelize=require('sequelize');module[_0x4ff4('0x0')]={'name':{'type':Sequelize[_0x4ff4('0x1')],'unique':_0x4ff4('0x2')},'description':{'type':Sequelize[_0x4ff4('0x1')],'allowNull':!![]},'defaultEntry':{'type':Sequelize[_0x4ff4('0x3')],'defaultValue':0x0}};
\ No newline at end of file
index dcf7b3a..5f83c02 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3a7b=['zip-dir','request-promise','moment','path','sox','to-csv','ejs','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','../../config/logger','../../config/environment','../../mysqldb','jayson/promise','client','request','then','info','VoiceContext,\x20%s,\x20%s','request\x20sent','debug','VoiceContext,\x20%s,\x20%s,\x20%s','stringify','code','error','message','result','sendStatus','status','end','json','offset','limit','Content-Range','apply','reject','save','update','destroy','get','Contexts','stack','name','send','rawAttributes','model','keys','query','filters','intersection','attributes','hasOwnProperty','sort','where','pick','merge','map','type','key','VIRTUAL','field','VoiceContext','count','includeAll','findAll','rows','catch','show','params','fields','length','options','find','create','body','readFileSync','join','server/files/templates/context.ejs','utf8','render','writeFileSync','/etc/asterisk/extensions_xcally_contexts.conf','Reload','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','root','eml-format','rimraf'];(function(_0x2db4fc,_0x1a82e0){var _0x10a1a7=function(_0x5ef4f6){while(--_0x5ef4f6){_0x2db4fc['push'](_0x2db4fc['shift']());}};_0x10a1a7(++_0x1a82e0);}(_0x3a7b,0x1e8));var _0xb3a7=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x3a7b[_0x321bb2];return _0x9c12ed;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xb3a7('0x0'));var rimraf=require(_0xb3a7('0x1'));var zipdir=require(_0xb3a7('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xb3a7('0x3'));var moment=require(_0xb3a7('0x4'));var BPromise=require('bluebird');var Mustache=require('mustache');var util=require('util');var path=require(_0xb3a7('0x5'));var sox=require(_0xb3a7('0x6'));var csv=require(_0xb3a7('0x7'));var ejs=require(_0xb3a7('0x8'));var fs=require('fs');var _=require('lodash');var squel=require(_0xb3a7('0x9'));var crypto=require(_0xb3a7('0xa'));var jsforce=require(_0xb3a7('0xb'));var deskjs=require(_0xb3a7('0xc'));var toCsv=require('to-csv');var querystring=require(_0xb3a7('0xd'));var Papa=require(_0xb3a7('0xe'));var authService=require(_0xb3a7('0xf'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0xb3a7('0x10'));var qs=require(_0xb3a7('0x11'));var logger=require(_0xb3a7('0x12'))('api');var utils=require('../../config/utils');var config=require(_0xb3a7('0x13'));var db=require(_0xb3a7('0x14'))['db'];var jayson=require(_0xb3a7('0x15'));var client=jayson[_0xb3a7('0x16')]['http']({'port':0x232a});function respondWithRpcPromise(_0x111857,_0x1368be,_0x549f38,_0x584d95){return new BPromise(function(_0x1c2dd6,_0x45181f){var _0x45d46b=_0x584d95||client;return _0x45d46b[_0xb3a7('0x17')](_0x111857,_0x549f38)[_0xb3a7('0x18')](function(_0x2a1441){logger[_0xb3a7('0x19')](_0xb3a7('0x1a'),_0x1368be,_0xb3a7('0x1b'));logger[_0xb3a7('0x1c')](_0xb3a7('0x1d'),_0x1368be,_0xb3a7('0x1b'),JSON[_0xb3a7('0x1e')](_0x2a1441));if(_0x2a1441['error']){if(_0x2a1441['error'][_0xb3a7('0x1f')]===0x1f4){logger[_0xb3a7('0x20')](_0xb3a7('0x1a'),_0x1368be,_0x2a1441[_0xb3a7('0x20')][_0xb3a7('0x21')]);return _0x45181f(_0x2a1441[_0xb3a7('0x20')]['message']);}logger[_0xb3a7('0x20')](_0xb3a7('0x1a'),_0x1368be,_0x2a1441['error'][_0xb3a7('0x21')]);return _0x1c2dd6(_0x2a1441[_0xb3a7('0x20')][_0xb3a7('0x21')]);}else{logger[_0xb3a7('0x19')](_0xb3a7('0x1a'),_0x1368be,_0xb3a7('0x1b'));_0x1c2dd6(_0x2a1441[_0xb3a7('0x22')][_0xb3a7('0x21')]);}})['catch'](function(_0x66078a){logger['error'](_0xb3a7('0x1a'),_0x1368be,_0x66078a);_0x45181f(_0x66078a);});});}function respondWithStatusCode(_0x5541c8,_0x25b639){_0x25b639=_0x25b639||0xcc;return function(_0x2555f6){if(_0x2555f6){return _0x5541c8[_0xb3a7('0x23')](_0x25b639);}return _0x5541c8[_0xb3a7('0x24')](_0x25b639)[_0xb3a7('0x25')]();};}function respondWithResult(_0xaf82e8,_0x75fdbb){_0x75fdbb=_0x75fdbb||0xc8;return function(_0x1f3d64){if(_0x1f3d64){return _0xaf82e8['status'](_0x75fdbb)[_0xb3a7('0x26')](_0x1f3d64);}};}function respondWithFilteredResult(_0x87fde,_0x10247c){return function(_0x499227){if(_0x499227){var _0x1417e8=_0x499227['count'],_0x1dd4d2=_0x10247c[_0xb3a7('0x27')],_0x3141e1=_0x10247c[_0xb3a7('0x27')]+_0x10247c[_0xb3a7('0x28')],_0x3c830f;if(_0x3141e1>=_0x1417e8){_0x3141e1=_0x1417e8;_0x3c830f=0xc8;}else{_0x3c830f=0xce;}_0x87fde[_0xb3a7('0x24')](_0x3c830f);return _0x87fde['set'](_0xb3a7('0x29'),_0x1dd4d2+'-'+_0x3141e1+'/'+_0x1417e8)[_0xb3a7('0x26')](_0x499227);}return null;};}function patchUpdates(_0x5475ae){return function(_0x27a201){try{jsonpatch[_0xb3a7('0x2a')](_0x27a201,_0x5475ae,!![]);}catch(_0x375da6){return BPromise[_0xb3a7('0x2b')](_0x375da6);}return _0x27a201[_0xb3a7('0x2c')]();};}function saveUpdates(_0x18de53,_0x41c62c){return function(_0x171e76){if(_0x171e76){return _0x171e76[_0xb3a7('0x2d')](_0x18de53)[_0xb3a7('0x18')](function(_0xd1a458){return _0xd1a458;});}return null;};}function removeEntity(_0x24ccb1,_0x8ccb31){return function(_0x4a71cf){if(_0x4a71cf){return _0x4a71cf[_0xb3a7('0x2e')]()[_0xb3a7('0x18')](function(){var _0x53990a=_0x4a71cf[_0xb3a7('0x2f')]({'plain':!![]});var _0x2e3071=_0xb3a7('0x30');return db['UserProfileResource'][_0xb3a7('0x2e')]({'where':{'type':_0x2e3071,'resourceId':_0x53990a['id']}})['then'](function(){return _0x4a71cf;});})[_0xb3a7('0x18')](function(){_0x24ccb1['status'](0xcc)[_0xb3a7('0x25')]();});}};}function handleEntityNotFound(_0x44de77,_0x5b6d81){return function(_0x3d067a){if(!_0x3d067a){_0x44de77[_0xb3a7('0x23')](0x194);}return _0x3d067a;};}function handleError(_0x301375,_0x9be462){_0x9be462=_0x9be462||0x1f4;return function(_0x3ca5f7){logger[_0xb3a7('0x20')](_0x3ca5f7[_0xb3a7('0x31')]);if(_0x3ca5f7[_0xb3a7('0x32')]){delete _0x3ca5f7['name'];}_0x301375[_0xb3a7('0x24')](_0x9be462)[_0xb3a7('0x33')](_0x3ca5f7);};}exports['index']=function(_0x56d246,_0x48fa9c){var _0x587953={},_0x38c49d={},_0x466604={'count':0x0,'rows':[]};var _0x3488d5=db['VoiceContext'][_0xb3a7('0x34')];_0x38c49d[_0xb3a7('0x35')]=_[_0xb3a7('0x36')](_0x3488d5);_0x38c49d[_0xb3a7('0x37')]=_[_0xb3a7('0x36')](_0x56d246[_0xb3a7('0x37')]);_0x38c49d[_0xb3a7('0x38')]=_[_0xb3a7('0x39')](_0x38c49d['model'],_0x38c49d[_0xb3a7('0x37')]);_0x587953[_0xb3a7('0x3a')]=_[_0xb3a7('0x39')](_0x38c49d[_0xb3a7('0x35')],qs['fields'](_0x56d246['query']['fields']));_0x587953['attributes']=_0x587953['attributes']['length']?_0x587953['attributes']:_0x38c49d[_0xb3a7('0x35')];if(!_0x56d246[_0xb3a7('0x37')][_0xb3a7('0x3b')]('nolimit')){_0x587953['limit']=qs['limit'](_0x56d246['query'][_0xb3a7('0x28')]);_0x587953[_0xb3a7('0x27')]=qs[_0xb3a7('0x27')](_0x56d246['query'][_0xb3a7('0x27')]);}_0x587953['order']=qs['sort'](_0x56d246['query'][_0xb3a7('0x3c')]);_0x587953[_0xb3a7('0x3d')]=qs[_0xb3a7('0x38')](_[_0xb3a7('0x3e')](_0x56d246['query'],_0x38c49d['filters']));if(_0x56d246['query']['filter']){_0x587953[_0xb3a7('0x3d')]=_[_0xb3a7('0x3f')](_0x587953[_0xb3a7('0x3d')],{'$or':_[_0xb3a7('0x40')](_0x3488d5,function(_0x1f2d55){if(_0x1f2d55[_0xb3a7('0x41')][_0xb3a7('0x42')]!==_0xb3a7('0x43')){var _0x54cbaa={};_0x54cbaa[_0x1f2d55[_0xb3a7('0x44')]]={'$like':'%'+_0x56d246[_0xb3a7('0x37')]['filter']+'%'};return _0x54cbaa;}})});}_0x587953=_[_0xb3a7('0x3f')]({},_0x587953,_0x56d246['options']);var _0x4784c6={'where':_0x587953[_0xb3a7('0x3d')]};return db[_0xb3a7('0x45')][_0xb3a7('0x46')](_0x4784c6)[_0xb3a7('0x18')](function(_0x113ac3){_0x466604[_0xb3a7('0x46')]=_0x113ac3;if(_0x56d246[_0xb3a7('0x37')][_0xb3a7('0x47')]){_0x587953['include']=[{'all':!![]}];}return db[_0xb3a7('0x45')][_0xb3a7('0x48')](_0x587953);})[_0xb3a7('0x18')](function(_0x344476){_0x466604[_0xb3a7('0x49')]=_0x344476;return _0x466604;})[_0xb3a7('0x18')](respondWithFilteredResult(_0x48fa9c,_0x587953))[_0xb3a7('0x4a')](handleError(_0x48fa9c,null));};exports[_0xb3a7('0x4b')]=function(_0x2dd972,_0x49a4e6){var _0x8dfbfc={'raw':![],'where':{'id':_0x2dd972[_0xb3a7('0x4c')]['id']}},_0x3984d0={};_0x3984d0['model']=_[_0xb3a7('0x36')](db['VoiceContext']['rawAttributes']);_0x3984d0[_0xb3a7('0x37')]=_[_0xb3a7('0x36')](_0x2dd972[_0xb3a7('0x37')]);_0x3984d0[_0xb3a7('0x38')]=_[_0xb3a7('0x39')](_0x3984d0[_0xb3a7('0x35')],_0x3984d0[_0xb3a7('0x37')]);_0x8dfbfc['attributes']=_['intersection'](_0x3984d0[_0xb3a7('0x35')],qs[_0xb3a7('0x4d')](_0x2dd972[_0xb3a7('0x37')][_0xb3a7('0x4d')]));_0x8dfbfc[_0xb3a7('0x3a')]=_0x8dfbfc[_0xb3a7('0x3a')][_0xb3a7('0x4e')]?_0x8dfbfc[_0xb3a7('0x3a')]:_0x3984d0['model'];if(_0x2dd972['query'][_0xb3a7('0x47')]){_0x8dfbfc['include']=[{'all':!![]}];}_0x8dfbfc=_[_0xb3a7('0x3f')]({},_0x8dfbfc,_0x2dd972[_0xb3a7('0x4f')]);return db['VoiceContext'][_0xb3a7('0x50')](_0x8dfbfc)[_0xb3a7('0x18')](handleEntityNotFound(_0x49a4e6,null))[_0xb3a7('0x18')](respondWithResult(_0x49a4e6,null))[_0xb3a7('0x4a')](handleError(_0x49a4e6,null));};exports[_0xb3a7('0x51')]=function(_0x38a604,_0x297565,_0x30f388){var _0x4104fa;return db['VoiceContext'][_0xb3a7('0x51')](_0x38a604[_0xb3a7('0x52')],{'raw':!![]})[_0xb3a7('0x18')](function(_0x57f4de){_0x4104fa=_0x57f4de;return db['VoiceContext'][_0xb3a7('0x48')]({'raw':!![]});})['then'](function(_0x4767df){var _0x4d0163=fs[_0xb3a7('0x53')](path[_0xb3a7('0x54')](config['root'],_0xb3a7('0x55')),_0xb3a7('0x56'));var _0x3cf7f5=ejs[_0xb3a7('0x57')](_0x4d0163,{'contexts':_0x4767df||[]});fs[_0xb3a7('0x58')](_0xb3a7('0x59'),_0x3cf7f5);})['then'](function(){return respondWithRpcPromise(_0xb3a7('0x5a'),_0xb3a7('0x51'),{'module':'chan_sip.so'});})['then'](function(){var _0x191d7b=_0x38a604[_0xb3a7('0x5b')]['get']({'plain':!![]});if(!_0x191d7b)throw new Error(_0xb3a7('0x5c'));if(_0x191d7b[_0xb3a7('0x5d')]===_0xb3a7('0x5b')){var _0x507266=_0x4104fa[_0xb3a7('0x2f')]({'plain':!![]});return db['UserProfileSection'][_0xb3a7('0x50')]({'where':{'name':_0xb3a7('0x30'),'userProfileId':_0x191d7b[_0xb3a7('0x5e')]},'raw':!![]})['then'](function(_0x221d39){if(_0x221d39&&_0x221d39['autoAssociation']===0x0){return db[_0xb3a7('0x5f')][_0xb3a7('0x51')]({'name':_0x507266[_0xb3a7('0x32')],'resourceId':_0x507266['id'],'type':_0x221d39[_0xb3a7('0x32')],'sectionId':_0x221d39['id']},{})[_0xb3a7('0x18')](function(){return _0x4104fa;});}else{return _0x4104fa;}})[_0xb3a7('0x4a')](function(_0x165bec){logger[_0xb3a7('0x20')](_0xb3a7('0x60'),_0x165bec);throw _0x165bec;});}return _0x4104fa;})[_0xb3a7('0x18')](respondWithResult(_0x297565,0xc9))[_0xb3a7('0x4a')](handleError(_0x297565,null));};exports[_0xb3a7('0x2d')]=function(_0x3ed95b,_0x4b37a9,_0x23565d){var _0xffd650;return db['VoiceContext']['find']({'where':{'id':_0x3ed95b[_0xb3a7('0x4c')]['id']}})[_0xb3a7('0x18')](handleEntityNotFound(_0x4b37a9,null))[_0xb3a7('0x18')](saveUpdates(_0x3ed95b['body'],null))[_0xb3a7('0x18')](function(_0x5c1af5){if(_0x5c1af5){_0xffd650=_0x5c1af5;return db['VoiceContext'][_0xb3a7('0x48')]({'raw':!![]});}})['then'](function(_0x3a3c4c){var _0x16d522=fs[_0xb3a7('0x53')](path[_0xb3a7('0x54')](config[_0xb3a7('0x61')],_0xb3a7('0x55')),_0xb3a7('0x56'));var _0x213a6c=ejs[_0xb3a7('0x57')](_0x16d522,{'contexts':_0x3a3c4c||[]});fs[_0xb3a7('0x58')]('/etc/asterisk/extensions_xcally_contexts.conf',_0x213a6c);})[_0xb3a7('0x18')](function(){return respondWithRpcPromise(_0xb3a7('0x5a'),_0xb3a7('0x2d'),{'module':'chan_sip.so'});})['then'](function(){return _0xffd650;})[_0xb3a7('0x18')](respondWithResult(_0x4b37a9,null))[_0xb3a7('0x4a')](handleError(_0x4b37a9,null));};exports['destroy']=function(_0x41cd78,_0x27c958,_0x63def1){var _0x24f879;return db[_0xb3a7('0x45')][_0xb3a7('0x50')]({'where':{'id':_0x41cd78[_0xb3a7('0x4c')]['id']}})[_0xb3a7('0x18')](handleEntityNotFound(_0x27c958,null))[_0xb3a7('0x18')](removeEntity(_0x27c958,null))[_0xb3a7('0x18')](function(){return db[_0xb3a7('0x45')][_0xb3a7('0x48')]({'raw':!![]});})['then'](function(_0x26a4c4){var _0x39ce42=fs[_0xb3a7('0x53')](path[_0xb3a7('0x54')](config[_0xb3a7('0x61')],_0xb3a7('0x55')),'utf8');var _0x14c470=ejs['render'](_0x39ce42,{'contexts':_0x26a4c4});fs[_0xb3a7('0x58')](_0xb3a7('0x59'),_0x14c470);return respondWithRpcPromise(_0xb3a7('0x5a'),_0xb3a7('0x2e'),{'module':'chan_sip.so'});})[_0xb3a7('0x4a')](handleError(_0x27c958,null));};
\ No newline at end of file
+var _0xd702=['client','http','request','info','VoiceContext,\x20%s,\x20%s','request\x20sent','debug','VoiceContext,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','sendStatus','status','json','count','offset','limit','set','Content-Range','reject','update','then','Contexts','UserProfileResource','destroy','stack','name','send','rawAttributes','keys','query','filters','intersection','model','attributes','fields','hasOwnProperty','order','sort','where','pick','filter','type','key','VIRTUAL','field','options','VoiceContext','include','show','length','merge','find','create','body','findAll','join','root','server/files/templates/context.ejs','render','writeFileSync','Reload','user','get','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','params','readFileSync','utf8','/etc/asterisk/extensions_xcally_contexts.conf','chan_sip.so','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','sox','ejs','lodash','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/environment','jayson/promise'];(function(_0x135ee0,_0x483056){var _0x1e6228=function(_0x55a241){while(--_0x55a241){_0x135ee0['push'](_0x135ee0['shift']());}};_0x1e6228(++_0x483056);}(_0xd702,0x117));var _0x2d70=function(_0xb12309,_0x57467c){_0xb12309=_0xb12309-0x0;var _0x57c3b9=_0xd702[_0xb12309];return _0x57c3b9;};'use strict';var pdf=require(_0x2d70('0x0'));var emlformat=require(_0x2d70('0x1'));var rimraf=require(_0x2d70('0x2'));var zipdir=require(_0x2d70('0x3'));var jsonpatch=require(_0x2d70('0x4'));var rp=require(_0x2d70('0x5'));var moment=require('moment');var BPromise=require(_0x2d70('0x6'));var Mustache=require(_0x2d70('0x7'));var util=require(_0x2d70('0x8'));var path=require('path');var sox=require(_0x2d70('0x9'));var csv=require('to-csv');var ejs=require(_0x2d70('0xa'));var fs=require('fs');var _=require(_0x2d70('0xb'));var squel=require('squel');var crypto=require(_0x2d70('0xc'));var jsforce=require(_0x2d70('0xd'));var deskjs=require(_0x2d70('0xe'));var toCsv=require('to-csv');var querystring=require(_0x2d70('0xf'));var Papa=require(_0x2d70('0x10'));var authService=require(_0x2d70('0x11'));var hardwareService=require(_0x2d70('0x12'));var Redis=require('ioredis');var qs=require(_0x2d70('0x13'));var logger=require(_0x2d70('0x14'))(_0x2d70('0x15'));var utils=require('../../config/utils');var config=require(_0x2d70('0x16'));var db=require('../../mysqldb')['db'];var jayson=require(_0x2d70('0x17'));var client=jayson[_0x2d70('0x18')][_0x2d70('0x19')]({'port':0x232a});function respondWithRpcPromise(_0x26bed,_0x192fbb,_0x7fceee,_0x10b8fc){return new BPromise(function(_0x5904fe,_0x3f1f24){var _0x6c4ffb=_0x10b8fc||client;return _0x6c4ffb[_0x2d70('0x1a')](_0x26bed,_0x7fceee)['then'](function(_0x233d0b){logger[_0x2d70('0x1b')](_0x2d70('0x1c'),_0x192fbb,_0x2d70('0x1d'));logger[_0x2d70('0x1e')](_0x2d70('0x1f'),_0x192fbb,_0x2d70('0x1d'),JSON[_0x2d70('0x20')](_0x233d0b));if(_0x233d0b[_0x2d70('0x21')]){if(_0x233d0b[_0x2d70('0x21')][_0x2d70('0x22')]===0x1f4){logger[_0x2d70('0x21')](_0x2d70('0x1c'),_0x192fbb,_0x233d0b[_0x2d70('0x21')]['message']);return _0x3f1f24(_0x233d0b[_0x2d70('0x21')][_0x2d70('0x23')]);}logger[_0x2d70('0x21')](_0x2d70('0x1c'),_0x192fbb,_0x233d0b['error'][_0x2d70('0x23')]);return _0x5904fe(_0x233d0b[_0x2d70('0x21')][_0x2d70('0x23')]);}else{logger[_0x2d70('0x1b')](_0x2d70('0x1c'),_0x192fbb,_0x2d70('0x1d'));_0x5904fe(_0x233d0b[_0x2d70('0x24')][_0x2d70('0x23')]);}})[_0x2d70('0x25')](function(_0x2438fe){logger[_0x2d70('0x21')](_0x2d70('0x1c'),_0x192fbb,_0x2438fe);_0x3f1f24(_0x2438fe);});});}function respondWithStatusCode(_0x24a6d9,_0x5ba7ef){_0x5ba7ef=_0x5ba7ef||0xcc;return function(_0x630fd4){if(_0x630fd4){return _0x24a6d9[_0x2d70('0x26')](_0x5ba7ef);}return _0x24a6d9[_0x2d70('0x27')](_0x5ba7ef)['end']();};}function respondWithResult(_0xd0988f,_0xc97185){_0xc97185=_0xc97185||0xc8;return function(_0x31fe1c){if(_0x31fe1c){return _0xd0988f['status'](_0xc97185)[_0x2d70('0x28')](_0x31fe1c);}};}function respondWithFilteredResult(_0x1420e,_0x2fcd82){return function(_0x5cedd8){if(_0x5cedd8){var _0x48bf69=_0x5cedd8[_0x2d70('0x29')],_0x3261af=_0x2fcd82[_0x2d70('0x2a')],_0x34e138=_0x2fcd82['offset']+_0x2fcd82[_0x2d70('0x2b')],_0x3a7d18;if(_0x34e138>=_0x48bf69){_0x34e138=_0x48bf69;_0x3a7d18=0xc8;}else{_0x3a7d18=0xce;}_0x1420e[_0x2d70('0x27')](_0x3a7d18);return _0x1420e[_0x2d70('0x2c')](_0x2d70('0x2d'),_0x3261af+'-'+_0x34e138+'/'+_0x48bf69)[_0x2d70('0x28')](_0x5cedd8);}return null;};}function patchUpdates(_0x59c3be){return function(_0x25939c){try{jsonpatch['apply'](_0x25939c,_0x59c3be,!![]);}catch(_0x574123){return BPromise[_0x2d70('0x2e')](_0x574123);}return _0x25939c['save']();};}function saveUpdates(_0x325fda,_0x3408b6){return function(_0x48d62a){if(_0x48d62a){return _0x48d62a[_0x2d70('0x2f')](_0x325fda)[_0x2d70('0x30')](function(_0x4220fd){return _0x4220fd;});}return null;};}function removeEntity(_0x4285fa,_0x828b94){return function(_0x28385b){if(_0x28385b){return _0x28385b['destroy']()['then'](function(){var _0x591792=_0x28385b['get']({'plain':!![]});var _0x1cd95c=_0x2d70('0x31');return db[_0x2d70('0x32')][_0x2d70('0x33')]({'where':{'type':_0x1cd95c,'resourceId':_0x591792['id']}})[_0x2d70('0x30')](function(){return _0x28385b;});})[_0x2d70('0x30')](function(){_0x4285fa[_0x2d70('0x27')](0xcc)['end']();});}};}function handleEntityNotFound(_0x50fffc,_0x12285f){return function(_0xf838f9){if(!_0xf838f9){_0x50fffc[_0x2d70('0x26')](0x194);}return _0xf838f9;};}function handleError(_0x22ea3d,_0x410cad){_0x410cad=_0x410cad||0x1f4;return function(_0x309885){logger[_0x2d70('0x21')](_0x309885[_0x2d70('0x34')]);if(_0x309885['name']){delete _0x309885[_0x2d70('0x35')];}_0x22ea3d[_0x2d70('0x27')](_0x410cad)[_0x2d70('0x36')](_0x309885);};}exports['index']=function(_0x3cb1d2,_0x92d3fa){var _0x310dd2={},_0x174ddc={},_0x32137b={'count':0x0,'rows':[]};var _0x3148c6=db['VoiceContext'][_0x2d70('0x37')];_0x174ddc['model']=_[_0x2d70('0x38')](_0x3148c6);_0x174ddc[_0x2d70('0x39')]=_[_0x2d70('0x38')](_0x3cb1d2[_0x2d70('0x39')]);_0x174ddc[_0x2d70('0x3a')]=_[_0x2d70('0x3b')](_0x174ddc[_0x2d70('0x3c')],_0x174ddc[_0x2d70('0x39')]);_0x310dd2[_0x2d70('0x3d')]=_['intersection'](_0x174ddc[_0x2d70('0x3c')],qs['fields'](_0x3cb1d2[_0x2d70('0x39')][_0x2d70('0x3e')]));_0x310dd2[_0x2d70('0x3d')]=_0x310dd2[_0x2d70('0x3d')]['length']?_0x310dd2[_0x2d70('0x3d')]:_0x174ddc[_0x2d70('0x3c')];if(!_0x3cb1d2[_0x2d70('0x39')][_0x2d70('0x3f')]('nolimit')){_0x310dd2[_0x2d70('0x2b')]=qs['limit'](_0x3cb1d2['query'][_0x2d70('0x2b')]);_0x310dd2[_0x2d70('0x2a')]=qs[_0x2d70('0x2a')](_0x3cb1d2['query']['offset']);}_0x310dd2[_0x2d70('0x40')]=qs[_0x2d70('0x41')](_0x3cb1d2[_0x2d70('0x39')][_0x2d70('0x41')]);_0x310dd2[_0x2d70('0x42')]=qs[_0x2d70('0x3a')](_[_0x2d70('0x43')](_0x3cb1d2[_0x2d70('0x39')],_0x174ddc[_0x2d70('0x3a')]));if(_0x3cb1d2[_0x2d70('0x39')][_0x2d70('0x44')]){_0x310dd2[_0x2d70('0x42')]=_['merge'](_0x310dd2[_0x2d70('0x42')],{'$or':_['map'](_0x3148c6,function(_0x5e9406){if(_0x5e9406[_0x2d70('0x45')][_0x2d70('0x46')]!==_0x2d70('0x47')){var _0xf04c4b={};_0xf04c4b[_0x5e9406[_0x2d70('0x48')]]={'$like':'%'+_0x3cb1d2[_0x2d70('0x39')][_0x2d70('0x44')]+'%'};return _0xf04c4b;}})});}_0x310dd2=_['merge']({},_0x310dd2,_0x3cb1d2[_0x2d70('0x49')]);var _0x45a053={'where':_0x310dd2['where']};return db[_0x2d70('0x4a')][_0x2d70('0x29')](_0x45a053)[_0x2d70('0x30')](function(_0x2908f4){_0x32137b[_0x2d70('0x29')]=_0x2908f4;if(_0x3cb1d2[_0x2d70('0x39')]['includeAll']){_0x310dd2[_0x2d70('0x4b')]=[{'all':!![]}];}return db[_0x2d70('0x4a')]['findAll'](_0x310dd2);})['then'](function(_0x382c16){_0x32137b['rows']=_0x382c16;return _0x32137b;})[_0x2d70('0x30')](respondWithFilteredResult(_0x92d3fa,_0x310dd2))[_0x2d70('0x25')](handleError(_0x92d3fa,null));};exports[_0x2d70('0x4c')]=function(_0x414f64,_0x1ed231){var _0x42308b={'raw':![],'where':{'id':_0x414f64['params']['id']}},_0x417a09={};_0x417a09[_0x2d70('0x3c')]=_[_0x2d70('0x38')](db['VoiceContext'][_0x2d70('0x37')]);_0x417a09[_0x2d70('0x39')]=_[_0x2d70('0x38')](_0x414f64['query']);_0x417a09[_0x2d70('0x3a')]=_['intersection'](_0x417a09[_0x2d70('0x3c')],_0x417a09[_0x2d70('0x39')]);_0x42308b[_0x2d70('0x3d')]=_[_0x2d70('0x3b')](_0x417a09[_0x2d70('0x3c')],qs[_0x2d70('0x3e')](_0x414f64[_0x2d70('0x39')][_0x2d70('0x3e')]));_0x42308b[_0x2d70('0x3d')]=_0x42308b[_0x2d70('0x3d')][_0x2d70('0x4d')]?_0x42308b[_0x2d70('0x3d')]:_0x417a09[_0x2d70('0x3c')];if(_0x414f64[_0x2d70('0x39')]['includeAll']){_0x42308b[_0x2d70('0x4b')]=[{'all':!![]}];}_0x42308b=_[_0x2d70('0x4e')]({},_0x42308b,_0x414f64[_0x2d70('0x49')]);return db[_0x2d70('0x4a')][_0x2d70('0x4f')](_0x42308b)['then'](handleEntityNotFound(_0x1ed231,null))['then'](respondWithResult(_0x1ed231,null))[_0x2d70('0x25')](handleError(_0x1ed231,null));};exports['create']=function(_0x51afcc,_0x49b05d,_0x1207cd){var _0x35d64b;return db['VoiceContext'][_0x2d70('0x50')](_0x51afcc[_0x2d70('0x51')],{'raw':!![]})[_0x2d70('0x30')](function(_0x3232df){_0x35d64b=_0x3232df;return db[_0x2d70('0x4a')][_0x2d70('0x52')]({'raw':!![]});})[_0x2d70('0x30')](function(_0x2a255c){var _0x38be0e=fs['readFileSync'](path[_0x2d70('0x53')](config[_0x2d70('0x54')],_0x2d70('0x55')),'utf8');var _0x363e7a=ejs[_0x2d70('0x56')](_0x38be0e,{'contexts':_0x2a255c||[]});fs[_0x2d70('0x57')]('/etc/asterisk/extensions_xcally_contexts.conf',_0x363e7a);})[_0x2d70('0x30')](function(){return respondWithRpcPromise(_0x2d70('0x58'),_0x2d70('0x50'),{'module':'chan_sip.so'});})['then'](function(){var _0x5350bd=_0x51afcc[_0x2d70('0x59')][_0x2d70('0x5a')]({'plain':!![]});if(!_0x5350bd)throw new Error(_0x2d70('0x5b'));if(_0x5350bd[_0x2d70('0x5c')]===_0x2d70('0x59')){var _0x441f9d=_0x35d64b[_0x2d70('0x5a')]({'plain':!![]});return db[_0x2d70('0x5d')]['find']({'where':{'name':_0x2d70('0x31'),'userProfileId':_0x5350bd[_0x2d70('0x5e')]},'raw':!![]})[_0x2d70('0x30')](function(_0x61ddaf){if(_0x61ddaf&&_0x61ddaf['autoAssociation']===0x0){return db[_0x2d70('0x32')]['create']({'name':_0x441f9d[_0x2d70('0x35')],'resourceId':_0x441f9d['id'],'type':_0x61ddaf[_0x2d70('0x35')],'sectionId':_0x61ddaf['id']},{})[_0x2d70('0x30')](function(){return _0x35d64b;});}else{return _0x35d64b;}})['catch'](function(_0x293f5f){logger[_0x2d70('0x21')](_0x2d70('0x5f'),_0x293f5f);throw _0x293f5f;});}return _0x35d64b;})[_0x2d70('0x30')](respondWithResult(_0x49b05d,0xc9))['catch'](handleError(_0x49b05d,null));};exports[_0x2d70('0x2f')]=function(_0x4a02f9,_0x299fba,_0x36d74f){var _0x16e1cc;return db['VoiceContext'][_0x2d70('0x4f')]({'where':{'id':_0x4a02f9[_0x2d70('0x60')]['id']}})['then'](handleEntityNotFound(_0x299fba,null))[_0x2d70('0x30')](saveUpdates(_0x4a02f9[_0x2d70('0x51')],null))[_0x2d70('0x30')](function(_0x20e7b7){if(_0x20e7b7){_0x16e1cc=_0x20e7b7;return db['VoiceContext'][_0x2d70('0x52')]({'raw':!![]});}})['then'](function(_0x123e06){var _0x54b941=fs[_0x2d70('0x61')](path[_0x2d70('0x53')](config[_0x2d70('0x54')],_0x2d70('0x55')),_0x2d70('0x62'));var _0x3ef8e6=ejs[_0x2d70('0x56')](_0x54b941,{'contexts':_0x123e06||[]});fs[_0x2d70('0x57')](_0x2d70('0x63'),_0x3ef8e6);})[_0x2d70('0x30')](function(){return respondWithRpcPromise(_0x2d70('0x58'),_0x2d70('0x2f'),{'module':_0x2d70('0x64')});})[_0x2d70('0x30')](function(){return _0x16e1cc;})[_0x2d70('0x30')](respondWithResult(_0x299fba,null))['catch'](handleError(_0x299fba,null));};exports[_0x2d70('0x33')]=function(_0x699136,_0x4dd78d,_0x5c7d1c){var _0xe12b95;return db[_0x2d70('0x4a')][_0x2d70('0x4f')]({'where':{'id':_0x699136['params']['id']}})['then'](handleEntityNotFound(_0x4dd78d,null))[_0x2d70('0x30')](removeEntity(_0x4dd78d,null))[_0x2d70('0x30')](function(){return db['VoiceContext']['findAll']({'raw':!![]});})['then'](function(_0x20c2f9){var _0xecb6ba=fs['readFileSync'](path[_0x2d70('0x53')](config[_0x2d70('0x54')],_0x2d70('0x55')),_0x2d70('0x62'));var _0x2a07d3=ejs[_0x2d70('0x56')](_0xecb6ba,{'contexts':_0x20c2f9});fs[_0x2d70('0x57')](_0x2d70('0x63'),_0x2a07d3);return respondWithRpcPromise(_0x2d70('0x58'),'destroy',{'module':_0x2d70('0x64')});})[_0x2d70('0x25')](handleError(_0x4dd78d,null));};
\ No newline at end of file
index c6a2ec6..5a44520 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x736e=['voice_contexts','lodash','util','../../config/logger','api','moment','./voiceContext.attributes','exports','define','VoiceContext'];(function(_0x290335,_0x341397){var _0x4eb577=function(_0x3e9b79){while(--_0x3e9b79){_0x290335['push'](_0x290335['shift']());}};_0x4eb577(++_0x341397);}(_0x736e,0x191));var _0xe736=function(_0x117c07,_0x358e1d){_0x117c07=_0x117c07-0x0;var _0xb18ad3=_0x736e[_0x117c07];return _0xb18ad3;};'use strict';var _=require(_0xe736('0x0'));var util=require(_0xe736('0x1'));var logger=require(_0xe736('0x2'))(_0xe736('0x3'));var moment=require(_0xe736('0x4'));var BPromise=require('bluebird');var rp=require('request-promise');var attributes=require(_0xe736('0x5'));module[_0xe736('0x6')]=function(_0x25e96d,_0x4ac134){return _0x25e96d[_0xe736('0x7')](_0xe736('0x8'),attributes,{'tableName':_0xe736('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x2d05=['util','../../config/logger','moment','request-promise','exports','VoiceContext','voice_contexts','lodash'];(function(_0x5fa95a,_0x23df96){var _0x2c1383=function(_0x35a2be){while(--_0x35a2be){_0x5fa95a['push'](_0x5fa95a['shift']());}};_0x2c1383(++_0x23df96);}(_0x2d05,0x97));var _0x52d0=function(_0x46cd14,_0x4d29ce){_0x46cd14=_0x46cd14-0x0;var _0x1effe1=_0x2d05[_0x46cd14];return _0x1effe1;};'use strict';var _=require(_0x52d0('0x0'));var util=require(_0x52d0('0x1'));var logger=require(_0x52d0('0x2'))('api');var moment=require(_0x52d0('0x3'));var BPromise=require('bluebird');var rp=require(_0x52d0('0x4'));var attributes=require('./voiceContext.attributes');module[_0x52d0('0x5')]=function(_0x46e0a1,_0x4e67ff){return _0x46e0a1['define'](_0x52d0('0x6'),attributes,{'tableName':_0x52d0('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 349e64c..248049a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe648=['../../config/utils','../../config/logger','../../config/environment','jayson/promise','http','request','then','info','VoiceContext,\x20%s,\x20%s','VoiceContext,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','code','message','result','catch','lodash','util','moment','randomstring','ioredis','../../mysqldb'];(function(_0x31f4d5,_0x4e1fd4){var _0x96555b=function(_0xf35362){while(--_0xf35362){_0x31f4d5['push'](_0x31f4d5['shift']());}};_0x96555b(++_0x4e1fd4);}(_0xe648,0xb2));var _0x8e64=function(_0x5da298,_0x187254){_0x5da298=_0x5da298-0x0;var _0x24b8aa=_0xe648[_0x5da298];return _0x24b8aa;};'use strict';var _=require(_0x8e64('0x0'));var util=require(_0x8e64('0x1'));var moment=require(_0x8e64('0x2'));var BPromise=require('bluebird');var rs=require(_0x8e64('0x3'));var fs=require('fs');var Redis=require(_0x8e64('0x4'));var db=require(_0x8e64('0x5'))['db'];var utils=require(_0x8e64('0x6'));var logger=require(_0x8e64('0x7'))('rpc');var config=require(_0x8e64('0x8'));var jayson=require(_0x8e64('0x9'));var client=jayson['client'][_0x8e64('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2b608a,_0x96711e,_0x456aa8){return new BPromise(function(_0x42cd06,_0x2dfa60){return client[_0x8e64('0xb')](_0x2b608a,_0x456aa8)[_0x8e64('0xc')](function(_0x566695){logger[_0x8e64('0xd')](_0x8e64('0xe'),_0x96711e,'request\x20sent');logger['debug'](_0x8e64('0xf'),_0x96711e,_0x8e64('0x10'),JSON[_0x8e64('0x11')](_0x566695));if(_0x566695[_0x8e64('0x12')]){if(_0x566695[_0x8e64('0x12')][_0x8e64('0x13')]===0x1f4){logger[_0x8e64('0x12')](_0x8e64('0xe'),_0x96711e,_0x566695[_0x8e64('0x12')][_0x8e64('0x14')]);return _0x2dfa60(_0x566695[_0x8e64('0x12')][_0x8e64('0x14')]);}logger[_0x8e64('0x12')](_0x8e64('0xe'),_0x96711e,_0x566695[_0x8e64('0x12')][_0x8e64('0x14')]);return _0x42cd06(_0x566695[_0x8e64('0x12')][_0x8e64('0x14')]);}else{logger[_0x8e64('0xd')](_0x8e64('0xe'),_0x96711e,_0x8e64('0x10'));_0x42cd06(_0x566695[_0x8e64('0x15')][_0x8e64('0x14')]);}})[_0x8e64('0x16')](function(_0x3b6744){logger[_0x8e64('0x12')](_0x8e64('0xe'),_0x96711e,_0x3b6744);_0x2dfa60(_0x3b6744);});});}
\ No newline at end of file
+var _0xc3eb=['http','request','info','request\x20sent','debug','VoiceContext,\x20%s,\x20%s,\x20%s','stringify','error','code','message','VoiceContext,\x20%s,\x20%s','result','catch','lodash','util','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','client'];(function(_0x27250c,_0x3e6637){var _0x7e3095=function(_0x1bbce7){while(--_0x1bbce7){_0x27250c['push'](_0x27250c['shift']());}};_0x7e3095(++_0x3e6637);}(_0xc3eb,0x194));var _0xbc3e=function(_0x35d4e9,_0x298c61){_0x35d4e9=_0x35d4e9-0x0;var _0x5c2770=_0xc3eb[_0x35d4e9];return _0x5c2770;};'use strict';var _=require(_0xbc3e('0x0'));var util=require(_0xbc3e('0x1'));var moment=require(_0xbc3e('0x2'));var BPromise=require(_0xbc3e('0x3'));var rs=require(_0xbc3e('0x4'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xbc3e('0x5'))['db'];var utils=require(_0xbc3e('0x6'));var logger=require('../../config/logger')(_0xbc3e('0x7'));var config=require(_0xbc3e('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xbc3e('0x9')][_0xbc3e('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x98f172,_0x32b1ad,_0x1bb05b){return new BPromise(function(_0x2daceb,_0x66ce9a){return client[_0xbc3e('0xb')](_0x98f172,_0x1bb05b)['then'](function(_0x22c17a){logger[_0xbc3e('0xc')]('VoiceContext,\x20%s,\x20%s',_0x32b1ad,_0xbc3e('0xd'));logger[_0xbc3e('0xe')](_0xbc3e('0xf'),_0x32b1ad,_0xbc3e('0xd'),JSON[_0xbc3e('0x10')](_0x22c17a));if(_0x22c17a[_0xbc3e('0x11')]){if(_0x22c17a[_0xbc3e('0x11')][_0xbc3e('0x12')]===0x1f4){logger[_0xbc3e('0x11')]('VoiceContext,\x20%s,\x20%s',_0x32b1ad,_0x22c17a[_0xbc3e('0x11')][_0xbc3e('0x13')]);return _0x66ce9a(_0x22c17a['error'][_0xbc3e('0x13')]);}logger['error'](_0xbc3e('0x14'),_0x32b1ad,_0x22c17a['error']['message']);return _0x2daceb(_0x22c17a[_0xbc3e('0x11')]['message']);}else{logger[_0xbc3e('0xc')](_0xbc3e('0x14'),_0x32b1ad,_0xbc3e('0xd'));_0x2daceb(_0x22c17a[_0xbc3e('0x15')][_0xbc3e('0x13')]);}})[_0xbc3e('0x16')](function(_0x642ada){logger['error'](_0xbc3e('0x14'),_0x32b1ad,_0x642ada);_0x66ce9a(_0x642ada);});});}
\ No newline at end of file
index 248d286..a0ce689 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd893=['multer','util','express','Router','../../components/interaction/service','../../config/environment','./voiceDialReport.controller','get','isAuthenticated','/describe','describe','show','create','put','/:id','delete','destroy','exports'];(function(_0x1816fc,_0x1ce749){var _0x1a3fff=function(_0x11a9cf){while(--_0x11a9cf){_0x1816fc['push'](_0x1816fc['shift']());}};_0x1a3fff(++_0x1ce749);}(_0xd893,0x168));var _0x3d89=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xd893[_0x19e35c];return _0x3e1fe8;};'use strict';var multer=require(_0x3d89('0x0'));var util=require(_0x3d89('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0x3d89('0x2'));var router=express[_0x3d89('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0x3d89('0x4'));var config=require(_0x3d89('0x5'));var controller=require(_0x3d89('0x6'));router[_0x3d89('0x7')]('/',auth[_0x3d89('0x8')](),controller['index']);router[_0x3d89('0x7')](_0x3d89('0x9'),auth[_0x3d89('0x8')](),controller[_0x3d89('0xa')]);router[_0x3d89('0x7')]('/:id',auth[_0x3d89('0x8')](),controller[_0x3d89('0xb')]);router['post']('/',auth[_0x3d89('0x8')](),controller[_0x3d89('0xc')]);router[_0x3d89('0xd')](_0x3d89('0xe'),auth[_0x3d89('0x8')](),controller['update']);router[_0x3d89('0xf')]('/:id',auth[_0x3d89('0x8')](),controller[_0x3d89('0x10')]);module[_0x3d89('0x11')]=router;
\ No newline at end of file
+var _0x7474=['isAuthenticated','index','/:id','show','post','create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','get'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x7474,0x6f));var _0x4747=function(_0x2d015b,_0x455b26){_0x2d015b=_0x2d015b-0x0;var _0x2b8aa7=_0x7474[_0x2d015b];return _0x2b8aa7;};'use strict';var multer=require(_0x4747('0x0'));var util=require(_0x4747('0x1'));var path=require(_0x4747('0x2'));var timeout=require(_0x4747('0x3'));var express=require(_0x4747('0x4'));var router=express[_0x4747('0x5')]();var auth=require(_0x4747('0x6'));var interaction=require(_0x4747('0x7'));var config=require('../../config/environment');var controller=require('./voiceDialReport.controller');router[_0x4747('0x8')]('/',auth[_0x4747('0x9')](),controller[_0x4747('0xa')]);router['get']('/describe',auth['isAuthenticated'](),controller['describe']);router[_0x4747('0x8')](_0x4747('0xb'),auth['isAuthenticated'](),controller[_0x4747('0xc')]);router[_0x4747('0xd')]('/',auth[_0x4747('0x9')](),controller[_0x4747('0xe')]);router[_0x4747('0xf')](_0x4747('0xb'),auth[_0x4747('0x9')](),controller[_0x4747('0x10')]);router[_0x4747('0x11')](_0x4747('0xb'),auth['isAuthenticated'](),controller[_0x4747('0x12')]);module[_0x4747('0x13')]=router;
\ No newline at end of file
index 582803a..f9a435c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8e00=['sequelize','STRING','INTEGER','DATE','called,connect,complete'];(function(_0x4a1353,_0x2fbe86){var _0x3805cc=function(_0x39a7ee){while(--_0x39a7ee){_0x4a1353['push'](_0x4a1353['shift']());}};_0x3805cc(++_0x2fbe86);}(_0x8e00,0x159));var _0x08e0=function(_0x21f3ab,_0x3d1567){_0x21f3ab=_0x21f3ab-0x0;var _0x47970d=_0x8e00[_0x21f3ab];return _0x47970d;};'use strict';var Sequelize=require(_0x08e0('0x0'));module['exports']={'privilege':{'type':Sequelize[_0x08e0('0x1')]},'channel':{'type':Sequelize['STRING']},'channelstate':{'type':Sequelize['INTEGER']},'channelstatedesc':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize[_0x08e0('0x1')]},'calleridname':{'type':Sequelize[_0x08e0('0x1')]},'connectedlinenum':{'type':Sequelize[_0x08e0('0x1')]},'connectedlinename':{'type':Sequelize['STRING']},'language':{'type':Sequelize[_0x08e0('0x1')]},'accountcode':{'type':Sequelize[_0x08e0('0x1')]},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize[_0x08e0('0x1')]},'priority':{'type':Sequelize[_0x08e0('0x2')]},'uniqueid':{'type':Sequelize[_0x08e0('0x1')]},'linkedid':{'type':Sequelize[_0x08e0('0x1')]},'destchannel':{'type':Sequelize['STRING']},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize[_0x08e0('0x1')]},'destcalleridnum':{'type':Sequelize[_0x08e0('0x1')]},'destcalleridname':{'type':Sequelize[_0x08e0('0x1')]},'destconnectedlinenum':{'type':Sequelize['STRING']},'destconnectedlinename':{'type':Sequelize[_0x08e0('0x1')]},'destlanguage':{'type':Sequelize['STRING']},'destaccountcode':{'type':Sequelize[_0x08e0('0x1')]},'destcontext':{'type':Sequelize[_0x08e0('0x1')]},'destexten':{'type':Sequelize[_0x08e0('0x1')]},'destpriority':{'type':Sequelize[_0x08e0('0x2')]},'destuniqueid':{'type':Sequelize[_0x08e0('0x1')]},'destlinkedid':{'type':Sequelize[_0x08e0('0x1')]},'dialstring':{'type':Sequelize[_0x08e0('0x1')]},'dialstatus':{'type':Sequelize[_0x08e0('0x1')]},'starttime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0x08e0('0x3')]},'endtime':{'type':Sequelize[_0x08e0('0x3')]},'lastevent':{'type':Sequelize[_0x08e0('0x1')],'comment':_0x08e0('0x4')},'routeId':{'type':Sequelize[_0x08e0('0x2')]},'duration':{'type':Sequelize[_0x08e0('0x2')]},'holdtime':{'type':Sequelize[_0x08e0('0x2')]},'billableseconds':{'type':Sequelize[_0x08e0('0x2')]}};
\ No newline at end of file
+var _0x0c38=['exports','STRING','INTEGER','DATE','called,connect,complete'];(function(_0x11f0e3,_0x5170bc){var _0x2892e8=function(_0x3292b2){while(--_0x3292b2){_0x11f0e3['push'](_0x11f0e3['shift']());}};_0x2892e8(++_0x5170bc);}(_0x0c38,0xa5));var _0x80c3=function(_0x1b5117,_0x5c6221){_0x1b5117=_0x1b5117-0x0;var _0x3cf335=_0x0c38[_0x1b5117];return _0x3cf335;};'use strict';var Sequelize=require('sequelize');module[_0x80c3('0x0')]={'privilege':{'type':Sequelize['STRING']},'channel':{'type':Sequelize[_0x80c3('0x1')]},'channelstate':{'type':Sequelize[_0x80c3('0x2')]},'channelstatedesc':{'type':Sequelize['STRING']},'calleridnum':{'type':Sequelize['STRING']},'calleridname':{'type':Sequelize[_0x80c3('0x1')]},'connectedlinenum':{'type':Sequelize[_0x80c3('0x1')]},'connectedlinename':{'type':Sequelize[_0x80c3('0x1')]},'language':{'type':Sequelize[_0x80c3('0x1')]},'accountcode':{'type':Sequelize['STRING']},'context':{'type':Sequelize[_0x80c3('0x1')]},'exten':{'type':Sequelize[_0x80c3('0x1')]},'priority':{'type':Sequelize[_0x80c3('0x2')]},'uniqueid':{'type':Sequelize[_0x80c3('0x1')]},'linkedid':{'type':Sequelize[_0x80c3('0x1')]},'destchannel':{'type':Sequelize['STRING']},'destchannelstate':{'type':Sequelize['INTEGER']},'destchannelstatedesc':{'type':Sequelize[_0x80c3('0x1')]},'destcalleridnum':{'type':Sequelize['STRING']},'destcalleridname':{'type':Sequelize['STRING']},'destconnectedlinenum':{'type':Sequelize[_0x80c3('0x1')]},'destconnectedlinename':{'type':Sequelize[_0x80c3('0x1')]},'destlanguage':{'type':Sequelize[_0x80c3('0x1')]},'destaccountcode':{'type':Sequelize[_0x80c3('0x1')]},'destcontext':{'type':Sequelize[_0x80c3('0x1')]},'destexten':{'type':Sequelize[_0x80c3('0x1')]},'destpriority':{'type':Sequelize[_0x80c3('0x2')]},'destuniqueid':{'type':Sequelize[_0x80c3('0x1')]},'destlinkedid':{'type':Sequelize[_0x80c3('0x1')]},'dialstring':{'type':Sequelize[_0x80c3('0x1')]},'dialstatus':{'type':Sequelize[_0x80c3('0x1')]},'starttime':{'type':Sequelize['DATE']},'answertime':{'type':Sequelize[_0x80c3('0x3')]},'endtime':{'type':Sequelize['DATE']},'lastevent':{'type':Sequelize[_0x80c3('0x1')],'comment':_0x80c3('0x4')},'routeId':{'type':Sequelize['INTEGER']},'duration':{'type':Sequelize[_0x80c3('0x2')]},'holdtime':{'type':Sequelize['INTEGER']},'billableseconds':{'type':Sequelize[_0x80c3('0x2')]}};
\ No newline at end of file
index 0d97ba9..c4ba9e5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb1df=['show','params','find','create','body','describe','html-pdf','eml-format','zip-dir','request-promise','moment','bluebird','mustache','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','Content-Range','reject','save','update','then','destroy','error','stack','name','send','VoiceDialReport','rawAttributes','model','keys','query','filters','intersection','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','where','pick','map','key','field','filter','merge','options','includeAll','include','findAll','catch'];(function(_0x3b952c,_0x513458){var _0xbfdf3f=function(_0x412bfb){while(--_0x412bfb){_0x3b952c['push'](_0x3b952c['shift']());}};_0xbfdf3f(++_0x513458);}(_0xb1df,0xe4));var _0xfb1d=function(_0x57c4ad,_0x31c767){_0x57c4ad=_0x57c4ad-0x0;var _0x2a3f07=_0xb1df[_0x57c4ad];return _0x2a3f07;};'use strict';var pdf=require(_0xfb1d('0x0'));var emlformat=require(_0xfb1d('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xfb1d('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0xfb1d('0x3'));var moment=require(_0xfb1d('0x4'));var BPromise=require(_0xfb1d('0x5'));var Mustache=require(_0xfb1d('0x6'));var util=require('util');var path=require('path');var sox=require('sox');var csv=require('to-csv');var ejs=require(_0xfb1d('0x7'));var fs=require('fs');var _=require(_0xfb1d('0x8'));var squel=require(_0xfb1d('0x9'));var crypto=require(_0xfb1d('0xa'));var jsforce=require(_0xfb1d('0xb'));var deskjs=require(_0xfb1d('0xc'));var toCsv=require(_0xfb1d('0xd'));var querystring=require(_0xfb1d('0xe'));var Papa=require(_0xfb1d('0xf'));var authService=require(_0xfb1d('0x10'));var hardwareService=require(_0xfb1d('0x11'));var Redis=require(_0xfb1d('0x12'));var qs=require(_0xfb1d('0x13'));var logger=require(_0xfb1d('0x14'))(_0xfb1d('0x15'));var utils=require(_0xfb1d('0x16'));var config=require(_0xfb1d('0x17'));var db=require(_0xfb1d('0x18'))['db'];function respondWithStatusCode(_0x199f47,_0x2eee1d){_0x2eee1d=_0x2eee1d||0xcc;return function(_0x3ab1b9){if(_0x3ab1b9){return _0x199f47[_0xfb1d('0x19')](_0x2eee1d);}return _0x199f47[_0xfb1d('0x1a')](_0x2eee1d)[_0xfb1d('0x1b')]();};}function respondWithResult(_0x14b463,_0xdfc581){_0xdfc581=_0xdfc581||0xc8;return function(_0x3f0013){if(_0x3f0013){return _0x14b463['status'](_0xdfc581)[_0xfb1d('0x1c')](_0x3f0013);}};}function respondWithFilteredResult(_0x5ab1af,_0x5a7d6b){return function(_0xb1abca){if(_0xb1abca){var _0x5ea8a3=_0xb1abca[_0xfb1d('0x1d')],_0x13053d=_0x5a7d6b['offset'],_0x424461=_0x5a7d6b[_0xfb1d('0x1e')]+_0x5a7d6b['limit'],_0x40eae2;if(_0x424461>=_0x5ea8a3){_0x424461=_0x5ea8a3;_0x40eae2=0xc8;}else{_0x40eae2=0xce;}_0x5ab1af[_0xfb1d('0x1a')](_0x40eae2);return _0x5ab1af['set'](_0xfb1d('0x1f'),_0x13053d+'-'+_0x424461+'/'+_0x5ea8a3)[_0xfb1d('0x1c')](_0xb1abca);}return null;};}function patchUpdates(_0x4db8d7){return function(_0xf7ccf9){try{jsonpatch['apply'](_0xf7ccf9,_0x4db8d7,!![]);}catch(_0x11798e){return BPromise[_0xfb1d('0x20')](_0x11798e);}return _0xf7ccf9[_0xfb1d('0x21')]();};}function saveUpdates(_0x338948,_0x1b47f8){return function(_0x696aec){if(_0x696aec){return _0x696aec[_0xfb1d('0x22')](_0x338948)[_0xfb1d('0x23')](function(_0x2f89c7){return _0x2f89c7;});}return null;};}function removeEntity(_0x554278,_0x2bb6de){return function(_0x2166dc){if(_0x2166dc){return _0x2166dc[_0xfb1d('0x24')]()[_0xfb1d('0x23')](function(){_0x554278[_0xfb1d('0x1a')](0xcc)[_0xfb1d('0x1b')]();});}};}function handleEntityNotFound(_0x391912,_0x5d4cdb){return function(_0x477239){if(!_0x477239){_0x391912[_0xfb1d('0x19')](0x194);}return _0x477239;};}function handleError(_0x192be3,_0x10e64d){_0x10e64d=_0x10e64d||0x1f4;return function(_0x203738){logger[_0xfb1d('0x25')](_0x203738[_0xfb1d('0x26')]);if(_0x203738[_0xfb1d('0x27')]){delete _0x203738['name'];}_0x192be3['status'](_0x10e64d)[_0xfb1d('0x28')](_0x203738);};}exports['index']=function(_0x5c9fd6,_0x5e842b){var _0x5a8411={},_0x322a99={},_0x256290={'count':0x0,'rows':[]};var _0x1754bf=db[_0xfb1d('0x29')][_0xfb1d('0x2a')];_0x322a99[_0xfb1d('0x2b')]=_[_0xfb1d('0x2c')](_0x1754bf);_0x322a99[_0xfb1d('0x2d')]=_['keys'](_0x5c9fd6['query']);_0x322a99[_0xfb1d('0x2e')]=_['intersection'](_0x322a99[_0xfb1d('0x2b')],_0x322a99[_0xfb1d('0x2d')]);_0x5a8411['attributes']=_[_0xfb1d('0x2f')](_0x322a99[_0xfb1d('0x2b')],qs['fields'](_0x5c9fd6[_0xfb1d('0x2d')][_0xfb1d('0x30')]));_0x5a8411[_0xfb1d('0x31')]=_0x5a8411[_0xfb1d('0x31')][_0xfb1d('0x32')]?_0x5a8411[_0xfb1d('0x31')]:_0x322a99[_0xfb1d('0x2b')];if(!_0x5c9fd6[_0xfb1d('0x2d')][_0xfb1d('0x33')](_0xfb1d('0x34'))){_0x5a8411[_0xfb1d('0x35')]=qs[_0xfb1d('0x35')](_0x5c9fd6[_0xfb1d('0x2d')]['limit']);_0x5a8411['offset']=qs[_0xfb1d('0x1e')](_0x5c9fd6['query'][_0xfb1d('0x1e')]);}_0x5a8411[_0xfb1d('0x36')]=qs[_0xfb1d('0x37')](_0x5c9fd6[_0xfb1d('0x2d')][_0xfb1d('0x37')]);_0x5a8411[_0xfb1d('0x38')]=qs['filters'](_[_0xfb1d('0x39')](_0x5c9fd6['query'],_0x322a99[_0xfb1d('0x2e')]));if(_0x5c9fd6[_0xfb1d('0x2d')]['filter']){_0x5a8411[_0xfb1d('0x38')]=_['merge'](_0x5a8411[_0xfb1d('0x38')],{'$or':_[_0xfb1d('0x3a')](_0x1754bf,function(_0x33cb37){if(_0x33cb37['type'][_0xfb1d('0x3b')]!=='VIRTUAL'){var _0x1f0feb={};_0x1f0feb[_0x33cb37[_0xfb1d('0x3c')]]={'$like':'%'+_0x5c9fd6['query'][_0xfb1d('0x3d')]+'%'};return _0x1f0feb;}})});}_0x5a8411=_[_0xfb1d('0x3e')]({},_0x5a8411,_0x5c9fd6[_0xfb1d('0x3f')]);var _0x4c97a3={'where':_0x5a8411[_0xfb1d('0x38')]};return db[_0xfb1d('0x29')][_0xfb1d('0x1d')](_0x4c97a3)[_0xfb1d('0x23')](function(_0x3465e4){_0x256290[_0xfb1d('0x1d')]=_0x3465e4;if(_0x5c9fd6[_0xfb1d('0x2d')][_0xfb1d('0x40')]){_0x5a8411[_0xfb1d('0x41')]=[{'all':!![]}];}return db[_0xfb1d('0x29')][_0xfb1d('0x42')](_0x5a8411);})['then'](function(_0x38f859){_0x256290['rows']=_0x38f859;return _0x256290;})[_0xfb1d('0x23')](respondWithFilteredResult(_0x5e842b,_0x5a8411))[_0xfb1d('0x43')](handleError(_0x5e842b,null));};exports[_0xfb1d('0x44')]=function(_0x2c7124,_0x4c7b88){var _0x578f9a={'raw':!![],'where':{'id':_0x2c7124[_0xfb1d('0x45')]['id']}},_0x635df7={};_0x635df7[_0xfb1d('0x2b')]=_[_0xfb1d('0x2c')](db[_0xfb1d('0x29')][_0xfb1d('0x2a')]);_0x635df7[_0xfb1d('0x2d')]=_[_0xfb1d('0x2c')](_0x2c7124['query']);_0x635df7[_0xfb1d('0x2e')]=_['intersection'](_0x635df7[_0xfb1d('0x2b')],_0x635df7[_0xfb1d('0x2d')]);_0x578f9a[_0xfb1d('0x31')]=_[_0xfb1d('0x2f')](_0x635df7[_0xfb1d('0x2b')],qs['fields'](_0x2c7124['query'][_0xfb1d('0x30')]));_0x578f9a[_0xfb1d('0x31')]=_0x578f9a[_0xfb1d('0x31')][_0xfb1d('0x32')]?_0x578f9a[_0xfb1d('0x31')]:_0x635df7[_0xfb1d('0x2b')];if(_0x2c7124[_0xfb1d('0x2d')]['includeAll']){_0x578f9a['include']=[{'all':!![]}];}_0x578f9a=_[_0xfb1d('0x3e')]({},_0x578f9a,_0x2c7124[_0xfb1d('0x3f')]);return db[_0xfb1d('0x29')][_0xfb1d('0x46')](_0x578f9a)['then'](handleEntityNotFound(_0x4c7b88,null))[_0xfb1d('0x23')](respondWithResult(_0x4c7b88,null))[_0xfb1d('0x43')](handleError(_0x4c7b88,null));};exports[_0xfb1d('0x47')]=function(_0x12827d,_0x2326ff){return db[_0xfb1d('0x29')][_0xfb1d('0x47')](_0x12827d[_0xfb1d('0x48')],{})[_0xfb1d('0x23')](respondWithResult(_0x2326ff,0xc9))[_0xfb1d('0x43')](handleError(_0x2326ff,null));};exports['update']=function(_0x19852d,_0x2357fd){if(_0x19852d['body']['id']){delete _0x19852d['body']['id'];}return db[_0xfb1d('0x29')][_0xfb1d('0x46')]({'where':{'id':_0x19852d[_0xfb1d('0x45')]['id']}})[_0xfb1d('0x23')](handleEntityNotFound(_0x2357fd,null))[_0xfb1d('0x23')](saveUpdates(_0x19852d['body'],null))[_0xfb1d('0x23')](respondWithResult(_0x2357fd,null))[_0xfb1d('0x43')](handleError(_0x2357fd,null));};exports['destroy']=function(_0x562eec,_0x5dd3db){return db[_0xfb1d('0x29')][_0xfb1d('0x46')]({'where':{'id':_0x562eec[_0xfb1d('0x45')]['id']}})['then'](handleEntityNotFound(_0x5dd3db,null))['then'](removeEntity(_0x5dd3db,null))[_0xfb1d('0x43')](handleError(_0x5dd3db,null));};exports[_0xfb1d('0x49')]=function(_0x1c7df8,_0x18488d){return db[_0xfb1d('0x29')][_0xfb1d('0x49')]()[_0xfb1d('0x23')](respondWithResult(_0x18488d,null))[_0xfb1d('0x43')](handleError(_0x18488d,null));};
\ No newline at end of file
+var _0xb1af=['ioredis','api','../../config/utils','../../config/environment','sendStatus','status','end','json','count','limit','Content-Range','apply','reject','save','then','error','stack','name','send','index','VoiceDialReport','keys','intersection','query','attributes','model','fields','length','nolimit','offset','order','where','filters','pick','filter','map','type','key','VIRTUAL','merge','options','includeAll','include','rows','show','params','rawAttributes','find','catch','create','body','update','destroy','describe','html-pdf','eml-format','zip-dir','fast-json-patch','moment','mustache','util','path','sox','lodash','squel','crypto','jsforce','../../config/license/hardware'];(function(_0x70cd0c,_0x385194){var _0x2effd5=function(_0x4800de){while(--_0x4800de){_0x70cd0c['push'](_0x70cd0c['shift']());}};_0x2effd5(++_0x385194);}(_0xb1af,0x1ce));var _0xfb1a=function(_0x34b142,_0x5e8ba7){_0x34b142=_0x34b142-0x0;var _0x43ad99=_0xb1af[_0x34b142];return _0x43ad99;};'use strict';var pdf=require(_0xfb1a('0x0'));var emlformat=require(_0xfb1a('0x1'));var rimraf=require('rimraf');var zipdir=require(_0xfb1a('0x2'));var jsonpatch=require(_0xfb1a('0x3'));var rp=require('request-promise');var moment=require(_0xfb1a('0x4'));var BPromise=require('bluebird');var Mustache=require(_0xfb1a('0x5'));var util=require(_0xfb1a('0x6'));var path=require(_0xfb1a('0x7'));var sox=require(_0xfb1a('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xfb1a('0x9'));var squel=require(_0xfb1a('0xa'));var crypto=require(_0xfb1a('0xb'));var jsforce=require(_0xfb1a('0xc'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0xfb1a('0xd'));var Redis=require(_0xfb1a('0xe'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0xfb1a('0xf'));var utils=require(_0xfb1a('0x10'));var config=require(_0xfb1a('0x11'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x2ca7b3,_0x3d59f2){_0x3d59f2=_0x3d59f2||0xcc;return function(_0x3bc15e){if(_0x3bc15e){return _0x2ca7b3[_0xfb1a('0x12')](_0x3d59f2);}return _0x2ca7b3[_0xfb1a('0x13')](_0x3d59f2)[_0xfb1a('0x14')]();};}function respondWithResult(_0x37c3db,_0xc4d7){_0xc4d7=_0xc4d7||0xc8;return function(_0x481d70){if(_0x481d70){return _0x37c3db[_0xfb1a('0x13')](_0xc4d7)[_0xfb1a('0x15')](_0x481d70);}};}function respondWithFilteredResult(_0x660e6a,_0x1e6d75){return function(_0x554b0d){if(_0x554b0d){var _0x5a4a68=_0x554b0d[_0xfb1a('0x16')],_0x12193f=_0x1e6d75['offset'],_0x5d1a70=_0x1e6d75['offset']+_0x1e6d75[_0xfb1a('0x17')],_0x54c3c6;if(_0x5d1a70>=_0x5a4a68){_0x5d1a70=_0x5a4a68;_0x54c3c6=0xc8;}else{_0x54c3c6=0xce;}_0x660e6a[_0xfb1a('0x13')](_0x54c3c6);return _0x660e6a['set'](_0xfb1a('0x18'),_0x12193f+'-'+_0x5d1a70+'/'+_0x5a4a68)[_0xfb1a('0x15')](_0x554b0d);}return null;};}function patchUpdates(_0x36b1f4){return function(_0x5b5d98){try{jsonpatch[_0xfb1a('0x19')](_0x5b5d98,_0x36b1f4,!![]);}catch(_0x1170a9){return BPromise[_0xfb1a('0x1a')](_0x1170a9);}return _0x5b5d98[_0xfb1a('0x1b')]();};}function saveUpdates(_0x24803f,_0x35b7a2){return function(_0x25592e){if(_0x25592e){return _0x25592e['update'](_0x24803f)[_0xfb1a('0x1c')](function(_0x561214){return _0x561214;});}return null;};}function removeEntity(_0xae655b,_0x6f2221){return function(_0x43f1a1){if(_0x43f1a1){return _0x43f1a1['destroy']()[_0xfb1a('0x1c')](function(){_0xae655b[_0xfb1a('0x13')](0xcc)[_0xfb1a('0x14')]();});}};}function handleEntityNotFound(_0x43d246,_0x3c9545){return function(_0x5a8e79){if(!_0x5a8e79){_0x43d246['sendStatus'](0x194);}return _0x5a8e79;};}function handleError(_0x1e6f51,_0x1db38a){_0x1db38a=_0x1db38a||0x1f4;return function(_0x3924a1){logger[_0xfb1a('0x1d')](_0x3924a1[_0xfb1a('0x1e')]);if(_0x3924a1[_0xfb1a('0x1f')]){delete _0x3924a1['name'];}_0x1e6f51['status'](_0x1db38a)[_0xfb1a('0x20')](_0x3924a1);};}exports[_0xfb1a('0x21')]=function(_0xdae799,_0x2b9ff1){var _0x22d758={},_0x617e2b={},_0x58bd01={'count':0x0,'rows':[]};var _0x4b2c94=db[_0xfb1a('0x22')]['rawAttributes'];_0x617e2b['model']=_[_0xfb1a('0x23')](_0x4b2c94);_0x617e2b['query']=_['keys'](_0xdae799['query']);_0x617e2b['filters']=_[_0xfb1a('0x24')](_0x617e2b['model'],_0x617e2b[_0xfb1a('0x25')]);_0x22d758[_0xfb1a('0x26')]=_[_0xfb1a('0x24')](_0x617e2b[_0xfb1a('0x27')],qs[_0xfb1a('0x28')](_0xdae799[_0xfb1a('0x25')][_0xfb1a('0x28')]));_0x22d758['attributes']=_0x22d758['attributes'][_0xfb1a('0x29')]?_0x22d758[_0xfb1a('0x26')]:_0x617e2b['model'];if(!_0xdae799[_0xfb1a('0x25')]['hasOwnProperty'](_0xfb1a('0x2a'))){_0x22d758[_0xfb1a('0x17')]=qs['limit'](_0xdae799[_0xfb1a('0x25')][_0xfb1a('0x17')]);_0x22d758['offset']=qs[_0xfb1a('0x2b')](_0xdae799[_0xfb1a('0x25')][_0xfb1a('0x2b')]);}_0x22d758[_0xfb1a('0x2c')]=qs['sort'](_0xdae799[_0xfb1a('0x25')]['sort']);_0x22d758[_0xfb1a('0x2d')]=qs[_0xfb1a('0x2e')](_[_0xfb1a('0x2f')](_0xdae799[_0xfb1a('0x25')],_0x617e2b['filters']));if(_0xdae799[_0xfb1a('0x25')][_0xfb1a('0x30')]){_0x22d758[_0xfb1a('0x2d')]=_['merge'](_0x22d758['where'],{'$or':_[_0xfb1a('0x31')](_0x4b2c94,function(_0x2db924){if(_0x2db924[_0xfb1a('0x32')][_0xfb1a('0x33')]!==_0xfb1a('0x34')){var _0x162f69={};_0x162f69[_0x2db924['field']]={'$like':'%'+_0xdae799[_0xfb1a('0x25')]['filter']+'%'};return _0x162f69;}})});}_0x22d758=_[_0xfb1a('0x35')]({},_0x22d758,_0xdae799[_0xfb1a('0x36')]);var _0x5389f0={'where':_0x22d758[_0xfb1a('0x2d')]};return db['VoiceDialReport'][_0xfb1a('0x16')](_0x5389f0)[_0xfb1a('0x1c')](function(_0x31f09e){_0x58bd01[_0xfb1a('0x16')]=_0x31f09e;if(_0xdae799[_0xfb1a('0x25')][_0xfb1a('0x37')]){_0x22d758[_0xfb1a('0x38')]=[{'all':!![]}];}return db[_0xfb1a('0x22')]['findAll'](_0x22d758);})[_0xfb1a('0x1c')](function(_0x42c049){_0x58bd01[_0xfb1a('0x39')]=_0x42c049;return _0x58bd01;})[_0xfb1a('0x1c')](respondWithFilteredResult(_0x2b9ff1,_0x22d758))['catch'](handleError(_0x2b9ff1,null));};exports[_0xfb1a('0x3a')]=function(_0x49ee60,_0x50d3ab){var _0xee22ff={'raw':!![],'where':{'id':_0x49ee60[_0xfb1a('0x3b')]['id']}},_0x3a709f={};_0x3a709f[_0xfb1a('0x27')]=_['keys'](db['VoiceDialReport'][_0xfb1a('0x3c')]);_0x3a709f[_0xfb1a('0x25')]=_[_0xfb1a('0x23')](_0x49ee60['query']);_0x3a709f[_0xfb1a('0x2e')]=_[_0xfb1a('0x24')](_0x3a709f['model'],_0x3a709f['query']);_0xee22ff[_0xfb1a('0x26')]=_['intersection'](_0x3a709f[_0xfb1a('0x27')],qs[_0xfb1a('0x28')](_0x49ee60[_0xfb1a('0x25')]['fields']));_0xee22ff[_0xfb1a('0x26')]=_0xee22ff['attributes'][_0xfb1a('0x29')]?_0xee22ff[_0xfb1a('0x26')]:_0x3a709f[_0xfb1a('0x27')];if(_0x49ee60[_0xfb1a('0x25')]['includeAll']){_0xee22ff[_0xfb1a('0x38')]=[{'all':!![]}];}_0xee22ff=_[_0xfb1a('0x35')]({},_0xee22ff,_0x49ee60[_0xfb1a('0x36')]);return db['VoiceDialReport'][_0xfb1a('0x3d')](_0xee22ff)[_0xfb1a('0x1c')](handleEntityNotFound(_0x50d3ab,null))[_0xfb1a('0x1c')](respondWithResult(_0x50d3ab,null))[_0xfb1a('0x3e')](handleError(_0x50d3ab,null));};exports[_0xfb1a('0x3f')]=function(_0x5df135,_0x29a3c7){return db[_0xfb1a('0x22')]['create'](_0x5df135[_0xfb1a('0x40')],{})[_0xfb1a('0x1c')](respondWithResult(_0x29a3c7,0xc9))[_0xfb1a('0x3e')](handleError(_0x29a3c7,null));};exports[_0xfb1a('0x41')]=function(_0x660a66,_0x28a34c){if(_0x660a66[_0xfb1a('0x40')]['id']){delete _0x660a66[_0xfb1a('0x40')]['id'];}return db[_0xfb1a('0x22')][_0xfb1a('0x3d')]({'where':{'id':_0x660a66['params']['id']}})[_0xfb1a('0x1c')](handleEntityNotFound(_0x28a34c,null))[_0xfb1a('0x1c')](saveUpdates(_0x660a66['body'],null))[_0xfb1a('0x1c')](respondWithResult(_0x28a34c,null))[_0xfb1a('0x3e')](handleError(_0x28a34c,null));};exports[_0xfb1a('0x42')]=function(_0x23c931,_0x57611b){return db['VoiceDialReport']['find']({'where':{'id':_0x23c931[_0xfb1a('0x3b')]['id']}})['then'](handleEntityNotFound(_0x57611b,null))[_0xfb1a('0x1c')](removeEntity(_0x57611b,null))['catch'](handleError(_0x57611b,null));};exports[_0xfb1a('0x43')]=function(_0x2ab607,_0x32eb70){return db[_0xfb1a('0x22')][_0xfb1a('0x43')]()[_0xfb1a('0x1c')](respondWithResult(_0x32eb70,null))[_0xfb1a('0x3e')](handleError(_0x32eb70,null));};
\ No newline at end of file
index 6e248d3..b0adcbf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5860=['util','../../config/logger','api','moment','bluebird','request-promise','./voiceDialReport.attributes','exports','VoiceDialReport','report_dial','uniqueid','lodash'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x5860,0x113));var _0x0586=function(_0x7b484,_0x195ad4){_0x7b484=_0x7b484-0x0;var _0x2ae1cf=_0x5860[_0x7b484];return _0x2ae1cf;};'use strict';var _=require(_0x0586('0x0'));var util=require(_0x0586('0x1'));var logger=require(_0x0586('0x2'))(_0x0586('0x3'));var moment=require(_0x0586('0x4'));var BPromise=require(_0x0586('0x5'));var rp=require(_0x0586('0x6'));var attributes=require(_0x0586('0x7'));module[_0x0586('0x8')]=function(_0x4071f8,_0x3a4d6b){return _0x4071f8['define'](_0x0586('0x9'),attributes,{'tableName':_0x0586('0xa'),'paranoid':![],'indexes':[{'fields':[_0x0586('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x0ad2=['bluebird','request-promise','exports','report_dial','uniqueid','lodash','util','../../config/logger','api','moment'];(function(_0x2efa62,_0xcd02){var _0x284343=function(_0x102c3a){while(--_0x102c3a){_0x2efa62['push'](_0x2efa62['shift']());}};_0x284343(++_0xcd02);}(_0x0ad2,0x131));var _0x20ad=function(_0x21f8c5,_0x185c26){_0x21f8c5=_0x21f8c5-0x0;var _0x4703ec=_0x0ad2[_0x21f8c5];return _0x4703ec;};'use strict';var _=require(_0x20ad('0x0'));var util=require(_0x20ad('0x1'));var logger=require(_0x20ad('0x2'))(_0x20ad('0x3'));var moment=require(_0x20ad('0x4'));var BPromise=require(_0x20ad('0x5'));var rp=require(_0x20ad('0x6'));var attributes=require('./voiceDialReport.attributes');module[_0x20ad('0x7')]=function(_0x29e64d,_0x2f0a3d){return _0x29e64d['define']('VoiceDialReport',attributes,{'tableName':_0x20ad('0x8'),'paranoid':![],'indexes':[{'fields':[_0x20ad('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index 569b546..a1acdee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa7dc=['body','options','raw','UpdateVoiceDialReport','update','where','lodash','util','moment','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','client','http','request','then','info','VoiceDialReport,\x20%s,\x20%s','request\x20sent','debug','VoiceDialReport,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','CreateVoiceDialReport'];(function(_0x3899d1,_0x4aa04c){var _0xeb4a7d=function(_0x3ea5ee){while(--_0x3ea5ee){_0x3899d1['push'](_0x3899d1['shift']());}};_0xeb4a7d(++_0x4aa04c);}(_0xa7dc,0x11d));var _0xca7d=function(_0x1284ad,_0x59fe1c){_0x1284ad=_0x1284ad-0x0;var _0x163f9a=_0xa7dc[_0x1284ad];return _0x163f9a;};'use strict';var _=require(_0xca7d('0x0'));var util=require(_0xca7d('0x1'));var moment=require(_0xca7d('0x2'));var BPromise=require('bluebird');var rs=require(_0xca7d('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xca7d('0x4'))['db'];var utils=require(_0xca7d('0x5'));var logger=require(_0xca7d('0x6'))(_0xca7d('0x7'));var config=require(_0xca7d('0x8'));var jayson=require(_0xca7d('0x9'));var client=jayson[_0xca7d('0xa')][_0xca7d('0xb')]({'port':0x232a});function respondWithRpcPromise(_0x5073dd,_0x22223d,_0x820afa){return new BPromise(function(_0x4d5bc7,_0x2920bd){return client[_0xca7d('0xc')](_0x5073dd,_0x820afa)[_0xca7d('0xd')](function(_0x5236ce){logger[_0xca7d('0xe')](_0xca7d('0xf'),_0x22223d,_0xca7d('0x10'));logger[_0xca7d('0x11')](_0xca7d('0x12'),_0x22223d,'request\x20sent',JSON[_0xca7d('0x13')](_0x5236ce));if(_0x5236ce['error']){if(_0x5236ce[_0xca7d('0x14')]['code']===0x1f4){logger[_0xca7d('0x14')](_0xca7d('0xf'),_0x22223d,_0x5236ce[_0xca7d('0x14')][_0xca7d('0x15')]);return _0x2920bd(_0x5236ce['error']['message']);}logger['error'](_0xca7d('0xf'),_0x22223d,_0x5236ce[_0xca7d('0x14')][_0xca7d('0x15')]);return _0x4d5bc7(_0x5236ce[_0xca7d('0x14')][_0xca7d('0x15')]);}else{logger[_0xca7d('0xe')](_0xca7d('0xf'),_0x22223d,_0xca7d('0x10'));_0x4d5bc7(_0x5236ce[_0xca7d('0x16')][_0xca7d('0x15')]);}})[_0xca7d('0x17')](function(_0x245c7c){logger['error']('VoiceDialReport,\x20%s,\x20%s',_0x22223d,_0x245c7c);_0x2920bd(_0x245c7c);});});}exports[_0xca7d('0x18')]=function(_0x61cc1e){var _0x134e51=this;return new Promise(function(_0x46eac1,_0xdee74e){return db['VoiceDialReport']['create'](_0x61cc1e[_0xca7d('0x19')],{'raw':_0x61cc1e['options']?_0x61cc1e[_0xca7d('0x1a')][_0xca7d('0x1b')]===undefined?!![]:![]:!![]})['then'](function(_0x3e3e8d){logger['info']('CreateVoiceDialReport',_0x61cc1e);logger[_0xca7d('0x11')](_0xca7d('0x18'),_0x61cc1e,JSON[_0xca7d('0x13')](_0x3e3e8d));_0x46eac1(_0x3e3e8d);})[_0xca7d('0x17')](function(_0x5d049b){logger[_0xca7d('0x14')](_0xca7d('0x18'),_0x5d049b[_0xca7d('0x15')],_0x61cc1e);_0xdee74e(_0x134e51[_0xca7d('0x14')](0x1f4,_0x5d049b[_0xca7d('0x15')]));});});};exports[_0xca7d('0x1c')]=function(_0xf4b873){var _0x44e415=this;return new Promise(function(_0x56be0b,_0x1c9a38){return db['VoiceDialReport'][_0xca7d('0x1d')](_0xf4b873[_0xca7d('0x19')],{'raw':_0xf4b873[_0xca7d('0x1a')]?_0xf4b873[_0xca7d('0x1a')][_0xca7d('0x1b')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0xf4b873[_0xca7d('0x1a')]?_0xf4b873[_0xca7d('0x1a')][_0xca7d('0x1e')]||null:null,'attributes':_0xf4b873[_0xca7d('0x1a')]?_0xf4b873[_0xca7d('0x1a')]['attributes']||null:null,'limit':_0xf4b873[_0xca7d('0x1a')]?_0xf4b873[_0xca7d('0x1a')]['limit']||null:null})[_0xca7d('0xd')](function(_0x5df354){logger['info'](_0xca7d('0x1c'),_0xf4b873);logger['debug'](_0xca7d('0x1c'),_0xf4b873,JSON[_0xca7d('0x13')](_0x5df354));_0x56be0b(_0x5df354);})[_0xca7d('0x17')](function(_0x3071e5){logger[_0xca7d('0x14')](_0xca7d('0x1c'),_0x3071e5['message'],_0xf4b873);_0x1c9a38(_0x44e415[_0xca7d('0x14')](0x1f4,_0x3071e5[_0xca7d('0x15')]));});});};
\ No newline at end of file
+var _0xe739=['request','then','info','request\x20sent','error','code','VoiceDialReport,\x20%s,\x20%s','message','result','catch','CreateVoiceDialReport','VoiceDialReport','create','body','options','raw','UpdateVoiceDialReport','update','where','attributes','limit','lodash','moment','bluebird','randomstring','../../config/logger','rpc','../../config/environment','jayson/promise','http'];(function(_0x1428d9,_0xded63c){var _0x438019=function(_0x31c37d){while(--_0x31c37d){_0x1428d9['push'](_0x1428d9['shift']());}};_0x438019(++_0xded63c);}(_0xe739,0x105));var _0x9e73=function(_0x109ad8,_0x300114){_0x109ad8=_0x109ad8-0x0;var _0x2e8386=_0xe739[_0x109ad8];return _0x2e8386;};'use strict';var _=require(_0x9e73('0x0'));var util=require('util');var moment=require(_0x9e73('0x1'));var BPromise=require(_0x9e73('0x2'));var rs=require(_0x9e73('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x9e73('0x4'))(_0x9e73('0x5'));var config=require(_0x9e73('0x6'));var jayson=require(_0x9e73('0x7'));var client=jayson['client'][_0x9e73('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x26cb5b,_0xb37872,_0x5e46e7){return new BPromise(function(_0xa49f86,_0x1ee042){return client[_0x9e73('0x9')](_0x26cb5b,_0x5e46e7)[_0x9e73('0xa')](function(_0x14de8a){logger[_0x9e73('0xb')]('VoiceDialReport,\x20%s,\x20%s',_0xb37872,_0x9e73('0xc'));logger['debug']('VoiceDialReport,\x20%s,\x20%s,\x20%s',_0xb37872,_0x9e73('0xc'),JSON['stringify'](_0x14de8a));if(_0x14de8a[_0x9e73('0xd')]){if(_0x14de8a[_0x9e73('0xd')][_0x9e73('0xe')]===0x1f4){logger['error'](_0x9e73('0xf'),_0xb37872,_0x14de8a[_0x9e73('0xd')][_0x9e73('0x10')]);return _0x1ee042(_0x14de8a[_0x9e73('0xd')]['message']);}logger[_0x9e73('0xd')](_0x9e73('0xf'),_0xb37872,_0x14de8a[_0x9e73('0xd')]['message']);return _0xa49f86(_0x14de8a[_0x9e73('0xd')][_0x9e73('0x10')]);}else{logger['info'](_0x9e73('0xf'),_0xb37872,_0x9e73('0xc'));_0xa49f86(_0x14de8a[_0x9e73('0x11')]['message']);}})[_0x9e73('0x12')](function(_0x51968a){logger[_0x9e73('0xd')]('VoiceDialReport,\x20%s,\x20%s',_0xb37872,_0x51968a);_0x1ee042(_0x51968a);});});}exports[_0x9e73('0x13')]=function(_0x48b1db){var _0x4dabb2=this;return new Promise(function(_0x419c5b,_0x3944fc){return db[_0x9e73('0x14')][_0x9e73('0x15')](_0x48b1db[_0x9e73('0x16')],{'raw':_0x48b1db[_0x9e73('0x17')]?_0x48b1db[_0x9e73('0x17')][_0x9e73('0x18')]===undefined?!![]:![]:!![]})[_0x9e73('0xa')](function(_0x3f56bf){logger['info'](_0x9e73('0x13'),_0x48b1db);logger['debug'](_0x9e73('0x13'),_0x48b1db,JSON['stringify'](_0x3f56bf));_0x419c5b(_0x3f56bf);})[_0x9e73('0x12')](function(_0x589a5d){logger[_0x9e73('0xd')](_0x9e73('0x13'),_0x589a5d['message'],_0x48b1db);_0x3944fc(_0x4dabb2['error'](0x1f4,_0x589a5d[_0x9e73('0x10')]));});});};exports[_0x9e73('0x19')]=function(_0x256ea1){var _0x257dca=this;return new Promise(function(_0x1214b5,_0x5117af){return db[_0x9e73('0x14')][_0x9e73('0x1a')](_0x256ea1['body'],{'raw':_0x256ea1['options']?_0x256ea1[_0x9e73('0x17')]['raw']===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x256ea1['options']?_0x256ea1[_0x9e73('0x17')][_0x9e73('0x1b')]||null:null,'attributes':_0x256ea1[_0x9e73('0x17')]?_0x256ea1['options'][_0x9e73('0x1c')]||null:null,'limit':_0x256ea1[_0x9e73('0x17')]?_0x256ea1['options'][_0x9e73('0x1d')]||null:null})[_0x9e73('0xa')](function(_0x3fd13d){logger[_0x9e73('0xb')](_0x9e73('0x19'),_0x256ea1);logger['debug'](_0x9e73('0x19'),_0x256ea1,JSON['stringify'](_0x3fd13d));_0x1214b5(_0x3fd13d);})[_0x9e73('0x12')](function(_0x1ba338){logger[_0x9e73('0xd')](_0x9e73('0x19'),_0x1ba338[_0x9e73('0x10')],_0x256ea1);_0x5117af(_0x257dca['error'](0x1f4,_0x1ba338[_0x9e73('0x10')]));});});};
\ No newline at end of file
index f61d648..181f056 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d0b=['/:id/applications','destroy','exports','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/:id','isAuthenticated','show','post','create'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0x2d0b,0x102));var _0xb2d0=function(_0x170c65,_0x4be9fe){_0x170c65=_0x170c65-0x0;var _0x4149a3=_0x2d0b[_0x170c65];return _0x4149a3;};'use strict';var multer=require('multer');var util=require(_0xb2d0('0x0'));var path=require(_0xb2d0('0x1'));var timeout=require(_0xb2d0('0x2'));var express=require('express');var router=express[_0xb2d0('0x3')]();var auth=require(_0xb2d0('0x4'));var interaction=require(_0xb2d0('0x5'));var config=require(_0xb2d0('0x6'));var controller=require('./voiceExtension.controller');router[_0xb2d0('0x7')]('/',auth['isAuthenticated'](),controller[_0xb2d0('0x8')]);router[_0xb2d0('0x7')](_0xb2d0('0x9'),auth[_0xb2d0('0xa')](),controller[_0xb2d0('0xb')]);router[_0xb2d0('0xc')]('/',auth[_0xb2d0('0xa')](),controller[_0xb2d0('0xd')]);router[_0xb2d0('0xc')](_0xb2d0('0xe'),auth[_0xb2d0('0xa')](),controller['addApplications']);router['put']('/:id',auth[_0xb2d0('0xa')](),controller['update']);router['delete']('/:id',auth[_0xb2d0('0xa')](),controller[_0xb2d0('0xf')]);module[_0xb2d0('0x10')]=router;
\ No newline at end of file
+var _0x6b19=['addApplications','put','destroy','exports','multer','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','/:id','post','/:id/applications'];(function(_0x2d2c16,_0x4e88b6){var _0x53f2fb=function(_0x6b6dac){while(--_0x6b6dac){_0x2d2c16['push'](_0x2d2c16['shift']());}};_0x53f2fb(++_0x4e88b6);}(_0x6b19,0xf4));var _0x96b1=function(_0x3cf554,_0xbc6cbb){_0x3cf554=_0x3cf554-0x0;var _0x8eb6f5=_0x6b19[_0x3cf554];return _0x8eb6f5;};'use strict';var multer=require(_0x96b1('0x0'));var util=require('util');var path=require(_0x96b1('0x1'));var timeout=require(_0x96b1('0x2'));var express=require('express');var router=express[_0x96b1('0x3')]();var auth=require(_0x96b1('0x4'));var interaction=require(_0x96b1('0x5'));var config=require(_0x96b1('0x6'));var controller=require('./voiceExtension.controller');router[_0x96b1('0x7')]('/',auth[_0x96b1('0x8')](),controller['index']);router['get'](_0x96b1('0x9'),auth[_0x96b1('0x8')](),controller['show']);router[_0x96b1('0xa')]('/',auth[_0x96b1('0x8')](),controller['create']);router[_0x96b1('0xa')](_0x96b1('0xb'),auth[_0x96b1('0x8')](),controller[_0x96b1('0xc')]);router[_0x96b1('0xd')]('/:id',auth[_0x96b1('0x8')](),controller['update']);router['delete']('/:id',auth['isAuthenticated'](),controller[_0x96b1('0xe')]);module[_0x96b1('0xf')]=router;
\ No newline at end of file
index 5455895..1a949d7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd3d1=['outbound-fax','system','any','*,*,*,*','INTEGER','BOOLEAN','wav','VIRTUAL','getDataValue','exten','sequelize','exports','STRING','compositeIndex','NoOp','ENUM','inbound','outbound','internal','inbound-fax'];(function(_0x2d7d37,_0x5e506f){var _0xb30322=function(_0xd19858){while(--_0xd19858){_0x2d7d37['push'](_0x2d7d37['shift']());}};_0xb30322(++_0x5e506f);}(_0xd3d1,0x172));var _0x1d3d=function(_0x2be8c2,_0x14a4b5){_0x2be8c2=_0x2be8c2-0x0;var _0x97f531=_0xd3d1[_0x2be8c2];return _0x97f531;};'use strict';var Sequelize=require(_0x1d3d('0x0'));module[_0x1d3d('0x1')]={'context':{'type':Sequelize['STRING'],'allowNull':![],'unique':'compositeIndex','validate':{'notEmpty':!![],'is':/[A-Za-z0-9._\+*!\-\[\]]+$/i}},'exten':{'type':Sequelize[_0x1d3d('0x2')],'allowNull':![],'unique':_0x1d3d('0x3')},'priority':{'type':Sequelize[_0x1d3d('0x2')],'allowNull':![],'defaultValue':'1','unique':_0x1d3d('0x3')},'tag':{'type':Sequelize[_0x1d3d('0x2')],'allowNull':![],'defaultValue':'--'},'app':{'type':Sequelize[_0x1d3d('0x2')],'allowNull':![],'defaultValue':_0x1d3d('0x4')},'appdata':{'type':Sequelize[_0x1d3d('0x2')](0x1000),'allowNull':!![],'defaultValue':''},'type':{'type':Sequelize[_0x1d3d('0x5')](_0x1d3d('0x6'),_0x1d3d('0x7'),_0x1d3d('0x8'),_0x1d3d('0x9'),_0x1d3d('0xa'),_0x1d3d('0xb'),_0x1d3d('0xc')),'allowNull':![]},'description':{'type':Sequelize[_0x1d3d('0x2')]},'interval':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':_0x1d3d('0xd')},'IntervalId':{'type':Sequelize[_0x1d3d('0xe')]},'isApp':{'type':Sequelize[_0x1d3d('0xf')],'allowNull':![],'defaultValue':![]},'appType':{'type':Sequelize[_0x1d3d('0x2')],'defaultValue':null},'callerID':{'type':Sequelize[_0x1d3d('0x2')],'allowNull':!![]},'record':{'type':Sequelize[_0x1d3d('0xf')],'defaultValue':![]},'cutdigits':{'type':Sequelize[_0x1d3d('0xe')]},'recordingFormat':{'type':Sequelize[_0x1d3d('0x2')],'defaultValue':_0x1d3d('0x10')},'answer':{'type':Sequelize[_0x1d3d('0xf')],'defaultValue':!![]},'name':{'type':Sequelize[_0x1d3d('0x11')],'get':function(_0x479216){return this[_0x1d3d('0x12')](_0x1d3d('0x13'));}}};
\ No newline at end of file
+var _0x3c81=['INTEGER','BOOLEAN','wav','VIRTUAL','getDataValue','exten','sequelize','exports','compositeIndex','STRING','NoOp','ENUM','inbound','outbound','internal','outbound-fax','any','*,*,*,*'];(function(_0xfc8faf,_0x86244a){var _0x48c40b=function(_0x107c22){while(--_0x107c22){_0xfc8faf['push'](_0xfc8faf['shift']());}};_0x48c40b(++_0x86244a);}(_0x3c81,0x102));var _0x13c8=function(_0x880fe1,_0x9381cd){_0x880fe1=_0x880fe1-0x0;var _0x3097b6=_0x3c81[_0x880fe1];return _0x3097b6;};'use strict';var Sequelize=require(_0x13c8('0x0'));module[_0x13c8('0x1')]={'context':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x13c8('0x2'),'validate':{'notEmpty':!![],'is':/[A-Za-z0-9._\+*!\-\[\]]+$/i}},'exten':{'type':Sequelize[_0x13c8('0x3')],'allowNull':![],'unique':'compositeIndex'},'priority':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'1','unique':'compositeIndex'},'tag':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':'--'},'app':{'type':Sequelize[_0x13c8('0x3')],'allowNull':![],'defaultValue':_0x13c8('0x4')},'appdata':{'type':Sequelize[_0x13c8('0x3')](0x1000),'allowNull':!![],'defaultValue':''},'type':{'type':Sequelize[_0x13c8('0x5')](_0x13c8('0x6'),_0x13c8('0x7'),_0x13c8('0x8'),'inbound-fax',_0x13c8('0x9'),'system',_0x13c8('0xa')),'allowNull':![]},'description':{'type':Sequelize[_0x13c8('0x3')]},'interval':{'type':Sequelize[_0x13c8('0x3')],'allowNull':![],'defaultValue':_0x13c8('0xb')},'IntervalId':{'type':Sequelize[_0x13c8('0xc')]},'isApp':{'type':Sequelize[_0x13c8('0xd')],'allowNull':![],'defaultValue':![]},'appType':{'type':Sequelize[_0x13c8('0x3')],'defaultValue':null},'callerID':{'type':Sequelize[_0x13c8('0x3')],'allowNull':!![]},'record':{'type':Sequelize[_0x13c8('0xd')],'defaultValue':![]},'cutdigits':{'type':Sequelize[_0x13c8('0xc')]},'recordingFormat':{'type':Sequelize[_0x13c8('0x3')],'defaultValue':_0x13c8('0xe')},'answer':{'type':Sequelize[_0x13c8('0xd')],'defaultValue':!![]},'name':{'type':Sequelize[_0x13c8('0xf')],'get':function(_0x5ab91d){return this[_0x13c8('0x10')](_0x13c8('0x11'));}}};
\ No newline at end of file
index 69dd618..1a8b6ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8a5=['length','create','body','exten','concat','user','get','role','internal','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','description','recordingFormat','cutdigits','mandatoryDisposition','context','findOne','transaction','VoiceExtensionId','bulkCreate','findAndCountAll','cast(priority\x20as\x20unsigned)','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','crypto','jsforce','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','redis','localhost','socket.io-emitter','./voiceExtension.socket','register','sendStatus','status','end','count','offset','limit','set','Content-Range','apply','save','update','then','destroy','InboundRoutes','inbound','outbound','InternalRoutes','filter','ignore','map','value','includes','find','type','name','error','stack','send','index','rawAttributes','keys','query','model','attributes','intersection','fields','hasOwnProperty','nolimit','order','where','filters','pick','merge','key','VIRTUAL','options','includeAll','include','VoiceExtension','findAll','rows','catch','show','params'];(function(_0x249d99,_0x16b584){var _0x5bfb05=function(_0x4f4d67){while(--_0x4f4d67){_0x249d99['push'](_0x249d99['shift']());}};_0x5bfb05(++_0x16b584);}(_0xd8a5,0x160));var _0x5d8a=function(_0x199769,_0x3211cb){_0x199769=_0x199769-0x0;var _0x447e7f=_0xd8a5[_0x199769];return _0x447e7f;};'use strict';var pdf=require(_0x5d8a('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x5d8a('0x1'));var zipdir=require(_0x5d8a('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x5d8a('0x3'));var moment=require(_0x5d8a('0x4'));var BPromise=require(_0x5d8a('0x5'));var Mustache=require(_0x5d8a('0x6'));var util=require(_0x5d8a('0x7'));var path=require(_0x5d8a('0x8'));var sox=require(_0x5d8a('0x9'));var csv=require(_0x5d8a('0xa'));var ejs=require(_0x5d8a('0xb'));var fs=require('fs');var _=require(_0x5d8a('0xc'));var squel=require(_0x5d8a('0xd'));var crypto=require(_0x5d8a('0xe'));var jsforce=require(_0x5d8a('0xf'));var deskjs=require('desk.js');var toCsv=require(_0x5d8a('0xa'));var querystring=require(_0x5d8a('0x10'));var Papa=require(_0x5d8a('0x11'));var authService=require(_0x5d8a('0x12'));var hardwareService=require(_0x5d8a('0x13'));var Redis=require('ioredis');var qs=require(_0x5d8a('0x14'));var logger=require(_0x5d8a('0x15'))(_0x5d8a('0x16'));var utils=require(_0x5d8a('0x17'));var config=require('../../config/environment');var db=require(_0x5d8a('0x18'))['db'];config[_0x5d8a('0x19')]=_['defaults'](config[_0x5d8a('0x19')],{'host':_0x5d8a('0x1a'),'port':0x18eb});var socket=require(_0x5d8a('0x1b'))(new Redis(config[_0x5d8a('0x19')]));require(_0x5d8a('0x1c'))[_0x5d8a('0x1d')](socket);function respondWithStatusCode(_0x3727d3,_0x1fb140){_0x1fb140=_0x1fb140||0xcc;return function(_0x3d852e){if(_0x3d852e){return _0x3727d3[_0x5d8a('0x1e')](_0x1fb140);}return _0x3727d3[_0x5d8a('0x1f')](_0x1fb140)[_0x5d8a('0x20')]();};}function respondWithResult(_0x5dba52,_0x4d45e7){_0x4d45e7=_0x4d45e7||0xc8;return function(_0x39a1b8){if(_0x39a1b8){return _0x5dba52[_0x5d8a('0x1f')](_0x4d45e7)['json'](_0x39a1b8);}};}function respondWithFilteredResult(_0x3d3505,_0x119d08){return function(_0x341262){if(_0x341262){var _0x129a1d=_0x341262[_0x5d8a('0x21')],_0x5eb748=_0x119d08[_0x5d8a('0x22')],_0x16ff4e=_0x119d08[_0x5d8a('0x22')]+_0x119d08[_0x5d8a('0x23')],_0x54ab16;if(_0x16ff4e>=_0x129a1d){_0x16ff4e=_0x129a1d;_0x54ab16=0xc8;}else{_0x54ab16=0xce;}_0x3d3505[_0x5d8a('0x1f')](_0x54ab16);return _0x3d3505[_0x5d8a('0x24')](_0x5d8a('0x25'),_0x5eb748+'-'+_0x16ff4e+'/'+_0x129a1d)['json'](_0x341262);}return null;};}function patchUpdates(_0x460e95){return function(_0x235065){try{jsonpatch[_0x5d8a('0x26')](_0x235065,_0x460e95,!![]);}catch(_0x3c2524){return BPromise['reject'](_0x3c2524);}return _0x235065[_0x5d8a('0x27')]();};}function saveUpdates(_0x3d9815,_0x50e0fe){return function(_0x5443b9){if(_0x5443b9){return _0x5443b9[_0x5d8a('0x28')](_0x3d9815)[_0x5d8a('0x29')](function(_0x186aa9){return _0x186aa9;});}return null;};}function removeEntity(_0x1201c6,_0x5d9f63){return function(_0x8cbf6e){if(_0x8cbf6e){return _0x8cbf6e[_0x5d8a('0x2a')]()['then'](function(){var _0x93d735=_0x8cbf6e['get']({'plain':!![]});var _0x194b9e=[{'name':_0x5d8a('0x2b'),'value':_0x5d8a('0x2c'),'ignore':![]},{'name':'OutboundRoutes','value':_0x5d8a('0x2d'),'ignore':![]},{'name':_0x5d8a('0x2e'),'value':'internal','ignore':![]}];var _0x4b5f67=_(_0x194b9e)[_0x5d8a('0x2f')](_0x5d8a('0x30'))[_0x5d8a('0x31')]('value')[_0x5d8a('0x32')]();if(_[_0x5d8a('0x33')](_0x4b5f67,_0x93d735['type'])){return;}var _0x1a4a47=_[_0x5d8a('0x34')](_0x194b9e,[_0x5d8a('0x32'),_0x93d735[_0x5d8a('0x35')]])[_0x5d8a('0x36')];return db['UserProfileResource'][_0x5d8a('0x2a')]({'where':{'type':_0x1a4a47,'resourceId':_0x93d735['id']}})[_0x5d8a('0x29')](function(){return _0x8cbf6e;});})[_0x5d8a('0x29')](function(){_0x1201c6[_0x5d8a('0x1f')](0xcc)[_0x5d8a('0x20')]();});}};}function handleEntityNotFound(_0x1e6ab5,_0x30b4ad){return function(_0xd65fde){if(!_0xd65fde){_0x1e6ab5['sendStatus'](0x194);}return _0xd65fde;};}function handleError(_0x1b06cf,_0x1a85c3){_0x1a85c3=_0x1a85c3||0x1f4;return function(_0x404458){logger[_0x5d8a('0x37')](_0x404458[_0x5d8a('0x38')]);if(_0x404458[_0x5d8a('0x36')]){delete _0x404458[_0x5d8a('0x36')];}_0x1b06cf[_0x5d8a('0x1f')](_0x1a85c3)[_0x5d8a('0x39')](_0x404458);};}exports[_0x5d8a('0x3a')]=function(_0x256361,_0x190ff1){var _0x566af4={},_0x2cf742={},_0x3b8b02={'count':0x0,'rows':[]};var _0x19160f=db['VoiceExtension'][_0x5d8a('0x3b')];_0x2cf742['model']=_[_0x5d8a('0x3c')](_0x19160f);_0x2cf742['query']=_['keys'](_0x256361[_0x5d8a('0x3d')]);_0x2cf742['filters']=_['intersection'](_0x2cf742[_0x5d8a('0x3e')],_0x2cf742[_0x5d8a('0x3d')]);_0x566af4[_0x5d8a('0x3f')]=_[_0x5d8a('0x40')](_0x2cf742[_0x5d8a('0x3e')],qs[_0x5d8a('0x41')](_0x256361[_0x5d8a('0x3d')][_0x5d8a('0x41')]));_0x566af4[_0x5d8a('0x3f')]=_0x566af4['attributes']['length']?_0x566af4['attributes']:_0x2cf742[_0x5d8a('0x3e')];if(!_0x256361[_0x5d8a('0x3d')][_0x5d8a('0x42')](_0x5d8a('0x43'))){_0x566af4['limit']=qs['limit'](_0x256361[_0x5d8a('0x3d')][_0x5d8a('0x23')]);_0x566af4[_0x5d8a('0x22')]=qs[_0x5d8a('0x22')](_0x256361[_0x5d8a('0x3d')][_0x5d8a('0x22')]);}_0x566af4[_0x5d8a('0x44')]=qs['sort'](_0x256361['query']['sort']);_0x566af4[_0x5d8a('0x45')]=qs[_0x5d8a('0x46')](_[_0x5d8a('0x47')](_0x256361[_0x5d8a('0x3d')],_0x2cf742[_0x5d8a('0x46')]));if(_0x256361[_0x5d8a('0x3d')][_0x5d8a('0x2f')]){_0x566af4['where']=_[_0x5d8a('0x48')](_0x566af4[_0x5d8a('0x45')],{'$or':_[_0x5d8a('0x31')](_0x19160f,function(_0x4c87ca){if(_0x4c87ca[_0x5d8a('0x35')][_0x5d8a('0x49')]!==_0x5d8a('0x4a')){var _0x275748={};_0x275748[_0x4c87ca['field']]={'$like':'%'+_0x256361['query'][_0x5d8a('0x2f')]+'%'};return _0x275748;}})});}_0x566af4=_[_0x5d8a('0x48')]({},_0x566af4,_0x256361[_0x5d8a('0x4b')]);var _0x4bb87d={'where':_0x566af4[_0x5d8a('0x45')]};return db['VoiceExtension'][_0x5d8a('0x21')](_0x4bb87d)[_0x5d8a('0x29')](function(_0x4ee290){_0x3b8b02['count']=_0x4ee290;if(_0x256361[_0x5d8a('0x3d')][_0x5d8a('0x4c')]){_0x566af4[_0x5d8a('0x4d')]=[{'all':!![]}];}return db[_0x5d8a('0x4e')][_0x5d8a('0x4f')](_0x566af4);})[_0x5d8a('0x29')](function(_0x2ef424){_0x3b8b02[_0x5d8a('0x50')]=_0x2ef424;return _0x3b8b02;})[_0x5d8a('0x29')](respondWithFilteredResult(_0x190ff1,_0x566af4))[_0x5d8a('0x51')](handleError(_0x190ff1,null));};exports[_0x5d8a('0x52')]=function(_0x4d4df8,_0x2446dd){var _0x129e42={'raw':![],'where':{'id':_0x4d4df8[_0x5d8a('0x53')]['id']}},_0x2408db={};_0x2408db[_0x5d8a('0x3e')]=_[_0x5d8a('0x3c')](db['VoiceExtension']['rawAttributes']);_0x2408db[_0x5d8a('0x3d')]=_[_0x5d8a('0x3c')](_0x4d4df8[_0x5d8a('0x3d')]);_0x2408db[_0x5d8a('0x46')]=_[_0x5d8a('0x40')](_0x2408db[_0x5d8a('0x3e')],_0x2408db[_0x5d8a('0x3d')]);_0x129e42[_0x5d8a('0x3f')]=_['intersection'](_0x2408db[_0x5d8a('0x3e')],qs['fields'](_0x4d4df8['query'][_0x5d8a('0x41')]));_0x129e42['attributes']=_0x129e42[_0x5d8a('0x3f')][_0x5d8a('0x54')]?_0x129e42[_0x5d8a('0x3f')]:_0x2408db[_0x5d8a('0x3e')];if(_0x4d4df8['query']['includeAll']){_0x129e42[_0x5d8a('0x4d')]=[{'all':!![]}];}_0x129e42=_[_0x5d8a('0x48')]({},_0x129e42,_0x4d4df8['options']);return db[_0x5d8a('0x4e')]['find'](_0x129e42)['then'](handleEntityNotFound(_0x2446dd,null))[_0x5d8a('0x29')](respondWithResult(_0x2446dd,null))[_0x5d8a('0x51')](handleError(_0x2446dd,null));};exports[_0x5d8a('0x2a')]=function(_0x38b1fe,_0x50be29){return db[_0x5d8a('0x4e')][_0x5d8a('0x34')]({'where':{'id':_0x38b1fe[_0x5d8a('0x53')]['id']}})[_0x5d8a('0x29')](handleEntityNotFound(_0x50be29,null))[_0x5d8a('0x29')](removeEntity(_0x50be29,null))[_0x5d8a('0x51')](handleError(_0x50be29,null));};exports[_0x5d8a('0x55')]=function(_0x2089f9,_0x4d94d3){if(_0x2089f9['body'][_0x5d8a('0x35')]==='outbound'&&!_['startsWith'](_0x2089f9[_0x5d8a('0x56')][_0x5d8a('0x57')],'_')){_0x2089f9['body']['exten']='_'[_0x5d8a('0x58')](_0x2089f9['body'][_0x5d8a('0x57')]);}return db['VoiceExtension'][_0x5d8a('0x55')](_0x2089f9[_0x5d8a('0x56')],{'raw':![]})[_0x5d8a('0x29')](function(_0xfe0723){var _0x3fb2c6=_0x2089f9[_0x5d8a('0x59')][_0x5d8a('0x5a')]({'plain':!![]});if(!_0x3fb2c6)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x3fb2c6[_0x5d8a('0x5b')]===_0x5d8a('0x59')){var _0x3d452f=_0xfe0723[_0x5d8a('0x5a')]({'plain':!![]});var _0xf1ee00=[{'name':'InboundRoutes','value':_0x5d8a('0x2c')},{'name':'OutboundRoutes','value':_0x5d8a('0x2d')},{'name':'InternalRoutes','value':_0x5d8a('0x5c')}];var _0x52af29=_[_0x5d8a('0x34')](_0xf1ee00,[_0x5d8a('0x32'),_0x3d452f[_0x5d8a('0x35')]])[_0x5d8a('0x36')];return db[_0x5d8a('0x5d')][_0x5d8a('0x34')]({'where':{'name':_0x52af29,'userProfileId':_0x3fb2c6[_0x5d8a('0x5e')]},'raw':!![]})[_0x5d8a('0x29')](function(_0x1895d2){if(_0x1895d2&&_0x1895d2[_0x5d8a('0x5f')]===0x0){return db[_0x5d8a('0x60')][_0x5d8a('0x55')]({'name':_0x3d452f[_0x5d8a('0x36')],'resourceId':_0x3d452f['id'],'type':_0x1895d2[_0x5d8a('0x36')],'sectionId':_0x1895d2['id']},{})[_0x5d8a('0x29')](function(){return _0xfe0723;});}else{return _0xfe0723;}})['catch'](function(_0xeef40d){logger[_0x5d8a('0x37')](_0x5d8a('0x61'),_0xeef40d);throw _0xeef40d;});}return _0xfe0723;})[_0x5d8a('0x29')](respondWithResult(_0x4d94d3,0xc9))[_0x5d8a('0x51')](handleError(_0x4d94d3,null));};exports[_0x5d8a('0x28')]=function(_0x2d12ad,_0x5accc6){if(_0x2d12ad['body']['id']){delete _0x2d12ad[_0x5d8a('0x56')]['id'];}return db[_0x5d8a('0x4e')][_0x5d8a('0x34')]({'where':{'id':_0x2d12ad['params']['id']}})[_0x5d8a('0x29')](handleEntityNotFound(_0x5accc6,null))[_0x5d8a('0x29')](function(_0x3a3a35){if(_0x3a3a35){return db[_0x5d8a('0x4e')][_0x5d8a('0x28')](_['pick'](_0x2d12ad[_0x5d8a('0x56')],['exten','context',_0x5d8a('0x62'),_0x5d8a('0x63'),_0x5d8a('0x64'),_0x5d8a('0x65')]),{'where':{'context':_0x3a3a35[_0x5d8a('0x66')],'exten':_0x3a3a35['exten']},'individualHooks':!![]})[_0x5d8a('0x29')](function(_0x320908){return _0x320908;});}return null;})['then'](respondWithStatusCode(_0x5accc6,null))[_0x5d8a('0x51')](handleError(_0x5accc6,null));};exports['addApplications']=function(_0x5511a9,_0x4ef9f5,_0x3772af){return db['VoiceExtension'][_0x5d8a('0x67')]({'where':{'id':_0x5511a9[_0x5d8a('0x53')]['id']}})[_0x5d8a('0x29')](handleEntityNotFound(_0x4ef9f5,null))[_0x5d8a('0x29')](function(_0x10d0fa){if(_0x10d0fa){return db['sequelize'][_0x5d8a('0x68')](function(_0x3e4d0d){return db[_0x5d8a('0x4e')][_0x5d8a('0x2a')]({'where':{'VoiceExtensionId':_0x5511a9['params']['id']},'transaction':_0x3e4d0d})[_0x5d8a('0x29')](function(_0x342f45){var _0x460257=_[_0x5d8a('0x31')](_0x5511a9[_0x5d8a('0x56')],function(_0x3fd478){_0x3fd478[_0x5d8a('0x69')]=_0x5511a9['params']['id'];return _0x3fd478;});return db[_0x5d8a('0x4e')][_0x5d8a('0x6a')](_0x460257,{'transaction':_0x3e4d0d});});})['then'](function(){return db['VoiceExtension'][_0x5d8a('0x6b')]({'where':{'isApp':!![],'VoiceExtensionId':_0x5511a9[_0x5d8a('0x53')]['id']},'order':_0x5d8a('0x6c')});});}})[_0x5d8a('0x29')](respondWithResult(_0x4ef9f5,null))[_0x5d8a('0x51')](handleError(_0x4ef9f5,null));};
\ No newline at end of file
+var _0x4fe0=['squel','jsforce','desk.js','querystring','papaparse','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','redis','defaults','localhost','socket.io-emitter','sendStatus','status','end','json','count','offset','set','apply','save','update','then','destroy','get','InboundRoutes','OutboundRoutes','internal','filter','ignore','map','value','includes','type','name','UserProfileResource','error','stack','index','VoiceExtension','rawAttributes','model','query','intersection','attributes','fields','hasOwnProperty','limit','order','sort','where','filters','pick','merge','key','VIRTUAL','field','options','includeAll','findAll','rows','catch','show','params','keys','include','find','outbound','startsWith','body','exten','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','inbound','InternalRoutes','UserProfileSection','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','context','description','recordingFormat','mandatoryDisposition','addApplications','sequelize','transaction','bulkCreate','findAndCountAll','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','path','sox','to-csv','ejs'];(function(_0x193394,_0x2ec945){var _0x49ec49=function(_0x177549){while(--_0x177549){_0x193394['push'](_0x193394['shift']());}};_0x49ec49(++_0x2ec945);}(_0x4fe0,0x195));var _0x04fe=function(_0x32d197,_0xb07345){_0x32d197=_0x32d197-0x0;var _0x32357a=_0x4fe0[_0x32d197];return _0x32357a;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x04fe('0x0'));var rimraf=require(_0x04fe('0x1'));var zipdir=require(_0x04fe('0x2'));var jsonpatch=require(_0x04fe('0x3'));var rp=require(_0x04fe('0x4'));var moment=require(_0x04fe('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x04fe('0x6'));var util=require('util');var path=require(_0x04fe('0x7'));var sox=require(_0x04fe('0x8'));var csv=require(_0x04fe('0x9'));var ejs=require(_0x04fe('0xa'));var fs=require('fs');var _=require('lodash');var squel=require(_0x04fe('0xb'));var crypto=require('crypto');var jsforce=require(_0x04fe('0xc'));var deskjs=require(_0x04fe('0xd'));var toCsv=require(_0x04fe('0x9'));var querystring=require(_0x04fe('0xe'));var Papa=require(_0x04fe('0xf'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0x04fe('0x10'));var qs=require(_0x04fe('0x11'));var logger=require(_0x04fe('0x12'))(_0x04fe('0x13'));var utils=require(_0x04fe('0x14'));var config=require(_0x04fe('0x15'));var db=require(_0x04fe('0x16'))['db'];config[_0x04fe('0x17')]=_[_0x04fe('0x18')](config[_0x04fe('0x17')],{'host':_0x04fe('0x19'),'port':0x18eb});var socket=require(_0x04fe('0x1a'))(new Redis(config[_0x04fe('0x17')]));require('./voiceExtension.socket')['register'](socket);function respondWithStatusCode(_0x192f9c,_0x2f5c41){_0x2f5c41=_0x2f5c41||0xcc;return function(_0x58871f){if(_0x58871f){return _0x192f9c[_0x04fe('0x1b')](_0x2f5c41);}return _0x192f9c[_0x04fe('0x1c')](_0x2f5c41)[_0x04fe('0x1d')]();};}function respondWithResult(_0x310a70,_0x5321e5){_0x5321e5=_0x5321e5||0xc8;return function(_0x4e28f5){if(_0x4e28f5){return _0x310a70[_0x04fe('0x1c')](_0x5321e5)[_0x04fe('0x1e')](_0x4e28f5);}};}function respondWithFilteredResult(_0x128485,_0x477938){return function(_0x1e0cfd){if(_0x1e0cfd){var _0x443fe5=_0x1e0cfd[_0x04fe('0x1f')],_0x21f10f=_0x477938[_0x04fe('0x20')],_0x162425=_0x477938[_0x04fe('0x20')]+_0x477938['limit'],_0x12e965;if(_0x162425>=_0x443fe5){_0x162425=_0x443fe5;_0x12e965=0xc8;}else{_0x12e965=0xce;}_0x128485[_0x04fe('0x1c')](_0x12e965);return _0x128485[_0x04fe('0x21')]('Content-Range',_0x21f10f+'-'+_0x162425+'/'+_0x443fe5)[_0x04fe('0x1e')](_0x1e0cfd);}return null;};}function patchUpdates(_0x5654ce){return function(_0x39dea4){try{jsonpatch[_0x04fe('0x22')](_0x39dea4,_0x5654ce,!![]);}catch(_0x24af55){return BPromise['reject'](_0x24af55);}return _0x39dea4[_0x04fe('0x23')]();};}function saveUpdates(_0x4c888f,_0x362d1b){return function(_0x20b15a){if(_0x20b15a){return _0x20b15a[_0x04fe('0x24')](_0x4c888f)[_0x04fe('0x25')](function(_0x290b6b){return _0x290b6b;});}return null;};}function removeEntity(_0x3ae392,_0x4190ad){return function(_0x496fd3){if(_0x496fd3){return _0x496fd3[_0x04fe('0x26')]()[_0x04fe('0x25')](function(){var _0x503e65=_0x496fd3[_0x04fe('0x27')]({'plain':!![]});var _0x414acc=[{'name':_0x04fe('0x28'),'value':'inbound','ignore':![]},{'name':_0x04fe('0x29'),'value':'outbound','ignore':![]},{'name':'InternalRoutes','value':_0x04fe('0x2a'),'ignore':![]}];var _0x47c1c5=_(_0x414acc)[_0x04fe('0x2b')](_0x04fe('0x2c'))[_0x04fe('0x2d')](_0x04fe('0x2e'))[_0x04fe('0x2e')]();if(_[_0x04fe('0x2f')](_0x47c1c5,_0x503e65['type'])){return;}var _0x3e3f6f=_['find'](_0x414acc,[_0x04fe('0x2e'),_0x503e65[_0x04fe('0x30')]])[_0x04fe('0x31')];return db[_0x04fe('0x32')][_0x04fe('0x26')]({'where':{'type':_0x3e3f6f,'resourceId':_0x503e65['id']}})[_0x04fe('0x25')](function(){return _0x496fd3;});})[_0x04fe('0x25')](function(){_0x3ae392[_0x04fe('0x1c')](0xcc)[_0x04fe('0x1d')]();});}};}function handleEntityNotFound(_0x149217,_0x29be66){return function(_0x3054e6){if(!_0x3054e6){_0x149217['sendStatus'](0x194);}return _0x3054e6;};}function handleError(_0x370d55,_0x31d10c){_0x31d10c=_0x31d10c||0x1f4;return function(_0x459e7f){logger[_0x04fe('0x33')](_0x459e7f[_0x04fe('0x34')]);if(_0x459e7f[_0x04fe('0x31')]){delete _0x459e7f[_0x04fe('0x31')];}_0x370d55[_0x04fe('0x1c')](_0x31d10c)['send'](_0x459e7f);};}exports[_0x04fe('0x35')]=function(_0x2a2383,_0x324356){var _0x6b6d87={},_0x369c5d={},_0x33fb03={'count':0x0,'rows':[]};var _0x52a32f=db[_0x04fe('0x36')][_0x04fe('0x37')];_0x369c5d[_0x04fe('0x38')]=_['keys'](_0x52a32f);_0x369c5d[_0x04fe('0x39')]=_['keys'](_0x2a2383[_0x04fe('0x39')]);_0x369c5d['filters']=_[_0x04fe('0x3a')](_0x369c5d[_0x04fe('0x38')],_0x369c5d[_0x04fe('0x39')]);_0x6b6d87[_0x04fe('0x3b')]=_[_0x04fe('0x3a')](_0x369c5d[_0x04fe('0x38')],qs[_0x04fe('0x3c')](_0x2a2383[_0x04fe('0x39')][_0x04fe('0x3c')]));_0x6b6d87[_0x04fe('0x3b')]=_0x6b6d87[_0x04fe('0x3b')]['length']?_0x6b6d87['attributes']:_0x369c5d[_0x04fe('0x38')];if(!_0x2a2383[_0x04fe('0x39')][_0x04fe('0x3d')]('nolimit')){_0x6b6d87[_0x04fe('0x3e')]=qs[_0x04fe('0x3e')](_0x2a2383[_0x04fe('0x39')]['limit']);_0x6b6d87[_0x04fe('0x20')]=qs[_0x04fe('0x20')](_0x2a2383['query'][_0x04fe('0x20')]);}_0x6b6d87[_0x04fe('0x3f')]=qs[_0x04fe('0x40')](_0x2a2383[_0x04fe('0x39')][_0x04fe('0x40')]);_0x6b6d87[_0x04fe('0x41')]=qs[_0x04fe('0x42')](_[_0x04fe('0x43')](_0x2a2383[_0x04fe('0x39')],_0x369c5d[_0x04fe('0x42')]));if(_0x2a2383[_0x04fe('0x39')]['filter']){_0x6b6d87[_0x04fe('0x41')]=_[_0x04fe('0x44')](_0x6b6d87[_0x04fe('0x41')],{'$or':_[_0x04fe('0x2d')](_0x52a32f,function(_0x3bc082){if(_0x3bc082['type'][_0x04fe('0x45')]!==_0x04fe('0x46')){var _0x19c8db={};_0x19c8db[_0x3bc082[_0x04fe('0x47')]]={'$like':'%'+_0x2a2383['query'][_0x04fe('0x2b')]+'%'};return _0x19c8db;}})});}_0x6b6d87=_['merge']({},_0x6b6d87,_0x2a2383[_0x04fe('0x48')]);var _0x219767={'where':_0x6b6d87[_0x04fe('0x41')]};return db[_0x04fe('0x36')]['count'](_0x219767)['then'](function(_0x5aa84c){_0x33fb03['count']=_0x5aa84c;if(_0x2a2383[_0x04fe('0x39')][_0x04fe('0x49')]){_0x6b6d87['include']=[{'all':!![]}];}return db['VoiceExtension'][_0x04fe('0x4a')](_0x6b6d87);})[_0x04fe('0x25')](function(_0x4580b6){_0x33fb03[_0x04fe('0x4b')]=_0x4580b6;return _0x33fb03;})[_0x04fe('0x25')](respondWithFilteredResult(_0x324356,_0x6b6d87))[_0x04fe('0x4c')](handleError(_0x324356,null));};exports[_0x04fe('0x4d')]=function(_0x34b9fa,_0x8e405a){var _0x3d97cb={'raw':![],'where':{'id':_0x34b9fa[_0x04fe('0x4e')]['id']}},_0x34983d={};_0x34983d['model']=_[_0x04fe('0x4f')](db['VoiceExtension'][_0x04fe('0x37')]);_0x34983d[_0x04fe('0x39')]=_[_0x04fe('0x4f')](_0x34b9fa[_0x04fe('0x39')]);_0x34983d[_0x04fe('0x42')]=_[_0x04fe('0x3a')](_0x34983d[_0x04fe('0x38')],_0x34983d[_0x04fe('0x39')]);_0x3d97cb[_0x04fe('0x3b')]=_[_0x04fe('0x3a')](_0x34983d['model'],qs[_0x04fe('0x3c')](_0x34b9fa[_0x04fe('0x39')][_0x04fe('0x3c')]));_0x3d97cb[_0x04fe('0x3b')]=_0x3d97cb['attributes']['length']?_0x3d97cb[_0x04fe('0x3b')]:_0x34983d[_0x04fe('0x38')];if(_0x34b9fa[_0x04fe('0x39')][_0x04fe('0x49')]){_0x3d97cb[_0x04fe('0x50')]=[{'all':!![]}];}_0x3d97cb=_[_0x04fe('0x44')]({},_0x3d97cb,_0x34b9fa[_0x04fe('0x48')]);return db[_0x04fe('0x36')][_0x04fe('0x51')](_0x3d97cb)['then'](handleEntityNotFound(_0x8e405a,null))['then'](respondWithResult(_0x8e405a,null))['catch'](handleError(_0x8e405a,null));};exports[_0x04fe('0x26')]=function(_0x515ebd,_0x3c67e0){return db['VoiceExtension']['find']({'where':{'id':_0x515ebd[_0x04fe('0x4e')]['id']}})[_0x04fe('0x25')](handleEntityNotFound(_0x3c67e0,null))[_0x04fe('0x25')](removeEntity(_0x3c67e0,null))['catch'](handleError(_0x3c67e0,null));};exports['create']=function(_0x1c526f,_0x337f5e){if(_0x1c526f['body']['type']===_0x04fe('0x52')&&!_[_0x04fe('0x53')](_0x1c526f[_0x04fe('0x54')][_0x04fe('0x55')],'_')){_0x1c526f['body'][_0x04fe('0x55')]='_'['concat'](_0x1c526f['body'][_0x04fe('0x55')]);}return db[_0x04fe('0x36')][_0x04fe('0x56')](_0x1c526f[_0x04fe('0x54')],{'raw':![]})[_0x04fe('0x25')](function(_0x1f6c6b){var _0x49ccc3=_0x1c526f[_0x04fe('0x57')][_0x04fe('0x27')]({'plain':!![]});if(!_0x49ccc3)throw new Error(_0x04fe('0x58'));if(_0x49ccc3['role']===_0x04fe('0x57')){var _0x93c5c0=_0x1f6c6b[_0x04fe('0x27')]({'plain':!![]});var _0x4774a5=[{'name':'InboundRoutes','value':_0x04fe('0x59')},{'name':_0x04fe('0x29'),'value':_0x04fe('0x52')},{'name':_0x04fe('0x5a'),'value':'internal'}];var _0x15a04b=_[_0x04fe('0x51')](_0x4774a5,[_0x04fe('0x2e'),_0x93c5c0[_0x04fe('0x30')]])[_0x04fe('0x31')];return db[_0x04fe('0x5b')][_0x04fe('0x51')]({'where':{'name':_0x15a04b,'userProfileId':_0x49ccc3[_0x04fe('0x5c')]},'raw':!![]})[_0x04fe('0x25')](function(_0x22c001){if(_0x22c001&&_0x22c001[_0x04fe('0x5d')]===0x0){return db[_0x04fe('0x32')][_0x04fe('0x56')]({'name':_0x93c5c0[_0x04fe('0x31')],'resourceId':_0x93c5c0['id'],'type':_0x22c001['name'],'sectionId':_0x22c001['id']},{})[_0x04fe('0x25')](function(){return _0x1f6c6b;});}else{return _0x1f6c6b;}})[_0x04fe('0x4c')](function(_0xd1708d){logger['error'](_0x04fe('0x5e'),_0xd1708d);throw _0xd1708d;});}return _0x1f6c6b;})[_0x04fe('0x25')](respondWithResult(_0x337f5e,0xc9))[_0x04fe('0x4c')](handleError(_0x337f5e,null));};exports['update']=function(_0x42c691,_0x1c5ea6){if(_0x42c691[_0x04fe('0x54')]['id']){delete _0x42c691[_0x04fe('0x54')]['id'];}return db[_0x04fe('0x36')]['find']({'where':{'id':_0x42c691['params']['id']}})[_0x04fe('0x25')](handleEntityNotFound(_0x1c5ea6,null))[_0x04fe('0x25')](function(_0x1a4abf){if(_0x1a4abf){return db['VoiceExtension'][_0x04fe('0x24')](_[_0x04fe('0x43')](_0x42c691['body'],[_0x04fe('0x55'),_0x04fe('0x5f'),_0x04fe('0x60'),_0x04fe('0x61'),'cutdigits',_0x04fe('0x62')]),{'where':{'context':_0x1a4abf['context'],'exten':_0x1a4abf[_0x04fe('0x55')]},'individualHooks':!![]})['then'](function(_0x10b375){return _0x10b375;});}return null;})['then'](respondWithStatusCode(_0x1c5ea6,null))[_0x04fe('0x4c')](handleError(_0x1c5ea6,null));};exports[_0x04fe('0x63')]=function(_0x454ed4,_0x3223e3,_0x119db7){return db[_0x04fe('0x36')]['findOne']({'where':{'id':_0x454ed4[_0x04fe('0x4e')]['id']}})[_0x04fe('0x25')](handleEntityNotFound(_0x3223e3,null))[_0x04fe('0x25')](function(_0x2363f9){if(_0x2363f9){return db[_0x04fe('0x64')][_0x04fe('0x65')](function(_0x135c98){return db['VoiceExtension']['destroy']({'where':{'VoiceExtensionId':_0x454ed4[_0x04fe('0x4e')]['id']},'transaction':_0x135c98})['then'](function(_0x288548){var _0x264601=_['map'](_0x454ed4['body'],function(_0x11f7f7){_0x11f7f7['VoiceExtensionId']=_0x454ed4[_0x04fe('0x4e')]['id'];return _0x11f7f7;});return db['VoiceExtension'][_0x04fe('0x66')](_0x264601,{'transaction':_0x135c98});});})[_0x04fe('0x25')](function(){return db['VoiceExtension'][_0x04fe('0x67')]({'where':{'isApp':!![],'VoiceExtensionId':_0x454ed4[_0x04fe('0x4e')]['id']},'order':'cast(priority\x20as\x20unsigned)'});});}})[_0x04fe('0x25')](respondWithResult(_0x3223e3,null))[_0x04fe('0x4c')](handleError(_0x3223e3,null));};
\ No newline at end of file
index 9ffd8e4..31ca29f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5593=['setMaxListeners','save','update','remove','emit','hasOwnProperty','hook','events','../../mysqldb','VoiceExtension'];(function(_0x5395a1,_0x3e3d9e){var _0x5aa90a=function(_0x411bc6){while(--_0x411bc6){_0x5395a1['push'](_0x5395a1['shift']());}};_0x5aa90a(++_0x3e3d9e);}(_0x5593,0x197));var _0x3559=function(_0x4a973e,_0x29034b){_0x4a973e=_0x4a973e-0x0;var _0x36b56e=_0x5593[_0x4a973e];return _0x36b56e;};'use strict';var EventEmitter=require(_0x3559('0x0'));var VoiceExtension=require(_0x3559('0x1'))['db'][_0x3559('0x2')];var VoiceExtensionEvents=new EventEmitter();VoiceExtensionEvents[_0x3559('0x3')](0x0);var events={'afterCreate':_0x3559('0x4'),'afterUpdate':_0x3559('0x5'),'afterDestroy':_0x3559('0x6')};function emitEvent(_0x327f39){return function(_0xf2ab00,_0x4f37da,_0x4bbb71){VoiceExtensionEvents[_0x3559('0x7')](_0x327f39+':'+_0xf2ab00['id'],_0xf2ab00);VoiceExtensionEvents[_0x3559('0x7')](_0x327f39,_0xf2ab00);_0x4bbb71(null);};}for(var e in events){if(events[_0x3559('0x8')](e)){var event=events[e];VoiceExtension[_0x3559('0x9')](e,emitEvent(event));}}module['exports']=VoiceExtensionEvents;
\ No newline at end of file
+var _0x40d4=['../../mysqldb','VoiceExtension','save','update','remove','emit','hasOwnProperty','hook','exports','events'];(function(_0x30ae5e,_0x391fc4){var _0x1f2e93=function(_0x60307d){while(--_0x60307d){_0x30ae5e['push'](_0x30ae5e['shift']());}};_0x1f2e93(++_0x391fc4);}(_0x40d4,0xef));var _0x440d=function(_0x2c45e8,_0x19aeab){_0x2c45e8=_0x2c45e8-0x0;var _0x4d6aa4=_0x40d4[_0x2c45e8];return _0x4d6aa4;};'use strict';var EventEmitter=require(_0x440d('0x0'));var VoiceExtension=require(_0x440d('0x1'))['db'][_0x440d('0x2')];var VoiceExtensionEvents=new EventEmitter();VoiceExtensionEvents['setMaxListeners'](0x0);var events={'afterCreate':_0x440d('0x3'),'afterUpdate':_0x440d('0x4'),'afterDestroy':_0x440d('0x5')};function emitEvent(_0x5d43ad){return function(_0x47c515,_0x27cbb5,_0x53902d){VoiceExtensionEvents[_0x440d('0x6')](_0x5d43ad+':'+_0x47c515['id'],_0x47c515);VoiceExtensionEvents[_0x440d('0x6')](_0x5d43ad,_0x47c515);_0x53902d(null);};}for(var e in events){if(events[_0x440d('0x7')](e)){var event=events[e];VoiceExtension[_0x440d('0x8')](e,emitEvent(event));}}module[_0x440d('0x9')]=VoiceExtensionEvents;
\ No newline at end of file
index 3a8094c..d6524f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x670b=['api','moment','bluebird','request-promise','./voiceExtension.attributes','exports','define','VoiceExtension','voice_extensions','lodash','util','../../config/logger'];(function(_0xa02286,_0x38bae2){var _0xc7d5bc=function(_0x1615c2){while(--_0x1615c2){_0xa02286['push'](_0xa02286['shift']());}};_0xc7d5bc(++_0x38bae2);}(_0x670b,0xf9));var _0xb670=function(_0x330ffa,_0x17ed38){_0x330ffa=_0x330ffa-0x0;var _0x10bbd5=_0x670b[_0x330ffa];return _0x10bbd5;};'use strict';var _=require(_0xb670('0x0'));var util=require(_0xb670('0x1'));var logger=require(_0xb670('0x2'))(_0xb670('0x3'));var moment=require(_0xb670('0x4'));var BPromise=require(_0xb670('0x5'));var rp=require(_0xb670('0x6'));var attributes=require(_0xb670('0x7'));module[_0xb670('0x8')]=function(_0x317499,_0x48c361){return _0x317499[_0xb670('0x9')](_0xb670('0xa'),attributes,{'tableName':_0xb670('0xb'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xf04d=['api','request-promise','./voiceExtension.attributes','exports','define','lodash','util','../../config/logger'];(function(_0x1e82b0,_0x2ea431){var _0x24e5b6=function(_0x435c5b){while(--_0x435c5b){_0x1e82b0['push'](_0x1e82b0['shift']());}};_0x24e5b6(++_0x2ea431);}(_0xf04d,0x1a5));var _0xdf04=function(_0x126558,_0x143c9a){_0x126558=_0x126558-0x0;var _0x1f6d14=_0xf04d[_0x126558];return _0x1f6d14;};'use strict';var _=require(_0xdf04('0x0'));var util=require(_0xdf04('0x1'));var logger=require(_0xdf04('0x2'))(_0xdf04('0x3'));var moment=require('moment');var BPromise=require('bluebird');var rp=require(_0xdf04('0x4'));var attributes=require(_0xdf04('0x5'));module[_0xdf04('0x6')]=function(_0xb4b67b,_0x23d099){return _0xb4b67b[_0xdf04('0x7')]('VoiceExtension',attributes,{'tableName':'voice_extensions','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 3be190a..8b2997d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['map','model','then','lodash','util','moment','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','http','redis','defaults','socket.io-emitter','register','VoiceExtension,\x20%s,\x20%s','request\x20sent','debug','VoiceExtension,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','result','catch','GetVoiceExtension','findAll','options','raw','where','attributes','limit','include'];(function(_0x4e5746,_0x4e1d99){var _0x5884ce=function(_0x5ba5d4){while(--_0x5ba5d4){_0x4e5746['push'](_0x4e5746['shift']());}};_0x5884ce(++_0x4e1d99);}(_0xa9e0,0x123));var _0x0a9e=function(_0x2cfb58,_0x3d9412){_0x2cfb58=_0x2cfb58-0x0;var _0xd99951=_0xa9e0[_0x2cfb58];return _0xd99951;};'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('./voiceExtension.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')]('VoiceExtension,\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['VoiceExtension'][_0x0a9e('0x1a')]({'raw':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae['options'][_0x0a9e('0x1c')]===undefined?!![]:![]:!![],'where':_0x1314ae['options']?_0x1314ae['options'][_0x0a9e('0x1d')]||null:null,'attributes':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1e')]||null:null,'limit':_0x1314ae['options']?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x1f')]||null:null,'include':_0x1314ae[_0x0a9e('0x1b')]?_0x1314ae[_0x0a9e('0x1b')][_0x0a9e('0x20')]?_[_0x0a9e('0x21')](_0x1314ae[_0x0a9e('0x1b')]['include'],function(_0x59181e){return{'model':db[_0x59181e[_0x0a9e('0x22')]],'as':_0x59181e['as'],'attributes':_0x59181e[_0x0a9e('0x1e')],'include':_0x59181e[_0x0a9e('0x20')]?_[_0x0a9e('0x21')](_0x59181e['include'],function(_0x384319){return{'model':db[_0x384319['model']],'as':_0x384319['as'],'attributes':_0x384319[_0x0a9e('0x1e')],'include':_0x384319['include']?_[_0x0a9e('0x21')](_0x384319[_0x0a9e('0x20')],function(_0x25fba9){return{'model':db[_0x25fba9[_0x0a9e('0x22')]],'as':_0x25fba9['as'],'attributes':_0x25fba9[_0x0a9e('0x1e')]};}):[]};}):[]};}):[]:[]})[_0x0a9e('0x23')](function(_0x11c3b6){logger[_0x0a9e('0x16')]('GetVoiceExtension',_0x1314ae);logger[_0x0a9e('0x10')](_0x0a9e('0x19'),_0x1314ae,JSON[_0x0a9e('0x12')](_0x11c3b6));_0x1c696a(_0x11c3b6);})[_0x0a9e('0x18')](function(_0x5c877d){logger[_0x0a9e('0x13')](_0x0a9e('0x19'),_0x5c877d[_0x0a9e('0x15')],_0x1314ae);_0x105080(_0x112016[_0x0a9e('0x13')](0x1f4,_0x5c877d[_0x0a9e('0x15')]));});});};
\ No newline at end of file
+var _0xda3f=['message','result','catch','findAll','options','where','attributes','limit','include','map','model','GetVoiceExtension','util','moment','../../mysqldb','../../config/logger','rpc','jayson/promise','client','defaults','redis','localhost','socket.io-emitter','./voiceExtension.socket','register','then','info','VoiceExtension,\x20%s,\x20%s','request\x20sent','VoiceExtension,\x20%s,\x20%s,\x20%s','stringify','error'];(function(_0x1ac595,_0x5d2081){var _0x455fff=function(_0x3043ee){while(--_0x3043ee){_0x1ac595['push'](_0x1ac595['shift']());}};_0x455fff(++_0x5d2081);}(_0xda3f,0xec));var _0xfda3=function(_0x3a213f,_0x25846a){_0x3a213f=_0x3a213f-0x0;var _0x19cfb0=_0xda3f[_0x3a213f];return _0x19cfb0;};'use strict';var _=require('lodash');var util=require(_0xfda3('0x0'));var moment=require(_0xfda3('0x1'));var BPromise=require('bluebird');var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xfda3('0x2'))['db'];var utils=require('../../config/utils');var logger=require(_0xfda3('0x3'))(_0xfda3('0x4'));var config=require('../../config/environment');var jayson=require(_0xfda3('0x5'));var client=jayson[_0xfda3('0x6')]['http']({'port':0x232a});config['redis']=_[_0xfda3('0x7')](config[_0xfda3('0x8')],{'host':_0xfda3('0x9'),'port':0x18eb});var socket=require(_0xfda3('0xa'))(new Redis(config[_0xfda3('0x8')]));require(_0xfda3('0xb'))[_0xfda3('0xc')](socket);function respondWithRpcPromise(_0x1b1ea6,_0xdc5b45,_0x14d549){return new BPromise(function(_0x102643,_0x4713ba){return client['request'](_0x1b1ea6,_0x14d549)[_0xfda3('0xd')](function(_0x14936b){logger[_0xfda3('0xe')](_0xfda3('0xf'),_0xdc5b45,_0xfda3('0x10'));logger['debug'](_0xfda3('0x11'),_0xdc5b45,'request\x20sent',JSON[_0xfda3('0x12')](_0x14936b));if(_0x14936b[_0xfda3('0x13')]){if(_0x14936b['error']['code']===0x1f4){logger['error'](_0xfda3('0xf'),_0xdc5b45,_0x14936b[_0xfda3('0x13')]['message']);return _0x4713ba(_0x14936b['error']['message']);}logger[_0xfda3('0x13')](_0xfda3('0xf'),_0xdc5b45,_0x14936b[_0xfda3('0x13')][_0xfda3('0x14')]);return _0x102643(_0x14936b[_0xfda3('0x13')][_0xfda3('0x14')]);}else{logger[_0xfda3('0xe')](_0xfda3('0xf'),_0xdc5b45,_0xfda3('0x10'));_0x102643(_0x14936b[_0xfda3('0x15')]['message']);}})[_0xfda3('0x16')](function(_0x1bbdda){logger[_0xfda3('0x13')](_0xfda3('0xf'),_0xdc5b45,_0x1bbdda);_0x4713ba(_0x1bbdda);});});}exports['GetVoiceExtension']=function(_0x42faad){var _0x43cfac=this;return new Promise(function(_0x2ee74c,_0x51e731){return db['VoiceExtension'][_0xfda3('0x17')]({'raw':_0x42faad[_0xfda3('0x18')]?_0x42faad[_0xfda3('0x18')]['raw']===undefined?!![]:![]:!![],'where':_0x42faad[_0xfda3('0x18')]?_0x42faad[_0xfda3('0x18')][_0xfda3('0x19')]||null:null,'attributes':_0x42faad[_0xfda3('0x18')]?_0x42faad[_0xfda3('0x18')][_0xfda3('0x1a')]||null:null,'limit':_0x42faad[_0xfda3('0x18')]?_0x42faad[_0xfda3('0x18')][_0xfda3('0x1b')]||null:null,'include':_0x42faad['options']?_0x42faad[_0xfda3('0x18')][_0xfda3('0x1c')]?_[_0xfda3('0x1d')](_0x42faad['options'][_0xfda3('0x1c')],function(_0x39e246){return{'model':db[_0x39e246[_0xfda3('0x1e')]],'as':_0x39e246['as'],'attributes':_0x39e246[_0xfda3('0x1a')],'include':_0x39e246[_0xfda3('0x1c')]?_[_0xfda3('0x1d')](_0x39e246['include'],function(_0x3c6d7d){return{'model':db[_0x3c6d7d[_0xfda3('0x1e')]],'as':_0x3c6d7d['as'],'attributes':_0x3c6d7d[_0xfda3('0x1a')],'include':_0x3c6d7d[_0xfda3('0x1c')]?_[_0xfda3('0x1d')](_0x3c6d7d['include'],function(_0x3c1549){return{'model':db[_0x3c1549[_0xfda3('0x1e')]],'as':_0x3c1549['as'],'attributes':_0x3c1549[_0xfda3('0x1a')]};}):[]};}):[]};}):[]:[]})[_0xfda3('0xd')](function(_0xe21ec6){logger[_0xfda3('0xe')](_0xfda3('0x1f'),_0x42faad);logger['debug']('GetVoiceExtension',_0x42faad,JSON[_0xfda3('0x12')](_0xe21ec6));_0x2ee74c(_0xe21ec6);})['catch'](function(_0x4b9d90){logger[_0xfda3('0x13')](_0xfda3('0x1f'),_0x4b9d90[_0xfda3('0x14')],_0x42faad);_0x51e731(_0x43cfac[_0xfda3('0x13')](0x1f4,_0x4b9d90[_0xfda3('0x14')]));});});};
\ No newline at end of file
index 3d0eb50..c446a9b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d36=['remove','update','emit','removeListener','register','length','voiceExtension:','save'];(function(_0x3dfa3e,_0x293558){var _0x3ff9ed=function(_0x400e9b){while(--_0x400e9b){_0x3dfa3e['push'](_0x3dfa3e['shift']());}};_0x3ff9ed(++_0x293558);}(_0x1d36,0xd7));var _0x61d3=function(_0x3c6152,_0x5d2646){_0x3c6152=_0x3c6152-0x0;var _0x5cb98d=_0x1d36[_0x3c6152];return _0x5cb98d;};'use strict';var VoiceExtensionEvents=require('./voiceExtension.events');var events=[_0x61d3('0x0'),_0x61d3('0x1'),_0x61d3('0x2')];function createListener(_0x28f0ba,_0x2ce31c){return function(_0x485cf7){_0x2ce31c[_0x61d3('0x3')](_0x28f0ba,_0x485cf7);};}function removeListener(_0x348ccf,_0x50fcf8){return function(){VoiceExtensionEvents[_0x61d3('0x4')](_0x348ccf,_0x50fcf8);};}exports[_0x61d3('0x5')]=function(_0xaeda1e){for(var _0x148aba=0x0,_0x102f39=events[_0x61d3('0x6')];_0x148aba<_0x102f39;_0x148aba++){var _0x637204=events[_0x148aba];var _0xab146a=createListener(_0x61d3('0x7')+_0x637204,_0xaeda1e);VoiceExtensionEvents['on'](_0x637204,_0xab146a);}};
\ No newline at end of file
+var _0x6b81=['removeListener','voiceExtension:','./voiceExtension.events','save','update','emit'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x6b81,0x16a));var _0x16b8=function(_0x4d247c,_0x3dff9e){_0x4d247c=_0x4d247c-0x0;var _0x42c60c=_0x6b81[_0x4d247c];return _0x42c60c;};'use strict';var VoiceExtensionEvents=require(_0x16b8('0x0'));var events=[_0x16b8('0x1'),'remove',_0x16b8('0x2')];function createListener(_0x4780d9,_0x4a8f60){return function(_0x576442){_0x4a8f60[_0x16b8('0x3')](_0x4780d9,_0x576442);};}function removeListener(_0x1fd345,_0x1bb20b){return function(){VoiceExtensionEvents[_0x16b8('0x4')](_0x1fd345,_0x1bb20b);};}exports['register']=function(_0x22c963){for(var _0x504d22=0x0,_0x485300=events['length'];_0x504d22<_0x485300;_0x504d22++){var _0x55cbd1=events[_0x504d22];var _0x47dfcc=createListener(_0x16b8('0x5')+_0x55cbd1,_0x22c963);VoiceExtensionEvents['on'](_0x55cbd1,_0x47dfcc);}};
\ No newline at end of file
index 4007a79..44796c2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfbd9=['getMessages','post','create','put','update','multer','util','path','connect-timeout','../../components/interaction/service','../../config/environment','get','index','/:id','isAuthenticated','show','/:id/messages'];(function(_0x3275f5,_0x52cedd){var _0xea1f40=function(_0x471236){while(--_0x471236){_0x3275f5['push'](_0x3275f5['shift']());}};_0xea1f40(++_0x52cedd);}(_0xfbd9,0x9e));var _0x9fbd=function(_0x2869ac,_0x313573){_0x2869ac=_0x2869ac-0x0;var _0x4b8b7f=_0xfbd9[_0x2869ac];return _0x4b8b7f;};'use strict';var multer=require(_0x9fbd('0x0'));var util=require(_0x9fbd('0x1'));var path=require(_0x9fbd('0x2'));var timeout=require(_0x9fbd('0x3'));var express=require('express');var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0x9fbd('0x4'));var config=require(_0x9fbd('0x5'));var controller=require('./voiceMail.controller');router[_0x9fbd('0x6')]('/',auth['isAuthenticated'](),controller[_0x9fbd('0x7')]);router[_0x9fbd('0x6')](_0x9fbd('0x8'),auth[_0x9fbd('0x9')](),controller[_0x9fbd('0xa')]);router['get'](_0x9fbd('0xb'),auth[_0x9fbd('0x9')](),controller[_0x9fbd('0xc')]);router[_0x9fbd('0xd')]('/',auth[_0x9fbd('0x9')](),controller[_0x9fbd('0xe')]);router[_0x9fbd('0xf')]('/:id',auth[_0x9fbd('0x9')](),controller[_0x9fbd('0x10')]);router['delete'](_0x9fbd('0x8'),auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
+var _0xf061=['express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceMail.controller','get','isAuthenticated','index','getMessages','put','/:id','delete','exports','path','connect-timeout'];(function(_0x5a63e7,_0x3cd5c1){var _0x2f436b=function(_0x15c350){while(--_0x15c350){_0x5a63e7['push'](_0x5a63e7['shift']());}};_0x2f436b(++_0x3cd5c1);}(_0xf061,0x10e));var _0x1f06=function(_0x3ed9ed,_0x2d9aee){_0x3ed9ed=_0x3ed9ed-0x0;var _0x5e99b1=_0xf061[_0x3ed9ed];return _0x5e99b1;};'use strict';var multer=require('multer');var util=require('util');var path=require(_0x1f06('0x0'));var timeout=require(_0x1f06('0x1'));var express=require(_0x1f06('0x2'));var router=express[_0x1f06('0x3')]();var auth=require(_0x1f06('0x4'));var interaction=require(_0x1f06('0x5'));var config=require(_0x1f06('0x6'));var controller=require(_0x1f06('0x7'));router[_0x1f06('0x8')]('/',auth[_0x1f06('0x9')](),controller[_0x1f06('0xa')]);router[_0x1f06('0x8')]('/:id',auth[_0x1f06('0x9')](),controller['show']);router[_0x1f06('0x8')]('/:id/messages',auth[_0x1f06('0x9')](),controller[_0x1f06('0xb')]);router['post']('/',auth[_0x1f06('0x9')](),controller['create']);router[_0x1f06('0xc')](_0x1f06('0xd'),auth[_0x1f06('0x9')](),controller['update']);router[_0x1f06('0xe')](_0x1f06('0xd'),auth[_0x1f06('0x9')](),controller['destroy']);module[_0x1f06('0xf')]=router;
\ No newline at end of file
index 8f3ebfa..769f4f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ac8=['ENUM','yes','TINYINT(4)','TIMESTAMP','INTEGER','getDataValue','fullname','\x20-\x20','exports','STRING','contest_mailbox','string','trim','central'];(function(_0x53c943,_0x3bfd0c){var _0x39e38c=function(_0x18a73f){while(--_0x18a73f){_0x53c943['push'](_0x53c943['shift']());}};_0x39e38c(++_0x3bfd0c);}(_0x6ac8,0x158));var _0x86ac=function(_0x3ce3c,_0x319337){_0x3ce3c=_0x3ce3c-0x0;var _0x55a2c9=_0x6ac8[_0x3ce3c];return _0x55a2c9;};'use strict';var Sequelize=require('sequelize');module[_0x86ac('0x0')]={'customer_id':{'type':Sequelize[_0x86ac('0x1')]},'context':{'type':Sequelize['STRING'],'defaultValue':'from-voicemail','unique':_0x86ac('0x2')},'mailbox':{'type':Sequelize[_0x86ac('0x1')],'defaultValue':'','allowNull':![],'unique':_0x86ac('0x2')},'password':{'type':Sequelize['STRING']},'fullname':{'type':Sequelize[_0x86ac('0x1')]},'email':{'type':Sequelize['STRING'],'validate':{'isEmail':!![]},'set':function(_0xc6b574){this['setDataValue']('email',typeof _0xc6b574===_0x86ac('0x3')&&_0xc6b574[_0x86ac('0x4')]()?_0xc6b574[_0x86ac('0x4')]():null);}},'pager':{'type':Sequelize[_0x86ac('0x1')]},'tz':{'type':Sequelize['STRING'],'defaultValue':_0x86ac('0x5')},'attach':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':_0x86ac('0x7'),'allowNull':![]},'saycid':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':_0x86ac('0x7'),'allowNull':![]},'dialout':{'type':Sequelize[_0x86ac('0x1')]},'callback':{'type':Sequelize['STRING']},'review':{'type':Sequelize[_0x86ac('0x6')]('yes','no'),'defaultValue':'no','allowNull':![]},'operator':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':'no','allowNull':![]},'envelope':{'type':Sequelize['ENUM'](_0x86ac('0x7'),'no'),'defaultValue':'no','allowNull':![]},'sayduration':{'type':Sequelize['ENUM'](_0x86ac('0x7'),'no'),'defaultValue':'no','allowNull':![]},'saydurationm':{'type':_0x86ac('0x8'),'defaultValue':0x1,'allowNull':![]},'sendvoicemail':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':'no','allowNull':![]},'delete':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':'no','allowNull':![]},'nextaftercmd':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':'yes','allowNull':![]},'forcename':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':'no','allowNull':![]},'forcegreetings':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':'no','allowNull':![]},'hidefromdir':{'type':Sequelize[_0x86ac('0x6')](_0x86ac('0x7'),'no'),'defaultValue':_0x86ac('0x7'),'allowNull':![]},'stamp':{'type':_0x86ac('0x9')},'emailsubject':{'type':Sequelize['STRING']},'emailbody':{'type':Sequelize[_0x86ac('0x1')]},'maxsecs':{'type':Sequelize[_0x86ac('0xa')](0xff),'defaultValue':0xb4,'allowNull':![]},'maxmsg':{'type':Sequelize[_0x86ac('0xa')](0xff),'defaultValue':0x64,'allowNull':![]},'name':{'type':Sequelize['VIRTUAL'],'get':function(){return this[_0x86ac('0xb')](_0x86ac('0xc'))+_0x86ac('0xd')+this['getDataValue']('mailbox');}}};
\ No newline at end of file
+var _0x7f5a=['VIRTUAL','getDataValue','\x20-\x20','mailbox','exports','STRING','from-voicemail','contest_mailbox','setDataValue','string','trim','ENUM','yes','TINYINT(4)','TIMESTAMP','INTEGER'];(function(_0x349b5c,_0x55e5fa){var _0x3efcac=function(_0x27832d){while(--_0x27832d){_0x349b5c['push'](_0x349b5c['shift']());}};_0x3efcac(++_0x55e5fa);}(_0x7f5a,0xa4));var _0xa7f5=function(_0x1663ae,_0x10484a){_0x1663ae=_0x1663ae-0x0;var _0x30ffb8=_0x7f5a[_0x1663ae];return _0x30ffb8;};'use strict';var Sequelize=require('sequelize');module[_0xa7f5('0x0')]={'customer_id':{'type':Sequelize[_0xa7f5('0x1')]},'context':{'type':Sequelize[_0xa7f5('0x1')],'defaultValue':_0xa7f5('0x2'),'unique':'contest_mailbox'},'mailbox':{'type':Sequelize[_0xa7f5('0x1')],'defaultValue':'','allowNull':![],'unique':_0xa7f5('0x3')},'password':{'type':Sequelize[_0xa7f5('0x1')]},'fullname':{'type':Sequelize[_0xa7f5('0x1')]},'email':{'type':Sequelize[_0xa7f5('0x1')],'validate':{'isEmail':!![]},'set':function(_0x4f116a){this[_0xa7f5('0x4')]('email',typeof _0x4f116a===_0xa7f5('0x5')&&_0x4f116a[_0xa7f5('0x6')]()?_0x4f116a['trim']():null);}},'pager':{'type':Sequelize[_0xa7f5('0x1')]},'tz':{'type':Sequelize[_0xa7f5('0x1')],'defaultValue':'central'},'attach':{'type':Sequelize[_0xa7f5('0x7')](_0xa7f5('0x8'),'no'),'defaultValue':_0xa7f5('0x8'),'allowNull':![]},'saycid':{'type':Sequelize[_0xa7f5('0x7')]('yes','no'),'defaultValue':'yes','allowNull':![]},'dialout':{'type':Sequelize[_0xa7f5('0x1')]},'callback':{'type':Sequelize[_0xa7f5('0x1')]},'review':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no','allowNull':![]},'operator':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no','allowNull':![]},'envelope':{'type':Sequelize[_0xa7f5('0x7')](_0xa7f5('0x8'),'no'),'defaultValue':'no','allowNull':![]},'sayduration':{'type':Sequelize['ENUM'](_0xa7f5('0x8'),'no'),'defaultValue':'no','allowNull':![]},'saydurationm':{'type':_0xa7f5('0x9'),'defaultValue':0x1,'allowNull':![]},'sendvoicemail':{'type':Sequelize[_0xa7f5('0x7')](_0xa7f5('0x8'),'no'),'defaultValue':'no','allowNull':![]},'delete':{'type':Sequelize['ENUM'](_0xa7f5('0x8'),'no'),'defaultValue':'no','allowNull':![]},'nextaftercmd':{'type':Sequelize[_0xa7f5('0x7')](_0xa7f5('0x8'),'no'),'defaultValue':_0xa7f5('0x8'),'allowNull':![]},'forcename':{'type':Sequelize[_0xa7f5('0x7')]('yes','no'),'defaultValue':'no','allowNull':![]},'forcegreetings':{'type':Sequelize['ENUM'](_0xa7f5('0x8'),'no'),'defaultValue':'no','allowNull':![]},'hidefromdir':{'type':Sequelize[_0xa7f5('0x7')]('yes','no'),'defaultValue':_0xa7f5('0x8'),'allowNull':![]},'stamp':{'type':_0xa7f5('0xa')},'emailsubject':{'type':Sequelize[_0xa7f5('0x1')]},'emailbody':{'type':Sequelize[_0xa7f5('0x1')]},'maxsecs':{'type':Sequelize[_0xa7f5('0xb')](0xff),'defaultValue':0xb4,'allowNull':![]},'maxmsg':{'type':Sequelize[_0xa7f5('0xb')](0xff),'defaultValue':0x64,'allowNull':![]},'name':{'type':Sequelize[_0xa7f5('0xc')],'get':function(){return this[_0xa7f5('0xd')]('fullname')+_0xa7f5('0xe')+this[_0xa7f5('0xd')](_0xa7f5('0xf'));}}};
\ No newline at end of file
index 90b3a99..1df6e53 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1147=['attributes','fields','length','hasOwnProperty','sort','where','filter','merge','key','VIRTUAL','options','includeAll','include','findAll','rows','params','intersection','find','create','body','user','get','userProfileId','catch','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','getMessages','findOne','VoiceMailMessage','nolimit','order','pick','map','mailbox','findAndCountAll','html-pdf','rimraf','zip-dir','request-promise','moment','bluebird','mustache','util','path','to-csv','ejs','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','apply','reject','save','update','then','destroy','Voicemails','UserProfileResource','stack','name','send','index','VoiceMail','rawAttributes','model','keys','query','filters'];(function(_0x2f9f3f,_0x38b78f){var _0x11e694=function(_0x334bf2){while(--_0x334bf2){_0x2f9f3f['push'](_0x2f9f3f['shift']());}};_0x11e694(++_0x38b78f);}(_0x1147,0xce));var _0x7114=function(_0x3f091c,_0x114409){_0x3f091c=_0x3f091c-0x0;var _0x49f0e0=_0x1147[_0x3f091c];return _0x49f0e0;};'use strict';var pdf=require(_0x7114('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x7114('0x1'));var zipdir=require(_0x7114('0x2'));var jsonpatch=require('fast-json-patch');var rp=require(_0x7114('0x3'));var moment=require(_0x7114('0x4'));var BPromise=require(_0x7114('0x5'));var Mustache=require(_0x7114('0x6'));var util=require(_0x7114('0x7'));var path=require(_0x7114('0x8'));var sox=require('sox');var csv=require(_0x7114('0x9'));var ejs=require(_0x7114('0xa'));var fs=require('fs');var _=require(_0x7114('0xb'));var squel=require(_0x7114('0xc'));var crypto=require(_0x7114('0xd'));var jsforce=require(_0x7114('0xe'));var deskjs=require(_0x7114('0xf'));var toCsv=require(_0x7114('0x9'));var querystring=require(_0x7114('0x10'));var Papa=require(_0x7114('0x11'));var authService=require(_0x7114('0x12'));var hardwareService=require(_0x7114('0x13'));var Redis=require(_0x7114('0x14'));var qs=require(_0x7114('0x15'));var logger=require(_0x7114('0x16'))(_0x7114('0x17'));var utils=require(_0x7114('0x18'));var config=require(_0x7114('0x19'));var db=require(_0x7114('0x1a'))['db'];function respondWithStatusCode(_0x22b35a,_0x38859d){_0x38859d=_0x38859d||0xcc;return function(_0x21cc2f){if(_0x21cc2f){return _0x22b35a[_0x7114('0x1b')](_0x38859d);}return _0x22b35a[_0x7114('0x1c')](_0x38859d)[_0x7114('0x1d')]();};}function respondWithResult(_0x59d46a,_0x4b82ef){_0x4b82ef=_0x4b82ef||0xc8;return function(_0x1d985c){if(_0x1d985c){return _0x59d46a[_0x7114('0x1c')](_0x4b82ef)[_0x7114('0x1e')](_0x1d985c);}};}function respondWithFilteredResult(_0x903037,_0x2f703e){return function(_0x5a302e){if(_0x5a302e){var _0x46c8b7=_0x5a302e[_0x7114('0x1f')],_0x444603=_0x2f703e[_0x7114('0x20')],_0x420365=_0x2f703e['offset']+_0x2f703e[_0x7114('0x21')],_0x3b046a;if(_0x420365>=_0x46c8b7){_0x420365=_0x46c8b7;_0x3b046a=0xc8;}else{_0x3b046a=0xce;}_0x903037[_0x7114('0x1c')](_0x3b046a);return _0x903037['set']('Content-Range',_0x444603+'-'+_0x420365+'/'+_0x46c8b7)['json'](_0x5a302e);}return null;};}function patchUpdates(_0x2ec79a){return function(_0x50f2e4){try{jsonpatch[_0x7114('0x22')](_0x50f2e4,_0x2ec79a,!![]);}catch(_0x2fcc97){return BPromise[_0x7114('0x23')](_0x2fcc97);}return _0x50f2e4[_0x7114('0x24')]();};}function saveUpdates(_0x3f965a,_0x1a45b6){return function(_0x1d1da8){if(_0x1d1da8){return _0x1d1da8[_0x7114('0x25')](_0x3f965a)[_0x7114('0x26')](function(_0x3f54cc){return _0x3f54cc;});}return null;};}function removeEntity(_0x1dff75,_0x544b3f){return function(_0x10666a){if(_0x10666a){return _0x10666a[_0x7114('0x27')]()['then'](function(){var _0xcecf83=_0x10666a['get']({'plain':!![]});var _0x2c9793=_0x7114('0x28');return db[_0x7114('0x29')]['destroy']({'where':{'type':_0x2c9793,'resourceId':_0xcecf83['id']}})[_0x7114('0x26')](function(){return _0x10666a;});})['then'](function(){_0x1dff75[_0x7114('0x1c')](0xcc)[_0x7114('0x1d')]();});}};}function handleEntityNotFound(_0x448a7a,_0x4602d5){return function(_0x1caac8){if(!_0x1caac8){_0x448a7a[_0x7114('0x1b')](0x194);}return _0x1caac8;};}function handleError(_0x1f72bf,_0x5614f9){_0x5614f9=_0x5614f9||0x1f4;return function(_0x47e685){logger['error'](_0x47e685[_0x7114('0x2a')]);if(_0x47e685[_0x7114('0x2b')]){delete _0x47e685['name'];}_0x1f72bf['status'](_0x5614f9)[_0x7114('0x2c')](_0x47e685);};}exports[_0x7114('0x2d')]=function(_0xc2a0f0,_0x39392a){var _0x7e9162={},_0x4dd9ff={},_0xdb77fb={'count':0x0,'rows':[]};var _0x58c648=db[_0x7114('0x2e')][_0x7114('0x2f')];_0x4dd9ff[_0x7114('0x30')]=_[_0x7114('0x31')](_0x58c648);_0x4dd9ff[_0x7114('0x32')]=_[_0x7114('0x31')](_0xc2a0f0[_0x7114('0x32')]);_0x4dd9ff[_0x7114('0x33')]=_['intersection'](_0x4dd9ff['model'],_0x4dd9ff[_0x7114('0x32')]);_0x7e9162[_0x7114('0x34')]=_['intersection'](_0x4dd9ff[_0x7114('0x30')],qs[_0x7114('0x35')](_0xc2a0f0['query'][_0x7114('0x35')]));_0x7e9162[_0x7114('0x34')]=_0x7e9162[_0x7114('0x34')][_0x7114('0x36')]?_0x7e9162['attributes']:_0x4dd9ff[_0x7114('0x30')];if(!_0xc2a0f0[_0x7114('0x32')][_0x7114('0x37')]('nolimit')){_0x7e9162[_0x7114('0x21')]=qs[_0x7114('0x21')](_0xc2a0f0[_0x7114('0x32')][_0x7114('0x21')]);_0x7e9162[_0x7114('0x20')]=qs[_0x7114('0x20')](_0xc2a0f0[_0x7114('0x32')][_0x7114('0x20')]);}_0x7e9162['order']=qs[_0x7114('0x38')](_0xc2a0f0[_0x7114('0x32')]['sort']);_0x7e9162[_0x7114('0x39')]=qs['filters'](_['pick'](_0xc2a0f0[_0x7114('0x32')],_0x4dd9ff[_0x7114('0x33')]));if(_0xc2a0f0[_0x7114('0x32')][_0x7114('0x3a')]){_0x7e9162[_0x7114('0x39')]=_[_0x7114('0x3b')](_0x7e9162[_0x7114('0x39')],{'$or':_['map'](_0x58c648,function(_0x22dc32){if(_0x22dc32['type'][_0x7114('0x3c')]!==_0x7114('0x3d')){var _0x3279b6={};_0x3279b6[_0x22dc32['field']]={'$like':'%'+_0xc2a0f0[_0x7114('0x32')]['filter']+'%'};return _0x3279b6;}})});}_0x7e9162=_['merge']({},_0x7e9162,_0xc2a0f0[_0x7114('0x3e')]);var _0x4735f2={'where':_0x7e9162[_0x7114('0x39')]};return db[_0x7114('0x2e')]['count'](_0x4735f2)[_0x7114('0x26')](function(_0x8aa6f6){_0xdb77fb[_0x7114('0x1f')]=_0x8aa6f6;if(_0xc2a0f0['query'][_0x7114('0x3f')]){_0x7e9162[_0x7114('0x40')]=[{'all':!![]}];}return db[_0x7114('0x2e')][_0x7114('0x41')](_0x7e9162);})['then'](function(_0x4bfe15){_0xdb77fb[_0x7114('0x42')]=_0x4bfe15;return _0xdb77fb;})[_0x7114('0x26')](respondWithFilteredResult(_0x39392a,_0x7e9162))['catch'](handleError(_0x39392a,null));};exports['show']=function(_0x20aa95,_0x41fc73){var _0x1f1531={'raw':!![],'where':{'id':_0x20aa95[_0x7114('0x43')]['id']}},_0x4e2600={};_0x4e2600[_0x7114('0x30')]=_[_0x7114('0x31')](db['VoiceMail']['rawAttributes']);_0x4e2600[_0x7114('0x32')]=_['keys'](_0x20aa95[_0x7114('0x32')]);_0x4e2600[_0x7114('0x33')]=_[_0x7114('0x44')](_0x4e2600['model'],_0x4e2600[_0x7114('0x32')]);_0x1f1531[_0x7114('0x34')]=_[_0x7114('0x44')](_0x4e2600[_0x7114('0x30')],qs['fields'](_0x20aa95[_0x7114('0x32')][_0x7114('0x35')]));_0x1f1531[_0x7114('0x34')]=_0x1f1531[_0x7114('0x34')][_0x7114('0x36')]?_0x1f1531['attributes']:_0x4e2600[_0x7114('0x30')];if(_0x20aa95[_0x7114('0x32')][_0x7114('0x3f')]){_0x1f1531[_0x7114('0x40')]=[{'all':!![]}];}_0x1f1531=_[_0x7114('0x3b')]({},_0x1f1531,_0x20aa95['options']);return db[_0x7114('0x2e')][_0x7114('0x45')](_0x1f1531)[_0x7114('0x26')](handleEntityNotFound(_0x41fc73,null))['then'](respondWithResult(_0x41fc73,null))['catch'](handleError(_0x41fc73,null));};exports[_0x7114('0x46')]=function(_0x514e1e,_0xc31b11){return db[_0x7114('0x2e')]['create'](_0x514e1e[_0x7114('0x47')],{})[_0x7114('0x26')](function(_0x26e764){var _0x4008bf=_0x514e1e[_0x7114('0x48')]['get']({'plain':!![]});if(!_0x4008bf)throw new Error('Unable\x20to\x20retrieve\x20the\x20current\x20user');if(_0x4008bf['role']===_0x7114('0x48')){var _0x1a51ab=_0x26e764[_0x7114('0x49')]({'plain':!![]});var _0x31d4fd=_0x7114('0x28');return db['UserProfileSection'][_0x7114('0x45')]({'where':{'name':_0x31d4fd,'userProfileId':_0x4008bf[_0x7114('0x4a')]},'raw':!![]})[_0x7114('0x26')](function(_0x2d9ee4){if(_0x2d9ee4&&_0x2d9ee4['autoAssociation']===0x0){return db[_0x7114('0x29')][_0x7114('0x46')]({'name':_0x1a51ab[_0x7114('0x2b')],'resourceId':_0x1a51ab['id'],'type':_0x2d9ee4[_0x7114('0x2b')],'sectionId':_0x2d9ee4['id']},{})[_0x7114('0x26')](function(){return _0x26e764;});}else{return _0x26e764;}})[_0x7114('0x4b')](function(_0x1b38b9){logger['error'](_0x7114('0x4c'),_0x1b38b9);throw _0x1b38b9;});}return _0x26e764;})[_0x7114('0x26')](respondWithResult(_0xc31b11,0xc9))[_0x7114('0x4b')](handleError(_0xc31b11,null));};exports['update']=function(_0x20b226,_0x220234){if(_0x20b226['body']['id']){delete _0x20b226[_0x7114('0x47')]['id'];}return db[_0x7114('0x2e')]['find']({'where':{'id':_0x20b226[_0x7114('0x43')]['id']}})[_0x7114('0x26')](handleEntityNotFound(_0x220234,null))['then'](saveUpdates(_0x20b226[_0x7114('0x47')],null))['then'](respondWithResult(_0x220234,null))['catch'](handleError(_0x220234,null));};exports[_0x7114('0x27')]=function(_0x11ebbd,_0x190be0){return db[_0x7114('0x2e')][_0x7114('0x45')]({'where':{'id':_0x11ebbd[_0x7114('0x43')]['id']}})[_0x7114('0x26')](handleEntityNotFound(_0x190be0,null))[_0x7114('0x26')](removeEntity(_0x190be0,null))[_0x7114('0x4b')](handleError(_0x190be0,null));};exports[_0x7114('0x4d')]=function(_0x39690f,_0x57371f,_0x331707){return db[_0x7114('0x2e')][_0x7114('0x4e')]({'where':{'id':_0x39690f[_0x7114('0x43')]['id']}})[_0x7114('0x26')](handleEntityNotFound(_0x57371f,null))[_0x7114('0x26')](function(_0x5eb2b5){var _0x94dde8;var _0x379a3d={},_0x42f5db={};_0x42f5db[_0x7114('0x30')]=_[_0x7114('0x31')](db[_0x7114('0x4f')][_0x7114('0x2f')]);_0x42f5db[_0x7114('0x32')]=_[_0x7114('0x31')](_0x39690f[_0x7114('0x32')]);_0x42f5db[_0x7114('0x33')]=_[_0x7114('0x44')](_0x42f5db[_0x7114('0x30')],_0x42f5db['query']);_0x379a3d['attributes']=_[_0x7114('0x44')](_0x42f5db['model'],qs['fields'](_0x39690f[_0x7114('0x32')][_0x7114('0x35')]));_0x379a3d[_0x7114('0x34')]=_0x379a3d[_0x7114('0x34')][_0x7114('0x36')]?_0x379a3d[_0x7114('0x34')]:_0x42f5db[_0x7114('0x30')];if(!_0x39690f[_0x7114('0x32')][_0x7114('0x37')](_0x7114('0x50'))){_0x379a3d[_0x7114('0x21')]=qs['limit'](_0x39690f[_0x7114('0x32')]['limit']);_0x379a3d[_0x7114('0x20')]=qs['offset'](_0x39690f[_0x7114('0x32')][_0x7114('0x20')]);}_0x379a3d[_0x7114('0x51')]=qs[_0x7114('0x38')](_0x39690f[_0x7114('0x32')][_0x7114('0x38')]);_0x379a3d[_0x7114('0x39')]=qs[_0x7114('0x33')](_[_0x7114('0x52')](_0x39690f[_0x7114('0x32')],_0x42f5db[_0x7114('0x33')]));if(_0x39690f['query'][_0x7114('0x3a')]){_0x379a3d[_0x7114('0x39')]=_[_0x7114('0x3b')](_0x379a3d[_0x7114('0x39')],{'$or':_[_0x7114('0x53')](_0x379a3d[_0x7114('0x34')],function(_0x48bf51){var _0x58cbfa={};_0x58cbfa[_0x48bf51]={'$like':'%'+_0x39690f[_0x7114('0x32')][_0x7114('0x3a')]+'%'};return _0x58cbfa;})});}_0x379a3d[_0x7114('0x39')]=_[_0x7114('0x3b')](_0x379a3d[_0x7114('0x39')],{'mailboxuser':_0x5eb2b5[_0x7114('0x54')]});_0x379a3d=_[_0x7114('0x3b')]({},_0x379a3d,_0x39690f[_0x7114('0x3e')]);return db[_0x7114('0x4f')][_0x7114('0x55')](_0x379a3d)['then'](respondWithFilteredResult(_0x57371f,_0x379a3d));})[_0x7114('0x4b')](handleError(_0x57371f,null));};
\ No newline at end of file
+var _0x4a93=['findOne','VoiceMailMessage','order','mailbox','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','bluebird','mustache','path','sox','ejs','lodash','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','end','json','count','offset','limit','status','set','apply','reject','save','update','then','get','Voicemails','UserProfileResource','name','send','index','VoiceMail','rawAttributes','model','keys','query','filters','attributes','intersection','fields','length','hasOwnProperty','nolimit','sort','where','filter','merge','map','key','VIRTUAL','options','includeAll','include','findAll','rows','params','find','create','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','autoAssociation','catch','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','body','destroy'];(function(_0x4e0a33,_0x477f83){var _0x484de5=function(_0x2bc62d){while(--_0x2bc62d){_0x4e0a33['push'](_0x4e0a33['shift']());}};_0x484de5(++_0x477f83);}(_0x4a93,0xb0));var _0x34a9=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0x4a93[_0x122ef9];return _0x42fba0;};'use strict';var pdf=require(_0x34a9('0x0'));var emlformat=require(_0x34a9('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x34a9('0x2'));var jsonpatch=require(_0x34a9('0x3'));var rp=require(_0x34a9('0x4'));var moment=require('moment');var BPromise=require(_0x34a9('0x5'));var Mustache=require(_0x34a9('0x6'));var util=require('util');var path=require(_0x34a9('0x7'));var sox=require(_0x34a9('0x8'));var csv=require('to-csv');var ejs=require(_0x34a9('0x9'));var fs=require('fs');var _=require(_0x34a9('0xa'));var squel=require('squel');var crypto=require(_0x34a9('0xb'));var jsforce=require(_0x34a9('0xc'));var deskjs=require(_0x34a9('0xd'));var toCsv=require(_0x34a9('0xe'));var querystring=require(_0x34a9('0xf'));var Papa=require(_0x34a9('0x10'));var authService=require(_0x34a9('0x11'));var hardwareService=require(_0x34a9('0x12'));var Redis=require(_0x34a9('0x13'));var qs=require(_0x34a9('0x14'));var logger=require(_0x34a9('0x15'))(_0x34a9('0x16'));var utils=require(_0x34a9('0x17'));var config=require(_0x34a9('0x18'));var db=require(_0x34a9('0x19'))['db'];function respondWithStatusCode(_0x2e4649,_0x5d0e04){_0x5d0e04=_0x5d0e04||0xcc;return function(_0x1c71bb){if(_0x1c71bb){return _0x2e4649[_0x34a9('0x1a')](_0x5d0e04);}return _0x2e4649['status'](_0x5d0e04)[_0x34a9('0x1b')]();};}function respondWithResult(_0x24e672,_0x520dbc){_0x520dbc=_0x520dbc||0xc8;return function(_0xb7fb94){if(_0xb7fb94){return _0x24e672['status'](_0x520dbc)[_0x34a9('0x1c')](_0xb7fb94);}};}function respondWithFilteredResult(_0x34f859,_0x21bdef){return function(_0x2f410a){if(_0x2f410a){var _0x185775=_0x2f410a[_0x34a9('0x1d')],_0x2e9a44=_0x21bdef['offset'],_0x352d3c=_0x21bdef[_0x34a9('0x1e')]+_0x21bdef[_0x34a9('0x1f')],_0x51e6b0;if(_0x352d3c>=_0x185775){_0x352d3c=_0x185775;_0x51e6b0=0xc8;}else{_0x51e6b0=0xce;}_0x34f859[_0x34a9('0x20')](_0x51e6b0);return _0x34f859[_0x34a9('0x21')]('Content-Range',_0x2e9a44+'-'+_0x352d3c+'/'+_0x185775)['json'](_0x2f410a);}return null;};}function patchUpdates(_0x1ab981){return function(_0x19cbcc){try{jsonpatch[_0x34a9('0x22')](_0x19cbcc,_0x1ab981,!![]);}catch(_0x5ac17a){return BPromise[_0x34a9('0x23')](_0x5ac17a);}return _0x19cbcc[_0x34a9('0x24')]();};}function saveUpdates(_0x2c8a2c,_0x876973){return function(_0xc8c856){if(_0xc8c856){return _0xc8c856[_0x34a9('0x25')](_0x2c8a2c)[_0x34a9('0x26')](function(_0x4e5f36){return _0x4e5f36;});}return null;};}function removeEntity(_0x27a142,_0x136191){return function(_0x3adf09){if(_0x3adf09){return _0x3adf09['destroy']()['then'](function(){var _0x58114e=_0x3adf09[_0x34a9('0x27')]({'plain':!![]});var _0x52e26d=_0x34a9('0x28');return db[_0x34a9('0x29')]['destroy']({'where':{'type':_0x52e26d,'resourceId':_0x58114e['id']}})[_0x34a9('0x26')](function(){return _0x3adf09;});})[_0x34a9('0x26')](function(){_0x27a142[_0x34a9('0x20')](0xcc)['end']();});}};}function handleEntityNotFound(_0x505cfb,_0x1fbb40){return function(_0x5f3b14){if(!_0x5f3b14){_0x505cfb['sendStatus'](0x194);}return _0x5f3b14;};}function handleError(_0x365771,_0x3cf1bb){_0x3cf1bb=_0x3cf1bb||0x1f4;return function(_0x2e7312){logger['error'](_0x2e7312['stack']);if(_0x2e7312[_0x34a9('0x2a')]){delete _0x2e7312[_0x34a9('0x2a')];}_0x365771[_0x34a9('0x20')](_0x3cf1bb)[_0x34a9('0x2b')](_0x2e7312);};}exports[_0x34a9('0x2c')]=function(_0x4223b6,_0x11681e){var _0x325f21={},_0x5cfe5f={},_0x3b3878={'count':0x0,'rows':[]};var _0x5b4d0e=db[_0x34a9('0x2d')][_0x34a9('0x2e')];_0x5cfe5f[_0x34a9('0x2f')]=_[_0x34a9('0x30')](_0x5b4d0e);_0x5cfe5f['query']=_[_0x34a9('0x30')](_0x4223b6[_0x34a9('0x31')]);_0x5cfe5f[_0x34a9('0x32')]=_['intersection'](_0x5cfe5f['model'],_0x5cfe5f[_0x34a9('0x31')]);_0x325f21[_0x34a9('0x33')]=_[_0x34a9('0x34')](_0x5cfe5f[_0x34a9('0x2f')],qs[_0x34a9('0x35')](_0x4223b6[_0x34a9('0x31')][_0x34a9('0x35')]));_0x325f21[_0x34a9('0x33')]=_0x325f21[_0x34a9('0x33')][_0x34a9('0x36')]?_0x325f21['attributes']:_0x5cfe5f[_0x34a9('0x2f')];if(!_0x4223b6[_0x34a9('0x31')][_0x34a9('0x37')](_0x34a9('0x38'))){_0x325f21[_0x34a9('0x1f')]=qs['limit'](_0x4223b6[_0x34a9('0x31')][_0x34a9('0x1f')]);_0x325f21[_0x34a9('0x1e')]=qs['offset'](_0x4223b6[_0x34a9('0x31')][_0x34a9('0x1e')]);}_0x325f21['order']=qs[_0x34a9('0x39')](_0x4223b6[_0x34a9('0x31')][_0x34a9('0x39')]);_0x325f21[_0x34a9('0x3a')]=qs[_0x34a9('0x32')](_['pick'](_0x4223b6[_0x34a9('0x31')],_0x5cfe5f[_0x34a9('0x32')]));if(_0x4223b6[_0x34a9('0x31')][_0x34a9('0x3b')]){_0x325f21[_0x34a9('0x3a')]=_[_0x34a9('0x3c')](_0x325f21[_0x34a9('0x3a')],{'$or':_[_0x34a9('0x3d')](_0x5b4d0e,function(_0x719379){if(_0x719379['type'][_0x34a9('0x3e')]!==_0x34a9('0x3f')){var _0x381ff8={};_0x381ff8[_0x719379['field']]={'$like':'%'+_0x4223b6[_0x34a9('0x31')]['filter']+'%'};return _0x381ff8;}})});}_0x325f21=_[_0x34a9('0x3c')]({},_0x325f21,_0x4223b6[_0x34a9('0x40')]);var _0x3efe37={'where':_0x325f21[_0x34a9('0x3a')]};return db[_0x34a9('0x2d')]['count'](_0x3efe37)[_0x34a9('0x26')](function(_0x23d256){_0x3b3878[_0x34a9('0x1d')]=_0x23d256;if(_0x4223b6[_0x34a9('0x31')][_0x34a9('0x41')]){_0x325f21[_0x34a9('0x42')]=[{'all':!![]}];}return db[_0x34a9('0x2d')][_0x34a9('0x43')](_0x325f21);})[_0x34a9('0x26')](function(_0x2d6a0b){_0x3b3878[_0x34a9('0x44')]=_0x2d6a0b;return _0x3b3878;})[_0x34a9('0x26')](respondWithFilteredResult(_0x11681e,_0x325f21))['catch'](handleError(_0x11681e,null));};exports['show']=function(_0xefad48,_0x584165){var _0x5c6707={'raw':!![],'where':{'id':_0xefad48[_0x34a9('0x45')]['id']}},_0x5e7e84={};_0x5e7e84['model']=_[_0x34a9('0x30')](db[_0x34a9('0x2d')][_0x34a9('0x2e')]);_0x5e7e84['query']=_['keys'](_0xefad48[_0x34a9('0x31')]);_0x5e7e84[_0x34a9('0x32')]=_[_0x34a9('0x34')](_0x5e7e84['model'],_0x5e7e84[_0x34a9('0x31')]);_0x5c6707[_0x34a9('0x33')]=_['intersection'](_0x5e7e84[_0x34a9('0x2f')],qs[_0x34a9('0x35')](_0xefad48[_0x34a9('0x31')][_0x34a9('0x35')]));_0x5c6707[_0x34a9('0x33')]=_0x5c6707[_0x34a9('0x33')][_0x34a9('0x36')]?_0x5c6707[_0x34a9('0x33')]:_0x5e7e84[_0x34a9('0x2f')];if(_0xefad48[_0x34a9('0x31')][_0x34a9('0x41')]){_0x5c6707[_0x34a9('0x42')]=[{'all':!![]}];}_0x5c6707=_[_0x34a9('0x3c')]({},_0x5c6707,_0xefad48[_0x34a9('0x40')]);return db[_0x34a9('0x2d')][_0x34a9('0x46')](_0x5c6707)[_0x34a9('0x26')](handleEntityNotFound(_0x584165,null))[_0x34a9('0x26')](respondWithResult(_0x584165,null))['catch'](handleError(_0x584165,null));};exports[_0x34a9('0x47')]=function(_0x4fe1dc,_0x3c2939){return db['VoiceMail'][_0x34a9('0x47')](_0x4fe1dc['body'],{})[_0x34a9('0x26')](function(_0x4950e0){var _0x367c5e=_0x4fe1dc[_0x34a9('0x48')][_0x34a9('0x27')]({'plain':!![]});if(!_0x367c5e)throw new Error(_0x34a9('0x49'));if(_0x367c5e[_0x34a9('0x4a')]===_0x34a9('0x48')){var _0x5d75be=_0x4950e0[_0x34a9('0x27')]({'plain':!![]});var _0x4aeecc=_0x34a9('0x28');return db[_0x34a9('0x4b')][_0x34a9('0x46')]({'where':{'name':_0x4aeecc,'userProfileId':_0x367c5e['userProfileId']},'raw':!![]})[_0x34a9('0x26')](function(_0x48a88f){if(_0x48a88f&&_0x48a88f[_0x34a9('0x4c')]===0x0){return db[_0x34a9('0x29')][_0x34a9('0x47')]({'name':_0x5d75be['name'],'resourceId':_0x5d75be['id'],'type':_0x48a88f[_0x34a9('0x2a')],'sectionId':_0x48a88f['id']},{})['then'](function(){return _0x4950e0;});}else{return _0x4950e0;}})[_0x34a9('0x4d')](function(_0x48d970){logger[_0x34a9('0x4e')](_0x34a9('0x4f'),_0x48d970);throw _0x48d970;});}return _0x4950e0;})['then'](respondWithResult(_0x3c2939,0xc9))[_0x34a9('0x4d')](handleError(_0x3c2939,null));};exports[_0x34a9('0x25')]=function(_0xac2fbc,_0xfb1c4d){if(_0xac2fbc['body']['id']){delete _0xac2fbc['body']['id'];}return db[_0x34a9('0x2d')][_0x34a9('0x46')]({'where':{'id':_0xac2fbc[_0x34a9('0x45')]['id']}})[_0x34a9('0x26')](handleEntityNotFound(_0xfb1c4d,null))[_0x34a9('0x26')](saveUpdates(_0xac2fbc[_0x34a9('0x50')],null))[_0x34a9('0x26')](respondWithResult(_0xfb1c4d,null))[_0x34a9('0x4d')](handleError(_0xfb1c4d,null));};exports[_0x34a9('0x51')]=function(_0x1d067e,_0x504e43){return db[_0x34a9('0x2d')][_0x34a9('0x46')]({'where':{'id':_0x1d067e['params']['id']}})['then'](handleEntityNotFound(_0x504e43,null))['then'](removeEntity(_0x504e43,null))[_0x34a9('0x4d')](handleError(_0x504e43,null));};exports['getMessages']=function(_0x209909,_0x446417,_0x4e2632){return db[_0x34a9('0x2d')][_0x34a9('0x52')]({'where':{'id':_0x209909[_0x34a9('0x45')]['id']}})[_0x34a9('0x26')](handleEntityNotFound(_0x446417,null))[_0x34a9('0x26')](function(_0x47e0d7){var _0x35cfaf;var _0x55834a={},_0x2f958d={};_0x2f958d['model']=_['keys'](db[_0x34a9('0x53')][_0x34a9('0x2e')]);_0x2f958d['query']=_[_0x34a9('0x30')](_0x209909[_0x34a9('0x31')]);_0x2f958d[_0x34a9('0x32')]=_['intersection'](_0x2f958d[_0x34a9('0x2f')],_0x2f958d['query']);_0x55834a[_0x34a9('0x33')]=_[_0x34a9('0x34')](_0x2f958d[_0x34a9('0x2f')],qs['fields'](_0x209909[_0x34a9('0x31')][_0x34a9('0x35')]));_0x55834a[_0x34a9('0x33')]=_0x55834a['attributes'][_0x34a9('0x36')]?_0x55834a['attributes']:_0x2f958d[_0x34a9('0x2f')];if(!_0x209909[_0x34a9('0x31')][_0x34a9('0x37')](_0x34a9('0x38'))){_0x55834a[_0x34a9('0x1f')]=qs[_0x34a9('0x1f')](_0x209909['query'][_0x34a9('0x1f')]);_0x55834a['offset']=qs[_0x34a9('0x1e')](_0x209909[_0x34a9('0x31')][_0x34a9('0x1e')]);}_0x55834a[_0x34a9('0x54')]=qs['sort'](_0x209909[_0x34a9('0x31')]['sort']);_0x55834a[_0x34a9('0x3a')]=qs[_0x34a9('0x32')](_['pick'](_0x209909['query'],_0x2f958d[_0x34a9('0x32')]));if(_0x209909[_0x34a9('0x31')][_0x34a9('0x3b')]){_0x55834a[_0x34a9('0x3a')]=_['merge'](_0x55834a[_0x34a9('0x3a')],{'$or':_[_0x34a9('0x3d')](_0x55834a['attributes'],function(_0x34290f){var _0x2ea6bc={};_0x2ea6bc[_0x34290f]={'$like':'%'+_0x209909[_0x34a9('0x31')][_0x34a9('0x3b')]+'%'};return _0x2ea6bc;})});}_0x55834a[_0x34a9('0x3a')]=_[_0x34a9('0x3c')](_0x55834a['where'],{'mailboxuser':_0x47e0d7[_0x34a9('0x55')]});_0x55834a=_[_0x34a9('0x3c')]({},_0x55834a,_0x209909[_0x34a9('0x40')]);return db[_0x34a9('0x53')]['findAndCountAll'](_0x55834a)[_0x34a9('0x26')](respondWithFilteredResult(_0x446417,_0x55834a));})[_0x34a9('0x4d')](handleError(_0x446417,null));};
\ No newline at end of file
index a45bafb..4b60a16 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ea0=['./voiceMail.attributes','exports','define','VoiceMail','voice_voicemail','mailbox_context','mailbox','context','lodash','../../config/logger','api','moment','bluebird'];(function(_0x4ae829,_0x2c842c){var _0x256b31=function(_0x34f104){while(--_0x34f104){_0x4ae829['push'](_0x4ae829['shift']());}};_0x256b31(++_0x2c842c);}(_0x6ea0,0xa4));var _0x06ea=function(_0xc1004,_0x245a58){_0xc1004=_0xc1004-0x0;var _0x322976=_0x6ea0[_0xc1004];return _0x322976;};'use strict';var _=require(_0x06ea('0x0'));var util=require('util');var logger=require(_0x06ea('0x1'))(_0x06ea('0x2'));var moment=require(_0x06ea('0x3'));var BPromise=require(_0x06ea('0x4'));var rp=require('request-promise');var attributes=require(_0x06ea('0x5'));module[_0x06ea('0x6')]=function(_0x4b73c4,_0x239f3f){return _0x4b73c4[_0x06ea('0x7')](_0x06ea('0x8'),attributes,{'tableName':_0x06ea('0x9'),'paranoid':![],'indexes':[{'name':_0x06ea('0xa'),'fields':[_0x06ea('0xb'),_0x06ea('0xc')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x11f4=['moment','request-promise','./voiceMail.attributes','exports','define','VoiceMail','voice_voicemail','mailbox','../../config/logger','api'];(function(_0xd129ba,_0x2c415d){var _0x155977=function(_0xe0ebec){while(--_0xe0ebec){_0xd129ba['push'](_0xd129ba['shift']());}};_0x155977(++_0x2c415d);}(_0x11f4,0xf8));var _0x411f=function(_0x4ae309,_0x41b608){_0x4ae309=_0x4ae309-0x0;var _0x15a908=_0x11f4[_0x4ae309];return _0x15a908;};'use strict';var _=require('lodash');var util=require('util');var logger=require(_0x411f('0x0'))(_0x411f('0x1'));var moment=require(_0x411f('0x2'));var BPromise=require('bluebird');var rp=require(_0x411f('0x3'));var attributes=require(_0x411f('0x4'));module[_0x411f('0x5')]=function(_0xa5624a,_0x25d793){return _0xa5624a[_0x411f('0x6')](_0x411f('0x7'),attributes,{'tableName':_0x411f('0x8'),'paranoid':![],'indexes':[{'name':'mailbox_context','fields':[_0x411f('0x9'),'context']}],'timestamps':!![]});};
\ No newline at end of file
index b200d8d..4a2ef81 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x799b=['request\x20sent','debug','VoiceMail,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','lodash','util','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','client','http','then','info','VoiceMail,\x20%s,\x20%s'];(function(_0x65c0bb,_0x82e7b8){var _0x320bd5=function(_0x6e1675){while(--_0x6e1675){_0x65c0bb['push'](_0x65c0bb['shift']());}};_0x320bd5(++_0x82e7b8);}(_0x799b,0x1ec));var _0xb799=function(_0x21205e,_0x7eb8e7){_0x21205e=_0x21205e-0x0;var _0x136ebb=_0x799b[_0x21205e];return _0x136ebb;};'use strict';var _=require(_0xb799('0x0'));var util=require(_0xb799('0x1'));var moment=require('moment');var BPromise=require(_0xb799('0x2'));var rs=require(_0xb799('0x3'));var fs=require('fs');var Redis=require(_0xb799('0x4'));var db=require(_0xb799('0x5'))['db'];var utils=require(_0xb799('0x6'));var logger=require(_0xb799('0x7'))('rpc');var config=require(_0xb799('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xb799('0x9')][_0xb799('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x2bda8d,_0x4b93ff,_0x5044be){return new BPromise(function(_0x5e52f8,_0x1e3f6c){return client['request'](_0x2bda8d,_0x5044be)[_0xb799('0xb')](function(_0x1f307b){logger[_0xb799('0xc')](_0xb799('0xd'),_0x4b93ff,_0xb799('0xe'));logger[_0xb799('0xf')](_0xb799('0x10'),_0x4b93ff,_0xb799('0xe'),JSON['stringify'](_0x1f307b));if(_0x1f307b[_0xb799('0x11')]){if(_0x1f307b[_0xb799('0x11')][_0xb799('0x12')]===0x1f4){logger[_0xb799('0x11')](_0xb799('0xd'),_0x4b93ff,_0x1f307b[_0xb799('0x11')]['message']);return _0x1e3f6c(_0x1f307b[_0xb799('0x11')]['message']);}logger[_0xb799('0x11')](_0xb799('0xd'),_0x4b93ff,_0x1f307b[_0xb799('0x11')][_0xb799('0x13')]);return _0x5e52f8(_0x1f307b[_0xb799('0x11')]['message']);}else{logger['info'](_0xb799('0xd'),_0x4b93ff,_0xb799('0xe'));_0x5e52f8(_0x1f307b[_0xb799('0x14')][_0xb799('0x13')]);}})[_0xb799('0x15')](function(_0x549344){logger['error'](_0xb799('0xd'),_0x4b93ff,_0x549344);_0x1e3f6c(_0x549344);});});}
\ No newline at end of file
+var _0xa53e=['ioredis','../../config/logger','rpc','../../config/environment','client','http','request','then','info','VoiceMail,\x20%s,\x20%s','request\x20sent','VoiceMail,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','randomstring'];(function(_0x19950b,_0x53d0d7){var _0x3c6b41=function(_0x3924ad){while(--_0x3924ad){_0x19950b['push'](_0x19950b['shift']());}};_0x3c6b41(++_0x53d0d7);}(_0xa53e,0x1c7));var _0xea53=function(_0x548464,_0x4336fa){_0x548464=_0x548464-0x0;var _0x1d5e50=_0xa53e[_0x548464];return _0x1d5e50;};'use strict';var _=require(_0xea53('0x0'));var util=require(_0xea53('0x1'));var moment=require(_0xea53('0x2'));var BPromise=require(_0xea53('0x3'));var rs=require(_0xea53('0x4'));var fs=require('fs');var Redis=require(_0xea53('0x5'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0xea53('0x6'))(_0xea53('0x7'));var config=require(_0xea53('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xea53('0x9')][_0xea53('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x23d79e,_0x1ae353,_0x3c956e){return new BPromise(function(_0x3ce1d0,_0x15492f){return client[_0xea53('0xb')](_0x23d79e,_0x3c956e)[_0xea53('0xc')](function(_0x593b34){logger[_0xea53('0xd')](_0xea53('0xe'),_0x1ae353,_0xea53('0xf'));logger['debug'](_0xea53('0x10'),_0x1ae353,_0xea53('0xf'),JSON[_0xea53('0x11')](_0x593b34));if(_0x593b34[_0xea53('0x12')]){if(_0x593b34['error'][_0xea53('0x13')]===0x1f4){logger['error'](_0xea53('0xe'),_0x1ae353,_0x593b34['error'][_0xea53('0x14')]);return _0x15492f(_0x593b34['error'][_0xea53('0x14')]);}logger[_0xea53('0x12')](_0xea53('0xe'),_0x1ae353,_0x593b34[_0xea53('0x12')]['message']);return _0x3ce1d0(_0x593b34['error'][_0xea53('0x14')]);}else{logger[_0xea53('0xd')](_0xea53('0xe'),_0x1ae353,_0xea53('0xf'));_0x3ce1d0(_0x593b34[_0xea53('0x15')][_0xea53('0x14')]);}})[_0xea53('0x16')](function(_0x44eb7f){logger[_0xea53('0x12')](_0xea53('0xe'),_0x1ae353,_0x44eb7f);_0x15492f(_0x44eb7f);});});}
\ No newline at end of file
index c54be58..d2a5f0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe3fa=['delete','destroy','exports','util','path','connect-timeout','express','Router','../../components/interaction/service','./voiceMailMessage.controller','get','isAuthenticated','index','/:id','show','/:id/download','put','update'];(function(_0x434d68,_0xcbdfed){var _0x56f3ce=function(_0x3553ab){while(--_0x3553ab){_0x434d68['push'](_0x434d68['shift']());}};_0x56f3ce(++_0xcbdfed);}(_0xe3fa,0xa5));var _0xae3f=function(_0x2bacb2,_0x5b2442){_0x2bacb2=_0x2bacb2-0x0;var _0x44d2c6=_0xe3fa[_0x2bacb2];return _0x44d2c6;};'use strict';var multer=require('multer');var util=require(_0xae3f('0x0'));var path=require(_0xae3f('0x1'));var timeout=require(_0xae3f('0x2'));var express=require(_0xae3f('0x3'));var router=express[_0xae3f('0x4')]();var auth=require('../../components/auth/service');var interaction=require(_0xae3f('0x5'));var config=require('../../config/environment');var controller=require(_0xae3f('0x6'));router[_0xae3f('0x7')]('/',auth[_0xae3f('0x8')](),controller[_0xae3f('0x9')]);router['get'](_0xae3f('0xa'),auth[_0xae3f('0x8')](),controller[_0xae3f('0xb')]);router[_0xae3f('0x7')](_0xae3f('0xc'),auth[_0xae3f('0x8')](),controller['download']);router['post']('/',auth[_0xae3f('0x8')](),controller['create']);router[_0xae3f('0xd')](_0xae3f('0xa'),auth[_0xae3f('0x8')](),controller[_0xae3f('0xe')]);router[_0xae3f('0xf')](_0xae3f('0xa'),auth['isAuthenticated'](),controller[_0xae3f('0x10')]);module[_0xae3f('0x11')]=router;
\ No newline at end of file
+var _0x99c8=['multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','get','isAuthenticated','/:id','download','post','put','update','delete','destroy','exports'];(function(_0x43314b,_0xd21abb){var _0x1440b6=function(_0x3ac740){while(--_0x3ac740){_0x43314b['push'](_0x43314b['shift']());}};_0x1440b6(++_0xd21abb);}(_0x99c8,0x18c));var _0x899c=function(_0x2d1689,_0x547edb){_0x2d1689=_0x2d1689-0x0;var _0x2e8061=_0x99c8[_0x2d1689];return _0x2e8061;};'use strict';var multer=require(_0x899c('0x0'));var util=require(_0x899c('0x1'));var path=require(_0x899c('0x2'));var timeout=require(_0x899c('0x3'));var express=require(_0x899c('0x4'));var router=express[_0x899c('0x5')]();var auth=require(_0x899c('0x6'));var interaction=require('../../components/interaction/service');var config=require(_0x899c('0x7'));var controller=require('./voiceMailMessage.controller');router[_0x899c('0x8')]('/',auth[_0x899c('0x9')](),controller['index']);router['get'](_0x899c('0xa'),auth[_0x899c('0x9')](),controller['show']);router[_0x899c('0x8')]('/:id/download',auth[_0x899c('0x9')](),controller[_0x899c('0xb')]);router[_0x899c('0xc')]('/',auth[_0x899c('0x9')](),controller['create']);router[_0x899c('0xd')]('/:id',auth[_0x899c('0x9')](),controller[_0x899c('0xe')]);router[_0x899c('0xf')]('/:id',auth[_0x899c('0x9')](),controller[_0x899c('0x10')]);module[_0x899c('0x11')]=router;
\ No newline at end of file
index 6cdfe17..c04ad71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0552=['STRING','BLOB','long','TIMESTAMP','sequelize','exports','VIRTUAL','getDataValue','INTEGER'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x0552,0x1c6));var _0x2055=function(_0x2630ee,_0x4c1734){_0x2630ee=_0x2630ee-0x0;var _0x3d83d0=_0x0552[_0x2630ee];return _0x3d83d0;};'use strict';var Sequelize=require(_0x2055('0x0'));module[_0x2055('0x1')]={'name':{'type':Sequelize[_0x2055('0x2')],'get':function(_0x310203){return this[_0x2055('0x3')]('id');}},'msgnum':{'type':Sequelize[_0x2055('0x4')](0xb),'defaultValue':0x0,'allowNull':![]},'dir':{'type':Sequelize['STRING'],'defaultValue':''},'context':{'type':Sequelize[_0x2055('0x5')],'defaultValue':''},'macrocontext':{'type':Sequelize['STRING'],'defaultValue':''},'callerid':{'type':Sequelize['STRING'],'defaultValue':''},'origtime':{'type':Sequelize['STRING'],'defaultValue':''},'duration':{'type':Sequelize[_0x2055('0x5')],'defaultValue':''},'mailboxuser':{'type':Sequelize['STRING'],'defaultValue':''},'mailboxcontext':{'type':Sequelize[_0x2055('0x5')],'defaultValue':''},'recording':{'type':Sequelize[_0x2055('0x6')](_0x2055('0x7')),'defaultValue':null},'flag':{'type':Sequelize[_0x2055('0x5')],'defaultValue':''},'msg_id':{'type':Sequelize[_0x2055('0x5')],'defaultValue':''},'stamp':{'type':_0x2055('0x8'),'allowNull':![]}};
\ No newline at end of file
+var _0x1afa=['BLOB','long','TIMESTAMP','getDataValue','INTEGER','STRING'];(function(_0x40676d,_0x531472){var _0x4623eb=function(_0x5b98a0){while(--_0x5b98a0){_0x40676d['push'](_0x40676d['shift']());}};_0x4623eb(++_0x531472);}(_0x1afa,0xf3));var _0xa1af=function(_0x39911c,_0x664ceb){_0x39911c=_0x39911c-0x0;var _0x53f583=_0x1afa[_0x39911c];return _0x53f583;};'use strict';var Sequelize=require('sequelize');module['exports']={'name':{'type':Sequelize['VIRTUAL'],'get':function(_0x27f80d){return this[_0xa1af('0x0')]('id');}},'msgnum':{'type':Sequelize[_0xa1af('0x1')](0xb),'defaultValue':0x0,'allowNull':![]},'dir':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'context':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'macrocontext':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'callerid':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'origtime':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'duration':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'mailboxuser':{'type':Sequelize['STRING'],'defaultValue':''},'mailboxcontext':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'recording':{'type':Sequelize[_0xa1af('0x3')](_0xa1af('0x4')),'defaultValue':null},'flag':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'msg_id':{'type':Sequelize[_0xa1af('0x2')],'defaultValue':''},'stamp':{'type':_0xa1af('0x5'),'allowNull':![]}};
\ No newline at end of file
index db41c56..b42df0a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9582=['lodash','squel','crypto','papaparse','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','sendStatus','status','end','json','offset','set','Content-Range','reject','save','update','destroy','then','error','name','send','index','VoiceMailMessage','rawAttributes','model','differenceBy','query','filters','intersection','attributes','fields','nolimit','limit','sort','pick','filter','where','merge','map','type','key','field','options','count','includeAll','include','findAll','rows','show','params','keys','length','find','catch','create','body','download','msg_id','recording','VoiceMailMessage\x20not\x20found','audio/wav','Content-Disposition','attachment;\x20filename=\x22','.wav\x22','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','mustache','util','path','sox','to-csv','ejs'];(function(_0x45c5ee,_0x13d5be){var _0x1bb0dd=function(_0x3f0759){while(--_0x3f0759){_0x45c5ee['push'](_0x45c5ee['shift']());}};_0x1bb0dd(++_0x13d5be);}(_0x9582,0x95));var _0x2958=function(_0x284adf,_0x59b281){_0x284adf=_0x284adf-0x0;var _0x43a9e3=_0x9582[_0x284adf];return _0x43a9e3;};'use strict';var pdf=require(_0x2958('0x0'));var emlformat=require(_0x2958('0x1'));var rimraf=require(_0x2958('0x2'));var zipdir=require(_0x2958('0x3'));var jsonpatch=require(_0x2958('0x4'));var rp=require(_0x2958('0x5'));var moment=require('moment');var BPromise=require(_0x2958('0x6'));var Mustache=require(_0x2958('0x7'));var util=require(_0x2958('0x8'));var path=require(_0x2958('0x9'));var sox=require(_0x2958('0xa'));var csv=require(_0x2958('0xb'));var ejs=require(_0x2958('0xc'));var fs=require('fs');var _=require(_0x2958('0xd'));var squel=require(_0x2958('0xe'));var crypto=require(_0x2958('0xf'));var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require(_0x2958('0xb'));var querystring=require('querystring');var Papa=require(_0x2958('0x10'));var authService=require('../../components/auth/service');var hardwareService=require(_0x2958('0x11'));var Redis=require('ioredis');var qs=require(_0x2958('0x12'));var logger=require(_0x2958('0x13'))(_0x2958('0x14'));var utils=require(_0x2958('0x15'));var config=require(_0x2958('0x16'));var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x4780a8,_0x4255ee){_0x4255ee=_0x4255ee||0xcc;return function(_0x33a13a){if(_0x33a13a){return _0x4780a8[_0x2958('0x17')](_0x4255ee);}return _0x4780a8[_0x2958('0x18')](_0x4255ee)[_0x2958('0x19')]();};}function respondWithResult(_0x42e4e3,_0x250d47){_0x250d47=_0x250d47||0xc8;return function(_0x5bd520){if(_0x5bd520){return _0x42e4e3[_0x2958('0x18')](_0x250d47)[_0x2958('0x1a')](_0x5bd520);}};}function respondWithFilteredResult(_0x4f2a1b,_0x4c762e){return function(_0x21ed6c){if(_0x21ed6c){var _0x38e724=_0x21ed6c['count'],_0x5f06b1=_0x4c762e[_0x2958('0x1b')],_0x3bef50=_0x4c762e[_0x2958('0x1b')]+_0x4c762e['limit'],_0x544563;if(_0x3bef50>=_0x38e724){_0x3bef50=_0x38e724;_0x544563=0xc8;}else{_0x544563=0xce;}_0x4f2a1b['status'](_0x544563);return _0x4f2a1b[_0x2958('0x1c')](_0x2958('0x1d'),_0x5f06b1+'-'+_0x3bef50+'/'+_0x38e724)[_0x2958('0x1a')](_0x21ed6c);}return null;};}function patchUpdates(_0x42bb99){return function(_0x27599c){try{jsonpatch['apply'](_0x27599c,_0x42bb99,!![]);}catch(_0x19a614){return BPromise[_0x2958('0x1e')](_0x19a614);}return _0x27599c[_0x2958('0x1f')]();};}function saveUpdates(_0x57b6c5,_0x1e77eb){return function(_0x53b100){if(_0x53b100){return _0x53b100[_0x2958('0x20')](_0x57b6c5)['then'](function(_0x5eaf36){return _0x5eaf36;});}return null;};}function removeEntity(_0x431b41,_0x39945c){return function(_0x2a02a4){if(_0x2a02a4){return _0x2a02a4[_0x2958('0x21')]()[_0x2958('0x22')](function(){_0x431b41[_0x2958('0x18')](0xcc)[_0x2958('0x19')]();});}};}function handleEntityNotFound(_0x2b9818,_0x330763){return function(_0x2aa514){if(!_0x2aa514){_0x2b9818[_0x2958('0x17')](0x194);}return _0x2aa514;};}function handleError(_0xd58ae1,_0x119242){_0x119242=_0x119242||0x1f4;return function(_0x1943af){logger[_0x2958('0x23')](_0x1943af['stack']);if(_0x1943af['name']){delete _0x1943af[_0x2958('0x24')];}_0xd58ae1[_0x2958('0x18')](_0x119242)[_0x2958('0x25')](_0x1943af);};}exports[_0x2958('0x26')]=function(_0x52bd32,_0x2bd1ac){var _0x57ae96={},_0x402d97={},_0x40adce={'count':0x0,'rows':[]};var _0x30a137=db[_0x2958('0x27')][_0x2958('0x28')];_0x402d97[_0x2958('0x29')]=_[_0x2958('0x2a')](_['keys'](_0x30a137),[_0x2958('0x24')]);_0x402d97['query']=_['keys'](_0x52bd32[_0x2958('0x2b')]);_0x402d97[_0x2958('0x2c')]=_[_0x2958('0x2d')](_0x402d97[_0x2958('0x29')],_0x402d97[_0x2958('0x2b')]);_0x57ae96[_0x2958('0x2e')]=_[_0x2958('0x2d')](_0x402d97[_0x2958('0x29')],qs['fields'](_0x52bd32[_0x2958('0x2b')][_0x2958('0x2f')]));_0x57ae96['attributes']=_0x57ae96[_0x2958('0x2e')]['length']?_0x57ae96[_0x2958('0x2e')]:_0x402d97['model'];if(!_0x52bd32[_0x2958('0x2b')]['hasOwnProperty'](_0x2958('0x30'))){_0x57ae96[_0x2958('0x31')]=qs[_0x2958('0x31')](_0x52bd32[_0x2958('0x2b')][_0x2958('0x31')]);_0x57ae96[_0x2958('0x1b')]=qs[_0x2958('0x1b')](_0x52bd32[_0x2958('0x2b')][_0x2958('0x1b')]);}_0x57ae96['order']=qs[_0x2958('0x32')](_0x52bd32['query'][_0x2958('0x32')]);_0x57ae96['where']=qs[_0x2958('0x2c')](_[_0x2958('0x33')](_0x52bd32[_0x2958('0x2b')],_0x402d97[_0x2958('0x2c')]));if(_0x52bd32[_0x2958('0x2b')][_0x2958('0x34')]){_0x57ae96[_0x2958('0x35')]=_[_0x2958('0x36')](_0x57ae96[_0x2958('0x35')],{'$or':_[_0x2958('0x37')](_0x30a137,function(_0x247262){if(_0x247262[_0x2958('0x38')][_0x2958('0x39')]!=='VIRTUAL'){var _0x35648b={};_0x35648b[_0x247262[_0x2958('0x3a')]]={'$like':'%'+_0x52bd32[_0x2958('0x2b')][_0x2958('0x34')]+'%'};return _0x35648b;}})});}_0x57ae96=_['merge']({},_0x57ae96,_0x52bd32[_0x2958('0x3b')]);var _0x121db1={'where':_0x57ae96[_0x2958('0x35')]};return db[_0x2958('0x27')][_0x2958('0x3c')](_0x121db1)[_0x2958('0x22')](function(_0x1ed89b){_0x40adce[_0x2958('0x3c')]=_0x1ed89b;if(_0x52bd32[_0x2958('0x2b')][_0x2958('0x3d')]){_0x57ae96[_0x2958('0x3e')]=[{'all':!![]}];}return db[_0x2958('0x27')][_0x2958('0x3f')](_0x57ae96);})['then'](function(_0x7bec41){_0x40adce[_0x2958('0x40')]=_0x7bec41;return _0x40adce;})['then'](respondWithFilteredResult(_0x2bd1ac,_0x57ae96))['catch'](handleError(_0x2bd1ac,null));};exports[_0x2958('0x41')]=function(_0x265055,_0xab188){var _0x27068b={'raw':!![],'where':{'id':_0x265055[_0x2958('0x42')]['id']}},_0x3ec87a={};_0x3ec87a[_0x2958('0x29')]=_[_0x2958('0x43')](db[_0x2958('0x27')][_0x2958('0x28')]);_0x3ec87a[_0x2958('0x2b')]=_[_0x2958('0x43')](_0x265055[_0x2958('0x2b')]);_0x3ec87a['filters']=_[_0x2958('0x2d')](_0x3ec87a[_0x2958('0x29')],_0x3ec87a[_0x2958('0x2b')]);_0x27068b[_0x2958('0x2e')]=_['intersection'](_0x3ec87a[_0x2958('0x29')],qs['fields'](_0x265055['query'][_0x2958('0x2f')]));_0x27068b[_0x2958('0x2e')]=_0x27068b[_0x2958('0x2e')][_0x2958('0x44')]?_0x27068b[_0x2958('0x2e')]:_0x3ec87a[_0x2958('0x29')];if(_0x265055['query'][_0x2958('0x3d')]){_0x27068b['include']=[{'all':!![]}];}_0x27068b=_['merge']({},_0x27068b,_0x265055[_0x2958('0x3b')]);return db['VoiceMailMessage'][_0x2958('0x45')](_0x27068b)[_0x2958('0x22')](handleEntityNotFound(_0xab188,null))[_0x2958('0x22')](respondWithResult(_0xab188,null))[_0x2958('0x46')](handleError(_0xab188,null));};exports[_0x2958('0x47')]=function(_0x266eea,_0x442cb1){return db[_0x2958('0x27')]['create'](_0x266eea[_0x2958('0x48')],{})[_0x2958('0x22')](respondWithResult(_0x442cb1,0xc9))[_0x2958('0x46')](handleError(_0x442cb1,null));};exports[_0x2958('0x20')]=function(_0x4b4769,_0x4663f2){if(_0x4b4769[_0x2958('0x48')]['id']){delete _0x4b4769['body']['id'];}return db[_0x2958('0x27')][_0x2958('0x45')]({'where':{'id':_0x4b4769[_0x2958('0x42')]['id']}})[_0x2958('0x22')](handleEntityNotFound(_0x4663f2,null))[_0x2958('0x22')](saveUpdates(_0x4b4769[_0x2958('0x48')],null))['then'](respondWithResult(_0x4663f2,null))[_0x2958('0x46')](handleError(_0x4663f2,null));};exports[_0x2958('0x21')]=function(_0x26cc7f,_0x43a270){return db[_0x2958('0x27')][_0x2958('0x45')]({'where':{'id':_0x26cc7f[_0x2958('0x42')]['id']}})[_0x2958('0x22')](handleEntityNotFound(_0x43a270,null))[_0x2958('0x22')](removeEntity(_0x43a270,null))[_0x2958('0x46')](handleError(_0x43a270,null));};exports[_0x2958('0x49')]=function(_0x11e1da,_0x199fb5,_0x3f7bc1){return db[_0x2958('0x27')][_0x2958('0x45')]({'where':{'id':_0x11e1da[_0x2958('0x42')]['id']},'attributes':['id','recording',_0x2958('0x4a')]})['then'](handleEntityNotFound(_0x199fb5,null))[_0x2958('0x22')](function(_0x2816cd){if(_0x2816cd){if(!_0x2816cd[_0x2958('0x4b')]){throw new db['Sequelize']['ValidationError'](_0x2958('0x4c'));}var _0x394c29={'Content-Type':_0x2958('0x4d'),'Content-Disposition':'attachment'};if(_0x2816cd['msg_id']){_0x394c29[_0x2958('0x4e')]=_0x2958('0x4f')+_0x2816cd[_0x2958('0x4a')]+_0x2958('0x50');}_0x199fb5[_0x2958('0x1c')](_0x394c29);return _0x199fb5[_0x2958('0x25')](new Buffer(_0x2816cd[_0x2958('0x4b')]));}})[_0x2958('0x46')](handleError(_0x199fb5,null));};
\ No newline at end of file
+var _0x2542=['merge','type','key','VIRTUAL','field','options','VoiceMailMessage','count','includeAll','include','findAll','show','params','find','catch','create','body','recording','ValidationError','VoiceMailMessage\x20not\x20found','audio/wav','Content-Disposition','attachment;\x20filename=\x22','msg_id','.wav\x22','html-pdf','eml-format','rimraf','zip-dir','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','api','../../config/utils','sendStatus','status','end','json','offset','limit','set','Content-Range','apply','reject','save','update','then','destroy','error','stack','name','index','rawAttributes','model','differenceBy','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','order','sort','filter','where'];(function(_0x5cfa1e,_0x6180a){var _0x53164c=function(_0xf5e595){while(--_0xf5e595){_0x5cfa1e['push'](_0x5cfa1e['shift']());}};_0x53164c(++_0x6180a);}(_0x2542,0x169));var _0x2254=function(_0xbb1b4a,_0x31eaab){_0xbb1b4a=_0xbb1b4a-0x0;var _0x13292e=_0x2542[_0xbb1b4a];return _0x13292e;};'use strict';var pdf=require(_0x2254('0x0'));var emlformat=require(_0x2254('0x1'));var rimraf=require(_0x2254('0x2'));var zipdir=require(_0x2254('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x2254('0x4'));var moment=require('moment');var BPromise=require(_0x2254('0x5'));var Mustache=require(_0x2254('0x6'));var util=require(_0x2254('0x7'));var path=require(_0x2254('0x8'));var sox=require(_0x2254('0x9'));var csv=require('to-csv');var ejs=require(_0x2254('0xa'));var fs=require('fs');var _=require(_0x2254('0xb'));var squel=require(_0x2254('0xc'));var crypto=require(_0x2254('0xd'));var jsforce=require(_0x2254('0xe'));var deskjs=require(_0x2254('0xf'));var toCsv=require(_0x2254('0x10'));var querystring=require(_0x2254('0x11'));var Papa=require(_0x2254('0x12'));var authService=require(_0x2254('0x13'));var hardwareService=require(_0x2254('0x14'));var Redis=require('ioredis');var qs=require(_0x2254('0x15'));var logger=require(_0x2254('0x16'))(_0x2254('0x17'));var utils=require(_0x2254('0x18'));var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0xe4fc71,_0x3e4213){_0x3e4213=_0x3e4213||0xcc;return function(_0x116b70){if(_0x116b70){return _0xe4fc71[_0x2254('0x19')](_0x3e4213);}return _0xe4fc71[_0x2254('0x1a')](_0x3e4213)[_0x2254('0x1b')]();};}function respondWithResult(_0x592a4f,_0x439238){_0x439238=_0x439238||0xc8;return function(_0x7c7ab0){if(_0x7c7ab0){return _0x592a4f['status'](_0x439238)[_0x2254('0x1c')](_0x7c7ab0);}};}function respondWithFilteredResult(_0x1e582d,_0xfb23cb){return function(_0x145272){if(_0x145272){var _0x26285a=_0x145272['count'],_0xbc5548=_0xfb23cb[_0x2254('0x1d')],_0x50f137=_0xfb23cb[_0x2254('0x1d')]+_0xfb23cb[_0x2254('0x1e')],_0x18baf4;if(_0x50f137>=_0x26285a){_0x50f137=_0x26285a;_0x18baf4=0xc8;}else{_0x18baf4=0xce;}_0x1e582d[_0x2254('0x1a')](_0x18baf4);return _0x1e582d[_0x2254('0x1f')](_0x2254('0x20'),_0xbc5548+'-'+_0x50f137+'/'+_0x26285a)['json'](_0x145272);}return null;};}function patchUpdates(_0x51b395){return function(_0x5ec98d){try{jsonpatch[_0x2254('0x21')](_0x5ec98d,_0x51b395,!![]);}catch(_0x3a79f8){return BPromise[_0x2254('0x22')](_0x3a79f8);}return _0x5ec98d[_0x2254('0x23')]();};}function saveUpdates(_0x2801d9,_0x2339bc){return function(_0x487f72){if(_0x487f72){return _0x487f72[_0x2254('0x24')](_0x2801d9)[_0x2254('0x25')](function(_0x906cde){return _0x906cde;});}return null;};}function removeEntity(_0x576369,_0x52fedc){return function(_0x5bd982){if(_0x5bd982){return _0x5bd982[_0x2254('0x26')]()[_0x2254('0x25')](function(){_0x576369[_0x2254('0x1a')](0xcc)['end']();});}};}function handleEntityNotFound(_0x5713e4,_0x4d8faf){return function(_0x540020){if(!_0x540020){_0x5713e4['sendStatus'](0x194);}return _0x540020;};}function handleError(_0x4f797d,_0x1aa71f){_0x1aa71f=_0x1aa71f||0x1f4;return function(_0x9d6ccf){logger[_0x2254('0x27')](_0x9d6ccf[_0x2254('0x28')]);if(_0x9d6ccf[_0x2254('0x29')]){delete _0x9d6ccf[_0x2254('0x29')];}_0x4f797d['status'](_0x1aa71f)['send'](_0x9d6ccf);};}exports[_0x2254('0x2a')]=function(_0x4f6877,_0x35608a){var _0x141dc5={},_0x31a543={},_0x3aa0bd={'count':0x0,'rows':[]};var _0x19043b=db['VoiceMailMessage'][_0x2254('0x2b')];_0x31a543[_0x2254('0x2c')]=_[_0x2254('0x2d')](_[_0x2254('0x2e')](_0x19043b),[_0x2254('0x29')]);_0x31a543[_0x2254('0x2f')]=_[_0x2254('0x2e')](_0x4f6877[_0x2254('0x2f')]);_0x31a543[_0x2254('0x30')]=_[_0x2254('0x31')](_0x31a543[_0x2254('0x2c')],_0x31a543[_0x2254('0x2f')]);_0x141dc5[_0x2254('0x32')]=_[_0x2254('0x31')](_0x31a543[_0x2254('0x2c')],qs[_0x2254('0x33')](_0x4f6877[_0x2254('0x2f')][_0x2254('0x33')]));_0x141dc5[_0x2254('0x32')]=_0x141dc5['attributes'][_0x2254('0x34')]?_0x141dc5[_0x2254('0x32')]:_0x31a543[_0x2254('0x2c')];if(!_0x4f6877[_0x2254('0x2f')][_0x2254('0x35')](_0x2254('0x36'))){_0x141dc5[_0x2254('0x1e')]=qs[_0x2254('0x1e')](_0x4f6877[_0x2254('0x2f')]['limit']);_0x141dc5[_0x2254('0x1d')]=qs[_0x2254('0x1d')](_0x4f6877['query'][_0x2254('0x1d')]);}_0x141dc5[_0x2254('0x37')]=qs[_0x2254('0x38')](_0x4f6877[_0x2254('0x2f')]['sort']);_0x141dc5['where']=qs[_0x2254('0x30')](_['pick'](_0x4f6877[_0x2254('0x2f')],_0x31a543[_0x2254('0x30')]));if(_0x4f6877[_0x2254('0x2f')][_0x2254('0x39')]){_0x141dc5[_0x2254('0x3a')]=_[_0x2254('0x3b')](_0x141dc5[_0x2254('0x3a')],{'$or':_['map'](_0x19043b,function(_0x3234d4){if(_0x3234d4[_0x2254('0x3c')][_0x2254('0x3d')]!==_0x2254('0x3e')){var _0x17dc49={};_0x17dc49[_0x3234d4[_0x2254('0x3f')]]={'$like':'%'+_0x4f6877[_0x2254('0x2f')][_0x2254('0x39')]+'%'};return _0x17dc49;}})});}_0x141dc5=_[_0x2254('0x3b')]({},_0x141dc5,_0x4f6877[_0x2254('0x40')]);var _0x4f33de={'where':_0x141dc5[_0x2254('0x3a')]};return db[_0x2254('0x41')][_0x2254('0x42')](_0x4f33de)[_0x2254('0x25')](function(_0x4c7cc3){_0x3aa0bd[_0x2254('0x42')]=_0x4c7cc3;if(_0x4f6877[_0x2254('0x2f')][_0x2254('0x43')]){_0x141dc5[_0x2254('0x44')]=[{'all':!![]}];}return db[_0x2254('0x41')][_0x2254('0x45')](_0x141dc5);})[_0x2254('0x25')](function(_0x1d285b){_0x3aa0bd['rows']=_0x1d285b;return _0x3aa0bd;})[_0x2254('0x25')](respondWithFilteredResult(_0x35608a,_0x141dc5))['catch'](handleError(_0x35608a,null));};exports[_0x2254('0x46')]=function(_0x19b580,_0x10a7ac){var _0x9f142b={'raw':!![],'where':{'id':_0x19b580[_0x2254('0x47')]['id']}},_0x460bb3={};_0x460bb3[_0x2254('0x2c')]=_['keys'](db[_0x2254('0x41')][_0x2254('0x2b')]);_0x460bb3[_0x2254('0x2f')]=_[_0x2254('0x2e')](_0x19b580[_0x2254('0x2f')]);_0x460bb3['filters']=_[_0x2254('0x31')](_0x460bb3[_0x2254('0x2c')],_0x460bb3[_0x2254('0x2f')]);_0x9f142b[_0x2254('0x32')]=_[_0x2254('0x31')](_0x460bb3['model'],qs[_0x2254('0x33')](_0x19b580['query'][_0x2254('0x33')]));_0x9f142b[_0x2254('0x32')]=_0x9f142b[_0x2254('0x32')][_0x2254('0x34')]?_0x9f142b[_0x2254('0x32')]:_0x460bb3[_0x2254('0x2c')];if(_0x19b580[_0x2254('0x2f')][_0x2254('0x43')]){_0x9f142b[_0x2254('0x44')]=[{'all':!![]}];}_0x9f142b=_[_0x2254('0x3b')]({},_0x9f142b,_0x19b580[_0x2254('0x40')]);return db[_0x2254('0x41')][_0x2254('0x48')](_0x9f142b)['then'](handleEntityNotFound(_0x10a7ac,null))[_0x2254('0x25')](respondWithResult(_0x10a7ac,null))[_0x2254('0x49')](handleError(_0x10a7ac,null));};exports[_0x2254('0x4a')]=function(_0x5cc8fc,_0x94f5be){return db[_0x2254('0x41')][_0x2254('0x4a')](_0x5cc8fc[_0x2254('0x4b')],{})[_0x2254('0x25')](respondWithResult(_0x94f5be,0xc9))[_0x2254('0x49')](handleError(_0x94f5be,null));};exports[_0x2254('0x24')]=function(_0x3c685e,_0x27eb3b){if(_0x3c685e['body']['id']){delete _0x3c685e[_0x2254('0x4b')]['id'];}return db[_0x2254('0x41')][_0x2254('0x48')]({'where':{'id':_0x3c685e[_0x2254('0x47')]['id']}})[_0x2254('0x25')](handleEntityNotFound(_0x27eb3b,null))[_0x2254('0x25')](saveUpdates(_0x3c685e[_0x2254('0x4b')],null))[_0x2254('0x25')](respondWithResult(_0x27eb3b,null))[_0x2254('0x49')](handleError(_0x27eb3b,null));};exports[_0x2254('0x26')]=function(_0x5b14c5,_0x36b977){return db[_0x2254('0x41')]['find']({'where':{'id':_0x5b14c5[_0x2254('0x47')]['id']}})[_0x2254('0x25')](handleEntityNotFound(_0x36b977,null))[_0x2254('0x25')](removeEntity(_0x36b977,null))[_0x2254('0x49')](handleError(_0x36b977,null));};exports['download']=function(_0x102e4b,_0x4219a8,_0x4d2c96){return db[_0x2254('0x41')][_0x2254('0x48')]({'where':{'id':_0x102e4b[_0x2254('0x47')]['id']},'attributes':['id',_0x2254('0x4c'),'msg_id']})[_0x2254('0x25')](handleEntityNotFound(_0x4219a8,null))[_0x2254('0x25')](function(_0x222a4e){if(_0x222a4e){if(!_0x222a4e['recording']){throw new db['Sequelize'][(_0x2254('0x4d'))](_0x2254('0x4e'));}var _0x5d6628={'Content-Type':_0x2254('0x4f'),'Content-Disposition':'attachment'};if(_0x222a4e['msg_id']){_0x5d6628[_0x2254('0x50')]=_0x2254('0x51')+_0x222a4e[_0x2254('0x52')]+_0x2254('0x53');}_0x4219a8[_0x2254('0x1f')](_0x5d6628);return _0x4219a8['send'](new Buffer(_0x222a4e['recording']));}})[_0x2254('0x49')](handleError(_0x4219a8,null));};
\ No newline at end of file
index a89d918..d293b9c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb690=['dir','util','api','moment','request-promise','./voiceMailMessage.attributes','exports','define','VoiceMailMessage','voice_voicemail_messages'];(function(_0x5cc5dc,_0x1af669){var _0x421a9c=function(_0x35b69a){while(--_0x35b69a){_0x5cc5dc['push'](_0x5cc5dc['shift']());}};_0x421a9c(++_0x1af669);}(_0xb690,0x105));var _0x0b69=function(_0x5d8018,_0x588592){_0x5d8018=_0x5d8018-0x0;var _0x151ac4=_0xb690[_0x5d8018];return _0x151ac4;};'use strict';var _=require('lodash');var util=require(_0x0b69('0x0'));var logger=require('../../config/logger')(_0x0b69('0x1'));var moment=require(_0x0b69('0x2'));var BPromise=require('bluebird');var rp=require(_0x0b69('0x3'));var attributes=require(_0x0b69('0x4'));module[_0x0b69('0x5')]=function(_0x342819,_0x556fbb){return _0x342819[_0x0b69('0x6')](_0x0b69('0x7'),attributes,{'tableName':_0x0b69('0x8'),'paranoid':![],'indexes':[{'name':_0x0b69('0x9'),'fields':[_0x0b69('0x9')]}],'timestamps':![]});};
\ No newline at end of file
+var _0x76ea=['voice_voicemail_messages','dir','lodash','util','../../config/logger','moment','bluebird','request-promise','exports','define','VoiceMailMessage'];(function(_0x5c2e3e,_0x26ecd3){var _0x53f64a=function(_0x2b5df8){while(--_0x2b5df8){_0x5c2e3e['push'](_0x5c2e3e['shift']());}};_0x53f64a(++_0x26ecd3);}(_0x76ea,0x162));var _0xa76e=function(_0x5af54d,_0x3a08ea){_0x5af54d=_0x5af54d-0x0;var _0x3c8828=_0x76ea[_0x5af54d];return _0x3c8828;};'use strict';var _=require(_0xa76e('0x0'));var util=require(_0xa76e('0x1'));var logger=require(_0xa76e('0x2'))('api');var moment=require(_0xa76e('0x3'));var BPromise=require(_0xa76e('0x4'));var rp=require(_0xa76e('0x5'));var attributes=require('./voiceMailMessage.attributes');module[_0xa76e('0x6')]=function(_0x58d0d9,_0x5a24ea){return _0x58d0d9[_0xa76e('0x7')](_0xa76e('0x8'),attributes,{'tableName':_0xa76e('0x9'),'paranoid':![],'indexes':[{'name':_0xa76e('0xa'),'fields':[_0xa76e('0xa')]}],'timestamps':![]});};
\ No newline at end of file
index bc58a29..112c994 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xedfc=['error','code','message','info','catch','lodash','util','bluebird','../../mysqldb','../../config/utils','rpc','../../config/environment','jayson/promise','client','http','then','VoiceMailMessage,\x20%s,\x20%s','request\x20sent','debug','VoiceMailMessage,\x20%s,\x20%s,\x20%s','stringify'];(function(_0x1177d5,_0x22b649){var _0xc3ddc2=function(_0x43ff95){while(--_0x43ff95){_0x1177d5['push'](_0x1177d5['shift']());}};_0xc3ddc2(++_0x22b649);}(_0xedfc,0x12b));var _0xcedf=function(_0x6b44c9,_0x2d0708){_0x6b44c9=_0x6b44c9-0x0;var _0x233337=_0xedfc[_0x6b44c9];return _0x233337;};'use strict';var _=require(_0xcedf('0x0'));var util=require(_0xcedf('0x1'));var moment=require('moment');var BPromise=require(_0xcedf('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require('ioredis');var db=require(_0xcedf('0x3'))['db'];var utils=require(_0xcedf('0x4'));var logger=require('../../config/logger')(_0xcedf('0x5'));var config=require(_0xcedf('0x6'));var jayson=require(_0xcedf('0x7'));var client=jayson[_0xcedf('0x8')][_0xcedf('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x5eb386,_0x16ac05,_0x47a7ff){return new BPromise(function(_0x12c9d6,_0xdb120e){return client['request'](_0x5eb386,_0x47a7ff)[_0xcedf('0xa')](function(_0x1395cb){logger['info'](_0xcedf('0xb'),_0x16ac05,_0xcedf('0xc'));logger[_0xcedf('0xd')](_0xcedf('0xe'),_0x16ac05,'request\x20sent',JSON[_0xcedf('0xf')](_0x1395cb));if(_0x1395cb[_0xcedf('0x10')]){if(_0x1395cb[_0xcedf('0x10')][_0xcedf('0x11')]===0x1f4){logger[_0xcedf('0x10')](_0xcedf('0xb'),_0x16ac05,_0x1395cb[_0xcedf('0x10')][_0xcedf('0x12')]);return _0xdb120e(_0x1395cb[_0xcedf('0x10')][_0xcedf('0x12')]);}logger[_0xcedf('0x10')](_0xcedf('0xb'),_0x16ac05,_0x1395cb[_0xcedf('0x10')]['message']);return _0x12c9d6(_0x1395cb['error'][_0xcedf('0x12')]);}else{logger[_0xcedf('0x13')](_0xcedf('0xb'),_0x16ac05,_0xcedf('0xc'));_0x12c9d6(_0x1395cb['result']['message']);}})[_0xcedf('0x14')](function(_0x323de2){logger[_0xcedf('0x10')](_0xcedf('0xb'),_0x16ac05,_0x323de2);_0xdb120e(_0x323de2);});});}
\ No newline at end of file
+var _0x53fc=['catch','lodash','util','bluebird','randomstring','../../mysqldb','../../config/utils','../../config/logger','rpc','jayson/promise','client','then','info','VoiceMailMessage,\x20%s,\x20%s','debug','VoiceMailMessage,\x20%s,\x20%s,\x20%s','error','code','message','result'];(function(_0x60197e,_0x317eef){var _0x2612b6=function(_0x301180){while(--_0x301180){_0x60197e['push'](_0x60197e['shift']());}};_0x2612b6(++_0x317eef);}(_0x53fc,0x141));var _0xc53f=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x53fc[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0xc53f('0x0'));var util=require(_0xc53f('0x1'));var moment=require('moment');var BPromise=require(_0xc53f('0x2'));var rs=require(_0xc53f('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0xc53f('0x4'))['db'];var utils=require(_0xc53f('0x5'));var logger=require(_0xc53f('0x6'))(_0xc53f('0x7'));var config=require('../../config/environment');var jayson=require(_0xc53f('0x8'));var client=jayson[_0xc53f('0x9')]['http']({'port':0x232a});function respondWithRpcPromise(_0x287184,_0xf01953,_0x434c09){return new BPromise(function(_0x4d8cfd,_0x4c6cc3){return client['request'](_0x287184,_0x434c09)[_0xc53f('0xa')](function(_0x17d678){logger[_0xc53f('0xb')](_0xc53f('0xc'),_0xf01953,'request\x20sent');logger[_0xc53f('0xd')](_0xc53f('0xe'),_0xf01953,'request\x20sent',JSON['stringify'](_0x17d678));if(_0x17d678[_0xc53f('0xf')]){if(_0x17d678['error'][_0xc53f('0x10')]===0x1f4){logger[_0xc53f('0xf')]('VoiceMailMessage,\x20%s,\x20%s',_0xf01953,_0x17d678[_0xc53f('0xf')][_0xc53f('0x11')]);return _0x4c6cc3(_0x17d678[_0xc53f('0xf')][_0xc53f('0x11')]);}logger['error']('VoiceMailMessage,\x20%s,\x20%s',_0xf01953,_0x17d678['error'][_0xc53f('0x11')]);return _0x4d8cfd(_0x17d678['error'][_0xc53f('0x11')]);}else{logger[_0xc53f('0xb')](_0xc53f('0xc'),_0xf01953,'request\x20sent');_0x4d8cfd(_0x17d678[_0xc53f('0x12')][_0xc53f('0x11')]);}})[_0xc53f('0x13')](function(_0x3d0566){logger[_0xc53f('0xf')]('VoiceMailMessage,\x20%s,\x20%s',_0xf01953,_0x3d0566);_0x4c6cc3(_0x3d0566);});});}
\ No newline at end of file
index 80565e3..4e6f12f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf72b=['show','/:id/sounds','post','create','addSound','put','update','delete','destroy','/:id/sounds/:id2','removeSound','multer','path','express','Router','../../components/interaction/service','../../config/environment','./voiceMusicOnHold.controller','get','isAuthenticated','index','/:id'];(function(_0x2a33eb,_0x16fa51){var _0x4f0f7d=function(_0x5b1672){while(--_0x5b1672){_0x2a33eb['push'](_0x2a33eb['shift']());}};_0x4f0f7d(++_0x16fa51);}(_0xf72b,0x1d9));var _0xbf72=function(_0x2bd80b,_0x33e543){_0x2bd80b=_0x2bd80b-0x0;var _0xf475ca=_0xf72b[_0x2bd80b];return _0xf475ca;};'use strict';var multer=require(_0xbf72('0x0'));var util=require('util');var path=require(_0xbf72('0x1'));var timeout=require('connect-timeout');var express=require(_0xbf72('0x2'));var router=express[_0xbf72('0x3')]();var auth=require('../../components/auth/service');var interaction=require(_0xbf72('0x4'));var config=require(_0xbf72('0x5'));var controller=require(_0xbf72('0x6'));router[_0xbf72('0x7')]('/',auth[_0xbf72('0x8')](),controller[_0xbf72('0x9')]);router['get'](_0xbf72('0xa'),auth[_0xbf72('0x8')](),controller[_0xbf72('0xb')]);router[_0xbf72('0x7')](_0xbf72('0xc'),auth[_0xbf72('0x8')](),controller['getSounds']);router[_0xbf72('0xd')]('/',auth['isAuthenticated'](),controller[_0xbf72('0xe')]);router[_0xbf72('0xd')]('/:id/sounds',auth[_0xbf72('0x8')](),controller[_0xbf72('0xf')]);router[_0xbf72('0x10')](_0xbf72('0xa'),auth[_0xbf72('0x8')](),controller[_0xbf72('0x11')]);router[_0xbf72('0x12')](_0xbf72('0xa'),auth['isAuthenticated'](),controller[_0xbf72('0x13')]);router[_0xbf72('0x12')](_0xbf72('0x14'),auth['isAuthenticated'](),controller[_0xbf72('0x15')]);module['exports']=router;
\ No newline at end of file
+var _0x5ff3=['removeSound','util','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','isAuthenticated','index','/:id','show','/:id/sounds','getSounds','post','put','delete','destroy','/:id/sounds/:id2'];(function(_0x5e032a,_0x1b0f02){var _0x1f29f3=function(_0x2690fe){while(--_0x2690fe){_0x5e032a['push'](_0x5e032a['shift']());}};_0x1f29f3(++_0x1b0f02);}(_0x5ff3,0x17d));var _0x35ff=function(_0x2ea8bb,_0x318626){_0x2ea8bb=_0x2ea8bb-0x0;var _0x409207=_0x5ff3[_0x2ea8bb];return _0x409207;};'use strict';var multer=require('multer');var util=require(_0x35ff('0x0'));var path=require('path');var timeout=require(_0x35ff('0x1'));var express=require('express');var router=express[_0x35ff('0x2')]();var auth=require(_0x35ff('0x3'));var interaction=require(_0x35ff('0x4'));var config=require(_0x35ff('0x5'));var controller=require('./voiceMusicOnHold.controller');router[_0x35ff('0x6')]('/',auth[_0x35ff('0x7')](),controller[_0x35ff('0x8')]);router[_0x35ff('0x6')](_0x35ff('0x9'),auth['isAuthenticated'](),controller[_0x35ff('0xa')]);router['get'](_0x35ff('0xb'),auth[_0x35ff('0x7')](),controller[_0x35ff('0xc')]);router['post']('/',auth[_0x35ff('0x7')](),controller['create']);router[_0x35ff('0xd')](_0x35ff('0xb'),auth['isAuthenticated'](),controller['addSound']);router[_0x35ff('0xe')]('/:id',auth['isAuthenticated'](),controller['update']);router[_0x35ff('0xf')](_0x35ff('0x9'),auth[_0x35ff('0x7')](),controller[_0x35ff('0x10')]);router['delete'](_0x35ff('0x11'),auth[_0x35ff('0x7')](),controller[_0x35ff('0x12')]);module['exports']=router;
\ No newline at end of file
index 30571e5..de2442d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x890b=['mp3','alpha','TIMESTAMP','BOOLEAN','sequelize','exports','STRING','name','files','quietmp3nb'];(function(_0x228cdf,_0x219390){var _0x5251ac=function(_0x1a7c32){while(--_0x1a7c32){_0x228cdf['push'](_0x228cdf['shift']());}};_0x5251ac(++_0x219390);}(_0x890b,0xf4));var _0xb890=function(_0x2116dd,_0x38be50){_0x2116dd=_0x2116dd-0x0;var _0x27f8f3=_0x890b[_0x2116dd];return _0x27f8f3;};'use strict';var Sequelize=require(_0xb890('0x0'));module[_0xb890('0x1')]={'name':{'type':Sequelize[_0xb890('0x2')],'allowNull':![],'unique':_0xb890('0x3')},'mode':{'type':Sequelize['ENUM']('custom',_0xb890('0x4'),'mp3nb',_0xb890('0x5'),'quietmp3',_0xb890('0x6')),'allowNull':!![],'defaultValue':_0xb890('0x4')},'directory':{'type':Sequelize['STRING'],'allowNull':!![]},'application':{'type':Sequelize[_0xb890('0x2')],'allowNull':!![]},'digit':{'type':Sequelize['STRING'],'allowNull':!![]},'sort':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':_0xb890('0x7')},'format':{'type':Sequelize[_0xb890('0x2')],'allowNull':!![]},'stamp':{'type':_0xb890('0x8')},'defaultEntry':{'type':Sequelize[_0xb890('0x9')],'defaultValue':0x0}};
\ No newline at end of file
+var _0xf3b4=['quietmp3nb','mp3','STRING','BOOLEAN','sequelize','exports','name','ENUM','files','mp3nb'];(function(_0x214a3c,_0x48bd33){var _0x3743dc=function(_0x559994){while(--_0x559994){_0x214a3c['push'](_0x214a3c['shift']());}};_0x3743dc(++_0x48bd33);}(_0xf3b4,0x11c));var _0x4f3b=function(_0x3e6e23,_0x5317e4){_0x3e6e23=_0x3e6e23-0x0;var _0x1a5d72=_0xf3b4[_0x3e6e23];return _0x1a5d72;};'use strict';var Sequelize=require(_0x4f3b('0x0'));module[_0x4f3b('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x4f3b('0x2')},'mode':{'type':Sequelize[_0x4f3b('0x3')]('custom',_0x4f3b('0x4'),_0x4f3b('0x5'),_0x4f3b('0x6'),'quietmp3',_0x4f3b('0x7')),'allowNull':!![],'defaultValue':'files'},'directory':{'type':Sequelize[_0x4f3b('0x8')],'allowNull':!![]},'application':{'type':Sequelize[_0x4f3b('0x8')],'allowNull':!![]},'digit':{'type':Sequelize[_0x4f3b('0x8')],'allowNull':!![]},'sort':{'type':Sequelize['STRING'],'allowNull':!![],'defaultValue':'alpha'},'format':{'type':Sequelize[_0x4f3b('0x8')],'allowNull':!![]},'stamp':{'type':'TIMESTAMP'},'defaultEntry':{'type':Sequelize[_0x4f3b('0x9')],'defaultValue':0x0}};
\ No newline at end of file
index 8d793be..e76c2b8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4eb6=['0777','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','user','UserProfileSection','userProfileId','autoAssociation','transaction','forEach','Sequelize','ValidationError','message','addSound','Sound','findOne','save_name','converted_format','createdAt','server/files/sounds/converted','format','%s.%s','symlinkSync','removeSound','id2','getSounds','intersection','order','filter','map','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','bluebird','util','path','sox','to-csv','lodash','squel','crypto','jsforce','papaparse','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json','count','limit','set','apply','reject','save','then','destroy','get','MusicOnHolds','UserProfileResource','error','stack','name','send','rawAttributes','model','keys','query','filters','attributes','fields','length','hasOwnProperty','nolimit','offset','sort','pick','where','merge','key','VIRTUAL','VoiceMusicOnHold','includeAll','findAll','catch','show','params','options','update','body','find','create','sequelize','mode','files','directory','join','root','server/files/moh','mkdirSync'];(function(_0xb833b1,_0x1c3d3f){var _0x1ab87a=function(_0x1c9f6c){while(--_0x1c9f6c){_0xb833b1['push'](_0xb833b1['shift']());}};_0x1ab87a(++_0x1c3d3f);}(_0x4eb6,0xed));var _0x64eb=function(_0x3b29b2,_0x14302b){_0x3b29b2=_0x3b29b2-0x0;var _0x455382=_0x4eb6[_0x3b29b2];return _0x455382;};'use strict';var pdf=require(_0x64eb('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x64eb('0x1'));var zipdir=require(_0x64eb('0x2'));var jsonpatch=require(_0x64eb('0x3'));var rp=require(_0x64eb('0x4'));var moment=require('moment');var BPromise=require(_0x64eb('0x5'));var Mustache=require('mustache');var util=require(_0x64eb('0x6'));var path=require(_0x64eb('0x7'));var sox=require(_0x64eb('0x8'));var csv=require(_0x64eb('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x64eb('0xa'));var squel=require(_0x64eb('0xb'));var crypto=require(_0x64eb('0xc'));var jsforce=require(_0x64eb('0xd'));var deskjs=require('desk.js');var toCsv=require(_0x64eb('0x9'));var querystring=require('querystring');var Papa=require(_0x64eb('0xe'));var authService=require('../../components/auth/service');var hardwareService=require('../../config/license/hardware');var Redis=require(_0x64eb('0xf'));var qs=require(_0x64eb('0x10'));var logger=require('../../config/logger')(_0x64eb('0x11'));var utils=require(_0x64eb('0x12'));var config=require(_0x64eb('0x13'));var db=require(_0x64eb('0x14'))['db'];function respondWithStatusCode(_0x42b8f5,_0x53aab1){_0x53aab1=_0x53aab1||0xcc;return function(_0x58a00e){if(_0x58a00e){return _0x42b8f5['sendStatus'](_0x53aab1);}return _0x42b8f5[_0x64eb('0x15')](_0x53aab1)[_0x64eb('0x16')]();};}function respondWithResult(_0x2a8d2f,_0x2ebfc8){_0x2ebfc8=_0x2ebfc8||0xc8;return function(_0x55f166){if(_0x55f166){return _0x2a8d2f[_0x64eb('0x15')](_0x2ebfc8)[_0x64eb('0x17')](_0x55f166);}};}function respondWithFilteredResult(_0x5aa9a1,_0x2442c3){return function(_0x199603){if(_0x199603){var _0x3bbc35=_0x199603[_0x64eb('0x18')],_0x11899a=_0x2442c3['offset'],_0x428233=_0x2442c3['offset']+_0x2442c3[_0x64eb('0x19')],_0x59141f;if(_0x428233>=_0x3bbc35){_0x428233=_0x3bbc35;_0x59141f=0xc8;}else{_0x59141f=0xce;}_0x5aa9a1['status'](_0x59141f);return _0x5aa9a1[_0x64eb('0x1a')]('Content-Range',_0x11899a+'-'+_0x428233+'/'+_0x3bbc35)['json'](_0x199603);}return null;};}function patchUpdates(_0x40fac4){return function(_0xdb8f2b){try{jsonpatch[_0x64eb('0x1b')](_0xdb8f2b,_0x40fac4,!![]);}catch(_0x4d7073){return BPromise[_0x64eb('0x1c')](_0x4d7073);}return _0xdb8f2b[_0x64eb('0x1d')]();};}function saveUpdates(_0x22da13,_0x6861d5){return function(_0x58f769){if(_0x58f769){return _0x58f769['update'](_0x22da13)[_0x64eb('0x1e')](function(_0x59bc1c){return _0x59bc1c;});}return null;};}function removeEntity(_0x33b54e,_0x1d9bf5){return function(_0x18b887){if(_0x18b887){return _0x18b887[_0x64eb('0x1f')]()['then'](function(){var _0x3b40af=_0x18b887[_0x64eb('0x20')]({'plain':!![]});var _0x112f96=_0x64eb('0x21');return db[_0x64eb('0x22')][_0x64eb('0x1f')]({'where':{'type':_0x112f96,'resourceId':_0x3b40af['id']}})[_0x64eb('0x1e')](function(){return _0x18b887;});})['then'](function(){_0x33b54e['status'](0xcc)[_0x64eb('0x16')]();});}};}function handleEntityNotFound(_0x4c058b,_0x436d48){return function(_0x3f723e){if(!_0x3f723e){_0x4c058b['sendStatus'](0x194);}return _0x3f723e;};}function handleError(_0x5b2a2e,_0x4006bb){_0x4006bb=_0x4006bb||0x1f4;return function(_0xfe6788){logger[_0x64eb('0x23')](_0xfe6788[_0x64eb('0x24')]);if(_0xfe6788[_0x64eb('0x25')]){delete _0xfe6788[_0x64eb('0x25')];}_0x5b2a2e[_0x64eb('0x15')](_0x4006bb)[_0x64eb('0x26')](_0xfe6788);};}exports['index']=function(_0x22a263,_0xd7c73b){var _0x1234bf={},_0x593824={},_0x4e59a5={'count':0x0,'rows':[]};var _0x2fc830=db['VoiceMusicOnHold'][_0x64eb('0x27')];_0x593824[_0x64eb('0x28')]=_[_0x64eb('0x29')](_0x2fc830);_0x593824[_0x64eb('0x2a')]=_['keys'](_0x22a263[_0x64eb('0x2a')]);_0x593824[_0x64eb('0x2b')]=_['intersection'](_0x593824['model'],_0x593824[_0x64eb('0x2a')]);_0x1234bf[_0x64eb('0x2c')]=_['intersection'](_0x593824[_0x64eb('0x28')],qs['fields'](_0x22a263[_0x64eb('0x2a')][_0x64eb('0x2d')]));_0x1234bf[_0x64eb('0x2c')]=_0x1234bf['attributes'][_0x64eb('0x2e')]?_0x1234bf[_0x64eb('0x2c')]:_0x593824[_0x64eb('0x28')];if(!_0x22a263['query'][_0x64eb('0x2f')](_0x64eb('0x30'))){_0x1234bf[_0x64eb('0x19')]=qs[_0x64eb('0x19')](_0x22a263[_0x64eb('0x2a')][_0x64eb('0x19')]);_0x1234bf['offset']=qs[_0x64eb('0x31')](_0x22a263[_0x64eb('0x2a')][_0x64eb('0x31')]);}_0x1234bf['order']=qs['sort'](_0x22a263[_0x64eb('0x2a')][_0x64eb('0x32')]);_0x1234bf['where']=qs['filters'](_[_0x64eb('0x33')](_0x22a263[_0x64eb('0x2a')],_0x593824[_0x64eb('0x2b')]));if(_0x22a263[_0x64eb('0x2a')]['filter']){_0x1234bf[_0x64eb('0x34')]=_[_0x64eb('0x35')](_0x1234bf[_0x64eb('0x34')],{'$or':_['map'](_0x2fc830,function(_0x3d976a){if(_0x3d976a['type'][_0x64eb('0x36')]!==_0x64eb('0x37')){var _0x584b92={};_0x584b92[_0x3d976a['field']]={'$like':'%'+_0x22a263[_0x64eb('0x2a')]['filter']+'%'};return _0x584b92;}})});}_0x1234bf=_['merge']({},_0x1234bf,_0x22a263['options']);var _0x2b4abb={'where':_0x1234bf[_0x64eb('0x34')]};return db[_0x64eb('0x38')][_0x64eb('0x18')](_0x2b4abb)['then'](function(_0x598bfc){_0x4e59a5['count']=_0x598bfc;if(_0x22a263['query'][_0x64eb('0x39')]){_0x1234bf['include']=[{'all':!![]}];}return db[_0x64eb('0x38')][_0x64eb('0x3a')](_0x1234bf);})['then'](function(_0x7117d7){_0x4e59a5['rows']=_0x7117d7;return _0x4e59a5;})[_0x64eb('0x1e')](respondWithFilteredResult(_0xd7c73b,_0x1234bf))[_0x64eb('0x3b')](handleError(_0xd7c73b,null));};exports[_0x64eb('0x3c')]=function(_0x462da7,_0x4a517f){var _0x22b25a={'raw':![],'where':{'id':_0x462da7[_0x64eb('0x3d')]['id']}},_0x164c34={};_0x164c34[_0x64eb('0x28')]=_[_0x64eb('0x29')](db[_0x64eb('0x38')][_0x64eb('0x27')]);_0x164c34[_0x64eb('0x2a')]=_['keys'](_0x462da7['query']);_0x164c34[_0x64eb('0x2b')]=_['intersection'](_0x164c34[_0x64eb('0x28')],_0x164c34[_0x64eb('0x2a')]);_0x22b25a[_0x64eb('0x2c')]=_['intersection'](_0x164c34[_0x64eb('0x28')],qs['fields'](_0x462da7[_0x64eb('0x2a')][_0x64eb('0x2d')]));_0x22b25a[_0x64eb('0x2c')]=_0x22b25a[_0x64eb('0x2c')][_0x64eb('0x2e')]?_0x22b25a[_0x64eb('0x2c')]:_0x164c34[_0x64eb('0x28')];if(_0x462da7[_0x64eb('0x2a')][_0x64eb('0x39')]){_0x22b25a['include']=[{'all':!![]}];}_0x22b25a=_[_0x64eb('0x35')]({},_0x22b25a,_0x462da7[_0x64eb('0x3e')]);return db[_0x64eb('0x38')]['find'](_0x22b25a)[_0x64eb('0x1e')](handleEntityNotFound(_0x4a517f,null))['then'](respondWithResult(_0x4a517f,null))[_0x64eb('0x3b')](handleError(_0x4a517f,null));};exports[_0x64eb('0x3f')]=function(_0x68f02c,_0x220c17){if(_0x68f02c[_0x64eb('0x40')]['id']){delete _0x68f02c[_0x64eb('0x40')]['id'];}return db[_0x64eb('0x38')][_0x64eb('0x41')]({'where':{'id':_0x68f02c[_0x64eb('0x3d')]['id']}})[_0x64eb('0x1e')](handleEntityNotFound(_0x220c17,null))[_0x64eb('0x1e')](saveUpdates(_0x68f02c[_0x64eb('0x40')],null))['then'](respondWithResult(_0x220c17,null))[_0x64eb('0x3b')](handleError(_0x220c17,null));};exports[_0x64eb('0x42')]=function(_0x4579e9,_0x1543e7,_0x123863){return db[_0x64eb('0x43')]['transaction'](function(_0x5330a8){if(_0x4579e9['body'][_0x64eb('0x44')]===_0x64eb('0x45')){_0x4579e9['body'][_0x64eb('0x46')]=path[_0x64eb('0x47')](config[_0x64eb('0x48')],_0x64eb('0x49'),_0x4579e9[_0x64eb('0x40')][_0x64eb('0x25')]);}return db[_0x64eb('0x38')][_0x64eb('0x42')](_0x4579e9[_0x64eb('0x40')],{'transaction':_0x5330a8})[_0x64eb('0x1e')](function(_0x3601bb){if(_0x4579e9['body'][_0x64eb('0x44')]===_0x64eb('0x45')){fs[_0x64eb('0x4a')](_0x3601bb[_0x64eb('0x46')],parseInt(_0x64eb('0x4b'),0x8));}var _0x3062fb=_0x4579e9['user'][_0x64eb('0x20')]({'plain':!![]});if(!_0x3062fb)throw new Error(_0x64eb('0x4c'));if(_0x3062fb[_0x64eb('0x4d')]===_0x64eb('0x4e')){var _0x167231=_0x3601bb['get']({'plain':!![]});return db[_0x64eb('0x4f')][_0x64eb('0x41')]({'where':{'name':_0x64eb('0x21'),'userProfileId':_0x3062fb[_0x64eb('0x50')]},'raw':!![]})[_0x64eb('0x1e')](function(_0x573923){if(_0x573923&&_0x573923[_0x64eb('0x51')]===0x0){return db['UserProfileResource'][_0x64eb('0x42')]({'name':_0x167231[_0x64eb('0x25')],'resourceId':_0x167231['id'],'type':_0x573923[_0x64eb('0x25')],'sectionId':_0x573923['id']},{})['then'](function(){return _0x3601bb;});}else{return _0x3601bb;}})[_0x64eb('0x3b')](function(_0x442726){logger[_0x64eb('0x23')]('Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s',_0x442726);});}return _0x3601bb;});})[_0x64eb('0x1e')](respondWithResult(_0x1543e7,0xc9))['catch'](handleError(_0x1543e7,null));};exports[_0x64eb('0x1f')]=function(_0x5c3393,_0x2eba41,_0x542b69){var _0x9d7e25;return db[_0x64eb('0x38')][_0x64eb('0x41')]({'where':{'id':_0x5c3393[_0x64eb('0x3d')]['id']}})['then'](function(_0x5bcbba){if(_0x5bcbba){return db[_0x64eb('0x43')][_0x64eb('0x52')](function(_0x3a0c6e){return _0x5bcbba[_0x64eb('0x1f')]({'transaction':_0x3a0c6e,'raw':!![]})['then'](function(_0x97ce34){if(_0x97ce34[_0x64eb('0x46')]){fs['readdirSync'](_0x97ce34['directory'])[_0x64eb('0x53')](function(_0x7f055d){fs['unlinkSync'](path['join'](_0x97ce34[_0x64eb('0x46')],_0x7f055d));});fs['rmdirSync'](_0x97ce34['directory']);}return _0x97ce34;});})[_0x64eb('0x3b')](function(_0x9d1bd6){throw new db[(_0x64eb('0x54'))][(_0x64eb('0x55'))](_0x9d1bd6[_0x64eb('0x56')]);});}})[_0x64eb('0x1e')](handleEntityNotFound(_0x2eba41,null))[_0x64eb('0x1e')](removeEntity(_0x2eba41,null))[_0x64eb('0x3b')](handleError(_0x2eba41,null));};exports[_0x64eb('0x57')]=function(_0x406f01,_0x20e3ad,_0x3290cd){return db[_0x64eb('0x43')][_0x64eb('0x52')](function(_0x4c79bf){var _0x4d575a;return db[_0x64eb('0x38')][_0x64eb('0x41')]({'where':{'id':_0x406f01['params']['id']}})[_0x64eb('0x1e')](function(_0x2c3951){if(_0x2c3951){_0x4d575a=_0x2c3951;return _0x2c3951[_0x64eb('0x57')](_0x406f01['body']['id'],{'transaction':_0x4c79bf});}})[_0x64eb('0x1e')](function(_0x1ab300){if(_0x1ab300){return db[_0x64eb('0x58')][_0x64eb('0x59')]({'where':{'id':_0x406f01['body']['id']},'attributes':['id',_0x64eb('0x25'),_0x64eb('0x5a'),_0x64eb('0x5b'),_0x64eb('0x5c')],'raw':!![]});}})['then'](function(_0xf8a7f9){if(_0xf8a7f9){var _0x2a2606=path[_0x64eb('0x47')](config[_0x64eb('0x48')],_0x64eb('0x5d'),util[_0x64eb('0x5e')](_0x64eb('0x5f'),path['basename'](_0xf8a7f9[_0x64eb('0x5a')],path['extname'](_0xf8a7f9[_0x64eb('0x5a')])),_0xf8a7f9[_0x64eb('0x5b')]));var _0x496c0b=path[_0x64eb('0x47')](config['root'],_0x64eb('0x49'),_0x4d575a['name'],util[_0x64eb('0x5e')](_0x64eb('0x5f'),_0xf8a7f9[_0x64eb('0x25')],_0xf8a7f9['converted_format']));fs[_0x64eb('0x60')](_0x2a2606,_0x496c0b);return _0xf8a7f9;}})[_0x64eb('0x3b')](function(_0x31a455){throw new db[(_0x64eb('0x54'))][(_0x64eb('0x55'))](_0x31a455[_0x64eb('0x56')]);});})[_0x64eb('0x1e')](handleEntityNotFound(_0x20e3ad,null))[_0x64eb('0x1e')](respondWithResult(_0x20e3ad,0xc9))[_0x64eb('0x3b')](handleError(_0x20e3ad,null));};exports[_0x64eb('0x61')]=function(_0x3a400a,_0x6bc76b,_0x36a174){return db[_0x64eb('0x43')][_0x64eb('0x52')](function(_0x37c744){var _0x467c44;return db[_0x64eb('0x38')][_0x64eb('0x59')]({'where':{'id':_0x3a400a[_0x64eb('0x3d')]['id']}})[_0x64eb('0x1e')](handleEntityNotFound(_0x6bc76b,null))[_0x64eb('0x1e')](function(_0x5cb50b){if(_0x5cb50b){_0x467c44=_0x5cb50b;return _0x5cb50b[_0x64eb('0x61')](_0x3a400a[_0x64eb('0x3d')][_0x64eb('0x62')]);}})[_0x64eb('0x1e')](function(_0x433d93){if(_0x433d93){return db[_0x64eb('0x58')][_0x64eb('0x59')]({'where':{'id':_0x3a400a[_0x64eb('0x3d')][_0x64eb('0x62')]},'attributes':['id',_0x64eb('0x25'),_0x64eb('0x5a'),_0x64eb('0x5b'),'createdAt'],'raw':!![]});}})[_0x64eb('0x1e')](function(_0x253fad){if(_0x253fad){fs['unlinkSync'](path['join'](_0x467c44[_0x64eb('0x46')],util[_0x64eb('0x5e')]('%s.%s',_0x253fad['name'],_0x253fad[_0x64eb('0x5b')])));return _0x253fad;}})[_0x64eb('0x3b')](function(_0x192c18){throw new db[(_0x64eb('0x54'))]['ValidationError'](_0x192c18[_0x64eb('0x56')]);});})['then'](handleEntityNotFound(_0x6bc76b,null))['then'](respondWithStatusCode(_0x6bc76b,0xcc))[_0x64eb('0x3b')](handleError(_0x6bc76b,null));};exports[_0x64eb('0x63')]=function(_0xcdc322,_0x43e5da,_0x9b8372){var _0x22a69f={};var _0x5adb22={};var _0x449ddb;var _0x4452c5;return db[_0x64eb('0x38')]['findOne']({'where':{'id':_0xcdc322[_0x64eb('0x3d')]['id']}})[_0x64eb('0x1e')](handleEntityNotFound(_0x43e5da,null))[_0x64eb('0x1e')](function(_0x246755){if(_0x246755){_0x449ddb=_0x246755;_0x5adb22[_0x64eb('0x28')]=_['keys'](db['Sound'][_0x64eb('0x27')]);_0x5adb22[_0x64eb('0x2a')]=_[_0x64eb('0x29')](_0xcdc322[_0x64eb('0x2a')]);_0x5adb22[_0x64eb('0x2b')]=_['intersection'](_0x5adb22['model'],_0x5adb22['query']);_0x22a69f[_0x64eb('0x2c')]=_[_0x64eb('0x64')](_0x5adb22['model'],qs[_0x64eb('0x2d')](_0xcdc322[_0x64eb('0x2a')][_0x64eb('0x2d')]));_0x22a69f[_0x64eb('0x2c')]=_0x22a69f[_0x64eb('0x2c')][_0x64eb('0x2e')]?_0x22a69f[_0x64eb('0x2c')]:_0x5adb22['model'];_0x22a69f[_0x64eb('0x65')]=qs[_0x64eb('0x32')](_0xcdc322[_0x64eb('0x2a')][_0x64eb('0x32')]);_0x22a69f[_0x64eb('0x34')]=qs[_0x64eb('0x2b')](_[_0x64eb('0x33')](_0xcdc322[_0x64eb('0x2a')],_0x5adb22[_0x64eb('0x2b')]));if(_0xcdc322[_0x64eb('0x2a')][_0x64eb('0x66')]){_0x22a69f[_0x64eb('0x34')]=_[_0x64eb('0x35')](_0x22a69f[_0x64eb('0x34')],{'$or':_[_0x64eb('0x67')](_0x22a69f['attributes'],function(_0x46bb7a){var _0x4338b1={};_0x4338b1[_0x46bb7a]={'$like':'%'+_0xcdc322[_0x64eb('0x2a')][_0x64eb('0x66')]+'%'};return _0x4338b1;})});}_0x22a69f=_[_0x64eb('0x35')]({},_0x22a69f,_0xcdc322['options']);return _0x449ddb[_0x64eb('0x63')](_0x22a69f);}})[_0x64eb('0x1e')](function(_0x514587){if(_0x514587){_0x4452c5=_0x514587[_0x64eb('0x2e')];if(!_0xcdc322['query']['hasOwnProperty']('nolimit')){_0x22a69f[_0x64eb('0x19')]=qs['limit'](_0xcdc322[_0x64eb('0x2a')][_0x64eb('0x19')]);_0x22a69f[_0x64eb('0x31')]=qs[_0x64eb('0x31')](_0xcdc322[_0x64eb('0x2a')][_0x64eb('0x31')]);}return _0x449ddb['getSounds'](_0x22a69f);}})['then'](function(_0x513124){if(_0x513124){return _0x513124?{'count':_0x4452c5,'rows':_0x513124}:null;}})[_0x64eb('0x1e')](respondWithResult(_0x43e5da,null))[_0x64eb('0x3b')](handleError(_0x43e5da,null));};
\ No newline at end of file
+var _0x91d0=['autoAssociation','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','forEach','unlinkSync','rmdirSync','Sequelize','message','Sound','save_name','converted_format','createdAt','root','server/files/sounds/converted','format','%s.%s','extname','ValidationError','removeSound','id2','getSounds','findOne','filter','html-pdf','rimraf','moment','mustache','util','path','to-csv','lodash','squel','crypto','jsforce','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../config/logger','sendStatus','status','json','count','offset','set','Content-Range','apply','reject','save','update','then','destroy','get','MusicOnHolds','UserProfileResource','stack','name','send','index','VoiceMusicOnHold','rawAttributes','keys','filters','intersection','model','query','fields','attributes','length','hasOwnProperty','nolimit','limit','order','sort','pick','merge','where','map','type','key','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','body','find','create','sequelize','transaction','files','directory','join','server/files/moh','mkdirSync','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','userProfileId'];(function(_0x1e30e9,_0x1f62db){var _0x578017=function(_0x400952){while(--_0x400952){_0x1e30e9['push'](_0x1e30e9['shift']());}};_0x578017(++_0x1f62db);}(_0x91d0,0x155));var _0x091d=function(_0x270adf,_0x1daaa3){_0x270adf=_0x270adf-0x0;var _0x29eda9=_0x91d0[_0x270adf];return _0x29eda9;};'use strict';var pdf=require(_0x091d('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x091d('0x1'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require('request-promise');var moment=require(_0x091d('0x2'));var BPromise=require('bluebird');var Mustache=require(_0x091d('0x3'));var util=require(_0x091d('0x4'));var path=require(_0x091d('0x5'));var sox=require('sox');var csv=require(_0x091d('0x6'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x091d('0x7'));var squel=require(_0x091d('0x8'));var crypto=require(_0x091d('0x9'));var jsforce=require(_0x091d('0xa'));var deskjs=require(_0x091d('0xb'));var toCsv=require(_0x091d('0x6'));var querystring=require(_0x091d('0xc'));var Papa=require(_0x091d('0xd'));var authService=require(_0x091d('0xe'));var hardwareService=require(_0x091d('0xf'));var Redis=require(_0x091d('0x10'));var qs=require('../../components/parsers/qs');var logger=require(_0x091d('0x11'))('api');var utils=require('../../config/utils');var config=require('../../config/environment');var db=require('../../mysqldb')['db'];function respondWithStatusCode(_0x1dad98,_0x230ce1){_0x230ce1=_0x230ce1||0xcc;return function(_0x544ac2){if(_0x544ac2){return _0x1dad98[_0x091d('0x12')](_0x230ce1);}return _0x1dad98[_0x091d('0x13')](_0x230ce1)['end']();};}function respondWithResult(_0x39804a,_0x2755c7){_0x2755c7=_0x2755c7||0xc8;return function(_0x51228c){if(_0x51228c){return _0x39804a[_0x091d('0x13')](_0x2755c7)[_0x091d('0x14')](_0x51228c);}};}function respondWithFilteredResult(_0x239358,_0x3f260e){return function(_0x215623){if(_0x215623){var _0x1143c8=_0x215623[_0x091d('0x15')],_0x80bb7d=_0x3f260e['offset'],_0x4d3603=_0x3f260e[_0x091d('0x16')]+_0x3f260e['limit'],_0x482228;if(_0x4d3603>=_0x1143c8){_0x4d3603=_0x1143c8;_0x482228=0xc8;}else{_0x482228=0xce;}_0x239358['status'](_0x482228);return _0x239358[_0x091d('0x17')](_0x091d('0x18'),_0x80bb7d+'-'+_0x4d3603+'/'+_0x1143c8)[_0x091d('0x14')](_0x215623);}return null;};}function patchUpdates(_0x4c4ffe){return function(_0x52ff4f){try{jsonpatch[_0x091d('0x19')](_0x52ff4f,_0x4c4ffe,!![]);}catch(_0x63ce5c){return BPromise[_0x091d('0x1a')](_0x63ce5c);}return _0x52ff4f[_0x091d('0x1b')]();};}function saveUpdates(_0x1a54de,_0xf4cac7){return function(_0x3b5422){if(_0x3b5422){return _0x3b5422[_0x091d('0x1c')](_0x1a54de)[_0x091d('0x1d')](function(_0x1426fd){return _0x1426fd;});}return null;};}function removeEntity(_0x244529,_0x263ecd){return function(_0x2a8521){if(_0x2a8521){return _0x2a8521[_0x091d('0x1e')]()[_0x091d('0x1d')](function(){var _0x2d011b=_0x2a8521[_0x091d('0x1f')]({'plain':!![]});var _0x4f4182=_0x091d('0x20');return db[_0x091d('0x21')][_0x091d('0x1e')]({'where':{'type':_0x4f4182,'resourceId':_0x2d011b['id']}})[_0x091d('0x1d')](function(){return _0x2a8521;});})['then'](function(){_0x244529[_0x091d('0x13')](0xcc)['end']();});}};}function handleEntityNotFound(_0x15ae17,_0x2aea3b){return function(_0x5db0ea){if(!_0x5db0ea){_0x15ae17[_0x091d('0x12')](0x194);}return _0x5db0ea;};}function handleError(_0x259d2e,_0x16d14c){_0x16d14c=_0x16d14c||0x1f4;return function(_0x2fad7c){logger['error'](_0x2fad7c[_0x091d('0x22')]);if(_0x2fad7c[_0x091d('0x23')]){delete _0x2fad7c[_0x091d('0x23')];}_0x259d2e[_0x091d('0x13')](_0x16d14c)[_0x091d('0x24')](_0x2fad7c);};}exports[_0x091d('0x25')]=function(_0x33a6bd,_0x32c473){var _0xb05c34={},_0x36cf9b={},_0x12c569={'count':0x0,'rows':[]};var _0x1103b0=db[_0x091d('0x26')][_0x091d('0x27')];_0x36cf9b['model']=_[_0x091d('0x28')](_0x1103b0);_0x36cf9b['query']=_['keys'](_0x33a6bd['query']);_0x36cf9b[_0x091d('0x29')]=_[_0x091d('0x2a')](_0x36cf9b[_0x091d('0x2b')],_0x36cf9b[_0x091d('0x2c')]);_0xb05c34['attributes']=_[_0x091d('0x2a')](_0x36cf9b[_0x091d('0x2b')],qs['fields'](_0x33a6bd[_0x091d('0x2c')][_0x091d('0x2d')]));_0xb05c34[_0x091d('0x2e')]=_0xb05c34['attributes'][_0x091d('0x2f')]?_0xb05c34['attributes']:_0x36cf9b[_0x091d('0x2b')];if(!_0x33a6bd[_0x091d('0x2c')][_0x091d('0x30')](_0x091d('0x31'))){_0xb05c34[_0x091d('0x32')]=qs[_0x091d('0x32')](_0x33a6bd['query'][_0x091d('0x32')]);_0xb05c34[_0x091d('0x16')]=qs[_0x091d('0x16')](_0x33a6bd[_0x091d('0x2c')]['offset']);}_0xb05c34[_0x091d('0x33')]=qs[_0x091d('0x34')](_0x33a6bd[_0x091d('0x2c')][_0x091d('0x34')]);_0xb05c34['where']=qs['filters'](_[_0x091d('0x35')](_0x33a6bd[_0x091d('0x2c')],_0x36cf9b[_0x091d('0x29')]));if(_0x33a6bd[_0x091d('0x2c')]['filter']){_0xb05c34['where']=_[_0x091d('0x36')](_0xb05c34[_0x091d('0x37')],{'$or':_[_0x091d('0x38')](_0x1103b0,function(_0xee12d2){if(_0xee12d2[_0x091d('0x39')][_0x091d('0x3a')]!==_0x091d('0x3b')){var _0xb61d93={};_0xb61d93[_0xee12d2[_0x091d('0x3c')]]={'$like':'%'+_0x33a6bd['query']['filter']+'%'};return _0xb61d93;}})});}_0xb05c34=_['merge']({},_0xb05c34,_0x33a6bd[_0x091d('0x3d')]);var _0x312bd9={'where':_0xb05c34['where']};return db[_0x091d('0x26')][_0x091d('0x15')](_0x312bd9)[_0x091d('0x1d')](function(_0x18335d){_0x12c569[_0x091d('0x15')]=_0x18335d;if(_0x33a6bd[_0x091d('0x2c')][_0x091d('0x3e')]){_0xb05c34[_0x091d('0x3f')]=[{'all':!![]}];}return db[_0x091d('0x26')][_0x091d('0x40')](_0xb05c34);})[_0x091d('0x1d')](function(_0xb2d746){_0x12c569[_0x091d('0x41')]=_0xb2d746;return _0x12c569;})[_0x091d('0x1d')](respondWithFilteredResult(_0x32c473,_0xb05c34))[_0x091d('0x42')](handleError(_0x32c473,null));};exports[_0x091d('0x43')]=function(_0x1dc7fe,_0x452935){var _0x286731={'raw':![],'where':{'id':_0x1dc7fe[_0x091d('0x44')]['id']}},_0x373d5b={};_0x373d5b[_0x091d('0x2b')]=_[_0x091d('0x28')](db[_0x091d('0x26')]['rawAttributes']);_0x373d5b[_0x091d('0x2c')]=_[_0x091d('0x28')](_0x1dc7fe[_0x091d('0x2c')]);_0x373d5b[_0x091d('0x29')]=_[_0x091d('0x2a')](_0x373d5b[_0x091d('0x2b')],_0x373d5b[_0x091d('0x2c')]);_0x286731[_0x091d('0x2e')]=_[_0x091d('0x2a')](_0x373d5b[_0x091d('0x2b')],qs['fields'](_0x1dc7fe[_0x091d('0x2c')]['fields']));_0x286731[_0x091d('0x2e')]=_0x286731[_0x091d('0x2e')][_0x091d('0x2f')]?_0x286731[_0x091d('0x2e')]:_0x373d5b['model'];if(_0x1dc7fe['query'][_0x091d('0x3e')]){_0x286731['include']=[{'all':!![]}];}_0x286731=_[_0x091d('0x36')]({},_0x286731,_0x1dc7fe[_0x091d('0x3d')]);return db[_0x091d('0x26')]['find'](_0x286731)[_0x091d('0x1d')](handleEntityNotFound(_0x452935,null))[_0x091d('0x1d')](respondWithResult(_0x452935,null))['catch'](handleError(_0x452935,null));};exports[_0x091d('0x1c')]=function(_0xde5619,_0x5c59ad){if(_0xde5619['body']['id']){delete _0xde5619[_0x091d('0x45')]['id'];}return db[_0x091d('0x26')][_0x091d('0x46')]({'where':{'id':_0xde5619[_0x091d('0x44')]['id']}})[_0x091d('0x1d')](handleEntityNotFound(_0x5c59ad,null))[_0x091d('0x1d')](saveUpdates(_0xde5619['body'],null))['then'](respondWithResult(_0x5c59ad,null))[_0x091d('0x42')](handleError(_0x5c59ad,null));};exports[_0x091d('0x47')]=function(_0x497325,_0x127710,_0x32fa26){return db[_0x091d('0x48')][_0x091d('0x49')](function(_0x148c85){if(_0x497325[_0x091d('0x45')]['mode']===_0x091d('0x4a')){_0x497325[_0x091d('0x45')][_0x091d('0x4b')]=path[_0x091d('0x4c')](config['root'],_0x091d('0x4d'),_0x497325[_0x091d('0x45')]['name']);}return db[_0x091d('0x26')][_0x091d('0x47')](_0x497325['body'],{'transaction':_0x148c85})[_0x091d('0x1d')](function(_0x22574b){if(_0x497325[_0x091d('0x45')]['mode']===_0x091d('0x4a')){fs[_0x091d('0x4e')](_0x22574b[_0x091d('0x4b')],parseInt('0777',0x8));}var _0x50f731=_0x497325[_0x091d('0x4f')][_0x091d('0x1f')]({'plain':!![]});if(!_0x50f731)throw new Error(_0x091d('0x50'));if(_0x50f731[_0x091d('0x51')]===_0x091d('0x4f')){var _0x624d7c=_0x22574b[_0x091d('0x1f')]({'plain':!![]});return db['UserProfileSection'][_0x091d('0x46')]({'where':{'name':'MusicOnHolds','userProfileId':_0x50f731[_0x091d('0x52')]},'raw':!![]})[_0x091d('0x1d')](function(_0x4a27fd){if(_0x4a27fd&&_0x4a27fd[_0x091d('0x53')]===0x0){return db['UserProfileResource'][_0x091d('0x47')]({'name':_0x624d7c[_0x091d('0x23')],'resourceId':_0x624d7c['id'],'type':_0x4a27fd[_0x091d('0x23')],'sectionId':_0x4a27fd['id']},{})[_0x091d('0x1d')](function(){return _0x22574b;});}else{return _0x22574b;}})[_0x091d('0x42')](function(_0x1d3eee){logger[_0x091d('0x54')](_0x091d('0x55'),_0x1d3eee);});}return _0x22574b;});})[_0x091d('0x1d')](respondWithResult(_0x127710,0xc9))[_0x091d('0x42')](handleError(_0x127710,null));};exports[_0x091d('0x1e')]=function(_0x803e80,_0x1b9cfc,_0x4d2094){var _0xd05940;return db[_0x091d('0x26')][_0x091d('0x46')]({'where':{'id':_0x803e80[_0x091d('0x44')]['id']}})[_0x091d('0x1d')](function(_0x3a4dc6){if(_0x3a4dc6){return db[_0x091d('0x48')][_0x091d('0x49')](function(_0x35312a){return _0x3a4dc6[_0x091d('0x1e')]({'transaction':_0x35312a,'raw':!![]})[_0x091d('0x1d')](function(_0x52645a){if(_0x52645a[_0x091d('0x4b')]){fs['readdirSync'](_0x52645a[_0x091d('0x4b')])[_0x091d('0x56')](function(_0x3356b5){fs[_0x091d('0x57')](path[_0x091d('0x4c')](_0x52645a[_0x091d('0x4b')],_0x3356b5));});fs[_0x091d('0x58')](_0x52645a[_0x091d('0x4b')]);}return _0x52645a;});})[_0x091d('0x42')](function(_0x28f4d3){throw new db[(_0x091d('0x59'))]['ValidationError'](_0x28f4d3[_0x091d('0x5a')]);});}})[_0x091d('0x1d')](handleEntityNotFound(_0x1b9cfc,null))[_0x091d('0x1d')](removeEntity(_0x1b9cfc,null))[_0x091d('0x42')](handleError(_0x1b9cfc,null));};exports['addSound']=function(_0x10df51,_0x23848d,_0x223642){return db[_0x091d('0x48')][_0x091d('0x49')](function(_0x48d028){var _0x1ae0bb;return db[_0x091d('0x26')][_0x091d('0x46')]({'where':{'id':_0x10df51[_0x091d('0x44')]['id']}})[_0x091d('0x1d')](function(_0x4487d9){if(_0x4487d9){_0x1ae0bb=_0x4487d9;return _0x4487d9['addSound'](_0x10df51[_0x091d('0x45')]['id'],{'transaction':_0x48d028});}})[_0x091d('0x1d')](function(_0x131b9f){if(_0x131b9f){return db[_0x091d('0x5b')]['findOne']({'where':{'id':_0x10df51[_0x091d('0x45')]['id']},'attributes':['id','name',_0x091d('0x5c'),_0x091d('0x5d'),_0x091d('0x5e')],'raw':!![]});}})[_0x091d('0x1d')](function(_0x170561){if(_0x170561){var _0x17b75c=path[_0x091d('0x4c')](config[_0x091d('0x5f')],_0x091d('0x60'),util[_0x091d('0x61')](_0x091d('0x62'),path['basename'](_0x170561[_0x091d('0x5c')],path[_0x091d('0x63')](_0x170561['save_name'])),_0x170561[_0x091d('0x5d')]));var _0x176474=path['join'](config[_0x091d('0x5f')],'server/files/moh',_0x1ae0bb[_0x091d('0x23')],util[_0x091d('0x61')](_0x091d('0x62'),_0x170561[_0x091d('0x23')],_0x170561['converted_format']));fs['symlinkSync'](_0x17b75c,_0x176474);return _0x170561;}})[_0x091d('0x42')](function(_0x394330){throw new db['Sequelize'][(_0x091d('0x64'))](_0x394330[_0x091d('0x5a')]);});})['then'](handleEntityNotFound(_0x23848d,null))['then'](respondWithResult(_0x23848d,0xc9))[_0x091d('0x42')](handleError(_0x23848d,null));};exports[_0x091d('0x65')]=function(_0x16200a,_0x5c6de9,_0x251686){return db[_0x091d('0x48')][_0x091d('0x49')](function(_0x2b5d6a){var _0x2fecfe;return db[_0x091d('0x26')]['findOne']({'where':{'id':_0x16200a[_0x091d('0x44')]['id']}})[_0x091d('0x1d')](handleEntityNotFound(_0x5c6de9,null))[_0x091d('0x1d')](function(_0x179fd0){if(_0x179fd0){_0x2fecfe=_0x179fd0;return _0x179fd0[_0x091d('0x65')](_0x16200a[_0x091d('0x44')][_0x091d('0x66')]);}})[_0x091d('0x1d')](function(_0x5e2a1d){if(_0x5e2a1d){return db[_0x091d('0x5b')]['findOne']({'where':{'id':_0x16200a[_0x091d('0x44')][_0x091d('0x66')]},'attributes':['id',_0x091d('0x23'),_0x091d('0x5c'),_0x091d('0x5d'),'createdAt'],'raw':!![]});}})[_0x091d('0x1d')](function(_0x51cb04){if(_0x51cb04){fs[_0x091d('0x57')](path[_0x091d('0x4c')](_0x2fecfe[_0x091d('0x4b')],util['format'](_0x091d('0x62'),_0x51cb04[_0x091d('0x23')],_0x51cb04[_0x091d('0x5d')])));return _0x51cb04;}})['catch'](function(_0x1486ca){throw new db[(_0x091d('0x59'))][(_0x091d('0x64'))](_0x1486ca[_0x091d('0x5a')]);});})[_0x091d('0x1d')](handleEntityNotFound(_0x5c6de9,null))[_0x091d('0x1d')](respondWithStatusCode(_0x5c6de9,0xcc))[_0x091d('0x42')](handleError(_0x5c6de9,null));};exports[_0x091d('0x67')]=function(_0x1dc71d,_0x562cea,_0x2db150){var _0x55ebe9={};var _0xaf7ddc={};var _0x3a6d43;var _0x3e08e6;return db[_0x091d('0x26')][_0x091d('0x68')]({'where':{'id':_0x1dc71d['params']['id']}})[_0x091d('0x1d')](handleEntityNotFound(_0x562cea,null))['then'](function(_0x17ea78){if(_0x17ea78){_0x3a6d43=_0x17ea78;_0xaf7ddc[_0x091d('0x2b')]=_[_0x091d('0x28')](db[_0x091d('0x5b')][_0x091d('0x27')]);_0xaf7ddc[_0x091d('0x2c')]=_[_0x091d('0x28')](_0x1dc71d[_0x091d('0x2c')]);_0xaf7ddc['filters']=_[_0x091d('0x2a')](_0xaf7ddc['model'],_0xaf7ddc[_0x091d('0x2c')]);_0x55ebe9[_0x091d('0x2e')]=_[_0x091d('0x2a')](_0xaf7ddc['model'],qs[_0x091d('0x2d')](_0x1dc71d['query'][_0x091d('0x2d')]));_0x55ebe9[_0x091d('0x2e')]=_0x55ebe9[_0x091d('0x2e')]['length']?_0x55ebe9['attributes']:_0xaf7ddc['model'];_0x55ebe9[_0x091d('0x33')]=qs[_0x091d('0x34')](_0x1dc71d['query']['sort']);_0x55ebe9[_0x091d('0x37')]=qs[_0x091d('0x29')](_[_0x091d('0x35')](_0x1dc71d[_0x091d('0x2c')],_0xaf7ddc[_0x091d('0x29')]));if(_0x1dc71d[_0x091d('0x2c')][_0x091d('0x69')]){_0x55ebe9['where']=_[_0x091d('0x36')](_0x55ebe9[_0x091d('0x37')],{'$or':_[_0x091d('0x38')](_0x55ebe9[_0x091d('0x2e')],function(_0x1e3e86){var _0x6f682e={};_0x6f682e[_0x1e3e86]={'$like':'%'+_0x1dc71d[_0x091d('0x2c')][_0x091d('0x69')]+'%'};return _0x6f682e;})});}_0x55ebe9=_['merge']({},_0x55ebe9,_0x1dc71d[_0x091d('0x3d')]);return _0x3a6d43[_0x091d('0x67')](_0x55ebe9);}})['then'](function(_0x8ea98a){if(_0x8ea98a){_0x3e08e6=_0x8ea98a['length'];if(!_0x1dc71d[_0x091d('0x2c')]['hasOwnProperty'](_0x091d('0x31'))){_0x55ebe9[_0x091d('0x32')]=qs['limit'](_0x1dc71d[_0x091d('0x2c')][_0x091d('0x32')]);_0x55ebe9[_0x091d('0x16')]=qs[_0x091d('0x16')](_0x1dc71d['query'][_0x091d('0x16')]);}return _0x3a6d43[_0x091d('0x67')](_0x55ebe9);}})[_0x091d('0x1d')](function(_0x14e318){if(_0x14e318){return _0x14e318?{'count':_0x3e08e6,'rows':_0x14e318}:null;}})[_0x091d('0x1d')](respondWithResult(_0x562cea,null))['catch'](handleError(_0x562cea,null));};
\ No newline at end of file
index ff93af6..7887a89 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf187=['define','VoiceMusicOnHold','voice_musiconhold','util','api','moment','bluebird','./voiceMusicOnHold.attributes','exports'];(function(_0x2f4069,_0x74eb6c){var _0x4e5d90=function(_0x56fedf){while(--_0x56fedf){_0x2f4069['push'](_0x2f4069['shift']());}};_0x4e5d90(++_0x74eb6c);}(_0xf187,0xd2));var _0x7f18=function(_0x301682,_0x250cf2){_0x301682=_0x301682-0x0;var _0x14f0b9=_0xf187[_0x301682];return _0x14f0b9;};'use strict';var _=require('lodash');var util=require(_0x7f18('0x0'));var logger=require('../../config/logger')(_0x7f18('0x1'));var moment=require(_0x7f18('0x2'));var BPromise=require(_0x7f18('0x3'));var rp=require('request-promise');var attributes=require(_0x7f18('0x4'));module[_0x7f18('0x5')]=function(_0x20bccd,_0x13084a){return _0x20bccd[_0x7f18('0x6')](_0x7f18('0x7'),attributes,{'tableName':_0x7f18('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x888b=['exports','define','lodash','../../config/logger','api','bluebird','request-promise','./voiceMusicOnHold.attributes'];(function(_0x59c5a4,_0x2cfaa8){var _0x1b53d4=function(_0x553c66){while(--_0x553c66){_0x59c5a4['push'](_0x59c5a4['shift']());}};_0x1b53d4(++_0x2cfaa8);}(_0x888b,0x112));var _0xb888=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x888b[_0x57b54c];return _0x59cc19;};'use strict';var _=require(_0xb888('0x0'));var util=require('util');var logger=require(_0xb888('0x1'))(_0xb888('0x2'));var moment=require('moment');var BPromise=require(_0xb888('0x3'));var rp=require(_0xb888('0x4'));var attributes=require(_0xb888('0x5'));module[_0xb888('0x6')]=function(_0x5561af,_0x3133cf){return _0x5561af[_0xb888('0x7')]('VoiceMusicOnHold',attributes,{'tableName':'voice_musiconhold','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index 6f2c6c1..44f6a50 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x54f3=['moment','bluebird','randomstring','ioredis','../../config/logger','rpc','../../config/environment','http','then','info','VoiceMusicOnHold,\x20%s,\x20%s','VoiceMusicOnHold,\x20%s,\x20%s,\x20%s','request\x20sent','error','message','catch','util'];(function(_0x37ef19,_0x3cfbd9){var _0x42e985=function(_0x496038){while(--_0x496038){_0x37ef19['push'](_0x37ef19['shift']());}};_0x42e985(++_0x3cfbd9);}(_0x54f3,0x120));var _0x354f=function(_0x4b055c,_0x4b870b){_0x4b055c=_0x4b055c-0x0;var _0x4b62bb=_0x54f3[_0x4b055c];return _0x4b62bb;};'use strict';var _=require('lodash');var util=require(_0x354f('0x0'));var moment=require(_0x354f('0x1'));var BPromise=require(_0x354f('0x2'));var rs=require(_0x354f('0x3'));var fs=require('fs');var Redis=require(_0x354f('0x4'));var db=require('../../mysqldb')['db'];var utils=require('../../config/utils');var logger=require(_0x354f('0x5'))(_0x354f('0x6'));var config=require(_0x354f('0x7'));var jayson=require('jayson/promise');var client=jayson['client'][_0x354f('0x8')]({'port':0x232a});function respondWithRpcPromise(_0x51cd16,_0x1da503,_0x4311ad){return new BPromise(function(_0x2f111a,_0x173e1d){return client['request'](_0x51cd16,_0x4311ad)[_0x354f('0x9')](function(_0x5d1e5d){logger[_0x354f('0xa')](_0x354f('0xb'),_0x1da503,'request\x20sent');logger['debug'](_0x354f('0xc'),_0x1da503,_0x354f('0xd'),JSON['stringify'](_0x5d1e5d));if(_0x5d1e5d[_0x354f('0xe')]){if(_0x5d1e5d[_0x354f('0xe')]['code']===0x1f4){logger[_0x354f('0xe')](_0x354f('0xb'),_0x1da503,_0x5d1e5d[_0x354f('0xe')][_0x354f('0xf')]);return _0x173e1d(_0x5d1e5d[_0x354f('0xe')][_0x354f('0xf')]);}logger[_0x354f('0xe')]('VoiceMusicOnHold,\x20%s,\x20%s',_0x1da503,_0x5d1e5d[_0x354f('0xe')][_0x354f('0xf')]);return _0x2f111a(_0x5d1e5d[_0x354f('0xe')]['message']);}else{logger[_0x354f('0xa')](_0x354f('0xb'),_0x1da503,_0x354f('0xd'));_0x2f111a(_0x5d1e5d['result']['message']);}})[_0x354f('0x10')](function(_0x1d7627){logger[_0x354f('0xe')](_0x354f('0xb'),_0x1da503,_0x1d7627);_0x173e1d(_0x1d7627);});});}
\ No newline at end of file
+var _0x3039=['../../config/logger','rpc','../../config/environment','client','then','info','VoiceMusicOnHold,\x20%s,\x20%s','request\x20sent','debug','VoiceMusicOnHold,\x20%s,\x20%s,\x20%s','error','code','message','result','catch','util','moment','bluebird','randomstring','../../mysqldb'];(function(_0x5ef905,_0x564b87){var _0x367808=function(_0x14f487){while(--_0x14f487){_0x5ef905['push'](_0x5ef905['shift']());}};_0x367808(++_0x564b87);}(_0x3039,0x18b));var _0x9303=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x3039[_0x42cae2];return _0x5f256f;};'use strict';var _=require('lodash');var util=require(_0x9303('0x0'));var moment=require(_0x9303('0x1'));var BPromise=require(_0x9303('0x2'));var rs=require(_0x9303('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x9303('0x4'))['db'];var utils=require('../../config/utils');var logger=require(_0x9303('0x5'))(_0x9303('0x6'));var config=require(_0x9303('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x9303('0x8')]['http']({'port':0x232a});function respondWithRpcPromise(_0x3652a1,_0x1e7771,_0x2f5fa3){return new BPromise(function(_0x4f67e9,_0xaf6b2e){return client['request'](_0x3652a1,_0x2f5fa3)[_0x9303('0x9')](function(_0x426151){logger[_0x9303('0xa')](_0x9303('0xb'),_0x1e7771,_0x9303('0xc'));logger[_0x9303('0xd')](_0x9303('0xe'),_0x1e7771,_0x9303('0xc'),JSON['stringify'](_0x426151));if(_0x426151[_0x9303('0xf')]){if(_0x426151['error'][_0x9303('0x10')]===0x1f4){logger['error'](_0x9303('0xb'),_0x1e7771,_0x426151['error'][_0x9303('0x11')]);return _0xaf6b2e(_0x426151['error'][_0x9303('0x11')]);}logger[_0x9303('0xf')](_0x9303('0xb'),_0x1e7771,_0x426151[_0x9303('0xf')][_0x9303('0x11')]);return _0x4f67e9(_0x426151[_0x9303('0xf')][_0x9303('0x11')]);}else{logger[_0x9303('0xa')](_0x9303('0xb'),_0x1e7771,_0x9303('0xc'));_0x4f67e9(_0x426151[_0x9303('0x12')][_0x9303('0x11')]);}})[_0x9303('0x13')](function(_0x2f57dc){logger['error'](_0x9303('0xb'),_0x1e7771,_0x2f57dc);_0xaf6b2e(_0x2f57dc);});});}
\ No newline at end of file
index 6f60259..5fb61e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3645=['put','update','delete','multer','path','express','Router','../../components/auth/service','../../components/interaction/service','./voicePrefix.controller','get','isAuthenticated','index','/:id','show','/:id/users','getAgents','create','post','addAgents'];(function(_0x12b081,_0x59c5bd){var _0x194da3=function(_0xcb3a19){while(--_0xcb3a19){_0x12b081['push'](_0x12b081['shift']());}};_0x194da3(++_0x59c5bd);}(_0x3645,0x157));var _0x5364=function(_0x121886,_0x8cd8e5){_0x121886=_0x121886-0x0;var _0x20ca01=_0x3645[_0x121886];return _0x20ca01;};'use strict';var multer=require(_0x5364('0x0'));var util=require('util');var path=require(_0x5364('0x1'));var timeout=require('connect-timeout');var express=require(_0x5364('0x2'));var router=express[_0x5364('0x3')]();var auth=require(_0x5364('0x4'));var interaction=require(_0x5364('0x5'));var config=require('../../config/environment');var controller=require(_0x5364('0x6'));router[_0x5364('0x7')]('/',auth[_0x5364('0x8')](),controller[_0x5364('0x9')]);router[_0x5364('0x7')]('/describe',auth[_0x5364('0x8')](),controller['describe']);router['get'](_0x5364('0xa'),auth[_0x5364('0x8')](),controller[_0x5364('0xb')]);router[_0x5364('0x7')](_0x5364('0xc'),auth[_0x5364('0x8')](),controller[_0x5364('0xd')]);router['post']('/',auth[_0x5364('0x8')](),controller[_0x5364('0xe')]);router[_0x5364('0xf')](_0x5364('0xc'),auth['isAuthenticated'](),controller[_0x5364('0x10')]);router[_0x5364('0x11')](_0x5364('0xa'),auth[_0x5364('0x8')](),controller[_0x5364('0x12')]);router['delete']('/:id',auth[_0x5364('0x8')](),controller['destroy']);router[_0x5364('0x13')](_0x5364('0xc'),auth[_0x5364('0x8')](),controller['removeAgents']);module['exports']=router;
\ No newline at end of file
+var _0x2c64=['create','addAgents','put','update','delete','destroy','removeAgents','multer','path','connect-timeout','express','Router','../../components/auth/service','../../config/environment','./voicePrefix.controller','isAuthenticated','index','get','describe','/:id','/:id/users','getAgents','post'];(function(_0x102826,_0x35f7b9){var _0x57556e=function(_0x469edd){while(--_0x469edd){_0x102826['push'](_0x102826['shift']());}};_0x57556e(++_0x35f7b9);}(_0x2c64,0xbf));var _0x42c6=function(_0x16db8b,_0xca7d28){_0x16db8b=_0x16db8b-0x0;var _0x5ba017=_0x2c64[_0x16db8b];return _0x5ba017;};'use strict';var multer=require(_0x42c6('0x0'));var util=require('util');var path=require(_0x42c6('0x1'));var timeout=require(_0x42c6('0x2'));var express=require(_0x42c6('0x3'));var router=express[_0x42c6('0x4')]();var auth=require(_0x42c6('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x42c6('0x6'));var controller=require(_0x42c6('0x7'));router['get']('/',auth[_0x42c6('0x8')](),controller[_0x42c6('0x9')]);router[_0x42c6('0xa')]('/describe',auth[_0x42c6('0x8')](),controller[_0x42c6('0xb')]);router['get'](_0x42c6('0xc'),auth[_0x42c6('0x8')](),controller['show']);router['get'](_0x42c6('0xd'),auth[_0x42c6('0x8')](),controller[_0x42c6('0xe')]);router[_0x42c6('0xf')]('/',auth[_0x42c6('0x8')](),controller[_0x42c6('0x10')]);router[_0x42c6('0xf')]('/:id/users',auth['isAuthenticated'](),controller[_0x42c6('0x11')]);router[_0x42c6('0x12')]('/:id',auth[_0x42c6('0x8')](),controller[_0x42c6('0x13')]);router[_0x42c6('0x14')](_0x42c6('0xc'),auth[_0x42c6('0x8')](),controller[_0x42c6('0x15')]);router['delete'](_0x42c6('0xd'),auth[_0x42c6('0x8')](),controller[_0x42c6('0x16')]);module['exports']=router;
\ No newline at end of file
index cb151ff..428ffa2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa36a=['STRING','system-','getDataValue','name','INTEGER','exports'];(function(_0x1f4f78,_0x1f027b){var _0x12553c=function(_0x1af561){while(--_0x1af561){_0x1f4f78['push'](_0x1f4f78['shift']());}};_0x12553c(++_0x1f027b);}(_0xa36a,0x19d));var _0xaa36=function(_0x28854f,_0x7b0e54){_0x28854f=_0x28854f-0x0;var _0x3efe4d=_0xa36a[_0x28854f];return _0x3efe4d;};'use strict';var Sequelize=require('sequelize');module[_0xaa36('0x0')]={'name':{'type':Sequelize[_0xaa36('0x1')],'allowNull':![],'unique':'name'},'prefix':{'type':Sequelize['VIRTUAL'],'get':function(_0x4d2e79){return _0xaa36('0x2')+this[_0xaa36('0x3')](_0xaa36('0x4'))+'-';}},'description':{'type':Sequelize[_0xaa36('0x1')]},'callerIdAll':{'type':Sequelize['STRING']},'VoiceExtensionId':{'type':Sequelize[_0xaa36('0x5')]}};
\ No newline at end of file
+var _0x8e0c=['INTEGER','sequelize','exports','STRING','VIRTUAL','system-'];(function(_0x55c633,_0x34079a){var _0x19e045=function(_0x45d0a5){while(--_0x45d0a5){_0x55c633['push'](_0x55c633['shift']());}};_0x19e045(++_0x34079a);}(_0x8e0c,0x1e7));var _0xc8e0=function(_0x5a4d2e,_0x32d1f1){_0x5a4d2e=_0x5a4d2e-0x0;var _0x561042=_0x8e0c[_0x5a4d2e];return _0x561042;};'use strict';var Sequelize=require(_0xc8e0('0x0'));module[_0xc8e0('0x1')]={'name':{'type':Sequelize[_0xc8e0('0x2')],'allowNull':![],'unique':'name'},'prefix':{'type':Sequelize[_0xc8e0('0x3')],'get':function(_0x46157d){return _0xc8e0('0x4')+this['getDataValue']('name')+'-';}},'description':{'type':Sequelize[_0xc8e0('0x2')]},'callerIdAll':{'type':Sequelize['STRING']},'VoiceExtensionId':{'type':Sequelize[_0xc8e0('0x5')]}};
\ No newline at end of file
index b5b1422..7061a5d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['includeAll','include','rows','catch','show','params','find','describe','create','sequelize','transaction','body','VoiceExtension','VoiceExtensionId','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','VoicePrefixes','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','app','system','description','Voice\x20Prefix\x20Extension','priority','appdata','prefix','NoOp','Voice\x20Prefix','VoicePrefixId','bulkCreate','Extensions\x20creation\x20failed','push','CDR(prefix)=','callerIdAll','PREFIX-CALLERIDALL=','No\x20callerid\x20available','goto','context','charAt','system-','findById','addAgents','omit','ids','emit','userVoicePrefix:save','removeAgents','isArray','userVoicePrefix:remove','findOne','User','pick','getAgents','nolimit','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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','VoicePrefix','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','sort','filters','filter','merge','where','map','type','key','VIRTUAL','options'];(function(_0x81f95b,_0x44c9c0){var _0x2cae43=function(_0x387d34){while(--_0x387d34){_0x81f95b['push'](_0x81f95b['shift']());}};_0x2cae43(++_0x44c9c0);}(_0xa9e0,0x123));var _0x0a9e=function(_0x138f59,_0x1b53fb){_0x138f59=_0x138f59-0x0;var _0x3d114d=_0xa9e0[_0x138f59];return _0x3d114d;};'use strict';var pdf=require(_0x0a9e('0x0'));var emlformat=require(_0x0a9e('0x1'));var rimraf=require(_0x0a9e('0x2'));var zipdir=require('zip-dir');var jsonpatch=require('fast-json-patch');var rp=require(_0x0a9e('0x3'));var moment=require('moment');var BPromise=require(_0x0a9e('0x4'));var Mustache=require(_0x0a9e('0x5'));var util=require(_0x0a9e('0x6'));var path=require(_0x0a9e('0x7'));var sox=require(_0x0a9e('0x8'));var csv=require('to-csv');var ejs=require(_0x0a9e('0x9'));var fs=require('fs');var _=require(_0x0a9e('0xa'));var squel=require(_0x0a9e('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require(_0x0a9e('0xc'));var toCsv=require('to-csv');var querystring=require('querystring');var Papa=require(_0x0a9e('0xd'));var authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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('./voicePrefix.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='VoicePrefixes';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['VoicePrefix'][_0x0a9e('0x45')](_0x23b089)['then'](handleEntityNotFound(_0x45a9b8,null))[_0x0a9e('0x23')](respondWithResult(_0x45a9b8,null))[_0x0a9e('0x42')](handleError(_0x45a9b8,null));};exports[_0x0a9e('0x24')]=function(_0x562fb4,_0x14bec2){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x562fb4[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x14bec2,null))[_0x0a9e('0x23')](removeEntity(_0x14bec2,null))[_0x0a9e('0x42')](handleError(_0x14bec2,null));};exports['describe']=function(_0x13f44d,_0x1bde3c){return db[_0x0a9e('0x2a')][_0x0a9e('0x46')]()[_0x0a9e('0x23')](respondWithResult(_0x1bde3c,null))[_0x0a9e('0x42')](handleError(_0x1bde3c,null));};exports[_0x0a9e('0x47')]=function(_0x19383e,_0x34febd){var _0x58a5c2;return db[_0x0a9e('0x48')][_0x0a9e('0x49')](function(_0x4f7240){return db['VoicePrefix']['create'](_0x19383e[_0x0a9e('0x4a')],{'transaction':_0x4f7240})[_0x0a9e('0x23')](function(_0x37edaa){_0x58a5c2=_0x37edaa[_0x0a9e('0x25')]({'plain':!![]});return db[_0x0a9e('0x4b')][_0x0a9e('0x45')]({'where':{'id':_0x58a5c2[_0x0a9e('0x4c')]},'raw':!![]})[_0x0a9e('0x23')](function(_0x5d38ae){return createVoicePrefixExtensions(_0x58a5c2,_0x5d38ae,_0x4f7240);});});})['then'](function(){var _0x53975a=_0x19383e[_0x0a9e('0x4d')][_0x0a9e('0x25')]({'plain':!![]});if(!_0x53975a)throw new Error(_0x0a9e('0x4e'));if(_0x53975a['role']===_0x0a9e('0x4d')){var _0x161aa7=_0x58a5c2;return db['UserProfileSection']['find']({'where':{'name':_0x0a9e('0x4f'),'userProfileId':_0x53975a['userProfileId']},'raw':!![]})[_0x0a9e('0x23')](function(_0x4c3845){if(_0x4c3845&&_0x4c3845[_0x0a9e('0x50')]===0x0){return db[_0x0a9e('0x51')][_0x0a9e('0x47')]({'name':_0x161aa7['name'],'resourceId':_0x161aa7['id'],'type':_0x4c3845[_0x0a9e('0x28')],'sectionId':_0x4c3845['id']},{})[_0x0a9e('0x23')](function(){return _0x58a5c2;});}else{return _0x58a5c2;}})['catch'](function(_0x50f687){logger[_0x0a9e('0x26')](_0x0a9e('0x52'),_0x50f687);throw _0x50f687;});}return _0x58a5c2;})['then'](respondWithResult(_0x34febd,null))[_0x0a9e('0x42')](handleError(_0x34febd,null));};function Extension(_0x5ce9ac,_0x211ef9,_0x523cd2,_0xe22ccc){this['context']='from-sip';this['exten']=_0x5ce9ac;this[_0x0a9e('0x53')]=_0x523cd2;this['type']=_0x0a9e('0x54');this[_0x0a9e('0x55')]=_0x0a9e('0x56');this[_0x0a9e('0x57')]=_0x211ef9;this[_0x0a9e('0x58')]=_0xe22ccc;}function createVoicePrefixExtensions(_0x272738,_0xd10662,_0x28d814){return new BPromise(function(_0x4e67ab,_0x1c693e){var _0x121cef=new Extension(formatPrefixName(_0x272738[_0x0a9e('0x59')]),0x1,_0x0a9e('0x5a'),_0x0a9e('0x5b'));_0x121cef[_0x0a9e('0x5c')]=_0x272738['id'];return db['VoiceExtension'][_0x0a9e('0x47')](_0x121cef,{'transaction':_0x28d814})[_0x0a9e('0x23')](function(_0x5239ef){var _0x3649cc=_0x5239ef['get']({'plain':!![]});var _0x20c668=_['map'](addVoicePrefixExtensions(_0x272738,_0xd10662),function(_0x4b3c1a){_0x4b3c1a['VoiceExtensionId']=_0x3649cc['id'];_0x4b3c1a[_0x0a9e('0x5c')]=_0x272738['id'];return _0x4b3c1a;});return db['VoiceExtension'][_0x0a9e('0x5d')](_0x20c668,{'transaction':_0x28d814})[_0x0a9e('0x23')](function(_0x261adb){if(!_0x261adb){return _0x1c693e(_0x0a9e('0x5e'));}else{return _0x4e67ab(_0x261adb);}})[_0x0a9e('0x42')](function(_0x26d7db){return _0x1c693e(_0x26d7db);});});;});};function addVoicePrefixExtensions(_0x49eed0,_0x1627a7){var _0x5854cc=[];var _0xca4ade=formatPrefixName(_0x49eed0[_0x0a9e('0x59')]);_0x5854cc[_0x0a9e('0x5f')](new Extension(_0xca4ade,0x2,'Set',_0x0a9e('0x60')+_0x49eed0[_0x0a9e('0x28')]));if(_0x49eed0[_0x0a9e('0x61')]){_0x5854cc[_0x0a9e('0x5f')](new Extension(_0xca4ade,0x3,'Set',_0x0a9e('0x62')+_0x49eed0[_0x0a9e('0x61')]));}else{_0x5854cc['push'](new Extension(_0xca4ade,0x3,_0x0a9e('0x5a'),_0x0a9e('0x63')));}_0x5854cc[_0x0a9e('0x5f')](new Extension(_0xca4ade,0x4,_0x0a9e('0x64'),_0x1627a7[_0x0a9e('0x65')]+','+'${EXTEN:'+(0x8+_0x49eed0[_0x0a9e('0x28')][_0x0a9e('0x32')])+'}'+','+0x1));return _0x5854cc;}function formatPrefixName(_0x281c7d){var _0x47bb43='_';for(var _0x3528b7=0x0;_0x3528b7<_0x281c7d['length'];_0x3528b7++){if(_0x281c7d['charAt'](_0x3528b7)=='-'){_0x47bb43+=_0x281c7d[_0x0a9e('0x66')](_0x3528b7);}else{_0x47bb43+='['+_0x281c7d[_0x0a9e('0x66')](_0x3528b7)+']';}}_0x47bb43+='.';return _0x47bb43;}exports[_0x0a9e('0x22')]=function(_0x19c995,_0x186f39,_0xc8c264){var _0x387489=_0x19c995[_0x0a9e('0x4a')];_0x387489[_0x0a9e('0x59')]=_0x0a9e('0x67')+_0x387489[_0x0a9e('0x28')]+'-';return db[_0x0a9e('0x48')][_0x0a9e('0x49')](function(_0x2b8192){return db[_0x0a9e('0x2a')][_0x0a9e('0x22')](_0x387489,{'where':{'id':_0x387489['id']},'transaction':_0x2b8192})[_0x0a9e('0x23')](function(){return db[_0x0a9e('0x4b')]['destroy']({'where':{'VoicePrefixId':_0x387489['id']},'transaction':_0x2b8192})[_0x0a9e('0x23')](function(){return db[_0x0a9e('0x4b')][_0x0a9e('0x45')]({'where':{'id':_0x387489['VoiceExtensionId']},'raw':!![]})[_0x0a9e('0x23')](function(_0x30944e){return createVoicePrefixExtensions(_0x387489,_0x30944e,_0x2b8192);});});});})['then'](function(){return db[_0x0a9e('0x2a')][_0x0a9e('0x68')](_0x387489['id']);})[_0x0a9e('0x23')](respondWithResult(_0x186f39,null))[_0x0a9e('0x42')](handleError(_0x186f39,null));};exports[_0x0a9e('0x69')]=function(_0x4a43a8,_0x50cdce,_0x4a2438){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x4a43a8[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x50cdce,null))[_0x0a9e('0x23')](function(_0x380ab3){if(_0x380ab3){return _0x380ab3[_0x0a9e('0x69')](_0x4a43a8[_0x0a9e('0x4a')]['ids'],_[_0x0a9e('0x6a')](_0x4a43a8[_0x0a9e('0x4a')],[_0x0a9e('0x6b'),'id'])||{})['spread'](function(_0x2bdc44){for(var _0x583b2e=0x0;_0x583b2e<_0x4a43a8[_0x0a9e('0x4a')][_0x0a9e('0x6b')]['length'];_0x583b2e+=0x1){socket[_0x0a9e('0x6c')](_0x0a9e('0x6d'),{'UserId':_0x4a43a8[_0x0a9e('0x4a')][_0x0a9e('0x6b')][_0x583b2e],'VoicePrefixId':_0x4a43a8['params']['id']});}return _0x2bdc44;});}})[_0x0a9e('0x23')](respondWithResult(_0x50cdce,null))[_0x0a9e('0x42')](handleError(_0x50cdce,null));};exports[_0x0a9e('0x6e')]=function(_0x278ab4,_0x5b7fc3,_0x109ccb){var _0x3d91db;return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x278ab4['params']['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x5b7fc3,null))[_0x0a9e('0x23')](function(_0x30a4c7){if(_0x30a4c7){return _0x30a4c7[_0x0a9e('0x6e')](_0x278ab4[_0x0a9e('0x2e')][_0x0a9e('0x6b')])[_0x0a9e('0x23')](function(_0x3df0e3){if(_[_0x0a9e('0x6f')](_0x278ab4[_0x0a9e('0x2e')][_0x0a9e('0x6b')])){for(var _0x1f10ef=0x0;_0x1f10ef<_0x278ab4[_0x0a9e('0x2e')][_0x0a9e('0x6b')]['length'];_0x1f10ef+=0x1){socket[_0x0a9e('0x6c')](_0x0a9e('0x70'),{'UserId':_0x278ab4[_0x0a9e('0x2e')]['ids'][_0x1f10ef],'VoicePrefixId':_0x278ab4[_0x0a9e('0x44')]['id']});}}else{socket[_0x0a9e('0x6c')](_0x0a9e('0x70'),{'UserId':_0x278ab4[_0x0a9e('0x2e')]['ids'],'VoicePrefixId':_0x278ab4['params']['id']});}});}})[_0x0a9e('0x23')](respondWithStatusCode(_0x5b7fc3,null))[_0x0a9e('0x42')](handleError(_0x5b7fc3,null));};exports['getAgents']=function(_0x45108c,_0x53a6a1,_0x260f4b){var _0x8ebf02={};var _0x5637a1={};var _0x28a942;var _0x41cf12;return db[_0x0a9e('0x2a')][_0x0a9e('0x71')]({'where':{'id':_0x45108c[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x53a6a1,null))[_0x0a9e('0x23')](function(_0x482ca2){if(_0x482ca2){_0x28a942=_0x482ca2;_0x5637a1[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db[_0x0a9e('0x72')][_0x0a9e('0x2b')]);_0x5637a1['query']=_[_0x0a9e('0x2d')](_0x45108c[_0x0a9e('0x2e')]);_0x5637a1['filters']=_[_0x0a9e('0x2f')](_0x5637a1['model'],_0x5637a1[_0x0a9e('0x2e')]);_0x8ebf02[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x5637a1[_0x0a9e('0x2c')],qs['fields'](_0x45108c['query'][_0x0a9e('0x31')]));_0x8ebf02[_0x0a9e('0x30')]=_0x8ebf02[_0x0a9e('0x30')]['length']?_0x8ebf02[_0x0a9e('0x30')]:_0x5637a1[_0x0a9e('0x2c')];_0x8ebf02['order']=qs['sort'](_0x45108c[_0x0a9e('0x2e')]['sort']);_0x8ebf02['where']=qs['filters'](_[_0x0a9e('0x73')](_0x45108c[_0x0a9e('0x2e')],_0x5637a1[_0x0a9e('0x36')]));if(_0x45108c[_0x0a9e('0x2e')][_0x0a9e('0x37')]){_0x8ebf02[_0x0a9e('0x39')]=_['merge'](_0x8ebf02[_0x0a9e('0x39')],{'$or':_['map'](_0x8ebf02[_0x0a9e('0x30')],function(_0x2aabab){var _0x18ad56={};_0x18ad56[_0x2aabab]={'$like':'%'+_0x45108c[_0x0a9e('0x2e')]['filter']+'%'};return _0x18ad56;})});}_0x8ebf02=_[_0x0a9e('0x38')]({},_0x8ebf02,_0x45108c[_0x0a9e('0x3e')]);return _0x28a942[_0x0a9e('0x74')](_0x8ebf02);}})['then'](function(_0xb6e411){if(_0xb6e411){_0x41cf12=_0xb6e411[_0x0a9e('0x32')];if(!_0x45108c[_0x0a9e('0x2e')][_0x0a9e('0x33')](_0x0a9e('0x75'))){_0x8ebf02[_0x0a9e('0x1d')]=qs[_0x0a9e('0x1d')](_0x45108c[_0x0a9e('0x2e')]['limit']);_0x8ebf02[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0x45108c['query'][_0x0a9e('0x1c')]);}return _0x28a942[_0x0a9e('0x74')](_0x8ebf02);}})[_0x0a9e('0x23')](function(_0x5a26c8){if(_0x5a26c8){return _0x5a26c8?{'count':_0x41cf12,'rows':_0x5a26c8}:null;}})[_0x0a9e('0x23')](respondWithResult(_0x53a6a1,null))['catch'](handleError(_0x53a6a1,null));};
\ No newline at end of file
+var _0xa9e0=['includeAll','include','rows','catch','show','params','find','describe','create','sequelize','transaction','body','VoiceExtension','VoiceExtensionId','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','VoicePrefixes','autoAssociation','UserProfileResource','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','app','system','description','Voice\x20Prefix\x20Extension','priority','appdata','prefix','NoOp','Voice\x20Prefix','VoicePrefixId','bulkCreate','Extensions\x20creation\x20failed','push','CDR(prefix)=','callerIdAll','PREFIX-CALLERIDALL=','No\x20callerid\x20available','goto','context','charAt','system-','findById','addAgents','omit','ids','emit','userVoicePrefix:save','removeAgents','isArray','userVoicePrefix:remove','findOne','User','pick','getAgents','nolimit','html-pdf','eml-format','rimraf','request-promise','bluebird','mustache','util','path','sox','ejs','lodash','squel','desk.js','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','../../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','VoicePrefix','rawAttributes','model','keys','query','intersection','attributes','fields','length','hasOwnProperty','order','sort','filters','filter','merge','where','map','type','key','VIRTUAL','options'];(function(_0x449f0f,_0x1b2ebc){var _0x28a244=function(_0x326bcd){while(--_0x326bcd){_0x449f0f['push'](_0x449f0f['shift']());}};_0x28a244(++_0x1b2ebc);}(_0xa9e0,0x123));var _0x0a9e=function(_0x47b58b,_0x41a189){_0x47b58b=_0x47b58b-0x0;var _0x46bebe=_0xa9e0[_0x47b58b];return _0x46bebe;};'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 authService=require(_0x0a9e('0xe'));var hardwareService=require(_0x0a9e('0xf'));var Redis=require(_0x0a9e('0x10'));var qs=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('./voicePrefix.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='VoicePrefixes';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['VoicePrefix'][_0x0a9e('0x45')](_0x23b089)['then'](handleEntityNotFound(_0x45a9b8,null))[_0x0a9e('0x23')](respondWithResult(_0x45a9b8,null))[_0x0a9e('0x42')](handleError(_0x45a9b8,null));};exports[_0x0a9e('0x24')]=function(_0x562fb4,_0x14bec2){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x562fb4[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x14bec2,null))[_0x0a9e('0x23')](removeEntity(_0x14bec2,null))[_0x0a9e('0x42')](handleError(_0x14bec2,null));};exports['describe']=function(_0x13f44d,_0x1bde3c){return db[_0x0a9e('0x2a')][_0x0a9e('0x46')]()[_0x0a9e('0x23')](respondWithResult(_0x1bde3c,null))[_0x0a9e('0x42')](handleError(_0x1bde3c,null));};exports[_0x0a9e('0x47')]=function(_0x19383e,_0x34febd){var _0x58a5c2;return db[_0x0a9e('0x48')][_0x0a9e('0x49')](function(_0x4f7240){return db['VoicePrefix']['create'](_0x19383e[_0x0a9e('0x4a')],{'transaction':_0x4f7240})[_0x0a9e('0x23')](function(_0x37edaa){_0x58a5c2=_0x37edaa[_0x0a9e('0x25')]({'plain':!![]});return db[_0x0a9e('0x4b')][_0x0a9e('0x45')]({'where':{'id':_0x58a5c2[_0x0a9e('0x4c')]},'raw':!![]})[_0x0a9e('0x23')](function(_0x5d38ae){return createVoicePrefixExtensions(_0x58a5c2,_0x5d38ae,_0x4f7240);});});})['then'](function(){var _0x53975a=_0x19383e[_0x0a9e('0x4d')][_0x0a9e('0x25')]({'plain':!![]});if(!_0x53975a)throw new Error(_0x0a9e('0x4e'));if(_0x53975a['role']===_0x0a9e('0x4d')){var _0x161aa7=_0x58a5c2;return db['UserProfileSection']['find']({'where':{'name':_0x0a9e('0x4f'),'userProfileId':_0x53975a['userProfileId']},'raw':!![]})[_0x0a9e('0x23')](function(_0x4c3845){if(_0x4c3845&&_0x4c3845[_0x0a9e('0x50')]===0x0){return db[_0x0a9e('0x51')][_0x0a9e('0x47')]({'name':_0x161aa7['name'],'resourceId':_0x161aa7['id'],'type':_0x4c3845[_0x0a9e('0x28')],'sectionId':_0x4c3845['id']},{})[_0x0a9e('0x23')](function(){return _0x58a5c2;});}else{return _0x58a5c2;}})['catch'](function(_0x50f687){logger[_0x0a9e('0x26')](_0x0a9e('0x52'),_0x50f687);throw _0x50f687;});}return _0x58a5c2;})['then'](respondWithResult(_0x34febd,null))[_0x0a9e('0x42')](handleError(_0x34febd,null));};function Extension(_0x5ce9ac,_0x211ef9,_0x523cd2,_0xe22ccc){this['context']='from-sip';this['exten']=_0x5ce9ac;this[_0x0a9e('0x53')]=_0x523cd2;this['type']=_0x0a9e('0x54');this[_0x0a9e('0x55')]=_0x0a9e('0x56');this[_0x0a9e('0x57')]=_0x211ef9;this[_0x0a9e('0x58')]=_0xe22ccc;}function createVoicePrefixExtensions(_0x272738,_0xd10662,_0x28d814){return new BPromise(function(_0x4e67ab,_0x1c693e){var _0x121cef=new Extension(formatPrefixName(_0x272738[_0x0a9e('0x59')]),0x1,_0x0a9e('0x5a'),_0x0a9e('0x5b'));_0x121cef[_0x0a9e('0x5c')]=_0x272738['id'];return db['VoiceExtension'][_0x0a9e('0x47')](_0x121cef,{'transaction':_0x28d814})[_0x0a9e('0x23')](function(_0x5239ef){var _0x3649cc=_0x5239ef['get']({'plain':!![]});var _0x20c668=_['map'](addVoicePrefixExtensions(_0x272738,_0xd10662),function(_0x4b3c1a){_0x4b3c1a['VoiceExtensionId']=_0x3649cc['id'];_0x4b3c1a[_0x0a9e('0x5c')]=_0x272738['id'];return _0x4b3c1a;});return db['VoiceExtension'][_0x0a9e('0x5d')](_0x20c668,{'transaction':_0x28d814})[_0x0a9e('0x23')](function(_0x261adb){if(!_0x261adb){return _0x1c693e(_0x0a9e('0x5e'));}else{return _0x4e67ab(_0x261adb);}})[_0x0a9e('0x42')](function(_0x26d7db){return _0x1c693e(_0x26d7db);});});;});};function addVoicePrefixExtensions(_0x49eed0,_0x1627a7){var _0x5854cc=[];var _0xca4ade=formatPrefixName(_0x49eed0[_0x0a9e('0x59')]);_0x5854cc[_0x0a9e('0x5f')](new Extension(_0xca4ade,0x2,'Set',_0x0a9e('0x60')+_0x49eed0[_0x0a9e('0x28')]));if(_0x49eed0[_0x0a9e('0x61')]){_0x5854cc[_0x0a9e('0x5f')](new Extension(_0xca4ade,0x3,'Set',_0x0a9e('0x62')+_0x49eed0[_0x0a9e('0x61')]));}else{_0x5854cc['push'](new Extension(_0xca4ade,0x3,_0x0a9e('0x5a'),_0x0a9e('0x63')));}_0x5854cc[_0x0a9e('0x5f')](new Extension(_0xca4ade,0x4,_0x0a9e('0x64'),_0x1627a7[_0x0a9e('0x65')]+','+'${EXTEN:'+(0x8+_0x49eed0[_0x0a9e('0x28')][_0x0a9e('0x32')])+'}'+','+0x1));return _0x5854cc;}function formatPrefixName(_0x281c7d){var _0x47bb43='_';for(var _0x3528b7=0x0;_0x3528b7<_0x281c7d['length'];_0x3528b7++){if(_0x281c7d['charAt'](_0x3528b7)=='-'){_0x47bb43+=_0x281c7d[_0x0a9e('0x66')](_0x3528b7);}else{_0x47bb43+='['+_0x281c7d[_0x0a9e('0x66')](_0x3528b7)+']';}}_0x47bb43+='.';return _0x47bb43;}exports[_0x0a9e('0x22')]=function(_0x19c995,_0x186f39,_0xc8c264){var _0x387489=_0x19c995[_0x0a9e('0x4a')];_0x387489[_0x0a9e('0x59')]=_0x0a9e('0x67')+_0x387489[_0x0a9e('0x28')]+'-';return db[_0x0a9e('0x48')][_0x0a9e('0x49')](function(_0x2b8192){return db[_0x0a9e('0x2a')][_0x0a9e('0x22')](_0x387489,{'where':{'id':_0x387489['id']},'transaction':_0x2b8192})[_0x0a9e('0x23')](function(){return db[_0x0a9e('0x4b')]['destroy']({'where':{'VoicePrefixId':_0x387489['id']},'transaction':_0x2b8192})[_0x0a9e('0x23')](function(){return db[_0x0a9e('0x4b')][_0x0a9e('0x45')]({'where':{'id':_0x387489['VoiceExtensionId']},'raw':!![]})[_0x0a9e('0x23')](function(_0x30944e){return createVoicePrefixExtensions(_0x387489,_0x30944e,_0x2b8192);});});});})['then'](function(){return db[_0x0a9e('0x2a')][_0x0a9e('0x68')](_0x387489['id']);})[_0x0a9e('0x23')](respondWithResult(_0x186f39,null))[_0x0a9e('0x42')](handleError(_0x186f39,null));};exports[_0x0a9e('0x69')]=function(_0x4a43a8,_0x50cdce,_0x4a2438){return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x4a43a8[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x50cdce,null))[_0x0a9e('0x23')](function(_0x380ab3){if(_0x380ab3){return _0x380ab3[_0x0a9e('0x69')](_0x4a43a8[_0x0a9e('0x4a')]['ids'],_[_0x0a9e('0x6a')](_0x4a43a8[_0x0a9e('0x4a')],[_0x0a9e('0x6b'),'id'])||{})['spread'](function(_0x2bdc44){for(var _0x583b2e=0x0;_0x583b2e<_0x4a43a8[_0x0a9e('0x4a')][_0x0a9e('0x6b')]['length'];_0x583b2e+=0x1){socket[_0x0a9e('0x6c')](_0x0a9e('0x6d'),{'UserId':_0x4a43a8[_0x0a9e('0x4a')][_0x0a9e('0x6b')][_0x583b2e],'VoicePrefixId':_0x4a43a8['params']['id']});}return _0x2bdc44;});}})[_0x0a9e('0x23')](respondWithResult(_0x50cdce,null))[_0x0a9e('0x42')](handleError(_0x50cdce,null));};exports[_0x0a9e('0x6e')]=function(_0x278ab4,_0x5b7fc3,_0x109ccb){var _0x3d91db;return db[_0x0a9e('0x2a')][_0x0a9e('0x45')]({'where':{'id':_0x278ab4['params']['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x5b7fc3,null))[_0x0a9e('0x23')](function(_0x30a4c7){if(_0x30a4c7){return _0x30a4c7[_0x0a9e('0x6e')](_0x278ab4[_0x0a9e('0x2e')][_0x0a9e('0x6b')])[_0x0a9e('0x23')](function(_0x3df0e3){if(_[_0x0a9e('0x6f')](_0x278ab4[_0x0a9e('0x2e')][_0x0a9e('0x6b')])){for(var _0x1f10ef=0x0;_0x1f10ef<_0x278ab4[_0x0a9e('0x2e')][_0x0a9e('0x6b')]['length'];_0x1f10ef+=0x1){socket[_0x0a9e('0x6c')](_0x0a9e('0x70'),{'UserId':_0x278ab4[_0x0a9e('0x2e')]['ids'][_0x1f10ef],'VoicePrefixId':_0x278ab4[_0x0a9e('0x44')]['id']});}}else{socket[_0x0a9e('0x6c')](_0x0a9e('0x70'),{'UserId':_0x278ab4[_0x0a9e('0x2e')]['ids'],'VoicePrefixId':_0x278ab4['params']['id']});}});}})[_0x0a9e('0x23')](respondWithStatusCode(_0x5b7fc3,null))[_0x0a9e('0x42')](handleError(_0x5b7fc3,null));};exports['getAgents']=function(_0x45108c,_0x53a6a1,_0x260f4b){var _0x8ebf02={};var _0x5637a1={};var _0x28a942;var _0x41cf12;return db[_0x0a9e('0x2a')][_0x0a9e('0x71')]({'where':{'id':_0x45108c[_0x0a9e('0x44')]['id']}})[_0x0a9e('0x23')](handleEntityNotFound(_0x53a6a1,null))[_0x0a9e('0x23')](function(_0x482ca2){if(_0x482ca2){_0x28a942=_0x482ca2;_0x5637a1[_0x0a9e('0x2c')]=_[_0x0a9e('0x2d')](db[_0x0a9e('0x72')][_0x0a9e('0x2b')]);_0x5637a1['query']=_[_0x0a9e('0x2d')](_0x45108c[_0x0a9e('0x2e')]);_0x5637a1['filters']=_[_0x0a9e('0x2f')](_0x5637a1['model'],_0x5637a1[_0x0a9e('0x2e')]);_0x8ebf02[_0x0a9e('0x30')]=_[_0x0a9e('0x2f')](_0x5637a1[_0x0a9e('0x2c')],qs['fields'](_0x45108c['query'][_0x0a9e('0x31')]));_0x8ebf02[_0x0a9e('0x30')]=_0x8ebf02[_0x0a9e('0x30')]['length']?_0x8ebf02[_0x0a9e('0x30')]:_0x5637a1[_0x0a9e('0x2c')];_0x8ebf02['order']=qs['sort'](_0x45108c[_0x0a9e('0x2e')]['sort']);_0x8ebf02['where']=qs['filters'](_[_0x0a9e('0x73')](_0x45108c[_0x0a9e('0x2e')],_0x5637a1[_0x0a9e('0x36')]));if(_0x45108c[_0x0a9e('0x2e')][_0x0a9e('0x37')]){_0x8ebf02[_0x0a9e('0x39')]=_['merge'](_0x8ebf02[_0x0a9e('0x39')],{'$or':_['map'](_0x8ebf02[_0x0a9e('0x30')],function(_0x2aabab){var _0x18ad56={};_0x18ad56[_0x2aabab]={'$like':'%'+_0x45108c[_0x0a9e('0x2e')]['filter']+'%'};return _0x18ad56;})});}_0x8ebf02=_[_0x0a9e('0x38')]({},_0x8ebf02,_0x45108c[_0x0a9e('0x3e')]);return _0x28a942[_0x0a9e('0x74')](_0x8ebf02);}})['then'](function(_0xb6e411){if(_0xb6e411){_0x41cf12=_0xb6e411[_0x0a9e('0x32')];if(!_0x45108c[_0x0a9e('0x2e')][_0x0a9e('0x33')](_0x0a9e('0x75'))){_0x8ebf02[_0x0a9e('0x1d')]=qs[_0x0a9e('0x1d')](_0x45108c[_0x0a9e('0x2e')]['limit']);_0x8ebf02[_0x0a9e('0x1c')]=qs[_0x0a9e('0x1c')](_0x45108c['query'][_0x0a9e('0x1c')]);}return _0x28a942[_0x0a9e('0x74')](_0x8ebf02);}})[_0x0a9e('0x23')](function(_0x5a26c8){if(_0x5a26c8){return _0x5a26c8?{'count':_0x41cf12,'rows':_0x5a26c8}:null;}})[_0x0a9e('0x23')](respondWithResult(_0x53a6a1,null))['catch'](handleError(_0x53a6a1,null));};
\ No newline at end of file
index dfc248f..b53eebb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x207c=['hook','exports','../../mysqldb','VoicePrefix','setMaxListeners','save','update','remove','hasOwnProperty'];(function(_0x16b1b8,_0x432d03){var _0x558b1e=function(_0xf47f2f){while(--_0xf47f2f){_0x16b1b8['push'](_0x16b1b8['shift']());}};_0x558b1e(++_0x432d03);}(_0x207c,0x1e8));var _0xc207=function(_0x33be9d,_0x41618e){_0x33be9d=_0x33be9d-0x0;var _0x4a9267=_0x207c[_0x33be9d];return _0x4a9267;};'use strict';var EventEmitter=require('events');var VoicePrefix=require(_0xc207('0x0'))['db'][_0xc207('0x1')];var VoicePrefixEvents=new EventEmitter();VoicePrefixEvents[_0xc207('0x2')](0x0);var events={'afterCreate':_0xc207('0x3'),'afterUpdate':_0xc207('0x4'),'afterDestroy':_0xc207('0x5')};function emitEvent(_0x1dd107){return function(_0x4b9daa,_0x38ff02,_0x59bc89){VoicePrefixEvents['emit'](_0x1dd107+':'+_0x4b9daa['id'],_0x4b9daa);VoicePrefixEvents['emit'](_0x1dd107,_0x4b9daa);_0x59bc89(null);};}for(var e in events){if(events[_0xc207('0x6')](e)){var event=events[e];VoicePrefix[_0xc207('0x7')](e,emitEvent(event));}}module[_0xc207('0x8')]=VoicePrefixEvents;
\ No newline at end of file
+var _0x4c4e=['remove','emit','hasOwnProperty','hook','exports','events','VoicePrefix','setMaxListeners','save'];(function(_0x34b1b8,_0x54c9bf){var _0x542dd8=function(_0xff3f89){while(--_0xff3f89){_0x34b1b8['push'](_0x34b1b8['shift']());}};_0x542dd8(++_0x54c9bf);}(_0x4c4e,0x152));var _0xe4c4=function(_0x391925,_0x47defc){_0x391925=_0x391925-0x0;var _0xefda12=_0x4c4e[_0x391925];return _0xefda12;};'use strict';var EventEmitter=require(_0xe4c4('0x0'));var VoicePrefix=require('../../mysqldb')['db'][_0xe4c4('0x1')];var VoicePrefixEvents=new EventEmitter();VoicePrefixEvents[_0xe4c4('0x2')](0x0);var events={'afterCreate':_0xe4c4('0x3'),'afterUpdate':'update','afterDestroy':_0xe4c4('0x4')};function emitEvent(_0x7d7655){return function(_0x1a4483,_0x4cd652,_0x2d3bb7){VoicePrefixEvents['emit'](_0x7d7655+':'+_0x1a4483['id'],_0x1a4483);VoicePrefixEvents[_0xe4c4('0x5')](_0x7d7655,_0x1a4483);_0x2d3bb7(null);};}for(var e in events){if(events[_0xe4c4('0x6')](e)){var event=events[e];VoicePrefix[_0xe4c4('0x7')](e,emitEvent(event));}}module[_0xe4c4('0x8')]=VoicePrefixEvents;
\ No newline at end of file
index 9528698..7dd2b2e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf534=['voice_prefixes','lodash','util','api','bluebird','./voicePrefix.attributes','exports','define','VoicePrefix'];(function(_0xe8e194,_0x3c0f63){var _0x907512=function(_0x1e147c){while(--_0x1e147c){_0xe8e194['push'](_0xe8e194['shift']());}};_0x907512(++_0x3c0f63);}(_0xf534,0x9a));var _0x4f53=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xf534[_0x20a584];return _0x4b41a8;};'use strict';var _=require(_0x4f53('0x0'));var util=require(_0x4f53('0x1'));var logger=require('../../config/logger')(_0x4f53('0x2'));var moment=require('moment');var BPromise=require(_0x4f53('0x3'));var rp=require('request-promise');var attributes=require(_0x4f53('0x4'));module[_0x4f53('0x5')]=function(_0x1fd3d2,_0x1e0cbb){return _0x1fd3d2[_0x4f53('0x6')](_0x4f53('0x7'),attributes,{'tableName':_0x4f53('0x8'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xd9a8=['exports','define','VoicePrefix','lodash','util','../../config/logger','moment','bluebird'];(function(_0x3adf42,_0x2618b9){var _0x1a569e=function(_0x290b36){while(--_0x290b36){_0x3adf42['push'](_0x3adf42['shift']());}};_0x1a569e(++_0x2618b9);}(_0xd9a8,0xc3));var _0x8d9a=function(_0x554e9e,_0xcb21e5){_0x554e9e=_0x554e9e-0x0;var _0x1ba47c=_0xd9a8[_0x554e9e];return _0x1ba47c;};'use strict';var _=require(_0x8d9a('0x0'));var util=require(_0x8d9a('0x1'));var logger=require(_0x8d9a('0x2'))('api');var moment=require(_0x8d9a('0x3'));var BPromise=require(_0x8d9a('0x4'));var rp=require('request-promise');var attributes=require('./voicePrefix.attributes');module[_0x8d9a('0x5')]=function(_0x3a40f0,_0x34bbf9){return _0x3a40f0[_0x8d9a('0x6')](_0x8d9a('0x7'),attributes,{'tableName':'voice_prefixes','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ea7e6d4..c858659 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x847d=['request','then','info','VoicePrefix,\x20%s,\x20%s','request\x20sent','debug','VoicePrefix,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','catch','lodash','moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','client','http','redis','defaults','socket.io-emitter','./voicePrefix.socket','register'];(function(_0x3b4c4e,_0x3a861f){var _0x43626=function(_0xd87b4b){while(--_0xd87b4b){_0x3b4c4e['push'](_0x3b4c4e['shift']());}};_0x43626(++_0x3a861f);}(_0x847d,0x1a3));var _0xd847=function(_0x173441,_0x26b0d9){_0x173441=_0x173441-0x0;var _0x2423a8=_0x847d[_0x173441];return _0x2423a8;};'use strict';var _=require(_0xd847('0x0'));var util=require('util');var moment=require(_0xd847('0x1'));var BPromise=require('bluebird');var rs=require(_0xd847('0x2'));var fs=require('fs');var Redis=require(_0xd847('0x3'));var db=require(_0xd847('0x4'))['db'];var utils=require(_0xd847('0x5'));var logger=require(_0xd847('0x6'))(_0xd847('0x7'));var config=require(_0xd847('0x8'));var jayson=require('jayson/promise');var client=jayson[_0xd847('0x9')][_0xd847('0xa')]({'port':0x232a});config[_0xd847('0xb')]=_[_0xd847('0xc')](config[_0xd847('0xb')],{'host':'localhost','port':0x18eb});var socket=require(_0xd847('0xd'))(new Redis(config['redis']));require(_0xd847('0xe'))[_0xd847('0xf')](socket);function respondWithRpcPromise(_0x2cfe66,_0x1cfea8,_0x485b7c){return new BPromise(function(_0x364f1d,_0x3753a1){return client[_0xd847('0x10')](_0x2cfe66,_0x485b7c)[_0xd847('0x11')](function(_0x33a9ff){logger[_0xd847('0x12')](_0xd847('0x13'),_0x1cfea8,_0xd847('0x14'));logger[_0xd847('0x15')](_0xd847('0x16'),_0x1cfea8,_0xd847('0x14'),JSON[_0xd847('0x17')](_0x33a9ff));if(_0x33a9ff[_0xd847('0x18')]){if(_0x33a9ff['error'][_0xd847('0x19')]===0x1f4){logger[_0xd847('0x18')]('VoicePrefix,\x20%s,\x20%s',_0x1cfea8,_0x33a9ff[_0xd847('0x18')][_0xd847('0x1a')]);return _0x3753a1(_0x33a9ff[_0xd847('0x18')]['message']);}logger[_0xd847('0x18')](_0xd847('0x13'),_0x1cfea8,_0x33a9ff[_0xd847('0x18')][_0xd847('0x1a')]);return _0x364f1d(_0x33a9ff[_0xd847('0x18')][_0xd847('0x1a')]);}else{logger['info'](_0xd847('0x13'),_0x1cfea8,_0xd847('0x14'));_0x364f1d(_0x33a9ff[_0xd847('0x1b')][_0xd847('0x1a')]);}})[_0xd847('0x1c')](function(_0xe50659){logger[_0xd847('0x18')](_0xd847('0x13'),_0x1cfea8,_0xe50659);_0x3753a1(_0xe50659);});});}
\ No newline at end of file
+var _0x9d7e=['lodash','moment','randomstring','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','defaults','redis','localhost','socket.io-emitter','./voicePrefix.socket','register','request','then','info','VoicePrefix,\x20%s,\x20%s','request\x20sent','error','message','catch'];(function(_0x52d0f7,_0x3dde5d){var _0x380a0b=function(_0x430e81){while(--_0x430e81){_0x52d0f7['push'](_0x52d0f7['shift']());}};_0x380a0b(++_0x3dde5d);}(_0x9d7e,0x176));var _0xe9d7=function(_0x3a0906,_0x1fe9ee){_0x3a0906=_0x3a0906-0x0;var _0x5a320d=_0x9d7e[_0x3a0906];return _0x5a320d;};'use strict';var _=require(_0xe9d7('0x0'));var util=require('util');var moment=require(_0xe9d7('0x1'));var BPromise=require('bluebird');var rs=require(_0xe9d7('0x2'));var fs=require('fs');var Redis=require(_0xe9d7('0x3'));var db=require('../../mysqldb')['db'];var utils=require(_0xe9d7('0x4'));var logger=require(_0xe9d7('0x5'))(_0xe9d7('0x6'));var config=require(_0xe9d7('0x7'));var jayson=require('jayson/promise');var client=jayson['client']['http']({'port':0x232a});config['redis']=_[_0xe9d7('0x8')](config[_0xe9d7('0x9')],{'host':_0xe9d7('0xa'),'port':0x18eb});var socket=require(_0xe9d7('0xb'))(new Redis(config[_0xe9d7('0x9')]));require(_0xe9d7('0xc'))[_0xe9d7('0xd')](socket);function respondWithRpcPromise(_0x2a281a,_0x5a1d1e,_0x1c8b1d){return new BPromise(function(_0x941b8e,_0x4a7c98){return client[_0xe9d7('0xe')](_0x2a281a,_0x1c8b1d)[_0xe9d7('0xf')](function(_0x3a7523){logger[_0xe9d7('0x10')](_0xe9d7('0x11'),_0x5a1d1e,_0xe9d7('0x12'));logger['debug']('VoicePrefix,\x20%s,\x20%s,\x20%s',_0x5a1d1e,_0xe9d7('0x12'),JSON['stringify'](_0x3a7523));if(_0x3a7523[_0xe9d7('0x13')]){if(_0x3a7523[_0xe9d7('0x13')]['code']===0x1f4){logger['error'](_0xe9d7('0x11'),_0x5a1d1e,_0x3a7523[_0xe9d7('0x13')][_0xe9d7('0x14')]);return _0x4a7c98(_0x3a7523[_0xe9d7('0x13')][_0xe9d7('0x14')]);}logger[_0xe9d7('0x13')](_0xe9d7('0x11'),_0x5a1d1e,_0x3a7523[_0xe9d7('0x13')]['message']);return _0x941b8e(_0x3a7523[_0xe9d7('0x13')][_0xe9d7('0x14')]);}else{logger[_0xe9d7('0x10')](_0xe9d7('0x11'),_0x5a1d1e,'request\x20sent');_0x941b8e(_0x3a7523['result'][_0xe9d7('0x14')]);}})[_0xe9d7('0x15')](function(_0x3beb0c){logger[_0xe9d7('0x13')](_0xe9d7('0x11'),_0x5a1d1e,_0x3beb0c);_0x4a7c98(_0x3beb0c);});});}
\ No newline at end of file
index ca7a505..18a9aca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2b00=['voicePrefix:','./voicePrefix.events','save','register','length'];(function(_0x1854cc,_0x274dbc){var _0x1094e2=function(_0x5e3b91){while(--_0x5e3b91){_0x1854cc['push'](_0x1854cc['shift']());}};_0x1094e2(++_0x274dbc);}(_0x2b00,0x6a));var _0x02b0=function(_0x2fc69b,_0x55537d){_0x2fc69b=_0x2fc69b-0x0;var _0x25e3c9=_0x2b00[_0x2fc69b];return _0x25e3c9;};'use strict';var VoicePrefixEvents=require(_0x02b0('0x0'));var events=[_0x02b0('0x1'),'remove','update'];function createListener(_0x415621,_0x5b195c){return function(_0x49c1ed){_0x5b195c['emit'](_0x415621,_0x49c1ed);};}function removeListener(_0x26c8a4,_0x45689f){return function(){VoicePrefixEvents['removeListener'](_0x26c8a4,_0x45689f);};}exports[_0x02b0('0x2')]=function(_0x25d842){for(var _0x4b3e37=0x0,_0x40e56f=events[_0x02b0('0x3')];_0x4b3e37<_0x40e56f;_0x4b3e37++){var _0x9931dd=events[_0x4b3e37];var _0x5df87d=createListener(_0x02b0('0x4')+_0x9931dd,_0x25d842);VoicePrefixEvents['on'](_0x9931dd,_0x5df87d);}};
\ No newline at end of file
+var _0x3c1a=['register','length','voicePrefix:','./voicePrefix.events','save','remove','update','removeListener'];(function(_0x45ad6f,_0x20c317){var _0x3a772d=function(_0x411673){while(--_0x411673){_0x45ad6f['push'](_0x45ad6f['shift']());}};_0x3a772d(++_0x20c317);}(_0x3c1a,0x1b3));var _0xa3c1=function(_0x54defc,_0x627178){_0x54defc=_0x54defc-0x0;var _0x1955d3=_0x3c1a[_0x54defc];return _0x1955d3;};'use strict';var VoicePrefixEvents=require(_0xa3c1('0x0'));var events=[_0xa3c1('0x1'),_0xa3c1('0x2'),_0xa3c1('0x3')];function createListener(_0x1cb913,_0x9faa9a){return function(_0x3f8fe6){_0x9faa9a['emit'](_0x1cb913,_0x3f8fe6);};}function removeListener(_0xe1523c,_0xf8580){return function(){VoicePrefixEvents[_0xa3c1('0x4')](_0xe1523c,_0xf8580);};}exports[_0xa3c1('0x5')]=function(_0x1c77d0){for(var _0x4d080c=0x0,_0x3811ad=events[_0xa3c1('0x6')];_0x4d080c<_0x3811ad;_0x4d080c++){var _0x3d7efc=events[_0x4d080c];var _0x111f8a=createListener(_0xa3c1('0x7')+_0x3d7efc,_0x1c77d0);VoicePrefixEvents['on'](_0x3d7efc,_0x111f8a);}};
\ No newline at end of file
index d05a7d3..0c21124 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5db8=['/:id/lists','getLists','/:id/blacklists','getBlackLists','post','/:id/clone','clone','addTeams','addAgents','addLists','put','/:id','update','delete','destroy','removeAgents','removeLists','removeBlackLists','exports','multer','util','path','express','Router','../../components/auth/service','./voiceQueue.controller','get','isAuthenticated','index','show','/:id/hoppers','getHoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_black','getHopperBlacks','/:id/teams','getTeams','/:id/users','getAgents','/:id/members','getMembers'];(function(_0x36e02d,_0xdceb4d){var _0x521d1e=function(_0x554bcb){while(--_0x554bcb){_0x36e02d['push'](_0x36e02d['shift']());}};_0x521d1e(++_0xdceb4d);}(_0x5db8,0xbb));var _0x85db=function(_0x5caf7e,_0x52e1bc){_0x5caf7e=_0x5caf7e-0x0;var _0x5c3435=_0x5db8[_0x5caf7e];return _0x5c3435;};'use strict';var multer=require(_0x85db('0x0'));var util=require(_0x85db('0x1'));var path=require(_0x85db('0x2'));var timeout=require('connect-timeout');var express=require(_0x85db('0x3'));var router=express[_0x85db('0x4')]();var auth=require(_0x85db('0x5'));var interaction=require('../../components/interaction/service');var config=require('../../config/environment');var controller=require(_0x85db('0x6'));router[_0x85db('0x7')]('/',auth[_0x85db('0x8')](),controller[_0x85db('0x9')]);router['get']('/:id',auth[_0x85db('0x8')](),controller[_0x85db('0xa')]);router[_0x85db('0x7')](_0x85db('0xb'),auth['isAuthenticated'](),controller[_0x85db('0xc')]);router['get'](_0x85db('0xd'),auth[_0x85db('0x8')](),controller[_0x85db('0xe')]);router[_0x85db('0x7')]('/:id/hopper_finals',auth['isAuthenticated'](),controller['getHopperFinals']);router[_0x85db('0x7')](_0x85db('0xf'),auth['isAuthenticated'](),controller[_0x85db('0x10')]);router['get'](_0x85db('0x11'),auth[_0x85db('0x8')](),controller[_0x85db('0x12')]);router[_0x85db('0x7')](_0x85db('0x13'),auth[_0x85db('0x8')](),controller[_0x85db('0x14')]);router[_0x85db('0x7')](_0x85db('0x15'),auth[_0x85db('0x8')](),controller[_0x85db('0x16')]);router[_0x85db('0x7')](_0x85db('0x17'),auth['isAuthenticated'](),controller[_0x85db('0x18')]);router[_0x85db('0x7')](_0x85db('0x19'),auth[_0x85db('0x8')](),controller[_0x85db('0x1a')]);router[_0x85db('0x1b')]('/',auth[_0x85db('0x8')](),controller['create']);router[_0x85db('0x1b')](_0x85db('0x1c'),auth[_0x85db('0x8')](),controller[_0x85db('0x1d')]);router[_0x85db('0x1b')](_0x85db('0x11'),auth[_0x85db('0x8')](),controller[_0x85db('0x1e')]);router[_0x85db('0x1b')](_0x85db('0x13'),auth['isAuthenticated'](),controller[_0x85db('0x1f')]);router[_0x85db('0x1b')](_0x85db('0x17'),auth[_0x85db('0x8')](),controller[_0x85db('0x20')]);router[_0x85db('0x1b')](_0x85db('0x19'),auth[_0x85db('0x8')](),controller['addBlackLists']);router[_0x85db('0x21')](_0x85db('0x22'),auth[_0x85db('0x8')](),controller[_0x85db('0x23')]);router[_0x85db('0x24')](_0x85db('0x22'),auth['isAuthenticated'](),controller[_0x85db('0x25')]);router[_0x85db('0x24')](_0x85db('0x11'),auth['isAuthenticated'](),controller['removeTeams']);router['delete'](_0x85db('0x13'),auth[_0x85db('0x8')](),controller[_0x85db('0x26')]);router['delete'](_0x85db('0x17'),auth[_0x85db('0x8')](),controller[_0x85db('0x27')]);router['delete']('/:id/blacklists',auth[_0x85db('0x8')](),controller[_0x85db('0x28')]);module[_0x85db('0x29')]=router;
\ No newline at end of file
+var _0x9a19=['getMembers','/:id/lists','getLists','/:id/blacklists','post','create','/:id/clone','clone','addTeams','addLists','addBlackLists','put','delete','destroy','removeTeams','removeAgents','removeLists','exports','multer','util','path','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceQueue.controller','get','isAuthenticated','index','/:id','/:id/hoppers','/:id/hopper_histories','getHopperHistories','/:id/hopper_finals','getHopperFinals','/:id/hopper_black','getHopperBlacks','/:id/teams','getTeams','/:id/users','getAgents','/:id/members'];(function(_0x1b943e,_0x2025ce){var _0x5d09f7=function(_0x5e8009){while(--_0x5e8009){_0x1b943e['push'](_0x1b943e['shift']());}};_0x5d09f7(++_0x2025ce);}(_0x9a19,0x114));var _0x99a1=function(_0x531d15,_0x599af5){_0x531d15=_0x531d15-0x0;var _0x271a18=_0x9a19[_0x531d15];return _0x271a18;};'use strict';var multer=require(_0x99a1('0x0'));var util=require(_0x99a1('0x1'));var path=require(_0x99a1('0x2'));var timeout=require('connect-timeout');var express=require(_0x99a1('0x3'));var router=express[_0x99a1('0x4')]();var auth=require(_0x99a1('0x5'));var interaction=require(_0x99a1('0x6'));var config=require(_0x99a1('0x7'));var controller=require(_0x99a1('0x8'));router[_0x99a1('0x9')]('/',auth[_0x99a1('0xa')](),controller[_0x99a1('0xb')]);router[_0x99a1('0x9')](_0x99a1('0xc'),auth['isAuthenticated'](),controller['show']);router['get'](_0x99a1('0xd'),auth[_0x99a1('0xa')](),controller['getHoppers']);router['get'](_0x99a1('0xe'),auth[_0x99a1('0xa')](),controller[_0x99a1('0xf')]);router[_0x99a1('0x9')](_0x99a1('0x10'),auth['isAuthenticated'](),controller[_0x99a1('0x11')]);router[_0x99a1('0x9')](_0x99a1('0x12'),auth[_0x99a1('0xa')](),controller[_0x99a1('0x13')]);router[_0x99a1('0x9')](_0x99a1('0x14'),auth[_0x99a1('0xa')](),controller[_0x99a1('0x15')]);router[_0x99a1('0x9')](_0x99a1('0x16'),auth[_0x99a1('0xa')](),controller[_0x99a1('0x17')]);router[_0x99a1('0x9')](_0x99a1('0x18'),auth['isAuthenticated'](),controller[_0x99a1('0x19')]);router[_0x99a1('0x9')](_0x99a1('0x1a'),auth[_0x99a1('0xa')](),controller[_0x99a1('0x1b')]);router[_0x99a1('0x9')](_0x99a1('0x1c'),auth['isAuthenticated'](),controller['getBlackLists']);router[_0x99a1('0x1d')]('/',auth[_0x99a1('0xa')](),controller[_0x99a1('0x1e')]);router[_0x99a1('0x1d')](_0x99a1('0x1f'),auth[_0x99a1('0xa')](),controller[_0x99a1('0x20')]);router[_0x99a1('0x1d')](_0x99a1('0x14'),auth[_0x99a1('0xa')](),controller[_0x99a1('0x21')]);router['post'](_0x99a1('0x16'),auth[_0x99a1('0xa')](),controller['addAgents']);router[_0x99a1('0x1d')]('/:id/lists',auth[_0x99a1('0xa')](),controller[_0x99a1('0x22')]);router[_0x99a1('0x1d')](_0x99a1('0x1c'),auth['isAuthenticated'](),controller[_0x99a1('0x23')]);router[_0x99a1('0x24')]('/:id',auth[_0x99a1('0xa')](),controller['update']);router[_0x99a1('0x25')](_0x99a1('0xc'),auth[_0x99a1('0xa')](),controller[_0x99a1('0x26')]);router[_0x99a1('0x25')](_0x99a1('0x14'),auth['isAuthenticated'](),controller[_0x99a1('0x27')]);router['delete']('/:id/users',auth[_0x99a1('0xa')](),controller[_0x99a1('0x28')]);router[_0x99a1('0x25')](_0x99a1('0x1a'),auth[_0x99a1('0xa')](),controller[_0x99a1('0x29')]);router[_0x99a1('0x25')]('/:id/blacklists',auth[_0x99a1('0xa')](),controller['removeBlackLists']);module[_0x99a1('0x2a')]=router;
\ No newline at end of file
index d988ca1..c637aec 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe45d=['#AMD\x20Between\x20Words\x20Silence','#AMD\x20Maximum\x20Number\x20Of\x20Words','#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)','#RecallMe\x20Timeout\x20(min:1)','DESC','ASC','Random\x20Last\x20Digit\x20(min:1,\x20max:15)','Cut\x20Digit\x20(min:1,\x20max:15)','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDispositionPauseId','mandatoryDisposition','sequelize','exports','name','ENUM','inbound','outbound','STRING','default','ringall','leastrecent','random','rrmemory','rrordered','strategy','getDataValue','type','dialMethod','booked','roundrobin','progressive','power','INTEGER','yes','all','once','TEXT','setDataValue','periodic_announce','join','split','joinempty','leavewhenempty','BOOLEAN','wrapuptime','Active/Disactive\x20Campaign','preview','predictive','Dial\x20Method.','Max\x209999\x20member\x20in\x20queue(min:1,\x20max:9999),\x200\x20means\x20unlimited.','FLOAT','UNSIGNED','Power\x20Level:\x20Calls\x20for\x20agents\x20(min:1,\x20max:10).','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','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)','#Busy\x20Retry\x20(min:1,\x20max:999)','Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','#Global\x20Max\x20Retry\x20(min:1,\x20max:999)','07:00-22:00,*,*,*','never','always','Active/Disactive\x20AMD','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20Total\x20Analysis\x20Time','#AMD\x20Min\x20Word\x20Length'];(function(_0x32f9d3,_0x5d1a3d){var _0x17aa12=function(_0x23ee6e){while(--_0x23ee6e){_0x32f9d3['push'](_0x32f9d3['shift']());}};_0x17aa12(++_0x5d1a3d);}(_0xe45d,0xed));var _0xde45=function(_0xa444d5,_0x4388de){_0xa444d5=_0xa444d5-0x0;var _0x29f74b=_0xe45d[_0xa444d5];return _0x29f74b;};'use strict';var Sequelize=require(_0xde45('0x0'));module[_0xde45('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0xde45('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x4'),_0xde45('0x5')),'allowNull':![],'defaultValue':_0xde45('0x4')},'musiconhold':{'type':Sequelize[_0xde45('0x6')],'defaultValue':_0xde45('0x7')},'announce':{'type':Sequelize[_0xde45('0x6')],'defaultValue':''},'strategy':{'type':Sequelize['ENUM']('rr',_0xde45('0x8'),_0xde45('0x9'),'fewestcalls',_0xde45('0xa'),_0xde45('0xb'),'linear','wrandom',_0xde45('0xc')),'allowNull':![],'defaultValue':'ringall','set':function(_0x2284ad){this['setDataValue'](_0xde45('0xd'),_0x2284ad?_0x2284ad:_0xde45('0xb'));},'get':function(){var _0x1e402b=this[_0xde45('0xe')](_0xde45('0xf'));var _0x56b599=this[_0xde45('0xe')](_0xde45('0x10'));var _0x450963=this['getDataValue'](_0xde45('0xd'));if(_0x1e402b===_0xde45('0x4')){return _0x450963;}if(_0x56b599===_0xde45('0x11')&&_0x450963===_0xde45('0xb')||_0x56b599===_0xde45('0x11')&&_0x450963===_0xde45('0x12')){return _0x450963;}if(_0x56b599===_0xde45('0x13')||_0x56b599==='predictive'||_0x56b599===_0xde45('0x14')){return _0x450963;}return null;}},'servicelevel':{'type':Sequelize[_0xde45('0x15')](0xb),'defaultValue':0x0},'context':{'type':Sequelize[_0xde45('0x6')],'defaultValue':null},'penaltymemberslimit':{'type':Sequelize[_0xde45('0x15')](0xb)},'timeout':{'type':Sequelize[_0xde45('0x15')](0xb),'defaultValue':0xf},'retry':{'type':Sequelize[_0xde45('0x15')](0xb),'defaultValue':0x2},'timeoutpriority':{'type':Sequelize[_0xde45('0x6')]},'weight':{'type':Sequelize[_0xde45('0x15')](0xb),'allowNull':!![],'defaultValue':0x0},'wrapuptime':{'type':Sequelize[_0xde45('0x15')](0xb),'defaultValue':0x0},'autofill':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no'),'defaultValue':'yes'},'autopause':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no',_0xde45('0x17')),'defaultValue':'no'},'autopausedelay':{'type':Sequelize['INTEGER'](0xb)},'autopausebusy':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no'),'defaultValue':'no'},'autopauseunavail':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no'},'maxlen':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'setinterfacevar':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no'),'defaultValue':'no'},'setqueueentryvar':{'type':Sequelize['ENUM'](_0xde45('0x16'),'no'),'defautValue':'no'},'setqueuevar':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no'},'eventmemberstatus':{'type':Sequelize[_0xde45('0x3')]('yes','no'),'defaultValue':'no'},'membermacro':{'type':Sequelize[_0xde45('0x6')],'allowNull':!![]},'membergosub':{'type':Sequelize[_0xde45('0x6')],'allowNull':!![]},'announce_frequency':{'type':Sequelize[_0xde45('0x15')](0xb),'defaultValue':0x0},'min_announce_frequency':{'type':Sequelize[_0xde45('0x15')](0xb),'defaultValue':0x0},'periodic_announce_frequency':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'random_periodic_announce':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no'),'defaultValue':'no'},'relative_periodic_announce':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no'),'defaultValue':_0xde45('0x16')},'announce_holdtime':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no',_0xde45('0x18')),'defaultValue':'no'},'announce_position':{'type':Sequelize['STRING'],'defaultValue':'no'},'announce_to_first_user':{'type':Sequelize['ENUM'](_0xde45('0x16'),'no')},'announce_position_limit':{'type':Sequelize[_0xde45('0x15')](0xb)},'announce_round_seconds':{'type':Sequelize['ENUM']('0','5','10','15','20','30'),'defaultValue':'0'},'monitor_format':{'type':Sequelize[_0xde45('0x6')],'defaultValue':''},'monitor_type':{'type':Sequelize[_0xde45('0x6')]},'queue_youarenext':{'type':Sequelize[_0xde45('0x6')],'defaultValue':null},'queue_thereare':{'type':Sequelize['STRING'],'defaultValue':null},'queue_callswaiting':{'type':Sequelize['STRING'],'defaultValue':null},'queue_holdtime':{'type':Sequelize[_0xde45('0x6')],'defaultValue':null},'queue_minute':{'type':Sequelize[_0xde45('0x6')],'allowNull':!![],'defaultValue':null},'queue_minutes':{'type':Sequelize[_0xde45('0x6')],'defaultValue':null},'queue_seconds':{'type':Sequelize[_0xde45('0x6')],'defaultValue':null},'queue_thankyou':{'type':Sequelize[_0xde45('0x6')],'defaultValue':null},'queue_reporthold':{'type':Sequelize['STRING']},'queue_quantity1':{'type':Sequelize['STRING']},'queue_quantity2':{'type':Sequelize[_0xde45('0x6')]},'queue_periodic_announce':{'type':Sequelize['STRING']},'queue_less_than':{'type':Sequelize[_0xde45('0x6')]},'periodic_announce':{'type':Sequelize[_0xde45('0x19')],'set':function(_0x19e7fe){this[_0xde45('0x1a')](_0xde45('0x1b'),_0x19e7fe?_0x19e7fe[_0xde45('0x1c')](','):[]);},'get':function(){return this[_0xde45('0xe')](_0xde45('0x1b'))?this[_0xde45('0xe')]('periodic_announce')[_0xde45('0x1d')](','):[];}},'joinempty':{'type':Sequelize[_0xde45('0x6')],'defaultValue':_0xde45('0x16'),'set':function(_0xe15b93){this['setDataValue'](_0xde45('0x1e'),_0xe15b93?_0xe15b93[_0xde45('0x1c')](','):[]);},'get':function(){return this[_0xde45('0xe')](_0xde45('0x1e'))?this[_0xde45('0xe')](_0xde45('0x1e'))[_0xde45('0x1d')](','):[];}},'leavewhenempty':{'type':Sequelize['STRING'],'defaultValue':'no','set':function(_0x215eeb){this[_0xde45('0x1a')]('leavewhenempty',_0x215eeb?_0x215eeb[_0xde45('0x1c')](','):[]);},'get':function(){return this['getDataValue'](_0xde45('0x1f'))?this['getDataValue'](_0xde45('0x1f'))[_0xde45('0x1d')](','):[];}},'reportholdtime':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no'),'defaultValue':'no'},'ringinuse':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no'),'defaultValue':'no'},'memberdelay':{'type':Sequelize[_0xde45('0x15')](0xb),'defaultValue':0x0},'timeoutrestart':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x16'),'no'),'defaultValue':'no'},'defaultrule':{'type':Sequelize['STRING']},'description':{'type':Sequelize[_0xde45('0x6')]},'acw':{'type':Sequelize[_0xde45('0x20')],'defaultValue':0x0,'set':function(_0x4a7764){this[_0xde45('0x1a')]('acw',_0x4a7764);if(_0x4a7764){if(this[_0xde45('0xe')](_0xde45('0x21'))<0x2){this[_0xde45('0x1a')](_0xde45('0x21'),0x2);}}}},'acwTimeout':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0xa},'dialActive':{'type':Sequelize[_0xde45('0x20')],'defaultValue':0x0,'comment':_0xde45('0x22')},'dialMethod':{'type':Sequelize[_0xde45('0x3')](_0xde45('0x23'),'progressive',_0xde45('0x14'),_0xde45('0x24'),_0xde45('0x11')),'defaultValue':_0xde45('0x13'),'comment':_0xde45('0x25')},'dialLimitChannel':{'type':Sequelize[_0xde45('0x15')](0x4)['UNSIGNED'],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':'Max\x209999\x20channels,\x200\x20means\x20unlimited.'},'dialLimitQueue':{'type':Sequelize[_0xde45('0x15')](0x4)['UNSIGNED'],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0xde45('0x26')},'dialPowerLevel':{'type':Sequelize[_0xde45('0x27')](0x2)[_0xde45('0x28')],'defaultValue':0x1,'validate':{'min':0x1,'max':0xa},'comment':_0xde45('0x29')},'dialPredictiveOptimization':{'type':Sequelize['ENUM']('agentBusyFactor',_0xde45('0x2a')),'defaultValue':'dropRate','comment':_0xde45('0x2b')},'dialPredictiveOptimizationPercentage':{'type':Sequelize[_0xde45('0x27')](0x2)[_0xde45('0x28')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x5f},'comment':'Predictive\x20Optimization\x20Percentage\x20(min:\x201,\x20max:\x2095)'},'dialPredictiveInterval':{'type':Sequelize[_0xde45('0x15')](0x3)[_0xde45('0x28')],'defaultValue':0xa,'validate':{'min':0x5,'max':0x1e},'comment':_0xde45('0x2c')},'dialOriginateCallerIdName':{'type':Sequelize[_0xde45('0x6')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0xde45('0x6')]},'dialOriginateTimeout':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0xde45('0x2d')},'dialQueueOptions':{'type':Sequelize[_0xde45('0x6')],'defaultValue':_0xde45('0x2e'),'comment':_0xde45('0x2f')},'dialQueueTimeout':{'type':Sequelize['INTEGER'](0x3)[_0xde45('0x28')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':'Queue\x20Timeout\x20Seconds\x20(min:1,\x20max:999)'},'dialQueueProject':{'type':Sequelize[_0xde45('0x6')],'comment':_0xde45('0x30')},'dialCongestionMaxRetry':{'type':Sequelize[_0xde45('0x15')](0x3)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xde45('0x31')},'dialCongestionRetryFrequency':{'type':Sequelize[_0xde45('0x15')](0x5)['UNSIGNED'],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xde45('0x32')},'dialBusyMaxRetry':{'type':Sequelize[_0xde45('0x15')](0x3)[_0xde45('0x28')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0xde45('0x33')},'dialBusyRetryFrequency':{'type':Sequelize[_0xde45('0x15')](0x5)[_0xde45('0x28')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0xde45('0x34')},'dialNoAnswerMaxRetry':{'type':Sequelize[_0xde45('0x15')](0x3)[_0xde45('0x28')],'defaultValue':0x3,'comment':_0xde45('0x35')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0xde45('0x15')](0x5)[_0xde45('0x28')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialGlobalMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0xde45('0x28')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':_0xde45('0x36')},'dialTimezone':{'type':Sequelize[_0xde45('0x6')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize[_0xde45('0x6')],'defaultValue':_0xde45('0x37')},'dialPrefix':{'type':Sequelize[_0xde45('0x6')],'defaultValue':null},'dialCheckDuplicateType':{'type':Sequelize[_0xde45('0x3')]('always',_0xde45('0x38'),'onlyIfOpen'),'defaultValue':_0xde45('0x39')},'dialAMDActive':{'type':Sequelize[_0xde45('0x20')],'defaultValue':0x0,'comment':_0xde45('0x3a')},'dialAMDInitialSilence':{'type':Sequelize['INTEGER'](0x9)[_0xde45('0x28')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0xde45('0x3b')},'dialAMDGreeting':{'type':Sequelize[_0xde45('0x15')](0x9)['UNSIGNED'],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0xde45('0x3c')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0xde45('0x15')](0x9)[_0xde45('0x28')],'defaultValue':0x320,'validate':{'min':0x0},'comment':'#AMD\x20After\x20Greeting\x20Silence'},'dialAMDTotalAnalysisTime':{'type':Sequelize[_0xde45('0x15')](0x9)[_0xde45('0x28')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0xde45('0x3d')},'dialAMDMinWordLength':{'type':Sequelize[_0xde45('0x15')](0x9)['UNSIGNED'],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0xde45('0x3e')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0xde45('0x15')](0x9)[_0xde45('0x28')],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0xde45('0x3f')},'dialAMDMaximumNumberOfWords':{'type':Sequelize['INTEGER'](0x9)[_0xde45('0x28')],'defaultValue':0x3,'validate':{'min':0x0},'comment':_0xde45('0x40')},'dialAMDSilenceThreshold':{'type':Sequelize['INTEGER'](0x5)[_0xde45('0x28')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':_0xde45('0x41')},'dialAMDMaximumWordLength':{'type':Sequelize[_0xde45('0x15')](0x9)[_0xde45('0x28')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':'#AMD\x20Maximum\x20Word\x20Length'},'dialRecallMeTimeout':{'type':Sequelize[_0xde45('0x15')](0x5)[_0xde45('0x28')],'validate':{'min':0x1},'defaultValue':0x1e,'comment':_0xde45('0x42')},'dialRecallInQueue':{'type':Sequelize[_0xde45('0x20')],'defaultValue':0x0,'comment':'Active/Disactive\x20Recall\x20In\x20Queue'},'dialOrderByScheduledAt':{'type':Sequelize['ENUM'](_0xde45('0x43'),_0xde45('0x44')),'defaultValue':_0xde45('0x43')},'dialQueueProject2':{'type':Sequelize[_0xde45('0x6')],'comment':_0xde45('0x30')},'dialAgiAfterHangupClient':{'type':Sequelize[_0xde45('0x20')],'defaultValue':![]},'dialAgiAfterHangupAgent':{'type':Sequelize[_0xde45('0x20')],'defaultValue':![]},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0xde45('0x15')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xde45('0x45')},'dialCutDigit':{'type':Sequelize[_0xde45('0x15')](0x3)[_0xde45('0x28')],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0xde45('0x46')},'mandatoryDispositionPauseId':{'type':Sequelize[_0xde45('0x15')],'allowNull':!![],'comment':_0xde45('0x47')},'mandatoryDisposition':{'type':Sequelize[_0xde45('0x20')],'defaultValue':![],'comment':_0xde45('0x48'),'set':function(_0x3a9e84){if(!_0x3a9e84)this[_0xde45('0x1a')](_0xde45('0x49'),null);this[_0xde45('0x1a')](_0xde45('0x4a'),_0x3a9e84);}}};
\ No newline at end of file
+var _0xbf65=['random','rrmemory','wrandom','setDataValue','strategy','getDataValue','type','dialMethod','booked','roundrobin','progressive','predictive','power','INTEGER','yes','all','once','TEXT','periodic_announce','join','split','joinempty','leavewhenempty','BOOLEAN','wrapuptime','preview','UNSIGNED','Max\x209999\x20channels,\x200\x20means\x20unlimited.','Max\x209999\x20member\x20in\x20queue(min:1,\x20max:9999),\x200\x20means\x20unlimited.','FLOAT','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)','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)','#Busy\x20Retry\x20(min:1,\x20max:999)','#NoAnswer\x20Retry\x20(min:1,\x20max:999)','NoAnswer\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)','always','never','onlyIfOpen','Active/Disactive\x20AMD','#AMD\x20Initial\x20Silence','#AMD\x20Greeting','#AMD\x20Total\x20Analysis\x20Time','#AMD\x20Min\x20Word\x20Length','#AMD\x20Between\x20Words\x20Silence','#AMD\x20Maximum\x20Word\x20Length','#RecallMe\x20Timeout\x20(min:1)','ASC','Cut\x20Digit\x20(min:1,\x20max:15)','Status\x20to\x20put\x20when\x20mandatory\x20disposition\x20is\x20enabled','Enabled/disables\x20mandatory\x20dispo\x20on\x20a\x20queue','mandatoryDispositionPauseId','mandatoryDisposition','sequelize','exports','name','inbound','outbound','STRING','default','ENUM','ringall','leastrecent','fewestcalls'];(function(_0x1ac9e2,_0x37e21b){var _0x481579=function(_0x540749){while(--_0x540749){_0x1ac9e2['push'](_0x1ac9e2['shift']());}};_0x481579(++_0x37e21b);}(_0xbf65,0x158));var _0x5bf6=function(_0x4a9e4a,_0x585df1){_0x4a9e4a=_0x4a9e4a-0x0;var _0xaa903e=_0xbf65[_0x4a9e4a];return _0xaa903e;};'use strict';var Sequelize=require(_0x5bf6('0x0'));module[_0x5bf6('0x1')]={'name':{'type':Sequelize['STRING'],'allowNull':![],'unique':_0x5bf6('0x2'),'validate':{'notEmpty':!![],'is':/^[A-Za-z0-9\.\_]+$/i}},'type':{'type':Sequelize['ENUM'](_0x5bf6('0x3'),_0x5bf6('0x4')),'allowNull':![],'defaultValue':'inbound'},'musiconhold':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':_0x5bf6('0x6')},'announce':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':''},'strategy':{'type':Sequelize[_0x5bf6('0x7')]('rr',_0x5bf6('0x8'),_0x5bf6('0x9'),_0x5bf6('0xa'),_0x5bf6('0xb'),_0x5bf6('0xc'),'linear',_0x5bf6('0xd'),'rrordered'),'allowNull':![],'defaultValue':_0x5bf6('0x8'),'set':function(_0x47083e){this[_0x5bf6('0xe')](_0x5bf6('0xf'),_0x47083e?_0x47083e:_0x5bf6('0xc'));},'get':function(){var _0x1bb318=this[_0x5bf6('0x10')](_0x5bf6('0x11'));var _0x1e41ee=this['getDataValue'](_0x5bf6('0x12'));var _0x5a9fc3=this[_0x5bf6('0x10')](_0x5bf6('0xf'));if(_0x1bb318===_0x5bf6('0x3')){return _0x5a9fc3;}if(_0x1e41ee===_0x5bf6('0x13')&&_0x5a9fc3===_0x5bf6('0xc')||_0x1e41ee==='booked'&&_0x5a9fc3===_0x5bf6('0x14')){return _0x5a9fc3;}if(_0x1e41ee===_0x5bf6('0x15')||_0x1e41ee===_0x5bf6('0x16')||_0x1e41ee===_0x5bf6('0x17')){return _0x5a9fc3;}return null;}},'servicelevel':{'type':Sequelize[_0x5bf6('0x18')](0xb),'defaultValue':0x0},'context':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':null},'penaltymemberslimit':{'type':Sequelize[_0x5bf6('0x18')](0xb)},'timeout':{'type':Sequelize[_0x5bf6('0x18')](0xb),'defaultValue':0xf},'retry':{'type':Sequelize[_0x5bf6('0x18')](0xb),'defaultValue':0x2},'timeoutpriority':{'type':Sequelize[_0x5bf6('0x5')]},'weight':{'type':Sequelize[_0x5bf6('0x18')](0xb),'allowNull':!![],'defaultValue':0x0},'wrapuptime':{'type':Sequelize[_0x5bf6('0x18')](0xb),'defaultValue':0x0},'autofill':{'type':Sequelize[_0x5bf6('0x7')]('yes','no'),'defaultValue':'yes'},'autopause':{'type':Sequelize['ENUM'](_0x5bf6('0x19'),'no',_0x5bf6('0x1a')),'defaultValue':'no'},'autopausedelay':{'type':Sequelize[_0x5bf6('0x18')](0xb)},'autopausebusy':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no'),'defaultValue':'no'},'autopauseunavail':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no'),'defaultValue':'no'},'maxlen':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0x0},'setinterfacevar':{'type':Sequelize['ENUM'](_0x5bf6('0x19'),'no'),'defaultValue':'no'},'setqueueentryvar':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no'),'defautValue':'no'},'setqueuevar':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no'),'defaultValue':'no'},'eventmemberstatus':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no'),'defaultValue':'no'},'membermacro':{'type':Sequelize['STRING'],'allowNull':!![]},'membergosub':{'type':Sequelize[_0x5bf6('0x5')],'allowNull':!![]},'announce_frequency':{'type':Sequelize[_0x5bf6('0x18')](0xb),'defaultValue':0x0},'min_announce_frequency':{'type':Sequelize[_0x5bf6('0x18')](0xb),'defaultValue':0x0},'periodic_announce_frequency':{'type':Sequelize[_0x5bf6('0x18')](0xb),'defaultValue':0x0},'random_periodic_announce':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no'),'defaultValue':'no'},'relative_periodic_announce':{'type':Sequelize['ENUM'](_0x5bf6('0x19'),'no'),'defaultValue':_0x5bf6('0x19')},'announce_holdtime':{'type':Sequelize[_0x5bf6('0x7')]('yes','no',_0x5bf6('0x1b')),'defaultValue':'no'},'announce_position':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':'no'},'announce_to_first_user':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no')},'announce_position_limit':{'type':Sequelize[_0x5bf6('0x18')](0xb)},'announce_round_seconds':{'type':Sequelize[_0x5bf6('0x7')]('0','5','10','15','20','30'),'defaultValue':'0'},'monitor_format':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':''},'monitor_type':{'type':Sequelize[_0x5bf6('0x5')]},'queue_youarenext':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':null},'queue_thereare':{'type':Sequelize['STRING'],'defaultValue':null},'queue_callswaiting':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':null},'queue_holdtime':{'type':Sequelize['STRING'],'defaultValue':null},'queue_minute':{'type':Sequelize[_0x5bf6('0x5')],'allowNull':!![],'defaultValue':null},'queue_minutes':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':null},'queue_seconds':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':null},'queue_thankyou':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':null},'queue_reporthold':{'type':Sequelize[_0x5bf6('0x5')]},'queue_quantity1':{'type':Sequelize[_0x5bf6('0x5')]},'queue_quantity2':{'type':Sequelize[_0x5bf6('0x5')]},'queue_periodic_announce':{'type':Sequelize['STRING']},'queue_less_than':{'type':Sequelize[_0x5bf6('0x5')]},'periodic_announce':{'type':Sequelize[_0x5bf6('0x1c')],'set':function(_0x13ab7a){this[_0x5bf6('0xe')](_0x5bf6('0x1d'),_0x13ab7a?_0x13ab7a[_0x5bf6('0x1e')](','):[]);},'get':function(){return this[_0x5bf6('0x10')](_0x5bf6('0x1d'))?this['getDataValue'](_0x5bf6('0x1d'))[_0x5bf6('0x1f')](','):[];}},'joinempty':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':_0x5bf6('0x19'),'set':function(_0xf750b9){this['setDataValue'](_0x5bf6('0x20'),_0xf750b9?_0xf750b9[_0x5bf6('0x1e')](','):[]);},'get':function(){return this[_0x5bf6('0x10')]('joinempty')?this['getDataValue'](_0x5bf6('0x20'))[_0x5bf6('0x1f')](','):[];}},'leavewhenempty':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':'no','set':function(_0x4ed328){this['setDataValue']('leavewhenempty',_0x4ed328?_0x4ed328['join'](','):[]);},'get':function(){return this['getDataValue'](_0x5bf6('0x21'))?this['getDataValue'](_0x5bf6('0x21'))[_0x5bf6('0x1f')](','):[];}},'reportholdtime':{'type':Sequelize['ENUM']('yes','no'),'defaultValue':'no'},'ringinuse':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no'),'defaultValue':'no'},'memberdelay':{'type':Sequelize[_0x5bf6('0x18')](0xb),'defaultValue':0x0},'timeoutrestart':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x19'),'no'),'defaultValue':'no'},'defaultrule':{'type':Sequelize[_0x5bf6('0x5')]},'description':{'type':Sequelize[_0x5bf6('0x5')]},'acw':{'type':Sequelize[_0x5bf6('0x22')],'defaultValue':0x0,'set':function(_0x1aac73){this[_0x5bf6('0xe')]('acw',_0x1aac73);if(_0x1aac73){if(this[_0x5bf6('0x10')](_0x5bf6('0x23'))<0x2){this[_0x5bf6('0xe')](_0x5bf6('0x23'),0x2);}}}},'acwTimeout':{'type':Sequelize['INTEGER'](0xb),'defaultValue':0xa},'dialActive':{'type':Sequelize['BOOLEAN'],'defaultValue':0x0,'comment':'Active/Disactive\x20Campaign'},'dialMethod':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x24'),_0x5bf6('0x15'),_0x5bf6('0x17'),_0x5bf6('0x16'),_0x5bf6('0x13')),'defaultValue':_0x5bf6('0x15'),'comment':'Dial\x20Method.'},'dialLimitChannel':{'type':Sequelize[_0x5bf6('0x18')](0x4)[_0x5bf6('0x25')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0x5bf6('0x26')},'dialLimitQueue':{'type':Sequelize[_0x5bf6('0x18')](0x4)[_0x5bf6('0x25')],'defaultValue':0x0,'validate':{'min':0x0,'max':0x270f},'comment':_0x5bf6('0x27')},'dialPowerLevel':{'type':Sequelize[_0x5bf6('0x28')](0x2)[_0x5bf6('0x25')],'defaultValue':0x1,'validate':{'min':0x1,'max':0xa},'comment':'Power\x20Level:\x20Calls\x20for\x20agents\x20(min:1,\x20max:10).'},'dialPredictiveOptimization':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x29'),_0x5bf6('0x2a')),'defaultValue':_0x5bf6('0x2a'),'comment':_0x5bf6('0x2b')},'dialPredictiveOptimizationPercentage':{'type':Sequelize[_0x5bf6('0x28')](0x2)['UNSIGNED'],'defaultValue':0x3,'validate':{'min':0x1,'max':0x5f},'comment':_0x5bf6('0x2c')},'dialPredictiveInterval':{'type':Sequelize['INTEGER'](0x3)['UNSIGNED'],'defaultValue':0xa,'validate':{'min':0x5,'max':0x1e},'comment':_0x5bf6('0x2d')},'dialOriginateCallerIdName':{'type':Sequelize[_0x5bf6('0x5')]},'dialOriginateCallerIdNumber':{'type':Sequelize[_0x5bf6('0x5')]},'dialOriginateTimeout':{'type':Sequelize[_0x5bf6('0x18')](0x3)[_0x5bf6('0x25')],'defaultValue':0x1e,'validate':{'min':0x1,'max':0x3e7},'comment':_0x5bf6('0x2e')},'dialQueueOptions':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':'tTxX','comment':_0x5bf6('0x2f')},'dialQueueTimeout':{'type':Sequelize[_0x5bf6('0x18')](0x3)[_0x5bf6('0x25')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x5bf6('0x30')},'dialQueueProject':{'type':Sequelize[_0x5bf6('0x5')],'comment':_0x5bf6('0x31')},'dialCongestionMaxRetry':{'type':Sequelize[_0x5bf6('0x18')](0x3)[_0x5bf6('0x25')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x5bf6('0x32')},'dialCongestionRetryFrequency':{'type':Sequelize['INTEGER'](0x5)[_0x5bf6('0x25')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'Congestion\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialBusyMaxRetry':{'type':Sequelize[_0x5bf6('0x18')](0x3)[_0x5bf6('0x25')],'defaultValue':0x3,'validate':{'min':0x1,'max':0x3e7},'comment':_0x5bf6('0x33')},'dialBusyRetryFrequency':{'type':Sequelize[_0x5bf6('0x18')](0x5)[_0x5bf6('0x25')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':'Busy\x20Retry\x20Frequency\x20Minutes\x20(min:1,\x20max:99999)'},'dialNoAnswerMaxRetry':{'type':Sequelize[_0x5bf6('0x18')](0x3)[_0x5bf6('0x25')],'defaultValue':0x3,'comment':_0x5bf6('0x34')},'dialNoAnswerRetryFrequency':{'type':Sequelize[_0x5bf6('0x18')](0x5)[_0x5bf6('0x25')],'validate':{'min':0x1,'max':0x1869f},'defaultValue':0x96,'comment':_0x5bf6('0x35')},'dialGlobalMaxRetry':{'type':Sequelize['INTEGER'](0x3)[_0x5bf6('0x25')],'validate':{'min':0x1,'max':0x3e7},'defaultValue':0x4,'comment':'#Global\x20Max\x20Retry\x20(min:1,\x20max:999)'},'dialTimezone':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':null},'dialGlobalInterval':{'type':Sequelize['STRING'],'defaultValue':'07:00-22:00,*,*,*'},'dialPrefix':{'type':Sequelize[_0x5bf6('0x5')],'defaultValue':null},'dialCheckDuplicateType':{'type':Sequelize[_0x5bf6('0x7')](_0x5bf6('0x36'),_0x5bf6('0x37'),_0x5bf6('0x38')),'defaultValue':_0x5bf6('0x36')},'dialAMDActive':{'type':Sequelize[_0x5bf6('0x22')],'defaultValue':0x0,'comment':_0x5bf6('0x39')},'dialAMDInitialSilence':{'type':Sequelize[_0x5bf6('0x18')](0x9)[_0x5bf6('0x25')],'defaultValue':0x9c4,'validate':{'min':0x0},'comment':_0x5bf6('0x3a')},'dialAMDGreeting':{'type':Sequelize[_0x5bf6('0x18')](0x9)[_0x5bf6('0x25')],'defaultValue':0x5dc,'validate':{'min':0x0},'comment':_0x5bf6('0x3b')},'dialAMDAfterGreetingSilence':{'type':Sequelize[_0x5bf6('0x18')](0x9)[_0x5bf6('0x25')],'defaultValue':0x320,'validate':{'min':0x0},'comment':'#AMD\x20After\x20Greeting\x20Silence'},'dialAMDTotalAnalysisTime':{'type':Sequelize['INTEGER'](0x9)['UNSIGNED'],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x5bf6('0x3c')},'dialAMDMinWordLength':{'type':Sequelize[_0x5bf6('0x18')](0x9)['UNSIGNED'],'defaultValue':0x64,'validate':{'min':0x0},'comment':_0x5bf6('0x3d')},'dialAMDBetweenWordsSilence':{'type':Sequelize[_0x5bf6('0x18')](0x9)[_0x5bf6('0x25')],'defaultValue':0x32,'validate':{'min':0x0},'comment':_0x5bf6('0x3e')},'dialAMDMaximumNumberOfWords':{'type':Sequelize[_0x5bf6('0x18')](0x9)[_0x5bf6('0x25')],'defaultValue':0x3,'validate':{'min':0x0},'comment':'#AMD\x20Maximum\x20Number\x20Of\x20Words'},'dialAMDSilenceThreshold':{'type':Sequelize['INTEGER'](0x5)[_0x5bf6('0x25')],'validate':{'min':0x0,'max':0x7fff},'defaultValue':0x100,'comment':'#AMD\x20Silence\x20Threshold\x20(min:0,\x20max:32767)'},'dialAMDMaximumWordLength':{'type':Sequelize['INTEGER'](0x9)[_0x5bf6('0x25')],'defaultValue':0x1388,'validate':{'min':0x0},'comment':_0x5bf6('0x3f')},'dialRecallMeTimeout':{'type':Sequelize[_0x5bf6('0x18')](0x5)[_0x5bf6('0x25')],'validate':{'min':0x1},'defaultValue':0x1e,'comment':_0x5bf6('0x40')},'dialRecallInQueue':{'type':Sequelize[_0x5bf6('0x22')],'defaultValue':0x0,'comment':'Active/Disactive\x20Recall\x20In\x20Queue'},'dialOrderByScheduledAt':{'type':Sequelize['ENUM']('DESC',_0x5bf6('0x41')),'defaultValue':'DESC'},'dialQueueProject2':{'type':Sequelize[_0x5bf6('0x5')],'comment':_0x5bf6('0x31')},'dialAgiAfterHangupClient':{'type':Sequelize[_0x5bf6('0x22')],'defaultValue':![]},'dialAgiAfterHangupAgent':{'type':Sequelize[_0x5bf6('0x22')],'defaultValue':![]},'dialRandomLastDigitCallerIdNumber':{'type':Sequelize[_0x5bf6('0x18')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':'Random\x20Last\x20Digit\x20(min:1,\x20max:15)'},'dialCutDigit':{'type':Sequelize[_0x5bf6('0x18')](0x3)['UNSIGNED'],'validate':{'min':0x0,'max':0xf},'defaultValue':0x0,'comment':_0x5bf6('0x42')},'mandatoryDispositionPauseId':{'type':Sequelize['INTEGER'],'allowNull':!![],'comment':_0x5bf6('0x43')},'mandatoryDisposition':{'type':Sequelize[_0x5bf6('0x22')],'defaultValue':![],'comment':_0x5bf6('0x44'),'set':function(_0x174e83){if(!_0x174e83)this[_0x5bf6('0xe')](_0x5bf6('0x45'),null);this[_0x5bf6('0xe')](_0x5bf6('0x46'),_0x174e83);}}};
\ No newline at end of file
index f9dac96..61dfd37 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x86e4=['Unable\x20to\x20retrieve\x20the\x20current\x20user','role','UserProfileSection','userProfileId','autoAssociation','UserProfileResource','error','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','omit','createdAt','updatedAt','VoiceQueues','getHoppers','findOne','order','VoiceQueueId','CmHopper','findAll','getHopperHistories','CmHopperHistory','getHopperFinals','CmHopperFinal','getHopperBlacks','CmHopperBlack','getTeams','Team','addTeams','ids','User','Agents','union','addAgents','penalty','removeTeams','emit','userVoiceQueue:save','loginInPause','interface','upsert','isNil','format','SIP/%s','all','removeAgents','userVoiceQueue:remove','realtime','UserVoiceQueueRt','getAgents','getMembers','CmList','getLists','addLists','dialCheckDuplicateType','always','insert','into','cm_hopper','fromQuery','phone','scheduledAt','select','ContactId','CmListId','ListId','toString','NOW()','from','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20NOT\x20IN\x20(?)','COALESCE(calleridnum,\x27\x27)','VoiceQueueId\x20=\x20?','COALESCE(phone,\x27\x27)','onlyIfOpen','phone\x20IS\x20NOT\x20NULL','cm_contacts','sequelize','removeLists','getBlackLists','addBlackLists','spread','cm_hopper_black','push','removeBlackLists','eml-format','rimraf','zip-dir','fast-json-patch','moment','mustache','util','path','sox','to-csv','lodash','squel','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../config/license/hardware','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','redis','defaults','localhost','socket.io-emitter','./voiceQueue.socket','register','sendStatus','status','count','offset','limit','set','Content-Range','json','apply','reject','save','update','then','destroy','inbound','QueueCampaigns','outbound','ignore','map','value','includes','type','name','stack','send','rawAttributes','model','keys','filters','intersection','query','attributes','fields','length','hasOwnProperty','nolimit','sort','pick','filter','where','key','field','merge','options','includeAll','include','VoiceQueue','rows','catch','params','find','create','body','user','get'];(function(_0x52b62b,_0x1100cd){var _0x3d14d0=function(_0x1b5ef7){while(--_0x1b5ef7){_0x52b62b['push'](_0x52b62b['shift']());}};_0x3d14d0(++_0x1100cd);}(_0x86e4,0x1a4));var _0x486e=function(_0x5713b5,_0x423f83){_0x5713b5=_0x5713b5-0x0;var _0x2f795d=_0x86e4[_0x5713b5];return _0x2f795d;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0x486e('0x0'));var rimraf=require(_0x486e('0x1'));var zipdir=require(_0x486e('0x2'));var jsonpatch=require(_0x486e('0x3'));var rp=require('request-promise');var moment=require(_0x486e('0x4'));var BPromise=require('bluebird');var Mustache=require(_0x486e('0x5'));var util=require(_0x486e('0x6'));var path=require(_0x486e('0x7'));var sox=require(_0x486e('0x8'));var csv=require(_0x486e('0x9'));var ejs=require('ejs');var fs=require('fs');var _=require(_0x486e('0xa'));var squel=require(_0x486e('0xb'));var crypto=require(_0x486e('0xc'));var jsforce=require('jsforce');var deskjs=require(_0x486e('0xd'));var toCsv=require(_0x486e('0x9'));var querystring=require(_0x486e('0xe'));var Papa=require(_0x486e('0xf'));var authService=require(_0x486e('0x10'));var hardwareService=require(_0x486e('0x11'));var Redis=require(_0x486e('0x12'));var qs=require(_0x486e('0x13'));var logger=require('../../config/logger')(_0x486e('0x14'));var utils=require(_0x486e('0x15'));var config=require(_0x486e('0x16'));var db=require('../../mysqldb')['db'];config[_0x486e('0x17')]=_[_0x486e('0x18')](config[_0x486e('0x17')],{'host':_0x486e('0x19'),'port':0x18eb});var socket=require(_0x486e('0x1a'))(new Redis(config[_0x486e('0x17')]));require(_0x486e('0x1b'))[_0x486e('0x1c')](socket);function respondWithStatusCode(_0xc4420f,_0x3a7883){_0x3a7883=_0x3a7883||0xcc;return function(_0x3199e5){if(_0x3199e5){return _0xc4420f[_0x486e('0x1d')](_0x3a7883);}return _0xc4420f[_0x486e('0x1e')](_0x3a7883)['end']();};}function respondWithResult(_0x270ae8,_0x309b51){_0x309b51=_0x309b51||0xc8;return function(_0x3ec2fa){if(_0x3ec2fa){return _0x270ae8[_0x486e('0x1e')](_0x309b51)['json'](_0x3ec2fa);}};}function respondWithFilteredResult(_0x26b31b,_0x162283){return function(_0x21c45b){if(_0x21c45b){var _0x321db4=_0x21c45b[_0x486e('0x1f')],_0x4b3d09=_0x162283[_0x486e('0x20')],_0x56654d=_0x162283[_0x486e('0x20')]+_0x162283[_0x486e('0x21')],_0x5ac83d;if(_0x56654d>=_0x321db4){_0x56654d=_0x321db4;_0x5ac83d=0xc8;}else{_0x5ac83d=0xce;}_0x26b31b[_0x486e('0x1e')](_0x5ac83d);return _0x26b31b[_0x486e('0x22')](_0x486e('0x23'),_0x4b3d09+'-'+_0x56654d+'/'+_0x321db4)[_0x486e('0x24')](_0x21c45b);}return null;};}function patchUpdates(_0x3db56f){return function(_0x424ac5){try{jsonpatch[_0x486e('0x25')](_0x424ac5,_0x3db56f,!![]);}catch(_0x326654){return BPromise[_0x486e('0x26')](_0x326654);}return _0x424ac5[_0x486e('0x27')]();};}function saveUpdates(_0x28acd9,_0x2b6a13){return function(_0x44fa05){if(_0x44fa05){return _0x44fa05[_0x486e('0x28')](_0x28acd9)[_0x486e('0x29')](function(_0x5eae7e){return _0x5eae7e;});}return null;};}function removeEntity(_0x35f909,_0x430cd7){return function(_0x105f51){if(_0x105f51){return _0x105f51[_0x486e('0x2a')]()[_0x486e('0x29')](function(){var _0x5a5da9=_0x105f51['get']({'plain':!![]});var _0x44c326=[{'name':'VoiceQueues','value':_0x486e('0x2b'),'ignore':![]},{'name':_0x486e('0x2c'),'value':_0x486e('0x2d'),'ignore':![]}];var _0x86bd35=_(_0x44c326)['filter'](_0x486e('0x2e'))[_0x486e('0x2f')](_0x486e('0x30'))[_0x486e('0x30')]();if(_[_0x486e('0x31')](_0x86bd35,_0x5a5da9[_0x486e('0x32')])){return;}var _0x559c3b=_['find'](_0x44c326,[_0x486e('0x30'),_0x5a5da9[_0x486e('0x32')]])[_0x486e('0x33')];return db['UserProfileResource']['destroy']({'where':{'type':_0x559c3b,'resourceId':_0x5a5da9['id']}})[_0x486e('0x29')](function(){return _0x105f51;});})[_0x486e('0x29')](function(){_0x35f909[_0x486e('0x1e')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2cb809,_0x2a73cf){return function(_0x1c89dd){if(!_0x1c89dd){_0x2cb809[_0x486e('0x1d')](0x194);}return _0x1c89dd;};}function handleError(_0x5b3fa5,_0x4f92c6){_0x4f92c6=_0x4f92c6||0x1f4;return function(_0x366ed0){logger['error'](_0x366ed0[_0x486e('0x34')]);if(_0x366ed0[_0x486e('0x33')]){delete _0x366ed0[_0x486e('0x33')];}_0x5b3fa5[_0x486e('0x1e')](_0x4f92c6)[_0x486e('0x35')](_0x366ed0);};}exports['index']=function(_0x286db7,_0x3b9931){var _0x57e4a2={},_0x339bc0={},_0x6a6a25={'count':0x0,'rows':[]};var _0x740753=db['VoiceQueue'][_0x486e('0x36')];_0x339bc0[_0x486e('0x37')]=_[_0x486e('0x38')](_0x740753);_0x339bc0['query']=_[_0x486e('0x38')](_0x286db7['query']);_0x339bc0[_0x486e('0x39')]=_[_0x486e('0x3a')](_0x339bc0['model'],_0x339bc0[_0x486e('0x3b')]);_0x57e4a2[_0x486e('0x3c')]=_['intersection'](_0x339bc0['model'],qs['fields'](_0x286db7[_0x486e('0x3b')][_0x486e('0x3d')]));_0x57e4a2[_0x486e('0x3c')]=_0x57e4a2['attributes'][_0x486e('0x3e')]?_0x57e4a2['attributes']:_0x339bc0['model'];if(!_0x286db7['query'][_0x486e('0x3f')](_0x486e('0x40'))){_0x57e4a2[_0x486e('0x21')]=qs[_0x486e('0x21')](_0x286db7[_0x486e('0x3b')][_0x486e('0x21')]);_0x57e4a2[_0x486e('0x20')]=qs[_0x486e('0x20')](_0x286db7[_0x486e('0x3b')]['offset']);}_0x57e4a2['order']=qs[_0x486e('0x41')](_0x286db7[_0x486e('0x3b')][_0x486e('0x41')]);_0x57e4a2['where']=qs['filters'](_[_0x486e('0x42')](_0x286db7[_0x486e('0x3b')],_0x339bc0['filters']));if(_0x286db7[_0x486e('0x3b')][_0x486e('0x43')]){_0x57e4a2['where']=_['merge'](_0x57e4a2[_0x486e('0x44')],{'$or':_[_0x486e('0x2f')](_0x740753,function(_0x23a2d6){if(_0x23a2d6[_0x486e('0x32')][_0x486e('0x45')]!=='VIRTUAL'){var _0x2db35c={};_0x2db35c[_0x23a2d6[_0x486e('0x46')]]={'$like':'%'+_0x286db7['query']['filter']+'%'};return _0x2db35c;}})});}_0x57e4a2=_[_0x486e('0x47')]({},_0x57e4a2,_0x286db7[_0x486e('0x48')]);var _0x52334b={'where':_0x57e4a2['where']};return db['VoiceQueue'][_0x486e('0x1f')](_0x52334b)[_0x486e('0x29')](function(_0x1ba5c1){_0x6a6a25[_0x486e('0x1f')]=_0x1ba5c1;if(_0x286db7[_0x486e('0x3b')][_0x486e('0x49')]){_0x57e4a2[_0x486e('0x4a')]=[{'all':!![]}];}return db[_0x486e('0x4b')]['findAll'](_0x57e4a2);})[_0x486e('0x29')](function(_0x568ed5){_0x6a6a25[_0x486e('0x4c')]=_0x568ed5;return _0x6a6a25;})[_0x486e('0x29')](respondWithFilteredResult(_0x3b9931,_0x57e4a2))[_0x486e('0x4d')](handleError(_0x3b9931,null));};exports['show']=function(_0x3b2bee,_0x43ba0a){var _0x5b9ca7={'raw':![],'where':{'id':_0x3b2bee[_0x486e('0x4e')]['id']}},_0x37a213={};_0x37a213[_0x486e('0x37')]=_[_0x486e('0x38')](db['VoiceQueue']['rawAttributes']);_0x37a213[_0x486e('0x3b')]=_[_0x486e('0x38')](_0x3b2bee[_0x486e('0x3b')]);_0x37a213[_0x486e('0x39')]=_[_0x486e('0x3a')](_0x37a213['model'],_0x37a213[_0x486e('0x3b')]);_0x5b9ca7[_0x486e('0x3c')]=_[_0x486e('0x3a')](_0x37a213[_0x486e('0x37')],qs[_0x486e('0x3d')](_0x3b2bee[_0x486e('0x3b')]['fields']));_0x5b9ca7[_0x486e('0x3c')]=_0x5b9ca7[_0x486e('0x3c')][_0x486e('0x3e')]?_0x5b9ca7[_0x486e('0x3c')]:_0x37a213[_0x486e('0x37')];if(_0x3b2bee[_0x486e('0x3b')][_0x486e('0x49')]){_0x5b9ca7[_0x486e('0x4a')]=[{'all':!![]}];}_0x5b9ca7=_[_0x486e('0x47')]({},_0x5b9ca7,_0x3b2bee[_0x486e('0x48')]);return db[_0x486e('0x4b')][_0x486e('0x4f')](_0x5b9ca7)['then'](handleEntityNotFound(_0x43ba0a,null))[_0x486e('0x29')](respondWithResult(_0x43ba0a,null))[_0x486e('0x4d')](handleError(_0x43ba0a,null));};exports[_0x486e('0x50')]=function(_0x30bcc7,_0x2f56b9){return db[_0x486e('0x4b')][_0x486e('0x50')](_0x30bcc7[_0x486e('0x51')],{})['then'](function(_0x2caf32){var _0x2d481c=_0x30bcc7[_0x486e('0x52')][_0x486e('0x53')]({'plain':!![]});if(!_0x2d481c)throw new Error(_0x486e('0x54'));if(_0x2d481c[_0x486e('0x55')]===_0x486e('0x52')){var _0x5ee453=_0x2caf32[_0x486e('0x53')]({'plain':!![]});var _0x18c26e=[{'name':'VoiceQueues','value':'inbound'},{'name':_0x486e('0x2c'),'value':'outbound'}];var _0x29ba06=_[_0x486e('0x4f')](_0x18c26e,[_0x486e('0x30'),_0x5ee453[_0x486e('0x32')]])['name'];return db[_0x486e('0x56')]['find']({'where':{'name':_0x29ba06,'userProfileId':_0x2d481c[_0x486e('0x57')]},'raw':!![]})[_0x486e('0x29')](function(_0x247077){if(_0x247077&&_0x247077[_0x486e('0x58')]===0x0){return db[_0x486e('0x59')]['create']({'name':_0x5ee453[_0x486e('0x33')],'resourceId':_0x5ee453['id'],'type':_0x247077[_0x486e('0x33')],'sectionId':_0x247077['id']},{})[_0x486e('0x29')](function(){return _0x2caf32;});}else{return _0x2caf32;}})[_0x486e('0x4d')](function(_0x5050e7){logger[_0x486e('0x5a')](_0x486e('0x5b'),_0x5050e7);throw _0x5050e7;});}return _0x2caf32;})[_0x486e('0x29')](respondWithResult(_0x2f56b9,0xc9))['catch'](handleError(_0x2f56b9,null));};exports['clone']=function(_0x4c0548,_0xcaf3aa){var _0x10ce67={'raw':![],'where':{'id':_0x4c0548[_0x486e('0x4e')]['id']}},_0x5394a5={};_0x5394a5['model']=_[_0x486e('0x38')](db[_0x486e('0x4b')][_0x486e('0x36')]);_0x10ce67['attributes']=_[_0x486e('0x3a')](_0x5394a5['model'],qs['fields'](_0x4c0548['query'][_0x486e('0x3d')]));_0x10ce67[_0x486e('0x3c')]=_0x10ce67[_0x486e('0x3c')][_0x486e('0x3e')]?_0x10ce67['attributes']:_0x5394a5[_0x486e('0x37')];if(_0x4c0548[_0x486e('0x3b')]['includeAll']){_0x10ce67[_0x486e('0x4a')]=[{'all':!![]}];}_0x10ce67=_[_0x486e('0x47')]({},_0x10ce67,_0x4c0548[_0x486e('0x48')]);return db[_0x486e('0x4b')][_0x486e('0x4f')](_0x10ce67)[_0x486e('0x29')](handleEntityNotFound(_0xcaf3aa,null))['then'](function(_0x44e70c){if(_0x44e70c){var _0x91bea0=_0x44e70c[_0x486e('0x53')]({'plain':!![]});_0x91bea0=qs[_0x486e('0x5c')](_0x91bea0,['id',_0x486e('0x5d'),_0x486e('0x5e')]);_0x4c0548['body']=_['omit'](_0x4c0548['body'],['id',_0x486e('0x5d'),'updatedAt']);return db['VoiceQueue'][_0x486e('0x50')](_[_0x486e('0x47')](_0x91bea0,_0x4c0548[_0x486e('0x51')]),{'include':_0x4c0548[_0x486e('0x3b')][_0x486e('0x49')]?[{'all':!![]}]:undefined})[_0x486e('0x29')](function(_0x60983e){var _0x47918f=_0x4c0548[_0x486e('0x52')][_0x486e('0x53')]({'plain':!![]});if(!_0x47918f)throw new Error(_0x486e('0x54'));if(_0x47918f[_0x486e('0x55')]===_0x486e('0x52')){var _0x596f0c=_0x60983e[_0x486e('0x53')]({'plain':!![]});var _0x27d16d=[{'name':_0x486e('0x5f'),'value':_0x486e('0x2b')},{'name':'QueueCampaigns','value':_0x486e('0x2d')}];var _0x88f7be=_['find'](_0x27d16d,[_0x486e('0x30'),_0x596f0c[_0x486e('0x32')]])[_0x486e('0x33')];return db[_0x486e('0x56')][_0x486e('0x4f')]({'where':{'name':_0x88f7be,'userProfileId':_0x47918f[_0x486e('0x57')]},'raw':!![]})[_0x486e('0x29')](function(_0x4b7080){if(_0x4b7080&&_0x4b7080[_0x486e('0x58')]===0x0){return db[_0x486e('0x59')][_0x486e('0x50')]({'name':_0x596f0c[_0x486e('0x33')],'resourceId':_0x596f0c['id'],'type':_0x4b7080[_0x486e('0x33')],'sectionId':_0x4b7080['id']},{})[_0x486e('0x29')](function(){return _0x60983e;});}else{return _0x60983e;}})[_0x486e('0x4d')](function(_0x5936a5){logger[_0x486e('0x5a')](_0x486e('0x5b'),_0x5936a5);throw _0x5936a5;});}return _0x60983e;});}})['then'](respondWithResult(_0xcaf3aa,0xc9))[_0x486e('0x4d')](handleError(_0xcaf3aa,null));};exports['update']=function(_0x10b466,_0x3e39b6){if(_0x10b466[_0x486e('0x51')]['id']){delete _0x10b466[_0x486e('0x51')]['id'];}return db[_0x486e('0x4b')][_0x486e('0x4f')]({'where':{'id':_0x10b466[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x3e39b6,null))[_0x486e('0x29')](saveUpdates(_0x10b466['body'],null))[_0x486e('0x29')](respondWithResult(_0x3e39b6,null))[_0x486e('0x4d')](handleError(_0x3e39b6,null));};exports[_0x486e('0x2a')]=function(_0x230836,_0x4056c5){return db[_0x486e('0x4b')][_0x486e('0x4f')]({'where':{'id':_0x230836['params']['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x4056c5,null))['then'](removeEntity(_0x4056c5,null))[_0x486e('0x4d')](handleError(_0x4056c5,null));};exports[_0x486e('0x60')]=function(_0x279852,_0x1fb2fa,_0x2f3b36){var _0x283614={'raw':![],'where':{}};var _0x2cf2db={};var _0x92814a={'count':0x0,'rows':[]};return db[_0x486e('0x4b')][_0x486e('0x61')]({'where':{'id':_0x279852[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x1fb2fa,null))[_0x486e('0x29')](function(_0x1bcc25){if(_0x1bcc25){_0x2cf2db[_0x486e('0x37')]=_[_0x486e('0x38')](db['CmHopper']['rawAttributes']);_0x2cf2db[_0x486e('0x3b')]=_[_0x486e('0x38')](_0x279852[_0x486e('0x3b')]);_0x2cf2db[_0x486e('0x39')]=_[_0x486e('0x3a')](_0x2cf2db[_0x486e('0x37')],_0x2cf2db[_0x486e('0x3b')]);_0x283614[_0x486e('0x3c')]=_[_0x486e('0x3a')](_0x2cf2db[_0x486e('0x37')],qs[_0x486e('0x3d')](_0x279852[_0x486e('0x3b')][_0x486e('0x3d')]));_0x283614['attributes']=_0x283614['attributes']['length']?_0x283614[_0x486e('0x3c')]:_0x2cf2db['model'];if(!_0x279852['query'][_0x486e('0x3f')]('nolimit')){_0x283614['limit']=qs[_0x486e('0x21')](_0x279852[_0x486e('0x3b')]['limit']);_0x283614[_0x486e('0x20')]=qs[_0x486e('0x20')](_0x279852[_0x486e('0x3b')][_0x486e('0x20')]);}_0x283614[_0x486e('0x62')]=qs[_0x486e('0x41')](_0x279852['query']['sort']);_0x283614[_0x486e('0x44')]=qs[_0x486e('0x39')](_['pick'](_0x279852['query'],_0x2cf2db[_0x486e('0x39')]));_0x283614['where'][_0x486e('0x63')]=_0x1bcc25['id'];if(_0x279852[_0x486e('0x3b')][_0x486e('0x43')]){_0x283614['where']=_[_0x486e('0x47')](_0x283614[_0x486e('0x44')],{'$or':_[_0x486e('0x2f')](_0x283614[_0x486e('0x3c')],function(_0x33f381){var _0x60ac22={};_0x60ac22[_0x33f381]={'$like':'%'+_0x279852[_0x486e('0x3b')][_0x486e('0x43')]+'%'};return _0x60ac22;})});}_0x283614=_[_0x486e('0x47')]({},_0x283614,_0x279852['options']);return db[_0x486e('0x64')][_0x486e('0x1f')]({'where':_0x283614[_0x486e('0x44')]})[_0x486e('0x29')](function(_0xd91a31){_0x92814a[_0x486e('0x1f')]=_0xd91a31;if(_0x279852[_0x486e('0x3b')]['includeAll']){_0x283614[_0x486e('0x4a')]=[{'all':!![]}];}return db[_0x486e('0x64')][_0x486e('0x65')](_0x283614);})['then'](function(_0x475ce9){_0x92814a[_0x486e('0x4c')]=_0x475ce9;return _0x92814a;});}})[_0x486e('0x29')](respondWithFilteredResult(_0x1fb2fa,_0x283614))['catch'](handleError(_0x1fb2fa,null));};exports[_0x486e('0x66')]=function(_0x1b4946,_0x5e1aaa,_0x1da628){var _0x5111b1={'raw':!![],'where':{}};var _0x16d2b8={};var _0x34ade3={'count':0x0,'rows':[]};return db[_0x486e('0x4b')][_0x486e('0x61')]({'where':{'id':_0x1b4946['params']['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x5e1aaa,null))[_0x486e('0x29')](function(_0x4fd71f){if(_0x4fd71f){_0x16d2b8['model']=_['keys'](db[_0x486e('0x67')][_0x486e('0x36')]);_0x16d2b8[_0x486e('0x3b')]=_['keys'](_0x1b4946[_0x486e('0x3b')]);_0x16d2b8[_0x486e('0x39')]=_['intersection'](_0x16d2b8[_0x486e('0x37')],_0x16d2b8[_0x486e('0x3b')]);_0x5111b1['attributes']=_['intersection'](_0x16d2b8[_0x486e('0x37')],qs[_0x486e('0x3d')](_0x1b4946['query']['fields']));_0x5111b1['attributes']=_0x5111b1[_0x486e('0x3c')][_0x486e('0x3e')]?_0x5111b1[_0x486e('0x3c')]:_0x16d2b8['model'];if(!_0x1b4946['query'][_0x486e('0x3f')](_0x486e('0x40'))){_0x5111b1[_0x486e('0x21')]=qs[_0x486e('0x21')](_0x1b4946[_0x486e('0x3b')]['limit']);_0x5111b1['offset']=qs[_0x486e('0x20')](_0x1b4946[_0x486e('0x3b')]['offset']);}_0x5111b1[_0x486e('0x62')]=qs['sort'](_0x1b4946['query'][_0x486e('0x41')]);_0x5111b1['where']=qs['filters'](_['pick'](_0x1b4946[_0x486e('0x3b')],_0x16d2b8[_0x486e('0x39')]));_0x5111b1[_0x486e('0x44')][_0x486e('0x63')]=_0x4fd71f['id'];if(_0x1b4946[_0x486e('0x3b')][_0x486e('0x43')]){_0x5111b1[_0x486e('0x44')]=_['merge'](_0x5111b1['where'],{'$or':_[_0x486e('0x2f')](_0x5111b1[_0x486e('0x3c')],function(_0x4048ea){var _0x36ec0e={};_0x36ec0e[_0x4048ea]={'$like':'%'+_0x1b4946[_0x486e('0x3b')][_0x486e('0x43')]+'%'};return _0x36ec0e;})});}_0x5111b1=_[_0x486e('0x47')]({},_0x5111b1,_0x1b4946[_0x486e('0x48')]);return db[_0x486e('0x67')][_0x486e('0x1f')]({'where':_0x5111b1['where']})[_0x486e('0x29')](function(_0x523d82){_0x34ade3[_0x486e('0x1f')]=_0x523d82;if(_0x1b4946['query']['includeAll']){_0x5111b1[_0x486e('0x4a')]=[{'all':!![]}];}return db[_0x486e('0x67')]['findAll'](_0x5111b1);})['then'](function(_0x11b184){_0x34ade3[_0x486e('0x4c')]=_0x11b184;return _0x34ade3;});}})[_0x486e('0x29')](respondWithFilteredResult(_0x5e1aaa,_0x5111b1))[_0x486e('0x4d')](handleError(_0x5e1aaa,null));};exports[_0x486e('0x68')]=function(_0x16bfb2,_0x43fb0a,_0x5dcac0){var _0x3a68f8={'raw':!![],'where':{}};var _0x24ff1a={};var _0x4dd8bd={'count':0x0,'rows':[]};return db[_0x486e('0x4b')]['findOne']({'where':{'id':_0x16bfb2[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x43fb0a,null))[_0x486e('0x29')](function(_0x42153f){if(_0x42153f){_0x24ff1a[_0x486e('0x37')]=_['keys'](db[_0x486e('0x69')]['rawAttributes']);_0x24ff1a[_0x486e('0x3b')]=_[_0x486e('0x38')](_0x16bfb2[_0x486e('0x3b')]);_0x24ff1a[_0x486e('0x39')]=_[_0x486e('0x3a')](_0x24ff1a[_0x486e('0x37')],_0x24ff1a[_0x486e('0x3b')]);_0x3a68f8[_0x486e('0x3c')]=_[_0x486e('0x3a')](_0x24ff1a[_0x486e('0x37')],qs[_0x486e('0x3d')](_0x16bfb2['query']['fields']));_0x3a68f8[_0x486e('0x3c')]=_0x3a68f8['attributes'][_0x486e('0x3e')]?_0x3a68f8['attributes']:_0x24ff1a[_0x486e('0x37')];if(!_0x16bfb2[_0x486e('0x3b')]['hasOwnProperty'](_0x486e('0x40'))){_0x3a68f8[_0x486e('0x21')]=qs[_0x486e('0x21')](_0x16bfb2[_0x486e('0x3b')]['limit']);_0x3a68f8[_0x486e('0x20')]=qs['offset'](_0x16bfb2[_0x486e('0x3b')]['offset']);}_0x3a68f8['order']=qs[_0x486e('0x41')](_0x16bfb2[_0x486e('0x3b')][_0x486e('0x41')]);_0x3a68f8[_0x486e('0x44')]=qs[_0x486e('0x39')](_[_0x486e('0x42')](_0x16bfb2[_0x486e('0x3b')],_0x24ff1a['filters']));_0x3a68f8[_0x486e('0x44')][_0x486e('0x63')]=_0x42153f['id'];if(_0x16bfb2[_0x486e('0x3b')][_0x486e('0x43')]){_0x3a68f8[_0x486e('0x44')]=_[_0x486e('0x47')](_0x3a68f8[_0x486e('0x44')],{'$or':_[_0x486e('0x2f')](_0x3a68f8[_0x486e('0x3c')],function(_0x5adcc7){var _0x487c74={};_0x487c74[_0x5adcc7]={'$like':'%'+_0x16bfb2[_0x486e('0x3b')]['filter']+'%'};return _0x487c74;})});}_0x3a68f8=_[_0x486e('0x47')]({},_0x3a68f8,_0x16bfb2[_0x486e('0x48')]);return db[_0x486e('0x69')][_0x486e('0x1f')]({'where':_0x3a68f8['where']})[_0x486e('0x29')](function(_0x18be6e){_0x4dd8bd[_0x486e('0x1f')]=_0x18be6e;if(_0x16bfb2[_0x486e('0x3b')]['includeAll']){_0x3a68f8[_0x486e('0x4a')]=[{'all':!![]}];}return db[_0x486e('0x69')][_0x486e('0x65')](_0x3a68f8);})[_0x486e('0x29')](function(_0x111c77){_0x4dd8bd['rows']=_0x111c77;return _0x4dd8bd;});}})[_0x486e('0x29')](respondWithFilteredResult(_0x43fb0a,_0x3a68f8))[_0x486e('0x4d')](handleError(_0x43fb0a,null));};exports[_0x486e('0x6a')]=function(_0x5a1a6a,_0x308ff4,_0xe132e){var _0x2e980d={'raw':!![],'where':{}};var _0xa24d3c={};var _0x3e2fe9={'count':0x0,'rows':[]};return db[_0x486e('0x4b')][_0x486e('0x61')]({'where':{'id':_0x5a1a6a[_0x486e('0x4e')]['id']}})['then'](handleEntityNotFound(_0x308ff4,null))['then'](function(_0x5e257f){if(_0x5e257f){_0xa24d3c['model']=_[_0x486e('0x38')](db[_0x486e('0x6b')][_0x486e('0x36')]);_0xa24d3c['query']=_[_0x486e('0x38')](_0x5a1a6a[_0x486e('0x3b')]);_0xa24d3c[_0x486e('0x39')]=_['intersection'](_0xa24d3c[_0x486e('0x37')],_0xa24d3c[_0x486e('0x3b')]);_0x2e980d[_0x486e('0x3c')]=_[_0x486e('0x3a')](_0xa24d3c[_0x486e('0x37')],qs[_0x486e('0x3d')](_0x5a1a6a[_0x486e('0x3b')][_0x486e('0x3d')]));_0x2e980d[_0x486e('0x3c')]=_0x2e980d[_0x486e('0x3c')]['length']?_0x2e980d[_0x486e('0x3c')]:_0xa24d3c[_0x486e('0x37')];if(!_0x5a1a6a[_0x486e('0x3b')][_0x486e('0x3f')]('nolimit')){_0x2e980d['limit']=qs[_0x486e('0x21')](_0x5a1a6a[_0x486e('0x3b')]['limit']);_0x2e980d[_0x486e('0x20')]=qs[_0x486e('0x20')](_0x5a1a6a[_0x486e('0x3b')][_0x486e('0x20')]);}_0x2e980d[_0x486e('0x62')]=qs[_0x486e('0x41')](_0x5a1a6a[_0x486e('0x3b')][_0x486e('0x41')]);_0x2e980d[_0x486e('0x44')]=qs[_0x486e('0x39')](_[_0x486e('0x42')](_0x5a1a6a[_0x486e('0x3b')],_0xa24d3c['filters']));_0x2e980d['where'][_0x486e('0x63')]=_0x5e257f['id'];if(_0x5a1a6a[_0x486e('0x3b')][_0x486e('0x43')]){_0x2e980d[_0x486e('0x44')]=_[_0x486e('0x47')](_0x2e980d['where'],{'$or':_['map'](_0x2e980d[_0x486e('0x3c')],function(_0x1913ef){var _0x30af86={};_0x30af86[_0x1913ef]={'$like':'%'+_0x5a1a6a[_0x486e('0x3b')][_0x486e('0x43')]+'%'};return _0x30af86;})});}_0x2e980d=_[_0x486e('0x47')]({},_0x2e980d,_0x5a1a6a[_0x486e('0x48')]);return db[_0x486e('0x6b')]['count']({'where':_0x2e980d[_0x486e('0x44')]})[_0x486e('0x29')](function(_0x2f0bb0){_0x3e2fe9[_0x486e('0x1f')]=_0x2f0bb0;if(_0x5a1a6a[_0x486e('0x3b')][_0x486e('0x49')]){_0x2e980d[_0x486e('0x4a')]=[{'all':!![]}];}return db[_0x486e('0x6b')][_0x486e('0x65')](_0x2e980d);})['then'](function(_0xff14df){_0x3e2fe9[_0x486e('0x4c')]=_0xff14df;return _0x3e2fe9;});}})[_0x486e('0x29')](respondWithFilteredResult(_0x308ff4,_0x2e980d))[_0x486e('0x4d')](handleError(_0x308ff4,null));};exports[_0x486e('0x6c')]=function(_0x5bde01,_0x28a6fd,_0x4dc801){var _0x56b865={};var _0x55db2f={};var _0x57a26d;var _0x4bff85;return db[_0x486e('0x4b')][_0x486e('0x61')]({'where':{'id':_0x5bde01[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x28a6fd,null))[_0x486e('0x29')](function(_0x539191){if(_0x539191){_0x57a26d=_0x539191;_0x55db2f['model']=_[_0x486e('0x38')](db[_0x486e('0x6d')]['rawAttributes']);_0x55db2f[_0x486e('0x3b')]=_[_0x486e('0x38')](_0x5bde01['query']);_0x55db2f['filters']=_[_0x486e('0x3a')](_0x55db2f[_0x486e('0x37')],_0x55db2f[_0x486e('0x3b')]);_0x56b865[_0x486e('0x3c')]=_['intersection'](_0x55db2f[_0x486e('0x37')],qs[_0x486e('0x3d')](_0x5bde01['query'][_0x486e('0x3d')]));_0x56b865[_0x486e('0x3c')]=_0x56b865[_0x486e('0x3c')][_0x486e('0x3e')]?_0x56b865[_0x486e('0x3c')]:_0x55db2f[_0x486e('0x37')];_0x56b865[_0x486e('0x62')]=qs[_0x486e('0x41')](_0x5bde01[_0x486e('0x3b')][_0x486e('0x41')]);_0x56b865['where']=qs[_0x486e('0x39')](_[_0x486e('0x42')](_0x5bde01[_0x486e('0x3b')],_0x55db2f[_0x486e('0x39')]));if(_0x5bde01[_0x486e('0x3b')][_0x486e('0x43')]){_0x56b865[_0x486e('0x44')]=_[_0x486e('0x47')](_0x56b865[_0x486e('0x44')],{'$or':_[_0x486e('0x2f')](_0x56b865[_0x486e('0x3c')],function(_0x593f0a){var _0x31a443={};_0x31a443[_0x593f0a]={'$like':'%'+_0x5bde01['query'][_0x486e('0x43')]+'%'};return _0x31a443;})});}_0x56b865=_[_0x486e('0x47')]({},_0x56b865,_0x5bde01[_0x486e('0x48')]);return _0x57a26d[_0x486e('0x6c')](_0x56b865);}})[_0x486e('0x29')](function(_0xf198b){if(_0xf198b){_0x4bff85=_0xf198b['length'];if(!_0x5bde01['query'][_0x486e('0x3f')]('nolimit')){_0x56b865[_0x486e('0x21')]=qs[_0x486e('0x21')](_0x5bde01[_0x486e('0x3b')]['limit']);_0x56b865['offset']=qs['offset'](_0x5bde01[_0x486e('0x3b')][_0x486e('0x20')]);}return _0x57a26d[_0x486e('0x6c')](_0x56b865);}})[_0x486e('0x29')](function(_0x4e4498){if(_0x4e4498){return _0x4e4498?{'count':_0x4bff85,'rows':_0x4e4498}:null;}})[_0x486e('0x29')](respondWithResult(_0x28a6fd,null))[_0x486e('0x4d')](handleError(_0x28a6fd,null));};exports[_0x486e('0x6e')]=function(_0x1e8a37,_0x4cbd8a,_0x470ded){var _0x31cf8c=[];var _0x5418e3;return db[_0x486e('0x6d')][_0x486e('0x65')]({'where':{'id':_0x1e8a37[_0x486e('0x51')][_0x486e('0x6f')]},'attributes':['id'],'include':[{'model':db[_0x486e('0x70')],'as':_0x486e('0x71'),'attributes':['id'],'raw':!![]}]})[_0x486e('0x29')](function(_0xc7384a){if(_0xc7384a){for(var _0x2fe2e1=0x0;_0x2fe2e1<_0xc7384a[_0x486e('0x3e')];_0x2fe2e1+=0x1){for(var _0x3330e5=0x0;_0x3330e5<_0xc7384a[_0x2fe2e1][_0x486e('0x71')][_0x486e('0x3e')];_0x3330e5+=0x1){_0x31cf8c=_[_0x486e('0x72')](_0x31cf8c,[_0xc7384a[_0x2fe2e1][_0x486e('0x71')][_0x3330e5]['id']]);}}return _0x31cf8c;}})[_0x486e('0x29')](function(_0x43e933){if(_0x43e933){return db[_0x486e('0x4b')][_0x486e('0x4f')]({'where':{'id':_0x1e8a37['params']['id']}});}})[_0x486e('0x29')](function(_0x4bd400){if(_0x4bd400){_0x5418e3=_0x4bd400;return _0x5418e3[_0x486e('0x73')](_0x31cf8c,{'penalty':_0x1e8a37[_0x486e('0x51')][_0x486e('0x74')]});}})[_0x486e('0x29')](function(_0x11c1aa){if(_0x11c1aa){return _0x5418e3[_0x486e('0x6e')](_0x1e8a37[_0x486e('0x51')][_0x486e('0x6f')]);}})[_0x486e('0x29')](handleEntityNotFound(_0x4cbd8a,null))[_0x486e('0x29')](respondWithStatusCode(_0x4cbd8a,null))['catch'](handleError(_0x4cbd8a,null));};exports[_0x486e('0x75')]=function(_0x358e05,_0x2e9d84,_0x32d2fe){var _0x4fb595=[];var _0x4fcaea;return db[_0x486e('0x6d')][_0x486e('0x65')]({'where':{'id':_0x358e05['query'][_0x486e('0x6f')]},'attributes':['id'],'include':[{'model':db[_0x486e('0x70')],'as':'Agents','attributes':['id'],'raw':!![]}]})[_0x486e('0x29')](function(_0x21c80e){if(_0x21c80e){for(var _0x4bd363=0x0;_0x4bd363<_0x21c80e[_0x486e('0x3e')];_0x4bd363+=0x1){for(var _0x4547ad=0x0;_0x4547ad<_0x21c80e[_0x4bd363][_0x486e('0x71')][_0x486e('0x3e')];_0x4547ad+=0x1){_0x4fb595=_[_0x486e('0x72')](_0x4fb595,[_0x21c80e[_0x4bd363][_0x486e('0x71')][_0x4547ad]['id']]);}}return _0x4fb595;}})[_0x486e('0x29')](function(_0x213556){if(_0x213556){return db[_0x486e('0x4b')][_0x486e('0x4f')]({'where':{'id':_0x358e05[_0x486e('0x4e')]['id']}});}})['then'](function(_0x25d1b1){if(_0x25d1b1){_0x4fcaea=_0x25d1b1;return _0x4fcaea['removeAgents'](_0x4fb595);}})[_0x486e('0x29')](function(_0x239f66){if(_0x4fcaea){return _0x4fcaea[_0x486e('0x75')](_0x358e05[_0x486e('0x3b')][_0x486e('0x6f')]);}})[_0x486e('0x29')](handleEntityNotFound(_0x2e9d84,null))[_0x486e('0x29')](respondWithStatusCode(_0x2e9d84,null))[_0x486e('0x4d')](handleError(_0x2e9d84,null));};exports['addAgents']=function(_0x586b50,_0x917167,_0xb31320){var _0x62147f,_0x28b0a3;return db[_0x486e('0x4b')][_0x486e('0x4f')]({'where':{'id':_0x586b50['params']['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x917167,null))[_0x486e('0x29')](function(_0x1e84c4){if(_0x1e84c4){_0x28b0a3=_0x1e84c4;return _0x1e84c4[_0x486e('0x73')](_0x586b50['body'][_0x486e('0x6f')],_[_0x486e('0x5c')](_0x586b50['body'],['ids','id'])||{})['spread'](function(_0x14d403){for(var _0x27de08=0x0;_0x27de08<_0x586b50[_0x486e('0x51')][_0x486e('0x6f')]['length'];_0x27de08+=0x1){socket[_0x486e('0x76')](_0x486e('0x77'),{'UserId':_0x586b50[_0x486e('0x51')][_0x486e('0x6f')][_0x27de08],'VoiceQueueId':_0x586b50['params']['id']});}return _0x14d403;});}})[_0x486e('0x29')](function(_0x180bf7){_0x62147f=_0x180bf7||[];if(_0x28b0a3){return db[_0x486e('0x70')][_0x486e('0x65')]({'where':{'id':_0x586b50[_0x486e('0x51')][_0x486e('0x6f')]},'attributes':['id',_0x486e('0x33'),_0x486e('0x78'),'voicePause',_0x486e('0x79')],'raw':!![]});}})[_0x486e('0x29')](function(_0x5977ba){if(_0x5977ba&&_0x5977ba['length']){var _0x95794=[];for(var _0x8f7492=0x0;_0x8f7492<_0x5977ba[_0x486e('0x3e')];_0x8f7492++){_0x95794['push'](db['UserVoiceQueueRt'][_0x486e('0x7a')]({'membername':_0x5977ba[_0x8f7492]['name'],'UserId':_0x5977ba[_0x8f7492]['id'],'queue_name':_0x28b0a3[_0x486e('0x33')],'VoiceQueueId':_0x28b0a3['id'],'interface':_[_0x486e('0x7b')](_0x5977ba[_0x8f7492][_0x486e('0x79')])?util[_0x486e('0x7c')](_0x486e('0x7d'),_0x5977ba[_0x8f7492]['name']):_0x5977ba[_0x8f7492][_0x486e('0x79')],'paused':_0x5977ba[_0x8f7492]['voicePause']||![],'penalty':_0x586b50[_0x486e('0x51')][_0x486e('0x74')]||0x0}));}return BPromise[_0x486e('0x7e')](_0x95794);}})[_0x486e('0x29')](function(_0x4f66db){return _0x62147f;})[_0x486e('0x29')](respondWithResult(_0x917167,null))[_0x486e('0x4d')](handleError(_0x917167,null));};exports['removeAgents']=function(_0x1654d8,_0x52d098,_0x87e08){var _0x15f447;return db[_0x486e('0x4b')]['find']({'where':{'id':_0x1654d8[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x52d098,null))[_0x486e('0x29')](function(_0x3dd164){if(_0x3dd164){return _0x3dd164[_0x486e('0x7f')](_0x1654d8[_0x486e('0x3b')]['ids'])[_0x486e('0x29')](function(_0x217449){if(_['isArray'](_0x1654d8['query'][_0x486e('0x6f')])){for(var _0x5f0234=0x0;_0x5f0234<_0x1654d8[_0x486e('0x3b')][_0x486e('0x6f')][_0x486e('0x3e')];_0x5f0234+=0x1){socket[_0x486e('0x76')](_0x486e('0x80'),{'UserId':_0x1654d8[_0x486e('0x3b')]['ids'][_0x5f0234],'VoiceQueueId':_0x1654d8[_0x486e('0x4e')]['id']});}}else{socket[_0x486e('0x76')](_0x486e('0x80'),{'UserId':_0x1654d8['query']['ids'],'VoiceQueueId':_0x1654d8[_0x486e('0x4e')]['id']});}});}})['then'](function(_0x15faad){if(_0x1654d8[_0x486e('0x3b')][_0x486e('0x81')]){_0x15f447=_0x15faad;return db[_0x486e('0x82')][_0x486e('0x2a')]({'where':{'VoiceQueueId':_0x1654d8['params']['id'],'UserId':_0x1654d8[_0x486e('0x3b')][_0x486e('0x6f')]}})['then'](function(){return _0x15f447;});}})['then'](respondWithStatusCode(_0x52d098,null))[_0x486e('0x4d')](handleError(_0x52d098,null));};exports['getAgents']=function(_0x28be7c,_0x444d10,_0x5a3ef3){var _0x371cf1={};var _0x307dcf={};var _0x328f45;var _0x5bd8f9;return db[_0x486e('0x4b')][_0x486e('0x61')]({'where':{'id':_0x28be7c[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x444d10,null))[_0x486e('0x29')](function(_0x11c251){if(_0x11c251){_0x328f45=_0x11c251;_0x307dcf[_0x486e('0x37')]=_[_0x486e('0x38')](db[_0x486e('0x70')]['rawAttributes']);_0x307dcf['query']=_['keys'](_0x28be7c[_0x486e('0x3b')]);_0x307dcf[_0x486e('0x39')]=_['intersection'](_0x307dcf['model'],_0x307dcf['query']);_0x371cf1[_0x486e('0x3c')]=_[_0x486e('0x3a')](_0x307dcf[_0x486e('0x37')],qs[_0x486e('0x3d')](_0x28be7c[_0x486e('0x3b')]['fields']));_0x371cf1[_0x486e('0x3c')]=_0x371cf1[_0x486e('0x3c')][_0x486e('0x3e')]?_0x371cf1[_0x486e('0x3c')]:_0x307dcf[_0x486e('0x37')];_0x371cf1[_0x486e('0x62')]=qs[_0x486e('0x41')](_0x28be7c['query']['sort']);_0x371cf1[_0x486e('0x44')]=qs[_0x486e('0x39')](_[_0x486e('0x42')](_0x28be7c[_0x486e('0x3b')],_0x307dcf[_0x486e('0x39')]));if(_0x28be7c['query'][_0x486e('0x43')]){_0x371cf1[_0x486e('0x44')]=_[_0x486e('0x47')](_0x371cf1[_0x486e('0x44')],{'$or':_['map'](_0x371cf1[_0x486e('0x3c')],function(_0x2cce4d){var _0xe80fe0={};_0xe80fe0[_0x2cce4d]={'$like':'%'+_0x28be7c['query'][_0x486e('0x43')]+'%'};return _0xe80fe0;})});}_0x371cf1=_[_0x486e('0x47')]({},_0x371cf1,_0x28be7c[_0x486e('0x48')]);return _0x328f45[_0x486e('0x83')](_0x371cf1);}})[_0x486e('0x29')](function(_0x392572){if(_0x392572){_0x5bd8f9=_0x392572[_0x486e('0x3e')];if(!_0x28be7c[_0x486e('0x3b')][_0x486e('0x3f')](_0x486e('0x40'))){_0x371cf1[_0x486e('0x21')]=qs[_0x486e('0x21')](_0x28be7c[_0x486e('0x3b')][_0x486e('0x21')]);_0x371cf1[_0x486e('0x20')]=qs['offset'](_0x28be7c['query']['offset']);}return _0x328f45[_0x486e('0x83')](_0x371cf1);}})[_0x486e('0x29')](function(_0x55e589){if(_0x55e589){return _0x55e589?{'count':_0x5bd8f9,'rows':_0x55e589}:null;}})[_0x486e('0x29')](respondWithResult(_0x444d10,null))[_0x486e('0x4d')](handleError(_0x444d10,null));};exports[_0x486e('0x84')]=function(_0x161cb9,_0x48bf3f,_0x12ec0c){var _0x4c1eaa={};var _0xfdc2d0={};var _0x20059f;var _0x1434fa;return db['VoiceQueue']['findOne']({'where':{'id':_0x161cb9[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x48bf3f,null))['then'](function(_0x34e1f3){if(_0x34e1f3){_0x20059f=_0x34e1f3;_0xfdc2d0['model']=_[_0x486e('0x38')](db[_0x486e('0x82')]['rawAttributes']);_0xfdc2d0[_0x486e('0x3b')]=_[_0x486e('0x38')](_0x161cb9[_0x486e('0x3b')]);_0xfdc2d0['filters']=_[_0x486e('0x3a')](_0xfdc2d0[_0x486e('0x37')],_0xfdc2d0[_0x486e('0x3b')]);_0x4c1eaa[_0x486e('0x3c')]=_[_0x486e('0x3a')](_0xfdc2d0['model'],qs['fields'](_0x161cb9[_0x486e('0x3b')]['fields']));_0x4c1eaa[_0x486e('0x3c')]=_0x4c1eaa[_0x486e('0x3c')][_0x486e('0x3e')]?_0x4c1eaa[_0x486e('0x3c')]:_0xfdc2d0[_0x486e('0x37')];_0x4c1eaa[_0x486e('0x62')]=qs[_0x486e('0x41')](_0x161cb9['query']['sort']);_0x4c1eaa['where']=qs[_0x486e('0x39')](_[_0x486e('0x42')](_0x161cb9[_0x486e('0x3b')],_0xfdc2d0['filters']));if(_0x161cb9[_0x486e('0x3b')][_0x486e('0x43')]){_0x4c1eaa[_0x486e('0x44')]=_[_0x486e('0x47')](_0x4c1eaa[_0x486e('0x44')],{'$or':_[_0x486e('0x2f')](_0x4c1eaa['attributes'],function(_0x1a7aa6){var _0x1746c0={};_0x1746c0[_0x1a7aa6]={'$like':'%'+_0x161cb9['query'][_0x486e('0x43')]+'%'};return _0x1746c0;})});}_0x4c1eaa=_[_0x486e('0x47')]({},_0x4c1eaa,_0x161cb9[_0x486e('0x48')]);return _0x20059f['getMembers'](_0x4c1eaa);}})[_0x486e('0x29')](function(_0x1a687d){if(_0x1a687d){_0x1434fa=_0x1a687d[_0x486e('0x3e')];if(!_0x161cb9['query'][_0x486e('0x3f')](_0x486e('0x40'))){_0x4c1eaa[_0x486e('0x21')]=qs[_0x486e('0x21')](_0x161cb9[_0x486e('0x3b')][_0x486e('0x21')]);_0x4c1eaa['offset']=qs[_0x486e('0x20')](_0x161cb9[_0x486e('0x3b')][_0x486e('0x20')]);}return _0x20059f[_0x486e('0x84')](_0x4c1eaa);}})['then'](function(_0xd50388){return _0xd50388?{'count':_0x1434fa,'rows':_0xd50388}:null;})[_0x486e('0x29')](respondWithResult(_0x48bf3f,null))[_0x486e('0x4d')](handleError(_0x48bf3f,null));};exports['getLists']=function(_0x492815,_0x3572fa,_0x4779ad){var _0x529948={};var _0x1f543c={};var _0x34fac5;var _0x2e0507;return db[_0x486e('0x4b')][_0x486e('0x61')]({'where':{'id':_0x492815[_0x486e('0x4e')]['id']}})['then'](handleEntityNotFound(_0x3572fa,null))['then'](function(_0x576270){if(_0x576270){_0x34fac5=_0x576270;_0x1f543c[_0x486e('0x37')]=_[_0x486e('0x38')](db[_0x486e('0x85')][_0x486e('0x36')]);_0x1f543c[_0x486e('0x3b')]=_[_0x486e('0x38')](_0x492815[_0x486e('0x3b')]);_0x1f543c['filters']=_[_0x486e('0x3a')](_0x1f543c[_0x486e('0x37')],_0x1f543c[_0x486e('0x3b')]);_0x529948[_0x486e('0x3c')]=_[_0x486e('0x3a')](_0x1f543c[_0x486e('0x37')],qs['fields'](_0x492815[_0x486e('0x3b')][_0x486e('0x3d')]));_0x529948[_0x486e('0x3c')]=_0x529948[_0x486e('0x3c')][_0x486e('0x3e')]?_0x529948['attributes']:_0x1f543c[_0x486e('0x37')];_0x529948[_0x486e('0x62')]=qs[_0x486e('0x41')](_0x492815[_0x486e('0x3b')][_0x486e('0x41')]);_0x529948[_0x486e('0x44')]=qs['filters'](_[_0x486e('0x42')](_0x492815[_0x486e('0x3b')],_0x1f543c['filters']));if(_0x492815['query'][_0x486e('0x43')]){_0x529948['where']=_[_0x486e('0x47')](_0x529948[_0x486e('0x44')],{'$or':_[_0x486e('0x2f')](_0x529948[_0x486e('0x3c')],function(_0x505249){var _0x586484={};_0x586484[_0x505249]={'$like':'%'+_0x492815[_0x486e('0x3b')]['filter']+'%'};return _0x586484;})});}_0x529948=_[_0x486e('0x47')]({},_0x529948,_0x492815['options']);return _0x34fac5[_0x486e('0x86')](_0x529948);}})[_0x486e('0x29')](function(_0xe9453f){if(_0xe9453f){_0x2e0507=_0xe9453f[_0x486e('0x3e')];if(!_0x492815[_0x486e('0x3b')][_0x486e('0x3f')]('nolimit')){_0x529948[_0x486e('0x21')]=qs[_0x486e('0x21')](_0x492815[_0x486e('0x3b')][_0x486e('0x21')]);_0x529948[_0x486e('0x20')]=qs[_0x486e('0x20')](_0x492815[_0x486e('0x3b')][_0x486e('0x20')]);}return _0x34fac5[_0x486e('0x86')](_0x529948);}})[_0x486e('0x29')](function(_0x4edd8d){if(_0x4edd8d){return _0x4edd8d?{'count':_0x2e0507,'rows':_0x4edd8d}:null;}})[_0x486e('0x29')](respondWithResult(_0x3572fa,null))[_0x486e('0x4d')](handleError(_0x3572fa,null));};exports['addLists']=function(_0x365842,_0x44b334,_0x558210){var _0xdf8580,_0x506b00;return db['VoiceQueue'][_0x486e('0x4f')]({'where':{'id':_0x365842['params']['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x44b334,null))[_0x486e('0x29')](function(_0x27a628){if(_0x27a628){_0x506b00=_0x27a628;return _0x27a628[_0x486e('0x87')](_0x365842[_0x486e('0x51')][_0x486e('0x6f')],_[_0x486e('0x5c')](_0x365842['body'],[_0x486e('0x6f'),'id'])||{});}return null;})['spread'](function(_0x12ed57){var _0x341318;_0xdf8580=_0x12ed57||[];var _0x27eabb=[];if(_0x12ed57){for(var _0x248291=0x0;_0x248291<_0x12ed57['length'];_0x248291+=0x1){var _0x4d9f44=_0x12ed57[_0x248291][_0x486e('0x53')]({'plain':!![]});_0x506b00[_0x486e('0x88')]=_0x365842['body'][_0x486e('0x88')]?_0x365842[_0x486e('0x51')]['dialCheckDuplicateType']:_0x506b00[_0x486e('0x88')];switch(_0x506b00[_0x486e('0x88')]){case _0x486e('0x89'):_0x341318=squel[_0x486e('0x8a')]()[_0x486e('0x8b')](_0x486e('0x8c'))[_0x486e('0x8d')]([_0x486e('0x8e'),_0x486e('0x8f'),'ContactId','ListId',_0x486e('0x63'),_0x486e('0x5d'),'updatedAt'],squel[_0x486e('0x90')]()['field']('phone',_0x486e('0x8e'))[_0x486e('0x46')]('NOW()',_0x486e('0x8f'))['field']('id',_0x486e('0x91'))['field'](_0x4d9f44[_0x486e('0x92')]['toString'](),_0x486e('0x93'))[_0x486e('0x46')](_0x365842[_0x486e('0x4e')]['id'][_0x486e('0x94')](),_0x486e('0x63'))[_0x486e('0x46')](_0x486e('0x95'),_0x486e('0x5d'))[_0x486e('0x46')]('NOW()','updatedAt')[_0x486e('0x96')]('cm_contacts')[_0x486e('0x44')](_0x486e('0x97'))['where'](_0x486e('0x98'),_0x4d9f44[_0x486e('0x92')][_0x486e('0x94')]())[_0x486e('0x44')]('phone\x20IS\x20NOT\x20NULL')[_0x486e('0x44')](_0x486e('0x99'),squel[_0x486e('0x90')]()['field'](_0x486e('0x9a'))[_0x486e('0x96')]('cm_hopper_final')[_0x486e('0x44')](_0x486e('0x9b'),_0x365842[_0x486e('0x4e')]['id'][_0x486e('0x94')]()))[_0x486e('0x44')](_0x486e('0x99'),squel[_0x486e('0x90')]()['field'](_0x486e('0x9c'))['from'](_0x486e('0x8c'))[_0x486e('0x44')](_0x486e('0x9b'),_0x365842[_0x486e('0x4e')]['id'][_0x486e('0x94')]())))[_0x486e('0x94')]();break;case _0x486e('0x9d'):_0x341318=squel[_0x486e('0x8a')]()[_0x486e('0x8b')]('cm_hopper')[_0x486e('0x8d')](['phone','scheduledAt',_0x486e('0x91'),'ListId','VoiceQueueId','createdAt',_0x486e('0x5e')],squel[_0x486e('0x90')]()[_0x486e('0x46')](_0x486e('0x8e'),'phone')[_0x486e('0x46')](_0x486e('0x95'),_0x486e('0x8f'))['field']('id',_0x486e('0x91'))['field'](_0x4d9f44[_0x486e('0x92')][_0x486e('0x94')](),'ListId')[_0x486e('0x46')](_0x365842['params']['id'][_0x486e('0x94')](),_0x486e('0x63'))[_0x486e('0x46')]('NOW()',_0x486e('0x5d'))[_0x486e('0x46')](_0x486e('0x95'),_0x486e('0x5e'))[_0x486e('0x96')]('cm_contacts')['where'](_0x486e('0x97'))[_0x486e('0x44')](_0x486e('0x98'),_0x4d9f44[_0x486e('0x92')][_0x486e('0x94')]())['where'](_0x486e('0x9e'))['where']('phone\x20NOT\x20IN\x20(?)',squel[_0x486e('0x90')]()[_0x486e('0x46')](_0x486e('0x9c'))[_0x486e('0x96')](_0x486e('0x8c'))['where']('VoiceQueueId\x20=\x20?',_0x365842[_0x486e('0x4e')]['id'][_0x486e('0x94')]())))[_0x486e('0x94')]();break;default:_0x341318=squel['insert']()['into'](_0x486e('0x8c'))[_0x486e('0x8d')]([_0x486e('0x8e'),_0x486e('0x8f'),'ContactId','ListId',_0x486e('0x63'),_0x486e('0x5d'),'updatedAt'],squel[_0x486e('0x90')]()[_0x486e('0x46')](_0x486e('0x8e'),_0x486e('0x8e'))['field'](_0x486e('0x95'),_0x486e('0x8f'))['field']('id',_0x486e('0x91'))[_0x486e('0x46')](_0x4d9f44[_0x486e('0x92')]['toString'](),'ListId')[_0x486e('0x46')](_0x365842[_0x486e('0x4e')]['id'][_0x486e('0x94')](),_0x486e('0x63'))[_0x486e('0x46')]('NOW()',_0x486e('0x5d'))['field'](_0x486e('0x95'),_0x486e('0x5e'))[_0x486e('0x96')](_0x486e('0x9f'))[_0x486e('0x44')](_0x486e('0x97'))[_0x486e('0x44')](_0x486e('0x98'),_0x4d9f44[_0x486e('0x92')][_0x486e('0x94')]())['where']('phone\x20IS\x20NOT\x20NULL'))['toString']();}_0x27eabb['push'](db[_0x486e('0xa0')][_0x486e('0x3b')](_0x341318));}return BPromise[_0x486e('0x7e')](_0x27eabb);}})['then'](function(){return _0xdf8580;})[_0x486e('0x29')](respondWithResult(_0x44b334,null))[_0x486e('0x4d')](handleError(_0x44b334,null));};exports[_0x486e('0xa1')]=function(_0x4b14df,_0x449042,_0x4599fa){var _0x231de3;return db[_0x486e('0x4b')][_0x486e('0x4f')]({'where':{'id':_0x4b14df[_0x486e('0x4e')]['id']}})['then'](handleEntityNotFound(_0x449042,null))[_0x486e('0x29')](function(_0x286d48){if(_0x286d48){return _0x286d48[_0x486e('0xa1')](_0x4b14df[_0x486e('0x3b')]['ids']);}})[_0x486e('0x29')](function(_0x599cdb){if(_0x599cdb){_0x231de3=_0x599cdb;return db[_0x486e('0x64')][_0x486e('0x2a')]({'where':{'ListId':_0x4b14df['query'][_0x486e('0x6f')],'VoiceQueueId':_0x4b14df[_0x486e('0x4e')]['id']}})['then'](function(){return _0x231de3;});}})['then'](respondWithStatusCode(_0x449042,null))[_0x486e('0x4d')](handleError(_0x449042,null));};exports['getBlackLists']=function(_0xb3bbce,_0x1fd3e3,_0x5bfe51){var _0x32a98d={};var _0x237056={};var _0x3650a5;var _0x2e395d;return db['VoiceQueue'][_0x486e('0x61')]({'where':{'id':_0xb3bbce[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x1fd3e3,null))[_0x486e('0x29')](function(_0x3d74d3){if(_0x3d74d3){_0x3650a5=_0x3d74d3;_0x237056['model']=_[_0x486e('0x38')](db[_0x486e('0x85')][_0x486e('0x36')]);_0x237056['query']=_[_0x486e('0x38')](_0xb3bbce[_0x486e('0x3b')]);_0x237056[_0x486e('0x39')]=_['intersection'](_0x237056[_0x486e('0x37')],_0x237056['query']);_0x32a98d[_0x486e('0x3c')]=_['intersection'](_0x237056[_0x486e('0x37')],qs[_0x486e('0x3d')](_0xb3bbce['query']['fields']));_0x32a98d[_0x486e('0x3c')]=_0x32a98d['attributes'][_0x486e('0x3e')]?_0x32a98d['attributes']:_0x237056[_0x486e('0x37')];_0x32a98d[_0x486e('0x62')]=qs[_0x486e('0x41')](_0xb3bbce[_0x486e('0x3b')][_0x486e('0x41')]);_0x32a98d[_0x486e('0x44')]=qs['filters'](_[_0x486e('0x42')](_0xb3bbce[_0x486e('0x3b')],_0x237056[_0x486e('0x39')]));if(_0xb3bbce[_0x486e('0x3b')][_0x486e('0x43')]){_0x32a98d[_0x486e('0x44')]=_['merge'](_0x32a98d[_0x486e('0x44')],{'$or':_['map'](_0x32a98d[_0x486e('0x3c')],function(_0x5a2dba){var _0x49fc8f={};_0x49fc8f[_0x5a2dba]={'$like':'%'+_0xb3bbce['query']['filter']+'%'};return _0x49fc8f;})});}_0x32a98d=_[_0x486e('0x47')]({},_0x32a98d,_0xb3bbce[_0x486e('0x48')]);return _0x3650a5[_0x486e('0xa2')](_0x32a98d);}})['then'](function(_0x2fb13a){if(_0x2fb13a){_0x2e395d=_0x2fb13a[_0x486e('0x3e')];if(!_0xb3bbce[_0x486e('0x3b')][_0x486e('0x3f')](_0x486e('0x40'))){_0x32a98d['limit']=qs[_0x486e('0x21')](_0xb3bbce[_0x486e('0x3b')]['limit']);_0x32a98d[_0x486e('0x20')]=qs[_0x486e('0x20')](_0xb3bbce[_0x486e('0x3b')]['offset']);}return _0x3650a5['getBlackLists'](_0x32a98d);}})[_0x486e('0x29')](function(_0xaf032c){if(_0xaf032c){return _0xaf032c?{'count':_0x2e395d,'rows':_0xaf032c}:null;}})[_0x486e('0x29')](respondWithResult(_0x1fd3e3,null))[_0x486e('0x4d')](handleError(_0x1fd3e3,null));};exports[_0x486e('0xa3')]=function(_0x322039,_0x412eea,_0x508e37){var _0x251fe3,_0x21fa61;return db['VoiceQueue'][_0x486e('0x4f')]({'where':{'id':_0x322039[_0x486e('0x4e')]['id']}})[_0x486e('0x29')](handleEntityNotFound(_0x412eea,null))[_0x486e('0x29')](function(_0x2e3d45){if(_0x2e3d45){_0x21fa61=_0x2e3d45;return _0x2e3d45['addBlackLists'](_0x322039[_0x486e('0x51')][_0x486e('0x6f')],_[_0x486e('0x5c')](_0x322039[_0x486e('0x51')],[_0x486e('0x6f'),'id'])||{});}return null;})[_0x486e('0xa4')](function(_0x7c2b5b){var _0x279763;_0x251fe3=_0x7c2b5b||[];var _0x486db1=[];if(_0x7c2b5b){for(var _0x3a0594=0x0;_0x3a0594<_0x7c2b5b[_0x486e('0x3e')];_0x3a0594+=0x1){var _0x102996=_0x7c2b5b[_0x3a0594][_0x486e('0x53')]({'plain':!![]});_0x279763=squel[_0x486e('0x8a')]()[_0x486e('0x8b')](_0x486e('0xa5'))[_0x486e('0x8d')](['phone',_0x486e('0x91'),'ListId',_0x486e('0x63'),_0x486e('0x5d'),_0x486e('0x5e')],squel[_0x486e('0x90')]()['field']('phone',_0x486e('0x8e'))[_0x486e('0x46')]('id',_0x486e('0x91'))['field'](_0x102996[_0x486e('0x92')]['toString'](),_0x486e('0x93'))[_0x486e('0x46')](_0x322039[_0x486e('0x4e')]['id']['toString'](),'VoiceQueueId')[_0x486e('0x46')](_0x486e('0x95'),_0x486e('0x5d'))['field']('NOW()','updatedAt')[_0x486e('0x96')](_0x486e('0x9f'))['where'](_0x486e('0x97'))[_0x486e('0x44')](_0x486e('0x98'),_0x102996[_0x486e('0x92')]['toString']())['where']('phone\x20IS\x20NOT\x20NULL'))[_0x486e('0x94')]();_0x486db1[_0x486e('0xa6')](db[_0x486e('0xa0')]['query'](_0x279763));}return BPromise[_0x486e('0x7e')](_0x486db1);}})[_0x486e('0x29')](function(){return _0x251fe3;})[_0x486e('0x29')](respondWithResult(_0x412eea,null))['catch'](handleError(_0x412eea,null));};exports[_0x486e('0xa7')]=function(_0x4b64b6,_0x23cbf7,_0x328117){var _0x4df8a8;return db[_0x486e('0x4b')][_0x486e('0x4f')]({'where':{'id':_0x4b64b6[_0x486e('0x4e')]['id']}})['then'](handleEntityNotFound(_0x23cbf7,null))['then'](function(_0x36b45c){if(_0x36b45c){return _0x36b45c[_0x486e('0xa7')](_0x4b64b6[_0x486e('0x3b')][_0x486e('0x6f')]);}})[_0x486e('0x29')](function(_0xfb7fa4){if(_0xfb7fa4){_0x4df8a8=_0xfb7fa4;return db[_0x486e('0x6b')][_0x486e('0x2a')]({'where':{'ListId':_0x4b64b6[_0x486e('0x3b')]['ids'],'VoiceQueueId':_0x4b64b6['params']['id']}})[_0x486e('0x29')](function(){return _0x4df8a8;});}})[_0x486e('0x29')](respondWithStatusCode(_0x23cbf7,null))['catch'](handleError(_0x23cbf7,null));};
\ No newline at end of file
+var _0x5e5d=['send','index','VoiceQueue','rawAttributes','model','keys','query','intersection','fields','attributes','hasOwnProperty','nolimit','order','sort','where','filters','merge','field','filter','includeAll','include','findAll','rows','catch','show','params','length','options','create','body','user','Unable\x20to\x20retrieve\x20the\x20current\x20user','role','get','QueueCampaigns','userProfileId','autoAssociation','Unable\x20to\x20associate\x20the\x20resource\x20to\x20the\x20User\x20Profile:\x20%s','clone','omit','updatedAt','createdAt','UserProfileSection','getHoppers','findOne','CmHopper','pick','VoiceQueueId','getHopperHistories','CmHopperHistory','getHopperFinals','CmHopperFinal','CmHopperBlack','getTeams','Team','addTeams','ids','User','Agents','union','addAgents','penalty','removeTeams','removeAgents','spread','emit','userVoiceQueue:save','loginInPause','voicePause','interface','UserVoiceQueueRt','upsert','format','SIP/%s','all','isArray','userVoiceQueue:remove','getAgents','getMembers','CmList','getLists','dialCheckDuplicateType','always','insert','into','cm_hopper','fromQuery','phone','scheduledAt','ContactId','ListId','select','NOW()','CmListId','toString','from','cm_contacts','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','COALESCE(calleridnum,\x27\x27)','cm_hopper_final','VoiceQueueId\x20=\x20?','COALESCE(phone,\x27\x27)','sequelize','removeLists','getBlackLists','removeBlackLists','eml-format','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','to-csv','ejs','lodash','squel','jsforce','desk.js','querystring','papaparse','../../config/license/hardware','ioredis','api','../../config/utils','../../config/environment','redis','defaults','socket.io-emitter','./voiceQueue.socket','register','status','json','count','offset','limit','Content-Range','reject','save','update','then','VoiceQueues','inbound','outbound','ignore','map','value','includes','type','find','name','UserProfileResource','destroy','end','sendStatus','error'];(function(_0x4c32a2,_0x2ad8d0){var _0x83800=function(_0x3ba0bb){while(--_0x3ba0bb){_0x4c32a2['push'](_0x4c32a2['shift']());}};_0x83800(++_0x2ad8d0);}(_0x5e5d,0x1b1));var _0xd5e5=function(_0x4b2a0d,_0x57a6f2){_0x4b2a0d=_0x4b2a0d-0x0;var _0x2e2cc9=_0x5e5d[_0x4b2a0d];return _0x2e2cc9;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xd5e5('0x0'));var rimraf=require('rimraf');var zipdir=require(_0xd5e5('0x1'));var jsonpatch=require(_0xd5e5('0x2'));var rp=require(_0xd5e5('0x3'));var moment=require(_0xd5e5('0x4'));var BPromise=require(_0xd5e5('0x5'));var Mustache=require(_0xd5e5('0x6'));var util=require(_0xd5e5('0x7'));var path=require(_0xd5e5('0x8'));var sox=require(_0xd5e5('0x9'));var csv=require(_0xd5e5('0xa'));var ejs=require(_0xd5e5('0xb'));var fs=require('fs');var _=require(_0xd5e5('0xc'));var squel=require(_0xd5e5('0xd'));var crypto=require('crypto');var jsforce=require(_0xd5e5('0xe'));var deskjs=require(_0xd5e5('0xf'));var toCsv=require('to-csv');var querystring=require(_0xd5e5('0x10'));var Papa=require(_0xd5e5('0x11'));var authService=require('../../components/auth/service');var hardwareService=require(_0xd5e5('0x12'));var Redis=require(_0xd5e5('0x13'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0xd5e5('0x14'));var utils=require(_0xd5e5('0x15'));var config=require(_0xd5e5('0x16'));var db=require('../../mysqldb')['db'];config[_0xd5e5('0x17')]=_[_0xd5e5('0x18')](config[_0xd5e5('0x17')],{'host':'localhost','port':0x18eb});var socket=require(_0xd5e5('0x19'))(new Redis(config['redis']));require(_0xd5e5('0x1a'))[_0xd5e5('0x1b')](socket);function respondWithStatusCode(_0x185edc,_0x10f91c){_0x10f91c=_0x10f91c||0xcc;return function(_0x4f0391){if(_0x4f0391){return _0x185edc['sendStatus'](_0x10f91c);}return _0x185edc[_0xd5e5('0x1c')](_0x10f91c)['end']();};}function respondWithResult(_0x3d83ad,_0x2c2fa4){_0x2c2fa4=_0x2c2fa4||0xc8;return function(_0x521c5f){if(_0x521c5f){return _0x3d83ad[_0xd5e5('0x1c')](_0x2c2fa4)[_0xd5e5('0x1d')](_0x521c5f);}};}function respondWithFilteredResult(_0x3f1513,_0x35eb7d){return function(_0x1433fb){if(_0x1433fb){var _0x314e6a=_0x1433fb[_0xd5e5('0x1e')],_0x2b90d2=_0x35eb7d[_0xd5e5('0x1f')],_0x194807=_0x35eb7d[_0xd5e5('0x1f')]+_0x35eb7d[_0xd5e5('0x20')],_0x30433e;if(_0x194807>=_0x314e6a){_0x194807=_0x314e6a;_0x30433e=0xc8;}else{_0x30433e=0xce;}_0x3f1513[_0xd5e5('0x1c')](_0x30433e);return _0x3f1513['set'](_0xd5e5('0x21'),_0x2b90d2+'-'+_0x194807+'/'+_0x314e6a)['json'](_0x1433fb);}return null;};}function patchUpdates(_0x25dac9){return function(_0x1352a4){try{jsonpatch['apply'](_0x1352a4,_0x25dac9,!![]);}catch(_0x23abc1){return BPromise[_0xd5e5('0x22')](_0x23abc1);}return _0x1352a4[_0xd5e5('0x23')]();};}function saveUpdates(_0x48f9d9,_0x22c0fd){return function(_0x478147){if(_0x478147){return _0x478147[_0xd5e5('0x24')](_0x48f9d9)[_0xd5e5('0x25')](function(_0x57b84a){return _0x57b84a;});}return null;};}function removeEntity(_0xda12a0,_0x357267){return function(_0x2bfc81){if(_0x2bfc81){return _0x2bfc81['destroy']()['then'](function(){var _0x20ca0a=_0x2bfc81['get']({'plain':!![]});var _0x11edaf=[{'name':_0xd5e5('0x26'),'value':_0xd5e5('0x27'),'ignore':![]},{'name':'QueueCampaigns','value':_0xd5e5('0x28'),'ignore':![]}];var _0x2c4207=_(_0x11edaf)['filter'](_0xd5e5('0x29'))[_0xd5e5('0x2a')](_0xd5e5('0x2b'))[_0xd5e5('0x2b')]();if(_[_0xd5e5('0x2c')](_0x2c4207,_0x20ca0a[_0xd5e5('0x2d')])){return;}var _0x900fc8=_[_0xd5e5('0x2e')](_0x11edaf,[_0xd5e5('0x2b'),_0x20ca0a[_0xd5e5('0x2d')]])[_0xd5e5('0x2f')];return db[_0xd5e5('0x30')][_0xd5e5('0x31')]({'where':{'type':_0x900fc8,'resourceId':_0x20ca0a['id']}})[_0xd5e5('0x25')](function(){return _0x2bfc81;});})[_0xd5e5('0x25')](function(){_0xda12a0[_0xd5e5('0x1c')](0xcc)[_0xd5e5('0x32')]();});}};}function handleEntityNotFound(_0x48142e,_0x4c01c9){return function(_0x24172c){if(!_0x24172c){_0x48142e[_0xd5e5('0x33')](0x194);}return _0x24172c;};}function handleError(_0x3607cb,_0x2a981b){_0x2a981b=_0x2a981b||0x1f4;return function(_0x5a7c6b){logger[_0xd5e5('0x34')](_0x5a7c6b['stack']);if(_0x5a7c6b[_0xd5e5('0x2f')]){delete _0x5a7c6b[_0xd5e5('0x2f')];}_0x3607cb['status'](_0x2a981b)[_0xd5e5('0x35')](_0x5a7c6b);};}exports[_0xd5e5('0x36')]=function(_0x3d0305,_0x46cfb0){var _0x49a679={},_0x46fb31={},_0x3f96d5={'count':0x0,'rows':[]};var _0x2ca288=db[_0xd5e5('0x37')][_0xd5e5('0x38')];_0x46fb31[_0xd5e5('0x39')]=_[_0xd5e5('0x3a')](_0x2ca288);_0x46fb31[_0xd5e5('0x3b')]=_['keys'](_0x3d0305[_0xd5e5('0x3b')]);_0x46fb31['filters']=_[_0xd5e5('0x3c')](_0x46fb31[_0xd5e5('0x39')],_0x46fb31[_0xd5e5('0x3b')]);_0x49a679['attributes']=_[_0xd5e5('0x3c')](_0x46fb31[_0xd5e5('0x39')],qs[_0xd5e5('0x3d')](_0x3d0305['query']['fields']));_0x49a679[_0xd5e5('0x3e')]=_0x49a679[_0xd5e5('0x3e')]['length']?_0x49a679['attributes']:_0x46fb31[_0xd5e5('0x39')];if(!_0x3d0305[_0xd5e5('0x3b')][_0xd5e5('0x3f')](_0xd5e5('0x40'))){_0x49a679[_0xd5e5('0x20')]=qs['limit'](_0x3d0305[_0xd5e5('0x3b')]['limit']);_0x49a679['offset']=qs['offset'](_0x3d0305[_0xd5e5('0x3b')][_0xd5e5('0x1f')]);}_0x49a679[_0xd5e5('0x41')]=qs[_0xd5e5('0x42')](_0x3d0305[_0xd5e5('0x3b')][_0xd5e5('0x42')]);_0x49a679[_0xd5e5('0x43')]=qs[_0xd5e5('0x44')](_['pick'](_0x3d0305['query'],_0x46fb31['filters']));if(_0x3d0305[_0xd5e5('0x3b')]['filter']){_0x49a679['where']=_[_0xd5e5('0x45')](_0x49a679[_0xd5e5('0x43')],{'$or':_[_0xd5e5('0x2a')](_0x2ca288,function(_0x148f1d){if(_0x148f1d['type']['key']!=='VIRTUAL'){var _0x39c71a={};_0x39c71a[_0x148f1d[_0xd5e5('0x46')]]={'$like':'%'+_0x3d0305['query'][_0xd5e5('0x47')]+'%'};return _0x39c71a;}})});}_0x49a679=_[_0xd5e5('0x45')]({},_0x49a679,_0x3d0305['options']);var _0x10b1ea={'where':_0x49a679[_0xd5e5('0x43')]};return db[_0xd5e5('0x37')][_0xd5e5('0x1e')](_0x10b1ea)[_0xd5e5('0x25')](function(_0x3556ac){_0x3f96d5['count']=_0x3556ac;if(_0x3d0305[_0xd5e5('0x3b')][_0xd5e5('0x48')]){_0x49a679[_0xd5e5('0x49')]=[{'all':!![]}];}return db[_0xd5e5('0x37')][_0xd5e5('0x4a')](_0x49a679);})[_0xd5e5('0x25')](function(_0x504c5e){_0x3f96d5[_0xd5e5('0x4b')]=_0x504c5e;return _0x3f96d5;})[_0xd5e5('0x25')](respondWithFilteredResult(_0x46cfb0,_0x49a679))[_0xd5e5('0x4c')](handleError(_0x46cfb0,null));};exports[_0xd5e5('0x4d')]=function(_0x349b,_0x2a340c){var _0x3ca480={'raw':![],'where':{'id':_0x349b[_0xd5e5('0x4e')]['id']}},_0x470e24={};_0x470e24[_0xd5e5('0x39')]=_['keys'](db['VoiceQueue'][_0xd5e5('0x38')]);_0x470e24['query']=_[_0xd5e5('0x3a')](_0x349b[_0xd5e5('0x3b')]);_0x470e24[_0xd5e5('0x44')]=_[_0xd5e5('0x3c')](_0x470e24[_0xd5e5('0x39')],_0x470e24[_0xd5e5('0x3b')]);_0x3ca480[_0xd5e5('0x3e')]=_[_0xd5e5('0x3c')](_0x470e24[_0xd5e5('0x39')],qs[_0xd5e5('0x3d')](_0x349b['query'][_0xd5e5('0x3d')]));_0x3ca480[_0xd5e5('0x3e')]=_0x3ca480['attributes'][_0xd5e5('0x4f')]?_0x3ca480[_0xd5e5('0x3e')]:_0x470e24['model'];if(_0x349b[_0xd5e5('0x3b')][_0xd5e5('0x48')]){_0x3ca480[_0xd5e5('0x49')]=[{'all':!![]}];}_0x3ca480=_['merge']({},_0x3ca480,_0x349b[_0xd5e5('0x50')]);return db[_0xd5e5('0x37')][_0xd5e5('0x2e')](_0x3ca480)[_0xd5e5('0x25')](handleEntityNotFound(_0x2a340c,null))[_0xd5e5('0x25')](respondWithResult(_0x2a340c,null))[_0xd5e5('0x4c')](handleError(_0x2a340c,null));};exports['create']=function(_0x422d91,_0xaaa444){return db['VoiceQueue'][_0xd5e5('0x51')](_0x422d91[_0xd5e5('0x52')],{})[_0xd5e5('0x25')](function(_0x58da1e){var _0x197cc7=_0x422d91[_0xd5e5('0x53')]['get']({'plain':!![]});if(!_0x197cc7)throw new Error(_0xd5e5('0x54'));if(_0x197cc7[_0xd5e5('0x55')]===_0xd5e5('0x53')){var _0x5f18da=_0x58da1e[_0xd5e5('0x56')]({'plain':!![]});var _0x451115=[{'name':_0xd5e5('0x26'),'value':_0xd5e5('0x27')},{'name':_0xd5e5('0x57'),'value':_0xd5e5('0x28')}];var _0x56621e=_[_0xd5e5('0x2e')](_0x451115,[_0xd5e5('0x2b'),_0x5f18da[_0xd5e5('0x2d')]])['name'];return db['UserProfileSection'][_0xd5e5('0x2e')]({'where':{'name':_0x56621e,'userProfileId':_0x197cc7[_0xd5e5('0x58')]},'raw':!![]})[_0xd5e5('0x25')](function(_0x392c99){if(_0x392c99&&_0x392c99[_0xd5e5('0x59')]===0x0){return db[_0xd5e5('0x30')][_0xd5e5('0x51')]({'name':_0x5f18da['name'],'resourceId':_0x5f18da['id'],'type':_0x392c99[_0xd5e5('0x2f')],'sectionId':_0x392c99['id']},{})[_0xd5e5('0x25')](function(){return _0x58da1e;});}else{return _0x58da1e;}})[_0xd5e5('0x4c')](function(_0x53ec7a){logger[_0xd5e5('0x34')](_0xd5e5('0x5a'),_0x53ec7a);throw _0x53ec7a;});}return _0x58da1e;})[_0xd5e5('0x25')](respondWithResult(_0xaaa444,0xc9))[_0xd5e5('0x4c')](handleError(_0xaaa444,null));};exports[_0xd5e5('0x5b')]=function(_0x5529d8,_0x3b7d43){var _0x3e35d9={'raw':![],'where':{'id':_0x5529d8[_0xd5e5('0x4e')]['id']}},_0x4e44ad={};_0x4e44ad[_0xd5e5('0x39')]=_[_0xd5e5('0x3a')](db['VoiceQueue'][_0xd5e5('0x38')]);_0x3e35d9['attributes']=_[_0xd5e5('0x3c')](_0x4e44ad[_0xd5e5('0x39')],qs[_0xd5e5('0x3d')](_0x5529d8[_0xd5e5('0x3b')][_0xd5e5('0x3d')]));_0x3e35d9[_0xd5e5('0x3e')]=_0x3e35d9[_0xd5e5('0x3e')][_0xd5e5('0x4f')]?_0x3e35d9[_0xd5e5('0x3e')]:_0x4e44ad[_0xd5e5('0x39')];if(_0x5529d8['query'][_0xd5e5('0x48')]){_0x3e35d9[_0xd5e5('0x49')]=[{'all':!![]}];}_0x3e35d9=_[_0xd5e5('0x45')]({},_0x3e35d9,_0x5529d8['options']);return db[_0xd5e5('0x37')][_0xd5e5('0x2e')](_0x3e35d9)[_0xd5e5('0x25')](handleEntityNotFound(_0x3b7d43,null))['then'](function(_0x44c328){if(_0x44c328){var _0x428ab9=_0x44c328[_0xd5e5('0x56')]({'plain':!![]});_0x428ab9=qs[_0xd5e5('0x5c')](_0x428ab9,['id','createdAt',_0xd5e5('0x5d')]);_0x5529d8[_0xd5e5('0x52')]=_[_0xd5e5('0x5c')](_0x5529d8[_0xd5e5('0x52')],['id',_0xd5e5('0x5e'),_0xd5e5('0x5d')]);return db['VoiceQueue'][_0xd5e5('0x51')](_[_0xd5e5('0x45')](_0x428ab9,_0x5529d8['body']),{'include':_0x5529d8[_0xd5e5('0x3b')][_0xd5e5('0x48')]?[{'all':!![]}]:undefined})[_0xd5e5('0x25')](function(_0x2071a2){var _0x13be4d=_0x5529d8['user']['get']({'plain':!![]});if(!_0x13be4d)throw new Error(_0xd5e5('0x54'));if(_0x13be4d[_0xd5e5('0x55')]===_0xd5e5('0x53')){var _0x388bac=_0x2071a2[_0xd5e5('0x56')]({'plain':!![]});var _0x23dca7=[{'name':_0xd5e5('0x26'),'value':_0xd5e5('0x27')},{'name':_0xd5e5('0x57'),'value':'outbound'}];var _0x387f37=_[_0xd5e5('0x2e')](_0x23dca7,[_0xd5e5('0x2b'),_0x388bac[_0xd5e5('0x2d')]])['name'];return db[_0xd5e5('0x5f')][_0xd5e5('0x2e')]({'where':{'name':_0x387f37,'userProfileId':_0x13be4d[_0xd5e5('0x58')]},'raw':!![]})['then'](function(_0x434d06){if(_0x434d06&&_0x434d06[_0xd5e5('0x59')]===0x0){return db[_0xd5e5('0x30')][_0xd5e5('0x51')]({'name':_0x388bac[_0xd5e5('0x2f')],'resourceId':_0x388bac['id'],'type':_0x434d06[_0xd5e5('0x2f')],'sectionId':_0x434d06['id']},{})[_0xd5e5('0x25')](function(){return _0x2071a2;});}else{return _0x2071a2;}})[_0xd5e5('0x4c')](function(_0x3b8a06){logger[_0xd5e5('0x34')](_0xd5e5('0x5a'),_0x3b8a06);throw _0x3b8a06;});}return _0x2071a2;});}})[_0xd5e5('0x25')](respondWithResult(_0x3b7d43,0xc9))[_0xd5e5('0x4c')](handleError(_0x3b7d43,null));};exports[_0xd5e5('0x24')]=function(_0x1d37ce,_0x33baed){if(_0x1d37ce[_0xd5e5('0x52')]['id']){delete _0x1d37ce[_0xd5e5('0x52')]['id'];}return db[_0xd5e5('0x37')][_0xd5e5('0x2e')]({'where':{'id':_0x1d37ce[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x33baed,null))[_0xd5e5('0x25')](saveUpdates(_0x1d37ce[_0xd5e5('0x52')],null))[_0xd5e5('0x25')](respondWithResult(_0x33baed,null))[_0xd5e5('0x4c')](handleError(_0x33baed,null));};exports[_0xd5e5('0x31')]=function(_0x171e4e,_0x3c2ace){return db['VoiceQueue'][_0xd5e5('0x2e')]({'where':{'id':_0x171e4e['params']['id']}})['then'](handleEntityNotFound(_0x3c2ace,null))[_0xd5e5('0x25')](removeEntity(_0x3c2ace,null))[_0xd5e5('0x4c')](handleError(_0x3c2ace,null));};exports[_0xd5e5('0x60')]=function(_0x4705e8,_0x4b0844,_0x2b152e){var _0x314aae={'raw':![],'where':{}};var _0x2625bc={};var _0x151b73={'count':0x0,'rows':[]};return db['VoiceQueue'][_0xd5e5('0x61')]({'where':{'id':_0x4705e8[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x4b0844,null))[_0xd5e5('0x25')](function(_0x234e7a){if(_0x234e7a){_0x2625bc['model']=_[_0xd5e5('0x3a')](db[_0xd5e5('0x62')][_0xd5e5('0x38')]);_0x2625bc[_0xd5e5('0x3b')]=_[_0xd5e5('0x3a')](_0x4705e8['query']);_0x2625bc[_0xd5e5('0x44')]=_[_0xd5e5('0x3c')](_0x2625bc['model'],_0x2625bc[_0xd5e5('0x3b')]);_0x314aae[_0xd5e5('0x3e')]=_[_0xd5e5('0x3c')](_0x2625bc[_0xd5e5('0x39')],qs[_0xd5e5('0x3d')](_0x4705e8[_0xd5e5('0x3b')][_0xd5e5('0x3d')]));_0x314aae[_0xd5e5('0x3e')]=_0x314aae['attributes'][_0xd5e5('0x4f')]?_0x314aae['attributes']:_0x2625bc[_0xd5e5('0x39')];if(!_0x4705e8[_0xd5e5('0x3b')][_0xd5e5('0x3f')](_0xd5e5('0x40'))){_0x314aae[_0xd5e5('0x20')]=qs[_0xd5e5('0x20')](_0x4705e8['query']['limit']);_0x314aae[_0xd5e5('0x1f')]=qs['offset'](_0x4705e8[_0xd5e5('0x3b')][_0xd5e5('0x1f')]);}_0x314aae['order']=qs[_0xd5e5('0x42')](_0x4705e8[_0xd5e5('0x3b')][_0xd5e5('0x42')]);_0x314aae[_0xd5e5('0x43')]=qs[_0xd5e5('0x44')](_[_0xd5e5('0x63')](_0x4705e8[_0xd5e5('0x3b')],_0x2625bc['filters']));_0x314aae[_0xd5e5('0x43')][_0xd5e5('0x64')]=_0x234e7a['id'];if(_0x4705e8['query'][_0xd5e5('0x47')]){_0x314aae[_0xd5e5('0x43')]=_['merge'](_0x314aae['where'],{'$or':_[_0xd5e5('0x2a')](_0x314aae[_0xd5e5('0x3e')],function(_0x578e01){var _0xa294fc={};_0xa294fc[_0x578e01]={'$like':'%'+_0x4705e8[_0xd5e5('0x3b')][_0xd5e5('0x47')]+'%'};return _0xa294fc;})});}_0x314aae=_[_0xd5e5('0x45')]({},_0x314aae,_0x4705e8[_0xd5e5('0x50')]);return db[_0xd5e5('0x62')][_0xd5e5('0x1e')]({'where':_0x314aae[_0xd5e5('0x43')]})[_0xd5e5('0x25')](function(_0x7eea6a){_0x151b73[_0xd5e5('0x1e')]=_0x7eea6a;if(_0x4705e8[_0xd5e5('0x3b')][_0xd5e5('0x48')]){_0x314aae[_0xd5e5('0x49')]=[{'all':!![]}];}return db['CmHopper'][_0xd5e5('0x4a')](_0x314aae);})['then'](function(_0x282646){_0x151b73[_0xd5e5('0x4b')]=_0x282646;return _0x151b73;});}})[_0xd5e5('0x25')](respondWithFilteredResult(_0x4b0844,_0x314aae))[_0xd5e5('0x4c')](handleError(_0x4b0844,null));};exports[_0xd5e5('0x65')]=function(_0xac7a19,_0x3deb16,_0x3c714b){var _0xbf8c38={'raw':!![],'where':{}};var _0x5c0761={};var _0x3be1c6={'count':0x0,'rows':[]};return db[_0xd5e5('0x37')]['findOne']({'where':{'id':_0xac7a19[_0xd5e5('0x4e')]['id']}})['then'](handleEntityNotFound(_0x3deb16,null))[_0xd5e5('0x25')](function(_0x41ba03){if(_0x41ba03){_0x5c0761[_0xd5e5('0x39')]=_[_0xd5e5('0x3a')](db['CmHopperHistory'][_0xd5e5('0x38')]);_0x5c0761['query']=_[_0xd5e5('0x3a')](_0xac7a19[_0xd5e5('0x3b')]);_0x5c0761['filters']=_['intersection'](_0x5c0761['model'],_0x5c0761['query']);_0xbf8c38['attributes']=_[_0xd5e5('0x3c')](_0x5c0761[_0xd5e5('0x39')],qs['fields'](_0xac7a19[_0xd5e5('0x3b')]['fields']));_0xbf8c38[_0xd5e5('0x3e')]=_0xbf8c38[_0xd5e5('0x3e')]['length']?_0xbf8c38[_0xd5e5('0x3e')]:_0x5c0761[_0xd5e5('0x39')];if(!_0xac7a19[_0xd5e5('0x3b')]['hasOwnProperty'](_0xd5e5('0x40'))){_0xbf8c38[_0xd5e5('0x20')]=qs[_0xd5e5('0x20')](_0xac7a19[_0xd5e5('0x3b')][_0xd5e5('0x20')]);_0xbf8c38[_0xd5e5('0x1f')]=qs['offset'](_0xac7a19['query'][_0xd5e5('0x1f')]);}_0xbf8c38['order']=qs['sort'](_0xac7a19[_0xd5e5('0x3b')][_0xd5e5('0x42')]);_0xbf8c38['where']=qs[_0xd5e5('0x44')](_[_0xd5e5('0x63')](_0xac7a19[_0xd5e5('0x3b')],_0x5c0761['filters']));_0xbf8c38[_0xd5e5('0x43')]['VoiceQueueId']=_0x41ba03['id'];if(_0xac7a19['query'][_0xd5e5('0x47')]){_0xbf8c38['where']=_[_0xd5e5('0x45')](_0xbf8c38[_0xd5e5('0x43')],{'$or':_['map'](_0xbf8c38[_0xd5e5('0x3e')],function(_0x2d05fc){var _0x1ed654={};_0x1ed654[_0x2d05fc]={'$like':'%'+_0xac7a19[_0xd5e5('0x3b')][_0xd5e5('0x47')]+'%'};return _0x1ed654;})});}_0xbf8c38=_[_0xd5e5('0x45')]({},_0xbf8c38,_0xac7a19[_0xd5e5('0x50')]);return db[_0xd5e5('0x66')]['count']({'where':_0xbf8c38[_0xd5e5('0x43')]})[_0xd5e5('0x25')](function(_0x9f604b){_0x3be1c6[_0xd5e5('0x1e')]=_0x9f604b;if(_0xac7a19[_0xd5e5('0x3b')][_0xd5e5('0x48')]){_0xbf8c38['include']=[{'all':!![]}];}return db[_0xd5e5('0x66')][_0xd5e5('0x4a')](_0xbf8c38);})[_0xd5e5('0x25')](function(_0x27d014){_0x3be1c6[_0xd5e5('0x4b')]=_0x27d014;return _0x3be1c6;});}})[_0xd5e5('0x25')](respondWithFilteredResult(_0x3deb16,_0xbf8c38))['catch'](handleError(_0x3deb16,null));};exports[_0xd5e5('0x67')]=function(_0x48ce5c,_0x1336da,_0x302390){var _0x599c7c={'raw':!![],'where':{}};var _0x3bd2cc={};var _0xee088b={'count':0x0,'rows':[]};return db[_0xd5e5('0x37')][_0xd5e5('0x61')]({'where':{'id':_0x48ce5c['params']['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x1336da,null))['then'](function(_0x1c5f29){if(_0x1c5f29){_0x3bd2cc[_0xd5e5('0x39')]=_['keys'](db[_0xd5e5('0x68')][_0xd5e5('0x38')]);_0x3bd2cc['query']=_[_0xd5e5('0x3a')](_0x48ce5c['query']);_0x3bd2cc['filters']=_[_0xd5e5('0x3c')](_0x3bd2cc['model'],_0x3bd2cc['query']);_0x599c7c[_0xd5e5('0x3e')]=_[_0xd5e5('0x3c')](_0x3bd2cc[_0xd5e5('0x39')],qs['fields'](_0x48ce5c[_0xd5e5('0x3b')][_0xd5e5('0x3d')]));_0x599c7c[_0xd5e5('0x3e')]=_0x599c7c[_0xd5e5('0x3e')][_0xd5e5('0x4f')]?_0x599c7c[_0xd5e5('0x3e')]:_0x3bd2cc[_0xd5e5('0x39')];if(!_0x48ce5c[_0xd5e5('0x3b')][_0xd5e5('0x3f')](_0xd5e5('0x40'))){_0x599c7c['limit']=qs[_0xd5e5('0x20')](_0x48ce5c[_0xd5e5('0x3b')][_0xd5e5('0x20')]);_0x599c7c[_0xd5e5('0x1f')]=qs[_0xd5e5('0x1f')](_0x48ce5c[_0xd5e5('0x3b')][_0xd5e5('0x1f')]);}_0x599c7c[_0xd5e5('0x41')]=qs[_0xd5e5('0x42')](_0x48ce5c['query']['sort']);_0x599c7c[_0xd5e5('0x43')]=qs[_0xd5e5('0x44')](_[_0xd5e5('0x63')](_0x48ce5c[_0xd5e5('0x3b')],_0x3bd2cc['filters']));_0x599c7c[_0xd5e5('0x43')][_0xd5e5('0x64')]=_0x1c5f29['id'];if(_0x48ce5c[_0xd5e5('0x3b')][_0xd5e5('0x47')]){_0x599c7c[_0xd5e5('0x43')]=_[_0xd5e5('0x45')](_0x599c7c[_0xd5e5('0x43')],{'$or':_['map'](_0x599c7c[_0xd5e5('0x3e')],function(_0x566eae){var _0x2d1519={};_0x2d1519[_0x566eae]={'$like':'%'+_0x48ce5c[_0xd5e5('0x3b')][_0xd5e5('0x47')]+'%'};return _0x2d1519;})});}_0x599c7c=_[_0xd5e5('0x45')]({},_0x599c7c,_0x48ce5c[_0xd5e5('0x50')]);return db[_0xd5e5('0x68')][_0xd5e5('0x1e')]({'where':_0x599c7c[_0xd5e5('0x43')]})[_0xd5e5('0x25')](function(_0x4e8d3c){_0xee088b['count']=_0x4e8d3c;if(_0x48ce5c[_0xd5e5('0x3b')][_0xd5e5('0x48')]){_0x599c7c[_0xd5e5('0x49')]=[{'all':!![]}];}return db['CmHopperFinal'][_0xd5e5('0x4a')](_0x599c7c);})['then'](function(_0x411e75){_0xee088b[_0xd5e5('0x4b')]=_0x411e75;return _0xee088b;});}})['then'](respondWithFilteredResult(_0x1336da,_0x599c7c))[_0xd5e5('0x4c')](handleError(_0x1336da,null));};exports['getHopperBlacks']=function(_0x317049,_0x696654,_0x3c95f6){var _0x738c1b={'raw':!![],'where':{}};var _0x5e1542={};var _0x21af10={'count':0x0,'rows':[]};return db[_0xd5e5('0x37')][_0xd5e5('0x61')]({'where':{'id':_0x317049[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x696654,null))[_0xd5e5('0x25')](function(_0x6c3306){if(_0x6c3306){_0x5e1542[_0xd5e5('0x39')]=_[_0xd5e5('0x3a')](db['CmHopperBlack'][_0xd5e5('0x38')]);_0x5e1542[_0xd5e5('0x3b')]=_[_0xd5e5('0x3a')](_0x317049[_0xd5e5('0x3b')]);_0x5e1542[_0xd5e5('0x44')]=_[_0xd5e5('0x3c')](_0x5e1542[_0xd5e5('0x39')],_0x5e1542[_0xd5e5('0x3b')]);_0x738c1b[_0xd5e5('0x3e')]=_[_0xd5e5('0x3c')](_0x5e1542[_0xd5e5('0x39')],qs[_0xd5e5('0x3d')](_0x317049[_0xd5e5('0x3b')][_0xd5e5('0x3d')]));_0x738c1b[_0xd5e5('0x3e')]=_0x738c1b[_0xd5e5('0x3e')][_0xd5e5('0x4f')]?_0x738c1b[_0xd5e5('0x3e')]:_0x5e1542['model'];if(!_0x317049[_0xd5e5('0x3b')]['hasOwnProperty'](_0xd5e5('0x40'))){_0x738c1b['limit']=qs['limit'](_0x317049[_0xd5e5('0x3b')]['limit']);_0x738c1b['offset']=qs[_0xd5e5('0x1f')](_0x317049[_0xd5e5('0x3b')]['offset']);}_0x738c1b[_0xd5e5('0x41')]=qs[_0xd5e5('0x42')](_0x317049[_0xd5e5('0x3b')][_0xd5e5('0x42')]);_0x738c1b[_0xd5e5('0x43')]=qs[_0xd5e5('0x44')](_[_0xd5e5('0x63')](_0x317049[_0xd5e5('0x3b')],_0x5e1542['filters']));_0x738c1b[_0xd5e5('0x43')]['VoiceQueueId']=_0x6c3306['id'];if(_0x317049[_0xd5e5('0x3b')]['filter']){_0x738c1b['where']=_['merge'](_0x738c1b[_0xd5e5('0x43')],{'$or':_[_0xd5e5('0x2a')](_0x738c1b[_0xd5e5('0x3e')],function(_0x4bfab1){var _0x425e07={};_0x425e07[_0x4bfab1]={'$like':'%'+_0x317049[_0xd5e5('0x3b')][_0xd5e5('0x47')]+'%'};return _0x425e07;})});}_0x738c1b=_[_0xd5e5('0x45')]({},_0x738c1b,_0x317049[_0xd5e5('0x50')]);return db['CmHopperBlack'][_0xd5e5('0x1e')]({'where':_0x738c1b['where']})[_0xd5e5('0x25')](function(_0x355c3b){_0x21af10['count']=_0x355c3b;if(_0x317049['query'][_0xd5e5('0x48')]){_0x738c1b['include']=[{'all':!![]}];}return db[_0xd5e5('0x69')]['findAll'](_0x738c1b);})[_0xd5e5('0x25')](function(_0x51835b){_0x21af10[_0xd5e5('0x4b')]=_0x51835b;return _0x21af10;});}})[_0xd5e5('0x25')](respondWithFilteredResult(_0x696654,_0x738c1b))[_0xd5e5('0x4c')](handleError(_0x696654,null));};exports[_0xd5e5('0x6a')]=function(_0x20ed7e,_0xadff78,_0x560605){var _0x55d25f={};var _0x3136e4={};var _0x35ee96;var _0x65adb2;return db['VoiceQueue'][_0xd5e5('0x61')]({'where':{'id':_0x20ed7e[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0xadff78,null))[_0xd5e5('0x25')](function(_0xefbd74){if(_0xefbd74){_0x35ee96=_0xefbd74;_0x3136e4['model']=_[_0xd5e5('0x3a')](db[_0xd5e5('0x6b')][_0xd5e5('0x38')]);_0x3136e4['query']=_[_0xd5e5('0x3a')](_0x20ed7e[_0xd5e5('0x3b')]);_0x3136e4[_0xd5e5('0x44')]=_[_0xd5e5('0x3c')](_0x3136e4[_0xd5e5('0x39')],_0x3136e4[_0xd5e5('0x3b')]);_0x55d25f[_0xd5e5('0x3e')]=_[_0xd5e5('0x3c')](_0x3136e4[_0xd5e5('0x39')],qs[_0xd5e5('0x3d')](_0x20ed7e[_0xd5e5('0x3b')][_0xd5e5('0x3d')]));_0x55d25f[_0xd5e5('0x3e')]=_0x55d25f[_0xd5e5('0x3e')][_0xd5e5('0x4f')]?_0x55d25f[_0xd5e5('0x3e')]:_0x3136e4[_0xd5e5('0x39')];_0x55d25f[_0xd5e5('0x41')]=qs['sort'](_0x20ed7e['query']['sort']);_0x55d25f[_0xd5e5('0x43')]=qs['filters'](_['pick'](_0x20ed7e[_0xd5e5('0x3b')],_0x3136e4['filters']));if(_0x20ed7e['query'][_0xd5e5('0x47')]){_0x55d25f[_0xd5e5('0x43')]=_[_0xd5e5('0x45')](_0x55d25f['where'],{'$or':_[_0xd5e5('0x2a')](_0x55d25f[_0xd5e5('0x3e')],function(_0x53d0ff){var _0x295318={};_0x295318[_0x53d0ff]={'$like':'%'+_0x20ed7e[_0xd5e5('0x3b')]['filter']+'%'};return _0x295318;})});}_0x55d25f=_[_0xd5e5('0x45')]({},_0x55d25f,_0x20ed7e['options']);return _0x35ee96[_0xd5e5('0x6a')](_0x55d25f);}})[_0xd5e5('0x25')](function(_0x4af244){if(_0x4af244){_0x65adb2=_0x4af244[_0xd5e5('0x4f')];if(!_0x20ed7e[_0xd5e5('0x3b')][_0xd5e5('0x3f')]('nolimit')){_0x55d25f[_0xd5e5('0x20')]=qs['limit'](_0x20ed7e[_0xd5e5('0x3b')][_0xd5e5('0x20')]);_0x55d25f[_0xd5e5('0x1f')]=qs['offset'](_0x20ed7e[_0xd5e5('0x3b')][_0xd5e5('0x1f')]);}return _0x35ee96[_0xd5e5('0x6a')](_0x55d25f);}})['then'](function(_0x39084a){if(_0x39084a){return _0x39084a?{'count':_0x65adb2,'rows':_0x39084a}:null;}})[_0xd5e5('0x25')](respondWithResult(_0xadff78,null))[_0xd5e5('0x4c')](handleError(_0xadff78,null));};exports[_0xd5e5('0x6c')]=function(_0x49a71d,_0x57c2e9,_0x150c70){var _0x25b930=[];var _0x59b014;return db['Team'][_0xd5e5('0x4a')]({'where':{'id':_0x49a71d[_0xd5e5('0x52')][_0xd5e5('0x6d')]},'attributes':['id'],'include':[{'model':db[_0xd5e5('0x6e')],'as':_0xd5e5('0x6f'),'attributes':['id'],'raw':!![]}]})[_0xd5e5('0x25')](function(_0x5491a5){if(_0x5491a5){for(var _0x5bfcab=0x0;_0x5bfcab<_0x5491a5['length'];_0x5bfcab+=0x1){for(var _0x291d0d=0x0;_0x291d0d<_0x5491a5[_0x5bfcab]['Agents'][_0xd5e5('0x4f')];_0x291d0d+=0x1){_0x25b930=_[_0xd5e5('0x70')](_0x25b930,[_0x5491a5[_0x5bfcab]['Agents'][_0x291d0d]['id']]);}}return _0x25b930;}})[_0xd5e5('0x25')](function(_0x926ed5){if(_0x926ed5){return db[_0xd5e5('0x37')]['find']({'where':{'id':_0x49a71d[_0xd5e5('0x4e')]['id']}});}})['then'](function(_0x2d5722){if(_0x2d5722){_0x59b014=_0x2d5722;return _0x59b014[_0xd5e5('0x71')](_0x25b930,{'penalty':_0x49a71d[_0xd5e5('0x52')][_0xd5e5('0x72')]});}})['then'](function(_0x2d5e02){if(_0x2d5e02){return _0x59b014['addTeams'](_0x49a71d['body'][_0xd5e5('0x6d')]);}})[_0xd5e5('0x25')](handleEntityNotFound(_0x57c2e9,null))[_0xd5e5('0x25')](respondWithStatusCode(_0x57c2e9,null))[_0xd5e5('0x4c')](handleError(_0x57c2e9,null));};exports[_0xd5e5('0x73')]=function(_0x499084,_0x598da2,_0xc3dce6){var _0x672bb9=[];var _0x32a5fe;return db[_0xd5e5('0x6b')][_0xd5e5('0x4a')]({'where':{'id':_0x499084['query']['ids']},'attributes':['id'],'include':[{'model':db[_0xd5e5('0x6e')],'as':_0xd5e5('0x6f'),'attributes':['id'],'raw':!![]}]})[_0xd5e5('0x25')](function(_0x20c794){if(_0x20c794){for(var _0x19fb4b=0x0;_0x19fb4b<_0x20c794[_0xd5e5('0x4f')];_0x19fb4b+=0x1){for(var _0x52a671=0x0;_0x52a671<_0x20c794[_0x19fb4b][_0xd5e5('0x6f')][_0xd5e5('0x4f')];_0x52a671+=0x1){_0x672bb9=_[_0xd5e5('0x70')](_0x672bb9,[_0x20c794[_0x19fb4b][_0xd5e5('0x6f')][_0x52a671]['id']]);}}return _0x672bb9;}})[_0xd5e5('0x25')](function(_0x10a8f5){if(_0x10a8f5){return db[_0xd5e5('0x37')][_0xd5e5('0x2e')]({'where':{'id':_0x499084[_0xd5e5('0x4e')]['id']}});}})[_0xd5e5('0x25')](function(_0x45bfb0){if(_0x45bfb0){_0x32a5fe=_0x45bfb0;return _0x32a5fe[_0xd5e5('0x74')](_0x672bb9);}})[_0xd5e5('0x25')](function(_0x3227e8){if(_0x32a5fe){return _0x32a5fe[_0xd5e5('0x73')](_0x499084['query'][_0xd5e5('0x6d')]);}})[_0xd5e5('0x25')](handleEntityNotFound(_0x598da2,null))['then'](respondWithStatusCode(_0x598da2,null))[_0xd5e5('0x4c')](handleError(_0x598da2,null));};exports[_0xd5e5('0x71')]=function(_0x3d5cfb,_0x82cb30,_0x30cf10){var _0x38c7ee,_0x49de00;return db[_0xd5e5('0x37')]['find']({'where':{'id':_0x3d5cfb[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x82cb30,null))['then'](function(_0x3bdcc1){if(_0x3bdcc1){_0x49de00=_0x3bdcc1;return _0x3bdcc1[_0xd5e5('0x71')](_0x3d5cfb[_0xd5e5('0x52')][_0xd5e5('0x6d')],_['omit'](_0x3d5cfb[_0xd5e5('0x52')],[_0xd5e5('0x6d'),'id'])||{})[_0xd5e5('0x75')](function(_0x2be7ba){for(var _0x59c224=0x0;_0x59c224<_0x3d5cfb[_0xd5e5('0x52')][_0xd5e5('0x6d')]['length'];_0x59c224+=0x1){socket[_0xd5e5('0x76')](_0xd5e5('0x77'),{'UserId':_0x3d5cfb[_0xd5e5('0x52')]['ids'][_0x59c224],'VoiceQueueId':_0x3d5cfb[_0xd5e5('0x4e')]['id']});}return _0x2be7ba;});}})[_0xd5e5('0x25')](function(_0x1510f6){_0x38c7ee=_0x1510f6||[];if(_0x49de00){return db[_0xd5e5('0x6e')][_0xd5e5('0x4a')]({'where':{'id':_0x3d5cfb[_0xd5e5('0x52')]['ids']},'attributes':['id',_0xd5e5('0x2f'),_0xd5e5('0x78'),_0xd5e5('0x79'),_0xd5e5('0x7a')],'raw':!![]});}})[_0xd5e5('0x25')](function(_0x336b90){if(_0x336b90&&_0x336b90['length']){var _0x2c5bb8=[];for(var _0x4b116a=0x0;_0x4b116a<_0x336b90[_0xd5e5('0x4f')];_0x4b116a++){_0x2c5bb8['push'](db[_0xd5e5('0x7b')][_0xd5e5('0x7c')]({'membername':_0x336b90[_0x4b116a][_0xd5e5('0x2f')],'UserId':_0x336b90[_0x4b116a]['id'],'queue_name':_0x49de00['name'],'VoiceQueueId':_0x49de00['id'],'interface':_['isNil'](_0x336b90[_0x4b116a][_0xd5e5('0x7a')])?util[_0xd5e5('0x7d')](_0xd5e5('0x7e'),_0x336b90[_0x4b116a][_0xd5e5('0x2f')]):_0x336b90[_0x4b116a][_0xd5e5('0x7a')],'paused':_0x336b90[_0x4b116a]['voicePause']||![],'penalty':_0x3d5cfb['body'][_0xd5e5('0x72')]||0x0}));}return BPromise[_0xd5e5('0x7f')](_0x2c5bb8);}})[_0xd5e5('0x25')](function(_0x3eef4c){return _0x38c7ee;})[_0xd5e5('0x25')](respondWithResult(_0x82cb30,null))['catch'](handleError(_0x82cb30,null));};exports[_0xd5e5('0x74')]=function(_0x47d4b2,_0x1ed4a6,_0x5b66ca){var _0x184832;return db['VoiceQueue']['find']({'where':{'id':_0x47d4b2[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x1ed4a6,null))[_0xd5e5('0x25')](function(_0x83e587){if(_0x83e587){return _0x83e587[_0xd5e5('0x74')](_0x47d4b2[_0xd5e5('0x3b')][_0xd5e5('0x6d')])[_0xd5e5('0x25')](function(_0x57a1ea){if(_[_0xd5e5('0x80')](_0x47d4b2[_0xd5e5('0x3b')][_0xd5e5('0x6d')])){for(var _0x1c40cd=0x0;_0x1c40cd<_0x47d4b2[_0xd5e5('0x3b')]['ids']['length'];_0x1c40cd+=0x1){socket[_0xd5e5('0x76')](_0xd5e5('0x81'),{'UserId':_0x47d4b2[_0xd5e5('0x3b')][_0xd5e5('0x6d')][_0x1c40cd],'VoiceQueueId':_0x47d4b2[_0xd5e5('0x4e')]['id']});}}else{socket[_0xd5e5('0x76')]('userVoiceQueue:remove',{'UserId':_0x47d4b2['query'][_0xd5e5('0x6d')],'VoiceQueueId':_0x47d4b2[_0xd5e5('0x4e')]['id']});}});}})['then'](function(_0x3d0e59){if(_0x47d4b2[_0xd5e5('0x3b')]['realtime']){_0x184832=_0x3d0e59;return db[_0xd5e5('0x7b')][_0xd5e5('0x31')]({'where':{'VoiceQueueId':_0x47d4b2[_0xd5e5('0x4e')]['id'],'UserId':_0x47d4b2[_0xd5e5('0x3b')][_0xd5e5('0x6d')]}})['then'](function(){return _0x184832;});}})[_0xd5e5('0x25')](respondWithStatusCode(_0x1ed4a6,null))['catch'](handleError(_0x1ed4a6,null));};exports[_0xd5e5('0x82')]=function(_0x3ae869,_0x47a940,_0x80f5d4){var _0x3c9182={};var _0x4c07d5={};var _0x2f9ccc;var _0x5186ef;return db['VoiceQueue'][_0xd5e5('0x61')]({'where':{'id':_0x3ae869[_0xd5e5('0x4e')]['id']}})['then'](handleEntityNotFound(_0x47a940,null))['then'](function(_0x25f001){if(_0x25f001){_0x2f9ccc=_0x25f001;_0x4c07d5['model']=_[_0xd5e5('0x3a')](db[_0xd5e5('0x6e')][_0xd5e5('0x38')]);_0x4c07d5['query']=_[_0xd5e5('0x3a')](_0x3ae869['query']);_0x4c07d5[_0xd5e5('0x44')]=_[_0xd5e5('0x3c')](_0x4c07d5['model'],_0x4c07d5[_0xd5e5('0x3b')]);_0x3c9182[_0xd5e5('0x3e')]=_[_0xd5e5('0x3c')](_0x4c07d5['model'],qs[_0xd5e5('0x3d')](_0x3ae869['query']['fields']));_0x3c9182[_0xd5e5('0x3e')]=_0x3c9182[_0xd5e5('0x3e')][_0xd5e5('0x4f')]?_0x3c9182[_0xd5e5('0x3e')]:_0x4c07d5[_0xd5e5('0x39')];_0x3c9182[_0xd5e5('0x41')]=qs[_0xd5e5('0x42')](_0x3ae869[_0xd5e5('0x3b')]['sort']);_0x3c9182['where']=qs['filters'](_[_0xd5e5('0x63')](_0x3ae869[_0xd5e5('0x3b')],_0x4c07d5[_0xd5e5('0x44')]));if(_0x3ae869[_0xd5e5('0x3b')][_0xd5e5('0x47')]){_0x3c9182[_0xd5e5('0x43')]=_[_0xd5e5('0x45')](_0x3c9182[_0xd5e5('0x43')],{'$or':_[_0xd5e5('0x2a')](_0x3c9182[_0xd5e5('0x3e')],function(_0x1384b7){var _0x5890ac={};_0x5890ac[_0x1384b7]={'$like':'%'+_0x3ae869[_0xd5e5('0x3b')][_0xd5e5('0x47')]+'%'};return _0x5890ac;})});}_0x3c9182=_['merge']({},_0x3c9182,_0x3ae869[_0xd5e5('0x50')]);return _0x2f9ccc['getAgents'](_0x3c9182);}})[_0xd5e5('0x25')](function(_0x10223f){if(_0x10223f){_0x5186ef=_0x10223f[_0xd5e5('0x4f')];if(!_0x3ae869[_0xd5e5('0x3b')][_0xd5e5('0x3f')](_0xd5e5('0x40'))){_0x3c9182['limit']=qs[_0xd5e5('0x20')](_0x3ae869[_0xd5e5('0x3b')]['limit']);_0x3c9182[_0xd5e5('0x1f')]=qs[_0xd5e5('0x1f')](_0x3ae869['query'][_0xd5e5('0x1f')]);}return _0x2f9ccc[_0xd5e5('0x82')](_0x3c9182);}})[_0xd5e5('0x25')](function(_0x4db179){if(_0x4db179){return _0x4db179?{'count':_0x5186ef,'rows':_0x4db179}:null;}})[_0xd5e5('0x25')](respondWithResult(_0x47a940,null))[_0xd5e5('0x4c')](handleError(_0x47a940,null));};exports[_0xd5e5('0x83')]=function(_0x58cb22,_0x514546,_0x5ba4d1){var _0x46e1ca={};var _0x4cee9f={};var _0x267391;var _0x3f0eaa;return db['VoiceQueue']['findOne']({'where':{'id':_0x58cb22[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x514546,null))[_0xd5e5('0x25')](function(_0x269355){if(_0x269355){_0x267391=_0x269355;_0x4cee9f[_0xd5e5('0x39')]=_[_0xd5e5('0x3a')](db[_0xd5e5('0x7b')][_0xd5e5('0x38')]);_0x4cee9f[_0xd5e5('0x3b')]=_[_0xd5e5('0x3a')](_0x58cb22[_0xd5e5('0x3b')]);_0x4cee9f[_0xd5e5('0x44')]=_[_0xd5e5('0x3c')](_0x4cee9f[_0xd5e5('0x39')],_0x4cee9f[_0xd5e5('0x3b')]);_0x46e1ca[_0xd5e5('0x3e')]=_['intersection'](_0x4cee9f[_0xd5e5('0x39')],qs[_0xd5e5('0x3d')](_0x58cb22[_0xd5e5('0x3b')][_0xd5e5('0x3d')]));_0x46e1ca[_0xd5e5('0x3e')]=_0x46e1ca[_0xd5e5('0x3e')][_0xd5e5('0x4f')]?_0x46e1ca[_0xd5e5('0x3e')]:_0x4cee9f[_0xd5e5('0x39')];_0x46e1ca[_0xd5e5('0x41')]=qs['sort'](_0x58cb22[_0xd5e5('0x3b')]['sort']);_0x46e1ca[_0xd5e5('0x43')]=qs[_0xd5e5('0x44')](_[_0xd5e5('0x63')](_0x58cb22[_0xd5e5('0x3b')],_0x4cee9f[_0xd5e5('0x44')]));if(_0x58cb22['query'][_0xd5e5('0x47')]){_0x46e1ca['where']=_[_0xd5e5('0x45')](_0x46e1ca[_0xd5e5('0x43')],{'$or':_['map'](_0x46e1ca[_0xd5e5('0x3e')],function(_0x24ca5f){var _0xd02a3c={};_0xd02a3c[_0x24ca5f]={'$like':'%'+_0x58cb22[_0xd5e5('0x3b')][_0xd5e5('0x47')]+'%'};return _0xd02a3c;})});}_0x46e1ca=_[_0xd5e5('0x45')]({},_0x46e1ca,_0x58cb22[_0xd5e5('0x50')]);return _0x267391['getMembers'](_0x46e1ca);}})[_0xd5e5('0x25')](function(_0x4c5d88){if(_0x4c5d88){_0x3f0eaa=_0x4c5d88[_0xd5e5('0x4f')];if(!_0x58cb22[_0xd5e5('0x3b')][_0xd5e5('0x3f')](_0xd5e5('0x40'))){_0x46e1ca[_0xd5e5('0x20')]=qs['limit'](_0x58cb22['query'][_0xd5e5('0x20')]);_0x46e1ca[_0xd5e5('0x1f')]=qs['offset'](_0x58cb22[_0xd5e5('0x3b')][_0xd5e5('0x1f')]);}return _0x267391[_0xd5e5('0x83')](_0x46e1ca);}})[_0xd5e5('0x25')](function(_0x48d857){return _0x48d857?{'count':_0x3f0eaa,'rows':_0x48d857}:null;})['then'](respondWithResult(_0x514546,null))[_0xd5e5('0x4c')](handleError(_0x514546,null));};exports['getLists']=function(_0x1d7a52,_0x46a8e9,_0x537a21){var _0x2fe2f3={};var _0x475141={};var _0x4963af;var _0x38f6ba;return db[_0xd5e5('0x37')][_0xd5e5('0x61')]({'where':{'id':_0x1d7a52[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x46a8e9,null))['then'](function(_0x41abab){if(_0x41abab){_0x4963af=_0x41abab;_0x475141[_0xd5e5('0x39')]=_[_0xd5e5('0x3a')](db[_0xd5e5('0x84')][_0xd5e5('0x38')]);_0x475141[_0xd5e5('0x3b')]=_[_0xd5e5('0x3a')](_0x1d7a52['query']);_0x475141[_0xd5e5('0x44')]=_[_0xd5e5('0x3c')](_0x475141[_0xd5e5('0x39')],_0x475141['query']);_0x2fe2f3[_0xd5e5('0x3e')]=_[_0xd5e5('0x3c')](_0x475141['model'],qs[_0xd5e5('0x3d')](_0x1d7a52[_0xd5e5('0x3b')][_0xd5e5('0x3d')]));_0x2fe2f3[_0xd5e5('0x3e')]=_0x2fe2f3[_0xd5e5('0x3e')][_0xd5e5('0x4f')]?_0x2fe2f3['attributes']:_0x475141[_0xd5e5('0x39')];_0x2fe2f3[_0xd5e5('0x41')]=qs['sort'](_0x1d7a52[_0xd5e5('0x3b')][_0xd5e5('0x42')]);_0x2fe2f3['where']=qs['filters'](_[_0xd5e5('0x63')](_0x1d7a52[_0xd5e5('0x3b')],_0x475141[_0xd5e5('0x44')]));if(_0x1d7a52[_0xd5e5('0x3b')][_0xd5e5('0x47')]){_0x2fe2f3[_0xd5e5('0x43')]=_[_0xd5e5('0x45')](_0x2fe2f3[_0xd5e5('0x43')],{'$or':_[_0xd5e5('0x2a')](_0x2fe2f3[_0xd5e5('0x3e')],function(_0x582d1d){var _0x5b503f={};_0x5b503f[_0x582d1d]={'$like':'%'+_0x1d7a52[_0xd5e5('0x3b')][_0xd5e5('0x47')]+'%'};return _0x5b503f;})});}_0x2fe2f3=_[_0xd5e5('0x45')]({},_0x2fe2f3,_0x1d7a52[_0xd5e5('0x50')]);return _0x4963af['getLists'](_0x2fe2f3);}})['then'](function(_0x1c4309){if(_0x1c4309){_0x38f6ba=_0x1c4309['length'];if(!_0x1d7a52[_0xd5e5('0x3b')][_0xd5e5('0x3f')]('nolimit')){_0x2fe2f3[_0xd5e5('0x20')]=qs['limit'](_0x1d7a52[_0xd5e5('0x3b')]['limit']);_0x2fe2f3[_0xd5e5('0x1f')]=qs[_0xd5e5('0x1f')](_0x1d7a52[_0xd5e5('0x3b')][_0xd5e5('0x1f')]);}return _0x4963af[_0xd5e5('0x85')](_0x2fe2f3);}})[_0xd5e5('0x25')](function(_0x5dbcc5){if(_0x5dbcc5){return _0x5dbcc5?{'count':_0x38f6ba,'rows':_0x5dbcc5}:null;}})[_0xd5e5('0x25')](respondWithResult(_0x46a8e9,null))[_0xd5e5('0x4c')](handleError(_0x46a8e9,null));};exports['addLists']=function(_0x488699,_0x5586d6,_0x374464){var _0x209b14,_0x4f19a0;return db[_0xd5e5('0x37')]['find']({'where':{'id':_0x488699['params']['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x5586d6,null))[_0xd5e5('0x25')](function(_0x15be0a){if(_0x15be0a){_0x4f19a0=_0x15be0a;return _0x15be0a['addLists'](_0x488699[_0xd5e5('0x52')]['ids'],_[_0xd5e5('0x5c')](_0x488699[_0xd5e5('0x52')],[_0xd5e5('0x6d'),'id'])||{});}return null;})[_0xd5e5('0x75')](function(_0x5d8cc6){var _0x507e26;_0x209b14=_0x5d8cc6||[];var _0x51afbe=[];if(_0x5d8cc6){for(var _0x50c4fa=0x0;_0x50c4fa<_0x5d8cc6[_0xd5e5('0x4f')];_0x50c4fa+=0x1){var _0x15704d=_0x5d8cc6[_0x50c4fa]['get']({'plain':!![]});_0x4f19a0[_0xd5e5('0x86')]=_0x488699['body']['dialCheckDuplicateType']?_0x488699['body'][_0xd5e5('0x86')]:_0x4f19a0[_0xd5e5('0x86')];switch(_0x4f19a0[_0xd5e5('0x86')]){case _0xd5e5('0x87'):_0x507e26=squel[_0xd5e5('0x88')]()[_0xd5e5('0x89')](_0xd5e5('0x8a'))[_0xd5e5('0x8b')]([_0xd5e5('0x8c'),_0xd5e5('0x8d'),_0xd5e5('0x8e'),_0xd5e5('0x8f'),_0xd5e5('0x64'),'createdAt',_0xd5e5('0x5d')],squel[_0xd5e5('0x90')]()['field']('phone',_0xd5e5('0x8c'))['field'](_0xd5e5('0x91'),'scheduledAt')[_0xd5e5('0x46')]('id',_0xd5e5('0x8e'))['field'](_0x15704d[_0xd5e5('0x92')][_0xd5e5('0x93')](),_0xd5e5('0x8f'))['field'](_0x488699[_0xd5e5('0x4e')]['id'][_0xd5e5('0x93')](),_0xd5e5('0x64'))['field'](_0xd5e5('0x91'),_0xd5e5('0x5e'))['field']('NOW()',_0xd5e5('0x5d'))[_0xd5e5('0x94')](_0xd5e5('0x95'))[_0xd5e5('0x43')](_0xd5e5('0x96'))['where'](_0xd5e5('0x97'),_0x15704d[_0xd5e5('0x92')]['toString']())[_0xd5e5('0x43')](_0xd5e5('0x98'))[_0xd5e5('0x43')](_0xd5e5('0x99'),squel['select']()['field'](_0xd5e5('0x9a'))[_0xd5e5('0x94')](_0xd5e5('0x9b'))[_0xd5e5('0x43')](_0xd5e5('0x9c'),_0x488699[_0xd5e5('0x4e')]['id'][_0xd5e5('0x93')]()))[_0xd5e5('0x43')]('phone\x20NOT\x20IN\x20(?)',squel[_0xd5e5('0x90')]()[_0xd5e5('0x46')](_0xd5e5('0x9d'))[_0xd5e5('0x94')](_0xd5e5('0x8a'))['where'](_0xd5e5('0x9c'),_0x488699[_0xd5e5('0x4e')]['id'][_0xd5e5('0x93')]())))['toString']();break;case'onlyIfOpen':_0x507e26=squel['insert']()[_0xd5e5('0x89')](_0xd5e5('0x8a'))['fromQuery']([_0xd5e5('0x8c'),_0xd5e5('0x8d'),'ContactId','ListId',_0xd5e5('0x64'),'createdAt','updatedAt'],squel[_0xd5e5('0x90')]()[_0xd5e5('0x46')](_0xd5e5('0x8c'),_0xd5e5('0x8c'))[_0xd5e5('0x46')](_0xd5e5('0x91'),_0xd5e5('0x8d'))[_0xd5e5('0x46')]('id',_0xd5e5('0x8e'))[_0xd5e5('0x46')](_0x15704d[_0xd5e5('0x92')][_0xd5e5('0x93')](),_0xd5e5('0x8f'))['field'](_0x488699[_0xd5e5('0x4e')]['id'][_0xd5e5('0x93')](),_0xd5e5('0x64'))[_0xd5e5('0x46')](_0xd5e5('0x91'),'createdAt')[_0xd5e5('0x46')]('NOW()',_0xd5e5('0x5d'))['from'](_0xd5e5('0x95'))[_0xd5e5('0x43')](_0xd5e5('0x96'))[_0xd5e5('0x43')](_0xd5e5('0x97'),_0x15704d[_0xd5e5('0x92')]['toString']())[_0xd5e5('0x43')](_0xd5e5('0x98'))['where']('phone\x20NOT\x20IN\x20(?)',squel['select']()[_0xd5e5('0x46')](_0xd5e5('0x9d'))[_0xd5e5('0x94')](_0xd5e5('0x8a'))[_0xd5e5('0x43')](_0xd5e5('0x9c'),_0x488699[_0xd5e5('0x4e')]['id'][_0xd5e5('0x93')]())))['toString']();break;default:_0x507e26=squel[_0xd5e5('0x88')]()[_0xd5e5('0x89')](_0xd5e5('0x8a'))[_0xd5e5('0x8b')]([_0xd5e5('0x8c'),_0xd5e5('0x8d'),_0xd5e5('0x8e'),_0xd5e5('0x8f'),_0xd5e5('0x64'),'createdAt',_0xd5e5('0x5d')],squel[_0xd5e5('0x90')]()[_0xd5e5('0x46')]('phone',_0xd5e5('0x8c'))[_0xd5e5('0x46')](_0xd5e5('0x91'),_0xd5e5('0x8d'))[_0xd5e5('0x46')]('id',_0xd5e5('0x8e'))['field'](_0x15704d[_0xd5e5('0x92')][_0xd5e5('0x93')](),_0xd5e5('0x8f'))[_0xd5e5('0x46')](_0x488699[_0xd5e5('0x4e')]['id'][_0xd5e5('0x93')](),_0xd5e5('0x64'))['field']('NOW()',_0xd5e5('0x5e'))[_0xd5e5('0x46')](_0xd5e5('0x91'),_0xd5e5('0x5d'))[_0xd5e5('0x94')](_0xd5e5('0x95'))[_0xd5e5('0x43')](_0xd5e5('0x96'))[_0xd5e5('0x43')](_0xd5e5('0x97'),_0x15704d[_0xd5e5('0x92')][_0xd5e5('0x93')]())['where'](_0xd5e5('0x98')))[_0xd5e5('0x93')]();}_0x51afbe['push'](db[_0xd5e5('0x9e')][_0xd5e5('0x3b')](_0x507e26));}return BPromise[_0xd5e5('0x7f')](_0x51afbe);}})[_0xd5e5('0x25')](function(){return _0x209b14;})[_0xd5e5('0x25')](respondWithResult(_0x5586d6,null))[_0xd5e5('0x4c')](handleError(_0x5586d6,null));};exports['removeLists']=function(_0x337b12,_0x160c5d,_0xe7191a){var _0x4a5239;return db[_0xd5e5('0x37')]['find']({'where':{'id':_0x337b12['params']['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x160c5d,null))[_0xd5e5('0x25')](function(_0x5727bf){if(_0x5727bf){return _0x5727bf[_0xd5e5('0x9f')](_0x337b12[_0xd5e5('0x3b')][_0xd5e5('0x6d')]);}})[_0xd5e5('0x25')](function(_0x2e1805){if(_0x2e1805){_0x4a5239=_0x2e1805;return db['CmHopper'][_0xd5e5('0x31')]({'where':{'ListId':_0x337b12[_0xd5e5('0x3b')][_0xd5e5('0x6d')],'VoiceQueueId':_0x337b12['params']['id']}})[_0xd5e5('0x25')](function(){return _0x4a5239;});}})[_0xd5e5('0x25')](respondWithStatusCode(_0x160c5d,null))['catch'](handleError(_0x160c5d,null));};exports[_0xd5e5('0xa0')]=function(_0x5b96c4,_0x3e6ef6,_0x127ec0){var _0x735a5d={};var _0xa98628={};var _0x10313d;var _0x1dd544;return db[_0xd5e5('0x37')][_0xd5e5('0x61')]({'where':{'id':_0x5b96c4[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x3e6ef6,null))['then'](function(_0x173007){if(_0x173007){_0x10313d=_0x173007;_0xa98628[_0xd5e5('0x39')]=_[_0xd5e5('0x3a')](db['CmList']['rawAttributes']);_0xa98628[_0xd5e5('0x3b')]=_[_0xd5e5('0x3a')](_0x5b96c4[_0xd5e5('0x3b')]);_0xa98628['filters']=_[_0xd5e5('0x3c')](_0xa98628[_0xd5e5('0x39')],_0xa98628[_0xd5e5('0x3b')]);_0x735a5d[_0xd5e5('0x3e')]=_[_0xd5e5('0x3c')](_0xa98628[_0xd5e5('0x39')],qs[_0xd5e5('0x3d')](_0x5b96c4['query'][_0xd5e5('0x3d')]));_0x735a5d[_0xd5e5('0x3e')]=_0x735a5d['attributes'][_0xd5e5('0x4f')]?_0x735a5d[_0xd5e5('0x3e')]:_0xa98628[_0xd5e5('0x39')];_0x735a5d['order']=qs['sort'](_0x5b96c4['query'][_0xd5e5('0x42')]);_0x735a5d['where']=qs['filters'](_[_0xd5e5('0x63')](_0x5b96c4[_0xd5e5('0x3b')],_0xa98628[_0xd5e5('0x44')]));if(_0x5b96c4[_0xd5e5('0x3b')][_0xd5e5('0x47')]){_0x735a5d['where']=_['merge'](_0x735a5d[_0xd5e5('0x43')],{'$or':_[_0xd5e5('0x2a')](_0x735a5d[_0xd5e5('0x3e')],function(_0x48c9a4){var _0x2382d2={};_0x2382d2[_0x48c9a4]={'$like':'%'+_0x5b96c4[_0xd5e5('0x3b')][_0xd5e5('0x47')]+'%'};return _0x2382d2;})});}_0x735a5d=_[_0xd5e5('0x45')]({},_0x735a5d,_0x5b96c4['options']);return _0x10313d[_0xd5e5('0xa0')](_0x735a5d);}})[_0xd5e5('0x25')](function(_0x1d4a47){if(_0x1d4a47){_0x1dd544=_0x1d4a47[_0xd5e5('0x4f')];if(!_0x5b96c4['query'][_0xd5e5('0x3f')](_0xd5e5('0x40'))){_0x735a5d[_0xd5e5('0x20')]=qs[_0xd5e5('0x20')](_0x5b96c4['query']['limit']);_0x735a5d[_0xd5e5('0x1f')]=qs[_0xd5e5('0x1f')](_0x5b96c4[_0xd5e5('0x3b')][_0xd5e5('0x1f')]);}return _0x10313d[_0xd5e5('0xa0')](_0x735a5d);}})[_0xd5e5('0x25')](function(_0x389f47){if(_0x389f47){return _0x389f47?{'count':_0x1dd544,'rows':_0x389f47}:null;}})[_0xd5e5('0x25')](respondWithResult(_0x3e6ef6,null))[_0xd5e5('0x4c')](handleError(_0x3e6ef6,null));};exports['addBlackLists']=function(_0x56c7dd,_0x43dc3a,_0x40ec22){var _0x580e08,_0x36d84c;return db[_0xd5e5('0x37')][_0xd5e5('0x2e')]({'where':{'id':_0x56c7dd[_0xd5e5('0x4e')]['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x43dc3a,null))[_0xd5e5('0x25')](function(_0x85b485){if(_0x85b485){_0x36d84c=_0x85b485;return _0x85b485['addBlackLists'](_0x56c7dd[_0xd5e5('0x52')]['ids'],_[_0xd5e5('0x5c')](_0x56c7dd[_0xd5e5('0x52')],[_0xd5e5('0x6d'),'id'])||{});}return null;})[_0xd5e5('0x75')](function(_0x7dc63b){var _0x254aa9;_0x580e08=_0x7dc63b||[];var _0x42624f=[];if(_0x7dc63b){for(var _0x4e5571=0x0;_0x4e5571<_0x7dc63b[_0xd5e5('0x4f')];_0x4e5571+=0x1){var _0xa84f51=_0x7dc63b[_0x4e5571]['get']({'plain':!![]});_0x254aa9=squel['insert']()[_0xd5e5('0x89')]('cm_hopper_black')[_0xd5e5('0x8b')]([_0xd5e5('0x8c'),_0xd5e5('0x8e'),_0xd5e5('0x8f'),_0xd5e5('0x64'),_0xd5e5('0x5e'),'updatedAt'],squel['select']()['field']('phone',_0xd5e5('0x8c'))[_0xd5e5('0x46')]('id','ContactId')['field'](_0xa84f51[_0xd5e5('0x92')][_0xd5e5('0x93')](),_0xd5e5('0x8f'))[_0xd5e5('0x46')](_0x56c7dd[_0xd5e5('0x4e')]['id']['toString'](),_0xd5e5('0x64'))[_0xd5e5('0x46')](_0xd5e5('0x91'),_0xd5e5('0x5e'))[_0xd5e5('0x46')](_0xd5e5('0x91'),_0xd5e5('0x5d'))[_0xd5e5('0x94')](_0xd5e5('0x95'))['where']('deletedAt\x20IS\x20NULL')[_0xd5e5('0x43')](_0xd5e5('0x97'),_0xa84f51['CmListId'][_0xd5e5('0x93')]())[_0xd5e5('0x43')](_0xd5e5('0x98')))[_0xd5e5('0x93')]();_0x42624f['push'](db[_0xd5e5('0x9e')][_0xd5e5('0x3b')](_0x254aa9));}return BPromise['all'](_0x42624f);}})[_0xd5e5('0x25')](function(){return _0x580e08;})['then'](respondWithResult(_0x43dc3a,null))['catch'](handleError(_0x43dc3a,null));};exports['removeBlackLists']=function(_0x37d7cb,_0x24691a,_0x4439cd){var _0x1a400c;return db[_0xd5e5('0x37')][_0xd5e5('0x2e')]({'where':{'id':_0x37d7cb['params']['id']}})[_0xd5e5('0x25')](handleEntityNotFound(_0x24691a,null))[_0xd5e5('0x25')](function(_0x55a160){if(_0x55a160){return _0x55a160[_0xd5e5('0xa1')](_0x37d7cb[_0xd5e5('0x3b')][_0xd5e5('0x6d')]);}})[_0xd5e5('0x25')](function(_0x1c5574){if(_0x1c5574){_0x1a400c=_0x1c5574;return db['CmHopperBlack'][_0xd5e5('0x31')]({'where':{'ListId':_0x37d7cb['query']['ids'],'VoiceQueueId':_0x37d7cb[_0xd5e5('0x4e')]['id']}})['then'](function(){return _0x1a400c;});}})[_0xd5e5('0x25')](respondWithStatusCode(_0x24691a,null))['catch'](handleError(_0x24691a,null));};
\ No newline at end of file
index 195d5e3..b58417b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1bc1=['emit','hasOwnProperty','hook','events','../../mysqldb','VoiceQueue','setMaxListeners','save','update'];(function(_0x643e3d,_0x53262a){var _0x2fb4fe=function(_0x4c203a){while(--_0x4c203a){_0x643e3d['push'](_0x643e3d['shift']());}};_0x2fb4fe(++_0x53262a);}(_0x1bc1,0xb7));var _0x11bc=function(_0x5b456d,_0x1537a9){_0x5b456d=_0x5b456d-0x0;var _0x12f5ec=_0x1bc1[_0x5b456d];return _0x12f5ec;};'use strict';var EventEmitter=require(_0x11bc('0x0'));var VoiceQueue=require(_0x11bc('0x1'))['db'][_0x11bc('0x2')];var VoiceQueueEvents=new EventEmitter();VoiceQueueEvents[_0x11bc('0x3')](0x0);var events={'afterCreate':_0x11bc('0x4'),'afterUpdate':_0x11bc('0x5'),'afterDestroy':'remove'};function emitEvent(_0x9c08c3){return function(_0x32b32d,_0x421c28,_0x2eb332){VoiceQueueEvents[_0x11bc('0x6')](_0x9c08c3+':'+_0x32b32d['id'],_0x32b32d);VoiceQueueEvents[_0x11bc('0x6')](_0x9c08c3,_0x32b32d);_0x2eb332(null);};}for(var e in events){if(events[_0x11bc('0x7')](e)){var event=events[e];VoiceQueue[_0x11bc('0x8')](e,emitEvent(event));}}module['exports']=VoiceQueueEvents;
\ No newline at end of file
+var _0x3532=['VoiceQueue','setMaxListeners','update','remove','emit','hasOwnProperty','events'];(function(_0x6c0123,_0x4c8d3b){var _0x5a87d2=function(_0x1ff614){while(--_0x1ff614){_0x6c0123['push'](_0x6c0123['shift']());}};_0x5a87d2(++_0x4c8d3b);}(_0x3532,0x1bf));var _0x2353=function(_0x260114,_0xa5dc7d){_0x260114=_0x260114-0x0;var _0x248786=_0x3532[_0x260114];return _0x248786;};'use strict';var EventEmitter=require(_0x2353('0x0'));var VoiceQueue=require('../../mysqldb')['db'][_0x2353('0x1')];var VoiceQueueEvents=new EventEmitter();VoiceQueueEvents[_0x2353('0x2')](0x0);var events={'afterCreate':'save','afterUpdate':_0x2353('0x3'),'afterDestroy':_0x2353('0x4')};function emitEvent(_0x28df41){return function(_0x4de46d,_0x3db267,_0x3d2a2a){VoiceQueueEvents['emit'](_0x28df41+':'+_0x4de46d['id'],_0x4de46d);VoiceQueueEvents[_0x2353('0x5')](_0x28df41,_0x4de46d);_0x3d2a2a(null);};}for(var e in events){if(events[_0x2353('0x6')](e)){var event=events[e];VoiceQueue['hook'](e,emitEvent(event));}}module['exports']=VoiceQueueEvents;
\ No newline at end of file
index adbea73..56d1fa7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd405=['define','voice_queues','util','../../config/logger','api','moment','bluebird','request-promise','./voiceQueue.attributes','exports'];(function(_0x1f5f43,_0x49a68f){var _0x464925=function(_0x17a95a){while(--_0x17a95a){_0x1f5f43['push'](_0x1f5f43['shift']());}};_0x464925(++_0x49a68f);}(_0xd405,0xf2));var _0x5d40=function(_0x211bc3,_0x5860c8){_0x211bc3=_0x211bc3-0x0;var _0x34c9a2=_0xd405[_0x211bc3];return _0x34c9a2;};'use strict';var _=require('lodash');var util=require(_0x5d40('0x0'));var logger=require(_0x5d40('0x1'))(_0x5d40('0x2'));var moment=require(_0x5d40('0x3'));var BPromise=require(_0x5d40('0x4'));var rp=require(_0x5d40('0x5'));var attributes=require(_0x5d40('0x6'));module[_0x5d40('0x7')]=function(_0x2c58f7,_0x36d8f9){return _0x2c58f7[_0x5d40('0x8')]('VoiceQueue',attributes,{'tableName':_0x5d40('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0xabd6=['util','api','moment','request-promise','./voiceQueue.attributes','exports','define','VoiceQueue','lodash'];(function(_0x29a2b8,_0x2cdf13){var _0x39fd69=function(_0x168952){while(--_0x168952){_0x29a2b8['push'](_0x29a2b8['shift']());}};_0x39fd69(++_0x2cdf13);}(_0xabd6,0xa1));var _0x6abd=function(_0x75ce5b,_0x3b582f){_0x75ce5b=_0x75ce5b-0x0;var _0x22195e=_0xabd6[_0x75ce5b];return _0x22195e;};'use strict';var _=require(_0x6abd('0x0'));var util=require(_0x6abd('0x1'));var logger=require('../../config/logger')(_0x6abd('0x2'));var moment=require(_0x6abd('0x3'));var BPromise=require('bluebird');var rp=require(_0x6abd('0x4'));var attributes=require(_0x6abd('0x5'));module[_0x6abd('0x6')]=function(_0x419450,_0x941258){return _0x419450[_0x6abd('0x7')](_0x6abd('0x8'),attributes,{'tableName':'voice_queues','paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index ac85c7e..2c4595d 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(_0x511cbb,_0x2e5ee5){var _0x14a6e4=function(_0x3b6083){while(--_0x3b6083){_0x511cbb['push'](_0x511cbb['shift']());}};_0x14a6e4(++_0x2e5ee5);}(_0x9957,0x93));var _0x7995=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x9957[_0x19e35c];return _0x3e1fe8;};'use strict';var _=require(_0x7995('0x0'));var util=require(_0x7995('0x1'));var 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(_0x498396,_0x395c9a){var _0x1b0fbd=function(_0x1c511e){while(--_0x1c511e){_0x498396['push'](_0x498396['shift']());}};_0x1b0fbd(++_0x395c9a);}(_0x9957,0x93));var _0x7995=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x9957[_0x6131cd];return _0x47e916;};'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 c144103..171c9ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd94e=['save','remove','update','emit','removeListener','register','length','voiceQueue:','./voiceQueue.events'];(function(_0x86d5c,_0x4f0973){var _0xf88676=function(_0x4ab34a){while(--_0x4ab34a){_0x86d5c['push'](_0x86d5c['shift']());}};_0xf88676(++_0x4f0973);}(_0xd94e,0x1af));var _0xed94=function(_0x2df052,_0xd386){_0x2df052=_0x2df052-0x0;var _0x2b1c98=_0xd94e[_0x2df052];return _0x2b1c98;};'use strict';var VoiceQueueEvents=require(_0xed94('0x0'));var events=[_0xed94('0x1'),_0xed94('0x2'),_0xed94('0x3')];function createListener(_0x5c4186,_0x5a4000){return function(_0x3976e0){_0x5a4000[_0xed94('0x4')](_0x5c4186,_0x3976e0);};}function removeListener(_0x3cac19,_0x5b6b18){return function(){VoiceQueueEvents[_0xed94('0x5')](_0x3cac19,_0x5b6b18);};}exports[_0xed94('0x6')]=function(_0x13cb03){for(var _0x124282=0x0,_0x3e4528=events[_0xed94('0x7')];_0x124282<_0x3e4528;_0x124282++){var _0x3a9e0f=events[_0x124282];var _0x3ecca6=createListener(_0xed94('0x8')+_0x3a9e0f,_0x13cb03);VoiceQueueEvents['on'](_0x3a9e0f,_0x3ecca6);}};
\ No newline at end of file
+var _0x481a=['voiceQueue:','./voiceQueue.events','save','remove','removeListener','length'];(function(_0x3738c0,_0x3b5c36){var _0xc390d1=function(_0x94e433){while(--_0x94e433){_0x3738c0['push'](_0x3738c0['shift']());}};_0xc390d1(++_0x3b5c36);}(_0x481a,0x1d5));var _0xa481=function(_0x30ae8a,_0x3b753f){_0x30ae8a=_0x30ae8a-0x0;var _0x3c9310=_0x481a[_0x30ae8a];return _0x3c9310;};'use strict';var VoiceQueueEvents=require(_0xa481('0x0'));var events=[_0xa481('0x1'),_0xa481('0x2'),'update'];function createListener(_0x475370,_0x5a1986){return function(_0x5b6d02){_0x5a1986['emit'](_0x475370,_0x5b6d02);};}function removeListener(_0x3ac53f,_0x4b0686){return function(){VoiceQueueEvents[_0xa481('0x3')](_0x3ac53f,_0x4b0686);};}exports['register']=function(_0x3815ef){for(var _0x131404=0x0,_0x36d700=events[_0xa481('0x4')];_0x131404<_0x36d700;_0x131404++){var _0x27f5dc=events[_0x131404];var _0x34065f=createListener(_0xa481('0x5')+_0x27f5dc,_0x3815ef);VoiceQueueEvents['on'](_0x27f5dc,_0x34065f);}};
\ No newline at end of file
index 0fc6d90..5797265 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf90d=['create','put','update','delete','destroy','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','isAuthenticated','index','/describe','describe','get','/:id','show','post'];(function(_0x206ab7,_0x3650d1){var _0x2f92f4=function(_0xea78ae){while(--_0xea78ae){_0x206ab7['push'](_0x206ab7['shift']());}};_0x2f92f4(++_0x3650d1);}(_0xf90d,0x99));var _0xdf90=function(_0x5efecb,_0xdfdea2){_0x5efecb=_0x5efecb-0x0;var _0x1ec865=_0xf90d[_0x5efecb];return _0x1ec865;};'use strict';var multer=require(_0xdf90('0x0'));var util=require(_0xdf90('0x1'));var path=require(_0xdf90('0x2'));var timeout=require(_0xdf90('0x3'));var express=require(_0xdf90('0x4'));var router=express['Router']();var auth=require(_0xdf90('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xdf90('0x6'));var controller=require('./voiceQueueReport.controller');router['get']('/',auth[_0xdf90('0x7')](),controller[_0xdf90('0x8')]);router['get'](_0xdf90('0x9'),auth[_0xdf90('0x7')](),controller[_0xdf90('0xa')]);router['get']('/index',auth[_0xdf90('0x7')](),controller['getVoiceQueuesReport']);router[_0xdf90('0xb')](_0xdf90('0xc'),auth[_0xdf90('0x7')](),controller[_0xdf90('0xd')]);router[_0xdf90('0xe')]('/',auth[_0xdf90('0x7')](),controller[_0xdf90('0xf')]);router[_0xdf90('0x10')](_0xdf90('0xc'),auth[_0xdf90('0x7')](),controller[_0xdf90('0x11')]);router[_0xdf90('0x12')](_0xdf90('0xc'),auth[_0xdf90('0x7')](),controller[_0xdf90('0x13')]);module[_0xdf90('0x14')]=router;
\ No newline at end of file
+var _0xc56f=['./voiceQueueReport.controller','get','isAuthenticated','/describe','/index','getVoiceQueuesReport','/:id','post','create','update','exports','multer','path','connect-timeout','express','../../components/auth/service','../../components/interaction/service'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0xc56f,0xd7));var _0xfc56=function(_0x2a6809,_0x44edde){_0x2a6809=_0x2a6809-0x0;var _0x11c371=_0xc56f[_0x2a6809];return _0x11c371;};'use strict';var multer=require(_0xfc56('0x0'));var util=require('util');var path=require(_0xfc56('0x1'));var timeout=require(_0xfc56('0x2'));var express=require(_0xfc56('0x3'));var router=express['Router']();var auth=require(_0xfc56('0x4'));var interaction=require(_0xfc56('0x5'));var config=require('../../config/environment');var controller=require(_0xfc56('0x6'));router[_0xfc56('0x7')]('/',auth[_0xfc56('0x8')](),controller['index']);router[_0xfc56('0x7')](_0xfc56('0x9'),auth['isAuthenticated'](),controller['describe']);router[_0xfc56('0x7')](_0xfc56('0xa'),auth[_0xfc56('0x8')](),controller[_0xfc56('0xb')]);router['get'](_0xfc56('0xc'),auth['isAuthenticated'](),controller['show']);router[_0xfc56('0xd')]('/',auth[_0xfc56('0x8')](),controller[_0xfc56('0xe')]);router['put'](_0xfc56('0xc'),auth[_0xfc56('0x8')](),controller[_0xfc56('0xf')]);router['delete'](_0xfc56('0xc'),auth[_0xfc56('0x8')](),controller['destroy']);module[_0xfc56('0x10')]=router;
\ No newline at end of file
index 40c8812..e71e9cb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe48f=['seconds','holdtime','INTEGER','BOOLEAN','COMPLETEDBYCALLER,\x20COMPLETEDBYAGENT,\x20FORWARDTRANFER,\x20BLINDTRANSFER,\x20ATTENDEDTRANSFER,\x20EXITWITHKEY,\x20TIMEOUT','FORWARD,\x20BLIND,\x20ATTENDED','sequelize','moment','exports','STRING','DATE','getDataValue','format','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x4b2436,_0x452299){var _0x4f5ab2=function(_0x5c6679){while(--_0x5c6679){_0x4b2436['push'](_0x4b2436['shift']());}};_0x4f5ab2(++_0x452299);}(_0xe48f,0x19c));var _0xfe48=function(_0x4ffdc4,_0x34a28a){_0x4ffdc4=_0x4ffdc4-0x0;var _0x3b010c=_0xe48f[_0x4ffdc4];return _0x3b010c;};'use strict';var Sequelize=require(_0xfe48('0x0'));var moment=require(_0xfe48('0x1'));module[_0xfe48('0x2')]={'type':{'type':Sequelize[_0xfe48('0x3')]},'uniqueid':{'type':Sequelize[_0xfe48('0x3')]},'calleridnum':{'type':Sequelize[_0xfe48('0x3')]},'calleridname':{'type':Sequelize[_0xfe48('0x3')]},'queue':{'type':Sequelize[_0xfe48('0x3')]},'queuecallerjoinAt':{'type':Sequelize[_0xfe48('0x4')]},'queuecallerleaveAt':{'type':Sequelize[_0xfe48('0x4')],'set':function(_0x49ce63){var _0x11099=moment(_0x49ce63);var _0x381cac=moment(this[_0xfe48('0x5')]('queuecallerjoinAt'))[_0xfe48('0x6')](_0xfe48('0x7'));var _0x3e36db=_0x11099['diff'](_0x381cac,_0xfe48('0x8'));this['setDataValue']('queuecallerleaveAt',_0x49ce63);this['setDataValue'](_0xfe48('0x9'),_0x3e36db||null);}},'position':{'type':Sequelize[_0xfe48('0xa')]},'count':{'type':Sequelize['INTEGER']},'queuecallerabandon':{'type':Sequelize[_0xfe48('0xb')],'defaultValue':![]},'queuecallerabandonAt':{'type':Sequelize[_0xfe48('0x4')]},'queuecallercomplete':{'type':Sequelize[_0xfe48('0xb')],'defaultValue':![]},'queuecallercompleteAt':{'type':Sequelize[_0xfe48('0x4')]},'queuecallerexit':{'type':Sequelize[_0xfe48('0xb')],'defaultValue':![]},'queuecallerexitAt':{'type':Sequelize[_0xfe48('0x4')]},'queuecallerexitreason':{'type':Sequelize[_0xfe48('0x3')],'comment':_0xfe48('0xc')},'originalposition':{'type':Sequelize[_0xfe48('0xa')]},'channel':{'type':Sequelize[_0xfe48('0x3')]},'connectedlinenum':{'type':Sequelize[_0xfe48('0x3')]},'connectedlinename':{'type':Sequelize[_0xfe48('0x3')]},'accountcode':{'type':Sequelize[_0xfe48('0x3')]},'context':{'type':Sequelize[_0xfe48('0x3')]},'exten':{'type':Sequelize[_0xfe48('0x3')]},'priority':{'type':Sequelize[_0xfe48('0x3')]},'holdtime':{'type':Sequelize[_0xfe48('0xa')]},'mohtime':{'type':Sequelize[_0xfe48('0xa')],'defaultValue':0x0},'assigned':{'type':Sequelize[_0xfe48('0xb')],'defaultValue':![]},'lastAssignedTo':{'type':Sequelize[_0xfe48('0x3')]},'transfer':{'type':Sequelize[_0xfe48('0xb')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0xfe48('0x3')],'comment':_0xfe48('0xd')},'transferexten':{'type':Sequelize[_0xfe48('0x3')]},'transferuniqueid':{'type':Sequelize['STRING']},'disposition':{'type':Sequelize[_0xfe48('0x3')]},'queuecallerenterreason':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
+var _0x7982=['FORWARD,\x20BLIND,\x20ATTENDED','moment','exports','STRING','DATE','getDataValue','format','diff','setDataValue','holdtime','INTEGER','BOOLEAN','COMPLETEDBYCALLER,\x20COMPLETEDBYAGENT,\x20FORWARDTRANFER,\x20BLINDTRANSFER,\x20ATTENDEDTRANSFER,\x20EXITWITHKEY,\x20TIMEOUT'];(function(_0xe5b64c,_0x1f9754){var _0x7bc0df=function(_0x53b647){while(--_0x53b647){_0xe5b64c['push'](_0xe5b64c['shift']());}};_0x7bc0df(++_0x1f9754);}(_0x7982,0x1ef));var _0x2798=function(_0x3e112d,_0x2bb132){_0x3e112d=_0x3e112d-0x0;var _0x531c31=_0x7982[_0x3e112d];return _0x531c31;};'use strict';var Sequelize=require('sequelize');var moment=require(_0x2798('0x0'));module[_0x2798('0x1')]={'type':{'type':Sequelize[_0x2798('0x2')]},'uniqueid':{'type':Sequelize[_0x2798('0x2')]},'calleridnum':{'type':Sequelize[_0x2798('0x2')]},'calleridname':{'type':Sequelize[_0x2798('0x2')]},'queue':{'type':Sequelize['STRING']},'queuecallerjoinAt':{'type':Sequelize[_0x2798('0x3')]},'queuecallerleaveAt':{'type':Sequelize[_0x2798('0x3')],'set':function(_0x350e1e){var _0x42a344=moment(_0x350e1e);var _0x4f500a=moment(this[_0x2798('0x4')]('queuecallerjoinAt'))[_0x2798('0x5')]('YYYY-MM-DD\x20HH:mm:ss');var _0x21fef5=_0x42a344[_0x2798('0x6')](_0x4f500a,'seconds');this[_0x2798('0x7')]('queuecallerleaveAt',_0x350e1e);this[_0x2798('0x7')](_0x2798('0x8'),_0x21fef5||null);}},'position':{'type':Sequelize[_0x2798('0x9')]},'count':{'type':Sequelize[_0x2798('0x9')]},'queuecallerabandon':{'type':Sequelize[_0x2798('0xa')],'defaultValue':![]},'queuecallerabandonAt':{'type':Sequelize['DATE']},'queuecallercomplete':{'type':Sequelize['BOOLEAN'],'defaultValue':![]},'queuecallercompleteAt':{'type':Sequelize[_0x2798('0x3')]},'queuecallerexit':{'type':Sequelize[_0x2798('0xa')],'defaultValue':![]},'queuecallerexitAt':{'type':Sequelize[_0x2798('0x3')]},'queuecallerexitreason':{'type':Sequelize[_0x2798('0x2')],'comment':_0x2798('0xb')},'originalposition':{'type':Sequelize['INTEGER']},'channel':{'type':Sequelize[_0x2798('0x2')]},'connectedlinenum':{'type':Sequelize[_0x2798('0x2')]},'connectedlinename':{'type':Sequelize[_0x2798('0x2')]},'accountcode':{'type':Sequelize[_0x2798('0x2')]},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize[_0x2798('0x2')]},'priority':{'type':Sequelize[_0x2798('0x2')]},'holdtime':{'type':Sequelize[_0x2798('0x9')]},'mohtime':{'type':Sequelize['INTEGER'],'defaultValue':0x0},'assigned':{'type':Sequelize[_0x2798('0xa')],'defaultValue':![]},'lastAssignedTo':{'type':Sequelize[_0x2798('0x2')]},'transfer':{'type':Sequelize[_0x2798('0xa')],'defaultValue':![]},'transfertype':{'type':Sequelize[_0x2798('0x2')],'comment':_0x2798('0xc')},'transferexten':{'type':Sequelize[_0x2798('0x2')]},'transferuniqueid':{'type':Sequelize[_0x2798('0x2')]},'disposition':{'type':Sequelize[_0x2798('0x2')]},'queuecallerenterreason':{'type':Sequelize['INTEGER'],'defaultValue':0x0}};
\ No newline at end of file
index a182334..787e6ca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbfd3=['destroy','then','sendStatus','error','stack','name','VoiceQueueReport','rawAttributes','query','keys','filters','model','intersection','fields','attributes','limit','order','sort','where','filter','merge','VIRTUAL','field','options','count','includeAll','findAll','catch','show','params','include','find','create','update','body','describe','getVoiceQueuesReport','length','hasOwnProperty','nolimit','pick','map','rows','html-pdf','eml-format','rimraf','zip-dir','request-promise','mustache','util','path','to-csv','ejs','lodash','squel','querystring','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','redis','localhost','socket.io-emitter','./voiceQueueReport.socket','status','offset','set','Content-Range','apply'];(function(_0x4ac761,_0x228735){var _0x4de38d=function(_0x430d65){while(--_0x430d65){_0x4ac761['push'](_0x4ac761['shift']());}};_0x4de38d(++_0x228735);}(_0xbfd3,0x1db));var _0x3bfd=function(_0x34a03b,_0x7cf522){_0x34a03b=_0x34a03b-0x0;var _0x4399a3=_0xbfd3[_0x34a03b];return _0x4399a3;};'use strict';var pdf=require(_0x3bfd('0x0'));var emlformat=require(_0x3bfd('0x1'));var rimraf=require(_0x3bfd('0x2'));var zipdir=require(_0x3bfd('0x3'));var jsonpatch=require('fast-json-patch');var rp=require(_0x3bfd('0x4'));var moment=require('moment');var BPromise=require('bluebird');var Mustache=require(_0x3bfd('0x5'));var util=require(_0x3bfd('0x6'));var path=require(_0x3bfd('0x7'));var sox=require('sox');var csv=require(_0x3bfd('0x8'));var ejs=require(_0x3bfd('0x9'));var fs=require('fs');var _=require(_0x3bfd('0xa'));var squel=require(_0x3bfd('0xb'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x3bfd('0xc'));var Papa=require('papaparse');var authService=require('../../components/auth/service');var hardwareService=require(_0x3bfd('0xd'));var Redis=require(_0x3bfd('0xe'));var qs=require(_0x3bfd('0xf'));var logger=require(_0x3bfd('0x10'))(_0x3bfd('0x11'));var utils=require(_0x3bfd('0x12'));var config=require('../../config/environment');var db=require(_0x3bfd('0x13'))['db'];config[_0x3bfd('0x14')]=_['defaults'](config[_0x3bfd('0x14')],{'host':_0x3bfd('0x15'),'port':0x18eb});var socket=require(_0x3bfd('0x16'))(new Redis(config[_0x3bfd('0x14')]));require(_0x3bfd('0x17'))['register'](socket);function respondWithStatusCode(_0x2a43fe,_0x1927fb){_0x1927fb=_0x1927fb||0xcc;return function(_0x1ec5c5){if(_0x1ec5c5){return _0x2a43fe['sendStatus'](_0x1927fb);}return _0x2a43fe['status'](_0x1927fb)['end']();};}function respondWithResult(_0x552544,_0x490f99){_0x490f99=_0x490f99||0xc8;return function(_0x24344f){if(_0x24344f){return _0x552544[_0x3bfd('0x18')](_0x490f99)['json'](_0x24344f);}};}function respondWithFilteredResult(_0x2fb0a7,_0x27e318){return function(_0x92bb00){if(_0x92bb00){var _0x3159bf=_0x92bb00['count'],_0x10c3ca=_0x27e318[_0x3bfd('0x19')],_0x59c92f=_0x27e318[_0x3bfd('0x19')]+_0x27e318['limit'],_0xdbb7ca;if(_0x59c92f>=_0x3159bf){_0x59c92f=_0x3159bf;_0xdbb7ca=0xc8;}else{_0xdbb7ca=0xce;}_0x2fb0a7[_0x3bfd('0x18')](_0xdbb7ca);return _0x2fb0a7[_0x3bfd('0x1a')](_0x3bfd('0x1b'),_0x10c3ca+'-'+_0x59c92f+'/'+_0x3159bf)['json'](_0x92bb00);}return null;};}function patchUpdates(_0x29dfd8){return function(_0x525984){try{jsonpatch[_0x3bfd('0x1c')](_0x525984,_0x29dfd8,!![]);}catch(_0x214fa9){return BPromise['reject'](_0x214fa9);}return _0x525984['save']();};}function saveUpdates(_0x4b869d,_0x482ae3){return function(_0x4b3c91){if(_0x4b3c91){return _0x4b3c91['update'](_0x4b869d)['then'](function(_0x3c127b){return _0x3c127b;});}return null;};}function removeEntity(_0x1f641c,_0x52cdfd){return function(_0x3f3c62){if(_0x3f3c62){return _0x3f3c62[_0x3bfd('0x1d')]()[_0x3bfd('0x1e')](function(){_0x1f641c[_0x3bfd('0x18')](0xcc)['end']();});}};}function handleEntityNotFound(_0x2facac,_0x4fe63d){return function(_0x40d869){if(!_0x40d869){_0x2facac[_0x3bfd('0x1f')](0x194);}return _0x40d869;};}function handleError(_0x350fea,_0x20df30){_0x20df30=_0x20df30||0x1f4;return function(_0x177c07){logger[_0x3bfd('0x20')](_0x177c07[_0x3bfd('0x21')]);if(_0x177c07[_0x3bfd('0x22')]){delete _0x177c07[_0x3bfd('0x22')];}_0x350fea[_0x3bfd('0x18')](_0x20df30)['send'](_0x177c07);};}exports['index']=function(_0x2b26b9,_0x4a73c2){var _0xb77a4a={},_0x2059ea={},_0xdb4f00={'count':0x0,'rows':[]};var _0x5b6742=db[_0x3bfd('0x23')][_0x3bfd('0x24')];_0x2059ea['model']=_['keys'](_0x5b6742);_0x2059ea[_0x3bfd('0x25')]=_[_0x3bfd('0x26')](_0x2b26b9['query']);_0x2059ea[_0x3bfd('0x27')]=_['intersection'](_0x2059ea[_0x3bfd('0x28')],_0x2059ea[_0x3bfd('0x25')]);_0xb77a4a['attributes']=_[_0x3bfd('0x29')](_0x2059ea[_0x3bfd('0x28')],qs['fields'](_0x2b26b9[_0x3bfd('0x25')][_0x3bfd('0x2a')]));_0xb77a4a[_0x3bfd('0x2b')]=_0xb77a4a[_0x3bfd('0x2b')]['length']?_0xb77a4a[_0x3bfd('0x2b')]:_0x2059ea['model'];if(!_0x2b26b9['query']['hasOwnProperty']('nolimit')){_0xb77a4a[_0x3bfd('0x2c')]=qs[_0x3bfd('0x2c')](_0x2b26b9[_0x3bfd('0x25')][_0x3bfd('0x2c')]);_0xb77a4a['offset']=qs[_0x3bfd('0x19')](_0x2b26b9['query']['offset']);}_0xb77a4a[_0x3bfd('0x2d')]=qs['sort'](_0x2b26b9[_0x3bfd('0x25')][_0x3bfd('0x2e')]);_0xb77a4a[_0x3bfd('0x2f')]=qs[_0x3bfd('0x27')](_['pick'](_0x2b26b9[_0x3bfd('0x25')],_0x2059ea[_0x3bfd('0x27')]));if(_0x2b26b9[_0x3bfd('0x25')][_0x3bfd('0x30')]){_0xb77a4a['where']=_[_0x3bfd('0x31')](_0xb77a4a[_0x3bfd('0x2f')],{'$or':_['map'](_0x5b6742,function(_0x2baeb9){if(_0x2baeb9['type']['key']!==_0x3bfd('0x32')){var _0x148b0d={};_0x148b0d[_0x2baeb9[_0x3bfd('0x33')]]={'$like':'%'+_0x2b26b9[_0x3bfd('0x25')][_0x3bfd('0x30')]+'%'};return _0x148b0d;}})});}_0xb77a4a=_[_0x3bfd('0x31')]({},_0xb77a4a,_0x2b26b9[_0x3bfd('0x34')]);var _0x2161bc={'where':_0xb77a4a[_0x3bfd('0x2f')]};return db[_0x3bfd('0x23')][_0x3bfd('0x35')](_0x2161bc)[_0x3bfd('0x1e')](function(_0x4d0565){_0xdb4f00['count']=_0x4d0565;if(_0x2b26b9[_0x3bfd('0x25')][_0x3bfd('0x36')]){_0xb77a4a['include']=[{'all':!![]}];}return db['VoiceQueueReport'][_0x3bfd('0x37')](_0xb77a4a);})['then'](function(_0x2f4555){_0xdb4f00['rows']=_0x2f4555;return _0xdb4f00;})[_0x3bfd('0x1e')](respondWithFilteredResult(_0x4a73c2,_0xb77a4a))[_0x3bfd('0x38')](handleError(_0x4a73c2,null));};exports[_0x3bfd('0x39')]=function(_0xb6155e,_0x1a5feb){var _0x44cf50={'raw':![],'where':{'id':_0xb6155e[_0x3bfd('0x3a')]['id']}},_0x5ecc2c={};_0x5ecc2c['model']=_['keys'](db[_0x3bfd('0x23')][_0x3bfd('0x24')]);_0x5ecc2c[_0x3bfd('0x25')]=_[_0x3bfd('0x26')](_0xb6155e[_0x3bfd('0x25')]);_0x5ecc2c[_0x3bfd('0x27')]=_[_0x3bfd('0x29')](_0x5ecc2c[_0x3bfd('0x28')],_0x5ecc2c[_0x3bfd('0x25')]);_0x44cf50[_0x3bfd('0x2b')]=_[_0x3bfd('0x29')](_0x5ecc2c[_0x3bfd('0x28')],qs[_0x3bfd('0x2a')](_0xb6155e[_0x3bfd('0x25')][_0x3bfd('0x2a')]));_0x44cf50[_0x3bfd('0x2b')]=_0x44cf50[_0x3bfd('0x2b')]['length']?_0x44cf50[_0x3bfd('0x2b')]:_0x5ecc2c['model'];if(_0xb6155e[_0x3bfd('0x25')][_0x3bfd('0x36')]){_0x44cf50[_0x3bfd('0x3b')]=[{'all':!![]}];}_0x44cf50=_[_0x3bfd('0x31')]({},_0x44cf50,_0xb6155e[_0x3bfd('0x34')]);return db['VoiceQueueReport'][_0x3bfd('0x3c')](_0x44cf50)[_0x3bfd('0x1e')](handleEntityNotFound(_0x1a5feb,null))[_0x3bfd('0x1e')](respondWithResult(_0x1a5feb,null))[_0x3bfd('0x38')](handleError(_0x1a5feb,null));};exports[_0x3bfd('0x3d')]=function(_0x5a00a9,_0x4f6f89){return db[_0x3bfd('0x23')][_0x3bfd('0x3d')](_0x5a00a9['body'],{})['then'](respondWithResult(_0x4f6f89,0xc9))[_0x3bfd('0x38')](handleError(_0x4f6f89,null));};exports[_0x3bfd('0x3e')]=function(_0x8d0e42,_0x4f09a6){if(_0x8d0e42[_0x3bfd('0x3f')]['id']){delete _0x8d0e42['body']['id'];}return db[_0x3bfd('0x23')]['find']({'where':{'id':_0x8d0e42['params']['id']}})['then'](handleEntityNotFound(_0x4f09a6,null))[_0x3bfd('0x1e')](saveUpdates(_0x8d0e42[_0x3bfd('0x3f')],null))['then'](respondWithResult(_0x4f09a6,null))[_0x3bfd('0x38')](handleError(_0x4f09a6,null));};exports[_0x3bfd('0x1d')]=function(_0x5bfd7d,_0x563b45){return db[_0x3bfd('0x23')][_0x3bfd('0x3c')]({'where':{'id':_0x5bfd7d['params']['id']}})[_0x3bfd('0x1e')](handleEntityNotFound(_0x563b45,null))['then'](removeEntity(_0x563b45,null))[_0x3bfd('0x38')](handleError(_0x563b45,null));};exports['describe']=function(_0x806f60,_0x6bcac1){return db[_0x3bfd('0x23')][_0x3bfd('0x40')]()[_0x3bfd('0x1e')](respondWithResult(_0x6bcac1,null))[_0x3bfd('0x38')](handleError(_0x6bcac1,null));};exports[_0x3bfd('0x41')]=function(_0x5850da,_0x1c3c9e){var _0xf57cc5={},_0xe1885a={},_0x56bef7={'count':0x0,'rows':[]};_0xe1885a[_0x3bfd('0x28')]=_[_0x3bfd('0x26')](db[_0x3bfd('0x23')][_0x3bfd('0x24')]);_0xe1885a[_0x3bfd('0x25')]=_['keys'](_0x5850da['query']);_0xe1885a[_0x3bfd('0x27')]=_[_0x3bfd('0x29')](_0xe1885a[_0x3bfd('0x28')],_0xe1885a[_0x3bfd('0x25')]);_0xf57cc5[_0x3bfd('0x2b')]=_[_0x3bfd('0x29')](_0xe1885a[_0x3bfd('0x28')],qs[_0x3bfd('0x2a')](_0x5850da[_0x3bfd('0x25')][_0x3bfd('0x2a')]));_0xf57cc5[_0x3bfd('0x2b')]=_0xf57cc5[_0x3bfd('0x2b')][_0x3bfd('0x42')]?_0xf57cc5[_0x3bfd('0x2b')]:_0xe1885a[_0x3bfd('0x28')];if(!_0x5850da['query'][_0x3bfd('0x43')](_0x3bfd('0x44'))){_0xf57cc5[_0x3bfd('0x2c')]=qs[_0x3bfd('0x2c')](_0x5850da[_0x3bfd('0x25')][_0x3bfd('0x2c')]);_0xf57cc5[_0x3bfd('0x19')]=qs[_0x3bfd('0x19')](_0x5850da[_0x3bfd('0x25')][_0x3bfd('0x19')]);}_0xf57cc5[_0x3bfd('0x2d')]=qs[_0x3bfd('0x2e')](_0x5850da[_0x3bfd('0x25')]['sort']);_0xf57cc5[_0x3bfd('0x2f')]=qs[_0x3bfd('0x27')](_[_0x3bfd('0x45')](_0x5850da['query'],_0xe1885a[_0x3bfd('0x27')]));if(_0x5850da[_0x3bfd('0x25')][_0x3bfd('0x30')]){_0xf57cc5[_0x3bfd('0x2f')]=_['merge'](_0xf57cc5[_0x3bfd('0x2f')],{'$or':_[_0x3bfd('0x46')](_0xf57cc5[_0x3bfd('0x2b')],function(_0xf67ee4){var _0x5c7e1d={};_0x5c7e1d[_0xf67ee4]={'$like':'%'+_0x5850da[_0x3bfd('0x25')][_0x3bfd('0x30')]+'%'};return _0x5c7e1d;})});}_0xf57cc5=_['merge']({},_0xf57cc5,_0x5850da[_0x3bfd('0x34')]);var _0x5f9230={'where':_0xf57cc5[_0x3bfd('0x2f')]};return db['VoiceQueueReport']['count'](_0x5f9230)[_0x3bfd('0x1e')](function(_0x14bd13){_0x56bef7[_0x3bfd('0x35')]=_0x14bd13;if(_0x5850da['query'][_0x3bfd('0x36')]){_0xf57cc5[_0x3bfd('0x3b')]=[{'all':!![]}];}return db[_0x3bfd('0x23')][_0x3bfd('0x37')](_0xf57cc5);})['then'](function(_0x219d0b){_0x56bef7[_0x3bfd('0x47')]=_0x219d0b;return _0x56bef7;})[_0x3bfd('0x1e')](respondWithFilteredResult(_0x1c3c9e,_0xf57cc5,'getVoiceQueuesReport'))[_0x3bfd('0x38')](handleError(_0x1c3c9e,null,_0x3bfd('0x41')));};
\ No newline at end of file
+var _0xb368=['index','VoiceQueueReport','query','keys','attributes','intersection','model','fields','length','hasOwnProperty','nolimit','order','sort','filters','pick','filter','where','merge','map','type','VIRTUAL','field','count','includeAll','include','findAll','catch','params','rawAttributes','options','find','create','body','getVoiceQueuesReport','rows','html-pdf','fast-json-patch','request-promise','moment','bluebird','path','sox','ejs','lodash','squel','crypto','jsforce','desk.js','to-csv','querystring','papaparse','../../config/license/hardware','ioredis','api','../../config/utils','../../mysqldb','defaults','redis','localhost','socket.io-emitter','./voiceQueueReport.socket','register','sendStatus','end','status','json','offset','limit','set','Content-Range','apply','reject','update','then','destroy','error','stack','name','send'];(function(_0x18a4f7,_0x3f915c){var _0x368cf3=function(_0x173245){while(--_0x173245){_0x18a4f7['push'](_0x18a4f7['shift']());}};_0x368cf3(++_0x3f915c);}(_0xb368,0x15f));var _0x8b36=function(_0x599fa1,_0x6680fe){_0x599fa1=_0x599fa1-0x0;var _0x276f4e=_0xb368[_0x599fa1];return _0x276f4e;};'use strict';var pdf=require(_0x8b36('0x0'));var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require('zip-dir');var jsonpatch=require(_0x8b36('0x1'));var rp=require(_0x8b36('0x2'));var moment=require(_0x8b36('0x3'));var BPromise=require(_0x8b36('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0x8b36('0x5'));var sox=require(_0x8b36('0x6'));var csv=require('to-csv');var ejs=require(_0x8b36('0x7'));var fs=require('fs');var _=require(_0x8b36('0x8'));var squel=require(_0x8b36('0x9'));var crypto=require(_0x8b36('0xa'));var jsforce=require(_0x8b36('0xb'));var deskjs=require(_0x8b36('0xc'));var toCsv=require(_0x8b36('0xd'));var querystring=require(_0x8b36('0xe'));var Papa=require(_0x8b36('0xf'));var authService=require('../../components/auth/service');var hardwareService=require(_0x8b36('0x10'));var Redis=require(_0x8b36('0x11'));var qs=require('../../components/parsers/qs');var logger=require('../../config/logger')(_0x8b36('0x12'));var utils=require(_0x8b36('0x13'));var config=require('../../config/environment');var db=require(_0x8b36('0x14'))['db'];config['redis']=_[_0x8b36('0x15')](config[_0x8b36('0x16')],{'host':_0x8b36('0x17'),'port':0x18eb});var socket=require(_0x8b36('0x18'))(new Redis(config[_0x8b36('0x16')]));require(_0x8b36('0x19'))[_0x8b36('0x1a')](socket);function respondWithStatusCode(_0x5da5c5,_0x55c211){_0x55c211=_0x55c211||0xcc;return function(_0x4bffc5){if(_0x4bffc5){return _0x5da5c5[_0x8b36('0x1b')](_0x55c211);}return _0x5da5c5['status'](_0x55c211)[_0x8b36('0x1c')]();};}function respondWithResult(_0x4be8cc,_0x2fd891){_0x2fd891=_0x2fd891||0xc8;return function(_0x31add9){if(_0x31add9){return _0x4be8cc[_0x8b36('0x1d')](_0x2fd891)[_0x8b36('0x1e')](_0x31add9);}};}function respondWithFilteredResult(_0x984924,_0x28a3b0){return function(_0x2896cf){if(_0x2896cf){var _0x576b9a=_0x2896cf['count'],_0x4bf69e=_0x28a3b0[_0x8b36('0x1f')],_0x141917=_0x28a3b0[_0x8b36('0x1f')]+_0x28a3b0[_0x8b36('0x20')],_0x5add4a;if(_0x141917>=_0x576b9a){_0x141917=_0x576b9a;_0x5add4a=0xc8;}else{_0x5add4a=0xce;}_0x984924['status'](_0x5add4a);return _0x984924[_0x8b36('0x21')](_0x8b36('0x22'),_0x4bf69e+'-'+_0x141917+'/'+_0x576b9a)[_0x8b36('0x1e')](_0x2896cf);}return null;};}function patchUpdates(_0x143c86){return function(_0x29b94){try{jsonpatch[_0x8b36('0x23')](_0x29b94,_0x143c86,!![]);}catch(_0x584933){return BPromise[_0x8b36('0x24')](_0x584933);}return _0x29b94['save']();};}function saveUpdates(_0x4eb74d,_0x22d399){return function(_0x56917c){if(_0x56917c){return _0x56917c[_0x8b36('0x25')](_0x4eb74d)[_0x8b36('0x26')](function(_0x29433f){return _0x29433f;});}return null;};}function removeEntity(_0x1daf6d,_0x3278aa){return function(_0x1500bc){if(_0x1500bc){return _0x1500bc[_0x8b36('0x27')]()[_0x8b36('0x26')](function(){_0x1daf6d['status'](0xcc)[_0x8b36('0x1c')]();});}};}function handleEntityNotFound(_0x14f14e,_0x5b2ea5){return function(_0x39e891){if(!_0x39e891){_0x14f14e['sendStatus'](0x194);}return _0x39e891;};}function handleError(_0x229123,_0x46017a){_0x46017a=_0x46017a||0x1f4;return function(_0x2236be){logger[_0x8b36('0x28')](_0x2236be[_0x8b36('0x29')]);if(_0x2236be[_0x8b36('0x2a')]){delete _0x2236be['name'];}_0x229123[_0x8b36('0x1d')](_0x46017a)[_0x8b36('0x2b')](_0x2236be);};}exports[_0x8b36('0x2c')]=function(_0x53b857,_0x3891cf){var _0x1d5038={},_0x46c119={},_0x27e217={'count':0x0,'rows':[]};var _0x4b8e10=db[_0x8b36('0x2d')]['rawAttributes'];_0x46c119['model']=_['keys'](_0x4b8e10);_0x46c119[_0x8b36('0x2e')]=_[_0x8b36('0x2f')](_0x53b857[_0x8b36('0x2e')]);_0x46c119['filters']=_['intersection'](_0x46c119['model'],_0x46c119[_0x8b36('0x2e')]);_0x1d5038[_0x8b36('0x30')]=_[_0x8b36('0x31')](_0x46c119[_0x8b36('0x32')],qs[_0x8b36('0x33')](_0x53b857[_0x8b36('0x2e')][_0x8b36('0x33')]));_0x1d5038[_0x8b36('0x30')]=_0x1d5038[_0x8b36('0x30')][_0x8b36('0x34')]?_0x1d5038[_0x8b36('0x30')]:_0x46c119[_0x8b36('0x32')];if(!_0x53b857[_0x8b36('0x2e')][_0x8b36('0x35')](_0x8b36('0x36'))){_0x1d5038[_0x8b36('0x20')]=qs['limit'](_0x53b857[_0x8b36('0x2e')][_0x8b36('0x20')]);_0x1d5038[_0x8b36('0x1f')]=qs['offset'](_0x53b857[_0x8b36('0x2e')]['offset']);}_0x1d5038[_0x8b36('0x37')]=qs[_0x8b36('0x38')](_0x53b857[_0x8b36('0x2e')][_0x8b36('0x38')]);_0x1d5038['where']=qs[_0x8b36('0x39')](_[_0x8b36('0x3a')](_0x53b857[_0x8b36('0x2e')],_0x46c119[_0x8b36('0x39')]));if(_0x53b857[_0x8b36('0x2e')][_0x8b36('0x3b')]){_0x1d5038[_0x8b36('0x3c')]=_[_0x8b36('0x3d')](_0x1d5038[_0x8b36('0x3c')],{'$or':_[_0x8b36('0x3e')](_0x4b8e10,function(_0x66b2e1){if(_0x66b2e1[_0x8b36('0x3f')]['key']!==_0x8b36('0x40')){var _0x1e50bb={};_0x1e50bb[_0x66b2e1[_0x8b36('0x41')]]={'$like':'%'+_0x53b857[_0x8b36('0x2e')][_0x8b36('0x3b')]+'%'};return _0x1e50bb;}})});}_0x1d5038=_['merge']({},_0x1d5038,_0x53b857['options']);var _0x140552={'where':_0x1d5038[_0x8b36('0x3c')]};return db['VoiceQueueReport'][_0x8b36('0x42')](_0x140552)[_0x8b36('0x26')](function(_0x3e8927){_0x27e217[_0x8b36('0x42')]=_0x3e8927;if(_0x53b857[_0x8b36('0x2e')][_0x8b36('0x43')]){_0x1d5038[_0x8b36('0x44')]=[{'all':!![]}];}return db[_0x8b36('0x2d')][_0x8b36('0x45')](_0x1d5038);})['then'](function(_0xc4f39e){_0x27e217['rows']=_0xc4f39e;return _0x27e217;})['then'](respondWithFilteredResult(_0x3891cf,_0x1d5038))[_0x8b36('0x46')](handleError(_0x3891cf,null));};exports['show']=function(_0x741325,_0x296332){var _0x2c1a5a={'raw':![],'where':{'id':_0x741325[_0x8b36('0x47')]['id']}},_0x2c3ce5={};_0x2c3ce5['model']=_[_0x8b36('0x2f')](db[_0x8b36('0x2d')][_0x8b36('0x48')]);_0x2c3ce5[_0x8b36('0x2e')]=_[_0x8b36('0x2f')](_0x741325[_0x8b36('0x2e')]);_0x2c3ce5[_0x8b36('0x39')]=_[_0x8b36('0x31')](_0x2c3ce5[_0x8b36('0x32')],_0x2c3ce5['query']);_0x2c1a5a['attributes']=_[_0x8b36('0x31')](_0x2c3ce5['model'],qs[_0x8b36('0x33')](_0x741325[_0x8b36('0x2e')]['fields']));_0x2c1a5a[_0x8b36('0x30')]=_0x2c1a5a[_0x8b36('0x30')][_0x8b36('0x34')]?_0x2c1a5a['attributes']:_0x2c3ce5[_0x8b36('0x32')];if(_0x741325[_0x8b36('0x2e')]['includeAll']){_0x2c1a5a[_0x8b36('0x44')]=[{'all':!![]}];}_0x2c1a5a=_[_0x8b36('0x3d')]({},_0x2c1a5a,_0x741325[_0x8b36('0x49')]);return db[_0x8b36('0x2d')][_0x8b36('0x4a')](_0x2c1a5a)[_0x8b36('0x26')](handleEntityNotFound(_0x296332,null))['then'](respondWithResult(_0x296332,null))[_0x8b36('0x46')](handleError(_0x296332,null));};exports[_0x8b36('0x4b')]=function(_0x5d0ffd,_0x578711){return db[_0x8b36('0x2d')]['create'](_0x5d0ffd['body'],{})[_0x8b36('0x26')](respondWithResult(_0x578711,0xc9))[_0x8b36('0x46')](handleError(_0x578711,null));};exports[_0x8b36('0x25')]=function(_0x17f756,_0x513c12){if(_0x17f756[_0x8b36('0x4c')]['id']){delete _0x17f756['body']['id'];}return db[_0x8b36('0x2d')][_0x8b36('0x4a')]({'where':{'id':_0x17f756[_0x8b36('0x47')]['id']}})[_0x8b36('0x26')](handleEntityNotFound(_0x513c12,null))[_0x8b36('0x26')](saveUpdates(_0x17f756[_0x8b36('0x4c')],null))['then'](respondWithResult(_0x513c12,null))['catch'](handleError(_0x513c12,null));};exports[_0x8b36('0x27')]=function(_0x16a9f6,_0x56e279){return db[_0x8b36('0x2d')]['find']({'where':{'id':_0x16a9f6['params']['id']}})[_0x8b36('0x26')](handleEntityNotFound(_0x56e279,null))[_0x8b36('0x26')](removeEntity(_0x56e279,null))[_0x8b36('0x46')](handleError(_0x56e279,null));};exports['describe']=function(_0x24a40a,_0x280f8d){return db['VoiceQueueReport']['describe']()[_0x8b36('0x26')](respondWithResult(_0x280f8d,null))[_0x8b36('0x46')](handleError(_0x280f8d,null));};exports[_0x8b36('0x4d')]=function(_0x53ed49,_0xeedc57){var _0x37e479={},_0x3ca28b={},_0x40ba8c={'count':0x0,'rows':[]};_0x3ca28b[_0x8b36('0x32')]=_[_0x8b36('0x2f')](db[_0x8b36('0x2d')]['rawAttributes']);_0x3ca28b[_0x8b36('0x2e')]=_['keys'](_0x53ed49[_0x8b36('0x2e')]);_0x3ca28b['filters']=_[_0x8b36('0x31')](_0x3ca28b['model'],_0x3ca28b['query']);_0x37e479[_0x8b36('0x30')]=_[_0x8b36('0x31')](_0x3ca28b[_0x8b36('0x32')],qs['fields'](_0x53ed49[_0x8b36('0x2e')]['fields']));_0x37e479['attributes']=_0x37e479['attributes'][_0x8b36('0x34')]?_0x37e479['attributes']:_0x3ca28b[_0x8b36('0x32')];if(!_0x53ed49['query'][_0x8b36('0x35')](_0x8b36('0x36'))){_0x37e479['limit']=qs['limit'](_0x53ed49[_0x8b36('0x2e')]['limit']);_0x37e479['offset']=qs['offset'](_0x53ed49[_0x8b36('0x2e')][_0x8b36('0x1f')]);}_0x37e479[_0x8b36('0x37')]=qs[_0x8b36('0x38')](_0x53ed49[_0x8b36('0x2e')][_0x8b36('0x38')]);_0x37e479['where']=qs[_0x8b36('0x39')](_['pick'](_0x53ed49[_0x8b36('0x2e')],_0x3ca28b[_0x8b36('0x39')]));if(_0x53ed49[_0x8b36('0x2e')][_0x8b36('0x3b')]){_0x37e479[_0x8b36('0x3c')]=_[_0x8b36('0x3d')](_0x37e479[_0x8b36('0x3c')],{'$or':_[_0x8b36('0x3e')](_0x37e479[_0x8b36('0x30')],function(_0x16e39c){var _0x243200={};_0x243200[_0x16e39c]={'$like':'%'+_0x53ed49[_0x8b36('0x2e')][_0x8b36('0x3b')]+'%'};return _0x243200;})});}_0x37e479=_[_0x8b36('0x3d')]({},_0x37e479,_0x53ed49[_0x8b36('0x49')]);var _0x26f9e6={'where':_0x37e479['where']};return db[_0x8b36('0x2d')][_0x8b36('0x42')](_0x26f9e6)['then'](function(_0x5a7103){_0x40ba8c['count']=_0x5a7103;if(_0x53ed49[_0x8b36('0x2e')][_0x8b36('0x43')]){_0x37e479['include']=[{'all':!![]}];}return db[_0x8b36('0x2d')][_0x8b36('0x45')](_0x37e479);})[_0x8b36('0x26')](function(_0x357fe7){_0x40ba8c[_0x8b36('0x4e')]=_0x357fe7;return _0x40ba8c;})['then'](respondWithFilteredResult(_0xeedc57,_0x37e479,'getVoiceQueuesReport'))[_0x8b36('0x46')](handleError(_0xeedc57,null,_0x8b36('0x4d')));};
\ No newline at end of file
index e6a96a4..3cafcab 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7a9a=['update','remove','emit','hook','exports','../../mysqldb','VoiceQueueReport'];(function(_0x433a86,_0x175b5c){var _0x23000c=function(_0x4b1fa0){while(--_0x4b1fa0){_0x433a86['push'](_0x433a86['shift']());}};_0x23000c(++_0x175b5c);}(_0x7a9a,0x10f));var _0xa7a9=function(_0x2b6e39,_0x4d4891){_0x2b6e39=_0x2b6e39-0x0;var _0x4075f5=_0x7a9a[_0x2b6e39];return _0x4075f5;};'use strict';var EventEmitter=require('events');var VoiceQueueReport=require(_0xa7a9('0x0'))['db'][_0xa7a9('0x1')];var VoiceQueueReportEvents=new EventEmitter();VoiceQueueReportEvents['setMaxListeners'](0x0);var events={'afterCreate':'save','afterUpdate':_0xa7a9('0x2'),'afterDestroy':_0xa7a9('0x3')};function emitEvent(_0x2a93ab){return function(_0x24ebaa,_0x269ab8,_0xd5fb26){VoiceQueueReportEvents['emit'](_0x2a93ab+':'+_0x24ebaa['id'],_0x24ebaa);VoiceQueueReportEvents[_0xa7a9('0x4')](_0x2a93ab,_0x24ebaa);_0xd5fb26(null);};}for(var e in events){if(events['hasOwnProperty'](e)){var event=events[e];VoiceQueueReport[_0xa7a9('0x5')](e,emitEvent(event));}}module[_0xa7a9('0x6')]=VoiceQueueReportEvents;
\ No newline at end of file
+var _0x3486=['save','update','emit','hasOwnProperty','exports','events','VoiceQueueReport','setMaxListeners'];(function(_0x9bb2c7,_0xf870f9){var _0x1bc98a=function(_0x559ee2){while(--_0x559ee2){_0x9bb2c7['push'](_0x9bb2c7['shift']());}};_0x1bc98a(++_0xf870f9);}(_0x3486,0x1c5));var _0x6348=function(_0x1e5725,_0x3f4e13){_0x1e5725=_0x1e5725-0x0;var _0x4b5cf8=_0x3486[_0x1e5725];return _0x4b5cf8;};'use strict';var EventEmitter=require(_0x6348('0x0'));var VoiceQueueReport=require('../../mysqldb')['db'][_0x6348('0x1')];var VoiceQueueReportEvents=new EventEmitter();VoiceQueueReportEvents[_0x6348('0x2')](0x0);var events={'afterCreate':_0x6348('0x3'),'afterUpdate':_0x6348('0x4'),'afterDestroy':'remove'};function emitEvent(_0x22dcdf){return function(_0x4e2d32,_0x51fb01,_0x5ce35b){VoiceQueueReportEvents[_0x6348('0x5')](_0x22dcdf+':'+_0x4e2d32['id'],_0x4e2d32);VoiceQueueReportEvents[_0x6348('0x5')](_0x22dcdf,_0x4e2d32);_0x5ce35b(null);};}for(var e in events){if(events[_0x6348('0x6')](e)){var event=events[e];VoiceQueueReport['hook'](e,emitEvent(event));}}module[_0x6348('0x7')]=VoiceQueueReportEvents;
\ No newline at end of file
index 2abb07e..7a97ff7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbd7a=['report_queue','uniqueid','calleridnum','lodash','util','moment','bluebird','request-promise','define','VoiceQueueReport'];(function(_0x4e467f,_0xfe6562){var _0x1a3cb3=function(_0x509da1){while(--_0x509da1){_0x4e467f['push'](_0x4e467f['shift']());}};_0x1a3cb3(++_0xfe6562);}(_0xbd7a,0x17f));var _0xabd7=function(_0x33298b,_0x42f55f){_0x33298b=_0x33298b-0x0;var _0x49bc13=_0xbd7a[_0x33298b];return _0x49bc13;};'use strict';var _=require(_0xabd7('0x0'));var util=require(_0xabd7('0x1'));var logger=require('../../config/logger')('api');var moment=require(_0xabd7('0x2'));var BPromise=require(_0xabd7('0x3'));var rp=require(_0xabd7('0x4'));var attributes=require('./voiceQueueReport.attributes');module['exports']=function(_0x325e1f,_0x56ec31){return _0x325e1f[_0xabd7('0x5')](_0xabd7('0x6'),attributes,{'tableName':_0xabd7('0x7'),'paranoid':![],'indexes':[{'fields':[_0xabd7('0x8')]},{'fields':[_0xabd7('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0x7f7b=['api','bluebird','request-promise','./voiceQueueReport.attributes','exports','define','VoiceQueueReport','report_queue','calleridnum','lodash','util','../../config/logger'];(function(_0x503f50,_0x1a8cce){var _0x3a1db4=function(_0x45bf23){while(--_0x45bf23){_0x503f50['push'](_0x503f50['shift']());}};_0x3a1db4(++_0x1a8cce);}(_0x7f7b,0xb1));var _0xb7f7=function(_0x350203,_0x286f9b){_0x350203=_0x350203-0x0;var _0xc1d5c4=_0x7f7b[_0x350203];return _0xc1d5c4;};'use strict';var _=require(_0xb7f7('0x0'));var util=require(_0xb7f7('0x1'));var logger=require(_0xb7f7('0x2'))(_0xb7f7('0x3'));var moment=require('moment');var BPromise=require(_0xb7f7('0x4'));var rp=require(_0xb7f7('0x5'));var attributes=require(_0xb7f7('0x6'));module[_0xb7f7('0x7')]=function(_0x3cd6bd,_0x71c2b7){return _0x3cd6bd[_0xb7f7('0x8')](_0xb7f7('0x9'),attributes,{'tableName':_0xb7f7('0xa'),'paranoid':![],'indexes':[{'fields':['uniqueid']},{'fields':[_0xb7f7('0xb')]}],'timestamps':!![]});};
\ No newline at end of file
index 5302162..3687233 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x93d6=['moment','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','redis','localhost','socket.io-emitter','then','info','VoiceQueueReport,\x20%s,\x20%s','request\x20sent','debug','VoiceQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','result','VoiceQueueReport','findAll','options','raw','where','limit','map','include','model','attributes','GetVoiceQueueReport','catch','CreateVoiceQueueReport','body','UpdateVoiceQueueReport','update','lodash','util'];(function(_0xcffae0,_0x1f70ca){var _0x24f329=function(_0x228238){while(--_0x228238){_0xcffae0['push'](_0xcffae0['shift']());}};_0x24f329(++_0x1f70ca);}(_0x93d6,0xa6));var _0x693d=function(_0x594d9d,_0x264beb){_0x594d9d=_0x594d9d-0x0;var _0x483050=_0x93d6[_0x594d9d];return _0x483050;};'use strict';var _=require(_0x693d('0x0'));var util=require(_0x693d('0x1'));var moment=require(_0x693d('0x2'));var BPromise=require('bluebird');var rs=require(_0x693d('0x3'));var fs=require('fs');var Redis=require(_0x693d('0x4'));var db=require(_0x693d('0x5'))['db'];var utils=require(_0x693d('0x6'));var logger=require(_0x693d('0x7'))('rpc');var config=require(_0x693d('0x8'));var jayson=require(_0x693d('0x9'));var client=jayson[_0x693d('0xa')][_0x693d('0xb')]({'port':0x232a});config['redis']=_['defaults'](config[_0x693d('0xc')],{'host':_0x693d('0xd'),'port':0x18eb});var socket=require(_0x693d('0xe'))(new Redis(config[_0x693d('0xc')]));require('./voiceQueueReport.socket')['register'](socket);function respondWithRpcPromise(_0x520518,_0x255f45,_0x1a494a){return new BPromise(function(_0x273692,_0x30ba3b){return client['request'](_0x520518,_0x1a494a)[_0x693d('0xf')](function(_0xa2cee8){logger[_0x693d('0x10')](_0x693d('0x11'),_0x255f45,_0x693d('0x12'));logger[_0x693d('0x13')](_0x693d('0x14'),_0x255f45,'request\x20sent',JSON[_0x693d('0x15')](_0xa2cee8));if(_0xa2cee8[_0x693d('0x16')]){if(_0xa2cee8[_0x693d('0x16')][_0x693d('0x17')]===0x1f4){logger[_0x693d('0x16')](_0x693d('0x11'),_0x255f45,_0xa2cee8['error']['message']);return _0x30ba3b(_0xa2cee8[_0x693d('0x16')][_0x693d('0x18')]);}logger[_0x693d('0x16')](_0x693d('0x11'),_0x255f45,_0xa2cee8[_0x693d('0x16')][_0x693d('0x18')]);return _0x273692(_0xa2cee8[_0x693d('0x16')][_0x693d('0x18')]);}else{logger['info'](_0x693d('0x11'),_0x255f45,_0x693d('0x12'));_0x273692(_0xa2cee8[_0x693d('0x19')][_0x693d('0x18')]);}})['catch'](function(_0x4d3977){logger[_0x693d('0x16')](_0x693d('0x11'),_0x255f45,_0x4d3977);_0x30ba3b(_0x4d3977);});});}exports['GetVoiceQueueReport']=function(_0x52b040){var _0x15d6d9=this;return new Promise(function(_0x359c1f,_0x105044){return db[_0x693d('0x1a')][_0x693d('0x1b')]({'raw':_0x52b040[_0x693d('0x1c')]?_0x52b040[_0x693d('0x1c')][_0x693d('0x1d')]===undefined?!![]:![]:!![],'where':_0x52b040[_0x693d('0x1c')]?_0x52b040[_0x693d('0x1c')][_0x693d('0x1e')]||null:null,'attributes':_0x52b040[_0x693d('0x1c')]?_0x52b040[_0x693d('0x1c')]['attributes']||null:null,'limit':_0x52b040[_0x693d('0x1c')]?_0x52b040[_0x693d('0x1c')][_0x693d('0x1f')]||null:null,'include':_0x52b040[_0x693d('0x1c')]?_0x52b040['options']['include']?_[_0x693d('0x20')](_0x52b040[_0x693d('0x1c')][_0x693d('0x21')],function(_0x28a95e){return{'model':db[_0x28a95e[_0x693d('0x22')]],'as':_0x28a95e['as'],'attributes':_0x28a95e[_0x693d('0x23')],'include':_0x28a95e[_0x693d('0x21')]?_['map'](_0x28a95e['include'],function(_0x32f295){return{'model':db[_0x32f295[_0x693d('0x22')]],'as':_0x32f295['as'],'attributes':_0x32f295[_0x693d('0x23')],'include':_0x32f295[_0x693d('0x21')]?_[_0x693d('0x20')](_0x32f295[_0x693d('0x21')],function(_0x1ea722){return{'model':db[_0x1ea722[_0x693d('0x22')]],'as':_0x1ea722['as'],'attributes':_0x1ea722['attributes']};}):[]};}):[]};}):[]:[]})[_0x693d('0xf')](function(_0x22091e){logger[_0x693d('0x10')]('GetVoiceQueueReport',_0x52b040);logger['debug'](_0x693d('0x24'),_0x52b040,JSON[_0x693d('0x15')](_0x22091e));_0x359c1f(_0x22091e);})[_0x693d('0x25')](function(_0x59db8f){logger[_0x693d('0x16')](_0x693d('0x24'),_0x59db8f[_0x693d('0x18')],_0x52b040);_0x105044(_0x15d6d9[_0x693d('0x16')](0x1f4,_0x59db8f['message']));});});};exports[_0x693d('0x26')]=function(_0x1a67b8){var _0x104a52=this;return new Promise(function(_0x407371,_0x2f1ecb){return db[_0x693d('0x1a')]['create'](_0x1a67b8[_0x693d('0x27')],{'raw':_0x1a67b8[_0x693d('0x1c')]?_0x1a67b8['options'][_0x693d('0x1d')]===undefined?!![]:![]:!![]})[_0x693d('0xf')](function(_0x3a3aa7){logger[_0x693d('0x10')](_0x693d('0x26'),_0x1a67b8);logger['debug'](_0x693d('0x26'),_0x1a67b8,JSON['stringify'](_0x3a3aa7));_0x407371(_0x3a3aa7);})[_0x693d('0x25')](function(_0x5edb50){logger[_0x693d('0x16')](_0x693d('0x26'),_0x5edb50['message'],_0x1a67b8);_0x2f1ecb(_0x104a52[_0x693d('0x16')](0x1f4,_0x5edb50['message']));});});};exports[_0x693d('0x28')]=function(_0x5da010){var _0x3fd1d6=this;return new Promise(function(_0xf73bc9,_0x44456a){return db['VoiceQueueReport'][_0x693d('0x29')](_0x5da010[_0x693d('0x27')],{'raw':_0x5da010[_0x693d('0x1c')]?_0x5da010[_0x693d('0x1c')][_0x693d('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x5da010[_0x693d('0x1c')]?_0x5da010['options']['where']||null:null,'attributes':_0x5da010[_0x693d('0x1c')]?_0x5da010[_0x693d('0x1c')][_0x693d('0x23')]||null:null,'limit':_0x5da010[_0x693d('0x1c')]?_0x5da010[_0x693d('0x1c')]['limit']||null:null})[_0x693d('0xf')](function(_0x1ef412){logger['info'](_0x693d('0x28'),_0x5da010);logger[_0x693d('0x13')](_0x693d('0x28'),_0x5da010,JSON['stringify'](_0x1ef412));_0xf73bc9(_0x1ef412);})['catch'](function(_0x341b5e){logger[_0x693d('0x16')](_0x693d('0x28'),_0x341b5e[_0x693d('0x18')],_0x5da010);_0x44456a(_0x3fd1d6[_0x693d('0x16')](0x1f4,_0x341b5e['message']));});});};
\ No newline at end of file
+var _0x4cda=['include','model','GetVoiceQueueReport','body','CreateVoiceQueueReport','UpdateVoiceQueueReport','where','moment','randomstring','ioredis','../../mysqldb','../../config/logger','rpc','../../config/environment','client','http','redis','defaults','localhost','socket.io-emitter','./voiceQueueReport.socket','request','then','VoiceQueueReport,\x20%s,\x20%s','request\x20sent','debug','VoiceQueueReport,\x20%s,\x20%s,\x20%s','stringify','error','code','message','info','catch','VoiceQueueReport','findAll','options','raw','attributes'];(function(_0x421cea,_0x483fc7){var _0x5d85ea=function(_0x41f5a1){while(--_0x41f5a1){_0x421cea['push'](_0x421cea['shift']());}};_0x5d85ea(++_0x483fc7);}(_0x4cda,0xc5));var _0xa4cd=function(_0x5e2cb4,_0x592c64){_0x5e2cb4=_0x5e2cb4-0x0;var _0x282902=_0x4cda[_0x5e2cb4];return _0x282902;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0xa4cd('0x0'));var BPromise=require('bluebird');var rs=require(_0xa4cd('0x1'));var fs=require('fs');var Redis=require(_0xa4cd('0x2'));var db=require(_0xa4cd('0x3'))['db'];var utils=require('../../config/utils');var logger=require(_0xa4cd('0x4'))(_0xa4cd('0x5'));var config=require(_0xa4cd('0x6'));var jayson=require('jayson/promise');var client=jayson[_0xa4cd('0x7')][_0xa4cd('0x8')]({'port':0x232a});config[_0xa4cd('0x9')]=_[_0xa4cd('0xa')](config[_0xa4cd('0x9')],{'host':_0xa4cd('0xb'),'port':0x18eb});var socket=require(_0xa4cd('0xc'))(new Redis(config[_0xa4cd('0x9')]));require(_0xa4cd('0xd'))['register'](socket);function respondWithRpcPromise(_0x39ff6b,_0x5aa670,_0x423fe6){return new BPromise(function(_0x44c986,_0x3122ff){return client[_0xa4cd('0xe')](_0x39ff6b,_0x423fe6)[_0xa4cd('0xf')](function(_0xd867f6){logger['info'](_0xa4cd('0x10'),_0x5aa670,_0xa4cd('0x11'));logger[_0xa4cd('0x12')](_0xa4cd('0x13'),_0x5aa670,_0xa4cd('0x11'),JSON[_0xa4cd('0x14')](_0xd867f6));if(_0xd867f6['error']){if(_0xd867f6[_0xa4cd('0x15')][_0xa4cd('0x16')]===0x1f4){logger[_0xa4cd('0x15')](_0xa4cd('0x10'),_0x5aa670,_0xd867f6[_0xa4cd('0x15')][_0xa4cd('0x17')]);return _0x3122ff(_0xd867f6[_0xa4cd('0x15')][_0xa4cd('0x17')]);}logger[_0xa4cd('0x15')](_0xa4cd('0x10'),_0x5aa670,_0xd867f6['error'][_0xa4cd('0x17')]);return _0x44c986(_0xd867f6[_0xa4cd('0x15')][_0xa4cd('0x17')]);}else{logger[_0xa4cd('0x18')](_0xa4cd('0x10'),_0x5aa670,_0xa4cd('0x11'));_0x44c986(_0xd867f6['result']['message']);}})[_0xa4cd('0x19')](function(_0xd1679c){logger[_0xa4cd('0x15')](_0xa4cd('0x10'),_0x5aa670,_0xd1679c);_0x3122ff(_0xd1679c);});});}exports['GetVoiceQueueReport']=function(_0x3fef6f){var _0x2a6b96=this;return new Promise(function(_0x5628b2,_0x4cb89e){return db[_0xa4cd('0x1a')][_0xa4cd('0x1b')]({'raw':_0x3fef6f[_0xa4cd('0x1c')]?_0x3fef6f['options'][_0xa4cd('0x1d')]===undefined?!![]:![]:!![],'where':_0x3fef6f['options']?_0x3fef6f[_0xa4cd('0x1c')]['where']||null:null,'attributes':_0x3fef6f[_0xa4cd('0x1c')]?_0x3fef6f['options'][_0xa4cd('0x1e')]||null:null,'limit':_0x3fef6f[_0xa4cd('0x1c')]?_0x3fef6f['options']['limit']||null:null,'include':_0x3fef6f[_0xa4cd('0x1c')]?_0x3fef6f['options']['include']?_['map'](_0x3fef6f[_0xa4cd('0x1c')][_0xa4cd('0x1f')],function(_0x27f4a6){return{'model':db[_0x27f4a6[_0xa4cd('0x20')]],'as':_0x27f4a6['as'],'attributes':_0x27f4a6[_0xa4cd('0x1e')],'include':_0x27f4a6['include']?_['map'](_0x27f4a6['include'],function(_0x101baf){return{'model':db[_0x101baf[_0xa4cd('0x20')]],'as':_0x101baf['as'],'attributes':_0x101baf['attributes'],'include':_0x101baf[_0xa4cd('0x1f')]?_['map'](_0x101baf[_0xa4cd('0x1f')],function(_0x3c1f83){return{'model':db[_0x3c1f83[_0xa4cd('0x20')]],'as':_0x3c1f83['as'],'attributes':_0x3c1f83[_0xa4cd('0x1e')]};}):[]};}):[]};}):[]:[]})[_0xa4cd('0xf')](function(_0x309a75){logger[_0xa4cd('0x18')](_0xa4cd('0x21'),_0x3fef6f);logger['debug'](_0xa4cd('0x21'),_0x3fef6f,JSON['stringify'](_0x309a75));_0x5628b2(_0x309a75);})[_0xa4cd('0x19')](function(_0x3e53aa){logger[_0xa4cd('0x15')](_0xa4cd('0x21'),_0x3e53aa[_0xa4cd('0x17')],_0x3fef6f);_0x4cb89e(_0x2a6b96[_0xa4cd('0x15')](0x1f4,_0x3e53aa[_0xa4cd('0x17')]));});});};exports['CreateVoiceQueueReport']=function(_0xf2982f){var _0xe36537=this;return new Promise(function(_0x509753,_0x59be01){return db['VoiceQueueReport']['create'](_0xf2982f[_0xa4cd('0x22')],{'raw':_0xf2982f[_0xa4cd('0x1c')]?_0xf2982f[_0xa4cd('0x1c')]['raw']===undefined?!![]:![]:!![]})[_0xa4cd('0xf')](function(_0x535c6d){logger[_0xa4cd('0x18')](_0xa4cd('0x23'),_0xf2982f);logger[_0xa4cd('0x12')](_0xa4cd('0x23'),_0xf2982f,JSON['stringify'](_0x535c6d));_0x509753(_0x535c6d);})['catch'](function(_0x30e4bf){logger[_0xa4cd('0x15')]('CreateVoiceQueueReport',_0x30e4bf[_0xa4cd('0x17')],_0xf2982f);_0x59be01(_0xe36537[_0xa4cd('0x15')](0x1f4,_0x30e4bf[_0xa4cd('0x17')]));});});};exports[_0xa4cd('0x24')]=function(_0x2b35da){var _0x3be7d6=this;return new Promise(function(_0x2238b1,_0x4426c0){return db[_0xa4cd('0x1a')]['update'](_0x2b35da[_0xa4cd('0x22')],{'raw':_0x2b35da[_0xa4cd('0x1c')]?_0x2b35da[_0xa4cd('0x1c')][_0xa4cd('0x1d')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x2b35da[_0xa4cd('0x1c')]?_0x2b35da[_0xa4cd('0x1c')][_0xa4cd('0x25')]||null:null,'attributes':_0x2b35da[_0xa4cd('0x1c')]?_0x2b35da['options'][_0xa4cd('0x1e')]||null:null,'limit':_0x2b35da[_0xa4cd('0x1c')]?_0x2b35da[_0xa4cd('0x1c')]['limit']||null:null})[_0xa4cd('0xf')](function(_0x328c80){logger[_0xa4cd('0x18')](_0xa4cd('0x24'),_0x2b35da);logger[_0xa4cd('0x12')]('UpdateVoiceQueueReport',_0x2b35da,JSON['stringify'](_0x328c80));_0x2238b1(_0x328c80);})[_0xa4cd('0x19')](function(_0x4be6d2){logger[_0xa4cd('0x15')](_0xa4cd('0x24'),_0x4be6d2[_0xa4cd('0x17')],_0x2b35da);_0x4426c0(_0x3be7d6['error'](0x1f4,_0x4be6d2['message']));});});};
\ No newline at end of file
index 05d77d4..62359c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0095=['length','voiceQueueReport:','save','remove','update','removeListener','register'];(function(_0x3ac31a,_0x18f1b9){var _0x4caa11=function(_0x2d2211){while(--_0x2d2211){_0x3ac31a['push'](_0x3ac31a['shift']());}};_0x4caa11(++_0x18f1b9);}(_0x0095,0xaa));var _0x5009=function(_0x2fb453,_0x37fa88){_0x2fb453=_0x2fb453-0x0;var _0x290bc0=_0x0095[_0x2fb453];return _0x290bc0;};'use strict';var VoiceQueueReportEvents=require('./voiceQueueReport.events');var events=[_0x5009('0x0'),_0x5009('0x1'),_0x5009('0x2')];function createListener(_0x57a58a,_0x16c08f){return function(_0xd03960){_0x16c08f['emit'](_0x57a58a,_0xd03960);};}function removeListener(_0x224b3d,_0x47bd48){return function(){VoiceQueueReportEvents[_0x5009('0x3')](_0x224b3d,_0x47bd48);};}exports[_0x5009('0x4')]=function(_0x390459){for(var _0x3f4fbf=0x0,_0x38e96b=events[_0x5009('0x5')];_0x3f4fbf<_0x38e96b;_0x3f4fbf++){var _0x203627=events[_0x3f4fbf];var _0xef3b3c=createListener(_0x5009('0x6')+_0x203627,_0x390459);VoiceQueueReportEvents['on'](_0x203627,_0xef3b3c);}};
\ No newline at end of file
+var _0x551b=['removeListener','register','save','remove','update'];(function(_0x12784c,_0x348225){var _0xbc3390=function(_0x127726){while(--_0x127726){_0x12784c['push'](_0x12784c['shift']());}};_0xbc3390(++_0x348225);}(_0x551b,0x66));var _0xb551=function(_0x556bb1,_0x34830d){_0x556bb1=_0x556bb1-0x0;var _0x45455f=_0x551b[_0x556bb1];return _0x45455f;};'use strict';var VoiceQueueReportEvents=require('./voiceQueueReport.events');var events=[_0xb551('0x0'),_0xb551('0x1'),_0xb551('0x2')];function createListener(_0x3f205a,_0x3a654d){return function(_0xe6f3c3){_0x3a654d['emit'](_0x3f205a,_0xe6f3c3);};}function removeListener(_0x10974e,_0x2c5cdd){return function(){VoiceQueueReportEvents[_0xb551('0x3')](_0x10974e,_0x2c5cdd);};}exports[_0xb551('0x4')]=function(_0x5267c9){for(var _0x49ea19=0x0,_0x91740a=events['length'];_0x49ea19<_0x91740a;_0x49ea19++){var _0x58dca9=events[_0x49ea19];var _0x530a84=createListener('voiceQueueReport:'+_0x58dca9,_0x5267c9);VoiceQueueReportEvents['on'](_0x58dca9,_0x530a84);}};
\ No newline at end of file
index 41d1439..8f55d77 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7880=['Router','../../components/auth/service','../../config/environment','./voiceQueuesLog.controller','get','isAuthenticated','index','/:id','show','post','create','update','delete','destroy','util','path','connect-timeout','express'];(function(_0x205c11,_0x941d3d){var _0x550e7b=function(_0x8b0263){while(--_0x8b0263){_0x205c11['push'](_0x205c11['shift']());}};_0x550e7b(++_0x941d3d);}(_0x7880,0x1f4));var _0x0788=function(_0x44029c,_0x426690){_0x44029c=_0x44029c-0x0;var _0x547fa1=_0x7880[_0x44029c];return _0x547fa1;};'use strict';var multer=require('multer');var util=require(_0x0788('0x0'));var path=require(_0x0788('0x1'));var timeout=require(_0x0788('0x2'));var express=require(_0x0788('0x3'));var router=express[_0x0788('0x4')]();var auth=require(_0x0788('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0x0788('0x6'));var controller=require(_0x0788('0x7'));router[_0x0788('0x8')]('/',auth[_0x0788('0x9')](),controller[_0x0788('0xa')]);router[_0x0788('0x8')](_0x0788('0xb'),auth[_0x0788('0x9')](),controller[_0x0788('0xc')]);router[_0x0788('0xd')]('/',auth['isAuthenticated'](),controller[_0x0788('0xe')]);router['put'](_0x0788('0xb'),auth['isAuthenticated'](),controller[_0x0788('0xf')]);router[_0x0788('0x10')](_0x0788('0xb'),auth[_0x0788('0x9')](),controller[_0x0788('0x11')]);module['exports']=router;
\ No newline at end of file
+var _0x6455=['path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','./voiceQueuesLog.controller','get','isAuthenticated','index','/:id','show','create','put','update','delete','destroy','exports','multer'];(function(_0xf147f1,_0x1632b3){var _0xd2fe8d=function(_0x56383a){while(--_0x56383a){_0xf147f1['push'](_0xf147f1['shift']());}};_0xd2fe8d(++_0x1632b3);}(_0x6455,0x97));var _0x5645=function(_0x2bb7bd,_0x475645){_0x2bb7bd=_0x2bb7bd-0x0;var _0x5e37b9=_0x6455[_0x2bb7bd];return _0x5e37b9;};'use strict';var multer=require(_0x5645('0x0'));var util=require('util');var path=require(_0x5645('0x1'));var timeout=require(_0x5645('0x2'));var express=require(_0x5645('0x3'));var router=express[_0x5645('0x4')]();var auth=require(_0x5645('0x5'));var interaction=require(_0x5645('0x6'));var config=require('../../config/environment');var controller=require(_0x5645('0x7'));router[_0x5645('0x8')]('/',auth[_0x5645('0x9')](),controller[_0x5645('0xa')]);router[_0x5645('0x8')](_0x5645('0xb'),auth[_0x5645('0x9')](),controller[_0x5645('0xc')]);router['post']('/',auth['isAuthenticated'](),controller[_0x5645('0xd')]);router[_0x5645('0xe')](_0x5645('0xb'),auth[_0x5645('0x9')](),controller[_0x5645('0xf')]);router[_0x5645('0x10')]('/:id',auth[_0x5645('0x9')](),controller[_0x5645('0x11')]);module[_0x5645('0x12')]=router;
\ No newline at end of file
index 0e38686..e76ecaa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed1f=['YYYY-MM-DD\x20HH:mm:ss','sequelize','moment','exports','STRING','DATE','format'];(function(_0x23e815,_0x42b89f){var _0x3c2612=function(_0x10d066){while(--_0x10d066){_0x23e815['push'](_0x23e815['shift']());}};_0x3c2612(++_0x42b89f);}(_0xed1f,0x6a));var _0xfed1=function(_0x2f45ea,_0x15c656){_0x2f45ea=_0x2f45ea-0x0;var _0x485a84=_0xed1f[_0x2f45ea];return _0x485a84;};'use strict';var Sequelize=require(_0xfed1('0x0'));var moment=require(_0xfed1('0x1'));module[_0xfed1('0x2')]={'time':{'type':Sequelize[_0xfed1('0x3')]},'callid':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'queuename':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'agent':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'event':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'data':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'data1':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'data2':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'data3':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'data4':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'data5':{'type':Sequelize[_0xfed1('0x3')],'allowNull':![],'defaultValue':''},'dtm':{'type':Sequelize[_0xfed1('0x4')],'allowNull':![],'defaultValue':moment()[_0xfed1('0x5')](_0xfed1('0x6'))}};
\ No newline at end of file
+var _0x2d17=['DATE','YYYY-MM-DD\x20HH:mm:ss','sequelize','moment','STRING'];(function(_0x19cdcf,_0x3557c3){var _0x2488c1=function(_0x364be7){while(--_0x364be7){_0x19cdcf['push'](_0x19cdcf['shift']());}};_0x2488c1(++_0x3557c3);}(_0x2d17,0x17e));var _0x72d1=function(_0x5aa8c4,_0x415a6f){_0x5aa8c4=_0x5aa8c4-0x0;var _0x40b26d=_0x2d17[_0x5aa8c4];return _0x40b26d;};'use strict';var Sequelize=require(_0x72d1('0x0'));var moment=require(_0x72d1('0x1'));module['exports']={'time':{'type':Sequelize[_0x72d1('0x2')]},'callid':{'type':Sequelize[_0x72d1('0x2')],'allowNull':![],'defaultValue':''},'queuename':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'agent':{'type':Sequelize[_0x72d1('0x2')],'allowNull':![],'defaultValue':''},'event':{'type':Sequelize[_0x72d1('0x2')],'allowNull':![],'defaultValue':''},'data':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data1':{'type':Sequelize[_0x72d1('0x2')],'allowNull':![],'defaultValue':''},'data2':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data3':{'type':Sequelize[_0x72d1('0x2')],'allowNull':![],'defaultValue':''},'data4':{'type':Sequelize['STRING'],'allowNull':![],'defaultValue':''},'data5':{'type':Sequelize[_0x72d1('0x2')],'allowNull':![],'defaultValue':''},'dtm':{'type':Sequelize[_0x72d1('0x3')],'allowNull':![],'defaultValue':moment()['format'](_0x72d1('0x4'))}};
\ No newline at end of file
index 6d6e7d3..eafb646 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x85f1=['count','offset','limit','Content-Range','apply','reject','save','then','destroy','sendStatus','error','stack','name','send','index','VoiceQueuesLog','rawAttributes','keys','query','filters','intersection','model','fields','attributes','length','hasOwnProperty','nolimit','order','sort','where','pick','filter','merge','map','type','key','field','options','includeAll','findAll','rows','catch','show','params','include','find','create','body','update','zip-dir','fast-json-patch','request-promise','moment','bluebird','path','sox','to-csv','ejs','lodash','jsforce','desk.js','papaparse','../../components/auth/service','ioredis','../../components/parsers/qs','api','../../config/utils','../../config/environment','../../mysqldb','status','end','json'];(function(_0x18c7cb,_0x3f176b){var _0x5cb1e6=function(_0x5d2719){while(--_0x5d2719){_0x18c7cb['push'](_0x18c7cb['shift']());}};_0x5cb1e6(++_0x3f176b);}(_0x85f1,0x1e1));var _0x185f=function(_0x28669c,_0x1f62c4){_0x28669c=_0x28669c-0x0;var _0x4a3af6=_0x85f1[_0x28669c];return _0x4a3af6;};'use strict';var pdf=require('html-pdf');var emlformat=require('eml-format');var rimraf=require('rimraf');var zipdir=require(_0x185f('0x0'));var jsonpatch=require(_0x185f('0x1'));var rp=require(_0x185f('0x2'));var moment=require(_0x185f('0x3'));var BPromise=require(_0x185f('0x4'));var Mustache=require('mustache');var util=require('util');var path=require(_0x185f('0x5'));var sox=require(_0x185f('0x6'));var csv=require(_0x185f('0x7'));var ejs=require(_0x185f('0x8'));var fs=require('fs');var _=require(_0x185f('0x9'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0x185f('0xa'));var deskjs=require(_0x185f('0xb'));var toCsv=require(_0x185f('0x7'));var querystring=require('querystring');var Papa=require(_0x185f('0xc'));var authService=require(_0x185f('0xd'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x185f('0xe'));var qs=require(_0x185f('0xf'));var logger=require('../../config/logger')(_0x185f('0x10'));var utils=require(_0x185f('0x11'));var config=require(_0x185f('0x12'));var db=require(_0x185f('0x13'))['db'];function respondWithStatusCode(_0x26a53f,_0x8ab7db){_0x8ab7db=_0x8ab7db||0xcc;return function(_0x32b921){if(_0x32b921){return _0x26a53f['sendStatus'](_0x8ab7db);}return _0x26a53f[_0x185f('0x14')](_0x8ab7db)[_0x185f('0x15')]();};}function respondWithResult(_0x4ac061,_0x3ce26c){_0x3ce26c=_0x3ce26c||0xc8;return function(_0x370e6c){if(_0x370e6c){return _0x4ac061[_0x185f('0x14')](_0x3ce26c)[_0x185f('0x16')](_0x370e6c);}};}function respondWithFilteredResult(_0x5e7a0b,_0xd455a4){return function(_0x28dbf){if(_0x28dbf){var _0x2d1ef7=_0x28dbf[_0x185f('0x17')],_0x31780e=_0xd455a4['offset'],_0x5c77cb=_0xd455a4[_0x185f('0x18')]+_0xd455a4[_0x185f('0x19')],_0x50f73a;if(_0x5c77cb>=_0x2d1ef7){_0x5c77cb=_0x2d1ef7;_0x50f73a=0xc8;}else{_0x50f73a=0xce;}_0x5e7a0b[_0x185f('0x14')](_0x50f73a);return _0x5e7a0b['set'](_0x185f('0x1a'),_0x31780e+'-'+_0x5c77cb+'/'+_0x2d1ef7)[_0x185f('0x16')](_0x28dbf);}return null;};}function patchUpdates(_0x5680b2){return function(_0x4e081f){try{jsonpatch[_0x185f('0x1b')](_0x4e081f,_0x5680b2,!![]);}catch(_0x583834){return BPromise[_0x185f('0x1c')](_0x583834);}return _0x4e081f[_0x185f('0x1d')]();};}function saveUpdates(_0x2146a5,_0x573e2a){return function(_0x5e9eac){if(_0x5e9eac){return _0x5e9eac['update'](_0x2146a5)[_0x185f('0x1e')](function(_0xe68406){return _0xe68406;});}return null;};}function removeEntity(_0x45bc99,_0x463cd0){return function(_0x541a7f){if(_0x541a7f){return _0x541a7f[_0x185f('0x1f')]()[_0x185f('0x1e')](function(){_0x45bc99[_0x185f('0x14')](0xcc)['end']();});}};}function handleEntityNotFound(_0x214614,_0x3f4367){return function(_0x46359b){if(!_0x46359b){_0x214614[_0x185f('0x20')](0x194);}return _0x46359b;};}function handleError(_0x2fffd1,_0x3b7c74){_0x3b7c74=_0x3b7c74||0x1f4;return function(_0x1755d3){logger[_0x185f('0x21')](_0x1755d3[_0x185f('0x22')]);if(_0x1755d3[_0x185f('0x23')]){delete _0x1755d3['name'];}_0x2fffd1['status'](_0x3b7c74)[_0x185f('0x24')](_0x1755d3);};}exports[_0x185f('0x25')]=function(_0x38f202,_0x152b48){var _0x595cc2={},_0x27f791={},_0x1b2f0c={'count':0x0,'rows':[]};var _0xe22a4d=db[_0x185f('0x26')][_0x185f('0x27')];_0x27f791['model']=_[_0x185f('0x28')](_0xe22a4d);_0x27f791[_0x185f('0x29')]=_[_0x185f('0x28')](_0x38f202[_0x185f('0x29')]);_0x27f791[_0x185f('0x2a')]=_[_0x185f('0x2b')](_0x27f791[_0x185f('0x2c')],_0x27f791['query']);_0x595cc2['attributes']=_[_0x185f('0x2b')](_0x27f791[_0x185f('0x2c')],qs[_0x185f('0x2d')](_0x38f202['query'][_0x185f('0x2d')]));_0x595cc2[_0x185f('0x2e')]=_0x595cc2['attributes'][_0x185f('0x2f')]?_0x595cc2[_0x185f('0x2e')]:_0x27f791[_0x185f('0x2c')];if(!_0x38f202[_0x185f('0x29')][_0x185f('0x30')](_0x185f('0x31'))){_0x595cc2[_0x185f('0x19')]=qs[_0x185f('0x19')](_0x38f202[_0x185f('0x29')][_0x185f('0x19')]);_0x595cc2[_0x185f('0x18')]=qs['offset'](_0x38f202[_0x185f('0x29')]['offset']);}_0x595cc2[_0x185f('0x32')]=qs[_0x185f('0x33')](_0x38f202[_0x185f('0x29')]['sort']);_0x595cc2[_0x185f('0x34')]=qs[_0x185f('0x2a')](_[_0x185f('0x35')](_0x38f202[_0x185f('0x29')],_0x27f791[_0x185f('0x2a')]));if(_0x38f202[_0x185f('0x29')][_0x185f('0x36')]){_0x595cc2['where']=_[_0x185f('0x37')](_0x595cc2[_0x185f('0x34')],{'$or':_[_0x185f('0x38')](_0xe22a4d,function(_0x589b15){if(_0x589b15[_0x185f('0x39')][_0x185f('0x3a')]!=='VIRTUAL'){var _0x194665={};_0x194665[_0x589b15[_0x185f('0x3b')]]={'$like':'%'+_0x38f202[_0x185f('0x29')][_0x185f('0x36')]+'%'};return _0x194665;}})});}_0x595cc2=_[_0x185f('0x37')]({},_0x595cc2,_0x38f202[_0x185f('0x3c')]);var _0x95fa16={'where':_0x595cc2[_0x185f('0x34')]};return db[_0x185f('0x26')][_0x185f('0x17')](_0x95fa16)[_0x185f('0x1e')](function(_0x81dd2f){_0x1b2f0c['count']=_0x81dd2f;if(_0x38f202[_0x185f('0x29')][_0x185f('0x3d')]){_0x595cc2['include']=[{'all':!![]}];}return db[_0x185f('0x26')][_0x185f('0x3e')](_0x595cc2);})[_0x185f('0x1e')](function(_0x40e1e2){_0x1b2f0c[_0x185f('0x3f')]=_0x40e1e2;return _0x1b2f0c;})[_0x185f('0x1e')](respondWithFilteredResult(_0x152b48,_0x595cc2))[_0x185f('0x40')](handleError(_0x152b48,null));};exports[_0x185f('0x41')]=function(_0x19c776,_0x158a1b){var _0x41e497={'raw':!![],'where':{'id':_0x19c776[_0x185f('0x42')]['id']}},_0x34c786={};_0x34c786['model']=_[_0x185f('0x28')](db['VoiceQueuesLog'][_0x185f('0x27')]);_0x34c786[_0x185f('0x29')]=_[_0x185f('0x28')](_0x19c776[_0x185f('0x29')]);_0x34c786[_0x185f('0x2a')]=_['intersection'](_0x34c786[_0x185f('0x2c')],_0x34c786[_0x185f('0x29')]);_0x41e497['attributes']=_['intersection'](_0x34c786[_0x185f('0x2c')],qs[_0x185f('0x2d')](_0x19c776[_0x185f('0x29')][_0x185f('0x2d')]));_0x41e497['attributes']=_0x41e497[_0x185f('0x2e')][_0x185f('0x2f')]?_0x41e497[_0x185f('0x2e')]:_0x34c786['model'];if(_0x19c776[_0x185f('0x29')]['includeAll']){_0x41e497[_0x185f('0x43')]=[{'all':!![]}];}_0x41e497=_[_0x185f('0x37')]({},_0x41e497,_0x19c776['options']);return db['VoiceQueuesLog'][_0x185f('0x44')](_0x41e497)[_0x185f('0x1e')](handleEntityNotFound(_0x158a1b,null))['then'](respondWithResult(_0x158a1b,null))[_0x185f('0x40')](handleError(_0x158a1b,null));};exports[_0x185f('0x45')]=function(_0x42b0aa,_0x100568){return db[_0x185f('0x26')]['create'](_0x42b0aa[_0x185f('0x46')],{})[_0x185f('0x1e')](respondWithResult(_0x100568,0xc9))['catch'](handleError(_0x100568,null));};exports[_0x185f('0x47')]=function(_0x1b6d4b,_0xed16d2){if(_0x1b6d4b['body']['id']){delete _0x1b6d4b[_0x185f('0x46')]['id'];}return db['VoiceQueuesLog'][_0x185f('0x44')]({'where':{'id':_0x1b6d4b[_0x185f('0x42')]['id']}})[_0x185f('0x1e')](handleEntityNotFound(_0xed16d2,null))['then'](saveUpdates(_0x1b6d4b['body'],null))[_0x185f('0x1e')](respondWithResult(_0xed16d2,null))['catch'](handleError(_0xed16d2,null));};exports[_0x185f('0x1f')]=function(_0x1a5a2b,_0x436261){return db[_0x185f('0x26')][_0x185f('0x44')]({'where':{'id':_0x1a5a2b[_0x185f('0x42')]['id']}})[_0x185f('0x1e')](handleEntityNotFound(_0x436261,null))[_0x185f('0x1e')](removeEntity(_0x436261,null))[_0x185f('0x40')](handleError(_0x436261,null));};
\ No newline at end of file
+var _0xedd7=['filter','merge','where','map','type','VIRTUAL','field','options','includeAll','include','findAll','rows','catch','show','params','find','body','update','destroy','html-pdf','rimraf','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','crypto','jsforce','querystring','papaparse','../../components/auth/service','ioredis','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','count','offset','limit','set','apply','save','then','error','stack','name','send','index','VoiceQueuesLog','model','keys','query','filters','intersection','attributes','fields','hasOwnProperty','nolimit','sort','pick'];(function(_0xf5d349,_0x572c3a){var _0x272c31=function(_0x526da3){while(--_0x526da3){_0xf5d349['push'](_0xf5d349['shift']());}};_0x272c31(++_0x572c3a);}(_0xedd7,0x1bd));var _0x7edd=function(_0xcb8fde,_0x24399c){_0xcb8fde=_0xcb8fde-0x0;var _0x16dd77=_0xedd7[_0xcb8fde];return _0x16dd77;};'use strict';var pdf=require(_0x7edd('0x0'));var emlformat=require('eml-format');var rimraf=require(_0x7edd('0x1'));var zipdir=require(_0x7edd('0x2'));var jsonpatch=require(_0x7edd('0x3'));var rp=require(_0x7edd('0x4'));var moment=require(_0x7edd('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x7edd('0x6'));var util=require(_0x7edd('0x7'));var path=require(_0x7edd('0x8'));var sox=require(_0x7edd('0x9'));var csv=require(_0x7edd('0xa'));var ejs=require(_0x7edd('0xb'));var fs=require('fs');var _=require(_0x7edd('0xc'));var squel=require('squel');var crypto=require(_0x7edd('0xd'));var jsforce=require(_0x7edd('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0x7edd('0xf'));var Papa=require(_0x7edd('0x10'));var authService=require(_0x7edd('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require(_0x7edd('0x12'));var qs=require('../../components/parsers/qs');var logger=require(_0x7edd('0x13'))(_0x7edd('0x14'));var utils=require(_0x7edd('0x15'));var config=require(_0x7edd('0x16'));var db=require(_0x7edd('0x17'))['db'];function respondWithStatusCode(_0x54ef52,_0x1833b8){_0x1833b8=_0x1833b8||0xcc;return function(_0x395548){if(_0x395548){return _0x54ef52[_0x7edd('0x18')](_0x1833b8);}return _0x54ef52[_0x7edd('0x19')](_0x1833b8)[_0x7edd('0x1a')]();};}function respondWithResult(_0x58cda1,_0x402265){_0x402265=_0x402265||0xc8;return function(_0x285bdc){if(_0x285bdc){return _0x58cda1[_0x7edd('0x19')](_0x402265)[_0x7edd('0x1b')](_0x285bdc);}};}function respondWithFilteredResult(_0x28ab10,_0x57e13e){return function(_0x3c4c60){if(_0x3c4c60){var _0x29912d=_0x3c4c60[_0x7edd('0x1c')],_0x5162d0=_0x57e13e['offset'],_0x438934=_0x57e13e[_0x7edd('0x1d')]+_0x57e13e[_0x7edd('0x1e')],_0x466f5f;if(_0x438934>=_0x29912d){_0x438934=_0x29912d;_0x466f5f=0xc8;}else{_0x466f5f=0xce;}_0x28ab10[_0x7edd('0x19')](_0x466f5f);return _0x28ab10[_0x7edd('0x1f')]('Content-Range',_0x5162d0+'-'+_0x438934+'/'+_0x29912d)['json'](_0x3c4c60);}return null;};}function patchUpdates(_0x124c73){return function(_0x341a6b){try{jsonpatch[_0x7edd('0x20')](_0x341a6b,_0x124c73,!![]);}catch(_0x3ee74f){return BPromise['reject'](_0x3ee74f);}return _0x341a6b[_0x7edd('0x21')]();};}function saveUpdates(_0x3da06c,_0x55b3da){return function(_0x12b2f7){if(_0x12b2f7){return _0x12b2f7['update'](_0x3da06c)[_0x7edd('0x22')](function(_0x453479){return _0x453479;});}return null;};}function removeEntity(_0x405324,_0x1cb995){return function(_0xf24ab4){if(_0xf24ab4){return _0xf24ab4['destroy']()['then'](function(){_0x405324[_0x7edd('0x19')](0xcc)[_0x7edd('0x1a')]();});}};}function handleEntityNotFound(_0x5e1cf2,_0x50982c){return function(_0x49228a){if(!_0x49228a){_0x5e1cf2[_0x7edd('0x18')](0x194);}return _0x49228a;};}function handleError(_0x173833,_0x361ee8){_0x361ee8=_0x361ee8||0x1f4;return function(_0x20fa62){logger[_0x7edd('0x23')](_0x20fa62[_0x7edd('0x24')]);if(_0x20fa62['name']){delete _0x20fa62[_0x7edd('0x25')];}_0x173833[_0x7edd('0x19')](_0x361ee8)[_0x7edd('0x26')](_0x20fa62);};}exports[_0x7edd('0x27')]=function(_0x409cf1,_0x667679){var _0x1b3433={},_0x567194={},_0x44fa0b={'count':0x0,'rows':[]};var _0x102d16=db[_0x7edd('0x28')]['rawAttributes'];_0x567194[_0x7edd('0x29')]=_['keys'](_0x102d16);_0x567194['query']=_[_0x7edd('0x2a')](_0x409cf1[_0x7edd('0x2b')]);_0x567194[_0x7edd('0x2c')]=_[_0x7edd('0x2d')](_0x567194['model'],_0x567194[_0x7edd('0x2b')]);_0x1b3433[_0x7edd('0x2e')]=_['intersection'](_0x567194[_0x7edd('0x29')],qs[_0x7edd('0x2f')](_0x409cf1[_0x7edd('0x2b')][_0x7edd('0x2f')]));_0x1b3433[_0x7edd('0x2e')]=_0x1b3433[_0x7edd('0x2e')]['length']?_0x1b3433[_0x7edd('0x2e')]:_0x567194[_0x7edd('0x29')];if(!_0x409cf1['query'][_0x7edd('0x30')](_0x7edd('0x31'))){_0x1b3433['limit']=qs[_0x7edd('0x1e')](_0x409cf1[_0x7edd('0x2b')][_0x7edd('0x1e')]);_0x1b3433[_0x7edd('0x1d')]=qs[_0x7edd('0x1d')](_0x409cf1[_0x7edd('0x2b')][_0x7edd('0x1d')]);}_0x1b3433['order']=qs['sort'](_0x409cf1[_0x7edd('0x2b')][_0x7edd('0x32')]);_0x1b3433['where']=qs['filters'](_[_0x7edd('0x33')](_0x409cf1[_0x7edd('0x2b')],_0x567194['filters']));if(_0x409cf1['query'][_0x7edd('0x34')]){_0x1b3433['where']=_[_0x7edd('0x35')](_0x1b3433[_0x7edd('0x36')],{'$or':_[_0x7edd('0x37')](_0x102d16,function(_0x397a03){if(_0x397a03[_0x7edd('0x38')]['key']!==_0x7edd('0x39')){var _0x4bdb2b={};_0x4bdb2b[_0x397a03[_0x7edd('0x3a')]]={'$like':'%'+_0x409cf1[_0x7edd('0x2b')]['filter']+'%'};return _0x4bdb2b;}})});}_0x1b3433=_['merge']({},_0x1b3433,_0x409cf1[_0x7edd('0x3b')]);var _0x353372={'where':_0x1b3433[_0x7edd('0x36')]};return db[_0x7edd('0x28')][_0x7edd('0x1c')](_0x353372)[_0x7edd('0x22')](function(_0x155c38){_0x44fa0b[_0x7edd('0x1c')]=_0x155c38;if(_0x409cf1[_0x7edd('0x2b')][_0x7edd('0x3c')]){_0x1b3433[_0x7edd('0x3d')]=[{'all':!![]}];}return db[_0x7edd('0x28')][_0x7edd('0x3e')](_0x1b3433);})[_0x7edd('0x22')](function(_0x74503e){_0x44fa0b[_0x7edd('0x3f')]=_0x74503e;return _0x44fa0b;})[_0x7edd('0x22')](respondWithFilteredResult(_0x667679,_0x1b3433))[_0x7edd('0x40')](handleError(_0x667679,null));};exports[_0x7edd('0x41')]=function(_0x3b9de3,_0x1e2e91){var _0x30850e={'raw':!![],'where':{'id':_0x3b9de3[_0x7edd('0x42')]['id']}},_0x2ddeca={};_0x2ddeca[_0x7edd('0x29')]=_['keys'](db['VoiceQueuesLog']['rawAttributes']);_0x2ddeca[_0x7edd('0x2b')]=_[_0x7edd('0x2a')](_0x3b9de3[_0x7edd('0x2b')]);_0x2ddeca[_0x7edd('0x2c')]=_[_0x7edd('0x2d')](_0x2ddeca[_0x7edd('0x29')],_0x2ddeca[_0x7edd('0x2b')]);_0x30850e[_0x7edd('0x2e')]=_['intersection'](_0x2ddeca[_0x7edd('0x29')],qs[_0x7edd('0x2f')](_0x3b9de3[_0x7edd('0x2b')][_0x7edd('0x2f')]));_0x30850e['attributes']=_0x30850e[_0x7edd('0x2e')]['length']?_0x30850e[_0x7edd('0x2e')]:_0x2ddeca[_0x7edd('0x29')];if(_0x3b9de3[_0x7edd('0x2b')][_0x7edd('0x3c')]){_0x30850e[_0x7edd('0x3d')]=[{'all':!![]}];}_0x30850e=_[_0x7edd('0x35')]({},_0x30850e,_0x3b9de3[_0x7edd('0x3b')]);return db[_0x7edd('0x28')][_0x7edd('0x43')](_0x30850e)[_0x7edd('0x22')](handleEntityNotFound(_0x1e2e91,null))[_0x7edd('0x22')](respondWithResult(_0x1e2e91,null))[_0x7edd('0x40')](handleError(_0x1e2e91,null));};exports['create']=function(_0x27d725,_0x32747f){return db[_0x7edd('0x28')]['create'](_0x27d725[_0x7edd('0x44')],{})['then'](respondWithResult(_0x32747f,0xc9))[_0x7edd('0x40')](handleError(_0x32747f,null));};exports[_0x7edd('0x45')]=function(_0x4ff0f6,_0x42a4b1){if(_0x4ff0f6[_0x7edd('0x44')]['id']){delete _0x4ff0f6[_0x7edd('0x44')]['id'];}return db[_0x7edd('0x28')][_0x7edd('0x43')]({'where':{'id':_0x4ff0f6['params']['id']}})[_0x7edd('0x22')](handleEntityNotFound(_0x42a4b1,null))[_0x7edd('0x22')](saveUpdates(_0x4ff0f6['body'],null))[_0x7edd('0x22')](respondWithResult(_0x42a4b1,null))['catch'](handleError(_0x42a4b1,null));};exports[_0x7edd('0x46')]=function(_0x26fb73,_0x28ee75){return db[_0x7edd('0x28')][_0x7edd('0x43')]({'where':{'id':_0x26fb73[_0x7edd('0x42')]['id']}})[_0x7edd('0x22')](handleEntityNotFound(_0x28ee75,null))[_0x7edd('0x22')](removeEntity(_0x28ee75,null))['catch'](handleError(_0x28ee75,null));};
\ No newline at end of file
index ce9adcd..9986c43 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0c24=['event_dtm','event','lodash','../../config/logger','moment','bluebird','request-promise','./voiceQueuesLog.attributes','exports','define','VoiceQueuesLog','voice_queues_log'];(function(_0xcadab7,_0x3f83e6){var _0x1b17ad=function(_0x339393){while(--_0x339393){_0xcadab7['push'](_0xcadab7['shift']());}};_0x1b17ad(++_0x3f83e6);}(_0x0c24,0xce));var _0x40c2=function(_0x3d3590,_0x23bd12){_0x3d3590=_0x3d3590-0x0;var _0x1348ff=_0x0c24[_0x3d3590];return _0x1348ff;};'use strict';var _=require(_0x40c2('0x0'));var util=require('util');var logger=require(_0x40c2('0x1'))('api');var moment=require(_0x40c2('0x2'));var BPromise=require(_0x40c2('0x3'));var rp=require(_0x40c2('0x4'));var attributes=require(_0x40c2('0x5'));module[_0x40c2('0x6')]=function(_0x3c4c04,_0x5cb75c){return _0x3c4c04[_0x40c2('0x7')](_0x40c2('0x8'),attributes,{'tableName':_0x40c2('0x9'),'paranoid':![],'indexes':[{'name':_0x40c2('0xa'),'fields':[_0x40c2('0xb'),'dtm']}],'timestamps':![]});};
\ No newline at end of file
+var _0x8ec1=['moment','request-promise','./voiceQueuesLog.attributes','exports','define','VoiceQueuesLog','voice_queues_log','dtm','lodash','../../config/logger','api'];(function(_0x45806b,_0x53eeae){var _0x3e228e=function(_0x3ee031){while(--_0x3ee031){_0x45806b['push'](_0x45806b['shift']());}};_0x3e228e(++_0x53eeae);}(_0x8ec1,0xad));var _0x18ec=function(_0x42f4e0,_0x1a481f){_0x42f4e0=_0x42f4e0-0x0;var _0x5eb3e0=_0x8ec1[_0x42f4e0];return _0x5eb3e0;};'use strict';var _=require(_0x18ec('0x0'));var util=require('util');var logger=require(_0x18ec('0x1'))(_0x18ec('0x2'));var moment=require(_0x18ec('0x3'));var BPromise=require('bluebird');var rp=require(_0x18ec('0x4'));var attributes=require(_0x18ec('0x5'));module[_0x18ec('0x6')]=function(_0x5ce2e9,_0x50c28a){return _0x5ce2e9[_0x18ec('0x7')](_0x18ec('0x8'),attributes,{'tableName':_0x18ec('0x9'),'paranoid':![],'indexes':[{'name':'event_dtm','fields':['event',_0x18ec('0xa')]}],'timestamps':![]});};
\ No newline at end of file
index bf37f58..24adac4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc8bd=['VoiceQueuesLog,\x20%s,\x20%s','message','result','catch','lodash','util','moment','bluebird','randomstring','ioredis','../../mysqldb','../../config/utils','../../config/logger','rpc','../../config/environment','jayson/promise','request','then','info','request\x20sent','VoiceQueuesLog,\x20%s,\x20%s,\x20%s','error'];(function(_0x29db25,_0x457467){var _0x48b1a5=function(_0x5cb05f){while(--_0x5cb05f){_0x29db25['push'](_0x29db25['shift']());}};_0x48b1a5(++_0x457467);}(_0xc8bd,0xf6));var _0xdc8b=function(_0x56fb02,_0x179d7a){_0x56fb02=_0x56fb02-0x0;var _0x177f5b=_0xc8bd[_0x56fb02];return _0x177f5b;};'use strict';var _=require(_0xdc8b('0x0'));var util=require(_0xdc8b('0x1'));var moment=require(_0xdc8b('0x2'));var BPromise=require(_0xdc8b('0x3'));var rs=require(_0xdc8b('0x4'));var fs=require('fs');var Redis=require(_0xdc8b('0x5'));var db=require(_0xdc8b('0x6'))['db'];var utils=require(_0xdc8b('0x7'));var logger=require(_0xdc8b('0x8'))(_0xdc8b('0x9'));var config=require(_0xdc8b('0xa'));var jayson=require(_0xdc8b('0xb'));var client=jayson['client']['http']({'port':0x232a});function respondWithRpcPromise(_0x38458d,_0x3b38cf,_0x26cb70){return new BPromise(function(_0x21062e,_0x20b379){return client[_0xdc8b('0xc')](_0x38458d,_0x26cb70)[_0xdc8b('0xd')](function(_0x24cd22){logger[_0xdc8b('0xe')]('VoiceQueuesLog,\x20%s,\x20%s',_0x3b38cf,_0xdc8b('0xf'));logger['debug'](_0xdc8b('0x10'),_0x3b38cf,_0xdc8b('0xf'),JSON['stringify'](_0x24cd22));if(_0x24cd22[_0xdc8b('0x11')]){if(_0x24cd22[_0xdc8b('0x11')]['code']===0x1f4){logger['error'](_0xdc8b('0x12'),_0x3b38cf,_0x24cd22[_0xdc8b('0x11')][_0xdc8b('0x13')]);return _0x20b379(_0x24cd22[_0xdc8b('0x11')]['message']);}logger[_0xdc8b('0x11')](_0xdc8b('0x12'),_0x3b38cf,_0x24cd22['error'][_0xdc8b('0x13')]);return _0x21062e(_0x24cd22[_0xdc8b('0x11')]['message']);}else{logger['info'](_0xdc8b('0x12'),_0x3b38cf,_0xdc8b('0xf'));_0x21062e(_0x24cd22[_0xdc8b('0x14')][_0xdc8b('0x13')]);}})[_0xdc8b('0x15')](function(_0x59b1d2){logger[_0xdc8b('0x11')]('VoiceQueuesLog,\x20%s,\x20%s',_0x3b38cf,_0x59b1d2);_0x20b379(_0x59b1d2);});});}
\ No newline at end of file
+var _0x8a64=['then','info','VoiceQueuesLog,\x20%s,\x20%s','request\x20sent','debug','stringify','error','code','message','result','catch','lodash','util','moment','bluebird','ioredis','../../config/utils','../../config/logger','rpc','../../config/environment','http','request'];(function(_0x2c34e8,_0xe2eb7f){var _0x18b57e=function(_0x7c13f4){while(--_0x7c13f4){_0x2c34e8['push'](_0x2c34e8['shift']());}};_0x18b57e(++_0xe2eb7f);}(_0x8a64,0xfd));var _0x48a6=function(_0x5deac6,_0x43ae97){_0x5deac6=_0x5deac6-0x0;var _0x301db2=_0x8a64[_0x5deac6];return _0x301db2;};'use strict';var _=require(_0x48a6('0x0'));var util=require(_0x48a6('0x1'));var moment=require(_0x48a6('0x2'));var BPromise=require(_0x48a6('0x3'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x48a6('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0x48a6('0x5'));var logger=require(_0x48a6('0x6'))(_0x48a6('0x7'));var config=require(_0x48a6('0x8'));var jayson=require('jayson/promise');var client=jayson['client'][_0x48a6('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x380936,_0x23981f,_0x381831){return new BPromise(function(_0x174b6d,_0x405f30){return client[_0x48a6('0xa')](_0x380936,_0x381831)[_0x48a6('0xb')](function(_0xbe8f9f){logger[_0x48a6('0xc')](_0x48a6('0xd'),_0x23981f,_0x48a6('0xe'));logger[_0x48a6('0xf')]('VoiceQueuesLog,\x20%s,\x20%s,\x20%s',_0x23981f,_0x48a6('0xe'),JSON[_0x48a6('0x10')](_0xbe8f9f));if(_0xbe8f9f[_0x48a6('0x11')]){if(_0xbe8f9f[_0x48a6('0x11')][_0x48a6('0x12')]===0x1f4){logger[_0x48a6('0x11')]('VoiceQueuesLog,\x20%s,\x20%s',_0x23981f,_0xbe8f9f[_0x48a6('0x11')][_0x48a6('0x13')]);return _0x405f30(_0xbe8f9f[_0x48a6('0x11')]['message']);}logger['error'](_0x48a6('0xd'),_0x23981f,_0xbe8f9f[_0x48a6('0x11')][_0x48a6('0x13')]);return _0x174b6d(_0xbe8f9f[_0x48a6('0x11')][_0x48a6('0x13')]);}else{logger[_0x48a6('0xc')](_0x48a6('0xd'),_0x23981f,_0x48a6('0xe'));_0x174b6d(_0xbe8f9f[_0x48a6('0x14')][_0x48a6('0x13')]);}})[_0x48a6('0x15')](function(_0x1bea01){logger['error']('VoiceQueuesLog,\x20%s,\x20%s',_0x23981f,_0x1bea01);_0x405f30(_0x1bea01);});});}
\ No newline at end of file
index 44a7f57..9988d12 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x579c=['delete','exports','multer','util','path','connect-timeout','express','../../components/auth/service','../../config/environment','./voiceRecording.controller','get','isAuthenticated','index','/describe','describe','/:id','show','/:id/download','/:id/downloads','downloads','post','create','put','update'];(function(_0x5c768b,_0x5e88a6){var _0x335af8=function(_0x39b04f){while(--_0x39b04f){_0x5c768b['push'](_0x5c768b['shift']());}};_0x335af8(++_0x5e88a6);}(_0x579c,0xda));var _0xc579=function(_0x3e2cfb,_0x7c12c6){_0x3e2cfb=_0x3e2cfb-0x0;var _0x3e4308=_0x579c[_0x3e2cfb];return _0x3e4308;};'use strict';var multer=require(_0xc579('0x0'));var util=require(_0xc579('0x1'));var path=require(_0xc579('0x2'));var timeout=require(_0xc579('0x3'));var express=require(_0xc579('0x4'));var router=express['Router']();var auth=require(_0xc579('0x5'));var interaction=require('../../components/interaction/service');var config=require(_0xc579('0x6'));var controller=require(_0xc579('0x7'));router[_0xc579('0x8')]('/',auth[_0xc579('0x9')](),controller[_0xc579('0xa')]);router[_0xc579('0x8')](_0xc579('0xb'),auth['isAuthenticated'](),controller[_0xc579('0xc')]);router[_0xc579('0x8')](_0xc579('0xd'),auth[_0xc579('0x9')](),controller[_0xc579('0xe')]);router[_0xc579('0x8')](_0xc579('0xf'),auth[_0xc579('0x9')](),controller['download']);router[_0xc579('0x8')](_0xc579('0x10'),controller[_0xc579('0x11')]);router[_0xc579('0x12')]('/',auth[_0xc579('0x9')](),controller[_0xc579('0x13')]);router[_0xc579('0x14')](_0xc579('0xd'),auth[_0xc579('0x9')](),controller[_0xc579('0x15')]);router[_0xc579('0x16')]('/:id',auth[_0xc579('0x9')](),controller['destroy']);module[_0xc579('0x17')]=router;
\ No newline at end of file
+var _0xd382=['exports','multer','util','path','connect-timeout','express','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','./voiceRecording.controller','get','/describe','describe','/:id','/:id/download','isAuthenticated','downloads','post','create','put','delete','destroy'];(function(_0x25548b,_0x2bc1b9){var _0x5de8b0=function(_0xe2314d){while(--_0xe2314d){_0x25548b['push'](_0x25548b['shift']());}};_0x5de8b0(++_0x2bc1b9);}(_0xd382,0x1b6));var _0x2d38=function(_0xc04c53,_0x8e76a4){_0xc04c53=_0xc04c53-0x0;var _0x3ccc85=_0xd382[_0xc04c53];return _0x3ccc85;};'use strict';var multer=require(_0x2d38('0x0'));var util=require(_0x2d38('0x1'));var path=require(_0x2d38('0x2'));var timeout=require(_0x2d38('0x3'));var express=require(_0x2d38('0x4'));var router=express[_0x2d38('0x5')]();var auth=require(_0x2d38('0x6'));var interaction=require(_0x2d38('0x7'));var config=require(_0x2d38('0x8'));var controller=require(_0x2d38('0x9'));router['get']('/',auth['isAuthenticated'](),controller['index']);router[_0x2d38('0xa')](_0x2d38('0xb'),auth['isAuthenticated'](),controller[_0x2d38('0xc')]);router[_0x2d38('0xa')](_0x2d38('0xd'),auth['isAuthenticated'](),controller['show']);router[_0x2d38('0xa')](_0x2d38('0xe'),auth[_0x2d38('0xf')](),controller['download']);router[_0x2d38('0xa')]('/:id/downloads',controller[_0x2d38('0x10')]);router[_0x2d38('0x11')]('/',auth[_0x2d38('0xf')](),controller[_0x2d38('0x12')]);router[_0x2d38('0x13')](_0x2d38('0xd'),auth[_0x2d38('0xf')](),controller['update']);router[_0x2d38('0x14')](_0x2d38('0xd'),auth[_0x2d38('0xf')](),controller[_0x2d38('0x15')]);module[_0x2d38('0x16')]=router;
\ No newline at end of file
index ec58dcb..aa06300 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3eb3=['DATE','updatedAt','format','sequelize','path','VIRTUAL','getDataValue','value','extname','STRING','setDataValue','channel','membername','split','INTEGER','createdAt','MM-DD-YYYY\x20HH:mm','toString'];(function(_0x1c470d,_0x81d66b){var _0x12141b=function(_0x45bfd3){while(--_0x45bfd3){_0x1c470d['push'](_0x1c470d['shift']());}};_0x12141b(++_0x81d66b);}(_0x3eb3,0xc9));var _0x33eb=function(_0x4a8c12,_0x34f17c){_0x4a8c12=_0x4a8c12-0x0;var _0x19a39b=_0x3eb3[_0x4a8c12];return _0x19a39b;};'use strict';var Sequelize=require(_0x33eb('0x0'));var moment=require('moment');var path=require(_0x33eb('0x1'));module['exports']={'format':{'type':Sequelize[_0x33eb('0x2')],'get':function(){return this[_0x33eb('0x3')](_0x33eb('0x4'))?path[_0x33eb('0x5')](this[_0x33eb('0x3')](_0x33eb('0x4'))):undefined;}},'uniqueid':{'type':Sequelize[_0x33eb('0x6')]},'channel':{'type':Sequelize['STRING'],'set':function(_0x34ba3e){if(_0x34ba3e){this[_0x33eb('0x7')](_0x33eb('0x8'),_0x34ba3e);this[_0x33eb('0x7')](_0x33eb('0x9'),_0x34ba3e[_0x33eb('0xa')](/\/|-/)[0x1]);}}},'membername':{'type':Sequelize[_0x33eb('0x6')]},'calleridnum':{'type':Sequelize[_0x33eb('0x6')]},'calleridname':{'type':Sequelize[_0x33eb('0x6')]},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize[_0x33eb('0x6')]},'accountcode':{'type':Sequelize[_0x33eb('0x6')]},'context':{'type':Sequelize[_0x33eb('0x6')]},'exten':{'type':Sequelize['STRING']},'value':{'type':Sequelize[_0x33eb('0x6')]},'type':{'type':Sequelize[_0x33eb('0x6')]},'rating':{'type':Sequelize[_0x33eb('0xb')],'validate':{'max':0x5,'min':0x0}},'queue':{'type':Sequelize[_0x33eb('0x6')]},'userDisposition':{'type':Sequelize['STRING']},'createdAt':{'type':Sequelize['DATE'],'get':function(){return moment(this[_0x33eb('0x3')](_0x33eb('0xc')))['format'](_0x33eb('0xd'))[_0x33eb('0xe')]();}},'updatedAt':{'type':Sequelize[_0x33eb('0xf')],'get':function(){return moment(this[_0x33eb('0x3')](_0x33eb('0x10')))[_0x33eb('0x11')]('MM-DD-YYYY\x20HH:mm')[_0x33eb('0xe')]();}}};
\ No newline at end of file
+var _0x6a2d=['getDataValue','value','extname','STRING','setDataValue','membername','split','INTEGER','DATE','format','MM-DD-YYYY\x20HH:mm','updatedAt','toString','sequelize','moment','path','exports','VIRTUAL'];(function(_0x2c8db1,_0x502dd0){var _0x3d7c23=function(_0x269239){while(--_0x269239){_0x2c8db1['push'](_0x2c8db1['shift']());}};_0x3d7c23(++_0x502dd0);}(_0x6a2d,0x9d));var _0xd6a2=function(_0x3b380d,_0x4bf247){_0x3b380d=_0x3b380d-0x0;var _0x54502b=_0x6a2d[_0x3b380d];return _0x54502b;};'use strict';var Sequelize=require(_0xd6a2('0x0'));var moment=require(_0xd6a2('0x1'));var path=require(_0xd6a2('0x2'));module[_0xd6a2('0x3')]={'format':{'type':Sequelize[_0xd6a2('0x4')],'get':function(){return this[_0xd6a2('0x5')](_0xd6a2('0x6'))?path[_0xd6a2('0x7')](this[_0xd6a2('0x5')]('value')):undefined;}},'uniqueid':{'type':Sequelize[_0xd6a2('0x8')]},'channel':{'type':Sequelize[_0xd6a2('0x8')],'set':function(_0x2b5b3a){if(_0x2b5b3a){this[_0xd6a2('0x9')]('channel',_0x2b5b3a);this[_0xd6a2('0x9')](_0xd6a2('0xa'),_0x2b5b3a[_0xd6a2('0xb')](/\/|-/)[0x1]);}}},'membername':{'type':Sequelize[_0xd6a2('0x8')]},'calleridnum':{'type':Sequelize[_0xd6a2('0x8')]},'calleridname':{'type':Sequelize['STRING']},'connectedlinenum':{'type':Sequelize['STRING']},'connectedlinename':{'type':Sequelize[_0xd6a2('0x8')]},'accountcode':{'type':Sequelize[_0xd6a2('0x8')]},'context':{'type':Sequelize['STRING']},'exten':{'type':Sequelize[_0xd6a2('0x8')]},'value':{'type':Sequelize['STRING']},'type':{'type':Sequelize[_0xd6a2('0x8')]},'rating':{'type':Sequelize[_0xd6a2('0xc')],'validate':{'max':0x5,'min':0x0}},'queue':{'type':Sequelize[_0xd6a2('0x8')]},'userDisposition':{'type':Sequelize[_0xd6a2('0x8')]},'createdAt':{'type':Sequelize[_0xd6a2('0xd')],'get':function(){return moment(this['getDataValue']('createdAt'))[_0xd6a2('0xe')](_0xd6a2('0xf'))['toString']();}},'updatedAt':{'type':Sequelize[_0xd6a2('0xd')],'get':function(){return moment(this['getDataValue'](_0xd6a2('0x10')))[_0xd6a2('0xe')](_0xd6a2('0xf'))[_0xd6a2('0x11')]();}}};
\ No newline at end of file
index 8f68bfc..58233d0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f7a=['error','stack','name','VoiceRecording','rawAttributes','model','keys','format','query','filters','fields','attributes','hasOwnProperty','nolimit','order','sort','pick','filter','where','merge','map','type','key','VIRTUAL','field','options','count','includeAll','rows','catch','intersection','length','create','body','find','params','describe','download','../../components/encryptor','uniqueid','%s.cypher','value','secrets','existsSync','Sequelize','ValidationError','filename','extname','unlink','sequelize','MD5','col','token','$and','push','recording','VoiceRecording\x20not\x20found','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','request-promise','moment','bluebird','mustache','util','path','sox','ejs','lodash','jsforce','querystring','papaparse','../../config/license/hardware','ioredis','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','end','json','offset','limit','set','apply','reject','save','update','destroy','then'];(function(_0x2cfa92,_0x679168){var _0x4cc13f=function(_0x268f6b){while(--_0x268f6b){_0x2cfa92['push'](_0x2cfa92['shift']());}};_0x4cc13f(++_0x679168);}(_0x9f7a,0x98));var _0xa9f7=function(_0x2f1762,_0xab43df){_0x2f1762=_0x2f1762-0x0;var _0x8ab21=_0x9f7a[_0x2f1762];return _0x8ab21;};'use strict';var pdf=require(_0xa9f7('0x0'));var emlformat=require(_0xa9f7('0x1'));var rimraf=require(_0xa9f7('0x2'));var zipdir=require(_0xa9f7('0x3'));var jsonpatch=require(_0xa9f7('0x4'));var rp=require(_0xa9f7('0x5'));var moment=require(_0xa9f7('0x6'));var BPromise=require(_0xa9f7('0x7'));var Mustache=require(_0xa9f7('0x8'));var util=require(_0xa9f7('0x9'));var path=require(_0xa9f7('0xa'));var sox=require(_0xa9f7('0xb'));var csv=require('to-csv');var ejs=require(_0xa9f7('0xc'));var fs=require('fs');var _=require(_0xa9f7('0xd'));var squel=require('squel');var crypto=require('crypto');var jsforce=require(_0xa9f7('0xe'));var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xa9f7('0xf'));var Papa=require(_0xa9f7('0x10'));var authService=require('../../components/auth/service');var hardwareService=require(_0xa9f7('0x11'));var Redis=require(_0xa9f7('0x12'));var qs=require(_0xa9f7('0x13'));var logger=require(_0xa9f7('0x14'))(_0xa9f7('0x15'));var utils=require(_0xa9f7('0x16'));var config=require(_0xa9f7('0x17'));var db=require(_0xa9f7('0x18'))['db'];function respondWithStatusCode(_0x36c901,_0x13d321){_0x13d321=_0x13d321||0xcc;return function(_0x30f8c6){if(_0x30f8c6){return _0x36c901[_0xa9f7('0x19')](_0x13d321);}return _0x36c901[_0xa9f7('0x1a')](_0x13d321)[_0xa9f7('0x1b')]();};}function respondWithResult(_0x1ee6e5,_0x38d0c3){_0x38d0c3=_0x38d0c3||0xc8;return function(_0x1415f5){if(_0x1415f5){return _0x1ee6e5['status'](_0x38d0c3)[_0xa9f7('0x1c')](_0x1415f5);}};}function respondWithFilteredResult(_0x194a21,_0x1a4a80){return function(_0x26a2cb){if(_0x26a2cb){var _0x1578c3=_0x26a2cb['count'],_0x51399c=_0x1a4a80[_0xa9f7('0x1d')],_0x303946=_0x1a4a80[_0xa9f7('0x1d')]+_0x1a4a80[_0xa9f7('0x1e')],_0x7cc760;if(_0x303946>=_0x1578c3){_0x303946=_0x1578c3;_0x7cc760=0xc8;}else{_0x7cc760=0xce;}_0x194a21[_0xa9f7('0x1a')](_0x7cc760);return _0x194a21[_0xa9f7('0x1f')]('Content-Range',_0x51399c+'-'+_0x303946+'/'+_0x1578c3)[_0xa9f7('0x1c')](_0x26a2cb);}return null;};}function patchUpdates(_0x2c4886){return function(_0x14da62){try{jsonpatch[_0xa9f7('0x20')](_0x14da62,_0x2c4886,!![]);}catch(_0x35a79c){return BPromise[_0xa9f7('0x21')](_0x35a79c);}return _0x14da62[_0xa9f7('0x22')]();};}function saveUpdates(_0x558ff4,_0x1f7cd0){return function(_0x108c66){if(_0x108c66){return _0x108c66[_0xa9f7('0x23')](_0x558ff4)['then'](function(_0x43350b){return _0x43350b;});}return null;};}function removeEntity(_0x586afe,_0x212b77){return function(_0x3b4062){if(_0x3b4062){return _0x3b4062[_0xa9f7('0x24')]()[_0xa9f7('0x25')](function(){_0x586afe[_0xa9f7('0x1a')](0xcc)[_0xa9f7('0x1b')]();});}};}function handleEntityNotFound(_0x313a6d,_0x3956d5){return function(_0x3e3bb6){if(!_0x3e3bb6){_0x313a6d[_0xa9f7('0x19')](0x194);}return _0x3e3bb6;};}function handleError(_0x451acc,_0x24db7d){_0x24db7d=_0x24db7d||0x1f4;return function(_0x3c0022){logger[_0xa9f7('0x26')](_0x3c0022[_0xa9f7('0x27')]);if(_0x3c0022['name']){delete _0x3c0022[_0xa9f7('0x28')];}_0x451acc[_0xa9f7('0x1a')](_0x24db7d)['send'](_0x3c0022);};}exports['index']=function(_0x4c1c90,_0x3756e3){var _0x26adbf={},_0x53543d={},_0x4c274f={'count':0x0,'rows':[]};var _0x9af3b0=db[_0xa9f7('0x29')][_0xa9f7('0x2a')];_0x53543d[_0xa9f7('0x2b')]=_['differenceBy'](_[_0xa9f7('0x2c')](_0x9af3b0),[_0xa9f7('0x2d')]);_0x53543d[_0xa9f7('0x2e')]=_[_0xa9f7('0x2c')](_0x4c1c90[_0xa9f7('0x2e')]);_0x53543d[_0xa9f7('0x2f')]=_['intersection'](_0x53543d[_0xa9f7('0x2b')],_0x53543d['query']);_0x26adbf['attributes']=_['intersection'](_0x53543d[_0xa9f7('0x2b')],qs['fields'](_0x4c1c90['query'][_0xa9f7('0x30')]));_0x26adbf[_0xa9f7('0x31')]=_0x26adbf[_0xa9f7('0x31')]['length']?_0x26adbf['attributes']:_0x53543d[_0xa9f7('0x2b')];if(!_0x4c1c90[_0xa9f7('0x2e')][_0xa9f7('0x32')](_0xa9f7('0x33'))){_0x26adbf[_0xa9f7('0x1e')]=qs[_0xa9f7('0x1e')](_0x4c1c90[_0xa9f7('0x2e')][_0xa9f7('0x1e')]);_0x26adbf['offset']=qs['offset'](_0x4c1c90[_0xa9f7('0x2e')][_0xa9f7('0x1d')]);}_0x26adbf[_0xa9f7('0x34')]=qs[_0xa9f7('0x35')](_0x4c1c90['query'][_0xa9f7('0x35')]);_0x26adbf['where']=qs[_0xa9f7('0x2f')](_[_0xa9f7('0x36')](_0x4c1c90[_0xa9f7('0x2e')],_0x53543d[_0xa9f7('0x2f')]));if(_0x4c1c90[_0xa9f7('0x2e')][_0xa9f7('0x37')]){_0x26adbf[_0xa9f7('0x38')]=_[_0xa9f7('0x39')](_0x26adbf[_0xa9f7('0x38')],{'$or':_[_0xa9f7('0x3a')](_0x9af3b0,function(_0x548a72){if(_0x548a72[_0xa9f7('0x3b')][_0xa9f7('0x3c')]!==_0xa9f7('0x3d')){var _0x35c0a6={};_0x35c0a6[_0x548a72[_0xa9f7('0x3e')]]={'$like':'%'+_0x4c1c90['query']['filter']+'%'};return _0x35c0a6;}})});}_0x26adbf=_[_0xa9f7('0x39')]({},_0x26adbf,_0x4c1c90[_0xa9f7('0x3f')]);var _0x5b51ef={'where':_0x26adbf[_0xa9f7('0x38')]};return db['VoiceRecording'][_0xa9f7('0x40')](_0x5b51ef)['then'](function(_0x280f21){_0x4c274f[_0xa9f7('0x40')]=_0x280f21;if(_0x4c1c90[_0xa9f7('0x2e')][_0xa9f7('0x41')]){_0x26adbf['include']=[{'all':!![]}];}return db[_0xa9f7('0x29')]['findAll'](_0x26adbf);})[_0xa9f7('0x25')](function(_0x40ae60){_0x4c274f[_0xa9f7('0x42')]=_0x40ae60;return _0x4c274f;})[_0xa9f7('0x25')](respondWithFilteredResult(_0x3756e3,_0x26adbf))[_0xa9f7('0x43')](handleError(_0x3756e3,null));};exports['show']=function(_0x8cc9b9,_0x140f35){var _0x2eb509={'raw':![],'where':{'id':_0x8cc9b9['params']['id']}},_0x5b1d64={};_0x5b1d64[_0xa9f7('0x2b')]=_[_0xa9f7('0x2c')](db[_0xa9f7('0x29')][_0xa9f7('0x2a')]);_0x5b1d64[_0xa9f7('0x2e')]=_[_0xa9f7('0x2c')](_0x8cc9b9['query']);_0x5b1d64[_0xa9f7('0x2f')]=_[_0xa9f7('0x44')](_0x5b1d64[_0xa9f7('0x2b')],_0x5b1d64[_0xa9f7('0x2e')]);_0x2eb509[_0xa9f7('0x31')]=_[_0xa9f7('0x44')](_0x5b1d64[_0xa9f7('0x2b')],qs[_0xa9f7('0x30')](_0x8cc9b9[_0xa9f7('0x2e')][_0xa9f7('0x30')]));_0x2eb509['attributes']=_0x2eb509[_0xa9f7('0x31')][_0xa9f7('0x45')]?_0x2eb509[_0xa9f7('0x31')]:_0x5b1d64[_0xa9f7('0x2b')];if(_0x8cc9b9[_0xa9f7('0x2e')][_0xa9f7('0x41')]){_0x2eb509['include']=[{'all':!![]}];}_0x2eb509=_[_0xa9f7('0x39')]({},_0x2eb509,_0x8cc9b9[_0xa9f7('0x3f')]);return db['VoiceRecording']['find'](_0x2eb509)['then'](handleEntityNotFound(_0x140f35,null))['then'](respondWithResult(_0x140f35,null))[_0xa9f7('0x43')](handleError(_0x140f35,null));};exports[_0xa9f7('0x46')]=function(_0x255d00,_0x39c7c8){return db[_0xa9f7('0x29')][_0xa9f7('0x46')](_0x255d00['body'],{})[_0xa9f7('0x25')](respondWithResult(_0x39c7c8,0xc9))[_0xa9f7('0x43')](handleError(_0x39c7c8,null));};exports[_0xa9f7('0x23')]=function(_0x2cd65c,_0x12273c){if(_0x2cd65c[_0xa9f7('0x47')]['id']){delete _0x2cd65c['body']['id'];}return db[_0xa9f7('0x29')][_0xa9f7('0x48')]({'where':{'id':_0x2cd65c[_0xa9f7('0x49')]['id']}})[_0xa9f7('0x25')](handleEntityNotFound(_0x12273c,null))[_0xa9f7('0x25')](saveUpdates(_0x2cd65c[_0xa9f7('0x47')],null))[_0xa9f7('0x25')](respondWithResult(_0x12273c,null))[_0xa9f7('0x43')](handleError(_0x12273c,null));};exports['destroy']=function(_0x58ccda,_0x5bd26){return db[_0xa9f7('0x29')][_0xa9f7('0x48')]({'where':{'id':_0x58ccda['params']['id']}})[_0xa9f7('0x25')](handleEntityNotFound(_0x5bd26,null))[_0xa9f7('0x25')](removeEntity(_0x5bd26,null))[_0xa9f7('0x43')](handleError(_0x5bd26,null));};exports[_0xa9f7('0x4a')]=function(_0x2bc085,_0x5ae7ca){return db[_0xa9f7('0x29')][_0xa9f7('0x4a')]()[_0xa9f7('0x25')](respondWithResult(_0x5ae7ca,null))[_0xa9f7('0x43')](handleError(_0x5ae7ca,null));};exports[_0xa9f7('0x4b')]=function(_0x1615b4,_0x252aab,_0x2ede54){var _0x1d4866=require(_0xa9f7('0x4c'));var _0x148ed5=![];var _0x329ae0={};if(_0x1615b4[_0xa9f7('0x2e')][_0xa9f7('0x3b')]&&_0x1615b4[_0xa9f7('0x2e')][_0xa9f7('0x3b')]===_0xa9f7('0x4d')){_0x329ae0['uniqueid']=_0x1615b4[_0xa9f7('0x49')]['id'];}else{_0x329ae0['id']=_0x1615b4[_0xa9f7('0x49')]['id'];}return db[_0xa9f7('0x29')]['find']({'where':_0x329ae0,'attributes':['id','value'],'raw':!![]})['then'](handleEntityNotFound(_0x252aab,null))['then'](function(_0x2715f4){if(_0x2715f4){var _0x95c2c2=util[_0xa9f7('0x2d')](_0xa9f7('0x4e'),_0x2715f4[_0xa9f7('0x4f')]);if(fs['existsSync'](_0x95c2c2)){_0x148ed5=!![];return _0x1d4866['decryptFile'](_0x95c2c2,_0x2715f4[_0xa9f7('0x4f')],config[_0xa9f7('0x50')]['recording'])[_0xa9f7('0x25')](function(){return _0x2715f4;});}return _0x2715f4;}})[_0xa9f7('0x25')](function(_0x5f1876){if(_0x5f1876){if(!fs[_0xa9f7('0x51')](_0x5f1876[_0xa9f7('0x4f')])){throw new db[(_0xa9f7('0x52'))][(_0xa9f7('0x53'))]('VoiceRecording\x20not\x20found');}if(_0x5f1876[_0xa9f7('0x54')]){return _0x252aab[_0xa9f7('0x4b')](_0x5f1876[_0xa9f7('0x4f')],_0x5f1876[_0xa9f7('0x54')]+path[_0xa9f7('0x55')](_0x5f1876[_0xa9f7('0x4f')]),function(){if(_0x148ed5){fs[_0xa9f7('0x56')](_0x5f1876[_0xa9f7('0x4f')]);}});}else{return _0x252aab['download'](_0x5f1876['value'],function(_0x459730){if(_0x148ed5){fs[_0xa9f7('0x56')](_0x5f1876[_0xa9f7('0x4f')]);}});}}})[_0xa9f7('0x43')](handleError(_0x252aab,null));};exports['downloads']=function(_0x45a8ad,_0x6183fa,_0x3b64de){var _0x45db15=require(_0xa9f7('0x4c'));var _0x4f6705=![];var _0x5dce3d={'$and':[db[_0xa9f7('0x57')][_0xa9f7('0x38')](db[_0xa9f7('0x57')]['fn'](_0xa9f7('0x58'),db['sequelize'][_0xa9f7('0x59')](_0xa9f7('0x4d'))),_0x45a8ad[_0xa9f7('0x2e')][_0xa9f7('0x5a')])]};if(_0x45a8ad[_0xa9f7('0x2e')][_0xa9f7('0x3b')]&&_0x45a8ad['query'][_0xa9f7('0x3b')]===_0xa9f7('0x4d')){_0x5dce3d[_0xa9f7('0x5b')][_0xa9f7('0x5c')]({'uniqueid':_0x45a8ad[_0xa9f7('0x49')]['id']});}else{_0x5dce3d[_0xa9f7('0x5b')][_0xa9f7('0x5c')]({'id':_0x45a8ad['params']['id']});}return db['VoiceRecording'][_0xa9f7('0x48')]({'where':_0x5dce3d,'attributes':['id',_0xa9f7('0x4f')],'raw':!![]})[_0xa9f7('0x25')](handleEntityNotFound(_0x6183fa,null))[_0xa9f7('0x25')](function(_0x2081ba){if(_0x2081ba){var _0x2d50d2=util[_0xa9f7('0x2d')](_0xa9f7('0x4e'),_0x2081ba['value']);if(fs[_0xa9f7('0x51')](_0x2d50d2)){_0x4f6705=!![];return _0x45db15['decryptFile'](_0x2d50d2,_0x2081ba[_0xa9f7('0x4f')],config[_0xa9f7('0x50')][_0xa9f7('0x5d')])['then'](function(){return _0x2081ba;});}return _0x2081ba;}})[_0xa9f7('0x25')](function(_0x404d31){if(_0x404d31){if(!fs[_0xa9f7('0x51')](_0x404d31['value'])){throw new db['Sequelize'][(_0xa9f7('0x53'))](_0xa9f7('0x5e'));}if(_0x404d31[_0xa9f7('0x54')]){return _0x6183fa[_0xa9f7('0x4b')](_0x404d31[_0xa9f7('0x4f')],_0x404d31['filename']+path[_0xa9f7('0x55')](_0x404d31[_0xa9f7('0x4f')]),function(){if(_0x4f6705){fs[_0xa9f7('0x56')](_0x404d31[_0xa9f7('0x4f')]);}});}else{return _0x6183fa[_0xa9f7('0x4b')](_0x404d31['value'],function(_0x2b9e72){if(_0x4f6705){fs[_0xa9f7('0x56')](_0x404d31[_0xa9f7('0x4f')]);}});}}})['catch'](handleError(_0x6183fa,null));};
\ No newline at end of file
+var _0xce59=['VoiceRecording','includeAll','findAll','rows','catch','show','find','create','body','update','params','destroy','describe','download','../../components/encryptor','type','uniqueid','value','existsSync','decryptFile','recording','VoiceRecording\x20not\x20found','filename','extname','unlink','downloads','sequelize','MD5','token','$and','push','format','%s.cypher','Sequelize','ValidationError','html-pdf','eml-format','rimraf','zip-dir','fast-json-patch','moment','bluebird','util','path','sox','lodash','crypto','jsforce','to-csv','querystring','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','../../config/utils','../../config/environment','../../mysqldb','sendStatus','status','json','count','offset','limit','set','Content-Range','apply','save','then','end','stack','name','index','rawAttributes','model','differenceBy','keys','query','filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','sort','where','pick','filter','merge','map','key','VIRTUAL','options'];(function(_0x20d37a,_0x5d7fca){var _0x181fb9=function(_0x459f8d){while(--_0x459f8d){_0x20d37a['push'](_0x20d37a['shift']());}};_0x181fb9(++_0x5d7fca);}(_0xce59,0x80));var _0x9ce5=function(_0x27657c,_0x36813e){_0x27657c=_0x27657c-0x0;var _0x12324a=_0xce59[_0x27657c];return _0x12324a;};'use strict';var pdf=require(_0x9ce5('0x0'));var emlformat=require(_0x9ce5('0x1'));var rimraf=require(_0x9ce5('0x2'));var zipdir=require(_0x9ce5('0x3'));var jsonpatch=require(_0x9ce5('0x4'));var rp=require('request-promise');var moment=require(_0x9ce5('0x5'));var BPromise=require(_0x9ce5('0x6'));var Mustache=require('mustache');var util=require(_0x9ce5('0x7'));var path=require(_0x9ce5('0x8'));var sox=require(_0x9ce5('0x9'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0x9ce5('0xa'));var squel=require('squel');var crypto=require(_0x9ce5('0xb'));var jsforce=require(_0x9ce5('0xc'));var deskjs=require('desk.js');var toCsv=require(_0x9ce5('0xd'));var querystring=require(_0x9ce5('0xe'));var Papa=require('papaparse');var authService=require(_0x9ce5('0xf'));var hardwareService=require(_0x9ce5('0x10'));var Redis=require('ioredis');var qs=require(_0x9ce5('0x11'));var logger=require(_0x9ce5('0x12'))('api');var utils=require(_0x9ce5('0x13'));var config=require(_0x9ce5('0x14'));var db=require(_0x9ce5('0x15'))['db'];function respondWithStatusCode(_0x41a51e,_0xfbfba3){_0xfbfba3=_0xfbfba3||0xcc;return function(_0x45a79c){if(_0x45a79c){return _0x41a51e[_0x9ce5('0x16')](_0xfbfba3);}return _0x41a51e[_0x9ce5('0x17')](_0xfbfba3)['end']();};}function respondWithResult(_0x1e220a,_0x4a3e40){_0x4a3e40=_0x4a3e40||0xc8;return function(_0x411a81){if(_0x411a81){return _0x1e220a[_0x9ce5('0x17')](_0x4a3e40)[_0x9ce5('0x18')](_0x411a81);}};}function respondWithFilteredResult(_0x4b2846,_0x1d61fa){return function(_0xac42ce){if(_0xac42ce){var _0x5f5bf2=_0xac42ce[_0x9ce5('0x19')],_0x4780bf=_0x1d61fa[_0x9ce5('0x1a')],_0x367a58=_0x1d61fa[_0x9ce5('0x1a')]+_0x1d61fa[_0x9ce5('0x1b')],_0x3e044d;if(_0x367a58>=_0x5f5bf2){_0x367a58=_0x5f5bf2;_0x3e044d=0xc8;}else{_0x3e044d=0xce;}_0x4b2846['status'](_0x3e044d);return _0x4b2846[_0x9ce5('0x1c')](_0x9ce5('0x1d'),_0x4780bf+'-'+_0x367a58+'/'+_0x5f5bf2)['json'](_0xac42ce);}return null;};}function patchUpdates(_0x5cb2d7){return function(_0x11cefc){try{jsonpatch[_0x9ce5('0x1e')](_0x11cefc,_0x5cb2d7,!![]);}catch(_0x2a48c1){return BPromise['reject'](_0x2a48c1);}return _0x11cefc[_0x9ce5('0x1f')]();};}function saveUpdates(_0x241ab8,_0x3b1327){return function(_0x331dce){if(_0x331dce){return _0x331dce['update'](_0x241ab8)[_0x9ce5('0x20')](function(_0x386e9f){return _0x386e9f;});}return null;};}function removeEntity(_0x4a3061,_0x54d448){return function(_0x68bc54){if(_0x68bc54){return _0x68bc54['destroy']()[_0x9ce5('0x20')](function(){_0x4a3061[_0x9ce5('0x17')](0xcc)[_0x9ce5('0x21')]();});}};}function handleEntityNotFound(_0x130c77,_0x51e83d){return function(_0x419df4){if(!_0x419df4){_0x130c77[_0x9ce5('0x16')](0x194);}return _0x419df4;};}function handleError(_0x30a863,_0x46009b){_0x46009b=_0x46009b||0x1f4;return function(_0x5b8d90){logger['error'](_0x5b8d90[_0x9ce5('0x22')]);if(_0x5b8d90['name']){delete _0x5b8d90[_0x9ce5('0x23')];}_0x30a863['status'](_0x46009b)['send'](_0x5b8d90);};}exports[_0x9ce5('0x24')]=function(_0x238a61,_0x4f0800){var _0xb6a92c={},_0x33d78e={},_0x56fbae={'count':0x0,'rows':[]};var _0x524f57=db['VoiceRecording'][_0x9ce5('0x25')];_0x33d78e[_0x9ce5('0x26')]=_[_0x9ce5('0x27')](_[_0x9ce5('0x28')](_0x524f57),['format']);_0x33d78e[_0x9ce5('0x29')]=_[_0x9ce5('0x28')](_0x238a61[_0x9ce5('0x29')]);_0x33d78e[_0x9ce5('0x2a')]=_[_0x9ce5('0x2b')](_0x33d78e['model'],_0x33d78e['query']);_0xb6a92c[_0x9ce5('0x2c')]=_[_0x9ce5('0x2b')](_0x33d78e[_0x9ce5('0x26')],qs[_0x9ce5('0x2d')](_0x238a61[_0x9ce5('0x29')][_0x9ce5('0x2d')]));_0xb6a92c[_0x9ce5('0x2c')]=_0xb6a92c['attributes'][_0x9ce5('0x2e')]?_0xb6a92c[_0x9ce5('0x2c')]:_0x33d78e[_0x9ce5('0x26')];if(!_0x238a61[_0x9ce5('0x29')][_0x9ce5('0x2f')](_0x9ce5('0x30'))){_0xb6a92c[_0x9ce5('0x1b')]=qs[_0x9ce5('0x1b')](_0x238a61['query'][_0x9ce5('0x1b')]);_0xb6a92c[_0x9ce5('0x1a')]=qs['offset'](_0x238a61['query']['offset']);}_0xb6a92c['order']=qs['sort'](_0x238a61[_0x9ce5('0x29')][_0x9ce5('0x31')]);_0xb6a92c[_0x9ce5('0x32')]=qs[_0x9ce5('0x2a')](_[_0x9ce5('0x33')](_0x238a61[_0x9ce5('0x29')],_0x33d78e['filters']));if(_0x238a61[_0x9ce5('0x29')][_0x9ce5('0x34')]){_0xb6a92c[_0x9ce5('0x32')]=_[_0x9ce5('0x35')](_0xb6a92c[_0x9ce5('0x32')],{'$or':_[_0x9ce5('0x36')](_0x524f57,function(_0x5a3445){if(_0x5a3445['type'][_0x9ce5('0x37')]!==_0x9ce5('0x38')){var _0x1387b5={};_0x1387b5[_0x5a3445['field']]={'$like':'%'+_0x238a61[_0x9ce5('0x29')][_0x9ce5('0x34')]+'%'};return _0x1387b5;}})});}_0xb6a92c=_['merge']({},_0xb6a92c,_0x238a61[_0x9ce5('0x39')]);var _0x1ad38a={'where':_0xb6a92c['where']};return db[_0x9ce5('0x3a')][_0x9ce5('0x19')](_0x1ad38a)[_0x9ce5('0x20')](function(_0x425187){_0x56fbae[_0x9ce5('0x19')]=_0x425187;if(_0x238a61[_0x9ce5('0x29')][_0x9ce5('0x3b')]){_0xb6a92c['include']=[{'all':!![]}];}return db[_0x9ce5('0x3a')][_0x9ce5('0x3c')](_0xb6a92c);})[_0x9ce5('0x20')](function(_0x520367){_0x56fbae[_0x9ce5('0x3d')]=_0x520367;return _0x56fbae;})['then'](respondWithFilteredResult(_0x4f0800,_0xb6a92c))[_0x9ce5('0x3e')](handleError(_0x4f0800,null));};exports[_0x9ce5('0x3f')]=function(_0x1a4f2a,_0x2dc6ac){var _0x212bae={'raw':![],'where':{'id':_0x1a4f2a['params']['id']}},_0x2e27b9={};_0x2e27b9['model']=_['keys'](db[_0x9ce5('0x3a')][_0x9ce5('0x25')]);_0x2e27b9['query']=_[_0x9ce5('0x28')](_0x1a4f2a[_0x9ce5('0x29')]);_0x2e27b9[_0x9ce5('0x2a')]=_[_0x9ce5('0x2b')](_0x2e27b9[_0x9ce5('0x26')],_0x2e27b9['query']);_0x212bae[_0x9ce5('0x2c')]=_[_0x9ce5('0x2b')](_0x2e27b9['model'],qs['fields'](_0x1a4f2a[_0x9ce5('0x29')]['fields']));_0x212bae[_0x9ce5('0x2c')]=_0x212bae[_0x9ce5('0x2c')][_0x9ce5('0x2e')]?_0x212bae[_0x9ce5('0x2c')]:_0x2e27b9['model'];if(_0x1a4f2a[_0x9ce5('0x29')][_0x9ce5('0x3b')]){_0x212bae['include']=[{'all':!![]}];}_0x212bae=_['merge']({},_0x212bae,_0x1a4f2a['options']);return db['VoiceRecording'][_0x9ce5('0x40')](_0x212bae)[_0x9ce5('0x20')](handleEntityNotFound(_0x2dc6ac,null))[_0x9ce5('0x20')](respondWithResult(_0x2dc6ac,null))[_0x9ce5('0x3e')](handleError(_0x2dc6ac,null));};exports['create']=function(_0x1c44a0,_0x1aa0ee){return db[_0x9ce5('0x3a')][_0x9ce5('0x41')](_0x1c44a0[_0x9ce5('0x42')],{})[_0x9ce5('0x20')](respondWithResult(_0x1aa0ee,0xc9))[_0x9ce5('0x3e')](handleError(_0x1aa0ee,null));};exports[_0x9ce5('0x43')]=function(_0xe46e43,_0x52777b){if(_0xe46e43['body']['id']){delete _0xe46e43[_0x9ce5('0x42')]['id'];}return db[_0x9ce5('0x3a')]['find']({'where':{'id':_0xe46e43[_0x9ce5('0x44')]['id']}})['then'](handleEntityNotFound(_0x52777b,null))['then'](saveUpdates(_0xe46e43[_0x9ce5('0x42')],null))['then'](respondWithResult(_0x52777b,null))['catch'](handleError(_0x52777b,null));};exports[_0x9ce5('0x45')]=function(_0x12638b,_0x52c02b){return db['VoiceRecording'][_0x9ce5('0x40')]({'where':{'id':_0x12638b[_0x9ce5('0x44')]['id']}})['then'](handleEntityNotFound(_0x52c02b,null))[_0x9ce5('0x20')](removeEntity(_0x52c02b,null))[_0x9ce5('0x3e')](handleError(_0x52c02b,null));};exports[_0x9ce5('0x46')]=function(_0x5bde71,_0x2b98de){return db[_0x9ce5('0x3a')]['describe']()[_0x9ce5('0x20')](respondWithResult(_0x2b98de,null))[_0x9ce5('0x3e')](handleError(_0x2b98de,null));};exports[_0x9ce5('0x47')]=function(_0x15676a,_0x301933,_0x22f6d4){var _0x3a9e58=require(_0x9ce5('0x48'));var _0x214c89=![];var _0x3027d4={};if(_0x15676a[_0x9ce5('0x29')][_0x9ce5('0x49')]&&_0x15676a[_0x9ce5('0x29')][_0x9ce5('0x49')]===_0x9ce5('0x4a')){_0x3027d4[_0x9ce5('0x4a')]=_0x15676a['params']['id'];}else{_0x3027d4['id']=_0x15676a[_0x9ce5('0x44')]['id'];}return db[_0x9ce5('0x3a')][_0x9ce5('0x40')]({'where':_0x3027d4,'attributes':['id','value'],'raw':!![]})[_0x9ce5('0x20')](handleEntityNotFound(_0x301933,null))[_0x9ce5('0x20')](function(_0xa3ff58){if(_0xa3ff58){var _0x51e2c5=util['format']('%s.cypher',_0xa3ff58[_0x9ce5('0x4b')]);if(fs[_0x9ce5('0x4c')](_0x51e2c5)){_0x214c89=!![];return _0x3a9e58[_0x9ce5('0x4d')](_0x51e2c5,_0xa3ff58[_0x9ce5('0x4b')],config['secrets'][_0x9ce5('0x4e')])['then'](function(){return _0xa3ff58;});}return _0xa3ff58;}})[_0x9ce5('0x20')](function(_0x5c4a90){if(_0x5c4a90){if(!fs['existsSync'](_0x5c4a90[_0x9ce5('0x4b')])){throw new db['Sequelize']['ValidationError'](_0x9ce5('0x4f'));}if(_0x5c4a90[_0x9ce5('0x50')]){return _0x301933[_0x9ce5('0x47')](_0x5c4a90[_0x9ce5('0x4b')],_0x5c4a90[_0x9ce5('0x50')]+path[_0x9ce5('0x51')](_0x5c4a90[_0x9ce5('0x4b')]),function(){if(_0x214c89){fs[_0x9ce5('0x52')](_0x5c4a90[_0x9ce5('0x4b')]);}});}else{return _0x301933['download'](_0x5c4a90[_0x9ce5('0x4b')],function(_0x5dc69a){if(_0x214c89){fs['unlink'](_0x5c4a90[_0x9ce5('0x4b')]);}});}}})[_0x9ce5('0x3e')](handleError(_0x301933,null));};exports[_0x9ce5('0x53')]=function(_0x5a2d4a,_0x1a574d,_0x3a5575){var _0x53ad87=require(_0x9ce5('0x48'));var _0x7502b6=![];var _0x4536be={'$and':[db[_0x9ce5('0x54')][_0x9ce5('0x32')](db[_0x9ce5('0x54')]['fn'](_0x9ce5('0x55'),db[_0x9ce5('0x54')]['col'](_0x9ce5('0x4a'))),_0x5a2d4a[_0x9ce5('0x29')][_0x9ce5('0x56')])]};if(_0x5a2d4a['query']['type']&&_0x5a2d4a[_0x9ce5('0x29')][_0x9ce5('0x49')]===_0x9ce5('0x4a')){_0x4536be[_0x9ce5('0x57')][_0x9ce5('0x58')]({'uniqueid':_0x5a2d4a[_0x9ce5('0x44')]['id']});}else{_0x4536be[_0x9ce5('0x57')][_0x9ce5('0x58')]({'id':_0x5a2d4a[_0x9ce5('0x44')]['id']});}return db[_0x9ce5('0x3a')]['find']({'where':_0x4536be,'attributes':['id',_0x9ce5('0x4b')],'raw':!![]})[_0x9ce5('0x20')](handleEntityNotFound(_0x1a574d,null))[_0x9ce5('0x20')](function(_0x16b2f2){if(_0x16b2f2){var _0x468fa1=util[_0x9ce5('0x59')](_0x9ce5('0x5a'),_0x16b2f2[_0x9ce5('0x4b')]);if(fs[_0x9ce5('0x4c')](_0x468fa1)){_0x7502b6=!![];return _0x53ad87[_0x9ce5('0x4d')](_0x468fa1,_0x16b2f2[_0x9ce5('0x4b')],config['secrets'][_0x9ce5('0x4e')])[_0x9ce5('0x20')](function(){return _0x16b2f2;});}return _0x16b2f2;}})['then'](function(_0x3e9f13){if(_0x3e9f13){if(!fs[_0x9ce5('0x4c')](_0x3e9f13[_0x9ce5('0x4b')])){throw new db[(_0x9ce5('0x5b'))][(_0x9ce5('0x5c'))]('VoiceRecording\x20not\x20found');}if(_0x3e9f13['filename']){return _0x1a574d[_0x9ce5('0x47')](_0x3e9f13['value'],_0x3e9f13['filename']+path[_0x9ce5('0x51')](_0x3e9f13[_0x9ce5('0x4b')]),function(){if(_0x7502b6){fs['unlink'](_0x3e9f13[_0x9ce5('0x4b')]);}});}else{return _0x1a574d[_0x9ce5('0x47')](_0x3e9f13[_0x9ce5('0x4b')],function(_0x188294){if(_0x7502b6){fs[_0x9ce5('0x52')](_0x3e9f13[_0x9ce5('0x4b')]);}});}}})['catch'](handleError(_0x1a574d,null));};
\ No newline at end of file
index 94a9f8d..1eadf99 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf232=['define','VoiceRecording','voice_recordings','uniqueid','util','bluebird','./voiceRecording.attributes','exports'];(function(_0x3b380d,_0x4bf247){var _0x54502b=function(_0x35d207){while(--_0x35d207){_0x3b380d['push'](_0x3b380d['shift']());}};_0x54502b(++_0x4bf247);}(_0xf232,0x1b4));var _0x2f23=function(_0xe6bfb6,_0x123119){_0xe6bfb6=_0xe6bfb6-0x0;var _0x491226=_0xf232[_0xe6bfb6];return _0x491226;};'use strict';var _=require('lodash');var util=require(_0x2f23('0x0'));var logger=require('../../config/logger')('api');var moment=require('moment');var BPromise=require(_0x2f23('0x1'));var rp=require('request-promise');var attributes=require(_0x2f23('0x2'));module[_0x2f23('0x3')]=function(_0x44ffe2,_0x3d51f9){return _0x44ffe2[_0x2f23('0x4')](_0x2f23('0x5'),attributes,{'tableName':_0x2f23('0x6'),'paranoid':![],'indexes':[{'name':_0x2f23('0x7'),'fields':[_0x2f23('0x7')]}],'timestamps':!![]});};
\ No newline at end of file
+var _0xc977=['define','VoiceRecording','voice_recordings','uniqueid','lodash','../../config/logger','api','moment','bluebird','./voiceRecording.attributes'];(function(_0x305b20,_0x5e57e9){var _0x26d64a=function(_0x2e17f0){while(--_0x2e17f0){_0x305b20['push'](_0x305b20['shift']());}};_0x26d64a(++_0x5e57e9);}(_0xc977,0xc2));var _0x7c97=function(_0x3acee8,_0x5f3924){_0x3acee8=_0x3acee8-0x0;var _0x5046cc=_0xc977[_0x3acee8];return _0x5046cc;};'use strict';var _=require(_0x7c97('0x0'));var util=require('util');var logger=require(_0x7c97('0x1'))(_0x7c97('0x2'));var moment=require(_0x7c97('0x3'));var BPromise=require(_0x7c97('0x4'));var rp=require('request-promise');var attributes=require(_0x7c97('0x5'));module['exports']=function(_0x127471,_0x50f98b){return _0x127471[_0x7c97('0x6')](_0x7c97('0x7'),attributes,{'tableName':_0x7c97('0x8'),'paranoid':![],'indexes':[{'name':'uniqueid','fields':[_0x7c97('0x9')]}],'timestamps':!![]});};
\ No newline at end of file
index 4802916..758f18c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3c2a=['http','request','VoiceRecording,\x20%s,\x20%s,\x20%s','request\x20sent','stringify','error','VoiceRecording,\x20%s,\x20%s','message','info','result','VoiceRecording','update','body','options','raw','where','attributes','limit','then','UpdateVoiceRecording','debug','catch','CreateVoiceRecording','../../components/encryptor','Setting','findOne','callRecordingEncryption','create','format','%s.cypher','encryptFile','value','secrets','unlink','CreateVoiceRecording\x20file\x20encrypted','util','moment','bluebird','randomstring','ioredis','../../config/utils','rpc','jayson/promise','client'];(function(_0x4d189e,_0x2c0a04){var _0x1b36df=function(_0x2d386c){while(--_0x2d386c){_0x4d189e['push'](_0x4d189e['shift']());}};_0x1b36df(++_0x2c0a04);}(_0x3c2a,0x1db));var _0xa3c2=function(_0x373e76,_0x4df3d6){_0x373e76=_0x373e76-0x0;var _0x2fedb9=_0x3c2a[_0x373e76];return _0x2fedb9;};'use strict';var _=require('lodash');var util=require(_0xa3c2('0x0'));var moment=require(_0xa3c2('0x1'));var BPromise=require(_0xa3c2('0x2'));var rs=require(_0xa3c2('0x3'));var fs=require('fs');var Redis=require(_0xa3c2('0x4'));var db=require('../../mysqldb')['db'];var utils=require(_0xa3c2('0x5'));var logger=require('../../config/logger')(_0xa3c2('0x6'));var config=require('../../config/environment');var jayson=require(_0xa3c2('0x7'));var client=jayson[_0xa3c2('0x8')][_0xa3c2('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x450791,_0x36c0fd,_0x1ac504){return new BPromise(function(_0x428bef,_0x4819fa){return client[_0xa3c2('0xa')](_0x450791,_0x1ac504)['then'](function(_0x53d61a){logger['info']('VoiceRecording,\x20%s,\x20%s',_0x36c0fd,'request\x20sent');logger['debug'](_0xa3c2('0xb'),_0x36c0fd,_0xa3c2('0xc'),JSON[_0xa3c2('0xd')](_0x53d61a));if(_0x53d61a[_0xa3c2('0xe')]){if(_0x53d61a[_0xa3c2('0xe')]['code']===0x1f4){logger['error'](_0xa3c2('0xf'),_0x36c0fd,_0x53d61a[_0xa3c2('0xe')][_0xa3c2('0x10')]);return _0x4819fa(_0x53d61a[_0xa3c2('0xe')][_0xa3c2('0x10')]);}logger[_0xa3c2('0xe')]('VoiceRecording,\x20%s,\x20%s',_0x36c0fd,_0x53d61a['error'][_0xa3c2('0x10')]);return _0x428bef(_0x53d61a[_0xa3c2('0xe')][_0xa3c2('0x10')]);}else{logger[_0xa3c2('0x11')]('VoiceRecording,\x20%s,\x20%s',_0x36c0fd,_0xa3c2('0xc'));_0x428bef(_0x53d61a[_0xa3c2('0x12')][_0xa3c2('0x10')]);}})['catch'](function(_0x48effe){logger[_0xa3c2('0xe')](_0xa3c2('0xf'),_0x36c0fd,_0x48effe);_0x4819fa(_0x48effe);});});}exports['UpdateVoiceRecording']=function(_0x527cc4){var _0x52d1de=this;return new Promise(function(_0x4e9db8,_0x102287){return db[_0xa3c2('0x13')][_0xa3c2('0x14')](_0x527cc4[_0xa3c2('0x15')],{'raw':_0x527cc4[_0xa3c2('0x16')]?_0x527cc4[_0xa3c2('0x16')][_0xa3c2('0x17')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x527cc4[_0xa3c2('0x16')]?_0x527cc4[_0xa3c2('0x16')][_0xa3c2('0x18')]||null:null,'attributes':_0x527cc4[_0xa3c2('0x16')]?_0x527cc4[_0xa3c2('0x16')][_0xa3c2('0x19')]||null:null,'limit':_0x527cc4['options']?_0x527cc4['options'][_0xa3c2('0x1a')]||null:null})[_0xa3c2('0x1b')](function(_0x428b55){logger[_0xa3c2('0x11')](_0xa3c2('0x1c'),_0x527cc4);logger[_0xa3c2('0x1d')]('UpdateVoiceRecording',_0x527cc4,JSON[_0xa3c2('0xd')](_0x428b55));_0x4e9db8(_0x428b55);})[_0xa3c2('0x1e')](function(_0x149b8b){logger[_0xa3c2('0xe')](_0xa3c2('0x1c'),_0x149b8b[_0xa3c2('0x10')],_0x527cc4);_0x102287(_0x52d1de[_0xa3c2('0xe')](0x1f4,_0x149b8b[_0xa3c2('0x10')]));});});};exports[_0xa3c2('0x1f')]=function(_0x2e254e){var _0x2107f7=this;return new Promise(function(_0x1f15bb,_0x5096b6){var _0x17d944=require(_0xa3c2('0x20'));var _0x33f5bc;return db[_0xa3c2('0x21')][_0xa3c2('0x22')]({'attributes':['id',_0xa3c2('0x23')],'where':{'id':0x1},'raw':!![]})['then'](function(_0x5c3e3b){_0x33f5bc=_0x5c3e3b;return db['VoiceRecording'][_0xa3c2('0x24')](_0x2e254e[_0xa3c2('0x15')]);})[_0xa3c2('0x1b')](function(_0x305633){if(_0x33f5bc['callRecordingEncryption']&&fs['existsSync'](_0x305633['value'])){var _0x1cb788=util[_0xa3c2('0x25')](_0xa3c2('0x26'),_0x305633['value']);return _0x17d944[_0xa3c2('0x27')](_0x305633[_0xa3c2('0x28')],_0x1cb788,config[_0xa3c2('0x29')]['recording'])['then'](function(){fs[_0xa3c2('0x2a')](_0x305633[_0xa3c2('0x28')]);logger['info'](_0xa3c2('0x2b'));return _0x305633;});}return _0x305633;})[_0xa3c2('0x1b')](function(_0x3b69fd){logger[_0xa3c2('0x11')](_0xa3c2('0x1f'),_0x2e254e);logger[_0xa3c2('0x1d')](_0xa3c2('0x1f'),_0x2e254e,JSON[_0xa3c2('0xd')](_0x3b69fd));_0x1f15bb(_0x3b69fd);})[_0xa3c2('0x1e')](function(_0x2902b4){logger[_0xa3c2('0xe')](_0xa3c2('0x1f'),_0x2902b4[_0xa3c2('0x10')],_0x2e254e);_0x5096b6(_0x2107f7[_0xa3c2('0xe')](0x1f4,_0x2902b4[_0xa3c2('0x10')]));});});};
\ No newline at end of file
+var _0xb554=['Setting','findOne','callRecordingEncryption','create','existsSync','format','%s.cypher','encryptFile','value','secrets','recording','unlink','CreateVoiceRecording\x20file\x20encrypted','lodash','moment','bluebird','randomstring','../../mysqldb','../../config/utils','rpc','../../config/environment','client','http','request','info','VoiceRecording,\x20%s,\x20%s','request\x20sent','debug','VoiceRecording,\x20%s,\x20%s,\x20%s','stringify','error','message','result','catch','UpdateVoiceRecording','VoiceRecording','update','options','raw','then','CreateVoiceRecording','../../components/encryptor'];(function(_0x23de42,_0x3699ad){var _0x180311=function(_0x325220){while(--_0x325220){_0x23de42['push'](_0x23de42['shift']());}};_0x180311(++_0x3699ad);}(_0xb554,0x187));var _0x4b55=function(_0xf5b65a,_0x2fba18){_0xf5b65a=_0xf5b65a-0x0;var _0x2177c4=_0xb554[_0xf5b65a];return _0x2177c4;};'use strict';var _=require(_0x4b55('0x0'));var util=require('util');var moment=require(_0x4b55('0x1'));var BPromise=require(_0x4b55('0x2'));var rs=require(_0x4b55('0x3'));var fs=require('fs');var Redis=require('ioredis');var db=require(_0x4b55('0x4'))['db'];var utils=require(_0x4b55('0x5'));var logger=require('../../config/logger')(_0x4b55('0x6'));var config=require(_0x4b55('0x7'));var jayson=require('jayson/promise');var client=jayson[_0x4b55('0x8')][_0x4b55('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x1688fd,_0x454055,_0xd83897){return new BPromise(function(_0x117644,_0x587666){return client[_0x4b55('0xa')](_0x1688fd,_0xd83897)['then'](function(_0x18b7a0){logger[_0x4b55('0xb')](_0x4b55('0xc'),_0x454055,_0x4b55('0xd'));logger[_0x4b55('0xe')](_0x4b55('0xf'),_0x454055,_0x4b55('0xd'),JSON[_0x4b55('0x10')](_0x18b7a0));if(_0x18b7a0[_0x4b55('0x11')]){if(_0x18b7a0['error']['code']===0x1f4){logger['error']('VoiceRecording,\x20%s,\x20%s',_0x454055,_0x18b7a0[_0x4b55('0x11')][_0x4b55('0x12')]);return _0x587666(_0x18b7a0[_0x4b55('0x11')][_0x4b55('0x12')]);}logger[_0x4b55('0x11')]('VoiceRecording,\x20%s,\x20%s',_0x454055,_0x18b7a0[_0x4b55('0x11')]['message']);return _0x117644(_0x18b7a0[_0x4b55('0x11')][_0x4b55('0x12')]);}else{logger['info'](_0x4b55('0xc'),_0x454055,'request\x20sent');_0x117644(_0x18b7a0[_0x4b55('0x13')][_0x4b55('0x12')]);}})[_0x4b55('0x14')](function(_0x30858d){logger[_0x4b55('0x11')]('VoiceRecording,\x20%s,\x20%s',_0x454055,_0x30858d);_0x587666(_0x30858d);});});}exports[_0x4b55('0x15')]=function(_0x47b905){var _0x1cacdc=this;return new Promise(function(_0x575644,_0x11f7b3){return db[_0x4b55('0x16')][_0x4b55('0x17')](_0x47b905['body'],{'raw':_0x47b905['options']?_0x47b905[_0x4b55('0x18')][_0x4b55('0x19')]===undefined?!![]:![]:!![],'individualHooks':!![],'where':_0x47b905[_0x4b55('0x18')]?_0x47b905['options']['where']||null:null,'attributes':_0x47b905[_0x4b55('0x18')]?_0x47b905[_0x4b55('0x18')]['attributes']||null:null,'limit':_0x47b905[_0x4b55('0x18')]?_0x47b905[_0x4b55('0x18')]['limit']||null:null})[_0x4b55('0x1a')](function(_0x33dd3b){logger[_0x4b55('0xb')](_0x4b55('0x15'),_0x47b905);logger[_0x4b55('0xe')](_0x4b55('0x15'),_0x47b905,JSON[_0x4b55('0x10')](_0x33dd3b));_0x575644(_0x33dd3b);})[_0x4b55('0x14')](function(_0x4d9182){logger[_0x4b55('0x11')](_0x4b55('0x15'),_0x4d9182[_0x4b55('0x12')],_0x47b905);_0x11f7b3(_0x1cacdc[_0x4b55('0x11')](0x1f4,_0x4d9182['message']));});});};exports[_0x4b55('0x1b')]=function(_0x2cfc0e){var _0x506344=this;return new Promise(function(_0x40889f,_0x2fc747){var _0x2c9281=require(_0x4b55('0x1c'));var _0x538297;return db[_0x4b55('0x1d')][_0x4b55('0x1e')]({'attributes':['id',_0x4b55('0x1f')],'where':{'id':0x1},'raw':!![]})[_0x4b55('0x1a')](function(_0x2de366){_0x538297=_0x2de366;return db[_0x4b55('0x16')][_0x4b55('0x20')](_0x2cfc0e['body']);})['then'](function(_0x501309){if(_0x538297[_0x4b55('0x1f')]&&fs[_0x4b55('0x21')](_0x501309['value'])){var _0x8083c4=util[_0x4b55('0x22')](_0x4b55('0x23'),_0x501309['value']);return _0x2c9281[_0x4b55('0x24')](_0x501309[_0x4b55('0x25')],_0x8083c4,config[_0x4b55('0x26')][_0x4b55('0x27')])['then'](function(){fs[_0x4b55('0x28')](_0x501309[_0x4b55('0x25')]);logger['info'](_0x4b55('0x29'));return _0x501309;});}return _0x501309;})[_0x4b55('0x1a')](function(_0x25f9ef){logger[_0x4b55('0xb')](_0x4b55('0x1b'),_0x2cfc0e);logger['debug'](_0x4b55('0x1b'),_0x2cfc0e,JSON['stringify'](_0x25f9ef));_0x40889f(_0x25f9ef);})[_0x4b55('0x14')](function(_0x3a7176){logger['error'](_0x4b55('0x1b'),_0x3a7176[_0x4b55('0x12')],_0x2cfc0e);_0x2fc747(_0x506344['error'](0x1f4,_0x3a7176['message']));});});};
\ No newline at end of file
index fa03ccd..79a0211 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8ddf=['express','../../components/interaction/service','../../config/environment','./voiceTransferReport.controller','get','isAuthenticated','index','/:id','show','create','put','update','delete','destroy','exports','multer','util'];(function(_0x116b14,_0x3f946d){var _0x3b99bf=function(_0x5a5398){while(--_0x5a5398){_0x116b14['push'](_0x116b14['shift']());}};_0x3b99bf(++_0x3f946d);}(_0x8ddf,0x196));var _0xf8dd=function(_0x1f9f37,_0x18776e){_0x1f9f37=_0x1f9f37-0x0;var _0x21c080=_0x8ddf[_0x1f9f37];return _0x21c080;};'use strict';var multer=require(_0xf8dd('0x0'));var util=require(_0xf8dd('0x1'));var path=require('path');var timeout=require('connect-timeout');var express=require(_0xf8dd('0x2'));var router=express['Router']();var auth=require('../../components/auth/service');var interaction=require(_0xf8dd('0x3'));var config=require(_0xf8dd('0x4'));var controller=require(_0xf8dd('0x5'));router[_0xf8dd('0x6')]('/',auth[_0xf8dd('0x7')](),controller[_0xf8dd('0x8')]);router['get'](_0xf8dd('0x9'),auth[_0xf8dd('0x7')](),controller[_0xf8dd('0xa')]);router['post']('/',auth[_0xf8dd('0x7')](),controller[_0xf8dd('0xb')]);router[_0xf8dd('0xc')](_0xf8dd('0x9'),auth[_0xf8dd('0x7')](),controller[_0xf8dd('0xd')]);router[_0xf8dd('0xe')](_0xf8dd('0x9'),auth[_0xf8dd('0x7')](),controller[_0xf8dd('0xf')]);module[_0xf8dd('0x10')]=router;
\ No newline at end of file
+var _0x843f=['show','post','create','put','isAuthenticated','update','util','path','connect-timeout','Router','../../components/auth/service','../../components/interaction/service','../../config/environment','get','index','/:id'];(function(_0x2c0b3f,_0x130206){var _0x14928e=function(_0x479729){while(--_0x479729){_0x2c0b3f['push'](_0x2c0b3f['shift']());}};_0x14928e(++_0x130206);}(_0x843f,0x1b6));var _0xf843=function(_0xa806a6,_0x231f26){_0xa806a6=_0xa806a6-0x0;var _0x821bd6=_0x843f[_0xa806a6];return _0x821bd6;};'use strict';var multer=require('multer');var util=require(_0xf843('0x0'));var path=require(_0xf843('0x1'));var timeout=require(_0xf843('0x2'));var express=require('express');var router=express[_0xf843('0x3')]();var auth=require(_0xf843('0x4'));var interaction=require(_0xf843('0x5'));var config=require(_0xf843('0x6'));var controller=require('./voiceTransferReport.controller');router[_0xf843('0x7')]('/',auth['isAuthenticated'](),controller[_0xf843('0x8')]);router[_0xf843('0x7')](_0xf843('0x9'),auth['isAuthenticated'](),controller[_0xf843('0xa')]);router[_0xf843('0xb')]('/',auth['isAuthenticated'](),controller[_0xf843('0xc')]);router[_0xf843('0xd')](_0xf843('0x9'),auth[_0xf843('0xe')](),controller[_0xf843('0xf')]);router['delete']('/:id',auth['isAuthenticated'](),controller['destroy']);module['exports']=router;
\ No newline at end of file
index 6d62a6a..f6b12ce 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x03cb=['blind','STRING','ENUM','Yes','sequelize','exports'];(function(_0x4ae6ef,_0xc2af80){var _0x3cbb4e=function(_0x569ad5){while(--_0x569ad5){_0x4ae6ef['push'](_0x4ae6ef['shift']());}};_0x3cbb4e(++_0xc2af80);}(_0x03cb,0x70));var _0xb03c=function(_0x3b16da,_0x2fef1f){_0x3b16da=_0x3b16da-0x0;var _0x2a193c=_0x03cb[_0x3b16da];return _0x2a193c;};'use strict';var Sequelize=require(_0xb03c('0x0'));var moment=require('moment');module[_0xb03c('0x1')]={'type':{'type':Sequelize['ENUM'](_0xb03c('0x2'),'attended')},'result':{'type':Sequelize[_0xb03c('0x3')]},'transfererchannel':{'type':Sequelize['STRING']},'transferercalleridnum':{'type':Sequelize[_0xb03c('0x3')]},'transferercalleridname':{'type':Sequelize['STRING']},'transfererconnectedlinenum':{'type':Sequelize['STRING']},'transfererconnectedlinename':{'type':Sequelize['STRING']},'transfereraccountcode':{'type':Sequelize['STRING']},'transferercontext':{'type':Sequelize['STRING']},'transfererexten':{'type':Sequelize['STRING']},'transfererlinkedid':{'type':Sequelize[_0xb03c('0x3')]},'transfereechannel':{'type':Sequelize['STRING']},'transfereecalleridnum':{'type':Sequelize[_0xb03c('0x3')]},'transfereecalleridname':{'type':Sequelize[_0xb03c('0x3')]},'transfereeconnectedlinenum':{'type':Sequelize[_0xb03c('0x3')]},'transfereeconnectedlinename':{'type':Sequelize[_0xb03c('0x3')]},'transfereeaccountcode':{'type':Sequelize[_0xb03c('0x3')]},'transfereecontext':{'type':Sequelize[_0xb03c('0x3')]},'transfereeexten':{'type':Sequelize[_0xb03c('0x3')]},'transfereelinkedid':{'type':Sequelize[_0xb03c('0x3')]},'isexternal':{'type':Sequelize[_0xb03c('0x4')](_0xb03c('0x5'),'No')},'context':{'type':Sequelize[_0xb03c('0x3')]},'extension':{'type':Sequelize['STRING']}};
\ No newline at end of file
+var _0x593b=['ENUM','blind','attended','STRING','Yes','sequelize','moment','exports'];(function(_0x5d07ff,_0x1f976f){var _0x5226ad=function(_0x1653a4){while(--_0x1653a4){_0x5d07ff['push'](_0x5d07ff['shift']());}};_0x5226ad(++_0x1f976f);}(_0x593b,0x155));var _0xb593=function(_0x3d8098,_0x22309c){_0x3d8098=_0x3d8098-0x0;var _0x203937=_0x593b[_0x3d8098];return _0x203937;};'use strict';var Sequelize=require(_0xb593('0x0'));var moment=require(_0xb593('0x1'));module[_0xb593('0x2')]={'type':{'type':Sequelize[_0xb593('0x3')](_0xb593('0x4'),_0xb593('0x5'))},'result':{'type':Sequelize[_0xb593('0x6')]},'transfererchannel':{'type':Sequelize[_0xb593('0x6')]},'transferercalleridnum':{'type':Sequelize[_0xb593('0x6')]},'transferercalleridname':{'type':Sequelize[_0xb593('0x6')]},'transfererconnectedlinenum':{'type':Sequelize['STRING']},'transfererconnectedlinename':{'type':Sequelize['STRING']},'transfereraccountcode':{'type':Sequelize[_0xb593('0x6')]},'transferercontext':{'type':Sequelize[_0xb593('0x6')]},'transfererexten':{'type':Sequelize[_0xb593('0x6')]},'transfererlinkedid':{'type':Sequelize['STRING']},'transfereechannel':{'type':Sequelize[_0xb593('0x6')]},'transfereecalleridnum':{'type':Sequelize[_0xb593('0x6')]},'transfereecalleridname':{'type':Sequelize['STRING']},'transfereeconnectedlinenum':{'type':Sequelize[_0xb593('0x6')]},'transfereeconnectedlinename':{'type':Sequelize[_0xb593('0x6')]},'transfereeaccountcode':{'type':Sequelize[_0xb593('0x6')]},'transfereecontext':{'type':Sequelize[_0xb593('0x6')]},'transfereeexten':{'type':Sequelize[_0xb593('0x6')]},'transfereelinkedid':{'type':Sequelize['STRING']},'isexternal':{'type':Sequelize[_0xb593('0x3')](_0xb593('0x7'),'No')},'context':{'type':Sequelize[_0xb593('0x6')]},'extension':{'type':Sequelize['STRING']}};
\ No newline at end of file
index d9e071c..8e19df2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3148=['filters','intersection','attributes','fields','length','hasOwnProperty','nolimit','limit','order','sort','pick','filter','where','merge','map','type','key','field','options','includeAll','include','findAll','rows','catch','show','params','find','create','body','html-pdf','eml-format','zip-dir','fast-json-patch','request-promise','moment','mustache','util','path','sox','to-csv','ejs','lodash','crypto','desk.js','querystring','papaparse','../../components/auth/service','../../components/parsers/qs','../../config/logger','api','../../config/utils','../../mysqldb','end','json','count','offset','status','set','apply','reject','save','update','then','destroy','sendStatus','error','stack','name','VoiceTransferReport','rawAttributes','model','keys','query'];(function(_0x39dae4,_0x58a305){var _0x39ab08=function(_0x1ceb0c){while(--_0x1ceb0c){_0x39dae4['push'](_0x39dae4['shift']());}};_0x39ab08(++_0x58a305);}(_0x3148,0x1d3));var _0x8314=function(_0x549996,_0xd04634){_0x549996=_0x549996-0x0;var _0x4de5d1=_0x3148[_0x549996];return _0x4de5d1;};'use strict';var pdf=require(_0x8314('0x0'));var emlformat=require(_0x8314('0x1'));var rimraf=require('rimraf');var zipdir=require(_0x8314('0x2'));var jsonpatch=require(_0x8314('0x3'));var rp=require(_0x8314('0x4'));var moment=require(_0x8314('0x5'));var BPromise=require('bluebird');var Mustache=require(_0x8314('0x6'));var util=require(_0x8314('0x7'));var path=require(_0x8314('0x8'));var sox=require(_0x8314('0x9'));var csv=require(_0x8314('0xa'));var ejs=require(_0x8314('0xb'));var fs=require('fs');var _=require(_0x8314('0xc'));var squel=require('squel');var crypto=require(_0x8314('0xd'));var jsforce=require('jsforce');var deskjs=require(_0x8314('0xe'));var toCsv=require(_0x8314('0xa'));var querystring=require(_0x8314('0xf'));var Papa=require(_0x8314('0x10'));var authService=require(_0x8314('0x11'));var hardwareService=require('../../config/license/hardware');var Redis=require('ioredis');var qs=require(_0x8314('0x12'));var logger=require(_0x8314('0x13'))(_0x8314('0x14'));var utils=require(_0x8314('0x15'));var config=require('../../config/environment');var db=require(_0x8314('0x16'))['db'];function respondWithStatusCode(_0xe3c230,_0x500e6f){_0x500e6f=_0x500e6f||0xcc;return function(_0x2f8231){if(_0x2f8231){return _0xe3c230['sendStatus'](_0x500e6f);}return _0xe3c230['status'](_0x500e6f)[_0x8314('0x17')]();};}function respondWithResult(_0xc924ca,_0x23a113){_0x23a113=_0x23a113||0xc8;return function(_0x24c55c){if(_0x24c55c){return _0xc924ca['status'](_0x23a113)[_0x8314('0x18')](_0x24c55c);}};}function respondWithFilteredResult(_0x2e7098,_0x110271){return function(_0x136e09){if(_0x136e09){var _0x2c459e=_0x136e09[_0x8314('0x19')],_0x6a588a=_0x110271[_0x8314('0x1a')],_0x579a15=_0x110271[_0x8314('0x1a')]+_0x110271['limit'],_0x4f2bd2;if(_0x579a15>=_0x2c459e){_0x579a15=_0x2c459e;_0x4f2bd2=0xc8;}else{_0x4f2bd2=0xce;}_0x2e7098[_0x8314('0x1b')](_0x4f2bd2);return _0x2e7098[_0x8314('0x1c')]('Content-Range',_0x6a588a+'-'+_0x579a15+'/'+_0x2c459e)[_0x8314('0x18')](_0x136e09);}return null;};}function patchUpdates(_0x1df0a9){return function(_0x4ac7c8){try{jsonpatch[_0x8314('0x1d')](_0x4ac7c8,_0x1df0a9,!![]);}catch(_0x55053a){return BPromise[_0x8314('0x1e')](_0x55053a);}return _0x4ac7c8[_0x8314('0x1f')]();};}function saveUpdates(_0x45f032,_0x4d3509){return function(_0x4ead11){if(_0x4ead11){return _0x4ead11[_0x8314('0x20')](_0x45f032)[_0x8314('0x21')](function(_0xc37d84){return _0xc37d84;});}return null;};}function removeEntity(_0x37583c,_0x18045c){return function(_0x1b1579){if(_0x1b1579){return _0x1b1579[_0x8314('0x22')]()[_0x8314('0x21')](function(){_0x37583c[_0x8314('0x1b')](0xcc)[_0x8314('0x17')]();});}};}function handleEntityNotFound(_0x5c6fd1,_0xf72fc9){return function(_0x29535a){if(!_0x29535a){_0x5c6fd1[_0x8314('0x23')](0x194);}return _0x29535a;};}function handleError(_0xa26c5c,_0xdf35e9){_0xdf35e9=_0xdf35e9||0x1f4;return function(_0x5694b5){logger[_0x8314('0x24')](_0x5694b5[_0x8314('0x25')]);if(_0x5694b5[_0x8314('0x26')]){delete _0x5694b5['name'];}_0xa26c5c[_0x8314('0x1b')](_0xdf35e9)['send'](_0x5694b5);};}exports['index']=function(_0x30d0b2,_0x562c70){var _0x24bae1={},_0x498fce={},_0x3ed581={'count':0x0,'rows':[]};var _0x474c0d=db[_0x8314('0x27')][_0x8314('0x28')];_0x498fce[_0x8314('0x29')]=_[_0x8314('0x2a')](_0x474c0d);_0x498fce['query']=_['keys'](_0x30d0b2[_0x8314('0x2b')]);_0x498fce[_0x8314('0x2c')]=_[_0x8314('0x2d')](_0x498fce['model'],_0x498fce[_0x8314('0x2b')]);_0x24bae1[_0x8314('0x2e')]=_[_0x8314('0x2d')](_0x498fce[_0x8314('0x29')],qs[_0x8314('0x2f')](_0x30d0b2[_0x8314('0x2b')][_0x8314('0x2f')]));_0x24bae1[_0x8314('0x2e')]=_0x24bae1[_0x8314('0x2e')][_0x8314('0x30')]?_0x24bae1[_0x8314('0x2e')]:_0x498fce[_0x8314('0x29')];if(!_0x30d0b2[_0x8314('0x2b')][_0x8314('0x31')](_0x8314('0x32'))){_0x24bae1[_0x8314('0x33')]=qs[_0x8314('0x33')](_0x30d0b2['query']['limit']);_0x24bae1[_0x8314('0x1a')]=qs[_0x8314('0x1a')](_0x30d0b2['query']['offset']);}_0x24bae1[_0x8314('0x34')]=qs[_0x8314('0x35')](_0x30d0b2[_0x8314('0x2b')][_0x8314('0x35')]);_0x24bae1['where']=qs[_0x8314('0x2c')](_[_0x8314('0x36')](_0x30d0b2[_0x8314('0x2b')],_0x498fce[_0x8314('0x2c')]));if(_0x30d0b2['query'][_0x8314('0x37')]){_0x24bae1[_0x8314('0x38')]=_[_0x8314('0x39')](_0x24bae1['where'],{'$or':_[_0x8314('0x3a')](_0x474c0d,function(_0x480d81){if(_0x480d81[_0x8314('0x3b')][_0x8314('0x3c')]!=='VIRTUAL'){var _0x5f0148={};_0x5f0148[_0x480d81[_0x8314('0x3d')]]={'$like':'%'+_0x30d0b2['query'][_0x8314('0x37')]+'%'};return _0x5f0148;}})});}_0x24bae1=_['merge']({},_0x24bae1,_0x30d0b2[_0x8314('0x3e')]);var _0x5b4910={'where':_0x24bae1['where']};return db[_0x8314('0x27')][_0x8314('0x19')](_0x5b4910)[_0x8314('0x21')](function(_0x37e976){_0x3ed581[_0x8314('0x19')]=_0x37e976;if(_0x30d0b2[_0x8314('0x2b')][_0x8314('0x3f')]){_0x24bae1[_0x8314('0x40')]=[{'all':!![]}];}return db[_0x8314('0x27')][_0x8314('0x41')](_0x24bae1);})['then'](function(_0x464337){_0x3ed581[_0x8314('0x42')]=_0x464337;return _0x3ed581;})[_0x8314('0x21')](respondWithFilteredResult(_0x562c70,_0x24bae1))[_0x8314('0x43')](handleError(_0x562c70,null));};exports[_0x8314('0x44')]=function(_0x22fc1c,_0x5f2f9b){var _0x4adcb0={'raw':!![],'where':{'id':_0x22fc1c[_0x8314('0x45')]['id']}},_0x4c2858={};_0x4c2858['model']=_['keys'](db[_0x8314('0x27')]['rawAttributes']);_0x4c2858[_0x8314('0x2b')]=_[_0x8314('0x2a')](_0x22fc1c[_0x8314('0x2b')]);_0x4c2858[_0x8314('0x2c')]=_[_0x8314('0x2d')](_0x4c2858[_0x8314('0x29')],_0x4c2858[_0x8314('0x2b')]);_0x4adcb0['attributes']=_['intersection'](_0x4c2858['model'],qs[_0x8314('0x2f')](_0x22fc1c[_0x8314('0x2b')]['fields']));_0x4adcb0[_0x8314('0x2e')]=_0x4adcb0[_0x8314('0x2e')][_0x8314('0x30')]?_0x4adcb0[_0x8314('0x2e')]:_0x4c2858[_0x8314('0x29')];if(_0x22fc1c[_0x8314('0x2b')][_0x8314('0x3f')]){_0x4adcb0[_0x8314('0x40')]=[{'all':!![]}];}_0x4adcb0=_[_0x8314('0x39')]({},_0x4adcb0,_0x22fc1c[_0x8314('0x3e')]);return db['VoiceTransferReport'][_0x8314('0x46')](_0x4adcb0)[_0x8314('0x21')](handleEntityNotFound(_0x5f2f9b,null))[_0x8314('0x21')](respondWithResult(_0x5f2f9b,null))[_0x8314('0x43')](handleError(_0x5f2f9b,null));};exports[_0x8314('0x47')]=function(_0x24996e,_0x445a9a){return db[_0x8314('0x27')]['create'](_0x24996e[_0x8314('0x48')],{})[_0x8314('0x21')](respondWithResult(_0x445a9a,0xc9))[_0x8314('0x43')](handleError(_0x445a9a,null));};exports['update']=function(_0x4308a5,_0x2dc9ee){if(_0x4308a5[_0x8314('0x48')]['id']){delete _0x4308a5[_0x8314('0x48')]['id'];}return db[_0x8314('0x27')][_0x8314('0x46')]({'where':{'id':_0x4308a5[_0x8314('0x45')]['id']}})[_0x8314('0x21')](handleEntityNotFound(_0x2dc9ee,null))['then'](saveUpdates(_0x4308a5[_0x8314('0x48')],null))[_0x8314('0x21')](respondWithResult(_0x2dc9ee,null))[_0x8314('0x43')](handleError(_0x2dc9ee,null));};exports[_0x8314('0x22')]=function(_0x4260b8,_0x35adc0){return db['VoiceTransferReport']['find']({'where':{'id':_0x4260b8[_0x8314('0x45')]['id']}})[_0x8314('0x21')](handleEntityNotFound(_0x35adc0,null))['then'](removeEntity(_0x35adc0,null))['catch'](handleError(_0x35adc0,null));};
\ No newline at end of file
+var _0x750c=['set','Content-Range','reject','save','update','destroy','then','end','error','name','send','index','VoiceTransferReport','rawAttributes','keys','query','model','attributes','intersection','fields','length','hasOwnProperty','nolimit','order','sort','where','pick','filters','merge','map','type','key','VIRTUAL','field','filter','options','include','findAll','rows','catch','show','params','includeAll','find','create','body','eml-format','rimraf','zip-dir','fast-json-patch','bluebird','mustache','util','path','sox','lodash','squel','querystring','../../components/auth/service','../../config/license/hardware','../../components/parsers/qs','../../config/logger','../../config/utils','../../mysqldb','sendStatus','status','json','count','offset','limit'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x750c,0x1d2));var _0xc750=function(_0x4f40c5,_0x5432b9){_0x4f40c5=_0x4f40c5-0x0;var _0x4b2ebb=_0x750c[_0x4f40c5];return _0x4b2ebb;};'use strict';var pdf=require('html-pdf');var emlformat=require(_0xc750('0x0'));var rimraf=require(_0xc750('0x1'));var zipdir=require(_0xc750('0x2'));var jsonpatch=require(_0xc750('0x3'));var rp=require('request-promise');var moment=require('moment');var BPromise=require(_0xc750('0x4'));var Mustache=require(_0xc750('0x5'));var util=require(_0xc750('0x6'));var path=require(_0xc750('0x7'));var sox=require(_0xc750('0x8'));var csv=require('to-csv');var ejs=require('ejs');var fs=require('fs');var _=require(_0xc750('0x9'));var squel=require(_0xc750('0xa'));var crypto=require('crypto');var jsforce=require('jsforce');var deskjs=require('desk.js');var toCsv=require('to-csv');var querystring=require(_0xc750('0xb'));var Papa=require('papaparse');var authService=require(_0xc750('0xc'));var hardwareService=require(_0xc750('0xd'));var Redis=require('ioredis');var qs=require(_0xc750('0xe'));var logger=require(_0xc750('0xf'))('api');var utils=require(_0xc750('0x10'));var config=require('../../config/environment');var db=require(_0xc750('0x11'))['db'];function respondWithStatusCode(_0x49033b,_0x3aac00){_0x3aac00=_0x3aac00||0xcc;return function(_0x46c513){if(_0x46c513){return _0x49033b[_0xc750('0x12')](_0x3aac00);}return _0x49033b[_0xc750('0x13')](_0x3aac00)['end']();};}function respondWithResult(_0x29befa,_0x40b0b0){_0x40b0b0=_0x40b0b0||0xc8;return function(_0x5f42bd){if(_0x5f42bd){return _0x29befa[_0xc750('0x13')](_0x40b0b0)[_0xc750('0x14')](_0x5f42bd);}};}function respondWithFilteredResult(_0x268305,_0x106657){return function(_0x20ea8d){if(_0x20ea8d){var _0x2b5777=_0x20ea8d[_0xc750('0x15')],_0xe5c76a=_0x106657[_0xc750('0x16')],_0x23cae0=_0x106657[_0xc750('0x16')]+_0x106657[_0xc750('0x17')],_0x3d8fb0;if(_0x23cae0>=_0x2b5777){_0x23cae0=_0x2b5777;_0x3d8fb0=0xc8;}else{_0x3d8fb0=0xce;}_0x268305[_0xc750('0x13')](_0x3d8fb0);return _0x268305[_0xc750('0x18')](_0xc750('0x19'),_0xe5c76a+'-'+_0x23cae0+'/'+_0x2b5777)['json'](_0x20ea8d);}return null;};}function patchUpdates(_0x5e0152){return function(_0x406b40){try{jsonpatch['apply'](_0x406b40,_0x5e0152,!![]);}catch(_0x10b542){return BPromise[_0xc750('0x1a')](_0x10b542);}return _0x406b40[_0xc750('0x1b')]();};}function saveUpdates(_0x275cf6,_0x3afb9d){return function(_0x742aca){if(_0x742aca){return _0x742aca[_0xc750('0x1c')](_0x275cf6)['then'](function(_0x13e60e){return _0x13e60e;});}return null;};}function removeEntity(_0x352c38,_0x25cda5){return function(_0x3d5dc1){if(_0x3d5dc1){return _0x3d5dc1[_0xc750('0x1d')]()[_0xc750('0x1e')](function(){_0x352c38[_0xc750('0x13')](0xcc)[_0xc750('0x1f')]();});}};}function handleEntityNotFound(_0x2ab581,_0x4e0dee){return function(_0x3c6524){if(!_0x3c6524){_0x2ab581[_0xc750('0x12')](0x194);}return _0x3c6524;};}function handleError(_0x1d1184,_0x402793){_0x402793=_0x402793||0x1f4;return function(_0x33c9b3){logger[_0xc750('0x20')](_0x33c9b3['stack']);if(_0x33c9b3[_0xc750('0x21')]){delete _0x33c9b3[_0xc750('0x21')];}_0x1d1184['status'](_0x402793)[_0xc750('0x22')](_0x33c9b3);};}exports[_0xc750('0x23')]=function(_0x5437eb,_0x30a599){var _0x49bbc2={},_0x5d0f4c={},_0x33f3be={'count':0x0,'rows':[]};var _0x3357f6=db[_0xc750('0x24')][_0xc750('0x25')];_0x5d0f4c['model']=_[_0xc750('0x26')](_0x3357f6);_0x5d0f4c[_0xc750('0x27')]=_[_0xc750('0x26')](_0x5437eb[_0xc750('0x27')]);_0x5d0f4c['filters']=_['intersection'](_0x5d0f4c[_0xc750('0x28')],_0x5d0f4c['query']);_0x49bbc2[_0xc750('0x29')]=_[_0xc750('0x2a')](_0x5d0f4c[_0xc750('0x28')],qs[_0xc750('0x2b')](_0x5437eb[_0xc750('0x27')][_0xc750('0x2b')]));_0x49bbc2[_0xc750('0x29')]=_0x49bbc2['attributes'][_0xc750('0x2c')]?_0x49bbc2[_0xc750('0x29')]:_0x5d0f4c[_0xc750('0x28')];if(!_0x5437eb[_0xc750('0x27')][_0xc750('0x2d')](_0xc750('0x2e'))){_0x49bbc2['limit']=qs[_0xc750('0x17')](_0x5437eb[_0xc750('0x27')]['limit']);_0x49bbc2[_0xc750('0x16')]=qs[_0xc750('0x16')](_0x5437eb['query']['offset']);}_0x49bbc2[_0xc750('0x2f')]=qs[_0xc750('0x30')](_0x5437eb['query'][_0xc750('0x30')]);_0x49bbc2[_0xc750('0x31')]=qs['filters'](_[_0xc750('0x32')](_0x5437eb[_0xc750('0x27')],_0x5d0f4c[_0xc750('0x33')]));if(_0x5437eb['query']['filter']){_0x49bbc2['where']=_[_0xc750('0x34')](_0x49bbc2['where'],{'$or':_[_0xc750('0x35')](_0x3357f6,function(_0x509194){if(_0x509194[_0xc750('0x36')][_0xc750('0x37')]!==_0xc750('0x38')){var _0xe3f108={};_0xe3f108[_0x509194[_0xc750('0x39')]]={'$like':'%'+_0x5437eb[_0xc750('0x27')][_0xc750('0x3a')]+'%'};return _0xe3f108;}})});}_0x49bbc2=_[_0xc750('0x34')]({},_0x49bbc2,_0x5437eb[_0xc750('0x3b')]);var _0x384c3d={'where':_0x49bbc2[_0xc750('0x31')]};return db['VoiceTransferReport'][_0xc750('0x15')](_0x384c3d)[_0xc750('0x1e')](function(_0x323c6e){_0x33f3be['count']=_0x323c6e;if(_0x5437eb[_0xc750('0x27')]['includeAll']){_0x49bbc2[_0xc750('0x3c')]=[{'all':!![]}];}return db[_0xc750('0x24')][_0xc750('0x3d')](_0x49bbc2);})[_0xc750('0x1e')](function(_0x1dac9d){_0x33f3be[_0xc750('0x3e')]=_0x1dac9d;return _0x33f3be;})[_0xc750('0x1e')](respondWithFilteredResult(_0x30a599,_0x49bbc2))[_0xc750('0x3f')](handleError(_0x30a599,null));};exports[_0xc750('0x40')]=function(_0x51af3c,_0x53dba1){var _0x26ae58={'raw':!![],'where':{'id':_0x51af3c[_0xc750('0x41')]['id']}},_0x1d37e7={};_0x1d37e7[_0xc750('0x28')]=_[_0xc750('0x26')](db[_0xc750('0x24')][_0xc750('0x25')]);_0x1d37e7[_0xc750('0x27')]=_[_0xc750('0x26')](_0x51af3c[_0xc750('0x27')]);_0x1d37e7[_0xc750('0x33')]=_['intersection'](_0x1d37e7[_0xc750('0x28')],_0x1d37e7['query']);_0x26ae58['attributes']=_['intersection'](_0x1d37e7['model'],qs[_0xc750('0x2b')](_0x51af3c[_0xc750('0x27')][_0xc750('0x2b')]));_0x26ae58[_0xc750('0x29')]=_0x26ae58[_0xc750('0x29')][_0xc750('0x2c')]?_0x26ae58[_0xc750('0x29')]:_0x1d37e7[_0xc750('0x28')];if(_0x51af3c[_0xc750('0x27')][_0xc750('0x42')]){_0x26ae58[_0xc750('0x3c')]=[{'all':!![]}];}_0x26ae58=_[_0xc750('0x34')]({},_0x26ae58,_0x51af3c[_0xc750('0x3b')]);return db[_0xc750('0x24')][_0xc750('0x43')](_0x26ae58)[_0xc750('0x1e')](handleEntityNotFound(_0x53dba1,null))['then'](respondWithResult(_0x53dba1,null))[_0xc750('0x3f')](handleError(_0x53dba1,null));};exports[_0xc750('0x44')]=function(_0x4930f8,_0x3b1068){return db[_0xc750('0x24')][_0xc750('0x44')](_0x4930f8['body'],{})[_0xc750('0x1e')](respondWithResult(_0x3b1068,0xc9))[_0xc750('0x3f')](handleError(_0x3b1068,null));};exports[_0xc750('0x1c')]=function(_0x13032e,_0x128a94){if(_0x13032e[_0xc750('0x45')]['id']){delete _0x13032e[_0xc750('0x45')]['id'];}return db['VoiceTransferReport']['find']({'where':{'id':_0x13032e[_0xc750('0x41')]['id']}})[_0xc750('0x1e')](handleEntityNotFound(_0x128a94,null))[_0xc750('0x1e')](saveUpdates(_0x13032e[_0xc750('0x45')],null))[_0xc750('0x1e')](respondWithResult(_0x128a94,null))[_0xc750('0x3f')](handleError(_0x128a94,null));};exports['destroy']=function(_0x4ce6dc,_0x3f9c46){return db[_0xc750('0x24')][_0xc750('0x43')]({'where':{'id':_0x4ce6dc[_0xc750('0x41')]['id']}})[_0xc750('0x1e')](handleEntityNotFound(_0x3f9c46,null))['then'](removeEntity(_0x3f9c46,null))[_0xc750('0x3f')](handleError(_0x3f9c46,null));};
\ No newline at end of file
index df2032a..71c0c09 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9e49=['../../config/logger','api','moment','request-promise','./voiceTransferReport.attributes','exports','define','report_call_transfer','lodash','util'];(function(_0xa3df6d,_0x3c8fb6){var _0x5b5aa3=function(_0x335c9a){while(--_0x335c9a){_0xa3df6d['push'](_0xa3df6d['shift']());}};_0x5b5aa3(++_0x3c8fb6);}(_0x9e49,0x18e));var _0x99e4=function(_0x50ddef,_0x18fb38){_0x50ddef=_0x50ddef-0x0;var _0x8c2f67=_0x9e49[_0x50ddef];return _0x8c2f67;};'use strict';var _=require(_0x99e4('0x0'));var util=require(_0x99e4('0x1'));var logger=require(_0x99e4('0x2'))(_0x99e4('0x3'));var moment=require(_0x99e4('0x4'));var BPromise=require('bluebird');var rp=require(_0x99e4('0x5'));var attributes=require(_0x99e4('0x6'));module[_0x99e4('0x7')]=function(_0x35c91a,_0x5a5e15){return _0x35c91a[_0x99e4('0x8')]('VoiceTransferReport',attributes,{'tableName':_0x99e4('0x9'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
+var _0x794a=['define','report_call_transfer','lodash','util','../../config/logger','moment','request-promise','exports'];(function(_0x2a4d0c,_0x3d8276){var _0x1776e0=function(_0x538c3e){while(--_0x538c3e){_0x2a4d0c['push'](_0x2a4d0c['shift']());}};_0x1776e0(++_0x3d8276);}(_0x794a,0xda));var _0xa794=function(_0x4d3e56,_0x273539){_0x4d3e56=_0x4d3e56-0x0;var _0x205a49=_0x794a[_0x4d3e56];return _0x205a49;};'use strict';var _=require(_0xa794('0x0'));var util=require(_0xa794('0x1'));var logger=require(_0xa794('0x2'))('api');var moment=require(_0xa794('0x3'));var BPromise=require('bluebird');var rp=require(_0xa794('0x4'));var attributes=require('./voiceTransferReport.attributes');module[_0xa794('0x5')]=function(_0x44d086,_0x1646c7){return _0x44d086[_0xa794('0x6')]('VoiceTransferReport',attributes,{'tableName':_0xa794('0x7'),'paranoid':![],'indexes':[],'timestamps':!![]});};
\ No newline at end of file
index eb44e7e..c23f0d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x121f=['info','catch','CreateVoiceTransferReport','VoiceTransferReport','create','body','options','raw','stringify','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','../../config/environment','jayson/promise','client','http','request','then','VoiceTransferReport,\x20%s,\x20%s','debug','VoiceTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','code','message'];(function(_0x2e5640,_0x54d6ba){var _0x3dbca1=function(_0x102fd0){while(--_0x102fd0){_0x2e5640['push'](_0x2e5640['shift']());}};_0x3dbca1(++_0x54d6ba);}(_0x121f,0x165));var _0xf121=function(_0x358806,_0x322b66){_0x358806=_0x358806-0x0;var _0x19fdcb=_0x121f[_0x358806];return _0x19fdcb;};'use strict';var _=require(_0xf121('0x0'));var util=require(_0xf121('0x1'));var moment=require('moment');var BPromise=require(_0xf121('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0xf121('0x3'));var db=require(_0xf121('0x4'))['db'];var utils=require(_0xf121('0x5'));var logger=require(_0xf121('0x6'))('rpc');var config=require(_0xf121('0x7'));var jayson=require(_0xf121('0x8'));var client=jayson[_0xf121('0x9')][_0xf121('0xa')]({'port':0x232a});function respondWithRpcPromise(_0x383d82,_0x505edc,_0x2959dc){return new BPromise(function(_0x836d67,_0x2e4676){return client[_0xf121('0xb')](_0x383d82,_0x2959dc)[_0xf121('0xc')](function(_0x2a40de){logger['info'](_0xf121('0xd'),_0x505edc,'request\x20sent');logger[_0xf121('0xe')](_0xf121('0xf'),_0x505edc,_0xf121('0x10'),JSON['stringify'](_0x2a40de));if(_0x2a40de[_0xf121('0x11')]){if(_0x2a40de[_0xf121('0x11')][_0xf121('0x12')]===0x1f4){logger[_0xf121('0x11')](_0xf121('0xd'),_0x505edc,_0x2a40de[_0xf121('0x11')][_0xf121('0x13')]);return _0x2e4676(_0x2a40de[_0xf121('0x11')][_0xf121('0x13')]);}logger['error']('VoiceTransferReport,\x20%s,\x20%s',_0x505edc,_0x2a40de['error'][_0xf121('0x13')]);return _0x836d67(_0x2a40de['error'][_0xf121('0x13')]);}else{logger[_0xf121('0x14')](_0xf121('0xd'),_0x505edc,_0xf121('0x10'));_0x836d67(_0x2a40de['result'][_0xf121('0x13')]);}})[_0xf121('0x15')](function(_0x2bb228){logger[_0xf121('0x11')](_0xf121('0xd'),_0x505edc,_0x2bb228);_0x2e4676(_0x2bb228);});});}exports[_0xf121('0x16')]=function(_0x3c506){var _0x46220b=this;return new Promise(function(_0x441bc0,_0x298b48){return db[_0xf121('0x17')][_0xf121('0x18')](_0x3c506[_0xf121('0x19')],{'raw':_0x3c506[_0xf121('0x1a')]?_0x3c506['options'][_0xf121('0x1b')]===undefined?!![]:![]:!![]})[_0xf121('0xc')](function(_0x23e19d){logger[_0xf121('0x14')](_0xf121('0x16'),_0x3c506);logger[_0xf121('0xe')](_0xf121('0x16'),_0x3c506,JSON[_0xf121('0x1c')](_0x23e19d));_0x441bc0(_0x23e19d);})['catch'](function(_0x47680f){logger[_0xf121('0x11')]('CreateVoiceTransferReport',_0x47680f[_0xf121('0x13')],_0x3c506);_0x298b48(_0x46220b[_0xf121('0x11')](0x1f4,_0x47680f[_0xf121('0x13')]));});});};
\ No newline at end of file
+var _0xb4c5=['VoiceTransferReport,\x20%s,\x20%s','message','catch','CreateVoiceTransferReport','VoiceTransferReport','create','body','options','raw','stringify','lodash','util','bluebird','ioredis','../../mysqldb','../../config/utils','../../config/logger','jayson/promise','client','http','then','info','debug','VoiceTransferReport,\x20%s,\x20%s,\x20%s','request\x20sent','error','code'];(function(_0x4990d5,_0xe2c486){var _0x275e25=function(_0x4de73e){while(--_0x4de73e){_0x4990d5['push'](_0x4990d5['shift']());}};_0x275e25(++_0xe2c486);}(_0xb4c5,0x76));var _0x5b4c=function(_0x876af3,_0x48e5e0){_0x876af3=_0x876af3-0x0;var _0x160520=_0xb4c5[_0x876af3];return _0x160520;};'use strict';var _=require(_0x5b4c('0x0'));var util=require(_0x5b4c('0x1'));var moment=require('moment');var BPromise=require(_0x5b4c('0x2'));var rs=require('randomstring');var fs=require('fs');var Redis=require(_0x5b4c('0x3'));var db=require(_0x5b4c('0x4'))['db'];var utils=require(_0x5b4c('0x5'));var logger=require(_0x5b4c('0x6'))('rpc');var config=require('../../config/environment');var jayson=require(_0x5b4c('0x7'));var client=jayson[_0x5b4c('0x8')][_0x5b4c('0x9')]({'port':0x232a});function respondWithRpcPromise(_0x52a07a,_0x3c3555,_0x562f27){return new BPromise(function(_0x2dfe9d,_0x222dba){return client['request'](_0x52a07a,_0x562f27)[_0x5b4c('0xa')](function(_0x26a69c){logger[_0x5b4c('0xb')]('VoiceTransferReport,\x20%s,\x20%s',_0x3c3555,'request\x20sent');logger[_0x5b4c('0xc')](_0x5b4c('0xd'),_0x3c3555,_0x5b4c('0xe'),JSON['stringify'](_0x26a69c));if(_0x26a69c[_0x5b4c('0xf')]){if(_0x26a69c['error'][_0x5b4c('0x10')]===0x1f4){logger[_0x5b4c('0xf')](_0x5b4c('0x11'),_0x3c3555,_0x26a69c['error']['message']);return _0x222dba(_0x26a69c['error'][_0x5b4c('0x12')]);}logger[_0x5b4c('0xf')](_0x5b4c('0x11'),_0x3c3555,_0x26a69c[_0x5b4c('0xf')][_0x5b4c('0x12')]);return _0x2dfe9d(_0x26a69c[_0x5b4c('0xf')][_0x5b4c('0x12')]);}else{logger[_0x5b4c('0xb')](_0x5b4c('0x11'),_0x3c3555,_0x5b4c('0xe'));_0x2dfe9d(_0x26a69c['result'][_0x5b4c('0x12')]);}})[_0x5b4c('0x13')](function(_0x1a7a65){logger[_0x5b4c('0xf')](_0x5b4c('0x11'),_0x3c3555,_0x1a7a65);_0x222dba(_0x1a7a65);});});}exports[_0x5b4c('0x14')]=function(_0xd07624){var _0x4bb389=this;return new Promise(function(_0x1da1a8,_0x4f9264){return db[_0x5b4c('0x15')][_0x5b4c('0x16')](_0xd07624[_0x5b4c('0x17')],{'raw':_0xd07624[_0x5b4c('0x18')]?_0xd07624[_0x5b4c('0x18')][_0x5b4c('0x19')]===undefined?!![]:![]:!![]})[_0x5b4c('0xa')](function(_0x590fe3){logger['info'](_0x5b4c('0x14'),_0xd07624);logger['debug'](_0x5b4c('0x14'),_0xd07624,JSON[_0x5b4c('0x1a')](_0x590fe3));_0x1da1a8(_0x590fe3);})[_0x5b4c('0x13')](function(_0x541f49){logger[_0x5b4c('0xf')](_0x5b4c('0x14'),_0x541f49[_0x5b4c('0x12')],_0xd07624);_0x4f9264(_0x4bb389[_0x5b4c('0xf')](0x1f4,_0x541f49[_0x5b4c('0x12')]));});});};
\ No newline at end of file
index a5eba3e..1b15547 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d3f=['default','./config/license','catch','exit','./mysqldb','./rpc','./config/environment','./config/logger','./config/pm2','./config/pm2/config','./config/schedule','./config/schedule/chat','sync','then','start','info','Online\x20apps:','map','filter','online','name','Offline\x20apps:','status','None','seedDB'];(function(_0x2ae8d6,_0x4d7876){var _0x3d5145=function(_0x3c3638){while(--_0x3c3638){_0x2ae8d6['push'](_0x2ae8d6['shift']());}};_0x3d5145(++_0x4d7876);}(_0x4d3f,0x17b));var _0xf4d3=function(_0x2c1cf7,_0x3923eb){_0x2c1cf7=_0x2c1cf7-0x0;var _0x4c13eb=_0x4d3f[_0x2c1cf7];return _0x4c13eb;};'use strict';var _=require('lodash');var mysqldb=require(_0xf4d3('0x0'));var rpc=require(_0xf4d3('0x1'));var config=require(_0xf4d3('0x2'));var logger=require(_0xf4d3('0x3'))('app');var pm2=require(_0xf4d3('0x4'));var pm2Config=require(_0xf4d3('0x5'));var schedule=require(_0xf4d3('0x6'));var chat=require(_0xf4d3('0x7'));function main(){return mysqldb['db']['sequelize'][_0xf4d3('0x8')]()['then'](function(){return rpc['listen']();})[_0xf4d3('0x9')](function(_0x34b6d4){logger['info'](_0x34b6d4);return chat[_0xf4d3('0xa')]();})[_0xf4d3('0x9')](function(){return schedule[_0xf4d3('0xa')]();})[_0xf4d3('0x9')](function(_0x1b8917){logger[_0xf4d3('0xb')](_0x1b8917);return pm2['start'](pm2Config);})[_0xf4d3('0x9')](function(_0x1467c8){logger[_0xf4d3('0xb')](_0xf4d3('0xc'),_[_0xf4d3('0xd')](_[_0xf4d3('0xe')](_0x1467c8,{'status':_0xf4d3('0xf')}),_0xf4d3('0x10'))['join']());logger[_0xf4d3('0xb')](_0xf4d3('0x11'),_[_0xf4d3('0xd')](_[_0xf4d3('0xe')](_0x1467c8,function(_0xed5f44){return _0xed5f44[_0xf4d3('0x12')]!==_0xf4d3('0xf');}),_0xf4d3('0x10'))['join']()||_0xf4d3('0x13'));config[_0xf4d3('0x14')]&&require('./config/seedDB')[_0xf4d3('0x15')]();require(_0xf4d3('0x16'))[_0xf4d3('0x15')]();})[_0xf4d3('0x17')](function(_0x30f654){logger['error']('Server\x20failed\x20to\x20start\x20due\x20to\x20error:\x20%s',_0x30f654);process[_0xf4d3('0x18')](0x1);});}main();
\ No newline at end of file
+var _0x88a5=['Offline\x20apps:','status','None','seedDB','./config/seedDB','default','./config/license','Server\x20failed\x20to\x20start\x20due\x20to\x20error:\x20%s','exit','lodash','./mysqldb','./config/environment','./config/logger','app','./config/schedule','./config/schedule/chat','sequelize','sync','then','info','start','Online\x20apps:','map','filter','online','name','join'];(function(_0x59f41d,_0x3b2543){var _0x16fb2e=function(_0x38ebce){while(--_0x38ebce){_0x59f41d['push'](_0x59f41d['shift']());}};_0x16fb2e(++_0x3b2543);}(_0x88a5,0xfc));var _0x588a=function(_0x29b609,_0x19d388){_0x29b609=_0x29b609-0x0;var _0x54c952=_0x88a5[_0x29b609];return _0x54c952;};'use strict';var _=require(_0x588a('0x0'));var mysqldb=require(_0x588a('0x1'));var rpc=require('./rpc');var config=require(_0x588a('0x2'));var logger=require(_0x588a('0x3'))(_0x588a('0x4'));var pm2=require('./config/pm2');var pm2Config=require('./config/pm2/config');var schedule=require(_0x588a('0x5'));var chat=require(_0x588a('0x6'));function main(){return mysqldb['db'][_0x588a('0x7')][_0x588a('0x8')]()[_0x588a('0x9')](function(){return rpc['listen']();})[_0x588a('0x9')](function(_0x283475){logger[_0x588a('0xa')](_0x283475);return chat[_0x588a('0xb')]();})['then'](function(){return schedule[_0x588a('0xb')]();})[_0x588a('0x9')](function(_0x6aaf3a){logger[_0x588a('0xa')](_0x6aaf3a);return pm2['start'](pm2Config);})[_0x588a('0x9')](function(_0x34cf9f){logger[_0x588a('0xa')](_0x588a('0xc'),_[_0x588a('0xd')](_[_0x588a('0xe')](_0x34cf9f,{'status':_0x588a('0xf')}),_0x588a('0x10'))[_0x588a('0x11')]());logger[_0x588a('0xa')](_0x588a('0x12'),_[_0x588a('0xd')](_[_0x588a('0xe')](_0x34cf9f,function(_0x14da43){return _0x14da43[_0x588a('0x13')]!==_0x588a('0xf');}),'name')[_0x588a('0x11')]()||_0x588a('0x14'));config[_0x588a('0x15')]&&require(_0x588a('0x16'))[_0x588a('0x17')]();require(_0x588a('0x18'))[_0x588a('0x17')]();})['catch'](function(_0x4ff64f){logger['error'](_0x588a('0x19'),_0x4ff64f);process[_0x588a('0x1a')](0x1);});}main();
\ No newline at end of file
index 842163e..473d13f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ad1=['log','Unrecognized\x20API\x20access\x20key','User\x20not\x20found.','User\x20object\x20not\x20found.','../../config/license/util','getLicense','update','Forbidden','canUpdate','sign','signToken','userRoles','indexOf','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','motion.token','pick','redirect','retrieveApiKey','isNil','randomBytes','toString','hex','apiKeyIat','floor','regenerateApiKey','HS512','../../mysqldb','../../config/license/hardware','lodash','jsonwebtoken','express-jwt','composable-middleware','basic-auth','crypto','ipaddr.js','secrets','session','role','fullname','name','email','userpic','permissions','voicePause','chatPause','mailPause','faxPause','smsPause','pauseType','showWebBar','phoneBarRemoteControlPort','isChatInteractionAuthorized','use','user','params','closed','disposition','then','unmanaged','json','Forbidden.','catch','headers','authorization','Basic','User','authenticate','pass','status','startsWith','Unknown\x20authorization\x20format','query','verify','apikey','getUuid','find','sub','isEqual','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore'];(function(_0x38e7d8,_0x26a593){var _0x15893b=function(_0x57186f){while(--_0x57186f){_0x38e7d8['push'](_0x38e7d8['shift']());}};_0x15893b(++_0x26a593);}(_0x6ad1,0x111));var _0x16ad=function(_0x37977b,_0x339a06){_0x37977b=_0x37977b-0x0;var _0x3cdebd=_0x6ad1[_0x37977b];return _0x3cdebd;};'use strict';var db=require(_0x16ad('0x0'))['db'];var config=require('../../config/environment');var hardwareConf=require(_0x16ad('0x1'));var _=require(_0x16ad('0x2'));var jwt=require(_0x16ad('0x3'));var expressJwt=require(_0x16ad('0x4'));var compose=require(_0x16ad('0x5'));var basicAuth=require(_0x16ad('0x6'));var crypto=require(_0x16ad('0x7'));var ipaddr=require(_0x16ad('0x8'));var validateJwt=expressJwt({'secret':config[_0x16ad('0x9')][_0x16ad('0xa')]});var userAttributes=['id',_0x16ad('0xb'),_0x16ad('0xc'),_0x16ad('0xd'),'internal',_0x16ad('0xe'),_0x16ad('0xf'),_0x16ad('0x10'),_0x16ad('0x11'),_0x16ad('0x12'),_0x16ad('0x13'),_0x16ad('0x14'),_0x16ad('0x15'),'openchannelPause',_0x16ad('0x16'),_0x16ad('0x17'),_0x16ad('0x18'),'phoneBarRemoteControl','interface','userProfileId'];exports[_0x16ad('0x19')]=function(){return isAuthenticated(!![])[_0x16ad('0x1a')](function(_0x43f94b,_0x14eb8d,_0x2d5d63){if(_0x43f94b[_0x16ad('0x1b')]){_0x2d5d63();}else{return db['ChatInteraction']['findOne']({'where':{'id':_0x43f94b[_0x16ad('0x1c')]['id']},'attributes':['id',_0x16ad('0x1d'),_0x16ad('0x1e')],'raw':!![]})[_0x16ad('0x1f')](function(_0x3e2dcf){if(_0x3e2dcf&&_0x3e2dcf['closed']){return _0x14eb8d['status'](_0x3e2dcf[_0x16ad('0x1e')]===_0x16ad('0x20')?0x195:0x193)[_0x16ad('0x21')]({'message':_0x3e2dcf['disposition']==='unmanaged'?'Unmanaged.':_0x16ad('0x22')});}else{_0x2d5d63();}})[_0x16ad('0x23')](function(_0x4dc5cf){_0x2d5d63(_0x4dc5cf);});}});};function isAuthenticated(_0x5f2b62){return compose()[_0x16ad('0x1a')](function(_0x3b6803,_0x324a42,_0x2d035c){if(_0x3b6803[_0x16ad('0x24')][_0x16ad('0x25')]){if(_['startsWith'](_0x3b6803['headers']['authorization'],_0x16ad('0x26'))){var _0x138a38=basicAuth(_0x3b6803);db[_0x16ad('0x27')]['find']({'where':{'name':_0x138a38[_0x16ad('0xd')]}})[_0x16ad('0x1f')](function(_0x4fd70d){if(!_0x4fd70d||!_0x4fd70d[_0x16ad('0x28')](_0x138a38[_0x16ad('0x29')])){return _0x324a42[_0x16ad('0x2a')](0x191)[_0x16ad('0x21')]({'message':'Wrong\x20credentials.'});}_0x3b6803[_0x16ad('0x1b')]={'id':_0x4fd70d['id']};_0x2d035c();})['catch'](function(_0x493c3f){_0x2d035c(_0x493c3f);});}else if(_[_0x16ad('0x2b')](_0x3b6803[_0x16ad('0x24')][_0x16ad('0x25')],'Bearer')){validateJwt(_0x3b6803,_0x324a42,_0x2d035c);}else{if(_0x5f2b62){_0x2d035c();}else{return _0x324a42['status'](0x193)['json']({'message':_0x16ad('0x2c')});}}}else if(_0x3b6803[_0x16ad('0x2d')]['apikey']){try{var _0x33a6ff=jwt[_0x16ad('0x2e')](_0x3b6803[_0x16ad('0x2d')][_0x16ad('0x2f')],config[_0x16ad('0x9')][_0x16ad('0xa')],{'audience':hardwareConf[_0x16ad('0x30')](),'issuer':hardwareConf[_0x16ad('0x30')]()});db[_0x16ad('0x27')][_0x16ad('0x31')]({'where':{'id':_0x33a6ff[_0x16ad('0x32')]}})[_0x16ad('0x1f')](function(_0x5b3279){if(!_0x5b3279||!_[_0x16ad('0x33')](_0x5b3279[_0x16ad('0x34')],_0x33a6ff[_0x16ad('0x35')])){return _0x324a42[_0x16ad('0x2a')](0x193)['json']({'message':_0x16ad('0x36')});}_0x3b6803['user']={'id':_0x5b3279['id']};_0x2d035c();})['catch'](function(_0x174eb1){_0x2d035c(_0x174eb1);});}catch(_0x4f7103){console[_0x16ad('0x37')](_0x4f7103);return _0x324a42[_0x16ad('0x2a')](0x193)['json']({'message':_0x16ad('0x38')});}}else if(_0x5f2b62){_0x2d035c();}else{return _0x324a42[_0x16ad('0x2a')](0x193)['json']({'message':_0x16ad('0x2c')});}})[_0x16ad('0x1a')](function(_0x4f8fcf,_0x15eb5a,_0x2b1a7c){if(_0x4f8fcf[_0x16ad('0x1b')]){db['User']['find']({'where':{'id':_0x4f8fcf[_0x16ad('0x1b')]['id']},'attributes':userAttributes})[_0x16ad('0x1f')](function(_0x374c24){if(!_0x374c24){return _0x15eb5a[_0x16ad('0x2a')](0x194)[_0x16ad('0x21')]({'message':_0x16ad('0x39')});}_0x4f8fcf[_0x16ad('0x1b')]=_0x374c24;_0x2b1a7c();})[_0x16ad('0x23')](function(_0x453f1e){_0x2b1a7c(_0x453f1e);});}else if(_0x5f2b62){_0x2b1a7c();}else{return _0x15eb5a['status'](0x194)[_0x16ad('0x21')]({'message':_0x16ad('0x3a')});}});}exports['isAuthenticated']=isAuthenticated;function canUpdate(){return compose()[_0x16ad('0x1a')](function(_0x43dff8,_0x24b75b,_0x8fec26){return require(_0x16ad('0x3b'))[_0x16ad('0x3c')]()[_0x16ad('0x1f')](function(_0xf186b5){if(_0xf186b5[_0x16ad('0x3d')]){_0x8fec26();}else{return _0x24b75b[_0x16ad('0x2a')](0x193)[_0x16ad('0x21')]({'message':_0x16ad('0x3e')});}})[_0x16ad('0x23')](function(_0xe319c7){_0x8fec26(_0xe319c7);});});}exports[_0x16ad('0x3f')]=canUpdate;function signToken(_0x50b936,_0x45069f){return jwt[_0x16ad('0x40')]({'id':_0x50b936,'role':_0x45069f},config['secrets']['session'],{'expiresIn':0x15180});}exports[_0x16ad('0x41')]=signToken;exports['hasRole']=function(_0x3c7f80){if(!_0x3c7f80){throw new Error('Required\x20role\x20needs\x20to\x20be\x20set');}return compose()[_0x16ad('0x1a')](isAuthenticated())['use'](function meetsRequirements(_0x179a4d,_0x50ec66,_0x3546d3){if(config[_0x16ad('0x42')][_0x16ad('0x43')](_0x179a4d[_0x16ad('0x1b')][_0x16ad('0xb')])>=config[_0x16ad('0x42')][_0x16ad('0x43')](_0x3c7f80)){return _0x3546d3();}else{return _0x50ec66[_0x16ad('0x2a')](0x193)[_0x16ad('0x21')]({'message':'Forbidden'});}});};exports['setTokenCookie']=function(_0x209d84,_0x37a17f){if(!_0x209d84[_0x16ad('0x1b')]){return _0x37a17f['status'](0x194)[_0x16ad('0x21')]({'message':_0x16ad('0x44')});}var _0x382313=signToken(_0x209d84[_0x16ad('0x1b')]['id'],_0x209d84[_0x16ad('0x1b')][_0x16ad('0xb')]);_0x37a17f[_0x16ad('0x45')](_0x16ad('0x46'),_0x382313);_0x37a17f['cookie']('motion.user',JSON['stringify'](_[_0x16ad('0x47')](_0x209d84[_0x16ad('0x1b')],userAttributes)));_0x37a17f[_0x16ad('0x48')]('/dashboards/general');};exports[_0x16ad('0x49')]=function(_0x46e3b7){if(_[_0x16ad('0x4a')](_0x46e3b7[_0x16ad('0x34')])||_[_0x16ad('0x4a')](_0x46e3b7['apiKeyIat']))return null;else return createJwt(_0x46e3b7);};exports['generateApiKey']=function(_0x241b99){_0x241b99[_0x16ad('0x34')]=crypto[_0x16ad('0x4b')](0x10)[_0x16ad('0x4c')](_0x16ad('0x4d'));_0x241b99[_0x16ad('0x4e')]=Math[_0x16ad('0x4f')](Date['now']()/0x3e8)[_0x16ad('0x4c')]();return createJwt(_0x241b99);};exports[_0x16ad('0x50')]=function(_0x23fbc0,_0x475578){if(_0x23fbc0['query'][_0x16ad('0x2f')]){jwt[_0x16ad('0x2e')](_0x23fbc0[_0x16ad('0x2d')]['apikey'],config[_0x16ad('0x9')]['session'],{'nonce':_0x475578[_0x16ad('0x34')],'iat':_0x475578[_0x16ad('0x4e')],'audience':hardwareConf['getUuid'](),'issuer':hardwareConf[_0x16ad('0x30')]()});return generateApiKey(_0x475578);}else{throw{'message':'Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one'};}};function createJwt(_0x335cbe){return jwt['sign']({'iat':_0x335cbe[_0x16ad('0x4e')],'nonce':_0x335cbe[_0x16ad('0x34')]},config[_0x16ad('0x9')][_0x16ad('0xa')],{'algorithm':_0x16ad('0x51'),'subject':_0x335cbe['id'][_0x16ad('0x4c')](),'issuer':hardwareConf['getUuid'](),'audience':hardwareConf[_0x16ad('0x30')]()});}
\ No newline at end of file
+var _0x4207=['retrieveApiKey','isNil','generateApiKey','randomBytes','toString','hex','floor','now','regenerateApiKey','sign','apiKeyIat','HS512','../../mysqldb','../../config/environment','jsonwebtoken','express-jwt','basic-auth','ipaddr.js','secrets','fullname','internal','email','userpic','permissions','voicePause','chatPause','mailPause','smsPause','openchannelPause','pauseType','phoneBarRemoteControlPort','phoneBarRemoteControl','interface','userProfileId','isChatInteractionAuthorized','use','user','ChatInteraction','findOne','params','closed','then','status','unmanaged','json','disposition','Unmanaged.','Forbidden.','catch','headers','authorization','Basic','User','authenticate','pass','Wrong\x20credentials.','startsWith','Unknown\x20authorization\x20format','query','apikey','verify','session','getUuid','find','sub','apiKeyNonce','nonce','API\x20access\x20key\x20is\x20not\x20valid\x20anymore','log','Unrecognized\x20API\x20access\x20key','User\x20not\x20found.','User\x20object\x20not\x20found.','isAuthenticated','../../config/license/util','getLicense','update','Forbidden','canUpdate','signToken','hasRole','Required\x20role\x20needs\x20to\x20be\x20set','userRoles','indexOf','setTokenCookie','It\x20looks\x20like\x20you\x20aren\x27t\x20logged\x20in,\x20please\x20try\x20again.','cookie','motion.token','motion.user','stringify','pick','redirect'];(function(_0x5f25b3,_0x35481a){var _0x4ab9bf=function(_0x49baf7){while(--_0x49baf7){_0x5f25b3['push'](_0x5f25b3['shift']());}};_0x4ab9bf(++_0x35481a);}(_0x4207,0x1d3));var _0x7420=function(_0x1facfa,_0x1acf7d){_0x1facfa=_0x1facfa-0x0;var _0x9ec701=_0x4207[_0x1facfa];return _0x9ec701;};'use strict';var db=require(_0x7420('0x0'))['db'];var config=require(_0x7420('0x1'));var hardwareConf=require('../../config/license/hardware');var _=require('lodash');var jwt=require(_0x7420('0x2'));var expressJwt=require(_0x7420('0x3'));var compose=require('composable-middleware');var basicAuth=require(_0x7420('0x4'));var crypto=require('crypto');var ipaddr=require(_0x7420('0x5'));var validateJwt=expressJwt({'secret':config[_0x7420('0x6')]['session']});var userAttributes=['id','role',_0x7420('0x7'),'name',_0x7420('0x8'),_0x7420('0x9'),_0x7420('0xa'),_0x7420('0xb'),_0x7420('0xc'),_0x7420('0xd'),_0x7420('0xe'),'faxPause',_0x7420('0xf'),_0x7420('0x10'),_0x7420('0x11'),'showWebBar',_0x7420('0x12'),_0x7420('0x13'),_0x7420('0x14'),_0x7420('0x15')];exports[_0x7420('0x16')]=function(){return isAuthenticated(!![])[_0x7420('0x17')](function(_0x202903,_0xa4638a,_0x2a1f43){if(_0x202903[_0x7420('0x18')]){_0x2a1f43();}else{return db[_0x7420('0x19')][_0x7420('0x1a')]({'where':{'id':_0x202903[_0x7420('0x1b')]['id']},'attributes':['id',_0x7420('0x1c'),'disposition'],'raw':!![]})[_0x7420('0x1d')](function(_0x12cfd3){if(_0x12cfd3&&_0x12cfd3[_0x7420('0x1c')]){return _0xa4638a[_0x7420('0x1e')](_0x12cfd3['disposition']===_0x7420('0x1f')?0x195:0x193)[_0x7420('0x20')]({'message':_0x12cfd3[_0x7420('0x21')]===_0x7420('0x1f')?_0x7420('0x22'):_0x7420('0x23')});}else{_0x2a1f43();}})[_0x7420('0x24')](function(_0x5b57a5){_0x2a1f43(_0x5b57a5);});}});};function isAuthenticated(_0x5e9bea){return compose()[_0x7420('0x17')](function(_0x34e64c,_0x108053,_0x4e14e7){if(_0x34e64c[_0x7420('0x25')][_0x7420('0x26')]){if(_['startsWith'](_0x34e64c['headers'][_0x7420('0x26')],_0x7420('0x27'))){var _0x490d6d=basicAuth(_0x34e64c);db[_0x7420('0x28')]['find']({'where':{'name':_0x490d6d['name']}})['then'](function(_0x2f362b){if(!_0x2f362b||!_0x2f362b[_0x7420('0x29')](_0x490d6d[_0x7420('0x2a')])){return _0x108053[_0x7420('0x1e')](0x191)[_0x7420('0x20')]({'message':_0x7420('0x2b')});}_0x34e64c[_0x7420('0x18')]={'id':_0x2f362b['id']};_0x4e14e7();})[_0x7420('0x24')](function(_0x24c2d8){_0x4e14e7(_0x24c2d8);});}else if(_[_0x7420('0x2c')](_0x34e64c[_0x7420('0x25')][_0x7420('0x26')],'Bearer')){validateJwt(_0x34e64c,_0x108053,_0x4e14e7);}else{if(_0x5e9bea){_0x4e14e7();}else{return _0x108053[_0x7420('0x1e')](0x193)[_0x7420('0x20')]({'message':_0x7420('0x2d')});}}}else if(_0x34e64c[_0x7420('0x2e')][_0x7420('0x2f')]){try{var _0x5dbc96=jwt[_0x7420('0x30')](_0x34e64c[_0x7420('0x2e')]['apikey'],config[_0x7420('0x6')][_0x7420('0x31')],{'audience':hardwareConf['getUuid'](),'issuer':hardwareConf[_0x7420('0x32')]()});db[_0x7420('0x28')][_0x7420('0x33')]({'where':{'id':_0x5dbc96[_0x7420('0x34')]}})[_0x7420('0x1d')](function(_0x235eeb){if(!_0x235eeb||!_['isEqual'](_0x235eeb[_0x7420('0x35')],_0x5dbc96[_0x7420('0x36')])){return _0x108053[_0x7420('0x1e')](0x193)['json']({'message':_0x7420('0x37')});}_0x34e64c[_0x7420('0x18')]={'id':_0x235eeb['id']};_0x4e14e7();})[_0x7420('0x24')](function(_0xb40007){_0x4e14e7(_0xb40007);});}catch(_0x7a52f){console[_0x7420('0x38')](_0x7a52f);return _0x108053[_0x7420('0x1e')](0x193)[_0x7420('0x20')]({'message':_0x7420('0x39')});}}else if(_0x5e9bea){_0x4e14e7();}else{return _0x108053[_0x7420('0x1e')](0x193)['json']({'message':_0x7420('0x2d')});}})[_0x7420('0x17')](function(_0x76dc35,_0x14db8d,_0x5e99cd){if(_0x76dc35['user']){db[_0x7420('0x28')][_0x7420('0x33')]({'where':{'id':_0x76dc35[_0x7420('0x18')]['id']},'attributes':userAttributes})[_0x7420('0x1d')](function(_0x76478f){if(!_0x76478f){return _0x14db8d[_0x7420('0x1e')](0x194)[_0x7420('0x20')]({'message':_0x7420('0x3a')});}_0x76dc35['user']=_0x76478f;_0x5e99cd();})['catch'](function(_0x4e72e3){_0x5e99cd(_0x4e72e3);});}else if(_0x5e9bea){_0x5e99cd();}else{return _0x14db8d[_0x7420('0x1e')](0x194)[_0x7420('0x20')]({'message':_0x7420('0x3b')});}});}exports[_0x7420('0x3c')]=isAuthenticated;function canUpdate(){return compose()[_0x7420('0x17')](function(_0xa591a3,_0x22a5de,_0x4b7fbe){return require(_0x7420('0x3d'))[_0x7420('0x3e')]()[_0x7420('0x1d')](function(_0x4f74c4){if(_0x4f74c4[_0x7420('0x3f')]){_0x4b7fbe();}else{return _0x22a5de[_0x7420('0x1e')](0x193)[_0x7420('0x20')]({'message':_0x7420('0x40')});}})['catch'](function(_0xa10e2e){_0x4b7fbe(_0xa10e2e);});});}exports[_0x7420('0x41')]=canUpdate;function signToken(_0x23a0be,_0x150f2b){return jwt['sign']({'id':_0x23a0be,'role':_0x150f2b},config[_0x7420('0x6')][_0x7420('0x31')],{'expiresIn':0x15180});}exports[_0x7420('0x42')]=signToken;exports[_0x7420('0x43')]=function(_0x37ed49){if(!_0x37ed49){throw new Error(_0x7420('0x44'));}return compose()[_0x7420('0x17')](isAuthenticated())[_0x7420('0x17')](function meetsRequirements(_0x557a6e,_0x45b35d,_0x42ac38){if(config[_0x7420('0x45')][_0x7420('0x46')](_0x557a6e['user']['role'])>=config[_0x7420('0x45')][_0x7420('0x46')](_0x37ed49)){return _0x42ac38();}else{return _0x45b35d[_0x7420('0x1e')](0x193)[_0x7420('0x20')]({'message':_0x7420('0x40')});}});};exports[_0x7420('0x47')]=function(_0x1b3aa3,_0x31fb09){if(!_0x1b3aa3[_0x7420('0x18')]){return _0x31fb09[_0x7420('0x1e')](0x194)[_0x7420('0x20')]({'message':_0x7420('0x48')});}var _0xe9a46c=signToken(_0x1b3aa3['user']['id'],_0x1b3aa3[_0x7420('0x18')]['role']);_0x31fb09[_0x7420('0x49')](_0x7420('0x4a'),_0xe9a46c);_0x31fb09['cookie'](_0x7420('0x4b'),JSON[_0x7420('0x4c')](_[_0x7420('0x4d')](_0x1b3aa3[_0x7420('0x18')],userAttributes)));_0x31fb09[_0x7420('0x4e')]('/dashboards/general');};exports[_0x7420('0x4f')]=function(_0xe7e676){if(_[_0x7420('0x50')](_0xe7e676[_0x7420('0x35')])||_[_0x7420('0x50')](_0xe7e676['apiKeyIat']))return null;else return createJwt(_0xe7e676);};exports[_0x7420('0x51')]=function(_0x1f0ae7){_0x1f0ae7[_0x7420('0x35')]=crypto[_0x7420('0x52')](0x10)[_0x7420('0x53')](_0x7420('0x54'));_0x1f0ae7['apiKeyIat']=Math[_0x7420('0x55')](Date[_0x7420('0x56')]()/0x3e8)['toString']();return createJwt(_0x1f0ae7);};exports[_0x7420('0x57')]=function(_0x5e41b9,_0x1a8ee7){if(_0x5e41b9[_0x7420('0x2e')]['apikey']){jwt['verify'](_0x5e41b9[_0x7420('0x2e')]['apikey'],config[_0x7420('0x6')][_0x7420('0x31')],{'nonce':_0x1a8ee7[_0x7420('0x35')],'iat':_0x1a8ee7['apiKeyIat'],'audience':hardwareConf['getUuid'](),'issuer':hardwareConf['getUuid']()});return generateApiKey(_0x1a8ee7);}else{throw{'message':'Please\x20use\x20the\x20previous\x20API\x20access\x20key\x20to\x20generate\x20a\x20new\x20one'};}};function createJwt(_0x5ace74){return jwt[_0x7420('0x58')]({'iat':_0x5ace74[_0x7420('0x59')],'nonce':_0x5ace74['apiKeyNonce']},config['secrets'][_0x7420('0x31')],{'algorithm':_0x7420('0x5a'),'subject':_0x5ace74['id']['toString'](),'issuer':hardwareConf[_0x7420('0x32')](),'audience':hardwareConf[_0x7420('0x32')]()});}
\ No newline at end of file
index ece1638..b8d23d8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcad2=['createReadStream','createCipher','algorithm','data','update','binary','end','final','close','unlink','createDecipher','write','crypto','aes192','hasOwnProperty','encryptFile'];(function(_0x1314d4,_0xb0b16d){var _0x584ba5=function(_0x394269){while(--_0x394269){_0x1314d4['push'](_0x1314d4['shift']());}};_0x584ba5(++_0xb0b16d);}(_0xcad2,0x1ec));var _0x2cad=function(_0x4e583d,_0x5522e0){_0x4e583d=_0x4e583d-0x0;var _0x50a263=_0xcad2[_0x4e583d];return _0x50a263;};'use strict';var crypto=require(_0x2cad('0x0'));var fs=require('fs');var BPromise=require('bluebird');var defaultOptions={'algorithm':_0x2cad('0x1')};function combineOptions(_0xa89b15){var _0x52a483={};for(var _0x3799a0 in defaultOptions){if(defaultOptions[_0x2cad('0x2')](_0x3799a0)){_0x52a483[_0x3799a0]=defaultOptions[_0x3799a0];}}if(_0xa89b15){for(var _0x534ead in _0xa89b15){if(_0xa89b15[_0x2cad('0x2')](_0x534ead)){_0x52a483[_0x534ead]=_0xa89b15[_0x534ead];}}}return _0x52a483;}exports[_0x2cad('0x3')]=function(_0x246d1f,_0x334cef,_0x12859f,_0x1a3058){return new BPromise(function(_0x494f76,_0x54f681){_0x1a3058=combineOptions(_0x1a3058);var _0x22ff6a=new Buffer(_0x12859f);var _0x570fee=fs[_0x2cad('0x4')](_0x246d1f);var _0x298aa6=fs['createWriteStream'](_0x334cef);var _0x1515d4=crypto[_0x2cad('0x5')](_0x1a3058[_0x2cad('0x6')],_0x22ff6a);_0x570fee['on'](_0x2cad('0x7'),function(_0xada7a1){var _0x1c3f1b=new Buffer(_0x1515d4[_0x2cad('0x8')](_0xada7a1),_0x2cad('0x9'));_0x298aa6['write'](_0x1c3f1b);});_0x570fee['on'](_0x2cad('0xa'),function(){try{var _0x111a05=new Buffer(_0x1515d4[_0x2cad('0xb')]('binary'),_0x2cad('0x9'));_0x298aa6['write'](_0x111a05);_0x298aa6[_0x2cad('0xa')]();_0x298aa6['on'](_0x2cad('0xc'),function(){return _0x494f76(_0x334cef);});}catch(_0x1722e6){fs[_0x2cad('0xd')](_0x334cef);return _0x54f681(_0x1722e6);}});});};exports['decryptFile']=function(_0x2d277b,_0x1939b9,_0x177069,_0x2bc83d){return new BPromise(function(_0x102c59,_0x12225c){_0x2bc83d=combineOptions(_0x2bc83d);var _0x2fb2bf=new Buffer(_0x177069);var _0xbf0c62=fs['createReadStream'](_0x2d277b);var _0x1edaa0=fs['createWriteStream'](_0x1939b9);var _0x283c25=crypto[_0x2cad('0xe')](_0x2bc83d[_0x2cad('0x6')],_0x2fb2bf);_0xbf0c62['on'](_0x2cad('0x7'),function(_0x2835bd){var _0x3f7dcd=new Buffer(_0x283c25['update'](_0x2835bd),_0x2cad('0x9'));_0x1edaa0[_0x2cad('0xf')](_0x3f7dcd);});_0xbf0c62['on'](_0x2cad('0xa'),function(){try{var _0x379bb9=new Buffer(_0x283c25[_0x2cad('0xb')](_0x2cad('0x9')),'binary');_0x1edaa0['write'](_0x379bb9);_0x1edaa0[_0x2cad('0xa')]();_0x1edaa0['on'](_0x2cad('0xc'),function(){return _0x102c59(_0x1939b9);});}catch(_0x4466d8){fs[_0x2cad('0xd')](_0x1939b9);return _0x12225c(_0x4466d8);}});});};
\ No newline at end of file
+var _0x8b1d=['unlink','createDecipher','algorithm','close','bluebird','aes192','hasOwnProperty','createReadStream','createWriteStream','createCipher','data','update','binary','write','final','end'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x8b1d,0x144));var _0xd8b1=function(_0x255ce8,_0x3243c9){_0x255ce8=_0x255ce8-0x0;var _0x25439e=_0x8b1d[_0x255ce8];return _0x25439e;};'use strict';var crypto=require('crypto');var fs=require('fs');var BPromise=require(_0xd8b1('0x0'));var defaultOptions={'algorithm':_0xd8b1('0x1')};function combineOptions(_0x1d892f){var _0x468d06={};for(var _0x155caa in defaultOptions){if(defaultOptions['hasOwnProperty'](_0x155caa)){_0x468d06[_0x155caa]=defaultOptions[_0x155caa];}}if(_0x1d892f){for(var _0x192c4e in _0x1d892f){if(_0x1d892f[_0xd8b1('0x2')](_0x192c4e)){_0x468d06[_0x192c4e]=_0x1d892f[_0x192c4e];}}}return _0x468d06;}exports['encryptFile']=function(_0x6a7032,_0x1083cd,_0xef421b,_0x1665e4){return new BPromise(function(_0x2214f4,_0x38a763){_0x1665e4=combineOptions(_0x1665e4);var _0x2b88c4=new Buffer(_0xef421b);var _0x336e7c=fs[_0xd8b1('0x3')](_0x6a7032);var _0x440aa6=fs[_0xd8b1('0x4')](_0x1083cd);var _0x218aed=crypto[_0xd8b1('0x5')](_0x1665e4['algorithm'],_0x2b88c4);_0x336e7c['on'](_0xd8b1('0x6'),function(_0x477230){var _0x20f88a=new Buffer(_0x218aed[_0xd8b1('0x7')](_0x477230),_0xd8b1('0x8'));_0x440aa6[_0xd8b1('0x9')](_0x20f88a);});_0x336e7c['on']('end',function(){try{var _0x177e2c=new Buffer(_0x218aed[_0xd8b1('0xa')]('binary'),_0xd8b1('0x8'));_0x440aa6[_0xd8b1('0x9')](_0x177e2c);_0x440aa6[_0xd8b1('0xb')]();_0x440aa6['on']('close',function(){return _0x2214f4(_0x1083cd);});}catch(_0x2a8db2){fs[_0xd8b1('0xc')](_0x1083cd);return _0x38a763(_0x2a8db2);}});});};exports['decryptFile']=function(_0x187663,_0x524831,_0x41d467,_0x34938b){return new BPromise(function(_0xb141a7,_0x275582){_0x34938b=combineOptions(_0x34938b);var _0x4f147e=new Buffer(_0x41d467);var _0xd3b140=fs[_0xd8b1('0x3')](_0x187663);var _0x2f600a=fs[_0xd8b1('0x4')](_0x524831);var _0x32ff57=crypto[_0xd8b1('0xd')](_0x34938b[_0xd8b1('0xe')],_0x4f147e);_0xd3b140['on'](_0xd8b1('0x6'),function(_0x4c5fae){var _0xbf7a6d=new Buffer(_0x32ff57['update'](_0x4c5fae),_0xd8b1('0x8'));_0x2f600a[_0xd8b1('0x9')](_0xbf7a6d);});_0xd3b140['on'](_0xd8b1('0xb'),function(){try{var _0x3e337b=new Buffer(_0x32ff57[_0xd8b1('0xa')](_0xd8b1('0x8')),_0xd8b1('0x8'));_0x2f600a['write'](_0x3e337b);_0x2f600a[_0xd8b1('0xb')]();_0x2f600a['on'](_0xd8b1('0xf'),function(){return _0xb141a7(_0x524831);});}catch(_0x33ea70){fs[_0xd8b1('0xc')](_0x524831);return _0x275582(_0x33ea70);}});});};
\ No newline at end of file
index a40da30..e180c97 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbf26=['dbH','../../config/logger','argv','savename','AnalyticExtractedReport','update','info','format','CSV','Setting','find','splitSizeCsv','then','sequelize','query','QueryTypes','SELECT','num','length','split','push','%s\x20limit\x20%d\x20OFFSET\x20%d','dirname','basename','.csv','existsSync','join','mkdirSync','each','%s%d.%s','csv','%s.%s','writeFileSync','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','Failed','path','lodash','bluebird','zip-dir','rimraf','../../mysqldb'];(function(_0x4243a3,_0x447337){var _0x1b2a33=function(_0x6a8200){while(--_0x6a8200){_0x4243a3['push'](_0x4243a3['shift']());}};_0x1b2a33(++_0x447337);}(_0xbf26,0xdb));var _0x6bf2=function(_0x4ab33e,_0x248170){_0x4ab33e=_0x4ab33e-0x0;var _0x2d0ace=_0xbf26[_0x4ab33e];return _0x2d0ace;};'use strict';var util=require('util');var path=require(_0x6bf2('0x0'));var _=require(_0x6bf2('0x1'));var csv=require('to-csv');var fs=require('fs');var BPromise=require(_0x6bf2('0x2'));var zipdir=require(_0x6bf2('0x3'));var rimraf=require(_0x6bf2('0x4'));var db=require('../../mysqldb')['db'];var dbH=require(_0x6bf2('0x5'))[_0x6bf2('0x6')];var logger=require(_0x6bf2('0x7'))('analytics');var EXTRACTED_REPORT_ID=Number(process['argv'][0x2]);var QUERY=process['argv'][0x3];var PATH=process[_0x6bf2('0x8')][0x4];function analyticExtractedReport(_0x42dbcc,_0x474f54){var _0x10731d={'status':_0x42dbcc};var _0x2bda8e={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x474f54){_0x10731d[_0x6bf2('0x9')]=_0x474f54;}return db[_0x6bf2('0xa')][_0x6bf2('0xb')](_0x10731d,_0x2bda8e);}function main(){var _0x91c4e3=0x1388;var _0x4e8439;logger[_0x6bf2('0xc')](util[_0x6bf2('0xd')]('Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format',EXTRACTED_REPORT_ID,_0x6bf2('0xe')));return db[_0x6bf2('0xf')][_0x6bf2('0x10')]({'where':{'id':0x1},'raw':!![],'attributes':['id','split',_0x6bf2('0x11')]})[_0x6bf2('0x12')](function(_0x4ce318){if(_0x4ce318){_0x4e8439=_0x4ce318;_0x91c4e3=_0x4e8439[_0x6bf2('0x11')]||0x1388;}})[_0x6bf2('0x12')](function(){return dbH[_0x6bf2('0x13')][_0x6bf2('0x14')](util[_0x6bf2('0xd')]('SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t',QUERY),{'type':dbH[_0x6bf2('0x13')][_0x6bf2('0x15')][_0x6bf2('0x16')]});})[_0x6bf2('0x12')](function(_0x5e5bab){if(!_0x5e5bab[0x0][_0x6bf2('0x17')]){return analyticExtractedReport('Empty');}var _0x33f777=[];var _0x47dc41=0x0;var _0x5bf9c3=!![];if(_0x5e5bab&&_0x5e5bab[_0x6bf2('0x18')]){var _0x3233b4=_0x5e5bab[0x0]['num']%(_0x47dc41+_0x91c4e3);if(_0x4e8439[_0x6bf2('0x19')]){for(;_0x5bf9c3;_0x47dc41+=_0x91c4e3,_0x3233b4=_0x5e5bab[0x0][_0x6bf2('0x17')]%(_0x47dc41+_0x91c4e3)){if(_0x3233b4==0x0||_0x3233b4==_0x5e5bab[0x0][_0x6bf2('0x17')]){_0x5bf9c3=![];}_0x33f777[_0x6bf2('0x1a')](dbH['sequelize'][_0x6bf2('0x14')](util[_0x6bf2('0xd')](_0x6bf2('0x1b'),QUERY,_0x91c4e3,_0x47dc41),{'type':dbH[_0x6bf2('0x13')][_0x6bf2('0x15')][_0x6bf2('0x16')]}));}}else{_0x33f777[_0x6bf2('0x1a')](dbH[_0x6bf2('0x13')][_0x6bf2('0x14')](QUERY,{'type':dbH['sequelize'][_0x6bf2('0x15')]['SELECT']}));}}var _0xa0841e=path[_0x6bf2('0x1c')](PATH);var _0x2e8c48=path[_0x6bf2('0x1d')](PATH,_0x6bf2('0x1e'));var _0x2f2115=_0x4e8439['split']&&_0x33f777[_0x6bf2('0x18')]>0x1;var _0x4176f0=[];if(!fs[_0x6bf2('0x1f')](path[_0x6bf2('0x20')](_0xa0841e,_0x2e8c48))&&_0x2f2115){fs[_0x6bf2('0x21')](path[_0x6bf2('0x20')](_0xa0841e,_0x2e8c48));}return BPromise[_0x6bf2('0x22')](_0x33f777,function(_0x4eefab){_0x4176f0[_0x6bf2('0x1a')](_0x4eefab);})[_0x6bf2('0x12')](function(){for(var _0x2e60c9=0x0;_0x2e60c9<_0x4176f0['length'];_0x2e60c9+=0x1){var _0x114f81;var _0x3a96e3=_0x4176f0[_0x2e60c9];if(_0x2f2115){_0x114f81=path[_0x6bf2('0x20')](_0xa0841e,_0x2e8c48,util['format'](_0x6bf2('0x23'),_0x2e8c48,_0x2e60c9,_0x6bf2('0x24')));}else{_0x114f81=path['join'](_0xa0841e,util[_0x6bf2('0xd')](_0x6bf2('0x25'),_0x2e8c48,_0x6bf2('0x24')));}fs[_0x6bf2('0x26')](_0x114f81,csv(_0x3a96e3));}})[_0x6bf2('0x12')](function(){if(_0x2f2115){zipdir(path[_0x6bf2('0x20')](_0xa0841e,_0x2e8c48),{'saveTo':path[_0x6bf2('0x20')](_0xa0841e,util[_0x6bf2('0xd')](_0x6bf2('0x25'),_0x2e8c48,_0x6bf2('0x27')))},function(_0x4b8c93,_0xb4d7ae){});rimraf(path[_0x6bf2('0x20')](_0xa0841e,_0x2e8c48),function(){});}})[_0x6bf2('0x12')](function(){logger['info'](util[_0x6bf2('0xd')](_0x6bf2('0x28'),EXTRACTED_REPORT_ID,_0x6bf2('0xe')));return analyticExtractedReport(_0x6bf2('0x29'),_0x2f2115?util[_0x6bf2('0xd')](_0x6bf2('0x25'),_0x2e8c48,_0x2f2115?_0x6bf2('0x27'):'csv'):null);});})[_0x6bf2('0x2a')](function(_0x51769b){logger[_0x6bf2('0xc')](util[_0x6bf2('0xd')](_0x6bf2('0x2b'),EXTRACTED_REPORT_ID,_0x6bf2('0xe')),util['inspect'](_0x51769b,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0x6bf2('0x2c'));});}main();
\ No newline at end of file
+var _0x5463=['query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','sequelize','QueryTypes','SELECT','num','length','%s\x20limit\x20%d\x20OFFSET\x20%d','push','dirname','.csv','join','mkdirSync','%s%d.%s','csv','%s.%s','writeFileSync','Completed','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','util','path','to-csv','bluebird','zip-dir','rimraf','../../mysqldb','dbH','../../config/logger','analytics','argv','AnalyticExtractedReport','update','info','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','CSV','Setting','find','splitSizeCsv','then'];(function(_0x32bcbb,_0x392f70){var _0x4bd85b=function(_0x559200){while(--_0x559200){_0x32bcbb['push'](_0x32bcbb['shift']());}};_0x4bd85b(++_0x392f70);}(_0x5463,0xb8));var _0x3546=function(_0x322920,_0x5d11cf){_0x322920=_0x322920-0x0;var _0x29bced=_0x5463[_0x322920];return _0x29bced;};'use strict';var util=require(_0x3546('0x0'));var path=require(_0x3546('0x1'));var _=require('lodash');var csv=require(_0x3546('0x2'));var fs=require('fs');var BPromise=require(_0x3546('0x3'));var zipdir=require(_0x3546('0x4'));var rimraf=require(_0x3546('0x5'));var db=require(_0x3546('0x6'))['db'];var dbH=require('../../mysqldb')[_0x3546('0x7')];var logger=require(_0x3546('0x8'))(_0x3546('0x9'));var EXTRACTED_REPORT_ID=Number(process[_0x3546('0xa')][0x2]);var QUERY=process['argv'][0x3];var PATH=process[_0x3546('0xa')][0x4];function analyticExtractedReport(_0x36e3dc,_0x42de47){var _0x478cbe={'status':_0x36e3dc};var _0x228322={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x42de47){_0x478cbe['savename']=_0x42de47;}return db[_0x3546('0xb')][_0x3546('0xc')](_0x478cbe,_0x228322);}function main(){var _0x14d394=0x1388;var _0x2ebdcf;logger[_0x3546('0xd')](util[_0x3546('0xe')](_0x3546('0xf'),EXTRACTED_REPORT_ID,_0x3546('0x10')));return db[_0x3546('0x11')][_0x3546('0x12')]({'where':{'id':0x1},'raw':!![],'attributes':['id','split',_0x3546('0x13')]})[_0x3546('0x14')](function(_0x114401){if(_0x114401){_0x2ebdcf=_0x114401;_0x14d394=_0x2ebdcf[_0x3546('0x13')]||0x1388;}})['then'](function(){return dbH['sequelize'][_0x3546('0x15')](util[_0x3546('0xe')](_0x3546('0x16'),QUERY),{'type':dbH[_0x3546('0x17')][_0x3546('0x18')][_0x3546('0x19')]});})[_0x3546('0x14')](function(_0x22b509){if(!_0x22b509[0x0][_0x3546('0x1a')]){return analyticExtractedReport('Empty');}var _0x1176fe=[];var _0x37c7a9=0x0;var _0xc98bd3=!![];if(_0x22b509&&_0x22b509[_0x3546('0x1b')]){var _0x23003d=_0x22b509[0x0]['num']%(_0x37c7a9+_0x14d394);if(_0x2ebdcf['split']){for(;_0xc98bd3;_0x37c7a9+=_0x14d394,_0x23003d=_0x22b509[0x0]['num']%(_0x37c7a9+_0x14d394)){if(_0x23003d==0x0||_0x23003d==_0x22b509[0x0][_0x3546('0x1a')]){_0xc98bd3=![];}_0x1176fe['push'](dbH['sequelize']['query'](util[_0x3546('0xe')](_0x3546('0x1c'),QUERY,_0x14d394,_0x37c7a9),{'type':dbH[_0x3546('0x17')][_0x3546('0x18')]['SELECT']}));}}else{_0x1176fe[_0x3546('0x1d')](dbH[_0x3546('0x17')]['query'](QUERY,{'type':dbH[_0x3546('0x17')][_0x3546('0x18')][_0x3546('0x19')]}));}}var _0x2318a4=path[_0x3546('0x1e')](PATH);var _0x326845=path['basename'](PATH,_0x3546('0x1f'));var _0x3a1325=_0x2ebdcf['split']&&_0x1176fe['length']>0x1;var _0x304511=[];if(!fs['existsSync'](path[_0x3546('0x20')](_0x2318a4,_0x326845))&&_0x3a1325){fs[_0x3546('0x21')](path[_0x3546('0x20')](_0x2318a4,_0x326845));}return BPromise['each'](_0x1176fe,function(_0x78a180){_0x304511[_0x3546('0x1d')](_0x78a180);})[_0x3546('0x14')](function(){for(var _0x5bde1a=0x0;_0x5bde1a<_0x304511[_0x3546('0x1b')];_0x5bde1a+=0x1){var _0x53ad86;var _0x57e1ad=_0x304511[_0x5bde1a];if(_0x3a1325){_0x53ad86=path[_0x3546('0x20')](_0x2318a4,_0x326845,util[_0x3546('0xe')](_0x3546('0x22'),_0x326845,_0x5bde1a,_0x3546('0x23')));}else{_0x53ad86=path['join'](_0x2318a4,util[_0x3546('0xe')](_0x3546('0x24'),_0x326845,_0x3546('0x23')));}fs[_0x3546('0x25')](_0x53ad86,csv(_0x57e1ad));}})['then'](function(){if(_0x3a1325){zipdir(path[_0x3546('0x20')](_0x2318a4,_0x326845),{'saveTo':path['join'](_0x2318a4,util['format'](_0x3546('0x24'),_0x326845,'zip'))},function(_0x45e7c0,_0x1e0979){});rimraf(path['join'](_0x2318a4,_0x326845),function(){});}})['then'](function(){logger['info'](util['format']('Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed',EXTRACTED_REPORT_ID,_0x3546('0x10')));return analyticExtractedReport(_0x3546('0x26'),_0x3a1325?util[_0x3546('0xe')]('%s.%s',_0x326845,_0x3a1325?'zip':_0x3546('0x23')):null);});})[_0x3546('0x27')](function(_0x56626b){logger[_0x3546('0xd')](util[_0x3546('0xe')](_0x3546('0x28'),EXTRACTED_REPORT_ID,_0x3546('0x10')),util['inspect'](_0x56626b,{'showHidden':![],'depth':null}));return analyticExtractedReport('Failed');});}main();
\ No newline at end of file
index 04ddad5..47de0f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaea1=['each','Name:\x20%s\x0aReport:\x20%s\x0aFrom:\x20%s\x20To:\x20%s','name','startDate','endDate','landscape','header','black','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','finish','log','err','end','zip','CSV','Completed','info','PDF','Failed','lodash','bluebird','util','path','zip-dir','../../mysqldb','../../config/logger','argv','MMMM\x20Do\x20YYYY,\x20h:mm:ss\x20a','AnalyticExtractedReport','update','hasOwnProperty','push','num','Empty','basename','.pdf','Setting','find','split','splitSizePdf','then','sequelize','query','format','%s\x20limit\x20%d\x20OFFSET\x20%d','QueryTypes','SELECT','length','mkdirSync','join'];(function(_0xd0bc3e,_0x59fbef){var _0x15c1b0=function(_0x24287e){while(--_0x24287e){_0xd0bc3e['push'](_0xd0bc3e['shift']());}};_0x15c1b0(++_0x59fbef);}(_0xaea1,0x95));var _0x1aea=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xaea1[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x1aea('0x0'));var fs=require('fs');var BPromise=require(_0x1aea('0x1'));var util=require(_0x1aea('0x2'));var path=require(_0x1aea('0x3'));var moment=require('moment');var PdfPrinter=require('pdfmake/src/printer');var zipdir=require(_0x1aea('0x4'));var rimraf=require('rimraf');var db=require(_0x1aea('0x5'))['db'];var dbH=require(_0x1aea('0x5'))['dbH'];var logger=require(_0x1aea('0x6'))('analytics');var EXTRACTED_REPORT_ID=Number(process[_0x1aea('0x7')][0x2]);var QUERY=process[_0x1aea('0x7')][0x3];var PATH=process['argv'][0x4];var NAME=process[_0x1aea('0x7')][0x5];var FORMAT=_0x1aea('0x8');var _extractedReport;function analyticExtractedReport(_0xcb4ba7,_0x2bc901){var _0x567e91={'status':_0xcb4ba7};var _0x371252={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x2bc901){_0x567e91['savename']=_0x2bc901;}return db[_0x1aea('0x9')][_0x1aea('0xa')](_0x567e91,_0x371252);}function getHeader(_0x228fae){var _0x199f38=[];for(var _0x56bf88 in _0x228fae){if(_0x228fae[_0x1aea('0xb')](_0x56bf88)){_0x199f38[_0x1aea('0xc')]({'text':_0x56bf88,'style':'tableHeader'});}}return _0x199f38;}function extractReport(_0x3236c7){var _0x262f4f=0x1388;var _0x389c16;if(!_0x3236c7[0x0][_0x1aea('0xd')]){return analyticExtractedReport(_0x1aea('0xe'));}var _0x52c896=[];var _0x228d55=0x0;var _0x12320a=!![];var _0x260d45=path['dirname'](PATH);var _0x55340f=path[_0x1aea('0xf')](PATH,_0x1aea('0x10'));var _0x21ee38=![];var _0x22ab19=[];return db[_0x1aea('0x11')][_0x1aea('0x12')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0x1aea('0x13'),_0x1aea('0x14')]})['then'](function(_0x411e6f){if(_0x411e6f){_0x389c16=_0x411e6f;_0x262f4f=_0x389c16[_0x1aea('0x14')]||0x3e8;}})[_0x1aea('0x15')](function(){if(_0x3236c7&&_0x3236c7['length']){var _0x217c54=_0x3236c7[0x0][_0x1aea('0xd')]%(_0x228d55+_0x262f4f);if(_0x389c16[_0x1aea('0x13')]){for(;_0x12320a;_0x228d55+=_0x262f4f,_0x217c54=_0x3236c7[0x0][_0x1aea('0xd')]%(_0x228d55+_0x262f4f)){if(_0x217c54==0x0||_0x217c54==_0x3236c7[0x0][_0x1aea('0xd')]){_0x12320a=![];}_0x52c896[_0x1aea('0xc')](dbH[_0x1aea('0x16')][_0x1aea('0x17')](util[_0x1aea('0x18')](_0x1aea('0x19'),QUERY,_0x262f4f,_0x228d55),{'type':dbH[_0x1aea('0x16')][_0x1aea('0x1a')][_0x1aea('0x1b')]}));}}else{_0x52c896[_0x1aea('0xc')](dbH[_0x1aea('0x16')][_0x1aea('0x17')](QUERY,{'type':dbH[_0x1aea('0x16')][_0x1aea('0x1a')]['SELECT']}));}}_0x21ee38=_0x389c16[_0x1aea('0x13')]&&_0x52c896[_0x1aea('0x1c')]>0x1;if(!fs['existsSync'](path['join'](_0x260d45,_0x55340f))&&_0x21ee38){fs[_0x1aea('0x1d')](path[_0x1aea('0x1e')](_0x260d45,_0x55340f));}return BPromise['each'](_0x52c896,function(_0x2f5e2a){_0x22ab19[_0x1aea('0xc')](_0x2f5e2a);});})[_0x1aea('0x15')](function(){return BPromise[_0x1aea('0x1f')](_0x52c896,function(_0x24c599,_0x437a09){var _0x5f0998;var _0x219e98=util['format'](_0x1aea('0x20'),NAME,_extractedReport[_0x1aea('0x21')],moment(_extractedReport[_0x1aea('0x22')])[_0x1aea('0x18')](FORMAT),moment(_extractedReport[_0x1aea('0x23')])['format'](FORMAT));var _0x1c4676={'pageSize':'A4','pageOrientation':_0x1aea('0x24'),'content':[{'text':_0x219e98,'style':_0x1aea('0x25')}],'styles':{'header':{'fontSize':0x12,'bold':!![],'margin':[0x0,0x0,0x0,0xa]},'tableHeader':{'bold':!![],'fontSize':0xd,'color':_0x1aea('0x26')}}};var _0x4a3945={'headerRows':0x1,'body':[]};_0x4a3945[_0x1aea('0x27')][_0x1aea('0xc')](getHeader(_0x24c599[0x0]));var _0x1871a3;for(var _0x181c78=0x0;_0x181c78<_0x24c599[_0x1aea('0x1c')];_0x181c78+=0x1){_0x1871a3=[];for(var _0x1418cf in _0x24c599[_0x181c78]){if(_0x24c599[_0x181c78][_0x1aea('0xb')](_0x1418cf)){_0x1871a3['push'](_0x24c599[_0x181c78][_0x1418cf]?_['toString'](_0x24c599[_0x181c78][_0x1418cf]):'');}}_0x4a3945[_0x1aea('0x27')]['push'](_0x1871a3);}_0x1c4676[_0x1aea('0x28')][_0x1aea('0xc')]({'table':_0x4a3945});return new BPromise(function(_0x3d99f3,_0x28a791){var _0x55f12f=new PdfPrinter({'Roboto':{'normal':__dirname+_0x1aea('0x29'),'bold':__dirname+_0x1aea('0x2a'),'italics':__dirname+_0x1aea('0x2b'),'bolditalics':__dirname+_0x1aea('0x2c')}});var _0x3dbcd1=_0x55f12f[_0x1aea('0x2d')](_0x1c4676);if(_0x21ee38){_0x5f0998=path[_0x1aea('0x1e')](_0x260d45,_0x55340f,util[_0x1aea('0x18')](_0x1aea('0x2e'),_0x55340f,_0x437a09,_0x1aea('0x2f')));}else{_0x5f0998=path[_0x1aea('0x1e')](_0x260d45,util[_0x1aea('0x18')](_0x1aea('0x30'),_0x55340f,_0x1aea('0x2f')));}var _0x21c253=_0x3dbcd1[_0x1aea('0x31')](fs['createWriteStream'](_0x5f0998));_0x21c253['on'](_0x1aea('0x32'),function(){_0x3d99f3();});_0x21c253['on']('error',function(_0x2a7330){console[_0x1aea('0x33')](_0x1aea('0x34'),_0x2a7330);_0x28a791(_0x2a7330);});_0x3dbcd1[_0x1aea('0x35')]();});});})['then'](function(){if(_0x21ee38){return new BPromise(function(_0x420148,_0x4edf10){zipdir(path[_0x1aea('0x1e')](_0x260d45,_0x55340f),{'saveTo':path[_0x1aea('0x1e')](_0x260d45,util[_0x1aea('0x18')](_0x1aea('0x30'),_0x55340f,_0x1aea('0x36')))},function(_0x231fcb){if(_0x231fcb){_0x4edf10(_0x231fcb);}else{_0x420148();}});});}})['then'](function(){if(_0x21ee38){rimraf(path[_0x1aea('0x1e')](_0x260d45,_0x55340f),function(){});}})['then'](function(){logger['info'](util['format']('Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed',EXTRACTED_REPORT_ID,_0x1aea('0x37')));return analyticExtractedReport(_0x1aea('0x38'),_0x21ee38?util[_0x1aea('0x18')](_0x1aea('0x30'),_0x55340f,_0x21ee38?_0x1aea('0x36'):'pdf'):null);});}function main(){logger[_0x1aea('0x39')](util[_0x1aea('0x18')]('Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format',EXTRACTED_REPORT_ID,_0x1aea('0x3a')));return db['AnalyticExtractedReport']['findOne']({'where':{'id':EXTRACTED_REPORT_ID}})['then'](function(_0x41dae3){_extractedReport=_0x41dae3;return dbH[_0x1aea('0x16')][_0x1aea('0x17')](util[_0x1aea('0x18')]('SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t',QUERY),{'type':dbH[_0x1aea('0x16')][_0x1aea('0x1a')][_0x1aea('0x1b')]});})[_0x1aea('0x15')](extractReport)['catch'](function(_0x42ee1e){logger['info'](util[_0x1aea('0x18')]('Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format',EXTRACTED_REPORT_ID,_0x1aea('0x3a')),util['inspect'](_0x42ee1e,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0x1aea('0x3b'));});}main();
\ No newline at end of file
+var _0x5f5b=['Completed','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','PDF','AnalyticExtractedReport','catch','inspect','Failed','lodash','bluebird','util','path','moment','pdfmake/src/printer','zip-dir','../../mysqldb','dbH','argv','MMMM\x20Do\x20YYYY,\x20h:mm:ss\x20a','update','hasOwnProperty','push','tableHeader','Empty','dirname','basename','.pdf','Setting','find','split','splitSizePdf','then','length','num','sequelize','query','%s\x20limit\x20%d\x20OFFSET\x20%d','QueryTypes','SELECT','existsSync','mkdirSync','each','format','name','startDate','endDate','header','black','body','toString','content','/fonts/Roboto-Regular.ttf','/fonts/Roboto-Medium.ttf','/fonts/Roboto-Italic.ttf','/fonts/Roboto-MediumItalic.ttf','createPdfKitDocument','join','pdf','%s.%s','pipe','createWriteStream','finish','error','log','err','end','zip','info','CSV'];(function(_0x199572,_0x33e667){var _0x13cfa3=function(_0x53c075){while(--_0x53c075){_0x199572['push'](_0x199572['shift']());}};_0x13cfa3(++_0x33e667);}(_0x5f5b,0x19f));var _0xb5f5=function(_0xe73cb2,_0x1dc890){_0xe73cb2=_0xe73cb2-0x0;var _0x3b5ce0=_0x5f5b[_0xe73cb2];return _0x3b5ce0;};'use strict';var _=require(_0xb5f5('0x0'));var fs=require('fs');var BPromise=require(_0xb5f5('0x1'));var util=require(_0xb5f5('0x2'));var path=require(_0xb5f5('0x3'));var moment=require(_0xb5f5('0x4'));var PdfPrinter=require(_0xb5f5('0x5'));var zipdir=require(_0xb5f5('0x6'));var rimraf=require('rimraf');var db=require(_0xb5f5('0x7'))['db'];var dbH=require(_0xb5f5('0x7'))[_0xb5f5('0x8')];var logger=require('../../config/logger')('analytics');var EXTRACTED_REPORT_ID=Number(process['argv'][0x2]);var QUERY=process[_0xb5f5('0x9')][0x3];var PATH=process[_0xb5f5('0x9')][0x4];var NAME=process[_0xb5f5('0x9')][0x5];var FORMAT=_0xb5f5('0xa');var _extractedReport;function analyticExtractedReport(_0x4013d5,_0x291831){var _0x262853={'status':_0x4013d5};var _0x4d3461={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x291831){_0x262853['savename']=_0x291831;}return db['AnalyticExtractedReport'][_0xb5f5('0xb')](_0x262853,_0x4d3461);}function getHeader(_0x29d63b){var _0x3f3ff5=[];for(var _0x297ec5 in _0x29d63b){if(_0x29d63b[_0xb5f5('0xc')](_0x297ec5)){_0x3f3ff5[_0xb5f5('0xd')]({'text':_0x297ec5,'style':_0xb5f5('0xe')});}}return _0x3f3ff5;}function extractReport(_0x1e4f64){var _0x4d1a93=0x1388;var _0x5ea59f;if(!_0x1e4f64[0x0]['num']){return analyticExtractedReport(_0xb5f5('0xf'));}var _0x1ac985=[];var _0x436524=0x0;var _0x573c7b=!![];var _0x2615fd=path[_0xb5f5('0x10')](PATH);var _0x1bd459=path[_0xb5f5('0x11')](PATH,_0xb5f5('0x12'));var _0x5415f9=![];var _0x54fa8e=[];return db[_0xb5f5('0x13')][_0xb5f5('0x14')]({'where':{'id':0x1},'raw':!![],'attributes':['id',_0xb5f5('0x15'),_0xb5f5('0x16')]})[_0xb5f5('0x17')](function(_0x56749b){if(_0x56749b){_0x5ea59f=_0x56749b;_0x4d1a93=_0x5ea59f[_0xb5f5('0x16')]||0x3e8;}})[_0xb5f5('0x17')](function(){if(_0x1e4f64&&_0x1e4f64[_0xb5f5('0x18')]){var _0x3d14a8=_0x1e4f64[0x0][_0xb5f5('0x19')]%(_0x436524+_0x4d1a93);if(_0x5ea59f['split']){for(;_0x573c7b;_0x436524+=_0x4d1a93,_0x3d14a8=_0x1e4f64[0x0][_0xb5f5('0x19')]%(_0x436524+_0x4d1a93)){if(_0x3d14a8==0x0||_0x3d14a8==_0x1e4f64[0x0][_0xb5f5('0x19')]){_0x573c7b=![];}_0x1ac985[_0xb5f5('0xd')](dbH[_0xb5f5('0x1a')][_0xb5f5('0x1b')](util['format'](_0xb5f5('0x1c'),QUERY,_0x4d1a93,_0x436524),{'type':dbH[_0xb5f5('0x1a')][_0xb5f5('0x1d')][_0xb5f5('0x1e')]}));}}else{_0x1ac985[_0xb5f5('0xd')](dbH['sequelize'][_0xb5f5('0x1b')](QUERY,{'type':dbH[_0xb5f5('0x1a')][_0xb5f5('0x1d')][_0xb5f5('0x1e')]}));}}_0x5415f9=_0x5ea59f[_0xb5f5('0x15')]&&_0x1ac985['length']>0x1;if(!fs[_0xb5f5('0x1f')](path['join'](_0x2615fd,_0x1bd459))&&_0x5415f9){fs[_0xb5f5('0x20')](path['join'](_0x2615fd,_0x1bd459));}return BPromise['each'](_0x1ac985,function(_0x4a26c7){_0x54fa8e[_0xb5f5('0xd')](_0x4a26c7);});})[_0xb5f5('0x17')](function(){return BPromise[_0xb5f5('0x21')](_0x1ac985,function(_0x3d6933,_0x392140){var _0x4ff3fd;var _0x47f5eb=util[_0xb5f5('0x22')]('Name:\x20%s\x0aReport:\x20%s\x0aFrom:\x20%s\x20To:\x20%s',NAME,_extractedReport[_0xb5f5('0x23')],moment(_extractedReport[_0xb5f5('0x24')])[_0xb5f5('0x22')](FORMAT),moment(_extractedReport[_0xb5f5('0x25')])[_0xb5f5('0x22')](FORMAT));var _0x4aa141={'pageSize':'A4','pageOrientation':'landscape','content':[{'text':_0x47f5eb,'style':_0xb5f5('0x26')}],'styles':{'header':{'fontSize':0x12,'bold':!![],'margin':[0x0,0x0,0x0,0xa]},'tableHeader':{'bold':!![],'fontSize':0xd,'color':_0xb5f5('0x27')}}};var _0x395aa9={'headerRows':0x1,'body':[]};_0x395aa9[_0xb5f5('0x28')]['push'](getHeader(_0x3d6933[0x0]));var _0x5ddb91;for(var _0x3b03f6=0x0;_0x3b03f6<_0x3d6933[_0xb5f5('0x18')];_0x3b03f6+=0x1){_0x5ddb91=[];for(var _0x411b5c in _0x3d6933[_0x3b03f6]){if(_0x3d6933[_0x3b03f6][_0xb5f5('0xc')](_0x411b5c)){_0x5ddb91[_0xb5f5('0xd')](_0x3d6933[_0x3b03f6][_0x411b5c]?_[_0xb5f5('0x29')](_0x3d6933[_0x3b03f6][_0x411b5c]):'');}}_0x395aa9[_0xb5f5('0x28')][_0xb5f5('0xd')](_0x5ddb91);}_0x4aa141[_0xb5f5('0x2a')][_0xb5f5('0xd')]({'table':_0x395aa9});return new BPromise(function(_0x3ed998,_0x519a28){var _0x1b2394=new PdfPrinter({'Roboto':{'normal':__dirname+_0xb5f5('0x2b'),'bold':__dirname+_0xb5f5('0x2c'),'italics':__dirname+_0xb5f5('0x2d'),'bolditalics':__dirname+_0xb5f5('0x2e')}});var _0x5cf81b=_0x1b2394[_0xb5f5('0x2f')](_0x4aa141);if(_0x5415f9){_0x4ff3fd=path[_0xb5f5('0x30')](_0x2615fd,_0x1bd459,util[_0xb5f5('0x22')]('%s%d.%s',_0x1bd459,_0x392140,_0xb5f5('0x31')));}else{_0x4ff3fd=path[_0xb5f5('0x30')](_0x2615fd,util[_0xb5f5('0x22')](_0xb5f5('0x32'),_0x1bd459,_0xb5f5('0x31')));}var _0x154ae1=_0x5cf81b[_0xb5f5('0x33')](fs[_0xb5f5('0x34')](_0x4ff3fd));_0x154ae1['on'](_0xb5f5('0x35'),function(){_0x3ed998();});_0x154ae1['on'](_0xb5f5('0x36'),function(_0x35e9e1){console[_0xb5f5('0x37')](_0xb5f5('0x38'),_0x35e9e1);_0x519a28(_0x35e9e1);});_0x5cf81b[_0xb5f5('0x39')]();});});})[_0xb5f5('0x17')](function(){if(_0x5415f9){return new BPromise(function(_0x23365e,_0x48ccba){zipdir(path['join'](_0x2615fd,_0x1bd459),{'saveTo':path[_0xb5f5('0x30')](_0x2615fd,util[_0xb5f5('0x22')](_0xb5f5('0x32'),_0x1bd459,_0xb5f5('0x3a')))},function(_0x12049c){if(_0x12049c){_0x48ccba(_0x12049c);}else{_0x23365e();}});});}})[_0xb5f5('0x17')](function(){if(_0x5415f9){rimraf(path[_0xb5f5('0x30')](_0x2615fd,_0x1bd459),function(){});}})[_0xb5f5('0x17')](function(){logger[_0xb5f5('0x3b')](util[_0xb5f5('0x22')]('Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed',EXTRACTED_REPORT_ID,_0xb5f5('0x3c')));return analyticExtractedReport(_0xb5f5('0x3d'),_0x5415f9?util[_0xb5f5('0x22')](_0xb5f5('0x32'),_0x1bd459,_0x5415f9?_0xb5f5('0x3a'):_0xb5f5('0x31')):null);});}function main(){logger[_0xb5f5('0x3b')](util[_0xb5f5('0x22')](_0xb5f5('0x3e'),EXTRACTED_REPORT_ID,_0xb5f5('0x3f')));return db[_0xb5f5('0x40')]['findOne']({'where':{'id':EXTRACTED_REPORT_ID}})['then'](function(_0x10d565){_extractedReport=_0x10d565;return dbH[_0xb5f5('0x1a')][_0xb5f5('0x1b')](util[_0xb5f5('0x22')]('SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t',QUERY),{'type':dbH[_0xb5f5('0x1a')][_0xb5f5('0x1d')][_0xb5f5('0x1e')]});})[_0xb5f5('0x17')](extractReport)[_0xb5f5('0x41')](function(_0x5f09e0){logger[_0xb5f5('0x3b')](util[_0xb5f5('0x22')]('Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format',EXTRACTED_REPORT_ID,'PDF'),util[_0xb5f5('0x42')](_0x5f09e0,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0xb5f5('0x43'));});}main();
\ No newline at end of file
index 772e7a8..1091cad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7140=['split','splitSizeXlsx','then','query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','sequelize','QueryTypes','SELECT','num','Empty','length','push','dirname','basename','.xlsx','existsSync','mkdirSync','each','join','%s%d.%s','%s.%s','xlsx','binary','zip','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','Completed','catch','info','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','Failed','util','path','lodash','bluebird','zip-dir','../../mysqldb','../../config/logger','argv','savename','update','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','XLSX','Setting'];(function(_0x224819,_0x114687){var _0x2d697a=function(_0x3f73d9){while(--_0x3f73d9){_0x224819['push'](_0x224819['shift']());}};_0x2d697a(++_0x114687);}(_0x7140,0x1e1));var _0x0714=function(_0x244862,_0x3da79e){_0x244862=_0x244862-0x0;var _0x2bce23=_0x7140[_0x244862];return _0x2bce23;};'use strict';var util=require(_0x0714('0x0'));var path=require(_0x0714('0x1'));var _=require(_0x0714('0x2'));var fs=require('fs');var json2xls=require('json2xls');var BPromise=require(_0x0714('0x3'));var zipdir=require(_0x0714('0x4'));var rimraf=require('rimraf');var db=require(_0x0714('0x5'))['db'];var dbH=require(_0x0714('0x5'))['dbH'];var logger=require(_0x0714('0x6'))('analytics');var EXTRACTED_REPORT_ID=Number(process[_0x0714('0x7')][0x2]);var QUERY=process[_0x0714('0x7')][0x3];var PATH=process['argv'][0x4];function analyticExtractedReport(_0xf9f49d,_0x2649bb){var _0x5175cc={'status':_0xf9f49d};var _0x1c6ec5={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x2649bb){_0x5175cc[_0x0714('0x8')]=_0x2649bb;}return db['AnalyticExtractedReport'][_0x0714('0x9')](_0x5175cc,_0x1c6ec5);}function main(){var _0x34cf72=0x1388;var _0x453a11;logger['info'](util[_0x0714('0xa')](_0x0714('0xb'),EXTRACTED_REPORT_ID,_0x0714('0xc')));return db[_0x0714('0xd')]['find']({'where':{'id':0x1},'raw':!![],'attributes':['id',_0x0714('0xe'),_0x0714('0xf')]})['then'](function(_0x19db18){if(_0x19db18){_0x453a11=_0x19db18;_0x34cf72=_0x453a11[_0x0714('0xf')]||0x1388;}})[_0x0714('0x10')](function(){return dbH['sequelize'][_0x0714('0x11')](util[_0x0714('0xa')](_0x0714('0x12'),QUERY),{'type':dbH[_0x0714('0x13')][_0x0714('0x14')][_0x0714('0x15')]});})[_0x0714('0x10')](function(_0x2171fc){if(!_0x2171fc[0x0][_0x0714('0x16')]){return analyticExtractedReport(_0x0714('0x17'));}var _0x5a4a70=[];var _0xb11a48=0x0;var _0x1b3bb0=!![];if(_0x453a11[_0x0714('0xe')]){if(_0x2171fc&&_0x2171fc[_0x0714('0x18')]){var _0x190312=_0x2171fc[0x0][_0x0714('0x16')]%(_0xb11a48+_0x34cf72);for(;_0x1b3bb0;_0xb11a48+=_0x34cf72,_0x190312=_0x2171fc[0x0][_0x0714('0x16')]%(_0xb11a48+_0x34cf72)){if(_0x190312==0x0||_0x190312==_0x2171fc[0x0]['num']){_0x1b3bb0=![];}_0x5a4a70[_0x0714('0x19')](dbH['sequelize'][_0x0714('0x11')](util[_0x0714('0xa')]('%s\x20limit\x20%d\x20OFFSET\x20%d',QUERY,_0x34cf72,_0xb11a48),{'type':dbH[_0x0714('0x13')]['QueryTypes'][_0x0714('0x15')]}));}}}else{_0x5a4a70['push'](dbH[_0x0714('0x13')][_0x0714('0x11')](QUERY,{'type':dbH[_0x0714('0x13')][_0x0714('0x14')][_0x0714('0x15')]}));}var _0x1119f9=path[_0x0714('0x1a')](PATH);var _0x2eb4f7=path[_0x0714('0x1b')](PATH,_0x0714('0x1c'));var _0x65f480=_0x453a11[_0x0714('0xe')]&&_0x5a4a70[_0x0714('0x18')]>0x1;var _0x30056b=[];if(!fs[_0x0714('0x1d')](path['join'](_0x1119f9,_0x2eb4f7))&&_0x65f480){fs[_0x0714('0x1e')](path['join'](_0x1119f9,_0x2eb4f7));}return BPromise[_0x0714('0x1f')](_0x5a4a70,function(_0x1a3a12){_0x30056b[_0x0714('0x19')](_0x1a3a12);})[_0x0714('0x10')](function(){for(var _0x494b42=0x0;_0x494b42<_0x30056b['length'];_0x494b42+=0x1){var _0x1072aa;var _0x2c82d5=_0x30056b[_0x494b42];if(_0x65f480){_0x1072aa=path[_0x0714('0x20')](_0x1119f9,_0x2eb4f7,util[_0x0714('0xa')](_0x0714('0x21'),_0x2eb4f7,_0x494b42,'xlsx'));}else{_0x1072aa=path[_0x0714('0x20')](_0x1119f9,util['format'](_0x0714('0x22'),_0x2eb4f7,_0x0714('0x23')));}fs['writeFileSync'](_0x1072aa,json2xls(_0x2c82d5),_0x0714('0x24'));}})[_0x0714('0x10')](function(){if(_0x65f480){zipdir(path['join'](_0x1119f9,_0x2eb4f7),{'saveTo':path[_0x0714('0x20')](_0x1119f9,util['format'](_0x0714('0x22'),_0x2eb4f7,_0x0714('0x25')))},function(_0x415e67,_0x2a725c){});rimraf(path['join'](_0x1119f9,_0x2eb4f7),function(){});}})[_0x0714('0x10')](function(){logger['info'](util[_0x0714('0xa')](_0x0714('0x26'),EXTRACTED_REPORT_ID,_0x0714('0xc')));return analyticExtractedReport(_0x0714('0x27'),_0x65f480?util[_0x0714('0xa')](_0x0714('0x22'),_0x2eb4f7,_0x65f480?_0x0714('0x25'):_0x0714('0x23')):null);});})[_0x0714('0x28')](function(_0x3156c2){logger[_0x0714('0x29')](util[_0x0714('0xa')](_0x0714('0x2a'),EXTRACTED_REPORT_ID,_0x0714('0xc')),util[_0x0714('0x2b')](_0x3156c2,{'showHidden':![],'depth':null}));return analyticExtractedReport(_0x0714('0x2c'));});}main();
\ No newline at end of file
+var _0xda35=['%s.%s','writeFileSync','binary','info','Extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format\x20completed','Completed','catch','Error\x20during\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','inspect','lodash','json2xls','bluebird','zip-dir','rimraf','../../mysqldb','../../config/logger','argv','savename','AnalyticExtractedReport','update','format','Start\x20extraction\x20report\x20with\x20id\x20%d\x20in\x20%s\x20format','XLSX','Setting','find','then','splitSizeXlsx','query','SELECT\x20count(*)\x20as\x20num\x20FROM\x20(%s)\x20t','sequelize','SELECT','num','Empty','split','push','%s\x20limit\x20%d\x20OFFSET\x20%d','QueryTypes','dirname','.xlsx','length','mkdirSync','join','each','%s%d.%s','xlsx'];(function(_0x354495,_0x5ec6f9){var _0x519b37=function(_0x295de2){while(--_0x295de2){_0x354495['push'](_0x354495['shift']());}};_0x519b37(++_0x5ec6f9);}(_0xda35,0x19e));var _0x5da3=function(_0x31a8fd,_0x3b069e){_0x31a8fd=_0x31a8fd-0x0;var _0x3c9f87=_0xda35[_0x31a8fd];return _0x3c9f87;};'use strict';var util=require('util');var path=require('path');var _=require(_0x5da3('0x0'));var fs=require('fs');var json2xls=require(_0x5da3('0x1'));var BPromise=require(_0x5da3('0x2'));var zipdir=require(_0x5da3('0x3'));var rimraf=require(_0x5da3('0x4'));var db=require(_0x5da3('0x5'))['db'];var dbH=require(_0x5da3('0x5'))['dbH'];var logger=require(_0x5da3('0x6'))('analytics');var EXTRACTED_REPORT_ID=Number(process['argv'][0x2]);var QUERY=process[_0x5da3('0x7')][0x3];var PATH=process[_0x5da3('0x7')][0x4];function analyticExtractedReport(_0x3ac91e,_0x363df1){var _0x616ce3={'status':_0x3ac91e};var _0xb3cd2b={'where':{'id':EXTRACTED_REPORT_ID}};if(_0x363df1){_0x616ce3[_0x5da3('0x8')]=_0x363df1;}return db[_0x5da3('0x9')][_0x5da3('0xa')](_0x616ce3,_0xb3cd2b);}function main(){var _0x219e26=0x1388;var _0x3e09a2;logger['info'](util[_0x5da3('0xb')](_0x5da3('0xc'),EXTRACTED_REPORT_ID,_0x5da3('0xd')));return db[_0x5da3('0xe')][_0x5da3('0xf')]({'where':{'id':0x1},'raw':!![],'attributes':['id','split','splitSizeXlsx']})[_0x5da3('0x10')](function(_0x3730b3){if(_0x3730b3){_0x3e09a2=_0x3730b3;_0x219e26=_0x3e09a2[_0x5da3('0x11')]||0x1388;}})[_0x5da3('0x10')](function(){return dbH['sequelize'][_0x5da3('0x12')](util[_0x5da3('0xb')](_0x5da3('0x13'),QUERY),{'type':dbH[_0x5da3('0x14')]['QueryTypes'][_0x5da3('0x15')]});})[_0x5da3('0x10')](function(_0x19636f){if(!_0x19636f[0x0][_0x5da3('0x16')]){return analyticExtractedReport(_0x5da3('0x17'));}var _0x363319=[];var _0x3f2728=0x0;var _0x778a1=!![];if(_0x3e09a2[_0x5da3('0x18')]){if(_0x19636f&&_0x19636f['length']){var _0x2b65d7=_0x19636f[0x0]['num']%(_0x3f2728+_0x219e26);for(;_0x778a1;_0x3f2728+=_0x219e26,_0x2b65d7=_0x19636f[0x0][_0x5da3('0x16')]%(_0x3f2728+_0x219e26)){if(_0x2b65d7==0x0||_0x2b65d7==_0x19636f[0x0][_0x5da3('0x16')]){_0x778a1=![];}_0x363319[_0x5da3('0x19')](dbH[_0x5da3('0x14')][_0x5da3('0x12')](util['format'](_0x5da3('0x1a'),QUERY,_0x219e26,_0x3f2728),{'type':dbH['sequelize']['QueryTypes']['SELECT']}));}}}else{_0x363319['push'](dbH[_0x5da3('0x14')][_0x5da3('0x12')](QUERY,{'type':dbH[_0x5da3('0x14')][_0x5da3('0x1b')][_0x5da3('0x15')]}));}var _0x31ebb0=path[_0x5da3('0x1c')](PATH);var _0x5a13f0=path['basename'](PATH,_0x5da3('0x1d'));var _0x428203=_0x3e09a2['split']&&_0x363319[_0x5da3('0x1e')]>0x1;var _0x113ca0=[];if(!fs['existsSync'](path['join'](_0x31ebb0,_0x5a13f0))&&_0x428203){fs[_0x5da3('0x1f')](path[_0x5da3('0x20')](_0x31ebb0,_0x5a13f0));}return BPromise[_0x5da3('0x21')](_0x363319,function(_0x80f18a){_0x113ca0[_0x5da3('0x19')](_0x80f18a);})['then'](function(){for(var _0x4738ff=0x0;_0x4738ff<_0x113ca0['length'];_0x4738ff+=0x1){var _0x32a623;var _0x187015=_0x113ca0[_0x4738ff];if(_0x428203){_0x32a623=path[_0x5da3('0x20')](_0x31ebb0,_0x5a13f0,util[_0x5da3('0xb')](_0x5da3('0x22'),_0x5a13f0,_0x4738ff,_0x5da3('0x23')));}else{_0x32a623=path['join'](_0x31ebb0,util[_0x5da3('0xb')](_0x5da3('0x24'),_0x5a13f0,'xlsx'));}fs[_0x5da3('0x25')](_0x32a623,json2xls(_0x187015),_0x5da3('0x26'));}})[_0x5da3('0x10')](function(){if(_0x428203){zipdir(path[_0x5da3('0x20')](_0x31ebb0,_0x5a13f0),{'saveTo':path[_0x5da3('0x20')](_0x31ebb0,util[_0x5da3('0xb')](_0x5da3('0x24'),_0x5a13f0,'zip'))},function(_0x3bd654,_0x2cea02){});rimraf(path[_0x5da3('0x20')](_0x31ebb0,_0x5a13f0),function(){});}})[_0x5da3('0x10')](function(){logger[_0x5da3('0x27')](util[_0x5da3('0xb')](_0x5da3('0x28'),EXTRACTED_REPORT_ID,'XLSX'));return analyticExtractedReport(_0x5da3('0x29'),_0x428203?util[_0x5da3('0xb')]('%s.%s',_0x5a13f0,_0x428203?'zip':_0x5da3('0x23')):null);});})[_0x5da3('0x2a')](function(_0x132977){logger['info'](util['format'](_0x5da3('0x2b'),EXTRACTED_REPORT_ID,'XLSX'),util[_0x5da3('0x2c')](_0x132977,{'showHidden':![],'depth':null}));return analyticExtractedReport('Failed');});}main();
\ No newline at end of file
index 99043d2..33d1b68 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4856=['find','push','type','Set','format','context','VoiceExtensionId','outbound','extension','CDR(destination)=','${EXTEN:','${EXTEN}','priority','ExecIf','):Goto(','CDR(prefix)=${EXTEN:0:','cutdigits','CDR(prefix)=noprefix','outboundrouteid=','recordingFormat','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','_XCALLY_MIXMONITOR_FORMAT=','wav','XCALLY-MOTION-ANSWER=0','XCALLY-MOTION-PROGRESS=0','MONITOR_OPTIONS=ab','length','createdAt','interval','*,*,*,*','tag','CDR(tag)=','callerID','$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)=','indexOf','app','toLowerCase','appType','answer','$[${XCALLY-MOTION-ANSWER}=0]?Answer','XCALLY-MOTION-ANSWER=1','$[${XCALLY-MOTION-PROGRESS}=0]?Progress','XCALLY-MOTION-PROGRESS=1','splice','GotoIfTime','last','concat','Hangup','transaction','destroy','sortBy','catch','error','rewrite','lodash','util','models','Interval','then','intervals','VoiceExtension','findAll','IntervalId','uniq','map','exten','CAST(priority\x20AS\x20UNSIGNED)','filter','groupBy','queue','playback','hasOwnProperty','extensions'];(function(_0x43ee45,_0x5a757f){var _0x1df962=function(_0x4d811e){while(--_0x4d811e){_0x43ee45['push'](_0x43ee45['shift']());}};_0x1df962(++_0x5a757f);}(_0x4856,0x1a3));var _0x6485=function(_0x3825a8,_0x2ce1a2){_0x3825a8=_0x3825a8-0x0;var _0xabc9bc=_0x4856[_0x3825a8];return _0xabc9bc;};'use strict';var _=require(_0x6485('0x0'));var util=require(_0x6485('0x1'));function rewrite(_0x4079a8,_0x2caab4){var _0x19255a=this;return _0x4079a8[_0x6485('0x2')][_0x6485('0x3')]['findAll']({'raw':!![]})[_0x6485('0x4')](function(_0x32ca35){_0x19255a[_0x6485('0x5')]=_0x32ca35;return _0x4079a8[_0x6485('0x2')][_0x6485('0x6')][_0x6485('0x7')]({'where':{'IntervalId':_0x2caab4[_0x6485('0x8')]},'raw':!![]});})[_0x6485('0x4')](function(_0x56f5db){return _0x4079a8['models']['VoiceExtension'][_0x6485('0x7')]({'where':{'exten':{'$in':_[_0x6485('0x9')](_[_0x6485('0xa')](_0x56f5db,_0x6485('0xb')))}},'order':[{'raw':_0x6485('0xc')}],'raw':!![]});})['then'](function(_0x5ba833){var _0x3bf1f6=_[_0x6485('0xd')](_0x5ba833,{'priority':'1'});var _0x4403cb=_[_0x6485('0xd')](_0x5ba833,{'isApp':0x1});var _0x3134ae=_[_0x6485('0xe')](_0x4403cb,_0x6485('0xb'));var _0x3641c8=[_0x6485('0xf'),_0x6485('0x10')];var _0x3c2ad8=[];var _0x4b7e6e=[];for(var _0xbade68 in _0x3134ae){if(_0x3134ae[_0x6485('0x11')](_0xbade68)){_0x19255a['priority']=0x2;_0x19255a[_0x6485('0x12')]=[];_0x19255a['extension']=_[_0x6485('0x13')](_0x3bf1f6,{'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')]});_0x19255a['extensions'][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':_0x6485('0x16'),'appdata':util[_0x6485('0x17')]('CDR(type)=%s',_0x3134ae[_0xbade68][0x0][_0x6485('0x15')]),'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'priority':_0x19255a['priority']++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});if(_0x3134ae[_0xbade68][0x0][_0x6485('0x15')]===_0x6485('0x1a')){if(_0x19255a[_0x6485('0x1b')]){_0x19255a[_0x6485('0x12')][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0]['type'],'app':_0x6485('0x16'),'appdata':_0x6485('0x1c')+(_0x19255a['extension']['cutdigits']?_0x6485('0x1d')+_0x19255a[_0x6485('0x1b')]['cutdigits']+'}':_0x6485('0x1e')),'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'priority':_0x19255a['priority']++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});}_0x19255a[_0x6485('0x12')][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':'Set','appdata':'CDR(routeid)='+_0x3134ae[_0xbade68][0x0][_0x6485('0x19')],'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0]['exten'],'priority':_0x19255a[_0x6485('0x1f')]++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});var _0x236cd7=_0x19255a[_0x6485('0x1f')]++;_0x19255a[_0x6485('0x12')]['push']({'type':_0x3134ae[_0xbade68][0x0]['type'],'app':_0x6485('0x20'),'appdata':'$[${LEN(${CDR(prefix)})}\x20>\x200]?Goto('+(_0x236cd7+0x2)+_0x6485('0x21')+(_0x236cd7+0x1)+')','context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0]['exten'],'priority':_0x236cd7,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});if(_0x19255a[_0x6485('0x1b')]){_0x19255a[_0x6485('0x12')][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':'Set','appdata':_0x19255a[_0x6485('0x1b')]['cutdigits']?_0x6485('0x22')+_0x19255a['extension'][_0x6485('0x23')]+'}':_0x6485('0x24'),'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'priority':_0x19255a[_0x6485('0x1f')]++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});}_0x19255a['extensions']['push']({'type':_0x3134ae[_0xbade68][0x0]['type'],'app':_0x6485('0x16'),'appdata':_0x6485('0x25')+_0x3134ae[_0xbade68][0x0][_0x6485('0x19')],'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'priority':_0x19255a[_0x6485('0x1f')]++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});if(_0x19255a[_0x6485('0x1b')]&&_0x19255a[_0x6485('0x1b')]['hasOwnProperty'](_0x6485('0x26'))&&_0x19255a['extension'][_0x6485('0x26')]!=='none'){_0x19255a[_0x6485('0x12')][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':'Set','appdata':_0x6485('0x27'),'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'priority':_0x19255a[_0x6485('0x1f')]++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});_0x19255a['extensions'][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':_0x6485('0x16'),'appdata':_0x6485('0x28')+_0x19255a[_0x6485('0x1b')][_0x6485('0x26')]||_0x6485('0x29'),'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'priority':_0x19255a[_0x6485('0x1f')]++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});}}_0x19255a['extensions'][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':'Set','appdata':_0x6485('0x2a'),'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0]['exten'],'priority':_0x19255a[_0x6485('0x1f')]++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0]['VoiceExtensionId']});_0x19255a[_0x6485('0x12')][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':'Set','appdata':_0x6485('0x2b'),'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'priority':_0x19255a['priority']++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});_0x19255a['extensions'][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':_0x6485('0x16'),'appdata':_0x6485('0x2c'),'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'priority':_0x19255a[_0x6485('0x1f')]++,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});for(var _0x5c9cc5=0x0,_0x22ca31=0x0;_0x5c9cc5<_0x3134ae[_0xbade68][_0x6485('0x2d')];_0x5c9cc5+=0x1,_0x22ca31=0x0){var _0x2ed9fb=_0x3134ae[_0xbade68][_0x5c9cc5];if(_0x2ed9fb[_0x6485('0x15')]){_0x2ed9fb[_0x6485('0x15')]=_0x2ed9fb['type']['toLowerCase']();}var _0x5cf471=[];var _0x28a5fd=[];delete _0x2ed9fb['id'];delete _0x2ed9fb[_0x6485('0x2e')];delete _0x2ed9fb['updatedAt'];var _0x2da346=_0x2ed9fb[_0x6485('0x2f')]!==_0x6485('0x30')?[_0x2ed9fb[_0x6485('0x2f')]]:_0x2ed9fb[_0x6485('0x8')]?_[_0x6485('0xa')](_['filter'](_0x19255a['intervals'],{'IntervalId':_0x2ed9fb[_0x6485('0x8')]}),_0x6485('0x2f')):[];if(_0x2ed9fb['hasOwnProperty']('tag')){if(_0x2ed9fb[_0x6485('0x31')]&&_0x2ed9fb[_0x6485('0x31')]!=='--'){_0x5cf471[_0x6485('0x14')]({'type':_0x2ed9fb[_0x6485('0x15')],'app':_0x6485('0x16'),'appdata':_0x6485('0x32')+_0x2ed9fb[_0x6485('0x31')],'context':_0x2ed9fb['context'],'exten':_0x2ed9fb[_0x6485('0xb')],'priority':_0x2da346[_0x6485('0x2d')]+_0x19255a[_0x6485('0x1f')]+_0x22ca31++,'VoiceExtensionId':_0x2ed9fb[_0x6485('0x19')]});}}if(_0x2ed9fb[_0x6485('0x15')]===_0x6485('0x1a')&&_0x2ed9fb[_0x6485('0x11')]('callerID')){if(_0x2ed9fb[_0x6485('0x33')]){_0x5cf471[_0x6485('0x14')]({'type':_0x2ed9fb['type'],'app':_0x6485('0x20'),'appdata':_0x6485('0x34')+_0x2ed9fb[_0x6485('0x33')]+')','context':_0x2ed9fb[_0x6485('0x18')],'exten':_0x2ed9fb[_0x6485('0xb')],'priority':_0x2da346['length']+_0x19255a[_0x6485('0x1f')]+_0x22ca31++,'VoiceExtensionId':_0x2ed9fb[_0x6485('0x19')]});}else{_0x5cf471[_0x6485('0x14')]({'type':_0x2ed9fb[_0x6485('0x15')],'app':_0x6485('0x20'),'appdata':'$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No\x20number\x20available)','context':_0x2ed9fb[_0x6485('0x18')],'exten':_0x2ed9fb[_0x6485('0xb')],'priority':_0x2da346[_0x6485('0x2d')]+_0x19255a['priority']+_0x22ca31++,'VoiceExtensionId':_0x2ed9fb[_0x6485('0x19')]});}}if(_0x2ed9fb[_0x6485('0x11')]('answer')){if(_0x3641c8[_0x6485('0x35')](_0x2ed9fb[_0x6485('0x36')][_0x6485('0x37')]())>=0x0&&_0x2ed9fb[_0x6485('0x38')]!=='custom'){if(_0x2ed9fb[_0x6485('0x39')]){_0x5cf471[_0x6485('0x14')]({'type':_0x2ed9fb[_0x6485('0x15')],'app':'ExecIf','appdata':_0x6485('0x3a'),'context':_0x2ed9fb['context'],'exten':_0x2ed9fb[_0x6485('0xb')],'priority':_0x2da346[_0x6485('0x2d')]+_0x19255a[_0x6485('0x1f')]+_0x22ca31++,'VoiceExtensionId':_0x2ed9fb[_0x6485('0x19')]});_0x5cf471[_0x6485('0x14')]({'type':_0x2ed9fb['type'],'app':_0x6485('0x16'),'appdata':_0x6485('0x3b'),'context':_0x2ed9fb[_0x6485('0x18')],'exten':_0x2ed9fb[_0x6485('0xb')],'priority':_0x2da346[_0x6485('0x2d')]+_0x19255a['priority']+_0x22ca31++,'VoiceExtensionId':_0x2ed9fb[_0x6485('0x19')]});}else{_0x5cf471[_0x6485('0x14')]({'type':_0x2ed9fb[_0x6485('0x15')],'app':_0x6485('0x20'),'appdata':_0x6485('0x3c'),'context':_0x2ed9fb[_0x6485('0x18')],'exten':_0x2ed9fb[_0x6485('0xb')],'priority':_0x2da346[_0x6485('0x2d')]+_0x19255a[_0x6485('0x1f')]+_0x22ca31++,'VoiceExtensionId':_0x2ed9fb[_0x6485('0x19')]});_0x5cf471[_0x6485('0x14')]({'type':_0x2ed9fb['type'],'app':_0x6485('0x16'),'appdata':_0x6485('0x3d'),'context':_0x2ed9fb[_0x6485('0x18')],'exten':_0x2ed9fb[_0x6485('0xb')],'priority':_0x2da346[_0x6485('0x2d')]+_0x19255a['priority']+_0x22ca31++,'VoiceExtensionId':_0x2ed9fb[_0x6485('0x19')]});}}}for(var _0x554729=0x0;_0x554729<_0x2da346['length'];_0x554729+=0x1){var _0x249b83=_0x19255a[_0x6485('0x1f')]+_0x2da346[_0x6485('0x2d')];var _0xa0505=_0x554729===_0x2da346['length']-0x1?_0x19255a[_0x6485('0x1f')]+_0x5cf471[_0x6485('0x2d')]+_0x28a5fd[_0x6485('0x2d')]+0x2:_0x19255a[_0x6485('0x1f')]+_0x554729+0x1;_0x5cf471[_0x6485('0x3e')](_0x554729,0x0,{'type':_0x2ed9fb[_0x6485('0x15')],'app':_0x6485('0x3f'),'appdata':_0x2da346[_0x554729]+'?'+_0x2ed9fb['context']+',${EXTEN},'+_0x249b83+':'+_0x2ed9fb[_0x6485('0x18')]+',${EXTEN},'+_0xa0505,'exten':_0x2ed9fb[_0x6485('0xb')],'context':_0x2ed9fb['context'],'priority':_0x19255a['priority']+_0x554729,'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});}_0x2ed9fb[_0x6485('0x1f')]=_0x5cf471[_0x6485('0x2d')]?_[_0x6485('0x40')](_0x5cf471)[_0x6485('0x1f')]+0x1:_0x19255a['priority'];_0x19255a[_0x6485('0x1f')]=(_0x28a5fd[_0x6485('0x2d')]?_['last'](_0x28a5fd)[_0x6485('0x1f')]:_0x2ed9fb[_0x6485('0x1f')])+0x1;_0x19255a[_0x6485('0x12')]=_[_0x6485('0x41')](_0x19255a[_0x6485('0x12')],_0x5cf471,[_0x2ed9fb],_0x28a5fd);}_0x19255a['extensions'][_0x6485('0x14')]({'type':_0x3134ae[_0xbade68][0x0][_0x6485('0x15')],'app':_0x6485('0x42'),'exten':_0x3134ae[_0xbade68][0x0][_0x6485('0xb')],'context':_0x3134ae[_0xbade68][0x0][_0x6485('0x18')],'priority':_0x19255a[_0x6485('0x1f')],'VoiceExtensionId':_0x3134ae[_0xbade68][0x0][_0x6485('0x19')]});_0x3c2ad8[_0x6485('0x14')](_0x3134ae[_0xbade68][0x0]['VoiceExtensionId']);_0x4b7e6e=_['concat'](_0x4b7e6e,_0x19255a[_0x6485('0x12')]);}}return _0x4079a8[_0x6485('0x43')](function(_0x26a01b){return _0x4079a8[_0x6485('0x2')]['VoiceExtension'][_0x6485('0x44')]({'where':{'VoiceExtensionId':{'$in':_0x3c2ad8}},'transaction':_0x26a01b})[_0x6485('0x4')](function(_0x279677){return _0x4079a8[_0x6485('0x2')][_0x6485('0x6')]['bulkCreate'](_[_0x6485('0x45')](_0x4b7e6e,_0x6485('0x1f')),{'transaction':_0x26a01b});});});})[_0x6485('0x46')](function(_0x2aec29){console[_0x6485('0x47')](_0x2aec29);});}exports[_0x6485('0x48')]=rewrite;
\ No newline at end of file
+var _0x7c88=['CDR(destination)=','cutdigits','${EXTEN:','CDR(routeid)=','CDR(prefix)=${EXTEN:0:','CDR(prefix)=noprefix','outboundrouteid=','recordingFormat','none','_XCALLY_MIXMONITOR_UNIQUEID=${UNIQUEID}','_XCALLY_MIXMONITOR_FORMAT=','wav','XCALLY-MOTION-ANSWER=0','XCALLY-MOTION-PROGRESS=0','MONITOR_OPTIONS=ab','length','toLowerCase','createdAt','updatedAt','interval','*,*,*,*','tag','CDR(tag)=','callerID','ExecIf','$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):Set(CALLERID(all)=','indexOf','appType','custom','answer','$[${XCALLY-MOTION-ANSWER}=0]?Answer','XCALLY-MOTION-ANSWER=1','$[${XCALLY-MOTION-PROGRESS}=0]?Progress','splice',',${EXTEN},','last','concat','Hangup','transaction','VoiceExtension','destroy','bulkCreate','sortBy','catch','error','rewrite','lodash','models','Interval','findAll','then','intervals','IntervalId','uniq','map','exten','CAST(priority\x20AS\x20UNSIGNED)','filter','groupBy','queue','playback','hasOwnProperty','priority','extensions','extension','find','push','type','Set','format','CDR(type)=%s','context','VoiceExtensionId','outbound'];(function(_0x14c44d,_0x1fb771){var _0x5b2040=function(_0x2c59b5){while(--_0x2c59b5){_0x14c44d['push'](_0x14c44d['shift']());}};_0x5b2040(++_0x1fb771);}(_0x7c88,0x1ea));var _0x87c8=function(_0xcfebd6,_0xc330c){_0xcfebd6=_0xcfebd6-0x0;var _0x585553=_0x7c88[_0xcfebd6];return _0x585553;};'use strict';var _=require(_0x87c8('0x0'));var util=require('util');function rewrite(_0x3188cc,_0xa6432){var _0x532f29=this;return _0x3188cc[_0x87c8('0x1')][_0x87c8('0x2')][_0x87c8('0x3')]({'raw':!![]})[_0x87c8('0x4')](function(_0x508fe9){_0x532f29[_0x87c8('0x5')]=_0x508fe9;return _0x3188cc[_0x87c8('0x1')]['VoiceExtension'][_0x87c8('0x3')]({'where':{'IntervalId':_0xa6432[_0x87c8('0x6')]},'raw':!![]});})[_0x87c8('0x4')](function(_0x31779c){return _0x3188cc[_0x87c8('0x1')]['VoiceExtension']['findAll']({'where':{'exten':{'$in':_[_0x87c8('0x7')](_[_0x87c8('0x8')](_0x31779c,_0x87c8('0x9')))}},'order':[{'raw':_0x87c8('0xa')}],'raw':!![]});})[_0x87c8('0x4')](function(_0x207160){var _0x3a5a03=_[_0x87c8('0xb')](_0x207160,{'priority':'1'});var _0x210f90=_[_0x87c8('0xb')](_0x207160,{'isApp':0x1});var _0x741235=_[_0x87c8('0xc')](_0x210f90,_0x87c8('0x9'));var _0x3d81e7=[_0x87c8('0xd'),_0x87c8('0xe')];var _0x6ab824=[];var _0x465c13=[];for(var _0x197860 in _0x741235){if(_0x741235[_0x87c8('0xf')](_0x197860)){_0x532f29[_0x87c8('0x10')]=0x2;_0x532f29[_0x87c8('0x11')]=[];_0x532f29[_0x87c8('0x12')]=_[_0x87c8('0x13')](_0x3a5a03,{'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')]});_0x532f29['extensions'][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0][_0x87c8('0x15')],'app':_0x87c8('0x16'),'appdata':util[_0x87c8('0x17')](_0x87c8('0x18'),_0x741235[_0x197860][0x0][_0x87c8('0x15')]),'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29[_0x87c8('0x10')]++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});if(_0x741235[_0x197860][0x0][_0x87c8('0x15')]===_0x87c8('0x1b')){if(_0x532f29[_0x87c8('0x12')]){_0x532f29[_0x87c8('0x11')][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0]['type'],'app':_0x87c8('0x16'),'appdata':_0x87c8('0x1c')+(_0x532f29[_0x87c8('0x12')][_0x87c8('0x1d')]?_0x87c8('0x1e')+_0x532f29[_0x87c8('0x12')][_0x87c8('0x1d')]+'}':'${EXTEN}'),'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29['priority']++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});}_0x532f29['extensions'][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0][_0x87c8('0x15')],'app':'Set','appdata':_0x87c8('0x1f')+_0x741235[_0x197860][0x0][_0x87c8('0x1a')],'context':_0x741235[_0x197860][0x0]['context'],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29[_0x87c8('0x10')]++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});var _0x2701c5=_0x532f29[_0x87c8('0x10')]++;_0x532f29[_0x87c8('0x11')]['push']({'type':_0x741235[_0x197860][0x0][_0x87c8('0x15')],'app':'ExecIf','appdata':'$[${LEN(${CDR(prefix)})}\x20>\x200]?Goto('+(_0x2701c5+0x2)+'):Goto('+(_0x2701c5+0x1)+')','context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x2701c5,'VoiceExtensionId':_0x741235[_0x197860][0x0]['VoiceExtensionId']});if(_0x532f29[_0x87c8('0x12')]){_0x532f29['extensions'][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0][_0x87c8('0x15')],'app':_0x87c8('0x16'),'appdata':_0x532f29[_0x87c8('0x12')][_0x87c8('0x1d')]?_0x87c8('0x20')+_0x532f29[_0x87c8('0x12')][_0x87c8('0x1d')]+'}':_0x87c8('0x21'),'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29[_0x87c8('0x10')]++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});}_0x532f29[_0x87c8('0x11')][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0][_0x87c8('0x15')],'app':_0x87c8('0x16'),'appdata':_0x87c8('0x22')+_0x741235[_0x197860][0x0]['VoiceExtensionId'],'context':_0x741235[_0x197860][0x0]['context'],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29['priority']++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});if(_0x532f29['extension']&&_0x532f29['extension']['hasOwnProperty'](_0x87c8('0x23'))&&_0x532f29[_0x87c8('0x12')][_0x87c8('0x23')]!==_0x87c8('0x24')){_0x532f29[_0x87c8('0x11')][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0][_0x87c8('0x15')],'app':_0x87c8('0x16'),'appdata':_0x87c8('0x25'),'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29[_0x87c8('0x10')]++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});_0x532f29[_0x87c8('0x11')][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0]['type'],'app':_0x87c8('0x16'),'appdata':_0x87c8('0x26')+_0x532f29[_0x87c8('0x12')][_0x87c8('0x23')]||_0x87c8('0x27'),'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29[_0x87c8('0x10')]++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});}}_0x532f29[_0x87c8('0x11')][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0][_0x87c8('0x15')],'app':_0x87c8('0x16'),'appdata':_0x87c8('0x28'),'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0]['exten'],'priority':_0x532f29[_0x87c8('0x10')]++,'VoiceExtensionId':_0x741235[_0x197860][0x0]['VoiceExtensionId']});_0x532f29[_0x87c8('0x11')][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0]['type'],'app':'Set','appdata':_0x87c8('0x29'),'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29[_0x87c8('0x10')]++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});_0x532f29['extensions'][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0]['type'],'app':_0x87c8('0x16'),'appdata':_0x87c8('0x2a'),'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'priority':_0x532f29[_0x87c8('0x10')]++,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});for(var _0x55b217=0x0,_0x434bbb=0x0;_0x55b217<_0x741235[_0x197860][_0x87c8('0x2b')];_0x55b217+=0x1,_0x434bbb=0x0){var _0x10cc87=_0x741235[_0x197860][_0x55b217];if(_0x10cc87[_0x87c8('0x15')]){_0x10cc87[_0x87c8('0x15')]=_0x10cc87['type'][_0x87c8('0x2c')]();}var _0x1bbdf1=[];var _0x1a7efe=[];delete _0x10cc87['id'];delete _0x10cc87[_0x87c8('0x2d')];delete _0x10cc87[_0x87c8('0x2e')];var _0x678329=_0x10cc87[_0x87c8('0x2f')]!==_0x87c8('0x30')?[_0x10cc87[_0x87c8('0x2f')]]:_0x10cc87[_0x87c8('0x6')]?_[_0x87c8('0x8')](_[_0x87c8('0xb')](_0x532f29['intervals'],{'IntervalId':_0x10cc87['IntervalId']}),_0x87c8('0x2f')):[];if(_0x10cc87['hasOwnProperty']('tag')){if(_0x10cc87[_0x87c8('0x31')]&&_0x10cc87[_0x87c8('0x31')]!=='--'){_0x1bbdf1[_0x87c8('0x14')]({'type':_0x10cc87[_0x87c8('0x15')],'app':_0x87c8('0x16'),'appdata':_0x87c8('0x32')+_0x10cc87['tag'],'context':_0x10cc87[_0x87c8('0x19')],'exten':_0x10cc87[_0x87c8('0x9')],'priority':_0x678329[_0x87c8('0x2b')]+_0x532f29[_0x87c8('0x10')]+_0x434bbb++,'VoiceExtensionId':_0x10cc87[_0x87c8('0x1a')]});}}if(_0x10cc87[_0x87c8('0x15')]===_0x87c8('0x1b')&&_0x10cc87[_0x87c8('0xf')](_0x87c8('0x33'))){if(_0x10cc87[_0x87c8('0x33')]){_0x1bbdf1[_0x87c8('0x14')]({'type':_0x10cc87['type'],'app':_0x87c8('0x34'),'appdata':_0x87c8('0x35')+_0x10cc87[_0x87c8('0x33')]+')','context':_0x10cc87[_0x87c8('0x19')],'exten':_0x10cc87[_0x87c8('0x9')],'priority':_0x678329[_0x87c8('0x2b')]+_0x532f29[_0x87c8('0x10')]+_0x434bbb++,'VoiceExtensionId':_0x10cc87['VoiceExtensionId']});}else{_0x1bbdf1[_0x87c8('0x14')]({'type':_0x10cc87[_0x87c8('0x15')],'app':_0x87c8('0x34'),'appdata':'$[${LEN(${PREFIX-CALLERIDALL})}\x20>\x200]?Set(CALLERID(all)=${PREFIX-CALLERIDALL}):NoOp(No\x20number\x20available)','context':_0x10cc87[_0x87c8('0x19')],'exten':_0x10cc87['exten'],'priority':_0x678329[_0x87c8('0x2b')]+_0x532f29['priority']+_0x434bbb++,'VoiceExtensionId':_0x10cc87[_0x87c8('0x1a')]});}}if(_0x10cc87['hasOwnProperty']('answer')){if(_0x3d81e7[_0x87c8('0x36')](_0x10cc87['app'][_0x87c8('0x2c')]())>=0x0&&_0x10cc87[_0x87c8('0x37')]!==_0x87c8('0x38')){if(_0x10cc87[_0x87c8('0x39')]){_0x1bbdf1[_0x87c8('0x14')]({'type':_0x10cc87[_0x87c8('0x15')],'app':_0x87c8('0x34'),'appdata':_0x87c8('0x3a'),'context':_0x10cc87[_0x87c8('0x19')],'exten':_0x10cc87[_0x87c8('0x9')],'priority':_0x678329[_0x87c8('0x2b')]+_0x532f29['priority']+_0x434bbb++,'VoiceExtensionId':_0x10cc87['VoiceExtensionId']});_0x1bbdf1[_0x87c8('0x14')]({'type':_0x10cc87['type'],'app':_0x87c8('0x16'),'appdata':_0x87c8('0x3b'),'context':_0x10cc87[_0x87c8('0x19')],'exten':_0x10cc87[_0x87c8('0x9')],'priority':_0x678329[_0x87c8('0x2b')]+_0x532f29[_0x87c8('0x10')]+_0x434bbb++,'VoiceExtensionId':_0x10cc87[_0x87c8('0x1a')]});}else{_0x1bbdf1['push']({'type':_0x10cc87[_0x87c8('0x15')],'app':'ExecIf','appdata':_0x87c8('0x3c'),'context':_0x10cc87[_0x87c8('0x19')],'exten':_0x10cc87['exten'],'priority':_0x678329[_0x87c8('0x2b')]+_0x532f29[_0x87c8('0x10')]+_0x434bbb++,'VoiceExtensionId':_0x10cc87[_0x87c8('0x1a')]});_0x1bbdf1['push']({'type':_0x10cc87[_0x87c8('0x15')],'app':_0x87c8('0x16'),'appdata':'XCALLY-MOTION-PROGRESS=1','context':_0x10cc87['context'],'exten':_0x10cc87[_0x87c8('0x9')],'priority':_0x678329[_0x87c8('0x2b')]+_0x532f29['priority']+_0x434bbb++,'VoiceExtensionId':_0x10cc87['VoiceExtensionId']});}}}for(var _0x1b30c0=0x0;_0x1b30c0<_0x678329['length'];_0x1b30c0+=0x1){var _0x1f4b86=_0x532f29[_0x87c8('0x10')]+_0x678329['length'];var _0x213851=_0x1b30c0===_0x678329[_0x87c8('0x2b')]-0x1?_0x532f29['priority']+_0x1bbdf1[_0x87c8('0x2b')]+_0x1a7efe[_0x87c8('0x2b')]+0x2:_0x532f29[_0x87c8('0x10')]+_0x1b30c0+0x1;_0x1bbdf1[_0x87c8('0x3d')](_0x1b30c0,0x0,{'type':_0x10cc87[_0x87c8('0x15')],'app':'GotoIfTime','appdata':_0x678329[_0x1b30c0]+'?'+_0x10cc87['context']+_0x87c8('0x3e')+_0x1f4b86+':'+_0x10cc87[_0x87c8('0x19')]+_0x87c8('0x3e')+_0x213851,'exten':_0x10cc87[_0x87c8('0x9')],'context':_0x10cc87[_0x87c8('0x19')],'priority':_0x532f29[_0x87c8('0x10')]+_0x1b30c0,'VoiceExtensionId':_0x741235[_0x197860][0x0][_0x87c8('0x1a')]});}_0x10cc87[_0x87c8('0x10')]=_0x1bbdf1[_0x87c8('0x2b')]?_[_0x87c8('0x3f')](_0x1bbdf1)['priority']+0x1:_0x532f29[_0x87c8('0x10')];_0x532f29['priority']=(_0x1a7efe['length']?_[_0x87c8('0x3f')](_0x1a7efe)[_0x87c8('0x10')]:_0x10cc87[_0x87c8('0x10')])+0x1;_0x532f29['extensions']=_[_0x87c8('0x40')](_0x532f29[_0x87c8('0x11')],_0x1bbdf1,[_0x10cc87],_0x1a7efe);}_0x532f29['extensions'][_0x87c8('0x14')]({'type':_0x741235[_0x197860][0x0][_0x87c8('0x15')],'app':_0x87c8('0x41'),'exten':_0x741235[_0x197860][0x0][_0x87c8('0x9')],'context':_0x741235[_0x197860][0x0][_0x87c8('0x19')],'priority':_0x532f29[_0x87c8('0x10')],'VoiceExtensionId':_0x741235[_0x197860][0x0]['VoiceExtensionId']});_0x6ab824[_0x87c8('0x14')](_0x741235[_0x197860][0x0]['VoiceExtensionId']);_0x465c13=_[_0x87c8('0x40')](_0x465c13,_0x532f29['extensions']);}}return _0x3188cc[_0x87c8('0x42')](function(_0x29668b){return _0x3188cc['models'][_0x87c8('0x43')][_0x87c8('0x44')]({'where':{'VoiceExtensionId':{'$in':_0x6ab824}},'transaction':_0x29668b})[_0x87c8('0x4')](function(_0x39c6b3){return _0x3188cc['models'][_0x87c8('0x43')][_0x87c8('0x45')](_[_0x87c8('0x46')](_0x465c13,'priority'),{'transaction':_0x29668b});});});})[_0x87c8('0x47')](function(_0xcad66d){console[_0x87c8('0x48')](_0xcad66d);});}exports[_0x87c8('0x49')]=rewrite;
\ No newline at end of file
index 6f7b142..9df933d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3fce=['Campaign','always','sequelize','CampaignId','onlyIfOpen','cmContact,\x20%s,\x20%s','generalCheckHopper','finally','resolve','emit','contact:csv_','Unable\x20to\x20delete\x20temp\x20file:','exit','SIGINT','CSV\x20import\x20process\x20stopped!','parse','pause','info','CSV\x20parsed\x20correctly!','CSV\x20parse\x20error','bluebird','util','lodash','squel','ioredis','../../../mysqldb','../../../config/environment','../../../config/logger','api','redis','defaults','localhost','socket.io-emitter','register','argv','undefined','Missing\x20filepath\x20parameter!','null','Missing\x20binding\x20parameters!','zipObject','split','Missing\x20socket_timestamp\x20parameter!','error','contact','index','test','isNil','The\x20row\x20is\x20empty\x20or\x20the\x20number\x20of\x20parameters\x20does\x20not\x20match\x20the\x20columns!','errors','map','hasOwnProperty','data','firstName','firstName\x20not\x20specified!','phone','birthDate','YYYY-MM-DD','birthDate\x20format\x20is\x20invalid,\x20YYYY-MM-DD\x20format\x20is\x20supported!','email','email\x20format\x20is\x20not\x20valid!','CompanyId','length','find','duplicate','Duplicate\x20Contact','create','then','push','pick','catch','Error\x20while\x20creating\x20contact:\x20','message','stringify','cmContact','checkHopper','inspect','into','cm_hopper','fromQuery','scheduledAt','ContactId','ListId','createdAt','select','field','NOW()','toString','from','cm_contacts','where','deletedAt\x20IS\x20NULL','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','\x20=\x20?','insert','updatedAt','ListId\x20=\x20?','id\x20IN\x20?','str','calleridnum','cm_hopper_final','cm_hopper_black','VoiceQueue','outbound','dialCheckDuplicateType','Lists','query','VoiceQueueId','all','findAll','CmList','BlackLists','get'];(function(_0x37de56,_0x46ffa3){var _0x2748d1=function(_0x247fef){while(--_0x247fef){_0x37de56['push'](_0x37de56['shift']());}};_0x2748d1(++_0x46ffa3);}(_0x3fce,0x167));var _0xe3fc=function(_0x2cacef,_0xba1573){_0x2cacef=_0x2cacef-0x0;var _0x289ba6=_0x3fce[_0x2cacef];return _0x289ba6;};'use strict';var BPromise=require(_0xe3fc('0x0'));var util=require(_0xe3fc('0x1'));var _=require(_0xe3fc('0x2'));var fs=require('fs');var squel=require(_0xe3fc('0x3'));var Papa=require('papaparse');var Redis=require(_0xe3fc('0x4'));var db=require(_0xe3fc('0x5'))['db'];var config=require(_0xe3fc('0x6'));var logger=require(_0xe3fc('0x7'))(_0xe3fc('0x8'));config[_0xe3fc('0x9')]=_[_0xe3fc('0xa')](config['redis'],{'host':_0xe3fc('0xb'),'port':0x18eb});var socket=require(_0xe3fc('0xc'))(new Redis(config[_0xe3fc('0x9')]));require('../../../api/cmContact/cmContact.socket')[_0xe3fc('0xd')](socket);try{if(!process[_0xe3fc('0xe')][0x2]||process[_0xe3fc('0xe')][0x2]===_0xe3fc('0xf')||process[_0xe3fc('0xe')][0x2]==='null'){throw new Error(_0xe3fc('0x10'));}var FILEPATH=process[_0xe3fc('0xe')][0x2];if(!process['argv'][0x3]||process[_0xe3fc('0xe')][0x3]===_0xe3fc('0xf')||process[_0xe3fc('0xe')][0x3]===_0xe3fc('0x11')||!process[_0xe3fc('0xe')][0x4]||process[_0xe3fc('0xe')][0x4]===_0xe3fc('0xf')||process[_0xe3fc('0xe')][0x4]===_0xe3fc('0x11')){throw new Error(_0xe3fc('0x12'));}var FIELDS=_[_0xe3fc('0x13')](process[_0xe3fc('0xe')][0x3][_0xe3fc('0x14')](','),process[_0xe3fc('0xe')][0x4][_0xe3fc('0x14')](','));if(!process[_0xe3fc('0xe')][0x5]||process['argv'][0x5]===_0xe3fc('0xf')||process['argv'][0x5]===_0xe3fc('0x11')){throw new Error('Missing\x20ListId\x20parameter!');}var LISTID=process[_0xe3fc('0xe')][0x5];var COMPANYID=process[_0xe3fc('0xe')][0x6]&&process['argv'][0x6]!==_0xe3fc('0xf')&&process[_0xe3fc('0xe')][0x6]!==_0xe3fc('0x11')?process[_0xe3fc('0xe')][0x6]:null;var DUPLICATES=process[_0xe3fc('0xe')][0x7]&&process[_0xe3fc('0xe')][0x7]!==_0xe3fc('0xf')&&process[_0xe3fc('0xe')][0x7]!==_0xe3fc('0x11')?process['argv'][0x7]:null;if(!process[_0xe3fc('0xe')][0x8]||process[_0xe3fc('0xe')][0x8]===_0xe3fc('0xf')||process[_0xe3fc('0xe')][0x8]===_0xe3fc('0x11')){throw new Error(_0xe3fc('0x15'));}var SOCKET_TIMESTAMP=process[_0xe3fc('0xe')][0x8];}catch(_0x5334b0){logger[_0xe3fc('0x16')](_0x5334b0);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(_0x5eec1e,_0xb9b733,_0x279dd6,_0x1b0041){var _0x12f6cb={'message':_0xb9b733};_0x12f6cb[_0x5eec1e]=!![];if(_0x279dd6){_0x12f6cb[_0xe3fc('0x17')]=_0x279dd6;}if(_0x1b0041){_0x12f6cb[_0xe3fc('0x18')]=_0x1b0041;}return _0x12f6cb;}function isEmail(_0x4ee558){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))*$/[_0xe3fc('0x19')](_0x4ee558);}function checkRow(_0x3b0e2a,_0x11ae72,_0x39c0bd){return new BPromise(function(_0x14f28c,_0x2408f6){if(_[_0xe3fc('0x1a')](_0x3b0e2a)){return _0x2408f6(handleCheckRowError(_0xe3fc('0x16'),_0xe3fc('0x1b'),null,_0x39c0bd));}if(_0x3b0e2a[_0xe3fc('0x1c')]&&_0x3b0e2a[_0xe3fc('0x1c')]['length']){var _0x46128e=_[_0xe3fc('0x1d')](_0x3b0e2a['errors'],'message')['join'](';');return _0x2408f6(handleCheckRowError(_0xe3fc('0x16'),_0x46128e,null,_0x39c0bd));}var _0x4a55d2={};for(var _0x76a4a9 in FIELDS){if(FIELDS[_0xe3fc('0x1e')](_0x76a4a9)&&FIELDS[_0x76a4a9]){_0x4a55d2[_0x76a4a9]=_0x3b0e2a[_0xe3fc('0x1f')][0x0][FIELDS[_0x76a4a9]]||_0x3b0e2a['data'][0x0]['\ufeff'+FIELDS[_0x76a4a9]];}}if(!_0x4a55d2[_0xe3fc('0x20')]){return _0x2408f6(handleCheckRowError(_0xe3fc('0x16'),_0xe3fc('0x21'),null,_0x39c0bd));}if(!_0x4a55d2[_0xe3fc('0x22')]){return _0x2408f6(handleCheckRowError('error','phone\x20not\x20specified!',null,_0x39c0bd));}if(_0x4a55d2[_0xe3fc('0x23')]){var _0x4ee1b0=moment(_0x4a55d2[_0xe3fc('0x23')],_0xe3fc('0x24'));if(!_0x4ee1b0['isValid']()){return _0x2408f6(handleCheckRowError(_0xe3fc('0x16'),_0xe3fc('0x25'),null,_0x39c0bd));}}if(_0x4a55d2[_0xe3fc('0x26')]){if(!isEmail(_0x4a55d2[_0xe3fc('0x26')])){return _0x2408f6(handleCheckRowError(_0xe3fc('0x16'),_0xe3fc('0x27'),null,_0x39c0bd));}}_0x4a55d2['ListId']=LISTID;_0x4a55d2[_0xe3fc('0x28')]=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES['length']&&_0x11ae72){var _0x53a3cc={};for(var _0x43a5ae=0x0,_0x4588ff=DUPLICATES[_0xe3fc('0x29')];_0x43a5ae<_0x4588ff;_0x43a5ae+=0x1){_0x53a3cc[DUPLICATES[_0x43a5ae]]=_0x4a55d2[DUPLICATES[_0x43a5ae]];}var _0x266f23=_[_0xe3fc('0x2a')](_0x11ae72,_0x53a3cc);if(_0x266f23){return _0x2408f6(handleCheckRowError(_0xe3fc('0x2b'),_0xe3fc('0x2c'),_0x266f23,_0x39c0bd));}}return db['CmContact'][_0xe3fc('0x2d')](_0x4a55d2,{'raw':!![],'hooks':![],'fields':_['keys'](_0x4a55d2)})[_0xe3fc('0x2e')](function(_0x20b61b){if(DUPLICATES&&DUPLICATES['length']&&_0x11ae72){_0x11ae72[_0xe3fc('0x2f')](_[_0xe3fc('0x30')](_0x4a55d2,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0x20b61b['id'];return _0x14f28c();})[_0xe3fc('0x31')](function(_0x336395){return _0x2408f6(handleCheckRowError('error',_0xe3fc('0x32')+(_0x336395[_0xe3fc('0x33')]||JSON[_0xe3fc('0x34')](_0x336395)),null,_0x39c0bd));});});}function checkHopper(){function _0x4e339f(){return function(_0x17289e){logger[_0xe3fc('0x16')](_0xe3fc('0x35'),_0xe3fc('0x36'),util[_0xe3fc('0x37')](_0x17289e,{'showHidden':![],'depth':null}));};}var _0x33b305=function(_0x2c4364,_0x16dc7e){var _0x1623ca=squel['insert']()[_0xe3fc('0x38')](_0xe3fc('0x39'))[_0xe3fc('0x3a')](['phone',_0xe3fc('0x3b'),_0xe3fc('0x3c'),_0xe3fc('0x3d'),_0x16dc7e,_0xe3fc('0x3e'),'updatedAt'],squel[_0xe3fc('0x3f')]()[_0xe3fc('0x40')]('phone',_0xe3fc('0x22'))['field'](_0xe3fc('0x41'),_0xe3fc('0x3b'))['field']('id',_0xe3fc('0x3c'))[_0xe3fc('0x40')](LISTID['toString'](),_0xe3fc('0x3d'))[_0xe3fc('0x40')](_0x2c4364['id'][_0xe3fc('0x42')](),_0x16dc7e)[_0xe3fc('0x40')](_0xe3fc('0x41'),'createdAt')['field'](_0xe3fc('0x41'),'updatedAt')[_0xe3fc('0x43')](_0xe3fc('0x44'))[_0xe3fc('0x45')](_0xe3fc('0x46'))[_0xe3fc('0x45')]('ListId\x20=\x20?',LISTID[_0xe3fc('0x42')]())[_0xe3fc('0x45')](_0xe3fc('0x47'))['where'](_0xe3fc('0x48'),squel[_0xe3fc('0x3f')]()[_0xe3fc('0x40')](_0xe3fc('0x22'))[_0xe3fc('0x43')]('cm_hopper')[_0xe3fc('0x45')](_0x16dc7e+_0xe3fc('0x49'),_0x2c4364['id'][_0xe3fc('0x42')]())))['toString']();return _0x1623ca;};var _0x1dccdc=function(_0x406e03,_0x4024d0){var _0x5d1a12=squel[_0xe3fc('0x4a')]()['into'](_0xe3fc('0x39'))[_0xe3fc('0x3a')](['phone','scheduledAt','ContactId',_0xe3fc('0x3d'),_0x4024d0,_0xe3fc('0x3e'),_0xe3fc('0x4b')],squel[_0xe3fc('0x3f')]()[_0xe3fc('0x40')](_0xe3fc('0x22'),'phone')[_0xe3fc('0x40')](_0xe3fc('0x41'),_0xe3fc('0x3b'))[_0xe3fc('0x40')]('id',_0xe3fc('0x3c'))[_0xe3fc('0x40')](LISTID[_0xe3fc('0x42')](),'ListId')[_0xe3fc('0x40')](_0x406e03['id'][_0xe3fc('0x42')](),_0x4024d0)['field'](_0xe3fc('0x41'),_0xe3fc('0x3e'))[_0xe3fc('0x40')]('NOW()',_0xe3fc('0x4b'))[_0xe3fc('0x43')](_0xe3fc('0x44'))[_0xe3fc('0x45')]('deletedAt\x20IS\x20NULL')[_0xe3fc('0x45')](_0xe3fc('0x4c'),LISTID[_0xe3fc('0x42')]())[_0xe3fc('0x45')](_0xe3fc('0x4d'),squel[_0xe3fc('0x4e')](hopperContacts))[_0xe3fc('0x45')]('phone\x20IS\x20NOT\x20NULL')[_0xe3fc('0x45')]('phone\x20NOT\x20IN\x20(?)',squel[_0xe3fc('0x3f')]()[_0xe3fc('0x40')](_0xe3fc('0x4f'))['from'](_0xe3fc('0x50'))['where'](_0x4024d0+_0xe3fc('0x49'),_0x406e03['id'][_0xe3fc('0x42')]()))[_0xe3fc('0x45')]('phone\x20NOT\x20IN\x20(?)',squel['select']()[_0xe3fc('0x40')](_0xe3fc('0x22'))[_0xe3fc('0x43')](_0xe3fc('0x39'))[_0xe3fc('0x45')](_0x4024d0+_0xe3fc('0x49'),_0x406e03['id'][_0xe3fc('0x42')]())))[_0xe3fc('0x42')]();return _0x5d1a12;};function _0x361ea4(_0x45eaad,_0x4bb694){var _0x221c42=squel[_0xe3fc('0x4a')]()[_0xe3fc('0x38')](_0xe3fc('0x39'))[_0xe3fc('0x3a')]([_0xe3fc('0x22'),_0xe3fc('0x3b'),_0xe3fc('0x3c'),_0xe3fc('0x3d'),_0x4bb694,'createdAt',_0xe3fc('0x4b')],squel[_0xe3fc('0x3f')]()['field'](_0xe3fc('0x22'),_0xe3fc('0x22'))['field'](_0xe3fc('0x41'),'scheduledAt')[_0xe3fc('0x40')]('id',_0xe3fc('0x3c'))[_0xe3fc('0x40')](LISTID['toString'](),_0xe3fc('0x3d'))[_0xe3fc('0x40')](_0x45eaad['id'][_0xe3fc('0x42')](),_0x4bb694)[_0xe3fc('0x40')](_0xe3fc('0x41'),_0xe3fc('0x3e'))[_0xe3fc('0x40')](_0xe3fc('0x41'),_0xe3fc('0x4b'))[_0xe3fc('0x43')]('cm_contacts')['where']('deletedAt\x20IS\x20NULL')[_0xe3fc('0x45')](_0xe3fc('0x4c'),LISTID[_0xe3fc('0x42')]())[_0xe3fc('0x45')](_0xe3fc('0x4d'),squel[_0xe3fc('0x4e')](hopperContacts))[_0xe3fc('0x45')](_0xe3fc('0x47')))[_0xe3fc('0x42')]();return _0x221c42;}function _0x23de07(_0x2420e6,_0x599b2f){var _0x129701=squel['insert']()[_0xe3fc('0x38')](_0xe3fc('0x51'))[_0xe3fc('0x3a')]([_0xe3fc('0x22'),_0xe3fc('0x3c'),_0xe3fc('0x3d'),_0x599b2f,_0xe3fc('0x3e'),_0xe3fc('0x4b')],squel[_0xe3fc('0x3f')]()['field'](_0xe3fc('0x22'),'phone')[_0xe3fc('0x40')]('id',_0xe3fc('0x3c'))['field'](LISTID[_0xe3fc('0x42')](),'ListId')['field'](_0x2420e6['id'][_0xe3fc('0x42')](),_0x599b2f)['field'](_0xe3fc('0x41'),'createdAt')[_0xe3fc('0x40')](_0xe3fc('0x41'),'updatedAt')['from']('cm_contacts')[_0xe3fc('0x45')]('deletedAt\x20IS\x20NULL')[_0xe3fc('0x45')](_0xe3fc('0x4c'),LISTID[_0xe3fc('0x42')]())[_0xe3fc('0x45')]('id\x20IN\x20?',squel[_0xe3fc('0x4e')](hopperContacts))[_0xe3fc('0x45')]('phone\x20IS\x20NOT\x20NULL'))['toString']();return _0x129701;}return db[_0xe3fc('0x52')]['findAll']({'where':{'type':_0xe3fc('0x53')},'attributes':['id',_0xe3fc('0x54')],'include':[{'model':db['CmList'],'as':_0xe3fc('0x55'),'where':{'id':LISTID}}]})[_0xe3fc('0x2e')](function(_0x7854e0){var _0x25b3d6=[];if(_0x7854e0){var _0x2a7fa0;for(var _0x2cf302=0x0,_0x2623b6;_0x2cf302<_0x7854e0[_0xe3fc('0x29')];_0x2cf302+=0x1){_0x2623b6=_0x7854e0[_0x2cf302]['get']({'plain':!![]});switch(_0x2623b6[_0xe3fc('0x54')]){case'always':_0x25b3d6[_0xe3fc('0x2f')](db['sequelize'][_0xe3fc('0x56')](_0x1dccdc(_0x2623b6,'VoiceQueueId'))['then'](function(){})[_0xe3fc('0x31')](_0x4e339f()));break;case'onlyIfOpen':_0x25b3d6[_0xe3fc('0x2f')](db['sequelize']['query'](_0x33b305(_0x2623b6,_0xe3fc('0x57')))[_0xe3fc('0x2e')](function(){})['catch'](_0x4e339f()));break;default:_0x25b3d6[_0xe3fc('0x2f')](db['sequelize']['query'](_0x361ea4(_0x2623b6,'VoiceQueueId'))[_0xe3fc('0x2e')](function(){})[_0xe3fc('0x31')](_0x4e339f()));}}}return _0x25b3d6;})[_0xe3fc('0x58')]()[_0xe3fc('0x2e')](function(){return db[_0xe3fc('0x52')][_0xe3fc('0x59')]({'where':{'type':_0xe3fc('0x53')},'attributes':['id'],'include':[{'model':db[_0xe3fc('0x5a')],'as':_0xe3fc('0x5b'),'where':{'id':LISTID}}]})[_0xe3fc('0x2e')](function(_0x259da8){var _0x27c47c=[];if(_0x259da8){var _0x5395ca;for(var _0x4d280d=0x0,_0x23dd6a;_0x4d280d<_0x259da8[_0xe3fc('0x29')];_0x4d280d+=0x1){_0x23dd6a=_0x259da8[_0x4d280d][_0xe3fc('0x5c')]({'plain':!![]});_0x27c47c[_0xe3fc('0x2f')](db['sequelize'][_0xe3fc('0x56')](_0x23de07(_0x23dd6a,'VoiceQueueId'))[_0xe3fc('0x2e')](function(){})[_0xe3fc('0x31')](_0x4e339f()));}}return _0x27c47c;})[_0xe3fc('0x58')]();})['then'](function(){return db[_0xe3fc('0x5d')]['findAll']({'attributes':['id',_0xe3fc('0x54')],'include':[{'model':db['CmList'],'as':_0xe3fc('0x55'),'where':{'id':LISTID}}]})['then'](function(_0x18ab3d){var _0xae463c=[];if(_0x18ab3d){for(var _0x1e79be=0x0,_0x52488e;_0x1e79be<_0x18ab3d[_0xe3fc('0x29')];_0x1e79be+=0x1){_0x52488e=_0x18ab3d[_0x1e79be][_0xe3fc('0x5c')]({'plain':!![]});switch(_0x52488e['dialCheckDuplicateType']){case _0xe3fc('0x5e'):_0xae463c[_0xe3fc('0x2f')](db[_0xe3fc('0x5f')]['query'](_0x1dccdc(_0x52488e,_0xe3fc('0x60')))[_0xe3fc('0x2e')](function(){})[_0xe3fc('0x31')](_0x4e339f()));break;case _0xe3fc('0x61'):_0xae463c[_0xe3fc('0x2f')](db['sequelize'][_0xe3fc('0x56')](_0x33b305(_0x52488e,_0xe3fc('0x60')))[_0xe3fc('0x2e')](function(){})[_0xe3fc('0x31')](_0x4e339f()));break;default:_0xae463c[_0xe3fc('0x2f')](db[_0xe3fc('0x5f')][_0xe3fc('0x56')](_0x361ea4(_0x52488e,_0xe3fc('0x60')))[_0xe3fc('0x2e')](function(){})['catch'](_0x4e339f()));}}}return _0xae463c;})[_0xe3fc('0x58')]();})[_0xe3fc('0x2e')](function(){return db[_0xe3fc('0x5d')]['findAll']({'attributes':['id'],'include':[{'model':db[_0xe3fc('0x5a')],'as':'BlackLists','where':{'id':LISTID}}]})[_0xe3fc('0x2e')](function(_0x489b03){var _0x3518c7=[];if(_0x489b03){for(var _0x50299d=0x0,_0x1a8365;_0x50299d<_0x489b03['length'];_0x50299d+=0x1){_0x1a8365=_0x489b03[_0x50299d]['get']({'plain':!![]});_0x3518c7['push'](db[_0xe3fc('0x5f')]['query'](_0x23de07(_0x1a8365,_0xe3fc('0x60')))[_0xe3fc('0x2e')](function(){})['catch'](_0x4e339f()));}}return _0x3518c7;})[_0xe3fc('0x58')]();})[_0xe3fc('0x31')](function(_0x343ee5){logger[_0xe3fc('0x16')](_0xe3fc('0x62'),_0xe3fc('0x63'),_0x343ee5['message']);});}var processPromises=function(_0x4361af){return BPromise['all'](promises)[_0xe3fc('0x2e')](function(_0x1d278e){})[_0xe3fc('0x31')](function(_0x3542d0){logger[_0xe3fc('0x16')]('Error\x20processing\x20rows\x20block:',JSON[_0xe3fc('0x34')](_0x3542d0));})[_0xe3fc('0x64')](function(){socket['emit']('contact:csv_'+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0x4361af){return _0x4361af['resume']();}});};var endCsv=function(){return BPromise[_0xe3fc('0x65')]()[_0xe3fc('0x2e')](function(){if(hopperContacts){return checkHopper();}})['then'](function(){socket[_0xe3fc('0x66')](_0xe3fc('0x67')+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs['unlinkSync'](FILEPATH);}catch(_0x2bf6ff){logger[_0xe3fc('0x16')](_0xe3fc('0x68'),JSON[_0xe3fc('0x34')](_0x2bf6ff));}finally{process[_0xe3fc('0x69')](0x0);}});};process['on'](_0xe3fc('0x6a'),function(){logger['info'](_0xe3fc('0x6b'));endCsv();});function main(){return BPromise['resolve']()[_0xe3fc('0x2e')](function(){if(DUPLICATES){DUPLICATES=DUPLICATES[_0xe3fc('0x14')](',');return db['CmContact'][_0xe3fc('0x59')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})[_0xe3fc('0x2e')](function(_0x537565){var _0x37a323=fs['createReadStream'](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa[_0xe3fc('0x6c')](_0x37a323,{'header':!![],'skipEmptyLines':!![],'step':function(_0x41201d,_0xa16d9d){total+=0x1;var _0x4e26fc=total;promises['push'](checkRow(_0x41201d,_0x537565,_0x4e26fc)[_0xe3fc('0x2e')](function(){success+=0x1;})[_0xe3fc('0x31')](function(_0x1e78ca){if(_0x1e78ca[_0xe3fc('0x16')]){errors+=0x1;delete _0x1e78ca[_0xe3fc('0x16')];}else if(_0x1e78ca[_0xe3fc('0x2b')]){duplicates+=0x1;delete _0x1e78ca[_0xe3fc('0x2b')];}rows[_0xe3fc('0x2f')](_0x1e78ca);}));if(total%0xc8===0x0){_0xa16d9d[_0xe3fc('0x6d')]();return processPromises(_0xa16d9d);}},'complete':function(){return processPromises()[_0xe3fc('0x2e')](function(){logger[_0xe3fc('0x6e')](_0xe3fc('0x6f'));endCsv();});},'error':function(_0x391aa6,_0x277fe8){logger[_0xe3fc('0x6e')](_0xe3fc('0x70'),JSON[_0xe3fc('0x34')](_0x391aa6));endCsv();}});})['catch'](function(_0x52b71a){logger['error']('Error\x20executing\x20contact\x20csv\x20import:',JSON[_0xe3fc('0x34')](_0x52b71a));});}main();
\ No newline at end of file
+var _0x0458=['Lists','CampaignId','cmContact,\x20%s,\x20%s','Error\x20processing\x20rows\x20block:','contact:csv_','resume','resolve','emit','unlinkSync','Unable\x20to\x20delete\x20temp\x20file:','exit','info','CSV\x20import\x20process\x20stopped!','createReadStream','parse','pause','CSV\x20parsed\x20correctly!','CSV\x20parse\x20error','Error\x20executing\x20contact\x20csv\x20import:','squel','papaparse','ioredis','../../../config/environment','../../../config/logger','api','redis','defaults','socket.io-emitter','../../../api/cmContact/cmContact.socket','register','argv','undefined','null','Missing\x20binding\x20parameters!','zipObject','split','Missing\x20ListId\x20parameter!','Missing\x20socket_timestamp\x20parameter!','contact','index','test','error','The\x20row\x20is\x20empty\x20or\x20the\x20number\x20of\x20parameters\x20does\x20not\x20match\x20the\x20columns!','errors','length','map','message','join','hasOwnProperty','data','firstName','firstName\x20not\x20specified!','phone','phone\x20not\x20specified!','isValid','birthDate\x20format\x20is\x20invalid,\x20YYYY-MM-DD\x20format\x20is\x20supported!','email','CompanyId','find','duplicate','CmContact','create','keys','then','push','pick','catch','Error\x20while\x20creating\x20contact:\x20','stringify','cmContact','checkHopper','insert','cm_hopper','fromQuery','ListId','updatedAt','field','NOW()','scheduledAt','ContactId','toString','createdAt','cm_contacts','where','deletedAt\x20IS\x20NULL','ListId\x20=\x20?','phone\x20IS\x20NOT\x20NULL','phone\x20NOT\x20IN\x20(?)','from','\x20=\x20?','into','id\x20IN\x20?','str','calleridnum','cm_hopper_final','select','cm_hopper_black','findAll','dialCheckDuplicateType','CmList','get','always','sequelize','query','VoiceQueueId','onlyIfOpen','all','VoiceQueue','outbound','BlackLists'];(function(_0x39a2d6,_0x477459){var _0x23af66=function(_0x2eb95e){while(--_0x2eb95e){_0x39a2d6['push'](_0x39a2d6['shift']());}};_0x23af66(++_0x477459);}(_0x0458,0x1cb));var _0x8045=function(_0x46d8c7,_0x4e92c6){_0x46d8c7=_0x46d8c7-0x0;var _0x3e9ff1=_0x0458[_0x46d8c7];return _0x3e9ff1;};'use strict';var BPromise=require('bluebird');var util=require('util');var _=require('lodash');var fs=require('fs');var squel=require(_0x8045('0x0'));var Papa=require(_0x8045('0x1'));var Redis=require(_0x8045('0x2'));var db=require('../../../mysqldb')['db'];var config=require(_0x8045('0x3'));var logger=require(_0x8045('0x4'))(_0x8045('0x5'));config[_0x8045('0x6')]=_[_0x8045('0x7')](config[_0x8045('0x6')],{'host':'localhost','port':0x18eb});var socket=require(_0x8045('0x8'))(new Redis(config[_0x8045('0x6')]));require(_0x8045('0x9'))[_0x8045('0xa')](socket);try{if(!process['argv'][0x2]||process[_0x8045('0xb')][0x2]===_0x8045('0xc')||process['argv'][0x2]===_0x8045('0xd')){throw new Error('Missing\x20filepath\x20parameter!');}var FILEPATH=process[_0x8045('0xb')][0x2];if(!process[_0x8045('0xb')][0x3]||process[_0x8045('0xb')][0x3]===_0x8045('0xc')||process[_0x8045('0xb')][0x3]==='null'||!process[_0x8045('0xb')][0x4]||process[_0x8045('0xb')][0x4]===_0x8045('0xc')||process[_0x8045('0xb')][0x4]===_0x8045('0xd')){throw new Error(_0x8045('0xe'));}var FIELDS=_[_0x8045('0xf')](process[_0x8045('0xb')][0x3][_0x8045('0x10')](','),process['argv'][0x4]['split'](','));if(!process[_0x8045('0xb')][0x5]||process[_0x8045('0xb')][0x5]===_0x8045('0xc')||process[_0x8045('0xb')][0x5]===_0x8045('0xd')){throw new Error(_0x8045('0x11'));}var LISTID=process[_0x8045('0xb')][0x5];var COMPANYID=process[_0x8045('0xb')][0x6]&&process[_0x8045('0xb')][0x6]!==_0x8045('0xc')&&process[_0x8045('0xb')][0x6]!==_0x8045('0xd')?process[_0x8045('0xb')][0x6]:null;var DUPLICATES=process[_0x8045('0xb')][0x7]&&process[_0x8045('0xb')][0x7]!==_0x8045('0xc')&&process[_0x8045('0xb')][0x7]!=='null'?process[_0x8045('0xb')][0x7]:null;if(!process[_0x8045('0xb')][0x8]||process[_0x8045('0xb')][0x8]===_0x8045('0xc')||process[_0x8045('0xb')][0x8]===_0x8045('0xd')){throw new Error(_0x8045('0x12'));}var SOCKET_TIMESTAMP=process[_0x8045('0xb')][0x8];}catch(_0x268afa){logger['error'](_0x268afa);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(_0x16eda9,_0x589540,_0x3a9f92,_0x6dca6b){var _0x44ebc2={'message':_0x589540};_0x44ebc2[_0x16eda9]=!![];if(_0x3a9f92){_0x44ebc2[_0x8045('0x13')]=_0x3a9f92;}if(_0x6dca6b){_0x44ebc2[_0x8045('0x14')]=_0x6dca6b;}return _0x44ebc2;}function isEmail(_0x52e715){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))*$/[_0x8045('0x15')](_0x52e715);}function checkRow(_0x10dfe9,_0x34a9b0,_0x458e9b){return new BPromise(function(_0x4528ff,_0x4cdf16){if(_['isNil'](_0x10dfe9)){return _0x4cdf16(handleCheckRowError(_0x8045('0x16'),_0x8045('0x17'),null,_0x458e9b));}if(_0x10dfe9[_0x8045('0x18')]&&_0x10dfe9[_0x8045('0x18')][_0x8045('0x19')]){var _0x379a54=_[_0x8045('0x1a')](_0x10dfe9['errors'],_0x8045('0x1b'))[_0x8045('0x1c')](';');return _0x4cdf16(handleCheckRowError(_0x8045('0x16'),_0x379a54,null,_0x458e9b));}var _0x11de10={};for(var _0x6c2d73 in FIELDS){if(FIELDS[_0x8045('0x1d')](_0x6c2d73)&&FIELDS[_0x6c2d73]){_0x11de10[_0x6c2d73]=_0x10dfe9[_0x8045('0x1e')][0x0][FIELDS[_0x6c2d73]]||_0x10dfe9[_0x8045('0x1e')][0x0]['\ufeff'+FIELDS[_0x6c2d73]];}}if(!_0x11de10[_0x8045('0x1f')]){return _0x4cdf16(handleCheckRowError(_0x8045('0x16'),_0x8045('0x20'),null,_0x458e9b));}if(!_0x11de10[_0x8045('0x21')]){return _0x4cdf16(handleCheckRowError(_0x8045('0x16'),_0x8045('0x22'),null,_0x458e9b));}if(_0x11de10['birthDate']){var _0x5a376a=moment(_0x11de10['birthDate'],'YYYY-MM-DD');if(!_0x5a376a[_0x8045('0x23')]()){return _0x4cdf16(handleCheckRowError('error',_0x8045('0x24'),null,_0x458e9b));}}if(_0x11de10[_0x8045('0x25')]){if(!isEmail(_0x11de10[_0x8045('0x25')])){return _0x4cdf16(handleCheckRowError('error','email\x20format\x20is\x20not\x20valid!',null,_0x458e9b));}}_0x11de10['ListId']=LISTID;_0x11de10[_0x8045('0x26')]=COMPANYID||undefined;if(DUPLICATES&&DUPLICATES[_0x8045('0x19')]&&_0x34a9b0){var _0x5a7c3a={};for(var _0x5893e8=0x0,_0x247607=DUPLICATES[_0x8045('0x19')];_0x5893e8<_0x247607;_0x5893e8+=0x1){_0x5a7c3a[DUPLICATES[_0x5893e8]]=_0x11de10[DUPLICATES[_0x5893e8]];}var _0x21a876=_[_0x8045('0x27')](_0x34a9b0,_0x5a7c3a);if(_0x21a876){return _0x4cdf16(handleCheckRowError(_0x8045('0x28'),'Duplicate\x20Contact',_0x21a876,_0x458e9b));}}return db[_0x8045('0x29')][_0x8045('0x2a')](_0x11de10,{'raw':!![],'hooks':![],'fields':_[_0x8045('0x2b')](_0x11de10)})[_0x8045('0x2c')](function(_0x17795e){if(DUPLICATES&&DUPLICATES[_0x8045('0x19')]&&_0x34a9b0){_0x34a9b0[_0x8045('0x2d')](_[_0x8045('0x2e')](_0x11de10,DUPLICATES));}hopperContacts+=(hopperContacts?',':'')+_0x17795e['id'];return _0x4528ff();})[_0x8045('0x2f')](function(_0x5330d8){return _0x4cdf16(handleCheckRowError(_0x8045('0x16'),_0x8045('0x30')+(_0x5330d8[_0x8045('0x1b')]||JSON[_0x8045('0x31')](_0x5330d8)),null,_0x458e9b));});});}function checkHopper(){function _0x5385b8(){return function(_0xde9a){logger[_0x8045('0x16')](_0x8045('0x32'),_0x8045('0x33'),util['inspect'](_0xde9a,{'showHidden':![],'depth':null}));};}var _0x9271c0=function(_0x6f4318,_0x2964c5){var _0x1bb645=squel[_0x8045('0x34')]()['into'](_0x8045('0x35'))[_0x8045('0x36')]([_0x8045('0x21'),'scheduledAt','ContactId',_0x8045('0x37'),_0x2964c5,'createdAt',_0x8045('0x38')],squel['select']()[_0x8045('0x39')](_0x8045('0x21'),_0x8045('0x21'))['field'](_0x8045('0x3a'),_0x8045('0x3b'))[_0x8045('0x39')]('id',_0x8045('0x3c'))[_0x8045('0x39')](LISTID[_0x8045('0x3d')](),_0x8045('0x37'))[_0x8045('0x39')](_0x6f4318['id'][_0x8045('0x3d')](),_0x2964c5)[_0x8045('0x39')](_0x8045('0x3a'),_0x8045('0x3e'))[_0x8045('0x39')](_0x8045('0x3a'),_0x8045('0x38'))['from'](_0x8045('0x3f'))[_0x8045('0x40')](_0x8045('0x41'))[_0x8045('0x40')](_0x8045('0x42'),LISTID[_0x8045('0x3d')]())[_0x8045('0x40')](_0x8045('0x43'))[_0x8045('0x40')](_0x8045('0x44'),squel['select']()[_0x8045('0x39')](_0x8045('0x21'))[_0x8045('0x45')](_0x8045('0x35'))[_0x8045('0x40')](_0x2964c5+_0x8045('0x46'),_0x6f4318['id'][_0x8045('0x3d')]())))[_0x8045('0x3d')]();return _0x1bb645;};var _0x3af956=function(_0x330bbf,_0x2b3dd4){var _0x185cae=squel[_0x8045('0x34')]()[_0x8045('0x47')](_0x8045('0x35'))[_0x8045('0x36')]([_0x8045('0x21'),_0x8045('0x3b'),'ContactId',_0x8045('0x37'),_0x2b3dd4,_0x8045('0x3e'),_0x8045('0x38')],squel['select']()[_0x8045('0x39')](_0x8045('0x21'),'phone')[_0x8045('0x39')]('NOW()','scheduledAt')[_0x8045('0x39')]('id',_0x8045('0x3c'))[_0x8045('0x39')](LISTID[_0x8045('0x3d')](),_0x8045('0x37'))[_0x8045('0x39')](_0x330bbf['id']['toString'](),_0x2b3dd4)['field'](_0x8045('0x3a'),_0x8045('0x3e'))[_0x8045('0x39')](_0x8045('0x3a'),_0x8045('0x38'))['from'](_0x8045('0x3f'))[_0x8045('0x40')](_0x8045('0x41'))['where']('ListId\x20=\x20?',LISTID['toString']())[_0x8045('0x40')](_0x8045('0x48'),squel[_0x8045('0x49')](hopperContacts))[_0x8045('0x40')](_0x8045('0x43'))[_0x8045('0x40')](_0x8045('0x44'),squel['select']()[_0x8045('0x39')](_0x8045('0x4a'))['from'](_0x8045('0x4b'))[_0x8045('0x40')](_0x2b3dd4+_0x8045('0x46'),_0x330bbf['id'][_0x8045('0x3d')]()))[_0x8045('0x40')](_0x8045('0x44'),squel['select']()['field']('phone')['from'](_0x8045('0x35'))[_0x8045('0x40')](_0x2b3dd4+_0x8045('0x46'),_0x330bbf['id']['toString']())))[_0x8045('0x3d')]();return _0x185cae;};function _0x3d3f2b(_0x2628db,_0xbdb0d1){var _0x136f10=squel[_0x8045('0x34')]()['into']('cm_hopper')['fromQuery']([_0x8045('0x21'),'scheduledAt',_0x8045('0x3c'),'ListId',_0xbdb0d1,_0x8045('0x3e'),_0x8045('0x38')],squel[_0x8045('0x4c')]()[_0x8045('0x39')]('phone',_0x8045('0x21'))[_0x8045('0x39')](_0x8045('0x3a'),_0x8045('0x3b'))[_0x8045('0x39')]('id',_0x8045('0x3c'))[_0x8045('0x39')](LISTID[_0x8045('0x3d')](),_0x8045('0x37'))[_0x8045('0x39')](_0x2628db['id']['toString'](),_0xbdb0d1)[_0x8045('0x39')]('NOW()',_0x8045('0x3e'))[_0x8045('0x39')](_0x8045('0x3a'),_0x8045('0x38'))['from'](_0x8045('0x3f'))['where'](_0x8045('0x41'))['where'](_0x8045('0x42'),LISTID[_0x8045('0x3d')]())['where'](_0x8045('0x48'),squel[_0x8045('0x49')](hopperContacts))[_0x8045('0x40')](_0x8045('0x43')))[_0x8045('0x3d')]();return _0x136f10;}function _0x4cba98(_0x22fd44,_0x5c014d){var _0x1728d5=squel['insert']()[_0x8045('0x47')](_0x8045('0x4d'))[_0x8045('0x36')]([_0x8045('0x21'),_0x8045('0x3c'),_0x8045('0x37'),_0x5c014d,_0x8045('0x3e'),_0x8045('0x38')],squel[_0x8045('0x4c')]()[_0x8045('0x39')]('phone','phone')['field']('id','ContactId')['field'](LISTID[_0x8045('0x3d')](),'ListId')[_0x8045('0x39')](_0x22fd44['id']['toString'](),_0x5c014d)[_0x8045('0x39')](_0x8045('0x3a'),_0x8045('0x3e'))[_0x8045('0x39')](_0x8045('0x3a'),_0x8045('0x38'))['from'](_0x8045('0x3f'))[_0x8045('0x40')](_0x8045('0x41'))['where'](_0x8045('0x42'),LISTID[_0x8045('0x3d')]())['where'](_0x8045('0x48'),squel[_0x8045('0x49')](hopperContacts))[_0x8045('0x40')]('phone\x20IS\x20NOT\x20NULL'))['toString']();return _0x1728d5;}return db['VoiceQueue'][_0x8045('0x4e')]({'where':{'type':'outbound'},'attributes':['id',_0x8045('0x4f')],'include':[{'model':db[_0x8045('0x50')],'as':'Lists','where':{'id':LISTID}}]})['then'](function(_0x45d2d0){var _0x4813de=[];if(_0x45d2d0){var _0xa09ea6;for(var _0x2fc4a1=0x0,_0x47ec26;_0x2fc4a1<_0x45d2d0['length'];_0x2fc4a1+=0x1){_0x47ec26=_0x45d2d0[_0x2fc4a1][_0x8045('0x51')]({'plain':!![]});switch(_0x47ec26[_0x8045('0x4f')]){case _0x8045('0x52'):_0x4813de[_0x8045('0x2d')](db[_0x8045('0x53')][_0x8045('0x54')](_0x3af956(_0x47ec26,_0x8045('0x55')))[_0x8045('0x2c')](function(){})[_0x8045('0x2f')](_0x5385b8()));break;case _0x8045('0x56'):_0x4813de['push'](db[_0x8045('0x53')]['query'](_0x9271c0(_0x47ec26,_0x8045('0x55')))[_0x8045('0x2c')](function(){})['catch'](_0x5385b8()));break;default:_0x4813de['push'](db['sequelize'][_0x8045('0x54')](_0x3d3f2b(_0x47ec26,'VoiceQueueId'))[_0x8045('0x2c')](function(){})[_0x8045('0x2f')](_0x5385b8()));}}}return _0x4813de;})[_0x8045('0x57')]()[_0x8045('0x2c')](function(){return db[_0x8045('0x58')][_0x8045('0x4e')]({'where':{'type':_0x8045('0x59')},'attributes':['id'],'include':[{'model':db[_0x8045('0x50')],'as':_0x8045('0x5a'),'where':{'id':LISTID}}]})['then'](function(_0x17c55e){var _0x57e2a0=[];if(_0x17c55e){var _0x16e31f;for(var _0xfcf840=0x0,_0x171082;_0xfcf840<_0x17c55e[_0x8045('0x19')];_0xfcf840+=0x1){_0x171082=_0x17c55e[_0xfcf840][_0x8045('0x51')]({'plain':!![]});_0x57e2a0[_0x8045('0x2d')](db[_0x8045('0x53')]['query'](_0x4cba98(_0x171082,_0x8045('0x55')))[_0x8045('0x2c')](function(){})['catch'](_0x5385b8()));}}return _0x57e2a0;})['all']();})[_0x8045('0x2c')](function(){return db['Campaign'][_0x8045('0x4e')]({'attributes':['id','dialCheckDuplicateType'],'include':[{'model':db[_0x8045('0x50')],'as':_0x8045('0x5b'),'where':{'id':LISTID}}]})[_0x8045('0x2c')](function(_0x5a66be){var _0x81f2b7=[];if(_0x5a66be){for(var _0x3df061=0x0,_0x1d8a05;_0x3df061<_0x5a66be['length'];_0x3df061+=0x1){_0x1d8a05=_0x5a66be[_0x3df061][_0x8045('0x51')]({'plain':!![]});switch(_0x1d8a05['dialCheckDuplicateType']){case _0x8045('0x52'):_0x81f2b7['push'](db[_0x8045('0x53')]['query'](_0x3af956(_0x1d8a05,'CampaignId'))['then'](function(){})[_0x8045('0x2f')](_0x5385b8()));break;case _0x8045('0x56'):_0x81f2b7['push'](db[_0x8045('0x53')][_0x8045('0x54')](_0x9271c0(_0x1d8a05,_0x8045('0x5c')))[_0x8045('0x2c')](function(){})['catch'](_0x5385b8()));break;default:_0x81f2b7[_0x8045('0x2d')](db['sequelize'][_0x8045('0x54')](_0x3d3f2b(_0x1d8a05,_0x8045('0x5c')))['then'](function(){})[_0x8045('0x2f')](_0x5385b8()));}}}return _0x81f2b7;})['all']();})[_0x8045('0x2c')](function(){return db['Campaign'][_0x8045('0x4e')]({'attributes':['id'],'include':[{'model':db[_0x8045('0x50')],'as':'BlackLists','where':{'id':LISTID}}]})[_0x8045('0x2c')](function(_0x1cf551){var _0x195f57=[];if(_0x1cf551){for(var _0x2a5a67=0x0,_0x2fef31;_0x2a5a67<_0x1cf551[_0x8045('0x19')];_0x2a5a67+=0x1){_0x2fef31=_0x1cf551[_0x2a5a67][_0x8045('0x51')]({'plain':!![]});_0x195f57['push'](db[_0x8045('0x53')][_0x8045('0x54')](_0x4cba98(_0x2fef31,'CampaignId'))[_0x8045('0x2c')](function(){})['catch'](_0x5385b8()));}}return _0x195f57;})[_0x8045('0x57')]();})[_0x8045('0x2f')](function(_0x2b7191){logger[_0x8045('0x16')](_0x8045('0x5d'),'generalCheckHopper',_0x2b7191['message']);});}var processPromises=function(_0xd93ee1){return BPromise[_0x8045('0x57')](promises)[_0x8045('0x2c')](function(_0x17ed1a){})[_0x8045('0x2f')](function(_0x785e63){logger[_0x8045('0x16')](_0x8045('0x5e'),JSON[_0x8045('0x31')](_0x785e63));})['finally'](function(){socket['emit'](_0x8045('0x5f')+SOCKET_TIMESTAMP,{'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});promises=[];success=0x0;errors=0x0;duplicates=0x0;rows=[];if(_0xd93ee1){return _0xd93ee1[_0x8045('0x60')]();}});};var endCsv=function(){return BPromise[_0x8045('0x61')]()[_0x8045('0x2c')](function(){if(hopperContacts){return checkHopper();}})[_0x8045('0x2c')](function(){socket[_0x8045('0x62')](_0x8045('0x5f')+SOCKET_TIMESTAMP,{'finished':!![],'success':success,'errors':errors,'duplicates':duplicates,'rows':rows});try{fs[_0x8045('0x63')](FILEPATH);}catch(_0x5c1e07){logger['error'](_0x8045('0x64'),JSON[_0x8045('0x31')](_0x5c1e07));}finally{process[_0x8045('0x65')](0x0);}});};process['on']('SIGINT',function(){logger[_0x8045('0x66')](_0x8045('0x67'));endCsv();});function main(){return BPromise[_0x8045('0x61')]()[_0x8045('0x2c')](function(){if(DUPLICATES){DUPLICATES=DUPLICATES['split'](',');return db[_0x8045('0x29')][_0x8045('0x4e')]({'where':{'ListId':LISTID},'attributes':DUPLICATES,'raw':!![]});}})['then'](function(_0x4547ae){var _0x45cfd5=fs[_0x8045('0x68')](FILEPATH,{'highWaterMark':0xf*0x400*0x400});Papa[_0x8045('0x69')](_0x45cfd5,{'header':!![],'skipEmptyLines':!![],'step':function(_0x345601,_0x431a97){total+=0x1;var _0x3b2643=total;promises[_0x8045('0x2d')](checkRow(_0x345601,_0x4547ae,_0x3b2643)[_0x8045('0x2c')](function(){success+=0x1;})[_0x8045('0x2f')](function(_0x14b50d){if(_0x14b50d['error']){errors+=0x1;delete _0x14b50d[_0x8045('0x16')];}else if(_0x14b50d[_0x8045('0x28')]){duplicates+=0x1;delete _0x14b50d['duplicate'];}rows[_0x8045('0x2d')](_0x14b50d);}));if(total%0xc8===0x0){_0x431a97[_0x8045('0x6a')]();return processPromises(_0x431a97);}},'complete':function(){return processPromises()[_0x8045('0x2c')](function(){logger[_0x8045('0x66')](_0x8045('0x6b'));endCsv();});},'error':function(_0x491a1e,_0xd58757){logger[_0x8045('0x66')](_0x8045('0x6c'),JSON[_0x8045('0x31')](_0x491a1e));endCsv();}});})['catch'](function(_0x50f7c4){logger[_0x8045('0x16')](_0x8045('0x6d'),JSON['stringify'](_0x50f7c4));});}main();
\ No newline at end of file
index 5e32141..95c2ca4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8c02=['scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)','isNaN','UserId','includes','agent\x20not\x20exists','email','email\x20wrong\x20format','YYYY-MM-DD','isValid','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','\x20not\x20specified','length','SystemRow','emit','contact:import:','Abort\x20parser','abort','step','duplicates','\x20LIKE\x20cm_contacts;','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','CompanyId','isNil','scheduledat','DROP\x20TABLE\x20','voice_queues_has_cm_lists','voice_queues','voice_queues_has_cm_blacklists','VoiceQueueId','campaigns_has_cm_lists','campaigns','CampaignId','campaigns_has_cm_blacklists','each','then','finish','affectedRows','unlink','argv','existsSync','file\x20doesn\x27t\x20exists','binding\x20doesn\x27t\x20exists','phone\x20is\x20mandatory','firstName','firstName\x20is\x20mandatory','ListId\x20is\x20mandatory','body\x20id\x20mandatory','map','No\x20agent\x20available','SIGINT','uncaughtException','path','lodash','papaparse','util','bluebird','moment','squel','ioredis','../../../mysqldb','../../../config/environment','../../../config/logger','import','redis','defaults','localhost','socket.io-emitter','format','YYYY-MM-DD\x20HH:mm:ss','test','field','phone','from','join','.id\x20=\x20','where','\x20=\x20','.dialCheckDuplicateType\x20IN\x20(','cm_contacts.phone','cm_contacts.scheduledat','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','cm_contacts.priority','cm_contacts.UserId','cm_hopper','fromQuery','ContactId','ListId','priority','recallme','select','cm_contacts','cm_contacts.ListId\x20=\x20','.CmListId','.CmListId\x20=\x20?','cm_contacts.createdAt\x20=\x20?','\x22always\x22','\x22onlyIfOpen\x22','cm_contacts.phone\x20NOT\x20IN\x20(?)','toString','insert','into','cm_hopper_black','createdAt','ListId\x20=\x20?','\x20=\x20?','concat','keys','updatedAt',')\x20NOT\x20IN\x20?','fields','min_id','group','info','error','message','exit','errors','push','code','sequelize','query','spread','catch','main','stringify','send','binding','socket_timestamp','root','server/files/tmp','.csv','header','writeFileSync','parse','createReadStream','data','rows','trim','replace'];(function(_0x45d55e,_0x2fede3){var _0x29812a=function(_0x3c6830){while(--_0x3c6830){_0x45d55e['push'](_0x45d55e['shift']());}};_0x29812a(++_0x2fede3);}(_0x8c02,0x14d));var _0x28c0=function(_0x351255,_0x20ad96){_0x351255=_0x351255-0x0;var _0x458b22=_0x8c02[_0x351255];return _0x458b22;};'use strict';var fs=require('fs');var path=require(_0x28c0('0x0'));var _=require(_0x28c0('0x1'));var Papa=require(_0x28c0('0x2'));var util=require(_0x28c0('0x3'));var BPromise=require(_0x28c0('0x4'));var moment=require(_0x28c0('0x5'));var squel=require(_0x28c0('0x6'));var Redis=require(_0x28c0('0x7'));var db=require(_0x28c0('0x8'))['db'];var config=require(_0x28c0('0x9'));var logger=require(_0x28c0('0xa'))(_0x28c0('0xb'));config[_0x28c0('0xc')]=_[_0x28c0('0xd')](config[_0x28c0('0xc')],{'host':_0x28c0('0xe'),'port':0x18eb});var socket=require(_0x28c0('0xf'))(new Redis(config['redis']));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()[_0x28c0('0x10')](_0x28c0('0x11'));function isEmail(_0x5e2e63){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))*$/[_0x28c0('0x12')](_0x5e2e63);}function selectNotIn(_0x1222e3,_0x5c15bd,_0x13fad9,_0x190487,_0x429299){return squel['select']()[_0x28c0('0x13')](_0x28c0('0x14'))[_0x28c0('0x15')](_0x190487)[_0x28c0('0x16')](_0x5c15bd,null,_0x5c15bd+_0x28c0('0x17')+_0x190487+'.'+_0x13fad9)[_0x28c0('0x18')](_0x190487+'.'+_0x13fad9+_0x28c0('0x19')+_0x1222e3+'.'+_0x13fad9)[_0x28c0('0x18')](_0x5c15bd+_0x28c0('0x1a')+_0x429299[_0x28c0('0x16')]()+')');}function insertCmHopper(_0x3c459e,_0xa9cb91,_0x3dd37f,_0x4cda8b,_0x20d6f1){var _0x165379=[_0x28c0('0x1b'),_0x28c0('0x1c'),'cm_contacts.id',_0x28c0('0x1d'),_0xa9cb91+'.'+_0x4cda8b,_0x28c0('0x1e'),_0x28c0('0x1f'),_0x28c0('0x20'),_0x28c0('0x21'),'\x22'+_0x20d6f1+'\x22'];return squel['insert']()['into'](_0x28c0('0x22'))[_0x28c0('0x23')]([_0x28c0('0x14'),'scheduledat',_0x28c0('0x24'),_0x28c0('0x25'),_0x4cda8b,'createdAt','updatedAt',_0x28c0('0x26'),'UserId',_0x28c0('0x27')],squel[_0x28c0('0x28')]()['fields'](_0x165379)[_0x28c0('0x15')](_0xa9cb91)[_0x28c0('0x16')](_0x28c0('0x29'),null,_0x28c0('0x2a')+_0xa9cb91+_0x28c0('0x2b'))['join'](_0x3dd37f,null,_0x3dd37f+'.id\x20=\x20'+_0xa9cb91+'.'+_0x4cda8b)[_0x28c0('0x18')](_0xa9cb91+_0x28c0('0x2c'),_0x3c459e)[_0x28c0('0x18')](_0x28c0('0x2d'),NOW)[_0x28c0('0x18')]('cm_contacts.phone\x20NOT\x20IN\x20(?)',selectNotIn(_0xa9cb91,_0x3dd37f,_0x4cda8b,_0x28c0('0x22'),[_0x28c0('0x2e'),_0x28c0('0x2f')]))[_0x28c0('0x18')](_0x28c0('0x30'),selectNotIn(_0xa9cb91,_0x3dd37f,_0x4cda8b,'cm_hopper',[_0x28c0('0x2e')])))[_0x28c0('0x31')]();}function insertCmHopperBlack(_0x5e2891,_0x2e6bd3,_0x1ea021,_0x41ff44){var _0x4f3eb5=[_0x28c0('0x1b'),'cm_contacts.id',_0x28c0('0x1d'),_0x2e6bd3+'.'+_0x41ff44,'cm_contacts.createdAt',_0x28c0('0x1f')];return squel[_0x28c0('0x32')]()[_0x28c0('0x33')](_0x28c0('0x34'))[_0x28c0('0x23')](['phone',_0x28c0('0x24'),_0x28c0('0x25'),_0x41ff44,_0x28c0('0x35'),'updatedAt'],squel[_0x28c0('0x28')]()['fields'](_0x4f3eb5)[_0x28c0('0x15')](_0x2e6bd3)[_0x28c0('0x16')](_0x28c0('0x29'),null,_0x28c0('0x2a')+_0x2e6bd3+_0x28c0('0x2b'))[_0x28c0('0x16')](_0x1ea021,null,_0x1ea021+_0x28c0('0x17')+_0x2e6bd3+'.'+_0x41ff44)[_0x28c0('0x18')](_0x2e6bd3+_0x28c0('0x2c'),_0x5e2891)[_0x28c0('0x18')](_0x28c0('0x2d'),NOW)['where'](_0x28c0('0x30'),squel[_0x28c0('0x28')]()[_0x28c0('0x13')]('phone')[_0x28c0('0x15')](_0x28c0('0x34'))[_0x28c0('0x18')](_0x28c0('0x36'),_0x5e2891)[_0x28c0('0x18')](_0x41ff44+_0x28c0('0x37'),_0x2e6bd3+'.'+_0x41ff44)))['toString']();}function insertCmContact(_0x191c22,_0x57063e,_0x4d0dda,_0x563736){var _0x568a62=_[_0x28c0('0x38')](_[_0x28c0('0x39')](_0x563736),[_0x28c0('0x25'),'CompanyId',_0x28c0('0x35'),_0x28c0('0x3a')]);return squel[_0x28c0('0x32')]()[_0x28c0('0x33')](_0x28c0('0x29'))['fromQuery'](_0x568a62,squel[_0x28c0('0x28')]()['fields'](_0x568a62)[_0x28c0('0x15')](_0x57063e)[_0x28c0('0x18')]('('+_0x4d0dda[_0x28c0('0x16')](',')+_0x28c0('0x3b'),squel['select']()[_0x28c0('0x3c')](_0x4d0dda)[_0x28c0('0x15')]('cm_contacts')['where'](_0x28c0('0x36'),_0x191c22))[_0x28c0('0x18')]('id\x20IN\x20?',squel[_0x28c0('0x28')]()[_0x28c0('0x13')]('MIN(id)',_0x28c0('0x3d'))[_0x28c0('0x15')](_0x57063e)[_0x28c0('0x3e')](_0x4d0dda['join'](','))))['toString']();}function handleStop(){logger[_0x28c0('0x3f')]('Received\x20SIGINT');stopped=!![];}function handleUncaughtException(_0x19b33c){logger[_0x28c0('0x40')](_0x19b33c[_0x28c0('0x41')]);process[_0x28c0('0x42')](0x1);}function handleError(_0x2e0d62,_0x3298ef){stats[_0x28c0('0x43')][_0x28c0('0x44')]({'name':_0x3298ef[_0x28c0('0x45')],'message':_0x3298ef[_0x28c0('0x41')],'row':_0x2e0d62});}function handleQuery(_0x489e5c){logger[_0x28c0('0x3f')](_0x489e5c);return db[_0x28c0('0x46')][_0x28c0('0x47')](_0x489e5c)[_0x28c0('0x48')](function(_0x78511b){results[_0x28c0('0x44')](_0x78511b);})[_0x28c0('0x49')](function(_0x4f1d1e){logger['error'](_0x4f1d1e[_0x28c0('0x41')]);});}function main(_0x2846c0,_0x4796d4,_0x5d2a15,_0x16dcb2){logger['info'](_0x28c0('0x4a'),_0x2846c0,JSON[_0x28c0('0x4b')](_0x4796d4));process[_0x28c0('0x4c')]('start');var _0xa463eb=_0x4796d4[_0x28c0('0x4d')];var _0x5d8542=_0x4796d4[_0x28c0('0x4e')];var _0x3be37e=path[_0x28c0('0x16')](config[_0x28c0('0x4f')],_0x28c0('0x50'),_0x5d8542+_0x28c0('0x51'));var _0x2452a1=_[_0x28c0('0x39')](_0xa463eb)[_0x28c0('0x16')]();logger[_0x28c0('0x3f')](_0x28c0('0x52'),_0x2452a1);fs[_0x28c0('0x53')](_0x3be37e,_0x2452a1+'\x0a');Papa[_0x28c0('0x54')](fs[_0x28c0('0x55')](_0x2846c0),{'header':!![],'skipEmptyLines':!![],'step':function(_0x5243c9,_0x5ca833){try{for(var _0x57d593=0x0,_0x2846d6=[];_0x57d593<_0x5243c9[_0x28c0('0x56')]['length'];_0x57d593++){stats[_0x28c0('0x57')]+=0x1;if(_0x5243c9[_0x28c0('0x43')][_0x57d593]){handleError(_0x5243c9['data'][_0x57d593],_0x5243c9[_0x28c0('0x43')][_0x57d593]);}else{var _0x4f64a7=[];for(var _0x1c7847 in _0xa463eb){if(_0xa463eb['hasOwnProperty'](_0x1c7847)){if(_0x5243c9['data'][_0x57d593][_0xa463eb[_0x1c7847]]){var _0x2e28c5=_[_0x28c0('0x58')](_0x5243c9[_0x28c0('0x56')][_0x57d593][_0xa463eb[_0x1c7847]][_0x28c0('0x59')](/"/g,'\x27'));switch(_0x1c7847){case'scheduledat':var _0x37151e=moment(_0x2e28c5,_0x28c0('0x11'),!![]);if(_0x37151e['isValid']()){_0x2846d6[_0x28c0('0x44')]('\x22'+_0x2e28c5+'\x22');}else{_0x4f64a7[_0x28c0('0x44')](_0x28c0('0x5a'));}break;case _0x28c0('0x26'):var _0x39288c=parseInt(_0x2e28c5);_0x2e28c5=_[_0x28c0('0x5b')](_0x39288c)||_0x39288c<0x0||_0x39288c>0x4?_0x16dcb2?0x3:0x2:_0x39288c;_0x2846d6['push']('\x22'+_0x2e28c5+'\x22');break;case _0x28c0('0x5c'):var _0x25f828=parseInt(_0x2e28c5);if(_['isNumber'](_0x25f828)&&_[_0x28c0('0x5d')](_0x5d2a15,_0x25f828)){_0x2846d6[_0x28c0('0x44')]('\x22'+_0x25f828+'\x22');}else{_0x4f64a7[_0x28c0('0x44')](_0x28c0('0x5e'));}break;case _0x28c0('0x5f'):if(isEmail(_0x2e28c5)){_0x2846d6['push']('\x22'+_0x2e28c5+'\x22');}else{_0x4f64a7[_0x28c0('0x44')](_0x28c0('0x60'));}break;case'dateOfBirth':var _0x3727ea=moment(_0x2e28c5,_0x28c0('0x61'),!![]);if(_0x3727ea[_0x28c0('0x62')]()){_0x2846d6[_0x28c0('0x44')]('\x22'+_0x2e28c5+'\x22');}else{_0x4f64a7[_0x28c0('0x44')](_0x28c0('0x63'));}break;default:_0x2846d6['push']('\x22'+_0x2e28c5+'\x22');}}else{switch(_0x1c7847){case'firstName':case _0x28c0('0x14'):_0x4f64a7[_0x28c0('0x44')](_0x1c7847+_0x28c0('0x64'));break;default:_0x2846d6['push']('\x22\x22');}}}}if(_0x4f64a7[_0x28c0('0x65')]){handleError(_0x5243c9['data'][_0x57d593],{'code':_0x28c0('0x66'),'message':_0x4f64a7[_0x28c0('0x16')]()});}else{fs['appendFileSync'](_0x3be37e,_0x2846d6[_0x28c0('0x16')]()+'\x0a');}_0x2846d6=[];}if(!(stats[_0x28c0('0x57')]%0xc8)){socket[_0x28c0('0x67')](_0x28c0('0x68')+_0x5d8542,stats);stats[_0x28c0('0x43')]=[];}}if(stopped){logger['info'](_0x28c0('0x69'));_0x5ca833[_0x28c0('0x6a')]();}}catch(_0x100f9f){handleError(_0x5243c9[_0x28c0('0x56')][_0x57d593],{'code':'SystemError','message':_0x100f9f[_0x28c0('0x41')]});logger[_0x28c0('0x40')](_0x28c0('0x6b'),_0x100f9f[_0x28c0('0x41')]);}},'complete':function(){try{var _0x3fa6da=[];var _0x244427=_0x28c0('0x29');if(_0x4796d4[_0x28c0('0x6c')]&&_0x4796d4[_0x28c0('0x6c')][_0x28c0('0x65')]){_0x244427='cm_contacts_'+_0x5d8542;_0x3fa6da[_0x28c0('0x44')]('CREATE\x20TABLE\x20'+_0x244427+_0x28c0('0x6d'));}var _0x3a1e2e=util[_0x28c0('0x10')](_0x28c0('0x6e'),_0x3be37e,_0x244427,_0x2452a1,_0x4796d4[_0x28c0('0x25')],_0x4796d4[_0x28c0('0x6f')]||null,NOW,NOW);if(_[_0x28c0('0x70')](_0xa463eb[_0x28c0('0x71')])){_0x3a1e2e+=',\x20scheduledAt\x20=\x20NOW()';}_0x3fa6da['push'](_0x3a1e2e);if(_0x4796d4['duplicates']&&_0x4796d4['duplicates'][_0x28c0('0x65')]){_0x3fa6da[_0x28c0('0x44')](insertCmContact(_0x4796d4[_0x28c0('0x25')],_0x244427,_0x4796d4['duplicates'],_0xa463eb));_0x3fa6da[_0x28c0('0x44')](_0x28c0('0x72')+_0x244427+';');}_0x3fa6da[_0x28c0('0x44')](insertCmHopper(_0x4796d4[_0x28c0('0x25')],_0x28c0('0x73'),_0x28c0('0x74'),'VoiceQueueId',_0x16dcb2));_0x3fa6da['push'](insertCmHopperBlack(_0x4796d4[_0x28c0('0x25')],_0x28c0('0x75'),'voice_queues',_0x28c0('0x76')));_0x3fa6da[_0x28c0('0x44')](insertCmHopper(_0x4796d4['ListId'],_0x28c0('0x77'),_0x28c0('0x78'),_0x28c0('0x79'),_0x16dcb2));_0x3fa6da[_0x28c0('0x44')](insertCmHopperBlack(_0x4796d4[_0x28c0('0x25')],_0x28c0('0x7a'),_0x28c0('0x78'),_0x28c0('0x79')));BPromise[_0x28c0('0x7b')](_0x3fa6da,handleQuery)[_0x28c0('0x7c')](function(_0x2871b8){stats[_0x28c0('0x7d')]=!![];stats[_0x28c0('0x7e')]=_0x4796d4[_0x28c0('0x6c')]&&_0x4796d4[_0x28c0('0x6c')][_0x28c0('0x65')]?results[0x2][_0x28c0('0x7e')]:results[0x0]['affectedRows'];socket[_0x28c0('0x67')](_0x28c0('0x68')+_0x5d8542,stats);fs['unlink'](_0x2846c0);fs[_0x28c0('0x7f')](_0x3be37e);process[_0x28c0('0x42')](0x0);})[_0x28c0('0x49')](function(_0x4f7932){logger['error'](_0x4f7932[_0x28c0('0x41')]);process[_0x28c0('0x42')](0x1);});}catch(_0x48efcf){logger['error']('complete',_0x48efcf[_0x28c0('0x41')]);process['exit'](0x1);}},'error':function(_0x1d6bbf,_0x5e47f6,_0x3e256c,_0x515f5f){throw new Error(_0x515f5f);}});}function validate(){if(process[_0x28c0('0x80')]&&process['argv'][_0x28c0('0x65')]<0x4){throw new Error('arguments\x20<filename>\x20<parameters>\x20<agents>');}var _0x48f1c5=path[_0x28c0('0x16')](config['root'],_0x28c0('0x50'),process[_0x28c0('0x80')][0x2]);if(!fs[_0x28c0('0x81')](_0x48f1c5)){throw new Error(_0x28c0('0x82'));}var _0x561a71={};try{_0x561a71=JSON[_0x28c0('0x54')](process['argv'][0x3]);if(!_0x561a71['binding']){throw new Error(_0x28c0('0x83'));}if(!_0x561a71[_0x28c0('0x4d')][_0x28c0('0x14')]){throw new Error(_0x28c0('0x84'));}if(!_0x561a71['binding'][_0x28c0('0x85')]){throw new Error(_0x28c0('0x86'));}var _0x2b08c9=0x0;if(_0x561a71[_0x28c0('0x4d')][_0x28c0('0x5c')]){_0x2b08c9=0x1;}if(!_0x561a71[_0x28c0('0x25')]){throw new Error(_0x28c0('0x87'));}}catch(_0x25b00e){throw new Error(_0x28c0('0x88'));}var _0x2dbcb2=[];try{_0x2dbcb2=_[_0x28c0('0x89')](JSON[_0x28c0('0x54')](process['argv'][0x4]),'id');}catch(_0x25a75c){logger[_0x28c0('0x3f')](_0x28c0('0x8a'));}main(_0x48f1c5,_0x561a71,_0x2dbcb2,_0x2b08c9);}validate();process['on'](_0x28c0('0x8b'),handleStop);process['on'](_0x28c0('0x8c'),handleUncaughtException);
\ No newline at end of file
+var _0x1dc9=['\x22onlyIfOpen\x22','from','cm_contacts','.CmListId\x20=\x20?','field','cm_hopper_black','ListId\x20=\x20?','toString','keys','CompanyId','fields',')\x20NOT\x20IN\x20?','id\x20IN\x20?','MIN(id)','min_id','group','error','message','exit','sequelize','query','spread','catch','main','stringify','send','start','socket_timestamp','server/files/tmp','.csv','info','header','writeFileSync','parse','createReadStream','length','rows','data','errors','trim','replace','YYYY-MM-DD\x20HH:mm:ss','push','isNaN','isNumber','includes','agent\x20not\x20exists','email\x20wrong\x20format','dateOfBirth','YYYY-MM-DD','dateOfBirth\x20wrong\x20format\x20(YYYY-MM-DD)','\x20not\x20specified','appendFileSync','emit','Abort\x20parser','abort','SystemError','step','duplicates','cm_contacts_','voice_queues_has_cm_lists','voice_queues','VoiceQueueId','voice_queues_has_cm_blacklists','campaigns_has_cm_lists','campaigns','CampaignId','then','finish','affectedRows','contact:import:','unlink','complete','argv','root','existsSync','file\x20doesn\x27t\x20exists','binding','phone\x20is\x20mandatory','firstName','firstName\x20is\x20mandatory','ListId\x20is\x20mandatory','map','No\x20agent\x20available','SIGINT','uncaughtException','papaparse','util','bluebird','moment','../../../mysqldb','../../../config/environment','../../../config/logger','import','redis','defaults','localhost','socket.io-emitter','test','phone','join','.id\x20=\x20','where','\x20=\x20','.dialCheckDuplicateType\x20IN\x20(','cm_contacts.phone','cm_contacts.id','cm_contacts.ListId','cm_contacts.createdAt','cm_contacts.updatedAt','cm_contacts.priority','insert','into','cm_hopper','fromQuery','scheduledat','ContactId','ListId','createdAt','updatedAt','priority','UserId','recallme','select','cm_contacts.ListId\x20=\x20','.CmListId','cm_contacts.createdAt\x20=\x20?','cm_contacts.phone\x20NOT\x20IN\x20(?)'];(function(_0x185327,_0x3e0451){var _0x13ac92=function(_0x1124e6){while(--_0x1124e6){_0x185327['push'](_0x185327['shift']());}};_0x13ac92(++_0x3e0451);}(_0x1dc9,0x156));var _0x91dc=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x1dc9[_0x14add3];return _0x4a174f;};'use strict';var fs=require('fs');var path=require('path');var _=require('lodash');var Papa=require(_0x91dc('0x0'));var util=require(_0x91dc('0x1'));var BPromise=require(_0x91dc('0x2'));var moment=require(_0x91dc('0x3'));var squel=require('squel');var Redis=require('ioredis');var db=require(_0x91dc('0x4'))['db'];var config=require(_0x91dc('0x5'));var logger=require(_0x91dc('0x6'))(_0x91dc('0x7'));config[_0x91dc('0x8')]=_[_0x91dc('0x9')](config[_0x91dc('0x8')],{'host':_0x91dc('0xa'),'port':0x18eb});var socket=require(_0x91dc('0xb'))(new Redis(config['redis']));var stats={'finish':![],'errors':[],'rows':0x0,'affectedRows':0x0};var results=[];var stopped=![];var NOW=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');function isEmail(_0x904647){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))*$/[_0x91dc('0xc')](_0x904647);}function selectNotIn(_0x654dd9,_0xe41c48,_0x19fd7f,_0x252e90,_0x44065d){return squel['select']()['field'](_0x91dc('0xd'))['from'](_0x252e90)[_0x91dc('0xe')](_0xe41c48,null,_0xe41c48+_0x91dc('0xf')+_0x252e90+'.'+_0x19fd7f)[_0x91dc('0x10')](_0x252e90+'.'+_0x19fd7f+_0x91dc('0x11')+_0x654dd9+'.'+_0x19fd7f)[_0x91dc('0x10')](_0xe41c48+_0x91dc('0x12')+_0x44065d[_0x91dc('0xe')]()+')');}function insertCmHopper(_0x2ad1f8,_0x31d54c,_0x50b8f8,_0x180cc6,_0x56b8fd){var _0xd1342e=[_0x91dc('0x13'),'cm_contacts.scheduledat',_0x91dc('0x14'),_0x91dc('0x15'),_0x31d54c+'.'+_0x180cc6,_0x91dc('0x16'),_0x91dc('0x17'),_0x91dc('0x18'),'cm_contacts.UserId','\x22'+_0x56b8fd+'\x22'];return squel[_0x91dc('0x19')]()[_0x91dc('0x1a')](_0x91dc('0x1b'))[_0x91dc('0x1c')]([_0x91dc('0xd'),_0x91dc('0x1d'),_0x91dc('0x1e'),_0x91dc('0x1f'),_0x180cc6,_0x91dc('0x20'),_0x91dc('0x21'),_0x91dc('0x22'),_0x91dc('0x23'),_0x91dc('0x24')],squel[_0x91dc('0x25')]()['fields'](_0xd1342e)['from'](_0x31d54c)[_0x91dc('0xe')]('cm_contacts',null,_0x91dc('0x26')+_0x31d54c+_0x91dc('0x27'))[_0x91dc('0xe')](_0x50b8f8,null,_0x50b8f8+_0x91dc('0xf')+_0x31d54c+'.'+_0x180cc6)[_0x91dc('0x10')](_0x31d54c+'.CmListId\x20=\x20?',_0x2ad1f8)[_0x91dc('0x10')](_0x91dc('0x28'),NOW)[_0x91dc('0x10')](_0x91dc('0x29'),selectNotIn(_0x31d54c,_0x50b8f8,_0x180cc6,_0x91dc('0x1b'),['\x22always\x22',_0x91dc('0x2a')]))[_0x91dc('0x10')](_0x91dc('0x29'),selectNotIn(_0x31d54c,_0x50b8f8,_0x180cc6,_0x91dc('0x1b'),['\x22always\x22'])))['toString']();}function insertCmHopperBlack(_0x1488c7,_0x3f579e,_0xb337af,_0x36e15e){var _0x37ff9e=[_0x91dc('0x13'),_0x91dc('0x14'),_0x91dc('0x15'),_0x3f579e+'.'+_0x36e15e,_0x91dc('0x16'),_0x91dc('0x17')];return squel[_0x91dc('0x19')]()[_0x91dc('0x1a')]('cm_hopper_black')[_0x91dc('0x1c')](['phone',_0x91dc('0x1e'),_0x91dc('0x1f'),_0x36e15e,'createdAt','updatedAt'],squel[_0x91dc('0x25')]()['fields'](_0x37ff9e)[_0x91dc('0x2b')](_0x3f579e)[_0x91dc('0xe')](_0x91dc('0x2c'),null,_0x91dc('0x26')+_0x3f579e+'.CmListId')['join'](_0xb337af,null,_0xb337af+'.id\x20=\x20'+_0x3f579e+'.'+_0x36e15e)['where'](_0x3f579e+_0x91dc('0x2d'),_0x1488c7)['where'](_0x91dc('0x28'),NOW)['where']('cm_contacts.phone\x20NOT\x20IN\x20(?)',squel[_0x91dc('0x25')]()[_0x91dc('0x2e')](_0x91dc('0xd'))['from'](_0x91dc('0x2f'))['where'](_0x91dc('0x30'),_0x1488c7)[_0x91dc('0x10')](_0x36e15e+'\x20=\x20?',_0x3f579e+'.'+_0x36e15e)))[_0x91dc('0x31')]();}function insertCmContact(_0x49bca0,_0x479afa,_0x2bd323,_0x2e0db8){var _0x352df5=_['concat'](_[_0x91dc('0x32')](_0x2e0db8),[_0x91dc('0x1f'),_0x91dc('0x33'),_0x91dc('0x20'),_0x91dc('0x21')]);return squel[_0x91dc('0x19')]()[_0x91dc('0x1a')]('cm_contacts')['fromQuery'](_0x352df5,squel[_0x91dc('0x25')]()[_0x91dc('0x34')](_0x352df5)[_0x91dc('0x2b')](_0x479afa)[_0x91dc('0x10')]('('+_0x2bd323[_0x91dc('0xe')](',')+_0x91dc('0x35'),squel[_0x91dc('0x25')]()[_0x91dc('0x34')](_0x2bd323)[_0x91dc('0x2b')]('cm_contacts')['where']('ListId\x20=\x20?',_0x49bca0))[_0x91dc('0x10')](_0x91dc('0x36'),squel[_0x91dc('0x25')]()['field'](_0x91dc('0x37'),_0x91dc('0x38'))[_0x91dc('0x2b')](_0x479afa)[_0x91dc('0x39')](_0x2bd323[_0x91dc('0xe')](','))))[_0x91dc('0x31')]();}function handleStop(){logger['info']('Received\x20SIGINT');stopped=!![];}function handleUncaughtException(_0x3a7716){logger[_0x91dc('0x3a')](_0x3a7716[_0x91dc('0x3b')]);process[_0x91dc('0x3c')](0x1);}function handleError(_0x54042e,_0x2e365c){stats['errors']['push']({'name':_0x2e365c['code'],'message':_0x2e365c[_0x91dc('0x3b')],'row':_0x54042e});}function handleQuery(_0x47b447){logger['info'](_0x47b447);return db[_0x91dc('0x3d')][_0x91dc('0x3e')](_0x47b447)[_0x91dc('0x3f')](function(_0x5af2d1){results['push'](_0x5af2d1);})[_0x91dc('0x40')](function(_0x1c0a59){logger[_0x91dc('0x3a')](_0x1c0a59[_0x91dc('0x3b')]);});}function main(_0x208e1a,_0x19102b,_0x5dddd6,_0x33ab2e){logger['info'](_0x91dc('0x41'),_0x208e1a,JSON[_0x91dc('0x42')](_0x19102b));process[_0x91dc('0x43')](_0x91dc('0x44'));var _0x387d24=_0x19102b['binding'];var _0x535693=_0x19102b[_0x91dc('0x45')];var _0x41e7e1=path[_0x91dc('0xe')](config['root'],_0x91dc('0x46'),_0x535693+_0x91dc('0x47'));var _0x100214=_[_0x91dc('0x32')](_0x387d24)['join']();logger[_0x91dc('0x48')](_0x91dc('0x49'),_0x100214);fs[_0x91dc('0x4a')](_0x41e7e1,_0x100214+'\x0a');Papa[_0x91dc('0x4b')](fs[_0x91dc('0x4c')](_0x208e1a),{'header':!![],'skipEmptyLines':!![],'step':function(_0x2fb40d,_0x2d3213){try{for(var _0x355a2b=0x0,_0x162e04=[];_0x355a2b<_0x2fb40d['data'][_0x91dc('0x4d')];_0x355a2b++){stats[_0x91dc('0x4e')]+=0x1;if(_0x2fb40d['errors'][_0x355a2b]){handleError(_0x2fb40d[_0x91dc('0x4f')][_0x355a2b],_0x2fb40d[_0x91dc('0x50')][_0x355a2b]);}else{var _0x14ba59=[];for(var _0x368e32 in _0x387d24){if(_0x387d24['hasOwnProperty'](_0x368e32)){if(_0x2fb40d[_0x91dc('0x4f')][_0x355a2b][_0x387d24[_0x368e32]]){var _0xe59072=_[_0x91dc('0x51')](_0x2fb40d[_0x91dc('0x4f')][_0x355a2b][_0x387d24[_0x368e32]][_0x91dc('0x52')](/"/g,'\x27'));switch(_0x368e32){case _0x91dc('0x1d'):var _0x3ce8e2=moment(_0xe59072,_0x91dc('0x53'),!![]);if(_0x3ce8e2['isValid']()){_0x162e04[_0x91dc('0x54')]('\x22'+_0xe59072+'\x22');}else{_0x14ba59[_0x91dc('0x54')]('scheduledat\x20wrong\x20format\x20(YYYY-MM-DD\x20HH:mm:ss)');}break;case _0x91dc('0x22'):var _0x16e981=parseInt(_0xe59072);_0xe59072=_[_0x91dc('0x55')](_0x16e981)||_0x16e981<0x0||_0x16e981>0x4?_0x33ab2e?0x3:0x2:_0x16e981;_0x162e04['push']('\x22'+_0xe59072+'\x22');break;case _0x91dc('0x23'):var _0x9f0abc=parseInt(_0xe59072);if(_[_0x91dc('0x56')](_0x9f0abc)&&_[_0x91dc('0x57')](_0x5dddd6,_0x9f0abc)){_0x162e04['push']('\x22'+_0x9f0abc+'\x22');}else{_0x14ba59[_0x91dc('0x54')](_0x91dc('0x58'));}break;case'email':if(isEmail(_0xe59072)){_0x162e04['push']('\x22'+_0xe59072+'\x22');}else{_0x14ba59[_0x91dc('0x54')](_0x91dc('0x59'));}break;case _0x91dc('0x5a'):var _0x3c3f8f=moment(_0xe59072,_0x91dc('0x5b'),!![]);if(_0x3c3f8f['isValid']()){_0x162e04['push']('\x22'+_0xe59072+'\x22');}else{_0x14ba59[_0x91dc('0x54')](_0x91dc('0x5c'));}break;default:_0x162e04[_0x91dc('0x54')]('\x22'+_0xe59072+'\x22');}}else{switch(_0x368e32){case'firstName':case _0x91dc('0xd'):_0x14ba59['push'](_0x368e32+_0x91dc('0x5d'));break;default:_0x162e04[_0x91dc('0x54')]('\x22\x22');}}}}if(_0x14ba59['length']){handleError(_0x2fb40d[_0x91dc('0x4f')][_0x355a2b],{'code':'SystemRow','message':_0x14ba59['join']()});}else{fs[_0x91dc('0x5e')](_0x41e7e1,_0x162e04[_0x91dc('0xe')]()+'\x0a');}_0x162e04=[];}if(!(stats['rows']%0xc8)){socket[_0x91dc('0x5f')]('contact:import:'+_0x535693,stats);stats[_0x91dc('0x50')]=[];}}if(stopped){logger[_0x91dc('0x48')](_0x91dc('0x60'));_0x2d3213[_0x91dc('0x61')]();}}catch(_0x57746a){handleError(_0x2fb40d[_0x91dc('0x4f')][_0x355a2b],{'code':_0x91dc('0x62'),'message':_0x57746a[_0x91dc('0x3b')]});logger[_0x91dc('0x3a')](_0x91dc('0x63'),_0x57746a[_0x91dc('0x3b')]);}},'complete':function(){try{var _0x4ced68=[];var _0x5d50fe=_0x91dc('0x2c');if(_0x19102b['duplicates']&&_0x19102b[_0x91dc('0x64')][_0x91dc('0x4d')]){_0x5d50fe=_0x91dc('0x65')+_0x535693;_0x4ced68[_0x91dc('0x54')]('CREATE\x20TABLE\x20'+_0x5d50fe+'\x20LIKE\x20cm_contacts;');}var _0x1ef7c2=util['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',_0x41e7e1,_0x5d50fe,_0x100214,_0x19102b['ListId'],_0x19102b[_0x91dc('0x33')]||null,NOW,NOW);if(_['isNil'](_0x387d24[_0x91dc('0x1d')])){_0x1ef7c2+=',\x20scheduledAt\x20=\x20NOW()';}_0x4ced68['push'](_0x1ef7c2);if(_0x19102b['duplicates']&&_0x19102b[_0x91dc('0x64')][_0x91dc('0x4d')]){_0x4ced68[_0x91dc('0x54')](insertCmContact(_0x19102b[_0x91dc('0x1f')],_0x5d50fe,_0x19102b[_0x91dc('0x64')],_0x387d24));_0x4ced68[_0x91dc('0x54')]('DROP\x20TABLE\x20'+_0x5d50fe+';');}_0x4ced68[_0x91dc('0x54')](insertCmHopper(_0x19102b['ListId'],_0x91dc('0x66'),_0x91dc('0x67'),_0x91dc('0x68'),_0x33ab2e));_0x4ced68['push'](insertCmHopperBlack(_0x19102b['ListId'],_0x91dc('0x69'),_0x91dc('0x67'),_0x91dc('0x68')));_0x4ced68[_0x91dc('0x54')](insertCmHopper(_0x19102b[_0x91dc('0x1f')],_0x91dc('0x6a'),_0x91dc('0x6b'),_0x91dc('0x6c'),_0x33ab2e));_0x4ced68[_0x91dc('0x54')](insertCmHopperBlack(_0x19102b['ListId'],'campaigns_has_cm_blacklists',_0x91dc('0x6b'),'CampaignId'));BPromise['each'](_0x4ced68,handleQuery)[_0x91dc('0x6d')](function(_0x122027){stats[_0x91dc('0x6e')]=!![];stats['affectedRows']=_0x19102b['duplicates']&&_0x19102b[_0x91dc('0x64')][_0x91dc('0x4d')]?results[0x2][_0x91dc('0x6f')]:results[0x0]['affectedRows'];socket['emit'](_0x91dc('0x70')+_0x535693,stats);fs['unlink'](_0x208e1a);fs[_0x91dc('0x71')](_0x41e7e1);process['exit'](0x0);})['catch'](function(_0xf83907){logger[_0x91dc('0x3a')](_0xf83907[_0x91dc('0x3b')]);process['exit'](0x1);});}catch(_0x2c9e35){logger[_0x91dc('0x3a')](_0x91dc('0x72'),_0x2c9e35[_0x91dc('0x3b')]);process[_0x91dc('0x3c')](0x1);}},'error':function(_0xf46e12,_0x31465a,_0x465c8b,_0x4ed17a){throw new Error(_0x4ed17a);}});}function validate(){if(process[_0x91dc('0x73')]&&process[_0x91dc('0x73')][_0x91dc('0x4d')]<0x4){throw new Error('arguments\x20<filename>\x20<parameters>\x20<agents>');}var _0x4bfd29=path[_0x91dc('0xe')](config[_0x91dc('0x74')],_0x91dc('0x46'),process[_0x91dc('0x73')][0x2]);if(!fs[_0x91dc('0x75')](_0x4bfd29)){throw new Error(_0x91dc('0x76'));}var _0x1fd012={};try{_0x1fd012=JSON[_0x91dc('0x4b')](process[_0x91dc('0x73')][0x3]);if(!_0x1fd012['binding']){throw new Error('binding\x20doesn\x27t\x20exists');}if(!_0x1fd012[_0x91dc('0x77')][_0x91dc('0xd')]){throw new Error(_0x91dc('0x78'));}if(!_0x1fd012[_0x91dc('0x77')][_0x91dc('0x79')]){throw new Error(_0x91dc('0x7a'));}var _0x8ccc20=0x0;if(_0x1fd012[_0x91dc('0x77')][_0x91dc('0x23')]){_0x8ccc20=0x1;}if(!_0x1fd012['ListId']){throw new Error(_0x91dc('0x7b'));}}catch(_0x193b8f){throw new Error('body\x20id\x20mandatory');}var _0x16a0b1=[];try{_0x16a0b1=_[_0x91dc('0x7c')](JSON[_0x91dc('0x4b')](process['argv'][0x4]),'id');}catch(_0xeef28b){logger[_0x91dc('0x48')](_0x91dc('0x7d'));}main(_0x4bfd29,_0x1fd012,_0x16a0b1,_0x8ccc20);}validate();process['on'](_0x91dc('0x7e'),handleStop);process['on'](_0x91dc('0x7f'),handleUncaughtException);
\ No newline at end of file
index ebe5725..eb5f41e 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(_0x56183f,_0x1bf045){var _0x3a7571=function(_0x314130){while(--_0x314130){_0x56183f['push'](_0x56183f['shift']());}};_0x3a7571(++_0x1bf045);}(_0x5f66,0x1a0));var _0x65f6=function(_0x580576,_0x2f107d){_0x580576=_0x580576-0x0;var _0x3f55a0=_0x5f66[_0x580576];return _0x3f55a0;};'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 _0x5f2f=['Call\x20To','destexten','Queue','UniqueId','uniqueid','Date','agentcalledAt','***\x20Agent\x20Info\x20***','Agent\x20Name','destcalleridname','Agent\x20Ring','agentconnectAt','Agent\x20Complete','Hold\x20Time','holdtime','Talk\x20Time','talktime','outbound','Called\x20Number','Member\x20Name','starttime','***\x20Time\x20Info\x20***','endtime','Duration','duration','Billable\x20Time','billableseconds','getSubjects','string','[xCALLY\x20Ticket]','toLowerCase','voice','push','variable','queue','calleridnum','Outbound\x20Call','destcalleridnum','getDescriptions','***\x20Call\x20Info\x20***','keyValue','Caller\x20Number','Caller\x20Name','calleridname'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x5f2f,0x73));var _0xf5f2=function(_0x303698,_0x3aa04a){_0x303698=_0x303698-0x0;var _0x295f92=_0x5f2f[_0x303698];return _0x295f92;};'use strict';exports[_0xf5f2('0x0')]=function(_0x423dd9,_0x2dcf60){var _0x1a7be1=[{'type':_0xf5f2('0x1'),'content':_0xf5f2('0x2'),'variableName':null}];switch(_0x423dd9[_0xf5f2('0x3')]()){case _0xf5f2('0x4'):switch(_0x2dcf60['toLowerCase']()){case'inbound':_0x1a7be1[_0xf5f2('0x5')]({'type':_0xf5f2('0x6'),'content':'','variableName':_0xf5f2('0x7')});_0x1a7be1[_0xf5f2('0x5')]({'type':_0xf5f2('0x6'),'content':'','variableName':_0xf5f2('0x8')});break;case'outbound':_0x1a7be1[_0xf5f2('0x5')]({'type':_0xf5f2('0x1'),'content':_0xf5f2('0x9'),'variableName':null});_0x1a7be1['push']({'type':_0xf5f2('0x6'),'content':'','variableName':_0xf5f2('0xa')});break;}}return _0x1a7be1;};exports[_0xf5f2('0xb')]=function(_0x4e0e6b,_0x977a59){var _0x4ebbbe=[];switch(_0x4e0e6b['toLowerCase']()){case _0xf5f2('0x4'):switch(_0x977a59[_0xf5f2('0x3')]()){case'inbound':_0x4ebbbe=[{'type':_0xf5f2('0x1'),'content':_0xf5f2('0xc'),'key':null,'keyType':null,'variableName':null},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0xe'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x8')},{'type':'keyValue','content':'','key':_0xf5f2('0xf'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x10')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x11'),'keyType':'variable','variableName':_0xf5f2('0x12')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x13'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x7')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x14'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x15')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x16'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x17')},{'type':_0xf5f2('0x1'),'content':_0xf5f2('0x18'),'key':null,'keyType':null,'variableName':null},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x19'),'keyType':'variable','variableName':_0xf5f2('0x1a')},{'type':_0xf5f2('0xd'),'content':'','key':'Agent\x20Number','keyType':'variable','variableName':_0xf5f2('0xa')},{'type':_0xf5f2('0x1'),'content':'***\x20Time\x20Info\x20***','key':null,'keyType':null,'variableName':null},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x1b'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x17')},{'type':_0xf5f2('0xd'),'content':'','key':'Agent\x20Connect','keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x1c')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x1d'),'keyType':_0xf5f2('0x6'),'variableName':'agentcompleteAt'},{'type':'keyValue','content':'','key':_0xf5f2('0x1e'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x1f')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x20'),'keyType':_0xf5f2('0x6'),'variableName':_0xf5f2('0x21')}];break;case _0xf5f2('0x22'):_0x4ebbbe=[{'type':_0xf5f2('0x1'),'content':'***\x20Call\x20Info\x20***','variableName':null},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x23'),'keyType':_0xf5f2('0x6'),'keyContent':'','variableName':_0xf5f2('0xa')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x24'),'keyType':'variable','keyContent':'','variableName':'membername'},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x14'),'keyType':_0xf5f2('0x6'),'keyContent':'','variableName':'uniqueid'},{'type':'keyValue','content':'','key':_0xf5f2('0x16'),'keyType':_0xf5f2('0x6'),'keyContent':'','variableName':_0xf5f2('0x25')},{'type':_0xf5f2('0x1'),'content':_0xf5f2('0x26')},{'type':'keyValue','content':'','key':'Answer\x20Time','keyType':_0xf5f2('0x6'),'keyContent':'','variableName':'answertime'},{'type':_0xf5f2('0xd'),'content':'','key':'Complete\x20Time','keyType':_0xf5f2('0x6'),'keyContent':'','variableName':_0xf5f2('0x27')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x28'),'keyType':_0xf5f2('0x6'),'keyContent':'','variableName':_0xf5f2('0x29')},{'type':_0xf5f2('0xd'),'content':'','key':_0xf5f2('0x2a'),'keyType':'variable','keyContent':'','variableName':_0xf5f2('0x2b')}];break;}}return _0x4ebbbe;};
\ No newline at end of file
index 58c5a52..2ddd1c4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x72b1=['../../config/logger','openchannel-interactions','mail-interactions','chat-interactions','InteractionId','upperFirst','unknown','toLowerCase','[%s]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','toUpperCase','name','role','stringify','null','Interaction','then','update','info','catch','error','tracked','user','query','clone','body','phone','mobile','lodash','../../mysqldb'];(function(_0x514677,_0xb8d8e9){var _0x120004=function(_0x5241f4){while(--_0x5241f4){_0x514677['push'](_0x514677['shift']());}};_0x120004(++_0xb8d8e9);}(_0x72b1,0x103));var _0x172b=function(_0xe17101,_0x3f1529){_0xe17101=_0xe17101-0x0;var _0x4e17f1=_0x72b1[_0xe17101];return _0x4e17f1;};'use strict';var _=require(_0x172b('0x0'));var db=require(_0x172b('0x1'))['db'];var loggers={'openchannel':require(_0x172b('0x2'))(_0x172b('0x3')),'mail':require(_0x172b('0x2'))(_0x172b('0x4')),'fax':require('../../config/logger')('fax-interactions'),'sms':require(_0x172b('0x2'))('sms-interactions'),'chat':require('../../config/logger')(_0x172b('0x5'))};function getInteractionId(_0x3f53f6,_0x46272f,_0x33ceb9){if(_0x3f53f6&&_0x3f53f6[_['upperFirst'](_0x33ceb9)+_0x172b('0x6')]){return _0x3f53f6[_[_0x172b('0x7')](_0x33ceb9)+_0x172b('0x6')];}else if(_0x3f53f6&&_0x3f53f6['id']){return _0x3f53f6['id'];}else if(_0x46272f&&_0x46272f['id']){return _0x46272f['id'];}else{return _0x172b('0x8');}}function log(_0x25cc02,_0x2213a2,_0x25bca8,_0x200ac1,_0x4778a2,_0x343def){loggers[_0x4778a2[_0x172b('0x9')]()][_0x25cc02](_0x172b('0xa'),_0x343def[_0x172b('0xb')](),_0x2213a2?_0x2213a2['id']:null,_0x2213a2?_0x2213a2[_0x172b('0xc')]:null,_0x2213a2?_0x2213a2[_0x172b('0xd')]:null,getInteractionId(_0x25bca8,_0x200ac1,_0x4778a2),_0x25bca8?JSON[_0x172b('0xe')](_0x25bca8):_0x172b('0xf'));}function updateUser(_0x274ef8,_0x298fcf,_0x38de78,_0xc5ce27,_0x57dcc6){db[_[_0x172b('0x7')](_0xc5ce27)+_0x172b('0x10')]['findOne']({'where':{'id':getInteractionId(_0x298fcf,_0x38de78,_0xc5ce27)}})[_0x172b('0x11')](function(_0x55e27b){if(_0x55e27b){return _0x55e27b[_0x172b('0x12')]({'UserId':_0x274ef8?_0x274ef8['id']:null});}})['then'](function(_0x2447e6){if(_0x2447e6){log(_0x172b('0x13'),_0x274ef8,_0x298fcf,_0x38de78,_0xc5ce27,_0x57dcc6);}})[_0x172b('0x14')](function(){log(_0x172b('0x15'),_0x274ef8,_0x298fcf,_0x38de78,_0xc5ce27,_0x57dcc6);});}exports[_0x172b('0x16')]=function(_0xe994a1,_0x45e63e){return function(_0x475627,_0x41edce,_0x225abd){var _0x36e4ef=_0x475627[_0x172b('0x17')];var _0x1d9000={};var _0xae1c70=_0x475627[_0x172b('0x18')];if(_0x1d9000){_0x1d9000=_[_0x172b('0x19')](_0x475627[_0x172b('0x1a')]);_0x1d9000=_['omit'](_0x1d9000,[_0x172b('0x1a'),'html',_0x172b('0x1b'),'fax',_0x172b('0x1c')]);}updateUser(_0x36e4ef,_0x1d9000,_0xae1c70,_0xe994a1,_0x45e63e);_0x225abd(null);};};
\ No newline at end of file
+var _0xe36b=['query','clone','body','omit','fax','mobile','lodash','../../mysqldb','../../config/logger','openchannel-interactions','mail-interactions','fax-interactions','chat-interactions','upperFirst','InteractionId','unknown','[%s]\x20id=%s\x20name=%s\x20role=%s\x20interaction=%s\x20body=%s','toUpperCase','role','stringify','null','Interaction','findOne','then','catch','error','user'];(function(_0x58d36e,_0x30ab8c){var _0x5cf64b=function(_0x5210e7){while(--_0x5210e7){_0x58d36e['push'](_0x58d36e['shift']());}};_0x5cf64b(++_0x30ab8c);}(_0xe36b,0xde));var _0xbe36=function(_0x31d23c,_0x4de7f0){_0x31d23c=_0x31d23c-0x0;var _0x1d7b5e=_0xe36b[_0x31d23c];return _0x1d7b5e;};'use strict';var _=require(_0xbe36('0x0'));var db=require(_0xbe36('0x1'))['db'];var loggers={'openchannel':require(_0xbe36('0x2'))(_0xbe36('0x3')),'mail':require('../../config/logger')(_0xbe36('0x4')),'fax':require(_0xbe36('0x2'))(_0xbe36('0x5')),'sms':require('../../config/logger')('sms-interactions'),'chat':require('../../config/logger')(_0xbe36('0x6'))};function getInteractionId(_0x2fe880,_0x1f01af,_0x134863){if(_0x2fe880&&_0x2fe880[_[_0xbe36('0x7')](_0x134863)+_0xbe36('0x8')]){return _0x2fe880[_['upperFirst'](_0x134863)+'InteractionId'];}else if(_0x2fe880&&_0x2fe880['id']){return _0x2fe880['id'];}else if(_0x1f01af&&_0x1f01af['id']){return _0x1f01af['id'];}else{return _0xbe36('0x9');}}function log(_0x36edc0,_0x40f403,_0x27bf17,_0x44522d,_0x1e9127,_0x1af76d){loggers[_0x1e9127['toLowerCase']()][_0x36edc0](_0xbe36('0xa'),_0x1af76d[_0xbe36('0xb')](),_0x40f403?_0x40f403['id']:null,_0x40f403?_0x40f403['name']:null,_0x40f403?_0x40f403[_0xbe36('0xc')]:null,getInteractionId(_0x27bf17,_0x44522d,_0x1e9127),_0x27bf17?JSON[_0xbe36('0xd')](_0x27bf17):_0xbe36('0xe'));}function updateUser(_0x21839b,_0x1f1004,_0x1aa4c7,_0x2c8e7c,_0x36e448){db[_['upperFirst'](_0x2c8e7c)+_0xbe36('0xf')][_0xbe36('0x10')]({'where':{'id':getInteractionId(_0x1f1004,_0x1aa4c7,_0x2c8e7c)}})[_0xbe36('0x11')](function(_0xdacdcf){if(_0xdacdcf){return _0xdacdcf['update']({'UserId':_0x21839b?_0x21839b['id']:null});}})['then'](function(_0x588047){if(_0x588047){log('info',_0x21839b,_0x1f1004,_0x1aa4c7,_0x2c8e7c,_0x36e448);}})[_0xbe36('0x12')](function(){log(_0xbe36('0x13'),_0x21839b,_0x1f1004,_0x1aa4c7,_0x2c8e7c,_0x36e448);});}exports['tracked']=function(_0x39c444,_0x39c5ec){return function(_0x468edd,_0x4eb37e,_0x18149d){var _0x678122=_0x468edd[_0xbe36('0x14')];var _0x224757={};var _0x496618=_0x468edd[_0xbe36('0x15')];if(_0x224757){_0x224757=_[_0xbe36('0x16')](_0x468edd[_0xbe36('0x17')]);_0x224757=_[_0xbe36('0x18')](_0x224757,['body','html','phone',_0xbe36('0x19'),_0xbe36('0x1a')]);}updateUser(_0x678122,_0x224757,_0x496618,_0x39c444,_0x39c5ec);_0x18149d(null);};};
\ No newline at end of file
index dec5aea..d7901f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2c49=['admin','user','isUserLimit','crypto','util','composable-middleware','../../mysqldb','../../config/environment','data1','license','split','createDecipher','%s:%s:%s','update','utf8','final','parse','use','License','then','count','json','users','User'];(function(_0xc14006,_0x119551){var _0x497d6a=function(_0x11b95f){while(--_0x11b95f){_0xc14006['push'](_0xc14006['shift']());}};_0x497d6a(++_0x119551);}(_0x2c49,0xc3));var _0x92c4=function(_0xdad237,_0x361a1d){_0xdad237=_0xdad237-0x0;var _0x15c575=_0x2c49[_0xdad237];return _0x15c575;};'use strict';var crypto=require(_0x92c4('0x0'));var util=require(_0x92c4('0x1'));var compose=require(_0x92c4('0x2'));var db=require(_0x92c4('0x3'))['db'];var config=require(_0x92c4('0x4'));function getValueFromLicense(_0x59da83,_0x22a29d){if(_0x59da83&&_0x22a29d){if(_0x22a29d[_0x92c4('0x5')]&&_0x22a29d['license']){var _0x91f692=_0x22a29d['data1'];var _0xef1ede=_0x22a29d[_0x92c4('0x6')];var _0x356a2e=_0x91f692[_0x92c4('0x7')]('-')[0x4];var _0x31c24a=_0x91f692[_0x92c4('0x7')]('-')[0x0];var _0x1de6b9=crypto[_0x92c4('0x8')]('aes-256-ctr',util['format'](_0x92c4('0x9'),_0x356a2e,_0x91f692,_0x31c24a));var _0x3ed3b8=_0x1de6b9[_0x92c4('0xa')](_0xef1ede,'base64',_0x92c4('0xb'));_0x3ed3b8+=_0x1de6b9[_0x92c4('0xc')](_0x92c4('0xb'));var _0x19a403=JSON[_0x92c4('0xd')](_0x3ed3b8);return _0x19a403['hasOwnProperty'](_0x59da83)?_0x19a403[_0x59da83]:null;}}return null;}function isLimit(_0x53a329,_0x519875,_0x120111,_0x3bd55c){var _0x58fde4=_0x519875;return compose()[_0x92c4('0xe')](function(_0x196ea1,_0x1944d1,_0x4d2ec7){return db[_0x92c4('0xf')]['findOne']({'where':{'id':0x1},'raw':!![]})[_0x92c4('0x10')](function(_0x38e7b7){var _0x486511=getValueFromLicense(_0x53a329,_0x38e7b7);return _0x486511?_0x486511:_0x58fde4;})[_0x92c4('0x10')](function(_0x8f75b8){_0x58fde4=_0x8f75b8;return _0x120111[_0x92c4('0x11')](_0x3bd55c);})[_0x92c4('0x10')](function(_0x495587){if(_0x495587>=_0x58fde4){return _0x1944d1['status'](0x193)[_0x92c4('0x12')]({'message':util['format']('Maximum\x20%s\x20limit\x20have\x20been\x20reached',_0x53a329)});}_0x4d2ec7();})['catch'](function(_0xc306d9){_0x4d2ec7(_0xc306d9);});});}function isUserLimit(){return isLimit(_0x92c4('0x13'),0x1,db[_0x92c4('0x14')],{'where':{'$or':[{'role':_0x92c4('0x15')},{'role':_0x92c4('0x16')}]}});}exports[_0x92c4('0x17')]=isUserLimit;
\ No newline at end of file
+var _0x9619=['base64','utf8','final','parse','hasOwnProperty','use','License','findOne','then','count','status','catch','users','User','crypto','util','composable-middleware','../../config/environment','license','split','createDecipher','format','%s:%s:%s','update'];(function(_0x14e384,_0x51d9ab){var _0xb8170d=function(_0x278ae0){while(--_0x278ae0){_0x14e384['push'](_0x14e384['shift']());}};_0xb8170d(++_0x51d9ab);}(_0x9619,0x6e));var _0x9961=function(_0x2578f3,_0x5b13f5){_0x2578f3=_0x2578f3-0x0;var _0x4505eb=_0x9619[_0x2578f3];return _0x4505eb;};'use strict';var crypto=require(_0x9961('0x0'));var util=require(_0x9961('0x1'));var compose=require(_0x9961('0x2'));var db=require('../../mysqldb')['db'];var config=require(_0x9961('0x3'));function getValueFromLicense(_0x3437dc,_0x1e1d30){if(_0x3437dc&&_0x1e1d30){if(_0x1e1d30['data1']&&_0x1e1d30[_0x9961('0x4')]){var _0x52b3b8=_0x1e1d30['data1'];var _0x56d64c=_0x1e1d30['license'];var _0x32996f=_0x52b3b8['split']('-')[0x4];var _0x1f7b60=_0x52b3b8[_0x9961('0x5')]('-')[0x0];var _0x52b079=crypto[_0x9961('0x6')]('aes-256-ctr',util[_0x9961('0x7')](_0x9961('0x8'),_0x32996f,_0x52b3b8,_0x1f7b60));var _0x5f290e=_0x52b079[_0x9961('0x9')](_0x56d64c,_0x9961('0xa'),_0x9961('0xb'));_0x5f290e+=_0x52b079[_0x9961('0xc')](_0x9961('0xb'));var _0x487e93=JSON[_0x9961('0xd')](_0x5f290e);return _0x487e93[_0x9961('0xe')](_0x3437dc)?_0x487e93[_0x3437dc]:null;}}return null;}function isLimit(_0x3ac152,_0x165d77,_0x1341ba,_0x3fa514){var _0x2ff34a=_0x165d77;return compose()[_0x9961('0xf')](function(_0x1d2772,_0x3fc077,_0x42e1be){return db[_0x9961('0x10')][_0x9961('0x11')]({'where':{'id':0x1},'raw':!![]})[_0x9961('0x12')](function(_0x29ef4c){var _0xc7dd40=getValueFromLicense(_0x3ac152,_0x29ef4c);return _0xc7dd40?_0xc7dd40:_0x2ff34a;})[_0x9961('0x12')](function(_0x548087){_0x2ff34a=_0x548087;return _0x1341ba[_0x9961('0x13')](_0x3fa514);})['then'](function(_0x381b88){if(_0x381b88>=_0x2ff34a){return _0x3fc077[_0x9961('0x14')](0x193)['json']({'message':util[_0x9961('0x7')]('Maximum\x20%s\x20limit\x20have\x20been\x20reached',_0x3ac152)});}_0x42e1be();})[_0x9961('0x15')](function(_0x343bb6){_0x42e1be(_0x343bb6);});});}function isUserLimit(){return isLimit(_0x9961('0x16'),0x1,db[_0x9961('0x17')],{'where':{'$or':[{'role':'admin'},{'role':'user'}]}});}exports['isUserLimit']=isUserLimit;
\ No newline at end of file
index 644272c..3ce9c40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4d98=['cast','col','unsigned','substr','DESC','ASC','omit','isArray','length','unset','hasOwnProperty','sequelize','split','filters','isEmpty','forOwn','parse','limit','offset','sort','indexOf','priority'];(function(_0x122ef9,_0x451d2a){var _0x42fba0=function(_0x17c9d3){while(--_0x17c9d3){_0x122ef9['push'](_0x122ef9['shift']());}};_0x42fba0(++_0x451d2a);}(_0x4d98,0xd1));var _0x84d9=function(_0x146f27,_0xbf8178){_0x146f27=_0x146f27-0x0;var _0x1fb28b=_0x4d98[_0x146f27];return _0x1fb28b;};'use strict';var _=require('lodash');var sequelize=require(_0x84d9('0x0'));var LIMIT_VALUE=0xfa;exports['fields']=function(_0x8a7f00){var _0x1b7e88=null;if(_0x8a7f00){_0x1b7e88=_0x8a7f00[_0x84d9('0x1')](',');}return _0x1b7e88;};exports[_0x84d9('0x2')]=function(_0x24e807){var _0x504b13={};if(!_[_0x84d9('0x3')](_0x24e807)){_0x504b13={};_[_0x84d9('0x4')](_0x24e807,function(_0x2eb7b9,_0x519b28){try{_0x504b13[_0x519b28]=JSON[_0x84d9('0x5')](_0x2eb7b9);}catch(_0x2d9bf0){_0x504b13[_0x519b28]=_0x2eb7b9['split'](',');}});}return _0x504b13;};exports[_0x84d9('0x6')]=function(_0x498304){_0x498304=parseInt(_0x498304,0xa);if(!_0x498304||_0x498304<0x0){_0x498304=LIMIT_VALUE;}return _0x498304;};exports[_0x84d9('0x7')]=function(_0x509e86){_0x509e86=parseInt(_0x509e86,0xa);if(!_0x509e86||_0x509e86<0x0){_0x509e86=0x0;}return _0x509e86;};exports[_0x84d9('0x8')]=function(_0x3215b7){var _0x3cb44b,_0x177367=null;if(_0x3215b7){_0x3cb44b=_0x3215b7[_0x84d9('0x1')](',');_0x177367=_['map'](_0x3cb44b,function(_0x2dc8ed){if(_0x2dc8ed[_0x84d9('0x9')]('-')===0x0){return[_0x2dc8ed===_0x84d9('0xa')?sequelize[_0x84d9('0xb')](sequelize[_0x84d9('0xc')](_0x84d9('0xa')),_0x84d9('0xd')):_0x2dc8ed[_0x84d9('0xe')](0x1),_0x84d9('0xf')];}else{return[_0x2dc8ed===_0x84d9('0xa')?sequelize['cast'](sequelize[_0x84d9('0xc')](_0x84d9('0xa')),_0x84d9('0xd')):_0x2dc8ed,_0x84d9('0x10')];}});}return _0x177367;};exports[_0x84d9('0x11')]=function(_0x598193,_0x308e55){if(_['isEmpty'](_0x598193)){return _0x598193;}if(_[_0x84d9('0x12')](_0x598193)){for(var _0x215532=0x0;_0x215532<_0x598193['length'];_0x215532+=0x1){_0x598193[_0x215532]=this[_0x84d9('0x11')](_0x598193[_0x215532],_0x308e55);}return _0x598193;}if(!_['isObject'](_0x598193)){return _0x598193;}if(_['isString'](_0x308e55)){_0x308e55=[_0x308e55];}if(!_[_0x84d9('0x12')](_0x308e55)){return _0x598193;}for(var _0x196344=0x0;_0x196344<_0x308e55[_0x84d9('0x13')];_0x196344+=0x1){_[_0x84d9('0x14')](_0x598193,_0x308e55[_0x196344]);}for(var _0x59f178 in _0x598193){if(_0x598193[_0x84d9('0x15')](_0x59f178)){_0x598193[_0x59f178]=this[_0x84d9('0x11')](_0x598193[_0x59f178],_0x308e55);}}return _0x598193;};
\ No newline at end of file
+var _0xd02f=['offset','sort','map','cast','col','priority','unsigned','DESC','omit','isArray','length','isObject','isString','unset','hasOwnProperty','lodash','sequelize','fields','split','isEmpty','forOwn','limit'];(function(_0x1ae6b3,_0xe6d8e9){var _0x598044=function(_0x3c6b07){while(--_0x3c6b07){_0x1ae6b3['push'](_0x1ae6b3['shift']());}};_0x598044(++_0xe6d8e9);}(_0xd02f,0x12d));var _0xfd02=function(_0x27336c,_0x40a9fc){_0x27336c=_0x27336c-0x0;var _0x6ade80=_0xd02f[_0x27336c];return _0x6ade80;};'use strict';var _=require(_0xfd02('0x0'));var sequelize=require(_0xfd02('0x1'));var LIMIT_VALUE=0xfa;exports[_0xfd02('0x2')]=function(_0x2e38c5){var _0x17ec87=null;if(_0x2e38c5){_0x17ec87=_0x2e38c5[_0xfd02('0x3')](',');}return _0x17ec87;};exports['filters']=function(_0x4cbd86){var _0x32fc87={};if(!_[_0xfd02('0x4')](_0x4cbd86)){_0x32fc87={};_[_0xfd02('0x5')](_0x4cbd86,function(_0x366505,_0x5015fe){try{_0x32fc87[_0x5015fe]=JSON['parse'](_0x366505);}catch(_0x2e4b51){_0x32fc87[_0x5015fe]=_0x366505[_0xfd02('0x3')](',');}});}return _0x32fc87;};exports[_0xfd02('0x6')]=function(_0x2199ae){_0x2199ae=parseInt(_0x2199ae,0xa);if(!_0x2199ae||_0x2199ae<0x0){_0x2199ae=LIMIT_VALUE;}return _0x2199ae;};exports[_0xfd02('0x7')]=function(_0x4b1e52){_0x4b1e52=parseInt(_0x4b1e52,0xa);if(!_0x4b1e52||_0x4b1e52<0x0){_0x4b1e52=0x0;}return _0x4b1e52;};exports[_0xfd02('0x8')]=function(_0x2c4dec){var _0xe37990,_0x29fa30=null;if(_0x2c4dec){_0xe37990=_0x2c4dec[_0xfd02('0x3')](',');_0x29fa30=_[_0xfd02('0x9')](_0xe37990,function(_0x12a8a7){if(_0x12a8a7['indexOf']('-')===0x0){return[_0x12a8a7==='priority'?sequelize[_0xfd02('0xa')](sequelize[_0xfd02('0xb')](_0xfd02('0xc')),_0xfd02('0xd')):_0x12a8a7['substr'](0x1),_0xfd02('0xe')];}else{return[_0x12a8a7===_0xfd02('0xc')?sequelize['cast'](sequelize['col']('priority'),'unsigned'):_0x12a8a7,'ASC'];}});}return _0x29fa30;};exports[_0xfd02('0xf')]=function(_0x31d706,_0x59b953){if(_[_0xfd02('0x4')](_0x31d706)){return _0x31d706;}if(_[_0xfd02('0x10')](_0x31d706)){for(var _0x47b65b=0x0;_0x47b65b<_0x31d706[_0xfd02('0x11')];_0x47b65b+=0x1){_0x31d706[_0x47b65b]=this[_0xfd02('0xf')](_0x31d706[_0x47b65b],_0x59b953);}return _0x31d706;}if(!_[_0xfd02('0x12')](_0x31d706)){return _0x31d706;}if(_[_0xfd02('0x13')](_0x59b953)){_0x59b953=[_0x59b953];}if(!_[_0xfd02('0x10')](_0x59b953)){return _0x31d706;}for(var _0x43d1ac=0x0;_0x43d1ac<_0x59b953[_0xfd02('0x11')];_0x43d1ac+=0x1){_[_0xfd02('0x14')](_0x31d706,_0x59b953[_0x43d1ac]);}for(var _0x268c93 in _0x31d706){if(_0x31d706[_0xfd02('0x15')](_0x268c93)){_0x31d706[_0x268c93]=this[_0xfd02('0xf')](_0x31d706[_0x268c93],_0x59b953);}}return _0x31d706;};
\ No newline at end of file
index c0d00d3..724f4d9 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(_0xc298ad,_0xea4dc2){var _0x11b2e6=function(_0xe2314f){while(--_0xe2314f){_0xc298ad['push'](_0xc298ad['shift']());}};_0x11b2e6(++_0xea4dc2);}(_0xa9e0,0x123));var _0x0a9e=function(_0x481bf7,_0x437f69){_0x481bf7=_0x481bf7-0x0;var _0x461787=_0xa9e0[_0x481bf7];return _0x461787;};'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 _0x70e0=['test','client','set','json\x20replacer','split','static','get','views','/server/views','engine','html','renderFile','view\x20engine','json','50mb','initialize','express','serve-favicon','body-parser','errorhandler','path','passport','cors','./environment','default','env','production','use','join','root','public','favicon.ico','development'];(function(_0x148995,_0x4485b6){var _0x5aec76=function(_0x523c1f){while(--_0x523c1f){_0x148995['push'](_0x148995['shift']());}};_0x5aec76(++_0x4485b6);}(_0x70e0,0x17b));var _0x070e=function(_0x5bcee3,_0x496d06){_0x5bcee3=_0x5bcee3-0x0;var _0x3e96d2=_0x70e0[_0x5bcee3];return _0x3e96d2;};'use strict';var express=require(_0x070e('0x0'));var favicon=require(_0x070e('0x1'));var bodyParser=require(_0x070e('0x2'));var methodOverride=require('method-override');var cookieParser=require('cookie-parser');var errorHandler=require(_0x070e('0x3'));var path=require(_0x070e('0x4'));var passport=require(_0x070e('0x5'));var cors=require(_0x070e('0x6'));var moment=require('moment');var config=require(_0x070e('0x7'));var db=require('../mysqldb')['db'];exports[_0x070e('0x8')]=function(_0x4b041d){var _0x56e420=_0x4b041d['get'](_0x070e('0x9'));if(_0x56e420===_0x070e('0xa')){_0x4b041d[_0x070e('0xb')](favicon(path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0xe'),_0x070e('0xf'))));_0x4b041d['set']('appPath',path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0xe')));}if(_0x56e420===_0x070e('0x10')||_0x56e420===_0x070e('0x11')){_0x4b041d[_0x070e('0xb')](favicon(path[_0x070e('0xc')](config[_0x070e('0xd')],_0x070e('0x12'),_0x070e('0xf'))));_0x4b041d[_0x070e('0x13')]('appPath',path['join'](config[_0x070e('0xd')],'client'));_0x4b041d['use'](errorHandler());}_0x4b041d['set'](_0x070e('0x14'),function(_0x14c3fd,_0x51d14d){if(this[_0x14c3fd]instanceof Date){_0x51d14d=this[_0x14c3fd]['toISOString']()[_0x070e('0x15')]('.')[0x0]+'Z';}return _0x51d14d;});_0x4b041d[_0x070e('0xb')](express[_0x070e('0x16')](_0x4b041d[_0x070e('0x17')]('appPath')));_0x4b041d['set'](_0x070e('0x18'),config[_0x070e('0xd')]+_0x070e('0x19'));_0x4b041d[_0x070e('0x1a')](_0x070e('0x1b'),require('ejs')[_0x070e('0x1c')]);_0x4b041d[_0x070e('0x13')](_0x070e('0x1d'),_0x070e('0x1b'));_0x4b041d[_0x070e('0xb')](bodyParser['urlencoded']({'limit':'50mb','extended':!![]}));_0x4b041d['use'](bodyParser[_0x070e('0x1e')]({'limit':_0x070e('0x1f')}));_0x4b041d[_0x070e('0xb')](cors());_0x4b041d['use'](methodOverride());_0x4b041d[_0x070e('0xb')](cookieParser());_0x4b041d['use'](passport[_0x070e('0x20')]());};
\ No newline at end of file
index 799a822..230a2f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa022=['concat','mac','00:00:00:00:00:00','127.0.0.1','getFirstInterface','cpus','model','join','createHash','md5','update','hex','getUuid','platform','win32','dmidecode\x20--string\x20system-uuid','utf8','replace','macAddress','ipAddress','digest','substring','lodash','crypto','bimedia-machine-uuid','child_process','execSync','orderBy','filter','family','internal'];(function(_0x598b79,_0xdd2ec9){var _0x201b1d=function(_0x40541f){while(--_0x40541f){_0x598b79['push'](_0x598b79['shift']());}};_0x201b1d(++_0xdd2ec9);}(_0xa022,0x1e7));var _0x2a02=function(_0x42d6da,_0x1dcfd8){_0x42d6da=_0x42d6da-0x0;var _0x591fab=_0xa022[_0x42d6da];return _0x591fab;};'use strict';var _=require(_0x2a02('0x0'));var os=require('os');var crypto=require(_0x2a02('0x1'));var machine=require(_0x2a02('0x2'));var exec=require(_0x2a02('0x3'))[_0x2a02('0x4')];function getInterfaces(){var _0x26792f=[];var _0x510b5c=os['networkInterfaces']();var _0x18f586=_[_0x2a02('0x5')](_['keys'](_0x510b5c));for(var _0x319a9f=0x0;_0x319a9f<_0x18f586['length'];_0x319a9f++){var _0x14089f=_0x510b5c[_0x18f586[_0x319a9f]][_0x2a02('0x6')](function(_0xfcfa50){return _0xfcfa50[_0x2a02('0x7')]==='IPv4'&&_0xfcfa50[_0x2a02('0x8')]===![];});_0x26792f=_0x26792f[_0x2a02('0x9')](_0x14089f);}return _0x26792f;}function getFirstInterface(){var _0x36249c=_['head'](getInterfaces());return{'macAddress':_0x36249c&&_0x36249c[_0x2a02('0xa')]?_0x36249c[_0x2a02('0xa')]:_0x2a02('0xb'),'ipAddress':_0x36249c&&_0x36249c['address']?_0x36249c['address']:_0x2a02('0xc')};}exports[_0x2a02('0xd')]=getFirstInterface;function getCPUhash(){var _0x1d428e=_[_0x2a02('0x5')](os[_0x2a02('0xe')]()['map'](function(_0xf073a9){return _0xf073a9[_0x2a02('0xf')];}))[_0x2a02('0x10')](':');return crypto[_0x2a02('0x11')](_0x2a02('0x12'))[_0x2a02('0x13')](_0x1d428e)['digest'](_0x2a02('0x14'));}exports[_0x2a02('0x15')]=function(){switch(os[_0x2a02('0x16')]()){case _0x2a02('0x17'):return exec(_0x2a02('0x18'),{'encoding':_0x2a02('0x19')})[_0x2a02('0x1a')]('\x0d\x0a','');default:var _0x2eb208=getFirstInterface();var _0x352d37=getCPUhash();var _0x5ccc89=_0x352d37+'|'+os['hostname']()+'|'+_0x2eb208[_0x2a02('0x1b')]+'|'+_0x2eb208[_0x2a02('0x1c')];var _0x5323b6=crypto[_0x2a02('0x11')]('md5')[_0x2a02('0x13')](_0x5ccc89)[_0x2a02('0x1d')]('hex');return _0x5323b6[_0x2a02('0x1e')](0x0,0x8)+'-'+_0x5323b6['substring'](0x8,0xc)+'-'+_0x5323b6[_0x2a02('0x1e')](0xc,0x10)+'-'+_0x5323b6[_0x2a02('0x1e')](0x10,0x14)+'-'+_0x5323b6[_0x2a02('0x1e')](0x14);}};
\ No newline at end of file
+var _0xf116=['createHash','digest','substring','lodash','bimedia-machine-uuid','child_process','orderBy','keys','length','filter','family','concat','head','mac','00:00:00:00:00:00','address','127.0.0.1','getFirstInterface','cpus','map','model','join','md5','update','hex','getUuid','platform','win32','dmidecode\x20--string\x20system-uuid','utf8','replace','hostname','macAddress','ipAddress'];(function(_0x15bf45,_0x26dbfd){var _0x55e7e4=function(_0x1d477c){while(--_0x1d477c){_0x15bf45['push'](_0x15bf45['shift']());}};_0x55e7e4(++_0x26dbfd);}(_0xf116,0xad));var _0x6f11=function(_0x30d87a,_0xf3a07f){_0x30d87a=_0x30d87a-0x0;var _0x48f64b=_0xf116[_0x30d87a];return _0x48f64b;};'use strict';var _=require(_0x6f11('0x0'));var os=require('os');var crypto=require('crypto');var machine=require(_0x6f11('0x1'));var exec=require(_0x6f11('0x2'))['execSync'];function getInterfaces(){var _0x4e7b7e=[];var _0x286b07=os['networkInterfaces']();var _0x1c8b7d=_[_0x6f11('0x3')](_[_0x6f11('0x4')](_0x286b07));for(var _0x522274=0x0;_0x522274<_0x1c8b7d[_0x6f11('0x5')];_0x522274++){var _0x4b8d30=_0x286b07[_0x1c8b7d[_0x522274]][_0x6f11('0x6')](function(_0x18202f){return _0x18202f[_0x6f11('0x7')]==='IPv4'&&_0x18202f['internal']===![];});_0x4e7b7e=_0x4e7b7e[_0x6f11('0x8')](_0x4b8d30);}return _0x4e7b7e;}function getFirstInterface(){var _0x53aa69=_[_0x6f11('0x9')](getInterfaces());return{'macAddress':_0x53aa69&&_0x53aa69[_0x6f11('0xa')]?_0x53aa69[_0x6f11('0xa')]:_0x6f11('0xb'),'ipAddress':_0x53aa69&&_0x53aa69['address']?_0x53aa69[_0x6f11('0xc')]:_0x6f11('0xd')};}exports[_0x6f11('0xe')]=getFirstInterface;function getCPUhash(){var _0x44416b=_['orderBy'](os[_0x6f11('0xf')]()[_0x6f11('0x10')](function(_0x4426d9){return _0x4426d9[_0x6f11('0x11')];}))[_0x6f11('0x12')](':');return crypto['createHash'](_0x6f11('0x13'))[_0x6f11('0x14')](_0x44416b)['digest'](_0x6f11('0x15'));}exports[_0x6f11('0x16')]=function(){switch(os[_0x6f11('0x17')]()){case _0x6f11('0x18'):return exec(_0x6f11('0x19'),{'encoding':_0x6f11('0x1a')})[_0x6f11('0x1b')]('\x0d\x0a','');default:var _0x269f34=getFirstInterface();var _0x166cb2=getCPUhash();var _0x5abc98=_0x166cb2+'|'+os[_0x6f11('0x1c')]()+'|'+_0x269f34[_0x6f11('0x1d')]+'|'+_0x269f34[_0x6f11('0x1e')];var _0x388688=crypto[_0x6f11('0x1f')](_0x6f11('0x13'))[_0x6f11('0x14')](_0x5abc98)[_0x6f11('0x20')](_0x6f11('0x15'));return _0x388688[_0x6f11('0x21')](0x0,0x8)+'-'+_0x388688[_0x6f11('0x21')](0x8,0xc)+'-'+_0x388688[_0x6f11('0x21')](0xc,0x10)+'-'+_0x388688[_0x6f11('0x21')](0x10,0x14)+'-'+_0x388688['substring'](0x14);}};
\ No newline at end of file
index f8b6d18..fe97e55 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xed17=['%s\x20-\x20GRAY\x20PERIOD\x20STARTED\x20AT\x20%s','toUpperCase','YYYY-MM-DD\x20HH:mm','DEMO\x20START\x20AT\x20%s','message','finally','getUuid','License','findOrCreate','error','crypto','request-promise','bluebird','pkginfo','version','./hardware','../logger','../../api/jira/jira.controller','https://www.xcallymotion.com','format','%s/api/servers/%s/check?version=%s','exports','%s/api/servers/%s/check?version=%s&oldtoken=%s','GET','then','catch','createCipher','aes-256-ctr','secrets','session','update','utf8','final','base64','createDecipher','findOne','fullname','email','|uuid|','|machineUuid|','|name|','|email|','getFirstInterface','ipAddress','openIssue','MOTLICENSE','Motion\x20License\x20Alert','Alert','active','license','data2','info','THE\x20LICENSE\x20HAS\x20BEEN\x20ENABLED','THE\x20LICENSE\x20HAS\x20BEEN\x20UPDATED','data1','Disabled','THE\x20LICENSE\x20HAS\x20BEEN\x20DISABLED','Changed','NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s','uuid'];(function(_0x5182dd,_0xba89f){var _0x2d05de=function(_0x6e7f04){while(--_0x6e7f04){_0x5182dd['push'](_0x5182dd['shift']());}};_0x2d05de(++_0xba89f);}(_0xed17,0xbe));var _0x7ed1=function(_0x59f0ff,_0x2b9d67){_0x59f0ff=_0x59f0ff-0x0;var _0x28e782=_0xed17[_0x59f0ff];return _0x28e782;};'use strict';var util=require('util');var crypto=require(_0x7ed1('0x0'));var moment=require('moment');var rp=require(_0x7ed1('0x1'));var BPromise=require(_0x7ed1('0x2'));var pkginfo=require(_0x7ed1('0x3'))(module,_0x7ed1('0x4'));var db=require('../../mysqldb')['db'];var config=require('../environment');var hardware=require(_0x7ed1('0x5'));var logger=require(_0x7ed1('0x6'))('license');var jira=require(_0x7ed1('0x7'));var HOST=_0x7ed1('0x8');var TIME=0x3c*0x1388;var DAYS=0x7;var GRAY_PERIOD_REASON;var ADMIN;var oldToken;function httpRequest(_0x4b3a1a){return new BPromise(function(_0x2628d6,_0x2e8fe5){var _0x1d07b8=util[_0x7ed1('0x9')](_0x7ed1('0xa'),HOST,_0x4b3a1a,module[_0x7ed1('0xb')][_0x7ed1('0x4')]);if(oldToken){_0x1d07b8=util[_0x7ed1('0x9')](_0x7ed1('0xc'),HOST,_0x4b3a1a,module[_0x7ed1('0xb')]['version'],oldToken);}var _0x32a8d8={'uri':_0x1d07b8,'method':_0x7ed1('0xd'),'timeout':0xea60,'json':!![]};return rp(_0x32a8d8)[_0x7ed1('0xe')](function(_0x411268){_0x2628d6(_0x411268);})[_0x7ed1('0xf')](function(_0x55ad0c){_0x2e8fe5(_0x55ad0c);});});}function encryptDate(_0x3e2b8a){var _0x559736=crypto[_0x7ed1('0x10')](_0x7ed1('0x11'),config[_0x7ed1('0x12')][_0x7ed1('0x13')]);var _0x23d05d=_0x559736[_0x7ed1('0x14')](_0x3e2b8a,_0x7ed1('0x15'),'base64');_0x23d05d+=_0x559736[_0x7ed1('0x16')](_0x7ed1('0x17'));return _0x23d05d;}function decryptDate(_0x35c5a3){var _0x592e92=crypto[_0x7ed1('0x18')]('aes-256-ctr',config['secrets'][_0x7ed1('0x13')]);var _0x2c9b94=_0x592e92[_0x7ed1('0x14')](_0x35c5a3,_0x7ed1('0x17'),_0x7ed1('0x15'));_0x2c9b94+=_0x592e92[_0x7ed1('0x16')](_0x7ed1('0x15'));return _0x2c9b94;}function sendJiraAlert(_0x5e7b67,_0x4bc9bb,_0x3615ed){var _0x3e6dfe='||FIELD||VALUE||\x0a';return db['User'][_0x7ed1('0x19')]({'where':{'role':'admin'},'attributes':[_0x7ed1('0x1a'),_0x7ed1('0x1b')],'raw':!![]})[_0x7ed1('0xe')](function(_0xe905da){ADMIN=_0xe905da;_0x3e6dfe+='|reason|'+_0x3615ed+'|\x0a';_0x3e6dfe+=_0x7ed1('0x1c')+_0x5e7b67+'|\x0a';_0x3e6dfe+=_0x7ed1('0x1d')+_0x4bc9bb+'|\x0a';_0x3e6dfe+=_0x7ed1('0x1e')+ADMIN[_0x7ed1('0x1a')]+'|\x0a';_0x3e6dfe+=_0x7ed1('0x1f')+ADMIN[_0x7ed1('0x1b')]+'|\x0a';return _0x3e6dfe;})[_0x7ed1('0xe')](function(_0x5b131d){var _0x287b61=hardware[_0x7ed1('0x20')]()[_0x7ed1('0x21')];return jira[_0x7ed1('0x22')]({'key':_0x7ed1('0x23'),'summary':_0x7ed1('0x24'),'description':_0x5b131d,'issuetype':_0x7ed1('0x25'),'oldToken':_0x5e7b67,'newToken':_0x4bc9bb,'email':ADMIN[_0x7ed1('0x1b')],'name':ADMIN[_0x7ed1('0x1a')],'reason':GRAY_PERIOD_REASON,'ip':_0x287b61});});}function manageLicense(_0x5360f2,_0x4dcaea){var _0x57e89f=_0x4dcaea['get']({'plain':!![]});httpRequest(_0x5360f2)[_0x7ed1('0xe')](function(_0x2b8070){if(oldToken){oldToken=undefined;}if(_0x2b8070[_0x7ed1('0x26')]){if(!_0x57e89f[_0x7ed1('0x27')]&&_0x57e89f[_0x7ed1('0x27')]!=_0x2b8070['license']||_0x57e89f['license']&&_0x57e89f[_0x7ed1('0x28')]){logger[_0x7ed1('0x29')](_0x7ed1('0x2a'));}if(_0x57e89f[_0x7ed1('0x27')]&&!_0x57e89f[_0x7ed1('0x28')]&&_0x57e89f[_0x7ed1('0x27')]!=_0x2b8070[_0x7ed1('0x27')]){logger[_0x7ed1('0x29')](_0x7ed1('0x2b'));}if(_0x57e89f[_0x7ed1('0x27')]&&!_0x57e89f[_0x7ed1('0x28')]&&_0x57e89f[_0x7ed1('0x27')]==_0x2b8070[_0x7ed1('0x27')]){return _0x4dcaea;}return _0x4dcaea[_0x7ed1('0x14')]({'data1':_0x5360f2,'data2':null,'license':_0x2b8070['license']});}else{if(_0x2b8070[_0x7ed1('0x27')]||_0x57e89f[_0x7ed1('0x27')]){if(!_0x57e89f[_0x7ed1('0x28')]){if(_0x57e89f[_0x7ed1('0x2c')]==_0x5360f2){GRAY_PERIOD_REASON=_0x7ed1('0x2d');logger['info'](_0x7ed1('0x2e'));}else{GRAY_PERIOD_REASON=_0x7ed1('0x2f');oldToken=_0x57e89f['data1'];logger[_0x7ed1('0x29')](_0x7ed1('0x30'),_0x57e89f[_0x7ed1('0x2c')],_0x5360f2);}sendJiraAlert(_0x57e89f[_0x7ed1('0x2c')],_0x2b8070[_0x7ed1('0x31')],GRAY_PERIOD_REASON);logger[_0x7ed1('0x29')](_0x7ed1('0x32'),GRAY_PERIOD_REASON[_0x7ed1('0x33')](),moment()[_0x7ed1('0x9')](_0x7ed1('0x34')));return _0x4dcaea[_0x7ed1('0x14')]({'data2':encryptDate(moment()[_0x7ed1('0x9')]('YYYY-MM-DD\x20HH:mm'))});}else{if(moment()['diff'](decryptDate(_0x57e89f['data2']),'days')>DAYS){logger[_0x7ed1('0x29')](_0x7ed1('0x35'),moment()[_0x7ed1('0x9')](_0x7ed1('0x34')));return _0x4dcaea[_0x7ed1('0x14')]({'data1':_0x5360f2,'data2':null,'license':null});}}}else{if(_0x57e89f[_0x7ed1('0x2c')]!=_0x5360f2){logger[_0x7ed1('0x29')]('NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s',_0x57e89f[_0x7ed1('0x2c')],_0x5360f2);return _0x4dcaea[_0x7ed1('0x14')]({'data1':_0x5360f2,'data2':null,'license':null});}}}return _0x4dcaea;})['then'](function(_0x4def1c){_0x4dcaea=_0x4def1c;})['catch'](function(_0x37db7e){logger['error'](_0x37db7e[_0x7ed1('0x36')]);})[_0x7ed1('0x37')](function(){setTimeout(function(){manageLicense(hardware[_0x7ed1('0x38')](),_0x4dcaea);},TIME);});}function defaultLicense(){var _0x2f951a=hardware[_0x7ed1('0x38')]();if(_0x2f951a){return db[_0x7ed1('0x39')][_0x7ed1('0x3a')]({'where':{'id':0x1},'defaults':{'data1':_0x2f951a}})['spread'](function(_0x3346fe,_0x50bf90){logger[_0x7ed1('0x29')]('SERVICE\x20LICENSE\x20STARTED\x20%s',_0x2f951a);manageLicense(_0x2f951a,_0x3346fe);})[_0x7ed1('0xf')](function(_0x48ce60){logger[_0x7ed1('0x3b')](_0x48ce60[_0x7ed1('0x36')]);});}}exports['default']=defaultLicense;
\ No newline at end of file
+var _0xbbcf=['version','../../mysqldb','./hardware','../logger','license','../../api/jira/jira.controller','https://www.xcallymotion.com','format','%s/api/servers/%s/check?version=%s','%s/api/servers/%s/check?version=%s&oldtoken=%s','exports','GET','catch','createCipher','aes-256-ctr','secrets','session','utf8','final','createDecipher','update','base64','findOne','admin','fullname','email','then','|uuid|','|machineUuid|','|name|','|email|','getFirstInterface','ipAddress','openIssue','Motion\x20License\x20Alert','data2','info','THE\x20LICENSE\x20HAS\x20BEEN\x20ENABLED','THE\x20LICENSE\x20HAS\x20BEEN\x20UPDATED','data1','Disabled','THE\x20LICENSE\x20HAS\x20BEEN\x20DISABLED','Changed','NEW\x20UUID\x20DETECTED:\x20FROM\x20%s\x20TO\x20%s','%s\x20-\x20GRAY\x20PERIOD\x20STARTED\x20AT\x20%s','toUpperCase','YYYY-MM-DD\x20HH:mm','diff','days','DEMO\x20START\x20AT\x20%s','message','getUuid','License','findOrCreate','spread','SERVICE\x20LICENSE\x20STARTED\x20%s','error','default','util','moment','bluebird','pkginfo'];(function(_0x16517f,_0x5e5a43){var _0x5c5f05=function(_0x10e01f){while(--_0x10e01f){_0x16517f['push'](_0x16517f['shift']());}};_0x5c5f05(++_0x5e5a43);}(_0xbbcf,0x1ae));var _0xfbbc=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xbbcf[_0x20a584];return _0x4b41a8;};'use strict';var util=require(_0xfbbc('0x0'));var crypto=require('crypto');var moment=require(_0xfbbc('0x1'));var rp=require('request-promise');var BPromise=require(_0xfbbc('0x2'));var pkginfo=require(_0xfbbc('0x3'))(module,_0xfbbc('0x4'));var db=require(_0xfbbc('0x5'))['db'];var config=require('../environment');var hardware=require(_0xfbbc('0x6'));var logger=require(_0xfbbc('0x7'))(_0xfbbc('0x8'));var jira=require(_0xfbbc('0x9'));var HOST=_0xfbbc('0xa');var TIME=0x3c*0x1388;var DAYS=0x7;var GRAY_PERIOD_REASON;var ADMIN;var oldToken;function httpRequest(_0x1c015c){return new BPromise(function(_0x27335b,_0x24bf0d){var _0x2db326=util[_0xfbbc('0xb')](_0xfbbc('0xc'),HOST,_0x1c015c,module['exports']['version']);if(oldToken){_0x2db326=util[_0xfbbc('0xb')](_0xfbbc('0xd'),HOST,_0x1c015c,module[_0xfbbc('0xe')]['version'],oldToken);}var _0xceb8f4={'uri':_0x2db326,'method':_0xfbbc('0xf'),'timeout':0xea60,'json':!![]};return rp(_0xceb8f4)['then'](function(_0x412546){_0x27335b(_0x412546);})[_0xfbbc('0x10')](function(_0x443afe){_0x24bf0d(_0x443afe);});});}function encryptDate(_0x2757c){var _0x416c81=crypto[_0xfbbc('0x11')](_0xfbbc('0x12'),config[_0xfbbc('0x13')][_0xfbbc('0x14')]);var _0x5e4d75=_0x416c81['update'](_0x2757c,_0xfbbc('0x15'),'base64');_0x5e4d75+=_0x416c81[_0xfbbc('0x16')]('base64');return _0x5e4d75;}function decryptDate(_0x57affa){var _0x2a8e1e=crypto[_0xfbbc('0x17')](_0xfbbc('0x12'),config[_0xfbbc('0x13')][_0xfbbc('0x14')]);var _0x18095a=_0x2a8e1e[_0xfbbc('0x18')](_0x57affa,_0xfbbc('0x19'),_0xfbbc('0x15'));_0x18095a+=_0x2a8e1e['final'](_0xfbbc('0x15'));return _0x18095a;}function sendJiraAlert(_0xe8c7f3,_0x2769e0,_0x1579ac){var _0xd0ce7e='||FIELD||VALUE||\x0a';return db['User'][_0xfbbc('0x1a')]({'where':{'role':_0xfbbc('0x1b')},'attributes':[_0xfbbc('0x1c'),_0xfbbc('0x1d')],'raw':!![]})[_0xfbbc('0x1e')](function(_0x4d90dc){ADMIN=_0x4d90dc;_0xd0ce7e+='|reason|'+_0x1579ac+'|\x0a';_0xd0ce7e+=_0xfbbc('0x1f')+_0xe8c7f3+'|\x0a';_0xd0ce7e+=_0xfbbc('0x20')+_0x2769e0+'|\x0a';_0xd0ce7e+=_0xfbbc('0x21')+ADMIN['fullname']+'|\x0a';_0xd0ce7e+=_0xfbbc('0x22')+ADMIN[_0xfbbc('0x1d')]+'|\x0a';return _0xd0ce7e;})[_0xfbbc('0x1e')](function(_0x74d329){var _0x409aa3=hardware[_0xfbbc('0x23')]()[_0xfbbc('0x24')];return jira[_0xfbbc('0x25')]({'key':'MOTLICENSE','summary':_0xfbbc('0x26'),'description':_0x74d329,'issuetype':'Alert','oldToken':_0xe8c7f3,'newToken':_0x2769e0,'email':ADMIN[_0xfbbc('0x1d')],'name':ADMIN[_0xfbbc('0x1c')],'reason':GRAY_PERIOD_REASON,'ip':_0x409aa3});});}function manageLicense(_0x50a08d,_0x4cc3e5){var _0x4c8e92=_0x4cc3e5['get']({'plain':!![]});httpRequest(_0x50a08d)[_0xfbbc('0x1e')](function(_0x5c319e){if(oldToken){oldToken=undefined;}if(_0x5c319e['active']){if(!_0x4c8e92[_0xfbbc('0x8')]&&_0x4c8e92[_0xfbbc('0x8')]!=_0x5c319e['license']||_0x4c8e92[_0xfbbc('0x8')]&&_0x4c8e92[_0xfbbc('0x27')]){logger[_0xfbbc('0x28')](_0xfbbc('0x29'));}if(_0x4c8e92[_0xfbbc('0x8')]&&!_0x4c8e92[_0xfbbc('0x27')]&&_0x4c8e92['license']!=_0x5c319e[_0xfbbc('0x8')]){logger['info'](_0xfbbc('0x2a'));}if(_0x4c8e92['license']&&!_0x4c8e92[_0xfbbc('0x27')]&&_0x4c8e92['license']==_0x5c319e[_0xfbbc('0x8')]){return _0x4cc3e5;}return _0x4cc3e5[_0xfbbc('0x18')]({'data1':_0x50a08d,'data2':null,'license':_0x5c319e[_0xfbbc('0x8')]});}else{if(_0x5c319e[_0xfbbc('0x8')]||_0x4c8e92['license']){if(!_0x4c8e92[_0xfbbc('0x27')]){if(_0x4c8e92[_0xfbbc('0x2b')]==_0x50a08d){GRAY_PERIOD_REASON=_0xfbbc('0x2c');logger['info'](_0xfbbc('0x2d'));}else{GRAY_PERIOD_REASON=_0xfbbc('0x2e');oldToken=_0x4c8e92[_0xfbbc('0x2b')];logger[_0xfbbc('0x28')](_0xfbbc('0x2f'),_0x4c8e92[_0xfbbc('0x2b')],_0x50a08d);}sendJiraAlert(_0x4c8e92[_0xfbbc('0x2b')],_0x5c319e['uuid'],GRAY_PERIOD_REASON);logger[_0xfbbc('0x28')](_0xfbbc('0x30'),GRAY_PERIOD_REASON[_0xfbbc('0x31')](),moment()[_0xfbbc('0xb')](_0xfbbc('0x32')));return _0x4cc3e5[_0xfbbc('0x18')]({'data2':encryptDate(moment()[_0xfbbc('0xb')](_0xfbbc('0x32')))});}else{if(moment()[_0xfbbc('0x33')](decryptDate(_0x4c8e92[_0xfbbc('0x27')]),_0xfbbc('0x34'))>DAYS){logger['info'](_0xfbbc('0x35'),moment()[_0xfbbc('0xb')](_0xfbbc('0x32')));return _0x4cc3e5[_0xfbbc('0x18')]({'data1':_0x50a08d,'data2':null,'license':null});}}}else{if(_0x4c8e92[_0xfbbc('0x2b')]!=_0x50a08d){logger[_0xfbbc('0x28')](_0xfbbc('0x2f'),_0x4c8e92['data1'],_0x50a08d);return _0x4cc3e5[_0xfbbc('0x18')]({'data1':_0x50a08d,'data2':null,'license':null});}}}return _0x4cc3e5;})[_0xfbbc('0x1e')](function(_0x4bd927){_0x4cc3e5=_0x4bd927;})[_0xfbbc('0x10')](function(_0x1960a0){logger['error'](_0x1960a0[_0xfbbc('0x36')]);})['finally'](function(){setTimeout(function(){manageLicense(hardware[_0xfbbc('0x37')](),_0x4cc3e5);},TIME);});}function defaultLicense(){var _0x14f43=hardware[_0xfbbc('0x37')]();if(_0x14f43){return db[_0xfbbc('0x38')][_0xfbbc('0x39')]({'where':{'id':0x1},'defaults':{'data1':_0x14f43}})[_0xfbbc('0x3a')](function(_0x4c573d,_0x233e0f){logger[_0xfbbc('0x28')](_0xfbbc('0x3b'),_0x14f43);manageLicense(_0x14f43,_0x4c573d);})[_0xfbbc('0x10')](function(_0x462e53){logger[_0xfbbc('0x3c')](_0x462e53[_0xfbbc('0x36')]);});}}exports[_0xfbbc('0x3d')]=defaultLicense;
\ No newline at end of file
index 7c8dad1..2e62e2b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x90ae=['utf8','final','parse','uuid','getUuid','secrets','session','gray','deadline','add','days','grayReason','machineUuid','changed','disabled','2027-01-01T00:00:00.000Z','Breaking\x20license','data1','message','Demo\x20license','License','find','defaults','then','util','lodash','moment','./hardware','license','isEmpty','License\x20key\x20value\x20not\x20found','data2','split','createDecipher','aes-256-ctr','format','update','base64'];(function(_0x1c05c7,_0x40fb13){var _0x28e96f=function(_0x361501){while(--_0x361501){_0x1c05c7['push'](_0x1c05c7['shift']());}};_0x28e96f(++_0x40fb13);}(_0x90ae,0x1ba));var _0xe90a=function(_0x564e07,_0x42a091){_0x564e07=_0x564e07-0x0;var _0x18a2fc=_0x90ae[_0x564e07];return _0x18a2fc;};'use strict';var crypto=require('crypto');var util=require(_0xe90a('0x0'));var _=require(_0xe90a('0x1'));var moment=require(_0xe90a('0x2'));var hardware=require(_0xe90a('0x3'));var config=require('../environment');var db=require('../../mysqldb')['db'];function checkLicense(_0x2f4ecb,_0x4e42c8){if(_0x2f4ecb){try{var _0x1aaece=_0x4e42c8||_0x2f4ecb[_0xe90a('0x4')];if(_[_0xe90a('0x5')](_0x1aaece)){throw new Error(_0xe90a('0x6'));}var _0x5d53bd=_0x2f4ecb['data1'];var _0x4b28f1=_0x2f4ecb[_0xe90a('0x7')];var _0x1f4feb=_0x5d53bd[_0xe90a('0x8')]('-')[0x4];var _0x18bcae=_0x5d53bd[_0xe90a('0x8')]('-')[0x0];var _0x193f41=crypto[_0xe90a('0x9')](_0xe90a('0xa'),util[_0xe90a('0xb')]('%s:%s:%s',_0x1f4feb,_0x5d53bd,_0x18bcae));var _0x3db798=_0x193f41[_0xe90a('0xc')](_0x1aaece,_0xe90a('0xd'),_0xe90a('0xe'));_0x3db798+=_0x193f41[_0xe90a('0xf')]('utf8');var _0x2e19e6=JSON[_0xe90a('0x10')](_0x3db798);_0x2e19e6['demo']=![];_0x2e19e6[_0xe90a('0x11')]=_0x5d53bd;_0x2e19e6['machineUuid']=hardware[_0xe90a('0x12')]();if(_0x4b28f1){var _0x137f0b=crypto[_0xe90a('0x9')](_0xe90a('0xa'),config[_0xe90a('0x13')][_0xe90a('0x14')]);var _0x489ed8=_0x137f0b['update'](_0x4b28f1,_0xe90a('0xd'),'utf8');_0x489ed8+=_0x137f0b['final']('utf8');_0x2e19e6[_0xe90a('0x15')]=_0x489ed8;_0x2e19e6[_0xe90a('0x16')]=moment(_0x489ed8)[_0xe90a('0x17')](0x7,_0xe90a('0x18'))[_0xe90a('0xb')]();_0x2e19e6[_0xe90a('0x19')]=_0x2e19e6[_0xe90a('0x11')]!=_0x2e19e6[_0xe90a('0x1a')]?_0xe90a('0x1b'):_0xe90a('0x1c');}return _0x2e19e6;}catch(_0x4ba46e){return{'breaking':!![],'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0xe90a('0x1d'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':_0xe90a('0x1e'),'uuid':_0x2f4ecb[_0xe90a('0x1f')],'machineUuid':hardware[_0xe90a('0x12')](),'message':_0x4ba46e[_0xe90a('0x20')],'virtual':0x0,'voice':!![],'preferred':![]};}}return{'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':'2027-01-01T00:00:00.000Z','chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':_0xe90a('0x21'),'uuid':_0x2f4ecb[_0xe90a('0x1f')],'machineUuid':hardware['getUuid'](),'virtual':0x0,'voice':!![],'preferred':![]};}exports['getLicense']=function(_0x3d4787){return db[_0xe90a('0x22')][_0xe90a('0x23')](_[_0xe90a('0x24')](_0x3d4787,{'raw':!![],'where':{'id':0x1}}))[_0xe90a('0x25')](function(_0x3e5c59){return checkLicense(_0x3e5c59,null);});};exports['checkLicense']=checkLicense;
\ No newline at end of file
+var _0xb013=['../environment','../../mysqldb','license','License\x20key\x20value\x20not\x20found','data1','data2','split','createDecipher','aes-256-ctr','format','%s:%s:%s','update','base64','utf8','final','parse','getUuid','secrets','session','gray','deadline','add','days','grayReason','uuid','machineUuid','disabled','2027-01-01T00:00:00.000Z','Demo\x20license','License','defaults','then','crypto','util','moment'];(function(_0x5bb570,_0x1cda26){var _0x4dd634=function(_0x361203){while(--_0x361203){_0x5bb570['push'](_0x5bb570['shift']());}};_0x4dd634(++_0x1cda26);}(_0xb013,0x1e7));var _0x3b01=function(_0x20ef64,_0x4a8fe9){_0x20ef64=_0x20ef64-0x0;var _0x3707d8=_0xb013[_0x20ef64];return _0x3707d8;};'use strict';var crypto=require(_0x3b01('0x0'));var util=require(_0x3b01('0x1'));var _=require('lodash');var moment=require(_0x3b01('0x2'));var hardware=require('./hardware');var config=require(_0x3b01('0x3'));var db=require(_0x3b01('0x4'))['db'];function checkLicense(_0xb34e7c,_0x3525ac){if(_0xb34e7c){try{var _0x3ea02a=_0x3525ac||_0xb34e7c[_0x3b01('0x5')];if(_['isEmpty'](_0x3ea02a)){throw new Error(_0x3b01('0x6'));}var _0x4db683=_0xb34e7c[_0x3b01('0x7')];var _0x46d8aa=_0xb34e7c[_0x3b01('0x8')];var _0x1ba15a=_0x4db683['split']('-')[0x4];var _0x274dd5=_0x4db683[_0x3b01('0x9')]('-')[0x0];var _0x4bb8b0=crypto[_0x3b01('0xa')](_0x3b01('0xb'),util[_0x3b01('0xc')](_0x3b01('0xd'),_0x1ba15a,_0x4db683,_0x274dd5));var _0xc6061e=_0x4bb8b0[_0x3b01('0xe')](_0x3ea02a,_0x3b01('0xf'),_0x3b01('0x10'));_0xc6061e+=_0x4bb8b0[_0x3b01('0x11')](_0x3b01('0x10'));var _0x15b397=JSON[_0x3b01('0x12')](_0xc6061e);_0x15b397['demo']=![];_0x15b397['uuid']=_0x4db683;_0x15b397['machineUuid']=hardware[_0x3b01('0x13')]();if(_0x46d8aa){var _0x45b702=crypto[_0x3b01('0xa')]('aes-256-ctr',config[_0x3b01('0x14')][_0x3b01('0x15')]);var _0x683049=_0x45b702['update'](_0x46d8aa,_0x3b01('0xf'),_0x3b01('0x10'));_0x683049+=_0x45b702[_0x3b01('0x11')](_0x3b01('0x10'));_0x15b397[_0x3b01('0x16')]=_0x683049;_0x15b397[_0x3b01('0x17')]=moment(_0x683049)[_0x3b01('0x18')](0x7,_0x3b01('0x19'))[_0x3b01('0xc')]();_0x15b397[_0x3b01('0x1a')]=_0x15b397[_0x3b01('0x1b')]!=_0x15b397[_0x3b01('0x1c')]?'changed':_0x3b01('0x1d');}return _0x15b397;}catch(_0x137727){return{'breaking':!![],'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':_0x3b01('0x1e'),'chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':'Breaking\x20license','uuid':_0xb34e7c[_0x3b01('0x7')],'machineUuid':hardware['getUuid'](),'message':_0x137727['message'],'virtual':0x0,'voice':!![],'preferred':![]};}}return{'demo':!![],'agents':0x2,'telephones':0x0,'users':0x1,'expiration':'2027-01-01T00:00:00.000Z','chat':![],'mail':![],'fax':![],'messaging':![],'cm':![],'dialer':![],'jscripty':![],'openchannel':![],'callysquare':0x2,'webrtc':![],'jaws':![],'custom':![],'update':![],'description':_0x3b01('0x1f'),'uuid':_0xb34e7c[_0x3b01('0x7')],'machineUuid':hardware[_0x3b01('0x13')](),'virtual':0x0,'voice':!![],'preferred':![]};}exports['getLicense']=function(_0xf998d9){return db[_0x3b01('0x20')]['find'](_[_0x3b01('0x21')](_0xf998d9,{'raw':!![],'where':{'id':0x1}}))[_0x3b01('0x22')](function(_0x17a14c){return checkLicense(_0x17a14c,null);});};exports['checkLicense']=checkLicense;
\ No newline at end of file
index b963f8f..1d2ec74 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x44d4=['secret','exports'];(function(_0x1eed85,_0x21a5c0){var _0x5945c4=function(_0x104328){while(--_0x104328){_0x1eed85['push'](_0x1eed85['shift']());}};_0x5945c4(++_0x21a5c0);}(_0x44d4,0x161));var _0x444d=function(_0x45ffad,_0x1c09f0){_0x45ffad=_0x45ffad-0x0;var _0x7c936e=_0x44d4[_0x45ffad];return _0x7c936e;};'use strict';module[_0x444d('0x0')]={'DOMAIN':'http://localhost:9000','SESSION_SECRET':'myappanuglar-secret','GOOGLE_ID':'app-id','GOOGLE_SECRET':_0x444d('0x1'),'DEBUG':''};
\ No newline at end of file
+var _0x33a1=['exports','http://localhost:9000'];(function(_0x125ff8,_0x41925f){var _0x2d9ef=function(_0x4ef34c){while(--_0x4ef34c){_0x125ff8['push'](_0x125ff8['shift']());}};_0x2d9ef(++_0x41925f);}(_0x33a1,0x7c));var _0x133a=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x33a1[_0x20a584];return _0x4b41a8;};'use strict';module[_0x133a('0x0')]={'DOMAIN':_0x133a('0x1'),'SESSION_SECRET':'myappanuglar-secret','GOOGLE_ID':'app-id','GOOGLE_SECRET':'secret','DEBUG':''};
\ No newline at end of file
index e15b4fa..d6d0f89 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc0a0=['env','moment','join','/var','log','xcally','format','[%s]\x20[%s]\x20%s\x20-\x20%s','level','toUpperCase','message','exports','Logger','File','error','transports','%s-%s','info','Console'];(function(_0x411017,_0x4a8117){var _0x2adeea=function(_0x545222){while(--_0x545222){_0x411017['push'](_0x411017['shift']());}};_0x2adeea(++_0x4a8117);}(_0xc0a0,0xe5));var _0x0c0a=function(_0x42245d,_0x51758f){_0x42245d=_0x42245d-0x0;var _0x4b211a=_0xc0a0[_0x42245d];return _0x4b211a;};'use strict';var moment=require(_0x0c0a('0x0'));var winston=require('winston');var util=require('util');var path=require('path');var debugLevel='INFO';function filename(_0x4493ce,_0x4179e9){return path[_0x0c0a('0x1')](_0x0c0a('0x2'),_0x0c0a('0x3'),_0x0c0a('0x4'),util[_0x0c0a('0x5')]('%s-%s.log',_0x4493ce,_0x4179e9));}function formatter(_0xc3543e,_0x57e921){return util[_0x0c0a('0x5')](_0x0c0a('0x6'),moment()[_0x0c0a('0x5')]('YYYY-MM-DD\x20HH:mm:ss'),_0x57e921[_0x0c0a('0x7')][_0x0c0a('0x8')](),_0xc3543e,_0x57e921[_0x0c0a('0x9')]);}module[_0x0c0a('0xa')]=function(_0x261787){return new winston[(_0x0c0a('0xb'))]({'transports':[new winston['transports'][(_0x0c0a('0xc'))]({'name':util['format']('%s-%s',_0x261787,_0x0c0a('0xd')),'filename':filename(_0x261787,_0x0c0a('0xd')),'level':_0x0c0a('0xd'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0xc3f4be){return formatter(_0x261787,_0xc3f4be);}}),new winston[(_0x0c0a('0xe'))]['File']({'name':util['format'](_0x0c0a('0xf'),_0x261787,_0x0c0a('0x10')),'filename':filename(_0x261787,'info'),'level':_0x0c0a('0x10'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0xf24219){return formatter(_0x261787,_0xf24219);}}),new winston['transports'][(_0x0c0a('0x11'))]({'level':process[_0x0c0a('0x12')]['debugLevel']||debugLevel,'json':![],'formatter':function(_0x2bc6c4){return formatter(_0x261787,_0x2bc6c4);}})]});};
\ No newline at end of file
+var _0x7985=['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','debugLevel','moment','util','path','join'];(function(_0x330376,_0x70a3f){var _0xb7f093=function(_0x3f2586){while(--_0x3f2586){_0x330376['push'](_0x330376['shift']());}};_0xb7f093(++_0x70a3f);}(_0x7985,0x178));var _0x5798=function(_0x1bed81,_0x4b326a){_0x1bed81=_0x1bed81-0x0;var _0x2ac7ac=_0x7985[_0x1bed81];return _0x2ac7ac;};'use strict';var moment=require(_0x5798('0x0'));var winston=require('winston');var util=require(_0x5798('0x1'));var path=require(_0x5798('0x2'));var debugLevel='INFO';function filename(_0x20052b,_0x22bd0f){return path[_0x5798('0x3')]('/var',_0x5798('0x4'),_0x5798('0x5'),util[_0x5798('0x6')](_0x5798('0x7'),_0x20052b,_0x22bd0f));}function formatter(_0x49f6e0,_0x1ba863){return util['format'](_0x5798('0x8'),moment()[_0x5798('0x6')](_0x5798('0x9')),_0x1ba863[_0x5798('0xa')]['toUpperCase'](),_0x49f6e0,_0x1ba863['message']);}module[_0x5798('0xb')]=function(_0x1c0050){return new winston[(_0x5798('0xc'))]({'transports':[new winston['transports'][(_0x5798('0xd'))]({'name':util[_0x5798('0x6')](_0x5798('0xe'),_0x1c0050,_0x5798('0xf')),'filename':filename(_0x1c0050,'error'),'level':'error','json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x30696e){return formatter(_0x1c0050,_0x30696e);}}),new winston['transports'][(_0x5798('0xd'))]({'name':util[_0x5798('0x6')](_0x5798('0xe'),_0x1c0050,_0x5798('0x10')),'filename':filename(_0x1c0050,_0x5798('0x10')),'level':_0x5798('0x10'),'json':![],'maxsize':0xa00000,'maxFiles':0xa,'tailable':!![],'formatter':function(_0x49f02e){return formatter(_0x1c0050,_0x49f02e);}}),new winston[(_0x5798('0x11'))][(_0x5798('0x12'))]({'level':process['env'][_0x5798('0x13')]||debugLevel,'json':![],'formatter':function(_0x5c72d5){return formatter(_0x1c0050,_0x5c72d5);}})]});};
\ No newline at end of file
index ac96080..3c2f507 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0851=['agi','../../services/agi/index.js','email','../../services/email/index.js','routing','../../services/routing/index.js','xdr','exports','path','express','join','../../services/express/index.js','../../services/ami/index.js'];(function(_0x27f257,_0x16ed62){var _0x548299=function(_0x2f6ac8){while(--_0x2f6ac8){_0x27f257['push'](_0x27f257['shift']());}};_0x548299(++_0x16ed62);}(_0x0851,0x8a));var _0x1085=function(_0x272ea6,_0x3f0673){_0x272ea6=_0x272ea6-0x0;var _0x43ef03=_0x0851[_0x272ea6];return _0x43ef03;};'use strict';var path=require(_0x1085('0x0'));var os=require('os');var config={'apps':[{'name':_0x1085('0x1'),'script':path[_0x1085('0x2')](__dirname,_0x1085('0x3'))},{'name':'ami','script':path[_0x1085('0x2')](__dirname,_0x1085('0x4'))},{'name':_0x1085('0x5'),'script':path[_0x1085('0x2')](__dirname,_0x1085('0x6'))},{'name':_0x1085('0x7'),'script':path[_0x1085('0x2')](__dirname,_0x1085('0x8'))},{'name':_0x1085('0x9'),'script':path[_0x1085('0x2')](__dirname,_0x1085('0xa'))},{'name':_0x1085('0xb'),'script':path['join'](__dirname,'../../services/xdr/index.js')}]};module[_0x1085('0xc')]=config;
\ No newline at end of file
+var _0x23d7=['../../services/ami/index.js','agi','../../services/agi/index.js','email','../../services/email/index.js','routing','xdr','../../services/xdr/index.js','path','express','join','ami'];(function(_0x42ab46,_0x43639a){var _0x147a11=function(_0x49b450){while(--_0x49b450){_0x42ab46['push'](_0x42ab46['shift']());}};_0x147a11(++_0x43639a);}(_0x23d7,0x1dc));var _0x723d=function(_0x56ec07,_0x56a55f){_0x56ec07=_0x56ec07-0x0;var _0x3ce6f7=_0x23d7[_0x56ec07];return _0x3ce6f7;};'use strict';var path=require(_0x723d('0x0'));var os=require('os');var config={'apps':[{'name':_0x723d('0x1'),'script':path[_0x723d('0x2')](__dirname,'../../services/express/index.js')},{'name':_0x723d('0x3'),'script':path[_0x723d('0x2')](__dirname,_0x723d('0x4'))},{'name':_0x723d('0x5'),'script':path[_0x723d('0x2')](__dirname,_0x723d('0x6'))},{'name':_0x723d('0x7'),'script':path[_0x723d('0x2')](__dirname,_0x723d('0x8'))},{'name':_0x723d('0x9'),'script':path[_0x723d('0x2')](__dirname,'../../services/routing/index.js')},{'name':_0x723d('0xa'),'script':path[_0x723d('0x2')](__dirname,_0x723d('0xb'))}]};module['exports']=config;
\ No newline at end of file
index 2e20ab0..bec4654 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['stop','disconnect','restart','list','describe','delete','dump','pm2','bluebird','./config','connect','connected','start','then'];(function(_0x284807,_0x4be925){var _0x50c774=function(_0xf56cf7){while(--_0xf56cf7){_0x284807['push'](_0x284807['shift']());}};_0x50c774(++_0x4be925);}(_0x9957,0x93));var _0x7995=function(_0x4cf98e,_0xba4b79){_0x4cf98e=_0x4cf98e-0x0;var _0x1623ac=_0x9957[_0x4cf98e];return _0x1623ac;};'use strict';var pm2=require(_0x7995('0x0'));var BPromise=require(_0x7995('0x1'));var config=require(_0x7995('0x2'));function connect(){return new BPromise(function(_0x10a05d,_0x5b96eb){return pm2[_0x7995('0x3')](function(_0x3c58eb){if(_0x3c58eb){return _0x5b96eb(_0x3c58eb);}return _0x10a05d(_0x7995('0x4'));});});};exports[_0x7995('0x5')]=function(_0x576d89){return connect()[_0x7995('0x6')](function(){return new BPromise(function(_0x1a36d8,_0x137b6b){return pm2[_0x7995('0x5')](_0x576d89,function(_0xbda126,_0x326741){if(_0xbda126){return _0x137b6b(_0xbda126);}pm2['disconnect']();return _0x1a36d8(_0x326741);});});});};exports[_0x7995('0x7')]=function(_0x1cad37){return connect()['then'](function(){return new BPromise(function(_0xa2e5f0,_0x3116fb){return pm2[_0x7995('0x7')](_0x1cad37,function(_0x35b5fe,_0x3c1d19){if(_0x35b5fe){return _0x3116fb(_0x35b5fe);}pm2[_0x7995('0x8')]();return _0xa2e5f0(_0x3c1d19);});});});};exports[_0x7995('0x9')]=function(_0x524f7b){return connect()[_0x7995('0x6')](function(){return new BPromise(function(_0x41c652,_0x581f22){return pm2[_0x7995('0x9')](_0x524f7b,function(_0x2cb37a,_0x19a27e){if(_0x2cb37a){return _0x581f22(_0x2cb37a);}pm2[_0x7995('0x8')]();return _0x41c652(_0x19a27e);});});});};exports[_0x7995('0xa')]=function(){return connect()[_0x7995('0x6')](function(){return new BPromise(function(_0x2bbe7a,_0x4cc004){return pm2['list'](function(_0x2b4e94,_0x2233dd){if(_0x2b4e94){return _0x4cc004(_0x2b4e94);}pm2[_0x7995('0x8')]();return _0x2bbe7a(_0x2233dd);});});});};exports[_0x7995('0xb')]=function(_0x3f1d3e){return connect()[_0x7995('0x6')](function(){return new BPromise(function(_0x2202ce,_0x41cbf0){return pm2['describe'](_0x3f1d3e,function(_0x2eeacc,_0x565d97){if(_0x2eeacc){return _0x41cbf0(_0x2eeacc);}pm2[_0x7995('0x8')]();return _0x2202ce(_0x565d97);});});});};exports[_0x7995('0xc')]=function(_0x43d4b8){return connect()[_0x7995('0x6')](function(){return new BPromise(function(_0x1e1415,_0x37a7d4){return pm2['delete'](_0x43d4b8,function(_0x54c9ae,_0x2536c8){if(_0x54c9ae){return _0x37a7d4(_0x54c9ae);}pm2['disconnect']();return _0x1e1415(_0x2536c8);});});});};exports['dump']=function(){return connect()[_0x7995('0x6')](function(){return new BPromise(function(_0x3d463e,_0x4cbe10){return pm2[_0x7995('0xd')](function(_0x51f276){if(_0x51f276){return _0x4cbe10(_0x51f276);}return _0x3d463e('saved');});});});};
\ No newline at end of file
+var _0x008c=['start','then','disconnect','stop','restart','list','describe','delete','pm2','bluebird','./config','connected'];(function(_0x2c5801,_0x5751a2){var _0x188d4a=function(_0x18d407){while(--_0x18d407){_0x2c5801['push'](_0x2c5801['shift']());}};_0x188d4a(++_0x5751a2);}(_0x008c,0x188));var _0xc008=function(_0x2ecb67,_0x8ec62d){_0x2ecb67=_0x2ecb67-0x0;var _0x168079=_0x008c[_0x2ecb67];return _0x168079;};'use strict';var pm2=require(_0xc008('0x0'));var BPromise=require(_0xc008('0x1'));var config=require(_0xc008('0x2'));function connect(){return new BPromise(function(_0xae17af,_0x1d119a){return pm2['connect'](function(_0x3641af){if(_0x3641af){return _0x1d119a(_0x3641af);}return _0xae17af(_0xc008('0x3'));});});};exports[_0xc008('0x4')]=function(_0x163bd9){return connect()[_0xc008('0x5')](function(){return new BPromise(function(_0x1679e0,_0x13aa7){return pm2[_0xc008('0x4')](_0x163bd9,function(_0x9c8cb2,_0x4af530){if(_0x9c8cb2){return _0x13aa7(_0x9c8cb2);}pm2[_0xc008('0x6')]();return _0x1679e0(_0x4af530);});});});};exports['stop']=function(_0x30be38){return connect()['then'](function(){return new BPromise(function(_0x52041f,_0x27830d){return pm2[_0xc008('0x7')](_0x30be38,function(_0x57c46d,_0x51ba7d){if(_0x57c46d){return _0x27830d(_0x57c46d);}pm2['disconnect']();return _0x52041f(_0x51ba7d);});});});};exports[_0xc008('0x8')]=function(_0xc881aa){return connect()['then'](function(){return new BPromise(function(_0xae2dab,_0x332fd4){return pm2[_0xc008('0x8')](_0xc881aa,function(_0x2a5b4e,_0x9ffa93){if(_0x2a5b4e){return _0x332fd4(_0x2a5b4e);}pm2[_0xc008('0x6')]();return _0xae2dab(_0x9ffa93);});});});};exports[_0xc008('0x9')]=function(){return connect()['then'](function(){return new BPromise(function(_0x560e28,_0x33f44c){return pm2['list'](function(_0x25e13f,_0x4584e1){if(_0x25e13f){return _0x33f44c(_0x25e13f);}pm2[_0xc008('0x6')]();return _0x560e28(_0x4584e1);});});});};exports[_0xc008('0xa')]=function(_0x3f0ecf){return connect()['then'](function(){return new BPromise(function(_0x5e894e,_0x4bd0f4){return pm2[_0xc008('0xa')](_0x3f0ecf,function(_0x15a6ad,_0x3cafe3){if(_0x15a6ad){return _0x4bd0f4(_0x15a6ad);}pm2[_0xc008('0x6')]();return _0x5e894e(_0x3cafe3);});});});};exports['delete']=function(_0x53b06e){return connect()['then'](function(){return new BPromise(function(_0x5c2668,_0x46042b){return pm2[_0xc008('0xb')](_0x53b06e,function(_0x501137,_0x813397){if(_0x501137){return _0x46042b(_0x501137);}pm2['disconnect']();return _0x5c2668(_0x813397);});});});};exports['dump']=function(){return connect()['then'](function(){return new BPromise(function(_0x50261c,_0x5754a0){return pm2['dump'](function(_0x5560b1){if(_0x5560b1){return _0x5754a0(_0x5560b1);}return _0x50261c('saved');});});});};
\ No newline at end of file
index 3956dce..41b0610 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7ae7=['Setting','find','chatTimeout','ChatInteraction','findAll','lastMsgAt','subtract','minutes','update','system','format','YYYY-MM-DD\x20HH:mm:ss','then','chatInteraction:update','catch','error','start','lodash','moment','../../mysqldb','../../config/environment','redis','defaults','localhost','socket.io-emitter'];(function(_0x12aad6,_0x36a471){var _0x4d3517=function(_0x1f0dc0){while(--_0x1f0dc0){_0x12aad6['push'](_0x12aad6['shift']());}};_0x4d3517(++_0x36a471);}(_0x7ae7,0xd9));var _0x77ae=function(_0x2fcfeb,_0x3e1913){_0x2fcfeb=_0x2fcfeb-0x0;var _0x5a3387=_0x7ae7[_0x2fcfeb];return _0x5a3387;};'use strict';var _=require(_0x77ae('0x0'));var moment=require(_0x77ae('0x1'));var Redis=require('ioredis');var db=require(_0x77ae('0x2'))['db'];var config=require(_0x77ae('0x3'));config[_0x77ae('0x4')]=_[_0x77ae('0x5')](config[_0x77ae('0x4')],{'host':_0x77ae('0x6'),'port':0x18eb});var io=require(_0x77ae('0x7'))(new Redis(config[_0x77ae('0x4')]));function closeInteractions(){var _0x167164=0x0;var _0x3dd200=[];return db[_0x77ae('0x8')][_0x77ae('0x9')]({'raw':!![],'attributes':['id',_0x77ae('0xa')],'where':{'id':0x1}})['then'](function(_0x131f0b){_0x167164=_0x131f0b[_0x77ae('0xa')];if(_0x167164){return db[_0x77ae('0xb')][_0x77ae('0xc')]({'raw':!![],'attributes':['id',_0x77ae('0xd')],'where':{'closed':![],'lastMsgAt':{'$lt':moment()[_0x77ae('0xe')](_0x131f0b['chatTimeout'],_0x77ae('0xf'))}}});}else{return[];}})['then'](function(_0x525b63){_0x3dd200=_0x525b63;if(_0x167164){return db[_0x77ae('0xb')][_0x77ae('0x10')]({'closeReason':_0x77ae('0x11'),'disposition':'timeout','closed':!![],'closedAt':moment()[_0x77ae('0x12')](_0x77ae('0x13'))},{'where':{'id':_['map'](_0x3dd200||[],'id')}});}})[_0x77ae('0x14')](function(_0x334823){for(var _0x7beeee=0x0;_0x7beeee<_0x3dd200['length'];_0x7beeee++){io['emit'](_0x77ae('0x15'),{'id':_0x3dd200[_0x7beeee]['id'],'closed':!![]});}})[_0x77ae('0x16')](function(_0x2d3017){console[_0x77ae('0x17')](_0x2d3017);});}exports[_0x77ae('0x18')]=function(){setInterval(function(){return closeInteractions();},0x3c*0x3e8);return closeInteractions();};
\ No newline at end of file
+var _0x0286=['Setting','find','chatTimeout','then','ChatInteraction','findAll','lastMsgAt','minutes','update','timeout','format','YYYY-MM-DD\x20HH:mm:ss','map','length','emit','chatInteraction:update','catch','error','start','moment','ioredis','../../mysqldb','../../config/environment','defaults','redis','localhost','socket.io-emitter'];(function(_0x495f16,_0x22330a){var _0x494e0b=function(_0x3bed1d){while(--_0x3bed1d){_0x495f16['push'](_0x495f16['shift']());}};_0x494e0b(++_0x22330a);}(_0x0286,0x7f));var _0x6028=function(_0x55baea,_0x5d1320){_0x55baea=_0x55baea-0x0;var _0x5daaf4=_0x0286[_0x55baea];return _0x5daaf4;};'use strict';var _=require('lodash');var moment=require(_0x6028('0x0'));var Redis=require(_0x6028('0x1'));var db=require(_0x6028('0x2'))['db'];var config=require(_0x6028('0x3'));config['redis']=_[_0x6028('0x4')](config[_0x6028('0x5')],{'host':_0x6028('0x6'),'port':0x18eb});var io=require(_0x6028('0x7'))(new Redis(config['redis']));function closeInteractions(){var _0x26ad30=0x0;var _0x4b9b65=[];return db[_0x6028('0x8')][_0x6028('0x9')]({'raw':!![],'attributes':['id',_0x6028('0xa')],'where':{'id':0x1}})[_0x6028('0xb')](function(_0x560d1a){_0x26ad30=_0x560d1a[_0x6028('0xa')];if(_0x26ad30){return db[_0x6028('0xc')][_0x6028('0xd')]({'raw':!![],'attributes':['id',_0x6028('0xe')],'where':{'closed':![],'lastMsgAt':{'$lt':moment()['subtract'](_0x560d1a['chatTimeout'],_0x6028('0xf'))}}});}else{return[];}})[_0x6028('0xb')](function(_0x28bcaf){_0x4b9b65=_0x28bcaf;if(_0x26ad30){return db[_0x6028('0xc')][_0x6028('0x10')]({'closeReason':'system','disposition':_0x6028('0x11'),'closed':!![],'closedAt':moment()[_0x6028('0x12')](_0x6028('0x13'))},{'where':{'id':_[_0x6028('0x14')](_0x4b9b65||[],'id')}});}})[_0x6028('0xb')](function(_0x307754){for(var _0x1ce1b7=0x0;_0x1ce1b7<_0x4b9b65[_0x6028('0x15')];_0x1ce1b7++){io[_0x6028('0x16')](_0x6028('0x17'),{'id':_0x4b9b65[_0x1ce1b7]['id'],'closed':!![]});}})[_0x6028('0x18')](function(_0x3df857){console[_0x6028('0x19')](_0x3df857);});}exports[_0x6028('0x1a')]=function(){setInterval(function(){return closeInteractions();},0x3c*0x3e8);return closeInteractions();};
\ No newline at end of file
index f1989e8..7d1461c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1810=['format','Report\x20%s\x20last\x20%s\x20%s','subtractUnit','join','../../files/reports','savename','extname','zip','status','Sent','message','attachments','text','Info\x20report:\x0a%s\x0aPlease\x20see\x20the\x20attachments\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20it.\x0a\x0a','stringify','existsSync','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','catch','isNil','subtractNumber','subtractNumber\x20null\x20or\x20undefined','subtract','YYYY-MM-DD\x20HH:mm:ss','scheduled','exec\x20defaul\x20report\x20id:%s','DefaultReportId','CustomReportId','runReport','no\x20report\x20id','Schedule','findAll','MailServerOut','keys','jobs','toString','keyBy','difference','intersection','length','exists','stop','deleteJob','delete\x20cron','toRun','index','my\x20id','resolve','run\x20job','cron','active','isBetween','startAt','endAt','add','start','add\x20cron','stop\x20cron','update','update\x20cron','run','util','path','moment','cron-job-manager','jayson/promise','bluebird','../logger','schedule','../../api/analyticCustomReport/analyticCustomReport.controller','../../api/analyticDefaultReport/analyticDefaultReport.controller','http','info','Try\x20to\x20send\x20a\x20mail\x20to','MailAccount','Smtp','service','host','port','secure','authentication','user','pass','\x22%s\x22\x20<%s>','name','email','bcc'];(function(_0x580386,_0x20f39c){var _0xb55fda=function(_0x48b714){while(--_0x48b714){_0x580386['push'](_0x580386['shift']());}};_0xb55fda(++_0x20f39c);}(_0x1810,0x15a));var _0x0181=function(_0x4454e7,_0x2e916a){_0x4454e7=_0x4454e7-0x0;var _0x4c2a56=_0x1810[_0x4454e7];return _0x4c2a56;};'use strict';var fs=require('fs');var util=require(_0x0181('0x0'));var path=require(_0x0181('0x1'));var _=require('lodash');var moment=require(_0x0181('0x2'));var CronJobManager=require(_0x0181('0x3'));var jayson=require(_0x0181('0x4'));var BPromise=require(_0x0181('0x5'));var logger=require(_0x0181('0x6'))(_0x0181('0x7'));var db=require('../../mysqldb')['db'];var analyticCustomReportController=require(_0x0181('0x8'));var analyticDefaultReportController=require(_0x0181('0x9'));var client=jayson['client'][_0x0181('0xa')]({'port':0x232b});var manager=new CronJobManager();function handleSendEmail(_0x1c3c75,_0x2f9fd9){return function(){logger[_0x0181('0xb')](_0x0181('0xc'),_0x1c3c75['email']);var _0x2d313a=!![];var _0x5c51ac={'tls':{'rejectUnauthorized':![]}};if(_0x1c3c75[_0x0181('0xd')][_0x0181('0xe')][_0x0181('0xf')]){_0x5c51ac[_0x0181('0xf')]=_0x1c3c75['MailAccount'][_0x0181('0xe')][_0x0181('0xf')];}else{_0x5c51ac[_0x0181('0x10')]=_0x1c3c75['MailAccount'][_0x0181('0xe')]['host'];_0x5c51ac[_0x0181('0x11')]=_0x1c3c75[_0x0181('0xd')]['Smtp'][_0x0181('0x11')];_0x5c51ac[_0x0181('0x12')]=_0x1c3c75[_0x0181('0xd')]['Smtp'][_0x0181('0x12')];}if(_0x1c3c75['MailAccount'][_0x0181('0xe')][_0x0181('0x13')]){_0x5c51ac['auth']={'user':_0x1c3c75['MailAccount'][_0x0181('0xe')][_0x0181('0x14')],'pass':_0x1c3c75[_0x0181('0xd')][_0x0181('0xe')][_0x0181('0x15')]};}var _0x3ef942={'account':_0x5c51ac,'message':{'from':util['format'](_0x0181('0x16'),_0x1c3c75['MailAccount'][_0x0181('0x17')],_0x1c3c75['MailAccount'][_0x0181('0x18')]||_0x1c3c75[_0x0181('0xd')][_0x0181('0xe')][_0x0181('0x14')]),'to':_0x1c3c75['email'],'cc':_0x1c3c75['cc'],'bcc':_0x1c3c75[_0x0181('0x19')],'subject':util[_0x0181('0x1a')](_0x0181('0x1b'),_0x2f9fd9['name'],_0x1c3c75['subtractNumber'],_0x1c3c75[_0x0181('0x1c')])}};var _0x2266b3=path[_0x0181('0x1d')](__dirname,_0x0181('0x1e'));var _0x41a12e=_0x2f9fd9['savename'];var _0x2b75d3=util[_0x0181('0x1a')]('%s.%s',path['basename'](_0x2f9fd9[_0x0181('0x1f')],path[_0x0181('0x20')](_0x2f9fd9['savename'])),_0x0181('0x21'));var _0x5ed19c=path[_0x0181('0x1d')](_0x2266b3,_0x41a12e);var _0x47919b=path[_0x0181('0x1d')](_0x2266b3,_0x2b75d3);if(fs['existsSync'](_0x5ed19c)){_0x2f9fd9[_0x0181('0x22')]=_0x0181('0x23');_0x3ef942[_0x0181('0x24')][_0x0181('0x25')]=[{'filename':_0x41a12e,'path':_0x5ed19c}];_0x3ef942['message'][_0x0181('0x26')]=util['format'](_0x0181('0x27'),JSON[_0x0181('0x28')](_0x2f9fd9,null,0x2));}else if(fs[_0x0181('0x29')](_0x47919b)){_0x2f9fd9[_0x0181('0x22')]=_0x0181('0x23');_0x3ef942[_0x0181('0x24')][_0x0181('0x25')]=[{'filename':_0x2b75d3,'path':_0x47919b}];}else{_0x3ef942[_0x0181('0x24')][_0x0181('0x26')]=_0x0181('0x2a');if(!_0x1c3c75['sendIfEmpty']){_0x2d313a=![];logger[_0x0181('0xb')](_0x0181('0x2b'));}}if(_0x2d313a){return client[_0x0181('0x2c')](_0x0181('0x2d'),_0x3ef942)[_0x0181('0x2e')](function(_0x3ee4f8){if(_0x3ee4f8[_0x0181('0x2f')]){return logger[_0x0181('0x2f')](_0x0181('0x30'),JSON[_0x0181('0x28')](_0x3ee4f8));}return logger[_0x0181('0xb')](_0x0181('0x31'));})[_0x0181('0x32')](function(_0x42c6ae){return logger[_0x0181('0x2f')](_0x0181('0x30'),JSON[_0x0181('0x28')](_0x42c6ae));});}};}function handleError(){return function(_0x364cb4){return logger[_0x0181('0x2f')](JSON[_0x0181('0x28')](_0x364cb4));};}function handleResult(_0x59f150){return function(_0x34797e){logger['info']('data',JSON['stringify'](_0x34797e));if(_0x59f150[_0x0181('0xd')]&&_0x59f150[_0x0181('0xd')][_0x0181('0xe')]&&!_['isNil'](_0x59f150[_0x0181('0x18')])){setTimeout(handleSendEmail(_0x59f150,_0x34797e),0x3c*0x3e8);}};}function handleJob(_0x49b56d){return function(){try{if(_[_0x0181('0x33')](_0x49b56d[_0x0181('0x34')])){return logger[_0x0181('0xb')](_0x0181('0x35'));}if(_[_0x0181('0x33')](_0x49b56d[_0x0181('0x1c')])){return logger[_0x0181('0xb')]('subtractUnit\x20null\x20or\x20undefined');}var _0x44f793={'startDate':moment()[_0x0181('0x36')](_0x49b56d[_0x0181('0x34')],_0x49b56d[_0x0181('0x1c')])[_0x0181('0x1a')](_0x0181('0x37')),'endDate':moment()[_0x0181('0x1a')](_0x0181('0x37')),'type':_0x0181('0x38'),'output':_0x49b56d['output'],'name':_0x49b56d[_0x0181('0x17')]};if(!_[_0x0181('0x33')](_0x49b56d['DefaultReportId'])){logger['info'](_0x0181('0x39'),_0x49b56d[_0x0181('0x3a')]);return analyticDefaultReportController['runReport']({'id':_0x49b56d[_0x0181('0x3a')]},_0x44f793)[_0x0181('0x2e')](handleResult(_0x49b56d))[_0x0181('0x32')](handleError());}if(!_[_0x0181('0x33')](_0x49b56d[_0x0181('0x3b')])){logger[_0x0181('0xb')]('exec\x20custom\x20report\x20id:%s',_0x49b56d[_0x0181('0x3b')]);return analyticCustomReportController[_0x0181('0x3c')]({'id':_0x49b56d[_0x0181('0x3b')]},_0x44f793)['then'](handleResult(_0x49b56d))[_0x0181('0x32')](handleError());}}catch(_0x205e49){logger['error'](JSON[_0x0181('0x28')](_0x205e49));}return logger[_0x0181('0xb')](_0x0181('0x3d'));};}function getJobs(_0x171b6e){var _0x3b3064={};if(_0x171b6e){_0x3b3064['id']=_0x171b6e;}return db[_0x0181('0x3e')][_0x0181('0x3f')]({'where':_0x3b3064,'include':[{'model':db[_0x0181('0xd')],'attributes':['id',_0x0181('0x17'),_0x0181('0x18')],'include':[{'model':db[_0x0181('0x40')],'as':_0x0181('0xe')}]}]})['then'](function(_0x1f3c0c){var _0x291711=_[_0x0181('0x41')](manager[_0x0181('0x42')]);var _0x59c021=_['map'](_0x1f3c0c,function(_0x28f492){return _0x28f492['id'][_0x0181('0x43')]();});var _0x38fb43=_[_0x0181('0x44')](_0x1f3c0c,function(_0xc9597e){return _0xc9597e['id'][_0x0181('0x43')]();});var _0x56e62b=_0x171b6e?_0x59c021:_[_0x0181('0x45')](_0x59c021,_0x291711);var _0x4af972=_[_0x0181('0x46')](_0x59c021,_0x291711);var _0x271ed9=_[_0x0181('0x45')](_0x291711,_0x59c021);var _0x466d33;var _0xe3bc12;for(_0x466d33=0x0;_0x466d33<_0x271ed9[_0x0181('0x47')]&&!_0x171b6e;_0x466d33+=0x1){_0xe3bc12=_0x271ed9[_0x466d33][_0x0181('0x43')]();if(manager[_0x0181('0x48')](_0xe3bc12)){manager[_0x0181('0x49')](_0xe3bc12);manager[_0x0181('0x4a')](_0xe3bc12);logger[_0x0181('0xb')](_0x0181('0x4b'),_0xe3bc12);}}logger[_0x0181('0xb')](_0x0181('0x4c'),JSON[_0x0181('0x28')](_0x56e62b));for(_0x466d33=0x0;_0x466d33<_0x56e62b['length'];_0x466d33+=0x1){_0xe3bc12=_0x56e62b[_0x466d33][_0x0181('0x43')]();logger[_0x0181('0xb')](_0x0181('0x4d'),_0xe3bc12);if(_0x171b6e){logger[_0x0181('0xb')](_0x0181('0x4e'),_0x171b6e);logger['info'](JSON[_0x0181('0x28')](_0x38fb43[_0xe3bc12]));BPromise[_0x0181('0x4f')]()[_0x0181('0x2e')](handleJob(_0x38fb43[_0xe3bc12]));logger[_0x0181('0xb')](_0x0181('0x50'),_0x38fb43[_0xe3bc12][_0x0181('0x17')],_0x38fb43[_0xe3bc12][_0x0181('0x51')]);}else if(_0x38fb43[_0xe3bc12]['cron']&&_0x38fb43[_0xe3bc12][_0x0181('0x52')]&&moment()[_0x0181('0x53')](_0x38fb43[_0xe3bc12][_0x0181('0x54')],_0x38fb43[_0xe3bc12][_0x0181('0x55')])){manager[_0x0181('0x56')](_0xe3bc12,_0x38fb43[_0xe3bc12][_0x0181('0x51')],handleJob(_0x38fb43[_0xe3bc12]));manager[_0x0181('0x57')](_0xe3bc12);logger['info'](_0x0181('0x58'),_0x38fb43[_0xe3bc12][_0x0181('0x17')],_0x38fb43[_0xe3bc12][_0x0181('0x51')]);}else if(manager[_0x0181('0x48')](_0xe3bc12)){manager[_0x0181('0x49')](_0xe3bc12);manager[_0x0181('0x4a')](_0xe3bc12);logger['info'](_0x0181('0x59'),_0x38fb43[_0xe3bc12][_0x0181('0x17')],_0x38fb43[_0xe3bc12]['cron']);}}for(_0x466d33=0x0,_0xe3bc12;_0x466d33<_0x4af972['length']&&!_0x171b6e;_0x466d33+=0x1){_0xe3bc12=_0x4af972[_0x466d33][_0x0181('0x43')]();if(manager[_0x0181('0x48')](_0xe3bc12)){if(_0x38fb43[_0xe3bc12][_0x0181('0x51')]&&_0x38fb43[_0xe3bc12][_0x0181('0x52')]&&moment()[_0x0181('0x53')](_0x38fb43[_0xe3bc12]['startAt'],_0x38fb43[_0xe3bc12][_0x0181('0x55')])){manager[_0x0181('0x5a')](_0xe3bc12,_0x38fb43[_0xe3bc12][_0x0181('0x51')],handleJob(_0x38fb43[_0xe3bc12]));logger[_0x0181('0xb')](_0x0181('0x5b'),_0x38fb43[_0xe3bc12][_0x0181('0x17')],_0x38fb43[_0xe3bc12][_0x0181('0x51')]);}else{manager[_0x0181('0x49')](_0xe3bc12);manager[_0x0181('0x4a')](_0xe3bc12);logger[_0x0181('0xb')](_0x0181('0x59'),_0x38fb43[_0xe3bc12][_0x0181('0x17')],_0x38fb43[_0xe3bc12][_0x0181('0x51')]);}}}})[_0x0181('0x32')](function(_0x323d8d){logger['error'](JSON[_0x0181('0x28')](_0x323d8d));});}exports[_0x0181('0x5c')]=function(_0x4aeabf){return getJobs(_0x4aeabf);};exports[_0x0181('0x57')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};
\ No newline at end of file
+var _0x9c34=['delete\x20cron','toRun','my\x20id','resolve','cron','active','add','start','add\x20cron','exists','stop\x20cron','isBetween','startAt','endAt','update','run','util','path','moment','cron-job-manager','jayson/promise','../logger','../../mysqldb','../../api/analyticCustomReport/analyticCustomReport.controller','../../api/analyticDefaultReport/analyticDefaultReport.controller','client','http','info','Try\x20to\x20send\x20a\x20mail\x20to','email','MailAccount','Smtp','service','host','port','secure','authentication','auth','user','pass','format','\x22%s\x22\x20<%s>','name','bcc','Report\x20%s\x20last\x20%s\x20%s','subtractUnit','join','../../files/reports','%s.%s','basename','savename','extname','zip','existsSync','status','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','sendIfEmpty','then','error','email\x20sent','catch','error\x20mail','data','isNil','subtractNumber\x20null\x20or\x20undefined','subtractUnit\x20null\x20or\x20undefined','subtract','subtractNumber','YYYY-MM-DD\x20HH:mm:ss','scheduled','output','DefaultReportId','exec\x20defaul\x20report\x20id:%s','runReport','exec\x20custom\x20report\x20id:%s','CustomReportId','no\x20report\x20id','Schedule','findAll','keys','jobs','map','toString','keyBy','difference','intersection','length','stop','deleteJob'];(function(_0x548e58,_0x21e3d2){var _0x36264f=function(_0x3edf5c){while(--_0x3edf5c){_0x548e58['push'](_0x548e58['shift']());}};_0x36264f(++_0x21e3d2);}(_0x9c34,0x184));var _0x49c3=function(_0x29962e,_0x4f779e){_0x29962e=_0x29962e-0x0;var _0x323107=_0x9c34[_0x29962e];return _0x323107;};'use strict';var fs=require('fs');var util=require(_0x49c3('0x0'));var path=require(_0x49c3('0x1'));var _=require('lodash');var moment=require(_0x49c3('0x2'));var CronJobManager=require(_0x49c3('0x3'));var jayson=require(_0x49c3('0x4'));var BPromise=require('bluebird');var logger=require(_0x49c3('0x5'))('schedule');var db=require(_0x49c3('0x6'))['db'];var analyticCustomReportController=require(_0x49c3('0x7'));var analyticDefaultReportController=require(_0x49c3('0x8'));var client=jayson[_0x49c3('0x9')][_0x49c3('0xa')]({'port':0x232b});var manager=new CronJobManager();function handleSendEmail(_0x22594c,_0x57459a){return function(){logger[_0x49c3('0xb')](_0x49c3('0xc'),_0x22594c[_0x49c3('0xd')]);var _0x263028=!![];var _0xdbcf5f={'tls':{'rejectUnauthorized':![]}};if(_0x22594c[_0x49c3('0xe')][_0x49c3('0xf')][_0x49c3('0x10')]){_0xdbcf5f[_0x49c3('0x10')]=_0x22594c[_0x49c3('0xe')][_0x49c3('0xf')][_0x49c3('0x10')];}else{_0xdbcf5f['host']=_0x22594c[_0x49c3('0xe')][_0x49c3('0xf')][_0x49c3('0x11')];_0xdbcf5f[_0x49c3('0x12')]=_0x22594c[_0x49c3('0xe')][_0x49c3('0xf')][_0x49c3('0x12')];_0xdbcf5f[_0x49c3('0x13')]=_0x22594c['MailAccount']['Smtp'][_0x49c3('0x13')];}if(_0x22594c[_0x49c3('0xe')]['Smtp'][_0x49c3('0x14')]){_0xdbcf5f[_0x49c3('0x15')]={'user':_0x22594c[_0x49c3('0xe')][_0x49c3('0xf')][_0x49c3('0x16')],'pass':_0x22594c[_0x49c3('0xe')][_0x49c3('0xf')][_0x49c3('0x17')]};}var _0x4700ca={'account':_0xdbcf5f,'message':{'from':util[_0x49c3('0x18')](_0x49c3('0x19'),_0x22594c[_0x49c3('0xe')][_0x49c3('0x1a')],_0x22594c[_0x49c3('0xe')][_0x49c3('0xd')]||_0x22594c[_0x49c3('0xe')]['Smtp'][_0x49c3('0x16')]),'to':_0x22594c['email'],'cc':_0x22594c['cc'],'bcc':_0x22594c[_0x49c3('0x1b')],'subject':util[_0x49c3('0x18')](_0x49c3('0x1c'),_0x57459a['name'],_0x22594c['subtractNumber'],_0x22594c[_0x49c3('0x1d')])}};var _0x2c7acb=path[_0x49c3('0x1e')](__dirname,_0x49c3('0x1f'));var _0x43b366=_0x57459a['savename'];var _0x7c1fa=util[_0x49c3('0x18')](_0x49c3('0x20'),path[_0x49c3('0x21')](_0x57459a[_0x49c3('0x22')],path[_0x49c3('0x23')](_0x57459a[_0x49c3('0x22')])),_0x49c3('0x24'));var _0x4c43d2=path['join'](_0x2c7acb,_0x43b366);var _0x10d986=path[_0x49c3('0x1e')](_0x2c7acb,_0x7c1fa);if(fs[_0x49c3('0x25')](_0x4c43d2)){_0x57459a[_0x49c3('0x26')]='Sent';_0x4700ca[_0x49c3('0x27')][_0x49c3('0x28')]=[{'filename':_0x43b366,'path':_0x4c43d2}];_0x4700ca[_0x49c3('0x27')][_0x49c3('0x29')]=util['format'](_0x49c3('0x2a'),JSON[_0x49c3('0x2b')](_0x57459a,null,0x2));}else if(fs[_0x49c3('0x25')](_0x10d986)){_0x57459a[_0x49c3('0x26')]='Sent';_0x4700ca['message'][_0x49c3('0x28')]=[{'filename':_0x7c1fa,'path':_0x10d986}];}else{_0x4700ca['message']['text']='Report\x20empty\x0aThis\x20is\x20an\x20automatically\x20generated\x20email\x20–\x20please\x20do\x20not\x20reply\x20to\x20this\x20email.\x0a\x0a';if(!_0x22594c[_0x49c3('0x2c')]){_0x263028=![];logger[_0x49c3('0xb')]('empty\x20file,\x20email\x20not\x20sent');}}if(_0x263028){return client['request']('SendMail',_0x4700ca)[_0x49c3('0x2d')](function(_0x3bb97c){if(_0x3bb97c[_0x49c3('0x2e')]){return logger[_0x49c3('0x2e')]('error\x20mail',JSON['stringify'](_0x3bb97c));}return logger['info'](_0x49c3('0x2f'));})[_0x49c3('0x30')](function(_0x4cf565){return logger[_0x49c3('0x2e')](_0x49c3('0x31'),JSON[_0x49c3('0x2b')](_0x4cf565));});}};}function handleError(){return function(_0x7f2c9f){return logger[_0x49c3('0x2e')](JSON[_0x49c3('0x2b')](_0x7f2c9f));};}function handleResult(_0x25270d){return function(_0x3c7e93){logger['info'](_0x49c3('0x32'),JSON[_0x49c3('0x2b')](_0x3c7e93));if(_0x25270d[_0x49c3('0xe')]&&_0x25270d[_0x49c3('0xe')][_0x49c3('0xf')]&&!_[_0x49c3('0x33')](_0x25270d['email'])){setTimeout(handleSendEmail(_0x25270d,_0x3c7e93),0x3c*0x3e8);}};}function handleJob(_0x454584){return function(){try{if(_['isNil'](_0x454584['subtractNumber'])){return logger[_0x49c3('0xb')](_0x49c3('0x34'));}if(_[_0x49c3('0x33')](_0x454584[_0x49c3('0x1d')])){return logger['info'](_0x49c3('0x35'));}var _0x1703f0={'startDate':moment()[_0x49c3('0x36')](_0x454584[_0x49c3('0x37')],_0x454584[_0x49c3('0x1d')])[_0x49c3('0x18')](_0x49c3('0x38')),'endDate':moment()[_0x49c3('0x18')](_0x49c3('0x38')),'type':_0x49c3('0x39'),'output':_0x454584[_0x49c3('0x3a')],'name':_0x454584[_0x49c3('0x1a')]};if(!_[_0x49c3('0x33')](_0x454584[_0x49c3('0x3b')])){logger[_0x49c3('0xb')](_0x49c3('0x3c'),_0x454584['DefaultReportId']);return analyticDefaultReportController[_0x49c3('0x3d')]({'id':_0x454584['DefaultReportId']},_0x1703f0)[_0x49c3('0x2d')](handleResult(_0x454584))[_0x49c3('0x30')](handleError());}if(!_[_0x49c3('0x33')](_0x454584['CustomReportId'])){logger[_0x49c3('0xb')](_0x49c3('0x3e'),_0x454584[_0x49c3('0x3f')]);return analyticCustomReportController['runReport']({'id':_0x454584[_0x49c3('0x3f')]},_0x1703f0)['then'](handleResult(_0x454584))['catch'](handleError());}}catch(_0x16dbec){logger[_0x49c3('0x2e')](JSON[_0x49c3('0x2b')](_0x16dbec));}return logger[_0x49c3('0xb')](_0x49c3('0x40'));};}function getJobs(_0x3ccc53){var _0x4341d8={};if(_0x3ccc53){_0x4341d8['id']=_0x3ccc53;}return db[_0x49c3('0x41')][_0x49c3('0x42')]({'where':_0x4341d8,'include':[{'model':db[_0x49c3('0xe')],'attributes':['id','name','email'],'include':[{'model':db['MailServerOut'],'as':_0x49c3('0xf')}]}]})[_0x49c3('0x2d')](function(_0x2efacb){var _0x34b969=_[_0x49c3('0x43')](manager[_0x49c3('0x44')]);var _0x49633e=_[_0x49c3('0x45')](_0x2efacb,function(_0x2eaff7){return _0x2eaff7['id'][_0x49c3('0x46')]();});var _0x1bd233=_[_0x49c3('0x47')](_0x2efacb,function(_0x3a73cc){return _0x3a73cc['id'][_0x49c3('0x46')]();});var _0x223a03=_0x3ccc53?_0x49633e:_[_0x49c3('0x48')](_0x49633e,_0x34b969);var _0x4b20dd=_[_0x49c3('0x49')](_0x49633e,_0x34b969);var _0x2a1446=_[_0x49c3('0x48')](_0x34b969,_0x49633e);var _0x523d29;var _0x4b2ad0;for(_0x523d29=0x0;_0x523d29<_0x2a1446[_0x49c3('0x4a')]&&!_0x3ccc53;_0x523d29+=0x1){_0x4b2ad0=_0x2a1446[_0x523d29]['toString']();if(manager['exists'](_0x4b2ad0)){manager[_0x49c3('0x4b')](_0x4b2ad0);manager[_0x49c3('0x4c')](_0x4b2ad0);logger[_0x49c3('0xb')](_0x49c3('0x4d'),_0x4b2ad0);}}logger['info'](_0x49c3('0x4e'),JSON['stringify'](_0x223a03));for(_0x523d29=0x0;_0x523d29<_0x223a03[_0x49c3('0x4a')];_0x523d29+=0x1){_0x4b2ad0=_0x223a03[_0x523d29][_0x49c3('0x46')]();logger[_0x49c3('0xb')]('index',_0x4b2ad0);if(_0x3ccc53){logger[_0x49c3('0xb')](_0x49c3('0x4f'),_0x3ccc53);logger[_0x49c3('0xb')](JSON[_0x49c3('0x2b')](_0x1bd233[_0x4b2ad0]));BPromise[_0x49c3('0x50')]()[_0x49c3('0x2d')](handleJob(_0x1bd233[_0x4b2ad0]));logger[_0x49c3('0xb')]('run\x20job',_0x1bd233[_0x4b2ad0][_0x49c3('0x1a')],_0x1bd233[_0x4b2ad0][_0x49c3('0x51')]);}else if(_0x1bd233[_0x4b2ad0]['cron']&&_0x1bd233[_0x4b2ad0][_0x49c3('0x52')]&&moment()['isBetween'](_0x1bd233[_0x4b2ad0]['startAt'],_0x1bd233[_0x4b2ad0]['endAt'])){manager[_0x49c3('0x53')](_0x4b2ad0,_0x1bd233[_0x4b2ad0][_0x49c3('0x51')],handleJob(_0x1bd233[_0x4b2ad0]));manager[_0x49c3('0x54')](_0x4b2ad0);logger[_0x49c3('0xb')](_0x49c3('0x55'),_0x1bd233[_0x4b2ad0][_0x49c3('0x1a')],_0x1bd233[_0x4b2ad0]['cron']);}else if(manager[_0x49c3('0x56')](_0x4b2ad0)){manager[_0x49c3('0x4b')](_0x4b2ad0);manager['deleteJob'](_0x4b2ad0);logger[_0x49c3('0xb')](_0x49c3('0x57'),_0x1bd233[_0x4b2ad0][_0x49c3('0x1a')],_0x1bd233[_0x4b2ad0]['cron']);}}for(_0x523d29=0x0,_0x4b2ad0;_0x523d29<_0x4b20dd[_0x49c3('0x4a')]&&!_0x3ccc53;_0x523d29+=0x1){_0x4b2ad0=_0x4b20dd[_0x523d29][_0x49c3('0x46')]();if(manager['exists'](_0x4b2ad0)){if(_0x1bd233[_0x4b2ad0]['cron']&&_0x1bd233[_0x4b2ad0][_0x49c3('0x52')]&&moment()[_0x49c3('0x58')](_0x1bd233[_0x4b2ad0][_0x49c3('0x59')],_0x1bd233[_0x4b2ad0][_0x49c3('0x5a')])){manager[_0x49c3('0x5b')](_0x4b2ad0,_0x1bd233[_0x4b2ad0]['cron'],handleJob(_0x1bd233[_0x4b2ad0]));logger[_0x49c3('0xb')]('update\x20cron',_0x1bd233[_0x4b2ad0]['name'],_0x1bd233[_0x4b2ad0]['cron']);}else{manager['stop'](_0x4b2ad0);manager[_0x49c3('0x4c')](_0x4b2ad0);logger[_0x49c3('0xb')](_0x49c3('0x57'),_0x1bd233[_0x4b2ad0][_0x49c3('0x1a')],_0x1bd233[_0x4b2ad0][_0x49c3('0x51')]);}}}})[_0x49c3('0x30')](function(_0x5b623d){logger['error'](JSON[_0x49c3('0x2b')](_0x5b623d));});}exports[_0x49c3('0x5c')]=function(_0x2e4b08){return getJobs(_0x2e4b08);};exports[_0x49c3('0x54')]=function(){setInterval(function(){return getJobs();},0x3c*0x3e8);return getJobs();};
\ No newline at end of file
index 171f8b5..e9972d3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd6d0=['log','finished\x20populating','contacts1','CmHopper','hopper1','contacts2','hopper2','catch','util','../mysqldb','push','Innocenzo','Biondo','innocenzo.biondo','@xcally.com','now','CmContact','destroy','bulkCreate','then'];(function(_0x17ded8,_0x2aa22d){var _0x37e7a5=function(_0x2ae2ee){while(--_0x2ae2ee){_0x17ded8['push'](_0x17ded8['shift']());}};_0x37e7a5(++_0x2aa22d);}(_0xd6d0,0x170));var _0x0d6d=function(_0x408cbc,_0x54e587){_0x408cbc=_0x408cbc-0x0;var _0x58cfd1=_0xd6d0[_0x408cbc];return _0x58cfd1;};'use strict';var util=require(_0x0d6d('0x0'));var db=require(_0x0d6d('0x1'))['db'];var contacts=[];var hopper=[];var contacts2=[];var hopper2=[];for(var i=0x1;i<=0x4b0;i+=0x1){contacts[_0x0d6d('0x2')]({'id':i,'firstName':_0x0d6d('0x3')+i,'lastName':_0x0d6d('0x4')+i,'phone':0xf879fb460+i,'email':_0x0d6d('0x5')+i+_0x0d6d('0x6')});}for(var i=0x1;i<=0x4b0;i+=0x1){hopper[_0x0d6d('0x2')]({'id':i,'active':![],'scheduledat':Date[_0x0d6d('0x7')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x0d6d('0x7')](),'updatedAt':Date[_0x0d6d('0x7')]()});}for(var i=0x4b1;i<=0x960;i+=0x1){contacts2[_0x0d6d('0x2')]({'id':i,'firstName':'Innocenzo'+i,'lastName':_0x0d6d('0x4')+i,'phone':0xf879fb460+i,'email':_0x0d6d('0x5')+i+_0x0d6d('0x6')});}for(var i=0x4b1;i<=0x960;i+=0x1){hopper2['push']({'id':i,'active':![],'scheduledat':Date[_0x0d6d('0x7')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x0d6d('0x7')](),'updatedAt':Date[_0x0d6d('0x7')]()});}db[_0x0d6d('0x8')][_0x0d6d('0x9')]({'where':{}})['then'](function(){return db['CmContact'][_0x0d6d('0xa')](contacts);})[_0x0d6d('0xb')](function(){console[_0x0d6d('0xc')](_0x0d6d('0xd'),_0x0d6d('0xe'));return db[_0x0d6d('0xf')][_0x0d6d('0x9')]({'where':{}});})['then'](function(){return db[_0x0d6d('0xf')][_0x0d6d('0xa')](hopper);})[_0x0d6d('0xb')](function(){console[_0x0d6d('0xc')](_0x0d6d('0xd'),_0x0d6d('0x10'));return db[_0x0d6d('0x8')][_0x0d6d('0xa')](contacts2);})[_0x0d6d('0xb')](function(){console[_0x0d6d('0xc')](_0x0d6d('0xd'),_0x0d6d('0x11'));return db[_0x0d6d('0xf')][_0x0d6d('0xa')](hopper2);})['then'](function(){console[_0x0d6d('0xc')](_0x0d6d('0xd'),_0x0d6d('0x12'));})[_0x0d6d('0x13')](function(_0xde334a){console[_0x0d6d('0xc')](_0xde334a);});
\ No newline at end of file
+var _0x3ad2=['Biondo','innocenzo.biondo','now','push','@xcally.com','CmContact','then','bulkCreate','finished\x20populating','CmHopper','destroy','log','hopper1','contacts2','hopper2','catch','util','../mysqldb'];(function(_0x18ae53,_0x1d9ab8){var _0x39bb0f=function(_0x2b5dc3){while(--_0x2b5dc3){_0x18ae53['push'](_0x18ae53['shift']());}};_0x39bb0f(++_0x1d9ab8);}(_0x3ad2,0x154));var _0x23ad=function(_0x1d2a11,_0x44e346){_0x1d2a11=_0x1d2a11-0x0;var _0xc2dee0=_0x3ad2[_0x1d2a11];return _0xc2dee0;};'use strict';var util=require(_0x23ad('0x0'));var db=require(_0x23ad('0x1'))['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':_0x23ad('0x2')+i,'phone':0xf879fb460+i,'email':_0x23ad('0x3')+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[_0x23ad('0x4')](),'updatedAt':Date[_0x23ad('0x4')]()});}for(var i=0x4b1;i<=0x960;i+=0x1){contacts2[_0x23ad('0x5')]({'id':i,'firstName':'Innocenzo'+i,'lastName':_0x23ad('0x2')+i,'phone':0xf879fb460+i,'email':'innocenzo.biondo'+i+_0x23ad('0x6')});}for(var i=0x4b1;i<=0x960;i+=0x1){hopper2[_0x23ad('0x5')]({'id':i,'active':![],'scheduledat':Date[_0x23ad('0x4')](),'countbusyretry':0x0,'countcongestionretry':0x0,'countnoanswerretry':0x0,'ContactId':i,'ListId':0x1,'UserId':0x1,'VoiceQueueId':0x3fd,'createdAt':Date[_0x23ad('0x4')](),'updatedAt':Date['now']()});}db[_0x23ad('0x7')]['destroy']({'where':{}})[_0x23ad('0x8')](function(){return db[_0x23ad('0x7')][_0x23ad('0x9')](contacts);})['then'](function(){console['log'](_0x23ad('0xa'),'contacts1');return db[_0x23ad('0xb')][_0x23ad('0xc')]({'where':{}});})[_0x23ad('0x8')](function(){return db[_0x23ad('0xb')][_0x23ad('0x9')](hopper);})[_0x23ad('0x8')](function(){console[_0x23ad('0xd')]('finished\x20populating',_0x23ad('0xe'));return db[_0x23ad('0x7')][_0x23ad('0x9')](contacts2);})[_0x23ad('0x8')](function(){console[_0x23ad('0xd')](_0x23ad('0xa'),_0x23ad('0xf'));return db['CmHopper'][_0x23ad('0x9')](hopper2);})['then'](function(){console[_0x23ad('0xd')]('finished\x20populating',_0x23ad('0x10'));})[_0x23ad('0x11')](function(_0xe6e033){console[_0x23ad('0xd')](_0xe6e033);});
\ No newline at end of file
index 036ca01..b826478 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8e2d=['add\x20user','catch','log','util','../mysqldb','push','agent','format','%s%s','%s%s@xcally.com','udp','wss','all','ulaw','yes','/etc/pki/tls/certs/motion.crt','actpass','\x22%s\x22\x20<%s>','User','bulkCreate'];(function(_0x1a5efb,_0x3ae23d){var _0x123736=function(_0x31e10a){while(--_0x31e10a){_0x1a5efb['push'](_0x1a5efb['shift']());}};_0x123736(++_0x3ae23d);}(_0x8e2d,0x157));var _0xd8e2=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x8e2d[_0x3dd15e];return _0x231fd0;};'use strict';var util=require(_0xd8e2('0x0'));var db=require(_0xd8e2('0x1'))['db'];var users=[];for(var i=0x1;i<=0xc8;i+=0x1){users[_0xd8e2('0x2')]({'name':util['format']('%s%s',_0xd8e2('0x3'),i),'fullname':util[_0xd8e2('0x4')](_0xd8e2('0x5'),_0xd8e2('0x3'),i),'email':util[_0xd8e2('0x4')](_0xd8e2('0x6'),_0xd8e2('0x3'),i),'role':'agent','password':'password','internal':0xfa0+i,'type':'friend','transport':[_0xd8e2('0x7'),'ws',_0xd8e2('0x8')],'disallow':[_0xd8e2('0x9')],'allow':[_0xd8e2('0xa')],'defaultuser':util['format'](_0xd8e2('0x5'),_0xd8e2('0x3'),i),'encryption':_0xd8e2('0xb'),'avpf':_0xd8e2('0xb'),'force_avp':_0xd8e2('0xb'),'icesupport':_0xd8e2('0xb'),'dtlsenable':_0xd8e2('0xb'),'dtlsverify':'no','dtlscertfile':_0xd8e2('0xc'),'dtlsprivatekey':'/etc/pki/tls/private/motion.key','dtlssetup':_0xd8e2('0xd'),'callerid':util[_0xd8e2('0x4')](_0xd8e2('0xe'),util[_0xd8e2('0x4')](_0xd8e2('0x5'),_0xd8e2('0x3'),i),0xfa0+i)});}db[_0xd8e2('0xf')][_0xd8e2('0x10')](users)['then'](function(){console['log'](_0xd8e2('0x11'));})[_0xd8e2('0x12')](function(_0x16e4ab){console[_0xd8e2('0x13')](_0x16e4ab);});
\ No newline at end of file
+var _0x1e2f=['udp','wss','all','yes','/etc/pki/tls/certs/motion.crt','actpass','\x22%s\x22\x20<%s>','bulkCreate','add\x20user','catch','log','util','format','%s%s','agent','%s%s@xcally.com','password'];(function(_0x478738,_0x182346){var _0x1858d0=function(_0x46ef82){while(--_0x46ef82){_0x478738['push'](_0x478738['shift']());}};_0x1858d0(++_0x182346);}(_0x1e2f,0x170));var _0xf1e2=function(_0x4e888a,_0x34009b){_0x4e888a=_0x4e888a-0x0;var _0x5747cd=_0x1e2f[_0x4e888a];return _0x5747cd;};'use strict';var util=require(_0xf1e2('0x0'));var db=require('../mysqldb')['db'];var users=[];for(var i=0x1;i<=0xc8;i+=0x1){users['push']({'name':util[_0xf1e2('0x1')](_0xf1e2('0x2'),_0xf1e2('0x3'),i),'fullname':util[_0xf1e2('0x1')](_0xf1e2('0x2'),_0xf1e2('0x3'),i),'email':util[_0xf1e2('0x1')](_0xf1e2('0x4'),_0xf1e2('0x3'),i),'role':'agent','password':_0xf1e2('0x5'),'internal':0xfa0+i,'type':'friend','transport':[_0xf1e2('0x6'),'ws',_0xf1e2('0x7')],'disallow':[_0xf1e2('0x8')],'allow':['ulaw'],'defaultuser':util[_0xf1e2('0x1')](_0xf1e2('0x2'),_0xf1e2('0x3'),i),'encryption':_0xf1e2('0x9'),'avpf':_0xf1e2('0x9'),'force_avp':_0xf1e2('0x9'),'icesupport':_0xf1e2('0x9'),'dtlsenable':_0xf1e2('0x9'),'dtlsverify':'no','dtlscertfile':_0xf1e2('0xa'),'dtlsprivatekey':'/etc/pki/tls/private/motion.key','dtlssetup':_0xf1e2('0xb'),'callerid':util[_0xf1e2('0x1')](_0xf1e2('0xc'),util['format'](_0xf1e2('0x2'),_0xf1e2('0x3'),i),0xfa0+i)});}db['User'][_0xf1e2('0xd')](users)['then'](function(){console['log'](_0xf1e2('0xe'));})[_0xf1e2('0xf')](function(_0x2574af){console[_0xf1e2('0x10')](_0x2574af);});
\ No newline at end of file
index 641b966..8ba523e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf89b=['SmsInteraction','SmsInteractions','OpenchannelInteraction','OpenchannelInteractions','then','admin','voice:inbound','include','push','VoiceQueue','ChatQueue','MailQueue','OpenchannelQueue','Trunk','user','voice:outbound','userProfileId','SmsQueue','OpenchannelQueues','getChatQueues','getFaxQueues','getSmsQueues','getOpenchannelQueues','all','voice','chat','fax','mail','openchannel','telephone:%s','campaign:%s:%s','length','emit','removeMailInteractions','user_has_mail_interactions:remove','FaxInteractions','removeFaxInteractions','user_has_fax_interactions:remove','leave','removeSmsInteractions','user_has_sms_interactions:remove','removeOpenchannelInteractions','user_has_openchannel_interactions:remove','default','connection','address','request','remotePort','connectedAt','log','SocketIO\x20','nsp','disconnect','CONNECTED','lodash','util','../mysqldb','./environment','Agents','User','agent','name','type','ivr','findOne','VoiceQueues','ChatQueues','FaxQueues','SmsQueues','findAll','Telephones','Trunks','IvrCampaigns','UserProfileResource','map','where','role','telephone','Campaign','format','%s:queue:%s','user:%s','query','find','handshake','ChatInteraction','MailInteractions','FaxInteraction'];(function(_0x304c72,_0x409169){var _0x557378=function(_0x251d79){while(--_0x251d79){_0x304c72['push'](_0x304c72['shift']());}};_0x557378(++_0x409169);}(_0xf89b,0xe6));var _0xbf89=function(_0x828fe4,_0x1b8a7e){_0x828fe4=_0x828fe4-0x0;var _0x28efd2=_0xf89b[_0x828fe4];return _0x28efd2;};'use strict';var _=require(_0xbf89('0x0'));var util=require(_0xbf89('0x1'));var BPromise=require('bluebird');var db=require(_0xbf89('0x2'))['db'];var config=require(_0xbf89('0x3'));var queryQueues={'attributes':['id','name'],'include':[{'as':_0xbf89('0x4'),'model':db[_0xbf89('0x5')],'attributes':['id','name','role'],'raw':!![],'where':{'role':_0xbf89('0x6')},'required':![]}]};var queryTelephones={'raw':!![],'attributes':['id',_0xbf89('0x7')],'where':{'role':'telephone'}};var queryTrunks={'raw':!![],'attributes':['id',_0xbf89('0x7')]};var queryAgents={'raw':!![],'attributes':['id','name'],'where':{'role':_0xbf89('0x6')}};var queryCampaigns={'raw':!![],'attributes':['id',_0xbf89('0x7'),_0xbf89('0x8')],'where':{'type':_0xbf89('0x9')}};function getAssociatedResources(_0x16f486,_0x17fe52,_0xb8f996){return db['UserProfileSection'][_0xbf89('0xa')]({'where':{'name':_0x16f486,'userProfileId':_0x17fe52},'raw':!![]})['then'](function(_0x288a32){if(_0x288a32){if(_0x288a32['autoAssociation']){switch(_0x16f486){case _0xbf89('0xb'):case _0xbf89('0xc'):case _0xbf89('0xd'):case _0xbf89('0xe'):case'MailQueues':case'OpenchannelQueues':return db[_0xb8f996][_0xbf89('0xf')](queryQueues);case _0xbf89('0x10'):return db[_0xb8f996][_0xbf89('0xf')](queryTelephones);case _0xbf89('0x11'):return db[_0xb8f996][_0xbf89('0xf')](queryTrunks);case _0xbf89('0x12'):return db[_0xb8f996][_0xbf89('0xf')](queryCampaigns);}}else{return db[_0xbf89('0x13')]['findAll']({'attributes':['resourceId'],'where':{'sectionId':_0x288a32['id']},'raw':!![]})['then'](function(_0xf4964){if(_0xf4964){var _0xf005de={'where':{'id':_[_0xbf89('0x14')](_0xf4964,'resourceId')},'raw':!![]};switch(_0xb8f996){case _0xbf89('0x5'):_0xf005de[_0xbf89('0x15')][_0xbf89('0x16')]=_0xbf89('0x17');break;case _0xbf89('0x18'):_0xf005de[_0xbf89('0x15')]['type']=_0xbf89('0x9');break;}return db[_0xb8f996]['findAll'](_0xf005de);}else{return[];}});}}else{return[];}})['then'](function(_0x410b39){return _0x410b39;});}function joinOrLeaveQueues(_0x2b3ee1,_0x282745,_0x14a753,_0x5e671e){_0x2b3ee1[_0x282745](util[_0xbf89('0x19')](_0xbf89('0x1a'),_0x14a753,_0x5e671e[_0xbf89('0x7')]));if(_0x5e671e[_0xbf89('0x4')]){for(var _0x414879=0x0;_0x414879<_0x5e671e[_0xbf89('0x4')]['length'];_0x414879+=0x1){_0x2b3ee1[_0x282745](util['format'](_0xbf89('0x1b'),_0x5e671e['Agents'][_0x414879]['name']));}}}function joinOrLeave(_0x1bd704,_0x410119,_0x3a12d2){var _0x53166e;if(_0x1bd704['handshake'][_0xbf89('0x1c')]['id']){db[_0xbf89('0x5')][_0xbf89('0x1d')]({'attributes':['id',_0xbf89('0x7'),'role','userProfileId'],'where':{'id':_0x1bd704[_0xbf89('0x1e')]['query']['id']},'include':[{'model':db[_0xbf89('0x1f')],'as':'ChatInteractions','attributes':['id'],'raw':!![]},{'model':db['MailInteraction'],'as':_0xbf89('0x20'),'attributes':['id'],'raw':!![]},{'model':db[_0xbf89('0x21')],'as':'FaxInteractions','attributes':['id'],'raw':!![]},{'model':db[_0xbf89('0x22')],'as':_0xbf89('0x23'),'attributes':['id'],'raw':!![]},{'model':db[_0xbf89('0x24')],'as':_0xbf89('0x25'),'attributes':['id'],'raw':!![]}]})[_0xbf89('0x26')](function(_0x2c0842){if(_0x2c0842){_0x53166e=_0x2c0842;_0x1bd704[_0x410119](util[_0xbf89('0x19')](_0xbf89('0x1b'),_0x2c0842[_0xbf89('0x7')]));var _0x49f61c=[];switch(_0x2c0842[_0xbf89('0x16')]){case _0xbf89('0x27'):_0x1bd704[_0x410119](_0xbf89('0x28'));_0x1bd704[_0x410119]('voice:outbound');if(queryQueues['hasOwnProperty'](_0xbf89('0x29'))){delete queryQueues[_0xbf89('0x29')];}_0x49f61c[_0xbf89('0x2a')](db[_0xbf89('0x2b')][_0xbf89('0xf')](queryQueues));_0x49f61c[_0xbf89('0x2a')](db[_0xbf89('0x2c')][_0xbf89('0xf')](queryQueues));_0x49f61c[_0xbf89('0x2a')](db['FaxQueue'][_0xbf89('0xf')](queryQueues));_0x49f61c[_0xbf89('0x2a')](db['SmsQueue'][_0xbf89('0xf')](queryQueues));_0x49f61c[_0xbf89('0x2a')](db[_0xbf89('0x2d')]['findAll'](queryQueues));_0x49f61c['push'](db[_0xbf89('0x2e')]['findAll'](queryQueues));_0x49f61c[_0xbf89('0x2a')](db[_0xbf89('0x5')]['findAll'](queryTelephones));_0x49f61c[_0xbf89('0x2a')](db[_0xbf89('0x2f')]['findAll'](queryTrunks));_0x49f61c['push'](db[_0xbf89('0x18')][_0xbf89('0xf')](queryCampaigns));_0x49f61c[_0xbf89('0x2a')](db['User']['findAll'](queryAgents));break;case _0xbf89('0x30'):_0x1bd704[_0x410119](_0xbf89('0x28'));_0x1bd704[_0x410119](_0xbf89('0x31'));_0x49f61c['push'](getAssociatedResources(_0xbf89('0xb'),_0x2c0842['userProfileId'],'VoiceQueue'));_0x49f61c[_0xbf89('0x2a')](getAssociatedResources(_0xbf89('0xc'),_0x2c0842['userProfileId'],'ChatQueue'));_0x49f61c[_0xbf89('0x2a')](getAssociatedResources(_0xbf89('0xd'),_0x2c0842[_0xbf89('0x32')],'FaxQueue'));_0x49f61c[_0xbf89('0x2a')](getAssociatedResources(_0xbf89('0xe'),_0x2c0842['userProfileId'],_0xbf89('0x33')));_0x49f61c[_0xbf89('0x2a')](getAssociatedResources('MailQueues',_0x2c0842['userProfileId'],_0xbf89('0x2d')));_0x49f61c[_0xbf89('0x2a')](getAssociatedResources(_0xbf89('0x34'),_0x2c0842[_0xbf89('0x32')],_0xbf89('0x2e')));_0x49f61c[_0xbf89('0x2a')](getAssociatedResources(_0xbf89('0x10'),_0x2c0842[_0xbf89('0x32')],_0xbf89('0x5')));_0x49f61c[_0xbf89('0x2a')](getAssociatedResources(_0xbf89('0x11'),_0x2c0842['userProfileId'],_0xbf89('0x2f')));_0x49f61c[_0xbf89('0x2a')](getAssociatedResources(_0xbf89('0x12'),_0x2c0842[_0xbf89('0x32')],_0xbf89('0x18')));_0x49f61c['push'](db[_0xbf89('0x5')][_0xbf89('0xf')](queryAgents));break;case _0xbf89('0x6'):_0x1bd704[_0x410119]('voice:inbound');_0x1bd704[_0x410119](_0xbf89('0x31'));_0x49f61c[_0xbf89('0x2a')](_0x2c0842['getVoiceQueues']({'attributes':['id',_0xbf89('0x7')]}));_0x49f61c[_0xbf89('0x2a')](_0x2c0842[_0xbf89('0x35')]({'attributes':['id',_0xbf89('0x7')]}));_0x49f61c[_0xbf89('0x2a')](_0x2c0842[_0xbf89('0x36')]({'attributes':['id','name']}));_0x49f61c[_0xbf89('0x2a')](_0x2c0842[_0xbf89('0x37')]({'attributes':['id','name']}));_0x49f61c[_0xbf89('0x2a')](_0x2c0842['getMailQueues']({'attributes':['id',_0xbf89('0x7')]}));_0x49f61c[_0xbf89('0x2a')](_0x2c0842[_0xbf89('0x38')]({'attributes':['id',_0xbf89('0x7')]}));break;}return BPromise[_0xbf89('0x39')](_0x49f61c);}})[_0xbf89('0x26')](function(_0x25b18e){if(_0x25b18e&&_0x25b18e['length']){for(var _0x30fad4=0x0;_0x30fad4<_0x25b18e['length'];_0x30fad4+=0x1){for(var _0x442d8a=0x0;_0x442d8a<_0x25b18e[_0x30fad4]['length'];_0x442d8a+=0x1){switch(_0x30fad4){case 0x0:joinOrLeaveQueues(_0x1bd704,_0x410119,_0xbf89('0x3a'),_0x25b18e[_0x30fad4][_0x442d8a]);break;case 0x1:joinOrLeaveQueues(_0x1bd704,_0x410119,_0xbf89('0x3b'),_0x25b18e[_0x30fad4][_0x442d8a]);break;case 0x2:joinOrLeaveQueues(_0x1bd704,_0x410119,_0xbf89('0x3c'),_0x25b18e[_0x30fad4][_0x442d8a]);break;case 0x3:joinOrLeaveQueues(_0x1bd704,_0x410119,'sms',_0x25b18e[_0x30fad4][_0x442d8a]);break;case 0x4:joinOrLeaveQueues(_0x1bd704,_0x410119,_0xbf89('0x3d'),_0x25b18e[_0x30fad4][_0x442d8a]);break;case 0x5:joinOrLeaveQueues(_0x1bd704,_0x410119,_0xbf89('0x3e'),_0x25b18e[_0x30fad4][_0x442d8a]);break;case 0x6:_0x1bd704[_0x410119](util['format'](_0xbf89('0x3f'),_0x25b18e[_0x30fad4][_0x442d8a][_0xbf89('0x7')]));break;case 0x7:_0x1bd704[_0x410119](util[_0xbf89('0x19')]('trunk:%s',_0x25b18e[_0x30fad4][_0x442d8a][_0xbf89('0x7')]));break;case 0x8:_0x1bd704[_0x410119](util[_0xbf89('0x19')](_0xbf89('0x40'),_0x25b18e[_0x30fad4][_0x442d8a][_0xbf89('0x8')],_0x25b18e[_0x30fad4][_0x442d8a][_0xbf89('0x7')]));break;case 0x9:_0x1bd704[_0x410119](util[_0xbf89('0x19')]('user:%s',_0x25b18e[_0x30fad4][_0x442d8a]['name']));break;}}}}})[_0xbf89('0x26')](function(){if(_0x410119==='leave'){var _0x393125=_['map'](_0x53166e['ChatInteractions'],'id');return _0x53166e['removeChatInteractions'](_0x393125)[_0xbf89('0x26')](function(){for(var _0x26ee66=0x0;_0x26ee66<_0x393125[_0xbf89('0x41')];_0x26ee66+=0x1){_0x3a12d2[_0xbf89('0x42')]('user_has_chat_interactions:remove',{'ChatInteractionId':Number(_0x393125[_0x26ee66]),'UserId':Number(_0x53166e['id'])});}});}})[_0xbf89('0x26')](function(){if(_0x410119==='leave'){var _0x27902b=_[_0xbf89('0x14')](_0x53166e[_0xbf89('0x20')],'id');return _0x53166e[_0xbf89('0x43')](_0x27902b)['then'](function(){for(var _0x411ae6=0x0;_0x411ae6<_0x27902b[_0xbf89('0x41')];_0x411ae6+=0x1){_0x3a12d2[_0xbf89('0x42')](_0xbf89('0x44'),{'MailInteractionId':Number(_0x27902b[_0x411ae6]),'UserId':Number(_0x53166e['id'])});}});}})[_0xbf89('0x26')](function(){if(_0x410119==='leave'){var _0x33cf1e=_[_0xbf89('0x14')](_0x53166e[_0xbf89('0x45')],'id');return _0x53166e[_0xbf89('0x46')](_0x33cf1e)['then'](function(){for(var _0x46bd35=0x0;_0x46bd35<_0x33cf1e[_0xbf89('0x41')];_0x46bd35+=0x1){_0x3a12d2['emit'](_0xbf89('0x47'),{'FaxInteractionId':Number(_0x33cf1e[_0x46bd35]),'UserId':Number(_0x53166e['id'])});}});}})[_0xbf89('0x26')](function(){if(_0x410119===_0xbf89('0x48')){var _0x397640=_['map'](_0x53166e[_0xbf89('0x23')],'id');return _0x53166e[_0xbf89('0x49')](_0x397640)[_0xbf89('0x26')](function(){for(var _0x44f561=0x0;_0x44f561<_0x397640[_0xbf89('0x41')];_0x44f561+=0x1){_0x3a12d2[_0xbf89('0x42')](_0xbf89('0x4a'),{'SmsInteractionId':Number(_0x397640[_0x44f561]),'UserId':Number(_0x53166e['id'])});}});}})[_0xbf89('0x26')](function(){if(_0x410119===_0xbf89('0x48')){var _0x4b9044=_['map'](_0x53166e[_0xbf89('0x25')],'id');return _0x53166e[_0xbf89('0x4b')](_0x4b9044)[_0xbf89('0x26')](function(){for(var _0x22a862=0x0;_0x22a862<_0x4b9044[_0xbf89('0x41')];_0x22a862+=0x1){_0x3a12d2['emit'](_0xbf89('0x4c'),{'OpenchannelInteractionId':Number(_0x4b9044[_0x22a862]),'UserId':Number(_0x53166e['id'])});}});}})['catch'](function(_0x9e2c8){_0x1bd704['log'](_0x9e2c8);});}}function onDisconnect(_0x3cb036,_0x121909){joinOrLeave(_0x3cb036,_0xbf89('0x48'),_0x121909);}function onConnect(_0x1391a0){joinOrLeave(_0x1391a0,'join');}exports[_0xbf89('0x4d')]=function(_0x388ad7){_0x388ad7['on'](_0xbf89('0x4e'),function(_0x326d9c){_0x326d9c['setMaxListeners'](0x0);_0x326d9c[_0xbf89('0x4f')]=_0x326d9c[_0xbf89('0x50')][_0xbf89('0x4e')]['remoteAddress']+':'+_0x326d9c[_0xbf89('0x50')][_0xbf89('0x4e')][_0xbf89('0x51')];_0x326d9c[_0xbf89('0x52')]=new Date();_0x326d9c['log']=function(_0xe7b829){console[_0xbf89('0x53')](_0xbf89('0x54')+_0x326d9c[_0xbf89('0x55')][_0xbf89('0x7')]+'['+_0x326d9c['address']+']',_0xe7b829);};_0x326d9c['on'](_0xbf89('0x56'),function(){onDisconnect(_0x326d9c,_0x388ad7);_0x326d9c[_0xbf89('0x53')]('DISCONNECTED');});onConnect(_0x326d9c);_0x326d9c['log'](_0xbf89('0x57'));});};
\ No newline at end of file
+var _0x78fd=['OpenchannelQueues','findAll','Trunks','IvrCampaigns','UserProfileResource','map','resourceId','telephone','Campaign','where','format','length','user:%s','userProfileId','handshake','query','ChatInteraction','ChatInteractions','MailInteraction','MailInteractions','FaxInteraction','FaxInteractions','SmsInteraction','SmsInteractions','OpenchannelInteraction','OpenchannelInteractions','admin','voice:inbound','voice:outbound','hasOwnProperty','include','push','ChatQueue','FaxQueue','MailQueue','Trunk','user','VoiceQueue','SmsQueues','SmsQueue','OpenchannelQueue','Telephones','getVoiceQueues','getFaxQueues','getSmsQueues','getOpenchannelQueues','all','voice','chat','fax','sms','mail','openchannel','telephone:%s','campaign:%s:%s','leave','emit','user_has_chat_interactions:remove','user_has_mail_interactions:remove','removeFaxInteractions','user_has_fax_interactions:remove','removeSmsInteractions','user_has_sms_interactions:remove','removeOpenchannelInteractions','catch','connection','setMaxListeners','address','request','remoteAddress','connectedAt','SocketIO\x20','nsp','disconnect','log','DISCONNECTED','lodash','../mysqldb','./environment','name','Agents','User','role','agent','type','UserProfileSection','then','autoAssociation','ChatQueues','FaxQueues','MailQueues'];(function(_0x3bc45f,_0x337849){var _0x4141f5=function(_0x38ab26){while(--_0x38ab26){_0x3bc45f['push'](_0x3bc45f['shift']());}};_0x4141f5(++_0x337849);}(_0x78fd,0x15d));var _0xd78f=function(_0xef6308,_0x5779e0){_0xef6308=_0xef6308-0x0;var _0x85ead0=_0x78fd[_0xef6308];return _0x85ead0;};'use strict';var _=require(_0xd78f('0x0'));var util=require('util');var BPromise=require('bluebird');var db=require(_0xd78f('0x1'))['db'];var config=require(_0xd78f('0x2'));var queryQueues={'attributes':['id',_0xd78f('0x3')],'include':[{'as':_0xd78f('0x4'),'model':db[_0xd78f('0x5')],'attributes':['id',_0xd78f('0x3'),_0xd78f('0x6')],'raw':!![],'where':{'role':_0xd78f('0x7')},'required':![]}]};var queryTelephones={'raw':!![],'attributes':['id','name'],'where':{'role':'telephone'}};var queryTrunks={'raw':!![],'attributes':['id',_0xd78f('0x3')]};var queryAgents={'raw':!![],'attributes':['id',_0xd78f('0x3')],'where':{'role':_0xd78f('0x7')}};var queryCampaigns={'raw':!![],'attributes':['id',_0xd78f('0x3'),_0xd78f('0x8')],'where':{'type':'ivr'}};function getAssociatedResources(_0x27f552,_0x49bd01,_0x2e3eb5){return db[_0xd78f('0x9')]['findOne']({'where':{'name':_0x27f552,'userProfileId':_0x49bd01},'raw':!![]})[_0xd78f('0xa')](function(_0x2639f2){if(_0x2639f2){if(_0x2639f2[_0xd78f('0xb')]){switch(_0x27f552){case'VoiceQueues':case _0xd78f('0xc'):case _0xd78f('0xd'):case'SmsQueues':case _0xd78f('0xe'):case _0xd78f('0xf'):return db[_0x2e3eb5][_0xd78f('0x10')](queryQueues);case'Telephones':return db[_0x2e3eb5][_0xd78f('0x10')](queryTelephones);case _0xd78f('0x11'):return db[_0x2e3eb5]['findAll'](queryTrunks);case _0xd78f('0x12'):return db[_0x2e3eb5]['findAll'](queryCampaigns);}}else{return db[_0xd78f('0x13')][_0xd78f('0x10')]({'attributes':['resourceId'],'where':{'sectionId':_0x2639f2['id']},'raw':!![]})[_0xd78f('0xa')](function(_0x3287bf){if(_0x3287bf){var _0x444936={'where':{'id':_[_0xd78f('0x14')](_0x3287bf,_0xd78f('0x15'))},'raw':!![]};switch(_0x2e3eb5){case _0xd78f('0x5'):_0x444936['where']['role']=_0xd78f('0x16');break;case _0xd78f('0x17'):_0x444936[_0xd78f('0x18')][_0xd78f('0x8')]='ivr';break;}return db[_0x2e3eb5][_0xd78f('0x10')](_0x444936);}else{return[];}});}}else{return[];}})[_0xd78f('0xa')](function(_0x553110){return _0x553110;});}function joinOrLeaveQueues(_0x55f633,_0x2200b5,_0x50d8d0,_0x37d4e7){_0x55f633[_0x2200b5](util[_0xd78f('0x19')]('%s:queue:%s',_0x50d8d0,_0x37d4e7[_0xd78f('0x3')]));if(_0x37d4e7[_0xd78f('0x4')]){for(var _0x3d5629=0x0;_0x3d5629<_0x37d4e7[_0xd78f('0x4')][_0xd78f('0x1a')];_0x3d5629+=0x1){_0x55f633[_0x2200b5](util[_0xd78f('0x19')](_0xd78f('0x1b'),_0x37d4e7[_0xd78f('0x4')][_0x3d5629][_0xd78f('0x3')]));}}}function joinOrLeave(_0x422ade,_0x2bcd5e,_0x556f9d){var _0x1f6f87;if(_0x422ade['handshake']['query']['id']){db[_0xd78f('0x5')]['find']({'attributes':['id',_0xd78f('0x3'),_0xd78f('0x6'),_0xd78f('0x1c')],'where':{'id':_0x422ade[_0xd78f('0x1d')][_0xd78f('0x1e')]['id']},'include':[{'model':db[_0xd78f('0x1f')],'as':_0xd78f('0x20'),'attributes':['id'],'raw':!![]},{'model':db[_0xd78f('0x21')],'as':_0xd78f('0x22'),'attributes':['id'],'raw':!![]},{'model':db[_0xd78f('0x23')],'as':_0xd78f('0x24'),'attributes':['id'],'raw':!![]},{'model':db[_0xd78f('0x25')],'as':_0xd78f('0x26'),'attributes':['id'],'raw':!![]},{'model':db[_0xd78f('0x27')],'as':_0xd78f('0x28'),'attributes':['id'],'raw':!![]}]})[_0xd78f('0xa')](function(_0x3d8e87){if(_0x3d8e87){_0x1f6f87=_0x3d8e87;_0x422ade[_0x2bcd5e](util['format'](_0xd78f('0x1b'),_0x3d8e87[_0xd78f('0x3')]));var _0x53db0b=[];switch(_0x3d8e87[_0xd78f('0x6')]){case _0xd78f('0x29'):_0x422ade[_0x2bcd5e](_0xd78f('0x2a'));_0x422ade[_0x2bcd5e](_0xd78f('0x2b'));if(queryQueues[_0xd78f('0x2c')](_0xd78f('0x2d'))){delete queryQueues[_0xd78f('0x2d')];}_0x53db0b['push'](db['VoiceQueue'][_0xd78f('0x10')](queryQueues));_0x53db0b[_0xd78f('0x2e')](db[_0xd78f('0x2f')]['findAll'](queryQueues));_0x53db0b['push'](db[_0xd78f('0x30')][_0xd78f('0x10')](queryQueues));_0x53db0b[_0xd78f('0x2e')](db['SmsQueue']['findAll'](queryQueues));_0x53db0b[_0xd78f('0x2e')](db[_0xd78f('0x31')][_0xd78f('0x10')](queryQueues));_0x53db0b['push'](db['OpenchannelQueue'][_0xd78f('0x10')](queryQueues));_0x53db0b[_0xd78f('0x2e')](db['User']['findAll'](queryTelephones));_0x53db0b[_0xd78f('0x2e')](db[_0xd78f('0x32')][_0xd78f('0x10')](queryTrunks));_0x53db0b[_0xd78f('0x2e')](db['Campaign'][_0xd78f('0x10')](queryCampaigns));_0x53db0b[_0xd78f('0x2e')](db[_0xd78f('0x5')][_0xd78f('0x10')](queryAgents));break;case _0xd78f('0x33'):_0x422ade[_0x2bcd5e](_0xd78f('0x2a'));_0x422ade[_0x2bcd5e](_0xd78f('0x2b'));_0x53db0b[_0xd78f('0x2e')](getAssociatedResources('VoiceQueues',_0x3d8e87[_0xd78f('0x1c')],_0xd78f('0x34')));_0x53db0b['push'](getAssociatedResources(_0xd78f('0xc'),_0x3d8e87[_0xd78f('0x1c')],_0xd78f('0x2f')));_0x53db0b[_0xd78f('0x2e')](getAssociatedResources(_0xd78f('0xd'),_0x3d8e87['userProfileId'],_0xd78f('0x30')));_0x53db0b[_0xd78f('0x2e')](getAssociatedResources(_0xd78f('0x35'),_0x3d8e87['userProfileId'],_0xd78f('0x36')));_0x53db0b[_0xd78f('0x2e')](getAssociatedResources(_0xd78f('0xe'),_0x3d8e87[_0xd78f('0x1c')],_0xd78f('0x31')));_0x53db0b[_0xd78f('0x2e')](getAssociatedResources(_0xd78f('0xf'),_0x3d8e87[_0xd78f('0x1c')],_0xd78f('0x37')));_0x53db0b[_0xd78f('0x2e')](getAssociatedResources(_0xd78f('0x38'),_0x3d8e87[_0xd78f('0x1c')],'User'));_0x53db0b[_0xd78f('0x2e')](getAssociatedResources(_0xd78f('0x11'),_0x3d8e87[_0xd78f('0x1c')],_0xd78f('0x32')));_0x53db0b[_0xd78f('0x2e')](getAssociatedResources(_0xd78f('0x12'),_0x3d8e87[_0xd78f('0x1c')],'Campaign'));_0x53db0b[_0xd78f('0x2e')](db['User'][_0xd78f('0x10')](queryAgents));break;case'agent':_0x422ade[_0x2bcd5e]('voice:inbound');_0x422ade[_0x2bcd5e](_0xd78f('0x2b'));_0x53db0b['push'](_0x3d8e87[_0xd78f('0x39')]({'attributes':['id','name']}));_0x53db0b[_0xd78f('0x2e')](_0x3d8e87['getChatQueues']({'attributes':['id','name']}));_0x53db0b[_0xd78f('0x2e')](_0x3d8e87[_0xd78f('0x3a')]({'attributes':['id','name']}));_0x53db0b[_0xd78f('0x2e')](_0x3d8e87[_0xd78f('0x3b')]({'attributes':['id','name']}));_0x53db0b['push'](_0x3d8e87['getMailQueues']({'attributes':['id',_0xd78f('0x3')]}));_0x53db0b[_0xd78f('0x2e')](_0x3d8e87[_0xd78f('0x3c')]({'attributes':['id','name']}));break;}return BPromise[_0xd78f('0x3d')](_0x53db0b);}})[_0xd78f('0xa')](function(_0x577567){if(_0x577567&&_0x577567[_0xd78f('0x1a')]){for(var _0x2fa692=0x0;_0x2fa692<_0x577567[_0xd78f('0x1a')];_0x2fa692+=0x1){for(var _0x32d720=0x0;_0x32d720<_0x577567[_0x2fa692]['length'];_0x32d720+=0x1){switch(_0x2fa692){case 0x0:joinOrLeaveQueues(_0x422ade,_0x2bcd5e,_0xd78f('0x3e'),_0x577567[_0x2fa692][_0x32d720]);break;case 0x1:joinOrLeaveQueues(_0x422ade,_0x2bcd5e,_0xd78f('0x3f'),_0x577567[_0x2fa692][_0x32d720]);break;case 0x2:joinOrLeaveQueues(_0x422ade,_0x2bcd5e,_0xd78f('0x40'),_0x577567[_0x2fa692][_0x32d720]);break;case 0x3:joinOrLeaveQueues(_0x422ade,_0x2bcd5e,_0xd78f('0x41'),_0x577567[_0x2fa692][_0x32d720]);break;case 0x4:joinOrLeaveQueues(_0x422ade,_0x2bcd5e,_0xd78f('0x42'),_0x577567[_0x2fa692][_0x32d720]);break;case 0x5:joinOrLeaveQueues(_0x422ade,_0x2bcd5e,_0xd78f('0x43'),_0x577567[_0x2fa692][_0x32d720]);break;case 0x6:_0x422ade[_0x2bcd5e](util['format'](_0xd78f('0x44'),_0x577567[_0x2fa692][_0x32d720][_0xd78f('0x3')]));break;case 0x7:_0x422ade[_0x2bcd5e](util[_0xd78f('0x19')]('trunk:%s',_0x577567[_0x2fa692][_0x32d720][_0xd78f('0x3')]));break;case 0x8:_0x422ade[_0x2bcd5e](util[_0xd78f('0x19')](_0xd78f('0x45'),_0x577567[_0x2fa692][_0x32d720][_0xd78f('0x8')],_0x577567[_0x2fa692][_0x32d720]['name']));break;case 0x9:_0x422ade[_0x2bcd5e](util['format']('user:%s',_0x577567[_0x2fa692][_0x32d720][_0xd78f('0x3')]));break;}}}}})[_0xd78f('0xa')](function(){if(_0x2bcd5e===_0xd78f('0x46')){var _0x4ea779=_['map'](_0x1f6f87['ChatInteractions'],'id');return _0x1f6f87['removeChatInteractions'](_0x4ea779)[_0xd78f('0xa')](function(){for(var _0x10e420=0x0;_0x10e420<_0x4ea779[_0xd78f('0x1a')];_0x10e420+=0x1){_0x556f9d[_0xd78f('0x47')](_0xd78f('0x48'),{'ChatInteractionId':Number(_0x4ea779[_0x10e420]),'UserId':Number(_0x1f6f87['id'])});}});}})[_0xd78f('0xa')](function(){if(_0x2bcd5e===_0xd78f('0x46')){var _0x383759=_[_0xd78f('0x14')](_0x1f6f87[_0xd78f('0x22')],'id');return _0x1f6f87['removeMailInteractions'](_0x383759)[_0xd78f('0xa')](function(){for(var _0x391070=0x0;_0x391070<_0x383759['length'];_0x391070+=0x1){_0x556f9d['emit'](_0xd78f('0x49'),{'MailInteractionId':Number(_0x383759[_0x391070]),'UserId':Number(_0x1f6f87['id'])});}});}})[_0xd78f('0xa')](function(){if(_0x2bcd5e===_0xd78f('0x46')){var _0x358016=_[_0xd78f('0x14')](_0x1f6f87[_0xd78f('0x24')],'id');return _0x1f6f87[_0xd78f('0x4a')](_0x358016)[_0xd78f('0xa')](function(){for(var _0x53cfcb=0x0;_0x53cfcb<_0x358016[_0xd78f('0x1a')];_0x53cfcb+=0x1){_0x556f9d[_0xd78f('0x47')](_0xd78f('0x4b'),{'FaxInteractionId':Number(_0x358016[_0x53cfcb]),'UserId':Number(_0x1f6f87['id'])});}});}})[_0xd78f('0xa')](function(){if(_0x2bcd5e==='leave'){var _0x350312=_['map'](_0x1f6f87[_0xd78f('0x26')],'id');return _0x1f6f87[_0xd78f('0x4c')](_0x350312)[_0xd78f('0xa')](function(){for(var _0x3a92b4=0x0;_0x3a92b4<_0x350312[_0xd78f('0x1a')];_0x3a92b4+=0x1){_0x556f9d['emit'](_0xd78f('0x4d'),{'SmsInteractionId':Number(_0x350312[_0x3a92b4]),'UserId':Number(_0x1f6f87['id'])});}});}})[_0xd78f('0xa')](function(){if(_0x2bcd5e===_0xd78f('0x46')){var _0x240ca1=_[_0xd78f('0x14')](_0x1f6f87[_0xd78f('0x28')],'id');return _0x1f6f87[_0xd78f('0x4e')](_0x240ca1)[_0xd78f('0xa')](function(){for(var _0x233c7f=0x0;_0x233c7f<_0x240ca1[_0xd78f('0x1a')];_0x233c7f+=0x1){_0x556f9d[_0xd78f('0x47')]('user_has_openchannel_interactions:remove',{'OpenchannelInteractionId':Number(_0x240ca1[_0x233c7f]),'UserId':Number(_0x1f6f87['id'])});}});}})[_0xd78f('0x4f')](function(_0x19b9ab){_0x422ade['log'](_0x19b9ab);});}}function onDisconnect(_0xbd584f,_0x51eadd){joinOrLeave(_0xbd584f,_0xd78f('0x46'),_0x51eadd);}function onConnect(_0x267823){joinOrLeave(_0x267823,'join');}exports['default']=function(_0x414f32){_0x414f32['on'](_0xd78f('0x50'),function(_0x558af7){_0x558af7[_0xd78f('0x51')](0x0);_0x558af7[_0xd78f('0x52')]=_0x558af7[_0xd78f('0x53')]['connection'][_0xd78f('0x54')]+':'+_0x558af7[_0xd78f('0x53')][_0xd78f('0x50')]['remotePort'];_0x558af7[_0xd78f('0x55')]=new Date();_0x558af7['log']=function(_0x1009ec){console['log'](_0xd78f('0x56')+_0x558af7[_0xd78f('0x57')][_0xd78f('0x3')]+'['+_0x558af7['address']+']',_0x1009ec);};_0x558af7['on'](_0xd78f('0x58'),function(){onDisconnect(_0x558af7,_0x414f32);_0x558af7[_0xd78f('0x59')](_0xd78f('0x5a'));});onConnect(_0x558af7);_0x558af7[_0xd78f('0x59')]('CONNECTED');});};
\ No newline at end of file
index 9ca7dc5..606455e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf068=['Openchannel','OpenchannelInteraction','request','EventManager','then','info','Trigger,\x20%s','error','code','catch','get','event','direction','find','UserId','name','interface','format','outgoingmessage','channel','opened','changed','closed','User','SIP/%s','default','length','hasOwnProperty','model','hook','callback','toLowerCase','condition','util','../../mysqldb','jayson/promise','http','Chat','ChatInteraction','afterCreate','newinteraction','afterUpdate','closedinteraction','newmessage','Sms','SmsInteraction','SmsMessage','Fax','FaxInteraction','Mail','MailInteraction'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xf068,0x87));var _0x8f06=function(_0x401a82,_0x52b981){_0x401a82=_0x401a82-0x0;var _0x53f3d4=_0xf068[_0x401a82];return _0x53f3d4;};'use strict';var util=require(_0x8f06('0x0'));var db=require(_0x8f06('0x1'))['db'];var jayson=require(_0x8f06('0x2'));var logger=require('../logger')('triggers');var client=jayson['client'][_0x8f06('0x3')]({'port':0x232a});var triggers=[{'channel':_0x8f06('0x4'),'model':_0x8f06('0x5'),'event':_0x8f06('0x6'),'condition':_0x8f06('0x7'),'callback':afterCreate},{'channel':_0x8f06('0x4'),'model':_0x8f06('0x5'),'event':_0x8f06('0x8'),'condition':_0x8f06('0x9'),'callback':afterUpdate},{'channel':_0x8f06('0x4'),'model':'ChatMessage','event':_0x8f06('0x6'),'condition':_0x8f06('0xa'),'callback':afterCreateMessage},{'channel':'Sms','model':'SmsInteraction','event':'afterCreate','condition':_0x8f06('0x7'),'callback':afterCreate},{'channel':_0x8f06('0xb'),'model':_0x8f06('0xc'),'event':_0x8f06('0x8'),'condition':_0x8f06('0x9'),'callback':afterUpdate},{'channel':_0x8f06('0xb'),'model':_0x8f06('0xd'),'event':'afterCreate','condition':_0x8f06('0xa'),'callback':afterCreateMessage},{'channel':_0x8f06('0xe'),'model':_0x8f06('0xf'),'event':_0x8f06('0x6'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x8f06('0xe'),'model':_0x8f06('0xf'),'event':_0x8f06('0x8'),'condition':'closedinteraction','callback':afterUpdate},{'channel':'Fax','model':'FaxMessage','event':_0x8f06('0x6'),'condition':_0x8f06('0xa'),'callback':afterCreateMessage},{'channel':_0x8f06('0x10'),'model':_0x8f06('0x11'),'event':_0x8f06('0x6'),'condition':_0x8f06('0x7'),'callback':afterCreate},{'channel':_0x8f06('0x10'),'model':'MailInteraction','event':_0x8f06('0x8'),'condition':_0x8f06('0x9'),'callback':afterUpdate},{'channel':'Mail','model':'MailMessage','event':'afterCreate','condition':_0x8f06('0xa'),'callback':afterCreateMessage},{'channel':_0x8f06('0x12'),'model':_0x8f06('0x13'),'event':_0x8f06('0x6'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x8f06('0x12'),'model':'OpenchannelInteraction','event':_0x8f06('0x8'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x8f06('0x12'),'model':'OpenchannelMessage','event':_0x8f06('0x6'),'condition':'newmessage','callback':afterCreateMessage}];function request(_0x47cd53){return client[_0x8f06('0x14')](_0x8f06('0x15'),_0x47cd53)[_0x8f06('0x16')](function(_0xb7c6a1){logger[_0x8f06('0x17')](_0x8f06('0x18'),_0x8f06('0x15'),_0xb7c6a1);if(_0xb7c6a1['error']){if(_0xb7c6a1[_0x8f06('0x19')][_0x8f06('0x1a')]===0x1f4){logger[_0x8f06('0x19')](_0x8f06('0x18'),_0x8f06('0x15'),_0xb7c6a1[_0x8f06('0x19')]);}}})[_0x8f06('0x1b')](function(_0x494e00){logger['error'](_0x8f06('0x18'),'EventManager',_0x494e00);});}function afterCreateMessage(_0x179ffe,_0x48d9dd){return function(_0x53156e,_0x481c4a){_0x53156e=_0x53156e[_0x8f06('0x1c')]({'plain':!![]});_0x53156e['channel']=_0x179ffe;_0x53156e[_0x8f06('0x1d')]=_0x53156e[_0x8f06('0x1e')];if(_0x53156e['UserId']){return db['User'][_0x8f06('0x1f')]({'where':{'id':_0x53156e[_0x8f06('0x20')]},'attributes':['id',_0x8f06('0x21')],'raw':!![]})[_0x8f06('0x16')](function(_0x4bfd51){_0x53156e[_0x8f06('0x22')]=util[_0x8f06('0x23')]('SIP/%s',_0x4bfd51[_0x8f06('0x21')]);_0x53156e['channel']=_0x179ffe;return request({'event':'incomingmessage','message':_0x53156e});})[_0x8f06('0x1b')](function(_0x8e2b33){console[_0x8f06('0x19')](_0x8e2b33);});}else{return request({'event':_0x8f06('0x24'),'message':_0x53156e});}};}function afterCreate(_0x561e6e,_0x1a97d7){return function(_0x2540a2,_0x4e5dae){_0x2540a2=_0x2540a2[_0x8f06('0x1c')]({'plain':!![]});_0x2540a2[_0x8f06('0x25')]=_0x561e6e;_0x2540a2['event']=_0x8f06('0x26');return request({'event':_0x1a97d7,'message':_0x2540a2});};}function afterUpdate(_0x3d5653,_0x1233f7){return function(_0x501156,_0x3cd141){if(_0x501156[_0x8f06('0x27')](_0x8f06('0x28'))&&_0x501156[_0x8f06('0x28')]){_0x501156=_0x501156[_0x8f06('0x1c')]({'plain':!![]});_0x501156['channel']=_0x3d5653;_0x501156[_0x8f06('0x1d')]=_0x8f06('0x28');if(_0x501156[_0x8f06('0x20')]){return db[_0x8f06('0x29')][_0x8f06('0x1f')]({'where':{'id':_0x501156[_0x8f06('0x20')]},'attributes':['id','name'],'raw':!![]})[_0x8f06('0x16')](function(_0x19989c){_0x501156[_0x8f06('0x22')]=util['format'](_0x8f06('0x2a'),_0x19989c[_0x8f06('0x21')]);return request({'event':_0x1233f7,'message':_0x501156});})['catch'](function(_0x437c94){console['error'](_0x437c94);});}else{return request({'event':_0x1233f7,'message':_0x501156});}}};}exports[_0x8f06('0x2b')]=function(){for(var _0x1767e9=0x0;_0x1767e9<triggers[_0x8f06('0x2c')];_0x1767e9+=0x1){if(db[_0x8f06('0x2d')](triggers[_0x1767e9][_0x8f06('0x2e')])){db[triggers[_0x1767e9]['model']][_0x8f06('0x2f')](triggers[_0x1767e9]['event'],triggers[_0x1767e9][_0x8f06('0x30')](triggers[_0x1767e9][_0x8f06('0x25')][_0x8f06('0x31')](),triggers[_0x1767e9][_0x8f06('0x32')]));}}};
\ No newline at end of file
+var _0x0b88=['find','name','interface','format','SIP/%s','outgoingmessage','opened','changed','User','catch','hasOwnProperty','model','hook','callback','condition','util','../../mysqldb','jayson/promise','../logger','triggers','http','Chat','ChatInteraction','afterCreate','newinteraction','afterUpdate','closedinteraction','Sms','SmsInteraction','newmessage','Fax','FaxInteraction','FaxMessage','Mail','MailInteraction','MailMessage','Openchannel','OpenchannelInteraction','OpenchannelMessage','request','EventManager','then','info','Trigger,\x20%s','error','code','get','channel','event','direction','UserId'];(function(_0x292f5a,_0x1633c6){var _0x25cfd9=function(_0x45ebac){while(--_0x45ebac){_0x292f5a['push'](_0x292f5a['shift']());}};_0x25cfd9(++_0x1633c6);}(_0x0b88,0x1a7));var _0x80b8=function(_0x1f2494,_0xd496be){_0x1f2494=_0x1f2494-0x0;var _0x3a6bef=_0x0b88[_0x1f2494];return _0x3a6bef;};'use strict';var util=require(_0x80b8('0x0'));var db=require(_0x80b8('0x1'))['db'];var jayson=require(_0x80b8('0x2'));var logger=require(_0x80b8('0x3'))(_0x80b8('0x4'));var client=jayson['client'][_0x80b8('0x5')]({'port':0x232a});var triggers=[{'channel':_0x80b8('0x6'),'model':_0x80b8('0x7'),'event':_0x80b8('0x8'),'condition':_0x80b8('0x9'),'callback':afterCreate},{'channel':_0x80b8('0x6'),'model':_0x80b8('0x7'),'event':_0x80b8('0xa'),'condition':_0x80b8('0xb'),'callback':afterUpdate},{'channel':'Chat','model':'ChatMessage','event':_0x80b8('0x8'),'condition':'newmessage','callback':afterCreateMessage},{'channel':_0x80b8('0xc'),'model':'SmsInteraction','event':_0x80b8('0x8'),'condition':'newinteraction','callback':afterCreate},{'channel':_0x80b8('0xc'),'model':_0x80b8('0xd'),'event':_0x80b8('0xa'),'condition':_0x80b8('0xb'),'callback':afterUpdate},{'channel':_0x80b8('0xc'),'model':'SmsMessage','event':'afterCreate','condition':_0x80b8('0xe'),'callback':afterCreateMessage},{'channel':_0x80b8('0xf'),'model':_0x80b8('0x10'),'event':_0x80b8('0x8'),'condition':_0x80b8('0x9'),'callback':afterCreate},{'channel':_0x80b8('0xf'),'model':_0x80b8('0x10'),'event':_0x80b8('0xa'),'condition':_0x80b8('0xb'),'callback':afterUpdate},{'channel':'Fax','model':_0x80b8('0x11'),'event':_0x80b8('0x8'),'condition':_0x80b8('0xe'),'callback':afterCreateMessage},{'channel':_0x80b8('0x12'),'model':_0x80b8('0x13'),'event':_0x80b8('0x8'),'condition':_0x80b8('0x9'),'callback':afterCreate},{'channel':_0x80b8('0x12'),'model':'MailInteraction','event':'afterUpdate','condition':_0x80b8('0xb'),'callback':afterUpdate},{'channel':_0x80b8('0x12'),'model':_0x80b8('0x14'),'event':_0x80b8('0x8'),'condition':_0x80b8('0xe'),'callback':afterCreateMessage},{'channel':_0x80b8('0x15'),'model':'OpenchannelInteraction','event':_0x80b8('0x8'),'condition':_0x80b8('0x9'),'callback':afterCreate},{'channel':_0x80b8('0x15'),'model':_0x80b8('0x16'),'event':_0x80b8('0xa'),'condition':'closedinteraction','callback':afterUpdate},{'channel':_0x80b8('0x15'),'model':_0x80b8('0x17'),'event':'afterCreate','condition':_0x80b8('0xe'),'callback':afterCreateMessage}];function request(_0x15c45e){return client[_0x80b8('0x18')](_0x80b8('0x19'),_0x15c45e)[_0x80b8('0x1a')](function(_0x4e8e9b){logger[_0x80b8('0x1b')](_0x80b8('0x1c'),_0x80b8('0x19'),_0x4e8e9b);if(_0x4e8e9b[_0x80b8('0x1d')]){if(_0x4e8e9b[_0x80b8('0x1d')][_0x80b8('0x1e')]===0x1f4){logger['error'](_0x80b8('0x1c'),_0x80b8('0x19'),_0x4e8e9b[_0x80b8('0x1d')]);}}})['catch'](function(_0x1f5874){logger[_0x80b8('0x1d')](_0x80b8('0x1c'),_0x80b8('0x19'),_0x1f5874);});}function afterCreateMessage(_0x31132b,_0x2acb6c){return function(_0x21fe4f,_0x352597){_0x21fe4f=_0x21fe4f[_0x80b8('0x1f')]({'plain':!![]});_0x21fe4f[_0x80b8('0x20')]=_0x31132b;_0x21fe4f[_0x80b8('0x21')]=_0x21fe4f[_0x80b8('0x22')];if(_0x21fe4f[_0x80b8('0x23')]){return db['User'][_0x80b8('0x24')]({'where':{'id':_0x21fe4f['UserId']},'attributes':['id',_0x80b8('0x25')],'raw':!![]})[_0x80b8('0x1a')](function(_0x48468a){_0x21fe4f[_0x80b8('0x26')]=util[_0x80b8('0x27')](_0x80b8('0x28'),_0x48468a['name']);_0x21fe4f[_0x80b8('0x20')]=_0x31132b;return request({'event':'incomingmessage','message':_0x21fe4f});})['catch'](function(_0x15dffc){console[_0x80b8('0x1d')](_0x15dffc);});}else{return request({'event':_0x80b8('0x29'),'message':_0x21fe4f});}};}function afterCreate(_0x5bfb9c,_0x39e05a){return function(_0x8ed781,_0x1b900e){_0x8ed781=_0x8ed781['get']({'plain':!![]});_0x8ed781[_0x80b8('0x20')]=_0x5bfb9c;_0x8ed781['event']=_0x80b8('0x2a');return request({'event':_0x39e05a,'message':_0x8ed781});};}function afterUpdate(_0x4e80f5,_0x533e79){return function(_0x3955c8,_0x405b8d){if(_0x3955c8[_0x80b8('0x2b')]('closed')&&_0x3955c8['closed']){_0x3955c8=_0x3955c8[_0x80b8('0x1f')]({'plain':!![]});_0x3955c8[_0x80b8('0x20')]=_0x4e80f5;_0x3955c8[_0x80b8('0x21')]='closed';if(_0x3955c8['UserId']){return db[_0x80b8('0x2c')][_0x80b8('0x24')]({'where':{'id':_0x3955c8[_0x80b8('0x23')]},'attributes':['id',_0x80b8('0x25')],'raw':!![]})['then'](function(_0x24c3df){_0x3955c8[_0x80b8('0x26')]=util[_0x80b8('0x27')](_0x80b8('0x28'),_0x24c3df[_0x80b8('0x25')]);return request({'event':_0x533e79,'message':_0x3955c8});})[_0x80b8('0x2d')](function(_0x1d949c){console[_0x80b8('0x1d')](_0x1d949c);});}else{return request({'event':_0x533e79,'message':_0x3955c8});}}};}exports['default']=function(){for(var _0x58adef=0x0;_0x58adef<triggers['length'];_0x58adef+=0x1){if(db[_0x80b8('0x2e')](triggers[_0x58adef][_0x80b8('0x2f')])){db[triggers[_0x58adef][_0x80b8('0x2f')]][_0x80b8('0x30')](triggers[_0x58adef]['event'],triggers[_0x58adef][_0x80b8('0x31')](triggers[_0x58adef][_0x80b8('0x20')]['toLowerCase'](),triggers[_0x58adef][_0x80b8('0x32')]));}}};
\ No newline at end of file
index 4faf24d..7e3b66e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2761=['toLowerCase','lodash','mail','chat','fax','sms','openchannel','exports'];(function(_0x33cfe0,_0x1734ac){var _0xb6710e=function(_0x27408e){while(--_0x27408e){_0x33cfe0['push'](_0x33cfe0['shift']());}};_0xb6710e(++_0x1734ac);}(_0x2761,0x1c1));var _0x1276=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x2761[_0x42cae2];return _0x5f256f;};'use strict';var _=require(_0x1276('0x0'));var channels=['voice',_0x1276('0x1'),_0x1276('0x2'),_0x1276('0x3'),_0x1276('0x4'),_0x1276('0x5')];module[_0x1276('0x6')]={'getChannels':function(){return channels;},'isValidChannel':function(_0x3913b7){_0x3913b7=_0x3913b7[_0x1276('0x7')]();return _['includes'](channels,_0x3913b7);}};
\ No newline at end of file
+var _0x002b=['fax','sms','exports','includes','lodash','voice','chat'];(function(_0x2687d4,_0x769bd8){var _0xa84ce1=function(_0x35b626){while(--_0x35b626){_0x2687d4['push'](_0x2687d4['shift']());}};_0xa84ce1(++_0x769bd8);}(_0x002b,0x138));var _0xb002=function(_0x5e8460,_0x2003b5){_0x5e8460=_0x5e8460-0x0;var _0x3d50fd=_0x002b[_0x5e8460];return _0x3d50fd;};'use strict';var _=require(_0xb002('0x0'));var channels=[_0xb002('0x1'),'mail',_0xb002('0x2'),_0xb002('0x3'),_0xb002('0x4'),'openchannel'];module[_0xb002('0x5')]={'getChannels':function(){return channels;},'isValidChannel':function(_0x1f7ae5){_0x1f7ae5=_0x1f7ae5['toLowerCase']();return _[_0xb002('0x6')](channels,_0x1f7ae5);}};
\ No newline at end of file
index b666ea8..0f8d25f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb293=['send','status'];(function(_0x2423b5,_0xe8c927){var _0x5191f4=function(_0x34e6c6){while(--_0x34e6c6){_0x2423b5['push'](_0x2423b5['shift']());}};_0x5191f4(++_0xe8c927);}(_0xb293,0x163));var _0x3b29=function(_0x1dd6e7,_0x1cda2b){_0x1dd6e7=_0x1dd6e7-0x0;var _0xb53aa4=_0xb293[_0x1dd6e7];return _0xb53aa4;};'use strict';module['exports'][0x194]=function pageNotFound(_0x11944a,_0x3b5d7a){var _0x2968d8='404';var _0x17c73c=0x194;var _0x5e7352={'status':_0x17c73c};_0x3b5d7a['status'](_0x5e7352[_0x3b29('0x0')]);_0x3b5d7a['render'](_0x2968d8,{},function(_0x46dd4c,_0x4fd306){if(_0x46dd4c){return _0x3b5d7a[_0x3b29('0x0')](_0x5e7352[_0x3b29('0x0')])['json'](_0x5e7352);}_0x3b5d7a[_0x3b29('0x1')](_0x4fd306);});};
\ No newline at end of file
+var _0xea56=['json','exports','404','status'];(function(_0x486a46,_0x12dd1c){var _0x1cf3d3=function(_0x6ae738){while(--_0x6ae738){_0x486a46['push'](_0x486a46['shift']());}};_0x1cf3d3(++_0x12dd1c);}(_0xea56,0xc1));var _0x6ea5=function(_0x2a0afb,_0x221e51){_0x2a0afb=_0x2a0afb-0x0;var _0x537b6b=_0xea56[_0x2a0afb];return _0x537b6b;};'use strict';module[_0x6ea5('0x0')][0x194]=function pageNotFound(_0x5f2ac3,_0x5776eb){var _0x3efed5=_0x6ea5('0x1');var _0x23da6d=0x194;var _0x4de661={'status':_0x23da6d};_0x5776eb['status'](_0x4de661[_0x6ea5('0x2')]);_0x5776eb['render'](_0x3efed5,{},function(_0x12a03f,_0x3dc716){if(_0x12a03f){return _0x5776eb['status'](_0x4de661[_0x6ea5('0x2')])[_0x6ea5('0x3')](_0x4de661);}_0x5776eb['send'](_0x3dc716);});};
\ No newline at end of file
diff --git a/server/migrations/2.3.91.js b/server/migrations/2.3.91.js
new file mode 100644 (file)
index 0000000..9d8f7ce
--- /dev/null
@@ -0,0 +1,171 @@
+'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, indexName) {
+    var _this = this;
+    this.sequence.enqueue(function() {
+        return _this.queryInterface
+            .addIndex(table, column, {
+                indexName: indexName
+            })
+            .then(function() {
+                logger.info('addIndex %s %s %s', table, column.join(','), indexName);
+            })
+            .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 REPORT CALL
+            migration.addColumn('report_call', 'sipcallid', {
+                type: Sequelize.STRING
+            });
+            // END REPORT CALL
+
+            // START FINAL
+            migration.final(resolve);
+            // END FINAL
+        });
+    },
+
+    down: function(queryInterface, Sequelize) {
+        // var migration = new Migration(queryInterface);
+    }
+};
\ No newline at end of file
index e214db0..88c8f1b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1619=['MailApplication','MailQueueReport','../api/mailQueueReport/mailQueueReport.model','../api/dashboard/dashboard.model','../api/dashboardItem/dashboardItem.model','FaxAccount','../api/faxAccount/faxAccount.model','FaxApplication','../api/faxApplication/faxApplication.model','FaxInteraction','../api/faxInteraction/faxInteraction.model','FaxMessage','../api/faxMessage/faxMessage.model','../api/faxQueue/faxQueue.model','FaxQueueReport','../api/faxQueueReport/faxQueueReport.model','../api/smsAccount/smsAccount.model','SmsApplication','../api/smsApplication/smsApplication.model','SmsInteraction','../api/smsInteraction/smsInteraction.model','SmsMessage','../api/smsMessage/smsMessage.model','../api/smsQueue/smsQueue.model','OpenchannelAccount','../api/openchannelAccount/openchannelAccount.model','OpenchannelApplication','OpenchannelInteraction','../api/openchannelInteraction/openchannelInteraction.model','OpenchannelMessage','../api/openchannelMessage/openchannelMessage.model','OpenchannelQueue','../api/openchannelQueue/openchannelQueue.model','ChatWebsite','../api/chatWebsite/chatWebsite.model','OpenchannelQueueReport','../api/openchannelQueueReport/openchannelQueueReport.model','../api/chatApplication/chatApplication.model','ChatInteraction','../api/chatInteraction/chatInteraction.model','ChatMessage','ChatOfflineMessage','../api/chatOfflineMessage/chatOfflineMessage.model','ChatQueue','../api/chatQueue/chatQueue.model','ChatGroup','../api/chatGroup/chatGroup.model','CmCompany','../api/cmCompany/cmCompany.model','CmContact','CmHopper','../api/cmHopper/cmHopper.model','CmHopperBlack','../api/cmHopperBlack/cmHopperBlack.model','../api/cmHopperFinal/cmHopperFinal.model','CmHopperHistory','../api/cmHopperHistory/cmHopperHistory.model','../api/reportAgentPreview/reportAgentPreview.model','CmCustomField','../api/cmCustomField/cmCustomField.model','Action','../api/action/action.model','Automation','../api/automation/automation.model','CannedAnswer','../api/cannedAnswer/cannedAnswer.model','../api/condition/condition.model','Interval','../api/interval/interval.model','Pause','../api/pause/pause.model','Cdr','../api/cdr/cdr.model','../api/voiceQueuesLog/voiceQueuesLog.model','Schedule','Sound','../api/sound/sound.model','Tag','../api/tag/tag.model','../api/template/template.model','Trigger','Variable','../api/variable/variable.model','Integration','../api/integration/integration.model','../api/integrationReport/integrationReport.model','AnalyticCustomReport','../api/analyticCustomReport/analyticCustomReport.model','AnalyticDefaultReport','../api/analyticDefaultReport/analyticDefaultReport.model','AnalyticMetric','../api/analyticMetric/analyticMetric.model','AnalyticFieldReport','../api/analyticFieldReport/analyticFieldReport.model','AnalyticTreeReport','../api/analyticTreeReport/analyticTreeReport.model','SalesforceAccount','../api/intSalesforceAccount/intSalesforceAccount.model','SalesforceConfiguration','../api/intSalesforceConfiguration/intSalesforceConfiguration.model','SugarcrmAccount','../api/intSugarcrmConfiguration/intSugarcrmConfiguration.model','SugarcrmField','../api/intSugarcrmField/intSugarcrmField.model','DeskAccount','../api/intDeskAccount/intDeskAccount.model','DeskConfiguration','DeskField','../api/intDeskField/intDeskField.model','ZohoAccount','../api/intZohoAccount/intZohoAccount.model','ZohoConfiguration','../api/intZohoConfiguration/intZohoConfiguration.model','../api/intZohoField/intZohoField.model','ZendeskAccount','../api/intZendeskAccount/intZendeskAccount.model','ZendeskConfiguration','../api/intZendeskConfiguration/intZendeskConfiguration.model','ZendeskField','../api/intZendeskField/intZendeskField.model','../api/intFreshdeskAccount/intFreshdeskAccount.model','FreshdeskConfiguration','../api/intFreshdeskConfiguration/intFreshdeskConfiguration.model','FreshdeskField','VtigerAccount','../api/intVtigerAccount/intVtigerAccount.model','VtigerField','../api/intVtigerField/intVtigerField.model','ServicenowAccount','../api/intServicenowAccount/intServicenowAccount.model','ServicenowConfiguration','../api/intServicenowConfiguration/intServicenowConfiguration.model','ServicenowField','Dynamics365Configuration','../api/intDynamics365Configuration/intDynamics365Configuration.model','Dynamics365Field','../api/intDynamics365Field/intDynamics365Field.model','Network','../api/network/network.model','../api/chatQueueReport/chatQueueReport.model','ChatInternalMessage','../api/chatInternalMessage/chatInternalMessage.model','JscriptyAnswerReport','../api/jscriptyAnswerReport/jscriptyAnswerReport.model','JscriptyQuestionReport','../api/jscriptyQuestionReport/jscriptyQuestionReport.model','../api/jscriptySessionReport/jscriptySessionReport.model','../api/smsQueueReport/smsQueueReport.model','SquareReport','SquareDetailsReport','JscriptyProject','../api/jscriptyProject/jscriptyProject.model','Setting','../api/setting/setting.model','SquareOdbc','../api/squareOdbc/squareOdbc.model','SquareProject','../api/squareProject/squareProject.model','../api/squareRecording/squareRecording.model','SquareMessage','../api/squareMessage/squareMessage.model','Team','License','../api/license/license.model','Campaign','Migration','Attachment','../api/attachment/attachment.model','Plugin','../api/plugin/plugin.model','MailTransferReport','../api/mailTransferReport/mailTransferReport.model','ChatTransferReport','../api/chatTransferReport/chatTransferReport.model','FaxTransferReport','../api/faxTransferReport/faxTransferReport.model','../api/openchannelTransferReport/openchannelTransferReport.model','SmsTransferReport','../api/smsTransferReport/smsTransferReport.model','CmList','VoicePrefix','../api/voicePrefix/voicePrefix.model','UserProfile','../api/userProfile/userProfile.model','UserProfileSection','../api/userProfileSection/userProfileSection.model','UserProfileResource','hasOne','VoiceMail','cascade','UserId','hasMany','VoiceRecording','Recordings','VoiceQueuesRt','Extensions','CmHopperFinal','HopperFinals','HopperHistory','ReportAgentPreview','ChatInteractions','MailInteractions','userProfileId','belongsToMany','Contacts','cm_user_has_contacts','Lists','cm_user_has_lists','MailInteraction','user_has_mail_interactions','user_has_chat_interactions','SmsInteractions','user_has_sms_interactions','OpenchannelInteractions','user_has_openchannel_interactions','VoiceQueues','ChatQueues','FaxQueues','SmsQueue','SmsQueues','user_has_voice_prefixes','ChatWebsites','user_has_chat_websites','FaxAccounts','MailAccount','MailAccounts','user_has_mail_accounts','OpenchannelAccounts','SmsAccount','SmsAccounts','user_has_sms_accounts','SpiedAgents','ChanSpyId','Applications','Sounds','moh_has_sounds','Members','VoiceQueueId','Hoppers','HopperHistories','JscriptySessionReport','JscriptySessions','belongsTo','TrunkId','TrunkBackupId','IntervalId','mandatoryDispositionPause','Agents','team_has_voice_queues','BlackLists','Messages','mailboxuser','QueueCalls','uniqueid','ContactId','MailServerIn','MailAccountId','Smtp','Dispositions','Answers','Interactions','List','ListId','Template','mandatoryDispositionPauseId','team_has_mail_queues','Teams','Account','Contact','Owner','mail_interaction_has_tags','Tags','ThroughTags','Users','MailInteractionId','Attachments','Interaction','restrict','TagId','Dashboard','DashboardItem','Items','Disposition','FaxAccountId','user_has_fax_accounts','FaxQueue','fax_interaction_has_tags','FaxInteractionId','AttachmentId','team_has_fax_queues','SmsAccountId','SmsInteractionId','sms_interaction_has_tags','SmsQueueId','OpenchannelAccountId','user_has_openchannel_accounts','OpenchannelQueueId','OpenchannelInteractionId','openchannel_interaction_has_tags','team_has_openchannel_queues','ChatWebsiteId','ProactiveActions','ChatApplication','Agent','Queue','ChatInteractionId','chat_interaction_has_tags','team_has_chat_queues','ChatGroupId','chat_group_has_users','ChatProactiveAction','Website','CompanyId','FaxInteractions','Company','cm_contact_has_tags','CampaignId','All','OneAll','AutomationAllId','Condition','Any','Actions','AutomationId','Intervals','SmsApplications','CustomReportId','Mohs','AllConditions','AllCondition','TriggerAllId','AnyConditions','AnyCondition','TriggerAnyId','TriggerId','Fields','DefaultReportId','MetricId','AccountId','SalesforceField','Subjects','SubjectId','Descriptions','FieldId','DescriptionId','Field','VariableId','Configurations','SugarcrmConfiguration','Subject','Description','int_desk_configuration_has_tags','ZohoField','int_zendesk_configuration_has_tags','FreshdeskAccount','int_freshdesk_configuration_has_tags','VtigerConfiguration','int_vtiger_configuration_has_tags','Dynamics365Account','ChatQueueReport','FromId','ToId','SmsQueueReport','ProjectId','user_has_square_projects','user_has_teams','MailQueues','team_has_sms_queues','OpenchannelQueues','HopperBlacks','SquareProjectId','campaigns_has_cm_lists','campaigns_has_cm_blacklists','FromAccount','FromAgent','ToUserId','ToAgent','ToMailQueueId','ToQueue','ToMailAccountId','FromChatWebsiteId','FromUserId','ToChatQueueId','ToAccount','FromFaxAccountId','ToFaxAccountId','OpenchannelTransferReport','FromOpenchannelAccountId','ToOpenchannelQueueId','ToSmsQueueId','ToSmsAccountId','UserProfileSections','Resources','sequelize','jstz','determine','xcall','mysql','utf8mb4','utf8','utf8_general_ci','defaultsDeep','motion2','xC@LL1234','127.0.0.1','name','options','sequelizeHistory','database','username','password','User','../api/user/user.model','VoiceChanSpy','../api/voiceChanSpy/voiceChanSpy.model','VoiceContext','import','../api/voiceContext/voiceContext.model','VoiceExtension','../api/voiceExtension/voiceExtension.model','VoiceMusicOnHold','VoiceQueue','../api/voiceRecording/voiceRecording.model','VoiceMailMessage','../api/voiceMailMessage/voiceMailMessage.model','VoiceCallReport','VoiceDialReport','../api/voiceDialReport/voiceDialReport.model','VoiceAgentReport','../api/voiceAgentReport/voiceAgentReport.model','VoiceQueueReport','MemberReport','../api/memberReport/memberReport.model','Trunk','../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/userMailQueue/userMailQueue.model','UserFaxQueue','../api/userFaxQueue/userFaxQueue.model','UserSmsQueue','../api/userSmsQueue/userSmsQueue.model','UserOpenchannelQueue','../api/userOpenchannelQueue/userOpenchannelQueue.model','../api/mailServerIn/mailServerIn.model','MailServerOut','../api/mailServerOut/mailServerOut.model','../api/mailAccount/mailAccount.model','MailQueue','../api/mailQueue/mailQueue.model','MailSubstatus','../api/mailInteraction/mailInteraction.model','MailMessage','../api/mailMessage/mailMessage.model'];(function(_0x739bf5,_0x50002d){var _0x36510b=function(_0x210c62){while(--_0x210c62){_0x739bf5['push'](_0x739bf5['shift']());}};_0x36510b(++_0x50002d);}(_0x1619,0x189));var _0x9161=function(_0x1c324d,_0x2daa7c){_0x1c324d=_0x1c324d-0x0;var _0x33347f=_0x1619[_0x1c324d];return _0x33347f;};'use strict';var path=require('path');var config=require('../config/environment');var Sequelize=require(_0x9161('0x0'));var _=require('lodash');var jstz=require(_0x9161('0x1'));var timezone=jstz[_0x9161('0x2')]();config[_0x9161('0x0')]=_['defaultsDeep'](config[_0x9161('0x0')],{'database':'motion2','username':_0x9161('0x3'),'password':'xC@LL1234','options':{'host':'127.0.0.1','port':0xcea,'dialect':_0x9161('0x4'),'dialectOptions':{'charset':_0x9161('0x5')},'logging':![],'timezone':timezone['name'](),'define':{'charset':_0x9161('0x6'),'collate':_0x9161('0x7')}}});config['sequelizeHistory']=_[_0x9161('0x8')](config['sequelizeHistory'],{'database':_0x9161('0x9'),'username':'xcall','password':_0x9161('0xa'),'options':{'host':_0x9161('0xb'),'port':0xcea,'dialect':_0x9161('0x4'),'dialectOptions':{'charset':_0x9161('0x5')},'logging':![],'timezone':timezone[_0x9161('0xc')](),'define':{'charset':_0x9161('0x6'),'collate':_0x9161('0x7')}}});var db={'Sequelize':Sequelize,'sequelize':new Sequelize(config['sequelize']['database'],config['sequelize']['username'],config[_0x9161('0x0')]['password'],config[_0x9161('0x0')][_0x9161('0xd')])};var dbH={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0x9161('0xe')][_0x9161('0xf')],config[_0x9161('0xe')][_0x9161('0x10')],config[_0x9161('0xe')][_0x9161('0x11')],config['sequelizeHistory'][_0x9161('0xd')])};db[_0x9161('0x12')]=db[_0x9161('0x0')]['import'](_0x9161('0x13'));db[_0x9161('0x14')]=db[_0x9161('0x0')]['import'](_0x9161('0x15'));db[_0x9161('0x16')]=db['sequelize'][_0x9161('0x17')](_0x9161('0x18'));db[_0x9161('0x19')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x1a'));db[_0x9161('0x1b')]=db['sequelize'][_0x9161('0x17')]('../api/voiceMusicOnHold/voiceMusicOnHold.model');db[_0x9161('0x1c')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/voiceQueue/voiceQueue.model');db['VoiceRecording']=db['sequelize'][_0x9161('0x17')](_0x9161('0x1d'));db['VoiceMail']=db['sequelize']['import']('../api/voiceMail/voiceMail.model');db[_0x9161('0x1e')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x1f'));db[_0x9161('0x20')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/voiceCallReport/voiceCallReport.model');db[_0x9161('0x21')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x22'));db[_0x9161('0x23')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x24'));db[_0x9161('0x25')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/voiceQueueReport/voiceQueueReport.model');db[_0x9161('0x26')]=db[_0x9161('0x0')]['import'](_0x9161('0x27'));db[_0x9161('0x28')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x29'));db[_0x9161('0x2a')]=db['sequelize'][_0x9161('0x17')](_0x9161('0x2b'));db[_0x9161('0x2c')]=db['sequelize'][_0x9161('0x17')](_0x9161('0x2d'));db[_0x9161('0x2e')]=db['sequelize'][_0x9161('0x17')](_0x9161('0x2f'));db[_0x9161('0x30')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x31'));db[_0x9161('0x32')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x33'));db[_0x9161('0x34')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x35'));db[_0x9161('0x36')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x37'));db[_0x9161('0x38')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x39'));db['MailServerIn']=db['sequelize']['import'](_0x9161('0x3a'));db[_0x9161('0x3b')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x3c'));db['MailAccount']=db[_0x9161('0x0')]['import'](_0x9161('0x3d'));db[_0x9161('0x3e')]=db[_0x9161('0x0')]['import'](_0x9161('0x3f'));db[_0x9161('0x40')]=db['sequelize'][_0x9161('0x17')]('../api/mailSubstatus/mailSubstatus.model');db['MailInteraction']=db[_0x9161('0x0')]['import'](_0x9161('0x41'));db[_0x9161('0x42')]=db['sequelize']['import'](_0x9161('0x43'));db[_0x9161('0x44')]=db['sequelize'][_0x9161('0x17')]('../api/mailApplication/mailApplication.model');db[_0x9161('0x45')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x46'));db['Dashboard']=db['sequelize'][_0x9161('0x17')](_0x9161('0x47'));db['DashboardItem']=db['sequelize'][_0x9161('0x17')](_0x9161('0x48'));db[_0x9161('0x49')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x4a'));db[_0x9161('0x4b')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x4c'));db[_0x9161('0x4d')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x4e'));db[_0x9161('0x4f')]=db[_0x9161('0x0')]['import'](_0x9161('0x50'));db['FaxQueue']=db[_0x9161('0x0')]['import'](_0x9161('0x51'));db[_0x9161('0x52')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x53'));db['SmsAccount']=db[_0x9161('0x0')]['import'](_0x9161('0x54'));db[_0x9161('0x55')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x56'));db[_0x9161('0x57')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x58'));db[_0x9161('0x59')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x5a'));db['SmsQueue']=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x5b'));db[_0x9161('0x5c')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x5d'));db[_0x9161('0x5e')]=db[_0x9161('0x0')]['import']('../api/openchannelApplication/openchannelApplication.model');db[_0x9161('0x5f')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x60'));db[_0x9161('0x61')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x62'));db[_0x9161('0x63')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x64'));db[_0x9161('0x65')]=db[_0x9161('0x0')]['import'](_0x9161('0x66'));db[_0x9161('0x67')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x68'));db['ChatApplication']=db['sequelize'][_0x9161('0x17')](_0x9161('0x69'));db[_0x9161('0x6a')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x6b'));db[_0x9161('0x6c')]=db[_0x9161('0x0')]['import']('../api/chatMessage/chatMessage.model');db[_0x9161('0x6d')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x6e'));db[_0x9161('0x6f')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x70'));db[_0x9161('0x71')]=db[_0x9161('0x0')]['import'](_0x9161('0x72'));db['ChatProactiveAction']=db['sequelize'][_0x9161('0x17')]('../api/chatProactiveAction/chatProactiveAction.model');db[_0x9161('0x73')]=db['sequelize']['import'](_0x9161('0x74'));db[_0x9161('0x75')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/cmContact/cmContact.model');db[_0x9161('0x76')]=db['sequelize'][_0x9161('0x17')](_0x9161('0x77'));db[_0x9161('0x78')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x79'));db['CmHopperFinal']=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x7a'));db[_0x9161('0x7b')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x7c'));db['ReportAgentPreview']=db['sequelize']['import'](_0x9161('0x7d'));db[_0x9161('0x7e')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x7f'));db[_0x9161('0x80')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x81'));db[_0x9161('0x82')]=db['sequelize']['import'](_0x9161('0x83'));db[_0x9161('0x84')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x85'));db['Disposition']=db[_0x9161('0x0')][_0x9161('0x17')]('../api/disposition/disposition.model');db['Condition']=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x86'));db[_0x9161('0x87')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x88'));db[_0x9161('0x89')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x8a'));db[_0x9161('0x8b')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x8c'));db['VoiceQueuesLog']=db[_0x9161('0x0')]['import'](_0x9161('0x8d'));db[_0x9161('0x8e')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/schedule/schedule.model');db[_0x9161('0x8f')]=db[_0x9161('0x0')]['import'](_0x9161('0x90'));db[_0x9161('0x91')]=db[_0x9161('0x0')]['import'](_0x9161('0x92'));db['Template']=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x93'));db[_0x9161('0x94')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/trigger/trigger.model');db[_0x9161('0x95')]=db['sequelize']['import'](_0x9161('0x96'));db[_0x9161('0x97')]=db[_0x9161('0x0')]['import'](_0x9161('0x98'));db['IntegrationReport']=db['sequelize']['import'](_0x9161('0x99'));db[_0x9161('0x9a')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x9b'));db[_0x9161('0x9c')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x9d'));db['AnalyticExtractedReport']=db[_0x9161('0x0')][_0x9161('0x17')]('../api/analyticExtractedReport/analyticExtractedReport.model');db[_0x9161('0x9e')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0x9f'));db[_0x9161('0xa0')]=db[_0x9161('0x0')]['import'](_0x9161('0xa1'));db[_0x9161('0xa2')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xa3'));db[_0x9161('0xa4')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xa5'));db[_0x9161('0xa6')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xa7'));db['SalesforceField']=db[_0x9161('0x0')][_0x9161('0x17')]('../api/intSalesforceField/intSalesforceField.model');db[_0x9161('0xa8')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/intSugarcrmAccount/intSugarcrmAccount.model');db['SugarcrmConfiguration']=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xa9'));db[_0x9161('0xaa')]=db[_0x9161('0x0')]['import'](_0x9161('0xab'));db[_0x9161('0xac')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xad'));db[_0x9161('0xae')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/intDeskConfiguration/intDeskConfiguration.model');db[_0x9161('0xaf')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xb0'));db[_0x9161('0xb1')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xb2'));db[_0x9161('0xb3')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xb4'));db['ZohoField']=db['sequelize']['import'](_0x9161('0xb5'));db[_0x9161('0xb6')]=db['sequelize']['import'](_0x9161('0xb7'));db[_0x9161('0xb8')]=db[_0x9161('0x0')]['import'](_0x9161('0xb9'));db[_0x9161('0xba')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xbb'));db['FreshdeskAccount']=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xbc'));db[_0x9161('0xbd')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xbe'));db[_0x9161('0xbf')]=db[_0x9161('0x0')]['import']('../api/intFreshdeskField/intFreshdeskField.model');db[_0x9161('0xc0')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xc1'));db['VtigerConfiguration']=db[_0x9161('0x0')]['import']('../api/intVtigerConfiguration/intVtigerConfiguration.model');db[_0x9161('0xc2')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xc3'));db[_0x9161('0xc4')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xc5'));db[_0x9161('0xc6')]=db[_0x9161('0x0')]['import'](_0x9161('0xc7'));db[_0x9161('0xc8')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/intServicenowField/intServicenowField.model');db['Dynamics365Account']=db['sequelize'][_0x9161('0x17')]('../api/intDynamics365Account/intDynamics365Account.model');db[_0x9161('0xc9')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xca'));db[_0x9161('0xcb')]=db['sequelize']['import'](_0x9161('0xcc'));db[_0x9161('0x97')]=db['sequelize'][_0x9161('0x17')](_0x9161('0x98'));db[_0x9161('0xcd')]=db[_0x9161('0x0')]['import'](_0x9161('0xce'));db['ChatQueueReport']=db[_0x9161('0x0')]['import'](_0x9161('0xcf'));db[_0x9161('0xd0')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xd1'));db[_0x9161('0xd2')]=db['sequelize']['import'](_0x9161('0xd3'));db[_0x9161('0xd4')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xd5'));db['JscriptySessionReport']=db['sequelize'][_0x9161('0x17')](_0x9161('0xd6'));db['SmsQueueReport']=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xd7'));db[_0x9161('0xd8')]=db[_0x9161('0x0')]['import']('../api/squareReport/squareReport.model');db[_0x9161('0xd9')]=db['sequelize'][_0x9161('0x17')]('../api/squareReportDetail/squareReportDetail.model');db[_0x9161('0xda')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xdb'));db[_0x9161('0xdc')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xdd'));db[_0x9161('0xde')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xdf'));db[_0x9161('0xe0')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xe1'));db['SquareRecording']=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xe2'));db[_0x9161('0xe3')]=db[_0x9161('0x0')]['import'](_0x9161('0xe4'));db[_0x9161('0xe5')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/team/team.model');db[_0x9161('0xe6')]=db[_0x9161('0x0')]['import'](_0x9161('0xe7'));db[_0x9161('0xe8')]=db[_0x9161('0x0')]['import']('../api/campaign/campaign.model');db[_0x9161('0xe9')]=db['sequelize'][_0x9161('0x17')]('../api/migration/migration.model');db[_0x9161('0xea')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xeb'));db[_0x9161('0xec')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xed'));db[_0x9161('0xee')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xef'));db[_0x9161('0xf0')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xf1'));db[_0x9161('0xf2')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xf3'));db['OpenchannelTransferReport']=db['sequelize'][_0x9161('0x17')](_0x9161('0xf4'));db[_0x9161('0xf5')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xf6'));db[_0x9161('0xf7')]=db['sequelize']['import']('../api/cmList/cmList.model');db[_0x9161('0xf8')]=db['sequelize'][_0x9161('0x17')](_0x9161('0xf9'));db[_0x9161('0xfa')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xfb'));db[_0x9161('0xfc')]=db[_0x9161('0x0')][_0x9161('0x17')](_0x9161('0xfd'));db[_0x9161('0xfe')]=db[_0x9161('0x0')][_0x9161('0x17')]('../api/userProfileResource/userProfileResource.model');db[_0x9161('0x12')][_0x9161('0xff')](db[_0x9161('0x100')],{'as':_0x9161('0x100'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x102')});db[_0x9161('0x12')][_0x9161('0x103')](db[_0x9161('0x104')],{'as':_0x9161('0x105'),'foreignKey':_0x9161('0x102')});db[_0x9161('0x12')][_0x9161('0x103')](db[_0x9161('0x2c')],{'as':_0x9161('0x106'),'foreignKey':_0x9161('0x102')});db['User'][_0x9161('0x103')](db['VoiceExtension'],{'as':_0x9161('0x107'),'onDelete':_0x9161('0x101'),'hooks':!![]});db[_0x9161('0x12')][_0x9161('0x103')](db[_0x9161('0x108')],{'as':_0x9161('0x109'),'foreignKey':_0x9161('0x102')});db[_0x9161('0x12')][_0x9161('0x103')](db[_0x9161('0x7b')],{'as':_0x9161('0x10a'),'foreignKey':_0x9161('0x102')});db[_0x9161('0x12')][_0x9161('0x103')](db[_0x9161('0x10b')],{'as':_0x9161('0x10b'),'foreignKey':'UserId'});db[_0x9161('0x12')][_0x9161('0x103')](db[_0x9161('0x5f')],{'as':'OpenchannelInteractions','foreignKey':_0x9161('0x102')});db['User'][_0x9161('0x103')](db[_0x9161('0x6a')],{'as':_0x9161('0x10c'),'foreignKey':'UserId'});db['User']['hasMany'](db['SmsInteraction'],{'as':'SmsInteractions','foreignKey':_0x9161('0x102')});db[_0x9161('0x12')][_0x9161('0x103')](db[_0x9161('0x4d')],{'as':'FaxInteractions','foreignKey':_0x9161('0x102')});db['User']['hasMany'](db['MailInteraction'],{'as':_0x9161('0x10d'),'foreignKey':'UserId'});db[_0x9161('0x12')]['belongsTo'](db[_0x9161('0xfa')],{'as':'UserProfile','foreignKey':_0x9161('0x10e')});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x71')],{'as':'Groups','through':'chat_group_has_users'});db[_0x9161('0x12')]['belongsToMany'](db[_0x9161('0x75')],{'as':_0x9161('0x110'),'through':_0x9161('0x111')});db[_0x9161('0x12')]['belongsToMany'](db[_0x9161('0xf7')],{'as':_0x9161('0x112'),'through':_0x9161('0x113')});db[_0x9161('0x12')]['belongsToMany'](db[_0x9161('0xe5')],{'through':'user_has_teams'});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x114')],{'as':_0x9161('0x10d'),'through':_0x9161('0x115')});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x6a')],{'as':_0x9161('0x10c'),'through':_0x9161('0x116')});db['User'][_0x9161('0x10f')](db[_0x9161('0x4d')],{'as':'FaxInteractions','through':'user_has_fax_interactions'});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x57')],{'as':_0x9161('0x117'),'through':_0x9161('0x118')});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x5f')],{'as':_0x9161('0x119'),'through':_0x9161('0x11a')});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x1c')],{'as':_0x9161('0x11b'),'through':_0x9161('0x2e'),'required':![]});db['User'][_0x9161('0x10f')](db[_0x9161('0x3e')],{'as':'MailQueues','through':_0x9161('0x32'),'required':![]});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x6f')],{'as':_0x9161('0x11c'),'through':_0x9161('0x30'),'required':![],'hooks':!![]});db['User']['belongsToMany'](db['FaxQueue'],{'as':_0x9161('0x11d'),'through':_0x9161('0x34'),'required':![]});db['User'][_0x9161('0x10f')](db[_0x9161('0x11e')],{'as':_0x9161('0x11f'),'through':_0x9161('0x36'),'required':![]});db[_0x9161('0x12')]['belongsToMany'](db[_0x9161('0x63')],{'as':'OpenchannelQueues','through':'UserOpenchannelQueue','required':![]});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0xf7')],{'through':_0x9161('0x113')});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0xf8')],{'as':'VoicePrefixes','through':_0x9161('0x120'),'required':![]});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x65')],{'as':_0x9161('0x121'),'through':_0x9161('0x122')});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x49')],{'as':_0x9161('0x123'),'through':'user_has_fax_accounts'});db['User'][_0x9161('0x10f')](db[_0x9161('0x124')],{'as':_0x9161('0x125'),'through':_0x9161('0x126')});db[_0x9161('0x12')][_0x9161('0x10f')](db['OpenchannelAccount'],{'as':_0x9161('0x127'),'through':'user_has_openchannel_accounts'});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0x128')],{'as':_0x9161('0x129'),'through':_0x9161('0x12a')});db[_0x9161('0x12')][_0x9161('0x10f')](db[_0x9161('0xe0')],{'as':'SquareProjects','through':'user_has_square_projects'});db[_0x9161('0x14')][_0x9161('0x103')](db['VoiceExtension'],{'as':_0x9161('0x12b'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x12c')});db[_0x9161('0x16')][_0x9161('0x103')](db['VoiceExtension'],{'onDelete':_0x9161('0x101')});db['VoiceExtension'][_0x9161('0x103')](db[_0x9161('0x19')],{'as':_0x9161('0x12d'),'onDelete':_0x9161('0x101')});db['VoiceMusicOnHold'][_0x9161('0x10f')](db[_0x9161('0x8f')],{'as':_0x9161('0x12e'),'through':_0x9161('0x12f')});db[_0x9161('0x1c')]['hasMany'](db[_0x9161('0x2c')],{'as':_0x9161('0x130'),'foreignKey':_0x9161('0x131')});db[_0x9161('0x1c')]['hasMany'](db[_0x9161('0x76')],{'as':_0x9161('0x132'),'foreignKey':'VoiceQueueId'});db['VoiceQueue'][_0x9161('0x103')](db[_0x9161('0x108')],{'as':_0x9161('0x109'),'foreignKey':'VoiceQueueId'});db[_0x9161('0x1c')][_0x9161('0x103')](db[_0x9161('0x7b')],{'as':_0x9161('0x133'),'foreignKey':_0x9161('0x131')});db[_0x9161('0x1c')][_0x9161('0x103')](db['ReportAgentPreview'],{'as':_0x9161('0x10b'),'foreignKey':'VoiceQueueId'});db[_0x9161('0x1c')][_0x9161('0x103')](db[_0x9161('0x78')],{'as':'HopperBlacks','foreignKey':_0x9161('0x131')});db['VoiceQueue'][_0x9161('0x103')](db[_0x9161('0x134')],{'as':_0x9161('0x135'),'foreignKey':_0x9161('0x131')});db['VoiceQueue'][_0x9161('0x136')](db[_0x9161('0x28')],{'as':_0x9161('0x28'),'foreignKey':_0x9161('0x137')});db['VoiceQueue'][_0x9161('0x136')](db[_0x9161('0x28')],{'as':'TrunkBackup','foreignKey':_0x9161('0x138')});db['VoiceQueue'][_0x9161('0x136')](db['Interval'],{'as':_0x9161('0x87'),'foreignKey':_0x9161('0x139')});db[_0x9161('0x1c')][_0x9161('0x136')](db[_0x9161('0x89')],{'as':_0x9161('0x13a'),'foreignKey':'mandatoryDispositionPauseId'});db[_0x9161('0x1c')]['belongsToMany'](db[_0x9161('0xf7')],{'as':_0x9161('0x112'),'through':'voice_queues_has_cm_lists'});db[_0x9161('0x1c')][_0x9161('0x10f')](db['User'],{'as':_0x9161('0x13b'),'through':'UserVoiceQueue'});db[_0x9161('0x1c')][_0x9161('0x10f')](db[_0x9161('0xe5')],{'as':'Teams','through':_0x9161('0x13c')});db[_0x9161('0x1c')][_0x9161('0x10f')](db[_0x9161('0xf7')],{'as':_0x9161('0x13d'),'through':'voice_queues_has_cm_blacklists'});db[_0x9161('0x104')]['belongsTo'](db[_0x9161('0x12')],{'as':_0x9161('0x12'),'foreignKey':_0x9161('0x102')});db[_0x9161('0x100')][_0x9161('0x103')](db['VoiceMailMessage'],{'as':_0x9161('0x13e'),'onDelete':_0x9161('0x101'),'foreignKey':'mailboxuser','sourceKey':'mailbox'});db[_0x9161('0x1e')]['belongsTo'](db['VoiceMail'],{'foreignKey':_0x9161('0x13f'),'targetKey':'mailbox'});db[_0x9161('0x20')][_0x9161('0x103')](db[_0x9161('0x25')],{'as':_0x9161('0x140'),'foreignKey':_0x9161('0x141'),'constraints':![]});db['VoiceCallReport'][_0x9161('0x103')](db[_0x9161('0x23')],{'as':'AgentReports','foreignKey':_0x9161('0x141'),'constraints':![]});db[_0x9161('0x20')][_0x9161('0x136')](db[_0x9161('0x12')],{'as':_0x9161('0x12'),'foreignKey':'UserId'});db['VoiceCallReport'][_0x9161('0x136')](db[_0x9161('0x75')],{'as':'Contact','foreignKey':_0x9161('0x142')});db[_0x9161('0x143')][_0x9161('0x136')](db[_0x9161('0x124')],{'as':_0x9161('0x124'),'foreignKey':_0x9161('0x144')});db[_0x9161('0x3b')]['belongsTo'](db[_0x9161('0x124')],{'as':'MailAccount','foreignKey':'MailAccountId'});db['MailAccount'][_0x9161('0xff')](db[_0x9161('0x143')],{'as':'Imap','onDelete':'cascade'});db[_0x9161('0x124')][_0x9161('0xff')](db['MailServerOut'],{'as':_0x9161('0x145'),'onDelete':_0x9161('0x101')});db[_0x9161('0x124')][_0x9161('0x103')](db['Disposition'],{'as':_0x9161('0x146'),'foreignKey':'MailAccountId'});db['MailAccount']['hasMany'](db[_0x9161('0x84')],{'as':_0x9161('0x147'),'foreignKey':_0x9161('0x144')});db[_0x9161('0x124')][_0x9161('0x103')](db[_0x9161('0x42')],{'as':_0x9161('0x13e'),'foreignKey':_0x9161('0x144')});db['MailAccount'][_0x9161('0x103')](db[_0x9161('0x114')],{'as':_0x9161('0x148')});db[_0x9161('0x124')]['hasMany'](db[_0x9161('0x44')],{'as':_0x9161('0x12d')});db['MailAccount'][_0x9161('0x136')](db['CmList'],{'as':_0x9161('0x149'),'foreignKey':_0x9161('0x14a')});db[_0x9161('0x124')][_0x9161('0x136')](db[_0x9161('0x14b')],{'as':_0x9161('0x14b'),'foreignKey':'TemplateId'});db[_0x9161('0x124')][_0x9161('0x136')](db['Pause'],{'as':_0x9161('0x13a'),'foreignKey':_0x9161('0x14c')});db[_0x9161('0x124')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x13b'),'through':'user_has_mail_accounts'});db[_0x9161('0x3e')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x13b'),'through':_0x9161('0x32')});db[_0x9161('0x3e')][_0x9161('0x10f')](db['Team'],{'through':_0x9161('0x14d'),'as':_0x9161('0x14e')});db['MailInteraction'][_0x9161('0x103')](db[_0x9161('0x42')],{'as':'Messages','onDelete':_0x9161('0x101'),'foreignKey':'MailInteractionId'});db[_0x9161('0x114')][_0x9161('0x136')](db['MailAccount'],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x144')});db[_0x9161('0x114')][_0x9161('0x136')](db['CmContact'],{'as':_0x9161('0x150'),'foreignKey':'ContactId'});db[_0x9161('0x114')]['belongsTo'](db['User'],{'as':_0x9161('0x151'),'foreignKey':_0x9161('0x102')});db[_0x9161('0x114')]['belongsToMany'](db[_0x9161('0x91')],{'through':_0x9161('0x152'),'as':_0x9161('0x153')});db[_0x9161('0x114')][_0x9161('0x10f')](db[_0x9161('0x91')],{'through':_0x9161('0x152'),'as':_0x9161('0x154')});db[_0x9161('0x114')][_0x9161('0x10f')](db['User'],{'as':_0x9161('0x155'),'through':_0x9161('0x115'),'foreignKey':_0x9161('0x156')});db[_0x9161('0x42')][_0x9161('0x103')](db[_0x9161('0xea')],{'as':_0x9161('0x157'),'onDelete':_0x9161('0x101')});db[_0x9161('0x42')][_0x9161('0x136')](db[_0x9161('0x12')],{'as':_0x9161('0x12')});db['MailMessage']['belongsTo'](db['CmContact'],{'onDelete':'cascade','as':_0x9161('0x150')});db[_0x9161('0x42')]['belongsTo'](db[_0x9161('0x114')],{'as':_0x9161('0x158'),'foreignKey':'MailInteractionId'});db['MailMessage'][_0x9161('0x136')](db['MailAccount'],{'as':'Account','foreignKey':_0x9161('0x144')});db[_0x9161('0x44')][_0x9161('0x136')](db[_0x9161('0x12')],{'onDelete':_0x9161('0x159')});db[_0x9161('0x44')][_0x9161('0x136')](db[_0x9161('0x3e')],{'onDelete':'restrict'});db[_0x9161('0x44')]['belongsTo'](db['MailAccount'],{'onDelete':_0x9161('0x159')});db['MailApplication'][_0x9161('0x136')](db['Interval'],{'onDelete':_0x9161('0x159'),'foreignKey':_0x9161('0x139')});db[_0x9161('0x44')][_0x9161('0x136')](db[_0x9161('0x91')],{'onDelete':_0x9161('0x159'),'foreignKey':_0x9161('0x15a')});db[_0x9161('0x45')][_0x9161('0x136')](db[_0x9161('0x124')],{});db[_0x9161('0x45')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':'List','foreignKey':_0x9161('0x14a')});db[_0x9161('0x45')]['belongsTo'](db[_0x9161('0x75')],{'as':_0x9161('0x150'),'foreignKey':'ContactId'});db['MailQueueReport'][_0x9161('0x136')](db[_0x9161('0x114')],{});db[_0x9161('0x45')][_0x9161('0x136')](db[_0x9161('0x42')],{});db[_0x9161('0x45')][_0x9161('0x136')](db['User'],{});db[_0x9161('0x45')][_0x9161('0x136')](db[_0x9161('0x3e')],{});db[_0x9161('0x15b')][_0x9161('0x103')](db[_0x9161('0x15c')],{'as':_0x9161('0x15d'),'onDelete':'cascade'});db[_0x9161('0x49')]['hasMany'](db[_0x9161('0x15e')],{'as':_0x9161('0x146'),'foreignKey':_0x9161('0x15f')});db[_0x9161('0x49')][_0x9161('0x103')](db[_0x9161('0x84')],{'as':_0x9161('0x147'),'foreignKey':_0x9161('0x15f')});db['FaxAccount']['hasMany'](db[_0x9161('0x4d')],{'as':'Interactions'});db[_0x9161('0x49')][_0x9161('0x103')](db[_0x9161('0x4b')],{'as':_0x9161('0x12d')});db[_0x9161('0x49')][_0x9161('0x103')](db['VoiceExtension'],{'as':'Exntensions','onDelete':_0x9161('0x101')});db['FaxAccount'][_0x9161('0x103')](db[_0x9161('0x4f')],{'as':_0x9161('0x13e')});db[_0x9161('0x49')][_0x9161('0x136')](db[_0x9161('0x28')],{'as':_0x9161('0x28')});db['FaxAccount'][_0x9161('0x136')](db['CmList'],{'as':_0x9161('0x149'),'foreignKey':_0x9161('0x14a')});db[_0x9161('0x49')][_0x9161('0x136')](db[_0x9161('0x89')],{'as':_0x9161('0x13a'),'foreignKey':_0x9161('0x14c')});db[_0x9161('0x49')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x13b'),'through':_0x9161('0x160')});db[_0x9161('0x4b')][_0x9161('0x136')](db[_0x9161('0x12')],{'onDelete':_0x9161('0x159')});db[_0x9161('0x4b')][_0x9161('0x136')](db[_0x9161('0x161')],{'onDelete':_0x9161('0x159')});db[_0x9161('0x4b')][_0x9161('0x136')](db['FaxAccount'],{'onDelete':'restrict'});db[_0x9161('0x4b')][_0x9161('0x136')](db[_0x9161('0x91')],{'onDelete':'restrict','foreignKey':_0x9161('0x15a')});db[_0x9161('0x4d')][_0x9161('0x103')](db['FaxMessage'],{'as':'Messages','onDelete':_0x9161('0x101'),'foreignKey':'FaxInteractionId'});db[_0x9161('0x4d')]['belongsTo'](db[_0x9161('0x49')],{'as':_0x9161('0x14f'),'foreignKey':'FaxAccountId'});db[_0x9161('0x4d')]['belongsTo'](db[_0x9161('0x75')],{'as':_0x9161('0x150'),'foreignKey':_0x9161('0x142')});db[_0x9161('0x4d')][_0x9161('0x136')](db[_0x9161('0x12')],{'as':_0x9161('0x151'),'foreignKey':'UserId'});db[_0x9161('0x4d')][_0x9161('0x10f')](db['Tag'],{'through':_0x9161('0x162'),'as':_0x9161('0x153')});db[_0x9161('0x4d')][_0x9161('0x10f')](db['Tag'],{'through':_0x9161('0x162'),'as':_0x9161('0x154')});db[_0x9161('0x4d')]['belongsToMany'](db[_0x9161('0x12')],{'as':_0x9161('0x155'),'through':'user_has_fax_interactions','foreignKey':_0x9161('0x163')});db[_0x9161('0x4f')][_0x9161('0x136')](db[_0x9161('0x12')],{'onDelete':'cascade','as':'User'});db[_0x9161('0x4f')][_0x9161('0x136')](db[_0x9161('0x4d')],{'as':_0x9161('0x158'),'foreignKey':_0x9161('0x163')});db[_0x9161('0x4f')][_0x9161('0x136')](db['CmContact'],{'onDelete':_0x9161('0x101'),'as':_0x9161('0x150')});db[_0x9161('0x4f')][_0x9161('0x136')](db[_0x9161('0xea')],{'as':_0x9161('0xea'),'foreignKey':_0x9161('0x164')});db[_0x9161('0x4f')][_0x9161('0x136')](db[_0x9161('0x49')],{'as':_0x9161('0x14f'),'foreignKey':'FaxAccountId'});db[_0x9161('0x161')]['belongsToMany'](db[_0x9161('0x12')],{'as':'Agents','through':_0x9161('0x34')});db[_0x9161('0x161')][_0x9161('0x10f')](db[_0x9161('0xe5')],{'through':_0x9161('0x165'),'as':_0x9161('0x14e')});db[_0x9161('0x52')][_0x9161('0x136')](db['FaxAccount'],{});db[_0x9161('0x52')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':_0x9161('0x149'),'foreignKey':_0x9161('0x14a')});db['FaxQueueReport']['belongsTo'](db['CmContact'],{'as':_0x9161('0x150'),'foreignKey':_0x9161('0x142')});db[_0x9161('0x52')][_0x9161('0x136')](db['FaxInteraction'],{});db[_0x9161('0x52')]['belongsTo'](db[_0x9161('0x4f')],{});db[_0x9161('0x52')]['belongsTo'](db[_0x9161('0x12')],{});db[_0x9161('0x52')][_0x9161('0x136')](db['FaxQueue'],{});db[_0x9161('0x128')][_0x9161('0x103')](db['Disposition'],{'as':_0x9161('0x146'),'foreignKey':_0x9161('0x166')});db[_0x9161('0x128')][_0x9161('0x103')](db['CannedAnswer'],{'as':'Answers','foreignKey':'SmsAccountId'});db[_0x9161('0x128')][_0x9161('0x103')](db[_0x9161('0x59')],{'as':_0x9161('0x13e'),'foreignKey':'SmsAccountId'});db[_0x9161('0x128')][_0x9161('0x103')](db[_0x9161('0x57')],{'as':_0x9161('0x148')});db[_0x9161('0x128')][_0x9161('0x103')](db[_0x9161('0x55')],{'as':_0x9161('0x12d')});db[_0x9161('0x128')][_0x9161('0x136')](db['CmList'],{'as':_0x9161('0x149'),'foreignKey':_0x9161('0x14a')});db['SmsAccount'][_0x9161('0x136')](db['Pause'],{'as':_0x9161('0x13a'),'foreignKey':_0x9161('0x14c')});db[_0x9161('0x128')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x13b'),'through':'user_has_sms_accounts'});db[_0x9161('0x55')]['belongsTo'](db[_0x9161('0x12')],{'onDelete':'restrict'});db[_0x9161('0x55')]['belongsTo'](db[_0x9161('0x11e')],{'onDelete':'restrict'});db['SmsApplication'][_0x9161('0x136')](db['SmsAccount'],{'onDelete':_0x9161('0x159')});db[_0x9161('0x55')][_0x9161('0x136')](db[_0x9161('0x87')],{'onDelete':_0x9161('0x159'),'foreignKey':_0x9161('0x139')});db[_0x9161('0x55')][_0x9161('0x136')](db['Tag'],{'onDelete':_0x9161('0x159'),'foreignKey':_0x9161('0x15a')});db[_0x9161('0x57')]['hasMany'](db[_0x9161('0x59')],{'as':_0x9161('0x13e'),'onDelete':'cascade','foreignKey':_0x9161('0x167')});db[_0x9161('0x57')][_0x9161('0x136')](db[_0x9161('0x128')],{'as':_0x9161('0x14f'),'foreignKey':'SmsAccountId'});db['SmsInteraction'][_0x9161('0x136')](db[_0x9161('0x75')],{'as':_0x9161('0x150'),'foreignKey':'ContactId'});db[_0x9161('0x57')]['belongsTo'](db[_0x9161('0x12')],{'as':_0x9161('0x151'),'foreignKey':_0x9161('0x102')});db[_0x9161('0x57')][_0x9161('0x10f')](db['Tag'],{'through':'sms_interaction_has_tags','as':'Tags'});db[_0x9161('0x57')][_0x9161('0x10f')](db['Tag'],{'through':_0x9161('0x168'),'as':'ThroughTags'});db[_0x9161('0x57')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x155'),'through':_0x9161('0x118'),'foreignKey':'SmsInteractionId'});db[_0x9161('0x59')][_0x9161('0x136')](db[_0x9161('0x12')],{'as':'User'});db[_0x9161('0x59')][_0x9161('0x136')](db['CmContact'],{'onDelete':_0x9161('0x101'),'as':_0x9161('0x150')});db[_0x9161('0x59')]['belongsTo'](db[_0x9161('0x57')],{'onDelete':_0x9161('0x101'),'as':'Interaction','foreignKey':_0x9161('0x167')});db[_0x9161('0x59')][_0x9161('0x136')](db[_0x9161('0x128')],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x166')});db['SmsQueue'][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x13b'),'through':_0x9161('0x36'),'foreignKey':_0x9161('0x169')});db['SmsQueue'][_0x9161('0x10f')](db[_0x9161('0xe5')],{'through':'team_has_sms_queues','as':'Teams'});db[_0x9161('0x5c')][_0x9161('0x103')](db[_0x9161('0x15e')],{'as':_0x9161('0x146'),'foreignKey':_0x9161('0x16a')});db[_0x9161('0x5c')][_0x9161('0x103')](db[_0x9161('0x84')],{'as':_0x9161('0x147'),'foreignKey':'OpenchannelAccountId'});db[_0x9161('0x5c')][_0x9161('0x103')](db[_0x9161('0x5f')],{'as':_0x9161('0x148'),'foreignKey':_0x9161('0x16a')});db['OpenchannelAccount']['hasMany'](db[_0x9161('0x61')],{'as':'Messages','foreignKey':_0x9161('0x16a')});db['OpenchannelAccount'][_0x9161('0x103')](db[_0x9161('0x5e')],{'as':_0x9161('0x12d'),'foreignKey':'OpenchannelAccountId'});db[_0x9161('0x5c')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':'List','foreignKey':_0x9161('0x14a')});db[_0x9161('0x5c')][_0x9161('0x136')](db[_0x9161('0x89')],{'as':_0x9161('0x13a'),'foreignKey':_0x9161('0x14c')});db[_0x9161('0x5c')]['belongsToMany'](db['User'],{'as':_0x9161('0x13b'),'through':_0x9161('0x16b')});db[_0x9161('0x5e')][_0x9161('0x136')](db[_0x9161('0x12')],{'onDelete':'restrict'});db[_0x9161('0x5e')][_0x9161('0x136')](db[_0x9161('0x63')],{'onDelete':_0x9161('0x159'),'foreignKey':_0x9161('0x16c')});db[_0x9161('0x5e')][_0x9161('0x136')](db['OpenchannelAccount'],{'onDelete':_0x9161('0x159'),'foreignKey':_0x9161('0x16a')});db[_0x9161('0x5e')][_0x9161('0x136')](db[_0x9161('0x87')],{'onDelete':_0x9161('0x159'),'foreignKey':'IntervalId'});db[_0x9161('0x5e')][_0x9161('0x136')](db[_0x9161('0x91')],{'onDelete':_0x9161('0x159'),'foreignKey':_0x9161('0x15a')});db[_0x9161('0x5f')][_0x9161('0x103')](db['OpenchannelMessage'],{'as':_0x9161('0x13e'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x16d')});db[_0x9161('0x5f')][_0x9161('0x136')](db[_0x9161('0x5c')],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x16a')});db['OpenchannelInteraction'][_0x9161('0x136')](db[_0x9161('0x75')],{'as':_0x9161('0x150'),'foreignKey':_0x9161('0x142')});db[_0x9161('0x5f')][_0x9161('0x136')](db['User'],{'as':'Owner','foreignKey':_0x9161('0x102')});db[_0x9161('0x5f')][_0x9161('0x10f')](db[_0x9161('0x91')],{'through':_0x9161('0x16e'),'as':_0x9161('0x153')});db['OpenchannelInteraction'][_0x9161('0x10f')](db['Tag'],{'through':_0x9161('0x16e'),'as':_0x9161('0x154')});db[_0x9161('0x5f')]['belongsToMany'](db[_0x9161('0x12')],{'as':'Users','through':_0x9161('0x11a'),'foreignKey':'OpenchannelInteractionId'});db['OpenchannelMessage'][_0x9161('0x136')](db['User'],{'onDelete':_0x9161('0x101'),'as':_0x9161('0x12')});db[_0x9161('0x61')][_0x9161('0x136')](db[_0x9161('0x75')],{'onDelete':_0x9161('0x101'),'as':_0x9161('0x150')});db[_0x9161('0x61')][_0x9161('0x136')](db['OpenchannelInteraction'],{'onDelete':_0x9161('0x101'),'as':_0x9161('0x158'),'foreignKey':_0x9161('0x16d')});db[_0x9161('0x61')][_0x9161('0x136')](db['Attachment'],{'as':'Attachment','foreignKey':_0x9161('0x164')});db[_0x9161('0x61')][_0x9161('0x136')](db['OpenchannelAccount'],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x16a')});db[_0x9161('0x63')][_0x9161('0x10f')](db['User'],{'as':_0x9161('0x13b'),'through':_0x9161('0x38'),'foreignKey':_0x9161('0x16c')});db[_0x9161('0x63')][_0x9161('0x10f')](db[_0x9161('0xe5')],{'through':_0x9161('0x16f'),'as':'Teams'});db[_0x9161('0x65')][_0x9161('0x103')](db[_0x9161('0x15e')],{'as':_0x9161('0x146'),'foreignKey':_0x9161('0x170')});db[_0x9161('0x65')][_0x9161('0x103')](db[_0x9161('0x84')],{'as':'Answers','foreignKey':_0x9161('0x170')});db['ChatWebsite'][_0x9161('0x103')](db['ChatProactiveAction'],{'as':_0x9161('0x171')});db[_0x9161('0x65')][_0x9161('0x103')](db[_0x9161('0x6a')],{'as':'Interactions'});db[_0x9161('0x65')][_0x9161('0x103')](db[_0x9161('0x172')],{'as':'Applications'});db[_0x9161('0x65')][_0x9161('0x103')](db[_0x9161('0x6c')],{'as':_0x9161('0x13e')});db[_0x9161('0x65')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':_0x9161('0x149'),'foreignKey':_0x9161('0x14a')});db[_0x9161('0x65')]['belongsTo'](db[_0x9161('0x87')],{'as':_0x9161('0x87'),'foreignKey':_0x9161('0x139')});db[_0x9161('0x65')]['belongsTo'](db[_0x9161('0x89')],{'as':_0x9161('0x13a'),'foreignKey':_0x9161('0x14c')});db[_0x9161('0x65')]['belongsToMany'](db['User'],{'as':_0x9161('0x13b'),'through':'user_has_chat_websites'});db[_0x9161('0x67')][_0x9161('0x136')](db[_0x9161('0x5c')],{});db[_0x9161('0x67')]['belongsTo'](db['CmList'],{'as':_0x9161('0x149'),'foreignKey':_0x9161('0x14a')});db[_0x9161('0x67')][_0x9161('0x136')](db['CmContact'],{'as':_0x9161('0x150'),'foreignKey':_0x9161('0x142')});db[_0x9161('0x67')]['belongsTo'](db[_0x9161('0x5f')],{});db['OpenchannelQueueReport'][_0x9161('0x136')](db['OpenchannelMessage'],{});db[_0x9161('0x67')][_0x9161('0x136')](db[_0x9161('0x12')],{});db[_0x9161('0x67')]['belongsTo'](db['OpenchannelQueue'],{});db[_0x9161('0x172')][_0x9161('0x136')](db[_0x9161('0x12')],{'as':_0x9161('0x173'),'foreignKey':'UserId','onDelete':_0x9161('0x159')});db[_0x9161('0x172')][_0x9161('0x136')](db['ChatQueue'],{'as':_0x9161('0x174'),'foreignKey':'ChatQueueId','onDelete':_0x9161('0x159')});db[_0x9161('0x172')][_0x9161('0x136')](db['ChatWebsite'],{'as':'Website','foreignKey':'ChatWebsiteId','onDelete':_0x9161('0x159')});db['ChatApplication'][_0x9161('0x136')](db[_0x9161('0x91')],{'onDelete':_0x9161('0x159'),'foreignKey':'TagId'});db[_0x9161('0x6a')][_0x9161('0x103')](db[_0x9161('0x6c')],{'as':_0x9161('0x13e'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x175')});db['ChatInteraction'][_0x9161('0x136')](db[_0x9161('0x65')],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x170')});db[_0x9161('0x6a')][_0x9161('0x136')](db[_0x9161('0x75')],{'as':_0x9161('0x150'),'foreignKey':'ContactId'});db[_0x9161('0x6a')][_0x9161('0x136')](db[_0x9161('0x12')],{'as':_0x9161('0x151'),'foreignKey':_0x9161('0x102')});db[_0x9161('0x6a')][_0x9161('0x10f')](db[_0x9161('0x91')],{'through':_0x9161('0x176'),'as':_0x9161('0x153')});db[_0x9161('0x6a')][_0x9161('0x10f')](db['Tag'],{'through':_0x9161('0x176'),'as':_0x9161('0x154')});db[_0x9161('0x6a')]['belongsToMany'](db[_0x9161('0x12')],{'as':_0x9161('0x155'),'through':_0x9161('0x116'),'foreignKey':_0x9161('0x175')});db[_0x9161('0x6c')][_0x9161('0x136')](db[_0x9161('0x12')],{'onDelete':_0x9161('0x101'),'as':_0x9161('0x12')});db['ChatMessage'][_0x9161('0x136')](db[_0x9161('0x75')],{'onDelete':_0x9161('0x101'),'as':'Contact','foreignKey':_0x9161('0x142')});db[_0x9161('0x6c')][_0x9161('0x136')](db[_0x9161('0x6a')],{'onDelete':_0x9161('0x101'),'as':_0x9161('0x158'),'foreignKey':_0x9161('0x175')});db['ChatMessage'][_0x9161('0x136')](db[_0x9161('0xea')],{'as':'Attachment','foreignKey':_0x9161('0x164')});db[_0x9161('0x6c')][_0x9161('0x136')](db[_0x9161('0x65')],{'as':'Account','foreignKey':_0x9161('0x170')});db[_0x9161('0x6d')][_0x9161('0x136')](db[_0x9161('0x75')],{'onDelete':_0x9161('0x101'),'as':'Contact','foreignKey':_0x9161('0x142')});db[_0x9161('0x6d')]['belongsTo'](db[_0x9161('0x65')],{'as':'Account','foreignKey':_0x9161('0x170')});db[_0x9161('0x6f')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':'Agents','through':_0x9161('0x30'),'hooks':!![]});db[_0x9161('0x6f')][_0x9161('0x10f')](db[_0x9161('0xe5')],{'through':_0x9161('0x177'),'as':'Teams'});db[_0x9161('0x71')][_0x9161('0x103')](db['ChatInternalMessage'],{'as':_0x9161('0x13e'),'foreignKey':_0x9161('0x178'),'onDelete':_0x9161('0x101')});db[_0x9161('0x71')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x130'),'through':_0x9161('0x179')});db[_0x9161('0x17a')]['belongsTo'](db[_0x9161('0x65')],{'as':_0x9161('0x17b'),'foreignKey':_0x9161('0x170')});db['CmCompany'][_0x9161('0x103')](db[_0x9161('0x75')],{'as':_0x9161('0x110'),'foreignKey':_0x9161('0x17c')});db[_0x9161('0x75')]['hasMany'](db['CmHopper'],{'as':_0x9161('0x132'),'foreignKey':_0x9161('0x142')});db[_0x9161('0x75')][_0x9161('0x103')](db[_0x9161('0x108')],{'as':'HopperFinals','foreignKey':_0x9161('0x142')});db['CmContact'][_0x9161('0x103')](db['CmHopperHistory'],{'as':_0x9161('0x133'),'foreignKey':_0x9161('0x142')});db[_0x9161('0x75')][_0x9161('0x103')](db[_0x9161('0x10b')],{'as':_0x9161('0x10b'),'foreignKey':_0x9161('0x142')});db[_0x9161('0x75')][_0x9161('0x103')](db[_0x9161('0x134')],{'as':_0x9161('0x135'),'foreignKey':_0x9161('0x142')});db['CmContact']['hasMany'](db[_0x9161('0x5f')],{'as':'OpenchannelInteractions','foreignKey':_0x9161('0x142'),'onDelete':_0x9161('0x159')});db['CmContact']['hasMany'](db['ChatInteraction'],{'as':_0x9161('0x10c'),'foreignKey':'ContactId','onDelete':'restrict'});db['CmContact'][_0x9161('0x103')](db[_0x9161('0x57')],{'as':_0x9161('0x117'),'foreignKey':_0x9161('0x142'),'onDelete':_0x9161('0x159')});db[_0x9161('0x75')][_0x9161('0x103')](db['FaxInteraction'],{'as':_0x9161('0x17d'),'foreignKey':_0x9161('0x142'),'onDelete':_0x9161('0x159')});db[_0x9161('0x75')][_0x9161('0x103')](db['MailInteraction'],{'as':_0x9161('0x10d'),'foreignKey':'ContactId','onDelete':_0x9161('0x159')});db[_0x9161('0x75')]['belongsTo'](db[_0x9161('0x73')],{'as':_0x9161('0x17e'),'foreignKey':'CompanyId'});db[_0x9161('0x75')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':_0x9161('0x149'),'foreignKey':_0x9161('0x14a'),'onDelete':_0x9161('0x101')});db[_0x9161('0x75')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':'Users','through':_0x9161('0x111')});db[_0x9161('0x75')][_0x9161('0x10f')](db['Tag'],{'as':_0x9161('0x153'),'through':_0x9161('0x17f')});db[_0x9161('0x75')][_0x9161('0x10f')](db[_0x9161('0x91')],{'through':_0x9161('0x17f'),'as':_0x9161('0x154')});db[_0x9161('0x76')][_0x9161('0x136')](db[_0x9161('0x75')],{'as':_0x9161('0x150'),'foreignKey':'ContactId','onDelete':_0x9161('0x101')});db[_0x9161('0x76')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':_0x9161('0x149'),'foreignKey':_0x9161('0x14a'),'onDelete':_0x9161('0x101')});db['CmHopper'][_0x9161('0x136')](db[_0x9161('0x12')],{'as':'Agent','foreignKey':_0x9161('0x102')});db[_0x9161('0x76')][_0x9161('0x136')](db[_0x9161('0x1c')],{'as':_0x9161('0x174'),'foreignKey':_0x9161('0x131'),'onDelete':'cascade'});db[_0x9161('0x76')][_0x9161('0x136')](db[_0x9161('0xe8')],{'as':_0x9161('0xe8'),'foreignKey':'CampaignId','onDelete':_0x9161('0x101')});db[_0x9161('0x76')][_0x9161('0x136')](db[_0x9161('0x12')],{'as':_0x9161('0x151'),'foreignKey':'OwnerId'});db[_0x9161('0x78')]['belongsTo'](db['CmContact'],{'as':'Contact','foreignKey':'ContactId','onDelete':_0x9161('0x101')});db[_0x9161('0x78')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':'List','foreignKey':_0x9161('0x14a'),'onDelete':_0x9161('0x101')});db[_0x9161('0x78')][_0x9161('0x136')](db[_0x9161('0x1c')],{'as':_0x9161('0x174'),'foreignKey':_0x9161('0x131'),'onDelete':_0x9161('0x101')});db[_0x9161('0x78')]['belongsTo'](db['Campaign'],{'as':'Campaign','foreignKey':_0x9161('0x180'),'onDelete':_0x9161('0x101')});db[_0x9161('0x82')][_0x9161('0x103')](db['Condition'],{'as':{'plural':_0x9161('0x181'),'singular':_0x9161('0x182')},'foreignKey':_0x9161('0x183'),'onDelete':_0x9161('0x101'),'hooks':!![]});db[_0x9161('0x82')][_0x9161('0x103')](db[_0x9161('0x184')],{'as':{'plural':_0x9161('0x185'),'singular':'OneAny'},'foreignKey':'AutomationAnyId','onDelete':'cascade','hooks':!![]});db['Automation']['hasMany'](db[_0x9161('0x80')],{'as':_0x9161('0x186'),'foreignKey':_0x9161('0x187'),'onDelete':_0x9161('0x101'),'hooks':!![]});db[_0x9161('0x87')]['hasMany'](db['Interval'],{'as':_0x9161('0x188'),'foreignKey':_0x9161('0x139'),'onDelete':_0x9161('0x101'),'hooks':!![],'required':![]});db[_0x9161('0x87')]['hasMany'](db[_0x9161('0x19')],{'as':_0x9161('0x107'),'foreignKey':_0x9161('0x139'),'onDelete':_0x9161('0x159')});db['Interval']['hasMany'](db[_0x9161('0x44')],{'as':'MailApplications','foreignKey':_0x9161('0x139')});db[_0x9161('0x87')][_0x9161('0x103')](db[_0x9161('0x172')],{'as':'ChatApplications','foreignKey':'IntervalId'});db[_0x9161('0x87')][_0x9161('0x103')](db[_0x9161('0x4b')],{'as':'FaxApplications','foreignKey':_0x9161('0x139')});db[_0x9161('0x87')][_0x9161('0x103')](db[_0x9161('0x55')],{'as':_0x9161('0x189'),'foreignKey':_0x9161('0x139')});db[_0x9161('0x8e')][_0x9161('0x136')](db[_0x9161('0x124')],{});db[_0x9161('0x8e')]['belongsTo'](db[_0x9161('0x9c')],{'foreignKey':'DefaultReportId'});db[_0x9161('0x8e')][_0x9161('0x136')](db['AnalyticCustomReport'],{'foreignKey':_0x9161('0x18a')});db[_0x9161('0x8f')]['belongsToMany'](db[_0x9161('0x1b')],{'as':_0x9161('0x18b'),'through':_0x9161('0x12f'),'onDelete':_0x9161('0x159')});db[_0x9161('0x91')][_0x9161('0x10f')](db['CmContact'],{'through':_0x9161('0x17f')});db[_0x9161('0x91')]['belongsToMany'](db[_0x9161('0x6a')],{'through':'chat_interaction_has_tags'});db[_0x9161('0x91')]['belongsToMany'](db[_0x9161('0x114')],{'through':_0x9161('0x152')});db[_0x9161('0x91')][_0x9161('0x10f')](db[_0x9161('0x57')],{'through':_0x9161('0x168')});db['Tag'][_0x9161('0x10f')](db['FaxInteraction'],{'through':_0x9161('0x162')});db[_0x9161('0x91')]['belongsToMany'](db['OpenchannelInteraction'],{'through':_0x9161('0x16e')});db[_0x9161('0x94')]['hasMany'](db[_0x9161('0x184')],{'as':{'plural':_0x9161('0x18c'),'singular':_0x9161('0x18d')},'foreignKey':_0x9161('0x18e'),'onDelete':_0x9161('0x101'),'hooks':!![]});db[_0x9161('0x94')][_0x9161('0x103')](db[_0x9161('0x184')],{'as':{'plural':_0x9161('0x18f'),'singular':_0x9161('0x190')},'foreignKey':_0x9161('0x191'),'onDelete':_0x9161('0x101'),'hooks':!![]});db[_0x9161('0x94')][_0x9161('0x103')](db[_0x9161('0x80')],{'as':'Actions','foreignKey':_0x9161('0x192'),'onDelete':_0x9161('0x101'),'hooks':!![]});db[_0x9161('0x9a')][_0x9161('0x103')](db[_0x9161('0xa0')],{'as':_0x9161('0x193'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x18a'),'hooks':!![]});db[_0x9161('0x9c')][_0x9161('0x103')](db['AnalyticFieldReport'],{'as':_0x9161('0x193'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x194')});db[_0x9161('0x9e')][_0x9161('0x103')](db[_0x9161('0xa0')],{'as':'Fields','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x195')});db[_0x9161('0xa0')]['belongsTo'](db['AnalyticMetric'],{'foreignKey':_0x9161('0x195')});db[_0x9161('0xa4')][_0x9161('0x103')](db[_0x9161('0xa6')],{'as':'Configurations','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x196')});db['SalesforceConfiguration'][_0x9161('0x103')](db[_0x9161('0x197')],{'as':_0x9161('0x198'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x199')});db[_0x9161('0xa6')][_0x9161('0x103')](db[_0x9161('0x197')],{'as':_0x9161('0x19a'),'onDelete':_0x9161('0x101'),'foreignKey':'DescriptionId'});db[_0x9161('0xa6')][_0x9161('0x103')](db[_0x9161('0x197')],{'as':_0x9161('0x193'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0xa6')][_0x9161('0x136')](db[_0x9161('0xa4')],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x196')});db['SalesforceField'][_0x9161('0x103')](db[_0x9161('0x197')],{'as':'Subject','foreignKey':'SubjectId'});db[_0x9161('0x197')][_0x9161('0x103')](db['SalesforceField'],{'as':'Description','foreignKey':_0x9161('0x19c')});db[_0x9161('0x197')]['hasMany'](db['SalesforceField'],{'as':_0x9161('0x19d'),'foreignKey':_0x9161('0x19b')});db['SalesforceField']['belongsTo'](db[_0x9161('0x95')],{'as':_0x9161('0x95'),'foreignKey':_0x9161('0x19e')});db[_0x9161('0xa8')]['hasMany'](db['SugarcrmConfiguration'],{'as':_0x9161('0x19f'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x196')});db['SugarcrmConfiguration']['hasMany'](db['SugarcrmField'],{'as':'Subjects','onDelete':'cascade','foreignKey':_0x9161('0x199')});db['SugarcrmConfiguration'][_0x9161('0x103')](db[_0x9161('0xaa')],{'as':_0x9161('0x19a'),'onDelete':'cascade','foreignKey':_0x9161('0x19c')});db['SugarcrmConfiguration'][_0x9161('0x103')](db[_0x9161('0xaa')],{'as':_0x9161('0x193'),'onDelete':_0x9161('0x101'),'foreignKey':'FieldId'});db[_0x9161('0x1a0')][_0x9161('0x136')](db[_0x9161('0xa8')],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x196')});db[_0x9161('0xaa')][_0x9161('0x103')](db[_0x9161('0xaa')],{'as':_0x9161('0x1a1'),'foreignKey':_0x9161('0x199')});db[_0x9161('0xaa')][_0x9161('0x103')](db['SugarcrmField'],{'as':_0x9161('0x1a2'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xaa')][_0x9161('0x103')](db[_0x9161('0xaa')],{'as':_0x9161('0x19d'),'foreignKey':_0x9161('0x19b')});db['SugarcrmField'][_0x9161('0x136')](db[_0x9161('0x95')],{'as':'Variable','foreignKey':_0x9161('0x19e')});db[_0x9161('0xac')]['hasMany'](db[_0x9161('0xae')],{'as':_0x9161('0x19f'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x196')});db[_0x9161('0xae')]['hasMany'](db['DeskField'],{'as':'Subjects','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x199')});db[_0x9161('0xae')][_0x9161('0x103')](db[_0x9161('0xaf')],{'as':_0x9161('0x19a'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xae')]['hasMany'](db[_0x9161('0xaf')],{'as':_0x9161('0x193'),'onDelete':_0x9161('0x101'),'foreignKey':'FieldId'});db[_0x9161('0xae')][_0x9161('0x136')](db[_0x9161('0xac')],{'as':_0x9161('0x14f'),'foreignKey':'AccountId'});db[_0x9161('0xae')]['belongsToMany'](db[_0x9161('0x91')],{'through':_0x9161('0x1a3')});db[_0x9161('0xaf')][_0x9161('0x103')](db[_0x9161('0xaf')],{'as':_0x9161('0x1a1'),'foreignKey':_0x9161('0x199')});db[_0x9161('0xaf')][_0x9161('0x103')](db['DeskField'],{'as':_0x9161('0x1a2'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xaf')][_0x9161('0x103')](db[_0x9161('0xaf')],{'as':'Field','foreignKey':'FieldId'});db[_0x9161('0xaf')]['belongsTo'](db[_0x9161('0x95')],{'as':_0x9161('0x95'),'foreignKey':'VariableId'});db['ZohoAccount'][_0x9161('0x103')](db['ZohoConfiguration'],{'as':'Configurations','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x196')});db[_0x9161('0xb3')][_0x9161('0x103')](db[_0x9161('0x1a4')],{'as':_0x9161('0x198'),'onDelete':_0x9161('0x101'),'foreignKey':'SubjectId'});db[_0x9161('0xb3')]['hasMany'](db['ZohoField'],{'as':'Descriptions','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xb3')]['hasMany'](db['ZohoField'],{'as':_0x9161('0x193'),'onDelete':_0x9161('0x101'),'foreignKey':'FieldId'});db[_0x9161('0xb3')][_0x9161('0x136')](db['ZohoAccount'],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x196')});db[_0x9161('0x1a4')][_0x9161('0x103')](db['ZohoField'],{'as':_0x9161('0x1a1'),'foreignKey':_0x9161('0x199')});db[_0x9161('0x1a4')][_0x9161('0x103')](db['ZohoField'],{'as':_0x9161('0x1a2'),'foreignKey':'DescriptionId'});db[_0x9161('0x1a4')][_0x9161('0x103')](db[_0x9161('0x1a4')],{'as':_0x9161('0x19d'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0x1a4')]['belongsTo'](db[_0x9161('0x95')],{'as':_0x9161('0x95'),'foreignKey':_0x9161('0x19e')});db[_0x9161('0xb6')]['hasMany'](db[_0x9161('0xb8')],{'as':'Configurations','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x196')});db['ZendeskConfiguration'][_0x9161('0x103')](db[_0x9161('0xba')],{'as':_0x9161('0x198'),'foreignKey':_0x9161('0x199')});db[_0x9161('0xb8')][_0x9161('0x103')](db[_0x9161('0xba')],{'as':_0x9161('0x19a'),'foreignKey':_0x9161('0x19c')});db['ZendeskConfiguration'][_0x9161('0x103')](db[_0x9161('0xba')],{'as':_0x9161('0x193'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0xb8')]['belongsTo'](db[_0x9161('0xb6')],{'as':'Account','foreignKey':'AccountId'});db['ZendeskConfiguration'][_0x9161('0x10f')](db['Tag'],{'through':_0x9161('0x1a5')});db[_0x9161('0xba')]['hasMany'](db[_0x9161('0xba')],{'as':_0x9161('0x1a1'),'foreignKey':_0x9161('0x199')});db[_0x9161('0xba')][_0x9161('0x103')](db[_0x9161('0xba')],{'as':_0x9161('0x1a2'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xba')][_0x9161('0x103')](db[_0x9161('0xba')],{'as':_0x9161('0x19d'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0xba')][_0x9161('0x136')](db[_0x9161('0x95')],{'as':'Variable','foreignKey':'VariableId'});db[_0x9161('0x1a6')][_0x9161('0x103')](db[_0x9161('0xbd')],{'as':_0x9161('0x19f'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x196')});db['FreshdeskConfiguration'][_0x9161('0x103')](db['FreshdeskField'],{'as':_0x9161('0x198'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x199')});db['FreshdeskConfiguration']['hasMany'](db[_0x9161('0xbf')],{'as':_0x9161('0x19a'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xbd')]['hasMany'](db[_0x9161('0xbf')],{'as':_0x9161('0x193'),'onDelete':'cascade','foreignKey':_0x9161('0x19b')});db[_0x9161('0xbd')][_0x9161('0x136')](db['FreshdeskAccount'],{'as':'Account','foreignKey':_0x9161('0x196')});db[_0x9161('0xbd')]['belongsToMany'](db[_0x9161('0x91')],{'through':_0x9161('0x1a7')});db[_0x9161('0xbf')][_0x9161('0x103')](db[_0x9161('0xbf')],{'as':_0x9161('0x1a1'),'foreignKey':_0x9161('0x199')});db[_0x9161('0xbf')]['hasMany'](db[_0x9161('0xbf')],{'as':_0x9161('0x1a2'),'foreignKey':_0x9161('0x19c')});db['FreshdeskField'][_0x9161('0x103')](db[_0x9161('0xbf')],{'as':_0x9161('0x19d'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0xbf')][_0x9161('0x136')](db[_0x9161('0x95')],{'as':_0x9161('0x95'),'foreignKey':_0x9161('0x19e')});db[_0x9161('0xc0')][_0x9161('0x103')](db['VtigerConfiguration'],{'as':_0x9161('0x19f'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x196')});db['VtigerConfiguration'][_0x9161('0x103')](db['VtigerField'],{'as':_0x9161('0x198'),'foreignKey':_0x9161('0x199')});db['VtigerConfiguration']['hasMany'](db[_0x9161('0xc2')],{'as':'Descriptions','foreignKey':_0x9161('0x19c')});db[_0x9161('0x1a8')][_0x9161('0x103')](db['VtigerField'],{'as':_0x9161('0x193'),'foreignKey':'FieldId'});db[_0x9161('0x1a8')][_0x9161('0x136')](db[_0x9161('0xc0')],{'as':'Account','foreignKey':_0x9161('0x196')});db[_0x9161('0x1a8')][_0x9161('0x10f')](db['Tag'],{'through':_0x9161('0x1a9')});db[_0x9161('0xc2')][_0x9161('0x103')](db[_0x9161('0xc2')],{'as':'Subject','foreignKey':_0x9161('0x199')});db[_0x9161('0xc2')][_0x9161('0x103')](db[_0x9161('0xc2')],{'as':_0x9161('0x1a2'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xc2')]['hasMany'](db['VtigerField'],{'as':_0x9161('0x19d'),'foreignKey':'FieldId'});db[_0x9161('0xc2')][_0x9161('0x136')](db[_0x9161('0x95')],{'as':_0x9161('0x95'),'foreignKey':'VariableId'});db[_0x9161('0xc4')][_0x9161('0x103')](db['ServicenowConfiguration'],{'as':_0x9161('0x19f'),'onDelete':_0x9161('0x101'),'foreignKey':'AccountId'});db[_0x9161('0xc6')][_0x9161('0x103')](db[_0x9161('0xc8')],{'as':_0x9161('0x198'),'foreignKey':'SubjectId'});db[_0x9161('0xc6')][_0x9161('0x103')](db[_0x9161('0xc8')],{'as':_0x9161('0x19a'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xc6')]['hasMany'](db[_0x9161('0xc8')],{'as':_0x9161('0x193'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0xc6')]['belongsTo'](db[_0x9161('0xc4')],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x196')});db[_0x9161('0xc8')][_0x9161('0x103')](db[_0x9161('0xc8')],{'as':_0x9161('0x1a1'),'foreignKey':_0x9161('0x199')});db[_0x9161('0xc8')][_0x9161('0x103')](db[_0x9161('0xc8')],{'as':_0x9161('0x1a2'),'foreignKey':_0x9161('0x19c')});db[_0x9161('0xc8')]['hasMany'](db[_0x9161('0xc8')],{'as':_0x9161('0x19d'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0xc8')][_0x9161('0x136')](db['Variable'],{'as':'Variable','foreignKey':'VariableId'});db[_0x9161('0x1aa')][_0x9161('0x103')](db[_0x9161('0xc9')],{'as':_0x9161('0x19f'),'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x196')});db[_0x9161('0xc9')][_0x9161('0x103')](db[_0x9161('0xcb')],{'as':'Subjects','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x199')});db['Dynamics365Configuration'][_0x9161('0x103')](db[_0x9161('0xcb')],{'as':_0x9161('0x19a'),'onDelete':'cascade','foreignKey':_0x9161('0x19c')});db[_0x9161('0xc9')][_0x9161('0x103')](db[_0x9161('0xcb')],{'as':'Fields','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0xc9')][_0x9161('0x136')](db[_0x9161('0x1aa')],{'as':_0x9161('0x14f'),'foreignKey':_0x9161('0x196')});db[_0x9161('0xcb')][_0x9161('0x103')](db[_0x9161('0xcb')],{'as':_0x9161('0x1a1'),'foreignKey':'SubjectId'});db['Dynamics365Field'][_0x9161('0x103')](db[_0x9161('0xcb')],{'as':_0x9161('0x1a2'),'foreignKey':_0x9161('0x19c')});db['Dynamics365Field'][_0x9161('0x103')](db[_0x9161('0xcb')],{'as':_0x9161('0x19d'),'foreignKey':_0x9161('0x19b')});db[_0x9161('0xcb')][_0x9161('0x136')](db[_0x9161('0x95')],{'as':_0x9161('0x95'),'foreignKey':_0x9161('0x19e')});db[_0x9161('0x1ab')][_0x9161('0x136')](db[_0x9161('0x65')],{});db[_0x9161('0x1ab')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':_0x9161('0x149'),'foreignKey':'ListId'});db[_0x9161('0x1ab')][_0x9161('0x136')](db[_0x9161('0x75')],{'as':_0x9161('0x150'),'foreignKey':_0x9161('0x142')});db[_0x9161('0x1ab')][_0x9161('0x136')](db['ChatInteraction'],{});db[_0x9161('0x1ab')][_0x9161('0x136')](db[_0x9161('0x6c')],{});db['ChatQueueReport'][_0x9161('0x136')](db[_0x9161('0x12')],{});db['ChatQueueReport']['belongsTo'](db['ChatQueue'],{});db['ChatInternalMessage'][_0x9161('0x136')](db[_0x9161('0x12')],{'onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x1ac')});db['ChatInternalMessage']['belongsTo'](db[_0x9161('0x12')],{'onDelete':'cascade','foreignKey':_0x9161('0x1ad')});db[_0x9161('0x134')]['hasMany'](db[_0x9161('0xd4')],{'foreignKey':'SessionId','onDelete':_0x9161('0x101')});db[_0x9161('0x134')][_0x9161('0x103')](db['JscriptyAnswerReport'],{'foreignKey':'SessionId','onDelete':_0x9161('0x101')});db[_0x9161('0x1ae')][_0x9161('0x136')](db[_0x9161('0x128')],{});db[_0x9161('0x1ae')][_0x9161('0x136')](db[_0x9161('0xf7')],{'as':_0x9161('0x149'),'foreignKey':'ListId'});db[_0x9161('0x1ae')][_0x9161('0x136')](db['CmContact'],{'as':_0x9161('0x150'),'foreignKey':'ContactId'});db[_0x9161('0x1ae')][_0x9161('0x136')](db[_0x9161('0x57')],{});db[_0x9161('0x1ae')][_0x9161('0x136')](db[_0x9161('0x59')],{});db['SmsQueueReport'][_0x9161('0x136')](db[_0x9161('0x12')],{});db[_0x9161('0x1ae')][_0x9161('0x136')](db['SmsQueue'],{});db['JscriptyProject'][_0x9161('0x103')](db[_0x9161('0x134')],{'foreignKey':_0x9161('0x1af')});db[_0x9161('0xda')][_0x9161('0x103')](db[_0x9161('0xd4')],{'foreignKey':'ProjectId'});db[_0x9161('0xda')]['hasMany'](db[_0x9161('0xd2')],{'foreignKey':_0x9161('0x1af')});db[_0x9161('0xe0')]['belongsToMany'](db[_0x9161('0x12')],{'as':'Users','through':_0x9161('0x1b0')});db[_0x9161('0xe5')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x13b'),'through':_0x9161('0x1b1')});db['Team'][_0x9161('0x10f')](db[_0x9161('0x1c')],{'through':_0x9161('0x13c'),'as':_0x9161('0x11b')});db[_0x9161('0xe5')]['belongsToMany'](db['MailQueue'],{'through':_0x9161('0x14d'),'as':_0x9161('0x1b2')});db[_0x9161('0xe5')][_0x9161('0x10f')](db[_0x9161('0x6f')],{'through':'team_has_chat_queues','as':_0x9161('0x11c')});db[_0x9161('0xe5')]['belongsToMany'](db[_0x9161('0x161')],{'through':'team_has_fax_queues','as':_0x9161('0x11d')});db[_0x9161('0xe5')][_0x9161('0x10f')](db[_0x9161('0x11e')],{'through':_0x9161('0x1b3'),'as':_0x9161('0x11f')});db[_0x9161('0xe5')]['belongsToMany'](db[_0x9161('0x63')],{'through':_0x9161('0x16f'),'as':_0x9161('0x1b4')});db[_0x9161('0xe8')][_0x9161('0x103')](db['CmHopper'],{'as':'Hoppers','foreignKey':_0x9161('0x180')});db[_0x9161('0xe8')]['hasMany'](db[_0x9161('0x108')],{'as':_0x9161('0x109'),'foreignKey':_0x9161('0x180')});db['Campaign'][_0x9161('0x103')](db[_0x9161('0x7b')],{'as':'HopperHistories','foreignKey':_0x9161('0x180')});db[_0x9161('0xe8')][_0x9161('0x103')](db[_0x9161('0x78')],{'as':_0x9161('0x1b5'),'foreignKey':_0x9161('0x180')});db[_0x9161('0xe8')]['belongsTo'](db[_0x9161('0x28')],{'as':_0x9161('0x28'),'foreignKey':'TrunkId'});db['Campaign'][_0x9161('0x136')](db[_0x9161('0x28')],{'as':'TrunkBackup','foreignKey':_0x9161('0x138')});db[_0x9161('0xe8')][_0x9161('0x136')](db['Interval'],{'as':_0x9161('0x87'),'foreignKey':_0x9161('0x139')});db[_0x9161('0xe8')][_0x9161('0x136')](db[_0x9161('0xe0')],{'as':_0x9161('0xe0'),'foreignKey':_0x9161('0x1b6')});db[_0x9161('0xe8')][_0x9161('0x10f')](db[_0x9161('0xf7')],{'as':_0x9161('0x112'),'through':_0x9161('0x1b7')});db['Campaign'][_0x9161('0x10f')](db[_0x9161('0xf7')],{'as':_0x9161('0x13d'),'through':_0x9161('0x1b8')});db['MailTransferReport']['belongsTo'](db[_0x9161('0x42')],{});db[_0x9161('0xee')][_0x9161('0x136')](db[_0x9161('0x114')],{});db[_0x9161('0xee')][_0x9161('0x136')](db[_0x9161('0x124')],{'foreignKey':'FromMailAccountId','as':_0x9161('0x1b9')});db[_0x9161('0xee')]['belongsTo'](db[_0x9161('0x12')],{'foreignKey':'FromUserId','as':_0x9161('0x1ba')});db['MailTransferReport'][_0x9161('0x136')](db['User'],{'foreignKey':_0x9161('0x1bb'),'as':_0x9161('0x1bc')});db[_0x9161('0xee')][_0x9161('0x136')](db[_0x9161('0x3e')],{'foreignKey':_0x9161('0x1bd'),'as':_0x9161('0x1be')});db[_0x9161('0xee')][_0x9161('0x136')](db[_0x9161('0x124')],{'foreignKey':_0x9161('0x1bf'),'as':'ToAccount'});db['ChatTransferReport']['belongsTo'](db[_0x9161('0x6c')],{});db[_0x9161('0xf0')][_0x9161('0x136')](db[_0x9161('0x6a')],{});db['ChatTransferReport'][_0x9161('0x136')](db[_0x9161('0x65')],{'foreignKey':_0x9161('0x1c0'),'as':_0x9161('0x1b9')});db[_0x9161('0xf0')][_0x9161('0x136')](db['User'],{'foreignKey':_0x9161('0x1c1'),'as':_0x9161('0x1ba')});db['ChatTransferReport'][_0x9161('0x136')](db[_0x9161('0x12')],{'foreignKey':_0x9161('0x1bb'),'as':_0x9161('0x1bc')});db[_0x9161('0xf0')][_0x9161('0x136')](db[_0x9161('0x6f')],{'foreignKey':_0x9161('0x1c2'),'as':_0x9161('0x1be')});db[_0x9161('0xf0')][_0x9161('0x136')](db[_0x9161('0x65')],{'foreignKey':'ToChatWebsiteId','as':_0x9161('0x1c3')});db[_0x9161('0xf2')]['belongsTo'](db['FaxMessage'],{});db[_0x9161('0xf2')][_0x9161('0x136')](db[_0x9161('0x4d')],{});db[_0x9161('0xf2')][_0x9161('0x136')](db['FaxAccount'],{'foreignKey':_0x9161('0x1c4'),'as':_0x9161('0x1b9')});db[_0x9161('0xf2')][_0x9161('0x136')](db[_0x9161('0x12')],{'foreignKey':_0x9161('0x1c1'),'as':_0x9161('0x1ba')});db['FaxTransferReport'][_0x9161('0x136')](db[_0x9161('0x12')],{'foreignKey':_0x9161('0x1bb'),'as':_0x9161('0x1bc')});db['FaxTransferReport'][_0x9161('0x136')](db[_0x9161('0x161')],{'foreignKey':'ToFaxQueueId','as':'ToQueue'});db[_0x9161('0xf2')][_0x9161('0x136')](db['FaxAccount'],{'foreignKey':_0x9161('0x1c5'),'as':'ToAccount'});db[_0x9161('0x1c6')][_0x9161('0x136')](db['OpenchannelMessage'],{});db[_0x9161('0x1c6')][_0x9161('0x136')](db[_0x9161('0x5f')],{});db[_0x9161('0x1c6')][_0x9161('0x136')](db[_0x9161('0x5c')],{'foreignKey':_0x9161('0x1c7'),'as':'FromAccount'});db[_0x9161('0x1c6')]['belongsTo'](db[_0x9161('0x12')],{'foreignKey':_0x9161('0x1c1'),'as':_0x9161('0x1ba')});db['OpenchannelTransferReport'][_0x9161('0x136')](db[_0x9161('0x12')],{'foreignKey':_0x9161('0x1bb'),'as':'ToAgent'});db['OpenchannelTransferReport']['belongsTo'](db[_0x9161('0x63')],{'foreignKey':_0x9161('0x1c8'),'as':'ToQueue'});db[_0x9161('0x1c6')][_0x9161('0x136')](db['OpenchannelAccount'],{'foreignKey':'ToOpenchannelAccountId','as':_0x9161('0x1c3')});db['SmsTransferReport'][_0x9161('0x136')](db[_0x9161('0x59')],{});db[_0x9161('0xf5')][_0x9161('0x136')](db[_0x9161('0x57')],{});db[_0x9161('0xf5')][_0x9161('0x136')](db[_0x9161('0x128')],{'foreignKey':'FromSmsAccountId','as':'FromAccount'});db['SmsTransferReport'][_0x9161('0x136')](db[_0x9161('0x12')],{'foreignKey':_0x9161('0x1c1'),'as':_0x9161('0x1ba')});db[_0x9161('0xf5')][_0x9161('0x136')](db[_0x9161('0x12')],{'foreignKey':_0x9161('0x1bb'),'as':_0x9161('0x1bc')});db[_0x9161('0xf5')][_0x9161('0x136')](db['SmsQueue'],{'foreignKey':_0x9161('0x1c9'),'as':_0x9161('0x1be')});db[_0x9161('0xf5')][_0x9161('0x136')](db[_0x9161('0x128')],{'foreignKey':_0x9161('0x1ca'),'as':_0x9161('0x1c3')});db[_0x9161('0xf7')][_0x9161('0x103')](db['Disposition'],{'as':_0x9161('0x146'),'foreignKey':_0x9161('0x14a')});db[_0x9161('0xf7')][_0x9161('0x103')](db[_0x9161('0x7e')],{'as':'CustomFields','foreignKey':_0x9161('0x14a')});db[_0x9161('0xf7')][_0x9161('0x103')](db[_0x9161('0x75')],{'as':'Contacts','onDelete':_0x9161('0x101'),'foreignKey':_0x9161('0x14a')});db[_0x9161('0xf7')][_0x9161('0x103')](db[_0x9161('0x108')],{'as':_0x9161('0x109'),'foreignKey':_0x9161('0x14a')});db[_0x9161('0xf7')][_0x9161('0x103')](db[_0x9161('0x7b')],{'as':'HopperHistory','foreignKey':_0x9161('0x14a')});db[_0x9161('0xf7')][_0x9161('0x103')](db['ReportAgentPreview'],{'as':_0x9161('0x10b'),'foreignKey':_0x9161('0x14a')});db[_0x9161('0xf7')][_0x9161('0x10f')](db[_0x9161('0x1c')],{'as':'Queues','through':'voice_queues_has_cm_lists'});db[_0x9161('0xf7')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x13b'),'through':_0x9161('0x113')});db[_0x9161('0xf8')][_0x9161('0x103')](db[_0x9161('0x19')],{'as':'Extensions','onDelete':_0x9161('0x159')});db[_0x9161('0xf8')][_0x9161('0x10f')](db[_0x9161('0x12')],{'as':_0x9161('0x13b'),'through':'user_has_voice_prefixes'});db[_0x9161('0xfa')][_0x9161('0x103')](db[_0x9161('0x12')],{'as':_0x9161('0x155'),'foreignKey':_0x9161('0x10e')});db[_0x9161('0xfa')][_0x9161('0x103')](db[_0x9161('0xfc')],{'as':_0x9161('0x1cb'),'foreignKey':'userProfileId','onDelete':'cascade'});db[_0x9161('0xfc')][_0x9161('0x103')](db[_0x9161('0xfe')],{'as':_0x9161('0x1cc'),'foreignKey':'sectionId','onDelete':'cascade'});module['exports']={'db':db,'dbH':dbH};
\ No newline at end of file
+var _0x145d=['../api/userProfileResource/userProfileResource.model','hasOne','cascade','hasMany','UserId','Extensions','HopperHistory','OpenchannelInteractions','ChatInteractions','SmsInteractions','FaxInteractions','MailInteractions','belongsTo','userProfileId','belongsToMany','Groups','Contacts','cm_user_has_lists','user_has_teams','user_has_mail_interactions','user_has_fax_interactions','user_has_sms_interactions','user_has_openchannel_interactions','VoiceQueues','MailQueues','ChatQueues','UserChatQueue','FaxQueues','SmsQueues','OpenchannelQueues','VoicePrefixes','user_has_voice_prefixes','ChatWebsite','ChatWebsites','user_has_chat_websites','FaxAccounts','user_has_fax_accounts','MailAccounts','user_has_mail_accounts','OpenchannelAccounts','user_has_sms_accounts','SquareProject','SquareProjects','user_has_square_projects','SpiedAgents','Applications','VoiceQueueId','Hoppers','HopperFinals','HopperHistories','TrunkBackupId','IntervalId','Pause','mandatoryDispositionPause','mandatoryDispositionPauseId','Teams','team_has_voice_queues','BlackLists','voice_queues_has_cm_blacklists','VoiceRecording','Messages','mailboxuser','mailbox','VoiceMailMessage','VoiceCallReport','QueueCalls','uniqueid','VoiceAgentReport','MailAccount','MailAccountId','Imap','Dispositions','Interactions','MailApplication','List','ListId','Agents','team_has_mail_queues','MailInteractionId','Contact','ContactId','Owner','mail_interaction_has_tags','Tags','ThroughTags','Users','Attachments','Interaction','Account','restrict','MailQueueReport','Dashboard','Items','FaxAccountId','Answers','FaxMessage','TagId','FaxInteractionId','fax_interaction_has_tags','SmsAccountId','sms_interaction_has_tags','SmsInteractionId','SmsQueueId','team_has_sms_queues','OpenchannelAccountId','OpenchannelMessage','OpenchannelQueueId','OpenchannelInteractionId','openchannel_interaction_has_tags','team_has_openchannel_queues','ChatWebsiteId','Queue','ChatQueueId','Website','ChatInteractionId','chat_interaction_has_tags','ChatGroupId','Members','JscriptySessions','cm_user_has_contacts','cm_contact_has_tags','CampaignId','All','OneAll','Any','AutomationAnyId','AutomationId','Intervals','MailApplications','ChatApplications','FaxApplications','DefaultReportId','CustomReportId','Sound','moh_has_sounds','AllConditions','AllCondition','AnyConditions','AnyCondition','TriggerAnyId','Actions','Fields','MetricId','Configurations','Subjects','Descriptions','FieldId','Subject','SubjectId','Description','DescriptionId','AccountId','Field','VariableId','DeskAccount','ZohoConfiguration','ZendeskConfiguration','ZendeskField','int_zendesk_configuration_has_tags','VtigerAccount','int_vtiger_configuration_has_tags','FromId','JscriptyQuestionReport','SessionId','SmsQueueReport','JscriptyProject','ProjectId','team_has_chat_queues','team_has_fax_queues','TrunkId','TrunkBackup','SquareProjectId','Lists','FromMailAccountId','FromAccount','FromAgent','ToUserId','ToAgent','ToMailQueueId','ToQueue','ToAccount','FromChatWebsiteId','FromUserId','ToChatQueueId','FaxTransferReport','FromFaxAccountId','ToFaxAccountId','OpenchannelTransferReport','FromOpenchannelAccountId','ToOpenchannelAccountId','SmsTransferReport','FromSmsAccountId','ToSmsQueueId','ToSmsAccountId','Queues','voice_queues_has_cm_lists','UserProfileSections','UserProfileResource','Resources','sectionId','exports','../config/environment','sequelize','lodash','jstz','defaultsDeep','xcall','127.0.0.1','mysql','utf8mb4','name','utf8_general_ci','sequelizeHistory','motion2','database','username','password','options','User','../api/user/user.model','VoiceChanSpy','import','VoiceContext','../api/voiceContext/voiceContext.model','VoiceExtension','../api/voiceExtension/voiceExtension.model','VoiceMusicOnHold','../api/voiceMusicOnHold/voiceMusicOnHold.model','VoiceQueue','../api/voiceQueue/voiceQueue.model','VoiceMail','../api/voiceMail/voiceMail.model','../api/voiceMailMessage/voiceMailMessage.model','../api/voiceCallReport/voiceCallReport.model','VoiceDialReport','../api/voiceDialReport/voiceDialReport.model','../api/voiceAgentReport/voiceAgentReport.model','VoiceQueueReport','../api/voiceQueueReport/voiceQueueReport.model','MemberReport','Trunk','../api/trunk/trunk.model','VoiceTransferReport','../api/voiceTransferReport/voiceTransferReport.model','UserVoiceQueueRt','UserVoiceQueue','../api/userChatQueue/userChatQueue.model','UserMailQueue','../api/userMailQueue/userMailQueue.model','UserFaxQueue','../api/userFaxQueue/userFaxQueue.model','UserSmsQueue','../api/userSmsQueue/userSmsQueue.model','UserOpenchannelQueue','../api/userOpenchannelQueue/userOpenchannelQueue.model','MailServerIn','../api/mailServerIn/mailServerIn.model','../api/mailAccount/mailAccount.model','MailQueue','../api/mailQueue/mailQueue.model','MailSubstatus','../api/mailSubstatus/mailSubstatus.model','MailInteraction','../api/mailInteraction/mailInteraction.model','MailMessage','../api/mailApplication/mailApplication.model','../api/mailQueueReport/mailQueueReport.model','../api/dashboard/dashboard.model','DashboardItem','../api/dashboardItem/dashboardItem.model','FaxAccount','FaxApplication','../api/faxApplication/faxApplication.model','FaxInteraction','../api/faxInteraction/faxInteraction.model','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','SmsMessage','SmsQueue','OpenchannelAccount','OpenchannelApplication','../api/openchannelApplication/openchannelApplication.model','OpenchannelInteraction','../api/openchannelInteraction/openchannelInteraction.model','OpenchannelQueue','../api/openchannelQueue/openchannelQueue.model','../api/chatWebsite/chatWebsite.model','OpenchannelQueueReport','ChatApplication','ChatInteraction','../api/chatInteraction/chatInteraction.model','ChatMessage','../api/chatMessage/chatMessage.model','ChatOfflineMessage','../api/chatOfflineMessage/chatOfflineMessage.model','ChatQueue','../api/chatQueue/chatQueue.model','ChatGroup','ChatProactiveAction','../api/chatProactiveAction/chatProactiveAction.model','CmCompany','../api/cmCompany/cmCompany.model','CmContact','CmHopper','../api/cmHopper/cmHopper.model','CmHopperBlack','../api/cmHopperBlack/cmHopperBlack.model','CmHopperFinal','CmHopperHistory','ReportAgentPreview','../api/reportAgentPreview/reportAgentPreview.model','CmCustomField','Action','../api/action/action.model','Automation','../api/automation/automation.model','CannedAnswer','../api/cannedAnswer/cannedAnswer.model','Disposition','../api/disposition/disposition.model','Condition','../api/condition/condition.model','Interval','../api/pause/pause.model','Cdr','VoiceQueuesLog','../api/voiceQueuesLog/voiceQueuesLog.model','Schedule','../api/schedule/schedule.model','../api/sound/sound.model','Tag','Template','Trigger','Variable','../api/variable/variable.model','Integration','IntegrationReport','../api/integrationReport/integrationReport.model','AnalyticCustomReport','../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','SalesforceConfiguration','../api/intSalesforceConfiguration/intSalesforceConfiguration.model','SalesforceField','../api/intSalesforceField/intSalesforceField.model','SugarcrmAccount','SugarcrmConfiguration','../api/intSugarcrmConfiguration/intSugarcrmConfiguration.model','SugarcrmField','DeskConfiguration','../api/intDeskConfiguration/intDeskConfiguration.model','DeskField','../api/intDeskField/intDeskField.model','ZohoAccount','../api/intZohoAccount/intZohoAccount.model','../api/intZohoConfiguration/intZohoConfiguration.model','ZohoField','../api/intZohoField/intZohoField.model','ZendeskAccount','../api/intZendeskAccount/intZendeskAccount.model','FreshdeskAccount','../api/intFreshdeskAccount/intFreshdeskAccount.model','FreshdeskConfiguration','../api/intFreshdeskConfiguration/intFreshdeskConfiguration.model','FreshdeskField','../api/intVtigerAccount/intVtigerAccount.model','VtigerConfiguration','../api/intVtigerConfiguration/intVtigerConfiguration.model','VtigerField','../api/intVtigerField/intVtigerField.model','ServicenowAccount','../api/intServicenowAccount/intServicenowAccount.model','ServicenowConfiguration','../api/intServicenowConfiguration/intServicenowConfiguration.model','ServicenowField','../api/intServicenowField/intServicenowField.model','Dynamics365Account','../api/intDynamics365Account/intDynamics365Account.model','Dynamics365Configuration','../api/intDynamics365Configuration/intDynamics365Configuration.model','Dynamics365Field','../api/intDynamics365Field/intDynamics365Field.model','../api/integration/integration.model','Network','../api/network/network.model','ChatQueueReport','../api/chatQueueReport/chatQueueReport.model','ChatInternalMessage','JscriptyAnswerReport','../api/jscriptyAnswerReport/jscriptyAnswerReport.model','../api/jscriptyQuestionReport/jscriptyQuestionReport.model','JscriptySessionReport','../api/jscriptySessionReport/jscriptySessionReport.model','../api/smsQueueReport/smsQueueReport.model','SquareReport','../api/squareReport/squareReport.model','SquareDetailsReport','Setting','../api/setting/setting.model','SquareOdbc','../api/squareProject/squareProject.model','SquareRecording','../api/squareRecording/squareRecording.model','SquareMessage','Team','../api/team/team.model','../api/license/license.model','Campaign','../api/campaign/campaign.model','../api/migration/migration.model','Attachment','../api/attachment/attachment.model','../api/plugin/plugin.model','MailTransferReport','../api/mailTransferReport/mailTransferReport.model','ChatTransferReport','../api/chatTransferReport/chatTransferReport.model','../api/faxTransferReport/faxTransferReport.model','../api/smsTransferReport/smsTransferReport.model','CmList','VoicePrefix','../api/voicePrefix/voicePrefix.model','UserProfile','../api/userProfile/userProfile.model','UserProfileSection','../api/userProfileSection/userProfileSection.model'];(function(_0x3f828f,_0x1f0eb1){var _0x503aa0=function(_0x4ec504){while(--_0x4ec504){_0x3f828f['push'](_0x3f828f['shift']());}};_0x503aa0(++_0x1f0eb1);}(_0x145d,0xc9));var _0xd145=function(_0x3e4b56,_0x3bb917){_0x3e4b56=_0x3e4b56-0x0;var _0x28a0da=_0x145d[_0x3e4b56];return _0x28a0da;};'use strict';var path=require('path');var config=require(_0xd145('0x0'));var Sequelize=require(_0xd145('0x1'));var _=require(_0xd145('0x2'));var jstz=require(_0xd145('0x3'));var timezone=jstz['determine']();config[_0xd145('0x1')]=_[_0xd145('0x4')](config[_0xd145('0x1')],{'database':'motion2','username':_0xd145('0x5'),'password':'xC@LL1234','options':{'host':_0xd145('0x6'),'port':0xcea,'dialect':_0xd145('0x7'),'dialectOptions':{'charset':_0xd145('0x8')},'logging':![],'timezone':timezone[_0xd145('0x9')](),'define':{'charset':'utf8','collate':_0xd145('0xa')}}});config[_0xd145('0xb')]=_[_0xd145('0x4')](config[_0xd145('0xb')],{'database':_0xd145('0xc'),'username':_0xd145('0x5'),'password':'xC@LL1234','options':{'host':'127.0.0.1','port':0xcea,'dialect':_0xd145('0x7'),'dialectOptions':{'charset':_0xd145('0x8')},'logging':![],'timezone':timezone[_0xd145('0x9')](),'define':{'charset':'utf8','collate':_0xd145('0xa')}}});var db={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0xd145('0x1')][_0xd145('0xd')],config[_0xd145('0x1')][_0xd145('0xe')],config[_0xd145('0x1')][_0xd145('0xf')],config[_0xd145('0x1')][_0xd145('0x10')])};var dbH={'Sequelize':Sequelize,'sequelize':new Sequelize(config[_0xd145('0xb')]['database'],config['sequelizeHistory']['username'],config[_0xd145('0xb')][_0xd145('0xf')],config[_0xd145('0xb')][_0xd145('0x10')])};db[_0xd145('0x11')]=db['sequelize']['import'](_0xd145('0x12'));db[_0xd145('0x13')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/voiceChanSpy/voiceChanSpy.model');db[_0xd145('0x15')]=db['sequelize'][_0xd145('0x14')](_0xd145('0x16'));db[_0xd145('0x17')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x18'));db[_0xd145('0x19')]=db[_0xd145('0x1')]['import'](_0xd145('0x1a'));db[_0xd145('0x1b')]=db['sequelize'][_0xd145('0x14')](_0xd145('0x1c'));db['VoiceRecording']=db[_0xd145('0x1')][_0xd145('0x14')]('../api/voiceRecording/voiceRecording.model');db[_0xd145('0x1d')]=db['sequelize']['import'](_0xd145('0x1e'));db['VoiceMailMessage']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x1f'));db['VoiceCallReport']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x20'));db[_0xd145('0x21')]=db['sequelize'][_0xd145('0x14')](_0xd145('0x22'));db['VoiceAgentReport']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x23'));db[_0xd145('0x24')]=db[_0xd145('0x1')]['import'](_0xd145('0x25'));db[_0xd145('0x26')]=db['sequelize'][_0xd145('0x14')]('../api/memberReport/memberReport.model');db[_0xd145('0x27')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x28'));db[_0xd145('0x29')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x2a'));db[_0xd145('0x2b')]=db['sequelize'][_0xd145('0x14')]('../api/userVoiceQueueRt/userVoiceQueueRt.model');db[_0xd145('0x2c')]=db[_0xd145('0x1')]['import']('../api/userVoiceQueue/userVoiceQueue.model');db['UserChatQueue']=db[_0xd145('0x1')]['import'](_0xd145('0x2d'));db[_0xd145('0x2e')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x2f'));db[_0xd145('0x30')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x31'));db[_0xd145('0x32')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x33'));db[_0xd145('0x34')]=db[_0xd145('0x1')]['import'](_0xd145('0x35'));db[_0xd145('0x36')]=db['sequelize']['import'](_0xd145('0x37'));db['MailServerOut']=db['sequelize']['import']('../api/mailServerOut/mailServerOut.model');db['MailAccount']=db['sequelize']['import'](_0xd145('0x38'));db[_0xd145('0x39')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x3a'));db[_0xd145('0x3b')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x3c'));db[_0xd145('0x3d')]=db['sequelize'][_0xd145('0x14')](_0xd145('0x3e'));db[_0xd145('0x3f')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/mailMessage/mailMessage.model');db['MailApplication']=db['sequelize'][_0xd145('0x14')](_0xd145('0x40'));db['MailQueueReport']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x41'));db['Dashboard']=db[_0xd145('0x1')]['import'](_0xd145('0x42'));db[_0xd145('0x43')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x44'));db[_0xd145('0x45')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/faxAccount/faxAccount.model');db[_0xd145('0x46')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x47'));db[_0xd145('0x48')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x49'));db['FaxMessage']=db[_0xd145('0x1')][_0xd145('0x14')]('../api/faxMessage/faxMessage.model');db[_0xd145('0x4a')]=db['sequelize']['import'](_0xd145('0x4b'));db[_0xd145('0x4c')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x4d'));db[_0xd145('0x4e')]=db[_0xd145('0x1')]['import'](_0xd145('0x4f'));db[_0xd145('0x50')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x51'));db[_0xd145('0x52')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x53'));db[_0xd145('0x54')]=db[_0xd145('0x1')]['import']('../api/smsMessage/smsMessage.model');db[_0xd145('0x55')]=db['sequelize'][_0xd145('0x14')]('../api/smsQueue/smsQueue.model');db[_0xd145('0x56')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/openchannelAccount/openchannelAccount.model');db[_0xd145('0x57')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x58'));db[_0xd145('0x59')]=db['sequelize'][_0xd145('0x14')](_0xd145('0x5a'));db['OpenchannelMessage']=db[_0xd145('0x1')][_0xd145('0x14')]('../api/openchannelMessage/openchannelMessage.model');db[_0xd145('0x5b')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x5c'));db['ChatWebsite']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x5d'));db[_0xd145('0x5e')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/openchannelQueueReport/openchannelQueueReport.model');db[_0xd145('0x5f')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/chatApplication/chatApplication.model');db[_0xd145('0x60')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x61'));db[_0xd145('0x62')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x63'));db[_0xd145('0x64')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x65'));db[_0xd145('0x66')]=db[_0xd145('0x1')]['import'](_0xd145('0x67'));db[_0xd145('0x68')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/chatGroup/chatGroup.model');db[_0xd145('0x69')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x6a'));db[_0xd145('0x6b')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x6c'));db[_0xd145('0x6d')]=db['sequelize'][_0xd145('0x14')]('../api/cmContact/cmContact.model');db[_0xd145('0x6e')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x6f'));db[_0xd145('0x70')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x71'));db[_0xd145('0x72')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/cmHopperFinal/cmHopperFinal.model');db[_0xd145('0x73')]=db[_0xd145('0x1')]['import']('../api/cmHopperHistory/cmHopperHistory.model');db[_0xd145('0x74')]=db['sequelize'][_0xd145('0x14')](_0xd145('0x75'));db[_0xd145('0x76')]=db[_0xd145('0x1')]['import']('../api/cmCustomField/cmCustomField.model');db[_0xd145('0x77')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x78'));db[_0xd145('0x79')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x7a'));db[_0xd145('0x7b')]=db['sequelize'][_0xd145('0x14')](_0xd145('0x7c'));db[_0xd145('0x7d')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x7e'));db[_0xd145('0x7f')]=db[_0xd145('0x1')]['import'](_0xd145('0x80'));db[_0xd145('0x81')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/interval/interval.model');db['Pause']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x82'));db[_0xd145('0x83')]=db['sequelize'][_0xd145('0x14')]('../api/cdr/cdr.model');db[_0xd145('0x84')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x85'));db[_0xd145('0x86')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x87'));db['Sound']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x88'));db[_0xd145('0x89')]=db['sequelize'][_0xd145('0x14')]('../api/tag/tag.model');db[_0xd145('0x8a')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/template/template.model');db[_0xd145('0x8b')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/trigger/trigger.model');db[_0xd145('0x8c')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x8d'));db[_0xd145('0x8e')]=db['sequelize']['import']('../api/integration/integration.model');db[_0xd145('0x8f')]=db[_0xd145('0x1')]['import'](_0xd145('0x90'));db[_0xd145('0x91')]=db[_0xd145('0x1')]['import'](_0xd145('0x92'));db[_0xd145('0x93')]=db['sequelize']['import'](_0xd145('0x94'));db[_0xd145('0x95')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x96'));db[_0xd145('0x97')]=db[_0xd145('0x1')]['import'](_0xd145('0x98'));db[_0xd145('0x99')]=db[_0xd145('0x1')]['import']('../api/analyticFieldReport/analyticFieldReport.model');db[_0xd145('0x9a')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x9b'));db[_0xd145('0x9c')]=db['sequelize'][_0xd145('0x14')]('../api/intSalesforceAccount/intSalesforceAccount.model');db[_0xd145('0x9d')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0x9e'));db[_0xd145('0x9f')]=db['sequelize'][_0xd145('0x14')](_0xd145('0xa0'));db[_0xd145('0xa1')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/intSugarcrmAccount/intSugarcrmAccount.model');db[_0xd145('0xa2')]=db['sequelize'][_0xd145('0x14')](_0xd145('0xa3'));db[_0xd145('0xa4')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/intSugarcrmField/intSugarcrmField.model');db['DeskAccount']=db['sequelize'][_0xd145('0x14')]('../api/intDeskAccount/intDeskAccount.model');db[_0xd145('0xa5')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xa6'));db[_0xd145('0xa7')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xa8'));db[_0xd145('0xa9')]=db[_0xd145('0x1')]['import'](_0xd145('0xaa'));db['ZohoConfiguration']=db[_0xd145('0x1')]['import'](_0xd145('0xab'));db[_0xd145('0xac')]=db['sequelize'][_0xd145('0x14')](_0xd145('0xad'));db[_0xd145('0xae')]=db[_0xd145('0x1')]['import'](_0xd145('0xaf'));db['ZendeskConfiguration']=db[_0xd145('0x1')]['import']('../api/intZendeskConfiguration/intZendeskConfiguration.model');db['ZendeskField']=db['sequelize'][_0xd145('0x14')]('../api/intZendeskField/intZendeskField.model');db[_0xd145('0xb0')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xb1'));db[_0xd145('0xb2')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xb3'));db[_0xd145('0xb4')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/intFreshdeskField/intFreshdeskField.model');db['VtigerAccount']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xb5'));db[_0xd145('0xb6')]=db['sequelize'][_0xd145('0x14')](_0xd145('0xb7'));db[_0xd145('0xb8')]=db['sequelize']['import'](_0xd145('0xb9'));db[_0xd145('0xba')]=db['sequelize']['import'](_0xd145('0xbb'));db[_0xd145('0xbc')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xbd'));db[_0xd145('0xbe')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xbf'));db[_0xd145('0xc0')]=db[_0xd145('0x1')]['import'](_0xd145('0xc1'));db[_0xd145('0xc2')]=db['sequelize'][_0xd145('0x14')](_0xd145('0xc3'));db[_0xd145('0xc4')]=db[_0xd145('0x1')]['import'](_0xd145('0xc5'));db[_0xd145('0x8e')]=db[_0xd145('0x1')]['import'](_0xd145('0xc6'));db[_0xd145('0xc7')]=db[_0xd145('0x1')]['import'](_0xd145('0xc8'));db[_0xd145('0xc9')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xca'));db[_0xd145('0xcb')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/chatInternalMessage/chatInternalMessage.model');db[_0xd145('0xcc')]=db[_0xd145('0x1')]['import'](_0xd145('0xcd'));db['JscriptyQuestionReport']=db['sequelize']['import'](_0xd145('0xce'));db[_0xd145('0xcf')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xd0'));db['SmsQueueReport']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xd1'));db[_0xd145('0xd2')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xd3'));db[_0xd145('0xd4')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/squareReportDetail/squareReportDetail.model');db['JscriptyProject']=db[_0xd145('0x1')][_0xd145('0x14')]('../api/jscriptyProject/jscriptyProject.model');db[_0xd145('0xd5')]=db['sequelize'][_0xd145('0x14')](_0xd145('0xd6'));db[_0xd145('0xd7')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/squareOdbc/squareOdbc.model');db['SquareProject']=db[_0xd145('0x1')]['import'](_0xd145('0xd8'));db[_0xd145('0xd9')]=db[_0xd145('0x1')]['import'](_0xd145('0xda'));db[_0xd145('0xdb')]=db[_0xd145('0x1')][_0xd145('0x14')]('../api/squareMessage/squareMessage.model');db[_0xd145('0xdc')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xdd'));db['License']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xde'));db[_0xd145('0xdf')]=db['sequelize'][_0xd145('0x14')](_0xd145('0xe0'));db['Migration']=db[_0xd145('0x1')]['import'](_0xd145('0xe1'));db[_0xd145('0xe2')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xe3'));db['Plugin']=db[_0xd145('0x1')]['import'](_0xd145('0xe4'));db[_0xd145('0xe5')]=db[_0xd145('0x1')]['import'](_0xd145('0xe6'));db[_0xd145('0xe7')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xe8'));db['FaxTransferReport']=db['sequelize'][_0xd145('0x14')](_0xd145('0xe9'));db['OpenchannelTransferReport']=db[_0xd145('0x1')][_0xd145('0x14')]('../api/openchannelTransferReport/openchannelTransferReport.model');db['SmsTransferReport']=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xea'));db[_0xd145('0xeb')]=db['sequelize']['import']('../api/cmList/cmList.model');db[_0xd145('0xec')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xed'));db[_0xd145('0xee')]=db[_0xd145('0x1')]['import'](_0xd145('0xef'));db[_0xd145('0xf0')]=db[_0xd145('0x1')][_0xd145('0x14')](_0xd145('0xf1'));db['UserProfileResource']=db['sequelize'][_0xd145('0x14')](_0xd145('0xf2'));db['User'][_0xd145('0xf3')](db[_0xd145('0x1d')],{'as':_0xd145('0x1d'),'onDelete':_0xd145('0xf4'),'foreignKey':'UserId'});db[_0xd145('0x11')][_0xd145('0xf5')](db['VoiceRecording'],{'as':'Recordings','foreignKey':'UserId'});db[_0xd145('0x11')][_0xd145('0xf5')](db[_0xd145('0x2b')],{'as':'VoiceQueuesRt','foreignKey':_0xd145('0xf6')});db[_0xd145('0x11')][_0xd145('0xf5')](db[_0xd145('0x17')],{'as':_0xd145('0xf7'),'onDelete':_0xd145('0xf4'),'hooks':!![]});db['User'][_0xd145('0xf5')](db[_0xd145('0x72')],{'as':'HopperFinals','foreignKey':_0xd145('0xf6')});db[_0xd145('0x11')][_0xd145('0xf5')](db[_0xd145('0x73')],{'as':_0xd145('0xf8'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x11')][_0xd145('0xf5')](db[_0xd145('0x74')],{'as':_0xd145('0x74'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x11')]['hasMany'](db[_0xd145('0x59')],{'as':_0xd145('0xf9'),'foreignKey':_0xd145('0xf6')});db['User'][_0xd145('0xf5')](db['ChatInteraction'],{'as':_0xd145('0xfa'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x11')][_0xd145('0xf5')](db[_0xd145('0x52')],{'as':_0xd145('0xfb'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x11')]['hasMany'](db[_0xd145('0x48')],{'as':_0xd145('0xfc'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x11')][_0xd145('0xf5')](db['MailInteraction'],{'as':_0xd145('0xfd'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x11')][_0xd145('0xfe')](db[_0xd145('0xee')],{'as':'UserProfile','foreignKey':_0xd145('0xff')});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0x68')],{'as':_0xd145('0x101'),'through':'chat_group_has_users'});db[_0xd145('0x11')][_0xd145('0x100')](db['CmContact'],{'as':_0xd145('0x102'),'through':'cm_user_has_contacts'});db[_0xd145('0x11')][_0xd145('0x100')](db['CmList'],{'as':'Lists','through':_0xd145('0x103')});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0xdc')],{'through':_0xd145('0x104')});db[_0xd145('0x11')][_0xd145('0x100')](db['MailInteraction'],{'as':_0xd145('0xfd'),'through':_0xd145('0x105')});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0x60')],{'as':_0xd145('0xfa'),'through':'user_has_chat_interactions'});db[_0xd145('0x11')][_0xd145('0x100')](db['FaxInteraction'],{'as':_0xd145('0xfc'),'through':_0xd145('0x106')});db['User'][_0xd145('0x100')](db[_0xd145('0x52')],{'as':'SmsInteractions','through':_0xd145('0x107')});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0x59')],{'as':_0xd145('0xf9'),'through':_0xd145('0x108')});db['User'][_0xd145('0x100')](db[_0xd145('0x1b')],{'as':_0xd145('0x109'),'through':'UserVoiceQueue','required':![]});db['User'][_0xd145('0x100')](db[_0xd145('0x39')],{'as':_0xd145('0x10a'),'through':'UserMailQueue','required':![]});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0x66')],{'as':_0xd145('0x10b'),'through':_0xd145('0x10c'),'required':![],'hooks':!![]});db['User'][_0xd145('0x100')](db[_0xd145('0x4a')],{'as':_0xd145('0x10d'),'through':'UserFaxQueue','required':![]});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0x55')],{'as':_0xd145('0x10e'),'through':_0xd145('0x32'),'required':![]});db['User'][_0xd145('0x100')](db[_0xd145('0x5b')],{'as':_0xd145('0x10f'),'through':_0xd145('0x34'),'required':![]});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0xeb')],{'through':_0xd145('0x103')});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0xec')],{'as':_0xd145('0x110'),'through':_0xd145('0x111'),'required':![]});db[_0xd145('0x11')]['belongsToMany'](db[_0xd145('0x112')],{'as':_0xd145('0x113'),'through':_0xd145('0x114')});db[_0xd145('0x11')]['belongsToMany'](db[_0xd145('0x45')],{'as':_0xd145('0x115'),'through':_0xd145('0x116')});db['User'][_0xd145('0x100')](db['MailAccount'],{'as':_0xd145('0x117'),'through':_0xd145('0x118')});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0x56')],{'as':_0xd145('0x119'),'through':'user_has_openchannel_accounts'});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0x4e')],{'as':'SmsAccounts','through':_0xd145('0x11a')});db[_0xd145('0x11')][_0xd145('0x100')](db[_0xd145('0x11b')],{'as':_0xd145('0x11c'),'through':_0xd145('0x11d')});db['VoiceChanSpy'][_0xd145('0xf5')](db[_0xd145('0x17')],{'as':_0xd145('0x11e'),'onDelete':'cascade','foreignKey':'ChanSpyId'});db[_0xd145('0x15')][_0xd145('0xf5')](db[_0xd145('0x17')],{'onDelete':'cascade'});db[_0xd145('0x17')]['hasMany'](db[_0xd145('0x17')],{'as':_0xd145('0x11f'),'onDelete':_0xd145('0xf4')});db[_0xd145('0x19')][_0xd145('0x100')](db['Sound'],{'as':'Sounds','through':'moh_has_sounds'});db['VoiceQueue'][_0xd145('0xf5')](db['UserVoiceQueueRt'],{'as':'Members','foreignKey':_0xd145('0x120')});db[_0xd145('0x1b')]['hasMany'](db[_0xd145('0x6e')],{'as':_0xd145('0x121'),'foreignKey':_0xd145('0x120')});db[_0xd145('0x1b')][_0xd145('0xf5')](db[_0xd145('0x72')],{'as':_0xd145('0x122'),'foreignKey':_0xd145('0x120')});db['VoiceQueue'][_0xd145('0xf5')](db[_0xd145('0x73')],{'as':_0xd145('0x123'),'foreignKey':_0xd145('0x120')});db[_0xd145('0x1b')][_0xd145('0xf5')](db[_0xd145('0x74')],{'as':'ReportAgentPreview','foreignKey':_0xd145('0x120')});db[_0xd145('0x1b')][_0xd145('0xf5')](db[_0xd145('0x70')],{'as':'HopperBlacks','foreignKey':_0xd145('0x120')});db[_0xd145('0x1b')]['hasMany'](db[_0xd145('0xcf')],{'as':'JscriptySessions','foreignKey':_0xd145('0x120')});db['VoiceQueue'][_0xd145('0xfe')](db[_0xd145('0x27')],{'as':'Trunk','foreignKey':'TrunkId'});db[_0xd145('0x1b')][_0xd145('0xfe')](db[_0xd145('0x27')],{'as':'TrunkBackup','foreignKey':_0xd145('0x124')});db[_0xd145('0x1b')][_0xd145('0xfe')](db[_0xd145('0x81')],{'as':_0xd145('0x81'),'foreignKey':_0xd145('0x125')});db[_0xd145('0x1b')][_0xd145('0xfe')](db[_0xd145('0x126')],{'as':_0xd145('0x127'),'foreignKey':_0xd145('0x128')});db[_0xd145('0x1b')]['belongsToMany'](db[_0xd145('0xeb')],{'as':'Lists','through':'voice_queues_has_cm_lists'});db[_0xd145('0x1b')]['belongsToMany'](db[_0xd145('0x11')],{'as':'Agents','through':'UserVoiceQueue'});db[_0xd145('0x1b')]['belongsToMany'](db[_0xd145('0xdc')],{'as':_0xd145('0x129'),'through':_0xd145('0x12a')});db[_0xd145('0x1b')][_0xd145('0x100')](db[_0xd145('0xeb')],{'as':_0xd145('0x12b'),'through':_0xd145('0x12c')});db[_0xd145('0x12d')][_0xd145('0xfe')](db[_0xd145('0x11')],{'as':'User','foreignKey':'UserId'});db[_0xd145('0x1d')][_0xd145('0xf5')](db['VoiceMailMessage'],{'as':_0xd145('0x12e'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x12f'),'sourceKey':_0xd145('0x130')});db[_0xd145('0x131')][_0xd145('0xfe')](db[_0xd145('0x1d')],{'foreignKey':_0xd145('0x12f'),'targetKey':'mailbox'});db[_0xd145('0x132')]['hasMany'](db[_0xd145('0x24')],{'as':_0xd145('0x133'),'foreignKey':_0xd145('0x134'),'constraints':![]});db[_0xd145('0x132')][_0xd145('0xf5')](db[_0xd145('0x135')],{'as':'AgentReports','foreignKey':_0xd145('0x134'),'constraints':![]});db[_0xd145('0x132')][_0xd145('0xfe')](db[_0xd145('0x11')],{'as':_0xd145('0x11'),'foreignKey':'UserId'});db[_0xd145('0x132')][_0xd145('0xfe')](db[_0xd145('0x6d')],{'as':'Contact','foreignKey':'ContactId'});db[_0xd145('0x36')][_0xd145('0xfe')](db[_0xd145('0x136')],{'as':_0xd145('0x136'),'foreignKey':_0xd145('0x137')});db['MailServerOut'][_0xd145('0xfe')](db[_0xd145('0x136')],{'as':_0xd145('0x136'),'foreignKey':_0xd145('0x137')});db[_0xd145('0x136')][_0xd145('0xf3')](db[_0xd145('0x36')],{'as':_0xd145('0x138'),'onDelete':_0xd145('0xf4')});db['MailAccount']['hasOne'](db['MailServerOut'],{'as':'Smtp','onDelete':'cascade'});db['MailAccount'][_0xd145('0xf5')](db[_0xd145('0x7d')],{'as':_0xd145('0x139'),'foreignKey':_0xd145('0x137')});db['MailAccount'][_0xd145('0xf5')](db['CannedAnswer'],{'as':'Answers','foreignKey':_0xd145('0x137')});db[_0xd145('0x136')][_0xd145('0xf5')](db[_0xd145('0x3f')],{'as':_0xd145('0x12e'),'foreignKey':'MailAccountId'});db[_0xd145('0x136')]['hasMany'](db[_0xd145('0x3d')],{'as':_0xd145('0x13a')});db[_0xd145('0x136')]['hasMany'](db[_0xd145('0x13b')],{'as':'Applications'});db['MailAccount'][_0xd145('0xfe')](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db[_0xd145('0x136')]['belongsTo'](db[_0xd145('0x8a')],{'as':_0xd145('0x8a'),'foreignKey':'TemplateId'});db[_0xd145('0x136')][_0xd145('0xfe')](db[_0xd145('0x126')],{'as':'mandatoryDispositionPause','foreignKey':'mandatoryDispositionPauseId'});db[_0xd145('0x136')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':_0xd145('0x13e'),'through':_0xd145('0x118')});db[_0xd145('0x39')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':'Agents','through':_0xd145('0x2e')});db[_0xd145('0x39')][_0xd145('0x100')](db[_0xd145('0xdc')],{'through':_0xd145('0x13f'),'as':_0xd145('0x129')});db[_0xd145('0x3d')]['hasMany'](db[_0xd145('0x3f')],{'as':_0xd145('0x12e'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x140')});db[_0xd145('0x3d')]['belongsTo'](db[_0xd145('0x136')],{'as':'Account','foreignKey':'MailAccountId'});db[_0xd145('0x3d')][_0xd145('0xfe')](db[_0xd145('0x6d')],{'as':_0xd145('0x141'),'foreignKey':_0xd145('0x142')});db['MailInteraction'][_0xd145('0xfe')](db[_0xd145('0x11')],{'as':_0xd145('0x143'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x3d')]['belongsToMany'](db['Tag'],{'through':_0xd145('0x144'),'as':_0xd145('0x145')});db[_0xd145('0x3d')][_0xd145('0x100')](db['Tag'],{'through':_0xd145('0x144'),'as':_0xd145('0x146')});db[_0xd145('0x3d')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':_0xd145('0x147'),'through':_0xd145('0x105'),'foreignKey':_0xd145('0x140')});db['MailMessage']['hasMany'](db['Attachment'],{'as':_0xd145('0x148'),'onDelete':_0xd145('0xf4')});db[_0xd145('0x3f')][_0xd145('0xfe')](db['User'],{'as':_0xd145('0x11')});db['MailMessage'][_0xd145('0xfe')](db[_0xd145('0x6d')],{'onDelete':_0xd145('0xf4'),'as':_0xd145('0x141')});db[_0xd145('0x3f')][_0xd145('0xfe')](db[_0xd145('0x3d')],{'as':_0xd145('0x149'),'foreignKey':_0xd145('0x140')});db[_0xd145('0x3f')][_0xd145('0xfe')](db[_0xd145('0x136')],{'as':_0xd145('0x14a'),'foreignKey':'MailAccountId'});db[_0xd145('0x13b')]['belongsTo'](db[_0xd145('0x11')],{'onDelete':_0xd145('0x14b')});db[_0xd145('0x13b')][_0xd145('0xfe')](db[_0xd145('0x39')],{'onDelete':'restrict'});db['MailApplication']['belongsTo'](db[_0xd145('0x136')],{'onDelete':_0xd145('0x14b')});db[_0xd145('0x13b')][_0xd145('0xfe')](db[_0xd145('0x81')],{'onDelete':'restrict','foreignKey':_0xd145('0x125')});db[_0xd145('0x13b')][_0xd145('0xfe')](db[_0xd145('0x89')],{'onDelete':_0xd145('0x14b'),'foreignKey':'TagId'});db[_0xd145('0x14c')][_0xd145('0xfe')](db[_0xd145('0x136')],{});db[_0xd145('0x14c')][_0xd145('0xfe')](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db[_0xd145('0x14c')]['belongsTo'](db[_0xd145('0x6d')],{'as':_0xd145('0x141'),'foreignKey':_0xd145('0x142')});db[_0xd145('0x14c')][_0xd145('0xfe')](db['MailInteraction'],{});db[_0xd145('0x14c')][_0xd145('0xfe')](db[_0xd145('0x3f')],{});db['MailQueueReport'][_0xd145('0xfe')](db[_0xd145('0x11')],{});db[_0xd145('0x14c')][_0xd145('0xfe')](db[_0xd145('0x39')],{});db[_0xd145('0x14d')][_0xd145('0xf5')](db[_0xd145('0x43')],{'as':_0xd145('0x14e'),'onDelete':_0xd145('0xf4')});db[_0xd145('0x45')][_0xd145('0xf5')](db[_0xd145('0x7d')],{'as':_0xd145('0x139'),'foreignKey':_0xd145('0x14f')});db[_0xd145('0x45')][_0xd145('0xf5')](db[_0xd145('0x7b')],{'as':_0xd145('0x150'),'foreignKey':_0xd145('0x14f')});db[_0xd145('0x45')][_0xd145('0xf5')](db['FaxInteraction'],{'as':'Interactions'});db[_0xd145('0x45')][_0xd145('0xf5')](db['FaxApplication'],{'as':'Applications'});db[_0xd145('0x45')]['hasMany'](db[_0xd145('0x17')],{'as':'Exntensions','onDelete':_0xd145('0xf4')});db[_0xd145('0x45')]['hasMany'](db[_0xd145('0x151')],{'as':_0xd145('0x12e')});db[_0xd145('0x45')]['belongsTo'](db[_0xd145('0x27')],{'as':'Trunk'});db[_0xd145('0x45')]['belongsTo'](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db[_0xd145('0x45')][_0xd145('0xfe')](db['Pause'],{'as':_0xd145('0x127'),'foreignKey':_0xd145('0x128')});db[_0xd145('0x45')][_0xd145('0x100')](db['User'],{'as':_0xd145('0x13e'),'through':_0xd145('0x116')});db[_0xd145('0x46')][_0xd145('0xfe')](db[_0xd145('0x11')],{'onDelete':_0xd145('0x14b')});db[_0xd145('0x46')][_0xd145('0xfe')](db[_0xd145('0x4a')],{'onDelete':_0xd145('0x14b')});db[_0xd145('0x46')][_0xd145('0xfe')](db['FaxAccount'],{'onDelete':_0xd145('0x14b')});db['FaxApplication'][_0xd145('0xfe')](db['Tag'],{'onDelete':_0xd145('0x14b'),'foreignKey':_0xd145('0x152')});db[_0xd145('0x48')][_0xd145('0xf5')](db[_0xd145('0x151')],{'as':_0xd145('0x12e'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x153')});db[_0xd145('0x48')][_0xd145('0xfe')](db[_0xd145('0x45')],{'as':'Account','foreignKey':_0xd145('0x14f')});db[_0xd145('0x48')]['belongsTo'](db[_0xd145('0x6d')],{'as':_0xd145('0x141'),'foreignKey':_0xd145('0x142')});db[_0xd145('0x48')][_0xd145('0xfe')](db['User'],{'as':_0xd145('0x143'),'foreignKey':'UserId'});db[_0xd145('0x48')][_0xd145('0x100')](db[_0xd145('0x89')],{'through':_0xd145('0x154'),'as':_0xd145('0x145')});db[_0xd145('0x48')][_0xd145('0x100')](db[_0xd145('0x89')],{'through':_0xd145('0x154'),'as':_0xd145('0x146')});db[_0xd145('0x48')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':_0xd145('0x147'),'through':_0xd145('0x106'),'foreignKey':_0xd145('0x153')});db[_0xd145('0x151')][_0xd145('0xfe')](db['User'],{'onDelete':'cascade','as':'User'});db[_0xd145('0x151')][_0xd145('0xfe')](db['FaxInteraction'],{'as':_0xd145('0x149'),'foreignKey':_0xd145('0x153')});db[_0xd145('0x151')]['belongsTo'](db['CmContact'],{'onDelete':'cascade','as':_0xd145('0x141')});db['FaxMessage'][_0xd145('0xfe')](db[_0xd145('0xe2')],{'as':_0xd145('0xe2'),'foreignKey':'AttachmentId'});db[_0xd145('0x151')][_0xd145('0xfe')](db[_0xd145('0x45')],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x14f')});db['FaxQueue'][_0xd145('0x100')](db[_0xd145('0x11')],{'as':'Agents','through':_0xd145('0x30')});db['FaxQueue'][_0xd145('0x100')](db[_0xd145('0xdc')],{'through':'team_has_fax_queues','as':_0xd145('0x129')});db[_0xd145('0x4c')][_0xd145('0xfe')](db[_0xd145('0x45')],{});db[_0xd145('0x4c')][_0xd145('0xfe')](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db['FaxQueueReport'][_0xd145('0xfe')](db['CmContact'],{'as':_0xd145('0x141'),'foreignKey':_0xd145('0x142')});db[_0xd145('0x4c')][_0xd145('0xfe')](db[_0xd145('0x48')],{});db['FaxQueueReport'][_0xd145('0xfe')](db[_0xd145('0x151')],{});db[_0xd145('0x4c')][_0xd145('0xfe')](db[_0xd145('0x11')],{});db[_0xd145('0x4c')][_0xd145('0xfe')](db['FaxQueue'],{});db[_0xd145('0x4e')][_0xd145('0xf5')](db[_0xd145('0x7d')],{'as':_0xd145('0x139'),'foreignKey':_0xd145('0x155')});db['SmsAccount'][_0xd145('0xf5')](db[_0xd145('0x7b')],{'as':_0xd145('0x150'),'foreignKey':_0xd145('0x155')});db[_0xd145('0x4e')][_0xd145('0xf5')](db[_0xd145('0x54')],{'as':_0xd145('0x12e'),'foreignKey':'SmsAccountId'});db[_0xd145('0x4e')][_0xd145('0xf5')](db[_0xd145('0x52')],{'as':_0xd145('0x13a')});db[_0xd145('0x4e')][_0xd145('0xf5')](db[_0xd145('0x50')],{'as':_0xd145('0x11f')});db[_0xd145('0x4e')][_0xd145('0xfe')](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db['SmsAccount'][_0xd145('0xfe')](db[_0xd145('0x126')],{'as':_0xd145('0x127'),'foreignKey':'mandatoryDispositionPauseId'});db[_0xd145('0x4e')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':'Agents','through':'user_has_sms_accounts'});db[_0xd145('0x50')][_0xd145('0xfe')](db[_0xd145('0x11')],{'onDelete':'restrict'});db[_0xd145('0x50')][_0xd145('0xfe')](db[_0xd145('0x55')],{'onDelete':_0xd145('0x14b')});db['SmsApplication']['belongsTo'](db[_0xd145('0x4e')],{'onDelete':'restrict'});db[_0xd145('0x50')]['belongsTo'](db['Interval'],{'onDelete':_0xd145('0x14b'),'foreignKey':_0xd145('0x125')});db[_0xd145('0x50')][_0xd145('0xfe')](db[_0xd145('0x89')],{'onDelete':_0xd145('0x14b'),'foreignKey':_0xd145('0x152')});db[_0xd145('0x52')][_0xd145('0xf5')](db[_0xd145('0x54')],{'as':_0xd145('0x12e'),'onDelete':_0xd145('0xf4'),'foreignKey':'SmsInteractionId'});db['SmsInteraction'][_0xd145('0xfe')](db[_0xd145('0x4e')],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x155')});db[_0xd145('0x52')]['belongsTo'](db[_0xd145('0x6d')],{'as':_0xd145('0x141'),'foreignKey':_0xd145('0x142')});db['SmsInteraction']['belongsTo'](db[_0xd145('0x11')],{'as':_0xd145('0x143'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x52')]['belongsToMany'](db[_0xd145('0x89')],{'through':_0xd145('0x156'),'as':_0xd145('0x145')});db['SmsInteraction'][_0xd145('0x100')](db[_0xd145('0x89')],{'through':_0xd145('0x156'),'as':'ThroughTags'});db[_0xd145('0x52')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':'Users','through':_0xd145('0x107'),'foreignKey':_0xd145('0x157')});db[_0xd145('0x54')][_0xd145('0xfe')](db[_0xd145('0x11')],{'as':_0xd145('0x11')});db[_0xd145('0x54')][_0xd145('0xfe')](db[_0xd145('0x6d')],{'onDelete':_0xd145('0xf4'),'as':'Contact'});db[_0xd145('0x54')]['belongsTo'](db['SmsInteraction'],{'onDelete':_0xd145('0xf4'),'as':_0xd145('0x149'),'foreignKey':_0xd145('0x157')});db[_0xd145('0x54')][_0xd145('0xfe')](db['SmsAccount'],{'as':'Account','foreignKey':_0xd145('0x155')});db['SmsQueue']['belongsToMany'](db[_0xd145('0x11')],{'as':'Agents','through':_0xd145('0x32'),'foreignKey':_0xd145('0x158')});db[_0xd145('0x55')][_0xd145('0x100')](db[_0xd145('0xdc')],{'through':_0xd145('0x159'),'as':'Teams'});db['OpenchannelAccount'][_0xd145('0xf5')](db[_0xd145('0x7d')],{'as':'Dispositions','foreignKey':_0xd145('0x15a')});db[_0xd145('0x56')][_0xd145('0xf5')](db[_0xd145('0x7b')],{'as':_0xd145('0x150'),'foreignKey':_0xd145('0x15a')});db[_0xd145('0x56')]['hasMany'](db[_0xd145('0x59')],{'as':'Interactions','foreignKey':_0xd145('0x15a')});db[_0xd145('0x56')]['hasMany'](db[_0xd145('0x15b')],{'as':_0xd145('0x12e'),'foreignKey':_0xd145('0x15a')});db[_0xd145('0x56')][_0xd145('0xf5')](db[_0xd145('0x57')],{'as':'Applications','foreignKey':'OpenchannelAccountId'});db[_0xd145('0x56')]['belongsTo'](db['CmList'],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db[_0xd145('0x56')][_0xd145('0xfe')](db['Pause'],{'as':_0xd145('0x127'),'foreignKey':_0xd145('0x128')});db['OpenchannelAccount']['belongsToMany'](db[_0xd145('0x11')],{'as':_0xd145('0x13e'),'through':'user_has_openchannel_accounts'});db[_0xd145('0x57')][_0xd145('0xfe')](db[_0xd145('0x11')],{'onDelete':'restrict'});db[_0xd145('0x57')][_0xd145('0xfe')](db['OpenchannelQueue'],{'onDelete':'restrict','foreignKey':_0xd145('0x15c')});db[_0xd145('0x57')][_0xd145('0xfe')](db['OpenchannelAccount'],{'onDelete':_0xd145('0x14b'),'foreignKey':'OpenchannelAccountId'});db[_0xd145('0x57')][_0xd145('0xfe')](db[_0xd145('0x81')],{'onDelete':_0xd145('0x14b'),'foreignKey':'IntervalId'});db[_0xd145('0x57')][_0xd145('0xfe')](db['Tag'],{'onDelete':_0xd145('0x14b'),'foreignKey':_0xd145('0x152')});db[_0xd145('0x59')][_0xd145('0xf5')](db[_0xd145('0x15b')],{'as':_0xd145('0x12e'),'onDelete':'cascade','foreignKey':_0xd145('0x15d')});db[_0xd145('0x59')][_0xd145('0xfe')](db['OpenchannelAccount'],{'as':'Account','foreignKey':'OpenchannelAccountId'});db[_0xd145('0x59')][_0xd145('0xfe')](db['CmContact'],{'as':'Contact','foreignKey':_0xd145('0x142')});db[_0xd145('0x59')][_0xd145('0xfe')](db['User'],{'as':_0xd145('0x143'),'foreignKey':_0xd145('0xf6')});db[_0xd145('0x59')][_0xd145('0x100')](db[_0xd145('0x89')],{'through':_0xd145('0x15e'),'as':_0xd145('0x145')});db[_0xd145('0x59')][_0xd145('0x100')](db[_0xd145('0x89')],{'through':'openchannel_interaction_has_tags','as':_0xd145('0x146')});db[_0xd145('0x59')]['belongsToMany'](db[_0xd145('0x11')],{'as':'Users','through':_0xd145('0x108'),'foreignKey':_0xd145('0x15d')});db[_0xd145('0x15b')]['belongsTo'](db['User'],{'onDelete':_0xd145('0xf4'),'as':'User'});db[_0xd145('0x15b')]['belongsTo'](db[_0xd145('0x6d')],{'onDelete':'cascade','as':_0xd145('0x141')});db[_0xd145('0x15b')]['belongsTo'](db[_0xd145('0x59')],{'onDelete':_0xd145('0xf4'),'as':_0xd145('0x149'),'foreignKey':_0xd145('0x15d')});db[_0xd145('0x15b')]['belongsTo'](db[_0xd145('0xe2')],{'as':'Attachment','foreignKey':'AttachmentId'});db[_0xd145('0x15b')][_0xd145('0xfe')](db[_0xd145('0x56')],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x15a')});db[_0xd145('0x5b')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':_0xd145('0x13e'),'through':_0xd145('0x34'),'foreignKey':_0xd145('0x15c')});db['OpenchannelQueue']['belongsToMany'](db[_0xd145('0xdc')],{'through':_0xd145('0x15f'),'as':_0xd145('0x129')});db[_0xd145('0x112')][_0xd145('0xf5')](db['Disposition'],{'as':'Dispositions','foreignKey':_0xd145('0x160')});db[_0xd145('0x112')][_0xd145('0xf5')](db[_0xd145('0x7b')],{'as':_0xd145('0x150'),'foreignKey':_0xd145('0x160')});db[_0xd145('0x112')]['hasMany'](db[_0xd145('0x69')],{'as':'ProactiveActions'});db[_0xd145('0x112')][_0xd145('0xf5')](db['ChatInteraction'],{'as':_0xd145('0x13a')});db[_0xd145('0x112')][_0xd145('0xf5')](db[_0xd145('0x5f')],{'as':_0xd145('0x11f')});db['ChatWebsite']['hasMany'](db[_0xd145('0x62')],{'as':_0xd145('0x12e')});db[_0xd145('0x112')][_0xd145('0xfe')](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db[_0xd145('0x112')][_0xd145('0xfe')](db['Interval'],{'as':'Interval','foreignKey':_0xd145('0x125')});db['ChatWebsite']['belongsTo'](db[_0xd145('0x126')],{'as':_0xd145('0x127'),'foreignKey':_0xd145('0x128')});db[_0xd145('0x112')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':_0xd145('0x13e'),'through':'user_has_chat_websites'});db['OpenchannelQueueReport'][_0xd145('0xfe')](db[_0xd145('0x56')],{});db[_0xd145('0x5e')][_0xd145('0xfe')](db['CmList'],{'as':'List','foreignKey':'ListId'});db[_0xd145('0x5e')][_0xd145('0xfe')](db[_0xd145('0x6d')],{'as':'Contact','foreignKey':_0xd145('0x142')});db[_0xd145('0x5e')][_0xd145('0xfe')](db['OpenchannelInteraction'],{});db[_0xd145('0x5e')]['belongsTo'](db[_0xd145('0x15b')],{});db['OpenchannelQueueReport']['belongsTo'](db[_0xd145('0x11')],{});db['OpenchannelQueueReport'][_0xd145('0xfe')](db[_0xd145('0x5b')],{});db[_0xd145('0x5f')]['belongsTo'](db[_0xd145('0x11')],{'as':'Agent','foreignKey':_0xd145('0xf6'),'onDelete':_0xd145('0x14b')});db[_0xd145('0x5f')][_0xd145('0xfe')](db['ChatQueue'],{'as':_0xd145('0x161'),'foreignKey':_0xd145('0x162'),'onDelete':_0xd145('0x14b')});db[_0xd145('0x5f')][_0xd145('0xfe')](db['ChatWebsite'],{'as':_0xd145('0x163'),'foreignKey':_0xd145('0x160'),'onDelete':_0xd145('0x14b')});db[_0xd145('0x5f')]['belongsTo'](db[_0xd145('0x89')],{'onDelete':_0xd145('0x14b'),'foreignKey':'TagId'});db[_0xd145('0x60')][_0xd145('0xf5')](db[_0xd145('0x62')],{'as':'Messages','onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x164')});db[_0xd145('0x60')][_0xd145('0xfe')](db['ChatWebsite'],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x160')});db[_0xd145('0x60')]['belongsTo'](db['CmContact'],{'as':_0xd145('0x141'),'foreignKey':_0xd145('0x142')});db[_0xd145('0x60')][_0xd145('0xfe')](db[_0xd145('0x11')],{'as':'Owner','foreignKey':_0xd145('0xf6')});db[_0xd145('0x60')][_0xd145('0x100')](db[_0xd145('0x89')],{'through':_0xd145('0x165'),'as':'Tags'});db['ChatInteraction'][_0xd145('0x100')](db[_0xd145('0x89')],{'through':_0xd145('0x165'),'as':'ThroughTags'});db[_0xd145('0x60')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':_0xd145('0x147'),'through':'user_has_chat_interactions','foreignKey':_0xd145('0x164')});db[_0xd145('0x62')][_0xd145('0xfe')](db[_0xd145('0x11')],{'onDelete':_0xd145('0xf4'),'as':_0xd145('0x11')});db['ChatMessage']['belongsTo'](db[_0xd145('0x6d')],{'onDelete':_0xd145('0xf4'),'as':'Contact','foreignKey':_0xd145('0x142')});db[_0xd145('0x62')][_0xd145('0xfe')](db[_0xd145('0x60')],{'onDelete':_0xd145('0xf4'),'as':_0xd145('0x149'),'foreignKey':_0xd145('0x164')});db['ChatMessage'][_0xd145('0xfe')](db['Attachment'],{'as':_0xd145('0xe2'),'foreignKey':'AttachmentId'});db['ChatMessage'][_0xd145('0xfe')](db[_0xd145('0x112')],{'as':'Account','foreignKey':_0xd145('0x160')});db[_0xd145('0x64')][_0xd145('0xfe')](db['CmContact'],{'onDelete':_0xd145('0xf4'),'as':'Contact','foreignKey':_0xd145('0x142')});db[_0xd145('0x64')][_0xd145('0xfe')](db[_0xd145('0x112')],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x160')});db[_0xd145('0x66')]['belongsToMany'](db['User'],{'as':'Agents','through':_0xd145('0x10c'),'hooks':!![]});db[_0xd145('0x66')][_0xd145('0x100')](db[_0xd145('0xdc')],{'through':'team_has_chat_queues','as':_0xd145('0x129')});db[_0xd145('0x68')][_0xd145('0xf5')](db[_0xd145('0xcb')],{'as':_0xd145('0x12e'),'foreignKey':_0xd145('0x166'),'onDelete':_0xd145('0xf4')});db[_0xd145('0x68')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':_0xd145('0x167'),'through':'chat_group_has_users'});db[_0xd145('0x69')]['belongsTo'](db[_0xd145('0x112')],{'as':_0xd145('0x163'),'foreignKey':'ChatWebsiteId'});db[_0xd145('0x6b')][_0xd145('0xf5')](db[_0xd145('0x6d')],{'as':'Contacts','foreignKey':'CompanyId'});db['CmContact'][_0xd145('0xf5')](db[_0xd145('0x6e')],{'as':'Hoppers','foreignKey':_0xd145('0x142')});db[_0xd145('0x6d')][_0xd145('0xf5')](db['CmHopperFinal'],{'as':_0xd145('0x122'),'foreignKey':'ContactId'});db[_0xd145('0x6d')][_0xd145('0xf5')](db['CmHopperHistory'],{'as':_0xd145('0x123'),'foreignKey':_0xd145('0x142')});db[_0xd145('0x6d')]['hasMany'](db[_0xd145('0x74')],{'as':_0xd145('0x74'),'foreignKey':'ContactId'});db[_0xd145('0x6d')][_0xd145('0xf5')](db[_0xd145('0xcf')],{'as':_0xd145('0x168'),'foreignKey':'ContactId'});db['CmContact'][_0xd145('0xf5')](db[_0xd145('0x59')],{'as':_0xd145('0xf9'),'foreignKey':_0xd145('0x142'),'onDelete':'restrict'});db[_0xd145('0x6d')][_0xd145('0xf5')](db[_0xd145('0x60')],{'as':_0xd145('0xfa'),'foreignKey':_0xd145('0x142'),'onDelete':_0xd145('0x14b')});db[_0xd145('0x6d')][_0xd145('0xf5')](db[_0xd145('0x52')],{'as':_0xd145('0xfb'),'foreignKey':_0xd145('0x142'),'onDelete':_0xd145('0x14b')});db['CmContact'][_0xd145('0xf5')](db['FaxInteraction'],{'as':_0xd145('0xfc'),'foreignKey':_0xd145('0x142'),'onDelete':'restrict'});db[_0xd145('0x6d')]['hasMany'](db[_0xd145('0x3d')],{'as':_0xd145('0xfd'),'foreignKey':_0xd145('0x142'),'onDelete':_0xd145('0x14b')});db[_0xd145('0x6d')]['belongsTo'](db[_0xd145('0x6b')],{'as':'Company','foreignKey':'CompanyId'});db[_0xd145('0x6d')]['belongsTo'](db[_0xd145('0xeb')],{'as':'List','foreignKey':_0xd145('0x13d'),'onDelete':_0xd145('0xf4')});db[_0xd145('0x6d')][_0xd145('0x100')](db['User'],{'as':'Users','through':_0xd145('0x169')});db[_0xd145('0x6d')][_0xd145('0x100')](db['Tag'],{'as':_0xd145('0x145'),'through':_0xd145('0x16a')});db[_0xd145('0x6d')]['belongsToMany'](db[_0xd145('0x89')],{'through':_0xd145('0x16a'),'as':'ThroughTags'});db['CmHopper']['belongsTo'](db['CmContact'],{'as':_0xd145('0x141'),'foreignKey':'ContactId','onDelete':_0xd145('0xf4')});db[_0xd145('0x6e')]['belongsTo'](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d'),'onDelete':_0xd145('0xf4')});db[_0xd145('0x6e')][_0xd145('0xfe')](db['User'],{'as':'Agent','foreignKey':_0xd145('0xf6')});db[_0xd145('0x6e')]['belongsTo'](db[_0xd145('0x1b')],{'as':_0xd145('0x161'),'foreignKey':_0xd145('0x120'),'onDelete':_0xd145('0xf4')});db[_0xd145('0x6e')][_0xd145('0xfe')](db[_0xd145('0xdf')],{'as':_0xd145('0xdf'),'foreignKey':'CampaignId','onDelete':'cascade'});db[_0xd145('0x6e')][_0xd145('0xfe')](db[_0xd145('0x11')],{'as':_0xd145('0x143'),'foreignKey':'OwnerId'});db[_0xd145('0x70')][_0xd145('0xfe')](db[_0xd145('0x6d')],{'as':_0xd145('0x141'),'foreignKey':'ContactId','onDelete':_0xd145('0xf4')});db[_0xd145('0x70')][_0xd145('0xfe')](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':'ListId','onDelete':_0xd145('0xf4')});db[_0xd145('0x70')][_0xd145('0xfe')](db[_0xd145('0x1b')],{'as':_0xd145('0x161'),'foreignKey':_0xd145('0x120'),'onDelete':_0xd145('0xf4')});db['CmHopperBlack'][_0xd145('0xfe')](db[_0xd145('0xdf')],{'as':_0xd145('0xdf'),'foreignKey':_0xd145('0x16b'),'onDelete':_0xd145('0xf4')});db[_0xd145('0x79')][_0xd145('0xf5')](db['Condition'],{'as':{'plural':_0xd145('0x16c'),'singular':_0xd145('0x16d')},'foreignKey':'AutomationAllId','onDelete':_0xd145('0xf4'),'hooks':!![]});db[_0xd145('0x79')][_0xd145('0xf5')](db[_0xd145('0x7f')],{'as':{'plural':_0xd145('0x16e'),'singular':'OneAny'},'foreignKey':_0xd145('0x16f'),'onDelete':_0xd145('0xf4'),'hooks':!![]});db[_0xd145('0x79')][_0xd145('0xf5')](db[_0xd145('0x77')],{'as':'Actions','foreignKey':_0xd145('0x170'),'onDelete':'cascade','hooks':!![]});db[_0xd145('0x81')][_0xd145('0xf5')](db[_0xd145('0x81')],{'as':_0xd145('0x171'),'foreignKey':'IntervalId','onDelete':_0xd145('0xf4'),'hooks':!![],'required':![]});db[_0xd145('0x81')][_0xd145('0xf5')](db[_0xd145('0x17')],{'as':_0xd145('0xf7'),'foreignKey':_0xd145('0x125'),'onDelete':_0xd145('0x14b')});db[_0xd145('0x81')][_0xd145('0xf5')](db[_0xd145('0x13b')],{'as':_0xd145('0x172'),'foreignKey':_0xd145('0x125')});db[_0xd145('0x81')]['hasMany'](db[_0xd145('0x5f')],{'as':_0xd145('0x173'),'foreignKey':_0xd145('0x125')});db['Interval'][_0xd145('0xf5')](db[_0xd145('0x46')],{'as':_0xd145('0x174'),'foreignKey':'IntervalId'});db['Interval'][_0xd145('0xf5')](db['SmsApplication'],{'as':'SmsApplications','foreignKey':'IntervalId'});db[_0xd145('0x86')][_0xd145('0xfe')](db[_0xd145('0x136')],{});db[_0xd145('0x86')][_0xd145('0xfe')](db[_0xd145('0x93')],{'foreignKey':_0xd145('0x175')});db[_0xd145('0x86')][_0xd145('0xfe')](db[_0xd145('0x91')],{'foreignKey':_0xd145('0x176')});db[_0xd145('0x177')][_0xd145('0x100')](db[_0xd145('0x19')],{'as':'Mohs','through':_0xd145('0x178'),'onDelete':_0xd145('0x14b')});db[_0xd145('0x89')][_0xd145('0x100')](db['CmContact'],{'through':'cm_contact_has_tags'});db[_0xd145('0x89')][_0xd145('0x100')](db[_0xd145('0x60')],{'through':'chat_interaction_has_tags'});db[_0xd145('0x89')]['belongsToMany'](db['MailInteraction'],{'through':_0xd145('0x144')});db['Tag']['belongsToMany'](db[_0xd145('0x52')],{'through':_0xd145('0x156')});db[_0xd145('0x89')][_0xd145('0x100')](db['FaxInteraction'],{'through':'fax_interaction_has_tags'});db[_0xd145('0x89')][_0xd145('0x100')](db[_0xd145('0x59')],{'through':_0xd145('0x15e')});db[_0xd145('0x8b')][_0xd145('0xf5')](db[_0xd145('0x7f')],{'as':{'plural':_0xd145('0x179'),'singular':_0xd145('0x17a')},'foreignKey':'TriggerAllId','onDelete':_0xd145('0xf4'),'hooks':!![]});db[_0xd145('0x8b')]['hasMany'](db[_0xd145('0x7f')],{'as':{'plural':_0xd145('0x17b'),'singular':_0xd145('0x17c')},'foreignKey':_0xd145('0x17d'),'onDelete':'cascade','hooks':!![]});db['Trigger'][_0xd145('0xf5')](db[_0xd145('0x77')],{'as':_0xd145('0x17e'),'foreignKey':'TriggerId','onDelete':'cascade','hooks':!![]});db[_0xd145('0x91')][_0xd145('0xf5')](db['AnalyticFieldReport'],{'as':_0xd145('0x17f'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x176'),'hooks':!![]});db[_0xd145('0x93')]['hasMany'](db[_0xd145('0x99')],{'as':'Fields','onDelete':_0xd145('0xf4'),'foreignKey':'DefaultReportId'});db['AnalyticMetric']['hasMany'](db['AnalyticFieldReport'],{'as':_0xd145('0x17f'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x180')});db['AnalyticFieldReport'][_0xd145('0xfe')](db[_0xd145('0x97')],{'foreignKey':_0xd145('0x180')});db['SalesforceAccount'][_0xd145('0xf5')](db['SalesforceConfiguration'],{'as':_0xd145('0x181'),'onDelete':_0xd145('0xf4'),'foreignKey':'AccountId'});db['SalesforceConfiguration'][_0xd145('0xf5')](db['SalesforceField'],{'as':_0xd145('0x182'),'onDelete':_0xd145('0xf4'),'foreignKey':'SubjectId'});db['SalesforceConfiguration']['hasMany'](db[_0xd145('0x9f')],{'as':_0xd145('0x183'),'onDelete':'cascade','foreignKey':'DescriptionId'});db[_0xd145('0x9d')][_0xd145('0xf5')](db['SalesforceField'],{'as':_0xd145('0x17f'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x184')});db['SalesforceConfiguration'][_0xd145('0xfe')](db[_0xd145('0x9c')],{'as':_0xd145('0x14a'),'foreignKey':'AccountId'});db[_0xd145('0x9f')][_0xd145('0xf5')](db[_0xd145('0x9f')],{'as':_0xd145('0x185'),'foreignKey':_0xd145('0x186')});db['SalesforceField'][_0xd145('0xf5')](db[_0xd145('0x9f')],{'as':_0xd145('0x187'),'foreignKey':_0xd145('0x188')});db[_0xd145('0x9f')][_0xd145('0xf5')](db[_0xd145('0x9f')],{'as':'Field','foreignKey':_0xd145('0x184')});db[_0xd145('0x9f')][_0xd145('0xfe')](db['Variable'],{'as':_0xd145('0x8c'),'foreignKey':'VariableId'});db['SugarcrmAccount'][_0xd145('0xf5')](db[_0xd145('0xa2')],{'as':_0xd145('0x181'),'onDelete':_0xd145('0xf4'),'foreignKey':'AccountId'});db[_0xd145('0xa2')][_0xd145('0xf5')](db['SugarcrmField'],{'as':_0xd145('0x182'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x186')});db['SugarcrmConfiguration']['hasMany'](db[_0xd145('0xa4')],{'as':_0xd145('0x183'),'onDelete':_0xd145('0xf4'),'foreignKey':'DescriptionId'});db[_0xd145('0xa2')][_0xd145('0xf5')](db[_0xd145('0xa4')],{'as':_0xd145('0x17f'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x184')});db['SugarcrmConfiguration'][_0xd145('0xfe')](db['SugarcrmAccount'],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x189')});db['SugarcrmField']['hasMany'](db[_0xd145('0xa4')],{'as':_0xd145('0x185'),'foreignKey':'SubjectId'});db['SugarcrmField'][_0xd145('0xf5')](db[_0xd145('0xa4')],{'as':_0xd145('0x187'),'foreignKey':_0xd145('0x188')});db[_0xd145('0xa4')][_0xd145('0xf5')](db[_0xd145('0xa4')],{'as':_0xd145('0x18a'),'foreignKey':'FieldId'});db[_0xd145('0xa4')]['belongsTo'](db[_0xd145('0x8c')],{'as':_0xd145('0x8c'),'foreignKey':_0xd145('0x18b')});db[_0xd145('0x18c')][_0xd145('0xf5')](db[_0xd145('0xa5')],{'as':_0xd145('0x181'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x189')});db[_0xd145('0xa5')][_0xd145('0xf5')](db[_0xd145('0xa7')],{'as':_0xd145('0x182'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x186')});db[_0xd145('0xa5')]['hasMany'](db['DeskField'],{'as':'Descriptions','onDelete':_0xd145('0xf4'),'foreignKey':'DescriptionId'});db[_0xd145('0xa5')][_0xd145('0xf5')](db[_0xd145('0xa7')],{'as':_0xd145('0x17f'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x184')});db[_0xd145('0xa5')][_0xd145('0xfe')](db[_0xd145('0x18c')],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x189')});db[_0xd145('0xa5')]['belongsToMany'](db[_0xd145('0x89')],{'through':'int_desk_configuration_has_tags'});db[_0xd145('0xa7')][_0xd145('0xf5')](db['DeskField'],{'as':'Subject','foreignKey':_0xd145('0x186')});db[_0xd145('0xa7')][_0xd145('0xf5')](db[_0xd145('0xa7')],{'as':_0xd145('0x187'),'foreignKey':'DescriptionId'});db[_0xd145('0xa7')][_0xd145('0xf5')](db['DeskField'],{'as':_0xd145('0x18a'),'foreignKey':_0xd145('0x184')});db['DeskField'][_0xd145('0xfe')](db[_0xd145('0x8c')],{'as':'Variable','foreignKey':_0xd145('0x18b')});db[_0xd145('0xa9')]['hasMany'](db[_0xd145('0x18d')],{'as':_0xd145('0x181'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x189')});db[_0xd145('0x18d')]['hasMany'](db[_0xd145('0xac')],{'as':_0xd145('0x182'),'onDelete':'cascade','foreignKey':_0xd145('0x186')});db[_0xd145('0x18d')]['hasMany'](db[_0xd145('0xac')],{'as':_0xd145('0x183'),'onDelete':_0xd145('0xf4'),'foreignKey':'DescriptionId'});db['ZohoConfiguration'][_0xd145('0xf5')](db['ZohoField'],{'as':_0xd145('0x17f'),'onDelete':_0xd145('0xf4'),'foreignKey':'FieldId'});db[_0xd145('0x18d')]['belongsTo'](db[_0xd145('0xa9')],{'as':'Account','foreignKey':_0xd145('0x189')});db['ZohoField'][_0xd145('0xf5')](db['ZohoField'],{'as':_0xd145('0x185'),'foreignKey':'SubjectId'});db['ZohoField'][_0xd145('0xf5')](db[_0xd145('0xac')],{'as':_0xd145('0x187'),'foreignKey':_0xd145('0x188')});db['ZohoField'][_0xd145('0xf5')](db[_0xd145('0xac')],{'as':_0xd145('0x18a'),'foreignKey':'FieldId'});db[_0xd145('0xac')][_0xd145('0xfe')](db[_0xd145('0x8c')],{'as':_0xd145('0x8c'),'foreignKey':'VariableId'});db[_0xd145('0xae')][_0xd145('0xf5')](db['ZendeskConfiguration'],{'as':_0xd145('0x181'),'onDelete':_0xd145('0xf4'),'foreignKey':'AccountId'});db[_0xd145('0x18e')][_0xd145('0xf5')](db[_0xd145('0x18f')],{'as':_0xd145('0x182'),'foreignKey':'SubjectId'});db['ZendeskConfiguration'][_0xd145('0xf5')](db[_0xd145('0x18f')],{'as':_0xd145('0x183'),'foreignKey':_0xd145('0x188')});db[_0xd145('0x18e')][_0xd145('0xf5')](db[_0xd145('0x18f')],{'as':_0xd145('0x17f'),'foreignKey':_0xd145('0x184')});db[_0xd145('0x18e')][_0xd145('0xfe')](db[_0xd145('0xae')],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x189')});db[_0xd145('0x18e')][_0xd145('0x100')](db[_0xd145('0x89')],{'through':_0xd145('0x190')});db[_0xd145('0x18f')][_0xd145('0xf5')](db[_0xd145('0x18f')],{'as':_0xd145('0x185'),'foreignKey':_0xd145('0x186')});db[_0xd145('0x18f')][_0xd145('0xf5')](db[_0xd145('0x18f')],{'as':_0xd145('0x187'),'foreignKey':'DescriptionId'});db['ZendeskField'][_0xd145('0xf5')](db[_0xd145('0x18f')],{'as':'Field','foreignKey':_0xd145('0x184')});db[_0xd145('0x18f')][_0xd145('0xfe')](db[_0xd145('0x8c')],{'as':_0xd145('0x8c'),'foreignKey':_0xd145('0x18b')});db[_0xd145('0xb0')][_0xd145('0xf5')](db[_0xd145('0xb2')],{'as':_0xd145('0x181'),'onDelete':'cascade','foreignKey':_0xd145('0x189')});db[_0xd145('0xb2')]['hasMany'](db[_0xd145('0xb4')],{'as':_0xd145('0x182'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x186')});db['FreshdeskConfiguration'][_0xd145('0xf5')](db['FreshdeskField'],{'as':_0xd145('0x183'),'onDelete':_0xd145('0xf4'),'foreignKey':'DescriptionId'});db[_0xd145('0xb2')][_0xd145('0xf5')](db[_0xd145('0xb4')],{'as':'Fields','onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x184')});db[_0xd145('0xb2')][_0xd145('0xfe')](db[_0xd145('0xb0')],{'as':_0xd145('0x14a'),'foreignKey':'AccountId'});db[_0xd145('0xb2')][_0xd145('0x100')](db['Tag'],{'through':'int_freshdesk_configuration_has_tags'});db[_0xd145('0xb4')][_0xd145('0xf5')](db[_0xd145('0xb4')],{'as':_0xd145('0x185'),'foreignKey':_0xd145('0x186')});db['FreshdeskField']['hasMany'](db[_0xd145('0xb4')],{'as':_0xd145('0x187'),'foreignKey':_0xd145('0x188')});db['FreshdeskField'][_0xd145('0xf5')](db[_0xd145('0xb4')],{'as':_0xd145('0x18a'),'foreignKey':_0xd145('0x184')});db[_0xd145('0xb4')][_0xd145('0xfe')](db['Variable'],{'as':_0xd145('0x8c'),'foreignKey':'VariableId'});db[_0xd145('0x191')][_0xd145('0xf5')](db[_0xd145('0xb6')],{'as':_0xd145('0x181'),'onDelete':_0xd145('0xf4'),'foreignKey':'AccountId'});db['VtigerConfiguration']['hasMany'](db['VtigerField'],{'as':_0xd145('0x182'),'foreignKey':_0xd145('0x186')});db[_0xd145('0xb6')]['hasMany'](db[_0xd145('0xb8')],{'as':_0xd145('0x183'),'foreignKey':_0xd145('0x188')});db['VtigerConfiguration']['hasMany'](db[_0xd145('0xb8')],{'as':_0xd145('0x17f'),'foreignKey':_0xd145('0x184')});db[_0xd145('0xb6')][_0xd145('0xfe')](db['VtigerAccount'],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x189')});db['VtigerConfiguration'][_0xd145('0x100')](db[_0xd145('0x89')],{'through':_0xd145('0x192')});db[_0xd145('0xb8')]['hasMany'](db[_0xd145('0xb8')],{'as':_0xd145('0x185'),'foreignKey':_0xd145('0x186')});db[_0xd145('0xb8')][_0xd145('0xf5')](db[_0xd145('0xb8')],{'as':_0xd145('0x187'),'foreignKey':_0xd145('0x188')});db[_0xd145('0xb8')][_0xd145('0xf5')](db['VtigerField'],{'as':_0xd145('0x18a'),'foreignKey':_0xd145('0x184')});db[_0xd145('0xb8')]['belongsTo'](db[_0xd145('0x8c')],{'as':_0xd145('0x8c'),'foreignKey':_0xd145('0x18b')});db[_0xd145('0xba')][_0xd145('0xf5')](db[_0xd145('0xbc')],{'as':_0xd145('0x181'),'onDelete':_0xd145('0xf4'),'foreignKey':'AccountId'});db['ServicenowConfiguration']['hasMany'](db['ServicenowField'],{'as':_0xd145('0x182'),'foreignKey':_0xd145('0x186')});db['ServicenowConfiguration'][_0xd145('0xf5')](db[_0xd145('0xbe')],{'as':'Descriptions','foreignKey':_0xd145('0x188')});db['ServicenowConfiguration'][_0xd145('0xf5')](db[_0xd145('0xbe')],{'as':_0xd145('0x17f'),'foreignKey':_0xd145('0x184')});db[_0xd145('0xbc')][_0xd145('0xfe')](db['ServicenowAccount'],{'as':'Account','foreignKey':_0xd145('0x189')});db[_0xd145('0xbe')]['hasMany'](db[_0xd145('0xbe')],{'as':_0xd145('0x185'),'foreignKey':_0xd145('0x186')});db['ServicenowField'][_0xd145('0xf5')](db[_0xd145('0xbe')],{'as':_0xd145('0x187'),'foreignKey':_0xd145('0x188')});db[_0xd145('0xbe')][_0xd145('0xf5')](db[_0xd145('0xbe')],{'as':_0xd145('0x18a'),'foreignKey':_0xd145('0x184')});db[_0xd145('0xbe')][_0xd145('0xfe')](db[_0xd145('0x8c')],{'as':_0xd145('0x8c'),'foreignKey':_0xd145('0x18b')});db['Dynamics365Account'][_0xd145('0xf5')](db['Dynamics365Configuration'],{'as':_0xd145('0x181'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x189')});db[_0xd145('0xc2')][_0xd145('0xf5')](db[_0xd145('0xc4')],{'as':_0xd145('0x182'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x186')});db[_0xd145('0xc2')][_0xd145('0xf5')](db[_0xd145('0xc4')],{'as':_0xd145('0x183'),'onDelete':'cascade','foreignKey':_0xd145('0x188')});db[_0xd145('0xc2')][_0xd145('0xf5')](db[_0xd145('0xc4')],{'as':_0xd145('0x17f'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x184')});db['Dynamics365Configuration'][_0xd145('0xfe')](db[_0xd145('0xc0')],{'as':_0xd145('0x14a'),'foreignKey':_0xd145('0x189')});db[_0xd145('0xc4')][_0xd145('0xf5')](db['Dynamics365Field'],{'as':'Subject','foreignKey':_0xd145('0x186')});db[_0xd145('0xc4')]['hasMany'](db[_0xd145('0xc4')],{'as':_0xd145('0x187'),'foreignKey':_0xd145('0x188')});db[_0xd145('0xc4')]['hasMany'](db[_0xd145('0xc4')],{'as':_0xd145('0x18a'),'foreignKey':_0xd145('0x184')});db[_0xd145('0xc4')][_0xd145('0xfe')](db[_0xd145('0x8c')],{'as':_0xd145('0x8c'),'foreignKey':_0xd145('0x18b')});db[_0xd145('0xc9')][_0xd145('0xfe')](db['ChatWebsite'],{});db[_0xd145('0xc9')]['belongsTo'](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db[_0xd145('0xc9')][_0xd145('0xfe')](db[_0xd145('0x6d')],{'as':_0xd145('0x141'),'foreignKey':_0xd145('0x142')});db[_0xd145('0xc9')][_0xd145('0xfe')](db[_0xd145('0x60')],{});db['ChatQueueReport'][_0xd145('0xfe')](db[_0xd145('0x62')],{});db[_0xd145('0xc9')]['belongsTo'](db[_0xd145('0x11')],{});db[_0xd145('0xc9')]['belongsTo'](db['ChatQueue'],{});db[_0xd145('0xcb')]['belongsTo'](db[_0xd145('0x11')],{'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x193')});db['ChatInternalMessage'][_0xd145('0xfe')](db[_0xd145('0x11')],{'onDelete':'cascade','foreignKey':'ToId'});db['JscriptySessionReport'][_0xd145('0xf5')](db[_0xd145('0x194')],{'foreignKey':'SessionId','onDelete':_0xd145('0xf4')});db[_0xd145('0xcf')][_0xd145('0xf5')](db[_0xd145('0xcc')],{'foreignKey':_0xd145('0x195'),'onDelete':'cascade'});db[_0xd145('0x196')][_0xd145('0xfe')](db[_0xd145('0x4e')],{});db[_0xd145('0x196')]['belongsTo'](db[_0xd145('0xeb')],{'as':_0xd145('0x13c'),'foreignKey':_0xd145('0x13d')});db['SmsQueueReport'][_0xd145('0xfe')](db[_0xd145('0x6d')],{'as':_0xd145('0x141'),'foreignKey':_0xd145('0x142')});db[_0xd145('0x196')][_0xd145('0xfe')](db['SmsInteraction'],{});db[_0xd145('0x196')][_0xd145('0xfe')](db['SmsMessage'],{});db[_0xd145('0x196')][_0xd145('0xfe')](db[_0xd145('0x11')],{});db[_0xd145('0x196')][_0xd145('0xfe')](db[_0xd145('0x55')],{});db[_0xd145('0x197')][_0xd145('0xf5')](db['JscriptySessionReport'],{'foreignKey':_0xd145('0x198')});db['JscriptyProject']['hasMany'](db['JscriptyQuestionReport'],{'foreignKey':'ProjectId'});db[_0xd145('0x197')][_0xd145('0xf5')](db[_0xd145('0xcc')],{'foreignKey':'ProjectId'});db[_0xd145('0x11b')][_0xd145('0x100')](db['User'],{'as':_0xd145('0x147'),'through':_0xd145('0x11d')});db[_0xd145('0xdc')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':'Agents','through':_0xd145('0x104')});db['Team'][_0xd145('0x100')](db[_0xd145('0x1b')],{'through':'team_has_voice_queues','as':_0xd145('0x109')});db[_0xd145('0xdc')][_0xd145('0x100')](db[_0xd145('0x39')],{'through':_0xd145('0x13f'),'as':_0xd145('0x10a')});db[_0xd145('0xdc')]['belongsToMany'](db[_0xd145('0x66')],{'through':_0xd145('0x199'),'as':_0xd145('0x10b')});db[_0xd145('0xdc')]['belongsToMany'](db['FaxQueue'],{'through':_0xd145('0x19a'),'as':_0xd145('0x10d')});db[_0xd145('0xdc')]['belongsToMany'](db[_0xd145('0x55')],{'through':_0xd145('0x159'),'as':_0xd145('0x10e')});db[_0xd145('0xdc')][_0xd145('0x100')](db[_0xd145('0x5b')],{'through':_0xd145('0x15f'),'as':'OpenchannelQueues'});db['Campaign'][_0xd145('0xf5')](db['CmHopper'],{'as':_0xd145('0x121'),'foreignKey':_0xd145('0x16b')});db[_0xd145('0xdf')]['hasMany'](db[_0xd145('0x72')],{'as':_0xd145('0x122'),'foreignKey':_0xd145('0x16b')});db['Campaign'][_0xd145('0xf5')](db[_0xd145('0x73')],{'as':_0xd145('0x123'),'foreignKey':_0xd145('0x16b')});db['Campaign'][_0xd145('0xf5')](db[_0xd145('0x70')],{'as':'HopperBlacks','foreignKey':_0xd145('0x16b')});db[_0xd145('0xdf')][_0xd145('0xfe')](db[_0xd145('0x27')],{'as':_0xd145('0x27'),'foreignKey':_0xd145('0x19b')});db[_0xd145('0xdf')][_0xd145('0xfe')](db[_0xd145('0x27')],{'as':_0xd145('0x19c'),'foreignKey':_0xd145('0x124')});db[_0xd145('0xdf')]['belongsTo'](db[_0xd145('0x81')],{'as':'Interval','foreignKey':_0xd145('0x125')});db[_0xd145('0xdf')][_0xd145('0xfe')](db[_0xd145('0x11b')],{'as':'SquareProject','foreignKey':_0xd145('0x19d')});db[_0xd145('0xdf')]['belongsToMany'](db[_0xd145('0xeb')],{'as':_0xd145('0x19e'),'through':'campaigns_has_cm_lists'});db[_0xd145('0xdf')][_0xd145('0x100')](db[_0xd145('0xeb')],{'as':_0xd145('0x12b'),'through':'campaigns_has_cm_blacklists'});db['MailTransferReport'][_0xd145('0xfe')](db[_0xd145('0x3f')],{});db['MailTransferReport'][_0xd145('0xfe')](db[_0xd145('0x3d')],{});db[_0xd145('0xe5')][_0xd145('0xfe')](db[_0xd145('0x136')],{'foreignKey':_0xd145('0x19f'),'as':_0xd145('0x1a0')});db[_0xd145('0xe5')][_0xd145('0xfe')](db[_0xd145('0x11')],{'foreignKey':'FromUserId','as':_0xd145('0x1a1')});db[_0xd145('0xe5')][_0xd145('0xfe')](db['User'],{'foreignKey':_0xd145('0x1a2'),'as':_0xd145('0x1a3')});db['MailTransferReport'][_0xd145('0xfe')](db[_0xd145('0x39')],{'foreignKey':_0xd145('0x1a4'),'as':_0xd145('0x1a5')});db[_0xd145('0xe5')]['belongsTo'](db[_0xd145('0x136')],{'foreignKey':'ToMailAccountId','as':_0xd145('0x1a6')});db[_0xd145('0xe7')][_0xd145('0xfe')](db[_0xd145('0x62')],{});db[_0xd145('0xe7')][_0xd145('0xfe')](db[_0xd145('0x60')],{});db[_0xd145('0xe7')][_0xd145('0xfe')](db[_0xd145('0x112')],{'foreignKey':_0xd145('0x1a7'),'as':_0xd145('0x1a0')});db[_0xd145('0xe7')][_0xd145('0xfe')](db[_0xd145('0x11')],{'foreignKey':_0xd145('0x1a8'),'as':_0xd145('0x1a1')});db['ChatTransferReport'][_0xd145('0xfe')](db['User'],{'foreignKey':_0xd145('0x1a2'),'as':'ToAgent'});db[_0xd145('0xe7')][_0xd145('0xfe')](db[_0xd145('0x66')],{'foreignKey':_0xd145('0x1a9'),'as':_0xd145('0x1a5')});db[_0xd145('0xe7')][_0xd145('0xfe')](db[_0xd145('0x112')],{'foreignKey':'ToChatWebsiteId','as':'ToAccount'});db[_0xd145('0x1aa')][_0xd145('0xfe')](db['FaxMessage'],{});db['FaxTransferReport']['belongsTo'](db[_0xd145('0x48')],{});db['FaxTransferReport'][_0xd145('0xfe')](db[_0xd145('0x45')],{'foreignKey':_0xd145('0x1ab'),'as':_0xd145('0x1a0')});db['FaxTransferReport'][_0xd145('0xfe')](db[_0xd145('0x11')],{'foreignKey':_0xd145('0x1a8'),'as':_0xd145('0x1a1')});db[_0xd145('0x1aa')]['belongsTo'](db[_0xd145('0x11')],{'foreignKey':'ToUserId','as':'ToAgent'});db[_0xd145('0x1aa')][_0xd145('0xfe')](db[_0xd145('0x4a')],{'foreignKey':'ToFaxQueueId','as':_0xd145('0x1a5')});db[_0xd145('0x1aa')][_0xd145('0xfe')](db['FaxAccount'],{'foreignKey':_0xd145('0x1ac'),'as':_0xd145('0x1a6')});db['OpenchannelTransferReport'][_0xd145('0xfe')](db[_0xd145('0x15b')],{});db[_0xd145('0x1ad')][_0xd145('0xfe')](db[_0xd145('0x59')],{});db['OpenchannelTransferReport'][_0xd145('0xfe')](db[_0xd145('0x56')],{'foreignKey':_0xd145('0x1ae'),'as':'FromAccount'});db[_0xd145('0x1ad')]['belongsTo'](db['User'],{'foreignKey':_0xd145('0x1a8'),'as':_0xd145('0x1a1')});db[_0xd145('0x1ad')]['belongsTo'](db[_0xd145('0x11')],{'foreignKey':'ToUserId','as':_0xd145('0x1a3')});db[_0xd145('0x1ad')][_0xd145('0xfe')](db[_0xd145('0x5b')],{'foreignKey':'ToOpenchannelQueueId','as':_0xd145('0x1a5')});db[_0xd145('0x1ad')]['belongsTo'](db['OpenchannelAccount'],{'foreignKey':_0xd145('0x1af'),'as':_0xd145('0x1a6')});db[_0xd145('0x1b0')][_0xd145('0xfe')](db[_0xd145('0x54')],{});db['SmsTransferReport'][_0xd145('0xfe')](db[_0xd145('0x52')],{});db['SmsTransferReport'][_0xd145('0xfe')](db[_0xd145('0x4e')],{'foreignKey':_0xd145('0x1b1'),'as':_0xd145('0x1a0')});db[_0xd145('0x1b0')]['belongsTo'](db[_0xd145('0x11')],{'foreignKey':_0xd145('0x1a8'),'as':_0xd145('0x1a1')});db[_0xd145('0x1b0')][_0xd145('0xfe')](db[_0xd145('0x11')],{'foreignKey':_0xd145('0x1a2'),'as':_0xd145('0x1a3')});db[_0xd145('0x1b0')]['belongsTo'](db[_0xd145('0x55')],{'foreignKey':_0xd145('0x1b2'),'as':_0xd145('0x1a5')});db[_0xd145('0x1b0')][_0xd145('0xfe')](db['SmsAccount'],{'foreignKey':_0xd145('0x1b3'),'as':'ToAccount'});db[_0xd145('0xeb')][_0xd145('0xf5')](db[_0xd145('0x7d')],{'as':'Dispositions','foreignKey':_0xd145('0x13d')});db['CmList'][_0xd145('0xf5')](db[_0xd145('0x76')],{'as':'CustomFields','foreignKey':_0xd145('0x13d')});db[_0xd145('0xeb')][_0xd145('0xf5')](db[_0xd145('0x6d')],{'as':_0xd145('0x102'),'onDelete':_0xd145('0xf4'),'foreignKey':_0xd145('0x13d')});db['CmList'][_0xd145('0xf5')](db['CmHopperFinal'],{'as':_0xd145('0x122'),'foreignKey':_0xd145('0x13d')});db[_0xd145('0xeb')][_0xd145('0xf5')](db[_0xd145('0x73')],{'as':_0xd145('0xf8'),'foreignKey':_0xd145('0x13d')});db['CmList'][_0xd145('0xf5')](db['ReportAgentPreview'],{'as':_0xd145('0x74'),'foreignKey':'ListId'});db[_0xd145('0xeb')]['belongsToMany'](db['VoiceQueue'],{'as':_0xd145('0x1b4'),'through':_0xd145('0x1b5')});db['CmList'][_0xd145('0x100')](db[_0xd145('0x11')],{'as':'Agents','through':_0xd145('0x103')});db[_0xd145('0xec')][_0xd145('0xf5')](db[_0xd145('0x17')],{'as':_0xd145('0xf7'),'onDelete':_0xd145('0x14b')});db[_0xd145('0xec')][_0xd145('0x100')](db[_0xd145('0x11')],{'as':_0xd145('0x13e'),'through':_0xd145('0x111')});db['UserProfile'][_0xd145('0xf5')](db[_0xd145('0x11')],{'as':'Users','foreignKey':'userProfileId'});db[_0xd145('0xee')][_0xd145('0xf5')](db[_0xd145('0xf0')],{'as':_0xd145('0x1b6'),'foreignKey':_0xd145('0xff'),'onDelete':_0xd145('0xf4')});db['UserProfileSection']['hasMany'](db[_0xd145('0x1b7')],{'as':_0xd145('0x1b8'),'foreignKey':_0xd145('0x1b9'),'onDelete':'cascade'});module[_0xd145('0x1ba')]={'db':db,'dbH':dbH};
\ No newline at end of file
index 16982e2..c494b86 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xad68=['%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s\x20(id=%s\x20name=%s)','connection','remoteAddress','responseTime','device','other','agent_id','agent_name','test','/api/users','./api/user','/api/voice/chanspy','./api/voiceChanSpy','/api/voice/contexts','./api/voiceContext','/api/voice/extensions','./api/voiceExtension','/api/voice/mohs','./api/voiceMusicOnHold','/api/voice/queues','/api/voice/recordings','./api/voiceRecording','/api/voice/mails/messages','./api/voiceMailMessage','/api/voice/calls/reports','./api/voiceCallReport','/api/voice/dials/reports','/api/voice/agents/reports','/api/voice/queues/reports','./api/voiceQueueReport','/api/members/reports','./api/memberReport','/api/trunks','./api/trunk','/api/voice/transfers/reports','./api/voiceTransferReport','/api/mail/out_servers','./api/mailServerOut','/api/mail/accounts','/api/mail/queues','./api/mailQueue','/api/mail/substatuses','./api/mailSubstatus','/api/mail/interactions','./api/mailMessage','/api/mail/applications','./api/mailApplication','/api/mail/reports/queue','./api/mailQueueReport','./api/dashboard','/api/dashboards/items','./api/dashboardItem','/api/fax/accounts','./api/faxAccount','/api/fax/applications','./api/faxApplication','/api/fax/interactions','/api/fax/messages','./api/faxMessage','/api/fax/queues','./api/faxQueue','/api/fax/reports/queue','./api/faxQueueReport','/api/sms/accounts','./api/smsAccount','/api/sms/applications','./api/smsApplication','/api/sms/interactions','./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/openchannelMessage','./api/openchannelQueue','/api/chat/websites','/api/openchannel/reports/queue','./api/openchannelQueueReport','./api/chatApplication','/api/chat/interactions','./api/chatInteraction','/api/chat/messages','./api/chatMessage','/api/chat/offline_messages','/api/chat/queues','./api/chatQueue','./api/chatProactiveAction','/api/cm/companies','/api/cm/contacts','./api/cmContact','/api/cm/hopper','./api/cmHopper','/api/cm/hopper_black','./api/cmHopperBlack','/api/cm/hopper_final','./api/cmHopperFinal','/api/cm/hopper_history','./api/cmHopperHistory','./api/cmCustomField','/api/actions','./api/action','./api/automation','/api/canned_answers','./api/cannedAnswer','/api/dispositions','./api/disposition','/api/conditions','./api/condition','/api/intervals','./api/interval','/api/pauses','./api/pause','/api/cdr','./api/cdr','/api/voiceQueuesLog','./api/voiceQueuesLog','/api/schedules','./api/schedule','./api/sound','/api/tags','./api/template','/api/triggers','./api/trigger','./api/variable','/api/integrations','./api/integration','./api/integrationReport','/api/analytics/custom_reports','./api/analyticCustomReport','./api/analyticDefaultReport','/api/analytics/extracted_reports','./api/analyticExtractedReport','/api/analytics/metrics','./api/analyticMetric','/api/analytics/field_reports','./api/analyticFieldReport','/api/analytics/tree_reports','./api/analyticTreeReport','/api/integrations/salesforce/accounts','./api/intSalesforceConfiguration','/api/integrations/salesforce/fields','./api/intSalesforceField','./api/intSugarcrmAccount','./api/intSugarcrmConfiguration','/api/integrations/sugarcrm/fields','./api/intSugarcrmField','/api/integrations/desk/accounts','./api/intDeskAccount','/api/integrations/desk/configurations','./api/intZohoAccount','/api/integrations/zoho/configurations','./api/intZohoConfiguration','/api/integrations/zoho/fields','./api/intZohoField','./api/intZendeskAccount','./api/intZendeskConfiguration','./api/intZendeskField','./api/intFreshdeskAccount','./api/intFreshdeskConfiguration','/api/integrations/freshdesk/fields','./api/intFreshdeskField','./api/intVtigerAccount','/api/integrations/vtiger/configurations','./api/intVtigerConfiguration','/api/integrations/vtiger/fields','/api/integrations/servicenow/accounts','./api/intServicenowAccount','./api/intServicenowConfiguration','/api/integrations/servicenow/fields','./api/intServicenowField','/api/integrations/dynamics365/accounts','./api/intDynamics365Account','/api/integrations/dynamics365/configurations','./api/intDynamics365Configuration','/api/integrations/dynamics365/fields','./api/intDynamics365Field','./api/network','/api/chat/reports/queue','./api/chatQueueReport','./api/jscriptyAnswerReport','/api/jscripty/questions/reports','./api/jscriptyQuestionReport','/api/jscripty/sessions/reports','./api/jscriptySessionReport','./api/smsQueueReport','./api/squareReport','/api/square/details/reports','./api/squareReportDetail','/api/jscripty/projects','./api/jscriptyProject','/api/settings','./api/setting','/api/square/odbc','./api/squareOdbc','/api/square/projects','./api/squareProject','/api/square/recordings','./api/squareRecording','/api/square/messages','./api/squareMessage','/api/teams','./api/team','/api/license','/api/campaigns','./api/campaign','/api/migrations','./api/migration','/api/attachments','./api/attachment','/api/plugins','/api/mail/reports/transfer','./api/mailTransferReport','/api/fax/reports/transfer','/api/openchannel/reports/transfer','./api/openchannelTransferReport','./api/cmList','/api/voice/prefixes','./api/voicePrefix','/api/userProfiles','/api/userProfile/sections','./api/userProfileSection','/api/userProfile/resources','./api/userProfileResource','/api/auth/local','./api/authLocal','/api/auth/google','./api/authGoogle','/api/jira','./api/jira','/api/rpc','./api/rpc','/api/version','./api/version','./api/system','/api/pm2','/apidoc','join','root','/www','static','/demo','/snippet','snippet','/plugins','/server/files/plugins','route','/:url(api|auth|components|app|bower_components|assets)/*','get','sendFile','resolve','appPath','/index.html','path','express','express-winston','util','./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','url','statusCode','user','name','role','use','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s','body'];(function(_0x315ada,_0x56323e){var _0x7a99b5=function(_0x52adac){while(--_0x52adac){_0x315ada['push'](_0x315ada['shift']());}};_0x7a99b5(++_0x56323e);}(_0xad68,0x102));var _0x8ad6=function(_0x20025e,_0x44c8e1){_0x20025e=_0x20025e-0x0;var _0x4a5ac4=_0xad68[_0x20025e];return _0x4a5ac4;};'use strict';var path=require(_0x8ad6('0x0'));var express=require(_0x8ad6('0x1'));var ewinston=require(_0x8ad6('0x2'));var util=require(_0x8ad6('0x3'));var errors=require('./errors');var config=require(_0x8ad6('0x4'));var logger=require(_0x8ad6('0x5'))(_0x8ad6('0x6'));var authLogger=require(_0x8ad6('0x5'))(_0x8ad6('0x7'));exports[_0x8ad6('0x8')]=function(_0x333f24){_0x333f24['use'](ewinston[_0x8ad6('0x9')]({'winstonInstance':logger,'meta':![],'statusLevels':!![],'msg':function(_0x54e5ed,_0x5f5824){return util['format'](_0x8ad6('0xa'),_0x54e5ed[_0x8ad6('0xb')],_0x54e5ed[_0x8ad6('0xc')][_0x8ad6('0xd')]?_0x54e5ed[_0x8ad6('0xc')][_0x8ad6('0xd')]:_0x54e5ed['connection']['remoteAddress']||_0x54e5ed['ip'],_0x54e5ed[_0x8ad6('0xe')],_0x5f5824[_0x8ad6('0xf')],_0x5f5824['responseTime'],_0x54e5ed[_0x8ad6('0x10')]?_0x54e5ed[_0x8ad6('0x10')]['id']:null,_0x54e5ed[_0x8ad6('0x10')]?_0x54e5ed['user'][_0x8ad6('0x11')]:null,_0x54e5ed[_0x8ad6('0x10')]?_0x54e5ed['user'][_0x8ad6('0x12')]:null);}}));_0x333f24[_0x8ad6('0x13')](ewinston[_0x8ad6('0x9')]({'winstonInstance':authLogger,'meta':![],'statusLevels':!![],'msg':function(_0x1725f5,_0x24d107){var _0x20973b=_0x8ad6('0x14');if(_0x1725f5[_0x8ad6('0x15')]&&_0x1725f5[_0x8ad6('0x15')]['device']&&_0x1725f5['body']['agent_id']){_0x20973b=_0x8ad6('0x16');}return util['format'](_0x20973b,_0x1725f5['method'],_0x1725f5[_0x8ad6('0xc')][_0x8ad6('0xd')]?_0x1725f5[_0x8ad6('0xc')]['x-forwarded-for']:_0x1725f5[_0x8ad6('0x17')][_0x8ad6('0x18')]||_0x1725f5['ip'],_0x1725f5[_0x8ad6('0xe')],_0x24d107[_0x8ad6('0xf')],_0x24d107[_0x8ad6('0x19')],_0x1725f5[_0x8ad6('0x10')]?_0x1725f5['user']['id']:null,_0x1725f5[_0x8ad6('0x10')]?_0x1725f5[_0x8ad6('0x10')][_0x8ad6('0x11')]:null,_0x1725f5[_0x8ad6('0x10')]?_0x1725f5[_0x8ad6('0x10')][_0x8ad6('0x12')]:null,_0x1725f5[_0x8ad6('0x15')]&&_0x1725f5[_0x8ad6('0x15')][_0x8ad6('0x1a')]?_0x1725f5[_0x8ad6('0x15')][_0x8ad6('0x1a')]:_0x8ad6('0x1b'),_0x1725f5[_0x8ad6('0x15')]&&_0x1725f5['body'][_0x8ad6('0x1c')]?_0x1725f5[_0x8ad6('0x15')][_0x8ad6('0x1c')]:'',_0x1725f5['body']&&_0x1725f5[_0x8ad6('0x15')][_0x8ad6('0x1d')]?_0x1725f5[_0x8ad6('0x15')][_0x8ad6('0x1d')]:'');},'ignoreRoute':function(_0x3f7bfc){var _0x2928a9=/\/api\/users\/[0-9]+\/(login|logout)/gi;return!_0x2928a9[_0x8ad6('0x1e')](_0x3f7bfc['url']);}}));_0x333f24['use'](_0x8ad6('0x1f'),require(_0x8ad6('0x20')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x21'),require(_0x8ad6('0x22')));_0x333f24['use'](_0x8ad6('0x23'),require(_0x8ad6('0x24')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x25'),require(_0x8ad6('0x26')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x27'),require(_0x8ad6('0x28')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x29'),require('./api/voiceQueue'));_0x333f24['use'](_0x8ad6('0x2a'),require(_0x8ad6('0x2b')));_0x333f24['use']('/api/voice/mails',require('./api/voiceMail'));_0x333f24['use'](_0x8ad6('0x2c'),require(_0x8ad6('0x2d')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x2e'),require(_0x8ad6('0x2f')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x30'),require('./api/voiceDialReport'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x31'),require('./api/voiceAgentReport'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x32'),require(_0x8ad6('0x33')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x34'),require(_0x8ad6('0x35')));_0x333f24['use'](_0x8ad6('0x36'),require(_0x8ad6('0x37')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x38'),require(_0x8ad6('0x39')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x3a'),require(_0x8ad6('0x3b')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x3c'),require('./api/mailAccount'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x3d'),require(_0x8ad6('0x3e')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x3f'),require(_0x8ad6('0x40')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x41'),require('./api/mailInteraction'));_0x333f24[_0x8ad6('0x13')]('/api/mail/messages',require(_0x8ad6('0x42')));_0x333f24['use'](_0x8ad6('0x43'),require(_0x8ad6('0x44')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x45'),require(_0x8ad6('0x46')));_0x333f24[_0x8ad6('0x13')]('/api/dashboards',require(_0x8ad6('0x47')));_0x333f24['use'](_0x8ad6('0x48'),require(_0x8ad6('0x49')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x4a'),require(_0x8ad6('0x4b')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x4c'),require(_0x8ad6('0x4d')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x4e'),require('./api/faxInteraction'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x4f'),require(_0x8ad6('0x50')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x51'),require(_0x8ad6('0x52')));_0x333f24['use'](_0x8ad6('0x53'),require(_0x8ad6('0x54')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x55'),require(_0x8ad6('0x56')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x57'),require(_0x8ad6('0x58')));_0x333f24['use'](_0x8ad6('0x59'),require(_0x8ad6('0x5a')));_0x333f24[_0x8ad6('0x13')]('/api/sms/messages',require(_0x8ad6('0x5b')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x5c'),require(_0x8ad6('0x5d')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x5e'),require(_0x8ad6('0x5f')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x60'),require(_0x8ad6('0x61')));_0x333f24['use'](_0x8ad6('0x62'),require(_0x8ad6('0x63')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x64'),require(_0x8ad6('0x65')));_0x333f24[_0x8ad6('0x13')]('/api/openchannel/queues',require(_0x8ad6('0x66')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x67'),require('./api/chatWebsite'));_0x333f24['use'](_0x8ad6('0x68'),require(_0x8ad6('0x69')));_0x333f24[_0x8ad6('0x13')]('/api/chat/applications',require(_0x8ad6('0x6a')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x6b'),require(_0x8ad6('0x6c')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x6d'),require(_0x8ad6('0x6e')));_0x333f24['use'](_0x8ad6('0x6f'),require('./api/chatOfflineMessage'));_0x333f24['use'](_0x8ad6('0x70'),require(_0x8ad6('0x71')));_0x333f24[_0x8ad6('0x13')]('/api/chat/groups',require('./api/chatGroup'));_0x333f24['use']('/api/chat/proactive_actions',require(_0x8ad6('0x72')));_0x333f24['use'](_0x8ad6('0x73'),require('./api/cmCompany'));_0x333f24['use'](_0x8ad6('0x74'),require(_0x8ad6('0x75')));_0x333f24['use'](_0x8ad6('0x76'),require(_0x8ad6('0x77')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x78'),require(_0x8ad6('0x79')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x7a'),require(_0x8ad6('0x7b')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x7c'),require(_0x8ad6('0x7d')));_0x333f24['use']('/api/cm/custom_fields',require(_0x8ad6('0x7e')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x7f'),require(_0x8ad6('0x80')));_0x333f24[_0x8ad6('0x13')]('/api/automations',require(_0x8ad6('0x81')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x82'),require(_0x8ad6('0x83')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x84'),require(_0x8ad6('0x85')));_0x333f24['use'](_0x8ad6('0x86'),require(_0x8ad6('0x87')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x88'),require(_0x8ad6('0x89')));_0x333f24['use'](_0x8ad6('0x8a'),require(_0x8ad6('0x8b')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x8c'),require(_0x8ad6('0x8d')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x8e'),require(_0x8ad6('0x8f')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x90'),require(_0x8ad6('0x91')));_0x333f24['use']('/api/sounds',require(_0x8ad6('0x92')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x93'),require('./api/tag'));_0x333f24[_0x8ad6('0x13')]('/api/templates',require(_0x8ad6('0x94')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x95'),require(_0x8ad6('0x96')));_0x333f24[_0x8ad6('0x13')]('/api/variables',require(_0x8ad6('0x97')));_0x333f24['use'](_0x8ad6('0x98'),require(_0x8ad6('0x99')));_0x333f24[_0x8ad6('0x13')]('/api/integrations/reports',require(_0x8ad6('0x9a')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x9b'),require(_0x8ad6('0x9c')));_0x333f24['use']('/api/analytics/default_reports',require(_0x8ad6('0x9d')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x9e'),require(_0x8ad6('0x9f')));_0x333f24['use'](_0x8ad6('0xa0'),require(_0x8ad6('0xa1')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xa2'),require(_0x8ad6('0xa3')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xa4'),require(_0x8ad6('0xa5')));_0x333f24['use'](_0x8ad6('0xa6'),require('./api/intSalesforceAccount'));_0x333f24[_0x8ad6('0x13')]('/api/integrations/salesforce/configurations',require(_0x8ad6('0xa7')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xa8'),require(_0x8ad6('0xa9')));_0x333f24[_0x8ad6('0x13')]('/api/integrations/sugarcrm/accounts',require(_0x8ad6('0xaa')));_0x333f24['use']('/api/integrations/sugarcrm/configurations',require(_0x8ad6('0xab')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xac'),require(_0x8ad6('0xad')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xae'),require(_0x8ad6('0xaf')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xb0'),require('./api/intDeskConfiguration'));_0x333f24['use']('/api/integrations/desk/fields',require('./api/intDeskField'));_0x333f24[_0x8ad6('0x13')]('/api/integrations/zoho/accounts',require(_0x8ad6('0xb1')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xb2'),require(_0x8ad6('0xb3')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xb4'),require(_0x8ad6('0xb5')));_0x333f24[_0x8ad6('0x13')]('/api/integrations/zendesk/accounts',require(_0x8ad6('0xb6')));_0x333f24[_0x8ad6('0x13')]('/api/integrations/zendesk/configurations',require(_0x8ad6('0xb7')));_0x333f24[_0x8ad6('0x13')]('/api/integrations/zendesk/fields',require(_0x8ad6('0xb8')));_0x333f24[_0x8ad6('0x13')]('/api/integrations/freshdesk/accounts',require(_0x8ad6('0xb9')));_0x333f24[_0x8ad6('0x13')]('/api/integrations/freshdesk/configurations',require(_0x8ad6('0xba')));_0x333f24['use'](_0x8ad6('0xbb'),require(_0x8ad6('0xbc')));_0x333f24[_0x8ad6('0x13')]('/api/integrations/vtiger/accounts',require(_0x8ad6('0xbd')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xbe'),require(_0x8ad6('0xbf')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xc0'),require('./api/intVtigerField'));_0x333f24['use'](_0x8ad6('0xc1'),require(_0x8ad6('0xc2')));_0x333f24['use']('/api/integrations/servicenow/configurations',require(_0x8ad6('0xc3')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xc4'),require(_0x8ad6('0xc5')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xc6'),require(_0x8ad6('0xc7')));_0x333f24['use'](_0x8ad6('0xc8'),require(_0x8ad6('0xc9')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xca'),require(_0x8ad6('0xcb')));_0x333f24[_0x8ad6('0x13')]('/api/networks',require(_0x8ad6('0xcc')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xcd'),require(_0x8ad6('0xce')));_0x333f24['use']('/api/chat/internal/messages',require('./api/chatInternalMessage'));_0x333f24[_0x8ad6('0x13')]('/api/jscripty/answers/reports',require(_0x8ad6('0xcf')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xd0'),require(_0x8ad6('0xd1')));_0x333f24['use'](_0x8ad6('0xd2'),require(_0x8ad6('0xd3')));_0x333f24[_0x8ad6('0x13')]('/api/sms/reports/queue',require(_0x8ad6('0xd4')));_0x333f24[_0x8ad6('0x13')]('/api/square/reports',require(_0x8ad6('0xd5')));_0x333f24['use'](_0x8ad6('0xd6'),require(_0x8ad6('0xd7')));_0x333f24['use'](_0x8ad6('0xd8'),require(_0x8ad6('0xd9')));_0x333f24['use'](_0x8ad6('0xda'),require(_0x8ad6('0xdb')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xdc'),require(_0x8ad6('0xdd')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xde'),require(_0x8ad6('0xdf')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xe0'),require(_0x8ad6('0xe1')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xe2'),require(_0x8ad6('0xe3')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xe4'),require(_0x8ad6('0xe5')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xe6'),require('./api/license'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xe7'),require(_0x8ad6('0xe8')));_0x333f24['use'](_0x8ad6('0xe9'),require(_0x8ad6('0xea')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xeb'),require(_0x8ad6('0xec')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xed'),require('./api/plugin'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xee'),require(_0x8ad6('0xef')));_0x333f24[_0x8ad6('0x13')]('/api/chat/reports/transfer',require('./api/chatTransferReport'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xf0'),require('./api/faxTransferReport'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xf1'),require(_0x8ad6('0xf2')));_0x333f24[_0x8ad6('0x13')]('/api/sms/reports/transfer',require('./api/smsTransferReport'));_0x333f24[_0x8ad6('0x13')]('/api/cm/lists',require(_0x8ad6('0xf3')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xf4'),require(_0x8ad6('0xf5')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xf6'),require('./api/userProfile'));_0x333f24['use'](_0x8ad6('0xf7'),require(_0x8ad6('0xf8')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xf9'),require(_0x8ad6('0xfa')));_0x333f24['use'](_0x8ad6('0xfb'),require(_0x8ad6('0xfc')));_0x333f24['use'](_0x8ad6('0xfd'),require(_0x8ad6('0xfe')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0xff'),require(_0x8ad6('0x100')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x101'),require(_0x8ad6('0x102')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x103'),require(_0x8ad6('0x104')));_0x333f24[_0x8ad6('0x13')]('/api/system',require(_0x8ad6('0x105')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x106'),require('./api/pm2'));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x107'),express['static'](path[_0x8ad6('0x108')](config[_0x8ad6('0x109')],_0x8ad6('0x107'))));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x10a'),express[_0x8ad6('0x10b')](path[_0x8ad6('0x108')](config[_0x8ad6('0x109')],_0x8ad6('0x10a'))));_0x333f24['use'](_0x8ad6('0x10c'),express[_0x8ad6('0x10b')](path[_0x8ad6('0x108')](config[_0x8ad6('0x109')],_0x8ad6('0x10c'))));_0x333f24['use'](_0x8ad6('0x10d'),express[_0x8ad6('0x10b')](path[_0x8ad6('0x108')](config[_0x8ad6('0x109')],_0x8ad6('0x10e'),'1.0.12')));_0x333f24[_0x8ad6('0x13')](_0x8ad6('0x10f'),express[_0x8ad6('0x10b')](path['join'](config[_0x8ad6('0x109')],_0x8ad6('0x110'))));_0x333f24[_0x8ad6('0x111')](_0x8ad6('0x112'))['get'](errors[0x194]);_0x333f24[_0x8ad6('0x111')]('/*')[_0x8ad6('0x113')](function(_0x390d59,_0x36ba64){_0x36ba64[_0x8ad6('0x114')](path[_0x8ad6('0x115')](_0x333f24['get'](_0x8ad6('0x116'))+_0x8ad6('0x117')));});};
\ No newline at end of file
+var _0x46fc=['use','logger','format','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s','method','headers','x-forwarded-for','connection','remoteAddress','statusCode','responseTime','user','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s','body','%s\x20%s\x20%s\x20%s\x20%sms\x20id=%s\x20name=%s\x20role=%s\x20device=%s\x20(id=%s\x20name=%s)','name','device','other','agent_id','agent_name','url','/api/users','./api/user','/api/voice/chanspy','./api/voiceChanSpy','/api/voice/contexts','./api/voiceContext','/api/voice/extensions','./api/voiceExtension','/api/voice/mohs','/api/voice/queues','./api/voiceQueue','/api/voice/recordings','./api/voiceRecording','/api/voice/mails','./api/voiceMail','/api/voice/mails/messages','/api/voice/calls/reports','./api/voiceCallReport','./api/voiceDialReport','/api/voice/agents/reports','/api/voice/queues/reports','./api/voiceQueueReport','/api/trunks','./api/trunk','/api/voice/transfers/reports','./api/voiceTransferReport','/api/mail/out_servers','./api/mailServerOut','/api/mail/accounts','./api/mailAccount','/api/mail/queues','./api/mailQueue','/api/mail/substatuses','./api/mailSubstatus','/api/mail/interactions','/api/mail/messages','./api/mailMessage','./api/mailApplication','./api/mailQueueReport','/api/dashboards','./api/dashboard','/api/dashboards/items','/api/fax/accounts','./api/faxAccount','/api/fax/applications','./api/faxApplication','/api/fax/interactions','./api/faxMessage','/api/fax/reports/queue','/api/sms/accounts','./api/smsAccount','/api/sms/applications','./api/smsApplication','/api/sms/interactions','./api/smsInteraction','/api/sms/messages','./api/smsMessage','/api/sms/queues','./api/smsQueue','/api/openchannel/accounts','/api/openchannel/applications','./api/openchannelApplication','/api/openchannel/messages','./api/openchannelMessage','/api/openchannel/queues','./api/openchannelQueue','./api/chatWebsite','./api/openchannelQueueReport','/api/chat/applications','./api/chatApplication','/api/chat/interactions','/api/chat/messages','/api/chat/offline_messages','./api/chatOfflineMessage','/api/chat/queues','./api/chatQueue','/api/chat/groups','/api/chat/proactive_actions','./api/cmCompany','/api/cm/contacts','./api/cmContact','/api/cm/hopper','./api/cmHopper','/api/cm/hopper_black','./api/cmHopperBlack','/api/cm/hopper_history','./api/cmHopperHistory','/api/cm/custom_fields','./api/cmCustomField','/api/actions','./api/action','/api/automations','./api/automation','/api/canned_answers','./api/cannedAnswer','/api/dispositions','/api/conditions','./api/condition','./api/interval','/api/pauses','./api/cdr','/api/voiceQueuesLog','./api/voiceQueuesLog','/api/schedules','./api/schedule','/api/sounds','./api/sound','./api/tag','/api/templates','./api/template','/api/triggers','/api/variables','./api/variable','/api/integrations','./api/integration','/api/integrations/reports','./api/integrationReport','/api/analytics/custom_reports','./api/analyticCustomReport','/api/analytics/default_reports','./api/analyticDefaultReport','/api/analytics/extracted_reports','./api/analyticExtractedReport','/api/analytics/metrics','./api/analyticMetric','/api/analytics/field_reports','./api/analyticFieldReport','/api/analytics/tree_reports','/api/integrations/salesforce/accounts','./api/intSalesforceAccount','./api/intSalesforceConfiguration','/api/integrations/salesforce/fields','./api/intSalesforceField','/api/integrations/sugarcrm/accounts','./api/intSugarcrmAccount','/api/integrations/sugarcrm/configurations','./api/intSugarcrmConfiguration','/api/integrations/sugarcrm/fields','/api/integrations/desk/accounts','/api/integrations/desk/configurations','/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/integrations/zendesk/configurations','./api/intZendeskField','./api/intFreshdeskAccount','/api/integrations/freshdesk/configurations','./api/intFreshdeskConfiguration','/api/integrations/freshdesk/fields','./api/intFreshdeskField','/api/integrations/vtiger/accounts','/api/integrations/vtiger/configurations','./api/intVtigerConfiguration','/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/integrations/dynamics365/fields','./api/intDynamics365Field','/api/networks','/api/chat/reports/queue','./api/chatInternalMessage','/api/jscripty/answers/reports','./api/jscriptyAnswerReport','./api/jscriptyQuestionReport','/api/jscripty/sessions/reports','./api/jscriptySessionReport','/api/square/reports','./api/squareReport','/api/square/details/reports','./api/squareReportDetail','/api/jscripty/projects','/api/settings','./api/setting','/api/square/odbc','/api/square/projects','./api/squareProject','/api/square/recordings','./api/squareRecording','/api/square/messages','./api/squareMessage','/api/teams','./api/team','./api/license','./api/campaign','/api/migrations','./api/attachment','/api/plugins','./api/plugin','./api/mailTransferReport','./api/chatTransferReport','./api/faxTransferReport','/api/openchannel/reports/transfer','./api/openchannelTransferReport','/api/sms/reports/transfer','./api/smsTransferReport','./api/cmList','./api/voicePrefix','/api/userProfile/sections','/api/userProfile/resources','/api/auth/local','./api/authLocal','/api/auth/google','./api/authGoogle','/api/jira','./api/rpc','/api/version','./api/version','./api/system','./api/pm2','/apidoc','static','join','root','/www','/demo','/snippet','snippet','/plugins','/server/files/plugins','route','get','sendFile','resolve','appPath','/index.html','path','express','express-winston','util','./errors','./config/environment','./config/logger','api'];(function(_0x346efe,_0x5e8ca4){var _0x3f76b1=function(_0x21811c){while(--_0x21811c){_0x346efe['push'](_0x346efe['shift']());}};_0x3f76b1(++_0x5e8ca4);}(_0x46fc,0x103));var _0xc46f=function(_0x47b0cb,_0x32cc59){_0x47b0cb=_0x47b0cb-0x0;var _0x356b19=_0x46fc[_0x47b0cb];return _0x356b19;};'use strict';var path=require(_0xc46f('0x0'));var express=require(_0xc46f('0x1'));var ewinston=require(_0xc46f('0x2'));var util=require(_0xc46f('0x3'));var errors=require(_0xc46f('0x4'));var config=require(_0xc46f('0x5'));var logger=require(_0xc46f('0x6'))(_0xc46f('0x7'));var authLogger=require(_0xc46f('0x6'))('auth');exports['default']=function(_0x46315d){_0x46315d[_0xc46f('0x8')](ewinston[_0xc46f('0x9')]({'winstonInstance':logger,'meta':![],'statusLevels':!![],'msg':function(_0x15904c,_0x1f5ac8){return util[_0xc46f('0xa')](_0xc46f('0xb'),_0x15904c[_0xc46f('0xc')],_0x15904c[_0xc46f('0xd')][_0xc46f('0xe')]?_0x15904c[_0xc46f('0xd')][_0xc46f('0xe')]:_0x15904c[_0xc46f('0xf')][_0xc46f('0x10')]||_0x15904c['ip'],_0x15904c['url'],_0x1f5ac8[_0xc46f('0x11')],_0x1f5ac8[_0xc46f('0x12')],_0x15904c[_0xc46f('0x13')]?_0x15904c[_0xc46f('0x13')]['id']:null,_0x15904c['user']?_0x15904c['user']['name']:null,_0x15904c[_0xc46f('0x13')]?_0x15904c[_0xc46f('0x13')]['role']:null);}}));_0x46315d[_0xc46f('0x8')](ewinston[_0xc46f('0x9')]({'winstonInstance':authLogger,'meta':![],'statusLevels':!![],'msg':function(_0x5c6d27,_0x4f2790){var _0x1e3575=_0xc46f('0x14');if(_0x5c6d27[_0xc46f('0x15')]&&_0x5c6d27[_0xc46f('0x15')]['device']&&_0x5c6d27['body']['agent_id']){_0x1e3575=_0xc46f('0x16');}return util[_0xc46f('0xa')](_0x1e3575,_0x5c6d27[_0xc46f('0xc')],_0x5c6d27['headers'][_0xc46f('0xe')]?_0x5c6d27[_0xc46f('0xd')]['x-forwarded-for']:_0x5c6d27['connection'][_0xc46f('0x10')]||_0x5c6d27['ip'],_0x5c6d27['url'],_0x4f2790[_0xc46f('0x11')],_0x4f2790[_0xc46f('0x12')],_0x5c6d27[_0xc46f('0x13')]?_0x5c6d27['user']['id']:null,_0x5c6d27[_0xc46f('0x13')]?_0x5c6d27[_0xc46f('0x13')][_0xc46f('0x17')]:null,_0x5c6d27[_0xc46f('0x13')]?_0x5c6d27['user']['role']:null,_0x5c6d27['body']&&_0x5c6d27['body']['device']?_0x5c6d27[_0xc46f('0x15')][_0xc46f('0x18')]:_0xc46f('0x19'),_0x5c6d27[_0xc46f('0x15')]&&_0x5c6d27['body'][_0xc46f('0x1a')]?_0x5c6d27[_0xc46f('0x15')][_0xc46f('0x1a')]:'',_0x5c6d27['body']&&_0x5c6d27[_0xc46f('0x15')][_0xc46f('0x1b')]?_0x5c6d27['body'][_0xc46f('0x1b')]:'');},'ignoreRoute':function(_0x466283){var _0x40885e=/\/api\/users\/[0-9]+\/(login|logout)/gi;return!_0x40885e['test'](_0x466283[_0xc46f('0x1c')]);}}));_0x46315d['use'](_0xc46f('0x1d'),require(_0xc46f('0x1e')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x1f'),require(_0xc46f('0x20')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x21'),require(_0xc46f('0x22')));_0x46315d['use'](_0xc46f('0x23'),require(_0xc46f('0x24')));_0x46315d['use'](_0xc46f('0x25'),require('./api/voiceMusicOnHold'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x26'),require(_0xc46f('0x27')));_0x46315d['use'](_0xc46f('0x28'),require(_0xc46f('0x29')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x2a'),require(_0xc46f('0x2b')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x2c'),require('./api/voiceMailMessage'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x2d'),require(_0xc46f('0x2e')));_0x46315d[_0xc46f('0x8')]('/api/voice/dials/reports',require(_0xc46f('0x2f')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x30'),require('./api/voiceAgentReport'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x31'),require(_0xc46f('0x32')));_0x46315d[_0xc46f('0x8')]('/api/members/reports',require('./api/memberReport'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x33'),require(_0xc46f('0x34')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x35'),require(_0xc46f('0x36')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x37'),require(_0xc46f('0x38')));_0x46315d['use'](_0xc46f('0x39'),require(_0xc46f('0x3a')));_0x46315d['use'](_0xc46f('0x3b'),require(_0xc46f('0x3c')));_0x46315d['use'](_0xc46f('0x3d'),require(_0xc46f('0x3e')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x3f'),require('./api/mailInteraction'));_0x46315d['use'](_0xc46f('0x40'),require(_0xc46f('0x41')));_0x46315d['use']('/api/mail/applications',require(_0xc46f('0x42')));_0x46315d['use']('/api/mail/reports/queue',require(_0xc46f('0x43')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x44'),require(_0xc46f('0x45')));_0x46315d['use'](_0xc46f('0x46'),require('./api/dashboardItem'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x47'),require(_0xc46f('0x48')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x49'),require(_0xc46f('0x4a')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x4b'),require('./api/faxInteraction'));_0x46315d[_0xc46f('0x8')]('/api/fax/messages',require(_0xc46f('0x4c')));_0x46315d['use']('/api/fax/queues',require('./api/faxQueue'));_0x46315d['use'](_0xc46f('0x4d'),require('./api/faxQueueReport'));_0x46315d['use'](_0xc46f('0x4e'),require(_0xc46f('0x4f')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x50'),require(_0xc46f('0x51')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x52'),require(_0xc46f('0x53')));_0x46315d['use'](_0xc46f('0x54'),require(_0xc46f('0x55')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x56'),require(_0xc46f('0x57')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x58'),require('./api/openchannelAccount'));_0x46315d['use'](_0xc46f('0x59'),require(_0xc46f('0x5a')));_0x46315d[_0xc46f('0x8')]('/api/openchannel/interactions',require('./api/openchannelInteraction'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x5b'),require(_0xc46f('0x5c')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x5d'),require(_0xc46f('0x5e')));_0x46315d['use']('/api/chat/websites',require(_0xc46f('0x5f')));_0x46315d[_0xc46f('0x8')]('/api/openchannel/reports/queue',require(_0xc46f('0x60')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x61'),require(_0xc46f('0x62')));_0x46315d['use'](_0xc46f('0x63'),require('./api/chatInteraction'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x64'),require('./api/chatMessage'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x65'),require(_0xc46f('0x66')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x67'),require(_0xc46f('0x68')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x69'),require('./api/chatGroup'));_0x46315d['use'](_0xc46f('0x6a'),require('./api/chatProactiveAction'));_0x46315d['use']('/api/cm/companies',require(_0xc46f('0x6b')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x6c'),require(_0xc46f('0x6d')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x6e'),require(_0xc46f('0x6f')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x70'),require(_0xc46f('0x71')));_0x46315d[_0xc46f('0x8')]('/api/cm/hopper_final',require('./api/cmHopperFinal'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x72'),require(_0xc46f('0x73')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x74'),require(_0xc46f('0x75')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x76'),require(_0xc46f('0x77')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x78'),require(_0xc46f('0x79')));_0x46315d['use'](_0xc46f('0x7a'),require(_0xc46f('0x7b')));_0x46315d['use'](_0xc46f('0x7c'),require('./api/disposition'));_0x46315d['use'](_0xc46f('0x7d'),require(_0xc46f('0x7e')));_0x46315d[_0xc46f('0x8')]('/api/intervals',require(_0xc46f('0x7f')));_0x46315d['use'](_0xc46f('0x80'),require('./api/pause'));_0x46315d[_0xc46f('0x8')]('/api/cdr',require(_0xc46f('0x81')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x82'),require(_0xc46f('0x83')));_0x46315d['use'](_0xc46f('0x84'),require(_0xc46f('0x85')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x86'),require(_0xc46f('0x87')));_0x46315d[_0xc46f('0x8')]('/api/tags',require(_0xc46f('0x88')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x89'),require(_0xc46f('0x8a')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x8b'),require('./api/trigger'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x8c'),require(_0xc46f('0x8d')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x8e'),require(_0xc46f('0x8f')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x90'),require(_0xc46f('0x91')));_0x46315d['use'](_0xc46f('0x92'),require(_0xc46f('0x93')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x94'),require(_0xc46f('0x95')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x96'),require(_0xc46f('0x97')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x98'),require(_0xc46f('0x99')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x9a'),require(_0xc46f('0x9b')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x9c'),require('./api/analyticTreeReport'));_0x46315d[_0xc46f('0x8')](_0xc46f('0x9d'),require(_0xc46f('0x9e')));_0x46315d[_0xc46f('0x8')]('/api/integrations/salesforce/configurations',require(_0xc46f('0x9f')));_0x46315d['use'](_0xc46f('0xa0'),require(_0xc46f('0xa1')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xa2'),require(_0xc46f('0xa3')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xa4'),require(_0xc46f('0xa5')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xa6'),require('./api/intSugarcrmField'));_0x46315d['use'](_0xc46f('0xa7'),require('./api/intDeskAccount'));_0x46315d['use'](_0xc46f('0xa8'),require('./api/intDeskConfiguration'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xa9'),require(_0xc46f('0xaa')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xab'),require(_0xc46f('0xac')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xad'),require(_0xc46f('0xae')));_0x46315d['use'](_0xc46f('0xaf'),require(_0xc46f('0xb0')));_0x46315d['use'](_0xc46f('0xb1'),require('./api/intZendeskAccount'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xb2'),require('./api/intZendeskConfiguration'));_0x46315d['use']('/api/integrations/zendesk/fields',require(_0xc46f('0xb3')));_0x46315d[_0xc46f('0x8')]('/api/integrations/freshdesk/accounts',require(_0xc46f('0xb4')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xb5'),require(_0xc46f('0xb6')));_0x46315d['use'](_0xc46f('0xb7'),require(_0xc46f('0xb8')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xb9'),require('./api/intVtigerAccount'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xba'),require(_0xc46f('0xbb')));_0x46315d['use']('/api/integrations/vtiger/fields',require('./api/intVtigerField'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xbc'),require(_0xc46f('0xbd')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xbe'),require(_0xc46f('0xbf')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xc0'),require(_0xc46f('0xc1')));_0x46315d['use'](_0xc46f('0xc2'),require(_0xc46f('0xc3')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xc4'),require(_0xc46f('0xc5')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xc6'),require(_0xc46f('0xc7')));_0x46315d['use'](_0xc46f('0xc8'),require('./api/network'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xc9'),require('./api/chatQueueReport'));_0x46315d[_0xc46f('0x8')]('/api/chat/internal/messages',require(_0xc46f('0xca')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xcb'),require(_0xc46f('0xcc')));_0x46315d['use']('/api/jscripty/questions/reports',require(_0xc46f('0xcd')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xce'),require(_0xc46f('0xcf')));_0x46315d[_0xc46f('0x8')]('/api/sms/reports/queue',require('./api/smsQueueReport'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xd0'),require(_0xc46f('0xd1')));_0x46315d['use'](_0xc46f('0xd2'),require(_0xc46f('0xd3')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xd4'),require('./api/jscriptyProject'));_0x46315d['use'](_0xc46f('0xd5'),require(_0xc46f('0xd6')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xd7'),require('./api/squareOdbc'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xd8'),require(_0xc46f('0xd9')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xda'),require(_0xc46f('0xdb')));_0x46315d['use'](_0xc46f('0xdc'),require(_0xc46f('0xdd')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xde'),require(_0xc46f('0xdf')));_0x46315d[_0xc46f('0x8')]('/api/license',require(_0xc46f('0xe0')));_0x46315d[_0xc46f('0x8')]('/api/campaigns',require(_0xc46f('0xe1')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xe2'),require('./api/migration'));_0x46315d[_0xc46f('0x8')]('/api/attachments',require(_0xc46f('0xe3')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xe4'),require(_0xc46f('0xe5')));_0x46315d[_0xc46f('0x8')]('/api/mail/reports/transfer',require(_0xc46f('0xe6')));_0x46315d['use']('/api/chat/reports/transfer',require(_0xc46f('0xe7')));_0x46315d['use']('/api/fax/reports/transfer',require(_0xc46f('0xe8')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xe9'),require(_0xc46f('0xea')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xeb'),require(_0xc46f('0xec')));_0x46315d['use']('/api/cm/lists',require(_0xc46f('0xed')));_0x46315d[_0xc46f('0x8')]('/api/voice/prefixes',require(_0xc46f('0xee')));_0x46315d['use']('/api/userProfiles',require('./api/userProfile'));_0x46315d['use'](_0xc46f('0xef'),require('./api/userProfileSection'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xf0'),require('./api/userProfileResource'));_0x46315d[_0xc46f('0x8')](_0xc46f('0xf1'),require(_0xc46f('0xf2')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xf3'),require(_0xc46f('0xf4')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xf5'),require('./api/jira'));_0x46315d[_0xc46f('0x8')]('/api/rpc',require(_0xc46f('0xf6')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xf7'),require(_0xc46f('0xf8')));_0x46315d[_0xc46f('0x8')]('/api/system',require(_0xc46f('0xf9')));_0x46315d[_0xc46f('0x8')]('/api/pm2',require(_0xc46f('0xfa')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xfb'),express[_0xc46f('0xfc')](path[_0xc46f('0xfd')](config[_0xc46f('0xfe')],'/apidoc')));_0x46315d[_0xc46f('0x8')](_0xc46f('0xff'),express[_0xc46f('0xfc')](path[_0xc46f('0xfd')](config[_0xc46f('0xfe')],_0xc46f('0xff'))));_0x46315d[_0xc46f('0x8')](_0xc46f('0x100'),express['static'](path['join'](config[_0xc46f('0xfe')],_0xc46f('0x100'))));_0x46315d[_0xc46f('0x8')](_0xc46f('0x101'),express[_0xc46f('0xfc')](path[_0xc46f('0xfd')](config[_0xc46f('0xfe')],_0xc46f('0x102'),'1.0.12')));_0x46315d[_0xc46f('0x8')](_0xc46f('0x103'),express[_0xc46f('0xfc')](path[_0xc46f('0xfd')](config[_0xc46f('0xfe')],_0xc46f('0x104'))));_0x46315d[_0xc46f('0x105')]('/:url(api|auth|components|app|bower_components|assets)/*')[_0xc46f('0x106')](errors[0x194]);_0x46315d['route']('/*')[_0xc46f('0x106')](function(_0x49307a,_0x3a519c){_0x3a519c[_0xc46f('0x107')](path[_0xc46f('0x108')](_0x46315d[_0xc46f('0x106')](_0xc46f('0x109'))+_0xc46f('0x10a')));});};
\ No newline at end of file
index bfeb754..cbe2a9a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2bbb=['merge','../api/user/user.rpc','../api/voiceQueue/voiceQueue.rpc','../api/voiceRecording/voiceRecording.rpc','../api/voiceCallReport/voiceCallReport.rpc','../api/voiceQueueReport/voiceQueueReport.rpc','../api/memberReport/memberReport.rpc','../api/userVoiceQueueRt/userVoiceQueueRt.rpc','../api/mailServerIn/mailServerIn.rpc','../api/mailAccount/mailAccount.rpc','../api/mailQueue/mailQueue.rpc','../api/mailInteraction/mailInteraction.rpc','../api/mailApplication/mailApplication.rpc','../api/mailQueueReport/mailQueueReport.rpc','../api/faxApplication/faxApplication.rpc','../api/faxInteraction/faxInteraction.rpc','../api/faxMessage/faxMessage.rpc','../api/faxQueue/faxQueue.rpc','../api/faxQueueReport/faxQueueReport.rpc','../api/smsAccount/smsAccount.rpc','../api/smsInteraction/smsInteraction.rpc','../api/smsMessage/smsMessage.rpc','../api/smsQueue/smsQueue.rpc','../api/openchannelInteraction/openchannelInteraction.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/cmHopperBlack/cmHopperBlack.rpc','../api/cmHopperHistory/cmHopperHistory.rpc','../api/reportAgentPreview/reportAgentPreview.rpc','../api/interval/interval.rpc','../api/pause/pause.rpc','../api/sound/sound.rpc','../api/template/template.rpc','../api/intSalesforceAccount/intSalesforceAccount.rpc','../api/intSugarcrmAccount/intSugarcrmAccount.rpc','../api/intDeskAccount/intDeskAccount.rpc','../api/intZohoAccount/intZohoAccount.rpc','../api/intZendeskAccount/intZendeskAccount.rpc','../api/intFreshdeskAccount/intFreshdeskAccount.rpc','../api/intVtigerAccount/intVtigerAccount.rpc','../api/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/attachment/attachment.rpc','../api/plugin/plugin.rpc','server','http','rpc','port','localhost','error','listen','Express\x20RPC\x20server\x20listening\x20on\x20%s:%d!','../config/triggers','default','RPC\x20listening\x20on\x20','bluebird','lodash','../config/environment'];(function(_0x40faba,_0xe0b173){var _0x225232=function(_0x575185){while(--_0x575185){_0x40faba['push'](_0x40faba['shift']());}};_0x225232(++_0xe0b173);}(_0x2bbb,0x85));var _0xb2bb=function(_0x134519,_0x45c5c3){_0x134519=_0x134519-0x0;var _0x48bf31=_0x2bbb[_0x134519];return _0x48bf31;};'use strict';var jayson=require('jayson/promise');var BPromise=require(_0xb2bb('0x0'));var _=require(_0xb2bb('0x1'));var config=require(_0xb2bb('0x2'));exports['listen']=function(){return new BPromise(function(_0x2a4072,_0x30b641){var _0x14da5e={};_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x4')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/voiceExtension/voiceExtension.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x5')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x6')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x7')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/voiceDialReport/voiceDialReport.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/voiceAgentReport/voiceAgentReport.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x8')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x9')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/trunk/trunk.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/voiceTransferReport/voiceTransferReport.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0xa')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0xb')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0xc')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0xd')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0xe')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/mailMessage/mailMessage.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0xf')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x10')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/faxAccount/faxAccount.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x11')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x12')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x13')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x14')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x15')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x16')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x17')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x18')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x19')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/openchannelApplication/openchannelApplication.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x1a')));_0x14da5e=_['merge'](_0x14da5e,require('../api/openchannelMessage/openchannelMessage.rpc'));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x1b')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x1c')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x1d')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x1e')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x1f')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x20')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/cmHopper/cmHopper.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x21')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/cmHopperFinal/cmHopperFinal.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x22')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x23')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x24')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x25')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x26')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x27')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/trigger/trigger.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/variable/variable.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x28')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x29')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x2a')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x2b')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x2c')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x2d')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x2e')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x2f')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x30')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x31')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x32')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x33')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x34')));_0x14da5e=_['merge'](_0x14da5e,require('../api/squareOdbc/squareOdbc.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x35')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x36')));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/squareMessage/squareMessage.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require('../api/campaign/campaign.rpc'));_0x14da5e=_[_0xb2bb('0x3')](_0x14da5e,require(_0xb2bb('0x37')));_0x14da5e=_['merge'](_0x14da5e,require(_0xb2bb('0x38')));var _0x2510f4=jayson[_0xb2bb('0x39')](_0x14da5e)[_0xb2bb('0x3a')]();var _0x586e74=config[_0xb2bb('0x3b')][_0xb2bb('0x3c')]||config[_0xb2bb('0x3c')]+0x1;var _0x32cdfe=config[_0xb2bb('0x3b')]['ip']||_0xb2bb('0x3d');_0x2510f4['on'](_0xb2bb('0x3e'),function(_0x2b7263){return _0x30b641(_0x2b7263);});_0x2510f4[_0xb2bb('0x3f')](_0x586e74,_0x32cdfe,function(){console['log'](_0xb2bb('0x40'),_0x32cdfe,_0x586e74);require(_0xb2bb('0x41'))[_0xb2bb('0x42')]();return _0x2a4072(_0xb2bb('0x43')+_0x32cdfe+':'+_0x586e74);});});};
\ No newline at end of file
+var _0x8d0e=['default','RPC\x20listening\x20on\x20','jayson/promise','bluebird','lodash','../config/environment','listen','merge','../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/mailAccount/mailAccount.rpc','../api/mailQueue/mailQueue.rpc','../api/mailMessage/mailMessage.rpc','../api/mailApplication/mailApplication.rpc','../api/mailQueueReport/mailQueueReport.rpc','../api/faxAccount/faxAccount.rpc','../api/faxApplication/faxApplication.rpc','../api/faxInteraction/faxInteraction.rpc','../api/faxQueue/faxQueue.rpc','../api/faxQueueReport/faxQueueReport.rpc','../api/smsAccount/smsAccount.rpc','../api/smsInteraction/smsInteraction.rpc','../api/openchannelApplication/openchannelApplication.rpc','../api/openchannelInteraction/openchannelInteraction.rpc','../api/openchannelMessage/openchannelMessage.rpc','../api/openchannelQueue/openchannelQueue.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/reportAgentPreview/reportAgentPreview.rpc','../api/interval/interval.rpc','../api/sound/sound.rpc','../api/template/template.rpc','../api/intSugarcrmAccount/intSugarcrmAccount.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/smsQueueReport/smsQueueReport.rpc','../api/squareReport/squareReport.rpc','../api/squareReportDetail/squareReportDetail.rpc','../api/squareOdbc/squareOdbc.rpc','../api/squareProject/squareProject.rpc','../api/squareRecording/squareRecording.rpc','../api/campaign/campaign.rpc','../api/plugin/plugin.rpc','server','http','rpc','port','localhost','error','Express\x20RPC\x20server\x20listening\x20on\x20%s:%d!','../config/triggers'];(function(_0xd637a3,_0x19b904){var _0x180a84=function(_0x2fc05a){while(--_0x2fc05a){_0xd637a3['push'](_0xd637a3['shift']());}};_0x180a84(++_0x19b904);}(_0x8d0e,0x1d7));var _0xe8d0=function(_0x3adf62,_0x9b2a2a){_0x3adf62=_0x3adf62-0x0;var _0x55c8a4=_0x8d0e[_0x3adf62];return _0x55c8a4;};'use strict';var jayson=require(_0xe8d0('0x0'));var BPromise=require(_0xe8d0('0x1'));var _=require(_0xe8d0('0x2'));var config=require(_0xe8d0('0x3'));exports[_0xe8d0('0x4')]=function(){return new BPromise(function(_0x3584ab,_0x15521e){var _0x940176={};_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/user/user.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/voiceExtension/voiceExtension.rpc'));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x6')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x7')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x8')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x9')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/voiceAgentReport/voiceAgentReport.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0xa')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/memberReport/memberReport.rpc'));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0xb')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0xc')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0xd')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/mailServerIn/mailServerIn.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0xe')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0xf')));_0x940176=_['merge'](_0x940176,require('../api/mailInteraction/mailInteraction.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x10')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x11')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x12')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x13')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x14')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x15')));_0x940176=_['merge'](_0x940176,require('../api/faxMessage/faxMessage.rpc'));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x16')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x17')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x18')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x19')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/smsMessage/smsMessage.rpc'));_0x940176=_['merge'](_0x940176,require('../api/smsQueue/smsQueue.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x1a')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x1b')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x1c')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x1d')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/openchannelQueueReport/openchannelQueueReport.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x1e')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x1f')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x20')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x21')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x22')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x23')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x24')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x25')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x26')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x27')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/pause/pause.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x28')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x29')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/trigger/trigger.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/variable/variable.rpc'));_0x940176=_['merge'](_0x940176,require('../api/intSalesforceAccount/intSalesforceAccount.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x2a')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/intDeskAccount/intDeskAccount.rpc'));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x2b')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x2c')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x2d')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x2e')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x2f')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x30')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/chatQueueReport/chatQueueReport.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x31')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x32')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x33')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x34')));_0x940176=_['merge'](_0x940176,require(_0xe8d0('0x35')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x36')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/squareMessage/squareMessage.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x37')));_0x940176=_[_0xe8d0('0x5')](_0x940176,require('../api/attachment/attachment.rpc'));_0x940176=_[_0xe8d0('0x5')](_0x940176,require(_0xe8d0('0x38')));var _0xdfc807=jayson[_0xe8d0('0x39')](_0x940176)[_0xe8d0('0x3a')]();var _0x47aa5d=config[_0xe8d0('0x3b')][_0xe8d0('0x3c')]||config[_0xe8d0('0x3c')]+0x1;var _0x3d76d5=config[_0xe8d0('0x3b')]['ip']||_0xe8d0('0x3d');_0xdfc807['on'](_0xe8d0('0x3e'),function(_0xcab4b5){return _0x15521e(_0xcab4b5);});_0xdfc807['listen'](_0x47aa5d,_0x3d76d5,function(){console['log'](_0xe8d0('0x3f'),_0x3d76d5,_0x47aa5d);require(_0xe8d0('0x40'))[_0xe8d0('0x41')]();return _0x3584ab(_0xe8d0('0x42')+_0x3d76d5+':'+_0x47aa5d);});});};
\ No newline at end of file
index 79918d5..aa9b41f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb187=['continueAt','getVariable','recordFile','BEEP','RECORD\x20FILE\x20\x22%s\x22\x20\x22%s\x22\x20\x22%s\x22\x20%s\x20%s\x20%s','STREAM\x20FILE\x20\x22%s\x22\x20\x22%s\x22','agi','AGI','wait','ID:%s\x20-\x20LABEL:\x20%s\x20-\x20MSG:\x20%s','exports','lodash','call','utf8','setTimeout','setEncoding','headers','emit','ready','line','toLowerCase','hangup','substring','520-Invalid','search','520\x20End\x20of\x20proper','function','no\x20code','replace','result=','indexOf','substr','startsWith','split','length','match','error','E_AGI_SOCKET_ERROR','code','close','E_AGI_SOCKET_CLOSE','E_AGI_SOCKET_TIMEOUT','destroy','pipe','command','inherits','sendRequest','sync','prototype','answer','ANSWER','getData','beep','format','GET\x20DATA\x20\x22%s\x22\x20%s\x20%s','noop','NO\x20MESSAGE','VERBOSE\x20\x22%s\x22','exec','isArray','join','EXEC\x20%s\x20%s','setContext','setExtension','SET\x20EXTENSION\x20%s','SET\x20PRIORITY\x20%s','HANGUP','setVariable','toString','SAY\x20NUMBER\x20%s\x20%s','sayDigits','SAY\x20DIGITS\x20%s\x20%s','SAY\x20PHONETIC\x20\x22%s\x22\x20%s'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xb187,0x9d));var _0x7b18=function(_0x434ab8,_0x164e29){_0x434ab8=_0x434ab8-0x0;var _0x4173a2=_0xb187[_0x434ab8];return _0x4173a2;};'use strict';var util=require('util');var _=require(_0x7b18('0x0'));var EventEmitter=require('events')['EventEmitter'];var AGIReply=require('./reply');var AGIError=require('./error');function AGIChannel(_0x3e3d99){var _0x28a21b=this,_0x745529=new AGIReply(),_0x20b695=![],_0x635c22={};EventEmitter[_0x7b18('0x1')](_0x28a21b);_0x3e3d99['setEncoding'](_0x7b18('0x2'));_0x3e3d99[_0x7b18('0x3')](0x8*0x3c*0x3c*0x3e8);_0x745529[_0x7b18('0x4')](_0x7b18('0x2'));_0x745529['on'](_0x7b18('0x5'),function(_0x44fae3){for(var _0x4994ce in _0x44fae3){_0x28a21b[_0x4994ce]=_0x44fae3[_0x4994ce];}_0x28a21b[_0x7b18('0x6')](_0x7b18('0x7'));});_0x745529['on'](_0x7b18('0x8'),function(_0xafc29d){if(_0xafc29d[_0x7b18('0x9')]()==_0x7b18('0xa')){_0x28a21b[_0x7b18('0x6')]('hangup');return;}if(_0xafc29d[_0x7b18('0xb')](0x0,0xb)==_0x7b18('0xc')){_0x20b695=!![];}if(_0x20b695){_0x635c22['rx']+=_0xafc29d+'\x0a';if(_0xafc29d[_0x7b18('0xd')](_0x7b18('0xe'))!=-0x1){_0x20b695=![];}}else{_0x635c22['rx']=_0xafc29d;}if(_0x20b695){return;}if(typeof _0x635c22['cb']==_0x7b18('0xf')){var _0xc110b7=_0x635c22['rx'][_0x7b18('0xb')](0x0,0x3),_0x5e0cd4=null,_0x2bc295=null;_0xc110b7=parseInt(_0xc110b7);if(isNaN(_0xc110b7)){_0x635c22['cb'](null,{'code':0x1f4,'result':-0x1,'extra':_0x7b18('0x10')});return;}if(_0xc110b7!=0xc8){_0x635c22['cb'](null,{'code':_0xc110b7,'result':-0x1,'extra':'KO'});return;}_0x5e0cd4=_0x635c22['rx']['substring'](0x4)[_0x7b18('0x11')](_0x7b18('0x12'),'');if(_0x5e0cd4[_0x7b18('0x13')]('\x20')!=-0x1){_0x5e0cd4=_0x5e0cd4[_0x7b18('0x14')](0x0,_0x5e0cd4[_0x7b18('0x13')]('\x20'));}if(_[_0x7b18('0x15')](_0x5e0cd4,'-1')){_0x5e0cd4=parseInt(_0x5e0cd4);}_0x2bc295=_0x635c22['rx'][_0x7b18('0x16')]('\x20');if(_0x2bc295[_0x7b18('0x17')]==0x3){_0x2bc295=_0x2bc295[0x2][_0x7b18('0xb')](0x1,_0x2bc295[0x2][_0x7b18('0x17')]-0x1);}else if(_0x2bc295[_0x7b18('0x17')]>0x3){var _0x31414e=/\((.+)\)/;var _0x52faed=_0x635c22['rx'][_0x7b18('0x18')](_0x31414e);if(_0x52faed){_0x2bc295=_0x52faed[0x1];}else{_0x2bc295=null;}}else{_0x2bc295=null;}_0x635c22['cb'](null,{'code':_0xc110b7,'result':_0x5e0cd4,'extra':_0x2bc295});}});_0x3e3d99['on'](_0x7b18('0x19'),function(_0x1f2a03){_0x28a21b[_0x7b18('0x6')](_0x7b18('0x19'),new AGIError(_0x7b18('0x1a'),_0x1f2a03[_0x7b18('0x1b')]));});_0x3e3d99['on']('close',function(){_0x28a21b[_0x7b18('0x6')](_0x7b18('0x1c'),new AGIError(_0x7b18('0x1d')));});_0x3e3d99['on']('timeout',function(){_0x28a21b[_0x7b18('0x6')]('timeout',new AGIError(_0x7b18('0x1e')));_0x3e3d99[_0x7b18('0x1f')]();});_0x3e3d99[_0x7b18('0x20')](_0x745529);this[_0x7b18('0x21')]=function(_0x17ca08,_0xae6015){var _0x17ca08=_0x17ca08||'',_0xae6015=typeof _0xae6015==_0x7b18('0xf')?_0xae6015:new Function();_0x635c22={'tx':_0x17ca08,'rx':'','cb':_0xae6015};_0x3e3d99['write'](_0x17ca08+'\x0a');},this[_0x7b18('0x1c')]=function(){_0x3e3d99[_0x7b18('0x1f')]();};}util[_0x7b18('0x22')](AGIChannel,EventEmitter);AGIChannel['prototype'][_0x7b18('0x23')]=function(_0x1bc1ee){return this[_0x7b18('0x21')][_0x7b18('0x24')](this,_0x1bc1ee);};AGIChannel[_0x7b18('0x25')][_0x7b18('0x26')]=function(){return this[_0x7b18('0x23')](_0x7b18('0x27'));};AGIChannel[_0x7b18('0x25')][_0x7b18('0x28')]=function(_0x42259b,_0x7d863a,_0x2c55b2){_0x42259b=_0x42259b===undefined?_0x7b18('0x29'):_0x42259b;_0x7d863a=_0x7d863a===undefined?'5':_0x7d863a;_0x2c55b2=_0x2c55b2===undefined?'1':_0x2c55b2;return this[_0x7b18('0x23')](util[_0x7b18('0x2a')](_0x7b18('0x2b'),_0x42259b,_0x7d863a*0x3e8,_0x2c55b2));};AGIChannel[_0x7b18('0x25')][_0x7b18('0x2c')]=function(_0x726a17){_0x726a17=_0x726a17||_0x7b18('0x2d');return this['sendRequest'](util[_0x7b18('0x2a')](_0x7b18('0x2e'),_0x726a17));};AGIChannel[_0x7b18('0x25')][_0x7b18('0x2f')]=function(_0x21595a,_0x37f132){if(_[_0x7b18('0x30')](_0x37f132)){return this[_0x7b18('0x23')](util[_0x7b18('0x2a')]('EXEC\x20%s\x20%s',_0x21595a,_0x37f132[_0x7b18('0x31')](',')));}return this[_0x7b18('0x23')](util[_0x7b18('0x2a')](_0x7b18('0x32'),_0x21595a,_0x37f132));};AGIChannel['prototype'][_0x7b18('0x33')]=function(_0x6e4a87){return this[_0x7b18('0x23')](util[_0x7b18('0x2a')]('SET\x20CONTEXT\x20%s',_0x6e4a87));};AGIChannel[_0x7b18('0x25')][_0x7b18('0x34')]=function(_0x49227a){return this[_0x7b18('0x23')](util[_0x7b18('0x2a')](_0x7b18('0x35'),_0x49227a));};AGIChannel[_0x7b18('0x25')]['setPriority']=function(_0x2d9bee){return this[_0x7b18('0x23')](util['format'](_0x7b18('0x36'),_0x2d9bee));};AGIChannel['prototype'][_0x7b18('0xa')]=function(){return this['sendRequest'](_0x7b18('0x37'));};AGIChannel[_0x7b18('0x25')][_0x7b18('0x38')]=function(_0xf8c101,_0x461e96){return this[_0x7b18('0x23')](util[_0x7b18('0x2a')]('SET\x20VARIABLE\x20%s\x20\x22%s\x22',_0xf8c101,_0x461e96?_0x461e96[_0x7b18('0x39')]()['replace'](/(\r\n|\n|\r)/gm,'\x20'):''));};AGIChannel[_0x7b18('0x25')]['sayNumber']=function(_0x4cf7b0,_0x23d65d){return this[_0x7b18('0x23')](util[_0x7b18('0x2a')](_0x7b18('0x3a'),_0x4cf7b0,_0x23d65d));};AGIChannel['prototype'][_0x7b18('0x3b')]=function(_0x325694,_0x56f9b6){return this[_0x7b18('0x23')](util['format'](_0x7b18('0x3c'),_0x325694,_0x56f9b6));};AGIChannel[_0x7b18('0x25')]['sayPhonetic']=function(_0x52aa74,_0x450cb4){return this[_0x7b18('0x23')](util[_0x7b18('0x2a')](_0x7b18('0x3d'),_0x52aa74,_0x450cb4));};AGIChannel['prototype'][_0x7b18('0x3e')]=function(_0x5d6b5c,_0x5468c2,_0x2c96df){_0x5468c2=_0x5468c2||this['extension'];_0x2c96df=_0x2c96df||0x1;this['setContext'](_0x5d6b5c);this[_0x7b18('0x34')](_0x5468c2);this['setPriority'](_0x2c96df);return this['noop'](util['format']('GOTO\x20%s\x20%s\x20%s',_0x5d6b5c,_0x5468c2,_0x2c96df));};AGIChannel[_0x7b18('0x25')][_0x7b18('0x3f')]=function(_0x1af333){return this[_0x7b18('0x23')](util['format']('GET\x20VARIABLE\x20\x22%s\x22',_0x1af333));};AGIChannel[_0x7b18('0x25')][_0x7b18('0x40')]=function(_0x5d5517,_0x260e9a,_0x59109a,_0x2996a1,_0x51910d,_0x384065){_0x260e9a=_0x260e9a||'wav';_0x59109a=_0x59109a||'';_0x2996a1=_0x2996a1===undefined?-0x1:_0x2996a1==='-1'?-0x1:_0x2996a1*0x3e8;_0x51910d=_0x51910d===undefined?'':'s='+_0x51910d;_0x384065=_0x384065?_0x7b18('0x41'):'';return this['sendRequest'](util[_0x7b18('0x2a')](_0x7b18('0x42'),_0x5d5517,_0x260e9a,_0x59109a,_0x2996a1,_0x384065,_0x51910d));};AGIChannel[_0x7b18('0x25')]['streamFile']=function(_0xbbf5d1,_0x58c155){_0x58c155=_0x58c155||'';return this[_0x7b18('0x23')](util['format'](_0x7b18('0x43'),_0xbbf5d1,_0x58c155));};AGIChannel[_0x7b18('0x25')][_0x7b18('0x44')]=function(_0xf8337e){return this[_0x7b18('0x2f')](_0x7b18('0x45'),_0xf8337e);};AGIChannel[_0x7b18('0x25')][_0x7b18('0x46')]=function(_0x5bd6e8){return this[_0x7b18('0x2f')]('WAIT',_0x5bd6e8);};AGIChannel[_0x7b18('0x25')][_0x7b18('0x19')]=function(_0x1c4911,_0x168d32){this[_0x7b18('0x2c')](util[_0x7b18('0x2a')](_0x7b18('0x47'),_0x1c4911['id'],_0x1c4911['label'],_0x168d32));return{'code':0x1f4,'result':'-1','extra':''};};module[_0x7b18('0x48')]=AGIChannel;
\ No newline at end of file
+var _0x1915=['timeout','E_AGI_SOCKET_TIMEOUT','destroy','sendRequest','command','sync','ANSWER','prototype','format','GET\x20DATA\x20\x22%s\x22\x20%s\x20%s','noop','VERBOSE\x20\x22%s\x22','isArray','join','setContext','SET\x20CONTEXT\x20%s','setPriority','SET\x20PRIORITY\x20%s','HANGUP','setVariable','SET\x20VARIABLE\x20%s\x20\x22%s\x22','toString','sayNumber','SAY\x20NUMBER\x20%s\x20%s','sayDigits','SAY\x20DIGITS\x20%s\x20%s','sayPhonetic','SAY\x20PHONETIC\x20\x22%s\x22\x20%s','continueAt','extension','setExtension','GOTO\x20%s\x20%s\x20%s','getVariable','GET\x20VARIABLE\x20\x22%s\x22','recordFile','wav','BEEP','RECORD\x20FILE\x20\x22%s\x22\x20\x22%s\x22\x20\x22%s\x22\x20%s\x20%s\x20%s','streamFile','STREAM\x20FILE\x20\x22%s\x22\x20\x22%s\x22','agi','exec','AGI','wait','WAIT','ID:%s\x20-\x20LABEL:\x20%s\x20-\x20MSG:\x20%s','label','lodash','events','./reply','./error','call','setEncoding','utf8','setTimeout','headers','emit','ready','line','toLowerCase','hangup','substring','function','no\x20code','replace','result=','indexOf','substr','startsWith','length','match','error','code','close','E_AGI_SOCKET_CLOSE'];(function(_0x42927f,_0x92bbfe){var _0x542298=function(_0x1f0c80){while(--_0x1f0c80){_0x42927f['push'](_0x42927f['shift']());}};_0x542298(++_0x92bbfe);}(_0x1915,0x15b));var _0x5191=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x1915[_0x321bb2];return _0x9c12ed;};'use strict';var util=require('util');var _=require(_0x5191('0x0'));var EventEmitter=require(_0x5191('0x1'))['EventEmitter'];var AGIReply=require(_0x5191('0x2'));var AGIError=require(_0x5191('0x3'));function AGIChannel(_0x5a776c){var _0x578fe6=this,_0x53a96e=new AGIReply(),_0x12c10d=![],_0x4e33bb={};EventEmitter[_0x5191('0x4')](_0x578fe6);_0x5a776c[_0x5191('0x5')](_0x5191('0x6'));_0x5a776c[_0x5191('0x7')](0x8*0x3c*0x3c*0x3e8);_0x53a96e[_0x5191('0x5')](_0x5191('0x6'));_0x53a96e['on'](_0x5191('0x8'),function(_0x5ea75d){for(var _0x283a10 in _0x5ea75d){_0x578fe6[_0x283a10]=_0x5ea75d[_0x283a10];}_0x578fe6[_0x5191('0x9')](_0x5191('0xa'));});_0x53a96e['on'](_0x5191('0xb'),function(_0x55e3cf){if(_0x55e3cf[_0x5191('0xc')]()==_0x5191('0xd')){_0x578fe6[_0x5191('0x9')](_0x5191('0xd'));return;}if(_0x55e3cf[_0x5191('0xe')](0x0,0xb)=='520-Invalid'){_0x12c10d=!![];}if(_0x12c10d){_0x4e33bb['rx']+=_0x55e3cf+'\x0a';if(_0x55e3cf['search']('520\x20End\x20of\x20proper')!=-0x1){_0x12c10d=![];}}else{_0x4e33bb['rx']=_0x55e3cf;}if(_0x12c10d){return;}if(typeof _0x4e33bb['cb']==_0x5191('0xf')){var _0x17fd07=_0x4e33bb['rx']['substring'](0x0,0x3),_0x4c3ea0=null,_0x32d8b2=null;_0x17fd07=parseInt(_0x17fd07);if(isNaN(_0x17fd07)){_0x4e33bb['cb'](null,{'code':0x1f4,'result':-0x1,'extra':_0x5191('0x10')});return;}if(_0x17fd07!=0xc8){_0x4e33bb['cb'](null,{'code':_0x17fd07,'result':-0x1,'extra':'KO'});return;}_0x4c3ea0=_0x4e33bb['rx'][_0x5191('0xe')](0x4)[_0x5191('0x11')](_0x5191('0x12'),'');if(_0x4c3ea0[_0x5191('0x13')]('\x20')!=-0x1){_0x4c3ea0=_0x4c3ea0[_0x5191('0x14')](0x0,_0x4c3ea0[_0x5191('0x13')]('\x20'));}if(_[_0x5191('0x15')](_0x4c3ea0,'-1')){_0x4c3ea0=parseInt(_0x4c3ea0);}_0x32d8b2=_0x4e33bb['rx']['split']('\x20');if(_0x32d8b2[_0x5191('0x16')]==0x3){_0x32d8b2=_0x32d8b2[0x2]['substring'](0x1,_0x32d8b2[0x2][_0x5191('0x16')]-0x1);}else if(_0x32d8b2[_0x5191('0x16')]>0x3){var _0x55a02f=/\((.+)\)/;var _0x36e2a1=_0x4e33bb['rx'][_0x5191('0x17')](_0x55a02f);if(_0x36e2a1){_0x32d8b2=_0x36e2a1[0x1];}else{_0x32d8b2=null;}}else{_0x32d8b2=null;}_0x4e33bb['cb'](null,{'code':_0x17fd07,'result':_0x4c3ea0,'extra':_0x32d8b2});}});_0x5a776c['on'](_0x5191('0x18'),function(_0x3b6993){_0x578fe6[_0x5191('0x9')]('error',new AGIError('E_AGI_SOCKET_ERROR',_0x3b6993[_0x5191('0x19')]));});_0x5a776c['on'](_0x5191('0x1a'),function(){_0x578fe6[_0x5191('0x9')]('close',new AGIError(_0x5191('0x1b')));});_0x5a776c['on']('timeout',function(){_0x578fe6['emit'](_0x5191('0x1c'),new AGIError(_0x5191('0x1d')));_0x5a776c[_0x5191('0x1e')]();});_0x5a776c['pipe'](_0x53a96e);this['command']=function(_0x2d1b9c,_0x7eb0e7){var _0x2d1b9c=_0x2d1b9c||'',_0x7eb0e7=typeof _0x7eb0e7==_0x5191('0xf')?_0x7eb0e7:new Function();_0x4e33bb={'tx':_0x2d1b9c,'rx':'','cb':_0x7eb0e7};_0x5a776c['write'](_0x2d1b9c+'\x0a');},this[_0x5191('0x1a')]=function(){_0x5a776c[_0x5191('0x1e')]();};}util['inherits'](AGIChannel,EventEmitter);AGIChannel['prototype'][_0x5191('0x1f')]=function(_0x34aa75){return this[_0x5191('0x20')][_0x5191('0x21')](this,_0x34aa75);};AGIChannel['prototype']['answer']=function(){return this[_0x5191('0x1f')](_0x5191('0x22'));};AGIChannel[_0x5191('0x23')]['getData']=function(_0x150544,_0x2ac6d3,_0x4777d3){_0x150544=_0x150544===undefined?'beep':_0x150544;_0x2ac6d3=_0x2ac6d3===undefined?'5':_0x2ac6d3;_0x4777d3=_0x4777d3===undefined?'1':_0x4777d3;return this['sendRequest'](util[_0x5191('0x24')](_0x5191('0x25'),_0x150544,_0x2ac6d3*0x3e8,_0x4777d3));};AGIChannel['prototype'][_0x5191('0x26')]=function(_0x5dcc33){_0x5dcc33=_0x5dcc33||'NO\x20MESSAGE';return this[_0x5191('0x1f')](util[_0x5191('0x24')](_0x5191('0x27'),_0x5dcc33));};AGIChannel[_0x5191('0x23')]['exec']=function(_0xbfec56,_0x1383ca){if(_[_0x5191('0x28')](_0x1383ca)){return this[_0x5191('0x1f')](util[_0x5191('0x24')]('EXEC\x20%s\x20%s',_0xbfec56,_0x1383ca[_0x5191('0x29')](',')));}return this[_0x5191('0x1f')](util[_0x5191('0x24')]('EXEC\x20%s\x20%s',_0xbfec56,_0x1383ca));};AGIChannel[_0x5191('0x23')][_0x5191('0x2a')]=function(_0x1da1ba){return this[_0x5191('0x1f')](util[_0x5191('0x24')](_0x5191('0x2b'),_0x1da1ba));};AGIChannel['prototype']['setExtension']=function(_0x145b0b){return this[_0x5191('0x1f')](util['format']('SET\x20EXTENSION\x20%s',_0x145b0b));};AGIChannel['prototype'][_0x5191('0x2c')]=function(_0x3b5f6f){return this['sendRequest'](util[_0x5191('0x24')](_0x5191('0x2d'),_0x3b5f6f));};AGIChannel[_0x5191('0x23')]['hangup']=function(){return this[_0x5191('0x1f')](_0x5191('0x2e'));};AGIChannel[_0x5191('0x23')][_0x5191('0x2f')]=function(_0x459fba,_0x3553d6){return this[_0x5191('0x1f')](util[_0x5191('0x24')](_0x5191('0x30'),_0x459fba,_0x3553d6?_0x3553d6[_0x5191('0x31')]()[_0x5191('0x11')](/(\r\n|\n|\r)/gm,'\x20'):''));};AGIChannel['prototype'][_0x5191('0x32')]=function(_0x10bbe9,_0x2863d6){return this[_0x5191('0x1f')](util[_0x5191('0x24')](_0x5191('0x33'),_0x10bbe9,_0x2863d6));};AGIChannel[_0x5191('0x23')][_0x5191('0x34')]=function(_0x22be62,_0x3be370){return this[_0x5191('0x1f')](util[_0x5191('0x24')](_0x5191('0x35'),_0x22be62,_0x3be370));};AGIChannel[_0x5191('0x23')][_0x5191('0x36')]=function(_0x4ee340,_0x5ad2b0){return this[_0x5191('0x1f')](util['format'](_0x5191('0x37'),_0x4ee340,_0x5ad2b0));};AGIChannel[_0x5191('0x23')][_0x5191('0x38')]=function(_0x1de67c,_0x1e1f32,_0x2f5c27){_0x1e1f32=_0x1e1f32||this[_0x5191('0x39')];_0x2f5c27=_0x2f5c27||0x1;this[_0x5191('0x2a')](_0x1de67c);this[_0x5191('0x3a')](_0x1e1f32);this[_0x5191('0x2c')](_0x2f5c27);return this[_0x5191('0x26')](util[_0x5191('0x24')](_0x5191('0x3b'),_0x1de67c,_0x1e1f32,_0x2f5c27));};AGIChannel[_0x5191('0x23')][_0x5191('0x3c')]=function(_0x488060){return this[_0x5191('0x1f')](util[_0x5191('0x24')](_0x5191('0x3d'),_0x488060));};AGIChannel[_0x5191('0x23')][_0x5191('0x3e')]=function(_0x211737,_0x363ffc,_0x41577c,_0x9033a8,_0x1d0ebb,_0x2a25cf){_0x363ffc=_0x363ffc||_0x5191('0x3f');_0x41577c=_0x41577c||'';_0x9033a8=_0x9033a8===undefined?-0x1:_0x9033a8==='-1'?-0x1:_0x9033a8*0x3e8;_0x1d0ebb=_0x1d0ebb===undefined?'':'s='+_0x1d0ebb;_0x2a25cf=_0x2a25cf?_0x5191('0x40'):'';return this[_0x5191('0x1f')](util['format'](_0x5191('0x41'),_0x211737,_0x363ffc,_0x41577c,_0x9033a8,_0x2a25cf,_0x1d0ebb));};AGIChannel[_0x5191('0x23')][_0x5191('0x42')]=function(_0x11c551,_0x3ee5ad){_0x3ee5ad=_0x3ee5ad||'';return this[_0x5191('0x1f')](util[_0x5191('0x24')](_0x5191('0x43'),_0x11c551,_0x3ee5ad));};AGIChannel[_0x5191('0x23')][_0x5191('0x44')]=function(_0x21ad89){return this[_0x5191('0x45')](_0x5191('0x46'),_0x21ad89);};AGIChannel[_0x5191('0x23')][_0x5191('0x47')]=function(_0x49315b){return this['exec'](_0x5191('0x48'),_0x49315b);};AGIChannel[_0x5191('0x23')][_0x5191('0x18')]=function(_0x1bdd6c,_0x1ab8c8){this[_0x5191('0x26')](util[_0x5191('0x24')](_0x5191('0x49'),_0x1bdd6c['id'],_0x1bdd6c[_0x5191('0x4a')],_0x1ab8c8));return{'code':0x1f4,'result':'-1','extra':''};};module['exports']=AGIChannel;
\ No newline at end of file
index eace7d6..1962519 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeb61=['Empty\x20command.','Missing\x20\x27ivr.agi_network_script\x27.','Missing\x20\x27ivr.entry\x27\x20menu.','push','format','apply','name','exports','util','Undefined\x20error.','Argument\x20\x27port\x27\x20missing\x20in\x20function\x20call.','Server\x20error.\x20Code:\x20%s.','Server\x20closed.','[LICENSE]\x20Server\x20max\x20connection.\x20Count:\x20%s.','Socket\x20error.\x20Code:\x20%s.','Socket\x20closed.','Socket\x20timeout.'];(function(_0x49a1a0,_0x48f776){var _0x518a4f=function(_0x313633){while(--_0x313633){_0x49a1a0['push'](_0x49a1a0['shift']());}};_0x518a4f(++_0x48f776);}(_0xeb61,0x118));var _0x1eb6=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xeb61[_0x3dd15e];return _0x231fd0;};'use strict';var util=require(_0x1eb6('0x0'));var error={'E_AGI_UNDEFINED':_0x1eb6('0x1'),'E_AGI_ARGUMENT_PORT':_0x1eb6('0x2'),'E_AGI_SERVER_ERROR':_0x1eb6('0x3'),'E_AGI_SERVER_CLOSE':_0x1eb6('0x4'),'E_AGI_SERVER_MAXCONNECTION':_0x1eb6('0x5'),'E_AGI_SERVER_VOICE_DISABLED':'[LICENSE\x20VOICE]\x20Server\x20license\x20voice\x20disabled.','E_AGI_SOCKET_ERROR':_0x1eb6('0x6'),'E_AGI_SOCKET_CLOSE':_0x1eb6('0x7'),'E_AGI_SOCKET_TIMEOUT':_0x1eb6('0x8'),'E_AGI_COMMAND_EMPTY':_0x1eb6('0x9'),'E_AGI_IVR_AGI_NETWORK_SCRIPT':_0x1eb6('0xa'),'E_AGI_IVR_ENTRY':_0x1eb6('0xb')};function AGIError(_0x536f48){var _0x536f48=_0x536f48||null,_0x9223b4=_0x9223b4||[],_0x4f29a6=0x1,_0x1ecbb3='';if(!error[_0x536f48]){_0x536f48='E_AGI_UNDEFINED';}_0x9223b4[_0x1eb6('0xc')](error[_0x536f48]);while(arguments[_0x4f29a6]){_0x9223b4[_0x1eb6('0xc')](arguments[_0x4f29a6]);_0x4f29a6++;}_0x1ecbb3=util[_0x1eb6('0xd')][_0x1eb6('0xe')](util,_0x9223b4);this['message']=_0x1ecbb3;this[_0x1eb6('0xf')]=_0x536f48;}module[_0x1eb6('0x10')]=AGIError;
\ No newline at end of file
+var _0x008e=['[LICENSE]\x20Server\x20max\x20connection.\x20Count:\x20%s.','Socket\x20error.\x20Code:\x20%s.','Socket\x20timeout.','Empty\x20command.','E_AGI_UNDEFINED','push','apply','exports','Undefined\x20error.','Argument\x20\x27port\x27\x20missing\x20in\x20function\x20call.','Server\x20closed.'];(function(_0x1cd47d,_0x55bc75){var _0x29d52f=function(_0x37737a){while(--_0x37737a){_0x1cd47d['push'](_0x1cd47d['shift']());}};_0x29d52f(++_0x55bc75);}(_0x008e,0x19f));var _0xe008=function(_0x50755d,_0x442a1d){_0x50755d=_0x50755d-0x0;var _0x3f7ea8=_0x008e[_0x50755d];return _0x3f7ea8;};'use strict';var util=require('util');var error={'E_AGI_UNDEFINED':_0xe008('0x0'),'E_AGI_ARGUMENT_PORT':_0xe008('0x1'),'E_AGI_SERVER_ERROR':'Server\x20error.\x20Code:\x20%s.','E_AGI_SERVER_CLOSE':_0xe008('0x2'),'E_AGI_SERVER_MAXCONNECTION':_0xe008('0x3'),'E_AGI_SERVER_VOICE_DISABLED':'[LICENSE\x20VOICE]\x20Server\x20license\x20voice\x20disabled.','E_AGI_SOCKET_ERROR':_0xe008('0x4'),'E_AGI_SOCKET_CLOSE':'Socket\x20closed.','E_AGI_SOCKET_TIMEOUT':_0xe008('0x5'),'E_AGI_COMMAND_EMPTY':_0xe008('0x6'),'E_AGI_IVR_AGI_NETWORK_SCRIPT':'Missing\x20\x27ivr.agi_network_script\x27.','E_AGI_IVR_ENTRY':'Missing\x20\x27ivr.entry\x27\x20menu.'};function AGIError(_0x357b03){var _0x357b03=_0x357b03||null,_0xd9c33e=_0xd9c33e||[],_0x514e58=0x1,_0xc7c821='';if(!error[_0x357b03]){_0x357b03=_0xe008('0x7');}_0xd9c33e['push'](error[_0x357b03]);while(arguments[_0x514e58]){_0xd9c33e[_0xe008('0x8')](arguments[_0x514e58]);_0x514e58++;}_0xc7c821=util['format'][_0xe008('0x9')](util,_0xd9c33e);this['message']=_0xc7c821;this['name']=_0x357b03;}module[_0xe008('0xa')]=AGIError;
\ No newline at end of file
index b03d3fe..9f2d601 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd139=['includes','max\x20retry\x20reach','condition\x20not\x20found','exports','lodash','../../../config/logger','getdigits','getsecretdigits','vertices','edges','numberOfEdges','prototype','addVertex','addEdge','size','relations','traverseBFS','no\x20vertex\x20found','info','stop\x20traverse','length','no\x20edge/s\x20available','condition','split','agicommand','vswitch','target','menu','invalid','default\x20on\x20switch\x20not\x20found'];(function(_0x80a6ad,_0x132c02){var _0x315c42=function(_0x1d798f){while(--_0x1d798f){_0x80a6ad['push'](_0x80a6ad['shift']());}};_0x315c42(++_0x132c02);}(_0xd139,0x14e));var _0x9d13=function(_0x1cc75f,_0x8bf7aa){_0x1cc75f=_0x1cc75f-0x0;var _0x3440c6=_0xd139[_0x1cc75f];return _0x3440c6;};'use strict';var _=require(_0x9d13('0x0'));var logger=require(_0x9d13('0x1'))('agi');var verticesWithRetry=['menu',_0x9d13('0x2'),_0x9d13('0x3')];var Graph=function(){this[_0x9d13('0x4')]={};this[_0x9d13('0x5')]={};this[_0x9d13('0x6')]=0x0;};Graph[_0x9d13('0x7')][_0x9d13('0x8')]=function(_0x58c6f5){this[_0x9d13('0x4')][_0x58c6f5['id']]=_0x58c6f5;this[_0x9d13('0x5')][_0x58c6f5['id']]=[];};Graph['prototype'][_0x9d13('0x9')]=function(_0x4b3db0,_0x434ef6,_0x524947){this['edges'][_0x4b3db0]['push']({'target':_0x434ef6,'condition':_0x524947});this[_0x9d13('0x6')]+=0x1;};Graph[_0x9d13('0x7')][_0x9d13('0xa')]=function(){return _[_0x9d13('0xa')](this[_0x9d13('0x4')]);};Graph['prototype'][_0x9d13('0xb')]=function(){return this[_0x9d13('0x6')];};Graph[_0x9d13('0x7')]['getVertex']=function(_0x55f6d7){return this[_0x9d13('0x4')][_0x55f6d7];};Graph[_0x9d13('0x7')][_0x9d13('0xc')]=function(_0x331fea,_0x22acf6){if(!this['vertices'][_0x331fea]){return logger['info'](_0x9d13('0xd'));}var _0x43bf27=_0x22acf6(this[_0x9d13('0x4')][_0x331fea]);if(!_0x43bf27){return logger[_0x9d13('0xe')](_0x9d13('0xf'));}if(this[_0x9d13('0x5')][_0x331fea][_0x9d13('0x10')]===0x0){return logger['info'](_0x9d13('0x11'));}for(var _0x1b473e=0x0,_0x16a77b=[],_0x250234=![];_0x1b473e<this[_0x9d13('0x5')][_0x331fea][_0x9d13('0x10')];_0x1b473e+=0x1){if(this[_0x9d13('0x5')][_0x331fea][_0x1b473e][_0x9d13('0x12')]){_0x16a77b=this[_0x9d13('0x5')][_0x331fea][_0x1b473e][_0x9d13('0x12')][_0x9d13('0x13')](',');for(var _0x38acaf=0x0;_0x38acaf<_0x16a77b[_0x9d13('0x10')];_0x38acaf+=0x1){if(this['vertices'][_0x331fea][_0x9d13('0x14')]===_0x9d13('0x15')&&_0x16a77b[_0x38acaf]==='-'){_0x250234=this[_0x9d13('0x5')][_0x331fea][_0x1b473e][_0x9d13('0x16')];logger['info']('default',_0x16a77b[_0x38acaf],this['edges'][_0x331fea][_0x1b473e][_0x9d13('0x16')]);}else if(this[_0x9d13('0x4')][_0x331fea][_0x9d13('0x14')]===_0x9d13('0x17')&&_0x16a77b[_0x38acaf]==='i'){_0x250234=this[_0x9d13('0x5')][_0x331fea][_0x1b473e][_0x9d13('0x16')];logger[_0x9d13('0xe')](_0x9d13('0x18'),_0x16a77b[_0x38acaf],this['edges'][_0x331fea][_0x1b473e][_0x9d13('0x16')]);}if(_0x16a77b[_0x38acaf]===_0x43bf27){return this[_0x9d13('0xc')](this[_0x9d13('0x5')][_0x331fea][_0x1b473e][_0x9d13('0x16')],_0x22acf6);}}}else{return this['traverseBFS'](this[_0x9d13('0x5')][_0x331fea][_0x1b473e]['target'],_0x22acf6);}}if(_0x16a77b[_0x9d13('0x10')]){if(this[_0x9d13('0x4')][_0x331fea][_0x9d13('0x14')]===_0x9d13('0x15')){if(_0x250234){return this[_0x9d13('0xc')](_0x250234,_0x22acf6);}return logger[_0x9d13('0xe')](_0x9d13('0x19'));}else if(_[_0x9d13('0x1a')](verticesWithRetry,this['vertices'][_0x331fea][_0x9d13('0x14')])){if(_0x43bf27==='-'){return logger['info'](_0x9d13('0x1b'));}if(_0x250234&&_0x43bf27!=='t'){return this[_0x9d13('0xc')](_0x250234,_0x22acf6);}return this[_0x9d13('0xc')](_0x331fea,_0x22acf6);}return logger[_0x9d13('0xe')](_0x9d13('0x1c'));}};module[_0x9d13('0x1d')]=Graph;
\ No newline at end of file
+var _0xbee3=['vswitch','default','menu','target','invalid','default\x20on\x20switch\x20not\x20found','includes','max\x20retry\x20reach','condition\x20not\x20found','exports','../../../config/logger','getdigits','getsecretdigits','edges','numberOfEdges','prototype','vertices','addEdge','push','size','relations','traverseBFS','no\x20vertex\x20found','info','stop\x20traverse','length','condition','split','agicommand'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0xbee3,0xd5));var _0x3bee=function(_0x5b7613,_0x5de883){_0x5b7613=_0x5b7613-0x0;var _0x568fce=_0xbee3[_0x5b7613];return _0x568fce;};'use strict';var _=require('lodash');var logger=require(_0x3bee('0x0'))('agi');var verticesWithRetry=['menu',_0x3bee('0x1'),_0x3bee('0x2')];var Graph=function(){this['vertices']={};this[_0x3bee('0x3')]={};this[_0x3bee('0x4')]=0x0;};Graph[_0x3bee('0x5')]['addVertex']=function(_0x33fd9b){this[_0x3bee('0x6')][_0x33fd9b['id']]=_0x33fd9b;this['edges'][_0x33fd9b['id']]=[];};Graph[_0x3bee('0x5')][_0x3bee('0x7')]=function(_0x1b510d,_0x339223,_0xbdd5d5){this[_0x3bee('0x3')][_0x1b510d][_0x3bee('0x8')]({'target':_0x339223,'condition':_0xbdd5d5});this['numberOfEdges']+=0x1;};Graph[_0x3bee('0x5')][_0x3bee('0x9')]=function(){return _[_0x3bee('0x9')](this[_0x3bee('0x6')]);};Graph[_0x3bee('0x5')][_0x3bee('0xa')]=function(){return this['numberOfEdges'];};Graph[_0x3bee('0x5')]['getVertex']=function(_0x2da716){return this[_0x3bee('0x6')][_0x2da716];};Graph[_0x3bee('0x5')][_0x3bee('0xb')]=function(_0x410124,_0x459129){if(!this[_0x3bee('0x6')][_0x410124]){return logger['info'](_0x3bee('0xc'));}var _0x33504d=_0x459129(this[_0x3bee('0x6')][_0x410124]);if(!_0x33504d){return logger[_0x3bee('0xd')](_0x3bee('0xe'));}if(this['edges'][_0x410124]['length']===0x0){return logger[_0x3bee('0xd')]('no\x20edge/s\x20available');}for(var _0x2cfba7=0x0,_0x7e763c=[],_0x57d42c=![];_0x2cfba7<this['edges'][_0x410124][_0x3bee('0xf')];_0x2cfba7+=0x1){if(this[_0x3bee('0x3')][_0x410124][_0x2cfba7][_0x3bee('0x10')]){_0x7e763c=this[_0x3bee('0x3')][_0x410124][_0x2cfba7]['condition'][_0x3bee('0x11')](',');for(var _0x43f5d3=0x0;_0x43f5d3<_0x7e763c[_0x3bee('0xf')];_0x43f5d3+=0x1){if(this[_0x3bee('0x6')][_0x410124][_0x3bee('0x12')]===_0x3bee('0x13')&&_0x7e763c[_0x43f5d3]==='-'){_0x57d42c=this[_0x3bee('0x3')][_0x410124][_0x2cfba7]['target'];logger['info'](_0x3bee('0x14'),_0x7e763c[_0x43f5d3],this[_0x3bee('0x3')][_0x410124][_0x2cfba7]['target']);}else if(this[_0x3bee('0x6')][_0x410124][_0x3bee('0x12')]===_0x3bee('0x15')&&_0x7e763c[_0x43f5d3]==='i'){_0x57d42c=this[_0x3bee('0x3')][_0x410124][_0x2cfba7][_0x3bee('0x16')];logger[_0x3bee('0xd')](_0x3bee('0x17'),_0x7e763c[_0x43f5d3],this['edges'][_0x410124][_0x2cfba7][_0x3bee('0x16')]);}if(_0x7e763c[_0x43f5d3]===_0x33504d){return this[_0x3bee('0xb')](this[_0x3bee('0x3')][_0x410124][_0x2cfba7][_0x3bee('0x16')],_0x459129);}}}else{return this['traverseBFS'](this[_0x3bee('0x3')][_0x410124][_0x2cfba7][_0x3bee('0x16')],_0x459129);}}if(_0x7e763c[_0x3bee('0xf')]){if(this['vertices'][_0x410124]['agicommand']===_0x3bee('0x13')){if(_0x57d42c){return this[_0x3bee('0xb')](_0x57d42c,_0x459129);}return logger['info'](_0x3bee('0x18'));}else if(_[_0x3bee('0x19')](verticesWithRetry,this[_0x3bee('0x6')][_0x410124]['agicommand'])){if(_0x33504d==='-'){return logger[_0x3bee('0xd')](_0x3bee('0x1a'));}if(_0x57d42c&&_0x33504d!=='t'){return this[_0x3bee('0xb')](_0x57d42c,_0x459129);}return this['traverseBFS'](_0x410124,_0x459129);}return logger[_0x3bee('0xd')](_0x3bee('0x1b'));}};module[_0x3bee('0x1c')]=Graph;
\ No newline at end of file
index 2c0b37b..52f0f1b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1dcc=['inspect','debug','variables','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','close','timeout','evtHangup','hangup','sync','production','start','stringify','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','vertex','gotoc','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','code','response','isUndefined','result','toString','finally','[FINALLY\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','clear','agicommand\x20not\x20found','[END]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','[GOTO]\x20context:\x20%s\x20extension:\x20%s\x20priority:\x20%s','continueAt','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','voice','callysquare','[LICENSE]\x20VOICE\x20IS\x20DISABLED','listening','xml2json','lodash','syncho','util','../../config/environment','agi','../../config/license/util','./rpc','./vertices','defaults','127.0.0.1','stack','Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!','port','info','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','name','message','error','[%s]\x20%s','[ERROR]\x20%s','[CLOSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','arg_1','callerid','dnid','uniqueid','calleridname','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','toJson','mxGraphModel','root','agicommand','hasOwnProperty','retry','addVertex','omit','mxCell','isArray','length','target','addEdge','source','value','getSquareProject','then','catch','createSquareReport','agi_','substring'];(function(_0x252699,_0x134b4e){var _0x56d0c6=function(_0x5551a8){while(--_0x5551a8){_0x252699['push'](_0x252699['shift']());}};_0x56d0c6(++_0x134b4e);}(_0x1dcc,0x1ea));var _0xc1dc=function(_0x15a14b,_0x42704e){_0x15a14b=_0x15a14b-0x0;var _0x367245=_0x1dcc[_0x15a14b];return _0x367245;};'use strict';var parser=require(_0xc1dc('0x0'));var _=require(_0xc1dc('0x1'));var syncho=require(_0xc1dc('0x2'));var util=require(_0xc1dc('0x3'));var moment=require('moment');var config=require(_0xc1dc('0x4'));var logger=require('../../config/logger')(_0xc1dc('0x5'));var utilLicense=require(_0xc1dc('0x6'));var rpc=require(_0xc1dc('0x7'));var mailRpc=require('./mailRpc');var Graph=require('./graph');var Vertices=require(_0xc1dc('0x8'));var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config[_0xc1dc('0x5')]=_[_0xc1dc('0x9')](config['agi'],{'ip':_0xc1dc('0xa'),'port':0x11dd});function connectionHandler(_0x3deb94){process['nextTick'](function(){syncho(function(){try{setChannelVariables(_0x3deb94);agiHandler(_0x3deb94);}catch(_0x6aad09){logger['error'](_0x6aad09[_0xc1dc('0xb')]);}});});}function listeningHandler(){console['log'](_0xc1dc('0xc'),config[_0xc1dc('0x5')][_0xc1dc('0xd')]);logger[_0xc1dc('0xe')](util[_0xc1dc('0xf')](_0xc1dc('0x10'),config[_0xc1dc('0x5')]['ip'],config[_0xc1dc('0x5')][_0xc1dc('0xd')]));}function errorHandler(_0x4a2c0c){if(_0x4a2c0c&&_0x4a2c0c[_0xc1dc('0x11')]&&_0x4a2c0c[_0xc1dc('0x12')]){logger[_0xc1dc('0x13')](util['format'](_0xc1dc('0x14'),_0x4a2c0c[_0xc1dc('0x11')],_0x4a2c0c[_0xc1dc('0x12')]));}else{logger[_0xc1dc('0x13')](util[_0xc1dc('0xf')](_0xc1dc('0x15'),_0x4a2c0c[_0xc1dc('0xb')]));}}function closeHandler(){logger[_0xc1dc('0xe')](util[_0xc1dc('0xf')](_0xc1dc('0x16'),this[_0xc1dc('0x17')],this['calleridname'],this[_0xc1dc('0x18')],this[_0xc1dc('0x19')],this[_0xc1dc('0x1a')]));try{createSquareReport(this);}catch(_0x3d3315){logger['error'](_0x3d3315[_0xc1dc('0xb')]);}}function timeoutHandler(){logger[_0xc1dc('0xe')](util['format']('[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s',this[_0xc1dc('0x17')],this[_0xc1dc('0x1b')],this[_0xc1dc('0x18')],this[_0xc1dc('0x19')],this[_0xc1dc('0x1a')]));}function hangupHandler(){logger[_0xc1dc('0xe')](util[_0xc1dc('0xf')](_0xc1dc('0x1c'),this['arg_1'],this['calleridname'],this['callerid'],this[_0xc1dc('0x19')],this[_0xc1dc('0x1a')]));this['evtHangup']=!![];}function getRoot(_0x367965){return parser[_0xc1dc('0x1d')](_0x367965,{'object':!![]})[_0xc1dc('0x1e')][_0xc1dc('0x1f')];}function addVertex(_0x22b80d,_0x2944a2,_0x353bf3){_0x2944a2[_0xc1dc('0x20')]=_0x353bf3;if(_0x2944a2[_0xc1dc('0x21')](_0xc1dc('0x22'))){_0x2944a2['maxRetry']=parseInt(_0x2944a2[_0xc1dc('0x22')],0xa);}_0x22b80d[_0xc1dc('0x23')](_[_0xc1dc('0x24')](_0x2944a2,_0xc1dc('0x25')));}function initGraph(_0x4e3ab2,_0x296523){var _0x109e88=new Graph();for(var _0xfd3f88 in _0x4e3ab2){if(_0x4e3ab2[_0xc1dc('0x21')](_0xfd3f88)){if(_[_0xc1dc('0x26')](_0x4e3ab2[_0xfd3f88])){for(var _0x152a50=0x0;_0x152a50<_0x4e3ab2[_0xfd3f88][_0xc1dc('0x27')];_0x152a50+=0x1){addVertex(_0x109e88,_0x4e3ab2[_0xfd3f88][_0x152a50],_0xfd3f88);}}else{addVertex(_0x109e88,_0x4e3ab2[_0xfd3f88],_0xfd3f88);}}}for(var _0x411ee0=0x0;_0x411ee0<_0x296523[_0xc1dc('0x27')];_0x411ee0+=0x1){if(_0x296523[_0x411ee0]['source']&&_0x296523[_0x411ee0][_0xc1dc('0x28')]){_0x109e88[_0xc1dc('0x29')](_0x296523[_0x411ee0][_0xc1dc('0x2a')],_0x296523[_0x411ee0][_0xc1dc('0x28')],_0x296523[_0x411ee0][_0xc1dc('0x2b')]);}}return _0x109e88;}function getSquareProject(_0x4750a9,_0x14dec0){rpc[_0xc1dc('0x2c')](_0x4750a9)[_0xc1dc('0x2d')](function(_0x1182a4){_0x14dec0(null,_0x1182a4);})[_0xc1dc('0x2e')](function(_0x5c380c){_0x14dec0(null,_0x5c380c);});}function createSquareReport(_0x376e95,_0x317f87){rpc[_0xc1dc('0x2f')](_0x376e95)[_0xc1dc('0x2d')](function(_0x30b3c2){if(_0x317f87){_0x317f87(null,_0x30b3c2);}})[_0xc1dc('0x2e')](function(_0x202903){if(_0x317f87){_0x317f87(null,_0x202903);}});}function setChannelVariables(_0x9a8ca0){for(var _0xc1e07e in _0x9a8ca0){if(_0x9a8ca0['hasOwnProperty'](_0xc1e07e)){if(_0xc1e07e['indexOf'](_0xc1dc('0x30'))===0x0){_0x9a8ca0[_0xc1e07e[_0xc1dc('0x31')](0x4)]=_0x9a8ca0[_0xc1e07e];delete _0x9a8ca0[_0xc1e07e];}}}}function getLogFromObject(_0x1d02ec){return util[_0xc1dc('0x32')](_0x1d02ec,{'showHidden':![],'depth':null});}function agiHandler(_0x3e6a68){var _0x1d4d87,_0x5c5490,_0x3cf84a,_0x40f76e,_0x5ab0a4;logger[_0xc1dc('0x33')](_0xc1dc('0x34'),JSON['stringify'](_0x3e6a68,null,0x2));logger[_0xc1dc('0xe')](util[_0xc1dc('0xf')](_0xc1dc('0x35'),_0x3e6a68['arg_1'],_0x3e6a68[_0xc1dc('0x1b')],_0x3e6a68[_0xc1dc('0x18')],_0x3e6a68[_0xc1dc('0x19')],_0x3e6a68[_0xc1dc('0x1a')]));_0x3e6a68['on'](_0xc1dc('0x13'),errorHandler);_0x3e6a68['on'](_0xc1dc('0x36'),closeHandler);_0x3e6a68['on'](_0xc1dc('0x37'),timeoutHandler);_0x3e6a68[_0xc1dc('0x38')]=![];_0x3e6a68['on'](_0xc1dc('0x39'),hangupHandler);var _0x4e3051=getSquareProject[_0xc1dc('0x3a')](null,_0x3e6a68[_0xc1dc('0x17')]);if(_0x4e3051){if(_0x4e3051[_0xc1dc('0x3b')]){_0x1d4d87=getRoot(_0x4e3051['production']);if(_0x1d4d87&&_0x1d4d87[_0xc1dc('0x3c')]){logger[_0xc1dc('0x33')](_0xc1dc('0x1f'),JSON[_0xc1dc('0x3d')](_0x1d4d87,null,0x2));_0x3e6a68[_0xc1dc('0x3e')]=moment()[_0xc1dc('0xf')](_0xc1dc('0x3f'));_0x5c5490=initGraph(_[_0xc1dc('0x24')](_0x1d4d87,'mxCell'),_0x1d4d87[_0xc1dc('0x25')]);_0x3cf84a=new Vertices(_0x3e6a68,rpc,mailRpc);logger[_0xc1dc('0xe')](util[_0xc1dc('0xf')](_0xc1dc('0x40'),_0x3e6a68[_0xc1dc('0x17')],_0x3e6a68[_0xc1dc('0x1b')],_0x3e6a68['callerid'],_0x3e6a68[_0xc1dc('0x19')],_0x3e6a68[_0xc1dc('0x1a')]));_0x5c5490[_0xc1dc('0x41')](_0x1d4d87[_0xc1dc('0x3c')]['id'],function(_0x1bcf3d){try{_0x1bcf3d=_0x3cf84a['clear'](_0x1bcf3d);logger['debug'](_0xc1dc('0x42'),JSON[_0xc1dc('0x3d')](_0x1bcf3d,null,0x2));if(_0x1bcf3d[_0xc1dc('0x20')]===_0xc1dc('0x43')){logger[_0xc1dc('0xe')](_0xc1dc('0x44'));_0x3e6a68[_0xc1dc('0x45')]=_0x1bcf3d['context']||_0x3e6a68[_0xc1dc('0x45')];_0x3e6a68[_0xc1dc('0x46')]=_0x1bcf3d[_0xc1dc('0x46')];_0x3e6a68['priority']=_0x1bcf3d[_0xc1dc('0x47')]?_0x1bcf3d[_0xc1dc('0x47')]-0x1:0x1;return null;}else if(_0x1bcf3d&&_0x3cf84a[_0x1bcf3d[_0xc1dc('0x20')]]){_0x5ab0a4=_0x3cf84a[_0x1bcf3d[_0xc1dc('0x20')]](_0x1bcf3d);logger['info']('response',JSON[_0xc1dc('0x3d')](_0x5ab0a4,null,0x2));if(_0x5ab0a4&&_0x5ab0a4[_0xc1dc('0x48')]===AGI_CODE_SUCCESS&&_0x5ab0a4['result']!==AGI_RESULT_ERROR&&!_0x3e6a68[_0xc1dc('0x38')]){logger[_0xc1dc('0x33')](_0xc1dc('0x49'),getLogFromObject(_0x5ab0a4));return _[_0xc1dc('0x4a')](_0x5ab0a4[_0xc1dc('0x4b')])?null:_0x5ab0a4[_0xc1dc('0x4b')][_0xc1dc('0x4c')]();}else{logger['error']('response',getLogFromObject(_0x5ab0a4));return null;}}else{logger[_0xc1dc('0x13')]('agicommand\x20not\x20found');return null;}}catch(_0x38be6d){logger[_0xc1dc('0x13')](_0x38be6d[_0xc1dc('0xb')]);return null;}});if(_0x1d4d87[_0xc1dc('0x4d')]){logger[_0xc1dc('0xe')](util[_0xc1dc('0xf')](_0xc1dc('0x4e'),_0x3e6a68[_0xc1dc('0x17')],_0x3e6a68['calleridname'],_0x3e6a68[_0xc1dc('0x18')],_0x3e6a68[_0xc1dc('0x19')],_0x3e6a68[_0xc1dc('0x1a')]));_0x5c5490[_0xc1dc('0x41')](_0x1d4d87[_0xc1dc('0x4d')]['id'],function(_0x21a2fe){try{_0x21a2fe=_0x3cf84a[_0xc1dc('0x4f')](_0x21a2fe);logger[_0xc1dc('0x33')](_0xc1dc('0x42'),JSON[_0xc1dc('0x3d')](_0x21a2fe,null,0x2));if(_0x21a2fe&&_0x3cf84a[_0x21a2fe['agicommand']]){_0x5ab0a4=_0x3cf84a[_0x21a2fe['agicommand']](_0x21a2fe);if(_0x5ab0a4){logger['debug'](_0xc1dc('0x49'),getLogFromObject(_0x5ab0a4));return _[_0xc1dc('0x4a')](_0x5ab0a4['result'])?null:_0x5ab0a4[_0xc1dc('0x4b')][_0xc1dc('0x4c')]();}else{logger['error'](_0xc1dc('0x49'),getLogFromObject(_0x5ab0a4));return null;}}else{logger['error'](_0xc1dc('0x50'));return null;}}catch(_0x1d1706){logger[_0xc1dc('0x13')](_0x1d1706[_0xc1dc('0xb')]);return null;}});}logger[_0xc1dc('0xe')](util[_0xc1dc('0xf')](_0xc1dc('0x51'),_0x3e6a68[_0xc1dc('0x17')],_0x3e6a68['calleridname'],_0x3e6a68[_0xc1dc('0x18')],_0x3e6a68[_0xc1dc('0x19')],_0x3e6a68[_0xc1dc('0x1a')]));logger[_0xc1dc('0xe')](util['format'](_0xc1dc('0x52'),_0x3e6a68[_0xc1dc('0x45')],_0x3e6a68[_0xc1dc('0x46')],parseInt(_0x3e6a68[_0xc1dc('0x47')],0xa)+0x1));_0x3e6a68[_0xc1dc('0x53')](_0x3e6a68[_0xc1dc('0x45')],_0x3e6a68[_0xc1dc('0x46')],parseInt(_0x3e6a68[_0xc1dc('0x47')],0xa)+0x1);_0x3e6a68['close']();}}else{logger[_0xc1dc('0x13')](util[_0xc1dc('0xf')](_0xc1dc('0x54'),_0x3e6a68[_0xc1dc('0x17')]));_0x3e6a68[_0xc1dc('0x53')](_0x3e6a68[_0xc1dc('0x45')],_0x3e6a68[_0xc1dc('0x46')],parseInt(_0x3e6a68['priority'],0xa)+0x1);_0x3e6a68[_0xc1dc('0x36')]();}}else{logger[_0xc1dc('0x13')](util[_0xc1dc('0xf')](_0xc1dc('0x55'),_0x3e6a68[_0xc1dc('0x17')]));_0x3e6a68[_0xc1dc('0x53')](_0x3e6a68[_0xc1dc('0x45')],_0x3e6a68[_0xc1dc('0x46')],parseInt(_0x3e6a68[_0xc1dc('0x47')],0xa)+0x1);_0x3e6a68['close']();}}function main(){var _0xc7fd75;return utilLicense['getLicense']()[_0xc1dc('0x2d')](function(_0x372548){if(_0x372548){if(_0x372548[_0xc1dc('0x56')]){if(_0x372548[_0xc1dc('0x57')]&&_0x372548[_0xc1dc('0x57')]>0x0){logger[_0xc1dc('0xe')](util[_0xc1dc('0xf')]('[LICENSE]\x20CHANNELS:\x20%s',_0x372548[_0xc1dc('0x57')]));_0xc7fd75=_0x372548[_0xc1dc('0x57')];}else{logger['info']('[LICENSE]\x20CHANNELS:\x20UNLIMITED');}}else{logger[_0xc1dc('0xe')](_0xc1dc('0x58'));_0xc7fd75=-0x1;}}})[_0xc1dc('0x2e')](function(_0xf08489){logger['error']('[LICENSE]',_0xf08489[_0xc1dc('0xb')]);})[_0xc1dc('0x4d')](function(){var _0x32e20f=require('./server')(config[_0xc1dc('0x5')][_0xc1dc('0xd')],config[_0xc1dc('0x5')]['ip'],_0xc7fd75);_0x32e20f['on'](_0xc1dc('0x13'),errorHandler);_0x32e20f['on'](_0xc1dc('0x59'),listeningHandler);_0x32e20f['on']('connection',connectionHandler);_0x32e20f['on'](_0xc1dc('0x36'),closeHandler);});}main();
\ No newline at end of file
+var _0xf0ba=['mxCell','[START\x20TRAVERSE]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','traverseBFS','clear','gotoc','gotoc\x20block\x20stop\x20traverse\x20BFS','context','extension','priority','response','code','isUndefined','result','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','vertex','[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','Project\x20%s\x20not\x20published','Project\x20%s\x20not\x20found','getLicense','voice','callysquare','[LICENSE]\x20CHANNELS:\x20%s','[LICENSE]\x20CHANNELS:\x20UNLIMITED','[LICENSE]\x20VOICE\x20IS\x20DISABLED','[LICENSE]','./server','listening','connection','xml2json','lodash','syncho','util','moment','../../config/logger','agi','./rpc','./graph','defaults','127.0.0.1','nextTick','error','stack','log','info','format','[LISTENING]\x20Cally\x20Square\x20listening\x20%s:%d','port','name','message','[%s]\x20%s','[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','uniqueid','[TIMEOUT]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','dnid','[HANGUP]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','evtHangup','toJson','mxGraphModel','root','agicommand','hasOwnProperty','retry','maxRetry','addVertex','omit','isArray','length','source','target','value','getSquareProject','then','catch','createSquareReport','agi_','variables','stringify','[START]\x20%s\x20project:\x20from\x20\x22%s\x22\x20<%s>\x20to\x20extension\x20%s\x20with\x20uniqueid\x20%s','close','production','start','debug','YYYY-MM-DD\x20HH:mm:ss'];(function(_0x409353,_0xe9f04d){var _0x4f4b59=function(_0x64b587){while(--_0x64b587){_0x409353['push'](_0x409353['shift']());}};_0x4f4b59(++_0xe9f04d);}(_0xf0ba,0x1ed));var _0xaf0b=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xf0ba[_0x14add3];return _0x4a174f;};'use strict';var parser=require(_0xaf0b('0x0'));var _=require(_0xaf0b('0x1'));var syncho=require(_0xaf0b('0x2'));var util=require(_0xaf0b('0x3'));var moment=require(_0xaf0b('0x4'));var config=require('../../config/environment');var logger=require(_0xaf0b('0x5'))(_0xaf0b('0x6'));var utilLicense=require('../../config/license/util');var rpc=require(_0xaf0b('0x7'));var mailRpc=require('./mailRpc');var Graph=require(_0xaf0b('0x8'));var Vertices=require('./vertices');var AGI_CODE_SUCCESS=0xc8;var AGI_RESULT_ERROR=-0x1;config['agi']=_[_0xaf0b('0x9')](config[_0xaf0b('0x6')],{'ip':_0xaf0b('0xa'),'port':0x11dd});function connectionHandler(_0x3439d5){process[_0xaf0b('0xb')](function(){syncho(function(){try{setChannelVariables(_0x3439d5);agiHandler(_0x3439d5);}catch(_0x5b7f0c){logger[_0xaf0b('0xc')](_0x5b7f0c[_0xaf0b('0xd')]);}});});}function listeningHandler(){console[_0xaf0b('0xe')]('Cally\x20Square\x20server\x20listening\x20on\x20port\x20%d!',config[_0xaf0b('0x6')]['port']);logger[_0xaf0b('0xf')](util[_0xaf0b('0x10')](_0xaf0b('0x11'),config['agi']['ip'],config[_0xaf0b('0x6')][_0xaf0b('0x12')]));}function errorHandler(_0x166394){if(_0x166394&&_0x166394[_0xaf0b('0x13')]&&_0x166394[_0xaf0b('0x14')]){logger[_0xaf0b('0xc')](util['format'](_0xaf0b('0x15'),_0x166394[_0xaf0b('0x13')],_0x166394[_0xaf0b('0x14')]));}else{logger[_0xaf0b('0xc')](util['format'](_0xaf0b('0x16'),_0x166394[_0xaf0b('0xd')]));}}function closeHandler(){logger[_0xaf0b('0xf')](util[_0xaf0b('0x10')](_0xaf0b('0x17'),this[_0xaf0b('0x18')],this[_0xaf0b('0x19')],this[_0xaf0b('0x1a')],this['dnid'],this[_0xaf0b('0x1b')]));try{createSquareReport(this);}catch(_0x535612){logger[_0xaf0b('0xc')](_0x535612[_0xaf0b('0xd')]);}}function timeoutHandler(){logger[_0xaf0b('0xf')](util[_0xaf0b('0x10')](_0xaf0b('0x1c'),this[_0xaf0b('0x18')],this[_0xaf0b('0x19')],this[_0xaf0b('0x1a')],this[_0xaf0b('0x1d')],this[_0xaf0b('0x1b')]));}function hangupHandler(){logger['info'](util[_0xaf0b('0x10')](_0xaf0b('0x1e'),this[_0xaf0b('0x18')],this['calleridname'],this[_0xaf0b('0x1a')],this[_0xaf0b('0x1d')],this['uniqueid']));this[_0xaf0b('0x1f')]=!![];}function getRoot(_0x47130e){return parser[_0xaf0b('0x20')](_0x47130e,{'object':!![]})[_0xaf0b('0x21')][_0xaf0b('0x22')];}function addVertex(_0x4fe7dc,_0x5f1f70,_0x4541c5){_0x5f1f70[_0xaf0b('0x23')]=_0x4541c5;if(_0x5f1f70[_0xaf0b('0x24')](_0xaf0b('0x25'))){_0x5f1f70[_0xaf0b('0x26')]=parseInt(_0x5f1f70[_0xaf0b('0x25')],0xa);}_0x4fe7dc[_0xaf0b('0x27')](_[_0xaf0b('0x28')](_0x5f1f70,'mxCell'));}function initGraph(_0x1ffa30,_0x21e0e6){var _0x3a4820=new Graph();for(var _0x51cb2f in _0x1ffa30){if(_0x1ffa30[_0xaf0b('0x24')](_0x51cb2f)){if(_[_0xaf0b('0x29')](_0x1ffa30[_0x51cb2f])){for(var _0x54c3be=0x0;_0x54c3be<_0x1ffa30[_0x51cb2f]['length'];_0x54c3be+=0x1){addVertex(_0x3a4820,_0x1ffa30[_0x51cb2f][_0x54c3be],_0x51cb2f);}}else{addVertex(_0x3a4820,_0x1ffa30[_0x51cb2f],_0x51cb2f);}}}for(var _0x4bae53=0x0;_0x4bae53<_0x21e0e6[_0xaf0b('0x2a')];_0x4bae53+=0x1){if(_0x21e0e6[_0x4bae53][_0xaf0b('0x2b')]&&_0x21e0e6[_0x4bae53][_0xaf0b('0x2c')]){_0x3a4820['addEdge'](_0x21e0e6[_0x4bae53][_0xaf0b('0x2b')],_0x21e0e6[_0x4bae53][_0xaf0b('0x2c')],_0x21e0e6[_0x4bae53][_0xaf0b('0x2d')]);}}return _0x3a4820;}function getSquareProject(_0x3fb9ce,_0x2f0b81){rpc[_0xaf0b('0x2e')](_0x3fb9ce)[_0xaf0b('0x2f')](function(_0x5c720b){_0x2f0b81(null,_0x5c720b);})[_0xaf0b('0x30')](function(_0x40f45d){_0x2f0b81(null,_0x40f45d);});}function createSquareReport(_0x4beee6,_0x26af15){rpc[_0xaf0b('0x31')](_0x4beee6)[_0xaf0b('0x2f')](function(_0x3fbfab){if(_0x26af15){_0x26af15(null,_0x3fbfab);}})[_0xaf0b('0x30')](function(_0x28d0a3){if(_0x26af15){_0x26af15(null,_0x28d0a3);}});}function setChannelVariables(_0x3d6112){for(var _0x4031d4 in _0x3d6112){if(_0x3d6112[_0xaf0b('0x24')](_0x4031d4)){if(_0x4031d4['indexOf'](_0xaf0b('0x32'))===0x0){_0x3d6112[_0x4031d4['substring'](0x4)]=_0x3d6112[_0x4031d4];delete _0x3d6112[_0x4031d4];}}}}function getLogFromObject(_0x49b691){return util['inspect'](_0x49b691,{'showHidden':![],'depth':null});}function agiHandler(_0x1d6771){var _0x3b0f51,_0x270195,_0x472301,_0x18da8d,_0x460e37;logger['debug'](_0xaf0b('0x33'),JSON[_0xaf0b('0x34')](_0x1d6771,null,0x2));logger[_0xaf0b('0xf')](util[_0xaf0b('0x10')](_0xaf0b('0x35'),_0x1d6771[_0xaf0b('0x18')],_0x1d6771[_0xaf0b('0x19')],_0x1d6771[_0xaf0b('0x1a')],_0x1d6771[_0xaf0b('0x1d')],_0x1d6771[_0xaf0b('0x1b')]));_0x1d6771['on']('error',errorHandler);_0x1d6771['on'](_0xaf0b('0x36'),closeHandler);_0x1d6771['on']('timeout',timeoutHandler);_0x1d6771[_0xaf0b('0x1f')]=![];_0x1d6771['on']('hangup',hangupHandler);var _0x1f429d=getSquareProject['sync'](null,_0x1d6771[_0xaf0b('0x18')]);if(_0x1f429d){if(_0x1f429d[_0xaf0b('0x37')]){_0x3b0f51=getRoot(_0x1f429d[_0xaf0b('0x37')]);if(_0x3b0f51&&_0x3b0f51[_0xaf0b('0x38')]){logger[_0xaf0b('0x39')](_0xaf0b('0x22'),JSON[_0xaf0b('0x34')](_0x3b0f51,null,0x2));_0x1d6771['joinAt']=moment()[_0xaf0b('0x10')](_0xaf0b('0x3a'));_0x270195=initGraph(_[_0xaf0b('0x28')](_0x3b0f51,_0xaf0b('0x3b')),_0x3b0f51['mxCell']);_0x472301=new Vertices(_0x1d6771,rpc,mailRpc);logger[_0xaf0b('0xf')](util[_0xaf0b('0x10')](_0xaf0b('0x3c'),_0x1d6771[_0xaf0b('0x18')],_0x1d6771[_0xaf0b('0x19')],_0x1d6771['callerid'],_0x1d6771[_0xaf0b('0x1d')],_0x1d6771[_0xaf0b('0x1b')]));_0x270195[_0xaf0b('0x3d')](_0x3b0f51[_0xaf0b('0x38')]['id'],function(_0x185d64){try{_0x185d64=_0x472301[_0xaf0b('0x3e')](_0x185d64);logger[_0xaf0b('0x39')]('vertex',JSON[_0xaf0b('0x34')](_0x185d64,null,0x2));if(_0x185d64['agicommand']===_0xaf0b('0x3f')){logger[_0xaf0b('0xf')](_0xaf0b('0x40'));_0x1d6771[_0xaf0b('0x41')]=_0x185d64[_0xaf0b('0x41')]||_0x1d6771[_0xaf0b('0x41')];_0x1d6771[_0xaf0b('0x42')]=_0x185d64[_0xaf0b('0x42')];_0x1d6771[_0xaf0b('0x43')]=_0x185d64['priority']?_0x185d64[_0xaf0b('0x43')]-0x1:0x1;return null;}else if(_0x185d64&&_0x472301[_0x185d64[_0xaf0b('0x23')]]){_0x460e37=_0x472301[_0x185d64[_0xaf0b('0x23')]](_0x185d64);logger[_0xaf0b('0xf')](_0xaf0b('0x44'),JSON['stringify'](_0x460e37,null,0x2));if(_0x460e37&&_0x460e37[_0xaf0b('0x45')]===AGI_CODE_SUCCESS&&_0x460e37['result']!==AGI_RESULT_ERROR&&!_0x1d6771[_0xaf0b('0x1f')]){logger[_0xaf0b('0x39')](_0xaf0b('0x44'),getLogFromObject(_0x460e37));return _[_0xaf0b('0x46')](_0x460e37[_0xaf0b('0x47')])?null:_0x460e37[_0xaf0b('0x47')][_0xaf0b('0x48')]();}else{logger[_0xaf0b('0xc')](_0xaf0b('0x44'),getLogFromObject(_0x460e37));return null;}}else{logger['error'](_0xaf0b('0x49'));return null;}}catch(_0x3fa620){logger['error'](_0x3fa620[_0xaf0b('0xd')]);return null;}});if(_0x3b0f51[_0xaf0b('0x4a')]){logger[_0xaf0b('0xf')](util[_0xaf0b('0x10')](_0xaf0b('0x4b'),_0x1d6771[_0xaf0b('0x18')],_0x1d6771[_0xaf0b('0x19')],_0x1d6771[_0xaf0b('0x1a')],_0x1d6771[_0xaf0b('0x1d')],_0x1d6771[_0xaf0b('0x1b')]));_0x270195[_0xaf0b('0x3d')](_0x3b0f51['finally']['id'],function(_0x1ecb67){try{_0x1ecb67=_0x472301[_0xaf0b('0x3e')](_0x1ecb67);logger[_0xaf0b('0x39')](_0xaf0b('0x4c'),JSON[_0xaf0b('0x34')](_0x1ecb67,null,0x2));if(_0x1ecb67&&_0x472301[_0x1ecb67[_0xaf0b('0x23')]]){_0x460e37=_0x472301[_0x1ecb67[_0xaf0b('0x23')]](_0x1ecb67);if(_0x460e37){logger[_0xaf0b('0x39')](_0xaf0b('0x44'),getLogFromObject(_0x460e37));return _['isUndefined'](_0x460e37[_0xaf0b('0x47')])?null:_0x460e37['result'][_0xaf0b('0x48')]();}else{logger[_0xaf0b('0xc')](_0xaf0b('0x44'),getLogFromObject(_0x460e37));return null;}}else{logger[_0xaf0b('0xc')](_0xaf0b('0x49'));return null;}}catch(_0x2d865f){logger['error'](_0x2d865f[_0xaf0b('0xd')]);return null;}});}logger[_0xaf0b('0xf')](util[_0xaf0b('0x10')](_0xaf0b('0x4d'),_0x1d6771[_0xaf0b('0x18')],_0x1d6771[_0xaf0b('0x19')],_0x1d6771['callerid'],_0x1d6771[_0xaf0b('0x1d')],_0x1d6771[_0xaf0b('0x1b')]));logger[_0xaf0b('0xf')](util[_0xaf0b('0x10')](_0xaf0b('0x4e'),_0x1d6771[_0xaf0b('0x41')],_0x1d6771[_0xaf0b('0x42')],parseInt(_0x1d6771['priority'],0xa)+0x1));_0x1d6771[_0xaf0b('0x4f')](_0x1d6771[_0xaf0b('0x41')],_0x1d6771[_0xaf0b('0x42')],parseInt(_0x1d6771['priority'],0xa)+0x1);_0x1d6771[_0xaf0b('0x36')]();}}else{logger['error'](util[_0xaf0b('0x10')](_0xaf0b('0x50'),_0x1d6771[_0xaf0b('0x18')]));_0x1d6771[_0xaf0b('0x4f')](_0x1d6771['context'],_0x1d6771[_0xaf0b('0x42')],parseInt(_0x1d6771[_0xaf0b('0x43')],0xa)+0x1);_0x1d6771[_0xaf0b('0x36')]();}}else{logger[_0xaf0b('0xc')](util[_0xaf0b('0x10')](_0xaf0b('0x51'),_0x1d6771[_0xaf0b('0x18')]));_0x1d6771[_0xaf0b('0x4f')](_0x1d6771[_0xaf0b('0x41')],_0x1d6771['extension'],parseInt(_0x1d6771[_0xaf0b('0x43')],0xa)+0x1);_0x1d6771['close']();}}function main(){var _0x23ecfb;return utilLicense[_0xaf0b('0x52')]()['then'](function(_0x5e6d85){if(_0x5e6d85){if(_0x5e6d85[_0xaf0b('0x53')]){if(_0x5e6d85[_0xaf0b('0x54')]&&_0x5e6d85['callysquare']>0x0){logger[_0xaf0b('0xf')](util['format'](_0xaf0b('0x55'),_0x5e6d85[_0xaf0b('0x54')]));_0x23ecfb=_0x5e6d85[_0xaf0b('0x54')];}else{logger['info'](_0xaf0b('0x56'));}}else{logger[_0xaf0b('0xf')](_0xaf0b('0x57'));_0x23ecfb=-0x1;}}})[_0xaf0b('0x30')](function(_0x29ea6b){logger['error'](_0xaf0b('0x58'),_0x29ea6b[_0xaf0b('0xd')]);})['finally'](function(){var _0x31b0b7=require(_0xaf0b('0x59'))(config[_0xaf0b('0x6')][_0xaf0b('0x12')],config[_0xaf0b('0x6')]['ip'],_0x23ecfb);_0x31b0b7['on'](_0xaf0b('0xc'),errorHandler);_0x31b0b7['on'](_0xaf0b('0x5a'),listeningHandler);_0x31b0b7['on'](_0xaf0b('0x5b'),connectionHandler);_0x31b0b7['on'](_0xaf0b('0x36'),closeHandler);});}main();
\ No newline at end of file
index 7ace1c6..26d2904 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(_0x53dc92,_0x2ab1b1){var _0x40f198=function(_0xf2cded){while(--_0xf2cded){_0x53dc92['push'](_0x53dc92['shift']());}};_0x40f198(++_0x2ab1b1);}(_0x814b,0x1a2));var _0xb814=function(_0x57fcc0,_0x585004){_0x57fcc0=_0x57fcc0-0x0;var _0x5270df=_0x814b[_0x57fcc0];return _0x5270df;};'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(_0xd3eaee,_0xa89838){var _0x31d677=function(_0x39f5f7){while(--_0x39f5f7){_0xd3eaee['push'](_0xd3eaee['shift']());}};_0x31d677(++_0xa89838);}(_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
index b64dced..50580c4 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(_0x450cf0,_0x183637){var _0x173655=function(_0xd5596d){while(--_0xd5596d){_0x450cf0['push'](_0x450cf0['shift']());}};_0x173655(++_0x183637);}(_0x5f2f,0x73));var _0xf5f2=function(_0xbec3fe,_0x10e256){_0xbec3fe=_0xbec3fe-0x0;var _0x9d879a=_0x5f2f[_0xbec3fe];return _0x9d879a;};'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 _0x7a54=['substring','length','split','indexOf','slice','trim','emit','util','stream','Transform','call','_localBuffer','inherits','prototype','_transform','toString','_inBody'];(function(_0xb67250,_0x4417d3){var _0x26f76e=function(_0xc0cc77){while(--_0xc0cc77){_0xb67250['push'](_0xb67250['shift']());}};_0x26f76e(++_0x4417d3);}(_0x7a54,0x106));var _0x47a5=function(_0x413fb5,_0x4f690c){_0x413fb5=_0x413fb5-0x0;var _0x56342a=_0x7a54[_0x413fb5];return _0x56342a;};'use strict';var util=require(_0x47a5('0x0'));var Transform=require(_0x47a5('0x1'))[_0x47a5('0x2')];function AGIReply(_0x58157c){Transform[_0x47a5('0x3')](this,_0x58157c);this[_0x47a5('0x4')]='';this['_inBody']=![];}util[_0x47a5('0x5')](AGIReply,Transform);AGIReply[_0x47a5('0x6')][_0x47a5('0x7')]=function(_0x3717e1,_0xfdf934,_0x545a97){var _0x3d5629='\x0a',_0x59199c=['\x0a\x0a','\x0d\x0a\x0d\x0a'],_0x343372=-0x1,_0x30e405=-0x1,_0x506eda='',_0x194fb0=0x0,_0x5077f3='',_0x5d90b3='';this[_0x47a5('0x4')]+=_0x3717e1[_0x47a5('0x8')]();_0x5077f3=this['_localBuffer'];if(!this[_0x47a5('0x9')]){_0x194fb0=0x0;while(_0x59199c[_0x194fb0]){while((_0x30e405=_0x5077f3['indexOf'](_0x59199c[_0x194fb0]))!=-0x1){_0x506eda=_0x59199c[_0x194fb0];_0x5d90b3=_0x5077f3['substring'](0x0,_0x30e405);_0x5077f3=_0x5077f3[_0x47a5('0xa')](_0x30e405+_0x506eda[_0x47a5('0xb')]);var _0x2f399b=_0x5d90b3[_0x47a5('0xc')](_0x3d5629),_0x250fad=0x0,_0xd612dd={},_0xd308b8='',_0x1eae59='',_0x5beb89=-0x1;while(_0x2f399b[_0x250fad]){_0x5beb89=_0x2f399b[_0x250fad][_0x47a5('0xd')](':');if(_0x5beb89!=-0x1){_0xd308b8=_0x2f399b[_0x250fad][_0x47a5('0xe')](0x0,_0x5beb89)[_0x47a5('0xf')]();_0x1eae59=_0x2f399b[_0x250fad][_0x47a5('0xe')](_0x5beb89+0x1)[_0x47a5('0xf')]();if(_0xd308b8[_0x47a5('0xb')]>0x0){_0xd612dd[_0xd308b8]=_0x1eae59;}}else{}_0x250fad++;}this[_0x47a5('0x10')]('headers',_0xd612dd);this[_0x47a5('0x9')]=!![];}_0x194fb0++;}this[_0x47a5('0x4')]=_0x5077f3;}else{while((_0x343372=_0x5077f3[_0x47a5('0xd')](_0x3d5629))!=-0x1){_0x5d90b3=_0x5077f3[_0x47a5('0xa')](0x0,_0x343372);this[_0x47a5('0x10')]('line',_0x5d90b3);_0x5077f3=_0x5077f3['substring'](_0x343372+_0x3d5629[_0x47a5('0xb')]);}this['_localBuffer']=_0x5077f3;}_0x545a97();};module['exports']=AGIReply;
\ No newline at end of file
index 11ec05a..9342504 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x84be=['name','email','getSquareProjectById','getVoiceQueueById','ShowVoiceQueue','getVariableById','getSquareOdbcById','ShowSquareOdbc','dsn','getUserById','ShowUser','ShowTrunk','getSoundById','ShowSound','Interval','getSmsAccountById','createSmsMessage','createSquareDetailsReport','CreateSquareDetailsReport','CreateSquareReport','merge','arg_2','format','createSquareRecording','createSquareMessage','ShowCmHopper','phone','ListId','ShowPause','agentLogin','LoginUser','agentPause','PauseUser','agentUnpause','UnpauseUser','agentLogout','LogoutUser','bluebird','moment','lodash','util','jayson/promise','client','http','request','then','message','result','catch','getSquareProject','ShowSquareProject','getMailAccountById','ShowMailAccount','Smtp'];(function(_0x37c22c,_0x28a70d){var _0x119d79=function(_0x243a13){while(--_0x243a13){_0x37c22c['push'](_0x37c22c['shift']());}};_0x119d79(++_0x28a70d);}(_0x84be,0xc7));var _0xe84b=function(_0x5447fd,_0x52a6b5){_0x5447fd=_0x5447fd-0x0;var _0x15b28a=_0x84be[_0x5447fd];return _0x15b28a;};'use strict';var BPromise=require(_0xe84b('0x0'));var moment=require(_0xe84b('0x1'));var _=require(_0xe84b('0x2'));var util=require(_0xe84b('0x3'));var jayson=require(_0xe84b('0x4'));var client=jayson[_0xe84b('0x5')][_0xe84b('0x6')]({'port':0x2329});function request(_0x22181f,_0x39dfdc){return new BPromise(function(_0x52935c,_0x377896){return client[_0xe84b('0x7')](_0x22181f,_0x39dfdc)[_0xe84b('0x8')](function(_0x4b60a8){if(_0x4b60a8['error']){return _0x377896(_0x4b60a8['error'][_0xe84b('0x9')]);}else{return _0x52935c(_0x4b60a8[_0xe84b('0xa')]);}})[_0xe84b('0xb')](function(_0x273946){return _0x377896(_0x273946);});});}exports[_0xe84b('0xc')]=function(_0x3ac04f){return request(_0xe84b('0xd'),{'options':{'raw':![],'where':{'name':_0x3ac04f},'attributes':['production']}});};exports[_0xe84b('0xe')]=function(_0x4464de){return request(_0xe84b('0xf'),{'options':{'raw':![],'where':{'id':_0x4464de},'include':[{'model':'MailServerOut','as':_0xe84b('0x10')}],'attributes':['id',_0xe84b('0x11'),_0xe84b('0x12')]}});};exports[_0xe84b('0x13')]=function(_0x3c081f){return request('ShowSquareProject',{'options':{'where':{'id':_0x3c081f},'attributes':[_0xe84b('0x11')]}});};exports[_0xe84b('0x14')]=function(_0x2ec59e){return request(_0xe84b('0x15'),{'options':{'where':{'id':_0x2ec59e},'attributes':[_0xe84b('0x11')]}});};exports[_0xe84b('0x16')]=function(_0xbad072){return request('ShowVariable',{'options':{'where':{'id':_0xbad072},'attributes':[_0xe84b('0x11')]}});};exports[_0xe84b('0x17')]=function(_0x16eb45){return request(_0xe84b('0x18'),{'options':{'where':{'id':_0x16eb45},'attributes':[_0xe84b('0x19')]}});};exports[_0xe84b('0x1a')]=function(_0x2f69d6){return request(_0xe84b('0x1b'),{'options':{'where':{'id':_0x2f69d6},'attributes':[_0xe84b('0x11')]}});};exports['getTrunkById']=function(_0x2d16ad){return request(_0xe84b('0x1c'),{'options':{'where':{'id':_0x2d16ad},'attributes':[_0xe84b('0x11')]}});};exports[_0xe84b('0x1d')]=function(_0x48f921){return request(_0xe84b('0x1e'),{'options':{'where':{'id':_0x48f921},'attributes':['save_name']}});};exports['getIntervalById']=function(_0x226475){return request('ShowInterval',{'options':{'raw':![],'where':{'id':_0x226475},'include':[{'model':_0xe84b('0x1f'),'as':'Intervals'}]}});};exports[_0xe84b('0x20')]=function(_0x506f4c){return request('ShowSmsAccount',{'options':{'where':{'id':_0x506f4c},'attributes':['id',_0xe84b('0x11')]}});};exports[_0xe84b('0x21')]=function(_0x115e47){return request('CreateSmsMessage',{'body':_0x115e47});};exports[_0xe84b('0x22')]=function(_0x20d019){return request(_0xe84b('0x23'),{'body':_0x20d019});};exports['createSquareReport']=function(_0x2f5e34){return request(_0xe84b('0x24'),{'body':_[_0xe84b('0x25')](_0x2f5e34,{'project_name':_0x2f5e34['arg_1'],'prev_project_name':_0x2f5e34[_0xe84b('0x26')]||'','is_subproject':_0x2f5e34[_0xe84b('0x26')]?!![]:![],'leaveAt':moment()[_0xe84b('0x27')]('YYYY-MM-DD\x20HH:mm:ss')})});};exports[_0xe84b('0x28')]=function(_0x3d14e2){return request('CreateSquareRecording',{'body':_0x3d14e2});};exports[_0xe84b('0x29')]=function(_0x53272e){return request('CreateSquareMessage',{'body':_0x53272e});};exports['createCmContact']=function(_0x4f4bd4){return request(_0xe84b('0x2a'),{'options':{'raw':![],'where':{'phone':_0x4f4bd4[_0xe84b('0x2b')],'ListId':_0x4f4bd4[_0xe84b('0x2c')]}}})[_0xe84b('0x8')](function(_0x5bf267){if(_0x5bf267){return _0x5bf267;}return request('CreateCmContact',{'body':_0x4f4bd4});});};exports['getPauseById']=function(_0x458bea){return request(_0xe84b('0x2d'),{'options':{'where':{'id':_0x458bea},'attributes':[_0xe84b('0x11')]}});};exports[_0xe84b('0x2e')]=function(_0x718a9a,_0x1d2d69){return request(_0xe84b('0x2f'),{'body':{'interface':_0x1d2d69},'options':{'where':_0x718a9a}});};exports[_0xe84b('0x30')]=function(_0x529335,_0xa52807,_0x1037c8){return request(_0xe84b('0x31'),{'body':{'type':_0xa52807,'uniqueid':_0x1037c8},'options':{'where':_0x529335}});};exports[_0xe84b('0x32')]=function(_0x252ef0){return request(_0xe84b('0x33'),{'body':{},'options':{'where':_0x252ef0}});};exports[_0xe84b('0x34')]=function(_0x53d95f){return request(_0xe84b('0x35'),{'body':{},'options':{'where':_0x53d95f}});};
\ No newline at end of file
+var _0x9431=['getSoundById','save_name','getIntervalById','ShowInterval','Interval','getSmsAccountById','createSmsMessage','CreateSmsMessage','createSquareDetailsReport','CreateSquareDetailsReport','CreateSquareReport','merge','arg_1','arg_2','format','CreateSquareRecording','ShowCmHopper','phone','ListId','then','getPauseById','ShowPause','agentLogin','LoginUser','PauseUser','agentUnpause','UnpauseUser','bluebird','moment','lodash','client','http','request','message','catch','ShowSquareProject','production','MailServerOut','name','getSquareProjectById','getVoiceQueueById','ShowVoiceQueue','getSquareOdbcById','dsn','getUserById','getTrunkById','ShowTrunk'];(function(_0xbd08b4,_0x4790ed){var _0x314f1e=function(_0x161589){while(--_0x161589){_0xbd08b4['push'](_0xbd08b4['shift']());}};_0x314f1e(++_0x4790ed);}(_0x9431,0xa8));var _0x1943=function(_0x45ab2a,_0x2362fd){_0x45ab2a=_0x45ab2a-0x0;var _0x2a64ce=_0x9431[_0x45ab2a];return _0x2a64ce;};'use strict';var BPromise=require(_0x1943('0x0'));var moment=require(_0x1943('0x1'));var _=require(_0x1943('0x2'));var util=require('util');var jayson=require('jayson/promise');var client=jayson[_0x1943('0x3')][_0x1943('0x4')]({'port':0x2329});function request(_0x59d0f3,_0x5e74aa){return new BPromise(function(_0x40ec64,_0x3e2ad1){return client[_0x1943('0x5')](_0x59d0f3,_0x5e74aa)['then'](function(_0x276552){if(_0x276552['error']){return _0x3e2ad1(_0x276552['error'][_0x1943('0x6')]);}else{return _0x40ec64(_0x276552['result']);}})[_0x1943('0x7')](function(_0x2b7632){return _0x3e2ad1(_0x2b7632);});});}exports['getSquareProject']=function(_0x50488f){return request(_0x1943('0x8'),{'options':{'raw':![],'where':{'name':_0x50488f},'attributes':[_0x1943('0x9')]}});};exports['getMailAccountById']=function(_0x50bb54){return request('ShowMailAccount',{'options':{'raw':![],'where':{'id':_0x50bb54},'include':[{'model':_0x1943('0xa'),'as':'Smtp'}],'attributes':['id',_0x1943('0xb'),'email']}});};exports[_0x1943('0xc')]=function(_0x7c0317){return request(_0x1943('0x8'),{'options':{'where':{'id':_0x7c0317},'attributes':[_0x1943('0xb')]}});};exports[_0x1943('0xd')]=function(_0x2c02eb){return request(_0x1943('0xe'),{'options':{'where':{'id':_0x2c02eb},'attributes':[_0x1943('0xb')]}});};exports['getVariableById']=function(_0x386918){return request('ShowVariable',{'options':{'where':{'id':_0x386918},'attributes':[_0x1943('0xb')]}});};exports[_0x1943('0xf')]=function(_0x387889){return request('ShowSquareOdbc',{'options':{'where':{'id':_0x387889},'attributes':[_0x1943('0x10')]}});};exports[_0x1943('0x11')]=function(_0x69e98a){return request('ShowUser',{'options':{'where':{'id':_0x69e98a},'attributes':[_0x1943('0xb')]}});};exports[_0x1943('0x12')]=function(_0x3a2e1f){return request(_0x1943('0x13'),{'options':{'where':{'id':_0x3a2e1f},'attributes':['name']}});};exports[_0x1943('0x14')]=function(_0xea5bd){return request('ShowSound',{'options':{'where':{'id':_0xea5bd},'attributes':[_0x1943('0x15')]}});};exports[_0x1943('0x16')]=function(_0x4ce329){return request(_0x1943('0x17'),{'options':{'raw':![],'where':{'id':_0x4ce329},'include':[{'model':_0x1943('0x18'),'as':'Intervals'}]}});};exports[_0x1943('0x19')]=function(_0x5c0c37){return request('ShowSmsAccount',{'options':{'where':{'id':_0x5c0c37},'attributes':['id',_0x1943('0xb')]}});};exports[_0x1943('0x1a')]=function(_0x53f066){return request(_0x1943('0x1b'),{'body':_0x53f066});};exports[_0x1943('0x1c')]=function(_0x3f9e9d){return request(_0x1943('0x1d'),{'body':_0x3f9e9d});};exports['createSquareReport']=function(_0x3bccea){return request(_0x1943('0x1e'),{'body':_[_0x1943('0x1f')](_0x3bccea,{'project_name':_0x3bccea[_0x1943('0x20')],'prev_project_name':_0x3bccea[_0x1943('0x21')]||'','is_subproject':_0x3bccea[_0x1943('0x21')]?!![]:![],'leaveAt':moment()[_0x1943('0x22')]('YYYY-MM-DD\x20HH:mm:ss')})});};exports['createSquareRecording']=function(_0x215c07){return request(_0x1943('0x23'),{'body':_0x215c07});};exports['createSquareMessage']=function(_0x104afd){return request('CreateSquareMessage',{'body':_0x104afd});};exports['createCmContact']=function(_0x49d663){return request(_0x1943('0x24'),{'options':{'raw':![],'where':{'phone':_0x49d663[_0x1943('0x25')],'ListId':_0x49d663[_0x1943('0x26')]}}})[_0x1943('0x27')](function(_0x406645){if(_0x406645){return _0x406645;}return request('CreateCmContact',{'body':_0x49d663});});};exports[_0x1943('0x28')]=function(_0x44f1b4){return request(_0x1943('0x29'),{'options':{'where':{'id':_0x44f1b4},'attributes':['name']}});};exports[_0x1943('0x2a')]=function(_0x11725d,_0x15ee88){return request(_0x1943('0x2b'),{'body':{'interface':_0x15ee88},'options':{'where':_0x11725d}});};exports['agentPause']=function(_0x22cf65,_0xc29689,_0x30a62f){return request(_0x1943('0x2c'),{'body':{'type':_0xc29689,'uniqueid':_0x30a62f},'options':{'where':_0x22cf65}});};exports[_0x1943('0x2d')]=function(_0x26fe19){return request(_0x1943('0x2e'),{'body':{},'options':{'where':_0x26fe19}});};exports['agentLogout']=function(_0x1cb637){return request('LogoutUser',{'body':{},'options':{'where':_0x1cb637}});};
\ No newline at end of file
index d5d4153..23f239a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffc6=['./polly'];(function(_0x59e821,_0x86c723){var _0x5333f6=function(_0x5dc2c9){while(--_0x5dc2c9){_0x59e821['push'](_0x59e821['shift']());}};_0x5333f6(++_0x86c723);}(_0xffc6,0x65));var _0x6ffc=function(_0x1c7dd7,_0x4e5e2a){_0x1c7dd7=_0x1c7dd7-0x0;var _0x3ab480=_0xffc6[_0x1c7dd7];return _0x3ab480;};var polly=require(_0x6ffc('0x0'));var lex=require('./lex');module['exports']={'polly':polly,'lex':lex};
\ No newline at end of file
+var _0xe84a=['./lex','exports'];(function(_0x5b78e8,_0x55096b){var _0xf2c321=function(_0x4e0cff){while(--_0x4e0cff){_0x5b78e8['push'](_0x5b78e8['shift']());}};_0xf2c321(++_0x55096b);}(_0xe84a,0x138));var _0xae84=function(_0x16c246,_0x246c00){_0x16c246=_0x16c246-0x0;var _0x64cfe9=_0xe84a[_0x16c246];return _0x64cfe9;};var polly=require('./polly');var lex=require(_0xae84('0x0'));module[_0xae84('0x1')]={'polly':polly,'lex':lex};
\ No newline at end of file
index 98eee14..3b912a1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe205=['exports','./lib/api'];(function(_0x618414,_0x1a7a60){var _0x21c19a=function(_0x507b17){while(--_0x507b17){_0x618414['push'](_0x618414['shift']());}};_0x21c19a(++_0x1a7a60);}(_0xe205,0xa7));var _0x5e20=function(_0x31ff78,_0x423e2c){_0x31ff78=_0x31ff78-0x0;var _0x484272=_0xe205[_0x31ff78];return _0x484272;};'use strict';var lex=require(_0x5e20('0x0'));module[_0x5e20('0x1')]=function(_0x2a7c9b,_0x3cdbb0,_0x6c1585,_0x1620fb,_0x13bace,_0x30f606){return lex(_0x2a7c9b,_0x3cdbb0,_0x6c1585,_0x1620fb,_0x13bace,_0x30f606);};
\ No newline at end of file
+var _0x34e5=['exports'];(function(_0x3947c9,_0x4d6c97){var _0x2e7871=function(_0x1236cc){while(--_0x1236cc){_0x3947c9['push'](_0x3947c9['shift']());}};_0x2e7871(++_0x4d6c97);}(_0x34e5,0x172));var _0x534e=function(_0x55aaf5,_0x4ff6a0){_0x55aaf5=_0x55aaf5-0x0;var _0x40bc57=_0x34e5[_0x55aaf5];return _0x40bc57;};'use strict';var lex=require('./lib/api');module[_0x534e('0x0')]=function(_0x4f86e1,_0xbca947,_0x467e3e,_0x425ae8,_0x246650,_0x83eb2d){return lex(_0x4f86e1,_0xbca947,_0x467e3e,_0x425ae8,_0x246650,_0x83eb2d);};
\ No newline at end of file
index 2fc45a7..b314d15 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8263=['postText','slots','hasOwnProperty','slot_','exports','LexRuntime','$LATEST','aws-sdk'];(function(_0x2a1186,_0x1da04e){var _0x25b2bc=function(_0x599f99){while(--_0x599f99){_0x2a1186['push'](_0x2a1186['shift']());}};_0x25b2bc(++_0x1da04e);}(_0x8263,0xef));var _0x3826=function(_0x3fe032,_0x268b7a){_0x3fe032=_0x3fe032-0x0;var _0x5bbd2a=_0x8263[_0x3fe032];return _0x5bbd2a;};'use strict';var BPromise=require('bluebird');var AWS=require(_0x3826('0x0'));function lexResult(_0x9c5d88,_0x179d94){return new BPromise(function(_0x2b58ab,_0x8d9c7){_0x9c5d88[_0x3826('0x1')](_0x179d94,function(_0x3e1245,_0xf6bc37){if(_0x3e1245){_0x8d9c7(_0x3e1245);}if(_0xf6bc37[_0x3826('0x2')]){for(const _0x328ad5 in _0xf6bc37[_0x3826('0x2')]){if(_0xf6bc37[_0x3826('0x2')][_0x3826('0x3')](_0x328ad5)){var _0x124575=_0xf6bc37[_0x3826('0x2')][_0x328ad5];_0xf6bc37[_0x3826('0x4')+_0x328ad5]=_0x124575;}}}_0x2b58ab(_0xf6bc37);});});}module[_0x3826('0x5')]=function(_0x29368f,_0x50298a,_0x4df96a,_0x54b5f4,_0x2be63d,_0x3388b6){var _0x5b40c2=new AWS[(_0x3826('0x6'))]({'accessKeyId':_0x50298a,'secretAccessKey':_0x4df96a,'region':_0x54b5f4});var _0x1d0d32={'botAlias':_0x3826('0x7'),'botName':_0x3388b6,'inputText':_0x2be63d,'userId':_0x29368f};return lexResult(_0x5b40c2,_0x1d0d32);};
\ No newline at end of file
+var _0x39f2=['slots','slot_','exports','LexRuntime','postText'];(function(_0x3186ca,_0x41a84f){var _0x147230=function(_0x947bd){while(--_0x947bd){_0x3186ca['push'](_0x3186ca['shift']());}};_0x147230(++_0x41a84f);}(_0x39f2,0x1ee));var _0x239f=function(_0x544759,_0x5c6a85){_0x544759=_0x544759-0x0;var _0x2e9031=_0x39f2[_0x544759];return _0x2e9031;};'use strict';var BPromise=require('bluebird');var AWS=require('aws-sdk');function lexResult(_0x1da00e,_0x4d0026){return new BPromise(function(_0x81a90f,_0x284e2a){_0x1da00e[_0x239f('0x0')](_0x4d0026,function(_0x14742b,_0x475362){if(_0x14742b){_0x284e2a(_0x14742b);}if(_0x475362['slots']){for(const _0x25594a in _0x475362['slots']){if(_0x475362[_0x239f('0x1')]['hasOwnProperty'](_0x25594a)){var _0xb6f9b1=_0x475362[_0x239f('0x1')][_0x25594a];_0x475362[_0x239f('0x2')+_0x25594a]=_0xb6f9b1;}}}_0x81a90f(_0x475362);});});}module[_0x239f('0x3')]=function(_0x3cffca,_0x480182,_0x403f6a,_0x3ca967,_0xa54c04,_0x58a747){var _0x13e9eb=new AWS[(_0x239f('0x4'))]({'accessKeyId':_0x480182,'secretAccessKey':_0x403f6a,'region':_0x3ca967});var _0x4eabf1={'botAlias':'$LATEST','botName':_0x58a747,'inputText':_0xa54c04,'userId':_0x3cffca};return lexResult(_0x13e9eb,_0x4eabf1);};
\ No newline at end of file
index 220062c..ce820df 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9fb6=['exports'];(function(_0x52530d,_0x3b0948){var _0x231a32=function(_0x113b63){while(--_0x113b63){_0x52530d['push'](_0x52530d['shift']());}};_0x231a32(++_0x3b0948);}(_0x9fb6,0xaa));var _0x69fb=function(_0x528896,_0x106fc3){_0x528896=_0x528896-0x0;var _0x186d7e=_0x9fb6[_0x528896];return _0x186d7e;};'use strict';var polly=require('./lib/api');module[_0x69fb('0x0')]=function(_0x4feba9,_0x186018,_0x2b4d30,_0x966f4a,_0x314ba5,_0x77f6d2,_0x966e5a){return polly(_0x4feba9,_0x186018,_0x2b4d30,_0x966f4a,_0x314ba5,_0x77f6d2,_0x966e5a);};
\ No newline at end of file
+var _0xeeb5=['exports'];(function(_0x2dafbe,_0x5d04de){var _0x58a45a=function(_0x50ac96){while(--_0x50ac96){_0x2dafbe['push'](_0x2dafbe['shift']());}};_0x58a45a(++_0x5d04de);}(_0xeeb5,0x16e));var _0x5eeb=function(_0x4a9fb1,_0x273043){_0x4a9fb1=_0x4a9fb1-0x0;var _0x348672=_0xeeb5[_0x4a9fb1];return _0x348672;};'use strict';var polly=require('./lib/api');module[_0x5eeb('0x0')]=function(_0x2d34bc,_0x26fb93,_0x4d2b2f,_0x1c1176,_0x155a48,_0x26480b,_0x451e1b){return polly(_0x2d34bc,_0x26fb93,_0x4d2b2f,_0x1c1176,_0x155a48,_0x26480b,_0x451e1b);};
\ No newline at end of file
index 48dcf41..84281ff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x648f=['Invalid\x20data\x20response\x20from\x20aws\x20Polly!','No\x20data\x20response\x20from\x20aws\x20Polly!','exports','Polly','text','bluebird','randomstring','writeFile'];(function(_0x2f1d2f,_0x527d85){var _0x2874cf=function(_0x3203df){while(--_0x3203df){_0x2f1d2f['push'](_0x2f1d2f['shift']());}};_0x2874cf(++_0x527d85);}(_0x648f,0x9d));var _0xf648=function(_0x24a7c9,_0x157c78){_0x24a7c9=_0x24a7c9-0x0;var _0x451a81=_0x648f[_0x24a7c9];return _0x451a81;};'use strict';var fs=require('fs');var path=require('path');var BPromise=require(_0xf648('0x0'));var rs=require(_0xf648('0x1'));var AWS=require('aws-sdk');function pollyResult(_0x28a34c,_0x59b2c5,_0x4b1441){return new BPromise(function(_0x96e92e,_0x3bc37a){_0x28a34c['synthesizeSpeech'](_0x59b2c5,function(_0x32d21b,_0x64b66e){if(_0x32d21b){_0x3bc37a(_0x32d21b);}else if(_0x64b66e){if(_0x64b66e['AudioStream']instanceof Buffer){fs[_0xf648('0x2')](_0x4b1441,_0x64b66e['AudioStream'],function(_0x2e3577){if(_0x2e3577){_0x3bc37a(_0x2e3577);}else{_0x96e92e();}});}else{_0x3bc37a(new Error(_0xf648('0x3')));}}else{_0x3bc37a(new Error(_0xf648('0x4')));}});});}module[_0xf648('0x5')]=function(_0x40e515,_0x14c8c8,_0x1cff80,_0x12786c,_0x5c330d,_0x37874a,_0x16c703){var _0x37790a=new AWS[(_0xf648('0x6'))]({'accessKeyId':_0x40e515,'secretAccessKey':_0x14c8c8,'region':_0x1cff80});var _0x4fdd68={'Text':_0x5c330d,'TextType':_0x37874a||_0xf648('0x7'),'OutputFormat':'mp3','VoiceId':_0x12786c};return pollyResult(_0x37790a,_0x4fdd68,_0x16c703);};
\ No newline at end of file
+var _0x63b3=['synthesizeSpeech','AudioStream','writeFile','Invalid\x20data\x20response\x20from\x20aws\x20Polly!','No\x20data\x20response\x20from\x20aws\x20Polly!','exports','Polly','mp3','randomstring','aws-sdk'];(function(_0x34bc30,_0x177cb0){var _0x5706de=function(_0x535a8c){while(--_0x535a8c){_0x34bc30['push'](_0x34bc30['shift']());}};_0x5706de(++_0x177cb0);}(_0x63b3,0xf8));var _0x363b=function(_0x487630,_0x506b7c){_0x487630=_0x487630-0x0;var _0x3a9f23=_0x63b3[_0x487630];return _0x3a9f23;};'use strict';var fs=require('fs');var path=require('path');var BPromise=require('bluebird');var rs=require(_0x363b('0x0'));var AWS=require(_0x363b('0x1'));function pollyResult(_0x42bd27,_0x5cdfa9,_0x2fb1a6){return new BPromise(function(_0x5c3cfb,_0x46b2ac){_0x42bd27[_0x363b('0x2')](_0x5cdfa9,function(_0xde0d0b,_0x1ca3f7){if(_0xde0d0b){_0x46b2ac(_0xde0d0b);}else if(_0x1ca3f7){if(_0x1ca3f7[_0x363b('0x3')]instanceof Buffer){fs[_0x363b('0x4')](_0x2fb1a6,_0x1ca3f7[_0x363b('0x3')],function(_0x4520d5){if(_0x4520d5){_0x46b2ac(_0x4520d5);}else{_0x5c3cfb();}});}else{_0x46b2ac(new Error(_0x363b('0x5')));}}else{_0x46b2ac(new Error(_0x363b('0x6')));}});});}module[_0x363b('0x7')]=function(_0x1d8f08,_0x1a22ef,_0x2c1627,_0x2d9965,_0x23a2f9,_0x469df0,_0x106203){var _0x4b4b26=new AWS[(_0x363b('0x8'))]({'accessKeyId':_0x1d8f08,'secretAccessKey':_0x1a22ef,'region':_0x2c1627});var _0x59f00f={'Text':_0x23a2f9,'TextType':_0x469df0||'text','OutputFormat':_0x363b('0x9'),'VoiceId':_0x2d9965};return pollyResult(_0x4b4b26,_0x59f00f,_0x106203);};
\ No newline at end of file
index 7dcfc6d..c53e234 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4c71=['exports','./lib/api'];(function(_0x3c6f47,_0x5b7a13){var _0x1c1628=function(_0x28cd42){while(--_0x28cd42){_0x3c6f47['push'](_0x3c6f47['shift']());}};_0x1c1628(++_0x5b7a13);}(_0x4c71,0x12b));var _0x14c7=function(_0x3511d3,_0x4107ae){_0x3511d3=_0x3511d3-0x0;var _0x5d6321=_0x4c71[_0x3511d3];return _0x5d6321;};'use strict';var asr=require(_0x14c7('0x0'));module[_0x14c7('0x1')]=function(_0x581a30,_0x27692c,_0x348462,_0x3a0e7c){return asr(_0x581a30,_0x27692c,_0x348462);};
\ No newline at end of file
+'use strict';var asr=require('./lib/api');module['exports']=function(_0x2ace0e,_0x390dea,_0x4dbd4c,_0x556ed5){return asr(_0x2ace0e,_0x390dea,_0x4dbd4c);};
\ No newline at end of file
index 3a2ec55..4bc0e2c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47cc=['length','string','key\x20should\x20be\x20a\x20string','readFileSync','toString','base64','POST','/v1/speech:recognize?key=','LINEAR16','url','exports'];(function(_0x45ce0c,_0x391122){var _0x527821=function(_0x5ebe2e){while(--_0x5ebe2e){_0x45ce0c['push'](_0x45ce0c['shift']());}};_0x527821(++_0x391122);}(_0x47cc,0xb9));var _0xc47c=function(_0x51ec36,_0x58357c){_0x51ec36=_0x51ec36-0x0;var _0x2413a8=_0x47cc[_0x51ec36];return _0x2413a8;};'use strict';var url=require(_0xc47c('0x0'));var BPromise=require('bluebird');var fs=require('fs');var host='https://speech.googleapis.com';module[_0xc47c('0x1')]=function(_0x295ebc,_0x537748,_0xd45593){return new BPromise(function(_0x5e71cc,_0x116dd2){var _0x47b447;if(typeof _0x295ebc!=='string'||_0x295ebc[_0xc47c('0x2')]===0x0){return _0x116dd2('filepath\x20should\x20be\x20a\x20string');}if(typeof _0x537748!==_0xc47c('0x3')||_0x537748['length']===0x0){return _0x116dd2(_0xc47c('0x4'));}if(typeof _0xd45593!=='undefined'&&(typeof _0xd45593!==_0xc47c('0x3')||_0xd45593['length']===0x0)){return _0x116dd2('lang\x20should\x20be\x20a\x20string');}try{_0x47b447=fs[_0xc47c('0x5')](_0x295ebc)[_0xc47c('0x6')](_0xc47c('0x7'));}catch(_0xc5eaf7){return _0x116dd2(_0xc5eaf7);}return _0x5e71cc({'method':_0xc47c('0x8'),'uri':host+_0xc47c('0x9')+_0x537748,'body':{'config':{'encoding':_0xc47c('0xa'),'sampleRateHertz':'8000','languageCode':_0xd45593},'audio':{'content':_0x47b447}},'json':!![]});});};
\ No newline at end of file
+var _0x74d0=['https://speech.googleapis.com','string','length','filepath\x20should\x20be\x20a\x20string','key\x20should\x20be\x20a\x20string','undefined','lang\x20should\x20be\x20a\x20string','toString','base64','POST','/v1/speech:recognize?key=','url','bluebird'];(function(_0x3f7d24,_0x3ce1d5){var _0x143f6e=function(_0x4689be){while(--_0x4689be){_0x3f7d24['push'](_0x3f7d24['shift']());}};_0x143f6e(++_0x3ce1d5);}(_0x74d0,0x191));var _0x074d=function(_0x297fd3,_0x115406){_0x297fd3=_0x297fd3-0x0;var _0x2af381=_0x74d0[_0x297fd3];return _0x2af381;};'use strict';var url=require(_0x074d('0x0'));var BPromise=require(_0x074d('0x1'));var fs=require('fs');var host=_0x074d('0x2');module['exports']=function(_0x3b6b3a,_0xc18df,_0xd8e3f8){return new BPromise(function(_0x19ff78,_0x2c4122){var _0x2c28d7;if(typeof _0x3b6b3a!==_0x074d('0x3')||_0x3b6b3a[_0x074d('0x4')]===0x0){return _0x2c4122(_0x074d('0x5'));}if(typeof _0xc18df!=='string'||_0xc18df[_0x074d('0x4')]===0x0){return _0x2c4122(_0x074d('0x6'));}if(typeof _0xd8e3f8!==_0x074d('0x7')&&(typeof _0xd8e3f8!==_0x074d('0x3')||_0xd8e3f8[_0x074d('0x4')]===0x0)){return _0x2c4122(_0x074d('0x8'));}try{_0x2c28d7=fs['readFileSync'](_0x3b6b3a)[_0x074d('0x9')](_0x074d('0xa'));}catch(_0x3cac42){return _0x2c4122(_0x3cac42);}return _0x19ff78({'method':_0x074d('0xb'),'uri':host+_0x074d('0xc')+_0xc18df,'body':{'config':{'encoding':'LINEAR16','sampleRateHertz':'8000','languageCode':_0xd8e3f8},'audio':{'content':_0x2c28d7}},'json':!![]});});};
\ No newline at end of file
index 81508e3..10cb4be 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xedd9=['exports'];(function(_0x1cf7b5,_0x4b344a){var _0x553db9=function(_0x43aac0){while(--_0x43aac0){_0x1cf7b5['push'](_0x1cf7b5['shift']());}};_0x553db9(++_0x4b344a);}(_0xedd9,0xfc));var _0x9edd=function(_0x136cf5,_0x5bdd81){_0x136cf5=_0x136cf5-0x0;var _0x17eb74=_0xedd9[_0x136cf5];return _0x17eb74;};var asr=require('./asr');module[_0x9edd('0x0')]={'asr':asr};
\ No newline at end of file
+var asr=require('./asr');module['exports']={'asr':asr};
\ No newline at end of file
index d667b67..32d4aca 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb10b=['url','parse','randomstring','sox','request-promise','util','querystring','moment','apiai-promise','md5','./aws','./tilde','./sestek','../../../config/logger','agi','https://api.ispeech.org/api/rest','protocol','WHAT_EVER','get','statusCode','error','\x20failed,\x20status\x20code\x20=\x20','statusMessage','request\x20to\x20','createWriteStream','finish','finish\x20download\x20file','close','unlink','download\x20error','pipe','end','https:','data','transcode','wav','error\x20convert','info','finish\x20to\x20convert','start','tmp','.wav','base64','then','readFileSync','toString','googleTTS','resolve','generate','.mp3','goggleTTS\x20path','split','uri','results','alternatives','transcript','join','map','confidence','googleASR\x20transcription','catch','message','googleDialogflow','textRequest','stringify','result','source','resolvedQuery','action','fulfillment','score','status','code','metadata','endConversation','isFallbackIntent','tildeASR','asr','Tilde\x20ASR\x20transcription','awsPolly','polly','chmodSync','777','awsLex','lex','ispeechTTS','format','%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3','ispeechASR','freeform=3','nda','channelData','CustomAction','CustomActionData','AudioFromTts','Data','audiofile','dirName','path','https'];(function(_0x1a595a,_0x263824){var _0x33f008=function(_0x1e2f9c){while(--_0x1e2f9c){_0x1a595a['push'](_0x1a595a['shift']());}};_0x33f008(++_0x263824);}(_0xb10b,0x12a));var _0xbb10=function(_0x180659,_0xa1b1c4){_0x180659=_0x180659-0x0;var _0x224761=_0xb10b[_0x180659];return _0x224761;};'use strict';var fs=require('fs');var path=require(_0xbb10('0x0'));var http=require('http');var https=require(_0xbb10('0x1'));var urlParse=require(_0xbb10('0x2'))[_0xbb10('0x3')];var BPromise=require('bluebird');var rs=require(_0xbb10('0x4'));var sox=require(_0xbb10('0x5'));var rp=require(_0xbb10('0x6'));var util=require(_0xbb10('0x7'));var querystring=require(_0xbb10('0x8'));var moment=require(_0xbb10('0x9'));var tts=require('google-tts-api');var apiai=require(_0xbb10('0xa'));var md5=require(_0xbb10('0xb'));var google=require('./google');var aws=require(_0xbb10('0xc'));var tilde=require(_0xbb10('0xd'));var sestek=require(_0xbb10('0xe'));var logger=require(_0xbb10('0xf'))(_0xbb10('0x10'));var ISPEECH_API=_0xbb10('0x11');function downloadFile(_0x229887,_0xa3adc8){return new BPromise(function(_0x5ab04a,_0x4e47f8){var _0x20bd61=urlParse(_0x229887);var _0x118a74=_0x20bd61[_0xbb10('0x12')]==='https:'?https:http;var _0x408248={'host':_0x20bd61['host'],'path':_0x20bd61[_0xbb10('0x0')],'headers':{'user-agent':_0xbb10('0x13')}};_0x118a74[_0xbb10('0x14')](_0x408248,function(_0x193a27){if(_0x193a27[_0xbb10('0x15')]!==0xc8){logger[_0xbb10('0x16')]('request\x20to\x20'+_0x229887+_0xbb10('0x17')+_0x193a27[_0xbb10('0x15')]+'\x20('+_0x193a27[_0xbb10('0x18')]+')');_0x4e47f8(new Error(_0xbb10('0x19')+_0x229887+_0xbb10('0x17')+_0x193a27[_0xbb10('0x15')]+'\x20('+_0x193a27[_0xbb10('0x18')]+')'));return;}var _0x36b5e8=fs[_0xbb10('0x1a')](_0xa3adc8);_0x36b5e8['on'](_0xbb10('0x1b'),function(){logger['info'](_0xbb10('0x1c'));_0x36b5e8[_0xbb10('0x1d')](_0x5ab04a);});_0x36b5e8['on'](_0xbb10('0x16'),function(_0x42db98){fs[_0xbb10('0x1e')](_0xa3adc8);logger[_0xbb10('0x16')](_0xbb10('0x1f'),_0x42db98);_0x4e47f8(_0x42db98);});_0x193a27[_0xbb10('0x20')](_0x36b5e8);})['on'](_0xbb10('0x16'),function(_0xe1c665){logger['error'](_0xe1c665);_0x4e47f8(_0xe1c665);})[_0xbb10('0x21')]();});}function uploadFile(_0x19f48d){return new BPromise(function(_0x388fab,_0x109908){var _0xdf237d=urlParse(_0x19f48d);var _0x44e563=_0xdf237d['protocol']===_0xbb10('0x22')?https:http;var _0x12ef77={'host':_0xdf237d['host'],'path':_0xdf237d['path'],'headers':{'user-agent':_0xbb10('0x13')}};_0x44e563[_0xbb10('0x14')](_0x12ef77,function(_0x2e911d){if(_0x2e911d[_0xbb10('0x15')]!==0xc8){_0x109908(new Error(_0xbb10('0x19')+_0x19f48d+_0xbb10('0x17')+_0x2e911d[_0xbb10('0x15')]+'\x20('+_0x2e911d[_0xbb10('0x18')]+')'));return;}var _0x7f2377='';_0x2e911d['on'](_0xbb10('0x23'),function(_0x3ba6cd){_0x7f2377+=_0x3ba6cd;});_0x2e911d['on'](_0xbb10('0x21'),function(){_0x388fab(_0x7f2377);});})['on']('error',function(_0x4fedac){_0x109908(_0x4fedac);})['end']();});}function convertFile(_0xc93a04,_0x3c5ae7){return new BPromise(function(_0x2c89b9,_0x4e25ff){var _0x2fdde9=sox[_0xbb10('0x24')](_0xc93a04,_0x3c5ae7,{'sampleRate':0x1f40,'format':_0xbb10('0x25'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x2fdde9['on'](_0xbb10('0x16'),function(_0x1acce9){logger[_0xbb10('0x16')](_0xbb10('0x26'),_0x1acce9);_0x4e25ff(_0x1acce9);});_0x2fdde9['on']('end',function(){logger[_0xbb10('0x27')](_0xbb10('0x28'));_0x2c89b9();});_0x2fdde9[_0xbb10('0x29')]();});}function base64Decode(_0x2e0249,_0x1d30aa){var _0x2ff4c1=path['resolve'](__dirname,_0xbb10('0x2a'),rs['generate'](0x4)+_0xbb10('0x2b'));fs['writeFileSync'](_0x2ff4c1,_0x2e0249,_0xbb10('0x2c'));return convertFile(_0x2ff4c1,_0x1d30aa)[_0xbb10('0x2d')](function(){try{fs[_0xbb10('0x1e')](_0x2ff4c1);fs['chmodSync'](_0x1d30aa,'777');}catch(_0x4c3744){logger[_0xbb10('0x16')](_0x4c3744);}return _0x1d30aa['split']('.')[0x0];});}function base64Encode(_0x359ad4){var _0x37dde7=fs[_0xbb10('0x2e')](_0x359ad4);return new Buffer(_0x37dde7)[_0xbb10('0x2f')](_0xbb10('0x2c'));}exports[_0xbb10('0x30')]=function(_0xf85197,_0x4975f5){var _0x25acb3,_0x1da9c9;return tts(_0xf85197,_0x4975f5||'en',0x1)[_0xbb10('0x2d')](function(_0x8c1ce6){logger[_0xbb10('0x27')](_0x8c1ce6);_0x25acb3=path[_0xbb10('0x31')](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x33'));return downloadFile(_0x8c1ce6,_0x25acb3);})['then'](function(){_0x1da9c9=path[_0xbb10('0x31')](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x2b'));return convertFile(_0x25acb3,_0x1da9c9);})['then'](function(){try{fs[_0xbb10('0x1e')](_0x25acb3);fs['chmodSync'](_0x1da9c9,'777');}catch(_0x3eb3cc){logger[_0xbb10('0x16')](_0x3eb3cc);}logger[_0xbb10('0x27')](_0xbb10('0x34'),_0x1da9c9[_0xbb10('0x35')]('.')[0x0]);return _0x1da9c9[_0xbb10('0x35')]('.')[0x0];});};exports['googleASR']=function(_0x1e5bbd,_0x25d72f,_0x52de31){return google['asr'](_0x1e5bbd,_0x25d72f,_0x52de31)['then'](function(_0x31bee3){logger[_0xbb10('0x27')](_0x31bee3[_0xbb10('0x36')]);return rp(_0x31bee3);})['then'](function(_0x3c0cd7){var _0x3e8538='';var _0x4345f3=0x0;try{fs['unlink'](_0x1e5bbd);}catch(_0x17b6c5){logger[_0xbb10('0x16')](_0x17b6c5);}if(_0x3c0cd7&&_0x3c0cd7[_0xbb10('0x37')]){_0x3e8538=_0x3c0cd7[_0xbb10('0x37')]['map'](function(_0xd238e9){return _0xd238e9&&_0xd238e9[_0xbb10('0x38')][0x0]&&_0xd238e9['alternatives'][0x0][_0xbb10('0x39')]?_0xd238e9[_0xbb10('0x38')][0x0][_0xbb10('0x39')]:'';})[_0xbb10('0x3a')]('\x0a');_0x4345f3=_0x3c0cd7[_0xbb10('0x37')][_0xbb10('0x3b')](function(_0x5f3d67){return _0x5f3d67&&_0x5f3d67[_0xbb10('0x38')][0x0]&&_0x5f3d67[_0xbb10('0x38')][0x0][_0xbb10('0x3c')]?_0x5f3d67[_0xbb10('0x38')][0x0]['confidence']:0x0;})[_0xbb10('0x3a')]('\x0a');}logger[_0xbb10('0x27')](_0xbb10('0x3d'),_0x3e8538);logger[_0xbb10('0x27')]('googleASR\x20confidence',_0x4345f3);return{'transcript':_0x3e8538,'confidence':_0x4345f3};})[_0xbb10('0x3e')](function(_0x202c60){logger['error']('[%s]\x20%s:%s',_0x202c60[_0xbb10('0x15')],_0x202c60['name'],_0x202c60[_0xbb10('0x3f')]);});};exports[_0xbb10('0x40')]=function(_0x4c66d8,_0x366608,_0x1d82bf,_0x474e99){var _0x5cf4f8=apiai(_0x366608,{'language':_0x474e99||'en'});return _0x5cf4f8[_0xbb10('0x41')](_0x1d82bf,{'sessionId':md5(_0x4c66d8)})[_0xbb10('0x2d')](function(_0x3b9fdf){logger[_0xbb10('0x27')](JSON[_0xbb10('0x42')](_0x3b9fdf));return{'source':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x44')],'resolvedQuery':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x45')],'action':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x46')],'actionIncomplete':_0x3b9fdf[_0xbb10('0x43')]['actionIncomplete'],'speech':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x47')]['speech'],'score':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x48')],'statusCode':_0x3b9fdf[_0xbb10('0x49')][_0xbb10('0x4a')],'endConversation':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x4b')][_0xbb10('0x4c')]||![],'isFallbackIntent':_0x3b9fdf['result']['metadata'][_0xbb10('0x4d')]};});};exports[_0xbb10('0x4e')]=function(_0x2b12bd,_0x57d2c0,_0x5f0c12,_0x3cd6f3){return tilde[_0xbb10('0x4f')](_0x2b12bd,_0x57d2c0,_0x5f0c12,_0x3cd6f3)[_0xbb10('0x2d')](function(_0xf820fe){try{fs[_0xbb10('0x1e')](_0x2b12bd);}catch(_0x22b315){logger[_0xbb10('0x16')](_0x22b315);}logger[_0xbb10('0x27')](_0xbb10('0x50'),_0xf820fe[_0xbb10('0x39')]);logger['info']('Tilde\x20ASR\x20confidence',_0xf820fe[_0xbb10('0x3c')]);return _0xf820fe;});};exports[_0xbb10('0x51')]=function(_0x36ab7d,_0xb014b0,_0x36aa7d,_0x440f9e,_0x358e7e,_0x445870){var _0x1c0d8f=path[_0xbb10('0x31')](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x33'));var _0x2e6fd9;return aws[_0xbb10('0x52')](_0x36ab7d,_0xb014b0,_0x36aa7d,_0x440f9e,_0x358e7e,_0x445870,_0x1c0d8f)['then'](function(){_0x2e6fd9=path[_0xbb10('0x31')](__dirname,'tmp',rs[_0xbb10('0x32')](0x4)+_0xbb10('0x2b'));return convertFile(_0x1c0d8f,_0x2e6fd9);})[_0xbb10('0x2d')](function(){try{fs[_0xbb10('0x1e')](_0x1c0d8f);fs[_0xbb10('0x53')](_0x2e6fd9,_0xbb10('0x54'));}catch(_0x2e3326){logger[_0xbb10('0x16')](_0x2e3326);}return _0x2e6fd9[_0xbb10('0x35')]('.')[0x0];});};exports[_0xbb10('0x55')]=function(_0x44a056,_0x1c2dce,_0x1d49e1,_0x3d7e17,_0x4475e1,_0x5de0cc){return aws[_0xbb10('0x56')](_0x44a056,_0x1c2dce,_0x1d49e1,_0x3d7e17,_0x4475e1,_0x5de0cc)[_0xbb10('0x2d')](function(_0x1b83a9){logger[_0xbb10('0x27')](JSON[_0xbb10('0x42')](_0x1b83a9));return _0x1b83a9;});};exports[_0xbb10('0x57')]=function(_0x4bedd0,_0x120bda,_0x4731ce,_0x2909a1){var _0x14fed3=util[_0xbb10('0x58')](_0xbb10('0x59'),ISPEECH_API,_0x4bedd0,encodeURIComponent(_0x120bda),_0x4731ce,_0x2909a1);var _0x175872=path[_0xbb10('0x31')](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x33'));var _0x2a1ce1;return downloadFile(_0x14fed3,_0x175872)[_0xbb10('0x2d')](function(){_0x2a1ce1=path['resolve'](__dirname,'tmp',rs[_0xbb10('0x32')](0x4)+_0xbb10('0x2b'));return convertFile(_0x175872,_0x2a1ce1);})[_0xbb10('0x2d')](function(){try{fs[_0xbb10('0x1e')](_0x175872);fs['chmodSync'](_0x2a1ce1,'777');}catch(_0x79411e){logger[_0xbb10('0x16')](_0x79411e);}return _0x2a1ce1[_0xbb10('0x35')]('.')[0x0];});};exports[_0xbb10('0x5a')]=function(_0x412f13,_0x3e9753,_0x45c0dc,_0x4a5fb9){var _0x117e84=util[_0xbb10('0x58')]('%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s',ISPEECH_API,_0x3e9753,_0x45c0dc,base64Encode(_0x412f13),_0x4a5fb9?util['format']('model=%s',encodeURIComponent(_0x4a5fb9)):_0xbb10('0x5b'));return uploadFile(_0x117e84)[_0xbb10('0x2d')](function(_0x155dc5){return querystring['parse'](_0x155dc5);});};exports['sestekNDA']=function(_0x5846d1,_0x3ebc5f){return sestek[_0xbb10('0x5c')](_0x5846d1,_0x3ebc5f)[_0xbb10('0x2d')](function(_0x4e9fbd){logger[_0xbb10('0x27')](JSON[_0xbb10('0x42')](_0x4e9fbd));var _0x5a6538={'speech':_0x4e9fbd['text'],'action':_0x4e9fbd[_0xbb10('0x5d')]?_0x4e9fbd[_0xbb10('0x5d')][_0xbb10('0x5e')]:undefined,'actiondata':_0x4e9fbd[_0xbb10('0x5d')]?_0x4e9fbd['channelData'][_0xbb10('0x5f')]:undefined};if(_0x4e9fbd[_0xbb10('0x5d')]&&_0x4e9fbd[_0xbb10('0x5d')]['AudioFromTts']){return base64Decode(_0x4e9fbd[_0xbb10('0x5d')][_0xbb10('0x60')][_0xbb10('0x61')],path['resolve'](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x2b')))[_0xbb10('0x2d')](function(_0x5e4a6e){_0x5a6538[_0xbb10('0x62')]=_0x5e4a6e;return _0x5a6538;});}return _0x5a6538;});};exports[_0xbb10('0x63')]=function(){return __dirname;};
\ No newline at end of file
+var _0xb10b=['url','parse','randomstring','sox','request-promise','util','querystring','moment','apiai-promise','md5','./aws','./tilde','./sestek','../../../config/logger','agi','https://api.ispeech.org/api/rest','protocol','WHAT_EVER','get','statusCode','error','\x20failed,\x20status\x20code\x20=\x20','statusMessage','request\x20to\x20','createWriteStream','finish','finish\x20download\x20file','close','unlink','download\x20error','pipe','end','https:','data','transcode','wav','error\x20convert','info','finish\x20to\x20convert','start','tmp','.wav','base64','then','readFileSync','toString','googleTTS','resolve','generate','.mp3','goggleTTS\x20path','split','uri','results','alternatives','transcript','join','map','confidence','googleASR\x20transcription','catch','message','googleDialogflow','textRequest','stringify','result','source','resolvedQuery','action','fulfillment','score','status','code','metadata','endConversation','isFallbackIntent','tildeASR','asr','Tilde\x20ASR\x20transcription','awsPolly','polly','chmodSync','777','awsLex','lex','ispeechTTS','format','%s?apikey=%s&action=convert&text=%s&voice=%s&speed=%s&format=mp3','ispeechASR','freeform=3','nda','channelData','CustomAction','CustomActionData','AudioFromTts','Data','audiofile','dirName','path','https'];(function(_0x27ddf5,_0x5a3e18){var _0x26e74a=function(_0x5f24ac){while(--_0x5f24ac){_0x27ddf5['push'](_0x27ddf5['shift']());}};_0x26e74a(++_0x5a3e18);}(_0xb10b,0x12a));var _0xbb10=function(_0x252782,_0x5b7839){_0x252782=_0x252782-0x0;var _0x5123ea=_0xb10b[_0x252782];return _0x5123ea;};'use strict';var fs=require('fs');var path=require(_0xbb10('0x0'));var http=require('http');var https=require(_0xbb10('0x1'));var urlParse=require(_0xbb10('0x2'))[_0xbb10('0x3')];var BPromise=require('bluebird');var rs=require(_0xbb10('0x4'));var sox=require(_0xbb10('0x5'));var rp=require(_0xbb10('0x6'));var util=require(_0xbb10('0x7'));var querystring=require(_0xbb10('0x8'));var moment=require(_0xbb10('0x9'));var tts=require('google-tts-api');var apiai=require(_0xbb10('0xa'));var md5=require(_0xbb10('0xb'));var google=require('./google');var aws=require(_0xbb10('0xc'));var tilde=require(_0xbb10('0xd'));var sestek=require(_0xbb10('0xe'));var logger=require(_0xbb10('0xf'))(_0xbb10('0x10'));var ISPEECH_API=_0xbb10('0x11');function downloadFile(_0x229887,_0xa3adc8){return new BPromise(function(_0x5ab04a,_0x4e47f8){var _0x20bd61=urlParse(_0x229887);var _0x118a74=_0x20bd61[_0xbb10('0x12')]==='https:'?https:http;var _0x408248={'host':_0x20bd61['host'],'path':_0x20bd61[_0xbb10('0x0')],'headers':{'user-agent':_0xbb10('0x13')}};_0x118a74[_0xbb10('0x14')](_0x408248,function(_0x193a27){if(_0x193a27[_0xbb10('0x15')]!==0xc8){logger[_0xbb10('0x16')]('request\x20to\x20'+_0x229887+_0xbb10('0x17')+_0x193a27[_0xbb10('0x15')]+'\x20('+_0x193a27[_0xbb10('0x18')]+')');_0x4e47f8(new Error(_0xbb10('0x19')+_0x229887+_0xbb10('0x17')+_0x193a27[_0xbb10('0x15')]+'\x20('+_0x193a27[_0xbb10('0x18')]+')'));return;}var _0x36b5e8=fs[_0xbb10('0x1a')](_0xa3adc8);_0x36b5e8['on'](_0xbb10('0x1b'),function(){logger['info'](_0xbb10('0x1c'));_0x36b5e8[_0xbb10('0x1d')](_0x5ab04a);});_0x36b5e8['on'](_0xbb10('0x16'),function(_0x42db98){fs[_0xbb10('0x1e')](_0xa3adc8);logger[_0xbb10('0x16')](_0xbb10('0x1f'),_0x42db98);_0x4e47f8(_0x42db98);});_0x193a27[_0xbb10('0x20')](_0x36b5e8);})['on'](_0xbb10('0x16'),function(_0xe1c665){logger['error'](_0xe1c665);_0x4e47f8(_0xe1c665);})[_0xbb10('0x21')]();});}function uploadFile(_0x19f48d){return new BPromise(function(_0x388fab,_0x109908){var _0xdf237d=urlParse(_0x19f48d);var _0x44e563=_0xdf237d['protocol']===_0xbb10('0x22')?https:http;var _0x12ef77={'host':_0xdf237d['host'],'path':_0xdf237d['path'],'headers':{'user-agent':_0xbb10('0x13')}};_0x44e563[_0xbb10('0x14')](_0x12ef77,function(_0x2e911d){if(_0x2e911d[_0xbb10('0x15')]!==0xc8){_0x109908(new Error(_0xbb10('0x19')+_0x19f48d+_0xbb10('0x17')+_0x2e911d[_0xbb10('0x15')]+'\x20('+_0x2e911d[_0xbb10('0x18')]+')'));return;}var _0x7f2377='';_0x2e911d['on'](_0xbb10('0x23'),function(_0x3ba6cd){_0x7f2377+=_0x3ba6cd;});_0x2e911d['on'](_0xbb10('0x21'),function(){_0x388fab(_0x7f2377);});})['on']('error',function(_0x4fedac){_0x109908(_0x4fedac);})['end']();});}function convertFile(_0xc93a04,_0x3c5ae7){return new BPromise(function(_0x2c89b9,_0x4e25ff){var _0x2fdde9=sox[_0xbb10('0x24')](_0xc93a04,_0x3c5ae7,{'sampleRate':0x1f40,'format':_0xbb10('0x25'),'channelCount':0x1,'bitRate':0xc0*0x400,'compressionQuality':0x5});_0x2fdde9['on'](_0xbb10('0x16'),function(_0x1acce9){logger[_0xbb10('0x16')](_0xbb10('0x26'),_0x1acce9);_0x4e25ff(_0x1acce9);});_0x2fdde9['on']('end',function(){logger[_0xbb10('0x27')](_0xbb10('0x28'));_0x2c89b9();});_0x2fdde9[_0xbb10('0x29')]();});}function base64Decode(_0x2e0249,_0x1d30aa){var _0x2ff4c1=path['resolve'](__dirname,_0xbb10('0x2a'),rs['generate'](0x4)+_0xbb10('0x2b'));fs['writeFileSync'](_0x2ff4c1,_0x2e0249,_0xbb10('0x2c'));return convertFile(_0x2ff4c1,_0x1d30aa)[_0xbb10('0x2d')](function(){try{fs[_0xbb10('0x1e')](_0x2ff4c1);fs['chmodSync'](_0x1d30aa,'777');}catch(_0x4c3744){logger[_0xbb10('0x16')](_0x4c3744);}return _0x1d30aa['split']('.')[0x0];});}function base64Encode(_0x359ad4){var _0x37dde7=fs[_0xbb10('0x2e')](_0x359ad4);return new Buffer(_0x37dde7)[_0xbb10('0x2f')](_0xbb10('0x2c'));}exports[_0xbb10('0x30')]=function(_0xf85197,_0x4975f5){var _0x25acb3,_0x1da9c9;return tts(_0xf85197,_0x4975f5||'en',0x1)[_0xbb10('0x2d')](function(_0x8c1ce6){logger[_0xbb10('0x27')](_0x8c1ce6);_0x25acb3=path[_0xbb10('0x31')](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x33'));return downloadFile(_0x8c1ce6,_0x25acb3);})['then'](function(){_0x1da9c9=path[_0xbb10('0x31')](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x2b'));return convertFile(_0x25acb3,_0x1da9c9);})['then'](function(){try{fs[_0xbb10('0x1e')](_0x25acb3);fs['chmodSync'](_0x1da9c9,'777');}catch(_0x3eb3cc){logger[_0xbb10('0x16')](_0x3eb3cc);}logger[_0xbb10('0x27')](_0xbb10('0x34'),_0x1da9c9[_0xbb10('0x35')]('.')[0x0]);return _0x1da9c9[_0xbb10('0x35')]('.')[0x0];});};exports['googleASR']=function(_0x1e5bbd,_0x25d72f,_0x52de31){return google['asr'](_0x1e5bbd,_0x25d72f,_0x52de31)['then'](function(_0x31bee3){logger[_0xbb10('0x27')](_0x31bee3[_0xbb10('0x36')]);return rp(_0x31bee3);})['then'](function(_0x3c0cd7){var _0x3e8538='';var _0x4345f3=0x0;try{fs['unlink'](_0x1e5bbd);}catch(_0x17b6c5){logger[_0xbb10('0x16')](_0x17b6c5);}if(_0x3c0cd7&&_0x3c0cd7[_0xbb10('0x37')]){_0x3e8538=_0x3c0cd7[_0xbb10('0x37')]['map'](function(_0xd238e9){return _0xd238e9&&_0xd238e9[_0xbb10('0x38')][0x0]&&_0xd238e9['alternatives'][0x0][_0xbb10('0x39')]?_0xd238e9[_0xbb10('0x38')][0x0][_0xbb10('0x39')]:'';})[_0xbb10('0x3a')]('\x0a');_0x4345f3=_0x3c0cd7[_0xbb10('0x37')][_0xbb10('0x3b')](function(_0x5f3d67){return _0x5f3d67&&_0x5f3d67[_0xbb10('0x38')][0x0]&&_0x5f3d67[_0xbb10('0x38')][0x0][_0xbb10('0x3c')]?_0x5f3d67[_0xbb10('0x38')][0x0]['confidence']:0x0;})[_0xbb10('0x3a')]('\x0a');}logger[_0xbb10('0x27')](_0xbb10('0x3d'),_0x3e8538);logger[_0xbb10('0x27')]('googleASR\x20confidence',_0x4345f3);return{'transcript':_0x3e8538,'confidence':_0x4345f3};})[_0xbb10('0x3e')](function(_0x202c60){logger['error']('[%s]\x20%s:%s',_0x202c60[_0xbb10('0x15')],_0x202c60['name'],_0x202c60[_0xbb10('0x3f')]);});};exports[_0xbb10('0x40')]=function(_0x4c66d8,_0x366608,_0x1d82bf,_0x474e99){var _0x5cf4f8=apiai(_0x366608,{'language':_0x474e99||'en'});return _0x5cf4f8[_0xbb10('0x41')](_0x1d82bf,{'sessionId':md5(_0x4c66d8)})[_0xbb10('0x2d')](function(_0x3b9fdf){logger[_0xbb10('0x27')](JSON[_0xbb10('0x42')](_0x3b9fdf));return{'source':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x44')],'resolvedQuery':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x45')],'action':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x46')],'actionIncomplete':_0x3b9fdf[_0xbb10('0x43')]['actionIncomplete'],'speech':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x47')]['speech'],'score':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x48')],'statusCode':_0x3b9fdf[_0xbb10('0x49')][_0xbb10('0x4a')],'endConversation':_0x3b9fdf[_0xbb10('0x43')][_0xbb10('0x4b')][_0xbb10('0x4c')]||![],'isFallbackIntent':_0x3b9fdf['result']['metadata'][_0xbb10('0x4d')]};});};exports[_0xbb10('0x4e')]=function(_0x2b12bd,_0x57d2c0,_0x5f0c12,_0x3cd6f3){return tilde[_0xbb10('0x4f')](_0x2b12bd,_0x57d2c0,_0x5f0c12,_0x3cd6f3)[_0xbb10('0x2d')](function(_0xf820fe){try{fs[_0xbb10('0x1e')](_0x2b12bd);}catch(_0x22b315){logger[_0xbb10('0x16')](_0x22b315);}logger[_0xbb10('0x27')](_0xbb10('0x50'),_0xf820fe[_0xbb10('0x39')]);logger['info']('Tilde\x20ASR\x20confidence',_0xf820fe[_0xbb10('0x3c')]);return _0xf820fe;});};exports[_0xbb10('0x51')]=function(_0x36ab7d,_0xb014b0,_0x36aa7d,_0x440f9e,_0x358e7e,_0x445870){var _0x1c0d8f=path[_0xbb10('0x31')](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x33'));var _0x2e6fd9;return aws[_0xbb10('0x52')](_0x36ab7d,_0xb014b0,_0x36aa7d,_0x440f9e,_0x358e7e,_0x445870,_0x1c0d8f)['then'](function(){_0x2e6fd9=path[_0xbb10('0x31')](__dirname,'tmp',rs[_0xbb10('0x32')](0x4)+_0xbb10('0x2b'));return convertFile(_0x1c0d8f,_0x2e6fd9);})[_0xbb10('0x2d')](function(){try{fs[_0xbb10('0x1e')](_0x1c0d8f);fs[_0xbb10('0x53')](_0x2e6fd9,_0xbb10('0x54'));}catch(_0x2e3326){logger[_0xbb10('0x16')](_0x2e3326);}return _0x2e6fd9[_0xbb10('0x35')]('.')[0x0];});};exports[_0xbb10('0x55')]=function(_0x44a056,_0x1c2dce,_0x1d49e1,_0x3d7e17,_0x4475e1,_0x5de0cc){return aws[_0xbb10('0x56')](_0x44a056,_0x1c2dce,_0x1d49e1,_0x3d7e17,_0x4475e1,_0x5de0cc)[_0xbb10('0x2d')](function(_0x1b83a9){logger[_0xbb10('0x27')](JSON[_0xbb10('0x42')](_0x1b83a9));return _0x1b83a9;});};exports[_0xbb10('0x57')]=function(_0x4bedd0,_0x120bda,_0x4731ce,_0x2909a1){var _0x14fed3=util[_0xbb10('0x58')](_0xbb10('0x59'),ISPEECH_API,_0x4bedd0,encodeURIComponent(_0x120bda),_0x4731ce,_0x2909a1);var _0x175872=path[_0xbb10('0x31')](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x33'));var _0x2a1ce1;return downloadFile(_0x14fed3,_0x175872)[_0xbb10('0x2d')](function(){_0x2a1ce1=path['resolve'](__dirname,'tmp',rs[_0xbb10('0x32')](0x4)+_0xbb10('0x2b'));return convertFile(_0x175872,_0x2a1ce1);})[_0xbb10('0x2d')](function(){try{fs[_0xbb10('0x1e')](_0x175872);fs['chmodSync'](_0x2a1ce1,'777');}catch(_0x79411e){logger[_0xbb10('0x16')](_0x79411e);}return _0x2a1ce1[_0xbb10('0x35')]('.')[0x0];});};exports[_0xbb10('0x5a')]=function(_0x412f13,_0x3e9753,_0x45c0dc,_0x4a5fb9){var _0x117e84=util[_0xbb10('0x58')]('%s?apikey=%s&action=recognize&locale=%s&content-type=audio/x-wav&audio=%s&%s',ISPEECH_API,_0x3e9753,_0x45c0dc,base64Encode(_0x412f13),_0x4a5fb9?util['format']('model=%s',encodeURIComponent(_0x4a5fb9)):_0xbb10('0x5b'));return uploadFile(_0x117e84)[_0xbb10('0x2d')](function(_0x155dc5){return querystring['parse'](_0x155dc5);});};exports['sestekNDA']=function(_0x5846d1,_0x3ebc5f){return sestek[_0xbb10('0x5c')](_0x5846d1,_0x3ebc5f)[_0xbb10('0x2d')](function(_0x4e9fbd){logger[_0xbb10('0x27')](JSON[_0xbb10('0x42')](_0x4e9fbd));var _0x5a6538={'speech':_0x4e9fbd['text'],'action':_0x4e9fbd[_0xbb10('0x5d')]?_0x4e9fbd[_0xbb10('0x5d')][_0xbb10('0x5e')]:undefined,'actiondata':_0x4e9fbd[_0xbb10('0x5d')]?_0x4e9fbd['channelData'][_0xbb10('0x5f')]:undefined};if(_0x4e9fbd[_0xbb10('0x5d')]&&_0x4e9fbd[_0xbb10('0x5d')]['AudioFromTts']){return base64Decode(_0x4e9fbd[_0xbb10('0x5d')][_0xbb10('0x60')][_0xbb10('0x61')],path['resolve'](__dirname,_0xbb10('0x2a'),rs[_0xbb10('0x32')](0x4)+_0xbb10('0x2b')))[_0xbb10('0x2d')](function(_0x5e4a6e){_0x5a6538[_0xbb10('0x62')]=_0x5e4a6e;return _0x5a6538;});}return _0x5a6538;});};exports[_0xbb10('0x63')]=function(){return __dirname;};
\ No newline at end of file
index 2196a3f..7374cee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8c31=['./nda'];(function(_0x28353b,_0x551ed9){var _0xbe0d43=function(_0x3020b6){while(--_0x3020b6){_0x28353b['push'](_0x28353b['shift']());}};_0xbe0d43(++_0x551ed9);}(_0x8c31,0x12c));var _0x18c3=function(_0x4d5ba4,_0x20a754){_0x4d5ba4=_0x4d5ba4-0x0;var _0x5009d7=_0x8c31[_0x4d5ba4];return _0x5009d7;};var nda=require(_0x18c3('0x0'));module['exports']={'nda':nda};
\ No newline at end of file
+var _0xfe48=['./nda','exports'];(function(_0x543d0f,_0x175439){var _0x4f6fb4=function(_0x44522a){while(--_0x44522a){_0x543d0f['push'](_0x543d0f['shift']());}};_0x4f6fb4(++_0x175439);}(_0xfe48,0x190));var _0x8fe4=function(_0x1aabc0,_0x5e2f04){_0x1aabc0=_0x1aabc0-0x0;var _0x3b5b8f=_0xfe48[_0x1aabc0];return _0x3b5b8f;};var nda=require(_0x8fe4('0x0'));module[_0x8fe4('0x1')]={'nda':nda};
\ No newline at end of file
index c18e7bb..2a4de63 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7f69=['custom_action','CustomAction','custom_action_data','info','stringify','request-promise','url','../../../../../config/logger','agi','exports','POST','ndauth_url','/token','password','username','then','resolve','/api/NaturalDialogAssistant/v1/Run','ndaactivity_type','message','Nda','callerid','calleridname','extension','text','Bearer\x20','project','body','channelData','ProjectName','ndagenerate_audio','AudioOutputSettings'];(function(_0x2a0183,_0x3fc93c){var _0x158c3a=function(_0x57a903){while(--_0x57a903){_0x2a0183['push'](_0x2a0183['shift']());}};_0x158c3a(++_0x3fc93c);}(_0x7f69,0x1e5));var _0x97f6=function(_0x42bdad,_0x12836c){_0x42bdad=_0x42bdad-0x0;var _0x122626=_0x7f69[_0x42bdad];return _0x122626;};'use strict';var rp=require(_0x97f6('0x0'));var url=require(_0x97f6('0x1'));var logger=require(_0x97f6('0x2'))(_0x97f6('0x3'));module[_0x97f6('0x4')]=function(_0xd9de98,_0x589b0b){var _0xf34ad3={'method':_0x97f6('0x5'),'uri':url['resolve'](_0x589b0b[_0x97f6('0x6')],_0x97f6('0x7')),'form':{'grant_type':_0x97f6('0x8'),'username':_0x589b0b[_0x97f6('0x9')],'password':_0x589b0b['password']},'json':!![]};return rp(_0xf34ad3)[_0x97f6('0xa')](function(_0x497e08){var _0x423ca0={'method':_0x97f6('0x5'),'uri':url[_0x97f6('0xb')](_0x589b0b['ndassistant_url'],_0x97f6('0xc')),'body':{'type':_0x589b0b[_0x97f6('0xd')]||_0x97f6('0xe'),'channelId':_0x97f6('0xf'),'conversation':{'id':_0xd9de98['uniqueid']},'from':{'id':_0xd9de98[_0x97f6('0x10')],'name':_0xd9de98[_0x97f6('0x11')]},'recipient':{'id':_0xd9de98['dnid'],'name':_0xd9de98[_0x97f6('0x12')]},'text':_0x589b0b[_0x97f6('0x13')],'channelData':{}},'headers':{'Authorization':_0x97f6('0x14')+_0x497e08['access_token']},'json':!![]};if(_0x589b0b[_0x97f6('0x15')]){_0x423ca0[_0x97f6('0x16')][_0x97f6('0x17')][_0x97f6('0x18')]=_0x589b0b[_0x97f6('0x15')];}if(_0x589b0b[_0x97f6('0x19')]=='1'){_0x423ca0[_0x97f6('0x16')]['channelData'][_0x97f6('0x1a')]={'Generate':!![],'PutInStructuredPart':![],'ExpectedFormat':'audio/wav'};}if(_0x589b0b[_0x97f6('0x1b')]){_0x423ca0[_0x97f6('0x16')]['channelData'][_0x97f6('0x1c')]=_0x589b0b['custom_action'];if(_0x589b0b[_0x97f6('0x1d')]){_0x423ca0[_0x97f6('0x16')][_0x97f6('0x17')]['CustomActionData']=_0x589b0b['custom_action_data'];}}logger[_0x97f6('0x1e')](JSON[_0x97f6('0x1f')](_0x423ca0));return rp(_0x423ca0);});};
\ No newline at end of file
+var _0x1a9e=['ndassistant_url','/api/NaturalDialogAssistant/v1/Run','message','Nda','uniqueid','callerid','extension','Bearer\x20','access_token','project','channelData','ProjectName','ndagenerate_audio','body','audio/wav','custom_action','CustomAction','custom_action_data','CustomActionData','info','stringify','request-promise','url','../../../../../config/logger','agi','exports','POST','resolve','ndauth_url','/token','password','username','then'];(function(_0x38bd10,_0xf31939){var _0x3df229=function(_0x450dc2){while(--_0x450dc2){_0x38bd10['push'](_0x38bd10['shift']());}};_0x3df229(++_0xf31939);}(_0x1a9e,0x180));var _0xe1a9=function(_0x3c2cfa,_0xf597a0){_0x3c2cfa=_0x3c2cfa-0x0;var _0x8a012d=_0x1a9e[_0x3c2cfa];return _0x8a012d;};'use strict';var rp=require(_0xe1a9('0x0'));var url=require(_0xe1a9('0x1'));var logger=require(_0xe1a9('0x2'))(_0xe1a9('0x3'));module[_0xe1a9('0x4')]=function(_0x5a45c7,_0x59788d){var _0x332128={'method':_0xe1a9('0x5'),'uri':url[_0xe1a9('0x6')](_0x59788d[_0xe1a9('0x7')],_0xe1a9('0x8')),'form':{'grant_type':_0xe1a9('0x9'),'username':_0x59788d[_0xe1a9('0xa')],'password':_0x59788d[_0xe1a9('0x9')]},'json':!![]};return rp(_0x332128)[_0xe1a9('0xb')](function(_0x15bc3f){var _0x576478={'method':_0xe1a9('0x5'),'uri':url[_0xe1a9('0x6')](_0x59788d[_0xe1a9('0xc')],_0xe1a9('0xd')),'body':{'type':_0x59788d['ndaactivity_type']||_0xe1a9('0xe'),'channelId':_0xe1a9('0xf'),'conversation':{'id':_0x5a45c7[_0xe1a9('0x10')]},'from':{'id':_0x5a45c7[_0xe1a9('0x11')],'name':_0x5a45c7['calleridname']},'recipient':{'id':_0x5a45c7['dnid'],'name':_0x5a45c7[_0xe1a9('0x12')]},'text':_0x59788d['text'],'channelData':{}},'headers':{'Authorization':_0xe1a9('0x13')+_0x15bc3f[_0xe1a9('0x14')]},'json':!![]};if(_0x59788d[_0xe1a9('0x15')]){_0x576478['body'][_0xe1a9('0x16')][_0xe1a9('0x17')]=_0x59788d['project'];}if(_0x59788d[_0xe1a9('0x18')]=='1'){_0x576478[_0xe1a9('0x19')]['channelData']['AudioOutputSettings']={'Generate':!![],'PutInStructuredPart':![],'ExpectedFormat':_0xe1a9('0x1a')};}if(_0x59788d[_0xe1a9('0x1b')]){_0x576478[_0xe1a9('0x19')][_0xe1a9('0x16')][_0xe1a9('0x1c')]=_0x59788d[_0xe1a9('0x1b')];if(_0x59788d[_0xe1a9('0x1d')]){_0x576478['body'][_0xe1a9('0x16')][_0xe1a9('0x1e')]=_0x59788d[_0xe1a9('0x1d')];}}logger[_0xe1a9('0x1f')](JSON[_0xe1a9('0x20')](_0x576478));return rp(_0x576478);});};
\ No newline at end of file
index 132fba1..ef1f9dc 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2801=['exports'];(function(_0x1b0e2a,_0x915c1){var _0x2786ea=function(_0x34d213){while(--_0x34d213){_0x1b0e2a['push'](_0x1b0e2a['shift']());}};_0x2786ea(++_0x915c1);}(_0x2801,0x1ec));var _0x1280=function(_0x9f45bc,_0x375383){_0x9f45bc=_0x9f45bc-0x0;var _0x281bea=_0x2801[_0x9f45bc];return _0x281bea;};'use strict';var asr=require('./lib/api');module[_0x1280('0x0')]=function(_0x4fb7e5,_0x426999,_0x4942f4,_0x1c24b0){return asr(_0x4fb7e5,_0x426999,_0x4942f4,_0x1c24b0);};
\ No newline at end of file
+var _0x9840=['exports'];(function(_0xd941d0,_0x483641){var _0x458841=function(_0x430472){while(--_0x430472){_0xd941d0['push'](_0xd941d0['shift']());}};_0x458841(++_0x483641);}(_0x9840,0xc8));var _0x0984=function(_0x525586,_0x5979d6){_0x525586=_0x525586-0x0;var _0x26976f=_0x9840[_0x525586];return _0x26976f;};'use strict';var asr=require('./lib/api');module[_0x0984('0x0')]=function(_0x3d0adb,_0x287830,_0x3f3f57,_0x4ee154){return asr(_0x3d0adb,_0x287830,_0x3f3f57,_0x4ee154);};
\ No newline at end of file
index bf85182..1f10e1b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9147=['createReadStream','data','send','close','EOS','error','Tilde\x20ASR\x20send\x20error','terminate','parse','result','final','Tilde\x20ASR\x20hypoteses','hypotheses','likelihood','Success.','Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.','Not\x20available.\x20Max\x20load\x20limit\x20reached.','Authentication\x20failed.','All\x20recognition\x20workers\x20are\x20currently\x20in\x20use\x20and\x20real-time\x20recognition\x20is\x20not\x20possible.','Close\x20Tilde\x20ASR\x20socket','isObject','open','message','bluebird','crypto','../../../../../../config/logger','agi','exports','info','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','sha1','update','Open\x20Tilde\x20ASR\x20socket','unix','stringify'];(function(_0x1b1f04,_0x19efc3){var _0x3b6a66=function(_0x295a73){while(--_0x295a73){_0x1b1f04['push'](_0x1b1f04['shift']());}};_0x3b6a66(++_0x19efc3);}(_0x9147,0x17f));var _0x7914=function(_0x187ee1,_0x3fd1e6){_0x187ee1=_0x187ee1-0x0;var _0x388160=_0x9147[_0x187ee1];return _0x388160;};'use strict';var BPromise=require(_0x7914('0x0'));var _=require('lodash');var fs=require('fs');var WebSocket=require('ws');var moment=require('moment');var crypto=require(_0x7914('0x1'));var logger=require(_0x7914('0x2'))(_0x7914('0x3'));module[_0x7914('0x4')]=function(_0x40aa48,_0x388622,_0x11a5ff,_0x466e5d){return new BPromise(function(_0x4891fe,_0x1e04f6){logger[_0x7914('0x5')]('Tilde\x20URI',_0x466e5d||_0x7914('0x6'));var _0x31ef36=new WebSocket(_0x466e5d||'wss://runa.tilde.lv/client/ws/speech/LVASR-ONLINE',{'perMessageDeflate':![]});var _0x459616='';var _0x139414='0';var _0x44ada6='1';var _0x539507=_0x7914('0x7');function _0x8ee37(_0x57d584){var _0x5072ce=crypto['createHash'](_0x7914('0x8'));_0x5072ce[_0x7914('0x9')](_0x57d584);return _0x5072ce['digest']('hex');}function _0x3d4f0e(){try{logger[_0x7914('0x5')](_0x7914('0xa'));var _0x1b899c=moment()[_0x7914('0xb')]();var _0x2b4ac6=_0x8ee37(_0x1b899c+_0x388622+_0x11a5ff);_0x31ef36['send'](JSON[_0x7914('0xc')]({'appID':_0x388622,'timestamp':_0x1b899c,'appKey':_0x2b4ac6}));var _0x369312=fs[_0x7914('0xd')](_0x40aa48);_0x369312['on'](_0x7914('0xe'),function(_0x2a0595){_0x31ef36[_0x7914('0xf')](_0x2a0595);});_0x369312['on'](_0x7914('0x10'),function(){_0x31ef36[_0x7914('0xf')](_0x7914('0x11'));});}catch(_0xfae8b1){logger[_0x7914('0x12')](_0x7914('0x13'),JSON[_0x7914('0xc')](_0xfae8b1));_0x31ef36[_0x7914('0x14')]();}}function _0x232ddb(_0x3d0e88){try{if(_0x3d0e88){var _0x9b1668=JSON[_0x7914('0x15')](_0x3d0e88);switch(_0x9b1668['status']){case 0x0:if(_0x9b1668[_0x7914('0x16')]){if(_0x9b1668['result'][_0x7914('0x17')]){logger['info'](_0x7914('0x18'),JSON['stringify'](_0x9b1668[_0x7914('0x16')][_0x7914('0x19')]));_0x459616=_0x9b1668[_0x7914('0x16')][_0x7914('0x19')][0x0]['transcript'];_0x139414=_0x9b1668[_0x7914('0x16')][_0x7914('0x19')][0x0][_0x7914('0x1a')];_0x44ada6='0';_0x539507=_0x7914('0x1b');_0x31ef36[_0x7914('0x14')]();}}break;case 0x1:logger[_0x7914('0x5')](_0x7914('0x7'));_0x44ada6='1';_0x539507=_0x7914('0x7');break;case 0x2:logger[_0x7914('0x5')](_0x7914('0x1c'));_0x44ada6='2';_0x539507=_0x7914('0x1c');break;case 0x9:logger['info'](_0x7914('0x1d'));_0x44ada6='9';_0x539507=_0x7914('0x1d');break;case 0xa:logger[_0x7914('0x5')](_0x7914('0x1e'));_0x44ada6='10';_0x539507=_0x7914('0x1e');break;case 0xb:logger['info'](_0x7914('0x1f'));_0x44ada6='11';_0x539507=_0x7914('0x1f');}}}catch(_0x2908c7){logger['error']('Tilde\x20ASR\x20parse\x20error',JSON['stringify'](_0x2908c7));_0x31ef36[_0x7914('0x14')]();}}function _0x4ee8ba(){logger[_0x7914('0x5')](_0x7914('0x20'));_0x4891fe({'transcript':_0x459616,'confidence':_0x139414,'status':_0x44ada6,'status_message':_0x539507});}function _0x1098ff(_0x49a190){logger[_0x7914('0x12')]('Error\x20Tilde\x20ASR\x20socket');if(!_['isNil'](_0x49a190)){logger[_0x7914('0x12')](_[_0x7914('0x21')](_0x49a190)?JSON[_0x7914('0xc')](_0x49a190):_0x49a190);}}_0x31ef36['on'](_0x7914('0x22'),_0x3d4f0e);_0x31ef36['on'](_0x7914('0x23'),_0x232ddb);_0x31ef36['on']('close',_0x4ee8ba);_0x31ef36['on'](_0x7914('0x12'),_0x1098ff);});};
\ No newline at end of file
+var _0xd167=['Authentication\x20failed.','All\x20recognition\x20workers\x20are\x20currently\x20in\x20use\x20and\x20real-time\x20recognition\x20is\x20not\x20possible.','Close\x20Tilde\x20ASR\x20socket','Error\x20Tilde\x20ASR\x20socket','isNil','isObject','message','bluebird','lodash','moment','../../../../../../config/logger','agi','exports','info','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','update','digest','hex','Open\x20Tilde\x20ASR\x20socket','unix','createReadStream','data','send','close','error','Tilde\x20ASR\x20send\x20error','terminate','parse','status','result','final','Tilde\x20ASR\x20hypoteses','stringify','hypotheses','transcript','likelihood','Success.','Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.','Not\x20available.\x20Max\x20load\x20limit\x20reached.'];(function(_0x3d53d0,_0x4cc231){var _0x575ea7=function(_0x30855b){while(--_0x30855b){_0x3d53d0['push'](_0x3d53d0['shift']());}};_0x575ea7(++_0x4cc231);}(_0xd167,0xab));var _0x7d16=function(_0x2598fc,_0x5f497f){_0x2598fc=_0x2598fc-0x0;var _0x132a83=_0xd167[_0x2598fc];return _0x132a83;};'use strict';var BPromise=require(_0x7d16('0x0'));var _=require(_0x7d16('0x1'));var fs=require('fs');var WebSocket=require('ws');var moment=require(_0x7d16('0x2'));var crypto=require('crypto');var logger=require(_0x7d16('0x3'))(_0x7d16('0x4'));module[_0x7d16('0x5')]=function(_0x757e09,_0x19b89e,_0x52523f,_0x29c494){return new BPromise(function(_0x4391bb,_0x3bb610){logger[_0x7d16('0x6')]('Tilde\x20URI',_0x29c494||_0x7d16('0x7'));var _0x42c545=new WebSocket(_0x29c494||_0x7d16('0x7'),{'perMessageDeflate':![]});var _0xb2c214='';var _0x5729c7='0';var _0x732b4e='1';var _0x548fcb=_0x7d16('0x8');function _0x32893d(_0x3a9d17){var _0xb66324=crypto[_0x7d16('0x9')]('sha1');_0xb66324[_0x7d16('0xa')](_0x3a9d17);return _0xb66324[_0x7d16('0xb')](_0x7d16('0xc'));}function _0x4c9a33(){try{logger[_0x7d16('0x6')](_0x7d16('0xd'));var _0x3dafc3=moment()[_0x7d16('0xe')]();var _0x598f4c=_0x32893d(_0x3dafc3+_0x19b89e+_0x52523f);_0x42c545['send'](JSON['stringify']({'appID':_0x19b89e,'timestamp':_0x3dafc3,'appKey':_0x598f4c}));var _0x2ef718=fs[_0x7d16('0xf')](_0x757e09);_0x2ef718['on'](_0x7d16('0x10'),function(_0x47f78e){_0x42c545[_0x7d16('0x11')](_0x47f78e);});_0x2ef718['on'](_0x7d16('0x12'),function(){_0x42c545[_0x7d16('0x11')]('EOS');});}catch(_0x4c103b){logger[_0x7d16('0x13')](_0x7d16('0x14'),JSON['stringify'](_0x4c103b));_0x42c545[_0x7d16('0x15')]();}}function _0x331f0f(_0x129187){try{if(_0x129187){var _0x4532dd=JSON[_0x7d16('0x16')](_0x129187);switch(_0x4532dd[_0x7d16('0x17')]){case 0x0:if(_0x4532dd[_0x7d16('0x18')]){if(_0x4532dd['result'][_0x7d16('0x19')]){logger[_0x7d16('0x6')](_0x7d16('0x1a'),JSON[_0x7d16('0x1b')](_0x4532dd[_0x7d16('0x18')]['hypotheses']));_0xb2c214=_0x4532dd[_0x7d16('0x18')][_0x7d16('0x1c')][0x0][_0x7d16('0x1d')];_0x5729c7=_0x4532dd['result']['hypotheses'][0x0][_0x7d16('0x1e')];_0x732b4e='0';_0x548fcb=_0x7d16('0x1f');_0x42c545[_0x7d16('0x15')]();}}break;case 0x1:logger[_0x7d16('0x6')]('No\x20speech.\x20Sent\x20when\x20the\x20incoming\x20audio\x20contains\x20a\x20large\x20portion\x20of\x20silence\x20or\x20non-speech');_0x732b4e='1';_0x548fcb='No\x20speech.\x20Sent\x20when\x20the\x20incoming\x20audio\x20contains\x20a\x20large\x20portion\x20of\x20silence\x20or\x20non-speech';break;case 0x2:logger[_0x7d16('0x6')](_0x7d16('0x20'));_0x732b4e='2';_0x548fcb='Aborted.\x20Recognition\x20was\x20aborted\x20for\x20some\x20reason.';break;case 0x9:logger[_0x7d16('0x6')](_0x7d16('0x21'));_0x732b4e='9';_0x548fcb=_0x7d16('0x21');break;case 0xa:logger['info'](_0x7d16('0x22'));_0x732b4e='10';_0x548fcb=_0x7d16('0x22');break;case 0xb:logger[_0x7d16('0x6')](_0x7d16('0x23'));_0x732b4e='11';_0x548fcb=_0x7d16('0x23');}}}catch(_0x234cf0){logger[_0x7d16('0x13')]('Tilde\x20ASR\x20parse\x20error',JSON[_0x7d16('0x1b')](_0x234cf0));_0x42c545['terminate']();}}function _0x1b511f(){logger[_0x7d16('0x6')](_0x7d16('0x24'));_0x4391bb({'transcript':_0xb2c214,'confidence':_0x5729c7,'status':_0x732b4e,'status_message':_0x548fcb});}function _0x5b20a2(_0x19b47b){logger[_0x7d16('0x13')](_0x7d16('0x25'));if(!_[_0x7d16('0x26')](_0x19b47b)){logger['error'](_[_0x7d16('0x27')](_0x19b47b)?JSON[_0x7d16('0x1b')](_0x19b47b):_0x19b47b);}}_0x42c545['on']('open',_0x4c9a33);_0x42c545['on'](_0x7d16('0x28'),_0x331f0f);_0x42c545['on'](_0x7d16('0x12'),_0x1b511f);_0x42c545['on'](_0x7d16('0x13'),_0x5b20a2);});};
\ No newline at end of file
index 6f4e2de..160915e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['exports','./asr'];(function(_0x749515,_0x49e607){var _0x3b184c=function(_0x349f87){while(--_0x349f87){_0x749515['push'](_0x749515['shift']());}};_0x3b184c(++_0x49e607);}(_0xa9e0,0x123));var _0x0a9e=function(_0x21aec3,_0x5c97e9){_0x21aec3=_0x21aec3-0x0;var _0x288bbc=_0xa9e0[_0x21aec3];return _0x288bbc;};var asr=require(_0x0a9e('0x0'));module[_0x0a9e('0x1')]={'asr':asr};
\ No newline at end of file
+var _0x34e8=['./asr','exports'];(function(_0x309458,_0xba6e63){var _0x3306ee=function(_0x47e10c){while(--_0x47e10c){_0x309458['push'](_0x309458['shift']());}};_0x3306ee(++_0xba6e63);}(_0x34e8,0x12c));var _0x834e=function(_0x5136a3,_0x2bc7ff){_0x5136a3=_0x5136a3-0x0;var _0x277e36=_0x34e8[_0x5136a3];return _0x277e36;};var asr=require(_0x834e('0x0'));module[_0x834e('0x1')]={'asr':asr};
\ No newline at end of file
index 401d7c7..401277c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd547=['E_AGI_SERVER_MAXCONNECTION','destroy','ready','close','E_AGI_SERVER_CLOSE','nextTick','inherits','util','net','events','EventEmitter','./error','./channel','call','emit','error','E_AGI_ARGUMENT_PORT','createServer','listen','listening','connection','E_AGI_SERVER_VOICE_DISABLED'];(function(_0x2796c2,_0x5d206f){var _0x380c45=function(_0x46ef79){while(--_0x46ef79){_0x2796c2['push'](_0x2796c2['shift']());}};_0x380c45(++_0x5d206f);}(_0xd547,0x1a9));var _0x7d54=function(_0x2bb82d,_0x42c7f8){_0x2bb82d=_0x2bb82d-0x0;var _0x5e0b92=_0xd547[_0x2bb82d];return _0x5e0b92;};'use strict';var util=require(_0x7d54('0x0'));var net=require(_0x7d54('0x1'));var EventEmitter=require(_0x7d54('0x2'))[_0x7d54('0x3')];var AGIError=require(_0x7d54('0x4'));var AGIChannel=require(_0x7d54('0x5'));var AGIServer=function(_0x90d62e,_0x18f7dc,_0x2716ca){var _0x51a07b=this,_0x90d62e=_0x90d62e||0x11dd,_0x18f7dc=_0x18f7dc||'127.0.0.1',_0x28d24a=null,_0x128523=0x0;EventEmitter[_0x7d54('0x6')](_0x51a07b);function _0x4bf762(){if(!_0x90d62e){_0x51a07b[_0x7d54('0x7')](_0x7d54('0x8'),new AGIError(_0x7d54('0x9')));return![];}_0x28d24a=net[_0x7d54('0xa')]();_0x28d24a[_0x7d54('0xb')](_0x90d62e,_0x18f7dc);_0x28d24a['on'](_0x7d54('0xc'),function(){_0x51a07b[_0x7d54('0x7')]('listening');});_0x28d24a['on'](_0x7d54('0xd'),function(_0x1de82e){_0x28d24a['getConnections'](function(_0x3055c2,_0x576157){if(_0x3055c2){_0x51a07b[_0x7d54('0x7')](_0x7d54('0x8'),new AGIError('E_AGI_SERVER_ERROR',_0x3055c2));}else if(_0x2716ca&&_0x2716ca<0x0){_0x51a07b[_0x7d54('0x7')](_0x7d54('0x8'),new AGIError(_0x7d54('0xe')));_0x1de82e['destroy']();}else if(_0x2716ca&&_0x2716ca>0x0&&_0x2716ca<_0x576157){_0x128523+=0x1;_0x51a07b[_0x7d54('0x7')](_0x7d54('0x8'),new AGIError(_0x7d54('0xf'),_0x128523));_0x1de82e[_0x7d54('0x10')]();}else{var _0x565b3d=new AGIChannel(_0x1de82e);_0x565b3d['on'](_0x7d54('0x11'),function(){_0x51a07b['emit'](_0x7d54('0xd'),_0x565b3d);});}});});_0x28d24a['on']('error',function(_0x89d34f){_0x51a07b[_0x7d54('0x7')](_0x7d54('0x8'),new AGIError('E_AGI_SERVER_ERROR',_0x89d34f['code']));});_0x28d24a['on']('close',function(){_0x51a07b['emit'](_0x7d54('0x12'),new AGIError(_0x7d54('0x13')));});}process[_0x7d54('0x14')](function(){_0x4bf762();});};util[_0x7d54('0x15')](AGIServer,EventEmitter);module['exports']=function(_0x1e6fc7,_0x257790,_0x3f0373){return new AGIServer(_0x1e6fc7,_0x257790,_0x3f0373);};
\ No newline at end of file
+var _0x8bef=['EventEmitter','./error','127.0.0.1','call','emit','error','E_AGI_ARGUMENT_PORT','listening','connection','E_AGI_SERVER_VOICE_DISABLED','destroy','ready','E_AGI_SERVER_ERROR','code','close','E_AGI_SERVER_CLOSE','inherits','exports','util','net','events'];(function(_0xa8883,_0x1f107f){var _0x479426=function(_0x4e56b9){while(--_0x4e56b9){_0xa8883['push'](_0xa8883['shift']());}};_0x479426(++_0x1f107f);}(_0x8bef,0x66));var _0xf8be=function(_0x119a2a,_0x52a94f){_0x119a2a=_0x119a2a-0x0;var _0x22d268=_0x8bef[_0x119a2a];return _0x22d268;};'use strict';var util=require(_0xf8be('0x0'));var net=require(_0xf8be('0x1'));var EventEmitter=require(_0xf8be('0x2'))[_0xf8be('0x3')];var AGIError=require(_0xf8be('0x4'));var AGIChannel=require('./channel');var AGIServer=function(_0x2dd53c,_0x216c50,_0x335ee3){var _0x306f7a=this,_0x2dd53c=_0x2dd53c||0x11dd,_0x216c50=_0x216c50||_0xf8be('0x5'),_0x86bf8e=null,_0x3238f1=0x0;EventEmitter[_0xf8be('0x6')](_0x306f7a);function _0x5a53f9(){if(!_0x2dd53c){_0x306f7a[_0xf8be('0x7')](_0xf8be('0x8'),new AGIError(_0xf8be('0x9')));return![];}_0x86bf8e=net['createServer']();_0x86bf8e['listen'](_0x2dd53c,_0x216c50);_0x86bf8e['on'](_0xf8be('0xa'),function(){_0x306f7a[_0xf8be('0x7')](_0xf8be('0xa'));});_0x86bf8e['on'](_0xf8be('0xb'),function(_0x11b15e){_0x86bf8e['getConnections'](function(_0x4094da,_0x3f411c){if(_0x4094da){_0x306f7a[_0xf8be('0x7')]('error',new AGIError('E_AGI_SERVER_ERROR',_0x4094da));}else if(_0x335ee3&&_0x335ee3<0x0){_0x306f7a[_0xf8be('0x7')](_0xf8be('0x8'),new AGIError(_0xf8be('0xc')));_0x11b15e[_0xf8be('0xd')]();}else if(_0x335ee3&&_0x335ee3>0x0&&_0x335ee3<_0x3f411c){_0x3238f1+=0x1;_0x306f7a[_0xf8be('0x7')]('error',new AGIError('E_AGI_SERVER_MAXCONNECTION',_0x3238f1));_0x11b15e[_0xf8be('0xd')]();}else{var _0x2897d5=new AGIChannel(_0x11b15e);_0x2897d5['on'](_0xf8be('0xe'),function(){_0x306f7a['emit'](_0xf8be('0xb'),_0x2897d5);});}});});_0x86bf8e['on'](_0xf8be('0x8'),function(_0xfc5656){_0x306f7a[_0xf8be('0x7')](_0xf8be('0x8'),new AGIError(_0xf8be('0xf'),_0xfc5656[_0xf8be('0x10')]));});_0x86bf8e['on']('close',function(){_0x306f7a[_0xf8be('0x7')](_0xf8be('0x11'),new AGIError(_0xf8be('0x12')));});}process['nextTick'](function(){_0x5a53f9();});};util[_0xf8be('0x13')](AGIServer,EventEmitter);module[_0xf8be('0x14')]=function(_0x4069b5,_0x4d34ed,_0x46401a){return new AGIServer(_0x4069b5,_0x4d34ed,_0x46401a);};
\ No newline at end of file
index 7350119..1edb83e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0cf2=['sms_account_id','no\x20sms\x20account\x20configured','getSmsAccount','no\x20sms\x20account\x20found','sms_text','sendSMS\x20message','Trying\x20SendSMS\x20with\x20account\x20%s','set','Enter\x20in\x20SET\x20(%s)\x20block','no\x20variable\x20selected','variable_value','Enter\x20in\x20START\x20(%s)\x20block','START\x20CALLY\x20SQUARE','yes','Skipped\x20Answer','Enter\x20in\x20SUBPROJECT\x20(%s)\x20block','project_id','no\x20subproject\x20selected','no\x20subproject\x20found\x20with\x20id\x20%d','project\x20in\x20subproject\x20must\x20be\x20different\x20from\x20the\x20called\x20project','agi://%s/square,\x22%s\x22,\x22%s\x22','127.0.0.1','AGI','system','Enter\x20in\x20SYSTEM\x20(%s)\x20block','shellCommand','command','sh\x20command:\x20%s\x20result\x20on\x20variable:\x20%s','sh\x20command:\x20%s\x20result\x20no\x20stored','tts','Enter\x20in\x20GOOGLETTS\x20(%s)\x20block','Trying\x20Google\x20TTS\x20%s','Enter\x20in\x20UNPAUSE\x20(%s)\x20block','voicemail','mailbox','VOICEMAIL','vswitch','Enter\x20in\x20SWITCH\x20(%s)\x20block','replaceAll','join','exports','path','lodash','shelljs','odbc','randomstring','mustache','../../config/logger','agi','../../config/environment','./scripts','/var/opt/motion2/server/files','getdigits','getsecretdigits','channel','rpc','mailRpc','prototype','getVariable','catch','getVoiceQueueById','name','getSquareProject','then','getSquareOdbc','getSquareOdbcById','dsn','getUser','getUserById','getTrunk','getTrunkById','getSound','getSoundById','getSoundPath','save_name','sendMailMessage','getIntervals','IntervalId','interval','map','Intervals','%s/sounds/converted/%s','getQueryOdbc','error','info','ODBC\x20connection\x20successfully','query','Error\x20executing\x20query\x20%s','Query\x20executed\x20correctly\x20%s','Error\x20closing\x20connection\x20to\x20odbc\x20%s','getSmsAccountById','createSmsMessage','createSquareDetailsReport','label','agicommand','arg_1','callerid','createSquareRecording','uniqueid','calleridname','context','extension','priority','dnid','file','createSquareMessage','createCmContact','isEmpty','callback_','random','lastName','isNil','phone','list_id','callback','toString','getPause','agentPause','agent','agentUnpause','agentLogout','agentLogin','format','%s/%s@from-sip/n','LOCAL','exec','trim','replace','googleTTS','text','google_tts_language','googleDialogflow','key','sestekNDA','ispeechTTS','ispeech_tts_language','en-US','ispeechASR','isConfigured','model','awsPolly','aws_access_key_id','aws_secret_access_key','aws_polly_voice','Amy','aws_text_type','awsLex','aws_lex_region','aws_bot_name','google_asr_language','appid','appsecret','uri','clear','includes','clone','isString','replaceAllVariables','split','length','The\x20\x22%s\x22\x20variable\x20value\x20is:\x20%s','extra','setVariable','maxRetry','sync','retry','args','answer','Enter\x20in\x20ANSWER\x20(%s)\x20block','timeout','Wait\x20%s\x20seconds\x20before\x20answer','wait','Enter\x20in\x20CALLBACK\x20(%s)\x20block','no\x20list\x20selected','scheduledAt','delay','add','callback_priority','noop','CALLBACK\x20added\x20phone:\x20%s\x20on\x20list:\x20%s\x20at\x20%s','custom_app','application','options','result','Executed\x20command\x20%s\x20%s','lumenvoxtts','no\x20text\x20configured','Executed\x20command\x20MRCPSynth\x20%s','Enter\x20in\x20SESTEKTTS\x20(%s)\x20block','MRCPSynth','lumenvoxasr','Enter\x20in\x20LUMENVOXASR\x20(%s)\x20block','grammar','no\x20grammar\x20configured','MRCPRecog','getAndSetVariable','RECOG_CONFIDENCE()','RECOG_INPUT()','LUMENVOX_ASR_TRANSCRIPT','RECOG_INSTANCE()','LUMENVOX_ASR_INSTANCE','Executed\x20command\x20MRCPRecog\x20%s','SESTEK_ASR_INSTANCE','Enter\x20in\x20DATABASE\x20(%s)\x20block','odbc_id','no\x20odbc\x20database\x20found','query:\x20%s','no\x20variable\x20selected\x20for\x20the\x20result','variable_id','forEach','keys','%s_ROWS_COUNT','variable\x20%s\x20set','dial','debug','sip_id','no\x20user\x20found','DIAL','SIP/%s','opts','url','Executed\x20command\x20%s','dialogflow','Enter\x20in\x20DIALOGFLOW\x20(%s)\x20block','no\x20key\x20configured','bot','Trying\x20Dialogflow:\x20%s','out','Dialogflow\x20Result\x20%s','speech','Enter\x20in\x20SESTEKNDA\x20(%s)\x20block','ndauth_url','no\x20ndauth\x20url\x20configured','username','no\x20username\x20configured','password','no\x20password\x20configured','hasOwnProperty','SESTEK_NDA_%s','toUpperCase','audiofile','unlink','.wav','SestekNDA\x20Result\x20%s','SestekNDA\x20is\x20unreachable','end','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','file_id','no\x20file\x20audio\x20selected','getData','test','stringify','mindigit','maxdigit','no\x20variable\x20found','hiddendigitsnum','generate','hiddendigitspos','first','goal','Enter\x20in\x20GOAL\x20(%s)\x20block','goalname','awspolly','no\x20valid\x20credentials\x20configured','aws\x20Polly\x20%s\x20file\x20created','streamFile','aws\x20Polly\x20is\x20unreachable','awslex','Enter\x20in\x20Amazon\x20Lex\x20(%s)\x20block','no\x20bot\x20name\x20configured','Trying\x20Amazon\x20Lex:\x20%s','AWS_LEX_%s','message','Amazon\x20Lex\x20Result\x20%s','Amazon\x20Lex\x20is\x20unreachable','googleasr','Enter\x20in\x20GOOGLEASR\x20(%s)\x20block\x20%s','wav','%s/recordings/%s','beep','NOBEEP','recordFile','intKey','google\x20%s\x20file\x20created','googleASR','GOOGLE_ASR_%s','tildeasr','Enter\x20in\x20TILDEASR\x20(%s)\x20block','no\x20appid\x20configured','no\x20appsecret\x20configured','TILDE_ASR_%s','Enter\x20in\x20GOTO\x20(%s)\x20block','continueAt','gotoif','condition','no\x20condition\x20configured','true','false','EVAL\x20CONDITION\x20%s\x20%s','gotoiftime','Enter\x20in\x20GOTOIFTIME\x20(%s)\x20block','interval_id','no\x20interval\x20configured','no\x20intervals\x20found','IFTIME(%s?true:false)','IFTIME\x20%s\x20%s','hangup','Enter\x20in\x20HANGUP\x20(%s)\x20block','ispeechasr','Enter\x20in\x20ISPEECHASR\x20(%s)\x20block','%s.%s','ispeech\x20%s\x20file\x20created','ISPEECH_ASR_%s','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','success','AGENT\x20%s\x20NOT\x20FOUND\x20BY','failure','logout','Enter\x20in\x20LOGOUT\x20(%s)\x20block','math','Enter\x20in\x20MATH\x20(%s)\x20block','operation','isArray','%s[%s]','menu','Enter\x20in\x20MENU\x20(%s)\x20block','no\x20file\x20audio\x20found','digit','output','pause','Enter\x20in\x20PAUSE\x20(%s)\x20block','pause_id','playback','Enter\x20in\x20PLAYBACK\x20(%s)\x20block','PLAYBACK','queue','Enter\x20in\x20QUEUE\x20(%s)\x20block','queue_id','indexOf','XMCS-QUEUE','toLowerCase','QUEUE','macro','gosub','position','record','Enter\x20in\x20RECORD\x20(%s)\x20block','%s_%s','RECORDING_SAVENAME','Recording\x20%s\x20%s\x20%s\x20%s','escape_digits','saydigits','Enter\x20in\x20SAYDIGITS\x20(%s)\x20block','sayDigits','digits','saynumber','Enter\x20in\x20SAYNUMBER\x20(%s)\x20block','sayNumber','sayphonetic','Enter\x20in\x20SAYPHONETIC\x20(%s)\x20block','sayPhonetic','sendMail','Enter\x20in\x20SENDMAIL\x20(%s)\x20block','account_id','no\x20mail\x20account\x20configured','getMailAccount','Smtp','no\x20mail\x20account\x20found','\x22%s\x22\x20<%s>','bcc','subject','service','host','port','secure','authentication','user','pass','template_id','sendMail\x20message','Mail\x20message\x20added\x20to\x20outgoing\x20process','Enter\x20in\x20SENDFAX\x20(%s)\x20block','SENDFAX\x20block\x20not\x20implemented','sendSMS','Enter\x20in\x20SENDSMS\x20(%s)\x20block'];(function(_0x3dd52a,_0x4f395c){var _0x273162=function(_0x4946a7){while(--_0x4946a7){_0x3dd52a['push'](_0x3dd52a['shift']());}};_0x273162(++_0x4f395c);}(_0x0cf2,0x1b9));var _0x20cf=function(_0x5d4607,_0x6b5e7b){_0x5d4607=_0x5d4607-0x0;var _0x5e4a86=_0x0cf2[_0x5d4607];return _0x5e4a86;};'use strict';var fs=require('fs');var path=require(_0x20cf('0x0'));var util=require('util');var _=require(_0x20cf('0x1'));var sh=require(_0x20cf('0x2'));var odbc=require(_0x20cf('0x3'))();var rs=require(_0x20cf('0x4'));var moment=require('moment');var Mustache=require(_0x20cf('0x5'));var logger=require(_0x20cf('0x6'))(_0x20cf('0x7'));var config=require(_0x20cf('0x8'));var scripts=require(_0x20cf('0x9'));var FILES_PATH=_0x20cf('0xa');var verticesWithRetry=['menu',_0x20cf('0xb'),_0x20cf('0xc')];var AGIVertices=function(_0x132ee8,_0x579195,_0x13d58c){this[_0x20cf('0xd')]=_0x132ee8;this[_0x20cf('0xe')]=_0x579195;this[_0x20cf('0xf')]=_0x13d58c;};AGIVertices[_0x20cf('0x10')][_0x20cf('0x11')]=function(_0x20c27f,_0x2e614d){this[_0x20cf('0xe')]['getVariableById'](_0x20c27f)['then'](function(_0x239926){_0x2e614d(null,_0x239926?_0x239926['name']:![]);})[_0x20cf('0x12')](function(_0x589045){_0x2e614d(_0x589045);});};AGIVertices['prototype']['getVoiceQueue']=function(_0x207c9f,_0x2a3d40){this[_0x20cf('0xe')][_0x20cf('0x13')](_0x207c9f)['then'](function(_0x13ac98){_0x2a3d40(null,_0x13ac98?_0x13ac98[_0x20cf('0x14')]:![]);})[_0x20cf('0x12')](function(_0x132ae2){_0x2a3d40(_0x132ae2);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x15')]=function(_0x1909c6,_0x5348d5){this['rpc']['getSquareProjectById'](_0x1909c6)[_0x20cf('0x16')](function(_0x2f58c3){_0x5348d5(null,_0x2f58c3?_0x2f58c3[_0x20cf('0x14')]:![]);})[_0x20cf('0x12')](function(_0x536aa0){_0x5348d5(_0x536aa0);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x17')]=function(_0x420e76,_0x347bfe){this[_0x20cf('0xe')][_0x20cf('0x18')](_0x420e76)['then'](function(_0x5eb38e){_0x347bfe(null,_0x5eb38e?_0x5eb38e[_0x20cf('0x19')]:![]);})['catch'](function(_0x3de20b){_0x347bfe(_0x3de20b);});};AGIVertices['prototype'][_0x20cf('0x1a')]=function(_0x4e623b,_0x36e8b3){this['rpc'][_0x20cf('0x1b')](_0x4e623b)['then'](function(_0x98d18e){_0x36e8b3(null,_0x98d18e?_0x98d18e[_0x20cf('0x14')]:![]);})[_0x20cf('0x12')](function(_0x38d044){_0x36e8b3(_0x38d044);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x1c')]=function(_0x12e851,_0x20f8c0){this[_0x20cf('0xe')][_0x20cf('0x1d')](_0x12e851)['then'](function(_0xa76004){_0x20f8c0(null,_0xa76004?_0xa76004['name']:![]);})[_0x20cf('0x12')](function(_0x26573d){_0x20f8c0(_0x26573d);});};AGIVertices['prototype'][_0x20cf('0x1e')]=function(_0x3a755c,_0x455598){var _0x3a3b0b=this;this['rpc'][_0x20cf('0x1f')](_0x3a755c)[_0x20cf('0x16')](function(_0x5d7080){_0x455598(null,_0x5d7080?_0x3a3b0b[_0x20cf('0x20')](_0x5d7080[_0x20cf('0x21')]):![]);})['catch'](function(_0x2e43cf){_0x455598(_0x2e43cf);});};AGIVertices[_0x20cf('0x10')]['getMailAccount']=function(_0x5f4bcc,_0x56bc79){this[_0x20cf('0xe')]['getMailAccountById'](_0x5f4bcc)['then'](function(_0x3b1c84){_0x56bc79(null,_0x3b1c84?_0x3b1c84:![]);})[_0x20cf('0x12')](function(_0x573b36){_0x56bc79(_0x573b36);});};AGIVertices['prototype'][_0x20cf('0x22')]=function(_0xeea90b,_0x1605f1,_0xdb07a5){this[_0x20cf('0xf')][_0x20cf('0x22')](_0xeea90b,_0x1605f1)[_0x20cf('0x16')](function(){_0xdb07a5(null);})[_0x20cf('0x12')](function(_0x21f1ca){_0xdb07a5(_0x21f1ca);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x23')]=function(_0x5ac61d,_0x32abac){this['rpc']['getIntervalById'](_0x5ac61d)[_0x20cf('0x16')](function(_0x5ad3f8){if(_0x5ad3f8){if(_0x5ad3f8[_0x20cf('0x24')]){_0x32abac(null,[_0x5ad3f8[_0x20cf('0x25')]]);}else{_0x32abac(null,_[_0x20cf('0x26')](_0x5ad3f8[_0x20cf('0x27')],_0x20cf('0x25')));}}else{_0x32abac(null,![]);}})[_0x20cf('0x12')](function(_0x1203ee){_0x32abac(_0x1203ee);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x20')]=function(_0x4cf995){return util['format'](_0x20cf('0x28'),FILES_PATH,_0x4cf995);};AGIVertices[_0x20cf('0x10')][_0x20cf('0x29')]=function(_0x1d81fd,_0x55efe6,_0x42615e){odbc['open'](_0x1d81fd,function(_0x491547){if(_0x491547){logger[_0x20cf('0x2a')]('Error\x20getting\x20ODBC\x20connection\x20%s',_0x491547);_0x42615e(_0x491547);}else{logger[_0x20cf('0x2b')](_0x20cf('0x2c'));odbc[_0x20cf('0x2d')](_0x55efe6,function(_0x3a9682,_0x4e9abe){if(_0x3a9682){logger[_0x20cf('0x2b')](_0x20cf('0x2e'),_0x55efe6);_0x42615e(_0x3a9682);}else{logger[_0x20cf('0x2b')](_0x20cf('0x2f'),_0x55efe6);odbc['close'](function(_0x33af76){if(_0x33af76){logger['error'](_0x20cf('0x30'),_0x33af76);}_0x42615e(null,_0x4e9abe);});}});}});};AGIVertices[_0x20cf('0x10')]['getSmsAccount']=function(_0x47f97e,_0x32eb21){this[_0x20cf('0xe')][_0x20cf('0x31')](_0x47f97e)[_0x20cf('0x16')](function(_0x2dc80c){_0x32eb21(null,_0x2dc80c?_0x2dc80c:![]);})[_0x20cf('0x12')](function(_0xf8aab9){_0x32eb21(_0xf8aab9);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x32')]=function(_0x49e5f3,_0x13027b){this[_0x20cf('0xe')][_0x20cf('0x32')](_0x49e5f3)[_0x20cf('0x16')](function(_0x53d18b){_0x13027b(null,_0x53d18b);})['catch'](function(_0x4233f6){_0x13027b(_0x4233f6);});};AGIVertices[_0x20cf('0x10')]['createSquareDetailsReport']=function(_0x2d911c,_0x10c14d,_0x5c1443){this['rpc'][_0x20cf('0x33')]({'uniqueid':this[_0x20cf('0xd')]['uniqueid'],'node':_0x2d911c[_0x20cf('0x34')],'application':_0x2d911c[_0x20cf('0x35')],'data':_0x10c14d||null,'project_name':this['channel'][_0x20cf('0x36')],'callerid':this[_0x20cf('0xd')][_0x20cf('0x37')]})[_0x20cf('0x16')](function(_0x5ce688){if(_0x5c1443){_0x5c1443(null,_0x5ce688);}})[_0x20cf('0x12')](function(_0x4c4790){if(_0x5c1443){_0x5c1443(_0x4c4790);}});};AGIVertices[_0x20cf('0x10')]['createSquareRecording']=function(_0x35b5ad,_0xd0ef57,_0x1b4fad,_0x3a2f43){this['rpc'][_0x20cf('0x38')]({'uniqueid':this[_0x20cf('0xd')][_0x20cf('0x39')],'callerid':this[_0x20cf('0xd')][_0x20cf('0x37')],'calleridname':this[_0x20cf('0xd')][_0x20cf('0x3a')],'context':this[_0x20cf('0xd')][_0x20cf('0x3b')],'extension':this[_0x20cf('0xd')][_0x20cf('0x3c')],'priority':this[_0x20cf('0xd')][_0x20cf('0x3d')],'accountcode':this['channel']['accountcode'],'dnid':this[_0x20cf('0xd')][_0x20cf('0x3e')],'projectName':this['channel'][_0x20cf('0x36')],'saveName':_0xd0ef57,'filename':_0x35b5ad[_0x20cf('0x3f')]||_0xd0ef57,'savePath':_0x1b4fad})[_0x20cf('0x16')](function(_0x3e242d){_0x3a2f43(null,_0x3e242d);})[_0x20cf('0x12')](function(_0xfe5e9){_0x3a2f43(_0xfe5e9);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x40')]=function(_0x419f34,_0x27820b,_0x21e7cf){this[_0x20cf('0xe')][_0x20cf('0x40')]({'uniqueid':this[_0x20cf('0xd')][_0x20cf('0x39')],'body':_0x419f34,'direction':_0x27820b})[_0x20cf('0x16')](function(_0x1a34e6){if(_0x21e7cf){_0x21e7cf(null,_0x1a34e6);}})[_0x20cf('0x12')](function(_0x3b4a52){if(_0x21e7cf){_0x21e7cf(_0x3b4a52);}});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x41')]=function(_0x4a9f05,_0x438f59){this['rpc']['createCmContact']({'firstName':_[_0x20cf('0x42')](_0x4a9f05[_0x20cf('0x14')])||_['isNil'](_0x4a9f05['name'])?_0x20cf('0x43')+Math[_0x20cf('0x44')]():_0x4a9f05[_0x20cf('0x14')],'lastName':_[_0x20cf('0x42')](_0x4a9f05[_0x20cf('0x45')])||_[_0x20cf('0x46')](_0x4a9f05['lastName'])?null:_0x4a9f05[_0x20cf('0x45')],'phone':_0x4a9f05[_0x20cf('0x47')],'ListId':_0x4a9f05[_0x20cf('0x48')],'scheduledAt':_0x4a9f05['scheduledAt'],'callbackUniqueid':this[_0x20cf('0xd')][_0x20cf('0x39')],'tags':_0x20cf('0x49'),'description':'Callback\x20scheduled\x20at\x20'+_0x4a9f05['scheduledAt'][_0x20cf('0x4a')](),'priority':_0x4a9f05['callback_priority']})['then'](function(_0x4497a8){_0x438f59(null,_0x4497a8);})['catch'](function(_0xc0b699){_0x438f59(_0xc0b699);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x4b')]=function(_0x2e6f02,_0x5d7c74){this[_0x20cf('0xe')]['getPauseById'](_0x2e6f02)[_0x20cf('0x16')](function(_0x322dec){_0x5d7c74(null,_0x322dec?_0x322dec[_0x20cf('0x14')]:![]);})['catch'](function(_0x559187){_0x5d7c74(_0x559187);});};AGIVertices['prototype'][_0x20cf('0x4c')]=function(_0x3564ba,_0x3e10da,_0x4335f9){var _0x6114e5={'role':_0x20cf('0x4d')};_0x6114e5[_0x3564ba]=this['channel'][_0x20cf('0x37')];this[_0x20cf('0xe')]['agentPause'](_0x6114e5,_0x3e10da,this[_0x20cf('0xd')]['uniqueid'])[_0x20cf('0x16')](function(_0x52e314){_0x4335f9(null,_[_0x20cf('0x46')](_0x52e314)?![]:!![]);})[_0x20cf('0x12')](function(_0x19c305){logger[_0x20cf('0x2a')](_0x19c305);_0x4335f9(null,![]);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x4e')]=function(_0x400fdb,_0x3ed73c){var _0x44fd28={'role':_0x20cf('0x4d')};_0x44fd28[_0x400fdb]=this[_0x20cf('0xd')]['callerid'];this[_0x20cf('0xe')]['agentUnpause'](_0x44fd28)['then'](function(_0x26f592){_0x3ed73c(null,_[_0x20cf('0x46')](_0x26f592)?![]:!![]);})[_0x20cf('0x12')](function(_0x2fa964){logger['error'](_0x2fa964);_0x3ed73c(null,![]);});};AGIVertices['prototype'][_0x20cf('0x4f')]=function(_0x85e4a6,_0x3e27ba){var _0x56cdd7={'role':_0x20cf('0x4d')};_0x56cdd7[_0x85e4a6]=this[_0x20cf('0xd')][_0x20cf('0x37')];this['rpc']['agentLogout'](_0x56cdd7)[_0x20cf('0x16')](function(_0x552941){_0x3e27ba(null,_[_0x20cf('0x46')](_0x552941)?![]:!![]);})[_0x20cf('0x12')](function(_0x9e53e6){logger[_0x20cf('0x2a')](_0x9e53e6);_0x3e27ba(null,![]);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x50')]=function(_0x4f60a9,_0x1826c5){var _0x4b26dc={'role':_0x20cf('0x4d')};_0x4b26dc[_0x4f60a9]=this['channel'][_0x20cf('0x37')];var _0x4b3a17=_0x4f60a9!='internal'?util[_0x20cf('0x51')](_0x20cf('0x52'),_0x20cf('0x53'),this[_0x20cf('0xd')]['callerid']):undefined;this[_0x20cf('0xe')]['agentLogin'](_0x4b26dc,_0x4b3a17)[_0x20cf('0x16')](function(_0x48d88b){_0x1826c5(null,_[_0x20cf('0x46')](_0x48d88b)?![]:!![]);})['catch'](function(_0xfd34a0){logger[_0x20cf('0x2a')](_0xfd34a0);_0x1826c5(null,![]);});};AGIVertices['prototype']['shellCommand']=function(_0x4e4eb7,_0x5d1c8d){sh[_0x20cf('0x54')](_[_0x20cf('0x55')](_0x4e4eb7),function(_0x123712,_0x2daa51){var _0x1567d2=_0x2daa51[_0x20cf('0x56')](/(\r\n|\n|\r)/gm,'');_0x5d1c8d(null,_0x1567d2);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x57')]=function(_0x4cd326,_0x36d38d){scripts[_0x20cf('0x57')](_0x4cd326[_0x20cf('0x58')],_0x4cd326[_0x20cf('0x59')]||'en',0x1)[_0x20cf('0x16')](function(_0x2a64b7){_0x36d38d(null,_0x2a64b7);})[_0x20cf('0x12')](function(_0x34163a){_0x36d38d(_0x34163a);});};AGIVertices['prototype']['googleDialogflow']=function(_0x2f86a8,_0x58a3fe){scripts[_0x20cf('0x5a')](this[_0x20cf('0xd')][_0x20cf('0x39')],_0x2f86a8[_0x20cf('0x5b')],_0x2f86a8[_0x20cf('0x58')],_0x2f86a8['dialogflow_language']||'en')[_0x20cf('0x16')](function(_0x248393){_0x58a3fe(null,_0x248393);})[_0x20cf('0x12')](function(_0x19612e){_0x58a3fe(_0x19612e);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x5c')]=function(_0x584be3,_0x2d6f99){scripts['sestekNDA'](this[_0x20cf('0xd')],_0x584be3)[_0x20cf('0x16')](function(_0x1f65af){_0x2d6f99(null,_0x1f65af);})[_0x20cf('0x12')](function(_0x6f50ec){_0x2d6f99(_0x6f50ec);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x5d')]=function(_0x488e78,_0x168509){scripts[_0x20cf('0x5d')](_0x488e78[_0x20cf('0x5b')],_0x488e78[_0x20cf('0x58')],_0x488e78[_0x20cf('0x5e')]||_0x20cf('0x5f'),_0x488e78['speed'])['then'](function(_0x1ff8ec){_0x168509(null,_0x1ff8ec);})['catch'](function(_0x5e329f){_0x168509(_0x5e329f);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x60')]=function(_0x16274b,_0x52ddbe,_0x157df5){scripts[_0x20cf('0x60')](_0x52ddbe,_0x16274b['key'],_0x16274b['ispeech_asr_language']||_0x20cf('0x5f'),this[_0x20cf('0x61')](_0x16274b[_0x20cf('0x62')])?_0x16274b[_0x20cf('0x62')]:undefined)[_0x20cf('0x16')](function(_0x71e968){_0x157df5(null,_0x71e968);})[_0x20cf('0x12')](function(_0x312b21){_0x157df5(_0x312b21);});};AGIVertices[_0x20cf('0x10')][_0x20cf('0x63')]=function(_0x4158be,_0xde0a){scripts[_0x20cf('0x63')](_0x4158be[_0x20cf('0x64')],_0x4158be[_0x20cf('0x65')],_0x4158be['aws_polly_region'],_0x4158be[_0x20cf('0x66')]||_0x20cf('0x67'),_0x4158be['text'],_0x4158be[_0x20cf('0x68')]||_0x20cf('0x58'))[_0x20cf('0x16')](function(_0x2c1f12){_0xde0a(null,_0x2c1f12);})[_0x20cf('0x12')](function(_0x4baa7d){_0xde0a(_0x4baa7d);});};AGIVertices[_0x20cf('0x10')]['awsLex']=function(_0x59f837,_0x4bbaf0){scripts[_0x20cf('0x69')](this[_0x20cf('0xd')]['uniqueid'],_0x59f837[_0x20cf('0x64')],_0x59f837[_0x20cf('0x65')],_0x59f837[_0x20cf('0x6a')],_0x59f837['text'],_0x59f837[_0x20cf('0x6b')])[_0x20cf('0x16')](function(_0x4688f4){_0x4bbaf0(null,_0x4688f4);})[_0x20cf('0x12')](function(_0x1ab92b){_0x4bbaf0(_0x1ab92b);});};AGIVertices[_0x20cf('0x10')]['googleASR']=function(_0x120925,_0xacac4c,_0xa8eeb3){scripts['googleASR'](_0xacac4c,_0x120925['key'],_0x120925[_0x20cf('0x6c')]||'en-US')[_0x20cf('0x16')](function(_0x1426c7){_0xa8eeb3(null,_0x1426c7);})[_0x20cf('0x12')](function(_0x527aa2){_0xa8eeb3(_0x527aa2);});};AGIVertices['prototype']['tildeASR']=function(_0x5297c9,_0x30dd40,_0x1f3374){scripts['tildeASR'](_0x30dd40,_0x5297c9[_0x20cf('0x6d')],_0x5297c9[_0x20cf('0x6e')],_0x5297c9[_0x20cf('0x6f')])[_0x20cf('0x16')](function(_0x22c65a){_0x1f3374(null,_0x22c65a);})[_0x20cf('0x12')](function(_0x20dbbd){_0x1f3374(_0x20dbbd);});};AGIVertices['prototype'][_0x20cf('0x70')]=function(_0x78b6a1){var _0x33d073=_[_0x20cf('0x71')](verticesWithRetry,_0x78b6a1['agicommand'])?_0x78b6a1:_[_0x20cf('0x72')](_0x78b6a1);for(var _0x463c42 in _0x33d073){if(_0x33d073['hasOwnProperty'](_0x463c42)){if(_0x33d073[_0x463c42]&&_[_0x20cf('0x73')](_0x33d073[_0x463c42])){_0x33d073[_0x463c42]=this[_0x20cf('0x74')](_0x33d073[_0x463c42]);}}}return _0x33d073;};AGIVertices[_0x20cf('0x10')][_0x20cf('0x74')]=function(_0x2df959){var _0x4a2663=_0x2df959[_0x20cf('0x75')]('{');for(var _0x3b1c4a=0x1;_0x3b1c4a<_0x4a2663[_0x20cf('0x76')];_0x3b1c4a+=0x1){var _0x1e73ec=_0x4a2663[_0x3b1c4a][_0x20cf('0x75')]('}');if(_0x1e73ec[_0x20cf('0x76')]>0x1){_0x2df959=_0x2df959['replaceAll']('{'+_0x1e73ec[0x0]+'}',this['channel'][_0x20cf('0x11')](_0x1e73ec[0x0])['extra']||_0x1e73ec[0x0]);}}if(_0x4a2663['length']===0x1){return _0x2df959['toString']();}return this[_0x20cf('0x74')](_0x2df959);};AGIVertices[_0x20cf('0x10')]['getAndSetVariable']=function(_0x52493c,_0x1be826){var _0x3e95c8=this[_0x20cf('0xd')]['getVariable'](_0x52493c);if(_0x3e95c8['result']===-0x1){return _0x3e95c8;}logger['info'](util['format'](_0x20cf('0x77'),_0x1be826,_0x3e95c8[_0x20cf('0x78')]));return this[_0x20cf('0xd')][_0x20cf('0x79')](_0x1be826,_0x3e95c8[_0x20cf('0x78')]);};AGIVertices['prototype'][_0x20cf('0x61')]=function(_0x17ace6){return _0x17ace6&&_0x17ace6!=='0'&&_0x17ace6!=='-1'&&_0x17ace6!=='';};AGIVertices[_0x20cf('0x10')][_0x20cf('0x7a')]=function(_0x74573c){this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x74573c,'-');_0x74573c[_0x20cf('0x7c')]=_0x74573c['maxRetry'];return{'code':0xc8,'result':'-'};};AGIVertices[_0x20cf('0x10')][_0x20cf('0x7')]=function(_0x36e1ed){logger['info'](util['format']('Enter\x20in\x20AGI\x20(%s)\x20block',_0x36e1ed[_0x20cf('0x34')]));return this[_0x20cf('0xd')][_0x20cf('0x7')]([_0x36e1ed['command'],_0x36e1ed[_0x20cf('0x7d')]]);};AGIVertices[_0x20cf('0x10')][_0x20cf('0x7e')]=function(_0x327809){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0x7f'),_0x327809[_0x20cf('0x34')]));if(this[_0x20cf('0x61')](_0x327809[_0x20cf('0x80')])){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0x81'),_0x327809[_0x20cf('0x80')]));var _0x1afa57=this[_0x20cf('0xd')][_0x20cf('0x82')](_0x327809[_0x20cf('0x80')]);if(_0x1afa57['result']===-0x1){return _0x1afa57;}}return this['channel'][_0x20cf('0x7e')]();};AGIVertices[_0x20cf('0x10')]['callback']=function(_0x57a718){logger['info'](util[_0x20cf('0x51')](_0x20cf('0x83'),_0x57a718[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x57a718['list_id'])){return this['channel'][_0x20cf('0x2a')](_0x57a718,_0x20cf('0x84'));}_0x57a718[_0x20cf('0x85')]=moment();if(this['isConfigured'](_0x57a718[_0x20cf('0x86')])){_0x57a718[_0x20cf('0x85')]=moment()[_0x20cf('0x87')](_0x57a718[_0x20cf('0x86')],'minutes');}if(!this['isConfigured'](_0x57a718[_0x20cf('0x88')])){_0x57a718[_0x20cf('0x88')]=0x2;}this[_0x20cf('0x41')]['sync'](this,_0x57a718);return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x8a'),_0x57a718['phone'],_0x57a718[_0x20cf('0x48')],_0x57a718[_0x20cf('0x85')]));};AGIVertices[_0x20cf('0x10')][_0x20cf('0x8b')]=function(_0x469f35){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')]('Enter\x20in\x20CUSTOM\x20APP\x20(%s)\x20block',_0x469f35[_0x20cf('0x34')]));var _0x54a636=this[_0x20cf('0xd')][_0x20cf('0x54')](_0x469f35[_0x20cf('0x8c')],_0x469f35[_0x20cf('0x8d')]);if(_0x54a636[_0x20cf('0x8e')]===-0x1){return _0x54a636;}return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x8f'),_0x469f35['application'],_0x469f35[_0x20cf('0x8d')]));};AGIVertices[_0x20cf('0x10')][_0x20cf('0x90')]=function(_0x2d7517){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')]('Enter\x20in\x20LUMENVOXTTS\x20(%s)\x20block',_0x2d7517[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x2d7517[_0x20cf('0x58')])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0x91'));}var _0x51849d='\x22'+_0x2d7517['text']+'\x22';if(this[_0x20cf('0x61')](_0x2d7517['options'])){_0x51849d+=','+_0x2d7517[_0x20cf('0x8d')];}var _0x4ddcf9=this[_0x20cf('0xd')][_0x20cf('0x54')]('MRCPSynth',_0x51849d);if(_0x4ddcf9[_0x20cf('0x8e')]===-0x1){return _0x4ddcf9;}return this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x92'),_0x51849d));};AGIVertices[_0x20cf('0x10')]['sestektts']=function(_0x20b2e3){logger['info'](util[_0x20cf('0x51')](_0x20cf('0x93'),_0x20b2e3[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x20b2e3[_0x20cf('0x58')])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0x91'));}var _0x3cfa5a='\x22'+_0x20b2e3[_0x20cf('0x58')]+'\x22';if(this[_0x20cf('0x61')](_0x20b2e3['options'])){_0x3cfa5a+=','+_0x20b2e3['options'];}var _0x1b042b=this[_0x20cf('0xd')][_0x20cf('0x54')](_0x20cf('0x94'),_0x3cfa5a);if(_0x1b042b[_0x20cf('0x8e')]===-0x1){return _0x1b042b;}return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x92'),_0x3cfa5a));};AGIVertices[_0x20cf('0x10')][_0x20cf('0x95')]=function(_0x527663){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x96'),_0x527663['label']));if(!this[_0x20cf('0x61')](_0x527663[_0x20cf('0x97')])){return this['channel'][_0x20cf('0x89')](_0x20cf('0x98'));}var _0x24e94f=_0x527663[_0x20cf('0x97')];if(this[_0x20cf('0x61')](_0x527663['options'])){_0x24e94f+=','+_0x527663[_0x20cf('0x8d')];}var _0x57e37c=this[_0x20cf('0xd')][_0x20cf('0x54')](_0x20cf('0x99'),_0x24e94f);if(_0x57e37c[_0x20cf('0x8e')]===-0x1){return _0x57e37c;}var _0x3ac295=this[_0x20cf('0x9a')](_0x20cf('0x9b'),'LUMENVOX_ASR_CONFIDENCE');if(_0x3ac295[_0x20cf('0x8e')]===-0x1){return _0x3ac295;}var _0x565940=this[_0x20cf('0x9a')](_0x20cf('0x9c'),_0x20cf('0x9d'));if(_0x565940[_0x20cf('0x8e')]===-0x1){return _0x565940;}var _0x3eaa09=this[_0x20cf('0x9a')](_0x20cf('0x9e'),_0x20cf('0x9f'));if(_0x3eaa09[_0x20cf('0x8e')]===-0x1){return _0x3eaa09;}return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0xa0'),_0x24e94f));};AGIVertices[_0x20cf('0x10')]['sestekasr']=function(_0x444a47){logger[_0x20cf('0x2b')](util['format']('Enter\x20in\x20SESTEKASR\x20(%s)\x20block',_0x444a47[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x444a47[_0x20cf('0x97')])){return this['channel'][_0x20cf('0x89')](_0x20cf('0x98'));}var _0x540c90=_0x444a47['grammar'];if(this[_0x20cf('0x61')](_0x444a47[_0x20cf('0x8d')])){_0x540c90+=','+_0x444a47[_0x20cf('0x8d')];}var _0x10ff16=this[_0x20cf('0xd')][_0x20cf('0x54')]('MRCPRecog',_0x540c90);if(_0x10ff16[_0x20cf('0x8e')]===-0x1){return _0x10ff16;}var _0x394024=this[_0x20cf('0x9a')]('RECOG_CONFIDENCE()','SESTEK_ASR_CONFIDENCE');if(_0x394024['result']===-0x1){return _0x394024;}var _0x2e65ba=this[_0x20cf('0x9a')]('RECOG_INPUT()','SESTEK_ASR_TRANSCRIPT');if(_0x2e65ba['result']===-0x1){return _0x2e65ba;}var _0x440a32=this[_0x20cf('0x9a')](_0x20cf('0x9e'),_0x20cf('0xa1'));if(_0x440a32[_0x20cf('0x8e')]===-0x1){return _0x440a32;}return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0xa0'),_0x540c90));};AGIVertices[_0x20cf('0x10')]['database']=function(_0x238a1d){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0xa2'),_0x238a1d[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x238a1d[_0x20cf('0xa3')])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x238a1d,'no\x20database\x20selected');}var _0x524a01=this[_0x20cf('0x17')]['sync'](this,_0x238a1d[_0x20cf('0xa3')]);if(!_0x524a01){return this['channel'][_0x20cf('0x2a')](_0x238a1d,_0x20cf('0xa4'));}if(!this[_0x20cf('0x61')](_0x238a1d[_0x20cf('0x2d')])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x238a1d,'no\x20query\x20configured');}var _0xac546e=_0x238a1d[_0x20cf('0x2d')][_0x20cf('0x56')](/(\r\n|\n|\r)/gm,'\x20');this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0xa5'),_0xac546e));var _0xeb66e0=this[_0x20cf('0x29')][_0x20cf('0x7b')](this,_0x524a01,_0xac546e);this['createSquareDetailsReport']['sync'](this,_0x238a1d,_0xac546e);if(!this[_0x20cf('0x61')](_0x238a1d['variable_id'])){return this['channel'][_0x20cf('0x89')](_0x20cf('0xa6'));}var _0x4274b7=this['getVariable'][_0x20cf('0x7b')](this,_0x238a1d[_0x20cf('0xa7')]);if(!_0x4274b7){return this[_0x20cf('0xd')]['error'](_0x238a1d,'no\x20variable\x20found');}var _0x30d844=this;_0xeb66e0[_0x20cf('0xa8')](function(_0x539c69,_0x30b6b3){Object[_0x20cf('0xa9')](_0x539c69)[_0x20cf('0xa8')](function(_0x161ab1){_0x30d844[_0x20cf('0xd')][_0x20cf('0x79')](util[_0x20cf('0x51')]('%s[%s][%s]',_0x4274b7,_0x30b6b3,_0x161ab1),_0x539c69[_0x161ab1]);});});this[_0x20cf('0xd')][_0x20cf('0x79')](util[_0x20cf('0x51')](_0x20cf('0xaa'),_0x4274b7),_0xeb66e0[_0x20cf('0x76')]);return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0xab'),_0x4274b7));};AGIVertices[_0x20cf('0x10')][_0x20cf('0xac')]=function(_0x171e1b){logger[_0x20cf('0xad')](util[_0x20cf('0x51')]('Enter\x20in\x20DIAL\x20(%s)\x20block',_0x171e1b[_0x20cf('0x34')]));if(!this['isConfigured'](_0x171e1b[_0x20cf('0xae')])){return this['channel'][_0x20cf('0x2a')](_0x171e1b,'no\x20user\x20selected');}var _0x5a882b=this[_0x20cf('0x1a')][_0x20cf('0x7b')](this,_0x171e1b['sip_id']);if(!_0x5a882b){return this[_0x20cf('0xd')]['error'](_0x171e1b,_0x20cf('0xaf'));}var _0x482e3a=this[_0x20cf('0xd')][_0x20cf('0x54')](_0x20cf('0xb0'),[util['format'](_0x20cf('0xb1'),_0x5a882b),_0x171e1b[_0x20cf('0x80')],_0x171e1b[_0x20cf('0xb2')],_0x171e1b[_0x20cf('0xb3')]]);if(_0x482e3a['result']===-0x1){return _0x482e3a;}return this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')](_0x20cf('0xb4'),'DIAL'));};AGIVertices[_0x20cf('0x10')][_0x20cf('0xb5')]=function(_0x7afa32){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0xb6'),_0x7afa32[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x7afa32[_0x20cf('0x5b')])){return this['channel'][_0x20cf('0x89')](_0x20cf('0xb7'));}if(!this[_0x20cf('0x61')](_0x7afa32['text'])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0x91'));}this[_0x20cf('0xd')][_0x20cf('0xb8')]=!![];this[_0x20cf('0x33')](_0x7afa32);this[_0x20cf('0x40')](_0x7afa32[_0x20cf('0x58')],'in');this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')](_0x20cf('0xb9'),_0x7afa32[_0x20cf('0x58')]));var _0x5b5f0e=this[_0x20cf('0x5a')]['sync'](this,_0x7afa32);if(_0x5b5f0e){for(var _0x31f2c0 in _0x5b5f0e){if(_0x5b5f0e['hasOwnProperty'](_0x31f2c0)){this[_0x20cf('0xd')][_0x20cf('0x79')](util[_0x20cf('0x51')]('DIALOGFLOW_%s',_0x31f2c0['toUpperCase']()),_0x5b5f0e[_0x31f2c0]);}}this[_0x20cf('0x40')](_0x5b5f0e['speech'],_0x20cf('0xba'));return this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')](_0x20cf('0xbb'),_0x5b5f0e[_0x20cf('0xbc')]));}return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x7afa32,'Dialogflow\x20is\x20unreachable');};AGIVertices[_0x20cf('0x10')]['sesteknda']=function(_0x3f729a){logger['info'](util[_0x20cf('0x51')](_0x20cf('0xbd'),_0x3f729a[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x3f729a[_0x20cf('0xbe')])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0xbf'));}if(!this[_0x20cf('0x61')](_0x3f729a[_0x20cf('0xc0')])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0xc1'));}if(!this[_0x20cf('0x61')](_0x3f729a[_0x20cf('0xc2')])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0xc3'));}if(!this[_0x20cf('0x61')](_0x3f729a['ndassistant_url'])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0x91'));}this['channel'][_0x20cf('0xb8')]=!![];this[_0x20cf('0x33')](_0x3f729a);this[_0x20cf('0x40')](_0x3f729a['text'],'in');this[_0x20cf('0xd')][_0x20cf('0x89')](util['format']('Trying\x20SestekNDA:\x20%s',_0x3f729a[_0x20cf('0x58')]));var _0x29cc8c=this[_0x20cf('0x5c')]['sync'](this,_0x3f729a);if(_0x29cc8c){for(var _0x355161 in _0x29cc8c){if(_0x29cc8c[_0x20cf('0xc4')](_0x355161)){this[_0x20cf('0xd')][_0x20cf('0x79')](util[_0x20cf('0x51')](_0x20cf('0xc5'),_0x355161[_0x20cf('0xc6')]()),_0x29cc8c[_0x355161]);}}this[_0x20cf('0x40')](_0x29cc8c[_0x20cf('0xbc')],_0x20cf('0xba'));if(_0x29cc8c[_0x20cf('0xc7')]){this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')]('Sestek\x20NDA\x20%s\x20file\x20created',_0x29cc8c[_0x20cf('0xc7')]));var _0x3b7a83=this[_0x20cf('0xd')]['streamFile'](_0x29cc8c[_0x20cf('0xc7')]);try{fs[_0x20cf('0xc8')](_0x29cc8c[_0x20cf('0xc7')]+_0x20cf('0xc9'));}catch(_0x4b2ced){logger[_0x20cf('0x2a')](_0x4b2ced);}return _0x3b7a83;}else{return this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')](_0x20cf('0xca'),_0x29cc8c[_0x20cf('0xbc')]));}}return this['channel'][_0x20cf('0x2a')](_0x3f729a,_0x20cf('0xcb'));};AGIVertices[_0x20cf('0x10')][_0x20cf('0xcc')]=function(_0x3813e0){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')]('Enter\x20in\x20END\x20(%s)\x20block',_0x3813e0['label']));return this['channel']['noop'](_0x20cf('0xcc'));};AGIVertices['prototype']['ext_dial']=function(_0x538126){logger['info'](util['format'](_0x20cf('0xcd'),_0x538126['label']));var _0x484d03='';if(_0x538126[_0x20cf('0xce')]){if(!this['isConfigured'](_0x538126[_0x20cf('0xce')])){return this[_0x20cf('0xd')]['error'](_0x538126,_0x20cf('0xcf'));}else{var _0x40eaaf=parseInt(_0x538126[_0x20cf('0xce')],0xa);if(isNaN(_0x40eaaf)){_0x484d03=_0x538126[_0x20cf('0xce')];}else{_0x484d03=this[_0x20cf('0x1c')][_0x20cf('0x7b')](this,_0x538126[_0x20cf('0xce')]);if(!_0x484d03){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x538126,_0x20cf('0xd0'));}}}}else if(_0x538126[_0x20cf('0xd1')]){_0x484d03=_0x538126[_0x20cf('0xd1')];}else{return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x538126,_0x20cf('0xcf'));}var _0x21f020=this[_0x20cf('0xd')][_0x20cf('0x54')](_0x20cf('0xb0'),[util[_0x20cf('0x51')](_0x20cf('0xd2'),_0x484d03,_0x538126[_0x20cf('0x47')]),_0x538126['timeout'],_0x538126[_0x20cf('0xb2')],_0x538126[_0x20cf('0xb3')]]);if(_0x21f020[_0x20cf('0x8e')]===-0x1){return _0x21f020;}return this[_0x20cf('0xd')][_0x20cf('0x89')](util['format'](_0x20cf('0xb4'),_0x20cf('0xb0')));};AGIVertices[_0x20cf('0x10')][_0x20cf('0xd3')]=function(_0x4435cc){logger['info'](util[_0x20cf('0x51')](_0x20cf('0xd4'),_0x4435cc['label']));return this['channel'][_0x20cf('0x89')](_0x20cf('0xd3'));};AGIVertices[_0x20cf('0x10')][_0x20cf('0xb')]=function(_0x2658ae){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0xd5'),_0x2658ae['label']));if(_0x2658ae[_0x20cf('0x7c')]===0x0){return this[_0x20cf('0x7a')](_0x2658ae);}_0x2658ae['retry']-=0x1;if(!this['isConfigured'](_0x2658ae[_0x20cf('0xd6')])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x2658ae,_0x20cf('0xd7'));}var _0x5568aa=this[_0x20cf('0x1e')][_0x20cf('0x7b')](this,_0x2658ae[_0x20cf('0xd6')]);if(!_0x5568aa){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x2658ae,'no\x20file\x20audio\x20found');}if(!this[_0x20cf('0x61')](_0x2658ae[_0x20cf('0xa7')])){return this[_0x20cf('0xd')]['error']('no\x20variable\x20selected\x20for\x20the\x20result');}var _0x2b8391=this[_0x20cf('0xd')][_0x20cf('0xd8')](_0x5568aa,_0x2658ae['response'],_0x2658ae['maxdigit']);var _0x3b02bf=_0x2b8391[_0x20cf('0x8e')]?_0x2b8391[_0x20cf('0x8e')][_0x20cf('0x4a')]():'';logger[_0x20cf('0x2b')](_0x20cf('0xd9'),JSON[_0x20cf('0xda')](_0x2b8391));if(_0x2b8391[_0x20cf('0x8e')]===-0x1){this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x2658ae,_0x3b02bf);return _0x2b8391;}else if(_0x2b8391[_0x20cf('0x78')]===_0x20cf('0x80')){_0x2b8391[_0x20cf('0x8e')]=_0x3b02bf[_0x20cf('0x76')]>=parseInt(_0x2658ae[_0x20cf('0xdb')])?'x':'i';}else{_0x2b8391['result']=_0x3b02bf[_0x20cf('0x76')]>=parseInt(_0x2658ae[_0x20cf('0xdb')])&&_0x3b02bf['length']<=parseInt(_0x2658ae[_0x20cf('0xdc')])?'x':'i';}var _0x5b7547=this[_0x20cf('0x11')][_0x20cf('0x7b')](this,_0x2658ae['variable_id']);if(!_0x5b7547){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x2658ae,_0x20cf('0xdd'));}this[_0x20cf('0xd')][_0x20cf('0x79')](_0x5b7547,_0x3b02bf);if(this[_0x20cf('0x61')](_0x2658ae[_0x20cf('0xde')])){var _0x38800c=parseInt(_0x2658ae[_0x20cf('0xde')],0xa);var _0x3c3df6=rs[_0x20cf('0xdf')]({'charset':'*','length':_0x38800c});var _0x3ac35a=_0x3b02bf[_0x20cf('0x76')];if(_0x3ac35a>0x0){if(_0x3ac35a>_0x38800c){this[_0x20cf('0x33')]['sync'](this,_0x2658ae,_0x2658ae[_0x20cf('0xe0')]===_0x20cf('0xe1')?_0x3c3df6+_0x3b02bf['substr'](_0x38800c):_0x3b02bf['substr'](0x0,_0x3ac35a-_0x38800c)+_0x3c3df6);}else{this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x2658ae,rs[_0x20cf('0xdf')]({'charset':'*','length':_0x3ac35a}));}}else{this['createSquareDetailsReport'][_0x20cf('0x7b')](this,_0x2658ae,'');}}else{this['createSquareDetailsReport']['sync'](this,_0x2658ae,_0x3b02bf);}return _0x2b8391;};AGIVertices['prototype'][_0x20cf('0xc')]=function(_0x18a664){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')]('Enter\x20in\x20GETSECRETDIGITS\x20(%s)\x20block',_0x18a664['label']));return this[_0x20cf('0xb')](_0x18a664);};AGIVertices[_0x20cf('0x10')][_0x20cf('0xe2')]=function(_0x53437f){logger['info'](util[_0x20cf('0x51')](_0x20cf('0xe3'),_0x53437f['label']));this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x53437f,_0x53437f[_0x20cf('0xe4')]);return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')]('GOAL\x20%s',_0x53437f[_0x20cf('0xe4')]));};AGIVertices[_0x20cf('0x10')][_0x20cf('0xe5')]=function(_0x330ad6){logger['info'](util[_0x20cf('0x51')]('[AGI]\x20Enter\x20in\x20AWSPOLLY\x20(%s)\x20block',_0x330ad6[_0x20cf('0x34')]));if(!this['isConfigured'](_0x330ad6[_0x20cf('0x64')])||!this['isConfigured'](_0x330ad6[_0x20cf('0x65')])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0xe6'));}if(!this[_0x20cf('0x61')](_0x330ad6[_0x20cf('0x58')])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0x91'));}this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')]('Trying\x20aws\x20Polly\x20%s',_0x330ad6[_0x20cf('0x58')]));var _0x3073e9=this[_0x20cf('0x63')][_0x20cf('0x7b')](this,_0x330ad6);if(_0x3073e9){this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0xe7'),_0x3073e9));var _0x2ea7ca=this[_0x20cf('0xd')][_0x20cf('0xe8')](_0x3073e9);try{fs[_0x20cf('0xc8')](_0x3073e9+_0x20cf('0xc9'));}catch(_0x41b414){logger['error'](_0x41b414);}return _0x2ea7ca;}return this['channel']['error'](_0x330ad6,_0x20cf('0xe9'));};AGIVertices[_0x20cf('0x10')][_0x20cf('0xea')]=function(_0x25d494){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0xeb'),_0x25d494['label']));if(!this[_0x20cf('0x61')](_0x25d494[_0x20cf('0x64')])||!this[_0x20cf('0x61')](_0x25d494[_0x20cf('0x65')])){return this['channel']['noop']('no\x20valid\x20credentials\x20configured');}if(!this[_0x20cf('0x61')](_0x25d494[_0x20cf('0x6b')])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0xec'));}if(!this[_0x20cf('0x61')](_0x25d494['text'])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0x91'));}this[_0x20cf('0xd')][_0x20cf('0xb8')]=!![];this['createSquareDetailsReport'](_0x25d494);this[_0x20cf('0x40')](_0x25d494['text'],'in');this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0xed'),_0x25d494[_0x20cf('0x58')]));var _0x56b211=this[_0x20cf('0x69')][_0x20cf('0x7b')](this,_0x25d494);if(_0x56b211){for(var _0x219755 in _0x56b211){if(_0x56b211[_0x20cf('0xc4')](_0x219755)&&_['isString'](_0x56b211[_0x219755])){this['channel'][_0x20cf('0x79')](util[_0x20cf('0x51')](_0x20cf('0xee'),_0x219755[_0x20cf('0xc6')]()),_0x56b211[_0x219755]);}}if(_[_0x20cf('0x46')](_0x56b211[_0x20cf('0xef')])){return this[_0x20cf('0xd')][_0x20cf('0x89')]('Amazon\x20Lex\x20ready\x20for\x20fulfillment');}else{this[_0x20cf('0x40')](_0x56b211[_0x20cf('0xef')],_0x20cf('0xba'));return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0xf0'),_0x56b211['message']));}}return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x25d494,_0x20cf('0xf1'));};AGIVertices[_0x20cf('0x10')][_0x20cf('0xf2')]=function(_0x373876){logger['info'](util['format'](_0x20cf('0xf3'),_0x373876[_0x20cf('0x34')],_0x373876[_0x20cf('0x80')]));if(!this[_0x20cf('0x61')](_0x373876[_0x20cf('0x5b')])){return this[_0x20cf('0xd')][_0x20cf('0x89')]('no\x20key\x20configured');}var _0x169285=_0x20cf('0xf4');var _0x4adb91=util[_0x20cf('0x51')](_0x20cf('0xf5'),FILES_PATH,rs[_0x20cf('0xdf')](0x4));var _0x2db806=util['format']('%s.%s',_0x4adb91,_0x169285);var _0x11e2b3=!![];if(_0x373876[_0x20cf('0xf6')]===_0x20cf('0xf7')){_0x11e2b3=![];}var _0x77d9ea=this[_0x20cf('0xd')][_0x20cf('0xf8')](_0x4adb91,_0x169285,_0x373876[_0x20cf('0xf9')],_0x373876[_0x20cf('0x80')],undefined,_0x11e2b3);if(_0x77d9ea[_0x20cf('0x8e')]!==-0x1){this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')](_0x20cf('0xfa'),_0x2db806));var _0x2c1789=this[_0x20cf('0xfb')][_0x20cf('0x7b')](this,_0x373876,_0x2db806);if(_0x2c1789){for(var _0xb6ddd5 in _0x2c1789){if(_0x2c1789[_0x20cf('0xc4')](_0xb6ddd5)){this['channel']['setVariable'](util[_0x20cf('0x51')](_0x20cf('0xfc'),_0xb6ddd5[_0x20cf('0xc6')]()),_0x2c1789[_0xb6ddd5]);}}return this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')]('GoogleASR\x20Result\x20%s',JSON[_0x20cf('0xda')](_0x2c1789)));}}return _0x77d9ea;};AGIVertices[_0x20cf('0x10')][_0x20cf('0xfd')]=function(_0x4d6d41){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0xfe'),_0x4d6d41[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x4d6d41[_0x20cf('0x6d')])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0xff'));}if(!this[_0x20cf('0x61')](_0x4d6d41[_0x20cf('0x6e')])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0x100'));}var _0x41552c=_0x20cf('0xf4');var _0x345e9e=util[_0x20cf('0x51')](_0x20cf('0xf5'),FILES_PATH,rs['generate'](0x4));var _0x140198=util['format']('%s.%s',_0x345e9e,_0x41552c);var _0x131d5c=!![];if(_0x4d6d41['beep']===_0x20cf('0xf7')){_0x131d5c=![];}var _0x5de62a=this[_0x20cf('0xd')][_0x20cf('0xf8')](_0x345e9e,_0x41552c,_0x4d6d41[_0x20cf('0xf9')],_0x4d6d41[_0x20cf('0x80')],undefined,_0x131d5c);if(_0x5de62a[_0x20cf('0x8e')]!==-0x1){this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')]('tilde\x20%s\x20file\x20created',_0x140198));var _0x3d3633=this['tildeASR'][_0x20cf('0x7b')](this,_0x4d6d41,_0x140198);if(_0x3d3633){for(var _0x345f09 in _0x3d3633){if(_0x3d3633[_0x20cf('0xc4')](_0x345f09)){this[_0x20cf('0xd')][_0x20cf('0x79')](util[_0x20cf('0x51')](_0x20cf('0x101'),_0x345f09[_0x20cf('0xc6')]()),_0x3d3633[_0x345f09]);}}return this[_0x20cf('0xd')][_0x20cf('0x89')](util['format']('TildeASR\x20Result\x20%s',JSON[_0x20cf('0xda')](_0x3d3633)));}}return _0x5de62a;};AGIVertices['prototype']['gotoc']=function(_0x115658){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0x102'),_0x115658[_0x20cf('0x34')]));return this[_0x20cf('0xd')][_0x20cf('0x103')](_0x115658[_0x20cf('0x3b')],_0x115658[_0x20cf('0x3c')],_0x115658['priority']);};AGIVertices[_0x20cf('0x10')][_0x20cf('0x104')]=function(_0xec0914){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')]('Enter\x20in\x20GOTOIF\x20(%s)\x20block',_0xec0914['label']));if(!this[_0x20cf('0x61')](_0xec0914[_0x20cf('0x105')])){return this['channel'][_0x20cf('0x2a')](_0xec0914,_0x20cf('0x106'));}try{var _0x443156=eval(_0xec0914[_0x20cf('0x105')])?_0x20cf('0x107'):_0x20cf('0x108');this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')](_0x20cf('0x109'),_0xec0914[_0x20cf('0x105')],_0x443156));return{'code':0xc8,'result':_0x443156};}catch(_0x30f876){return{'code':0xc8,'result':_0x20cf('0x108')};}};AGIVertices['prototype'][_0x20cf('0x10a')]=function(_0x13d3f3){logger['info'](util[_0x20cf('0x51')](_0x20cf('0x10b'),_0x13d3f3[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x13d3f3[_0x20cf('0x10c')])){return this['channel'][_0x20cf('0x2a')](_0x13d3f3,_0x20cf('0x10d'));}var _0x21d600=this[_0x20cf('0x23')][_0x20cf('0x7b')](this,_0x13d3f3[_0x20cf('0x10c')]);if(!_0x21d600){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x13d3f3,_0x20cf('0x10e'));}for(var _0x3f1abf=0x0;_0x3f1abf<_0x21d600[_0x20cf('0x76')];_0x3f1abf+=0x1){var _0x28f684=this[_0x20cf('0xd')]['getVariable'](util[_0x20cf('0x51')](_0x20cf('0x10f'),_0x21d600[_0x3f1abf]));if(_0x28f684[_0x20cf('0x8e')]===-0x1){return _0x28f684;}logger[_0x20cf('0x2b')](util['format'](_0x20cf('0x110'),_0x21d600[_0x3f1abf],_0x28f684['extra']));if(_0x28f684[_0x20cf('0x78')]===_0x20cf('0x107')){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x110'),_0x21d600[_0x3f1abf],_0x20cf('0x107')));this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x110'),_0x21d600[_0x3f1abf],_0x20cf('0x107')));return{'code':0xc8,'result':_0x20cf('0x107')};}else{logger['info'](util[_0x20cf('0x51')](_0x20cf('0x110'),_0x21d600[_0x3f1abf],_0x20cf('0x108')));this[_0x20cf('0xd')][_0x20cf('0x89')](util['format'](_0x20cf('0x110'),_0x21d600[_0x3f1abf],_0x20cf('0x108')));}}return{'code':0xc8,'result':_0x20cf('0x108')};};AGIVertices[_0x20cf('0x10')][_0x20cf('0x111')]=function(_0x389f93){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x112'),_0x389f93[_0x20cf('0x34')]));return this[_0x20cf('0xd')][_0x20cf('0x111')]();};AGIVertices[_0x20cf('0x10')][_0x20cf('0x113')]=function(_0x301421){logger['info'](util[_0x20cf('0x51')](_0x20cf('0x114'),_0x301421[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x301421[_0x20cf('0x5b')])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0xb7'));}var _0x3837f8=_0x20cf('0xf4');var _0x4f061d=util[_0x20cf('0x51')]('%s/recordings/%s',FILES_PATH,rs[_0x20cf('0xdf')](0x4));var _0x1745e4=util[_0x20cf('0x51')](_0x20cf('0x115'),_0x4f061d,_0x3837f8);var _0x57fe40=!![];if(_0x301421['beep']===_0x20cf('0xf7')){_0x57fe40=![];}var _0x166c70=this[_0x20cf('0xd')][_0x20cf('0xf8')](_0x4f061d,_0x3837f8,_0x301421[_0x20cf('0xf9')],_0x301421[_0x20cf('0x80')],undefined,_0x57fe40);if(_0x166c70[_0x20cf('0x8e')]!==-0x1){this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')](_0x20cf('0x116'),_0x1745e4));var _0x46c5a8=this[_0x20cf('0x60')][_0x20cf('0x7b')](this,_0x301421,_0x1745e4);if(_0x46c5a8){for(var _0xe41d22 in _0x46c5a8){if(_0x46c5a8[_0x20cf('0xc4')](_0xe41d22)){this[_0x20cf('0xd')][_0x20cf('0x79')](util['format'](_0x20cf('0x117'),_0xe41d22[_0x20cf('0xc6')]()),_0x46c5a8[_0xe41d22]);}}return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')]('IspeechASR\x20Result\x20%s',JSON[_0x20cf('0xda')](_0x46c5a8)));}}return _0x166c70;};AGIVertices['prototype']['ispeechtts']=function(_0x320d4a){logger[_0x20cf('0x2b')](util['format']('Enter\x20in\x20ISPEECHTTS\x20(%s)\x20block',_0x320d4a[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x320d4a[_0x20cf('0x5b')])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0xb7'));}if(!this[_0x20cf('0x61')](_0x320d4a[_0x20cf('0x58')])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0x91'));}this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x118'),_0x320d4a[_0x20cf('0x58')]));var _0x4702a2=this[_0x20cf('0x5d')]['sync'](this,_0x320d4a);if(_0x4702a2){this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x116'),_0x4702a2));var _0x3f82aa=this[_0x20cf('0xd')]['streamFile'](_0x4702a2,_0x320d4a[_0x20cf('0xf9')]);try{fs[_0x20cf('0xc8')](_0x4702a2+_0x20cf('0xc9'));}catch(_0x1d2172){logger['error'](_0x1d2172);}return _0x3f82aa;}return this['channel'][_0x20cf('0x2a')](_0x320d4a,_0x20cf('0x119'));};AGIVertices[_0x20cf('0x10')][_0x20cf('0x11a')]=function(_0x5a952f){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x11b'),_0x5a952f[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x5a952f[_0x20cf('0x11c')])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x5a952f,_0x20cf('0x11d'));}logger['info'](util[_0x20cf('0x51')](_0x20cf('0x11e'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x5a952f[_0x20cf('0x11c')]));var _0x11e79a=this['agentLogin'][_0x20cf('0x7b')](this,_0x5a952f['findBy']);if(_0x11e79a){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x11f'),this['channel']['callerid'],_0x5a952f['findBy']));this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x11f'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x5a952f[_0x20cf('0x11c')]));return{'code':0xc8,'result':_0x20cf('0x120')};}else{logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x121'),this[_0x20cf('0xd')]['callerid'],_0x5a952f[_0x20cf('0x11c')]));this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')]('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this[_0x20cf('0xd')][_0x20cf('0x37')],_0x5a952f['findBy']));return{'code':0xc8,'result':_0x20cf('0x122')};}};AGIVertices[_0x20cf('0x10')][_0x20cf('0x123')]=function(_0x1bf0cd){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x124'),_0x1bf0cd['label']));if(!this['isConfigured'](_0x1bf0cd[_0x20cf('0x11c')])){return this[_0x20cf('0xd')]['error'](_0x1bf0cd,_0x20cf('0x11d'));}logger['info'](util[_0x20cf('0x51')](_0x20cf('0x11e'),this[_0x20cf('0xd')]['callerid'],_0x1bf0cd[_0x20cf('0x11c')]));var _0x8c2cd8=this[_0x20cf('0x4f')][_0x20cf('0x7b')](this,_0x1bf0cd[_0x20cf('0x11c')]);if(_0x8c2cd8){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0x11f'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x1bf0cd['findBy']));this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x11f'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x1bf0cd[_0x20cf('0x11c')]));return{'code':0xc8,'result':'success'};}else{logger['info'](util[_0x20cf('0x51')](_0x20cf('0x121'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x1bf0cd[_0x20cf('0x11c')]));this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x121'),this['channel'][_0x20cf('0x37')],_0x1bf0cd[_0x20cf('0x11c')]));return{'code':0xc8,'result':_0x20cf('0x122')};}};AGIVertices[_0x20cf('0x10')][_0x20cf('0x125')]=function(_0x349714){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x126'),_0x349714[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x349714['operation'])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x349714,'no\x20operation\x20configured');}this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')]('math\x20%s',_0x349714[_0x20cf('0x127')]));var _0x5c1686=eval(_0x349714['operation']);if(!this[_0x20cf('0x61')](_0x349714['variable_id'])){return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0xa6'));}var _0x45c090=this[_0x20cf('0x11')][_0x20cf('0x7b')](this,_0x349714[_0x20cf('0xa7')]);if(!_0x45c090){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x349714,'no\x20variable\x20found');}if(_[_0x20cf('0x128')](_0x5c1686)){var _0x23a524=this;_0x5c1686['forEach'](function(_0xab2271,_0x2df336){_0x23a524[_0x20cf('0xd')][_0x20cf('0x79')](util['format'](_0x20cf('0x129'),_0x45c090,_0x2df336),_0xab2271);});return this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')]('variable\x20%s[key]\x20set',_0x45c090));}else{return this[_0x20cf('0xd')][_0x20cf('0x79')](_0x45c090,_0x5c1686);}};AGIVertices[_0x20cf('0x10')][_0x20cf('0x12a')]=function(_0x281fa5){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x12b'),_0x281fa5['label']));if(_0x281fa5[_0x20cf('0x7c')]===0x0){return this[_0x20cf('0x7a')](_0x281fa5);}_0x281fa5['retry']-=0x1;if(!this[_0x20cf('0x61')](_0x281fa5[_0x20cf('0xd6')])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x281fa5,_0x20cf('0xd7'));}var _0x37fce4=this[_0x20cf('0x1e')][_0x20cf('0x7b')](this,_0x281fa5[_0x20cf('0xd6')]);if(!_0x37fce4){return this['channel'][_0x20cf('0x2a')](_0x281fa5,_0x20cf('0x12c'));}var _0x429403=this[_0x20cf('0xd')][_0x20cf('0xd8')](_0x37fce4,_0x281fa5['response'],_0x281fa5[_0x20cf('0x12d')]);var _0x19e313=_0x429403[_0x20cf('0x8e')];if(_0x429403[_0x20cf('0x8e')]===-0x1){this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x281fa5,'-1');return _0x429403;}else if(_0x429403['extra']===_0x20cf('0x80')){_0x429403[_0x20cf('0x8e')]=_0x429403[_0x20cf('0x8e')][_0x20cf('0x76')]>0x0?_0x429403[_0x20cf('0x8e')]:'t';}else if(_[_0x20cf('0x42')](_0x429403[_0x20cf('0x8e')])){_0x429403[_0x20cf('0x8e')]='#';_0x19e313='#';}if(!this[_0x20cf('0x61')](_0x281fa5[_0x20cf('0xa7')])){this['channel'][_0x20cf('0x89')](_0x20cf('0xa6'));}else{var _0x30b0f2=this['getVariable'][_0x20cf('0x7b')](this,_0x281fa5[_0x20cf('0xa7')]);if(!_0x30b0f2){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x281fa5,'no\x20variable\x20found');}this['channel']['setVariable'](_0x30b0f2,_0x19e313);}this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x281fa5,_0x19e313);return _0x429403;};AGIVertices[_0x20cf('0x10')][_0x20cf('0x89')]=function(_0x3b0e1b){logger[_0x20cf('0x2b')](util['format']('Enter\x20in\x20NOOP\x20(%s)\x20block',_0x3b0e1b[_0x20cf('0x34')]));return this['channel'][_0x20cf('0x89')](_0x3b0e1b[_0x20cf('0x12e')]||_0x3b0e1b[_0x20cf('0x34')]);};AGIVertices[_0x20cf('0x10')][_0x20cf('0x12f')]=function(_0x394da3){logger['info'](util[_0x20cf('0x51')](_0x20cf('0x130'),_0x394da3[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x394da3[_0x20cf('0x11c')])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x394da3,_0x20cf('0x11d'));}logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x11e'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x394da3[_0x20cf('0x11c')]));var _0x36d159=this[_0x20cf('0x4b')]['sync'](this,_0x394da3[_0x20cf('0x131')]);var _0x398b01=this[_0x20cf('0x4c')]['sync'](this,_0x394da3['findBy'],_0x36d159);if(_0x398b01){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')]('AGENT\x20%s\x20FOUND\x20BY',this[_0x20cf('0xd')]['callerid'],_0x394da3[_0x20cf('0x11c')]));this[_0x20cf('0xd')]['noop'](util[_0x20cf('0x51')](_0x20cf('0x11f'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x394da3[_0x20cf('0x11c')]));return{'code':0xc8,'result':'success'};}else{logger['info'](util[_0x20cf('0x51')](_0x20cf('0x121'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x394da3[_0x20cf('0x11c')]));this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x11f'),this['channel']['callerid'],_0x394da3[_0x20cf('0x11c')]));return{'code':0xc8,'result':_0x20cf('0x122')};}};AGIVertices['prototype'][_0x20cf('0x132')]=function(_0x4a28b8){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x133'),_0x4a28b8['label']));if(!this[_0x20cf('0x61')](_0x4a28b8[_0x20cf('0xd6')])){return this['channel']['error'](_0x4a28b8,_0x20cf('0xd7'));}var _0x1d3c8c=this['getSound'][_0x20cf('0x7b')](this,_0x4a28b8['file_id']);if(!_0x1d3c8c){return this['channel'][_0x20cf('0x2a')](_0x4a28b8,_0x20cf('0x12c'));}var _0x4ed86c=this['channel']['exec'](_0x20cf('0x134'),[_0x1d3c8c,_0x4a28b8[_0x20cf('0xb2')]]);if(_0x4ed86c['result']===-0x1){return _0x4ed86c;}return this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x8f'),_0x20cf('0x134'),_0x1d3c8c));};AGIVertices[_0x20cf('0x10')][_0x20cf('0x135')]=function(_0x13ca8d){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x136'),_0x13ca8d[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x13ca8d[_0x20cf('0x137')])){return this['channel'][_0x20cf('0x2a')](_0x13ca8d,'no\x20queue\x20selected');}var _0x25fea9='';var _0x3177fb=parseInt(_0x13ca8d[_0x20cf('0x137')],0xa);if(isNaN(_0x3177fb)){_0x25fea9=_0x13ca8d[_0x20cf('0x137')];}else{_0x25fea9=this['getVoiceQueue']['sync'](this,_0x13ca8d[_0x20cf('0x137')]);if(!_0x25fea9){return this[_0x20cf('0xd')]['error'](_0x13ca8d,'no\x20queue\x20found');}}var _0x3ce9ad='';if(this[_0x20cf('0x61')](_0x13ca8d[_0x20cf('0xd6')])){var _0x1a8ea7=this[_0x20cf('0x1e')][_0x20cf('0x7b')](this,_0x13ca8d['file_id']);if(_0x1a8ea7){_0x3ce9ad=_0x1a8ea7;}}this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x13ca8d,_0x25fea9);if(_0x13ca8d[_0x20cf('0xb2')]['indexOf']('x')<0x0){_0x13ca8d[_0x20cf('0xb2')]+='x';}if(_0x13ca8d[_0x20cf('0xb2')][_0x20cf('0x138')]('X')<0x0){_0x13ca8d[_0x20cf('0xb2')]+='X';}this[_0x20cf('0xd')][_0x20cf('0x79')](_0x20cf('0x139'),_0x25fea9?_0x25fea9[_0x20cf('0x13a')]():'');var _0x32509b=this[_0x20cf('0xd')][_0x20cf('0x54')](_0x20cf('0x13b'),[_0x25fea9,_0x13ca8d['opts'],_0x13ca8d['url'],_0x3ce9ad,_0x13ca8d[_0x20cf('0x80')],_0x13ca8d['agi'],_0x13ca8d[_0x20cf('0x13c')],_0x13ca8d[_0x20cf('0x13d')],'',_0x13ca8d[_0x20cf('0x13e')]]);if(_0x32509b['result']===-0x1){return _0x32509b;}return this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x8f'),_0x20cf('0x13b'),_0x25fea9));};AGIVertices[_0x20cf('0x10')][_0x20cf('0x13f')]=function(_0x21fe71){logger['info'](util['format'](_0x20cf('0x140'),_0x21fe71[_0x20cf('0x34')]));var _0x2df6a7=_0x21fe71['recordingFormat']||_0x20cf('0xf4');var _0x1e775e=util[_0x20cf('0x51')](_0x20cf('0x141'),this[_0x20cf('0xd')][_0x20cf('0x39')],rs[_0x20cf('0xdf')](0x5));var _0x7f971f=util[_0x20cf('0x51')]('%s/recordings/%s.%s',FILES_PATH,_0x1e775e,_0x2df6a7);var _0x485534=util[_0x20cf('0x51')](_0x20cf('0xf5'),FILES_PATH,_0x1e775e);this['createSquareRecording'][_0x20cf('0x7b')](this,_0x21fe71,_0x1e775e,_0x7f971f);this[_0x20cf('0xd')]['setVariable'](_0x20cf('0x142'),_0x1e775e);logger[_0x20cf('0x2b')](_0x20cf('0x143'),_0x485534,_0x2df6a7,_0x21fe71[_0x20cf('0x144')],_0x21fe71[_0x20cf('0x80')]);return this[_0x20cf('0xd')]['recordFile'](_0x485534,_0x2df6a7,_0x21fe71[_0x20cf('0x144')],_0x21fe71['timeout'],undefined,!![]);};AGIVertices[_0x20cf('0x10')][_0x20cf('0x145')]=function(_0x452f06){logger['info'](util['format'](_0x20cf('0x146'),_0x452f06[_0x20cf('0x34')]));return this['channel'][_0x20cf('0x147')](_0x452f06[_0x20cf('0x148')]['replace'](/\s+/g,''),_0x452f06[_0x20cf('0x144')]);};AGIVertices[_0x20cf('0x10')][_0x20cf('0x149')]=function(_0x32e656){logger['info'](util[_0x20cf('0x51')](_0x20cf('0x14a'),_0x32e656[_0x20cf('0x34')]));return this[_0x20cf('0xd')][_0x20cf('0x14b')](_0x32e656['number'][_0x20cf('0x56')](/\s+/g,''),_0x32e656['escape_digits']);};AGIVertices[_0x20cf('0x10')][_0x20cf('0x14c')]=function(_0x52a840){logger['info'](util[_0x20cf('0x51')](_0x20cf('0x14d'),_0x52a840[_0x20cf('0x34')]));return this[_0x20cf('0xd')][_0x20cf('0x14e')](_0x52a840[_0x20cf('0x58')],_0x52a840['escape_digits']);};AGIVertices[_0x20cf('0x10')][_0x20cf('0x14f')]=function(_0x3dfb80){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x150'),_0x3dfb80[_0x20cf('0x34')]));if(!this['isConfigured'](_0x3dfb80[_0x20cf('0x151')])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0x152'));}var _0x2a3c5b=this[_0x20cf('0x153')][_0x20cf('0x7b')](this,_0x3dfb80[_0x20cf('0x151')]);if(!_0x2a3c5b||!_0x2a3c5b[_0x20cf('0x154')]){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x3dfb80,_0x20cf('0x155'));}var _0x3fde54={'from':util['format'](_0x20cf('0x156'),_0x2a3c5b['name'],_0x2a3c5b['email']||_0x2a3c5b[_0x20cf('0x154')]['user']),'to':_0x3dfb80['to']||'','cc':_0x3dfb80['cc']||'','bcc':_0x3dfb80[_0x20cf('0x157')]||'','subject':_0x3dfb80[_0x20cf('0x158')],'html':_0x3dfb80[_0x20cf('0x58')],'text':_0x3dfb80[_0x20cf('0x58')]};var _0x196779={'tls':{'rejectUnauthorized':![]}};if(_0x2a3c5b[_0x20cf('0x154')][_0x20cf('0x159')]){_0x196779['service']=_0x2a3c5b[_0x20cf('0x154')][_0x20cf('0x159')];}else{_0x196779['host']=_0x2a3c5b[_0x20cf('0x154')][_0x20cf('0x15a')];_0x196779[_0x20cf('0x15b')]=_0x2a3c5b[_0x20cf('0x154')][_0x20cf('0x15b')];_0x196779['secure']=_0x2a3c5b[_0x20cf('0x154')][_0x20cf('0x15c')];}if(_0x2a3c5b[_0x20cf('0x154')][_0x20cf('0x15d')]){_0x196779['auth']={'user':_0x2a3c5b[_0x20cf('0x154')][_0x20cf('0x15e')],'pass':_0x2a3c5b[_0x20cf('0x154')][_0x20cf('0x15f')]};}if(this[_0x20cf('0x61')](_0x3dfb80[_0x20cf('0x160')])){}logger['debug'](_0x20cf('0x161'),JSON[_0x20cf('0xda')](_0x3fde54));this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x3dfb80,_0x3dfb80[_0x20cf('0x151')]);this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')]('Trying\x20SendMail\x20with\x20account\x20%s',_0x2a3c5b[_0x20cf('0x14')]));this[_0x20cf('0x22')]['sync'](this,_0x196779,_0x3fde54);return this[_0x20cf('0xd')]['noop'](_0x20cf('0x162'));};AGIVertices[_0x20cf('0x10')]['sendFax']=function(_0x43fc79){logger['info'](util['format'](_0x20cf('0x163'),_0x43fc79[_0x20cf('0x34')]));return this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0x164'));};AGIVertices[_0x20cf('0x10')][_0x20cf('0x165')]=function(_0x3e5e9c){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x166'),_0x3e5e9c['label']));if(!this[_0x20cf('0x61')](_0x3e5e9c[_0x20cf('0x167')])){return this['channel'][_0x20cf('0x89')](_0x20cf('0x168'));}var _0x88ac06=this[_0x20cf('0x169')]['sync'](this,_0x3e5e9c['sms_account_id']);if(!_0x88ac06){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x3e5e9c,_0x20cf('0x16a'));}var _0x3c7ef7={'body':_0x3e5e9c[_0x20cf('0x16b')],'phone':_0x3e5e9c['to']||'','SmsAccountId':_0x88ac06['id']};logger[_0x20cf('0xad')](_0x20cf('0x16c'),JSON[_0x20cf('0xda')](_0x3c7ef7));this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x3e5e9c,_0x3e5e9c['sms_account_id']);this[_0x20cf('0xd')][_0x20cf('0x89')](util['format'](_0x20cf('0x16d'),_0x88ac06[_0x20cf('0x14')]));this[_0x20cf('0x32')]['sync'](this,_0x3c7ef7);return this[_0x20cf('0xd')]['noop']('Sms\x20message\x20added\x20to\x20outgoing\x20process');};AGIVertices[_0x20cf('0x10')][_0x20cf('0x16e')]=function(_0x5ac257){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0x16f'),_0x5ac257[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x5ac257['variable_id'])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x5ac257,_0x20cf('0x170'));}var _0x470cf5=this[_0x20cf('0x11')][_0x20cf('0x7b')](this,_0x5ac257[_0x20cf('0xa7')]);if(!_0x470cf5){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x5ac257,_0x20cf('0xdd'));}return this[_0x20cf('0xd')]['setVariable'](_0x470cf5,_0x5ac257[_0x20cf('0x171')]);};AGIVertices[_0x20cf('0x10')]['start']=function(_0x136d2a){logger['info'](util['format'](_0x20cf('0x172'),_0x136d2a['label']));this[_0x20cf('0xd')][_0x20cf('0x89')](_0x20cf('0x173'));if(_0x136d2a[_0x20cf('0x7e')]===_0x20cf('0x174')){this[_0x20cf('0xd')][_0x20cf('0x89')]('Answer');return this[_0x20cf('0xd')][_0x20cf('0x7e')]();}return this['channel'][_0x20cf('0x89')](_0x20cf('0x175'));};AGIVertices[_0x20cf('0x10')]['subproject']=function(_0x1ec566){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x176'),_0x1ec566['label']));if(!this['isConfigured'](_0x1ec566[_0x20cf('0x177')])){return this[_0x20cf('0xd')]['error'](_0x1ec566,_0x20cf('0x178'));}var _0x15c221=this[_0x20cf('0x15')][_0x20cf('0x7b')](this,_0x1ec566[_0x20cf('0x177')]);if(!this[_0x20cf('0x61')](_0x15c221)){return this[_0x20cf('0xd')]['error'](_0x1ec566,util[_0x20cf('0x51')](_0x20cf('0x179'),_0x1ec566[_0x20cf('0x177')]));}if(_0x15c221===this[_0x20cf('0xd')][_0x20cf('0x36')]){return this[_0x20cf('0xd')]['error'](_0x1ec566,_0x20cf('0x17a'));}this[_0x20cf('0x33')][_0x20cf('0x7b')](this,_0x1ec566,_0x15c221);var _0x3622ce=this[_0x20cf('0xd')][_0x20cf('0x54')]('AGI',util[_0x20cf('0x51')](_0x20cf('0x17b'),config[_0x20cf('0x7')][_0x20cf('0x15a')]||_0x20cf('0x17c'),_0x15c221,this[_0x20cf('0xd')]['arg_1']));if(_0x3622ce[_0x20cf('0x8e')]===-0x1){return _0x3622ce;}return this[_0x20cf('0xd')][_0x20cf('0x89')](util['format'](_0x20cf('0x8f'),_0x20cf('0x17d'),_0x15c221));};AGIVertices[_0x20cf('0x10')][_0x20cf('0x17e')]=function(_0x5c08bf){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x17f'),_0x5c08bf[_0x20cf('0x34')]));var _0x5e4675=this[_0x20cf('0x180')]['sync'](this,_0x5c08bf[_0x20cf('0x181')]);this[_0x20cf('0x33')]['sync'](this,_0x5c08bf,_0x5c08bf['command']);if(this[_0x20cf('0x61')](_0x5c08bf['variable_id'])){var _0x461df6=this[_0x20cf('0x11')][_0x20cf('0x7b')](this,_0x5c08bf[_0x20cf('0xa7')]);if(_0x461df6){this['channel'][_0x20cf('0x79')](_0x461df6,_0x5e4675);return this[_0x20cf('0xd')][_0x20cf('0x89')](util['format'](_0x20cf('0x182'),_0x5c08bf[_0x20cf('0x181')],_0x461df6));}}return this['channel'][_0x20cf('0x89')](util['format'](_0x20cf('0x183'),_0x5c08bf[_0x20cf('0x181')]));};AGIVertices['prototype'][_0x20cf('0x184')]=function(_0x10db86){logger['info'](util['format'](_0x20cf('0x185'),_0x10db86['label']));if(!this[_0x20cf('0x61')](_0x10db86['text'])){return this[_0x20cf('0xd')]['noop'](_0x20cf('0x91'));}this[_0x20cf('0xd')][_0x20cf('0x89')](util['format'](_0x20cf('0x186'),_0x10db86['text']));var _0x605b5e=this[_0x20cf('0x57')][_0x20cf('0x7b')](this,_0x10db86);if(_0x605b5e){this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')]('Google\x20TTS\x20%s\x20file\x20created',_0x605b5e));var _0x54f542=this[_0x20cf('0xd')][_0x20cf('0xe8')](_0x605b5e);try{fs[_0x20cf('0xc8')](_0x605b5e+_0x20cf('0xc9'));}catch(_0x53c1bf){logger[_0x20cf('0x2a')](_0x53c1bf);}return _0x54f542;}return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x10db86,'Google\x20TTS\x20is\x20unreachable');};AGIVertices['prototype']['unpause']=function(_0x2e592b){logger['info'](util[_0x20cf('0x51')](_0x20cf('0x187'),_0x2e592b[_0x20cf('0x34')]));if(!this[_0x20cf('0x61')](_0x2e592b[_0x20cf('0x11c')])){return this[_0x20cf('0xd')]['error'](_0x2e592b,_0x20cf('0x11d'));}logger[_0x20cf('0x2b')](util['format']('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0x20cf('0xd')][_0x20cf('0x37')],_0x2e592b[_0x20cf('0x11c')]));var _0x1a0774=this[_0x20cf('0x4e')]['sync'](this,_0x2e592b['findBy']);if(_0x1a0774){logger[_0x20cf('0x2b')](util[_0x20cf('0x51')](_0x20cf('0x11f'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x2e592b['findBy']));this['channel']['noop'](util['format'](_0x20cf('0x11f'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x2e592b[_0x20cf('0x11c')]));return{'code':0xc8,'result':'success'};}else{logger[_0x20cf('0x2b')](util['format']('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this[_0x20cf('0xd')][_0x20cf('0x37')],_0x2e592b[_0x20cf('0x11c')]));this[_0x20cf('0xd')][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x121'),this[_0x20cf('0xd')][_0x20cf('0x37')],_0x2e592b[_0x20cf('0x11c')]));return{'code':0xc8,'result':_0x20cf('0x122')};}};AGIVertices[_0x20cf('0x10')][_0x20cf('0x188')]=function(_0x209b63){logger['info'](util[_0x20cf('0x51')]('Enter\x20in\x20VOICEMAIL\x20(%s)\x20block',_0x209b63[_0x20cf('0x34')]));var _0x34e385=this[_0x20cf('0xd')]['exec']('VOICEMAIL',[_0x209b63[_0x20cf('0x189')],_0x209b63['options']]);if(_0x34e385['result']===-0x1){return _0x34e385;}return this['channel'][_0x20cf('0x89')](util[_0x20cf('0x51')](_0x20cf('0x8f'),_0x20cf('0x18a'),_0x209b63[_0x20cf('0x189')]));};AGIVertices['prototype'][_0x20cf('0x18b')]=function(_0x44ef1d){logger[_0x20cf('0x2b')](util['format'](_0x20cf('0x18c'),_0x44ef1d['label']));if(!this[_0x20cf('0x61')](_0x44ef1d[_0x20cf('0xa7')])){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x44ef1d,'no\x20variable\x20selected');}var _0x443728=this[_0x20cf('0x11')][_0x20cf('0x7b')](this,_0x44ef1d['variable_id']);if(!_0x443728){return this[_0x20cf('0xd')][_0x20cf('0x2a')](_0x44ef1d,_0x20cf('0xdd'));}var _0x507667=this['channel'][_0x20cf('0x11')](_0x443728);return{'code':0xc8,'result':_0x507667[_0x20cf('0x78')]?_0x507667['extra']:'-'};};String['prototype'][_0x20cf('0x18d')]=function(_0x5abf38,_0x30cb2d){return this['split'](_0x5abf38)[_0x20cf('0x18e')](_0x30cb2d);};module[_0x20cf('0x18f')]=AGIVertices;
\ No newline at end of file
+var _0xf786=['sesteknda','no\x20ndauth\x20url\x20configured','username','no\x20username\x20configured','ndassistant_url','Trying\x20SestekNDA:\x20%s','SESTEK_NDA_%s','audiofile','Sestek\x20NDA\x20%s\x20file\x20created','streamFile','.wav','SestekNDA\x20is\x20unreachable','Enter\x20in\x20EXTERNAL\x20DIAL\x20(%s)\x20block','trunk_id','no\x20trunk\x20selected','trunk_name','url','finally','Enter\x20in\x20FINALLY\x20(%s)\x20block','Enter\x20in\x20GETDIGITS\x20(%s)\x20block','retry','file_id','no\x20file\x20audio\x20selected','response','stringify','mindigit','maxdigit','no\x20variable\x20found','hiddendigitsnum','generate','hiddendigitspos','first','substr','Enter\x20in\x20GETSECRETDIGITS\x20(%s)\x20block','Enter\x20in\x20GOAL\x20(%s)\x20block','goalname','GOAL\x20%s','[AGI]\x20Enter\x20in\x20AWSPOLLY\x20(%s)\x20block','no\x20valid\x20credentials\x20configured','aws\x20Polly\x20%s\x20file\x20created','awslex','Enter\x20in\x20Amazon\x20Lex\x20(%s)\x20block','no\x20bot\x20name\x20configured','Trying\x20Amazon\x20Lex:\x20%s','AWS_LEX_%s','message','Amazon\x20Lex\x20ready\x20for\x20fulfillment','out','Amazon\x20Lex\x20Result\x20%s','googleasr','Enter\x20in\x20GOOGLEASR\x20(%s)\x20block\x20%s','no\x20key\x20configured','wav','%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\x20appid\x20configured','no\x20appsecret\x20configured','%s/recordings/%s','tilde\x20%s\x20file\x20created','TILDE_ASR_%s','Enter\x20in\x20GOTO\x20(%s)\x20block','continueAt','gotoif','Enter\x20in\x20GOTOIF\x20(%s)\x20block','condition','no\x20condition\x20configured','true','false','Enter\x20in\x20GOTOIFTIME\x20(%s)\x20block','interval_id','no\x20interval\x20configured','no\x20intervals\x20found','IFTIME(%s?true:false)','IFTIME\x20%s\x20%s','hangup','Enter\x20in\x20HANGUP\x20(%s)\x20block','ispeechasr','Enter\x20in\x20ISPEECHASR\x20(%s)\x20block','ISPEECH_ASR_%s','ispeechtts','Trying\x20ispeech\x20TTS\x20%s','ispeech\x20%s\x20file\x20created','unlink','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','success','math','Enter\x20in\x20MATH\x20(%s)\x20block','operation','math\x20%s','isArray','variable\x20%s[key]\x20set','Enter\x20in\x20MENU\x20(%s)\x20block','getData','digit','Enter\x20in\x20NOOP\x20(%s)\x20block','pause','pause_id','Enter\x20in\x20PLAYBACK\x20(%s)\x20block','no\x20file\x20audio\x20found','PLAYBACK','queue','Enter\x20in\x20QUEUE\x20(%s)\x20block','queue_id','no\x20queue\x20found','indexOf','XMCS-QUEUE','toLowerCase','macro','gosub','position','QUEUE','Enter\x20in\x20RECORD\x20(%s)\x20block','%s_%s','createSquareRecording','RECORDING_SAVENAME','Recording\x20%s\x20%s\x20%s\x20%s','escape_digits','saydigits','Enter\x20in\x20SAYDIGITS\x20(%s)\x20block','sayDigits','saynumber','Enter\x20in\x20SAYNUMBER\x20(%s)\x20block','sayNumber','number','Enter\x20in\x20SAYPHONETIC\x20(%s)\x20block','sendMail','Enter\x20in\x20SENDMAIL\x20(%s)\x20block','account_id','getMailAccount','Smtp','\x22%s\x22\x20<%s>','email','bcc','subject','service','host','port','secure','auth','user','pass','template_id','Trying\x20SendMail\x20with\x20account\x20%s','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','sms_text','sendSMS\x20message','Sms\x20message\x20added\x20to\x20outgoing\x20process','set','Enter\x20in\x20SET\x20(%s)\x20block','no\x20variable\x20selected','variable_value','start','Enter\x20in\x20START\x20(%s)\x20block','START\x20CALLY\x20SQUARE','yes','Answer','subproject','project_id','no\x20subproject\x20selected','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','sh\x20command:\x20%s\x20result\x20on\x20variable:\x20%s','sh\x20command:\x20%s\x20result\x20no\x20stored','command','tts','Enter\x20in\x20GOOGLETTS\x20(%s)\x20block','Trying\x20Google\x20TTS\x20%s','Google\x20TTS\x20%s\x20file\x20created','Google\x20TTS\x20is\x20unreachable','unpause','Enter\x20in\x20UNPAUSE\x20(%s)\x20block','voicemail','Enter\x20in\x20VOICEMAIL\x20(%s)\x20block','VOICEMAIL','mailbox','vswitch','replaceAll','join','exports','path','util','shelljs','odbc','randomstring','moment','mustache','../../config/logger','agi','../../config/environment','./scripts','/var/opt/motion2/server/files','getdigits','getsecretdigits','channel','rpc','mailRpc','prototype','getVariable','getVariableById','name','catch','getVoiceQueue','getVoiceQueueById','then','getSquareProjectById','getSquareOdbc','getSquareOdbcById','dsn','getUserById','getTrunk','getTrunkById','getSound','getSoundById','getSoundPath','getMailAccountById','sendMailMessage','getIntervals','getIntervalById','IntervalId','interval','map','getQueryOdbc','open','error','Error\x20getting\x20ODBC\x20connection\x20%s','info','query','Query\x20executed\x20correctly\x20%s','close','Error\x20closing\x20connection\x20to\x20odbc\x20%s','getSmsAccount','createSmsMessage','createSquareDetailsReport','uniqueid','label','agicommand','arg_1','callerid','context','extension','priority','accountcode','dnid','createSquareMessage','createCmContact','isEmpty','isNil','random','lastName','phone','list_id','callback','Callback\x20scheduled\x20at\x20','scheduledAt','callback_priority','getPause','agentPause','agent','agentUnpause','agentLogout','format','LOCAL','agentLogin','shellCommand','exec','trim','googleTTS','text','google_tts_language','googleDialogflow','key','dialogflow_language','sestekNDA','ispeechTTS','en-US','speed','ispeechASR','isConfigured','model','awsPolly','aws_access_key_id','aws_polly_region','aws_polly_voice','Amy','aws_text_type','awsLex','aws_secret_access_key','aws_bot_name','googleASR','tildeASR','appid','appsecret','uri','clear','includes','clone','isString','replaceAllVariables','split','length','extra','toString','getAndSetVariable','result','The\x20\x22%s\x22\x20variable\x20value\x20is:\x20%s','setVariable','maxRetry','sync','Enter\x20in\x20AGI\x20(%s)\x20block','args','Enter\x20in\x20ANSWER\x20(%s)\x20block','timeout','Wait\x20%s\x20seconds\x20before\x20answer','wait','answer','Enter\x20in\x20CALLBACK\x20(%s)\x20block','no\x20list\x20selected','delay','add','minutes','CALLBACK\x20added\x20phone:\x20%s\x20on\x20list:\x20%s\x20at\x20%s','application','noop','Executed\x20command\x20%s\x20%s','options','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','grammar','no\x20grammar\x20configured','MRCPRecog','RECOG_CONFIDENCE()','LUMENVOX_ASR_CONFIDENCE','RECOG_INPUT()','RECOG_INSTANCE()','sestekasr','Enter\x20in\x20SESTEKASR\x20(%s)\x20block','SESTEK_ASR_CONFIDENCE','SESTEK_ASR_TRANSCRIPT','SESTEK_ASR_INSTANCE','Executed\x20command\x20MRCPRecog\x20%s','database','Enter\x20in\x20DATABASE\x20(%s)\x20block','odbc_id','no\x20database\x20selected','no\x20odbc\x20database\x20found','no\x20query\x20configured','replace','query:\x20%s','variable_id','no\x20variable\x20selected\x20for\x20the\x20result','forEach','keys','%s[%s][%s]','debug','Enter\x20in\x20DIAL\x20(%s)\x20block','sip_id','no\x20user\x20selected','getUser','no\x20user\x20found','DIAL','SIP/%s','opts','Executed\x20command\x20%s','dialogflow','Enter\x20in\x20DIALOGFLOW\x20(%s)\x20block','bot','Trying\x20Dialogflow:\x20%s','hasOwnProperty','DIALOGFLOW_%s','toUpperCase','speech','Dialogflow\x20Result\x20%s','Dialogflow\x20is\x20unreachable'];(function(_0x1ea1b5,_0x1c7537){var _0x4b385a=function(_0x3e2f13){while(--_0x3e2f13){_0x1ea1b5['push'](_0x1ea1b5['shift']());}};_0x4b385a(++_0x1c7537);}(_0xf786,0xd0));var _0x6f78=function(_0x5d4660,_0x1e96e0){_0x5d4660=_0x5d4660-0x0;var _0x1e33dc=_0xf786[_0x5d4660];return _0x1e33dc;};'use strict';var fs=require('fs');var path=require(_0x6f78('0x0'));var util=require(_0x6f78('0x1'));var _=require('lodash');var sh=require(_0x6f78('0x2'));var odbc=require(_0x6f78('0x3'))();var rs=require(_0x6f78('0x4'));var moment=require(_0x6f78('0x5'));var Mustache=require(_0x6f78('0x6'));var logger=require(_0x6f78('0x7'))(_0x6f78('0x8'));var config=require(_0x6f78('0x9'));var scripts=require(_0x6f78('0xa'));var FILES_PATH=_0x6f78('0xb');var verticesWithRetry=['menu',_0x6f78('0xc'),_0x6f78('0xd')];var AGIVertices=function(_0x4662ce,_0x25e000,_0x452a24){this[_0x6f78('0xe')]=_0x4662ce;this[_0x6f78('0xf')]=_0x25e000;this[_0x6f78('0x10')]=_0x452a24;};AGIVertices[_0x6f78('0x11')][_0x6f78('0x12')]=function(_0x454758,_0x20b8d4){this['rpc'][_0x6f78('0x13')](_0x454758)['then'](function(_0x55c3ef){_0x20b8d4(null,_0x55c3ef?_0x55c3ef[_0x6f78('0x14')]:![]);})[_0x6f78('0x15')](function(_0x18043b){_0x20b8d4(_0x18043b);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x16')]=function(_0x23f074,_0xa918f4){this['rpc'][_0x6f78('0x17')](_0x23f074)[_0x6f78('0x18')](function(_0x92c411){_0xa918f4(null,_0x92c411?_0x92c411['name']:![]);})[_0x6f78('0x15')](function(_0x269d31){_0xa918f4(_0x269d31);});};AGIVertices[_0x6f78('0x11')]['getSquareProject']=function(_0x17366d,_0x3f927d){this[_0x6f78('0xf')][_0x6f78('0x19')](_0x17366d)[_0x6f78('0x18')](function(_0x3da276){_0x3f927d(null,_0x3da276?_0x3da276[_0x6f78('0x14')]:![]);})[_0x6f78('0x15')](function(_0x269695){_0x3f927d(_0x269695);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x1a')]=function(_0x1c1338,_0x1215a3){this[_0x6f78('0xf')][_0x6f78('0x1b')](_0x1c1338)[_0x6f78('0x18')](function(_0x5391a0){_0x1215a3(null,_0x5391a0?_0x5391a0[_0x6f78('0x1c')]:![]);})[_0x6f78('0x15')](function(_0x5ba4a1){_0x1215a3(_0x5ba4a1);});};AGIVertices['prototype']['getUser']=function(_0x4fce37,_0x15dbe7){this['rpc'][_0x6f78('0x1d')](_0x4fce37)[_0x6f78('0x18')](function(_0x3651ce){_0x15dbe7(null,_0x3651ce?_0x3651ce[_0x6f78('0x14')]:![]);})['catch'](function(_0x502f0a){_0x15dbe7(_0x502f0a);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x1e')]=function(_0x1577d0,_0x479494){this['rpc'][_0x6f78('0x1f')](_0x1577d0)['then'](function(_0x6cc47f){_0x479494(null,_0x6cc47f?_0x6cc47f[_0x6f78('0x14')]:![]);})[_0x6f78('0x15')](function(_0x311699){_0x479494(_0x311699);});};AGIVertices['prototype'][_0x6f78('0x20')]=function(_0x35e1d4,_0x1d95fb){var _0x5f3c9d=this;this['rpc'][_0x6f78('0x21')](_0x35e1d4)[_0x6f78('0x18')](function(_0x51cfd6){_0x1d95fb(null,_0x51cfd6?_0x5f3c9d[_0x6f78('0x22')](_0x51cfd6['save_name']):![]);})['catch'](function(_0x505c01){_0x1d95fb(_0x505c01);});};AGIVertices['prototype']['getMailAccount']=function(_0x5c4847,_0x459614){this[_0x6f78('0xf')][_0x6f78('0x23')](_0x5c4847)['then'](function(_0x52f9a9){_0x459614(null,_0x52f9a9?_0x52f9a9:![]);})[_0x6f78('0x15')](function(_0x2f32ee){_0x459614(_0x2f32ee);});};AGIVertices['prototype'][_0x6f78('0x24')]=function(_0x4091b9,_0x4204bd,_0x55c7dd){this['mailRpc']['sendMailMessage'](_0x4091b9,_0x4204bd)[_0x6f78('0x18')](function(){_0x55c7dd(null);})[_0x6f78('0x15')](function(_0x10e5fe){_0x55c7dd(_0x10e5fe);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x25')]=function(_0x46a584,_0x1e508a){this[_0x6f78('0xf')][_0x6f78('0x26')](_0x46a584)[_0x6f78('0x18')](function(_0xcfa4c9){if(_0xcfa4c9){if(_0xcfa4c9[_0x6f78('0x27')]){_0x1e508a(null,[_0xcfa4c9[_0x6f78('0x28')]]);}else{_0x1e508a(null,_[_0x6f78('0x29')](_0xcfa4c9['Intervals'],_0x6f78('0x28')));}}else{_0x1e508a(null,![]);}})[_0x6f78('0x15')](function(_0x3fda01){_0x1e508a(_0x3fda01);});};AGIVertices['prototype'][_0x6f78('0x22')]=function(_0x4e5455){return util['format']('%s/sounds/converted/%s',FILES_PATH,_0x4e5455);};AGIVertices[_0x6f78('0x11')][_0x6f78('0x2a')]=function(_0x2ef266,_0x4c71c7,_0x4bfc95){odbc[_0x6f78('0x2b')](_0x2ef266,function(_0x10c2c2){if(_0x10c2c2){logger[_0x6f78('0x2c')](_0x6f78('0x2d'),_0x10c2c2);_0x4bfc95(_0x10c2c2);}else{logger[_0x6f78('0x2e')]('ODBC\x20connection\x20successfully');odbc[_0x6f78('0x2f')](_0x4c71c7,function(_0xd868fd,_0x2a5a6e){if(_0xd868fd){logger[_0x6f78('0x2e')]('Error\x20executing\x20query\x20%s',_0x4c71c7);_0x4bfc95(_0xd868fd);}else{logger[_0x6f78('0x2e')](_0x6f78('0x30'),_0x4c71c7);odbc[_0x6f78('0x31')](function(_0x57cdf6){if(_0x57cdf6){logger[_0x6f78('0x2c')](_0x6f78('0x32'),_0x57cdf6);}_0x4bfc95(null,_0x2a5a6e);});}});}});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x33')]=function(_0x23c050,_0x36cfa2){this[_0x6f78('0xf')]['getSmsAccountById'](_0x23c050)['then'](function(_0x1d737a){_0x36cfa2(null,_0x1d737a?_0x1d737a:![]);})[_0x6f78('0x15')](function(_0x57ea86){_0x36cfa2(_0x57ea86);});};AGIVertices['prototype']['createSmsMessage']=function(_0x1a12d6,_0x20b68c){this[_0x6f78('0xf')][_0x6f78('0x34')](_0x1a12d6)[_0x6f78('0x18')](function(_0x12f5b9){_0x20b68c(null,_0x12f5b9);})[_0x6f78('0x15')](function(_0x3b4077){_0x20b68c(_0x3b4077);});};AGIVertices['prototype'][_0x6f78('0x35')]=function(_0x69811f,_0x4193d1,_0x1ef98d){this[_0x6f78('0xf')]['createSquareDetailsReport']({'uniqueid':this[_0x6f78('0xe')][_0x6f78('0x36')],'node':_0x69811f[_0x6f78('0x37')],'application':_0x69811f[_0x6f78('0x38')],'data':_0x4193d1||null,'project_name':this['channel'][_0x6f78('0x39')],'callerid':this['channel'][_0x6f78('0x3a')]})[_0x6f78('0x18')](function(_0x48eaf4){if(_0x1ef98d){_0x1ef98d(null,_0x48eaf4);}})[_0x6f78('0x15')](function(_0x37c36c){if(_0x1ef98d){_0x1ef98d(_0x37c36c);}});};AGIVertices[_0x6f78('0x11')]['createSquareRecording']=function(_0x1e4363,_0x24f987,_0x4ae9d5,_0x131c24){this[_0x6f78('0xf')]['createSquareRecording']({'uniqueid':this[_0x6f78('0xe')]['uniqueid'],'callerid':this['channel'][_0x6f78('0x3a')],'calleridname':this[_0x6f78('0xe')]['calleridname'],'context':this[_0x6f78('0xe')][_0x6f78('0x3b')],'extension':this[_0x6f78('0xe')][_0x6f78('0x3c')],'priority':this[_0x6f78('0xe')][_0x6f78('0x3d')],'accountcode':this['channel'][_0x6f78('0x3e')],'dnid':this['channel'][_0x6f78('0x3f')],'projectName':this[_0x6f78('0xe')]['arg_1'],'saveName':_0x24f987,'filename':_0x1e4363['file']||_0x24f987,'savePath':_0x4ae9d5})['then'](function(_0x44209a){_0x131c24(null,_0x44209a);})[_0x6f78('0x15')](function(_0x222a20){_0x131c24(_0x222a20);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x40')]=function(_0x3423ee,_0x4f832c,_0x1e9a0d){this[_0x6f78('0xf')][_0x6f78('0x40')]({'uniqueid':this['channel'][_0x6f78('0x36')],'body':_0x3423ee,'direction':_0x4f832c})[_0x6f78('0x18')](function(_0x11ce10){if(_0x1e9a0d){_0x1e9a0d(null,_0x11ce10);}})['catch'](function(_0x5d9ab){if(_0x1e9a0d){_0x1e9a0d(_0x5d9ab);}});};AGIVertices[_0x6f78('0x11')]['createCmContact']=function(_0x210fb8,_0x2b6cb8){this[_0x6f78('0xf')][_0x6f78('0x41')]({'firstName':_[_0x6f78('0x42')](_0x210fb8[_0x6f78('0x14')])||_[_0x6f78('0x43')](_0x210fb8[_0x6f78('0x14')])?'callback_'+Math[_0x6f78('0x44')]():_0x210fb8['name'],'lastName':_[_0x6f78('0x42')](_0x210fb8['lastName'])||_[_0x6f78('0x43')](_0x210fb8[_0x6f78('0x45')])?null:_0x210fb8['lastName'],'phone':_0x210fb8[_0x6f78('0x46')],'ListId':_0x210fb8[_0x6f78('0x47')],'scheduledAt':_0x210fb8['scheduledAt'],'callbackUniqueid':this[_0x6f78('0xe')][_0x6f78('0x36')],'tags':_0x6f78('0x48'),'description':_0x6f78('0x49')+_0x210fb8[_0x6f78('0x4a')]['toString'](),'priority':_0x210fb8[_0x6f78('0x4b')]})[_0x6f78('0x18')](function(_0x3f36c2){_0x2b6cb8(null,_0x3f36c2);})[_0x6f78('0x15')](function(_0x574a80){_0x2b6cb8(_0x574a80);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x4c')]=function(_0x541287,_0x253237){this[_0x6f78('0xf')]['getPauseById'](_0x541287)[_0x6f78('0x18')](function(_0x5a3fda){_0x253237(null,_0x5a3fda?_0x5a3fda['name']:![]);})[_0x6f78('0x15')](function(_0x32c2e7){_0x253237(_0x32c2e7);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x4d')]=function(_0x3432b4,_0x443ccf,_0x4e91c2){var _0x3cfdc1={'role':_0x6f78('0x4e')};_0x3cfdc1[_0x3432b4]=this[_0x6f78('0xe')][_0x6f78('0x3a')];this[_0x6f78('0xf')]['agentPause'](_0x3cfdc1,_0x443ccf,this[_0x6f78('0xe')]['uniqueid'])[_0x6f78('0x18')](function(_0x505217){_0x4e91c2(null,_['isNil'](_0x505217)?![]:!![]);})[_0x6f78('0x15')](function(_0x47243e){logger[_0x6f78('0x2c')](_0x47243e);_0x4e91c2(null,![]);});};AGIVertices[_0x6f78('0x11')]['agentUnpause']=function(_0x4e54dc,_0x5813c2){var _0xf5c84e={'role':_0x6f78('0x4e')};_0xf5c84e[_0x4e54dc]=this[_0x6f78('0xe')][_0x6f78('0x3a')];this[_0x6f78('0xf')][_0x6f78('0x4f')](_0xf5c84e)['then'](function(_0x95f0c5){_0x5813c2(null,_[_0x6f78('0x43')](_0x95f0c5)?![]:!![]);})[_0x6f78('0x15')](function(_0x1d27fc){logger['error'](_0x1d27fc);_0x5813c2(null,![]);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x50')]=function(_0x2e5d52,_0x12e76a){var _0x459036={'role':_0x6f78('0x4e')};_0x459036[_0x2e5d52]=this[_0x6f78('0xe')][_0x6f78('0x3a')];this[_0x6f78('0xf')][_0x6f78('0x50')](_0x459036)[_0x6f78('0x18')](function(_0x214ef6){_0x12e76a(null,_[_0x6f78('0x43')](_0x214ef6)?![]:!![]);})[_0x6f78('0x15')](function(_0x14e56a){logger['error'](_0x14e56a);_0x12e76a(null,![]);});};AGIVertices[_0x6f78('0x11')]['agentLogin']=function(_0x5af4f0,_0x2b28c8){var _0x21c1bf={'role':_0x6f78('0x4e')};_0x21c1bf[_0x5af4f0]=this[_0x6f78('0xe')][_0x6f78('0x3a')];var _0x3fa154=_0x5af4f0!='internal'?util[_0x6f78('0x51')]('%s/%s@from-sip/n',_0x6f78('0x52'),this['channel'][_0x6f78('0x3a')]):undefined;this[_0x6f78('0xf')][_0x6f78('0x53')](_0x21c1bf,_0x3fa154)[_0x6f78('0x18')](function(_0x22d8a9){_0x2b28c8(null,_['isNil'](_0x22d8a9)?![]:!![]);})[_0x6f78('0x15')](function(_0xa03416){logger[_0x6f78('0x2c')](_0xa03416);_0x2b28c8(null,![]);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x54')]=function(_0x8824e7,_0x53f1e3){sh[_0x6f78('0x55')](_[_0x6f78('0x56')](_0x8824e7),function(_0xd27091,_0x4db483){var _0x3d4a50=_0x4db483['replace'](/(\r\n|\n|\r)/gm,'');_0x53f1e3(null,_0x3d4a50);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x57')]=function(_0x10cbf4,_0x9ed4b7){scripts[_0x6f78('0x57')](_0x10cbf4[_0x6f78('0x58')],_0x10cbf4[_0x6f78('0x59')]||'en',0x1)['then'](function(_0x17bbd7){_0x9ed4b7(null,_0x17bbd7);})[_0x6f78('0x15')](function(_0x2b7e56){_0x9ed4b7(_0x2b7e56);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x5a')]=function(_0x4093df,_0x59a73a){scripts[_0x6f78('0x5a')](this[_0x6f78('0xe')][_0x6f78('0x36')],_0x4093df[_0x6f78('0x5b')],_0x4093df[_0x6f78('0x58')],_0x4093df[_0x6f78('0x5c')]||'en')[_0x6f78('0x18')](function(_0x2b7ce4){_0x59a73a(null,_0x2b7ce4);})[_0x6f78('0x15')](function(_0x76a1d8){_0x59a73a(_0x76a1d8);});};AGIVertices[_0x6f78('0x11')]['sestekNDA']=function(_0x121934,_0x1ae1a6){scripts[_0x6f78('0x5d')](this[_0x6f78('0xe')],_0x121934)[_0x6f78('0x18')](function(_0x3510ee){_0x1ae1a6(null,_0x3510ee);})[_0x6f78('0x15')](function(_0x12fe11){_0x1ae1a6(_0x12fe11);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x5e')]=function(_0xb69bfc,_0x26de47){scripts['ispeechTTS'](_0xb69bfc[_0x6f78('0x5b')],_0xb69bfc['text'],_0xb69bfc['ispeech_tts_language']||_0x6f78('0x5f'),_0xb69bfc[_0x6f78('0x60')])[_0x6f78('0x18')](function(_0x24f03f){_0x26de47(null,_0x24f03f);})[_0x6f78('0x15')](function(_0x20ee9a){_0x26de47(_0x20ee9a);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x61')]=function(_0x319650,_0x113f4f,_0x3ed266){scripts[_0x6f78('0x61')](_0x113f4f,_0x319650[_0x6f78('0x5b')],_0x319650['ispeech_asr_language']||'en-US',this[_0x6f78('0x62')](_0x319650[_0x6f78('0x63')])?_0x319650['model']:undefined)[_0x6f78('0x18')](function(_0x291a7a){_0x3ed266(null,_0x291a7a);})[_0x6f78('0x15')](function(_0x15f8c0){_0x3ed266(_0x15f8c0);});};AGIVertices['prototype']['awsPolly']=function(_0x6404db,_0xcb8641){scripts[_0x6f78('0x64')](_0x6404db[_0x6f78('0x65')],_0x6404db['aws_secret_access_key'],_0x6404db[_0x6f78('0x66')],_0x6404db[_0x6f78('0x67')]||_0x6f78('0x68'),_0x6404db[_0x6f78('0x58')],_0x6404db[_0x6f78('0x69')]||_0x6f78('0x58'))[_0x6f78('0x18')](function(_0x1ee2ea){_0xcb8641(null,_0x1ee2ea);})[_0x6f78('0x15')](function(_0x522a7e){_0xcb8641(_0x522a7e);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x6a')]=function(_0x45d878,_0x372d7b){scripts['awsLex'](this[_0x6f78('0xe')]['uniqueid'],_0x45d878['aws_access_key_id'],_0x45d878[_0x6f78('0x6b')],_0x45d878['aws_lex_region'],_0x45d878[_0x6f78('0x58')],_0x45d878[_0x6f78('0x6c')])[_0x6f78('0x18')](function(_0x114d54){_0x372d7b(null,_0x114d54);})[_0x6f78('0x15')](function(_0x7f3e34){_0x372d7b(_0x7f3e34);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x6d')]=function(_0x5eff13,_0xbf3e12,_0x2a461a){scripts[_0x6f78('0x6d')](_0xbf3e12,_0x5eff13[_0x6f78('0x5b')],_0x5eff13['google_asr_language']||_0x6f78('0x5f'))[_0x6f78('0x18')](function(_0x3ca357){_0x2a461a(null,_0x3ca357);})[_0x6f78('0x15')](function(_0x4b8042){_0x2a461a(_0x4b8042);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x6e')]=function(_0x4885ff,_0x42548d,_0x5363e2){scripts[_0x6f78('0x6e')](_0x42548d,_0x4885ff[_0x6f78('0x6f')],_0x4885ff[_0x6f78('0x70')],_0x4885ff[_0x6f78('0x71')])[_0x6f78('0x18')](function(_0x46fea4){_0x5363e2(null,_0x46fea4);})['catch'](function(_0x3ef1b6){_0x5363e2(_0x3ef1b6);});};AGIVertices[_0x6f78('0x11')][_0x6f78('0x72')]=function(_0x1f7a37){var _0x22fb82=_[_0x6f78('0x73')](verticesWithRetry,_0x1f7a37['agicommand'])?_0x1f7a37:_[_0x6f78('0x74')](_0x1f7a37);for(var _0xe42ade in _0x22fb82){if(_0x22fb82['hasOwnProperty'](_0xe42ade)){if(_0x22fb82[_0xe42ade]&&_[_0x6f78('0x75')](_0x22fb82[_0xe42ade])){_0x22fb82[_0xe42ade]=this[_0x6f78('0x76')](_0x22fb82[_0xe42ade]);}}}return _0x22fb82;};AGIVertices['prototype']['replaceAllVariables']=function(_0x370e99){var _0x55c4f5=_0x370e99['split']('{');for(var _0x44e7af=0x1;_0x44e7af<_0x55c4f5['length'];_0x44e7af+=0x1){var _0x2b9649=_0x55c4f5[_0x44e7af][_0x6f78('0x77')]('}');if(_0x2b9649[_0x6f78('0x78')]>0x1){_0x370e99=_0x370e99['replaceAll']('{'+_0x2b9649[0x0]+'}',this[_0x6f78('0xe')][_0x6f78('0x12')](_0x2b9649[0x0])[_0x6f78('0x79')]||_0x2b9649[0x0]);}}if(_0x55c4f5['length']===0x1){return _0x370e99[_0x6f78('0x7a')]();}return this[_0x6f78('0x76')](_0x370e99);};AGIVertices[_0x6f78('0x11')][_0x6f78('0x7b')]=function(_0x40f839,_0x419c26){var _0x56b44c=this['channel'][_0x6f78('0x12')](_0x40f839);if(_0x56b44c[_0x6f78('0x7c')]===-0x1){return _0x56b44c;}logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x7d'),_0x419c26,_0x56b44c[_0x6f78('0x79')]));return this[_0x6f78('0xe')][_0x6f78('0x7e')](_0x419c26,_0x56b44c[_0x6f78('0x79')]);};AGIVertices[_0x6f78('0x11')][_0x6f78('0x62')]=function(_0x15caf8){return _0x15caf8&&_0x15caf8!=='0'&&_0x15caf8!=='-1'&&_0x15caf8!=='';};AGIVertices['prototype'][_0x6f78('0x7f')]=function(_0xf8252b){this['createSquareDetailsReport'][_0x6f78('0x80')](this,_0xf8252b,'-');_0xf8252b['retry']=_0xf8252b[_0x6f78('0x7f')];return{'code':0xc8,'result':'-'};};AGIVertices[_0x6f78('0x11')]['agi']=function(_0x453994){logger['info'](util['format'](_0x6f78('0x81'),_0x453994[_0x6f78('0x37')]));return this[_0x6f78('0xe')][_0x6f78('0x8')]([_0x453994['command'],_0x453994[_0x6f78('0x82')]]);};AGIVertices[_0x6f78('0x11')]['answer']=function(_0x279ffb){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x83'),_0x279ffb[_0x6f78('0x37')]));if(this[_0x6f78('0x62')](_0x279ffb[_0x6f78('0x84')])){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x85'),_0x279ffb['timeout']));var _0x23839d=this[_0x6f78('0xe')][_0x6f78('0x86')](_0x279ffb[_0x6f78('0x84')]);if(_0x23839d[_0x6f78('0x7c')]===-0x1){return _0x23839d;}}return this['channel'][_0x6f78('0x87')]();};AGIVertices[_0x6f78('0x11')][_0x6f78('0x48')]=function(_0x14d344){logger[_0x6f78('0x2e')](util['format'](_0x6f78('0x88'),_0x14d344[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x14d344[_0x6f78('0x47')])){return this['channel'][_0x6f78('0x2c')](_0x14d344,_0x6f78('0x89'));}_0x14d344[_0x6f78('0x4a')]=moment();if(this[_0x6f78('0x62')](_0x14d344[_0x6f78('0x8a')])){_0x14d344[_0x6f78('0x4a')]=moment()[_0x6f78('0x8b')](_0x14d344[_0x6f78('0x8a')],_0x6f78('0x8c'));}if(!this[_0x6f78('0x62')](_0x14d344[_0x6f78('0x4b')])){_0x14d344[_0x6f78('0x4b')]=0x2;}this[_0x6f78('0x41')]['sync'](this,_0x14d344);return this[_0x6f78('0xe')]['noop'](util[_0x6f78('0x51')](_0x6f78('0x8d'),_0x14d344['phone'],_0x14d344[_0x6f78('0x47')],_0x14d344['scheduledAt']));};AGIVertices[_0x6f78('0x11')]['custom_app']=function(_0x29f53e){logger[_0x6f78('0x2e')](util['format']('Enter\x20in\x20CUSTOM\x20APP\x20(%s)\x20block',_0x29f53e[_0x6f78('0x37')]));var _0x5c35d2=this['channel']['exec'](_0x29f53e[_0x6f78('0x8e')],_0x29f53e['options']);if(_0x5c35d2[_0x6f78('0x7c')]===-0x1){return _0x5c35d2;}return this['channel'][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x90'),_0x29f53e[_0x6f78('0x8e')],_0x29f53e[_0x6f78('0x91')]));};AGIVertices['prototype']['lumenvoxtts']=function(_0x449228){logger[_0x6f78('0x2e')](util['format'](_0x6f78('0x92'),_0x449228['label']));if(!this[_0x6f78('0x62')](_0x449228[_0x6f78('0x58')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x93'));}var _0xca5a28='\x22'+_0x449228[_0x6f78('0x58')]+'\x22';if(this[_0x6f78('0x62')](_0x449228['options'])){_0xca5a28+=','+_0x449228[_0x6f78('0x91')];}var _0x1ff4f6=this[_0x6f78('0xe')][_0x6f78('0x55')](_0x6f78('0x94'),_0xca5a28);if(_0x1ff4f6['result']===-0x1){return _0x1ff4f6;}return this['channel'][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x95'),_0xca5a28));};AGIVertices[_0x6f78('0x11')][_0x6f78('0x96')]=function(_0xf348be){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x97'),_0xf348be[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0xf348be[_0x6f78('0x58')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x93'));}var _0x34e18a='\x22'+_0xf348be[_0x6f78('0x58')]+'\x22';if(this[_0x6f78('0x62')](_0xf348be['options'])){_0x34e18a+=','+_0xf348be[_0x6f78('0x91')];}var _0x20b01c=this[_0x6f78('0xe')][_0x6f78('0x55')](_0x6f78('0x94'),_0x34e18a);if(_0x20b01c[_0x6f78('0x7c')]===-0x1){return _0x20b01c;}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('Executed\x20command\x20MRCPSynth\x20%s',_0x34e18a));};AGIVertices[_0x6f78('0x11')][_0x6f78('0x98')]=function(_0x58079){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x99'),_0x58079[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x58079[_0x6f78('0x9a')])){return this[_0x6f78('0xe')]['noop'](_0x6f78('0x9b'));}var _0x47d56d=_0x58079[_0x6f78('0x9a')];if(this[_0x6f78('0x62')](_0x58079[_0x6f78('0x91')])){_0x47d56d+=','+_0x58079['options'];}var _0x4eade1=this[_0x6f78('0xe')][_0x6f78('0x55')](_0x6f78('0x9c'),_0x47d56d);if(_0x4eade1[_0x6f78('0x7c')]===-0x1){return _0x4eade1;}var _0x33fe4b=this[_0x6f78('0x7b')](_0x6f78('0x9d'),_0x6f78('0x9e'));if(_0x33fe4b[_0x6f78('0x7c')]===-0x1){return _0x33fe4b;}var _0x571273=this[_0x6f78('0x7b')](_0x6f78('0x9f'),'LUMENVOX_ASR_TRANSCRIPT');if(_0x571273['result']===-0x1){return _0x571273;}var _0x3a64b8=this['getAndSetVariable'](_0x6f78('0xa0'),'LUMENVOX_ASR_INSTANCE');if(_0x3a64b8[_0x6f78('0x7c')]===-0x1){return _0x3a64b8;}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('Executed\x20command\x20MRCPRecog\x20%s',_0x47d56d));};AGIVertices[_0x6f78('0x11')][_0x6f78('0xa1')]=function(_0x5a34f2){logger[_0x6f78('0x2e')](util['format'](_0x6f78('0xa2'),_0x5a34f2[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x5a34f2['grammar'])){return this['channel'][_0x6f78('0x8f')](_0x6f78('0x9b'));}var _0x184ffa=_0x5a34f2[_0x6f78('0x9a')];if(this['isConfigured'](_0x5a34f2[_0x6f78('0x91')])){_0x184ffa+=','+_0x5a34f2['options'];}var _0x593bb0=this[_0x6f78('0xe')][_0x6f78('0x55')](_0x6f78('0x9c'),_0x184ffa);if(_0x593bb0[_0x6f78('0x7c')]===-0x1){return _0x593bb0;}var _0x3ac162=this['getAndSetVariable'](_0x6f78('0x9d'),_0x6f78('0xa3'));if(_0x3ac162[_0x6f78('0x7c')]===-0x1){return _0x3ac162;}var _0x593433=this[_0x6f78('0x7b')](_0x6f78('0x9f'),_0x6f78('0xa4'));if(_0x593433[_0x6f78('0x7c')]===-0x1){return _0x593433;}var _0x53516e=this[_0x6f78('0x7b')](_0x6f78('0xa0'),_0x6f78('0xa5'));if(_0x53516e['result']===-0x1){return _0x53516e;}return this[_0x6f78('0xe')]['noop'](util[_0x6f78('0x51')](_0x6f78('0xa6'),_0x184ffa));};AGIVertices[_0x6f78('0x11')][_0x6f78('0xa7')]=function(_0x438fc2){logger[_0x6f78('0x2e')](util['format'](_0x6f78('0xa8'),_0x438fc2['label']));if(!this[_0x6f78('0x62')](_0x438fc2[_0x6f78('0xa9')])){return this[_0x6f78('0xe')]['error'](_0x438fc2,_0x6f78('0xaa'));}var _0x55888e=this[_0x6f78('0x1a')][_0x6f78('0x80')](this,_0x438fc2[_0x6f78('0xa9')]);if(!_0x55888e){return this[_0x6f78('0xe')]['error'](_0x438fc2,_0x6f78('0xab'));}if(!this['isConfigured'](_0x438fc2[_0x6f78('0x2f')])){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x438fc2,_0x6f78('0xac'));}var _0x19e078=_0x438fc2[_0x6f78('0x2f')][_0x6f78('0xad')](/(\r\n|\n|\r)/gm,'\x20');this[_0x6f78('0xe')]['noop'](util[_0x6f78('0x51')](_0x6f78('0xae'),_0x19e078));var _0x5a1cb7=this[_0x6f78('0x2a')]['sync'](this,_0x55888e,_0x19e078);this['createSquareDetailsReport'][_0x6f78('0x80')](this,_0x438fc2,_0x19e078);if(!this[_0x6f78('0x62')](_0x438fc2[_0x6f78('0xaf')])){return this['channel'][_0x6f78('0x8f')](_0x6f78('0xb0'));}var _0x59755c=this[_0x6f78('0x12')]['sync'](this,_0x438fc2[_0x6f78('0xaf')]);if(!_0x59755c){return this['channel'][_0x6f78('0x2c')](_0x438fc2,'no\x20variable\x20found');}var _0x1a3582=this;_0x5a1cb7[_0x6f78('0xb1')](function(_0xf84a42,_0x41894f){Object[_0x6f78('0xb2')](_0xf84a42)[_0x6f78('0xb1')](function(_0x21bfa3){_0x1a3582[_0x6f78('0xe')][_0x6f78('0x7e')](util[_0x6f78('0x51')](_0x6f78('0xb3'),_0x59755c,_0x41894f,_0x21bfa3),_0xf84a42[_0x21bfa3]);});});this[_0x6f78('0xe')][_0x6f78('0x7e')](util['format']('%s_ROWS_COUNT',_0x59755c),_0x5a1cb7[_0x6f78('0x78')]);return this['channel'][_0x6f78('0x8f')](util[_0x6f78('0x51')]('variable\x20%s\x20set',_0x59755c));};AGIVertices[_0x6f78('0x11')]['dial']=function(_0x396989){logger[_0x6f78('0xb4')](util['format'](_0x6f78('0xb5'),_0x396989[_0x6f78('0x37')]));if(!this['isConfigured'](_0x396989[_0x6f78('0xb6')])){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x396989,_0x6f78('0xb7'));}var _0x1f514d=this[_0x6f78('0xb8')][_0x6f78('0x80')](this,_0x396989['sip_id']);if(!_0x1f514d){return this[_0x6f78('0xe')]['error'](_0x396989,_0x6f78('0xb9'));}var _0x25f8c3=this[_0x6f78('0xe')]['exec'](_0x6f78('0xba'),[util['format'](_0x6f78('0xbb'),_0x1f514d),_0x396989[_0x6f78('0x84')],_0x396989[_0x6f78('0xbc')],_0x396989['url']]);if(_0x25f8c3[_0x6f78('0x7c')]===-0x1){return _0x25f8c3;}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0xbd'),_0x6f78('0xba')));};AGIVertices[_0x6f78('0x11')][_0x6f78('0xbe')]=function(_0x23968f){logger['info'](util[_0x6f78('0x51')](_0x6f78('0xbf'),_0x23968f[_0x6f78('0x37')]));if(!this['isConfigured'](_0x23968f[_0x6f78('0x5b')])){return this[_0x6f78('0xe')]['noop']('no\x20key\x20configured');}if(!this[_0x6f78('0x62')](_0x23968f[_0x6f78('0x58')])){return this[_0x6f78('0xe')]['noop']('no\x20text\x20configured');}this[_0x6f78('0xe')][_0x6f78('0xc0')]=!![];this[_0x6f78('0x35')](_0x23968f);this[_0x6f78('0x40')](_0x23968f[_0x6f78('0x58')],'in');this['channel'][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0xc1'),_0x23968f[_0x6f78('0x58')]));var _0x480ee6=this[_0x6f78('0x5a')][_0x6f78('0x80')](this,_0x23968f);if(_0x480ee6){for(var _0x1ac2c1 in _0x480ee6){if(_0x480ee6[_0x6f78('0xc2')](_0x1ac2c1)){this[_0x6f78('0xe')][_0x6f78('0x7e')](util['format'](_0x6f78('0xc3'),_0x1ac2c1[_0x6f78('0xc4')]()),_0x480ee6[_0x1ac2c1]);}}this[_0x6f78('0x40')](_0x480ee6[_0x6f78('0xc5')],'out');return this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0xc6'),_0x480ee6[_0x6f78('0xc5')]));}return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x23968f,_0x6f78('0xc7'));};AGIVertices[_0x6f78('0x11')][_0x6f78('0xc8')]=function(_0x38e351){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')]('Enter\x20in\x20SESTEKNDA\x20(%s)\x20block',_0x38e351[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x38e351['ndauth_url'])){return this[_0x6f78('0xe')]['noop'](_0x6f78('0xc9'));}if(!this['isConfigured'](_0x38e351[_0x6f78('0xca')])){return this[_0x6f78('0xe')]['noop'](_0x6f78('0xcb'));}if(!this[_0x6f78('0x62')](_0x38e351['password'])){return this[_0x6f78('0xe')][_0x6f78('0x8f')]('no\x20password\x20configured');}if(!this[_0x6f78('0x62')](_0x38e351[_0x6f78('0xcc')])){return this['channel']['noop']('no\x20text\x20configured');}this['channel'][_0x6f78('0xc0')]=!![];this[_0x6f78('0x35')](_0x38e351);this[_0x6f78('0x40')](_0x38e351[_0x6f78('0x58')],'in');this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0xcd'),_0x38e351[_0x6f78('0x58')]));var _0x3b6d16=this[_0x6f78('0x5d')][_0x6f78('0x80')](this,_0x38e351);if(_0x3b6d16){for(var _0x1f8e00 in _0x3b6d16){if(_0x3b6d16[_0x6f78('0xc2')](_0x1f8e00)){this[_0x6f78('0xe')][_0x6f78('0x7e')](util[_0x6f78('0x51')](_0x6f78('0xce'),_0x1f8e00[_0x6f78('0xc4')]()),_0x3b6d16[_0x1f8e00]);}}this['createSquareMessage'](_0x3b6d16[_0x6f78('0xc5')],'out');if(_0x3b6d16[_0x6f78('0xcf')]){this[_0x6f78('0xe')]['noop'](util[_0x6f78('0x51')](_0x6f78('0xd0'),_0x3b6d16['audiofile']));var _0x5e793a=this['channel'][_0x6f78('0xd1')](_0x3b6d16['audiofile']);try{fs['unlink'](_0x3b6d16[_0x6f78('0xcf')]+_0x6f78('0xd2'));}catch(_0x4e2587){logger[_0x6f78('0x2c')](_0x4e2587);}return _0x5e793a;}else{return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('SestekNDA\x20Result\x20%s',_0x3b6d16[_0x6f78('0xc5')]));}}return this['channel'][_0x6f78('0x2c')](_0x38e351,_0x6f78('0xd3'));};AGIVertices['prototype']['end']=function(_0x38503a){logger[_0x6f78('0x2e')](util['format']('Enter\x20in\x20END\x20(%s)\x20block',_0x38503a[_0x6f78('0x37')]));return this['channel']['noop']('end');};AGIVertices[_0x6f78('0x11')]['ext_dial']=function(_0x122aeb){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0xd4'),_0x122aeb['label']));var _0x4e7f3c='';if(_0x122aeb[_0x6f78('0xd5')]){if(!this[_0x6f78('0x62')](_0x122aeb[_0x6f78('0xd5')])){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x122aeb,_0x6f78('0xd6'));}else{var _0x42a64f=parseInt(_0x122aeb[_0x6f78('0xd5')],0xa);if(isNaN(_0x42a64f)){_0x4e7f3c=_0x122aeb[_0x6f78('0xd5')];}else{_0x4e7f3c=this[_0x6f78('0x1e')][_0x6f78('0x80')](this,_0x122aeb[_0x6f78('0xd5')]);if(!_0x4e7f3c){return this['channel'][_0x6f78('0x2c')](_0x122aeb,'no\x20trunk\x20found');}}}}else if(_0x122aeb['trunk_name']){_0x4e7f3c=_0x122aeb[_0x6f78('0xd7')];}else{return this['channel']['error'](_0x122aeb,_0x6f78('0xd6'));}var _0x4b4d1a=this['channel'][_0x6f78('0x55')](_0x6f78('0xba'),[util[_0x6f78('0x51')]('SIP/%s/%s',_0x4e7f3c,_0x122aeb[_0x6f78('0x46')]),_0x122aeb['timeout'],_0x122aeb[_0x6f78('0xbc')],_0x122aeb[_0x6f78('0xd8')]]);if(_0x4b4d1a['result']===-0x1){return _0x4b4d1a;}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0xbd'),_0x6f78('0xba')));};AGIVertices[_0x6f78('0x11')][_0x6f78('0xd9')]=function(_0x212b33){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0xda'),_0x212b33[_0x6f78('0x37')]));return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0xd9'));};AGIVertices[_0x6f78('0x11')][_0x6f78('0xc')]=function(_0x585ffb){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0xdb'),_0x585ffb[_0x6f78('0x37')]));if(_0x585ffb['retry']===0x0){return this[_0x6f78('0x7f')](_0x585ffb);}_0x585ffb[_0x6f78('0xdc')]-=0x1;if(!this[_0x6f78('0x62')](_0x585ffb[_0x6f78('0xdd')])){return this['channel'][_0x6f78('0x2c')](_0x585ffb,_0x6f78('0xde'));}var _0xb8d6e2=this[_0x6f78('0x20')]['sync'](this,_0x585ffb[_0x6f78('0xdd')]);if(!_0xb8d6e2){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x585ffb,'no\x20file\x20audio\x20found');}if(!this[_0x6f78('0x62')](_0x585ffb[_0x6f78('0xaf')])){return this[_0x6f78('0xe')]['error'](_0x6f78('0xb0'));}var _0x4ecb81=this['channel']['getData'](_0xb8d6e2,_0x585ffb[_0x6f78('0xdf')],_0x585ffb['maxdigit']);var _0xeb86a4=_0x4ecb81[_0x6f78('0x7c')]?_0x4ecb81['result'][_0x6f78('0x7a')]():'';logger['info']('test',JSON[_0x6f78('0xe0')](_0x4ecb81));if(_0x4ecb81[_0x6f78('0x7c')]===-0x1){this[_0x6f78('0x35')]['sync'](this,_0x585ffb,_0xeb86a4);return _0x4ecb81;}else if(_0x4ecb81['extra']===_0x6f78('0x84')){_0x4ecb81[_0x6f78('0x7c')]=_0xeb86a4[_0x6f78('0x78')]>=parseInt(_0x585ffb[_0x6f78('0xe1')])?'x':'i';}else{_0x4ecb81[_0x6f78('0x7c')]=_0xeb86a4[_0x6f78('0x78')]>=parseInt(_0x585ffb[_0x6f78('0xe1')])&&_0xeb86a4[_0x6f78('0x78')]<=parseInt(_0x585ffb[_0x6f78('0xe2')])?'x':'i';}var _0x1300e2=this[_0x6f78('0x12')][_0x6f78('0x80')](this,_0x585ffb[_0x6f78('0xaf')]);if(!_0x1300e2){return this['channel'][_0x6f78('0x2c')](_0x585ffb,_0x6f78('0xe3'));}this['channel']['setVariable'](_0x1300e2,_0xeb86a4);if(this[_0x6f78('0x62')](_0x585ffb[_0x6f78('0xe4')])){var _0x519e79=parseInt(_0x585ffb[_0x6f78('0xe4')],0xa);var _0x3ebe02=rs[_0x6f78('0xe5')]({'charset':'*','length':_0x519e79});var _0x30b92b=_0xeb86a4[_0x6f78('0x78')];if(_0x30b92b>0x0){if(_0x30b92b>_0x519e79){this['createSquareDetailsReport'][_0x6f78('0x80')](this,_0x585ffb,_0x585ffb[_0x6f78('0xe6')]===_0x6f78('0xe7')?_0x3ebe02+_0xeb86a4[_0x6f78('0xe8')](_0x519e79):_0xeb86a4[_0x6f78('0xe8')](0x0,_0x30b92b-_0x519e79)+_0x3ebe02);}else{this['createSquareDetailsReport'][_0x6f78('0x80')](this,_0x585ffb,rs[_0x6f78('0xe5')]({'charset':'*','length':_0x30b92b}));}}else{this['createSquareDetailsReport'][_0x6f78('0x80')](this,_0x585ffb,'');}}else{this['createSquareDetailsReport'][_0x6f78('0x80')](this,_0x585ffb,_0xeb86a4);}return _0x4ecb81;};AGIVertices[_0x6f78('0x11')][_0x6f78('0xd')]=function(_0x1d63f3){logger[_0x6f78('0x2e')](util['format'](_0x6f78('0xe9'),_0x1d63f3[_0x6f78('0x37')]));return this[_0x6f78('0xc')](_0x1d63f3);};AGIVertices[_0x6f78('0x11')]['goal']=function(_0x5a1e70){logger['info'](util[_0x6f78('0x51')](_0x6f78('0xea'),_0x5a1e70[_0x6f78('0x37')]));this[_0x6f78('0x35')][_0x6f78('0x80')](this,_0x5a1e70,_0x5a1e70[_0x6f78('0xeb')]);return this['channel'][_0x6f78('0x8f')](util['format'](_0x6f78('0xec'),_0x5a1e70[_0x6f78('0xeb')]));};AGIVertices[_0x6f78('0x11')]['awspolly']=function(_0xdcf402){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0xed'),_0xdcf402[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0xdcf402['aws_access_key_id'])||!this[_0x6f78('0x62')](_0xdcf402['aws_secret_access_key'])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0xee'));}if(!this[_0x6f78('0x62')](_0xdcf402[_0x6f78('0x58')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')]('no\x20text\x20configured');}this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('Trying\x20aws\x20Polly\x20%s',_0xdcf402['text']));var _0x41af4e=this[_0x6f78('0x64')]['sync'](this,_0xdcf402);if(_0x41af4e){this[_0x6f78('0xe')]['noop'](util['format'](_0x6f78('0xef'),_0x41af4e));var _0x17844c=this['channel'][_0x6f78('0xd1')](_0x41af4e);try{fs['unlink'](_0x41af4e+_0x6f78('0xd2'));}catch(_0x49f635){logger[_0x6f78('0x2c')](_0x49f635);}return _0x17844c;}return this['channel'][_0x6f78('0x2c')](_0xdcf402,'aws\x20Polly\x20is\x20unreachable');};AGIVertices['prototype'][_0x6f78('0xf0')]=function(_0x7f1d89){logger['info'](util[_0x6f78('0x51')](_0x6f78('0xf1'),_0x7f1d89[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x7f1d89[_0x6f78('0x65')])||!this[_0x6f78('0x62')](_0x7f1d89[_0x6f78('0x6b')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')]('no\x20valid\x20credentials\x20configured');}if(!this[_0x6f78('0x62')](_0x7f1d89[_0x6f78('0x6c')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0xf2'));}if(!this[_0x6f78('0x62')](_0x7f1d89[_0x6f78('0x58')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x93'));}this[_0x6f78('0xe')][_0x6f78('0xc0')]=!![];this['createSquareDetailsReport'](_0x7f1d89);this[_0x6f78('0x40')](_0x7f1d89[_0x6f78('0x58')],'in');this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0xf3'),_0x7f1d89[_0x6f78('0x58')]));var _0x583d1f=this[_0x6f78('0x6a')][_0x6f78('0x80')](this,_0x7f1d89);if(_0x583d1f){for(var _0x444644 in _0x583d1f){if(_0x583d1f[_0x6f78('0xc2')](_0x444644)&&_[_0x6f78('0x75')](_0x583d1f[_0x444644])){this['channel']['setVariable'](util[_0x6f78('0x51')](_0x6f78('0xf4'),_0x444644[_0x6f78('0xc4')]()),_0x583d1f[_0x444644]);}}if(_[_0x6f78('0x43')](_0x583d1f[_0x6f78('0xf5')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0xf6'));}else{this[_0x6f78('0x40')](_0x583d1f['message'],_0x6f78('0xf7'));return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0xf8'),_0x583d1f[_0x6f78('0xf5')]));}}return this['channel']['error'](_0x7f1d89,'Amazon\x20Lex\x20is\x20unreachable');};AGIVertices[_0x6f78('0x11')][_0x6f78('0xf9')]=function(_0x193879){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0xfa'),_0x193879[_0x6f78('0x37')],_0x193879[_0x6f78('0x84')]));if(!this['isConfigured'](_0x193879[_0x6f78('0x5b')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0xfb'));}var _0x5999b1=_0x6f78('0xfc');var _0x136576=util[_0x6f78('0x51')]('%s/recordings/%s',FILES_PATH,rs[_0x6f78('0xe5')](0x4));var _0x57025f=util[_0x6f78('0x51')](_0x6f78('0xfd'),_0x136576,_0x5999b1);var _0x45d9b7=!![];if(_0x193879[_0x6f78('0xfe')]===_0x6f78('0xff')){_0x45d9b7=![];}var _0x17c771=this['channel'][_0x6f78('0x100')](_0x136576,_0x5999b1,_0x193879[_0x6f78('0x101')],_0x193879[_0x6f78('0x84')],undefined,_0x45d9b7);if(_0x17c771['result']!==-0x1){this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x102'),_0x57025f));var _0x59dc7e=this[_0x6f78('0x6d')][_0x6f78('0x80')](this,_0x193879,_0x57025f);if(_0x59dc7e){for(var _0x563114 in _0x59dc7e){if(_0x59dc7e[_0x6f78('0xc2')](_0x563114)){this[_0x6f78('0xe')]['setVariable'](util[_0x6f78('0x51')](_0x6f78('0x103'),_0x563114['toUpperCase']()),_0x59dc7e[_0x563114]);}}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x104'),JSON[_0x6f78('0xe0')](_0x59dc7e)));}}return _0x17c771;};AGIVertices['prototype'][_0x6f78('0x105')]=function(_0x5b68c6){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x106'),_0x5b68c6[_0x6f78('0x37')]));if(!this['isConfigured'](_0x5b68c6['appid'])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x107'));}if(!this['isConfigured'](_0x5b68c6['appsecret'])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x108'));}var _0x1818cf=_0x6f78('0xfc');var _0x381692=util[_0x6f78('0x51')](_0x6f78('0x109'),FILES_PATH,rs[_0x6f78('0xe5')](0x4));var _0xeda3d1=util[_0x6f78('0x51')](_0x6f78('0xfd'),_0x381692,_0x1818cf);var _0x463db9=!![];if(_0x5b68c6[_0x6f78('0xfe')]===_0x6f78('0xff')){_0x463db9=![];}var _0x18b59a=this[_0x6f78('0xe')][_0x6f78('0x100')](_0x381692,_0x1818cf,_0x5b68c6['intKey'],_0x5b68c6[_0x6f78('0x84')],undefined,_0x463db9);if(_0x18b59a[_0x6f78('0x7c')]!==-0x1){this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x10a'),_0xeda3d1));var _0x50da9d=this[_0x6f78('0x6e')][_0x6f78('0x80')](this,_0x5b68c6,_0xeda3d1);if(_0x50da9d){for(var _0x344640 in _0x50da9d){if(_0x50da9d[_0x6f78('0xc2')](_0x344640)){this[_0x6f78('0xe')]['setVariable'](util[_0x6f78('0x51')](_0x6f78('0x10b'),_0x344640[_0x6f78('0xc4')]()),_0x50da9d[_0x344640]);}}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('TildeASR\x20Result\x20%s',JSON[_0x6f78('0xe0')](_0x50da9d)));}}return _0x18b59a;};AGIVertices['prototype']['gotoc']=function(_0x485735){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x10c'),_0x485735['label']));return this['channel'][_0x6f78('0x10d')](_0x485735[_0x6f78('0x3b')],_0x485735[_0x6f78('0x3c')],_0x485735[_0x6f78('0x3d')]);};AGIVertices[_0x6f78('0x11')][_0x6f78('0x10e')]=function(_0x147599){logger[_0x6f78('0x2e')](util['format'](_0x6f78('0x10f'),_0x147599[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x147599[_0x6f78('0x110')])){return this['channel'][_0x6f78('0x2c')](_0x147599,_0x6f78('0x111'));}try{var _0x197fd9=eval(_0x147599['condition'])?_0x6f78('0x112'):_0x6f78('0x113');this[_0x6f78('0xe')]['noop'](util[_0x6f78('0x51')]('EVAL\x20CONDITION\x20%s\x20%s',_0x147599[_0x6f78('0x110')],_0x197fd9));return{'code':0xc8,'result':_0x197fd9};}catch(_0x4e432d){return{'code':0xc8,'result':_0x6f78('0x113')};}};AGIVertices[_0x6f78('0x11')]['gotoiftime']=function(_0x11cc36){logger['info'](util[_0x6f78('0x51')](_0x6f78('0x114'),_0x11cc36[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x11cc36[_0x6f78('0x115')])){return this['channel'][_0x6f78('0x2c')](_0x11cc36,_0x6f78('0x116'));}var _0x21bbad=this['getIntervals'][_0x6f78('0x80')](this,_0x11cc36[_0x6f78('0x115')]);if(!_0x21bbad){return this[_0x6f78('0xe')]['error'](_0x11cc36,_0x6f78('0x117'));}for(var _0x1607d4=0x0;_0x1607d4<_0x21bbad['length'];_0x1607d4+=0x1){var _0x5ac673=this[_0x6f78('0xe')][_0x6f78('0x12')](util[_0x6f78('0x51')](_0x6f78('0x118'),_0x21bbad[_0x1607d4]));if(_0x5ac673[_0x6f78('0x7c')]===-0x1){return _0x5ac673;}logger['info'](util[_0x6f78('0x51')](_0x6f78('0x119'),_0x21bbad[_0x1607d4],_0x5ac673['extra']));if(_0x5ac673['extra']===_0x6f78('0x112')){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')]('IFTIME\x20%s\x20%s',_0x21bbad[_0x1607d4],_0x6f78('0x112')));this['channel'][_0x6f78('0x8f')](util['format'](_0x6f78('0x119'),_0x21bbad[_0x1607d4],_0x6f78('0x112')));return{'code':0xc8,'result':'true'};}else{logger[_0x6f78('0x2e')](util['format'](_0x6f78('0x119'),_0x21bbad[_0x1607d4],_0x6f78('0x113')));this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('IFTIME\x20%s\x20%s',_0x21bbad[_0x1607d4],_0x6f78('0x113')));}}return{'code':0xc8,'result':_0x6f78('0x113')};};AGIVertices['prototype'][_0x6f78('0x11a')]=function(_0x28f42b){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x11b'),_0x28f42b[_0x6f78('0x37')]));return this[_0x6f78('0xe')][_0x6f78('0x11a')]();};AGIVertices['prototype'][_0x6f78('0x11c')]=function(_0x1980c3){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x11d'),_0x1980c3[_0x6f78('0x37')]));if(!this['isConfigured'](_0x1980c3['key'])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0xfb'));}var _0x1032cc=_0x6f78('0xfc');var _0x57ae5e=util[_0x6f78('0x51')]('%s/recordings/%s',FILES_PATH,rs[_0x6f78('0xe5')](0x4));var _0x41bab4=util['format'](_0x6f78('0xfd'),_0x57ae5e,_0x1032cc);var _0x35ad8b=!![];if(_0x1980c3[_0x6f78('0xfe')]===_0x6f78('0xff')){_0x35ad8b=![];}var _0x2d2de9=this['channel']['recordFile'](_0x57ae5e,_0x1032cc,_0x1980c3['intKey'],_0x1980c3[_0x6f78('0x84')],undefined,_0x35ad8b);if(_0x2d2de9[_0x6f78('0x7c')]!==-0x1){this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format']('ispeech\x20%s\x20file\x20created',_0x41bab4));var _0x314c1d=this[_0x6f78('0x61')]['sync'](this,_0x1980c3,_0x41bab4);if(_0x314c1d){for(var _0x28c661 in _0x314c1d){if(_0x314c1d['hasOwnProperty'](_0x28c661)){this[_0x6f78('0xe')][_0x6f78('0x7e')](util[_0x6f78('0x51')](_0x6f78('0x11e'),_0x28c661['toUpperCase']()),_0x314c1d[_0x28c661]);}}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('IspeechASR\x20Result\x20%s',JSON[_0x6f78('0xe0')](_0x314c1d)));}}return _0x2d2de9;};AGIVertices['prototype'][_0x6f78('0x11f')]=function(_0x3ab729){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')]('Enter\x20in\x20ISPEECHTTS\x20(%s)\x20block',_0x3ab729[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x3ab729['key'])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0xfb'));}if(!this[_0x6f78('0x62')](_0x3ab729[_0x6f78('0x58')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x93'));}this[_0x6f78('0xe')]['noop'](util[_0x6f78('0x51')](_0x6f78('0x120'),_0x3ab729[_0x6f78('0x58')]));var _0xeddb71=this[_0x6f78('0x5e')]['sync'](this,_0x3ab729);if(_0xeddb71){this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x121'),_0xeddb71));var _0x570b7a=this[_0x6f78('0xe')]['streamFile'](_0xeddb71,_0x3ab729[_0x6f78('0x101')]);try{fs[_0x6f78('0x122')](_0xeddb71+_0x6f78('0xd2'));}catch(_0x4309d5){logger['error'](_0x4309d5);}return _0x570b7a;}return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x3ab729,'ispeech\x20TTS\x20is\x20unreachable');};AGIVertices[_0x6f78('0x11')][_0x6f78('0x123')]=function(_0x60664){logger[_0x6f78('0x2e')](util['format'](_0x6f78('0x124'),_0x60664[_0x6f78('0x37')]));if(!this['isConfigured'](_0x60664[_0x6f78('0x125')])){return this[_0x6f78('0xe')]['error'](_0x60664,_0x6f78('0x126'));}logger['info'](util[_0x6f78('0x51')](_0x6f78('0x127'),this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x60664['findBy']));var _0x56e7e8=this[_0x6f78('0x53')][_0x6f78('0x80')](this,_0x60664[_0x6f78('0x125')]);if(_0x56e7e8){logger['info'](util['format'](_0x6f78('0x128'),this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x60664[_0x6f78('0x125')]));this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('AGENT\x20%s\x20FOUND\x20BY',this['channel']['callerid'],_0x60664[_0x6f78('0x125')]));return{'code':0xc8,'result':'success'};}else{logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x129'),this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x60664[_0x6f78('0x125')]));this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x129'),this['channel'][_0x6f78('0x3a')],_0x60664[_0x6f78('0x125')]));return{'code':0xc8,'result':_0x6f78('0x12a')};}};AGIVertices[_0x6f78('0x11')][_0x6f78('0x12b')]=function(_0x5cebe5){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x12c'),_0x5cebe5[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x5cebe5['findBy'])){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x5cebe5,_0x6f78('0x126'));}logger['info'](util[_0x6f78('0x51')](_0x6f78('0x127'),this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x5cebe5[_0x6f78('0x125')]));var _0x6f8534=this[_0x6f78('0x50')][_0x6f78('0x80')](this,_0x5cebe5[_0x6f78('0x125')]);if(_0x6f8534){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x128'),this[_0x6f78('0xe')]['callerid'],_0x5cebe5[_0x6f78('0x125')]));this['channel'][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x128'),this['channel']['callerid'],_0x5cebe5[_0x6f78('0x125')]));return{'code':0xc8,'result':_0x6f78('0x12d')};}else{logger[_0x6f78('0x2e')](util['format'](_0x6f78('0x129'),this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x5cebe5[_0x6f78('0x125')]));this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x5cebe5['findBy']));return{'code':0xc8,'result':_0x6f78('0x12a')};}};AGIVertices[_0x6f78('0x11')][_0x6f78('0x12e')]=function(_0x52dec9){logger[_0x6f78('0x2e')](util['format'](_0x6f78('0x12f'),_0x52dec9[_0x6f78('0x37')]));if(!this['isConfigured'](_0x52dec9[_0x6f78('0x130')])){return this['channel']['error'](_0x52dec9,'no\x20operation\x20configured');}this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x131'),_0x52dec9[_0x6f78('0x130')]));var _0x4bcaf6=eval(_0x52dec9[_0x6f78('0x130')]);if(!this['isConfigured'](_0x52dec9[_0x6f78('0xaf')])){return this['channel']['noop'](_0x6f78('0xb0'));}var _0x53bf0d=this['getVariable'][_0x6f78('0x80')](this,_0x52dec9['variable_id']);if(!_0x53bf0d){return this['channel'][_0x6f78('0x2c')](_0x52dec9,_0x6f78('0xe3'));}if(_[_0x6f78('0x132')](_0x4bcaf6)){var _0x1c4118=this;_0x4bcaf6[_0x6f78('0xb1')](function(_0x4527d9,_0x2d8728){_0x1c4118[_0x6f78('0xe')][_0x6f78('0x7e')](util[_0x6f78('0x51')]('%s[%s]',_0x53bf0d,_0x2d8728),_0x4527d9);});return this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x133'),_0x53bf0d));}else{return this[_0x6f78('0xe')][_0x6f78('0x7e')](_0x53bf0d,_0x4bcaf6);}};AGIVertices[_0x6f78('0x11')]['menu']=function(_0x4527d4){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x134'),_0x4527d4['label']));if(_0x4527d4[_0x6f78('0xdc')]===0x0){return this[_0x6f78('0x7f')](_0x4527d4);}_0x4527d4['retry']-=0x1;if(!this[_0x6f78('0x62')](_0x4527d4[_0x6f78('0xdd')])){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x4527d4,_0x6f78('0xde'));}var _0x22e600=this['getSound']['sync'](this,_0x4527d4['file_id']);if(!_0x22e600){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x4527d4,'no\x20file\x20audio\x20found');}var _0x42b1e4=this['channel'][_0x6f78('0x135')](_0x22e600,_0x4527d4[_0x6f78('0xdf')],_0x4527d4[_0x6f78('0x136')]);var _0x29d2e2=_0x42b1e4[_0x6f78('0x7c')];if(_0x42b1e4[_0x6f78('0x7c')]===-0x1){this['createSquareDetailsReport']['sync'](this,_0x4527d4,'-1');return _0x42b1e4;}else if(_0x42b1e4['extra']===_0x6f78('0x84')){_0x42b1e4['result']=_0x42b1e4[_0x6f78('0x7c')][_0x6f78('0x78')]>0x0?_0x42b1e4[_0x6f78('0x7c')]:'t';}else if(_[_0x6f78('0x42')](_0x42b1e4[_0x6f78('0x7c')])){_0x42b1e4[_0x6f78('0x7c')]='#';_0x29d2e2='#';}if(!this['isConfigured'](_0x4527d4['variable_id'])){this['channel']['noop']('no\x20variable\x20selected\x20for\x20the\x20result');}else{var _0x5023c9=this[_0x6f78('0x12')]['sync'](this,_0x4527d4['variable_id']);if(!_0x5023c9){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x4527d4,_0x6f78('0xe3'));}this[_0x6f78('0xe')][_0x6f78('0x7e')](_0x5023c9,_0x29d2e2);}this[_0x6f78('0x35')][_0x6f78('0x80')](this,_0x4527d4,_0x29d2e2);return _0x42b1e4;};AGIVertices[_0x6f78('0x11')]['noop']=function(_0x3799f9){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x137'),_0x3799f9[_0x6f78('0x37')]));return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x3799f9['output']||_0x3799f9[_0x6f78('0x37')]);};AGIVertices[_0x6f78('0x11')][_0x6f78('0x138')]=function(_0x38a426){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')]('Enter\x20in\x20PAUSE\x20(%s)\x20block',_0x38a426[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x38a426[_0x6f78('0x125')])){return this['channel'][_0x6f78('0x2c')](_0x38a426,_0x6f78('0x126'));}logger['info'](util[_0x6f78('0x51')]('FIND\x20AGENT\x20%s\x20BY\x20%s',this[_0x6f78('0xe')]['callerid'],_0x38a426[_0x6f78('0x125')]));var _0x35e58b=this[_0x6f78('0x4c')][_0x6f78('0x80')](this,_0x38a426[_0x6f78('0x139')]);var _0x25ebbb=this[_0x6f78('0x4d')]['sync'](this,_0x38a426[_0x6f78('0x125')],_0x35e58b);if(_0x25ebbb){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x128'),this[_0x6f78('0xe')]['callerid'],_0x38a426['findBy']));this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x128'),this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x38a426[_0x6f78('0x125')]));return{'code':0xc8,'result':_0x6f78('0x12d')};}else{logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x129'),this['channel'][_0x6f78('0x3a')],_0x38a426['findBy']));this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x128'),this['channel'][_0x6f78('0x3a')],_0x38a426['findBy']));return{'code':0xc8,'result':_0x6f78('0x12a')};}};AGIVertices[_0x6f78('0x11')]['playback']=function(_0x4a4e5d){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x13a'),_0x4a4e5d[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x4a4e5d[_0x6f78('0xdd')])){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x4a4e5d,_0x6f78('0xde'));}var _0x26184a=this[_0x6f78('0x20')]['sync'](this,_0x4a4e5d[_0x6f78('0xdd')]);if(!_0x26184a){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x4a4e5d,_0x6f78('0x13b'));}var _0x170f26=this[_0x6f78('0xe')][_0x6f78('0x55')](_0x6f78('0x13c'),[_0x26184a,_0x4a4e5d['opts']]);if(_0x170f26[_0x6f78('0x7c')]===-0x1){return _0x170f26;}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x90'),_0x6f78('0x13c'),_0x26184a));};AGIVertices['prototype'][_0x6f78('0x13d')]=function(_0x42c13c){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x13e'),_0x42c13c[_0x6f78('0x37')]));if(!this['isConfigured'](_0x42c13c[_0x6f78('0x13f')])){return this[_0x6f78('0xe')]['error'](_0x42c13c,'no\x20queue\x20selected');}var _0x4f116c='';var _0x5c5658=parseInt(_0x42c13c[_0x6f78('0x13f')],0xa);if(isNaN(_0x5c5658)){_0x4f116c=_0x42c13c[_0x6f78('0x13f')];}else{_0x4f116c=this[_0x6f78('0x16')]['sync'](this,_0x42c13c[_0x6f78('0x13f')]);if(!_0x4f116c){return this[_0x6f78('0xe')]['error'](_0x42c13c,_0x6f78('0x140'));}}var _0x5d943d='';if(this['isConfigured'](_0x42c13c[_0x6f78('0xdd')])){var _0x55da45=this[_0x6f78('0x20')]['sync'](this,_0x42c13c[_0x6f78('0xdd')]);if(_0x55da45){_0x5d943d=_0x55da45;}}this['createSquareDetailsReport'][_0x6f78('0x80')](this,_0x42c13c,_0x4f116c);if(_0x42c13c[_0x6f78('0xbc')][_0x6f78('0x141')]('x')<0x0){_0x42c13c[_0x6f78('0xbc')]+='x';}if(_0x42c13c[_0x6f78('0xbc')]['indexOf']('X')<0x0){_0x42c13c[_0x6f78('0xbc')]+='X';}this[_0x6f78('0xe')][_0x6f78('0x7e')](_0x6f78('0x142'),_0x4f116c?_0x4f116c[_0x6f78('0x143')]():'');var _0x255159=this['channel'][_0x6f78('0x55')]('QUEUE',[_0x4f116c,_0x42c13c[_0x6f78('0xbc')],_0x42c13c['url'],_0x5d943d,_0x42c13c[_0x6f78('0x84')],_0x42c13c[_0x6f78('0x8')],_0x42c13c[_0x6f78('0x144')],_0x42c13c[_0x6f78('0x145')],'',_0x42c13c[_0x6f78('0x146')]]);if(_0x255159[_0x6f78('0x7c')]===-0x1){return _0x255159;}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x90'),_0x6f78('0x147'),_0x4f116c));};AGIVertices[_0x6f78('0x11')]['record']=function(_0x35ba47){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x148'),_0x35ba47['label']));var _0x502ce9=_0x35ba47['recordingFormat']||_0x6f78('0xfc');var _0x456634=util['format'](_0x6f78('0x149'),this[_0x6f78('0xe')][_0x6f78('0x36')],rs[_0x6f78('0xe5')](0x5));var _0x59d1e4=util[_0x6f78('0x51')]('%s/recordings/%s.%s',FILES_PATH,_0x456634,_0x502ce9);var _0x48a217=util[_0x6f78('0x51')]('%s/recordings/%s',FILES_PATH,_0x456634);this[_0x6f78('0x14a')][_0x6f78('0x80')](this,_0x35ba47,_0x456634,_0x59d1e4);this[_0x6f78('0xe')][_0x6f78('0x7e')](_0x6f78('0x14b'),_0x456634);logger[_0x6f78('0x2e')](_0x6f78('0x14c'),_0x48a217,_0x502ce9,_0x35ba47[_0x6f78('0x14d')],_0x35ba47[_0x6f78('0x84')]);return this['channel']['recordFile'](_0x48a217,_0x502ce9,_0x35ba47[_0x6f78('0x14d')],_0x35ba47['timeout'],undefined,!![]);};AGIVertices[_0x6f78('0x11')][_0x6f78('0x14e')]=function(_0x132392){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x14f'),_0x132392[_0x6f78('0x37')]));return this[_0x6f78('0xe')][_0x6f78('0x150')](_0x132392['digits'][_0x6f78('0xad')](/\s+/g,''),_0x132392['escape_digits']);};AGIVertices[_0x6f78('0x11')][_0x6f78('0x151')]=function(_0x264dba){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x152'),_0x264dba[_0x6f78('0x37')]));return this[_0x6f78('0xe')][_0x6f78('0x153')](_0x264dba[_0x6f78('0x154')]['replace'](/\s+/g,''),_0x264dba['escape_digits']);};AGIVertices[_0x6f78('0x11')]['sayphonetic']=function(_0x2a8b7d){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x155'),_0x2a8b7d[_0x6f78('0x37')]));return this[_0x6f78('0xe')]['sayPhonetic'](_0x2a8b7d[_0x6f78('0x58')],_0x2a8b7d[_0x6f78('0x14d')]);};AGIVertices[_0x6f78('0x11')][_0x6f78('0x156')]=function(_0x22ef30){logger['info'](util[_0x6f78('0x51')](_0x6f78('0x157'),_0x22ef30[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x22ef30[_0x6f78('0x158')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')]('no\x20mail\x20account\x20configured');}var _0x3b6523=this[_0x6f78('0x159')][_0x6f78('0x80')](this,_0x22ef30[_0x6f78('0x158')]);if(!_0x3b6523||!_0x3b6523[_0x6f78('0x15a')]){return this['channel'][_0x6f78('0x2c')](_0x22ef30,'no\x20mail\x20account\x20found');}var _0x256234={'from':util[_0x6f78('0x51')](_0x6f78('0x15b'),_0x3b6523[_0x6f78('0x14')],_0x3b6523[_0x6f78('0x15c')]||_0x3b6523[_0x6f78('0x15a')]['user']),'to':_0x22ef30['to']||'','cc':_0x22ef30['cc']||'','bcc':_0x22ef30[_0x6f78('0x15d')]||'','subject':_0x22ef30[_0x6f78('0x15e')],'html':_0x22ef30[_0x6f78('0x58')],'text':_0x22ef30[_0x6f78('0x58')]};var _0x1e53cc={'tls':{'rejectUnauthorized':![]}};if(_0x3b6523[_0x6f78('0x15a')][_0x6f78('0x15f')]){_0x1e53cc[_0x6f78('0x15f')]=_0x3b6523['Smtp'][_0x6f78('0x15f')];}else{_0x1e53cc[_0x6f78('0x160')]=_0x3b6523['Smtp'][_0x6f78('0x160')];_0x1e53cc[_0x6f78('0x161')]=_0x3b6523['Smtp'][_0x6f78('0x161')];_0x1e53cc['secure']=_0x3b6523[_0x6f78('0x15a')][_0x6f78('0x162')];}if(_0x3b6523[_0x6f78('0x15a')]['authentication']){_0x1e53cc[_0x6f78('0x163')]={'user':_0x3b6523['Smtp'][_0x6f78('0x164')],'pass':_0x3b6523['Smtp'][_0x6f78('0x165')]};}if(this[_0x6f78('0x62')](_0x22ef30[_0x6f78('0x166')])){}logger['debug']('sendMail\x20message',JSON[_0x6f78('0xe0')](_0x256234));this[_0x6f78('0x35')][_0x6f78('0x80')](this,_0x22ef30,_0x22ef30[_0x6f78('0x158')]);this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x167'),_0x3b6523[_0x6f78('0x14')]));this[_0x6f78('0x24')][_0x6f78('0x80')](this,_0x1e53cc,_0x256234);return this['channel'][_0x6f78('0x8f')](_0x6f78('0x168'));};AGIVertices[_0x6f78('0x11')][_0x6f78('0x169')]=function(_0x9b5df8){logger['info'](util[_0x6f78('0x51')](_0x6f78('0x16a'),_0x9b5df8[_0x6f78('0x37')]));return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x16b'));};AGIVertices['prototype'][_0x6f78('0x16c')]=function(_0x5b0b6c){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x16d'),_0x5b0b6c[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x5b0b6c['sms_account_id'])){return this[_0x6f78('0xe')]['noop']('no\x20sms\x20account\x20configured');}var _0x5dfba0=this[_0x6f78('0x33')][_0x6f78('0x80')](this,_0x5b0b6c[_0x6f78('0x16e')]);if(!_0x5dfba0){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x5b0b6c,'no\x20sms\x20account\x20found');}var _0x2316fa={'body':_0x5b0b6c[_0x6f78('0x16f')],'phone':_0x5b0b6c['to']||'','SmsAccountId':_0x5dfba0['id']};logger[_0x6f78('0xb4')](_0x6f78('0x170'),JSON[_0x6f78('0xe0')](_0x2316fa));this['createSquareDetailsReport'][_0x6f78('0x80')](this,_0x5b0b6c,_0x5b0b6c[_0x6f78('0x16e')]);this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('Trying\x20SendSMS\x20with\x20account\x20%s',_0x5dfba0['name']));this['createSmsMessage'][_0x6f78('0x80')](this,_0x2316fa);return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x171'));};AGIVertices[_0x6f78('0x11')][_0x6f78('0x172')]=function(_0x1c364b){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x173'),_0x1c364b[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x1c364b['variable_id'])){return this['channel']['error'](_0x1c364b,_0x6f78('0x174'));}var _0x357481=this[_0x6f78('0x12')][_0x6f78('0x80')](this,_0x1c364b['variable_id']);if(!_0x357481){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x1c364b,'no\x20variable\x20found');}return this[_0x6f78('0xe')][_0x6f78('0x7e')](_0x357481,_0x1c364b[_0x6f78('0x175')]);};AGIVertices['prototype'][_0x6f78('0x176')]=function(_0x3561fe){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x177'),_0x3561fe[_0x6f78('0x37')]));this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x178'));if(_0x3561fe['answer']===_0x6f78('0x179')){this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x17a'));return this[_0x6f78('0xe')][_0x6f78('0x87')]();}return this[_0x6f78('0xe')][_0x6f78('0x8f')]('Skipped\x20Answer');};AGIVertices[_0x6f78('0x11')][_0x6f78('0x17b')]=function(_0x190340){logger['info'](util['format']('Enter\x20in\x20SUBPROJECT\x20(%s)\x20block',_0x190340[_0x6f78('0x37')]));if(!this['isConfigured'](_0x190340[_0x6f78('0x17c')])){return this['channel'][_0x6f78('0x2c')](_0x190340,_0x6f78('0x17d'));}var _0x22ebe1=this[_0x6f78('0x17e')][_0x6f78('0x80')](this,_0x190340['project_id']);if(!this[_0x6f78('0x62')](_0x22ebe1)){return this[_0x6f78('0xe')]['error'](_0x190340,util[_0x6f78('0x51')](_0x6f78('0x17f'),_0x190340[_0x6f78('0x17c')]));}if(_0x22ebe1===this[_0x6f78('0xe')][_0x6f78('0x39')]){return this['channel'][_0x6f78('0x2c')](_0x190340,_0x6f78('0x180'));}this[_0x6f78('0x35')][_0x6f78('0x80')](this,_0x190340,_0x22ebe1);var _0x648bb=this[_0x6f78('0xe')][_0x6f78('0x55')](_0x6f78('0x181'),util['format'](_0x6f78('0x182'),config[_0x6f78('0x8')][_0x6f78('0x160')]||_0x6f78('0x183'),_0x22ebe1,this[_0x6f78('0xe')]['arg_1']));if(_0x648bb[_0x6f78('0x7c')]===-0x1){return _0x648bb;}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util[_0x6f78('0x51')]('Executed\x20command\x20%s\x20%s',_0x6f78('0x181'),_0x22ebe1));};AGIVertices[_0x6f78('0x11')][_0x6f78('0x184')]=function(_0xd8b0a0){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x185'),_0xd8b0a0['label']));var _0x190de6=this[_0x6f78('0x54')]['sync'](this,_0xd8b0a0['command']);this[_0x6f78('0x35')][_0x6f78('0x80')](this,_0xd8b0a0,_0xd8b0a0['command']);if(this['isConfigured'](_0xd8b0a0[_0x6f78('0xaf')])){var _0x25d80b=this['getVariable']['sync'](this,_0xd8b0a0[_0x6f78('0xaf')]);if(_0x25d80b){this[_0x6f78('0xe')][_0x6f78('0x7e')](_0x25d80b,_0x190de6);return this[_0x6f78('0xe')]['noop'](util[_0x6f78('0x51')](_0x6f78('0x186'),_0xd8b0a0['command'],_0x25d80b));}}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x187'),_0xd8b0a0[_0x6f78('0x188')]));};AGIVertices['prototype'][_0x6f78('0x189')]=function(_0x465c88){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x18a'),_0x465c88[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x465c88[_0x6f78('0x58')])){return this[_0x6f78('0xe')][_0x6f78('0x8f')](_0x6f78('0x93'));}this['channel'][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x18b'),_0x465c88['text']));var _0x24ed8e=this[_0x6f78('0x57')]['sync'](this,_0x465c88);if(_0x24ed8e){this['channel'][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x18c'),_0x24ed8e));var _0x5c4943=this['channel'][_0x6f78('0xd1')](_0x24ed8e);try{fs[_0x6f78('0x122')](_0x24ed8e+'.wav');}catch(_0x200025){logger[_0x6f78('0x2c')](_0x200025);}return _0x5c4943;}return this['channel'][_0x6f78('0x2c')](_0x465c88,_0x6f78('0x18d'));};AGIVertices['prototype'][_0x6f78('0x18e')]=function(_0x40e0fd){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x18f'),_0x40e0fd[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x40e0fd[_0x6f78('0x125')])){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x40e0fd,_0x6f78('0x126'));}logger['info'](util['format'](_0x6f78('0x127'),this['channel'][_0x6f78('0x3a')],_0x40e0fd['findBy']));var _0x5ca631=this[_0x6f78('0x4f')][_0x6f78('0x80')](this,_0x40e0fd[_0x6f78('0x125')]);if(_0x5ca631){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x128'),this['channel']['callerid'],_0x40e0fd[_0x6f78('0x125')]));this['channel'][_0x6f78('0x8f')](util[_0x6f78('0x51')](_0x6f78('0x128'),this['channel'][_0x6f78('0x3a')],_0x40e0fd[_0x6f78('0x125')]));return{'code':0xc8,'result':'success'};}else{logger[_0x6f78('0x2e')](util['format']('AGENT\x20%s\x20NOT\x20FOUND\x20BY',this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x40e0fd[_0x6f78('0x125')]));this[_0x6f78('0xe')]['noop'](util[_0x6f78('0x51')](_0x6f78('0x129'),this[_0x6f78('0xe')][_0x6f78('0x3a')],_0x40e0fd[_0x6f78('0x125')]));return{'code':0xc8,'result':_0x6f78('0x12a')};}};AGIVertices[_0x6f78('0x11')][_0x6f78('0x190')]=function(_0x1107b7){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')](_0x6f78('0x191'),_0x1107b7['label']));var _0x4b7ce9=this['channel'][_0x6f78('0x55')](_0x6f78('0x192'),[_0x1107b7[_0x6f78('0x193')],_0x1107b7[_0x6f78('0x91')]]);if(_0x4b7ce9['result']===-0x1){return _0x4b7ce9;}return this[_0x6f78('0xe')][_0x6f78('0x8f')](util['format'](_0x6f78('0x90'),_0x6f78('0x192'),_0x1107b7[_0x6f78('0x193')]));};AGIVertices[_0x6f78('0x11')][_0x6f78('0x194')]=function(_0x224f48){logger[_0x6f78('0x2e')](util[_0x6f78('0x51')]('Enter\x20in\x20SWITCH\x20(%s)\x20block',_0x224f48[_0x6f78('0x37')]));if(!this[_0x6f78('0x62')](_0x224f48['variable_id'])){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x224f48,_0x6f78('0x174'));}var _0x6dce03=this[_0x6f78('0x12')]['sync'](this,_0x224f48[_0x6f78('0xaf')]);if(!_0x6dce03){return this[_0x6f78('0xe')][_0x6f78('0x2c')](_0x224f48,'no\x20variable\x20found');}var _0xec1554=this[_0x6f78('0xe')][_0x6f78('0x12')](_0x6dce03);return{'code':0xc8,'result':_0xec1554['extra']?_0xec1554['extra']:'-'};};String[_0x6f78('0x11')][_0x6f78('0x195')]=function(_0x2f3714,_0x151ff5){return this[_0x6f78('0x77')](_0x2f3714)[_0x6f78('0x196')](_0x151ff5);};module[_0x6f78('0x197')]=AGIVertices;
\ No newline at end of file
index 31c6a96..a047f59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['then','voicePause','[%s][START][AGENT:%s][QUEUE:%s]','attended','destlinkedid','info','[%s][TIMER:%s][AGENT:%s][QUEUE:%s]','acwTimeout','timer','stopAcw','lastPauseAt','YYYY-MM-DD\x20HH:mm:ss','uniqueid','updateAcw','update','[%s][UPDATE][ACWTIME:%s]','error','[%s][INPAUSE][AGENT:%s][QUEUE:%s]','catch','finally','[TIMER][STOP][AGENT:%s]','saveUnpause','[%s][UPDATE][ERRORS:%s]','[ACW][STOP]\x20Interface\x20%s\x20doesn\x27t\x20have\x20timer','[ACW][TIMERS]','interface','[ACW][syncAgentConnect]\x20%s','[ACW][syncAgentConnectPreview]\x20%s','message','isUndefined','[%s][HANGUP:UNIQUEID]','linkedid','[%s][HANGUP:LINKEDID]','[ACW][syncHangupRequest]\x20%s','[%s][HANGUPATTENDEDTRANSFER:UNIQUEID]','[%s][HANGUPATTENDEDTRANSFER:LINKEDID]','[ACW][syncHangup]\x20%s','isNil','transfereeuniqueid','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[ACW][syncAttendedTransfer]\x20%s','transfereruniqueid','[%s][BLINDTRANSFER:UNIQUEID]','stringify','transfererlinkedid','[%s][BLINDTRANSFER:LINKEDID]','[ACW][syncBlindTransfer]\x20%s','autopause','all','[%s][AUTOPAUSE][AGENT:%s][QUEUE:%]','savePause','Auto-Pause','[ACW][syncAgentRingNoAnswer]\x20%s','exports','util','lodash','moment','../ami','acw','../rpc/user','../rpc/voiceAgentReport','voiceQueues','agents','timers','channels','syncAgentConnect','bind','syncHangupRequest','hangup','syncHangup','agentringnoanswer','syncAgentRingNoAnswer','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','custom:agentConnectPreview','syncAgentConnectPreview','milliseconds','diff','seconds','prototype','startAcw','queue','mandatoryDisposition','mandatoryDispositionPause','name','QueuePause','getAgent'];(function(_0xf1bda8,_0x3ff6ef){var _0x4415d7=function(_0x3bd6c1){while(--_0x3bd6c1){_0xf1bda8['push'](_0xf1bda8['shift']());}};_0x4415d7(++_0x3ff6ef);}(_0x9957,0x93));var _0x7995=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0x9957[_0x19e35c];return _0x3e1fe8;};'use strict';var util=require(_0x7995('0x0'));var _=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));var ami=require(_0x7995('0x3'));var logger=require('../../../config/logger')(_0x7995('0x4'));var RpcUser=require(_0x7995('0x5'));var RpcVoiceAgentReport=require(_0x7995('0x6'));function Acw(_0x462a03){this['voiceQueues']=_0x462a03[_0x7995('0x7')];this[_0x7995('0x8')]=_0x462a03[_0x7995('0x8')];this[_0x7995('0x9')]=_0x462a03[_0x7995('0x9')];this[_0x7995('0xa')]={};ami['on']('agentconnect',this[_0x7995('0xb')][_0x7995('0xc')](this));ami['on']('hanguprequest',this[_0x7995('0xd')][_0x7995('0xc')](this));ami['on'](_0x7995('0xe'),this[_0x7995('0xf')][_0x7995('0xc')](this));ami['on'](_0x7995('0x10'),this[_0x7995('0x11')]['bind'](this));ami['on'](_0x7995('0x12'),this[_0x7995('0x13')]['bind'](this));ami['on'](_0x7995('0x14'),this[_0x7995('0x15')][_0x7995('0xc')](this));ami['on'](_0x7995('0x16'),this[_0x7995('0x17')][_0x7995('0xc')](this));}function getDiff(_0x2bbe7a){var _0x4cc004=moment()['milliseconds'](0x0);var _0x2b4e94=moment(_0x2bbe7a)[_0x7995('0x18')](0x0);return _0x4cc004[_0x7995('0x19')](_0x2b4e94,_0x7995('0x1a'));}Acw[_0x7995('0x1b')][_0x7995('0x1c')]=function(_0x2202ce){try{var _0x41cbf0=this;var _0x5377e5=this[_0x7995('0xa')][_0x2202ce]['interface'];var _0x2f832e=this[_0x7995('0xa')][_0x2202ce][_0x7995('0x1d')];var _0x291317=this[_0x7995('0x7')][_0x2f832e];var _0x37a7d4=![];var _0x4faa60='ACW';if(_0x291317[_0x7995('0x1e')]){if(_0x291317['mandatoryDispositionPause']['name']){_0x37a7d4=!![];_0x4faa60=_0x291317[_0x7995('0x1f')][_0x7995('0x20')];}}ami['Action']({'action':_0x7995('0x21'),'interface':_0x5377e5,'paused':!![],'reason':_0x4faa60})['then'](function(_0x4b1a8e){if(_0x41cbf0[_0x7995('0x8')][_0x5377e5]){return RpcUser[_0x7995('0x22')](_0x41cbf0[_0x7995('0x8')][_0x5377e5]['id'])[_0x7995('0x23')](function(_0x460924){if(_0x460924&&!_0x460924[_0x7995('0x24')]){logger['info'](_0x7995('0x25'),_0x2202ce,_0x5377e5,_0x2f832e);var _0x46ee4b=_0x41cbf0[_0x7995('0xa')][_0x2202ce][_0x7995('0x26')]&&_0x41cbf0[_0x7995('0xa')][_0x2202ce][_0x7995('0x27')]?_0x41cbf0[_0x7995('0xa')][_0x2202ce][_0x7995('0x27')]:_0x2202ce;return RpcUser['savePause'](_0x41cbf0[_0x7995('0x8')][_0x5377e5],_0x4faa60,_0x46ee4b)[_0x7995('0x23')](function(_0x401dc3){if(!_0x37a7d4){_0x41cbf0[_0x7995('0x9')][_0x5377e5]={};logger[_0x7995('0x28')](_0x7995('0x29'),_0x2202ce,_0x41cbf0['voiceQueues'][_0x2f832e][_0x7995('0x2a')],_0x5377e5,_0x2f832e);_0x41cbf0['timers'][_0x5377e5][_0x7995('0x2b')]=setTimeout(_0x41cbf0[_0x7995('0x2c')][_0x7995('0xc')](_0x41cbf0,_0x5377e5),_0x41cbf0[_0x7995('0x7')][_0x2f832e][_0x7995('0x2a')]*0x3e8);_0x41cbf0['timers'][_0x5377e5][_0x7995('0x2d')]=moment()['format'](_0x7995('0x2e'));_0x41cbf0[_0x7995('0x9')][_0x5377e5][_0x7995('0x2f')]=_0x2202ce;_0x41cbf0['timers'][_0x5377e5]['queue']=_0x2f832e;_0x41cbf0['timers'][_0x5377e5][_0x7995('0x30')]=function(){var _0xe6b0b3=getDiff(_0x41cbf0[_0x7995('0x9')][_0x5377e5][_0x7995('0x2d')]);clearTimeout(_0x41cbf0[_0x7995('0x9')][_0x5377e5][_0x7995('0x2b')]);_0x41cbf0['timers'][_0x5377e5]['timer']=![];RpcVoiceAgentReport[_0x7995('0x31')]({'acwtime':_0xe6b0b3},_0x41cbf0['timers'][_0x5377e5][_0x7995('0x2f')],_0x5377e5)[_0x7995('0x23')](function(_0x29fac5){logger[_0x7995('0x28')](_0x7995('0x32'),_0x2202ce,_0xe6b0b3,_0x29fac5);})['catch'](function(_0x44309d){logger[_0x7995('0x33')]('[%s][UPDATE][ERRORS:%s]',_0x2202ce,_0x44309d);});delete _0x41cbf0['timers'][_0x5377e5];};}});}else{logger['info'](_0x7995('0x34'),_0x2202ce,_0x5377e5,_0x2f832e);}});}})[_0x7995('0x35')](function(_0x4a176f){logger[_0x7995('0x33')]('[%s][TIMER:%s][AGENT:%s][QUEUE:%s]',_0x2202ce,_0x41cbf0[_0x7995('0x7')][_0x2f832e][_0x7995('0x2a')],_0x5377e5,_0x2f832e);})[_0x7995('0x36')](function(){delete _0x41cbf0['channels'][_0x2202ce];});}catch(_0x52d76d){logger[_0x7995('0x33')]('[ACW][START]\x20%s',_0x52d76d['message']);}};Acw[_0x7995('0x1b')][_0x7995('0x2c')]=function(_0x5212ff){try{var _0x1baa15=this;if(_0x1baa15[_0x7995('0x9')][_0x5212ff]){_0x1baa15[_0x7995('0x9')][_0x5212ff][_0x7995('0x2b')]=![];var _0x1e3dbf=_0x1baa15['timers'][_0x5212ff][_0x7995('0x2f')];var _0x242713=_0x1baa15[_0x7995('0x9')][_0x5212ff][_0x7995('0x1d')];var _0x4b1541=_0x1baa15[_0x7995('0x7')][_0x242713][_0x7995('0x2a')];logger[_0x7995('0x28')](_0x7995('0x37'),_0x5212ff);RpcUser[_0x7995('0x38')](this[_0x7995('0x8')][_0x5212ff]);RpcVoiceAgentReport['update']({'acwtime':_0x4b1541,'agentacw':!![]},_0x1e3dbf,_0x5212ff)[_0x7995('0x23')](function(_0x3be298){logger[_0x7995('0x28')](_0x7995('0x32'),_0x1e3dbf,_0x4b1541,_0x3be298);})[_0x7995('0x35')](function(_0x298fc2){logger[_0x7995('0x33')](_0x7995('0x39'),_0x1e3dbf,_0x298fc2);});}else{logger[_0x7995('0x33')](_0x7995('0x3a'),_0x5212ff);if(_0x1baa15[_0x7995('0x9')]){logger[_0x7995('0x28')](_0x7995('0x3b'),JSON['stringify'](_0x1baa15['timers']));}}}catch(_0x334dff){logger[_0x7995('0x33')]('[ACW][STOP]\x20%s',_0x334dff['message']);}};Acw[_0x7995('0x1b')]['syncAgentConnect']=function(_0x504a33){try{if(this[_0x7995('0x7')][_0x504a33[_0x7995('0x1d')]]&&(this[_0x7995('0x7')][_0x504a33['queue']][_0x7995('0x4')]||this['voiceQueues'][_0x504a33[_0x7995('0x1d')]]['mandatoryDisposition'])){if(this['agents'][_0x504a33[_0x7995('0x3c')]]){this[_0x7995('0xa')][_0x504a33[_0x7995('0x2f')]]={'queue':_0x504a33[_0x7995('0x1d')],'interface':_0x504a33['interface'],'destlinkedid':_0x504a33[_0x7995('0x27')]};}}}catch(_0x40fc68){logger[_0x7995('0x33')](_0x7995('0x3d'),_0x40fc68['message']);}};Acw['prototype'][_0x7995('0x17')]=function(_0x55791b){try{if(this[_0x7995('0x7')][_0x55791b['queue']]&&(this[_0x7995('0x7')][_0x55791b['queue']][_0x7995('0x4')]||this[_0x7995('0x7')][_0x55791b['queue']][_0x7995('0x1e')])){if(this[_0x7995('0x8')][_0x55791b[_0x7995('0x3c')]]){this[_0x7995('0xa')][_0x55791b['uniqueid']]={'queue':_0x55791b[_0x7995('0x1d')],'interface':_0x55791b[_0x7995('0x3c')]};}}}catch(_0x237270){logger['error'](_0x7995('0x3e'),_0x237270[_0x7995('0x3f')]);}};Acw[_0x7995('0x1b')][_0x7995('0xd')]=function(_0x255313){try{if(this['channels'][_0x255313[_0x7995('0x2f')]]&&_[_0x7995('0x40')](this['channels'][_0x255313[_0x7995('0x2f')]]['attended'])){logger[_0x7995('0x28')](_0x7995('0x41'),_0x255313[_0x7995('0x2f')]);this[_0x7995('0x1c')](_0x255313[_0x7995('0x2f')]);}else if(this[_0x7995('0xa')][_0x255313[_0x7995('0x42')]]&&_['isUndefined'](this[_0x7995('0xa')][_0x255313[_0x7995('0x42')]][_0x7995('0x26')])){logger['info'](_0x7995('0x43'),_0x255313[_0x7995('0x42')]);this[_0x7995('0x1c')](_0x255313['linkedid']);}}catch(_0x4ec548){logger['error'](_0x7995('0x44'),_0x4ec548[_0x7995('0x3f')]);}};Acw['prototype'][_0x7995('0xf')]=function(_0x29f300){try{if(this[_0x7995('0xa')][_0x29f300[_0x7995('0x2f')]]&&this[_0x7995('0xa')][_0x29f300['uniqueid']][_0x7995('0x26')]){logger['info'](_0x7995('0x45'),_0x29f300[_0x7995('0x2f')]);this[_0x7995('0x1c')](_0x29f300['uniqueid']);}else if(this['channels'][_0x29f300['linkedid']]&&this['channels'][_0x29f300[_0x7995('0x42')]][_0x7995('0x26')]){logger[_0x7995('0x28')](_0x7995('0x46'),_0x29f300[_0x7995('0x42')]);this[_0x7995('0x1c')](_0x29f300[_0x7995('0x42')]);}}catch(_0xda6ce8){logger[_0x7995('0x33')](_0x7995('0x47'),_0xda6ce8[_0x7995('0x3f')]);}};Acw[_0x7995('0x1b')][_0x7995('0x13')]=function(_0x35bea3){try{if(!_[_0x7995('0x48')](this[_0x7995('0xa')][_0x35bea3[_0x7995('0x49')]])){this[_0x7995('0x1c')](_0x35bea3[_0x7995('0x49')]);if(this['channels'][_0x35bea3[_0x7995('0x4a')]]){this[_0x7995('0xa')][_0x35bea3[_0x7995('0x4a')]][_0x7995('0x26')]=!![];this['channels'][_0x35bea3['transfertargetuniqueid']]=this[_0x7995('0xa')][_0x35bea3[_0x7995('0x4a')]];delete this[_0x7995('0xa')][_0x35bea3[_0x7995('0x4a')]];}}else if(!_['isNil'](this[_0x7995('0xa')][_0x35bea3[_0x7995('0x4b')]])){this[_0x7995('0x1c')](_0x35bea3[_0x7995('0x4b')]);if(this['channels'][_0x35bea3['origtransfereruniqueid']]){this[_0x7995('0xa')][_0x35bea3[_0x7995('0x4c')]][_0x7995('0x26')]=!![];this[_0x7995('0xa')][_0x35bea3[_0x7995('0x49')]]=this[_0x7995('0xa')][_0x35bea3[_0x7995('0x4c')]];delete this[_0x7995('0xa')][_0x35bea3[_0x7995('0x4c')]];}}}catch(_0x50caf5){logger[_0x7995('0x33')](_0x7995('0x4d'),_0x50caf5[_0x7995('0x3f')]);}};Acw[_0x7995('0x1b')]['syncBlindTransfer']=function(_0x51bf6a){try{if(this[_0x7995('0xa')][_0x51bf6a[_0x7995('0x4e')]]){logger['info'](_0x7995('0x4f'),JSON[_0x7995('0x50')](_0x51bf6a[_0x7995('0x4e')]));this[_0x7995('0x1c')](_0x51bf6a[_0x7995('0x4e')]);}else if(this['channels'][_0x51bf6a[_0x7995('0x51')]]){logger['info'](_0x7995('0x52'),JSON[_0x7995('0x50')](_0x51bf6a[_0x7995('0x51')]));this[_0x7995('0x1c')](_0x51bf6a[_0x7995('0x51')]);}}catch(_0xeb8920){logger[_0x7995('0x33')](_0x7995('0x53'),_0xeb8920[_0x7995('0x3f')]);}};Acw[_0x7995('0x1b')][_0x7995('0x11')]=function(_0x234d8d){try{if(this['voiceQueues'][_0x234d8d[_0x7995('0x1d')]]&&this[_0x7995('0x7')][_0x234d8d[_0x7995('0x1d')]][_0x7995('0x54')]===_0x7995('0x55')){if(this['agents'][_0x234d8d['interface']]){logger[_0x7995('0x28')](_0x7995('0x56'),_0x234d8d[_0x7995('0x2f')],_0x234d8d[_0x7995('0x3c')],_0x234d8d['queue']);return RpcUser[_0x7995('0x57')](this['agents'][_0x234d8d['interface']],_0x7995('0x58'),_0x234d8d[_0x7995('0x2f')]);}}}catch(_0x3f0a71){logger[_0x7995('0x33')](_0x7995('0x59'),_0x3f0a71[_0x7995('0x3f')]);}};module[_0x7995('0x5a')]=Acw;
\ No newline at end of file
+var _0x7dfd=['mandatoryDispositionPause','name','QueuePause','getAgent','then','voicePause','info','[%s][START][AGENT:%s][QUEUE:%s]','attended','destlinkedid','savePause','[%s][TIMER:%s][AGENT:%s][QUEUE:%s]','timer','stopAcw','acwTimeout','lastPauseAt','updateAcw','update','uniqueid','[%s][UPDATE][ACWTIME:%s]','catch','error','[%s][UPDATE][ERRORS:%s]','[%s][INPAUSE][AGENT:%s][QUEUE:%s]','finally','saveUnpause','prototype','interface','[ACW][syncAgentConnect]\x20%s','message','[ACW][syncAgentConnectPreview]\x20%s','isUndefined','[%s][HANGUP:UNIQUEID]','linkedid','[%s][HANGUPATTENDEDTRANSFER:UNIQUEID]','isNil','transfereeuniqueid','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[ACW][syncAttendedTransfer]\x20%s','transfereruniqueid','stringify','transfererlinkedid','[%s][BLINDTRANSFER:LINKEDID]','[ACW][syncBlindTransfer]\x20%s','all','[%s][AUTOPAUSE][AGENT:%s][QUEUE:%]','Auto-Pause','exports','util','lodash','moment','../ami','../../../config/logger','acw','../rpc/user','../rpc/voiceAgentReport','voiceQueues','agents','timers','channels','agentconnect','bind','hanguprequest','syncHangupRequest','syncHangup','agentringnoanswer','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','custom:agentConnectPreview','syncAgentConnectPreview','milliseconds','diff','seconds','startAcw','queue','mandatoryDisposition'];(function(_0x5daac6,_0x488896){var _0x97e310=function(_0x1ecf8a){while(--_0x1ecf8a){_0x5daac6['push'](_0x5daac6['shift']());}};_0x97e310(++_0x488896);}(_0x7dfd,0x1c2));var _0xd7df=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x7dfd[_0x3dd15e];return _0x231fd0;};'use strict';var util=require(_0xd7df('0x0'));var _=require(_0xd7df('0x1'));var moment=require(_0xd7df('0x2'));var ami=require(_0xd7df('0x3'));var logger=require(_0xd7df('0x4'))(_0xd7df('0x5'));var RpcUser=require(_0xd7df('0x6'));var RpcVoiceAgentReport=require(_0xd7df('0x7'));function Acw(_0x3ef231){this[_0xd7df('0x8')]=_0x3ef231[_0xd7df('0x8')];this[_0xd7df('0x9')]=_0x3ef231[_0xd7df('0x9')];this[_0xd7df('0xa')]=_0x3ef231[_0xd7df('0xa')];this[_0xd7df('0xb')]={};ami['on'](_0xd7df('0xc'),this['syncAgentConnect'][_0xd7df('0xd')](this));ami['on'](_0xd7df('0xe'),this[_0xd7df('0xf')][_0xd7df('0xd')](this));ami['on']('hangup',this[_0xd7df('0x10')]['bind'](this));ami['on'](_0xd7df('0x11'),this['syncAgentRingNoAnswer'][_0xd7df('0xd')](this));ami['on'](_0xd7df('0x12'),this[_0xd7df('0x13')][_0xd7df('0xd')](this));ami['on'](_0xd7df('0x14'),this[_0xd7df('0x15')][_0xd7df('0xd')](this));ami['on'](_0xd7df('0x16'),this[_0xd7df('0x17')][_0xd7df('0xd')](this));}function getDiff(_0xa70589){var _0x4723b7=moment()[_0xd7df('0x18')](0x0);var _0x196632=moment(_0xa70589)[_0xd7df('0x18')](0x0);return _0x4723b7[_0xd7df('0x19')](_0x196632,_0xd7df('0x1a'));}Acw['prototype'][_0xd7df('0x1b')]=function(_0x23cdbc){try{var _0x513b13=this;var _0x18d38f=this[_0xd7df('0xb')][_0x23cdbc]['interface'];var _0x43bc73=this[_0xd7df('0xb')][_0x23cdbc][_0xd7df('0x1c')];var _0x5210e5=this[_0xd7df('0x8')][_0x43bc73];var _0x471621=![];var _0x3cea3='ACW';if(_0x5210e5[_0xd7df('0x1d')]){if(_0x5210e5[_0xd7df('0x1e')][_0xd7df('0x1f')]){_0x471621=!![];_0x3cea3=_0x5210e5['mandatoryDispositionPause'][_0xd7df('0x1f')];}}ami['Action']({'action':_0xd7df('0x20'),'interface':_0x18d38f,'paused':!![],'reason':_0x3cea3})['then'](function(_0x3ae7c3){if(_0x513b13[_0xd7df('0x9')][_0x18d38f]){return RpcUser[_0xd7df('0x21')](_0x513b13['agents'][_0x18d38f]['id'])[_0xd7df('0x22')](function(_0x502ae8){if(_0x502ae8&&!_0x502ae8[_0xd7df('0x23')]){logger[_0xd7df('0x24')](_0xd7df('0x25'),_0x23cdbc,_0x18d38f,_0x43bc73);var _0x29f354=_0x513b13[_0xd7df('0xb')][_0x23cdbc][_0xd7df('0x26')]&&_0x513b13[_0xd7df('0xb')][_0x23cdbc]['destlinkedid']?_0x513b13['channels'][_0x23cdbc][_0xd7df('0x27')]:_0x23cdbc;return RpcUser[_0xd7df('0x28')](_0x513b13[_0xd7df('0x9')][_0x18d38f],_0x3cea3,_0x29f354)[_0xd7df('0x22')](function(_0x13f190){if(!_0x471621){_0x513b13[_0xd7df('0xa')][_0x18d38f]={};logger[_0xd7df('0x24')](_0xd7df('0x29'),_0x23cdbc,_0x513b13[_0xd7df('0x8')][_0x43bc73]['acwTimeout'],_0x18d38f,_0x43bc73);_0x513b13[_0xd7df('0xa')][_0x18d38f][_0xd7df('0x2a')]=setTimeout(_0x513b13[_0xd7df('0x2b')][_0xd7df('0xd')](_0x513b13,_0x18d38f),_0x513b13[_0xd7df('0x8')][_0x43bc73][_0xd7df('0x2c')]*0x3e8);_0x513b13[_0xd7df('0xa')][_0x18d38f][_0xd7df('0x2d')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');_0x513b13['timers'][_0x18d38f]['uniqueid']=_0x23cdbc;_0x513b13['timers'][_0x18d38f][_0xd7df('0x1c')]=_0x43bc73;_0x513b13['timers'][_0x18d38f][_0xd7df('0x2e')]=function(){var _0x156612=getDiff(_0x513b13['timers'][_0x18d38f][_0xd7df('0x2d')]);clearTimeout(_0x513b13[_0xd7df('0xa')][_0x18d38f]['timer']);_0x513b13[_0xd7df('0xa')][_0x18d38f][_0xd7df('0x2a')]=![];RpcVoiceAgentReport[_0xd7df('0x2f')]({'acwtime':_0x156612},_0x513b13[_0xd7df('0xa')][_0x18d38f][_0xd7df('0x30')],_0x18d38f)[_0xd7df('0x22')](function(_0x5a658f){logger[_0xd7df('0x24')](_0xd7df('0x31'),_0x23cdbc,_0x156612,_0x5a658f);})[_0xd7df('0x32')](function(_0x1d81b2){logger[_0xd7df('0x33')](_0xd7df('0x34'),_0x23cdbc,_0x1d81b2);});delete _0x513b13[_0xd7df('0xa')][_0x18d38f];};}});}else{logger[_0xd7df('0x24')](_0xd7df('0x35'),_0x23cdbc,_0x18d38f,_0x43bc73);}});}})[_0xd7df('0x32')](function(_0x2e828e){logger['error']('[%s][TIMER:%s][AGENT:%s][QUEUE:%s]',_0x23cdbc,_0x513b13[_0xd7df('0x8')][_0x43bc73]['acwTimeout'],_0x18d38f,_0x43bc73);})[_0xd7df('0x36')](function(){delete _0x513b13[_0xd7df('0xb')][_0x23cdbc];});}catch(_0xa0ed20){logger[_0xd7df('0x33')]('[ACW][START]\x20%s',_0xa0ed20['message']);}};Acw['prototype'][_0xd7df('0x2b')]=function(_0x15e682){try{var _0x55c43f=this;if(_0x55c43f[_0xd7df('0xa')][_0x15e682]){_0x55c43f[_0xd7df('0xa')][_0x15e682][_0xd7df('0x2a')]=![];var _0x574567=_0x55c43f['timers'][_0x15e682][_0xd7df('0x30')];var _0x45642c=_0x55c43f['timers'][_0x15e682][_0xd7df('0x1c')];var _0x564ce2=_0x55c43f[_0xd7df('0x8')][_0x45642c][_0xd7df('0x2c')];logger[_0xd7df('0x24')]('[TIMER][STOP][AGENT:%s]',_0x15e682);RpcUser[_0xd7df('0x37')](this[_0xd7df('0x9')][_0x15e682]);RpcVoiceAgentReport[_0xd7df('0x2f')]({'acwtime':_0x564ce2,'agentacw':!![]},_0x574567,_0x15e682)[_0xd7df('0x22')](function(_0x54ea42){logger[_0xd7df('0x24')](_0xd7df('0x31'),_0x574567,_0x564ce2,_0x54ea42);})[_0xd7df('0x32')](function(_0x4f6286){logger[_0xd7df('0x33')](_0xd7df('0x34'),_0x574567,_0x4f6286);});}else{logger[_0xd7df('0x33')]('[ACW][STOP]\x20Interface\x20%s\x20doesn\x27t\x20have\x20timer',_0x15e682);if(_0x55c43f[_0xd7df('0xa')]){logger[_0xd7df('0x24')]('[ACW][TIMERS]',JSON['stringify'](_0x55c43f[_0xd7df('0xa')]));}}}catch(_0x211feb){logger[_0xd7df('0x33')]('[ACW][STOP]\x20%s',_0x211feb['message']);}};Acw[_0xd7df('0x38')]['syncAgentConnect']=function(_0xe606f4){try{if(this['voiceQueues'][_0xe606f4['queue']]&&(this[_0xd7df('0x8')][_0xe606f4['queue']][_0xd7df('0x5')]||this[_0xd7df('0x8')][_0xe606f4[_0xd7df('0x1c')]][_0xd7df('0x1d')])){if(this[_0xd7df('0x9')][_0xe606f4[_0xd7df('0x39')]]){this[_0xd7df('0xb')][_0xe606f4[_0xd7df('0x30')]]={'queue':_0xe606f4[_0xd7df('0x1c')],'interface':_0xe606f4['interface'],'destlinkedid':_0xe606f4[_0xd7df('0x27')]};}}}catch(_0x4b9076){logger[_0xd7df('0x33')](_0xd7df('0x3a'),_0x4b9076[_0xd7df('0x3b')]);}};Acw[_0xd7df('0x38')][_0xd7df('0x17')]=function(_0x145223){try{if(this[_0xd7df('0x8')][_0x145223[_0xd7df('0x1c')]]&&(this[_0xd7df('0x8')][_0x145223['queue']][_0xd7df('0x5')]||this[_0xd7df('0x8')][_0x145223['queue']]['mandatoryDisposition'])){if(this[_0xd7df('0x9')][_0x145223[_0xd7df('0x39')]]){this[_0xd7df('0xb')][_0x145223['uniqueid']]={'queue':_0x145223['queue'],'interface':_0x145223[_0xd7df('0x39')]};}}}catch(_0x49a763){logger[_0xd7df('0x33')](_0xd7df('0x3c'),_0x49a763[_0xd7df('0x3b')]);}};Acw[_0xd7df('0x38')][_0xd7df('0xf')]=function(_0x28c13f){try{if(this[_0xd7df('0xb')][_0x28c13f[_0xd7df('0x30')]]&&_[_0xd7df('0x3d')](this[_0xd7df('0xb')][_0x28c13f[_0xd7df('0x30')]][_0xd7df('0x26')])){logger['info'](_0xd7df('0x3e'),_0x28c13f[_0xd7df('0x30')]);this[_0xd7df('0x1b')](_0x28c13f[_0xd7df('0x30')]);}else if(this[_0xd7df('0xb')][_0x28c13f['linkedid']]&&_[_0xd7df('0x3d')](this[_0xd7df('0xb')][_0x28c13f[_0xd7df('0x3f')]]['attended'])){logger[_0xd7df('0x24')]('[%s][HANGUP:LINKEDID]',_0x28c13f[_0xd7df('0x3f')]);this[_0xd7df('0x1b')](_0x28c13f[_0xd7df('0x3f')]);}}catch(_0x579bec){logger[_0xd7df('0x33')]('[ACW][syncHangupRequest]\x20%s',_0x579bec['message']);}};Acw['prototype'][_0xd7df('0x10')]=function(_0x4a6cf5){try{if(this[_0xd7df('0xb')][_0x4a6cf5[_0xd7df('0x30')]]&&this[_0xd7df('0xb')][_0x4a6cf5[_0xd7df('0x30')]][_0xd7df('0x26')]){logger[_0xd7df('0x24')](_0xd7df('0x40'),_0x4a6cf5[_0xd7df('0x30')]);this[_0xd7df('0x1b')](_0x4a6cf5[_0xd7df('0x30')]);}else if(this[_0xd7df('0xb')][_0x4a6cf5[_0xd7df('0x3f')]]&&this[_0xd7df('0xb')][_0x4a6cf5[_0xd7df('0x3f')]][_0xd7df('0x26')]){logger[_0xd7df('0x24')]('[%s][HANGUPATTENDEDTRANSFER:LINKEDID]',_0x4a6cf5[_0xd7df('0x3f')]);this[_0xd7df('0x1b')](_0x4a6cf5['linkedid']);}}catch(_0x56819b){logger[_0xd7df('0x33')]('[ACW][syncHangup]\x20%s',_0x56819b[_0xd7df('0x3b')]);}};Acw['prototype'][_0xd7df('0x13')]=function(_0x28151a){try{if(!_[_0xd7df('0x41')](this['channels'][_0x28151a['transfereeuniqueid']])){this['startAcw'](_0x28151a[_0xd7df('0x42')]);if(this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x43')]]){this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x43')]][_0xd7df('0x26')]=!![];this['channels'][_0x28151a[_0xd7df('0x44')]]=this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x43')]];delete this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x43')]];}}else if(!_[_0xd7df('0x41')](this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x44')]])){this[_0xd7df('0x1b')](_0x28151a[_0xd7df('0x44')]);if(this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x45')]]){this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x45')]][_0xd7df('0x26')]=!![];this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x42')]]=this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x45')]];delete this[_0xd7df('0xb')][_0x28151a[_0xd7df('0x45')]];}}}catch(_0x393a3a){logger[_0xd7df('0x33')](_0xd7df('0x46'),_0x393a3a[_0xd7df('0x3b')]);}};Acw[_0xd7df('0x38')]['syncBlindTransfer']=function(_0x57ec6f){try{if(this[_0xd7df('0xb')][_0x57ec6f[_0xd7df('0x47')]]){logger[_0xd7df('0x24')]('[%s][BLINDTRANSFER:UNIQUEID]',JSON[_0xd7df('0x48')](_0x57ec6f[_0xd7df('0x47')]));this[_0xd7df('0x1b')](_0x57ec6f[_0xd7df('0x47')]);}else if(this['channels'][_0x57ec6f[_0xd7df('0x49')]]){logger[_0xd7df('0x24')](_0xd7df('0x4a'),JSON[_0xd7df('0x48')](_0x57ec6f[_0xd7df('0x49')]));this[_0xd7df('0x1b')](_0x57ec6f[_0xd7df('0x49')]);}}catch(_0x2fdad0){logger['error'](_0xd7df('0x4b'),_0x2fdad0[_0xd7df('0x3b')]);}};Acw['prototype']['syncAgentRingNoAnswer']=function(_0x481fa5){try{if(this[_0xd7df('0x8')][_0x481fa5[_0xd7df('0x1c')]]&&this[_0xd7df('0x8')][_0x481fa5[_0xd7df('0x1c')]]['autopause']===_0xd7df('0x4c')){if(this[_0xd7df('0x9')][_0x481fa5[_0xd7df('0x39')]]){logger[_0xd7df('0x24')](_0xd7df('0x4d'),_0x481fa5[_0xd7df('0x30')],_0x481fa5[_0xd7df('0x39')],_0x481fa5['queue']);return RpcUser['savePause'](this[_0xd7df('0x9')][_0x481fa5['interface']],_0xd7df('0x4e'),_0x481fa5[_0xd7df('0x30')]);}}}catch(_0x1efefa){logger['error']('[ACW][syncAgentRingNoAnswer]\x20%s',_0x1efefa[_0xd7df('0x3b')]);}};module[_0xd7df('0x4f')]=Acw;
\ No newline at end of file
index b2cd0d4..01cb935 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb58f=['devicestatelist','sippeerstatus','actionQueueSummary','queuesummary','actionCoreShowChannels','coreshowchannels','info','Manager\x20\x22%s\x22\x20logged\x20on\x20to\x20%s:%s','close','connect','shutdown','Shutdown\x20\x22%s\x22\x20to\x20%s:%s\x20with:\x0a%s','fullybooted','Fullybooted\x20\x22%s\x22\x20to\x20%s:%s','resolve','then','actionSipPeerStatus','log','once','asterisk-manager','bluebird','util','../../config/logger','ami','../../config/environment','asterisk','username','password','keepConnected','promisify','action','Manager\x20\x22%s\x22\x20error\x20to\x20%s:%s\x20with:\x0a%s','port','inspect','error','format','actionSipShowRegistry','Action','sipshowregistry','actionDeviceStateList'];(function(_0x553f5f,_0x5b1bee){var _0x555fe0=function(_0x4a57d0){while(--_0x4a57d0){_0x553f5f['push'](_0x553f5f['shift']());}};_0x555fe0(++_0x5b1bee);}(_0xb58f,0x12b));var _0xfb58=function(_0x45fe79,_0x390e7b){_0x45fe79=_0x45fe79-0x0;var _0x38ed91=_0xb58f[_0x45fe79];return _0x38ed91;};'use strict';var Manager=require(_0xfb58('0x0'));var BPromise=require(_0xfb58('0x1'));var moment=require('moment');var util=require(_0xfb58('0x2'));var _=require('lodash');var logger=require(_0xfb58('0x3'))(_0xfb58('0x4'));var config=require(_0xfb58('0x5'));var ami=new Manager(config['asterisk']['port'],config[_0xfb58('0x6')]['ip'],config[_0xfb58('0x6')][_0xfb58('0x7')],config[_0xfb58('0x6')][_0xfb58('0x8')],!![]);ami[_0xfb58('0x9')]();ami['Action']=BPromise[_0xfb58('0xa')](ami[_0xfb58('0xb')]);function error(_0x3cb3fe){logger['error'](util['format'](_0xfb58('0xc'),config['asterisk'][_0xfb58('0x7')],config['asterisk']['ip'],config[_0xfb58('0x6')][_0xfb58('0xd')],util[_0xfb58('0xe')](_0x3cb3fe,![],null)));}function close(){logger[_0xfb58('0xf')](util[_0xfb58('0x10')]('Manager\x20\x22%s\x22\x20closed\x20to\x20%s:%s',config[_0xfb58('0x6')][_0xfb58('0x7')],config[_0xfb58('0x6')]['ip'],config[_0xfb58('0x6')]['port']));}ami[_0xfb58('0x11')]=function(){return function(){return ami[_0xfb58('0x12')]({'action':_0xfb58('0x13')});};};ami[_0xfb58('0x14')]=function(){return function(){return ami[_0xfb58('0x12')]({'action':_0xfb58('0x15')});};};ami['actionSipPeerStatus']=function(){return function(){return ami[_0xfb58('0x12')]({'action':_0xfb58('0x16')});};};ami[_0xfb58('0x17')]=function(){return function(){return ami[_0xfb58('0x12')]({'action':_0xfb58('0x18')});};};ami[_0xfb58('0x19')]=function(){return function(){return ami[_0xfb58('0x12')]({'action':_0xfb58('0x1a')});};};function connect(_0x3e29cd){logger[_0xfb58('0x1b')](util[_0xfb58('0x10')](_0xfb58('0x1c'),config[_0xfb58('0x6')][_0xfb58('0x7')],config[_0xfb58('0x6')]['ip'],config[_0xfb58('0x6')][_0xfb58('0xd')]));ami['once'](_0xfb58('0xf'),error);ami['once'](_0xfb58('0x1d'),close);}ami['on'](_0xfb58('0x1e'),connect);ami['on'](_0xfb58('0x1f'),function(_0x122cfa){logger[_0xfb58('0x1b')](util[_0xfb58('0x10')](_0xfb58('0x20'),config[_0xfb58('0x6')][_0xfb58('0x7')],config[_0xfb58('0x6')]['ip'],config[_0xfb58('0x6')]['port'],util['inspect'](_0x122cfa,![],null)));});ami['on'](_0xfb58('0x21'),function(_0x10dd2b){logger['info'](util[_0xfb58('0x10')](_0xfb58('0x22'),config[_0xfb58('0x6')][_0xfb58('0x7')],config[_0xfb58('0x6')]['ip'],config['asterisk']['port']));return BPromise[_0xfb58('0x23')]()[_0xfb58('0x24')](ami['actionSipShowRegistry']())[_0xfb58('0x24')](ami[_0xfb58('0x14')]())[_0xfb58('0x24')](ami[_0xfb58('0x25')]())[_0xfb58('0x24')](ami[_0xfb58('0x17')]())[_0xfb58('0x24')](ami[_0xfb58('0x19')]())['catch'](function(_0x28767f){console[_0xfb58('0x26')](_0x28767f);});});ami['once'](_0xfb58('0xf'),error);ami[_0xfb58('0x27')](_0xfb58('0x1d'),close);module['exports']=ami;
\ No newline at end of file
+var _0x72ff=['Action','promisify','action','error','format','Manager\x20\x22%s\x22\x20error\x20to\x20%s:%s\x20with:\x0a%s','inspect','Manager\x20\x22%s\x22\x20closed\x20to\x20%s:%s','actionSipShowRegistry','sipshowregistry','actionDeviceStateList','devicestatelist','actionSipPeerStatus','sippeerstatus','actionQueueSummary','queuesummary','actionCoreShowChannels','coreshowchannels','info','once','close','shutdown','Fullybooted\x20\x22%s\x22\x20to\x20%s:%s','resolve','then','catch','log','asterisk-manager','moment','util','lodash','../../config/logger','../../config/environment','asterisk','port','username','keepConnected'];(function(_0x41d364,_0xdfdc1a){var _0x5ace98=function(_0x5f1194){while(--_0x5f1194){_0x41d364['push'](_0x41d364['shift']());}};_0x5ace98(++_0xdfdc1a);}(_0x72ff,0xaf));var _0xf72f=function(_0x3b0731,_0xcf9925){_0x3b0731=_0x3b0731-0x0;var _0x4204d7=_0x72ff[_0x3b0731];return _0x4204d7;};'use strict';var Manager=require(_0xf72f('0x0'));var BPromise=require('bluebird');var moment=require(_0xf72f('0x1'));var util=require(_0xf72f('0x2'));var _=require(_0xf72f('0x3'));var logger=require(_0xf72f('0x4'))('ami');var config=require(_0xf72f('0x5'));var ami=new Manager(config[_0xf72f('0x6')][_0xf72f('0x7')],config[_0xf72f('0x6')]['ip'],config[_0xf72f('0x6')][_0xf72f('0x8')],config[_0xf72f('0x6')]['password'],!![]);ami[_0xf72f('0x9')]();ami[_0xf72f('0xa')]=BPromise[_0xf72f('0xb')](ami[_0xf72f('0xc')]);function error(_0xb5008d){logger[_0xf72f('0xd')](util[_0xf72f('0xe')](_0xf72f('0xf'),config['asterisk'][_0xf72f('0x8')],config[_0xf72f('0x6')]['ip'],config[_0xf72f('0x6')]['port'],util[_0xf72f('0x10')](_0xb5008d,![],null)));}function close(){logger[_0xf72f('0xd')](util[_0xf72f('0xe')](_0xf72f('0x11'),config[_0xf72f('0x6')][_0xf72f('0x8')],config[_0xf72f('0x6')]['ip'],config[_0xf72f('0x6')][_0xf72f('0x7')]));}ami[_0xf72f('0x12')]=function(){return function(){return ami[_0xf72f('0xa')]({'action':_0xf72f('0x13')});};};ami[_0xf72f('0x14')]=function(){return function(){return ami[_0xf72f('0xa')]({'action':_0xf72f('0x15')});};};ami[_0xf72f('0x16')]=function(){return function(){return ami['Action']({'action':_0xf72f('0x17')});};};ami[_0xf72f('0x18')]=function(){return function(){return ami[_0xf72f('0xa')]({'action':_0xf72f('0x19')});};};ami[_0xf72f('0x1a')]=function(){return function(){return ami['Action']({'action':_0xf72f('0x1b')});};};function connect(_0x405cc1){logger[_0xf72f('0x1c')](util[_0xf72f('0xe')]('Manager\x20\x22%s\x22\x20logged\x20on\x20to\x20%s:%s',config[_0xf72f('0x6')][_0xf72f('0x8')],config[_0xf72f('0x6')]['ip'],config['asterisk'][_0xf72f('0x7')]));ami[_0xf72f('0x1d')]('error',error);ami['once'](_0xf72f('0x1e'),close);}ami['on']('connect',connect);ami['on'](_0xf72f('0x1f'),function(_0x1e9447){logger['info'](util[_0xf72f('0xe')]('Shutdown\x20\x22%s\x22\x20to\x20%s:%s\x20with:\x0a%s',config[_0xf72f('0x6')][_0xf72f('0x8')],config[_0xf72f('0x6')]['ip'],config[_0xf72f('0x6')][_0xf72f('0x7')],util[_0xf72f('0x10')](_0x1e9447,![],null)));});ami['on']('fullybooted',function(_0x27fc5c){logger[_0xf72f('0x1c')](util[_0xf72f('0xe')](_0xf72f('0x20'),config[_0xf72f('0x6')][_0xf72f('0x8')],config['asterisk']['ip'],config[_0xf72f('0x6')][_0xf72f('0x7')]));return BPromise[_0xf72f('0x21')]()[_0xf72f('0x22')](ami[_0xf72f('0x12')]())[_0xf72f('0x22')](ami[_0xf72f('0x14')]())[_0xf72f('0x22')](ami[_0xf72f('0x16')]())[_0xf72f('0x22')](ami[_0xf72f('0x18')]())[_0xf72f('0x22')](ami[_0xf72f('0x1a')]())[_0xf72f('0x23')](function(_0x1c1d83){console[_0xf72f('0x24')](_0x1c1d83);});});ami[_0xf72f('0x1d')](_0xf72f('0xd'),error);ami['once'](_0xf72f('0x1e'),close);module['exports']=ami;
\ No newline at end of file
index 41e017e..5066184 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1028=['rpc','error','memberReport','message','result','catch','jayson/promise','bluebird','ami','client','http','Request','request','debug'];(function(_0xf34895,_0x21fb70){var _0x143f44=function(_0x2e7730){while(--_0x2e7730){_0xf34895['push'](_0xf34895['shift']());}};_0x143f44(++_0x21fb70);}(_0x1028,0x156));var _0x8102=function(_0x16e705,_0x3c1245){_0x16e705=_0x16e705-0x0;var _0x1008fd=_0x1028[_0x16e705];return _0x1008fd;};'use strict';var jayson=require(_0x8102('0x0'));var BPromise=require(_0x8102('0x1'));var logger=require('../../config/logger')(_0x8102('0x2'));var client=jayson[_0x8102('0x3')][_0x8102('0x4')]({'port':0x2329});client[_0x8102('0x5')]=function(_0x10c20b,_0x32f606){return new BPromise(function(_0x4a9a26,_0x3ab51a){return client[_0x8102('0x6')](_0x10c20b,_0x32f606)['then'](function(_0x149b72){logger[_0x8102('0x7')](_0x8102('0x8'),'memberReport',_0x10c20b,_0x32f606,_0x149b72);if(_0x149b72[_0x8102('0x9')]){logger['error'](_0x8102('0x8'),_0x8102('0xa'),_0x10c20b,_0x149b72[_0x8102('0x9')][_0x8102('0xb')],_0x32f606);return _0x3ab51a(_0x149b72[_0x8102('0x9')][_0x8102('0xb')]);}else{return _0x4a9a26(_0x149b72[_0x8102('0xc')]);}})[_0x8102('0xd')](function(_0x3def78){logger[_0x8102('0x9')](_0x8102('0x8'),_0x8102('0xa'),_0x10c20b,_0x3def78,_0x32f606);return _0x3ab51a(_0x3def78);});});};module['exports']=client;
\ No newline at end of file
+var _0xf6db=['bluebird','../../config/logger','ami','client','http','Request','request','then','debug','rpc','memberReport','error','message','result','catch','jayson/promise'];(function(_0x504607,_0x5e32e7){var _0x19cf40=function(_0x1d23c6){while(--_0x1d23c6){_0x504607['push'](_0x504607['shift']());}};_0x19cf40(++_0x5e32e7);}(_0xf6db,0x16f));var _0xbf6d=function(_0x10bcc4,_0x4400e2){_0x10bcc4=_0x10bcc4-0x0;var _0x2da988=_0xf6db[_0x10bcc4];return _0x2da988;};'use strict';var jayson=require(_0xbf6d('0x0'));var BPromise=require(_0xbf6d('0x1'));var logger=require(_0xbf6d('0x2'))(_0xbf6d('0x3'));var client=jayson[_0xbf6d('0x4')][_0xbf6d('0x5')]({'port':0x2329});client[_0xbf6d('0x6')]=function(_0x5402f0,_0x5edd99){return new BPromise(function(_0x41ccab,_0x4bfdaa){return client[_0xbf6d('0x7')](_0x5402f0,_0x5edd99)[_0xbf6d('0x8')](function(_0x5e710c){logger[_0xbf6d('0x9')](_0xbf6d('0xa'),_0xbf6d('0xb'),_0x5402f0,_0x5edd99,_0x5e710c);if(_0x5e710c[_0xbf6d('0xc')]){logger[_0xbf6d('0xc')](_0xbf6d('0xa'),_0xbf6d('0xb'),_0x5402f0,_0x5e710c[_0xbf6d('0xc')][_0xbf6d('0xd')],_0x5edd99);return _0x4bfdaa(_0x5e710c[_0xbf6d('0xc')][_0xbf6d('0xd')]);}else{return _0x41ccab(_0x5e710c[_0xbf6d('0xe')]);}})[_0xbf6d('0xf')](function(_0x48c1db){logger[_0xbf6d('0xc')](_0xbf6d('0xa'),'memberReport',_0x5402f0,_0x48c1db,_0x5edd99);return _0x4bfdaa(_0x48c1db);});});};module['exports']=client;
\ No newline at end of file
index 8318f67..6a9d064 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6a17=['UserId','VoiceQueueId','CampaignId','idHopper','ContactFirstName','format','YYYY-MM-DD\x20HH:mm:ss','callback','callbackuniqueid','callbackat','recallme','originatecalleridname','getCaller','\x22%s\x22\x20<%s>','dialCutDigit','number','substring','prototype','getQueue','exports','util','lodash','moment','isNil','string','voiceQueue','uniqueid','name','Contact','firstName','lastName','queue','active','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry','ContactId','ListId'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x6a17,0x1e8));var _0x76a1=function(_0x5c6a26,_0x22091e){_0x5c6a26=_0x5c6a26-0x0;var _0x2a54f2=_0x6a17[_0x5c6a26];return _0x2a54f2;};'use strict';var util=require(_0x76a1('0x0'));var _=require(_0x76a1('0x1'));var moment=require(_0x76a1('0x2'));function checkNameSurname(_0x1a7f01,_0x23ab1a,_0x171415){var _0x59783d='';if(!_[_0x76a1('0x3')](_0x23ab1a)&&_0x76a1('0x4')===typeof _0x23ab1a){_0x59783d+=_0x23ab1a;}if(!_[_0x76a1('0x3')](_0x171415)&&_0x76a1('0x4')===typeof _0x171415){_0x59783d+='\x20'+_0x171415;}if(_0x59783d!==''){return _0x59783d;}return _0x1a7f01;}function Action(_0x2bfa73,_0x31e56c,_0x5e1cff){this[_0x76a1('0x5')]=_0x2bfa73;this[_0x76a1('0x6')]=_0x5e1cff||undefined;this[_0x76a1('0x7')]=checkNameSurname(_0x31e56c['Contact']['phone'],_0x31e56c[_0x76a1('0x8')][_0x76a1('0x9')],_0x31e56c[_0x76a1('0x8')][_0x76a1('0xa')]);this['number']=_0x31e56c[_0x76a1('0x8')]['phone'];this[_0x76a1('0xb')]=_0x2bfa73[_0x76a1('0x7')];this[_0x76a1('0xc')]=_0x31e56c[_0x76a1('0xc')]||![];this['type']=_0x2bfa73['type'];this['dialQueueTimeout']=_0x2bfa73['dialQueueTimeout']||0x3;this['scheduledat']=_0x31e56c[_0x76a1('0xd')];this[_0x76a1('0xe')]=_0x31e56c[_0x76a1('0xe')];this[_0x76a1('0xf')]=_0x31e56c[_0x76a1('0xf')];this[_0x76a1('0x10')]=_0x31e56c['countnoanswerretry'];this['ContactId']=_0x31e56c[_0x76a1('0x11')];this[_0x76a1('0x12')]=_0x31e56c[_0x76a1('0x12')];this[_0x76a1('0x13')]=_0x31e56c[_0x76a1('0x13')];this[_0x76a1('0x14')]=_0x31e56c['VoiceQueueId'];this[_0x76a1('0x15')]=_0x31e56c['CampaignId'];this[_0x76a1('0x16')]=_0x31e56c['id'];this[_0x76a1('0x17')]=_0x31e56c[_0x76a1('0x8')]['firstName']||'';this['starttime']=moment()[_0x76a1('0x18')](_0x76a1('0x19'));this['callback']=_0x31e56c[_0x76a1('0x1a')];this[_0x76a1('0x1b')]=_0x31e56c[_0x76a1('0x1b')];this['callbackat']=_0x31e56c[_0x76a1('0x1c')];this[_0x76a1('0x1d')]=_0x31e56c[_0x76a1('0x1d')];this['originatecalleridnum']='';this[_0x76a1('0x1e')]='';}Action['prototype'][_0x76a1('0x1f')]=function(){return util['format'](_0x76a1('0x20'),this[_0x76a1('0x7')],this['voiceQueue'][_0x76a1('0x21')]>0x0?this[_0x76a1('0x22')][_0x76a1('0x23')](this['voiceQueue'][_0x76a1('0x21')]):this['number']);};Action[_0x76a1('0x24')][_0x76a1('0x25')]=function(){return this[_0x76a1('0xb')];};module[_0x76a1('0x26')]=Action;
\ No newline at end of file
+var _0xf3b1=['ContactId','ListId','UserId','VoiceQueueId','CampaignId','ContactFirstName','firstName','starttime','format','YYYY-MM-DD\x20HH:mm:ss','callback','callbackuniqueid','callbackat','recallme','originatecalleridnum','prototype','getCaller','dialCutDigit','exports','util','lodash','isNil','string','voiceQueue','uniqueid','Contact','phone','lastName','number','queue','name','active','type','dialQueueTimeout','scheduledat','countbusyretry','countcongestionretry','countnoanswerretry'];(function(_0x2d2f1a,_0x57b966){var _0x55d9db=function(_0x15771f){while(--_0x15771f){_0x2d2f1a['push'](_0x2d2f1a['shift']());}};_0x55d9db(++_0x57b966);}(_0xf3b1,0xab));var _0x1f3b=function(_0x4bd617,_0x1e458f){_0x4bd617=_0x4bd617-0x0;var _0x382f51=_0xf3b1[_0x4bd617];return _0x382f51;};'use strict';var util=require(_0x1f3b('0x0'));var _=require(_0x1f3b('0x1'));var moment=require('moment');function checkNameSurname(_0x585b70,_0x857aa1,_0x4ebb7b){var _0x2628ed='';if(!_[_0x1f3b('0x2')](_0x857aa1)&&_0x1f3b('0x3')===typeof _0x857aa1){_0x2628ed+=_0x857aa1;}if(!_[_0x1f3b('0x2')](_0x4ebb7b)&&_0x1f3b('0x3')===typeof _0x4ebb7b){_0x2628ed+='\x20'+_0x4ebb7b;}if(_0x2628ed!==''){return _0x2628ed;}return _0x585b70;}function Action(_0x136f39,_0x11c734,_0x498454){this[_0x1f3b('0x4')]=_0x136f39;this[_0x1f3b('0x5')]=_0x498454||undefined;this['name']=checkNameSurname(_0x11c734[_0x1f3b('0x6')][_0x1f3b('0x7')],_0x11c734[_0x1f3b('0x6')]['firstName'],_0x11c734[_0x1f3b('0x6')][_0x1f3b('0x8')]);this[_0x1f3b('0x9')]=_0x11c734[_0x1f3b('0x6')][_0x1f3b('0x7')];this[_0x1f3b('0xa')]=_0x136f39[_0x1f3b('0xb')];this[_0x1f3b('0xc')]=_0x11c734[_0x1f3b('0xc')]||![];this['type']=_0x136f39[_0x1f3b('0xd')];this['dialQueueTimeout']=_0x136f39[_0x1f3b('0xe')]||0x3;this[_0x1f3b('0xf')]=_0x11c734['scheduledat'];this[_0x1f3b('0x10')]=_0x11c734[_0x1f3b('0x10')];this[_0x1f3b('0x11')]=_0x11c734[_0x1f3b('0x11')];this['countnoanswerretry']=_0x11c734[_0x1f3b('0x12')];this[_0x1f3b('0x13')]=_0x11c734[_0x1f3b('0x13')];this[_0x1f3b('0x14')]=_0x11c734[_0x1f3b('0x14')];this[_0x1f3b('0x15')]=_0x11c734[_0x1f3b('0x15')];this[_0x1f3b('0x16')]=_0x11c734[_0x1f3b('0x16')];this[_0x1f3b('0x17')]=_0x11c734['CampaignId'];this['idHopper']=_0x11c734['id'];this[_0x1f3b('0x18')]=_0x11c734[_0x1f3b('0x6')][_0x1f3b('0x19')]||'';this[_0x1f3b('0x1a')]=moment()[_0x1f3b('0x1b')](_0x1f3b('0x1c'));this[_0x1f3b('0x1d')]=_0x11c734['callback'];this[_0x1f3b('0x1e')]=_0x11c734[_0x1f3b('0x1e')];this[_0x1f3b('0x1f')]=_0x11c734['callbackat'];this[_0x1f3b('0x20')]=_0x11c734[_0x1f3b('0x20')];this[_0x1f3b('0x21')]='';this['originatecalleridname']='';}Action[_0x1f3b('0x22')][_0x1f3b('0x23')]=function(){return util[_0x1f3b('0x1b')]('\x22%s\x22\x20<%s>',this[_0x1f3b('0xb')],this[_0x1f3b('0x4')][_0x1f3b('0x24')]>0x0?this[_0x1f3b('0x9')]['substring'](this[_0x1f3b('0x4')][_0x1f3b('0x24')]):this[_0x1f3b('0x9')]);};Action['prototype']['getQueue']=function(){return this[_0x1f3b('0xa')];};module[_0x1f3b('0x25')]=Action;
\ No newline at end of file
index 79629b4..08f29c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb194=['number','starttime','responsetime','answertime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','ringtime','holdtime','talktime','membername','reason','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','originatecalleridnum','originatecalleridname','util','lodash','moment','milliseconds','diff','seconds','state','Answer','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','name','calleridnum'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xb194,0x13b));var _0x4b19=function(_0x26898a,_0x652a66){_0x26898a=_0x26898a-0x0;var _0x9d92b7=_0xb194[_0x26898a];return _0x9d92b7;};'use strict';var util=require(_0x4b19('0x0'));var _=require(_0x4b19('0x1'));var moment=require(_0x4b19('0x2'));function getSeconds(_0xe0669b,_0x30960a){var _0x39bda8=moment(_0xe0669b)[_0x4b19('0x3')](0x0);var _0x5a9cd0=moment(_0x30960a)[_0x4b19('0x3')](0x0);return _0x39bda8[_0x4b19('0x4')](_0x5a9cd0,_0x4b19('0x5'));}function AgentComplete(_0x312122,_0x568da3){this[_0x4b19('0x6')]=0x4;this['statedesc']=_0x4b19('0x7');this['scheduledat']=_0x312122[_0x4b19('0x8')];this[_0x4b19('0x9')]=_0x312122[_0x4b19('0x9')];this[_0x4b19('0xa')]=_0x312122[_0x4b19('0x9')]===_0x4b19('0xb')?_0x4b19('0xc'):_0x312122[_0x4b19('0x9')];this[_0x4b19('0xd')]=_0x312122[_0x4b19('0xd')];this[_0x4b19('0xe')]=_0x312122[_0x4b19('0xe')];this['countnoanswerretry']=_0x312122[_0x4b19('0xf')];this[_0x4b19('0x10')]=_0x312122['countbusyretry']+_0x312122['countcongestionretry']+_0x312122[_0x4b19('0xf')];this[_0x4b19('0x11')]=_0x568da3[_0x4b19('0x11')];this[_0x4b19('0x12')]=_0x312122[_0x4b19('0x13')];this[_0x4b19('0x14')]=_0x312122[_0x4b19('0x15')];this[_0x4b19('0x16')]=_0x312122[_0x4b19('0x16')];this[_0x4b19('0x17')]=_0x312122['responsetime'];this['answertime']=_0x312122[_0x4b19('0x18')];this[_0x4b19('0x19')]=moment()[_0x4b19('0x1a')](_0x4b19('0x1b'));this[_0x4b19('0x1c')]=getSeconds(_0x312122[_0x4b19('0x17')],_0x312122[_0x4b19('0x16')]);this[_0x4b19('0x1d')]=getSeconds(_0x312122[_0x4b19('0x18')],_0x312122[_0x4b19('0x17')]);this[_0x4b19('0x1e')]=getSeconds(this['endtime'],_0x312122['answertime']);this['queue']=_0x568da3[_0x4b19('0xc')];this['membername']=_0x568da3[_0x4b19('0x1f')];this['reason']=_0x568da3[_0x4b19('0x20')];this['callback']=_0x312122['callback'];this[_0x4b19('0x21')]=_0x312122[_0x4b19('0x21')];this[_0x4b19('0x22')]=_0x312122[_0x4b19('0x22')];this['recallme']=_0x312122[_0x4b19('0x23')];this[_0x4b19('0x24')]=_0x312122['ContactId'];this[_0x4b19('0x25')]=_0x312122['ListId'];this[_0x4b19('0x26')]=_0x312122['UserId'];this[_0x4b19('0x27')]=_0x312122['VoiceQueueId'];this['CampaignId']=_0x312122['CampaignId'];this['originatecalleridnum']=_0x312122[_0x4b19('0x28')]||'';this[_0x4b19('0x29')]=_0x312122[_0x4b19('0x29')]||'';}module['exports']=AgentComplete;
\ No newline at end of file
+var _0x505a=['holdtime','talktime','queue','membername','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','milliseconds','diff','state','statedesc','scheduledat','type','campaigntype','outbound','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','calleridnum','number','starttime','answertime','endtime','YYYY-MM-DD\x20HH:mm:ss','ringtime','responsetime'];(function(_0x2a75b5,_0x27649d){var _0x2017b3=function(_0x3d0950){while(--_0x3d0950){_0x2a75b5['push'](_0x2a75b5['shift']());}};_0x2017b3(++_0x27649d);}(_0x505a,0x1f1));var _0xa505=function(_0x3871a3,_0x3e89a0){_0x3871a3=_0x3871a3-0x0;var _0xcdb2a1=_0x505a[_0x3871a3];return _0xcdb2a1;};'use strict';var util=require(_0xa505('0x0'));var _=require('lodash');var moment=require('moment');function getSeconds(_0x1723b6,_0x2540f7){var _0xed4d73=moment(_0x1723b6)['milliseconds'](0x0);var _0x2879a3=moment(_0x2540f7)[_0xa505('0x1')](0x0);return _0xed4d73[_0xa505('0x2')](_0x2879a3,'seconds');}function AgentComplete(_0x51b504,_0x24fbac){this[_0xa505('0x3')]=0x4;this[_0xa505('0x4')]='Answer';this[_0xa505('0x5')]=_0x51b504['scheduledat'];this[_0xa505('0x6')]=_0x51b504[_0xa505('0x6')];this[_0xa505('0x7')]=_0x51b504[_0xa505('0x6')]===_0xa505('0x8')?'queue':_0x51b504['type'];this['countbusyretry']=_0x51b504[_0xa505('0x9')];this['countcongestionretry']=_0x51b504[_0xa505('0xa')];this[_0xa505('0xb')]=_0x51b504[_0xa505('0xb')];this[_0xa505('0xc')]=_0x51b504['countbusyretry']+_0x51b504[_0xa505('0xa')]+_0x51b504['countnoanswerretry'];this[_0xa505('0xd')]=_0x24fbac[_0xa505('0xd')];this[_0xa505('0xe')]=_0x51b504['name'];this[_0xa505('0xf')]=_0x51b504[_0xa505('0x10')];this['starttime']=_0x51b504[_0xa505('0x11')];this['responsetime']=_0x51b504['responsetime'];this['answertime']=_0x51b504[_0xa505('0x12')];this[_0xa505('0x13')]=moment()['format'](_0xa505('0x14'));this[_0xa505('0x15')]=getSeconds(_0x51b504[_0xa505('0x16')],_0x51b504[_0xa505('0x11')]);this[_0xa505('0x17')]=getSeconds(_0x51b504[_0xa505('0x12')],_0x51b504[_0xa505('0x16')]);this[_0xa505('0x18')]=getSeconds(this['endtime'],_0x51b504[_0xa505('0x12')]);this[_0xa505('0x19')]=_0x24fbac[_0xa505('0x19')];this['membername']=_0x24fbac[_0xa505('0x1a')];this['reason']=_0x24fbac[_0xa505('0x1b')];this[_0xa505('0x1c')]=_0x51b504[_0xa505('0x1c')];this[_0xa505('0x1d')]=_0x51b504[_0xa505('0x1d')];this[_0xa505('0x1e')]=_0x51b504[_0xa505('0x1e')];this[_0xa505('0x1f')]=_0x51b504['recallme'];this[_0xa505('0x20')]=_0x51b504[_0xa505('0x20')];this['ListId']=_0x51b504[_0xa505('0x21')];this[_0xa505('0x22')]=_0x51b504[_0xa505('0x22')];this[_0xa505('0x23')]=_0x51b504[_0xa505('0x23')];this[_0xa505('0x24')]=_0x51b504[_0xa505('0x24')];this[_0xa505('0x25')]=_0x51b504[_0xa505('0x25')]||'';this[_0xa505('0x26')]=_0x51b504[_0xa505('0x26')]||'';}module[_0xa505('0x27')]=AgentComplete;
\ No newline at end of file
index db08b37..5c603cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x72fa=['starttime','responsetime','endtime','ringtime','holdtime','talktime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','milliseconds','diff','seconds','uniqueid','scheduledat','type','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','calleridname','calleridnum'];(function(_0x3f903a,_0x29323){var _0x246387=function(_0x1958ac){while(--_0x1958ac){_0x3f903a['push'](_0x3f903a['shift']());}};_0x246387(++_0x29323);}(_0x72fa,0x78));var _0xa72f=function(_0x1ee5ef,_0x38d42b){_0x1ee5ef=_0x1ee5ef-0x0;var _0x448ab8=_0x72fa[_0x1ee5ef];return _0x448ab8;};'use strict';var util=require(_0xa72f('0x0'));var _=require(_0xa72f('0x1'));var moment=require('moment');function getSeconds(_0x28c7a9,_0x3db8b0){var _0x2a5e3a=moment(_0x28c7a9)['milliseconds'](0x0);var _0x5759b7=moment(_0x3db8b0)[_0xa72f('0x2')](0x0);return _0x2a5e3a[_0xa72f('0x3')](_0x5759b7,_0xa72f('0x4'));}function Final(_0x356b9d){this[_0xa72f('0x5')]=_0x356b9d[_0xa72f('0x5')];this[_0xa72f('0x6')]=_0x356b9d[_0xa72f('0x6')];this[_0xa72f('0x7')]=_0x356b9d[_0xa72f('0x7')];this['campaigntype']=_0x356b9d[_0xa72f('0x7')]===_0xa72f('0x8')?_0xa72f('0x9'):_0x356b9d['type'];this[_0xa72f('0xa')]=_0x356b9d[_0xa72f('0xa')];this['countcongestionretry']=_0x356b9d[_0xa72f('0xb')];this[_0xa72f('0xc')]=_0x356b9d[_0xa72f('0xc')];this[_0xa72f('0xd')]=_0x356b9d[_0xa72f('0xa')]+_0x356b9d[_0xa72f('0xb')]+_0x356b9d[_0xa72f('0xc')];this[_0xa72f('0x9')]=_0x356b9d[_0xa72f('0x9')];this[_0xa72f('0xe')]=_0x356b9d[_0xa72f('0xe')];this[_0xa72f('0xf')]=_0x356b9d['calleridnum'];this[_0xa72f('0x10')]=_0x356b9d[_0xa72f('0x10')];this[_0xa72f('0x11')]=_0x356b9d['responsetime'];this[_0xa72f('0x12')]=_0x356b9d['responsetime'];this[_0xa72f('0x13')]=_0x356b9d[_0xa72f('0x13')]||0x0;this['holdtime']=_0x356b9d[_0xa72f('0x14')]||0x0;this[_0xa72f('0x15')]=_0x356b9d[_0xa72f('0x15')]||0x0;this[_0xa72f('0x16')]=_0x356b9d['callback'];this[_0xa72f('0x17')]=_0x356b9d[_0xa72f('0x17')];this[_0xa72f('0x18')]=_0x356b9d[_0xa72f('0x18')];this['recallme']=_0x356b9d[_0xa72f('0x19')];this[_0xa72f('0x1a')]=_0x356b9d[_0xa72f('0x1a')];this[_0xa72f('0x1b')]=_0x356b9d[_0xa72f('0x1b')];this[_0xa72f('0x1c')]=_0x356b9d['UserId'];this[_0xa72f('0x1d')]=_0x356b9d['VoiceQueueId'];this[_0xa72f('0x1e')]=_0x356b9d[_0xa72f('0x1e')];this['originatecalleridnum']=_0x356b9d[_0xa72f('0x1f')]||'';this[_0xa72f('0x20')]=_0x356b9d[_0xa72f('0x20')]||'';}module[_0xa72f('0x21')]=Final;
\ No newline at end of file
+var _0xac6a=['queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','calleridname','calleridnum','starttime','responsetime','endtime','ringtime','holdtime','talktime','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','util','lodash','moment','milliseconds','diff','seconds','uniqueid','scheduledat','type','campaigntype'];(function(_0x13e013,_0x145e9a){var _0x341960=function(_0x19d4c1){while(--_0x19d4c1){_0x13e013['push'](_0x13e013['shift']());}};_0x341960(++_0x145e9a);}(_0xac6a,0xc2));var _0xaac6=function(_0x4d887c,_0x539295){_0x4d887c=_0x4d887c-0x0;var _0x1b7fb5=_0xac6a[_0x4d887c];return _0x1b7fb5;};'use strict';var util=require(_0xaac6('0x0'));var _=require(_0xaac6('0x1'));var moment=require(_0xaac6('0x2'));function getSeconds(_0x10ccdc,_0x2b5fe){var _0x55aaf1=moment(_0x10ccdc)[_0xaac6('0x3')](0x0);var _0x4c0cf4=moment(_0x2b5fe)[_0xaac6('0x3')](0x0);return _0x55aaf1[_0xaac6('0x4')](_0x4c0cf4,_0xaac6('0x5'));}function Final(_0x253349){this[_0xaac6('0x6')]=_0x253349[_0xaac6('0x6')];this[_0xaac6('0x7')]=_0x253349[_0xaac6('0x7')];this[_0xaac6('0x8')]=_0x253349[_0xaac6('0x8')];this[_0xaac6('0x9')]=_0x253349[_0xaac6('0x8')]==='outbound'?_0xaac6('0xa'):_0x253349[_0xaac6('0x8')];this[_0xaac6('0xb')]=_0x253349[_0xaac6('0xb')];this[_0xaac6('0xc')]=_0x253349[_0xaac6('0xc')];this['countnoanswerretry']=_0x253349[_0xaac6('0xd')];this[_0xaac6('0xe')]=_0x253349[_0xaac6('0xb')]+_0x253349[_0xaac6('0xc')]+_0x253349[_0xaac6('0xd')];this['queue']=_0x253349[_0xaac6('0xa')];this[_0xaac6('0xf')]=_0x253349['calleridname'];this['calleridnum']=_0x253349[_0xaac6('0x10')];this[_0xaac6('0x11')]=_0x253349[_0xaac6('0x11')];this[_0xaac6('0x12')]=_0x253349[_0xaac6('0x12')];this[_0xaac6('0x13')]=_0x253349[_0xaac6('0x12')];this[_0xaac6('0x14')]=_0x253349[_0xaac6('0x14')]||0x0;this[_0xaac6('0x15')]=_0x253349[_0xaac6('0x15')]||0x0;this[_0xaac6('0x16')]=_0x253349['talktime']||0x0;this['callback']=_0x253349[_0xaac6('0x17')];this[_0xaac6('0x18')]=_0x253349[_0xaac6('0x18')];this[_0xaac6('0x19')]=_0x253349[_0xaac6('0x19')];this['recallme']=_0x253349[_0xaac6('0x1a')];this[_0xaac6('0x1b')]=_0x253349[_0xaac6('0x1b')];this[_0xaac6('0x1c')]=_0x253349[_0xaac6('0x1c')];this[_0xaac6('0x1d')]=_0x253349[_0xaac6('0x1d')];this['VoiceQueueId']=_0x253349[_0xaac6('0x1e')];this[_0xaac6('0x1f')]=_0x253349[_0xaac6('0x1f')];this[_0xaac6('0x20')]=_0x253349[_0xaac6('0x20')]||'';this[_0xaac6('0x21')]=_0x253349[_0xaac6('0x21')]||'';}module['exports']=Final;
\ No newline at end of file
index 67d6b79..124d675 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9957=['state','statedesc','Answer','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','number','starttime','responsetime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','holdtime','talktime','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','seconds'];(function(_0x47a9ec,_0x41c0ef){var _0x319869=function(_0x234d9f){while(--_0x234d9f){_0x47a9ec['push'](_0x47a9ec['shift']());}};_0x319869(++_0x41c0ef);}(_0x9957,0x93));var _0x7995=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x9957[_0x501510];return _0x1e6ee5;};'use strict';var util=require(_0x7995('0x0'));var _=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));function getSeconds(_0x10a05d,_0x5b96eb){var _0x86c128=moment(_0x10a05d)[_0x7995('0x3')](0x0);var _0x1902b4=moment(_0x5b96eb)[_0x7995('0x3')](0x0);return _0x86c128['diff'](_0x1902b4,_0x7995('0x4'));}function Hangup(_0x1a36d8,_0x137b6b){this[_0x7995('0x5')]=0x4;this[_0x7995('0x6')]=_0x7995('0x7');this['scheduledat']=_0x1a36d8[_0x7995('0x8')];this[_0x7995('0x9')]=_0x1a36d8['type'];this[_0x7995('0xa')]=_0x1a36d8[_0x7995('0x9')]===_0x7995('0xb')?_0x7995('0xc'):_0x1a36d8[_0x7995('0x9')];this[_0x7995('0xd')]=_0x1a36d8[_0x7995('0xd')];this['countcongestionretry']=_0x1a36d8[_0x7995('0xe')];this[_0x7995('0xf')]=_0x1a36d8['countnoanswerretry'];this[_0x7995('0x10')]=_0x1a36d8[_0x7995('0xd')]+_0x1a36d8[_0x7995('0xe')]+_0x1a36d8[_0x7995('0xf')];this[_0x7995('0x11')]=_0x137b6b[_0x7995('0x11')];this[_0x7995('0x12')]=_0x1a36d8['name'];this['calleridnum']=_0x1a36d8[_0x7995('0x13')];this[_0x7995('0x14')]=_0x1a36d8[_0x7995('0x14')];this[_0x7995('0x15')]=_0x1a36d8[_0x7995('0x15')];this[_0x7995('0x16')]=moment()[_0x7995('0x17')](_0x7995('0x18'));this['ringtime']=getSeconds(_0x1a36d8[_0x7995('0x15')],_0x1a36d8['starttime']);this[_0x7995('0x19')]=0x0;this[_0x7995('0x1a')]=getSeconds(this[_0x7995('0x16')],_0x1a36d8[_0x7995('0x15')]);this[_0x7995('0xc')]=_0x1a36d8[_0x7995('0xc')];this['membername']='IVR';this[_0x7995('0x1b')]=_0x137b6b['cause-txt'];this['callback']=_0x1a36d8[_0x7995('0x1c')];this[_0x7995('0x1d')]=_0x1a36d8['callbackuniqueid'];this[_0x7995('0x1e')]=_0x1a36d8['callbackat'];this['recallme']=_0x1a36d8[_0x7995('0x1f')];this[_0x7995('0x20')]=_0x1a36d8[_0x7995('0x20')];this[_0x7995('0x21')]=_0x1a36d8[_0x7995('0x21')];this[_0x7995('0x22')]=_0x1a36d8['UserId'];this[_0x7995('0x23')]=_0x1a36d8[_0x7995('0x23')];this[_0x7995('0x24')]=_0x1a36d8[_0x7995('0x24')];}module[_0x7995('0x25')]=Hangup;
\ No newline at end of file
+var _0x9957=['state','statedesc','Answer','scheduledat','type','campaigntype','outbound','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','uniqueid','calleridname','number','starttime','responsetime','endtime','format','YYYY-MM-DD\x20HH:mm:ss','holdtime','talktime','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','exports','util','lodash','moment','milliseconds','seconds'];(function(_0x359480,_0x19360d){var _0x43d4d9=function(_0x5ab1a6){while(--_0x5ab1a6){_0x359480['push'](_0x359480['shift']());}};_0x43d4d9(++_0x19360d);}(_0x9957,0x93));var _0x7995=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0x9957[_0x501510];return _0x1e6ee5;};'use strict';var util=require(_0x7995('0x0'));var _=require(_0x7995('0x1'));var moment=require(_0x7995('0x2'));function getSeconds(_0x10a05d,_0x5b96eb){var _0x86c128=moment(_0x10a05d)[_0x7995('0x3')](0x0);var _0x1902b4=moment(_0x5b96eb)[_0x7995('0x3')](0x0);return _0x86c128['diff'](_0x1902b4,_0x7995('0x4'));}function Hangup(_0x1a36d8,_0x137b6b){this[_0x7995('0x5')]=0x4;this[_0x7995('0x6')]=_0x7995('0x7');this['scheduledat']=_0x1a36d8[_0x7995('0x8')];this[_0x7995('0x9')]=_0x1a36d8['type'];this[_0x7995('0xa')]=_0x1a36d8[_0x7995('0x9')]===_0x7995('0xb')?_0x7995('0xc'):_0x1a36d8[_0x7995('0x9')];this[_0x7995('0xd')]=_0x1a36d8[_0x7995('0xd')];this['countcongestionretry']=_0x1a36d8[_0x7995('0xe')];this[_0x7995('0xf')]=_0x1a36d8['countnoanswerretry'];this[_0x7995('0x10')]=_0x1a36d8[_0x7995('0xd')]+_0x1a36d8[_0x7995('0xe')]+_0x1a36d8[_0x7995('0xf')];this[_0x7995('0x11')]=_0x137b6b[_0x7995('0x11')];this[_0x7995('0x12')]=_0x1a36d8['name'];this['calleridnum']=_0x1a36d8[_0x7995('0x13')];this[_0x7995('0x14')]=_0x1a36d8[_0x7995('0x14')];this[_0x7995('0x15')]=_0x1a36d8[_0x7995('0x15')];this[_0x7995('0x16')]=moment()[_0x7995('0x17')](_0x7995('0x18'));this['ringtime']=getSeconds(_0x1a36d8[_0x7995('0x15')],_0x1a36d8['starttime']);this[_0x7995('0x19')]=0x0;this[_0x7995('0x1a')]=getSeconds(this[_0x7995('0x16')],_0x1a36d8[_0x7995('0x15')]);this[_0x7995('0xc')]=_0x1a36d8[_0x7995('0xc')];this['membername']='IVR';this[_0x7995('0x1b')]=_0x137b6b['cause-txt'];this['callback']=_0x1a36d8[_0x7995('0x1c')];this[_0x7995('0x1d')]=_0x1a36d8['callbackuniqueid'];this[_0x7995('0x1e')]=_0x1a36d8['callbackat'];this['recallme']=_0x1a36d8[_0x7995('0x1f')];this[_0x7995('0x20')]=_0x1a36d8[_0x7995('0x20')];this[_0x7995('0x21')]=_0x1a36d8[_0x7995('0x21')];this[_0x7995('0x22')]=_0x1a36d8['UserId'];this[_0x7995('0x23')]=_0x1a36d8[_0x7995('0x23')];this[_0x7995('0x24')]=_0x1a36d8[_0x7995('0x24')];}module[_0x7995('0x25')]=Hangup;
\ No newline at end of file
index 66e61e6..9422db8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x88d7=['callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','moment','milliseconds','diff','uniqueid','scheduledat','type','campaigntype','queue','countbusyretry','countcongestionretry','countnoanswerretry','countglobal','calleridname','name','calleridnum','number','starttime','responsetime','ringtime','talktime'];(function(_0x5da91c,_0x115db6){var _0x575b9d=function(_0x101da8){while(--_0x101da8){_0x5da91c['push'](_0x5da91c['shift']());}};_0x575b9d(++_0x115db6);}(_0x88d7,0x1a4));var _0x788d=function(_0x406289,_0x31d159){_0x406289=_0x406289-0x0;var _0x4545e6=_0x88d7[_0x406289];return _0x4545e6;};'use strict';var util=require(_0x788d('0x0'));var _=require(_0x788d('0x1'));var moment=require(_0x788d('0x2'));function getSeconds(_0x3f39d9,_0x597e70){var _0x579ae2=moment(_0x3f39d9)[_0x788d('0x3')](0x0);var _0x353614=moment(_0x597e70)[_0x788d('0x3')](0x0);return _0x579ae2[_0x788d('0x4')](_0x353614,'seconds');}function History(_0x177562){this[_0x788d('0x5')]=_0x177562['uniqueid'];this[_0x788d('0x6')]=_0x177562['scheduledat']||undefined;this[_0x788d('0x7')]=_0x177562['type'];this[_0x788d('0x8')]=_0x177562[_0x788d('0x7')]==='outbound'?_0x788d('0x9'):_0x177562[_0x788d('0x7')];this[_0x788d('0xa')]=_0x177562[_0x788d('0xa')];this['countcongestionretry']=_0x177562[_0x788d('0xb')];this[_0x788d('0xc')]=_0x177562['countnoanswerretry'];this[_0x788d('0xd')]=_0x177562[_0x788d('0xa')]+_0x177562[_0x788d('0xb')]+_0x177562['countnoanswerretry'];this[_0x788d('0x9')]=_0x177562['queue'];this[_0x788d('0xe')]=_0x177562[_0x788d('0xf')];this[_0x788d('0x10')]=_0x177562[_0x788d('0x11')];this[_0x788d('0x12')]=_0x177562[_0x788d('0x12')];this[_0x788d('0x13')]=_0x177562[_0x788d('0x13')];this['endtime']=_0x177562['responsetime'];this[_0x788d('0x14')]=getSeconds(_0x177562[_0x788d('0x13')],_0x177562[_0x788d('0x12')]);this['holdtime']=0x0;this[_0x788d('0x15')]=0x0;this[_0x788d('0x16')]=_0x177562['callback'];this[_0x788d('0x17')]=_0x177562[_0x788d('0x17')];this[_0x788d('0x18')]=_0x177562[_0x788d('0x18')];this[_0x788d('0x19')]=_0x177562['recallme'];this[_0x788d('0x1a')]=_0x177562[_0x788d('0x1a')];this[_0x788d('0x1b')]=_0x177562['ListId'];this[_0x788d('0x1c')]=_0x177562['UserId'];this[_0x788d('0x1d')]=_0x177562['VoiceQueueId'];this['CampaignId']=_0x177562[_0x788d('0x1e')];this[_0x788d('0x1f')]=_0x177562['originatecalleridnum']||'';this[_0x788d('0x20')]=_0x177562[_0x788d('0x20')]||'';}module[_0x788d('0x21')]=History;
\ No newline at end of file
+var _0x3e17=['starttime','responsetime','endtime','ringtime','talktime','callback','callbackuniqueid','callbackat','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','moment','milliseconds','diff','seconds','uniqueid','scheduledat','type','campaigntype','queue','countbusyretry','countnoanswerretry','countglobal','countcongestionretry','calleridname','calleridnum','number'];(function(_0x233549,_0x5c5260){var _0x283a1e=function(_0x49f31d){while(--_0x49f31d){_0x233549['push'](_0x233549['shift']());}};_0x283a1e(++_0x5c5260);}(_0x3e17,0x120));var _0x73e1=function(_0x57b54c,_0x54ce0d){_0x57b54c=_0x57b54c-0x0;var _0x59cc19=_0x3e17[_0x57b54c];return _0x59cc19;};'use strict';var util=require(_0x73e1('0x0'));var _=require(_0x73e1('0x1'));var moment=require(_0x73e1('0x2'));function getSeconds(_0x2509e9,_0x469a63){var _0x3ff49a=moment(_0x2509e9)[_0x73e1('0x3')](0x0);var _0x26d564=moment(_0x469a63)[_0x73e1('0x3')](0x0);return _0x3ff49a[_0x73e1('0x4')](_0x26d564,_0x73e1('0x5'));}function History(_0x8a84c0){this['uniqueid']=_0x8a84c0[_0x73e1('0x6')];this['scheduledat']=_0x8a84c0[_0x73e1('0x7')]||undefined;this[_0x73e1('0x8')]=_0x8a84c0[_0x73e1('0x8')];this[_0x73e1('0x9')]=_0x8a84c0[_0x73e1('0x8')]==='outbound'?_0x73e1('0xa'):_0x8a84c0['type'];this['countbusyretry']=_0x8a84c0[_0x73e1('0xb')];this['countcongestionretry']=_0x8a84c0['countcongestionretry'];this[_0x73e1('0xc')]=_0x8a84c0[_0x73e1('0xc')];this[_0x73e1('0xd')]=_0x8a84c0['countbusyretry']+_0x8a84c0[_0x73e1('0xe')]+_0x8a84c0[_0x73e1('0xc')];this['queue']=_0x8a84c0[_0x73e1('0xa')];this[_0x73e1('0xf')]=_0x8a84c0['name'];this[_0x73e1('0x10')]=_0x8a84c0[_0x73e1('0x11')];this[_0x73e1('0x12')]=_0x8a84c0[_0x73e1('0x12')];this[_0x73e1('0x13')]=_0x8a84c0[_0x73e1('0x13')];this[_0x73e1('0x14')]=_0x8a84c0['responsetime'];this[_0x73e1('0x15')]=getSeconds(_0x8a84c0['responsetime'],_0x8a84c0[_0x73e1('0x12')]);this['holdtime']=0x0;this[_0x73e1('0x16')]=0x0;this[_0x73e1('0x17')]=_0x8a84c0[_0x73e1('0x17')];this[_0x73e1('0x18')]=_0x8a84c0[_0x73e1('0x18')];this[_0x73e1('0x19')]=_0x8a84c0[_0x73e1('0x19')];this['recallme']=_0x8a84c0['recallme'];this[_0x73e1('0x1a')]=_0x8a84c0['ContactId'];this[_0x73e1('0x1b')]=_0x8a84c0[_0x73e1('0x1b')];this[_0x73e1('0x1c')]=_0x8a84c0['UserId'];this[_0x73e1('0x1d')]=_0x8a84c0[_0x73e1('0x1d')];this[_0x73e1('0x1e')]=_0x8a84c0[_0x73e1('0x1e')];this[_0x73e1('0x1f')]=_0x8a84c0[_0x73e1('0x1f')]||'';this['originatecalleridname']=_0x8a84c0[_0x73e1('0x20')]||'';}module[_0x73e1('0x21')]=History;
\ No newline at end of file
index e4c19da..c214e5b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5f66=['\x20INTERVAL_IS_NULL','Intervals','isEmpty','[ifTime][Action]','Error','stringify','diff','seconds','type','outbound','strategy','answered','available','pTalking','sumDuration','sumHoldTime','talking','total','unmanaged','abandoned','waiting','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','originated','Trunk','active','callerid','format','voice:queue:%s','voice_queue:save','ivr','campaign:ivr:%s','campaign:save','predictiveIntervalAvgTalktime','info','[checkGetDataPredictive][avgTalktime]','[checkGetDataPredictive][avgHoldtime]','[checkGetDataPredictive][totalCalls]','[checkGetDataPredictive][objIsEmpty]','[checkGetDataPredictive][obj]','[ErlangB]','milliseconds','[freeVariablesPredictive]','handlePredictive','string','\x22%s\x22\x20<%s>','error','inspect','length','hasOwnProperty','[decremetOriginate]\x20object\x20originated\x20is\x20negative','contactsRescheduled','RESCHEDULED_CONTACTS','contacts','[getContactDialer2][Empty]','sendMessageOneNotActive','[syncQueueSummary]\x20Campaign\x20Queue:\x20','is\x20not\x20active','IS_DISACTIVED','is\x20disactive','state','endtime','clearZombieChannels','uniqueId','[uniqueid]','[actions]','isNil','status','channel','No\x20such\x20channel','updateOriginated','[Dialer][checkChannel]','queue','countReScheduled','then','catch','[countReScheduled]\x20','checkIsBlackList','resolve','checkIsBlackListIvr','[checkIsBlackListIvr]\x20','avgHandleTime','[averageHandleTime]\x20','rescheduleContact','getContactDialer','[getContactDialer]\x20','getContactDialerIvr','getVoiceQueueRtPauses','[getVoiceQueueRtPauses]\x20','moveContactManagedDialer','[moveContactManagedDialer]\x20','createHistory','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','loggerHandler','emptyContact','saveInDb','merge','pick','ContactId','CampaignId','[emptyContact][createHistory]','[emptyContact]','Success','SIP/%s','unmonitored','uniqueid','variable','amdstatus','exten','xcally-motion-dialer','dialAMDActive','value','HANGUP','statedesc','HangupInAMD','membername','AMD','[syncHangupInAMD][createHistory]','[syncHangupInAMD]','MACHINE','amd','[syncMachine][createHistory]','[syncHangupInAMDIvr][createHistory]','Machine','[syncMachineIvr][createHistory]','[syncMachineIvr]','syncHangup','ivrAnswerCallsDay','[syncHangupIvr][createHistory]','[syncHangupIvr]','dialQueueProject','AGI','cause-txt','Unknow','agent','dialQueueProject2','dialAgiAfterHangupAgent','YYYY-MM-DD\x20HH:mm:ss','[syncAgentComplete][createHistory]','[syncAgentComplete]','answertime','queueCallerAbandonCreateState','droptime','dropreason','TIMEOUT','agiafterat','Abandoned','actionid','locked','stateinterface','push','[unlockQueueStatus][undefined]','queueStatusComplete','[booked][unlockQueueStatus]','syncQueueStatusComplete','run','idHopper','finally','ListId','VoiceQueueId','[unlock][syncQueueStatusComplete]','_rr','unlockRR','[booked][RR]','Agent:\x20','contactAgent-idHopper:\x20','paused','[Catch][Preview][syncQueueStatusComplete]','[booked][unlock]','[booked][unlock2]','[unlock2][syncQueueStatusComplete]','[booked][unlock3]','[unlock3][syncQueueStatusComplete]','isTrunkReachable','TrunkBackup','TRUNK_IS_NOT_REACHABLE','\x20trunk\x20is\x20not\x20reachable','checkIfTime','ifTime','checkIfTimeIntervals','Failure','\x20Intervals\x20is\x20null\x20','INTERVAL_IS_EMPTY','\x20Intervals\x20is\x20empty\x20','timezones','TIMEZONE_UNKNOW','\x20Timezone\x20unknow\x20','Action','command','interval','content','indexOf','true','iftime\x20%s,%s','all','some','GLOBAL_INTERVAL_IS_OVERTIME','[ifTime][promiseAll]','Global:\x20','\x20Interval\x20is\x20overtime:\x20','Timezone:\x20','progressive','power','handlePower','dialPowerLevel','predictive','method\x20not\x20recognized','launchHandleIvr','handleIvr','checkIsTrunkReachable','dialGlobalInterval','dialTimezone','checkDialMethod','syncCampaigns','\x5cw{0,','pow','replace','random','match','actionOriginate','object','originate','voiceQueue\x20is\x20undefine','phone','contact\x20is\x20undefine','getCaller','\x22agi://%s/square,%s\x22','NONE','\x22%s,%s%s,,,%s\x22','dialQueueOptions','dialQueueTimeout','ACTIVE','XMD-AMDINITIALSILENCE','dialAMDInitialSilence','XMD-AMDAFTERGREETINGSILENCE','dialAMDAfterGreetingSilence','XMD-AMDTOTALANALYSISTIME','dialAMDTotalAnalysisTime','XMD-AMDMINWORDLENGTH','dialAMDMinWordLength','XMD-AMDBETWEENWORDSSILENCE','dialAMDBetweenWordsSilence','XMD-AMDMAXIMUMNUMBEROFWORDS','dialAMDMaximumNumberOfWords','XMD-AMDSILENCETHRESHOLD','dialAMDSilenceThreshold','XMD-AMDMAXIMUMWORDLENGTH','dialAMDMaximumWordLength','XMD-CAMPAIGNID','Contact','tags','createdAt','updatedAt','%s%s','dialRandomLastDigitCallerIdNumber','XMD-ORIGINATECALLERIDNAME','originatecalleridname','originatecalleridnum','SIP/%s/%s%s','dialPrefix','trim','substring','dialCutDigit','from-sip','OriginateError','starttime','[originate][error]','originate\x20action\x20Error','response','[callProgressDetecting]\x20','checkRetriveMax','countbusyretry','countcongestionretry','countnoanswerretry','add','dialNoAnswerRetryFrequency','[rescheduleContact][NoAnswer]','dialBusyMaxRetry','minutes','[rescheduleContact]\x20[Busy]','dialCongestionMaxRetry','dialCongestionRetryFrequency','[rescheduleContact]\x20[Congestion]','callProgressDetecting','[callProgressDetecting]','entity\x20is\x20undefine','evt\x20is\x20undefine','reason','NoSuchNumber','dialGlobalMaxRetry','stateGlobal','reason\x200\x20no\x20such\x20number....','NoAnswer','countglobal','[syncAgentComplete][createHistory][3]','dialNoAnswerMaxRetry','reason\x203\x20ringing\x20no\x20answer','Busy','createStateFinal','reason\x205\x20busy','Congestion','reason\x208\x20congestion','Global','[moveContactManagedDialer][0]','contact\x20not\x20moved','dialPredictiveOptimizationPercentage','loggedIn','floor','erlangCalls','[startMethodPredictive][StartProgressive][First]','[startMethodPredictive][StartProgressive]','check\x20handlePredictive\x20is\x20not\x20undefine','[startMethodPredictive][StartProgressive][Date]','dialPredictiveInterval','[startMethodPredictive][StartProgressive][Loop]','dialPredictiveOptimization','dropRate','Dropped\x20calls\x20day','[stopMethodPredictive][ReStartProgressive][LowerLimitInterval]','Agent\x20free','agent\x20max\x20free\x20','[stopMethodPredictive][ReStartProgressive][ExceededDropInterval]','Drop\x20in\x20this\x20interval','[startMethodPredictive][StartPredictive][First]','getDataPredictive','startMethodPredictive','[startMethodPredictive][StartPredictive][Repeat]','averageHandleTime','predictiveIntervalHitRate','abandonmentRate','[CatchErlangB]','agentBusyFactor','predictiveIntervalTotalCalls','outboundQueuePauses','busyFactor','[getDataPredictive]','check\x20failure','[startMethodPredictive]','[handlePredictive]','[startMethodPredictive][milliseconds]\x20','Failure\x20','queueStatusComplete:\x20','Queue:\x20','queuestatus','[unlockOriginate][syncQueueStatusComplete]','[booked][checkContactBlack][else]','scheduledat','dialRecallMeTimeout','dialRecallInQueue','RECALLINQUEUE','RecallInQueue','[Originate][HistoryDialRecallInQueue][historyCatch]','RecallFailedTimeout','[Originate][HistoryRecallClose][historyCatch]','[Originate][HistoryRecallClose]','BLACKLIST','Blacklist','[Originate][historyBlacklist]','[Originate][MoveBlacklist]','limitCalls','temp','maxNumberOriginate','dialOrderByScheduledAt','AVAILABLE_CONTACTS_FINISHED','[getContactCampaign2][Empty]','ivrTotalCallsDays','checkContactBlack','[actionOriginateIvr]\x20','[getContactCampaign2]','dialLimitQueue','not_inuse','RUNNING','Contact.phone','[actionOriginate]\x20','[getContactDialer2]','[handlePredictive][limitChannel]','reachable','[getContactDialerPredictive]','[abandonmentRate]','\x20interval\x20=\x20','\x20Ts\x20=\x20','\x20p\x20=\x20','m\x20=\x20','interval\x20=\x20','Amax\x20=\x20','[busyFactor]','Ts\x20=\x20','exports','lodash','uuid','moment','md5','ioredis','../../../config/environment/','dialer','booked','../../../config/logger','predictiveCalls','syncQueueSummary','../ami','redis','defaults','socket.io-emitter','../rpc/cmHopper','../rpc/cmHopperFinal','../rpc/cmHopperBlack','./history','./agentComplete','./hangup','env','XCALLY_IP_AGI','127.0.0.1','rrmemory','roundrobin','prototype','enqueue','tail','sequence','preview','voiceQueues','campaigns','agents','trunks','actions','contactsId','optionPredictive','startPredictive','startProgressive','ivrOriginated','queueBooked','queueBookedRR','syncAgentConnect','syncQueueCallerAbandon','bind','syncOriginateResponse','agentcomplete','syncAgentComplete','custom:queuesummary','newexten','syncNewExten','varset','syncVarSet','queuemember','syncQueueMember','loopCampaigns','loopClearZombieChannels','isUndefined','message','\x20AGENTS\x20NOT\x20LOGGED','NOT_ACTIVE','name','\x20NOT\x20Active','Interval','INTERVAL_IS_NULL'];(function(_0x57b54c,_0x54ce0d){var _0x59cc19=function(_0xa33bc6){while(--_0xa33bc6){_0x57b54c['push'](_0x57b54c['shift']());}};_0x59cc19(++_0x54ce0d);}(_0x5f66,0x1a0));var _0x65f6=function(_0x4c12ec,_0x2e9103){_0x4c12ec=_0x4c12ec-0x0;var _0x3ae42c=_0x5f66[_0x4c12ec];return _0x3ae42c;};'use strict';var util=require('util');var _=require(_0x65f6('0x0'));var BPromise=require('bluebird');var uuid=require(_0x65f6('0x1'));var moment=require(_0x65f6('0x2'));var rr=require('rr');var md5=require(_0x65f6('0x3'));var Redis=require(_0x65f6('0x4'));var config=require(_0x65f6('0x5'));var logger=require('../../../config/logger')(_0x65f6('0x6'));var loggerBooked=require('../../../config/logger')(_0x65f6('0x7'));var loggerPredictive=require(_0x65f6('0x8'))('predictive');var loggerPredictiveCalls=require('../../../config/logger')(_0x65f6('0x9'));var loggerSyncQueueSummary=require(_0x65f6('0x8'))(_0x65f6('0xa'));var ami=require(_0x65f6('0xb'));config[_0x65f6('0xc')]=_[_0x65f6('0xd')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x65f6('0xe'))(new Redis(config[_0x65f6('0xc')]));var cmHopper=require(_0x65f6('0xf'));var cmHopperFinal=require(_0x65f6('0x10'));var cmHopperHistory=require('../rpc/cmHopperHistory');var cmHopperBlack=require(_0x65f6('0x11'));var voiceQueueRt=require('../rpc/voiceQueueRt');var Action=require('./action');var History=require(_0x65f6('0x12'));var Final=require('./final');var AgentComplete=require(_0x65f6('0x13'));var QueueCallerAbandon=require('./queueCallerAbandon');var Hangup=require(_0x65f6('0x14'));var ipAgi=process[_0x65f6('0x15')][_0x65f6('0x16')]||_0x65f6('0x17');var strategy={'rrmemory':_0x65f6('0x18'),'roundrobin':_0x65f6('0x19')};var Sequence=function(){};Sequence[_0x65f6('0x1a')][_0x65f6('0x1b')]=function(_0x46dbc6){this[_0x65f6('0x1c')]=this['tail']?this[_0x65f6('0x1c')]['finally'](_0x46dbc6):_0x46dbc6();};function Dialer(_0x5dd324,_0x1693e6){this[_0x65f6('0x1d')]=new Sequence();this[_0x65f6('0x1e')]=_0x1693e6;this[_0x65f6('0x1f')]=_0x5dd324[_0x65f6('0x1f')];this[_0x65f6('0x20')]=_0x5dd324[_0x65f6('0x20')];this[_0x65f6('0x21')]=_0x5dd324['agents'];this['trunks']=_0x5dd324[_0x65f6('0x22')];this['maxNumberOriginate']=config['maxNumberOriginate']||0x2;this['channels']={};this[_0x65f6('0x23')]={};this[_0x65f6('0x24')]={};this['uniqueId']={};this[_0x65f6('0x25')]={};this[_0x65f6('0x26')]={};this[_0x65f6('0x27')]={};this[_0x65f6('0x28')]={};this[_0x65f6('0x29')]={};this[_0x65f6('0x2a')]={};ami['on']('agentconnect',this[_0x65f6('0x2b')]['bind'](this));ami['on']('queuecallerabandon',this[_0x65f6('0x2c')][_0x65f6('0x2d')](this));ami['on']('originateresponse',this[_0x65f6('0x2e')][_0x65f6('0x2d')](this));ami['on'](_0x65f6('0x2f'),this[_0x65f6('0x30')]['bind'](this));ami['on'](_0x65f6('0x31'),this[_0x65f6('0xa')][_0x65f6('0x2d')](this));ami['on']('hangup',this['syncHangup']['bind'](this));ami['on'](_0x65f6('0x32'),this[_0x65f6('0x33')]['bind'](this));ami['on'](_0x65f6('0x34'),this[_0x65f6('0x35')]['bind'](this));ami['on'](_0x65f6('0x36'),this[_0x65f6('0x37')][_0x65f6('0x2d')](this));ami['on']('queuestatuscomplete',this['syncQueueStatusComplete']['bind'](this));this[_0x65f6('0x38')]();this[_0x65f6('0x39')]();}function isNotNull(_0x4344b3){return _0x4344b3!==null&&!_[_0x65f6('0x3a')](_0x4344b3);}function checkIsLoggedIn(_0x518cac,_0x14a387){return function(){if(_0x14a387<=0x0){_0x518cac[_0x65f6('0x3b')]='AGENTS_NOT_LOGGED';throw _0x518cac['name']+_0x65f6('0x3c');}};}function isActive(_0x27e284){return _0x27e284;}function checkIsActive(_0x5878bc,_0x4e50c0){return function(){if(!isActive(_0x4e50c0)){_0x5878bc[_0x65f6('0x3b')]=_0x65f6('0x3d');throw _0x5878bc[_0x65f6('0x3e')]+_0x65f6('0x3f');}};}function checkInterval(_0x1217fd){return function(){if(!isNotNull(_0x1217fd[_0x65f6('0x40')])){_0x1217fd['message']=_0x65f6('0x41');throw _0x1217fd[_0x65f6('0x3e')]+_0x65f6('0x42');}if(!isNotNull(_0x1217fd['Interval'][_0x65f6('0x43')])){_0x1217fd[_0x65f6('0x3b')]=_0x65f6('0x41');throw _0x1217fd[_0x65f6('0x3e')]+_0x65f6('0x42');}if(!isNotNull(_[_0x65f6('0x44')](_0x1217fd['Interval'][_0x65f6('0x43')]))){_0x1217fd[_0x65f6('0x3b')]='INTERVAL_IS_NULL';throw _0x1217fd[_0x65f6('0x3e')]+'\x20INTERVAL_IS_NULL';}};}function msgResponse(_0x2b403b,_0x50494b,_0x2b9fb6){return{'action':_0x2b403b,'response':_0x50494b,'message':_0x2b9fb6};}function myreject(_0x24f7fd){return function(_0x5ce050){return _0x24f7fd(msgResponse(_0x65f6('0x45'),_0x65f6('0x46'),JSON[_0x65f6('0x47')](_0x5ce050)));};}function getSeconds(_0x515648,_0x582c7e){var _0x30109d=moment(_0x515648)['milliseconds'](0x0);var _0x26de30=moment(_0x582c7e)['milliseconds'](0x0);return _0x30109d[_0x65f6('0x48')](_0x26de30,_0x65f6('0x49'));}function emit(_0x5e97f1,_0x44b809,_0x57b1f5){io['to'](_0x5e97f1)['emit'](_0x44b809,_0x57b1f5);}function emitVoiceQueueSummary(_0x71b16b){if(_0x71b16b[_0x65f6('0x4a')]===_0x65f6('0x4b')){var _0x313be5={'id':_0x71b16b['id'],'name':_0x71b16b[_0x65f6('0x3e')],'strategy':_0x71b16b[_0x65f6('0x4c')],'answered':_0x71b16b[_0x65f6('0x4d')],'available':_0x71b16b[_0x65f6('0x4e')],'loggedIn':_0x71b16b['loggedIn'],'pTalking':_0x71b16b[_0x65f6('0x4f')],'sumBillable':_0x71b16b['sumBillable'],'sumDuration':_0x71b16b[_0x65f6('0x50')],'sumHoldTime':_0x71b16b[_0x65f6('0x51')]||0x0,'talking':_0x71b16b[_0x65f6('0x52')],'total':_0x71b16b[_0x65f6('0x53')],'type':_0x71b16b['type'],'unmanaged':_0x71b16b[_0x65f6('0x54')],'abandoned':_0x71b16b[_0x65f6('0x55')],'waiting':_0x71b16b[_0x65f6('0x56')],'loggedInDb':_0x71b16b[_0x65f6('0x57')],'dialActive':_0x71b16b[_0x65f6('0x58')],'dialMethod':_0x71b16b[_0x65f6('0x59')],'dialOriginateCallerIdName':_0x71b16b[_0x65f6('0x5a')],'dialOriginateCallerIdNumber':_0x71b16b[_0x65f6('0x5b')],'dialOriginateTimeout':_0x71b16b[_0x65f6('0x5c')],'dialPrefix':_0x71b16b['dialPrefix'],'outboundAnswerAgiCallsDay':_0x71b16b[_0x65f6('0x5d')],'outboundAnswerCallsDay':_0x71b16b[_0x65f6('0x5e')],'outboundBlacklistCallsDay':_0x71b16b[_0x65f6('0x5f')],'outboundBusyCallsDay':_0x71b16b[_0x65f6('0x60')],'outboundCongestionCallsDay':_0x71b16b[_0x65f6('0x61')],'outboundDropCallsDayACS':_0x71b16b[_0x65f6('0x62')],'outboundDropCallsDayCallersExit':_0x71b16b[_0x65f6('0x63')],'outboundDropCallsDayTimeout':_0x71b16b[_0x65f6('0x64')],'outboundNoAnswerCallsDay':_0x71b16b[_0x65f6('0x65')],'outboundNoSuchCallsDay':_0x71b16b[_0x65f6('0x66')],'outboundOriginateFailureCallsDay':_0x71b16b[_0x65f6('0x67')],'outboundReCallsDay':_0x71b16b[_0x65f6('0x68')],'outboundRejectCallsDay':_0x71b16b[_0x65f6('0x69')],'outboundUnknownCallsDay':_0x71b16b[_0x65f6('0x6a')],'predictiveIntervalAnsweredCalls':_0x71b16b[_0x65f6('0x6b')],'predictiveIntervalAvgHoldtime':_0x71b16b[_0x65f6('0x6c')],'predictiveIntervalAvgTalktime':_0x71b16b['predictiveIntervalAvgTalktime'],'predictiveIntervalDroppedCallsCallersExit':_0x71b16b[_0x65f6('0x6d')],'predictiveIntervalDroppedCallsTimeout':_0x71b16b[_0x65f6('0x6e')],'predictiveIntervalErlangCalls':_0x71b16b[_0x65f6('0x6f')],'predictiveIntervalErlangCallsDroppedCalls':_0x71b16b[_0x65f6('0x70')],'predictiveIntervalHitRate':_0x71b16b['predictiveIntervalHitRate'],'predictiveIntervalLowerLimit':_0x71b16b[_0x65f6('0x71')],'predictiveIntervalMultiplicativeFactor':_0x71b16b[_0x65f6('0x72')],'predictiveIntervalPauses':_0x71b16b[_0x65f6('0x73')],'predictiveIntervalTotalCalls':_0x71b16b['predictiveIntervalTotalCalls'],'message':_0x71b16b[_0x65f6('0x3b')],'originated':_0x71b16b[_0x65f6('0x74')]};if(_0x71b16b[_0x65f6('0x75')]){_0x313be5[_0x65f6('0x75')]={'id':_0x71b16b['Trunk']['id'],'name':_0x71b16b[_0x65f6('0x75')]['name'],'active':_0x71b16b[_0x65f6('0x75')][_0x65f6('0x76')],'callerid':_0x71b16b['Trunk'][_0x65f6('0x77')]};}if(_0x71b16b['Interval']){_0x313be5[_0x65f6('0x40')]={'id':_0x71b16b[_0x65f6('0x40')]['id'],'name':_0x71b16b[_0x65f6('0x40')][_0x65f6('0x3e')]};}var _0x3ec18f=md5(JSON[_0x65f6('0x47')](_0x313be5));if(_0x71b16b['md5']!==_0x3ec18f){_0x71b16b['md5']=_0x3ec18f;emit(util[_0x65f6('0x78')](_0x65f6('0x79'),_0x313be5[_0x65f6('0x3e')]),_0x65f6('0x7a'),_0x313be5);}}}function emitCampaignSummary(_0x3b907c){if(_0x3b907c[_0x65f6('0x4a')]===_0x65f6('0x7b')){emit(util[_0x65f6('0x78')](_0x65f6('0x7c'),_0x3b907c['name']),_0x65f6('0x7d'),_0x3b907c);}}function checkGetDataPredictive(_0x8ecdca){if(isNotNull(_0x8ecdca)){if(!_[_0x65f6('0x44')](_0x8ecdca)){if(_0x8ecdca['predictiveIntervalTotalCalls']>0x0){if(!_[_0x65f6('0x3a')](_0x8ecdca[_0x65f6('0x7e')])&&_0x8ecdca['predictiveIntervalAvgTalktime']>0x0){return!![];}else{loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x80'),JSON['stringify'](_0x8ecdca));}if(!_[_0x65f6('0x3a')](_0x8ecdca['predictiveIntervalAvgHoldtime'])&&_0x8ecdca[_0x65f6('0x6c')]>0x0){return!![];}else{loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x81'),JSON['stringify'](_0x8ecdca));}}else{loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x82'),JSON['stringify'](_0x8ecdca));}}else{loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x83'),JSON['stringify'](_0x8ecdca));}}else{loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x84'),JSON[_0x65f6('0x47')](_0x8ecdca));}return![];}function mergeDataErlangB(_0x25d504){return function(_0x234fa7){loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x85'),JSON[_0x65f6('0x47')](_0x234fa7));_['merge'](_0x25d504,_0x234fa7);};}function getDiff(_0x52c5a4){var _0x5ca62e=moment()[_0x65f6('0x86')](0x0);var _0x2091f1=moment(_0x52c5a4)[_0x65f6('0x86')](0x0);return _0x5ca62e[_0x65f6('0x48')](_0x2091f1,'seconds');}function ifInterval(_0x183c08,_0x2032b9){if(_[_0x65f6('0x3a')](_0x2032b9)){return![];}if(getDiff(_0x2032b9)<_0x183c08*0x3c){return!![];}else{return![];}}function freeVariablesPredictive(_0x50f63a){if(isNotNull(_0x50f63a)){if(!_[_0x65f6('0x3a')](_0x50f63a[_0x65f6('0x27')])){_0x50f63a[_0x65f6('0x27')]=undefined;loggerPredictive['info']('[freeVariablesPredictive]',_0x65f6('0x27'),_0x50f63a[_0x65f6('0x3e')]);}if(!_[_0x65f6('0x3a')](_0x50f63a[_0x65f6('0x26')])){_0x50f63a[_0x65f6('0x26')]=undefined;loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x87'),_0x65f6('0x26'),_0x50f63a[_0x65f6('0x3e')]);}if(!_[_0x65f6('0x3a')](_0x50f63a[_0x65f6('0x88')])){clearInterval(_0x50f63a[_0x65f6('0x88')]);_0x50f63a[_0x65f6('0x88')]=undefined;loggerPredictive[_0x65f6('0x7f')]('[freeVariablesPredictive]',_0x65f6('0x88'),_0x50f63a[_0x65f6('0x3e')]);}}}function erlangb(_0x42a805,_0x4b4efe){if(_0x4b4efe===0x0){return 0x0;}var _0x25cf9f=0x1;for(var _0x16dec0=0x1;_0x16dec0<=_0x4b4efe;_0x16dec0+=0x1){_0x25cf9f=0x1+_0x25cf9f*_0x16dec0/_0x42a805;}return 0x1/_0x25cf9f;}function isVoiceQueueOutbound(_0x4638c9){return _0x4638c9===_0x65f6('0x4b');}function isNotPreview(_0x4ef333){return _0x4ef333!==_0x65f6('0x1e');}function isCampaignIvr(_0x4227f5){return _0x4227f5===_0x65f6('0x7b');}function getCallerId(_0x3e0d8b,_0x553ff0,_0x2923ff){if(!_[_0x65f6('0x3a')](_0x2923ff)&&'string'===typeof _0x2923ff&&!_[_0x65f6('0x44')](_0x2923ff)){if(!_[_0x65f6('0x3a')](_0x553ff0)&&_0x65f6('0x89')===typeof _0x553ff0&&!_['isEmpty'](_0x553ff0)){return util[_0x65f6('0x78')](_0x65f6('0x8a'),_0x553ff0,_0x2923ff);}return util[_0x65f6('0x78')](_0x65f6('0x8a'),_0x2923ff,_0x2923ff);}if(!_[_0x65f6('0x3a')](_0x3e0d8b)&&_0x65f6('0x89')===typeof _0x3e0d8b&&!_['isEmpty'](_0x3e0d8b)){return _0x3e0d8b;}return'\x22\x22\x20<>';}function loggerCatchQueueSummary(_0x59cd44,_0x336a7d){return function(_0x367d95){freeVariablesPredictive(_0x336a7d);emitVoiceQueueSummary(_0x336a7d);emitCampaignSummary(_0x336a7d);loggerSyncQueueSummary[_0x65f6('0x8b')](_0x59cd44,util[_0x65f6('0x8c')](_0x367d95,{'showHidden':![],'depth':null}));};}function loggerCatchPredictive(_0xab6f0,_0x304cf9){return function(_0x4c5cd2){loggerPredictive[_0x65f6('0x8b')](_0xab6f0,JSON[_0x65f6('0x47')](_0x4c5cd2));freeVariablesPredictive(_0x304cf9);};}function loggerCatch(_0x54b569){return function(_0x225aeb){logger[_0x65f6('0x8b')](_0x54b569,util[_0x65f6('0x8c')](_0x225aeb,{'showHidden':![],'depth':null}));};}function checkContactEmpty(_0x4efa91){return _0x4efa91&&!_[_0x65f6('0x3a')](_0x4efa91)&&_0x4efa91[_0x65f6('0x8d')]>0x0;}function decremetOriginate(_0x4e83dc){if(!_[_0x65f6('0x3a')](_0x4e83dc)&&_0x4e83dc!==null){if(_0x4e83dc[_0x65f6('0x8e')](_0x65f6('0x74'))){if(_0x4e83dc[_0x65f6('0x74')]>0x0){_0x4e83dc[_0x65f6('0x74')]-=0x1;}else{logger[_0x65f6('0x8b')](_0x65f6('0x8f'));}}}else{logger['error']('[decremetOriginate]\x20is\x20null\x20or\x20undefined');}}function checkContactLowerLimitOriginate(_0x3eb33e,_0x3da139,_0x4a9524){if(_0x3da139>_0x4a9524){for(var _0x417ba5=0x0;_0x417ba5<_0x3da139-_0x4a9524;_0x417ba5+=0x1){decremetOriginate(_0x3eb33e);}}}function loggerGetContactDialer(_0x5f3df9,_0x3a483b,_0x4e0450){return function(_0x440df1){checkContactLowerLimitOriginate(_0x3a483b,_0x4e0450,0x0);logger[_0x65f6('0x8b')](_0x5f3df9,util[_0x65f6('0x8c')](_0x440df1,{'showHidden':![],'depth':null}));};}function sendMessageReschedule(_0x2beeb7){return function(_0x145aaa){if(isNotNull(_0x145aaa)&&isNotNull(_0x145aaa[0x0])){if(_0x145aaa[0x0][_0x65f6('0x90')]>0x0){_0x2beeb7[_0x65f6('0x3b')]=_0x65f6('0x91');logger[_0x65f6('0x7f')]('[getContactDialer2][ReScheduled]'+_0x2beeb7['name'],_0x145aaa[0x0][_0x65f6('0x90')],_0x65f6('0x92'));}else{_0x2beeb7[_0x65f6('0x3b')]='AVAILABLE_CONTACTS_FINISHED';logger['info'](_0x65f6('0x93')+_0x2beeb7[_0x65f6('0x3e')]);}}};}function notSendMessagesQueue(_0x4526e6){if(_0x4526e6[_0x65f6('0x94')]){freeVariablesPredictive(_0x4526e6);if(_0x4526e6[_0x65f6('0x74')]===0x0&&_0x4526e6[_0x65f6('0x52')]===0x0&&_0x4526e6['waiting']===0x0&&(_0x4526e6['pTalking']||0x0)===0x0){_0x4526e6[_0x65f6('0x94')]=![];_0x4526e6[_0x65f6('0x4e')]=0x0;_0x4526e6['message']=_0x65f6('0x3d');loggerSyncQueueSummary['error'](_0x65f6('0x95'),_0x4526e6[_0x65f6('0x3e')],_0x65f6('0x96'));}else{_0x4526e6[_0x65f6('0x3b')]='IS_DISACTIVED';loggerSyncQueueSummary[_0x65f6('0x8b')](_0x65f6('0x95'),_0x4526e6[_0x65f6('0x3e')],'is\x20disactive');}emitVoiceQueueSummary(_0x4526e6);}}function notSendMessagesCampaign(_0x4c0511){if(_0x4c0511[_0x65f6('0x94')]){if(_0x4c0511['originated']===0x0){_0x4c0511[_0x65f6('0x94')]=![];_0x4c0511[_0x65f6('0x3b')]=_0x65f6('0x3d');loggerSyncQueueSummary[_0x65f6('0x8b')]('[syncQueueSummary]\x20Campaign\x20Ivr:\x20',_0x4c0511['name'],'is\x20not\x20active');}else{_0x4c0511[_0x65f6('0x3b')]=_0x65f6('0x97');loggerSyncQueueSummary[_0x65f6('0x8b')]('[syncQueueSummary]\x20Campaign\x20Ivr:\x20',_0x4c0511[_0x65f6('0x3e')],_0x65f6('0x98'));}emitCampaignSummary(_0x4c0511);}}function createObjHistory(_0x2a7c90,_0x49cee2,_0x40d0f7,_0x15809e,_0x4a3eab){_0x2a7c90[_0x65f6('0x3b')]=_0x40d0f7;var _0x2f59f9=new Action(_0x2a7c90,_0x49cee2);var _0x4b82fc=new History(_0x2f59f9);_0x4b82fc[_0x65f6('0x99')]=_0x15809e;_0x4b82fc['statedesc']=_0x4a3eab;_0x4b82fc[_0x65f6('0x9a')]=_0x2f59f9['starttime'];return _0x4b82fc;}Dialer[_0x65f6('0x1a')][_0x65f6('0x39')]=function(){var _0x49820a=this;setInterval(function(){_0x49820a[_0x65f6('0x9b')](_0x49820a[_0x65f6('0x9c')],_0x65f6('0x9d'));_0x49820a[_0x65f6('0x9b')](_0x49820a[_0x65f6('0x23')],_0x65f6('0x9e'));},0x32c8);};Dialer[_0x65f6('0x1a')][_0x65f6('0x9b')]=function(_0x31dba0,_0x413e65){var _0x288eb0=this;for(var _0x574d84 in _0x31dba0){if(_0x31dba0[_0x65f6('0x8e')](_0x574d84)){this[_0x65f6('0x1d')][_0x65f6('0x1b')](function(){if(!_[_0x65f6('0x9f')](_0x31dba0[_0x574d84])){return ami['Action']({'action':_0x65f6('0xa0'),'channel':_0x31dba0[_0x574d84][_0x65f6('0xa1')]})['catch'](function(_0x2e31c0){if(_0x2e31c0['message']===_0x65f6('0xa2')){setTimeout(function(){if(_0x31dba0[_0x574d84]&&_0x31dba0[_0x574d84]['type']!==_0x65f6('0x7b')){_0x288eb0[_0x65f6('0xa3')](_0x288eb0['voiceQueues'][_0x31dba0[_0x574d84]['queue']]);logger[_0x65f6('0x8b')](_0x65f6('0xa4'),_0x413e65,_0x574d84,_0x31dba0[_0x574d84]['queue']);delete _0x31dba0[_0x574d84];}if(_0x31dba0[_0x574d84]&&_0x31dba0[_0x574d84][_0x65f6('0x4a')]===_0x65f6('0x7b')){_0x288eb0[_0x65f6('0xa3')](_0x288eb0['campaigns'][_0x31dba0[_0x574d84][_0x65f6('0xa5')]]);logger[_0x65f6('0x8b')]('[Dialer][checkChannel][ivr]',_0x413e65,_0x574d84,_0x31dba0[_0x574d84][_0x65f6('0xa5')]);delete _0x31dba0[_0x574d84];}},0x2328);}});}});}}};Dialer['prototype'][_0x65f6('0xa6')]=function(_0x57eb49){return BPromise['resolve']()[_0x65f6('0xa7')](cmHopper[_0x65f6('0xa6')](_0x57eb49))[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xa9')));};Dialer[_0x65f6('0x1a')][_0x65f6('0xaa')]=function(_0x1ac46f){return BPromise[_0x65f6('0xab')]()['then'](cmHopperBlack['checkIsBlackList'](_0x1ac46f))[_0x65f6('0xa8')](loggerCatch('[checkIsBlackList]\x20'));};Dialer[_0x65f6('0x1a')][_0x65f6('0xac')]=function(_0x21b5f2){return BPromise[_0x65f6('0xab')]()[_0x65f6('0xa7')](cmHopperBlack['checkIsBlackListIvr'](_0x21b5f2))[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xad')));};Dialer[_0x65f6('0x1a')]['averageHandleTime']=function(_0xc7cee1){return BPromise[_0x65f6('0xab')]()[_0x65f6('0xa7')](cmHopperHistory[_0x65f6('0xae')](_0xc7cee1))[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xaf')));};Dialer['prototype']['rescheduleContact']=function(_0x10a4cb){return BPromise[_0x65f6('0xab')]()[_0x65f6('0xa7')](cmHopper[_0x65f6('0xb0')](_0x10a4cb))['catch'](loggerCatch('[rescheduleContact]\x20'));};Dialer[_0x65f6('0x1a')][_0x65f6('0xb1')]=function(_0x10fdc8,_0x17b06b,_0x21c0a7,_0x339641){return BPromise['resolve']()['then'](cmHopper['getContactDialer'](_0x10fdc8,_0x17b06b,_0x21c0a7,_0x339641))[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xb2')));};Dialer[_0x65f6('0x1a')][_0x65f6('0xb3')]=function(_0x53b11c,_0x50dc93,_0x217e3d){return BPromise[_0x65f6('0xab')]()['then'](cmHopper[_0x65f6('0xb3')](_0x53b11c,_0x50dc93,_0x217e3d))['catch'](loggerCatch(_0x65f6('0xb2')));};Dialer['prototype'][_0x65f6('0xb4')]=function(_0x208fee){return BPromise['resolve']()[_0x65f6('0xa7')](voiceQueueRt[_0x65f6('0xb4')](_0x208fee))[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xb5')));};Dialer[_0x65f6('0x1a')][_0x65f6('0xb6')]=function(_0x584ea4){return BPromise[_0x65f6('0xab')]()['then'](cmHopper[_0x65f6('0xb6')](_0x584ea4))['catch'](loggerCatch(_0x65f6('0xb7')));};Dialer[_0x65f6('0x1a')][_0x65f6('0xb8')]=function(_0x41e59a){return BPromise['resolve']()[_0x65f6('0xa7')](cmHopperHistory[_0x65f6('0xb8')](_0x41e59a))[_0x65f6('0xa8')](loggerCatch('[createHistory]\x20'));};Dialer['prototype'][_0x65f6('0xa3')]=function(_0x17d8f0){if(!_['isUndefined'](_0x17d8f0)&&_0x17d8f0!==null){if(_0x17d8f0[_0x65f6('0x8e')](_0x65f6('0x74'))){if(_0x17d8f0[_0x65f6('0x74')]>0x0){_0x17d8f0['originated']-=0x1;}else{logger[_0x65f6('0x8b')](_0x65f6('0xb9'));}}}else{logger['error'](_0x65f6('0xba'));}};Dialer[_0x65f6('0x1a')][_0x65f6('0xbb')]=function(_0x5374ad,_0x2bb916){var _0x2287fc=this;return function(_0x150b5b){_0x2287fc['updateOriginated'](_0x2bb916);logger[_0x65f6('0x8b')](_0x5374ad,util['inspect'](_0x150b5b,{'showHidden':![],'depth':null}));};};Dialer[_0x65f6('0x1a')][_0x65f6('0xbc')]=function(_0x31ec61,_0x22be6e,_0x29b2de){var _0x430fb8={'state':0x19,'statedesc':'notFound'};this[_0x65f6('0xa3')](_0x22be6e);this[_0x65f6('0xbd')](_[_0x65f6('0xbe')](_0x430fb8,_[_0x65f6('0xbf')](_0x29b2de,[_0x65f6('0xc0'),'ListId','UserId','VoiceQueueId',_0x65f6('0xc1')])),_0x65f6('0xc2'),_0x65f6('0xc3'));logger['error'](_0x31ec61);};Dialer[_0x65f6('0x1a')]['isSuccess']=function(_0x4b2edb){return _0x4b2edb===_0x65f6('0xc4');};Dialer[_0x65f6('0x1a')]['isTrunkReachable']=function(_0xdd36c4){return!_[_0x65f6('0x3a')](_0xdd36c4)&&_0xdd36c4&&!_[_0x65f6('0x3a')](_0xdd36c4[_0x65f6('0x3e')])&&!_[_0x65f6('0x3a')](_0xdd36c4[_0x65f6('0x76')])&&_0xdd36c4[_0x65f6('0x76')]&&(this[_0x65f6('0x22')][util[_0x65f6('0x78')](_0x65f6('0xc5'),_0xdd36c4[_0x65f6('0x3e')])][_0x65f6('0xa0')]==='reachable'||this[_0x65f6('0x22')][util['format']('SIP/%s',_0xdd36c4[_0x65f6('0x3e')])][_0x65f6('0xa0')]===_0x65f6('0xc6'));};Dialer[_0x65f6('0x1a')]['saveInDb']=function(_0x136e74,_0x565b63,_0x490512){this[_0x65f6('0xb8')](_0x136e74)[_0x65f6('0xa8')](loggerCatch(_0x565b63));this[_0x65f6('0xb6')](_0x136e74)[_0x65f6('0xa8')](loggerCatch(_0x490512));};Dialer[_0x65f6('0x1a')][_0x65f6('0x35')]=function(_0x5a33cf){var _0x5c8131=this['uniqueId'][_0x5a33cf[_0x65f6('0xc7')]];var _0x330b4e;if(!_[_0x65f6('0x9f')](_0x5a33cf)&&!_['isNil'](_0x5a33cf[_0x65f6('0xc8')])&&!_['isNil'](_0x5a33cf['variable'][_0x65f6('0xc9')])&&_0x5a33cf[_0x65f6('0xca')]===_0x65f6('0xcb')&&_0x5c8131){if(_0x5c8131[_0x65f6('0x4a')]!==_0x65f6('0x7b')&&this['voiceQueues'][_0x5c8131[_0x65f6('0xa5')]][_0x65f6('0xcc')]&&_0x5a33cf[_0x65f6('0xcd')]===_0x65f6('0xce')){delete this['uniqueId'][_0x5a33cf[_0x65f6('0xc7')]];this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][_0x5c8131[_0x65f6('0xa5')]]);this[_0x65f6('0x1f')][_0x5c8131[_0x65f6('0xa5')]][_0x65f6('0x5e')]+=0x1;this[_0x65f6('0x1f')][_0x5c8131['queue']][_0x65f6('0x5d')]+=0x1;_0x330b4e=new Hangup(_0x5c8131,_0x5a33cf);_0x330b4e[_0x65f6('0x99')]=0x12;_0x330b4e[_0x65f6('0xcf')]=_0x65f6('0xd0');_0x330b4e[_0x65f6('0xd1')]=_0x65f6('0xd2');this['saveInDb'](_0x330b4e,_0x65f6('0xd3'),_0x65f6('0xd4'));}if(_0x5c8131['type']!==_0x65f6('0x7b')&&this['voiceQueues'][_0x5c8131[_0x65f6('0xa5')]][_0x65f6('0xcc')]&&_0x5a33cf[_0x65f6('0xcd')]===_0x65f6('0xd5')){delete this[_0x65f6('0x9c')][_0x5a33cf['uniqueid']];this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][_0x5c8131[_0x65f6('0xa5')]]);this[_0x65f6('0x1f')][_0x5c8131[_0x65f6('0xa5')]]['outboundAnswerCallsDay']+=0x1;this['voiceQueues'][_0x5c8131[_0x65f6('0xa5')]][_0x65f6('0x5d')]+=0x1;_0x330b4e=new Hangup(_0x5c8131,_0x5a33cf);_0x330b4e[_0x65f6('0x99')]=0x13;_0x330b4e[_0x65f6('0xcf')]='Machine';_0x330b4e['membername']='AMD';_0x330b4e[_0x65f6('0xd6')]=!![];this[_0x65f6('0xbd')](_0x330b4e,_0x65f6('0xd7'),'[syncMachine]');}if(_0x5c8131[_0x65f6('0x4a')]===_0x65f6('0x7b')&&this[_0x65f6('0x20')][_0x5c8131[_0x65f6('0xa5')]][_0x65f6('0xcc')]&&_0x5a33cf['value']===_0x65f6('0xce')){delete this[_0x65f6('0x9c')][_0x5a33cf['uniqueid']];this['updateOriginated'](this[_0x65f6('0x20')][_0x5c8131[_0x65f6('0xa5')]]);_0x330b4e=new Hangup(_0x5c8131,_0x5a33cf);_0x330b4e[_0x65f6('0x99')]=0x12;_0x330b4e[_0x65f6('0xcf')]=_0x65f6('0xd0');_0x330b4e['membername']=_0x65f6('0xd2');this['saveInDb'](_0x330b4e,_0x65f6('0xd8'),'[syncHangupInAMDIvr]');}if(_0x5c8131[_0x65f6('0x4a')]==='ivr'&&this[_0x65f6('0x20')][_0x5c8131['queue']][_0x65f6('0xcc')]&&_0x5a33cf[_0x65f6('0xcd')]==='MACHINE'){delete this['uniqueId'][_0x5a33cf[_0x65f6('0xc7')]];this[_0x65f6('0xa3')](this[_0x65f6('0x20')][_0x5c8131[_0x65f6('0xa5')]]);_0x330b4e=new Hangup(_0x5c8131,_0x5a33cf);_0x330b4e[_0x65f6('0x99')]=0x13;_0x330b4e[_0x65f6('0xcf')]=_0x65f6('0xd9');_0x330b4e[_0x65f6('0xd1')]=_0x65f6('0xd2');_0x330b4e[_0x65f6('0xd6')]=!![];this[_0x65f6('0xbd')](_0x330b4e,_0x65f6('0xda'),_0x65f6('0xdb'));}}};Dialer[_0x65f6('0x1a')][_0x65f6('0xdc')]=function(_0x2a1311){var _0x1afc18=this['uniqueId'][_0x2a1311[_0x65f6('0xc7')]];var _0x91d7bf=this;var _0x11bdf3;if(_0x1afc18&&_0x1afc18[_0x65f6('0x4a')]===_0x65f6('0x7b')){delete this[_0x65f6('0x9c')][_0x2a1311[_0x65f6('0xc7')]];this[_0x65f6('0xa3')](this[_0x65f6('0x20')][_0x1afc18['queue']]);this[_0x65f6('0x20')][_0x1afc18[_0x65f6('0xa5')]][_0x65f6('0xdd')]+=0x1;_0x11bdf3=new Hangup(_0x1afc18,_0x2a1311);this[_0x65f6('0xb8')](_0x11bdf3)['catch'](loggerCatch(_0x65f6('0xde')));this[_0x65f6('0xb6')](_0x11bdf3)['catch'](loggerCatch(_0x65f6('0xdf')));}if(_0x1afc18&&_0x1afc18[_0x65f6('0x4a')]!==_0x65f6('0x7b')&&isNotNull(this[_0x65f6('0x1f')][_0x1afc18[_0x65f6('0xa5')]][_0x65f6('0xe0')])){delete this['uniqueId'][_0x2a1311[_0x65f6('0xc7')]];this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][_0x1afc18[_0x65f6('0xa5')]]);this['voiceQueues'][_0x1afc18['queue']]['outboundAnswerCallsDay']+=0x1;this[_0x65f6('0x1f')][_0x1afc18[_0x65f6('0xa5')]][_0x65f6('0x5d')]+=0x1;_0x11bdf3=new Hangup(_0x1afc18,_0x2a1311);_0x11bdf3[_0x65f6('0x99')]=0x10;_0x11bdf3[_0x65f6('0xcf')]='AnswerAGI';_0x11bdf3['membername']=_0x65f6('0xe1');this[_0x65f6('0xb8')](_0x11bdf3)[_0x65f6('0xa8')](loggerCatch('[syncHangupIvr][createHistory]'));this['moveContactManagedDialer'](_0x11bdf3)[_0x65f6('0xa8')](loggerCatch('[syncHangupIvr]'));}if(_0x1afc18&&_0x1afc18[_0x65f6('0x4a')]!==_0x65f6('0x7b')&&!isNotNull(this[_0x65f6('0x1f')][_0x1afc18[_0x65f6('0xa5')]][_0x65f6('0xe0')])){delete this[_0x65f6('0x9c')][_0x2a1311[_0x65f6('0xc7')]];this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][_0x1afc18['queue']]);this[_0x65f6('0x1f')][_0x1afc18[_0x65f6('0xa5')]]['outboundUnknownCallsDay']+=0x1;_0x11bdf3=new Hangup(_0x1afc18,_0x2a1311);_0x11bdf3[_0x65f6('0x99')]=0xc;_0x11bdf3['statedesc']=_0x2a1311[_0x65f6('0xe2')];_0x11bdf3[_0x65f6('0xd1')]=_0x65f6('0xe3');this['createHistory'](_0x11bdf3)[_0x65f6('0xa8')](loggerCatch('[syncHangupIvr][createHistory]'));this['moveContactManagedDialer'](_0x11bdf3)[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xdf')));}};Dialer['prototype'][_0x65f6('0x30')]=function(_0x572ddb){var _0x2b8edf=this[_0x65f6('0x9c')][_0x572ddb[_0x65f6('0xc7')]];var _0x462acb=this;if(this[_0x65f6('0x1f')][_0x572ddb[_0x65f6('0xa5')]]){if(_0x2b8edf&&_0x2b8edf[_0x65f6('0x4a')]!==_0x65f6('0x7b')){delete this['uniqueId'][_0x572ddb[_0x65f6('0xc7')]];this[_0x65f6('0x1f')][_0x572ddb[_0x65f6('0xa5')]][_0x65f6('0x5e')]+=0x1;var _0x288bd0=new AgentComplete(_0x2b8edf,_0x572ddb);if(_0x572ddb['reason']===_0x65f6('0xe4')){_0x288bd0['agiafterat']=this[_0x65f6('0x1f')][_0x572ddb['queue']][_0x65f6('0xe5')]&&this[_0x65f6('0x1f')][_0x572ddb[_0x65f6('0xa5')]][_0x65f6('0xe6')]?moment()[_0x65f6('0x78')](_0x65f6('0xe7')):undefined;}this[_0x65f6('0xb8')](_0x288bd0)[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xe8')));this[_0x65f6('0xb6')](_0x288bd0)[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xe9')));}}};Dialer[_0x65f6('0x1a')][_0x65f6('0x2b')]=function(_0x37fa08){if(this[_0x65f6('0x1f')][_0x37fa08[_0x65f6('0xa5')]]){if(this['uniqueId'][_0x37fa08[_0x65f6('0xc7')]]&&this['uniqueId'][_0x37fa08[_0x65f6('0xc7')]][_0x65f6('0x4a')]!==_0x65f6('0x7b')){this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][_0x37fa08[_0x65f6('0xa5')]]);this['uniqueId'][_0x37fa08[_0x65f6('0xc7')]][_0x65f6('0xea')]=moment()[_0x65f6('0x78')](_0x65f6('0xe7'));}}};Dialer[_0x65f6('0x1a')][_0x65f6('0xeb')]=function(_0x967b39){this[_0x65f6('0xb8')](_0x967b39)[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xe8')));this[_0x65f6('0xb6')](_0x967b39)['catch'](loggerCatch('[syncQueueCallerAbandon]\x20[Drop]'));};Dialer[_0x65f6('0x1a')][_0x65f6('0x2c')]=function(_0xb55577){var _0x179fed=this[_0x65f6('0x9c')][_0xb55577[_0x65f6('0xc7')]];var _0x4582d4=this;if(this['voiceQueues'][_0xb55577[_0x65f6('0xa5')]]){if(_0x179fed&&_0x179fed[_0x65f6('0x4a')]!==_0x65f6('0x7b')){delete this[_0x65f6('0x9c')][_0xb55577[_0x65f6('0xc7')]];this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][_0xb55577[_0x65f6('0xa5')]]);_0x179fed[_0x65f6('0xec')]=moment()[_0x65f6('0x78')](_0x65f6('0xe7'));var _0x191f0e=new QueueCallerAbandon(_0x179fed,_0xb55577);if(getSeconds(_0x179fed[_0x65f6('0xec')],_0x179fed['responsetime'])>=_0x179fed['dialQueueTimeout']){this['voiceQueues'][_0xb55577[_0x65f6('0xa5')]][_0x65f6('0x6e')]+=0x1;this[_0x65f6('0x1f')][_0xb55577['queue']][_0x65f6('0x64')]+=0x1;this[_0x65f6('0x1f')][_0xb55577[_0x65f6('0xa5')]]['predictiveIntervalErlangCallsDroppedCalls']+=0x1;_0x191f0e[_0x65f6('0x99')]=0xa;_0x191f0e[_0x65f6('0xcf')]='Drop';_0x191f0e[_0x65f6('0xed')]=_0x65f6('0xee');_0x191f0e[_0x65f6('0xef')]=this['voiceQueues'][_0xb55577[_0x65f6('0xa5')]][_0x65f6('0xe5')]?moment()[_0x65f6('0x78')](_0x65f6('0xe7')):undefined;this[_0x65f6('0xeb')](_0x191f0e);}else{this[_0x65f6('0x1f')][_0xb55577[_0x65f6('0xa5')]][_0x65f6('0x6d')]+=0x1;this[_0x65f6('0x1f')][_0xb55577[_0x65f6('0xa5')]]['outboundDropCallsDayCallersExit']+=0x1;_0x191f0e[_0x65f6('0x99')]=0xb;_0x191f0e[_0x65f6('0xcf')]=_0x65f6('0xf0');_0x191f0e['dropreason']='CALLEREXIT';this[_0x65f6('0xeb')](_0x191f0e);}}}};Dialer['prototype'][_0x65f6('0x33')]=function(_0x3e8f5f){if(this[_0x65f6('0x23')][_0x3e8f5f[_0x65f6('0xc7')]]){this[_0x65f6('0x23')][_0x3e8f5f['uniqueid']][_0x65f6('0xa1')]=_0x3e8f5f[_0x65f6('0xa1')];}if(this[_0x65f6('0x9c')][_0x3e8f5f[_0x65f6('0xc7')]]){this['uniqueId'][_0x3e8f5f[_0x65f6('0xc7')]][_0x65f6('0xa1')]=_0x3e8f5f[_0x65f6('0xa1')];}};Dialer[_0x65f6('0x1a')][_0x65f6('0x37')]=function(_0x25e34a){if(strategy[this[_0x65f6('0x1f')][this[_0x65f6('0x23')][_0x25e34a[_0x65f6('0xf1')]][_0x65f6('0xa5')]][_0x65f6('0x4c')]]===_0x65f6('0x19')){if(this[_0x65f6('0x23')][_0x25e34a[_0x65f6('0xf1')]]&&_[_0x65f6('0x9f')](this['actions'][_0x25e34a[_0x65f6('0xf1')]][_0x65f6('0xf2')])&&_0x25e34a['status']==='1'&&_0x25e34a['paused']==='0'){if(this[_0x65f6('0x21')][_0x25e34a[_0x65f6('0xf3')]]){if(!this[_0x65f6('0x21')][_0x25e34a[_0x65f6('0xf3')]][_0x65f6('0xf2')]){this[_0x65f6('0x21')][_0x25e34a[_0x65f6('0xf3')]]['locked']=!![];this[_0x65f6('0x23')][_0x25e34a['actionid']]['locked']=!![];this[_0x65f6('0x23')][_0x25e34a[_0x65f6('0xf1')]][_0x65f6('0xf3')]=_0x25e34a[_0x65f6('0xf3')];}}}}else if((strategy[this['voiceQueues'][this['actions'][_0x25e34a[_0x65f6('0xf1')]][_0x65f6('0xa5')]]['strategy']]||'rrmemory')==='rrmemory'){if(this[_0x65f6('0x23')][_0x25e34a[_0x65f6('0xf1')]]){if(this[_0x65f6('0x21')][_0x25e34a[_0x65f6('0xf3')]]){this[_0x65f6('0x23')][_0x25e34a['actionid']]['stateinterface']=_0x25e34a[_0x65f6('0xf3')];if(_[_0x65f6('0x9f')](this[_0x65f6('0x29')][this['actions'][_0x25e34a['actionid']][_0x65f6('0xa5')]])){this[_0x65f6('0x29')][this['actions'][_0x25e34a[_0x65f6('0xf1')]][_0x65f6('0xa5')]]=[];}this['queueBooked'][this[_0x65f6('0x23')][_0x25e34a['actionid']][_0x65f6('0xa5')]][_0x65f6('0xf4')](_[_0x65f6('0xbe')](_[_0x65f6('0xbf')](this[_0x65f6('0x23')][_0x25e34a[_0x65f6('0xf1')]],['idHopper',_0x65f6('0xf3')]),{'status':_0x25e34a[_0x65f6('0xa0')],'paused':_0x25e34a['paused']}));}}}};function unlockQueueStatus(_0x420275,_0x2a23d2){setTimeout(function(){if(_[_0x65f6('0x3a')](_0x420275['queueStatusComplete'])){loggerBooked['error'](_0x65f6('0xf5'),_0x2a23d2);}_0x420275[_0x65f6('0xf6')]=!![];loggerBooked[_0x65f6('0x7f')](_0x65f6('0xf7'),_0x2a23d2,JSON[_0x65f6('0x47')](_[_0x65f6('0xbf')](_0x420275,['name','queueStatusComplete'])));},0x1f3);}Dialer[_0x65f6('0x1a')][_0x65f6('0xf8')]=function(_0x40d490){var _0x17522b=this;var _0x2a2490=_0x17522b[_0x65f6('0x1f')][_0x17522b[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]];if(strategy[this[_0x65f6('0x1f')][this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]]['queue']][_0x65f6('0x4c')]]===_0x65f6('0x19')){if(this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]]&&this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xf3')]){this[_0x65f6('0x1e')][_0x65f6('0xf9')](this[_0x65f6('0x23')][_0x40d490['actionid']][_0x65f6('0xfa')],this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]]['stateinterface'])[_0x65f6('0xa8')](function(_0x34751d){logger[_0x65f6('0x8b')]('[Catch][Preview][syncQueueStatusComplete]',util['inspect'](_0x34751d,{'showHidden':![],'depth':null}));})[_0x65f6('0xfb')](function(){_0x17522b[_0x65f6('0xa3')](_0x17522b[_0x65f6('0x1f')][_0x17522b[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]);_0x17522b[_0x65f6('0x21')][_0x17522b[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xf3')]][_0x65f6('0xf2')]=![];delete _0x17522b[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]];unlockQueueStatus(_0x2a2490);});}else{this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]);this['rescheduleContact']({'active':![],'ContactId':this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xc0')],'ListId':this[_0x65f6('0x23')][_0x40d490['actionid']][_0x65f6('0xfc')],'VoiceQueueId':this['actions'][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xfd')]||undefined,'CampaignId':this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xc1')]||undefined})['catch'](loggerCatch(_0x65f6('0xfe')));delete this['actions'][_0x40d490['actionid']];unlockQueueStatus(_0x2a2490);}}else if((strategy[this['voiceQueues'][this[_0x65f6('0x23')][_0x40d490['actionid']][_0x65f6('0xa5')]][_0x65f6('0x4c')]]||_0x65f6('0x18'))===_0x65f6('0x18')){var _0x33290a;if(this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]]&&!_[_0x65f6('0x44')](this['queueBooked'][this['actions'][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]])){if(this['queueBookedRR'][_0x17522b[_0x65f6('0x23')][_0x40d490['actionid']]['queue']]){this[_0x65f6('0x2a')][_0x17522b[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]=this[_0x65f6('0x2a')][this['actions'][_0x40d490[_0x65f6('0xf1')]]['queue']]?this[_0x65f6('0x2a')][this['actions'][_0x40d490['actionid']][_0x65f6('0xa5')]]:this[_0x65f6('0x29')][this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]?this[_0x65f6('0x29')][this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]][_0x65f6('0xff')]||0x0:0x0;}this['queueBooked'][this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]['_rr']=this[_0x65f6('0x2a')][this[_0x65f6('0x23')][_0x40d490['actionid']][_0x65f6('0xa5')]];for(var _0x3e1f7c=0x0;_0x3e1f7c<this[_0x65f6('0x29')][this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]]['queue']][_0x65f6('0x8d')];_0x3e1f7c+=0x1){_0x33290a=rr(this[_0x65f6('0x29')][this[_0x65f6('0x23')][_0x40d490['actionid']]['queue']]);this[_0x65f6('0x2a')][_0x17522b[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]=this[_0x65f6('0x29')][this['actions'][_0x40d490['actionid']]['queue']][_0x65f6('0xff')];if(_0x33290a[_0x65f6('0xa0')]==='1'&&_0x33290a['paused']==='0'){break;}}if(!_['isNil'](_0x33290a)){this['agents'][_0x33290a[_0x65f6('0xf3')]][_0x65f6('0x100')]=_[_0x65f6('0x3a')](this[_0x65f6('0x21')][_0x33290a[_0x65f6('0xf3')]][_0x65f6('0x100')])?!![]:this[_0x65f6('0x21')][_0x33290a[_0x65f6('0xf3')]][_0x65f6('0x100')];}loggerBooked[_0x65f6('0x7f')](_0x65f6('0x101'),_0x40d490[_0x65f6('0xf1')],_0x65f6('0x102'),JSON[_0x65f6('0x47')](_[_0x65f6('0xbf')](this['agents'][_0x33290a[_0x65f6('0xf3')]],[_0x65f6('0x3e'),_0x65f6('0x100')])),_0x65f6('0x103'),JSON[_0x65f6('0x47')](_0x33290a[_0x65f6('0xfa')]));if(!_['isNil'](_0x33290a)&&_0x33290a[_0x65f6('0xa0')]==='1'&&_0x33290a[_0x65f6('0x104')]==='0'&&this['agents'][_0x33290a['stateinterface']][_0x65f6('0x100')]){this['agents'][_0x33290a['stateinterface']][_0x65f6('0x100')]=![];this[_0x65f6('0x29')][_0x17522b['actions'][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]=[];this['preview'][_0x65f6('0xf9')](_0x33290a[_0x65f6('0xfa')],_0x33290a[_0x65f6('0xf3')])[_0x65f6('0xa8')](function(_0x10467a){logger[_0x65f6('0x8b')](_0x65f6('0x105'),util[_0x65f6('0x8c')](_0x10467a,{'showHidden':![],'depth':null}));})[_0x65f6('0xfb')](function(){_0x17522b['updateOriginated'](_0x17522b[_0x65f6('0x1f')][_0x17522b[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]);setTimeout(function(){_0x17522b[_0x65f6('0x21')][_0x33290a[_0x65f6('0xf3')]]['unlockRR']=!![];loggerBooked[_0x65f6('0x7f')]('[booked][RR][finaly]',_0x40d490['actionid'],'Agent:\x20',JSON[_0x65f6('0x47')](_['pick'](_0x17522b[_0x65f6('0x21')][_0x33290a[_0x65f6('0xf3')]],[_0x65f6('0x3e'),_0x65f6('0x100')])),_0x65f6('0x103'),JSON[_0x65f6('0x47')](_0x33290a[_0x65f6('0xfa')]));},0xc7);delete _0x17522b['actions'][_0x40d490['actionid']];unlockQueueStatus(_0x2a2490,_0x40d490[_0x65f6('0xf1')]);});}else{loggerBooked[_0x65f6('0x7f')](_0x65f6('0x106'));this['updateOriginated'](this[_0x65f6('0x1f')][this['actions'][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]);this[_0x65f6('0xb0')]({'active':![],'ContactId':this['actions'][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xc0')],'ListId':this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]]['ListId'],'VoiceQueueId':this['actions'][_0x40d490[_0x65f6('0xf1')]]['VoiceQueueId']||undefined,'CampaignId':this[_0x65f6('0x23')][_0x40d490['actionid']][_0x65f6('0xc1')]||undefined})[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xfe')));delete this['actions'][_0x40d490[_0x65f6('0xf1')]];unlockQueueStatus(_0x2a2490);}}else{loggerBooked[_0x65f6('0x7f')](_0x65f6('0x107'));this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]]['queue']]);this[_0x65f6('0xb0')]({'active':![],'ContactId':this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xc0')],'ListId':this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xfc')],'VoiceQueueId':this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]]['VoiceQueueId']||undefined,'CampaignId':this[_0x65f6('0x23')][_0x40d490['actionid']][_0x65f6('0xc1')]||undefined})[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x108')));delete this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]];unlockQueueStatus(_0x2a2490);}}else{loggerBooked[_0x65f6('0x7f')](_0x65f6('0x109'));this[_0x65f6('0xa3')](this[_0x65f6('0x1f')][this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xa5')]]);this[_0x65f6('0xb0')]({'active':![],'ContactId':this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xc0')],'ListId':this[_0x65f6('0x23')][_0x40d490['actionid']][_0x65f6('0xfc')],'VoiceQueueId':this[_0x65f6('0x23')][_0x40d490['actionid']][_0x65f6('0xfd')]||undefined,'CampaignId':this[_0x65f6('0x23')][_0x40d490[_0x65f6('0xf1')]][_0x65f6('0xc1')]||undefined})[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x10a')));delete this['actions'][_0x40d490['actionid']];unlockQueueStatus(_0x2a2490);}};Dialer[_0x65f6('0x1a')][_0x65f6('0x38')]=function(){var _0xd11998=this;setInterval(function(){_0xd11998['syncCampaigns']();},0x3e8);};Dialer[_0x65f6('0x1a')]['checkIsTrunkReachable']=function(_0x2c736c){var _0x38d229=this;return function(){if(!_0x38d229[_0x65f6('0x10b')](_0x2c736c[_0x65f6('0x75')])){if(!_0x38d229['isTrunkReachable'](_0x2c736c[_0x65f6('0x10c')])){_0x2c736c['message']=_0x65f6('0x10d');throw _0x2c736c[_0x65f6('0x3e')]+_0x65f6('0x10e');}}};};Dialer['prototype'][_0x65f6('0x10f')]=function(_0x5bf002,_0x5cf03f,_0x3279cd,_0x2906ea){var _0x874b5d=this;return function(){var _0x33e62b=!![];return _0x874b5d[_0x65f6('0x110')](_0x5bf002,_0x5cf03f,_0x3279cd,_0x2906ea,_0x33e62b);};};Dialer[_0x65f6('0x1a')][_0x65f6('0x111')]=function(_0x3dd510,_0x1ef5a7,_0x1322a2,_0x1f14a6){var _0x4d6143=this;return function(){var _0x168cac=![];return _0x4d6143['ifTime'](_0x3dd510[_0x65f6('0x43')],_0x1ef5a7,_0x1322a2,_0x1f14a6,_0x168cac);};};Dialer[_0x65f6('0x1a')]['ifTime']=function(_0x43e0ac,_0x1313d8,_0x4a9a6e,_0x4ab8dd,_0x384ce5){var _0x4ba364=[];return new BPromise(function(_0x5524c7,_0x2540b3){if(!isNotNull(_0x43e0ac)){_0x4ab8dd[_0x65f6('0x3b')]=_0x65f6('0x41');return _0x2540b3(msgResponse(_0x65f6('0x110'),_0x65f6('0x112'),_0x4a9a6e+_0x65f6('0x113')));}if(_[_0x65f6('0x44')](_0x43e0ac)){_0x4ab8dd[_0x65f6('0x3b')]=_0x65f6('0x114');return _0x2540b3(msgResponse('ifTime',_0x65f6('0x112'),_0x4a9a6e+_0x65f6('0x115')));}if(_0x1313d8&&_['isUndefined'](config[_0x65f6('0x116')][_0x1313d8])){_0x4ab8dd[_0x65f6('0x3b')]=_0x65f6('0x117');return _0x2540b3(msgResponse(_0x65f6('0x110'),_0x65f6('0x112'),_0x4a9a6e+_0x65f6('0x118')+_0x1313d8));}if(_['isArray'](_0x43e0ac)){for(var _0x5ee04b=0x0;_0x5ee04b<_0x43e0ac[_0x65f6('0x8d')];_0x5ee04b+=0x1){_0x4ba364[_0x65f6('0xf4')](ami[_0x65f6('0x119')]({'action':_0x65f6('0x11a'),'command':util[_0x65f6('0x78')]('iftime\x20%s,%s',_0x43e0ac[_0x5ee04b][_0x65f6('0x11b')],!_[_0x65f6('0x3a')](config[_0x65f6('0x116')][_0x1313d8])?_0x1313d8:'')})[_0x65f6('0xa7')](function(_0x22ce15){return _0x22ce15[_0x65f6('0x11c')][_0x65f6('0x11d')](_0x65f6('0x11e'))>=0x0?!![]:![];})[_0x65f6('0xa8')](myreject(_0x2540b3)));}}else{_0x4ba364[_0x65f6('0xf4')](ami[_0x65f6('0x119')]({'action':'command','command':util[_0x65f6('0x78')](_0x65f6('0x11f'),_0x43e0ac,!_['isUndefined'](config['timezones'][_0x1313d8])?_0x1313d8:'')})[_0x65f6('0xa7')](function(_0xe3eafc){return _0xe3eafc[_0x65f6('0x11c')]['indexOf'](_0x65f6('0x11e'))>=0x0?!![]:![];})[_0x65f6('0xa8')](myreject(_0x2540b3)));}BPromise[_0x65f6('0x120')](_0x4ba364)[_0x65f6('0xa7')](function(_0xf29979){var _0x202f84=_[_0x65f6('0x121')](_0xf29979);if(_0x202f84){return _0x5524c7(_0x202f84);}else{_0x4ab8dd['message']=_0x384ce5?_0x65f6('0x122'):'INTERVAL_IS_OVERTIME';return _0x2540b3(msgResponse(_0x65f6('0x123'),_0x65f6('0x112'),_0x65f6('0x124')+_0x384ce5+'\x20'+_0x4a9a6e+_0x65f6('0x125')+util[_0x65f6('0x8c')](_0x43e0ac,{'showHidden':![],'depth':null})+_0x65f6('0x126')+_0x1313d8));}})['catch'](function(_0x1575f9){return _0x2540b3(msgResponse('ifTime',_0x65f6('0x112'),JSON['stringify'](_0x1575f9)));});});};Dialer[_0x65f6('0x1a')]['checkDialMethod']=function(_0x3dbc20){var _0x423340=this;return function(){switch(_0x3dbc20[_0x65f6('0x59')]){case _0x65f6('0x127'):freeVariablesPredictive(_0x3dbc20);_0x423340['handlePower'](_0x3dbc20,0x1);break;case _0x65f6('0x128'):freeVariablesPredictive(_0x3dbc20);_0x423340[_0x65f6('0x129')](_0x3dbc20,_0x3dbc20[_0x65f6('0x12a')]);break;case _0x65f6('0x12b'):_0x423340[_0x65f6('0x12b')](_0x3dbc20);break;case _0x65f6('0x7'):freeVariablesPredictive(_0x3dbc20);_0x423340[_0x65f6('0x129')](_0x3dbc20,0x1);break;default:freeVariablesPredictive(_0x3dbc20);logger[_0x65f6('0x8b')]('Queue',_0x3dbc20['name'],_0x65f6('0x12c'));}};};Dialer[_0x65f6('0x1a')][_0x65f6('0x12d')]=function(_0x1d2ec8){var _0x4e6f7a=this;return function(){_0x4e6f7a[_0x65f6('0x12e')](_0x1d2ec8);};};Dialer[_0x65f6('0x1a')]['syncQueueSummary']=function(_0x13f4a5){var _0x4315c1=this;if(isNotPreview(_0x13f4a5[_0x65f6('0x59')])){if(isVoiceQueueOutbound(_0x13f4a5['type'])&&isActive(_0x13f4a5[_0x65f6('0x58')])){_0x13f4a5[_0x65f6('0x94')]=!![];BPromise['resolve']()['then'](checkIsLoggedIn(_0x13f4a5,_0x13f4a5['loggedIn']))[_0x65f6('0xa7')](checkIsActive(_0x13f4a5,_0x13f4a5[_0x65f6('0x58')]))[_0x65f6('0xa7')](checkInterval(_0x13f4a5))[_0x65f6('0xa7')](_0x4315c1[_0x65f6('0x12f')](_0x13f4a5))[_0x65f6('0xa7')](_0x4315c1[_0x65f6('0x10f')](_0x13f4a5[_0x65f6('0x130')],_0x13f4a5[_0x65f6('0x131')],_0x13f4a5[_0x65f6('0x3e')],_0x13f4a5))[_0x65f6('0xa7')](_0x4315c1[_0x65f6('0x111')](_0x13f4a5[_0x65f6('0x40')],_0x13f4a5[_0x65f6('0x131')],_0x13f4a5[_0x65f6('0x3e')],_0x13f4a5))[_0x65f6('0xa7')](_0x4315c1[_0x65f6('0x132')](_0x13f4a5))[_0x65f6('0xa8')](loggerCatchQueueSummary('[syncQueueSummary]',_0x13f4a5));}else{notSendMessagesQueue(_0x13f4a5);}}else{freeVariablesPredictive(_0x13f4a5);}};Dialer[_0x65f6('0x1a')][_0x65f6('0x133')]=function(){var _0x5c85f2=this;var _0x560f93;for(var _0x23709a in this[_0x65f6('0x20')]){if(this[_0x65f6('0x20')][_0x65f6('0x8e')](_0x23709a)){_0x560f93=this['campaigns'][_0x23709a];if(isCampaignIvr(_0x560f93['type'])&&isActive(_0x560f93[_0x65f6('0x76')])){_0x560f93['sendMessageOneNotActive']=!![];BPromise[_0x65f6('0xab')]()[_0x65f6('0xa7')](checkIsActive(_0x560f93,_0x560f93['active']))['then'](checkInterval(_0x560f93))[_0x65f6('0xa7')](_0x5c85f2[_0x65f6('0x12f')](_0x560f93))[_0x65f6('0xa7')](_0x5c85f2[_0x65f6('0x10f')](_0x560f93['dialGlobalInterval'],_0x560f93[_0x65f6('0x131')],_0x560f93['name'],_0x560f93))[_0x65f6('0xa7')](_0x5c85f2[_0x65f6('0x111')](_0x560f93[_0x65f6('0x40')],_0x560f93[_0x65f6('0x131')],_0x560f93['name'],_0x560f93))[_0x65f6('0xa7')](_0x5c85f2['launchHandleIvr'](_0x560f93))[_0x65f6('0xa8')](loggerCatchQueueSummary('[syncCampaigns]',_0x560f93));}else{notSendMessagesCampaign(_0x560f93);}}}};function getCallerIdRandom(_0x5689fb,_0x38de54){var _0x498fa5,_0x86a09b,_0xa518b9;if(_0x38de54<=0x0){_0x38de54=0x1;}_0x498fa5=new RegExp(_0x65f6('0x134')+_0x38de54+'}$');_0x86a09b=Math[_0x65f6('0x135')](0xa,_0x38de54-0x1);_0xa518b9=Math[_0x65f6('0x135')](0xa,_0x38de54)-0x1;return util[_0x65f6('0x78')]('%s',_[_0x65f6('0x136')](_0x5689fb,_0x498fa5,_[_0x65f6('0x137')](_0x86a09b,_0xa518b9)));}function extractCalleridName(_0x1f1b0c){var _0x4a4a15=_0x1f1b0c[_0x65f6('0x138')](/"(.*?)"/);return _0x4a4a15?_0x4a4a15[0x1]:_0x1f1b0c;}function extractCalleridNumber(_0x232527){var _0x22b9d4=_0x232527[_0x65f6('0x138')](/<(.*?)>/);return _0x22b9d4?_0x22b9d4[0x1]:_0x232527;}Dialer['prototype'][_0x65f6('0x139')]=function(_0x335fdd,_0x478ffe){var _0x421203=this;var _0x13a887=uuid['v4']();this[_0x65f6('0x23')][_0x13a887]=new Action(_0x335fdd,_0x478ffe,_0x13a887);return new BPromise(function(_0x252809,_0x3a3fe6){if(_[_0x65f6('0x3a')](_0x335fdd)&&_0x65f6('0x13a')!==typeof _0x335fdd){return _0x3a3fe6(msgResponse(_0x65f6('0x13b'),_0x65f6('0x112'),_0x65f6('0x13c')));}if(_[_0x65f6('0x3a')](_0x478ffe['Contact'][_0x65f6('0x13d')])||_0x478ffe['Contact'][_0x65f6('0x13d')]===null){return _0x3a3fe6(msgResponse('originate',_0x65f6('0x112'),_0x65f6('0x13e')));}var _0x1f83ec={'XMD-CALLERID':_0x421203['actions'][_0x13a887][_0x65f6('0x13f')](),'XMD-AGI':_0x335fdd[_0x65f6('0xe0')]?util['format'](_0x65f6('0x140'),ipAgi,_0x335fdd[_0x65f6('0xe0')]):_0x65f6('0x141'),'XMD-AGIAFTER':_0x335fdd['dialQueueProject2']?util['format']('\x22agi://%s/square,%s\x22',ipAgi,_0x335fdd['dialQueueProject2']):_0x65f6('0x141'),'XMD-QUEUE':_0x335fdd[_0x65f6('0x4a')]===_0x65f6('0x4b')?util[_0x65f6('0x78')](_0x65f6('0x142'),_0x335fdd[_0x65f6('0x3e')],_0x335fdd[_0x65f6('0x143')]||'',_0x335fdd['dialAgiAfterHangupAgent']?'c':'',_0x335fdd[_0x65f6('0x144')]||0x3):_0x65f6('0x141'),'XMD-CONTACTID':_0x478ffe[_0x65f6('0xc0')],'XMD-CDRTYPE':_0x65f6('0x6'),'CALLERID(all)':_0x421203['actions'][_0x13a887][_0x65f6('0x13f')](),'XMD-AMD':_0x335fdd['dialAMDActive']?_0x65f6('0x145'):_0x65f6('0x141'),'XMD-DESTINATION':'xcally-motion-dialer'};if(_0x335fdd['dialAMDActive']){_0x1f83ec[_0x65f6('0x146')]=_0x335fdd[_0x65f6('0x147')]||0x9c4;_0x1f83ec['XMD-AMDGREETING']=_0x335fdd['dialAMDGreeting']||0x5dc;_0x1f83ec[_0x65f6('0x148')]=_0x335fdd[_0x65f6('0x149')]||0x320;_0x1f83ec[_0x65f6('0x14a')]=_0x335fdd[_0x65f6('0x14b')]||0x1388;_0x1f83ec[_0x65f6('0x14c')]=_0x335fdd[_0x65f6('0x14d')]||0x64;_0x1f83ec[_0x65f6('0x14e')]=_0x335fdd[_0x65f6('0x14f')]||0x32;_0x1f83ec[_0x65f6('0x150')]=_0x335fdd[_0x65f6('0x151')]||0x3;_0x1f83ec[_0x65f6('0x152')]=_0x335fdd[_0x65f6('0x153')]||0x100;_0x1f83ec[_0x65f6('0x154')]=_0x335fdd[_0x65f6('0x155')]||0x1388;}if(_0x335fdd[_0x65f6('0x4a')]===_0x65f6('0x4b')){_0x1f83ec['XMD-VOICEQUEUEID']=_0x478ffe['VoiceQueueId'];}else{_0x1f83ec[_0x65f6('0x156')]=_0x478ffe[_0x65f6('0xc1')];}for(var _0x290dbe in _0x478ffe[_0x65f6('0x157')]){if(_0x478ffe[_0x65f6('0x157')][_0x65f6('0x8e')](_0x290dbe)){if(isNotNull(_0x478ffe[_0x65f6('0x157')][_0x290dbe])&&_0x290dbe!=='id'&&_0x290dbe!==_0x65f6('0x158')&&_0x290dbe!==_0x65f6('0x159')&&_0x290dbe!==_0x65f6('0x15a')){_0x1f83ec[util['format'](_0x65f6('0x15b'),'XMD-',_['toUpper'](_0x290dbe))]=_0x478ffe[_0x65f6('0x157')][_0x290dbe];}}}var _0x293138=_0x421203[_0x65f6('0x10b')](_0x335fdd[_0x65f6('0x75')])?getCallerId(_0x335fdd['Trunk'][_0x65f6('0x77')],_0x335fdd[_0x65f6('0x5a')],_0x335fdd[_0x65f6('0x15c')]>0x0?getCallerIdRandom(_0x335fdd[_0x65f6('0x5b')],_0x335fdd[_0x65f6('0x15c')]):_0x335fdd[_0x65f6('0x5b')]):getCallerId(_[_0x65f6('0x9f')](_0x335fdd[_0x65f6('0x10c')])?_0x335fdd[_0x65f6('0x75')][_0x65f6('0x77')]:_0x335fdd['TrunkBackup']['callerid'],_0x335fdd[_0x65f6('0x5a')],_0x335fdd[_0x65f6('0x15c')]>0x0?getCallerIdRandom(_0x335fdd[_0x65f6('0x5b')],_0x335fdd[_0x65f6('0x15c')]):_0x335fdd[_0x65f6('0x5b')]);if(_0x293138){_0x1f83ec[_0x65f6('0x15d')]=_0x421203[_0x65f6('0x23')][_0x13a887][_0x65f6('0x15e')]=extractCalleridName(_0x293138);_0x1f83ec['XMD-ORIGINATECALLERIDNUM']=_0x421203['actions'][_0x13a887][_0x65f6('0x15f')]=extractCalleridNumber(_0x293138);}return ami[_0x65f6('0x119')]({'actionid':_0x13a887,'action':'originate','channel':_0x421203[_0x65f6('0x10b')](_0x335fdd[_0x65f6('0x75')])?util[_0x65f6('0x78')](_0x65f6('0x160'),_0x335fdd[_0x65f6('0x75')][_0x65f6('0x3e')],isNotNull(_0x335fdd['dialPrefix'])?_0x335fdd[_0x65f6('0x161')][_0x65f6('0x162')]()||'':'',_0x335fdd['dialCutDigit']>0x0?_0x478ffe['Contact'][_0x65f6('0x13d')][_0x65f6('0x163')](_0x335fdd[_0x65f6('0x164')]):_0x478ffe[_0x65f6('0x157')][_0x65f6('0x13d')]):util[_0x65f6('0x78')]('SIP/%s/%s%s',_['isNil'](_0x335fdd[_0x65f6('0x10c')])?_0x335fdd[_0x65f6('0x75')][_0x65f6('0x3e')]:_0x335fdd['TrunkBackup'][_0x65f6('0x3e')],isNotNull(_0x335fdd[_0x65f6('0x161')])?_0x335fdd[_0x65f6('0x161')]['trim']()||'':'',_0x335fdd[_0x65f6('0x164')]>0x0?_0x478ffe[_0x65f6('0x157')][_0x65f6('0x13d')]['substring'](_0x335fdd[_0x65f6('0x164')]):_0x478ffe[_0x65f6('0x157')][_0x65f6('0x13d')]),'callerid':_0x293138,'Exten':_0x65f6('0xcb'),'Context':_0x65f6('0x165'),'Priority':'1','variable':_0x1f83ec,'timeout':(_0x335fdd[_0x65f6('0x5c')]||0x1e)*0x3e8,'async':!![],'channelid':_0x13a887})[_0x65f6('0xa7')](function(_0x4316bc){return _0x252809(_0x4316bc);})[_0x65f6('0xa8')](function(_0x1c5345){_0x335fdd['outboundOriginateFailureCallsDay']+=0x1;var _0x43d262=new History(_0x421203['actions'][_0x13a887]);logger[_0x65f6('0x8b')](util['format']('[originateError]:\x20%s',JSON[_0x65f6('0x47')](_0x1c5345)));_0x43d262[_0x65f6('0x99')]=0xe;_0x43d262['statedesc']=_0x65f6('0x166');_0x43d262[_0x65f6('0x167')]=moment()[_0x65f6('0x78')](_0x65f6('0xe7'));_0x43d262[_0x65f6('0x9a')]=_0x43d262['starttime'];_0x421203['createHistory'](_0x43d262)['catch'](loggerCatch(_0x65f6('0x168')));_0x421203['moveContactManagedDialer'](_0x43d262)[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x168')))[_0x65f6('0xfb')](function(){delete _0x421203[_0x65f6('0x23')][_0x13a887];return _0x3a3fe6(msgResponse(_0x65f6('0x13b'),_0x65f6('0x46'),_0x65f6('0x169')));});});});};Dialer['prototype']['syncOriginateResponse']=function(_0x551cfc){var _0x1fa2f6=this[_0x65f6('0x23')][_0x551cfc[_0x65f6('0xf1')]];var _0x18892c=this;if(_0x1fa2f6){delete this['actions'][_0x551cfc[_0x65f6('0xf1')]];_0x1fa2f6['responsetime']=moment()['format'](_0x65f6('0xe7'));var _0x1fd1c1=_0x1fa2f6['type']===_0x65f6('0x7b')?this[_0x65f6('0x20')][_0x1fa2f6[_0x65f6('0xa5')]]:this[_0x65f6('0x1f')][_0x1fa2f6['getQueue']()];if(!this['isSuccess'](_0x551cfc[_0x65f6('0x16a')])){this[_0x65f6('0xa3')](_0x1fd1c1);return this['callProgressDetecting'](_0x1fa2f6,_0x1fd1c1,_0x551cfc)[_0x65f6('0xa7')](function(_0x13ecb8){})[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x16b')));}else{this[_0x65f6('0x9c')][_0x551cfc[_0x65f6('0xc7')]]=_0x1fa2f6;}}};Dialer[_0x65f6('0x1a')][_0x65f6('0x16c')]=function(_0x309811,_0x5a55f8,_0x30b0c1){var _0x1f3358=new History(_0x5a55f8);if(_0x1f3358[_0x65f6('0x16d')]+_0x1f3358[_0x65f6('0x16e')]+_0x1f3358['countnoanswerretry']>=_0x30b0c1['dialGlobalMaxRetry']-0x1){return!![];}switch(_0x309811){case 0x3:if(_0x1f3358[_0x65f6('0x16f')]>=_0x30b0c1['dialNoAnswerMaxRetry']-0x1){return!![];}else{this[_0x65f6('0xb0')]({'active':![],'countnoanswerretry':_0x1f3358[_0x65f6('0x16f')]+=0x1,'scheduledat':moment()[_0x65f6('0x170')](_0x30b0c1[_0x65f6('0x171')],'minutes')[_0x65f6('0x78')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x1f3358[_0x65f6('0xc0')],'ListId':_0x1f3358[_0x65f6('0xfc')],'VoiceQueueId':_0x1f3358['VoiceQueueId']||undefined,'CampaignId':_0x1f3358[_0x65f6('0xc1')]||undefined})[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x172')));}break;case 0x5:if(_0x1f3358[_0x65f6('0x16d')]>=_0x30b0c1[_0x65f6('0x173')]-0x1){return!![];}else{this[_0x65f6('0xb0')]({'active':![],'countbusyretry':_0x1f3358['countbusyretry']+=0x1,'scheduledat':moment()[_0x65f6('0x170')](_0x30b0c1['dialBusyRetryFrequency'],_0x65f6('0x174'))['format'](_0x65f6('0xe7')),'ContactId':_0x1f3358[_0x65f6('0xc0')],'ListId':_0x1f3358['ListId'],'VoiceQueueId':_0x1f3358[_0x65f6('0xfd')]||undefined,'CampaignId':_0x1f3358[_0x65f6('0xc1')]||undefined})['catch'](loggerCatch(_0x65f6('0x175')));}break;case 0x8:if(_0x1f3358['countcongestionretry']>=_0x30b0c1[_0x65f6('0x176')]-0x1){return!![];}else{this[_0x65f6('0xb0')]({'active':![],'countcongestionretry':_0x1f3358[_0x65f6('0x16e')]+=0x1,'scheduledat':moment()[_0x65f6('0x170')](_0x30b0c1[_0x65f6('0x177')],_0x65f6('0x174'))[_0x65f6('0x78')](_0x65f6('0xe7')),'ContactId':_0x1f3358[_0x65f6('0xc0')],'ListId':_0x1f3358[_0x65f6('0xfc')],'VoiceQueueId':_0x1f3358[_0x65f6('0xfd')]||undefined,'CampaignId':_0x1f3358[_0x65f6('0xc1')]||undefined})[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x178')));}break;default:return!![];}};Dialer[_0x65f6('0x1a')][_0x65f6('0x179')]=function(_0x5d7dd0,_0x14f07a,_0x47563c){var _0x5da064=this;var _0x189af0=new History(_0x5d7dd0);return new BPromise(function(_0x10a1af,_0x2a83cf){if(_[_0x65f6('0x3a')](_0x14f07a)&&_0x65f6('0x13a')!==typeof _0x14f07a){return _0x2a83cf(msgResponse(_0x65f6('0x17a'),_0x65f6('0x112'),_0x65f6('0x17b')));}if(_[_0x65f6('0x3a')](_0x47563c)&&_0x65f6('0x13a')!==typeof _0x47563c){return _0x2a83cf(msgResponse('[callProgressDetecting]','Failure',_0x65f6('0x17c')));}switch(_0x47563c[_0x65f6('0x17d')]){case'0':_0x14f07a['outboundNoSuchCallsDay']+=0x1;_0x189af0[_0x65f6('0x99')]=0x0;_0x189af0[_0x65f6('0xcf')]=_0x65f6('0x17e');_0x5da064[_0x65f6('0xb8')](_0x189af0)[_0x65f6('0xa8')](loggerCatch('[syncAgentComplete][createHistory][0]'));if(_0x5da064['checkRetriveMax'](0x0,_0x5d7dd0,_0x14f07a)){if(_0x189af0['countbusyretry']+_0x189af0[_0x65f6('0x16e')]+_0x189af0[_0x65f6('0x16f')]>=_0x14f07a[_0x65f6('0x17f')]){_0x5da064[_0x65f6('0x180')](_0x189af0,_0x10a1af,_0x2a83cf,_0x65f6('0x181'));}else{_0x5da064['createStateFinal'](_0x189af0,_0x10a1af,_0x2a83cf,_0x65f6('0x181'));}}break;case'3':_0x14f07a['outboundNoAnswerCallsDay']+=0x1;_0x189af0[_0x65f6('0x99')]=0x3;_0x189af0[_0x65f6('0xcf')]=_0x65f6('0x182');_0x189af0['countnoanswerretry']+=0x1;_0x189af0[_0x65f6('0x183')]+=0x1;_0x5da064['createHistory'](_0x189af0)[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x184')));if(_0x5da064['checkRetriveMax'](0x3,_0x5d7dd0,_0x14f07a)){if(_0x189af0[_0x65f6('0x16f')]>=_0x14f07a[_0x65f6('0x185')]){_0x5da064['createStateFinal'](_0x189af0,_0x10a1af,_0x2a83cf,_0x65f6('0x186'));}else{_0x5da064[_0x65f6('0x180')](_0x189af0,_0x10a1af,_0x2a83cf,_0x65f6('0x186'));}}break;case'5':_0x14f07a[_0x65f6('0x60')]+=0x1;_0x189af0[_0x65f6('0x99')]=0x5;_0x189af0['statedesc']=_0x65f6('0x187');_0x189af0[_0x65f6('0x16d')]+=0x1;_0x189af0['countglobal']+=0x1;_0x5da064[_0x65f6('0xb8')](_0x189af0)[_0x65f6('0xa8')](loggerCatch('[syncAgentComplete][createHistory][5]'));if(_0x5da064['checkRetriveMax'](0x5,_0x5d7dd0,_0x14f07a)){if(_0x189af0[_0x65f6('0x16d')]>=_0x14f07a['dialBusyMaxRetry']){_0x5da064[_0x65f6('0x188')](_0x189af0,_0x10a1af,_0x2a83cf,_0x65f6('0x189'));}else{_0x5da064[_0x65f6('0x180')](_0x189af0,_0x10a1af,_0x2a83cf,_0x65f6('0x189'));}}break;case'8':_0x14f07a[_0x65f6('0x61')]+=0x1;_0x189af0[_0x65f6('0x99')]=0x8;_0x189af0[_0x65f6('0xcf')]=_0x65f6('0x18a');_0x189af0[_0x65f6('0x16e')]+=0x1;_0x189af0[_0x65f6('0x183')]+=0x1;_0x5da064['createHistory'](_0x189af0)[_0x65f6('0xa8')](loggerCatch('[syncAgentComplete][createHistory][8]'));if(_0x5da064[_0x65f6('0x16c')](0x8,_0x5d7dd0,_0x14f07a)){if(_0x189af0[_0x65f6('0x16e')]>=_0x14f07a[_0x65f6('0x176')]){_0x5da064[_0x65f6('0x188')](_0x189af0,_0x10a1af,_0x2a83cf,'reason\x208\x20congestion');}else{_0x5da064['stateGlobal'](_0x189af0,_0x10a1af,_0x2a83cf,_0x65f6('0x18b'));}}break;default:_0x14f07a[_0x65f6('0x6a')]+=0x1;_0x189af0[_0x65f6('0x99')]=0xc;_0x189af0[_0x65f6('0xcf')]=_0x47563c[_0x65f6('0x17d')];_0x5da064[_0x65f6('0xb8')](_0x189af0)['catch'](loggerCatch('[syncAgentComplete][createHistory][?]'));if(_0x5da064[_0x65f6('0x16c')](_0x47563c['reason'],_0x5d7dd0,_0x14f07a)){if(_0x189af0[_0x65f6('0x16d')]+_0x189af0[_0x65f6('0x16e')]+_0x189af0[_0x65f6('0x16f')]>=_0x14f07a[_0x65f6('0x17f')]){_0x5da064[_0x65f6('0x180')](_0x189af0,_0x10a1af,_0x2a83cf,_0x47563c['reason']);}else{_0x5da064[_0x65f6('0x188')](_0x189af0,_0x10a1af,_0x2a83cf,_0x47563c['reason']);}}}});};Dialer[_0x65f6('0x1a')][_0x65f6('0x180')]=function(_0x57d25c,_0x43340f,_0x188495,_0x847761){var _0x306792=new Final(_0x57d25c);_0x306792['state']=0xf;_0x306792[_0x65f6('0xcf')]=_0x65f6('0x18c');this[_0x65f6('0x188')](_0x306792,_0x43340f,_0x188495,_0x847761);};Dialer['prototype'][_0x65f6('0x188')]=function(_0x48168a,_0x42b42a,_0x2fc5a6,_0x146686){this[_0x65f6('0xb6')](_0x48168a)[_0x65f6('0xa7')](function(_0x2cf42a){return _0x42b42a(msgResponse(_0x65f6('0x17a'),'Success',_0x146686));})[_0x65f6('0xa8')](function(_0x3628ee){return _0x2fc5a6(msgResponse(_0x65f6('0x18d'),_0x65f6('0x112'),_0x65f6('0x18e')));});};Dialer[_0x65f6('0x1a')][_0x65f6('0x12b')]=function(_0x32f4ec){var _0x1e20fd=this;var _0x440abb=_0x32f4ec[_0x65f6('0x18f')]/0x64;var _0x9d31a8=_0x32f4ec['outboundDropCallsDayTimeout']/(_0x32f4ec['outboundDropCallsDayTimeout']+_0x32f4ec[_0x65f6('0x5e')]);var _0xbf5cba=_0x32f4ec[_0x65f6('0x190')]-_0x32f4ec[_0x65f6('0x73')]-_0x32f4ec['waiting']-_0x32f4ec[_0x65f6('0x74')]-_0x32f4ec[_0x65f6('0x52')];var _0x5df07a=(_0x32f4ec['loggedIn']-_0x32f4ec[_0x65f6('0x73')])*_0x32f4ec[_0x65f6('0x71')];var _0x112c3c=Math[_0x65f6('0x191')](_0x32f4ec[_0x65f6('0x192')]*_0x32f4ec['erlangAbandonmentRate']*_0x32f4ec['predictiveIntervalHitRate']*_0x32f4ec['predictiveIntervalMultiplicativeFactor']);if(_[_0x65f6('0x3a')](_0x32f4ec[_0x65f6('0x27')])){loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x193'));if(!_[_0x65f6('0x3a')](_0x32f4ec[_0x65f6('0x26')])){_0x32f4ec[_0x65f6('0x26')]=undefined;loggerPredictive[_0x65f6('0x8b')](_0x65f6('0x194'),'check\x20predictive\x20is\x20not\x20undefine');}if(!_[_0x65f6('0x3a')](_0x32f4ec[_0x65f6('0x88')])){loggerPredictive['error']('[startMethodPredictive][StartProgressive]',_0x65f6('0x195'));clearInterval(_0x32f4ec['handlePredictive']);_0x32f4ec[_0x65f6('0x88')]=undefined;}_0x32f4ec[_0x65f6('0x27')]=moment()[_0x65f6('0x78')](_0x65f6('0xe7'));loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x196'),_0x32f4ec[_0x65f6('0x27')],_0x32f4ec[_0x65f6('0x3e')]);this[_0x65f6('0x129')](_0x32f4ec,0x1);}else if(ifInterval(_0x32f4ec[_0x65f6('0x197')],_0x32f4ec[_0x65f6('0x27')])){this[_0x65f6('0x129')](_0x32f4ec,0x1);loggerPredictiveCalls[_0x65f6('0x7f')](_0x65f6('0x198'),_0x32f4ec['startProgressive'],_0x32f4ec[_0x65f6('0x3e')]);_0x32f4ec[_0x65f6('0x192')]=0x0;_0x32f4ec[_0x65f6('0x70')]=0x0;}else if(_0x440abb<_0x9d31a8&&_0x32f4ec[_0x65f6('0x199')]===_0x65f6('0x19a')){freeVariablesPredictive(_0x32f4ec);loggerPredictive[_0x65f6('0x7f')]('[stopMethodPredictive][ReStartProgressive][ExceededDropDay]',_0x65f6('0x19b'),_0x9d31a8,'startProgressive',_0x32f4ec[_0x65f6('0x3e')]);}else if(_0xbf5cba>_0x5df07a){freeVariablesPredictive(_0x32f4ec);loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x19c'),_0x65f6('0x19d'),_0xbf5cba,_0x65f6('0x19e'),_0x5df07a);}else if(_0x112c3c<_0x32f4ec[_0x65f6('0x70')]&&_0x32f4ec['dialPredictiveOptimization']===_0x65f6('0x19a')){freeVariablesPredictive(_0x32f4ec);loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x19f'),'Max\x20Drop\x20',_0x112c3c,_0x65f6('0x1a0'),_0x32f4ec[_0x65f6('0x70')],_0x65f6('0x27'),_0x32f4ec['name']);}else if(!ifInterval(_0x32f4ec[_0x65f6('0x197')],_0x32f4ec[_0x65f6('0x27')])&&_[_0x65f6('0x3a')](_0x32f4ec[_0x65f6('0x26')])&&!_[_0x65f6('0x3a')](_0x32f4ec[_0x65f6('0x27')])){_0x32f4ec['startPredictive']=moment()[_0x65f6('0x78')](_0x65f6('0xe7'));loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x1a1'),_0x32f4ec[_0x65f6('0x26')],_0x32f4ec[_0x65f6('0x3e')]);this['averageHandleTime'](_0x32f4ec[_0x65f6('0x197')])[_0x65f6('0xa7')](this[_0x65f6('0x1a2')](_0x32f4ec))['then'](mergeDataErlangB(_0x32f4ec))[_0x65f6('0xa7')](this[_0x65f6('0x1a3')](_0x32f4ec))[_0x65f6('0xa8')](loggerCatchPredictive('[averageHandleTime][ErlangB]\x20',_0x32f4ec));}else if(!ifInterval(_0x32f4ec[_0x65f6('0x197')],_0x32f4ec[_0x65f6('0x26')])){_0x32f4ec['predictiveIntervalErlangCallsDroppedCalls']=0x0;_0x32f4ec[_0x65f6('0x26')]=moment()[_0x65f6('0x78')]('YYYY-MM-DD\x20HH:mm:ss');loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x1a4'),_0x32f4ec['startPredictive'],_0x32f4ec[_0x65f6('0x3e')]);clearInterval(_0x32f4ec[_0x65f6('0x88')]);_0x32f4ec[_0x65f6('0x88')]=undefined;this[_0x65f6('0x1a5')](_0x32f4ec[_0x65f6('0x197')])[_0x65f6('0xa7')](this['getDataPredictive'](_0x32f4ec))['then'](mergeDataErlangB(_0x32f4ec))[_0x65f6('0xa7')](this['startMethodPredictive'](_0x32f4ec))['catch'](loggerCatchPredictive('[averageHandleTime][ErlangB]\x20',_0x32f4ec));}};Dialer['prototype'][_0x65f6('0x1a2')]=function(_0x4619d6){var _0x395961=this;return function(_0x2fbe43){return new BPromise(function(_0x465082,_0x361c8e){_[_0x65f6('0xbe')](_0x4619d6,_0x2fbe43[0x0]);if(checkGetDataPredictive(_0x2fbe43[0x0])){loggerPredictive[_0x65f6('0x7f')](JSON[_0x65f6('0x47')](_0x2fbe43[0x0]));if(_0x4619d6[_0x65f6('0x199')]==='dropRate'){return _0x395961['getVoiceQueueRtPauses'](_0x4619d6['id'])['then'](function(_0x368239){var _0x357b2c=_0x4619d6[_0x65f6('0x190')]-_0x368239[0x0]['outboundQueuePauses'];var _0x16f882=_0x4619d6[_0x65f6('0x197')]*0x3c;var _0x2a7d7a=_0x2fbe43[0x0][_0x65f6('0x7e')]+_0x2fbe43[0x0][_0x65f6('0x6c')];var _0x487d80=(_0x2fbe43[0x0][_0x65f6('0x6b')]+_0x2fbe43[0x0][_0x65f6('0x6e')]+_0x2fbe43[0x0][_0x65f6('0x6d')])/_0x2fbe43[0x0]['predictiveIntervalTotalCalls'];var _0x195c90=_0x4619d6[_0x65f6('0x18f')]/0x64;_0x4619d6[_0x65f6('0x73')]=_0x368239[0x0]['outboundQueuePauses']||0x0;_0x4619d6[_0x65f6('0x1a6')]=_0x487d80>0x0?_0x487d80:0x1;return _0x395961[_0x65f6('0x1a7')](_0x357b2c,_0x16f882,_0x2a7d7a,_0x487d80,_0x195c90);})[_0x65f6('0xa7')](function(_0x512ec2){return _0x465082(_0x512ec2);})[_0x65f6('0xa8')](function(_0x52f7bc){return _0x361c8e(msgResponse(_0x65f6('0x1a8'),_0x65f6('0x112'),JSON[_0x65f6('0x47')](_0x52f7bc)));});}if(_0x4619d6['dialPredictiveOptimization']===_0x65f6('0x1a9')){return _0x395961['getVoiceQueueRtPauses'](_0x4619d6['id'])[_0x65f6('0xa7')](function(_0x4044e3){var _0xf01de7=_0x4619d6[_0x65f6('0x190')]-_0x4044e3[0x0]['outboundQueuePauses'];var _0x1eecc9=_0x4619d6[_0x65f6('0x197')]*0x3c;var _0x282d63=_0x2fbe43[0x0][_0x65f6('0x7e')]+_0x2fbe43[0x0][_0x65f6('0x6c')];var _0x19ce3f=(_0x2fbe43[0x0][_0x65f6('0x6b')]+_0x2fbe43[0x0][_0x65f6('0x6e')]+_0x2fbe43[0x0]['predictiveIntervalDroppedCallsCallersExit'])/_0x2fbe43[0x0][_0x65f6('0x1aa')];var _0x2b986d=_0x4619d6[_0x65f6('0x18f')]/0x64;_0x4619d6['predictiveIntervalPauses']=_0x4044e3[0x0][_0x65f6('0x1ab')]||0x0;_0x4619d6['predictiveIntervalHitRate']=_0x19ce3f>0x0?_0x19ce3f:0x1;return _0x395961[_0x65f6('0x1ac')](_0xf01de7,_0x1eecc9,_0x282d63,_0x19ce3f,_0x2b986d);})[_0x65f6('0xa7')](function(_0x2a0696){return _0x465082(_0x2a0696);})[_0x65f6('0xa8')](function(_0xdb847){return _0x361c8e(msgResponse(_0x65f6('0x1a8'),'Failure',JSON[_0x65f6('0x47')](_0xdb847)));});}}else{return _0x361c8e(msgResponse(_0x65f6('0x1ad'),_0x65f6('0x112'),_0x65f6('0x1ae')));}});};};Dialer[_0x65f6('0x1a')][_0x65f6('0x1a3')]=function(_0x475568){var _0x309dd0=this;return function(){var _0x413874=0x0;var _0x1b1895=Math['floor'](_0x475568['erlangCallToSecond']*0x3e8);if(_0x1b1895>0x0){_0x1b1895=_0x1b1895<0x64?0x64:_0x1b1895;loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x1af'),_0x1b1895);_0x475568[_0x65f6('0x88')]=setInterval(function(){_0x309dd0[_0x65f6('0x88')](_0x475568);loggerPredictiveCalls['info'](_0x65f6('0x1b0'),_0x413874+=0x1);},_0x1b1895);}else{loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x1b1'),_0x65f6('0x1b2'),_0x1b1895);}};};Dialer[_0x65f6('0x1a')]['checkContactBlack']=function(_0x5c60e5,_0x29ac7f){var _0x34ce7d=this;return function(_0x3fc92b){if(_[_0x65f6('0x44')](_0x3fc92b)){if(_[_0x65f6('0x9f')](_0x29ac7f['UserId'])||!_0x29ac7f['recallme']){if(_0x5c60e5[_0x65f6('0x59')]==='booked'){_0x5c60e5[_0x65f6('0xf6')]=_['isUndefined'](_0x5c60e5[_0x65f6('0xf6')])?!![]:_0x5c60e5[_0x65f6('0xf6')];var _0x47c380=uuid['v4']();_0x34ce7d[_0x65f6('0x23')][_0x47c380]=new Action(_0x5c60e5,_0x29ac7f,_0x47c380);loggerBooked[_0x65f6('0x7f')]('[booked][checkContactBlack]',_0x47c380,_0x65f6('0x1b3'),JSON['stringify'](_0x5c60e5[_0x65f6('0xf6')]),_0x65f6('0x1b4'),_0x5c60e5[_0x65f6('0x3e')]);if(_0x5c60e5[_0x65f6('0xf6')]){_0x5c60e5[_0x65f6('0xf6')]=![];_0x34ce7d[_0x65f6('0x29')][_0x34ce7d[_0x65f6('0x23')][_0x47c380][_0x65f6('0xa5')]]=[];ami[_0x65f6('0x119')]({'actionid':_0x47c380,'action':_0x65f6('0x1b5'),'queue':_0x5c60e5[_0x65f6('0x3e')]})[_0x65f6('0xa8')](function(_0x17b84d){_0x34ce7d['updateOriginated'](_0x5c60e5);_0x34ce7d[_0x65f6('0xb0')]({'active':![],'ContactId':_0x34ce7d[_0x65f6('0x23')][_0x47c380][_0x65f6('0xc0')],'ListId':_0x34ce7d[_0x65f6('0x23')][_0x47c380]['ListId'],'VoiceQueueId':_0x34ce7d['actions'][_0x47c380][_0x65f6('0xfd')]||undefined,'CampaignId':_0x34ce7d[_0x65f6('0x23')][_0x47c380][_0x65f6('0xc1')]||undefined})[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x1b6')));delete _0x34ce7d[_0x65f6('0x23')][_0x47c380];});}else{loggerBooked[_0x65f6('0x7f')](_0x65f6('0x1b7'),JSON[_0x65f6('0x47')](_0x5c60e5[_0x65f6('0xf6')]),_0x65f6('0x1b4'),_0x5c60e5[_0x65f6('0x3e')]);_0x34ce7d[_0x65f6('0xa3')](_0x5c60e5);_0x34ce7d['rescheduleContact']({'active':![],'ContactId':_0x34ce7d[_0x65f6('0x23')][_0x47c380][_0x65f6('0xc0')],'ListId':_0x34ce7d[_0x65f6('0x23')][_0x47c380][_0x65f6('0xfc')],'VoiceQueueId':_0x34ce7d[_0x65f6('0x23')][_0x47c380][_0x65f6('0xfd')]||undefined,'CampaignId':_0x34ce7d['actions'][_0x47c380][_0x65f6('0xc1')]||undefined})[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x1b6')));delete _0x34ce7d[_0x65f6('0x23')][_0x47c380];}}else{return _0x34ce7d[_0x65f6('0x139')](_0x5c60e5,_0x29ac7f);}}else{if(getDiff(_0x29ac7f[_0x65f6('0x1b8')])<_0x5c60e5[_0x65f6('0x1b9')]*0x3c){_0x34ce7d[_0x65f6('0x1e')]['run'](_0x29ac7f['id'])[_0x65f6('0xfb')](function(){_0x34ce7d[_0x65f6('0xa3')](_0x5c60e5);});}else{_0x5c60e5[_0x65f6('0x68')]+=0x1;_0x34ce7d['updateOriginated'](_0x5c60e5);if(_0x5c60e5[_0x65f6('0x1ba')]){_0x34ce7d[_0x65f6('0xb0')]({'active':![],'recallme':![],'UserId':null,'ContactId':_0x29ac7f[_0x65f6('0xc0')],'ListId':_0x29ac7f[_0x65f6('0xfc')],'VoiceQueueId':_0x29ac7f['VoiceQueueId']||undefined,'CampaignId':_0x29ac7f['CampaignId']||undefined})['catch'](loggerCatch('[rescheduleContact][dialRecallInQueue]'));_0x34ce7d[_0x65f6('0xb8')](createObjHistory(_0x5c60e5,_0x29ac7f,_0x65f6('0x1bb'),0x17,_0x65f6('0x1bc')))[_0x65f6('0xa8')](loggerCatch(_0x65f6('0x1bd')));}else{_0x34ce7d[_0x65f6('0xbd')](createObjHistory(_0x5c60e5,_0x29ac7f,'RECALLFAILEDTIMEOUT',0x16,_0x65f6('0x1be')),_0x65f6('0x1bf'),_0x65f6('0x1c0'));}}}}else{_0x5c60e5['outboundBlacklistCallsDay']+=0x1;_0x34ce7d[_0x65f6('0xbd')](createObjHistory(_0x5c60e5,_0x29ac7f,_0x65f6('0x1c1'),0xd,_0x65f6('0x1c2')),_0x65f6('0x1c3'),_0x65f6('0x1c4'));throw'inBlackList';}};};Dialer['prototype'][_0x65f6('0x12e')]=function(_0x32a219){var _0x1db8d4=this;var _0x548e40=[];var _0x54411c=_0x32a219[_0x65f6('0x1c5')]-_0x32a219[_0x65f6('0x74')]-_0x32a219[_0x65f6('0x1c6')];emitCampaignSummary(_0x32a219);if(_0x54411c>0x0){if(_0x54411c>this['maxNumberOriginate']){_0x54411c=this[_0x65f6('0x1c7')];}_0x32a219['temp']+=_0x54411c;this[_0x65f6('0xb3')](_0x32a219['id'],_0x54411c,_0x32a219[_0x65f6('0x1c8')])[_0x65f6('0xa7')](function(_0x2f889d){_0x32a219[_0x65f6('0x1c6')]-=_0x54411c;_0x32a219[_0x65f6('0x1c6')]=_0x32a219['temp']>0x0?_0x32a219[_0x65f6('0x1c6')]:0x0;if(!checkContactEmpty(_0x2f889d)){_0x32a219[_0x65f6('0x3b')]=_0x65f6('0x1c9');logger[_0x65f6('0x7f')](_0x65f6('0x1ca')+_0x32a219[_0x65f6('0x3e')]);}else{_0x32a219[_0x65f6('0x74')]+=_0x2f889d[_0x65f6('0x8d')];_0x32a219[_0x65f6('0x3b')]='RUNNING';for(var _0x45ae6d=0x0;_0x45ae6d<_0x2f889d[_0x65f6('0x8d')];_0x45ae6d+=0x1){_0x32a219[_0x65f6('0x1cb')]+=0x1;if(_['isNil'](_0x2f889d[_0x45ae6d])||_[_0x65f6('0x9f')](_0x2f889d[_0x45ae6d][_0x65f6('0x157')])||_['isNil'](_0x2f889d[_0x45ae6d][_0x65f6('0x157')][_0x65f6('0x13d')])){_0x1db8d4[_0x65f6('0xbc')]('[actionOriginate]\x20',_0x32a219,_0x2f889d[_0x45ae6d]);}else{_0x1db8d4[_0x65f6('0xac')](_[_0x65f6('0xbf')](_0x2f889d[_0x45ae6d],[_0x65f6('0xc1'),'Contact.phone']))[_0x65f6('0xa7')](_0x1db8d4[_0x65f6('0x1cc')](_0x32a219,_0x2f889d[_0x45ae6d]))[_0x65f6('0xa8')](_0x1db8d4['loggerHandler'](_0x65f6('0x1cd'),_0x32a219));}}}})[_0x65f6('0xa8')](loggerGetContactDialer(_0x65f6('0x1ce'),_0x32a219,_0x54411c));}};Dialer[_0x65f6('0x1a')]['handlePower']=function(_0x5b3800,_0x54d89b){var _0x5af881=this;var _0x4d292c=[];var _0x15ea4c=_0x54d89b>=0x1?_0x54d89b:0x1;var _0x324bb8=[];if(_0x5b3800[_0x65f6('0x59')]===_0x65f6('0x7')){_0x15ea4c=0x1;}var _0x54744b=Math[_0x65f6('0x191')](_0x5b3800[_0x65f6('0x4e')]*_0x15ea4c)-_0x5b3800[_0x65f6('0x74')]-_0x5b3800[_0x65f6('0x1c6')];emitVoiceQueueSummary(_0x5b3800);if(_0x5b3800[_0x65f6('0x1cf')]>0x0){var _0x19dfc5=_0x5b3800[_0x65f6('0x1cf')]-_0x5b3800[_0x65f6('0x74')]-_0x5b3800['talking']-_0x5b3800['temp']-_0x5b3800['pTalking'];if(_0x54744b>_0x19dfc5){_0x54744b=_0x19dfc5;}}if(_0x54744b>0x0){if(_0x5b3800[_0x65f6('0x59')]==='booked'){_0x54744b=0x1;}if(_0x54744b>this[_0x65f6('0x1c7')]){_0x54744b=this[_0x65f6('0x1c7')];}_0x5b3800['temp']+=_0x54744b;for(var _0x56dbbd in this[_0x65f6('0x21')]){if(this[_0x65f6('0x21')][_0x65f6('0x8e')](_0x56dbbd)){if(this[_0x65f6('0x21')][_0x56dbbd][_0x65f6('0x99')]===_0x65f6('0x1d0')&&this[_0x65f6('0x21')][_0x56dbbd][_0x65f6('0xa0')]==='reachable'){_0x4d292c['push'](this[_0x65f6('0x21')][_0x56dbbd]['id']);}}}this[_0x65f6('0xb1')](_0x5b3800['id'],_0x4d292c,_0x54744b,_0x5b3800[_0x65f6('0x1c8')])[_0x65f6('0xa7')](function(_0x3670fe){_0x5b3800['temp']-=_0x54744b;_0x5b3800['temp']=_0x5b3800[_0x65f6('0x1c6')]>0x0?_0x5b3800[_0x65f6('0x1c6')]:0x0;if(!checkContactEmpty(_0x3670fe)){_0x5af881[_0x65f6('0xa6')](_0x5b3800)['then'](sendMessageReschedule(_0x5b3800))['catch'](loggerCatch(_0x65f6('0xa9')));}else{_0x5b3800[_0x65f6('0x74')]+=_0x3670fe[_0x65f6('0x8d')];_0x5b3800[_0x65f6('0x3b')]=_0x5b3800[_0x65f6('0x59')]===_0x65f6('0x7')?_0x65f6('0x145'):_0x65f6('0x1d1');for(var _0xc4bf2b=0x0;_0xc4bf2b<_0x3670fe[_0x65f6('0x8d')];_0xc4bf2b+=0x1){if(_['isNil'](_0x3670fe[_0xc4bf2b])||_[_0x65f6('0x9f')](_0x3670fe[_0xc4bf2b]['Contact'])||_[_0x65f6('0x9f')](_0x3670fe[_0xc4bf2b][_0x65f6('0x157')][_0x65f6('0x13d')])){_0x5af881[_0x65f6('0xbc')]('[actionOriginate]\x20',_0x5b3800,_0x3670fe[_0xc4bf2b]);}else{_0x5af881[_0x65f6('0xaa')](_[_0x65f6('0xbf')](_0x3670fe[_0xc4bf2b],[_0x65f6('0xfd'),_0x65f6('0x1d2')]))[_0x65f6('0xa7')](_0x5af881[_0x65f6('0x1cc')](_0x5b3800,_0x3670fe[_0xc4bf2b]))['catch'](_0x5af881[_0x65f6('0xbb')](_0x65f6('0x1d3'),_0x5b3800));}}}})[_0x65f6('0xa8')](loggerGetContactDialer(_0x65f6('0x1d4'),_0x5b3800,_0x54744b));}};Dialer[_0x65f6('0x1a')][_0x65f6('0x88')]=function(_0x548346){var _0x32b2a5=this;if(_0x548346[_0x65f6('0x1cf')]>0x0){var _0x3bd085=_0x548346[_0x65f6('0x1cf')]-_0x548346[_0x65f6('0x74')]-_0x548346[_0x65f6('0x52')];if(_0x3bd085>0x0){this['tryOriginatePredictive'](_0x548346);}else{loggerPredictiveCalls[_0x65f6('0x7f')](_0x65f6('0x1d5'));}}else{this['tryOriginatePredictive'](_0x548346);}};Dialer[_0x65f6('0x1a')]['tryOriginatePredictive']=function(_0x513f54){var _0x528272=this;var _0x4ebaa5=[];_0x513f54[_0x65f6('0x74')]+=0x1;for(var _0x4a7b46 in this[_0x65f6('0x21')]){if(this[_0x65f6('0x21')]['hasOwnProperty'](_0x4a7b46)){if(this[_0x65f6('0x21')][_0x4a7b46][_0x65f6('0x99')]===_0x65f6('0x1d0')&&this[_0x65f6('0x21')][_0x4a7b46][_0x65f6('0xa0')]===_0x65f6('0x1d6')){_0x4ebaa5[_0x65f6('0xf4')](this[_0x65f6('0x21')][_0x4a7b46]['id']);}}}this[_0x65f6('0xb1')](_0x513f54['id'],_0x4ebaa5,0x1,_0x513f54[_0x65f6('0x1c8')])[_0x65f6('0xa7')](function(_0x3c7d0f){if(!checkContactEmpty(_0x3c7d0f)){checkContactLowerLimitOriginate(_0x513f54,0x1,0x0);_0x528272['countReScheduled'](_0x513f54)[_0x65f6('0xa7')](sendMessageReschedule(_0x513f54))[_0x65f6('0xa8')](loggerCatch(_0x65f6('0xa9')));}else{_0x513f54[_0x65f6('0x3b')]=_0x65f6('0x1d1');if(_[_0x65f6('0x9f')](_0x3c7d0f[0x0])||_[_0x65f6('0x9f')](_0x3c7d0f[0x0][_0x65f6('0x157')])||_[_0x65f6('0x9f')](_0x3c7d0f[0x0][_0x65f6('0x157')][_0x65f6('0x13d')])){_0x528272[_0x65f6('0xbc')]('[actionOriginate]\x20',_0x513f54,_0x3c7d0f[0x0]);}else{_0x528272[_0x65f6('0xaa')](_['pick'](_0x3c7d0f[0x0],['VoiceQueueId',_0x65f6('0x1d2')]))[_0x65f6('0xa7')](_0x528272[_0x65f6('0x1cc')](_0x513f54,_0x3c7d0f[0x0]))[_0x65f6('0xa8')](_0x528272['loggerHandler']('[actionOriginatePredictive]\x20',_0x513f54));}}})['catch'](loggerGetContactDialer(_0x65f6('0x1d7'),_0x513f54,0x1));emitVoiceQueueSummary(_0x513f54);};Dialer[_0x65f6('0x1a')][_0x65f6('0x1a7')]=function(_0x3f664e,_0x5f2970,_0x155854,_0x453dae,_0x3d7634,_0x319ab1){loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x1d8'),'\x20m\x20=\x20',_0x3f664e,_0x65f6('0x1d9'),_0x5f2970,_0x65f6('0x1da'),_0x155854,_0x65f6('0x1db'),_0x453dae,'\x20Amax\x20=\x20',_0x3d7634);return new BPromise(function(_0x529207,_0x1b564f){if(_0x3f664e<=0x0||isNaN(_0x3f664e)){return _0x1b564f(msgResponse(_0x65f6('0x1d8'),'Error',_0x65f6('0x1dc')+_0x3f664e));}if(_0x155854<=0x0||isNaN(_0x155854)){return _0x1b564f(msgResponse('[abandonmentRate]',_0x65f6('0x46'),'Ts\x20=\x20'+_0x155854));}if(_0x453dae<=0x0||isNaN(_0x453dae)){return _0x1b564f(msgResponse(_0x65f6('0x1d8'),_0x65f6('0x46'),'p\x20=\x20'+_0x453dae));}if(_0x5f2970<=0x0||isNaN(_0x5f2970)){return _0x1b564f(msgResponse(_0x65f6('0x1d8'),_0x65f6('0x46'),_0x65f6('0x1dd')+_0x5f2970));}if(_0x3d7634<=0x0||isNaN(_0x3d7634)){return _0x1b564f(msgResponse('[abandonmentRate]','Error',_0x65f6('0x1de')+_0x3d7634));}_0x319ab1=_0x319ab1||0x0;var _0xac05cf=0x1/_0x155854;var _0x5e1c0c=0x0;var _0x3c4457=0x0;var _0x38a701=0x0;var _0x29b4b5=0x0;for(var _0x342763=0x0;_0x38a701<_0x3d7634;_0x342763+=0x1){_0x3c4457=_0x342763/_0x5f2970;_0x5e1c0c=(_0x453dae*_0x3c4457+_0x319ab1)/_0xac05cf;_0x38a701=erlangb(_0x5e1c0c,_0x3f664e);_0x29b4b5=_0x5e1c0c/_0x3f664e*(0x1-erlangb(_0x5e1c0c,_0x3f664e));}return _0x529207({'erlangCalls':_0x342763,'erlangCallToSecond':_0x5f2970/_0x342763,'erlangAbandonmentRate':_0x38a701,'erlangBusyFactor':_0x29b4b5});});};Dialer[_0x65f6('0x1a')][_0x65f6('0x1ac')]=function(_0xaa53f5,_0xc82fe,_0x36a604,_0x52fefa,_0x201f4d,_0x33ba55){loggerPredictive[_0x65f6('0x7f')](_0x65f6('0x1df'),'\x20m\x20=\x20',_0xaa53f5,_0x65f6('0x1d9'),_0xc82fe,'\x20Ts\x20=\x20',_0x36a604,_0x65f6('0x1db'),_0x52fefa,'\x20Umin\x20=\x20',_0x201f4d);return new BPromise(function(_0x9c606c,_0x3690f9){if(_0xaa53f5<=0x0||isNaN(_0xaa53f5)){return _0x3690f9(msgResponse(_0x65f6('0x1d8'),_0x65f6('0x46'),_0x65f6('0x1dc')+_0xaa53f5));}if(_0x36a604<=0x0||isNaN(_0x36a604)){return _0x3690f9(msgResponse(_0x65f6('0x1d8'),'Error',_0x65f6('0x1e0')+_0x36a604));}if(_0x52fefa<=0x0||isNaN(_0x52fefa)){return _0x3690f9(msgResponse(_0x65f6('0x1d8'),_0x65f6('0x46'),'p\x20=\x20'+_0x52fefa));}if(_0xc82fe<=0x0||isNaN(_0xc82fe)){return _0x3690f9(msgResponse('[abandonmentRate]',_0x65f6('0x46'),_0x65f6('0x1dd')+_0xc82fe));}if(_0x201f4d<=0x0||isNaN(_0x201f4d)){return _0x3690f9(msgResponse(_0x65f6('0x1d8'),_0x65f6('0x46'),'Amax\x20=\x20'+_0x201f4d));}_0x33ba55=_0x33ba55||0x0;var _0x4dc4cd=0x1/_0x36a604;var _0x4ad1e1=0x0;var _0x44180c=0x0;var _0x3cb6a2=0x0;var _0x19632c=0x0;for(var _0x4cd16c=0x0;_0x19632c<_0x201f4d;_0x4cd16c+=0x1){_0x44180c=_0x4cd16c/_0xc82fe;_0x4ad1e1=(_0x52fefa*_0x44180c+_0x33ba55)/_0x4dc4cd;_0x3cb6a2=erlangb(_0x4ad1e1,_0xaa53f5);_0x19632c=_0x4ad1e1/_0xaa53f5*(0x1-erlangb(_0x4ad1e1,_0xaa53f5));}return _0x9c606c({'erlangCalls':_0x4cd16c,'erlangCallToSecond':_0xc82fe/_0x4cd16c,'erlangAbandonmentRate':_0x3cb6a2,'erlangBusyFactor':_0x19632c});});};module[_0x65f6('0x1e1')]=Dialer;
\ No newline at end of file
+var _0xea28=['No\x20such\x20channel','updateOriginated','queue','[Dialer][checkChannel]','countReScheduled','resolve','then','catch','[countReScheduled]\x20','checkIsBlackList','[checkIsBlackList]\x20','checkIsBlackListIvr','[checkIsBlackListIvr]\x20','averageHandleTime','avgHandleTime','[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','emptyContact','notFound','saveInDb','ContactId','ListId','CampaignId','[emptyContact][createHistory]','isSuccess','Success','isTrunkReachable','SIP/%s','reachable','unmonitored','uniqueid','amdstatus','xcally-motion-dialer','dialAMDActive','value','outboundAnswerCallsDay','outboundAnswerAgiCallsDay','membername','AMD','[syncHangupInAMD]','MACHINE','statedesc','amd','[syncMachine][createHistory]','[syncMachine]','HANGUP','HangupInAMD','Machine','[syncMachineIvr][createHistory]','[syncMachineIvr]','ivrAnswerCallsDay','[syncHangupIvr]','dialQueueProject','AnswerAGI','AGI','[syncHangupIvr][createHistory]','outboundUnknownCallsDay','cause-txt','Unknow','reason','agiafterat','dialQueueProject2','dialAgiAfterHangupAgent','YYYY-MM-DD\x20HH:mm:ss','[syncAgentComplete][createHistory]','[syncAgentComplete]','queueCallerAbandonCreateState','[syncQueueCallerAbandon]\x20[Drop]','droptime','responsetime','Drop','dropreason','predictiveIntervalDroppedCallsCallersExit','CALLEREXIT','syncNewExten','actionid','locked','paused','stateinterface','rrmemory','queueBooked','push','[booked][unlockQueueStatus]','pick','queueStatusComplete','run','idHopper','VoiceQueueId','_rr','length','unlockRR','Agent:\x20','contactAgent-idHopper:\x20','[Catch][Preview][syncQueueStatusComplete]','[booked][unlock]','[unlock][syncQueueStatusComplete]','[booked][unlock2]','[booked][unlock3]','syncCampaigns','checkIsTrunkReachable','TRUNK_IS_NOT_REACHABLE','\x20trunk\x20is\x20not\x20reachable','ifTime','Failure','timezones','TIMEZONE_UNKNOW','\x20Timezone\x20unknow\x20','isArray','interval','content','indexOf','true','command','iftime\x20%s,%s','all','some','GLOBAL_INTERVAL_IS_OVERTIME','INTERVAL_IS_OVERTIME','[ifTime][promiseAll]','Global:\x20','\x20Interval\x20is\x20overtime:\x20','Timezone:\x20','checkDialMethod','progressive','power','handlePower','dialPowerLevel','Queue','launchHandleIvr','checkIfTime','dialGlobalInterval','dialTimezone','[syncQueueSummary]','pow','random','match','actionOriginate','object','originate','voiceQueue\x20is\x20undefine','Contact','phone','getCaller','\x22agi://%s/square,%s\x22','NONE','dialQueueOptions','dialQueueTimeout','XMD-AMDINITIALSILENCE','dialAMDInitialSilence','XMD-AMDGREETING','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','XMD-AMDMINWORDLENGTH','dialAMDMinWordLength','XMD-AMDMAXIMUMNUMBEROFWORDS','dialAMDMaximumNumberOfWords','XMD-AMDSILENCETHRESHOLD','dialAMDSilenceThreshold','XMD-AMDMAXIMUMWORDLENGTH','dialAMDMaximumWordLength','XMD-VOICEQUEUEID','XMD-CAMPAIGNID','tags','createdAt','updatedAt','%s%s','XMD-','toUpper','dialRandomLastDigitCallerIdNumber','dialOriginateCallerIdNumber','TrunkBackup','XMD-ORIGINATECALLERIDNAME','originatecalleridnum','SIP/%s/%s%s','trim','dialCutDigit','substring','from-sip','dialOriginateTimeout','[originateError]:\x20%s','OriginateError','starttime','[originate][error]','Error','originate\x20action\x20Error','response','checkRetriveMax','countbusyretry','countnoanswerretry','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','minutes','dialBusyMaxRetry','add','[rescheduleContact]\x20[Busy]','countcongestionretry','dialCongestionMaxRetry','dialCongestionRetryFrequency','[rescheduleContact]\x20[Congestion]','[callProgressDetecting]','entity\x20is\x20undefine','NoSuchNumber','dialGlobalMaxRetry','stateGlobal','createStateFinal','reason\x200\x20no\x20such\x20number....','NoAnswer','countglobal','reason\x203\x20ringing\x20no\x20answer','Busy','[syncAgentComplete][createHistory][5]','reason\x205\x20busy','[syncAgentComplete][createHistory][8]','reason\x208\x20congestion','Global','[moveContactManagedDialer][0]','contact\x20not\x20moved','dialPredictiveOptimizationPercentage','erlangCalls','erlangAbandonmentRate','predictiveIntervalMultiplicativeFactor','[startMethodPredictive][StartProgressive][First]','[startMethodPredictive][StartProgressive]','check\x20predictive\x20is\x20not\x20undefine','check\x20handlePredictive\x20is\x20not\x20undefine','dialPredictiveInterval','[startMethodPredictive][StartProgressive][Loop]','dialPredictiveOptimization','dropRate','[stopMethodPredictive][ReStartProgressive][ExceededDropDay]','Dropped\x20calls\x20day','[stopMethodPredictive][ReStartProgressive][LowerLimitInterval]','Agent\x20free','agent\x20max\x20free\x20','[stopMethodPredictive][ReStartProgressive][ExceededDropInterval]','Max\x20Drop\x20','Drop\x20in\x20this\x20interval','[startMethodPredictive][StartPredictive][First]','getDataPredictive','[averageHandleTime][ErlangB]\x20','[startMethodPredictive][StartPredictive][Repeat]','startMethodPredictive','outboundQueuePauses','abandonmentRate','[CatchErlangB]','busyFactor','[getDataPredictive]','check\x20failure','floor','[startMethodPredictive]','[handlePredictive]','checkContactBlack','UserId','recallme','[booked][checkContactBlack]','queueStatusComplete:\x20','queuestatus','[unlockOriginate][syncQueueStatusComplete]','scheduledat','dialRecallMeTimeout','dialRecallInQueue','[rescheduleContact][dialRecallInQueue]','[Originate][HistoryDialRecallInQueue][historyCatch]','RecallFailedTimeout','[Originate][HistoryRecallClose][historyCatch]','[Originate][HistoryRecallClose]','outboundBlacklistCallsDay','BLACKLIST','Blacklist','[Originate][historyBlacklist]','[Originate][MoveBlacklist]','limitCalls','temp','dialOrderByScheduledAt','[getContactCampaign2][Empty]','RUNNING','ivrTotalCallsDays','loggerHandler','dialLimitQueue','not_inuse','ACTIVE','[actionOriginate]\x20','Contact.phone','[getContactDialer2]','tryOriginatePredictive','[handlePredictive][limitChannel]','[actionOriginatePredictive]\x20','[getContactDialerPredictive]','[abandonmentRate]','\x20m\x20=\x20','\x20interval\x20=\x20','\x20Ts\x20=\x20','\x20p\x20=\x20','\x20Amax\x20=\x20','m\x20=\x20','Ts\x20=\x20','interval\x20=\x20','Amax\x20=\x20','[busyFactor]','\x20Umin\x20=\x20','p\x20=\x20','util','lodash','bluebird','uuid','moment','md5','ioredis','../../../config/environment/','dialer','../../../config/logger','booked','predictive','predictiveCalls','syncQueueSummary','../ami','redis','defaults','localhost','socket.io-emitter','../rpc/cmHopperHistory','../rpc/cmHopperBlack','../rpc/voiceQueueRt','./history','./final','./agentComplete','./queueCallerAbandon','./hangup','XCALLY_IP_AGI','roundrobin','prototype','enqueue','tail','finally','sequence','preview','voiceQueues','campaigns','agents','trunks','maxNumberOriginate','contactsId','uniqueId','optionPredictive','startProgressive','ivrOriginated','queueBookedRR','agentconnect','syncAgentConnect','bind','queuecallerabandon','syncQueueCallerAbandon','originateresponse','syncOriginateResponse','agentcomplete','custom:queuesummary','syncHangup','newexten','varset','syncVarSet','syncQueueStatusComplete','loopCampaigns','loopClearZombieChannels','isUndefined','message','AGENTS_NOT_LOGGED','NOT_ACTIVE','\x20NOT\x20Active','INTERVAL_IS_NULL','name','isEmpty','Interval','Intervals','\x20INTERVAL_IS_NULL','[ifTime][Action]','stringify','milliseconds','diff','emit','type','outbound','strategy','available','loggedIn','pTalking','sumBillable','sumHoldTime','total','unmanaged','abandoned','waiting','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdName','dialPrefix','outboundBusyCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalLowerLimit','predictiveIntervalPauses','predictiveIntervalTotalCalls','Trunk','active','callerid','format','voice:queue:%s','voice_queue:save','ivr','campaign:ivr:%s','info','[checkGetDataPredictive][avgTalktime]','[checkGetDataPredictive][avgHoldtime]','[checkGetDataPredictive][totalCalls]','[ErlangB]','merge','seconds','[freeVariablesPredictive]','startPredictive','handlePredictive','string','\x22%s\x22\x20<%s>','\x22\x22\x20<>','inspect','error','hasOwnProperty','originated','[decremetOriginate]\x20object\x20originated\x20is\x20negative','[decremetOriginate]\x20is\x20null\x20or\x20undefined','contactsRescheduled','RESCHEDULED_CONTACTS','[getContactDialer2][ReScheduled]','contacts','[getContactDialer2][Empty]','sendMessageOneNotActive','talking','[syncQueueSummary]\x20Campaign\x20Queue:\x20','[syncQueueSummary]\x20Campaign\x20Ivr:\x20','is\x20not\x20active','IS_DISACTIVED','is\x20disactive','state','endtime','clearZombieChannels','[uniqueid]','actions','[actions]','isNil','Action','status','channel'];(function(_0x5bd335,_0x4dfdf3){var _0x2be840=function(_0x484dce){while(--_0x484dce){_0x5bd335['push'](_0x5bd335['shift']());}};_0x2be840(++_0x4dfdf3);}(_0xea28,0x13a));var _0x8ea2=function(_0x5513b1,_0xc33619){_0x5513b1=_0x5513b1-0x0;var _0x55d50b=_0xea28[_0x5513b1];return _0x55d50b;};'use strict';var util=require(_0x8ea2('0x0'));var _=require(_0x8ea2('0x1'));var BPromise=require(_0x8ea2('0x2'));var uuid=require(_0x8ea2('0x3'));var moment=require(_0x8ea2('0x4'));var rr=require('rr');var md5=require(_0x8ea2('0x5'));var Redis=require(_0x8ea2('0x6'));var config=require(_0x8ea2('0x7'));var logger=require('../../../config/logger')(_0x8ea2('0x8'));var loggerBooked=require(_0x8ea2('0x9'))(_0x8ea2('0xa'));var loggerPredictive=require('../../../config/logger')(_0x8ea2('0xb'));var loggerPredictiveCalls=require(_0x8ea2('0x9'))(_0x8ea2('0xc'));var loggerSyncQueueSummary=require(_0x8ea2('0x9'))(_0x8ea2('0xd'));var ami=require(_0x8ea2('0xe'));config[_0x8ea2('0xf')]=_[_0x8ea2('0x10')](config[_0x8ea2('0xf')],{'host':_0x8ea2('0x11'),'port':0x18eb});var io=require(_0x8ea2('0x12'))(new Redis(config[_0x8ea2('0xf')]));var cmHopper=require('../rpc/cmHopper');var cmHopperFinal=require('../rpc/cmHopperFinal');var cmHopperHistory=require(_0x8ea2('0x13'));var cmHopperBlack=require(_0x8ea2('0x14'));var voiceQueueRt=require(_0x8ea2('0x15'));var Action=require('./action');var History=require(_0x8ea2('0x16'));var Final=require(_0x8ea2('0x17'));var AgentComplete=require(_0x8ea2('0x18'));var QueueCallerAbandon=require(_0x8ea2('0x19'));var Hangup=require(_0x8ea2('0x1a'));var ipAgi=process['env'][_0x8ea2('0x1b')]||'127.0.0.1';var strategy={'rrmemory':'rrmemory','roundrobin':_0x8ea2('0x1c')};var Sequence=function(){};Sequence[_0x8ea2('0x1d')][_0x8ea2('0x1e')]=function(_0x78669a){this[_0x8ea2('0x1f')]=this[_0x8ea2('0x1f')]?this[_0x8ea2('0x1f')][_0x8ea2('0x20')](_0x78669a):_0x78669a();};function Dialer(_0x474873,_0x396aab){this[_0x8ea2('0x21')]=new Sequence();this[_0x8ea2('0x22')]=_0x396aab;this[_0x8ea2('0x23')]=_0x474873[_0x8ea2('0x23')];this[_0x8ea2('0x24')]=_0x474873[_0x8ea2('0x24')];this[_0x8ea2('0x25')]=_0x474873[_0x8ea2('0x25')];this[_0x8ea2('0x26')]=_0x474873[_0x8ea2('0x26')];this[_0x8ea2('0x27')]=config[_0x8ea2('0x27')]||0x2;this['channels']={};this['actions']={};this[_0x8ea2('0x28')]={};this[_0x8ea2('0x29')]={};this[_0x8ea2('0x2a')]={};this['startPredictive']={};this[_0x8ea2('0x2b')]={};this[_0x8ea2('0x2c')]={};this['queueBooked']={};this[_0x8ea2('0x2d')]={};ami['on'](_0x8ea2('0x2e'),this[_0x8ea2('0x2f')][_0x8ea2('0x30')](this));ami['on'](_0x8ea2('0x31'),this[_0x8ea2('0x32')][_0x8ea2('0x30')](this));ami['on'](_0x8ea2('0x33'),this[_0x8ea2('0x34')]['bind'](this));ami['on'](_0x8ea2('0x35'),this['syncAgentComplete'][_0x8ea2('0x30')](this));ami['on'](_0x8ea2('0x36'),this[_0x8ea2('0xd')]['bind'](this));ami['on']('hangup',this[_0x8ea2('0x37')]['bind'](this));ami['on'](_0x8ea2('0x38'),this['syncNewExten'][_0x8ea2('0x30')](this));ami['on'](_0x8ea2('0x39'),this[_0x8ea2('0x3a')][_0x8ea2('0x30')](this));ami['on']('queuemember',this['syncQueueMember'][_0x8ea2('0x30')](this));ami['on']('queuestatuscomplete',this[_0x8ea2('0x3b')][_0x8ea2('0x30')](this));this[_0x8ea2('0x3c')]();this[_0x8ea2('0x3d')]();}function isNotNull(_0x307c74){return _0x307c74!==null&&!_[_0x8ea2('0x3e')](_0x307c74);}function checkIsLoggedIn(_0x32e225,_0x316707){return function(){if(_0x316707<=0x0){_0x32e225[_0x8ea2('0x3f')]=_0x8ea2('0x40');throw _0x32e225['name']+'\x20AGENTS\x20NOT\x20LOGGED';}};}function isActive(_0x3ed03e){return _0x3ed03e;}function checkIsActive(_0x188553,_0x53d71c){return function(){if(!isActive(_0x53d71c)){_0x188553['message']=_0x8ea2('0x41');throw _0x188553['name']+_0x8ea2('0x42');}};}function checkInterval(_0x1b9471){return function(){if(!isNotNull(_0x1b9471['Interval'])){_0x1b9471[_0x8ea2('0x3f')]=_0x8ea2('0x43');throw _0x1b9471[_0x8ea2('0x44')]+'\x20INTERVAL_IS_NULL';}if(!isNotNull(_0x1b9471['Interval']['Intervals'])){_0x1b9471[_0x8ea2('0x3f')]=_0x8ea2('0x43');throw _0x1b9471[_0x8ea2('0x44')]+'\x20INTERVAL_IS_NULL';}if(!isNotNull(_[_0x8ea2('0x45')](_0x1b9471[_0x8ea2('0x46')][_0x8ea2('0x47')]))){_0x1b9471[_0x8ea2('0x3f')]=_0x8ea2('0x43');throw _0x1b9471[_0x8ea2('0x44')]+_0x8ea2('0x48');}};}function msgResponse(_0x1fc76a,_0x5e9b1f,_0x955ef3){return{'action':_0x1fc76a,'response':_0x5e9b1f,'message':_0x955ef3};}function myreject(_0x29e3f5){return function(_0x28798c){return _0x29e3f5(msgResponse(_0x8ea2('0x49'),'Error',JSON[_0x8ea2('0x4a')](_0x28798c)));};}function getSeconds(_0x5355aa,_0x1e03f2){var _0x103d5a=moment(_0x5355aa)[_0x8ea2('0x4b')](0x0);var _0x1496ae=moment(_0x1e03f2)['milliseconds'](0x0);return _0x103d5a[_0x8ea2('0x4c')](_0x1496ae,'seconds');}function emit(_0x5adb84,_0x35f21b,_0x5f23a3){io['to'](_0x5adb84)[_0x8ea2('0x4d')](_0x35f21b,_0x5f23a3);}function emitVoiceQueueSummary(_0x2f0779){if(_0x2f0779[_0x8ea2('0x4e')]===_0x8ea2('0x4f')){var _0x134584={'id':_0x2f0779['id'],'name':_0x2f0779['name'],'strategy':_0x2f0779[_0x8ea2('0x50')],'answered':_0x2f0779['answered'],'available':_0x2f0779[_0x8ea2('0x51')],'loggedIn':_0x2f0779[_0x8ea2('0x52')],'pTalking':_0x2f0779[_0x8ea2('0x53')],'sumBillable':_0x2f0779[_0x8ea2('0x54')],'sumDuration':_0x2f0779['sumDuration'],'sumHoldTime':_0x2f0779[_0x8ea2('0x55')]||0x0,'talking':_0x2f0779['talking'],'total':_0x2f0779[_0x8ea2('0x56')],'type':_0x2f0779['type'],'unmanaged':_0x2f0779[_0x8ea2('0x57')],'abandoned':_0x2f0779[_0x8ea2('0x58')],'waiting':_0x2f0779[_0x8ea2('0x59')],'loggedInDb':_0x2f0779[_0x8ea2('0x5a')],'dialActive':_0x2f0779[_0x8ea2('0x5b')],'dialMethod':_0x2f0779[_0x8ea2('0x5c')],'dialOriginateCallerIdName':_0x2f0779[_0x8ea2('0x5d')],'dialOriginateCallerIdNumber':_0x2f0779['dialOriginateCallerIdNumber'],'dialOriginateTimeout':_0x2f0779['dialOriginateTimeout'],'dialPrefix':_0x2f0779[_0x8ea2('0x5e')],'outboundAnswerAgiCallsDay':_0x2f0779['outboundAnswerAgiCallsDay'],'outboundAnswerCallsDay':_0x2f0779['outboundAnswerCallsDay'],'outboundBlacklistCallsDay':_0x2f0779['outboundBlacklistCallsDay'],'outboundBusyCallsDay':_0x2f0779[_0x8ea2('0x5f')],'outboundCongestionCallsDay':_0x2f0779['outboundCongestionCallsDay'],'outboundDropCallsDayACS':_0x2f0779[_0x8ea2('0x60')],'outboundDropCallsDayCallersExit':_0x2f0779[_0x8ea2('0x61')],'outboundDropCallsDayTimeout':_0x2f0779[_0x8ea2('0x62')],'outboundNoAnswerCallsDay':_0x2f0779[_0x8ea2('0x63')],'outboundNoSuchCallsDay':_0x2f0779[_0x8ea2('0x64')],'outboundOriginateFailureCallsDay':_0x2f0779[_0x8ea2('0x65')],'outboundReCallsDay':_0x2f0779[_0x8ea2('0x66')],'outboundRejectCallsDay':_0x2f0779[_0x8ea2('0x67')],'outboundUnknownCallsDay':_0x2f0779['outboundUnknownCallsDay'],'predictiveIntervalAnsweredCalls':_0x2f0779[_0x8ea2('0x68')],'predictiveIntervalAvgHoldtime':_0x2f0779[_0x8ea2('0x69')],'predictiveIntervalAvgTalktime':_0x2f0779[_0x8ea2('0x6a')],'predictiveIntervalDroppedCallsCallersExit':_0x2f0779['predictiveIntervalDroppedCallsCallersExit'],'predictiveIntervalDroppedCallsTimeout':_0x2f0779[_0x8ea2('0x6b')],'predictiveIntervalErlangCalls':_0x2f0779[_0x8ea2('0x6c')],'predictiveIntervalErlangCallsDroppedCalls':_0x2f0779[_0x8ea2('0x6d')],'predictiveIntervalHitRate':_0x2f0779[_0x8ea2('0x6e')],'predictiveIntervalLowerLimit':_0x2f0779[_0x8ea2('0x6f')],'predictiveIntervalMultiplicativeFactor':_0x2f0779['predictiveIntervalMultiplicativeFactor'],'predictiveIntervalPauses':_0x2f0779[_0x8ea2('0x70')],'predictiveIntervalTotalCalls':_0x2f0779[_0x8ea2('0x71')],'message':_0x2f0779[_0x8ea2('0x3f')],'originated':_0x2f0779['originated']};if(_0x2f0779[_0x8ea2('0x72')]){_0x134584[_0x8ea2('0x72')]={'id':_0x2f0779[_0x8ea2('0x72')]['id'],'name':_0x2f0779[_0x8ea2('0x72')][_0x8ea2('0x44')],'active':_0x2f0779[_0x8ea2('0x72')][_0x8ea2('0x73')],'callerid':_0x2f0779[_0x8ea2('0x72')][_0x8ea2('0x74')]};}if(_0x2f0779[_0x8ea2('0x46')]){_0x134584[_0x8ea2('0x46')]={'id':_0x2f0779[_0x8ea2('0x46')]['id'],'name':_0x2f0779[_0x8ea2('0x46')][_0x8ea2('0x44')]};}var _0x5c1212=md5(JSON[_0x8ea2('0x4a')](_0x134584));if(_0x2f0779[_0x8ea2('0x5')]!==_0x5c1212){_0x2f0779[_0x8ea2('0x5')]=_0x5c1212;emit(util[_0x8ea2('0x75')](_0x8ea2('0x76'),_0x134584[_0x8ea2('0x44')]),_0x8ea2('0x77'),_0x134584);}}}function emitCampaignSummary(_0x215fa5){if(_0x215fa5['type']===_0x8ea2('0x78')){emit(util[_0x8ea2('0x75')](_0x8ea2('0x79'),_0x215fa5['name']),'campaign:save',_0x215fa5);}}function checkGetDataPredictive(_0x7cd361){if(isNotNull(_0x7cd361)){if(!_[_0x8ea2('0x45')](_0x7cd361)){if(_0x7cd361[_0x8ea2('0x71')]>0x0){if(!_['isUndefined'](_0x7cd361[_0x8ea2('0x6a')])&&_0x7cd361[_0x8ea2('0x6a')]>0x0){return!![];}else{loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x7b'),JSON[_0x8ea2('0x4a')](_0x7cd361));}if(!_['isUndefined'](_0x7cd361['predictiveIntervalAvgHoldtime'])&&_0x7cd361[_0x8ea2('0x69')]>0x0){return!![];}else{loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x7c'),JSON['stringify'](_0x7cd361));}}else{loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x7d'),JSON[_0x8ea2('0x4a')](_0x7cd361));}}else{loggerPredictive['info']('[checkGetDataPredictive][objIsEmpty]',JSON['stringify'](_0x7cd361));}}else{loggerPredictive['info']('[checkGetDataPredictive][obj]',JSON[_0x8ea2('0x4a')](_0x7cd361));}return![];}function mergeDataErlangB(_0x3020ad){return function(_0x5f56f8){loggerPredictive['info'](_0x8ea2('0x7e'),JSON[_0x8ea2('0x4a')](_0x5f56f8));_[_0x8ea2('0x7f')](_0x3020ad,_0x5f56f8);};}function getDiff(_0x5eea45){var _0x1caa2e=moment()[_0x8ea2('0x4b')](0x0);var _0x59e3df=moment(_0x5eea45)[_0x8ea2('0x4b')](0x0);return _0x1caa2e[_0x8ea2('0x4c')](_0x59e3df,_0x8ea2('0x80'));}function ifInterval(_0xee93b1,_0x4728b4){if(_['isUndefined'](_0x4728b4)){return![];}if(getDiff(_0x4728b4)<_0xee93b1*0x3c){return!![];}else{return![];}}function freeVariablesPredictive(_0x4a8326){if(isNotNull(_0x4a8326)){if(!_['isUndefined'](_0x4a8326[_0x8ea2('0x2b')])){_0x4a8326[_0x8ea2('0x2b')]=undefined;loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x81'),_0x8ea2('0x2b'),_0x4a8326[_0x8ea2('0x44')]);}if(!_[_0x8ea2('0x3e')](_0x4a8326['startPredictive'])){_0x4a8326['startPredictive']=undefined;loggerPredictive['info'](_0x8ea2('0x81'),_0x8ea2('0x82'),_0x4a8326[_0x8ea2('0x44')]);}if(!_[_0x8ea2('0x3e')](_0x4a8326['handlePredictive'])){clearInterval(_0x4a8326[_0x8ea2('0x83')]);_0x4a8326[_0x8ea2('0x83')]=undefined;loggerPredictive['info'](_0x8ea2('0x81'),_0x8ea2('0x83'),_0x4a8326[_0x8ea2('0x44')]);}}}function erlangb(_0xf78d1d,_0x3de1a2){if(_0x3de1a2===0x0){return 0x0;}var _0x48c1de=0x1;for(var _0x479c05=0x1;_0x479c05<=_0x3de1a2;_0x479c05+=0x1){_0x48c1de=0x1+_0x48c1de*_0x479c05/_0xf78d1d;}return 0x1/_0x48c1de;}function isVoiceQueueOutbound(_0x4e87fe){return _0x4e87fe===_0x8ea2('0x4f');}function isNotPreview(_0x1e2066){return _0x1e2066!==_0x8ea2('0x22');}function isCampaignIvr(_0x2d8221){return _0x2d8221===_0x8ea2('0x78');}function getCallerId(_0x491d3d,_0x461d32,_0x3b3eab){if(!_[_0x8ea2('0x3e')](_0x3b3eab)&&_0x8ea2('0x84')===typeof _0x3b3eab&&!_['isEmpty'](_0x3b3eab)){if(!_[_0x8ea2('0x3e')](_0x461d32)&&'string'===typeof _0x461d32&&!_[_0x8ea2('0x45')](_0x461d32)){return util['format'](_0x8ea2('0x85'),_0x461d32,_0x3b3eab);}return util[_0x8ea2('0x75')]('\x22%s\x22\x20<%s>',_0x3b3eab,_0x3b3eab);}if(!_['isUndefined'](_0x491d3d)&&_0x8ea2('0x84')===typeof _0x491d3d&&!_['isEmpty'](_0x491d3d)){return _0x491d3d;}return _0x8ea2('0x86');}function loggerCatchQueueSummary(_0x31a56f,_0x1c5489){return function(_0x23185e){freeVariablesPredictive(_0x1c5489);emitVoiceQueueSummary(_0x1c5489);emitCampaignSummary(_0x1c5489);loggerSyncQueueSummary['error'](_0x31a56f,util[_0x8ea2('0x87')](_0x23185e,{'showHidden':![],'depth':null}));};}function loggerCatchPredictive(_0x2eae97,_0x39776d){return function(_0x3f5ee6){loggerPredictive[_0x8ea2('0x88')](_0x2eae97,JSON[_0x8ea2('0x4a')](_0x3f5ee6));freeVariablesPredictive(_0x39776d);};}function loggerCatch(_0x30a4a5){return function(_0x3a78c9){logger[_0x8ea2('0x88')](_0x30a4a5,util[_0x8ea2('0x87')](_0x3a78c9,{'showHidden':![],'depth':null}));};}function checkContactEmpty(_0x44a198){return _0x44a198&&!_[_0x8ea2('0x3e')](_0x44a198)&&_0x44a198['length']>0x0;}function decremetOriginate(_0x23fce4){if(!_[_0x8ea2('0x3e')](_0x23fce4)&&_0x23fce4!==null){if(_0x23fce4[_0x8ea2('0x89')](_0x8ea2('0x8a'))){if(_0x23fce4[_0x8ea2('0x8a')]>0x0){_0x23fce4[_0x8ea2('0x8a')]-=0x1;}else{logger[_0x8ea2('0x88')](_0x8ea2('0x8b'));}}}else{logger[_0x8ea2('0x88')](_0x8ea2('0x8c'));}}function checkContactLowerLimitOriginate(_0x2500c5,_0x35cfc5,_0x56b905){if(_0x35cfc5>_0x56b905){for(var _0x13ac5f=0x0;_0x13ac5f<_0x35cfc5-_0x56b905;_0x13ac5f+=0x1){decremetOriginate(_0x2500c5);}}}function loggerGetContactDialer(_0x383027,_0xb55bc6,_0x396f5b){return function(_0x1cb87d){checkContactLowerLimitOriginate(_0xb55bc6,_0x396f5b,0x0);logger['error'](_0x383027,util['inspect'](_0x1cb87d,{'showHidden':![],'depth':null}));};}function sendMessageReschedule(_0x5d4d9e){return function(_0x17f2f2){if(isNotNull(_0x17f2f2)&&isNotNull(_0x17f2f2[0x0])){if(_0x17f2f2[0x0][_0x8ea2('0x8d')]>0x0){_0x5d4d9e[_0x8ea2('0x3f')]=_0x8ea2('0x8e');logger[_0x8ea2('0x7a')](_0x8ea2('0x8f')+_0x5d4d9e['name'],_0x17f2f2[0x0][_0x8ea2('0x8d')],_0x8ea2('0x90'));}else{_0x5d4d9e['message']='AVAILABLE_CONTACTS_FINISHED';logger[_0x8ea2('0x7a')](_0x8ea2('0x91')+_0x5d4d9e[_0x8ea2('0x44')]);}}};}function notSendMessagesQueue(_0x289e74){if(_0x289e74[_0x8ea2('0x92')]){freeVariablesPredictive(_0x289e74);if(_0x289e74[_0x8ea2('0x8a')]===0x0&&_0x289e74[_0x8ea2('0x93')]===0x0&&_0x289e74['waiting']===0x0&&(_0x289e74[_0x8ea2('0x53')]||0x0)===0x0){_0x289e74[_0x8ea2('0x92')]=![];_0x289e74[_0x8ea2('0x51')]=0x0;_0x289e74[_0x8ea2('0x3f')]='NOT_ACTIVE';loggerSyncQueueSummary[_0x8ea2('0x88')](_0x8ea2('0x94'),_0x289e74[_0x8ea2('0x44')],'is\x20not\x20active');}else{_0x289e74[_0x8ea2('0x3f')]='IS_DISACTIVED';loggerSyncQueueSummary['error'](_0x8ea2('0x94'),_0x289e74[_0x8ea2('0x44')],'is\x20disactive');}emitVoiceQueueSummary(_0x289e74);}}function notSendMessagesCampaign(_0x5a6543){if(_0x5a6543['sendMessageOneNotActive']){if(_0x5a6543[_0x8ea2('0x8a')]===0x0){_0x5a6543['sendMessageOneNotActive']=![];_0x5a6543['message']=_0x8ea2('0x41');loggerSyncQueueSummary[_0x8ea2('0x88')](_0x8ea2('0x95'),_0x5a6543[_0x8ea2('0x44')],_0x8ea2('0x96'));}else{_0x5a6543[_0x8ea2('0x3f')]=_0x8ea2('0x97');loggerSyncQueueSummary[_0x8ea2('0x88')](_0x8ea2('0x95'),_0x5a6543[_0x8ea2('0x44')],_0x8ea2('0x98'));}emitCampaignSummary(_0x5a6543);}}function createObjHistory(_0x15eab7,_0x1961a9,_0xbe3378,_0x5d28ae,_0x8360c8){_0x15eab7[_0x8ea2('0x3f')]=_0xbe3378;var _0x41b3c8=new Action(_0x15eab7,_0x1961a9);var _0x47a6b7=new History(_0x41b3c8);_0x47a6b7[_0x8ea2('0x99')]=_0x5d28ae;_0x47a6b7['statedesc']=_0x8360c8;_0x47a6b7[_0x8ea2('0x9a')]=_0x41b3c8['starttime'];return _0x47a6b7;}Dialer[_0x8ea2('0x1d')]['loopClearZombieChannels']=function(){var _0x321d6f=this;setInterval(function(){_0x321d6f[_0x8ea2('0x9b')](_0x321d6f['uniqueId'],_0x8ea2('0x9c'));_0x321d6f['clearZombieChannels'](_0x321d6f[_0x8ea2('0x9d')],_0x8ea2('0x9e'));},0x32c8);};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x9b')]=function(_0x27ad8d,_0x4fd150){var _0x5c5cda=this;for(var _0x39d0d7 in _0x27ad8d){if(_0x27ad8d['hasOwnProperty'](_0x39d0d7)){this[_0x8ea2('0x21')][_0x8ea2('0x1e')](function(){if(!_[_0x8ea2('0x9f')](_0x27ad8d[_0x39d0d7])){return ami[_0x8ea2('0xa0')]({'action':_0x8ea2('0xa1'),'channel':_0x27ad8d[_0x39d0d7][_0x8ea2('0xa2')]})['catch'](function(_0x4aa32e){if(_0x4aa32e['message']===_0x8ea2('0xa3')){setTimeout(function(){if(_0x27ad8d[_0x39d0d7]&&_0x27ad8d[_0x39d0d7]['type']!==_0x8ea2('0x78')){_0x5c5cda[_0x8ea2('0xa4')](_0x5c5cda[_0x8ea2('0x23')][_0x27ad8d[_0x39d0d7][_0x8ea2('0xa5')]]);logger[_0x8ea2('0x88')](_0x8ea2('0xa6'),_0x4fd150,_0x39d0d7,_0x27ad8d[_0x39d0d7]['queue']);delete _0x27ad8d[_0x39d0d7];}if(_0x27ad8d[_0x39d0d7]&&_0x27ad8d[_0x39d0d7][_0x8ea2('0x4e')]===_0x8ea2('0x78')){_0x5c5cda[_0x8ea2('0xa4')](_0x5c5cda[_0x8ea2('0x24')][_0x27ad8d[_0x39d0d7][_0x8ea2('0xa5')]]);logger['error']('[Dialer][checkChannel][ivr]',_0x4fd150,_0x39d0d7,_0x27ad8d[_0x39d0d7][_0x8ea2('0xa5')]);delete _0x27ad8d[_0x39d0d7];}},0x2328);}});}});}}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xa7')]=function(_0x2d93b5){return BPromise[_0x8ea2('0xa8')]()[_0x8ea2('0xa9')](cmHopper[_0x8ea2('0xa7')](_0x2d93b5))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xab')));};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xac')]=function(_0x1a5462){return BPromise[_0x8ea2('0xa8')]()[_0x8ea2('0xa9')](cmHopperBlack[_0x8ea2('0xac')](_0x1a5462))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xad')));};Dialer['prototype']['checkIsBlackListIvr']=function(_0x222705){return BPromise['resolve']()[_0x8ea2('0xa9')](cmHopperBlack[_0x8ea2('0xae')](_0x222705))['catch'](loggerCatch(_0x8ea2('0xaf')));};Dialer['prototype'][_0x8ea2('0xb0')]=function(_0x1f4eaf){return BPromise['resolve']()[_0x8ea2('0xa9')](cmHopperHistory[_0x8ea2('0xb1')](_0x1f4eaf))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xb2')));};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xb3')]=function(_0x3c3d18){return BPromise[_0x8ea2('0xa8')]()[_0x8ea2('0xa9')](cmHopper[_0x8ea2('0xb3')](_0x3c3d18))['catch'](loggerCatch(_0x8ea2('0xb4')));};Dialer[_0x8ea2('0x1d')]['getContactDialer']=function(_0x319613,_0x5a69e6,_0x4e3a1b,_0x58cd5d){return BPromise[_0x8ea2('0xa8')]()['then'](cmHopper[_0x8ea2('0xb5')](_0x319613,_0x5a69e6,_0x4e3a1b,_0x58cd5d))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xb6')));};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xb7')]=function(_0x4240d5,_0x5bc986,_0x2f4f45){return BPromise['resolve']()[_0x8ea2('0xa9')](cmHopper[_0x8ea2('0xb7')](_0x4240d5,_0x5bc986,_0x2f4f45))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xb6')));};Dialer[_0x8ea2('0x1d')]['getVoiceQueueRtPauses']=function(_0x1d42a1){return BPromise[_0x8ea2('0xa8')]()[_0x8ea2('0xa9')](voiceQueueRt[_0x8ea2('0xb8')](_0x1d42a1))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xb9')));};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xba')]=function(_0x2e3551){return BPromise[_0x8ea2('0xa8')]()[_0x8ea2('0xa9')](cmHopper[_0x8ea2('0xba')](_0x2e3551))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xbb')));};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xbc')]=function(_0x1bc073){return BPromise['resolve']()[_0x8ea2('0xa9')](cmHopperHistory['createHistory'](_0x1bc073))['catch'](loggerCatch(_0x8ea2('0xbd')));};Dialer[_0x8ea2('0x1d')]['updateOriginated']=function(_0x16c52e){if(!_[_0x8ea2('0x3e')](_0x16c52e)&&_0x16c52e!==null){if(_0x16c52e['hasOwnProperty'](_0x8ea2('0x8a'))){if(_0x16c52e[_0x8ea2('0x8a')]>0x0){_0x16c52e['originated']-=0x1;}else{logger[_0x8ea2('0x88')](_0x8ea2('0xbe'));}}}else{logger[_0x8ea2('0x88')](_0x8ea2('0xbf'));}};Dialer[_0x8ea2('0x1d')]['loggerHandler']=function(_0x27b577,_0x8384bb){var _0x46d2a9=this;return function(_0x357df2){_0x46d2a9[_0x8ea2('0xa4')](_0x8384bb);logger[_0x8ea2('0x88')](_0x27b577,util[_0x8ea2('0x87')](_0x357df2,{'showHidden':![],'depth':null}));};};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xc0')]=function(_0x57f89b,_0x4183cb,_0x51276b){var _0x10cd1e={'state':0x19,'statedesc':_0x8ea2('0xc1')};this[_0x8ea2('0xa4')](_0x4183cb);this[_0x8ea2('0xc2')](_[_0x8ea2('0x7f')](_0x10cd1e,_['pick'](_0x51276b,[_0x8ea2('0xc3'),_0x8ea2('0xc4'),'UserId','VoiceQueueId',_0x8ea2('0xc5')])),_0x8ea2('0xc6'),'[emptyContact]');logger['error'](_0x57f89b);};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xc7')]=function(_0x4e2d65){return _0x4e2d65===_0x8ea2('0xc8');};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xc9')]=function(_0x10cf2d){return!_[_0x8ea2('0x3e')](_0x10cf2d)&&_0x10cf2d&&!_['isUndefined'](_0x10cf2d[_0x8ea2('0x44')])&&!_[_0x8ea2('0x3e')](_0x10cf2d[_0x8ea2('0x73')])&&_0x10cf2d[_0x8ea2('0x73')]&&(this[_0x8ea2('0x26')][util['format'](_0x8ea2('0xca'),_0x10cf2d['name'])]['status']===_0x8ea2('0xcb')||this[_0x8ea2('0x26')][util['format'](_0x8ea2('0xca'),_0x10cf2d[_0x8ea2('0x44')])][_0x8ea2('0xa1')]===_0x8ea2('0xcc'));};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xc2')]=function(_0x5dfec3,_0x525151,_0x4c3838){this[_0x8ea2('0xbc')](_0x5dfec3)['catch'](loggerCatch(_0x525151));this[_0x8ea2('0xba')](_0x5dfec3)[_0x8ea2('0xaa')](loggerCatch(_0x4c3838));};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x3a')]=function(_0x470099){var _0x49d292=this[_0x8ea2('0x29')][_0x470099[_0x8ea2('0xcd')]];var _0x13899a;if(!_[_0x8ea2('0x9f')](_0x470099)&&!_['isNil'](_0x470099['variable'])&&!_[_0x8ea2('0x9f')](_0x470099['variable'][_0x8ea2('0xce')])&&_0x470099['exten']===_0x8ea2('0xcf')&&_0x49d292){if(_0x49d292[_0x8ea2('0x4e')]!==_0x8ea2('0x78')&&this[_0x8ea2('0x23')][_0x49d292[_0x8ea2('0xa5')]][_0x8ea2('0xd0')]&&_0x470099[_0x8ea2('0xd1')]==='HANGUP'){delete this[_0x8ea2('0x29')][_0x470099[_0x8ea2('0xcd')]];this[_0x8ea2('0xa4')](this[_0x8ea2('0x23')][_0x49d292[_0x8ea2('0xa5')]]);this[_0x8ea2('0x23')][_0x49d292['queue']][_0x8ea2('0xd2')]+=0x1;this[_0x8ea2('0x23')][_0x49d292[_0x8ea2('0xa5')]][_0x8ea2('0xd3')]+=0x1;_0x13899a=new Hangup(_0x49d292,_0x470099);_0x13899a['state']=0x12;_0x13899a['statedesc']='HangupInAMD';_0x13899a[_0x8ea2('0xd4')]=_0x8ea2('0xd5');this[_0x8ea2('0xc2')](_0x13899a,'[syncHangupInAMD][createHistory]',_0x8ea2('0xd6'));}if(_0x49d292[_0x8ea2('0x4e')]!==_0x8ea2('0x78')&&this['voiceQueues'][_0x49d292[_0x8ea2('0xa5')]][_0x8ea2('0xd0')]&&_0x470099['value']===_0x8ea2('0xd7')){delete this['uniqueId'][_0x470099['uniqueid']];this[_0x8ea2('0xa4')](this[_0x8ea2('0x23')][_0x49d292[_0x8ea2('0xa5')]]);this['voiceQueues'][_0x49d292[_0x8ea2('0xa5')]][_0x8ea2('0xd2')]+=0x1;this[_0x8ea2('0x23')][_0x49d292[_0x8ea2('0xa5')]][_0x8ea2('0xd3')]+=0x1;_0x13899a=new Hangup(_0x49d292,_0x470099);_0x13899a[_0x8ea2('0x99')]=0x13;_0x13899a[_0x8ea2('0xd8')]='Machine';_0x13899a[_0x8ea2('0xd4')]=_0x8ea2('0xd5');_0x13899a[_0x8ea2('0xd9')]=!![];this[_0x8ea2('0xc2')](_0x13899a,_0x8ea2('0xda'),_0x8ea2('0xdb'));}if(_0x49d292[_0x8ea2('0x4e')]==='ivr'&&this[_0x8ea2('0x24')][_0x49d292[_0x8ea2('0xa5')]][_0x8ea2('0xd0')]&&_0x470099[_0x8ea2('0xd1')]===_0x8ea2('0xdc')){delete this['uniqueId'][_0x470099[_0x8ea2('0xcd')]];this[_0x8ea2('0xa4')](this[_0x8ea2('0x24')][_0x49d292[_0x8ea2('0xa5')]]);_0x13899a=new Hangup(_0x49d292,_0x470099);_0x13899a[_0x8ea2('0x99')]=0x12;_0x13899a[_0x8ea2('0xd8')]=_0x8ea2('0xdd');_0x13899a[_0x8ea2('0xd4')]=_0x8ea2('0xd5');this['saveInDb'](_0x13899a,'[syncHangupInAMDIvr][createHistory]','[syncHangupInAMDIvr]');}if(_0x49d292[_0x8ea2('0x4e')]==='ivr'&&this[_0x8ea2('0x24')][_0x49d292[_0x8ea2('0xa5')]][_0x8ea2('0xd0')]&&_0x470099[_0x8ea2('0xd1')]===_0x8ea2('0xd7')){delete this[_0x8ea2('0x29')][_0x470099[_0x8ea2('0xcd')]];this[_0x8ea2('0xa4')](this[_0x8ea2('0x24')][_0x49d292[_0x8ea2('0xa5')]]);_0x13899a=new Hangup(_0x49d292,_0x470099);_0x13899a['state']=0x13;_0x13899a[_0x8ea2('0xd8')]=_0x8ea2('0xde');_0x13899a[_0x8ea2('0xd4')]=_0x8ea2('0xd5');_0x13899a[_0x8ea2('0xd9')]=!![];this[_0x8ea2('0xc2')](_0x13899a,_0x8ea2('0xdf'),_0x8ea2('0xe0'));}}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x37')]=function(_0x1a64d1){var _0x2776e5=this[_0x8ea2('0x29')][_0x1a64d1[_0x8ea2('0xcd')]];var _0x183546=this;var _0x1dd4f2;if(_0x2776e5&&_0x2776e5[_0x8ea2('0x4e')]==='ivr'){delete this['uniqueId'][_0x1a64d1['uniqueid']];this['updateOriginated'](this[_0x8ea2('0x24')][_0x2776e5[_0x8ea2('0xa5')]]);this['campaigns'][_0x2776e5[_0x8ea2('0xa5')]][_0x8ea2('0xe1')]+=0x1;_0x1dd4f2=new Hangup(_0x2776e5,_0x1a64d1);this[_0x8ea2('0xbc')](_0x1dd4f2)[_0x8ea2('0xaa')](loggerCatch('[syncHangupIvr][createHistory]'));this[_0x8ea2('0xba')](_0x1dd4f2)['catch'](loggerCatch(_0x8ea2('0xe2')));}if(_0x2776e5&&_0x2776e5[_0x8ea2('0x4e')]!==_0x8ea2('0x78')&&isNotNull(this[_0x8ea2('0x23')][_0x2776e5[_0x8ea2('0xa5')]][_0x8ea2('0xe3')])){delete this['uniqueId'][_0x1a64d1['uniqueid']];this[_0x8ea2('0xa4')](this[_0x8ea2('0x23')][_0x2776e5['queue']]);this[_0x8ea2('0x23')][_0x2776e5['queue']][_0x8ea2('0xd2')]+=0x1;this[_0x8ea2('0x23')][_0x2776e5[_0x8ea2('0xa5')]][_0x8ea2('0xd3')]+=0x1;_0x1dd4f2=new Hangup(_0x2776e5,_0x1a64d1);_0x1dd4f2[_0x8ea2('0x99')]=0x10;_0x1dd4f2[_0x8ea2('0xd8')]=_0x8ea2('0xe4');_0x1dd4f2['membername']=_0x8ea2('0xe5');this[_0x8ea2('0xbc')](_0x1dd4f2)[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xe6')));this[_0x8ea2('0xba')](_0x1dd4f2)[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xe2')));}if(_0x2776e5&&_0x2776e5[_0x8ea2('0x4e')]!==_0x8ea2('0x78')&&!isNotNull(this['voiceQueues'][_0x2776e5[_0x8ea2('0xa5')]][_0x8ea2('0xe3')])){delete this[_0x8ea2('0x29')][_0x1a64d1['uniqueid']];this[_0x8ea2('0xa4')](this[_0x8ea2('0x23')][_0x2776e5[_0x8ea2('0xa5')]]);this[_0x8ea2('0x23')][_0x2776e5[_0x8ea2('0xa5')]][_0x8ea2('0xe7')]+=0x1;_0x1dd4f2=new Hangup(_0x2776e5,_0x1a64d1);_0x1dd4f2['state']=0xc;_0x1dd4f2['statedesc']=_0x1a64d1[_0x8ea2('0xe8')];_0x1dd4f2[_0x8ea2('0xd4')]=_0x8ea2('0xe9');this[_0x8ea2('0xbc')](_0x1dd4f2)[_0x8ea2('0xaa')](loggerCatch('[syncHangupIvr][createHistory]'));this[_0x8ea2('0xba')](_0x1dd4f2)['catch'](loggerCatch(_0x8ea2('0xe2')));}};Dialer[_0x8ea2('0x1d')]['syncAgentComplete']=function(_0x21ae83){var _0x254b51=this[_0x8ea2('0x29')][_0x21ae83[_0x8ea2('0xcd')]];var _0x28d518=this;if(this[_0x8ea2('0x23')][_0x21ae83[_0x8ea2('0xa5')]]){if(_0x254b51&&_0x254b51[_0x8ea2('0x4e')]!==_0x8ea2('0x78')){delete this[_0x8ea2('0x29')][_0x21ae83['uniqueid']];this[_0x8ea2('0x23')][_0x21ae83[_0x8ea2('0xa5')]][_0x8ea2('0xd2')]+=0x1;var _0x5ba0a2=new AgentComplete(_0x254b51,_0x21ae83);if(_0x21ae83[_0x8ea2('0xea')]==='agent'){_0x5ba0a2[_0x8ea2('0xeb')]=this[_0x8ea2('0x23')][_0x21ae83[_0x8ea2('0xa5')]][_0x8ea2('0xec')]&&this[_0x8ea2('0x23')][_0x21ae83[_0x8ea2('0xa5')]][_0x8ea2('0xed')]?moment()[_0x8ea2('0x75')](_0x8ea2('0xee')):undefined;}this['createHistory'](_0x5ba0a2)[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xef')));this[_0x8ea2('0xba')](_0x5ba0a2)[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xf0')));}}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x2f')]=function(_0x3cc0fe){if(this[_0x8ea2('0x23')][_0x3cc0fe['queue']]){if(this[_0x8ea2('0x29')][_0x3cc0fe[_0x8ea2('0xcd')]]&&this[_0x8ea2('0x29')][_0x3cc0fe[_0x8ea2('0xcd')]][_0x8ea2('0x4e')]!==_0x8ea2('0x78')){this[_0x8ea2('0xa4')](this[_0x8ea2('0x23')][_0x3cc0fe[_0x8ea2('0xa5')]]);this[_0x8ea2('0x29')][_0x3cc0fe[_0x8ea2('0xcd')]]['answertime']=moment()[_0x8ea2('0x75')]('YYYY-MM-DD\x20HH:mm:ss');}}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xf1')]=function(_0x3de1c4){this['createHistory'](_0x3de1c4)[_0x8ea2('0xaa')](loggerCatch('[syncAgentComplete][createHistory]'));this['moveContactManagedDialer'](_0x3de1c4)['catch'](loggerCatch(_0x8ea2('0xf2')));};Dialer['prototype'][_0x8ea2('0x32')]=function(_0x23bed1){var _0x46e467=this[_0x8ea2('0x29')][_0x23bed1[_0x8ea2('0xcd')]];var _0x59590c=this;if(this[_0x8ea2('0x23')][_0x23bed1[_0x8ea2('0xa5')]]){if(_0x46e467&&_0x46e467['type']!=='ivr'){delete this[_0x8ea2('0x29')][_0x23bed1[_0x8ea2('0xcd')]];this[_0x8ea2('0xa4')](this['voiceQueues'][_0x23bed1['queue']]);_0x46e467['droptime']=moment()[_0x8ea2('0x75')]('YYYY-MM-DD\x20HH:mm:ss');var _0x4f6c61=new QueueCallerAbandon(_0x46e467,_0x23bed1);if(getSeconds(_0x46e467[_0x8ea2('0xf3')],_0x46e467[_0x8ea2('0xf4')])>=_0x46e467['dialQueueTimeout']){this['voiceQueues'][_0x23bed1[_0x8ea2('0xa5')]]['predictiveIntervalDroppedCallsTimeout']+=0x1;this['voiceQueues'][_0x23bed1[_0x8ea2('0xa5')]][_0x8ea2('0x62')]+=0x1;this[_0x8ea2('0x23')][_0x23bed1['queue']][_0x8ea2('0x6d')]+=0x1;_0x4f6c61[_0x8ea2('0x99')]=0xa;_0x4f6c61[_0x8ea2('0xd8')]=_0x8ea2('0xf5');_0x4f6c61[_0x8ea2('0xf6')]='TIMEOUT';_0x4f6c61[_0x8ea2('0xeb')]=this['voiceQueues'][_0x23bed1[_0x8ea2('0xa5')]]['dialQueueProject2']?moment()[_0x8ea2('0x75')]('YYYY-MM-DD\x20HH:mm:ss'):undefined;this['queueCallerAbandonCreateState'](_0x4f6c61);}else{this[_0x8ea2('0x23')][_0x23bed1[_0x8ea2('0xa5')]][_0x8ea2('0xf7')]+=0x1;this[_0x8ea2('0x23')][_0x23bed1[_0x8ea2('0xa5')]][_0x8ea2('0x61')]+=0x1;_0x4f6c61[_0x8ea2('0x99')]=0xb;_0x4f6c61[_0x8ea2('0xd8')]='Abandoned';_0x4f6c61[_0x8ea2('0xf6')]=_0x8ea2('0xf8');this[_0x8ea2('0xf1')](_0x4f6c61);}}}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xf9')]=function(_0x4cb596){if(this[_0x8ea2('0x9d')][_0x4cb596['uniqueid']]){this[_0x8ea2('0x9d')][_0x4cb596['uniqueid']][_0x8ea2('0xa2')]=_0x4cb596[_0x8ea2('0xa2')];}if(this[_0x8ea2('0x29')][_0x4cb596[_0x8ea2('0xcd')]]){this['uniqueId'][_0x4cb596['uniqueid']]['channel']=_0x4cb596[_0x8ea2('0xa2')];}};Dialer[_0x8ea2('0x1d')]['syncQueueMember']=function(_0x31b27d){if(strategy[this[_0x8ea2('0x23')][this[_0x8ea2('0x9d')][_0x31b27d[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]][_0x8ea2('0x50')]]===_0x8ea2('0x1c')){if(this[_0x8ea2('0x9d')][_0x31b27d[_0x8ea2('0xfa')]]&&_[_0x8ea2('0x9f')](this[_0x8ea2('0x9d')][_0x31b27d[_0x8ea2('0xfa')]][_0x8ea2('0xfb')])&&_0x31b27d['status']==='1'&&_0x31b27d[_0x8ea2('0xfc')]==='0'){if(this['agents'][_0x31b27d['stateinterface']]){if(!this[_0x8ea2('0x25')][_0x31b27d['stateinterface']][_0x8ea2('0xfb')]){this[_0x8ea2('0x25')][_0x31b27d[_0x8ea2('0xfd')]][_0x8ea2('0xfb')]=!![];this[_0x8ea2('0x9d')][_0x31b27d['actionid']][_0x8ea2('0xfb')]=!![];this[_0x8ea2('0x9d')][_0x31b27d[_0x8ea2('0xfa')]]['stateinterface']=_0x31b27d['stateinterface'];}}}}else if((strategy[this[_0x8ea2('0x23')][this[_0x8ea2('0x9d')][_0x31b27d['actionid']][_0x8ea2('0xa5')]]['strategy']]||_0x8ea2('0xfe'))===_0x8ea2('0xfe')){if(this[_0x8ea2('0x9d')][_0x31b27d[_0x8ea2('0xfa')]]){if(this[_0x8ea2('0x25')][_0x31b27d[_0x8ea2('0xfd')]]){this[_0x8ea2('0x9d')][_0x31b27d[_0x8ea2('0xfa')]][_0x8ea2('0xfd')]=_0x31b27d['stateinterface'];if(_['isNil'](this[_0x8ea2('0xff')][this['actions'][_0x31b27d[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]])){this[_0x8ea2('0xff')][this[_0x8ea2('0x9d')][_0x31b27d['actionid']][_0x8ea2('0xa5')]]=[];}this[_0x8ea2('0xff')][this['actions'][_0x31b27d[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]][_0x8ea2('0x100')](_['merge'](_['pick'](this['actions'][_0x31b27d[_0x8ea2('0xfa')]],['idHopper',_0x8ea2('0xfd')]),{'status':_0x31b27d['status'],'paused':_0x31b27d[_0x8ea2('0xfc')]}));}}}};function unlockQueueStatus(_0x2bd2e6,_0x2ab3d3){setTimeout(function(){if(_[_0x8ea2('0x3e')](_0x2bd2e6['queueStatusComplete'])){loggerBooked[_0x8ea2('0x88')]('[unlockQueueStatus][undefined]',_0x2ab3d3);}_0x2bd2e6['queueStatusComplete']=!![];loggerBooked['info'](_0x8ea2('0x101'),_0x2ab3d3,JSON[_0x8ea2('0x4a')](_[_0x8ea2('0x102')](_0x2bd2e6,['name',_0x8ea2('0x103')])));},0x1f3);}Dialer[_0x8ea2('0x1d')][_0x8ea2('0x3b')]=function(_0x2f56d5){var _0x1101ba=this;var _0x18e3ca=_0x1101ba[_0x8ea2('0x23')][_0x1101ba[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]];if(strategy[this[_0x8ea2('0x23')][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]['strategy']]==='roundrobin'){if(this[_0x8ea2('0x9d')][_0x2f56d5['actionid']]&&this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xfd')]){this['preview'][_0x8ea2('0x104')](this['actions'][_0x2f56d5['actionid']][_0x8ea2('0x105')],this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xfd')])[_0x8ea2('0xaa')](function(_0x38622a){logger[_0x8ea2('0x88')]('[Catch][Preview][syncQueueStatusComplete]',util[_0x8ea2('0x87')](_0x38622a,{'showHidden':![],'depth':null}));})[_0x8ea2('0x20')](function(){_0x1101ba[_0x8ea2('0xa4')](_0x1101ba['voiceQueues'][_0x1101ba[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]);_0x1101ba['agents'][_0x1101ba[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xfd')]]['locked']=![];delete _0x1101ba['actions'][_0x2f56d5[_0x8ea2('0xfa')]];unlockQueueStatus(_0x18e3ca);});}else{this['updateOriginated'](this[_0x8ea2('0x23')][this['actions'][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]);this[_0x8ea2('0xb3')]({'active':![],'ContactId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]]['ContactId'],'ListId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xc4')],'VoiceQueueId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0x106')]||undefined,'CampaignId':this['actions'][_0x2f56d5['actionid']][_0x8ea2('0xc5')]||undefined})[_0x8ea2('0xaa')](loggerCatch('[unlock][syncQueueStatusComplete]'));delete this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]];unlockQueueStatus(_0x18e3ca);}}else if((strategy[this[_0x8ea2('0x23')][this[_0x8ea2('0x9d')][_0x2f56d5['actionid']][_0x8ea2('0xa5')]][_0x8ea2('0x50')]]||'rrmemory')===_0x8ea2('0xfe')){var _0x5213fa;if(this[_0x8ea2('0x9d')][_0x2f56d5['actionid']]&&!_['isEmpty'](this[_0x8ea2('0xff')][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]])){if(this['queueBookedRR'][_0x1101ba[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]){this['queueBookedRR'][_0x1101ba[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]=this[_0x8ea2('0x2d')][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]?this['queueBookedRR'][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]:this[_0x8ea2('0xff')][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]?this[_0x8ea2('0xff')][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]][_0x8ea2('0x107')]||0x0:0x0;}this['queueBooked'][this['actions'][_0x2f56d5[_0x8ea2('0xfa')]]['queue']][_0x8ea2('0x107')]=this[_0x8ea2('0x2d')][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]];for(var _0x515381=0x0;_0x515381<this[_0x8ea2('0xff')][this[_0x8ea2('0x9d')][_0x2f56d5['actionid']][_0x8ea2('0xa5')]][_0x8ea2('0x108')];_0x515381+=0x1){_0x5213fa=rr(this[_0x8ea2('0xff')][this[_0x8ea2('0x9d')][_0x2f56d5['actionid']][_0x8ea2('0xa5')]]);this[_0x8ea2('0x2d')][_0x1101ba[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]]['queue']]=this[_0x8ea2('0xff')][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]]['queue']][_0x8ea2('0x107')];if(_0x5213fa[_0x8ea2('0xa1')]==='1'&&_0x5213fa[_0x8ea2('0xfc')]==='0'){break;}}if(!_['isNil'](_0x5213fa)){this['agents'][_0x5213fa[_0x8ea2('0xfd')]]['unlockRR']=_[_0x8ea2('0x3e')](this[_0x8ea2('0x25')][_0x5213fa[_0x8ea2('0xfd')]][_0x8ea2('0x109')])?!![]:this['agents'][_0x5213fa[_0x8ea2('0xfd')]]['unlockRR'];}loggerBooked['info']('[booked][RR]',_0x2f56d5['actionid'],_0x8ea2('0x10a'),JSON[_0x8ea2('0x4a')](_[_0x8ea2('0x102')](this[_0x8ea2('0x25')][_0x5213fa[_0x8ea2('0xfd')]],['name','unlockRR'])),_0x8ea2('0x10b'),JSON['stringify'](_0x5213fa['idHopper']));if(!_[_0x8ea2('0x9f')](_0x5213fa)&&_0x5213fa[_0x8ea2('0xa1')]==='1'&&_0x5213fa[_0x8ea2('0xfc')]==='0'&&this['agents'][_0x5213fa[_0x8ea2('0xfd')]]['unlockRR']){this[_0x8ea2('0x25')][_0x5213fa[_0x8ea2('0xfd')]]['unlockRR']=![];this[_0x8ea2('0xff')][_0x1101ba[_0x8ea2('0x9d')][_0x2f56d5['actionid']][_0x8ea2('0xa5')]]=[];this[_0x8ea2('0x22')][_0x8ea2('0x104')](_0x5213fa[_0x8ea2('0x105')],_0x5213fa[_0x8ea2('0xfd')])[_0x8ea2('0xaa')](function(_0x412b9e){logger[_0x8ea2('0x88')](_0x8ea2('0x10c'),util['inspect'](_0x412b9e,{'showHidden':![],'depth':null}));})[_0x8ea2('0x20')](function(){_0x1101ba['updateOriginated'](_0x1101ba[_0x8ea2('0x23')][_0x1101ba[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]);setTimeout(function(){_0x1101ba[_0x8ea2('0x25')][_0x5213fa[_0x8ea2('0xfd')]][_0x8ea2('0x109')]=!![];loggerBooked[_0x8ea2('0x7a')]('[booked][RR][finaly]',_0x2f56d5['actionid'],_0x8ea2('0x10a'),JSON[_0x8ea2('0x4a')](_[_0x8ea2('0x102')](_0x1101ba[_0x8ea2('0x25')][_0x5213fa[_0x8ea2('0xfd')]],['name',_0x8ea2('0x109')])),_0x8ea2('0x10b'),JSON['stringify'](_0x5213fa[_0x8ea2('0x105')]));},0xc7);delete _0x1101ba[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]];unlockQueueStatus(_0x18e3ca,_0x2f56d5['actionid']);});}else{loggerBooked['info'](_0x8ea2('0x10d'));this['updateOriginated'](this[_0x8ea2('0x23')][this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xa5')]]);this[_0x8ea2('0xb3')]({'active':![],'ContactId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xc3')],'ListId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xc4')],'VoiceQueueId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0x106')]||undefined,'CampaignId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xc5')]||undefined})[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0x10e')));delete this['actions'][_0x2f56d5['actionid']];unlockQueueStatus(_0x18e3ca);}}else{loggerBooked['info'](_0x8ea2('0x10f'));this[_0x8ea2('0xa4')](this[_0x8ea2('0x23')][this[_0x8ea2('0x9d')][_0x2f56d5['actionid']]['queue']]);this[_0x8ea2('0xb3')]({'active':![],'ContactId':this['actions'][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xc3')],'ListId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xc4')],'VoiceQueueId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]]['VoiceQueueId']||undefined,'CampaignId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xc5')]||undefined})[_0x8ea2('0xaa')](loggerCatch('[unlock2][syncQueueStatusComplete]'));delete this['actions'][_0x2f56d5[_0x8ea2('0xfa')]];unlockQueueStatus(_0x18e3ca);}}else{loggerBooked[_0x8ea2('0x7a')](_0x8ea2('0x110'));this['updateOriginated'](this['voiceQueues'][this[_0x8ea2('0x9d')][_0x2f56d5['actionid']][_0x8ea2('0xa5')]]);this[_0x8ea2('0xb3')]({'active':![],'ContactId':this[_0x8ea2('0x9d')][_0x2f56d5['actionid']][_0x8ea2('0xc3')],'ListId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]][_0x8ea2('0xc4')],'VoiceQueueId':this['actions'][_0x2f56d5['actionid']][_0x8ea2('0x106')]||undefined,'CampaignId':this[_0x8ea2('0x9d')][_0x2f56d5[_0x8ea2('0xfa')]]['CampaignId']||undefined})[_0x8ea2('0xaa')](loggerCatch('[unlock3][syncQueueStatusComplete]'));delete this[_0x8ea2('0x9d')][_0x2f56d5['actionid']];unlockQueueStatus(_0x18e3ca);}};Dialer[_0x8ea2('0x1d')]['loopCampaigns']=function(){var _0x1ea4ff=this;setInterval(function(){_0x1ea4ff[_0x8ea2('0x111')]();},0x3e8);};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x112')]=function(_0x5794ab){var _0xd6254f=this;return function(){if(!_0xd6254f[_0x8ea2('0xc9')](_0x5794ab[_0x8ea2('0x72')])){if(!_0xd6254f[_0x8ea2('0xc9')](_0x5794ab['TrunkBackup'])){_0x5794ab[_0x8ea2('0x3f')]=_0x8ea2('0x113');throw _0x5794ab[_0x8ea2('0x44')]+_0x8ea2('0x114');}}};};Dialer[_0x8ea2('0x1d')]['checkIfTime']=function(_0x3270b5,_0x17746b,_0x306d01,_0x17694e){var _0x5478f4=this;return function(){var _0x33f17c=!![];return _0x5478f4[_0x8ea2('0x115')](_0x3270b5,_0x17746b,_0x306d01,_0x17694e,_0x33f17c);};};Dialer['prototype']['checkIfTimeIntervals']=function(_0x5c5300,_0x4035eb,_0x3eeecc,_0x348ce0){var _0x2a0da0=this;return function(){var _0x3c9013=![];return _0x2a0da0[_0x8ea2('0x115')](_0x5c5300['Intervals'],_0x4035eb,_0x3eeecc,_0x348ce0,_0x3c9013);};};Dialer['prototype'][_0x8ea2('0x115')]=function(_0x20f2ed,_0x3d417e,_0x485936,_0x5dacaf,_0x20513c){var _0x39b4d9=[];return new BPromise(function(_0x572ba7,_0x2dc748){if(!isNotNull(_0x20f2ed)){_0x5dacaf['message']=_0x8ea2('0x43');return _0x2dc748(msgResponse(_0x8ea2('0x115'),_0x8ea2('0x116'),_0x485936+'\x20Intervals\x20is\x20null\x20'));}if(_[_0x8ea2('0x45')](_0x20f2ed)){_0x5dacaf[_0x8ea2('0x3f')]='INTERVAL_IS_EMPTY';return _0x2dc748(msgResponse(_0x8ea2('0x115'),_0x8ea2('0x116'),_0x485936+'\x20Intervals\x20is\x20empty\x20'));}if(_0x3d417e&&_['isUndefined'](config[_0x8ea2('0x117')][_0x3d417e])){_0x5dacaf[_0x8ea2('0x3f')]=_0x8ea2('0x118');return _0x2dc748(msgResponse('ifTime',_0x8ea2('0x116'),_0x485936+_0x8ea2('0x119')+_0x3d417e));}if(_[_0x8ea2('0x11a')](_0x20f2ed)){for(var _0x42b171=0x0;_0x42b171<_0x20f2ed[_0x8ea2('0x108')];_0x42b171+=0x1){_0x39b4d9['push'](ami[_0x8ea2('0xa0')]({'action':'command','command':util[_0x8ea2('0x75')]('iftime\x20%s,%s',_0x20f2ed[_0x42b171][_0x8ea2('0x11b')],!_[_0x8ea2('0x3e')](config[_0x8ea2('0x117')][_0x3d417e])?_0x3d417e:'')})[_0x8ea2('0xa9')](function(_0x53212f){return _0x53212f[_0x8ea2('0x11c')][_0x8ea2('0x11d')](_0x8ea2('0x11e'))>=0x0?!![]:![];})[_0x8ea2('0xaa')](myreject(_0x2dc748)));}}else{_0x39b4d9[_0x8ea2('0x100')](ami[_0x8ea2('0xa0')]({'action':_0x8ea2('0x11f'),'command':util[_0x8ea2('0x75')](_0x8ea2('0x120'),_0x20f2ed,!_[_0x8ea2('0x3e')](config[_0x8ea2('0x117')][_0x3d417e])?_0x3d417e:'')})['then'](function(_0x2ab1da){return _0x2ab1da[_0x8ea2('0x11c')][_0x8ea2('0x11d')]('true')>=0x0?!![]:![];})[_0x8ea2('0xaa')](myreject(_0x2dc748)));}BPromise[_0x8ea2('0x121')](_0x39b4d9)[_0x8ea2('0xa9')](function(_0x14dd7b){var _0x467730=_[_0x8ea2('0x122')](_0x14dd7b);if(_0x467730){return _0x572ba7(_0x467730);}else{_0x5dacaf[_0x8ea2('0x3f')]=_0x20513c?_0x8ea2('0x123'):_0x8ea2('0x124');return _0x2dc748(msgResponse(_0x8ea2('0x125'),'Failure',_0x8ea2('0x126')+_0x20513c+'\x20'+_0x485936+_0x8ea2('0x127')+util[_0x8ea2('0x87')](_0x20f2ed,{'showHidden':![],'depth':null})+_0x8ea2('0x128')+_0x3d417e));}})['catch'](function(_0x3556b9){return _0x2dc748(msgResponse(_0x8ea2('0x115'),_0x8ea2('0x116'),JSON[_0x8ea2('0x4a')](_0x3556b9)));});});};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x129')]=function(_0x109785){var _0x4db2c3=this;return function(){switch(_0x109785[_0x8ea2('0x5c')]){case _0x8ea2('0x12a'):freeVariablesPredictive(_0x109785);_0x4db2c3['handlePower'](_0x109785,0x1);break;case _0x8ea2('0x12b'):freeVariablesPredictive(_0x109785);_0x4db2c3[_0x8ea2('0x12c')](_0x109785,_0x109785[_0x8ea2('0x12d')]);break;case'predictive':_0x4db2c3['predictive'](_0x109785);break;case _0x8ea2('0xa'):freeVariablesPredictive(_0x109785);_0x4db2c3['handlePower'](_0x109785,0x1);break;default:freeVariablesPredictive(_0x109785);logger['error'](_0x8ea2('0x12e'),_0x109785[_0x8ea2('0x44')],'method\x20not\x20recognized');}};};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x12f')]=function(_0x581ebe){var _0x25363b=this;return function(){_0x25363b['handleIvr'](_0x581ebe);};};Dialer[_0x8ea2('0x1d')][_0x8ea2('0xd')]=function(_0x45a633){var _0x276b1f=this;if(isNotPreview(_0x45a633[_0x8ea2('0x5c')])){if(isVoiceQueueOutbound(_0x45a633[_0x8ea2('0x4e')])&&isActive(_0x45a633[_0x8ea2('0x5b')])){_0x45a633[_0x8ea2('0x92')]=!![];BPromise[_0x8ea2('0xa8')]()[_0x8ea2('0xa9')](checkIsLoggedIn(_0x45a633,_0x45a633[_0x8ea2('0x52')]))[_0x8ea2('0xa9')](checkIsActive(_0x45a633,_0x45a633[_0x8ea2('0x5b')]))[_0x8ea2('0xa9')](checkInterval(_0x45a633))[_0x8ea2('0xa9')](_0x276b1f[_0x8ea2('0x112')](_0x45a633))['then'](_0x276b1f[_0x8ea2('0x130')](_0x45a633[_0x8ea2('0x131')],_0x45a633['dialTimezone'],_0x45a633['name'],_0x45a633))[_0x8ea2('0xa9')](_0x276b1f['checkIfTimeIntervals'](_0x45a633['Interval'],_0x45a633[_0x8ea2('0x132')],_0x45a633[_0x8ea2('0x44')],_0x45a633))[_0x8ea2('0xa9')](_0x276b1f['checkDialMethod'](_0x45a633))[_0x8ea2('0xaa')](loggerCatchQueueSummary(_0x8ea2('0x133'),_0x45a633));}else{notSendMessagesQueue(_0x45a633);}}else{freeVariablesPredictive(_0x45a633);}};Dialer[_0x8ea2('0x1d')]['syncCampaigns']=function(){var _0x54aec3=this;var _0x5a4039;for(var _0xa9944b in this['campaigns']){if(this['campaigns'][_0x8ea2('0x89')](_0xa9944b)){_0x5a4039=this[_0x8ea2('0x24')][_0xa9944b];if(isCampaignIvr(_0x5a4039[_0x8ea2('0x4e')])&&isActive(_0x5a4039[_0x8ea2('0x73')])){_0x5a4039[_0x8ea2('0x92')]=!![];BPromise[_0x8ea2('0xa8')]()[_0x8ea2('0xa9')](checkIsActive(_0x5a4039,_0x5a4039[_0x8ea2('0x73')]))[_0x8ea2('0xa9')](checkInterval(_0x5a4039))[_0x8ea2('0xa9')](_0x54aec3[_0x8ea2('0x112')](_0x5a4039))[_0x8ea2('0xa9')](_0x54aec3['checkIfTime'](_0x5a4039['dialGlobalInterval'],_0x5a4039['dialTimezone'],_0x5a4039[_0x8ea2('0x44')],_0x5a4039))[_0x8ea2('0xa9')](_0x54aec3['checkIfTimeIntervals'](_0x5a4039['Interval'],_0x5a4039[_0x8ea2('0x132')],_0x5a4039[_0x8ea2('0x44')],_0x5a4039))[_0x8ea2('0xa9')](_0x54aec3[_0x8ea2('0x12f')](_0x5a4039))[_0x8ea2('0xaa')](loggerCatchQueueSummary('[syncCampaigns]',_0x5a4039));}else{notSendMessagesCampaign(_0x5a4039);}}}};function getCallerIdRandom(_0x294220,_0x5736b9){var _0x3c8cfe,_0x565fd4,_0x3b4ae6;if(_0x5736b9<=0x0){_0x5736b9=0x1;}_0x3c8cfe=new RegExp('\x5cw{0,'+_0x5736b9+'}$');_0x565fd4=Math[_0x8ea2('0x134')](0xa,_0x5736b9-0x1);_0x3b4ae6=Math[_0x8ea2('0x134')](0xa,_0x5736b9)-0x1;return util['format']('%s',_['replace'](_0x294220,_0x3c8cfe,_[_0x8ea2('0x135')](_0x565fd4,_0x3b4ae6)));}function extractCalleridName(_0x431e61){var _0x2b2aa4=_0x431e61[_0x8ea2('0x136')](/"(.*?)"/);return _0x2b2aa4?_0x2b2aa4[0x1]:_0x431e61;}function extractCalleridNumber(_0x1c0f64){var _0x30a29a=_0x1c0f64[_0x8ea2('0x136')](/<(.*?)>/);return _0x30a29a?_0x30a29a[0x1]:_0x1c0f64;}Dialer[_0x8ea2('0x1d')][_0x8ea2('0x137')]=function(_0x4b21a2,_0x13b0e1){var _0x41676d=this;var _0x11ce2d=uuid['v4']();this[_0x8ea2('0x9d')][_0x11ce2d]=new Action(_0x4b21a2,_0x13b0e1,_0x11ce2d);return new BPromise(function(_0x23ee60,_0x484cd7){if(_['isUndefined'](_0x4b21a2)&&_0x8ea2('0x138')!==typeof _0x4b21a2){return _0x484cd7(msgResponse(_0x8ea2('0x139'),_0x8ea2('0x116'),_0x8ea2('0x13a')));}if(_[_0x8ea2('0x3e')](_0x13b0e1[_0x8ea2('0x13b')][_0x8ea2('0x13c')])||_0x13b0e1[_0x8ea2('0x13b')][_0x8ea2('0x13c')]===null){return _0x484cd7(msgResponse('originate',_0x8ea2('0x116'),'contact\x20is\x20undefine'));}var _0x546cb6={'XMD-CALLERID':_0x41676d[_0x8ea2('0x9d')][_0x11ce2d][_0x8ea2('0x13d')](),'XMD-AGI':_0x4b21a2[_0x8ea2('0xe3')]?util[_0x8ea2('0x75')](_0x8ea2('0x13e'),ipAgi,_0x4b21a2[_0x8ea2('0xe3')]):_0x8ea2('0x13f'),'XMD-AGIAFTER':_0x4b21a2[_0x8ea2('0xec')]?util['format'](_0x8ea2('0x13e'),ipAgi,_0x4b21a2[_0x8ea2('0xec')]):_0x8ea2('0x13f'),'XMD-QUEUE':_0x4b21a2[_0x8ea2('0x4e')]===_0x8ea2('0x4f')?util['format']('\x22%s,%s%s,,,%s\x22',_0x4b21a2[_0x8ea2('0x44')],_0x4b21a2[_0x8ea2('0x140')]||'',_0x4b21a2[_0x8ea2('0xed')]?'c':'',_0x4b21a2[_0x8ea2('0x141')]||0x3):_0x8ea2('0x13f'),'XMD-CONTACTID':_0x13b0e1[_0x8ea2('0xc3')],'XMD-CDRTYPE':_0x8ea2('0x8'),'CALLERID(all)':_0x41676d['actions'][_0x11ce2d][_0x8ea2('0x13d')](),'XMD-AMD':_0x4b21a2[_0x8ea2('0xd0')]?'ACTIVE':_0x8ea2('0x13f'),'XMD-DESTINATION':'xcally-motion-dialer'};if(_0x4b21a2[_0x8ea2('0xd0')]){_0x546cb6[_0x8ea2('0x142')]=_0x4b21a2[_0x8ea2('0x143')]||0x9c4;_0x546cb6[_0x8ea2('0x144')]=_0x4b21a2[_0x8ea2('0x145')]||0x5dc;_0x546cb6['XMD-AMDAFTERGREETINGSILENCE']=_0x4b21a2[_0x8ea2('0x146')]||0x320;_0x546cb6['XMD-AMDTOTALANALYSISTIME']=_0x4b21a2[_0x8ea2('0x147')]||0x1388;_0x546cb6[_0x8ea2('0x148')]=_0x4b21a2[_0x8ea2('0x149')]||0x64;_0x546cb6['XMD-AMDBETWEENWORDSSILENCE']=_0x4b21a2['dialAMDBetweenWordsSilence']||0x32;_0x546cb6[_0x8ea2('0x14a')]=_0x4b21a2[_0x8ea2('0x14b')]||0x3;_0x546cb6[_0x8ea2('0x14c')]=_0x4b21a2[_0x8ea2('0x14d')]||0x100;_0x546cb6[_0x8ea2('0x14e')]=_0x4b21a2[_0x8ea2('0x14f')]||0x1388;}if(_0x4b21a2[_0x8ea2('0x4e')]==='outbound'){_0x546cb6[_0x8ea2('0x150')]=_0x13b0e1[_0x8ea2('0x106')];}else{_0x546cb6[_0x8ea2('0x151')]=_0x13b0e1[_0x8ea2('0xc5')];}for(var _0x813581 in _0x13b0e1[_0x8ea2('0x13b')]){if(_0x13b0e1[_0x8ea2('0x13b')][_0x8ea2('0x89')](_0x813581)){if(isNotNull(_0x13b0e1[_0x8ea2('0x13b')][_0x813581])&&_0x813581!=='id'&&_0x813581!==_0x8ea2('0x152')&&_0x813581!==_0x8ea2('0x153')&&_0x813581!==_0x8ea2('0x154')){_0x546cb6[util[_0x8ea2('0x75')](_0x8ea2('0x155'),_0x8ea2('0x156'),_[_0x8ea2('0x157')](_0x813581))]=_0x13b0e1[_0x8ea2('0x13b')][_0x813581];}}}var _0x4c6ed3=_0x41676d['isTrunkReachable'](_0x4b21a2[_0x8ea2('0x72')])?getCallerId(_0x4b21a2[_0x8ea2('0x72')][_0x8ea2('0x74')],_0x4b21a2[_0x8ea2('0x5d')],_0x4b21a2[_0x8ea2('0x158')]>0x0?getCallerIdRandom(_0x4b21a2[_0x8ea2('0x159')],_0x4b21a2['dialRandomLastDigitCallerIdNumber']):_0x4b21a2[_0x8ea2('0x159')]):getCallerId(_['isNil'](_0x4b21a2[_0x8ea2('0x15a')])?_0x4b21a2[_0x8ea2('0x72')]['callerid']:_0x4b21a2[_0x8ea2('0x15a')][_0x8ea2('0x74')],_0x4b21a2['dialOriginateCallerIdName'],_0x4b21a2[_0x8ea2('0x158')]>0x0?getCallerIdRandom(_0x4b21a2[_0x8ea2('0x159')],_0x4b21a2[_0x8ea2('0x158')]):_0x4b21a2[_0x8ea2('0x159')]);if(_0x4c6ed3){_0x546cb6[_0x8ea2('0x15b')]=_0x41676d['actions'][_0x11ce2d]['originatecalleridname']=extractCalleridName(_0x4c6ed3);_0x546cb6['XMD-ORIGINATECALLERIDNUM']=_0x41676d[_0x8ea2('0x9d')][_0x11ce2d][_0x8ea2('0x15c')]=extractCalleridNumber(_0x4c6ed3);}return ami[_0x8ea2('0xa0')]({'actionid':_0x11ce2d,'action':_0x8ea2('0x139'),'channel':_0x41676d[_0x8ea2('0xc9')](_0x4b21a2[_0x8ea2('0x72')])?util['format'](_0x8ea2('0x15d'),_0x4b21a2[_0x8ea2('0x72')][_0x8ea2('0x44')],isNotNull(_0x4b21a2['dialPrefix'])?_0x4b21a2[_0x8ea2('0x5e')][_0x8ea2('0x15e')]()||'':'',_0x4b21a2[_0x8ea2('0x15f')]>0x0?_0x13b0e1['Contact']['phone']['substring'](_0x4b21a2['dialCutDigit']):_0x13b0e1['Contact'][_0x8ea2('0x13c')]):util[_0x8ea2('0x75')]('SIP/%s/%s%s',_[_0x8ea2('0x9f')](_0x4b21a2['TrunkBackup'])?_0x4b21a2[_0x8ea2('0x72')][_0x8ea2('0x44')]:_0x4b21a2['TrunkBackup'][_0x8ea2('0x44')],isNotNull(_0x4b21a2[_0x8ea2('0x5e')])?_0x4b21a2[_0x8ea2('0x5e')]['trim']()||'':'',_0x4b21a2[_0x8ea2('0x15f')]>0x0?_0x13b0e1[_0x8ea2('0x13b')][_0x8ea2('0x13c')][_0x8ea2('0x160')](_0x4b21a2[_0x8ea2('0x15f')]):_0x13b0e1[_0x8ea2('0x13b')][_0x8ea2('0x13c')]),'callerid':_0x4c6ed3,'Exten':'xcally-motion-dialer','Context':_0x8ea2('0x161'),'Priority':'1','variable':_0x546cb6,'timeout':(_0x4b21a2[_0x8ea2('0x162')]||0x1e)*0x3e8,'async':!![],'channelid':_0x11ce2d})[_0x8ea2('0xa9')](function(_0x506c3f){return _0x23ee60(_0x506c3f);})[_0x8ea2('0xaa')](function(_0xb80be1){_0x4b21a2['outboundOriginateFailureCallsDay']+=0x1;var _0x3c9353=new History(_0x41676d[_0x8ea2('0x9d')][_0x11ce2d]);logger['error'](util[_0x8ea2('0x75')](_0x8ea2('0x163'),JSON['stringify'](_0xb80be1)));_0x3c9353['state']=0xe;_0x3c9353[_0x8ea2('0xd8')]=_0x8ea2('0x164');_0x3c9353[_0x8ea2('0x165')]=moment()[_0x8ea2('0x75')]('YYYY-MM-DD\x20HH:mm:ss');_0x3c9353[_0x8ea2('0x9a')]=_0x3c9353[_0x8ea2('0x165')];_0x41676d[_0x8ea2('0xbc')](_0x3c9353)[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0x166')));_0x41676d[_0x8ea2('0xba')](_0x3c9353)[_0x8ea2('0xaa')](loggerCatch('[originate][error]'))[_0x8ea2('0x20')](function(){delete _0x41676d[_0x8ea2('0x9d')][_0x11ce2d];return _0x484cd7(msgResponse(_0x8ea2('0x139'),_0x8ea2('0x167'),_0x8ea2('0x168')));});});});};Dialer[_0x8ea2('0x1d')]['syncOriginateResponse']=function(_0x4d9cbf){var _0xed298f=this[_0x8ea2('0x9d')][_0x4d9cbf[_0x8ea2('0xfa')]];var _0x4ccee6=this;if(_0xed298f){delete this[_0x8ea2('0x9d')][_0x4d9cbf[_0x8ea2('0xfa')]];_0xed298f['responsetime']=moment()[_0x8ea2('0x75')](_0x8ea2('0xee'));var _0x25604f=_0xed298f[_0x8ea2('0x4e')]==='ivr'?this[_0x8ea2('0x24')][_0xed298f['queue']]:this[_0x8ea2('0x23')][_0xed298f['getQueue']()];if(!this[_0x8ea2('0xc7')](_0x4d9cbf[_0x8ea2('0x169')])){this[_0x8ea2('0xa4')](_0x25604f);return this['callProgressDetecting'](_0xed298f,_0x25604f,_0x4d9cbf)[_0x8ea2('0xa9')](function(_0x71bb70){})['catch'](loggerCatch('[callProgressDetecting]\x20'));}else{this['uniqueId'][_0x4d9cbf[_0x8ea2('0xcd')]]=_0xed298f;}}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x16a')]=function(_0x218268,_0x53fea5,_0xe1518f){var _0x324b1a=new History(_0x53fea5);if(_0x324b1a[_0x8ea2('0x16b')]+_0x324b1a['countcongestionretry']+_0x324b1a['countnoanswerretry']>=_0xe1518f['dialGlobalMaxRetry']-0x1){return!![];}switch(_0x218268){case 0x3:if(_0x324b1a[_0x8ea2('0x16c')]>=_0xe1518f[_0x8ea2('0x16d')]-0x1){return!![];}else{this[_0x8ea2('0xb3')]({'active':![],'countnoanswerretry':_0x324b1a[_0x8ea2('0x16c')]+=0x1,'scheduledat':moment()['add'](_0xe1518f[_0x8ea2('0x16e')],_0x8ea2('0x16f'))[_0x8ea2('0x75')](_0x8ea2('0xee')),'ContactId':_0x324b1a['ContactId'],'ListId':_0x324b1a[_0x8ea2('0xc4')],'VoiceQueueId':_0x324b1a[_0x8ea2('0x106')]||undefined,'CampaignId':_0x324b1a[_0x8ea2('0xc5')]||undefined})['catch'](loggerCatch('[rescheduleContact][NoAnswer]'));}break;case 0x5:if(_0x324b1a[_0x8ea2('0x16b')]>=_0xe1518f[_0x8ea2('0x170')]-0x1){return!![];}else{this[_0x8ea2('0xb3')]({'active':![],'countbusyretry':_0x324b1a[_0x8ea2('0x16b')]+=0x1,'scheduledat':moment()[_0x8ea2('0x171')](_0xe1518f['dialBusyRetryFrequency'],_0x8ea2('0x16f'))['format']('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x324b1a[_0x8ea2('0xc3')],'ListId':_0x324b1a[_0x8ea2('0xc4')],'VoiceQueueId':_0x324b1a[_0x8ea2('0x106')]||undefined,'CampaignId':_0x324b1a['CampaignId']||undefined})['catch'](loggerCatch(_0x8ea2('0x172')));}break;case 0x8:if(_0x324b1a[_0x8ea2('0x173')]>=_0xe1518f[_0x8ea2('0x174')]-0x1){return!![];}else{this[_0x8ea2('0xb3')]({'active':![],'countcongestionretry':_0x324b1a[_0x8ea2('0x173')]+=0x1,'scheduledat':moment()[_0x8ea2('0x171')](_0xe1518f[_0x8ea2('0x175')],_0x8ea2('0x16f'))[_0x8ea2('0x75')]('YYYY-MM-DD\x20HH:mm:ss'),'ContactId':_0x324b1a['ContactId'],'ListId':_0x324b1a[_0x8ea2('0xc4')],'VoiceQueueId':_0x324b1a[_0x8ea2('0x106')]||undefined,'CampaignId':_0x324b1a['CampaignId']||undefined})[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0x176')));}break;default:return!![];}};Dialer[_0x8ea2('0x1d')]['callProgressDetecting']=function(_0x2e03f6,_0x3455bd,_0x272afd){var _0x5719af=this;var _0x403729=new History(_0x2e03f6);return new BPromise(function(_0x383c99,_0x15be32){if(_[_0x8ea2('0x3e')](_0x3455bd)&&_0x8ea2('0x138')!==typeof _0x3455bd){return _0x15be32(msgResponse(_0x8ea2('0x177'),_0x8ea2('0x116'),_0x8ea2('0x178')));}if(_[_0x8ea2('0x3e')](_0x272afd)&&_0x8ea2('0x138')!==typeof _0x272afd){return _0x15be32(msgResponse(_0x8ea2('0x177'),_0x8ea2('0x116'),'evt\x20is\x20undefine'));}switch(_0x272afd[_0x8ea2('0xea')]){case'0':_0x3455bd[_0x8ea2('0x64')]+=0x1;_0x403729[_0x8ea2('0x99')]=0x0;_0x403729[_0x8ea2('0xd8')]=_0x8ea2('0x179');_0x5719af[_0x8ea2('0xbc')](_0x403729)['catch'](loggerCatch('[syncAgentComplete][createHistory][0]'));if(_0x5719af[_0x8ea2('0x16a')](0x0,_0x2e03f6,_0x3455bd)){if(_0x403729[_0x8ea2('0x16b')]+_0x403729[_0x8ea2('0x173')]+_0x403729[_0x8ea2('0x16c')]>=_0x3455bd[_0x8ea2('0x17a')]){_0x5719af[_0x8ea2('0x17b')](_0x403729,_0x383c99,_0x15be32,'reason\x200\x20no\x20such\x20number....');}else{_0x5719af[_0x8ea2('0x17c')](_0x403729,_0x383c99,_0x15be32,_0x8ea2('0x17d'));}}break;case'3':_0x3455bd[_0x8ea2('0x63')]+=0x1;_0x403729['state']=0x3;_0x403729[_0x8ea2('0xd8')]=_0x8ea2('0x17e');_0x403729[_0x8ea2('0x16c')]+=0x1;_0x403729[_0x8ea2('0x17f')]+=0x1;_0x5719af[_0x8ea2('0xbc')](_0x403729)[_0x8ea2('0xaa')](loggerCatch('[syncAgentComplete][createHistory][3]'));if(_0x5719af[_0x8ea2('0x16a')](0x3,_0x2e03f6,_0x3455bd)){if(_0x403729[_0x8ea2('0x16c')]>=_0x3455bd[_0x8ea2('0x16d')]){_0x5719af[_0x8ea2('0x17c')](_0x403729,_0x383c99,_0x15be32,'reason\x203\x20ringing\x20no\x20answer');}else{_0x5719af[_0x8ea2('0x17b')](_0x403729,_0x383c99,_0x15be32,_0x8ea2('0x180'));}}break;case'5':_0x3455bd[_0x8ea2('0x5f')]+=0x1;_0x403729['state']=0x5;_0x403729['statedesc']=_0x8ea2('0x181');_0x403729[_0x8ea2('0x16b')]+=0x1;_0x403729[_0x8ea2('0x17f')]+=0x1;_0x5719af['createHistory'](_0x403729)['catch'](loggerCatch(_0x8ea2('0x182')));if(_0x5719af[_0x8ea2('0x16a')](0x5,_0x2e03f6,_0x3455bd)){if(_0x403729[_0x8ea2('0x16b')]>=_0x3455bd[_0x8ea2('0x170')]){_0x5719af['createStateFinal'](_0x403729,_0x383c99,_0x15be32,'reason\x205\x20busy');}else{_0x5719af[_0x8ea2('0x17b')](_0x403729,_0x383c99,_0x15be32,_0x8ea2('0x183'));}}break;case'8':_0x3455bd['outboundCongestionCallsDay']+=0x1;_0x403729[_0x8ea2('0x99')]=0x8;_0x403729[_0x8ea2('0xd8')]='Congestion';_0x403729['countcongestionretry']+=0x1;_0x403729[_0x8ea2('0x17f')]+=0x1;_0x5719af[_0x8ea2('0xbc')](_0x403729)['catch'](loggerCatch(_0x8ea2('0x184')));if(_0x5719af[_0x8ea2('0x16a')](0x8,_0x2e03f6,_0x3455bd)){if(_0x403729[_0x8ea2('0x173')]>=_0x3455bd[_0x8ea2('0x174')]){_0x5719af[_0x8ea2('0x17c')](_0x403729,_0x383c99,_0x15be32,_0x8ea2('0x185'));}else{_0x5719af[_0x8ea2('0x17b')](_0x403729,_0x383c99,_0x15be32,_0x8ea2('0x185'));}}break;default:_0x3455bd[_0x8ea2('0xe7')]+=0x1;_0x403729[_0x8ea2('0x99')]=0xc;_0x403729[_0x8ea2('0xd8')]=_0x272afd['reason'];_0x5719af['createHistory'](_0x403729)[_0x8ea2('0xaa')](loggerCatch('[syncAgentComplete][createHistory][?]'));if(_0x5719af[_0x8ea2('0x16a')](_0x272afd[_0x8ea2('0xea')],_0x2e03f6,_0x3455bd)){if(_0x403729[_0x8ea2('0x16b')]+_0x403729['countcongestionretry']+_0x403729[_0x8ea2('0x16c')]>=_0x3455bd[_0x8ea2('0x17a')]){_0x5719af[_0x8ea2('0x17b')](_0x403729,_0x383c99,_0x15be32,_0x272afd['reason']);}else{_0x5719af['createStateFinal'](_0x403729,_0x383c99,_0x15be32,_0x272afd['reason']);}}}});};Dialer['prototype'][_0x8ea2('0x17b')]=function(_0x4b11c7,_0x5b10dc,_0x2739b8,_0x13c2a9){var _0x52f752=new Final(_0x4b11c7);_0x52f752[_0x8ea2('0x99')]=0xf;_0x52f752[_0x8ea2('0xd8')]=_0x8ea2('0x186');this[_0x8ea2('0x17c')](_0x52f752,_0x5b10dc,_0x2739b8,_0x13c2a9);};Dialer[_0x8ea2('0x1d')]['createStateFinal']=function(_0x1329c6,_0x4a9450,_0x26cf8a,_0x502d22){this[_0x8ea2('0xba')](_0x1329c6)[_0x8ea2('0xa9')](function(_0x23de8e){return _0x4a9450(msgResponse(_0x8ea2('0x177'),_0x8ea2('0xc8'),_0x502d22));})['catch'](function(_0x1b9e32){return _0x26cf8a(msgResponse(_0x8ea2('0x187'),_0x8ea2('0x116'),_0x8ea2('0x188')));});};Dialer['prototype'][_0x8ea2('0xb')]=function(_0x50518e){var _0x3d2e41=this;var _0x531c86=_0x50518e[_0x8ea2('0x189')]/0x64;var _0x1ecddd=_0x50518e[_0x8ea2('0x62')]/(_0x50518e[_0x8ea2('0x62')]+_0x50518e['outboundAnswerCallsDay']);var _0x2a49ca=_0x50518e['loggedIn']-_0x50518e[_0x8ea2('0x70')]-_0x50518e[_0x8ea2('0x59')]-_0x50518e['originated']-_0x50518e['talking'];var _0x212842=(_0x50518e[_0x8ea2('0x52')]-_0x50518e[_0x8ea2('0x70')])*_0x50518e['predictiveIntervalLowerLimit'];var _0x21605e=Math['floor'](_0x50518e[_0x8ea2('0x18a')]*_0x50518e[_0x8ea2('0x18b')]*_0x50518e[_0x8ea2('0x6e')]*_0x50518e[_0x8ea2('0x18c')]);if(_[_0x8ea2('0x3e')](_0x50518e[_0x8ea2('0x2b')])){loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x18d'));if(!_[_0x8ea2('0x3e')](_0x50518e[_0x8ea2('0x82')])){_0x50518e[_0x8ea2('0x82')]=undefined;loggerPredictive[_0x8ea2('0x88')](_0x8ea2('0x18e'),_0x8ea2('0x18f'));}if(!_[_0x8ea2('0x3e')](_0x50518e['handlePredictive'])){loggerPredictive[_0x8ea2('0x88')]('[startMethodPredictive][StartProgressive]',_0x8ea2('0x190'));clearInterval(_0x50518e[_0x8ea2('0x83')]);_0x50518e['handlePredictive']=undefined;}_0x50518e['startProgressive']=moment()[_0x8ea2('0x75')](_0x8ea2('0xee'));loggerPredictive[_0x8ea2('0x7a')]('[startMethodPredictive][StartProgressive][Date]',_0x50518e[_0x8ea2('0x2b')],_0x50518e[_0x8ea2('0x44')]);this[_0x8ea2('0x12c')](_0x50518e,0x1);}else if(ifInterval(_0x50518e[_0x8ea2('0x191')],_0x50518e[_0x8ea2('0x2b')])){this[_0x8ea2('0x12c')](_0x50518e,0x1);loggerPredictiveCalls[_0x8ea2('0x7a')](_0x8ea2('0x192'),_0x50518e[_0x8ea2('0x2b')],_0x50518e[_0x8ea2('0x44')]);_0x50518e['erlangCalls']=0x0;_0x50518e[_0x8ea2('0x6d')]=0x0;}else if(_0x531c86<_0x1ecddd&&_0x50518e[_0x8ea2('0x193')]===_0x8ea2('0x194')){freeVariablesPredictive(_0x50518e);loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x195'),_0x8ea2('0x196'),_0x1ecddd,'startProgressive',_0x50518e[_0x8ea2('0x44')]);}else if(_0x2a49ca>_0x212842){freeVariablesPredictive(_0x50518e);loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x197'),_0x8ea2('0x198'),_0x2a49ca,_0x8ea2('0x199'),_0x212842);}else if(_0x21605e<_0x50518e[_0x8ea2('0x6d')]&&_0x50518e[_0x8ea2('0x193')]==='dropRate'){freeVariablesPredictive(_0x50518e);loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x19a'),_0x8ea2('0x19b'),_0x21605e,_0x8ea2('0x19c'),_0x50518e[_0x8ea2('0x6d')],'startProgressive',_0x50518e['name']);}else if(!ifInterval(_0x50518e[_0x8ea2('0x191')],_0x50518e['startProgressive'])&&_[_0x8ea2('0x3e')](_0x50518e['startPredictive'])&&!_['isUndefined'](_0x50518e[_0x8ea2('0x2b')])){_0x50518e['startPredictive']=moment()[_0x8ea2('0x75')]('YYYY-MM-DD\x20HH:mm:ss');loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x19d'),_0x50518e[_0x8ea2('0x82')],_0x50518e['name']);this[_0x8ea2('0xb0')](_0x50518e[_0x8ea2('0x191')])[_0x8ea2('0xa9')](this[_0x8ea2('0x19e')](_0x50518e))[_0x8ea2('0xa9')](mergeDataErlangB(_0x50518e))[_0x8ea2('0xa9')](this['startMethodPredictive'](_0x50518e))[_0x8ea2('0xaa')](loggerCatchPredictive(_0x8ea2('0x19f'),_0x50518e));}else if(!ifInterval(_0x50518e[_0x8ea2('0x191')],_0x50518e[_0x8ea2('0x82')])){_0x50518e[_0x8ea2('0x6d')]=0x0;_0x50518e[_0x8ea2('0x82')]=moment()[_0x8ea2('0x75')]('YYYY-MM-DD\x20HH:mm:ss');loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x1a0'),_0x50518e[_0x8ea2('0x82')],_0x50518e[_0x8ea2('0x44')]);clearInterval(_0x50518e[_0x8ea2('0x83')]);_0x50518e['handlePredictive']=undefined;this[_0x8ea2('0xb0')](_0x50518e[_0x8ea2('0x191')])[_0x8ea2('0xa9')](this['getDataPredictive'](_0x50518e))[_0x8ea2('0xa9')](mergeDataErlangB(_0x50518e))[_0x8ea2('0xa9')](this[_0x8ea2('0x1a1')](_0x50518e))[_0x8ea2('0xaa')](loggerCatchPredictive(_0x8ea2('0x19f'),_0x50518e));}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x19e')]=function(_0x34818b){var _0x266cce=this;return function(_0x3d3c4d){return new BPromise(function(_0x52d523,_0x119ab7){_[_0x8ea2('0x7f')](_0x34818b,_0x3d3c4d[0x0]);if(checkGetDataPredictive(_0x3d3c4d[0x0])){loggerPredictive[_0x8ea2('0x7a')](JSON[_0x8ea2('0x4a')](_0x3d3c4d[0x0]));if(_0x34818b['dialPredictiveOptimization']===_0x8ea2('0x194')){return _0x266cce[_0x8ea2('0xb8')](_0x34818b['id'])[_0x8ea2('0xa9')](function(_0x5db247){var _0xac5c69=_0x34818b['loggedIn']-_0x5db247[0x0][_0x8ea2('0x1a2')];var _0x51b6fb=_0x34818b[_0x8ea2('0x191')]*0x3c;var _0x52b427=_0x3d3c4d[0x0][_0x8ea2('0x6a')]+_0x3d3c4d[0x0][_0x8ea2('0x69')];var _0x4a05d8=(_0x3d3c4d[0x0]['predictiveIntervalAnsweredCalls']+_0x3d3c4d[0x0][_0x8ea2('0x6b')]+_0x3d3c4d[0x0]['predictiveIntervalDroppedCallsCallersExit'])/_0x3d3c4d[0x0][_0x8ea2('0x71')];var _0x1b674e=_0x34818b[_0x8ea2('0x189')]/0x64;_0x34818b[_0x8ea2('0x70')]=_0x5db247[0x0][_0x8ea2('0x1a2')]||0x0;_0x34818b[_0x8ea2('0x6e')]=_0x4a05d8>0x0?_0x4a05d8:0x1;return _0x266cce[_0x8ea2('0x1a3')](_0xac5c69,_0x51b6fb,_0x52b427,_0x4a05d8,_0x1b674e);})[_0x8ea2('0xa9')](function(_0xde8c7){return _0x52d523(_0xde8c7);})[_0x8ea2('0xaa')](function(_0x319f92){return _0x119ab7(msgResponse(_0x8ea2('0x1a4'),_0x8ea2('0x116'),JSON[_0x8ea2('0x4a')](_0x319f92)));});}if(_0x34818b[_0x8ea2('0x193')]==='agentBusyFactor'){return _0x266cce[_0x8ea2('0xb8')](_0x34818b['id'])[_0x8ea2('0xa9')](function(_0x6a9c53){var _0x2feb6f=_0x34818b['loggedIn']-_0x6a9c53[0x0][_0x8ea2('0x1a2')];var _0x32cb9b=_0x34818b['dialPredictiveInterval']*0x3c;var _0xc7ca26=_0x3d3c4d[0x0][_0x8ea2('0x6a')]+_0x3d3c4d[0x0]['predictiveIntervalAvgHoldtime'];var _0x4b787c=(_0x3d3c4d[0x0][_0x8ea2('0x68')]+_0x3d3c4d[0x0][_0x8ea2('0x6b')]+_0x3d3c4d[0x0][_0x8ea2('0xf7')])/_0x3d3c4d[0x0]['predictiveIntervalTotalCalls'];var _0x34e1d3=_0x34818b['dialPredictiveOptimizationPercentage']/0x64;_0x34818b[_0x8ea2('0x70')]=_0x6a9c53[0x0]['outboundQueuePauses']||0x0;_0x34818b[_0x8ea2('0x6e')]=_0x4b787c>0x0?_0x4b787c:0x1;return _0x266cce[_0x8ea2('0x1a5')](_0x2feb6f,_0x32cb9b,_0xc7ca26,_0x4b787c,_0x34e1d3);})['then'](function(_0x1b9013){return _0x52d523(_0x1b9013);})['catch'](function(_0x18c5e6){return _0x119ab7(msgResponse(_0x8ea2('0x1a4'),_0x8ea2('0x116'),JSON[_0x8ea2('0x4a')](_0x18c5e6)));});}}else{return _0x119ab7(msgResponse(_0x8ea2('0x1a6'),'Failure',_0x8ea2('0x1a7')));}});};};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x1a1')]=function(_0x392145){var _0x1d620b=this;return function(){var _0x28c0e8=0x0;var _0x5b1392=Math[_0x8ea2('0x1a8')](_0x392145['erlangCallToSecond']*0x3e8);if(_0x5b1392>0x0){_0x5b1392=_0x5b1392<0x64?0x64:_0x5b1392;loggerPredictive['info'](_0x8ea2('0x1a9'),_0x5b1392);_0x392145[_0x8ea2('0x83')]=setInterval(function(){_0x1d620b[_0x8ea2('0x83')](_0x392145);loggerPredictiveCalls['info'](_0x8ea2('0x1aa'),_0x28c0e8+=0x1);},_0x5b1392);}else{loggerPredictive[_0x8ea2('0x7a')]('[startMethodPredictive][milliseconds]\x20','Failure\x20',_0x5b1392);}};};Dialer['prototype'][_0x8ea2('0x1ab')]=function(_0x27f7a2,_0x99d58e){var _0x46004e=this;return function(_0x432a6c){if(_[_0x8ea2('0x45')](_0x432a6c)){if(_[_0x8ea2('0x9f')](_0x99d58e[_0x8ea2('0x1ac')])||!_0x99d58e[_0x8ea2('0x1ad')]){if(_0x27f7a2[_0x8ea2('0x5c')]==='booked'){_0x27f7a2['queueStatusComplete']=_[_0x8ea2('0x3e')](_0x27f7a2['queueStatusComplete'])?!![]:_0x27f7a2[_0x8ea2('0x103')];var _0x1cbf1f=uuid['v4']();_0x46004e[_0x8ea2('0x9d')][_0x1cbf1f]=new Action(_0x27f7a2,_0x99d58e,_0x1cbf1f);loggerBooked[_0x8ea2('0x7a')](_0x8ea2('0x1ae'),_0x1cbf1f,_0x8ea2('0x1af'),JSON[_0x8ea2('0x4a')](_0x27f7a2[_0x8ea2('0x103')]),'Queue:\x20',_0x27f7a2[_0x8ea2('0x44')]);if(_0x27f7a2['queueStatusComplete']){_0x27f7a2[_0x8ea2('0x103')]=![];_0x46004e[_0x8ea2('0xff')][_0x46004e['actions'][_0x1cbf1f][_0x8ea2('0xa5')]]=[];ami[_0x8ea2('0xa0')]({'actionid':_0x1cbf1f,'action':_0x8ea2('0x1b0'),'queue':_0x27f7a2['name']})[_0x8ea2('0xaa')](function(_0x314b77){_0x46004e[_0x8ea2('0xa4')](_0x27f7a2);_0x46004e[_0x8ea2('0xb3')]({'active':![],'ContactId':_0x46004e[_0x8ea2('0x9d')][_0x1cbf1f][_0x8ea2('0xc3')],'ListId':_0x46004e[_0x8ea2('0x9d')][_0x1cbf1f][_0x8ea2('0xc4')],'VoiceQueueId':_0x46004e['actions'][_0x1cbf1f][_0x8ea2('0x106')]||undefined,'CampaignId':_0x46004e[_0x8ea2('0x9d')][_0x1cbf1f][_0x8ea2('0xc5')]||undefined})[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0x1b1')));delete _0x46004e[_0x8ea2('0x9d')][_0x1cbf1f];});}else{loggerBooked[_0x8ea2('0x7a')]('[booked][checkContactBlack][else]',JSON[_0x8ea2('0x4a')](_0x27f7a2[_0x8ea2('0x103')]),'Queue:\x20',_0x27f7a2[_0x8ea2('0x44')]);_0x46004e[_0x8ea2('0xa4')](_0x27f7a2);_0x46004e[_0x8ea2('0xb3')]({'active':![],'ContactId':_0x46004e[_0x8ea2('0x9d')][_0x1cbf1f][_0x8ea2('0xc3')],'ListId':_0x46004e['actions'][_0x1cbf1f]['ListId'],'VoiceQueueId':_0x46004e[_0x8ea2('0x9d')][_0x1cbf1f][_0x8ea2('0x106')]||undefined,'CampaignId':_0x46004e[_0x8ea2('0x9d')][_0x1cbf1f]['CampaignId']||undefined})['catch'](loggerCatch(_0x8ea2('0x1b1')));delete _0x46004e[_0x8ea2('0x9d')][_0x1cbf1f];}}else{return _0x46004e[_0x8ea2('0x137')](_0x27f7a2,_0x99d58e);}}else{if(getDiff(_0x99d58e[_0x8ea2('0x1b2')])<_0x27f7a2[_0x8ea2('0x1b3')]*0x3c){_0x46004e['preview'][_0x8ea2('0x104')](_0x99d58e['id'])[_0x8ea2('0x20')](function(){_0x46004e[_0x8ea2('0xa4')](_0x27f7a2);});}else{_0x27f7a2[_0x8ea2('0x66')]+=0x1;_0x46004e[_0x8ea2('0xa4')](_0x27f7a2);if(_0x27f7a2[_0x8ea2('0x1b4')]){_0x46004e[_0x8ea2('0xb3')]({'active':![],'recallme':![],'UserId':null,'ContactId':_0x99d58e[_0x8ea2('0xc3')],'ListId':_0x99d58e['ListId'],'VoiceQueueId':_0x99d58e[_0x8ea2('0x106')]||undefined,'CampaignId':_0x99d58e[_0x8ea2('0xc5')]||undefined})[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0x1b5')));_0x46004e[_0x8ea2('0xbc')](createObjHistory(_0x27f7a2,_0x99d58e,'RECALLINQUEUE',0x17,'RecallInQueue'))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0x1b6')));}else{_0x46004e['saveInDb'](createObjHistory(_0x27f7a2,_0x99d58e,'RECALLFAILEDTIMEOUT',0x16,_0x8ea2('0x1b7')),_0x8ea2('0x1b8'),_0x8ea2('0x1b9'));}}}}else{_0x27f7a2[_0x8ea2('0x1ba')]+=0x1;_0x46004e[_0x8ea2('0xc2')](createObjHistory(_0x27f7a2,_0x99d58e,_0x8ea2('0x1bb'),0xd,_0x8ea2('0x1bc')),_0x8ea2('0x1bd'),_0x8ea2('0x1be'));throw'inBlackList';}};};Dialer[_0x8ea2('0x1d')]['handleIvr']=function(_0xbf18da){var _0x4bde60=this;var _0x3248b5=[];var _0x4b51b7=_0xbf18da[_0x8ea2('0x1bf')]-_0xbf18da[_0x8ea2('0x8a')]-_0xbf18da['temp'];emitCampaignSummary(_0xbf18da);if(_0x4b51b7>0x0){if(_0x4b51b7>this[_0x8ea2('0x27')]){_0x4b51b7=this[_0x8ea2('0x27')];}_0xbf18da[_0x8ea2('0x1c0')]+=_0x4b51b7;this['getContactDialerIvr'](_0xbf18da['id'],_0x4b51b7,_0xbf18da[_0x8ea2('0x1c1')])['then'](function(_0xf93ac0){_0xbf18da['temp']-=_0x4b51b7;_0xbf18da[_0x8ea2('0x1c0')]=_0xbf18da[_0x8ea2('0x1c0')]>0x0?_0xbf18da[_0x8ea2('0x1c0')]:0x0;if(!checkContactEmpty(_0xf93ac0)){_0xbf18da[_0x8ea2('0x3f')]='AVAILABLE_CONTACTS_FINISHED';logger[_0x8ea2('0x7a')](_0x8ea2('0x1c2')+_0xbf18da[_0x8ea2('0x44')]);}else{_0xbf18da['originated']+=_0xf93ac0[_0x8ea2('0x108')];_0xbf18da['message']=_0x8ea2('0x1c3');for(var _0x5b1701=0x0;_0x5b1701<_0xf93ac0['length'];_0x5b1701+=0x1){_0xbf18da[_0x8ea2('0x1c4')]+=0x1;if(_[_0x8ea2('0x9f')](_0xf93ac0[_0x5b1701])||_[_0x8ea2('0x9f')](_0xf93ac0[_0x5b1701][_0x8ea2('0x13b')])||_[_0x8ea2('0x9f')](_0xf93ac0[_0x5b1701][_0x8ea2('0x13b')][_0x8ea2('0x13c')])){_0x4bde60[_0x8ea2('0xc0')]('[actionOriginate]\x20',_0xbf18da,_0xf93ac0[_0x5b1701]);}else{_0x4bde60['checkIsBlackListIvr'](_[_0x8ea2('0x102')](_0xf93ac0[_0x5b1701],['CampaignId','Contact.phone']))[_0x8ea2('0xa9')](_0x4bde60[_0x8ea2('0x1ab')](_0xbf18da,_0xf93ac0[_0x5b1701]))['catch'](_0x4bde60[_0x8ea2('0x1c5')]('[actionOriginateIvr]\x20',_0xbf18da));}}}})['catch'](loggerGetContactDialer('[getContactCampaign2]',_0xbf18da,_0x4b51b7));}};Dialer[_0x8ea2('0x1d')]['handlePower']=function(_0x3872c2,_0x40d57a){var _0x322976=this;var _0x429f2d=[];var _0xc2f637=_0x40d57a>=0x1?_0x40d57a:0x1;var _0x39c290=[];if(_0x3872c2[_0x8ea2('0x5c')]===_0x8ea2('0xa')){_0xc2f637=0x1;}var _0x13ffb5=Math[_0x8ea2('0x1a8')](_0x3872c2[_0x8ea2('0x51')]*_0xc2f637)-_0x3872c2[_0x8ea2('0x8a')]-_0x3872c2[_0x8ea2('0x1c0')];emitVoiceQueueSummary(_0x3872c2);if(_0x3872c2[_0x8ea2('0x1c6')]>0x0){var _0x3c1956=_0x3872c2[_0x8ea2('0x1c6')]-_0x3872c2['originated']-_0x3872c2[_0x8ea2('0x93')]-_0x3872c2[_0x8ea2('0x1c0')]-_0x3872c2[_0x8ea2('0x53')];if(_0x13ffb5>_0x3c1956){_0x13ffb5=_0x3c1956;}}if(_0x13ffb5>0x0){if(_0x3872c2[_0x8ea2('0x5c')]===_0x8ea2('0xa')){_0x13ffb5=0x1;}if(_0x13ffb5>this[_0x8ea2('0x27')]){_0x13ffb5=this['maxNumberOriginate'];}_0x3872c2[_0x8ea2('0x1c0')]+=_0x13ffb5;for(var _0x3a5710 in this[_0x8ea2('0x25')]){if(this[_0x8ea2('0x25')][_0x8ea2('0x89')](_0x3a5710)){if(this[_0x8ea2('0x25')][_0x3a5710][_0x8ea2('0x99')]===_0x8ea2('0x1c7')&&this['agents'][_0x3a5710][_0x8ea2('0xa1')]===_0x8ea2('0xcb')){_0x429f2d['push'](this[_0x8ea2('0x25')][_0x3a5710]['id']);}}}this['getContactDialer'](_0x3872c2['id'],_0x429f2d,_0x13ffb5,_0x3872c2[_0x8ea2('0x1c1')])[_0x8ea2('0xa9')](function(_0x1df6b2){_0x3872c2[_0x8ea2('0x1c0')]-=_0x13ffb5;_0x3872c2[_0x8ea2('0x1c0')]=_0x3872c2[_0x8ea2('0x1c0')]>0x0?_0x3872c2[_0x8ea2('0x1c0')]:0x0;if(!checkContactEmpty(_0x1df6b2)){_0x322976['countReScheduled'](_0x3872c2)[_0x8ea2('0xa9')](sendMessageReschedule(_0x3872c2))['catch'](loggerCatch(_0x8ea2('0xab')));}else{_0x3872c2[_0x8ea2('0x8a')]+=_0x1df6b2['length'];_0x3872c2['message']=_0x3872c2[_0x8ea2('0x5c')]===_0x8ea2('0xa')?_0x8ea2('0x1c8'):_0x8ea2('0x1c3');for(var _0x3253fe=0x0;_0x3253fe<_0x1df6b2[_0x8ea2('0x108')];_0x3253fe+=0x1){if(_[_0x8ea2('0x9f')](_0x1df6b2[_0x3253fe])||_[_0x8ea2('0x9f')](_0x1df6b2[_0x3253fe]['Contact'])||_['isNil'](_0x1df6b2[_0x3253fe][_0x8ea2('0x13b')]['phone'])){_0x322976[_0x8ea2('0xc0')](_0x8ea2('0x1c9'),_0x3872c2,_0x1df6b2[_0x3253fe]);}else{_0x322976[_0x8ea2('0xac')](_[_0x8ea2('0x102')](_0x1df6b2[_0x3253fe],[_0x8ea2('0x106'),_0x8ea2('0x1ca')]))[_0x8ea2('0xa9')](_0x322976[_0x8ea2('0x1ab')](_0x3872c2,_0x1df6b2[_0x3253fe]))[_0x8ea2('0xaa')](_0x322976[_0x8ea2('0x1c5')](_0x8ea2('0x1c9'),_0x3872c2));}}}})['catch'](loggerGetContactDialer(_0x8ea2('0x1cb'),_0x3872c2,_0x13ffb5));}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x83')]=function(_0x47caa6){var _0x487b39=this;if(_0x47caa6[_0x8ea2('0x1c6')]>0x0){var _0x32a9bd=_0x47caa6[_0x8ea2('0x1c6')]-_0x47caa6['originated']-_0x47caa6['talking'];if(_0x32a9bd>0x0){this[_0x8ea2('0x1cc')](_0x47caa6);}else{loggerPredictiveCalls['info'](_0x8ea2('0x1cd'));}}else{this[_0x8ea2('0x1cc')](_0x47caa6);}};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x1cc')]=function(_0x3b6e12){var _0x128e96=this;var _0x1c5fd2=[];_0x3b6e12[_0x8ea2('0x8a')]+=0x1;for(var _0x404e8a in this[_0x8ea2('0x25')]){if(this['agents'][_0x8ea2('0x89')](_0x404e8a)){if(this[_0x8ea2('0x25')][_0x404e8a][_0x8ea2('0x99')]===_0x8ea2('0x1c7')&&this[_0x8ea2('0x25')][_0x404e8a]['status']===_0x8ea2('0xcb')){_0x1c5fd2['push'](this['agents'][_0x404e8a]['id']);}}}this[_0x8ea2('0xb5')](_0x3b6e12['id'],_0x1c5fd2,0x1,_0x3b6e12[_0x8ea2('0x1c1')])[_0x8ea2('0xa9')](function(_0x42fa0f){if(!checkContactEmpty(_0x42fa0f)){checkContactLowerLimitOriginate(_0x3b6e12,0x1,0x0);_0x128e96[_0x8ea2('0xa7')](_0x3b6e12)[_0x8ea2('0xa9')](sendMessageReschedule(_0x3b6e12))[_0x8ea2('0xaa')](loggerCatch(_0x8ea2('0xab')));}else{_0x3b6e12['message']=_0x8ea2('0x1c3');if(_[_0x8ea2('0x9f')](_0x42fa0f[0x0])||_[_0x8ea2('0x9f')](_0x42fa0f[0x0][_0x8ea2('0x13b')])||_['isNil'](_0x42fa0f[0x0][_0x8ea2('0x13b')][_0x8ea2('0x13c')])){_0x128e96[_0x8ea2('0xc0')]('[actionOriginate]\x20',_0x3b6e12,_0x42fa0f[0x0]);}else{_0x128e96['checkIsBlackList'](_['pick'](_0x42fa0f[0x0],[_0x8ea2('0x106'),'Contact.phone']))[_0x8ea2('0xa9')](_0x128e96['checkContactBlack'](_0x3b6e12,_0x42fa0f[0x0]))[_0x8ea2('0xaa')](_0x128e96['loggerHandler'](_0x8ea2('0x1ce'),_0x3b6e12));}}})[_0x8ea2('0xaa')](loggerGetContactDialer(_0x8ea2('0x1cf'),_0x3b6e12,0x1));emitVoiceQueueSummary(_0x3b6e12);};Dialer[_0x8ea2('0x1d')]['abandonmentRate']=function(_0x9153a9,_0x37e741,_0x53dc2b,_0x4c1c33,_0x4b19b1,_0x16a520){loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x1d0'),_0x8ea2('0x1d1'),_0x9153a9,_0x8ea2('0x1d2'),_0x37e741,_0x8ea2('0x1d3'),_0x53dc2b,_0x8ea2('0x1d4'),_0x4c1c33,_0x8ea2('0x1d5'),_0x4b19b1);return new BPromise(function(_0x1ec259,_0x2609a9){if(_0x9153a9<=0x0||isNaN(_0x9153a9)){return _0x2609a9(msgResponse('[abandonmentRate]',_0x8ea2('0x167'),_0x8ea2('0x1d6')+_0x9153a9));}if(_0x53dc2b<=0x0||isNaN(_0x53dc2b)){return _0x2609a9(msgResponse('[abandonmentRate]',_0x8ea2('0x167'),_0x8ea2('0x1d7')+_0x53dc2b));}if(_0x4c1c33<=0x0||isNaN(_0x4c1c33)){return _0x2609a9(msgResponse(_0x8ea2('0x1d0'),_0x8ea2('0x167'),'p\x20=\x20'+_0x4c1c33));}if(_0x37e741<=0x0||isNaN(_0x37e741)){return _0x2609a9(msgResponse(_0x8ea2('0x1d0'),'Error',_0x8ea2('0x1d8')+_0x37e741));}if(_0x4b19b1<=0x0||isNaN(_0x4b19b1)){return _0x2609a9(msgResponse(_0x8ea2('0x1d0'),_0x8ea2('0x167'),_0x8ea2('0x1d9')+_0x4b19b1));}_0x16a520=_0x16a520||0x0;var _0x13fb43=0x1/_0x53dc2b;var _0x1bf5ee=0x0;var _0x6e40e4=0x0;var _0x164abd=0x0;var _0x385249=0x0;for(var _0x394ed3=0x0;_0x164abd<_0x4b19b1;_0x394ed3+=0x1){_0x6e40e4=_0x394ed3/_0x37e741;_0x1bf5ee=(_0x4c1c33*_0x6e40e4+_0x16a520)/_0x13fb43;_0x164abd=erlangb(_0x1bf5ee,_0x9153a9);_0x385249=_0x1bf5ee/_0x9153a9*(0x1-erlangb(_0x1bf5ee,_0x9153a9));}return _0x1ec259({'erlangCalls':_0x394ed3,'erlangCallToSecond':_0x37e741/_0x394ed3,'erlangAbandonmentRate':_0x164abd,'erlangBusyFactor':_0x385249});});};Dialer[_0x8ea2('0x1d')][_0x8ea2('0x1a5')]=function(_0x5c29b8,_0x1c5924,_0x2b28a6,_0x4a4f3e,_0x3fc4d3,_0x31e9c1){loggerPredictive[_0x8ea2('0x7a')](_0x8ea2('0x1da'),_0x8ea2('0x1d1'),_0x5c29b8,_0x8ea2('0x1d2'),_0x1c5924,_0x8ea2('0x1d3'),_0x2b28a6,'\x20p\x20=\x20',_0x4a4f3e,_0x8ea2('0x1db'),_0x3fc4d3);return new BPromise(function(_0x4288d0,_0x5dd29b){if(_0x5c29b8<=0x0||isNaN(_0x5c29b8)){return _0x5dd29b(msgResponse(_0x8ea2('0x1d0'),_0x8ea2('0x167'),'m\x20=\x20'+_0x5c29b8));}if(_0x2b28a6<=0x0||isNaN(_0x2b28a6)){return _0x5dd29b(msgResponse(_0x8ea2('0x1d0'),_0x8ea2('0x167'),_0x8ea2('0x1d7')+_0x2b28a6));}if(_0x4a4f3e<=0x0||isNaN(_0x4a4f3e)){return _0x5dd29b(msgResponse('[abandonmentRate]','Error',_0x8ea2('0x1dc')+_0x4a4f3e));}if(_0x1c5924<=0x0||isNaN(_0x1c5924)){return _0x5dd29b(msgResponse('[abandonmentRate]',_0x8ea2('0x167'),_0x8ea2('0x1d8')+_0x1c5924));}if(_0x3fc4d3<=0x0||isNaN(_0x3fc4d3)){return _0x5dd29b(msgResponse(_0x8ea2('0x1d0'),'Error',_0x8ea2('0x1d9')+_0x3fc4d3));}_0x31e9c1=_0x31e9c1||0x0;var _0x33fccf=0x1/_0x2b28a6;var _0x2493a2=0x0;var _0x2dc963=0x0;var _0x12fd70=0x0;var _0x5072a1=0x0;for(var _0x3b749e=0x0;_0x5072a1<_0x3fc4d3;_0x3b749e+=0x1){_0x2dc963=_0x3b749e/_0x1c5924;_0x2493a2=(_0x4a4f3e*_0x2dc963+_0x31e9c1)/_0x33fccf;_0x12fd70=erlangb(_0x2493a2,_0x5c29b8);_0x5072a1=_0x2493a2/_0x5c29b8*(0x1-erlangb(_0x2493a2,_0x5c29b8));}return _0x4288d0({'erlangCalls':_0x3b749e,'erlangCallToSecond':_0x1c5924/_0x3b749e,'erlangAbandonmentRate':_0x12fd70,'erlangBusyFactor':_0x5072a1});});};module['exports']=Dialer;
\ No newline at end of file
index 5c3e2aa..c561286 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf135=['countnoanswerretry','countglobal','countbusyretry','uniqueid','calleridname','name','calleridnum','number','starttime','responsetime','droptime','endtime','ringtime','holdtime','talktime','membername','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','milliseconds','diff','scheduledat','type','campaigntype','outbound','queue','countcongestionretry'];(function(_0x92c450,_0x41f1e3){var _0x2a9599=function(_0x4f27df){while(--_0x4f27df){_0x92c450['push'](_0x92c450['shift']());}};_0x2a9599(++_0x41f1e3);}(_0xf135,0x127));var _0x5f13=function(_0x5109a3,_0xcfd3b6){_0x5109a3=_0x5109a3-0x0;var _0x475988=_0xf135[_0x5109a3];return _0x475988;};'use strict';var util=require(_0x5f13('0x0'));var _=require('lodash');var moment=require('moment');function getSeconds(_0x384563,_0x137c90){var _0x2cd0db=moment(_0x384563)['milliseconds'](0x0);var _0x470125=moment(_0x137c90)[_0x5f13('0x1')](0x0);return _0x2cd0db[_0x5f13('0x2')](_0x470125,'seconds');}function QueueCallerAbandon(_0x4fba40,_0xb6825c){this[_0x5f13('0x3')]=_0x4fba40['scheduledat'];this[_0x5f13('0x4')]=_0x4fba40[_0x5f13('0x4')];this[_0x5f13('0x5')]=_0x4fba40['type']===_0x5f13('0x6')?_0x5f13('0x7'):_0x4fba40['type'];this['countbusyretry']=_0x4fba40['countbusyretry'];this[_0x5f13('0x8')]=_0x4fba40[_0x5f13('0x8')];this['countnoanswerretry']=_0x4fba40[_0x5f13('0x9')];this[_0x5f13('0xa')]=_0x4fba40[_0x5f13('0xb')]+_0x4fba40[_0x5f13('0x8')]+_0x4fba40['countnoanswerretry'];this[_0x5f13('0xc')]=_0xb6825c['uniqueid'];this[_0x5f13('0xd')]=_0x4fba40[_0x5f13('0xe')];this[_0x5f13('0xf')]=_0x4fba40[_0x5f13('0x10')];this[_0x5f13('0x11')]=_0x4fba40['starttime'];this[_0x5f13('0x12')]=_0x4fba40[_0x5f13('0x12')];this['droptime']=_0x4fba40[_0x5f13('0x13')];this[_0x5f13('0x14')]=this[_0x5f13('0x13')];this[_0x5f13('0x15')]=getSeconds(_0x4fba40[_0x5f13('0x12')],_0x4fba40[_0x5f13('0x11')]);this[_0x5f13('0x16')]=getSeconds(this[_0x5f13('0x13')],_0x4fba40[_0x5f13('0x12')]);this[_0x5f13('0x17')]=0x0;this[_0x5f13('0x7')]=_0xb6825c[_0x5f13('0x7')];this[_0x5f13('0x18')]=_0xb6825c['connectedlinename'];this[_0x5f13('0x19')]=_0xb6825c[_0x5f13('0x19')];this[_0x5f13('0x1a')]=_0x4fba40['callback'];this[_0x5f13('0x1b')]=_0x4fba40['callbackuniqueid'];this[_0x5f13('0x1c')]=_0x4fba40[_0x5f13('0x1c')];this['recallme']=_0x4fba40[_0x5f13('0x1d')];this['ContactId']=_0x4fba40[_0x5f13('0x1e')];this['ListId']=_0x4fba40[_0x5f13('0x1f')];this[_0x5f13('0x20')]=_0x4fba40[_0x5f13('0x20')];this[_0x5f13('0x21')]=_0x4fba40['VoiceQueueId'];this[_0x5f13('0x22')]=_0x4fba40[_0x5f13('0x22')];this[_0x5f13('0x23')]=_0x4fba40[_0x5f13('0x23')]||'';this[_0x5f13('0x24')]=_0x4fba40[_0x5f13('0x24')]||'';}module[_0x5f13('0x25')]=QueueCallerAbandon;
\ No newline at end of file
+var _0xe497=['countcongestionretry','countnoanswerretry','uniqueid','calleridname','calleridnum','number','starttime','responsetime','droptime','ringtime','holdtime','membername','connectedlinename','reason','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','VoiceQueueId','CampaignId','originatecalleridnum','originatecalleridname','exports','util','lodash','moment','milliseconds','diff','seconds','scheduledat','type','campaigntype','queue','countbusyretry'];(function(_0x3dfd0f,_0x3b4286){var _0x30faf2=function(_0xe94908){while(--_0xe94908){_0x3dfd0f['push'](_0x3dfd0f['shift']());}};_0x30faf2(++_0x3b4286);}(_0xe497,0x139));var _0x7e49=function(_0x4aa1f8,_0x186e90){_0x4aa1f8=_0x4aa1f8-0x0;var _0x323369=_0xe497[_0x4aa1f8];return _0x323369;};'use strict';var util=require(_0x7e49('0x0'));var _=require(_0x7e49('0x1'));var moment=require(_0x7e49('0x2'));function getSeconds(_0x2ba1ce,_0x4407f5){var _0xa46056=moment(_0x2ba1ce)[_0x7e49('0x3')](0x0);var _0x265c9c=moment(_0x4407f5)['milliseconds'](0x0);return _0xa46056[_0x7e49('0x4')](_0x265c9c,_0x7e49('0x5'));}function QueueCallerAbandon(_0xee610c,_0x53c6fa){this[_0x7e49('0x6')]=_0xee610c['scheduledat'];this['type']=_0xee610c[_0x7e49('0x7')];this[_0x7e49('0x8')]=_0xee610c[_0x7e49('0x7')]==='outbound'?_0x7e49('0x9'):_0xee610c['type'];this[_0x7e49('0xa')]=_0xee610c[_0x7e49('0xa')];this[_0x7e49('0xb')]=_0xee610c[_0x7e49('0xb')];this[_0x7e49('0xc')]=_0xee610c['countnoanswerretry'];this['countglobal']=_0xee610c['countbusyretry']+_0xee610c[_0x7e49('0xb')]+_0xee610c[_0x7e49('0xc')];this[_0x7e49('0xd')]=_0x53c6fa[_0x7e49('0xd')];this[_0x7e49('0xe')]=_0xee610c['name'];this[_0x7e49('0xf')]=_0xee610c[_0x7e49('0x10')];this[_0x7e49('0x11')]=_0xee610c[_0x7e49('0x11')];this[_0x7e49('0x12')]=_0xee610c[_0x7e49('0x12')];this[_0x7e49('0x13')]=_0xee610c[_0x7e49('0x13')];this['endtime']=this[_0x7e49('0x13')];this[_0x7e49('0x14')]=getSeconds(_0xee610c['responsetime'],_0xee610c[_0x7e49('0x11')]);this[_0x7e49('0x15')]=getSeconds(this[_0x7e49('0x13')],_0xee610c[_0x7e49('0x12')]);this['talktime']=0x0;this[_0x7e49('0x9')]=_0x53c6fa[_0x7e49('0x9')];this[_0x7e49('0x16')]=_0x53c6fa[_0x7e49('0x17')];this['reason']=_0x53c6fa[_0x7e49('0x18')];this[_0x7e49('0x19')]=_0xee610c['callback'];this[_0x7e49('0x1a')]=_0xee610c[_0x7e49('0x1a')];this[_0x7e49('0x1b')]=_0xee610c[_0x7e49('0x1b')];this['recallme']=_0xee610c[_0x7e49('0x1c')];this[_0x7e49('0x1d')]=_0xee610c[_0x7e49('0x1d')];this[_0x7e49('0x1e')]=_0xee610c[_0x7e49('0x1e')];this['UserId']=_0xee610c['UserId'];this[_0x7e49('0x1f')]=_0xee610c[_0x7e49('0x1f')];this[_0x7e49('0x20')]=_0xee610c[_0x7e49('0x20')];this[_0x7e49('0x21')]=_0xee610c[_0x7e49('0x21')]||'';this[_0x7e49('0x22')]=_0xee610c[_0x7e49('0x22')]||'';}module[_0x7e49('0x23')]=QueueCallerAbandon;
\ No newline at end of file
index 6399c22..39db665 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcf88=['path','AttachmentId','moment','%s/%s/%s','tech','Trunk','name','fax','localstationid','headerinfo'];(function(_0x535539,_0x24209d){var _0x4f5bc2=function(_0x36f132){while(--_0x36f132){_0x535539['push'](_0x535539['shift']());}};_0x4f5bc2(++_0x24209d);}(_0xcf88,0x106));var _0x8cf8=function(_0x4709c0,_0x3396c7){_0x4709c0=_0x4709c0-0x0;var _0x13348b=_0xcf88[_0x4709c0];return _0x13348b;};'use strict';var util=require('util');var _=require('lodash');var moment=require(_0x8cf8('0x0'));function Action(_0x40998b,_0x534414,_0x15b342){this['uniqueid']=_0x40998b||undefined;this['channel']=util['format'](_0x8cf8('0x1'),_0x534414[_0x8cf8('0x2')],_0x534414[_0x8cf8('0x3')][_0x8cf8('0x4')],_0x15b342[_0x8cf8('0x5')]);this[_0x8cf8('0x6')]=_0x534414['localstationid'];this[_0x8cf8('0x7')]=_0x534414[_0x8cf8('0x7')];this['path']=_0x15b342[_0x8cf8('0x8')];this[_0x8cf8('0x9')]=_0x15b342[_0x8cf8('0x9')];}module['exports']=Action;
\ No newline at end of file
+var _0x40ed=['moment','uniqueid','format','%s/%s/%s','tech','Trunk','name','fax','localstationid','headerinfo','path','AttachmentId','util','lodash'];(function(_0x3439ea,_0x1d81d4){var _0x1a55f3=function(_0x33db17){while(--_0x33db17){_0x3439ea['push'](_0x3439ea['shift']());}};_0x1a55f3(++_0x1d81d4);}(_0x40ed,0x15c));var _0xd40e=function(_0x11aa58,_0x58a1f2){_0x11aa58=_0x11aa58-0x0;var _0x75b2d5=_0x40ed[_0x11aa58];return _0x75b2d5;};'use strict';var util=require(_0xd40e('0x0'));var _=require(_0xd40e('0x1'));var moment=require(_0xd40e('0x2'));function Action(_0x2eb6a8,_0x292df2,_0x4a1cbe){this[_0xd40e('0x3')]=_0x2eb6a8||undefined;this['channel']=util[_0xd40e('0x4')](_0xd40e('0x5'),_0x292df2[_0xd40e('0x6')],_0x292df2[_0xd40e('0x7')][_0xd40e('0x8')],_0x4a1cbe[_0xd40e('0x9')]);this[_0xd40e('0xa')]=_0x292df2[_0xd40e('0xa')];this[_0xd40e('0xb')]=_0x292df2[_0xd40e('0xb')];this['path']=_0x4a1cbe[_0xd40e('0xc')];this[_0xd40e('0xd')]=_0x4a1cbe[_0xd40e('0xd')];}module['exports']=Action;
\ No newline at end of file
index f9d5ac5..9043100 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9803=['../rpc/faxAccount','../rpc/attachment','channels','faxAccounts','trunks','actions','newchannel','syncNewchannel','varset','syncVarSet','bind','newstate','syncNewState','newexten','syncNewExten','faxstatus','syncFaxStatus','receivefax','syncReceiveFax','hangup','originateresponse','syncOriginateResponse','prototype','context','exten','localstationid','uniqueid','channel','name','info','\x20syncNewchannel\x20','variable','hasOwnProperty','channelstate','channelstatedesc','value','operation','status','filename','\x20syncFaxStatus\x20','remotestationid','pagestransferred','resolution','transferrate','/var/opt/motion2/server/files/attachments/','message','create','parse','.pdf','application/pdf','then','notify','calleridnum','catch','error','\x20notify\x20','stringify','\x20receiveFax\x20','merge','response','AttachmentId','update','SENDING\x20FAILED\x20','logger','[Fax][Message][Error][Updated]','[Fax][Message][Error][NoUpdate1]','updateStatus','[Fax][Message][Updated]','[Fax][Message][NoUpdate1]','finally','[Fax][Message][NoUpdate2]','syncHangup','faxpages','faxstatusstring','SENDING\x20FAILED:\x20','SENDING\x20FAILED','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','Action','variablesAction','addVariables','ext','isNil','active','SIP/%s','unmonitored','isTrunkReachable','[Fax][checkTrunk][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','Trunk\x20not\x20working','[Fax][checkTrunk][Empty\x20Fax]','Empty\x20Fax','Empty\x20path','Is\x20Valid','lodash','bluebird','uuid','moment','path','tiff2pdf','../../../config/logger','fax','../ami','./rpcDb','./channel','./util/util','./action'];(function(_0x357de1,_0x406616){var _0x54e2e4=function(_0x2f0b9f){while(--_0x2f0b9f){_0x357de1['push'](_0x357de1['shift']());}};_0x54e2e4(++_0x406616);}(_0x9803,0x6d));var _0x3980=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x9803[_0xa464c9];return _0x3d73c4;};'use strict';var util=require('util');var _=require(_0x3980('0x0'));var BPromise=require(_0x3980('0x1'));var uuid=require(_0x3980('0x2'));var moment=require(_0x3980('0x3'));var path=require(_0x3980('0x4'));var tiff2pdf=require(_0x3980('0x5'));var gs=require('./util/gs');var logger=require(_0x3980('0x6'))(_0x3980('0x7'));var ami=require(_0x3980('0x8'));var rpcDb=require(_0x3980('0x9'));var Channel=require(_0x3980('0xa'));var ut=require(_0x3980('0xb'));var Action=require(_0x3980('0xc'));var faxAccount=require(_0x3980('0xd'));var attachment=require(_0x3980('0xe'));var faxMessage=require('../rpc/faxMessage');function Fax(_0x32c318){this[_0x3980('0xf')]={};this['faxAccounts']=_0x32c318[_0x3980('0x10')];this['trunks']=_0x32c318[_0x3980('0x11')];this[_0x3980('0x12')]={};ami['on'](_0x3980('0x13'),this[_0x3980('0x14')]['bind'](this));ami['on'](_0x3980('0x15'),this[_0x3980('0x16')][_0x3980('0x17')](this));ami['on'](_0x3980('0x18'),this[_0x3980('0x19')][_0x3980('0x17')](this));ami['on'](_0x3980('0x1a'),this[_0x3980('0x1b')]['bind'](this));ami['on'](_0x3980('0x1c'),this[_0x3980('0x1d')][_0x3980('0x17')](this));ami['on'](_0x3980('0x1e'),this[_0x3980('0x1f')][_0x3980('0x17')](this));ami['on'](_0x3980('0x20'),this['syncHangup'][_0x3980('0x17')](this));ami['on'](_0x3980('0x21'),this[_0x3980('0x22')][_0x3980('0x17')](this));}Fax[_0x3980('0x23')][_0x3980('0x14')]=function(_0xc7147c){if(_0xc7147c[_0x3980('0x24')]==='from-voip-provider'){for(var _0x20a1b6 in this[_0x3980('0x10')]){if(this[_0x3980('0x10')]['hasOwnProperty'](_0x20a1b6)){if(_0xc7147c[_0x3980('0x25')]===this[_0x3980('0x10')][_0x20a1b6][_0x3980('0x26')]){this[_0x3980('0xf')][_0xc7147c[_0x3980('0x27')]]={};this[_0x3980('0xf')][_0xc7147c[_0x3980('0x27')]][_0x3980('0x28')]=_0xc7147c[_0x3980('0x28')];this['channels'][_0xc7147c[_0x3980('0x27')]]['id']=this[_0x3980('0x10')][_0x20a1b6]['id'];this[_0x3980('0xf')][_0xc7147c['uniqueid']][_0x3980('0x29')]=this[_0x3980('0x10')][_0x20a1b6][_0x3980('0x29')];logger[_0x3980('0x2a')](_0xc7147c[_0x3980('0x27')],_0x3980('0x2b'));}}}}if(this[_0x3980('0x12')][_0xc7147c[_0x3980('0x27')]]){this[_0x3980('0xf')][_0xc7147c['uniqueid']]={};this['channels'][_0xc7147c[_0x3980('0x27')]][_0x3980('0x28')]=_0xc7147c[_0x3980('0x28')];logger[_0x3980('0x2a')](_0xc7147c[_0x3980('0x27')],'\x20syncNewchannel\x20');}};Fax[_0x3980('0x23')][_0x3980('0x16')]=function(_0x348d3c){if(this[_0x3980('0xf')][_0x348d3c[_0x3980('0x27')]]){for(var _0x34dcf7 in _0x348d3c[_0x3980('0x2c')]){if(_0x348d3c[_0x3980('0x2c')][_0x3980('0x2d')](_0x34dcf7)){this[_0x3980('0xf')][_0x348d3c[_0x3980('0x27')]][_0x34dcf7]=_0x348d3c['value'];}}}};Fax['prototype'][_0x3980('0x19')]=function(_0x51d7dc){if(this['channels'][_0x51d7dc[_0x3980('0x27')]]){this[_0x3980('0xf')][_0x51d7dc['uniqueid']][_0x3980('0x2e')]=_0x51d7dc[_0x3980('0x2e')];this[_0x3980('0xf')][_0x51d7dc[_0x3980('0x27')]][_0x3980('0x2f')]=_0x51d7dc[_0x3980('0x2f')];}};Fax[_0x3980('0x23')]['syncNewExten']=function(_0x5ec0ff){if(this[_0x3980('0xf')][_0x5ec0ff[_0x3980('0x27')]]){for(var _0x52dc86 in _0x5ec0ff[_0x3980('0x2c')]){if(_0x5ec0ff[_0x3980('0x2c')][_0x3980('0x2d')](_0x52dc86)){this[_0x3980('0xf')][_0x5ec0ff[_0x3980('0x27')]][_0x52dc86]=_0x5ec0ff[_0x3980('0x30')];}}}};Fax[_0x3980('0x23')][_0x3980('0x1d')]=function(_0x5d42a7){if(this[_0x3980('0xf')][_0x5d42a7['uniqueid']]){this['channels'][_0x5d42a7[_0x3980('0x27')]][_0x3980('0x31')]=_0x5d42a7[_0x3980('0x31')];this['channels'][_0x5d42a7[_0x3980('0x27')]][_0x3980('0x32')]=_0x5d42a7[_0x3980('0x32')];this[_0x3980('0xf')][_0x5d42a7[_0x3980('0x27')]][_0x3980('0x26')]=_0x5d42a7[_0x3980('0x26')];this[_0x3980('0xf')][_0x5d42a7[_0x3980('0x27')]][_0x3980('0x33')]=_0x5d42a7['filename'];logger[_0x3980('0x2a')](_0x5d42a7[_0x3980('0x27')],_0x3980('0x34'));}};Fax[_0x3980('0x23')]['syncReceiveFax']=function(_0x5ef5ce){var _0x13e162=this;if(this[_0x3980('0xf')][_0x5ef5ce[_0x3980('0x27')]]){var _0x4f46ee=this[_0x3980('0xf')][_0x5ef5ce[_0x3980('0x27')]]['id'];this[_0x3980('0xf')][_0x5ef5ce['uniqueid']][_0x3980('0x35')]=_0x5ef5ce[_0x3980('0x35')];this['channels'][_0x5ef5ce[_0x3980('0x27')]][_0x3980('0x36')]=_0x5ef5ce[_0x3980('0x36')];this['channels'][_0x5ef5ce['uniqueid']][_0x3980('0x26')]=_0x5ef5ce[_0x3980('0x26')];this['channels'][_0x5ef5ce['uniqueid']][_0x3980('0x37')]=_0x5ef5ce['resolution'];this[_0x3980('0xf')][_0x5ef5ce['uniqueid']][_0x3980('0x38')]=_0x5ef5ce[_0x3980('0x38')];this[_0x3980('0xf')][_0x5ef5ce[_0x3980('0x27')]][_0x3980('0x33')]=_0x5ef5ce[_0x3980('0x33')];this[_0x3980('0xf')][_0x5ef5ce[_0x3980('0x27')]]['calleridnum']=_0x5ef5ce['calleridnum'];if(this[_0x3980('0xf')][_0x5ef5ce['uniqueid']][_0x3980('0x36')]>0x0){tiff2pdf(_0x5ef5ce[_0x3980('0x33')],_0x3980('0x39'),function(_0x4775fb){logger['info'](_0x5ef5ce['uniqueid'],'\x20result\x20conversion\x20file\x20',_0x4775fb[_0x3980('0x3a')]);attachment[_0x3980('0x3b')]({'name':path[_0x3980('0x3c')](_0x5ef5ce[_0x3980('0x33')])['name'],'basename':path['parse'](_0x5ef5ce[_0x3980('0x33')])[_0x3980('0x29')]+_0x3980('0x3d'),'type':_0x3980('0x3e')})[_0x3980('0x3f')](function(_0x37835f){faxAccount[_0x3980('0x40')](_0x4f46ee,{'from':_0x5ef5ce[_0x3980('0x41')],'mapKey':_0x3980('0x7'),'body':path[_0x3980('0x3c')](_0x5ef5ce['filename'])['name']+_0x3980('0x3d'),'AttachmentId':_0x37835f['id']})[_0x3980('0x42')](function(_0x351d9d){logger[_0x3980('0x43')](_0x5ef5ce[_0x3980('0x27')],_0x3980('0x44'),JSON[_0x3980('0x45')](_0x351d9d));});})[_0x3980('0x42')](function(_0x4eb387){logger[_0x3980('0x43')](_0x5ef5ce[_0x3980('0x27')],_0x3980('0x46'),JSON[_0x3980('0x45')](_0x4eb387));});});}logger[_0x3980('0x2a')](_0x5ef5ce['uniqueid'],_0x3980('0x46'));}};Fax[_0x3980('0x23')][_0x3980('0x22')]=function(_0x3e57fd){if(this[_0x3980('0x12')][_0x3e57fd['uniqueid']]){_[_0x3980('0x47')](this[_0x3980('0xf')][_0x3e57fd[_0x3980('0x27')]],_['pick'](_0x3e57fd,[_0x3980('0x48'),'reason']));}};function updateStatus(_0x368911){if(_0x368911[_0x3980('0x49')]){faxMessage[_0x3980('0x4a')](_0x368911[_0x3980('0x49')],{'failMessage':_0x3980('0x4b')})['then'](function(_0x241034){ut[_0x3980('0x4c')](_0x3980('0x4d'),_0x241034);})[_0x3980('0x42')](function(_0x59084c){ut[_0x3980('0x4c')](_0x3980('0x4e'),_0x59084c);});}else{ut[_0x3980('0x4c')]('[Fax][Message][Error][NoUpdate2]');}}Fax['prototype'][_0x3980('0x4f')]=function(_0x11f365,_0x3722c9,_0x2121ff){var _0x2da5d8=this;var _0x20fe44={};if(_0x3722c9){_0x20fe44={'read':_0x3722c9};}else{_0x20fe44={'failMessage':_0x2121ff};}if(this[_0x3980('0x12')][_0x11f365][_0x3980('0x49')]){faxMessage[_0x3980('0x4a')](this[_0x3980('0x12')][_0x11f365]['AttachmentId'],_0x20fe44)[_0x3980('0x3f')](function(_0x2aaf1a){ut[_0x3980('0x4c')](_0x3980('0x50'),_0x2aaf1a);})[_0x3980('0x42')](function(_0x5e7954){ut[_0x3980('0x4c')](_0x3980('0x51'),_0x5e7954);})[_0x3980('0x52')](function(){delete _0x2da5d8[_0x3980('0xf')][_0x11f365];delete _0x2da5d8[_0x3980('0x12')][_0x11f365];});}else{ut['logger'](_0x3980('0x53'));delete this[_0x3980('0xf')][_0x11f365];delete this[_0x3980('0x12')][_0x11f365];}};Fax[_0x3980('0x23')][_0x3980('0x54')]=function(_0x5780d2){var _0x5670b0=this;if(this['channels'][_0x5780d2['uniqueid']]){if(this['actions'][_0x5780d2['uniqueid']]){this['channels'][_0x5780d2[_0x3980('0x27')]]['id']=this[_0x3980('0x12')][_0x5780d2['uniqueid']]['id'];this[_0x3980('0xf')][_0x5780d2[_0x3980('0x27')]]['name']=this[_0x3980('0x12')][_0x5780d2[_0x3980('0x27')]][_0x3980('0x29')];}logger['info'](_0x5780d2[_0x3980('0x27')],this[_0x3980('0x12')][_0x5780d2[_0x3980('0x27')]]?'\x20hangup\x20sendFile\x20':'\x20hangup\x20faxRiceive\x20',JSON[_0x3980('0x45')](this[_0x3980('0xf')][_0x5780d2[_0x3980('0x27')]]));if(this['actions'][_0x5780d2[_0x3980('0x27')]]){if(this[_0x3980('0xf')][_0x5780d2[_0x3980('0x27')]][_0x3980('0x55')]>0x0&&this['channels'][_0x5780d2[_0x3980('0x27')]]['faxstatus']==='SUCCESS'){this[_0x3980('0x4f')](_0x5780d2[_0x3980('0x27')],!![]);}else{this[_0x3980('0x4f')](_0x5780d2[_0x3980('0x27')],![],this[_0x3980('0xf')][_0x5780d2['uniqueid']][_0x3980('0x56')]?_0x3980('0x57')+this[_0x3980('0xf')][_0x5780d2[_0x3980('0x27')]][_0x3980('0x56')]:_0x3980('0x58'));}}}};Fax[_0x3980('0x23')][_0x3980('0x59')]=function(_0xab3819){var _0x223b9a=this;return new BPromise(function(_0xac199b,_0x423dad){_0x223b9a[_0x3980('0x5a')](_0xab3819,_0x223b9a[_0x3980('0x10')][_0xab3819[_0x3980('0x5b')]])['then'](function(_0x50a77a){ut['logger'](_0x3980('0x5c'),_0x50a77a);_0xac199b(ut[_0x3980('0x3a')](_0x3980('0x5d')));})[_0x3980('0x42')](function(_0x3cf24a){ut[_0x3980('0x4c')]('[Fax][execOriginate][failure]',_0x3cf24a);updateStatus(_0xab3819);_0x423dad(ut['message'](_0x3980('0x5e')));});});};Fax[_0x3980('0x23')][_0x3980('0x5f')]=function(_0x5b630b){var _0x461da1=this;return new BPromise(function(_0x550446,_0x516b54){var _0x2f6d38=_0x461da1[_0x3980('0x60')](_0x461da1[_0x3980('0x10')][_0x5b630b['FaxAccountId']][_0x3980('0x61')],_0x5b630b);if(_0x2f6d38[_0x3980('0x62')]){_0x550446(ut[_0x3980('0x3a')](_0x3980('0x63')));}else{_0x516b54(ut[_0x3980('0x3a')](_0x2f6d38[_0x3980('0x3a')]));}});};function originate(_0x2554db,_0x8fae14,_0x2df148){return new BPromise(function(_0x3991f9,_0x3552ed){if(_0x2df148){var _0x1430ab=util[_0x3980('0x64')](_0x3980('0x65'),path[_0x3980('0x3c')](_0x2554db[_0x3980('0x4')])[_0x3980('0x29')],_0x2554db[_0x3980('0x4')]);gs[_0x3980('0x66')](_0x1430ab)[_0x3980('0x3f')](function(){_0x2554db[_0x3980('0x4')]=util[_0x3980('0x64')](_0x3980('0x67'),path[_0x3980('0x3c')](_0x2554db[_0x3980('0x4')])[_0x3980('0x68')],path[_0x3980('0x3c')](_0x2554db[_0x3980('0x4')])[_0x3980('0x29')]);_0x8fae14[_0x3980('0x69')]=_0x2554db[_0x3980('0x4')];ut[_0x3980('0x4c')]('Convert\x20pdf\x20to\x20tif','');ami[_0x3980('0x6a')](ut[_0x3980('0x6b')](_0x2554db,_0x8fae14))[_0x3980('0x3f')](function(_0x13f7f5){_0x3991f9(_0x13f7f5);})[_0x3980('0x42')](function(_0x1ff953){_0x3552ed(_0x1ff953);});})[_0x3980('0x42')](function(_0x51db94){_0x3552ed(_0x51db94);});}else{ami[_0x3980('0x6a')](ut[_0x3980('0x6b')](_0x2554db,_0x8fae14))[_0x3980('0x3f')](function(_0x46b33d){_0x3991f9(_0x46b33d);})[_0x3980('0x42')](function(_0x400be9){_0x3552ed(_0x400be9);});}});}Fax[_0x3980('0x23')][_0x3980('0x5a')]=function(_0x53b61c,_0x481e3f){var _0x5d0bb6=this;return new BPromise(function(_0x3cde54,_0x3fb03e){var _0x44641c=uuid['v4']();var _0x77e2ac=ut[_0x3980('0x6c')](_0x53b61c,_0x481e3f);_0x5d0bb6['actions'][_0x44641c]=new Action(_0x44641c,_0x481e3f,_0x53b61c);var _0x530223=_0x5d0bb6[_0x3980('0x12')][_0x44641c];if(path[_0x3980('0x3c')](_0x53b61c[_0x3980('0x4')])[_0x3980('0x6d')]===_0x3980('0x3d')){originate(_0x530223,_0x77e2ac,!![])[_0x3980('0x3f')](function(_0x4d6471){_0x3cde54(_0x4d6471);})['catch'](function(_0x3eae40){_0x3fb03e(_0x3eae40);});}else{originate(_0x530223,_0x77e2ac,![])[_0x3980('0x3f')](function(_0x16e897){_0x3cde54(_0x16e897);})['catch'](function(_0x31eca6){_0x3fb03e(_0x31eca6);});}});};Fax[_0x3980('0x23')]['isTrunkReachable']=function(_0x46881c){return!_[_0x3980('0x6e')](_0x46881c)&&!_[_0x3980('0x6e')](_0x46881c[_0x3980('0x29')])&&!_[_0x3980('0x6e')](_0x46881c['active'])&&_0x46881c[_0x3980('0x6f')]&&!_[_0x3980('0x6e')](this[_0x3980('0x11')][util[_0x3980('0x64')](_0x3980('0x70'),_0x46881c[_0x3980('0x29')])])&&!_[_0x3980('0x6e')](this[_0x3980('0x11')][util[_0x3980('0x64')](_0x3980('0x70'),_0x46881c['name'])][_0x3980('0x32')])&&(this['trunks'][util['format'](_0x3980('0x70'),_0x46881c['name'])][_0x3980('0x32')]==='reachable'||this['trunks'][util['format'](_0x3980('0x70'),_0x46881c[_0x3980('0x29')])][_0x3980('0x32')]===_0x3980('0x71'));};Fax[_0x3980('0x23')][_0x3980('0x60')]=function(_0x558f36,_0x1e4b1a){if(!this[_0x3980('0x72')](_0x558f36)){ut['logger'](_0x3980('0x73'),_[_0x3980('0x6e')](_0x558f36)?'':_0x558f36[_0x3980('0x29')]+_0x3980('0x74'));return{'isValid':![],'message':_0x3980('0x75')};}if(_[_0x3980('0x6e')](_0x1e4b1a[_0x3980('0x7')])){ut[_0x3980('0x4c')](_0x3980('0x76'),JSON[_0x3980('0x45')](_0x1e4b1a));return{'isValid':![],'message':_0x3980('0x77')};}if(_[_0x3980('0x6e')](_0x1e4b1a[_0x3980('0x4')])){ut[_0x3980('0x4c')]('[Fax][checkTrunk][Empty\x20path]',JSON['stringify'](_0x1e4b1a));return{'isValid':![],'message':_0x3980('0x78')};}return{'isValid':!![],'message':_0x3980('0x79')};};module['exports']=Fax;
\ No newline at end of file
+var _0x1288=['[Fax][checkTrunk][Empty\x20path]','Empty\x20path','Is\x20Valid','util','bluebird','moment','path','tiff2pdf','./util/gs','../../../config/logger','fax','../ami','./rpcDb','./channel','./util/util','./action','../rpc/faxAccount','../rpc/attachment','../rpc/faxMessage','channels','faxAccounts','trunks','actions','newchannel','syncNewchannel','bind','varset','newstate','syncNewState','faxstatus','syncFaxStatus','receivefax','syncReceiveFax','hangup','syncHangup','originateresponse','syncOriginateResponse','prototype','context','hasOwnProperty','localstationid','uniqueid','channel','info','\x20syncNewchannel\x20','syncVarSet','variable','value','channelstate','channelstatedesc','syncNewExten','operation','\x20syncFaxStatus\x20','remotestationid','pagestransferred','resolution','transferrate','filename','calleridnum','/var/opt/motion2/server/files/attachments/','create','name','parse','application/pdf','then','.pdf','catch','error','\x20notify\x20','stringify','\x20receiveFax\x20','merge','pick','reason','AttachmentId','update','SENDING\x20FAILED\x20','logger','[Fax][Message][Error][Updated]','[Fax][Message][Error][NoUpdate1]','updateStatus','finally','[Fax][Message][NoUpdate2]','\x20hangup\x20faxRiceive\x20','faxpages','faxstatusstring','SENDING\x20FAILED:\x20','send','FaxAccountId','[Fax][execOriginate][success]','Fax\x20received','[Fax][execOriginate][failure]','message','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','%s/%s.tif','dir','XMF-PATH','Action','variablesAction','execOriginate','addVariables','isTrunkReachable','isNil','active','SIP/%s','status','unmonitored','[Fax][checkTrunk][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','Trunk\x20not\x20working','[Fax][checkTrunk][Empty\x20Fax]','Empty\x20Fax'];(function(_0x129f74,_0x3d64d8){var _0x1cf683=function(_0x232179){while(--_0x232179){_0x129f74['push'](_0x129f74['shift']());}};_0x1cf683(++_0x3d64d8);}(_0x1288,0x168));var _0x8128=function(_0x37ac50,_0x3ad910){_0x37ac50=_0x37ac50-0x0;var _0x3c2eda=_0x1288[_0x37ac50];return _0x3c2eda;};'use strict';var util=require(_0x8128('0x0'));var _=require('lodash');var BPromise=require(_0x8128('0x1'));var uuid=require('uuid');var moment=require(_0x8128('0x2'));var path=require(_0x8128('0x3'));var tiff2pdf=require(_0x8128('0x4'));var gs=require(_0x8128('0x5'));var logger=require(_0x8128('0x6'))(_0x8128('0x7'));var ami=require(_0x8128('0x8'));var rpcDb=require(_0x8128('0x9'));var Channel=require(_0x8128('0xa'));var ut=require(_0x8128('0xb'));var Action=require(_0x8128('0xc'));var faxAccount=require(_0x8128('0xd'));var attachment=require(_0x8128('0xe'));var faxMessage=require(_0x8128('0xf'));function Fax(_0x29e34b){this[_0x8128('0x10')]={};this['faxAccounts']=_0x29e34b[_0x8128('0x11')];this[_0x8128('0x12')]=_0x29e34b[_0x8128('0x12')];this[_0x8128('0x13')]={};ami['on'](_0x8128('0x14'),this[_0x8128('0x15')][_0x8128('0x16')](this));ami['on'](_0x8128('0x17'),this['syncVarSet'][_0x8128('0x16')](this));ami['on'](_0x8128('0x18'),this[_0x8128('0x19')][_0x8128('0x16')](this));ami['on']('newexten',this['syncNewExten'][_0x8128('0x16')](this));ami['on'](_0x8128('0x1a'),this[_0x8128('0x1b')][_0x8128('0x16')](this));ami['on'](_0x8128('0x1c'),this[_0x8128('0x1d')][_0x8128('0x16')](this));ami['on'](_0x8128('0x1e'),this[_0x8128('0x1f')]['bind'](this));ami['on'](_0x8128('0x20'),this[_0x8128('0x21')]['bind'](this));}Fax[_0x8128('0x22')]['syncNewchannel']=function(_0x32cad3){if(_0x32cad3[_0x8128('0x23')]==='from-voip-provider'){for(var _0xb62e11 in this[_0x8128('0x11')]){if(this[_0x8128('0x11')][_0x8128('0x24')](_0xb62e11)){if(_0x32cad3['exten']===this[_0x8128('0x11')][_0xb62e11][_0x8128('0x25')]){this['channels'][_0x32cad3['uniqueid']]={};this['channels'][_0x32cad3[_0x8128('0x26')]][_0x8128('0x27')]=_0x32cad3[_0x8128('0x27')];this[_0x8128('0x10')][_0x32cad3[_0x8128('0x26')]]['id']=this[_0x8128('0x11')][_0xb62e11]['id'];this[_0x8128('0x10')][_0x32cad3[_0x8128('0x26')]]['name']=this[_0x8128('0x11')][_0xb62e11]['name'];logger[_0x8128('0x28')](_0x32cad3[_0x8128('0x26')],_0x8128('0x29'));}}}}if(this['actions'][_0x32cad3[_0x8128('0x26')]]){this[_0x8128('0x10')][_0x32cad3[_0x8128('0x26')]]={};this[_0x8128('0x10')][_0x32cad3['uniqueid']][_0x8128('0x27')]=_0x32cad3[_0x8128('0x27')];logger[_0x8128('0x28')](_0x32cad3[_0x8128('0x26')],_0x8128('0x29'));}};Fax[_0x8128('0x22')][_0x8128('0x2a')]=function(_0x4bc980){if(this[_0x8128('0x10')][_0x4bc980['uniqueid']]){for(var _0x185350 in _0x4bc980[_0x8128('0x2b')]){if(_0x4bc980['variable']['hasOwnProperty'](_0x185350)){this[_0x8128('0x10')][_0x4bc980[_0x8128('0x26')]][_0x185350]=_0x4bc980[_0x8128('0x2c')];}}}};Fax[_0x8128('0x22')][_0x8128('0x19')]=function(_0x5c694e){if(this[_0x8128('0x10')][_0x5c694e['uniqueid']]){this[_0x8128('0x10')][_0x5c694e['uniqueid']][_0x8128('0x2d')]=_0x5c694e['channelstate'];this['channels'][_0x5c694e[_0x8128('0x26')]][_0x8128('0x2e')]=_0x5c694e[_0x8128('0x2e')];}};Fax[_0x8128('0x22')][_0x8128('0x2f')]=function(_0x593374){if(this[_0x8128('0x10')][_0x593374[_0x8128('0x26')]]){for(var _0x2293dc in _0x593374[_0x8128('0x2b')]){if(_0x593374['variable'][_0x8128('0x24')](_0x2293dc)){this[_0x8128('0x10')][_0x593374[_0x8128('0x26')]][_0x2293dc]=_0x593374['value'];}}}};Fax['prototype'][_0x8128('0x1b')]=function(_0x5cb883){if(this[_0x8128('0x10')][_0x5cb883['uniqueid']]){this[_0x8128('0x10')][_0x5cb883[_0x8128('0x26')]][_0x8128('0x30')]=_0x5cb883[_0x8128('0x30')];this[_0x8128('0x10')][_0x5cb883[_0x8128('0x26')]]['status']=_0x5cb883['status'];this[_0x8128('0x10')][_0x5cb883['uniqueid']][_0x8128('0x25')]=_0x5cb883[_0x8128('0x25')];this['channels'][_0x5cb883['uniqueid']]['filename']=_0x5cb883['filename'];logger[_0x8128('0x28')](_0x5cb883[_0x8128('0x26')],_0x8128('0x31'));}};Fax[_0x8128('0x22')][_0x8128('0x1d')]=function(_0x517b46){var _0xcd63c4=this;if(this[_0x8128('0x10')][_0x517b46[_0x8128('0x26')]]){var _0x290b0f=this['channels'][_0x517b46[_0x8128('0x26')]]['id'];this['channels'][_0x517b46[_0x8128('0x26')]][_0x8128('0x32')]=_0x517b46[_0x8128('0x32')];this[_0x8128('0x10')][_0x517b46[_0x8128('0x26')]][_0x8128('0x33')]=_0x517b46[_0x8128('0x33')];this[_0x8128('0x10')][_0x517b46['uniqueid']]['localstationid']=_0x517b46['localstationid'];this[_0x8128('0x10')][_0x517b46[_0x8128('0x26')]]['resolution']=_0x517b46[_0x8128('0x34')];this['channels'][_0x517b46[_0x8128('0x26')]]['transferrate']=_0x517b46[_0x8128('0x35')];this[_0x8128('0x10')][_0x517b46['uniqueid']][_0x8128('0x36')]=_0x517b46[_0x8128('0x36')];this[_0x8128('0x10')][_0x517b46[_0x8128('0x26')]][_0x8128('0x37')]=_0x517b46[_0x8128('0x37')];if(this[_0x8128('0x10')][_0x517b46[_0x8128('0x26')]]['pagestransferred']>0x0){tiff2pdf(_0x517b46[_0x8128('0x36')],_0x8128('0x38'),function(_0x2b8e01){logger['info'](_0x517b46[_0x8128('0x26')],'\x20result\x20conversion\x20file\x20',_0x2b8e01['message']);attachment[_0x8128('0x39')]({'name':path['parse'](_0x517b46[_0x8128('0x36')])[_0x8128('0x3a')],'basename':path[_0x8128('0x3b')](_0x517b46[_0x8128('0x36')])['name']+'.pdf','type':_0x8128('0x3c')})[_0x8128('0x3d')](function(_0x2b35e0){faxAccount['notify'](_0x290b0f,{'from':_0x517b46[_0x8128('0x37')],'mapKey':_0x8128('0x7'),'body':path[_0x8128('0x3b')](_0x517b46['filename'])[_0x8128('0x3a')]+_0x8128('0x3e'),'AttachmentId':_0x2b35e0['id']})[_0x8128('0x3f')](function(_0x2d0199){logger[_0x8128('0x40')](_0x517b46[_0x8128('0x26')],_0x8128('0x41'),JSON[_0x8128('0x42')](_0x2d0199));});})['catch'](function(_0x4679e9){logger[_0x8128('0x40')](_0x517b46[_0x8128('0x26')],_0x8128('0x43'),JSON[_0x8128('0x42')](_0x4679e9));});});}logger['info'](_0x517b46[_0x8128('0x26')],'\x20receiveFax\x20');}};Fax['prototype'][_0x8128('0x21')]=function(_0x575746){if(this[_0x8128('0x13')][_0x575746['uniqueid']]){_[_0x8128('0x44')](this[_0x8128('0x10')][_0x575746['uniqueid']],_[_0x8128('0x45')](_0x575746,['response',_0x8128('0x46')]));}};function updateStatus(_0x456e92){if(_0x456e92[_0x8128('0x47')]){faxMessage[_0x8128('0x48')](_0x456e92[_0x8128('0x47')],{'failMessage':_0x8128('0x49')})[_0x8128('0x3d')](function(_0x201bdc){ut[_0x8128('0x4a')](_0x8128('0x4b'),_0x201bdc);})[_0x8128('0x3f')](function(_0x240f29){ut['logger'](_0x8128('0x4c'),_0x240f29);});}else{ut[_0x8128('0x4a')]('[Fax][Message][Error][NoUpdate2]');}}Fax[_0x8128('0x22')][_0x8128('0x4d')]=function(_0x32fa25,_0xf9ce60,_0x4ba49f){var _0x514dea=this;var _0x8098ff={};if(_0xf9ce60){_0x8098ff={'read':_0xf9ce60};}else{_0x8098ff={'failMessage':_0x4ba49f};}if(this[_0x8128('0x13')][_0x32fa25][_0x8128('0x47')]){faxMessage[_0x8128('0x48')](this[_0x8128('0x13')][_0x32fa25]['AttachmentId'],_0x8098ff)[_0x8128('0x3d')](function(_0x3b7038){ut[_0x8128('0x4a')]('[Fax][Message][Updated]',_0x3b7038);})[_0x8128('0x3f')](function(_0x568315){ut['logger']('[Fax][Message][NoUpdate1]',_0x568315);})[_0x8128('0x4e')](function(){delete _0x514dea[_0x8128('0x10')][_0x32fa25];delete _0x514dea['actions'][_0x32fa25];});}else{ut[_0x8128('0x4a')](_0x8128('0x4f'));delete this[_0x8128('0x10')][_0x32fa25];delete this[_0x8128('0x13')][_0x32fa25];}};Fax[_0x8128('0x22')][_0x8128('0x1f')]=function(_0x2612c4){var _0x12a0b2=this;if(this['channels'][_0x2612c4[_0x8128('0x26')]]){if(this['actions'][_0x2612c4[_0x8128('0x26')]]){this['channels'][_0x2612c4[_0x8128('0x26')]]['id']=this[_0x8128('0x13')][_0x2612c4[_0x8128('0x26')]]['id'];this['channels'][_0x2612c4[_0x8128('0x26')]][_0x8128('0x3a')]=this['actions'][_0x2612c4[_0x8128('0x26')]][_0x8128('0x3a')];}logger[_0x8128('0x28')](_0x2612c4['uniqueid'],this[_0x8128('0x13')][_0x2612c4['uniqueid']]?'\x20hangup\x20sendFile\x20':_0x8128('0x50'),JSON['stringify'](this[_0x8128('0x10')][_0x2612c4[_0x8128('0x26')]]));if(this[_0x8128('0x13')][_0x2612c4[_0x8128('0x26')]]){if(this[_0x8128('0x10')][_0x2612c4[_0x8128('0x26')]][_0x8128('0x51')]>0x0&&this[_0x8128('0x10')][_0x2612c4[_0x8128('0x26')]][_0x8128('0x1a')]==='SUCCESS'){this[_0x8128('0x4d')](_0x2612c4['uniqueid'],!![]);}else{this[_0x8128('0x4d')](_0x2612c4[_0x8128('0x26')],![],this[_0x8128('0x10')][_0x2612c4[_0x8128('0x26')]][_0x8128('0x52')]?_0x8128('0x53')+this[_0x8128('0x10')][_0x2612c4['uniqueid']][_0x8128('0x52')]:'SENDING\x20FAILED');}}}};Fax['prototype'][_0x8128('0x54')]=function(_0x4906d2){var _0x5c66eb=this;return new BPromise(function(_0x148f50,_0x5dcdbe){_0x5c66eb['execOriginate'](_0x4906d2,_0x5c66eb[_0x8128('0x11')][_0x4906d2[_0x8128('0x55')]])[_0x8128('0x3d')](function(_0x1f635d){ut[_0x8128('0x4a')](_0x8128('0x56'),_0x1f635d);_0x148f50(ut['message'](_0x8128('0x57')));})[_0x8128('0x3f')](function(_0x2f648a){ut[_0x8128('0x4a')](_0x8128('0x58'),_0x2f648a);updateStatus(_0x4906d2);_0x5dcdbe(ut[_0x8128('0x59')](_0x8128('0x5a')));});});};Fax['prototype'][_0x8128('0x5b')]=function(_0x1076c4){var _0x2b7b8c=this;return new BPromise(function(_0x19adca,_0x4cc9ef){var _0x5ee2a6=_0x2b7b8c[_0x8128('0x5c')](_0x2b7b8c[_0x8128('0x11')][_0x1076c4[_0x8128('0x55')]][_0x8128('0x5d')],_0x1076c4);if(_0x5ee2a6[_0x8128('0x5e')]){_0x19adca(ut[_0x8128('0x59')](_0x8128('0x5f')));}else{_0x4cc9ef(ut[_0x8128('0x59')](_0x5ee2a6[_0x8128('0x59')]));}});};function originate(_0x12660f,_0x66d197,_0x3d41f3){return new BPromise(function(_0x2c1ce8,_0x672c83){if(_0x3d41f3){var _0x42ab94=util[_0x8128('0x60')](_0x8128('0x61'),path[_0x8128('0x3b')](_0x12660f[_0x8128('0x3')])[_0x8128('0x3a')],_0x12660f[_0x8128('0x3')]);gs['execute'](_0x42ab94)[_0x8128('0x3d')](function(){_0x12660f[_0x8128('0x3')]=util[_0x8128('0x60')](_0x8128('0x62'),path['parse'](_0x12660f[_0x8128('0x3')])[_0x8128('0x63')],path[_0x8128('0x3b')](_0x12660f[_0x8128('0x3')])[_0x8128('0x3a')]);_0x66d197[_0x8128('0x64')]=_0x12660f['path'];ut[_0x8128('0x4a')]('Convert\x20pdf\x20to\x20tif','');ami['Action'](ut['variablesAction'](_0x12660f,_0x66d197))[_0x8128('0x3d')](function(_0x4eb873){_0x2c1ce8(_0x4eb873);})['catch'](function(_0x235529){_0x672c83(_0x235529);});})[_0x8128('0x3f')](function(_0x44b309){_0x672c83(_0x44b309);});}else{ami[_0x8128('0x65')](ut[_0x8128('0x66')](_0x12660f,_0x66d197))[_0x8128('0x3d')](function(_0x5a3bfc){_0x2c1ce8(_0x5a3bfc);})['catch'](function(_0x3f5f16){_0x672c83(_0x3f5f16);});}});}Fax[_0x8128('0x22')][_0x8128('0x67')]=function(_0x30c1ea,_0x549637){var _0x396324=this;return new BPromise(function(_0x12028a,_0x4d1ac7){var _0x3f01c8=uuid['v4']();var _0x54115d=ut[_0x8128('0x68')](_0x30c1ea,_0x549637);_0x396324[_0x8128('0x13')][_0x3f01c8]=new Action(_0x3f01c8,_0x549637,_0x30c1ea);var _0x5e6248=_0x396324['actions'][_0x3f01c8];if(path['parse'](_0x30c1ea['path'])['ext']===_0x8128('0x3e')){originate(_0x5e6248,_0x54115d,!![])['then'](function(_0x572168){_0x12028a(_0x572168);})[_0x8128('0x3f')](function(_0x960fa8){_0x4d1ac7(_0x960fa8);});}else{originate(_0x5e6248,_0x54115d,![])[_0x8128('0x3d')](function(_0x4f05a7){_0x12028a(_0x4f05a7);})['catch'](function(_0x3389a8){_0x4d1ac7(_0x3389a8);});}});};Fax[_0x8128('0x22')][_0x8128('0x69')]=function(_0x1e9b98){return!_['isNil'](_0x1e9b98)&&!_[_0x8128('0x6a')](_0x1e9b98['name'])&&!_[_0x8128('0x6a')](_0x1e9b98[_0x8128('0x6b')])&&_0x1e9b98[_0x8128('0x6b')]&&!_[_0x8128('0x6a')](this[_0x8128('0x12')][util[_0x8128('0x60')](_0x8128('0x6c'),_0x1e9b98['name'])])&&!_[_0x8128('0x6a')](this[_0x8128('0x12')][util[_0x8128('0x60')](_0x8128('0x6c'),_0x1e9b98[_0x8128('0x3a')])][_0x8128('0x6d')])&&(this['trunks'][util[_0x8128('0x60')](_0x8128('0x6c'),_0x1e9b98[_0x8128('0x3a')])]['status']==='reachable'||this[_0x8128('0x12')][util[_0x8128('0x60')](_0x8128('0x6c'),_0x1e9b98[_0x8128('0x3a')])][_0x8128('0x6d')]===_0x8128('0x6e'));};Fax['prototype'][_0x8128('0x5c')]=function(_0x4e9ff4,_0x8f47d6){if(!this[_0x8128('0x69')](_0x4e9ff4)){ut['logger'](_0x8128('0x6f'),_[_0x8128('0x6a')](_0x4e9ff4)?'':_0x4e9ff4['name']+_0x8128('0x70'));return{'isValid':![],'message':_0x8128('0x71')};}if(_[_0x8128('0x6a')](_0x8f47d6[_0x8128('0x7')])){ut[_0x8128('0x4a')](_0x8128('0x72'),JSON[_0x8128('0x42')](_0x8f47d6));return{'isValid':![],'message':_0x8128('0x73')};}if(_[_0x8128('0x6a')](_0x8f47d6[_0x8128('0x3')])){ut['logger'](_0x8128('0x74'),JSON[_0x8128('0x42')](_0x8f47d6));return{'isValid':![],'message':_0x8128('0x75')};}return{'isValid':!![],'message':_0x8128('0x76')};};module['exports']=Fax;
\ No newline at end of file
index 83e93c8..1e26731 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd38f=['inspect','resolve','then','catch','preview','lodash','../rpc/faxAccount','error'];(function(_0x50a8cd,_0x599dcc){var _0x1e0405=function(_0x2e1777){while(--_0x2e1777){_0x50a8cd['push'](_0x50a8cd['shift']());}};_0x1e0405(++_0x599dcc);}(_0xd38f,0x10c));var _0xfd38=function(_0xa0bf93,_0x23f45){_0xa0bf93=_0xa0bf93-0x0;var _0xd3c175=_0xd38f[_0xa0bf93];return _0xd3c175;};'use strict';var util=require('util');var BPromise=require('bluebird');var logger=require('../../../config/logger')(_0xfd38('0x0'));var _=require(_0xfd38('0x1'));var faxAccount=require(_0xfd38('0x2'));function loggerCatch(_0x2a86c2){return function(_0x827c25){logger[_0xfd38('0x3')](_0x2a86c2,util[_0xfd38('0x4')](_0x827c25,{'showHidden':![],'depth':null}));};}exports['notify']=function(_0x5a9d80,_0x3d1e10){return BPromise[_0xfd38('0x5')]()[_0xfd38('0x6')](faxAccount['notify'](_0x5a9d80,_0x3d1e10))[_0xfd38('0x7')](loggerCatch('[Notify]\x20'));};
\ No newline at end of file
+var _0xc9a0=['[Notify]\x20','util','../../../config/logger','../rpc/faxAccount','error','inspect','notify','resolve','then','catch'];(function(_0x5665dc,_0xd0df2a){var _0x25bac9=function(_0x3929d6){while(--_0x3929d6){_0x5665dc['push'](_0x5665dc['shift']());}};_0x25bac9(++_0xd0df2a);}(_0xc9a0,0x14b));var _0x0c9a=function(_0x146892,_0x218e6f){_0x146892=_0x146892-0x0;var _0x3bb503=_0xc9a0[_0x146892];return _0x3bb503;};'use strict';var util=require(_0x0c9a('0x0'));var BPromise=require('bluebird');var logger=require(_0x0c9a('0x1'))('preview');var _=require('lodash');var faxAccount=require(_0x0c9a('0x2'));function loggerCatch(_0x3d92e1){return function(_0x573334){logger[_0x0c9a('0x3')](_0x3d92e1,util[_0x0c9a('0x4')](_0x573334,{'showHidden':![],'depth':null}));};}exports[_0x0c9a('0x5')]=function(_0x268df3,_0x2892ad){return BPromise[_0x0c9a('0x6')]()[_0x0c9a('0x7')](faxAccount[_0x0c9a('0x5')](_0x268df3,_0x2892ad))[_0x0c9a('0x8')](loggerCatch(_0x0c9a('0x9')));};
\ No newline at end of file
index ddb994b..622c928 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x040c=['bluebird','child_process','exec','execute','info','Exec\x20gs','\x20Error\x20:','inspect','util','../../../../config/logger','fax'];(function(_0x11c573,_0x9e7c6e){var _0x6b72de=function(_0x2e8a61){while(--_0x2e8a61){_0x11c573['push'](_0x11c573['shift']());}};_0x6b72de(++_0x9e7c6e);}(_0x040c,0x110));var _0xc040=function(_0x5d4a18,_0x43502b){_0x5d4a18=_0x5d4a18-0x0;var _0x579da0=_0x040c[_0x5d4a18];return _0x579da0;};'use strict';var util=require(_0xc040('0x0'));var logger=require(_0xc040('0x1'))(_0xc040('0x2'));var BPromise=require(_0xc040('0x3'));var exec=require(_0xc040('0x4'))[_0xc040('0x5')];exports[_0xc040('0x6')]=function(_0x1a4544){return new BPromise(function(_0x332e02,_0x2d77a8){exec(_0x1a4544,function(_0x17f08b,_0x4221d6,_0x2a135a){logger[_0xc040('0x7')]('Exec\x20gs',_0x4221d6);if(_0x17f08b){logger[_0xc040('0x7')](_0xc040('0x8'),_0xc040('0x9'),util[_0xc040('0xa')](_0x17f08b,{'showHidden':![],'depth':null}),_0x4221d6,_0x2a135a);_0x2d77a8(_0x17f08b);}_0x332e02(_0x4221d6);});});};
\ No newline at end of file
+var _0x05c1=['Exec\x20gs','\x20Error\x20:','inspect','util','../../../../config/logger','fax','bluebird','child_process','exec','execute','info'];(function(_0x1cd47d,_0x55bc75){var _0x29d52f=function(_0x37737a){while(--_0x37737a){_0x1cd47d['push'](_0x1cd47d['shift']());}};_0x29d52f(++_0x55bc75);}(_0x05c1,0x1d1));var _0x105c=function(_0x2fdaca,_0x1333a7){_0x2fdaca=_0x2fdaca-0x0;var _0x3028a6=_0x05c1[_0x2fdaca];return _0x3028a6;};'use strict';var util=require(_0x105c('0x0'));var logger=require(_0x105c('0x1'))(_0x105c('0x2'));var BPromise=require(_0x105c('0x3'));var exec=require(_0x105c('0x4'))[_0x105c('0x5')];exports[_0x105c('0x6')]=function(_0x38f862){return new BPromise(function(_0x201c66,_0x20fbce){exec(_0x38f862,function(_0x20e199,_0x5dfe7c,_0x2df754){logger[_0x105c('0x7')]('Exec\x20gs',_0x5dfe7c);if(_0x20e199){logger[_0x105c('0x7')](_0x105c('0x8'),_0x105c('0x9'),util[_0x105c('0xa')](_0x20e199,{'showHidden':![],'depth':null}),_0x5dfe7c,_0x2df754);_0x20fbce(_0x20e199);}_0x201c66(_0x5dfe7c);});});};
\ No newline at end of file
index b050951..91141f8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca8c=['maxrate','gateway','t38timeout','localstationid','path','variablesAction','uniqueid','originate','channel','xcally-motion-fax','format','\x22%s\x22\x20<%s>','headerinfo','util','lodash','moment','../../../../config/logger','fax','message','logger','info','inspect','addVariables','ecm'];(function(_0x4cbac8,_0x106456){var _0x5b0480=function(_0x4bdb94){while(--_0x4bdb94){_0x4cbac8['push'](_0x4cbac8['shift']());}};_0x5b0480(++_0x106456);}(_0xca8c,0x1a5));var _0xcca8=function(_0x377c06,_0x55229f){_0x377c06=_0x377c06-0x0;var _0x19a6c1=_0xca8c[_0x377c06];return _0x19a6c1;};'use strict';var util=require(_0xcca8('0x0'));var _=require(_0xcca8('0x1'));var moment=require(_0xcca8('0x2'));var logger=require(_0xcca8('0x3'))(_0xcca8('0x4'));exports[_0xcca8('0x5')]=function(_0x235597){return{'message':_0x235597};};exports[_0xcca8('0x6')]=function(_0x5dd175,_0x281a90){logger[_0xcca8('0x7')](_0x5dd175,util[_0xcca8('0x8')](_0x281a90,{'showHidden':![],'depth':null}));};exports[_0xcca8('0x9')]=function(_0xca5e99,_0x1ee448){var _0x38a745={'XMF-ECM':_0x1ee448[_0xcca8('0xa')],'XMF-HEADERINFO':_0x1ee448['headerinfo'],'XMF-MINRATE':_0x1ee448['minrate'],'XMF-MAXRATE':_0x1ee448[_0xcca8('0xb')],'XMF-MODEM':util['format']('\x22%s\x22',_0x1ee448['modem']),'XMF-GATEWAY':_0x1ee448[_0xcca8('0xc')],'XMF-FAXDETECT':_0x1ee448['faxdetect'],'XMF-T38TIMEOUT':_0x1ee448[_0xcca8('0xd')],'XMF-LOCALSTATIONID':_0x1ee448[_0xcca8('0xe')],'XMF-PATH':_0xca5e99[_0xcca8('0xf')]};return _0x38a745;};exports[_0xcca8('0x10')]=function(_0x1ac2aa,_0x1a4c03){return{'actionid':_0x1ac2aa[_0xcca8('0x11')],'action':_0xcca8('0x12'),'channel':_0x1ac2aa[_0xcca8('0x13')],'Exten':_0xcca8('0x14'),'Context':'from-sip','Priority':'1','callerid':util[_0xcca8('0x15')](_0xcca8('0x16'),_0x1ac2aa[_0xcca8('0x17')]?_0x1ac2aa['headerinfo']:'',_0x1ac2aa[_0xcca8('0xe')]),'variable':_0x1a4c03,'timeout':0x1e*0x3e8,'async':!![],'channelid':_0x1ac2aa[_0xcca8('0x11')]};};
\ No newline at end of file
+var _0x8d8c=['lodash','moment','../../../../config/logger','fax','message','logger','info','inspect','addVariables','ecm','maxrate','format','\x22%s\x22','modem','gateway','faxdetect','t38timeout','localstationid','path','variablesAction','uniqueid','originate','channel','xcally-motion-fax','from-sip','\x22%s\x22\x20<%s>','headerinfo'];(function(_0x2c8350,_0x5126ed){var _0x4d5530=function(_0x42b164){while(--_0x42b164){_0x2c8350['push'](_0x2c8350['shift']());}};_0x4d5530(++_0x5126ed);}(_0x8d8c,0xf3));var _0xc8d8=function(_0x5979e7,_0x2a8391){_0x5979e7=_0x5979e7-0x0;var _0x5b08be=_0x8d8c[_0x5979e7];return _0x5b08be;};'use strict';var util=require('util');var _=require(_0xc8d8('0x0'));var moment=require(_0xc8d8('0x1'));var logger=require(_0xc8d8('0x2'))(_0xc8d8('0x3'));exports[_0xc8d8('0x4')]=function(_0x5287f1){return{'message':_0x5287f1};};exports[_0xc8d8('0x5')]=function(_0x19a463,_0x2ad28a){logger[_0xc8d8('0x6')](_0x19a463,util[_0xc8d8('0x7')](_0x2ad28a,{'showHidden':![],'depth':null}));};exports[_0xc8d8('0x8')]=function(_0x58a98f,_0x473849){var _0x41f899={'XMF-ECM':_0x473849[_0xc8d8('0x9')],'XMF-HEADERINFO':_0x473849['headerinfo'],'XMF-MINRATE':_0x473849['minrate'],'XMF-MAXRATE':_0x473849[_0xc8d8('0xa')],'XMF-MODEM':util[_0xc8d8('0xb')](_0xc8d8('0xc'),_0x473849[_0xc8d8('0xd')]),'XMF-GATEWAY':_0x473849[_0xc8d8('0xe')],'XMF-FAXDETECT':_0x473849[_0xc8d8('0xf')],'XMF-T38TIMEOUT':_0x473849[_0xc8d8('0x10')],'XMF-LOCALSTATIONID':_0x473849[_0xc8d8('0x11')],'XMF-PATH':_0x58a98f[_0xc8d8('0x12')]};return _0x41f899;};exports[_0xc8d8('0x13')]=function(_0x495644,_0x4a42c5){return{'actionid':_0x495644[_0xc8d8('0x14')],'action':_0xc8d8('0x15'),'channel':_0x495644[_0xc8d8('0x16')],'Exten':_0xc8d8('0x17'),'Context':_0xc8d8('0x18'),'Priority':'1','callerid':util[_0xc8d8('0xb')](_0xc8d8('0x19'),_0x495644[_0xc8d8('0x1a')]?_0x495644[_0xc8d8('0x1a')]:'',_0x495644[_0xc8d8('0x11')]),'variable':_0x4a42c5,'timeout':0x1e*0x3e8,'async':!![],'channelid':_0x495644[_0xc8d8('0x14')]};};
\ No newline at end of file
index 2741102..394fb4b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1671=['getVtigerAccounts','initVtigerAccounts','getServicenowAccounts','initServicenowAccounts','initDynamics365Accounts','getCampaigns','initCampaigns','initVoiceExtensions','getFaxAccounts','initFaxAccounts','getVoiceQueueReports','initVoiceQueueReports','initVoiceQueueHopperHistory','getCampaignHopperHistory','initCampaignHopperHistory','getVoiceCallReports','initVoiceCallReports','catch','log','listen','bluebird','moment','./realtime','./report','./acw','./trigger','./preview','./fax','./rpc/user','./rpc/voiceQueue','./rpc/voiceQueueReport','./rpc/voiceCallReport','./rpc/trigger','./rpc/cmHopperHistory','./rpc/voiceExtension','./rpc/faxAccount','./rpc/integrations/zendesk','./rpc/integrations/salesforce','./rpc/integrations/freshdesk','./rpc/integrations/desk','./rpc/integrations/zoho','./rpc/integrations/vtiger','get','hour','resolve','getAgents','then','initAgents','getTelephones','initTelephones','getTrunks','getVoiceQueues','initVoiceQueues','getTriggers','initTriggers','initTemplates','getZendeskAccounts','getSalesforceAccounts','initSalesforceAccounts','initSugarcrmAccounts','getFreshdeskAccounts','initFreshdeskAccounts','getDeskAccounts','initDeskAccounts','getZohoAccounts'];(function(_0x307175,_0x25d1f3){var _0x2f66af=function(_0xac85b0){while(--_0xac85b0){_0x307175['push'](_0x307175['shift']());}};_0x2f66af(++_0x25d1f3);}(_0x1671,0xd7));var _0x1167=function(_0x40b142,_0x5ced2b){_0x40b142=_0x40b142-0x0;var _0x28079b=_0x1671[_0x40b142];return _0x28079b;};'use strict';var BPromise=require(_0x1167('0x0'));var util=require('util');var moment=require(_0x1167('0x1'));var server=require('./server');var Realtime=require(_0x1167('0x2'));var Report=require(_0x1167('0x3'));var Acw=require(_0x1167('0x4'));var Trigger=require(_0x1167('0x5'));var Dialer=require('./dialer');var Preview=require(_0x1167('0x6'));var Fax=require(_0x1167('0x7'));var user=require(_0x1167('0x8'));var voiceQueue=require(_0x1167('0x9'));var voiceQueueReport=require(_0x1167('0xa'));var voiceCallReport=require(_0x1167('0xb'));var trunk=require('./rpc/trunk');var trigger=require(_0x1167('0xc'));var template=require('./rpc/template');var cmHopperHistory=require(_0x1167('0xd'));var campaign=require('./rpc/campaign');var voiceExtension=require(_0x1167('0xe'));var faxAccount=require(_0x1167('0xf'));var zendesk=require(_0x1167('0x10'));var salesforce=require(_0x1167('0x11'));var sugarcrm=require('./rpc/integrations/sugarcrm');var freshdesk=require(_0x1167('0x12'));var desk=require(_0x1167('0x13'));var zoho=require(_0x1167('0x14'));var vtiger=require(_0x1167('0x15'));var servicenow=require('./rpc/integrations/servicenow');var dynamics365=require('./rpc/integrations/dynamics365');var realtime=new Realtime();var report=new Report(realtime);var acw=new Acw(realtime);var channelTrigger=new Trigger(realtime);var preview=new Preview(realtime);var dialer=new Dialer(realtime,preview);var fax=new Fax(realtime);var isTrue=!![];var initP=!![];function ifMidnight(){if(moment()['get']('hour')===0x0&&initP){initP=![];isTrue=!![];initParams();}if(moment()[_0x1167('0x16')](_0x1167('0x17'))===0x1&&isTrue){isTrue=![];initP=!![];}}function initRealtime(){ifMidnight();return BPromise[_0x1167('0x18')]()['then'](user[_0x1167('0x19')]())[_0x1167('0x1a')](realtime[_0x1167('0x1b')]())[_0x1167('0x1a')](user[_0x1167('0x1c')]())[_0x1167('0x1a')](realtime[_0x1167('0x1d')]())[_0x1167('0x1a')](trunk[_0x1167('0x1e')]())[_0x1167('0x1a')](realtime['initTrunks']())[_0x1167('0x1a')](voiceQueue[_0x1167('0x1f')]())['then'](realtime[_0x1167('0x20')]())['then'](trigger[_0x1167('0x21')]())[_0x1167('0x1a')](realtime[_0x1167('0x22')]())[_0x1167('0x1a')](template['getTemplates']())['then'](realtime[_0x1167('0x23')]())[_0x1167('0x1a')](zendesk[_0x1167('0x24')]())[_0x1167('0x1a')](realtime['initZendeskAccounts']())[_0x1167('0x1a')](salesforce[_0x1167('0x25')]())[_0x1167('0x1a')](realtime[_0x1167('0x26')]())[_0x1167('0x1a')](sugarcrm['getSugarcrmAccounts']())[_0x1167('0x1a')](realtime[_0x1167('0x27')]())[_0x1167('0x1a')](freshdesk[_0x1167('0x28')]())[_0x1167('0x1a')](realtime[_0x1167('0x29')]())[_0x1167('0x1a')](desk[_0x1167('0x2a')]())['then'](realtime[_0x1167('0x2b')]())[_0x1167('0x1a')](zoho[_0x1167('0x2c')]())[_0x1167('0x1a')](realtime['initZohoAccounts']())['then'](vtiger[_0x1167('0x2d')]())[_0x1167('0x1a')](realtime[_0x1167('0x2e')]())[_0x1167('0x1a')](servicenow[_0x1167('0x2f')]())[_0x1167('0x1a')](realtime[_0x1167('0x30')]())['then'](dynamics365['getDynamics365Accounts']())['then'](realtime[_0x1167('0x31')]())[_0x1167('0x1a')](campaign[_0x1167('0x32')]())['then'](realtime[_0x1167('0x33')]())[_0x1167('0x1a')](voiceExtension['getVoiceExtensions']())['then'](realtime[_0x1167('0x34')]())[_0x1167('0x1a')](faxAccount[_0x1167('0x35')]())[_0x1167('0x1a')](realtime[_0x1167('0x36')]())[_0x1167('0x1a')](function(){return realtime;});}function initParams(){return BPromise[_0x1167('0x18')]()[_0x1167('0x1a')](voiceQueueReport[_0x1167('0x37')]())[_0x1167('0x1a')](realtime[_0x1167('0x38')]())['then'](cmHopperHistory['getVoiceQueueHopperHistory']())['then'](realtime[_0x1167('0x39')]())[_0x1167('0x1a')](cmHopperHistory[_0x1167('0x3a')]())[_0x1167('0x1a')](realtime[_0x1167('0x3b')]())[_0x1167('0x1a')](voiceCallReport[_0x1167('0x3c')]())[_0x1167('0x1a')](realtime[_0x1167('0x3d')]())['then'](function(_0x3933ee){})[_0x1167('0x3e')](function(_0x2db00b){console[_0x1167('0x3f')](_0x2db00b);});}function main(){return server[_0x1167('0x40')](realtime,preview,fax)[_0x1167('0x1a')](function(_0x246379){return initRealtime();})[_0x1167('0x1a')](function(){return initParams();})[_0x1167('0x1a')](function(){report['sync']();setInterval(initRealtime,0x1388);})[_0x1167('0x3e')](function(_0x3f2e90){console[_0x1167('0x3f')](_0x3f2e90);});}main();
\ No newline at end of file
+var _0x9edc=['bluebird','util','./server','./acw','./trigger','./dialer','./preview','./fax','./rpc/user','./rpc/voiceQueue','./rpc/voiceQueueReport','./rpc/trunk','./rpc/trigger','./rpc/template','./rpc/cmHopperHistory','./rpc/campaign','./rpc/voiceExtension','./rpc/faxAccount','./rpc/integrations/zendesk','./rpc/integrations/freshdesk','./rpc/integrations/desk','./rpc/integrations/zoho','./rpc/integrations/vtiger','./rpc/integrations/servicenow','./rpc/integrations/dynamics365','get','hour','resolve','then','getAgents','getTelephones','initTrunks','initVoiceQueues','getTriggers','getTemplates','initTemplates','getZendeskAccounts','initZendeskAccounts','getSalesforceAccounts','initSalesforceAccounts','getSugarcrmAccounts','getFreshdeskAccounts','getDeskAccounts','initDeskAccounts','getZohoAccounts','initZohoAccounts','getVtigerAccounts','initVtigerAccounts','initServicenowAccounts','getDynamics365Accounts','initDynamics365Accounts','getCampaigns','initCampaigns','getVoiceExtensions','initVoiceExtensions','getFaxAccounts','getVoiceQueueReports','initVoiceQueueReports','getVoiceQueueHopperHistory','initVoiceQueueHopperHistory','getCampaignHopperHistory','initCampaignHopperHistory','initVoiceCallReports','catch','listen','sync'];(function(_0x463e5b,_0x52feee){var _0x1b5e35=function(_0x4f2f27){while(--_0x4f2f27){_0x463e5b['push'](_0x463e5b['shift']());}};_0x1b5e35(++_0x52feee);}(_0x9edc,0x108));var _0xc9ed=function(_0x43f881,_0xd6e5a2){_0x43f881=_0x43f881-0x0;var _0x365c14=_0x9edc[_0x43f881];return _0x365c14;};'use strict';var BPromise=require(_0xc9ed('0x0'));var util=require(_0xc9ed('0x1'));var moment=require('moment');var server=require(_0xc9ed('0x2'));var Realtime=require('./realtime');var Report=require('./report');var Acw=require(_0xc9ed('0x3'));var Trigger=require(_0xc9ed('0x4'));var Dialer=require(_0xc9ed('0x5'));var Preview=require(_0xc9ed('0x6'));var Fax=require(_0xc9ed('0x7'));var user=require(_0xc9ed('0x8'));var voiceQueue=require(_0xc9ed('0x9'));var voiceQueueReport=require(_0xc9ed('0xa'));var voiceCallReport=require('./rpc/voiceCallReport');var trunk=require(_0xc9ed('0xb'));var trigger=require(_0xc9ed('0xc'));var template=require(_0xc9ed('0xd'));var cmHopperHistory=require(_0xc9ed('0xe'));var campaign=require(_0xc9ed('0xf'));var voiceExtension=require(_0xc9ed('0x10'));var faxAccount=require(_0xc9ed('0x11'));var zendesk=require(_0xc9ed('0x12'));var salesforce=require('./rpc/integrations/salesforce');var sugarcrm=require('./rpc/integrations/sugarcrm');var freshdesk=require(_0xc9ed('0x13'));var desk=require(_0xc9ed('0x14'));var zoho=require(_0xc9ed('0x15'));var vtiger=require(_0xc9ed('0x16'));var servicenow=require(_0xc9ed('0x17'));var dynamics365=require(_0xc9ed('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()[_0xc9ed('0x19')]('hour')===0x0&&initP){initP=![];isTrue=!![];initParams();}if(moment()['get'](_0xc9ed('0x1a'))===0x1&&isTrue){isTrue=![];initP=!![];}}function initRealtime(){ifMidnight();return BPromise[_0xc9ed('0x1b')]()[_0xc9ed('0x1c')](user[_0xc9ed('0x1d')]())[_0xc9ed('0x1c')](realtime['initAgents']())[_0xc9ed('0x1c')](user[_0xc9ed('0x1e')]())[_0xc9ed('0x1c')](realtime['initTelephones']())[_0xc9ed('0x1c')](trunk['getTrunks']())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x1f')]())[_0xc9ed('0x1c')](voiceQueue['getVoiceQueues']())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x20')]())[_0xc9ed('0x1c')](trigger[_0xc9ed('0x21')]())['then'](realtime['initTriggers']())[_0xc9ed('0x1c')](template[_0xc9ed('0x22')]())['then'](realtime[_0xc9ed('0x23')]())[_0xc9ed('0x1c')](zendesk[_0xc9ed('0x24')]())['then'](realtime[_0xc9ed('0x25')]())[_0xc9ed('0x1c')](salesforce[_0xc9ed('0x26')]())['then'](realtime[_0xc9ed('0x27')]())[_0xc9ed('0x1c')](sugarcrm[_0xc9ed('0x28')]())[_0xc9ed('0x1c')](realtime['initSugarcrmAccounts']())[_0xc9ed('0x1c')](freshdesk[_0xc9ed('0x29')]())[_0xc9ed('0x1c')](realtime['initFreshdeskAccounts']())[_0xc9ed('0x1c')](desk[_0xc9ed('0x2a')]())['then'](realtime[_0xc9ed('0x2b')]())['then'](zoho[_0xc9ed('0x2c')]())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x2d')]())[_0xc9ed('0x1c')](vtiger[_0xc9ed('0x2e')]())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x2f')]())[_0xc9ed('0x1c')](servicenow['getServicenowAccounts']())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x30')]())[_0xc9ed('0x1c')](dynamics365[_0xc9ed('0x31')]())['then'](realtime[_0xc9ed('0x32')]())['then'](campaign[_0xc9ed('0x33')]())['then'](realtime[_0xc9ed('0x34')]())[_0xc9ed('0x1c')](voiceExtension[_0xc9ed('0x35')]())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x36')]())[_0xc9ed('0x1c')](faxAccount[_0xc9ed('0x37')]())[_0xc9ed('0x1c')](realtime['initFaxAccounts']())[_0xc9ed('0x1c')](function(){return realtime;});}function initParams(){return BPromise[_0xc9ed('0x1b')]()[_0xc9ed('0x1c')](voiceQueueReport[_0xc9ed('0x38')]())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x39')]())[_0xc9ed('0x1c')](cmHopperHistory[_0xc9ed('0x3a')]())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x3b')]())[_0xc9ed('0x1c')](cmHopperHistory[_0xc9ed('0x3c')]())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x3d')]())['then'](voiceCallReport['getVoiceCallReports']())[_0xc9ed('0x1c')](realtime[_0xc9ed('0x3e')]())[_0xc9ed('0x1c')](function(_0x3cd686){})[_0xc9ed('0x3f')](function(_0x5ab9f9){console['log'](_0x5ab9f9);});}function main(){return server[_0xc9ed('0x40')](realtime,preview,fax)[_0xc9ed('0x1c')](function(_0x26df8c){return initRealtime();})['then'](function(){return initParams();})['then'](function(){report[_0xc9ed('0x41')]();setInterval(initRealtime,0x1388);})[_0xc9ed('0x3f')](function(_0x4b7ce4){console['log'](_0x4b7ce4);});}main();
\ No newline at end of file
index e4a253a..ceec02d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x43b7=['onhold','local','prototype','updateStatusRealtime','state','toLowerCase','idle','talking','voiceStatus','statePause','toNumber','format','email','stateTime','address','stringify','user:save','exports','moment','md5','ioredis','../../../config/environment','redis','localhost','name','accountcode','fullname','unknown','status','phone','interface','online','voiceStatusTime','voiceStatusCallerIdNumber','voiceStatusQueue'];(function(_0x422905,_0x3bce3a){var _0x33dc6c=function(_0x4852c9){while(--_0x4852c9){_0x422905['push'](_0x422905['shift']());}};_0x33dc6c(++_0x3bce3a);}(_0x43b7,0x1b6));var _0x743b=function(_0x57491e,_0x48d599){_0x57491e=_0x57491e-0x0;var _0x490c12=_0x43b7[_0x57491e];return _0x490c12;};'use strict';var _=require('lodash');var util=require('util');var moment=require(_0x743b('0x0'));var md5=require(_0x743b('0x1'));var Redis=require(_0x743b('0x2'));var config=require(_0x743b('0x3'));config[_0x743b('0x4')]=_['defaults'](config[_0x743b('0x4')],{'host':_0x743b('0x5'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x743b('0x4')]));function Agent(_0x9facf7){this['id']=_0x9facf7['id']||0x0;this[_0x743b('0x6')]=_0x9facf7[_0x743b('0x6')]||'';this['email']=_0x9facf7['email']||'';this['accountcode']=_0x9facf7[_0x743b('0x7')]||'';this[_0x743b('0x8')]=_0x9facf7[_0x743b('0x8')]||'';this['state']=_0x743b('0x9');this['stateTime']=0x0;this[_0x743b('0xa')]=_0x743b('0x9');this['address']='';this[_0x743b('0xb')]='';this['mobile']='';this[_0x743b('0xc')]='';this[_0x743b('0xd')]=_0x9facf7[_0x743b('0xd')]||![];this['voiceStatus']=_0x743b('0x9');this[_0x743b('0xe')]=0x0;this[_0x743b('0xf')]='';this[_0x743b('0x10')]='';this[_0x743b('0x11')]=![];this[_0x743b('0x12')]=![];this[_0x743b('0x1')]='';}Agent[_0x743b('0x13')][_0x743b('0x14')]=function(_0x5babb7){var _0xd7fc52;if(_0x5babb7&&_0x5babb7['state']){_0xd7fc52=_0x5babb7[_0x743b('0x15')][_0x743b('0x16')]();switch(_0xd7fc52){case'not_inuse':_0xd7fc52=_0x743b('0x17');break;case'inuse':_0xd7fc52=_0x743b('0x18');break;}}if(_0xd7fc52&&this[_0x743b('0x19')]!==_0xd7fc52||_0x5babb7[_0x743b('0x1a')]){this['voiceStatusTime']=_[_0x743b('0x1b')](moment()[_0x743b('0x1c')]('x'));}if(_0xd7fc52){this[_0x743b('0x19')]=_0xd7fc52;}var _0xfcbd65={'id':this['id'],'name':this[_0x743b('0x6')],'email':this[_0x743b('0x1d')],'accountcode':this['accountcode'],'fullname':this[_0x743b('0x8')],'state':this[_0x743b('0x15')],'stateTime':this[_0x743b('0x1e')],'status':this[_0x743b('0xa')],'address':this[_0x743b('0x1f')],'online':this['online'],'voiceStatus':this[_0x743b('0x19')],'voiceStatusTime':this[_0x743b('0xe')],'voiceStatusCallerIdNumber':this[_0x743b('0xf')],'voiceStatusQueue':this[_0x743b('0x10')],'interface':this[_0x743b('0xc')],'onhold':this[_0x743b('0x11')]};var _0x169647=md5(JSON[_0x743b('0x20')](_0xfcbd65));if(this[_0x743b('0x1')]!==_0x169647){this[_0x743b('0x1')]=_0x169647;io['to'](util['format']('user:%s',_0xfcbd65[_0x743b('0x6')]))['emit'](_0x743b('0x21'),_0xfcbd65);}};module[_0x743b('0x22')]=Agent;
\ No newline at end of file
+var _0xca31=['format','status','address','voiceStatusCallerIdNumber','interface','stringify','user:%s','emit','user:save','exports','util','moment','md5','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','email','accountcode','fullname','state','unknown','stateTime','phone','mobile','online','voiceStatus','voiceStatusTime','voiceStatusQueue','onhold','local','not_inuse'];(function(_0x18ba81,_0x3e5c73){var _0x48c152=function(_0x4d2b38){while(--_0x4d2b38){_0x18ba81['push'](_0x18ba81['shift']());}};_0x48c152(++_0x3e5c73);}(_0xca31,0x18b));var _0x1ca3=function(_0x1fb37e,_0x49de19){_0x1fb37e=_0x1fb37e-0x0;var _0x15177d=_0xca31[_0x1fb37e];return _0x15177d;};'use strict';var _=require('lodash');var util=require(_0x1ca3('0x0'));var moment=require(_0x1ca3('0x1'));var md5=require(_0x1ca3('0x2'));var Redis=require(_0x1ca3('0x3'));var config=require(_0x1ca3('0x4'));config[_0x1ca3('0x5')]=_[_0x1ca3('0x6')](config[_0x1ca3('0x5')],{'host':_0x1ca3('0x7'),'port':0x18eb});var io=require(_0x1ca3('0x8'))(new Redis(config[_0x1ca3('0x5')]));function Agent(_0x43038c){this['id']=_0x43038c['id']||0x0;this[_0x1ca3('0x9')]=_0x43038c[_0x1ca3('0x9')]||'';this[_0x1ca3('0xa')]=_0x43038c['email']||'';this['accountcode']=_0x43038c[_0x1ca3('0xb')]||'';this['fullname']=_0x43038c[_0x1ca3('0xc')]||'';this[_0x1ca3('0xd')]=_0x1ca3('0xe');this[_0x1ca3('0xf')]=0x0;this['status']='unknown';this['address']='';this[_0x1ca3('0x10')]='';this[_0x1ca3('0x11')]='';this['interface']='';this[_0x1ca3('0x12')]=_0x43038c[_0x1ca3('0x12')]||![];this[_0x1ca3('0x13')]=_0x1ca3('0xe');this[_0x1ca3('0x14')]=0x0;this['voiceStatusCallerIdNumber']='';this[_0x1ca3('0x15')]='';this[_0x1ca3('0x16')]=![];this[_0x1ca3('0x17')]=![];this[_0x1ca3('0x2')]='';}Agent['prototype']['updateStatusRealtime']=function(_0x2f21ee){var _0x550d11;if(_0x2f21ee&&_0x2f21ee['state']){_0x550d11=_0x2f21ee[_0x1ca3('0xd')]['toLowerCase']();switch(_0x550d11){case _0x1ca3('0x18'):_0x550d11='idle';break;case'inuse':_0x550d11='talking';break;}}if(_0x550d11&&this['voiceStatus']!==_0x550d11||_0x2f21ee['statePause']){this[_0x1ca3('0x14')]=_['toNumber'](moment()[_0x1ca3('0x19')]('x'));}if(_0x550d11){this[_0x1ca3('0x13')]=_0x550d11;}var _0x42ba02={'id':this['id'],'name':this['name'],'email':this[_0x1ca3('0xa')],'accountcode':this[_0x1ca3('0xb')],'fullname':this[_0x1ca3('0xc')],'state':this[_0x1ca3('0xd')],'stateTime':this[_0x1ca3('0xf')],'status':this[_0x1ca3('0x1a')],'address':this[_0x1ca3('0x1b')],'online':this['online'],'voiceStatus':this['voiceStatus'],'voiceStatusTime':this[_0x1ca3('0x14')],'voiceStatusCallerIdNumber':this[_0x1ca3('0x1c')],'voiceStatusQueue':this[_0x1ca3('0x15')],'interface':this[_0x1ca3('0x1d')],'onhold':this['onhold']};var _0x116859=md5(JSON[_0x1ca3('0x1e')](_0x42ba02));if(this[_0x1ca3('0x2')]!==_0x116859){this['md5']=_0x116859;io['to'](util[_0x1ca3('0x19')](_0x1ca3('0x1f'),_0x42ba02[_0x1ca3('0x9')]))[_0x1ca3('0x20')](_0x1ca3('0x21'),_0x42ba02);}};module[_0x1ca3('0x22')]=Agent;
\ No newline at end of file
index 2ec3400..c3647cf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x71f4=['dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialOrderByScheduledAt','DESC','dialPrefix','dialRandomLastDigitCallerIdNumber','dialCutDigit','TrunkBackup','Trunk','Interval','SquareProject','dialQueueProject','dialAMDActive','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','name','type','campaign','originated','ivrAnswerCallsDay','message','active','limitCalls','dialTimezone','dialGlobalInterval','dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry'];(function(_0xfbdbd1,_0x2dc9d9){var _0x3e55b7=function(_0x1c569b){while(--_0x1c569b){_0xfbdbd1['push'](_0xfbdbd1['shift']());}};_0x3e55b7(++_0x2dc9d9);}(_0x71f4,0xf9));var _0x471f=function(_0x2cacf0,_0x3ed02d){_0x2cacf0=_0x2cacf0-0x0;var _0x457de2=_0x71f4[_0x2cacf0];return _0x457de2;};'use strict';function Campaign(_0x358938){this['id']=_0x358938['id']||0x0;this['name']=_0x358938[_0x471f('0x0')]||'';this[_0x471f('0x1')]=_0x358938[_0x471f('0x1')]||_0x471f('0x2');this[_0x471f('0x3')]=0x0;this['temp']=0x0;this[_0x471f('0x4')]=0x0;this['ivrTotalCallsDays']=0x0;this[_0x471f('0x5')]='';this['sendMessageOneNotActive']=!![];this[_0x471f('0x6')]=_0x358938[_0x471f('0x6')];this[_0x471f('0x7')]=_0x358938[_0x471f('0x7')];this[_0x471f('0x8')]=_0x358938[_0x471f('0x8')]||null;this[_0x471f('0x9')]=_0x358938[_0x471f('0x9')]?_0x358938[_0x471f('0x9')]:null;this['dialOriginateCallerIdName']=_0x358938['dialOriginateCallerIdName'];this['dialOriginateCallerIdNumber']=_0x358938[_0x471f('0xa')];this[_0x471f('0xb')]=_0x358938['dialOriginateTimeout']||0x1e;this[_0x471f('0xc')]=_0x358938[_0x471f('0xc')];this[_0x471f('0xd')]=_0x358938['dialCongestionRetryFrequency'];this[_0x471f('0xe')]=_0x358938[_0x471f('0xe')];this[_0x471f('0xf')]=_0x358938[_0x471f('0xf')];this[_0x471f('0x10')]=_0x358938[_0x471f('0x10')];this[_0x471f('0x11')]=_0x358938[_0x471f('0x11')];this[_0x471f('0x12')]=_0x358938['dialGlobalMaxRetry'];this[_0x471f('0x13')]=_0x358938['dialOrderByScheduledAt']||_0x471f('0x14');this[_0x471f('0x15')]=_0x358938[_0x471f('0x15')]||undefined;this[_0x471f('0x16')]=_0x358938[_0x471f('0x16')]||undefined;this[_0x471f('0x17')]=_0x358938[_0x471f('0x17')]||undefined;this[_0x471f('0x18')]=_0x358938['TrunkBackup']?_0x358938[_0x471f('0x18')]:undefined;this[_0x471f('0x19')]=_0x358938['Trunk']?_0x358938[_0x471f('0x19')]:undefined;this['Interval']=_0x358938[_0x471f('0x1a')]?_0x358938['Interval']:undefined;this[_0x471f('0x1b')]=_0x358938[_0x471f('0x1b')]?_0x358938[_0x471f('0x1b')]:undefined;this[_0x471f('0x1c')]=_0x358938['SquareProject']?_0x358938['SquareProject'][_0x471f('0x0')]:undefined;this['dialAMDActive']=_0x358938[_0x471f('0x1d')]||![];this['dialAMDInitialSilence']=_0x358938['dialAMDInitialSilence'];this[_0x471f('0x1e')]=_0x358938[_0x471f('0x1e')];this['dialAMDAfterGreetingSilence']=_0x358938[_0x471f('0x1f')];this[_0x471f('0x20')]=_0x358938[_0x471f('0x20')];this['dialAMDMinWordLength']=_0x358938[_0x471f('0x21')];this[_0x471f('0x22')]=_0x358938[_0x471f('0x22')];this[_0x471f('0x23')]=_0x358938[_0x471f('0x23')];this['dialAMDSilenceThreshold']=_0x358938[_0x471f('0x24')];this[_0x471f('0x25')]=_0x358938['dialAMDMaximumWordLength'];}module['exports']=Campaign;
\ No newline at end of file
+var _0x2750=['dialOriginateCallerIdNumber','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialOrderByScheduledAt','DESC','dialPrefix','dialRandomLastDigitCallerIdNumber','dialCutDigit','TrunkBackup','Interval','SquareProject','dialQueueProject','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','exports','name','type','campaign','originated','temp','ivrAnswerCallsDay','ivrTotalCallsDays','message','sendMessageOneNotActive','active','limitCalls','dialTimezone','dialGlobalInterval'];(function(_0x14b6f4,_0x40f391){var _0x3e2331=function(_0x48f6ea){while(--_0x48f6ea){_0x14b6f4['push'](_0x14b6f4['shift']());}};_0x3e2331(++_0x40f391);}(_0x2750,0x13b));var _0x0275=function(_0x1ce63c,_0x2d9752){_0x1ce63c=_0x1ce63c-0x0;var _0x3216dc=_0x2750[_0x1ce63c];return _0x3216dc;};'use strict';function Campaign(_0x1c9f4d){this['id']=_0x1c9f4d['id']||0x0;this['name']=_0x1c9f4d[_0x0275('0x0')]||'';this[_0x0275('0x1')]=_0x1c9f4d[_0x0275('0x1')]||_0x0275('0x2');this[_0x0275('0x3')]=0x0;this[_0x0275('0x4')]=0x0;this[_0x0275('0x5')]=0x0;this[_0x0275('0x6')]=0x0;this[_0x0275('0x7')]='';this[_0x0275('0x8')]=!![];this['active']=_0x1c9f4d[_0x0275('0x9')];this[_0x0275('0xa')]=_0x1c9f4d[_0x0275('0xa')];this[_0x0275('0xb')]=_0x1c9f4d['dialTimezone']||null;this[_0x0275('0xc')]=_0x1c9f4d[_0x0275('0xc')]?_0x1c9f4d[_0x0275('0xc')]:null;this['dialOriginateCallerIdName']=_0x1c9f4d['dialOriginateCallerIdName'];this[_0x0275('0xd')]=_0x1c9f4d['dialOriginateCallerIdNumber'];this[_0x0275('0xe')]=_0x1c9f4d[_0x0275('0xe')]||0x1e;this[_0x0275('0xf')]=_0x1c9f4d[_0x0275('0xf')];this[_0x0275('0x10')]=_0x1c9f4d['dialCongestionRetryFrequency'];this[_0x0275('0x11')]=_0x1c9f4d[_0x0275('0x11')];this[_0x0275('0x12')]=_0x1c9f4d['dialBusyRetryFrequency'];this['dialNoAnswerMaxRetry']=_0x1c9f4d[_0x0275('0x13')];this[_0x0275('0x14')]=_0x1c9f4d[_0x0275('0x14')];this[_0x0275('0x15')]=_0x1c9f4d[_0x0275('0x15')];this[_0x0275('0x16')]=_0x1c9f4d['dialOrderByScheduledAt']||_0x0275('0x17');this[_0x0275('0x18')]=_0x1c9f4d['dialPrefix']||undefined;this[_0x0275('0x19')]=_0x1c9f4d[_0x0275('0x19')]||undefined;this['dialCutDigit']=_0x1c9f4d[_0x0275('0x1a')]||undefined;this[_0x0275('0x1b')]=_0x1c9f4d['TrunkBackup']?_0x1c9f4d['TrunkBackup']:undefined;this['Trunk']=_0x1c9f4d['Trunk']?_0x1c9f4d['Trunk']:undefined;this[_0x0275('0x1c')]=_0x1c9f4d[_0x0275('0x1c')]?_0x1c9f4d[_0x0275('0x1c')]:undefined;this['SquareProject']=_0x1c9f4d[_0x0275('0x1d')]?_0x1c9f4d[_0x0275('0x1d')]:undefined;this[_0x0275('0x1e')]=_0x1c9f4d['SquareProject']?_0x1c9f4d[_0x0275('0x1d')][_0x0275('0x0')]:undefined;this['dialAMDActive']=_0x1c9f4d['dialAMDActive']||![];this[_0x0275('0x1f')]=_0x1c9f4d[_0x0275('0x1f')];this[_0x0275('0x20')]=_0x1c9f4d['dialAMDGreeting'];this[_0x0275('0x21')]=_0x1c9f4d['dialAMDAfterGreetingSilence'];this[_0x0275('0x22')]=_0x1c9f4d['dialAMDTotalAnalysisTime'];this[_0x0275('0x23')]=_0x1c9f4d[_0x0275('0x23')];this['dialAMDBetweenWordsSilence']=_0x1c9f4d[_0x0275('0x24')];this[_0x0275('0x25')]=_0x1c9f4d[_0x0275('0x25')];this['dialAMDSilenceThreshold']=_0x1c9f4d[_0x0275('0x26')];this[_0x0275('0x27')]=_0x1c9f4d[_0x0275('0x27')];}module[_0x0275('0x28')]=Campaign;
\ No newline at end of file
index 4de1b93..0b7fa67 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfc9b=['exten','answertime','endtime','unmanaged','abandoned','lastdata','billableseconds','type','disposition','monitor','monitorFilename','queue','monitors','transfercalleridnum','mohtime','exports','starttime','channel','destinationchannel','calleridnum','calleridname','connectedlinenum','connectedlinename','context','linkedid'];(function(_0x5e9876,_0x16052d){var _0x576c48=function(_0x338c97){while(--_0x338c97){_0x5e9876['push'](_0x5e9876['shift']());}};_0x576c48(++_0x16052d);}(_0xfc9b,0x74));var _0xbfc9=function(_0x5f5ecf,_0x345c3f){_0x5f5ecf=_0x5f5ecf-0x0;var _0x249574=_0xfc9b[_0x5f5ecf];return _0x249574;};'use strict';function Channel(){this[_0xbfc9('0x0')]=null;this[_0xbfc9('0x1')]='';this[_0xbfc9('0x2')]='';this[_0xbfc9('0x3')]=0x0;this[_0xbfc9('0x4')]='';this[_0xbfc9('0x5')]=undefined;this[_0xbfc9('0x6')]=undefined;this['accountcode']=0x0;this[_0xbfc9('0x7')]='';this['uniqueid']=0x0;this[_0xbfc9('0x8')]=0x0;this[_0xbfc9('0x9')]=0x0;this['answered']=![];this[_0xbfc9('0xa')]=null;this[_0xbfc9('0xb')]=null;this[_0xbfc9('0xc')]=![];this[_0xbfc9('0xd')]=![];this['lastapplication']='';this[_0xbfc9('0xe')]='';this['duration']=0x0;this[_0xbfc9('0xf')]=0x0;this['holdtime']=0x0;this[_0xbfc9('0x10')]=null;this['tag']=null;this[_0xbfc9('0x11')]=null;this[_0xbfc9('0x12')]=![];this[_0xbfc9('0x13')]=null;this[_0xbfc9('0x14')]=null;this[_0xbfc9('0x15')]=[];this[_0xbfc9('0x16')]=undefined;this['transferconnectedlinenum']=undefined;this[_0xbfc9('0x17')]=0x0;}module[_0xbfc9('0x18')]=Channel;
\ No newline at end of file
+var _0x2faf=['abandoned','lastapplication','lastdata','billableseconds','type','disposition','monitor','monitorFilename','queue','monitors','transfercalleridnum','transferconnectedlinenum','mohtime','exports','starttime','channel','destinationchannel','calleridname','connectedlinenum','accountcode','context','uniqueid','linkedid','exten','answered','answertime','unmanaged'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x2faf,0xb0));var _0xf2fa=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0x2faf[_0x20a584];return _0x4b41a8;};'use strict';function Channel(){this[_0xf2fa('0x0')]=null;this[_0xf2fa('0x1')]='';this[_0xf2fa('0x2')]='';this['calleridnum']=0x0;this[_0xf2fa('0x3')]='';this[_0xf2fa('0x4')]=undefined;this['connectedlinename']=undefined;this[_0xf2fa('0x5')]=0x0;this[_0xf2fa('0x6')]='';this[_0xf2fa('0x7')]=0x0;this[_0xf2fa('0x8')]=0x0;this[_0xf2fa('0x9')]=0x0;this[_0xf2fa('0xa')]=![];this[_0xf2fa('0xb')]=null;this['endtime']=null;this[_0xf2fa('0xc')]=![];this[_0xf2fa('0xd')]=![];this[_0xf2fa('0xe')]='';this[_0xf2fa('0xf')]='';this['duration']=0x0;this[_0xf2fa('0x10')]=0x0;this['holdtime']=0x0;this[_0xf2fa('0x11')]=null;this['tag']=null;this[_0xf2fa('0x12')]=null;this[_0xf2fa('0x13')]=![];this[_0xf2fa('0x14')]=null;this[_0xf2fa('0x15')]=null;this[_0xf2fa('0x16')]=[];this[_0xf2fa('0x17')]=undefined;this[_0xf2fa('0x18')]=undefined;this[_0xf2fa('0x19')]=0x0;}module[_0xf2fa('0x1a')]=Channel;
\ No newline at end of file
index 2567cb7..44f3b55 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1fc8=['username','remoteUri','authType','password','consumerKey','consumerSecret','token','tokenSecret','type','serverUrl','Configurations','exports','name'];(function(_0x12bc7d,_0x2de990){var _0x20f248=function(_0x12b11a){while(--_0x12b11a){_0x12bc7d['push'](_0x12bc7d['shift']());}};_0x20f248(++_0x2de990);}(_0x1fc8,0x110));var _0x81fc=function(_0xf2f1a3,_0x2ef4e8){_0xf2f1a3=_0xf2f1a3-0x0;var _0x2c2a86=_0x1fc8[_0xf2f1a3];return _0x2c2a86;};'use strict';function DeskAccount(_0x4d14e8){this['id']=_0x4d14e8['id']||0x0;this[_0x81fc('0x0')]=_0x4d14e8['name']||'';this[_0x81fc('0x1')]=_0x4d14e8['username']||'';this[_0x81fc('0x2')]=_0x4d14e8[_0x81fc('0x2')]||'';this['authType']=_0x4d14e8[_0x81fc('0x3')]||'';this[_0x81fc('0x4')]=_0x4d14e8[_0x81fc('0x4')]||'';this['consumerKey']=_0x4d14e8[_0x81fc('0x5')]||'';this['consumerSecret']=_0x4d14e8[_0x81fc('0x6')]||'';this[_0x81fc('0x7')]=_0x4d14e8[_0x81fc('0x7')]||'';this[_0x81fc('0x8')]=_0x4d14e8[_0x81fc('0x8')]||'';this[_0x81fc('0x9')]=_0x4d14e8[_0x81fc('0x9')]||'';this['serverUrl']=_0x4d14e8[_0x81fc('0xa')]||'';this[_0x81fc('0xb')]=_0x4d14e8[_0x81fc('0xb')]||{};}module[_0x81fc('0xc')]=DeskAccount;
\ No newline at end of file
+var _0x06f5=['Configurations','exports','name','username','remoteUri','authType','password','consumerKey','consumerSecret','token','tokenSecret','type','serverUrl'];(function(_0x1b76e6,_0x598520){var _0x333b53=function(_0x106e6a){while(--_0x106e6a){_0x1b76e6['push'](_0x1b76e6['shift']());}};_0x333b53(++_0x598520);}(_0x06f5,0x1a2));var _0x506f=function(_0x48543e,_0x7d86aa){_0x48543e=_0x48543e-0x0;var _0x9558ab=_0x06f5[_0x48543e];return _0x9558ab;};'use strict';function DeskAccount(_0x725d15){this['id']=_0x725d15['id']||0x0;this[_0x506f('0x0')]=_0x725d15[_0x506f('0x0')]||'';this[_0x506f('0x1')]=_0x725d15[_0x506f('0x1')]||'';this[_0x506f('0x2')]=_0x725d15[_0x506f('0x2')]||'';this[_0x506f('0x3')]=_0x725d15['authType']||'';this[_0x506f('0x4')]=_0x725d15[_0x506f('0x4')]||'';this['consumerKey']=_0x725d15[_0x506f('0x5')]||'';this[_0x506f('0x6')]=_0x725d15[_0x506f('0x6')]||'';this[_0x506f('0x7')]=_0x725d15[_0x506f('0x7')]||'';this[_0x506f('0x8')]=_0x725d15[_0x506f('0x8')]||'';this[_0x506f('0x9')]=_0x725d15['type']||'';this[_0x506f('0xa')]=_0x725d15[_0x506f('0xa')]||'';this[_0x506f('0xb')]=_0x725d15[_0x506f('0xb')]||{};}module[_0x506f('0xc')]=DeskAccount;
\ No newline at end of file
index 1785ba3..7f37244 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe110=['tenantId','clientId','clientSecret','serverUrl','Configurations','name','username','password','remoteUri'];(function(_0xe5d31f,_0x15d5ad){var _0xba9c89=function(_0xf4be95){while(--_0xf4be95){_0xe5d31f['push'](_0xe5d31f['shift']());}};_0xba9c89(++_0x15d5ad);}(_0xe110,0xdd));var _0x0e11=function(_0x5841d3,_0x5bcb4c){_0x5841d3=_0x5841d3-0x0;var _0x25bfd2=_0xe110[_0x5841d3];return _0x25bfd2;};'use strict';function Dynamics365Account(_0x2c5de6){this['id']=_0x2c5de6['id']||0x0;this['name']=_0x2c5de6[_0x0e11('0x0')]||'';this[_0x0e11('0x1')]=_0x2c5de6[_0x0e11('0x1')]||'';this['password']=_0x2c5de6[_0x0e11('0x2')]||'';this[_0x0e11('0x3')]=_0x2c5de6[_0x0e11('0x3')]||'';this[_0x0e11('0x4')]=_0x2c5de6[_0x0e11('0x4')]||'';this[_0x0e11('0x5')]=_0x2c5de6['clientId']||'';this[_0x0e11('0x6')]=_0x2c5de6[_0x0e11('0x6')]||{};this[_0x0e11('0x7')]=_0x2c5de6[_0x0e11('0x7')]||'';this[_0x0e11('0x8')]=_0x2c5de6[_0x0e11('0x8')]||{};}module['exports']=Dynamics365Account;
\ No newline at end of file
+var _0x259a=['username','password','remoteUri','tenantId','clientId','clientSecret','serverUrl','Configurations','name'];(function(_0x46aff0,_0x122890){var _0x9d78cf=function(_0x3f14cb){while(--_0x3f14cb){_0x46aff0['push'](_0x46aff0['shift']());}};_0x9d78cf(++_0x122890);}(_0x259a,0x131));var _0xa259=function(_0x399719,_0x232b0f){_0x399719=_0x399719-0x0;var _0x1bd3e9=_0x259a[_0x399719];return _0x1bd3e9;};'use strict';function Dynamics365Account(_0x3103ae){this['id']=_0x3103ae['id']||0x0;this[_0xa259('0x0')]=_0x3103ae[_0xa259('0x0')]||'';this['username']=_0x3103ae[_0xa259('0x1')]||'';this[_0xa259('0x2')]=_0x3103ae['password']||'';this[_0xa259('0x3')]=_0x3103ae[_0xa259('0x3')]||'';this[_0xa259('0x4')]=_0x3103ae[_0xa259('0x4')]||'';this['clientId']=_0x3103ae[_0xa259('0x5')]||'';this[_0xa259('0x6')]=_0x3103ae[_0xa259('0x6')]||{};this[_0xa259('0x7')]=_0x3103ae[_0xa259('0x7')]||'';this[_0xa259('0x8')]=_0x3103ae['Configurations']||{};}module['exports']=Dynamics365Account;
\ No newline at end of file
index f87106b..11a8fb4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2dae=['headerinfo','localstationid','minrate','maxrate','modem','v17,v27,v29','gateway','faxdetect','t38timeout','tech','SIP','Trunk','ListId','key','exports','name','description','ecm'];(function(_0x184b92,_0x16a0de){var _0x37ed41=function(_0x4d1e14){while(--_0x4d1e14){_0x184b92['push'](_0x184b92['shift']());}};_0x37ed41(++_0x16a0de);}(_0x2dae,0xc3));var _0xe2da=function(_0x3aaf0a,_0x450970){_0x3aaf0a=_0x3aaf0a-0x0;var _0x33e6bc=_0x2dae[_0x3aaf0a];return _0x33e6bc;};'use strict';function FaxAccount(_0x463a36){this['id']=_0x463a36['id']||0x0;this['name']=_0x463a36[_0xe2da('0x0')]||'';this[_0xe2da('0x1')]=_0x463a36[_0xe2da('0x1')];this[_0xe2da('0x2')]=_0x463a36[_0xe2da('0x2')];this['headerinfo']=_0x463a36[_0xe2da('0x3')];this[_0xe2da('0x4')]=_0x463a36[_0xe2da('0x4')];this[_0xe2da('0x5')]=_0x463a36['minrate']||0x960;this[_0xe2da('0x6')]=_0x463a36[_0xe2da('0x6')]||0x3840;this[_0xe2da('0x7')]=_0x463a36[_0xe2da('0x7')]||_0xe2da('0x8');this[_0xe2da('0x9')]=_0x463a36[_0xe2da('0x9')]||'no';this[_0xe2da('0xa')]=_0x463a36[_0xe2da('0xa')]||'no';this['t38timeout']=_0x463a36[_0xe2da('0xb')]||0x1388;this[_0xe2da('0xc')]=_0x463a36[_0xe2da('0xc')]||_0xe2da('0xd');this[_0xe2da('0xe')]=_0x463a36[_0xe2da('0xe')]?_0x463a36[_0xe2da('0xe')]:undefined;this[_0xe2da('0xf')]=_0x463a36['ListId'];this[_0xe2da('0x10')]=_0x463a36['key'];}module[_0xe2da('0x11')]=FaxAccount;
\ No newline at end of file
+var _0x878f=['localstationid','minrate','maxrate','modem','gateway','t38timeout','tech','SIP','Trunk','ListId','key','name','description','ecm','headerinfo'];(function(_0x2f6541,_0x363cba){var _0x4d76d8=function(_0x86404){while(--_0x86404){_0x2f6541['push'](_0x2f6541['shift']());}};_0x4d76d8(++_0x363cba);}(_0x878f,0x173));var _0xf878=function(_0x45b859,_0x36d913){_0x45b859=_0x45b859-0x0;var _0x124c14=_0x878f[_0x45b859];return _0x124c14;};'use strict';function FaxAccount(_0x51758f){this['id']=_0x51758f['id']||0x0;this[_0xf878('0x0')]=_0x51758f[_0xf878('0x0')]||'';this[_0xf878('0x1')]=_0x51758f[_0xf878('0x1')];this[_0xf878('0x2')]=_0x51758f[_0xf878('0x2')];this[_0xf878('0x3')]=_0x51758f[_0xf878('0x3')];this[_0xf878('0x4')]=_0x51758f[_0xf878('0x4')];this[_0xf878('0x5')]=_0x51758f['minrate']||0x960;this['maxrate']=_0x51758f[_0xf878('0x6')]||0x3840;this[_0xf878('0x7')]=_0x51758f['modem']||'v17,v27,v29';this['gateway']=_0x51758f[_0xf878('0x8')]||'no';this['faxdetect']=_0x51758f['faxdetect']||'no';this[_0xf878('0x9')]=_0x51758f[_0xf878('0x9')]||0x1388;this[_0xf878('0xa')]=_0x51758f['tech']||_0xf878('0xb');this[_0xf878('0xc')]=_0x51758f['Trunk']?_0x51758f[_0xf878('0xc')]:undefined;this['ListId']=_0x51758f[_0xf878('0xd')];this[_0xf878('0xe')]=_0x51758f[_0xf878('0xe')];}module['exports']=FaxAccount;
\ No newline at end of file
index 53ed00f..309d0c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x113a=['exports','name','username','apiKey','token','remoteUri','serverUrl','Configurations'];(function(_0x5e49a8,_0x4b1291){var _0x2f5e98=function(_0x4c944f){while(--_0x4c944f){_0x5e49a8['push'](_0x5e49a8['shift']());}};_0x2f5e98(++_0x4b1291);}(_0x113a,0xe9));var _0xa113=function(_0x16439d,_0x53e2ce){_0x16439d=_0x16439d-0x0;var _0x17bf68=_0x113a[_0x16439d];return _0x17bf68;};'use strict';function FreshdeskAccount(_0x3c45f0){this['id']=_0x3c45f0['id']||0x0;this['name']=_0x3c45f0[_0xa113('0x0')]||'';this[_0xa113('0x1')]=_0x3c45f0[_0xa113('0x1')]||'';this[_0xa113('0x2')]=_0x3c45f0[_0xa113('0x3')]||'';this[_0xa113('0x4')]=_0x3c45f0[_0xa113('0x4')]||'';this[_0xa113('0x5')]=_0x3c45f0['serverUrl']||'';this[_0xa113('0x6')]=_0x3c45f0[_0xa113('0x6')]||{};}module[_0xa113('0x7')]=FreshdeskAccount;
\ No newline at end of file
+var _0x0d8a=['remoteUri','serverUrl','Configurations','name','username','apiKey','token'];(function(_0x829616,_0x5d9318){var _0x35857a=function(_0x502cb9){while(--_0x502cb9){_0x829616['push'](_0x829616['shift']());}};_0x35857a(++_0x5d9318);}(_0x0d8a,0x15a));var _0xa0d8=function(_0x4b88e0,_0x15495d){_0x4b88e0=_0x4b88e0-0x0;var _0x154f09=_0x0d8a[_0x4b88e0];return _0x154f09;};'use strict';function FreshdeskAccount(_0x2e50f0){this['id']=_0x2e50f0['id']||0x0;this[_0xa0d8('0x0')]=_0x2e50f0[_0xa0d8('0x0')]||'';this['username']=_0x2e50f0[_0xa0d8('0x1')]||'';this[_0xa0d8('0x2')]=_0x2e50f0[_0xa0d8('0x3')]||'';this[_0xa0d8('0x4')]=_0x2e50f0[_0xa0d8('0x4')]||'';this[_0xa0d8('0x5')]=_0x2e50f0[_0xa0d8('0x5')]||'';this[_0xa0d8('0x6')]=_0x2e50f0[_0xa0d8('0x6')]||{};}module['exports']=FreshdeskAccount;
\ No newline at end of file
index 41dd39d..e2b9312 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcaee=['count','queuecallerabandon','queuecallerabandonAt','queuecallercomplete','queuecallercompleteAt','queuecallerexit','originalposition','channel','connectedlinenum','connectedlinename','accountcode','context','exten','priority','holdtime','assigned','mohtime','exports','type','inbound','uniqueid','calleridnum','queue','queuecallerjoinAt','position'];(function(_0x11b58d,_0x555c55){var _0xc2811b=function(_0x396d22){while(--_0x396d22){_0x11b58d['push'](_0x11b58d['shift']());}};_0xc2811b(++_0x555c55);}(_0xcaee,0x13e));var _0xecae=function(_0x13fe76,_0xf386af){_0x13fe76=_0x13fe76-0x0;var _0x489ec8=_0xcaee[_0x13fe76];return _0x489ec8;};'use strict';function QueueReport(){this[_0xecae('0x0')]=_0xecae('0x1');this[_0xecae('0x2')]='';this[_0xecae('0x3')]='';this['calleridname']='';this[_0xecae('0x4')]='';this[_0xecae('0x5')]=null;this['queuecallerleaveAt']=null;this[_0xecae('0x6')]=0x1;this[_0xecae('0x7')]=0x1;this[_0xecae('0x8')]=![];this[_0xecae('0x9')]=null;this[_0xecae('0xa')]=![];this[_0xecae('0xb')]=null;this[_0xecae('0xc')]=![];this['queuecallerexitAt']=null;this[_0xecae('0xd')]=0x1;this[_0xecae('0xe')]='';this[_0xecae('0xf')]='';this[_0xecae('0x10')]='';this[_0xecae('0x11')]='';this[_0xecae('0x12')]='';this[_0xecae('0x13')]='';this[_0xecae('0x14')]='';this[_0xecae('0x15')]=0x0;this[_0xecae('0x16')]=![];this['lastAssignedTo']='';this[_0xecae('0x17')]=0x0;this['variables']={};}module[_0xecae('0x18')]=QueueReport;
\ No newline at end of file
+var _0x61ce=['position','count','queuecallerabandon','queuecallerabandonAt','queuecallercomplete','queuecallercompleteAt','queuecallerexitAt','originalposition','channel','connectedlinenum','connectedlinename','context','exten','priority','holdtime','assigned','lastAssignedTo','variables','exports','inbound','uniqueid','queue','queuecallerjoinAt','queuecallerleaveAt'];(function(_0x4e6176,_0x184c30){var _0x5108eb=function(_0x1c8727){while(--_0x1c8727){_0x4e6176['push'](_0x4e6176['shift']());}};_0x5108eb(++_0x184c30);}(_0x61ce,0xeb));var _0xe61c=function(_0x48043e,_0x35646e){_0x48043e=_0x48043e-0x0;var _0x22f6d7=_0x61ce[_0x48043e];return _0x22f6d7;};'use strict';function QueueReport(){this['type']=_0xe61c('0x0');this[_0xe61c('0x1')]='';this['calleridnum']='';this['calleridname']='';this[_0xe61c('0x2')]='';this[_0xe61c('0x3')]=null;this[_0xe61c('0x4')]=null;this[_0xe61c('0x5')]=0x1;this[_0xe61c('0x6')]=0x1;this[_0xe61c('0x7')]=![];this[_0xe61c('0x8')]=null;this[_0xe61c('0x9')]=![];this[_0xe61c('0xa')]=null;this['queuecallerexit']=![];this[_0xe61c('0xb')]=null;this[_0xe61c('0xc')]=0x1;this[_0xe61c('0xd')]='';this[_0xe61c('0xe')]='';this[_0xe61c('0xf')]='';this['accountcode']='';this[_0xe61c('0x10')]='';this[_0xe61c('0x11')]='';this[_0xe61c('0x12')]='';this[_0xe61c('0x13')]=0x0;this[_0xe61c('0x14')]=![];this[_0xe61c('0x15')]='';this['mohtime']=0x0;this[_0xe61c('0x16')]={};}module[_0xe61c('0x17')]=QueueReport;
\ No newline at end of file
index b1e0a0d..af128f3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x60a1=['clientId','securityToken','type','integrationTab','serverUrl','Configurations','exports','name','username','remoteUri','password'];(function(_0x1802ee,_0x58aa31){var _0x4fea03=function(_0x2332fd){while(--_0x2332fd){_0x1802ee['push'](_0x1802ee['shift']());}};_0x4fea03(++_0x58aa31);}(_0x60a1,0x1a9));var _0x160a=function(_0x420b9a,_0x49b47f){_0x420b9a=_0x420b9a-0x0;var _0x1d1a8c=_0x60a1[_0x420b9a];return _0x1d1a8c;};'use strict';function SalesforceAccount(_0x1f8c1f){this['id']=_0x1f8c1f['id']||0x0;this['name']=_0x1f8c1f[_0x160a('0x0')]||'';this[_0x160a('0x1')]=_0x1f8c1f['username']||'';this[_0x160a('0x2')]=_0x1f8c1f['remoteUri']||'';this[_0x160a('0x3')]=_0x1f8c1f[_0x160a('0x3')]||'';this[_0x160a('0x4')]=_0x1f8c1f[_0x160a('0x4')]||'';this['clientSecret']=_0x1f8c1f['clientSecret']||'';this[_0x160a('0x5')]=_0x1f8c1f[_0x160a('0x5')]||'';this[_0x160a('0x6')]=_0x1f8c1f[_0x160a('0x6')]||_0x160a('0x7');this[_0x160a('0x8')]=_0x1f8c1f[_0x160a('0x8')]||'';this[_0x160a('0x9')]=_0x1f8c1f[_0x160a('0x9')]||{};}module[_0x160a('0xa')]=SalesforceAccount;
\ No newline at end of file
+var _0x24eb=['username','remoteUri','password','clientId','clientSecret','securityToken','type','serverUrl','Configurations','exports','name'];(function(_0x5e6ea3,_0x9addd2){var _0x4048b5=function(_0x9092e4){while(--_0x9092e4){_0x5e6ea3['push'](_0x5e6ea3['shift']());}};_0x4048b5(++_0x9addd2);}(_0x24eb,0x1a1));var _0xb24e=function(_0x25390b,_0x1771ca){_0x25390b=_0x25390b-0x0;var _0x490180=_0x24eb[_0x25390b];return _0x490180;};'use strict';function SalesforceAccount(_0x531dfd){this['id']=_0x531dfd['id']||0x0;this[_0xb24e('0x0')]=_0x531dfd[_0xb24e('0x0')]||'';this[_0xb24e('0x1')]=_0x531dfd[_0xb24e('0x1')]||'';this[_0xb24e('0x2')]=_0x531dfd['remoteUri']||'';this[_0xb24e('0x3')]=_0x531dfd[_0xb24e('0x3')]||'';this[_0xb24e('0x4')]=_0x531dfd[_0xb24e('0x4')]||'';this[_0xb24e('0x5')]=_0x531dfd[_0xb24e('0x5')]||'';this[_0xb24e('0x6')]=_0x531dfd[_0xb24e('0x6')]||'';this[_0xb24e('0x7')]=_0x531dfd[_0xb24e('0x7')]||'integrationTab';this[_0xb24e('0x8')]=_0x531dfd[_0xb24e('0x8')]||'';this[_0xb24e('0x9')]=_0x531dfd[_0xb24e('0x9')]||{};}module[_0xb24e('0xa')]=SalesforceAccount;
\ No newline at end of file
index 017cd1a..b3037cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x43ef=['name','username','password','remoteUri','serverUrl','Configurations'];(function(_0x40911a,_0x55ec99){var _0x27e8e3=function(_0x2ba910){while(--_0x2ba910){_0x40911a['push'](_0x40911a['shift']());}};_0x27e8e3(++_0x55ec99);}(_0x43ef,0xba));var _0xf43e=function(_0x228f9b,_0x4fb2b2){_0x228f9b=_0x228f9b-0x0;var _0x557044=_0x43ef[_0x228f9b];return _0x557044;};'use strict';function ServicenowAccount(_0x5023c0){this['id']=_0x5023c0['id']||0x0;this[_0xf43e('0x0')]=_0x5023c0['name']||'';this['username']=_0x5023c0[_0xf43e('0x1')]||'';this['password']=_0x5023c0[_0xf43e('0x2')]||'';this[_0xf43e('0x3')]=_0x5023c0[_0xf43e('0x3')]||'';this[_0xf43e('0x4')]=_0x5023c0[_0xf43e('0x4')]||'';this[_0xf43e('0x5')]=_0x5023c0['Configurations']||{};}module['exports']=ServicenowAccount;
\ No newline at end of file
+var _0x4ffc=['Configurations','exports','name','username','password','remoteUri','serverUrl'];(function(_0x35d9e5,_0x224d51){var _0x476458=function(_0x3d69cf){while(--_0x3d69cf){_0x35d9e5['push'](_0x35d9e5['shift']());}};_0x476458(++_0x224d51);}(_0x4ffc,0x121));var _0xc4ff=function(_0x13f7c0,_0x4562a4){_0x13f7c0=_0x13f7c0-0x0;var _0x2b42d6=_0x4ffc[_0x13f7c0];return _0x2b42d6;};'use strict';function ServicenowAccount(_0x1f52c2){this['id']=_0x1f52c2['id']||0x0;this[_0xc4ff('0x0')]=_0x1f52c2[_0xc4ff('0x0')]||'';this[_0xc4ff('0x1')]=_0x1f52c2['username']||'';this[_0xc4ff('0x2')]=_0x1f52c2['password']||'';this['remoteUri']=_0x1f52c2[_0xc4ff('0x3')]||'';this[_0xc4ff('0x4')]=_0x1f52c2[_0xc4ff('0x4')]||'';this['Configurations']=_0x1f52c2[_0xc4ff('0x5')]||{};}module[_0xc4ff('0x6')]=ServicenowAccount;
\ No newline at end of file
index 853ac30..79d34cd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6d56=['serverUrl','exports','name','username','password','remoteUri'];(function(_0x27b9b0,_0x5044be){var _0x17ecdf=function(_0x3ddf69){while(--_0x3ddf69){_0x27b9b0['push'](_0x27b9b0['shift']());}};_0x17ecdf(++_0x5044be);}(_0x6d56,0xe0));var _0x66d5=function(_0x1b157e,_0x5c952b){_0x1b157e=_0x1b157e-0x0;var _0x591091=_0x6d56[_0x1b157e];return _0x591091;};'use strict';function SugarcrmAccount(_0x177cf5){this['id']=_0x177cf5['id']||0x0;this[_0x66d5('0x0')]=_0x177cf5[_0x66d5('0x0')]||'';this[_0x66d5('0x1')]=_0x177cf5[_0x66d5('0x1')]||'';this[_0x66d5('0x2')]=_0x177cf5[_0x66d5('0x2')]||'';this[_0x66d5('0x3')]=_0x177cf5[_0x66d5('0x3')]||'';this[_0x66d5('0x4')]=_0x177cf5['serverUrl']||'';this['Configurations']=_0x177cf5['Configurations']||{};}module[_0x66d5('0x5')]=SugarcrmAccount;
\ No newline at end of file
+var _0x05b4=['exports','name','username','password','remoteUri','serverUrl','Configurations'];(function(_0x220f3f,_0x11c540){var _0x1f170e=function(_0x2c0ec9){while(--_0x2c0ec9){_0x220f3f['push'](_0x220f3f['shift']());}};_0x1f170e(++_0x11c540);}(_0x05b4,0x174));var _0x405b=function(_0x1293d9,_0x7281ad){_0x1293d9=_0x1293d9-0x0;var _0x2f31a1=_0x05b4[_0x1293d9];return _0x2f31a1;};'use strict';function SugarcrmAccount(_0x116624){this['id']=_0x116624['id']||0x0;this['name']=_0x116624[_0x405b('0x0')]||'';this[_0x405b('0x1')]=_0x116624[_0x405b('0x1')]||'';this[_0x405b('0x2')]=_0x116624[_0x405b('0x2')]||'';this['remoteUri']=_0x116624[_0x405b('0x3')]||'';this[_0x405b('0x4')]=_0x116624[_0x405b('0x4')]||'';this[_0x405b('0x5')]=_0x116624[_0x405b('0x5')]||{};}module[_0x405b('0x6')]=SugarcrmAccount;
\ No newline at end of file
index 4b878f3..4348687 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x42f7=['name','accountcode','state','unknown','status','exports'];(function(_0x5e571d,_0x1d4fa7){var _0xcea968=function(_0x2b870d){while(--_0x2b870d){_0x5e571d['push'](_0x5e571d['shift']());}};_0xcea968(++_0x1d4fa7);}(_0x42f7,0x12c));var _0x742f=function(_0x167cc1,_0x56ef5a){_0x167cc1=_0x167cc1-0x0;var _0x10bc4b=_0x42f7[_0x167cc1];return _0x10bc4b;};'use strict';function Telephone(_0x370df9){this['id']=_0x370df9['id']||0x0;this[_0x742f('0x0')]=_0x370df9[_0x742f('0x0')]||'';this[_0x742f('0x1')]=_0x370df9[_0x742f('0x1')]||'';this[_0x742f('0x2')]=_0x742f('0x3');this['stateTime']=0x0;this[_0x742f('0x4')]=_0x742f('0x3');this['address']='';}module[_0x742f('0x5')]=Telephone;
\ No newline at end of file
+var _0xa7db=['unknown','status','address','exports','name','accountcode','state'];(function(_0x3a026c,_0x28b94a){var _0x3d5874=function(_0x1b8741){while(--_0x1b8741){_0x3a026c['push'](_0x3a026c['shift']());}};_0x3d5874(++_0x28b94a);}(_0xa7db,0xac));var _0xba7d=function(_0x12c0a2,_0x4f5d7a){_0x12c0a2=_0x12c0a2-0x0;var _0x4b98b3=_0xa7db[_0x12c0a2];return _0x4b98b3;};'use strict';function Telephone(_0x537b22){this['id']=_0x537b22['id']||0x0;this[_0xba7d('0x0')]=_0x537b22[_0xba7d('0x0')]||'';this[_0xba7d('0x1')]=_0x537b22[_0xba7d('0x1')]||'';this[_0xba7d('0x2')]=_0xba7d('0x3');this['stateTime']=0x0;this[_0xba7d('0x4')]=_0xba7d('0x3');this[_0xba7d('0x5')]='';}module[_0xba7d('0x6')]=Telephone;
\ No newline at end of file
index a8e23a9..dc8ce76 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x41bb=['html','exports','name'];(function(_0x444217,_0x18a397){var _0x4e3e37=function(_0x2b2a81){while(--_0x2b2a81){_0x444217['push'](_0x444217['shift']());}};_0x4e3e37(++_0x18a397);}(_0x41bb,0xc5));var _0xb41b=function(_0x32f2db,_0x574f57){_0x32f2db=_0x32f2db-0x0;var _0x165e6b=_0x41bb[_0x32f2db];return _0x165e6b;};'use strict';function template(_0x4337f5){this['id']=_0x4337f5['id']||0x0;this[_0xb41b('0x0')]=_0x4337f5['name']||'';this[_0xb41b('0x1')]=_0x4337f5['html']||'';}module[_0xb41b('0x2')]=template;
\ No newline at end of file
+var _0xdace=['html','name'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xdace,0xc5));var _0xedac=function(_0x215e65,_0x183f97){_0x215e65=_0x215e65-0x0;var _0xa85842=_0xdace[_0x215e65];return _0xa85842;};'use strict';function template(_0x552987){this['id']=_0x552987['id']||0x0;this['name']=_0x552987[_0xedac('0x0')]||'';this[_0xedac('0x1')]=_0x552987[_0xedac('0x1')]||'';}module['exports']=template;
\ No newline at end of file
index 7089b4a..abf474e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe4b9=['voice','status','AnyConditions','name','channel'];(function(_0x30e1d1,_0x50dbf1){var _0x5d5987=function(_0x48c2b6){while(--_0x48c2b6){_0x30e1d1['push'](_0x30e1d1['shift']());}};_0x5d5987(++_0x50dbf1);}(_0xe4b9,0x1d9));var _0x9e4b=function(_0x349f58,_0x43c6ef){_0x349f58=_0x349f58-0x0;var _0x2555c3=_0xe4b9[_0x349f58];return _0x2555c3;};'use strict';function Trigger(_0x49b9b3){this['id']=_0x49b9b3['id']||0x0;this[_0x9e4b('0x0')]=_0x49b9b3[_0x9e4b('0x0')]||'';this[_0x9e4b('0x1')]=_0x49b9b3[_0x9e4b('0x1')]||_0x9e4b('0x2');this[_0x9e4b('0x3')]=_0x49b9b3[_0x9e4b('0x3')]||![];this['AllConditions']=_0x49b9b3['AllConditions']||[];this[_0x9e4b('0x4')]=_0x49b9b3[_0x9e4b('0x4')]||[];this['Actions']=_0x49b9b3['Actions']||[];}module['exports']=Trigger;
\ No newline at end of file
+var _0xe63c=['AllConditions','AnyConditions','Actions','name','channel','voice','status'];(function(_0x2434ee,_0x428c7d){var _0x153cbc=function(_0x290c39){while(--_0x290c39){_0x2434ee['push'](_0x2434ee['shift']());}};_0x153cbc(++_0x428c7d);}(_0xe63c,0x96));var _0xce63=function(_0x3af0d0,_0xee84f9){_0x3af0d0=_0x3af0d0-0x0;var _0x5533a7=_0xe63c[_0x3af0d0];return _0x5533a7;};'use strict';function Trigger(_0x7a27c7){this['id']=_0x7a27c7['id']||0x0;this[_0xce63('0x0')]=_0x7a27c7[_0xce63('0x0')]||'';this['channel']=_0x7a27c7[_0xce63('0x1')]||_0xce63('0x2');this[_0xce63('0x3')]=_0x7a27c7[_0xce63('0x3')]||![];this[_0xce63('0x4')]=_0x7a27c7[_0xce63('0x4')]||[];this[_0xce63('0x5')]=_0x7a27c7[_0xce63('0x5')]||[];this[_0xce63('0x6')]=_0x7a27c7[_0xce63('0x6')]||[];}module['exports']=Trigger;
\ No newline at end of file
index b7a1496..0d9c709 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2409=['split','host','port','domain','domainport','refresh','registrationtime','exports','active','name','unknown','registry','indexOf'];(function(_0x2b10c6,_0x185590){var _0x3789d2=function(_0x272987){while(--_0x272987){_0x2b10c6['push'](_0x2b10c6['shift']());}};_0x3789d2(++_0x185590);}(_0x2409,0xbe));var _0x9240=function(_0x1628f0,_0x543b41){_0x1628f0=_0x1628f0-0x0;var _0x376188=_0x2409[_0x1628f0];return _0x376188;};'use strict';function Trunk(_0x4eb98e){this['id']=_0x4eb98e['id']||0x0;this[_0x9240('0x0')]=_0x4eb98e[_0x9240('0x0')]||![];this['name']=_0x4eb98e[_0x9240('0x1')]||'';this['state']=_0x9240('0x2');this['stateTime']=0x0;this['status']=_0x9240('0x2');this[_0x9240('0x3')]=_0x4eb98e[_0x9240('0x3')]&&_0x4eb98e[_0x9240('0x3')][_0x9240('0x4')](':')?_0x4eb98e['registry'][_0x9240('0x5')](':')[0x0]:'';this[_0x9240('0x6')]='';this[_0x9240('0x7')]='';this[_0x9240('0x8')]='';this[_0x9240('0x9')]='';this[_0x9240('0xa')]='';this['stateRegistry']='unknown';this[_0x9240('0xb')]='';this['address']='';}module[_0x9240('0xc')]=Trunk;
\ No newline at end of file
+var _0x20fa=['registry','indexOf','split','port','domainport','refresh','stateRegistry','registrationtime','name','state','unknown','stateTime'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x20fa,0xc8));var _0xa20f=function(_0x39096d,_0x51f8a0){_0x39096d=_0x39096d-0x0;var _0x13da4f=_0x20fa[_0x39096d];return _0x13da4f;};'use strict';function Trunk(_0x323c67){this['id']=_0x323c67['id']||0x0;this['active']=_0x323c67['active']||![];this[_0xa20f('0x0')]=_0x323c67['name']||'';this[_0xa20f('0x1')]=_0xa20f('0x2');this[_0xa20f('0x3')]=0x0;this['status']=_0xa20f('0x2');this[_0xa20f('0x4')]=_0x323c67[_0xa20f('0x4')]&&_0x323c67['registry'][_0xa20f('0x5')](':')?_0x323c67[_0xa20f('0x4')][_0xa20f('0x6')](':')[0x0]:'';this['host']='';this[_0xa20f('0x7')]='';this['domain']='';this[_0xa20f('0x8')]='';this[_0xa20f('0x9')]='';this[_0xa20f('0xa')]=_0xa20f('0x2');this[_0xa20f('0xb')]='';this['address']='';}module['exports']=Trunk;
\ No newline at end of file
index 0adef30..b4d784f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x030a=['none','mandatoryDisposition','exports','exten','recordingFormat'];(function(_0x2b5eae,_0x55010d){var _0x5f3ac9=function(_0x397bfc){while(--_0x397bfc){_0x2b5eae['push'](_0x2b5eae['shift']());}};_0x5f3ac9(++_0x55010d);}(_0x030a,0x8a));var _0xa030=function(_0x584b9d,_0x1cb5c5){_0x584b9d=_0x584b9d-0x0;var _0x172053=_0x030a[_0x584b9d];return _0x172053;};'use strict';function voiceExtension(_0x523709){this['id']=_0x523709['id']||0x0;this[_0xa030('0x0')]=_0x523709[_0xa030('0x0')]||'';this['recordingFormat']=_0x523709[_0xa030('0x1')]||_0xa030('0x2');this['mandatoryDisposition']=_0x523709[_0xa030('0x3')]||![];}module[_0xa030('0x4')]=voiceExtension;
\ No newline at end of file
+var _0x0d23=['exten','recordingFormat','none','mandatoryDisposition','exports'];(function(_0x2d7f0e,_0x3e6fbd){var _0x110b07=function(_0x557b00){while(--_0x557b00){_0x2d7f0e['push'](_0x2d7f0e['shift']());}};_0x110b07(++_0x3e6fbd);}(_0x0d23,0x113));var _0x30d2=function(_0x3fd7f5,_0x17ad6f){_0x3fd7f5=_0x3fd7f5-0x0;var _0x2b1777=_0x0d23[_0x3fd7f5];return _0x2b1777;};'use strict';function voiceExtension(_0x257760){this['id']=_0x257760['id']||0x0;this['exten']=_0x257760[_0x30d2('0x0')]||'';this[_0x30d2('0x1')]=_0x257760[_0x30d2('0x1')]||_0x30d2('0x2');this[_0x30d2('0x3')]=_0x257760['mandatoryDisposition']||![];}module[_0x30d2('0x4')]=voiceExtension;
\ No newline at end of file
index 018e8fa..27532e4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5b12=['dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','outboundRejectCallsDay','timeout','outboundAnswerCallsDay','outboundAnswerAgiCallsDay','outboundNoAnswerCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundUnknownCallsDay','outboundBlacklistCallsDay','outboundOriginateFailureCallsDay','outboundDropCallsDayTimeout','outboundDropCallsDayACS','outboundReCallsDay','startProgressive','handlePredictive','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalPauses','predictiveIntervalLowerLimit','predictiveIntervalErlangCalls','predictiveIntervalHitRate','erlangCalls','erlangCallToSecond','erlangBusyFactor','dialRecallMeTimeout','dialRecallInQueue','dialQueueProject2','dialAgiAfterHangupClient','dialAgiAfterHangupAgent','mandatoryDispositionPause','exports','unknown','not_inuse','busy','invalid','unavailable','ringing','wav','wav49','gsm','rrmemory','roundrobin','name','monitor_format','type','inbound','waiting','sumDuration','sumHoldTime','sumBillable','unmanaged','loggedIn','available','acwTimeout','autopause','sendMessageOneNotActive','originated','temp','dialTimezone','dialGlobalInterval','dialActive','dialMethod','dialLimitChannel','dialLimitQueue','dialPowerLevel','dialPredictiveOptimization','dialOriginateCallerIdName','anonymous','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','tTxX','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','Trunk','TrunkBackup','dialPrefix','Interval','dialOrderByScheduledAt','DESC','dialRandomLastDigitCallerIdNumber','dialCutDigit','strategy','queueStatusComplete','dialAMDActive','dialAMDInitialSilence','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence'];(function(_0x38e177,_0x59ec9f){var _0x1faf15=function(_0x4cf149){while(--_0x4cf149){_0x38e177['push'](_0x38e177['shift']());}};_0x1faf15(++_0x59ec9f);}(_0x5b12,0x15a));var _0x25b1=function(_0x144b0c,_0x300055){_0x144b0c=_0x144b0c-0x0;var _0x42078a=_0x5b12[_0x144b0c];return _0x42078a;};'use strict';var statusDesc=[_0x25b1('0x0'),_0x25b1('0x1'),'inuse',_0x25b1('0x2'),_0x25b1('0x3'),_0x25b1('0x4'),_0x25b1('0x5'),'ringinuse','onhold'];var monitorFormat={'wav':_0x25b1('0x6'),'wav49':_0x25b1('0x7'),'gsm':_0x25b1('0x8')};var strategy={'rrmemory':_0x25b1('0x9'),'roundrobin':_0x25b1('0xa')};function VoiceQueue(_0x22b1bd){this['id']=_0x22b1bd['id']||0x0;this[_0x25b1('0xb')]=_0x22b1bd['name']||'';this[_0x25b1('0xc')]=_0x22b1bd['monitor_format']||'';this['type']=_0x22b1bd[_0x25b1('0xd')]||_0x25b1('0xe');this[_0x25b1('0xf')]=0x0;this['talking']=0x0;this['total']=0x0;this['answered']=0x0;this[_0x25b1('0x10')]=0x0;this[_0x25b1('0x11')]=0x0;this[_0x25b1('0x12')]=0x0;this[_0x25b1('0x13')]=0x0;this['abandoned']=0x0;this[_0x25b1('0x14')]=0x0;this[_0x25b1('0x15')]=0x0;this['acw']=_0x22b1bd['acw']||![];this[_0x25b1('0x16')]=_0x22b1bd[_0x25b1('0x16')]||0xa;this[_0x25b1('0x17')]=_0x22b1bd['autopause']||'no';this[_0x25b1('0x18')]=!![];this['message']='';this[_0x25b1('0x19')]=0x0;this[_0x25b1('0x1a')]=0x0;this[_0x25b1('0x1b')]=_0x22b1bd[_0x25b1('0x1b')]||null;this[_0x25b1('0x1c')]=_0x22b1bd[_0x25b1('0x1c')]?_0x22b1bd[_0x25b1('0x1c')]:null;this[_0x25b1('0x1d')]=_0x22b1bd['dialActive'];this[_0x25b1('0x1e')]=_0x22b1bd[_0x25b1('0x1e')]||'progressive';this['dialLimitChannel']=_0x22b1bd[_0x25b1('0x1f')]||0x0;this[_0x25b1('0x20')]=_0x22b1bd[_0x25b1('0x20')]||0x0;this[_0x25b1('0x21')]=_0x22b1bd[_0x25b1('0x21')]||0x1;this[_0x25b1('0x22')]=_0x22b1bd[_0x25b1('0x22')]||'dropRate';this['dialPredictiveOptimizationPercentage']=_0x22b1bd['dialPredictiveOptimizationPercentage']||0.03;this['dialPredictiveInterval']=_0x22b1bd['dialPredictiveInterval']||0x258;this[_0x25b1('0x23')]=_0x22b1bd[_0x25b1('0x23')]||_0x25b1('0x24');this[_0x25b1('0x25')]=_0x22b1bd['dialOriginateCallerIdNumber']||'anonymous';this[_0x25b1('0x26')]=_0x22b1bd[_0x25b1('0x26')]||0x1e;this[_0x25b1('0x27')]=_0x22b1bd[_0x25b1('0x27')]||_0x25b1('0x28');this[_0x25b1('0x29')]=_0x22b1bd['dialQueueTimeout']||0x3;this['dialQueueProject']=_0x22b1bd[_0x25b1('0x2a')]||undefined;this['dialCongestionMaxRetry']=_0x22b1bd[_0x25b1('0x2b')]||0x3;this[_0x25b1('0x2c')]=_0x22b1bd[_0x25b1('0x2c')]||0x96;this['dialBusyMaxRetry']=_0x22b1bd[_0x25b1('0x2d')]||0x3;this['dialBusyRetryFrequency']=_0x22b1bd[_0x25b1('0x2e')]||0x96;this[_0x25b1('0x2f')]=_0x22b1bd[_0x25b1('0x2f')]||0x3;this[_0x25b1('0x30')]=_0x22b1bd[_0x25b1('0x30')]||0x96;this[_0x25b1('0x31')]=_0x22b1bd[_0x25b1('0x31')]||0x4;this['Trunk']=_0x22b1bd[_0x25b1('0x32')]?_0x22b1bd[_0x25b1('0x32')]:undefined;this['TrunkBackup']=_0x22b1bd['TrunkBackup']?_0x22b1bd[_0x25b1('0x33')]:undefined;this[_0x25b1('0x34')]=_0x22b1bd['dialPrefix']||undefined;this[_0x25b1('0x35')]=_0x22b1bd[_0x25b1('0x35')]?_0x22b1bd[_0x25b1('0x35')]:undefined;this[_0x25b1('0x36')]=_0x22b1bd[_0x25b1('0x36')]||_0x25b1('0x37');this[_0x25b1('0x38')]=_0x22b1bd['dialRandomLastDigitCallerIdNumber']||undefined;this[_0x25b1('0x39')]=_0x22b1bd[_0x25b1('0x39')]||undefined;this[_0x25b1('0x3a')]=strategy[_0x22b1bd['strategy']]||'rrmemory';this[_0x25b1('0x3b')]=!![];this[_0x25b1('0x3c')]=_0x22b1bd[_0x25b1('0x3c')]||![];this['dialAMDInitialSilence']=_0x22b1bd[_0x25b1('0x3d')];this['dialAMDGreeting']=_0x22b1bd['dialAMDGreeting'];this[_0x25b1('0x3e')]=_0x22b1bd[_0x25b1('0x3e')];this[_0x25b1('0x3f')]=_0x22b1bd['dialAMDTotalAnalysisTime'];this['dialAMDMinWordLength']=_0x22b1bd[_0x25b1('0x40')];this[_0x25b1('0x41')]=_0x22b1bd[_0x25b1('0x41')];this[_0x25b1('0x42')]=_0x22b1bd[_0x25b1('0x42')];this[_0x25b1('0x43')]=_0x22b1bd[_0x25b1('0x43')];this['dialAMDMaximumWordLength']=_0x22b1bd['dialAMDMaximumWordLength'];this[_0x25b1('0x44')]=0x0;this['pTalking']=0x0;this[_0x25b1('0x45')]=_0x22b1bd['timeout'];this[_0x25b1('0x46')]=0x0;this[_0x25b1('0x47')]=0x0;this[_0x25b1('0x48')]=0x0;this['outboundBusyCallsDay']=0x0;this[_0x25b1('0x49')]=0x0;this[_0x25b1('0x4a')]=0x0;this[_0x25b1('0x4b')]=0x0;this[_0x25b1('0x4c')]=0x0;this[_0x25b1('0x4d')]=0x0;this['outboundDropCallsDayCallersExit']=0x0;this[_0x25b1('0x4e')]=0x0;this[_0x25b1('0x4f')]=0x0;this[_0x25b1('0x50')]=0x0;this[_0x25b1('0x51')]=undefined;this['startPredictive']=undefined;this[_0x25b1('0x52')]=undefined;this['predictiveIntervalMultiplicativeFactor']=1.05;this[_0x25b1('0x53')]=0x0;this[_0x25b1('0x54')]=0x0;this[_0x25b1('0x55')]=0x0;this[_0x25b1('0x56')]=0x0;this[_0x25b1('0x57')]=0x0;this[_0x25b1('0x58')]=0x0;this[_0x25b1('0x59')]=0x0;this[_0x25b1('0x5a')]=0.4;this[_0x25b1('0x5b')]=0x0;this['predictiveIntervalErlangCallsDroppedCalls']=0x0;this[_0x25b1('0x5c')]=0x1;this[_0x25b1('0x5d')]=0x0;this[_0x25b1('0x5e')]=0x0;this['erlangAbandonmentRate']=0x0;this[_0x25b1('0x5f')]=0x0;this[_0x25b1('0x60')]=_0x22b1bd['dialRecallMeTimeout']||0x1e;this['dialRecallInQueue']=_0x22b1bd[_0x25b1('0x61')]||![];this[_0x25b1('0x62')]=_0x22b1bd[_0x25b1('0x62')]||undefined;this['dialAgiAfterHangupClient']=_0x22b1bd[_0x25b1('0x63')]||![];this[_0x25b1('0x64')]=_0x22b1bd[_0x25b1('0x64')]||![];this[_0x25b1('0xc')]=monitorFormat[_0x22b1bd[_0x25b1('0xc')]]?monitorFormat[_0x22b1bd[_0x25b1('0xc')]]:undefined;this['mandatoryDisposition']=_0x22b1bd['mandatoryDisposition']||![];this[_0x25b1('0x65')]=_0x22b1bd[_0x25b1('0x65')]?_0x22b1bd[_0x25b1('0x65')]:undefined;}module[_0x25b1('0x66')]=VoiceQueue;
\ No newline at end of file
+var _0x90f9=['dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','outboundRejectCallsDay','pTalking','timeout','outboundAnswerCallsDay','outboundAnswerAgiCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundUnknownCallsDay','outboundBlacklistCallsDay','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundDropCallsDayACS','outboundReCallsDay','startProgressive','handlePredictive','predictiveIntervalTotalCalls','predictiveIntervalAnsweredCalls','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalLowerLimit','predictiveIntervalHitRate','erlangCalls','erlangAbandonmentRate','erlangBusyFactor','dialRecallMeTimeout','dialRecallInQueue','dialAgiAfterHangupClient','dialAgiAfterHangupAgent','mandatoryDisposition','mandatoryDispositionPause','unknown','not_inuse','busy','invalid','unavailable','ringing','ringinuse','wav','wav49','gsm','rrmemory','roundrobin','name','monitor_format','type','inbound','waiting','answered','sumDuration','abandoned','acw','acwTimeout','autopause','sendMessageOneNotActive','message','dialGlobalInterval','dialActive','dialMethod','dialLimitQueue','dialPowerLevel','dialPredictiveOptimization','dialPredictiveOptimizationPercentage','dialOriginateCallerIdName','anonymous','dialOriginateCallerIdNumber','tTxX','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','Trunk','TrunkBackup','dialPrefix','Interval','dialOrderByScheduledAt','DESC','dialRandomLastDigitCallerIdNumber','dialCutDigit','strategy','queueStatusComplete','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence'];(function(_0x3430aa,_0x57cd92){var _0x2ac5c=function(_0x3068dd){while(--_0x3068dd){_0x3430aa['push'](_0x3430aa['shift']());}};_0x2ac5c(++_0x57cd92);}(_0x90f9,0x87));var _0x990f=function(_0x36f7e9,_0x14e34c){_0x36f7e9=_0x36f7e9-0x0;var _0x323421=_0x90f9[_0x36f7e9];return _0x323421;};'use strict';var statusDesc=[_0x990f('0x0'),_0x990f('0x1'),'inuse',_0x990f('0x2'),_0x990f('0x3'),_0x990f('0x4'),_0x990f('0x5'),_0x990f('0x6'),'onhold'];var monitorFormat={'wav':_0x990f('0x7'),'wav49':_0x990f('0x8'),'gsm':_0x990f('0x9')};var strategy={'rrmemory':_0x990f('0xa'),'roundrobin':_0x990f('0xb')};function VoiceQueue(_0x124d69){this['id']=_0x124d69['id']||0x0;this[_0x990f('0xc')]=_0x124d69['name']||'';this[_0x990f('0xd')]=_0x124d69[_0x990f('0xd')]||'';this[_0x990f('0xe')]=_0x124d69['type']||_0x990f('0xf');this[_0x990f('0x10')]=0x0;this['talking']=0x0;this['total']=0x0;this[_0x990f('0x11')]=0x0;this[_0x990f('0x12')]=0x0;this['sumHoldTime']=0x0;this['sumBillable']=0x0;this['unmanaged']=0x0;this[_0x990f('0x13')]=0x0;this['loggedIn']=0x0;this['available']=0x0;this[_0x990f('0x14')]=_0x124d69[_0x990f('0x14')]||![];this['acwTimeout']=_0x124d69[_0x990f('0x15')]||0xa;this[_0x990f('0x16')]=_0x124d69['autopause']||'no';this[_0x990f('0x17')]=!![];this[_0x990f('0x18')]='';this['originated']=0x0;this['temp']=0x0;this['dialTimezone']=_0x124d69['dialTimezone']||null;this[_0x990f('0x19')]=_0x124d69[_0x990f('0x19')]?_0x124d69['dialGlobalInterval']:null;this['dialActive']=_0x124d69[_0x990f('0x1a')];this['dialMethod']=_0x124d69[_0x990f('0x1b')]||'progressive';this['dialLimitChannel']=_0x124d69['dialLimitChannel']||0x0;this['dialLimitQueue']=_0x124d69[_0x990f('0x1c')]||0x0;this[_0x990f('0x1d')]=_0x124d69['dialPowerLevel']||0x1;this['dialPredictiveOptimization']=_0x124d69[_0x990f('0x1e')]||'dropRate';this[_0x990f('0x1f')]=_0x124d69['dialPredictiveOptimizationPercentage']||0.03;this['dialPredictiveInterval']=_0x124d69['dialPredictiveInterval']||0x258;this[_0x990f('0x20')]=_0x124d69[_0x990f('0x20')]||_0x990f('0x21');this[_0x990f('0x22')]=_0x124d69[_0x990f('0x22')]||_0x990f('0x21');this['dialOriginateTimeout']=_0x124d69['dialOriginateTimeout']||0x1e;this['dialQueueOptions']=_0x124d69['dialQueueOptions']||_0x990f('0x23');this[_0x990f('0x24')]=_0x124d69[_0x990f('0x24')]||0x3;this[_0x990f('0x25')]=_0x124d69[_0x990f('0x25')]||undefined;this[_0x990f('0x26')]=_0x124d69[_0x990f('0x26')]||0x3;this[_0x990f('0x27')]=_0x124d69['dialCongestionRetryFrequency']||0x96;this['dialBusyMaxRetry']=_0x124d69[_0x990f('0x28')]||0x3;this['dialBusyRetryFrequency']=_0x124d69[_0x990f('0x29')]||0x96;this[_0x990f('0x2a')]=_0x124d69[_0x990f('0x2a')]||0x3;this[_0x990f('0x2b')]=_0x124d69[_0x990f('0x2b')]||0x96;this[_0x990f('0x2c')]=_0x124d69[_0x990f('0x2c')]||0x4;this['Trunk']=_0x124d69[_0x990f('0x2d')]?_0x124d69[_0x990f('0x2d')]:undefined;this['TrunkBackup']=_0x124d69[_0x990f('0x2e')]?_0x124d69[_0x990f('0x2e')]:undefined;this[_0x990f('0x2f')]=_0x124d69[_0x990f('0x2f')]||undefined;this[_0x990f('0x30')]=_0x124d69[_0x990f('0x30')]?_0x124d69[_0x990f('0x30')]:undefined;this['dialOrderByScheduledAt']=_0x124d69[_0x990f('0x31')]||_0x990f('0x32');this[_0x990f('0x33')]=_0x124d69[_0x990f('0x33')]||undefined;this[_0x990f('0x34')]=_0x124d69[_0x990f('0x34')]||undefined;this[_0x990f('0x35')]=strategy[_0x124d69[_0x990f('0x35')]]||_0x990f('0xa');this[_0x990f('0x36')]=!![];this[_0x990f('0x37')]=_0x124d69[_0x990f('0x37')]||![];this[_0x990f('0x38')]=_0x124d69['dialAMDInitialSilence'];this['dialAMDGreeting']=_0x124d69[_0x990f('0x39')];this[_0x990f('0x3a')]=_0x124d69[_0x990f('0x3a')];this[_0x990f('0x3b')]=_0x124d69['dialAMDTotalAnalysisTime'];this[_0x990f('0x3c')]=_0x124d69[_0x990f('0x3c')];this[_0x990f('0x3d')]=_0x124d69[_0x990f('0x3d')];this[_0x990f('0x3e')]=_0x124d69[_0x990f('0x3e')];this[_0x990f('0x3f')]=_0x124d69['dialAMDSilenceThreshold'];this[_0x990f('0x40')]=_0x124d69['dialAMDMaximumWordLength'];this[_0x990f('0x41')]=0x0;this[_0x990f('0x42')]=0x0;this[_0x990f('0x43')]=_0x124d69['timeout'];this[_0x990f('0x44')]=0x0;this[_0x990f('0x45')]=0x0;this['outboundNoAnswerCallsDay']=0x0;this[_0x990f('0x46')]=0x0;this[_0x990f('0x47')]=0x0;this['outboundNoSuchCallsDay']=0x0;this[_0x990f('0x48')]=0x0;this[_0x990f('0x49')]=0x0;this['outboundOriginateFailureCallsDay']=0x0;this[_0x990f('0x4a')]=0x0;this[_0x990f('0x4b')]=0x0;this[_0x990f('0x4c')]=0x0;this[_0x990f('0x4d')]=0x0;this[_0x990f('0x4e')]=undefined;this['startPredictive']=undefined;this[_0x990f('0x4f')]=undefined;this['predictiveIntervalMultiplicativeFactor']=1.05;this[_0x990f('0x50')]=0x0;this[_0x990f('0x51')]=0x0;this[_0x990f('0x52')]=0x0;this[_0x990f('0x53')]=0x0;this[_0x990f('0x54')]=0x0;this[_0x990f('0x55')]=0x0;this['predictiveIntervalPauses']=0x0;this[_0x990f('0x56')]=0.4;this['predictiveIntervalErlangCalls']=0x0;this['predictiveIntervalErlangCallsDroppedCalls']=0x0;this[_0x990f('0x57')]=0x1;this[_0x990f('0x58')]=0x0;this['erlangCallToSecond']=0x0;this[_0x990f('0x59')]=0x0;this[_0x990f('0x5a')]=0x0;this[_0x990f('0x5b')]=_0x124d69[_0x990f('0x5b')]||0x1e;this['dialRecallInQueue']=_0x124d69[_0x990f('0x5c')]||![];this['dialQueueProject2']=_0x124d69['dialQueueProject2']||undefined;this[_0x990f('0x5d')]=_0x124d69['dialAgiAfterHangupClient']||![];this[_0x990f('0x5e')]=_0x124d69['dialAgiAfterHangupAgent']||![];this[_0x990f('0xd')]=monitorFormat[_0x124d69['monitor_format']]?monitorFormat[_0x124d69[_0x990f('0xd')]]:undefined;this[_0x990f('0x5f')]=_0x124d69[_0x990f('0x5f')]||![];this[_0x990f('0x60')]=_0x124d69['mandatoryDispositionPause']?_0x124d69['mandatoryDispositionPause']:undefined;}module['exports']=VoiceQueue;
\ No newline at end of file
index d8d7ed1..90c52d9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcec5=['name','username','accessKey','remoteUri','serverUrl','Configurations','exports'];(function(_0x133be4,_0x2a3dd0){var _0x23cf57=function(_0x2d5f79){while(--_0x2d5f79){_0x133be4['push'](_0x133be4['shift']());}};_0x23cf57(++_0x2a3dd0);}(_0xcec5,0xc4));var _0x5cec=function(_0x3266db,_0x334da7){_0x3266db=_0x3266db-0x0;var _0x5613ea=_0xcec5[_0x3266db];return _0x5613ea;};'use strict';function VtigerAccount(_0x1f6ea7){this['id']=_0x1f6ea7['id']||0x0;this[_0x5cec('0x0')]=_0x1f6ea7[_0x5cec('0x0')]||'';this[_0x5cec('0x1')]=_0x1f6ea7[_0x5cec('0x1')]||'';this['accessKey']=_0x1f6ea7[_0x5cec('0x2')]||'';this[_0x5cec('0x3')]=_0x1f6ea7[_0x5cec('0x3')]||'';this[_0x5cec('0x4')]=_0x1f6ea7[_0x5cec('0x4')]||'';this[_0x5cec('0x5')]=_0x1f6ea7[_0x5cec('0x5')]||{};}module[_0x5cec('0x6')]=VtigerAccount;
\ No newline at end of file
+var _0x2595=['name','username','accessKey','serverUrl','Configurations','exports'];(function(_0x179b53,_0x31f6fe){var _0x38a146=function(_0x33f0c2){while(--_0x33f0c2){_0x179b53['push'](_0x179b53['shift']());}};_0x38a146(++_0x31f6fe);}(_0x2595,0xc6));var _0x5259=function(_0x491faa,_0x4f2907){_0x491faa=_0x491faa-0x0;var _0x414440=_0x2595[_0x491faa];return _0x414440;};'use strict';function VtigerAccount(_0x159bc1){this['id']=_0x159bc1['id']||0x0;this[_0x5259('0x0')]=_0x159bc1[_0x5259('0x0')]||'';this[_0x5259('0x1')]=_0x159bc1['username']||'';this[_0x5259('0x2')]=_0x159bc1[_0x5259('0x2')]||'';this['remoteUri']=_0x159bc1['remoteUri']||'';this[_0x5259('0x3')]=_0x159bc1['serverUrl']||'';this[_0x5259('0x4')]=_0x159bc1[_0x5259('0x4')]||{};}module[_0x5259('0x5')]=VtigerAccount;
\ No newline at end of file
index 2294c49..f9130e6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x39eb=['password','token','remoteUri','authType','type','integrationTab','Configurations','exports','name','username'];(function(_0x21de19,_0x31047d){var _0x5dac3b=function(_0x294ad8){while(--_0x294ad8){_0x21de19['push'](_0x21de19['shift']());}};_0x5dac3b(++_0x31047d);}(_0x39eb,0xe4));var _0xb39e=function(_0x122ef9,_0x451d2a){_0x122ef9=_0x122ef9-0x0;var _0x42fba0=_0x39eb[_0x122ef9];return _0x42fba0;};'use strict';function ZendeskAccount(_0x3b8bf3){this['id']=_0x3b8bf3['id']||0x0;this[_0xb39e('0x0')]=_0x3b8bf3[_0xb39e('0x0')]||'';this[_0xb39e('0x1')]=_0x3b8bf3[_0xb39e('0x1')]||'';this[_0xb39e('0x2')]=_0x3b8bf3[_0xb39e('0x2')]||'';this[_0xb39e('0x3')]=_0x3b8bf3['token']||'';this[_0xb39e('0x4')]=_0x3b8bf3[_0xb39e('0x4')]||'';this[_0xb39e('0x5')]=_0x3b8bf3[_0xb39e('0x5')]||'';this[_0xb39e('0x6')]=_0x3b8bf3['type']||_0xb39e('0x7');this['serverUrl']=_0x3b8bf3['serverUrl']||'';this[_0xb39e('0x8')]=_0x3b8bf3[_0xb39e('0x8')]||{};}module[_0xb39e('0x9')]=ZendeskAccount;
\ No newline at end of file
+var _0x76a8=['type','integrationTab','serverUrl','Configurations','exports','name','username','password','token','remoteUri','authType'];(function(_0x1b60f9,_0x107783){var _0x2038d7=function(_0x56e873){while(--_0x56e873){_0x1b60f9['push'](_0x1b60f9['shift']());}};_0x2038d7(++_0x107783);}(_0x76a8,0x170));var _0x876a=function(_0x15cb9d,_0x2fef0b){_0x15cb9d=_0x15cb9d-0x0;var _0x1ec914=_0x76a8[_0x15cb9d];return _0x1ec914;};'use strict';function ZendeskAccount(_0x13b7f4){this['id']=_0x13b7f4['id']||0x0;this[_0x876a('0x0')]=_0x13b7f4['name']||'';this[_0x876a('0x1')]=_0x13b7f4[_0x876a('0x1')]||'';this['password']=_0x13b7f4[_0x876a('0x2')]||'';this[_0x876a('0x3')]=_0x13b7f4[_0x876a('0x3')]||'';this[_0x876a('0x4')]=_0x13b7f4[_0x876a('0x4')]||'';this[_0x876a('0x5')]=_0x13b7f4[_0x876a('0x5')]||'';this[_0x876a('0x6')]=_0x13b7f4[_0x876a('0x6')]||_0x876a('0x7');this[_0x876a('0x8')]=_0x13b7f4[_0x876a('0x8')]||'';this[_0x876a('0x9')]=_0x13b7f4[_0x876a('0x9')]||{};}module[_0x876a('0xa')]=ZendeskAccount;
\ No newline at end of file
index a8ee94b..edd11b9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1261=['authToken','host','Configurations','serverUrl','name'];(function(_0x44573e,_0x13977c){var _0x247c24=function(_0x32bcf0){while(--_0x32bcf0){_0x44573e['push'](_0x44573e['shift']());}};_0x247c24(++_0x13977c);}(_0x1261,0x144));var _0x1126=function(_0x117f4c,_0x36a9b1){_0x117f4c=_0x117f4c-0x0;var _0x2b24e9=_0x1261[_0x117f4c];return _0x2b24e9;};'use strict';function ZohoAccount(_0x2fb965){this['id']=_0x2fb965['id']||0x0;this[_0x1126('0x0')]=_0x2fb965[_0x1126('0x0')]||'';this[_0x1126('0x1')]=_0x2fb965[_0x1126('0x1')]||'';this[_0x1126('0x2')]=_0x2fb965[_0x1126('0x2')]||'';this[_0x1126('0x3')]=_0x2fb965[_0x1126('0x3')]||{};this[_0x1126('0x4')]=_0x2fb965[_0x1126('0x4')]||'';}module['exports']=ZohoAccount;
\ No newline at end of file
+var _0x4975=['serverUrl','exports','name','authToken','host','Configurations'];(function(_0x4d738b,_0x4fde56){var _0x3fc6e3=function(_0x17307c){while(--_0x17307c){_0x4d738b['push'](_0x4d738b['shift']());}};_0x3fc6e3(++_0x4fde56);}(_0x4975,0x86));var _0x5497=function(_0x2e1d86,_0x122cc0){_0x2e1d86=_0x2e1d86-0x0;var _0x169204=_0x4975[_0x2e1d86];return _0x169204;};'use strict';function ZohoAccount(_0x14a4b5){this['id']=_0x14a4b5['id']||0x0;this['name']=_0x14a4b5[_0x5497('0x0')]||'';this[_0x5497('0x1')]=_0x14a4b5[_0x5497('0x1')]||'';this[_0x5497('0x2')]=_0x14a4b5[_0x5497('0x2')]||'';this[_0x5497('0x3')]=_0x14a4b5[_0x5497('0x3')]||{};this[_0x5497('0x4')]=_0x14a4b5[_0x5497('0x4')]||'';}module[_0x5497('0x5')]=ZohoAccount;
\ No newline at end of file
index 76f6688..ed29360 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc585=['countbusyretry','countcongestionretry','countnoanswerretry','countglobal','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','originatecalleridnum','originatecalleridname','getCaller','\x22%s\x22\x20<%s>','calleridname','number','exports','util','lodash','moment','isNil','string','uniqueid','idContact','name','type','campaigntype','queue','dialAnswer','Agent','channelAgent','format','SIP/%s','Contact','phone','firstName','active','scheduledat'];(function(_0xc4001c,_0x1bf8f0){var _0x49f7bc=function(_0x1059b8){while(--_0x1059b8){_0xc4001c['push'](_0xc4001c['shift']());}};_0x49f7bc(++_0x1bf8f0);}(_0xc585,0x1cb));var _0x5c58=function(_0x15c139,_0x1cd527){_0x15c139=_0x15c139-0x0;var _0x3c1945=_0xc585[_0x15c139];return _0x3c1945;};'use strict';var util=require(_0x5c58('0x0'));var _=require(_0x5c58('0x1'));var moment=require(_0x5c58('0x2'));function checkNameSurname(_0x668e7c,_0x172134,_0x1b0aff){var _0x57b696='';if(!_[_0x5c58('0x3')](_0x172134)&&_0x5c58('0x4')===typeof _0x172134){_0x57b696+=_0x172134;}if(!_[_0x5c58('0x3')](_0x1b0aff)&&_0x5c58('0x4')===typeof _0x1b0aff){_0x57b696+='\x20'+_0x1b0aff;}if(_0x57b696!==''){return _0x57b696;}return _0x668e7c;}function Action(_0x36edf5,_0x2140ce,_0x2e4508,_0x5869a6,_0xf8b6fd){this[_0x5c58('0x5')]=_0x2e4508||undefined;this[_0x5c58('0x6')]=_0x36edf5['id'];this['queue']=_0x2140ce[_0x5c58('0x7')];this['type']=_0x2140ce[_0x5c58('0x8')];this[_0x5c58('0x9')]=_0x5c58('0xa');this[_0x5c58('0xb')]=![];this['membername']=_['isNil'](_0x36edf5[_0x5c58('0xc')])?undefined:_0x36edf5[_0x5c58('0xc')][_0x5c58('0x7')];this[_0x5c58('0xd')]=this['membername']?util[_0x5c58('0xe')](_0x5c58('0xf'),this['membername']):_0x5869a6||undefined;this['calleridname']=checkNameSurname(_0x36edf5[_0x5c58('0x10')][_0x5c58('0x11')],_0x36edf5['Contact'][_0x5c58('0x12')],_0x36edf5[_0x5c58('0x10')]['lastName']);this[_0x5c58('0x13')]=_0x36edf5['active']||![];this['calleridnum']=_0x36edf5[_0x5c58('0x10')]['phone'];this['scheduledat']=_0x36edf5[_0x5c58('0x14')];this[_0x5c58('0x15')]=_0x36edf5['countbusyretry']||0x0;this[_0x5c58('0x16')]=_0x36edf5['countcongestionretry']||0x0;this[_0x5c58('0x17')]=_0x36edf5['countnoanswerretry']||0x0;this[_0x5c58('0x18')]=(_0x36edf5[_0x5c58('0x15')]||0x0)+(_0x36edf5['countcongestionretry']||0x0)+(_0x36edf5[_0x5c58('0x17')]||0x0);this[_0x5c58('0x19')]=_0x36edf5['callback'];this[_0x5c58('0x1a')]=_0x36edf5[_0x5c58('0x1a')];this[_0x5c58('0x1b')]=_0x36edf5[_0x5c58('0x1b')];this[_0x5c58('0x1c')]=_0x36edf5['recallme'];this[_0x5c58('0x1d')]=_0x36edf5['ContactId'];this[_0x5c58('0x1e')]=_0x36edf5[_0x5c58('0x1e')];this[_0x5c58('0x1f')]=_[_0x5c58('0x3')](_0x36edf5[_0x5c58('0xc')])?_0x36edf5[_0x5c58('0x1f')]:_0x36edf5[_0x5c58('0xc')]['id'];this[_0x5c58('0x20')]=_0x36edf5[_0x5c58('0x20')];this[_0x5c58('0x21')]='';this[_0x5c58('0x22')]='';}Action['prototype'][_0x5c58('0x23')]=function(){return util['format'](_0x5c58('0x24'),this[_0x5c58('0x25')],this[_0x5c58('0x26')]);};module[_0x5c58('0x27')]=Action;
\ No newline at end of file
+var _0x089f=['countbusyretry','countcongestionretry','countnoanswerretry','callback','callbackuniqueid','callbackat','recallme','ContactId','ListId','UserId','VoiceQueueId','originatecalleridnum','originatecalleridname','prototype','getCaller','format','\x22%s\x22\x20<%s>','number','exports','lodash','isNil','string','idContact','queue','name','type','campaigntype','dialAnswer','Agent','channelAgent','membername','SIP/%s','calleridname','Contact','phone','lastName','active','calleridnum','scheduledat'];(function(_0xd569f6,_0x54d7f8){var _0x22da9f=function(_0x37e061){while(--_0x37e061){_0xd569f6['push'](_0xd569f6['shift']());}};_0x22da9f(++_0x54d7f8);}(_0x089f,0x1e7));var _0xf089=function(_0x28eea2,_0x766185){_0x28eea2=_0x28eea2-0x0;var _0x24755a=_0x089f[_0x28eea2];return _0x24755a;};'use strict';var util=require('util');var _=require(_0xf089('0x0'));var moment=require('moment');function checkNameSurname(_0xe6b934,_0x38f12a,_0xa841e0){var _0x4b6166='';if(!_[_0xf089('0x1')](_0x38f12a)&&_0xf089('0x2')===typeof _0x38f12a){_0x4b6166+=_0x38f12a;}if(!_[_0xf089('0x1')](_0xa841e0)&&_0xf089('0x2')===typeof _0xa841e0){_0x4b6166+='\x20'+_0xa841e0;}if(_0x4b6166!==''){return _0x4b6166;}return _0xe6b934;}function Action(_0xb7dd60,_0x20bb58,_0x1cd58b,_0x11ceee,_0x18aca9){this['uniqueid']=_0x1cd58b||undefined;this[_0xf089('0x3')]=_0xb7dd60['id'];this[_0xf089('0x4')]=_0x20bb58[_0xf089('0x5')];this[_0xf089('0x6')]=_0x20bb58[_0xf089('0x6')];this[_0xf089('0x7')]=_0xf089('0x4');this[_0xf089('0x8')]=![];this['membername']=_['isNil'](_0xb7dd60[_0xf089('0x9')])?undefined:_0xb7dd60[_0xf089('0x9')][_0xf089('0x5')];this[_0xf089('0xa')]=this[_0xf089('0xb')]?util['format'](_0xf089('0xc'),this['membername']):_0x11ceee||undefined;this[_0xf089('0xd')]=checkNameSurname(_0xb7dd60[_0xf089('0xe')][_0xf089('0xf')],_0xb7dd60[_0xf089('0xe')]['firstName'],_0xb7dd60['Contact'][_0xf089('0x10')]);this[_0xf089('0x11')]=_0xb7dd60[_0xf089('0x11')]||![];this[_0xf089('0x12')]=_0xb7dd60[_0xf089('0xe')][_0xf089('0xf')];this[_0xf089('0x13')]=_0xb7dd60[_0xf089('0x13')];this[_0xf089('0x14')]=_0xb7dd60[_0xf089('0x14')]||0x0;this[_0xf089('0x15')]=_0xb7dd60[_0xf089('0x15')]||0x0;this[_0xf089('0x16')]=_0xb7dd60[_0xf089('0x16')]||0x0;this['countglobal']=(_0xb7dd60[_0xf089('0x14')]||0x0)+(_0xb7dd60[_0xf089('0x15')]||0x0)+(_0xb7dd60[_0xf089('0x16')]||0x0);this[_0xf089('0x17')]=_0xb7dd60[_0xf089('0x17')];this[_0xf089('0x18')]=_0xb7dd60['callbackuniqueid'];this['callbackat']=_0xb7dd60[_0xf089('0x19')];this[_0xf089('0x1a')]=_0xb7dd60[_0xf089('0x1a')];this[_0xf089('0x1b')]=_0xb7dd60[_0xf089('0x1b')];this[_0xf089('0x1c')]=_0xb7dd60[_0xf089('0x1c')];this['UserId']=_['isNil'](_0xb7dd60[_0xf089('0x9')])?_0xb7dd60[_0xf089('0x1d')]:_0xb7dd60[_0xf089('0x9')]['id'];this[_0xf089('0x1e')]=_0xb7dd60[_0xf089('0x1e')];this[_0xf089('0x1f')]='';this[_0xf089('0x20')]='';}Action[_0xf089('0x21')][_0xf089('0x22')]=function(){return util[_0xf089('0x23')](_0xf089('0x24'),this[_0xf089('0xd')],this[_0xf089('0x25')]);};module[_0xf089('0x26')]=Action;
\ No newline at end of file
index fe62b2c..39f352d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53a3=['buildObj','connect','acw','custom:agentConnectPreview','buildAcw','custom:agentcomplete','complete','total','[callProgressDetectingCustomer][logAnswer]','[callProgressDetectingCustomer][logAnswerGlobal]','crateCustomerReportQueue','talktime','BUSY','outboundBusyCallsDay','Busy','[callProgressDetectingCustomer][logBusy]','[callProgressDetectingCustomer][logBusyGlobal]','countbusyretry','dialBusyMaxRetry','rescheduleContact','scheduledAt','activeContact','NOANSWER','countnoanswerretry','NoAnswer','[callProgressDetectingCustomer][logNoAnswer]','[callProgressDetectingCustomer][logNoAnswerGlobal]','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','CONGESTION','countcongestionretry','Congestion','[callProgressDetectingCustomer][logCongestion]','[callProgressDetectingCustomer][logCongestionGlobal]','dialBusyRetryFrequency','CANCEL','AgentReject','[syncHangupRequest][logAgentReject]','unlockAgent','unlockContact','disableContact','[default]','[Dialer][decrementTalkink][no\x20Hangup][Preview]','outboundUnknownCallsDay','cause-txt','dialstatus','[callProgressDetectingCustomer][logUnknownGlobal]','[callProgressDetectingCustomer]','[originated][decrement][callProgressDetectingCustomer]','destlinkedid','callProgressDetectingAgent','isUndefined','object','reason','createAgentHistory','[callProgressDetectingAgent][logNoSuch]','logAgent','[callProgressDetectingAgent][logNoAnswer]','[callProgressDetectingAgent][logAnswerAGI]','[callProgressDetectingAgent][logCongestion]','[callProgressDetectingAgent]','checkInBlack','Contact','phone','VoiceQueueId','Contact\x20is\x20undefined','lookAgent','isEmpty','execCall','Queue:\x20','\x20IdHopper:\x20','custom:agentcalled','called','Calling','[Preview][execCall][failure]','createHistory','[Blacklist][error]','Contact\x20in\x20black\x20List','SIP/%s','reachable','unmonitored','unlock','execRun','getContactPreview','recallme','validateContact','isValid','checkIsBlackList','Contact.phone','Call\x20unsuccessful','Agent','[Preview][validateContact][Empty\x20Contact]','[Preview][validateContact][Empty\x20Campaign]','Empty\x20Campaign','[Preview][validateContact][Trunk\x20not\x20work]','\x20Trunk\x20is\x20not\x20active','TrunkBackup','\x20Trunk\x20Backup\x20is\x20not\x20active','Trunk\x20not\x20work','\x20Not\x20Active','campaign\x20Name:\x20','Is\x20Valid','SIP/%s/%s%s','trim','dialCutDigit','substring','getCallerId','getCallerIdRandom','dialRandomLastDigitCallerIdNumber','extractCalleridName','extractCalleridNumber','addVariables','toLowerVariables','variablesAction','[originated][increment]','OriginateError','[originateFailure][logOriginateFailure]','actionid','logLookAgent','clone','isFailure','response','idContact','rejected','Answer','[syncHangup][talking]','cause','[syncHangup][talking][cause]','statedesc','dialQueueProject','channelstate','transfer','destuniqueid','addVariable','variables','filterKey','keys','variable','value','error','[syncVarSet][Preview]','inspect','transfertargetlinkedid','transfererlinkedid','util','lodash','bluebird','uuid','moment','md5','ioredis','../../../config/environment','../../../config/logger','preview','actionPreview','../ami','./rpcDb','./action','redis','localhost','prototype','enqueue','tail','finally','sequence','campaignsPreview','voiceQueues','trunks','actions','agents','clockClearZombieChannels','originateresponse','bind','syncHangup','hanguprequest','syncHangupRequest','dialend','syncDialEnd','newexten','syncNewExten','varset','syncVarSet','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','loopCampaigns','emit','type','outbound','strategy','answered','available','loggedIn','pTalking','sumBillable','sumDuration','sumHoldTime','unmanaged','waiting','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundCongestionCallsDay','outboundNoAnswerCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalTotalCalls','message','Trunk','name','active','callerid','Interval','stringify','format','voice:queue:%s','voice_queue:save','voice_queue_channel:remove','sendMessageOneNotActive','originated','NOT_ACTIVE','logger','[CampaignPreview]\x20Campaign\x20Queue:\x20','\x20is\x20not\x20active','\x20is\x20disactive','syncCampaigns','hasOwnProperty','booked','clearZombieChannels','clearZombieChannel','isNil','info','[clearZombieChannels][talking]','Queue','queue','originated:\x20','pTalking:\x20','dialAnswer','pick','contactId','ListId','Action','status','channel','No\x20such\x20channel','updateOriginated','[clearZombieChannel]','decrementTalkink','loggerError','[Dialer][checkChannel][pTalking][Preview]','[action]','size','recallMe','agentReadyId','then','getDiff','scheduledat','run','logger2','[RecallMe]','starttime','YYYY-MM-DD\x20HH:mm:ss','logCustomer','dialRecallInQueue','rescheduleContactInQueue','createBody','createCustomerHistory','[HistoryDialRecallInQueue][historyCatch]','RecallFailedTimeout','catch','[getContactRecallMe]','setMessage','IsNotLoggedIn','AGENTS_NOT_LOGGED','isActive','isTrunkReachable','ACTIVE','callProgressDetectingCustomer','outboundNoSuchCallsDay','countglobal','totalGlobal','NoSuchNumber','[callProgressDetectingCustomer][logNoSuch]','dialGlobalMaxRetry','cloneAction','Global','createCustomerFinal','[callProgressDetectingCustomer][logNoSuchGlobal]','linkedid','ANSWER','responsetime','answertime','[syncHangup][talking][increment]','uniqueid','\x20Queue'];(function(_0x230e54,_0x477b73){var _0x3bef81=function(_0x6d1024){while(--_0x6d1024){_0x230e54['push'](_0x230e54['shift']());}};_0x3bef81(++_0x477b73);}(_0x53a3,0x1c3));var _0x353a=function(_0x380af2,_0x36cf66){_0x380af2=_0x380af2-0x0;var _0x1789dc=_0x53a3[_0x380af2];return _0x1789dc;};'use strict';var util=require(_0x353a('0x0'));var _=require(_0x353a('0x1'));var BPromise=require(_0x353a('0x2'));var uuid=require(_0x353a('0x3'));var moment=require(_0x353a('0x4'));var md5=require(_0x353a('0x5'));var Redis=require(_0x353a('0x6'));var config=require(_0x353a('0x7'));var logger=require(_0x353a('0x8'))(_0x353a('0x9'));var loggerAction=require(_0x353a('0x8'))(_0x353a('0xa'));var ami=require(_0x353a('0xb'));var rpcDb=require(_0x353a('0xc'));var Action=require(_0x353a('0xd'));var ut=require('./util/util');config[_0x353a('0xe')]=_['defaults'](config[_0x353a('0xe')],{'host':_0x353a('0xf'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var Sequence=function(){};Sequence[_0x353a('0x10')][_0x353a('0x11')]=function(_0x417c29){this['tail']=this[_0x353a('0x12')]?this[_0x353a('0x12')][_0x353a('0x13')](_0x417c29):_0x417c29();};function Preview(_0x7a9b58){this[_0x353a('0x14')]=new Sequence();this[_0x353a('0x15')]=_0x7a9b58[_0x353a('0x16')];this[_0x353a('0x17')]=_0x7a9b58[_0x353a('0x17')];this[_0x353a('0x18')]={};this[_0x353a('0x19')]=_0x7a9b58[_0x353a('0x19')];this[_0x353a('0x1a')]=0x0;ami['on'](_0x353a('0x1b'),this['syncOriginateResponse'][_0x353a('0x1c')](this));ami['on']('hangup',this[_0x353a('0x1d')][_0x353a('0x1c')](this));ami['on'](_0x353a('0x1e'),this[_0x353a('0x1f')]['bind'](this));ami['on'](_0x353a('0x20'),this[_0x353a('0x21')][_0x353a('0x1c')](this));ami['on'](_0x353a('0x22'),this[_0x353a('0x23')]['bind'](this));ami['on'](_0x353a('0x24'),this[_0x353a('0x25')][_0x353a('0x1c')](this));ami['on'](_0x353a('0x26'),this[_0x353a('0x27')][_0x353a('0x1c')](this));ami['on'](_0x353a('0x28'),this[_0x353a('0x29')]['bind'](this));this[_0x353a('0x2a')](this['campaignsPreview']);}function emit(_0x25bf39,_0x16003c,_0x44ff1f){io['to'](_0x25bf39)[_0x353a('0x2b')](_0x16003c,_0x44ff1f);}function emitCampaignPreview(_0x5214a4){if(_0x5214a4[_0x353a('0x2c')]===_0x353a('0x2d')){var _0x442eec={'id':_0x5214a4['id'],'name':_0x5214a4['name'],'strategy':_0x5214a4[_0x353a('0x2e')],'answered':_0x5214a4[_0x353a('0x2f')],'available':_0x5214a4[_0x353a('0x30')],'loggedIn':_0x5214a4[_0x353a('0x31')],'pTalking':_0x5214a4[_0x353a('0x32')],'sumBillable':_0x5214a4[_0x353a('0x33')],'sumDuration':_0x5214a4[_0x353a('0x34')],'sumHoldTime':_0x5214a4[_0x353a('0x35')]||0x0,'talking':_0x5214a4['talking'],'total':_0x5214a4['total'],'type':_0x5214a4[_0x353a('0x2c')],'unmanaged':_0x5214a4[_0x353a('0x36')],'abandoned':_0x5214a4['abandoned'],'waiting':_0x5214a4[_0x353a('0x37')],'loggedInDb':_0x5214a4['loggedInDb'],'dialActive':_0x5214a4[_0x353a('0x38')],'dialMethod':_0x5214a4[_0x353a('0x39')],'dialOriginateCallerIdName':_0x5214a4[_0x353a('0x3a')],'dialOriginateCallerIdNumber':_0x5214a4[_0x353a('0x3b')],'dialOriginateTimeout':_0x5214a4['dialOriginateTimeout'],'dialPrefix':_0x5214a4[_0x353a('0x3c')],'outboundAnswerAgiCallsDay':_0x5214a4[_0x353a('0x3d')],'outboundAnswerCallsDay':_0x5214a4[_0x353a('0x3e')],'outboundBlacklistCallsDay':_0x5214a4[_0x353a('0x3f')],'outboundBusyCallsDay':_0x5214a4['outboundBusyCallsDay'],'outboundCongestionCallsDay':_0x5214a4[_0x353a('0x40')],'outboundDropCallsDayACS':_0x5214a4['outboundDropCallsDayACS'],'outboundDropCallsDayCallersExit':_0x5214a4['outboundDropCallsDayCallersExit'],'outboundDropCallsDayTimeout':_0x5214a4['outboundDropCallsDayTimeout'],'outboundNoAnswerCallsDay':_0x5214a4[_0x353a('0x41')],'outboundNoSuchCallsDay':_0x5214a4['outboundNoSuchCallsDay'],'outboundOriginateFailureCallsDay':_0x5214a4[_0x353a('0x42')],'outboundReCallsDay':_0x5214a4[_0x353a('0x43')],'outboundRejectCallsDay':_0x5214a4[_0x353a('0x44')],'outboundUnknownCallsDay':_0x5214a4['outboundUnknownCallsDay'],'predictiveIntervalAnsweredCalls':_0x5214a4['predictiveIntervalAnsweredCalls'],'predictiveIntervalAvgHoldtime':_0x5214a4['predictiveIntervalAvgHoldtime'],'predictiveIntervalAvgTalktime':_0x5214a4['predictiveIntervalAvgTalktime'],'predictiveIntervalDroppedCallsCallersExit':_0x5214a4[_0x353a('0x45')],'predictiveIntervalDroppedCallsTimeout':_0x5214a4['predictiveIntervalDroppedCallsTimeout'],'predictiveIntervalErlangCalls':_0x5214a4['predictiveIntervalErlangCalls'],'predictiveIntervalErlangCallsDroppedCalls':_0x5214a4[_0x353a('0x46')],'predictiveIntervalHitRate':_0x5214a4['predictiveIntervalHitRate'],'predictiveIntervalLowerLimit':_0x5214a4[_0x353a('0x47')],'predictiveIntervalMultiplicativeFactor':_0x5214a4[_0x353a('0x48')],'predictiveIntervalPauses':_0x5214a4[_0x353a('0x49')],'predictiveIntervalTotalCalls':_0x5214a4[_0x353a('0x4a')],'message':_0x5214a4[_0x353a('0x4b')],'originated':_0x5214a4['originated']};if(_0x5214a4[_0x353a('0x4c')]){_0x442eec['Trunk']={'id':_0x5214a4[_0x353a('0x4c')]['id'],'name':_0x5214a4[_0x353a('0x4c')][_0x353a('0x4d')],'active':_0x5214a4[_0x353a('0x4c')][_0x353a('0x4e')],'callerid':_0x5214a4[_0x353a('0x4c')][_0x353a('0x4f')]};}if(_0x5214a4[_0x353a('0x50')]){_0x442eec[_0x353a('0x50')]={'id':_0x5214a4['Interval']['id'],'name':_0x5214a4[_0x353a('0x50')][_0x353a('0x4d')]};}var _0x3c5c2c=md5(JSON[_0x353a('0x51')](_0x442eec));if(_0x5214a4[_0x353a('0x5')]!==_0x3c5c2c){_0x5214a4[_0x353a('0x5')]=_0x3c5c2c;emit(util[_0x353a('0x52')](_0x353a('0x53'),_0x442eec['name']),_0x353a('0x54'),_0x442eec);}}}function emitVoiceQueueChannelRemove(_0x3b5559){emit(util['format'](_0x353a('0x53'),_0x3b5559['name']),_0x353a('0x55'),_0x3b5559);}function notSendMessagesQueue(_0xa3b7c){if(_0xa3b7c[_0x353a('0x56')]){if(_0xa3b7c[_0x353a('0x57')]===0x0&&_0xa3b7c['pTalking']===0x0){_0xa3b7c[_0x353a('0x56')]=![];_0xa3b7c[_0x353a('0x30')]=0x0;_0xa3b7c['paused']=0x0;_0xa3b7c['message']=_0x353a('0x58');ut[_0x353a('0x59')](_0x353a('0x5a'),_0xa3b7c['name']+_0x353a('0x5b'));}else{_0xa3b7c[_0x353a('0x4b')]='IS_DISACTIVED';ut[_0x353a('0x59')]('[CampaignPreview]\x20Campaign\x20Queue:\x20',_0xa3b7c['name']+_0x353a('0x5c'));}emitCampaignPreview(_0xa3b7c);}}Preview[_0x353a('0x10')]['loopCampaigns']=function(){var _0x574aa5=this;setInterval(function(){_0x574aa5[_0x353a('0x5d')]();},0x7cf);};Preview[_0x353a('0x10')][_0x353a('0x5d')]=function(){var _0x232911=this[_0x353a('0x15')];this[_0x353a('0x1a')]+=0x1;for(var _0x4fd6e4 in _0x232911){if(_0x232911[_0x353a('0x5e')](_0x4fd6e4)&&(_0x232911[_0x4fd6e4][_0x353a('0x39')]===_0x353a('0x9')||_0x232911[_0x4fd6e4][_0x353a('0x39')]===_0x353a('0x5f'))&&_0x232911[_0x4fd6e4][_0x353a('0x2c')]===_0x353a('0x2d')){if(this[_0x353a('0x1a')]>0x7){this['clockClearZombieChannels']=0x0;this[_0x353a('0x60')]();}}if(_0x232911[_0x353a('0x5e')](_0x4fd6e4)&&_0x232911[_0x4fd6e4][_0x353a('0x39')]===_0x353a('0x9')&&_0x232911[_0x4fd6e4][_0x353a('0x2c')]==='outbound'){if(_0x232911[_0x4fd6e4][_0x353a('0x38')]){this['setMessage'](_0x232911[_0x4fd6e4]);this['recallMe'](_0x232911[_0x4fd6e4]);}else{notSendMessagesQueue(_0x232911[_0x4fd6e4]);}}}};Preview[_0x353a('0x10')][_0x353a('0x61')]=function(_0x38b3a0){var _0x57c8a0=this;this[_0x353a('0x14')][_0x353a('0x11')](function(){if(!_[_0x353a('0x62')](_0x57c8a0['actions'][_0x38b3a0])){loggerAction[_0x353a('0x63')](_0x353a('0x64'),_0x38b3a0,_0x353a('0x65'),_0x57c8a0[_0x353a('0x18')][_0x38b3a0][_0x353a('0x66')],_0x353a('0x67'),JSON['stringify'](_0x57c8a0[_0x353a('0x15')][_0x57c8a0['actions'][_0x38b3a0][_0x353a('0x66')]][_0x353a('0x57')]),_0x353a('0x68'),JSON[_0x353a('0x51')](_0x57c8a0[_0x353a('0x15')][_0x57c8a0[_0x353a('0x18')][_0x38b3a0][_0x353a('0x66')]][_0x353a('0x32')]),JSON[_0x353a('0x51')](_0x57c8a0['actions'][_0x38b3a0][_0x353a('0x69')]),JSON['stringify'](_[_0x353a('0x6a')](_0x57c8a0[_0x353a('0x18')][_0x38b3a0],[_0x353a('0x6b'),'UserId','VoiceQueueId',_0x353a('0x6c')])));return ami[_0x353a('0x6d')]({'action':_0x353a('0x6e'),'channel':_0x57c8a0[_0x353a('0x18')][_0x38b3a0][_0x353a('0x6f')]})['catch'](function(_0x4c4bf6){if(_0x4c4bf6['message']===_0x353a('0x70')){setTimeout(function(){if(_0x57c8a0[_0x353a('0x18')][_0x38b3a0]){ut[_0x353a('0x71')](_0x57c8a0['campaignsPreview'][_0x57c8a0[_0x353a('0x18')][_0x38b3a0][_0x353a('0x66')]],_0x353a('0x72'));if(_0x57c8a0[_0x353a('0x18')][_0x38b3a0][_0x353a('0x69')]===!![]){ut[_0x353a('0x73')](_0x57c8a0['campaignsPreview'][_0x57c8a0['actions'][_0x38b3a0][_0x353a('0x66')]],_0x353a('0x72'));ut[_0x353a('0x74')](_0x353a('0x75')+_0x38b3a0,_0x57c8a0[_0x353a('0x18')][_0x38b3a0][_0x353a('0x66')]);}ut[_0x353a('0x74')]('[Dialer][checkChannel][Preview]'+_0x38b3a0,_0x57c8a0['actions'][_0x38b3a0][_0x353a('0x66')]);delete _0x57c8a0[_0x353a('0x18')][_0x38b3a0];}},0x2328);}});}});};Preview[_0x353a('0x10')][_0x353a('0x60')]=function(){var _0x85e8e=this;loggerAction['info'](_0x353a('0x76'),_[_0x353a('0x77')](this['actions']));for(var _0xdcd2d3 in this[_0x353a('0x18')]){if(_0x85e8e[_0x353a('0x18')][_0x353a('0x5e')](_0xdcd2d3)){_0x85e8e['clearZombieChannel'](_0xdcd2d3);}}};Preview[_0x353a('0x10')][_0x353a('0x78')]=function(_0xbe2bc7){var _0x5f1ad2=this;rpcDb['getContactRecallMe'](_0xbe2bc7['id'],ut[_0x353a('0x79')](this[_0x353a('0x19')]))[_0x353a('0x7a')](function(_0x134eea){if(!_[_0x353a('0x62')](_0x134eea)){for(var _0x2149fd=0x0;_0x2149fd<_0x134eea['length'];_0x2149fd+=0x1){if(ut[_0x353a('0x7b')](_0x134eea[_0x2149fd][_0x353a('0x7c')])<_0xbe2bc7['dialRecallMeTimeout']*0x3c){_0x5f1ad2[_0x353a('0x7d')](_0x134eea[_0x2149fd]['id'])[_0x353a('0x7a')](ut[_0x353a('0x7e')](_0x353a('0x7f')))['catch'](ut['logger2'](_0x353a('0x7f')));}else{var _0x4ee5df=new Action(_0x134eea[_0x2149fd],_0xbe2bc7);_0x4ee5df[_0x353a('0x80')]=moment()[_0x353a('0x52')](_0x353a('0x81'));_0xbe2bc7[_0x353a('0x43')]+=0x1;ut[_0x353a('0x82')](_0x4ee5df,0x17,'RecallInQueue');if(_0xbe2bc7[_0x353a('0x83')]){rpcDb[_0x353a('0x84')](ut[_0x353a('0x85')](_0x134eea[_0x2149fd]));rpcDb[_0x353a('0x86')](_0x4ee5df,_0x353a('0x87'));}else{ut[_0x353a('0x82')](_0x4ee5df,0x16,_0x353a('0x88'));rpcDb[_0x353a('0x86')](_0x4ee5df,'[HistoryRecallClose]');rpcDb['createCustomerFinal'](_0x4ee5df,'[HistoryRecallClose]');}}}}})[_0x353a('0x89')](ut[_0x353a('0x7e')](_0x353a('0x8a')));};Preview['prototype'][_0x353a('0x8b')]=function(_0xaa6ae7){_0xaa6ae7['sendMessageOneNotActive']=!![];if(ut[_0x353a('0x8c')](_0xaa6ae7['loggedIn'])){_0xaa6ae7[_0x353a('0x4b')]=_0x353a('0x8d');}else if(!ut[_0x353a('0x8e')](_0xaa6ae7[_0x353a('0x38')])){_0xaa6ae7[_0x353a('0x4b')]=_0x353a('0x58');}else if(!this[_0x353a('0x8f')](_0xaa6ae7['Trunk'])){if(!this['isTrunkReachable'](_0xaa6ae7['TrunkBackup'])){_0xaa6ae7[_0x353a('0x4b')]='TRUNK_IS_NOT_REACHABLE';}else{_0xaa6ae7[_0x353a('0x4b')]=_0x353a('0x90');}}else{_0xaa6ae7[_0x353a('0x4b')]=_0x353a('0x90');}emitCampaignPreview(_0xaa6ae7);};Preview[_0x353a('0x10')][_0x353a('0x91')]=function(_0x434a6d,_0x28a948,_0x1ef225){var _0x275e09=this;var _0x1a8727=this[_0x353a('0x18')][_0x28a948];var _0xc20133=this[_0x353a('0x15')][_0x1a8727[_0x353a('0x66')]];var _0x2a62d9;if(_0xc20133){switch(_0x1ef225){case'1':_0xc20133[_0x353a('0x92')]+=0x1;_0x1a8727[_0x353a('0x93')]=ut[_0x353a('0x94')](_0x1a8727);ut['logCustomer'](_0x1a8727,0x0,_0x353a('0x95'));rpcDb[_0x353a('0x86')](_0x1a8727,_0x353a('0x96'));if(ut[_0x353a('0x94')](_0x1a8727)>=_0xc20133[_0x353a('0x97')]){_0x2a62d9=ut[_0x353a('0x98')](_0x1a8727,0xf,_0x353a('0x99'));rpcDb[_0x353a('0x9a')](_0x2a62d9,_0x353a('0x9b'));}else{rpcDb[_0x353a('0x9a')](_0x1a8727,'[callProgressDetectingCustomer][logNoSuchGlobal]');}delete this[_0x353a('0x18')][_0x434a6d[_0x353a('0x9c')]];break;case _0x353a('0x9d'):var _0x3dedd9=moment()['format'](_0x353a('0x81'));_0x1a8727[_0x353a('0x9e')]=_0x3dedd9;_0x1a8727[_0x353a('0x9f')]=_0x3dedd9;_0x1a8727[_0x353a('0x69')]=!![];_0xc20133[_0x353a('0x32')]+=0x1;logger[_0x353a('0x63')](_0x353a('0xa0'),_0x1a8727[_0x353a('0xa1')],_0x353a('0xa2'),_0xc20133[_0x353a('0x4d')],_0x353a('0x68'),_0xc20133[_0x353a('0x32')]);ami['emit']('custom:agentconnect',ut[_0x353a('0xa3')](_0x1a8727,_0x353a('0xa4')));if(_0xc20133[_0x353a('0xa5')]){ami[_0x353a('0x2b')](_0x353a('0xa6'),ut[_0x353a('0xa7')](_0x1a8727));}break;case'16':ami[_0x353a('0x2b')](_0x353a('0xa8'),ut[_0x353a('0xa3')](_0x1a8727,_0x353a('0xa9')));emitVoiceQueueChannelRemove(ut[_0x353a('0xa3')](_0x1a8727,_0x353a('0xa9')));_0xc20133[_0x353a('0x3e')]+=0x1;_0xc20133[_0x353a('0xaa')]+=0x1;_0xc20133[_0x353a('0x2f')]+=0x1;ut['decrementTalkink'](_0xc20133,'[16]');_0x1a8727[_0x353a('0x93')]=ut[_0x353a('0x94')](_0x1a8727);ut['logCustomer'](_0x1a8727,0x4,'Answer');rpcDb[_0x353a('0x86')](_0x1a8727,_0x353a('0xab'));rpcDb[_0x353a('0x9a')](_0x1a8727,_0x353a('0xac'));rpcDb[_0x353a('0xad')](_0x1a8727);_0xc20133[_0x353a('0x34')]+=_0x1a8727[_0x353a('0xae')];_0xc20133['sumBillable']+=_0x1a8727[_0x353a('0xae')];logger[_0x353a('0x63')]('[syncHangup][talking][decrement]',_0x1a8727['uniqueid'],_0x353a('0xa2'),_0xc20133['name'],_0x353a('0x68'),_0xc20133[_0x353a('0x32')]);delete this[_0x353a('0x18')][_0x434a6d[_0x353a('0x9c')]];break;case _0x353a('0xaf'):_0xc20133[_0x353a('0xb0')]+=0x1;_0x1a8727['countbusyretry']+=0x1;_0x1a8727[_0x353a('0x93')]=ut[_0x353a('0x94')](_0x1a8727);ut['logCustomer'](_0x1a8727,0x5,_0x353a('0xb1'));rpcDb['createCustomerHistory'](_0x1a8727,_0x353a('0xb2'));if(ut['totalGlobal'](_0x1a8727)>=_0xc20133[_0x353a('0x97')]){_0x2a62d9=ut[_0x353a('0x98')](_0x1a8727,0xf,_0x353a('0x99'));rpcDb[_0x353a('0x9a')](_0x2a62d9,_0x353a('0xb3'));}else{if(_0x1a8727[_0x353a('0xb4')]>=_0xc20133[_0x353a('0xb5')]){rpcDb[_0x353a('0x9a')](_0x1a8727,_0x353a('0xb2'));}else{rpcDb[_0x353a('0xb6')](ut[_0x353a('0xb7')](_0x1a8727,_0x353a('0xb4'),_0xc20133['dialBusyRetryFrequency']),_0x1a8727['unlockAgent'],_0x1a8727[_0x353a('0xb8')]);}}break;case _0x353a('0xb9'):_0xc20133[_0x353a('0x41')]+=0x1;_0x1a8727[_0x353a('0xba')]+=0x1;_0x1a8727[_0x353a('0x93')]=ut[_0x353a('0x94')](_0x1a8727);ut[_0x353a('0x82')](_0x1a8727,0x3,_0x353a('0xbb'));rpcDb[_0x353a('0x86')](_0x1a8727,_0x353a('0xbc'));if(ut['totalGlobal'](_0x1a8727)>=_0xc20133[_0x353a('0x97')]){_0x2a62d9=ut[_0x353a('0x98')](_0x1a8727,0xf,_0x353a('0x99'));rpcDb['createCustomerFinal'](_0x2a62d9,_0x353a('0xbd'));}else{if(_0x1a8727[_0x353a('0xba')]>=_0xc20133[_0x353a('0xbe')]){rpcDb[_0x353a('0x9a')](_0x1a8727,_0x353a('0xbc'));}else{rpcDb[_0x353a('0xb6')](ut[_0x353a('0xb7')](_0x1a8727,'countnoanswerretry',_0xc20133[_0x353a('0xbf')]),_0x1a8727['unlockAgent'],_0x1a8727[_0x353a('0xb8')]);}}break;case _0x353a('0xc0'):_0xc20133[_0x353a('0x40')]+=0x1;_0x1a8727[_0x353a('0xc1')]+=0x1;_0x1a8727[_0x353a('0x93')]=ut[_0x353a('0x94')](_0x1a8727);ut[_0x353a('0x82')](_0x1a8727,0x8,_0x353a('0xc2'));rpcDb[_0x353a('0x86')](_0x1a8727,_0x353a('0xc3'));if(ut['totalGlobal'](_0x1a8727)>=_0xc20133[_0x353a('0x97')]){_0x2a62d9=ut['cloneAction'](_0x1a8727,0xf,_0x353a('0x99'));rpcDb[_0x353a('0x9a')](_0x2a62d9,_0x353a('0xc4'));}else{if(_0x1a8727[_0x353a('0xc1')]>=_0xc20133['dialCongestionMaxRetry']){rpcDb[_0x353a('0x9a')](_0x1a8727,_0x353a('0xc3'));}else{rpcDb['rescheduleContact'](ut[_0x353a('0xb7')](_0x1a8727,_0x353a('0xc1'),_0xc20133[_0x353a('0xc5')]),_0x1a8727['unlockAgent'],_0x1a8727[_0x353a('0xb8')]);}}break;case _0x353a('0xc6'):_0xc20133[_0x353a('0x44')]+=0x1;_0x1a8727[_0x353a('0x93')]=ut['totalGlobal'](_0x1a8727);ut['logCustomer'](_0x1a8727,0x14,_0x353a('0xc7'));rpcDb['createCustomerHistory'](_0x1a8727,_0x353a('0xc8'));if(_0x1a8727[_0x353a('0xc9')]){rpcDb[_0x353a('0xca')](_0x1a8727['idContact']);}if(_0x1a8727[_0x353a('0xb8')]){rpcDb[_0x353a('0xcb')](_0x1a8727['idContact']);}break;default:if(_0x1a8727['dialAnswer']){ut['decrementTalkink'](_0xc20133,_0x353a('0xcc'));ut[_0x353a('0x74')](_0x353a('0xcd')+_0xc20133[_0x353a('0x4d')],_0x434a6d);}_0xc20133[_0x353a('0xce')]+=0x1;_0x1a8727[_0x353a('0x93')]=ut['totalGlobal'](_0x1a8727);ut['logCustomer'](_0x1a8727,0xc,_0x434a6d[_0x353a('0xcf')]||_0x434a6d[_0x353a('0xd0')]);rpcDb['createCustomerHistory'](_0x1a8727,'[callProgressDetectingCustomer][logUnknown]');if(ut[_0x353a('0x94')](_0x1a8727)>=_0xc20133['dialGlobalMaxRetry']){_0x2a62d9=ut[_0x353a('0x98')](_0x1a8727,0xf,'Global');rpcDb[_0x353a('0x9a')](_0x2a62d9,_0x353a('0xd1'));}else{rpcDb['createCustomerFinal'](_0x1a8727,_0x353a('0xd1'));}delete this[_0x353a('0x18')][_0x434a6d[_0x353a('0x9c')]];}if(!(_0x1a8727[_0x353a('0x69')]&&_0x1ef225==='16')){ut[_0x353a('0x71')](_0xc20133,_0x353a('0xd2'));logger[_0x353a('0x63')](_0x353a('0xd3'),_0x1a8727['uniqueid'],_0x353a('0xa2'),_0xc20133['name'],_0x353a('0x67'),_0xc20133[_0x353a('0x57')]);}if(_0x1ef225!==_0x353a('0x9d')){delete this[_0x353a('0x18')][_0x434a6d[_0x353a('0x9c')]];delete this[_0x353a('0x18')][_0x434a6d[_0x353a('0xd4')]];}}};Preview[_0x353a('0x10')][_0x353a('0xd5')]=function(_0xe7aefb,_0x55ea4a,_0x1865af){if(_[_0x353a('0xd6')](_0x55ea4a)&&_0x353a('0xd7')!==typeof _0x55ea4a){return;}if(_[_0x353a('0xd6')](_0x1865af)&&_0x353a('0xd7')!==typeof _0x1865af){return;}switch(_0x1865af[_0x353a('0xd8')]){case'0':ut['logAgent'](_0xe7aefb,0x0,_0x353a('0x95'));rpcDb[_0x353a('0xd9')](_0xe7aefb,_0x353a('0xda'));break;case'3':ut[_0x353a('0xdb')](_0xe7aefb,0x3,_0x353a('0xbb'));rpcDb['createAgentHistory'](_0xe7aefb,_0x353a('0xdc'));break;case'5':ut[_0x353a('0xdb')](_0xe7aefb,0x5,_0x353a('0xb1'));rpcDb['createAgentHistory'](_0xe7aefb,'[callProgressDetectingAgent][logBusy]');break;case'8':ut[_0x353a('0xdb')](_0xe7aefb,0x8,'Congestion');rpcDb[_0x353a('0xd9')](_0xe7aefb,'[callProgressDetectingAgent][logCongestion]');break;case'22':ut[_0x353a('0xdb')](_0xe7aefb,0x16,'AnswerAGI');rpcDb[_0x353a('0xd9')](_0xe7aefb,_0x353a('0xdd'));break;default:ut['logAgent'](_0xe7aefb,0xc,_0x1865af[_0x353a('0xd8')]);rpcDb[_0x353a('0xd9')](_0xe7aefb,_0x353a('0xde'));}ut[_0x353a('0x71')](_0x55ea4a,_0x353a('0xdf'));logger['info']('[originated][decrement][callProgressDetectingAgent]',_0xe7aefb['uniqueid'],_0x353a('0xa2'),_0x55ea4a[_0x353a('0x4d')],_0x353a('0x67'),_0x55ea4a[_0x353a('0x57')]);delete this[_0x353a('0x18')][_0xe7aefb[_0x353a('0xa1')]];};Preview[_0x353a('0x10')][_0x353a('0xe0')]=function(_0x5ec099,_0x2a5426,_0x2c8847,_0x47b27e,_0x3fa6c7){var _0x2bbe99=this;return new BPromise(function(_0x3fe825,_0x153ee7){if(_['isNil'](_0x2a5426)||_[_0x353a('0x62')](_0x2a5426['Contact'])||_[_0x353a('0x62')](_0x2a5426[_0x353a('0xe1')][_0x353a('0xe2')])||_['isNil'](_0x2a5426[_0x353a('0xe3')])){_0x153ee7(ut['message'](_0x353a('0xe4'),_0x47b27e,_0x3fa6c7));return;}var _0xf7149c=uuid['v4']();var _0x1570b7=_0x2bbe99[_0x353a('0x15')][_0x2a5426['Queue'][_0x353a('0x4d')]];var _0x52fe6d=_0x2c8847?_0x2bbe99['agents'][_0x2c8847]['id']:undefined;_0x2bbe99[_0x353a('0x18')][_0xf7149c]=new Action(_0x2a5426,_0x1570b7,_0xf7149c,_0x2c8847,_0x52fe6d);var _0x574d94=_0x2bbe99[_0x353a('0x18')][_0xf7149c];_0x574d94[_0x353a('0xc9')]=_0x47b27e;_0x574d94[_0x353a('0xb8')]=_0x3fa6c7;_0x574d94[_0x353a('0xe5')]=_0x2c8847;if(_[_0x353a('0xe6')](_0x5ec099)){_0x2bbe99[_0x353a('0xe7')](_0x574d94,_0x1570b7,_0x2a5426,_0x2c8847)[_0x353a('0x7a')](function(_0x4508c7){logger['info']('[Preview][execCall][success]',_0x353a('0xe8')+_0x574d94[_0x353a('0x66')]+_0x353a('0xe9')+_0x574d94['idContact'],JSON[_0x353a('0x51')](_0x4508c7));ami[_0x353a('0x2b')](_0x353a('0xea'),ut[_0x353a('0xa3')](_0x574d94,_0x353a('0xeb')));_0x3fe825(ut['message'](_0x353a('0xec')));})['catch'](function(_0x30bdee){ut['logger'](_0x353a('0xed'),_0x30bdee);_0x153ee7(ut['message']('Call\x20failed',_0x47b27e,_0x3fa6c7));});}else{_0x1570b7[_0x353a('0x3f')]+=0x1;ut['logBlacklist'](_0x574d94);rpcDb[_0x353a('0xee')](_0x574d94,_0x353a('0xef'));delete _0x2bbe99[_0x353a('0x18')][_0xf7149c];_0x153ee7(ut[_0x353a('0x4b')](_0x353a('0xf0'),_0x47b27e,_0x3fa6c7));}});};Preview[_0x353a('0x10')]['isTrunkReachable']=function(_0x5c756f){return!_[_0x353a('0x62')](_0x5c756f)&&!_[_0x353a('0x62')](_0x5c756f[_0x353a('0x4d')])&&!_[_0x353a('0x62')](_0x5c756f[_0x353a('0x4e')])&&_0x5c756f[_0x353a('0x4e')]&&!_[_0x353a('0x62')](this['trunks'][util['format'](_0x353a('0xf1'),_0x5c756f['name'])])&&!_[_0x353a('0x62')](this[_0x353a('0x17')][util[_0x353a('0x52')](_0x353a('0xf1'),_0x5c756f[_0x353a('0x4d')])]['status'])&&(this[_0x353a('0x17')][util[_0x353a('0x52')](_0x353a('0xf1'),_0x5c756f['name'])][_0x353a('0x6e')]===_0x353a('0xf2')||this[_0x353a('0x17')][util[_0x353a('0x52')]('SIP/%s',_0x5c756f[_0x353a('0x4d')])][_0x353a('0x6e')]===_0x353a('0xf3'));};Preview['prototype']['run']=function(_0x160c32,_0x4a5f63){var _0x55da0b=this;return new BPromise(function(_0x3e039,_0x551056){_0x55da0b['execRun'](_0x160c32,_0x4a5f63)[_0x353a('0x7a')](function(_0x4440d2){_0x3e039(_['pick'](_0x4440d2,[_0x353a('0x4b')]));})['catch'](function(_0x4026b1){if(_0x4026b1[_0x353a('0xf4')]){rpcDb[_0x353a('0xca')](_0x160c32);}if(_0x4026b1['active']){rpcDb[_0x353a('0xcb')](_0x160c32);}_0x551056(_['pick'](_0x4026b1,[_0x353a('0x4b')]));});});};Preview[_0x353a('0x10')][_0x353a('0xf5')]=function(_0xc24e25,_0x1e4ce0){var _0x165f1d=this;return new BPromise(function(_0x45b2aa,_0x1883a4){var _0x337c19,_0x553bb3;rpcDb[_0x353a('0xf6')](_0xc24e25)[_0x353a('0x7a')](function(_0x40ca3a){if(!_[_0x353a('0x62')](_0x40ca3a[0x0])){_0x553bb3=_0x40ca3a[0x0][_0x353a('0xf7')]?![]:!![];_0x337c19=_0x40ca3a[0x0][_0x353a('0xf7')]?!![]:![];_0x337c19=_0x1e4ce0?!![]:_0x337c19;}var _0x52ec45=_0x165f1d[_0x353a('0xf8')](_0x40ca3a);if(_0x52ec45[_0x353a('0xf9')]){rpcDb[_0x353a('0xfa')](_['pick'](_0x40ca3a[0x0],[_0x353a('0xe3'),_0x353a('0xfb')]))['then'](function(_0x52c889){_0x165f1d[_0x353a('0xe0')](_0x52c889,_0x40ca3a[0x0],_0x1e4ce0,_0x553bb3,_0x337c19)[_0x353a('0x7a')](function(_0x301dc5){_0x45b2aa(_0x301dc5);})['catch'](function(_0x5667f1){_0x1883a4(_0x5667f1);});})[_0x353a('0x89')](function(_0x90424d){ut[_0x353a('0x59')]('[Preview][checkIsBlackList]',_0x90424d);_0x1883a4(ut[_0x353a('0x4b')](_0x353a('0xfc'),_0x553bb3,_0x337c19));});}else{_0x1883a4(ut[_0x353a('0x4b')](_0x52ec45[_0x353a('0x4b')],_0x553bb3,_0x337c19));}})[_0x353a('0x89')](function(_0x34deea){ut[_0x353a('0x59')]('[Preview][getContactPreview]',_0x34deea);_0x1883a4(ut['message'](_0x353a('0xfc'),![],!![]));});});};Preview['prototype'][_0x353a('0xf8')]=function(_0x5bad77){if(_[_0x353a('0x62')](_0x5bad77)||_[_0x353a('0xe6')](_0x5bad77)||!_[_0x353a('0x62')](_0x5bad77[0x0][_0x353a('0xfd')])&&_[_0x353a('0x62')](_0x5bad77[0x0][_0x353a('0xfd')][_0x353a('0x4d')])){ut['logger'](_0x353a('0xfe'),_0x5bad77);return{'isValid':![],'message':'Empty\x20Contact'};}var _0x37ef50=this[_0x353a('0x15')][_0x5bad77[0x0]['Queue'][_0x353a('0x4d')]];_0x37ef50[_0x353a('0x4b')]=_0x353a('0x90');if(_['isNil'](_0x37ef50)){ut[_0x353a('0x59')](_0x353a('0xff'),_0x37ef50);return{'isValid':![],'message':_0x353a('0x100')};}if(!this['isTrunkReachable'](_0x37ef50[_0x353a('0x4c')])){ut[_0x353a('0x59')](_0x353a('0x101'),'campaign\x20Name:\x20'+_0x37ef50[_0x353a('0x4d')]+_0x353a('0x102'));if(!this[_0x353a('0x8f')](_0x37ef50[_0x353a('0x103')])){ut['logger'](_0x353a('0x101'),_0x37ef50['name']+_0x353a('0x104'));return{'isValid':![],'message':_0x353a('0x105')};}}if(!ut['isActive'](_0x37ef50[_0x353a('0x38')])){ut[_0x353a('0x59')]('[Preview][validateContact][Campaign\x20Active]',_0x37ef50[_0x353a('0x4d')]+_0x353a('0x106'));return{'isValid':![],'message':_0x353a('0x107')+_0x37ef50['name']+_0x353a('0x106')};}return{'isValid':!![],'message':_0x353a('0x108')};};Preview[_0x353a('0x10')][_0x353a('0xe7')]=function(_0x1b879a,_0x1894f1,_0x150ddd,_0x24a535){var _0xfcfb7e=this;return new BPromise(function(_0x4f2ea8,_0x5d2301){var _0x5ad3eb=_0x1b879a[_0x353a('0xa1')];var _0x309734=_0xfcfb7e[_0x353a('0x8f')](_0x1894f1[_0x353a('0x4c')])?util[_0x353a('0x52')](_0x353a('0x109'),_0x1894f1[_0x353a('0x4c')][_0x353a('0x4d')],_[_0x353a('0x62')](_0x1894f1[_0x353a('0x3c')])?'':_0x1894f1[_0x353a('0x3c')][_0x353a('0x10a')]()||'',_0x1894f1[_0x353a('0x10b')]>0x0?_0x150ddd[_0x353a('0xe1')]['phone'][_0x353a('0x10c')](_0x1894f1['dialCutDigit']):_0x150ddd[_0x353a('0xe1')][_0x353a('0xe2')]):util[_0x353a('0x52')](_0x353a('0x109'),_['isNil'](_0x1894f1[_0x353a('0x103')])?_0x1894f1['Trunk']['name']:_0x1894f1[_0x353a('0x103')]['name'],_[_0x353a('0x62')](_0x1894f1[_0x353a('0x3c')])?'':_0x1894f1[_0x353a('0x3c')][_0x353a('0x10a')]()||'',_0x1894f1[_0x353a('0x10b')]>0x0?_0x150ddd[_0x353a('0xe1')][_0x353a('0xe2')]['substring'](_0x1894f1[_0x353a('0x10b')]):_0x150ddd['Contact'][_0x353a('0xe2')]);var _0x191cb1=_0xfcfb7e[_0x353a('0x8f')](_0x1894f1[_0x353a('0x4c')])?ut[_0x353a('0x10d')](_0x1894f1['Trunk'][_0x353a('0x4f')],_0x1894f1['dialOriginateCallerIdName'],_0x1894f1['dialRandomLastDigitCallerIdNumber']>0x0?ut[_0x353a('0x10e')](_0x1894f1['dialOriginateCallerIdNumber'],_0x1894f1[_0x353a('0x10f')]):_0x1894f1['dialOriginateCallerIdNumber']):ut[_0x353a('0x10d')](_['isNil'](_0x1894f1[_0x353a('0x103')])?_0x1894f1[_0x353a('0x4c')][_0x353a('0x4f')]:_0x1894f1[_0x353a('0x103')][_0x353a('0x4f')],_0x1894f1[_0x353a('0x3a')],_0x1894f1[_0x353a('0x10f')]>0x0?ut[_0x353a('0x10e')](_0x1894f1[_0x353a('0x3b')],_0x1894f1['dialRandomLastDigitCallerIdNumber']):_0x1894f1['dialOriginateCallerIdNumber']);if(_0x191cb1){_0x1b879a['originatecalleridname']=ut[_0x353a('0x110')](_0x191cb1);_0x1b879a['originatecalleridnum']=ut[_0x353a('0x111')](_0x191cb1);}var _0x3a96d4=ut[_0x353a('0x112')](_0x1894f1,_0x150ddd,_0x309734,_0x191cb1,_0x5ad3eb,_0x1b879a);_['merge'](_0x1b879a,ut[_0x353a('0x113')](_0x3a96d4));_0x1b879a['starttime']=moment()[_0x353a('0x52')](_0x353a('0x81'));ami[_0x353a('0x6d')](ut[_0x353a('0x114')](_0x1b879a,_0x1894f1,_0x3a96d4,_0x1b879a[_0x353a('0xb8')],_0x24a535))['then'](function(_0x42a5fd){_0x1894f1['originated']+=0x1;logger[_0x353a('0x63')](_0x353a('0x115'),_0x5ad3eb,_0x353a('0xa2'),_0x1894f1[_0x353a('0x4d')],_0x353a('0x67'),_0x1894f1['originated']);_0x4f2ea8(_0x42a5fd);})[_0x353a('0x89')](function(_0xcc00cd){ut[_0x353a('0xdb')](_0x1b879a,0xe,_0x353a('0x116'));rpcDb[_0x353a('0xd9')](_0x1b879a,_0x353a('0x117'));_0x5d2301(_0xcc00cd);});});};Preview[_0x353a('0x10')][_0x353a('0x23')]=function(_0x1a24a2){if(this[_0x353a('0x18')][_0x1a24a2[_0x353a('0x9c')]]){this[_0x353a('0x18')][_0x1a24a2['linkedid']][_0x353a('0x6f')]=_0x1a24a2[_0x353a('0x6f')];}};Preview['prototype']['syncOriginateResponse']=function(_0x45c231){var _0x272c4e=this;var _0xb78514=this['actions'][_0x45c231[_0x353a('0x118')]];if(_0xb78514){if(_0xb78514[_0x353a('0xe5')]&&this['agents'][_0xb78514[_0x353a('0xe5')]]){ut[_0x353a('0x119')](_0xb78514,this['agents'][_0xb78514[_0x353a('0xe5')]][_0x353a('0x4d')],this[_0x353a('0x19')][_0xb78514[_0x353a('0xe5')]]['id']);}var _0x5da5b7=_[_0x353a('0x11a')](_0xb78514);_0x5da5b7[_0x353a('0x9e')]=moment()['format'](_0x353a('0x81'));var _0x56b7d3=_0x272c4e[_0x353a('0x15')][_0xb78514[_0x353a('0x66')]];if(ut[_0x353a('0x11b')](_0x45c231[_0x353a('0x11c')])){if(_0xb78514[_0x353a('0xc9')]){rpcDb[_0x353a('0xca')](_0xb78514[_0x353a('0x11d')]);}if(_0xb78514[_0x353a('0xb8')]){rpcDb['disableContact'](_0xb78514[_0x353a('0x11d')]);}ami['emit']('custom:agentringnoanswer',ut[_0x353a('0xa3')](_0xb78514,_0x353a('0x11e')));this['callProgressDetectingAgent'](_0x5da5b7,_0x56b7d3,_0x45c231);}else{_0xb78514[_0x353a('0x80')]=moment()[_0x353a('0x52')](_0x353a('0x81'));ut[_0x353a('0xdb')](_0x5da5b7,0x4,_0x353a('0x11f'));rpcDb[_0x353a('0xd9')](_0x5da5b7,'[callProgressDetectingAgent][logAnswer]');}}};Preview[_0x353a('0x10')][_0x353a('0x1d')]=function(_0x48d2ed){var _0x3df8a5=this;var _0x2a2eb6=this['actions'][_0x48d2ed['linkedid']];var _0x2722b1;if(_0x2a2eb6){_0x2722b1=this[_0x353a('0x15')][_0x2a2eb6['queue']];logger[_0x353a('0x63')](_0x353a('0x120'),_0x48d2ed[_0x353a('0x9c')],_0x353a('0xa2'),_0x2722b1[_0x353a('0x4d')],_0x353a('0x68'),_0x2722b1[_0x353a('0x32')]);}if(this['actions'][_0x48d2ed['linkedid']]&&_0x48d2ed[_0x353a('0x9c')]!==_0x48d2ed[_0x353a('0xa1')]){if(_0x48d2ed[_0x353a('0x121')]==='16'&&this[_0x353a('0x18')][_0x48d2ed[_0x353a('0x9c')]][_0x353a('0x69')]){this[_0x353a('0x91')](_0x48d2ed,_0x48d2ed[_0x353a('0x9c')],_0x48d2ed['cause']);}else if(this[_0x353a('0x18')][_0x48d2ed['linkedid']][_0x353a('0x69')]){logger[_0x353a('0x63')](_0x353a('0x122'),_0x48d2ed[_0x353a('0x9c')],_0x48d2ed[_0x353a('0x121')],_0x353a('0xa2'),_0x2722b1[_0x353a('0x4d')],_0x353a('0x68'),_0x2722b1[_0x353a('0x32')]);this[_0x353a('0x91')](_0x48d2ed,_0x48d2ed[_0x353a('0x9c')],_0x48d2ed[_0x353a('0x121')]);}}else if(_0x2a2eb6&&_[_0x353a('0x62')](_0x2a2eb6[_0x353a('0x123')])&&_0x2722b1[_0x353a('0x124')]&&_0x48d2ed['linkedid']===_0x48d2ed[_0x353a('0xa1')]&&_['isNil'](_0x48d2ed[_0x353a('0xd8')])&&_0x48d2ed[_0x353a('0x121')]==='16'&&_0x48d2ed[_0x353a('0x125')]==='6'&&_[_0x353a('0xd6')](_0x2a2eb6[_0x353a('0x126')])){if(_0x2a2eb6[_0x353a('0xc9')]){rpcDb[_0x353a('0xca')](_0x2a2eb6[_0x353a('0x11d')]);}if(_0x2a2eb6[_0x353a('0xb8')]){rpcDb[_0x353a('0xcb')](_0x2a2eb6[_0x353a('0x11d')]);}_0x48d2ed['reason']='22';this[_0x353a('0xd5')](_0x2a2eb6,_0x2722b1,_0x48d2ed);}else if(_0x2a2eb6&&_0x2a2eb6['transfer']){if(_0x48d2ed[_0x353a('0x121')]==='16'&&this[_0x353a('0x18')][_0x48d2ed['linkedid']][_0x353a('0x69')]){logger['info']('[syncHangup][talking][transfer]',_0x48d2ed[_0x353a('0x9c')],_0x48d2ed[_0x353a('0x121')],'\x20Queue',_0x2722b1['name'],_0x353a('0x68'),_0x2722b1[_0x353a('0x32')]);this[_0x353a('0x91')](_0x48d2ed,_0x48d2ed[_0x353a('0x9c')],_0x48d2ed[_0x353a('0x121')]);}else if(this[_0x353a('0x18')][_0x48d2ed[_0x353a('0x9c')]]['dialAnswer']){logger[_0x353a('0x63')]('[syncHangup][talking][cause]',_0x48d2ed[_0x353a('0x9c')],_0x48d2ed[_0x353a('0x121')],_0x353a('0xa2'),_0x2722b1[_0x353a('0x4d')],_0x353a('0x68'),_0x2722b1[_0x353a('0x32')]);this[_0x353a('0x91')](_0x48d2ed,_0x48d2ed[_0x353a('0x9c')],_0x48d2ed['cause']);}}};Preview[_0x353a('0x10')][_0x353a('0x21')]=function(_0x2ab163){if(this[_0x353a('0x18')][_0x2ab163['destlinkedid']]&&_0x2ab163['destlinkedid']!==_0x2ab163[_0x353a('0x127')]){this[_0x353a('0x91')](_0x2ab163,_0x2ab163['destlinkedid'],_0x2ab163['dialstatus']);}};Preview['prototype']['syncHangupRequest']=function(_0x1e0fde){if(this[_0x353a('0x18')][_0x1e0fde[_0x353a('0x9c')]]&&_0x1e0fde[_0x353a('0x9c')]!==_0x1e0fde[_0x353a('0xa1')]&&!this[_0x353a('0x18')][_0x1e0fde[_0x353a('0x9c')]][_0x353a('0x69')]){if(_0x1e0fde['cause']==='1'){this[_0x353a('0x91')](_0x1e0fde,_0x1e0fde[_0x353a('0x9c')],_0x1e0fde[_0x353a('0x121')]);}}};Preview[_0x353a('0x10')][_0x353a('0x128')]=function(_0x4dcb50,_0x500de6,_0x403586){if(this['actions'][_0x4dcb50]){if(_[_0x353a('0x62')](this[_0x353a('0x18')][_0x4dcb50]['variables'])){this[_0x353a('0x18')][_0x4dcb50][_0x353a('0x129')]={};}this[_0x353a('0x18')][_0x4dcb50][_0x353a('0x129')][_0x500de6]=_0x403586;}};Preview['prototype'][_0x353a('0x25')]=function(_0x2cb029){try{if(!_['isNil'](_0x2cb029)){if(ut[_0x353a('0x12a')](_[_0x353a('0x12b')](_0x2cb029[_0x353a('0x12c')])[0x0])){this[_0x353a('0x128')](_0x2cb029[_0x353a('0xa1')],_[_0x353a('0x12b')](_0x2cb029[_0x353a('0x12c')])[0x0],_0x2cb029[_0x353a('0x12d')]);}}}catch(_0x1c3513){logger[_0x353a('0x12e')](_0x353a('0x12f'),util[_0x353a('0x130')](_0x1c3513,{'showHidden':![],'depth':null}));}};Preview[_0x353a('0x10')][_0x353a('0x27')]=function(_0x5f2bd2){if(_0x5f2bd2){if(this[_0x353a('0x18')][_0x5f2bd2[_0x353a('0x131')]]){this['actions'][_0x5f2bd2[_0x353a('0x131')]][_0x353a('0x126')]=!![];}}};Preview[_0x353a('0x10')][_0x353a('0x29')]=function(_0x2be0c6){if(_0x2be0c6){if(this['actions'][_0x2be0c6[_0x353a('0x132')]]){this[_0x353a('0x18')][_0x2be0c6[_0x353a('0x132')]]['transfer']=!![];}}};module['exports']=Preview;
\ No newline at end of file
+var _0x187b=['BUSY','outboundBusyCallsDay','countbusyretry','Busy','dialBusyRetryFrequency','unlockAgent','NOANSWER','[callProgressDetectingCustomer][logNoAnswer]','[callProgressDetectingCustomer][logNoAnswerGlobal]','dialNoAnswerMaxRetry','countnoanswerretry','dialNoAnswerRetryFrequency','activeContact','countcongestionretry','Congestion','[callProgressDetectingCustomer][logCongestion]','dialCongestionMaxRetry','rescheduleContact','scheduledAt','CANCEL','AgentReject','unlockContact','idContact','decrementTalkink','[default]','[Dialer][decrementTalkink][no\x20Hangup][Preview]','dialstatus','[callProgressDetectingCustomer][logUnknownGlobal]','\x20Queue','ANSWER','destlinkedid','callProgressDetectingAgent','isUndefined','object','logAgent','NoSuchNumber','[callProgressDetectingAgent][logNoSuch]','createAgentHistory','[callProgressDetectingAgent][logNoAnswer]','[callProgressDetectingAgent][logBusy]','[callProgressDetectingAgent][logCongestion]','[callProgressDetectingAgent][logAnswerAGI]','reason','[callProgressDetectingAgent]','[originated][decrement][callProgressDetectingAgent]','Contact','lookAgent','isEmpty','execCall','[Preview][execCall][success]','Queue:\x20','\x20IdHopper:\x20','custom:agentcalled','[Preview][execCall][failure]','Call\x20failed','outboundBlacklistCallsDay','createHistory','[Blacklist][error]','Contact\x20in\x20black\x20List','SIP/%s','unmonitored','execRun','recallme','validateContact','isValid','checkIsBlackList','Contact.phone','checkInBlack','[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','TrunkBackup','\x20Trunk\x20Backup\x20is\x20not\x20active','Trunk\x20not\x20work','[Preview][validateContact][Campaign\x20Active]','\x20Not\x20Active','Is\x20Valid','SIP/%s/%s%s','dialPrefix','trim','dialCutDigit','phone','substring','getCallerId','dialOriginateCallerIdName','dialRandomLastDigitCallerIdNumber','getCallerIdRandom','originatecalleridname','extractCalleridName','originatecalleridnum','extractCalleridNumber','addVariables','variablesAction','[originated][increment]','[originateFailure][logOriginateFailure]','syncOriginateResponse','actionid','logLookAgent','clone','isFailure','response','disableContact','custom:agentringnoanswer','rejected','Answer','[callProgressDetectingAgent][logAnswer]','syncHangup','[syncHangup][talking]','cause','dialQueueProject','channelstate','transfer','[syncHangup][talking][transfer]','syncHangupRequest','variables','syncVarSet','filterKey','keys','variable','addVariable','value','error','inspect','transfertargetlinkedid','syncBlindTransfer','transfererlinkedid','exports','util','bluebird','uuid','moment','md5','../../../config/logger','actionPreview','./action','./util/util','defaults','redis','localhost','prototype','enqueue','tail','finally','sequence','campaignsPreview','voiceQueues','trunks','actions','agents','originateresponse','bind','hanguprequest','syncDialEnd','syncNewExten','syncAttendedTransfer','blindtransfer','loopCampaigns','type','outbound','name','strategy','answered','available','pTalking','sumBillable','sumDuration','sumHoldTime','talking','unmanaged','abandoned','loggedInDb','dialActive','dialMethod','dialOriginateCallerIdNumber','dialOriginateTimeout','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundCongestionCallsDay','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalLowerLimit','predictiveIntervalPauses','predictiveIntervalTotalCalls','message','originated','Trunk','active','callerid','Interval','stringify','voice:queue:%s','voice_queue:save','format','voice_queue_channel:remove','sendMessageOneNotActive','paused','NOT_ACTIVE','[CampaignPreview]\x20Campaign\x20Queue:\x20','logger','\x20is\x20disactive','syncCampaigns','clockClearZombieChannels','hasOwnProperty','preview','setMessage','recallMe','isNil','info','[clearZombieChannels][talking]','Queue','queue','originated:\x20','dialAnswer','pick','contactId','VoiceQueueId','ListId','status','channel','catch','updateOriginated','[clearZombieChannel]','loggerError','[Dialer][checkChannel][pTalking][Preview]','[Dialer][checkChannel][Preview]','[action]','clearZombieChannel','getContactRecallMe','then','scheduledat','dialRecallMeTimeout','run','logger2','[RecallMe]','starttime','logCustomer','dialRecallInQueue','rescheduleContactInQueue','createBody','createCustomerHistory','[HistoryDialRecallInQueue][historyCatch]','RecallFailedTimeout','[HistoryRecallClose]','createCustomerFinal','[getContactRecallMe]','IsNotLoggedIn','loggedIn','AGENTS_NOT_LOGGED','isActive','isTrunkReachable','TRUNK_IS_NOT_REACHABLE','ACTIVE','callProgressDetectingCustomer','countglobal','totalGlobal','[callProgressDetectingCustomer][logNoSuch]','dialGlobalMaxRetry','cloneAction','Global','[callProgressDetectingCustomer][logNoSuchGlobal]','YYYY-MM-DD\x20HH:mm:ss','responsetime','answertime','[syncHangup][talking][increment]','uniqueid','pTalking:\x20','emit','buildObj','connect','acw','custom:agentConnectPreview','buildAcw','complete','[16]','[callProgressDetectingCustomer][logAnswerGlobal]','crateCustomerReportQueue','talktime','linkedid'];(function(_0x3825a8,_0x2ce1a2){var _0xabc9bc=function(_0x101073){while(--_0x101073){_0x3825a8['push'](_0x3825a8['shift']());}};_0xabc9bc(++_0x2ce1a2);}(_0x187b,0x87));var _0xb187=function(_0x12308a,_0x3b3a0e){_0x12308a=_0x12308a-0x0;var _0x1ada4a=_0x187b[_0x12308a];return _0x1ada4a;};'use strict';var util=require(_0xb187('0x0'));var _=require('lodash');var BPromise=require(_0xb187('0x1'));var uuid=require(_0xb187('0x2'));var moment=require(_0xb187('0x3'));var md5=require(_0xb187('0x4'));var Redis=require('ioredis');var config=require('../../../config/environment');var logger=require('../../../config/logger')('preview');var loggerAction=require(_0xb187('0x5'))(_0xb187('0x6'));var ami=require('../ami');var rpcDb=require('./rpcDb');var Action=require(_0xb187('0x7'));var ut=require(_0xb187('0x8'));config['redis']=_[_0xb187('0x9')](config[_0xb187('0xa')],{'host':_0xb187('0xb'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var Sequence=function(){};Sequence[_0xb187('0xc')][_0xb187('0xd')]=function(_0x334408){this['tail']=this[_0xb187('0xe')]?this['tail'][_0xb187('0xf')](_0x334408):_0x334408();};function Preview(_0x16e30b){this[_0xb187('0x10')]=new Sequence();this[_0xb187('0x11')]=_0x16e30b[_0xb187('0x12')];this[_0xb187('0x13')]=_0x16e30b[_0xb187('0x13')];this[_0xb187('0x14')]={};this[_0xb187('0x15')]=_0x16e30b[_0xb187('0x15')];this['clockClearZombieChannels']=0x0;ami['on'](_0xb187('0x16'),this['syncOriginateResponse'][_0xb187('0x17')](this));ami['on']('hangup',this['syncHangup']['bind'](this));ami['on'](_0xb187('0x18'),this['syncHangupRequest'][_0xb187('0x17')](this));ami['on']('dialend',this[_0xb187('0x19')][_0xb187('0x17')](this));ami['on']('newexten',this[_0xb187('0x1a')]['bind'](this));ami['on']('varset',this['syncVarSet'][_0xb187('0x17')](this));ami['on']('attendedtransfer',this[_0xb187('0x1b')][_0xb187('0x17')](this));ami['on'](_0xb187('0x1c'),this['syncBlindTransfer'][_0xb187('0x17')](this));this[_0xb187('0x1d')](this['campaignsPreview']);}function emit(_0x1aabf5,_0x1e91ae,_0x44f11e){io['to'](_0x1aabf5)['emit'](_0x1e91ae,_0x44f11e);}function emitCampaignPreview(_0x4063c5){if(_0x4063c5[_0xb187('0x1e')]===_0xb187('0x1f')){var _0x2fadc2={'id':_0x4063c5['id'],'name':_0x4063c5[_0xb187('0x20')],'strategy':_0x4063c5[_0xb187('0x21')],'answered':_0x4063c5[_0xb187('0x22')],'available':_0x4063c5[_0xb187('0x23')],'loggedIn':_0x4063c5['loggedIn'],'pTalking':_0x4063c5[_0xb187('0x24')],'sumBillable':_0x4063c5[_0xb187('0x25')],'sumDuration':_0x4063c5[_0xb187('0x26')],'sumHoldTime':_0x4063c5[_0xb187('0x27')]||0x0,'talking':_0x4063c5[_0xb187('0x28')],'total':_0x4063c5['total'],'type':_0x4063c5[_0xb187('0x1e')],'unmanaged':_0x4063c5[_0xb187('0x29')],'abandoned':_0x4063c5[_0xb187('0x2a')],'waiting':_0x4063c5['waiting'],'loggedInDb':_0x4063c5[_0xb187('0x2b')],'dialActive':_0x4063c5[_0xb187('0x2c')],'dialMethod':_0x4063c5[_0xb187('0x2d')],'dialOriginateCallerIdName':_0x4063c5['dialOriginateCallerIdName'],'dialOriginateCallerIdNumber':_0x4063c5[_0xb187('0x2e')],'dialOriginateTimeout':_0x4063c5[_0xb187('0x2f')],'dialPrefix':_0x4063c5['dialPrefix'],'outboundAnswerAgiCallsDay':_0x4063c5[_0xb187('0x30')],'outboundAnswerCallsDay':_0x4063c5[_0xb187('0x31')],'outboundBlacklistCallsDay':_0x4063c5['outboundBlacklistCallsDay'],'outboundBusyCallsDay':_0x4063c5['outboundBusyCallsDay'],'outboundCongestionCallsDay':_0x4063c5[_0xb187('0x32')],'outboundDropCallsDayACS':_0x4063c5['outboundDropCallsDayACS'],'outboundDropCallsDayCallersExit':_0x4063c5[_0xb187('0x33')],'outboundDropCallsDayTimeout':_0x4063c5[_0xb187('0x34')],'outboundNoAnswerCallsDay':_0x4063c5[_0xb187('0x35')],'outboundNoSuchCallsDay':_0x4063c5[_0xb187('0x36')],'outboundOriginateFailureCallsDay':_0x4063c5[_0xb187('0x37')],'outboundReCallsDay':_0x4063c5[_0xb187('0x38')],'outboundRejectCallsDay':_0x4063c5[_0xb187('0x39')],'outboundUnknownCallsDay':_0x4063c5[_0xb187('0x3a')],'predictiveIntervalAnsweredCalls':_0x4063c5[_0xb187('0x3b')],'predictiveIntervalAvgHoldtime':_0x4063c5['predictiveIntervalAvgHoldtime'],'predictiveIntervalAvgTalktime':_0x4063c5[_0xb187('0x3c')],'predictiveIntervalDroppedCallsCallersExit':_0x4063c5[_0xb187('0x3d')],'predictiveIntervalDroppedCallsTimeout':_0x4063c5[_0xb187('0x3e')],'predictiveIntervalErlangCalls':_0x4063c5[_0xb187('0x3f')],'predictiveIntervalErlangCallsDroppedCalls':_0x4063c5[_0xb187('0x40')],'predictiveIntervalHitRate':_0x4063c5['predictiveIntervalHitRate'],'predictiveIntervalLowerLimit':_0x4063c5[_0xb187('0x41')],'predictiveIntervalMultiplicativeFactor':_0x4063c5['predictiveIntervalMultiplicativeFactor'],'predictiveIntervalPauses':_0x4063c5[_0xb187('0x42')],'predictiveIntervalTotalCalls':_0x4063c5[_0xb187('0x43')],'message':_0x4063c5[_0xb187('0x44')],'originated':_0x4063c5[_0xb187('0x45')]};if(_0x4063c5['Trunk']){_0x2fadc2[_0xb187('0x46')]={'id':_0x4063c5[_0xb187('0x46')]['id'],'name':_0x4063c5[_0xb187('0x46')][_0xb187('0x20')],'active':_0x4063c5[_0xb187('0x46')][_0xb187('0x47')],'callerid':_0x4063c5[_0xb187('0x46')][_0xb187('0x48')]};}if(_0x4063c5[_0xb187('0x49')]){_0x2fadc2[_0xb187('0x49')]={'id':_0x4063c5[_0xb187('0x49')]['id'],'name':_0x4063c5[_0xb187('0x49')]['name']};}var _0x4908e5=md5(JSON[_0xb187('0x4a')](_0x2fadc2));if(_0x4063c5[_0xb187('0x4')]!==_0x4908e5){_0x4063c5[_0xb187('0x4')]=_0x4908e5;emit(util['format'](_0xb187('0x4b'),_0x2fadc2[_0xb187('0x20')]),_0xb187('0x4c'),_0x2fadc2);}}}function emitVoiceQueueChannelRemove(_0xf5c11f){emit(util[_0xb187('0x4d')]('voice:queue:%s',_0xf5c11f[_0xb187('0x20')]),_0xb187('0x4e'),_0xf5c11f);}function notSendMessagesQueue(_0x382e77){if(_0x382e77['sendMessageOneNotActive']){if(_0x382e77[_0xb187('0x45')]===0x0&&_0x382e77[_0xb187('0x24')]===0x0){_0x382e77[_0xb187('0x4f')]=![];_0x382e77['available']=0x0;_0x382e77[_0xb187('0x50')]=0x0;_0x382e77[_0xb187('0x44')]=_0xb187('0x51');ut['logger'](_0xb187('0x52'),_0x382e77[_0xb187('0x20')]+'\x20is\x20not\x20active');}else{_0x382e77[_0xb187('0x44')]='IS_DISACTIVED';ut[_0xb187('0x53')](_0xb187('0x52'),_0x382e77[_0xb187('0x20')]+_0xb187('0x54'));}emitCampaignPreview(_0x382e77);}}Preview[_0xb187('0xc')][_0xb187('0x1d')]=function(){var _0x1aa8cb=this;setInterval(function(){_0x1aa8cb['syncCampaigns']();},0x7cf);};Preview[_0xb187('0xc')][_0xb187('0x55')]=function(){var _0x5987ab=this[_0xb187('0x11')];this[_0xb187('0x56')]+=0x1;for(var _0x47a952 in _0x5987ab){if(_0x5987ab[_0xb187('0x57')](_0x47a952)&&(_0x5987ab[_0x47a952][_0xb187('0x2d')]===_0xb187('0x58')||_0x5987ab[_0x47a952]['dialMethod']==='booked')&&_0x5987ab[_0x47a952][_0xb187('0x1e')]==='outbound'){if(this[_0xb187('0x56')]>0x7){this[_0xb187('0x56')]=0x0;this['clearZombieChannels']();}}if(_0x5987ab[_0xb187('0x57')](_0x47a952)&&_0x5987ab[_0x47a952]['dialMethod']==='preview'&&_0x5987ab[_0x47a952][_0xb187('0x1e')]==='outbound'){if(_0x5987ab[_0x47a952][_0xb187('0x2c')]){this[_0xb187('0x59')](_0x5987ab[_0x47a952]);this[_0xb187('0x5a')](_0x5987ab[_0x47a952]);}else{notSendMessagesQueue(_0x5987ab[_0x47a952]);}}}};Preview[_0xb187('0xc')]['clearZombieChannel']=function(_0x1c8ad1){var _0x35273e=this;this[_0xb187('0x10')][_0xb187('0xd')](function(){if(!_[_0xb187('0x5b')](_0x35273e[_0xb187('0x14')][_0x1c8ad1])){loggerAction[_0xb187('0x5c')](_0xb187('0x5d'),_0x1c8ad1,_0xb187('0x5e'),_0x35273e['actions'][_0x1c8ad1][_0xb187('0x5f')],_0xb187('0x60'),JSON[_0xb187('0x4a')](_0x35273e['campaignsPreview'][_0x35273e[_0xb187('0x14')][_0x1c8ad1][_0xb187('0x5f')]][_0xb187('0x45')]),'pTalking:\x20',JSON[_0xb187('0x4a')](_0x35273e['campaignsPreview'][_0x35273e['actions'][_0x1c8ad1][_0xb187('0x5f')]][_0xb187('0x24')]),JSON[_0xb187('0x4a')](_0x35273e[_0xb187('0x14')][_0x1c8ad1][_0xb187('0x61')]),JSON['stringify'](_[_0xb187('0x62')](_0x35273e['actions'][_0x1c8ad1],[_0xb187('0x63'),'UserId',_0xb187('0x64'),_0xb187('0x65')])));return ami['Action']({'action':_0xb187('0x66'),'channel':_0x35273e[_0xb187('0x14')][_0x1c8ad1][_0xb187('0x67')]})[_0xb187('0x68')](function(_0x6ccd09){if(_0x6ccd09[_0xb187('0x44')]==='No\x20such\x20channel'){setTimeout(function(){if(_0x35273e[_0xb187('0x14')][_0x1c8ad1]){ut[_0xb187('0x69')](_0x35273e['campaignsPreview'][_0x35273e[_0xb187('0x14')][_0x1c8ad1][_0xb187('0x5f')]],_0xb187('0x6a'));if(_0x35273e['actions'][_0x1c8ad1][_0xb187('0x61')]===!![]){ut['decrementTalkink'](_0x35273e['campaignsPreview'][_0x35273e[_0xb187('0x14')][_0x1c8ad1][_0xb187('0x5f')]],_0xb187('0x6a'));ut[_0xb187('0x6b')](_0xb187('0x6c')+_0x1c8ad1,_0x35273e[_0xb187('0x14')][_0x1c8ad1][_0xb187('0x5f')]);}ut[_0xb187('0x6b')](_0xb187('0x6d')+_0x1c8ad1,_0x35273e[_0xb187('0x14')][_0x1c8ad1][_0xb187('0x5f')]);delete _0x35273e[_0xb187('0x14')][_0x1c8ad1];}},0x2328);}});}});};Preview[_0xb187('0xc')]['clearZombieChannels']=function(){var _0x10f3f3=this;loggerAction[_0xb187('0x5c')](_0xb187('0x6e'),_['size'](this[_0xb187('0x14')]));for(var _0x1a1c99 in this[_0xb187('0x14')]){if(_0x10f3f3['actions'][_0xb187('0x57')](_0x1a1c99)){_0x10f3f3[_0xb187('0x6f')](_0x1a1c99);}}};Preview['prototype'][_0xb187('0x5a')]=function(_0x5ec80c){var _0x28fb25=this;rpcDb[_0xb187('0x70')](_0x5ec80c['id'],ut['agentReadyId'](this['agents']))[_0xb187('0x71')](function(_0x3efc59){if(!_[_0xb187('0x5b')](_0x3efc59)){for(var _0x425de6=0x0;_0x425de6<_0x3efc59['length'];_0x425de6+=0x1){if(ut['getDiff'](_0x3efc59[_0x425de6][_0xb187('0x72')])<_0x5ec80c[_0xb187('0x73')]*0x3c){_0x28fb25[_0xb187('0x74')](_0x3efc59[_0x425de6]['id'])[_0xb187('0x71')](ut[_0xb187('0x75')](_0xb187('0x76')))[_0xb187('0x68')](ut[_0xb187('0x75')](_0xb187('0x76')));}else{var _0xd15dfe=new Action(_0x3efc59[_0x425de6],_0x5ec80c);_0xd15dfe[_0xb187('0x77')]=moment()[_0xb187('0x4d')]('YYYY-MM-DD\x20HH:mm:ss');_0x5ec80c[_0xb187('0x38')]+=0x1;ut[_0xb187('0x78')](_0xd15dfe,0x17,'RecallInQueue');if(_0x5ec80c[_0xb187('0x79')]){rpcDb[_0xb187('0x7a')](ut[_0xb187('0x7b')](_0x3efc59[_0x425de6]));rpcDb[_0xb187('0x7c')](_0xd15dfe,_0xb187('0x7d'));}else{ut[_0xb187('0x78')](_0xd15dfe,0x16,_0xb187('0x7e'));rpcDb[_0xb187('0x7c')](_0xd15dfe,_0xb187('0x7f'));rpcDb[_0xb187('0x80')](_0xd15dfe,_0xb187('0x7f'));}}}}})['catch'](ut[_0xb187('0x75')](_0xb187('0x81')));};Preview[_0xb187('0xc')][_0xb187('0x59')]=function(_0x3c8b6a){_0x3c8b6a[_0xb187('0x4f')]=!![];if(ut[_0xb187('0x82')](_0x3c8b6a[_0xb187('0x83')])){_0x3c8b6a[_0xb187('0x44')]=_0xb187('0x84');}else if(!ut[_0xb187('0x85')](_0x3c8b6a[_0xb187('0x2c')])){_0x3c8b6a['message']='NOT_ACTIVE';}else if(!this[_0xb187('0x86')](_0x3c8b6a[_0xb187('0x46')])){if(!this[_0xb187('0x86')](_0x3c8b6a['TrunkBackup'])){_0x3c8b6a[_0xb187('0x44')]=_0xb187('0x87');}else{_0x3c8b6a[_0xb187('0x44')]=_0xb187('0x88');}}else{_0x3c8b6a['message']=_0xb187('0x88');}emitCampaignPreview(_0x3c8b6a);};Preview['prototype'][_0xb187('0x89')]=function(_0x43ef21,_0x3674c4,_0x595886){var _0x1a7917=this;var _0x2f819e=this[_0xb187('0x14')][_0x3674c4];var _0x5db11f=this[_0xb187('0x11')][_0x2f819e['queue']];var _0xaf2fac;if(_0x5db11f){switch(_0x595886){case'1':_0x5db11f['outboundNoSuchCallsDay']+=0x1;_0x2f819e[_0xb187('0x8a')]=ut[_0xb187('0x8b')](_0x2f819e);ut['logCustomer'](_0x2f819e,0x0,'NoSuchNumber');rpcDb[_0xb187('0x7c')](_0x2f819e,_0xb187('0x8c'));if(ut[_0xb187('0x8b')](_0x2f819e)>=_0x5db11f[_0xb187('0x8d')]){_0xaf2fac=ut[_0xb187('0x8e')](_0x2f819e,0xf,_0xb187('0x8f'));rpcDb[_0xb187('0x80')](_0xaf2fac,'[callProgressDetectingCustomer][logNoSuchGlobal]');}else{rpcDb[_0xb187('0x80')](_0x2f819e,_0xb187('0x90'));}delete this[_0xb187('0x14')][_0x43ef21['linkedid']];break;case'ANSWER':var _0x46f093=moment()[_0xb187('0x4d')](_0xb187('0x91'));_0x2f819e[_0xb187('0x92')]=_0x46f093;_0x2f819e[_0xb187('0x93')]=_0x46f093;_0x2f819e['dialAnswer']=!![];_0x5db11f['pTalking']+=0x1;logger[_0xb187('0x5c')](_0xb187('0x94'),_0x2f819e[_0xb187('0x95')],'\x20Queue',_0x5db11f[_0xb187('0x20')],_0xb187('0x96'),_0x5db11f['pTalking']);ami[_0xb187('0x97')]('custom:agentconnect',ut[_0xb187('0x98')](_0x2f819e,_0xb187('0x99')));if(_0x5db11f[_0xb187('0x9a')]){ami['emit'](_0xb187('0x9b'),ut[_0xb187('0x9c')](_0x2f819e));}break;case'16':ami[_0xb187('0x97')]('custom:agentcomplete',ut['buildObj'](_0x2f819e,_0xb187('0x9d')));emitVoiceQueueChannelRemove(ut['buildObj'](_0x2f819e,'complete'));_0x5db11f[_0xb187('0x31')]+=0x1;_0x5db11f['total']+=0x1;_0x5db11f['answered']+=0x1;ut['decrementTalkink'](_0x5db11f,_0xb187('0x9e'));_0x2f819e[_0xb187('0x8a')]=ut['totalGlobal'](_0x2f819e);ut[_0xb187('0x78')](_0x2f819e,0x4,'Answer');rpcDb['createCustomerHistory'](_0x2f819e,'[callProgressDetectingCustomer][logAnswer]');rpcDb[_0xb187('0x80')](_0x2f819e,_0xb187('0x9f'));rpcDb[_0xb187('0xa0')](_0x2f819e);_0x5db11f[_0xb187('0x26')]+=_0x2f819e[_0xb187('0xa1')];_0x5db11f['sumBillable']+=_0x2f819e[_0xb187('0xa1')];logger[_0xb187('0x5c')]('[syncHangup][talking][decrement]',_0x2f819e[_0xb187('0x95')],'\x20Queue',_0x5db11f['name'],_0xb187('0x96'),_0x5db11f['pTalking']);delete this[_0xb187('0x14')][_0x43ef21[_0xb187('0xa2')]];break;case _0xb187('0xa3'):_0x5db11f[_0xb187('0xa4')]+=0x1;_0x2f819e[_0xb187('0xa5')]+=0x1;_0x2f819e[_0xb187('0x8a')]=ut['totalGlobal'](_0x2f819e);ut[_0xb187('0x78')](_0x2f819e,0x5,_0xb187('0xa6'));rpcDb[_0xb187('0x7c')](_0x2f819e,'[callProgressDetectingCustomer][logBusy]');if(ut[_0xb187('0x8b')](_0x2f819e)>=_0x5db11f['dialGlobalMaxRetry']){_0xaf2fac=ut['cloneAction'](_0x2f819e,0xf,_0xb187('0x8f'));rpcDb[_0xb187('0x80')](_0xaf2fac,'[callProgressDetectingCustomer][logBusyGlobal]');}else{if(_0x2f819e['countbusyretry']>=_0x5db11f['dialBusyMaxRetry']){rpcDb[_0xb187('0x80')](_0x2f819e,'[callProgressDetectingCustomer][logBusy]');}else{rpcDb['rescheduleContact'](ut['scheduledAt'](_0x2f819e,'countbusyretry',_0x5db11f[_0xb187('0xa7')]),_0x2f819e[_0xb187('0xa8')],_0x2f819e['activeContact']);}}break;case _0xb187('0xa9'):_0x5db11f['outboundNoAnswerCallsDay']+=0x1;_0x2f819e['countnoanswerretry']+=0x1;_0x2f819e[_0xb187('0x8a')]=ut[_0xb187('0x8b')](_0x2f819e);ut['logCustomer'](_0x2f819e,0x3,'NoAnswer');rpcDb[_0xb187('0x7c')](_0x2f819e,_0xb187('0xaa'));if(ut[_0xb187('0x8b')](_0x2f819e)>=_0x5db11f[_0xb187('0x8d')]){_0xaf2fac=ut[_0xb187('0x8e')](_0x2f819e,0xf,_0xb187('0x8f'));rpcDb[_0xb187('0x80')](_0xaf2fac,_0xb187('0xab'));}else{if(_0x2f819e['countnoanswerretry']>=_0x5db11f[_0xb187('0xac')]){rpcDb['createCustomerFinal'](_0x2f819e,'[callProgressDetectingCustomer][logNoAnswer]');}else{rpcDb['rescheduleContact'](ut['scheduledAt'](_0x2f819e,_0xb187('0xad'),_0x5db11f[_0xb187('0xae')]),_0x2f819e[_0xb187('0xa8')],_0x2f819e[_0xb187('0xaf')]);}}break;case'CONGESTION':_0x5db11f['outboundCongestionCallsDay']+=0x1;_0x2f819e[_0xb187('0xb0')]+=0x1;_0x2f819e[_0xb187('0x8a')]=ut[_0xb187('0x8b')](_0x2f819e);ut[_0xb187('0x78')](_0x2f819e,0x8,_0xb187('0xb1'));rpcDb['createCustomerHistory'](_0x2f819e,_0xb187('0xb2'));if(ut[_0xb187('0x8b')](_0x2f819e)>=_0x5db11f[_0xb187('0x8d')]){_0xaf2fac=ut['cloneAction'](_0x2f819e,0xf,_0xb187('0x8f'));rpcDb['createCustomerFinal'](_0xaf2fac,'[callProgressDetectingCustomer][logCongestionGlobal]');}else{if(_0x2f819e[_0xb187('0xb0')]>=_0x5db11f[_0xb187('0xb3')]){rpcDb[_0xb187('0x80')](_0x2f819e,'[callProgressDetectingCustomer][logCongestion]');}else{rpcDb[_0xb187('0xb4')](ut[_0xb187('0xb5')](_0x2f819e,_0xb187('0xb0'),_0x5db11f['dialBusyRetryFrequency']),_0x2f819e[_0xb187('0xa8')],_0x2f819e[_0xb187('0xaf')]);}}break;case _0xb187('0xb6'):_0x5db11f[_0xb187('0x39')]+=0x1;_0x2f819e['countglobal']=ut[_0xb187('0x8b')](_0x2f819e);ut[_0xb187('0x78')](_0x2f819e,0x14,_0xb187('0xb7'));rpcDb['createCustomerHistory'](_0x2f819e,'[syncHangupRequest][logAgentReject]');if(_0x2f819e[_0xb187('0xa8')]){rpcDb[_0xb187('0xb8')](_0x2f819e['idContact']);}if(_0x2f819e[_0xb187('0xaf')]){rpcDb['disableContact'](_0x2f819e[_0xb187('0xb9')]);}break;default:if(_0x2f819e[_0xb187('0x61')]){ut[_0xb187('0xba')](_0x5db11f,_0xb187('0xbb'));ut['loggerError'](_0xb187('0xbc')+_0x5db11f[_0xb187('0x20')],_0x43ef21);}_0x5db11f[_0xb187('0x3a')]+=0x1;_0x2f819e['countglobal']=ut[_0xb187('0x8b')](_0x2f819e);ut[_0xb187('0x78')](_0x2f819e,0xc,_0x43ef21['cause-txt']||_0x43ef21[_0xb187('0xbd')]);rpcDb['createCustomerHistory'](_0x2f819e,'[callProgressDetectingCustomer][logUnknown]');if(ut[_0xb187('0x8b')](_0x2f819e)>=_0x5db11f[_0xb187('0x8d')]){_0xaf2fac=ut[_0xb187('0x8e')](_0x2f819e,0xf,'Global');rpcDb[_0xb187('0x80')](_0xaf2fac,'[callProgressDetectingCustomer][logUnknownGlobal]');}else{rpcDb['createCustomerFinal'](_0x2f819e,_0xb187('0xbe'));}delete this[_0xb187('0x14')][_0x43ef21[_0xb187('0xa2')]];}if(!(_0x2f819e[_0xb187('0x61')]&&_0x595886==='16')){ut['updateOriginated'](_0x5db11f,'[callProgressDetectingCustomer]');logger['info']('[originated][decrement][callProgressDetectingCustomer]',_0x2f819e[_0xb187('0x95')],_0xb187('0xbf'),_0x5db11f[_0xb187('0x20')],'originated:\x20',_0x5db11f[_0xb187('0x45')]);}if(_0x595886!==_0xb187('0xc0')){delete this['actions'][_0x43ef21[_0xb187('0xa2')]];delete this['actions'][_0x43ef21[_0xb187('0xc1')]];}}};Preview[_0xb187('0xc')][_0xb187('0xc2')]=function(_0x2151b0,_0x24fa01,_0x4f315f){if(_[_0xb187('0xc3')](_0x24fa01)&&'object'!==typeof _0x24fa01){return;}if(_[_0xb187('0xc3')](_0x4f315f)&&_0xb187('0xc4')!==typeof _0x4f315f){return;}switch(_0x4f315f['reason']){case'0':ut[_0xb187('0xc5')](_0x2151b0,0x0,_0xb187('0xc6'));rpcDb['createAgentHistory'](_0x2151b0,_0xb187('0xc7'));break;case'3':ut['logAgent'](_0x2151b0,0x3,'NoAnswer');rpcDb[_0xb187('0xc8')](_0x2151b0,_0xb187('0xc9'));break;case'5':ut[_0xb187('0xc5')](_0x2151b0,0x5,_0xb187('0xa6'));rpcDb[_0xb187('0xc8')](_0x2151b0,_0xb187('0xca'));break;case'8':ut[_0xb187('0xc5')](_0x2151b0,0x8,_0xb187('0xb1'));rpcDb[_0xb187('0xc8')](_0x2151b0,_0xb187('0xcb'));break;case'22':ut[_0xb187('0xc5')](_0x2151b0,0x16,'AnswerAGI');rpcDb['createAgentHistory'](_0x2151b0,_0xb187('0xcc'));break;default:ut['logAgent'](_0x2151b0,0xc,_0x4f315f[_0xb187('0xcd')]);rpcDb[_0xb187('0xc8')](_0x2151b0,_0xb187('0xcb'));}ut[_0xb187('0x69')](_0x24fa01,_0xb187('0xce'));logger['info'](_0xb187('0xcf'),_0x2151b0[_0xb187('0x95')],'\x20Queue',_0x24fa01[_0xb187('0x20')],_0xb187('0x60'),_0x24fa01['originated']);delete this['actions'][_0x2151b0[_0xb187('0x95')]];};Preview[_0xb187('0xc')]['checkInBlack']=function(_0x348a55,_0x1127b6,_0x472eb1,_0x2ba274,_0x191005){var _0x407fbb=this;return new BPromise(function(_0x3a3f8d,_0x1cbceb){if(_[_0xb187('0x5b')](_0x1127b6)||_[_0xb187('0x5b')](_0x1127b6['Contact'])||_[_0xb187('0x5b')](_0x1127b6[_0xb187('0xd0')]['phone'])||_[_0xb187('0x5b')](_0x1127b6[_0xb187('0x64')])){_0x1cbceb(ut[_0xb187('0x44')]('Contact\x20is\x20undefined',_0x2ba274,_0x191005));return;}var _0x2df7d1=uuid['v4']();var _0x4152a7=_0x407fbb[_0xb187('0x11')][_0x1127b6['Queue'][_0xb187('0x20')]];var _0x5c6882=_0x472eb1?_0x407fbb['agents'][_0x472eb1]['id']:undefined;_0x407fbb['actions'][_0x2df7d1]=new Action(_0x1127b6,_0x4152a7,_0x2df7d1,_0x472eb1,_0x5c6882);var _0x4b21af=_0x407fbb[_0xb187('0x14')][_0x2df7d1];_0x4b21af[_0xb187('0xa8')]=_0x2ba274;_0x4b21af[_0xb187('0xaf')]=_0x191005;_0x4b21af[_0xb187('0xd1')]=_0x472eb1;if(_[_0xb187('0xd2')](_0x348a55)){_0x407fbb[_0xb187('0xd3')](_0x4b21af,_0x4152a7,_0x1127b6,_0x472eb1)[_0xb187('0x71')](function(_0x412140){logger[_0xb187('0x5c')](_0xb187('0xd4'),_0xb187('0xd5')+_0x4b21af[_0xb187('0x5f')]+_0xb187('0xd6')+_0x4b21af[_0xb187('0xb9')],JSON[_0xb187('0x4a')](_0x412140));ami[_0xb187('0x97')](_0xb187('0xd7'),ut[_0xb187('0x98')](_0x4b21af,'called'));_0x3a3f8d(ut[_0xb187('0x44')]('Calling'));})[_0xb187('0x68')](function(_0xc52816){ut[_0xb187('0x53')](_0xb187('0xd8'),_0xc52816);_0x1cbceb(ut[_0xb187('0x44')](_0xb187('0xd9'),_0x2ba274,_0x191005));});}else{_0x4152a7[_0xb187('0xda')]+=0x1;ut['logBlacklist'](_0x4b21af);rpcDb[_0xb187('0xdb')](_0x4b21af,_0xb187('0xdc'));delete _0x407fbb[_0xb187('0x14')][_0x2df7d1];_0x1cbceb(ut[_0xb187('0x44')](_0xb187('0xdd'),_0x2ba274,_0x191005));}});};Preview[_0xb187('0xc')]['isTrunkReachable']=function(_0x25d106){return!_[_0xb187('0x5b')](_0x25d106)&&!_[_0xb187('0x5b')](_0x25d106[_0xb187('0x20')])&&!_[_0xb187('0x5b')](_0x25d106[_0xb187('0x47')])&&_0x25d106['active']&&!_[_0xb187('0x5b')](this[_0xb187('0x13')][util[_0xb187('0x4d')](_0xb187('0xde'),_0x25d106['name'])])&&!_['isNil'](this[_0xb187('0x13')][util['format']('SIP/%s',_0x25d106[_0xb187('0x20')])][_0xb187('0x66')])&&(this['trunks'][util[_0xb187('0x4d')](_0xb187('0xde'),_0x25d106[_0xb187('0x20')])][_0xb187('0x66')]==='reachable'||this[_0xb187('0x13')][util[_0xb187('0x4d')](_0xb187('0xde'),_0x25d106[_0xb187('0x20')])][_0xb187('0x66')]===_0xb187('0xdf'));};Preview[_0xb187('0xc')]['run']=function(_0x106edd,_0x556a6d){var _0x55e475=this;return new BPromise(function(_0x4818a5,_0x571040){_0x55e475[_0xb187('0xe0')](_0x106edd,_0x556a6d)['then'](function(_0x385c00){_0x4818a5(_[_0xb187('0x62')](_0x385c00,[_0xb187('0x44')]));})[_0xb187('0x68')](function(_0x3a57e1){if(_0x3a57e1['unlock']){rpcDb[_0xb187('0xb8')](_0x106edd);}if(_0x3a57e1[_0xb187('0x47')]){rpcDb['disableContact'](_0x106edd);}_0x571040(_[_0xb187('0x62')](_0x3a57e1,[_0xb187('0x44')]));});});};Preview[_0xb187('0xc')][_0xb187('0xe0')]=function(_0x306755,_0x5785f4){var _0x462ed0=this;return new BPromise(function(_0x760626,_0x39b8d0){var _0x1fa2f9,_0x2b50d7;rpcDb['getContactPreview'](_0x306755)[_0xb187('0x71')](function(_0x2aff97){if(!_[_0xb187('0x5b')](_0x2aff97[0x0])){_0x2b50d7=_0x2aff97[0x0][_0xb187('0xe1')]?![]:!![];_0x1fa2f9=_0x2aff97[0x0][_0xb187('0xe1')]?!![]:![];_0x1fa2f9=_0x5785f4?!![]:_0x1fa2f9;}var _0x4c4678=_0x462ed0[_0xb187('0xe2')](_0x2aff97);if(_0x4c4678[_0xb187('0xe3')]){rpcDb[_0xb187('0xe4')](_[_0xb187('0x62')](_0x2aff97[0x0],[_0xb187('0x64'),_0xb187('0xe5')]))[_0xb187('0x71')](function(_0xf42656){_0x462ed0[_0xb187('0xe6')](_0xf42656,_0x2aff97[0x0],_0x5785f4,_0x2b50d7,_0x1fa2f9)[_0xb187('0x71')](function(_0x1bcce0){_0x760626(_0x1bcce0);})[_0xb187('0x68')](function(_0x2587b7){_0x39b8d0(_0x2587b7);});})[_0xb187('0x68')](function(_0x275a9a){ut['logger'](_0xb187('0xe7'),_0x275a9a);_0x39b8d0(ut[_0xb187('0x44')](_0xb187('0xe8'),_0x2b50d7,_0x1fa2f9));});}else{_0x39b8d0(ut[_0xb187('0x44')](_0x4c4678[_0xb187('0x44')],_0x2b50d7,_0x1fa2f9));}})[_0xb187('0x68')](function(_0x1ff052){ut[_0xb187('0x53')](_0xb187('0xe9'),_0x1ff052);_0x39b8d0(ut[_0xb187('0x44')](_0xb187('0xe8'),![],!![]));});});};Preview[_0xb187('0xc')][_0xb187('0xe2')]=function(_0x105437){if(_[_0xb187('0x5b')](_0x105437)||_[_0xb187('0xd2')](_0x105437)||!_[_0xb187('0x5b')](_0x105437[0x0]['Agent'])&&_['isNil'](_0x105437[0x0][_0xb187('0xea')][_0xb187('0x20')])){ut[_0xb187('0x53')](_0xb187('0xeb'),_0x105437);return{'isValid':![],'message':_0xb187('0xec')};}var _0x13a404=this[_0xb187('0x11')][_0x105437[0x0][_0xb187('0x5e')]['name']];_0x13a404[_0xb187('0x44')]='ACTIVE';if(_[_0xb187('0x5b')](_0x13a404)){ut[_0xb187('0x53')](_0xb187('0xed'),_0x13a404);return{'isValid':![],'message':_0xb187('0xee')};}if(!this[_0xb187('0x86')](_0x13a404[_0xb187('0x46')])){ut[_0xb187('0x53')](_0xb187('0xef'),_0xb187('0xf0')+_0x13a404[_0xb187('0x20')]+_0xb187('0xf1'));if(!this[_0xb187('0x86')](_0x13a404[_0xb187('0xf2')])){ut[_0xb187('0x53')](_0xb187('0xef'),_0x13a404[_0xb187('0x20')]+_0xb187('0xf3'));return{'isValid':![],'message':_0xb187('0xf4')};}}if(!ut['isActive'](_0x13a404[_0xb187('0x2c')])){ut[_0xb187('0x53')](_0xb187('0xf5'),_0x13a404[_0xb187('0x20')]+_0xb187('0xf6'));return{'isValid':![],'message':_0xb187('0xf0')+_0x13a404[_0xb187('0x20')]+'\x20Not\x20Active'};}return{'isValid':!![],'message':_0xb187('0xf7')};};Preview['prototype'][_0xb187('0xd3')]=function(_0x175596,_0x54c87c,_0x34a7f9,_0x485ca0){var _0x2ef2ac=this;return new BPromise(function(_0x15ef70,_0x205591){var _0x44679d=_0x175596['uniqueid'];var _0x2cfcf6=_0x2ef2ac[_0xb187('0x86')](_0x54c87c[_0xb187('0x46')])?util[_0xb187('0x4d')](_0xb187('0xf8'),_0x54c87c[_0xb187('0x46')]['name'],_['isNil'](_0x54c87c[_0xb187('0xf9')])?'':_0x54c87c['dialPrefix'][_0xb187('0xfa')]()||'',_0x54c87c[_0xb187('0xfb')]>0x0?_0x34a7f9[_0xb187('0xd0')][_0xb187('0xfc')]['substring'](_0x54c87c[_0xb187('0xfb')]):_0x34a7f9[_0xb187('0xd0')][_0xb187('0xfc')]):util[_0xb187('0x4d')](_0xb187('0xf8'),_[_0xb187('0x5b')](_0x54c87c[_0xb187('0xf2')])?_0x54c87c[_0xb187('0x46')][_0xb187('0x20')]:_0x54c87c[_0xb187('0xf2')]['name'],_[_0xb187('0x5b')](_0x54c87c[_0xb187('0xf9')])?'':_0x54c87c[_0xb187('0xf9')][_0xb187('0xfa')]()||'',_0x54c87c[_0xb187('0xfb')]>0x0?_0x34a7f9[_0xb187('0xd0')][_0xb187('0xfc')][_0xb187('0xfd')](_0x54c87c['dialCutDigit']):_0x34a7f9['Contact'][_0xb187('0xfc')]);var _0x3d39cb=_0x2ef2ac[_0xb187('0x86')](_0x54c87c[_0xb187('0x46')])?ut[_0xb187('0xfe')](_0x54c87c[_0xb187('0x46')][_0xb187('0x48')],_0x54c87c[_0xb187('0xff')],_0x54c87c[_0xb187('0x100')]>0x0?ut[_0xb187('0x101')](_0x54c87c[_0xb187('0x2e')],_0x54c87c['dialRandomLastDigitCallerIdNumber']):_0x54c87c[_0xb187('0x2e')]):ut[_0xb187('0xfe')](_[_0xb187('0x5b')](_0x54c87c['TrunkBackup'])?_0x54c87c[_0xb187('0x46')][_0xb187('0x48')]:_0x54c87c[_0xb187('0xf2')][_0xb187('0x48')],_0x54c87c[_0xb187('0xff')],_0x54c87c[_0xb187('0x100')]>0x0?ut[_0xb187('0x101')](_0x54c87c[_0xb187('0x2e')],_0x54c87c[_0xb187('0x100')]):_0x54c87c['dialOriginateCallerIdNumber']);if(_0x3d39cb){_0x175596[_0xb187('0x102')]=ut[_0xb187('0x103')](_0x3d39cb);_0x175596[_0xb187('0x104')]=ut[_0xb187('0x105')](_0x3d39cb);}var _0x1de4ae=ut[_0xb187('0x106')](_0x54c87c,_0x34a7f9,_0x2cfcf6,_0x3d39cb,_0x44679d,_0x175596);_['merge'](_0x175596,ut['toLowerVariables'](_0x1de4ae));_0x175596[_0xb187('0x77')]=moment()['format'](_0xb187('0x91'));ami['Action'](ut[_0xb187('0x107')](_0x175596,_0x54c87c,_0x1de4ae,_0x175596['activeContact'],_0x485ca0))['then'](function(_0xb5a552){_0x54c87c[_0xb187('0x45')]+=0x1;logger[_0xb187('0x5c')](_0xb187('0x108'),_0x44679d,_0xb187('0xbf'),_0x54c87c[_0xb187('0x20')],_0xb187('0x60'),_0x54c87c['originated']);_0x15ef70(_0xb5a552);})[_0xb187('0x68')](function(_0x20c8cc){ut[_0xb187('0xc5')](_0x175596,0xe,'OriginateError');rpcDb['createAgentHistory'](_0x175596,_0xb187('0x109'));_0x205591(_0x20c8cc);});});};Preview[_0xb187('0xc')]['syncNewExten']=function(_0x13dbff){if(this[_0xb187('0x14')][_0x13dbff['linkedid']]){this[_0xb187('0x14')][_0x13dbff[_0xb187('0xa2')]][_0xb187('0x67')]=_0x13dbff[_0xb187('0x67')];}};Preview[_0xb187('0xc')][_0xb187('0x10a')]=function(_0xa59484){var _0x1f501c=this;var _0x54178c=this['actions'][_0xa59484[_0xb187('0x10b')]];if(_0x54178c){if(_0x54178c['lookAgent']&&this['agents'][_0x54178c[_0xb187('0xd1')]]){ut[_0xb187('0x10c')](_0x54178c,this[_0xb187('0x15')][_0x54178c[_0xb187('0xd1')]]['name'],this[_0xb187('0x15')][_0x54178c['lookAgent']]['id']);}var _0x1a5d8a=_[_0xb187('0x10d')](_0x54178c);_0x1a5d8a[_0xb187('0x92')]=moment()['format'](_0xb187('0x91'));var _0x20b2fe=_0x1f501c['campaignsPreview'][_0x54178c[_0xb187('0x5f')]];if(ut[_0xb187('0x10e')](_0xa59484[_0xb187('0x10f')])){if(_0x54178c['unlockAgent']){rpcDb[_0xb187('0xb8')](_0x54178c[_0xb187('0xb9')]);}if(_0x54178c[_0xb187('0xaf')]){rpcDb[_0xb187('0x110')](_0x54178c['idContact']);}ami[_0xb187('0x97')](_0xb187('0x111'),ut['buildObj'](_0x54178c,_0xb187('0x112')));this[_0xb187('0xc2')](_0x1a5d8a,_0x20b2fe,_0xa59484);}else{_0x54178c[_0xb187('0x77')]=moment()['format'](_0xb187('0x91'));ut['logAgent'](_0x1a5d8a,0x4,_0xb187('0x113'));rpcDb[_0xb187('0xc8')](_0x1a5d8a,_0xb187('0x114'));}}};Preview[_0xb187('0xc')][_0xb187('0x115')]=function(_0x20b8a7){var _0x1850d2=this;var _0x360dbd=this[_0xb187('0x14')][_0x20b8a7['linkedid']];var _0x2a253e;if(_0x360dbd){_0x2a253e=this[_0xb187('0x11')][_0x360dbd[_0xb187('0x5f')]];logger[_0xb187('0x5c')](_0xb187('0x116'),_0x20b8a7[_0xb187('0xa2')],_0xb187('0xbf'),_0x2a253e[_0xb187('0x20')],_0xb187('0x96'),_0x2a253e[_0xb187('0x24')]);}if(this[_0xb187('0x14')][_0x20b8a7['linkedid']]&&_0x20b8a7['linkedid']!==_0x20b8a7[_0xb187('0x95')]){if(_0x20b8a7[_0xb187('0x117')]==='16'&&this['actions'][_0x20b8a7['linkedid']][_0xb187('0x61')]){this['callProgressDetectingCustomer'](_0x20b8a7,_0x20b8a7['linkedid'],_0x20b8a7[_0xb187('0x117')]);}else if(this[_0xb187('0x14')][_0x20b8a7[_0xb187('0xa2')]]['dialAnswer']){logger['info']('[syncHangup][talking][cause]',_0x20b8a7[_0xb187('0xa2')],_0x20b8a7[_0xb187('0x117')],_0xb187('0xbf'),_0x2a253e[_0xb187('0x20')],_0xb187('0x96'),_0x2a253e[_0xb187('0x24')]);this[_0xb187('0x89')](_0x20b8a7,_0x20b8a7[_0xb187('0xa2')],_0x20b8a7[_0xb187('0x117')]);}}else if(_0x360dbd&&_[_0xb187('0x5b')](_0x360dbd['statedesc'])&&_0x2a253e[_0xb187('0x118')]&&_0x20b8a7['linkedid']===_0x20b8a7[_0xb187('0x95')]&&_[_0xb187('0x5b')](_0x20b8a7[_0xb187('0xcd')])&&_0x20b8a7[_0xb187('0x117')]==='16'&&_0x20b8a7[_0xb187('0x119')]==='6'&&_[_0xb187('0xc3')](_0x360dbd['transfer'])){if(_0x360dbd[_0xb187('0xa8')]){rpcDb[_0xb187('0xb8')](_0x360dbd[_0xb187('0xb9')]);}if(_0x360dbd['activeContact']){rpcDb['disableContact'](_0x360dbd[_0xb187('0xb9')]);}_0x20b8a7[_0xb187('0xcd')]='22';this[_0xb187('0xc2')](_0x360dbd,_0x2a253e,_0x20b8a7);}else if(_0x360dbd&&_0x360dbd[_0xb187('0x11a')]){if(_0x20b8a7[_0xb187('0x117')]==='16'&&this[_0xb187('0x14')][_0x20b8a7[_0xb187('0xa2')]]['dialAnswer']){logger['info'](_0xb187('0x11b'),_0x20b8a7[_0xb187('0xa2')],_0x20b8a7[_0xb187('0x117')],'\x20Queue',_0x2a253e[_0xb187('0x20')],'pTalking:\x20',_0x2a253e['pTalking']);this[_0xb187('0x89')](_0x20b8a7,_0x20b8a7[_0xb187('0xa2')],_0x20b8a7[_0xb187('0x117')]);}else if(this[_0xb187('0x14')][_0x20b8a7[_0xb187('0xa2')]]['dialAnswer']){logger[_0xb187('0x5c')]('[syncHangup][talking][cause]',_0x20b8a7[_0xb187('0xa2')],_0x20b8a7[_0xb187('0x117')],_0xb187('0xbf'),_0x2a253e[_0xb187('0x20')],_0xb187('0x96'),_0x2a253e[_0xb187('0x24')]);this[_0xb187('0x89')](_0x20b8a7,_0x20b8a7[_0xb187('0xa2')],_0x20b8a7[_0xb187('0x117')]);}}};Preview[_0xb187('0xc')][_0xb187('0x19')]=function(_0x539d10){if(this[_0xb187('0x14')][_0x539d10[_0xb187('0xc1')]]&&_0x539d10[_0xb187('0xc1')]!==_0x539d10['destuniqueid']){this[_0xb187('0x89')](_0x539d10,_0x539d10[_0xb187('0xc1')],_0x539d10[_0xb187('0xbd')]);}};Preview[_0xb187('0xc')][_0xb187('0x11c')]=function(_0x77e631){if(this['actions'][_0x77e631[_0xb187('0xa2')]]&&_0x77e631[_0xb187('0xa2')]!==_0x77e631[_0xb187('0x95')]&&!this[_0xb187('0x14')][_0x77e631[_0xb187('0xa2')]]['dialAnswer']){if(_0x77e631['cause']==='1'){this[_0xb187('0x89')](_0x77e631,_0x77e631[_0xb187('0xa2')],_0x77e631[_0xb187('0x117')]);}}};Preview[_0xb187('0xc')]['addVariable']=function(_0x24d285,_0x5d5280,_0x1fb36f){if(this[_0xb187('0x14')][_0x24d285]){if(_[_0xb187('0x5b')](this['actions'][_0x24d285]['variables'])){this[_0xb187('0x14')][_0x24d285][_0xb187('0x11d')]={};}this[_0xb187('0x14')][_0x24d285][_0xb187('0x11d')][_0x5d5280]=_0x1fb36f;}};Preview[_0xb187('0xc')][_0xb187('0x11e')]=function(_0x2afa7c){try{if(!_['isNil'](_0x2afa7c)){if(ut[_0xb187('0x11f')](_[_0xb187('0x120')](_0x2afa7c[_0xb187('0x121')])[0x0])){this[_0xb187('0x122')](_0x2afa7c[_0xb187('0x95')],_['keys'](_0x2afa7c[_0xb187('0x121')])[0x0],_0x2afa7c[_0xb187('0x123')]);}}}catch(_0x35c205){logger[_0xb187('0x124')]('[syncVarSet][Preview]',util[_0xb187('0x125')](_0x35c205,{'showHidden':![],'depth':null}));}};Preview['prototype'][_0xb187('0x1b')]=function(_0x26255d){if(_0x26255d){if(this[_0xb187('0x14')][_0x26255d[_0xb187('0x126')]]){this[_0xb187('0x14')][_0x26255d[_0xb187('0x126')]][_0xb187('0x11a')]=!![];}}};Preview['prototype'][_0xb187('0x127')]=function(_0x50e4a6){if(_0x50e4a6){if(this['actions'][_0x50e4a6[_0xb187('0x128')]]){this[_0xb187('0x14')][_0x50e4a6[_0xb187('0x128')]][_0xb187('0x11a')]=!![];}}};module[_0xb187('0x129')]=Preview;
\ No newline at end of file
index d4eef67..ce1518c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7d99=['membername','context','from-sip','exten','holdtime','assigned','lastAssignedTo','COMPLETED','[voiceQueueReport]\x20','getContactRecallMe','[GetContactRecallMe]\x20','rescheduleContactInQueue','[rescheduleContactInQueue]\x20','util','bluebird','../../../config/logger','preview','lodash','../rpc/cmHopperFinal','../rpc/cmHopperBlack','../rpc/voiceQueueRt','../rpc/agentReportPreview','../rpc/voiceQueueReport','error','inspect','resolve','createHistory','catch','[createHistory]\x20','then','moveContactManagedDialer','[moveContactManagedDialer]\x20','[checkIsBlackList]\x20','getContactPreview','[getContactPreview]\x20','createAgentHistory','createCustomerHistory','createCustomerFinal','rescheduleContact','active','[rescheduleContact]\x20','countReScheduled','[countReScheduled]\x20','unlockContact','[unlockContact]\x20','disableContact','[activeContact]\x20','crateCustomerReportQueue','uniqueid','calleridnum','calleridname','queue','queuecallerjoinAt','answertime','queuecallerleaveAt','queuecallercompleteAt','endtime','connectedlinename'];(function(_0x577769,_0x857a22){var _0xc042f5=function(_0x461259){while(--_0x461259){_0x577769['push'](_0x577769['shift']());}};_0xc042f5(++_0x857a22);}(_0x7d99,0x169));var _0x97d9=function(_0x306a5f,_0x535414){_0x306a5f=_0x306a5f-0x0;var _0x44dbe7=_0x7d99[_0x306a5f];return _0x44dbe7;};'use strict';var util=require(_0x97d9('0x0'));var BPromise=require(_0x97d9('0x1'));var logger=require(_0x97d9('0x2'))(_0x97d9('0x3'));var _=require(_0x97d9('0x4'));var cmHopper=require('../rpc/cmHopper');var cmHopperFinal=require(_0x97d9('0x5'));var cmHopperHistory=require('../rpc/cmHopperHistory');var cmHopperBlack=require(_0x97d9('0x6'));var voiceQueueRt=require(_0x97d9('0x7'));var agentReportPreview=require(_0x97d9('0x8'));var voiceQueueReport=require(_0x97d9('0x9'));function loggerCatch(_0x4eda0c){return function(_0x364d09){logger[_0x97d9('0xa')](_0x4eda0c,util[_0x97d9('0xb')](_0x364d09,{'showHidden':![],'depth':null}));};}function create(_0x1f93c2){return BPromise[_0x97d9('0xc')]()['then'](cmHopperHistory[_0x97d9('0xd')](_0x1f93c2))[_0x97d9('0xe')](loggerCatch(_0x97d9('0xf')));}function createAgent(_0x350f56){return BPromise[_0x97d9('0xc')]()['then'](agentReportPreview[_0x97d9('0xd')](_0x350f56))[_0x97d9('0xe')](loggerCatch(_0x97d9('0xf')));}function moveContact(_0x1ec1af){return BPromise[_0x97d9('0xc')]()[_0x97d9('0x10')](cmHopper[_0x97d9('0x11')](_0x1ec1af,!![]))[_0x97d9('0xe')](loggerCatch(_0x97d9('0x12')));}exports['checkIsBlackList']=function(_0x1668ff){return BPromise[_0x97d9('0xc')]()['then'](cmHopperBlack['checkIsBlackList'](_0x1668ff))['catch'](loggerCatch(_0x97d9('0x13')));};exports[_0x97d9('0x14')]=function(_0x58dde4){return BPromise[_0x97d9('0xc')]()[_0x97d9('0x10')](cmHopper[_0x97d9('0x14')](_0x58dde4))[_0x97d9('0xe')](loggerCatch(_0x97d9('0x15')));};exports['createHistory']=function(_0x3a098a,_0x53e3a6){create(_0x3a098a)[_0x97d9('0xe')](loggerCatch(_0x53e3a6));moveContact(_0x3a098a)[_0x97d9('0xe')](loggerCatch(_0x53e3a6));};exports[_0x97d9('0x16')]=function(_0x54e34b,_0x1ae6d2){createAgent(_0x54e34b)[_0x97d9('0xe')](loggerCatch(_0x1ae6d2));};exports[_0x97d9('0x17')]=function(_0x52e0be,_0x4dee4f){create(_0x52e0be)['catch'](loggerCatch(_0x4dee4f));};exports[_0x97d9('0x18')]=function(_0x14b3e7,_0x287d9c){moveContact(_0x14b3e7)[_0x97d9('0xe')](loggerCatch(_0x287d9c));};exports[_0x97d9('0x19')]=function(_0x241d25,_0x540b3b,_0x46cd72){if(_0x540b3b){_0x241d25['UserId']=null;}if(_0x46cd72){_0x241d25[_0x97d9('0x1a')]=![];}return BPromise[_0x97d9('0xc')]()[_0x97d9('0x10')](cmHopper['rescheduleContact'](_0x241d25))[_0x97d9('0xe')](loggerCatch(_0x97d9('0x1b')));};exports[_0x97d9('0x1c')]=function(_0x1f5c20){return BPromise[_0x97d9('0xc')]()[_0x97d9('0x10')](cmHopper[_0x97d9('0x1c')](_0x1f5c20))['catch'](loggerCatch(_0x97d9('0x1d')));};exports[_0x97d9('0x1e')]=function(_0x5e913e){return BPromise[_0x97d9('0xc')]()[_0x97d9('0x10')](cmHopper[_0x97d9('0x1e')]({'UserId':null},_0x5e913e,0x1))['catch'](loggerCatch(_0x97d9('0x1f')));};exports[_0x97d9('0x20')]=function(_0x1a4ff6){return BPromise[_0x97d9('0xc')]()[_0x97d9('0x10')](cmHopper['unlockContact']({'active':![]},_0x1a4ff6,0x1))[_0x97d9('0xe')](loggerCatch(_0x97d9('0x21')));};exports[_0x97d9('0x22')]=function(_0x4504eb){var _0x304a8c={};_0x304a8c['type']=_0x4504eb['type'];_0x304a8c[_0x97d9('0x23')]=_0x4504eb[_0x97d9('0x23')];_0x304a8c[_0x97d9('0x24')]=_0x4504eb[_0x97d9('0x24')];_0x304a8c['calleridname']=_0x4504eb[_0x97d9('0x25')];_0x304a8c[_0x97d9('0x26')]=_0x4504eb[_0x97d9('0x26')];_0x304a8c[_0x97d9('0x27')]=_0x4504eb[_0x97d9('0x28')];_0x304a8c[_0x97d9('0x29')]=_0x4504eb[_0x97d9('0x28')];_0x304a8c['queuecallercomplete']=0x1;_0x304a8c[_0x97d9('0x2a')]=_0x4504eb[_0x97d9('0x2b')];_0x304a8c[_0x97d9('0x2c')]=_0x4504eb[_0x97d9('0x2d')];_0x304a8c[_0x97d9('0x2e')]=_0x97d9('0x2f');_0x304a8c[_0x97d9('0x30')]='xcally-motion-preview';_0x304a8c[_0x97d9('0x31')]=0x0;_0x304a8c[_0x97d9('0x32')]=0x1;_0x304a8c[_0x97d9('0x33')]=_0x4504eb[_0x97d9('0x2d')];_0x304a8c['queuecallerexitreason']=_0x97d9('0x34');return BPromise[_0x97d9('0xc')]()[_0x97d9('0x10')](voiceQueueReport['create'](_0x304a8c))[_0x97d9('0xe')](loggerCatch(_0x97d9('0x35')));};exports['getContactRecallMe']=function(_0x44f1ca,_0x36058c){return BPromise['resolve']()[_0x97d9('0x10')](cmHopper[_0x97d9('0x36')](_0x44f1ca,_0x36058c))['catch'](loggerCatch(_0x97d9('0x37')));};exports[_0x97d9('0x38')]=function(_0x14e247){return BPromise[_0x97d9('0xc')]()[_0x97d9('0x10')](cmHopper['rescheduleContact'](_0x14e247,!![],!![]))[_0x97d9('0xe')](loggerCatch(_0x97d9('0x39')));};
\ No newline at end of file
+var _0x0637=['active','[rescheduleContact]\x20','[countReScheduled]\x20','unlockContact','[unlockContact]\x20','disableContact','crateCustomerReportQueue','type','uniqueid','calleridnum','calleridname','queue','queuecallerjoinAt','answertime','queuecallercomplete','queuecallercompleteAt','connectedlinename','membername','from-sip','exten','xcally-motion-preview','holdtime','assigned','lastAssignedTo','COMPLETED','create','[voiceQueueReport]\x20','getContactRecallMe','[GetContactRecallMe]\x20','rescheduleContactInQueue','[rescheduleContactInQueue]\x20','util','bluebird','preview','lodash','../rpc/cmHopper','../rpc/cmHopperHistory','../rpc/voiceQueueRt','../rpc/agentReportPreview','../rpc/voiceQueueReport','error','inspect','then','[createHistory]\x20','resolve','createHistory','catch','moveContactManagedDialer','[moveContactManagedDialer]\x20','checkIsBlackList','[checkIsBlackList]\x20','getContactPreview','[getContactPreview]\x20','createAgentHistory','createCustomerFinal','rescheduleContact','UserId'];(function(_0xcfeff4,_0x3f2e19){var _0xb2fadc=function(_0x4cd013){while(--_0x4cd013){_0xcfeff4['push'](_0xcfeff4['shift']());}};_0xb2fadc(++_0x3f2e19);}(_0x0637,0x13c));var _0x7063=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x0637[_0x3dd15e];return _0x231fd0;};'use strict';var util=require(_0x7063('0x0'));var BPromise=require(_0x7063('0x1'));var logger=require('../../../config/logger')(_0x7063('0x2'));var _=require(_0x7063('0x3'));var cmHopper=require(_0x7063('0x4'));var cmHopperFinal=require('../rpc/cmHopperFinal');var cmHopperHistory=require(_0x7063('0x5'));var cmHopperBlack=require('../rpc/cmHopperBlack');var voiceQueueRt=require(_0x7063('0x6'));var agentReportPreview=require(_0x7063('0x7'));var voiceQueueReport=require(_0x7063('0x8'));function loggerCatch(_0x164d11){return function(_0x485261){logger[_0x7063('0x9')](_0x164d11,util[_0x7063('0xa')](_0x485261,{'showHidden':![],'depth':null}));};}function create(_0x177149){return BPromise['resolve']()[_0x7063('0xb')](cmHopperHistory['createHistory'](_0x177149))['catch'](loggerCatch(_0x7063('0xc')));}function createAgent(_0x2bcb8f){return BPromise[_0x7063('0xd')]()[_0x7063('0xb')](agentReportPreview[_0x7063('0xe')](_0x2bcb8f))[_0x7063('0xf')](loggerCatch('[createHistory]\x20'));}function moveContact(_0x3d6f44){return BPromise[_0x7063('0xd')]()[_0x7063('0xb')](cmHopper[_0x7063('0x10')](_0x3d6f44,!![]))[_0x7063('0xf')](loggerCatch(_0x7063('0x11')));}exports[_0x7063('0x12')]=function(_0x5b1816){return BPromise[_0x7063('0xd')]()['then'](cmHopperBlack[_0x7063('0x12')](_0x5b1816))[_0x7063('0xf')](loggerCatch(_0x7063('0x13')));};exports[_0x7063('0x14')]=function(_0xfa5dcf){return BPromise[_0x7063('0xd')]()[_0x7063('0xb')](cmHopper[_0x7063('0x14')](_0xfa5dcf))['catch'](loggerCatch(_0x7063('0x15')));};exports[_0x7063('0xe')]=function(_0x297f1d,_0x52b9e0){create(_0x297f1d)['catch'](loggerCatch(_0x52b9e0));moveContact(_0x297f1d)['catch'](loggerCatch(_0x52b9e0));};exports[_0x7063('0x16')]=function(_0x519bab,_0x22f661){createAgent(_0x519bab)[_0x7063('0xf')](loggerCatch(_0x22f661));};exports['createCustomerHistory']=function(_0x3b89c3,_0x553a3b){create(_0x3b89c3)['catch'](loggerCatch(_0x553a3b));};exports[_0x7063('0x17')]=function(_0x44d079,_0x307588){moveContact(_0x44d079)['catch'](loggerCatch(_0x307588));};exports[_0x7063('0x18')]=function(_0xe1a0a9,_0x3df52a,_0x1b4bd6){if(_0x3df52a){_0xe1a0a9[_0x7063('0x19')]=null;}if(_0x1b4bd6){_0xe1a0a9[_0x7063('0x1a')]=![];}return BPromise[_0x7063('0xd')]()[_0x7063('0xb')](cmHopper[_0x7063('0x18')](_0xe1a0a9))[_0x7063('0xf')](loggerCatch(_0x7063('0x1b')));};exports['countReScheduled']=function(_0x3f2591){return BPromise[_0x7063('0xd')]()[_0x7063('0xb')](cmHopper['countReScheduled'](_0x3f2591))[_0x7063('0xf')](loggerCatch(_0x7063('0x1c')));};exports[_0x7063('0x1d')]=function(_0x1f13b9){return BPromise[_0x7063('0xd')]()['then'](cmHopper[_0x7063('0x1d')]({'UserId':null},_0x1f13b9,0x1))[_0x7063('0xf')](loggerCatch(_0x7063('0x1e')));};exports[_0x7063('0x1f')]=function(_0x558407){return BPromise[_0x7063('0xd')]()[_0x7063('0xb')](cmHopper['unlockContact']({'active':![]},_0x558407,0x1))[_0x7063('0xf')](loggerCatch('[activeContact]\x20'));};exports[_0x7063('0x20')]=function(_0x5ec420){var _0x554e40={};_0x554e40[_0x7063('0x21')]=_0x5ec420[_0x7063('0x21')];_0x554e40['uniqueid']=_0x5ec420[_0x7063('0x22')];_0x554e40[_0x7063('0x23')]=_0x5ec420[_0x7063('0x23')];_0x554e40['calleridname']=_0x5ec420[_0x7063('0x24')];_0x554e40[_0x7063('0x25')]=_0x5ec420['queue'];_0x554e40[_0x7063('0x26')]=_0x5ec420[_0x7063('0x27')];_0x554e40['queuecallerleaveAt']=_0x5ec420['answertime'];_0x554e40[_0x7063('0x28')]=0x1;_0x554e40[_0x7063('0x29')]=_0x5ec420['endtime'];_0x554e40[_0x7063('0x2a')]=_0x5ec420[_0x7063('0x2b')];_0x554e40['context']=_0x7063('0x2c');_0x554e40[_0x7063('0x2d')]=_0x7063('0x2e');_0x554e40[_0x7063('0x2f')]=0x0;_0x554e40[_0x7063('0x30')]=0x1;_0x554e40[_0x7063('0x31')]=_0x5ec420['membername'];_0x554e40['queuecallerexitreason']=_0x7063('0x32');return BPromise[_0x7063('0xd')]()['then'](voiceQueueReport[_0x7063('0x33')](_0x554e40))[_0x7063('0xf')](loggerCatch(_0x7063('0x34')));};exports[_0x7063('0x35')]=function(_0x548cb5,_0x1cf22e){return BPromise[_0x7063('0xd')]()['then'](cmHopper['getContactRecallMe'](_0x548cb5,_0x1cf22e))['catch'](loggerCatch(_0x7063('0x36')));};exports[_0x7063('0x37')]=function(_0x12a740){return BPromise[_0x7063('0xd')]()['then'](cmHopper[_0x7063('0x18')](_0x12a740,!![],!![]))[_0x7063('0xf')](loggerCatch(_0x7063('0x38')));};
\ No newline at end of file
index 2e9f87d..15cd8f9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47d1=['dialer','VoiceQueueId','dialOriginateTimeout','\x22rtTxX%s%s\x22','dialQueueProject2','dialPreviewUrl','dialQueueProject','\x22agi://%s/square,%s\x22','NONE','originatecalleridnum','xcally-motion-preview','monitor_format','Contact','hasOwnProperty','tags','updatedAt','%s%s','XMD-','toLowerVariables','toLower','updateOriginated','originated','[updateOriginated]\x20object\x20originated\x20is\x20negative','[updateOriginated]\x20is\x20null\x20or\x20undefined','logBlacklist','statedesc','starttime','responsetime','logAgent','YYYY-MM-DD\x20HH:mm:ss','ringtime','logLookAgent','membername','state','endtime','answertime','variablesAction','RECALL','BOOKED','uniqueid','channelAgent','timeout','totalGlobal','countbusyretry','countcongestionretry','countnoanswerretry','clone','active','scheduledat','minutes','ContactId','ListId','decrementTalkink','pTalking','[decrementTalkink]\x20object\x20talking\x20is\x20negative','[decrementTalkink]\x20is\x20null\x20or\x20undefined','buildObj','lastevent','interface','buildAcw','queue','agentReadyId','not_inuse','reachable','push','diff','createBody','CampaignId','filterKey','idContact','campaigntype','dialAnswer','callback','callbackuniqueid','callbackat','recallme','UserId','sipcallid','xmd-voicequeueid','xmd-phone','xmd-listid','xmd-dialtimeout','xmd-dialoptions','xmd-dialid','xmd-dialchannel','xmd-cdrtype','xmd-callerid','xmd-agi','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqosrtt','rtpaudioqosrttbridged','rtpaudioqos','bridgepvtcallid','\x5cw{0,','pow','replace','random','extractCalleridName','match','extractCalleridNumber','util','lodash','moment','../../../../config/logger','XCALLY_IP_AGI','127.0.0.1','milliseconds','seconds','loggerCatch','error','inspect','logger','info','logger2','message','getCallerId','isUndefined','string','isEmpty','format','\x22%s\x22\x20<%s>','isNil','addVariables','Queue','name','calleridname','calleridnum'];(function(_0x3fccdc,_0x543784){var _0x2c37a2=function(_0x5b8ed5){while(--_0x5b8ed5){_0x3fccdc['push'](_0x3fccdc['shift']());}};_0x2c37a2(++_0x543784);}(_0x47d1,0x1ed));var _0x147d=function(_0x265bc1,_0x4bda63){_0x265bc1=_0x265bc1-0x0;var _0x1d6fe5=_0x47d1[_0x265bc1];return _0x1d6fe5;};'use strict';var util=require(_0x147d('0x0'));var _=require(_0x147d('0x1'));var moment=require(_0x147d('0x2'));var logger=require(_0x147d('0x3'))('preview');var ipAgi=process['env'][_0x147d('0x4')]||_0x147d('0x5');function getSeconds(_0x3411b0,_0x154c5d){var _0x139490=moment(_0x3411b0)['milliseconds'](0x0);var _0xcf284f=moment(_0x154c5d)[_0x147d('0x6')](0x0);return _0x139490['diff'](_0xcf284f,_0x147d('0x7'));}exports[_0x147d('0x8')]=function(_0xc4e6cc){return function(_0x2ba9ab){logger[_0x147d('0x9')](_0xc4e6cc,util[_0x147d('0xa')](_0x2ba9ab,{'showHidden':![],'depth':null}));};};exports[_0x147d('0xb')]=function(_0x44cde8,_0x1f5010){logger[_0x147d('0xc')](_0x44cde8,util[_0x147d('0xa')](_0x1f5010,{'showHidden':![],'depth':null}));};exports['loggerError']=function(_0x45d697,_0x327b9f){logger['error'](_0x45d697,util[_0x147d('0xa')](_0x327b9f,{'showHidden':![],'depth':null}));};exports[_0x147d('0xd')]=function(_0x5cf2a2){return function(_0x175014){logger[_0x147d('0xc')](_0x5cf2a2,util[_0x147d('0xa')](_0x175014,{'showHidden':![],'depth':null}));};};exports[_0x147d('0xe')]=function(_0x5678ff,_0x706c3d,_0x26f03e){return{'message':_0x5678ff,'unlock':_0x706c3d,'active':_0x26f03e};};exports[_0x147d('0xf')]=function(_0x2e35a7,_0x59fe5f,_0x4d5948){if(!_[_0x147d('0x10')](_0x4d5948)&&'string'===typeof _0x4d5948&&!_['isEmpty'](_0x4d5948)){if(!_['isUndefined'](_0x59fe5f)&&_0x147d('0x11')===typeof _0x59fe5f&&!_[_0x147d('0x12')](_0x59fe5f)){return util[_0x147d('0x13')](_0x147d('0x14'),_0x59fe5f,_0x4d5948);}return util[_0x147d('0x13')](_0x147d('0x14'),_0x4d5948,_0x4d5948);}if(!_[_0x147d('0x10')](_0x2e35a7)&&'string'===typeof _0x2e35a7&&!_[_0x147d('0x12')](_0x2e35a7)){return _0x2e35a7;}return'\x22\x22\x20<>';};exports['isActive']=function(_0x399ca6){if(_[_0x147d('0x15')](_0x399ca6)){return![];}return _0x399ca6;};exports[_0x147d('0x16')]=function(_0x4cd594,_0x543c70,_0x360b20,_0x156cf5,_0x2b6b0c,_0x3eb4a3){var _0x4aa6ce={'XMD-QUEUE':_0x543c70[_0x147d('0x17')]?_0x543c70[_0x147d('0x17')][_0x147d('0x18')]:'','XMD-CALLERID':_0x156cf5,'XMD-CALLERID-PREVIEW':_0x3eb4a3?util[_0x147d('0x13')](_0x147d('0x14'),_0x3eb4a3[_0x147d('0x19')],_0x3eb4a3[_0x147d('0x1a')]):_0x156cf5,'XMD-DIALID':_0x2b6b0c,'XMD-CONTACTID':_0x543c70['ContactId'],'XMD-CDRTYPE':_0x147d('0x1b'),'CALLERID(all)':_0x156cf5,'XMD-VOICEQUEUEID':_0x543c70[_0x147d('0x1c')],'XMD-DIALCHANNEL':_0x360b20,'XMD-DIALTIMEOUT':_0x4cd594[_0x147d('0x1d')]||0x1e,'XMD-DIALOPTIONS':util[_0x147d('0x13')](_0x147d('0x1e'),_0x4cd594[_0x147d('0x1f')]?'g':'',_[_0x147d('0x12')](_0x4cd594['monitor_format'])?'':'U(xcally-mixmonitor-context)'),'XMD-DIALURL':_0x4cd594[_0x147d('0x20')]||'','XMD-AGI':_0x4cd594[_0x147d('0x21')]?util[_0x147d('0x13')](_0x147d('0x22'),ipAgi,_0x4cd594[_0x147d('0x21')]):_0x147d('0x23'),'XMD-AGIAFTER':_0x4cd594[_0x147d('0x1f')]?util[_0x147d('0x13')]('\x22agi://%s/square,%s\x22',ipAgi,_0x4cd594[_0x147d('0x1f')]):'NONE','XMD-ORIGINATECALLERIDNUM':_0x3eb4a3?_0x3eb4a3[_0x147d('0x24')]:'','XMD-ORIGINATECALLERIDNAME':_0x3eb4a3?_0x3eb4a3['originatecalleridname']:'','XMD-DESTINATION':_0x147d('0x25')};if(!_['isEmpty'](_0x4cd594[_0x147d('0x26')])){_0x4aa6ce[util[_0x147d('0x13')]('%s','_XCALLY_MIXMONITOR_FORMAT')]=_0x4cd594[_0x147d('0x26')];_0x4aa6ce[util[_0x147d('0x13')]('%s','_XCALLY_MIXMONITOR_UNIQUEID')]=_0x2b6b0c;}if(_0x543c70&&_0x543c70[_0x147d('0x27')]){for(var _0x1c7556 in _0x543c70[_0x147d('0x27')]){if(_0x543c70[_0x147d('0x27')][_0x147d('0x28')](_0x1c7556)){if(!_['isNil'](_0x543c70['Contact'][_0x1c7556])&&_0x1c7556!=='id'&&_0x1c7556!==_0x147d('0x29')&&_0x1c7556!=='createdAt'&&_0x1c7556!==_0x147d('0x2a')){_0x4aa6ce[util['format'](_0x147d('0x2b'),_0x147d('0x2c'),_['toUpper'](_0x1c7556))]=_0x543c70[_0x147d('0x27')][_0x1c7556];}}}}return _0x4aa6ce;};exports[_0x147d('0x2d')]=function(_0x78d823){var _0x570964={};for(var _0x34a247 in _0x78d823){if(_0x78d823[_0x147d('0x28')](_0x34a247)){_0x570964[util[_0x147d('0x13')]('%s',_[_0x147d('0x2e')](_0x34a247))]=_0x78d823[_0x34a247];}}return{'variables':_0x570964};};exports[_0x147d('0x2f')]=function(_0x180f60,_0x3dc512){if(!_[_0x147d('0x15')](_0x180f60)){if(_0x180f60[_0x147d('0x28')](_0x147d('0x30'))){if(_0x180f60['originated']>0x0){_0x180f60[_0x147d('0x30')]-=0x1;}else{logger['error'](_0x147d('0x31'),_0x3dc512);}}}else{logger[_0x147d('0x9')](_0x147d('0x32'),_0x3dc512);}};exports[_0x147d('0x33')]=function(_0x3527ba){var _0x594fb4=moment()[_0x147d('0x13')]('YYYY-MM-DD\x20HH:mm:ss');_0x3527ba['state']=0xd;_0x3527ba[_0x147d('0x34')]='Blacklist';_0x3527ba[_0x147d('0x35')]=_0x594fb4;_0x3527ba[_0x147d('0x36')]=_0x594fb4;_0x3527ba['endtime']=_0x594fb4;};exports[_0x147d('0x37')]=function(_0x243cd8,_0xcb0c7d,_0x34660a){var _0x5a4cdf=moment()[_0x147d('0x13')](_0x147d('0x38'));_0x243cd8['state']=_0xcb0c7d;_0x243cd8[_0x147d('0x34')]=_0x34660a;_0x243cd8['responsetime']=_0x5a4cdf;_0x243cd8[_0x147d('0x39')]=getSeconds(_0x243cd8[_0x147d('0x36')],_0x243cd8['starttime']);};exports[_0x147d('0x3a')]=function(_0x174da8,_0x5a2646,_0x4d0265){_0x174da8[_0x147d('0x3b')]=_0x5a2646;_0x174da8['UserId']=_0x4d0265;};exports['logCustomer']=function(_0x2830d9,_0xa98d23,_0x5964ce){var _0x24008d=moment()[_0x147d('0x13')]('YYYY-MM-DD\x20HH:mm:ss');_0x2830d9[_0x147d('0x3c')]=_0xa98d23;_0x2830d9[_0x147d('0x34')]=_0x5964ce;_0x2830d9[_0x147d('0x36')]=_0x2830d9[_0x147d('0x36')]?_0x2830d9[_0x147d('0x36')]:_0x24008d;_0x2830d9['endtime']=_0x2830d9[_0x147d('0x3d')]?_0x2830d9[_0x147d('0x3d')]:_0x24008d;_0x2830d9[_0x147d('0x39')]=getSeconds(_0x2830d9[_0x147d('0x36')]||0x0,_0x2830d9[_0x147d('0x35')]||0x0);_0x2830d9['talktime']=_0x2830d9[_0x147d('0x3e')]?getSeconds(_0x2830d9['endtime'],_0x2830d9[_0x147d('0x3e')]):0x0;};exports['isFailure']=function(_0x5d116f){return _0x5d116f==='Failure';};exports[_0x147d('0x3f')]=function(_0x5e3ad8,_0x238d48,_0x429aa1,_0x1b8f4f,_0x4baecb){var _0x4ff81b=_0x1b8f4f?_0x147d('0x40'):_0x5e3ad8[_0x147d('0x19')];_0x4ff81b=_0x4baecb?_0x147d('0x41'):_0x4ff81b;return{'actionid':_0x5e3ad8[_0x147d('0x42')],'action':'originate','channel':_0x5e3ad8[_0x147d('0x43')],'callerid':util[_0x147d('0x13')](_0x147d('0x14'),_0x4ff81b,_0x5e3ad8['calleridnum']),'Exten':_0x147d('0x25'),'Context':'from-sip','Priority':'1','variable':_0x429aa1,'timeout':(_0x238d48[_0x147d('0x44')]||0x1e)*0x3e8,'async':!![],'channelid':_0x5e3ad8[_0x147d('0x42')]};};exports[_0x147d('0x45')]=function(_0x5dd7b0){return _0x5dd7b0[_0x147d('0x46')]+_0x5dd7b0[_0x147d('0x47')]+_0x5dd7b0[_0x147d('0x48')];};exports['cloneAction']=function(_0x37f8e2){var _0x544d61=_[_0x147d('0x49')](_0x37f8e2);_0x544d61[_0x147d('0x3c')]=0xf;_0x544d61['statedesc']='Global';return _0x544d61;};exports['scheduledAt']=function(_0xdec571,_0x11352f,_0x1abcc2){var _0x24fd36={};_0x24fd36[_0x11352f]=_0xdec571[_0x11352f];_0x24fd36[_0x147d('0x4a')]=![];_0x24fd36[_0x147d('0x4b')]=moment()['add'](_0x1abcc2,_0x147d('0x4c'))[_0x147d('0x13')](_0x147d('0x38'));_0x24fd36[_0x147d('0x4d')]=_0xdec571[_0x147d('0x4d')];_0x24fd36[_0x147d('0x4e')]=_0xdec571[_0x147d('0x4e')];_0x24fd36[_0x147d('0x1c')]=_0xdec571['VoiceQueueId']||undefined;return _0x24fd36;};exports[_0x147d('0x4f')]=function(_0x2c49d9,_0x13fc1c){if(!_[_0x147d('0x15')](_0x2c49d9)){if(_0x2c49d9['pTalking']>0x0){_0x2c49d9[_0x147d('0x50')]-=0x1;}else{logger[_0x147d('0x9')](_0x13fc1c,_0x147d('0x51'));}}else{logger[_0x147d('0x9')](_0x13fc1c,_0x147d('0x52'));}};exports['IsNotLoggedIn']=function(_0x902b05){if(_0x902b05<=0x0){return!![];}return![];};exports[_0x147d('0x53')]=function(_0xeefcc0,_0x175d5b){_0xeefcc0[_0x147d('0x54')]=_0x175d5b;_0xeefcc0[_0x147d('0x18')]=_0xeefcc0['queue'];_0xeefcc0[_0x147d('0x55')]=_0xeefcc0['channelAgent'];return _0xeefcc0;};exports[_0x147d('0x56')]=function(_0x29f9e3){var _0x33c2c3={};_0x33c2c3[_0x147d('0x57')]=_0x29f9e3[_0x147d('0x57')];_0x33c2c3[_0x147d('0x55')]=_0x29f9e3[_0x147d('0x43')];_0x33c2c3[_0x147d('0x42')]=_0x29f9e3[_0x147d('0x42')];return _0x33c2c3;};exports[_0x147d('0x58')]=function(_0x4accc4){var _0x1cde2d=[];for(var _0x139319 in _0x4accc4){if(_0x4accc4['hasOwnProperty'](_0x139319)){if(!_[_0x147d('0x15')](_0x4accc4[_0x139319])&&_0x4accc4[_0x139319]['state']===_0x147d('0x59')&&_0x4accc4[_0x139319]['status']===_0x147d('0x5a')){_0x1cde2d[_0x147d('0x5b')](_0x4accc4[_0x139319]['id']);}}}return _0x1cde2d;};exports['getDiff']=function(_0x1bd1e5){var _0x3095b8=moment()[_0x147d('0x6')](0x0);var _0x3e8d2f=moment(_0x1bd1e5)[_0x147d('0x6')](0x0);return _0x3095b8[_0x147d('0x5c')](_0x3e8d2f,_0x147d('0x7'));};exports[_0x147d('0x5d')]=function(_0x4901d6){return{'active':![],'recallme':![],'UserId':null,'ContactId':_0x4901d6['ContactId'],'ListId':_0x4901d6['ListId'],'VoiceQueueId':_0x4901d6[_0x147d('0x1c')]||undefined,'CampaignId':_0x4901d6[_0x147d('0x5e')]||undefined};};exports[_0x147d('0x5f')]=function(_0x5882fe){if(_0x5882fe===_0x147d('0x42')||_0x5882fe===_0x147d('0x60')||_0x5882fe==='queue'||_0x5882fe==='type'||_0x5882fe===_0x147d('0x61')||_0x5882fe===_0x147d('0x62')||_0x5882fe===_0x147d('0x3b')||_0x5882fe===_0x147d('0x43')||_0x5882fe==='calleridname'||_0x5882fe===_0x147d('0x4a')||_0x5882fe==='calleridnum'||_0x5882fe===_0x147d('0x4b')||_0x5882fe===_0x147d('0x46')||_0x5882fe===_0x147d('0x47')||_0x5882fe===_0x147d('0x48')||_0x5882fe==='countglobal'||_0x5882fe===_0x147d('0x63')||_0x5882fe===_0x147d('0x64')||_0x5882fe===_0x147d('0x65')||_0x5882fe===_0x147d('0x66')||_0x5882fe==='ContactId'||_0x5882fe===_0x147d('0x4e')||_0x5882fe===_0x147d('0x67')||_0x5882fe==='VoiceQueueId'||_0x5882fe===_0x147d('0x68')||_0x5882fe===_0x147d('0x69')||_0x5882fe==='xmd-queue'||_0x5882fe===_0x147d('0x6a')||_0x5882fe===_0x147d('0x6b')||_0x5882fe==='xmd-dialurl'||_0x5882fe===_0x147d('0x6c')||_0x5882fe===_0x147d('0x6d')||_0x5882fe===_0x147d('0x6e')||_0x5882fe===_0x147d('0x6f')||_0x5882fe==='xmd-contactid'||_0x5882fe===_0x147d('0x70')||_0x5882fe===_0x147d('0x71')||_0x5882fe==='xmd-agiafter'||_0x5882fe===_0x147d('0x72')||_0x5882fe==='rtpaudioqos'||_0x5882fe===_0x147d('0x73')||_0x5882fe===_0x147d('0x74')||_0x5882fe===_0x147d('0x75')||_0x5882fe===_0x147d('0x76')||_0x5882fe==='rtpaudioqoslossbridged'||_0x5882fe===_0x147d('0x77')||_0x5882fe===_0x147d('0x78')||_0x5882fe===_0x147d('0x79')||_0x5882fe===_0x147d('0x73')||_0x5882fe==='rtpaudioqosjitter'||_0x5882fe===_0x147d('0x75')||_0x5882fe===_0x147d('0x76')||_0x5882fe==='rtpaudioqoslossbridged'||_0x5882fe===_0x147d('0x77')||_0x5882fe==='rtpaudioqosrttbridged'||_0x5882fe==='bridgepeer'||_0x5882fe===_0x147d('0x7a')||_0x5882fe===_0x147d('0x3c')||_0x5882fe===_0x147d('0x34')){return![];}return!![];};exports['getCallerIdRandom']=function(_0x1b616a,_0xce5484){var _0x3b2929,_0x41395c,_0x26d0c4;if(_0xce5484<=0x0){_0xce5484=0x1;}_0x3b2929=new RegExp(_0x147d('0x7b')+_0xce5484+'}$');_0x41395c=Math[_0x147d('0x7c')](0xa,_0xce5484-0x1);_0x26d0c4=Math[_0x147d('0x7c')](0xa,_0xce5484)-0x1;return util[_0x147d('0x13')]('%s',_[_0x147d('0x7d')](_0x1b616a,_0x3b2929,_[_0x147d('0x7e')](_0x41395c,_0x26d0c4)));};exports[_0x147d('0x7f')]=function(_0x1ac154){var _0x16fec8=_0x1ac154[_0x147d('0x80')](/"(.*?)"/);return _0x16fec8?_0x16fec8[0x1]:_0x1ac154;};exports[_0x147d('0x81')]=function(_0x5a964a){var _0x13d0ef=_0x5a964a[_0x147d('0x80')](/<(.*?)>/);return _0x13d0ef?_0x13d0ef[0x1]:_0x5a964a;};
\ No newline at end of file
+var _0x32a6=['from-sip','timeout','totalGlobal','countcongestionretry','cloneAction','clone','Global','scheduledAt','active','scheduledat','add','minutes','pTalking','[decrementTalkink]\x20object\x20talking\x20is\x20negative','IsNotLoggedIn','buildObj','queue','interface','buildAcw','agentReadyId','not_inuse','status','push','getDiff','milliseconds','diff','createBody','CampaignId','filterKey','idContact','type','campaigntype','dialAnswer','countnoanswerretry','countglobal','callback','callbackuniqueid','callbackat','recallme','ListId','sipcallid','xmd-voicequeueid','xmd-queue','xmd-dialurl','xmd-dialoptions','xmd-dialid','xmd-dialchannel','xmd-contactid','xmd-cdrtype','xmd-callerid','xmd-agiafter','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqosrtt','rtpaudioqosrttbridged','bridgepeer','getCallerIdRandom','\x5cw{0,','pow','replace','extractCalleridName','match','extractCalleridNumber','util','lodash','moment','../../../../config/logger','preview','env','XCALLY_IP_AGI','127.0.0.1','seconds','error','inspect','logger','loggerError','logger2','info','message','getCallerId','isUndefined','string','isEmpty','format','\x22%s\x22\x20<%s>','\x22\x22\x20<>','isNil','addVariables','Queue','name','calleridname','calleridnum','ContactId','dialer','VoiceQueueId','\x22rtTxX%s%s\x22','dialQueueProject2','monitor_format','U(xcally-mixmonitor-context)','dialQueueProject','NONE','\x22agi://%s/square,%s\x22','originatecalleridnum','originatecalleridname','_XCALLY_MIXMONITOR_FORMAT','_XCALLY_MIXMONITOR_UNIQUEID','Contact','hasOwnProperty','tags','updatedAt','%s%s','XMD-','toLowerVariables','toLower','originated','logBlacklist','YYYY-MM-DD\x20HH:mm:ss','state','statedesc','responsetime','endtime','logAgent','starttime','membername','UserId','logCustomer','ringtime','talktime','answertime','isFailure','Failure','variablesAction','RECALL','BOOKED','uniqueid','originate','channelAgent','xcally-motion-preview'];(function(_0x3f183c,_0x2dda3e){var _0x3d376e=function(_0xab9bc6){while(--_0xab9bc6){_0x3f183c['push'](_0x3f183c['shift']());}};_0x3d376e(++_0x2dda3e);}(_0x32a6,0xcf));var _0x632a=function(_0x2b9236,_0x2d42c7){_0x2b9236=_0x2b9236-0x0;var _0x17e247=_0x32a6[_0x2b9236];return _0x17e247;};'use strict';var util=require(_0x632a('0x0'));var _=require(_0x632a('0x1'));var moment=require(_0x632a('0x2'));var logger=require(_0x632a('0x3'))(_0x632a('0x4'));var ipAgi=process[_0x632a('0x5')][_0x632a('0x6')]||_0x632a('0x7');function getSeconds(_0x4f1e4d,_0x1b688c){var _0x48680d=moment(_0x4f1e4d)['milliseconds'](0x0);var _0x508505=moment(_0x1b688c)['milliseconds'](0x0);return _0x48680d['diff'](_0x508505,_0x632a('0x8'));}exports['loggerCatch']=function(_0x3499f8){return function(_0x5e65f8){logger[_0x632a('0x9')](_0x3499f8,util[_0x632a('0xa')](_0x5e65f8,{'showHidden':![],'depth':null}));};};exports[_0x632a('0xb')]=function(_0x344d9e,_0x4c0bc5){logger['info'](_0x344d9e,util[_0x632a('0xa')](_0x4c0bc5,{'showHidden':![],'depth':null}));};exports[_0x632a('0xc')]=function(_0x118867,_0x20ac03){logger['error'](_0x118867,util[_0x632a('0xa')](_0x20ac03,{'showHidden':![],'depth':null}));};exports[_0x632a('0xd')]=function(_0x55826a){return function(_0x3936bd){logger[_0x632a('0xe')](_0x55826a,util['inspect'](_0x3936bd,{'showHidden':![],'depth':null}));};};exports[_0x632a('0xf')]=function(_0x593d15,_0x3eb8e2,_0x56ebfb){return{'message':_0x593d15,'unlock':_0x3eb8e2,'active':_0x56ebfb};};exports[_0x632a('0x10')]=function(_0x5ee1c6,_0x27268f,_0x1bda02){if(!_[_0x632a('0x11')](_0x1bda02)&&_0x632a('0x12')===typeof _0x1bda02&&!_[_0x632a('0x13')](_0x1bda02)){if(!_[_0x632a('0x11')](_0x27268f)&&_0x632a('0x12')===typeof _0x27268f&&!_[_0x632a('0x13')](_0x27268f)){return util[_0x632a('0x14')]('\x22%s\x22\x20<%s>',_0x27268f,_0x1bda02);}return util[_0x632a('0x14')](_0x632a('0x15'),_0x1bda02,_0x1bda02);}if(!_[_0x632a('0x11')](_0x5ee1c6)&&_0x632a('0x12')===typeof _0x5ee1c6&&!_[_0x632a('0x13')](_0x5ee1c6)){return _0x5ee1c6;}return _0x632a('0x16');};exports['isActive']=function(_0x80307d){if(_[_0x632a('0x17')](_0x80307d)){return![];}return _0x80307d;};exports[_0x632a('0x18')]=function(_0x51e00a,_0x11b1a7,_0x5e7663,_0x3b9d83,_0x2f59e7,_0x293b6f){var _0xfae015={'XMD-QUEUE':_0x11b1a7[_0x632a('0x19')]?_0x11b1a7[_0x632a('0x19')][_0x632a('0x1a')]:'','XMD-CALLERID':_0x3b9d83,'XMD-CALLERID-PREVIEW':_0x293b6f?util['format'](_0x632a('0x15'),_0x293b6f[_0x632a('0x1b')],_0x293b6f[_0x632a('0x1c')]):_0x3b9d83,'XMD-DIALID':_0x2f59e7,'XMD-CONTACTID':_0x11b1a7[_0x632a('0x1d')],'XMD-CDRTYPE':_0x632a('0x1e'),'CALLERID(all)':_0x3b9d83,'XMD-VOICEQUEUEID':_0x11b1a7[_0x632a('0x1f')],'XMD-DIALCHANNEL':_0x5e7663,'XMD-DIALTIMEOUT':_0x51e00a['dialOriginateTimeout']||0x1e,'XMD-DIALOPTIONS':util[_0x632a('0x14')](_0x632a('0x20'),_0x51e00a[_0x632a('0x21')]?'g':'',_[_0x632a('0x13')](_0x51e00a[_0x632a('0x22')])?'':_0x632a('0x23')),'XMD-DIALURL':_0x51e00a['dialPreviewUrl']||'','XMD-AGI':_0x51e00a[_0x632a('0x24')]?util[_0x632a('0x14')]('\x22agi://%s/square,%s\x22',ipAgi,_0x51e00a[_0x632a('0x24')]):_0x632a('0x25'),'XMD-AGIAFTER':_0x51e00a[_0x632a('0x21')]?util[_0x632a('0x14')](_0x632a('0x26'),ipAgi,_0x51e00a[_0x632a('0x21')]):_0x632a('0x25'),'XMD-ORIGINATECALLERIDNUM':_0x293b6f?_0x293b6f[_0x632a('0x27')]:'','XMD-ORIGINATECALLERIDNAME':_0x293b6f?_0x293b6f[_0x632a('0x28')]:'','XMD-DESTINATION':'xcally-motion-preview'};if(!_[_0x632a('0x13')](_0x51e00a[_0x632a('0x22')])){_0xfae015[util['format']('%s',_0x632a('0x29'))]=_0x51e00a[_0x632a('0x22')];_0xfae015[util[_0x632a('0x14')]('%s',_0x632a('0x2a'))]=_0x2f59e7;}if(_0x11b1a7&&_0x11b1a7[_0x632a('0x2b')]){for(var _0x3852fe in _0x11b1a7[_0x632a('0x2b')]){if(_0x11b1a7[_0x632a('0x2b')][_0x632a('0x2c')](_0x3852fe)){if(!_[_0x632a('0x17')](_0x11b1a7[_0x632a('0x2b')][_0x3852fe])&&_0x3852fe!=='id'&&_0x3852fe!==_0x632a('0x2d')&&_0x3852fe!=='createdAt'&&_0x3852fe!==_0x632a('0x2e')){_0xfae015[util['format'](_0x632a('0x2f'),_0x632a('0x30'),_['toUpper'](_0x3852fe))]=_0x11b1a7[_0x632a('0x2b')][_0x3852fe];}}}}return _0xfae015;};exports[_0x632a('0x31')]=function(_0x40128c){var _0x455a8a={};for(var _0x269909 in _0x40128c){if(_0x40128c['hasOwnProperty'](_0x269909)){_0x455a8a[util[_0x632a('0x14')]('%s',_[_0x632a('0x32')](_0x269909))]=_0x40128c[_0x269909];}}return{'variables':_0x455a8a};};exports['updateOriginated']=function(_0xf12c80,_0x5f0b7c){if(!_[_0x632a('0x17')](_0xf12c80)){if(_0xf12c80['hasOwnProperty'](_0x632a('0x33'))){if(_0xf12c80[_0x632a('0x33')]>0x0){_0xf12c80[_0x632a('0x33')]-=0x1;}else{logger[_0x632a('0x9')]('[updateOriginated]\x20object\x20originated\x20is\x20negative',_0x5f0b7c);}}}else{logger['error']('[updateOriginated]\x20is\x20null\x20or\x20undefined',_0x5f0b7c);}};exports[_0x632a('0x34')]=function(_0x5da8a8){var _0x3f0080=moment()[_0x632a('0x14')](_0x632a('0x35'));_0x5da8a8[_0x632a('0x36')]=0xd;_0x5da8a8[_0x632a('0x37')]='Blacklist';_0x5da8a8['starttime']=_0x3f0080;_0x5da8a8[_0x632a('0x38')]=_0x3f0080;_0x5da8a8[_0x632a('0x39')]=_0x3f0080;};exports[_0x632a('0x3a')]=function(_0x130e95,_0x1eabc3,_0x1dd19e){var _0x3c1d95=moment()[_0x632a('0x14')](_0x632a('0x35'));_0x130e95[_0x632a('0x36')]=_0x1eabc3;_0x130e95[_0x632a('0x37')]=_0x1dd19e;_0x130e95['responsetime']=_0x3c1d95;_0x130e95['ringtime']=getSeconds(_0x130e95['responsetime'],_0x130e95[_0x632a('0x3b')]);};exports['logLookAgent']=function(_0x190301,_0x1bc694,_0x3db84f){_0x190301[_0x632a('0x3c')]=_0x1bc694;_0x190301[_0x632a('0x3d')]=_0x3db84f;};exports[_0x632a('0x3e')]=function(_0x5de301,_0x48b7fa,_0x1f0010){var _0xeb508=moment()['format'](_0x632a('0x35'));_0x5de301[_0x632a('0x36')]=_0x48b7fa;_0x5de301[_0x632a('0x37')]=_0x1f0010;_0x5de301[_0x632a('0x38')]=_0x5de301[_0x632a('0x38')]?_0x5de301['responsetime']:_0xeb508;_0x5de301[_0x632a('0x39')]=_0x5de301['endtime']?_0x5de301['endtime']:_0xeb508;_0x5de301[_0x632a('0x3f')]=getSeconds(_0x5de301[_0x632a('0x38')]||0x0,_0x5de301['starttime']||0x0);_0x5de301[_0x632a('0x40')]=_0x5de301[_0x632a('0x41')]?getSeconds(_0x5de301[_0x632a('0x39')],_0x5de301[_0x632a('0x41')]):0x0;};exports[_0x632a('0x42')]=function(_0x115ca1){return _0x115ca1===_0x632a('0x43');};exports[_0x632a('0x44')]=function(_0x3be44d,_0x517c6d,_0x400ea7,_0x539a6b,_0x15628d){var _0x4278c0=_0x539a6b?_0x632a('0x45'):_0x3be44d['calleridname'];_0x4278c0=_0x15628d?_0x632a('0x46'):_0x4278c0;return{'actionid':_0x3be44d[_0x632a('0x47')],'action':_0x632a('0x48'),'channel':_0x3be44d[_0x632a('0x49')],'callerid':util[_0x632a('0x14')](_0x632a('0x15'),_0x4278c0,_0x3be44d[_0x632a('0x1c')]),'Exten':_0x632a('0x4a'),'Context':_0x632a('0x4b'),'Priority':'1','variable':_0x400ea7,'timeout':(_0x517c6d[_0x632a('0x4c')]||0x1e)*0x3e8,'async':!![],'channelid':_0x3be44d[_0x632a('0x47')]};};exports[_0x632a('0x4d')]=function(_0x4aa180){return _0x4aa180['countbusyretry']+_0x4aa180[_0x632a('0x4e')]+_0x4aa180['countnoanswerretry'];};exports[_0x632a('0x4f')]=function(_0x39b2da){var _0x5520dc=_[_0x632a('0x50')](_0x39b2da);_0x5520dc[_0x632a('0x36')]=0xf;_0x5520dc[_0x632a('0x37')]=_0x632a('0x51');return _0x5520dc;};exports[_0x632a('0x52')]=function(_0x51a0f7,_0x51e78d,_0x24246e){var _0x273cc1={};_0x273cc1[_0x51e78d]=_0x51a0f7[_0x51e78d];_0x273cc1[_0x632a('0x53')]=![];_0x273cc1[_0x632a('0x54')]=moment()[_0x632a('0x55')](_0x24246e,_0x632a('0x56'))[_0x632a('0x14')](_0x632a('0x35'));_0x273cc1[_0x632a('0x1d')]=_0x51a0f7[_0x632a('0x1d')];_0x273cc1['ListId']=_0x51a0f7['ListId'];_0x273cc1[_0x632a('0x1f')]=_0x51a0f7['VoiceQueueId']||undefined;return _0x273cc1;};exports['decrementTalkink']=function(_0x569574,_0xcca29){if(!_['isNil'](_0x569574)){if(_0x569574[_0x632a('0x57')]>0x0){_0x569574[_0x632a('0x57')]-=0x1;}else{logger['error'](_0xcca29,_0x632a('0x58'));}}else{logger[_0x632a('0x9')](_0xcca29,'[decrementTalkink]\x20is\x20null\x20or\x20undefined');}};exports[_0x632a('0x59')]=function(_0x502b1f){if(_0x502b1f<=0x0){return!![];}return![];};exports[_0x632a('0x5a')]=function(_0x1656bc,_0x40b69f){_0x1656bc['lastevent']=_0x40b69f;_0x1656bc[_0x632a('0x1a')]=_0x1656bc[_0x632a('0x5b')];_0x1656bc[_0x632a('0x5c')]=_0x1656bc[_0x632a('0x49')];return _0x1656bc;};exports[_0x632a('0x5d')]=function(_0x2baff1){var _0x15fa53={};_0x15fa53['queue']=_0x2baff1[_0x632a('0x5b')];_0x15fa53[_0x632a('0x5c')]=_0x2baff1[_0x632a('0x49')];_0x15fa53['uniqueid']=_0x2baff1[_0x632a('0x47')];return _0x15fa53;};exports[_0x632a('0x5e')]=function(_0x49587c){var _0x2e60bf=[];for(var _0x40dc4c in _0x49587c){if(_0x49587c[_0x632a('0x2c')](_0x40dc4c)){if(!_[_0x632a('0x17')](_0x49587c[_0x40dc4c])&&_0x49587c[_0x40dc4c][_0x632a('0x36')]===_0x632a('0x5f')&&_0x49587c[_0x40dc4c][_0x632a('0x60')]==='reachable'){_0x2e60bf[_0x632a('0x61')](_0x49587c[_0x40dc4c]['id']);}}}return _0x2e60bf;};exports[_0x632a('0x62')]=function(_0x5d8b9f){var _0xd54518=moment()[_0x632a('0x63')](0x0);var _0x577714=moment(_0x5d8b9f)[_0x632a('0x63')](0x0);return _0xd54518[_0x632a('0x64')](_0x577714,_0x632a('0x8'));};exports[_0x632a('0x65')]=function(_0x445162){return{'active':![],'recallme':![],'UserId':null,'ContactId':_0x445162['ContactId'],'ListId':_0x445162['ListId'],'VoiceQueueId':_0x445162[_0x632a('0x1f')]||undefined,'CampaignId':_0x445162[_0x632a('0x66')]||undefined};};exports[_0x632a('0x67')]=function(_0x2360d6){if(_0x2360d6==='uniqueid'||_0x2360d6===_0x632a('0x68')||_0x2360d6===_0x632a('0x5b')||_0x2360d6===_0x632a('0x69')||_0x2360d6===_0x632a('0x6a')||_0x2360d6===_0x632a('0x6b')||_0x2360d6===_0x632a('0x3c')||_0x2360d6===_0x632a('0x49')||_0x2360d6==='calleridname'||_0x2360d6===_0x632a('0x53')||_0x2360d6===_0x632a('0x1c')||_0x2360d6==='scheduledat'||_0x2360d6==='countbusyretry'||_0x2360d6===_0x632a('0x4e')||_0x2360d6===_0x632a('0x6c')||_0x2360d6===_0x632a('0x6d')||_0x2360d6===_0x632a('0x6e')||_0x2360d6===_0x632a('0x6f')||_0x2360d6===_0x632a('0x70')||_0x2360d6===_0x632a('0x71')||_0x2360d6==='ContactId'||_0x2360d6===_0x632a('0x72')||_0x2360d6===_0x632a('0x3d')||_0x2360d6==='VoiceQueueId'||_0x2360d6===_0x632a('0x73')||_0x2360d6===_0x632a('0x74')||_0x2360d6===_0x632a('0x75')||_0x2360d6==='xmd-phone'||_0x2360d6==='xmd-listid'||_0x2360d6===_0x632a('0x76')||_0x2360d6==='xmd-dialtimeout'||_0x2360d6===_0x632a('0x77')||_0x2360d6===_0x632a('0x78')||_0x2360d6===_0x632a('0x79')||_0x2360d6===_0x632a('0x7a')||_0x2360d6===_0x632a('0x7b')||_0x2360d6===_0x632a('0x7c')||_0x2360d6===_0x632a('0x7d')||_0x2360d6==='xmd-agi'||_0x2360d6===_0x632a('0x7e')||_0x2360d6===_0x632a('0x7f')||_0x2360d6===_0x632a('0x80')||_0x2360d6===_0x632a('0x81')||_0x2360d6===_0x632a('0x82')||_0x2360d6==='rtpaudioqoslossbridged'||_0x2360d6===_0x632a('0x83')||_0x2360d6===_0x632a('0x84')||_0x2360d6===_0x632a('0x7e')||_0x2360d6===_0x632a('0x7f')||_0x2360d6===_0x632a('0x80')||_0x2360d6===_0x632a('0x81')||_0x2360d6===_0x632a('0x82')||_0x2360d6==='rtpaudioqoslossbridged'||_0x2360d6===_0x632a('0x83')||_0x2360d6===_0x632a('0x84')||_0x2360d6===_0x632a('0x85')||_0x2360d6==='bridgepvtcallid'||_0x2360d6===_0x632a('0x36')||_0x2360d6===_0x632a('0x37')){return![];}return!![];};exports[_0x632a('0x86')]=function(_0x1835e0,_0x216948){var _0xd2e718,_0x51cb8b,_0x195722;if(_0x216948<=0x0){_0x216948=0x1;}_0xd2e718=new RegExp(_0x632a('0x87')+_0x216948+'}$');_0x51cb8b=Math[_0x632a('0x88')](0xa,_0x216948-0x1);_0x195722=Math[_0x632a('0x88')](0xa,_0x216948)-0x1;return util[_0x632a('0x14')]('%s',_[_0x632a('0x89')](_0x1835e0,_0xd2e718,_['random'](_0x51cb8b,_0x195722)));};exports[_0x632a('0x8a')]=function(_0xdac0af){var _0x37761a=_0xdac0af[_0x632a('0x8b')](/"(.*?)"/);return _0x37761a?_0x37761a[0x1]:_0xdac0af;};exports[_0x632a('0x8c')]=function(_0x13a5de){var _0x2f82e4=_0x13a5de[_0x632a('0x8b')](/<(.*?)>/);return _0x2f82e4?_0x2f82e4[0x1]:_0x13a5de;};
\ No newline at end of file
index 890c611..008162a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8c25=['number','boolean','reload','voicechannel','voicequeuechannelhangup','voicequeuechannelredirect','queueadd','string'];(function(_0x4834f0,_0x488c5e){var _0x5569a3=function(_0x52b858){while(--_0x52b858){_0x4834f0['push'](_0x4834f0['shift']());}};_0x5569a3(++_0x488c5e);}(_0x8c25,0x15e));var _0x58c2=function(_0x350074,_0x3daa47){_0x350074=_0x350074-0x0;var _0x4c9b5b=_0x8c25[_0x350074];return _0x4c9b5b;};'use strict';exports[_0x58c2('0x0')]={'queue':{'type':_0x58c2('0x1'),'required':!![]},'interface':{'type':_0x58c2('0x1'),'required':!![]},'membername':{'type':_0x58c2('0x1'),'required':!![]},'penalty':{'type':_0x58c2('0x2'),'required':![]},'paused':{'type':_0x58c2('0x3'),'required':![]}};exports['queueremove']={'queue':{'type':_0x58c2('0x1'),'required':!![]},'interface':{'type':'string','required':!![]}};exports['queuepause']={'interface':{'type':'string','required':!![]},'paused':{'type':_0x58c2('0x3')},'reason':{'type':'string','required':![]}};exports[_0x58c2('0x4')]={'module':{'type':'string','required':![]}};exports['voicequeuechannel']={'uniqueid':{'type':_0x58c2('0x1'),'required':!![]}};exports[_0x58c2('0x5')]={'uniqueid':{'type':'string','required':!![]},'filename':{'type':_0x58c2('0x1')},'format':{'type':_0x58c2('0x1')},'mixmonitorid':{'type':_0x58c2('0x1')}};exports[_0x58c2('0x6')]={'uniqueid':{'type':_0x58c2('0x1'),'required':!![]}};exports[_0x58c2('0x7')]={'uniqueid':{'type':_0x58c2('0x1'),'required':!![]},'exten':{'type':_0x58c2('0x1'),'required':!![]},'context':{'type':'string'}};
\ No newline at end of file
+var _0x5301=['voicequeuechannelredirect','string','number','boolean','queuepause','voicechannel'];(function(_0x6e447b,_0x4693d5){var _0x16a36f=function(_0x5590bc){while(--_0x5590bc){_0x6e447b['push'](_0x6e447b['shift']());}};_0x16a36f(++_0x4693d5);}(_0x5301,0x157));var _0x1530=function(_0x44d2b7,_0x1f3249){_0x44d2b7=_0x44d2b7-0x0;var _0x415760=_0x5301[_0x44d2b7];return _0x415760;};'use strict';exports['queueadd']={'queue':{'type':_0x1530('0x0'),'required':!![]},'interface':{'type':_0x1530('0x0'),'required':!![]},'membername':{'type':_0x1530('0x0'),'required':!![]},'penalty':{'type':_0x1530('0x1'),'required':![]},'paused':{'type':_0x1530('0x2'),'required':![]}};exports['queueremove']={'queue':{'type':_0x1530('0x0'),'required':!![]},'interface':{'type':_0x1530('0x0'),'required':!![]}};exports[_0x1530('0x3')]={'interface':{'type':_0x1530('0x0'),'required':!![]},'paused':{'type':'boolean'},'reason':{'type':_0x1530('0x0'),'required':![]}};exports['reload']={'module':{'type':_0x1530('0x0'),'required':![]}};exports['voicequeuechannel']={'uniqueid':{'type':_0x1530('0x0'),'required':!![]}};exports[_0x1530('0x4')]={'uniqueid':{'type':_0x1530('0x0'),'required':!![]},'filename':{'type':_0x1530('0x0')},'format':{'type':_0x1530('0x0')},'mixmonitorid':{'type':'string'}};exports['voicequeuechannelhangup']={'uniqueid':{'type':_0x1530('0x0'),'required':!![]}};exports[_0x1530('0x5')]={'uniqueid':{'type':_0x1530('0x0'),'required':!![]},'exten':{'type':_0x1530('0x0'),'required':!![]},'context':{'type':'string'}};
\ No newline at end of file
index 98a6fc0..5a6a13e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3532=['sugarcrmAccounts','freshdeskAccounts','zohoAccounts','deskAccounts','vtigerAccounts','servicenowAccounts','faxAccounts','mapKeys','hasOwnProperty','format','name','SIP/%s','interface','total','answered','sumHoldTime','isEmpty','ivrTotalCallsDays','ivrAnswerCallsDay','unmanaged','abandoned','sumBillable','outboundAnswerAgiCallsDay','outboundNoAnswerCallsDay','outboundCongestionCallsDay','outboundNoSuchCallsDay','outboundUnknownCallsDay','outboundBlacklistCallsDay','outboundRejectCallsDay','outboundReCallsDay','queueStatusComplete','mergeFromDatabase','prototype','initAgents','length','isUndefined','initTelephones','initTrunks','trunks','initTriggers','triggers','initTemplates','initFreshdeskAccounts','initZohoAccounts','initDeskAccounts','initSugarcrmAccounts','initVtigerAccounts','initServicenowAccounts','initDynamics365Accounts','dynamics365Accounts','initVoiceQueueHopperHistory','merge','initVoiceQueueReports','uniqueid','queue','queuecallerabandon','queuecallerleaveAt','diff','queuecallerjoinAt','seconds','queuecallercompleteAt','queuecallerabandonAt','queuecallerexitAt','queuecallercomplete','sumDuration','ANSWERED','billableseconds','initVoiceExtensions','initCampaignHopperHistory','initFaxAccounts','exports','bluebird','lodash','moment','../model/telephone','../model/trunk','../model/voiceQueue','../model/template','../model/campaign','../model/zendeskAccount','../model/salesforceAccount','../model/vtigerAccount','../model/dynamics365Account','agents','telephones','voiceQueues','campaigns','templates','outbound','voiceExtensions','channels','timers','zendeskAccounts','salesforceAccounts'];(function(_0x4bb66f,_0x3cd682){var _0xf2772f=function(_0x2e3698){while(--_0x2e3698){_0x4bb66f['push'](_0x4bb66f['shift']());}};_0xf2772f(++_0x3cd682);}(_0x3532,0x1bf));var _0x2353=function(_0x280f92,_0x6fa589){_0x280f92=_0x280f92-0x0;var _0x930db=_0x3532[_0x280f92];return _0x930db;};'use strict';var BPromise=require(_0x2353('0x0'));var util=require('util');var _=require(_0x2353('0x1'));var moment=require(_0x2353('0x2'));var Agent=require('../model/agent');var Telephone=require(_0x2353('0x3'));var Trunk=require(_0x2353('0x4'));var VoiceQueue=require(_0x2353('0x5'));var Trigger=require('../model/trigger');var Template=require(_0x2353('0x6'));var Campaign=require(_0x2353('0x7'));var VoiceExtension=require('../model/voiceExtension');var ZendeskAccount=require(_0x2353('0x8'));var SalesforceAccount=require(_0x2353('0x9'));var FreshdeskAccount=require('../model/freshdeskAccount');var SugarcrmAccount=require('../model/sugarcrmAccount');var ZohoAccount=require('../model/zohoAccount');var DeskAccount=require('../model/deskAccount');var VtigerAccount=require(_0x2353('0xa'));var ServicenowAccount=require('../model/servicenowAccount');var Dynamics365Account=require(_0x2353('0xb'));var FaxAccount=require('../model/faxAccount');var Realtime=function(){this[_0x2353('0xc')]={};this[_0x2353('0xd')]={};this['trunks']={};this[_0x2353('0xe')]={};this['triggers']={};this[_0x2353('0xf')]={};this[_0x2353('0x10')]={};this[_0x2353('0x11')]={'total':0x0,'answered':0x0,'sumHoldTime':0x0,'sumDuration':0x0,'sumBillable':0x0};this[_0x2353('0x12')]={};this[_0x2353('0x13')]={};this['queueChannels']={};this['outboundChannels']={};this[_0x2353('0x14')]={};this[_0x2353('0x15')]={};this[_0x2353('0x16')]={};this[_0x2353('0x17')]={};this[_0x2353('0x18')]={};this[_0x2353('0x19')]={};this[_0x2353('0x1a')]={};this[_0x2353('0x1b')]={};this[_0x2353('0x1c')]={};this['dynamics365Accounts']={};this[_0x2353('0x1d')]={};};function freeIsNotKey(_0x45effe,_0x34a29a,_0x3bfc14){var _0x53be97=_[_0x2353('0x1e')](_0x45effe,function(_0x3bc553,_0x5b0ddc){return _0x3bc553[_0x3bfc14];});for(var _0x25a8f1 in _0x34a29a){if(_0x34a29a[_0x2353('0x1f')](_0x25a8f1)){if(!_0x53be97[_0x25a8f1]){delete _0x34a29a[_0x25a8f1];}}}}function freeIsNotKeySip(_0xf442a,_0x5d3191){var _0x6de7e=_['mapKeys'](_0xf442a,function(_0x347dd5,_0x599233){return util[_0x2353('0x20')]('SIP/%s',_0x347dd5[_0x2353('0x21')]);});for(var _0xd6a410 in _0x5d3191){if(_0x5d3191[_0x2353('0x1f')](_0xd6a410)){if(!_0x6de7e[_0xd6a410]){delete _0x5d3191[_0xd6a410];}}}}function freeIsNotKeyAgent(_0x34ee91,_0x588c4d){var _0x14e3a6=_[_0x2353('0x1e')](_0x34ee91,function(_0x41f4aa,_0x56a1ec){var _0x42d45c=_['isNil'](_0x41f4aa['interface'])?util[_0x2353('0x20')](_0x2353('0x22'),_0x41f4aa[_0x2353('0x21')]):_0x41f4aa[_0x2353('0x23')];return _0x42d45c;});for(var _0x287116 in _0x588c4d){if(_0x588c4d[_0x2353('0x1f')](_0x287116)){if(!_0x14e3a6[_0x287116]){delete _0x588c4d[_0x287116];}}}}function clearVoiceCallReports(_0x11cd73){_0x11cd73[_0x2353('0x24')]=0x0;_0x11cd73[_0x2353('0x25')]=0x0;_0x11cd73[_0x2353('0x26')]=0x0;_0x11cd73['sumDuration']=0x0;_0x11cd73['sumBillable']=0x0;}function clearCampaigns(_0x221211){if(!_[_0x2353('0x27')](_0x221211)){for(var _0x19b239 in _0x221211){if(_0x221211[_0x2353('0x1f')](_0x19b239)){_0x221211[_0x19b239][_0x2353('0x28')]=0x0;_0x221211[_0x19b239][_0x2353('0x29')]=0x0;}}}}function clearVoiceQueues(_0x24784c){if(!_[_0x2353('0x27')](_0x24784c)){for(var _0x5b3f0c in _0x24784c){if(_0x24784c[_0x2353('0x1f')](_0x5b3f0c)){_0x24784c[_0x5b3f0c][_0x2353('0x24')]=0x0;_0x24784c[_0x5b3f0c]['answered']=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x2a')]=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x2b')]=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x26')]=0x0;_0x24784c[_0x5b3f0c]['sumDuration']=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x2c')]=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x2d')]=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x2e')]=0x0;_0x24784c[_0x5b3f0c]['outboundBusyCallsDay']=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x2f')]=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x30')]=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x31')]=0x0;_0x24784c[_0x5b3f0c]['outboundDropCallsDayTimeout']=0x0;_0x24784c[_0x5b3f0c]['outboundDropCallsDayCallersExit']=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x32')]=0x0;_0x24784c[_0x5b3f0c]['outboundOriginateFailureCallsDay']=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x33')]=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x34')]=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x2d')]=0x0;_0x24784c[_0x5b3f0c]['outboundAnswerCallsDay']=0x0;_0x24784c[_0x5b3f0c][_0x2353('0x35')]=!![];}}}}Realtime['prototype'][_0x2353('0x36')]=function(_0x2ec57,_0x53226a){for(var _0x39db51 in _0x53226a){if(_0x2ec57[_0x2353('0x1f')](_0x39db51)){_0x2ec57[_0x39db51]=_0x53226a[_0x39db51];}}};Realtime[_0x2353('0x37')][_0x2353('0x38')]=function(){var _0x109baf=this;return function(_0x43f5fa){if(_0x43f5fa){freeIsNotKeyAgent(_0x43f5fa,_0x109baf[_0x2353('0xc')]);for(var _0x858a00=0x0,_0x307ea5={},_0x2f87af={};_0x858a00<_0x43f5fa[_0x2353('0x39')];_0x858a00+=0x1){_0x307ea5=_0x43f5fa[_0x858a00];var _0x177ac6=_['isNil'](_0x307ea5[_0x2353('0x23')])?util['format'](_0x2353('0x22'),_0x307ea5[_0x2353('0x21')]):_0x307ea5[_0x2353('0x23')];if(_[_0x2353('0x3a')](_0x109baf['agents'][_0x177ac6])){_0x109baf[_0x2353('0xc')][_0x177ac6]=new Agent(_0x307ea5);}else{_0x109baf[_0x2353('0x36')](_0x109baf[_0x2353('0xc')][_0x177ac6],_0x307ea5);}}}return _0x109baf[_0x2353('0xc')];};};Realtime[_0x2353('0x37')][_0x2353('0x3b')]=function(){var _0x4871f0=this;return function(_0x3ef286){if(_0x3ef286){freeIsNotKeySip(_0x3ef286,_0x4871f0[_0x2353('0xd')]);for(var _0x432540=0x0,_0x23d6f7={},_0x1b98ad={};_0x432540<_0x3ef286[_0x2353('0x39')];_0x432540+=0x1){_0x23d6f7=_0x3ef286[_0x432540];if(_[_0x2353('0x3a')](_0x4871f0[_0x2353('0xd')][util['format']('SIP/%s',_0x23d6f7[_0x2353('0x21')])])){_0x4871f0[_0x2353('0xd')][util[_0x2353('0x20')](_0x2353('0x22'),_0x23d6f7[_0x2353('0x21')])]=new Telephone(_0x23d6f7);}else{_0x4871f0[_0x2353('0x36')](_0x4871f0[_0x2353('0xd')][util[_0x2353('0x20')](_0x2353('0x22'),_0x23d6f7[_0x2353('0x21')])],_0x23d6f7);}}}return _0x4871f0[_0x2353('0xd')];};};Realtime[_0x2353('0x37')][_0x2353('0x3c')]=function(){var _0x573825=this;return function(_0x5ea187){if(_0x5ea187){freeIsNotKeySip(_0x5ea187,_0x573825[_0x2353('0x3d')]);for(var _0x1911d6=0x0,_0x3b0e47={},_0x15721b={};_0x1911d6<_0x5ea187['length'];_0x1911d6+=0x1){_0x3b0e47=_0x5ea187[_0x1911d6];if(_[_0x2353('0x3a')](_0x573825['trunks'][util[_0x2353('0x20')]('SIP/%s',_0x3b0e47[_0x2353('0x21')])])){_0x573825['trunks'][util[_0x2353('0x20')](_0x2353('0x22'),_0x3b0e47[_0x2353('0x21')])]=new Trunk(_0x3b0e47);}else{_0x573825[_0x2353('0x36')](_0x573825[_0x2353('0x3d')][util[_0x2353('0x20')](_0x2353('0x22'),_0x3b0e47[_0x2353('0x21')])],_0x3b0e47);}}}return _0x573825[_0x2353('0x3d')];};};Realtime[_0x2353('0x37')]['initVoiceQueues']=function(){var _0x1e57dc=this;return function(_0x455902){if(_0x455902){freeIsNotKey(_0x455902,_0x1e57dc['voiceQueues'],_0x2353('0x21'));for(var _0x527529=0x0,_0x15f248={},_0x1efb93={};_0x527529<_0x455902[_0x2353('0x39')];_0x527529+=0x1){_0x15f248=_0x455902[_0x527529];if(_[_0x2353('0x3a')](_0x1e57dc[_0x2353('0xe')][_0x15f248[_0x2353('0x21')]])){_0x1e57dc['voiceQueues'][_0x15f248['name']]=new VoiceQueue(_0x15f248);}else{_0x1e57dc[_0x2353('0x36')](_0x1e57dc[_0x2353('0xe')][_0x15f248[_0x2353('0x21')]],_0x15f248);}}}return _0x1e57dc[_0x2353('0xe')];};};Realtime[_0x2353('0x37')][_0x2353('0x3e')]=function(){var _0x1580ed=this;return function(_0x10c527){if(_0x10c527){freeIsNotKey(_0x10c527,_0x1580ed['triggers'],'id');for(var _0x9a8dd2=0x0,_0xf083c2={},_0x22d040={};_0x9a8dd2<_0x10c527[_0x2353('0x39')];_0x9a8dd2+=0x1){_0xf083c2=_0x10c527[_0x9a8dd2];if(_[_0x2353('0x3a')](_0x1580ed[_0x2353('0x3f')][_0xf083c2['id']])){_0x1580ed[_0x2353('0x3f')][_0xf083c2['id']]=new Trigger(_0xf083c2);}else{_0x1580ed['mergeFromDatabase'](_0x1580ed['triggers'][_0xf083c2['id']],_0xf083c2);}}}return _0x1580ed['triggers'];};};Realtime[_0x2353('0x37')][_0x2353('0x40')]=function(){var _0x3f535a=this;return function(_0x1c3040){if(_0x1c3040){freeIsNotKey(_0x1c3040,_0x3f535a[_0x2353('0x10')],'id');for(var _0x20e98a=0x0,_0x307744={},_0xed5b59={};_0x20e98a<_0x1c3040[_0x2353('0x39')];_0x20e98a+=0x1){_0x307744=_0x1c3040[_0x20e98a];if(_[_0x2353('0x3a')](_0x3f535a['templates'][_0x307744['id']])){_0x3f535a[_0x2353('0x10')][_0x307744['id']]=new Template(_0x307744);}else{_0x3f535a[_0x2353('0x36')](_0x3f535a[_0x2353('0x10')][_0x307744['id']],_0x307744);}}}return _0x3f535a[_0x2353('0x10')];};};Realtime[_0x2353('0x37')]['initZendeskAccounts']=function(){var _0x2c1bf6=this;return function(_0x5a8a66){if(_0x5a8a66){freeIsNotKey(_0x5a8a66,_0x2c1bf6[_0x2353('0x15')],'id');for(var _0x27a7f3=0x0,_0x47c521={},_0x1aac58={};_0x27a7f3<_0x5a8a66['length'];_0x27a7f3+=0x1){_0x47c521=_0x5a8a66[_0x27a7f3];if(_[_0x2353('0x3a')](_0x2c1bf6[_0x2353('0x15')][_0x47c521['id']])){_0x2c1bf6['zendeskAccounts'][_0x47c521['id']]=new ZendeskAccount(_0x47c521);}else{_0x2c1bf6[_0x2353('0x36')](_0x2c1bf6[_0x2353('0x15')][_0x47c521['id']],_0x47c521);}}}return _0x2c1bf6[_0x2353('0x15')];};};Realtime[_0x2353('0x37')]['initSalesforceAccounts']=function(){var _0x3291be=this;return function(_0xf456b9){if(_0xf456b9){freeIsNotKey(_0xf456b9,_0x3291be[_0x2353('0x16')],'id');for(var _0x4d2038=0x0,_0x2ac6ee={},_0x344d70={};_0x4d2038<_0xf456b9[_0x2353('0x39')];_0x4d2038+=0x1){_0x2ac6ee=_0xf456b9[_0x4d2038];if(_['isUndefined'](_0x3291be[_0x2353('0x16')][_0x2ac6ee['id']])){_0x3291be[_0x2353('0x16')][_0x2ac6ee['id']]=new SalesforceAccount(_0x2ac6ee);}else{_0x3291be[_0x2353('0x36')](_0x3291be[_0x2353('0x16')][_0x2ac6ee['id']],_0x2ac6ee);}}}return _0x3291be['salesforceAccounts'];};};Realtime['prototype'][_0x2353('0x41')]=function(){var _0x294461=this;return function(_0x3ba3b8){if(_0x3ba3b8){freeIsNotKey(_0x3ba3b8,_0x294461['freshdeskAccounts'],'id');for(var _0x3f6be1=0x0,_0x20c24d={},_0x5bf254={};_0x3f6be1<_0x3ba3b8[_0x2353('0x39')];_0x3f6be1+=0x1){_0x20c24d=_0x3ba3b8[_0x3f6be1];if(_[_0x2353('0x3a')](_0x294461[_0x2353('0x18')][_0x20c24d['id']])){_0x294461[_0x2353('0x18')][_0x20c24d['id']]=new FreshdeskAccount(_0x20c24d);}else{_0x294461[_0x2353('0x36')](_0x294461[_0x2353('0x18')][_0x20c24d['id']],_0x20c24d);}}}return _0x294461[_0x2353('0x18')];};};Realtime[_0x2353('0x37')][_0x2353('0x42')]=function(){var _0x394bd0=this;return function(_0x198805){if(_0x198805){freeIsNotKey(_0x198805,_0x394bd0['zohoAccounts'],'id');for(var _0x2f827b=0x0,_0x35d837={},_0xc22584={};_0x2f827b<_0x198805['length'];_0x2f827b+=0x1){_0x35d837=_0x198805[_0x2f827b];if(_[_0x2353('0x3a')](_0x394bd0[_0x2353('0x19')][_0x35d837['id']])){_0x394bd0['zohoAccounts'][_0x35d837['id']]=new ZohoAccount(_0x35d837);}else{_0x394bd0['mergeFromDatabase'](_0x394bd0[_0x2353('0x19')][_0x35d837['id']],_0x35d837);}}}return _0x394bd0[_0x2353('0x19')];};};Realtime[_0x2353('0x37')][_0x2353('0x43')]=function(){var _0x58410e=this;return function(_0x13702d){if(_0x13702d){freeIsNotKey(_0x13702d,_0x58410e[_0x2353('0x1a')],'id');for(var _0x49ec88=0x0,_0x29bab4={},_0x23ebc4={};_0x49ec88<_0x13702d[_0x2353('0x39')];_0x49ec88+=0x1){_0x29bab4=_0x13702d[_0x49ec88];if(_[_0x2353('0x3a')](_0x58410e['deskAccounts'][_0x29bab4['id']])){_0x58410e[_0x2353('0x1a')][_0x29bab4['id']]=new DeskAccount(_0x29bab4);}else{_0x58410e[_0x2353('0x36')](_0x58410e[_0x2353('0x1a')][_0x29bab4['id']],_0x29bab4);}}}return _0x58410e[_0x2353('0x1a')];};};Realtime['prototype'][_0x2353('0x44')]=function(){var _0x11e30c=this;return function(_0x4c61f0){if(_0x4c61f0){freeIsNotKey(_0x4c61f0,_0x11e30c[_0x2353('0x17')],'id');for(var _0x516b5a=0x0,_0xf32606={},_0x367a59={};_0x516b5a<_0x4c61f0[_0x2353('0x39')];_0x516b5a+=0x1){_0xf32606=_0x4c61f0[_0x516b5a];if(_[_0x2353('0x3a')](_0x11e30c[_0x2353('0x17')][_0xf32606['id']])){_0x11e30c['sugarcrmAccounts'][_0xf32606['id']]=new SugarcrmAccount(_0xf32606);}else{_0x11e30c[_0x2353('0x36')](_0x11e30c[_0x2353('0x17')][_0xf32606['id']],_0xf32606);}}}return _0x11e30c['sugarcrmAccounts'];};};Realtime[_0x2353('0x37')][_0x2353('0x45')]=function(){var _0x395f60=this;return function(_0x316003){if(_0x316003){freeIsNotKey(_0x316003,_0x395f60[_0x2353('0x1b')],'id');for(var _0x401cf7=0x0,_0x2f161a={},_0x5aaf7c={};_0x401cf7<_0x316003[_0x2353('0x39')];_0x401cf7+=0x1){_0x2f161a=_0x316003[_0x401cf7];if(_[_0x2353('0x3a')](_0x395f60[_0x2353('0x1b')][_0x2f161a['id']])){_0x395f60[_0x2353('0x1b')][_0x2f161a['id']]=new VtigerAccount(_0x2f161a);}else{_0x395f60['mergeFromDatabase'](_0x395f60['vtigerAccounts'][_0x2f161a['id']],_0x2f161a);}}}return _0x395f60[_0x2353('0x1b')];};};Realtime['prototype'][_0x2353('0x46')]=function(){var _0x3e9b6c=this;return function(_0x3c46ea){if(_0x3c46ea){freeIsNotKey(_0x3c46ea,_0x3e9b6c[_0x2353('0x1c')],'id');for(var _0x2a5b76=0x0,_0x201313={},_0x439f27={};_0x2a5b76<_0x3c46ea['length'];_0x2a5b76+=0x1){_0x201313=_0x3c46ea[_0x2a5b76];if(_[_0x2353('0x3a')](_0x3e9b6c[_0x2353('0x1c')][_0x201313['id']])){_0x3e9b6c[_0x2353('0x1c')][_0x201313['id']]=new ServicenowAccount(_0x201313);}else{_0x3e9b6c['mergeFromDatabase'](_0x3e9b6c[_0x2353('0x1c')][_0x201313['id']],_0x201313);}}}return _0x3e9b6c[_0x2353('0x1c')];};};Realtime[_0x2353('0x37')][_0x2353('0x47')]=function(){var _0x18c916=this;return function(_0x92b683){if(_0x92b683){freeIsNotKey(_0x92b683,_0x18c916[_0x2353('0x48')],'id');for(var _0x5bb73d=0x0,_0x2a619c={},_0x13a43b={};_0x5bb73d<_0x92b683[_0x2353('0x39')];_0x5bb73d+=0x1){_0x2a619c=_0x92b683[_0x5bb73d];if(_[_0x2353('0x3a')](_0x18c916['dynamics365Accounts'][_0x2a619c['id']])){_0x18c916[_0x2353('0x48')][_0x2a619c['id']]=new Dynamics365Account(_0x2a619c);}else{_0x18c916[_0x2353('0x36')](_0x18c916['dynamics365Accounts'][_0x2a619c['id']],_0x2a619c);}}}return _0x18c916['dynamics365Accounts'];};};Realtime[_0x2353('0x37')][_0x2353('0x49')]=function(){var _0x32d6c9=this;return function(_0x234130){for(var _0x1954e5=0x0;_0x1954e5<_0x234130['length'];_0x1954e5+=0x1){_[_0x2353('0x4a')](_0x32d6c9['voiceQueues'][_0x234130[_0x1954e5][_0x2353('0x21')]],_0x234130[_0x1954e5]);}return _0x32d6c9[_0x2353('0xe')];};};Realtime['prototype'][_0x2353('0x4b')]=function(){var _0x532af6=this;return function(_0x5cf29b){clearVoiceQueues(_0x532af6['voiceQueues']);if(_0x5cf29b){_0x5cf29b=_['groupBy'](_0x5cf29b,_0x2353('0x4c'));for(var _0x58ac74 in _0x5cf29b){if(_0x5cf29b[_0x2353('0x1f')](_0x58ac74)){var _0x5ec098={};for(var _0x3661cd=0x0;_0x3661cd<_0x5cf29b[_0x58ac74][_0x2353('0x39')];_0x3661cd+=0x1){var _0xb562f2=_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x4d')];if(_0x532af6[_0x2353('0xe')][_0xb562f2]){if(_0x5cf29b[_0x58ac74][_0x3661cd]['queuecallerexit']){_0x532af6[_0x2353('0xe')][_0xb562f2][_0x2353('0x2a')]+=0x1;}if(_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x4e')]){_0x532af6[_0x2353('0xe')][_0xb562f2][_0x2353('0x2b')]+=0x1;}_0x532af6[_0x2353('0xe')][_0xb562f2]['sumHoldTime']+=moment(_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x4f')])[_0x2353('0x50')](moment(_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x51')]),_0x2353('0x52'))||0x0;if(_0x3661cd===_0x5cf29b[_0x58ac74][_0x2353('0x39')]-0x1){_0x532af6[_0x2353('0xe')][_0xb562f2]['sumDuration']+=moment(_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x53')]||_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x54')]||_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x55')])[_0x2353('0x50')](moment(_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x51')]),_0x2353('0x52'))||0x0;_0x532af6[_0x2353('0xe')][_0xb562f2][_0x2353('0x24')]+=0x1;if(_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x56')]){_0x532af6[_0x2353('0xe')][_0xb562f2][_0x2353('0x25')]+=0x1;_0x532af6[_0x2353('0xe')][_0xb562f2][_0x2353('0x2c')]+=moment(_0x5cf29b[_0x58ac74][_0x3661cd][_0x2353('0x53')])['diff'](moment(_0x5cf29b[_0x58ac74][_0x3661cd]['queuecallerleaveAt']),_0x2353('0x52'))||0x0;}}else{_0x532af6[_0x2353('0xe')][_0xb562f2][_0x2353('0x57')]+=_0x532af6[_0x2353('0xe')][_0xb562f2]['sumHoldTime']||0x0;}}}}}}return _0x532af6['voiceQueues'];};};Realtime['prototype']['initVoiceCallReports']=function(){var _0x57bf11=this;return function(_0x316a4e){clearVoiceCallReports(_0x57bf11[_0x2353('0x11')]);if(_0x316a4e){for(var _0x4b0640=0x0;_0x4b0640<_0x316a4e[_0x2353('0x39')];_0x4b0640+=0x1){_0x57bf11[_0x2353('0x11')][_0x2353('0x24')]+=0x1;_0x57bf11[_0x2353('0x11')][_0x2353('0x57')]+=_0x316a4e[_0x4b0640]['duration'];if(_0x316a4e[_0x4b0640]['disposition']===_0x2353('0x58')){_0x57bf11[_0x2353('0x11')]['answered']+=0x1;_0x57bf11['outbound'][_0x2353('0x26')]+=_0x316a4e[_0x4b0640]['duration']-_0x316a4e[_0x4b0640][_0x2353('0x59')]||0x0;_0x57bf11[_0x2353('0x11')][_0x2353('0x2c')]+=_0x316a4e[_0x4b0640][_0x2353('0x59')];}}}return _0x57bf11[_0x2353('0x11')];};};Realtime[_0x2353('0x37')]['initCampaigns']=function(){var _0xcf34a2=this;return function(_0x3a2d81){if(_0x3a2d81){freeIsNotKey(_0x3a2d81,_0xcf34a2[_0x2353('0xf')],_0x2353('0x21'));for(var _0x478f70=0x0,_0x2148dc={};_0x478f70<_0x3a2d81[_0x2353('0x39')];_0x478f70+=0x1){_0x2148dc=_0x3a2d81[_0x478f70];if(_[_0x2353('0x3a')](_0xcf34a2['campaigns'][_0x2148dc[_0x2353('0x21')]])){_0xcf34a2[_0x2353('0xf')][_0x2148dc[_0x2353('0x21')]]=new Campaign(_0x2148dc);}else{_0xcf34a2[_0x2353('0x36')](_0xcf34a2[_0x2353('0xf')][_0x2148dc[_0x2353('0x21')]],_0x2148dc);}}}return _0xcf34a2['campaigns'];};};Realtime[_0x2353('0x37')][_0x2353('0x5a')]=function(){var _0x176db1=this;return function(_0xef4218){if(_0xef4218){freeIsNotKey(_0xef4218,_0x176db1['voiceExtensions'],'id');for(var _0x4e0914=0x0,_0x13ef6a={};_0x4e0914<_0xef4218['length'];_0x4e0914+=0x1){_0x13ef6a=_0xef4218[_0x4e0914];if(_[_0x2353('0x3a')](_0x176db1[_0x2353('0x12')][_0x13ef6a['id']])){_0x176db1['voiceExtensions'][_0x13ef6a['id']]=new VoiceExtension(_0x13ef6a);}else{_0x176db1[_0x2353('0x36')](_0x176db1['voiceExtensions'][_0x13ef6a['id']],_0x13ef6a);}}}return _0x176db1[_0x2353('0x12')];};};Realtime[_0x2353('0x37')][_0x2353('0x5b')]=function(){var _0x5a5800=this;return function(_0x346aa7){clearCampaigns(_0x5a5800['campaigns']);for(var _0x98250f=0x0;_0x98250f<_0x346aa7[_0x2353('0x39')];_0x98250f+=0x1){_['merge'](_0x5a5800[_0x2353('0xf')][_0x346aa7[_0x98250f][_0x2353('0x21')]],_0x346aa7[_0x98250f]);}return _0x5a5800[_0x2353('0xf')];};};Realtime[_0x2353('0x37')][_0x2353('0x5c')]=function(){var _0x177aa4=this;return function(_0x257f82){if(_0x257f82){freeIsNotKey(_0x257f82,_0x177aa4[_0x2353('0x1d')],'id');for(var _0x5458b6=0x0,_0x218476={},_0x258c2b={};_0x5458b6<_0x257f82['length'];_0x5458b6+=0x1){_0x218476=_0x257f82[_0x5458b6];if(_[_0x2353('0x3a')](_0x177aa4[_0x2353('0x1d')][_0x218476['id']])){_0x177aa4[_0x2353('0x1d')][_0x218476['id']]=new FaxAccount(_0x218476);}else{_0x177aa4['mergeFromDatabase'](_0x177aa4[_0x2353('0x1d')][_0x218476['id']],_0x218476);}}}return _0x177aa4[_0x2353('0x1d')];};};module[_0x2353('0x5d')]=Realtime;
\ No newline at end of file
+var _0xda7f=['moment','../model/agent','../model/telephone','../model/trunk','../model/voiceQueue','../model/trigger','../model/template','../model/voiceExtension','../model/freshdeskAccount','../model/sugarcrmAccount','../model/zohoAccount','../model/deskAccount','../model/vtigerAccount','../model/servicenowAccount','../model/dynamics365Account','../model/faxAccount','agents','telephones','trunks','voiceQueues','triggers','outbound','voiceExtensions','channels','outboundChannels','timers','zendeskAccounts','sugarcrmAccounts','freshdeskAccounts','zohoAccounts','deskAccounts','vtigerAccounts','dynamics365Accounts','faxAccounts','mapKeys','hasOwnProperty','SIP/%s','name','isNil','interface','format','answered','sumHoldTime','sumDuration','sumBillable','isEmpty','ivrAnswerCallsDay','total','abandoned','outboundBusyCallsDay','outboundCongestionCallsDay','outboundUnknownCallsDay','outboundDropCallsDayTimeout','outboundDropCallsDayCallersExit','outboundBlacklistCallsDay','outboundRejectCallsDay','outboundReCallsDay','outboundAnswerCallsDay','queueStatusComplete','prototype','mergeFromDatabase','initAgents','length','isUndefined','initTelephones','initTrunks','initVoiceQueues','initTriggers','initTemplates','templates','salesforceAccounts','initZohoAccounts','initDeskAccounts','initSugarcrmAccounts','initVtigerAccounts','initServicenowAccounts','servicenowAccounts','initVoiceQueueHopperHistory','queue','queuecallerexit','unmanaged','queuecallerabandon','queuecallerjoinAt','seconds','queuecallercompleteAt','diff','queuecallerleaveAt','duration','disposition','ANSWERED','billableseconds','initCampaigns','campaigns','initVoiceExtensions','initCampaignHopperHistory','merge','initFaxAccounts','exports','bluebird','lodash'];(function(_0x476392,_0x43d678){var _0x25d9f4=function(_0x4a0426){while(--_0x4a0426){_0x476392['push'](_0x476392['shift']());}};_0x25d9f4(++_0x43d678);}(_0xda7f,0xc6));var _0xfda7=function(_0x40cb1c,_0x94410d){_0x40cb1c=_0x40cb1c-0x0;var _0x1b9dde=_0xda7f[_0x40cb1c];return _0x1b9dde;};'use strict';var BPromise=require(_0xfda7('0x0'));var util=require('util');var _=require(_0xfda7('0x1'));var moment=require(_0xfda7('0x2'));var Agent=require(_0xfda7('0x3'));var Telephone=require(_0xfda7('0x4'));var Trunk=require(_0xfda7('0x5'));var VoiceQueue=require(_0xfda7('0x6'));var Trigger=require(_0xfda7('0x7'));var Template=require(_0xfda7('0x8'));var Campaign=require('../model/campaign');var VoiceExtension=require(_0xfda7('0x9'));var ZendeskAccount=require('../model/zendeskAccount');var SalesforceAccount=require('../model/salesforceAccount');var FreshdeskAccount=require(_0xfda7('0xa'));var SugarcrmAccount=require(_0xfda7('0xb'));var ZohoAccount=require(_0xfda7('0xc'));var DeskAccount=require(_0xfda7('0xd'));var VtigerAccount=require(_0xfda7('0xe'));var ServicenowAccount=require(_0xfda7('0xf'));var Dynamics365Account=require(_0xfda7('0x10'));var FaxAccount=require(_0xfda7('0x11'));var Realtime=function(){this[_0xfda7('0x12')]={};this[_0xfda7('0x13')]={};this[_0xfda7('0x14')]={};this[_0xfda7('0x15')]={};this[_0xfda7('0x16')]={};this['campaigns']={};this['templates']={};this[_0xfda7('0x17')]={'total':0x0,'answered':0x0,'sumHoldTime':0x0,'sumDuration':0x0,'sumBillable':0x0};this[_0xfda7('0x18')]={};this[_0xfda7('0x19')]={};this['queueChannels']={};this[_0xfda7('0x1a')]={};this[_0xfda7('0x1b')]={};this[_0xfda7('0x1c')]={};this['salesforceAccounts']={};this[_0xfda7('0x1d')]={};this[_0xfda7('0x1e')]={};this[_0xfda7('0x1f')]={};this[_0xfda7('0x20')]={};this[_0xfda7('0x21')]={};this['servicenowAccounts']={};this[_0xfda7('0x22')]={};this[_0xfda7('0x23')]={};};function freeIsNotKey(_0x33d57e,_0x1967d2,_0x2b38eb){var _0x4088bc=_[_0xfda7('0x24')](_0x33d57e,function(_0x43646f,_0x4b728d){return _0x43646f[_0x2b38eb];});for(var _0x487c76 in _0x1967d2){if(_0x1967d2[_0xfda7('0x25')](_0x487c76)){if(!_0x4088bc[_0x487c76]){delete _0x1967d2[_0x487c76];}}}}function freeIsNotKeySip(_0x28a691,_0x178c89){var _0x343e24=_[_0xfda7('0x24')](_0x28a691,function(_0x337cd0,_0x22e1ec){return util['format'](_0xfda7('0x26'),_0x337cd0[_0xfda7('0x27')]);});for(var _0x5b924a in _0x178c89){if(_0x178c89[_0xfda7('0x25')](_0x5b924a)){if(!_0x343e24[_0x5b924a]){delete _0x178c89[_0x5b924a];}}}}function freeIsNotKeyAgent(_0x574e21,_0x588425){var _0x519873=_[_0xfda7('0x24')](_0x574e21,function(_0x225d3b,_0x3d70fb){var _0x2f2ece=_[_0xfda7('0x28')](_0x225d3b[_0xfda7('0x29')])?util[_0xfda7('0x2a')](_0xfda7('0x26'),_0x225d3b[_0xfda7('0x27')]):_0x225d3b[_0xfda7('0x29')];return _0x2f2ece;});for(var _0x2ac9df in _0x588425){if(_0x588425[_0xfda7('0x25')](_0x2ac9df)){if(!_0x519873[_0x2ac9df]){delete _0x588425[_0x2ac9df];}}}}function clearVoiceCallReports(_0x311809){_0x311809['total']=0x0;_0x311809[_0xfda7('0x2b')]=0x0;_0x311809[_0xfda7('0x2c')]=0x0;_0x311809[_0xfda7('0x2d')]=0x0;_0x311809[_0xfda7('0x2e')]=0x0;}function clearCampaigns(_0x496e5f){if(!_[_0xfda7('0x2f')](_0x496e5f)){for(var _0x3934c5 in _0x496e5f){if(_0x496e5f[_0xfda7('0x25')](_0x3934c5)){_0x496e5f[_0x3934c5]['ivrTotalCallsDays']=0x0;_0x496e5f[_0x3934c5][_0xfda7('0x30')]=0x0;}}}}function clearVoiceQueues(_0x6e9ea9){if(!_['isEmpty'](_0x6e9ea9)){for(var _0x2bc1ef in _0x6e9ea9){if(_0x6e9ea9[_0xfda7('0x25')](_0x2bc1ef)){_0x6e9ea9[_0x2bc1ef][_0xfda7('0x31')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x2b')]=0x0;_0x6e9ea9[_0x2bc1ef]['unmanaged']=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x32')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x2c')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x2d')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x2e')]=0x0;_0x6e9ea9[_0x2bc1ef]['outboundAnswerAgiCallsDay']=0x0;_0x6e9ea9[_0x2bc1ef]['outboundNoAnswerCallsDay']=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x33')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x34')]=0x0;_0x6e9ea9[_0x2bc1ef]['outboundNoSuchCallsDay']=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x35')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x36')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x37')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x38')]=0x0;_0x6e9ea9[_0x2bc1ef]['outboundOriginateFailureCallsDay']=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x39')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x3a')]=0x0;_0x6e9ea9[_0x2bc1ef]['outboundAnswerAgiCallsDay']=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x3b')]=0x0;_0x6e9ea9[_0x2bc1ef][_0xfda7('0x3c')]=!![];}}}}Realtime[_0xfda7('0x3d')][_0xfda7('0x3e')]=function(_0xa6eff5,_0x523fc5){for(var _0x327067 in _0x523fc5){if(_0xa6eff5[_0xfda7('0x25')](_0x327067)){_0xa6eff5[_0x327067]=_0x523fc5[_0x327067];}}};Realtime[_0xfda7('0x3d')][_0xfda7('0x3f')]=function(){var _0x10b263=this;return function(_0x56ef08){if(_0x56ef08){freeIsNotKeyAgent(_0x56ef08,_0x10b263[_0xfda7('0x12')]);for(var _0x156156=0x0,_0x5dbf80={},_0x38ded6={};_0x156156<_0x56ef08[_0xfda7('0x40')];_0x156156+=0x1){_0x5dbf80=_0x56ef08[_0x156156];var _0x22b9ca=_['isNil'](_0x5dbf80[_0xfda7('0x29')])?util[_0xfda7('0x2a')](_0xfda7('0x26'),_0x5dbf80['name']):_0x5dbf80[_0xfda7('0x29')];if(_[_0xfda7('0x41')](_0x10b263[_0xfda7('0x12')][_0x22b9ca])){_0x10b263[_0xfda7('0x12')][_0x22b9ca]=new Agent(_0x5dbf80);}else{_0x10b263[_0xfda7('0x3e')](_0x10b263[_0xfda7('0x12')][_0x22b9ca],_0x5dbf80);}}}return _0x10b263['agents'];};};Realtime['prototype'][_0xfda7('0x42')]=function(){var _0x3476fb=this;return function(_0x150b1c){if(_0x150b1c){freeIsNotKeySip(_0x150b1c,_0x3476fb[_0xfda7('0x13')]);for(var _0x3052e7=0x0,_0x117691={},_0x133419={};_0x3052e7<_0x150b1c[_0xfda7('0x40')];_0x3052e7+=0x1){_0x117691=_0x150b1c[_0x3052e7];if(_[_0xfda7('0x41')](_0x3476fb[_0xfda7('0x13')][util[_0xfda7('0x2a')](_0xfda7('0x26'),_0x117691['name'])])){_0x3476fb['telephones'][util[_0xfda7('0x2a')](_0xfda7('0x26'),_0x117691['name'])]=new Telephone(_0x117691);}else{_0x3476fb[_0xfda7('0x3e')](_0x3476fb[_0xfda7('0x13')][util[_0xfda7('0x2a')](_0xfda7('0x26'),_0x117691[_0xfda7('0x27')])],_0x117691);}}}return _0x3476fb[_0xfda7('0x13')];};};Realtime['prototype'][_0xfda7('0x43')]=function(){var _0x2dbcbc=this;return function(_0xba78bc){if(_0xba78bc){freeIsNotKeySip(_0xba78bc,_0x2dbcbc[_0xfda7('0x14')]);for(var _0x31365f=0x0,_0x2b4902={},_0x243ff8={};_0x31365f<_0xba78bc['length'];_0x31365f+=0x1){_0x2b4902=_0xba78bc[_0x31365f];if(_[_0xfda7('0x41')](_0x2dbcbc[_0xfda7('0x14')][util[_0xfda7('0x2a')](_0xfda7('0x26'),_0x2b4902[_0xfda7('0x27')])])){_0x2dbcbc[_0xfda7('0x14')][util[_0xfda7('0x2a')](_0xfda7('0x26'),_0x2b4902['name'])]=new Trunk(_0x2b4902);}else{_0x2dbcbc[_0xfda7('0x3e')](_0x2dbcbc[_0xfda7('0x14')][util[_0xfda7('0x2a')](_0xfda7('0x26'),_0x2b4902[_0xfda7('0x27')])],_0x2b4902);}}}return _0x2dbcbc['trunks'];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x44')]=function(){var _0x551f63=this;return function(_0x2359b7){if(_0x2359b7){freeIsNotKey(_0x2359b7,_0x551f63['voiceQueues'],'name');for(var _0x2c4ec8=0x0,_0x28d1fe={},_0x22ceac={};_0x2c4ec8<_0x2359b7[_0xfda7('0x40')];_0x2c4ec8+=0x1){_0x28d1fe=_0x2359b7[_0x2c4ec8];if(_['isUndefined'](_0x551f63[_0xfda7('0x15')][_0x28d1fe[_0xfda7('0x27')]])){_0x551f63[_0xfda7('0x15')][_0x28d1fe[_0xfda7('0x27')]]=new VoiceQueue(_0x28d1fe);}else{_0x551f63[_0xfda7('0x3e')](_0x551f63[_0xfda7('0x15')][_0x28d1fe['name']],_0x28d1fe);}}}return _0x551f63[_0xfda7('0x15')];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x45')]=function(){var _0x5f9976=this;return function(_0x36a57c){if(_0x36a57c){freeIsNotKey(_0x36a57c,_0x5f9976[_0xfda7('0x16')],'id');for(var _0x4c3cc6=0x0,_0x3c23dd={},_0x41331d={};_0x4c3cc6<_0x36a57c[_0xfda7('0x40')];_0x4c3cc6+=0x1){_0x3c23dd=_0x36a57c[_0x4c3cc6];if(_[_0xfda7('0x41')](_0x5f9976['triggers'][_0x3c23dd['id']])){_0x5f9976['triggers'][_0x3c23dd['id']]=new Trigger(_0x3c23dd);}else{_0x5f9976[_0xfda7('0x3e')](_0x5f9976[_0xfda7('0x16')][_0x3c23dd['id']],_0x3c23dd);}}}return _0x5f9976['triggers'];};};Realtime['prototype'][_0xfda7('0x46')]=function(){var _0x41ccad=this;return function(_0x3ddb19){if(_0x3ddb19){freeIsNotKey(_0x3ddb19,_0x41ccad[_0xfda7('0x47')],'id');for(var _0x53ffc2=0x0,_0x2e724d={},_0x588db7={};_0x53ffc2<_0x3ddb19[_0xfda7('0x40')];_0x53ffc2+=0x1){_0x2e724d=_0x3ddb19[_0x53ffc2];if(_[_0xfda7('0x41')](_0x41ccad[_0xfda7('0x47')][_0x2e724d['id']])){_0x41ccad['templates'][_0x2e724d['id']]=new Template(_0x2e724d);}else{_0x41ccad[_0xfda7('0x3e')](_0x41ccad[_0xfda7('0x47')][_0x2e724d['id']],_0x2e724d);}}}return _0x41ccad[_0xfda7('0x47')];};};Realtime[_0xfda7('0x3d')]['initZendeskAccounts']=function(){var _0x1067f7=this;return function(_0x479a14){if(_0x479a14){freeIsNotKey(_0x479a14,_0x1067f7[_0xfda7('0x1c')],'id');for(var _0x21b365=0x0,_0x15f4a4={},_0x11a2dd={};_0x21b365<_0x479a14[_0xfda7('0x40')];_0x21b365+=0x1){_0x15f4a4=_0x479a14[_0x21b365];if(_[_0xfda7('0x41')](_0x1067f7[_0xfda7('0x1c')][_0x15f4a4['id']])){_0x1067f7['zendeskAccounts'][_0x15f4a4['id']]=new ZendeskAccount(_0x15f4a4);}else{_0x1067f7[_0xfda7('0x3e')](_0x1067f7[_0xfda7('0x1c')][_0x15f4a4['id']],_0x15f4a4);}}}return _0x1067f7[_0xfda7('0x1c')];};};Realtime[_0xfda7('0x3d')]['initSalesforceAccounts']=function(){var _0x2e1ffc=this;return function(_0x14a35b){if(_0x14a35b){freeIsNotKey(_0x14a35b,_0x2e1ffc['salesforceAccounts'],'id');for(var _0x18a64f=0x0,_0x353a94={},_0x25c3d6={};_0x18a64f<_0x14a35b[_0xfda7('0x40')];_0x18a64f+=0x1){_0x353a94=_0x14a35b[_0x18a64f];if(_[_0xfda7('0x41')](_0x2e1ffc[_0xfda7('0x48')][_0x353a94['id']])){_0x2e1ffc[_0xfda7('0x48')][_0x353a94['id']]=new SalesforceAccount(_0x353a94);}else{_0x2e1ffc['mergeFromDatabase'](_0x2e1ffc['salesforceAccounts'][_0x353a94['id']],_0x353a94);}}}return _0x2e1ffc[_0xfda7('0x48')];};};Realtime['prototype']['initFreshdeskAccounts']=function(){var _0xeb1725=this;return function(_0x105148){if(_0x105148){freeIsNotKey(_0x105148,_0xeb1725[_0xfda7('0x1e')],'id');for(var _0x177c4f=0x0,_0x2906f3={},_0x575d3e={};_0x177c4f<_0x105148[_0xfda7('0x40')];_0x177c4f+=0x1){_0x2906f3=_0x105148[_0x177c4f];if(_[_0xfda7('0x41')](_0xeb1725[_0xfda7('0x1e')][_0x2906f3['id']])){_0xeb1725['freshdeskAccounts'][_0x2906f3['id']]=new FreshdeskAccount(_0x2906f3);}else{_0xeb1725[_0xfda7('0x3e')](_0xeb1725[_0xfda7('0x1e')][_0x2906f3['id']],_0x2906f3);}}}return _0xeb1725['freshdeskAccounts'];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x49')]=function(){var _0x4d99d9=this;return function(_0x49dfa5){if(_0x49dfa5){freeIsNotKey(_0x49dfa5,_0x4d99d9[_0xfda7('0x1f')],'id');for(var _0x1e4bab=0x0,_0x481b3e={},_0x208479={};_0x1e4bab<_0x49dfa5['length'];_0x1e4bab+=0x1){_0x481b3e=_0x49dfa5[_0x1e4bab];if(_[_0xfda7('0x41')](_0x4d99d9[_0xfda7('0x1f')][_0x481b3e['id']])){_0x4d99d9[_0xfda7('0x1f')][_0x481b3e['id']]=new ZohoAccount(_0x481b3e);}else{_0x4d99d9[_0xfda7('0x3e')](_0x4d99d9[_0xfda7('0x1f')][_0x481b3e['id']],_0x481b3e);}}}return _0x4d99d9[_0xfda7('0x1f')];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x4a')]=function(){var _0x457c03=this;return function(_0x336d96){if(_0x336d96){freeIsNotKey(_0x336d96,_0x457c03[_0xfda7('0x20')],'id');for(var _0x3dcf7c=0x0,_0x458d79={},_0x192208={};_0x3dcf7c<_0x336d96['length'];_0x3dcf7c+=0x1){_0x458d79=_0x336d96[_0x3dcf7c];if(_[_0xfda7('0x41')](_0x457c03[_0xfda7('0x20')][_0x458d79['id']])){_0x457c03[_0xfda7('0x20')][_0x458d79['id']]=new DeskAccount(_0x458d79);}else{_0x457c03['mergeFromDatabase'](_0x457c03[_0xfda7('0x20')][_0x458d79['id']],_0x458d79);}}}return _0x457c03[_0xfda7('0x20')];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x4b')]=function(){var _0x4d6d74=this;return function(_0x1b5989){if(_0x1b5989){freeIsNotKey(_0x1b5989,_0x4d6d74[_0xfda7('0x1d')],'id');for(var _0x4a5f6b=0x0,_0x5e9462={},_0x9af4f6={};_0x4a5f6b<_0x1b5989[_0xfda7('0x40')];_0x4a5f6b+=0x1){_0x5e9462=_0x1b5989[_0x4a5f6b];if(_[_0xfda7('0x41')](_0x4d6d74['sugarcrmAccounts'][_0x5e9462['id']])){_0x4d6d74[_0xfda7('0x1d')][_0x5e9462['id']]=new SugarcrmAccount(_0x5e9462);}else{_0x4d6d74[_0xfda7('0x3e')](_0x4d6d74[_0xfda7('0x1d')][_0x5e9462['id']],_0x5e9462);}}}return _0x4d6d74[_0xfda7('0x1d')];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x4c')]=function(){var _0x2bce7c=this;return function(_0x5e033e){if(_0x5e033e){freeIsNotKey(_0x5e033e,_0x2bce7c['vtigerAccounts'],'id');for(var _0x53b81a=0x0,_0x17d2df={},_0x1b795b={};_0x53b81a<_0x5e033e['length'];_0x53b81a+=0x1){_0x17d2df=_0x5e033e[_0x53b81a];if(_[_0xfda7('0x41')](_0x2bce7c['vtigerAccounts'][_0x17d2df['id']])){_0x2bce7c['vtigerAccounts'][_0x17d2df['id']]=new VtigerAccount(_0x17d2df);}else{_0x2bce7c['mergeFromDatabase'](_0x2bce7c[_0xfda7('0x21')][_0x17d2df['id']],_0x17d2df);}}}return _0x2bce7c[_0xfda7('0x21')];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x4d')]=function(){var _0x48490f=this;return function(_0x42d372){if(_0x42d372){freeIsNotKey(_0x42d372,_0x48490f[_0xfda7('0x4e')],'id');for(var _0xbc6bb7=0x0,_0x4c318b={},_0x22049a={};_0xbc6bb7<_0x42d372[_0xfda7('0x40')];_0xbc6bb7+=0x1){_0x4c318b=_0x42d372[_0xbc6bb7];if(_[_0xfda7('0x41')](_0x48490f[_0xfda7('0x4e')][_0x4c318b['id']])){_0x48490f['servicenowAccounts'][_0x4c318b['id']]=new ServicenowAccount(_0x4c318b);}else{_0x48490f[_0xfda7('0x3e')](_0x48490f['servicenowAccounts'][_0x4c318b['id']],_0x4c318b);}}}return _0x48490f[_0xfda7('0x4e')];};};Realtime[_0xfda7('0x3d')]['initDynamics365Accounts']=function(){var _0x40fd0a=this;return function(_0x3d6530){if(_0x3d6530){freeIsNotKey(_0x3d6530,_0x40fd0a[_0xfda7('0x22')],'id');for(var _0x379c5e=0x0,_0x220174={},_0x2c9f6b={};_0x379c5e<_0x3d6530[_0xfda7('0x40')];_0x379c5e+=0x1){_0x220174=_0x3d6530[_0x379c5e];if(_[_0xfda7('0x41')](_0x40fd0a[_0xfda7('0x22')][_0x220174['id']])){_0x40fd0a[_0xfda7('0x22')][_0x220174['id']]=new Dynamics365Account(_0x220174);}else{_0x40fd0a[_0xfda7('0x3e')](_0x40fd0a[_0xfda7('0x22')][_0x220174['id']],_0x220174);}}}return _0x40fd0a['dynamics365Accounts'];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x4f')]=function(){var _0x304b8f=this;return function(_0x53a88a){for(var _0x534f41=0x0;_0x534f41<_0x53a88a[_0xfda7('0x40')];_0x534f41+=0x1){_['merge'](_0x304b8f['voiceQueues'][_0x53a88a[_0x534f41]['name']],_0x53a88a[_0x534f41]);}return _0x304b8f['voiceQueues'];};};Realtime[_0xfda7('0x3d')]['initVoiceQueueReports']=function(){var _0x3b8e1a=this;return function(_0x4933f6){clearVoiceQueues(_0x3b8e1a['voiceQueues']);if(_0x4933f6){_0x4933f6=_['groupBy'](_0x4933f6,'uniqueid');for(var _0x4dbb39 in _0x4933f6){if(_0x4933f6['hasOwnProperty'](_0x4dbb39)){var _0x1c7686={};for(var _0xb8cbfb=0x0;_0xb8cbfb<_0x4933f6[_0x4dbb39]['length'];_0xb8cbfb+=0x1){var _0x3e8001=_0x4933f6[_0x4dbb39][_0xb8cbfb][_0xfda7('0x50')];if(_0x3b8e1a[_0xfda7('0x15')][_0x3e8001]){if(_0x4933f6[_0x4dbb39][_0xb8cbfb][_0xfda7('0x51')]){_0x3b8e1a[_0xfda7('0x15')][_0x3e8001][_0xfda7('0x52')]+=0x1;}if(_0x4933f6[_0x4dbb39][_0xb8cbfb][_0xfda7('0x53')]){_0x3b8e1a[_0xfda7('0x15')][_0x3e8001][_0xfda7('0x32')]+=0x1;}_0x3b8e1a[_0xfda7('0x15')][_0x3e8001][_0xfda7('0x2c')]+=moment(_0x4933f6[_0x4dbb39][_0xb8cbfb]['queuecallerleaveAt'])['diff'](moment(_0x4933f6[_0x4dbb39][_0xb8cbfb][_0xfda7('0x54')]),_0xfda7('0x55'))||0x0;if(_0xb8cbfb===_0x4933f6[_0x4dbb39]['length']-0x1){_0x3b8e1a[_0xfda7('0x15')][_0x3e8001][_0xfda7('0x2d')]+=moment(_0x4933f6[_0x4dbb39][_0xb8cbfb][_0xfda7('0x56')]||_0x4933f6[_0x4dbb39][_0xb8cbfb]['queuecallerabandonAt']||_0x4933f6[_0x4dbb39][_0xb8cbfb]['queuecallerexitAt'])[_0xfda7('0x57')](moment(_0x4933f6[_0x4dbb39][_0xb8cbfb][_0xfda7('0x54')]),'seconds')||0x0;_0x3b8e1a['voiceQueues'][_0x3e8001][_0xfda7('0x31')]+=0x1;if(_0x4933f6[_0x4dbb39][_0xb8cbfb]['queuecallercomplete']){_0x3b8e1a[_0xfda7('0x15')][_0x3e8001]['answered']+=0x1;_0x3b8e1a[_0xfda7('0x15')][_0x3e8001][_0xfda7('0x2e')]+=moment(_0x4933f6[_0x4dbb39][_0xb8cbfb]['queuecallercompleteAt'])[_0xfda7('0x57')](moment(_0x4933f6[_0x4dbb39][_0xb8cbfb][_0xfda7('0x58')]),_0xfda7('0x55'))||0x0;}}else{_0x3b8e1a[_0xfda7('0x15')][_0x3e8001][_0xfda7('0x2d')]+=_0x3b8e1a[_0xfda7('0x15')][_0x3e8001][_0xfda7('0x2c')]||0x0;}}}}}}return _0x3b8e1a['voiceQueues'];};};Realtime[_0xfda7('0x3d')]['initVoiceCallReports']=function(){var _0x4e02e3=this;return function(_0x1a2bc1){clearVoiceCallReports(_0x4e02e3['outbound']);if(_0x1a2bc1){for(var _0x260a8e=0x0;_0x260a8e<_0x1a2bc1[_0xfda7('0x40')];_0x260a8e+=0x1){_0x4e02e3[_0xfda7('0x17')][_0xfda7('0x31')]+=0x1;_0x4e02e3[_0xfda7('0x17')][_0xfda7('0x2d')]+=_0x1a2bc1[_0x260a8e][_0xfda7('0x59')];if(_0x1a2bc1[_0x260a8e][_0xfda7('0x5a')]===_0xfda7('0x5b')){_0x4e02e3[_0xfda7('0x17')]['answered']+=0x1;_0x4e02e3[_0xfda7('0x17')][_0xfda7('0x2c')]+=_0x1a2bc1[_0x260a8e]['duration']-_0x1a2bc1[_0x260a8e][_0xfda7('0x5c')]||0x0;_0x4e02e3['outbound']['sumBillable']+=_0x1a2bc1[_0x260a8e][_0xfda7('0x5c')];}}}return _0x4e02e3[_0xfda7('0x17')];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x5d')]=function(){var _0x848623=this;return function(_0x3d1edb){if(_0x3d1edb){freeIsNotKey(_0x3d1edb,_0x848623[_0xfda7('0x5e')],_0xfda7('0x27'));for(var _0x13cf14=0x0,_0x3d0e3b={};_0x13cf14<_0x3d1edb[_0xfda7('0x40')];_0x13cf14+=0x1){_0x3d0e3b=_0x3d1edb[_0x13cf14];if(_[_0xfda7('0x41')](_0x848623['campaigns'][_0x3d0e3b[_0xfda7('0x27')]])){_0x848623[_0xfda7('0x5e')][_0x3d0e3b[_0xfda7('0x27')]]=new Campaign(_0x3d0e3b);}else{_0x848623['mergeFromDatabase'](_0x848623[_0xfda7('0x5e')][_0x3d0e3b[_0xfda7('0x27')]],_0x3d0e3b);}}}return _0x848623[_0xfda7('0x5e')];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x5f')]=function(){var _0x40dc2d=this;return function(_0x267dc9){if(_0x267dc9){freeIsNotKey(_0x267dc9,_0x40dc2d['voiceExtensions'],'id');for(var _0x28bd90=0x0,_0x55d1f1={};_0x28bd90<_0x267dc9[_0xfda7('0x40')];_0x28bd90+=0x1){_0x55d1f1=_0x267dc9[_0x28bd90];if(_[_0xfda7('0x41')](_0x40dc2d[_0xfda7('0x18')][_0x55d1f1['id']])){_0x40dc2d[_0xfda7('0x18')][_0x55d1f1['id']]=new VoiceExtension(_0x55d1f1);}else{_0x40dc2d['mergeFromDatabase'](_0x40dc2d[_0xfda7('0x18')][_0x55d1f1['id']],_0x55d1f1);}}}return _0x40dc2d[_0xfda7('0x18')];};};Realtime[_0xfda7('0x3d')][_0xfda7('0x60')]=function(){var _0x54a6e8=this;return function(_0x5364bf){clearCampaigns(_0x54a6e8[_0xfda7('0x5e')]);for(var _0x17cbc9=0x0;_0x17cbc9<_0x5364bf[_0xfda7('0x40')];_0x17cbc9+=0x1){_[_0xfda7('0x61')](_0x54a6e8[_0xfda7('0x5e')][_0x5364bf[_0x17cbc9][_0xfda7('0x27')]],_0x5364bf[_0x17cbc9]);}return _0x54a6e8['campaigns'];};};Realtime['prototype'][_0xfda7('0x62')]=function(){var _0x2b7e60=this;return function(_0x5874e5){if(_0x5874e5){freeIsNotKey(_0x5874e5,_0x2b7e60[_0xfda7('0x23')],'id');for(var _0x47801f=0x0,_0x4906db={},_0x1b34cd={};_0x47801f<_0x5874e5[_0xfda7('0x40')];_0x47801f+=0x1){_0x4906db=_0x5874e5[_0x47801f];if(_[_0xfda7('0x41')](_0x2b7e60['faxAccounts'][_0x4906db['id']])){_0x2b7e60[_0xfda7('0x23')][_0x4906db['id']]=new FaxAccount(_0x4906db);}else{_0x2b7e60['mergeFromDatabase'](_0x2b7e60['faxAccounts'][_0x4906db['id']],_0x4906db);}}}return _0x2b7e60[_0xfda7('0x23')];};};module[_0xfda7('0x63')]=Realtime;
\ No newline at end of file
index 59f8fd1..4aeb250 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4aff=['calleridname','monitors','length','filename','createdAt','connectedlinename','membername','xcally-motion-dialer','voiceDialReport','startsWith','Local','indexOf','phone','lastIndexOf','blindTransfer','attendedTransfer','exports','bluebird','util','../../../config/logger','../ami','../rpc/voiceAgentReport','../rpc/voiceDialReport','../rpc/voiceTransferReport','./voiceQueueReport','./voiceAgentReport','./voiceDialReport','./userReport','realtime','agents','telephones','prototype','findAgent','find','isNil','accountcode','voiceQueueReport','lastAssignedTo','name','interface','format','SIP/%s','queuecallercomplete','queuecallercompleteAt','queuecallerexit','queuecallerexitAt','YYYY-MM-DD\x20HH:mm:ss','create','match','voiceCallReport','destination','type','queue','lastdata','context','from-voip-provider','xcally-motion-preview','calleridpreview','originatecalleridnum','destinationchannel','channel','calleridnum','disposition','ANSWERED','connectedlinenum','callerid','\x22%s\x22\x20<%s>'];(function(_0x4441cf,_0x4509a6){var _0x3b8877=function(_0x3f3a17){while(--_0x3f3a17){_0x4441cf['push'](_0x4441cf['shift']());}};_0x3b8877(++_0x4509a6);}(_0x4aff,0xda));var _0xf4af=function(_0x5a5a88,_0x5d0b5b){_0x5a5a88=_0x5a5a88-0x0;var _0x2c7efb=_0x4aff[_0x5a5a88];return _0x2c7efb;};'use strict';var BPromise=require(_0xf4af('0x0'));var _=require('lodash');var moment=require('moment');var util=require(_0xf4af('0x1'));var logger=require(_0xf4af('0x2'))('ami');var ami=require(_0xf4af('0x3'));var RpcVoiceAgentReport=require(_0xf4af('0x4'));var RpcVoiceCallReport=require('../rpc/voiceCallReport');var RpcVoiceDialReport=require(_0xf4af('0x5'));var RpcMemberReport=require('../rpc/memberReport');var RpcVoiceQueueReport=require('../rpc/voiceQueueReport');var RpcVoiceRecording=require('../rpc/voiceRecording');var RpcVoiceTransferReport=require(_0xf4af('0x6'));var VoiceQueueReport=require(_0xf4af('0x7'));var VoiceCallReport=require('./voiceCallReport');var VoiceAgentReport=require(_0xf4af('0x8'));var VoiceDialReport=require(_0xf4af('0x9'));var UserReport=require(_0xf4af('0xa'));function Report(_0x15c42f){this[_0xf4af('0xb')]=_0x15c42f;this['agents']=_0x15c42f[_0xf4af('0xc')];this[_0xf4af('0xd')]=_0x15c42f[_0xf4af('0xd')];}Report[_0xf4af('0xe')]['sync']=function(_0x19a8dd){var _0x5352aa=new VoiceQueueReport(this['realtime']);var _0x2e9add=new VoiceAgentReport(this[_0xf4af('0xb')]);var _0x5c7dda=new VoiceDialReport(this['realtime']);var _0x24b6cc=new VoiceCallReport(this['realtime']);var _0x2788f0=new UserReport(this[_0xf4af('0xb')]);};Report['prototype'][_0xf4af('0xf')]=function(_0x5b0030){var _0x406965=undefined;_0x406965=_[_0xf4af('0x10')](this[_0xf4af('0xc')],function(_0x3c9320){return _0x3c9320['accountcode']==_0x5b0030||_0x3c9320['name']==_0x5b0030;});if(_[_0xf4af('0x11')](_0x406965)){var _0xd26ac9=_[_0xf4af('0x10')](this[_0xf4af('0xd')],function(_0x2d0c1e){return _0x2d0c1e[_0xf4af('0x12')]==_0x5b0030||_0x2d0c1e['name']==_0x5b0030;});if(_0xd26ac9){_0x406965=_[_0xf4af('0x10')](this[_0xf4af('0xc')],function(_0x49ee87){return _0x49ee87['interface']==util['format']('SIP/%s',_0xd26ac9['name']);});}}return _0x406965;};Report[_0xf4af('0xe')][_0xf4af('0x13')]=function(_0x224b14){for(var _0x36ff0d=0x0;_0x36ff0d<_0x224b14['length'];_0x36ff0d+=0x1){var _0xf49db5=this[_0xf4af('0xf')](_0x224b14[_0x36ff0d]['connectedlinenum']);if(_0xf49db5){_0x224b14[_0x36ff0d][_0xf4af('0x12')]=_0xf49db5[_0xf4af('0x12')];_0x224b14[_0x36ff0d]['assigned']=!![];_0x224b14[_0x36ff0d][_0xf4af('0x14')]=_0xf49db5[_0xf4af('0x15')];_0x224b14[_0x36ff0d][_0xf4af('0x16')]=_[_0xf4af('0x11')](_0xf49db5[_0xf4af('0x16')])?util[_0xf4af('0x17')](_0xf4af('0x18'),_0xf49db5[_0xf4af('0x15')]):_0xf49db5[_0xf4af('0x16')];if(_0x224b14[_0x36ff0d][_0xf4af('0x19')]){_0x224b14[_0x36ff0d][_0xf4af('0x1a')]=moment()[_0xf4af('0x17')]('YYYY-MM-DD\x20HH:mm:ss');}if(_0x224b14[_0x36ff0d][_0xf4af('0x1b')]){_0x224b14[_0x36ff0d][_0xf4af('0x1c')]=moment()[_0xf4af('0x17')](_0xf4af('0x1d'));}RpcMemberReport['voiceQueueReport'](_0x224b14[_0x36ff0d]);}RpcVoiceQueueReport[_0xf4af('0x1e')](_0x224b14[_0x36ff0d]);}};function extractCalleridNumber(_0x273718){var _0x52839b=_0x273718[_0xf4af('0x1f')](/<(.*?)>/);return _0x52839b?_0x52839b[0x1]:_0x273718;}Report[_0xf4af('0xe')][_0xf4af('0x20')]=function(_0x4f16ba){_0x4f16ba['destination']=_0x4f16ba[_0xf4af('0x21')]||_0x4f16ba['exten'];if(_0x4f16ba[_0xf4af('0x22')]=='dialer'){_0x4f16ba['lastapplication']=_0xf4af('0x23');_0x4f16ba[_0xf4af('0x24')]=_0x4f16ba[_0xf4af('0x23')];if(_0x4f16ba[_0xf4af('0x25')]==_0xf4af('0x26')){_0x4f16ba[_0xf4af('0x12')]='';_0x4f16ba[_0xf4af('0x21')]=extractCalleridNumber(_0x4f16ba['callerid']);}else if(_0x4f16ba[_0xf4af('0x25')]=='from-sip'){if(_0x4f16ba['destination']==_0xf4af('0x27')){_0x4f16ba[_0xf4af('0x21')]=extractCalleridNumber(_0x4f16ba[_0xf4af('0x28')]);_0x4f16ba['calleridnum']=_0x4f16ba[_0xf4af('0x29')];_0x4f16ba[_0xf4af('0x2a')]=[_0x4f16ba[_0xf4af('0x2b')],_0x4f16ba[_0xf4af('0x2b')]=_0x4f16ba[_0xf4af('0x2a')]][0x0];_0x4f16ba['callerid']=_0x4f16ba['calleridpreview'];}else{_0x4f16ba['destination']=_0x4f16ba['calleridnum'];_0x4f16ba[_0xf4af('0x2c')]=_0x4f16ba[_0xf4af('0x29')];if(_0x4f16ba[_0xf4af('0x2d')]==_0xf4af('0x2e')){_0x4f16ba['accountcode']=_0x4f16ba[_0xf4af('0x2f')];}else{_0x4f16ba[_0xf4af('0x12')]='';}}}}else{_0x4f16ba[_0xf4af('0x30')]=util[_0xf4af('0x17')](_0xf4af('0x31'),_0x4f16ba[_0xf4af('0x32')],_0x4f16ba[_0xf4af('0x2c')]);}RpcVoiceCallReport[_0xf4af('0x1e')](_0x4f16ba);if(_0x4f16ba['monitor']){for(var _0x42d2d0=0x0;_0x42d2d0<_0x4f16ba[_0xf4af('0x33')][_0xf4af('0x34')];_0x42d2d0+=0x1){_0x4f16ba['monitorFilename']=_0x4f16ba[_0xf4af('0x33')][_0x42d2d0][_0xf4af('0x35')];_0x4f16ba[_0xf4af('0x36')]=_0x4f16ba[_0xf4af('0x33')][_0x42d2d0][_0xf4af('0x36')];if(_0x4f16ba['exten']==_0xf4af('0x27')){_0x4f16ba[_0xf4af('0x2c')]=_0x4f16ba[_0xf4af('0x2f')];_0x4f16ba['calleridname']=_0x4f16ba[_0xf4af('0x37')];_0x4f16ba[_0xf4af('0x2f')]=_0x4f16ba[_0xf4af('0x12')];_0x4f16ba[_0xf4af('0x37')]=_0x4f16ba[_0xf4af('0x38')];_0x4f16ba['exten']=_0x4f16ba[_0xf4af('0x29')];}else if(_0x4f16ba['exten']==_0xf4af('0x39')){_0x4f16ba[_0xf4af('0x2c')]=_0x4f16ba['destination'];_0x4f16ba['exten']=_0x4f16ba['originatecalleridnum'];}RpcVoiceRecording['create'](_0x4f16ba);}}};Report[_0xf4af('0xe')]['voiceAgentReport']=function(_0x4314a3){RpcVoiceAgentReport[_0xf4af('0x1e')](_0x4314a3);};Report[_0xf4af('0xe')][_0xf4af('0x3a')]=function(_0x3779db){RpcVoiceDialReport[_0xf4af('0x1e')](_0x3779db);var _0x1ba02e=undefined;var _0x204100=_0x3779db[_0xf4af('0x2b')];if(_[_0xf4af('0x3b')](_0x204100,_0xf4af('0x3c'))){var _0x443884=_0x204100['substring'](_0x204100['indexOf']('/')+0x1,_0x204100[_0xf4af('0x3d')]('@'));_0x1ba02e=_[_0xf4af('0x10')](this[_0xf4af('0xc')],function(_0x1e6a67){return _0x1e6a67['mobile']==_0x443884||_0x1e6a67[_0xf4af('0x3e')]==_0x443884||_0x1e6a67['accountcode']==_0x443884;});}else{var _0x443884=_0x204100['substring'](_0x204100[_0xf4af('0x3d')]('/')+0x1,_0x204100[_0xf4af('0x3f')]('-'));_0x1ba02e=this[_0xf4af('0xf')](_0x443884);}if(_0x1ba02e){_0x3779db[_0xf4af('0x16')]=_['isNil'](_0x1ba02e[_0xf4af('0x16')])?util['format']('SIP/%s',_0x1ba02e['name']):_0x1ba02e[_0xf4af('0x16')];_0x3779db[_0xf4af('0x38')]=_0x1ba02e['name'];_0x3779db[_0xf4af('0x12')]=_0x1ba02e[_0xf4af('0x12')];RpcMemberReport[_0xf4af('0x3a')](_0x3779db);}};Report[_0xf4af('0xe')][_0xf4af('0x40')]=function(_0x329be6){RpcVoiceTransferReport[_0xf4af('0x40')](_0x329be6);};Report[_0xf4af('0xe')]['attendedTransfer']=function(_0x2e8e4a){RpcVoiceTransferReport[_0xf4af('0x41')](_0x2e8e4a);};module[_0xf4af('0x42')]=Report;
\ No newline at end of file
+var _0x3e52=['from-sip','xcally-motion-preview','calleridpreview','calleridnum','originatecalleridnum','destinationchannel','disposition','ANSWERED','\x22%s\x22\x20<%s>','calleridname','create','monitor','monitors','monitorFilename','filename','createdAt','connectedlinename','xcally-motion-dialer','voiceAgentReport','channel','Local','substring','indexOf','phone','lastIndexOf','membername','blindTransfer','attendedTransfer','exports','lodash','moment','util','ami','../ami','../rpc/voiceAgentReport','../rpc/voiceCallReport','../rpc/voiceDialReport','../rpc/memberReport','../rpc/voiceQueueReport','../rpc/voiceRecording','../rpc/voiceTransferReport','./voiceQueueReport','./voiceAgentReport','./voiceDialReport','./userReport','agents','prototype','sync','realtime','findAgent','accountcode','isNil','find','telephones','name','format','SIP/%s','length','connectedlinenum','lastAssignedTo','interface','queuecallercomplete','queuecallercompleteAt','YYYY-MM-DD\x20HH:mm:ss','voiceQueueReport','match','voiceCallReport','destination','exten','dialer','lastapplication','queue','lastdata','context','from-voip-provider','callerid'];(function(_0x37f173,_0x1eecf8){var _0xae0ab9=function(_0x41ad58){while(--_0x41ad58){_0x37f173['push'](_0x37f173['shift']());}};_0xae0ab9(++_0x1eecf8);}(_0x3e52,0x101));var _0x23e5=function(_0x81b612,_0x42f042){_0x81b612=_0x81b612-0x0;var _0x476ed5=_0x3e52[_0x81b612];return _0x476ed5;};'use strict';var BPromise=require('bluebird');var _=require(_0x23e5('0x0'));var moment=require(_0x23e5('0x1'));var util=require(_0x23e5('0x2'));var logger=require('../../../config/logger')(_0x23e5('0x3'));var ami=require(_0x23e5('0x4'));var RpcVoiceAgentReport=require(_0x23e5('0x5'));var RpcVoiceCallReport=require(_0x23e5('0x6'));var RpcVoiceDialReport=require(_0x23e5('0x7'));var RpcMemberReport=require(_0x23e5('0x8'));var RpcVoiceQueueReport=require(_0x23e5('0x9'));var RpcVoiceRecording=require(_0x23e5('0xa'));var RpcVoiceTransferReport=require(_0x23e5('0xb'));var VoiceQueueReport=require(_0x23e5('0xc'));var VoiceCallReport=require('./voiceCallReport');var VoiceAgentReport=require(_0x23e5('0xd'));var VoiceDialReport=require(_0x23e5('0xe'));var UserReport=require(_0x23e5('0xf'));function Report(_0xf12892){this['realtime']=_0xf12892;this['agents']=_0xf12892[_0x23e5('0x10')];this['telephones']=_0xf12892['telephones'];}Report[_0x23e5('0x11')][_0x23e5('0x12')]=function(_0x238b6d){var _0x3d79d7=new VoiceQueueReport(this[_0x23e5('0x13')]);var _0x4b3c3f=new VoiceAgentReport(this[_0x23e5('0x13')]);var _0x4969b3=new VoiceDialReport(this['realtime']);var _0x155624=new VoiceCallReport(this[_0x23e5('0x13')]);var _0x28446d=new UserReport(this[_0x23e5('0x13')]);};Report['prototype'][_0x23e5('0x14')]=function(_0x820222){var _0x541284=undefined;_0x541284=_['find'](this[_0x23e5('0x10')],function(_0xf88f53){return _0xf88f53[_0x23e5('0x15')]==_0x820222||_0xf88f53['name']==_0x820222;});if(_[_0x23e5('0x16')](_0x541284)){var _0x2f5353=_[_0x23e5('0x17')](this[_0x23e5('0x18')],function(_0x4adf07){return _0x4adf07[_0x23e5('0x15')]==_0x820222||_0x4adf07[_0x23e5('0x19')]==_0x820222;});if(_0x2f5353){_0x541284=_[_0x23e5('0x17')](this['agents'],function(_0x420d2d){return _0x420d2d['interface']==util[_0x23e5('0x1a')](_0x23e5('0x1b'),_0x2f5353[_0x23e5('0x19')]);});}}return _0x541284;};Report[_0x23e5('0x11')]['voiceQueueReport']=function(_0x4e6ca1){for(var _0xc3b63d=0x0;_0xc3b63d<_0x4e6ca1[_0x23e5('0x1c')];_0xc3b63d+=0x1){var _0x48ead7=this['findAgent'](_0x4e6ca1[_0xc3b63d][_0x23e5('0x1d')]);if(_0x48ead7){_0x4e6ca1[_0xc3b63d][_0x23e5('0x15')]=_0x48ead7[_0x23e5('0x15')];_0x4e6ca1[_0xc3b63d]['assigned']=!![];_0x4e6ca1[_0xc3b63d][_0x23e5('0x1e')]=_0x48ead7[_0x23e5('0x19')];_0x4e6ca1[_0xc3b63d][_0x23e5('0x1f')]=_[_0x23e5('0x16')](_0x48ead7[_0x23e5('0x1f')])?util['format'](_0x23e5('0x1b'),_0x48ead7[_0x23e5('0x19')]):_0x48ead7[_0x23e5('0x1f')];if(_0x4e6ca1[_0xc3b63d][_0x23e5('0x20')]){_0x4e6ca1[_0xc3b63d][_0x23e5('0x21')]=moment()[_0x23e5('0x1a')](_0x23e5('0x22'));}if(_0x4e6ca1[_0xc3b63d]['queuecallerexit']){_0x4e6ca1[_0xc3b63d]['queuecallerexitAt']=moment()[_0x23e5('0x1a')](_0x23e5('0x22'));}RpcMemberReport[_0x23e5('0x23')](_0x4e6ca1[_0xc3b63d]);}RpcVoiceQueueReport['create'](_0x4e6ca1[_0xc3b63d]);}};function extractCalleridNumber(_0x43d15b){var _0x1f47f6=_0x43d15b[_0x23e5('0x24')](/<(.*?)>/);return _0x1f47f6?_0x1f47f6[0x1]:_0x43d15b;}Report[_0x23e5('0x11')][_0x23e5('0x25')]=function(_0x47162f){_0x47162f[_0x23e5('0x26')]=_0x47162f['destination']||_0x47162f[_0x23e5('0x27')];if(_0x47162f['type']==_0x23e5('0x28')){_0x47162f[_0x23e5('0x29')]=_0x23e5('0x2a');_0x47162f[_0x23e5('0x2b')]=_0x47162f[_0x23e5('0x2a')];if(_0x47162f[_0x23e5('0x2c')]==_0x23e5('0x2d')){_0x47162f[_0x23e5('0x15')]='';_0x47162f[_0x23e5('0x26')]=extractCalleridNumber(_0x47162f[_0x23e5('0x2e')]);}else if(_0x47162f['context']==_0x23e5('0x2f')){if(_0x47162f['destination']==_0x23e5('0x30')){_0x47162f[_0x23e5('0x26')]=extractCalleridNumber(_0x47162f[_0x23e5('0x31')]);_0x47162f[_0x23e5('0x32')]=_0x47162f[_0x23e5('0x33')];_0x47162f[_0x23e5('0x34')]=[_0x47162f['channel'],_0x47162f['channel']=_0x47162f[_0x23e5('0x34')]][0x0];_0x47162f[_0x23e5('0x2e')]=_0x47162f['calleridpreview'];}else{_0x47162f[_0x23e5('0x26')]=_0x47162f[_0x23e5('0x32')];_0x47162f[_0x23e5('0x32')]=_0x47162f['originatecalleridnum'];if(_0x47162f[_0x23e5('0x35')]==_0x23e5('0x36')){_0x47162f[_0x23e5('0x15')]=_0x47162f['connectedlinenum'];}else{_0x47162f[_0x23e5('0x15')]='';}}}}else{_0x47162f['callerid']=util[_0x23e5('0x1a')](_0x23e5('0x37'),_0x47162f[_0x23e5('0x38')],_0x47162f[_0x23e5('0x32')]);}RpcVoiceCallReport[_0x23e5('0x39')](_0x47162f);if(_0x47162f[_0x23e5('0x3a')]){for(var _0x19d735=0x0;_0x19d735<_0x47162f[_0x23e5('0x3b')]['length'];_0x19d735+=0x1){_0x47162f[_0x23e5('0x3c')]=_0x47162f[_0x23e5('0x3b')][_0x19d735][_0x23e5('0x3d')];_0x47162f[_0x23e5('0x3e')]=_0x47162f['monitors'][_0x19d735][_0x23e5('0x3e')];if(_0x47162f['exten']==_0x23e5('0x30')){_0x47162f['calleridnum']=_0x47162f[_0x23e5('0x1d')];_0x47162f[_0x23e5('0x38')]=_0x47162f[_0x23e5('0x3f')];_0x47162f['connectedlinenum']=_0x47162f['accountcode'];_0x47162f[_0x23e5('0x3f')]=_0x47162f['membername'];_0x47162f[_0x23e5('0x27')]=_0x47162f[_0x23e5('0x33')];}else if(_0x47162f[_0x23e5('0x27')]==_0x23e5('0x40')){_0x47162f['calleridnum']=_0x47162f[_0x23e5('0x26')];_0x47162f[_0x23e5('0x27')]=_0x47162f['originatecalleridnum'];}RpcVoiceRecording[_0x23e5('0x39')](_0x47162f);}}};Report[_0x23e5('0x11')][_0x23e5('0x41')]=function(_0x1b2bd3){RpcVoiceAgentReport[_0x23e5('0x39')](_0x1b2bd3);};Report[_0x23e5('0x11')]['voiceDialReport']=function(_0x138079){RpcVoiceDialReport[_0x23e5('0x39')](_0x138079);var _0x535d8d=undefined;var _0x4404bb=_0x138079[_0x23e5('0x42')];if(_['startsWith'](_0x4404bb,_0x23e5('0x43'))){var _0x4541e5=_0x4404bb[_0x23e5('0x44')](_0x4404bb['indexOf']('/')+0x1,_0x4404bb[_0x23e5('0x45')]('@'));_0x535d8d=_['find'](this['agents'],function(_0x8f640f){return _0x8f640f['mobile']==_0x4541e5||_0x8f640f[_0x23e5('0x46')]==_0x4541e5||_0x8f640f['accountcode']==_0x4541e5;});}else{var _0x4541e5=_0x4404bb[_0x23e5('0x44')](_0x4404bb[_0x23e5('0x45')]('/')+0x1,_0x4404bb[_0x23e5('0x47')]('-'));_0x535d8d=this[_0x23e5('0x14')](_0x4541e5);}if(_0x535d8d){_0x138079[_0x23e5('0x1f')]=_['isNil'](_0x535d8d[_0x23e5('0x1f')])?util['format'](_0x23e5('0x1b'),_0x535d8d[_0x23e5('0x19')]):_0x535d8d[_0x23e5('0x1f')];_0x138079[_0x23e5('0x48')]=_0x535d8d[_0x23e5('0x19')];_0x138079[_0x23e5('0x15')]=_0x535d8d[_0x23e5('0x15')];RpcMemberReport['voiceDialReport'](_0x138079);}};Report['prototype'][_0x23e5('0x49')]=function(_0x5c170d){RpcVoiceTransferReport[_0x23e5('0x49')](_0x5c170d);};Report[_0x23e5('0x11')][_0x23e5('0x4a')]=function(_0x143cd6){RpcVoiceTransferReport['attendedTransfer'](_0x143cd6);};module[_0x23e5('0x4b')]=Report;
\ No newline at end of file
index 1341e4c..d598c29 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe646=['state','merge','omit','actionid','format','trunk:%s','name','trunk:save','error','[syncRegistry][UserReport]','agents','device','local','toLowerCase','inuse','stateTime','toNumber','updateStatusRealtime','telephone:%s','telephone:save','startsWith','Queue','Local','substring','indexOf','mobile','phone','[syncDeviceState][UserReport]','peer','registered','status','address','[syncPeerStatus][UserReport]','exports','lodash','moment','bluebird','util','../../../config/environment','../../../config/logger','ami','defaults','redis','localhost','trunks','telephones','registryentry','syncRegistry','bind','registry','devicestatechange','syncDeviceState','peerstatus','syncPeerStatus','loopSyncRealTimeShow','resolve','then','actionSipShowRegistry','actionSipPeerStatus','catch','inspect','actionDeviceStateList','prototype','isNotNull','isUndefined','emit','find','username','stateRegistry'];(function(_0x5082aa,_0xe8bc73){var _0x443915=function(_0x4962eb){while(--_0x4962eb){_0x5082aa['push'](_0x5082aa['shift']());}};_0x443915(++_0xe8bc73);}(_0xe646,0x1c0));var _0x6e64=function(_0x3d90df,_0x2c1a01){_0x3d90df=_0x3d90df-0x0;var _0x1b2da5=_0xe646[_0x3d90df];return _0x1b2da5;};'use strict';var _=require(_0x6e64('0x0'));var moment=require(_0x6e64('0x1'));var BPromise=require(_0x6e64('0x2'));var util=require(_0x6e64('0x3'));var Redis=require('ioredis');var config=require(_0x6e64('0x4'));var logger=require(_0x6e64('0x5'))(_0x6e64('0x6'));var ami=require('../ami');config['redis']=_[_0x6e64('0x7')](config[_0x6e64('0x8')],{'host':_0x6e64('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));function UserReport(_0x168837){this[_0x6e64('0xa')]=_0x168837[_0x6e64('0xa')];this['agents']=_0x168837['agents'];this[_0x6e64('0xb')]=_0x168837[_0x6e64('0xb')];ami['on'](_0x6e64('0xc'),this[_0x6e64('0xd')][_0x6e64('0xe')](this));ami['on'](_0x6e64('0xf'),this[_0x6e64('0xd')][_0x6e64('0xe')](this));ami['on'](_0x6e64('0x10'),this[_0x6e64('0x11')][_0x6e64('0xe')](this));ami['on'](_0x6e64('0x12'),this[_0x6e64('0x13')]['bind'](this));this[_0x6e64('0x14')]();return BPromise[_0x6e64('0x15')]()[_0x6e64('0x16')](ami[_0x6e64('0x17')]())['then'](ami['actionDeviceStateList']())[_0x6e64('0x16')](ami[_0x6e64('0x18')]())[_0x6e64('0x19')](loggerCatch('[loopSyncRealTimeShow]'));}function loggerCatch(_0x1ac0fd){return function(_0x22e216){logger['error'](_0x1ac0fd,util[_0x6e64('0x1a')](_0x22e216,{'showHidden':![],'depth':null}));};}UserReport['prototype'][_0x6e64('0x14')]=function(){setInterval(function(){BPromise[_0x6e64('0x15')]()['then'](ami[_0x6e64('0x17')]())[_0x6e64('0x16')](ami[_0x6e64('0x1b')]())[_0x6e64('0x16')](ami[_0x6e64('0x18')]())[_0x6e64('0x19')](loggerCatch('[loopSyncRealTimeShow]'));},0x32c8);};UserReport[_0x6e64('0x1c')][_0x6e64('0x1d')]=function(_0x7a2593){return _0x7a2593!==null&&!_[_0x6e64('0x1e')](_0x7a2593);};UserReport['prototype'][_0x6e64('0x1f')]=function(_0x3ae1f0,_0x3a577f,_0x537604){io['to'](_0x3ae1f0)[_0x6e64('0x1f')](_0x3a577f,_0x537604);};UserReport[_0x6e64('0x1c')]['syncRegistry']=function(_0x2cf4cd){try{if(this[_0x6e64('0x1d')](_0x2cf4cd)){var _0x1f686a=_[_0x6e64('0x20')](this[_0x6e64('0xa')],{'registry':_0x2cf4cd[_0x6e64('0x21')]});if(_0x1f686a){_0x2cf4cd[_0x6e64('0x22')]=_0x2cf4cd[_0x6e64('0x23')];_[_0x6e64('0x24')](_0x1f686a,_[_0x6e64('0x25')](_0x2cf4cd,['event',_0x6e64('0x26'),_0x6e64('0x21'),_0x6e64('0x23')]));this['emit'](util[_0x6e64('0x27')](_0x6e64('0x28'),_0x1f686a[_0x6e64('0x29')]),_0x6e64('0x2a'),_0x1f686a);}}}catch(_0x521630){logger[_0x6e64('0x2b')](_0x6e64('0x2c'),util[_0x6e64('0x1a')](_0x521630,{'showHidden':![],'depth':null}));}};UserReport[_0x6e64('0x1c')]['syncDeviceState']=function(_0x3d90e4){try{if(this[_0x6e64('0x1d')](_0x3d90e4)){if(this[_0x6e64('0x2d')][_0x3d90e4['device']]){if(!this['agents'][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x2f')]||_0x3d90e4['state'][_0x6e64('0x30')]()==_0x6e64('0x31')){this[_0x6e64('0x2d')][_0x3d90e4[_0x6e64('0x2e')]]['local']=![];if(this['agents'][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x23')]!==_0x3d90e4[_0x6e64('0x23')][_0x6e64('0x30')]()){this[_0x6e64('0x2d')][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x32')]=_[_0x6e64('0x33')](moment()['format']('x'));}this[_0x6e64('0x2d')][_0x3d90e4['device']]['state']=_0x3d90e4[_0x6e64('0x23')][_0x6e64('0x30')]();this[_0x6e64('0x2d')][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x34')](_0x3d90e4);}}else if(this['telephones'][_0x3d90e4['device']]){if(this[_0x6e64('0xb')][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x23')]!==_0x3d90e4[_0x6e64('0x23')]['toLowerCase']()){this[_0x6e64('0xb')][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x32')]=_[_0x6e64('0x33')](moment()['format']('x'));}this['telephones'][_0x3d90e4[_0x6e64('0x2e')]]['state']=_0x3d90e4[_0x6e64('0x23')][_0x6e64('0x30')]();this[_0x6e64('0x1f')](util[_0x6e64('0x27')](_0x6e64('0x35'),this['telephones'][_0x3d90e4[_0x6e64('0x2e')]]['name']),_0x6e64('0x36'),this[_0x6e64('0xb')][_0x3d90e4[_0x6e64('0x2e')]]);}else if(this[_0x6e64('0xa')][_0x3d90e4[_0x6e64('0x2e')]]){if(this['trunks'][_0x3d90e4[_0x6e64('0x2e')]]['state']!==_0x3d90e4[_0x6e64('0x23')][_0x6e64('0x30')]()){this['trunks'][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x32')]=_[_0x6e64('0x33')](moment()[_0x6e64('0x27')]('x'));}this[_0x6e64('0xa')][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x23')]=_0x3d90e4[_0x6e64('0x23')]['toLowerCase']();this['emit'](util[_0x6e64('0x27')](_0x6e64('0x28'),this[_0x6e64('0xa')][_0x3d90e4[_0x6e64('0x2e')]][_0x6e64('0x29')]),_0x6e64('0x2a'),this[_0x6e64('0xa')][_0x3d90e4['device']]);}else if(_[_0x6e64('0x37')](_0x3d90e4['device'],_0x6e64('0x38'))){}else if(_[_0x6e64('0x37')](_0x3d90e4[_0x6e64('0x2e')],_0x6e64('0x39'))){var _0x422491=_0x3d90e4['device'];var _0x34a6f6=_0x422491[_0x6e64('0x3a')](_0x422491[_0x6e64('0x3b')]('/')+0x1,_0x422491['indexOf']('@'));var _0x35ecdc=_[_0x6e64('0x20')](this['agents'],function(_0x4e7c72){return _0x4e7c72[_0x6e64('0x3c')]==_0x34a6f6||_0x4e7c72[_0x6e64('0x3d')]==_0x34a6f6||_0x4e7c72['accountcode']==_0x34a6f6;});if(_0x35ecdc){if(_0x35ecdc[_0x6e64('0x23')]!==_0x3d90e4[_0x6e64('0x23')][_0x6e64('0x30')]()){_0x35ecdc['stateTime']=_['toNumber'](moment()[_0x6e64('0x27')]('x'));}_0x35ecdc[_0x6e64('0x23')]=_0x3d90e4[_0x6e64('0x23')][_0x6e64('0x30')]();_0x35ecdc[_0x6e64('0x2f')]=!![];_0x35ecdc[_0x6e64('0x34')](_0x3d90e4);}}else{}}}catch(_0x3d0680){logger[_0x6e64('0x2b')](_0x6e64('0x3e'),util[_0x6e64('0x1a')](_0x3d0680,{'showHidden':![],'depth':null}));}};UserReport[_0x6e64('0x1c')][_0x6e64('0x13')]=function(_0x52756a){try{if(this[_0x6e64('0x1d')](_0x52756a)&&this[_0x6e64('0x1d')](_0x52756a[_0x6e64('0x12')])){if(this[_0x6e64('0x2d')][_0x52756a[_0x6e64('0x3f')]]){if(!this[_0x6e64('0x2d')][_0x52756a['peer']]['local']||_0x52756a[_0x6e64('0x12')][_0x6e64('0x30')]()==_0x6e64('0x40')){this[_0x6e64('0x2d')][_0x52756a[_0x6e64('0x3f')]]['local']=![];this[_0x6e64('0x2d')][_0x52756a['peer']][_0x6e64('0x41')]=_0x52756a[_0x6e64('0x12')]['toLowerCase']();this[_0x6e64('0x2d')][_0x52756a[_0x6e64('0x3f')]][_0x6e64('0x42')]=_0x52756a['address'];this[_0x6e64('0x2d')][_0x52756a[_0x6e64('0x3f')]]['updateStatusRealtime'](_0x52756a);}}else if(this[_0x6e64('0xb')][_0x52756a[_0x6e64('0x3f')]]){this[_0x6e64('0xb')][_0x52756a[_0x6e64('0x3f')]][_0x6e64('0x41')]=_0x52756a[_0x6e64('0x12')]['toLowerCase']();this[_0x6e64('0xb')][_0x52756a[_0x6e64('0x3f')]][_0x6e64('0x42')]=_0x52756a[_0x6e64('0x42')];this[_0x6e64('0x1f')](util[_0x6e64('0x27')](_0x6e64('0x35'),this[_0x6e64('0xb')][_0x52756a['peer']][_0x6e64('0x29')]),_0x6e64('0x36'),this['telephones'][_0x52756a[_0x6e64('0x3f')]]);}else if(this['trunks'][_0x52756a['peer']]){this[_0x6e64('0xa')][_0x52756a[_0x6e64('0x3f')]][_0x6e64('0x41')]=_0x52756a['peerstatus'][_0x6e64('0x30')]();this['trunks'][_0x52756a[_0x6e64('0x3f')]][_0x6e64('0x42')]=_0x52756a[_0x6e64('0x42')];this['emit'](util[_0x6e64('0x27')]('trunk:%s',this[_0x6e64('0xa')][_0x52756a[_0x6e64('0x3f')]]['name']),_0x6e64('0x2a'),this[_0x6e64('0xa')][_0x52756a[_0x6e64('0x3f')]]);}else{}}}catch(_0xb08efb){logger[_0x6e64('0x2b')](_0x6e64('0x43'),util['inspect'](_0xb08efb,{'showHidden':![],'depth':null}));}};module[_0x6e64('0x44')]=UserReport;
\ No newline at end of file
+var _0x7ff4=['redis','defaults','localhost','socket.io-emitter','trunks','agents','telephones','syncRegistry','bind','registry','devicestatechange','syncDeviceState','syncPeerStatus','loopSyncRealTimeShow','resolve','then','actionSipShowRegistry','actionDeviceStateList','actionSipPeerStatus','catch','[loopSyncRealTimeShow]','error','inspect','prototype','isNotNull','isUndefined','emit','username','stateRegistry','state','merge','omit','event','format','trunk:%s','name','trunk:save','[syncRegistry][UserReport]','device','local','toLowerCase','inuse','stateTime','updateStatusRealtime','toNumber','telephone:save','startsWith','Queue','Local','substring','indexOf','mobile','accountcode','[syncDeviceState][UserReport]','peer','status','address','peerstatus','telephone:%s','[syncPeerStatus][UserReport]','exports','lodash','moment','../../../config/environment','../../../config/logger','ami','../ami'];(function(_0x331a8e,_0x1ac342){var _0x2081a4=function(_0x149cf6){while(--_0x149cf6){_0x331a8e['push'](_0x331a8e['shift']());}};_0x2081a4(++_0x1ac342);}(_0x7ff4,0x149));var _0x47ff=function(_0xa8ad03,_0x275f46){_0xa8ad03=_0xa8ad03-0x0;var _0x17ccb7=_0x7ff4[_0xa8ad03];return _0x17ccb7;};'use strict';var _=require(_0x47ff('0x0'));var moment=require(_0x47ff('0x1'));var BPromise=require('bluebird');var util=require('util');var Redis=require('ioredis');var config=require(_0x47ff('0x2'));var logger=require(_0x47ff('0x3'))(_0x47ff('0x4'));var ami=require(_0x47ff('0x5'));config[_0x47ff('0x6')]=_[_0x47ff('0x7')](config[_0x47ff('0x6')],{'host':_0x47ff('0x8'),'port':0x18eb});var io=require(_0x47ff('0x9'))(new Redis(config[_0x47ff('0x6')]));function UserReport(_0x42dad4){this[_0x47ff('0xa')]=_0x42dad4[_0x47ff('0xa')];this['agents']=_0x42dad4[_0x47ff('0xb')];this[_0x47ff('0xc')]=_0x42dad4[_0x47ff('0xc')];ami['on']('registryentry',this[_0x47ff('0xd')][_0x47ff('0xe')](this));ami['on'](_0x47ff('0xf'),this['syncRegistry'][_0x47ff('0xe')](this));ami['on'](_0x47ff('0x10'),this[_0x47ff('0x11')][_0x47ff('0xe')](this));ami['on']('peerstatus',this[_0x47ff('0x12')][_0x47ff('0xe')](this));this[_0x47ff('0x13')]();return BPromise[_0x47ff('0x14')]()[_0x47ff('0x15')](ami[_0x47ff('0x16')]())[_0x47ff('0x15')](ami[_0x47ff('0x17')]())['then'](ami[_0x47ff('0x18')]())[_0x47ff('0x19')](loggerCatch(_0x47ff('0x1a')));}function loggerCatch(_0x4c3d6b){return function(_0x4531e9){logger[_0x47ff('0x1b')](_0x4c3d6b,util[_0x47ff('0x1c')](_0x4531e9,{'showHidden':![],'depth':null}));};}UserReport[_0x47ff('0x1d')][_0x47ff('0x13')]=function(){setInterval(function(){BPromise['resolve']()[_0x47ff('0x15')](ami['actionSipShowRegistry']())[_0x47ff('0x15')](ami[_0x47ff('0x17')]())['then'](ami[_0x47ff('0x18')]())[_0x47ff('0x19')](loggerCatch(_0x47ff('0x1a')));},0x32c8);};UserReport['prototype'][_0x47ff('0x1e')]=function(_0x14d794){return _0x14d794!==null&&!_[_0x47ff('0x1f')](_0x14d794);};UserReport[_0x47ff('0x1d')]['emit']=function(_0x28af9f,_0x25f16b,_0x49faf3){io['to'](_0x28af9f)[_0x47ff('0x20')](_0x25f16b,_0x49faf3);};UserReport[_0x47ff('0x1d')][_0x47ff('0xd')]=function(_0x1d2c04){try{if(this[_0x47ff('0x1e')](_0x1d2c04)){var _0x3cb727=_['find'](this[_0x47ff('0xa')],{'registry':_0x1d2c04[_0x47ff('0x21')]});if(_0x3cb727){_0x1d2c04[_0x47ff('0x22')]=_0x1d2c04[_0x47ff('0x23')];_[_0x47ff('0x24')](_0x3cb727,_[_0x47ff('0x25')](_0x1d2c04,[_0x47ff('0x26'),'actionid',_0x47ff('0x21'),_0x47ff('0x23')]));this[_0x47ff('0x20')](util[_0x47ff('0x27')](_0x47ff('0x28'),_0x3cb727[_0x47ff('0x29')]),_0x47ff('0x2a'),_0x3cb727);}}}catch(_0x3a4be1){logger['error'](_0x47ff('0x2b'),util['inspect'](_0x3a4be1,{'showHidden':![],'depth':null}));}};UserReport[_0x47ff('0x1d')][_0x47ff('0x11')]=function(_0x3a10e4){try{if(this[_0x47ff('0x1e')](_0x3a10e4)){if(this[_0x47ff('0xb')][_0x3a10e4[_0x47ff('0x2c')]]){if(!this[_0x47ff('0xb')][_0x3a10e4['device']][_0x47ff('0x2d')]||_0x3a10e4['state'][_0x47ff('0x2e')]()==_0x47ff('0x2f')){this[_0x47ff('0xb')][_0x3a10e4[_0x47ff('0x2c')]][_0x47ff('0x2d')]=![];if(this['agents'][_0x3a10e4[_0x47ff('0x2c')]]['state']!==_0x3a10e4[_0x47ff('0x23')]['toLowerCase']()){this['agents'][_0x3a10e4[_0x47ff('0x2c')]][_0x47ff('0x30')]=_['toNumber'](moment()['format']('x'));}this[_0x47ff('0xb')][_0x3a10e4['device']][_0x47ff('0x23')]=_0x3a10e4[_0x47ff('0x23')]['toLowerCase']();this[_0x47ff('0xb')][_0x3a10e4['device']][_0x47ff('0x31')](_0x3a10e4);}}else if(this['telephones'][_0x3a10e4[_0x47ff('0x2c')]]){if(this[_0x47ff('0xc')][_0x3a10e4['device']][_0x47ff('0x23')]!==_0x3a10e4[_0x47ff('0x23')][_0x47ff('0x2e')]()){this['telephones'][_0x3a10e4[_0x47ff('0x2c')]]['stateTime']=_[_0x47ff('0x32')](moment()[_0x47ff('0x27')]('x'));}this[_0x47ff('0xc')][_0x3a10e4[_0x47ff('0x2c')]][_0x47ff('0x23')]=_0x3a10e4[_0x47ff('0x23')][_0x47ff('0x2e')]();this['emit'](util['format']('telephone:%s',this[_0x47ff('0xc')][_0x3a10e4['device']][_0x47ff('0x29')]),_0x47ff('0x33'),this[_0x47ff('0xc')][_0x3a10e4['device']]);}else if(this[_0x47ff('0xa')][_0x3a10e4[_0x47ff('0x2c')]]){if(this[_0x47ff('0xa')][_0x3a10e4['device']][_0x47ff('0x23')]!==_0x3a10e4['state'][_0x47ff('0x2e')]()){this[_0x47ff('0xa')][_0x3a10e4[_0x47ff('0x2c')]][_0x47ff('0x30')]=_[_0x47ff('0x32')](moment()[_0x47ff('0x27')]('x'));}this[_0x47ff('0xa')][_0x3a10e4['device']][_0x47ff('0x23')]=_0x3a10e4['state'][_0x47ff('0x2e')]();this['emit'](util[_0x47ff('0x27')](_0x47ff('0x28'),this[_0x47ff('0xa')][_0x3a10e4[_0x47ff('0x2c')]][_0x47ff('0x29')]),_0x47ff('0x2a'),this[_0x47ff('0xa')][_0x3a10e4[_0x47ff('0x2c')]]);}else if(_[_0x47ff('0x34')](_0x3a10e4[_0x47ff('0x2c')],_0x47ff('0x35'))){}else if(_[_0x47ff('0x34')](_0x3a10e4[_0x47ff('0x2c')],_0x47ff('0x36'))){var _0x46e5dd=_0x3a10e4['device'];var _0xbab69a=_0x46e5dd[_0x47ff('0x37')](_0x46e5dd['indexOf']('/')+0x1,_0x46e5dd[_0x47ff('0x38')]('@'));var _0x11a6d9=_['find'](this[_0x47ff('0xb')],function(_0x263bba){return _0x263bba[_0x47ff('0x39')]==_0xbab69a||_0x263bba['phone']==_0xbab69a||_0x263bba[_0x47ff('0x3a')]==_0xbab69a;});if(_0x11a6d9){if(_0x11a6d9['state']!==_0x3a10e4[_0x47ff('0x23')][_0x47ff('0x2e')]()){_0x11a6d9['stateTime']=_[_0x47ff('0x32')](moment()['format']('x'));}_0x11a6d9[_0x47ff('0x23')]=_0x3a10e4['state'][_0x47ff('0x2e')]();_0x11a6d9['local']=!![];_0x11a6d9[_0x47ff('0x31')](_0x3a10e4);}}else{}}}catch(_0x4d517b){logger[_0x47ff('0x1b')](_0x47ff('0x3b'),util['inspect'](_0x4d517b,{'showHidden':![],'depth':null}));}};UserReport[_0x47ff('0x1d')][_0x47ff('0x12')]=function(_0x121958){try{if(this[_0x47ff('0x1e')](_0x121958)&&this[_0x47ff('0x1e')](_0x121958['peerstatus'])){if(this[_0x47ff('0xb')][_0x121958[_0x47ff('0x3c')]]){if(!this['agents'][_0x121958[_0x47ff('0x3c')]][_0x47ff('0x2d')]||_0x121958['peerstatus'][_0x47ff('0x2e')]()=='registered'){this[_0x47ff('0xb')][_0x121958[_0x47ff('0x3c')]]['local']=![];this[_0x47ff('0xb')][_0x121958['peer']][_0x47ff('0x3d')]=_0x121958['peerstatus'][_0x47ff('0x2e')]();this['agents'][_0x121958[_0x47ff('0x3c')]][_0x47ff('0x3e')]=_0x121958[_0x47ff('0x3e')];this['agents'][_0x121958['peer']][_0x47ff('0x31')](_0x121958);}}else if(this['telephones'][_0x121958['peer']]){this[_0x47ff('0xc')][_0x121958[_0x47ff('0x3c')]]['status']=_0x121958[_0x47ff('0x3f')][_0x47ff('0x2e')]();this[_0x47ff('0xc')][_0x121958[_0x47ff('0x3c')]][_0x47ff('0x3e')]=_0x121958[_0x47ff('0x3e')];this['emit'](util[_0x47ff('0x27')](_0x47ff('0x40'),this['telephones'][_0x121958[_0x47ff('0x3c')]]['name']),_0x47ff('0x33'),this[_0x47ff('0xc')][_0x121958[_0x47ff('0x3c')]]);}else if(this[_0x47ff('0xa')][_0x121958[_0x47ff('0x3c')]]){this['trunks'][_0x121958['peer']][_0x47ff('0x3d')]=_0x121958[_0x47ff('0x3f')][_0x47ff('0x2e')]();this[_0x47ff('0xa')][_0x121958[_0x47ff('0x3c')]][_0x47ff('0x3e')]=_0x121958['address'];this['emit'](util[_0x47ff('0x27')](_0x47ff('0x28'),this[_0x47ff('0xa')][_0x121958[_0x47ff('0x3c')]][_0x47ff('0x29')]),_0x47ff('0x2a'),this[_0x47ff('0xa')][_0x121958[_0x47ff('0x3c')]]);}else{}}}catch(_0x20a187){logger['error'](_0x47ff('0x41'),util[_0x47ff('0x1c')](_0x20a187,{'showHidden':![],'depth':null}));}};module[_0x47ff('0x42')]=UserReport;
\ No newline at end of file
index c4b27aa..064b0d6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x253d=['agentconnectAt','addTime','agentcalledAt','custom:agentconnect','user:%s','CONNECT','syncMusicOnHoldStart','find','updateStatusRealtime','onhold','rejected','agentringnoanswerAt','custom:agentringnoanswer','RINGNOANSWER','position','originalposition','abandoned','custom:agentqueuecallerabandon','CALLERABANDON','talktime','reason','transfer','agent','complete','acwTimeout','agentcompleteAt','COMPLETE','cause','answered_elsewhere','agentcomplete','custom:agentcomplete','user:agentcomplete','HANGUP','custom:voiceAgentReport','recalculate','acw','clear','origtransfererchannel','ATTENDED','secondtransfereruniqueid','secondtransfererexten','secondtransferercontext','transfertargetchannel','transfererchannel','BLIND','transfereeuniqueid','extension','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqosrtt','sipcallid','sipuri','bridgepeer','bridgepvtcallid','memberdynamic','memberrealtime','keys','value','exports','lodash','../../../config/logger','ami','../ami','redis','defaults','localhost','socket.io-emitter','voiceQueues','agents','channels','variables','agentcalled','syncAgentCalled','syncAgentConnect','agentringnoanswer','syncAgentRingNoAnswer','bind','queuecallerabandon','syncQueueCallerAbandon','varset','syncVarSet','syncHangup','attendedtransfer','syncBlindTransfer','musiconholdstart','syncMusicOnHoldStop','log','format','membername','exten','calleridnum','join','prototype','add','YYYY-MM-DD\x20HH:mm:ss','diffTime','diff','interface','isNil','queue','user:save','calleridname','destcalleridnum','destcalleridname','accountcode','destaccountcode','destchannel','uniqueid','destuniqueid','context','priority','type','inbound','channel','emit','custom:agentcalled','user:called','CALLED','error','stack','assign','holdtime','ringtime','connect'];(function(_0x4281ab,_0x29af8d){var _0x4c3dbd=function(_0x5e893d){while(--_0x5e893d){_0x4281ab['push'](_0x4281ab['shift']());}};_0x4c3dbd(++_0x29af8d);}(_0x253d,0x1b3));var _0xd253=function(_0x5deb5a,_0x29899d){_0x5deb5a=_0x5deb5a-0x0;var _0x20a648=_0x253d[_0x5deb5a];return _0x20a648;};'use strict';var _=require(_0xd253('0x0'));var moment=require('moment');var util=require('util');var Redis=require('ioredis');var config=require('../../../config/environment');var logger=require(_0xd253('0x1'))(_0xd253('0x2'));var ami=require(_0xd253('0x3'));config[_0xd253('0x4')]=_[_0xd253('0x5')](config['redis'],{'host':_0xd253('0x6'),'port':0x18eb});var io=require(_0xd253('0x7'))(new Redis(config[_0xd253('0x4')]));function VoiceAgentReport(_0x17589a){this[_0xd253('0x8')]=_0x17589a['voiceQueues'];this[_0xd253('0x9')]=_0x17589a[_0xd253('0x9')];this[_0xd253('0xa')]={};this[_0xd253('0xb')]={};ami['on'](_0xd253('0xc'),this[_0xd253('0xd')]['bind'](this));ami['on']('agentconnect',this[_0xd253('0xe')]['bind'](this));ami['on'](_0xd253('0xf'),this[_0xd253('0x10')][_0xd253('0x11')](this));ami['on'](_0xd253('0x12'),this[_0xd253('0x13')][_0xd253('0x11')](this));ami['on']('agentcomplete',this['syncAgentComplete'][_0xd253('0x11')](this));ami['on'](_0xd253('0x14'),this[_0xd253('0x15')]['bind'](this));ami['on']('hangup',this[_0xd253('0x16')][_0xd253('0x11')](this));ami['on'](_0xd253('0x17'),this['syncAttendedTransfer'][_0xd253('0x11')](this));ami['on']('blindtransfer',this[_0xd253('0x18')][_0xd253('0x11')](this));ami['on'](_0xd253('0x19'),this['syncMusicOnHoldStart'][_0xd253('0x11')](this));ami['on']('musiconholdstop',this[_0xd253('0x1a')][_0xd253('0x11')](this));}VoiceAgentReport['prototype'][_0xd253('0x1b')]=function(_0x2a2adc,_0x5b24ff){logger['info'](util[_0xd253('0x1c')]('%s|%s',_0x2a2adc,[_0x5b24ff['uniqueid'],_0x5b24ff[_0xd253('0x1d')],_0x5b24ff['queue'],_0x5b24ff[_0xd253('0x1e')],_0x5b24ff[_0xd253('0x1f')]][_0xd253('0x20')]('|')));};VoiceAgentReport[_0xd253('0x21')]['addTime']=function(_0x307c00,_0x4d9580){return moment(_0x307c00)[_0xd253('0x22')](_0x4d9580,'seconds')[_0xd253('0x1c')](_0xd253('0x23'));};VoiceAgentReport[_0xd253('0x21')][_0xd253('0x24')]=function(_0x592b7f,_0x111580){return moment(_0x592b7f)[_0xd253('0x25')](moment(_0x111580),'seconds');};VoiceAgentReport[_0xd253('0x21')][_0xd253('0xd')]=function(_0x136c52){try{var _0x336736=this[_0xd253('0x9')][_0x136c52[_0xd253('0x26')]];if(!_[_0xd253('0x27')](_0x336736)){_0x336736=_['assign'](_0x336736,{'queue':_0x136c52[_0xd253('0x28')],'destconnectedlinenum':_0x136c52['calleridnum']});io['emit'](_0xd253('0x29'),_0x336736);}var _0x3e36cc=this['channels'][_0x136c52['destchannel']]={'agentcalledAt':moment()[_0xd253('0x1c')](_0xd253('0x23')),'calleridnum':_0x136c52['calleridnum'],'calleridname':_0x136c52[_0xd253('0x2a')],'connectedlinenum':_0x136c52[_0xd253('0x2b')],'connectedlinename':_0x136c52[_0xd253('0x2c')],'accountcode':_0x136c52[_0xd253('0x2d')],'destaccountcode':_0x136c52[_0xd253('0x2e')],'channel':_0x136c52['channel'],'destchannel':_0x136c52[_0xd253('0x2f')],'uniqueid':_0x136c52[_0xd253('0x30')],'destuniqueid':_0x136c52[_0xd253('0x31')],'destcalleridnum':_0x136c52['destcalleridnum'],'destcalleridname':_0x136c52[_0xd253('0x2c')],'destexten':_0x136c52['destexten'],'context':_0x136c52[_0xd253('0x32')],'exten':_0x136c52[_0xd253('0x1e')],'priority':_0x136c52[_0xd253('0x33')],'queue':_0x136c52[_0xd253('0x28')],'type':this[_0xd253('0x8')][_0x136c52[_0xd253('0x28')]]?this[_0xd253('0x8')][_0x136c52[_0xd253('0x28')]][_0xd253('0x34')]||_0xd253('0x35'):'inbound','interface':_0x136c52[_0xd253('0x26')],'mandatoryDisposition':this[_0xd253('0x8')][_0x136c52['queue']]['mandatoryDisposition']||0x0,'membername':_0x136c52[_0xd253('0x1d')],'agentconnect':![],'agentconnectAt':null,'holdtime':0x0,'ringtime':0x0,'agentcomplete':![],'agentcompleteAt':null,'talktime':0x0,'agentringnoanswer':![],'agentringnoanswerAt':null,'reason':'agent','transfer':![],'transferAt':null,'transfertype':null,'transferuniqueid':null,'transfercontext':null,'transferextension':null,'position':null,'originalposition':null,'cause':'','cause-txt':'','UserId':this[_0xd253('0x9')][_0x136c52[_0xd253('0x26')]]?this[_0xd253('0x9')][_0x136c52[_0xd253('0x26')]]['id']:null,'lastevent':'called','agentacw':![],'acwtime':0x0,'variables':this[_0xd253('0xb')][_0x136c52[_0xd253('0x36')]]?this[_0xd253('0xb')][_0x136c52[_0xd253('0x36')]]:{}};ami[_0xd253('0x37')](_0xd253('0x38'),_0x3e36cc);io['to'](util[_0xd253('0x1c')]('user:%s',_0x3e36cc[_0xd253('0x1d')]))[_0xd253('0x37')](_0xd253('0x39'),_0x3e36cc);this[_0xd253('0x1b')](_0xd253('0x3a'),this['channels'][_0x136c52[_0xd253('0x2f')]]);}catch(_0x5b01e3){logger[_0xd253('0x3b')](_0x5b01e3[_0xd253('0x3c')]);}};VoiceAgentReport[_0xd253('0x21')][_0xd253('0xe')]=function(_0x5c388e){try{var _0x10f132=this[_0xd253('0xa')][_0x5c388e[_0xd253('0x2f')]];if(!_[_0xd253('0x27')](_0x10f132)){_0x10f132=_[_0xd253('0x3d')](_0x10f132,{'holdtime':parseInt(_0x5c388e[_0xd253('0x3e')],0xa),'ringtime':parseInt(_0x5c388e[_0xd253('0x3f')],0xa),'agentconnect':!![],'lastevent':_0xd253('0x40')});_0x10f132[_0xd253('0x41')]=this[_0xd253('0x42')](_0x10f132[_0xd253('0x43')],_0x10f132[_0xd253('0x3f')]);ami[_0xd253('0x37')](_0xd253('0x44'),_0x10f132);io['to'](util['format'](_0xd253('0x45'),_0x10f132[_0xd253('0x1d')]))[_0xd253('0x37')]('user:agentconnect',_0x10f132);this[_0xd253('0x1b')](_0xd253('0x46'),_0x10f132);}}catch(_0x435094){logger[_0xd253('0x3b')](_0x435094['stack']);}};VoiceAgentReport[_0xd253('0x21')][_0xd253('0x47')]=function(_0x4c1b76){try{var _0x1bbcbc=_[_0xd253('0x48')](this[_0xd253('0xa')],{'channel':_0x4c1b76[_0xd253('0x36')],'agentconnect':!![]});if(!_[_0xd253('0x27')](_0x1bbcbc)){if(!_[_0xd253('0x27')](this[_0xd253('0x9')][_0x1bbcbc[_0xd253('0x26')]])){this[_0xd253('0x9')][_0x1bbcbc[_0xd253('0x26')]]['onhold']=!![];this[_0xd253('0x9')][_0x1bbcbc[_0xd253('0x26')]][_0xd253('0x49')]();}}}catch(_0x1a70bd){logger['error'](_0x1a70bd['stack']);}};VoiceAgentReport[_0xd253('0x21')][_0xd253('0x1a')]=function(_0xd41a31){try{var _0x362df1=_[_0xd253('0x48')](this[_0xd253('0xa')],{'channel':_0xd41a31[_0xd253('0x36')],'agentconnect':!![]});if(!_['isNil'](_0x362df1)){if(!_[_0xd253('0x27')](this[_0xd253('0x9')][_0x362df1['interface']])){this[_0xd253('0x9')][_0x362df1[_0xd253('0x26')]][_0xd253('0x4a')]=![];this[_0xd253('0x9')][_0x362df1['interface']][_0xd253('0x49')]();}}}catch(_0x585c78){logger[_0xd253('0x3b')](_0x585c78['stack']);}};VoiceAgentReport[_0xd253('0x21')][_0xd253('0x10')]=function(_0x550afb){try{var _0x5964ba=this['channels'][_0x550afb[_0xd253('0x2f')]];if(!_['isNil'](_0x5964ba)){_0x5964ba=_['assign'](_0x5964ba,{'ringtime':parseInt(_0x550afb[_0xd253('0x3f')],0xa)/0x3e8,'agentringnoanswer':!![],'reason':_0xd253('0x4b'),'lastevent':_0xd253('0x4b')});_0x5964ba[_0xd253('0x4c')]=this['addTime'](_0x5964ba[_0xd253('0x43')],_0x5964ba['ringtime']);ami['emit'](_0xd253('0x4d'),_0x5964ba);this[_0xd253('0x1b')](_0xd253('0x4e'),_0x5964ba);}}catch(_0x1d2416){logger[_0xd253('0x3b')](_0x1d2416[_0xd253('0x3c')]);}};VoiceAgentReport[_0xd253('0x21')][_0xd253('0x13')]=function(_0x2c6af6){try{for(var _0x18d4aa in this[_0xd253('0xa')]){var _0x203c58=this[_0xd253('0xa')][_0x18d4aa];if(!_[_0xd253('0x27')](_0x203c58)&&_0x203c58[_0xd253('0x36')]==_0x2c6af6[_0xd253('0x36')]){_0x203c58=_[_0xd253('0x3d')](_0x203c58,{'holdtime':parseInt(_0x2c6af6[_0xd253('0x3e')],0xa),'position':parseInt(_0x2c6af6[_0xd253('0x4f')],0xa),'originalposition':parseInt(_0x2c6af6[_0xd253('0x50')],0xa),'agentringnoanswer':!![],'agentringnoanswerAt':moment()[_0xd253('0x1c')](_0xd253('0x23')),'reason':_0xd253('0x51'),'lastevent':_0xd253('0x51')});ami[_0xd253('0x37')](_0xd253('0x52'),_0x203c58);this['log'](_0xd253('0x53'),_0x203c58);}}}catch(_0xe88a08){logger[_0xd253('0x3b')](_0xe88a08['stack']);}};VoiceAgentReport[_0xd253('0x21')]['syncAgentComplete']=function(_0x2a25b6){try{var _0xa722a2=this[_0xd253('0xa')][_0x2a25b6[_0xd253('0x2f')]];if(!_[_0xd253('0x27')](_0xa722a2)){_0xa722a2=_[_0xd253('0x3d')](_0xa722a2,{'talktime':parseInt(_0x2a25b6[_0xd253('0x54')],0xa),'reason':_0x2a25b6[_0xd253('0x55')]==_0xd253('0x56')?_0xd253('0x57'):_0x2a25b6[_0xd253('0x55')],'agentcomplete':!![],'lastevent':_0xd253('0x58'),'agentacw':this[_0xd253('0x8')][_0xa722a2[_0xd253('0x28')]]&&this[_0xd253('0x8')][_0xa722a2[_0xd253('0x28')]]['acw']?!![]:![],'acwtime':this[_0xd253('0x8')][_0xa722a2[_0xd253('0x28')]]&&this[_0xd253('0x8')][_0xa722a2[_0xd253('0x28')]]['acw']?this[_0xd253('0x8')][_0xa722a2['queue']][_0xd253('0x59')]:0x0});_0xa722a2[_0xd253('0x5a')]=this[_0xd253('0x42')](_0xa722a2[_0xd253('0x41')],_0xa722a2[_0xd253('0x54')]);this[_0xd253('0x1b')](_0xd253('0x5b'),_0xa722a2);}}catch(_0x29b06a){logger[_0xd253('0x3b')](_0x29b06a['stack']);}};VoiceAgentReport[_0xd253('0x21')]['clear']=function(_0x5a0cee){try{switch(_0x5a0cee[_0xd253('0x5c')]){case 0x1a:_0x5a0cee=_[_0xd253('0x3d')](_0x5a0cee,{'agentringnoanswer':!![],'reason':_0xd253('0x5d'),'lastevent':_0xd253('0x5d')});var _0x15d966=_[_0xd253('0x48')](this[_0xd253('0xa')],{'channel':_0x5a0cee['channel'],'agentconnect':!![]});if(!_['isNil'](_0x15d966)){_0x5a0cee=_['assign'](_0x5a0cee,{'agentringnoanswerAt':_0x15d966['agentconnectAt'],'answeredelsewheremembername':_0x15d966[_0xd253('0x1d')],'answeredelsewheredestinationuniqueid':_0x15d966[_0xd253('0x31')]});}ami[_0xd253('0x37')]('custom:agentansweredelsewhere',_0x5a0cee);break;}if(_0x5a0cee[_0xd253('0x5e')]){ami[_0xd253('0x37')](_0xd253('0x5f'),_0x5a0cee);io['to'](util[_0xd253('0x1c')](_0xd253('0x45'),_0x5a0cee[_0xd253('0x1d')]))['emit'](_0xd253('0x60'),_0x5a0cee);}this[_0xd253('0x1b')](_0xd253('0x61'),_0x5a0cee);ami[_0xd253('0x37')](_0xd253('0x62'),_0x5a0cee);if(this['channels'][_0x5a0cee[_0xd253('0x2f')]]){delete this[_0xd253('0xa')][_0x5a0cee[_0xd253('0x2f')]];}}catch(_0x2b5412){logger[_0xd253('0x3b')](_0x2b5412);}};VoiceAgentReport[_0xd253('0x21')][_0xd253('0x16')]=function(_0x49dea4){try{var _0x3657a3=this[_0xd253('0xa')][_0x49dea4[_0xd253('0x36')]];if(!_[_0xd253('0x27')](_0x3657a3)){_0x3657a3=_[_0xd253('0x3d')](_0x3657a3,{'cause':parseInt(_0x49dea4[_0xd253('0x5c')],0xa),'cause-txt':_0x49dea4['cause-txt']});if(_0x3657a3[_0xd253('0x63')]){_0x3657a3=_[_0xd253('0x3d')](_0x3657a3,{'agentcomplete':!![],'agentcompleteAt':moment()['format'](_0xd253('0x23')),'lastevent':_0xd253('0x58'),'agentacw':this[_0xd253('0x8')][_0x3657a3[_0xd253('0x28')]]&&this[_0xd253('0x8')][_0x3657a3['queue']][_0xd253('0x64')]?!![]:![],'acwtime':this[_0xd253('0x8')][_0x3657a3['queue']]&&this[_0xd253('0x8')][_0x3657a3['queue']][_0xd253('0x64')]?this[_0xd253('0x8')][_0x3657a3[_0xd253('0x28')]][_0xd253('0x59')]:0x0});_0x3657a3['talktime']=this[_0xd253('0x24')](_0x3657a3[_0xd253('0x5a')],_0x3657a3[_0xd253('0x41')]);}var _0x23d48a=this[_0xd253('0x9')][_0x3657a3[_0xd253('0x26')]];if(!_[_0xd253('0x27')](_0x23d48a)){_0x23d48a=_[_0xd253('0x3d')](_0x23d48a,{'queue':null,'destconnectedlinenum':null});io['emit'](_0xd253('0x29'),_0x23d48a);}setTimeout(this[_0xd253('0x65')][_0xd253('0x11')](this,_0x3657a3),0x3e8);}if(this[_0xd253('0xb')][_0x49dea4[_0xd253('0x36')]]){delete this['variables'][_0x49dea4[_0xd253('0x36')]];}}catch(_0x360a54){logger[_0xd253('0x3b')](_0x360a54[_0xd253('0x3c')]);}};VoiceAgentReport[_0xd253('0x21')]['syncAttendedTransfer']=function(_0xb8b21d){try{var _0x4cb7fe=this[_0xd253('0xa')][_0xb8b21d[_0xd253('0x66')]];if(!_[_0xd253('0x27')](_0x4cb7fe)){_0x4cb7fe=_[_0xd253('0x3d')](_0x4cb7fe,{'transfer':!![],'transferAt':moment()[_0xd253('0x1c')]('YYYY-MM-DD\x20HH:mm:ss'),'transfertype':_0xd253('0x67'),'agentcomplete':!![],'agentcompleteAt':moment()[_0xd253('0x1c')](_0xd253('0x23')),'transferuniqueid':_0xb8b21d[_0xd253('0x68')],'transfercontext':_0xb8b21d[_0xd253('0x69')],'transferextension':_0xb8b21d[_0xd253('0x6a')],'reason':_0xd253('0x56'),'lastevent':_0xd253('0x58'),'agentacw':this[_0xd253('0x8')][_0x4cb7fe[_0xd253('0x28')]]&&this['voiceQueues'][_0x4cb7fe[_0xd253('0x28')]][_0xd253('0x64')]?!![]:![],'acwtime':this['voiceQueues'][_0x4cb7fe[_0xd253('0x28')]]&&this[_0xd253('0x8')][_0x4cb7fe[_0xd253('0x28')]][_0xd253('0x64')]?this['voiceQueues'][_0x4cb7fe[_0xd253('0x28')]]['acwTimeout']:0x0});_0x4cb7fe[_0xd253('0x54')]=this[_0xd253('0x24')](_0x4cb7fe[_0xd253('0x5a')],_0x4cb7fe[_0xd253('0x41')]);this[_0xd253('0x1b')]('ATTENDED',_0x4cb7fe);}if(!_[_0xd253('0x27')](this[_0xd253('0xa')][_0xb8b21d[_0xd253('0x6b')]])){this['channels'][_0xb8b21d['transfertargetchannel']]['recalculate']=!![];}}catch(_0x50a322){logger[_0xd253('0x3b')](_0x50a322[_0xd253('0x3c')]);}};VoiceAgentReport[_0xd253('0x21')][_0xd253('0x18')]=function(_0x4868af){try{var _0x393ade=this[_0xd253('0xa')][_0x4868af[_0xd253('0x6c')]];if(!_['isNil'](_0x393ade)){_0x393ade=_[_0xd253('0x3d')](_0x393ade,{'transfer':!![],'transferAt':moment()['format'](_0xd253('0x23')),'transfertype':_0xd253('0x6d'),'transferuniqueid':_0x4868af[_0xd253('0x6e')],'transfercontext':_0x4868af[_0xd253('0x32')],'transferextension':_0x4868af[_0xd253('0x6f')],'agentcomplete':!![],'agentcompleteAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0xd253('0x56'),'lastevent':_0xd253('0x58'),'agentacw':this[_0xd253('0x8')][_0x393ade['queue']]&&this[_0xd253('0x8')][_0x393ade[_0xd253('0x28')]][_0xd253('0x64')]?!![]:![],'acwtime':this[_0xd253('0x8')][_0x393ade[_0xd253('0x28')]]&&this[_0xd253('0x8')][_0x393ade['queue']][_0xd253('0x64')]?this[_0xd253('0x8')][_0x393ade['queue']][_0xd253('0x59')]:0x0});_0x393ade[_0xd253('0x63')]=!![];this[_0xd253('0x1b')]('BLIND',_0x393ade);}}catch(_0xe9036e){logger[_0xd253('0x3b')](_0xe9036e[_0xd253('0x3c')]);}};VoiceAgentReport[_0xd253('0x21')][_0xd253('0x15')]=function(_0x34beef){var _0x3ee1e3=['rtpaudioqos','rtpaudioqosbridged',_0xd253('0x70'),_0xd253('0x71'),_0xd253('0x72'),'rtpaudioqoslossbridged',_0xd253('0x73'),'rtpaudioqosrttbridged',_0xd253('0x74'),_0xd253('0x75'),_0xd253('0x76'),_0xd253('0x77'),'membercalls',_0xd253('0x78'),'memberinterface','memberlastcall',_0xd253('0x1d'),'memberpenalty',_0xd253('0x79')];try{var _0x269466=_[_0xd253('0x7a')](_0x34beef['variable'])[0x0];if(!_[_0xd253('0x27')](_0x269466)&&!_['includes'](_0x3ee1e3,_0x269466)){if(!this['variables'][_0x34beef[_0xd253('0x36')]]){this[_0xd253('0xb')][_0x34beef['channel']]={};}this[_0xd253('0xb')][_0x34beef[_0xd253('0x36')]][_0x269466]=_0x34beef[_0xd253('0x7b')];}}catch(_0x2715be){logger[_0xd253('0x3b')](_0x2715be[_0xd253('0x3c')]);}};module[_0xd253('0x7c')]=VoiceAgentReport;
\ No newline at end of file
+var _0xa149=['transfertargetchannel','transfererchannel','BLIND','transfereeuniqueid','extension','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitterbridged','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','bridgepeer','bridgepvtcallid','memberdynamic','memberinterface','keys','variable','includes','value','exports','lodash','moment','util','ioredis','../../../config/environment','../../../config/logger','ami','../ami','redis','localhost','voiceQueues','agents','variables','syncAgentCalled','bind','agentconnect','syncAgentConnect','agentringnoanswer','agentcomplete','syncVarSet','syncHangup','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','prototype','log','format','uniqueid','membername','addTime','add','seconds','diffTime','interface','isNil','calleridnum','emit','user:save','destchannel','YYYY-MM-DD\x20HH:mm:ss','calleridname','destcalleridname','accountcode','channel','destuniqueid','destexten','context','exten','priority','queue','inbound','mandatoryDisposition','agent','called','custom:agentcalled','user:%s','user:called','CALLED','channels','holdtime','ringtime','agentconnectAt','agentcalledAt','custom:agentconnect','user:agentconnect','find','onhold','updateStatusRealtime','stack','error','syncAgentRingNoAnswer','rejected','agentringnoanswerAt','custom:agentringnoanswer','syncQueueCallerAbandon','assign','position','originalposition','abandoned','custom:agentqueuecallerabandon','syncAgentComplete','transfer','reason','acw','acwTimeout','agentcompleteAt','answered_elsewhere','custom:agentcomplete','user:agentcomplete','custom:voiceAgentReport','recalculate','complete','talktime','clear','origtransfererchannel','ATTENDED','secondtransfereruniqueid','secondtransfererexten','secondtransferercontext'];(function(_0x4bd06e,_0x593701){var _0x85ebb=function(_0x26a7f2){while(--_0x26a7f2){_0x4bd06e['push'](_0x4bd06e['shift']());}};_0x85ebb(++_0x593701);}(_0xa149,0x18c));var _0x9a14=function(_0x21c151,_0x26432e){_0x21c151=_0x21c151-0x0;var _0x5a63c2=_0xa149[_0x21c151];return _0x5a63c2;};'use strict';var _=require(_0x9a14('0x0'));var moment=require(_0x9a14('0x1'));var util=require(_0x9a14('0x2'));var Redis=require(_0x9a14('0x3'));var config=require(_0x9a14('0x4'));var logger=require(_0x9a14('0x5'))(_0x9a14('0x6'));var ami=require(_0x9a14('0x7'));config[_0x9a14('0x8')]=_['defaults'](config[_0x9a14('0x8')],{'host':_0x9a14('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x9a14('0x8')]));function VoiceAgentReport(_0x3beb93){this[_0x9a14('0xa')]=_0x3beb93[_0x9a14('0xa')];this[_0x9a14('0xb')]=_0x3beb93[_0x9a14('0xb')];this['channels']={};this[_0x9a14('0xc')]={};ami['on']('agentcalled',this[_0x9a14('0xd')][_0x9a14('0xe')](this));ami['on'](_0x9a14('0xf'),this[_0x9a14('0x10')][_0x9a14('0xe')](this));ami['on'](_0x9a14('0x11'),this['syncAgentRingNoAnswer']['bind'](this));ami['on']('queuecallerabandon',this['syncQueueCallerAbandon'][_0x9a14('0xe')](this));ami['on'](_0x9a14('0x12'),this['syncAgentComplete'][_0x9a14('0xe')](this));ami['on']('varset',this[_0x9a14('0x13')]['bind'](this));ami['on']('hangup',this[_0x9a14('0x14')][_0x9a14('0xe')](this));ami['on'](_0x9a14('0x15'),this[_0x9a14('0x16')]['bind'](this));ami['on'](_0x9a14('0x17'),this[_0x9a14('0x18')][_0x9a14('0xe')](this));ami['on'](_0x9a14('0x19'),this[_0x9a14('0x1a')][_0x9a14('0xe')](this));ami['on'](_0x9a14('0x1b'),this[_0x9a14('0x1c')][_0x9a14('0xe')](this));}VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x1e')]=function(_0x55a283,_0x5287e6){logger['info'](util[_0x9a14('0x1f')]('%s|%s',_0x55a283,[_0x5287e6[_0x9a14('0x20')],_0x5287e6[_0x9a14('0x21')],_0x5287e6['queue'],_0x5287e6['exten'],_0x5287e6['calleridnum']]['join']('|')));};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x22')]=function(_0x255c41,_0x3c3289){return moment(_0x255c41)[_0x9a14('0x23')](_0x3c3289,_0x9a14('0x24'))[_0x9a14('0x1f')]('YYYY-MM-DD\x20HH:mm:ss');};VoiceAgentReport['prototype'][_0x9a14('0x25')]=function(_0x2d2cf6,_0x2ce539){return moment(_0x2d2cf6)['diff'](moment(_0x2ce539),_0x9a14('0x24'));};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0xd')]=function(_0x28f3f3){try{var _0x16ae46=this[_0x9a14('0xb')][_0x28f3f3[_0x9a14('0x26')]];if(!_[_0x9a14('0x27')](_0x16ae46)){_0x16ae46=_['assign'](_0x16ae46,{'queue':_0x28f3f3['queue'],'destconnectedlinenum':_0x28f3f3[_0x9a14('0x28')]});io[_0x9a14('0x29')](_0x9a14('0x2a'),_0x16ae46);}var _0x4a4ec8=this['channels'][_0x28f3f3[_0x9a14('0x2b')]]={'agentcalledAt':moment()[_0x9a14('0x1f')](_0x9a14('0x2c')),'calleridnum':_0x28f3f3[_0x9a14('0x28')],'calleridname':_0x28f3f3[_0x9a14('0x2d')],'connectedlinenum':_0x28f3f3['destcalleridnum'],'connectedlinename':_0x28f3f3[_0x9a14('0x2e')],'accountcode':_0x28f3f3[_0x9a14('0x2f')],'destaccountcode':_0x28f3f3['destaccountcode'],'channel':_0x28f3f3[_0x9a14('0x30')],'destchannel':_0x28f3f3[_0x9a14('0x2b')],'uniqueid':_0x28f3f3['uniqueid'],'destuniqueid':_0x28f3f3[_0x9a14('0x31')],'destcalleridnum':_0x28f3f3['destcalleridnum'],'destcalleridname':_0x28f3f3[_0x9a14('0x2e')],'destexten':_0x28f3f3[_0x9a14('0x32')],'context':_0x28f3f3[_0x9a14('0x33')],'exten':_0x28f3f3[_0x9a14('0x34')],'priority':_0x28f3f3[_0x9a14('0x35')],'queue':_0x28f3f3[_0x9a14('0x36')],'type':this[_0x9a14('0xa')][_0x28f3f3[_0x9a14('0x36')]]?this[_0x9a14('0xa')][_0x28f3f3['queue']]['type']||'inbound':_0x9a14('0x37'),'interface':_0x28f3f3[_0x9a14('0x26')],'mandatoryDisposition':this[_0x9a14('0xa')][_0x28f3f3[_0x9a14('0x36')]][_0x9a14('0x38')]||0x0,'membername':_0x28f3f3[_0x9a14('0x21')],'agentconnect':![],'agentconnectAt':null,'holdtime':0x0,'ringtime':0x0,'agentcomplete':![],'agentcompleteAt':null,'talktime':0x0,'agentringnoanswer':![],'agentringnoanswerAt':null,'reason':_0x9a14('0x39'),'transfer':![],'transferAt':null,'transfertype':null,'transferuniqueid':null,'transfercontext':null,'transferextension':null,'position':null,'originalposition':null,'cause':'','cause-txt':'','UserId':this['agents'][_0x28f3f3[_0x9a14('0x26')]]?this[_0x9a14('0xb')][_0x28f3f3[_0x9a14('0x26')]]['id']:null,'lastevent':_0x9a14('0x3a'),'agentacw':![],'acwtime':0x0,'variables':this[_0x9a14('0xc')][_0x28f3f3['channel']]?this[_0x9a14('0xc')][_0x28f3f3[_0x9a14('0x30')]]:{}};ami['emit'](_0x9a14('0x3b'),_0x4a4ec8);io['to'](util['format'](_0x9a14('0x3c'),_0x4a4ec8[_0x9a14('0x21')]))[_0x9a14('0x29')](_0x9a14('0x3d'),_0x4a4ec8);this[_0x9a14('0x1e')](_0x9a14('0x3e'),this[_0x9a14('0x3f')][_0x28f3f3[_0x9a14('0x2b')]]);}catch(_0x9a1c82){logger['error'](_0x9a1c82['stack']);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x10')]=function(_0x4c611a){try{var _0x142227=this[_0x9a14('0x3f')][_0x4c611a['destchannel']];if(!_[_0x9a14('0x27')](_0x142227)){_0x142227=_['assign'](_0x142227,{'holdtime':parseInt(_0x4c611a[_0x9a14('0x40')],0xa),'ringtime':parseInt(_0x4c611a[_0x9a14('0x41')],0xa),'agentconnect':!![],'lastevent':'connect'});_0x142227[_0x9a14('0x42')]=this[_0x9a14('0x22')](_0x142227[_0x9a14('0x43')],_0x142227[_0x9a14('0x41')]);ami[_0x9a14('0x29')](_0x9a14('0x44'),_0x142227);io['to'](util[_0x9a14('0x1f')]('user:%s',_0x142227['membername']))[_0x9a14('0x29')](_0x9a14('0x45'),_0x142227);this[_0x9a14('0x1e')]('CONNECT',_0x142227);}}catch(_0x126928){logger['error'](_0x126928['stack']);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x1a')]=function(_0x40446b){try{var _0x2319bc=_[_0x9a14('0x46')](this['channels'],{'channel':_0x40446b[_0x9a14('0x30')],'agentconnect':!![]});if(!_[_0x9a14('0x27')](_0x2319bc)){if(!_['isNil'](this[_0x9a14('0xb')][_0x2319bc[_0x9a14('0x26')]])){this[_0x9a14('0xb')][_0x2319bc['interface']][_0x9a14('0x47')]=!![];this['agents'][_0x2319bc['interface']][_0x9a14('0x48')]();}}}catch(_0x1c2b11){logger['error'](_0x1c2b11[_0x9a14('0x49')]);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x1c')]=function(_0x156e84){try{var _0x47f9a6=_[_0x9a14('0x46')](this[_0x9a14('0x3f')],{'channel':_0x156e84['channel'],'agentconnect':!![]});if(!_[_0x9a14('0x27')](_0x47f9a6)){if(!_['isNil'](this[_0x9a14('0xb')][_0x47f9a6[_0x9a14('0x26')]])){this['agents'][_0x47f9a6[_0x9a14('0x26')]][_0x9a14('0x47')]=![];this[_0x9a14('0xb')][_0x47f9a6[_0x9a14('0x26')]][_0x9a14('0x48')]();}}}catch(_0x2c2c36){logger[_0x9a14('0x4a')](_0x2c2c36['stack']);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x4b')]=function(_0x15f2b9){try{var _0x53eda2=this[_0x9a14('0x3f')][_0x15f2b9[_0x9a14('0x2b')]];if(!_[_0x9a14('0x27')](_0x53eda2)){_0x53eda2=_['assign'](_0x53eda2,{'ringtime':parseInt(_0x15f2b9['ringtime'],0xa)/0x3e8,'agentringnoanswer':!![],'reason':_0x9a14('0x4c'),'lastevent':_0x9a14('0x4c')});_0x53eda2[_0x9a14('0x4d')]=this[_0x9a14('0x22')](_0x53eda2['agentcalledAt'],_0x53eda2[_0x9a14('0x41')]);ami[_0x9a14('0x29')](_0x9a14('0x4e'),_0x53eda2);this['log']('RINGNOANSWER',_0x53eda2);}}catch(_0x2aff29){logger[_0x9a14('0x4a')](_0x2aff29[_0x9a14('0x49')]);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x4f')]=function(_0x354b1f){try{for(var _0x4dc4d6 in this[_0x9a14('0x3f')]){var _0x5f23da=this[_0x9a14('0x3f')][_0x4dc4d6];if(!_[_0x9a14('0x27')](_0x5f23da)&&_0x5f23da[_0x9a14('0x30')]==_0x354b1f[_0x9a14('0x30')]){_0x5f23da=_[_0x9a14('0x50')](_0x5f23da,{'holdtime':parseInt(_0x354b1f[_0x9a14('0x40')],0xa),'position':parseInt(_0x354b1f[_0x9a14('0x51')],0xa),'originalposition':parseInt(_0x354b1f[_0x9a14('0x52')],0xa),'agentringnoanswer':!![],'agentringnoanswerAt':moment()[_0x9a14('0x1f')](_0x9a14('0x2c')),'reason':_0x9a14('0x53'),'lastevent':'abandoned'});ami[_0x9a14('0x29')](_0x9a14('0x54'),_0x5f23da);this[_0x9a14('0x1e')]('CALLERABANDON',_0x5f23da);}}}catch(_0x530c5c){logger[_0x9a14('0x4a')](_0x530c5c['stack']);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x55')]=function(_0x5d4168){try{var _0x42d435=this[_0x9a14('0x3f')][_0x5d4168[_0x9a14('0x2b')]];if(!_[_0x9a14('0x27')](_0x42d435)){_0x42d435=_[_0x9a14('0x50')](_0x42d435,{'talktime':parseInt(_0x5d4168['talktime'],0xa),'reason':_0x5d4168['reason']==_0x9a14('0x56')?'agent':_0x5d4168[_0x9a14('0x57')],'agentcomplete':!![],'lastevent':'complete','agentacw':this[_0x9a14('0xa')][_0x42d435[_0x9a14('0x36')]]&&this['voiceQueues'][_0x42d435[_0x9a14('0x36')]][_0x9a14('0x58')]?!![]:![],'acwtime':this[_0x9a14('0xa')][_0x42d435[_0x9a14('0x36')]]&&this[_0x9a14('0xa')][_0x42d435[_0x9a14('0x36')]]['acw']?this['voiceQueues'][_0x42d435[_0x9a14('0x36')]][_0x9a14('0x59')]:0x0});_0x42d435[_0x9a14('0x5a')]=this[_0x9a14('0x22')](_0x42d435['agentconnectAt'],_0x42d435['talktime']);this['log']('COMPLETE',_0x42d435);}}catch(_0x520f00){logger[_0x9a14('0x4a')](_0x520f00['stack']);}};VoiceAgentReport[_0x9a14('0x1d')]['clear']=function(_0x2ed3d6){try{switch(_0x2ed3d6['cause']){case 0x1a:_0x2ed3d6=_[_0x9a14('0x50')](_0x2ed3d6,{'agentringnoanswer':!![],'reason':_0x9a14('0x5b'),'lastevent':_0x9a14('0x5b')});var _0x448507=_[_0x9a14('0x46')](this['channels'],{'channel':_0x2ed3d6[_0x9a14('0x30')],'agentconnect':!![]});if(!_['isNil'](_0x448507)){_0x2ed3d6=_[_0x9a14('0x50')](_0x2ed3d6,{'agentringnoanswerAt':_0x448507[_0x9a14('0x42')],'answeredelsewheremembername':_0x448507[_0x9a14('0x21')],'answeredelsewheredestinationuniqueid':_0x448507[_0x9a14('0x31')]});}ami[_0x9a14('0x29')]('custom:agentansweredelsewhere',_0x2ed3d6);break;}if(_0x2ed3d6[_0x9a14('0x12')]){ami[_0x9a14('0x29')](_0x9a14('0x5c'),_0x2ed3d6);io['to'](util[_0x9a14('0x1f')](_0x9a14('0x3c'),_0x2ed3d6[_0x9a14('0x21')]))['emit'](_0x9a14('0x5d'),_0x2ed3d6);}this[_0x9a14('0x1e')]('HANGUP',_0x2ed3d6);ami[_0x9a14('0x29')](_0x9a14('0x5e'),_0x2ed3d6);if(this[_0x9a14('0x3f')][_0x2ed3d6[_0x9a14('0x2b')]]){delete this['channels'][_0x2ed3d6['destchannel']];}}catch(_0x4a7e87){logger[_0x9a14('0x4a')](_0x4a7e87);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x14')]=function(_0x4325eb){try{var _0x2a1780=this['channels'][_0x4325eb[_0x9a14('0x30')]];if(!_[_0x9a14('0x27')](_0x2a1780)){_0x2a1780=_[_0x9a14('0x50')](_0x2a1780,{'cause':parseInt(_0x4325eb['cause'],0xa),'cause-txt':_0x4325eb['cause-txt']});if(_0x2a1780[_0x9a14('0x5f')]){_0x2a1780=_['assign'](_0x2a1780,{'agentcomplete':!![],'agentcompleteAt':moment()[_0x9a14('0x1f')](_0x9a14('0x2c')),'lastevent':_0x9a14('0x60'),'agentacw':this['voiceQueues'][_0x2a1780['queue']]&&this['voiceQueues'][_0x2a1780['queue']][_0x9a14('0x58')]?!![]:![],'acwtime':this[_0x9a14('0xa')][_0x2a1780[_0x9a14('0x36')]]&&this[_0x9a14('0xa')][_0x2a1780['queue']]['acw']?this[_0x9a14('0xa')][_0x2a1780[_0x9a14('0x36')]][_0x9a14('0x59')]:0x0});_0x2a1780[_0x9a14('0x61')]=this[_0x9a14('0x25')](_0x2a1780['agentcompleteAt'],_0x2a1780[_0x9a14('0x42')]);}var _0x38715f=this[_0x9a14('0xb')][_0x2a1780[_0x9a14('0x26')]];if(!_['isNil'](_0x38715f)){_0x38715f=_['assign'](_0x38715f,{'queue':null,'destconnectedlinenum':null});io['emit'](_0x9a14('0x2a'),_0x38715f);}setTimeout(this[_0x9a14('0x62')]['bind'](this,_0x2a1780),0x3e8);}if(this['variables'][_0x4325eb[_0x9a14('0x30')]]){delete this['variables'][_0x4325eb[_0x9a14('0x30')]];}}catch(_0xc08280){logger['error'](_0xc08280[_0x9a14('0x49')]);}};VoiceAgentReport['prototype'][_0x9a14('0x16')]=function(_0x3e02d4){try{var _0x146076=this[_0x9a14('0x3f')][_0x3e02d4[_0x9a14('0x63')]];if(!_[_0x9a14('0x27')](_0x146076)){_0x146076=_[_0x9a14('0x50')](_0x146076,{'transfer':!![],'transferAt':moment()[_0x9a14('0x1f')](_0x9a14('0x2c')),'transfertype':_0x9a14('0x64'),'agentcomplete':!![],'agentcompleteAt':moment()['format'](_0x9a14('0x2c')),'transferuniqueid':_0x3e02d4[_0x9a14('0x65')],'transfercontext':_0x3e02d4[_0x9a14('0x66')],'transferextension':_0x3e02d4[_0x9a14('0x67')],'reason':_0x9a14('0x56'),'lastevent':_0x9a14('0x60'),'agentacw':this['voiceQueues'][_0x146076[_0x9a14('0x36')]]&&this[_0x9a14('0xa')][_0x146076[_0x9a14('0x36')]]['acw']?!![]:![],'acwtime':this[_0x9a14('0xa')][_0x146076['queue']]&&this[_0x9a14('0xa')][_0x146076[_0x9a14('0x36')]][_0x9a14('0x58')]?this[_0x9a14('0xa')][_0x146076[_0x9a14('0x36')]][_0x9a14('0x59')]:0x0});_0x146076['talktime']=this[_0x9a14('0x25')](_0x146076[_0x9a14('0x5a')],_0x146076[_0x9a14('0x42')]);this[_0x9a14('0x1e')]('ATTENDED',_0x146076);}if(!_['isNil'](this['channels'][_0x3e02d4[_0x9a14('0x68')]])){this[_0x9a14('0x3f')][_0x3e02d4[_0x9a14('0x68')]]['recalculate']=!![];}}catch(_0x3cb182){logger['error'](_0x3cb182[_0x9a14('0x49')]);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x18')]=function(_0x25c89d){try{var _0x3b8f22=this['channels'][_0x25c89d[_0x9a14('0x69')]];if(!_[_0x9a14('0x27')](_0x3b8f22)){_0x3b8f22=_[_0x9a14('0x50')](_0x3b8f22,{'transfer':!![],'transferAt':moment()[_0x9a14('0x1f')](_0x9a14('0x2c')),'transfertype':_0x9a14('0x6a'),'transferuniqueid':_0x25c89d[_0x9a14('0x6b')],'transfercontext':_0x25c89d[_0x9a14('0x33')],'transferextension':_0x25c89d[_0x9a14('0x6c')],'agentcomplete':!![],'agentcompleteAt':moment()[_0x9a14('0x1f')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'transfer','lastevent':_0x9a14('0x60'),'agentacw':this[_0x9a14('0xa')][_0x3b8f22[_0x9a14('0x36')]]&&this[_0x9a14('0xa')][_0x3b8f22[_0x9a14('0x36')]][_0x9a14('0x58')]?!![]:![],'acwtime':this[_0x9a14('0xa')][_0x3b8f22['queue']]&&this[_0x9a14('0xa')][_0x3b8f22[_0x9a14('0x36')]]['acw']?this[_0x9a14('0xa')][_0x3b8f22[_0x9a14('0x36')]]['acwTimeout']:0x0});_0x3b8f22[_0x9a14('0x5f')]=!![];this[_0x9a14('0x1e')]('BLIND',_0x3b8f22);}}catch(_0x255c75){logger[_0x9a14('0x4a')](_0x255c75[_0x9a14('0x49')]);}};VoiceAgentReport[_0x9a14('0x1d')][_0x9a14('0x13')]=function(_0x204055){var _0x4bc338=[_0x9a14('0x6d'),_0x9a14('0x6e'),'rtpaudioqosjitter',_0x9a14('0x6f'),'rtpaudioqosloss',_0x9a14('0x70'),_0x9a14('0x71'),_0x9a14('0x72'),_0x9a14('0x73'),'sipuri',_0x9a14('0x74'),_0x9a14('0x75'),'membercalls',_0x9a14('0x76'),_0x9a14('0x77'),'memberlastcall','membername','memberpenalty','memberrealtime'];try{var _0x551b39=_[_0x9a14('0x78')](_0x204055[_0x9a14('0x79')])[0x0];if(!_[_0x9a14('0x27')](_0x551b39)&&!_[_0x9a14('0x7a')](_0x4bc338,_0x551b39)){if(!this[_0x9a14('0xc')][_0x204055[_0x9a14('0x30')]]){this[_0x9a14('0xc')][_0x204055[_0x9a14('0x30')]]={};}this[_0x9a14('0xc')][_0x204055[_0x9a14('0x30')]][_0x551b39]=_0x204055[_0x9a14('0x7b')];}}catch(_0x385c76){logger[_0x9a14('0x4a')](_0x385c76[_0x9a14('0x49')]);}};module[_0x9a14('0x7c')]=VoiceAgentReport;
\ No newline at end of file
index 11e2638..7583ed3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbacc=['defaults','localhost','socket.io-emitter','channels','agents','coreshowchannel','syncNewExten','bind','newexten','syncNewState','varset','syncVarSet','hangup','syncHangup','newcallerid','syncNewCallerId','attendedtransfer','blindtransfer','syncBlindTransfer','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','resolve','actionCoreShowChannels','catch','log','prototype','isUndefined','emit','isNotNull','uniqueid','linkedid','merge','pick','keys','error','[syncNewCallerId][VoiceCallReport]','OutgoingSpoolFailed','starttime','format','YYYY-MM-DD\x20HH:mm:ss','disposition','toNumber','channelstate','context','from-sip','split','channel','destconnectedlinenum','user:agentconnect','accountcode','[syncNewChannel][VoiceCallReport]','inspect','exten','application','toLowerCase','applicationdata','appdata','duration','subtract','seconds','includes','lastapplication','lastdata','startsWith','cdr(','match','answered','diff','calleridnum','xcally-motion-preview','connectedlinenum','calleridname','destinationchannel','UserId','membername','name','syncMixMonitorFilename','monitor','endsWith','replace','.wav49','.WAV','monitorFilename','find','monitors','push','rec','variable','value','xmd-phone','xmd-callerid','callerid','xmd-cdrtype','type','xmd-queue','xmd-originatecalleridnum','xmd-destination','destination','xmd-callerid-preview','calleridpreview','sipcallid','sipcalluniqueid','mixmonitor_filename','parse','sipcalllinkedid','endtime','billableseconds','answertime','holdtime','omit','user:%s','custom:voiceCallReport','[syncHangup][VoiceCallReport]','transfereeuniqueid','transfercalleridnum','origtransferercalleridnum','transfertargetcalleridnum','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','[syncAttendedTransfer][VoiceCallReport]','transfereecalleridnum','transferconnectedlinenum','extension','BlindTransfer','transfererchannel','mohstarttime','[syncMusicOnHoldStart][VoiceCallReport]','mohtime','milliseconds','exports','bluebird','lodash','moment','util','ioredis','../../../config/environment','../../../config/logger','../ami','../model/channel','unknown','not_inuse','busy','invalid','ringinuse','onhold','set','queue','agi','playback','voicemail','NO\x20ANSWER','FAILED','BUSY','redis'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xbacc,0x122));var _0xcbac=function(_0x19e35c,_0x29cd1e){_0x19e35c=_0x19e35c-0x0;var _0x3e1fe8=_0xbacc[_0x19e35c];return _0x3e1fe8;};'use strict';var BPromise=require(_0xcbac('0x0'));var _=require(_0xcbac('0x1'));var moment=require(_0xcbac('0x2'));var util=require(_0xcbac('0x3'));var path=require('path');var Redis=require(_0xcbac('0x4'));var config=require(_0xcbac('0x5'));var logger=require(_0xcbac('0x6'))('ami');var ami=require(_0xcbac('0x7'));var Channel=require(_0xcbac('0x8'));var statusDesc=[_0xcbac('0x9'),_0xcbac('0xa'),'inuse',_0xcbac('0xb'),_0xcbac('0xc'),'unavailable','ringing',_0xcbac('0xd'),_0xcbac('0xe')];var applications=[_0xcbac('0xf'),_0xcbac('0x10'),_0xcbac('0x11'),'dial',_0xcbac('0x12'),_0xcbac('0x13')];var dispositions=[_0xcbac('0x14'),_0xcbac('0x15'),'FAILED',_0xcbac('0x14'),'NO\x20ANSWER',_0xcbac('0x14'),'ANSWERED',_0xcbac('0x16'),_0xcbac('0x15'),_0xcbac('0x15'),'FAILED'];var actions={};config[_0xcbac('0x17')]=_[_0xcbac('0x18')](config['redis'],{'host':_0xcbac('0x19'),'port':0x18eb});var io=require(_0xcbac('0x1a'))(new Redis(config[_0xcbac('0x17')]));function VoiceCallReport(_0x52a742){this[_0xcbac('0x1b')]=_0x52a742[_0xcbac('0x1b')];this[_0xcbac('0x1c')]=_0x52a742[_0xcbac('0x1c')];ami['on'](_0xcbac('0x1d'),this[_0xcbac('0x1e')][_0xcbac('0x1f')](this));ami['on'](_0xcbac('0x20'),this[_0xcbac('0x1e')][_0xcbac('0x1f')](this));ami['on']('newchannel',this['syncNewChannel']['bind'](this));ami['on']('newstate',this[_0xcbac('0x21')]['bind'](this));ami['on'](_0xcbac('0x22'),this[_0xcbac('0x23')][_0xcbac('0x1f')](this));ami['on'](_0xcbac('0x24'),this[_0xcbac('0x25')][_0xcbac('0x1f')](this));ami['on'](_0xcbac('0x26'),this[_0xcbac('0x27')][_0xcbac('0x1f')](this));ami['on'](_0xcbac('0x28'),this['syncAttendedTransfer']['bind'](this));ami['on'](_0xcbac('0x29'),this[_0xcbac('0x2a')]['bind'](this));ami['on'](_0xcbac('0x2b'),this[_0xcbac('0x2c')]['bind'](this));ami['on'](_0xcbac('0x2d'),this[_0xcbac('0x2e')][_0xcbac('0x1f')](this));return BPromise[_0xcbac('0x2f')]()['then'](ami[_0xcbac('0x30')]())[_0xcbac('0x31')](function(_0x46a68e){console[_0xcbac('0x32')](_0x46a68e);});}VoiceCallReport[_0xcbac('0x33')]['isNotNull']=function(_0x184357){return _0x184357!==null&&!_[_0xcbac('0x34')](_0x184357);};VoiceCallReport['prototype']['emit']=function(_0x1a78f6,_0x556be5,_0x416ed2){io['to'](_0x1a78f6)[_0xcbac('0x35')](_0x556be5,_0x416ed2);};VoiceCallReport[_0xcbac('0x33')][_0xcbac('0x27')]=function(_0x2a0b2b){try{if(this[_0xcbac('0x36')](_0x2a0b2b)){if(_0x2a0b2b[_0xcbac('0x37')]===_0x2a0b2b[_0xcbac('0x38')]){if(!_[_0xcbac('0x34')](this[_0xcbac('0x1b')][_0x2a0b2b[_0xcbac('0x37')]])){_[_0xcbac('0x39')](this[_0xcbac('0x1b')][_0x2a0b2b[_0xcbac('0x37')]],_[_0xcbac('0x3a')](_0x2a0b2b,_[_0xcbac('0x3b')](this['channels'][_0x2a0b2b['uniqueid']])));}}}}catch(_0x1249eb){logger[_0xcbac('0x3c')](_0xcbac('0x3d'),util['inspect'](_0x1249eb,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xcbac('0x33')]['syncNewChannel']=function(_0x2710e2){try{if(this[_0xcbac('0x36')](_0x2710e2)){if(_0x2710e2['uniqueid']===_0x2710e2[_0xcbac('0x38')]&&_0x2710e2['channel']!=_0xcbac('0x3e')){if(_[_0xcbac('0x34')](this[_0xcbac('0x1b')][_0x2710e2[_0xcbac('0x37')]])){this[_0xcbac('0x1b')][_0x2710e2[_0xcbac('0x37')]]=new Channel();this['channels'][_0x2710e2[_0xcbac('0x37')]][_0xcbac('0x3f')]=moment()[_0xcbac('0x40')](_0xcbac('0x41'));this['channels'][_0x2710e2[_0xcbac('0x37')]][_0xcbac('0x42')]=dispositions[_[_0xcbac('0x43')](_0x2710e2[_0xcbac('0x44')])];_[_0xcbac('0x39')](this[_0xcbac('0x1b')][_0x2710e2['uniqueid']],_[_0xcbac('0x3a')](_0x2710e2,_[_0xcbac('0x3b')](this[_0xcbac('0x1b')][_0x2710e2[_0xcbac('0x37')]])));if(_0x2710e2[_0xcbac('0x45')]===_0xcbac('0x46')){if(this['agents'][_0x2710e2['channel'][_0xcbac('0x47')]('-')[0x0]]){this[_0xcbac('0x1c')][_0x2710e2[_0xcbac('0x48')][_0xcbac('0x47')]('-')[0x0]][_0xcbac('0x49')]=_0x2710e2['exten'];this['emit'](util[_0xcbac('0x40')]('user:%s',this[_0xcbac('0x1c')][_0x2710e2[_0xcbac('0x48')][_0xcbac('0x47')]('-')[0x0]]['name']),_0xcbac('0x4a'),{'destaccountcode':this[_0xcbac('0x1c')][_0x2710e2[_0xcbac('0x48')][_0xcbac('0x47')]('-')[0x0]][_0xcbac('0x4b')],'destconnectedlinenum':_0x2710e2['exten']});}}}}}}catch(_0x6ddb18){logger[_0xcbac('0x3c')](_0xcbac('0x4c'),util[_0xcbac('0x4d')](_0x6ddb18,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0xcbac('0x1e')]=function(_0x33b95a){try{if(this[_0xcbac('0x36')](_0x33b95a)){if(_0x33b95a['uniqueid']===_0x33b95a[_0xcbac('0x38')]&&_0x33b95a[_0xcbac('0x4e')]!='h'&&_0x33b95a[_0xcbac('0x48')]!=_0xcbac('0x3e')){_0x33b95a['application']=_0x33b95a[_0xcbac('0x4f')][_0xcbac('0x50')]();_0x33b95a[_0xcbac('0x51')]=(_0x33b95a[_0xcbac('0x52')]||_0x33b95a[_0xcbac('0x51')])['toLowerCase']();if(_[_0xcbac('0x34')](this[_0xcbac('0x1b')][_0x33b95a['uniqueid']])){this['channels'][_0x33b95a[_0xcbac('0x37')]]=new Channel();this[_0xcbac('0x1b')][_0x33b95a[_0xcbac('0x37')]][_0xcbac('0x3f')]=_0x33b95a[_0xcbac('0x53')]?moment()[_0xcbac('0x54')](moment[_0xcbac('0x53')](_0x33b95a[_0xcbac('0x53')])[_0xcbac('0x55')](),'seconds')[_0xcbac('0x40')](_0xcbac('0x41')):moment()['format']('YYYY-MM-DD\x20HH:mm:ss');this['channels'][_0x33b95a['uniqueid']][_0xcbac('0x42')]=_0xcbac('0x14');}_['merge'](this[_0xcbac('0x1b')][_0x33b95a[_0xcbac('0x37')]],_[_0xcbac('0x3a')](_0x33b95a,_[_0xcbac('0x3b')](this[_0xcbac('0x1b')][_0x33b95a[_0xcbac('0x37')]])));if(_[_0xcbac('0x56')](applications,_0x33b95a[_0xcbac('0x4f')])){this['channels'][_0x33b95a[_0xcbac('0x37')]][_0xcbac('0x57')]=_0x33b95a[_0xcbac('0x4f')];this[_0xcbac('0x1b')][_0x33b95a['uniqueid']][_0xcbac('0x58')]=_0x33b95a[_0xcbac('0x51')];if(_0x33b95a[_0xcbac('0x4f')]===_0xcbac('0xf')&&_[_0xcbac('0x59')](_0x33b95a['applicationdata'],_0xcbac('0x5a'))){var _0x2aae70=_0x33b95a['applicationdata'][_0xcbac('0x47')]('=');var _0x3fca5e=_0x2aae70[0x0][_0xcbac('0x5b')](/cdr\((.*)\)/);if(_0x3fca5e){this[_0xcbac('0x1b')][_0x33b95a[_0xcbac('0x37')]][_0x3fca5e[0x1]]=_0x2aae70[0x1];}}else if(_0x33b95a['application']==='queue'){this[_0xcbac('0x1b')][_0x33b95a[_0xcbac('0x37')]][_0xcbac('0x10')]=_0x33b95a['applicationdata']['split'](',')[0x0];}}}}}catch(_0x4ff976){logger[_0xcbac('0x3c')]('[syncNewExten][VoiceCallReport]',util[_0xcbac('0x4d')](_0x4ff976,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0xcbac('0x21')]=function(_0x3e1f10){try{if(this[_0xcbac('0x36')](_0x3e1f10)){if(_0x3e1f10[_0xcbac('0x37')]!==_0x3e1f10[_0xcbac('0x38')]){if(this[_0xcbac('0x1b')][_0x3e1f10[_0xcbac('0x38')]]){if(_0x3e1f10[_0xcbac('0x44')]==='6'){if(!this[_0xcbac('0x1b')][_0x3e1f10['linkedid']]['answered']){var _0x9ebe11=moment();this['channels'][_0x3e1f10['linkedid']][_0xcbac('0x5c')]=!![];this['channels'][_0x3e1f10['linkedid']]['answertime']=_0x9ebe11['format'](_0xcbac('0x41'));if(this['channels'][_0x3e1f10['linkedid']][_0xcbac('0x3f')]){this[_0xcbac('0x1b')][_0x3e1f10[_0xcbac('0x38')]]['holdtime']=_0x9ebe11[_0xcbac('0x5d')](this[_0xcbac('0x1b')][_0x3e1f10[_0xcbac('0x38')]][_0xcbac('0x3f')],_0xcbac('0x55'));}}this[_0xcbac('0x1b')][_0x3e1f10[_0xcbac('0x38')]][_0xcbac('0x38')]=_0x3e1f10['uniqueid'];if(_0x3e1f10[_0xcbac('0x5e')]!==_0xcbac('0x5f')){this['channels'][_0x3e1f10[_0xcbac('0x38')]][_0xcbac('0x60')]=_0x3e1f10[_0xcbac('0x5e')];}this[_0xcbac('0x1b')][_0x3e1f10['linkedid']]['connectedlinename']=_0x3e1f10[_0xcbac('0x61')];this[_0xcbac('0x1b')][_0x3e1f10[_0xcbac('0x38')]][_0xcbac('0x62')]=_0x3e1f10['channel'];this[_0xcbac('0x1b')][_0x3e1f10['linkedid']][_0xcbac('0x42')]=dispositions[_['toNumber'](_0x3e1f10[_0xcbac('0x44')])];if(this[_0xcbac('0x1c')][_0x3e1f10[_0xcbac('0x48')][_0xcbac('0x47')]('-')[0x0]]){this['channels'][_0x3e1f10[_0xcbac('0x38')]][_0xcbac('0x63')]=this[_0xcbac('0x1c')][_0x3e1f10['channel']['split']('-')[0x0]]['id'];this[_0xcbac('0x1b')][_0x3e1f10[_0xcbac('0x38')]][_0xcbac('0x64')]=this[_0xcbac('0x1c')][_0x3e1f10[_0xcbac('0x48')]['split']('-')[0x0]][_0xcbac('0x65')];}}}}else{if(this[_0xcbac('0x1b')][_0x3e1f10['uniqueid']]){if(_0x3e1f10[_0xcbac('0x44')]==='6'){if(this['agents'][_0x3e1f10['channel'][_0xcbac('0x47')]('-')[0x0]]){this[_0xcbac('0x1b')][_0x3e1f10[_0xcbac('0x37')]][_0xcbac('0x63')]=this[_0xcbac('0x1c')][_0x3e1f10[_0xcbac('0x48')]['split']('-')[0x0]]['id'];this[_0xcbac('0x1b')][_0x3e1f10['uniqueid']]['membername']=this[_0xcbac('0x1c')][_0x3e1f10[_0xcbac('0x48')]['split']('-')[0x0]][_0xcbac('0x65')];}}}}}}catch(_0x1381bc){logger['error']('[syncNewState][VoiceCallReport]',util[_0xcbac('0x4d')](_0x1381bc,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xcbac('0x33')][_0xcbac('0x66')]=function(_0x949f05,_0x29995e){if(this[_0xcbac('0x1b')][_0x949f05]){this['channels'][_0x949f05][_0xcbac('0x67')]=!![];if(_[_0xcbac('0x68')](_0x29995e,'.wav49')){_0x29995e=_0x29995e[_0xcbac('0x69')](_0xcbac('0x6a'),_0xcbac('0x6b'));}this[_0xcbac('0x1b')][_0x949f05][_0xcbac('0x6c')]=_0x29995e;var _0x544002=_[_0xcbac('0x6d')](this[_0xcbac('0x1b')][_0x949f05][_0xcbac('0x6e')],{'filename':_0x29995e});if(_['isNil'](_0x544002)){this[_0xcbac('0x1b')][_0x949f05][_0xcbac('0x6e')][_0xcbac('0x6f')]({'filename':_0x29995e,'createdAt':moment()[_0xcbac('0x40')](_0xcbac('0x41')),'mixmonitorid':'','status':_0xcbac('0x70')});}}};VoiceCallReport['prototype']['syncVarSet']=function(_0x39e502){try{if(this[_0xcbac('0x36')](_0x39e502)){if(this[_0xcbac('0x1b')][_0x39e502['uniqueid']]&&_0x39e502[_0xcbac('0x48')]!=_0xcbac('0x3e')){if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')])){if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')]['mixmonitor_filename'])){this[_0xcbac('0x66')](_0x39e502['uniqueid'],_0x39e502[_0xcbac('0x72')]);}else if(this['isNotNull'](_0x39e502[_0xcbac('0x71')][_0xcbac('0x73')])){this[_0xcbac('0x1b')][_0x39e502['uniqueid']][_0xcbac('0x5e')]=_0x39e502['value'];}else if(this['isNotNull'](_0x39e502['variable'][_0xcbac('0x74')])){this[_0xcbac('0x1b')][_0x39e502['uniqueid']][_0xcbac('0x75')]=_0x39e502[_0xcbac('0x72')];}else if(this['isNotNull'](_0x39e502[_0xcbac('0x71')][_0xcbac('0x76')])){this[_0xcbac('0x1b')][_0x39e502['uniqueid']][_0xcbac('0x77')]=_0x39e502[_0xcbac('0x72')];}else if(this[_0xcbac('0x36')](_0x39e502['variable'][_0xcbac('0x78')])){this[_0xcbac('0x1b')][_0x39e502[_0xcbac('0x37')]][_0xcbac('0x10')]=_0x39e502[_0xcbac('0x72')][_0xcbac('0x47')](',')[0x0];}else if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')][_0xcbac('0x79')])){this[_0xcbac('0x1b')][_0x39e502[_0xcbac('0x37')]]['originatecalleridnum']=_0x39e502[_0xcbac('0x72')];}else if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')][_0xcbac('0x7a')])){this[_0xcbac('0x1b')][_0x39e502[_0xcbac('0x37')]][_0xcbac('0x7b')]=_0x39e502[_0xcbac('0x72')];}else if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')][_0xcbac('0x7c')])){this[_0xcbac('0x1b')][_0x39e502['uniqueid']][_0xcbac('0x7d')]=_0x39e502[_0xcbac('0x72')];}else if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')]['xmcs-queue'])){this[_0xcbac('0x1b')][_0x39e502['uniqueid']]['queue']=_0x39e502[_0xcbac('0x72')];}else if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')][_0xcbac('0x7e')])){this[_0xcbac('0x1b')][_0x39e502['uniqueid']][_0xcbac('0x7f')]=_0x39e502[_0xcbac('0x72')];}}}else if(this['isNotNull'](_0x39e502[_0xcbac('0x71')][_0xcbac('0x80')])){if(_0x39e502['value']){var _0x2f7805=path[_0xcbac('0x81')](_0x39e502[_0xcbac('0x72')])[_0xcbac('0x65')];this['syncMixMonitorFilename'](_0x2f7805,_0x39e502[_0xcbac('0x72')]);}}else if(this[_0xcbac('0x1b')][_0x39e502[_0xcbac('0x38')]]){if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')])){if(this[_0xcbac('0x36')](_0x39e502[_0xcbac('0x71')][_0xcbac('0x7e')])){this[_0xcbac('0x1b')][_0x39e502[_0xcbac('0x38')]][_0xcbac('0x82')]=_0x39e502[_0xcbac('0x72')];}}}}}catch(_0x427662){logger[_0xcbac('0x3c')]('[syncVarSet][VoiceCallReport]',util[_0xcbac('0x4d')](_0x427662,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xcbac('0x33')][_0xcbac('0x25')]=function(_0x3fc28d){try{if(this[_0xcbac('0x36')](_0x3fc28d)){if(this[_0xcbac('0x1b')][_0x3fc28d[_0xcbac('0x37')]]){var _0x318a17=moment();this[_0xcbac('0x1b')][_0x3fc28d['uniqueid']][_0xcbac('0x83')]=_0x318a17['format'](_0xcbac('0x41'));this['channels'][_0x3fc28d[_0xcbac('0x37')]][_0xcbac('0x53')]=_0x318a17[_0xcbac('0x5d')](this[_0xcbac('0x1b')][_0x3fc28d[_0xcbac('0x37')]][_0xcbac('0x3f')],_0xcbac('0x55'));if(this[_0xcbac('0x1b')][_0x3fc28d[_0xcbac('0x37')]][_0xcbac('0x5c')]){this[_0xcbac('0x1b')][_0x3fc28d[_0xcbac('0x37')]][_0xcbac('0x84')]=_0x318a17[_0xcbac('0x5d')](this['channels'][_0x3fc28d[_0xcbac('0x37')]][_0xcbac('0x85')],'seconds');this[_0xcbac('0x1b')][_0x3fc28d[_0xcbac('0x37')]][_0xcbac('0x86')]=this[_0xcbac('0x1b')][_0x3fc28d[_0xcbac('0x37')]][_0xcbac('0x53')]-this['channels'][_0x3fc28d['uniqueid']][_0xcbac('0x84')];}if(_0x3fc28d[_0xcbac('0x45')]==='from-sip'){if(this[_0xcbac('0x1c')][_0x3fc28d['channel']['split']('-')[0x0]]){this['agents'][_0x3fc28d[_0xcbac('0x48')]['split']('-')[0x0]]=_[_0xcbac('0x87')](this[_0xcbac('0x1c')][_0x3fc28d[_0xcbac('0x48')]['split']('-')[0x0]],[_0xcbac('0x49')]);this[_0xcbac('0x35')](util[_0xcbac('0x40')](_0xcbac('0x88'),this['agents'][_0x3fc28d[_0xcbac('0x48')][_0xcbac('0x47')]('-')[0x0]]['name']),'user:agentcomplete',{'destaccountcode':this[_0xcbac('0x1c')][_0x3fc28d['channel'][_0xcbac('0x47')]('-')[0x0]][_0xcbac('0x4b')]});}}ami['emit'](_0xcbac('0x89'),this[_0xcbac('0x1b')][_0x3fc28d[_0xcbac('0x37')]]);delete this[_0xcbac('0x1b')][_0x3fc28d[_0xcbac('0x37')]];}}}catch(_0x1400c6){logger[_0xcbac('0x3c')](_0xcbac('0x8a'),util[_0xcbac('0x4d')](_0x1400c6,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype']['syncAttendedTransfer']=function(_0x329b09){try{if(this[_0xcbac('0x36')](_0x329b09)){if(this['channels'][_0x329b09[_0xcbac('0x8b')]]){this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x8b')]][_0xcbac('0x8c')]=_0x329b09[_0xcbac('0x8d')];this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x8b')]]['transferconnectedlinenum']=_0x329b09[_0xcbac('0x8e')];if(this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x8f')]]){var _0x1ddf1d=this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x8f')]];this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x8f')]]=this[_0xcbac('0x1b')][_0x329b09['transfereeuniqueid']];this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x8b')]]=_0x1ddf1d;}}else if(this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x90')]]){this[_0xcbac('0x1b')][_0x329b09['transfertargetuniqueid']][_0xcbac('0x8c')]=_0x329b09[_0xcbac('0x8d')];this['channels'][_0x329b09[_0xcbac('0x90')]]['transferconnectedlinenum']=_0x329b09[_0xcbac('0x8e')];if(this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x91')]]){var _0x1ddf1d=this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x91')]];this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x91')]]=this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x90')]];this[_0xcbac('0x1b')][_0x329b09[_0xcbac('0x90')]]=_0x1ddf1d;}}}}catch(_0x343810){logger[_0xcbac('0x3c')](_0xcbac('0x92'),util[_0xcbac('0x4d')](_0x343810,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0xcbac('0x2a')]=function(_0x20c24d){try{if(this[_0xcbac('0x36')](_0x20c24d)){if(this[_0xcbac('0x1b')][_0x20c24d['transfereeuniqueid']]){this[_0xcbac('0x1b')][_0x20c24d[_0xcbac('0x8b')]][_0xcbac('0x8c')]=_0x20c24d[_0xcbac('0x93')];this[_0xcbac('0x1b')][_0x20c24d[_0xcbac('0x8b')]][_0xcbac('0x94')]=_0x20c24d[_0xcbac('0x95')];this[_0xcbac('0x25')]({'event':_0xcbac('0x96'),'uniqueid':_0x20c24d[_0xcbac('0x8b')],'context':_0x20c24d[_0xcbac('0x45')],'channel':_0x20c24d[_0xcbac('0x97')]});}}}catch(_0x4832fe){logger[_0xcbac('0x3c')]('[syncBlindTransfer][VoiceCallReport]',util[_0xcbac('0x4d')](_0x4832fe,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xcbac('0x33')][_0xcbac('0x2c')]=function(_0xe6820a){try{if(this['isNotNull'](_0xe6820a)){if(this[_0xcbac('0x1b')][_0xe6820a[_0xcbac('0x37')]]){if(!_['isNil'](this[_0xcbac('0x1b')][_0xe6820a[_0xcbac('0x37')]][_0xcbac('0x85')])){this[_0xcbac('0x1b')][_0xe6820a[_0xcbac('0x37')]][_0xcbac('0x98')]=moment()[_0xcbac('0x40')](_0xcbac('0x41'));}}}}catch(_0x4bd94c){logger[_0xcbac('0x3c')](_0xcbac('0x99'),util[_0xcbac('0x4d')](_0x4bd94c,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0xcbac('0x33')]['syncMusicOnHoldStop']=function(_0x549e72){try{if(this['isNotNull'](_0x549e72)){if(this['channels'][_0x549e72['uniqueid']]){if(!_['isNil'](this['channels'][_0x549e72['uniqueid']][_0xcbac('0x98')])){this[_0xcbac('0x1b')][_0x549e72[_0xcbac('0x37')]][_0xcbac('0x9a')]+=moment()[_0xcbac('0x9b')](0x0)[_0xcbac('0x5d')](this[_0xcbac('0x1b')][_0x549e72['uniqueid']]['mohstarttime'],'seconds');delete this[_0xcbac('0x1b')][_0x549e72[_0xcbac('0x37')]]['mohstarttime'];}}}}catch(_0x397d8e){logger[_0xcbac('0x3c')]('[syncMusicOnHoldStop][VoiceCallReport]',util['inspect'](_0x397d8e,{'showHidden':![],'depth':null}));}};module[_0xcbac('0x9c')]=VoiceCallReport;
\ No newline at end of file
+var _0x1474=['variable','mixmonitor_filename','xmd-phone','value','callerid','xmd-cdrtype','type','xmd-queue','xmd-originatecalleridnum','originatecalleridnum','xmd-destination','destination','xmd-callerid-preview','calleridpreview','sipcallid','sipcalluniqueid','parse','sipcalllinkedid','[syncVarSet][VoiceCallReport]','endtime','billableseconds','omit','custom:voiceCallReport','[syncHangup][VoiceCallReport]','transfereeuniqueid','transfercalleridnum','origtransferercalleridnum','transferconnectedlinenum','transfertargetcalleridnum','secondtransfereruniqueid','transfertargetuniqueid','origtransfereruniqueid','extension','BlindTransfer','[syncBlindTransfer][VoiceCallReport]','isNil','mohstarttime','[syncMusicOnHoldStart][VoiceCallReport]','[syncMusicOnHoldStop][VoiceCallReport]','exports','bluebird','lodash','moment','util','path','ioredis','../../../config/logger','../model/channel','unknown','inuse','busy','ringing','ringinuse','set','queue','agi','playback','NO\x20ANSWER','FAILED','BUSY','redis','defaults','localhost','channels','agents','coreshowchannel','syncNewExten','newexten','bind','newchannel','syncNewChannel','newstate','syncNewState','varset','syncVarSet','hangup','syncHangup','newcallerid','syncNewCallerId','attendedtransfer','syncAttendedTransfer','blindtransfer','syncBlindTransfer','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','resolve','actionCoreShowChannels','catch','log','prototype','isNotNull','isUndefined','emit','linkedid','uniqueid','merge','pick','keys','error','[syncNewCallerId][VoiceCallReport]','inspect','channel','OutgoingSpoolFailed','format','YYYY-MM-DD\x20HH:mm:ss','disposition','channelstate','context','from-sip','split','destconnectedlinenum','exten','user:%s','name','user:agentconnect','accountcode','[syncNewChannel][VoiceCallReport]','application','appdata','applicationdata','duration','subtract','seconds','includes','match','[syncNewExten][VoiceCallReport]','answered','answertime','starttime','holdtime','diff','calleridnum','xcally-motion-preview','connectedlinenum','destinationchannel','toNumber','membername','UserId','[syncNewState][VoiceCallReport]','syncMixMonitorFilename','monitor','endsWith','.wav49','replace','monitors','push','rec'];(function(_0x3fadfd,_0x3bf7e1){var _0x820f0d=function(_0x4e489c){while(--_0x4e489c){_0x3fadfd['push'](_0x3fadfd['shift']());}};_0x820f0d(++_0x3bf7e1);}(_0x1474,0x152));var _0x4147=function(_0x211a02,_0x3b5362){_0x211a02=_0x211a02-0x0;var _0x13d91c=_0x1474[_0x211a02];return _0x13d91c;};'use strict';var BPromise=require(_0x4147('0x0'));var _=require(_0x4147('0x1'));var moment=require(_0x4147('0x2'));var util=require(_0x4147('0x3'));var path=require(_0x4147('0x4'));var Redis=require(_0x4147('0x5'));var config=require('../../../config/environment');var logger=require(_0x4147('0x6'))('ami');var ami=require('../ami');var Channel=require(_0x4147('0x7'));var statusDesc=[_0x4147('0x8'),'not_inuse',_0x4147('0x9'),_0x4147('0xa'),'invalid','unavailable',_0x4147('0xb'),_0x4147('0xc'),'onhold'];var applications=[_0x4147('0xd'),_0x4147('0xe'),_0x4147('0xf'),'dial',_0x4147('0x10'),'voicemail'];var dispositions=[_0x4147('0x11'),_0x4147('0x12'),'FAILED',_0x4147('0x11'),_0x4147('0x11'),_0x4147('0x11'),'ANSWERED',_0x4147('0x13'),_0x4147('0x12'),_0x4147('0x12'),_0x4147('0x12')];var actions={};config[_0x4147('0x14')]=_[_0x4147('0x15')](config[_0x4147('0x14')],{'host':_0x4147('0x16'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x4147('0x14')]));function VoiceCallReport(_0x34fc08){this['channels']=_0x34fc08[_0x4147('0x17')];this['agents']=_0x34fc08[_0x4147('0x18')];ami['on'](_0x4147('0x19'),this[_0x4147('0x1a')]['bind'](this));ami['on'](_0x4147('0x1b'),this['syncNewExten'][_0x4147('0x1c')](this));ami['on'](_0x4147('0x1d'),this[_0x4147('0x1e')][_0x4147('0x1c')](this));ami['on'](_0x4147('0x1f'),this[_0x4147('0x20')]['bind'](this));ami['on'](_0x4147('0x21'),this[_0x4147('0x22')][_0x4147('0x1c')](this));ami['on'](_0x4147('0x23'),this[_0x4147('0x24')][_0x4147('0x1c')](this));ami['on'](_0x4147('0x25'),this[_0x4147('0x26')][_0x4147('0x1c')](this));ami['on'](_0x4147('0x27'),this[_0x4147('0x28')][_0x4147('0x1c')](this));ami['on'](_0x4147('0x29'),this[_0x4147('0x2a')][_0x4147('0x1c')](this));ami['on'](_0x4147('0x2b'),this[_0x4147('0x2c')][_0x4147('0x1c')](this));ami['on'](_0x4147('0x2d'),this[_0x4147('0x2e')][_0x4147('0x1c')](this));return BPromise[_0x4147('0x2f')]()['then'](ami[_0x4147('0x30')]())[_0x4147('0x31')](function(_0x4d21c6){console[_0x4147('0x32')](_0x4d21c6);});}VoiceCallReport[_0x4147('0x33')][_0x4147('0x34')]=function(_0xdafbe0){return _0xdafbe0!==null&&!_[_0x4147('0x35')](_0xdafbe0);};VoiceCallReport[_0x4147('0x33')][_0x4147('0x36')]=function(_0xf326f1,_0x6424b8,_0x104de7){io['to'](_0xf326f1)[_0x4147('0x36')](_0x6424b8,_0x104de7);};VoiceCallReport[_0x4147('0x33')]['syncNewCallerId']=function(_0x562ca8){try{if(this[_0x4147('0x34')](_0x562ca8)){if(_0x562ca8['uniqueid']===_0x562ca8[_0x4147('0x37')]){if(!_[_0x4147('0x35')](this[_0x4147('0x17')][_0x562ca8[_0x4147('0x38')]])){_[_0x4147('0x39')](this[_0x4147('0x17')][_0x562ca8[_0x4147('0x38')]],_[_0x4147('0x3a')](_0x562ca8,_[_0x4147('0x3b')](this['channels'][_0x562ca8[_0x4147('0x38')]])));}}}}catch(_0x228bb0){logger[_0x4147('0x3c')](_0x4147('0x3d'),util[_0x4147('0x3e')](_0x228bb0,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x4147('0x33')][_0x4147('0x1e')]=function(_0x157989){try{if(this[_0x4147('0x34')](_0x157989)){if(_0x157989[_0x4147('0x38')]===_0x157989[_0x4147('0x37')]&&_0x157989[_0x4147('0x3f')]!=_0x4147('0x40')){if(_[_0x4147('0x35')](this[_0x4147('0x17')][_0x157989[_0x4147('0x38')]])){this['channels'][_0x157989[_0x4147('0x38')]]=new Channel();this['channels'][_0x157989['uniqueid']]['starttime']=moment()[_0x4147('0x41')](_0x4147('0x42'));this[_0x4147('0x17')][_0x157989[_0x4147('0x38')]][_0x4147('0x43')]=dispositions[_['toNumber'](_0x157989[_0x4147('0x44')])];_[_0x4147('0x39')](this[_0x4147('0x17')][_0x157989[_0x4147('0x38')]],_[_0x4147('0x3a')](_0x157989,_[_0x4147('0x3b')](this[_0x4147('0x17')][_0x157989[_0x4147('0x38')]])));if(_0x157989[_0x4147('0x45')]===_0x4147('0x46')){if(this['agents'][_0x157989[_0x4147('0x3f')]['split']('-')[0x0]]){this[_0x4147('0x18')][_0x157989[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]][_0x4147('0x48')]=_0x157989[_0x4147('0x49')];this[_0x4147('0x36')](util['format'](_0x4147('0x4a'),this[_0x4147('0x18')][_0x157989['channel'][_0x4147('0x47')]('-')[0x0]][_0x4147('0x4b')]),_0x4147('0x4c'),{'destaccountcode':this['agents'][_0x157989[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]][_0x4147('0x4d')],'destconnectedlinenum':_0x157989['exten']});}}}}}}catch(_0xd664df){logger[_0x4147('0x3c')](_0x4147('0x4e'),util[_0x4147('0x3e')](_0xd664df,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x4147('0x33')]['syncNewExten']=function(_0x3d3aba){try{if(this[_0x4147('0x34')](_0x3d3aba)){if(_0x3d3aba[_0x4147('0x38')]===_0x3d3aba['linkedid']&&_0x3d3aba[_0x4147('0x49')]!='h'&&_0x3d3aba[_0x4147('0x3f')]!=_0x4147('0x40')){_0x3d3aba[_0x4147('0x4f')]=_0x3d3aba[_0x4147('0x4f')]['toLowerCase']();_0x3d3aba['applicationdata']=(_0x3d3aba[_0x4147('0x50')]||_0x3d3aba[_0x4147('0x51')])['toLowerCase']();if(_[_0x4147('0x35')](this[_0x4147('0x17')][_0x3d3aba[_0x4147('0x38')]])){this[_0x4147('0x17')][_0x3d3aba['uniqueid']]=new Channel();this['channels'][_0x3d3aba['uniqueid']]['starttime']=_0x3d3aba[_0x4147('0x52')]?moment()[_0x4147('0x53')](moment[_0x4147('0x52')](_0x3d3aba[_0x4147('0x52')])[_0x4147('0x54')](),_0x4147('0x54'))[_0x4147('0x41')](_0x4147('0x42')):moment()[_0x4147('0x41')](_0x4147('0x42'));this[_0x4147('0x17')][_0x3d3aba[_0x4147('0x38')]][_0x4147('0x43')]=_0x4147('0x11');}_[_0x4147('0x39')](this['channels'][_0x3d3aba[_0x4147('0x38')]],_[_0x4147('0x3a')](_0x3d3aba,_[_0x4147('0x3b')](this[_0x4147('0x17')][_0x3d3aba[_0x4147('0x38')]])));if(_[_0x4147('0x55')](applications,_0x3d3aba[_0x4147('0x4f')])){this[_0x4147('0x17')][_0x3d3aba[_0x4147('0x38')]]['lastapplication']=_0x3d3aba[_0x4147('0x4f')];this['channels'][_0x3d3aba[_0x4147('0x38')]]['lastdata']=_0x3d3aba['applicationdata'];if(_0x3d3aba[_0x4147('0x4f')]==='set'&&_['startsWith'](_0x3d3aba[_0x4147('0x51')],'cdr(')){var _0x44864f=_0x3d3aba['applicationdata']['split']('=');var _0x3c1e22=_0x44864f[0x0][_0x4147('0x56')](/cdr\((.*)\)/);if(_0x3c1e22){this[_0x4147('0x17')][_0x3d3aba[_0x4147('0x38')]][_0x3c1e22[0x1]]=_0x44864f[0x1];}}else if(_0x3d3aba[_0x4147('0x4f')]===_0x4147('0xe')){this[_0x4147('0x17')][_0x3d3aba['uniqueid']][_0x4147('0xe')]=_0x3d3aba[_0x4147('0x51')]['split'](',')[0x0];}}}}}catch(_0x20a3b7){logger[_0x4147('0x3c')](_0x4147('0x57'),util['inspect'](_0x20a3b7,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x4147('0x33')]['syncNewState']=function(_0x2810d4){try{if(this['isNotNull'](_0x2810d4)){if(_0x2810d4[_0x4147('0x38')]!==_0x2810d4[_0x4147('0x37')]){if(this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]]){if(_0x2810d4[_0x4147('0x44')]==='6'){if(!this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]][_0x4147('0x58')]){var _0x3241a4=moment();this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]]['answered']=!![];this[_0x4147('0x17')][_0x2810d4['linkedid']][_0x4147('0x59')]=_0x3241a4[_0x4147('0x41')](_0x4147('0x42'));if(this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]][_0x4147('0x5a')]){this['channels'][_0x2810d4['linkedid']][_0x4147('0x5b')]=_0x3241a4[_0x4147('0x5c')](this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]][_0x4147('0x5a')],_0x4147('0x54'));}}this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]][_0x4147('0x37')]=_0x2810d4[_0x4147('0x38')];if(_0x2810d4[_0x4147('0x5d')]!==_0x4147('0x5e')){this['channels'][_0x2810d4[_0x4147('0x37')]][_0x4147('0x5f')]=_0x2810d4[_0x4147('0x5d')];}this['channels'][_0x2810d4[_0x4147('0x37')]]['connectedlinename']=_0x2810d4['calleridname'];this['channels'][_0x2810d4['linkedid']][_0x4147('0x60')]=_0x2810d4[_0x4147('0x3f')];this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]][_0x4147('0x43')]=dispositions[_[_0x4147('0x61')](_0x2810d4[_0x4147('0x44')])];if(this[_0x4147('0x18')][_0x2810d4[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]]){this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]]['UserId']=this[_0x4147('0x18')][_0x2810d4[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]]['id'];this[_0x4147('0x17')][_0x2810d4[_0x4147('0x37')]][_0x4147('0x62')]=this[_0x4147('0x18')][_0x2810d4[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]][_0x4147('0x4b')];}}}}else{if(this[_0x4147('0x17')][_0x2810d4[_0x4147('0x38')]]){if(_0x2810d4[_0x4147('0x44')]==='6'){if(this[_0x4147('0x18')][_0x2810d4[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]]){this[_0x4147('0x17')][_0x2810d4[_0x4147('0x38')]][_0x4147('0x63')]=this[_0x4147('0x18')][_0x2810d4[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]]['id'];this[_0x4147('0x17')][_0x2810d4[_0x4147('0x38')]]['membername']=this[_0x4147('0x18')][_0x2810d4[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]][_0x4147('0x4b')];}}}}}}catch(_0x47a364){logger[_0x4147('0x3c')](_0x4147('0x64'),util['inspect'](_0x47a364,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x4147('0x33')][_0x4147('0x65')]=function(_0x2e4ef1,_0x2d8e7d){if(this[_0x4147('0x17')][_0x2e4ef1]){this[_0x4147('0x17')][_0x2e4ef1][_0x4147('0x66')]=!![];if(_[_0x4147('0x67')](_0x2d8e7d,_0x4147('0x68'))){_0x2d8e7d=_0x2d8e7d[_0x4147('0x69')](_0x4147('0x68'),'.WAV');}this['channels'][_0x2e4ef1]['monitorFilename']=_0x2d8e7d;var _0x30d1a5=_['find'](this['channels'][_0x2e4ef1][_0x4147('0x6a')],{'filename':_0x2d8e7d});if(_['isNil'](_0x30d1a5)){this[_0x4147('0x17')][_0x2e4ef1][_0x4147('0x6a')][_0x4147('0x6b')]({'filename':_0x2d8e7d,'createdAt':moment()[_0x4147('0x41')]('YYYY-MM-DD\x20HH:mm:ss'),'mixmonitorid':'','status':_0x4147('0x6c')});}}};VoiceCallReport[_0x4147('0x33')]['syncVarSet']=function(_0x520e41){try{if(this[_0x4147('0x34')](_0x520e41)){if(this['channels'][_0x520e41[_0x4147('0x38')]]&&_0x520e41['channel']!='OutgoingSpoolFailed'){if(this[_0x4147('0x34')](_0x520e41['variable'])){if(this['isNotNull'](_0x520e41[_0x4147('0x6d')][_0x4147('0x6e')])){this[_0x4147('0x65')](_0x520e41[_0x4147('0x38')],_0x520e41['value']);}else if(this[_0x4147('0x34')](_0x520e41[_0x4147('0x6d')][_0x4147('0x6f')])){this[_0x4147('0x17')][_0x520e41[_0x4147('0x38')]][_0x4147('0x5d')]=_0x520e41[_0x4147('0x70')];}else if(this['isNotNull'](_0x520e41['variable']['xmd-callerid'])){this['channels'][_0x520e41[_0x4147('0x38')]][_0x4147('0x71')]=_0x520e41[_0x4147('0x70')];}else if(this[_0x4147('0x34')](_0x520e41[_0x4147('0x6d')][_0x4147('0x72')])){this[_0x4147('0x17')][_0x520e41[_0x4147('0x38')]][_0x4147('0x73')]=_0x520e41[_0x4147('0x70')];}else if(this[_0x4147('0x34')](_0x520e41[_0x4147('0x6d')][_0x4147('0x74')])){this['channels'][_0x520e41[_0x4147('0x38')]]['queue']=_0x520e41[_0x4147('0x70')][_0x4147('0x47')](',')[0x0];}else if(this[_0x4147('0x34')](_0x520e41[_0x4147('0x6d')][_0x4147('0x75')])){this[_0x4147('0x17')][_0x520e41[_0x4147('0x38')]][_0x4147('0x76')]=_0x520e41['value'];}else if(this[_0x4147('0x34')](_0x520e41[_0x4147('0x6d')][_0x4147('0x77')])){this[_0x4147('0x17')][_0x520e41[_0x4147('0x38')]][_0x4147('0x78')]=_0x520e41['value'];}else if(this[_0x4147('0x34')](_0x520e41[_0x4147('0x6d')][_0x4147('0x79')])){this[_0x4147('0x17')][_0x520e41['uniqueid']][_0x4147('0x7a')]=_0x520e41[_0x4147('0x70')];}else if(this['isNotNull'](_0x520e41[_0x4147('0x6d')]['xmcs-queue'])){this[_0x4147('0x17')][_0x520e41[_0x4147('0x38')]][_0x4147('0xe')]=_0x520e41['value'];}else if(this[_0x4147('0x34')](_0x520e41[_0x4147('0x6d')][_0x4147('0x7b')])){this['channels'][_0x520e41['uniqueid']][_0x4147('0x7c')]=_0x520e41[_0x4147('0x70')];}}}else if(this[_0x4147('0x34')](_0x520e41[_0x4147('0x6d')][_0x4147('0x6e')])){if(_0x520e41[_0x4147('0x70')]){var _0x33f35f=path[_0x4147('0x7d')](_0x520e41[_0x4147('0x70')])[_0x4147('0x4b')];this[_0x4147('0x65')](_0x33f35f,_0x520e41[_0x4147('0x70')]);}}else if(this['channels'][_0x520e41[_0x4147('0x37')]]){if(this[_0x4147('0x34')](_0x520e41['variable'])){if(this['isNotNull'](_0x520e41[_0x4147('0x6d')]['sipcallid'])){this[_0x4147('0x17')][_0x520e41['linkedid']][_0x4147('0x7e')]=_0x520e41[_0x4147('0x70')];}}}}}catch(_0x42f7ec){logger[_0x4147('0x3c')](_0x4147('0x7f'),util['inspect'](_0x42f7ec,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype'][_0x4147('0x24')]=function(_0x241aaa){try{if(this['isNotNull'](_0x241aaa)){if(this['channels'][_0x241aaa[_0x4147('0x38')]]){var _0x1317a9=moment();this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]][_0x4147('0x80')]=_0x1317a9[_0x4147('0x41')](_0x4147('0x42'));this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]]['duration']=_0x1317a9[_0x4147('0x5c')](this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]][_0x4147('0x5a')],_0x4147('0x54'));if(this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]][_0x4147('0x58')]){this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]][_0x4147('0x81')]=_0x1317a9[_0x4147('0x5c')](this['channels'][_0x241aaa[_0x4147('0x38')]][_0x4147('0x59')],'seconds');this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]][_0x4147('0x5b')]=this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]][_0x4147('0x52')]-this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]]['billableseconds'];}if(_0x241aaa[_0x4147('0x45')]==='from-sip'){if(this[_0x4147('0x18')][_0x241aaa[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]]){this[_0x4147('0x18')][_0x241aaa[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]]=_[_0x4147('0x82')](this[_0x4147('0x18')][_0x241aaa[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]],[_0x4147('0x48')]);this['emit'](util['format']('user:%s',this[_0x4147('0x18')][_0x241aaa[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]]['name']),'user:agentcomplete',{'destaccountcode':this[_0x4147('0x18')][_0x241aaa[_0x4147('0x3f')][_0x4147('0x47')]('-')[0x0]]['accountcode']});}}ami[_0x4147('0x36')](_0x4147('0x83'),this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]]);delete this[_0x4147('0x17')][_0x241aaa[_0x4147('0x38')]];}}}catch(_0x17dcbc){logger[_0x4147('0x3c')](_0x4147('0x84'),util[_0x4147('0x3e')](_0x17dcbc,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x4147('0x33')][_0x4147('0x28')]=function(_0x33f563){try{if(this[_0x4147('0x34')](_0x33f563)){if(this['channels'][_0x33f563['transfereeuniqueid']]){this[_0x4147('0x17')][_0x33f563[_0x4147('0x85')]][_0x4147('0x86')]=_0x33f563[_0x4147('0x87')];this[_0x4147('0x17')][_0x33f563[_0x4147('0x85')]][_0x4147('0x88')]=_0x33f563[_0x4147('0x89')];if(this[_0x4147('0x17')][_0x33f563['secondtransfereruniqueid']]){var _0x1c4e17=this[_0x4147('0x17')][_0x33f563[_0x4147('0x8a')]];this[_0x4147('0x17')][_0x33f563['secondtransfereruniqueid']]=this[_0x4147('0x17')][_0x33f563[_0x4147('0x85')]];this['channels'][_0x33f563[_0x4147('0x85')]]=_0x1c4e17;}}else if(this[_0x4147('0x17')][_0x33f563['transfertargetuniqueid']]){this[_0x4147('0x17')][_0x33f563['transfertargetuniqueid']][_0x4147('0x86')]=_0x33f563[_0x4147('0x87')];this[_0x4147('0x17')][_0x33f563[_0x4147('0x8b')]]['transferconnectedlinenum']=_0x33f563[_0x4147('0x89')];if(this[_0x4147('0x17')][_0x33f563[_0x4147('0x8c')]]){var _0x1c4e17=this['channels'][_0x33f563[_0x4147('0x8c')]];this[_0x4147('0x17')][_0x33f563[_0x4147('0x8c')]]=this[_0x4147('0x17')][_0x33f563['transfertargetuniqueid']];this[_0x4147('0x17')][_0x33f563['transfertargetuniqueid']]=_0x1c4e17;}}}}catch(_0x4ed550){logger[_0x4147('0x3c')]('[syncAttendedTransfer][VoiceCallReport]',util[_0x4147('0x3e')](_0x4ed550,{'showHidden':![],'depth':null}));}};VoiceCallReport['prototype']['syncBlindTransfer']=function(_0x5ec84a){try{if(this[_0x4147('0x34')](_0x5ec84a)){if(this[_0x4147('0x17')][_0x5ec84a[_0x4147('0x85')]]){this[_0x4147('0x17')][_0x5ec84a[_0x4147('0x85')]][_0x4147('0x86')]=_0x5ec84a['transfereecalleridnum'];this[_0x4147('0x17')][_0x5ec84a[_0x4147('0x85')]][_0x4147('0x88')]=_0x5ec84a[_0x4147('0x8d')];this[_0x4147('0x24')]({'event':_0x4147('0x8e'),'uniqueid':_0x5ec84a[_0x4147('0x85')],'context':_0x5ec84a['context'],'channel':_0x5ec84a['transfererchannel']});}}}catch(_0x245bb9){logger[_0x4147('0x3c')](_0x4147('0x8f'),util['inspect'](_0x245bb9,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x4147('0x33')]['syncMusicOnHoldStart']=function(_0x466134){try{if(this[_0x4147('0x34')](_0x466134)){if(this[_0x4147('0x17')][_0x466134['uniqueid']]){if(!_[_0x4147('0x90')](this[_0x4147('0x17')][_0x466134[_0x4147('0x38')]][_0x4147('0x59')])){this['channels'][_0x466134[_0x4147('0x38')]][_0x4147('0x91')]=moment()[_0x4147('0x41')](_0x4147('0x42'));}}}}catch(_0x5effac){logger[_0x4147('0x3c')](_0x4147('0x92'),util['inspect'](_0x5effac,{'showHidden':![],'depth':null}));}};VoiceCallReport[_0x4147('0x33')]['syncMusicOnHoldStop']=function(_0x343ecc){try{if(this['isNotNull'](_0x343ecc)){if(this[_0x4147('0x17')][_0x343ecc[_0x4147('0x38')]]){if(!_[_0x4147('0x90')](this[_0x4147('0x17')][_0x343ecc[_0x4147('0x38')]][_0x4147('0x91')])){this['channels'][_0x343ecc['uniqueid']]['mohtime']+=moment()['milliseconds'](0x0)[_0x4147('0x5c')](this[_0x4147('0x17')][_0x343ecc[_0x4147('0x38')]][_0x4147('0x91')],_0x4147('0x54'));delete this[_0x4147('0x17')][_0x343ecc[_0x4147('0x38')]][_0x4147('0x91')];}}}}catch(_0x3f09b9){logger['error'](_0x4147('0x93'),util[_0x4147('0x3e')](_0x3f09b9,{'showHidden':![],'depth':null}));}};module[_0x4147('0x94')]=VoiceCallReport;
\ No newline at end of file
index f8fb515..aa0442f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68b3=['[syncDialBegin][VoiceDialReport]','dialstatus','connectedlinenum','connectedlinename','answertime','lastevent','connect','[syncDialEnd][VoiceDialReport]','inspect','keys','variable','outboundrouteid','value','[syncVarSet][VoiceDialReport]','addVariable','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberinterface','membername','memberrealtime','isNil','endtime','format','duration','diff','starttime','total','answered','seconds','billableseconds','sumHoldTime','holdtime','sumBillable','sumDuration','custom:voiceDialReport','custom:dialend','voice_outbound_channel:remove','[syncHangup][VoiceDialReport]','lodash','moment','util','ioredis','../../../config/environment','../../../config/logger','../ami','redis','outboundChannels','outbound','variables','dialbegin','syncDialBegin','bind','dialend','syncDialEnd','varset','syncVarSet','hangup','syncHangup','prototype','isNotNull','isUndefined','emit','uniqueid','merge','channels','YYYY-MM-DD\x20HH:mm:ss','channel','lastIndexOf','omit','voice:outbound','voice_outbound_channel:save','custom:dialbegin','error'];(function(_0xcde50a,_0x136caf){var _0x56d950=function(_0x489183){while(--_0x489183){_0xcde50a['push'](_0xcde50a['shift']());}};_0x56d950(++_0x136caf);}(_0x68b3,0x125));var _0x368b=function(_0x22ab4b,_0x10f8fb){_0x22ab4b=_0x22ab4b-0x0;var _0x146d37=_0x68b3[_0x22ab4b];return _0x146d37;};'use strict';var _=require(_0x368b('0x0'));var moment=require(_0x368b('0x1'));var util=require(_0x368b('0x2'));var Redis=require(_0x368b('0x3'));var config=require(_0x368b('0x4'));var logger=require(_0x368b('0x5'))('ami');var ami=require(_0x368b('0x6'));config[_0x368b('0x7')]=_['defaults'](config['redis'],{'host':'localhost','port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x368b('0x7')]));function VoiceDialReport(_0x180eda){this['channels']=_0x180eda[_0x368b('0x8')];this[_0x368b('0x9')]=_0x180eda[_0x368b('0x9')];this[_0x368b('0xa')]={};ami['on'](_0x368b('0xb'),this[_0x368b('0xc')][_0x368b('0xd')](this));ami['on'](_0x368b('0xe'),this[_0x368b('0xf')][_0x368b('0xd')](this));ami['on'](_0x368b('0x10'),this[_0x368b('0x11')]['bind'](this));ami['on'](_0x368b('0x12'),this[_0x368b('0x13')][_0x368b('0xd')](this));}VoiceDialReport[_0x368b('0x14')][_0x368b('0x15')]=function(_0x2bf15f){return _0x2bf15f!==null&&!_[_0x368b('0x16')](_0x2bf15f);};VoiceDialReport['prototype'][_0x368b('0x17')]=function(_0x11dc45,_0x300556,_0x555853){io['to'](_0x11dc45)[_0x368b('0x17')](_0x300556,_0x555853);};VoiceDialReport[_0x368b('0x14')][_0x368b('0xc')]=function(_0x23d014){try{if(this[_0x368b('0x15')](_0x23d014)){if(this['channels'][_0x23d014[_0x368b('0x18')]]){_[_0x368b('0x19')](this[_0x368b('0x1a')][_0x23d014[_0x368b('0x18')]],{'starttime':moment()['format'](_0x368b('0x1b')),'lastevent':'called','interface':_0x23d014[_0x368b('0x1c')]['substring'](0x0,_0x23d014[_0x368b('0x1c')][_0x368b('0x1d')]('-')),'membername':_0x23d014[_0x368b('0x1c')]['substring'](_0x23d014[_0x368b('0x1c')][_0x368b('0x1d')]('/')+0x1,_0x23d014[_0x368b('0x1c')][_0x368b('0x1d')]('-'))},_[_0x368b('0x1e')](_0x23d014,['event','privilege']));this[_0x368b('0x17')](_0x368b('0x1f'),_0x368b('0x20'),this[_0x368b('0x1a')][_0x23d014[_0x368b('0x18')]]);ami['emit'](_0x368b('0x21'),this[_0x368b('0x1a')][_0x23d014[_0x368b('0x18')]]);}}}catch(_0x2745cc){logger[_0x368b('0x22')](_0x368b('0x23'),util['inspect'](_0x2745cc,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x368b('0x14')][_0x368b('0xf')]=function(_0x970a73){try{if(this[_0x368b('0x15')](_0x970a73)){if(this['channels'][_0x970a73[_0x368b('0x18')]]){this['channels'][_0x970a73[_0x368b('0x18')]][_0x368b('0x24')]=_0x970a73[_0x368b('0x24')];if(_0x970a73[_0x368b('0x24')]==='ANSWER'){this[_0x368b('0x1a')][_0x970a73[_0x368b('0x18')]][_0x368b('0x25')]=_0x970a73['connectedlinenum'];this[_0x368b('0x1a')][_0x970a73[_0x368b('0x18')]][_0x368b('0x26')]=_0x970a73['connectedlinename'];this[_0x368b('0x1a')][_0x970a73[_0x368b('0x18')]][_0x368b('0x27')]=moment()['format'](_0x368b('0x1b'));this[_0x368b('0x1a')][_0x970a73[_0x368b('0x18')]][_0x368b('0x28')]=_0x368b('0x29');ami[_0x368b('0x17')]('custom:dialconnect',this['channels'][_0x970a73['uniqueid']]);}this[_0x368b('0x17')](_0x368b('0x1f'),_0x368b('0x20'),this['channels'][_0x970a73[_0x368b('0x18')]]);}}}catch(_0x538c73){logger[_0x368b('0x22')](_0x368b('0x2a'),util[_0x368b('0x2b')](_0x538c73,{'showHidden':![],'depth':null}));}};VoiceDialReport['prototype'][_0x368b('0x11')]=function(_0x5be897){try{if(this[_0x368b('0x15')](_0x5be897)){this['addVariable'](_0x5be897[_0x368b('0x18')],_[_0x368b('0x2c')](_0x5be897[_0x368b('0x2d')])[0x0],_0x5be897['value']);if(this[_0x368b('0x15')](_0x5be897['variable'])&&this['isNotNull'](_0x5be897[_0x368b('0x2d')][_0x368b('0x2e')])){if(_[_0x368b('0x16')](this[_0x368b('0x1a')][_0x5be897[_0x368b('0x18')]])){this[_0x368b('0x1a')][_0x5be897[_0x368b('0x18')]]={'routeId':_0x5be897[_0x368b('0x2f')],'variables':this['variables'][_0x5be897[_0x368b('0x18')]]};this[_0x368b('0x17')](_0x368b('0x1f'),_0x368b('0x20'),this[_0x368b('0x1a')][_0x5be897['uniqueid']]);}}}}catch(_0x34b6a){logger['error'](_0x368b('0x30'),util[_0x368b('0x2b')](_0x34b6a,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0x368b('0x14')][_0x368b('0x31')]=function(_0x4b1629,_0x1a7bdf,_0x28daa2){var _0x7d14a0=[_0x368b('0x32'),_0x368b('0x33'),'rtpaudioqosjitter','rtpaudioqosjitterbridged',_0x368b('0x34'),_0x368b('0x35'),'rtpaudioqosrtt',_0x368b('0x36'),_0x368b('0x37'),_0x368b('0x38'),_0x368b('0x39'),_0x368b('0x3a'),_0x368b('0x3b'),_0x368b('0x3c'),_0x368b('0x3d'),'memberlastcall',_0x368b('0x3e'),'memberpenalty',_0x368b('0x3f')];if(!_[_0x368b('0x40')](_0x1a7bdf)&&!_['includes'](_0x7d14a0,_0x1a7bdf)){if(_[_0x368b('0x16')](this[_0x368b('0xa')][_0x4b1629])){this[_0x368b('0xa')][_0x4b1629]={};}this[_0x368b('0xa')][_0x4b1629][_0x1a7bdf]=_0x28daa2;}};VoiceDialReport[_0x368b('0x14')][_0x368b('0x13')]=function(_0xd3e81a){try{if(this[_0x368b('0x15')](_0xd3e81a)){if(this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]]){this[_0x368b('0x1a')][_0xd3e81a['uniqueid']][_0x368b('0x41')]=moment()[_0x368b('0x42')](_0x368b('0x1b'));this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x43')]=moment(this[_0x368b('0x1a')][_0xd3e81a['uniqueid']][_0x368b('0x41')])[_0x368b('0x44')](this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x45')],'seconds');this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x28')]='complete';this[_0x368b('0x9')][_0x368b('0x46')]+=0x1;if(this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x27')]){this['outbound'][_0x368b('0x47')]+=0x1;this[_0x368b('0x1a')][_0xd3e81a['uniqueid']]['holdtime']=moment(this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x27')])['diff'](this['channels'][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x45')],_0x368b('0x48'));this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x49')]=moment(this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]]['endtime'])['diff'](this['channels'][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x27')],_0x368b('0x48'));this[_0x368b('0x9')][_0x368b('0x4a')]+=this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x4b')]||0x0;this['outbound'][_0x368b('0x4c')]+=this['channels'][_0xd3e81a[_0x368b('0x18')]][_0x368b('0x49')];}this[_0x368b('0x9')][_0x368b('0x4d')]+=this[_0x368b('0x1a')][_0xd3e81a['uniqueid']][_0x368b('0x43')];ami[_0x368b('0x17')](_0x368b('0x4e'),this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]]);ami[_0x368b('0x17')](_0x368b('0x4f'),this['channels'][_0xd3e81a[_0x368b('0x18')]]);this[_0x368b('0x17')](_0x368b('0x1f'),'voice_outbound:save',this[_0x368b('0x9')]);this[_0x368b('0x17')]('voice:outbound',_0x368b('0x50'),this['channels'][_0xd3e81a[_0x368b('0x18')]]);delete this[_0x368b('0x1a')][_0xd3e81a[_0x368b('0x18')]];}if(this[_0x368b('0xa')][_0xd3e81a[_0x368b('0x18')]]){delete this[_0x368b('0xa')][_0xd3e81a[_0x368b('0x18')]];}}}catch(_0x1ff23a){logger['error'](_0x368b('0x51'),util[_0x368b('0x2b')](_0x1ff23a,{'showHidden':![],'depth':null}));}};module['exports']=VoiceDialReport;
\ No newline at end of file
+var _0x4bed=['isUndefined','[syncVarSet][VoiceDialReport]','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrtt','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','membercalls','memberdynamic','memberinterface','memberlastcall','membername','memberpenalty','memberrealtime','isNil','endtime','starttime','complete','total','answertime','answered','holdtime','diff','seconds','sumHoldTime','sumBillable','billableseconds','sumDuration','duration','custom:voiceDialReport','custom:dialend','voice_outbound:save','voice_outbound_channel:remove','[syncHangup][VoiceDialReport]','lodash','util','ioredis','../../../config/environment','../../../config/logger','ami','../ami','defaults','redis','localhost','socket.io-emitter','channels','outbound','variables','dialbegin','bind','syncDialEnd','varset','hangup','syncHangup','prototype','isNotNull','emit','syncDialBegin','merge','uniqueid','format','YYYY-MM-DD\x20HH:mm:ss','called','channel','substring','lastIndexOf','omit','voice:outbound','voice_outbound_channel:save','custom:dialbegin','[syncDialBegin][VoiceDialReport]','inspect','dialstatus','ANSWER','connectedlinenum','connectedlinename','lastevent','custom:dialconnect','error','[syncDialEnd][VoiceDialReport]','addVariable','keys','variable','value','outboundrouteid'];(function(_0x21d364,_0x29cba0){var _0x1758f2=function(_0x920c18){while(--_0x920c18){_0x21d364['push'](_0x21d364['shift']());}};_0x1758f2(++_0x29cba0);}(_0x4bed,0x135));var _0xd4be=function(_0x2433a1,_0x33f666){_0x2433a1=_0x2433a1-0x0;var _0xa5615e=_0x4bed[_0x2433a1];return _0xa5615e;};'use strict';var _=require(_0xd4be('0x0'));var moment=require('moment');var util=require(_0xd4be('0x1'));var Redis=require(_0xd4be('0x2'));var config=require(_0xd4be('0x3'));var logger=require(_0xd4be('0x4'))(_0xd4be('0x5'));var ami=require(_0xd4be('0x6'));config['redis']=_[_0xd4be('0x7')](config[_0xd4be('0x8')],{'host':_0xd4be('0x9'),'port':0x18eb});var io=require(_0xd4be('0xa'))(new Redis(config[_0xd4be('0x8')]));function VoiceDialReport(_0x253e6e){this[_0xd4be('0xb')]=_0x253e6e['outboundChannels'];this[_0xd4be('0xc')]=_0x253e6e[_0xd4be('0xc')];this[_0xd4be('0xd')]={};ami['on'](_0xd4be('0xe'),this['syncDialBegin'][_0xd4be('0xf')](this));ami['on']('dialend',this[_0xd4be('0x10')]['bind'](this));ami['on'](_0xd4be('0x11'),this['syncVarSet'][_0xd4be('0xf')](this));ami['on'](_0xd4be('0x12'),this[_0xd4be('0x13')]['bind'](this));}VoiceDialReport[_0xd4be('0x14')][_0xd4be('0x15')]=function(_0x38dec7){return _0x38dec7!==null&&!_['isUndefined'](_0x38dec7);};VoiceDialReport['prototype'][_0xd4be('0x16')]=function(_0x4c6cae,_0x154d73,_0x9eb5db){io['to'](_0x4c6cae)[_0xd4be('0x16')](_0x154d73,_0x9eb5db);};VoiceDialReport[_0xd4be('0x14')][_0xd4be('0x17')]=function(_0x45df91){try{if(this[_0xd4be('0x15')](_0x45df91)){if(this[_0xd4be('0xb')][_0x45df91['uniqueid']]){_[_0xd4be('0x18')](this['channels'][_0x45df91[_0xd4be('0x19')]],{'starttime':moment()[_0xd4be('0x1a')](_0xd4be('0x1b')),'lastevent':_0xd4be('0x1c'),'interface':_0x45df91[_0xd4be('0x1d')][_0xd4be('0x1e')](0x0,_0x45df91[_0xd4be('0x1d')]['lastIndexOf']('-')),'membername':_0x45df91[_0xd4be('0x1d')][_0xd4be('0x1e')](_0x45df91['channel'][_0xd4be('0x1f')]('/')+0x1,_0x45df91[_0xd4be('0x1d')][_0xd4be('0x1f')]('-'))},_[_0xd4be('0x20')](_0x45df91,['event','privilege']));this[_0xd4be('0x16')](_0xd4be('0x21'),_0xd4be('0x22'),this[_0xd4be('0xb')][_0x45df91[_0xd4be('0x19')]]);ami[_0xd4be('0x16')](_0xd4be('0x23'),this[_0xd4be('0xb')][_0x45df91['uniqueid']]);}}}catch(_0x55f9a2){logger['error'](_0xd4be('0x24'),util[_0xd4be('0x25')](_0x55f9a2,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0xd4be('0x14')][_0xd4be('0x10')]=function(_0x33bb20){try{if(this['isNotNull'](_0x33bb20)){if(this[_0xd4be('0xb')][_0x33bb20[_0xd4be('0x19')]]){this[_0xd4be('0xb')][_0x33bb20['uniqueid']][_0xd4be('0x26')]=_0x33bb20[_0xd4be('0x26')];if(_0x33bb20[_0xd4be('0x26')]===_0xd4be('0x27')){this['channels'][_0x33bb20[_0xd4be('0x19')]]['connectedlinenum']=_0x33bb20[_0xd4be('0x28')];this[_0xd4be('0xb')][_0x33bb20['uniqueid']]['connectedlinename']=_0x33bb20[_0xd4be('0x29')];this[_0xd4be('0xb')][_0x33bb20[_0xd4be('0x19')]]['answertime']=moment()[_0xd4be('0x1a')](_0xd4be('0x1b'));this[_0xd4be('0xb')][_0x33bb20[_0xd4be('0x19')]][_0xd4be('0x2a')]='connect';ami[_0xd4be('0x16')](_0xd4be('0x2b'),this[_0xd4be('0xb')][_0x33bb20['uniqueid']]);}this[_0xd4be('0x16')](_0xd4be('0x21'),'voice_outbound_channel:save',this[_0xd4be('0xb')][_0x33bb20[_0xd4be('0x19')]]);}}}catch(_0x1469be){logger[_0xd4be('0x2c')](_0xd4be('0x2d'),util[_0xd4be('0x25')](_0x1469be,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0xd4be('0x14')]['syncVarSet']=function(_0x21d9d2){try{if(this[_0xd4be('0x15')](_0x21d9d2)){this[_0xd4be('0x2e')](_0x21d9d2[_0xd4be('0x19')],_[_0xd4be('0x2f')](_0x21d9d2[_0xd4be('0x30')])[0x0],_0x21d9d2[_0xd4be('0x31')]);if(this[_0xd4be('0x15')](_0x21d9d2['variable'])&&this['isNotNull'](_0x21d9d2[_0xd4be('0x30')][_0xd4be('0x32')])){if(_[_0xd4be('0x33')](this[_0xd4be('0xb')][_0x21d9d2['uniqueid']])){this[_0xd4be('0xb')][_0x21d9d2[_0xd4be('0x19')]]={'routeId':_0x21d9d2[_0xd4be('0x31')],'variables':this[_0xd4be('0xd')][_0x21d9d2[_0xd4be('0x19')]]};this[_0xd4be('0x16')](_0xd4be('0x21'),_0xd4be('0x22'),this['channels'][_0x21d9d2[_0xd4be('0x19')]]);}}}}catch(_0x5aeef5){logger[_0xd4be('0x2c')](_0xd4be('0x34'),util[_0xd4be('0x25')](_0x5aeef5,{'showHidden':![],'depth':null}));}};VoiceDialReport[_0xd4be('0x14')][_0xd4be('0x2e')]=function(_0x1cc6dc,_0x5687cd,_0x286d1e){var _0x174281=[_0xd4be('0x35'),_0xd4be('0x36'),_0xd4be('0x37'),'rtpaudioqosjitterbridged',_0xd4be('0x38'),_0xd4be('0x39'),_0xd4be('0x3a'),_0xd4be('0x3b'),_0xd4be('0x3c'),_0xd4be('0x3d'),_0xd4be('0x3e'),'bridgepvtcallid',_0xd4be('0x3f'),_0xd4be('0x40'),_0xd4be('0x41'),_0xd4be('0x42'),_0xd4be('0x43'),_0xd4be('0x44'),_0xd4be('0x45')];if(!_[_0xd4be('0x46')](_0x5687cd)&&!_['includes'](_0x174281,_0x5687cd)){if(_[_0xd4be('0x33')](this[_0xd4be('0xd')][_0x1cc6dc])){this[_0xd4be('0xd')][_0x1cc6dc]={};}this['variables'][_0x1cc6dc][_0x5687cd]=_0x286d1e;}};VoiceDialReport[_0xd4be('0x14')][_0xd4be('0x13')]=function(_0x514625){try{if(this[_0xd4be('0x15')](_0x514625)){if(this[_0xd4be('0xb')][_0x514625['uniqueid']]){this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]][_0xd4be('0x47')]=moment()[_0xd4be('0x1a')]('YYYY-MM-DD\x20HH:mm:ss');this[_0xd4be('0xb')][_0x514625['uniqueid']]['duration']=moment(this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]][_0xd4be('0x47')])['diff'](this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]][_0xd4be('0x48')],'seconds');this['channels'][_0x514625[_0xd4be('0x19')]][_0xd4be('0x2a')]=_0xd4be('0x49');this[_0xd4be('0xc')][_0xd4be('0x4a')]+=0x1;if(this['channels'][_0x514625['uniqueid']][_0xd4be('0x4b')]){this[_0xd4be('0xc')][_0xd4be('0x4c')]+=0x1;this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]][_0xd4be('0x4d')]=moment(this['channels'][_0x514625[_0xd4be('0x19')]]['answertime'])[_0xd4be('0x4e')](this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]]['starttime'],'seconds');this['channels'][_0x514625[_0xd4be('0x19')]]['billableseconds']=moment(this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]]['endtime'])[_0xd4be('0x4e')](this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]]['answertime'],_0xd4be('0x4f'));this['outbound'][_0xd4be('0x50')]+=this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]]['holdtime']||0x0;this[_0xd4be('0xc')][_0xd4be('0x51')]+=this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]][_0xd4be('0x52')];}this[_0xd4be('0xc')][_0xd4be('0x53')]+=this['channels'][_0x514625[_0xd4be('0x19')]][_0xd4be('0x54')];ami[_0xd4be('0x16')](_0xd4be('0x55'),this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]]);ami[_0xd4be('0x16')](_0xd4be('0x56'),this[_0xd4be('0xb')][_0x514625['uniqueid']]);this[_0xd4be('0x16')](_0xd4be('0x21'),_0xd4be('0x57'),this[_0xd4be('0xc')]);this[_0xd4be('0x16')](_0xd4be('0x21'),_0xd4be('0x58'),this[_0xd4be('0xb')][_0x514625[_0xd4be('0x19')]]);delete this['channels'][_0x514625[_0xd4be('0x19')]];}if(this['variables'][_0x514625[_0xd4be('0x19')]]){delete this[_0xd4be('0xd')][_0x514625['uniqueid']];}}}catch(_0x48d964){logger[_0xd4be('0x2c')](_0xd4be('0x59'),util[_0xd4be('0x25')](_0x48d964,{'showHidden':![],'depth':null}));}};module['exports']=VoiceDialReport;
\ No newline at end of file
index a92b95f..bebe6c0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfeda=['[syncMusicOnHoldStart][VoiceQueueReport]','[syncMusicOnHoldStop][VoiceQueueReport]','exports','lodash','moment','bluebird','util','md5','ioredis','../../../config/environment','ami','../ami','../model/queueReport','redis','localhost','socket.io-emitter','prototype','tail','queueReports','agents','channels','queueChannels','voiceQueues','campaigns','variables','queuesummary','syncQueueSummary','bind','queuesummarycomplete','queuecallerabandon','syncQueueCallerAbandon','queuecallerleave','syncQueueCallerLeave','syncAgentComplete','agentconnect','syncAgentConnect','syncVarSet','hangup','syncHangup','syncFullyBooted','musiconholdstart','syncMusicOnHoldStart','syncMusicOnHoldStop','attendedtransfer','blindtransfer','loopQueueSummary','isEmpty','hasOwnProperty','originated','pTalking','queueStatusComplete','unlockRR','clearZombieChannels','sequence','enqueue','isNil','Action','status','channel','catch','message','error','[voiceQueueReport][checkQueueReport]','[FullyBooted]\x20clear\x20realtime','clearQueueReport','emitVoiceQueueChannelRemove','emit','emitVoiceQueueChannelSave','name','voice_queue_channel:save','format','voice:queue:%s','voice_queue_channel:remove','emitVoiceQueueSummary','type','strategy','answered','available','loggedIn','sumDuration','sumHoldTime','talking','total','abandoned','waiting','Trunk','callerid','Interval','stringify','voice_queue:save','isUndefined','queues','[queues]','then','[queuesummary]','isNotNull','queue','countBy','callers','toNumber','loggedin','custom:queuesummary','[syncQueueSummary][VoiceQueueReport]','syncQueueSummaryComplete','flagQueueSummary','syncNewExten','syncQueueCallerJoin','uniqueid','inbound','queuecallerjoinAt','YYYY-MM-DD\x20HH:mm:ss','position','count','merge','pick','keys','[syncQueueCallerJoin][VoiceQueueReport]','inspect','last','queuecallercomplete','holdtime','originalposition','queuecallerabandonAt','ABANDONED','[syncQueueCallerAbandon][VoiceQueueReport]','queuecallerleaveAt','connectedlinenum','connectedlinename','queuecallerexitreason','COMPLETEDBYAGENT','[syncAgentConnect][VoiceQueueReport]','assigned','lastAssignedTo','membername','queuecallerexitAt','transfer','COMPLETED','toLowerCase','local/','linkedid','add','seconds','FORWARDTRANSFER','transfertype','transferexten','destexten','transferuniqueid','reason','[syncAgentComplete][VoiceQueueReport]','addVariable','value','variable','queuestatus','queuecallerexit','queueposition','EXITWITHKEY','[syncVarSet][VoiceQueueReport]','rtpaudioqos','rtpaudioqosjitter','rtpaudioqosjitterbridged','rtpaudioqosloss','rtpaudioqoslossbridged','rtpaudioqosrttbridged','sipcallid','bridgepvtcallid','membercalls','memberdynamic','memberpenalty','memberrealtime','includes','length','diff','milliseconds','sumBillable','lastevent','unmanaged','custom:queuecallerunmanaged','custom:queuecallerabandon','custom:voiceQueueReport','[syncHangup][VoiceQueueReport]','syncAttendedTransfer','transfereeuniqueid','secondtransfererexten','secondtransfereruniqueid','ATTENDEDTRANSFER','switch','transfertargetuniqueid','origtransfererexten','origtransfereruniqueid','ATTENDED','[syncAttendedTransfer][VoiceQueueReport]','syncBlindTransfer','BLINDTRANSFER','BLIND','BlindTransfer','context','transfererchannel','[syncBlindTransfer][VoiceQueueReport]','mohstarttime'];(function(_0x31a180,_0x3924b9){var _0x4b0502=function(_0x2e9ad6){while(--_0x2e9ad6){_0x31a180['push'](_0x31a180['shift']());}};_0x4b0502(++_0x3924b9);}(_0xfeda,0xca));var _0xafed=function(_0x5783f4,_0x4a9e0a){_0x5783f4=_0x5783f4-0x0;var _0x28e380=_0xfeda[_0x5783f4];return _0x28e380;};'use strict';var _=require(_0xafed('0x0'));var moment=require(_0xafed('0x1'));var BPromise=require(_0xafed('0x2'));var util=require(_0xafed('0x3'));var md5=require(_0xafed('0x4'));var Redis=require(_0xafed('0x5'));var config=require(_0xafed('0x6'));var logger=require('../../../config/logger')(_0xafed('0x7'));var ami=require(_0xafed('0x8'));var QueueReport=require(_0xafed('0x9'));config[_0xafed('0xa')]=_['defaults'](config[_0xafed('0xa')],{'host':_0xafed('0xb'),'port':0x18eb});var io=require(_0xafed('0xc'))(new Redis(config['redis']));var Sequence=function(){};Sequence[_0xafed('0xd')]['enqueue']=function(_0x10fea8){this['tail']=this['tail']?this[_0xafed('0xe')]['finally'](_0x10fea8):_0x10fea8();};function VoiceQueueReport(_0x9c7038){this['sequence']=new Sequence();this[_0xafed('0xf')]={};this[_0xafed('0x10')]=_0x9c7038['agents'];this[_0xafed('0x11')]=_0x9c7038[_0xafed('0x12')];this['voiceQueues']=_0x9c7038[_0xafed('0x13')];this['flagQueueSummary']=!![];this['campaigns']=_0x9c7038[_0xafed('0x14')];this[_0xafed('0x15')]={};ami['on'](_0xafed('0x16'),this[_0xafed('0x17')][_0xafed('0x18')](this));ami['on'](_0xafed('0x19'),this['syncQueueSummaryComplete'][_0xafed('0x18')](this));ami['on']('queuecallerjoin',this['syncQueueCallerJoin'][_0xafed('0x18')](this));ami['on'](_0xafed('0x1a'),this[_0xafed('0x1b')][_0xafed('0x18')](this));ami['on'](_0xafed('0x1c'),this[_0xafed('0x1d')]['bind'](this));ami['on']('agentcomplete',this[_0xafed('0x1e')][_0xafed('0x18')](this));ami['on'](_0xafed('0x1f'),this[_0xafed('0x20')]['bind'](this));ami['on']('varset',this[_0xafed('0x21')][_0xafed('0x18')](this));ami['on'](_0xafed('0x22'),this[_0xafed('0x23')]['bind'](this));ami['on']('fullybooted',this[_0xafed('0x24')][_0xafed('0x18')](this));ami['on'](_0xafed('0x25'),this[_0xafed('0x26')][_0xafed('0x18')](this));ami['on']('musiconholdstop',this[_0xafed('0x27')][_0xafed('0x18')](this));ami['on'](_0xafed('0x28'),this['syncAttendedTransfer'][_0xafed('0x18')](this));ami['on'](_0xafed('0x29'),this['syncBlindTransfer'][_0xafed('0x18')](this));this[_0xafed('0x2a')]();this['loopQueueShow']();}function isNotNull(_0x11b74f){return _0x11b74f!==null&&!_['isUndefined'](_0x11b74f);}function clearChannels(_0x9b6dde){if(!_[_0xafed('0x2b')](_0x9b6dde)){for(var _0x1f9c31 in _0x9b6dde){if(_0x9b6dde[_0xafed('0x2c')](_0x1f9c31)){delete _0x9b6dde[_0x1f9c31];}}}}function clearCampaigns(_0x25eb95){if(!_[_0xafed('0x2b')](_0x25eb95)){for(var _0x576ff1 in _0x25eb95){if(_0x25eb95[_0xafed('0x2c')](_0x576ff1)){_0x25eb95[_0x576ff1][_0xafed('0x2d')]=0x0;}}}}function clearVoiceQueues(_0x4018d5){if(!_[_0xafed('0x2b')](_0x4018d5)){for(var _0x1334bf in _0x4018d5){if(_0x4018d5[_0xafed('0x2c')](_0x1334bf)){_0x4018d5[_0x1334bf][_0xafed('0x2d')]=0x0;_0x4018d5[_0x1334bf]['talking']=0x0;_0x4018d5[_0x1334bf][_0xafed('0x2e')]=0x0;_0x4018d5[_0x1334bf]['waiting']=0x0;_0x4018d5[_0x1334bf][_0xafed('0x2f')]=!![];}}}}function clearAgentBooked(_0x465beb){if(!_[_0xafed('0x2b')](_0x465beb)){for(var _0x1d2fc6 in _0x465beb){if(_0x465beb[_0xafed('0x2c')](_0x1d2fc6)){_0x465beb[_0x1d2fc6][_0xafed('0x30')]=!![];}}}}VoiceQueueReport[_0xafed('0xd')][_0xafed('0x31')]=function(){var _0x16094f=this;for(var _0x22aa4e in this[_0xafed('0x11')]){if(this['channels'][_0xafed('0x2c')](_0x22aa4e)&&!this['channels'][_0x22aa4e]['switch']){this[_0xafed('0x32')][_0xafed('0x33')](function(){if(!_[_0xafed('0x34')](_0x16094f[_0xafed('0x11')][_0x22aa4e])){return ami[_0xafed('0x35')]({'action':_0xafed('0x36'),'channel':_0x16094f['channels'][_0x22aa4e][_0xafed('0x37')]})[_0xafed('0x38')](function(_0x3fa60e){if(_0x3fa60e[_0xafed('0x39')]==='No\x20such\x20channel'){setTimeout(function(){if(_0x16094f[_0xafed('0x11')][_0x22aa4e]){delete _0x16094f[_0xafed('0x11')][_0x22aa4e];logger[_0xafed('0x3a')]('[voiceQueueReport][checkChannel]',_0x22aa4e);}if(_0x16094f[_0xafed('0xf')][_0x22aa4e]){delete _0x16094f['queueReports'][_0x22aa4e];logger[_0xafed('0x3a')](_0xafed('0x3b'),_0x22aa4e);}if(_0x16094f[_0xafed('0x15')][_0x22aa4e]){delete _0x16094f['variables'][_0x22aa4e];logger[_0xafed('0x3a')]('[voiceQueueReport][checkVariables]',_0x22aa4e);}},0x1f40);}});}});}}};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x24')]=function(){logger[_0xafed('0x3a')](_0xafed('0x3c'));clearChannels(this['channels']);this['clearQueueReport'](this[_0xafed('0xf')]);clearAgentBooked(this[_0xafed('0x10')]);clearVoiceQueues(this[_0xafed('0x13')]);clearCampaigns(this[_0xafed('0x14')]);};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x3d')]=function(_0x35e5bd){var _0x54aea6=this;if(!_['isEmpty'](_0x35e5bd)){for(var _0x31c5e5 in _0x35e5bd){if(_0x35e5bd[_0xafed('0x2c')](_0x31c5e5)){_0x54aea6[_0xafed('0x3e')](_0x35e5bd[_0x31c5e5]);delete _0x35e5bd[_0x31c5e5];}}}};function loggerCatch(_0x3ea11e){return function(_0x4e7fa3){logger[_0xafed('0x3a')](_0x3ea11e,util['inspect'](_0x4e7fa3,{'showHidden':![],'depth':null}));};}VoiceQueueReport['prototype'][_0xafed('0x3f')]=function(_0x20fabd,_0x34342f,_0x263acb){io['to'](_0x20fabd)[_0xafed('0x3f')](_0x34342f,_0x263acb);};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x40')]=function(_0x2eb999){this[_0xafed('0x3f')](util['format']('voice:queue:%s',_0x2eb999[_0xafed('0x41')]),_0xafed('0x42'),_0x2eb999);};VoiceQueueReport['prototype'][_0xafed('0x3e')]=function(_0x57ec53){this[_0xafed('0x3f')](util[_0xafed('0x43')](_0xafed('0x44'),_0x57ec53['name']),_0xafed('0x45'),_0x57ec53);};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x46')]=function(_0x1d8f3d){if(_0x1d8f3d[_0xafed('0x47')]==='inbound'){var _0x240bb5={'id':_0x1d8f3d['id'],'name':_0x1d8f3d[_0xafed('0x41')],'strategy':_0x1d8f3d[_0xafed('0x48')],'answered':_0x1d8f3d[_0xafed('0x49')],'available':_0x1d8f3d[_0xafed('0x4a')],'loggedIn':_0x1d8f3d[_0xafed('0x4b')],'pTalking':_0x1d8f3d[_0xafed('0x2e')],'sumBillable':_0x1d8f3d['sumBillable'],'sumDuration':_0x1d8f3d[_0xafed('0x4c')],'sumHoldTime':_0x1d8f3d[_0xafed('0x4d')]||0x0,'talking':_0x1d8f3d[_0xafed('0x4e')],'total':_0x1d8f3d[_0xafed('0x4f')],'type':_0x1d8f3d['type'],'unmanaged':_0x1d8f3d['unmanaged'],'abandoned':_0x1d8f3d[_0xafed('0x50')],'waiting':_0x1d8f3d[_0xafed('0x51')]};if(_0x1d8f3d['Trunk']){_0x240bb5[_0xafed('0x52')]={'id':_0x1d8f3d[_0xafed('0x52')]['id'],'name':_0x1d8f3d[_0xafed('0x52')][_0xafed('0x41')],'active':_0x1d8f3d[_0xafed('0x52')]['active'],'callerid':_0x1d8f3d[_0xafed('0x52')][_0xafed('0x53')]};}if(_0x1d8f3d[_0xafed('0x54')]){_0x240bb5[_0xafed('0x54')]={'id':_0x1d8f3d[_0xafed('0x54')]['id'],'name':_0x1d8f3d[_0xafed('0x54')][_0xafed('0x41')]};}var _0x3cfaaa=md5(JSON[_0xafed('0x55')](_0x240bb5));if(_0x1d8f3d[_0xafed('0x4')]!==_0x3cfaaa){_0x1d8f3d[_0xafed('0x4')]=_0x3cfaaa;this[_0xafed('0x3f')](util[_0xafed('0x43')](_0xafed('0x44'),_0x240bb5[_0xafed('0x41')]),_0xafed('0x56'),_0x240bb5);}}};VoiceQueueReport['prototype']['isNotNull']=function(_0x4b3ce2){return _0x4b3ce2!==null&&!_[_0xafed('0x57')](_0x4b3ce2);};VoiceQueueReport[_0xafed('0xd')]['loopQueueShow']=function(){var _0x8dff87=this;setInterval(function(){_0x8dff87[_0xafed('0x31')]();ami[_0xafed('0x35')]({'action':_0xafed('0x58')})[_0xafed('0x38')](loggerCatch(_0xafed('0x59')));},0x2710);};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x2a')]=function(){var _0x2d079d=this;setInterval(function(){if(_0x2d079d['flagQueueSummary']){return ami[_0xafed('0x35')]({'action':_0xafed('0x16')})[_0xafed('0x5a')](function(_0x46d980){_0x2d079d['flagQueueSummary']=![];})['catch'](loggerCatch(_0xafed('0x5b')));}},0x3e8);};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x17')]=function(_0x3c1fd1){try{if(this[_0xafed('0x5c')](_0x3c1fd1)&&this['isNotNull'](_0x3c1fd1[_0xafed('0x5d')])){if(this[_0xafed('0x13')][_0x3c1fd1['queue']]){var _0x51f322=_[_0xafed('0x5e')](this[_0xafed('0x11')],_0xafed('0x5d'))[_0x3c1fd1[_0xafed('0x5d')]]||0x0;var _0x31933d=_0x51f322-_0x3c1fd1[_0xafed('0x5f')];if(this['voiceQueues'][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x51')]!==_['toNumber'](_0x3c1fd1['callers'])||this['voiceQueues'][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x4b')]!==_[_0xafed('0x60')](_0x3c1fd1['loggedin'])||this[_0xafed('0x13')][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x4a')]!==_[_0xafed('0x60')](_0x3c1fd1[_0xafed('0x4a')])||this['voiceQueues'][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x4e')]!==_0x31933d){this[_0xafed('0x13')][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x51')]=_[_0xafed('0x60')](_0x3c1fd1[_0xafed('0x5f')]);this[_0xafed('0x13')][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x4b')]=_[_0xafed('0x60')](_0x3c1fd1['loggedin']);this[_0xafed('0x13')][_0x3c1fd1[_0xafed('0x5d')]]['available']=_[_0xafed('0x60')](_0x3c1fd1[_0xafed('0x4a')]);this[_0xafed('0x13')][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x4e')]=_0x31933d>0x0?_0x31933d:0x0;this['voiceQueues'][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x4e')]=this['voiceQueues'][_0x3c1fd1['queue']][_0xafed('0x4e')]>_[_0xafed('0x60')](_0x3c1fd1[_0xafed('0x61')])?_[_0xafed('0x60')](_0x3c1fd1[_0xafed('0x61')]):this[_0xafed('0x13')][_0x3c1fd1[_0xafed('0x5d')]][_0xafed('0x4e')];this[_0xafed('0x46')](this[_0xafed('0x13')][_0x3c1fd1[_0xafed('0x5d')]]);}ami[_0xafed('0x3f')](_0xafed('0x62'),this['voiceQueues'][_0x3c1fd1['queue']]);}}}catch(_0x3032bb){logger['error'](_0xafed('0x63'),util['inspect'](_0x3032bb,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0xafed('0x64')]=function(_0x3aefe5){this[_0xafed('0x65')]=!![];};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x66')]=function(_0x557879){};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x67')]=function(_0x5076b1){try{if(this[_0xafed('0x5c')](_0x5076b1)){if(_[_0xafed('0x57')](this[_0xafed('0xf')][_0x5076b1[_0xafed('0x68')]])){this[_0xafed('0xf')][_0x5076b1['uniqueid']]=[];this['channels'][_0x5076b1[_0xafed('0x68')]]={};}var _0x2899d0=new QueueReport();_0x2899d0['name']=_0x5076b1[_0xafed('0x5d')];_0x2899d0['type']=this[_0xafed('0x13')][_0x2899d0[_0xafed('0x41')]]&&this[_0xafed('0x13')][_0x2899d0['name']][_0xafed('0x47')]?this[_0xafed('0x13')][_0x2899d0['name']][_0xafed('0x47')]||'inbound':_0xafed('0x69');_0x2899d0[_0xafed('0x5d')]=_0x5076b1[_0xafed('0x5d')];_0x2899d0[_0xafed('0x6a')]=moment()[_0xafed('0x43')](_0xafed('0x6b'));_0x2899d0[_0xafed('0x6c')]=_0x5076b1['position'];_0x2899d0[_0xafed('0x6d')]=_0x5076b1['count'];_[_0xafed('0x6e')](_0x2899d0,_[_0xafed('0x6f')](_0x5076b1,_[_0xafed('0x70')](_0x2899d0)));this[_0xafed('0xf')][_0x5076b1[_0xafed('0x68')]]['push'](_0x2899d0);this[_0xafed('0x11')][_0x5076b1[_0xafed('0x68')]]=_0x2899d0;this[_0xafed('0x40')](_0x2899d0);}}catch(_0x8b4b94){logger[_0xafed('0x3a')](_0xafed('0x71'),util[_0xafed('0x72')](_0x8b4b94,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x1b')]=function(_0x344846){try{if(this[_0xafed('0x5c')](_0x344846)){if(this['queueReports'][_0x344846[_0xafed('0x68')]]){var _0x335a9c=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x344846[_0xafed('0x68')]]);_0x335a9c[_0xafed('0x74')]=![];_0x335a9c['queuecallercompleteAt']=null;_0x335a9c[_0xafed('0x75')]=_0x344846[_0xafed('0x75')];_0x335a9c['originalposition']=_0x344846[_0xafed('0x76')];_0x335a9c[_0xafed('0x1a')]=!![];_0x335a9c[_0xafed('0x77')]=moment()[_0xafed('0x43')](_0xafed('0x6b'));_0x335a9c['queuecallerexitreason']=_0xafed('0x78');_0x335a9c['lastAssignedTo']=null;this['channels'][_0x344846['uniqueid']]=_0x335a9c;this[_0xafed('0x3e')](_0x335a9c);}}}catch(_0x298423){logger[_0xafed('0x3a')](_0xafed('0x79'),util[_0xafed('0x72')](_0x298423,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')]['syncQueueCallerLeave']=function(_0x11a7cd){try{if(this[_0xafed('0x5c')](_0x11a7cd)){if(this[_0xafed('0xf')][_0x11a7cd['uniqueid']]){var _0x15aede=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x11a7cd[_0xafed('0x68')]]);_0x15aede[_0xafed('0x7a')]=moment()['format']('YYYY-MM-DD\x20HH:mm:ss');_0x15aede[_0xafed('0x7b')]=_0x11a7cd[_0xafed('0x7b')];_0x15aede[_0xafed('0x7c')]=_0x11a7cd['connectedlinename'];this[_0xafed('0x11')][_0x11a7cd['uniqueid']]=_0x15aede;this[_0xafed('0x40')](_0x15aede);}}}catch(_0x4f015b){logger[_0xafed('0x3a')]('[syncQueueCallerLeave][VoiceQueueReport]',util[_0xafed('0x72')](_0x4f015b,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x20')]=function(_0x5be444){try{if(this[_0xafed('0x5c')](_0x5be444)){if(this[_0xafed('0xf')][_0x5be444[_0xafed('0x68')]]){var _0x29162e=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x5be444[_0xafed('0x68')]]);_0x29162e[_0xafed('0x74')]=!![];_0x29162e[_0xafed('0x7d')]=_0xafed('0x7e');}}}catch(_0x3269fe){logger[_0xafed('0x3a')](_0xafed('0x7f'),util['inspect'](_0x3269fe,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')]['syncAgentComplete']=function(_0xd52ff4){try{if(this[_0xafed('0x5c')](_0xd52ff4)){if(this[_0xafed('0xf')][_0xd52ff4[_0xafed('0x68')]]){var _0x15339a=_[_0xafed('0x73')](this[_0xafed('0xf')][_0xd52ff4[_0xafed('0x68')]]);_0x15339a[_0xafed('0x1a')]=![];_0x15339a[_0xafed('0x77')]=null;_0x15339a[_0xafed('0x80')]=!![];_0x15339a[_0xafed('0x81')]=_0xd52ff4[_0xafed('0x82')];_0x15339a[_0xafed('0x75')]=_0xd52ff4[_0xafed('0x75')];_0x15339a[_0xafed('0x74')]=!![];_0x15339a['queuecallerexit']=![];_0x15339a[_0xafed('0x83')]=null;if(!_0x15339a[_0xafed('0x84')]){if(_0xd52ff4['reason']==_0xafed('0x84')){_0x15339a[_0xafed('0x7d')]=_0xafed('0x85');}else{if(_['startsWith'](_0xd52ff4['channel'][_0xafed('0x86')](),_0xafed('0x87'))){if(this[_0xafed('0xf')][_0xd52ff4[_0xafed('0x88')]]){var _0x50ec2e=_['last'](this[_0xafed('0xf')][_0xd52ff4[_0xafed('0x88')]]);_0x50ec2e[_0xafed('0x74')]=![];_0x50ec2e['queuecallerexit']=!![];_0x50ec2e[_0xafed('0x83')]=moment(_0x15339a[_0xafed('0x6a')])[_0xafed('0x89')](_0xd52ff4[_0xafed('0x75')],_0xafed('0x8a'))[_0xafed('0x43')]('YYYY-MM-DD\x20HH:mm:ss');_0x50ec2e['queuecallerexitreason']=_0xafed('0x8b');_0x50ec2e[_0xafed('0x84')]=!![];_0x50ec2e[_0xafed('0x8c')]='FORWARD';_0x50ec2e[_0xafed('0x8d')]=_0xd52ff4[_0xafed('0x8e')];_0x50ec2e[_0xafed('0x8f')]=_0xd52ff4[_0xafed('0x68')];var _0x2112c2=this[_0xafed('0xf')][_0xd52ff4['linkedid']];this[_0xafed('0xf')][_0xd52ff4[_0xafed('0x88')]]=this[_0xafed('0xf')][_0xd52ff4[_0xafed('0x68')]];this[_0xafed('0xf')][_0xd52ff4[_0xafed('0x68')]]=_0x2112c2;}}else{_0x15339a['queuecallerexitreason']='COMPLETEDBY'+_0xd52ff4[_0xafed('0x90')]['toUpperCase']();}}}this[_0xafed('0x11')][_0xd52ff4[_0xafed('0x68')]]=_0x15339a;this[_0xafed('0x3e')](_0x15339a);}}}catch(_0x4d6585){logger[_0xafed('0x3a')](_0xafed('0x91'),util['inspect'](_0x4d6585,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x21')]=function(_0x44c580){try{if(this['isNotNull'](_0x44c580)){this[_0xafed('0x92')](_0x44c580[_0xafed('0x68')],_[_0xafed('0x70')](_0x44c580['variable'])[0x0],_0x44c580[_0xafed('0x93')]);if(this[_0xafed('0xf')][_0x44c580['uniqueid']]){var _0x567330=_['last'](this['queueReports'][_0x44c580['uniqueid']]);if(_0x567330){if(this['isNotNull'](_0x44c580[_0xafed('0x94')])&&this[_0xafed('0x5c')](_0x44c580[_0xafed('0x94')][_0xafed('0x95')])){switch(_0x44c580[_0xafed('0x93')]){case'CONTINUE':_0x567330[_0xafed('0x96')]=![];_0x567330[_0xafed('0x83')]=null;break;default:_0x567330[_0xafed('0x96')]=!![];_0x567330[_0xafed('0x83')]=moment()[_0xafed('0x43')]('YYYY-MM-DD\x20HH:mm:ss');_0x567330[_0xafed('0x7a')]=moment()[_0xafed('0x43')]('YYYY-MM-DD\x20HH:mm:ss');}_0x567330['queuecallerabandon']=![];_0x567330[_0xafed('0x77')]=null;_0x567330['queuecallerexitreason']=_0x44c580['value'];this['channels'][_0x44c580[_0xafed('0x68')]]=_0x567330;this['emitVoiceQueueChannelRemove'](_0x567330);}else if(this['isNotNull'](_0x44c580[_0xafed('0x94')])&&this[_0xafed('0x5c')](_0x44c580[_0xafed('0x94')][_0xafed('0x97')])){if(!_0x567330[_0xafed('0x1a')]){_0x567330[_0xafed('0x96')]=!![];_0x567330[_0xafed('0x83')]=moment()['format'](_0xafed('0x6b'));_0x567330[_0xafed('0x7d')]=_0xafed('0x98');_0x567330[_0xafed('0x7a')]=moment()[_0xafed('0x43')](_0xafed('0x6b'));this[_0xafed('0x11')][_0x44c580['uniqueid']]=_0x567330;}}_0x567330[_0xafed('0x15')]=this[_0xafed('0x15')][_0x44c580['uniqueid']];}}}}catch(_0x1561ec){logger[_0xafed('0x3a')](_0xafed('0x99'),util[_0xafed('0x72')](_0x1561ec,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')][_0xafed('0x92')]=function(_0x3194d8,_0x23623b,_0x16c025){var _0x7230a3=[_0xafed('0x9a'),'rtpaudioqosbridged',_0xafed('0x9b'),_0xafed('0x9c'),_0xafed('0x9d'),_0xafed('0x9e'),'rtpaudioqosrtt',_0xafed('0x9f'),_0xafed('0xa0'),'sipuri','bridgepeer',_0xafed('0xa1'),_0xafed('0xa2'),_0xafed('0xa3'),'memberinterface','memberlastcall','membername',_0xafed('0xa4'),_0xafed('0xa5')];if(!_['isNil'](_0x23623b)&&!_[_0xafed('0xa6')](_0x7230a3,_0x23623b)){if(_['isUndefined'](this[_0xafed('0x15')][_0x3194d8])){this[_0xafed('0x15')][_0x3194d8]={};}this[_0xafed('0x15')][_0x3194d8][_0x23623b]=_0x16c025;}};VoiceQueueReport[_0xafed('0xd')]['syncHangup']=function(_0x1ab6f9){try{if(this[_0xafed('0x5c')](_0x1ab6f9)){if(this[_0xafed('0xf')][_0x1ab6f9[_0xafed('0x68')]]){for(var _0x7d9d2d=0x0,_0x50f737={};_0x7d9d2d<this[_0xafed('0xf')][_0x1ab6f9[_0xafed('0x68')]][_0xafed('0xa7')];_0x7d9d2d+=0x1){_0x50f737=this[_0xafed('0xf')][_0x1ab6f9[_0xafed('0x68')]][_0x7d9d2d];if(this[_0xafed('0x13')][_0x50f737[_0xafed('0x5d')]]){if(_0x50f737[_0xafed('0x96')]){this[_0xafed('0x13')][_0x50f737['queue']]['unmanaged']+=0x1;}if(_0x50f737['queuecallerabandon']){this[_0xafed('0x13')][_0x50f737[_0xafed('0x5d')]]['abandoned']+=0x1;}this[_0xafed('0x13')][_0x50f737[_0xafed('0x5d')]][_0xafed('0x4d')]+=moment(_0x50f737[_0xafed('0x7a')])[_0xafed('0xa8')](_0x50f737[_0xafed('0x6a')],_0xafed('0x8a'))||0x0;if(_0x7d9d2d===this[_0xafed('0xf')][_0x1ab6f9[_0xafed('0x68')]][_0xafed('0xa7')]-0x1){this['voiceQueues'][_0x50f737['queue']][_0xafed('0x4c')]+=moment()[_0xafed('0xa9')](0x0)[_0xafed('0xa8')](_0x50f737[_0xafed('0x6a')],_0xafed('0x8a'));this['voiceQueues'][_0x50f737['queue']][_0xafed('0x4f')]+=0x1;if(_0x50f737[_0xafed('0x74')]){this[_0xafed('0x13')][_0x50f737[_0xafed('0x5d')]]['answered']+=0x1;this[_0xafed('0x13')][_0x50f737[_0xafed('0x5d')]][_0xafed('0xaa')]+=moment()[_0xafed('0xa9')](0x0)[_0xafed('0xa8')](_0x50f737['queuecallerleaveAt'],_0xafed('0x8a'));_0x50f737['queuecallercompleteAt']=moment()[_0xafed('0x43')]('YYYY-MM-DD\x20HH:mm:ss');_0x50f737[_0xafed('0x96')]=![];_0x50f737[_0xafed('0x83')]=null;}if(_0x50f737['queuecallerexit']){_0x50f737[_0xafed('0xab')]=_0xafed('0xac');ami[_0xafed('0x3f')](_0xafed('0xad'),_0x50f737);}if(_0x50f737[_0xafed('0x1a')]){_0x50f737[_0xafed('0xab')]=_0xafed('0x50');ami[_0xafed('0x3f')](_0xafed('0xae'),_0x50f737);}}else{this['voiceQueues'][_0x50f737[_0xafed('0x5d')]][_0xafed('0x4c')]+=this[_0xafed('0x13')][_0x50f737[_0xafed('0x5d')]][_0xafed('0x4d')];}this['channels'][_0x1ab6f9[_0xafed('0x68')]]=_0x50f737;this['emitVoiceQueueChannelRemove'](_0x50f737);this[_0xafed('0x46')](this[_0xafed('0x13')][_0x50f737[_0xafed('0x5d')]]);}}ami['emit'](_0xafed('0xaf'),this[_0xafed('0xf')][_0x1ab6f9[_0xafed('0x68')]]);delete this['queueReports'][_0x1ab6f9[_0xafed('0x68')]];delete this[_0xafed('0x11')][_0x1ab6f9[_0xafed('0x68')]];}if(this[_0xafed('0x15')][_0x1ab6f9[_0xafed('0x68')]]){delete this[_0xafed('0x15')][_0x1ab6f9[_0xafed('0x68')]];}}}catch(_0x5c762f){logger[_0xafed('0x3a')](_0xafed('0xb0'),util[_0xafed('0x72')](_0x5c762f,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')][_0xafed('0xb1')]=function(_0x15b16f){try{if(this[_0xafed('0x5c')](_0x15b16f)){var _0x492bdd;if(this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb2')]]){_0x492bdd=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb2')]]);_0x492bdd[_0xafed('0x8d')]=_0x15b16f[_0xafed('0xb3')];_0x492bdd['transferuniqueid']=_0x15b16f[_0xafed('0xb4')];_0x492bdd['queuecallerexitreason']=_0xafed('0xb5');_0x492bdd[_0xafed('0x84')]=!![];_0x492bdd[_0xafed('0x8c')]='ATTENDED';if(this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb4')]]){var _0x585fe5=this[_0xafed('0xf')][_0x15b16f['secondtransfereruniqueid']];this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb4')]]=this['queueReports'][_0x15b16f[_0xafed('0xb2')]];this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb2')]]=_0x585fe5;var _0x14e6e3=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb2')]]);_0x14e6e3[_0xafed('0xb6')]=!![];}}else if(this['queueReports'][_0x15b16f[_0xafed('0xb7')]]){_0x492bdd=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb7')]]);_0x492bdd[_0xafed('0x8d')]=_0x15b16f[_0xafed('0xb8')];_0x492bdd[_0xafed('0x8f')]=_0x15b16f[_0xafed('0xb9')];_0x492bdd[_0xafed('0x7d')]=_0xafed('0xb5');_0x492bdd['transfer']=!![];_0x492bdd[_0xafed('0x8c')]=_0xafed('0xba');if(this[_0xafed('0xf')][_0x15b16f['origtransfereruniqueid']]){var _0x585fe5=this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb9')]];this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb9')]]=this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb7')]];this[_0xafed('0xf')][_0x15b16f[_0xafed('0xb7')]]=_0x585fe5;var _0x14e6e3=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x15b16f['transfertargetuniqueid']]);_0x14e6e3[_0xafed('0xb6')]=!![];}}}}catch(_0x3e9285){logger[_0xafed('0x3a')](_0xafed('0xbb'),util[_0xafed('0x72')](_0x3e9285,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')][_0xafed('0xbc')]=function(_0x5136df){try{if(this[_0xafed('0x5c')](_0x5136df)){if(this[_0xafed('0xf')][_0x5136df[_0xafed('0xb2')]]){var _0x51f7cb=_['last'](this[_0xafed('0xf')][_0x5136df[_0xafed('0xb2')]]);_0x51f7cb['queuecallerexitreason']=_0xafed('0xbd');_0x51f7cb['transfer']=!![];_0x51f7cb['transfertype']=_0xafed('0xbe');_0x51f7cb[_0xafed('0x8d')]=_0x5136df['extension'];_0x51f7cb[_0xafed('0x8f')]=_0x5136df[_0xafed('0xb2')];this[_0xafed('0x23')]({'event':_0xafed('0xbf'),'uniqueid':_0x5136df['transfereeuniqueid'],'context':_0x5136df[_0xafed('0xc0')],'channel':_0x5136df[_0xafed('0xc1')]});}}}catch(_0x54d684){logger[_0xafed('0x3a')](_0xafed('0xc2'),util['inspect'](_0x54d684,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0xafed('0xd')]['syncMusicOnHoldStart']=function(_0x5e0e50){try{if(this[_0xafed('0x5c')](_0x5e0e50)){if(this[_0xafed('0xf')][_0x5e0e50[_0xafed('0x68')]]){var _0x179f9d=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x5e0e50[_0xafed('0x68')]]);if(!_[_0xafed('0x34')](_0x179f9d[_0xafed('0x7a')])){_0x179f9d[_0xafed('0xc3')]=moment()[_0xafed('0x43')]('YYYY-MM-DD\x20HH:mm:ss');}}}}catch(_0x1c573f){logger[_0xafed('0x3a')](_0xafed('0xc4'),util[_0xafed('0x72')](_0x1c573f,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0xafed('0x27')]=function(_0x51346e){try{if(this['isNotNull'](_0x51346e)){if(this['queueReports'][_0x51346e['uniqueid']]){var _0x5808e7=_[_0xafed('0x73')](this[_0xafed('0xf')][_0x51346e['uniqueid']]);if(!_[_0xafed('0x34')](_0x5808e7[_0xafed('0xc3')])){_0x5808e7['mohtime']+=moment()[_0xafed('0xa9')](0x0)[_0xafed('0xa8')](_0x5808e7['mohstarttime'],'seconds');delete _0x5808e7[_0xafed('0xc3')];}}}}catch(_0x46e324){logger[_0xafed('0x3a')](_0xafed('0xc5'),util['inspect'](_0x46e324,{'showHidden':![],'depth':null}));}};module[_0xafed('0xc6')]=VoiceQueueReport;
\ No newline at end of file
+var _0x3686=['emit','emitVoiceQueueChannelSave','format','voice:queue:%s','name','voice_queue_channel:save','voice_queue_channel:remove','emitVoiceQueueSummary','type','inbound','strategy','available','loggedIn','pTalking','sumBillable','sumHoldTime','total','abandoned','Trunk','callerid','Interval','stringify','isNotNull','queues','[queues]','[queuesummary]','syncQueueSummary','queue','countBy','callers','toNumber','loggedin','custom:queuesummary','[syncQueueSummary][VoiceQueueReport]','uniqueid','queuecallerjoinAt','YYYY-MM-DD\x20HH:mm:ss','position','count','merge','pick','keys','push','[syncQueueCallerJoin][VoiceQueueReport]','queuecallercomplete','queuecallercompleteAt','holdtime','originalposition','queuecallerabandonAt','queuecallerexitreason','ABANDONED','last','connectedlinenum','connectedlinename','[syncQueueCallerLeave][VoiceQueueReport]','syncAgentConnect','COMPLETEDBYAGENT','[syncAgentConnect][VoiceQueueReport]','queuecallerabandon','assigned','membername','queuecallerexitAt','transfer','reason','COMPLETED','startsWith','toLowerCase','local/','linkedid','add','seconds','FORWARDTRANSFER','transferuniqueid','COMPLETEDBY','toUpperCase','[syncAgentComplete][VoiceQueueReport]','addVariable','variable','value','queuestatus','queuecallerexit','queuecallerleaveAt','EXITWITHKEY','[syncVarSet][VoiceQueueReport]','rtpaudioqos','rtpaudioqosbridged','rtpaudioqosjitter','rtpaudioqoslossbridged','rtpaudioqosrttbridged','sipcallid','sipuri','bridgepeer','bridgepvtcallid','membercalls','memberdynamic','memberlastcall','memberrealtime','length','unmanaged','diff','sumDuration','milliseconds','lastevent','custom:queuecallerunmanaged','custom:queuecallerabandon','custom:voiceQueueReport','[syncHangup][VoiceQueueReport]','syncAttendedTransfer','transfereeuniqueid','transferexten','secondtransfererexten','secondtransfereruniqueid','ATTENDEDTRANSFER','transfertype','ATTENDED','transfertargetuniqueid','origtransfererexten','origtransfereruniqueid','[syncAttendedTransfer][VoiceQueueReport]','BLINDTRANSFER','BLIND','extension','context','[syncBlindTransfer][VoiceQueueReport]','mohstarttime','[syncMusicOnHoldStart][VoiceQueueReport]','mohtime','[syncMusicOnHoldStop][VoiceQueueReport]','exports','moment','bluebird','util','md5','ioredis','../../../config/logger','../ami','../model/queueReport','redis','defaults','socket.io-emitter','prototype','enqueue','tail','finally','sequence','agents','channels','queueChannels','flagQueueSummary','campaigns','variables','queuesummary','queuesummarycomplete','syncQueueSummaryComplete','bind','queuecallerjoin','syncQueueCallerJoin','queuecallerleave','syncQueueCallerLeave','agentcomplete','agentconnect','varset','syncVarSet','hangup','syncHangup','fullybooted','syncFullyBooted','musiconholdstart','syncMusicOnHoldStart','musiconholdstop','syncMusicOnHoldStop','attendedtransfer','blindtransfer','syncBlindTransfer','loopQueueSummary','loopQueueShow','isUndefined','isEmpty','hasOwnProperty','originated','talking','waiting','queueStatusComplete','unlockRR','clearZombieChannels','switch','isNil','Action','channel','catch','message','No\x20such\x20channel','error','[voiceQueueReport][checkChannel]','queueReports','[voiceQueueReport][checkQueueReport]','[voiceQueueReport][checkVariables]','[FullyBooted]\x20clear\x20realtime','clearQueueReport','voiceQueues','emitVoiceQueueChannelRemove','inspect'];(function(_0x39e379,_0x19b1a6){var _0x2b8c98=function(_0x33401f){while(--_0x33401f){_0x39e379['push'](_0x39e379['shift']());}};_0x2b8c98(++_0x19b1a6);}(_0x3686,0x14b));var _0x6368=function(_0x3b2c91,_0x353ef4){_0x3b2c91=_0x3b2c91-0x0;var _0x615c40=_0x3686[_0x3b2c91];return _0x615c40;};'use strict';var _=require('lodash');var moment=require(_0x6368('0x0'));var BPromise=require(_0x6368('0x1'));var util=require(_0x6368('0x2'));var md5=require(_0x6368('0x3'));var Redis=require(_0x6368('0x4'));var config=require('../../../config/environment');var logger=require(_0x6368('0x5'))('ami');var ami=require(_0x6368('0x6'));var QueueReport=require(_0x6368('0x7'));config[_0x6368('0x8')]=_[_0x6368('0x9')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x6368('0xa'))(new Redis(config['redis']));var Sequence=function(){};Sequence[_0x6368('0xb')][_0x6368('0xc')]=function(_0x12f2a7){this[_0x6368('0xd')]=this[_0x6368('0xd')]?this[_0x6368('0xd')][_0x6368('0xe')](_0x12f2a7):_0x12f2a7();};function VoiceQueueReport(_0x5374d6){this[_0x6368('0xf')]=new Sequence();this['queueReports']={};this[_0x6368('0x10')]=_0x5374d6[_0x6368('0x10')];this[_0x6368('0x11')]=_0x5374d6[_0x6368('0x12')];this['voiceQueues']=_0x5374d6['voiceQueues'];this[_0x6368('0x13')]=!![];this[_0x6368('0x14')]=_0x5374d6['campaigns'];this[_0x6368('0x15')]={};ami['on'](_0x6368('0x16'),this['syncQueueSummary']['bind'](this));ami['on'](_0x6368('0x17'),this[_0x6368('0x18')][_0x6368('0x19')](this));ami['on'](_0x6368('0x1a'),this[_0x6368('0x1b')][_0x6368('0x19')](this));ami['on']('queuecallerabandon',this['syncQueueCallerAbandon'][_0x6368('0x19')](this));ami['on'](_0x6368('0x1c'),this[_0x6368('0x1d')]['bind'](this));ami['on'](_0x6368('0x1e'),this['syncAgentComplete'][_0x6368('0x19')](this));ami['on'](_0x6368('0x1f'),this['syncAgentConnect'][_0x6368('0x19')](this));ami['on'](_0x6368('0x20'),this[_0x6368('0x21')]['bind'](this));ami['on'](_0x6368('0x22'),this[_0x6368('0x23')][_0x6368('0x19')](this));ami['on'](_0x6368('0x24'),this[_0x6368('0x25')][_0x6368('0x19')](this));ami['on'](_0x6368('0x26'),this[_0x6368('0x27')][_0x6368('0x19')](this));ami['on'](_0x6368('0x28'),this[_0x6368('0x29')][_0x6368('0x19')](this));ami['on'](_0x6368('0x2a'),this['syncAttendedTransfer'][_0x6368('0x19')](this));ami['on'](_0x6368('0x2b'),this[_0x6368('0x2c')][_0x6368('0x19')](this));this[_0x6368('0x2d')]();this[_0x6368('0x2e')]();}function isNotNull(_0x244a4e){return _0x244a4e!==null&&!_[_0x6368('0x2f')](_0x244a4e);}function clearChannels(_0x20f3e3){if(!_[_0x6368('0x30')](_0x20f3e3)){for(var _0x5c8a3f in _0x20f3e3){if(_0x20f3e3[_0x6368('0x31')](_0x5c8a3f)){delete _0x20f3e3[_0x5c8a3f];}}}}function clearCampaigns(_0x526ae6){if(!_['isEmpty'](_0x526ae6)){for(var _0x278e5b in _0x526ae6){if(_0x526ae6[_0x6368('0x31')](_0x278e5b)){_0x526ae6[_0x278e5b][_0x6368('0x32')]=0x0;}}}}function clearVoiceQueues(_0x20b667){if(!_[_0x6368('0x30')](_0x20b667)){for(var _0x62541e in _0x20b667){if(_0x20b667[_0x6368('0x31')](_0x62541e)){_0x20b667[_0x62541e]['originated']=0x0;_0x20b667[_0x62541e][_0x6368('0x33')]=0x0;_0x20b667[_0x62541e]['pTalking']=0x0;_0x20b667[_0x62541e][_0x6368('0x34')]=0x0;_0x20b667[_0x62541e][_0x6368('0x35')]=!![];}}}}function clearAgentBooked(_0x28c85f){if(!_[_0x6368('0x30')](_0x28c85f)){for(var _0x5353b6 in _0x28c85f){if(_0x28c85f[_0x6368('0x31')](_0x5353b6)){_0x28c85f[_0x5353b6][_0x6368('0x36')]=!![];}}}}VoiceQueueReport[_0x6368('0xb')][_0x6368('0x37')]=function(){var _0x5543ba=this;for(var _0x304113 in this[_0x6368('0x11')]){if(this['channels'][_0x6368('0x31')](_0x304113)&&!this[_0x6368('0x11')][_0x304113][_0x6368('0x38')]){this[_0x6368('0xf')][_0x6368('0xc')](function(){if(!_[_0x6368('0x39')](_0x5543ba[_0x6368('0x11')][_0x304113])){return ami[_0x6368('0x3a')]({'action':'status','channel':_0x5543ba[_0x6368('0x11')][_0x304113][_0x6368('0x3b')]})[_0x6368('0x3c')](function(_0x31b32d){if(_0x31b32d[_0x6368('0x3d')]===_0x6368('0x3e')){setTimeout(function(){if(_0x5543ba[_0x6368('0x11')][_0x304113]){delete _0x5543ba[_0x6368('0x11')][_0x304113];logger[_0x6368('0x3f')](_0x6368('0x40'),_0x304113);}if(_0x5543ba[_0x6368('0x41')][_0x304113]){delete _0x5543ba[_0x6368('0x41')][_0x304113];logger[_0x6368('0x3f')](_0x6368('0x42'),_0x304113);}if(_0x5543ba[_0x6368('0x15')][_0x304113]){delete _0x5543ba[_0x6368('0x15')][_0x304113];logger[_0x6368('0x3f')](_0x6368('0x43'),_0x304113);}},0x1f40);}});}});}}};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x25')]=function(){logger['error'](_0x6368('0x44'));clearChannels(this['channels']);this[_0x6368('0x45')](this[_0x6368('0x41')]);clearAgentBooked(this[_0x6368('0x10')]);clearVoiceQueues(this[_0x6368('0x46')]);clearCampaigns(this[_0x6368('0x14')]);};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x45')]=function(_0x2e5d65){var _0x3a2e33=this;if(!_[_0x6368('0x30')](_0x2e5d65)){for(var _0x286564 in _0x2e5d65){if(_0x2e5d65[_0x6368('0x31')](_0x286564)){_0x3a2e33[_0x6368('0x47')](_0x2e5d65[_0x286564]);delete _0x2e5d65[_0x286564];}}}};function loggerCatch(_0x4fb985){return function(_0x577dc7){logger[_0x6368('0x3f')](_0x4fb985,util[_0x6368('0x48')](_0x577dc7,{'showHidden':![],'depth':null}));};}VoiceQueueReport[_0x6368('0xb')][_0x6368('0x49')]=function(_0x448aaa,_0xccd50d,_0x480356){io['to'](_0x448aaa)['emit'](_0xccd50d,_0x480356);};VoiceQueueReport['prototype'][_0x6368('0x4a')]=function(_0xe896e1){this[_0x6368('0x49')](util[_0x6368('0x4b')](_0x6368('0x4c'),_0xe896e1[_0x6368('0x4d')]),_0x6368('0x4e'),_0xe896e1);};VoiceQueueReport[_0x6368('0xb')]['emitVoiceQueueChannelRemove']=function(_0x275ec3){this[_0x6368('0x49')](util[_0x6368('0x4b')](_0x6368('0x4c'),_0x275ec3[_0x6368('0x4d')]),_0x6368('0x4f'),_0x275ec3);};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x50')]=function(_0x52f32a){if(_0x52f32a[_0x6368('0x51')]===_0x6368('0x52')){var _0x4ea2d2={'id':_0x52f32a['id'],'name':_0x52f32a[_0x6368('0x4d')],'strategy':_0x52f32a[_0x6368('0x53')],'answered':_0x52f32a['answered'],'available':_0x52f32a[_0x6368('0x54')],'loggedIn':_0x52f32a[_0x6368('0x55')],'pTalking':_0x52f32a[_0x6368('0x56')],'sumBillable':_0x52f32a[_0x6368('0x57')],'sumDuration':_0x52f32a['sumDuration'],'sumHoldTime':_0x52f32a[_0x6368('0x58')]||0x0,'talking':_0x52f32a[_0x6368('0x33')],'total':_0x52f32a[_0x6368('0x59')],'type':_0x52f32a['type'],'unmanaged':_0x52f32a['unmanaged'],'abandoned':_0x52f32a[_0x6368('0x5a')],'waiting':_0x52f32a[_0x6368('0x34')]};if(_0x52f32a['Trunk']){_0x4ea2d2['Trunk']={'id':_0x52f32a['Trunk']['id'],'name':_0x52f32a[_0x6368('0x5b')][_0x6368('0x4d')],'active':_0x52f32a['Trunk']['active'],'callerid':_0x52f32a['Trunk'][_0x6368('0x5c')]};}if(_0x52f32a[_0x6368('0x5d')]){_0x4ea2d2[_0x6368('0x5d')]={'id':_0x52f32a[_0x6368('0x5d')]['id'],'name':_0x52f32a[_0x6368('0x5d')][_0x6368('0x4d')]};}var _0xf7629e=md5(JSON[_0x6368('0x5e')](_0x4ea2d2));if(_0x52f32a[_0x6368('0x3')]!==_0xf7629e){_0x52f32a[_0x6368('0x3')]=_0xf7629e;this[_0x6368('0x49')](util[_0x6368('0x4b')](_0x6368('0x4c'),_0x4ea2d2[_0x6368('0x4d')]),'voice_queue:save',_0x4ea2d2);}}};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x5f')]=function(_0x20458e){return _0x20458e!==null&&!_['isUndefined'](_0x20458e);};VoiceQueueReport[_0x6368('0xb')]['loopQueueShow']=function(){var _0x549107=this;setInterval(function(){_0x549107[_0x6368('0x37')]();ami[_0x6368('0x3a')]({'action':_0x6368('0x60')})[_0x6368('0x3c')](loggerCatch(_0x6368('0x61')));},0x2710);};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x2d')]=function(){var _0x3ec922=this;setInterval(function(){if(_0x3ec922[_0x6368('0x13')]){return ami['Action']({'action':_0x6368('0x16')})['then'](function(_0x5d252b){_0x3ec922[_0x6368('0x13')]=![];})[_0x6368('0x3c')](loggerCatch(_0x6368('0x62')));}},0x3e8);};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x63')]=function(_0x1d0b89){try{if(this['isNotNull'](_0x1d0b89)&&this[_0x6368('0x5f')](_0x1d0b89[_0x6368('0x64')])){if(this['voiceQueues'][_0x1d0b89[_0x6368('0x64')]]){var _0xe1ae51=_[_0x6368('0x65')](this[_0x6368('0x11')],_0x6368('0x64'))[_0x1d0b89[_0x6368('0x64')]]||0x0;var _0x15762a=_0xe1ae51-_0x1d0b89[_0x6368('0x66')];if(this[_0x6368('0x46')][_0x1d0b89['queue']][_0x6368('0x34')]!==_[_0x6368('0x67')](_0x1d0b89[_0x6368('0x66')])||this['voiceQueues'][_0x1d0b89[_0x6368('0x64')]]['loggedIn']!==_['toNumber'](_0x1d0b89['loggedin'])||this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]][_0x6368('0x54')]!==_['toNumber'](_0x1d0b89[_0x6368('0x54')])||this['voiceQueues'][_0x1d0b89[_0x6368('0x64')]][_0x6368('0x33')]!==_0x15762a){this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]][_0x6368('0x34')]=_[_0x6368('0x67')](_0x1d0b89[_0x6368('0x66')]);this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]][_0x6368('0x55')]=_['toNumber'](_0x1d0b89[_0x6368('0x68')]);this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]][_0x6368('0x54')]=_[_0x6368('0x67')](_0x1d0b89[_0x6368('0x54')]);this[_0x6368('0x46')][_0x1d0b89['queue']]['talking']=_0x15762a>0x0?_0x15762a:0x0;this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]][_0x6368('0x33')]=this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]][_0x6368('0x33')]>_[_0x6368('0x67')](_0x1d0b89[_0x6368('0x68')])?_['toNumber'](_0x1d0b89[_0x6368('0x68')]):this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]]['talking'];this['emitVoiceQueueSummary'](this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]]);}ami[_0x6368('0x49')](_0x6368('0x69'),this[_0x6368('0x46')][_0x1d0b89[_0x6368('0x64')]]);}}}catch(_0x4aedfe){logger[_0x6368('0x3f')](_0x6368('0x6a'),util[_0x6368('0x48')](_0x4aedfe,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype']['syncQueueSummaryComplete']=function(_0x2711ab){this[_0x6368('0x13')]=!![];};VoiceQueueReport[_0x6368('0xb')]['syncNewExten']=function(_0x42238a){};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x1b')]=function(_0x5599e5){try{if(this[_0x6368('0x5f')](_0x5599e5)){if(_[_0x6368('0x2f')](this['queueReports'][_0x5599e5[_0x6368('0x6b')]])){this[_0x6368('0x41')][_0x5599e5[_0x6368('0x6b')]]=[];this[_0x6368('0x11')][_0x5599e5[_0x6368('0x6b')]]={};}var _0x47c62c=new QueueReport();_0x47c62c['name']=_0x5599e5[_0x6368('0x64')];_0x47c62c['type']=this[_0x6368('0x46')][_0x47c62c[_0x6368('0x4d')]]&&this['voiceQueues'][_0x47c62c['name']][_0x6368('0x51')]?this[_0x6368('0x46')][_0x47c62c['name']]['type']||_0x6368('0x52'):_0x6368('0x52');_0x47c62c[_0x6368('0x64')]=_0x5599e5[_0x6368('0x64')];_0x47c62c[_0x6368('0x6c')]=moment()[_0x6368('0x4b')](_0x6368('0x6d'));_0x47c62c[_0x6368('0x6e')]=_0x5599e5[_0x6368('0x6e')];_0x47c62c[_0x6368('0x6f')]=_0x5599e5['count'];_[_0x6368('0x70')](_0x47c62c,_[_0x6368('0x71')](_0x5599e5,_[_0x6368('0x72')](_0x47c62c)));this[_0x6368('0x41')][_0x5599e5[_0x6368('0x6b')]][_0x6368('0x73')](_0x47c62c);this['channels'][_0x5599e5[_0x6368('0x6b')]]=_0x47c62c;this[_0x6368('0x4a')](_0x47c62c);}}catch(_0x46f74){logger[_0x6368('0x3f')](_0x6368('0x74'),util[_0x6368('0x48')](_0x46f74,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x6368('0xb')]['syncQueueCallerAbandon']=function(_0x50880e){try{if(this[_0x6368('0x5f')](_0x50880e)){if(this[_0x6368('0x41')][_0x50880e[_0x6368('0x6b')]]){var _0x1bb86b=_['last'](this[_0x6368('0x41')][_0x50880e['uniqueid']]);_0x1bb86b[_0x6368('0x75')]=![];_0x1bb86b[_0x6368('0x76')]=null;_0x1bb86b[_0x6368('0x77')]=_0x50880e[_0x6368('0x77')];_0x1bb86b[_0x6368('0x78')]=_0x50880e[_0x6368('0x78')];_0x1bb86b['queuecallerabandon']=!![];_0x1bb86b[_0x6368('0x79')]=moment()['format'](_0x6368('0x6d'));_0x1bb86b[_0x6368('0x7a')]=_0x6368('0x7b');_0x1bb86b['lastAssignedTo']=null;this[_0x6368('0x11')][_0x50880e[_0x6368('0x6b')]]=_0x1bb86b;this[_0x6368('0x47')](_0x1bb86b);}}}catch(_0x360c86){logger[_0x6368('0x3f')]('[syncQueueCallerAbandon][VoiceQueueReport]',util[_0x6368('0x48')](_0x360c86,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x1d')]=function(_0x57cf31){try{if(this[_0x6368('0x5f')](_0x57cf31)){if(this[_0x6368('0x41')][_0x57cf31['uniqueid']]){var _0x4c147e=_[_0x6368('0x7c')](this['queueReports'][_0x57cf31['uniqueid']]);_0x4c147e['queuecallerleaveAt']=moment()[_0x6368('0x4b')](_0x6368('0x6d'));_0x4c147e[_0x6368('0x7d')]=_0x57cf31[_0x6368('0x7d')];_0x4c147e['connectedlinename']=_0x57cf31[_0x6368('0x7e')];this[_0x6368('0x11')][_0x57cf31[_0x6368('0x6b')]]=_0x4c147e;this[_0x6368('0x4a')](_0x4c147e);}}}catch(_0x4e2db6){logger[_0x6368('0x3f')](_0x6368('0x7f'),util[_0x6368('0x48')](_0x4e2db6,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0x6368('0x80')]=function(_0x7cd06f){try{if(this['isNotNull'](_0x7cd06f)){if(this['queueReports'][_0x7cd06f[_0x6368('0x6b')]]){var _0x22c518=_['last'](this[_0x6368('0x41')][_0x7cd06f[_0x6368('0x6b')]]);_0x22c518[_0x6368('0x75')]=!![];_0x22c518[_0x6368('0x7a')]=_0x6368('0x81');}}}catch(_0x182537){logger[_0x6368('0x3f')](_0x6368('0x82'),util['inspect'](_0x182537,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype']['syncAgentComplete']=function(_0x57b4aa){try{if(this['isNotNull'](_0x57b4aa)){if(this[_0x6368('0x41')][_0x57b4aa['uniqueid']]){var _0x59f42e=_[_0x6368('0x7c')](this[_0x6368('0x41')][_0x57b4aa[_0x6368('0x6b')]]);_0x59f42e[_0x6368('0x83')]=![];_0x59f42e[_0x6368('0x79')]=null;_0x59f42e[_0x6368('0x84')]=!![];_0x59f42e['lastAssignedTo']=_0x57b4aa[_0x6368('0x85')];_0x59f42e[_0x6368('0x77')]=_0x57b4aa[_0x6368('0x77')];_0x59f42e['queuecallercomplete']=!![];_0x59f42e['queuecallerexit']=![];_0x59f42e[_0x6368('0x86')]=null;if(!_0x59f42e[_0x6368('0x87')]){if(_0x57b4aa[_0x6368('0x88')]==_0x6368('0x87')){_0x59f42e[_0x6368('0x7a')]=_0x6368('0x89');}else{if(_[_0x6368('0x8a')](_0x57b4aa[_0x6368('0x3b')][_0x6368('0x8b')](),_0x6368('0x8c'))){if(this[_0x6368('0x41')][_0x57b4aa[_0x6368('0x8d')]]){var _0x26fab7=_['last'](this['queueReports'][_0x57b4aa[_0x6368('0x8d')]]);_0x26fab7[_0x6368('0x75')]=![];_0x26fab7['queuecallerexit']=!![];_0x26fab7[_0x6368('0x86')]=moment(_0x59f42e[_0x6368('0x6c')])[_0x6368('0x8e')](_0x57b4aa[_0x6368('0x77')],_0x6368('0x8f'))['format'](_0x6368('0x6d'));_0x26fab7[_0x6368('0x7a')]=_0x6368('0x90');_0x26fab7[_0x6368('0x87')]=!![];_0x26fab7['transfertype']='FORWARD';_0x26fab7['transferexten']=_0x57b4aa['destexten'];_0x26fab7[_0x6368('0x91')]=_0x57b4aa[_0x6368('0x6b')];var _0x498b4c=this[_0x6368('0x41')][_0x57b4aa[_0x6368('0x8d')]];this[_0x6368('0x41')][_0x57b4aa['linkedid']]=this[_0x6368('0x41')][_0x57b4aa[_0x6368('0x6b')]];this[_0x6368('0x41')][_0x57b4aa[_0x6368('0x6b')]]=_0x498b4c;}}else{_0x59f42e[_0x6368('0x7a')]=_0x6368('0x92')+_0x57b4aa[_0x6368('0x88')][_0x6368('0x93')]();}}}this[_0x6368('0x11')][_0x57b4aa['uniqueid']]=_0x59f42e;this[_0x6368('0x47')](_0x59f42e);}}}catch(_0x2727f7){logger['error'](_0x6368('0x94'),util[_0x6368('0x48')](_0x2727f7,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x21')]=function(_0x5590ba){try{if(this['isNotNull'](_0x5590ba)){this[_0x6368('0x95')](_0x5590ba[_0x6368('0x6b')],_[_0x6368('0x72')](_0x5590ba[_0x6368('0x96')])[0x0],_0x5590ba[_0x6368('0x97')]);if(this['queueReports'][_0x5590ba[_0x6368('0x6b')]]){var _0x5ae6e0=_['last'](this[_0x6368('0x41')][_0x5590ba['uniqueid']]);if(_0x5ae6e0){if(this[_0x6368('0x5f')](_0x5590ba[_0x6368('0x96')])&&this[_0x6368('0x5f')](_0x5590ba[_0x6368('0x96')][_0x6368('0x98')])){switch(_0x5590ba['value']){case'CONTINUE':_0x5ae6e0[_0x6368('0x99')]=![];_0x5ae6e0[_0x6368('0x86')]=null;break;default:_0x5ae6e0[_0x6368('0x99')]=!![];_0x5ae6e0[_0x6368('0x86')]=moment()[_0x6368('0x4b')](_0x6368('0x6d'));_0x5ae6e0[_0x6368('0x9a')]=moment()['format'](_0x6368('0x6d'));}_0x5ae6e0[_0x6368('0x83')]=![];_0x5ae6e0[_0x6368('0x79')]=null;_0x5ae6e0['queuecallerexitreason']=_0x5590ba[_0x6368('0x97')];this['channels'][_0x5590ba[_0x6368('0x6b')]]=_0x5ae6e0;this[_0x6368('0x47')](_0x5ae6e0);}else if(this[_0x6368('0x5f')](_0x5590ba['variable'])&&this[_0x6368('0x5f')](_0x5590ba[_0x6368('0x96')]['queueposition'])){if(!_0x5ae6e0[_0x6368('0x83')]){_0x5ae6e0[_0x6368('0x99')]=!![];_0x5ae6e0[_0x6368('0x86')]=moment()[_0x6368('0x4b')](_0x6368('0x6d'));_0x5ae6e0[_0x6368('0x7a')]=_0x6368('0x9b');_0x5ae6e0[_0x6368('0x9a')]=moment()[_0x6368('0x4b')]('YYYY-MM-DD\x20HH:mm:ss');this[_0x6368('0x11')][_0x5590ba[_0x6368('0x6b')]]=_0x5ae6e0;}}_0x5ae6e0[_0x6368('0x15')]=this['variables'][_0x5590ba[_0x6368('0x6b')]];}}}}catch(_0x233d11){logger[_0x6368('0x3f')](_0x6368('0x9c'),util['inspect'](_0x233d11,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x95')]=function(_0xd8eacf,_0x4c6d5,_0x242b73){var _0x217bfa=[_0x6368('0x9d'),_0x6368('0x9e'),_0x6368('0x9f'),'rtpaudioqosjitterbridged','rtpaudioqosloss',_0x6368('0xa0'),'rtpaudioqosrtt',_0x6368('0xa1'),_0x6368('0xa2'),_0x6368('0xa3'),_0x6368('0xa4'),_0x6368('0xa5'),_0x6368('0xa6'),_0x6368('0xa7'),'memberinterface',_0x6368('0xa8'),_0x6368('0x85'),'memberpenalty',_0x6368('0xa9')];if(!_[_0x6368('0x39')](_0x4c6d5)&&!_['includes'](_0x217bfa,_0x4c6d5)){if(_[_0x6368('0x2f')](this['variables'][_0xd8eacf])){this[_0x6368('0x15')][_0xd8eacf]={};}this[_0x6368('0x15')][_0xd8eacf][_0x4c6d5]=_0x242b73;}};VoiceQueueReport['prototype']['syncHangup']=function(_0x34c853){try{if(this[_0x6368('0x5f')](_0x34c853)){if(this[_0x6368('0x41')][_0x34c853[_0x6368('0x6b')]]){for(var _0x2f390d=0x0,_0x5465df={};_0x2f390d<this[_0x6368('0x41')][_0x34c853[_0x6368('0x6b')]][_0x6368('0xaa')];_0x2f390d+=0x1){_0x5465df=this['queueReports'][_0x34c853[_0x6368('0x6b')]][_0x2f390d];if(this[_0x6368('0x46')][_0x5465df['queue']]){if(_0x5465df[_0x6368('0x99')]){this[_0x6368('0x46')][_0x5465df[_0x6368('0x64')]][_0x6368('0xab')]+=0x1;}if(_0x5465df[_0x6368('0x83')]){this['voiceQueues'][_0x5465df[_0x6368('0x64')]]['abandoned']+=0x1;}this[_0x6368('0x46')][_0x5465df[_0x6368('0x64')]][_0x6368('0x58')]+=moment(_0x5465df[_0x6368('0x9a')])[_0x6368('0xac')](_0x5465df[_0x6368('0x6c')],_0x6368('0x8f'))||0x0;if(_0x2f390d===this['queueReports'][_0x34c853['uniqueid']][_0x6368('0xaa')]-0x1){this[_0x6368('0x46')][_0x5465df[_0x6368('0x64')]][_0x6368('0xad')]+=moment()[_0x6368('0xae')](0x0)[_0x6368('0xac')](_0x5465df[_0x6368('0x6c')],_0x6368('0x8f'));this[_0x6368('0x46')][_0x5465df[_0x6368('0x64')]][_0x6368('0x59')]+=0x1;if(_0x5465df['queuecallercomplete']){this[_0x6368('0x46')][_0x5465df[_0x6368('0x64')]]['answered']+=0x1;this[_0x6368('0x46')][_0x5465df['queue']][_0x6368('0x57')]+=moment()[_0x6368('0xae')](0x0)['diff'](_0x5465df[_0x6368('0x9a')],_0x6368('0x8f'));_0x5465df[_0x6368('0x76')]=moment()[_0x6368('0x4b')](_0x6368('0x6d'));_0x5465df[_0x6368('0x99')]=![];_0x5465df[_0x6368('0x86')]=null;}if(_0x5465df[_0x6368('0x99')]){_0x5465df[_0x6368('0xaf')]=_0x6368('0xab');ami[_0x6368('0x49')](_0x6368('0xb0'),_0x5465df);}if(_0x5465df['queuecallerabandon']){_0x5465df[_0x6368('0xaf')]=_0x6368('0x5a');ami[_0x6368('0x49')](_0x6368('0xb1'),_0x5465df);}}else{this[_0x6368('0x46')][_0x5465df[_0x6368('0x64')]]['sumDuration']+=this[_0x6368('0x46')][_0x5465df['queue']][_0x6368('0x58')];}this['channels'][_0x34c853[_0x6368('0x6b')]]=_0x5465df;this[_0x6368('0x47')](_0x5465df);this[_0x6368('0x50')](this['voiceQueues'][_0x5465df[_0x6368('0x64')]]);}}ami[_0x6368('0x49')](_0x6368('0xb2'),this[_0x6368('0x41')][_0x34c853[_0x6368('0x6b')]]);delete this['queueReports'][_0x34c853['uniqueid']];delete this[_0x6368('0x11')][_0x34c853[_0x6368('0x6b')]];}if(this[_0x6368('0x15')][_0x34c853['uniqueid']]){delete this['variables'][_0x34c853[_0x6368('0x6b')]];}}}catch(_0xd9c213){logger['error'](_0x6368('0xb3'),util['inspect'](_0xd9c213,{'showHidden':![],'depth':null}));}};VoiceQueueReport['prototype'][_0x6368('0xb4')]=function(_0x10313d){try{if(this['isNotNull'](_0x10313d)){var _0x29f4b9;if(this[_0x6368('0x41')][_0x10313d[_0x6368('0xb5')]]){_0x29f4b9=_[_0x6368('0x7c')](this['queueReports'][_0x10313d[_0x6368('0xb5')]]);_0x29f4b9[_0x6368('0xb6')]=_0x10313d[_0x6368('0xb7')];_0x29f4b9[_0x6368('0x91')]=_0x10313d[_0x6368('0xb8')];_0x29f4b9[_0x6368('0x7a')]=_0x6368('0xb9');_0x29f4b9[_0x6368('0x87')]=!![];_0x29f4b9[_0x6368('0xba')]=_0x6368('0xbb');if(this['queueReports'][_0x10313d[_0x6368('0xb8')]]){var _0x13ee5c=this[_0x6368('0x41')][_0x10313d[_0x6368('0xb8')]];this[_0x6368('0x41')][_0x10313d[_0x6368('0xb8')]]=this[_0x6368('0x41')][_0x10313d[_0x6368('0xb5')]];this[_0x6368('0x41')][_0x10313d[_0x6368('0xb5')]]=_0x13ee5c;var _0x54d3c4=_[_0x6368('0x7c')](this[_0x6368('0x41')][_0x10313d[_0x6368('0xb5')]]);_0x54d3c4[_0x6368('0x38')]=!![];}}else if(this[_0x6368('0x41')][_0x10313d[_0x6368('0xbc')]]){_0x29f4b9=_[_0x6368('0x7c')](this[_0x6368('0x41')][_0x10313d[_0x6368('0xbc')]]);_0x29f4b9['transferexten']=_0x10313d[_0x6368('0xbd')];_0x29f4b9[_0x6368('0x91')]=_0x10313d[_0x6368('0xbe')];_0x29f4b9['queuecallerexitreason']='ATTENDEDTRANSFER';_0x29f4b9[_0x6368('0x87')]=!![];_0x29f4b9[_0x6368('0xba')]=_0x6368('0xbb');if(this[_0x6368('0x41')][_0x10313d[_0x6368('0xbe')]]){var _0x13ee5c=this[_0x6368('0x41')][_0x10313d[_0x6368('0xbe')]];this[_0x6368('0x41')][_0x10313d[_0x6368('0xbe')]]=this[_0x6368('0x41')][_0x10313d[_0x6368('0xbc')]];this[_0x6368('0x41')][_0x10313d[_0x6368('0xbc')]]=_0x13ee5c;var _0x54d3c4=_[_0x6368('0x7c')](this[_0x6368('0x41')][_0x10313d[_0x6368('0xbc')]]);_0x54d3c4['switch']=!![];}}}}catch(_0x1a9abf){logger['error'](_0x6368('0xbf'),util[_0x6368('0x48')](_0x1a9abf,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x2c')]=function(_0x109e45){try{if(this[_0x6368('0x5f')](_0x109e45)){if(this['queueReports'][_0x109e45[_0x6368('0xb5')]]){var _0x5d3a8e=_[_0x6368('0x7c')](this['queueReports'][_0x109e45[_0x6368('0xb5')]]);_0x5d3a8e[_0x6368('0x7a')]=_0x6368('0xc0');_0x5d3a8e['transfer']=!![];_0x5d3a8e[_0x6368('0xba')]=_0x6368('0xc1');_0x5d3a8e[_0x6368('0xb6')]=_0x109e45[_0x6368('0xc2')];_0x5d3a8e[_0x6368('0x91')]=_0x109e45['transfereeuniqueid'];this['syncHangup']({'event':'BlindTransfer','uniqueid':_0x109e45[_0x6368('0xb5')],'context':_0x109e45[_0x6368('0xc3')],'channel':_0x109e45['transfererchannel']});}}}catch(_0x176005){logger['error'](_0x6368('0xc4'),util['inspect'](_0x176005,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x6368('0xb')]['syncMusicOnHoldStart']=function(_0x110c0b){try{if(this[_0x6368('0x5f')](_0x110c0b)){if(this[_0x6368('0x41')][_0x110c0b[_0x6368('0x6b')]]){var _0x94b149=_[_0x6368('0x7c')](this[_0x6368('0x41')][_0x110c0b['uniqueid']]);if(!_[_0x6368('0x39')](_0x94b149[_0x6368('0x9a')])){_0x94b149[_0x6368('0xc5')]=moment()[_0x6368('0x4b')](_0x6368('0x6d'));}}}}catch(_0x729e97){logger[_0x6368('0x3f')](_0x6368('0xc6'),util[_0x6368('0x48')](_0x729e97,{'showHidden':![],'depth':null}));}};VoiceQueueReport[_0x6368('0xb')][_0x6368('0x29')]=function(_0x2a7489){try{if(this[_0x6368('0x5f')](_0x2a7489)){if(this[_0x6368('0x41')][_0x2a7489[_0x6368('0x6b')]]){var _0x5bb3f5=_[_0x6368('0x7c')](this[_0x6368('0x41')][_0x2a7489[_0x6368('0x6b')]]);if(!_[_0x6368('0x39')](_0x5bb3f5[_0x6368('0xc5')])){_0x5bb3f5[_0x6368('0xc7')]+=moment()[_0x6368('0xae')](0x0)[_0x6368('0xac')](_0x5bb3f5[_0x6368('0xc5')],'seconds');delete _0x5bb3f5[_0x6368('0xc5')];}}}}catch(_0x1b4e2a){logger[_0x6368('0x3f')](_0x6368('0xc8'),util[_0x6368('0x48')](_0x1b4e2a,{'showHidden':![],'depth':null}));}};module[_0x6368('0xc9')]=VoiceQueueReport;
\ No newline at end of file
index 8d39e12..88993ee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa41a=['createHistory','campaign','queue','Request','CreateReportAgentPreview','../client'];(function(_0x4f6880,_0xd14912){var _0x14c831=function(_0x594eb2){while(--_0x594eb2){_0x4f6880['push'](_0x4f6880['shift']());}};_0x14c831(++_0xd14912);}(_0xa41a,0x6b));var _0xaa41=function(_0x5b6891,_0x141318){_0x5b6891=_0x5b6891-0x0;var _0xe5f944=_0xa41a[_0x5b6891];return _0xe5f944;};'use strict';var client=require(_0xaa41('0x0'));exports[_0xaa41('0x1')]=function(_0x4d08e9){return function(){_0x4d08e9[_0xaa41('0x2')]=_0x4d08e9[_0xaa41('0x3')];return client[_0xaa41('0x4')](_0xaa41('0x5'),{'body':_0x4d08e9,'log':_0xaa41('0x5')});};};
\ No newline at end of file
+var _0x17ba=['queue','Request','CreateReportAgentPreview','../client','createHistory','campaign'];(function(_0x24c924,_0x9cda30){var _0x4e352c=function(_0x7b9a2){while(--_0x7b9a2){_0x24c924['push'](_0x24c924['shift']());}};_0x4e352c(++_0x9cda30);}(_0x17ba,0xab));var _0xa17b=function(_0x44beda,_0x35eeb6){_0x44beda=_0x44beda-0x0;var _0x1cbb66=_0x17ba[_0x44beda];return _0x1cbb66;};'use strict';var client=require(_0xa17b('0x0'));exports[_0xa17b('0x1')]=function(_0x4a2032){return function(){_0x4a2032[_0xa17b('0x2')]=_0x4a2032[_0xa17b('0x3')];return client[_0xa17b('0x4')](_0xa17b('0x5'),{'body':_0x4a2032,'log':_0xa17b('0x5')});};};
\ No newline at end of file
index 1a13003..540f1b5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x316c=['create','CreateAttachment'];(function(_0x5c3a80,_0x7b4001){var _0x100874=function(_0x371129){while(--_0x371129){_0x5c3a80['push'](_0x5c3a80['shift']());}};_0x100874(++_0x7b4001);}(_0x316c,0x1e2));var _0xc316=function(_0x2884a6,_0x53ca1c){_0x2884a6=_0x2884a6-0x0;var _0x164787=_0x316c[_0x2884a6];return _0x164787;};'use strict';var client=require('../client');exports[_0xc316('0x0')]=function(_0x107a5b){return client['Request'](_0xc316('0x1'),{'body':_0x107a5b,'log':_0xc316('0x1')});};
\ No newline at end of file
+var _0xd5b6=['CreateAttachment','create','Request'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xd5b6,0x1bd));var _0x6d5b=function(_0x3694d8,_0x7e976){_0x3694d8=_0x3694d8-0x0;var _0x3bf8ec=_0xd5b6[_0x3694d8];return _0x3bf8ec;};'use strict';var client=require('../client');exports[_0x6d5b('0x0')]=function(_0x3fb6e9){return client[_0x6d5b('0x1')](_0x6d5b('0x2'),{'body':_0x3fb6e9,'log':'CreateAttachment'});};
\ No newline at end of file
index cb7e9f5..f919fe2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x878a=['dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialOrderByScheduledAt','dialRandomLastDigitCallerIdNumber','dialCutDigit','Trunk','name','callerid','TrunkBackup','Interval','Intervals','interval','SquareProject','getCampaigns','Request','type','active','limitCalls','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime'];(function(_0x4423c4,_0x11b42f){var _0x1435c7=function(_0x4d165d){while(--_0x4d165d){_0x4423c4['push'](_0x4423c4['shift']());}};_0x1435c7(++_0x11b42f);}(_0x878a,0x6b));var _0xa878=function(_0x1ff444,_0x289dde){_0x1ff444=_0x1ff444-0x0;var _0x1d32e0=_0x878a[_0x1ff444];return _0x1d32e0;};'use strict';var client=require('../client');exports[_0xa878('0x0')]=function(){return function(){return client[_0xa878('0x1')]('GetCampaign',{'options':{'raw':![],'attributes':['id','name',_0xa878('0x2'),_0xa878('0x3'),_0xa878('0x4'),'dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout',_0xa878('0x5'),_0xa878('0x6'),_0xa878('0x7'),'dialBusyRetryFrequency',_0xa878('0x8'),_0xa878('0x9'),_0xa878('0xa'),_0xa878('0xb'),'dialGlobalInterval',_0xa878('0xc'),_0xa878('0xd'),_0xa878('0xe'),_0xa878('0xf'),_0xa878('0x10'),'dialAMDMinWordLength',_0xa878('0x11'),_0xa878('0x12'),_0xa878('0x13'),'dialAMDMaximumWordLength',_0xa878('0x14'),'dialPrefix',_0xa878('0x15'),_0xa878('0x16')],'include':[{'model':'Trunk','as':_0xa878('0x17'),'attributes':['id',_0xa878('0x18'),_0xa878('0x19'),_0xa878('0x3')]},{'model':_0xa878('0x17'),'as':_0xa878('0x1a'),'attributes':['id','name',_0xa878('0x19'),'active']},{'model':_0xa878('0x1b'),'as':_0xa878('0x1b'),'attributes':['id','name'],'include':[{'model':_0xa878('0x1b'),'as':_0xa878('0x1c'),'attributes':['id',_0xa878('0x18'),_0xa878('0x1d')]}]},{'model':'SquareProject','as':_0xa878('0x1e'),'attributes':['id','name']}]},'log':'getCampaign'});};};
\ No newline at end of file
+var _0x6558=['Trunk','name','callerid','TrunkBackup','Interval','Intervals','interval','SquareProject','getCampaign','../client','getCampaigns','Request','GetCampaign','active','limitCalls','dialOriginateCallerIdName','dialOriginateTimeout','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialAMDActive','dialAMDInitialSilence','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','dialPrefix','dialCutDigit'];(function(_0x44ca6e,_0x5e2c91){var _0x2edab2=function(_0x3afa91){while(--_0x3afa91){_0x44ca6e['push'](_0x44ca6e['shift']());}};_0x2edab2(++_0x5e2c91);}(_0x6558,0x1f3));var _0x8655=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0x6558[_0x2f5ac5];return _0x37c9a8;};'use strict';var client=require(_0x8655('0x0'));exports[_0x8655('0x1')]=function(){return function(){return client[_0x8655('0x2')](_0x8655('0x3'),{'options':{'raw':![],'attributes':['id','name','type',_0x8655('0x4'),_0x8655('0x5'),_0x8655('0x6'),'dialOriginateCallerIdNumber',_0x8655('0x7'),_0x8655('0x8'),_0x8655('0x9'),_0x8655('0xa'),'dialBusyRetryFrequency','dialNoAnswerMaxRetry',_0x8655('0xb'),_0x8655('0xc'),_0x8655('0xd'),_0x8655('0xe'),_0x8655('0xf'),_0x8655('0x10'),_0x8655('0x11'),_0x8655('0x12'),_0x8655('0x13'),'dialAMDMinWordLength',_0x8655('0x14'),_0x8655('0x15'),_0x8655('0x16'),_0x8655('0x17'),'dialOrderByScheduledAt',_0x8655('0x18'),'dialRandomLastDigitCallerIdNumber',_0x8655('0x19')],'include':[{'model':_0x8655('0x1a'),'as':_0x8655('0x1a'),'attributes':['id',_0x8655('0x1b'),_0x8655('0x1c'),_0x8655('0x4')]},{'model':'Trunk','as':_0x8655('0x1d'),'attributes':['id',_0x8655('0x1b'),_0x8655('0x1c'),_0x8655('0x4')]},{'model':'Interval','as':_0x8655('0x1e'),'attributes':['id',_0x8655('0x1b')],'include':[{'model':'Interval','as':_0x8655('0x1f'),'attributes':['id',_0x8655('0x1b'),_0x8655('0x20')]}]},{'model':_0x8655('0x21'),'as':'SquareProject','attributes':['id','name']}]},'log':_0x8655('0x22')});};};
\ No newline at end of file
index 48f6cb2..cda5d86 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe872=['showContact','ShowCmContact','../client','createContact','Request','CreateCmContact'];(function(_0xb2c967,_0x32a02c){var _0x421afc=function(_0x4a1817){while(--_0x4a1817){_0xb2c967['push'](_0xb2c967['shift']());}};_0x421afc(++_0x32a02c);}(_0xe872,0x13a));var _0x2e87=function(_0x35800a,_0x5c15c3){_0x35800a=_0x35800a-0x0;var _0x3a69dd=_0xe872[_0x35800a];return _0x3a69dd;};'use strict';var client=require(_0x2e87('0x0'));exports[_0x2e87('0x1')]=function(_0x98f1f9){return function(){return client[_0x2e87('0x2')]('CreateCmContact',{'body':_0x98f1f9,'log':_0x2e87('0x3')});};};exports[_0x2e87('0x4')]=function(_0x1b7403){return function(){return client[_0x2e87('0x2')](_0x2e87('0x5'),{'options':_0x1b7403,'log':_0x2e87('0x5')});};};
\ No newline at end of file
+var _0x76fb=['createContact','Request','CreateCmContact','../client'];(function(_0x37be43,_0x15f4b1){var _0xe2432c=function(_0x4a380e){while(--_0x4a380e){_0x37be43['push'](_0x37be43['shift']());}};_0xe2432c(++_0x15f4b1);}(_0x76fb,0x1a3));var _0xb76f=function(_0x2f5894,_0x583a7e){_0x2f5894=_0x2f5894-0x0;var _0x3ef7ee=_0x76fb[_0x2f5894];return _0x3ef7ee;};'use strict';var client=require(_0xb76f('0x0'));exports[_0xb76f('0x1')]=function(_0x4705f0){return function(){return client[_0xb76f('0x2')](_0xb76f('0x3'),{'body':_0x4705f0,'log':_0xb76f('0x3')});};};exports['showContact']=function(_0x2391e6){return function(){return client[_0xb76f('0x2')]('ShowCmContact',{'options':_0x2391e6,'log':'ShowCmContact'});};};
\ No newline at end of file
index d008fc2..9656882 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1261=['ListId','CampaignId','CountReScheduled','countReScheduled','getContactPreview','User','Agent','name','db.CmHopper.UserId','moment','lodash','getContacts','Request','GetCmHopper','CmContact','Contact','getCmHopper','UpdateCmHopper','format','YYYY-MM-DD\x20HH:mm:ss','rescheduleContact','ContactId','VoiceQueueId','destroyContact','DestroyCmHopper','getContactDialer','GetContactDialer','DESC','scheduledat','ASC','getContactDialerIvr','priority','GetContactDialerIvr','campaign','queue'];(function(_0x5160b2,_0x55c8bd){var _0x1bceb9=function(_0x1d9737){while(--_0x1d9737){_0x5160b2['push'](_0x5160b2['shift']());}};_0x1bceb9(++_0x55c8bd);}(_0x1261,0x144));var _0x1126=function(_0x3bae28,_0x5ca4f5){_0x3bae28=_0x3bae28-0x0;var _0xb431b=_0x1261[_0x3bae28];return _0xb431b;};'use strict';var client=require('../client');var moment=require(_0x1126('0x0'));var _=require(_0x1126('0x1'));exports[_0x1126('0x2')]=function(_0x331a2c,_0x39b786){return function(){return client[_0x1126('0x3')](_0x1126('0x4'),{'options':{'where':{'VoiceQueueId':_0x331a2c},'include':[{'model':_0x1126('0x5'),'as':_0x1126('0x6')}],'limit':_0x39b786,'raw':![]},'log':_0x1126('0x7')});};};exports['updateContacts']=function(_0x5c68c8,_0x40ba58,_0x907180){return function(){return client['Request'](_0x1126('0x8'),{'body':_0x5c68c8,'options':{'where':{'VoiceQueueId':_0x40ba58,'scheduledat':{'$lte':moment()[_0x1126('0x9')](_0x1126('0xa'))}},'limit':_0x907180},'log':_0x1126('0x8')});};};exports[_0x1126('0xb')]=function(_0x59cfa1){return function(){return client[_0x1126('0x3')](_0x1126('0x8'),{'body':_0x59cfa1,'options':{'where':{'ContactId':_0x59cfa1[_0x1126('0xc')],'ListId':_0x59cfa1['ListId'],'VoiceQueueId':_0x59cfa1[_0x1126('0xd')],'CampaignId':_0x59cfa1['CampaignId']}},'log':'rescheduleContact'});};};exports[_0x1126('0xe')]=function(_0x561b93,_0x15e89b,_0x1b364a){return function(){return client[_0x1126('0x3')](_0x1126('0xf'),{'options':{'where':{'VoiceQueueId':_0x561b93,'ListId':_0x15e89b,'ContactId':_0x1b364a}},'log':_0x1126('0xf')});};};exports[_0x1126('0x10')]=function(_0xd8ca42,_0x2048ad,_0x43850b,_0x53a8f0){return function(){return client['Request'](_0x1126('0x11'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0xd8ca42,'active':![],'scheduledat':{'$lte':moment()[_0x1126('0x9')](_0x1126('0xa'))},'$or':[{'UserId':null},{'UserId':{'$in':_0x2048ad}}]},'include':[{'model':'CmContact','as':_0x1126('0x6')}],'order':[['priority',_0x1126('0x12')],[_0x1126('0x13'),_0x53a8f0],['id',_0x1126('0x14')]],'raw':!![],'limit':_0x43850b},'log':'GetContactDialer'});};};exports[_0x1126('0x15')]=function(_0x1695f6,_0x4a7b49,_0x4d2b38){return function(){return client[_0x1126('0x3')](_0x1126('0x11'),{'body':{'active':!![]},'options':{'where':{'CampaignId':_0x1695f6,'active':![],'scheduledat':{'$lte':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')}},'include':[{'model':_0x1126('0x5'),'as':'Contact'}],'order':[[_0x1126('0x16'),_0x1126('0x12')],[_0x1126('0x13'),_0x4d2b38],['id','ASC']],'raw':!![],'limit':_0x4a7b49},'log':_0x1126('0x17')});};};exports['moveContactManagedDialer']=function(_0x56efeb,_0x30f6b3){return function(){_0x56efeb[_0x1126('0x18')]=_0x56efeb[_0x1126('0x19')];return client[_0x1126('0x3')]('MoveContactManagedDialer',{'body':_0x56efeb,'options':{'where':{'ContactId':_0x56efeb[_0x1126('0xc')],'ListId':_0x56efeb[_0x1126('0x1a')],'VoiceQueueId':_0x56efeb['VoiceQueueId'],'CampaignId':_0x56efeb[_0x1126('0x1b')],'active':_0x30f6b3?undefined:!![]}},'log':'MoveContactManagedDialer'});};};exports['countReScheduled']=function(_0x4b57ab){return function(){return client[_0x1126('0x3')](_0x1126('0x1c'),{'options':{'where':{'VoiceQueueId':_0x4b57ab['id']?_0x4b57ab['id']||null:null}},'log':_0x1126('0x1d')});};};exports[_0x1126('0x1e')]=function(_0x566c09){return function(){return client[_0x1126('0x3')](_0x1126('0x4'),{'options':{'where':{'id':_0x566c09},'include':[{'model':_0x1126('0x5'),'as':'Contact'},{'model':_0x1126('0x1f'),'as':_0x1126('0x20'),'attributes':['id',_0x1126('0x21')]},{'model':'VoiceQueue','as':'Queue','attributes':['id',_0x1126('0x21')]}],'raw':!![]},'log':_0x1126('0x7')});};};exports['unlockContact']=function(_0x2fb797,_0x23d2bc,_0x4a334a){return function(){return client[_0x1126('0x3')]('UpdateCmHopper',{'body':_0x2fb797,'options':{'where':{'id':_0x23d2bc},'limit':_0x4a334a},'log':_0x1126('0x8')});};};exports['getContactRecallMe']=function(_0x771bb8,_0x583ce6){return function(){return client[_0x1126('0x3')]('GetContactRecallMe',{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x771bb8,'active':![],'recallme':!![],'scheduledat':{'$lte':moment()['format']('YYYY-MM-DD\x20HH:mm:ss')},'UserId':{'$in':_0x583ce6}},'order':[[_0x1126('0x16'),_0x1126('0x12')],[_0x1126('0x13'),'DESC'],['id',_0x1126('0x14')]],'include':[{'model':_0x1126('0x5'),'as':'Contact'}],'group':_0x1126('0x22'),'raw':!![]},'log':_0x1126('0x11')});};};
\ No newline at end of file
+var _0xe2fe=['DestroyCmHopper','getContactDialer','GetContactDialer','YYYY-MM-DD\x20HH:mm:ss','priority','DESC','ASC','getContactDialerIvr','scheduledat','GetContactDialerIvr','campaign','queue','MoveContactManagedDialer','ContactId','ListId','CampaignId','countReScheduled','CountReScheduled','getContactPreview','User','Queue','name','getCmHopper','unlockContact','getContactRecallMe','db.CmHopper.UserId','../client','getContacts','Request','GetCmHopper','CmContact','Contact','updateContacts','format','UpdateCmHopper','rescheduleContact'];(function(_0x1d5017,_0x10ed0d){var _0x4f1246=function(_0x1b44f){while(--_0x1b44f){_0x1d5017['push'](_0x1d5017['shift']());}};_0x4f1246(++_0x10ed0d);}(_0xe2fe,0x86));var _0xee2f=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xe2fe[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0xee2f('0x0'));var moment=require('moment');var _=require('lodash');exports[_0xee2f('0x1')]=function(_0x5e18ae,_0x169cf9){return function(){return client[_0xee2f('0x2')](_0xee2f('0x3'),{'options':{'where':{'VoiceQueueId':_0x5e18ae},'include':[{'model':_0xee2f('0x4'),'as':_0xee2f('0x5')}],'limit':_0x169cf9,'raw':![]},'log':'getCmHopper'});};};exports[_0xee2f('0x6')]=function(_0x2b7e7c,_0x49926b,_0x1533a0){return function(){return client[_0xee2f('0x2')]('UpdateCmHopper',{'body':_0x2b7e7c,'options':{'where':{'VoiceQueueId':_0x49926b,'scheduledat':{'$lte':moment()[_0xee2f('0x7')]('YYYY-MM-DD\x20HH:mm:ss')}},'limit':_0x1533a0},'log':_0xee2f('0x8')});};};exports[_0xee2f('0x9')]=function(_0x53f7dd){return function(){return client[_0xee2f('0x2')](_0xee2f('0x8'),{'body':_0x53f7dd,'options':{'where':{'ContactId':_0x53f7dd['ContactId'],'ListId':_0x53f7dd['ListId'],'VoiceQueueId':_0x53f7dd['VoiceQueueId'],'CampaignId':_0x53f7dd['CampaignId']}},'log':_0xee2f('0x9')});};};exports['destroyContact']=function(_0x481ea7,_0x53047d,_0x25ddf7){return function(){return client[_0xee2f('0x2')](_0xee2f('0xa'),{'options':{'where':{'VoiceQueueId':_0x481ea7,'ListId':_0x53047d,'ContactId':_0x25ddf7}},'log':_0xee2f('0xa')});};};exports[_0xee2f('0xb')]=function(_0x3ab91f,_0x4faa8f,_0x3861e6,_0x531c3a){return function(){return client[_0xee2f('0x2')](_0xee2f('0xc'),{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x3ab91f,'active':![],'scheduledat':{'$lte':moment()['format'](_0xee2f('0xd'))},'$or':[{'UserId':null},{'UserId':{'$in':_0x4faa8f}}]},'include':[{'model':_0xee2f('0x4'),'as':_0xee2f('0x5')}],'order':[[_0xee2f('0xe'),_0xee2f('0xf')],['scheduledat',_0x531c3a],['id',_0xee2f('0x10')]],'raw':!![],'limit':_0x3861e6},'log':'GetContactDialer'});};};exports[_0xee2f('0x11')]=function(_0x3359ff,_0x502eb6,_0x550da7){return function(){return client[_0xee2f('0x2')]('GetContactDialer',{'body':{'active':!![]},'options':{'where':{'CampaignId':_0x3359ff,'active':![],'scheduledat':{'$lte':moment()[_0xee2f('0x7')](_0xee2f('0xd'))}},'include':[{'model':_0xee2f('0x4'),'as':'Contact'}],'order':[[_0xee2f('0xe'),_0xee2f('0xf')],[_0xee2f('0x12'),_0x550da7],['id',_0xee2f('0x10')]],'raw':!![],'limit':_0x502eb6},'log':_0xee2f('0x13')});};};exports['moveContactManagedDialer']=function(_0x5e73ad,_0x40d1fd){return function(){_0x5e73ad[_0xee2f('0x14')]=_0x5e73ad[_0xee2f('0x15')];return client[_0xee2f('0x2')](_0xee2f('0x16'),{'body':_0x5e73ad,'options':{'where':{'ContactId':_0x5e73ad[_0xee2f('0x17')],'ListId':_0x5e73ad[_0xee2f('0x18')],'VoiceQueueId':_0x5e73ad['VoiceQueueId'],'CampaignId':_0x5e73ad[_0xee2f('0x19')],'active':_0x40d1fd?undefined:!![]}},'log':_0xee2f('0x16')});};};exports[_0xee2f('0x1a')]=function(_0x70e308){return function(){return client[_0xee2f('0x2')](_0xee2f('0x1b'),{'options':{'where':{'VoiceQueueId':_0x70e308['id']?_0x70e308['id']||null:null}},'log':_0xee2f('0x1a')});};};exports[_0xee2f('0x1c')]=function(_0x382174){return function(){return client[_0xee2f('0x2')](_0xee2f('0x3'),{'options':{'where':{'id':_0x382174},'include':[{'model':_0xee2f('0x4'),'as':_0xee2f('0x5')},{'model':_0xee2f('0x1d'),'as':'Agent','attributes':['id','name']},{'model':'VoiceQueue','as':_0xee2f('0x1e'),'attributes':['id',_0xee2f('0x1f')]}],'raw':!![]},'log':_0xee2f('0x20')});};};exports[_0xee2f('0x21')]=function(_0x892a4e,_0x3737fd,_0x4d8398){return function(){return client[_0xee2f('0x2')]('UpdateCmHopper',{'body':_0x892a4e,'options':{'where':{'id':_0x3737fd},'limit':_0x4d8398},'log':_0xee2f('0x8')});};};exports[_0xee2f('0x22')]=function(_0x25ee9c,_0x8a0bf7){return function(){return client[_0xee2f('0x2')]('GetContactRecallMe',{'body':{'active':!![]},'options':{'where':{'VoiceQueueId':_0x25ee9c,'active':![],'recallme':!![],'scheduledat':{'$lte':moment()[_0xee2f('0x7')](_0xee2f('0xd'))},'UserId':{'$in':_0x8a0bf7}},'order':[['priority','DESC'],[_0xee2f('0x12'),'DESC'],['id',_0xee2f('0x10')]],'include':[{'model':_0xee2f('0x4'),'as':'Contact'}],'group':_0xee2f('0x23'),'raw':!![]},'log':'GetContactDialer'});};};
\ No newline at end of file
index 3e87d1e..ed79667 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x754a=['VoiceQueueId','Contact','phone','GetCmHopperBlack','checkIsBlackListIvr','CampaignId','GetCmHopperBlackIvr','../client','checkIsBlackList','Request'];(function(_0x59881a,_0x5ef668){var _0x33a221=function(_0x396188){while(--_0x396188){_0x59881a['push'](_0x59881a['shift']());}};_0x33a221(++_0x5ef668);}(_0x754a,0x197));var _0xa754=function(_0x550d12,_0x5384bd){_0x550d12=_0x550d12-0x0;var _0x12103d=_0x754a[_0x550d12];return _0x12103d;};'use strict';var client=require(_0xa754('0x0'));exports[_0xa754('0x1')]=function(_0x2df00c){return function(){return client[_0xa754('0x2')]('GetCmHopperBlack',{'options':{'where':{'VoiceQueueId':_0x2df00c[_0xa754('0x3')],'phone':_0x2df00c[_0xa754('0x4')][_0xa754('0x5')]},'raw':![]},'log':_0xa754('0x6')});};};exports[_0xa754('0x7')]=function(_0x45abc6){return function(){return client[_0xa754('0x2')]('GetCmHopperBlack',{'options':{'where':{'CampaignId':_0x45abc6[_0xa754('0x8')],'phone':_0x45abc6['Contact']['phone']},'raw':![]},'log':_0xa754('0x9')});};};
\ No newline at end of file
+var _0xefb6=['checkIsBlackList','Request','VoiceQueueId','Contact','phone','GetCmHopperBlack','CampaignId','../client'];(function(_0x26b622,_0x237e9e){var _0x58a028=function(_0xde1652){while(--_0xde1652){_0x26b622['push'](_0x26b622['shift']());}};_0x58a028(++_0x237e9e);}(_0xefb6,0x8f));var _0x6efb=function(_0x5d3903,_0x3d6c3e){_0x5d3903=_0x5d3903-0x0;var _0x4b8bc9=_0xefb6[_0x5d3903];return _0x4b8bc9;};'use strict';var client=require(_0x6efb('0x0'));exports[_0x6efb('0x1')]=function(_0x1c66a0){return function(){return client[_0x6efb('0x2')]('GetCmHopperBlack',{'options':{'where':{'VoiceQueueId':_0x1c66a0[_0x6efb('0x3')],'phone':_0x1c66a0[_0x6efb('0x4')][_0x6efb('0x5')]},'raw':![]},'log':_0x6efb('0x6')});};};exports['checkIsBlackListIvr']=function(_0x27d351){return function(){return client[_0x6efb('0x2')](_0x6efb('0x6'),{'options':{'where':{'CampaignId':_0x27d351[_0x6efb('0x7')],'phone':_0x27d351[_0x6efb('0x4')]['phone']},'raw':![]},'log':'GetCmHopperBlackIvr'});};};
\ No newline at end of file
index cbe4352..2af6dbe 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x09e5=['../client','createContact','campaign','Request','CreateCmHopperFinal'];(function(_0x175f2c,_0x52dc3c){var _0x2ba45e=function(_0x2e8b09){while(--_0x2e8b09){_0x175f2c['push'](_0x175f2c['shift']());}};_0x2ba45e(++_0x52dc3c);}(_0x09e5,0x1f4));var _0x509e=function(_0x4dc256,_0x359470){_0x4dc256=_0x4dc256-0x0;var _0x5f59ed=_0x09e5[_0x4dc256];return _0x5f59ed;};'use strict';var client=require(_0x509e('0x0'));exports[_0x509e('0x1')]=function(_0xf4efe1){return function(){_0xf4efe1[_0x509e('0x2')]=_0xf4efe1['queue'];return client[_0x509e('0x3')]('CreateCmHopperFinal',{'body':_0xf4efe1,'log':_0x509e('0x4')});};};
\ No newline at end of file
+var _0xd819=['campaign','queue','Request','CreateCmHopperFinal','createContact'];(function(_0x7a7a27,_0x3a002f){var _0x5e6f37=function(_0x4bfb51){while(--_0x4bfb51){_0x7a7a27['push'](_0x7a7a27['shift']());}};_0x5e6f37(++_0x3a002f);}(_0xd819,0x135));var _0x9d81=function(_0x33c1b1,_0x2355fb){_0x33c1b1=_0x33c1b1-0x0;var _0x2c2037=_0xd819[_0x33c1b1];return _0x2c2037;};'use strict';var client=require('../client');exports[_0x9d81('0x0')]=function(_0x355806){return function(){_0x355806[_0x9d81('0x1')]=_0x355806[_0x9d81('0x2')];return client[_0x9d81('0x3')](_0x9d81('0x4'),{'body':_0x355806,'log':_0x9d81('0x4')});};};
\ No newline at end of file
index 6d912d3..aaf6347 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9bd9=['ivr','GetCampaignHopperHistory','../client','moment','createHistory','campaign','queue','CreateCmHopperHistory','avgHandleTime','AvgHandleTime','subtract','minutes','format','YYYY-MM-DD\x20HH:mm:ss','GetCmHopperHistory','getVoiceQueueHopperHistory','Request','GetVoiceQueueHopperHistory','startOf','day','getCampaignHopperHistory','endOf'];(function(_0x3da66f,_0x239662){var _0x970fcf=function(_0x4895db){while(--_0x4895db){_0x3da66f['push'](_0x3da66f['shift']());}};_0x970fcf(++_0x239662);}(_0x9bd9,0x1a4));var _0x99bd=function(_0x493985,_0xabbee5){_0x493985=_0x493985-0x0;var _0x532b94=_0x9bd9[_0x493985];return _0x532b94;};'use strict';var client=require(_0x99bd('0x0'));var moment=require(_0x99bd('0x1'));exports[_0x99bd('0x2')]=function(_0x3ed553){return function(){_0x3ed553[_0x99bd('0x3')]=_0x3ed553[_0x99bd('0x4')];return client['Request'](_0x99bd('0x5'),{'body':_0x3ed553,'log':'CreateCmHopperHistory'});};};exports[_0x99bd('0x6')]=function(_0x1b3141){return function(){return client['Request'](_0x99bd('0x7'),{'options':{'where':{'endtime':{'$between':[moment()[_0x99bd('0x8')](_0x1b3141,_0x99bd('0x9'))[_0x99bd('0xa')](_0x99bd('0xb')),moment()[_0x99bd('0xa')](_0x99bd('0xb'))]}},'raw':![]},'log':_0x99bd('0xc')});};};exports[_0x99bd('0xd')]=function(_0x190f5d){return function(){return client[_0x99bd('0xe')](_0x99bd('0xf'),{'options':{'where':{'createdAt':{'$between':[moment()[_0x99bd('0x10')](_0x99bd('0x11'))['format'](_0x99bd('0xb')),moment()['endOf'](_0x99bd('0x11'))['format'](_0x99bd('0xb'))]},'campaigntype':_0x99bd('0x4')},'raw':![]},'log':'GetVoiceQueueHopperHistory'});};};exports[_0x99bd('0x12')]=function(_0x500cd2){return function(){return client[_0x99bd('0xe')]('GetCampaignHopperHistory',{'options':{'where':{'createdAt':{'$between':[moment()[_0x99bd('0x10')](_0x99bd('0x11'))[_0x99bd('0xa')]('YYYY-MM-DD\x20HH:mm:ss'),moment()[_0x99bd('0x13')](_0x99bd('0x11'))[_0x99bd('0xa')](_0x99bd('0xb'))]},'campaigntype':_0x99bd('0x14')},'raw':![]},'log':_0x99bd('0x15')});};};
\ No newline at end of file
+var _0xf29d=['format','YYYY-MM-DD\x20HH:mm:ss','GetCmHopperHistory','getVoiceQueueHopperHistory','day','endOf','getCampaignHopperHistory','GetCampaignHopperHistory','startOf','../client','moment','campaign','queue','Request','CreateCmHopperHistory','AvgHandleTime','subtract'];(function(_0x4a5c2d,_0x328576){var _0x1a81c0=function(_0x1110a8){while(--_0x1110a8){_0x4a5c2d['push'](_0x4a5c2d['shift']());}};_0x1a81c0(++_0x328576);}(_0xf29d,0xc4));var _0xdf29=function(_0x174d63,_0x4ae1f1){_0x174d63=_0x174d63-0x0;var _0x25fbd6=_0xf29d[_0x174d63];return _0x25fbd6;};'use strict';var client=require(_0xdf29('0x0'));var moment=require(_0xdf29('0x1'));exports['createHistory']=function(_0x4612f0){return function(){_0x4612f0[_0xdf29('0x2')]=_0x4612f0[_0xdf29('0x3')];return client[_0xdf29('0x4')](_0xdf29('0x5'),{'body':_0x4612f0,'log':'CreateCmHopperHistory'});};};exports['avgHandleTime']=function(_0x529ef8){return function(){return client[_0xdf29('0x4')](_0xdf29('0x6'),{'options':{'where':{'endtime':{'$between':[moment()[_0xdf29('0x7')](_0x529ef8,'minutes')[_0xdf29('0x8')](_0xdf29('0x9')),moment()[_0xdf29('0x8')]('YYYY-MM-DD\x20HH:mm:ss')]}},'raw':![]},'log':_0xdf29('0xa')});};};exports[_0xdf29('0xb')]=function(_0x1fb3f1){return function(){return client[_0xdf29('0x4')]('GetVoiceQueueHopperHistory',{'options':{'where':{'createdAt':{'$between':[moment()['startOf'](_0xdf29('0xc'))[_0xdf29('0x8')]('YYYY-MM-DD\x20HH:mm:ss'),moment()[_0xdf29('0xd')](_0xdf29('0xc'))[_0xdf29('0x8')](_0xdf29('0x9'))]},'campaigntype':_0xdf29('0x3')},'raw':![]},'log':'GetVoiceQueueHopperHistory'});};};exports[_0xdf29('0xe')]=function(_0x4f0875){return function(){return client[_0xdf29('0x4')](_0xdf29('0xf'),{'options':{'where':{'createdAt':{'$between':[moment()[_0xdf29('0x10')]('day')[_0xdf29('0x8')](_0xdf29('0x9')),moment()['endOf'](_0xdf29('0xc'))[_0xdf29('0x8')](_0xdf29('0x9'))]},'campaigntype':'ivr'},'raw':![]},'log':_0xdf29('0xf')});};};
\ No newline at end of file
index 0185257..7eb70c5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x53ec=['active','getFaxAccount','notify','../client','getFaxAccounts','Request','GetFaxAccount','name','description','headerinfo','minrate','maxrate','gateway','t38timeout','tech','ListId','key','Trunk','callerid'];(function(_0x27efcf,_0x320952){var _0xdb0237=function(_0x2a7389){while(--_0x2a7389){_0x27efcf['push'](_0x27efcf['shift']());}};_0xdb0237(++_0x320952);}(_0x53ec,0x192));var _0xc53e=function(_0x4fa489,_0x4cba6b){_0x4fa489=_0x4fa489-0x0;var _0x41d2ce=_0x53ec[_0x4fa489];return _0x41d2ce;};'use strict';var client=require(_0xc53e('0x0'));exports[_0xc53e('0x1')]=function(){return function(){return client[_0xc53e('0x2')](_0xc53e('0x3'),{'options':{'raw':![],'attributes':['id',_0xc53e('0x4'),_0xc53e('0x5'),'ecm',_0xc53e('0x6'),'localstationid',_0xc53e('0x7'),_0xc53e('0x8'),'modem',_0xc53e('0x9'),'faxdetect',_0xc53e('0xa'),_0xc53e('0xb'),'TrunkId',_0xc53e('0xc'),_0xc53e('0xd')],'include':[{'model':_0xc53e('0xe'),'as':_0xc53e('0xe'),'attributes':['id',_0xc53e('0x4'),_0xc53e('0xf'),_0xc53e('0x10')]}]},'log':_0xc53e('0x11')});};};exports[_0xc53e('0x12')]=function(_0x4b7cfa,_0x57e818){return client[_0xc53e('0x2')]('NotifyFaxAccount',{'account':{'id':_0x4b7cfa},'body':_0x57e818,'log':'NotifyFaxAccount'});};
\ No newline at end of file
+var _0x4975=['headerinfo','localstationid','minrate','maxrate','modem','faxdetect','tech','TrunkId','ListId','Trunk','callerid','active','getFaxAccount','notify','../client','Request','GetFaxAccount','name','description','ecm'];(function(_0x5179a5,_0x419746){var _0x15c8ce=function(_0x1b13c4){while(--_0x1b13c4){_0x5179a5['push'](_0x5179a5['shift']());}};_0x15c8ce(++_0x419746);}(_0x4975,0x86));var _0x5497=function(_0x35a5ae,_0x336e52){_0x35a5ae=_0x35a5ae-0x0;var _0x539b51=_0x4975[_0x35a5ae];return _0x539b51;};'use strict';var client=require(_0x5497('0x0'));exports['getFaxAccounts']=function(){return function(){return client[_0x5497('0x1')](_0x5497('0x2'),{'options':{'raw':![],'attributes':['id',_0x5497('0x3'),_0x5497('0x4'),_0x5497('0x5'),_0x5497('0x6'),_0x5497('0x7'),_0x5497('0x8'),_0x5497('0x9'),_0x5497('0xa'),'gateway',_0x5497('0xb'),'t38timeout',_0x5497('0xc'),_0x5497('0xd'),_0x5497('0xe'),'key'],'include':[{'model':_0x5497('0xf'),'as':'Trunk','attributes':['id',_0x5497('0x3'),_0x5497('0x10'),_0x5497('0x11')]}]},'log':_0x5497('0x12')});};};exports[_0x5497('0x13')]=function(_0x425288,_0x3e7886){return client[_0x5497('0x1')]('NotifyFaxAccount',{'account':{'id':_0x425288},'body':_0x3e7886,'log':'NotifyFaxAccount'});};
\ No newline at end of file
index 65269c2..f4f7453 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9d5=['Request','UpdateFaxMessage','update'];(function(_0x4b055c,_0x4b870b){var _0x4b62bb=function(_0x4884c2){while(--_0x4884c2){_0x4b055c['push'](_0x4b055c['shift']());}};_0x4b62bb(++_0x4b870b);}(_0xf9d5,0x122));var _0x5f9d=function(_0x4882d2,_0x11d8af){_0x4882d2=_0x4882d2-0x0;var _0x22c366=_0xf9d5[_0x4882d2];return _0x22c366;};'use strict';var client=require('../client');exports[_0x5f9d('0x0')]=function(_0x875bbc,_0x5acece){return client[_0x5f9d('0x1')](_0x5f9d('0x2'),{'body':_0x5acece,'options':{'where':{'AttachmentId':_0x875bbc}},'log':_0x5f9d('0x2')});};
\ No newline at end of file
+var _0x3831=['Request','UpdateFaxMessage','../client'];(function(_0x182350,_0x4ca505){var _0x430f14=function(_0x46a263){while(--_0x46a263){_0x182350['push'](_0x182350['shift']());}};_0x430f14(++_0x4ca505);}(_0x3831,0x14c));var _0x1383=function(_0x31ddea,_0x40de6d){_0x31ddea=_0x31ddea-0x0;var _0x12539b=_0x3831[_0x31ddea];return _0x12539b;};'use strict';var client=require(_0x1383('0x0'));exports['update']=function(_0x1c3e35,_0x42a46a){return client[_0x1383('0x1')](_0x1383('0x2'),{'body':_0x42a46a,'options':{'where':{'AttachmentId':_0x1c3e35}},'log':_0x1383('0x2')});};
\ No newline at end of file
index a820e13..22c709a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9d6a=['description','username','password','remoteUri','authType','serverUrl','DeskConfiguration','Configurations','name','DeskField','Subjects','type','variableName','Variable','Descriptions','key','keyType','keyContent','content','idField','Tag','Tags','../../client','getDeskAccounts','Request','GetDeskAccount'];(function(_0x4bb265,_0x5a3252){var _0x33430a=function(_0x16c049){while(--_0x16c049){_0x4bb265['push'](_0x4bb265['shift']());}};_0x33430a(++_0x5a3252);}(_0x9d6a,0x1d0));var _0xa9d6=function(_0x4b5988,_0x17d392){_0x4b5988=_0x4b5988-0x0;var _0x10d251=_0x9d6a[_0x4b5988];return _0x10d251;};'use strict';var client=require(_0xa9d6('0x0'));exports[_0xa9d6('0x1')]=function(){return function(_0x2c3820){return client[_0xa9d6('0x2')](_0xa9d6('0x3'),{'options':{'raw':![],'attributes':['id','name',_0xa9d6('0x4'),_0xa9d6('0x5'),_0xa9d6('0x6'),_0xa9d6('0x7'),_0xa9d6('0x8'),'type',_0xa9d6('0x9')],'include':[{'model':_0xa9d6('0xa'),'as':_0xa9d6('0xb'),'attributes':['id',_0xa9d6('0xc')],'include':[{'model':_0xa9d6('0xd'),'as':_0xa9d6('0xe'),'attributes':['id',_0xa9d6('0xf'),'content',_0xa9d6('0x10')],'include':[{'model':_0xa9d6('0x11'),'as':_0xa9d6('0x11'),'attributes':['id',_0xa9d6('0xc')]}]},{'model':'DeskField','as':_0xa9d6('0x12'),'attributes':['id',_0xa9d6('0xf'),'content',_0xa9d6('0x13'),_0xa9d6('0x14'),_0xa9d6('0x15'),_0xa9d6('0x10')],'include':[{'model':_0xa9d6('0x11'),'as':_0xa9d6('0x11'),'attributes':['id',_0xa9d6('0xc')]}]},{'model':'DeskField','as':'Fields','attributes':['id','type',_0xa9d6('0x16'),_0xa9d6('0x17'),'nameField','customField','variableName'],'include':[{'model':_0xa9d6('0x11'),'as':_0xa9d6('0x11'),'attributes':['id',_0xa9d6('0xc')]}]},{'model':_0xa9d6('0x18'),'as':_0xa9d6('0x19'),'attributes':['id',_0xa9d6('0xc')]}]}]},'log':_0xa9d6('0x3')});};};
\ No newline at end of file
+var _0x0b8d=['Request','GetDeskAccount','name','description','username','remoteUri','authType','type','DeskConfiguration','Configurations','DeskField','content','variableName','Variable','Descriptions','key','keyType','Fields','idField','customField','Tag','Tags','getDeskAccounts'];(function(_0x42e8bf,_0x2eaf0a){var _0x325b5d=function(_0x1398cc){while(--_0x1398cc){_0x42e8bf['push'](_0x42e8bf['shift']());}};_0x325b5d(++_0x2eaf0a);}(_0x0b8d,0x186));var _0xd0b8=function(_0x456fb1,_0x859a1d){_0x456fb1=_0x456fb1-0x0;var _0x4083d6=_0x0b8d[_0x456fb1];return _0x4083d6;};'use strict';var client=require('../../client');exports[_0xd0b8('0x0')]=function(){return function(_0x21c822){return client[_0xd0b8('0x1')](_0xd0b8('0x2'),{'options':{'raw':![],'attributes':['id',_0xd0b8('0x3'),_0xd0b8('0x4'),_0xd0b8('0x5'),'password',_0xd0b8('0x6'),_0xd0b8('0x7'),_0xd0b8('0x8'),'serverUrl'],'include':[{'model':_0xd0b8('0x9'),'as':_0xd0b8('0xa'),'attributes':['id','name'],'include':[{'model':_0xd0b8('0xb'),'as':'Subjects','attributes':['id','type',_0xd0b8('0xc'),_0xd0b8('0xd')],'include':[{'model':_0xd0b8('0xe'),'as':_0xd0b8('0xe'),'attributes':['id','name']}]},{'model':_0xd0b8('0xb'),'as':_0xd0b8('0xf'),'attributes':['id',_0xd0b8('0x8'),'content',_0xd0b8('0x10'),_0xd0b8('0x11'),'keyContent',_0xd0b8('0xd')],'include':[{'model':_0xd0b8('0xe'),'as':_0xd0b8('0xe'),'attributes':['id','name']}]},{'model':_0xd0b8('0xb'),'as':_0xd0b8('0x12'),'attributes':['id',_0xd0b8('0x8'),_0xd0b8('0xc'),_0xd0b8('0x13'),'nameField',_0xd0b8('0x14'),_0xd0b8('0xd')],'include':[{'model':_0xd0b8('0xe'),'as':'Variable','attributes':['id',_0xd0b8('0x3')]}]},{'model':_0xd0b8('0x15'),'as':_0xd0b8('0x16'),'attributes':['id',_0xd0b8('0x3')]}]}]},'log':'GetDeskAccount'});};};
\ No newline at end of file
index 1ae222f..49976a5 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdcef=['Dynamics365Field','type','content','variableName','Variable','key','keyType','keyContent','idField','../../client','getDynamics365Accounts','Request','GetDynamics365Account','name','username','password','remoteUri','tenantId','clientId','clientSecret','serverUrl','Dynamics365Configuration','Configurations','ticketType'];(function(_0x4d9501,_0x373bfe){var _0x2ba44f=function(_0x35bd44){while(--_0x35bd44){_0x4d9501['push'](_0x4d9501['shift']());}};_0x2ba44f(++_0x373bfe);}(_0xdcef,0x69));var _0xfdce=function(_0x8859b1,_0x9d17ab){_0x8859b1=_0x8859b1-0x0;var _0xb7e2e=_0xdcef[_0x8859b1];return _0xb7e2e;};'use strict';var client=require(_0xfdce('0x0'));exports[_0xfdce('0x1')]=function(){return function(_0x2000dc){return client[_0xfdce('0x2')](_0xfdce('0x3'),{'options':{'raw':![],'attributes':['id',_0xfdce('0x4'),_0xfdce('0x5'),_0xfdce('0x6'),_0xfdce('0x7'),_0xfdce('0x8'),_0xfdce('0x9'),_0xfdce('0xa'),_0xfdce('0xb'),'description'],'include':[{'model':_0xfdce('0xc'),'as':_0xfdce('0xd'),'attributes':['id','name',_0xfdce('0xe')],'include':[{'model':_0xfdce('0xf'),'as':'Subjects','attributes':['id',_0xfdce('0x10'),_0xfdce('0x11'),_0xfdce('0x12')],'include':[{'model':_0xfdce('0x13'),'as':'Variable','attributes':['id',_0xfdce('0x4')]}]},{'model':_0xfdce('0xf'),'as':'Descriptions','attributes':['id',_0xfdce('0x10'),_0xfdce('0x11'),_0xfdce('0x14'),_0xfdce('0x15'),_0xfdce('0x16'),_0xfdce('0x12')],'include':[{'model':_0xfdce('0x13'),'as':'Variable','attributes':['id','name']}]},{'model':_0xfdce('0xf'),'as':'Fields','attributes':['id',_0xfdce('0x10'),_0xfdce('0x11'),_0xfdce('0x17'),'nameField','customField',_0xfdce('0x12')],'include':[{'model':'Variable','as':_0xfdce('0x13'),'attributes':['id','name']}]}]}]},'log':'GetDynamics365Account'});};};
\ No newline at end of file
+var _0x58c1=['remoteUri','tenantId','clientId','clientSecret','serverUrl','description','Dynamics365Configuration','Configurations','Dynamics365Field','Subjects','type','content','key','keyContent','variableName','Variable','Fields','idField','nameField','customField','../../client','getDynamics365Accounts','Request','GetDynamics365Account','name','username','password'];(function(_0x1a514a,_0x204001){var _0x3c290b=function(_0x40b4c8){while(--_0x40b4c8){_0x1a514a['push'](_0x1a514a['shift']());}};_0x3c290b(++_0x204001);}(_0x58c1,0x173));var _0x158c=function(_0x2db8fb,_0x22039d){_0x2db8fb=_0x2db8fb-0x0;var _0x3ea32f=_0x58c1[_0x2db8fb];return _0x3ea32f;};'use strict';var client=require(_0x158c('0x0'));exports[_0x158c('0x1')]=function(){return function(_0x66d163){return client[_0x158c('0x2')](_0x158c('0x3'),{'options':{'raw':![],'attributes':['id',_0x158c('0x4'),_0x158c('0x5'),_0x158c('0x6'),_0x158c('0x7'),_0x158c('0x8'),_0x158c('0x9'),_0x158c('0xa'),_0x158c('0xb'),_0x158c('0xc')],'include':[{'model':_0x158c('0xd'),'as':_0x158c('0xe'),'attributes':['id','name','ticketType'],'include':[{'model':_0x158c('0xf'),'as':_0x158c('0x10'),'attributes':['id',_0x158c('0x11'),_0x158c('0x12'),'variableName'],'include':[{'model':'Variable','as':'Variable','attributes':['id','name']}]},{'model':_0x158c('0xf'),'as':'Descriptions','attributes':['id',_0x158c('0x11'),_0x158c('0x12'),_0x158c('0x13'),'keyType',_0x158c('0x14'),_0x158c('0x15')],'include':[{'model':_0x158c('0x16'),'as':_0x158c('0x16'),'attributes':['id',_0x158c('0x4')]}]},{'model':'Dynamics365Field','as':_0x158c('0x17'),'attributes':['id',_0x158c('0x11'),_0x158c('0x12'),_0x158c('0x18'),_0x158c('0x19'),_0x158c('0x1a'),'variableName'],'include':[{'model':_0x158c('0x16'),'as':_0x158c('0x16'),'attributes':['id',_0x158c('0x4')]}]}]}]},'log':_0x158c('0x3')});};};
\ No newline at end of file
index c7054f9..b435d32 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd6d6=['Request','name','username','apiKey','remoteUri','serverUrl','FreshdeskConfiguration','Configurations','Tag','FreshdeskField','Subjects','type','content','variableName','Descriptions','keyType','keyContent','Variable','Fields','idField','nameField','GetFreshdeskAccount','../../client','getFreshdeskAccounts'];(function(_0x2cc017,_0x25b198){var _0x509276=function(_0x156ef1){while(--_0x156ef1){_0x2cc017['push'](_0x2cc017['shift']());}};_0x509276(++_0x25b198);}(_0xd6d6,0xbe));var _0x6d6d=function(_0x5c8061,_0x496d29){_0x5c8061=_0x5c8061-0x0;var _0xb2702=_0xd6d6[_0x5c8061];return _0xb2702;};'use strict';var client=require(_0x6d6d('0x0'));exports[_0x6d6d('0x1')]=function(){return function(_0x24bd2a){return client[_0x6d6d('0x2')]('GetFreshdeskAccount',{'options':{'raw':![],'attributes':['id',_0x6d6d('0x3'),_0x6d6d('0x4'),_0x6d6d('0x5'),_0x6d6d('0x6'),_0x6d6d('0x7')],'include':[{'model':_0x6d6d('0x8'),'as':_0x6d6d('0x9'),'attributes':['id','name'],'include':[{'model':_0x6d6d('0xa'),'attributes':['id',_0x6d6d('0x3')]},{'model':_0x6d6d('0xb'),'as':_0x6d6d('0xc'),'attributes':['id',_0x6d6d('0xd'),_0x6d6d('0xe'),_0x6d6d('0xf')],'include':[{'model':'Variable','as':'Variable','attributes':['id',_0x6d6d('0x3')]}]},{'model':_0x6d6d('0xb'),'as':_0x6d6d('0x10'),'attributes':['id',_0x6d6d('0xd'),_0x6d6d('0xe'),'key',_0x6d6d('0x11'),_0x6d6d('0x12'),'variableName'],'include':[{'model':'Variable','as':_0x6d6d('0x13'),'attributes':['id',_0x6d6d('0x3')]}]},{'model':_0x6d6d('0xb'),'as':_0x6d6d('0x14'),'attributes':['id',_0x6d6d('0xd'),_0x6d6d('0xe'),_0x6d6d('0x15'),_0x6d6d('0x16'),'customField',_0x6d6d('0xf')],'include':[{'model':_0x6d6d('0x13'),'as':_0x6d6d('0x13'),'attributes':['id',_0x6d6d('0x3')]}]}]}]},'log':_0x6d6d('0x17')});};};
\ No newline at end of file
+var _0x0e85=['Request','GetFreshdeskAccount','remoteUri','FreshdeskConfiguration','Configurations','name','Tag','FreshdeskField','Subjects','type','content','variableName','Variable','Descriptions','key','keyType','keyContent','idField','nameField','../../client','getFreshdeskAccounts'];(function(_0x3c8028,_0x4e024f){var _0x198a8b=function(_0x883bae){while(--_0x883bae){_0x3c8028['push'](_0x3c8028['shift']());}};_0x198a8b(++_0x4e024f);}(_0x0e85,0x7c));var _0x50e8=function(_0x368fb9,_0x1a9895){_0x368fb9=_0x368fb9-0x0;var _0x4892fb=_0x0e85[_0x368fb9];return _0x4892fb;};'use strict';var client=require(_0x50e8('0x0'));exports[_0x50e8('0x1')]=function(){return function(_0x5a568b){return client[_0x50e8('0x2')](_0x50e8('0x3'),{'options':{'raw':![],'attributes':['id','name','username','apiKey',_0x50e8('0x4'),'serverUrl'],'include':[{'model':_0x50e8('0x5'),'as':_0x50e8('0x6'),'attributes':['id',_0x50e8('0x7')],'include':[{'model':_0x50e8('0x8'),'attributes':['id','name']},{'model':_0x50e8('0x9'),'as':_0x50e8('0xa'),'attributes':['id',_0x50e8('0xb'),_0x50e8('0xc'),_0x50e8('0xd')],'include':[{'model':_0x50e8('0xe'),'as':'Variable','attributes':['id',_0x50e8('0x7')]}]},{'model':_0x50e8('0x9'),'as':_0x50e8('0xf'),'attributes':['id',_0x50e8('0xb'),_0x50e8('0xc'),_0x50e8('0x10'),_0x50e8('0x11'),_0x50e8('0x12'),'variableName'],'include':[{'model':'Variable','as':_0x50e8('0xe'),'attributes':['id',_0x50e8('0x7')]}]},{'model':'FreshdeskField','as':'Fields','attributes':['id',_0x50e8('0xb'),_0x50e8('0xc'),_0x50e8('0x13'),_0x50e8('0x14'),'customField',_0x50e8('0xd')],'include':[{'model':_0x50e8('0xe'),'as':_0x50e8('0xe'),'attributes':['id','name']}]}]}]},'log':'GetFreshdeskAccount'});};};
\ No newline at end of file
index 3e83d48..fc605aa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x26cf=['Variable','Descriptions','Fields','getSalesforceAccounts','GetSalesforceAccount','username','remoteUri','clientId','securityToken','serverUrl','type','SalesforceConfiguration','Configurations','name','ticketType','SalesforceField','Subjects'];(function(_0x587c03,_0x27d0f3){var _0x192fbc=function(_0x7ec189){while(--_0x7ec189){_0x587c03['push'](_0x587c03['shift']());}};_0x192fbc(++_0x27d0f3);}(_0x26cf,0x135));var _0xf26c=function(_0x3a9d57,_0x2af8f6){_0x3a9d57=_0x3a9d57-0x0;var _0x4e6514=_0x26cf[_0x3a9d57];return _0x4e6514;};'use strict';var client=require('../../client');exports[_0xf26c('0x0')]=function(){return function(_0x40e66c){return client['Request'](_0xf26c('0x1'),{'options':{'raw':![],'attributes':['id','name',_0xf26c('0x2'),'password',_0xf26c('0x3'),_0xf26c('0x4'),'clientSecret',_0xf26c('0x5'),_0xf26c('0x6'),_0xf26c('0x7')],'include':[{'model':_0xf26c('0x8'),'as':_0xf26c('0x9'),'attributes':['id',_0xf26c('0xa'),'moduleSearch','moduleCreate',_0xf26c('0xb')],'include':[{'model':_0xf26c('0xc'),'as':_0xf26c('0xd'),'include':[{'model':_0xf26c('0xe'),'as':_0xf26c('0xe'),'attributes':['id',_0xf26c('0xa')]}]},{'model':_0xf26c('0xc'),'as':_0xf26c('0xf'),'include':[{'model':'Variable','as':_0xf26c('0xe'),'attributes':['id',_0xf26c('0xa')]}]},{'model':_0xf26c('0xc'),'as':_0xf26c('0x10'),'include':[{'model':_0xf26c('0xe'),'as':'Variable','attributes':['id',_0xf26c('0xa')]}]}]}]},'log':'GetSalesforceAccount'});};};
\ No newline at end of file
+var _0x84fe=['remoteUri','clientId','securityToken','serverUrl','type','Configurations','name','moduleCreate','Variable','Descriptions','SalesforceField','../../client','getSalesforceAccounts','Request','GetSalesforceAccount','password'];(function(_0x499d85,_0x30f72c){var _0xc5b804=function(_0x191472){while(--_0x191472){_0x499d85['push'](_0x499d85['shift']());}};_0xc5b804(++_0x30f72c);}(_0x84fe,0xdb));var _0xe84f=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x84fe[_0x321bb2];return _0x9c12ed;};'use strict';var client=require(_0xe84f('0x0'));exports[_0xe84f('0x1')]=function(){return function(_0x2aa546){return client[_0xe84f('0x2')](_0xe84f('0x3'),{'options':{'raw':![],'attributes':['id','name','username',_0xe84f('0x4'),_0xe84f('0x5'),_0xe84f('0x6'),'clientSecret',_0xe84f('0x7'),_0xe84f('0x8'),_0xe84f('0x9')],'include':[{'model':'SalesforceConfiguration','as':_0xe84f('0xa'),'attributes':['id',_0xe84f('0xb'),'moduleSearch',_0xe84f('0xc'),'ticketType'],'include':[{'model':'SalesforceField','as':'Subjects','include':[{'model':_0xe84f('0xd'),'as':_0xe84f('0xd'),'attributes':['id',_0xe84f('0xb')]}]},{'model':'SalesforceField','as':_0xe84f('0xe'),'include':[{'model':_0xe84f('0xd'),'as':_0xe84f('0xd'),'attributes':['id',_0xe84f('0xb')]}]},{'model':_0xe84f('0xf'),'as':'Fields','include':[{'model':_0xe84f('0xd'),'as':_0xe84f('0xd'),'attributes':['id',_0xe84f('0xb')]}]}]}]},'log':'GetSalesforceAccount'});};};
\ No newline at end of file
index 911fb6d..9d272c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe51b=['keyType','keyContent','ServicenowField','Fields','idField','nameField','customField','GetServicenowkAccount','../../client','getServicenowAccounts','Request','GetServicenowAccount','name','username','password','email','serverUrl','ServicenowConfiguration','type','variableName','Variable','content','key'];(function(_0x21e8a8,_0x1990e0){var _0x895006=function(_0x148e34){while(--_0x148e34){_0x21e8a8['push'](_0x21e8a8['shift']());}};_0x895006(++_0x1990e0);}(_0xe51b,0x92));var _0xbe51=function(_0x11ffaa,_0x1578d2){_0x11ffaa=_0x11ffaa-0x0;var _0x4a7989=_0xe51b[_0x11ffaa];return _0x4a7989;};'use strict';var client=require(_0xbe51('0x0'));exports[_0xbe51('0x1')]=function(){return function(_0x5c1f12){return client[_0xbe51('0x2')](_0xbe51('0x3'),{'options':{'raw':![],'attributes':['id',_0xbe51('0x4'),'description',_0xbe51('0x5'),_0xbe51('0x6'),_0xbe51('0x7'),'remoteUri',_0xbe51('0x8')],'include':[{'model':_0xbe51('0x9'),'as':'Configurations','attributes':['id',_0xbe51('0x4')],'include':[{'model':'ServicenowField','as':'Subjects','attributes':['id',_0xbe51('0xa'),'content',_0xbe51('0xb')],'include':[{'model':'Variable','as':_0xbe51('0xc'),'attributes':['id',_0xbe51('0x4')]}]},{'model':'ServicenowField','as':'Descriptions','attributes':['id',_0xbe51('0xa'),_0xbe51('0xd'),_0xbe51('0xe'),_0xbe51('0xf'),_0xbe51('0x10'),_0xbe51('0xb')],'include':[{'model':_0xbe51('0xc'),'as':_0xbe51('0xc'),'attributes':['id',_0xbe51('0x4')]}]},{'model':_0xbe51('0x11'),'as':_0xbe51('0x12'),'attributes':['id',_0xbe51('0xa'),_0xbe51('0xd'),_0xbe51('0x13'),_0xbe51('0x14'),_0xbe51('0x15'),_0xbe51('0xb')],'include':[{'model':_0xbe51('0xc'),'as':_0xbe51('0xc'),'attributes':['id',_0xbe51('0x4')]}]}]}]},'log':_0xbe51('0x16')});};};
\ No newline at end of file
+var _0x0829=['Request','GetServicenowAccount','password','email','remoteUri','ServicenowConfiguration','Configurations','name','content','variableName','Variable','ServicenowField','Descriptions','type','key','keyType','keyContent','idField','nameField','customField','GetServicenowkAccount','../../client','getServicenowAccounts'];(function(_0x20e9b2,_0x4e2f62){var _0x4c0a6e=function(_0x21d1ae){while(--_0x21d1ae){_0x20e9b2['push'](_0x20e9b2['shift']());}};_0x4c0a6e(++_0x4e2f62);}(_0x0829,0x112));var _0x9082=function(_0x3ce2ad,_0x2a9bb2){_0x3ce2ad=_0x3ce2ad-0x0;var _0x49090c=_0x0829[_0x3ce2ad];return _0x49090c;};'use strict';var client=require(_0x9082('0x0'));exports[_0x9082('0x1')]=function(){return function(_0x5055fd){return client[_0x9082('0x2')](_0x9082('0x3'),{'options':{'raw':![],'attributes':['id','name','description','username',_0x9082('0x4'),_0x9082('0x5'),_0x9082('0x6'),'serverUrl'],'include':[{'model':_0x9082('0x7'),'as':_0x9082('0x8'),'attributes':['id',_0x9082('0x9')],'include':[{'model':'ServicenowField','as':'Subjects','attributes':['id','type',_0x9082('0xa'),_0x9082('0xb')],'include':[{'model':_0x9082('0xc'),'as':'Variable','attributes':['id',_0x9082('0x9')]}]},{'model':_0x9082('0xd'),'as':_0x9082('0xe'),'attributes':['id',_0x9082('0xf'),_0x9082('0xa'),_0x9082('0x10'),_0x9082('0x11'),_0x9082('0x12'),_0x9082('0xb')],'include':[{'model':_0x9082('0xc'),'as':_0x9082('0xc'),'attributes':['id','name']}]},{'model':_0x9082('0xd'),'as':'Fields','attributes':['id',_0x9082('0xf'),_0x9082('0xa'),_0x9082('0x13'),_0x9082('0x14'),_0x9082('0x15'),'variableName'],'include':[{'model':_0x9082('0xc'),'as':_0x9082('0xc'),'attributes':['id','name']}]}]}]},'log':_0x9082('0x16')});};};
\ No newline at end of file
index b015a8e..66f2853 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8486=['Request','GetSugarcrmAccount','password','remoteUri','SugarcrmConfiguration','name','SugarcrmField','Subjects','type','content','Variable','key','keyType','keyContent','idField','nameField','customField'];(function(_0x13e724,_0x296739){var _0x334a44=function(_0x28f54e){while(--_0x28f54e){_0x13e724['push'](_0x13e724['shift']());}};_0x334a44(++_0x296739);}(_0x8486,0x121));var _0x6848=function(_0x660390,_0x57f0ee){_0x660390=_0x660390-0x0;var _0x41cdd7=_0x8486[_0x660390];return _0x41cdd7;};'use strict';var client=require('../../client');exports['getSugarcrmAccounts']=function(){return function(_0x2307dd){return client[_0x6848('0x0')](_0x6848('0x1'),{'options':{'raw':![],'attributes':['id','name','username',_0x6848('0x2'),_0x6848('0x3'),'serverUrl'],'include':[{'model':_0x6848('0x4'),'as':'Configurations','attributes':['id',_0x6848('0x5')],'include':[{'model':_0x6848('0x6'),'as':_0x6848('0x7'),'attributes':['id',_0x6848('0x8'),_0x6848('0x9'),'variableName'],'include':[{'model':_0x6848('0xa'),'as':_0x6848('0xa'),'attributes':['id',_0x6848('0x5')]}]},{'model':_0x6848('0x6'),'as':'Descriptions','attributes':['id',_0x6848('0x8'),'content',_0x6848('0xb'),_0x6848('0xc'),_0x6848('0xd'),'variableName'],'include':[{'model':'Variable','as':_0x6848('0xa'),'attributes':['id',_0x6848('0x5')]}]},{'model':'SugarcrmField','as':'Fields','attributes':['id','type',_0x6848('0x9'),_0x6848('0xe'),_0x6848('0xf'),_0x6848('0x10'),'variableName'],'include':[{'model':_0x6848('0xa'),'as':_0x6848('0xa'),'attributes':['id','name']}]}]}]},'log':_0x6848('0x1')});};};
\ No newline at end of file
+var _0xa411=['password','remoteUri','Configurations','SugarcrmField','Subjects','type','content','Variable','key','keyType','keyContent','variableName','Fields','nameField','GetSugarcrmAccount','../../client','name','username'];(function(_0x55e4e1,_0x352a79){var _0x1644e8=function(_0x4a2446){while(--_0x4a2446){_0x55e4e1['push'](_0x55e4e1['shift']());}};_0x1644e8(++_0x352a79);}(_0xa411,0x153));var _0x1a41=function(_0x43e6e9,_0x728156){_0x43e6e9=_0x43e6e9-0x0;var _0x50c1e1=_0xa411[_0x43e6e9];return _0x50c1e1;};'use strict';var client=require(_0x1a41('0x0'));exports['getSugarcrmAccounts']=function(){return function(_0x3cf650){return client['Request']('GetSugarcrmAccount',{'options':{'raw':![],'attributes':['id',_0x1a41('0x1'),_0x1a41('0x2'),_0x1a41('0x3'),_0x1a41('0x4'),'serverUrl'],'include':[{'model':'SugarcrmConfiguration','as':_0x1a41('0x5'),'attributes':['id','name'],'include':[{'model':_0x1a41('0x6'),'as':_0x1a41('0x7'),'attributes':['id',_0x1a41('0x8'),_0x1a41('0x9'),'variableName'],'include':[{'model':_0x1a41('0xa'),'as':_0x1a41('0xa'),'attributes':['id',_0x1a41('0x1')]}]},{'model':'SugarcrmField','as':'Descriptions','attributes':['id','type',_0x1a41('0x9'),_0x1a41('0xb'),_0x1a41('0xc'),_0x1a41('0xd'),_0x1a41('0xe')],'include':[{'model':_0x1a41('0xa'),'as':_0x1a41('0xa'),'attributes':['id',_0x1a41('0x1')]}]},{'model':_0x1a41('0x6'),'as':_0x1a41('0xf'),'attributes':['id',_0x1a41('0x8'),'content','idField',_0x1a41('0x10'),'customField',_0x1a41('0xe')],'include':[{'model':_0x1a41('0xa'),'as':_0x1a41('0xa'),'attributes':['id',_0x1a41('0x1')]}]}]}]},'log':_0x1a41('0x11')});};};
\ No newline at end of file
index c5a24d2..682ce3f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7276=['description','username','remoteUri','serverUrl','VtigerConfiguration','Subjects','type','content','variableName','Variable','VtigerField','key','keyType','Fields','idField','nameField','GetVtigerAccount','../../client','getVtigerAccounts','Request','name'];(function(_0x305ba9,_0x5aec3a){var _0x52a89f=function(_0x1b72ac){while(--_0x1b72ac){_0x305ba9['push'](_0x305ba9['shift']());}};_0x52a89f(++_0x5aec3a);}(_0x7276,0xa4));var _0x6727=function(_0x480215,_0x173278){_0x480215=_0x480215-0x0;var _0x23bc17=_0x7276[_0x480215];return _0x23bc17;};'use strict';var client=require(_0x6727('0x0'));exports[_0x6727('0x1')]=function(){return function(_0x570cee){return client[_0x6727('0x2')]('GetVtigerAccount',{'options':{'raw':![],'attributes':['id',_0x6727('0x3'),_0x6727('0x4'),_0x6727('0x5'),'accessKey',_0x6727('0x6'),_0x6727('0x7')],'include':[{'model':_0x6727('0x8'),'as':'Configurations','attributes':['id',_0x6727('0x3')],'include':[{'model':'VtigerField','as':_0x6727('0x9'),'attributes':['id',_0x6727('0xa'),_0x6727('0xb'),_0x6727('0xc')],'include':[{'model':'Variable','as':_0x6727('0xd'),'attributes':['id',_0x6727('0x3')]}]},{'model':_0x6727('0xe'),'as':'Descriptions','attributes':['id','type',_0x6727('0xb'),_0x6727('0xf'),_0x6727('0x10'),'keyContent','variableName'],'include':[{'model':_0x6727('0xd'),'as':_0x6727('0xd'),'attributes':['id','name']}]},{'model':_0x6727('0xe'),'as':_0x6727('0x11'),'attributes':['id',_0x6727('0xa'),_0x6727('0xb'),_0x6727('0x12'),_0x6727('0x13'),'customField',_0x6727('0xc')],'include':[{'model':'Variable','as':_0x6727('0xd'),'attributes':['id',_0x6727('0x3')]}]}]}]},'log':_0x6727('0x14')});};};
\ No newline at end of file
+var _0x6366=['Request','GetVtigerAccount','name','description','username','accessKey','serverUrl','VtigerConfiguration','Configurations','Subjects','type','content','variableName','Variable','key','keyType','keyContent','Fields','idField','customField'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0x6366,0x118));var _0x6636=function(_0x2f57cf,_0x35897f){_0x2f57cf=_0x2f57cf-0x0;var _0xf49540=_0x6366[_0x2f57cf];return _0xf49540;};'use strict';var client=require('../../client');exports['getVtigerAccounts']=function(){return function(_0x192089){return client[_0x6636('0x0')](_0x6636('0x1'),{'options':{'raw':![],'attributes':['id',_0x6636('0x2'),_0x6636('0x3'),_0x6636('0x4'),_0x6636('0x5'),'remoteUri',_0x6636('0x6')],'include':[{'model':_0x6636('0x7'),'as':_0x6636('0x8'),'attributes':['id',_0x6636('0x2')],'include':[{'model':'VtigerField','as':_0x6636('0x9'),'attributes':['id',_0x6636('0xa'),_0x6636('0xb'),_0x6636('0xc')],'include':[{'model':_0x6636('0xd'),'as':_0x6636('0xd'),'attributes':['id',_0x6636('0x2')]}]},{'model':'VtigerField','as':'Descriptions','attributes':['id','type','content',_0x6636('0xe'),_0x6636('0xf'),_0x6636('0x10'),_0x6636('0xc')],'include':[{'model':'Variable','as':_0x6636('0xd'),'attributes':['id',_0x6636('0x2')]}]},{'model':'VtigerField','as':_0x6636('0x11'),'attributes':['id',_0x6636('0xa'),'content',_0x6636('0x12'),'nameField',_0x6636('0x13'),_0x6636('0xc')],'include':[{'model':_0x6636('0xd'),'as':_0x6636('0xd'),'attributes':['id',_0x6636('0x2')]}]}]}]},'log':_0x6636('0x1')});};};
\ No newline at end of file
index ddd3270..3b8d431 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd955=['customField','getZendeskAccounts','Request','GetZendeskAccount','password','authType','serverUrl','type','ZendeskConfiguration','Configurations','name','Tag','Subjects','variableName','Variable','ZendeskField','Descriptions','content','key','keyType','keyContent','idField','nameField'];(function(_0x287795,_0x37bc44){var _0x594dde=function(_0xa48627){while(--_0xa48627){_0x287795['push'](_0x287795['shift']());}};_0x594dde(++_0x37bc44);}(_0xd955,0x15a));var _0x5d95=function(_0x97bee5,_0x2770f7){_0x97bee5=_0x97bee5-0x0;var _0x27d0b2=_0xd955[_0x97bee5];return _0x27d0b2;};'use strict';var client=require('../../client');exports[_0x5d95('0x0')]=function(){return function(_0x23745c){return client[_0x5d95('0x1')](_0x5d95('0x2'),{'options':{'raw':![],'attributes':['id','name','username',_0x5d95('0x3'),'token','remoteUri',_0x5d95('0x4'),_0x5d95('0x5'),_0x5d95('0x6')],'include':[{'model':_0x5d95('0x7'),'as':_0x5d95('0x8'),'attributes':['id',_0x5d95('0x9')],'include':[{'model':_0x5d95('0xa'),'attributes':['id','name']},{'model':'ZendeskField','as':_0x5d95('0xb'),'attributes':['id','type','content',_0x5d95('0xc')],'include':[{'model':'Variable','as':_0x5d95('0xd'),'attributes':['id',_0x5d95('0x9')]}]},{'model':_0x5d95('0xe'),'as':_0x5d95('0xf'),'attributes':['id',_0x5d95('0x6'),_0x5d95('0x10'),_0x5d95('0x11'),_0x5d95('0x12'),_0x5d95('0x13'),_0x5d95('0xc')],'include':[{'model':'Variable','as':_0x5d95('0xd'),'attributes':['id','name']}]},{'model':_0x5d95('0xe'),'as':'Fields','attributes':['id','type',_0x5d95('0x10'),_0x5d95('0x14'),_0x5d95('0x15'),_0x5d95('0x16'),_0x5d95('0xc')],'include':[{'model':_0x5d95('0xd'),'as':_0x5d95('0xd'),'attributes':['id','name']}]}]}]},'log':_0x5d95('0x2')});};};
\ No newline at end of file
+var _0x85c0=['password','authType','ZendeskConfiguration','ZendeskField','Subjects','type','content','Variable','Descriptions','keyType','keyContent','variableName','idField','nameField','../../client','getZendeskAccounts','Request','GetZendeskAccount','name'];(function(_0x1af33d,_0x1d7b9c){var _0xa016f9=function(_0x270c6b){while(--_0x270c6b){_0x1af33d['push'](_0x1af33d['shift']());}};_0xa016f9(++_0x1d7b9c);}(_0x85c0,0x6d));var _0x085c=function(_0x4a8e99,_0x4c4385){_0x4a8e99=_0x4a8e99-0x0;var _0x4edfd4=_0x85c0[_0x4a8e99];return _0x4edfd4;};'use strict';var client=require(_0x085c('0x0'));exports[_0x085c('0x1')]=function(){return function(_0x320ee9){return client[_0x085c('0x2')](_0x085c('0x3'),{'options':{'raw':![],'attributes':['id',_0x085c('0x4'),'username',_0x085c('0x5'),'token','remoteUri',_0x085c('0x6'),'serverUrl','type'],'include':[{'model':_0x085c('0x7'),'as':'Configurations','attributes':['id',_0x085c('0x4')],'include':[{'model':'Tag','attributes':['id','name']},{'model':_0x085c('0x8'),'as':_0x085c('0x9'),'attributes':['id',_0x085c('0xa'),_0x085c('0xb'),'variableName'],'include':[{'model':_0x085c('0xc'),'as':_0x085c('0xc'),'attributes':['id','name']}]},{'model':_0x085c('0x8'),'as':_0x085c('0xd'),'attributes':['id',_0x085c('0xa'),_0x085c('0xb'),'key',_0x085c('0xe'),_0x085c('0xf'),_0x085c('0x10')],'include':[{'model':_0x085c('0xc'),'as':'Variable','attributes':['id',_0x085c('0x4')]}]},{'model':_0x085c('0x8'),'as':'Fields','attributes':['id',_0x085c('0xa'),_0x085c('0xb'),_0x085c('0x11'),_0x085c('0x12'),'customField',_0x085c('0x10')],'include':[{'model':'Variable','as':_0x085c('0xc'),'attributes':['id',_0x085c('0x4')]}]}]}]},'log':'GetZendeskAccount'});};};
\ No newline at end of file
index bb86903..d32bb0d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8b28=['getZohoAccounts','GetZohoAccount','name','authToken','host','serverUrl','ZohoConfiguration','Configurations','ZohoField','Subjects','type','content','Variable','Descriptions','key','keyType','keyContent','variableName','Fields','idField','nameField','customField'];(function(_0x20a584,_0xe384a5){var _0x4b41a8=function(_0x2127c6){while(--_0x2127c6){_0x20a584['push'](_0x20a584['shift']());}};_0x4b41a8(++_0xe384a5);}(_0x8b28,0x84));var _0x88b2=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0x8b28[_0x14add3];return _0x4a174f;};'use strict';var client=require('../../client');exports[_0x88b2('0x0')]=function(){return function(_0x162602){return client['Request'](_0x88b2('0x1'),{'options':{'raw':![],'attributes':['id',_0x88b2('0x2'),'description',_0x88b2('0x3'),_0x88b2('0x4'),_0x88b2('0x5')],'include':[{'model':_0x88b2('0x6'),'as':_0x88b2('0x7'),'attributes':['id',_0x88b2('0x2')],'include':[{'model':_0x88b2('0x8'),'as':_0x88b2('0x9'),'attributes':['id',_0x88b2('0xa'),_0x88b2('0xb'),'variableName'],'include':[{'model':'Variable','as':_0x88b2('0xc'),'attributes':['id',_0x88b2('0x2')]}]},{'model':'ZohoField','as':_0x88b2('0xd'),'attributes':['id',_0x88b2('0xa'),_0x88b2('0xb'),_0x88b2('0xe'),_0x88b2('0xf'),_0x88b2('0x10'),_0x88b2('0x11')],'include':[{'model':_0x88b2('0xc'),'as':_0x88b2('0xc'),'attributes':['id',_0x88b2('0x2')]}]},{'model':_0x88b2('0x8'),'as':_0x88b2('0x12'),'attributes':['id','type',_0x88b2('0xb'),_0x88b2('0x13'),_0x88b2('0x14'),_0x88b2('0x15'),_0x88b2('0x11')],'include':[{'model':_0x88b2('0xc'),'as':'Variable','attributes':['id',_0x88b2('0x2')]}]}]}]},'log':_0x88b2('0x1')});};};
\ No newline at end of file
+var _0x92c0=['name','authToken','host','ZohoConfiguration','Configurations','ZohoField','type','content','Variable','Descriptions','keyContent','idField','nameField','variableName','GetZohoAccount','../../client','getZohoAccounts','Request'];(function(_0x3bc552,_0x293cfd){var _0x1f28a1=function(_0x415ec4){while(--_0x415ec4){_0x3bc552['push'](_0x3bc552['shift']());}};_0x1f28a1(++_0x293cfd);}(_0x92c0,0x9f));var _0x092c=function(_0x47efc6,_0x4a9765){_0x47efc6=_0x47efc6-0x0;var _0x52b9c0=_0x92c0[_0x47efc6];return _0x52b9c0;};'use strict';var client=require(_0x092c('0x0'));exports[_0x092c('0x1')]=function(){return function(_0x35e3ee){return client[_0x092c('0x2')]('GetZohoAccount',{'options':{'raw':![],'attributes':['id',_0x092c('0x3'),'description',_0x092c('0x4'),_0x092c('0x5'),'serverUrl'],'include':[{'model':_0x092c('0x6'),'as':_0x092c('0x7'),'attributes':['id',_0x092c('0x3')],'include':[{'model':_0x092c('0x8'),'as':'Subjects','attributes':['id',_0x092c('0x9'),_0x092c('0xa'),'variableName'],'include':[{'model':_0x092c('0xb'),'as':_0x092c('0xb'),'attributes':['id','name']}]},{'model':'ZohoField','as':_0x092c('0xc'),'attributes':['id',_0x092c('0x9'),_0x092c('0xa'),'key','keyType',_0x092c('0xd'),'variableName'],'include':[{'model':_0x092c('0xb'),'as':'Variable','attributes':['id',_0x092c('0x3')]}]},{'model':'ZohoField','as':'Fields','attributes':['id',_0x092c('0x9'),_0x092c('0xa'),_0x092c('0xe'),_0x092c('0xf'),'customField',_0x092c('0x10')],'include':[{'model':_0x092c('0xb'),'as':'Variable','attributes':['id','name']}]}]}]},'log':_0x092c('0x11')});};};
\ No newline at end of file
index ed7ae98..1aef291 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1e36=['endtime','starttime','outbound','dialstring','moment','voiceQueueReport','queuecallercompleteAt','Request','CreateMemberReport','voice','lastAssignedTo','isNil','format','SIP/%s','queuecallerleaveAt','diff','seconds','calleridnum','exten','queue','agent','accountcode','toNumber','uniqueid','voiceDialReport','membername','interface','TALKING'];(function(_0x3a5824,_0x5b47d6){var _0x3e93d2=function(_0x2825fe){while(--_0x2825fe){_0x3a5824['push'](_0x3a5824['shift']());}};_0x3e93d2(++_0x5b47d6);}(_0x1e36,0x74));var _0x61e3=function(_0x29771f,_0x1189ae){_0x29771f=_0x29771f-0x0;var _0x279baf=_0x1e36[_0x29771f];return _0x279baf;};'use strict';var moment=require(_0x61e3('0x0'));var _=require('lodash');var util=require('util');var client=require('../client');exports[_0x61e3('0x1')]=function(_0x1c9eac){var _0x3009a2=_0x1c9eac[_0x61e3('0x2')]||_0x1c9eac['queuecallerexitAt'];return client[_0x61e3('0x3')](_0x61e3('0x4'),{'body':{'channel':_0x61e3('0x5'),'membername':_0x1c9eac[_0x61e3('0x6')],'interface':_[_0x61e3('0x7')](_0x1c9eac['interface'])?util[_0x61e3('0x8')](_0x61e3('0x9'),_0x1c9eac[_0x61e3('0x6')]):_0x1c9eac['interface'],'type':'TALKING','enterAt':_0x1c9eac[_0x61e3('0xa')],'exitAt':_0x3009a2,'duration':moment(_0x3009a2)[_0x61e3('0xb')](_0x1c9eac[_0x61e3('0xa')],_0x61e3('0xc')),'data1':'inbound','data2':_0x1c9eac[_0x61e3('0xd')],'data3':_0x1c9eac[_0x61e3('0xe')],'data4':null,'data5':_0x1c9eac[_0x61e3('0xf')],'role':_0x61e3('0x10'),'internal':_0x1c9eac[_0x61e3('0x11')]?_[_0x61e3('0x12')](_0x1c9eac[_0x61e3('0x11')]):undefined,'uniqueid':_0x1c9eac[_0x61e3('0x13')]},'log':_0x61e3('0x4')});};exports[_0x61e3('0x14')]=function(_0x1e19cd){return client[_0x61e3('0x3')](_0x61e3('0x4'),{'body':{'channel':_0x61e3('0x5'),'membername':_0x1e19cd[_0x61e3('0x15')],'interface':_0x1e19cd[_0x61e3('0x16')],'type':_0x61e3('0x17'),'enterAt':_0x1e19cd['starttime'],'exitAt':_0x1e19cd[_0x61e3('0x18')],'duration':moment(_0x1e19cd[_0x61e3('0x18')])[_0x61e3('0xb')](_0x1e19cd[_0x61e3('0x19')],_0x61e3('0xc'))>=0x0?moment(_0x1e19cd[_0x61e3('0x18')])[_0x61e3('0xb')](_0x1e19cd[_0x61e3('0x19')],_0x61e3('0xc')):null,'data1':_0x61e3('0x1a'),'data2':_0x1e19cd[_0x61e3('0x11')],'data3':_0x1e19cd[_0x61e3('0xe')],'data4':_0x1e19cd[_0x61e3('0x1b')]||null,'role':_0x61e3('0x10'),'internal':_0x1e19cd['accountcode']?_['toNumber'](_0x1e19cd[_0x61e3('0x11')]):undefined,'uniqueid':_0x1e19cd[_0x61e3('0x13')]},'log':'CreateMemberReport'});};
\ No newline at end of file
+var _0x0012=['isNil','interface','format','SIP/%s','TALKING','queuecallerleaveAt','inbound','calleridnum','exten','queue','agent','accountcode','uniqueid','membername','starttime','endtime','seconds','diff','outbound','dialstring','toNumber','moment','lodash','util','../client','voiceQueueReport','queuecallercompleteAt','queuecallerexitAt','CreateMemberReport','voice','lastAssignedTo'];(function(_0x34021d,_0x753aa6){var _0x16597b=function(_0x2d040a){while(--_0x2d040a){_0x34021d['push'](_0x34021d['shift']());}};_0x16597b(++_0x753aa6);}(_0x0012,0x1a8));var _0x2001=function(_0x59bf45,_0x5a17cc){_0x59bf45=_0x59bf45-0x0;var _0x20f6b0=_0x0012[_0x59bf45];return _0x20f6b0;};'use strict';var moment=require(_0x2001('0x0'));var _=require(_0x2001('0x1'));var util=require(_0x2001('0x2'));var client=require(_0x2001('0x3'));exports[_0x2001('0x4')]=function(_0x24e177){var _0x59897a=_0x24e177[_0x2001('0x5')]||_0x24e177[_0x2001('0x6')];return client['Request'](_0x2001('0x7'),{'body':{'channel':_0x2001('0x8'),'membername':_0x24e177[_0x2001('0x9')],'interface':_[_0x2001('0xa')](_0x24e177[_0x2001('0xb')])?util[_0x2001('0xc')](_0x2001('0xd'),_0x24e177[_0x2001('0x9')]):_0x24e177[_0x2001('0xb')],'type':_0x2001('0xe'),'enterAt':_0x24e177[_0x2001('0xf')],'exitAt':_0x59897a,'duration':moment(_0x59897a)['diff'](_0x24e177['queuecallerleaveAt'],'seconds'),'data1':_0x2001('0x10'),'data2':_0x24e177[_0x2001('0x11')],'data3':_0x24e177[_0x2001('0x12')],'data4':null,'data5':_0x24e177[_0x2001('0x13')],'role':_0x2001('0x14'),'internal':_0x24e177[_0x2001('0x15')]?_['toNumber'](_0x24e177[_0x2001('0x15')]):undefined,'uniqueid':_0x24e177[_0x2001('0x16')]},'log':'CreateMemberReport'});};exports['voiceDialReport']=function(_0x3226be){return client['Request'](_0x2001('0x7'),{'body':{'channel':_0x2001('0x8'),'membername':_0x3226be[_0x2001('0x17')],'interface':_0x3226be[_0x2001('0xb')],'type':_0x2001('0xe'),'enterAt':_0x3226be[_0x2001('0x18')],'exitAt':_0x3226be[_0x2001('0x19')],'duration':moment(_0x3226be[_0x2001('0x19')])['diff'](_0x3226be[_0x2001('0x18')],_0x2001('0x1a'))>=0x0?moment(_0x3226be[_0x2001('0x19')])[_0x2001('0x1b')](_0x3226be[_0x2001('0x18')],_0x2001('0x1a')):null,'data1':_0x2001('0x1c'),'data2':_0x3226be[_0x2001('0x15')],'data3':_0x3226be['exten'],'data4':_0x3226be[_0x2001('0x1d')]||null,'role':'agent','internal':_0x3226be[_0x2001('0x15')]?_[_0x2001('0x1e')](_0x3226be['accountcode']):undefined,'uniqueid':_0x3226be[_0x2001('0x16')]},'log':_0x2001('0x7')});};
\ No newline at end of file
index 07b4448..13cb1bf 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8e4=['GetTemplate','name','html','getTemplates'];(function(_0x5446d0,_0x2a64fa){var _0x2b3b71=function(_0xfa2c98){while(--_0xfa2c98){_0x5446d0['push'](_0x5446d0['shift']());}};_0x2b3b71(++_0x2a64fa);}(_0xd8e4,0x10b));var _0x4d8e=function(_0x2c501f,_0x52c65e){_0x2c501f=_0x2c501f-0x0;var _0x92b973=_0xd8e4[_0x2c501f];return _0x92b973;};'use strict';var client=require('../client');exports[_0x4d8e('0x0')]=function(_0x4fe1a6){return function(_0x518b64){return client['Request'](_0x4d8e('0x1'),{'options':{'raw':!![],'attributes':['id',_0x4d8e('0x2'),_0x4d8e('0x3')]},'log':_0x4d8e('0x1')});};};
\ No newline at end of file
+var _0x58d8=['../client','getTemplates','Request','name','html'];(function(_0x2b8d00,_0x2f9f8f){var _0x1949d4=function(_0x51d752){while(--_0x51d752){_0x2b8d00['push'](_0x2b8d00['shift']());}};_0x1949d4(++_0x2f9f8f);}(_0x58d8,0x140));var _0x858d=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x58d8[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0x858d('0x0'));exports[_0x858d('0x1')]=function(_0x5c1ff3){return function(_0x1e2d4c){return client[_0x858d('0x2')]('GetTemplate',{'options':{'raw':!![],'attributes':['id',_0x858d('0x3'),_0x858d('0x4')]},'log':'GetTemplate'});};};
\ No newline at end of file
index f90053a..959c99b 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(_0x42eaa9,_0x214148){var _0x12a14c=function(_0x229b22){while(--_0x229b22){_0x42eaa9['push'](_0x42eaa9['shift']());}};_0x12a14c(++_0x214148);}(_0xa9e0,0x123));var _0x0a9e=function(_0x411add,_0x1aed38){_0x411add=_0x411add-0x0;var _0x238242=_0xa9e0[_0x411add];return _0x238242;};'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(_0x2b5905,_0xb63deb){var _0x2001cd=function(_0x956a66){while(--_0x956a66){_0x2b5905['push'](_0x2b5905['shift']());}};_0x2001cd(++_0xb63deb);}(_0xa9e0,0x123));var _0x0a9e=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0xa9e0[_0x501510];return _0x1e6ee5;};'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 c00a2d6..65592f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3358=['GetTrunk','name','registry','../client','Request'];(function(_0x31ee90,_0x3d9c69){var _0x30b2ef=function(_0x35a313){while(--_0x35a313){_0x31ee90['push'](_0x31ee90['shift']());}};_0x30b2ef(++_0x3d9c69);}(_0x3358,0x152));var _0x8335=function(_0x2d1e52,_0x3f4ee2){_0x2d1e52=_0x2d1e52-0x0;var _0x55be10=_0x3358[_0x2d1e52];return _0x55be10;};'use strict';var client=require(_0x8335('0x0'));exports['getTrunks']=function(_0x2cf50a){return function(_0x444f95){return client[_0x8335('0x1')](_0x8335('0x2'),{'options':{'raw':!![],'where':{'active':0x1},'attributes':['id',_0x8335('0x3'),_0x8335('0x4')]},'log':_0x8335('0x2')});};};
\ No newline at end of file
+var _0xb2da=['name','registry','../client','Request','GetTrunk'];(function(_0x215181,_0x4a7b52){var _0x2170bf=function(_0xe66a39){while(--_0xe66a39){_0x215181['push'](_0x215181['shift']());}};_0x2170bf(++_0x4a7b52);}(_0xb2da,0x1a6));var _0xab2d=function(_0x22fdef,_0x3125b0){_0x22fdef=_0x22fdef-0x0;var _0x3c42f8=_0xb2da[_0x22fdef];return _0x3c42f8;};'use strict';var client=require(_0xab2d('0x0'));exports['getTrunks']=function(_0x51cc49){return function(_0x3941be){return client[_0xab2d('0x1')](_0xab2d('0x2'),{'options':{'raw':!![],'where':{'active':0x1},'attributes':['id',_0xab2d('0x3'),_0xab2d('0x4')]},'log':_0xab2d('0x2')});};};
\ No newline at end of file
index 2615f75..411396f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcade=['UnpauseUser','ShowUser','pauseType','interface','getAgent','../client','getAgents','Request','GetUser','agent','name','email','accountcode','fullname','online','lastLoginAt','lastPauseAt','voicePause','phone','mobile','getTelephones','telephone','internal','savePause','PauseUser','saveUnpause'];(function(_0x2c91e9,_0x2fb965){var _0x13f0ff=function(_0xb39edf){while(--_0xb39edf){_0x2c91e9['push'](_0x2c91e9['shift']());}};_0x13f0ff(++_0x2fb965);}(_0xcade,0x87));var _0xecad=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xcade[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0xecad('0x0'));exports[_0xecad('0x1')]=function(){return function(){return client[_0xecad('0x2')](_0xecad('0x3'),{'options':{'raw':![],'where':{'role':_0xecad('0x4')},'attributes':['id',_0xecad('0x5'),_0xecad('0x6'),_0xecad('0x7'),_0xecad('0x8'),_0xecad('0x9'),_0xecad('0xa'),'pauseType',_0xecad('0xb'),_0xecad('0xc'),_0xecad('0xd'),_0xecad('0xe'),'interface']},'log':_0xecad('0x1')});};};exports[_0xecad('0xf')]=function(){return function(){return client['Request'](_0xecad('0x3'),{'options':{'raw':!![],'where':{'role':_0xecad('0x10')},'attributes':['id',_0xecad('0x5'),'accountcode',_0xecad('0x11')]},'log':_0xecad('0xf')});};};exports[_0xecad('0x12')]=function(_0x22ce5b,_0x246f47,_0x22a57b){return client[_0xecad('0x2')](_0xecad('0x13'),{'body':{'type':_0x246f47,'uniqueid':_0x22a57b},'options':{'where':{'id':_0x22ce5b['id']}},'log':_0xecad('0x12')});};exports[_0xecad('0x14')]=function(_0x1b4195){return client[_0xecad('0x2')](_0xecad('0x15'),{'body':{},'options':{'where':{'id':_0x1b4195['id']}},'log':_0xecad('0x12')});};exports['getAgent']=function(_0x311477){return client[_0xecad('0x2')](_0xecad('0x16'),{'options':{'raw':![],'where':{'role':_0xecad('0x4'),'id':_0x311477},'attributes':['id',_0xecad('0x5'),_0xecad('0x6'),_0xecad('0x7'),_0xecad('0x8'),_0xecad('0x9'),_0xecad('0xa'),_0xecad('0x17'),'lastPauseAt',_0xecad('0xc'),_0xecad('0x18')]},'log':_0xecad('0x19')});};
\ No newline at end of file
+var _0xb95f=['name','accountcode','internal','PauseUser','savePause','saveUnpause','UnpauseUser','ShowUser','online','../client','getAgents','Request','agent','fullname','lastLoginAt','pauseType','lastPauseAt','voicePause','phone','mobile','interface','getTelephones','GetUser'];(function(_0x1734be,_0x3aabd2){var _0x4b247d=function(_0x333656){while(--_0x333656){_0x1734be['push'](_0x1734be['shift']());}};_0x4b247d(++_0x3aabd2);}(_0xb95f,0x11d));var _0xfb95=function(_0x215720,_0x50714f){_0x215720=_0x215720-0x0;var _0x311874=_0xb95f[_0x215720];return _0x311874;};'use strict';var client=require(_0xfb95('0x0'));exports[_0xfb95('0x1')]=function(){return function(){return client[_0xfb95('0x2')]('GetUser',{'options':{'raw':![],'where':{'role':_0xfb95('0x3')},'attributes':['id','name','email','accountcode',_0xfb95('0x4'),'online',_0xfb95('0x5'),_0xfb95('0x6'),_0xfb95('0x7'),_0xfb95('0x8'),_0xfb95('0x9'),_0xfb95('0xa'),_0xfb95('0xb')]},'log':'getAgents'});};};exports[_0xfb95('0xc')]=function(){return function(){return client[_0xfb95('0x2')](_0xfb95('0xd'),{'options':{'raw':!![],'where':{'role':'telephone'},'attributes':['id',_0xfb95('0xe'),_0xfb95('0xf'),_0xfb95('0x10')]},'log':_0xfb95('0xc')});};};exports['savePause']=function(_0x280ab,_0x1b7039,_0x4aad93){return client[_0xfb95('0x2')](_0xfb95('0x11'),{'body':{'type':_0x1b7039,'uniqueid':_0x4aad93},'options':{'where':{'id':_0x280ab['id']}},'log':_0xfb95('0x12')});};exports[_0xfb95('0x13')]=function(_0x446a6f){return client[_0xfb95('0x2')](_0xfb95('0x14'),{'body':{},'options':{'where':{'id':_0x446a6f['id']}},'log':'savePause'});};exports['getAgent']=function(_0x19489f){return client[_0xfb95('0x2')](_0xfb95('0x15'),{'options':{'raw':![],'where':{'role':_0xfb95('0x3'),'id':_0x19489f},'attributes':['id',_0xfb95('0xe'),'email',_0xfb95('0xf'),_0xfb95('0x4'),_0xfb95('0x16'),_0xfb95('0x5'),'pauseType',_0xfb95('0x7'),_0xfb95('0x8'),_0xfb95('0xb')]},'log':'getAgent'});};
\ No newline at end of file
index 7a98d87..f8c7e8d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb780=['Request','CreateVoiceAgentReport','UpdateVoiceAgentReport','../client','create'];(function(_0x175e89,_0x20835f){var _0x2ed996=function(_0x56239f){while(--_0x56239f){_0x175e89['push'](_0x175e89['shift']());}};_0x2ed996(++_0x20835f);}(_0xb780,0xd5));var _0x0b78=function(_0x1ae329,_0x2f442f){_0x1ae329=_0x1ae329-0x0;var _0x42ae4e=_0xb780[_0x1ae329];return _0x42ae4e;};'use strict';var client=require(_0x0b78('0x0'));exports[_0x0b78('0x1')]=function(_0x5c0045){return client[_0x0b78('0x2')](_0x0b78('0x3'),{'body':_0x5c0045,'log':_0x0b78('0x3')});};exports['update']=function(_0x2cad1e,_0x185bc1,_0x29d724){return client[_0x0b78('0x2')](_0x0b78('0x4'),{'body':_0x2cad1e,'options':{'where':{'uniqueid':_0x185bc1,'interface':_0x29d724}},'log':'UpdateVoiceAgentReport'});};
\ No newline at end of file
+var _0x48f2=['Request','CreateVoiceAgentReport','UpdateVoiceAgentReport','create'];(function(_0x40220a,_0x22feb1){var _0x3903cc=function(_0x33a296){while(--_0x33a296){_0x40220a['push'](_0x40220a['shift']());}};_0x3903cc(++_0x22feb1);}(_0x48f2,0xd3));var _0x248f=function(_0x41895f,_0x594257){_0x41895f=_0x41895f-0x0;var _0x5bb5a2=_0x48f2[_0x41895f];return _0x5bb5a2;};'use strict';var client=require('../client');exports[_0x248f('0x0')]=function(_0x1a1c8f){return client[_0x248f('0x1')](_0x248f('0x2'),{'body':_0x1a1c8f,'log':_0x248f('0x2')});};exports['update']=function(_0xd6a5b8,_0x1c5402,_0x2a6792){return client[_0x248f('0x1')](_0x248f('0x3'),{'body':_0xd6a5b8,'options':{'where':{'uniqueid':_0x1c5402,'interface':_0x2a6792}},'log':'UpdateVoiceAgentReport'});};
\ No newline at end of file
index 35cbeb1..8db21ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1207=['Request','CreateVoiceCallReport','callerid','DOCUMENTATION','getVoiceCallReports','outbound','day','format','YYYY-MM-DD\x20HH:mm:ss','type','disposition','duration','billableseconds','GetVoiceCallReports','util','lodash','../client','create'];(function(_0x395e67,_0x4da93a){var _0x348b20=function(_0x51361a){while(--_0x51361a){_0x395e67['push'](_0x395e67['shift']());}};_0x348b20(++_0x4da93a);}(_0x1207,0xd4));var _0x7120=function(_0x338566,_0x4cb362){_0x338566=_0x338566-0x0;var _0x53c99c=_0x1207[_0x338566];return _0x53c99c;};'use strict';var moment=require('moment');var util=require(_0x7120('0x0'));var _=require(_0x7120('0x1'));var client=require(_0x7120('0x2'));exports[_0x7120('0x3')]=function(_0x3257fb){return client[_0x7120('0x4')](_0x7120('0x5'),{'body':_['merge'](_0x3257fb,{'source':_0x3257fb['calleridnum'],'destinationcontext':_0x3257fb['context'],'callerid':_0x3257fb[_0x7120('0x6')],'amaflags':_0x7120('0x7')}),'log':'CreateVoiceCallReport'});};exports[_0x7120('0x8')]=function(){return function(){return client[_0x7120('0x4')]('GetVoiceCallReport',{'options':{'where':{'type':[_0x7120('0x9')],'createdAt':{'$between':[moment()['startOf'](_0x7120('0xa'))[_0x7120('0xb')](_0x7120('0xc')),moment()['endOf'](_0x7120('0xa'))[_0x7120('0xb')](_0x7120('0xc'))]}},'attributes':[_0x7120('0xd'),_0x7120('0xe'),_0x7120('0xf'),_0x7120('0x10')]},'log':_0x7120('0x11')});};};
\ No newline at end of file
+var _0xa78e=['calleridnum','context','callerid','CreateVoiceCallReport','getVoiceCallReports','outbound','startOf','format','YYYY-MM-DD\x20HH:mm:ss','endOf','type','disposition','duration','billableseconds','GetVoiceCallReports','util','lodash','create','Request','merge'];(function(_0x541b9d,_0x3c6a07){var _0x1248d0=function(_0x161e34){while(--_0x161e34){_0x541b9d['push'](_0x541b9d['shift']());}};_0x1248d0(++_0x3c6a07);}(_0xa78e,0x87));var _0xea78=function(_0xadba61,_0x30b0ae){_0xadba61=_0xadba61-0x0;var _0x2e0d69=_0xa78e[_0xadba61];return _0x2e0d69;};'use strict';var moment=require('moment');var util=require(_0xea78('0x0'));var _=require(_0xea78('0x1'));var client=require('../client');exports[_0xea78('0x2')]=function(_0x249a9e){return client[_0xea78('0x3')]('CreateVoiceCallReport',{'body':_[_0xea78('0x4')](_0x249a9e,{'source':_0x249a9e[_0xea78('0x5')],'destinationcontext':_0x249a9e[_0xea78('0x6')],'callerid':_0x249a9e[_0xea78('0x7')],'amaflags':'DOCUMENTATION'}),'log':_0xea78('0x8')});};exports[_0xea78('0x9')]=function(){return function(){return client[_0xea78('0x3')]('GetVoiceCallReport',{'options':{'where':{'type':[_0xea78('0xa')],'createdAt':{'$between':[moment()[_0xea78('0xb')]('day')[_0xea78('0xc')](_0xea78('0xd')),moment()[_0xea78('0xe')]('day')[_0xea78('0xc')](_0xea78('0xd'))]}},'attributes':[_0xea78('0xf'),_0xea78('0x10'),_0xea78('0x11'),_0xea78('0x12')]},'log':_0xea78('0x13')});};};
\ No newline at end of file
index 85b74df..7088ce8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x88ea=['create','Request','../client'];(function(_0x3a8dc1,_0x2f03b8){var _0x4b3595=function(_0x1c19e7){while(--_0x1c19e7){_0x3a8dc1['push'](_0x3a8dc1['shift']());}};_0x4b3595(++_0x2f03b8);}(_0x88ea,0x17c));var _0xa88e=function(_0x34b9f5,_0x347d7a){_0x34b9f5=_0x34b9f5-0x0;var _0x3117fc=_0x88ea[_0x34b9f5];return _0x3117fc;};'use strict';var client=require(_0xa88e('0x0'));exports[_0xa88e('0x1')]=function(_0x54ea70){return client[_0xa88e('0x2')]('CreateVoiceDialReport',{'body':_0x54ea70,'log':'CreateVoiceDialReport'});};
\ No newline at end of file
+var _0x2495=['Request','CreateVoiceDialReport','../client','create'];(function(_0x1542cf,_0x6ec90b){var _0x46d7e1=function(_0x3a42e1){while(--_0x3a42e1){_0x1542cf['push'](_0x1542cf['shift']());}};_0x46d7e1(++_0x6ec90b);}(_0x2495,0x136));var _0x5249=function(_0x12cd8f,_0x4bed51){_0x12cd8f=_0x12cd8f-0x0;var _0x3f054e=_0x2495[_0x12cd8f];return _0x3f054e;};'use strict';var client=require(_0x5249('0x0'));exports[_0x5249('0x1')]=function(_0x872958){return client[_0x5249('0x2')](_0x5249('0x3'),{'body':_0x872958,'log':_0x5249('0x3')});};
\ No newline at end of file
index a2598fe..96f343c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x914c=['recordingFormat','../client','Request','GetVoiceExtension','exten'];(function(_0x2bf958,_0x3d15d5){var _0x400359=function(_0x5e4a00){while(--_0x5e4a00){_0x2bf958['push'](_0x2bf958['shift']());}};_0x400359(++_0x3d15d5);}(_0x914c,0x132));var _0xc914=function(_0x24431a,_0x52459a){_0x24431a=_0x24431a-0x0;var _0x454ec7=_0x914c[_0x24431a];return _0x454ec7;};'use strict';var client=require(_0xc914('0x0'));exports['getVoiceExtensions']=function(){return function(){return client[_0xc914('0x1')](_0xc914('0x2'),{'options':{'raw':!![],'attributes':['id',_0xc914('0x3'),_0xc914('0x4')],'where':{'VoiceExtensionId':null}},'log':'getVoiceExtensions'});};};
\ No newline at end of file
+var _0xcfe7=['recordingFormat','../client','getVoiceExtensions'];(function(_0x2a1227,_0x3320a9){var _0x15ad0f=function(_0x4eec02){while(--_0x4eec02){_0x2a1227['push'](_0x2a1227['shift']());}};_0x15ad0f(++_0x3320a9);}(_0xcfe7,0x17e));var _0x7cfe=function(_0x34496b,_0x3aff7d){_0x34496b=_0x34496b-0x0;var _0x47d62a=_0xcfe7[_0x34496b];return _0x47d62a;};'use strict';var client=require(_0x7cfe('0x0'));exports[_0x7cfe('0x1')]=function(){return function(){return client['Request']('GetVoiceExtension',{'options':{'raw':!![],'attributes':['id','exten',_0x7cfe('0x2')],'where':{'VoiceExtensionId':null}},'log':_0x7cfe('0x1')});};};
\ No newline at end of file
index a48e58a..1daf624 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6ea9=['dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialQueueOptions','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialBusyRetryFrequency','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialCheckDuplicateType','dialAMDInitialSilence','dialAMDGreeting','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords','dialAMDSilenceThreshold','dialAMDMaximumWordLength','timeout','dialRecallMeTimeout','dialOrderByScheduledAt','dialQueueProject2','dialRandomLastDigitCallerIdNumber','dialCutDigit','mandatoryDisposition','Trunk','callerid','mandatoryDispositionPause','TrunkBackup','active','Interval','interval','../client','getVoiceQueues','Request','GetVoiceQueue','name','acwTimeout','autopause','monitor_format','dialActive','dialLimitChannel','dialPowerLevel','dialPredictiveOptimizationPercentage','dialPredictiveInterval'];(function(_0x49d835,_0xfbf7ac){var _0x1a0c7f=function(_0xcc5187){while(--_0xcc5187){_0x49d835['push'](_0x49d835['shift']());}};_0x1a0c7f(++_0xfbf7ac);}(_0x6ea9,0x89));var _0x96ea=function(_0x1e65a7,_0x310d17){_0x1e65a7=_0x1e65a7-0x0;var _0x2b9964=_0x6ea9[_0x1e65a7];return _0x2b9964;};'use strict';var client=require(_0x96ea('0x0'));exports[_0x96ea('0x1')]=function(){return function(){return client[_0x96ea('0x2')](_0x96ea('0x3'),{'options':{'raw':![],'attributes':['id',_0x96ea('0x4'),'acw',_0x96ea('0x5'),_0x96ea('0x6'),_0x96ea('0x7'),'type',_0x96ea('0x8'),'dialMethod',_0x96ea('0x9'),'dialLimitQueue',_0x96ea('0xa'),'dialPredictiveOptimization',_0x96ea('0xb'),_0x96ea('0xc'),_0x96ea('0xd'),_0x96ea('0xe'),_0x96ea('0xf'),_0x96ea('0x10'),'dialQueueTimeout',_0x96ea('0x11'),_0x96ea('0x12'),_0x96ea('0x13'),_0x96ea('0x14'),_0x96ea('0x15'),_0x96ea('0x16'),_0x96ea('0x17'),_0x96ea('0x18'),_0x96ea('0x19'),_0x96ea('0x1a'),'dialPrefix',_0x96ea('0x1b'),'dialAMDActive',_0x96ea('0x1c'),_0x96ea('0x1d'),'dialAMDAfterGreetingSilence',_0x96ea('0x1e'),_0x96ea('0x1f'),_0x96ea('0x20'),_0x96ea('0x21'),_0x96ea('0x22'),_0x96ea('0x23'),_0x96ea('0x24'),_0x96ea('0x25'),'dialRecallInQueue',_0x96ea('0x26'),'dialAgiAfterHangupAgent','dialAgiAfterHangupClient',_0x96ea('0x27'),_0x96ea('0x7'),'strategy',_0x96ea('0x28'),_0x96ea('0x29'),_0x96ea('0x2a')],'include':[{'model':_0x96ea('0x2b'),'as':_0x96ea('0x2b'),'attributes':['id',_0x96ea('0x4'),_0x96ea('0x2c'),'active']},{'model':'Pause','as':_0x96ea('0x2d'),'attributes':['id',_0x96ea('0x4')]},{'model':_0x96ea('0x2b'),'as':_0x96ea('0x2e'),'attributes':['id',_0x96ea('0x4'),_0x96ea('0x2c'),_0x96ea('0x2f')]},{'model':_0x96ea('0x30'),'as':_0x96ea('0x30'),'attributes':['id',_0x96ea('0x4')],'include':[{'model':_0x96ea('0x30'),'as':'Intervals','attributes':['id',_0x96ea('0x4'),_0x96ea('0x31')]}]}]},'log':_0x96ea('0x1')});};};
\ No newline at end of file
+var _0x9f4d=['dialAMDSilenceThreshold','dialAMDMaximumWordLength','timeout','dialRecallMeTimeout','dialRecallInQueue','dialOrderByScheduledAt','dialAgiAfterHangupAgent','dialRandomLastDigitCallerIdNumber','dialCutDigit','mandatoryDisposition','Trunk','callerid','Pause','TrunkBackup','active','Intervals','interval','../client','getVoiceQueues','Request','GetVoiceQueue','name','acw','acwTimeout','autopause','monitor_format','dialActive','dialLimitChannel','dialLimitQueue','dialPowerLevel','dialPredictiveOptimization','dialPredictiveInterval','dialOriginateCallerIdName','dialOriginateTimeout','dialQueueTimeout','dialQueueProject','dialCongestionMaxRetry','dialCongestionRetryFrequency','dialBusyMaxRetry','dialNoAnswerMaxRetry','dialNoAnswerRetryFrequency','dialGlobalMaxRetry','dialTimezone','dialGlobalInterval','dialPrefix','dialCheckDuplicateType','dialAMDActive','dialAMDGreeting','dialAMDAfterGreetingSilence','dialAMDTotalAnalysisTime','dialAMDMinWordLength','dialAMDBetweenWordsSilence','dialAMDMaximumNumberOfWords'];(function(_0x254697,_0x568bbc){var _0x5b030d=function(_0x563185){while(--_0x563185){_0x254697['push'](_0x254697['shift']());}};_0x5b030d(++_0x568bbc);}(_0x9f4d,0xb0));var _0xd9f4=function(_0x51a6af,_0x219d20){_0x51a6af=_0x51a6af-0x0;var _0x190e2c=_0x9f4d[_0x51a6af];return _0x190e2c;};'use strict';var client=require(_0xd9f4('0x0'));exports[_0xd9f4('0x1')]=function(){return function(){return client[_0xd9f4('0x2')](_0xd9f4('0x3'),{'options':{'raw':![],'attributes':['id',_0xd9f4('0x4'),_0xd9f4('0x5'),_0xd9f4('0x6'),_0xd9f4('0x7'),_0xd9f4('0x8'),'type',_0xd9f4('0x9'),'dialMethod',_0xd9f4('0xa'),_0xd9f4('0xb'),_0xd9f4('0xc'),_0xd9f4('0xd'),'dialPredictiveOptimizationPercentage',_0xd9f4('0xe'),_0xd9f4('0xf'),'dialOriginateCallerIdNumber',_0xd9f4('0x10'),'dialQueueOptions',_0xd9f4('0x11'),_0xd9f4('0x12'),_0xd9f4('0x13'),_0xd9f4('0x14'),_0xd9f4('0x15'),'dialBusyRetryFrequency',_0xd9f4('0x16'),_0xd9f4('0x17'),_0xd9f4('0x18'),_0xd9f4('0x19'),_0xd9f4('0x1a'),_0xd9f4('0x1b'),_0xd9f4('0x1c'),_0xd9f4('0x1d'),'dialAMDInitialSilence',_0xd9f4('0x1e'),_0xd9f4('0x1f'),_0xd9f4('0x20'),_0xd9f4('0x21'),_0xd9f4('0x22'),_0xd9f4('0x23'),_0xd9f4('0x24'),_0xd9f4('0x25'),_0xd9f4('0x26'),_0xd9f4('0x27'),_0xd9f4('0x28'),_0xd9f4('0x29'),_0xd9f4('0x2a'),'dialAgiAfterHangupClient','dialQueueProject2','monitor_format','strategy',_0xd9f4('0x2b'),_0xd9f4('0x2c'),_0xd9f4('0x2d')],'include':[{'model':'Trunk','as':_0xd9f4('0x2e'),'attributes':['id',_0xd9f4('0x4'),_0xd9f4('0x2f'),'active']},{'model':_0xd9f4('0x30'),'as':'mandatoryDispositionPause','attributes':['id',_0xd9f4('0x4')]},{'model':_0xd9f4('0x2e'),'as':_0xd9f4('0x31'),'attributes':['id','name',_0xd9f4('0x2f'),_0xd9f4('0x32')]},{'model':'Interval','as':'Interval','attributes':['id',_0xd9f4('0x4')],'include':[{'model':'Interval','as':_0xd9f4('0x33'),'attributes':['id',_0xd9f4('0x4'),_0xd9f4('0x34')]}]}]},'log':_0xd9f4('0x1')});};};
\ No newline at end of file
index 84e4136..e6bfb07 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xafc4=['getVoiceQueueReports','GetVoiceQueueReport','startOf','day','format','YYYY-MM-DD\x20HH:mm:ss','queue','queuecallerjoinAt','queuecallerleaveAt','queuecallercomplete','queuecallercompleteAt','queuecallerexitAt','queuecallerabandon','queuecallerabandonAt','GetVoiceQueueReports','moment','lodash','create','Request','CreateVoiceQueueReport'];(function(_0x580cf9,_0x48674f){var _0x589101=function(_0x1c3c18){while(--_0x1c3c18){_0x580cf9['push'](_0x580cf9['shift']());}};_0x589101(++_0x48674f);}(_0xafc4,0x1c7));var _0x4afc=function(_0x11df7e,_0x353ecf){_0x11df7e=_0x11df7e-0x0;var _0x2c8b3f=_0xafc4[_0x11df7e];return _0x2c8b3f;};'use strict';var moment=require(_0x4afc('0x0'));var _=require(_0x4afc('0x1'));var client=require('../client');exports[_0x4afc('0x2')]=function(_0x1b6253){return client[_0x4afc('0x3')]('CreateVoiceQueueReport',{'body':_0x1b6253,'log':_0x4afc('0x4')});};exports[_0x4afc('0x5')]=function(){return function(){return client['Request'](_0x4afc('0x6'),{'options':{'where':{'createdAt':{'$between':[moment()[_0x4afc('0x7')](_0x4afc('0x8'))[_0x4afc('0x9')](_0x4afc('0xa')),moment()['endOf']('day')[_0x4afc('0x9')]('YYYY-MM-DD\x20HH:mm:ss')]}},'attributes':['uniqueid',_0x4afc('0xb'),_0x4afc('0xc'),_0x4afc('0xd'),_0x4afc('0xe'),_0x4afc('0xf'),'queuecallerexit',_0x4afc('0x10'),_0x4afc('0x11'),_0x4afc('0x12')]},'log':_0x4afc('0x13')});};};
\ No newline at end of file
+var _0x0a4b=['GetVoiceQueueReport','startOf','day','format','endOf','uniqueid','queue','queuecallerjoinAt','queuecallerleaveAt','queuecallercomplete','queuecallercompleteAt','queuecallerexitAt','queuecallerabandon','GetVoiceQueueReports','moment','../client','create','Request','CreateVoiceQueueReport'];(function(_0x345209,_0x45773e){var _0x152e00=function(_0x5802d2){while(--_0x5802d2){_0x345209['push'](_0x345209['shift']());}};_0x152e00(++_0x45773e);}(_0x0a4b,0xcc));var _0xb0a4=function(_0x58d580,_0x4c8f86){_0x58d580=_0x58d580-0x0;var _0x3c096c=_0x0a4b[_0x58d580];return _0x3c096c;};'use strict';var moment=require(_0xb0a4('0x0'));var _=require('lodash');var client=require(_0xb0a4('0x1'));exports[_0xb0a4('0x2')]=function(_0x4f8f07){return client[_0xb0a4('0x3')]('CreateVoiceQueueReport',{'body':_0x4f8f07,'log':_0xb0a4('0x4')});};exports['getVoiceQueueReports']=function(){return function(){return client[_0xb0a4('0x3')](_0xb0a4('0x5'),{'options':{'where':{'createdAt':{'$between':[moment()[_0xb0a4('0x6')](_0xb0a4('0x7'))[_0xb0a4('0x8')]('YYYY-MM-DD\x20HH:mm:ss'),moment()[_0xb0a4('0x9')](_0xb0a4('0x7'))[_0xb0a4('0x8')]('YYYY-MM-DD\x20HH:mm:ss')]}},'attributes':[_0xb0a4('0xa'),_0xb0a4('0xb'),_0xb0a4('0xc'),_0xb0a4('0xd'),_0xb0a4('0xe'),_0xb0a4('0xf'),'queuecallerexit',_0xb0a4('0x10'),_0xb0a4('0x11'),'queuecallerabandonAt']},'log':_0xb0a4('0x12')});};};
\ No newline at end of file
index f8096a5..ae7b543 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x65f6=['getVoiceQueueRtPauses','GetVoiceQueueRtPauses','../client'];(function(_0x2b6fcc,_0x5ed237){var _0x259f97=function(_0x33d141){while(--_0x33d141){_0x2b6fcc['push'](_0x2b6fcc['shift']());}};_0x259f97(++_0x5ed237);}(_0x65f6,0xdd));var _0x665f=function(_0x43a5c8,_0x16aa4a){_0x43a5c8=_0x43a5c8-0x0;var _0x50e2f8=_0x65f6[_0x43a5c8];return _0x50e2f8;};'use strict';var client=require(_0x665f('0x0'));exports[_0x665f('0x1')]=function(_0x462109){return function(){return client['Request'](_0x665f('0x2'),{'options':{'where':{'VoiceQueueId':_0x462109,'paused':!![]},'raw':!![]},'log':_0x665f('0x1')});};};
\ No newline at end of file
+var _0x7e81=['GetVoiceQueueRtPauses','../client','getVoiceQueueRtPauses'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x7e81,0xe8));var _0x17e8=function(_0x376b45,_0x5964fb){_0x376b45=_0x376b45-0x0;var _0x2341b3=_0x7e81[_0x376b45];return _0x2341b3;};'use strict';var client=require(_0x17e8('0x0'));exports[_0x17e8('0x1')]=function(_0x31a745){return function(){return client['Request'](_0x17e8('0x2'),{'options':{'where':{'VoiceQueueId':_0x31a745,'paused':!![]},'raw':!![]},'log':_0x17e8('0x1')});};};
\ No newline at end of file
index dd98926..7c3d17b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fc4=['../client','create','Request','CreateVoiceRecording','merge','monitorFilename'];(function(_0x2bc600,_0x3e9913){var _0x48572b=function(_0x168de1){while(--_0x168de1){_0x2bc600['push'](_0x2bc600['shift']());}};_0x48572b(++_0x3e9913);}(_0x5fc4,0x1ce));var _0x45fc=function(_0x5d9ba0,_0x5e72c2){_0x5d9ba0=_0x5d9ba0-0x0;var _0x10a719=_0x5fc4[_0x5d9ba0];return _0x10a719;};'use strict';var _=require('lodash');var client=require(_0x45fc('0x0'));exports[_0x45fc('0x1')]=function(_0x5cc136){return client[_0x45fc('0x2')](_0x45fc('0x3'),{'body':_[_0x45fc('0x4')](_0x5cc136,{'value':_0x5cc136[_0x45fc('0x5')]}),'log':_0x45fc('0x3')});};
\ No newline at end of file
+var _0x236f=['../client','create','Request','CreateVoiceRecording','monitorFilename','lodash'];(function(_0x62f4ac,_0x2d0221){var _0x4d2739=function(_0x1b81a3){while(--_0x1b81a3){_0x62f4ac['push'](_0x62f4ac['shift']());}};_0x4d2739(++_0x2d0221);}(_0x236f,0xad));var _0xf236=function(_0x5ef4fe,_0x2f1557){_0x5ef4fe=_0x5ef4fe-0x0;var _0x353b40=_0x236f[_0x5ef4fe];return _0x353b40;};'use strict';var _=require(_0xf236('0x0'));var client=require(_0xf236('0x1'));exports[_0xf236('0x2')]=function(_0x1c3d73){return client[_0xf236('0x3')](_0xf236('0x4'),{'body':_['merge'](_0x1c3d73,{'value':_0x1c3d73[_0xf236('0x5')]}),'log':'CreateVoiceRecording'});};
\ No newline at end of file
index c8887d2..1a3c83b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd3f3=['transfereecalleridnum','transfereecalleridname','transfereeconnectedlinenum','transfereeconnectedlinename','transfereeaccountcode','transfereecontext','transfereeexten','transfereelinkedid','isexternal','context','CreateVoiceTransferReport','attendedTransfer','origtransfererchannel','origtransferercalleridnum','origtransferercalleridname','secondtransfererconnectedlinenum','origtransfereraccountcode','secondtransferercontext','secondtransfererexten','origtransfererlinkedid','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinenum','transfertargetconnectedlinename','transfertargetaccountcode','transfertargetlinkedid','origtransferercontext','origtransfererexten','../client','blindTransfer','Request','result','transfererchannel','transferercalleridnum','transfererconnectedlinenum','transferercontext','transfererlinkedid','transfereechannel'];(function(_0x38ff1e,_0x3b9385){var _0x3755d4=function(_0x6e6692){while(--_0x6e6692){_0x38ff1e['push'](_0x38ff1e['shift']());}};_0x3755d4(++_0x3b9385);}(_0xd3f3,0x107));var _0x3d3f=function(_0x5c21ad,_0x1a8e79){_0x5c21ad=_0x5c21ad-0x0;var _0x69f5e0=_0xd3f3[_0x5c21ad];return _0x69f5e0;};'use strict';var client=require(_0x3d3f('0x0'));exports[_0x3d3f('0x1')]=function(_0x419993){return client[_0x3d3f('0x2')]('CreateVoiceTransferReport',{'body':{'result':_0x419993[_0x3d3f('0x3')],'transfererchannel':_0x419993[_0x3d3f('0x4')],'transferercalleridnum':_0x419993[_0x3d3f('0x5')],'transferercalleridname':_0x419993['transferercalleridname'],'transfererconnectedlinenum':_0x419993[_0x3d3f('0x6')],'transfererconnectedlinename':_0x419993['transfererconnectedlinename'],'transfereraccountcode':_0x419993['transfereraccountcode'],'transferercontext':_0x419993[_0x3d3f('0x7')],'transfererexten':_0x419993['transfererexten'],'transfererlinkedid':_0x419993[_0x3d3f('0x8')],'transfereechannel':_0x419993[_0x3d3f('0x9')],'transfereecalleridnum':_0x419993[_0x3d3f('0xa')],'transfereecalleridname':_0x419993[_0x3d3f('0xb')],'transfereeconnectedlinenum':_0x419993[_0x3d3f('0xc')],'transfereeconnectedlinename':_0x419993[_0x3d3f('0xd')],'transfereeaccountcode':_0x419993[_0x3d3f('0xe')],'transfereecontext':_0x419993[_0x3d3f('0xf')],'transfereeexten':_0x419993[_0x3d3f('0x10')],'transfereelinkedid':_0x419993[_0x3d3f('0x11')],'isexternal':_0x419993[_0x3d3f('0x12')],'context':_0x419993[_0x3d3f('0x13')],'extension':_0x419993['extension'],'type':'blind'},'log':_0x3d3f('0x14')});};exports[_0x3d3f('0x15')]=function(_0x284f26){return client[_0x3d3f('0x2')](_0x3d3f('0x14'),{'body':{'result':_0x284f26[_0x3d3f('0x3')],'transfererchannel':_0x284f26[_0x3d3f('0x16')],'transferercalleridnum':_0x284f26[_0x3d3f('0x17')],'transferercalleridname':_0x284f26[_0x3d3f('0x18')],'transfererconnectedlinenum':_0x284f26[_0x3d3f('0x19')],'transfererconnectedlinename':_0x284f26['secondtransfererconnectedlinename'],'transfereraccountcode':_0x284f26[_0x3d3f('0x1a')],'transferercontext':_0x284f26[_0x3d3f('0x1b')],'transfererexten':_0x284f26[_0x3d3f('0x1c')],'transfererlinkedid':_0x284f26[_0x3d3f('0x1d')],'transfereechannel':_0x284f26[_0x3d3f('0x1e')],'transfereecalleridnum':_0x284f26[_0x3d3f('0x1f')],'transfereecalleridname':_0x284f26[_0x3d3f('0x20')],'transfereeconnectedlinenum':_0x284f26[_0x3d3f('0x21')],'transfereeconnectedlinename':_0x284f26[_0x3d3f('0x22')],'transfereeaccountcode':_0x284f26[_0x3d3f('0x23')],'transfereecontext':_0x284f26['transfertargetcontext'],'transfereeexten':_0x284f26['transfertargetexten'],'transfereelinkedid':_0x284f26[_0x3d3f('0x24')],'isexternal':_0x284f26['isexternal'],'context':_0x284f26[_0x3d3f('0x25')],'extension':_0x284f26[_0x3d3f('0x26')],'type':'attended'},'log':_0x3d3f('0x14')});};
\ No newline at end of file
+var _0x1de3=['transfertargetaccountcode','transfertargetcontext','transfertargetlinkedid','origtransferercontext','origtransfererexten','attended','../client','blindTransfer','CreateVoiceTransferReport','transferercalleridnum','transferercalleridname','transfererconnectedlinename','transfereraccountcode','transferercontext','transfererexten','transfererlinkedid','transfereechannel','transfereecalleridnum','transfereecalleridname','transfereeconnectedlinenum','transfereeconnectedlinename','transfereecontext','isexternal','context','extension','blind','Request','result','origtransferercalleridnum','secondtransfererconnectedlinenum','secondtransfererconnectedlinename','origtransfereraccountcode','secondtransferercontext','secondtransfererexten','origtransfererlinkedid','transfertargetchannel','transfertargetcalleridname','transfertargetconnectedlinenum','transfertargetconnectedlinename'];(function(_0x4617e0,_0x1ecd46){var _0x3d22fa=function(_0x777600){while(--_0x777600){_0x4617e0['push'](_0x4617e0['shift']());}};_0x3d22fa(++_0x1ecd46);}(_0x1de3,0x117));var _0x31de=function(_0x2706da,_0x3856f5){_0x2706da=_0x2706da-0x0;var _0x3ba87e=_0x1de3[_0x2706da];return _0x3ba87e;};'use strict';var client=require(_0x31de('0x0'));exports[_0x31de('0x1')]=function(_0x3d65b6){return client['Request'](_0x31de('0x2'),{'body':{'result':_0x3d65b6['result'],'transfererchannel':_0x3d65b6['transfererchannel'],'transferercalleridnum':_0x3d65b6[_0x31de('0x3')],'transferercalleridname':_0x3d65b6[_0x31de('0x4')],'transfererconnectedlinenum':_0x3d65b6['transfererconnectedlinenum'],'transfererconnectedlinename':_0x3d65b6[_0x31de('0x5')],'transfereraccountcode':_0x3d65b6[_0x31de('0x6')],'transferercontext':_0x3d65b6[_0x31de('0x7')],'transfererexten':_0x3d65b6[_0x31de('0x8')],'transfererlinkedid':_0x3d65b6[_0x31de('0x9')],'transfereechannel':_0x3d65b6[_0x31de('0xa')],'transfereecalleridnum':_0x3d65b6[_0x31de('0xb')],'transfereecalleridname':_0x3d65b6[_0x31de('0xc')],'transfereeconnectedlinenum':_0x3d65b6[_0x31de('0xd')],'transfereeconnectedlinename':_0x3d65b6[_0x31de('0xe')],'transfereeaccountcode':_0x3d65b6['transfereeaccountcode'],'transfereecontext':_0x3d65b6[_0x31de('0xf')],'transfereeexten':_0x3d65b6['transfereeexten'],'transfereelinkedid':_0x3d65b6['transfereelinkedid'],'isexternal':_0x3d65b6[_0x31de('0x10')],'context':_0x3d65b6[_0x31de('0x11')],'extension':_0x3d65b6[_0x31de('0x12')],'type':_0x31de('0x13')},'log':_0x31de('0x2')});};exports['attendedTransfer']=function(_0x543acd){return client[_0x31de('0x14')]('CreateVoiceTransferReport',{'body':{'result':_0x543acd[_0x31de('0x15')],'transfererchannel':_0x543acd['origtransfererchannel'],'transferercalleridnum':_0x543acd[_0x31de('0x16')],'transferercalleridname':_0x543acd['origtransferercalleridname'],'transfererconnectedlinenum':_0x543acd[_0x31de('0x17')],'transfererconnectedlinename':_0x543acd[_0x31de('0x18')],'transfereraccountcode':_0x543acd[_0x31de('0x19')],'transferercontext':_0x543acd[_0x31de('0x1a')],'transfererexten':_0x543acd[_0x31de('0x1b')],'transfererlinkedid':_0x543acd[_0x31de('0x1c')],'transfereechannel':_0x543acd[_0x31de('0x1d')],'transfereecalleridnum':_0x543acd['transfertargetcalleridnum'],'transfereecalleridname':_0x543acd[_0x31de('0x1e')],'transfereeconnectedlinenum':_0x543acd[_0x31de('0x1f')],'transfereeconnectedlinename':_0x543acd[_0x31de('0x20')],'transfereeaccountcode':_0x543acd[_0x31de('0x21')],'transfereecontext':_0x543acd[_0x31de('0x22')],'transfereeexten':_0x543acd['transfertargetexten'],'transfereelinkedid':_0x543acd[_0x31de('0x23')],'isexternal':_0x543acd[_0x31de('0x10')],'context':_0x543acd[_0x31de('0x24')],'extension':_0x543acd[_0x31de('0x25')],'type':_0x31de('0x26')},'log':_0x31de('0x2')});};
\ No newline at end of file
index 320dd3d..17caf6e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3f34=['channel','format','filename','wav','MixMonitor','ai(mixmonitorid)','monitors','toLowerCase','YYYY-MM-DD\x20HH:mm:ss','rec','mixmonitorid','status','MixMonitor\x20Success','uniqueid','StopMixMonitor','destinationchannel','stop','/var/spool/asterisk/monitor/','Channel\x20doesn\x27t\x20exist','queueChannels','voicequeuechannelredirect','Redirect','exten','context','telephones','trunks','outboundChannels','campaigns','emit','custom:','event','faxAccounts','send','checkAfterSend','server','127.0.0.1','log','AMI\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','util','jayson/promise','validate','bluebird','moment','../../../config/environment','../properties','../ami','listen','%s/%s','SIP','name','timers','timer','updateAcw','agents','pause','QueuePause','isConnected','error','asterisk','ami\x20disconnected','pick','module','action','Reload','Action','then','message','join','command','Command','content','catch','voiceQueues','hasOwnProperty','strategy','answered','available','loggedIn','pTalking','sumBillable','sumHoldTime','talking','total','type','unmanaged','loggedInDb','outbound','dialActive','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoAnswerCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAnsweredCalls','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalTotalCalls','originated','Trunk','active','Interval','push','length','values','username','voicechannel','map','find','channels'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x3f34,0xa8));var _0x43f3=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x3f34[_0x3dd15e];return _0x231fd0;};'use strict';var _=require('lodash');var util=require(_0x43f3('0x0'));var jayson=require(_0x43f3('0x1'));var schema=require(_0x43f3('0x2'));var BPromise=require(_0x43f3('0x3'));var moment=require(_0x43f3('0x4'));var config=require(_0x43f3('0x5'));var properties=require(_0x43f3('0x6'));var ami=require(_0x43f3('0x7'));exports[_0x43f3('0x8')]=function(_0x35170f,_0x559e86,_0x35aaa3){return new BPromise(function(_0x399193,_0x4b13fb){var _0x326f9b={'QueuePause':function(_0x29cdcb){return new Promise(function(_0x356360,_0x395ea2){var _0x5c1bb2=util['format'](_0x43f3('0x9'),_0x43f3('0xa'),_0x29cdcb[_0x43f3('0xb')]);if(_0x35170f['timers']&&_0x35170f[_0x43f3('0xc')][_0x5c1bb2]&&_0x35170f[_0x43f3('0xc')][_0x5c1bb2][_0x43f3('0xd')]){_0x35170f[_0x43f3('0xc')][_0x5c1bb2][_0x43f3('0xe')]();}if(_0x35170f[_0x43f3('0xf')][_0x5c1bb2]){_0x35170f[_0x43f3('0xf')][_0x5c1bb2]['updateStatusRealtime']({'statePause':_0x29cdcb[_0x43f3('0x10')]?!![]:![]});}_0x356360({'code':0xc8,'message':_0x43f3('0x11')});});},'Reload':function(_0x16e70e){var _0x3b5f4d=this;return new Promise(function(_0x5581fd,_0x468604){if(ami[_0x43f3('0x12')]()==![]){return _0x468604(_0x3b5f4d[_0x43f3('0x13')](0x1f4,[config[_0x43f3('0x14')]['ip'],config['asterisk']['username'],_0x43f3('0x15')]['join']('\x20')));}_0x16e70e=_[_0x43f3('0x16')](_0x16e70e,_['keys'](properties[_0x43f3('0x17')]));_0x16e70e[_0x43f3('0x18')]=_0x43f3('0x19');return ami[_0x43f3('0x1a')](_0x16e70e)[_0x43f3('0x1b')](function(_0x79e421){_0x5581fd({'code':0xc8,'message':_0x79e421[_0x43f3('0x1c')]});})['catch'](function(_0x6a359c){_0x468604(_0x3b5f4d[_0x43f3('0x13')](0x1f5,_0x6a359c['message']));});});},'Command':function(_0x50959d){var _0x5823c9=this;return new Promise(function(_0x20ea94,_0x3dbb48){if(ami[_0x43f3('0x12')]()==![]){return _0x3dbb48(_0x5823c9['error'](0x1f4,[config[_0x43f3('0x14')]['ip'],config[_0x43f3('0x14')]['username'],'ami\x20disconnected'][_0x43f3('0x1d')]('\x20')));}_0x50959d=_[_0x43f3('0x16')](_0x50959d,_0x43f3('0x1e'));_0x50959d[_0x43f3('0x18')]=_0x43f3('0x1f');return ami[_0x43f3('0x1a')](_0x50959d)['then'](function(_0x48230c){_0x20ea94({'code':0xc8,'message':_0x48230c[_0x43f3('0x20')]});})[_0x43f3('0x21')](function(_0x4e62f4){_0x3dbb48(_0x5823c9['error'](0x1f5,_0x4e62f4[_0x43f3('0x1c')]));});});},'VoiceQueues':function(_0x3e73a5){return new Promise(function(_0x331860,_0x360cdc){var _0x14afe0=[];for(var _0x111ed6 in _0x35170f['voiceQueues']){if(_0x35170f[_0x43f3('0x22')][_0x43f3('0x23')](_0x111ed6)){var _0x1d93be=_0x35170f[_0x43f3('0x22')][_0x111ed6];var _0x4a7c5c={'id':_0x1d93be['id'],'name':_0x1d93be[_0x43f3('0xb')],'strategy':_0x1d93be[_0x43f3('0x24')],'answered':_0x1d93be[_0x43f3('0x25')],'available':_0x1d93be[_0x43f3('0x26')],'loggedIn':_0x1d93be[_0x43f3('0x27')],'pTalking':_0x1d93be[_0x43f3('0x28')],'sumBillable':_0x1d93be[_0x43f3('0x29')],'sumDuration':_0x1d93be['sumDuration'],'sumHoldTime':_0x1d93be[_0x43f3('0x2a')]||0x0,'talking':_0x1d93be[_0x43f3('0x2b')],'total':_0x1d93be[_0x43f3('0x2c')],'type':_0x1d93be[_0x43f3('0x2d')],'unmanaged':_0x1d93be[_0x43f3('0x2e')],'abandoned':_0x1d93be['abandoned'],'waiting':_0x1d93be['waiting'],'loggedInDb':_0x1d93be[_0x43f3('0x2f')]};if(_0x1d93be['type']===_0x43f3('0x30')){_0x4a7c5c[_0x43f3('0x31')]=_0x1d93be[_0x43f3('0x31')];_0x4a7c5c['dialMethod']=_0x1d93be['dialMethod'];_0x4a7c5c[_0x43f3('0x32')]=_0x1d93be[_0x43f3('0x32')];_0x4a7c5c['dialOriginateCallerIdNumber']=_0x1d93be[_0x43f3('0x33')];_0x4a7c5c[_0x43f3('0x34')]=_0x1d93be[_0x43f3('0x34')];_0x4a7c5c[_0x43f3('0x35')]=_0x1d93be[_0x43f3('0x35')];_0x4a7c5c[_0x43f3('0x36')]=_0x1d93be[_0x43f3('0x36')];_0x4a7c5c[_0x43f3('0x37')]=_0x1d93be[_0x43f3('0x37')];_0x4a7c5c[_0x43f3('0x38')]=_0x1d93be['outboundBlacklistCallsDay'];_0x4a7c5c['outboundBusyCallsDay']=_0x1d93be[_0x43f3('0x39')];_0x4a7c5c['outboundCongestionCallsDay']=_0x1d93be['outboundCongestionCallsDay'];_0x4a7c5c['outboundDropCallsDayACS']=_0x1d93be[_0x43f3('0x3a')];_0x4a7c5c[_0x43f3('0x3b')]=_0x1d93be['outboundDropCallsDayCallersExit'];_0x4a7c5c[_0x43f3('0x3c')]=_0x1d93be[_0x43f3('0x3c')];_0x4a7c5c['outboundNoAnswerCallsDay']=_0x1d93be[_0x43f3('0x3d')];_0x4a7c5c['outboundNoSuchCallsDay']=_0x1d93be['outboundNoSuchCallsDay'];_0x4a7c5c[_0x43f3('0x3e')]=_0x1d93be['outboundOriginateFailureCallsDay'];_0x4a7c5c[_0x43f3('0x3f')]=_0x1d93be[_0x43f3('0x3f')];_0x4a7c5c['outboundRejectCallsDay']=_0x1d93be[_0x43f3('0x40')];_0x4a7c5c[_0x43f3('0x41')]=_0x1d93be[_0x43f3('0x41')];_0x4a7c5c[_0x43f3('0x42')]=_0x1d93be[_0x43f3('0x42')];_0x4a7c5c[_0x43f3('0x43')]=_0x1d93be[_0x43f3('0x43')];_0x4a7c5c[_0x43f3('0x44')]=_0x1d93be[_0x43f3('0x44')];_0x4a7c5c[_0x43f3('0x45')]=_0x1d93be[_0x43f3('0x45')];_0x4a7c5c[_0x43f3('0x46')]=_0x1d93be[_0x43f3('0x46')];_0x4a7c5c[_0x43f3('0x47')]=_0x1d93be['predictiveIntervalErlangCalls'];_0x4a7c5c[_0x43f3('0x48')]=_0x1d93be[_0x43f3('0x48')];_0x4a7c5c['predictiveIntervalHitRate']=_0x1d93be[_0x43f3('0x49')];_0x4a7c5c[_0x43f3('0x4a')]=_0x1d93be[_0x43f3('0x4a')];_0x4a7c5c[_0x43f3('0x4b')]=_0x1d93be[_0x43f3('0x4b')];_0x4a7c5c[_0x43f3('0x4c')]=_0x1d93be[_0x43f3('0x4c')];_0x4a7c5c[_0x43f3('0x4d')]=_0x1d93be[_0x43f3('0x4d')];_0x4a7c5c[_0x43f3('0x1c')]=_0x1d93be[_0x43f3('0x1c')];_0x4a7c5c[_0x43f3('0x4e')]=_0x1d93be[_0x43f3('0x4e')];}if(_0x1d93be[_0x43f3('0x4f')]){_0x4a7c5c[_0x43f3('0x4f')]={'id':_0x1d93be[_0x43f3('0x4f')]['id'],'name':_0x1d93be['Trunk'][_0x43f3('0xb')],'active':_0x1d93be[_0x43f3('0x4f')][_0x43f3('0x50')],'callerid':_0x1d93be[_0x43f3('0x4f')]['callerid']};}if(_0x1d93be['Interval']){_0x4a7c5c['Interval']={'id':_0x1d93be[_0x43f3('0x51')]['id'],'name':_0x1d93be[_0x43f3('0x51')]['name']};}_0x14afe0[_0x43f3('0x52')](_0x4a7c5c);}}_0x331860({'count':_0x14afe0[_0x43f3('0x53')],'rows':_0x14afe0});});},'VoiceChannels':function(_0x2f40e2){return new Promise(function(_0x4ae7e7,_0x169de9){var _0x5c68d1=_[_0x43f3('0x54')](_0x35170f['channels']);_0x4ae7e7({'count':_0x5c68d1['length'],'rows':_0x5c68d1});});},'VoiceChannelMixMonitor':function(_0x4c6bc0){var _0x55e98b=this;return new Promise(function(_0x35640a,_0x29fc67){if(ami['isConnected']()==![]){return _0x29fc67(_0x55e98b[_0x43f3('0x13')](0x1f4,[config[_0x43f3('0x14')]['ip'],config[_0x43f3('0x14')][_0x43f3('0x55')],_0x43f3('0x15')][_0x43f3('0x1d')]('\x20')));}var _0x5ee2b8=schema(properties[_0x43f3('0x56')])[_0x43f3('0x2')](_0x4c6bc0);if(_0x5ee2b8[_0x43f3('0x53')]>0x0){return _0x29fc67(_0x55e98b[_0x43f3('0x13')](0x1f4,_[_0x43f3('0x57')](_0x5ee2b8,_0x43f3('0x1c'))['join'](',\x20')));}var _0x5bef2c=_[_0x43f3('0x58')](_0x35170f[_0x43f3('0x59')],{'uniqueid':_0x4c6bc0['uniqueid']});if(_0x5bef2c&&_0x5bef2c[_0x43f3('0x5a')]){var _0x41abba=util[_0x43f3('0x5b')]('%s.%s',_0x4c6bc0[_0x43f3('0x5c')]||_0x4c6bc0['uniqueid'],_0x4c6bc0[_0x43f3('0x5b')]||_0x43f3('0x5d'));return ami['Action']({'action':_0x43f3('0x5e'),'channel':_0x5bef2c['channel'],'file':_0x41abba,'options':_0x43f3('0x5f')})[_0x43f3('0x1b')](function(_0x1ac147){var _0x2895eb=_[_0x43f3('0x58')](_0x5bef2c[_0x43f3('0x60')],{'filename':'/var/spool/asterisk/monitor/'+_0x41abba['toLowerCase']()});if(_['isNil'](_0x2895eb)){_0x5bef2c[_0x43f3('0x60')][_0x43f3('0x52')]({'filename':'/var/spool/asterisk/monitor/'+_0x41abba[_0x43f3('0x61')](),'createdAt':moment()[_0x43f3('0x5b')](_0x43f3('0x62')),'mixmonitorid':_0x1ac147['mixmonitorid'],'status':_0x43f3('0x63')});}else{_0x2895eb[_0x43f3('0x64')]=_0x1ac147[_0x43f3('0x64')];_0x2895eb[_0x43f3('0x65')]=_0x43f3('0x63');}_0x35640a({'code':0xc8,'message':[_0x4c6bc0['uniqueid'],_0x43f3('0x66'),_0x1ac147[_0x43f3('0x64')]][_0x43f3('0x1d')]('\x20'),'mixmonitorid':_0x1ac147['mixmonitorid']});})[_0x43f3('0x21')](function(_0x1d116f){_0x29fc67(_0x55e98b[_0x43f3('0x13')](0x1f5,[_0x4c6bc0[_0x43f3('0x67')],_0x1d116f[_0x43f3('0x1c')][_0x43f3('0x61')]()][_0x43f3('0x1d')]('\x20')));});}else{return _0x29fc67(_0x55e98b[_0x43f3('0x13')](0x1f5,'Channel\x20doesn\x27t\x20exist'));}});},'VoiceChannelStopMixMonitor':function(_0x49f307){var _0x24f8ca=this;return new Promise(function(_0x1e398b,_0x5ebb76){if(ami[_0x43f3('0x12')]()==![]){return _0x5ebb76(_0x24f8ca[_0x43f3('0x13')](0x1f4,[config[_0x43f3('0x14')]['ip'],config[_0x43f3('0x14')][_0x43f3('0x55')],_0x43f3('0x15')][_0x43f3('0x1d')]('\x20')));}var _0x30ac35=schema(properties[_0x43f3('0x56')])[_0x43f3('0x2')](_0x49f307);if(_0x30ac35['length']>0x0){return _0x5ebb76(_0x24f8ca['error'](0x1f4,_[_0x43f3('0x57')](_0x30ac35,'message')[_0x43f3('0x1d')](',\x20')));}var _0x29f90d=_[_0x43f3('0x58')](_0x35170f[_0x43f3('0x59')],{'uniqueid':_0x49f307[_0x43f3('0x67')]});if(_0x29f90d){return BPromise['resolve']()[_0x43f3('0x1b')](function(){if(_0x29f90d[_0x43f3('0x5a')]){return ami['Action']({'action':_0x43f3('0x68'),'channel':_0x29f90d[_0x43f3('0x5a')],'mixmonitorid':_0x49f307[_0x43f3('0x64')]})['catch'](function(_0x3f2fdc){});}})[_0x43f3('0x1b')](function(){if(_0x29f90d[_0x43f3('0x69')]){return ami[_0x43f3('0x1a')]({'action':_0x43f3('0x68'),'channel':_0x29f90d[_0x43f3('0x69')],'mixmonitorid':_0x49f307[_0x43f3('0x64')]})[_0x43f3('0x21')](function(_0xaf06e3){});}})['then'](function(_0xb91716){var _0x45ccc7=_[_0x43f3('0x58')](_0x29f90d[_0x43f3('0x60')],{'mixmonitorid':_0x49f307['mixmonitorid']});if(_0x45ccc7){_0x45ccc7['status']=_0x43f3('0x6a');}})['then'](function(){var _0x4c6384=util[_0x43f3('0x5b')]('%s.%s',_0x49f307['filename']||_0x49f307['uniqueid'],_0x49f307[_0x43f3('0x5b')]||'wav');var _0x5a063f=_[_0x43f3('0x58')](_0x29f90d['monitors'],{'filename':_0x43f3('0x6b')+_0x4c6384[_0x43f3('0x61')]()});if(_0x5a063f){_0x5a063f['status']=_0x43f3('0x6a');}})['then'](function(){_0x1e398b({'code':0xc8,'message':[_0x49f307[_0x43f3('0x67')],'StopMixMonitor\x20Success'][_0x43f3('0x1d')]('\x20')});})[_0x43f3('0x21')](function(_0x14680f){_0x5ebb76(_0x24f8ca[_0x43f3('0x13')](0x1f5,[_0x49f307['uniqueid'],_0x14680f[_0x43f3('0x1c')][_0x43f3('0x61')]()][_0x43f3('0x1d')]('\x20')));});}else{return _0x5ebb76(_0x24f8ca[_0x43f3('0x13')](0x1f5,_0x43f3('0x6c')));}});},'VoiceQueuesChannels':function(_0x3cc3d9){return new Promise(function(_0x2e5bb8,_0x2a7111){var _0x5bfa5d=_[_0x43f3('0x54')](_0x35170f[_0x43f3('0x6d')]);_0x2e5bb8({'count':_0x5bfa5d['length'],'rows':_0x5bfa5d});});},'VoiceQueuesChannel':function(_0x52bf9f){var _0x227587=this;return new Promise(function(_0x349444,_0x229cbe){var _0x211a29=schema(properties['voicequeuechannel'])[_0x43f3('0x2')](_0x52bf9f);if(_0x211a29[_0x43f3('0x53')]>0x0){return _0x229cbe(_0x227587[_0x43f3('0x13')](0x1f4,_['map'](_0x211a29,_0x43f3('0x1c'))['join'](',\x20')));}var _0x585c66=_['find'](_0x35170f[_0x43f3('0x6d')],{'uniqueid':_0x52bf9f['uniqueid']});if(_0x585c66){_0x349444(_0x585c66);}else{return _0x229cbe(_0x227587[_0x43f3('0x13')](0x1f5,'Channel\x20doesn\x27t\x20exist'));}});},'VoiceQueuesChannelHangup':function(_0x390705){var _0x326825=this;return new Promise(function(_0x29872a,_0x390024){if(ami[_0x43f3('0x12')]()==![]){return _0x390024(_0x326825['error'](0x1f4,[config[_0x43f3('0x14')]['ip'],config[_0x43f3('0x14')][_0x43f3('0x55')],'ami\x20disconnected'][_0x43f3('0x1d')]('\x20')));}var _0x37c08e=schema(properties['voicequeuechannelhangup'])[_0x43f3('0x2')](_0x390705);if(_0x37c08e[_0x43f3('0x53')]>0x0){return _0x390024(_0x326825['error'](0x1f4,_[_0x43f3('0x57')](_0x37c08e,_0x43f3('0x1c'))['join'](',\x20')));}var _0x3aaef1=_['find'](_0x35170f[_0x43f3('0x6d')],{'uniqueid':_0x390705[_0x43f3('0x67')]});if(_0x3aaef1&&_0x3aaef1['channel']){return ami['Action']({'action':'Hangup','channel':_0x3aaef1['channel']})[_0x43f3('0x1b')](function(_0x34a17c){_0x29872a({'code':0xc8,'message':[_0x390705[_0x43f3('0x67')],_0x34a17c[_0x43f3('0x1c')]['toLowerCase']()][_0x43f3('0x1d')]('\x20')});})[_0x43f3('0x21')](function(_0x282204){_0x390024(_0x326825[_0x43f3('0x13')](0x1f5,[_0x390705[_0x43f3('0x67')],_0x282204[_0x43f3('0x1c')][_0x43f3('0x61')]()][_0x43f3('0x1d')]('\x20')));});}else{return _0x390024(_0x326825['error'](0x1f5,_0x43f3('0x6c')));}});},'VoiceQueuesChannelRedirect':function(_0x389387){var _0x4f7dad=this;return new Promise(function(_0x69766,_0x170ac2){if(ami[_0x43f3('0x12')]()==![]){return _0x170ac2(_0x4f7dad[_0x43f3('0x13')](0x1f4,[config[_0x43f3('0x14')]['ip'],config[_0x43f3('0x14')]['username'],'ami\x20disconnected']['join']('\x20')));}var _0x2fd28d=schema(properties[_0x43f3('0x6e')])[_0x43f3('0x2')](_0x389387);if(_0x2fd28d['length']>0x0){return _0x170ac2(_0x4f7dad['error'](0x1f4,_[_0x43f3('0x57')](_0x2fd28d,'message')[_0x43f3('0x1d')](',\x20')));}var _0x4efa4a=_[_0x43f3('0x58')](_0x35170f[_0x43f3('0x6d')],{'uniqueid':_0x389387[_0x43f3('0x67')]});if(_0x4efa4a&&_0x4efa4a[_0x43f3('0x5a')]){return ami[_0x43f3('0x1a')]({'action':_0x43f3('0x6f'),'channel':_0x4efa4a[_0x43f3('0x5a')],'exten':_0x389387[_0x43f3('0x70')],'context':_0x389387[_0x43f3('0x71')]||_0x4efa4a[_0x43f3('0x71')],'priority':0x1})[_0x43f3('0x1b')](function(_0x4b1cca){_0x69766({'code':0xc8,'message':[_0x389387[_0x43f3('0x67')],_0x4b1cca[_0x43f3('0x1c')][_0x43f3('0x61')]()][_0x43f3('0x1d')]('\x20')});})[_0x43f3('0x21')](function(_0x526faa){_0x170ac2(_0x4f7dad[_0x43f3('0x13')](0x1f5,[_0x389387['uniqueid'],_0x526faa[_0x43f3('0x1c')][_0x43f3('0x61')]()][_0x43f3('0x1d')]('\x20')));});}else{return _0x170ac2(_0x4f7dad[_0x43f3('0x13')](0x1f5,_0x43f3('0x6c')));}});},'Agents':function(_0x45e7cd){return new Promise(function(_0x2c40f3,_0x3fabec){var _0x1203d7=_[_0x43f3('0x54')](_0x35170f[_0x43f3('0xf')]);_0x2c40f3({'count':_0x1203d7[_0x43f3('0x53')],'rows':_0x1203d7});});},'Telephones':function(_0x4cbfb6){return new Promise(function(_0x15e28a,_0x5cf99a){var _0x59064c=_[_0x43f3('0x54')](_0x35170f[_0x43f3('0x72')]);_0x15e28a({'count':_0x59064c[_0x43f3('0x53')],'rows':_0x59064c});});},'Trunks':function(_0x378baf){return new Promise(function(_0x3ec204,_0x377ab9){var _0x57015a=_['values'](_0x35170f[_0x43f3('0x73')]);_0x3ec204({'count':_0x57015a[_0x43f3('0x53')],'rows':_0x57015a});});},'OutboundChannels':function(_0x45e6e1){return new Promise(function(_0x5d4bca,_0x9f21d0){var _0x52855f=_['values'](_0x35170f[_0x43f3('0x74')]);_0x5d4bca({'count':_0x52855f[_0x43f3('0x53')],'rows':_0x52855f});});},'Outbound':function(_0x527950){return new Promise(function(_0x3a0a1c,_0x5057c2){_0x3a0a1c(_0x35170f['outbound']);});},'Campaigns':function(_0x2b742e){return new Promise(function(_0x3f4b2a,_0x3e036e){var _0x52c0b4=_[_0x43f3('0x54')](_0x35170f[_0x43f3('0x75')]);_0x3f4b2a({'count':_0x52c0b4[_0x43f3('0x53')],'rows':_0x52c0b4});});},'VoiceQueuesPreview':function(_0x34a254){var _0x599bf9=this;return new Promise(function(_0x2719ed,_0x484d9e){_0x559e86['run'](_0x34a254['id'])['then'](function(_0xcbd895){_0x2719ed({'code':0xc8,'message':_0xcbd895[_0x43f3('0x1c')]});})[_0x43f3('0x21')](function(_0x5e1611){_0x484d9e(_0x599bf9['error'](0x1f4,_0x5e1611['message']));});});},'EventManager':function(_0x24fd2a){var _0x43af32=this;return new Promise(function(_0x4d93d8,_0x206916){if(!_0x24fd2a['event']){return _0x206916(_0x43af32['error'](0x1f4,'Event\x20name\x20mandatory'));}ami[_0x43f3('0x76')](_0x43f3('0x77')+_0x24fd2a[_0x43f3('0x78')],_0x24fd2a[_0x43f3('0x1c')]);_0x4d93d8({'code':0xc8,'message':_0x24fd2a});});},'FaxAccounts':function(_0x42fb9a){return new Promise(function(_0x5990c2,_0x21f082){var _0x1d1092=_[_0x43f3('0x54')](_0x35170f[_0x43f3('0x79')]);_0x5990c2({'count':_0x1d1092[_0x43f3('0x53')],'rows':_0x1d1092});});},'SendFax':function(_0x42cee4){var _0x3fb287=this;return new Promise(function(_0x3ea555,_0x159b5b){_0x35aaa3[_0x43f3('0x7a')](_0x42cee4)[_0x43f3('0x1b')](function(_0x2992bd){_0x3ea555({'code':0xc8,'message':_0x2992bd[_0x43f3('0x1c')]});})['catch'](function(_0x13bbad){_0x159b5b(_0x3fb287[_0x43f3('0x13')](0x1f4,_0x13bbad[_0x43f3('0x1c')]));});});},'CheckAfterSend':function(_0x478d72){var _0x2c89bd=this;return new Promise(function(_0x4d9ac9,_0x74e0b7){_0x35aaa3[_0x43f3('0x7b')](_0x478d72)[_0x43f3('0x1b')](function(_0x202a76){_0x4d9ac9({'code':0xc8,'message':_0x202a76[_0x43f3('0x1c')]});})['catch'](function(_0x8fa0f1){_0x74e0b7(_0x2c89bd[_0x43f3('0x13')](0x1f4,_0x8fa0f1[_0x43f3('0x1c')]));});});}};var _0x574b97=jayson[_0x43f3('0x7c')](_0x326f9b)['http']();_0x574b97['on'](_0x43f3('0x13'),function(_0x44605a){return _0x4b13fb(_0x44605a);});_0x574b97[_0x43f3('0x8')](0x232a,_0x43f3('0x7d'),function(){console[_0x43f3('0x7e')](_0x43f3('0x7f'),0x232a);return _0x399193(_0x43f3('0x80')+0x232a);});});};
\ No newline at end of file
+var _0x12a8=['values','queueChannels','voicequeuechannel','voicequeuechannelhangup','voicequeuechannelredirect','exten','context','telephones','trunks','outboundChannels','campaigns','event','Event\x20name\x20mandatory','emit','send','http','127.0.0.1','AMI\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','util','validate','bluebird','../../../config/environment','../properties','../ami','listen','format','%s/%s','name','timers','agents','updateStatusRealtime','pause','QueuePause','error','asterisk','join','keys','Action','then','message','catch','isConnected','username','command','action','Command','voiceQueues','hasOwnProperty','strategy','answered','loggedIn','pTalking','sumBillable','sumDuration','talking','total','unmanaged','abandoned','loggedInDb','outbound','dialActive','dialMethod','dialOriginateCallerIdName','dialOriginateCallerIdNumber','dialOriginateTimeout','dialPrefix','outboundAnswerAgiCallsDay','outboundAnswerCallsDay','outboundBlacklistCallsDay','outboundBusyCallsDay','outboundCongestionCallsDay','outboundDropCallsDayACS','outboundDropCallsDayCallersExit','outboundDropCallsDayTimeout','outboundNoSuchCallsDay','outboundOriginateFailureCallsDay','outboundReCallsDay','outboundRejectCallsDay','outboundUnknownCallsDay','predictiveIntervalAvgHoldtime','predictiveIntervalAvgTalktime','predictiveIntervalDroppedCallsCallersExit','predictiveIntervalDroppedCallsTimeout','predictiveIntervalErlangCalls','predictiveIntervalErlangCallsDroppedCalls','predictiveIntervalHitRate','predictiveIntervalLowerLimit','predictiveIntervalMultiplicativeFactor','predictiveIntervalPauses','predictiveIntervalTotalCalls','originated','Trunk','active','callerid','Interval','push','length','channels','ami\x20disconnected','voicechannel','find','uniqueid','channel','filename','MixMonitor','ai(mixmonitorid)','monitors','/var/spool/asterisk/monitor/','toLowerCase','mixmonitorid','rec','status','map','resolve','StopMixMonitor','destinationchannel','stop','wav','Channel\x20doesn\x27t\x20exist'];(function(_0x12af8a,_0x23c7ab){var _0x300e09=function(_0x441312){while(--_0x441312){_0x12af8a['push'](_0x12af8a['shift']());}};_0x300e09(++_0x23c7ab);}(_0x12a8,0x8c));var _0x812a=function(_0x42cae2,_0x284ef8){_0x42cae2=_0x42cae2-0x0;var _0x5f256f=_0x12a8[_0x42cae2];return _0x5f256f;};'use strict';var _=require(_0x812a('0x0'));var util=require(_0x812a('0x1'));var jayson=require('jayson/promise');var schema=require(_0x812a('0x2'));var BPromise=require(_0x812a('0x3'));var moment=require('moment');var config=require(_0x812a('0x4'));var properties=require(_0x812a('0x5'));var ami=require(_0x812a('0x6'));exports[_0x812a('0x7')]=function(_0x1b9ccf,_0x2681ad,_0x549a0){return new BPromise(function(_0x252450,_0x4df4b5){var _0x4f4ee4={'QueuePause':function(_0x4bc223){return new Promise(function(_0x4c39b6,_0x3401ae){var _0x8fd753=util[_0x812a('0x8')](_0x812a('0x9'),'SIP',_0x4bc223[_0x812a('0xa')]);if(_0x1b9ccf[_0x812a('0xb')]&&_0x1b9ccf[_0x812a('0xb')][_0x8fd753]&&_0x1b9ccf[_0x812a('0xb')][_0x8fd753]['timer']){_0x1b9ccf['timers'][_0x8fd753]['updateAcw']();}if(_0x1b9ccf['agents'][_0x8fd753]){_0x1b9ccf[_0x812a('0xc')][_0x8fd753][_0x812a('0xd')]({'statePause':_0x4bc223[_0x812a('0xe')]?!![]:![]});}_0x4c39b6({'code':0xc8,'message':_0x812a('0xf')});});},'Reload':function(_0x8f2b2e){var _0x2c7184=this;return new Promise(function(_0x2789d9,_0x39c82a){if(ami['isConnected']()==![]){return _0x39c82a(_0x2c7184[_0x812a('0x10')](0x1f4,[config[_0x812a('0x11')]['ip'],config[_0x812a('0x11')]['username'],'ami\x20disconnected'][_0x812a('0x12')]('\x20')));}_0x8f2b2e=_['pick'](_0x8f2b2e,_[_0x812a('0x13')](properties['module']));_0x8f2b2e['action']='Reload';return ami[_0x812a('0x14')](_0x8f2b2e)[_0x812a('0x15')](function(_0x477f32){_0x2789d9({'code':0xc8,'message':_0x477f32[_0x812a('0x16')]});})[_0x812a('0x17')](function(_0x26d68e){_0x39c82a(_0x2c7184['error'](0x1f5,_0x26d68e[_0x812a('0x16')]));});});},'Command':function(_0x2063d2){var _0xc0a577=this;return new Promise(function(_0x592085,_0xa990d3){if(ami[_0x812a('0x18')]()==![]){return _0xa990d3(_0xc0a577[_0x812a('0x10')](0x1f4,[config[_0x812a('0x11')]['ip'],config[_0x812a('0x11')][_0x812a('0x19')],'ami\x20disconnected']['join']('\x20')));}_0x2063d2=_['pick'](_0x2063d2,_0x812a('0x1a'));_0x2063d2[_0x812a('0x1b')]=_0x812a('0x1c');return ami['Action'](_0x2063d2)[_0x812a('0x15')](function(_0x16d30c){_0x592085({'code':0xc8,'message':_0x16d30c['content']});})[_0x812a('0x17')](function(_0xae6cdf){_0xa990d3(_0xc0a577[_0x812a('0x10')](0x1f5,_0xae6cdf[_0x812a('0x16')]));});});},'VoiceQueues':function(_0x4f8c3f){return new Promise(function(_0x5547ac,_0x1048c1){var _0x3cb4e4=[];for(var _0x6cb351 in _0x1b9ccf[_0x812a('0x1d')]){if(_0x1b9ccf[_0x812a('0x1d')][_0x812a('0x1e')](_0x6cb351)){var _0x554158=_0x1b9ccf['voiceQueues'][_0x6cb351];var _0x121c9d={'id':_0x554158['id'],'name':_0x554158[_0x812a('0xa')],'strategy':_0x554158[_0x812a('0x1f')],'answered':_0x554158[_0x812a('0x20')],'available':_0x554158['available'],'loggedIn':_0x554158[_0x812a('0x21')],'pTalking':_0x554158[_0x812a('0x22')],'sumBillable':_0x554158[_0x812a('0x23')],'sumDuration':_0x554158[_0x812a('0x24')],'sumHoldTime':_0x554158['sumHoldTime']||0x0,'talking':_0x554158[_0x812a('0x25')],'total':_0x554158[_0x812a('0x26')],'type':_0x554158['type'],'unmanaged':_0x554158[_0x812a('0x27')],'abandoned':_0x554158[_0x812a('0x28')],'waiting':_0x554158['waiting'],'loggedInDb':_0x554158[_0x812a('0x29')]};if(_0x554158['type']===_0x812a('0x2a')){_0x121c9d[_0x812a('0x2b')]=_0x554158[_0x812a('0x2b')];_0x121c9d[_0x812a('0x2c')]=_0x554158['dialMethod'];_0x121c9d[_0x812a('0x2d')]=_0x554158['dialOriginateCallerIdName'];_0x121c9d[_0x812a('0x2e')]=_0x554158[_0x812a('0x2e')];_0x121c9d['dialOriginateTimeout']=_0x554158[_0x812a('0x2f')];_0x121c9d[_0x812a('0x30')]=_0x554158[_0x812a('0x30')];_0x121c9d[_0x812a('0x31')]=_0x554158['outboundAnswerAgiCallsDay'];_0x121c9d['outboundAnswerCallsDay']=_0x554158[_0x812a('0x32')];_0x121c9d['outboundBlacklistCallsDay']=_0x554158[_0x812a('0x33')];_0x121c9d['outboundBusyCallsDay']=_0x554158[_0x812a('0x34')];_0x121c9d[_0x812a('0x35')]=_0x554158[_0x812a('0x35')];_0x121c9d['outboundDropCallsDayACS']=_0x554158[_0x812a('0x36')];_0x121c9d[_0x812a('0x37')]=_0x554158[_0x812a('0x37')];_0x121c9d[_0x812a('0x38')]=_0x554158['outboundDropCallsDayTimeout'];_0x121c9d['outboundNoAnswerCallsDay']=_0x554158['outboundNoAnswerCallsDay'];_0x121c9d[_0x812a('0x39')]=_0x554158[_0x812a('0x39')];_0x121c9d['outboundOriginateFailureCallsDay']=_0x554158[_0x812a('0x3a')];_0x121c9d[_0x812a('0x3b')]=_0x554158[_0x812a('0x3b')];_0x121c9d[_0x812a('0x3c')]=_0x554158[_0x812a('0x3c')];_0x121c9d[_0x812a('0x3d')]=_0x554158[_0x812a('0x3d')];_0x121c9d['predictiveIntervalAnsweredCalls']=_0x554158['predictiveIntervalAnsweredCalls'];_0x121c9d[_0x812a('0x3e')]=_0x554158[_0x812a('0x3e')];_0x121c9d[_0x812a('0x3f')]=_0x554158[_0x812a('0x3f')];_0x121c9d[_0x812a('0x40')]=_0x554158[_0x812a('0x40')];_0x121c9d[_0x812a('0x41')]=_0x554158[_0x812a('0x41')];_0x121c9d[_0x812a('0x42')]=_0x554158['predictiveIntervalErlangCalls'];_0x121c9d[_0x812a('0x43')]=_0x554158[_0x812a('0x43')];_0x121c9d[_0x812a('0x44')]=_0x554158['predictiveIntervalHitRate'];_0x121c9d['predictiveIntervalLowerLimit']=_0x554158[_0x812a('0x45')];_0x121c9d[_0x812a('0x46')]=_0x554158[_0x812a('0x46')];_0x121c9d[_0x812a('0x47')]=_0x554158[_0x812a('0x47')];_0x121c9d[_0x812a('0x48')]=_0x554158[_0x812a('0x48')];_0x121c9d[_0x812a('0x16')]=_0x554158[_0x812a('0x16')];_0x121c9d[_0x812a('0x49')]=_0x554158[_0x812a('0x49')];}if(_0x554158[_0x812a('0x4a')]){_0x121c9d[_0x812a('0x4a')]={'id':_0x554158[_0x812a('0x4a')]['id'],'name':_0x554158[_0x812a('0x4a')][_0x812a('0xa')],'active':_0x554158[_0x812a('0x4a')][_0x812a('0x4b')],'callerid':_0x554158[_0x812a('0x4a')][_0x812a('0x4c')]};}if(_0x554158[_0x812a('0x4d')]){_0x121c9d[_0x812a('0x4d')]={'id':_0x554158[_0x812a('0x4d')]['id'],'name':_0x554158[_0x812a('0x4d')][_0x812a('0xa')]};}_0x3cb4e4[_0x812a('0x4e')](_0x121c9d);}}_0x5547ac({'count':_0x3cb4e4[_0x812a('0x4f')],'rows':_0x3cb4e4});});},'VoiceChannels':function(_0x2aa0dc){return new Promise(function(_0x5031d5,_0x94f4fc){var _0x4420be=_['values'](_0x1b9ccf[_0x812a('0x50')]);_0x5031d5({'count':_0x4420be['length'],'rows':_0x4420be});});},'VoiceChannelMixMonitor':function(_0x2679a3){var _0x99d977=this;return new Promise(function(_0x5b0ed9,_0x1c7c5a){if(ami[_0x812a('0x18')]()==![]){return _0x1c7c5a(_0x99d977[_0x812a('0x10')](0x1f4,[config[_0x812a('0x11')]['ip'],config[_0x812a('0x11')][_0x812a('0x19')],_0x812a('0x51')][_0x812a('0x12')]('\x20')));}var _0x19ec59=schema(properties[_0x812a('0x52')])['validate'](_0x2679a3);if(_0x19ec59[_0x812a('0x4f')]>0x0){return _0x1c7c5a(_0x99d977[_0x812a('0x10')](0x1f4,_['map'](_0x19ec59,_0x812a('0x16'))[_0x812a('0x12')](',\x20')));}var _0xb70d14=_[_0x812a('0x53')](_0x1b9ccf[_0x812a('0x50')],{'uniqueid':_0x2679a3[_0x812a('0x54')]});if(_0xb70d14&&_0xb70d14[_0x812a('0x55')]){var _0x5e8d4e=util['format']('%s.%s',_0x2679a3[_0x812a('0x56')]||_0x2679a3['uniqueid'],_0x2679a3[_0x812a('0x8')]||'wav');return ami[_0x812a('0x14')]({'action':_0x812a('0x57'),'channel':_0xb70d14[_0x812a('0x55')],'file':_0x5e8d4e,'options':_0x812a('0x58')})[_0x812a('0x15')](function(_0x2780f9){var _0x117f88=_[_0x812a('0x53')](_0xb70d14[_0x812a('0x59')],{'filename':_0x812a('0x5a')+_0x5e8d4e[_0x812a('0x5b')]()});if(_['isNil'](_0x117f88)){_0xb70d14[_0x812a('0x59')][_0x812a('0x4e')]({'filename':_0x812a('0x5a')+_0x5e8d4e[_0x812a('0x5b')](),'createdAt':moment()[_0x812a('0x8')]('YYYY-MM-DD\x20HH:mm:ss'),'mixmonitorid':_0x2780f9[_0x812a('0x5c')],'status':_0x812a('0x5d')});}else{_0x117f88[_0x812a('0x5c')]=_0x2780f9[_0x812a('0x5c')];_0x117f88[_0x812a('0x5e')]=_0x812a('0x5d');}_0x5b0ed9({'code':0xc8,'message':[_0x2679a3[_0x812a('0x54')],'MixMonitor\x20Success',_0x2780f9[_0x812a('0x5c')]]['join']('\x20'),'mixmonitorid':_0x2780f9[_0x812a('0x5c')]});})[_0x812a('0x17')](function(_0x3fb103){_0x1c7c5a(_0x99d977[_0x812a('0x10')](0x1f5,[_0x2679a3['uniqueid'],_0x3fb103[_0x812a('0x16')][_0x812a('0x5b')]()][_0x812a('0x12')]('\x20')));});}else{return _0x1c7c5a(_0x99d977['error'](0x1f5,'Channel\x20doesn\x27t\x20exist'));}});},'VoiceChannelStopMixMonitor':function(_0x45fb72){var _0x1319b7=this;return new Promise(function(_0x15379f,_0x7429ca){if(ami['isConnected']()==![]){return _0x7429ca(_0x1319b7[_0x812a('0x10')](0x1f4,[config['asterisk']['ip'],config['asterisk']['username'],_0x812a('0x51')]['join']('\x20')));}var _0x4453ea=schema(properties['voicechannel'])['validate'](_0x45fb72);if(_0x4453ea[_0x812a('0x4f')]>0x0){return _0x7429ca(_0x1319b7['error'](0x1f4,_[_0x812a('0x5f')](_0x4453ea,_0x812a('0x16'))[_0x812a('0x12')](',\x20')));}var _0x3854e7=_[_0x812a('0x53')](_0x1b9ccf[_0x812a('0x50')],{'uniqueid':_0x45fb72[_0x812a('0x54')]});if(_0x3854e7){return BPromise[_0x812a('0x60')]()['then'](function(){if(_0x3854e7['channel']){return ami[_0x812a('0x14')]({'action':_0x812a('0x61'),'channel':_0x3854e7['channel'],'mixmonitorid':_0x45fb72['mixmonitorid']})[_0x812a('0x17')](function(_0x44abdd){});}})[_0x812a('0x15')](function(){if(_0x3854e7[_0x812a('0x62')]){return ami['Action']({'action':_0x812a('0x61'),'channel':_0x3854e7['destinationchannel'],'mixmonitorid':_0x45fb72[_0x812a('0x5c')]})[_0x812a('0x17')](function(_0xeced5){});}})['then'](function(_0x116018){var _0x176b89=_[_0x812a('0x53')](_0x3854e7['monitors'],{'mixmonitorid':_0x45fb72[_0x812a('0x5c')]});if(_0x176b89){_0x176b89[_0x812a('0x5e')]=_0x812a('0x63');}})[_0x812a('0x15')](function(){var _0x23b75c=util[_0x812a('0x8')]('%s.%s',_0x45fb72[_0x812a('0x56')]||_0x45fb72[_0x812a('0x54')],_0x45fb72['format']||_0x812a('0x64'));var _0x650a43=_[_0x812a('0x53')](_0x3854e7['monitors'],{'filename':_0x812a('0x5a')+_0x23b75c['toLowerCase']()});if(_0x650a43){_0x650a43['status']='stop';}})[_0x812a('0x15')](function(){_0x15379f({'code':0xc8,'message':[_0x45fb72[_0x812a('0x54')],'StopMixMonitor\x20Success'][_0x812a('0x12')]('\x20')});})['catch'](function(_0x58c00d){_0x7429ca(_0x1319b7[_0x812a('0x10')](0x1f5,[_0x45fb72['uniqueid'],_0x58c00d['message']['toLowerCase']()][_0x812a('0x12')]('\x20')));});}else{return _0x7429ca(_0x1319b7[_0x812a('0x10')](0x1f5,_0x812a('0x65')));}});},'VoiceQueuesChannels':function(_0xa1f0c7){return new Promise(function(_0x16779e,_0x433cc9){var _0xae79bd=_[_0x812a('0x66')](_0x1b9ccf[_0x812a('0x67')]);_0x16779e({'count':_0xae79bd[_0x812a('0x4f')],'rows':_0xae79bd});});},'VoiceQueuesChannel':function(_0x53485f){var _0x54fcd7=this;return new Promise(function(_0x54bef7,_0xb6883f){var _0x322414=schema(properties[_0x812a('0x68')])[_0x812a('0x2')](_0x53485f);if(_0x322414[_0x812a('0x4f')]>0x0){return _0xb6883f(_0x54fcd7[_0x812a('0x10')](0x1f4,_[_0x812a('0x5f')](_0x322414,_0x812a('0x16'))[_0x812a('0x12')](',\x20')));}var _0x2adfee=_[_0x812a('0x53')](_0x1b9ccf[_0x812a('0x67')],{'uniqueid':_0x53485f[_0x812a('0x54')]});if(_0x2adfee){_0x54bef7(_0x2adfee);}else{return _0xb6883f(_0x54fcd7[_0x812a('0x10')](0x1f5,'Channel\x20doesn\x27t\x20exist'));}});},'VoiceQueuesChannelHangup':function(_0x5b1753){var _0x233e67=this;return new Promise(function(_0x27480d,_0x22e948){if(ami[_0x812a('0x18')]()==![]){return _0x22e948(_0x233e67[_0x812a('0x10')](0x1f4,[config[_0x812a('0x11')]['ip'],config['asterisk'][_0x812a('0x19')],_0x812a('0x51')][_0x812a('0x12')]('\x20')));}var _0x26bf2d=schema(properties[_0x812a('0x69')])[_0x812a('0x2')](_0x5b1753);if(_0x26bf2d['length']>0x0){return _0x22e948(_0x233e67['error'](0x1f4,_['map'](_0x26bf2d,_0x812a('0x16'))[_0x812a('0x12')](',\x20')));}var _0x46327a=_['find'](_0x1b9ccf[_0x812a('0x67')],{'uniqueid':_0x5b1753[_0x812a('0x54')]});if(_0x46327a&&_0x46327a[_0x812a('0x55')]){return ami[_0x812a('0x14')]({'action':'Hangup','channel':_0x46327a['channel']})[_0x812a('0x15')](function(_0x4e4729){_0x27480d({'code':0xc8,'message':[_0x5b1753[_0x812a('0x54')],_0x4e4729[_0x812a('0x16')][_0x812a('0x5b')]()][_0x812a('0x12')]('\x20')});})[_0x812a('0x17')](function(_0x28c6b2){_0x22e948(_0x233e67[_0x812a('0x10')](0x1f5,[_0x5b1753['uniqueid'],_0x28c6b2[_0x812a('0x16')][_0x812a('0x5b')]()][_0x812a('0x12')]('\x20')));});}else{return _0x22e948(_0x233e67['error'](0x1f5,_0x812a('0x65')));}});},'VoiceQueuesChannelRedirect':function(_0x22e8bd){var _0x2c078c=this;return new Promise(function(_0x3542d3,_0xf611d5){if(ami[_0x812a('0x18')]()==![]){return _0xf611d5(_0x2c078c[_0x812a('0x10')](0x1f4,[config[_0x812a('0x11')]['ip'],config[_0x812a('0x11')][_0x812a('0x19')],'ami\x20disconnected'][_0x812a('0x12')]('\x20')));}var _0x1ee3d9=schema(properties[_0x812a('0x6a')])['validate'](_0x22e8bd);if(_0x1ee3d9['length']>0x0){return _0xf611d5(_0x2c078c[_0x812a('0x10')](0x1f4,_[_0x812a('0x5f')](_0x1ee3d9,_0x812a('0x16'))['join'](',\x20')));}var _0x401274=_[_0x812a('0x53')](_0x1b9ccf[_0x812a('0x67')],{'uniqueid':_0x22e8bd[_0x812a('0x54')]});if(_0x401274&&_0x401274[_0x812a('0x55')]){return ami[_0x812a('0x14')]({'action':'Redirect','channel':_0x401274[_0x812a('0x55')],'exten':_0x22e8bd[_0x812a('0x6b')],'context':_0x22e8bd['context']||_0x401274[_0x812a('0x6c')],'priority':0x1})[_0x812a('0x15')](function(_0x2c98a6){_0x3542d3({'code':0xc8,'message':[_0x22e8bd['uniqueid'],_0x2c98a6[_0x812a('0x16')][_0x812a('0x5b')]()][_0x812a('0x12')]('\x20')});})['catch'](function(_0x8c31e9){_0xf611d5(_0x2c078c[_0x812a('0x10')](0x1f5,[_0x22e8bd['uniqueid'],_0x8c31e9['message'][_0x812a('0x5b')]()][_0x812a('0x12')]('\x20')));});}else{return _0xf611d5(_0x2c078c[_0x812a('0x10')](0x1f5,_0x812a('0x65')));}});},'Agents':function(_0x4c2527){return new Promise(function(_0x3c8458,_0x564f93){var _0x21d72a=_['values'](_0x1b9ccf[_0x812a('0xc')]);_0x3c8458({'count':_0x21d72a[_0x812a('0x4f')],'rows':_0x21d72a});});},'Telephones':function(_0x112927){return new Promise(function(_0x59c603,_0x12e24b){var _0x4c5301=_[_0x812a('0x66')](_0x1b9ccf[_0x812a('0x6d')]);_0x59c603({'count':_0x4c5301['length'],'rows':_0x4c5301});});},'Trunks':function(_0x488981){return new Promise(function(_0x127c29,_0x3d3ff2){var _0x2e983f=_[_0x812a('0x66')](_0x1b9ccf[_0x812a('0x6e')]);_0x127c29({'count':_0x2e983f[_0x812a('0x4f')],'rows':_0x2e983f});});},'OutboundChannels':function(_0x39a522){return new Promise(function(_0x48b056,_0x1ec1d3){var _0x1d96f5=_[_0x812a('0x66')](_0x1b9ccf[_0x812a('0x6f')]);_0x48b056({'count':_0x1d96f5['length'],'rows':_0x1d96f5});});},'Outbound':function(_0x5b17c3){return new Promise(function(_0x587645,_0x227415){_0x587645(_0x1b9ccf[_0x812a('0x2a')]);});},'Campaigns':function(_0x4dd2fd){return new Promise(function(_0x3f6d0a,_0x8505f3){var _0x1fdeb5=_[_0x812a('0x66')](_0x1b9ccf[_0x812a('0x70')]);_0x3f6d0a({'count':_0x1fdeb5[_0x812a('0x4f')],'rows':_0x1fdeb5});});},'VoiceQueuesPreview':function(_0x14a33c){var _0x5dff44=this;return new Promise(function(_0x2855d0,_0x599286){_0x2681ad['run'](_0x14a33c['id'])[_0x812a('0x15')](function(_0x28e1b7){_0x2855d0({'code':0xc8,'message':_0x28e1b7['message']});})['catch'](function(_0x559970){_0x599286(_0x5dff44['error'](0x1f4,_0x559970[_0x812a('0x16')]));});});},'EventManager':function(_0x1c778a){var _0x9a9eb5=this;return new Promise(function(_0x33366c,_0x38e4c3){if(!_0x1c778a[_0x812a('0x71')]){return _0x38e4c3(_0x9a9eb5[_0x812a('0x10')](0x1f4,_0x812a('0x72')));}ami[_0x812a('0x73')]('custom:'+_0x1c778a[_0x812a('0x71')],_0x1c778a[_0x812a('0x16')]);_0x33366c({'code':0xc8,'message':_0x1c778a});});},'FaxAccounts':function(_0x1e4a71){return new Promise(function(_0x2404d0,_0xc055e5){var _0x548de0=_[_0x812a('0x66')](_0x1b9ccf['faxAccounts']);_0x2404d0({'count':_0x548de0[_0x812a('0x4f')],'rows':_0x548de0});});},'SendFax':function(_0x56d730){var _0x51aaa6=this;return new Promise(function(_0x515d33,_0x4aba3d){_0x549a0[_0x812a('0x74')](_0x56d730)[_0x812a('0x15')](function(_0x1850de){_0x515d33({'code':0xc8,'message':_0x1850de[_0x812a('0x16')]});})[_0x812a('0x17')](function(_0x36f4d5){_0x4aba3d(_0x51aaa6[_0x812a('0x10')](0x1f4,_0x36f4d5[_0x812a('0x16')]));});});},'CheckAfterSend':function(_0x166a48){var _0x11255a=this;return new Promise(function(_0x3c10db,_0x3f8317){_0x549a0['checkAfterSend'](_0x166a48)[_0x812a('0x15')](function(_0x314d74){_0x3c10db({'code':0xc8,'message':_0x314d74[_0x812a('0x16')]});})[_0x812a('0x17')](function(_0x565532){_0x3f8317(_0x11255a[_0x812a('0x10')](0x1f4,_0x565532[_0x812a('0x16')]));});});}};var _0x5d996f=jayson['server'](_0x4f4ee4)[_0x812a('0x75')]();_0x5d996f['on'](_0x812a('0x10'),function(_0x33f3be){return _0x4df4b5(_0x33f3be);});_0x5d996f[_0x812a('0x7')](0x232a,_0x812a('0x76'),function(){console['log'](_0x812a('0x77'),0x232a);return _0x252450(_0x812a('0x78')+0x232a);});});};
\ No newline at end of file
index b05df88..d8a0559 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7138=['xmd-contactid2','format','name','trigger:%s','action','toLowerCase','createContact','user:%s','error','Error\x20creating\x20contact','merge','bluebird','lodash','ioredis','../../../../config/environment','trigger','../../rpc/cmContact','defaults','redis','localhost','socket.io-emitter','stringify','exec','autoCreate','data2','data1','calleridnum','routeId','calleridname','<unknown>','uniqueid','firstName','destcalleridname','phone','destcalleridnum','resolve','then','showContact','omit'];(function(_0x21a9d9,_0x4d5ac8){var _0x46adce=function(_0xfdd336){while(--_0xfdd336){_0x21a9d9['push'](_0x21a9d9['shift']());}};_0x46adce(++_0x4d5ac8);}(_0x7138,0x11c));var _0x8713=function(_0x1ac84d,_0x2d5f8f){_0x1ac84d=_0x1ac84d-0x0;var _0x1829d2=_0x7138[_0x1ac84d];return _0x1829d2;};'use strict';var BPromise=require(_0x8713('0x0'));var util=require('util');var _=require(_0x8713('0x1'));var Redis=require(_0x8713('0x2'));var config=require(_0x8713('0x3'));var logger=require('../../../../config/logger')(_0x8713('0x4'));var cmContactRpc=require(_0x8713('0x5'));config['redis']=_[_0x8713('0x6')](config[_0x8713('0x7')],{'host':_0x8713('0x8'),'port':0x18eb});var io=require(_0x8713('0x9'))(new Redis(config[_0x8713('0x7')]));function emit(_0x1a8d69,_0x29ae18,_0x403d43){logger['info'](_0x1a8d69,_0x29ae18,JSON[_0x8713('0xa')](_0x403d43));io['to'](_0x1a8d69)['emit'](_0x29ae18,_0x403d43);}exports[_0x8713('0xb')]=function(_0x2b149d,_0x34a950,_0x233753){_0x233753[_0x8713('0xc')]=0x0;if(_0x34a950['data2']&&parseInt(_0x34a950[_0x8713('0xd')],0xa)){var _0x55be60={'ListId':parseInt(_0x34a950[_0x8713('0xe')],0xa),'phone':_0x233753[_0x8713('0xf')]};if(_['isNil'](_0x233753[_0x8713('0x10')])){_0x55be60['firstName']=_0x233753[_0x8713('0x11')]&&_0x233753[_0x8713('0x11')]!==_0x8713('0x12')?_0x233753['calleridname']:_0x233753['calleridnum']||_0x233753[_0x8713('0x13')];}else{_0x55be60[_0x8713('0x14')]=_0x233753['destcalleridname']&&_0x233753[_0x8713('0x15')]!==_0x8713('0x12')?_0x233753['destcalleridname']:_0x233753['destcalleridnum']||_0x233753[_0x8713('0x13')];_0x55be60[_0x8713('0x16')]=_0x233753[_0x8713('0x15')]&&_0x233753[_0x8713('0x15')]!==_0x8713('0x12')?_0x233753['destcalleridname']:_0x233753[_0x8713('0x17')]||_0x233753[_0x8713('0x13')];}BPromise[_0x8713('0x18')]()[_0x8713('0x19')](cmContactRpc[_0x8713('0x1a')]({'where':_[_0x8713('0x1b')](_0x55be60,[_0x8713('0x14')])}))[_0x8713('0x19')](function(_0x51105f){if(_0x51105f){_0x233753[_0x8713('0x1c')]=_0x51105f['id'];emit(util[_0x8713('0x1d')]('user:%s',_0x2b149d[_0x8713('0x1e')]),util['format'](_0x8713('0x1f'),_0x34a950[_0x8713('0x20')][_0x8713('0x21')]()),_['merge'](_0x233753,{'ListId':parseInt(_0x34a950[_0x8713('0xe')],0xa)}));return;}else{return BPromise[_0x8713('0x18')]()[_0x8713('0x19')](cmContactRpc[_0x8713('0x22')](_0x55be60));}})['then'](function(_0x2b83f7){if(_0x2b83f7){_0x233753[_0x8713('0x1c')]=_0x2b83f7['id'];emit(util[_0x8713('0x1d')](_0x8713('0x23'),_0x2b149d['name']),util[_0x8713('0x1d')](_0x8713('0x1f'),_0x34a950[_0x8713('0x20')][_0x8713('0x21')]()),_['merge'](_0x233753,{'ListId':parseInt(_0x34a950[_0x8713('0xe')],0xa)}));}})['catch'](function(_0x36461b){logger[_0x8713('0x24')](_0x8713('0x25'),JSON[_0x8713('0xa')](_0x36461b));});}else{if(_0x2b149d){emit(util[_0x8713('0x1d')](_0x8713('0x23'),_0x2b149d['name']),util[_0x8713('0x1d')](_0x8713('0x1f'),_0x34a950[_0x8713('0x20')][_0x8713('0x21')]()),_[_0x8713('0x26')]({'ListId':parseInt(_0x34a950[_0x8713('0xe')],0xa)},_0x233753));}}};
\ No newline at end of file
+var _0x4831=['uniqueid','destcalleridname','destcalleridnum','resolve','then','showContact','xmd-contactid2','format','user:%s','name','trigger:%s','action','toLowerCase','merge','catch','Error\x20creating\x20contact','bluebird','util','lodash','ioredis','../../../../config/environment','trigger','redis','defaults','socket.io-emitter','stringify','emit','exec','autoCreate','data2','data1','calleridnum','isNil','firstName','calleridname','<unknown>'];(function(_0x2b1081,_0x472d43){var _0x3c63b1=function(_0x19b0b4){while(--_0x19b0b4){_0x2b1081['push'](_0x2b1081['shift']());}};_0x3c63b1(++_0x472d43);}(_0x4831,0x7c));var _0x1483=function(_0x16ecd5,_0x5d28d9){_0x16ecd5=_0x16ecd5-0x0;var _0x573989=_0x4831[_0x16ecd5];return _0x573989;};'use strict';var BPromise=require(_0x1483('0x0'));var util=require(_0x1483('0x1'));var _=require(_0x1483('0x2'));var Redis=require(_0x1483('0x3'));var config=require(_0x1483('0x4'));var logger=require('../../../../config/logger')(_0x1483('0x5'));var cmContactRpc=require('../../rpc/cmContact');config[_0x1483('0x6')]=_[_0x1483('0x7')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x1483('0x8'))(new Redis(config[_0x1483('0x6')]));function emit(_0x586202,_0x947e9e,_0x5ead30){logger['info'](_0x586202,_0x947e9e,JSON[_0x1483('0x9')](_0x5ead30));io['to'](_0x586202)[_0x1483('0xa')](_0x947e9e,_0x5ead30);}exports[_0x1483('0xb')]=function(_0x232de4,_0x314b57,_0x10a272){_0x10a272[_0x1483('0xc')]=0x0;if(_0x314b57[_0x1483('0xd')]&&parseInt(_0x314b57[_0x1483('0xd')],0xa)){var _0xe210b9={'ListId':parseInt(_0x314b57[_0x1483('0xe')],0xa),'phone':_0x10a272[_0x1483('0xf')]};if(_[_0x1483('0x10')](_0x10a272['routeId'])){_0xe210b9[_0x1483('0x11')]=_0x10a272[_0x1483('0x12')]&&_0x10a272[_0x1483('0x12')]!==_0x1483('0x13')?_0x10a272[_0x1483('0x12')]:_0x10a272[_0x1483('0xf')]||_0x10a272[_0x1483('0x14')];}else{_0xe210b9[_0x1483('0x11')]=_0x10a272['destcalleridname']&&_0x10a272['destcalleridname']!=='<unknown>'?_0x10a272[_0x1483('0x15')]:_0x10a272[_0x1483('0x16')]||_0x10a272['uniqueid'];_0xe210b9['phone']=_0x10a272[_0x1483('0x15')]&&_0x10a272[_0x1483('0x15')]!==_0x1483('0x13')?_0x10a272[_0x1483('0x15')]:_0x10a272['destcalleridnum']||_0x10a272['uniqueid'];}BPromise[_0x1483('0x17')]()[_0x1483('0x18')](cmContactRpc[_0x1483('0x19')]({'where':_['omit'](_0xe210b9,[_0x1483('0x11')])}))['then'](function(_0x24b534){if(_0x24b534){_0x10a272[_0x1483('0x1a')]=_0x24b534['id'];emit(util[_0x1483('0x1b')](_0x1483('0x1c'),_0x232de4[_0x1483('0x1d')]),util[_0x1483('0x1b')](_0x1483('0x1e'),_0x314b57[_0x1483('0x1f')][_0x1483('0x20')]()),_[_0x1483('0x21')](_0x10a272,{'ListId':parseInt(_0x314b57[_0x1483('0xe')],0xa)}));return;}else{return BPromise[_0x1483('0x17')]()[_0x1483('0x18')](cmContactRpc['createContact'](_0xe210b9));}})[_0x1483('0x18')](function(_0x37d513){if(_0x37d513){_0x10a272['xmd-contactid2']=_0x37d513['id'];emit(util[_0x1483('0x1b')](_0x1483('0x1c'),_0x232de4['name']),util[_0x1483('0x1b')](_0x1483('0x1e'),_0x314b57['action'][_0x1483('0x20')]()),_[_0x1483('0x21')](_0x10a272,{'ListId':parseInt(_0x314b57[_0x1483('0xe')],0xa)}));}})[_0x1483('0x22')](function(_0x5e2981){logger['error'](_0x1483('0x23'),JSON['stringify'](_0x5e2981));});}else{if(_0x232de4){emit(util[_0x1483('0x1b')](_0x1483('0x1c'),_0x232de4[_0x1483('0x1d')]),util['format'](_0x1483('0x1e'),_0x314b57['action'][_0x1483('0x20')]()),_[_0x1483('0x21')]({'ListId':parseInt(_0x314b57['data1'],0xa)},_0x10a272));}}};
\ No newline at end of file
index 87c9dfe..a37260d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe605=['isNil','data3','location','uriLocation','data4','windowWidth','data5','800','data6','600','winApplication','render','format','user:%s','trigger:%s:%s','name','trigger:%s','data1','exec','integration','queue','routeId','urlforward','parse','search','AllConditions','length','checkConditions','AnyConditions','some','channel','account','ChatWebsiteId','value','upperFirst','AccountId','message','event','operator','lastevent','util','lodash','mustache','ioredis','./urlforward','./integration','./cmContact','../rpc/cmContact','../../../config/environment','../../../config/logger','trigger','../ami','redis','defaults','localhost','popup','url','winapp','triggers','agents','voiceQueues','templates','voiceExtensions','zendeskAccounts','freshdeskAccounts','salesforceAccounts','sugarcrmAccounts','zohoAccounts','deskAccounts','vtigerAccounts','servicenowAccounts','dynamics365Accounts','accounts','custom:agentcalled','syncCustomEvent','bind','custom:agentconnect','custom:agentcomplete','custom:queuecallerabandon','custom:dialbegin','custom:dialend','custom:newinteraction','custom:closedinteraction','custom:incomingmessage','custom:outgoingmessage','custom:rejectmessage','emit','prototype','clone','checkTriggers','hasOwnProperty','checkTrigger','merge','variables','Actions','interface','action','toLowerCase','contactmanager','browser','TemplateId','data2','html','template\x20not\x20found','uri','buildUri'];(function(_0x5b6da2,_0x326ba3){var _0x2dd112=function(_0x5972e7){while(--_0x5972e7){_0x5b6da2['push'](_0x5b6da2['shift']());}};_0x2dd112(++_0x326ba3);}(_0xe605,0x92));var _0x5e60=function(_0x13c7e1,_0x1da70b){_0x13c7e1=_0x13c7e1-0x0;var _0x378adf=_0xe605[_0x13c7e1];return _0x378adf;};'use strict';var util=require(_0x5e60('0x0'));var _=require(_0x5e60('0x1'));var url=require('url');var Mustache=require(_0x5e60('0x2'));var Redis=require(_0x5e60('0x3'));var urlforward=require(_0x5e60('0x4'));var integration=require(_0x5e60('0x5'));var cmContact=require(_0x5e60('0x6'));var cmContactRpc=require(_0x5e60('0x7'));var config=require(_0x5e60('0x8'));var logger=require(_0x5e60('0x9'))(_0x5e60('0xa'));var ami=require(_0x5e60('0xb'));config[_0x5e60('0xc')]=_[_0x5e60('0xd')](config['redis'],{'host':_0x5e60('0xe'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var operators={'equals':function(_0x53dccb,_0x43f7eb){return _0x53dccb==_0x43f7eb;},'not_equals':function(_0xe93f9c,_0x150a51){return _0xe93f9c!=_0x150a51;}};var barAndWebActions=[_0x5e60('0xf'),_0x5e60('0x10'),_0x5e60('0x11')];function Trigger(_0x56f05a){this[_0x5e60('0x12')]=_0x56f05a['triggers'];this[_0x5e60('0x13')]=_0x56f05a[_0x5e60('0x13')];this[_0x5e60('0x14')]=_0x56f05a['voiceQueues'];this[_0x5e60('0x15')]=_0x56f05a[_0x5e60('0x15')];this[_0x5e60('0x16')]=_0x56f05a[_0x5e60('0x16')];this[_0x5e60('0x17')]=_0x56f05a[_0x5e60('0x17')];this['freshdeskAccounts']=_0x56f05a[_0x5e60('0x18')];this[_0x5e60('0x19')]=_0x56f05a[_0x5e60('0x19')];this[_0x5e60('0x1a')]=_0x56f05a['sugarcrmAccounts'];this[_0x5e60('0x1b')]=_0x56f05a['zohoAccounts'];this[_0x5e60('0x1c')]=_0x56f05a[_0x5e60('0x1c')];this['vtigerAccounts']=_0x56f05a[_0x5e60('0x1d')];this[_0x5e60('0x1e')]=_0x56f05a[_0x5e60('0x1e')];this[_0x5e60('0x1f')]=_0x56f05a['dynamics365Accounts'];this[_0x5e60('0x20')]={'zendesk':this[_0x5e60('0x17')],'salesforce':this['salesforceAccounts'],'freshdesk':this[_0x5e60('0x18')],'sugarcrm':this[_0x5e60('0x1a')],'zoho':this[_0x5e60('0x1b')],'desk':this[_0x5e60('0x1c')],'vtiger':this[_0x5e60('0x1d')],'servicenow':this[_0x5e60('0x1e')],'dynamics365':this[_0x5e60('0x1f')]};ami['on'](_0x5e60('0x21'),this[_0x5e60('0x22')][_0x5e60('0x23')](this));ami['on'](_0x5e60('0x24'),this['syncCustomEvent'][_0x5e60('0x23')](this));ami['on']('custom:agentringnoanswer',this[_0x5e60('0x22')][_0x5e60('0x23')](this));ami['on'](_0x5e60('0x25'),this[_0x5e60('0x22')][_0x5e60('0x23')](this));ami['on'](_0x5e60('0x26'),this[_0x5e60('0x22')]['bind'](this));ami['on'](_0x5e60('0x27'),this[_0x5e60('0x22')][_0x5e60('0x23')](this));ami['on']('custom:dialconnect',this[_0x5e60('0x22')][_0x5e60('0x23')](this));ami['on'](_0x5e60('0x28'),this[_0x5e60('0x22')]['bind'](this));ami['on'](_0x5e60('0x29'),this['syncCustomEvent'][_0x5e60('0x23')](this));ami['on'](_0x5e60('0x2a'),this['syncCustomEvent'][_0x5e60('0x23')](this));ami['on'](_0x5e60('0x2b'),this['syncCustomEvent'][_0x5e60('0x23')](this));ami['on'](_0x5e60('0x2c'),this['syncCustomEvent']['bind'](this));ami['on']('custom:acceptmessage',this[_0x5e60('0x22')][_0x5e60('0x23')](this));ami['on'](_0x5e60('0x2d'),this[_0x5e60('0x22')][_0x5e60('0x23')](this));}Trigger['prototype'][_0x5e60('0x2e')]=function(_0x405461,_0x4d4b55,_0x11fc87){logger['info'](_0x405461,_0x4d4b55,JSON['stringify'](_0x11fc87));io['to'](_0x405461)[_0x5e60('0x2e')](_0x4d4b55,_0x11fc87);};Trigger[_0x5e60('0x2f')][_0x5e60('0x22')]=function(_0x385c77){var _0xaf3a35=_[_0x5e60('0x30')](_0x385c77);this[_0x5e60('0x31')](_0xaf3a35);};Trigger[_0x5e60('0x2f')][_0x5e60('0x31')]=function(_0x4702a6){var _0x5c429c;for(var _0x211efc in this['triggers']){if(this['triggers'][_0x5e60('0x32')](_0x211efc)){if(this[_0x5e60('0x12')][_0x211efc]['status']){_0x5c429c=this[_0x5e60('0x33')](this['triggers'][_0x211efc],_0x4702a6);if(_0x5c429c){_[_0x5e60('0x34')](_0x4702a6,_0x4702a6[_0x5e60('0x35')]);for(var _0x2b2426=0x0,_0x4176a8,_0xbbda4b,_0x23498b;_0x2b2426<this[_0x5e60('0x12')][_0x211efc][_0x5e60('0x36')]['length'];_0x2b2426+=0x1){_0x4176a8=this[_0x5e60('0x12')][_0x211efc][_0x5e60('0x36')][_0x2b2426];if(this[_0x5e60('0x13')][_0x4702a6[_0x5e60('0x37')]]){switch(_0x4176a8[_0x5e60('0x38')][_0x5e60('0x39')]()){case _0x5e60('0x3a'):break;case'motionbar':case _0x5e60('0x3b'):var _0x18f187={};switch(barAndWebActions[_0x4176a8['data1']]){case'popup':_0x18f187[_0x5e60('0x3c')]=_0x4176a8[_0x5e60('0x3d')];_0x18f187[_0x5e60('0x3e')]=this[_0x5e60('0x15')][_0x4176a8[_0x5e60('0x3d')]]?Mustache['render'](this[_0x5e60('0x15')][_0x4176a8[_0x5e60('0x3d')]][_0x5e60('0x3e')],_0x4702a6):_0x5e60('0x3f');break;case _0x5e60('0x10'):_0x18f187[_0x5e60('0x40')]=this[_0x5e60('0x41')](_0x4176a8['data2'],_0x4702a6,_[_0x5e60('0x42')](_0x4176a8[_0x5e60('0x43')])?!![]:parseInt(_0x4176a8['data3'],0xa));if(_['isNil'](_0x4176a8['data4'])){_0x18f187[_0x5e60('0x44')]='0';}else{_0x18f187[_0x5e60('0x45')]=_0x4176a8[_0x5e60('0x46')];_0x18f187[_0x5e60('0x47')]=_['isNil'](_0x4176a8[_0x5e60('0x48')])?_0x5e60('0x49'):_0x4176a8['data5'];_0x18f187['windowHeight']=_[_0x5e60('0x42')](_0x4176a8[_0x5e60('0x4a')])?_0x5e60('0x4b'):_0x4176a8[_0x5e60('0x4a')];}break;case _0x5e60('0x11'):_0x18f187[_0x5e60('0x4c')]=_0x4176a8[_0x5e60('0x3d')]?Mustache[_0x5e60('0x4d')](_0x4176a8[_0x5e60('0x3d')],_0x4702a6):'';_0x18f187['winArguments']=_0x4176a8[_0x5e60('0x43')]?Mustache[_0x5e60('0x4d')](_0x4176a8['data3'],_0x4702a6):'';break;}this[_0x5e60('0x2e')](util[_0x5e60('0x4e')](_0x5e60('0x4f'),this[_0x5e60('0x13')][_0x4702a6[_0x5e60('0x37')]]['name']),util[_0x5e60('0x4e')](_0x5e60('0x50'),_0x4176a8[_0x5e60('0x38')][_0x5e60('0x39')](),barAndWebActions[_0x4176a8['data1']]),_['merge'](_0x18f187,_0x4702a6));break;case'jscripty':this[_0x5e60('0x2e')](util[_0x5e60('0x4e')](_0x5e60('0x4f'),this[_0x5e60('0x13')][_0x4702a6[_0x5e60('0x37')]][_0x5e60('0x51')]),util['format'](_0x5e60('0x52'),_0x4176a8[_0x5e60('0x38')][_0x5e60('0x39')]()),_[_0x5e60('0x34')]({'ProjectId':parseInt(_0x4176a8[_0x5e60('0x53')],0xa)},_0x4702a6));break;default:this[_0x5e60('0x2e')](util[_0x5e60('0x4e')]('user:%s',this[_0x5e60('0x13')][_0x4702a6[_0x5e60('0x37')]][_0x5e60('0x51')]),util[_0x5e60('0x4e')](_0x5e60('0x52'),_0x4176a8[_0x5e60('0x38')][_0x5e60('0x39')]()),_[_0x5e60('0x34')]({},_0x4176a8,_0x4702a6));}}switch(_0x4176a8[_0x5e60('0x38')][_0x5e60('0x39')]()){case _0x5e60('0x3a'):cmContact[_0x5e60('0x54')](this[_0x5e60('0x13')][_0x4702a6[_0x5e60('0x37')]],_0x4176a8,_0x4702a6,cmContactRpc);break;case _0x5e60('0x55'):integration[_0x5e60('0x54')](_0x4176a8,_0x4702a6,this[_0x5e60('0x20')],this[_0x5e60('0x13')][_0x4702a6['interface']],this['voiceQueues'][_0x4702a6[_0x5e60('0x56')]],this['voiceExtensions'][_0x4702a6[_0x5e60('0x57')]]);break;case _0x5e60('0x58'):urlforward[_0x5e60('0x54')](_0x4176a8,_0x4702a6);break;}}}}}}};Trigger[_0x5e60('0x2f')][_0x5e60('0x41')]=function(_0x1f5288,_0x4b72a4,_0x48bea6){var _0xd7d32c=url[_0x5e60('0x59')](Mustache[_0x5e60('0x4d')](_0x1f5288,_0x4b72a4),!![]);if(_0x48bea6){_['merge'](_0xd7d32c['query'],_0x4b72a4);}delete _0xd7d32c[_0x5e60('0x5a')];return url[_0x5e60('0x4e')](_0xd7d32c);};Trigger[_0x5e60('0x2f')]['checkTrigger']=function(_0x1a3ed9,_0x1be2db){var _0x153820=!![],_0xf18339=!![];if(_0x1a3ed9[_0x5e60('0x5b')][_0x5e60('0x5c')]){_0x153820=_['every'](_0x1a3ed9[_0x5e60('0x5b')],this[_0x5e60('0x5d')](_0x1be2db,_0x1a3ed9['channel']));}if(_0x1a3ed9[_0x5e60('0x5e')][_0x5e60('0x5c')]){_0xf18339=_[_0x5e60('0x5f')](_0x1a3ed9['AnyConditions'],this[_0x5e60('0x5d')](_0x1be2db,_0x1a3ed9[_0x5e60('0x60')]));}return _0x153820&&_0xf18339;};Trigger['prototype'][_0x5e60('0x5d')]=function(_0x367208,_0x23f954){return function(_0x3626c2){switch(_0x3626c2['field']){case _0x5e60('0x61'):if(_0x367208[_0x5e60('0x60')]===_0x23f954){if(_0x23f954==='chat'){return _0x367208[_0x5e60('0x62')]?operators[_0x3626c2['operator']](Number(_0x3626c2[_0x5e60('0x63')]),_0x367208['ChatWebsiteId']):![];}else{return _0x367208[_[_0x5e60('0x64')](_0x23f954)+_0x5e60('0x65')]?operators[_0x3626c2['operator']](Number(_0x3626c2[_0x5e60('0x63')]),_0x367208[_['upperFirst'](_0x23f954)+_0x5e60('0x65')]):![];}}break;case'interaction':case _0x5e60('0x66'):if(_0x367208['channel']===_0x23f954){return _0x367208[_0x5e60('0x67')]?operators[_0x3626c2[_0x5e60('0x68')]](_0x3626c2[_0x5e60('0x63')],_0x367208[_0x5e60('0x67')]):![];}break;case _0x5e60('0x56'):return _0x367208[_0x5e60('0x56')]?operators[_0x3626c2[_0x5e60('0x68')]](_0x3626c2['value'],_0x367208[_0x5e60('0x56')]):![];case _0x5e60('0x69'):return _0x367208[_0x5e60('0x69')]?operators[_0x3626c2[_0x5e60('0x68')]](_0x3626c2[_0x5e60('0x63')],_0x367208[_0x5e60('0x69')]):![];case'routeId':return _0x367208['routeId']?operators[_0x3626c2['operator']](_0x3626c2[_0x5e60('0x63')],_0x367208[_0x5e60('0x57')]):![];}return![];};};module['exports']=Trigger;
\ No newline at end of file
+var _0x74f0=['trigger:%s:%s','jscripty','trigger:%s','exec','integration','queue','routeId','parse','query','search','checkTrigger','every','AllConditions','checkConditions','channel','AnyConditions','some','field','account','chat','operator','upperFirst','value','AccountId','interaction','message','event','lastevent','exports','lodash','ioredis','./urlforward','./integration','./cmContact','../../../config/logger','trigger','../ami','redis','defaults','localhost','popup','url','winapp','triggers','agents','voiceQueues','templates','voiceExtensions','zendeskAccounts','freshdeskAccounts','salesforceAccounts','sugarcrmAccounts','zohoAccounts','deskAccounts','vtigerAccounts','servicenowAccounts','dynamics365Accounts','accounts','custom:agentcalled','syncCustomEvent','bind','custom:agentconnect','custom:agentringnoanswer','custom:agentcomplete','custom:queuecallerabandon','custom:dialbegin','custom:dialend','custom:newinteraction','custom:closedinteraction','custom:incomingmessage','custom:outgoingmessage','prototype','emit','info','stringify','clone','checkTriggers','status','merge','variables','Actions','length','action','toLowerCase','contactmanager','motionbar','browser','data1','TemplateId','data2','html','render','uri','buildUri','data3','isNil','data4','uriLocation','data5','800','windowHeight','data6','600','format','user:%s','interface','name'];(function(_0x26e113,_0x2a09eb){var _0x1ccd52=function(_0xa4bdef){while(--_0xa4bdef){_0x26e113['push'](_0x26e113['shift']());}};_0x1ccd52(++_0x2a09eb);}(_0x74f0,0xf3));var _0x074f=function(_0xbeb808,_0x881ddf){_0xbeb808=_0xbeb808-0x0;var _0x5d6909=_0x74f0[_0xbeb808];return _0x5d6909;};'use strict';var util=require('util');var _=require(_0x074f('0x0'));var url=require('url');var Mustache=require('mustache');var Redis=require(_0x074f('0x1'));var urlforward=require(_0x074f('0x2'));var integration=require(_0x074f('0x3'));var cmContact=require(_0x074f('0x4'));var cmContactRpc=require('../rpc/cmContact');var config=require('../../../config/environment');var logger=require(_0x074f('0x5'))(_0x074f('0x6'));var ami=require(_0x074f('0x7'));config[_0x074f('0x8')]=_[_0x074f('0x9')](config[_0x074f('0x8')],{'host':_0x074f('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x074f('0x8')]));var operators={'equals':function(_0xc853e0,_0x58588c){return _0xc853e0==_0x58588c;},'not_equals':function(_0x252a2e,_0x1a778a){return _0x252a2e!=_0x1a778a;}};var barAndWebActions=[_0x074f('0xb'),_0x074f('0xc'),_0x074f('0xd')];function Trigger(_0x4f37e1){this['triggers']=_0x4f37e1[_0x074f('0xe')];this[_0x074f('0xf')]=_0x4f37e1[_0x074f('0xf')];this[_0x074f('0x10')]=_0x4f37e1[_0x074f('0x10')];this[_0x074f('0x11')]=_0x4f37e1[_0x074f('0x11')];this[_0x074f('0x12')]=_0x4f37e1[_0x074f('0x12')];this['zendeskAccounts']=_0x4f37e1[_0x074f('0x13')];this['freshdeskAccounts']=_0x4f37e1[_0x074f('0x14')];this[_0x074f('0x15')]=_0x4f37e1[_0x074f('0x15')];this[_0x074f('0x16')]=_0x4f37e1[_0x074f('0x16')];this[_0x074f('0x17')]=_0x4f37e1[_0x074f('0x17')];this[_0x074f('0x18')]=_0x4f37e1[_0x074f('0x18')];this[_0x074f('0x19')]=_0x4f37e1[_0x074f('0x19')];this['servicenowAccounts']=_0x4f37e1[_0x074f('0x1a')];this[_0x074f('0x1b')]=_0x4f37e1[_0x074f('0x1b')];this[_0x074f('0x1c')]={'zendesk':this[_0x074f('0x13')],'salesforce':this[_0x074f('0x15')],'freshdesk':this['freshdeskAccounts'],'sugarcrm':this['sugarcrmAccounts'],'zoho':this[_0x074f('0x17')],'desk':this['deskAccounts'],'vtiger':this['vtigerAccounts'],'servicenow':this[_0x074f('0x1a')],'dynamics365':this[_0x074f('0x1b')]};ami['on'](_0x074f('0x1d'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on'](_0x074f('0x20'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on'](_0x074f('0x21'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on'](_0x074f('0x22'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on'](_0x074f('0x23'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on'](_0x074f('0x24'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on']('custom:dialconnect',this['syncCustomEvent']['bind'](this));ami['on'](_0x074f('0x25'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on'](_0x074f('0x26'),this['syncCustomEvent'][_0x074f('0x1f')](this));ami['on'](_0x074f('0x27'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on'](_0x074f('0x28'),this[_0x074f('0x1e')]['bind'](this));ami['on'](_0x074f('0x29'),this[_0x074f('0x1e')][_0x074f('0x1f')](this));ami['on']('custom:acceptmessage',this[_0x074f('0x1e')]['bind'](this));ami['on']('custom:rejectmessage',this[_0x074f('0x1e')]['bind'](this));}Trigger[_0x074f('0x2a')][_0x074f('0x2b')]=function(_0x3d6bc1,_0x177d53,_0x5526b7){logger[_0x074f('0x2c')](_0x3d6bc1,_0x177d53,JSON[_0x074f('0x2d')](_0x5526b7));io['to'](_0x3d6bc1)[_0x074f('0x2b')](_0x177d53,_0x5526b7);};Trigger['prototype'][_0x074f('0x1e')]=function(_0x2656d9){var _0x10a599=_[_0x074f('0x2e')](_0x2656d9);this[_0x074f('0x2f')](_0x10a599);};Trigger['prototype'][_0x074f('0x2f')]=function(_0x471b18){var _0x4e374a;for(var _0x16ff4c in this[_0x074f('0xe')]){if(this[_0x074f('0xe')]['hasOwnProperty'](_0x16ff4c)){if(this[_0x074f('0xe')][_0x16ff4c][_0x074f('0x30')]){_0x4e374a=this['checkTrigger'](this[_0x074f('0xe')][_0x16ff4c],_0x471b18);if(_0x4e374a){_[_0x074f('0x31')](_0x471b18,_0x471b18[_0x074f('0x32')]);for(var _0x3c756b=0x0,_0x130486,_0x19f26f,_0x283211;_0x3c756b<this[_0x074f('0xe')][_0x16ff4c][_0x074f('0x33')][_0x074f('0x34')];_0x3c756b+=0x1){_0x130486=this['triggers'][_0x16ff4c][_0x074f('0x33')][_0x3c756b];if(this[_0x074f('0xf')][_0x471b18['interface']]){switch(_0x130486[_0x074f('0x35')][_0x074f('0x36')]()){case _0x074f('0x37'):break;case _0x074f('0x38'):case _0x074f('0x39'):var _0x380c0e={};switch(barAndWebActions[_0x130486[_0x074f('0x3a')]]){case'popup':_0x380c0e[_0x074f('0x3b')]=_0x130486[_0x074f('0x3c')];_0x380c0e[_0x074f('0x3d')]=this[_0x074f('0x11')][_0x130486[_0x074f('0x3c')]]?Mustache[_0x074f('0x3e')](this['templates'][_0x130486[_0x074f('0x3c')]][_0x074f('0x3d')],_0x471b18):'template\x20not\x20found';break;case _0x074f('0xc'):_0x380c0e[_0x074f('0x3f')]=this[_0x074f('0x40')](_0x130486['data2'],_0x471b18,_['isNil'](_0x130486['data3'])?!![]:parseInt(_0x130486[_0x074f('0x41')],0xa));if(_[_0x074f('0x42')](_0x130486[_0x074f('0x43')])){_0x380c0e['location']='0';}else{_0x380c0e[_0x074f('0x44')]=_0x130486[_0x074f('0x43')];_0x380c0e['windowWidth']=_[_0x074f('0x42')](_0x130486[_0x074f('0x45')])?_0x074f('0x46'):_0x130486[_0x074f('0x45')];_0x380c0e[_0x074f('0x47')]=_[_0x074f('0x42')](_0x130486[_0x074f('0x48')])?_0x074f('0x49'):_0x130486[_0x074f('0x48')];}break;case _0x074f('0xd'):_0x380c0e['winApplication']=_0x130486[_0x074f('0x3c')]?Mustache['render'](_0x130486[_0x074f('0x3c')],_0x471b18):'';_0x380c0e['winArguments']=_0x130486[_0x074f('0x41')]?Mustache['render'](_0x130486[_0x074f('0x41')],_0x471b18):'';break;}this['emit'](util[_0x074f('0x4a')](_0x074f('0x4b'),this[_0x074f('0xf')][_0x471b18[_0x074f('0x4c')]][_0x074f('0x4d')]),util[_0x074f('0x4a')](_0x074f('0x4e'),_0x130486['action'][_0x074f('0x36')](),barAndWebActions[_0x130486[_0x074f('0x3a')]]),_[_0x074f('0x31')](_0x380c0e,_0x471b18));break;case _0x074f('0x4f'):this['emit'](util[_0x074f('0x4a')]('user:%s',this[_0x074f('0xf')][_0x471b18[_0x074f('0x4c')]][_0x074f('0x4d')]),util['format'](_0x074f('0x50'),_0x130486['action'][_0x074f('0x36')]()),_[_0x074f('0x31')]({'ProjectId':parseInt(_0x130486['data1'],0xa)},_0x471b18));break;default:this[_0x074f('0x2b')](util['format'](_0x074f('0x4b'),this[_0x074f('0xf')][_0x471b18['interface']]['name']),util['format']('trigger:%s',_0x130486[_0x074f('0x35')][_0x074f('0x36')]()),_[_0x074f('0x31')]({},_0x130486,_0x471b18));}}switch(_0x130486[_0x074f('0x35')]['toLowerCase']()){case _0x074f('0x37'):cmContact[_0x074f('0x51')](this[_0x074f('0xf')][_0x471b18[_0x074f('0x4c')]],_0x130486,_0x471b18,cmContactRpc);break;case _0x074f('0x52'):integration[_0x074f('0x51')](_0x130486,_0x471b18,this[_0x074f('0x1c')],this[_0x074f('0xf')][_0x471b18['interface']],this[_0x074f('0x10')][_0x471b18[_0x074f('0x53')]],this[_0x074f('0x12')][_0x471b18[_0x074f('0x54')]]);break;case'urlforward':urlforward[_0x074f('0x51')](_0x130486,_0x471b18);break;}}}}}}};Trigger[_0x074f('0x2a')]['buildUri']=function(_0x4b90a4,_0x3ac2ea,_0x423393){var _0x1ecaf7=url[_0x074f('0x55')](Mustache['render'](_0x4b90a4,_0x3ac2ea),!![]);if(_0x423393){_['merge'](_0x1ecaf7[_0x074f('0x56')],_0x3ac2ea);}delete _0x1ecaf7[_0x074f('0x57')];return url[_0x074f('0x4a')](_0x1ecaf7);};Trigger[_0x074f('0x2a')][_0x074f('0x58')]=function(_0x151c90,_0x11a2dc){var _0x9e8bae=!![],_0x385184=!![];if(_0x151c90['AllConditions'][_0x074f('0x34')]){_0x9e8bae=_[_0x074f('0x59')](_0x151c90[_0x074f('0x5a')],this[_0x074f('0x5b')](_0x11a2dc,_0x151c90[_0x074f('0x5c')]));}if(_0x151c90[_0x074f('0x5d')]['length']){_0x385184=_[_0x074f('0x5e')](_0x151c90[_0x074f('0x5d')],this['checkConditions'](_0x11a2dc,_0x151c90[_0x074f('0x5c')]));}return _0x9e8bae&&_0x385184;};Trigger[_0x074f('0x2a')][_0x074f('0x5b')]=function(_0x417fa1,_0x22d93f){return function(_0x2efcbd){switch(_0x2efcbd[_0x074f('0x5f')]){case _0x074f('0x60'):if(_0x417fa1[_0x074f('0x5c')]===_0x22d93f){if(_0x22d93f===_0x074f('0x61')){return _0x417fa1['ChatWebsiteId']?operators[_0x2efcbd[_0x074f('0x62')]](Number(_0x2efcbd['value']),_0x417fa1['ChatWebsiteId']):![];}else{return _0x417fa1[_[_0x074f('0x63')](_0x22d93f)+'AccountId']?operators[_0x2efcbd['operator']](Number(_0x2efcbd[_0x074f('0x64')]),_0x417fa1[_[_0x074f('0x63')](_0x22d93f)+_0x074f('0x65')]):![];}}break;case _0x074f('0x66'):case _0x074f('0x67'):if(_0x417fa1[_0x074f('0x5c')]===_0x22d93f){return _0x417fa1[_0x074f('0x68')]?operators[_0x2efcbd[_0x074f('0x62')]](_0x2efcbd['value'],_0x417fa1['event']):![];}break;case _0x074f('0x53'):return _0x417fa1[_0x074f('0x53')]?operators[_0x2efcbd[_0x074f('0x62')]](_0x2efcbd['value'],_0x417fa1[_0x074f('0x53')]):![];case _0x074f('0x69'):return _0x417fa1['lastevent']?operators[_0x2efcbd['operator']](_0x2efcbd[_0x074f('0x64')],_0x417fa1['lastevent']):![];case _0x074f('0x54'):return _0x417fa1[_0x074f('0x54')]?operators[_0x2efcbd['operator']](_0x2efcbd[_0x074f('0x64')],_0x417fa1[_0x074f('0x54')]):![];}return![];};};module[_0x074f('0x6a')]=Trigger;
\ No newline at end of file
index 5c712fa..eecabaa 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5273=['%s/users','remoteUri','total_entries','find','_embedded','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','format','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','%s/users/me','[HTTP]','stringify','GET','authType','basic','token','username','Basic\x20%s','base64','Searching\x20enduser\x20with\x20phone','%s/customers/search','Enduser\x20found!','entries','POST','work','length','map','forEach','type','string','nameField','customField','content','toString','idField','custom_fields','variable','variableName','Variable','name','toLowerCase','priority','Creating\x20new\x20ticket...','merge','getString','Subjects','phone','new','xCALLY','Motion','CTI','concat','Tags','/api/v2/users/%d','Descriptions','Fields','%s/customers/%d/cases','queue','stripTrailingSlash','serverUrl','monitor_format','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','email','then','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','[QUEUE]','Displaying\x20ticket\x20to\x20agent...','user:%s','newTab','trigger:browser:url','https://xcally.desk.com/web/agent/case/%d','error','Desk\x20account\x20type\x20not\x20recognized','catch','outbound','recordingFormat','none','[OUTBOUND]','Authorization','destcalleridname','destcalleridnum','integrationTab','trigger:desk:display','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','%s/agent/tickets/%s','abandoned','[ABANDONED]','Recording\x20is\x20enabled!','lodash','request-promise','md5','./util','../../../../config/environment','../../../../config/logger','redis','defaults','localhost','socket.io-emitter','emit','application/json','validateEmail','info'];(function(_0x4565bf,_0x5ad9d6){var _0x5610ba=function(_0x170988){while(--_0x170988){_0x4565bf['push'](_0x4565bf['shift']());}};_0x5610ba(++_0x5ad9d6);}(_0x5273,0x136));var _0x3527=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x5273[_0x321bb2];return _0x9c12ed;};'use strict';var _=require(_0x3527('0x0'));var rp=require(_0x3527('0x1'));var md5=require(_0x3527('0x2'));var util=require('util');var Redis=require('ioredis');var intUtil=require(_0x3527('0x3'));var config=require(_0x3527('0x4'));var logger=require(_0x3527('0x5'))('desk');config[_0x3527('0x6')]=_[_0x3527('0x7')](config[_0x3527('0x6')],{'host':_0x3527('0x8'),'port':0x18eb});var io=require(_0x3527('0x9'))(new Redis(config['redis']));function emit(_0x3496d8,_0x25303a,_0x17a846){io['to'](_0x3496d8)[_0x3527('0xa')](_0x25303a,_0x17a846);}var headers={'Content-Type':_0x3527('0xb'),'Accept':'application/json'};function getUser(_0x55a0ae,_0x5808b8){if(intUtil[_0x3527('0xc')](_0x5808b8)===!![]){logger[_0x3527('0xd')]('Getting\x20agent\x20with\x20email',_0x5808b8);return request({'uri':util['format'](_0x3527('0xe'),_0x55a0ae[_0x3527('0xf')])})['then'](function(_0x5ef65b){if(_0x5ef65b[_0x3527('0x10')]){return _[_0x3527('0x11')](_0x5ef65b[_0x3527('0x12')]['entries'],{'email':_0x5808b8});}})['then'](function(_0x1de12d){if(_0x1de12d){logger[_0x3527('0xd')]('Agent\x20found!');return _0x1de12d;}else{logger[_0x3527('0xd')](_0x3527('0x13'));return request({'uri':util[_0x3527('0x14')]('%s/users/me',_0x55a0ae['remoteUri'])});}});}else{logger['info'](_0x3527('0x15'));return request({'uri':util[_0x3527('0x14')](_0x3527('0x16'),_0x55a0ae[_0x3527('0xf')])});}}function request(_0x273e5a){logger['debug'](_0x3527('0x17'),JSON[_0x3527('0x18')](_0x273e5a));return rp(_[_0x3527('0x7')](_0x273e5a,{'method':_0x3527('0x19'),'headers':headers,'json':!![]}));}function getAuth(_0x9d2e9a){var _0x30e0f0;if(_0x9d2e9a[_0x3527('0x1a')]===_0x3527('0x1b')){_0x30e0f0=util[_0x3527('0x14')]('%s:%s',_0x9d2e9a['username'],_0x9d2e9a['password']);}else if(_0x9d2e9a['authType']===_0x3527('0x1c')){_0x30e0f0=util['format']('%s/token:%s',_0x9d2e9a[_0x3527('0x1d')],_0x9d2e9a['token']);}return util['format'](_0x3527('0x1e'),new Buffer(_0x30e0f0)['toString'](_0x3527('0x1f')));}function getEndUser(_0x1058f2,_0x3d8435,_0x35a15c){logger[_0x3527('0xd')](_0x3527('0x20'),_0x35a15c);return request({'uri':util[_0x3527('0x14')](_0x3527('0x21'),_0x1058f2[_0x3527('0xf')]),'qs':{'phone':_0x35a15c}})['then'](function(_0x1786e7){if(_0x1786e7[_0x3527('0x10')]){logger[_0x3527('0xd')](_0x3527('0x22'));return _0x1786e7[_0x3527('0x12')][_0x3527('0x23')][0x0];}else{logger[_0x3527('0xd')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util['format']('%s/customers',_0x1058f2[_0x3527('0xf')]),'method':_0x3527('0x24'),'body':{'first_name':_0x3d8435,'title':_0x3d8435,'phone_numbers':[{'type':_0x3527('0x25'),'value':_0x35a15c}]}});}});}function getTags(_0x3d3b65,_0x4a72a7){var _0x332833=[];if(_0x3d3b65&&_0x3d3b65[_0x3527('0x26')]>0x0){_0x332833=_[_0x3527('0x27')](_0x3d3b65,_0x4a72a7);}return _0x332833;}function getCustomFields(_0x9d1d47,_0x474da3){var _0x66e858=[];var _0x231fef={'custom_fields':{}};if(_0x9d1d47[_0x3527('0x26')]>0x0){_[_0x3527('0x28')](_0x9d1d47,function(_0x14990){if(_0x14990[_0x3527('0x29')]===_0x3527('0x2a')&&_0x14990[_0x3527('0x2b')]&&!_0x14990[_0x3527('0x2c')]){_0x231fef[_0x14990[_0x3527('0x2b')]['toLowerCase']()]=_0x14990[_0x3527('0x2d')][_0x3527('0x2e')]();}else if(_0x14990[_0x3527('0x29')]===_0x3527('0x2a')&&_0x14990[_0x3527('0x2f')]&&_0x14990[_0x3527('0x2c')]){_0x231fef[_0x3527('0x30')][_0x14990[_0x3527('0x2f')]]=_0x14990[_0x3527('0x2d')][_0x3527('0x2e')]();}else if(_0x14990[_0x3527('0x29')]===_0x3527('0x31')&&_0x14990[_0x3527('0x32')]&&_0x14990['idField']&&_0x14990[_0x3527('0x2c')]){_0x474da3[_0x14990[_0x3527('0x32')]]&&(_0x231fef['custom_fields'][_0x14990[_0x3527('0x2f')]]=_0x474da3[_0x14990[_0x3527('0x32')]][_0x3527('0x2e')]());}else if(_0x14990['type']==='customVariable'&&_0x14990[_0x3527('0x33')]&&_0x14990[_0x3527('0x33')][_0x3527('0x34')]&&_0x14990[_0x3527('0x2f')]&&_0x14990[_0x3527('0x2c')]){_0x474da3[_0x14990[_0x3527('0x33')]['name'][_0x3527('0x35')]()]&&(_0x231fef[_0x3527('0x30')][_0x14990['idField']]=_0x474da3[_0x14990[_0x3527('0x33')][_0x3527('0x34')][_0x3527('0x35')]()][_0x3527('0x2e')]());}});}if(_0x231fef[_0x3527('0x36')]){_0x231fef['priority']=Number(_0x231fef[_0x3527('0x36')]);}return _0x231fef;}function getTicket(_0xda123f,_0x38fb8a,_0x374df3,_0x37ca46,_0x51070c){logger[_0x3527('0xd')](_0x3527('0x37'));var _0x2d0b03=_[_0x3527('0x38')]({'subject':intUtil[_0x3527('0x39')](_0x37ca46[_0x3527('0x3a')],_0x51070c,'\x20'),'type':_0x3527('0x3b'),'status':_0x3527('0x3c'),'labels':[_0x3527('0x3d'),_0x3527('0x3e'),_0x3527('0x3f')][_0x3527('0x40')](getTags(_0x37ca46[_0x3527('0x41')],'name')),'description':intUtil['getString'](_0x37ca46['Descriptions'],_0x51070c,'\x0a'),'_links':{'assigned_user':{'href':util[_0x3527('0x14')](_0x3527('0x42'),_0x38fb8a['id']),'class':'user'}},'message':{'direction':'in','body':intUtil['getString'](_0x37ca46[_0x3527('0x43')],_0x51070c,'\x0a')}},getCustomFields(_0x37ca46[_0x3527('0x44')],_0x51070c));return request({'uri':util['format'](_0x3527('0x45'),_0xda123f[_0x3527('0xf')],_0x374df3['id']),'method':_0x3527('0x24'),'body':_0x2d0b03});}exports[_0x3527('0x46')]=function(_0x25d807,_0x319641,_0x19b32a,_0x471263,_0x4a44ca,_0x5aa309){var _0x20ab9a,_0x49cfcd;_0x5aa309['remoteUri']=intUtil[_0x3527('0x47')](_0x5aa309[_0x3527('0xf')]);_0x5aa309[_0x3527('0x48')]=intUtil['stripTrailingSlash'](_0x5aa309[_0x3527('0x48')]);if(_0x4a44ca&&_0x4a44ca[_0x3527('0x49')]){logger['info']('[QUEUE]','Recording\x20is\x20enabled!');_0x319641[_0x3527('0x4a')]=util['format'](_0x3527('0x4b'),_0x5aa309['serverUrl'],_0x319641[_0x3527('0x4c')],md5(_0x319641[_0x3527('0x4c')]));}else{_0x319641[_0x3527('0x4a')]='';}headers['Authorization']=getAuth(_0x5aa309);return getUser(_0x5aa309,_0x471263[_0x3527('0x4d')])[_0x3527('0x4e')](function(_0x563c4d){_0x20ab9a=_0x563c4d;logger[_0x3527('0xd')](_0x3527('0x4f'),_0x20ab9a['id']);return getEndUser(_0x5aa309,_0x319641[_0x3527('0x50')],_0x319641[_0x3527('0x51')]);})[_0x3527('0x4e')](function(_0x18d554){_0x49cfcd=_0x18d554;logger[_0x3527('0xd')](_0x3527('0x52'),_0x49cfcd['id']);return getTicket(_0x5aa309,_0x20ab9a,_0x49cfcd,_0x19b32a,_0x319641);})[_0x3527('0x4e')](function(_0x3dbb89){if(_0x3dbb89){logger[_0x3527('0xd')](_0x3527('0x53'));logger[_0x3527('0xd')](_0x3527('0x54'),_0x3dbb89['id']);switch(_0x5aa309[_0x3527('0x29')]){case'integrationTab':logger[_0x3527('0xd')](_0x3527('0x55'),_0x3527('0x56'));emit(util[_0x3527('0x14')](_0x3527('0x57'),_0x471263[_0x3527('0x34')]),'trigger:desk:display',{'recordId':_0x3dbb89['id']});break;case _0x3527('0x58'):logger[_0x3527('0xd')](_0x3527('0x55'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x3527('0x14')]('user:%s',_0x471263['name']),_0x3527('0x59'),{'uri':util[_0x3527('0x14')](_0x3527('0x5a'),_0x3dbb89['id'])});break;default:logger[_0x3527('0x5b')]('[QUEUE]',_0x3527('0x5c'));}}})[_0x3527('0x5d')](function(_0x1c0d91){console[_0x3527('0x5b')](_0x1c0d91);logger['error']('[QUEUE]',JSON[_0x3527('0x18')](_0x1c0d91));});};exports[_0x3527('0x5e')]=function(_0x4b5c02,_0x1e3630,_0x1d04b4,_0x49dfe7,_0x4b1c0a,_0x430363,_0x194682){var _0x53a750,_0x4c8f0c;_0x430363[_0x3527('0xf')]=intUtil[_0x3527('0x47')](_0x430363[_0x3527('0xf')]);_0x430363['serverUrl']=intUtil[_0x3527('0x47')](_0x430363[_0x3527('0x48')]);if(_0x194682&&_0x194682[_0x3527('0x5f')]&&_0x194682[_0x3527('0x5f')]!==_0x3527('0x60')){logger[_0x3527('0xd')](_0x3527('0x61'),'Recording\x20is\x20enabled!');_0x1e3630[_0x3527('0x4a')]=util[_0x3527('0x14')](_0x3527('0x4b'),_0x430363['serverUrl'],_0x1e3630[_0x3527('0x4c')],md5(_0x1e3630[_0x3527('0x4c')]));}headers[_0x3527('0x62')]=getAuth(_0x430363);return getUser(_0x430363,_0x49dfe7[_0x3527('0x4d')])[_0x3527('0x4e')](function(_0x2cae61){_0x53a750=_0x2cae61;logger[_0x3527('0xd')](_0x3527('0x4f'),_0x53a750['id']);return getEndUser(_0x430363,_0x1e3630[_0x3527('0x63')],_0x1e3630[_0x3527('0x64')]);})[_0x3527('0x4e')](function(_0x28b8ce){_0x4c8f0c=_0x28b8ce;logger['info'](_0x3527('0x52'),_0x4c8f0c['id']);return getTicket(_0x430363,_0x53a750,_0x4c8f0c,_0x1d04b4,_0x1e3630);})[_0x3527('0x4e')](function(_0x1a847a){if(_0x1a847a){logger[_0x3527('0xd')](_0x3527('0x53'));logger['info'](_0x3527('0x54'),_0x1a847a['id']);switch(_0x430363['type']){case _0x3527('0x65'):logger[_0x3527('0xd')](_0x3527('0x55'),_0x3527('0x56'));emit(util['format'](_0x3527('0x57'),_0x49dfe7[_0x3527('0x34')]),_0x3527('0x66'),{'recordId':_0x1a847a['id']});break;case _0x3527('0x58'):logger[_0x3527('0xd')]('[QUEUE]',_0x3527('0x67'));emit(util[_0x3527('0x14')](_0x3527('0x57'),_0x49dfe7['name']),_0x3527('0x59'),{'uri':util['format'](_0x3527('0x68'),_0x430363[_0x3527('0xf')],_0x1a847a['id'])});break;default:logger[_0x3527('0x5b')](_0x3527('0x61'),_0x3527('0x5c'));}}})['catch'](function(_0x2acd48){logger[_0x3527('0x5b')](_0x3527('0x61'),JSON['stringify'](_0x2acd48));});};exports[_0x3527('0x69')]=function(_0x43271e,_0x3345a0,_0x22bd67,_0x451e6e,_0x2b0c81,_0x4cbf40){var _0x40e4c5,_0x2f8493;_0x4cbf40['remoteUri']=intUtil[_0x3527('0x47')](_0x4cbf40[_0x3527('0xf')]);_0x4cbf40[_0x3527('0x48')]=intUtil['stripTrailingSlash'](_0x4cbf40[_0x3527('0x48')]);if(_0x2b0c81&&_0x2b0c81[_0x3527('0x49')]){logger[_0x3527('0xd')](_0x3527('0x6a'),_0x3527('0x6b'));_0x3345a0[_0x3527('0x4a')]=util['format'](_0x3527('0x4b'),_0x4cbf40[_0x3527('0x48')],_0x3345a0[_0x3527('0x4c')],md5(_0x3345a0[_0x3527('0x4c')]));}else{_0x3345a0[_0x3527('0x4a')]='';}headers['Authorization']=getAuth(_0x4cbf40);return getUser(_0x4cbf40)['then'](function(_0x2512a){_0x40e4c5=_0x2512a;logger[_0x3527('0xd')]('The\x20User\x20ID\x20is:',_0x40e4c5['id']);return getEndUser(_0x4cbf40,_0x3345a0['calleridname'],_0x3345a0[_0x3527('0x51')]);})[_0x3527('0x4e')](function(_0x50888a){_0x2f8493=_0x50888a;logger[_0x3527('0xd')](_0x3527('0x52'),_0x2f8493['id']);return getTicket(_0x4cbf40,_0x40e4c5,_0x2f8493,_0x22bd67,_0x3345a0);})[_0x3527('0x4e')](function(_0x19e408){if(_0x19e408){logger[_0x3527('0xd')](_0x3527('0x53'));logger[_0x3527('0xd')]('The\x20Ticket\x20ID\x20is:',_0x19e408['id']);}})[_0x3527('0x5d')](function(_0x4803fe){logger[_0x3527('0x5b')](_0x3527('0x6a'),JSON[_0x3527('0x18')](_0x4803fe));});};
\ No newline at end of file
+var _0x0f31=['socket.io-emitter','emit','application/json','validateEmail','info','Getting\x20agent\x20with\x20email','format','%s/users','remoteUri','then','total_entries','find','_embedded','entries','Agent\x20found!','%s/users/me','debug','stringify','authType','basic','username','password','%s/token:%s','token','toString','base64','Searching\x20enduser\x20with\x20phone','%s/customers/search','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/customers','work','length','map','forEach','type','nameField','customField','toLowerCase','string','idField','custom_fields','variable','variableName','customVariable','Variable','name','priority','Creating\x20new\x20ticket...','merge','getString','Subjects','phone','xCALLY','concat','Tags','/api/v2/users/%d','user','Fields','%s/customers/%d/cases','POST','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','calleridname','calleridnum','Ticket\x20created!','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent...','trigger:desk:display','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','error','Desk\x20account\x20type\x20not\x20recognized','catch','outbound','recordingFormat','none','[OUTBOUND]','The\x20User\x20ID\x20is:','destcalleridname','destcalleridnum','The\x20Enduser\x20ID\x20is:','%s/agent/tickets/%s','[ABANDONED]','lodash','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','desk','redis','defaults','localhost'];(function(_0x3ab51d,_0x2fa01d){var _0x29a04e=function(_0x7807b0){while(--_0x7807b0){_0x3ab51d['push'](_0x3ab51d['shift']());}};_0x29a04e(++_0x2fa01d);}(_0x0f31,0x19d));var _0x10f3=function(_0x16907f,_0x19c4a1){_0x16907f=_0x16907f-0x0;var _0xdb824=_0x0f31[_0x16907f];return _0xdb824;};'use strict';var _=require(_0x10f3('0x0'));var rp=require('request-promise');var md5=require(_0x10f3('0x1'));var util=require(_0x10f3('0x2'));var Redis=require(_0x10f3('0x3'));var intUtil=require(_0x10f3('0x4'));var config=require(_0x10f3('0x5'));var logger=require(_0x10f3('0x6'))(_0x10f3('0x7'));config[_0x10f3('0x8')]=_[_0x10f3('0x9')](config[_0x10f3('0x8')],{'host':_0x10f3('0xa'),'port':0x18eb});var io=require(_0x10f3('0xb'))(new Redis(config[_0x10f3('0x8')]));function emit(_0x13a76a,_0xdea7b9,_0x240a38){io['to'](_0x13a76a)[_0x10f3('0xc')](_0xdea7b9,_0x240a38);}var headers={'Content-Type':_0x10f3('0xd'),'Accept':'application/json'};function getUser(_0x3d4e17,_0x11ada0){if(intUtil[_0x10f3('0xe')](_0x11ada0)===!![]){logger[_0x10f3('0xf')](_0x10f3('0x10'),_0x11ada0);return request({'uri':util[_0x10f3('0x11')](_0x10f3('0x12'),_0x3d4e17[_0x10f3('0x13')])})[_0x10f3('0x14')](function(_0x380542){if(_0x380542[_0x10f3('0x15')]){return _[_0x10f3('0x16')](_0x380542[_0x10f3('0x17')][_0x10f3('0x18')],{'email':_0x11ada0});}})['then'](function(_0xd96ee5){if(_0xd96ee5){logger[_0x10f3('0xf')](_0x10f3('0x19'));return _0xd96ee5;}else{logger[_0x10f3('0xf')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x10f3('0x11')](_0x10f3('0x1a'),_0x3d4e17[_0x10f3('0x13')])});}});}else{logger[_0x10f3('0xf')]('Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!');return request({'uri':util[_0x10f3('0x11')](_0x10f3('0x1a'),_0x3d4e17['remoteUri'])});}}function request(_0x10c87d){logger[_0x10f3('0x1b')]('[HTTP]',JSON[_0x10f3('0x1c')](_0x10c87d));return rp(_[_0x10f3('0x9')](_0x10c87d,{'method':'GET','headers':headers,'json':!![]}));}function getAuth(_0x452dd6){var _0x10268f;if(_0x452dd6[_0x10f3('0x1d')]===_0x10f3('0x1e')){_0x10268f=util[_0x10f3('0x11')]('%s:%s',_0x452dd6[_0x10f3('0x1f')],_0x452dd6[_0x10f3('0x20')]);}else if(_0x452dd6[_0x10f3('0x1d')]==='token'){_0x10268f=util[_0x10f3('0x11')](_0x10f3('0x21'),_0x452dd6['username'],_0x452dd6[_0x10f3('0x22')]);}return util['format']('Basic\x20%s',new Buffer(_0x10268f)[_0x10f3('0x23')](_0x10f3('0x24')));}function getEndUser(_0x510502,_0x5220c6,_0xdfd5be){logger[_0x10f3('0xf')](_0x10f3('0x25'),_0xdfd5be);return request({'uri':util['format'](_0x10f3('0x26'),_0x510502['remoteUri']),'qs':{'phone':_0xdfd5be}})[_0x10f3('0x14')](function(_0x3845f4){if(_0x3845f4[_0x10f3('0x15')]){logger['info'](_0x10f3('0x27'));return _0x3845f4[_0x10f3('0x17')]['entries'][0x0];}else{logger['info'](_0x10f3('0x28'));return request({'uri':util[_0x10f3('0x11')](_0x10f3('0x29'),_0x510502[_0x10f3('0x13')]),'method':'POST','body':{'first_name':_0x5220c6,'title':_0x5220c6,'phone_numbers':[{'type':_0x10f3('0x2a'),'value':_0xdfd5be}]}});}});}function getTags(_0x5792b4,_0x25b148){var _0x2e4b9b=[];if(_0x5792b4&&_0x5792b4[_0x10f3('0x2b')]>0x0){_0x2e4b9b=_[_0x10f3('0x2c')](_0x5792b4,_0x25b148);}return _0x2e4b9b;}function getCustomFields(_0x5b1158,_0x59a2d9){var _0x4e998f=[];var _0x1a2139={'custom_fields':{}};if(_0x5b1158['length']>0x0){_[_0x10f3('0x2d')](_0x5b1158,function(_0x4d3a37){if(_0x4d3a37[_0x10f3('0x2e')]==='string'&&_0x4d3a37[_0x10f3('0x2f')]&&!_0x4d3a37[_0x10f3('0x30')]){_0x1a2139[_0x4d3a37[_0x10f3('0x2f')][_0x10f3('0x31')]()]=_0x4d3a37['content'][_0x10f3('0x23')]();}else if(_0x4d3a37[_0x10f3('0x2e')]===_0x10f3('0x32')&&_0x4d3a37[_0x10f3('0x33')]&&_0x4d3a37[_0x10f3('0x30')]){_0x1a2139[_0x10f3('0x34')][_0x4d3a37[_0x10f3('0x33')]]=_0x4d3a37['content']['toString']();}else if(_0x4d3a37[_0x10f3('0x2e')]===_0x10f3('0x35')&&_0x4d3a37[_0x10f3('0x36')]&&_0x4d3a37[_0x10f3('0x33')]&&_0x4d3a37['customField']){_0x59a2d9[_0x4d3a37['variableName']]&&(_0x1a2139[_0x10f3('0x34')][_0x4d3a37[_0x10f3('0x33')]]=_0x59a2d9[_0x4d3a37[_0x10f3('0x36')]][_0x10f3('0x23')]());}else if(_0x4d3a37[_0x10f3('0x2e')]===_0x10f3('0x37')&&_0x4d3a37[_0x10f3('0x38')]&&_0x4d3a37[_0x10f3('0x38')][_0x10f3('0x39')]&&_0x4d3a37[_0x10f3('0x33')]&&_0x4d3a37[_0x10f3('0x30')]){_0x59a2d9[_0x4d3a37[_0x10f3('0x38')][_0x10f3('0x39')][_0x10f3('0x31')]()]&&(_0x1a2139[_0x10f3('0x34')][_0x4d3a37['idField']]=_0x59a2d9[_0x4d3a37['Variable'][_0x10f3('0x39')][_0x10f3('0x31')]()]['toString']());}});}if(_0x1a2139[_0x10f3('0x3a')]){_0x1a2139[_0x10f3('0x3a')]=Number(_0x1a2139[_0x10f3('0x3a')]);}return _0x1a2139;}function getTicket(_0x5a9b8c,_0x3c045e,_0x2fb265,_0x2eae51,_0x391103){logger[_0x10f3('0xf')](_0x10f3('0x3b'));var _0xe1d68e=_[_0x10f3('0x3c')]({'subject':intUtil[_0x10f3('0x3d')](_0x2eae51[_0x10f3('0x3e')],_0x391103,'\x20'),'type':_0x10f3('0x3f'),'status':'new','labels':[_0x10f3('0x40'),'Motion','CTI'][_0x10f3('0x41')](getTags(_0x2eae51[_0x10f3('0x42')],_0x10f3('0x39'))),'description':intUtil['getString'](_0x2eae51['Descriptions'],_0x391103,'\x0a'),'_links':{'assigned_user':{'href':util['format'](_0x10f3('0x43'),_0x3c045e['id']),'class':_0x10f3('0x44')}},'message':{'direction':'in','body':intUtil[_0x10f3('0x3d')](_0x2eae51['Descriptions'],_0x391103,'\x0a')}},getCustomFields(_0x2eae51[_0x10f3('0x45')],_0x391103));return request({'uri':util[_0x10f3('0x11')](_0x10f3('0x46'),_0x5a9b8c['remoteUri'],_0x2fb265['id']),'method':_0x10f3('0x47'),'body':_0xe1d68e});}exports[_0x10f3('0x48')]=function(_0x41107a,_0x97b0ec,_0x3116f2,_0x56525d,_0x332b1b,_0xc3d5f0){var _0x3875ef,_0x53fe29;_0xc3d5f0[_0x10f3('0x13')]=intUtil['stripTrailingSlash'](_0xc3d5f0[_0x10f3('0x13')]);_0xc3d5f0['serverUrl']=intUtil[_0x10f3('0x49')](_0xc3d5f0[_0x10f3('0x4a')]);if(_0x332b1b&&_0x332b1b[_0x10f3('0x4b')]){logger[_0x10f3('0xf')](_0x10f3('0x4c'),_0x10f3('0x4d'));_0x97b0ec[_0x10f3('0x4e')]=util[_0x10f3('0x11')](_0x10f3('0x4f'),_0xc3d5f0[_0x10f3('0x4a')],_0x97b0ec['uniqueid'],md5(_0x97b0ec[_0x10f3('0x50')]));}else{_0x97b0ec['recordingURL']='';}headers[_0x10f3('0x51')]=getAuth(_0xc3d5f0);return getUser(_0xc3d5f0,_0x56525d[_0x10f3('0x52')])[_0x10f3('0x14')](function(_0x273f3c){_0x3875ef=_0x273f3c;logger[_0x10f3('0xf')]('The\x20User\x20ID\x20is:',_0x3875ef['id']);return getEndUser(_0xc3d5f0,_0x97b0ec[_0x10f3('0x53')],_0x97b0ec[_0x10f3('0x54')]);})[_0x10f3('0x14')](function(_0x18f8c2){_0x53fe29=_0x18f8c2;logger[_0x10f3('0xf')]('The\x20Enduser\x20ID\x20is:',_0x53fe29['id']);return getTicket(_0xc3d5f0,_0x3875ef,_0x53fe29,_0x3116f2,_0x97b0ec);})['then'](function(_0x21f800){if(_0x21f800){logger[_0x10f3('0xf')](_0x10f3('0x55'));logger[_0x10f3('0xf')](_0x10f3('0x56'),_0x21f800['id']);switch(_0xc3d5f0[_0x10f3('0x2e')]){case'integrationTab':logger[_0x10f3('0xf')](_0x10f3('0x4c'),_0x10f3('0x57'));emit(util[_0x10f3('0x11')]('user:%s',_0x56525d[_0x10f3('0x39')]),_0x10f3('0x58'),{'recordId':_0x21f800['id']});break;case _0x10f3('0x59'):logger[_0x10f3('0xf')](_0x10f3('0x4c'),_0x10f3('0x5a'));emit(util[_0x10f3('0x11')](_0x10f3('0x5b'),_0x56525d['name']),_0x10f3('0x5c'),{'uri':util['format']('https://xcally.desk.com/web/agent/case/%d',_0x21f800['id'])});break;default:logger[_0x10f3('0x5d')]('[QUEUE]',_0x10f3('0x5e'));}}})[_0x10f3('0x5f')](function(_0x3c0e12){console['error'](_0x3c0e12);logger['error']('[QUEUE]',JSON[_0x10f3('0x1c')](_0x3c0e12));});};exports[_0x10f3('0x60')]=function(_0x2893f2,_0x3fc003,_0x86a2fe,_0x5e3bcb,_0x5b65a7,_0x48b2e5,_0x2a5aca){var _0x30de95,_0x96c6be;_0x48b2e5['remoteUri']=intUtil['stripTrailingSlash'](_0x48b2e5[_0x10f3('0x13')]);_0x48b2e5['serverUrl']=intUtil['stripTrailingSlash'](_0x48b2e5[_0x10f3('0x4a')]);if(_0x2a5aca&&_0x2a5aca[_0x10f3('0x61')]&&_0x2a5aca[_0x10f3('0x61')]!==_0x10f3('0x62')){logger[_0x10f3('0xf')](_0x10f3('0x63'),_0x10f3('0x4d'));_0x3fc003['recordingURL']=util[_0x10f3('0x11')](_0x10f3('0x4f'),_0x48b2e5['serverUrl'],_0x3fc003['uniqueid'],md5(_0x3fc003['uniqueid']));}headers[_0x10f3('0x51')]=getAuth(_0x48b2e5);return getUser(_0x48b2e5,_0x5e3bcb[_0x10f3('0x52')])[_0x10f3('0x14')](function(_0x5307ba){_0x30de95=_0x5307ba;logger[_0x10f3('0xf')](_0x10f3('0x64'),_0x30de95['id']);return getEndUser(_0x48b2e5,_0x3fc003[_0x10f3('0x65')],_0x3fc003[_0x10f3('0x66')]);})[_0x10f3('0x14')](function(_0x177cd4){_0x96c6be=_0x177cd4;logger[_0x10f3('0xf')](_0x10f3('0x67'),_0x96c6be['id']);return getTicket(_0x48b2e5,_0x30de95,_0x96c6be,_0x86a2fe,_0x3fc003);})[_0x10f3('0x14')](function(_0x5d61c6){if(_0x5d61c6){logger[_0x10f3('0xf')](_0x10f3('0x55'));logger['info']('The\x20Ticket\x20ID\x20is:',_0x5d61c6['id']);switch(_0x48b2e5[_0x10f3('0x2e')]){case'integrationTab':logger[_0x10f3('0xf')](_0x10f3('0x4c'),_0x10f3('0x57'));emit(util['format']('user:%s',_0x5e3bcb[_0x10f3('0x39')]),_0x10f3('0x58'),{'recordId':_0x5d61c6['id']});break;case _0x10f3('0x59'):logger['info'](_0x10f3('0x4c'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x10f3('0x11')](_0x10f3('0x5b'),_0x5e3bcb[_0x10f3('0x39')]),'trigger:browser:url',{'uri':util[_0x10f3('0x11')](_0x10f3('0x68'),_0x48b2e5[_0x10f3('0x13')],_0x5d61c6['id'])});break;default:logger[_0x10f3('0x5d')](_0x10f3('0x63'),_0x10f3('0x5e'));}}})[_0x10f3('0x5f')](function(_0x50f53d){logger[_0x10f3('0x5d')](_0x10f3('0x63'),JSON[_0x10f3('0x1c')](_0x50f53d));});};exports['abandoned']=function(_0x89d77e,_0x5c9e9e,_0x4af26a,_0x47d75d,_0x5963f2,_0x3be73b){var _0x2ec746,_0x492a4c;_0x3be73b[_0x10f3('0x13')]=intUtil['stripTrailingSlash'](_0x3be73b['remoteUri']);_0x3be73b[_0x10f3('0x4a')]=intUtil[_0x10f3('0x49')](_0x3be73b['serverUrl']);if(_0x5963f2&&_0x5963f2[_0x10f3('0x4b')]){logger[_0x10f3('0xf')](_0x10f3('0x69'),_0x10f3('0x4d'));_0x5c9e9e['recordingURL']=util[_0x10f3('0x11')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x3be73b[_0x10f3('0x4a')],_0x5c9e9e[_0x10f3('0x50')],md5(_0x5c9e9e['uniqueid']));}else{_0x5c9e9e['recordingURL']='';}headers['Authorization']=getAuth(_0x3be73b);return getUser(_0x3be73b)[_0x10f3('0x14')](function(_0x1dea08){_0x2ec746=_0x1dea08;logger['info'](_0x10f3('0x64'),_0x2ec746['id']);return getEndUser(_0x3be73b,_0x5c9e9e[_0x10f3('0x53')],_0x5c9e9e['calleridnum']);})['then'](function(_0x48cfb3){_0x492a4c=_0x48cfb3;logger[_0x10f3('0xf')](_0x10f3('0x67'),_0x492a4c['id']);return getTicket(_0x3be73b,_0x2ec746,_0x492a4c,_0x4af26a,_0x5c9e9e);})[_0x10f3('0x14')](function(_0x2cb7be){if(_0x2cb7be){logger['info'](_0x10f3('0x55'));logger[_0x10f3('0xf')]('The\x20Ticket\x20ID\x20is:',_0x2cb7be['id']);}})[_0x10f3('0x5f')](function(_0x544d05){logger[_0x10f3('0x5d')](_0x10f3('0x69'),JSON[_0x10f3('0x1c')](_0x544d05));});};
\ No newline at end of file
index f6c47d3..8a33930 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x93e9=['trigger:browser:url','stripTrailingSlash','serverUrl','abandoned','%s/api/data/v9.0/','https://login.microsoftonline.com/%s/oauth2/token','uniqueid','monitor_format','Recording\x20is\x20enabled!','recordingURL','recordingFormat','none','[OUTBOUND]',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:',']\x20The\x20Enduser\x20ID\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20The\x20%s\x20ID\x20is:\x20%s',']\x20Call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...','name',']\x20Error\x20running\x20Dynamics365\x20integration','lodash','bluebird','request-promise','util','./util','md5','ioredis','../../../../config/logger','redis','defaults','localhost','socket.io-emitter','POST','clientId','remoteUri','username','password','clientSecret','then','access_token','catch','error','toUpperCase',']\x20Wrong\x20credentials!','message','systemusers?$select=internalemailaddress,isdisabled,systemuserid','Bearer\x20','4.0','value','email','userEmail','length','isdisabled','info',']\x20Agent\x20found\x20','systemuserid','userId',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','toLowerCase','outbound','destcalleridnum','calleridnum','contacts','substring','lastIndexOf','enduserId','GET','contacts?$select=telephone1','telephone1','contactid',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','forEach','string','nameField','customField','idField','indexOf','content','ticketType','incident','incidents','getString','Subjects','Descriptions','/contacts(','Fields','phonecall','phonecalls','assign','/systemusers(','callDirection','queue','odata-entityid','ticketId','%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s','format','user:%s','emit'];(function(_0x53f964,_0x3b52b8){var _0x17be6c=function(_0x25a732){while(--_0x25a732){_0x53f964['push'](_0x53f964['shift']());}};_0x17be6c(++_0x3b52b8);}(_0x93e9,0x7b));var _0x993e=function(_0x57dc86,_0x4f89ec){_0x57dc86=_0x57dc86-0x0;var _0x2a936d=_0x93e9[_0x57dc86];return _0x2a936d;};'use strict';var _=require(_0x993e('0x0'));var BPromise=require(_0x993e('0x1'));var rp=require(_0x993e('0x2'));var util=require(_0x993e('0x3'));var intUtil=require(_0x993e('0x4'));var md5=require(_0x993e('0x5'));var Redis=require(_0x993e('0x6'));var logger=require(_0x993e('0x7'))('dynamics365');var config=require('../../../../config/environment');config[_0x993e('0x8')]=_[_0x993e('0x9')](config[_0x993e('0x8')],{'host':_0x993e('0xa'),'port':0x18eb});var io=require(_0x993e('0xb'))(new Redis(config[_0x993e('0x8')]));function getAuthToken(_0x5697f1,_0x4eff34,_0x554a95){var _0x1dfb53={'method':_0x993e('0xc'),'uri':_0x4eff34,'form':{'client_id':_0x5697f1[_0x993e('0xd')],'resource':_0x5697f1[_0x993e('0xe')],'username':_0x5697f1[_0x993e('0xf')],'password':_0x5697f1[_0x993e('0x10')],'grant_type':_0x993e('0x10'),'client_secret':_0x5697f1[_0x993e('0x11')]},'json':!![]};return rp(_0x1dfb53)[_0x993e('0x12')](function(_0x50dc70){return _0x50dc70[_0x993e('0x13')];})[_0x993e('0x14')](function(_0x23fe0b){logger[_0x993e('0x15')]('['+[_0x554a95[_0x993e('0x16')]()]+_0x993e('0x17'));return _0x23fe0b[_0x993e('0x18')];});}function getUser(_0x15d0d9,_0x791468,_0x3b4405,_0x5d5b30,_0x51f14a,_0x4bdfd3){return new BPromise(function(_0x3a405b,_0x22aad5){return getAuthToken(_0x791468,_0x5d5b30,_0x4bdfd3)['then'](function(_0x1947fb){var _0x4a0215={'method':'GET','uri':_0x51f14a+_0x993e('0x19'),'headers':{'Authorization':_0x993e('0x1a')+_0x1947fb,'OData-Version':_0x993e('0x1b')},'json':!![]};return rp(_0x4a0215);})[_0x993e('0x12')](function(_0x5844b3){var _0x34cb0f=_0x5844b3[_0x993e('0x1c')];var _0x196ffe=![];var _0x39889b=null;if(!_['isNil'](_0x3b4405)){if(intUtil['validateEmail'](_0x3b4405[_0x993e('0x1d')])){_0x15d0d9[_0x993e('0x1e')]=_0x3b4405[_0x993e('0x1d')];for(_0x39889b=0x0;_0x39889b<_0x34cb0f[_0x993e('0x1f')];_0x39889b++){if(_0x34cb0f[_0x39889b]['internalemailaddress']===_0x3b4405[_0x993e('0x1d')]&&!_0x34cb0f[_0x39889b][_0x993e('0x20')]){_0x196ffe=!![];logger[_0x993e('0x21')]('['+[_0x4bdfd3[_0x993e('0x16')]()]+_0x993e('0x22')+_0x34cb0f[_0x39889b][_0x993e('0x23')]+'!');_0x15d0d9[_0x993e('0x24')]=_0x34cb0f[_0x39889b]['systemuserid'];}}}}if(!_0x196ffe){logger[_0x993e('0x21')]('['+[_0x4bdfd3['toUpperCase']()]+_0x993e('0x25'));_0x15d0d9[_0x993e('0x1e')]=_0x791468[_0x993e('0xf')];for(_0x39889b=0x0;_0x39889b<_0x34cb0f[_0x993e('0x1f')];_0x39889b++){if(_0x34cb0f[_0x39889b]['internalemailaddress']===_0x791468[_0x993e('0xf')]){_0x15d0d9[_0x993e('0x24')]=_0x34cb0f[_0x39889b]['systemuserid'];}}}_0x3a405b(_0x15d0d9);})[_0x993e('0x14')](function(_0xf835ee){_0x22aad5(_0xf835ee[_0x993e('0x18')]);});});}function createEndUser(_0x792c06,_0x477cfb,_0x47e50d,_0x446aaa,_0x511855,_0x1a1994){return new BPromise(function(_0x2a13a5,_0x276bca){return getAuthToken(_0x477cfb,_0x47e50d,_0x1a1994)['then'](function(_0x24afb6){var _0xab8736=_0x1a1994[_0x993e('0x26')]()===_0x993e('0x27')?_0x511855[_0x993e('0x28')]:_0x511855[_0x993e('0x29')];var _0x81243c={'method':_0x993e('0xc'),'uri':_0x446aaa+_0x993e('0x2a'),'body':{'telephone1':_0xab8736,'fullname':_0xab8736,'firstname':_0xab8736,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':'/systemusers('+_0x792c06[_0x993e('0x24')]+')'},'headers':{'Authorization':_0x993e('0x1a')+_0x24afb6,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x81243c);})[_0x993e('0x12')](function(_0x4c0fbf){var _0xace281=_0x4c0fbf['headers']['odata-entityid'];var _0x6183d=_0xace281[_0x993e('0x2b')](_0xace281[_0x993e('0x2c')]('(')+0x1,_0xace281[_0x993e('0x2c')](')'));_0x792c06[_0x993e('0x2d')]=_0x6183d;_0x2a13a5(_0x792c06);})[_0x993e('0x14')](function(_0x18788f){_0x276bca(_0x18788f[_0x993e('0x18')]);});});}function getEndUser(_0x23cd77,_0x1c18f3,_0x7b21f9,_0xa4c7bb,_0x4c6ca5,_0x33de03){return new BPromise(function(_0x33eada,_0x254d9d){return getAuthToken(_0x1c18f3,_0x7b21f9,_0x33de03)[_0x993e('0x12')](function(_0x2f017f){var _0x5b8d0e={'method':_0x993e('0x2e'),'uri':_0xa4c7bb+_0x993e('0x2f'),'headers':{'Authorization':_0x993e('0x1a')+_0x2f017f,'If-None-Match':null,'OData-Version':_0x993e('0x1b')},'json':!![]};return rp(_0x5b8d0e);})[_0x993e('0x12')](function(_0xff5133){var _0x155fca=null;if(_0xff5133){var _0x55be07=_0xff5133['value'];var _0xa19d82=![];for(_0x155fca=0x0;_0x155fca<_0x55be07['length'];_0x155fca++){var _0x32ec2c=_0x33de03[_0x993e('0x26')]()==='outbound'?_0x4c6ca5[_0x993e('0x28')]:_0x4c6ca5[_0x993e('0x29')];if(_0x55be07[_0x155fca][_0x993e('0x30')]===_0x32ec2c){_0xa19d82=!![];_0x23cd77['enduserId']=_0x55be07[_0x155fca][_0x993e('0x31')];}}if(_0xa19d82){_0x33eada(_0x23cd77);}else{return createEndUser(_0x23cd77,_0x1c18f3,_0x7b21f9,_0xa4c7bb,_0x4c6ca5,_0x33de03)[_0x993e('0x12')](function(_0x2ed894){logger[_0x993e('0x21')]('['+[_0x33de03['toUpperCase']()]+_0x993e('0x32'),_0x2ed894[_0x993e('0x2d')]);_0x33eada(_0x2ed894);});}}else{return createEndUser(_0x23cd77,_0x1c18f3,_0x7b21f9,_0xa4c7bb,_0x4c6ca5,_0x33de03)['then'](function(_0x48583e){logger[_0x993e('0x21')]('['+[_0x33de03[_0x993e('0x16')]()]+_0x993e('0x33'),_0x48583e[_0x993e('0x2d')]);_0x33eada(_0x48583e);});}});});}function getCustomFields(_0x467bfc,_0x3c2725,_0x119470){var _0xed81b4={};if(_0x467bfc[_0x993e('0x1f')]>0x0){_[_0x993e('0x34')](_0x467bfc,function(_0x571805){if(_0x571805['type']===_0x993e('0x35')&&_0x571805[_0x993e('0x36')]&&!_0x571805[_0x993e('0x37')]){var _0x3d1710=_0x571805[_0x993e('0x38')]['toLowerCase']();var _0x1d68f2=_0x3d1710[_0x993e('0x2b')](0x0,_0x3d1710[_0x993e('0x39')]('_'));var _0x58c690=_0x3d1710[_0x993e('0x2b')](_0x3d1710['indexOf']('_')+0x1);if(_0x1d68f2===_0x119470){_0xed81b4[_0x58c690]=_0x571805[_0x993e('0x3a')];}}});}return _0xed81b4;}function getTicket(_0x1b819a,_0x353d75,_0x162d6f,_0x101ca4,_0x1a7a75,_0x25095b,_0x4a7ba0){return new BPromise(function(_0x57a0c6,_0x13e1e9){var _0xed57a4;return getAuthToken(_0x353d75,_0x162d6f,_0x4a7ba0)['then'](function(_0x2afc7b){if(_0x25095b[_0x993e('0x3b')]===_0x993e('0x3c')){_0xed57a4={'method':_0x993e('0xc'),'uri':_0x101ca4+_0x993e('0x3d'),'body':Object['assign']({},{'title':intUtil[_0x993e('0x3e')](_0x25095b[_0x993e('0x3f')],_0x1a7a75,'\x20'),'description':intUtil[_0x993e('0x3e')](_0x25095b[_0x993e('0x40')],_0x1a7a75,'\x0a'),'customerid_contact@odata.bind':_0x993e('0x41')+_0x1b819a[_0x993e('0x2d')]+')','ownerid@odata.bind':'/systemusers('+_0x1b819a['userId']+')','caseorigincode':'1'},getCustomFields(_0x25095b[_0x993e('0x42')],_0x1a7a75,_0x25095b[_0x993e('0x3b')])),'headers':{'Authorization':'Bearer\x20'+_0x2afc7b,'OData-Version':_0x993e('0x1b')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x25095b[_0x993e('0x3b')]===_0x993e('0x43')){_0xed57a4={'method':_0x993e('0xc'),'uri':_0x101ca4+_0x993e('0x44'),'body':Object[_0x993e('0x45')]({},{'subject':intUtil[_0x993e('0x3e')](_0x25095b['Subjects'],_0x1a7a75,'\x20'),'phonenumber':String(_0x1a7a75['calleridnum']),'description':intUtil[_0x993e('0x3e')](_0x25095b[_0x993e('0x40')],_0x1a7a75,'\x0a'),'regardingobjectid_contact@odata.bind':_0x993e('0x41')+_0x1b819a[_0x993e('0x2d')]+')','ownerid@odata.bind':_0x993e('0x46')+_0x1b819a[_0x993e('0x24')]+')','directioncode':_0x1b819a[_0x993e('0x47')]===_0x993e('0x48')?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':'/systemusers('+_0x1b819a[_0x993e('0x24')]+')','participationtypemask':_0x1b819a[_0x993e('0x47')]===_0x993e('0x48')?0x2:0x1},{'partyid_contact@odata.bind':_0x993e('0x41')+_0x1b819a[_0x993e('0x2d')]+')','participationtypemask':_0x1b819a['callDirection']===_0x993e('0x48')?0x1:0x2}]},getCustomFields(_0x25095b[_0x993e('0x42')],_0x1a7a75,_0x25095b[_0x993e('0x3b')])),'headers':{'Authorization':_0x993e('0x1a')+_0x2afc7b,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0xed57a4);})[_0x993e('0x12')](function(_0x58805f){var _0x2f01e2=_0x58805f['headers'][_0x993e('0x49')];var _0x436c00=_0x2f01e2[_0x993e('0x2b')](_0x2f01e2[_0x993e('0x2c')]('(')+0x1,_0x2f01e2['lastIndexOf'](')'));_0x1b819a[_0x993e('0x4a')]=_0x436c00;_0x57a0c6(_0x1b819a);})['catch'](function(_0x40d493){_0x13e1e9(_0x40d493[_0x993e('0x18')]);});});}function emit(_0x46d40a,_0x29191a,_0x50ecea,_0x55f75c){var _0xaee62a={'uri':util['format'](_0x993e('0x4b'),_0x46d40a,_0x50ecea,_0x55f75c)};io['to'](util[_0x993e('0x4c')](_0x993e('0x4d'),_0x29191a))[_0x993e('0x4e')](_0x993e('0x4f'),_0xaee62a);}exports['cs']=function(_0x3d5c69,_0x248f0f,_0x3bb204,_0x34b91e,_0x28e70b,_0x5ee32f,_0x1b974a,_0x11eb7a){var _0x1dc87a={};_0x5ee32f[_0x993e('0xe')]=intUtil[_0x993e('0x50')](_0x5ee32f[_0x993e('0xe')]);_0x5ee32f[_0x993e('0x51')]=intUtil[_0x993e('0x50')](_0x5ee32f[_0x993e('0x51')]);_0x1dc87a[_0x993e('0x47')]=_0x11eb7a===_0x993e('0x48')||_0x11eb7a===_0x993e('0x52')?_0x993e('0x48'):'outbound';var _0x2c2438=util[_0x993e('0x4c')](_0x993e('0x53'),_0x5ee32f[_0x993e('0xe')]);var _0x2af59f=util[_0x993e('0x4c')](_0x993e('0x54'),_0x5ee32f['tenantId']);var _0x14e4da=util[_0x993e('0x4c')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x5ee32f['serverUrl'],_0x248f0f[_0x993e('0x55')],md5(_0x248f0f[_0x993e('0x55')]));if(_0x28e70b&&_0x28e70b[_0x993e('0x56')]){logger['info']('[QUEUE]',_0x993e('0x57'));_0x248f0f[_0x993e('0x58')]=_0x14e4da;}else if(_0x1b974a&&_0x1b974a[_0x993e('0x59')]&&_0x1b974a[_0x993e('0x59')]!==_0x993e('0x5a')){logger['info'](_0x993e('0x5b'),_0x993e('0x57'));_0x248f0f[_0x993e('0x58')]=_0x14e4da;}else{_0x248f0f[_0x993e('0x58')]='';}return getUser(_0x1dc87a,_0x5ee32f,_0x34b91e,_0x2af59f,_0x2c2438,_0x11eb7a)['then'](function(_0x563ead){logger['info']('['+_0x11eb7a[_0x993e('0x16')]()+_0x993e('0x5c'),_0x563ead['userId']);logger[_0x993e('0x21')]('['+_0x11eb7a['toUpperCase']()+_0x993e('0x5d'),_0x563ead[_0x993e('0x1e')]);return getEndUser(_0x563ead,_0x5ee32f,_0x2af59f,_0x2c2438,_0x248f0f,_0x11eb7a);})['then'](function(_0x5cdaa7){logger['info']('['+_0x11eb7a[_0x993e('0x16')]()+_0x993e('0x5e'),_0x5cdaa7['enduserId']);logger[_0x993e('0x21')]('['+_0x11eb7a[_0x993e('0x16')]()+_0x993e('0x5f'),_0x248f0f[_0x993e('0x29')]);return getTicket(_0x5cdaa7,_0x5ee32f,_0x2af59f,_0x2c2438,_0x248f0f,_0x3bb204,_0x11eb7a);})['then'](function(_0x5646cd){logger['info'](util[_0x993e('0x4c')]('['+_0x11eb7a[_0x993e('0x16')]()+_0x993e('0x60'),_0x3bb204['ticketType'],_0x5646cd['ticketId']));logger['info'](util['format']('['+_0x11eb7a[_0x993e('0x16')]()+_0x993e('0x61'),_0x11eb7a));if(_0x11eb7a!==_0x993e('0x52')){logger[_0x993e('0x21')]('['+_0x11eb7a[_0x993e('0x16')]()+']',_0x993e('0x62'));emit(_0x5ee32f['remoteUri'],_0x34b91e[_0x993e('0x63')],_0x3bb204[_0x993e('0x3b')],_0x5646cd[_0x993e('0x4a')]);}})['catch'](function(_0x551faf){logger[_0x993e('0x15')]('['+_0x11eb7a['toUpperCase']()+_0x993e('0x64'),util['inspect'](_0x551faf,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0x4e86=['message','then','Bearer\x20','4.0','isNil','validateEmail','userEmail','email','length','internalemailaddress','isdisabled','info',']\x20Agent\x20found\x20','userId','systemuserid',']\x20Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','toLowerCase','outbound','destcalleridnum','calleridnum','contacts','/systemusers(','headers','odata-entityid','substring','contacts?$select=telephone1','telephone1','enduserId','contactid',']\x20Enduser\x20created!',']\x20Enduser\x20Created!','forEach','nameField','indexOf','content','ticketType','incident','incidents','assign','getString','Subjects','/contacts(','Fields','phonecall','phonecalls','callDirection','queue','lastIndexOf','ticketId','format','emit','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]','recordingURL','recordingFormat','none','[OUTBOUND]','Recording\x20is\x20enabled!',']\x20The\x20User\x20ID\x20is:',']\x20The\x20User\x20email\x20is:',']\x20The\x20Enduser\x20phone\x20is:',']\x20Call\x20direction:\x20%s','abandoned','Displaying\x20call\x20in\x20a\x20new\x20tab...','name','error',']\x20Error\x20running\x20Dynamics365\x20integration','inspect','lodash','bluebird','request-promise','./util','md5','../../../../config/logger','dynamics365','redis','defaults','socket.io-emitter','POST','clientId','remoteUri','username','password','clientSecret','access_token','catch','toUpperCase',']\x20Wrong\x20credentials!'];(function(_0x4216ba,_0x5739c5){var _0x2592ca=function(_0x58ecea){while(--_0x58ecea){_0x4216ba['push'](_0x4216ba['shift']());}};_0x2592ca(++_0x5739c5);}(_0x4e86,0x109));var _0x64e8=function(_0x38694a,_0x3384e8){_0x38694a=_0x38694a-0x0;var _0x106c3d=_0x4e86[_0x38694a];return _0x106c3d;};'use strict';var _=require(_0x64e8('0x0'));var BPromise=require(_0x64e8('0x1'));var rp=require(_0x64e8('0x2'));var util=require('util');var intUtil=require(_0x64e8('0x3'));var md5=require(_0x64e8('0x4'));var Redis=require('ioredis');var logger=require(_0x64e8('0x5'))(_0x64e8('0x6'));var config=require('../../../../config/environment');config[_0x64e8('0x7')]=_[_0x64e8('0x8')](config[_0x64e8('0x7')],{'host':'localhost','port':0x18eb});var io=require(_0x64e8('0x9'))(new Redis(config[_0x64e8('0x7')]));function getAuthToken(_0x2e7866,_0x294330,_0x3e5108){var _0x373113={'method':_0x64e8('0xa'),'uri':_0x294330,'form':{'client_id':_0x2e7866[_0x64e8('0xb')],'resource':_0x2e7866[_0x64e8('0xc')],'username':_0x2e7866[_0x64e8('0xd')],'password':_0x2e7866[_0x64e8('0xe')],'grant_type':'password','client_secret':_0x2e7866[_0x64e8('0xf')]},'json':!![]};return rp(_0x373113)['then'](function(_0x1e3ff0){return _0x1e3ff0[_0x64e8('0x10')];})[_0x64e8('0x11')](function(_0x8cf276){logger['error']('['+[_0x3e5108[_0x64e8('0x12')]()]+_0x64e8('0x13'));return _0x8cf276[_0x64e8('0x14')];});}function getUser(_0x2a027c,_0x3a57a0,_0x52c85b,_0x55ad7c,_0x51d202,_0x29f17a){return new BPromise(function(_0x5af7ea,_0x295f7c){return getAuthToken(_0x3a57a0,_0x55ad7c,_0x29f17a)[_0x64e8('0x15')](function(_0x30967d){var _0x1442af={'method':'GET','uri':_0x51d202+'systemusers?$select=internalemailaddress,isdisabled,systemuserid','headers':{'Authorization':_0x64e8('0x16')+_0x30967d,'OData-Version':_0x64e8('0x17')},'json':!![]};return rp(_0x1442af);})[_0x64e8('0x15')](function(_0x43cd75){var _0x1bf21c=_0x43cd75['value'];var _0x4abc18=![];var _0x27b794=null;if(!_[_0x64e8('0x18')](_0x52c85b)){if(intUtil[_0x64e8('0x19')](_0x52c85b['email'])){_0x2a027c[_0x64e8('0x1a')]=_0x52c85b[_0x64e8('0x1b')];for(_0x27b794=0x0;_0x27b794<_0x1bf21c[_0x64e8('0x1c')];_0x27b794++){if(_0x1bf21c[_0x27b794][_0x64e8('0x1d')]===_0x52c85b['email']&&!_0x1bf21c[_0x27b794][_0x64e8('0x1e')]){_0x4abc18=!![];logger[_0x64e8('0x1f')]('['+[_0x29f17a[_0x64e8('0x12')]()]+_0x64e8('0x20')+_0x1bf21c[_0x27b794]['systemuserid']+'!');_0x2a027c[_0x64e8('0x21')]=_0x1bf21c[_0x27b794][_0x64e8('0x22')];}}}}if(!_0x4abc18){logger[_0x64e8('0x1f')]('['+[_0x29f17a[_0x64e8('0x12')]()]+_0x64e8('0x23'));_0x2a027c[_0x64e8('0x1a')]=_0x3a57a0[_0x64e8('0xd')];for(_0x27b794=0x0;_0x27b794<_0x1bf21c[_0x64e8('0x1c')];_0x27b794++){if(_0x1bf21c[_0x27b794][_0x64e8('0x1d')]===_0x3a57a0[_0x64e8('0xd')]){_0x2a027c[_0x64e8('0x21')]=_0x1bf21c[_0x27b794][_0x64e8('0x22')];}}}_0x5af7ea(_0x2a027c);})[_0x64e8('0x11')](function(_0x4e637d){_0x295f7c(_0x4e637d[_0x64e8('0x14')]);});});}function createEndUser(_0x4c6f5b,_0x2ce21d,_0x2106c3,_0x4660b6,_0x26dd37,_0x16f8c7){return new BPromise(function(_0x43710b,_0x598c76){return getAuthToken(_0x2ce21d,_0x2106c3,_0x16f8c7)[_0x64e8('0x15')](function(_0x3adf84){var _0x58efea=_0x16f8c7[_0x64e8('0x24')]()===_0x64e8('0x25')?_0x26dd37[_0x64e8('0x26')]:_0x26dd37[_0x64e8('0x27')];var _0x47064c={'method':'POST','uri':_0x4660b6+_0x64e8('0x28'),'body':{'telephone1':_0x58efea,'fullname':_0x58efea,'firstname':_0x58efea,'lastname':'_','mobilephone':null,'address1_telephone1':null,'ownerid@odata.bind':_0x64e8('0x29')+_0x4c6f5b[_0x64e8('0x21')]+')'},'headers':{'Authorization':'Bearer\x20'+_0x3adf84,'OData-Version':_0x64e8('0x17')},'json':!![],'resolveWithFullResponse':!![]};return rp(_0x47064c);})['then'](function(_0x5440c8){var _0x31c8ce=_0x5440c8[_0x64e8('0x2a')][_0x64e8('0x2b')];var _0x1fef7d=_0x31c8ce[_0x64e8('0x2c')](_0x31c8ce['lastIndexOf']('(')+0x1,_0x31c8ce['lastIndexOf'](')'));_0x4c6f5b['enduserId']=_0x1fef7d;_0x43710b(_0x4c6f5b);})[_0x64e8('0x11')](function(_0x1c49dd){_0x598c76(_0x1c49dd['message']);});});}function getEndUser(_0x511aeb,_0xd9477a,_0x151eef,_0x336708,_0x4b5906,_0x1a6459){return new BPromise(function(_0x281ecb,_0x1164e4){return getAuthToken(_0xd9477a,_0x151eef,_0x1a6459)['then'](function(_0x2908a8){var _0x5d391a={'method':'GET','uri':_0x336708+_0x64e8('0x2d'),'headers':{'Authorization':_0x64e8('0x16')+_0x2908a8,'If-None-Match':null,'OData-Version':'4.0'},'json':!![]};return rp(_0x5d391a);})[_0x64e8('0x15')](function(_0x10babb){var _0x707655=null;if(_0x10babb){var _0x574897=_0x10babb['value'];var _0x28a5e8=![];for(_0x707655=0x0;_0x707655<_0x574897['length'];_0x707655++){var _0x14d81e=_0x1a6459[_0x64e8('0x24')]()==='outbound'?_0x4b5906['destcalleridnum']:_0x4b5906[_0x64e8('0x27')];if(_0x574897[_0x707655][_0x64e8('0x2e')]===_0x14d81e){_0x28a5e8=!![];_0x511aeb[_0x64e8('0x2f')]=_0x574897[_0x707655][_0x64e8('0x30')];}}if(_0x28a5e8){_0x281ecb(_0x511aeb);}else{return createEndUser(_0x511aeb,_0xd9477a,_0x151eef,_0x336708,_0x4b5906,_0x1a6459)[_0x64e8('0x15')](function(_0x37ac94){logger['info']('['+[_0x1a6459[_0x64e8('0x12')]()]+_0x64e8('0x31'),_0x37ac94[_0x64e8('0x2f')]);_0x281ecb(_0x37ac94);});}}else{return createEndUser(_0x511aeb,_0xd9477a,_0x151eef,_0x336708,_0x4b5906,_0x1a6459)[_0x64e8('0x15')](function(_0x2db3eb){logger[_0x64e8('0x1f')]('['+[_0x1a6459['toUpperCase']()]+_0x64e8('0x32'),_0x2db3eb[_0x64e8('0x2f')]);_0x281ecb(_0x2db3eb);});}});});}function getCustomFields(_0x556656,_0x1ba2de,_0x130b14){var _0x43a209={};if(_0x556656[_0x64e8('0x1c')]>0x0){_[_0x64e8('0x33')](_0x556656,function(_0x5db728){if(_0x5db728['type']==='string'&&_0x5db728[_0x64e8('0x34')]&&!_0x5db728['customField']){var _0x5f2f56=_0x5db728['idField'][_0x64e8('0x24')]();var _0x7ff90a=_0x5f2f56[_0x64e8('0x2c')](0x0,_0x5f2f56[_0x64e8('0x35')]('_'));var _0x5b5a22=_0x5f2f56[_0x64e8('0x2c')](_0x5f2f56[_0x64e8('0x35')]('_')+0x1);if(_0x7ff90a===_0x130b14){_0x43a209[_0x5b5a22]=_0x5db728[_0x64e8('0x36')];}}});}return _0x43a209;}function getTicket(_0x593f7,_0x592f21,_0x40fb1d,_0x4cc121,_0x58a19e,_0x1119b8,_0x318788){return new BPromise(function(_0x2f792f,_0x2c67f5){var _0x436c80;return getAuthToken(_0x592f21,_0x40fb1d,_0x318788)[_0x64e8('0x15')](function(_0x4b3756){if(_0x1119b8[_0x64e8('0x37')]===_0x64e8('0x38')){_0x436c80={'method':_0x64e8('0xa'),'uri':_0x4cc121+_0x64e8('0x39'),'body':Object[_0x64e8('0x3a')]({},{'title':intUtil[_0x64e8('0x3b')](_0x1119b8[_0x64e8('0x3c')],_0x58a19e,'\x20'),'description':intUtil[_0x64e8('0x3b')](_0x1119b8['Descriptions'],_0x58a19e,'\x0a'),'customerid_contact@odata.bind':_0x64e8('0x3d')+_0x593f7[_0x64e8('0x2f')]+')','ownerid@odata.bind':_0x64e8('0x29')+_0x593f7['userId']+')','caseorigincode':'1'},getCustomFields(_0x1119b8[_0x64e8('0x3e')],_0x58a19e,_0x1119b8[_0x64e8('0x37')])),'headers':{'Authorization':_0x64e8('0x16')+_0x4b3756,'OData-Version':_0x64e8('0x17')},'json':!![],'resolveWithFullResponse':!![]};}if(_0x1119b8[_0x64e8('0x37')]===_0x64e8('0x3f')){_0x436c80={'method':_0x64e8('0xa'),'uri':_0x4cc121+_0x64e8('0x40'),'body':Object[_0x64e8('0x3a')]({},{'subject':intUtil[_0x64e8('0x3b')](_0x1119b8[_0x64e8('0x3c')],_0x58a19e,'\x20'),'phonenumber':String(_0x58a19e['calleridnum']),'description':intUtil[_0x64e8('0x3b')](_0x1119b8['Descriptions'],_0x58a19e,'\x0a'),'regardingobjectid_contact@odata.bind':_0x64e8('0x3d')+_0x593f7['enduserId']+')','ownerid@odata.bind':_0x64e8('0x29')+_0x593f7[_0x64e8('0x21')]+')','directioncode':_0x593f7[_0x64e8('0x41')]==='queue'?![]:!![],'phonecall_activity_parties':[{'partyid_systemuser@odata.bind':'/systemusers('+_0x593f7['userId']+')','participationtypemask':_0x593f7[_0x64e8('0x41')]==='queue'?0x2:0x1},{'partyid_contact@odata.bind':_0x64e8('0x3d')+_0x593f7[_0x64e8('0x2f')]+')','participationtypemask':_0x593f7[_0x64e8('0x41')]===_0x64e8('0x42')?0x1:0x2}]},getCustomFields(_0x1119b8[_0x64e8('0x3e')],_0x58a19e,_0x1119b8[_0x64e8('0x37')])),'headers':{'Authorization':_0x64e8('0x16')+_0x4b3756,'OData-Version':'4.0'},'json':!![],'resolveWithFullResponse':!![]};}return rp(_0x436c80);})[_0x64e8('0x15')](function(_0x3fc0d8){var _0x2301f7=_0x3fc0d8[_0x64e8('0x2a')][_0x64e8('0x2b')];var _0x1b4eb7=_0x2301f7[_0x64e8('0x2c')](_0x2301f7['lastIndexOf']('(')+0x1,_0x2301f7[_0x64e8('0x43')](')'));_0x593f7[_0x64e8('0x44')]=_0x1b4eb7;_0x2f792f(_0x593f7);})[_0x64e8('0x11')](function(_0x38739e){_0x2c67f5(_0x38739e['message']);});});}function emit(_0x44e55c,_0x475b5e,_0x2a7bfe,_0x47403a){var _0x23a515={'uri':util[_0x64e8('0x45')]('%s/main.aspx?pagetype=entityrecord&etn=%s&id=%s',_0x44e55c,_0x2a7bfe,_0x47403a)};io['to'](util['format']('user:%s',_0x475b5e))[_0x64e8('0x46')]('trigger:browser:url',_0x23a515);}exports['cs']=function(_0x1cd170,_0x3dbc4e,_0x264820,_0x15a005,_0x2e6b74,_0x2cbb6b,_0x43b95,_0x43d051){var _0x47d6aa={};_0x2cbb6b[_0x64e8('0xc')]=intUtil[_0x64e8('0x47')](_0x2cbb6b['remoteUri']);_0x2cbb6b[_0x64e8('0x48')]=intUtil[_0x64e8('0x47')](_0x2cbb6b[_0x64e8('0x48')]);_0x47d6aa['callDirection']=_0x43d051===_0x64e8('0x42')||_0x43d051==='abandoned'?_0x64e8('0x42'):_0x64e8('0x25');var _0x1522f4=util['format'](_0x64e8('0x49'),_0x2cbb6b[_0x64e8('0xc')]);var _0x877e06=util[_0x64e8('0x45')](_0x64e8('0x4a'),_0x2cbb6b[_0x64e8('0x4b')]);var _0x22be35=util[_0x64e8('0x45')](_0x64e8('0x4c'),_0x2cbb6b['serverUrl'],_0x3dbc4e[_0x64e8('0x4d')],md5(_0x3dbc4e[_0x64e8('0x4d')]));if(_0x2e6b74&&_0x2e6b74[_0x64e8('0x4e')]){logger['info'](_0x64e8('0x4f'),'Recording\x20is\x20enabled!');_0x3dbc4e[_0x64e8('0x50')]=_0x22be35;}else if(_0x43b95&&_0x43b95[_0x64e8('0x51')]&&_0x43b95['recordingFormat']!==_0x64e8('0x52')){logger['info'](_0x64e8('0x53'),_0x64e8('0x54'));_0x3dbc4e['recordingURL']=_0x22be35;}else{_0x3dbc4e[_0x64e8('0x50')]='';}return getUser(_0x47d6aa,_0x2cbb6b,_0x15a005,_0x877e06,_0x1522f4,_0x43d051)[_0x64e8('0x15')](function(_0x3abbc6){logger[_0x64e8('0x1f')]('['+_0x43d051[_0x64e8('0x12')]()+_0x64e8('0x55'),_0x3abbc6[_0x64e8('0x21')]);logger[_0x64e8('0x1f')]('['+_0x43d051['toUpperCase']()+_0x64e8('0x56'),_0x3abbc6['userEmail']);return getEndUser(_0x3abbc6,_0x2cbb6b,_0x877e06,_0x1522f4,_0x3dbc4e,_0x43d051);})['then'](function(_0x5a1d81){logger[_0x64e8('0x1f')]('['+_0x43d051[_0x64e8('0x12')]()+']\x20The\x20Enduser\x20ID\x20is:',_0x5a1d81[_0x64e8('0x2f')]);logger['info']('['+_0x43d051[_0x64e8('0x12')]()+_0x64e8('0x57'),_0x3dbc4e[_0x64e8('0x27')]);return getTicket(_0x5a1d81,_0x2cbb6b,_0x877e06,_0x1522f4,_0x3dbc4e,_0x264820,_0x43d051);})[_0x64e8('0x15')](function(_0x32c15f){logger['info'](util[_0x64e8('0x45')]('['+_0x43d051[_0x64e8('0x12')]()+']\x20The\x20%s\x20ID\x20is:\x20%s',_0x264820[_0x64e8('0x37')],_0x32c15f['ticketId']));logger[_0x64e8('0x1f')](util[_0x64e8('0x45')]('['+_0x43d051[_0x64e8('0x12')]()+_0x64e8('0x58'),_0x43d051));if(_0x43d051!==_0x64e8('0x59')){logger[_0x64e8('0x1f')]('['+_0x43d051[_0x64e8('0x12')]()+']',_0x64e8('0x5a'));emit(_0x2cbb6b[_0x64e8('0xc')],_0x15a005[_0x64e8('0x5b')],_0x264820[_0x64e8('0x37')],_0x32c15f['ticketId']);}})['catch'](function(_0xf7de5c){logger[_0x64e8('0x5c')]('['+_0x43d051[_0x64e8('0x12')]()+_0x64e8('0x5d'),util[_0x64e8('0x5e')](_0xf7de5c,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index 4cb0183..c26613c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9c75=['info','merge','format','Caller\x20-\x20%s','calleridname','Subjects','getString','Descriptions','<br>','Tags','name','Fields','custom_fields','value','%s/api/v2/tickets','remoteUri','POST','then','validateEmail','%s/api/v2/agents','find','contact','email','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','Admin\x20account\x20selected.','Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!','%s/api/v2/contacts','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Enduser\x20created.','Basic\x20%s','apiKey','toString','debug','[HTTP]','stringify','GET','length','map','forEach','type','string','customField','toLowerCase','push','idField','content','variableName','customVariable','Variable','stripTrailingSlash','serverUrl','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','uniqueid','Authorization','calleridnum','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/helpdesk/tickets/%d','catch','error','outbound','recordingFormat','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','The\x20User\x20ID\x20is:','destcalleridnum','Ticket\x20created!','abandoned','monitor_format','lodash','request-promise','md5','util','freshdesk','redis','defaults','localhost','socket.io-emitter','application/json','emit'];(function(_0x4ae625,_0xf396d0){var _0x31accf=function(_0x3ded6b){while(--_0x3ded6b){_0x4ae625['push'](_0x4ae625['shift']());}};_0x31accf(++_0xf396d0);}(_0x9c75,0x1a8));var _0x59c7=function(_0x24c2b9,_0x34f57d){_0x24c2b9=_0x24c2b9-0x0;var _0xeee3ea=_0x9c75[_0x24c2b9];return _0xeee3ea;};'use strict';var _=require(_0x59c7('0x0'));var rp=require(_0x59c7('0x1'));var md5=require(_0x59c7('0x2'));var util=require(_0x59c7('0x3'));var Redis=require('ioredis');var intUtil=require('./util');var config=require('../../../../config/environment');var logger=require('../../../../config/logger')(_0x59c7('0x4'));config[_0x59c7('0x5')]=_[_0x59c7('0x6')](config[_0x59c7('0x5')],{'host':_0x59c7('0x7'),'port':0x18eb});var io=require(_0x59c7('0x8'))(new Redis(config[_0x59c7('0x5')]));var headers={'Content-Type':_0x59c7('0x9'),'Accept':_0x59c7('0x9')};function emit(_0x2ec193,_0x47f3dd,_0x29d26b){io['to'](_0x2ec193)[_0x59c7('0xa')](_0x47f3dd,_0x29d26b);}function getTicket(_0x18e9c2,_0x2d0cbe,_0x29051d,_0x5c7cb6,_0x4adf91){logger[_0x59c7('0xb')]('Creating\x20new\x20ticket...');var _0x4ca0e9=_[_0x59c7('0xc')]({'responder_id':_0x2d0cbe['id'],'requester_id':_0x29051d['id'],'name':util[_0x59c7('0xd')](_0x59c7('0xe'),_0x4adf91[_0x59c7('0xf')]),'phone':_0x4adf91['calleridnum'],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil['getString'](_0x5c7cb6[_0x59c7('0x10')],_0x4adf91,'\x20'),'description':intUtil[_0x59c7('0x11')](_0x5c7cb6[_0x59c7('0x12')],_0x4adf91,_0x59c7('0x13')),'tags':getTags(_0x5c7cb6[_0x59c7('0x14')],_0x59c7('0x15'))},getCustomFields(_0x5c7cb6[_0x59c7('0x16')],_0x4adf91));_0x4ca0e9[_0x59c7('0x17')]=_['mapValues'](_['keyBy'](_0x4ca0e9[_0x59c7('0x17')],'id'),_0x59c7('0x18'));return request({'uri':util[_0x59c7('0xd')](_0x59c7('0x19'),_0x18e9c2[_0x59c7('0x1a')]),'method':_0x59c7('0x1b'),'body':_0x4ca0e9})[_0x59c7('0x1c')](function(_0x4d99d7){logger[_0x59c7('0xb')]('Ticket\x20created!');return _0x4d99d7;});}function getUser(_0xfba40e,_0x3172f5){if(intUtil[_0x59c7('0x1d')](_0x3172f5)){return request({'uri':util[_0x59c7('0xd')](_0x59c7('0x1e'),_0xfba40e[_0x59c7('0x1a')]),'qs':{'email':_0x3172f5}})[_0x59c7('0x1c')](function(_0x5de00e){if(_0x5de00e['length']){logger[_0x59c7('0xb')]('Agent\x20found!');return _[_0x59c7('0x1f')](_0x5de00e,function(_0x376442){return _0x376442[_0x59c7('0x20')][_0x59c7('0x21')]===_0x3172f5;});}else{logger[_0x59c7('0xb')](_0x59c7('0x22'));return request({'uri':util[_0x59c7('0xd')](_0x59c7('0x23'),_0xfba40e[_0x59c7('0x1a')])})[_0x59c7('0x1c')](function(_0x579ca5){logger[_0x59c7('0xb')](_0x59c7('0x24'));return _0x579ca5;});}});}else{logger[_0x59c7('0xb')](_0x59c7('0x25'));return request({'uri':util[_0x59c7('0xd')]('%s/api/v2/agents/me',_0xfba40e[_0x59c7('0x1a')])})[_0x59c7('0x1c')](function(_0x54f4c1){logger['info'](_0x59c7('0x24'));return _0x54f4c1;});}}function getEndUser(_0x29d73c,_0x278b32,_0x405c93){logger[_0x59c7('0xb')]('Searching\x20enduser\x20with\x20phone',_0x405c93);return request({'uri':util['format'](_0x59c7('0x26'),_0x29d73c[_0x59c7('0x1a')]),'qs':{'phone':_0x405c93}})['then'](function(_0x26330c){if(_0x26330c['length']){logger[_0x59c7('0xb')]('Enduser\x20found!');return _[_0x59c7('0x1f')](_0x26330c,{'phone':_0x405c93});}else{logger['info'](_0x59c7('0x27'));return request({'uri':util[_0x59c7('0xd')](_0x59c7('0x26'),_0x29d73c[_0x59c7('0x1a')]),'method':'POST','body':{'name':_0x278b32,'phone':_0x405c93}})[_0x59c7('0x1c')](function(_0x297135){logger[_0x59c7('0xb')](_0x59c7('0x28'));return _0x297135;});}});}function getAuth(_0x4ec022){return util[_0x59c7('0xd')](_0x59c7('0x29'),new Buffer(_0x4ec022[_0x59c7('0x2a')]+':X')[_0x59c7('0x2b')]('base64'));}function request(_0x45e0aa){logger[_0x59c7('0x2c')](_0x59c7('0x2d'),JSON[_0x59c7('0x2e')](_0x45e0aa));return rp(_[_0x59c7('0x6')](_0x45e0aa,{'method':_0x59c7('0x2f'),'headers':headers,'json':!![]}));}function getTags(_0x1b129d,_0x20259f){var _0x554e34=[];if(_0x1b129d&&_0x1b129d[_0x59c7('0x30')]>0x0){_0x554e34=_[_0x59c7('0x31')](_0x1b129d,_0x20259f);}return _0x554e34;}function getCustomFields(_0x4cb020,_0x1a99aa){var _0x12c5d1=[];var _0x48ee0e={'custom_fields':[]};if(_0x4cb020[_0x59c7('0x30')]>0x0){_[_0x59c7('0x32')](_0x4cb020,function(_0x331875){if(_0x331875[_0x59c7('0x33')]===_0x59c7('0x34')&&_0x331875['nameField']&&!_0x331875[_0x59c7('0x35')]){_0x48ee0e[_0x331875['nameField'][_0x59c7('0x36')]()]=_0x331875['content']['toString']();}else if(_0x331875[_0x59c7('0x33')]===_0x59c7('0x34')&&_0x331875['idField']&&_0x331875['customField']){_0x48ee0e[_0x59c7('0x17')][_0x59c7('0x37')]({'id':_0x331875[_0x59c7('0x38')],'value':_0x331875[_0x59c7('0x39')][_0x59c7('0x2b')]()});}else if(_0x331875[_0x59c7('0x33')]==='variable'&&_0x331875[_0x59c7('0x3a')]&&_0x331875['idField']&&_0x331875['customField']){_0x1a99aa[_0x331875[_0x59c7('0x3a')]]&&_0x48ee0e['custom_fields'][_0x59c7('0x37')]({'id':_0x331875[_0x59c7('0x38')],'value':_0x1a99aa[_0x331875['variableName']][_0x59c7('0x2b')]()});}else if(_0x331875[_0x59c7('0x33')]===_0x59c7('0x3b')&&_0x331875['Variable']&&_0x331875[_0x59c7('0x3c')][_0x59c7('0x15')]&&_0x331875[_0x59c7('0x38')]&&_0x331875['customField']){_0x1a99aa[_0x331875[_0x59c7('0x3c')][_0x59c7('0x15')][_0x59c7('0x36')]()]&&_0x48ee0e['custom_fields']['push']({'id':_0x331875[_0x59c7('0x38')],'value':_0x1a99aa[_0x331875[_0x59c7('0x3c')][_0x59c7('0x15')][_0x59c7('0x36')]()][_0x59c7('0x2b')]()});}});}return _0x48ee0e;}exports['queue']=function(_0x61a17f,_0x407735,_0xb38122,_0x35ada6,_0x5d735b,_0x3ca526){var _0x22227a,_0x1742ba;_0x3ca526[_0x59c7('0x1a')]=intUtil[_0x59c7('0x3d')](_0x3ca526[_0x59c7('0x1a')]);_0x3ca526[_0x59c7('0x3e')]=intUtil['stripTrailingSlash'](_0x3ca526['serverUrl']);if(_0x5d735b&&_0x5d735b['monitor_format']){logger[_0x59c7('0xb')](_0x59c7('0x3f'),_0x59c7('0x40'));_0x407735[_0x59c7('0x41')]=util[_0x59c7('0xd')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x3ca526['serverUrl'],_0x407735[_0x59c7('0x42')],md5(_0x407735['uniqueid']));}else{_0x407735[_0x59c7('0x41')]='';}headers[_0x59c7('0x43')]=getAuth(_0x3ca526);return getUser(_0x3ca526,_0x35ada6[_0x59c7('0x21')])[_0x59c7('0x1c')](function(_0x1082f4){_0x22227a=_0x1082f4;logger['info']('The\x20User\x20ID\x20is:',_0x22227a['id']);return getEndUser(_0x3ca526,_0x407735['calleridname'],_0x407735[_0x59c7('0x44')]);})['then'](function(_0x1e1792){_0x1742ba=_0x1e1792;logger[_0x59c7('0xb')](_0x59c7('0x45'),_0x1742ba['id']);return getTicket(_0x3ca526,_0x22227a,_0x1742ba,_0xb38122,_0x407735);})[_0x59c7('0x1c')](function(_0x4eafb1){if(_0x4eafb1&&_0x4eafb1['id']){logger[_0x59c7('0xb')]('Ticket\x20created!');logger[_0x59c7('0xb')](_0x59c7('0x46'),_0x4eafb1['id']);logger[_0x59c7('0xb')](_0x59c7('0x3f'),_0x59c7('0x47'));emit(util[_0x59c7('0xd')](_0x59c7('0x48'),_0x35ada6[_0x59c7('0x15')]),_0x59c7('0x49'),{'uri':util[_0x59c7('0xd')](_0x59c7('0x4a'),_0x3ca526[_0x59c7('0x1a')],_0x4eafb1['id'])});}})[_0x59c7('0x4b')](function(_0x42dbe8){logger[_0x59c7('0x4c')]('[QUEUE]',JSON[_0x59c7('0x2e')](_0x42dbe8));});};exports[_0x59c7('0x4d')]=function(_0x48f72d,_0x3e1011,_0x4f71fa,_0x1f2734,_0x4cda27,_0x3305d2,_0x6f9122){var _0x1dc3df,_0x266d83;_0x3305d2[_0x59c7('0x1a')]=intUtil[_0x59c7('0x3d')](_0x3305d2['remoteUri']);_0x3305d2[_0x59c7('0x3e')]=intUtil[_0x59c7('0x3d')](_0x3305d2['serverUrl']);if(_0x6f9122&&_0x6f9122[_0x59c7('0x4e')]&&_0x6f9122[_0x59c7('0x4e')]!==_0x59c7('0x4f')){logger['info'](_0x59c7('0x50'),_0x59c7('0x40'));_0x3e1011['recordingURL']=util['format'](_0x59c7('0x51'),_0x3305d2[_0x59c7('0x3e')],_0x3e1011[_0x59c7('0x42')],md5(_0x3e1011[_0x59c7('0x42')]));}headers[_0x59c7('0x43')]=getAuth(_0x3305d2);return getUser(_0x3305d2,_0x1f2734['email'])['then'](function(_0x1f3271){_0x1dc3df=_0x1f3271;logger[_0x59c7('0xb')](_0x59c7('0x52'),_0x1dc3df['id']);return getEndUser(_0x3305d2,_0x3e1011['destcalleridname'],_0x3e1011[_0x59c7('0x53')]);})[_0x59c7('0x1c')](function(_0x2bdb60){_0x266d83=_0x2bdb60;logger[_0x59c7('0xb')](_0x59c7('0x45'),_0x266d83['id']);return getTicket(_0x3305d2,_0x1dc3df,_0x266d83,_0x4f71fa,_0x3e1011);})['then'](function(_0xf01cc3){if(_0xf01cc3&&_0xf01cc3['id']){logger['info'](_0x59c7('0x54'));logger[_0x59c7('0xb')](_0x59c7('0x46'),_0xf01cc3['id']);logger[_0x59c7('0xb')](_0x59c7('0x50'),_0x59c7('0x47'));emit(util[_0x59c7('0xd')](_0x59c7('0x48'),_0x1f2734[_0x59c7('0x15')]),_0x59c7('0x49'),{'uri':util[_0x59c7('0xd')]('%s/helpdesk/tickets/%d',_0x3305d2[_0x59c7('0x1a')],_0xf01cc3['id'])});}})[_0x59c7('0x4b')](function(_0x2c2e2a){logger['error'](_0x59c7('0x50'),JSON[_0x59c7('0x2e')](_0x2c2e2a));});};exports[_0x59c7('0x55')]=function(_0x229239,_0x17ae3c,_0x53e8ac,_0x5e6101,_0x518bec,_0x5d6fe2){var _0x1accfc,_0x5a6a26;_0x5d6fe2['remoteUri']=intUtil['stripTrailingSlash'](_0x5d6fe2[_0x59c7('0x1a')]);_0x5d6fe2[_0x59c7('0x3e')]=intUtil['stripTrailingSlash'](_0x5d6fe2[_0x59c7('0x3e')]);if(_0x518bec&&_0x518bec[_0x59c7('0x56')]){logger[_0x59c7('0xb')]('[ABANDONED]',_0x59c7('0x40'));_0x17ae3c[_0x59c7('0x41')]=util['format'](_0x59c7('0x51'),_0x5d6fe2['serverUrl'],_0x17ae3c['uniqueid'],md5(_0x17ae3c[_0x59c7('0x42')]));}else{_0x17ae3c[_0x59c7('0x41')]='';}headers[_0x59c7('0x43')]=getAuth(_0x5d6fe2);return getUser(_0x5d6fe2,'')[_0x59c7('0x1c')](function(_0x4bf090){_0x1accfc=_0x4bf090;logger['info']('The\x20User\x20ID\x20is:',_0x1accfc['id']);return getEndUser(_0x5d6fe2,_0x17ae3c[_0x59c7('0xf')],_0x17ae3c[_0x59c7('0x44')]);})[_0x59c7('0x1c')](function(_0xf0a0ab){_0x5a6a26=_0xf0a0ab;logger[_0x59c7('0xb')](_0x59c7('0x45'),_0x5a6a26['id']);return getTicket(_0x5d6fe2,_0x1accfc,_0x5a6a26,_0x53e8ac,_0x17ae3c);})['then'](function(_0x434628){if(_0x434628){logger['info'](_0x59c7('0x54'));logger[_0x59c7('0xb')](_0x59c7('0x46'),_0x434628['id']);}})[_0x59c7('0x4b')](function(_0x58b345){logger[_0x59c7('0x4c')]('[ABANDONED]',JSON[_0x59c7('0x2e')](_0x58b345));});};
\ No newline at end of file
+var _0x81b8=['uniqueid','The\x20Enduser\x20ID\x20is:','The\x20Ticket\x20ID\x20is:','[QUEUE]','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','user:%s','trigger:browser:url','%s/helpdesk/tickets/%d','catch','stringify','recordingFormat','none','[OUTBOUND]','The\x20User\x20ID\x20is:','destcalleridname','destcalleridnum','error','abandoned','[ABANDONED]','Authorization','lodash','request-promise','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','freshdesk','redis','defaults','localhost','socket.io-emitter','emit','Creating\x20new\x20ticket...','format','calleridname','calleridnum','getString','Subjects','<br>','Tags','name','Fields','custom_fields','mapValues','keyBy','value','%s/api/v2/tickets','remoteUri','POST','then','Ticket\x20created!','%s/api/v2/agents','length','info','Agent\x20found!','find','email','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/api/v2/agents/me','Admin\x20account\x20selected.','Searching\x20enduser\x20with\x20phone','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/api/v2/contacts','Enduser\x20created.','Basic\x20%s','apiKey','GET','map','forEach','type','string','nameField','customField','content','push','idField','variableName','toString','customVariable','Variable','toLowerCase','queue','stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s'];(function(_0x50405a,_0x4352ed){var _0x5e753e=function(_0xf05c88){while(--_0xf05c88){_0x50405a['push'](_0x50405a['shift']());}};_0x5e753e(++_0x4352ed);}(_0x81b8,0x6f));var _0x881b=function(_0x211860,_0x177aff){_0x211860=_0x211860-0x0;var _0x11fac0=_0x81b8[_0x211860];return _0x11fac0;};'use strict';var _=require(_0x881b('0x0'));var rp=require(_0x881b('0x1'));var md5=require(_0x881b('0x2'));var util=require(_0x881b('0x3'));var Redis=require(_0x881b('0x4'));var intUtil=require(_0x881b('0x5'));var config=require(_0x881b('0x6'));var logger=require(_0x881b('0x7'))(_0x881b('0x8'));config[_0x881b('0x9')]=_[_0x881b('0xa')](config[_0x881b('0x9')],{'host':_0x881b('0xb'),'port':0x18eb});var io=require(_0x881b('0xc'))(new Redis(config[_0x881b('0x9')]));var headers={'Content-Type':'application/json','Accept':'application/json'};function emit(_0x71e5a1,_0x1b7a56,_0x24b83f){io['to'](_0x71e5a1)[_0x881b('0xd')](_0x1b7a56,_0x24b83f);}function getTicket(_0x2367ab,_0x2cf49e,_0x576423,_0x144897,_0x741d89){logger['info'](_0x881b('0xe'));var _0x248d06=_['merge']({'responder_id':_0x2cf49e['id'],'requester_id':_0x576423['id'],'name':util[_0x881b('0xf')]('Caller\x20-\x20%s',_0x741d89[_0x881b('0x10')]),'phone':_0x741d89[_0x881b('0x11')],'source':0x3,'priority':0x1,'status':0x2,'subject':intUtil[_0x881b('0x12')](_0x144897[_0x881b('0x13')],_0x741d89,'\x20'),'description':intUtil[_0x881b('0x12')](_0x144897['Descriptions'],_0x741d89,_0x881b('0x14')),'tags':getTags(_0x144897[_0x881b('0x15')],_0x881b('0x16'))},getCustomFields(_0x144897[_0x881b('0x17')],_0x741d89));_0x248d06[_0x881b('0x18')]=_[_0x881b('0x19')](_[_0x881b('0x1a')](_0x248d06[_0x881b('0x18')],'id'),_0x881b('0x1b'));return request({'uri':util['format'](_0x881b('0x1c'),_0x2367ab[_0x881b('0x1d')]),'method':_0x881b('0x1e'),'body':_0x248d06})[_0x881b('0x1f')](function(_0x41348c){logger['info'](_0x881b('0x20'));return _0x41348c;});}function getUser(_0x435f80,_0x2666c4){if(intUtil['validateEmail'](_0x2666c4)){return request({'uri':util[_0x881b('0xf')](_0x881b('0x21'),_0x435f80[_0x881b('0x1d')]),'qs':{'email':_0x2666c4}})[_0x881b('0x1f')](function(_0x7e0dac){if(_0x7e0dac[_0x881b('0x22')]){logger[_0x881b('0x23')](_0x881b('0x24'));return _[_0x881b('0x25')](_0x7e0dac,function(_0x4bed10){return _0x4bed10['contact'][_0x881b('0x26')]===_0x2666c4;});}else{logger[_0x881b('0x23')](_0x881b('0x27'));return request({'uri':util[_0x881b('0xf')](_0x881b('0x28'),_0x435f80[_0x881b('0x1d')])})['then'](function(_0x1ea45e){logger[_0x881b('0x23')](_0x881b('0x29'));return _0x1ea45e;});}});}else{logger[_0x881b('0x23')]('Invalid\x20email\x20format,\x20using\x20the\x20admin\x20account!');return request({'uri':util['format'](_0x881b('0x28'),_0x435f80[_0x881b('0x1d')])})[_0x881b('0x1f')](function(_0x3755fe){logger['info'](_0x881b('0x29'));return _0x3755fe;});}}function getEndUser(_0x5b899a,_0x263b06,_0x2ec8f6){logger[_0x881b('0x23')](_0x881b('0x2a'),_0x2ec8f6);return request({'uri':util['format']('%s/api/v2/contacts',_0x5b899a[_0x881b('0x1d')]),'qs':{'phone':_0x2ec8f6}})['then'](function(_0x21cf59){if(_0x21cf59[_0x881b('0x22')]){logger[_0x881b('0x23')](_0x881b('0x2b'));return _['find'](_0x21cf59,{'phone':_0x2ec8f6});}else{logger[_0x881b('0x23')](_0x881b('0x2c'));return request({'uri':util['format'](_0x881b('0x2d'),_0x5b899a[_0x881b('0x1d')]),'method':_0x881b('0x1e'),'body':{'name':_0x263b06,'phone':_0x2ec8f6}})[_0x881b('0x1f')](function(_0x320ce2){logger[_0x881b('0x23')](_0x881b('0x2e'));return _0x320ce2;});}});}function getAuth(_0x5ee581){return util[_0x881b('0xf')](_0x881b('0x2f'),new Buffer(_0x5ee581[_0x881b('0x30')]+':X')['toString']('base64'));}function request(_0x5a582b){logger['debug']('[HTTP]',JSON['stringify'](_0x5a582b));return rp(_[_0x881b('0xa')](_0x5a582b,{'method':_0x881b('0x31'),'headers':headers,'json':!![]}));}function getTags(_0x255695,_0x418460){var _0x3c1a33=[];if(_0x255695&&_0x255695[_0x881b('0x22')]>0x0){_0x3c1a33=_[_0x881b('0x32')](_0x255695,_0x418460);}return _0x3c1a33;}function getCustomFields(_0x424a3b,_0x30d6fb){var _0x55953b=[];var _0x381b69={'custom_fields':[]};if(_0x424a3b[_0x881b('0x22')]>0x0){_[_0x881b('0x33')](_0x424a3b,function(_0x5adf30){if(_0x5adf30[_0x881b('0x34')]===_0x881b('0x35')&&_0x5adf30[_0x881b('0x36')]&&!_0x5adf30[_0x881b('0x37')]){_0x381b69[_0x5adf30[_0x881b('0x36')]['toLowerCase']()]=_0x5adf30[_0x881b('0x38')]['toString']();}else if(_0x5adf30[_0x881b('0x34')]===_0x881b('0x35')&&_0x5adf30['idField']&&_0x5adf30[_0x881b('0x37')]){_0x381b69[_0x881b('0x18')][_0x881b('0x39')]({'id':_0x5adf30['idField'],'value':_0x5adf30[_0x881b('0x38')]['toString']()});}else if(_0x5adf30['type']==='variable'&&_0x5adf30['variableName']&&_0x5adf30[_0x881b('0x3a')]&&_0x5adf30[_0x881b('0x37')]){_0x30d6fb[_0x5adf30[_0x881b('0x3b')]]&&_0x381b69['custom_fields'][_0x881b('0x39')]({'id':_0x5adf30[_0x881b('0x3a')],'value':_0x30d6fb[_0x5adf30['variableName']][_0x881b('0x3c')]()});}else if(_0x5adf30[_0x881b('0x34')]===_0x881b('0x3d')&&_0x5adf30[_0x881b('0x3e')]&&_0x5adf30['Variable'][_0x881b('0x16')]&&_0x5adf30[_0x881b('0x3a')]&&_0x5adf30[_0x881b('0x37')]){_0x30d6fb[_0x5adf30['Variable'][_0x881b('0x16')]['toLowerCase']()]&&_0x381b69[_0x881b('0x18')][_0x881b('0x39')]({'id':_0x5adf30[_0x881b('0x3a')],'value':_0x30d6fb[_0x5adf30['Variable']['name'][_0x881b('0x3f')]()][_0x881b('0x3c')]()});}});}return _0x381b69;}exports[_0x881b('0x40')]=function(_0x226273,_0x35f0d6,_0x1fc004,_0x24a3f6,_0x15f24e,_0x39ae55){var _0x22c9d8,_0x20e789;_0x39ae55[_0x881b('0x1d')]=intUtil[_0x881b('0x41')](_0x39ae55[_0x881b('0x1d')]);_0x39ae55['serverUrl']=intUtil['stripTrailingSlash'](_0x39ae55[_0x881b('0x42')]);if(_0x15f24e&&_0x15f24e[_0x881b('0x43')]){logger[_0x881b('0x23')]('[QUEUE]',_0x881b('0x44'));_0x35f0d6[_0x881b('0x45')]=util[_0x881b('0xf')](_0x881b('0x46'),_0x39ae55[_0x881b('0x42')],_0x35f0d6[_0x881b('0x47')],md5(_0x35f0d6[_0x881b('0x47')]));}else{_0x35f0d6['recordingURL']='';}headers['Authorization']=getAuth(_0x39ae55);return getUser(_0x39ae55,_0x24a3f6[_0x881b('0x26')])['then'](function(_0x1ddea8){_0x22c9d8=_0x1ddea8;logger['info']('The\x20User\x20ID\x20is:',_0x22c9d8['id']);return getEndUser(_0x39ae55,_0x35f0d6['calleridname'],_0x35f0d6[_0x881b('0x11')]);})[_0x881b('0x1f')](function(_0x681286){_0x20e789=_0x681286;logger[_0x881b('0x23')](_0x881b('0x48'),_0x20e789['id']);return getTicket(_0x39ae55,_0x22c9d8,_0x20e789,_0x1fc004,_0x35f0d6);})['then'](function(_0x5787d6){if(_0x5787d6&&_0x5787d6['id']){logger[_0x881b('0x23')]('Ticket\x20created!');logger['info'](_0x881b('0x49'),_0x5787d6['id']);logger['info'](_0x881b('0x4a'),_0x881b('0x4b'));emit(util['format'](_0x881b('0x4c'),_0x24a3f6[_0x881b('0x16')]),_0x881b('0x4d'),{'uri':util[_0x881b('0xf')](_0x881b('0x4e'),_0x39ae55[_0x881b('0x1d')],_0x5787d6['id'])});}})[_0x881b('0x4f')](function(_0x1c7509){logger['error'](_0x881b('0x4a'),JSON[_0x881b('0x50')](_0x1c7509));});};exports['outbound']=function(_0x42373b,_0x9b20cf,_0x11d253,_0x51645e,_0x10c601,_0x3b084e,_0x1fad4c){var _0x545c91,_0x287d9f;_0x3b084e[_0x881b('0x1d')]=intUtil[_0x881b('0x41')](_0x3b084e[_0x881b('0x1d')]);_0x3b084e[_0x881b('0x42')]=intUtil['stripTrailingSlash'](_0x3b084e[_0x881b('0x42')]);if(_0x1fad4c&&_0x1fad4c[_0x881b('0x51')]&&_0x1fad4c[_0x881b('0x51')]!==_0x881b('0x52')){logger[_0x881b('0x23')](_0x881b('0x53'),_0x881b('0x44'));_0x9b20cf[_0x881b('0x45')]=util[_0x881b('0xf')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x3b084e[_0x881b('0x42')],_0x9b20cf[_0x881b('0x47')],md5(_0x9b20cf['uniqueid']));}headers['Authorization']=getAuth(_0x3b084e);return getUser(_0x3b084e,_0x51645e[_0x881b('0x26')])['then'](function(_0x238d50){_0x545c91=_0x238d50;logger[_0x881b('0x23')](_0x881b('0x54'),_0x545c91['id']);return getEndUser(_0x3b084e,_0x9b20cf[_0x881b('0x55')],_0x9b20cf[_0x881b('0x56')]);})[_0x881b('0x1f')](function(_0xd2e37d){_0x287d9f=_0xd2e37d;logger[_0x881b('0x23')](_0x881b('0x48'),_0x287d9f['id']);return getTicket(_0x3b084e,_0x545c91,_0x287d9f,_0x11d253,_0x9b20cf);})[_0x881b('0x1f')](function(_0x31b076){if(_0x31b076&&_0x31b076['id']){logger[_0x881b('0x23')](_0x881b('0x20'));logger['info'](_0x881b('0x49'),_0x31b076['id']);logger[_0x881b('0x23')](_0x881b('0x53'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x881b('0xf')]('user:%s',_0x51645e[_0x881b('0x16')]),_0x881b('0x4d'),{'uri':util['format'](_0x881b('0x4e'),_0x3b084e['remoteUri'],_0x31b076['id'])});}})[_0x881b('0x4f')](function(_0x3b0dd0){logger[_0x881b('0x57')](_0x881b('0x53'),JSON[_0x881b('0x50')](_0x3b0dd0));});};exports[_0x881b('0x58')]=function(_0x7c4bc0,_0x342b85,_0x5d69bf,_0x3be16d,_0x1a2b0a,_0x33fe9c){var _0x121458,_0x2780a1;_0x33fe9c[_0x881b('0x1d')]=intUtil['stripTrailingSlash'](_0x33fe9c[_0x881b('0x1d')]);_0x33fe9c['serverUrl']=intUtil[_0x881b('0x41')](_0x33fe9c[_0x881b('0x42')]);if(_0x1a2b0a&&_0x1a2b0a['monitor_format']){logger[_0x881b('0x23')](_0x881b('0x59'),_0x881b('0x44'));_0x342b85[_0x881b('0x45')]=util[_0x881b('0xf')](_0x881b('0x46'),_0x33fe9c['serverUrl'],_0x342b85['uniqueid'],md5(_0x342b85[_0x881b('0x47')]));}else{_0x342b85[_0x881b('0x45')]='';}headers[_0x881b('0x5a')]=getAuth(_0x33fe9c);return getUser(_0x33fe9c,'')[_0x881b('0x1f')](function(_0x10b0aa){_0x121458=_0x10b0aa;logger['info'](_0x881b('0x54'),_0x121458['id']);return getEndUser(_0x33fe9c,_0x342b85[_0x881b('0x10')],_0x342b85['calleridnum']);})[_0x881b('0x1f')](function(_0x5e1875){_0x2780a1=_0x5e1875;logger['info'](_0x881b('0x48'),_0x2780a1['id']);return getTicket(_0x33fe9c,_0x121458,_0x2780a1,_0x5d69bf,_0x342b85);})[_0x881b('0x1f')](function(_0x287df1){if(_0x287df1){logger[_0x881b('0x23')](_0x881b('0x20'));logger[_0x881b('0x23')](_0x881b('0x49'),_0x287df1['id']);}})[_0x881b('0x4f')](function(_0xddbb9c){logger[_0x881b('0x57')](_0x881b('0x59'),JSON[_0x881b('0x50')](_0xddbb9c));});};
\ No newline at end of file
index 4ef0c69..10ad617 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3ddb=['queue','routeId','outbound','log','EVENT\x20UNKNOWN','abandoned','salesforce','desk','unknown\x20integration','error','format','%s\x20configuration\x20#%s\x20not\x20found','../../../../config/logger','data2','lodash','util','./zendesk','./sugarcrm','./freshdesk','./zoho','./desk','./vtiger','./servicenow','./dynamics365','zendesk','sugarcrm','freshdesk','zoho','vtiger','servicenow','dynamics365','exec','includes','data1','toLowerCase','find','Configurations','data3'];(function(_0x313769,_0x4758b7){var _0xf1ac32=function(_0x1dee5c){while(--_0x1dee5c){_0x313769['push'](_0x313769['shift']());}};_0xf1ac32(++_0x4758b7);}(_0x3ddb,0x164));var _0xb3dd=function(_0x9df060,_0x253d33){_0x9df060=_0x9df060-0x0;var _0x338dfe=_0x3ddb[_0x9df060];return _0x338dfe;};'use strict';var _=require(_0xb3dd('0x0'));var util=require(_0xb3dd('0x1'));var zendesk=require(_0xb3dd('0x2'));var salesforce=require('./salesforce');var sugarcrm=require(_0xb3dd('0x3'));var freshdesk=require(_0xb3dd('0x4'));var zoho=require(_0xb3dd('0x5'));var desk=require(_0xb3dd('0x6'));var vtiger=require(_0xb3dd('0x7'));var servicenow=require(_0xb3dd('0x8'));var dynamics365=require(_0xb3dd('0x9'));var integrations=[_0xb3dd('0xa'),'salesforce',_0xb3dd('0xb'),_0xb3dd('0xc'),_0xb3dd('0xd'),'desk',_0xb3dd('0xe'),_0xb3dd('0xf'),_0xb3dd('0x10')];exports[_0xb3dd('0x11')]=function(_0x417aca,_0x5cc3b4,_0x4e7aae,_0x5a630f,_0x340053,_0xa07703){if(_0x4e7aae){if(_[_0xb3dd('0x12')](integrations,_0x417aca[_0xb3dd('0x13')]['toLowerCase']())){try{var _0x1aa759=null;var _0x23152f='';var _0xb61fad=_0x4e7aae[_0x417aca[_0xb3dd('0x13')][_0xb3dd('0x14')]()];if(_0xb61fad){var _0x17a3bd=_0xb61fad[_0x417aca['data2']];if(_0x17a3bd){var _0x2715c7=_[_0xb3dd('0x15')](_0x17a3bd[_0xb3dd('0x16')],{'id':parseInt(_0x417aca[_0xb3dd('0x17')],0xa)});if(_0x2715c7){if(_0x5a630f){if(_0x340053&&_0x5cc3b4[_0xb3dd('0x18')]){_0x23152f=_0xb3dd('0x18');}else if(_0x5cc3b4[_0xb3dd('0x19')]){_0x23152f=_0xb3dd('0x1a');}else{console[_0xb3dd('0x1b')](_0xb3dd('0x1c'),_0x5cc3b4);}}else{_0x23152f=_0xb3dd('0x1d');}switch(_0x417aca[_0xb3dd('0x13')][_0xb3dd('0x14')]()){case _0xb3dd('0xa'):zendesk[_0x23152f](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703);break;case _0xb3dd('0x1e'):salesforce[_0x23152f](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703);break;case'sugarcrm':sugarcrm[_0x23152f](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703);break;case _0xb3dd('0xc'):freshdesk[_0x23152f](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703);break;case'zoho':zoho[_0x23152f](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703);break;case _0xb3dd('0x1f'):desk[_0x23152f](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703);break;case'vtiger':vtiger[_0x23152f](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703);break;case _0xb3dd('0xf'):servicenow['cs'](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703,_0x23152f);break;case _0xb3dd('0x10'):dynamics365['cs'](_0x417aca,_0x5cc3b4,_0x2715c7,_0x5a630f,_0x340053,_0x17a3bd,_0xa07703,_0x23152f);break;default:console[_0xb3dd('0x1b')](_0xb3dd('0x20'));}}else{_0x1aa759=require('../../../../config/logger')(_0x417aca[_0xb3dd('0x13')]['toLowerCase']());_0x1aa759[_0xb3dd('0x21')]('[EXEC]',util[_0xb3dd('0x22')](_0xb3dd('0x23'),_0x417aca[_0xb3dd('0x13')][_0xb3dd('0x14')](),_0x417aca['data3']));}}else{_0x1aa759=require(_0xb3dd('0x24'))(_0x417aca[_0xb3dd('0x13')][_0xb3dd('0x14')]());_0x1aa759['error']('[EXEC]',util['format']('%s\x20account\x20#%s\x20not\x20found',_0x417aca['data1'][_0xb3dd('0x14')](),_0x417aca[_0xb3dd('0x25')]));}}else{}}catch(_0x3747e7){console[_0xb3dd('0x21')](_0x3747e7);}}}};
\ No newline at end of file
+var _0x9ff4=['find','Configurations','queue','routeId','outbound','log','EVENT\x20UNKNOWN','abandoned','zoho','desk','[EXEC]','format','%s\x20configuration\x20#%s\x20not\x20found','data3','../../../../config/logger','error','lodash','util','./zendesk','./salesforce','./freshdesk','./zoho','./desk','./vtiger','./servicenow','./dynamics365','zendesk','salesforce','sugarcrm','vtiger','servicenow','dynamics365','exec','includes','data1','toLowerCase','data2'];(function(_0x246227,_0x12bfcb){var _0x37bd4a=function(_0x4670f4){while(--_0x4670f4){_0x246227['push'](_0x246227['shift']());}};_0x37bd4a(++_0x12bfcb);}(_0x9ff4,0x113));var _0x49ff=function(_0x254852,_0x32a859){_0x254852=_0x254852-0x0;var _0x396085=_0x9ff4[_0x254852];return _0x396085;};'use strict';var _=require(_0x49ff('0x0'));var util=require(_0x49ff('0x1'));var zendesk=require(_0x49ff('0x2'));var salesforce=require(_0x49ff('0x3'));var sugarcrm=require('./sugarcrm');var freshdesk=require(_0x49ff('0x4'));var zoho=require(_0x49ff('0x5'));var desk=require(_0x49ff('0x6'));var vtiger=require(_0x49ff('0x7'));var servicenow=require(_0x49ff('0x8'));var dynamics365=require(_0x49ff('0x9'));var integrations=[_0x49ff('0xa'),_0x49ff('0xb'),_0x49ff('0xc'),'freshdesk','zoho','desk',_0x49ff('0xd'),_0x49ff('0xe'),_0x49ff('0xf')];exports[_0x49ff('0x10')]=function(_0x2a4ed2,_0x12cefe,_0x3d4f8c,_0x41ebe3,_0x5931b3,_0x26495c){if(_0x3d4f8c){if(_[_0x49ff('0x11')](integrations,_0x2a4ed2[_0x49ff('0x12')][_0x49ff('0x13')]())){try{var _0x33d551=null;var _0x48e659='';var _0x51740e=_0x3d4f8c[_0x2a4ed2[_0x49ff('0x12')][_0x49ff('0x13')]()];if(_0x51740e){var _0x439375=_0x51740e[_0x2a4ed2[_0x49ff('0x14')]];if(_0x439375){var _0x25e6e7=_[_0x49ff('0x15')](_0x439375[_0x49ff('0x16')],{'id':parseInt(_0x2a4ed2['data3'],0xa)});if(_0x25e6e7){if(_0x41ebe3){if(_0x5931b3&&_0x12cefe[_0x49ff('0x17')]){_0x48e659=_0x49ff('0x17');}else if(_0x12cefe[_0x49ff('0x18')]){_0x48e659=_0x49ff('0x19');}else{console[_0x49ff('0x1a')](_0x49ff('0x1b'),_0x12cefe);}}else{_0x48e659=_0x49ff('0x1c');}switch(_0x2a4ed2[_0x49ff('0x12')]['toLowerCase']()){case _0x49ff('0xa'):zendesk[_0x48e659](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c);break;case _0x49ff('0xb'):salesforce[_0x48e659](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c);break;case _0x49ff('0xc'):sugarcrm[_0x48e659](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c);break;case'freshdesk':freshdesk[_0x48e659](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c);break;case _0x49ff('0x1d'):zoho[_0x48e659](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c);break;case _0x49ff('0x1e'):desk[_0x48e659](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c);break;case'vtiger':vtiger[_0x48e659](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c);break;case'servicenow':servicenow['cs'](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c,_0x48e659);break;case'dynamics365':dynamics365['cs'](_0x2a4ed2,_0x12cefe,_0x25e6e7,_0x41ebe3,_0x5931b3,_0x439375,_0x26495c,_0x48e659);break;default:console['log']('unknown\x20integration');}}else{_0x33d551=require('../../../../config/logger')(_0x2a4ed2['data1'][_0x49ff('0x13')]());_0x33d551['error'](_0x49ff('0x1f'),util[_0x49ff('0x20')](_0x49ff('0x21'),_0x2a4ed2[_0x49ff('0x12')][_0x49ff('0x13')](),_0x2a4ed2[_0x49ff('0x22')]));}}else{_0x33d551=require(_0x49ff('0x23'))(_0x2a4ed2[_0x49ff('0x12')][_0x49ff('0x13')]());_0x33d551[_0x49ff('0x24')](_0x49ff('0x1f'),util[_0x49ff('0x20')]('%s\x20account\x20#%s\x20not\x20found',_0x2a4ed2[_0x49ff('0x12')][_0x49ff('0x13')](),_0x2a4ed2[_0x49ff('0x14')]));}}else{}}catch(_0x5ab09d){console[_0x49ff('0x24')](_0x5ab09d);}}}};
\ No newline at end of file
index 702c193..0d69273 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb91=['concat','securityToken','Connection','remoteUri','https://login.salesforce.com','clientId','clientSecret','username','queue','serverUrl','stripTrailingSlash','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','email','calleridname','calleridnum','[QUEUE]\x20Ticket\x20%s\x20created','user:%s','newTab','trigger:browser:url','%s/%s/e','error','[QUEUE]\x20Salesforce\x20account\x20type\x20not\x20recognized.','catch','stringify','outbound','recordingFormat','[OUTBOUND]','uniqueid','Fields','[OUTBOUND]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','integrationTab','abandoned','[ABANDONED]\x20Integration\x20account\x20type\x20%s.','moment','bluebird','md5','jsforce','ioredis','./util','../../../../config/logger','salesforce','defaults','redis','socket.io-emitter','ticketType','Task','Subjects','getString','Descriptions','WhoId','Case','assign','sobject','create','isNil','User','find','execute','then','Email','info','Name','Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.','identity','display_name','resolve','moduleSearch','contact_lead','Contact','length','Lead','contact','Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.','Phone','Enduser\x20with\x20phone\x20%s\x20found.','<unknown>','format','moduleCreate','Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.','lead','Company','No\x20Company','upperFirst','type','string','idField','content','variableName','customVariable','name','Variable','toLowerCase','password'];(function(_0x279ab1,_0x527374){var _0x8ba87c=function(_0x2c0898){while(--_0x2c0898){_0x279ab1['push'](_0x279ab1['shift']());}};_0x8ba87c(++_0x527374);}(_0xcb91,0x1a9));var _0x1cb9=function(_0x2d34d6,_0x397ff9){_0x2d34d6=_0x2d34d6-0x0;var _0x1d3d12=_0xcb91[_0x2d34d6];return _0x1d3d12;};'use strict';var _=require('lodash');var rp=require('request-promise');var moment=require(_0x1cb9('0x0'));var BPromise=require(_0x1cb9('0x1'));var md5=require(_0x1cb9('0x2'));var jsforce=require(_0x1cb9('0x3'));var util=require('util');var Redis=require(_0x1cb9('0x4'));var intUtil=require(_0x1cb9('0x5'));var config=require('../../../../config/environment');var logger=require(_0x1cb9('0x6'))(_0x1cb9('0x7'));config['redis']=_[_0x1cb9('0x8')](config[_0x1cb9('0x9')],{'host':'localhost','port':0x18eb});var io=require(_0x1cb9('0xa'))(new Redis(config[_0x1cb9('0x9')]));function emit(_0x59d1be,_0x3ae0f1,_0x5a0e99){io['to'](_0x59d1be)['emit'](_0x3ae0f1,_0x5a0e99);}function getTicket(_0x45a12f,_0x2fa15c,_0x74ce19,_0x1f0eca,_0x2fc627,_0x50ce71,_0x9b58f1,_0x44a6b4){var _0x3af35f={};if(_0x1f0eca[_0x1cb9('0xb')]===_0x1cb9('0xc')){_0x3af35f=Object['assign']({},{'OwnerId':_0x2fa15c['id'],'ActivityDate':moment['utc'](),'IsReminderSet':![],'IsRecurrence':![],'Subject':intUtil['getString'](_0x1f0eca[_0x1cb9('0xd')],_0x2fc627,'\x20'),'Description':intUtil[_0x1cb9('0xe')](_0x1f0eca[_0x1cb9('0xf')],_0x2fc627,'\x0a')},getCustomFields(_0x50ce71,_0x2fc627));if(_0x74ce19){_0x3af35f[_0x1cb9('0x10')]=_0x74ce19['id'];}}else if(_0x1f0eca['ticketType']===_0x1cb9('0x11')){_0x3af35f=Object[_0x1cb9('0x12')]({},{'OwnerId':_0x2fa15c['id'],'Subject':intUtil[_0x1cb9('0xe')](_0x1f0eca[_0x1cb9('0xd')],_0x2fc627,'\x20'),'Description':intUtil[_0x1cb9('0xe')](_0x1f0eca['Descriptions'],_0x2fc627,'\x0a')},getCustomFields(_0x50ce71,_0x2fc627));if(_0x74ce19){_0x3af35f['ContactId']=_0x74ce19['id'];}}return _0x9b58f1[_0x1cb9('0x13')](_0x1f0eca[_0x1cb9('0xb')])[_0x1cb9('0x14')](_0x3af35f);}function getUser(_0x3f1376,_0x3e21e0,_0xf22920){if(!_[_0x1cb9('0x15')](_0x3e21e0)&&intUtil['validateEmail'](_0x3e21e0)){var _0x479d43={'Email':_0x3e21e0};var _0x1b2fa6={'Id':!![],'Username':!![],'Name':!![],'Email':!![]};return _0xf22920[_0x1cb9('0x13')](_0x1cb9('0x16'))[_0x1cb9('0x17')](_0x479d43,_0x1b2fa6)[_0x1cb9('0x18')]()[_0x1cb9('0x19')](function(_0x24fa1f){if(_0x24fa1f['length']){var _0x559bcc=_[_0x1cb9('0x17')](_0x24fa1f,function(_0x5dbfae){return _0x5dbfae[_0x1cb9('0x1a')]===_0x3e21e0;});if(_0x559bcc){logger[_0x1cb9('0x1b')]('Agent\x20%s\x20found.',_0x3e21e0);return BPromise['resolve']({'id':_0x559bcc['Id'],'name':_0x559bcc[_0x1cb9('0x1c')]});}}else{logger[_0x1cb9('0x1b')](_0x1cb9('0x1d'),_0x3e21e0);return _0xf22920[_0x1cb9('0x1e')]()[_0x1cb9('0x19')](function(_0x27db16){return BPromise['resolve']({'id':_0x27db16['user_id'],'name':_0x27db16[_0x1cb9('0x1f')]});});}});}else{logger['info'](_0x1cb9('0x1d'),_0x3e21e0);return _0xf22920[_0x1cb9('0x1e')]()[_0x1cb9('0x19')](function(_0x44d3c4){return BPromise[_0x1cb9('0x20')]({'id':_0x44d3c4['user_id'],'name':_0x44d3c4[_0x1cb9('0x1f')]});});}}function getEndUser(_0x9df250,_0x4c8d76,_0xd6891c,_0x21effa,_0x41a9a0){var _0x1804fd={'Phone':_0x21effa};var _0x406821={'Id':!![],'Name':!![],'Phone':!![]};return BPromise[_0x1cb9('0x20')]()[_0x1cb9('0x19')](function(){if(_0x4c8d76[_0x1cb9('0xb')]===_0x1cb9('0xc')){logger[_0x1cb9('0x1b')]('Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.',_0x21effa,_0x4c8d76[_0x1cb9('0x21')]);switch(_0x4c8d76['moduleSearch']){case _0x1cb9('0x22'):return _0x41a9a0['sobject'](_0x1cb9('0x23'))[_0x1cb9('0x17')](_0x1804fd,_0x406821)[_0x1cb9('0x18')]()[_0x1cb9('0x19')](function(_0x561d89){if(_0x561d89&&_0x561d89[_0x1cb9('0x24')]){return _0x561d89;}else{return _0x41a9a0['sobject'](_0x1cb9('0x25'))[_0x1cb9('0x17')](_0x1804fd,_0x406821);}});case _0x1cb9('0x26'):return _0x41a9a0['sobject'](_0x1cb9('0x23'))['find'](_0x1804fd,_0x406821)[_0x1cb9('0x18')]();case'lead':return _0x41a9a0[_0x1cb9('0x13')](_0x1cb9('0x25'))[_0x1cb9('0x17')](_0x1804fd,_0x406821);default:return null;}}else if(_0x4c8d76[_0x1cb9('0xb')]==='Case'){logger[_0x1cb9('0x1b')](_0x1cb9('0x27'),_0x21effa,_0x1cb9('0x26'));return _0x41a9a0[_0x1cb9('0x13')](_0x1cb9('0x23'))[_0x1cb9('0x17')](_0x1804fd,_0x406821)[_0x1cb9('0x18')]();}})[_0x1cb9('0x19')](function(_0x386e8b){if(_0x386e8b&&_0x386e8b[_0x1cb9('0x24')]){var _0x294eec=_[_0x1cb9('0x17')](_0x386e8b,function(_0x29f149){return _0x29f149['Phone']===_0x21effa;});if(_0x294eec){return BPromise['resolve']({'id':_0x294eec['Id'],'name':_0x294eec[_0x1cb9('0x1c')],'phone':_0x294eec[_0x1cb9('0x28')]});}}})[_0x1cb9('0x19')](function(_0x29f451){if(_0x29f451){logger[_0x1cb9('0x1b')](_0x1cb9('0x29'),_0x21effa);return BPromise[_0x1cb9('0x20')](_0x29f451);}else{logger[_0x1cb9('0x1b')]('Enduser\x20with\x20phone\x20%s\x20not\x20found.',_0x21effa);var _0x2aa59b={'LastName':_0xd6891c!==_0x1cb9('0x2a')?_0xd6891c:util[_0x1cb9('0x2b')]('Caller\x20-\x20%s',_0x21effa),'Phone':_0x21effa};if(_0x4c8d76[_0x1cb9('0x2c')]){if(_0x4c8d76['moduleCreate']===_0x1cb9('0x26')){logger['info'](_0x1cb9('0x2d'),_0x21effa,_0x4c8d76[_0x1cb9('0x2c')]);}else if(_0x4c8d76[_0x1cb9('0x2c')]===_0x1cb9('0x2e')&&_0x4c8d76[_0x1cb9('0xb')]===_0x1cb9('0xc')){logger[_0x1cb9('0x1b')]('Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.',_0x21effa,_0x4c8d76['moduleCreate']);_0x2aa59b[_0x1cb9('0x2f')]=_0x1cb9('0x30');}else{return null;}}return _0x41a9a0[_0x1cb9('0x13')](_[_0x1cb9('0x31')](_0x4c8d76[_0x1cb9('0x2c')]))[_0x1cb9('0x14')](_0x2aa59b);}});}function getCustomFields(_0x32130b,_0x4a670c){var _0xbcaa32={};if(_0x32130b['length']>0x0){_['forEach'](_0x32130b,function(_0x4c6c75){if(_0x4c6c75[_0x1cb9('0x32')]===_0x1cb9('0x33')&&_0x4c6c75[_0x1cb9('0x34')]){_0xbcaa32[_0x4c6c75[_0x1cb9('0x34')]]=_0x4c6c75[_0x1cb9('0x35')]['toString']();}else if(_0x4c6c75[_0x1cb9('0x32')]==='variable'&&_0x4c6c75[_0x1cb9('0x36')]&&_0x4c6c75[_0x1cb9('0x34')]){_0x4a670c[_0x4c6c75[_0x1cb9('0x36')]]&&(_0xbcaa32[_0x4c6c75['idField']]=_0x4a670c[_0x4c6c75[_0x1cb9('0x36')]]['toString']());}else if(_0x4c6c75[_0x1cb9('0x32')]===_0x1cb9('0x37')&&_0x4c6c75['Variable']&&_0x4c6c75['Variable'][_0x1cb9('0x38')]&&_0x4c6c75[_0x1cb9('0x34')]){_0x4a670c[_0x4c6c75[_0x1cb9('0x39')][_0x1cb9('0x38')][_0x1cb9('0x3a')]()]&&(_0xbcaa32[_0x4c6c75['idField']]=_0x4a670c[_0x4c6c75[_0x1cb9('0x39')]['name']['toLowerCase']()]['toString']());}});}return _0xbcaa32;}function getConnection(_0x398d04){var _0x242ec4=_0x398d04[_0x1cb9('0x3b')][_0x1cb9('0x3c')](_0x398d04[_0x1cb9('0x3d')]);var _0x2a8b7f=new jsforce[(_0x1cb9('0x3e'))]({'oauth2':{'loginUrl':_0x398d04[_0x1cb9('0x3f')]||_0x1cb9('0x40'),'clientId':_0x398d04[_0x1cb9('0x41')],'clientSecret':_0x398d04[_0x1cb9('0x42')]}});return _0x2a8b7f['login'](_0x398d04[_0x1cb9('0x43')],_0x242ec4)[_0x1cb9('0x19')](function(){logger[_0x1cb9('0x1b')]('Connection\x20established.');return _0x2a8b7f;});}exports[_0x1cb9('0x44')]=function(_0x57251,_0x3c6044,_0x2efdbb,_0x4599a4,_0x4791ee,_0x2c18c6){var _0x59d76b,_0x2eaa11,_0x4ac483,_0x1cf2ee;_0x2c18c6[_0x1cb9('0x45')]=intUtil[_0x1cb9('0x46')](_0x2c18c6[_0x1cb9('0x45')]);_0x2c18c6['remoteUri']=intUtil[_0x1cb9('0x46')](_0x2c18c6[_0x1cb9('0x3f')]);if(_0x4791ee&&_0x4791ee[_0x1cb9('0x47')]){logger[_0x1cb9('0x1b')](_0x1cb9('0x48'),_0x1cb9('0x49'));_0x3c6044[_0x1cb9('0x4a')]=util[_0x1cb9('0x2b')](_0x1cb9('0x4b'),_0x2c18c6[_0x1cb9('0x45')],_0x3c6044['uniqueid'],md5(_0x3c6044['uniqueid']));}else{_0x3c6044[_0x1cb9('0x4a')]='';}return getConnection(_0x2c18c6)[_0x1cb9('0x19')](function(_0x19e83a){_0x1cf2ee=_0x19e83a;return getUser(_0x2c18c6,_0x4599a4[_0x1cb9('0x4c')],_0x1cf2ee);})[_0x1cb9('0x19')](function(_0x2d076b){_0x59d76b=_0x2d076b;return getEndUser(_0x2c18c6,_0x2efdbb,_0x3c6044[_0x1cb9('0x4d')],_0x3c6044[_0x1cb9('0x4e')],_0x1cf2ee);})[_0x1cb9('0x19')](function(_0x166ca2){_0x2eaa11=_0x166ca2;return getTicket(_0x2c18c6,_0x59d76b,_0x2eaa11,_0x2efdbb,_0x3c6044,_0x2efdbb['Fields'],_0x1cf2ee,_0x1cb9('0x44'));})['then'](function(_0x222aa4){_0x4ac483=_0x222aa4;logger['info'](_0x1cb9('0x4f'),_0x4ac483['id']);logger['info']('[QUEUE]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.',_0x4ac483['id'],_0x4599a4[_0x1cb9('0x38')],_0x2c18c6[_0x1cb9('0x32')]);switch(_0x2c18c6[_0x1cb9('0x32')]){case'integrationTab':emit(util[_0x1cb9('0x2b')](_0x1cb9('0x50'),_0x4599a4['name']),'trigger:salesforce:display',{'recordId':_0x4ac483['id']});break;case _0x1cb9('0x51'):emit(util[_0x1cb9('0x2b')](_0x1cb9('0x50'),_0x4599a4[_0x1cb9('0x38')]),_0x1cb9('0x52'),{'uri':util[_0x1cb9('0x2b')](_0x1cb9('0x53'),_0x1cf2ee['instanceUrl'],_0x4ac483['id'])});break;default:logger[_0x1cb9('0x54')](_0x1cb9('0x55'));}})[_0x1cb9('0x56')](function(_0x49946f){logger[_0x1cb9('0x54')](_0x1cb9('0x48'),JSON[_0x1cb9('0x57')](_0x49946f));});};exports[_0x1cb9('0x58')]=function(_0x12d283,_0x3c4681,_0x5ae762,_0x37ceb5,_0x36c40d,_0x41e81f,_0x128c5b){var _0x4ad7cd,_0x274c90,_0x1c27d3,_0x3c126a;_0x41e81f[_0x1cb9('0x45')]=intUtil[_0x1cb9('0x46')](_0x41e81f[_0x1cb9('0x45')]);_0x41e81f['remoteUri']=intUtil[_0x1cb9('0x46')](_0x41e81f[_0x1cb9('0x3f')]);if(_0x128c5b&&_0x128c5b[_0x1cb9('0x59')]&&_0x128c5b[_0x1cb9('0x59')]!=='none'){logger['info'](_0x1cb9('0x5a'),_0x1cb9('0x49'));_0x3c4681[_0x1cb9('0x4a')]=util[_0x1cb9('0x2b')](_0x1cb9('0x4b'),_0x41e81f[_0x1cb9('0x45')],_0x3c4681[_0x1cb9('0x5b')],md5(_0x3c4681[_0x1cb9('0x5b')]));}return getConnection(_0x41e81f)['then'](function(_0x49f74c){_0x3c126a=_0x49f74c;return getUser(_0x41e81f,_0x37ceb5[_0x1cb9('0x4c')],_0x3c126a);})['then'](function(_0x5cefa3){_0x4ad7cd=_0x5cefa3;return getEndUser(_0x41e81f,_0x5ae762,_0x3c4681['destcalleridname'],_0x3c4681['destcalleridnum'],_0x3c126a);})['then'](function(_0x455c40){_0x274c90=_0x455c40;return getTicket(_0x41e81f,_0x4ad7cd,_0x274c90,_0x5ae762,_0x3c4681,_0x5ae762[_0x1cb9('0x5c')],_0x3c126a,_0x1cb9('0x58'));})[_0x1cb9('0x19')](function(_0x23d435){_0x1c27d3=_0x23d435;logger[_0x1cb9('0x1b')]('[OUTBOUND]\x20Ticket\x20%s\x20created.',_0x1c27d3['id']);logger[_0x1cb9('0x1b')](_0x1cb9('0x5d'),_0x1c27d3['id'],_0x37ceb5['name'],_0x41e81f['type']);switch(_0x41e81f[_0x1cb9('0x32')]){case _0x1cb9('0x5e'):emit(util[_0x1cb9('0x2b')](_0x1cb9('0x50'),_0x37ceb5[_0x1cb9('0x38')]),'trigger:salesforce:display',{'recordId':_0x1c27d3['id']});break;case'newTab':emit(util['format'](_0x1cb9('0x50'),_0x37ceb5[_0x1cb9('0x38')]),_0x1cb9('0x52'),{'uri':util[_0x1cb9('0x2b')](_0x1cb9('0x53'),_0x3c126a['instanceUrl'],_0x1c27d3['id'])});break;default:logger[_0x1cb9('0x54')](_0x1cb9('0x5a'),'Salesforce\x20account\x20type\x20not\x20recognized');}})['catch'](function(_0x1d914d){logger['error'](_0x1cb9('0x5a'),JSON[_0x1cb9('0x57')](_0x1d914d));});};exports[_0x1cb9('0x5f')]=function(_0x1e7561,_0x3619a2,_0x398779,_0x4aeeff,_0xde0d93,_0x15fc04){var _0x330fc1,_0x17c361,_0x5b5f0d,_0x520d98;_0x15fc04[_0x1cb9('0x45')]=intUtil[_0x1cb9('0x46')](_0x15fc04[_0x1cb9('0x45')]);_0x15fc04[_0x1cb9('0x3f')]=intUtil[_0x1cb9('0x46')](_0x15fc04[_0x1cb9('0x3f')]);if(_0xde0d93&&_0xde0d93['monitor_format']){logger[_0x1cb9('0x1b')]('[ABANDONED]',_0x1cb9('0x49'));_0x3619a2[_0x1cb9('0x4a')]=util['format'](_0x1cb9('0x4b'),_0x15fc04[_0x1cb9('0x45')],_0x3619a2[_0x1cb9('0x5b')],md5(_0x3619a2['uniqueid']));}else{_0x3619a2[_0x1cb9('0x4a')]='';}return getConnection(_0x15fc04)[_0x1cb9('0x19')](function(_0x306abf){_0x520d98=_0x306abf;if(!_[_0x1cb9('0x15')](_0x4aeeff)){return getUser(_0x15fc04,_0x4aeeff[_0x1cb9('0x38')],_0x520d98);}else{return getUser(_0x15fc04,null,_0x520d98);}})[_0x1cb9('0x19')](function(_0x5a3f1d){_0x330fc1=_0x5a3f1d;return getEndUser(_0x15fc04,_0x398779,_0x3619a2[_0x1cb9('0x4d')],_0x3619a2[_0x1cb9('0x4e')],_0x520d98);})[_0x1cb9('0x19')](function(_0x4398dc){_0x17c361=_0x4398dc;return getTicket(_0x15fc04,_0x330fc1,_0x17c361,_0x398779,_0x3619a2,_0x398779[_0x1cb9('0x5c')],_0x520d98);})[_0x1cb9('0x19')](function(_0x128a41){_0x5b5f0d=_0x128a41;logger[_0x1cb9('0x1b')]('[ABANDONED]\x20Ticket\x20%s\x20created.',_0x5b5f0d['id']);logger[_0x1cb9('0x1b')](_0x1cb9('0x60'),_0x15fc04['type']);})[_0x1cb9('0x56')](function(_0x5415fa){logger[_0x1cb9('0x54')]('[ABANDONED]',JSON['stringify'](_0x5415fa));});};
\ No newline at end of file
+var _0xd8b0=['Agent\x20%s\x20not\x20found.\x20Switch\x20to\x20the\x20admin\x20account.','identity','resolve','user_id','display_name','info','Searching\x20enduser\x20with\x20phone\x20%s.\x20Serching\x20method\x20used\x20%s.','moduleSearch','Lead','contact','lead','Contact','Name','Enduser\x20with\x20phone\x20%s\x20found.','Caller\x20-\x20%s','moduleCreate','Enduser\x20with\x20phone\x20%s.\x20Creating\x20method\x20used\x20%s.','No\x20Company','upperFirst','forEach','type','string','idField','content','toString','variableName','Variable','name','toLowerCase','password','remoteUri','https://login.salesforce.com','clientId','login','username','Connection\x20established.','queue','serverUrl','stripTrailingSlash','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','calleridname','Fields','[QUEUE]\x20Ticket\x20%s\x20created','[QUEUE]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','user:%s','format','trigger:browser:url','%s/%s/e','[QUEUE]\x20Salesforce\x20account\x20type\x20not\x20recognized.','catch','stringify','outbound','recordingFormat','none','email','destcalleridname','destcalleridnum','[OUTBOUND]\x20Ticket\x20%s\x20created.','[OUTBOUND]\x20Displaying\x20ticket\x20%s\x20to\x20agent\x20%s.\x20Integration\x20account\x20type\x20%s.','integrationTab','newTab','instanceUrl','error','[OUTBOUND]','monitor_format','[ABANDONED]','[ABANDONED]\x20Ticket\x20%s\x20created.','[ABANDONED]\x20Integration\x20account\x20type\x20%s.','lodash','request-promise','jsforce','util','ioredis','./util','../../../../config/environment','redis','defaults','socket.io-emitter','emit','ticketType','Task','assign','utc','getString','Subjects','Descriptions','WhoId','Case','ContactId','sobject','isNil','validateEmail','find','execute','then','length','Agent\x20%s\x20found.'];(function(_0x3a5541,_0x34dc2e){var _0x549d59=function(_0x246401){while(--_0x246401){_0x3a5541['push'](_0x3a5541['shift']());}};_0x549d59(++_0x34dc2e);}(_0xd8b0,0xad));var _0x0d8b=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0xd8b0[_0xa464c9];return _0x3d73c4;};'use strict';var _=require(_0x0d8b('0x0'));var rp=require(_0x0d8b('0x1'));var moment=require('moment');var BPromise=require('bluebird');var md5=require('md5');var jsforce=require(_0x0d8b('0x2'));var util=require(_0x0d8b('0x3'));var Redis=require(_0x0d8b('0x4'));var intUtil=require(_0x0d8b('0x5'));var config=require(_0x0d8b('0x6'));var logger=require('../../../../config/logger')('salesforce');config[_0x0d8b('0x7')]=_[_0x0d8b('0x8')](config[_0x0d8b('0x7')],{'host':'localhost','port':0x18eb});var io=require(_0x0d8b('0x9'))(new Redis(config[_0x0d8b('0x7')]));function emit(_0x58e4e2,_0x129310,_0x348e65){io['to'](_0x58e4e2)[_0x0d8b('0xa')](_0x129310,_0x348e65);}function getTicket(_0x1f4800,_0x28ff7f,_0x1cac62,_0x2c5e9e,_0x28f87c,_0x48fa16,_0x3c4bfa,_0x4e0269){var _0x4225c4={};if(_0x2c5e9e[_0x0d8b('0xb')]===_0x0d8b('0xc')){_0x4225c4=Object[_0x0d8b('0xd')]({},{'OwnerId':_0x28ff7f['id'],'ActivityDate':moment[_0x0d8b('0xe')](),'IsReminderSet':![],'IsRecurrence':![],'Subject':intUtil[_0x0d8b('0xf')](_0x2c5e9e[_0x0d8b('0x10')],_0x28f87c,'\x20'),'Description':intUtil[_0x0d8b('0xf')](_0x2c5e9e[_0x0d8b('0x11')],_0x28f87c,'\x0a')},getCustomFields(_0x48fa16,_0x28f87c));if(_0x1cac62){_0x4225c4[_0x0d8b('0x12')]=_0x1cac62['id'];}}else if(_0x2c5e9e[_0x0d8b('0xb')]===_0x0d8b('0x13')){_0x4225c4=Object[_0x0d8b('0xd')]({},{'OwnerId':_0x28ff7f['id'],'Subject':intUtil[_0x0d8b('0xf')](_0x2c5e9e['Subjects'],_0x28f87c,'\x20'),'Description':intUtil[_0x0d8b('0xf')](_0x2c5e9e[_0x0d8b('0x11')],_0x28f87c,'\x0a')},getCustomFields(_0x48fa16,_0x28f87c));if(_0x1cac62){_0x4225c4[_0x0d8b('0x14')]=_0x1cac62['id'];}}return _0x3c4bfa[_0x0d8b('0x15')](_0x2c5e9e[_0x0d8b('0xb')])['create'](_0x4225c4);}function getUser(_0x106a01,_0x4586c2,_0x2fd0fc){if(!_[_0x0d8b('0x16')](_0x4586c2)&&intUtil[_0x0d8b('0x17')](_0x4586c2)){var _0x18dd2d={'Email':_0x4586c2};var _0x264b39={'Id':!![],'Username':!![],'Name':!![],'Email':!![]};return _0x2fd0fc[_0x0d8b('0x15')]('User')[_0x0d8b('0x18')](_0x18dd2d,_0x264b39)[_0x0d8b('0x19')]()[_0x0d8b('0x1a')](function(_0x143372){if(_0x143372[_0x0d8b('0x1b')]){var _0x5b709c=_[_0x0d8b('0x18')](_0x143372,function(_0x352c17){return _0x352c17['Email']===_0x4586c2;});if(_0x5b709c){logger['info'](_0x0d8b('0x1c'),_0x4586c2);return BPromise['resolve']({'id':_0x5b709c['Id'],'name':_0x5b709c['Name']});}}else{logger['info'](_0x0d8b('0x1d'),_0x4586c2);return _0x2fd0fc[_0x0d8b('0x1e')]()[_0x0d8b('0x1a')](function(_0x38efc8){return BPromise[_0x0d8b('0x1f')]({'id':_0x38efc8[_0x0d8b('0x20')],'name':_0x38efc8[_0x0d8b('0x21')]});});}});}else{logger[_0x0d8b('0x22')](_0x0d8b('0x1d'),_0x4586c2);return _0x2fd0fc['identity']()[_0x0d8b('0x1a')](function(_0x4463ee){return BPromise['resolve']({'id':_0x4463ee[_0x0d8b('0x20')],'name':_0x4463ee['display_name']});});}}function getEndUser(_0x3dd149,_0x234bdd,_0xa2af02,_0x4fe6f9,_0x59a905){var _0x28f639={'Phone':_0x4fe6f9};var _0x3ef745={'Id':!![],'Name':!![],'Phone':!![]};return BPromise['resolve']()[_0x0d8b('0x1a')](function(){if(_0x234bdd['ticketType']===_0x0d8b('0xc')){logger['info'](_0x0d8b('0x23'),_0x4fe6f9,_0x234bdd['moduleSearch']);switch(_0x234bdd[_0x0d8b('0x24')]){case'contact_lead':return _0x59a905[_0x0d8b('0x15')]('Contact')[_0x0d8b('0x18')](_0x28f639,_0x3ef745)[_0x0d8b('0x19')]()[_0x0d8b('0x1a')](function(_0x56120a){if(_0x56120a&&_0x56120a['length']){return _0x56120a;}else{return _0x59a905['sobject'](_0x0d8b('0x25'))['find'](_0x28f639,_0x3ef745);}});case _0x0d8b('0x26'):return _0x59a905['sobject']('Contact')[_0x0d8b('0x18')](_0x28f639,_0x3ef745)[_0x0d8b('0x19')]();case _0x0d8b('0x27'):return _0x59a905[_0x0d8b('0x15')](_0x0d8b('0x25'))[_0x0d8b('0x18')](_0x28f639,_0x3ef745);default:return null;}}else if(_0x234bdd[_0x0d8b('0xb')]===_0x0d8b('0x13')){logger['info'](_0x0d8b('0x23'),_0x4fe6f9,_0x0d8b('0x26'));return _0x59a905['sobject'](_0x0d8b('0x28'))[_0x0d8b('0x18')](_0x28f639,_0x3ef745)[_0x0d8b('0x19')]();}})['then'](function(_0x113318){if(_0x113318&&_0x113318[_0x0d8b('0x1b')]){var _0x206157=_[_0x0d8b('0x18')](_0x113318,function(_0x933e01){return _0x933e01['Phone']===_0x4fe6f9;});if(_0x206157){return BPromise[_0x0d8b('0x1f')]({'id':_0x206157['Id'],'name':_0x206157[_0x0d8b('0x29')],'phone':_0x206157['Phone']});}}})[_0x0d8b('0x1a')](function(_0x3cc3ee){if(_0x3cc3ee){logger[_0x0d8b('0x22')](_0x0d8b('0x2a'),_0x4fe6f9);return BPromise[_0x0d8b('0x1f')](_0x3cc3ee);}else{logger['info']('Enduser\x20with\x20phone\x20%s\x20not\x20found.',_0x4fe6f9);var _0x41b4f9={'LastName':_0xa2af02!=='<unknown>'?_0xa2af02:util['format'](_0x0d8b('0x2b'),_0x4fe6f9),'Phone':_0x4fe6f9};if(_0x234bdd[_0x0d8b('0x2c')]){if(_0x234bdd[_0x0d8b('0x2c')]===_0x0d8b('0x26')){logger[_0x0d8b('0x22')](_0x0d8b('0x2d'),_0x4fe6f9,_0x234bdd['moduleCreate']);}else if(_0x234bdd[_0x0d8b('0x2c')]===_0x0d8b('0x27')&&_0x234bdd[_0x0d8b('0xb')]===_0x0d8b('0xc')){logger[_0x0d8b('0x22')](_0x0d8b('0x2d'),_0x4fe6f9,_0x234bdd[_0x0d8b('0x2c')]);_0x41b4f9['Company']=_0x0d8b('0x2e');}else{return null;}}return _0x59a905[_0x0d8b('0x15')](_[_0x0d8b('0x2f')](_0x234bdd[_0x0d8b('0x2c')]))['create'](_0x41b4f9);}});}function getCustomFields(_0xe0bf42,_0x4b4bde){var _0x37b26c={};if(_0xe0bf42[_0x0d8b('0x1b')]>0x0){_[_0x0d8b('0x30')](_0xe0bf42,function(_0x26ac10){if(_0x26ac10[_0x0d8b('0x31')]===_0x0d8b('0x32')&&_0x26ac10[_0x0d8b('0x33')]){_0x37b26c[_0x26ac10[_0x0d8b('0x33')]]=_0x26ac10[_0x0d8b('0x34')][_0x0d8b('0x35')]();}else if(_0x26ac10['type']==='variable'&&_0x26ac10['variableName']&&_0x26ac10['idField']){_0x4b4bde[_0x26ac10['variableName']]&&(_0x37b26c[_0x26ac10[_0x0d8b('0x33')]]=_0x4b4bde[_0x26ac10[_0x0d8b('0x36')]][_0x0d8b('0x35')]());}else if(_0x26ac10['type']==='customVariable'&&_0x26ac10[_0x0d8b('0x37')]&&_0x26ac10[_0x0d8b('0x37')][_0x0d8b('0x38')]&&_0x26ac10['idField']){_0x4b4bde[_0x26ac10[_0x0d8b('0x37')][_0x0d8b('0x38')]['toLowerCase']()]&&(_0x37b26c[_0x26ac10['idField']]=_0x4b4bde[_0x26ac10[_0x0d8b('0x37')]['name'][_0x0d8b('0x39')]()]['toString']());}});}return _0x37b26c;}function getConnection(_0x53f643){var _0x30ccee=_0x53f643[_0x0d8b('0x3a')]['concat'](_0x53f643['securityToken']);var _0x59b8e9=new jsforce['Connection']({'oauth2':{'loginUrl':_0x53f643[_0x0d8b('0x3b')]||_0x0d8b('0x3c'),'clientId':_0x53f643[_0x0d8b('0x3d')],'clientSecret':_0x53f643['clientSecret']}});return _0x59b8e9[_0x0d8b('0x3e')](_0x53f643[_0x0d8b('0x3f')],_0x30ccee)[_0x0d8b('0x1a')](function(){logger[_0x0d8b('0x22')](_0x0d8b('0x40'));return _0x59b8e9;});}exports[_0x0d8b('0x41')]=function(_0x11d22b,_0x1d5067,_0x384a5e,_0x1f2077,_0x44d54b,_0x820885){var _0x84ef1c,_0x3e569b,_0x570af8,_0xdfcf32;_0x820885[_0x0d8b('0x42')]=intUtil[_0x0d8b('0x43')](_0x820885[_0x0d8b('0x42')]);_0x820885['remoteUri']=intUtil[_0x0d8b('0x43')](_0x820885['remoteUri']);if(_0x44d54b&&_0x44d54b['monitor_format']){logger[_0x0d8b('0x22')](_0x0d8b('0x44'),_0x0d8b('0x45'));_0x1d5067[_0x0d8b('0x46')]=util['format'](_0x0d8b('0x47'),_0x820885[_0x0d8b('0x42')],_0x1d5067[_0x0d8b('0x48')],md5(_0x1d5067[_0x0d8b('0x48')]));}else{_0x1d5067[_0x0d8b('0x46')]='';}return getConnection(_0x820885)['then'](function(_0x5c0824){_0xdfcf32=_0x5c0824;return getUser(_0x820885,_0x1f2077['email'],_0xdfcf32);})['then'](function(_0x368ede){_0x84ef1c=_0x368ede;return getEndUser(_0x820885,_0x384a5e,_0x1d5067[_0x0d8b('0x49')],_0x1d5067['calleridnum'],_0xdfcf32);})['then'](function(_0x44c5c1){_0x3e569b=_0x44c5c1;return getTicket(_0x820885,_0x84ef1c,_0x3e569b,_0x384a5e,_0x1d5067,_0x384a5e[_0x0d8b('0x4a')],_0xdfcf32,'queue');})['then'](function(_0x900906){_0x570af8=_0x900906;logger[_0x0d8b('0x22')](_0x0d8b('0x4b'),_0x570af8['id']);logger[_0x0d8b('0x22')](_0x0d8b('0x4c'),_0x570af8['id'],_0x1f2077['name'],_0x820885[_0x0d8b('0x31')]);switch(_0x820885[_0x0d8b('0x31')]){case'integrationTab':emit(util['format'](_0x0d8b('0x4d'),_0x1f2077[_0x0d8b('0x38')]),'trigger:salesforce:display',{'recordId':_0x570af8['id']});break;case'newTab':emit(util[_0x0d8b('0x4e')](_0x0d8b('0x4d'),_0x1f2077[_0x0d8b('0x38')]),_0x0d8b('0x4f'),{'uri':util['format'](_0x0d8b('0x50'),_0xdfcf32['instanceUrl'],_0x570af8['id'])});break;default:logger['error'](_0x0d8b('0x51'));}})[_0x0d8b('0x52')](function(_0x54aa03){logger['error'](_0x0d8b('0x44'),JSON[_0x0d8b('0x53')](_0x54aa03));});};exports[_0x0d8b('0x54')]=function(_0x2c1eb0,_0x3afc3a,_0xb66e76,_0x3978e5,_0x3bead7,_0x5418d8,_0x24a859){var _0x37dc9f,_0x3a3d33,_0x3c7efb,_0x3fb9ea;_0x5418d8[_0x0d8b('0x42')]=intUtil[_0x0d8b('0x43')](_0x5418d8[_0x0d8b('0x42')]);_0x5418d8[_0x0d8b('0x3b')]=intUtil['stripTrailingSlash'](_0x5418d8[_0x0d8b('0x3b')]);if(_0x24a859&&_0x24a859[_0x0d8b('0x55')]&&_0x24a859[_0x0d8b('0x55')]!==_0x0d8b('0x56')){logger[_0x0d8b('0x22')]('[OUTBOUND]',_0x0d8b('0x45'));_0x3afc3a[_0x0d8b('0x46')]=util[_0x0d8b('0x4e')](_0x0d8b('0x47'),_0x5418d8[_0x0d8b('0x42')],_0x3afc3a['uniqueid'],md5(_0x3afc3a['uniqueid']));}return getConnection(_0x5418d8)[_0x0d8b('0x1a')](function(_0x291b83){_0x3fb9ea=_0x291b83;return getUser(_0x5418d8,_0x3978e5[_0x0d8b('0x57')],_0x3fb9ea);})[_0x0d8b('0x1a')](function(_0x5a70bd){_0x37dc9f=_0x5a70bd;return getEndUser(_0x5418d8,_0xb66e76,_0x3afc3a[_0x0d8b('0x58')],_0x3afc3a[_0x0d8b('0x59')],_0x3fb9ea);})[_0x0d8b('0x1a')](function(_0x5952dd){_0x3a3d33=_0x5952dd;return getTicket(_0x5418d8,_0x37dc9f,_0x3a3d33,_0xb66e76,_0x3afc3a,_0xb66e76[_0x0d8b('0x4a')],_0x3fb9ea,'outbound');})[_0x0d8b('0x1a')](function(_0x3ed63e){_0x3c7efb=_0x3ed63e;logger[_0x0d8b('0x22')](_0x0d8b('0x5a'),_0x3c7efb['id']);logger[_0x0d8b('0x22')](_0x0d8b('0x5b'),_0x3c7efb['id'],_0x3978e5['name'],_0x5418d8[_0x0d8b('0x31')]);switch(_0x5418d8['type']){case _0x0d8b('0x5c'):emit(util[_0x0d8b('0x4e')](_0x0d8b('0x4d'),_0x3978e5[_0x0d8b('0x38')]),'trigger:salesforce:display',{'recordId':_0x3c7efb['id']});break;case _0x0d8b('0x5d'):emit(util[_0x0d8b('0x4e')](_0x0d8b('0x4d'),_0x3978e5[_0x0d8b('0x38')]),_0x0d8b('0x4f'),{'uri':util[_0x0d8b('0x4e')](_0x0d8b('0x50'),_0x3fb9ea[_0x0d8b('0x5e')],_0x3c7efb['id'])});break;default:logger[_0x0d8b('0x5f')](_0x0d8b('0x60'),'Salesforce\x20account\x20type\x20not\x20recognized');}})['catch'](function(_0x6388ae){logger[_0x0d8b('0x5f')]('[OUTBOUND]',JSON[_0x0d8b('0x53')](_0x6388ae));});};exports['abandoned']=function(_0x5cc960,_0x22ee20,_0x1c4e96,_0x4f4b4d,_0x587128,_0x1900e3){var _0x1c007b,_0x70e4b2,_0x435090,_0x2ab72b;_0x1900e3[_0x0d8b('0x42')]=intUtil[_0x0d8b('0x43')](_0x1900e3['serverUrl']);_0x1900e3[_0x0d8b('0x3b')]=intUtil['stripTrailingSlash'](_0x1900e3[_0x0d8b('0x3b')]);if(_0x587128&&_0x587128[_0x0d8b('0x61')]){logger[_0x0d8b('0x22')](_0x0d8b('0x62'),'Recording\x20is\x20enabled!');_0x22ee20[_0x0d8b('0x46')]=util['format'](_0x0d8b('0x47'),_0x1900e3[_0x0d8b('0x42')],_0x22ee20[_0x0d8b('0x48')],md5(_0x22ee20[_0x0d8b('0x48')]));}else{_0x22ee20[_0x0d8b('0x46')]='';}return getConnection(_0x1900e3)[_0x0d8b('0x1a')](function(_0x3e927c){_0x2ab72b=_0x3e927c;if(!_[_0x0d8b('0x16')](_0x4f4b4d)){return getUser(_0x1900e3,_0x4f4b4d[_0x0d8b('0x38')],_0x2ab72b);}else{return getUser(_0x1900e3,null,_0x2ab72b);}})[_0x0d8b('0x1a')](function(_0x4eb07e){_0x1c007b=_0x4eb07e;return getEndUser(_0x1900e3,_0x1c4e96,_0x22ee20[_0x0d8b('0x49')],_0x22ee20['calleridnum'],_0x2ab72b);})[_0x0d8b('0x1a')](function(_0x106e9e){_0x70e4b2=_0x106e9e;return getTicket(_0x1900e3,_0x1c007b,_0x70e4b2,_0x1c4e96,_0x22ee20,_0x1c4e96['Fields'],_0x2ab72b);})[_0x0d8b('0x1a')](function(_0x56e03c){_0x435090=_0x56e03c;logger[_0x0d8b('0x22')](_0x0d8b('0x63'),_0x435090['id']);logger[_0x0d8b('0x22')](_0x0d8b('0x64'),_0x1900e3[_0x0d8b('0x31')]);})[_0x0d8b('0x52')](function(_0x3a073b){logger[_0x0d8b('0x5f')]('[ABANDONED]',JSON[_0x0d8b('0x53')](_0x3a073b));});};
\ No newline at end of file
index 1ade3db..329be1f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4553=['serverUrl','format','%s/api/now/table/','isNil','email','abandoned','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','monitor_format','Recording\x20is\x20enabled!','recordingFormat','none','[OUTBOUND]','recordingURL','The\x20ticket\x20ID\x20is:\x20%s','call\x20direction:\x20%s',']\x20Error\x20running\x20ServiceNow\x20integration','inspect','bluebird','request-promise','util','./util','../../../../config/environment','../../../../config/logger','servicenow','redis','defaults','localhost','socket.io-emitter','GET','sys_user?sysparm_query=user_name%3Dadmin','then','result','length','adminId','sys_id','info','toUpperCase','],\x20getAdminUser\x20crm','catch','error','message','],\x20getUser\x20input\x20crm','validateEmail','userEmail','],\x20getUser\x20rp\x20obj','],\x20getUser\x20entity','active','userId','adminEmail','],\x20getUser\x20crm',']\x20using\x20admin\x20profile','],\x20createEndUser\x20input\x20crm','POST','sys_user?','endUserNumber','true','],\x20EndUser\x20schema','endUserId','sys_user?sysparm_query=phone%3D','forEach','type','string','nameField','customField','toLowerCase','toString','idField','content','variable','variableName','customVariable','Variable','name','outbound','incident','assign','getString','Subjects','Descriptions','Fields',']\x20POST\x20incident\x20entity\x20schema','ticketId','number',']\x20getTicket\x20crm','label','label_entry','Incident','ticketNumber','push',']\x20arrayPromises:\x20IDs\x20in\x20table\x20label','all','Tags','map','%26sysparm_record_target%3Dincident','%26sysparm_record_row%3D1%26sysparm_record_rows%3D39','%26sysparm_record_list%3Dactive%253Dtrue','%255EORDERBYDESCnumber','/nav_to.do?uri=incident.do?sys_id%3D','user:%s','emit','trigger:browser:url','username','password','sysparm_limit=1','sysparm_display_value=true','remoteUri'];(function(_0x486581,_0x324170){var _0x4a5f7e=function(_0xa39638){while(--_0xa39638){_0x486581['push'](_0x486581['shift']());}};_0x4a5f7e(++_0x324170);}(_0x4553,0x1be));var _0x3455=function(_0xa464c9,_0x7c86d8){_0xa464c9=_0xa464c9-0x0;var _0x3d73c4=_0x4553[_0xa464c9];return _0x3d73c4;};'use strict';var _=require('lodash');var Promise=require(_0x3455('0x0'));var rp=require(_0x3455('0x1'));var util=require(_0x3455('0x2'));var md5=require('md5');var Redis=require('ioredis');var intUtil=require(_0x3455('0x3'));var config=require(_0x3455('0x4'));var logger=require(_0x3455('0x5'))(_0x3455('0x6'));config[_0x3455('0x7')]=_[_0x3455('0x8')](config[_0x3455('0x7')],{'host':_0x3455('0x9'),'port':0x18eb});var io=require(_0x3455('0xa'))(new Redis(config['redis']));function getAdminUser(_0x362d07,_0x4c0c61,_0x2ced4a,_0x5ec833,_0x123d2d,_0xe8aa2e){return new Promise(function(_0x2732c6,_0x49b469){var _0x5553b5={'method':_0x3455('0xb'),'uri':_0x5ec833+_0x3455('0xc')+'&'+_0x123d2d+'&'+_0xe8aa2e,'auth':_0x4c0c61,'json':!![]};return rp(_0x5553b5)[_0x3455('0xd')](function(_0x21d7f7){if(_0x21d7f7[_0x3455('0xe')][_0x3455('0xf')]>0x0){_0x2ced4a[_0x3455('0x10')]=_0x21d7f7[_0x3455('0xe')][0x0][_0x3455('0x11')];}logger[_0x3455('0x12')]('['+[_0x362d07[_0x3455('0x13')]()]+_0x3455('0x14'),_0x2ced4a);_0x2732c6(_0x2ced4a);})[_0x3455('0x15')](function(_0x2fa55c){logger[_0x3455('0x16')]('['+[_0x362d07[_0x3455('0x13')]()]+']',_0x2fa55c[_0x3455('0x17')]);_0x49b469(_0x2fa55c['message']);});});}function getUser(_0x523208,_0x31f2ac,_0x1de6ed,_0x3c0def,_0x257a9c){return function(_0x454252){logger['info']('['+[_0x523208[_0x3455('0x13')]()]+_0x3455('0x18'),_0x454252);return new Promise(function(_0x147e95,_0x21cb33){if(intUtil[_0x3455('0x19')](_0x454252[_0x3455('0x1a')])){var _0x59d493={'method':_0x3455('0xb'),'uri':_0x1de6ed+'sys_user?sysparm_query=email%3D'+_0x454252[_0x3455('0x1a')]+'&'+_0x3c0def+'&'+_0x257a9c,'auth':_0x31f2ac,'json':!![]};logger[_0x3455('0x12')]('['+[_0x523208[_0x3455('0x13')]()]+_0x3455('0x1b'),_0x59d493);return rp(_0x59d493)[_0x3455('0xd')](function(_0x33ae85){logger[_0x3455('0x12')]('['+[_0x523208[_0x3455('0x13')]()]+_0x3455('0x1c'),_0x33ae85);if(_0x33ae85['result'][_0x3455('0xf')]>0x0&&String(_0x33ae85[_0x3455('0xe')][0x0][_0x3455('0x1d')])==='true'){_0x454252[_0x3455('0x1e')]=_0x33ae85[_0x3455('0xe')][0x0]['sys_id'];}else{_0x454252['userId']=_0x454252[_0x3455('0x10')];_0x454252[_0x3455('0x1a')]=_0x454252[_0x3455('0x1f')];}logger[_0x3455('0x12')]('['+[_0x523208['toUpperCase']()]+_0x3455('0x20'),_0x454252);_0x147e95(_0x454252);})['catch'](function(_0x252f87){logger['error']('['+[_0x523208[_0x3455('0x13')]()]+']',_0x252f87[_0x3455('0x17')]);_0x21cb33(_0x252f87[_0x3455('0x17')]);});}else{logger['info']('['+[_0x523208[_0x3455('0x13')]()]+_0x3455('0x21'));_0x454252[_0x3455('0x1e')]=_0x454252[_0x3455('0x10')];_0x454252['userEmail']=_0x454252['adminEmail'];_0x147e95(_0x454252);}});};}function createEndUser(_0xa26b63,_0x41d0a4,_0x2f8ded,_0x55ae42,_0x6e33b6){logger[_0x3455('0x12')]('['+[_0xa26b63[_0x3455('0x13')]()]+_0x3455('0x22'),_0x2f8ded);return new Promise(function(_0x5ef806,_0x1ae73c){var _0x42fb56={'method':_0x3455('0x23'),'uri':_0x55ae42+_0x3455('0x24')+_0x6e33b6,'body':{'user_name':_0x2f8ded[_0x3455('0x25')],'roles':'user','first_name':_0x2f8ded[_0x3455('0x25')],'active':_0x3455('0x26'),'date_format':'System','phone':_0x2f8ded[_0x3455('0x25')]},'auth':_0x41d0a4,'json':!![]};return rp(_0x42fb56)['then'](function(_0x3ac410){logger[_0x3455('0x12')]('['+[_0xa26b63[_0x3455('0x13')]()]+_0x3455('0x27'),_0x3ac410['result']);_0x2f8ded[_0x3455('0x28')]=_0x3ac410['result'][_0x3455('0x11')];_0x5ef806(_0x2f8ded);})[_0x3455('0x15')](function(_0x156805){logger['error']('['+[_0xa26b63[_0x3455('0x13')]()]+']',_0x156805[_0x3455('0x17')]);_0x1ae73c(_0x156805['message']);});});}function getEndUser(_0x4a335a,_0x30bb10,_0x448340,_0x2b0a6e,_0x537f47){return function(_0x8c34db){logger[_0x3455('0x12')]('['+[_0x4a335a[_0x3455('0x13')]()]+'],\x20getEndUser\x20input\x20crm',_0x8c34db);return new Promise(function(_0x473505,_0x319a5f){var _0x4f0467={'method':_0x3455('0xb'),'uri':_0x448340+_0x3455('0x29')+_0x8c34db['endUserNumber']+'&'+_0x2b0a6e+'&'+_0x537f47,'auth':_0x30bb10,'json':!![]};return rp(_0x4f0467)[_0x3455('0xd')](function(_0x2839f5){if(_0x2839f5['result'][_0x3455('0xf')]>0x0){_0x8c34db[_0x3455('0x28')]=_0x2839f5['result'][0x0][_0x3455('0x11')];logger[_0x3455('0x12')]('['+[_0x4a335a[_0x3455('0x13')]()]+'],\x20getEndUser\x20crm',_0x8c34db);_0x473505(_0x8c34db);}else{return createEndUser(_0x4a335a,_0x30bb10,_0x8c34db,_0x448340,_0x2b0a6e)[_0x3455('0xd')](function(_0x5d3231){logger[_0x3455('0x12')]('['+[_0x4a335a[_0x3455('0x13')]()]+'],\x20createEndUser\x20crm',_0x5d3231);_0x473505(_0x5d3231);});}})['catch'](function(_0x40c298){logger[_0x3455('0x16')]('['+[_0x4a335a['toUpperCase']()]+']',_0x40c298[_0x3455('0x17')]);_0x319a5f(_0x40c298[_0x3455('0x17')]);});});};}function getCustomFields(_0x27a030,_0x515a37){var _0x36f220={};if(_0x27a030[_0x3455('0xf')]>0x0){_[_0x3455('0x2a')](_0x27a030,function(_0x28e8ad){if(_0x28e8ad[_0x3455('0x2b')]===_0x3455('0x2c')&&_0x28e8ad[_0x3455('0x2d')]&&!_0x28e8ad[_0x3455('0x2e')]){_0x36f220[_0x28e8ad['idField'][_0x3455('0x2f')]()]=_0x28e8ad['content'][_0x3455('0x30')]();}else if(_0x28e8ad[_0x3455('0x2b')]==='string'&&_0x28e8ad[_0x3455('0x31')]&&_0x28e8ad[_0x3455('0x2e')]){_0x36f220[_0x28e8ad['idField'][_0x3455('0x2f')]()]=_0x28e8ad[_0x3455('0x32')][_0x3455('0x30')]();}else if(_0x28e8ad[_0x3455('0x2b')]===_0x3455('0x33')&&_0x28e8ad['variableName']&&_0x28e8ad[_0x3455('0x31')]&&_0x28e8ad[_0x3455('0x2e')]){_0x36f220[_0x28e8ad[_0x3455('0x31')][_0x3455('0x2f')]()]=_0x515a37[_0x28e8ad[_0x3455('0x34')]]['toString']();}else if(_0x28e8ad[_0x3455('0x2b')]===_0x3455('0x35')&&_0x28e8ad[_0x3455('0x36')]&&_0x28e8ad[_0x3455('0x36')][_0x3455('0x37')]&&_0x28e8ad['idField']&&_0x28e8ad[_0x3455('0x2e')]){_0x36f220[_0x28e8ad[_0x3455('0x31')][_0x3455('0x2f')]()]=_0x515a37[_0x28e8ad[_0x3455('0x36')][_0x3455('0x37')][_0x3455('0x2f')]()][_0x3455('0x30')]();}});}return _0x36f220;}function getTicket(_0x5acb43,_0xfb18ce,_0x3d3553,_0x59a3e4,_0x3564ba,_0x6dccb8){return function(_0x32de17){logger[_0x3455('0x12')]('['+[_0x5acb43['toUpperCase']()]+']\x20getTicket\x20input\x20crm',_0x32de17);return new Promise(function(_0x2e32fb,_0x380e26){var _0x1531d4=_0x5acb43[_0x3455('0x2f')]()===_0x3455('0x38')?_0x32de17['userId']:_0x32de17['endUserId'];var _0x27fb26={'method':_0x3455('0x23'),'uri':_0x3d3553+_0x3455('0x39')+'?'+_0x6dccb8,'body':Object[_0x3455('0x3a')]({},{'active':'true','caller_id':_0x1531d4,'assigned_to':_0x32de17[_0x3455('0x1e')],'short_description':intUtil[_0x3455('0x3b')](_0x59a3e4[_0x3455('0x3c')],_0x3564ba,'\x20'),'description':intUtil[_0x3455('0x3b')](_0x59a3e4[_0x3455('0x3d')],_0x3564ba,'\x0a')},getCustomFields(_0x59a3e4[_0x3455('0x3e')],_0x3564ba)),'auth':_0xfb18ce,'json':!![]};return rp(_0x27fb26)[_0x3455('0xd')](function(_0x24d8c7){logger[_0x3455('0x12')]('['+[_0x5acb43[_0x3455('0x13')]()]+_0x3455('0x3f'),_0x24d8c7[_0x3455('0xe')]);_0x32de17[_0x3455('0x40')]=_0x24d8c7['result'][_0x3455('0x11')];_0x32de17['ticketNumber']=_0x24d8c7[_0x3455('0xe')][_0x3455('0x41')];logger[_0x3455('0x12')]('['+[_0x5acb43['toUpperCase']()]+_0x3455('0x42'),_0x32de17);_0x2e32fb(_0x32de17);})[_0x3455('0x15')](function(_0x5a90ac){logger[_0x3455('0x16')]('['+[_0x5acb43['toUpperCase']()]+']',_0x5a90ac[_0x3455('0x17')]);_0x380e26(_0x5a90ac['message']);});});};}function createRemoteTag(_0x2b26ff,_0x29e075,_0x496a5e,_0x59eb79){return new Promise(function(_0x13f0af,_0x862d10){var _0x375d74={'method':_0x3455('0x23'),'uri':_0x496a5e+_0x3455('0x43')+'?'+_0x59eb79,'body':{'short_description':_0x2b26ff,'global':!![],'active':!![],'name':_0x2b26ff},'auth':_0x29e075,'json':!![]};return rp(_0x375d74)[_0x3455('0xd')](function(_0x4ce05f){var _0x190088=_0x4ce05f[_0x3455('0xe')][_0x3455('0x11')];_0x13f0af(_0x190088);});});}function getRemoteTag(_0x1ba65f,_0x5b521a,_0x5a5828,_0x542e18,_0x288f7f){return new Promise(function(_0x427a72,_0xbb8de3){var _0x276bfc={'method':_0x3455('0xb'),'uri':_0x5a5828+'label'+'?sysparm_query=name%3D'+_0x1ba65f+'&'+_0x542e18,'auth':_0x5b521a,'json':!![]};return rp(_0x276bfc)[_0x3455('0xd')](function(_0x799288){if(_0x799288['result'][_0x3455('0xf')]>0x0){var _0x4e16d9=_0x799288[_0x3455('0xe')][0x0][_0x3455('0x11')];_0x427a72(_0x4e16d9);}else{return createRemoteTag(_0x1ba65f,_0x5b521a,_0x5a5828,_0x542e18)[_0x3455('0xd')](function(_0x23f9a5){_0x427a72(_0x23f9a5);});}});});}function assignTagToIncident(_0x531bab,_0x5643bc,_0xc0bb93,_0x40a2b3,_0x3ef564){return new Promise(function(_0x59a3f8,_0x427e2e){var _0x3d448b={'method':'POST','uri':_0xc0bb93+_0x3455('0x44')+'?'+_0x3ef564,'body':{'label':_0x531bab,'table':_0x3455('0x39'),'id_type':_0x3455('0x45'),'table_key':_0x40a2b3[_0x3455('0x40')],'title':'Incident\x20-\x20'+_0x40a2b3[_0x3455('0x46')],'id_display':_0x40a2b3['ticketNumber']},'auth':_0x5643bc,'json':!![]};return rp(_0x3d448b)['then'](function(_0x58f65a){_0x59a3f8();})['catch'](function(){_0x59a3f8();});});}function manageTags(_0x3c7c86,_0x37c393,_0x30dff5,_0x2c0c7a,_0x9c4ca4,_0x41765f,_0x243647){return new Promise(function(_0x39e6f9,_0x5ef77b){var _0x182944=[];_0x37c393['forEach'](function(_0x39b1c7){_0x182944[_0x3455('0x47')](getRemoteTag(_0x39b1c7,_0x30dff5,_0x2c0c7a,_0x41765f,_0x243647));});return Promise['all'](_0x182944)[_0x3455('0xd')](function(_0x248d0){if(_0x248d0[_0x3455('0xf')]){logger[_0x3455('0x12')]('['+[_0x3c7c86[_0x3455('0x13')]()]+_0x3455('0x48'),_0x248d0);var _0x35ddf7=[];_0x248d0[_0x3455('0x2a')](function(_0x491c60){_0x35ddf7['push'](assignTagToIncident(_0x491c60,_0x30dff5,_0x2c0c7a,_0x9c4ca4,_0x41765f));});return Promise[_0x3455('0x49')](_0x35ddf7)[_0x3455('0xd')](function(){_0x39e6f9();})[_0x3455('0x15')](function(){_0x39e6f9();});}else{_0x39e6f9();}});});}function getTags(_0x199fce,_0x554b5b,_0x13ff57,_0x380e2b,_0x14e937,_0x3d7edb){return function(_0x3cf7de){return new Promise(function(_0x2ed048,_0x5c63e1){var _0x4a666a=[];var _0x4dbfd9=_0x380e2b[_0x3455('0x4a')];if(_0x4dbfd9&&_0x4dbfd9[_0x3455('0xf')]>0x0){_0x4a666a=_[_0x3455('0x4b')](_0x4dbfd9,_0x3455('0x37'));}if(_0x4a666a[_0x3455('0xf')]>0x0){return manageTags(_0x199fce,_0x4a666a,_0x554b5b,_0x13ff57,_0x3cf7de,_0x14e937,_0x3d7edb)[_0x3455('0xd')](function(){_0x2ed048(_0x3cf7de);});}else{_0x2ed048(_0x3cf7de);}});};}function emit(_0x2ff9fb,_0x4c653a,_0x5e9f8f){var _0x3f4fd3=_0x3455('0x4c')+_0x3455('0x4d')+_0x3455('0x4e')+_0x3455('0x4f');var _0x52ff0c={'uri':_0x2ff9fb+_0x3455('0x50')+_0x5e9f8f+_0x3f4fd3};io['to'](util['format'](_0x3455('0x51'),_0x4c653a))[_0x3455('0x52')](_0x3455('0x53'),_0x52ff0c);}exports['cs']=function(_0x29440c,_0x3d65e4,_0x1320ee,_0x2f863,_0xcc98c6,_0x3e7949,_0x40521b,_0x35c3bf){var _0xb31504={};var _0x4f6de3={'user':_0x3e7949[_0x3455('0x54')],'pass':_0x3e7949[_0x3455('0x55')]};var _0x1a4e43=_0x3455('0x56');var _0x23b1e6=_0x3455('0x57');_0x3e7949[_0x3455('0x58')]=intUtil['stripTrailingSlash'](_0x3e7949['remoteUri']);_0x3e7949[_0x3455('0x59')]=intUtil['stripTrailingSlash'](_0x3e7949[_0x3455('0x59')]);var _0xffef86=util[_0x3455('0x5a')](_0x3455('0x5b'),_0x3e7949['remoteUri']);_0xb31504['userEmail']=!_[_0x3455('0x5c')](_0x2f863)?_0x2f863[_0x3455('0x5d')]:null;_0xb31504[_0x3455('0x1f')]=_0x3e7949[_0x3455('0x5d')];_0xb31504[_0x3455('0x25')]=_0x35c3bf['toLowerCase']()===_0x3455('0x38')?_0x3d65e4['destcalleridnum']:_0x3d65e4['calleridnum'];_0xb31504['callDirection']=_0x35c3bf==='queue'||_0x35c3bf===_0x3455('0x5e')?'queue':_0x3455('0x38');var _0xbba885=util['format'](_0x3455('0x5f'),_0x3e7949[_0x3455('0x59')],_0x3d65e4[_0x3455('0x60')],md5(_0x3d65e4[_0x3455('0x60')]));if(_0xcc98c6&&_0xcc98c6[_0x3455('0x61')]){logger[_0x3455('0x12')]('[QUEUE]',_0x3455('0x62'));_0x3d65e4['recordingURL']=_0xbba885;}else if(_0x40521b&&_0x40521b['recordingFormat']&&_0x40521b[_0x3455('0x63')]!==_0x3455('0x64')){logger[_0x3455('0x12')](_0x3455('0x65'),'Recording\x20is\x20enabled!');_0x3d65e4[_0x3455('0x66')]=_0xbba885;}else{_0x3d65e4['recordingURL']='';}return getAdminUser(_0x35c3bf,_0x4f6de3,_0xb31504,_0xffef86,_0x23b1e6,_0x1a4e43)[_0x3455('0xd')](getUser(_0x35c3bf,_0x4f6de3,_0xffef86,_0x23b1e6,_0x1a4e43))[_0x3455('0xd')](getEndUser(_0x35c3bf,_0x4f6de3,_0xffef86,_0x23b1e6,_0x1a4e43))[_0x3455('0xd')](getTicket(_0x35c3bf,_0x4f6de3,_0xffef86,_0x1320ee,_0x3d65e4,_0x23b1e6))[_0x3455('0xd')](function(_0xdbe2ab){logger[_0x3455('0x12')](util['format'](_0x3455('0x67'),_0xdbe2ab[_0x3455('0x40')]));logger[_0x3455('0x12')](util['format'](_0x3455('0x68'),_0x35c3bf));if(_0x35c3bf!==_0x3455('0x5e')){logger[_0x3455('0x12')]('['+[_0x35c3bf[_0x3455('0x13')]()]+']','Displaying\x20call\x20in\x20a\x20new\x20tab...');emit(_0x3e7949[_0x3455('0x58')],_0x2f863[_0x3455('0x37')],_0xdbe2ab['ticketId']);}})[_0x3455('0x15')](function(_0x1da8d6){logger[_0x3455('0x16')]('['+[_0x35c3bf['toUpperCase']()]+_0x3455('0x69'),util[_0x3455('0x6a')](_0x1da8d6,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0x0434=['isNil','email','calleridnum','callDirection','abandoned','queue','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','none','[OUTBOUND]','call\x20direction:\x20%s','Displaying\x20call\x20in\x20a\x20new\x20tab...',']\x20Error\x20running\x20ServiceNow\x20integration','inspect','lodash','bluebird','request-promise','util','md5','../../../../config/environment','../../../../config/logger','servicenow','redis','defaults','socket.io-emitter','GET','then','result','length','adminId','sys_id','info','toUpperCase','],\x20getAdminUser\x20crm','catch','error','message','validateEmail','sys_user?sysparm_query=email%3D','userEmail','],\x20getUser\x20rp\x20obj','],\x20getUser\x20entity','active','true','adminEmail','],\x20getUser\x20crm',']\x20using\x20admin\x20profile','userId','POST','sys_user?','endUserNumber','],\x20EndUser\x20schema','endUserId','],\x20getEndUser\x20input\x20crm','sys_user?sysparm_query=phone%3D','],\x20getEndUser\x20crm','],\x20createEndUser\x20crm','forEach','type','string','customField','content','idField','toLowerCase','toString','variable','variableName','customVariable','Variable','name',']\x20getTicket\x20input\x20crm','outbound','incident','assign','getString','Descriptions','Fields','ticketId','ticketNumber',']\x20getTicket\x20crm','label','?sysparm_query=name%3D','Incident\x20-\x20','push','all',']\x20arrayPromises:\x20IDs\x20in\x20table\x20label','%26sysparm_record_target%3Dincident','%26sysparm_record_row%3D1%26sysparm_record_rows%3D39','%26sysparm_record_list%3Dactive%253Dtrue','/nav_to.do?uri=incident.do?sys_id%3D','user:%s','emit','trigger:browser:url','password','sysparm_limit=1','remoteUri','stripTrailingSlash','serverUrl','format','%s/api/now/table/'];(function(_0x508a7c,_0x14b50f){var _0x5e6dbd=function(_0x3cb3e9){while(--_0x3cb3e9){_0x508a7c['push'](_0x508a7c['shift']());}};_0x5e6dbd(++_0x14b50f);}(_0x0434,0x1ad));var _0x4043=function(_0x45c981,_0x2ad2d4){_0x45c981=_0x45c981-0x0;var _0x4f62c8=_0x0434[_0x45c981];return _0x4f62c8;};'use strict';var _=require(_0x4043('0x0'));var Promise=require(_0x4043('0x1'));var rp=require(_0x4043('0x2'));var util=require(_0x4043('0x3'));var md5=require(_0x4043('0x4'));var Redis=require('ioredis');var intUtil=require('./util');var config=require(_0x4043('0x5'));var logger=require(_0x4043('0x6'))(_0x4043('0x7'));config[_0x4043('0x8')]=_[_0x4043('0x9')](config[_0x4043('0x8')],{'host':'localhost','port':0x18eb});var io=require(_0x4043('0xa'))(new Redis(config[_0x4043('0x8')]));function getAdminUser(_0x5080e5,_0x56355c,_0x14694d,_0x2b959b,_0x3d42ca,_0x31cb1f){return new Promise(function(_0x30f083,_0x22e13c){var _0xaff9dd={'method':_0x4043('0xb'),'uri':_0x2b959b+'sys_user?sysparm_query=user_name%3Dadmin'+'&'+_0x3d42ca+'&'+_0x31cb1f,'auth':_0x56355c,'json':!![]};return rp(_0xaff9dd)[_0x4043('0xc')](function(_0xb765cd){if(_0xb765cd[_0x4043('0xd')][_0x4043('0xe')]>0x0){_0x14694d[_0x4043('0xf')]=_0xb765cd['result'][0x0][_0x4043('0x10')];}logger[_0x4043('0x11')]('['+[_0x5080e5[_0x4043('0x12')]()]+_0x4043('0x13'),_0x14694d);_0x30f083(_0x14694d);})[_0x4043('0x14')](function(_0x5bb2a6){logger[_0x4043('0x15')]('['+[_0x5080e5[_0x4043('0x12')]()]+']',_0x5bb2a6[_0x4043('0x16')]);_0x22e13c(_0x5bb2a6[_0x4043('0x16')]);});});}function getUser(_0x2979a4,_0x4b1b2a,_0x234819,_0x3d6440,_0x1051db){return function(_0x33dc96){logger[_0x4043('0x11')]('['+[_0x2979a4[_0x4043('0x12')]()]+'],\x20getUser\x20input\x20crm',_0x33dc96);return new Promise(function(_0xb07abf,_0x2e5191){if(intUtil[_0x4043('0x17')](_0x33dc96['userEmail'])){var _0x3767ed={'method':_0x4043('0xb'),'uri':_0x234819+_0x4043('0x18')+_0x33dc96[_0x4043('0x19')]+'&'+_0x3d6440+'&'+_0x1051db,'auth':_0x4b1b2a,'json':!![]};logger[_0x4043('0x11')]('['+[_0x2979a4['toUpperCase']()]+_0x4043('0x1a'),_0x3767ed);return rp(_0x3767ed)['then'](function(_0x509531){logger[_0x4043('0x11')]('['+[_0x2979a4[_0x4043('0x12')]()]+_0x4043('0x1b'),_0x509531);if(_0x509531[_0x4043('0xd')][_0x4043('0xe')]>0x0&&String(_0x509531['result'][0x0][_0x4043('0x1c')])===_0x4043('0x1d')){_0x33dc96['userId']=_0x509531['result'][0x0][_0x4043('0x10')];}else{_0x33dc96['userId']=_0x33dc96['adminId'];_0x33dc96[_0x4043('0x19')]=_0x33dc96[_0x4043('0x1e')];}logger['info']('['+[_0x2979a4[_0x4043('0x12')]()]+_0x4043('0x1f'),_0x33dc96);_0xb07abf(_0x33dc96);})[_0x4043('0x14')](function(_0x3bbaf6){logger[_0x4043('0x15')]('['+[_0x2979a4[_0x4043('0x12')]()]+']',_0x3bbaf6[_0x4043('0x16')]);_0x2e5191(_0x3bbaf6[_0x4043('0x16')]);});}else{logger['info']('['+[_0x2979a4['toUpperCase']()]+_0x4043('0x20'));_0x33dc96[_0x4043('0x21')]=_0x33dc96[_0x4043('0xf')];_0x33dc96['userEmail']=_0x33dc96['adminEmail'];_0xb07abf(_0x33dc96);}});};}function createEndUser(_0x22a94a,_0xd8f24f,_0x58100c,_0x3cbbf1,_0x400c94){logger['info']('['+[_0x22a94a[_0x4043('0x12')]()]+'],\x20createEndUser\x20input\x20crm',_0x58100c);return new Promise(function(_0x769a86,_0x25f924){var _0x21509={'method':_0x4043('0x22'),'uri':_0x3cbbf1+_0x4043('0x23')+_0x400c94,'body':{'user_name':_0x58100c[_0x4043('0x24')],'roles':'user','first_name':_0x58100c[_0x4043('0x24')],'active':_0x4043('0x1d'),'date_format':'System','phone':_0x58100c[_0x4043('0x24')]},'auth':_0xd8f24f,'json':!![]};return rp(_0x21509)[_0x4043('0xc')](function(_0x20ca80){logger[_0x4043('0x11')]('['+[_0x22a94a[_0x4043('0x12')]()]+_0x4043('0x25'),_0x20ca80[_0x4043('0xd')]);_0x58100c[_0x4043('0x26')]=_0x20ca80['result']['sys_id'];_0x769a86(_0x58100c);})['catch'](function(_0x4d7507){logger[_0x4043('0x15')]('['+[_0x22a94a[_0x4043('0x12')]()]+']',_0x4d7507[_0x4043('0x16')]);_0x25f924(_0x4d7507['message']);});});}function getEndUser(_0x469c09,_0x5db8cb,_0x5bb8c9,_0x535c46,_0x1fa348){return function(_0x183be3){logger[_0x4043('0x11')]('['+[_0x469c09[_0x4043('0x12')]()]+_0x4043('0x27'),_0x183be3);return new Promise(function(_0x190bf3,_0x427b6a){var _0x364ffb={'method':_0x4043('0xb'),'uri':_0x5bb8c9+_0x4043('0x28')+_0x183be3[_0x4043('0x24')]+'&'+_0x535c46+'&'+_0x1fa348,'auth':_0x5db8cb,'json':!![]};return rp(_0x364ffb)[_0x4043('0xc')](function(_0x3a8f39){if(_0x3a8f39['result']['length']>0x0){_0x183be3[_0x4043('0x26')]=_0x3a8f39[_0x4043('0xd')][0x0][_0x4043('0x10')];logger['info']('['+[_0x469c09[_0x4043('0x12')]()]+_0x4043('0x29'),_0x183be3);_0x190bf3(_0x183be3);}else{return createEndUser(_0x469c09,_0x5db8cb,_0x183be3,_0x5bb8c9,_0x535c46)[_0x4043('0xc')](function(_0xd115e0){logger[_0x4043('0x11')]('['+[_0x469c09['toUpperCase']()]+_0x4043('0x2a'),_0xd115e0);_0x190bf3(_0xd115e0);});}})['catch'](function(_0x4c1986){logger[_0x4043('0x15')]('['+[_0x469c09['toUpperCase']()]+']',_0x4c1986[_0x4043('0x16')]);_0x427b6a(_0x4c1986[_0x4043('0x16')]);});});};}function getCustomFields(_0xda2809,_0x45ec00){var _0x1e5212={};if(_0xda2809[_0x4043('0xe')]>0x0){_[_0x4043('0x2b')](_0xda2809,function(_0x5ec52e){if(_0x5ec52e[_0x4043('0x2c')]===_0x4043('0x2d')&&_0x5ec52e['nameField']&&!_0x5ec52e[_0x4043('0x2e')]){_0x1e5212[_0x5ec52e['idField']['toLowerCase']()]=_0x5ec52e[_0x4043('0x2f')]['toString']();}else if(_0x5ec52e[_0x4043('0x2c')]==='string'&&_0x5ec52e['idField']&&_0x5ec52e[_0x4043('0x2e')]){_0x1e5212[_0x5ec52e[_0x4043('0x30')][_0x4043('0x31')]()]=_0x5ec52e[_0x4043('0x2f')][_0x4043('0x32')]();}else if(_0x5ec52e['type']===_0x4043('0x33')&&_0x5ec52e[_0x4043('0x34')]&&_0x5ec52e[_0x4043('0x30')]&&_0x5ec52e[_0x4043('0x2e')]){_0x1e5212[_0x5ec52e[_0x4043('0x30')][_0x4043('0x31')]()]=_0x45ec00[_0x5ec52e[_0x4043('0x34')]][_0x4043('0x32')]();}else if(_0x5ec52e[_0x4043('0x2c')]===_0x4043('0x35')&&_0x5ec52e['Variable']&&_0x5ec52e[_0x4043('0x36')][_0x4043('0x37')]&&_0x5ec52e['idField']&&_0x5ec52e[_0x4043('0x2e')]){_0x1e5212[_0x5ec52e[_0x4043('0x30')]['toLowerCase']()]=_0x45ec00[_0x5ec52e['Variable']['name'][_0x4043('0x31')]()][_0x4043('0x32')]();}});}return _0x1e5212;}function getTicket(_0x466f85,_0x41699b,_0x14ef07,_0x29420e,_0x5c4c4d,_0x532253){return function(_0x36f069){logger[_0x4043('0x11')]('['+[_0x466f85[_0x4043('0x12')]()]+_0x4043('0x38'),_0x36f069);return new Promise(function(_0xecf346,_0x474dc2){var _0x4e748b=_0x466f85[_0x4043('0x31')]()===_0x4043('0x39')?_0x36f069[_0x4043('0x21')]:_0x36f069[_0x4043('0x26')];var _0x21990b={'method':'POST','uri':_0x14ef07+_0x4043('0x3a')+'?'+_0x532253,'body':Object[_0x4043('0x3b')]({},{'active':_0x4043('0x1d'),'caller_id':_0x4e748b,'assigned_to':_0x36f069[_0x4043('0x21')],'short_description':intUtil[_0x4043('0x3c')](_0x29420e['Subjects'],_0x5c4c4d,'\x20'),'description':intUtil[_0x4043('0x3c')](_0x29420e[_0x4043('0x3d')],_0x5c4c4d,'\x0a')},getCustomFields(_0x29420e[_0x4043('0x3e')],_0x5c4c4d)),'auth':_0x41699b,'json':!![]};return rp(_0x21990b)[_0x4043('0xc')](function(_0x2c332b){logger[_0x4043('0x11')]('['+[_0x466f85[_0x4043('0x12')]()]+']\x20POST\x20incident\x20entity\x20schema',_0x2c332b[_0x4043('0xd')]);_0x36f069[_0x4043('0x3f')]=_0x2c332b[_0x4043('0xd')]['sys_id'];_0x36f069[_0x4043('0x40')]=_0x2c332b[_0x4043('0xd')]['number'];logger[_0x4043('0x11')]('['+[_0x466f85[_0x4043('0x12')]()]+_0x4043('0x41'),_0x36f069);_0xecf346(_0x36f069);})[_0x4043('0x14')](function(_0xb9d378){logger[_0x4043('0x15')]('['+[_0x466f85[_0x4043('0x12')]()]+']',_0xb9d378[_0x4043('0x16')]);_0x474dc2(_0xb9d378[_0x4043('0x16')]);});});};}function createRemoteTag(_0x5643a4,_0x305ea1,_0xc7d8ff,_0x4bfe71){return new Promise(function(_0x5c0c84,_0x2addbe){var _0x194f98={'method':_0x4043('0x22'),'uri':_0xc7d8ff+_0x4043('0x42')+'?'+_0x4bfe71,'body':{'short_description':_0x5643a4,'global':!![],'active':!![],'name':_0x5643a4},'auth':_0x305ea1,'json':!![]};return rp(_0x194f98)['then'](function(_0x258336){var _0x28b38c=_0x258336[_0x4043('0xd')]['sys_id'];_0x5c0c84(_0x28b38c);});});}function getRemoteTag(_0x5e6fc4,_0x1b7f64,_0x5a1c5f,_0x1e5542,_0x2656be){return new Promise(function(_0x931925,_0x3adc9f){var _0x452533={'method':_0x4043('0xb'),'uri':_0x5a1c5f+_0x4043('0x42')+_0x4043('0x43')+_0x5e6fc4+'&'+_0x1e5542,'auth':_0x1b7f64,'json':!![]};return rp(_0x452533)['then'](function(_0x47343c){if(_0x47343c['result'][_0x4043('0xe')]>0x0){var _0x243dd8=_0x47343c['result'][0x0]['sys_id'];_0x931925(_0x243dd8);}else{return createRemoteTag(_0x5e6fc4,_0x1b7f64,_0x5a1c5f,_0x1e5542)['then'](function(_0x34307f){_0x931925(_0x34307f);});}});});}function assignTagToIncident(_0x141f64,_0x56dfdd,_0x364e54,_0x1301d5,_0x1d24e0){return new Promise(function(_0x4d5f4b,_0x252eab){var _0x3a4364={'method':_0x4043('0x22'),'uri':_0x364e54+'label_entry'+'?'+_0x1d24e0,'body':{'label':_0x141f64,'table':_0x4043('0x3a'),'id_type':'Incident','table_key':_0x1301d5[_0x4043('0x3f')],'title':_0x4043('0x44')+_0x1301d5[_0x4043('0x40')],'id_display':_0x1301d5['ticketNumber']},'auth':_0x56dfdd,'json':!![]};return rp(_0x3a4364)[_0x4043('0xc')](function(_0x37c242){_0x4d5f4b();})[_0x4043('0x14')](function(){_0x4d5f4b();});});}function manageTags(_0x55bbc6,_0x5e7ad1,_0x3387ff,_0x2b4b67,_0x58bd88,_0x268f98,_0x3ad29b){return new Promise(function(_0x263cc7,_0xd9d0fd){var _0x3c193f=[];_0x5e7ad1[_0x4043('0x2b')](function(_0x5b89a9){_0x3c193f[_0x4043('0x45')](getRemoteTag(_0x5b89a9,_0x3387ff,_0x2b4b67,_0x268f98,_0x3ad29b));});return Promise[_0x4043('0x46')](_0x3c193f)[_0x4043('0xc')](function(_0x2567b3){if(_0x2567b3[_0x4043('0xe')]){logger[_0x4043('0x11')]('['+[_0x55bbc6[_0x4043('0x12')]()]+_0x4043('0x47'),_0x2567b3);var _0x59172c=[];_0x2567b3[_0x4043('0x2b')](function(_0x4d24b6){_0x59172c['push'](assignTagToIncident(_0x4d24b6,_0x3387ff,_0x2b4b67,_0x58bd88,_0x268f98));});return Promise[_0x4043('0x46')](_0x59172c)[_0x4043('0xc')](function(){_0x263cc7();})[_0x4043('0x14')](function(){_0x263cc7();});}else{_0x263cc7();}});});}function getTags(_0x1ebc3b,_0x36937e,_0x47476b,_0x532af2,_0x50023c,_0x900270){return function(_0x5bbbc9){return new Promise(function(_0x5627f8,_0xd779ec){var _0x3dc7c3=[];var _0x5d6076=_0x532af2['Tags'];if(_0x5d6076&&_0x5d6076['length']>0x0){_0x3dc7c3=_['map'](_0x5d6076,_0x4043('0x37'));}if(_0x3dc7c3['length']>0x0){return manageTags(_0x1ebc3b,_0x3dc7c3,_0x36937e,_0x47476b,_0x5bbbc9,_0x50023c,_0x900270)['then'](function(){_0x5627f8(_0x5bbbc9);});}else{_0x5627f8(_0x5bbbc9);}});};}function emit(_0x3ad715,_0x5075ce,_0x1317e6){var _0x274d64=_0x4043('0x48')+_0x4043('0x49')+_0x4043('0x4a')+'%255EORDERBYDESCnumber';var _0x380a2d={'uri':_0x3ad715+_0x4043('0x4b')+_0x1317e6+_0x274d64};io['to'](util['format'](_0x4043('0x4c'),_0x5075ce))[_0x4043('0x4d')](_0x4043('0x4e'),_0x380a2d);}exports['cs']=function(_0x2affbb,_0x10b360,_0x2b45b5,_0x2d1e53,_0x1b58c1,_0x5d8145,_0x38e97c,_0x2a662e){var _0x1fabf4={};var _0x29a4de={'user':_0x5d8145['username'],'pass':_0x5d8145[_0x4043('0x4f')]};var _0x146899=_0x4043('0x50');var _0x2bd616='sysparm_display_value=true';_0x5d8145[_0x4043('0x51')]=intUtil[_0x4043('0x52')](_0x5d8145[_0x4043('0x51')]);_0x5d8145['serverUrl']=intUtil[_0x4043('0x52')](_0x5d8145[_0x4043('0x53')]);var _0x5c774a=util[_0x4043('0x54')](_0x4043('0x55'),_0x5d8145[_0x4043('0x51')]);_0x1fabf4['userEmail']=!_[_0x4043('0x56')](_0x2d1e53)?_0x2d1e53[_0x4043('0x57')]:null;_0x1fabf4[_0x4043('0x1e')]=_0x5d8145[_0x4043('0x57')];_0x1fabf4['endUserNumber']=_0x2a662e[_0x4043('0x31')]()===_0x4043('0x39')?_0x10b360['destcalleridnum']:_0x10b360[_0x4043('0x58')];_0x1fabf4[_0x4043('0x59')]=_0x2a662e==='queue'||_0x2a662e===_0x4043('0x5a')?_0x4043('0x5b'):_0x4043('0x39');var _0x8964de=util['format'](_0x4043('0x5c'),_0x5d8145[_0x4043('0x53')],_0x10b360[_0x4043('0x5d')],md5(_0x10b360['uniqueid']));if(_0x1b58c1&&_0x1b58c1['monitor_format']){logger['info'](_0x4043('0x5e'),_0x4043('0x5f'));_0x10b360[_0x4043('0x60')]=_0x8964de;}else if(_0x38e97c&&_0x38e97c['recordingFormat']&&_0x38e97c['recordingFormat']!==_0x4043('0x61')){logger[_0x4043('0x11')](_0x4043('0x62'),'Recording\x20is\x20enabled!');_0x10b360[_0x4043('0x60')]=_0x8964de;}else{_0x10b360[_0x4043('0x60')]='';}return getAdminUser(_0x2a662e,_0x29a4de,_0x1fabf4,_0x5c774a,_0x2bd616,_0x146899)['then'](getUser(_0x2a662e,_0x29a4de,_0x5c774a,_0x2bd616,_0x146899))[_0x4043('0xc')](getEndUser(_0x2a662e,_0x29a4de,_0x5c774a,_0x2bd616,_0x146899))[_0x4043('0xc')](getTicket(_0x2a662e,_0x29a4de,_0x5c774a,_0x2b45b5,_0x10b360,_0x2bd616))[_0x4043('0xc')](function(_0x18023a){logger['info'](util[_0x4043('0x54')]('The\x20ticket\x20ID\x20is:\x20%s',_0x18023a['ticketId']));logger[_0x4043('0x11')](util[_0x4043('0x54')](_0x4043('0x63'),_0x2a662e));if(_0x2a662e!=='abandoned'){logger[_0x4043('0x11')]('['+[_0x2a662e[_0x4043('0x12')]()]+']',_0x4043('0x64'));emit(_0x5d8145['remoteUri'],_0x2d1e53['name'],_0x18023a[_0x4043('0x3f')]);}})[_0x4043('0x14')](function(_0x10a538){logger[_0x4043('0x15')]('['+[_0x2a662e['toUpperCase']()]+_0x4043('0x65'),util[_0x4043('0x66')](_0x10a538,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index 508bdd8..2d3f40f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fbb=['localhost','emit','info','Creating\x20new\x20ticket...','name','getString','Subjects','created_by','description','date_start','toISOString','slice','replace','parent_id','parent_type','Contacts','parent_name','length','forEach','variableName','idField','set_entry','JSON','Calls','format','apiKey','toString','base64','get_server_info','stringify','isNil','Getting\x20agent\x20with\x20name','get_entry_list','Employees','INSTR\x20(\x20users.user_name,\x20\x22%s\x22)\x20>\x200','user_name','entry_list','find','name_value_list','value','Agent\x20found!','resolve','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!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','first_name','<unknown>','Caller\x20-\x20%s','then','Enduser\x20created.','debug','[HTTP]','merge','map','type','string','customField','nameField','toLowerCase','custom_fields','push','content','variable','customVariable','Variable','POST','password','PLAIN','xCALLY\x20Motion\x20integration','sessionID','Account\x20%d\x20is\x20not\x20valid','queue','remoteUri','serverUrl','stripTrailingSlash','uri','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','uniqueid','recordingURL','The\x20User\x20ID\x20is:','calleridname','The\x20Enduser\x20ID\x20is:','Fields','Inbound','Ticket\x20created!','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','catch','error','%s/service/v4_1/rest.php','recordingFormat','none','[OUTBOUND]','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','destcalleridname','destcalleridnum','Outbound','trigger:browser:url','abandoned','[ABANDONED]','calleridnum','contacts','request-promise','bluebird','util','ioredis','./util','../../../../config/environment','../../../../config/logger','sugarcrm','defaults','redis'];(function(_0x38bad2,_0x10573d){var _0x591c86=function(_0x2681b8){while(--_0x2681b8){_0x38bad2['push'](_0x38bad2['shift']());}};_0x591c86(++_0x10573d);}(_0x5fbb,0x1ea));var _0xb5fb=function(_0x17d9e3,_0x1f969c){_0x17d9e3=_0x17d9e3-0x0;var _0x14192d=_0x5fbb[_0x17d9e3];return _0x14192d;};'use strict';var _=require('lodash');var rp=require(_0xb5fb('0x0'));var BPromise=require(_0xb5fb('0x1'));var md5=require('md5');var util=require(_0xb5fb('0x2'));var Redis=require(_0xb5fb('0x3'));var intUtil=require(_0xb5fb('0x4'));var config=require(_0xb5fb('0x5'));var logger=require(_0xb5fb('0x6'))(_0xb5fb('0x7'));config['redis']=_[_0xb5fb('0x8')](config[_0xb5fb('0x9')],{'host':_0xb5fb('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xb5fb('0x9')]));var def={'method':'POST','json':!![]};function emit(_0x402e7a,_0x258c49,_0x58940d){io['to'](_0x402e7a)[_0xb5fb('0xb')](_0x258c49,_0x58940d);}function getTicket(_0x5c5151,_0x4b50f3,_0x93e299,_0x1f9b59,_0x947e69,_0x22b082,_0x260faf,_0x417100){logger[_0xb5fb('0xc')](_0xb5fb('0xd'));var _0x2517ba=new Date();var _0x633df0=[{'name':_0xb5fb('0xe'),'value':intUtil[_0xb5fb('0xf')](_0x1f9b59[_0xb5fb('0x10')],_0x947e69,'\x20')},{'name':'assigned_user_id','value':_0x4b50f3['id']},{'name':_0xb5fb('0x11'),'value':_0x4b50f3['id']},{'name':_0xb5fb('0x12'),'value':intUtil[_0xb5fb('0xf')](_0x1f9b59['Descriptions'],_0x947e69,'\x0a')},{'name':_0xb5fb('0x13'),'value':_0x2517ba[_0xb5fb('0x14')]()[_0xb5fb('0x15')](0x0,0x13)[_0xb5fb('0x16')]('T','\x20')},{'name':'duration_hours','value':'0'},{'name':'duration_minutes','value':'15'},{'name':_0xb5fb('0x17'),'value':_0x93e299['id']},{'name':_0xb5fb('0x18'),'value':_0xb5fb('0x19')},{'name':_0xb5fb('0x1a'),'value':_0x93e299[_0xb5fb('0xe')]},{'name':'direction','value':_0x417100}];if(_0x22b082[_0xb5fb('0x1b')]){_[_0xb5fb('0x1c')](_0x22b082,function(_0x14e5b5){if(_0x947e69[_0x14e5b5[_0xb5fb('0x1d')]]){_0x633df0['push']({'name':_0x14e5b5[_0xb5fb('0x1e')],'value':_0x947e69[_0x14e5b5[_0xb5fb('0x1d')]]});}});}return request({'form':{'method':_0xb5fb('0x1f'),'input_type':_0xb5fb('0x20'),'response_type':_0xb5fb('0x20'),'rest_data':JSON['stringify']({'session':_0x260faf['id'],'module_name':_0xb5fb('0x21'),'name_value_list':_0x633df0})}});}function getAuth(_0x362bda){return util[_0xb5fb('0x22')]('Basic\x20%s',new Buffer(_0x362bda[_0xb5fb('0x23')]+':X')[_0xb5fb('0x24')](_0xb5fb('0x25')));}function getServerInfo(_0x5757cd){return request({'form':{'method':_0xb5fb('0x26'),'input_type':_0xb5fb('0x20'),'response_type':_0xb5fb('0x20'),'rest_data':JSON[_0xb5fb('0x27')]({'session':_0x5757cd['id']})}});}function getUser(_0x50e046,_0x292bac,_0xc9253a){if(!_[_0xb5fb('0x28')](_0x292bac)){logger[_0xb5fb('0xc')](_0xb5fb('0x29'),_0x292bac);return request({'form':{'method':_0xb5fb('0x2a'),'input_type':_0xb5fb('0x20'),'response_type':_0xb5fb('0x20'),'rest_data':JSON[_0xb5fb('0x27')]({'session':_0xc9253a['id'],'module_name':_0xb5fb('0x2b'),'query':util['format'](_0xb5fb('0x2c'),_0x292bac),'order_by':'','offset':'0','select_fields':['id',_0xb5fb('0xe'),_0xb5fb('0x2d')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})['then'](function(_0x51c571){if(_0x51c571[_0xb5fb('0x2e')][_0xb5fb('0x1b')]){var _0x505e07=_[_0xb5fb('0x2f')](_0x51c571[_0xb5fb('0x2e')],function(_0x14611f){return _0x14611f[_0xb5fb('0x30')][_0xb5fb('0x2d')][_0xb5fb('0x31')]===_0x292bac;});if(_0x505e07){logger[_0xb5fb('0xc')](_0xb5fb('0x32'));return BPromise[_0xb5fb('0x33')]({'id':_0x505e07[_0xb5fb('0x30')]['id'][_0xb5fb('0x31')],'name':_0x505e07['name_value_list'][_0xb5fb('0xe')]['value']});}}logger['info'](_0xb5fb('0x34'));return BPromise[_0xb5fb('0x33')]({'id':_0xc9253a[_0xb5fb('0x30')][_0xb5fb('0x35')][_0xb5fb('0x31')],'name':_0xc9253a[_0xb5fb('0x30')][_0xb5fb('0x2d')][_0xb5fb('0x31')]});});}else{logger[_0xb5fb('0xc')](_0xb5fb('0x36'));return BPromise[_0xb5fb('0x33')]({'id':_0xc9253a[_0xb5fb('0x30')][_0xb5fb('0x35')][_0xb5fb('0x31')],'name':_0xc9253a['name_value_list'][_0xb5fb('0x2d')][_0xb5fb('0x31')]});}}function getEndUser(_0x5e6b79,_0x31241b,_0x105864,_0x14fbc9){logger[_0xb5fb('0xc')](_0xb5fb('0x37'),_0x105864);return request({'form':{'method':_0xb5fb('0x2a'),'input_type':_0xb5fb('0x20'),'response_type':'JSON','rest_data':JSON['stringify']({'session':_0x14fbc9['id'],'module_name':'Contacts','query':util[_0xb5fb('0x22')](_0xb5fb('0x38'),_0x105864),'order_by':'','offset':'0','select_fields':['id',_0xb5fb('0xe'),_0xb5fb('0x39')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})['then'](function(_0x1273e2){if(_0x1273e2[_0xb5fb('0x2e')][_0xb5fb('0x1b')]){var _0x3c1c24=_[_0xb5fb('0x2f')](_0x1273e2[_0xb5fb('0x2e')],function(_0x103584){return _0x103584[_0xb5fb('0x30')][_0xb5fb('0x39')][_0xb5fb('0x31')]===_0x105864;});if(_0x3c1c24){logger[_0xb5fb('0xc')](_0xb5fb('0x3a'));return BPromise[_0xb5fb('0x33')]({'id':_0x3c1c24['name_value_list']['id']['value'],'name':_0x3c1c24[_0xb5fb('0x30')][_0xb5fb('0xe')][_0xb5fb('0x31')],'phone':_0x3c1c24['name_value_list'][_0xb5fb('0x39')][_0xb5fb('0x31')]});}}else{logger[_0xb5fb('0xc')](_0xb5fb('0x3b'));return request({'form':{'method':_0xb5fb('0x1f'),'input_type':_0xb5fb('0x20'),'response_type':_0xb5fb('0x20'),'rest_data':JSON[_0xb5fb('0x27')]({'session':_0x14fbc9['id'],'module_name':'Contacts','name_value_list':[{'name':_0xb5fb('0x3c'),'value':_0x31241b!==_0xb5fb('0x3d')?_0x31241b:util[_0xb5fb('0x22')](_0xb5fb('0x3e'),_0x105864)},{'name':_0xb5fb('0x39'),'value':_0x105864}]})}})[_0xb5fb('0x3f')](function(_0x52143d){logger[_0xb5fb('0xc')](_0xb5fb('0x40'));return BPromise['resolve']({'id':_0x52143d['id'],'name':_0x52143d[_0xb5fb('0x2e')][_0xb5fb('0x3c')][_0xb5fb('0x31')],'phone':_0x52143d[_0xb5fb('0x2e')]['phone_home'][_0xb5fb('0x31')]});});}});}function request(_0x20f6ef){logger[_0xb5fb('0x41')](_0xb5fb('0x42'),JSON[_0xb5fb('0x27')](_0x20f6ef));return rp(_[_0xb5fb('0x43')](def,_0x20f6ef));}function getTags(_0x188b2d,_0x4cd915){var _0x564281=[];if(_0x188b2d&&_0x188b2d[_0xb5fb('0x1b')]>0x0){_0x564281=_[_0xb5fb('0x44')](_0x188b2d,_0x4cd915);}return _0x564281;}function getCustomFields(_0x30e915,_0x22b28b){var _0x5f5118=[];var _0x18b3e0={'custom_fields':[]};if(_0x30e915[_0xb5fb('0x1b')]>0x0){_[_0xb5fb('0x1c')](_0x30e915,function(_0x115bbc){if(_0x115bbc[_0xb5fb('0x45')]===_0xb5fb('0x46')&&_0x115bbc['nameField']&&!_0x115bbc[_0xb5fb('0x47')]){_0x18b3e0[_0x115bbc[_0xb5fb('0x48')][_0xb5fb('0x49')]()]=_0x115bbc['content'][_0xb5fb('0x24')]();}else if(_0x115bbc[_0xb5fb('0x45')]===_0xb5fb('0x46')&&_0x115bbc['idField']&&_0x115bbc[_0xb5fb('0x47')]){_0x18b3e0[_0xb5fb('0x4a')][_0xb5fb('0x4b')]({'id':_0x115bbc[_0xb5fb('0x1e')],'value':_0x115bbc[_0xb5fb('0x4c')][_0xb5fb('0x24')]()});}else if(_0x115bbc['type']===_0xb5fb('0x4d')&&_0x115bbc['variableName']&&_0x115bbc[_0xb5fb('0x1e')]&&_0x115bbc[_0xb5fb('0x47')]){_0x22b28b[_0x115bbc['variableName']]&&_0x18b3e0[_0xb5fb('0x4a')]['push']({'id':_0x115bbc[_0xb5fb('0x1e')],'value':_0x22b28b[_0x115bbc[_0xb5fb('0x1d')]][_0xb5fb('0x24')]()});}else if(_0x115bbc['type']===_0xb5fb('0x4e')&&_0x115bbc[_0xb5fb('0x4f')]&&_0x115bbc['Variable'][_0xb5fb('0xe')]&&_0x115bbc['idField']&&_0x115bbc['customField']){_0x22b28b[_0x115bbc[_0xb5fb('0x4f')][_0xb5fb('0xe')][_0xb5fb('0x49')]()]&&_0x18b3e0[_0xb5fb('0x4a')]['push']({'id':_0x115bbc[_0xb5fb('0x1e')],'value':_0x22b28b[_0x115bbc[_0xb5fb('0x4f')]['name'][_0xb5fb('0x49')]()][_0xb5fb('0x24')]()});}});}return _0x18b3e0;}function getConnection(_0x3673db){return request({'method':_0xb5fb('0x50'),'form':{'method':'login','input_type':_0xb5fb('0x20'),'response_type':_0xb5fb('0x20'),'rest_data':JSON['stringify']({'user_auth':{'user_name':_0x3673db['username'],'password':_0x3673db[_0xb5fb('0x51')],'encryption':_0xb5fb('0x52')},'application':_0xb5fb('0x53')})}})[_0xb5fb('0x3f')](function(_0x5b5dfc){var _0x5d7757=_0x5b5dfc;if(_0x5d7757['id']){def[_0xb5fb('0x54')]=_0x5d7757['id'];return BPromise['resolve'](_0x5d7757);}else{throw new Error(util['format'](_0xb5fb('0x55'),_0x3673db['id']));}});}function setRelationship(_0x19138b,_0x1fe3bb,_0x5ec300,_0x320016){return request({'form':{'method':'set_relationship','input_type':_0xb5fb('0x20'),'response_type':'JSON','rest_data':JSON[_0xb5fb('0x27')]({'session':_0x19138b['id'],'module_name':_0xb5fb('0x21'),'module_id':_0x5ec300['id'],'link_field_name':_0x320016,'related_ids':[_0x1fe3bb['id']]})}});}exports[_0xb5fb('0x56')]=function(_0x13291a,_0x4bc059,_0x5ac488,_0x3d7157,_0x36d7bb,_0x4edd79){var _0x7559aa,_0x5361b3,_0x108b27,_0x9f7f60;_0x4edd79[_0xb5fb('0x57')]=intUtil['stripTrailingSlash'](_0x4edd79[_0xb5fb('0x57')]);_0x4edd79[_0xb5fb('0x58')]=intUtil[_0xb5fb('0x59')](_0x4edd79['serverUrl']);def[_0xb5fb('0x5a')]=util['format']('%s/service/v4_1/rest.php',_0x4edd79[_0xb5fb('0x57')]);if(_0x36d7bb&&_0x36d7bb[_0xb5fb('0x5b')]){logger[_0xb5fb('0xc')](_0xb5fb('0x5c'),_0xb5fb('0x5d'));_0x4bc059['recordingURL']=util[_0xb5fb('0x22')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x4edd79[_0xb5fb('0x58')],_0x4bc059['uniqueid'],md5(_0x4bc059[_0xb5fb('0x5e')]));}else{_0x4bc059[_0xb5fb('0x5f')]='';}return getConnection(_0x4edd79)[_0xb5fb('0x3f')](function(_0x4d933e){_0x9f7f60=_0x4d933e;return getUser(_0x4edd79,_0x3d7157[_0xb5fb('0xe')],_0x9f7f60);})[_0xb5fb('0x3f')](function(_0x44df62){_0x7559aa=_0x44df62;logger[_0xb5fb('0xc')](_0xb5fb('0x60'),_0x7559aa['id']);return getEndUser(_0x4edd79,_0x4bc059[_0xb5fb('0x61')],_0x4bc059['calleridnum'],_0x9f7f60);})[_0xb5fb('0x3f')](function(_0x4a9da2){_0x5361b3=_0x4a9da2;logger[_0xb5fb('0xc')](_0xb5fb('0x62'),_0x5361b3['id']);return getTicket(_0x4edd79,_0x7559aa,_0x5361b3,_0x5ac488,_0x4bc059,_0x5ac488[_0xb5fb('0x63')],_0x9f7f60,_0xb5fb('0x64'));})[_0xb5fb('0x3f')](function(_0x5383e1){_0x108b27=_0x5383e1;logger[_0xb5fb('0xc')](_0xb5fb('0x65'));logger[_0xb5fb('0xc')](_0xb5fb('0x66'),_0x108b27['id']);return setRelationship(_0x9f7f60,_0x7559aa,_0x108b27,_0xb5fb('0x67'));})[_0xb5fb('0x3f')](function(){return setRelationship(_0x9f7f60,_0x5361b3,_0x108b27,'contacts');})[_0xb5fb('0x3f')](function(){return getServerInfo(_0x9f7f60);})[_0xb5fb('0x3f')](function(_0x2acd64){var _0x215596=parseInt(_0x2acd64[_0xb5fb('0x68')][_0xb5fb('0x69')](0x0));var _0x1ac559=util[_0xb5fb('0x22')](_0xb5fb('0x6a'),_0x4edd79[_0xb5fb('0x57')],_0x108b27['id']);if(_0x215596>0x6){_0x1ac559=util[_0xb5fb('0x22')](_0xb5fb('0x6b'),_0x4edd79[_0xb5fb('0x57')],_0x108b27['id']);}logger[_0xb5fb('0xc')]('[QUEUE]',_0xb5fb('0x6c'));emit(util['format'](_0xb5fb('0x6d'),_0x3d7157['name']),'trigger:browser:url',{'uri':_0x1ac559});})[_0xb5fb('0x6e')](function(_0x32105e){logger[_0xb5fb('0x6f')](_0xb5fb('0x5c'),JSON[_0xb5fb('0x27')](_0x32105e));});};exports['outbound']=function(_0x24de06,_0x244eda,_0x13cf77,_0x2c0f86,_0x556abc,_0x213e0e,_0x3767c7){var _0x5aae9c,_0xd77586,_0x8e6d3,_0x45aba7;_0x213e0e['remoteUri']=intUtil[_0xb5fb('0x59')](_0x213e0e['remoteUri']);_0x213e0e[_0xb5fb('0x58')]=intUtil[_0xb5fb('0x59')](_0x213e0e[_0xb5fb('0x58')]);def['uri']=util[_0xb5fb('0x22')](_0xb5fb('0x70'),_0x213e0e[_0xb5fb('0x57')]);if(_0x3767c7&&_0x3767c7[_0xb5fb('0x71')]&&_0x3767c7[_0xb5fb('0x71')]!==_0xb5fb('0x72')){logger['info'](_0xb5fb('0x73'),_0xb5fb('0x5d'));_0x244eda['recordingURL']=util[_0xb5fb('0x22')](_0xb5fb('0x74'),_0x213e0e[_0xb5fb('0x58')],_0x244eda[_0xb5fb('0x5e')],md5(_0x244eda[_0xb5fb('0x5e')]));}return getConnection(_0x213e0e)[_0xb5fb('0x3f')](function(_0x2b3aaa){_0x45aba7=_0x2b3aaa;return getUser(_0x213e0e,_0x2c0f86[_0xb5fb('0xe')],_0x45aba7);})[_0xb5fb('0x3f')](function(_0x2cae37){_0x5aae9c=_0x2cae37;logger[_0xb5fb('0xc')]('The\x20User\x20ID\x20is:',_0x5aae9c['id']);return getEndUser(_0x213e0e,_0x244eda[_0xb5fb('0x75')],_0x244eda[_0xb5fb('0x76')],_0x45aba7);})['then'](function(_0x26c8d2){_0xd77586=_0x26c8d2;logger[_0xb5fb('0xc')](_0xb5fb('0x62'),_0xd77586['id']);return getTicket(_0x213e0e,_0x5aae9c,_0xd77586,_0x13cf77,_0x244eda,_0x13cf77[_0xb5fb('0x63')],_0x45aba7,_0xb5fb('0x77'));})[_0xb5fb('0x3f')](function(_0x359856){_0x8e6d3=_0x359856;logger['info'](_0xb5fb('0x65'));logger[_0xb5fb('0xc')](_0xb5fb('0x66'),_0x8e6d3['id']);return setRelationship(_0x45aba7,_0x5aae9c,_0x8e6d3,'users');})['then'](function(){return setRelationship(_0x45aba7,_0xd77586,_0x8e6d3,'contacts');})[_0xb5fb('0x3f')](function(){return getServerInfo(_0x45aba7);})[_0xb5fb('0x3f')](function(_0x1b312f){var _0x4a7912=parseInt(_0x1b312f[_0xb5fb('0x68')][_0xb5fb('0x69')](0x0));var _0x10987f=util['format'](_0xb5fb('0x6a'),_0x213e0e['remoteUri'],_0x8e6d3['id']);if(_0x4a7912>0x6){_0x10987f=util[_0xb5fb('0x22')](_0xb5fb('0x6b'),_0x213e0e[_0xb5fb('0x57')],_0x8e6d3['id']);}logger[_0xb5fb('0xc')]('[OUTBOUND]',_0xb5fb('0x6c'));emit(util[_0xb5fb('0x22')]('user:%s',_0x2c0f86[_0xb5fb('0xe')]),_0xb5fb('0x78'),{'uri':_0x10987f});})[_0xb5fb('0x6e')](function(_0xe752b7){logger[_0xb5fb('0x6f')](_0xb5fb('0x73'),JSON[_0xb5fb('0x27')](_0xe752b7));});};exports[_0xb5fb('0x79')]=function(_0x5e6b65,_0x4468ab,_0x1d65a7,_0xd04177,_0x13cfb7,_0x33e586){var _0x5c0241,_0x43701d,_0x3bbede,_0x5cb815;_0x33e586[_0xb5fb('0x57')]=intUtil['stripTrailingSlash'](_0x33e586['remoteUri']);_0x33e586[_0xb5fb('0x58')]=intUtil[_0xb5fb('0x59')](_0x33e586[_0xb5fb('0x58')]);def['uri']=util[_0xb5fb('0x22')](_0xb5fb('0x70'),_0x33e586[_0xb5fb('0x57')]);if(_0x13cfb7&&_0x13cfb7['monitor_format']){logger[_0xb5fb('0xc')](_0xb5fb('0x7a'),_0xb5fb('0x5d'));_0x4468ab[_0xb5fb('0x5f')]=util[_0xb5fb('0x22')](_0xb5fb('0x74'),_0x33e586[_0xb5fb('0x58')],_0x4468ab['uniqueid'],md5(_0x4468ab[_0xb5fb('0x5e')]));}else{_0x4468ab[_0xb5fb('0x5f')]='';}return getConnection(_0x33e586)['then'](function(_0x9131d5){_0x5cb815=_0x9131d5;if(!_['isNil'](_0xd04177)){return getUser(_0x33e586,_0xd04177[_0xb5fb('0xe')],_0x5cb815);}else{return getUser(_0x33e586,null,_0x5cb815);}})[_0xb5fb('0x3f')](function(_0x4c79cc){_0x5c0241=_0x4c79cc;logger[_0xb5fb('0xc')](_0xb5fb('0x60'),_0x5c0241['id']);return getEndUser(_0x33e586,_0x4468ab[_0xb5fb('0x61')],_0x4468ab[_0xb5fb('0x7b')],_0x5cb815);})[_0xb5fb('0x3f')](function(_0x7d7fbe){_0x43701d=_0x7d7fbe;logger['info']('The\x20Enduser\x20ID\x20is:',_0x43701d['id']);return getTicket(_0x33e586,_0x5c0241,_0x43701d,_0x1d65a7,_0x4468ab,_0x1d65a7['Fields'],_0x5cb815,_0xb5fb('0x64'));})[_0xb5fb('0x3f')](function(_0x1cd295){_0x3bbede=_0x1cd295;logger[_0xb5fb('0xc')]('Ticket\x20created!');logger[_0xb5fb('0xc')](_0xb5fb('0x66'),_0x3bbede['id']);return setRelationship(_0x5cb815,_0x5c0241,_0x3bbede,_0xb5fb('0x67'));})['then'](function(){return setRelationship(_0x5cb815,_0x43701d,_0x3bbede,_0xb5fb('0x7c'));})[_0xb5fb('0x3f')](function(){return getServerInfo(_0x5cb815);})[_0xb5fb('0x6e')](function(_0x1eaa04){logger['error'](_0xb5fb('0x7a'),JSON[_0xb5fb('0x27')](_0x1eaa04));});};
\ No newline at end of file
+var _0xf6d2=['toISOString','replace','duration_hours','duration_minutes','parent_type','parent_name','direction','length','forEach','variableName','push','idField','set_entry','JSON','stringify','Calls','format','Basic\x20%s','apiKey','toString','base64','get_server_info','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','find','name_value_list','Agent\x20found!','resolve','value','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','user_id','Agent\x20not\x20available,\x20using\x20the\x20admin\x20account!','Contacts','phone_home','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','<unknown>','Caller\x20-\x20%s','Enduser\x20created.','first_name','debug','[HTTP]','merge','map','type','string','nameField','customField','toLowerCase','content','custom_fields','variable','customVariable','Variable','login','username','password','xCALLY\x20Motion\x20integration','sessionID','set_relationship','remoteUri','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','The\x20User\x20ID\x20is:','calleridname','The\x20Enduser\x20ID\x20is:','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','stripTrailingSlash','uri','%s/service/v4_1/rest.php','none','recordingURL','destcalleridnum','Fields','Outbound','[OUTBOUND]','user:%s','abandoned','[ABANDONED]','lodash','request-promise','bluebird','md5','ioredis','./util','../../../../config/logger','defaults','localhost','socket.io-emitter','POST','emit','info','Creating\x20new\x20ticket...','name','getString','Subjects','assigned_user_id','description','Descriptions','date_start'];(function(_0x1ff8e7,_0x235579){var _0x1f6acd=function(_0x4b2280){while(--_0x4b2280){_0x1ff8e7['push'](_0x1ff8e7['shift']());}};_0x1f6acd(++_0x235579);}(_0xf6d2,0xe1));var _0x2f6d=function(_0x323aa1,_0x1a14e1){_0x323aa1=_0x323aa1-0x0;var _0x2e8e70=_0xf6d2[_0x323aa1];return _0x2e8e70;};'use strict';var _=require(_0x2f6d('0x0'));var rp=require(_0x2f6d('0x1'));var BPromise=require(_0x2f6d('0x2'));var md5=require(_0x2f6d('0x3'));var util=require('util');var Redis=require(_0x2f6d('0x4'));var intUtil=require(_0x2f6d('0x5'));var config=require('../../../../config/environment');var logger=require(_0x2f6d('0x6'))('sugarcrm');config['redis']=_[_0x2f6d('0x7')](config['redis'],{'host':_0x2f6d('0x8'),'port':0x18eb});var io=require(_0x2f6d('0x9'))(new Redis(config['redis']));var def={'method':_0x2f6d('0xa'),'json':!![]};function emit(_0x1ba76a,_0x842dee,_0x45e244){io['to'](_0x1ba76a)[_0x2f6d('0xb')](_0x842dee,_0x45e244);}function getTicket(_0x49c968,_0x541344,_0x13da1e,_0x27774b,_0x11881f,_0x35857a,_0x3e0575,_0x194038){logger[_0x2f6d('0xc')](_0x2f6d('0xd'));var _0x10c130=new Date();var _0x2d46f5=[{'name':_0x2f6d('0xe'),'value':intUtil[_0x2f6d('0xf')](_0x27774b[_0x2f6d('0x10')],_0x11881f,'\x20')},{'name':_0x2f6d('0x11'),'value':_0x541344['id']},{'name':'created_by','value':_0x541344['id']},{'name':_0x2f6d('0x12'),'value':intUtil[_0x2f6d('0xf')](_0x27774b[_0x2f6d('0x13')],_0x11881f,'\x0a')},{'name':_0x2f6d('0x14'),'value':_0x10c130[_0x2f6d('0x15')]()['slice'](0x0,0x13)[_0x2f6d('0x16')]('T','\x20')},{'name':_0x2f6d('0x17'),'value':'0'},{'name':_0x2f6d('0x18'),'value':'15'},{'name':'parent_id','value':_0x13da1e['id']},{'name':_0x2f6d('0x19'),'value':'Contacts'},{'name':_0x2f6d('0x1a'),'value':_0x13da1e[_0x2f6d('0xe')]},{'name':_0x2f6d('0x1b'),'value':_0x194038}];if(_0x35857a[_0x2f6d('0x1c')]){_[_0x2f6d('0x1d')](_0x35857a,function(_0x571580){if(_0x11881f[_0x571580[_0x2f6d('0x1e')]]){_0x2d46f5[_0x2f6d('0x1f')]({'name':_0x571580[_0x2f6d('0x20')],'value':_0x11881f[_0x571580[_0x2f6d('0x1e')]]});}});}return request({'form':{'method':_0x2f6d('0x21'),'input_type':_0x2f6d('0x22'),'response_type':'JSON','rest_data':JSON[_0x2f6d('0x23')]({'session':_0x3e0575['id'],'module_name':_0x2f6d('0x24'),'name_value_list':_0x2d46f5})}});}function getAuth(_0xa2d16f){return util[_0x2f6d('0x25')](_0x2f6d('0x26'),new Buffer(_0xa2d16f[_0x2f6d('0x27')]+':X')[_0x2f6d('0x28')](_0x2f6d('0x29')));}function getServerInfo(_0x46371c){return request({'form':{'method':_0x2f6d('0x2a'),'input_type':_0x2f6d('0x22'),'response_type':_0x2f6d('0x22'),'rest_data':JSON['stringify']({'session':_0x46371c['id']})}});}function getUser(_0xe6881d,_0x2f98de,_0x474c3d){if(!_[_0x2f6d('0x2b')](_0x2f98de)){logger[_0x2f6d('0xc')](_0x2f6d('0x2c'),_0x2f98de);return request({'form':{'method':_0x2f6d('0x2d'),'input_type':_0x2f6d('0x22'),'response_type':'JSON','rest_data':JSON[_0x2f6d('0x23')]({'session':_0x474c3d['id'],'module_name':_0x2f6d('0x2e'),'query':util[_0x2f6d('0x25')](_0x2f6d('0x2f'),_0x2f98de),'order_by':'','offset':'0','select_fields':['id',_0x2f6d('0xe'),_0x2f6d('0x30')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0x2f6d('0x31')](function(_0x13087a){if(_0x13087a[_0x2f6d('0x32')][_0x2f6d('0x1c')]){var _0x284be4=_[_0x2f6d('0x33')](_0x13087a[_0x2f6d('0x32')],function(_0x62e8aa){return _0x62e8aa[_0x2f6d('0x34')]['user_name']['value']===_0x2f98de;});if(_0x284be4){logger[_0x2f6d('0xc')](_0x2f6d('0x35'));return BPromise[_0x2f6d('0x36')]({'id':_0x284be4[_0x2f6d('0x34')]['id']['value'],'name':_0x284be4[_0x2f6d('0x34')]['name'][_0x2f6d('0x37')]});}}logger[_0x2f6d('0xc')](_0x2f6d('0x38'));return BPromise[_0x2f6d('0x36')]({'id':_0x474c3d[_0x2f6d('0x34')][_0x2f6d('0x39')][_0x2f6d('0x37')],'name':_0x474c3d[_0x2f6d('0x34')][_0x2f6d('0x30')][_0x2f6d('0x37')]});});}else{logger[_0x2f6d('0xc')](_0x2f6d('0x3a'));return BPromise[_0x2f6d('0x36')]({'id':_0x474c3d[_0x2f6d('0x34')][_0x2f6d('0x39')][_0x2f6d('0x37')],'name':_0x474c3d[_0x2f6d('0x34')][_0x2f6d('0x30')]['value']});}}function getEndUser(_0x349349,_0x4c350e,_0x30af9a,_0x48a0ac){logger[_0x2f6d('0xc')]('Searching\x20enduser\x20with\x20phone',_0x30af9a);return request({'form':{'method':_0x2f6d('0x2d'),'input_type':_0x2f6d('0x22'),'response_type':'JSON','rest_data':JSON[_0x2f6d('0x23')]({'session':_0x48a0ac['id'],'module_name':_0x2f6d('0x3b'),'query':util[_0x2f6d('0x25')]('contacts.phone_home\x20=\x20\x22%s\x22',_0x30af9a),'order_by':'','offset':'0','select_fields':['id',_0x2f6d('0xe'),_0x2f6d('0x3c')],'link_name_to_fields_array':[],'max_results':-0x1,'deleted':'0'})}})[_0x2f6d('0x31')](function(_0x9e3e7f){if(_0x9e3e7f[_0x2f6d('0x32')]['length']){var _0x45a8ca=_[_0x2f6d('0x33')](_0x9e3e7f[_0x2f6d('0x32')],function(_0x4d8684){return _0x4d8684[_0x2f6d('0x34')]['phone_home'][_0x2f6d('0x37')]===_0x30af9a;});if(_0x45a8ca){logger[_0x2f6d('0xc')](_0x2f6d('0x3d'));return BPromise[_0x2f6d('0x36')]({'id':_0x45a8ca[_0x2f6d('0x34')]['id'][_0x2f6d('0x37')],'name':_0x45a8ca[_0x2f6d('0x34')][_0x2f6d('0xe')][_0x2f6d('0x37')],'phone':_0x45a8ca[_0x2f6d('0x34')][_0x2f6d('0x3c')][_0x2f6d('0x37')]});}}else{logger[_0x2f6d('0xc')](_0x2f6d('0x3e'));return request({'form':{'method':_0x2f6d('0x21'),'input_type':_0x2f6d('0x22'),'response_type':_0x2f6d('0x22'),'rest_data':JSON[_0x2f6d('0x23')]({'session':_0x48a0ac['id'],'module_name':_0x2f6d('0x3b'),'name_value_list':[{'name':'first_name','value':_0x4c350e!==_0x2f6d('0x3f')?_0x4c350e:util['format'](_0x2f6d('0x40'),_0x30af9a)},{'name':_0x2f6d('0x3c'),'value':_0x30af9a}]})}})[_0x2f6d('0x31')](function(_0x46cc60){logger[_0x2f6d('0xc')](_0x2f6d('0x41'));return BPromise[_0x2f6d('0x36')]({'id':_0x46cc60['id'],'name':_0x46cc60[_0x2f6d('0x32')][_0x2f6d('0x42')][_0x2f6d('0x37')],'phone':_0x46cc60[_0x2f6d('0x32')]['phone_home'][_0x2f6d('0x37')]});});}});}function request(_0x1542f1){logger[_0x2f6d('0x43')](_0x2f6d('0x44'),JSON[_0x2f6d('0x23')](_0x1542f1));return rp(_[_0x2f6d('0x45')](def,_0x1542f1));}function getTags(_0x3a6c57,_0x51fc78){var _0x455074=[];if(_0x3a6c57&&_0x3a6c57[_0x2f6d('0x1c')]>0x0){_0x455074=_[_0x2f6d('0x46')](_0x3a6c57,_0x51fc78);}return _0x455074;}function getCustomFields(_0x1830c3,_0x247830){var _0x3c2b7d=[];var _0x404e13={'custom_fields':[]};if(_0x1830c3['length']>0x0){_[_0x2f6d('0x1d')](_0x1830c3,function(_0x28fcd1){if(_0x28fcd1[_0x2f6d('0x47')]===_0x2f6d('0x48')&&_0x28fcd1[_0x2f6d('0x49')]&&!_0x28fcd1[_0x2f6d('0x4a')]){_0x404e13[_0x28fcd1[_0x2f6d('0x49')][_0x2f6d('0x4b')]()]=_0x28fcd1[_0x2f6d('0x4c')]['toString']();}else if(_0x28fcd1[_0x2f6d('0x47')]===_0x2f6d('0x48')&&_0x28fcd1[_0x2f6d('0x20')]&&_0x28fcd1[_0x2f6d('0x4a')]){_0x404e13[_0x2f6d('0x4d')][_0x2f6d('0x1f')]({'id':_0x28fcd1['idField'],'value':_0x28fcd1[_0x2f6d('0x4c')][_0x2f6d('0x28')]()});}else if(_0x28fcd1[_0x2f6d('0x47')]===_0x2f6d('0x4e')&&_0x28fcd1[_0x2f6d('0x1e')]&&_0x28fcd1[_0x2f6d('0x20')]&&_0x28fcd1[_0x2f6d('0x4a')]){_0x247830[_0x28fcd1[_0x2f6d('0x1e')]]&&_0x404e13[_0x2f6d('0x4d')][_0x2f6d('0x1f')]({'id':_0x28fcd1[_0x2f6d('0x20')],'value':_0x247830[_0x28fcd1[_0x2f6d('0x1e')]][_0x2f6d('0x28')]()});}else if(_0x28fcd1['type']===_0x2f6d('0x4f')&&_0x28fcd1[_0x2f6d('0x50')]&&_0x28fcd1[_0x2f6d('0x50')][_0x2f6d('0xe')]&&_0x28fcd1[_0x2f6d('0x20')]&&_0x28fcd1[_0x2f6d('0x4a')]){_0x247830[_0x28fcd1[_0x2f6d('0x50')][_0x2f6d('0xe')][_0x2f6d('0x4b')]()]&&_0x404e13[_0x2f6d('0x4d')][_0x2f6d('0x1f')]({'id':_0x28fcd1[_0x2f6d('0x20')],'value':_0x247830[_0x28fcd1[_0x2f6d('0x50')][_0x2f6d('0xe')][_0x2f6d('0x4b')]()][_0x2f6d('0x28')]()});}});}return _0x404e13;}function getConnection(_0x2e76d9){return request({'method':_0x2f6d('0xa'),'form':{'method':_0x2f6d('0x51'),'input_type':'JSON','response_type':_0x2f6d('0x22'),'rest_data':JSON['stringify']({'user_auth':{'user_name':_0x2e76d9[_0x2f6d('0x52')],'password':_0x2e76d9[_0x2f6d('0x53')],'encryption':'PLAIN'},'application':_0x2f6d('0x54')})}})[_0x2f6d('0x31')](function(_0x428941){var _0x352b9c=_0x428941;if(_0x352b9c['id']){def[_0x2f6d('0x55')]=_0x352b9c['id'];return BPromise[_0x2f6d('0x36')](_0x352b9c);}else{throw new Error(util['format']('Account\x20%d\x20is\x20not\x20valid',_0x2e76d9['id']));}});}function setRelationship(_0x883825,_0x535d15,_0x534511,_0x3af552){return request({'form':{'method':_0x2f6d('0x56'),'input_type':_0x2f6d('0x22'),'response_type':_0x2f6d('0x22'),'rest_data':JSON[_0x2f6d('0x23')]({'session':_0x883825['id'],'module_name':_0x2f6d('0x24'),'module_id':_0x534511['id'],'link_field_name':_0x3af552,'related_ids':[_0x535d15['id']]})}});}exports['queue']=function(_0x406ada,_0xeb891,_0x12dc96,_0x1cca99,_0xd64283,_0x288cfe){var _0x536bdb,_0x33018c,_0x2b10ce,_0x446bd2;_0x288cfe[_0x2f6d('0x57')]=intUtil['stripTrailingSlash'](_0x288cfe[_0x2f6d('0x57')]);_0x288cfe[_0x2f6d('0x58')]=intUtil['stripTrailingSlash'](_0x288cfe[_0x2f6d('0x58')]);def['uri']=util[_0x2f6d('0x25')]('%s/service/v4_1/rest.php',_0x288cfe[_0x2f6d('0x57')]);if(_0xd64283&&_0xd64283[_0x2f6d('0x59')]){logger[_0x2f6d('0xc')](_0x2f6d('0x5a'),_0x2f6d('0x5b'));_0xeb891['recordingURL']=util[_0x2f6d('0x25')](_0x2f6d('0x5c'),_0x288cfe['serverUrl'],_0xeb891[_0x2f6d('0x5d')],md5(_0xeb891[_0x2f6d('0x5d')]));}else{_0xeb891['recordingURL']='';}return getConnection(_0x288cfe)[_0x2f6d('0x31')](function(_0x462dc6){_0x446bd2=_0x462dc6;return getUser(_0x288cfe,_0x1cca99[_0x2f6d('0xe')],_0x446bd2);})[_0x2f6d('0x31')](function(_0x1df6c5){_0x536bdb=_0x1df6c5;logger[_0x2f6d('0xc')](_0x2f6d('0x5e'),_0x536bdb['id']);return getEndUser(_0x288cfe,_0xeb891[_0x2f6d('0x5f')],_0xeb891['calleridnum'],_0x446bd2);})[_0x2f6d('0x31')](function(_0x149986){_0x33018c=_0x149986;logger[_0x2f6d('0xc')](_0x2f6d('0x60'),_0x33018c['id']);return getTicket(_0x288cfe,_0x536bdb,_0x33018c,_0x12dc96,_0xeb891,_0x12dc96['Fields'],_0x446bd2,_0x2f6d('0x61'));})[_0x2f6d('0x31')](function(_0x47fd38){_0x2b10ce=_0x47fd38;logger[_0x2f6d('0xc')](_0x2f6d('0x62'));logger['info'](_0x2f6d('0x63'),_0x2b10ce['id']);return setRelationship(_0x446bd2,_0x536bdb,_0x2b10ce,_0x2f6d('0x64'));})[_0x2f6d('0x31')](function(){return setRelationship(_0x446bd2,_0x33018c,_0x2b10ce,_0x2f6d('0x65'));})[_0x2f6d('0x31')](function(){return getServerInfo(_0x446bd2);})[_0x2f6d('0x31')](function(_0x411b29){var _0x395ae5=parseInt(_0x411b29[_0x2f6d('0x66')][_0x2f6d('0x67')](0x0));var _0x3f014b=util[_0x2f6d('0x25')](_0x2f6d('0x68'),_0x288cfe['remoteUri'],_0x2b10ce['id']);if(_0x395ae5>0x6){_0x3f014b=util[_0x2f6d('0x25')](_0x2f6d('0x69'),_0x288cfe[_0x2f6d('0x57')],_0x2b10ce['id']);}logger[_0x2f6d('0xc')]('[QUEUE]',_0x2f6d('0x6a'));emit(util[_0x2f6d('0x25')]('user:%s',_0x1cca99[_0x2f6d('0xe')]),_0x2f6d('0x6b'),{'uri':_0x3f014b});})[_0x2f6d('0x6c')](function(_0x138c95){logger[_0x2f6d('0x6d')](_0x2f6d('0x5a'),JSON['stringify'](_0x138c95));});};exports[_0x2f6d('0x6e')]=function(_0x7ec55,_0xc9950b,_0x3381ed,_0xa81ad2,_0x3d261f,_0x5f54d6,_0x17497d){var _0x4edeb0,_0x1c1a22,_0x2fcee3,_0x1988bd;_0x5f54d6[_0x2f6d('0x57')]=intUtil[_0x2f6d('0x6f')](_0x5f54d6[_0x2f6d('0x57')]);_0x5f54d6[_0x2f6d('0x58')]=intUtil['stripTrailingSlash'](_0x5f54d6[_0x2f6d('0x58')]);def[_0x2f6d('0x70')]=util[_0x2f6d('0x25')](_0x2f6d('0x71'),_0x5f54d6[_0x2f6d('0x57')]);if(_0x17497d&&_0x17497d['recordingFormat']&&_0x17497d['recordingFormat']!==_0x2f6d('0x72')){logger['info']('[OUTBOUND]',_0x2f6d('0x5b'));_0xc9950b[_0x2f6d('0x73')]=util['format'](_0x2f6d('0x5c'),_0x5f54d6[_0x2f6d('0x58')],_0xc9950b['uniqueid'],md5(_0xc9950b[_0x2f6d('0x5d')]));}return getConnection(_0x5f54d6)[_0x2f6d('0x31')](function(_0x217c6d){_0x1988bd=_0x217c6d;return getUser(_0x5f54d6,_0xa81ad2[_0x2f6d('0xe')],_0x1988bd);})['then'](function(_0x36f142){_0x4edeb0=_0x36f142;logger[_0x2f6d('0xc')](_0x2f6d('0x5e'),_0x4edeb0['id']);return getEndUser(_0x5f54d6,_0xc9950b['destcalleridname'],_0xc9950b[_0x2f6d('0x74')],_0x1988bd);})['then'](function(_0xce8d70){_0x1c1a22=_0xce8d70;logger[_0x2f6d('0xc')](_0x2f6d('0x60'),_0x1c1a22['id']);return getTicket(_0x5f54d6,_0x4edeb0,_0x1c1a22,_0x3381ed,_0xc9950b,_0x3381ed[_0x2f6d('0x75')],_0x1988bd,_0x2f6d('0x76'));})['then'](function(_0x338757){_0x2fcee3=_0x338757;logger[_0x2f6d('0xc')](_0x2f6d('0x62'));logger[_0x2f6d('0xc')]('The\x20Ticket\x20ID\x20is:',_0x2fcee3['id']);return setRelationship(_0x1988bd,_0x4edeb0,_0x2fcee3,_0x2f6d('0x64'));})[_0x2f6d('0x31')](function(){return setRelationship(_0x1988bd,_0x1c1a22,_0x2fcee3,_0x2f6d('0x65'));})[_0x2f6d('0x31')](function(){return getServerInfo(_0x1988bd);})['then'](function(_0x5b5d13){var _0xfc6cac=parseInt(_0x5b5d13[_0x2f6d('0x66')]['charAt'](0x0));var _0x55b038=util[_0x2f6d('0x25')](_0x2f6d('0x68'),_0x5f54d6['remoteUri'],_0x2fcee3['id']);if(_0xfc6cac>0x6){_0x55b038=util[_0x2f6d('0x25')](_0x2f6d('0x69'),_0x5f54d6['remoteUri'],_0x2fcee3['id']);}logger[_0x2f6d('0xc')](_0x2f6d('0x77'),_0x2f6d('0x6a'));emit(util[_0x2f6d('0x25')](_0x2f6d('0x78'),_0xa81ad2[_0x2f6d('0xe')]),_0x2f6d('0x6b'),{'uri':_0x55b038});})[_0x2f6d('0x6c')](function(_0x47eb50){logger[_0x2f6d('0x6d')](_0x2f6d('0x77'),JSON[_0x2f6d('0x23')](_0x47eb50));});};exports[_0x2f6d('0x79')]=function(_0xadf9e8,_0x148b1f,_0xe5f1ae,_0x4b7378,_0x1ce941,_0x47ef31){var _0x41b00d,_0x232a98,_0xe99c38,_0x440b61;_0x47ef31[_0x2f6d('0x57')]=intUtil[_0x2f6d('0x6f')](_0x47ef31[_0x2f6d('0x57')]);_0x47ef31['serverUrl']=intUtil['stripTrailingSlash'](_0x47ef31[_0x2f6d('0x58')]);def[_0x2f6d('0x70')]=util[_0x2f6d('0x25')](_0x2f6d('0x71'),_0x47ef31[_0x2f6d('0x57')]);if(_0x1ce941&&_0x1ce941['monitor_format']){logger[_0x2f6d('0xc')](_0x2f6d('0x7a'),_0x2f6d('0x5b'));_0x148b1f[_0x2f6d('0x73')]=util[_0x2f6d('0x25')](_0x2f6d('0x5c'),_0x47ef31[_0x2f6d('0x58')],_0x148b1f['uniqueid'],md5(_0x148b1f[_0x2f6d('0x5d')]));}else{_0x148b1f['recordingURL']='';}return getConnection(_0x47ef31)['then'](function(_0x10fb48){_0x440b61=_0x10fb48;if(!_[_0x2f6d('0x2b')](_0x4b7378)){return getUser(_0x47ef31,_0x4b7378[_0x2f6d('0xe')],_0x440b61);}else{return getUser(_0x47ef31,null,_0x440b61);}})[_0x2f6d('0x31')](function(_0x5c219e){_0x41b00d=_0x5c219e;logger['info'](_0x2f6d('0x5e'),_0x41b00d['id']);return getEndUser(_0x47ef31,_0x148b1f['calleridname'],_0x148b1f['calleridnum'],_0x440b61);})['then'](function(_0x3fd44f){_0x232a98=_0x3fd44f;logger[_0x2f6d('0xc')](_0x2f6d('0x60'),_0x232a98['id']);return getTicket(_0x47ef31,_0x41b00d,_0x232a98,_0xe5f1ae,_0x148b1f,_0xe5f1ae[_0x2f6d('0x75')],_0x440b61,_0x2f6d('0x61'));})['then'](function(_0x354958){_0xe99c38=_0x354958;logger[_0x2f6d('0xc')](_0x2f6d('0x62'));logger[_0x2f6d('0xc')](_0x2f6d('0x63'),_0xe99c38['id']);return setRelationship(_0x440b61,_0x41b00d,_0xe99c38,_0x2f6d('0x64'));})['then'](function(){return setRelationship(_0x440b61,_0x232a98,_0xe99c38,_0x2f6d('0x65'));})[_0x2f6d('0x31')](function(){return getServerInfo(_0x440b61);})[_0x2f6d('0x6c')](function(_0xe99921){logger[_0x2f6d('0x6d')](_0x2f6d('0x7a'),JSON['stringify'](_0xe99921));});};
\ No newline at end of file
index 383861e..2ab1ad2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x0252=['push','content','variable','variableName','customVariable','Variable','name','toLowerCase','keyValue','keyType','format','%s:\x20%s','key','keyContent','join','stripTrailingSlash','slice','substring','lastIndexOf','validateEmail','isNil','test','util','getString','length','sortBy','type','string'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x0252,0xf6));var _0x2025=function(_0x52fb7a,_0x94c2d9){_0x52fb7a=_0x52fb7a-0x0;var _0x10703f=_0x0252[_0x52fb7a];return _0x10703f;};'use strict';var _=require('lodash');var util=require(_0x2025('0x0'));exports[_0x2025('0x1')]=function(_0xd039f5,_0x2cb62f,_0x2515ae){var _0x436c31=[];if(_0xd039f5[_0x2025('0x2')]>0x0){var _0x251147=_[_0x2025('0x3')](_0xd039f5,['id']);for(var _0x146c6c=0x0;_0x146c6c<_0x251147[_0x2025('0x2')];_0x146c6c++){var _0x36fee2=_0x251147[_0x146c6c];if(_0x36fee2[_0x2025('0x4')]===_0x2025('0x5')){_0x436c31[_0x2025('0x6')](_0x36fee2[_0x2025('0x7')]);}else if(_0x36fee2[_0x2025('0x4')]===_0x2025('0x8')&&_0x36fee2[_0x2025('0x9')]){_0x2cb62f[_0x36fee2[_0x2025('0x9')]]&&_0x436c31['push'](_0x2cb62f[_0x36fee2[_0x2025('0x9')]]['toString']());}else if(_0x36fee2[_0x2025('0x4')]===_0x2025('0xa')&&_0x36fee2[_0x2025('0xb')]&&_0x36fee2[_0x2025('0xb')]['name']){_0x2cb62f[_0x36fee2[_0x2025('0xb')]['name']['toLowerCase']()]&&_0x436c31['push'](_0x2cb62f[_0x36fee2['Variable'][_0x2025('0xc')][_0x2025('0xd')]()]['toString']());}else if(_0x36fee2['type']===_0x2025('0xe')){if(_0x36fee2[_0x2025('0xf')]===_0x2025('0x5')&&_0x36fee2['key']){_0x436c31[_0x2025('0x6')](util[_0x2025('0x10')](_0x2025('0x11'),_0x36fee2[_0x2025('0x12')],_0x36fee2[_0x2025('0x13')]));}else if(_0x36fee2['keyType']===_0x2025('0x8')&&_0x36fee2[_0x2025('0x9')]&&_0x36fee2['key']){_0x2cb62f[_0x36fee2[_0x2025('0x9')]]&&_0x436c31[_0x2025('0x6')](util[_0x2025('0x10')](_0x2025('0x11'),_0x36fee2[_0x2025('0x12')],_0x2cb62f[_0x36fee2[_0x2025('0x9')]]));}else if(_0x36fee2[_0x2025('0xf')]==='customVariable'&&_0x36fee2['Variable']&&_0x36fee2[_0x2025('0xb')][_0x2025('0xc')]&&_0x36fee2['key']){_0x2cb62f[_0x36fee2[_0x2025('0xb')][_0x2025('0xc')][_0x2025('0xd')]()]&&_0x436c31[_0x2025('0x6')](util['format']('%s:\x20%s',_0x36fee2[_0x2025('0x12')],_0x2cb62f[_0x36fee2[_0x2025('0xb')][_0x2025('0xc')]['toLowerCase']()]));}}}}return _0x436c31[_0x2025('0x14')](_0x2515ae);};exports[_0x2025('0x15')]=function(_0x2f103b){var _0x2d9c5b=_0x2f103b[_0x2025('0x16')](-0x1);if(_0x2d9c5b==='/'){_0x2f103b=_0x2f103b[_0x2025('0x17')](0x0,_0x2f103b[_0x2025('0x18')](_0x2d9c5b));}return _0x2f103b;};exports[_0x2025('0x19')]=function(_0x33da86){if(!_[_0x2025('0x1a')](_0x33da86)&&_0x33da86!==''){var _0x3f5f46=/^(([^<>()\[\]\\.,;:\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 _0x3f5f46[_0x2025('0x1b')](String(_0x33da86)[_0x2025('0xd')]());}else{return![];}};
\ No newline at end of file
+var _0x2358=['variableName','toString','customVariable','Variable','name','toLowerCase','keyType','string','key','format','%s:\x20%s','join','stripTrailingSlash','slice','substring','validateEmail','isNil','test','util','getString','sortBy','length','type','push','content','variable'];(function(_0x261522,_0x1adc1f){var _0x98a25a=function(_0x1b0f9c){while(--_0x1b0f9c){_0x261522['push'](_0x261522['shift']());}};_0x98a25a(++_0x1adc1f);}(_0x2358,0xe2));var _0x8235=function(_0x4dc5c2,_0x202ed0){_0x4dc5c2=_0x4dc5c2-0x0;var _0x46c9f2=_0x2358[_0x4dc5c2];return _0x46c9f2;};'use strict';var _=require('lodash');var util=require(_0x8235('0x0'));exports[_0x8235('0x1')]=function(_0x150a65,_0x27d7d4,_0x4f3e6e){var _0x1c496a=[];if(_0x150a65['length']>0x0){var _0x21c283=_[_0x8235('0x2')](_0x150a65,['id']);for(var _0x49e345=0x0;_0x49e345<_0x21c283[_0x8235('0x3')];_0x49e345++){var _0x1c277e=_0x21c283[_0x49e345];if(_0x1c277e[_0x8235('0x4')]==='string'){_0x1c496a[_0x8235('0x5')](_0x1c277e[_0x8235('0x6')]);}else if(_0x1c277e[_0x8235('0x4')]===_0x8235('0x7')&&_0x1c277e[_0x8235('0x8')]){_0x27d7d4[_0x1c277e[_0x8235('0x8')]]&&_0x1c496a['push'](_0x27d7d4[_0x1c277e[_0x8235('0x8')]][_0x8235('0x9')]());}else if(_0x1c277e['type']===_0x8235('0xa')&&_0x1c277e[_0x8235('0xb')]&&_0x1c277e[_0x8235('0xb')]['name']){_0x27d7d4[_0x1c277e[_0x8235('0xb')][_0x8235('0xc')]['toLowerCase']()]&&_0x1c496a[_0x8235('0x5')](_0x27d7d4[_0x1c277e['Variable'][_0x8235('0xc')][_0x8235('0xd')]()][_0x8235('0x9')]());}else if(_0x1c277e[_0x8235('0x4')]==='keyValue'){if(_0x1c277e[_0x8235('0xe')]===_0x8235('0xf')&&_0x1c277e[_0x8235('0x10')]){_0x1c496a[_0x8235('0x5')](util[_0x8235('0x11')](_0x8235('0x12'),_0x1c277e[_0x8235('0x10')],_0x1c277e['keyContent']));}else if(_0x1c277e[_0x8235('0xe')]===_0x8235('0x7')&&_0x1c277e[_0x8235('0x8')]&&_0x1c277e['key']){_0x27d7d4[_0x1c277e[_0x8235('0x8')]]&&_0x1c496a[_0x8235('0x5')](util[_0x8235('0x11')](_0x8235('0x12'),_0x1c277e['key'],_0x27d7d4[_0x1c277e[_0x8235('0x8')]]));}else if(_0x1c277e[_0x8235('0xe')]===_0x8235('0xa')&&_0x1c277e[_0x8235('0xb')]&&_0x1c277e[_0x8235('0xb')][_0x8235('0xc')]&&_0x1c277e['key']){_0x27d7d4[_0x1c277e['Variable']['name'][_0x8235('0xd')]()]&&_0x1c496a[_0x8235('0x5')](util['format'](_0x8235('0x12'),_0x1c277e['key'],_0x27d7d4[_0x1c277e[_0x8235('0xb')][_0x8235('0xc')][_0x8235('0xd')]()]));}}}}return _0x1c496a[_0x8235('0x13')](_0x4f3e6e);};exports[_0x8235('0x14')]=function(_0x3b52e9){var _0x51d9c8=_0x3b52e9[_0x8235('0x15')](-0x1);if(_0x51d9c8==='/'){_0x3b52e9=_0x3b52e9[_0x8235('0x16')](0x0,_0x3b52e9['lastIndexOf'](_0x51d9c8));}return _0x3b52e9;};exports[_0x8235('0x17')]=function(_0x2d25b2){if(!_[_0x8235('0x18')](_0x2d25b2)&&_0x2d25b2!==''){var _0x356a12=/^(([^<>()\[\]\\.,;:\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 _0x356a12[_0x8235('0x19')](String(_0x2d25b2)[_0x8235('0xd')]());}else{return![];}};
\ No newline at end of file
index e3c2056..3f2c3fb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa3b9=['remoteUri','create','admin','sessionName','HelpDesk','then','result','Ticket\x20could\x20not\x20be\x20created\x20due\x20to:\x20%s','stringify','catch','statusCode','error','[vTiger],\x20%s,\x20%s,\x20%s','validateEmail','Getting\x20agent\x20with\x20email','GET','query','SELECT\x20first_name,\x20last_name,\x20email1\x20FROM\x20Users\x20WHERE\x20email1=\x27%s\x27;','success','Agent\x20found!','resolve','email1','last_name','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','userId','info','username','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!','firstname','lastname','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','Contacts','Enduser\x20created.','phone','getEndUser','accessKey','login','token','Account\x20%d\x20is\x20not\x20valid','getConnection','[HTTP]','queue','stripTrailingSlash','monitor_format','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','calleridnum','The\x20Enduser\x20ID\x20is:','Fields','Ticket\x20created!','%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT','[QUEUE]','user:%s','trigger:browser:url','outbound','recordingFormat','[OUTBOUND]','serverUrl','email','The\x20User\x20ID\x20is:','destcalleridnum','The\x20Ticket\x20ID\x20is:','split','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','abandoned','[ABANDONED]','lodash','request-promise','bluebird','md5','util','ioredis','../../../../config/environment','../../../../config/logger','vTiger','redis','defaults','socket.io-emitter','emit','length','forEach','string','idField','type','variableName','customVariable','Variable','name','toLowerCase','Creating\x20new\x20ticket...','Normal','Open','getString','Subjects','Descriptions','POST','format','%s/webservice.php'];(function(_0x24cfe4,_0x22bf37){var _0x244380=function(_0x13ade6){while(--_0x13ade6){_0x24cfe4['push'](_0x24cfe4['shift']());}};_0x244380(++_0x22bf37);}(_0xa3b9,0x112));var _0x9a3b=function(_0x355b87,_0x5e797c){_0x355b87=_0x355b87-0x0;var _0x299e5e=_0xa3b9[_0x355b87];return _0x299e5e;};'use strict';var _=require(_0x9a3b('0x0'));var rp=require(_0x9a3b('0x1'));var BPromise=require(_0x9a3b('0x2'));var md5=require(_0x9a3b('0x3'));var util=require(_0x9a3b('0x4'));var Redis=require(_0x9a3b('0x5'));var intUtil=require('./util');var config=require(_0x9a3b('0x6'));var logger=require(_0x9a3b('0x7'))(_0x9a3b('0x8'));config[_0x9a3b('0x9')]=_[_0x9a3b('0xa')](config['redis'],{'host':'localhost','port':0x18eb});var io=require(_0x9a3b('0xb'))(new Redis(config[_0x9a3b('0x9')]));function emit(_0x242fbe,_0x2da1e2,_0x204d1f){io['to'](_0x242fbe)[_0x9a3b('0xc')](_0x2da1e2,_0x204d1f);}function getCustomFields(_0x34002a,_0x593fef){var _0x15ba19={};if(_0x34002a[_0x9a3b('0xd')]>0x0){_[_0x9a3b('0xe')](_0x34002a,function(_0x3e5858){if(_0x3e5858['type']===_0x9a3b('0xf')&&_0x3e5858[_0x9a3b('0x10')]){_0x15ba19[_0x3e5858[_0x9a3b('0x10')]]=_0x3e5858['content']['toString']();}else if(_0x3e5858[_0x9a3b('0x11')]==='variable'&&_0x3e5858['variableName']&&_0x3e5858[_0x9a3b('0x10')]&&_0x593fef[_0x3e5858[_0x9a3b('0x12')]]){_0x15ba19[_0x3e5858['idField']]=_0x593fef[_0x3e5858[_0x9a3b('0x12')]]['toString']();}else if(_0x3e5858[_0x9a3b('0x11')]===_0x9a3b('0x13')&&_0x3e5858[_0x9a3b('0x14')]&&_0x3e5858['Variable']['name']&&_0x3e5858[_0x9a3b('0x10')]&&_0x593fef[_0x3e5858['Variable'][_0x9a3b('0x15')][_0x9a3b('0x16')]()]){_0x15ba19[_0x3e5858[_0x9a3b('0x10')]]=_0x593fef[_0x3e5858[_0x9a3b('0x14')][_0x9a3b('0x15')]['toLowerCase']()]['toString']();}});}return _0x15ba19;}function createTicket(_0xa2975,_0x2dbf3b,_0x5c1af2,_0x22cbbb,_0x32b520,_0x236014,_0x4bd9c6){logger['info'](_0x9a3b('0x17'));var _0x55c97c=_['merge']({'parent_id':'','assigned_user_id':_0x2dbf3b['id'],'ticketpriorities':_0x9a3b('0x18'),'ticketstatus':_0x9a3b('0x19'),'ticket_title':intUtil[_0x9a3b('0x1a')](_0x22cbbb[_0x9a3b('0x1b')],_0x32b520,'\x20'),'description':intUtil[_0x9a3b('0x1a')](_0x22cbbb[_0x9a3b('0x1c')],_0x32b520,'\x0a'),'contact_id':_0x5c1af2['id']},getCustomFields(_0x236014,_0x32b520));var _0x5da539={'method':_0x9a3b('0x1d'),'uri':util[_0x9a3b('0x1e')](_0x9a3b('0x1f'),_0xa2975[_0x9a3b('0x20')]),'form':{'operation':_0x9a3b('0x21'),'username':_0x9a3b('0x22'),'sessionName':_0x4bd9c6[_0x9a3b('0x23')],'elementType':_0x9a3b('0x24'),'element':JSON['stringify'](_0x55c97c)},'json':!![]};return request(_0x5da539)[_0x9a3b('0x25')](function(_0xff2a20){if(_0xff2a20['success']){return BPromise['resolve']({'id':_0xff2a20[_0x9a3b('0x26')]['id']});}else{throw new Error(util[_0x9a3b('0x1e')](_0x9a3b('0x27'),JSON[_0x9a3b('0x28')](_0xff2a20['error'])));}})[_0x9a3b('0x29')](function(_0x21c712){var _0x9daa08=_0x21c712[_0x9a3b('0x2a')]||0x1f4;logger[_0x9a3b('0x2b')](_0x9a3b('0x2c'),'createTicket',_0x9daa08,JSON[_0x9a3b('0x28')](_0x21c712));});}function getUser(_0x4eeb4b,_0x432f23,_0xcc06f){if(intUtil[_0x9a3b('0x2d')](_0x432f23)){logger['info'](_0x9a3b('0x2e'),_0x432f23);return request({'method':_0x9a3b('0x2f'),'uri':util[_0x9a3b('0x1e')](_0x9a3b('0x1f'),_0x4eeb4b[_0x9a3b('0x20')]),'qs':{'operation':_0x9a3b('0x30'),'username':'admin','sessionName':_0xcc06f['sessionName'],'query':util[_0x9a3b('0x1e')](_0x9a3b('0x31'),_0x432f23)},'json':!![]})[_0x9a3b('0x25')](function(_0x240396){if(_0x240396[_0x9a3b('0x32')]&&_0x240396['result']['length']){logger['info'](_0x9a3b('0x33'));return BPromise[_0x9a3b('0x34')]({'id':_0x240396['result'][0x0]['id'],'email':_0x240396[_0x9a3b('0x26')][0x0][_0x9a3b('0x35')],'name':_0x240396[_0x9a3b('0x26')][0x0]['first_name']+'\x20'+_0x240396['result'][_0x9a3b('0x36')]});}else{logger['info'](_0x9a3b('0x37'));return BPromise['resolve']({'id':_0xcc06f[_0x9a3b('0x38')],'email':_0x4eeb4b['username'],'name':_0x9a3b('0x22')});}})[_0x9a3b('0x29')](function(_0x1d476f){var _0x3349a6=_0x1d476f[_0x9a3b('0x2a')]||0x1f4;logger['error'](_0x9a3b('0x2c'),'getUser',_0x3349a6,JSON[_0x9a3b('0x28')](_0x1d476f));});}else{logger[_0x9a3b('0x39')](_0x9a3b('0x37'));return BPromise[_0x9a3b('0x34')]({'id':_0xcc06f[_0x9a3b('0x38')],'email':_0x4eeb4b[_0x9a3b('0x3a')],'name':'admin'})['catch'](function(_0x3f06b6){var _0x173845=_0x3f06b6[_0x9a3b('0x2a')]||0x1f4;logger['error'](_0x9a3b('0x2c'),'getUser',_0x173845,JSON[_0x9a3b('0x28')](_0x3f06b6));});}}function getEndUser(_0x442cb9,_0x19d450,_0x4cd476,_0x35d73b){logger[_0x9a3b('0x39')](_0x9a3b('0x3b'),_0x4cd476);return request({'method':_0x9a3b('0x2f'),'uri':util[_0x9a3b('0x1e')](_0x9a3b('0x1f'),_0x442cb9['remoteUri']),'qs':{'operation':_0x9a3b('0x30'),'username':_0x9a3b('0x22'),'sessionName':_0x35d73b[_0x9a3b('0x23')],'query':util['format'](_0x9a3b('0x3c'),_0x4cd476,_0x4cd476,_0x4cd476,_0x4cd476,_0x4cd476)},'json':!![]})[_0x9a3b('0x25')](function(_0x1df2bf){if(_0x1df2bf[_0x9a3b('0x32')]&&_0x1df2bf[_0x9a3b('0x26')][_0x9a3b('0xd')]){logger[_0x9a3b('0x39')](_0x9a3b('0x3d'));return BPromise[_0x9a3b('0x34')]({'id':_0x1df2bf['result'][0x0]['id'],'name':_0x1df2bf[_0x9a3b('0x26')][0x0][_0x9a3b('0x3e')]+'\x20'+_0x1df2bf[_0x9a3b('0x26')][0x0][_0x9a3b('0x3f')],'phone':_0x4cd476});}else{logger[_0x9a3b('0x39')](_0x9a3b('0x40'));return request({'method':_0x9a3b('0x1d'),'uri':util[_0x9a3b('0x1e')](_0x9a3b('0x1f'),_0x442cb9[_0x9a3b('0x20')]),'form':{'operation':_0x9a3b('0x21'),'sessionName':_0x35d73b[_0x9a3b('0x23')],'elementType':_0x9a3b('0x41'),'element':JSON[_0x9a3b('0x28')]({'lastname':_0x19d450,'phone':_0x4cd476,'assigned_user_id':'\x20'})},'json':!![]})[_0x9a3b('0x25')](function(_0x366b4a){logger[_0x9a3b('0x39')](_0x9a3b('0x42'));return BPromise[_0x9a3b('0x34')]({'id':_0x366b4a[_0x9a3b('0x26')]['id'],'name':_0x366b4a['result'][_0x9a3b('0x3f')],'phone':_0x366b4a[_0x9a3b('0x26')][_0x9a3b('0x43')]});})[_0x9a3b('0x29')](function(_0x244f3b){var _0x16a3cc=_0x244f3b[_0x9a3b('0x2a')]||0x1f4;logger[_0x9a3b('0x2b')](_0x9a3b('0x2c'),_0x9a3b('0x44'),_0x16a3cc,JSON[_0x9a3b('0x28')](_0x244f3b));});}});}function getConnection(_0x1cda0b){var _0x35ceaa=_0x1cda0b['username'];var _0x2d01d2=_0x1cda0b[_0x9a3b('0x45')];return request({'method':_0x9a3b('0x2f'),'uri':util[_0x9a3b('0x1e')](_0x9a3b('0x1f'),_0x1cda0b[_0x9a3b('0x20')]),'qs':{'operation':'getchallenge','username':_0x35ceaa},'json':!![]})['then'](function(_0x2a8233){if(_0x2a8233['success']){return request({'method':_0x9a3b('0x1d'),'uri':util[_0x9a3b('0x1e')](_0x9a3b('0x1f'),_0x1cda0b[_0x9a3b('0x20')]),'form':{'operation':_0x9a3b('0x46'),'username':_0x9a3b('0x22'),'accessKey':md5(_0x2a8233[_0x9a3b('0x26')][_0x9a3b('0x47')]+_0x2d01d2)},'json':!![]});}})[_0x9a3b('0x25')](function(_0xe1da3c){if(_0xe1da3c[_0x9a3b('0x32')]){return BPromise[_0x9a3b('0x34')](_0xe1da3c[_0x9a3b('0x26')]);}else{throw new Error(util[_0x9a3b('0x1e')](_0x9a3b('0x48'),_0x1cda0b['id']));}})['catch'](function(_0x2250dc){var _0xbde126=_0x2250dc[_0x9a3b('0x2a')]||0x1f4;logger['error'](_0x9a3b('0x2c'),_0x9a3b('0x49'),_0xbde126,JSON['stringify'](_0x2250dc));});}function request(_0x361c09){logger[_0x9a3b('0x39')](_0x9a3b('0x4a'),JSON[_0x9a3b('0x28')](_0x361c09));return rp(_0x361c09);}exports[_0x9a3b('0x4b')]=function(_0x2953e3,_0xfa2703,_0x329294,_0x32566d,_0x405af1,_0xecc304){var _0x159e43,_0x1576d7,_0x27abcc,_0x132873;_0xecc304[_0x9a3b('0x20')]=intUtil[_0x9a3b('0x4c')](_0xecc304[_0x9a3b('0x20')]);if(_0x405af1&&_0x405af1[_0x9a3b('0x4d')]){logger['info']('[QUEUE]',_0x9a3b('0x4e'));_0xfa2703[_0x9a3b('0x4f')]=util[_0x9a3b('0x1e')](_0x9a3b('0x50'),_0xecc304['serverUrl'],_0xfa2703[_0x9a3b('0x51')],md5(_0xfa2703[_0x9a3b('0x51')]));}else{_0xfa2703['recordingURL']='';}return getConnection(_0xecc304)[_0x9a3b('0x25')](function(_0x1c0494){_0x132873=_0x1c0494;return getUser(_0xecc304,_0x32566d['email'],_0x132873);})['then'](function(_0x5ea313){_0x159e43=_0x5ea313;logger['info']('The\x20User\x20ID\x20is:',_0x159e43['id']);return getEndUser(_0xecc304,_0xfa2703['calleridname'],_0xfa2703[_0x9a3b('0x52')],_0x132873);})[_0x9a3b('0x25')](function(_0x43597d){_0x1576d7=_0x43597d;logger['info'](_0x9a3b('0x53'),_0x1576d7['id']);return createTicket(_0xecc304,_0x159e43,_0x1576d7,_0x329294,_0xfa2703,_0x329294[_0x9a3b('0x54')],_0x132873);})[_0x9a3b('0x25')](function(_0xdcbe1d){_0x27abcc=_0xdcbe1d;logger[_0x9a3b('0x39')](_0x9a3b('0x55'));logger['info']('The\x20Ticket\x20ID\x20is:',_0x27abcc['id']);var _0x177595=util[_0x9a3b('0x1e')](_0x9a3b('0x56'),_0xecc304[_0x9a3b('0x20')],_['split'](_0x27abcc['id'],'x')[0x1]);logger['info'](_0x9a3b('0x57'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x9a3b('0x1e')](_0x9a3b('0x58'),_0x32566d[_0x9a3b('0x15')]),_0x9a3b('0x59'),{'uri':_0x177595});})[_0x9a3b('0x29')](function(_0x18af58){logger[_0x9a3b('0x2b')](_0x9a3b('0x57'),JSON[_0x9a3b('0x28')](_0x18af58));});};exports[_0x9a3b('0x5a')]=function(_0x2666d3,_0x4c6990,_0xc7bf28,_0x5bf419,_0x142e78,_0x2e2881,_0x2d5c0b){var _0x1eb516,_0x41411d,_0x806726,_0x5f1fb4;_0x2e2881[_0x9a3b('0x20')]=intUtil[_0x9a3b('0x4c')](_0x2e2881['remoteUri']);_0x2e2881['serverUrl']=intUtil[_0x9a3b('0x4c')](_0x2e2881['serverUrl']);if(_0x2d5c0b&&_0x2d5c0b[_0x9a3b('0x5b')]&&_0x2d5c0b[_0x9a3b('0x5b')]!=='none'){logger[_0x9a3b('0x39')](_0x9a3b('0x5c'),_0x9a3b('0x4e'));_0x4c6990['recordingURL']=util[_0x9a3b('0x1e')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x2e2881[_0x9a3b('0x5d')],_0x4c6990[_0x9a3b('0x51')],md5(_0x4c6990['uniqueid']));}return getConnection(_0x2e2881)['then'](function(_0xe74a92){_0x5f1fb4=_0xe74a92;return getUser(_0x2e2881,_0x5bf419[_0x9a3b('0x5e')],_0x5f1fb4);})[_0x9a3b('0x25')](function(_0x4e2c2f){_0x1eb516=_0x4e2c2f;logger[_0x9a3b('0x39')](_0x9a3b('0x5f'),_0x1eb516['id']);return getEndUser(_0x2e2881,_0x4c6990['destcalleridname'],_0x4c6990[_0x9a3b('0x60')],_0x5f1fb4);})[_0x9a3b('0x25')](function(_0x14e399){_0x41411d=_0x14e399;logger['info']('The\x20Enduser\x20ID\x20is:',_0x41411d['id']);return createTicket(_0x2e2881,_0x1eb516,_0x41411d,_0xc7bf28,_0x4c6990,_0xc7bf28['Fields'],_0x5f1fb4);})['then'](function(_0x265a29){_0x806726=_0x265a29;logger[_0x9a3b('0x39')](_0x9a3b('0x55'));logger[_0x9a3b('0x39')](_0x9a3b('0x61'),_0x806726['id']);var _0x1d6261=util[_0x9a3b('0x1e')](_0x9a3b('0x56'),_0x2e2881[_0x9a3b('0x20')],_[_0x9a3b('0x62')](_0x806726['id'],'x')[0x1]);logger[_0x9a3b('0x39')](_0x9a3b('0x5c'),_0x9a3b('0x63'));emit(util[_0x9a3b('0x1e')]('user:%s',_0x5bf419[_0x9a3b('0x15')]),_0x9a3b('0x59'),{'uri':_0x1d6261});})[_0x9a3b('0x29')](function(_0x490a8a){logger['error']('[OUTBOUND]',JSON[_0x9a3b('0x28')](_0x490a8a));});};exports[_0x9a3b('0x64')]=function(_0x4578a9,_0x2d1332,_0x53ae2a,_0x324e19,_0x592c35,_0x27a120){var _0xb6c0b6,_0x326213,_0x1c4e0c,_0x39c489;_0x27a120[_0x9a3b('0x20')]=intUtil[_0x9a3b('0x4c')](_0x27a120[_0x9a3b('0x20')]);_0x27a120['serverUrl']=intUtil[_0x9a3b('0x4c')](_0x27a120[_0x9a3b('0x5d')]);if(_0x592c35&&_0x592c35['monitor_format']){logger[_0x9a3b('0x39')](_0x9a3b('0x65'),_0x9a3b('0x4e'));_0x2d1332[_0x9a3b('0x4f')]=util[_0x9a3b('0x1e')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x27a120['serverUrl'],_0x2d1332[_0x9a3b('0x51')],md5(_0x2d1332[_0x9a3b('0x51')]));}else{_0x2d1332[_0x9a3b('0x4f')]='';}return getConnection(_0x27a120)['then'](function(_0x43bc13){_0x39c489=_0x43bc13;return getUser(_0x27a120,'',_0x39c489);})[_0x9a3b('0x25')](function(_0x5d5ded){_0xb6c0b6=_0x5d5ded;logger['info']('The\x20User\x20ID\x20is:',_0xb6c0b6['id']);return getEndUser(_0x27a120,_0x2d1332['calleridname'],_0x2d1332[_0x9a3b('0x52')],_0x39c489);})[_0x9a3b('0x25')](function(_0x4f23fe){_0x326213=_0x4f23fe;logger['info'](_0x9a3b('0x53'),_0x326213['id']);return createTicket(_0x27a120,_0xb6c0b6,_0x326213,_0x53ae2a,_0x2d1332,_0x53ae2a['Fields'],_0x39c489);})['then'](function(_0x574b82){_0x1c4e0c=_0x574b82;logger[_0x9a3b('0x39')](_0x9a3b('0x55'));logger[_0x9a3b('0x39')](_0x9a3b('0x61'),_0x1c4e0c['id']);})[_0x9a3b('0x29')](function(_0x4d6acd){logger['error'](_0x9a3b('0x65'),JSON[_0x9a3b('0x28')](_0x4d6acd));});};
\ No newline at end of file
+var _0x2547=['then','success','resolve','result','Ticket\x20could\x20not\x20be\x20created\x20due\x20to:\x20%s','error','statusCode','createTicket','validateEmail','Getting\x20agent\x20with\x20email','GET','admin','sessionName','Agent\x20found!','first_name','last_name','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','userId','username','catch','[vTiger],\x20%s,\x20%s,\x20%s','getUser','Searching\x20end\x20user\x20with\x20phone','query','SELECT\x20id,\x20firstname,\x20lastname,\x20email,\x20phone,\x20mobile,\x20homephone,\x20otherphone,\x20assistantphone\x20FROM\x20Contacts\x20WHERE\x20phone\x20=\x20\x27%s\x27\x20OR\x20mobile\x20=\x27%s\x27\x20OR\x20homephone\x20=\x27%s\x27\x20OR\x20otherphone\x20=\x27%s\x27\x20OR\x20assistantphone\x20=\x27%s\x27;','Enduser\x20found!','firstname','lastname','Enduser\x20created.','phone','getEndUser','accessKey','getchallenge','token','Account\x20%d\x20is\x20not\x20valid','[HTTP]','stripTrailingSlash','monitor_format','Recording\x20is\x20enabled!','serverUrl','recordingURL','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','Fields','Ticket\x20created!','%s/index.php?module=HelpDesk&view=Detail&record=%s&app=SUPPORT','split','[QUEUE]','user:%s','recordingFormat','none','[OUTBOUND]','uniqueid','destcalleridnum','The\x20Ticket\x20ID\x20is:','trigger:browser:url','abandoned','The\x20Enduser\x20ID\x20is:','[ABANDONED]','request-promise','bluebird','md5','util','ioredis','./util','../../../../config/environment','../../../../config/logger','redis','defaults','localhost','emit','length','forEach','type','string','idField','content','variableName','toString','customVariable','Variable','name','toLowerCase','info','Creating\x20new\x20ticket...','merge','Normal','Open','getString','Subjects','Descriptions','POST','format','%s/webservice.php','remoteUri','create','HelpDesk','stringify'];(function(_0x517e1a,_0x43b320){var _0x165742=function(_0x5d7c38){while(--_0x5d7c38){_0x517e1a['push'](_0x517e1a['shift']());}};_0x165742(++_0x43b320);}(_0x2547,0x1cd));var _0x7254=function(_0x2ad22a,_0x5892d){_0x2ad22a=_0x2ad22a-0x0;var _0x25093a=_0x2547[_0x2ad22a];return _0x25093a;};'use strict';var _=require('lodash');var rp=require(_0x7254('0x0'));var BPromise=require(_0x7254('0x1'));var md5=require(_0x7254('0x2'));var util=require(_0x7254('0x3'));var Redis=require(_0x7254('0x4'));var intUtil=require(_0x7254('0x5'));var config=require(_0x7254('0x6'));var logger=require(_0x7254('0x7'))('vTiger');config[_0x7254('0x8')]=_[_0x7254('0x9')](config[_0x7254('0x8')],{'host':_0x7254('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x7254('0x8')]));function emit(_0x6e3d84,_0x395913,_0x5da1ec){io['to'](_0x6e3d84)[_0x7254('0xb')](_0x395913,_0x5da1ec);}function getCustomFields(_0x555b2e,_0x50925f){var _0x51a750={};if(_0x555b2e[_0x7254('0xc')]>0x0){_[_0x7254('0xd')](_0x555b2e,function(_0x31d5a5){if(_0x31d5a5[_0x7254('0xe')]===_0x7254('0xf')&&_0x31d5a5[_0x7254('0x10')]){_0x51a750[_0x31d5a5['idField']]=_0x31d5a5[_0x7254('0x11')]['toString']();}else if(_0x31d5a5[_0x7254('0xe')]==='variable'&&_0x31d5a5[_0x7254('0x12')]&&_0x31d5a5[_0x7254('0x10')]&&_0x50925f[_0x31d5a5[_0x7254('0x12')]]){_0x51a750[_0x31d5a5[_0x7254('0x10')]]=_0x50925f[_0x31d5a5[_0x7254('0x12')]][_0x7254('0x13')]();}else if(_0x31d5a5[_0x7254('0xe')]===_0x7254('0x14')&&_0x31d5a5[_0x7254('0x15')]&&_0x31d5a5[_0x7254('0x15')][_0x7254('0x16')]&&_0x31d5a5[_0x7254('0x10')]&&_0x50925f[_0x31d5a5[_0x7254('0x15')]['name'][_0x7254('0x17')]()]){_0x51a750[_0x31d5a5[_0x7254('0x10')]]=_0x50925f[_0x31d5a5[_0x7254('0x15')][_0x7254('0x16')][_0x7254('0x17')]()][_0x7254('0x13')]();}});}return _0x51a750;}function createTicket(_0x2737e0,_0x5dd23b,_0x1f48f6,_0x2283b7,_0x1fb71c,_0x45aa93,_0x2a1ddc){logger[_0x7254('0x18')](_0x7254('0x19'));var _0x43b152=_[_0x7254('0x1a')]({'parent_id':'','assigned_user_id':_0x5dd23b['id'],'ticketpriorities':_0x7254('0x1b'),'ticketstatus':_0x7254('0x1c'),'ticket_title':intUtil[_0x7254('0x1d')](_0x2283b7[_0x7254('0x1e')],_0x1fb71c,'\x20'),'description':intUtil[_0x7254('0x1d')](_0x2283b7[_0x7254('0x1f')],_0x1fb71c,'\x0a'),'contact_id':_0x1f48f6['id']},getCustomFields(_0x45aa93,_0x1fb71c));var _0x95ceaa={'method':_0x7254('0x20'),'uri':util[_0x7254('0x21')](_0x7254('0x22'),_0x2737e0[_0x7254('0x23')]),'form':{'operation':_0x7254('0x24'),'username':'admin','sessionName':_0x2a1ddc['sessionName'],'elementType':_0x7254('0x25'),'element':JSON[_0x7254('0x26')](_0x43b152)},'json':!![]};return request(_0x95ceaa)[_0x7254('0x27')](function(_0x54dace){if(_0x54dace[_0x7254('0x28')]){return BPromise[_0x7254('0x29')]({'id':_0x54dace[_0x7254('0x2a')]['id']});}else{throw new Error(util['format'](_0x7254('0x2b'),JSON[_0x7254('0x26')](_0x54dace[_0x7254('0x2c')])));}})['catch'](function(_0x3c22d0){var _0x594a63=_0x3c22d0[_0x7254('0x2d')]||0x1f4;logger[_0x7254('0x2c')]('[vTiger],\x20%s,\x20%s,\x20%s',_0x7254('0x2e'),_0x594a63,JSON[_0x7254('0x26')](_0x3c22d0));});}function getUser(_0x4f684c,_0x14cbea,_0x6c4927){if(intUtil[_0x7254('0x2f')](_0x14cbea)){logger[_0x7254('0x18')](_0x7254('0x30'),_0x14cbea);return request({'method':_0x7254('0x31'),'uri':util['format'](_0x7254('0x22'),_0x4f684c[_0x7254('0x23')]),'qs':{'operation':'query','username':_0x7254('0x32'),'sessionName':_0x6c4927[_0x7254('0x33')],'query':util[_0x7254('0x21')]('SELECT\x20first_name,\x20last_name,\x20email1\x20FROM\x20Users\x20WHERE\x20email1=\x27%s\x27;',_0x14cbea)},'json':!![]})[_0x7254('0x27')](function(_0xd1b95d){if(_0xd1b95d[_0x7254('0x28')]&&_0xd1b95d[_0x7254('0x2a')][_0x7254('0xc')]){logger[_0x7254('0x18')](_0x7254('0x34'));return BPromise['resolve']({'id':_0xd1b95d[_0x7254('0x2a')][0x0]['id'],'email':_0xd1b95d['result'][0x0]['email1'],'name':_0xd1b95d[_0x7254('0x2a')][0x0][_0x7254('0x35')]+'\x20'+_0xd1b95d[_0x7254('0x2a')][_0x7254('0x36')]});}else{logger[_0x7254('0x18')](_0x7254('0x37'));return BPromise[_0x7254('0x29')]({'id':_0x6c4927[_0x7254('0x38')],'email':_0x4f684c[_0x7254('0x39')],'name':_0x7254('0x32')});}})[_0x7254('0x3a')](function(_0x3b0abd){var _0x462ab0=_0x3b0abd[_0x7254('0x2d')]||0x1f4;logger['error'](_0x7254('0x3b'),_0x7254('0x3c'),_0x462ab0,JSON[_0x7254('0x26')](_0x3b0abd));});}else{logger[_0x7254('0x18')](_0x7254('0x37'));return BPromise['resolve']({'id':_0x6c4927[_0x7254('0x38')],'email':_0x4f684c['username'],'name':_0x7254('0x32')})[_0x7254('0x3a')](function(_0x3bb517){var _0x238aa6=_0x3bb517[_0x7254('0x2d')]||0x1f4;logger['error'](_0x7254('0x3b'),'getUser',_0x238aa6,JSON[_0x7254('0x26')](_0x3bb517));});}}function getEndUser(_0x12bd3b,_0x49ea48,_0x1485a0,_0x3c5bf4){logger[_0x7254('0x18')](_0x7254('0x3d'),_0x1485a0);return request({'method':_0x7254('0x31'),'uri':util[_0x7254('0x21')]('%s/webservice.php',_0x12bd3b[_0x7254('0x23')]),'qs':{'operation':_0x7254('0x3e'),'username':_0x7254('0x32'),'sessionName':_0x3c5bf4['sessionName'],'query':util[_0x7254('0x21')](_0x7254('0x3f'),_0x1485a0,_0x1485a0,_0x1485a0,_0x1485a0,_0x1485a0)},'json':!![]})[_0x7254('0x27')](function(_0x4824d5){if(_0x4824d5[_0x7254('0x28')]&&_0x4824d5[_0x7254('0x2a')][_0x7254('0xc')]){logger[_0x7254('0x18')](_0x7254('0x40'));return BPromise['resolve']({'id':_0x4824d5['result'][0x0]['id'],'name':_0x4824d5[_0x7254('0x2a')][0x0][_0x7254('0x41')]+'\x20'+_0x4824d5[_0x7254('0x2a')][0x0][_0x7254('0x42')],'phone':_0x1485a0});}else{logger['info']('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'method':_0x7254('0x20'),'uri':util['format'](_0x7254('0x22'),_0x12bd3b[_0x7254('0x23')]),'form':{'operation':_0x7254('0x24'),'sessionName':_0x3c5bf4[_0x7254('0x33')],'elementType':'Contacts','element':JSON['stringify']({'lastname':_0x49ea48,'phone':_0x1485a0,'assigned_user_id':'\x20'})},'json':!![]})[_0x7254('0x27')](function(_0x3f6ead){logger[_0x7254('0x18')](_0x7254('0x43'));return BPromise[_0x7254('0x29')]({'id':_0x3f6ead['result']['id'],'name':_0x3f6ead['result'][_0x7254('0x42')],'phone':_0x3f6ead[_0x7254('0x2a')][_0x7254('0x44')]});})['catch'](function(_0x32b4ea){var _0x33604e=_0x32b4ea['statusCode']||0x1f4;logger[_0x7254('0x2c')](_0x7254('0x3b'),_0x7254('0x45'),_0x33604e,JSON[_0x7254('0x26')](_0x32b4ea));});}});}function getConnection(_0x553917){var _0x345811=_0x553917[_0x7254('0x39')];var _0x5b7332=_0x553917[_0x7254('0x46')];return request({'method':_0x7254('0x31'),'uri':util[_0x7254('0x21')]('%s/webservice.php',_0x553917[_0x7254('0x23')]),'qs':{'operation':_0x7254('0x47'),'username':_0x345811},'json':!![]})['then'](function(_0x5f101e){if(_0x5f101e[_0x7254('0x28')]){return request({'method':'POST','uri':util[_0x7254('0x21')](_0x7254('0x22'),_0x553917['remoteUri']),'form':{'operation':'login','username':_0x7254('0x32'),'accessKey':md5(_0x5f101e[_0x7254('0x2a')][_0x7254('0x48')]+_0x5b7332)},'json':!![]});}})[_0x7254('0x27')](function(_0x200e5c){if(_0x200e5c[_0x7254('0x28')]){return BPromise['resolve'](_0x200e5c[_0x7254('0x2a')]);}else{throw new Error(util['format'](_0x7254('0x49'),_0x553917['id']));}})[_0x7254('0x3a')](function(_0x450d24){var _0x5c2339=_0x450d24[_0x7254('0x2d')]||0x1f4;logger[_0x7254('0x2c')](_0x7254('0x3b'),'getConnection',_0x5c2339,JSON[_0x7254('0x26')](_0x450d24));});}function request(_0x3269b5){logger[_0x7254('0x18')](_0x7254('0x4a'),JSON[_0x7254('0x26')](_0x3269b5));return rp(_0x3269b5);}exports['queue']=function(_0x5e66c6,_0x24c532,_0x2cb7cd,_0x441d23,_0x10e1cb,_0x3b0002){var _0x4c6838,_0x5a44fb,_0x37f72f,_0x2d91ab;_0x3b0002[_0x7254('0x23')]=intUtil[_0x7254('0x4b')](_0x3b0002['remoteUri']);if(_0x10e1cb&&_0x10e1cb[_0x7254('0x4c')]){logger[_0x7254('0x18')]('[QUEUE]',_0x7254('0x4d'));_0x24c532['recordingURL']=util[_0x7254('0x21')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x3b0002[_0x7254('0x4e')],_0x24c532['uniqueid'],md5(_0x24c532['uniqueid']));}else{_0x24c532[_0x7254('0x4f')]='';}return getConnection(_0x3b0002)[_0x7254('0x27')](function(_0xc56bea){_0x2d91ab=_0xc56bea;return getUser(_0x3b0002,_0x441d23[_0x7254('0x50')],_0x2d91ab);})['then'](function(_0x3118b8){_0x4c6838=_0x3118b8;logger['info'](_0x7254('0x51'),_0x4c6838['id']);return getEndUser(_0x3b0002,_0x24c532[_0x7254('0x52')],_0x24c532[_0x7254('0x53')],_0x2d91ab);})[_0x7254('0x27')](function(_0x1bb429){_0x5a44fb=_0x1bb429;logger[_0x7254('0x18')]('The\x20Enduser\x20ID\x20is:',_0x5a44fb['id']);return createTicket(_0x3b0002,_0x4c6838,_0x5a44fb,_0x2cb7cd,_0x24c532,_0x2cb7cd[_0x7254('0x54')],_0x2d91ab);})[_0x7254('0x27')](function(_0x9bf8f0){_0x37f72f=_0x9bf8f0;logger[_0x7254('0x18')](_0x7254('0x55'));logger[_0x7254('0x18')]('The\x20Ticket\x20ID\x20is:',_0x37f72f['id']);var _0x2fe0b2=util[_0x7254('0x21')](_0x7254('0x56'),_0x3b0002[_0x7254('0x23')],_[_0x7254('0x57')](_0x37f72f['id'],'x')[0x1]);logger[_0x7254('0x18')](_0x7254('0x58'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util['format'](_0x7254('0x59'),_0x441d23['name']),'trigger:browser:url',{'uri':_0x2fe0b2});})[_0x7254('0x3a')](function(_0xbddcbb){logger[_0x7254('0x2c')]('[QUEUE]',JSON[_0x7254('0x26')](_0xbddcbb));});};exports['outbound']=function(_0x2438e6,_0xa92d19,_0x34a2c0,_0x1fa2b5,_0xb8ac1f,_0x5a356d,_0x35882b){var _0x3ab117,_0x178353,_0x638790,_0x5cc617;_0x5a356d['remoteUri']=intUtil[_0x7254('0x4b')](_0x5a356d[_0x7254('0x23')]);_0x5a356d[_0x7254('0x4e')]=intUtil[_0x7254('0x4b')](_0x5a356d[_0x7254('0x4e')]);if(_0x35882b&&_0x35882b[_0x7254('0x5a')]&&_0x35882b[_0x7254('0x5a')]!==_0x7254('0x5b')){logger[_0x7254('0x18')](_0x7254('0x5c'),_0x7254('0x4d'));_0xa92d19[_0x7254('0x4f')]=util[_0x7254('0x21')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x5a356d[_0x7254('0x4e')],_0xa92d19[_0x7254('0x5d')],md5(_0xa92d19[_0x7254('0x5d')]));}return getConnection(_0x5a356d)['then'](function(_0x1dfcbb){_0x5cc617=_0x1dfcbb;return getUser(_0x5a356d,_0x1fa2b5[_0x7254('0x50')],_0x5cc617);})[_0x7254('0x27')](function(_0xc37d5e){_0x3ab117=_0xc37d5e;logger['info'](_0x7254('0x51'),_0x3ab117['id']);return getEndUser(_0x5a356d,_0xa92d19['destcalleridname'],_0xa92d19[_0x7254('0x5e')],_0x5cc617);})[_0x7254('0x27')](function(_0x1112d7){_0x178353=_0x1112d7;logger[_0x7254('0x18')]('The\x20Enduser\x20ID\x20is:',_0x178353['id']);return createTicket(_0x5a356d,_0x3ab117,_0x178353,_0x34a2c0,_0xa92d19,_0x34a2c0[_0x7254('0x54')],_0x5cc617);})['then'](function(_0x307557){_0x638790=_0x307557;logger['info'](_0x7254('0x55'));logger[_0x7254('0x18')](_0x7254('0x5f'),_0x638790['id']);var _0x24619f=util[_0x7254('0x21')](_0x7254('0x56'),_0x5a356d[_0x7254('0x23')],_[_0x7254('0x57')](_0x638790['id'],'x')[0x1]);logger['info'](_0x7254('0x5c'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x7254('0x21')](_0x7254('0x59'),_0x1fa2b5[_0x7254('0x16')]),_0x7254('0x60'),{'uri':_0x24619f});})[_0x7254('0x3a')](function(_0x2988cf){logger[_0x7254('0x2c')](_0x7254('0x5c'),JSON['stringify'](_0x2988cf));});};exports[_0x7254('0x61')]=function(_0x5324cd,_0x231184,_0x6b8eb9,_0x2399ef,_0x4578cf,_0x8620d0){var _0x28abbf,_0xb65570,_0x3cacde,_0x195437;_0x8620d0[_0x7254('0x23')]=intUtil[_0x7254('0x4b')](_0x8620d0[_0x7254('0x23')]);_0x8620d0[_0x7254('0x4e')]=intUtil[_0x7254('0x4b')](_0x8620d0[_0x7254('0x4e')]);if(_0x4578cf&&_0x4578cf[_0x7254('0x4c')]){logger[_0x7254('0x18')]('[ABANDONED]','Recording\x20is\x20enabled!');_0x231184[_0x7254('0x4f')]=util[_0x7254('0x21')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x8620d0['serverUrl'],_0x231184['uniqueid'],md5(_0x231184[_0x7254('0x5d')]));}else{_0x231184[_0x7254('0x4f')]='';}return getConnection(_0x8620d0)[_0x7254('0x27')](function(_0x95bc79){_0x195437=_0x95bc79;return getUser(_0x8620d0,'',_0x195437);})['then'](function(_0x2f8e8e){_0x28abbf=_0x2f8e8e;logger[_0x7254('0x18')]('The\x20User\x20ID\x20is:',_0x28abbf['id']);return getEndUser(_0x8620d0,_0x231184[_0x7254('0x52')],_0x231184[_0x7254('0x53')],_0x195437);})[_0x7254('0x27')](function(_0x534645){_0xb65570=_0x534645;logger['info'](_0x7254('0x62'),_0xb65570['id']);return createTicket(_0x8620d0,_0x28abbf,_0xb65570,_0x6b8eb9,_0x231184,_0x6b8eb9[_0x7254('0x54')],_0x195437);})['then'](function(_0x261f78){_0x3cacde=_0x261f78;logger[_0x7254('0x18')](_0x7254('0x55'));logger[_0x7254('0x18')](_0x7254('0x5f'),_0x3cacde['id']);})['catch'](function(_0xc94982){logger[_0x7254('0x2c')](_0x7254('0x63'),JSON['stringify'](_0xc94982));});};
\ No newline at end of file
index e13f94b..9a29c77 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb1d8=['Subjects','getString','Fields','then','Ticket\x20created!','ticket','Getting\x20agent\x20with\x20email','format','%s/search.json','Agent\x20found!','find','results','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','%s/users/me.json','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','filter','end-user','length','first','Enduser\x20found!','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','%s/users.json','POST','Caller\x20-\x20%s','password','%s:%s','username','authType','token','Basic\x20%s','toString','base64','[HTTP]','stringify','map','nameField','customField','toLowerCase','content','string','idField','type','variable','variableName','push','customVariable','Variable','name','custom_fields','queue','serverUrl','stripTrailingSlash','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','recordingURL','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','Authorization','email','The\x20User\x20ID\x20is:','calleridnum','The\x20Enduser\x20ID\x20is:','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','error','Zendesk\x20account\x20type\x20not\x20recognized','catch','inspect','outbound','recordingFormat','none','[OUTBOUND]','destcalleridname','The\x20Ticket\x20ID\x20is:','integrationTab','user:%s','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','abandoned','request-promise','md5','util','ioredis','../../../../config/environment','../../../../config/logger','zendesk','redis','defaults','localhost','application/json','info','remoteUri','merge','Tags'];(function(_0x30ba0c,_0x43b571){var _0xba9f19=function(_0x3ea0cb){while(--_0x3ea0cb){_0x30ba0c['push'](_0x30ba0c['shift']());}};_0xba9f19(++_0x43b571);}(_0xb1d8,0xb5));var _0x8b1d=function(_0x42d795,_0x9439d9){_0x42d795=_0x42d795-0x0;var _0x480129=_0xb1d8[_0x42d795];return _0x480129;};'use strict';var _=require('lodash');var rp=require(_0x8b1d('0x0'));var md5=require(_0x8b1d('0x1'));var util=require(_0x8b1d('0x2'));var Redis=require(_0x8b1d('0x3'));var intUtil=require('./util');var config=require(_0x8b1d('0x4'));var logger=require(_0x8b1d('0x5'))(_0x8b1d('0x6'));config[_0x8b1d('0x7')]=_[_0x8b1d('0x8')](config[_0x8b1d('0x7')],{'host':_0x8b1d('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x8b1d('0x7')]));function emit(_0xb75d58,_0x59282d,_0x17ffd1){io['to'](_0xb75d58)['emit'](_0x59282d,_0x17ffd1);}var headers={'Content-Type':_0x8b1d('0xa'),'Accept':'application/json'};function getTicket(_0x53bc1e,_0x68babe,_0x1aab4a,_0x3e4bcb,_0x1aafc0){logger[_0x8b1d('0xb')]('Creating\x20new\x20ticket...');return request({'uri':util['format']('%s/tickets.json',_0x53bc1e[_0x8b1d('0xc')]),'method':'POST','body':{'ticket':_[_0x8b1d('0xd')]({'requester_id':_0x1aab4a['id'],'submitter_id':_0x68babe?_0x68babe['id']:undefined,'assignee_id':_0x68babe?_0x68babe['id']:undefined,'tags':getTags(_0x3e4bcb[_0x8b1d('0xe')],'name'),'subject':intUtil['getString'](_0x3e4bcb[_0x8b1d('0xf')],_0x1aafc0,'\x20'),'description':intUtil[_0x8b1d('0x10')](_0x3e4bcb['Descriptions'],_0x1aafc0,'\x0a'),'comment':{'public':![],'body':intUtil[_0x8b1d('0x10')](_0x3e4bcb['Descriptions'],_0x1aafc0,'\x0a')}},getCustomFields(_0x3e4bcb[_0x8b1d('0x11')],_0x1aafc0))}})[_0x8b1d('0x12')](function(_0x2264ff){logger[_0x8b1d('0xb')](_0x8b1d('0x13'));return _0x2264ff[_0x8b1d('0x14')];});}function getUser(_0x33b9e4,_0x4e1d53){if(intUtil['validateEmail'](_0x4e1d53)){logger[_0x8b1d('0xb')](_0x8b1d('0x15'),_0x4e1d53);return request({'uri':util[_0x8b1d('0x16')](_0x8b1d('0x17'),_0x33b9e4[_0x8b1d('0xc')]),'qs':{'query':util[_0x8b1d('0x16')]('type:user\x20role:agent\x20email:%s',_0x4e1d53)}})[_0x8b1d('0x12')](function(_0x4b3cda){if(_0x4b3cda['count']){logger[_0x8b1d('0xb')](_0x8b1d('0x18'));return _[_0x8b1d('0x19')](_0x4b3cda[_0x8b1d('0x1a')],{'email':_0x4e1d53,'role':'agent'});}else{logger[_0x8b1d('0xb')](_0x8b1d('0x1b'));return request({'uri':util[_0x8b1d('0x16')](_0x8b1d('0x1c'),_0x33b9e4[_0x8b1d('0xc')])})[_0x8b1d('0x12')](function(_0x3c8a8d){logger[_0x8b1d('0xb')](_0x8b1d('0x1d'));return _0x3c8a8d[_0x8b1d('0x1e')];});}});}else{logger[_0x8b1d('0xb')]('Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!');return request({'uri':util['format'](_0x8b1d('0x1c'),_0x33b9e4[_0x8b1d('0xc')])})[_0x8b1d('0x12')](function(_0x39d7d2){logger[_0x8b1d('0xb')](_0x8b1d('0x1d'));return _0x39d7d2[_0x8b1d('0x1e')];});}}function getEndUser(_0x10324e,_0x2efa28,_0x5caaf3){logger['info'](_0x8b1d('0x1f'),_0x5caaf3);return request({'uri':util[_0x8b1d('0x16')](_0x8b1d('0x17'),_0x10324e[_0x8b1d('0xc')]),'qs':{'query':util[_0x8b1d('0x16')](_0x8b1d('0x20'),_0x5caaf3)}})['then'](function(_0x121b17){var _0x3928c1;if(_0x121b17[_0x8b1d('0x1a')]['length']){_0x121b17[_0x8b1d('0x1a')]=_[_0x8b1d('0x21')](_0x121b17[_0x8b1d('0x1a')],{'suspended':![],'role':_0x8b1d('0x22')});if(_0x121b17[_0x8b1d('0x1a')][_0x8b1d('0x23')]){_0x3928c1=_[_0x8b1d('0x24')](_0x121b17['results']);}}if(_0x3928c1){logger[_0x8b1d('0xb')](_0x8b1d('0x25'));return _0x3928c1;}else{logger[_0x8b1d('0xb')](_0x8b1d('0x26'));return request({'uri':util[_0x8b1d('0x16')](_0x8b1d('0x27'),_0x10324e[_0x8b1d('0xc')]),'method':_0x8b1d('0x28'),'body':{'user':{'role':_0x8b1d('0x22'),'name':util[_0x8b1d('0x16')](_0x8b1d('0x29'),_0x2efa28||_0x5caaf3),'phone':_0x5caaf3}}})[_0x8b1d('0x12')](function(_0x542ab6){logger[_0x8b1d('0xb')]('Enduser\x20created.');return _0x542ab6[_0x8b1d('0x1e')];});}});}function getAuth(_0x56ab6d){var _0x244bd7;if(_0x56ab6d['authType']===_0x8b1d('0x2a')){_0x244bd7=util[_0x8b1d('0x16')](_0x8b1d('0x2b'),_0x56ab6d[_0x8b1d('0x2c')],_0x56ab6d[_0x8b1d('0x2a')]);}else if(_0x56ab6d[_0x8b1d('0x2d')]===_0x8b1d('0x2e')){_0x244bd7=util[_0x8b1d('0x16')]('%s/token:%s',_0x56ab6d['username'],_0x56ab6d[_0x8b1d('0x2e')]);}return util[_0x8b1d('0x16')](_0x8b1d('0x2f'),new Buffer(_0x244bd7)[_0x8b1d('0x30')](_0x8b1d('0x31')));}function request(_0x1aaaa4){logger['debug'](_0x8b1d('0x32'),JSON[_0x8b1d('0x33')](_0x1aaaa4));return rp(_[_0x8b1d('0x8')](_0x1aaaa4,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x5113e6,_0xb2a953){var _0x7c229c=[];if(_0x5113e6&&_0x5113e6[_0x8b1d('0x23')]>0x0){_0x7c229c=_[_0x8b1d('0x34')](_0x5113e6,_0xb2a953);}return _0x7c229c;}function getCustomFields(_0x4565f9,_0x30272f){var _0x355c47=[];var _0x24fa39={'custom_fields':[]};if(_0x4565f9[_0x8b1d('0x23')]>0x0){_['forEach'](_0x4565f9,function(_0x32e2be){if(_0x32e2be['type']==='string'&&_0x32e2be[_0x8b1d('0x35')]&&!_0x32e2be[_0x8b1d('0x36')]){_0x24fa39[_0x32e2be[_0x8b1d('0x35')][_0x8b1d('0x37')]()]=_0x32e2be[_0x8b1d('0x38')][_0x8b1d('0x30')]();}else if(_0x32e2be['type']===_0x8b1d('0x39')&&_0x32e2be[_0x8b1d('0x3a')]&&_0x32e2be[_0x8b1d('0x36')]){_0x24fa39['custom_fields']['push']({'id':_0x32e2be[_0x8b1d('0x3a')],'value':_0x32e2be[_0x8b1d('0x38')][_0x8b1d('0x30')]()});}else if(_0x32e2be[_0x8b1d('0x3b')]===_0x8b1d('0x3c')&&_0x32e2be['variableName']&&_0x32e2be[_0x8b1d('0x3a')]&&_0x32e2be['customField']){_0x30272f[_0x32e2be[_0x8b1d('0x3d')]]&&_0x24fa39['custom_fields'][_0x8b1d('0x3e')]({'id':_0x32e2be['idField'],'value':_0x30272f[_0x32e2be[_0x8b1d('0x3d')]][_0x8b1d('0x30')]()});}else if(_0x32e2be['type']===_0x8b1d('0x3f')&&_0x32e2be[_0x8b1d('0x40')]&&_0x32e2be['Variable'][_0x8b1d('0x41')]&&_0x32e2be[_0x8b1d('0x3a')]&&_0x32e2be[_0x8b1d('0x36')]){_0x30272f[_0x32e2be[_0x8b1d('0x40')][_0x8b1d('0x41')][_0x8b1d('0x37')]()]&&_0x24fa39[_0x8b1d('0x42')]['push']({'id':_0x32e2be[_0x8b1d('0x3a')],'value':_0x30272f[_0x32e2be[_0x8b1d('0x40')][_0x8b1d('0x41')]['toLowerCase']()][_0x8b1d('0x30')]()});}});}return _0x24fa39;}exports[_0x8b1d('0x43')]=function(_0x3d00d8,_0x1e4322,_0x271f32,_0x2146bf,_0x19672a,_0x5be781){var _0x231f2e,_0x4fe49f;_0x5be781[_0x8b1d('0xc')]=intUtil['stripTrailingSlash'](_0x5be781[_0x8b1d('0xc')]);_0x5be781[_0x8b1d('0x44')]=intUtil[_0x8b1d('0x45')](_0x5be781['serverUrl']);if(_0x19672a&&_0x19672a[_0x8b1d('0x46')]){logger['info'](_0x8b1d('0x47'),_0x8b1d('0x48'));_0x1e4322[_0x8b1d('0x49')]=util[_0x8b1d('0x16')](_0x8b1d('0x4a'),_0x5be781['serverUrl'],_0x1e4322[_0x8b1d('0x4b')],md5(_0x1e4322[_0x8b1d('0x4b')]));}else{_0x1e4322[_0x8b1d('0x49')]='';}headers[_0x8b1d('0x4c')]=getAuth(_0x5be781);return getUser(_0x5be781,_0x2146bf[_0x8b1d('0x4d')])['then'](function(_0xac7315){_0x231f2e=_0xac7315;logger[_0x8b1d('0xb')](_0x8b1d('0x4e'),_0x231f2e['id']);return getEndUser(_0x5be781,_0x1e4322['calleridname'],_0x1e4322[_0x8b1d('0x4f')]);})[_0x8b1d('0x12')](function(_0x272902){_0x4fe49f=_0x272902;logger['info'](_0x8b1d('0x50'),_0x4fe49f['id']);return getTicket(_0x5be781,_0x231f2e,_0x4fe49f,_0x271f32,_0x1e4322);})['then'](function(_0x807be3){if(_0x807be3){logger[_0x8b1d('0xb')]('The\x20Ticket\x20ID\x20is:',_0x807be3['id']);switch(_0x5be781[_0x8b1d('0x3b')]){case'integrationTab':logger['info']('[QUEUE]','Displaying\x20ticket\x20to\x20agent...');return request({'uri':util[_0x8b1d('0x16')](_0x8b1d('0x51'),_0x5be781[_0x8b1d('0xc')],_0x231f2e['id'],_0x807be3['id']),'method':_0x8b1d('0x28')});case _0x8b1d('0x52'):logger[_0x8b1d('0xb')](_0x8b1d('0x47'),_0x8b1d('0x53'));emit(util[_0x8b1d('0x16')]('user:%s',_0x2146bf[_0x8b1d('0x41')]),'trigger:browser:url',{'uri':util[_0x8b1d('0x16')]('%s/agent/tickets/%s',_0x5be781[_0x8b1d('0xc')],_0x807be3['id'])});break;default:logger[_0x8b1d('0x54')]('[QUEUE]',_0x8b1d('0x55'));}}})[_0x8b1d('0x56')](function(_0x2fc3c3){logger[_0x8b1d('0x54')]('[QUEUE]\x20Error\x20running\x20Zendesk\x20integration',util[_0x8b1d('0x57')](_0x2fc3c3,{'showHidden':!![],'depth':null}));});};exports[_0x8b1d('0x58')]=function(_0xac3a48,_0x361614,_0x4bd1f7,_0x128b50,_0x34f71e,_0x51492e,_0x55e79f){var _0x13475f,_0x3e8b66;_0x51492e[_0x8b1d('0xc')]=intUtil[_0x8b1d('0x45')](_0x51492e[_0x8b1d('0xc')]);_0x51492e[_0x8b1d('0x44')]=intUtil[_0x8b1d('0x45')](_0x51492e[_0x8b1d('0x44')]);if(_0x55e79f&&_0x55e79f[_0x8b1d('0x59')]&&_0x55e79f['recordingFormat']!==_0x8b1d('0x5a')){logger[_0x8b1d('0xb')](_0x8b1d('0x5b'),'Recording\x20is\x20enabled!');_0x361614[_0x8b1d('0x49')]=util[_0x8b1d('0x16')](_0x8b1d('0x4a'),_0x51492e[_0x8b1d('0x44')],_0x361614['uniqueid'],md5(_0x361614[_0x8b1d('0x4b')]));}headers[_0x8b1d('0x4c')]=getAuth(_0x51492e);return getUser(_0x51492e,_0x128b50[_0x8b1d('0x4d')])['then'](function(_0x16ad36){_0x13475f=_0x16ad36;logger[_0x8b1d('0xb')](_0x8b1d('0x4e'),_0x13475f['id']);return getEndUser(_0x51492e,_0x361614[_0x8b1d('0x5c')],_0x361614['destcalleridnum']);})[_0x8b1d('0x12')](function(_0x1ad4f6){_0x3e8b66=_0x1ad4f6;logger[_0x8b1d('0xb')](_0x8b1d('0x50'),_0x3e8b66['id']);return getTicket(_0x51492e,_0x13475f,_0x3e8b66,_0x4bd1f7,_0x361614);})[_0x8b1d('0x12')](function(_0x4701ba){if(_0x4701ba){logger[_0x8b1d('0xb')](_0x8b1d('0x5d'),_0x4701ba['id']);switch(_0x51492e[_0x8b1d('0x3b')]){case _0x8b1d('0x5e'):logger[_0x8b1d('0xb')](_0x8b1d('0x5b'),'Displaying\x20ticket\x20to\x20agent...');return request({'uri':util['format']('%s/channels/voice/agents/%d/tickets/%d/display.json',_0x51492e['remoteUri'],_0x13475f['id'],_0x4701ba['id']),'method':_0x8b1d('0x28')});case _0x8b1d('0x52'):logger[_0x8b1d('0xb')](_0x8b1d('0x5b'),_0x8b1d('0x53'));emit(util[_0x8b1d('0x16')](_0x8b1d('0x5f'),_0x128b50[_0x8b1d('0x41')]),'trigger:browser:url',{'uri':util['format']('%s/agent/tickets/%s',_0x51492e[_0x8b1d('0xc')],_0x4701ba['id'])});break;default:logger['error'](_0x8b1d('0x5b'),_0x8b1d('0x55'));}}})['catch'](function(_0x110131){logger[_0x8b1d('0x54')](_0x8b1d('0x60'),util[_0x8b1d('0x57')](_0x110131,{'showHidden':!![],'depth':null}));});};exports[_0x8b1d('0x61')]=function(_0x320520,_0x315d5a,_0x3a5571,_0x59aed8,_0x2dbab8,_0x153058){var _0x3f3e10,_0x49d49b;_0x153058[_0x8b1d('0xc')]=intUtil['stripTrailingSlash'](_0x153058[_0x8b1d('0xc')]);_0x153058[_0x8b1d('0x44')]=intUtil[_0x8b1d('0x45')](_0x153058[_0x8b1d('0x44')]);if(_0x2dbab8&&_0x2dbab8['monitor_format']){logger['info']('[ABANDONED]',_0x8b1d('0x48'));_0x315d5a[_0x8b1d('0x49')]=util['format'](_0x8b1d('0x4a'),_0x153058[_0x8b1d('0x44')],_0x315d5a[_0x8b1d('0x4b')],md5(_0x315d5a[_0x8b1d('0x4b')]));}else{_0x315d5a['recordingURL']='';}headers['Authorization']=getAuth(_0x153058);return getUser(_0x153058)[_0x8b1d('0x12')](function(_0x56ec80){_0x3f3e10=_0x56ec80;logger[_0x8b1d('0xb')](_0x8b1d('0x4e'),_0x3f3e10['id']);return getEndUser(_0x153058,_0x315d5a['calleridname'],_0x315d5a['calleridnum']);})[_0x8b1d('0x12')](function(_0x47b1f4){_0x49d49b=_0x47b1f4;logger[_0x8b1d('0xb')](_0x8b1d('0x50'),_0x49d49b['id']);return getTicket(_0x153058,_0x3f3e10,_0x49d49b,_0x3a5571,_0x315d5a);})[_0x8b1d('0x12')](function(_0x3aacbf){if(_0x3aacbf){logger[_0x8b1d('0xb')](_0x8b1d('0x5d'),_0x3aacbf['id']);}})[_0x8b1d('0x56')](function(_0x1a35e3){logger[_0x8b1d('0x54')]('[ABANDONED]\x20Error\x20running\x20Zendesk\x20integration',util[_0x8b1d('0x57')](_0x1a35e3,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
+var _0x6841=['getString','Subjects','Descriptions','Fields','then','ticket','validateEmail','%s/search.json','type:user\x20role:agent\x20email:%s','count','Agent\x20found!','find','results','agent','Agent\x20not\x20found,\x20using\x20the\x20admin\x20account!','Admin\x20account\x20selected.','user','Searching\x20enduser\x20with\x20phone','type:user\x20role:end-user\x20phone:%s','length','filter','end-user','first','%s/users.json','Caller\x20-\x20%s','Enduser\x20created.','password','authType','token','%s/token:%s','username','Basic\x20%s','toString','base64','debug','[HTTP]','stringify','map','forEach','type','string','customField','nameField','toLowerCase','content','idField','push','variable','variableName','custom_fields','customVariable','Variable','name','queue','stripTrailingSlash','serverUrl','monitor_format','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','Authorization','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','integrationTab','[QUEUE]','%s/channels/voice/agents/%d/tickets/%d/display.json','newTab','user:%s','error','Zendesk\x20account\x20type\x20not\x20recognized','[QUEUE]\x20Error\x20running\x20Zendesk\x20integration','outbound','recordingFormat','[OUTBOUND]','email','destcalleridname','destcalleridnum','The\x20Ticket\x20ID\x20is:','Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...','trigger:browser:url','%s/agent/tickets/%s','catch','[OUTBOUND]\x20Error\x20running\x20Zendesk\x20integration','inspect','[ABANDONED]','[ABANDONED]\x20Error\x20running\x20Zendesk\x20integration','lodash','request-promise','md5','util','./util','../../../../config/environment','../../../../config/logger','zendesk','redis','defaults','localhost','application/json','info','Creating\x20new\x20ticket...','format','%s/tickets.json','remoteUri','POST','merge','Tags'];(function(_0x26e570,_0x3c3ed3){var _0x1b4808=function(_0x4b5c16){while(--_0x4b5c16){_0x26e570['push'](_0x26e570['shift']());}};_0x1b4808(++_0x3c3ed3);}(_0x6841,0xc6));var _0x1684=function(_0x54d4fe,_0x55e869){_0x54d4fe=_0x54d4fe-0x0;var _0x1ab5bb=_0x6841[_0x54d4fe];return _0x1ab5bb;};'use strict';var _=require(_0x1684('0x0'));var rp=require(_0x1684('0x1'));var md5=require(_0x1684('0x2'));var util=require(_0x1684('0x3'));var Redis=require('ioredis');var intUtil=require(_0x1684('0x4'));var config=require(_0x1684('0x5'));var logger=require(_0x1684('0x6'))(_0x1684('0x7'));config[_0x1684('0x8')]=_[_0x1684('0x9')](config['redis'],{'host':_0x1684('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x1684('0x8')]));function emit(_0x32cc42,_0x566151,_0x27630d){io['to'](_0x32cc42)['emit'](_0x566151,_0x27630d);}var headers={'Content-Type':_0x1684('0xb'),'Accept':'application/json'};function getTicket(_0xc34406,_0x296cbb,_0x3b624a,_0x37408f,_0x276484){logger[_0x1684('0xc')](_0x1684('0xd'));return request({'uri':util[_0x1684('0xe')](_0x1684('0xf'),_0xc34406[_0x1684('0x10')]),'method':_0x1684('0x11'),'body':{'ticket':_[_0x1684('0x12')]({'requester_id':_0x3b624a['id'],'submitter_id':_0x296cbb?_0x296cbb['id']:undefined,'assignee_id':_0x296cbb?_0x296cbb['id']:undefined,'tags':getTags(_0x37408f[_0x1684('0x13')],'name'),'subject':intUtil[_0x1684('0x14')](_0x37408f[_0x1684('0x15')],_0x276484,'\x20'),'description':intUtil[_0x1684('0x14')](_0x37408f[_0x1684('0x16')],_0x276484,'\x0a'),'comment':{'public':![],'body':intUtil[_0x1684('0x14')](_0x37408f[_0x1684('0x16')],_0x276484,'\x0a')}},getCustomFields(_0x37408f[_0x1684('0x17')],_0x276484))}})[_0x1684('0x18')](function(_0x4cc1d3){logger[_0x1684('0xc')]('Ticket\x20created!');return _0x4cc1d3[_0x1684('0x19')];});}function getUser(_0x4bf5a7,_0x1f08c7){if(intUtil[_0x1684('0x1a')](_0x1f08c7)){logger[_0x1684('0xc')]('Getting\x20agent\x20with\x20email',_0x1f08c7);return request({'uri':util[_0x1684('0xe')](_0x1684('0x1b'),_0x4bf5a7[_0x1684('0x10')]),'qs':{'query':util[_0x1684('0xe')](_0x1684('0x1c'),_0x1f08c7)}})[_0x1684('0x18')](function(_0x2f348a){if(_0x2f348a[_0x1684('0x1d')]){logger[_0x1684('0xc')](_0x1684('0x1e'));return _[_0x1684('0x1f')](_0x2f348a[_0x1684('0x20')],{'email':_0x1f08c7,'role':_0x1684('0x21')});}else{logger['info'](_0x1684('0x22'));return request({'uri':util['format']('%s/users/me.json',_0x4bf5a7[_0x1684('0x10')])})[_0x1684('0x18')](function(_0x56e22b){logger[_0x1684('0xc')](_0x1684('0x23'));return _0x56e22b[_0x1684('0x24')];});}});}else{logger[_0x1684('0xc')](_0x1684('0x22'));return request({'uri':util[_0x1684('0xe')]('%s/users/me.json',_0x4bf5a7[_0x1684('0x10')])})[_0x1684('0x18')](function(_0x72acfc){logger[_0x1684('0xc')](_0x1684('0x23'));return _0x72acfc[_0x1684('0x24')];});}}function getEndUser(_0x17df0c,_0x18b04a,_0xeccb17){logger['info'](_0x1684('0x25'),_0xeccb17);return request({'uri':util[_0x1684('0xe')](_0x1684('0x1b'),_0x17df0c[_0x1684('0x10')]),'qs':{'query':util['format'](_0x1684('0x26'),_0xeccb17)}})[_0x1684('0x18')](function(_0x845f27){var _0x5517ff;if(_0x845f27[_0x1684('0x20')][_0x1684('0x27')]){_0x845f27[_0x1684('0x20')]=_[_0x1684('0x28')](_0x845f27[_0x1684('0x20')],{'suspended':![],'role':_0x1684('0x29')});if(_0x845f27[_0x1684('0x20')][_0x1684('0x27')]){_0x5517ff=_[_0x1684('0x2a')](_0x845f27[_0x1684('0x20')]);}}if(_0x5517ff){logger[_0x1684('0xc')]('Enduser\x20found!');return _0x5517ff;}else{logger[_0x1684('0xc')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');return request({'uri':util[_0x1684('0xe')](_0x1684('0x2b'),_0x17df0c[_0x1684('0x10')]),'method':_0x1684('0x11'),'body':{'user':{'role':'end-user','name':util[_0x1684('0xe')](_0x1684('0x2c'),_0x18b04a||_0xeccb17),'phone':_0xeccb17}}})[_0x1684('0x18')](function(_0xaff76){logger[_0x1684('0xc')](_0x1684('0x2d'));return _0xaff76[_0x1684('0x24')];});}});}function getAuth(_0x49b9ac){var _0x1ec5cc;if(_0x49b9ac['authType']===_0x1684('0x2e')){_0x1ec5cc=util[_0x1684('0xe')]('%s:%s',_0x49b9ac['username'],_0x49b9ac['password']);}else if(_0x49b9ac[_0x1684('0x2f')]===_0x1684('0x30')){_0x1ec5cc=util['format'](_0x1684('0x31'),_0x49b9ac[_0x1684('0x32')],_0x49b9ac['token']);}return util[_0x1684('0xe')](_0x1684('0x33'),new Buffer(_0x1ec5cc)[_0x1684('0x34')](_0x1684('0x35')));}function request(_0x84af15){logger[_0x1684('0x36')](_0x1684('0x37'),JSON[_0x1684('0x38')](_0x84af15));return rp(_[_0x1684('0x9')](_0x84af15,{'method':'GET','headers':headers,'json':!![]}));}function getTags(_0x3605e2,_0x1d66de){var _0x2411a7=[];if(_0x3605e2&&_0x3605e2[_0x1684('0x27')]>0x0){_0x2411a7=_[_0x1684('0x39')](_0x3605e2,_0x1d66de);}return _0x2411a7;}function getCustomFields(_0x3f0dae,_0x15c447){var _0x24917b=[];var _0x477eb9={'custom_fields':[]};if(_0x3f0dae[_0x1684('0x27')]>0x0){_[_0x1684('0x3a')](_0x3f0dae,function(_0x2cc84c){if(_0x2cc84c[_0x1684('0x3b')]===_0x1684('0x3c')&&_0x2cc84c['nameField']&&!_0x2cc84c[_0x1684('0x3d')]){_0x477eb9[_0x2cc84c[_0x1684('0x3e')][_0x1684('0x3f')]()]=_0x2cc84c[_0x1684('0x40')][_0x1684('0x34')]();}else if(_0x2cc84c[_0x1684('0x3b')]===_0x1684('0x3c')&&_0x2cc84c[_0x1684('0x41')]&&_0x2cc84c['customField']){_0x477eb9['custom_fields'][_0x1684('0x42')]({'id':_0x2cc84c[_0x1684('0x41')],'value':_0x2cc84c[_0x1684('0x40')][_0x1684('0x34')]()});}else if(_0x2cc84c['type']===_0x1684('0x43')&&_0x2cc84c[_0x1684('0x44')]&&_0x2cc84c['idField']&&_0x2cc84c['customField']){_0x15c447[_0x2cc84c[_0x1684('0x44')]]&&_0x477eb9[_0x1684('0x45')][_0x1684('0x42')]({'id':_0x2cc84c[_0x1684('0x41')],'value':_0x15c447[_0x2cc84c[_0x1684('0x44')]][_0x1684('0x34')]()});}else if(_0x2cc84c['type']===_0x1684('0x46')&&_0x2cc84c['Variable']&&_0x2cc84c[_0x1684('0x47')][_0x1684('0x48')]&&_0x2cc84c[_0x1684('0x41')]&&_0x2cc84c[_0x1684('0x3d')]){_0x15c447[_0x2cc84c[_0x1684('0x47')]['name'][_0x1684('0x3f')]()]&&_0x477eb9['custom_fields']['push']({'id':_0x2cc84c[_0x1684('0x41')],'value':_0x15c447[_0x2cc84c[_0x1684('0x47')][_0x1684('0x48')][_0x1684('0x3f')]()][_0x1684('0x34')]()});}});}return _0x477eb9;}exports[_0x1684('0x49')]=function(_0x4c59c4,_0x598146,_0x5ada9b,_0x46ccc7,_0x586165,_0x41259f){var _0x378bb1,_0x3360c4;_0x41259f[_0x1684('0x10')]=intUtil[_0x1684('0x4a')](_0x41259f['remoteUri']);_0x41259f[_0x1684('0x4b')]=intUtil[_0x1684('0x4a')](_0x41259f['serverUrl']);if(_0x586165&&_0x586165[_0x1684('0x4c')]){logger['info']('[QUEUE]',_0x1684('0x4d'));_0x598146['recordingURL']=util['format'](_0x1684('0x4e'),_0x41259f[_0x1684('0x4b')],_0x598146['uniqueid'],md5(_0x598146[_0x1684('0x4f')]));}else{_0x598146[_0x1684('0x50')]='';}headers[_0x1684('0x51')]=getAuth(_0x41259f);return getUser(_0x41259f,_0x46ccc7['email'])[_0x1684('0x18')](function(_0x31ea21){_0x378bb1=_0x31ea21;logger[_0x1684('0xc')](_0x1684('0x52'),_0x378bb1['id']);return getEndUser(_0x41259f,_0x598146[_0x1684('0x53')],_0x598146[_0x1684('0x54')]);})[_0x1684('0x18')](function(_0x40b56e){_0x3360c4=_0x40b56e;logger['info'](_0x1684('0x55'),_0x3360c4['id']);return getTicket(_0x41259f,_0x378bb1,_0x3360c4,_0x5ada9b,_0x598146);})[_0x1684('0x18')](function(_0x5a8331){if(_0x5a8331){logger[_0x1684('0xc')]('The\x20Ticket\x20ID\x20is:',_0x5a8331['id']);switch(_0x41259f[_0x1684('0x3b')]){case _0x1684('0x56'):logger['info'](_0x1684('0x57'),'Displaying\x20ticket\x20to\x20agent...');return request({'uri':util[_0x1684('0xe')](_0x1684('0x58'),_0x41259f['remoteUri'],_0x378bb1['id'],_0x5a8331['id']),'method':_0x1684('0x11')});case _0x1684('0x59'):logger[_0x1684('0xc')](_0x1684('0x57'),'Displaying\x20ticket\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0x1684('0xe')](_0x1684('0x5a'),_0x46ccc7[_0x1684('0x48')]),'trigger:browser:url',{'uri':util[_0x1684('0xe')]('%s/agent/tickets/%s',_0x41259f[_0x1684('0x10')],_0x5a8331['id'])});break;default:logger[_0x1684('0x5b')](_0x1684('0x57'),_0x1684('0x5c'));}}})['catch'](function(_0x53d6b6){logger[_0x1684('0x5b')](_0x1684('0x5d'),util['inspect'](_0x53d6b6,{'showHidden':!![],'depth':null}));});};exports[_0x1684('0x5e')]=function(_0x2edbc7,_0x410c36,_0x2c8626,_0x1e2e10,_0x2687dd,_0x4b2158,_0x13ce54){var _0x4a961a,_0x2d65bb;_0x4b2158[_0x1684('0x10')]=intUtil[_0x1684('0x4a')](_0x4b2158['remoteUri']);_0x4b2158[_0x1684('0x4b')]=intUtil[_0x1684('0x4a')](_0x4b2158['serverUrl']);if(_0x13ce54&&_0x13ce54[_0x1684('0x5f')]&&_0x13ce54[_0x1684('0x5f')]!=='none'){logger[_0x1684('0xc')](_0x1684('0x60'),_0x1684('0x4d'));_0x410c36[_0x1684('0x50')]=util[_0x1684('0xe')](_0x1684('0x4e'),_0x4b2158[_0x1684('0x4b')],_0x410c36['uniqueid'],md5(_0x410c36['uniqueid']));}headers[_0x1684('0x51')]=getAuth(_0x4b2158);return getUser(_0x4b2158,_0x1e2e10[_0x1684('0x61')])[_0x1684('0x18')](function(_0x1ae058){_0x4a961a=_0x1ae058;logger[_0x1684('0xc')]('The\x20User\x20ID\x20is:',_0x4a961a['id']);return getEndUser(_0x4b2158,_0x410c36[_0x1684('0x62')],_0x410c36[_0x1684('0x63')]);})[_0x1684('0x18')](function(_0x43ee25){_0x2d65bb=_0x43ee25;logger['info'](_0x1684('0x55'),_0x2d65bb['id']);return getTicket(_0x4b2158,_0x4a961a,_0x2d65bb,_0x2c8626,_0x410c36);})[_0x1684('0x18')](function(_0x22c287){if(_0x22c287){logger[_0x1684('0xc')](_0x1684('0x64'),_0x22c287['id']);switch(_0x4b2158[_0x1684('0x3b')]){case'integrationTab':logger['info'](_0x1684('0x60'),'Displaying\x20ticket\x20to\x20agent...');return request({'uri':util['format'](_0x1684('0x58'),_0x4b2158['remoteUri'],_0x4a961a['id'],_0x22c287['id']),'method':_0x1684('0x11')});case _0x1684('0x59'):logger[_0x1684('0xc')](_0x1684('0x60'),_0x1684('0x65'));emit(util[_0x1684('0xe')](_0x1684('0x5a'),_0x1e2e10[_0x1684('0x48')]),_0x1684('0x66'),{'uri':util[_0x1684('0xe')](_0x1684('0x67'),_0x4b2158['remoteUri'],_0x22c287['id'])});break;default:logger['error'](_0x1684('0x60'),'Zendesk\x20account\x20type\x20not\x20recognized');}}})[_0x1684('0x68')](function(_0x31b5b8){logger[_0x1684('0x5b')](_0x1684('0x69'),util[_0x1684('0x6a')](_0x31b5b8,{'showHidden':!![],'depth':null}));});};exports['abandoned']=function(_0x15433d,_0x12ac8d,_0x511c92,_0x31be9c,_0x36ed41,_0x31b20a){var _0x3a9cfc,_0x8df4ab;_0x31b20a[_0x1684('0x10')]=intUtil['stripTrailingSlash'](_0x31b20a[_0x1684('0x10')]);_0x31b20a[_0x1684('0x4b')]=intUtil[_0x1684('0x4a')](_0x31b20a['serverUrl']);if(_0x36ed41&&_0x36ed41[_0x1684('0x4c')]){logger[_0x1684('0xc')](_0x1684('0x6b'),_0x1684('0x4d'));_0x12ac8d[_0x1684('0x50')]=util[_0x1684('0xe')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x31b20a[_0x1684('0x4b')],_0x12ac8d[_0x1684('0x4f')],md5(_0x12ac8d['uniqueid']));}else{_0x12ac8d[_0x1684('0x50')]='';}headers['Authorization']=getAuth(_0x31b20a);return getUser(_0x31b20a)[_0x1684('0x18')](function(_0x1f096f){_0x3a9cfc=_0x1f096f;logger['info'](_0x1684('0x52'),_0x3a9cfc['id']);return getEndUser(_0x31b20a,_0x12ac8d[_0x1684('0x53')],_0x12ac8d[_0x1684('0x54')]);})[_0x1684('0x18')](function(_0x587bb8){_0x8df4ab=_0x587bb8;logger['info']('The\x20Enduser\x20ID\x20is:',_0x8df4ab['id']);return getTicket(_0x31b20a,_0x3a9cfc,_0x8df4ab,_0x511c92,_0x12ac8d);})[_0x1684('0x18')](function(_0x12bee7){if(_0x12bee7){logger[_0x1684('0xc')]('The\x20Ticket\x20ID\x20is:',_0x12bee7['id']);}})[_0x1684('0x68')](function(_0x4e125e){logger[_0x1684('0x5b')](_0x1684('0x6c'),util['inspect'](_0x4e125e,{'showHidden':!![],'depth':null}));});};
\ No newline at end of file
index d12ac18..9e9a69a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc10b=['../../../../config/environment','../../../../config/logger','zoho','localhost','redis','application/json','info','merge','inbound','outbound','starttime','agentcalledAt','format','YYYY-MM-DD\x20HH:mm:ss','Subjects','Descriptions','Fields','lastevent','called','Call\x20Result','complete','connect','Answered','rejected','Rejected','abandoned','Abandoned','talktime','utc','mm:ss','answertime','Call\x20Duration','endtime','diff','CONTACTID','SEMODULE','Leads','SEID','<Calls><row\x20no=\x221\x22>','hasOwnProperty','<FL\x20val=\x22%s\x22>%s</FL>','encodeXML','POST','https://crm.%s/crm/private/xml/Calls/insertRecords','parse','toJson','response','result','recorddetail','Call\x20created!','https://crm.%s/crm/private/json/Users/getUsers','host','authToken','crmapi','then','user','log','zoho\x20data\x20users','users','isArrayLikeObject','find','Standard','active','isNil','Agent\x20found!','Using\x20the\x20admin\x20account!','Administrator','zoho\x20user','error','stringify','Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20','Searching\x20enduser\x20with\x20phone','GET','https://crm.%s/crm/private/json/Contacts/searchRecords','((Phone:%s))','Enduser\x20found\x20in\x20Contacts!','row','Contacts','val','content','https://crm.%s/crm/private/json/Leads/searchRecords','length','https://crm.%s/crm/private/xml/Leads/insertRecords','<Leads><row\x20no=\x221\x22><FL\x20val=\x22First\x20Name\x22>%s</FL><FL\x20val=\x22Last\x20Name\x22>%s</FL><FL\x20val=\x22Phone\x22>%s</FL></row></Leads>','Enduser\x20created.','https://crm.%s/crm/private/json/Leads/getRecordById','Error\x20on\x20Lead\x20creation:\x20','debug','[HTTP]','forEach','type','string','idField','toString','variableName','customVariable','Variable','name','toLowerCase','indexOf','split','queue','serverUrl','stripTrailingSlash','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','recordingURL','email','The\x20User\x20ID\x20is:','calleridname','LEADID','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','destcalleridname','destcalleridnum','The\x20Enduser\x20ID\x20is:','[OUTBOUND]','[ABANDONED]','calleridnum','lodash','request-promise','md5','util','./util','xml2json','ioredis'];(function(_0x4ab80f,_0x5ab227){var _0x4a5699=function(_0x2c6eba){while(--_0x2c6eba){_0x4ab80f['push'](_0x4ab80f['shift']());}};_0x4a5699(++_0x5ab227);}(_0xc10b,0x109));var _0xbc10=function(_0x9fd887,_0x47f76c){_0x9fd887=_0x9fd887-0x0;var _0x1a54ab=_0xc10b[_0x9fd887];return _0x1a54ab;};'use strict';var _=require(_0xbc10('0x0'));var rp=require(_0xbc10('0x1'));var md5=require(_0xbc10('0x2'));var util=require(_0xbc10('0x3'));var intUtil=require(_0xbc10('0x4'));var parser=require(_0xbc10('0x5'));var entities=require('entities');var moment=require('moment');var Redis=require(_0xbc10('0x6'));var config=require(_0xbc10('0x7'));var logger=require(_0xbc10('0x8'))(_0xbc10('0x9'));config['redis']=_['defaults'](config['redis'],{'host':_0xbc10('0xa'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xbc10('0xb')]));function emit(_0x182ed,_0x469ded,_0x3d8e5a){io['to'](_0x182ed)['emit'](_0x469ded,_0x3d8e5a);}var headers={'Content-Type':_0xbc10('0xc'),'Accept':'application/json'};function getCall(_0x109652,_0x3449f1,_0x31e99b,_0x13286a,_0x218d77,_0xab0ff4){logger[_0xbc10('0xd')]('Creating\x20new\x20call...');var _0x5b55b0=_[_0xbc10('0xe')]({'SMOWNERID':_0x3449f1['id'],'Call Type':_0xab0ff4||_0xbc10('0xf'),'Call Start Time':(_0xab0ff4===_0xbc10('0x10')?_0x218d77[_0xbc10('0x11')]:_0x218d77[_0xbc10('0x12')])||moment()[_0xbc10('0x13')](_0xbc10('0x14')),'Subject':intUtil['getString'](_0x13286a[_0xbc10('0x15')],_0x218d77,'\x20'),'Description':intUtil['getString'](_0x13286a[_0xbc10('0x16')],_0x218d77,'\x0a')},getCustomFields(_0x13286a[_0xbc10('0x17')],_0x218d77));switch(_0x218d77[_0xbc10('0x18')]){case _0xbc10('0x19'):_0x5b55b0[_0xbc10('0x1a')]='Called';break;case _0xbc10('0x1b'):case _0xbc10('0x1c'):_0x5b55b0['Call\x20Result']=_0xbc10('0x1d');break;case _0xbc10('0x1e'):_0x5b55b0[_0xbc10('0x1a')]=_0xbc10('0x1f');break;case _0xbc10('0x20'):_0x5b55b0[_0xbc10('0x1a')]=_0xbc10('0x21');break;default:}if(_0x218d77[_0xbc10('0x22')]){_0x5b55b0['Call\x20Duration']=moment[_0xbc10('0x23')](parseInt(_0x218d77[_0xbc10('0x22')])*0x3e8)[_0xbc10('0x13')](_0xbc10('0x24'));}else if(_0x218d77[_0xbc10('0x25')]&&_0x218d77['endtime']){_0x5b55b0[_0xbc10('0x26')]=moment[_0xbc10('0x23')](moment(_0x218d77[_0xbc10('0x27')],_0xbc10('0x14'))[_0xbc10('0x28')](moment(_0x218d77[_0xbc10('0x11')],'YYYY-MM-DD\x20HH:mm:ss')))['format']('mm:ss');}if(_0x31e99b['CONTACTID']){_0x5b55b0[_0xbc10('0x29')]=_0x31e99b[_0xbc10('0x29')];}else if(_0x31e99b['LEADID']){_0x5b55b0[_0xbc10('0x2a')]=_0xbc10('0x2b');_0x5b55b0[_0xbc10('0x2c')]=_0x31e99b['LEADID'];}var _0x463287=_0xbc10('0x2d');for(var _0x567cea in _0x5b55b0){if(_0x5b55b0[_0xbc10('0x2e')](_0x567cea)){_0x463287+=util['format'](_0xbc10('0x2f'),entities[_0xbc10('0x30')](_0x567cea),entities[_0xbc10('0x30')](_0x5b55b0[_0x567cea]));}}_0x463287+='</row></Calls>';return request({'method':_0xbc10('0x31'),'uri':util[_0xbc10('0x13')](_0xbc10('0x32'),_0x109652['host']),'qs':{'authtoken':_0x109652['authToken'],'scope':'crmapi','xmlData':_0x463287},'json':!![]})['then'](function(_0x43e6f1){_0x43e6f1=JSON[_0xbc10('0x33')](parser[_0xbc10('0x34')](_0x43e6f1));if(_0x43e6f1[_0xbc10('0x35')]){if(_0x43e6f1['response'][_0xbc10('0x36')]&&_0x43e6f1['response']['result'][_0xbc10('0x37')]){logger[_0xbc10('0xd')](_0xbc10('0x38'));return{'id':_0x43e6f1[_0xbc10('0x35')][_0xbc10('0x36')][_0xbc10('0x37')]['FL'][0x0]['$t']};}}throw new Error('Error\x20on\x20call\x20creation:\x20'+JSON['stringify'](_0x43e6f1));});}function getUser(_0x36e16d,_0x2b0202){return request({'method':'GET','uri':util['format'](_0xbc10('0x39'),_0x36e16d[_0xbc10('0x3a')]),'qs':{'type':'AllUsers','authtoken':_0x36e16d[_0xbc10('0x3b')],'scope':_0xbc10('0x3c')},'json':!![]})[_0xbc10('0x3d')](function(_0xbb1a00){if(_0xbb1a00['users']&&_0xbb1a00['users'][_0xbc10('0x3e')]){var _0x713937;console[_0xbc10('0x3f')](_0xbc10('0x40'),_0xbb1a00[_0xbc10('0x41')]['user']);if(_[_0xbc10('0x42')](_0xbb1a00['users'][_0xbc10('0x3e')])){console[_0xbc10('0x3f')](_0xbc10('0x40'),_0xbb1a00['users'][_0xbc10('0x3e')]);if(!_['isNil'](_0x2b0202)){_0x713937=_[_0xbc10('0x43')](_0xbb1a00[_0xbc10('0x41')][_0xbc10('0x3e')],{'email':_0x2b0202,'profile':_0xbc10('0x44'),'status':_0xbc10('0x45')});}if(!_[_0xbc10('0x46')](_0x713937)){logger['info'](_0xbc10('0x47'));}else{logger[_0xbc10('0xd')](_0xbc10('0x48'));_0x713937=_[_0xbc10('0x43')](_0xbb1a00[_0xbc10('0x41')]['user'],{'profile':_0xbc10('0x49')});}console['log'](_0xbc10('0x4a'),_0x713937);return _0x713937;}else{if(_0xbb1a00[_0xbc10('0x41')][_0xbc10('0x3e')]['profile']==='Administrator'){logger[_0xbc10('0xd')](_0xbc10('0x48'));_0x713937=_0xbb1a00[_0xbc10('0x41')][_0xbc10('0x3e')];return _0x713937;}else{logger[_0xbc10('0x4b')]('The\x20failing\x20result\x20is',JSON[_0xbc10('0x4c')](_0xbb1a00));throw new Error(_0xbc10('0x4d')+JSON[_0xbc10('0x4c')](_0xbb1a00));}}}else{logger[_0xbc10('0x4b')]('The\x20failing\x20result\x20is',JSON['stringify'](_0xbb1a00));throw new Error(_0xbc10('0x4d')+JSON['stringify'](_0xbb1a00));}});}function getEndUser(_0x30d623,_0x255c3f,_0x165bd0){logger[_0xbc10('0xd')](_0xbc10('0x4e'),_0x165bd0);return request({'method':_0xbc10('0x4f'),'uri':util[_0xbc10('0x13')](_0xbc10('0x50'),_0x30d623[_0xbc10('0x3a')]),'qs':{'authtoken':_0x30d623[_0xbc10('0x3b')],'scope':_0xbc10('0x3c'),'criteria':util[_0xbc10('0x13')](_0xbc10('0x51'),_0x165bd0)},'json':!![]})[_0xbc10('0x3d')](function(_0x4c5240){if(_0x4c5240[_0xbc10('0x35')]&&_0x4c5240[_0xbc10('0x35')][_0xbc10('0x36')]){logger[_0xbc10('0xd')](_0xbc10('0x52'));var _0x2b3962={};var _0x27e5dc=_0x4c5240['response']['result']['Contacts'][_0xbc10('0x53')]['no']?_0x4c5240['response'][_0xbc10('0x36')]['Contacts'][_0xbc10('0x53')]['FL']:_0x4c5240[_0xbc10('0x35')]['result'][_0xbc10('0x54')][_0xbc10('0x53')][0x0]['FL'];for(var _0x5eb3a5=0x0,_0x168069=_0x27e5dc['length'];_0x5eb3a5<_0x168069;_0x5eb3a5++){_0x2b3962[_0x27e5dc[_0x5eb3a5][_0xbc10('0x55')]]=_0x27e5dc[_0x5eb3a5][_0xbc10('0x56')];}return _0x2b3962;}else{return request({'method':'GET','uri':util[_0xbc10('0x13')](_0xbc10('0x57'),_0x30d623['host']),'qs':{'authtoken':_0x30d623[_0xbc10('0x3b')],'scope':_0xbc10('0x3c'),'criteria':util['format'](_0xbc10('0x51'),_0x165bd0)},'json':!![]})[_0xbc10('0x3d')](function(_0x53bf0f){if(_0x53bf0f[_0xbc10('0x35')]&&_0x53bf0f[_0xbc10('0x35')][_0xbc10('0x36')]){logger[_0xbc10('0xd')]('Enduser\x20found\x20in\x20Leads!');var _0x27c5d1={};var _0x11ceed=_0x53bf0f[_0xbc10('0x35')][_0xbc10('0x36')][_0xbc10('0x2b')][_0xbc10('0x53')]['no']?_0x53bf0f[_0xbc10('0x35')][_0xbc10('0x36')][_0xbc10('0x2b')]['row']['FL']:_0x53bf0f[_0xbc10('0x35')][_0xbc10('0x36')]['Leads'][_0xbc10('0x53')][0x0]['FL'];for(var _0x14c305=0x0,_0x7c8ccc=_0x11ceed[_0xbc10('0x58')];_0x14c305<_0x7c8ccc;_0x14c305++){_0x27c5d1[_0x11ceed[_0x14c305][_0xbc10('0x55')]]=_0x11ceed[_0x14c305][_0xbc10('0x56')];}return _0x27c5d1;}else{logger[_0xbc10('0xd')]('Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!');_0x255c3f=getName(_0x255c3f);return request({'method':_0xbc10('0x31'),'uri':util[_0xbc10('0x13')](_0xbc10('0x59'),_0x30d623[_0xbc10('0x3a')]),'qs':{'authtoken':_0x30d623[_0xbc10('0x3b')],'scope':_0xbc10('0x3c'),'xmlData':util[_0xbc10('0x13')](_0xbc10('0x5a'),entities[_0xbc10('0x30')](_0x255c3f[0x0]),entities[_0xbc10('0x30')](_0x255c3f[0x1]),_0x165bd0)},'json':!![]})['then'](function(_0x475ae6){_0x475ae6=JSON['parse'](parser[_0xbc10('0x34')](_0x475ae6));if(_0x475ae6['response']){if(_0x475ae6[_0xbc10('0x35')][_0xbc10('0x36')]&&_0x475ae6[_0xbc10('0x35')][_0xbc10('0x36')][_0xbc10('0x37')]){logger[_0xbc10('0xd')](_0xbc10('0x5b'));return request({'method':_0xbc10('0x4f'),'uri':util[_0xbc10('0x13')](_0xbc10('0x5c'),_0x30d623[_0xbc10('0x3a')]),'qs':{'authtoken':_0x30d623[_0xbc10('0x3b')],'scope':_0xbc10('0x3c'),'id':_0x475ae6[_0xbc10('0x35')][_0xbc10('0x36')][_0xbc10('0x37')]['FL'][0x0]['$t']},'json':!![]});}}throw new Error(_0xbc10('0x5d')+JSON[_0xbc10('0x4c')](_0x475ae6));})[_0xbc10('0x3d')](function(_0x4e31c4){if(_0x4e31c4[_0xbc10('0x35')]){if(_0x4e31c4[_0xbc10('0x35')]['result']){var _0x4af14e={};for(var _0x32b63f=0x0,_0x868a34=_0x4e31c4[_0xbc10('0x35')][_0xbc10('0x36')][_0xbc10('0x2b')][_0xbc10('0x53')]['FL']['length'];_0x32b63f<_0x868a34;_0x32b63f++){_0x4af14e[_0x4e31c4['response'][_0xbc10('0x36')][_0xbc10('0x2b')]['row']['FL'][_0x32b63f][_0xbc10('0x55')]]=_0x4e31c4[_0xbc10('0x35')]['result'][_0xbc10('0x2b')][_0xbc10('0x53')]['FL'][_0x32b63f][_0xbc10('0x56')];}return _0x4af14e;}}throw new Error('Error\x20on\x20Lead\x20retrieve:\x20'+JSON[_0xbc10('0x4c')](_0x4e31c4));});}});}});}function request(_0x375175){logger[_0xbc10('0x5e')](_0xbc10('0x5f'),JSON[_0xbc10('0x4c')](_0x375175));return rp(_0x375175);}function getCustomFields(_0xd79290,_0x214729){var _0x547c5d={};if(_0xd79290[_0xbc10('0x58')]>0x0){_[_0xbc10('0x60')](_0xd79290,function(_0x241e53){if(_0x241e53[_0xbc10('0x61')]===_0xbc10('0x62')&&_0x241e53[_0xbc10('0x63')]){_0x547c5d[_0x241e53[_0xbc10('0x63')]]=_0x241e53['content'][_0xbc10('0x64')]();}else if(_0x241e53[_0xbc10('0x61')]==='variable'&&_0x241e53[_0xbc10('0x65')]&&_0x241e53[_0xbc10('0x63')]&&_0x214729[_0x241e53[_0xbc10('0x65')]]){_0x547c5d[_0x241e53[_0xbc10('0x63')]]=_0x214729[_0x241e53[_0xbc10('0x65')]][_0xbc10('0x64')]();}else if(_0x241e53['type']===_0xbc10('0x66')&&_0x241e53['Variable']&&_0x241e53[_0xbc10('0x67')]['name']&&_0x241e53[_0xbc10('0x63')]&&_0x214729[_0x241e53[_0xbc10('0x67')][_0xbc10('0x68')][_0xbc10('0x69')]()]){_0x547c5d[_0x241e53['idField']]=_0x214729[_0x241e53['Variable']['name'][_0xbc10('0x69')]()][_0xbc10('0x64')]();}});}return _0x547c5d;}function getName(_0x35957e){if(_0x35957e[_0xbc10('0x6a')]('\x20')>0x0){var _0x2c5d29=_0x35957e[_0xbc10('0x6b')](/ (.+)/);if(_0x2c5d29[0x1]){return _0x2c5d29;}}return[_0x35957e,_0x35957e];}exports[_0xbc10('0x6c')]=function(_0x22597a,_0xfe044a,_0xe4c04,_0x12fd19,_0x3465dd,_0x2217ed){var _0x2e0ec0,_0x54795c;_0x2217ed[_0xbc10('0x3a')]=intUtil['stripTrailingSlash'](_0x2217ed['host']);_0x2217ed[_0xbc10('0x6d')]=intUtil[_0xbc10('0x6e')](_0x2217ed[_0xbc10('0x6d')]);if(_0x3465dd&&_0x3465dd[_0xbc10('0x6f')]){logger[_0xbc10('0xd')](_0xbc10('0x70'),_0xbc10('0x71'));_0xfe044a['recordingURL']=util[_0xbc10('0x13')](_0xbc10('0x72'),_0x2217ed['serverUrl'],_0xfe044a[_0xbc10('0x73')],md5(_0xfe044a[_0xbc10('0x73')]));}else{_0xfe044a[_0xbc10('0x74')]='';}return getUser(_0x2217ed,_0x12fd19[_0xbc10('0x75')])['then'](function(_0x4da3cd){_0x2e0ec0=_0x4da3cd;logger[_0xbc10('0xd')](_0xbc10('0x76'),_0x2e0ec0['id']);return getEndUser(_0x2217ed,_0xfe044a[_0xbc10('0x77')],_0xfe044a['calleridnum']);})[_0xbc10('0x3d')](function(_0x458406){_0x54795c=_0x458406;logger[_0xbc10('0xd')]('The\x20Enduser\x20ID\x20is:',_0x54795c['CONTACTID']||_0x54795c[_0xbc10('0x78')]);return getCall(_0x2217ed,_0x2e0ec0,_0x54795c,_0xe4c04,_0xfe044a,_0xbc10('0x79'));})['then'](function(_0x2f735d){if(_0x2f735d){logger['info'](_0xbc10('0x7a'),_0x2f735d['id']);logger[_0xbc10('0xd')](_0xbc10('0x70'),_0xbc10('0x7b'));emit(util['format'](_0xbc10('0x7c'),_0x12fd19['name']),_0xbc10('0x7d'),{'uri':util['format'](_0xbc10('0x7e'),_0x2217ed[_0xbc10('0x3a')],_0x2f735d['id'])});}})[_0xbc10('0x7f')](function(_0x357721){logger['error'](_0xbc10('0x70'),JSON['stringify'](_0x357721));});};exports[_0xbc10('0x10')]=function(_0xe62530,_0x2f6eba,_0x3891b4,_0xbce7a3,_0x1fc048,_0x578704,_0x4a4657){var _0x1a006a,_0x4c4cb0;_0x578704[_0xbc10('0x3a')]=intUtil[_0xbc10('0x6e')](_0x578704['host']);_0x578704[_0xbc10('0x6d')]=intUtil[_0xbc10('0x6e')](_0x578704[_0xbc10('0x6d')]);if(_0x4a4657&&_0x4a4657[_0xbc10('0x80')]&&_0x4a4657[_0xbc10('0x80')]!==_0xbc10('0x81')){logger[_0xbc10('0xd')]('[OUTBOUND]','Recording\x20is\x20enabled!');_0x2f6eba[_0xbc10('0x74')]=util['format']('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x578704[_0xbc10('0x6d')],_0x2f6eba[_0xbc10('0x73')],md5(_0x2f6eba[_0xbc10('0x73')]));}return getUser(_0x578704,_0xbce7a3['email'])[_0xbc10('0x3d')](function(_0x4bd68a){_0x1a006a=_0x4bd68a;logger[_0xbc10('0xd')](_0xbc10('0x76'),_0x1a006a['id']);return getEndUser(_0x578704,_0x2f6eba[_0xbc10('0x82')],_0x2f6eba[_0xbc10('0x83')]);})[_0xbc10('0x3d')](function(_0x5d7ff7){_0x4c4cb0=_0x5d7ff7;logger[_0xbc10('0xd')](_0xbc10('0x84'),_0x4c4cb0[_0xbc10('0x29')]||_0x4c4cb0[_0xbc10('0x78')]);return getCall(_0x578704,_0x1a006a,_0x4c4cb0,_0x3891b4,_0x2f6eba,'Outbound');})[_0xbc10('0x3d')](function(_0x2d6f8d){if(_0x2d6f8d){logger['info'](_0xbc10('0x7a'),_0x2d6f8d['id']);logger['info'](_0xbc10('0x85'),_0xbc10('0x7b'));emit(util[_0xbc10('0x13')]('user:%s',_0xbce7a3[_0xbc10('0x68')]),'trigger:browser:url',{'uri':util[_0xbc10('0x13')](_0xbc10('0x7e'),_0x578704[_0xbc10('0x3a')],_0x2d6f8d['id'])});}})[_0xbc10('0x7f')](function(_0x1c975b){logger[_0xbc10('0x4b')](_0xbc10('0x85'),JSON[_0xbc10('0x4c')](_0x1c975b));});};exports[_0xbc10('0x20')]=function(_0x53d4f7,_0x797cb7,_0x25026a,_0x2166c2,_0x472687,_0x155f16){var _0x1622bf,_0x1c04fc;_0x155f16['host']=intUtil[_0xbc10('0x6e')](_0x155f16[_0xbc10('0x3a')]);_0x155f16['serverUrl']=intUtil['stripTrailingSlash'](_0x155f16[_0xbc10('0x6d')]);if(_0x472687&&_0x472687[_0xbc10('0x6f')]){logger[_0xbc10('0xd')](_0xbc10('0x86'),_0xbc10('0x71'));_0x797cb7[_0xbc10('0x74')]=util['format'](_0xbc10('0x72'),_0x155f16[_0xbc10('0x6d')],_0x797cb7[_0xbc10('0x73')],md5(_0x797cb7[_0xbc10('0x73')]));}else{_0x797cb7[_0xbc10('0x74')]='';}return getUser(_0x155f16)[_0xbc10('0x3d')](function(_0x59bb89){_0x1622bf=_0x59bb89;logger[_0xbc10('0xd')](_0xbc10('0x76'),_0x1622bf['id']);return getEndUser(_0x155f16,_0x797cb7[_0xbc10('0x77')],_0x797cb7[_0xbc10('0x87')]);})[_0xbc10('0x3d')](function(_0x41d9bc){_0x1c04fc=_0x41d9bc;logger['info'](_0xbc10('0x84'),_0x1c04fc[_0xbc10('0x29')]||_0x1c04fc[_0xbc10('0x78')]);return getCall(_0x155f16,_0x1622bf,_0x1c04fc,_0x25026a,_0x797cb7,_0xbc10('0x79'));})[_0xbc10('0x3d')](function(_0x58fd78){if(_0x58fd78){logger[_0xbc10('0xd')]('The\x20Call\x20ID\x20is:',_0x58fd78['id']);}})[_0xbc10('0x7f')](function(_0x1285b3){logger[_0xbc10('0x4b')]('[ABANDONED]',JSON[_0xbc10('0x4c')](_0x1285b3));});};
\ No newline at end of file
+var _0x449e=['((Phone:%s))','Enduser\x20found\x20in\x20Contacts!','row','Contacts','length','content','Enduser\x20not\x20found,\x20creating\x20a\x20new\x20enduser!','https://crm.%s/crm/private/xml/Leads/insertRecords','Enduser\x20created.','https://crm.%s/crm/private/json/Leads/getRecordById','val','Error\x20on\x20Lead\x20retrieve:\x20','debug','[HTTP]','type','idField','toString','variable','variableName','Variable','toLowerCase','indexOf','split','queue','stripTrailingSlash','serverUrl','monitor_format','[QUEUE]','Recording\x20is\x20enabled!','%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s','uniqueid','email','The\x20User\x20ID\x20is:','calleridname','calleridnum','The\x20Enduser\x20ID\x20is:','Inbound','The\x20Call\x20ID\x20is:','user:%s','trigger:browser:url','catch','recordingFormat','none','[OUTBOUND]','recordingURL','destcalleridname','destcalleridnum','Outbound','Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...','name','https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s','[ABANDONED]','lodash','request-promise','md5','util','./util','xml2json','entities','moment','ioredis','../../../../config/environment','../../../../config/logger','defaults','redis','socket.io-emitter','emit','application/json','info','Creating\x20new\x20call...','merge','inbound','outbound','starttime','agentcalledAt','format','YYYY-MM-DD\x20HH:mm:ss','getString','Subjects','Fields','called','Call\x20Result','Called','complete','connect','Answered','Rejected','abandoned','talktime','Call\x20Duration','utc','mm:ss','answertime','endtime','diff','CONTACTID','LEADID','Leads','<Calls><row\x20no=\x221\x22>','hasOwnProperty','<FL\x20val=\x22%s\x22>%s</FL>','encodeXML','https://crm.%s/crm/private/xml/Calls/insertRecords','host','crmapi','then','toJson','result','response','recorddetail','stringify','https://crm.%s/crm/private/json/Users/getUsers','AllUsers','users','user','log','zoho\x20data\x20users','isArrayLikeObject','isNil','find','Standard','active','Agent\x20found!','Using\x20the\x20admin\x20account!','Administrator','zoho\x20user','profile','error','The\x20failing\x20result\x20is','Searching\x20enduser\x20with\x20phone','GET','https://crm.%s/crm/private/json/Contacts/searchRecords','authToken'];(function(_0x4c99d0,_0x1febe1){var _0x5e541f=function(_0x6a83e5){while(--_0x6a83e5){_0x4c99d0['push'](_0x4c99d0['shift']());}};_0x5e541f(++_0x1febe1);}(_0x449e,0xb9));var _0xe449=function(_0x337e50,_0x3d11c9){_0x337e50=_0x337e50-0x0;var _0x2dff48=_0x449e[_0x337e50];return _0x2dff48;};'use strict';var _=require(_0xe449('0x0'));var rp=require(_0xe449('0x1'));var md5=require(_0xe449('0x2'));var util=require(_0xe449('0x3'));var intUtil=require(_0xe449('0x4'));var parser=require(_0xe449('0x5'));var entities=require(_0xe449('0x6'));var moment=require(_0xe449('0x7'));var Redis=require(_0xe449('0x8'));var config=require(_0xe449('0x9'));var logger=require(_0xe449('0xa'))('zoho');config['redis']=_[_0xe449('0xb')](config[_0xe449('0xc')],{'host':'localhost','port':0x18eb});var io=require(_0xe449('0xd'))(new Redis(config[_0xe449('0xc')]));function emit(_0x50084a,_0x5ec36b,_0x1829f1){io['to'](_0x50084a)[_0xe449('0xe')](_0x5ec36b,_0x1829f1);}var headers={'Content-Type':_0xe449('0xf'),'Accept':_0xe449('0xf')};function getCall(_0x421adc,_0xbfede5,_0x3308ed,_0x5757b6,_0x224435,_0x220850){logger[_0xe449('0x10')](_0xe449('0x11'));var _0x27423e=_[_0xe449('0x12')]({'SMOWNERID':_0xbfede5['id'],'Call Type':_0x220850||_0xe449('0x13'),'Call Start Time':(_0x220850===_0xe449('0x14')?_0x224435[_0xe449('0x15')]:_0x224435[_0xe449('0x16')])||moment()[_0xe449('0x17')](_0xe449('0x18')),'Subject':intUtil[_0xe449('0x19')](_0x5757b6[_0xe449('0x1a')],_0x224435,'\x20'),'Description':intUtil['getString'](_0x5757b6['Descriptions'],_0x224435,'\x0a')},getCustomFields(_0x5757b6[_0xe449('0x1b')],_0x224435));switch(_0x224435['lastevent']){case _0xe449('0x1c'):_0x27423e[_0xe449('0x1d')]=_0xe449('0x1e');break;case _0xe449('0x1f'):case _0xe449('0x20'):_0x27423e[_0xe449('0x1d')]=_0xe449('0x21');break;case'rejected':_0x27423e['Call\x20Result']=_0xe449('0x22');break;case _0xe449('0x23'):_0x27423e[_0xe449('0x1d')]='Abandoned';break;default:}if(_0x224435[_0xe449('0x24')]){_0x27423e[_0xe449('0x25')]=moment[_0xe449('0x26')](parseInt(_0x224435[_0xe449('0x24')])*0x3e8)[_0xe449('0x17')](_0xe449('0x27'));}else if(_0x224435[_0xe449('0x28')]&&_0x224435[_0xe449('0x29')]){_0x27423e[_0xe449('0x25')]=moment[_0xe449('0x26')](moment(_0x224435[_0xe449('0x29')],'YYYY-MM-DD\x20HH:mm:ss')[_0xe449('0x2a')](moment(_0x224435[_0xe449('0x15')],_0xe449('0x18'))))[_0xe449('0x17')](_0xe449('0x27'));}if(_0x3308ed[_0xe449('0x2b')]){_0x27423e[_0xe449('0x2b')]=_0x3308ed[_0xe449('0x2b')];}else if(_0x3308ed[_0xe449('0x2c')]){_0x27423e['SEMODULE']=_0xe449('0x2d');_0x27423e['SEID']=_0x3308ed['LEADID'];}var _0x7f643c=_0xe449('0x2e');for(var _0x3c1fe1 in _0x27423e){if(_0x27423e[_0xe449('0x2f')](_0x3c1fe1)){_0x7f643c+=util[_0xe449('0x17')](_0xe449('0x30'),entities[_0xe449('0x31')](_0x3c1fe1),entities[_0xe449('0x31')](_0x27423e[_0x3c1fe1]));}}_0x7f643c+='</row></Calls>';return request({'method':'POST','uri':util[_0xe449('0x17')](_0xe449('0x32'),_0x421adc[_0xe449('0x33')]),'qs':{'authtoken':_0x421adc['authToken'],'scope':_0xe449('0x34'),'xmlData':_0x7f643c},'json':!![]})[_0xe449('0x35')](function(_0xd4a665){_0xd4a665=JSON['parse'](parser[_0xe449('0x36')](_0xd4a665));if(_0xd4a665['response']){if(_0xd4a665['response'][_0xe449('0x37')]&&_0xd4a665[_0xe449('0x38')]['result'][_0xe449('0x39')]){logger[_0xe449('0x10')]('Call\x20created!');return{'id':_0xd4a665['response'][_0xe449('0x37')][_0xe449('0x39')]['FL'][0x0]['$t']};}}throw new Error('Error\x20on\x20call\x20creation:\x20'+JSON[_0xe449('0x3a')](_0xd4a665));});}function getUser(_0xbb8c19,_0x20193a){return request({'method':'GET','uri':util[_0xe449('0x17')](_0xe449('0x3b'),_0xbb8c19['host']),'qs':{'type':_0xe449('0x3c'),'authtoken':_0xbb8c19['authToken'],'scope':'crmapi'},'json':!![]})[_0xe449('0x35')](function(_0x2cb658){if(_0x2cb658[_0xe449('0x3d')]&&_0x2cb658['users'][_0xe449('0x3e')]){var _0x4fb09a;console[_0xe449('0x3f')](_0xe449('0x40'),_0x2cb658[_0xe449('0x3d')][_0xe449('0x3e')]);if(_[_0xe449('0x41')](_0x2cb658[_0xe449('0x3d')][_0xe449('0x3e')])){console[_0xe449('0x3f')](_0xe449('0x40'),_0x2cb658[_0xe449('0x3d')][_0xe449('0x3e')]);if(!_[_0xe449('0x42')](_0x20193a)){_0x4fb09a=_[_0xe449('0x43')](_0x2cb658[_0xe449('0x3d')][_0xe449('0x3e')],{'email':_0x20193a,'profile':_0xe449('0x44'),'status':_0xe449('0x45')});}if(!_['isNil'](_0x4fb09a)){logger[_0xe449('0x10')](_0xe449('0x46'));}else{logger[_0xe449('0x10')](_0xe449('0x47'));_0x4fb09a=_[_0xe449('0x43')](_0x2cb658[_0xe449('0x3d')][_0xe449('0x3e')],{'profile':_0xe449('0x48')});}console['log'](_0xe449('0x49'),_0x4fb09a);return _0x4fb09a;}else{if(_0x2cb658[_0xe449('0x3d')]['user'][_0xe449('0x4a')]===_0xe449('0x48')){logger[_0xe449('0x10')]('Using\x20the\x20admin\x20account!');_0x4fb09a=_0x2cb658[_0xe449('0x3d')][_0xe449('0x3e')];return _0x4fb09a;}else{logger[_0xe449('0x4b')]('The\x20failing\x20result\x20is',JSON[_0xe449('0x3a')](_0x2cb658));throw new Error('Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20'+JSON[_0xe449('0x3a')](_0x2cb658));}}}else{logger[_0xe449('0x4b')](_0xe449('0x4c'),JSON[_0xe449('0x3a')](_0x2cb658));throw new Error('Unable\x20to\x20retrieve\x20zoho\x20account\x20users:\x20'+JSON[_0xe449('0x3a')](_0x2cb658));}});}function getEndUser(_0x3a24e4,_0x1b6caf,_0x24bb8a){logger[_0xe449('0x10')](_0xe449('0x4d'),_0x24bb8a);return request({'method':_0xe449('0x4e'),'uri':util[_0xe449('0x17')](_0xe449('0x4f'),_0x3a24e4[_0xe449('0x33')]),'qs':{'authtoken':_0x3a24e4[_0xe449('0x50')],'scope':_0xe449('0x34'),'criteria':util[_0xe449('0x17')](_0xe449('0x51'),_0x24bb8a)},'json':!![]})[_0xe449('0x35')](function(_0x29f135){if(_0x29f135[_0xe449('0x38')]&&_0x29f135[_0xe449('0x38')][_0xe449('0x37')]){logger[_0xe449('0x10')](_0xe449('0x52'));var _0xb1f230={};var _0x4ce3e6=_0x29f135[_0xe449('0x38')]['result']['Contacts'][_0xe449('0x53')]['no']?_0x29f135[_0xe449('0x38')][_0xe449('0x37')]['Contacts']['row']['FL']:_0x29f135[_0xe449('0x38')][_0xe449('0x37')][_0xe449('0x54')][_0xe449('0x53')][0x0]['FL'];for(var _0x33ee35=0x0,_0x250054=_0x4ce3e6[_0xe449('0x55')];_0x33ee35<_0x250054;_0x33ee35++){_0xb1f230[_0x4ce3e6[_0x33ee35]['val']]=_0x4ce3e6[_0x33ee35][_0xe449('0x56')];}return _0xb1f230;}else{return request({'method':'GET','uri':util[_0xe449('0x17')]('https://crm.%s/crm/private/json/Leads/searchRecords',_0x3a24e4[_0xe449('0x33')]),'qs':{'authtoken':_0x3a24e4[_0xe449('0x50')],'scope':_0xe449('0x34'),'criteria':util[_0xe449('0x17')](_0xe449('0x51'),_0x24bb8a)},'json':!![]})[_0xe449('0x35')](function(_0x25d880){if(_0x25d880[_0xe449('0x38')]&&_0x25d880[_0xe449('0x38')]['result']){logger['info']('Enduser\x20found\x20in\x20Leads!');var _0x242dec={};var _0x18f347=_0x25d880[_0xe449('0x38')][_0xe449('0x37')]['Leads'][_0xe449('0x53')]['no']?_0x25d880[_0xe449('0x38')][_0xe449('0x37')][_0xe449('0x2d')][_0xe449('0x53')]['FL']:_0x25d880['response'][_0xe449('0x37')][_0xe449('0x2d')][_0xe449('0x53')][0x0]['FL'];for(var _0x27cec5=0x0,_0x5f0437=_0x18f347[_0xe449('0x55')];_0x27cec5<_0x5f0437;_0x27cec5++){_0x242dec[_0x18f347[_0x27cec5]['val']]=_0x18f347[_0x27cec5][_0xe449('0x56')];}return _0x242dec;}else{logger[_0xe449('0x10')](_0xe449('0x57'));_0x1b6caf=getName(_0x1b6caf);return request({'method':'POST','uri':util[_0xe449('0x17')](_0xe449('0x58'),_0x3a24e4[_0xe449('0x33')]),'qs':{'authtoken':_0x3a24e4[_0xe449('0x50')],'scope':_0xe449('0x34'),'xmlData':util['format']('<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>',entities['encodeXML'](_0x1b6caf[0x0]),entities['encodeXML'](_0x1b6caf[0x1]),_0x24bb8a)},'json':!![]})[_0xe449('0x35')](function(_0x5a7df2){_0x5a7df2=JSON['parse'](parser[_0xe449('0x36')](_0x5a7df2));if(_0x5a7df2[_0xe449('0x38')]){if(_0x5a7df2[_0xe449('0x38')]['result']&&_0x5a7df2[_0xe449('0x38')][_0xe449('0x37')][_0xe449('0x39')]){logger['info'](_0xe449('0x59'));return request({'method':'GET','uri':util[_0xe449('0x17')](_0xe449('0x5a'),_0x3a24e4[_0xe449('0x33')]),'qs':{'authtoken':_0x3a24e4[_0xe449('0x50')],'scope':'crmapi','id':_0x5a7df2[_0xe449('0x38')][_0xe449('0x37')][_0xe449('0x39')]['FL'][0x0]['$t']},'json':!![]});}}throw new Error('Error\x20on\x20Lead\x20creation:\x20'+JSON[_0xe449('0x3a')](_0x5a7df2));})['then'](function(_0x19e71c){if(_0x19e71c[_0xe449('0x38')]){if(_0x19e71c[_0xe449('0x38')]['result']){var _0x4497ed={};for(var _0x506b04=0x0,_0x214569=_0x19e71c[_0xe449('0x38')]['result']['Leads']['row']['FL'][_0xe449('0x55')];_0x506b04<_0x214569;_0x506b04++){_0x4497ed[_0x19e71c[_0xe449('0x38')][_0xe449('0x37')][_0xe449('0x2d')][_0xe449('0x53')]['FL'][_0x506b04][_0xe449('0x5b')]]=_0x19e71c[_0xe449('0x38')][_0xe449('0x37')][_0xe449('0x2d')][_0xe449('0x53')]['FL'][_0x506b04]['content'];}return _0x4497ed;}}throw new Error(_0xe449('0x5c')+JSON[_0xe449('0x3a')](_0x19e71c));});}});}});}function request(_0x5146c4){logger[_0xe449('0x5d')](_0xe449('0x5e'),JSON[_0xe449('0x3a')](_0x5146c4));return rp(_0x5146c4);}function getCustomFields(_0x38d863,_0x138182){var _0x44f745={};if(_0x38d863[_0xe449('0x55')]>0x0){_['forEach'](_0x38d863,function(_0x1b88ff){if(_0x1b88ff[_0xe449('0x5f')]==='string'&&_0x1b88ff[_0xe449('0x60')]){_0x44f745[_0x1b88ff[_0xe449('0x60')]]=_0x1b88ff['content'][_0xe449('0x61')]();}else if(_0x1b88ff[_0xe449('0x5f')]===_0xe449('0x62')&&_0x1b88ff[_0xe449('0x63')]&&_0x1b88ff[_0xe449('0x60')]&&_0x138182[_0x1b88ff[_0xe449('0x63')]]){_0x44f745[_0x1b88ff[_0xe449('0x60')]]=_0x138182[_0x1b88ff[_0xe449('0x63')]][_0xe449('0x61')]();}else if(_0x1b88ff[_0xe449('0x5f')]==='customVariable'&&_0x1b88ff[_0xe449('0x64')]&&_0x1b88ff[_0xe449('0x64')]['name']&&_0x1b88ff['idField']&&_0x138182[_0x1b88ff[_0xe449('0x64')]['name'][_0xe449('0x65')]()]){_0x44f745[_0x1b88ff[_0xe449('0x60')]]=_0x138182[_0x1b88ff[_0xe449('0x64')]['name']['toLowerCase']()][_0xe449('0x61')]();}});}return _0x44f745;}function getName(_0x2290be){if(_0x2290be[_0xe449('0x66')]('\x20')>0x0){var _0x6a93cc=_0x2290be[_0xe449('0x67')](/ (.+)/);if(_0x6a93cc[0x1]){return _0x6a93cc;}}return[_0x2290be,_0x2290be];}exports[_0xe449('0x68')]=function(_0x3fb717,_0x1003c8,_0x182fd3,_0x35d4e7,_0x465b51,_0x31f99d){var _0x52478d,_0xfbbbbf;_0x31f99d['host']=intUtil[_0xe449('0x69')](_0x31f99d[_0xe449('0x33')]);_0x31f99d['serverUrl']=intUtil[_0xe449('0x69')](_0x31f99d[_0xe449('0x6a')]);if(_0x465b51&&_0x465b51[_0xe449('0x6b')]){logger[_0xe449('0x10')](_0xe449('0x6c'),_0xe449('0x6d'));_0x1003c8['recordingURL']=util['format'](_0xe449('0x6e'),_0x31f99d[_0xe449('0x6a')],_0x1003c8[_0xe449('0x6f')],md5(_0x1003c8[_0xe449('0x6f')]));}else{_0x1003c8['recordingURL']='';}return getUser(_0x31f99d,_0x35d4e7[_0xe449('0x70')])[_0xe449('0x35')](function(_0x382b8a){_0x52478d=_0x382b8a;logger[_0xe449('0x10')](_0xe449('0x71'),_0x52478d['id']);return getEndUser(_0x31f99d,_0x1003c8[_0xe449('0x72')],_0x1003c8[_0xe449('0x73')]);})[_0xe449('0x35')](function(_0x221e70){_0xfbbbbf=_0x221e70;logger[_0xe449('0x10')](_0xe449('0x74'),_0xfbbbbf[_0xe449('0x2b')]||_0xfbbbbf[_0xe449('0x2c')]);return getCall(_0x31f99d,_0x52478d,_0xfbbbbf,_0x182fd3,_0x1003c8,_0xe449('0x75'));})[_0xe449('0x35')](function(_0x2a46d9){if(_0x2a46d9){logger['info'](_0xe449('0x76'),_0x2a46d9['id']);logger[_0xe449('0x10')]('[QUEUE]','Displaying\x20call\x20to\x20agent\x20in\x20a\x20new\x20tab...');emit(util[_0xe449('0x17')](_0xe449('0x77'),_0x35d4e7['name']),_0xe449('0x78'),{'uri':util[_0xe449('0x17')]('https://crm.%s/crm/EntityInfo.do?module=Calls&id=%s',_0x31f99d[_0xe449('0x33')],_0x2a46d9['id'])});}})[_0xe449('0x79')](function(_0x31191c){logger[_0xe449('0x4b')](_0xe449('0x6c'),JSON[_0xe449('0x3a')](_0x31191c));});};exports[_0xe449('0x14')]=function(_0x976b3,_0x3cde8d,_0x196849,_0x144de8,_0x1704e3,_0x2507a1,_0x1f771f){var _0x17a54d,_0x563063;_0x2507a1['host']=intUtil[_0xe449('0x69')](_0x2507a1['host']);_0x2507a1['serverUrl']=intUtil[_0xe449('0x69')](_0x2507a1[_0xe449('0x6a')]);if(_0x1f771f&&_0x1f771f[_0xe449('0x7a')]&&_0x1f771f[_0xe449('0x7a')]!==_0xe449('0x7b')){logger['info'](_0xe449('0x7c'),_0xe449('0x6d'));_0x3cde8d[_0xe449('0x7d')]=util[_0xe449('0x17')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x2507a1[_0xe449('0x6a')],_0x3cde8d['uniqueid'],md5(_0x3cde8d[_0xe449('0x6f')]));}return getUser(_0x2507a1,_0x144de8[_0xe449('0x70')])[_0xe449('0x35')](function(_0x2991df){_0x17a54d=_0x2991df;logger[_0xe449('0x10')]('The\x20User\x20ID\x20is:',_0x17a54d['id']);return getEndUser(_0x2507a1,_0x3cde8d[_0xe449('0x7e')],_0x3cde8d[_0xe449('0x7f')]);})['then'](function(_0xd1156){_0x563063=_0xd1156;logger[_0xe449('0x10')](_0xe449('0x74'),_0x563063[_0xe449('0x2b')]||_0x563063[_0xe449('0x2c')]);return getCall(_0x2507a1,_0x17a54d,_0x563063,_0x196849,_0x3cde8d,_0xe449('0x80'));})[_0xe449('0x35')](function(_0xd8f08){if(_0xd8f08){logger[_0xe449('0x10')](_0xe449('0x76'),_0xd8f08['id']);logger[_0xe449('0x10')](_0xe449('0x7c'),_0xe449('0x81'));emit(util[_0xe449('0x17')](_0xe449('0x77'),_0x144de8[_0xe449('0x82')]),_0xe449('0x78'),{'uri':util[_0xe449('0x17')](_0xe449('0x83'),_0x2507a1[_0xe449('0x33')],_0xd8f08['id'])});}})[_0xe449('0x79')](function(_0x56989c){logger['error'](_0xe449('0x7c'),JSON['stringify'](_0x56989c));});};exports[_0xe449('0x23')]=function(_0x18c3e6,_0x354409,_0x3fad9b,_0x191ff7,_0x5251c3,_0x1cf4fb){var _0x3ee1f0,_0x426b60;_0x1cf4fb[_0xe449('0x33')]=intUtil[_0xe449('0x69')](_0x1cf4fb['host']);_0x1cf4fb[_0xe449('0x6a')]=intUtil[_0xe449('0x69')](_0x1cf4fb[_0xe449('0x6a')]);if(_0x5251c3&&_0x5251c3['monitor_format']){logger[_0xe449('0x10')](_0xe449('0x84'),_0xe449('0x6d'));_0x354409[_0xe449('0x7d')]=util[_0xe449('0x17')]('%s/api/voice/recordings/%s/downloads?type=uniqueid&token=%s',_0x1cf4fb['serverUrl'],_0x354409[_0xe449('0x6f')],md5(_0x354409['uniqueid']));}else{_0x354409['recordingURL']='';}return getUser(_0x1cf4fb)[_0xe449('0x35')](function(_0x48c0a1){_0x3ee1f0=_0x48c0a1;logger[_0xe449('0x10')](_0xe449('0x71'),_0x3ee1f0['id']);return getEndUser(_0x1cf4fb,_0x354409['calleridname'],_0x354409['calleridnum']);})[_0xe449('0x35')](function(_0x3929e9){_0x426b60=_0x3929e9;logger[_0xe449('0x10')](_0xe449('0x74'),_0x426b60[_0xe449('0x2b')]||_0x426b60[_0xe449('0x2c')]);return getCall(_0x1cf4fb,_0x3ee1f0,_0x426b60,_0x3fad9b,_0x354409,_0xe449('0x75'));})[_0xe449('0x35')](function(_0x23ca38){if(_0x23ca38){logger[_0xe449('0x10')](_0xe449('0x76'),_0x23ca38['id']);}})[_0xe449('0x79')](function(_0x463192){logger[_0xe449('0x4b')](_0xe449('0x84'),JSON['stringify'](_0x463192));});};
\ No newline at end of file
index a59ee3c..4576863 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1d1e=['statusCode','message','request-promise','util','mustache','trigger','exec','data1','toUpperCase','data2','GET','body','render','data7','then','info','format','%s\x20%s\x20succeeded\x20with\x20status:\x20%d\x20and\x20body:\x20%s','error','%s\x20%s\x20%s\x20[%s]:%s'];(function(_0x4aa838,_0x4aa14f){var _0x3abff0=function(_0x402d55){while(--_0x402d55){_0x4aa838['push'](_0x4aa838['shift']());}};_0x3abff0(++_0x4aa14f);}(_0x1d1e,0x11a));var _0xe1d1=function(_0x273d71,_0x11c3a4){_0x273d71=_0x273d71-0x0;var _0x264e15=_0x1d1e[_0x273d71];return _0x264e15;};'use strict';var rp=require(_0xe1d1('0x0'));var util=require(_0xe1d1('0x1'));var Mustache=require(_0xe1d1('0x2'));var logger=require('../../../../config/logger')(_0xe1d1('0x3'));exports[_0xe1d1('0x4')]=function(_0x431f04,_0x4b2195){var _0x146862={'method':_0x431f04[_0xe1d1('0x5')][_0xe1d1('0x6')](),'uri':encodeURI(Mustache['render'](_0x431f04[_0xe1d1('0x7')],_0x4b2195)),'json':!![],'resolveWithFullResponse':!![]};switch(_0x431f04['data1']['toUpperCase']()){case _0xe1d1('0x8'):_0x146862['qs']=_0x4b2195;break;case'POST':_0x146862[_0xe1d1('0x9')]=_0x431f04['data7']?Mustache[_0xe1d1('0xa')](_0x431f04[_0xe1d1('0xb')],_0x4b2195):_0x4b2195;break;}rp(_0x146862)[_0xe1d1('0xc')](function(_0x439a5f){logger[_0xe1d1('0xd')](util[_0xe1d1('0xe')](_0xe1d1('0xf'),_0x431f04[_0xe1d1('0x5')],_0x431f04[_0xe1d1('0x7')],_0x439a5f['statusCode'],_0x439a5f[_0xe1d1('0x9')]));})['catch'](function(_0x192f02){logger[_0xe1d1('0x10')](util[_0xe1d1('0xe')](_0xe1d1('0x11'),_0x431f04[_0xe1d1('0x5')],_0x431f04[_0xe1d1('0x7')],_0x192f02[_0xe1d1('0x12')],_0x192f02['name'],_0x192f02[_0xe1d1('0x13')]));});};
\ No newline at end of file
+var _0xdc7b=['trigger','data1','toUpperCase','render','data2','GET','POST','body','then','info','format','%s\x20%s\x20succeeded\x20with\x20status:\x20%d\x20and\x20body:\x20%s','statusCode','catch','error','%s\x20%s\x20%s\x20[%s]:%s','name','message','util','mustache','../../../../config/logger'];(function(_0x211632,_0x378e2e){var _0x5a1da1=function(_0x44aff2){while(--_0x44aff2){_0x211632['push'](_0x211632['shift']());}};_0x5a1da1(++_0x378e2e);}(_0xdc7b,0x1a1));var _0xbdc7=function(_0x44b165,_0x22860a){_0x44b165=_0x44b165-0x0;var _0x243be6=_0xdc7b[_0x44b165];return _0x243be6;};'use strict';var rp=require('request-promise');var util=require(_0xbdc7('0x0'));var Mustache=require(_0xbdc7('0x1'));var logger=require(_0xbdc7('0x2'))(_0xbdc7('0x3'));exports['exec']=function(_0x53aff0,_0x51e364){var _0x56bfdc={'method':_0x53aff0[_0xbdc7('0x4')][_0xbdc7('0x5')](),'uri':encodeURI(Mustache[_0xbdc7('0x6')](_0x53aff0[_0xbdc7('0x7')],_0x51e364)),'json':!![],'resolveWithFullResponse':!![]};switch(_0x53aff0[_0xbdc7('0x4')][_0xbdc7('0x5')]()){case _0xbdc7('0x8'):_0x56bfdc['qs']=_0x51e364;break;case _0xbdc7('0x9'):_0x56bfdc[_0xbdc7('0xa')]=_0x53aff0['data7']?Mustache[_0xbdc7('0x6')](_0x53aff0['data7'],_0x51e364):_0x51e364;break;}rp(_0x56bfdc)[_0xbdc7('0xb')](function(_0x27f3fc){logger[_0xbdc7('0xc')](util[_0xbdc7('0xd')](_0xbdc7('0xe'),_0x53aff0['data1'],_0x53aff0[_0xbdc7('0x7')],_0x27f3fc[_0xbdc7('0xf')],_0x27f3fc['body']));})[_0xbdc7('0x10')](function(_0x38b982){logger[_0xbdc7('0x11')](util[_0xbdc7('0xd')](_0xbdc7('0x12'),_0x53aff0[_0xbdc7('0x4')],_0x53aff0[_0xbdc7('0x7')],_0x38b982[_0xbdc7('0xf')],_0x38b982[_0xbdc7('0x13')],_0x38b982[_0xbdc7('0x14')]));});};
\ No newline at end of file
index fbe5578..e9360f2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x777f=['error','result','catch','jayson/promise','bluebird','../../config/logger','routing','client','http','Request','debug','rpc'];(function(_0x167cc1,_0x56ef5a){var _0x10bc4b=function(_0xd6a255){while(--_0xd6a255){_0x167cc1['push'](_0x167cc1['shift']());}};_0x10bc4b(++_0x56ef5a);}(_0x777f,0x9f));var _0xf777=function(_0x4fde08,_0x463a36){_0x4fde08=_0x4fde08-0x0;var _0x12e725=_0x777f[_0x4fde08];return _0x12e725;};'use strict';var jayson=require(_0xf777('0x0'));var BPromise=require(_0xf777('0x1'));var logger=require(_0xf777('0x2'))(_0xf777('0x3'));var client=jayson[_0xf777('0x4')][_0xf777('0x5')]({'port':0x2329});client[_0xf777('0x6')]=function(_0x2612fe,_0x508470){return new BPromise(function(_0x3caeaa,_0x4123fa){return client['request'](_0x2612fe,_0x508470)['then'](function(_0x5df5dc){logger[_0xf777('0x7')](_0xf777('0x8'),_0xf777('0x3'),_0x2612fe,_0x508470,_0x5df5dc);if(_0x5df5dc[_0xf777('0x9')]){logger[_0xf777('0x9')](_0xf777('0x8'),_0xf777('0x3'),_0x2612fe,_0x5df5dc[_0xf777('0x9')]['message'],_0x508470);return _0x4123fa(_0x5df5dc['error']['message']);}else{return _0x3caeaa(_0x5df5dc[_0xf777('0xa')]);}})[_0xf777('0xb')](function(_0x557c9e){logger[_0xf777('0x9')](_0xf777('0x8'),_0xf777('0x3'),_0x2612fe,_0x557c9e,_0x508470);return _0x4123fa(_0x557c9e);});});};module['exports']=client;
\ No newline at end of file
+var _0xe0c3=['debug','rpc','error','message','catch','exports','jayson/promise','../../config/logger','routing','client','http','Request'];(function(_0x33534c,_0x1eaf24){var _0xc0832b=function(_0xd29882){while(--_0xd29882){_0x33534c['push'](_0x33534c['shift']());}};_0xc0832b(++_0x1eaf24);}(_0xe0c3,0xea));var _0x3e0c=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xe0c3[_0x3dd15e];return _0x231fd0;};'use strict';var jayson=require(_0x3e0c('0x0'));var BPromise=require('bluebird');var logger=require(_0x3e0c('0x1'))(_0x3e0c('0x2'));var client=jayson[_0x3e0c('0x3')][_0x3e0c('0x4')]({'port':0x2329});client[_0x3e0c('0x5')]=function(_0x410ec4,_0x31851c){return new BPromise(function(_0x26c964,_0x1a026f){return client['request'](_0x410ec4,_0x31851c)['then'](function(_0x163adf){logger[_0x3e0c('0x6')](_0x3e0c('0x7'),_0x3e0c('0x2'),_0x410ec4,_0x31851c,_0x163adf);if(_0x163adf[_0x3e0c('0x8')]){logger[_0x3e0c('0x8')](_0x3e0c('0x7'),_0x3e0c('0x2'),_0x410ec4,_0x163adf[_0x3e0c('0x8')][_0x3e0c('0x9')],_0x31851c);return _0x1a026f(_0x163adf[_0x3e0c('0x8')]['message']);}else{return _0x26c964(_0x163adf['result']);}})[_0x3e0c('0xa')](function(_0x2a0b19){logger[_0x3e0c('0x8')](_0x3e0c('0x7'),_0x3e0c('0x2'),_0x410ec4,_0x2a0b19,_0x31851c);return _0x1a026f(_0x2a0b19);});});};module[_0x3e0c('0xb')]=client;
\ No newline at end of file
index bf119a5..cd9a879 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xde7a=['log','./realtime','resolve','then','getMailAccounts','mailAccounts','listen','catch'];(function(_0x26a906,_0x3d135c){var _0x495575=function(_0x2365af){while(--_0x2365af){_0x26a906['push'](_0x26a906['shift']());}};_0x495575(++_0x3d135c);}(_0xde7a,0x181));var _0xade7=function(_0x40eeeb,_0x500d6e){_0x40eeeb=_0x40eeeb-0x0;var _0x3e3d5a=_0xde7a[_0x40eeeb];return _0x3e3d5a;};'use strict';var BPromise=require('bluebird');var server=require('./server');var Realtime=require(_0xade7('0x0'));var EmailChannel=require('./lib/email');var mailAccount=require('./rpc/mailAccount');var realtime=new Realtime();var email=new EmailChannel(realtime);function initRealtime(){return BPromise[_0xade7('0x1')]()[_0xade7('0x2')](mailAccount[_0xade7('0x3')]())[_0xade7('0x2')](realtime['initMailAccounts']())['then'](function(){email['refresh'](realtime[_0xade7('0x4')]);return realtime;});}function main(){return server[_0xade7('0x5')](realtime,email)['then'](function(_0x5c1eac){return initRealtime();})[_0xade7('0x2')](function(_0x8c57a5){return setInterval(initRealtime,0x2710);})[_0xade7('0x6')](function(_0x9bb153){console[_0xade7('0x7')](_0x9bb153);});}main();
\ No newline at end of file
+var _0x5aa6=['./server','./realtime','./lib/email','./rpc/mailAccount','resolve','then','initMailAccounts','refresh','mailAccounts','listen','catch','log','bluebird'];(function(_0x5d7227,_0x12aebe){var _0x15ac55=function(_0x58d13e){while(--_0x58d13e){_0x5d7227['push'](_0x5d7227['shift']());}};_0x15ac55(++_0x12aebe);}(_0x5aa6,0xcf));var _0x65aa=function(_0x1a179e,_0xf6d161){_0x1a179e=_0x1a179e-0x0;var _0x374947=_0x5aa6[_0x1a179e];return _0x374947;};'use strict';var BPromise=require(_0x65aa('0x0'));var server=require(_0x65aa('0x1'));var Realtime=require(_0x65aa('0x2'));var EmailChannel=require(_0x65aa('0x3'));var mailAccount=require(_0x65aa('0x4'));var realtime=new Realtime();var email=new EmailChannel(realtime);function initRealtime(){return BPromise[_0x65aa('0x5')]()['then'](mailAccount['getMailAccounts']())[_0x65aa('0x6')](realtime[_0x65aa('0x7')]())[_0x65aa('0x6')](function(){email[_0x65aa('0x8')](realtime[_0x65aa('0x9')]);return realtime;});}function main(){return server[_0x65aa('0xa')](realtime,email)[_0x65aa('0x6')](function(_0x30af9f){return initRealtime();})[_0x65aa('0x6')](function(_0x311c21){return setInterval(initRealtime,0x2710);})[_0x65aa('0xb')](function(_0x1ab141){console[_0x65aa('0xc')](_0x1ab141);});}main();
\ No newline at end of file
index 9f2137d..0ce4e03 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xffd6=['emit','key','active','status','Imap','messageStatus','isNil','stringify','md5','mailAccount:update','refresh','hasOwnProperty','imapAccounts','box','bind','handleImapEnd','handleImapError','disabled','handleImapBox','name','messages','total','handleImapEmail','New\x20email\x20from\x20%s\x20%s\x20%s\x20to\x20%s','firstName','lastName','then','Mail\x20accepted\x20from\x20routing','catch','error','Mail\x20not\x20accepted\x20from\x20routing\x20%s','lastSync','sendMail','send','verifySmtp','Smtp','verify','verified','exports','lodash','moment','bluebird','../../../config/environment','../../../config/logger','email','defaults','redis','localhost','socket.io-emitter','./imap','./smtp','../rpc/mailAccount','info','mailAccounts','smtp','prototype'];(function(_0x342227,_0x39ffe9){var _0x34b111=function(_0xfac1d8){while(--_0xfac1d8){_0x342227['push'](_0x342227['shift']());}};_0x34b111(++_0x39ffe9);}(_0xffd6,0x97));var _0x6ffd=function(_0x1d8119,_0xc98f17){_0x1d8119=_0x1d8119-0x0;var _0x3e30f6=_0xffd6[_0x1d8119];return _0x3e30f6;};'use strict';var _=require(_0x6ffd('0x0'));var moment=require(_0x6ffd('0x1'));var BPromise=require(_0x6ffd('0x2'));var md5=require('md5');var Redis=require('ioredis');var config=require(_0x6ffd('0x3'));var logger=require(_0x6ffd('0x4'))(_0x6ffd('0x5'));config['redis']=_[_0x6ffd('0x6')](config[_0x6ffd('0x7')],{'host':_0x6ffd('0x8'),'port':0x18eb});var io=require(_0x6ffd('0x9'))(new Redis(config['redis']));var EmailImap=require(_0x6ffd('0xa'));var EmailSmtp=require(_0x6ffd('0xb'));var mailAccount=require(_0x6ffd('0xc'));var md5Accounts={};function EmailChannel(_0x1fbbe6){logger[_0x6ffd('0xd')]('start\x20email\x20channel');this[_0x6ffd('0xe')]=_0x1fbbe6[_0x6ffd('0xe')];this['imapAccounts']={};this[_0x6ffd('0xf')]=new EmailSmtp();}EmailChannel[_0x6ffd('0x10')][_0x6ffd('0x11')]=function(_0x3dda1e){var _0x262023=this[_0x6ffd('0xe')][_0x3dda1e];var _0x836501={'id':_0x262023['id'],'name':_0x262023['name'],'key':_0x262023[_0x6ffd('0x12')],'active':_0x262023[_0x6ffd('0x13')],'Imap':{'status':_0x262023['Imap'][_0x6ffd('0x14')],'messageStatus':_0x262023[_0x6ffd('0x15')][_0x6ffd('0x16')],'total':_0x262023[_0x6ffd('0x15')]['total']}};if(_[_0x6ffd('0x17')](md5Accounts[_0x3dda1e])){md5Accounts[_0x3dda1e]={};}var _0x594cb3=md5(JSON[_0x6ffd('0x18')](_0x836501));if(md5Accounts[_0x3dda1e]['md5']!==_0x594cb3){md5Accounts[_0x3dda1e][_0x6ffd('0x19')]=_0x594cb3;io[_0x6ffd('0x11')](_0x6ffd('0x1a'),_0x836501);}};EmailChannel['prototype'][_0x6ffd('0x1b')]=function(_0x9d2f93){for(var _0x350c94 in _0x9d2f93){if(_0x9d2f93[_0x6ffd('0x1c')](_0x350c94)){if(_0x9d2f93[_0x350c94][_0x6ffd('0x15')]&&_0x9d2f93[_0x350c94][_0x6ffd('0x13')]){var _0x3f38e7=_0x9d2f93[_0x350c94][_0x6ffd('0x15')];if(!this['imapAccounts'][_0x6ffd('0x1c')](_0x3f38e7['id'])){this['imapAccounts'][_0x3f38e7['id']]=new EmailImap(_0x3f38e7,_0x9d2f93[_0x350c94]['email']);this[_0x6ffd('0x1d')][_0x3f38e7['id']]['on'](_0x6ffd('0x1e'),this['handleImapBox'][_0x6ffd('0x1f')](this,_0x350c94));this[_0x6ffd('0x1d')][_0x3f38e7['id']]['on']('email',this['handleImapEmail'][_0x6ffd('0x1f')](this,_0x350c94));this[_0x6ffd('0x1d')][_0x3f38e7['id']]['on']('end',this[_0x6ffd('0x20')][_0x6ffd('0x1f')](this,_0x350c94));this[_0x6ffd('0x1d')][_0x3f38e7['id']]['on']('error',this[_0x6ffd('0x21')][_0x6ffd('0x1f')](this,_0x350c94));}}else{if(_['isNil'](this[_0x6ffd('0xe')][_0x350c94][_0x6ffd('0x15')])){this['mailAccounts'][_0x350c94][_0x6ffd('0x15')]={};}this[_0x6ffd('0xe')][_0x350c94][_0x6ffd('0x15')]['status']=_0x6ffd('0x22');this[_0x6ffd('0xe')][_0x350c94][_0x6ffd('0x15')]['messageStatus']='';this[_0x6ffd('0x11')](_0x350c94);}}}};EmailChannel['prototype'][_0x6ffd('0x23')]=function(_0x43269c,_0x56c6de){if(this['mailAccounts'][_0x43269c]){this[_0x6ffd('0xe')][_0x43269c][_0x6ffd('0x15')][_0x6ffd('0x14')]='connected';this['mailAccounts'][_0x43269c][_0x6ffd('0x15')]['messageStatus']=_0x56c6de[_0x6ffd('0x24')];if(_0x56c6de[_0x6ffd('0x25')]){this['mailAccounts'][_0x43269c][_0x6ffd('0x15')][_0x6ffd('0x26')]=_0x56c6de[_0x6ffd('0x25')][_0x6ffd('0x26')];}return this[_0x6ffd('0x11')](_0x43269c);}};EmailChannel[_0x6ffd('0x10')][_0x6ffd('0x27')]=function(_0xccb8c,_0x17f627){logger[_0x6ffd('0xd')](_0x6ffd('0x28'),_0x17f627[_0x6ffd('0x29')],_0x17f627[_0x6ffd('0x2a')],_0x17f627['from'],_0xccb8c);if(this['mailAccounts'][_0xccb8c]){return mailAccount['notify'](_0xccb8c,_0x17f627)[_0x6ffd('0x2b')](function(_0x2bbb6e){if(_0x2bbb6e){logger[_0x6ffd('0xd')](_0x6ffd('0x2c'));}})[_0x6ffd('0x2d')](function(_0x276212){logger[_0x6ffd('0x2e')](_0x6ffd('0x2f'),JSON[_0x6ffd('0x18')](_0x276212));});}};EmailChannel[_0x6ffd('0x10')][_0x6ffd('0x20')]=function(_0x159bad){if(this[_0x6ffd('0xe')][_0x159bad]&&this['mailAccounts'][_0x159bad][_0x6ffd('0x15')]){if(this[_0x6ffd('0x1d')][this[_0x6ffd('0xe')][_0x159bad][_0x6ffd('0x15')]['id']]){delete this['imapAccounts'][this[_0x6ffd('0xe')][_0x159bad]['Imap']['id']];}this['mailAccounts'][_0x159bad][_0x6ffd('0x15')][_0x6ffd('0x30')]=moment();this[_0x6ffd('0x11')](_0x159bad);}};EmailChannel[_0x6ffd('0x10')]['handleImapError']=function(_0xaeb6e4,_0x5a304a){if(this[_0x6ffd('0xe')][_0xaeb6e4]){this[_0x6ffd('0xe')][_0xaeb6e4][_0x6ffd('0x15')][_0x6ffd('0x14')]=_0x6ffd('0x2e');this['mailAccounts'][_0xaeb6e4]['Imap'][_0x6ffd('0x16')]=_0x5a304a;return this['emit'](_0xaeb6e4);}};EmailChannel[_0x6ffd('0x10')][_0x6ffd('0x31')]=function(_0x4432e6,_0x65cb97){return this[_0x6ffd('0xf')][_0x6ffd('0x32')](_0x4432e6,_0x65cb97);};EmailChannel['prototype'][_0x6ffd('0x33')]=function(_0x4595d9){var _0x173e2a=this;if(this[_0x6ffd('0xe')][_0x4595d9['id']]){if(_['isNil'](this[_0x6ffd('0xe')][_0x4595d9['id']]['Smtp'])){this[_0x6ffd('0xe')][_0x4595d9['id']][_0x6ffd('0x34')]={};}this[_0x6ffd('0xe')][_0x4595d9['id']]['Smtp'][_0x6ffd('0x30')]=moment();return new BPromise(function(_0x35161d,_0x1c76b9){return _0x173e2a[_0x6ffd('0xf')][_0x6ffd('0x35')](_0x4595d9)[_0x6ffd('0x2b')](function(_0x14608b){_0x173e2a['mailAccounts'][_0x4595d9['id']]['Smtp']['status']=_0x6ffd('0x36');_0x173e2a[_0x6ffd('0xe')][_0x4595d9['id']]['Smtp'][_0x6ffd('0x16')]='';_0x173e2a[_0x6ffd('0x11')](_0x4595d9['id']);_0x35161d(_0x14608b);})[_0x6ffd('0x2d')](function(_0x1041eb){_0x173e2a['mailAccounts'][_0x4595d9['id']][_0x6ffd('0x34')][_0x6ffd('0x14')]=_0x6ffd('0x2e');_0x173e2a[_0x6ffd('0xe')][_0x4595d9['id']][_0x6ffd('0x34')][_0x6ffd('0x16')]=_0x1041eb;_0x173e2a[_0x6ffd('0x11')](_0x4595d9['id']);_0x1c76b9(_0x1041eb);});});}return this[_0x6ffd('0xf')][_0x6ffd('0x35')](_0x4595d9);};module[_0x6ffd('0x37')]=EmailChannel;
\ No newline at end of file
+var _0x430c=['prototype','connected','messages','New\x20email\x20from\x20%s\x20%s\x20%s\x20to\x20%s','lastName','from','notify','Mail\x20accepted\x20from\x20routing','catch','Mail\x20not\x20accepted\x20from\x20routing\x20%s','send','verifySmtp','Smtp','lastSync','verify','then','exports','lodash','md5','ioredis','../../../config/environment','redis','localhost','./smtp','../rpc/mailAccount','info','start\x20email\x20channel','mailAccounts','imapAccounts','smtp','emit','name','active','Imap','status','messageStatus','total','stringify','mailAccount:update','refresh','hasOwnProperty','box','bind','email','handleImapEmail','end','error','handleImapError','isNil','disabled'];(function(_0x275be4,_0x22c653){var _0x9640a3=function(_0x5bdc87){while(--_0x5bdc87){_0x275be4['push'](_0x275be4['shift']());}};_0x9640a3(++_0x22c653);}(_0x430c,0x1a1));var _0xc430=function(_0x16e0c8,_0x4861eb){_0x16e0c8=_0x16e0c8-0x0;var _0xe4b5af=_0x430c[_0x16e0c8];return _0xe4b5af;};'use strict';var _=require(_0xc430('0x0'));var moment=require('moment');var BPromise=require('bluebird');var md5=require(_0xc430('0x1'));var Redis=require(_0xc430('0x2'));var config=require(_0xc430('0x3'));var logger=require('../../../config/logger')('email');config['redis']=_['defaults'](config[_0xc430('0x4')],{'host':_0xc430('0x5'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0xc430('0x4')]));var EmailImap=require('./imap');var EmailSmtp=require(_0xc430('0x6'));var mailAccount=require(_0xc430('0x7'));var md5Accounts={};function EmailChannel(_0x814a90){logger[_0xc430('0x8')](_0xc430('0x9'));this[_0xc430('0xa')]=_0x814a90[_0xc430('0xa')];this[_0xc430('0xb')]={};this[_0xc430('0xc')]=new EmailSmtp();}EmailChannel['prototype'][_0xc430('0xd')]=function(_0x2b47d6){var _0x56c090=this[_0xc430('0xa')][_0x2b47d6];var _0x5aeed9={'id':_0x56c090['id'],'name':_0x56c090[_0xc430('0xe')],'key':_0x56c090['key'],'active':_0x56c090[_0xc430('0xf')],'Imap':{'status':_0x56c090[_0xc430('0x10')][_0xc430('0x11')],'messageStatus':_0x56c090[_0xc430('0x10')][_0xc430('0x12')],'total':_0x56c090[_0xc430('0x10')][_0xc430('0x13')]}};if(_['isNil'](md5Accounts[_0x2b47d6])){md5Accounts[_0x2b47d6]={};}var _0x4e9134=md5(JSON[_0xc430('0x14')](_0x5aeed9));if(md5Accounts[_0x2b47d6][_0xc430('0x1')]!==_0x4e9134){md5Accounts[_0x2b47d6][_0xc430('0x1')]=_0x4e9134;io[_0xc430('0xd')](_0xc430('0x15'),_0x5aeed9);}};EmailChannel['prototype'][_0xc430('0x16')]=function(_0x4aeb72){for(var _0x4bf91f in _0x4aeb72){if(_0x4aeb72[_0xc430('0x17')](_0x4bf91f)){if(_0x4aeb72[_0x4bf91f][_0xc430('0x10')]&&_0x4aeb72[_0x4bf91f][_0xc430('0xf')]){var _0x5830b0=_0x4aeb72[_0x4bf91f]['Imap'];if(!this[_0xc430('0xb')]['hasOwnProperty'](_0x5830b0['id'])){this[_0xc430('0xb')][_0x5830b0['id']]=new EmailImap(_0x5830b0,_0x4aeb72[_0x4bf91f]['email']);this['imapAccounts'][_0x5830b0['id']]['on'](_0xc430('0x18'),this['handleImapBox'][_0xc430('0x19')](this,_0x4bf91f));this[_0xc430('0xb')][_0x5830b0['id']]['on'](_0xc430('0x1a'),this[_0xc430('0x1b')][_0xc430('0x19')](this,_0x4bf91f));this['imapAccounts'][_0x5830b0['id']]['on'](_0xc430('0x1c'),this['handleImapEnd']['bind'](this,_0x4bf91f));this[_0xc430('0xb')][_0x5830b0['id']]['on'](_0xc430('0x1d'),this[_0xc430('0x1e')]['bind'](this,_0x4bf91f));}}else{if(_[_0xc430('0x1f')](this['mailAccounts'][_0x4bf91f][_0xc430('0x10')])){this[_0xc430('0xa')][_0x4bf91f]['Imap']={};}this[_0xc430('0xa')][_0x4bf91f][_0xc430('0x10')]['status']=_0xc430('0x20');this['mailAccounts'][_0x4bf91f][_0xc430('0x10')]['messageStatus']='';this[_0xc430('0xd')](_0x4bf91f);}}}};EmailChannel[_0xc430('0x21')]['handleImapBox']=function(_0x33433f,_0x2ec021){if(this[_0xc430('0xa')][_0x33433f]){this[_0xc430('0xa')][_0x33433f][_0xc430('0x10')]['status']=_0xc430('0x22');this[_0xc430('0xa')][_0x33433f][_0xc430('0x10')][_0xc430('0x12')]=_0x2ec021['name'];if(_0x2ec021[_0xc430('0x23')]){this['mailAccounts'][_0x33433f][_0xc430('0x10')]['total']=_0x2ec021[_0xc430('0x23')][_0xc430('0x13')];}return this[_0xc430('0xd')](_0x33433f);}};EmailChannel[_0xc430('0x21')]['handleImapEmail']=function(_0x17c975,_0x2a85aa){logger[_0xc430('0x8')](_0xc430('0x24'),_0x2a85aa['firstName'],_0x2a85aa[_0xc430('0x25')],_0x2a85aa[_0xc430('0x26')],_0x17c975);if(this['mailAccounts'][_0x17c975]){return mailAccount[_0xc430('0x27')](_0x17c975,_0x2a85aa)['then'](function(_0x5453a7){if(_0x5453a7){logger[_0xc430('0x8')](_0xc430('0x28'));}})[_0xc430('0x29')](function(_0x476c12){logger[_0xc430('0x1d')](_0xc430('0x2a'),JSON[_0xc430('0x14')](_0x476c12));});}};EmailChannel[_0xc430('0x21')]['handleImapEnd']=function(_0x442d20){if(this['mailAccounts'][_0x442d20]&&this[_0xc430('0xa')][_0x442d20][_0xc430('0x10')]){if(this[_0xc430('0xb')][this[_0xc430('0xa')][_0x442d20]['Imap']['id']]){delete this[_0xc430('0xb')][this['mailAccounts'][_0x442d20]['Imap']['id']];}this[_0xc430('0xa')][_0x442d20][_0xc430('0x10')]['lastSync']=moment();this[_0xc430('0xd')](_0x442d20);}};EmailChannel[_0xc430('0x21')][_0xc430('0x1e')]=function(_0x20bcdd,_0x2310d3){if(this[_0xc430('0xa')][_0x20bcdd]){this[_0xc430('0xa')][_0x20bcdd][_0xc430('0x10')][_0xc430('0x11')]=_0xc430('0x1d');this[_0xc430('0xa')][_0x20bcdd][_0xc430('0x10')][_0xc430('0x12')]=_0x2310d3;return this[_0xc430('0xd')](_0x20bcdd);}};EmailChannel[_0xc430('0x21')]['sendMail']=function(_0x253fc0,_0x2e91e9){return this[_0xc430('0xc')][_0xc430('0x2b')](_0x253fc0,_0x2e91e9);};EmailChannel['prototype'][_0xc430('0x2c')]=function(_0x1d7755){var _0x13ac85=this;if(this[_0xc430('0xa')][_0x1d7755['id']]){if(_[_0xc430('0x1f')](this[_0xc430('0xa')][_0x1d7755['id']]['Smtp'])){this[_0xc430('0xa')][_0x1d7755['id']][_0xc430('0x2d')]={};}this[_0xc430('0xa')][_0x1d7755['id']][_0xc430('0x2d')][_0xc430('0x2e')]=moment();return new BPromise(function(_0x463873,_0x46f98d){return _0x13ac85[_0xc430('0xc')][_0xc430('0x2f')](_0x1d7755)[_0xc430('0x30')](function(_0x31f32a){_0x13ac85[_0xc430('0xa')][_0x1d7755['id']][_0xc430('0x2d')][_0xc430('0x11')]='verified';_0x13ac85['mailAccounts'][_0x1d7755['id']]['Smtp'][_0xc430('0x12')]='';_0x13ac85[_0xc430('0xd')](_0x1d7755['id']);_0x463873(_0x31f32a);})[_0xc430('0x29')](function(_0xb69eae){_0x13ac85[_0xc430('0xa')][_0x1d7755['id']][_0xc430('0x2d')][_0xc430('0x11')]=_0xc430('0x1d');_0x13ac85[_0xc430('0xa')][_0x1d7755['id']][_0xc430('0x2d')][_0xc430('0x12')]=_0xb69eae;_0x13ac85[_0xc430('0xd')](_0x1d7755['id']);_0x46f98d(_0xb69eae);});});}return this[_0xc430('0xc')][_0xc430('0x2f')](_0x1d7755);};module[_0xc430('0x31')]=EmailChannel;
\ No newline at end of file
index 626dd1d..b5ad1a8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e3e=['connTimeout','authTimeout','password','host','port','tls','required','user','getHost','service','openBox','handleOpenBox','handleError','emit','box','readUnseen','search','UNSEEN','handleReadUnseen','length','fetch','handleFetchError','closeBox','handleCloseBox','handleFetchMessage','body','handleMessageBody','handleMessageAttributes','handleMessageEnd','handleSimpleParser','parser','handleFetchEnd','handleEnd','stringify','textCode','hasOwnProperty','exports','imap','randomstring','mailparser','simpleParser','events','./utils','../../../config/logger','email','account','getAccount','once','handleReady','bind','end','error','connect','inherits','prototype'];(function(_0x7ad6cb,_0xffee6c){var _0x22a0ba=function(_0x47f291){while(--_0x47f291){_0x7ad6cb['push'](_0x7ad6cb['shift']());}};_0x22a0ba(++_0xffee6c);}(_0x3e3e,0x93));var _0xe3e3=function(_0x2dd522,_0x43c73f){_0x2dd522=_0x2dd522-0x0;var _0x4d6199=_0x3e3e[_0x2dd522];return _0x4d6199;};'use strict';var fs=require('fs');var path=require('path');var util=require('util');var Imap=require(_0xe3e3('0x0'));var _=require('lodash');var rs=require(_0xe3e3('0x1'));var simpleParser=require(_0xe3e3('0x2'))[_0xe3e3('0x3')];var EventEmitter=require(_0xe3e3('0x4'))['EventEmitter'];var utils=require(_0xe3e3('0x5'));var logger=require(_0xe3e3('0x6'))(_0xe3e3('0x7'));function EmailImap(_0x38fa8d,_0x5ecefd){this['mailbox']='INBOX';this[_0xe3e3('0x8')]=this[_0xe3e3('0x9')](_0x38fa8d,_0x5ecefd);this['imap']=new Imap(this[_0xe3e3('0x8')]);this[_0xe3e3('0x0')][_0xe3e3('0xa')]('ready',this[_0xe3e3('0xb')][_0xe3e3('0xc')](this));this[_0xe3e3('0x0')][_0xe3e3('0xa')](_0xe3e3('0xd'),this['handleEnd'][_0xe3e3('0xc')](this));this[_0xe3e3('0x0')]['on'](_0xe3e3('0xe'),this['handleError'][_0xe3e3('0xc')](this));this[_0xe3e3('0x0')][_0xe3e3('0xf')]();}util[_0xe3e3('0x10')](EmailImap,EventEmitter);EmailImap[_0xe3e3('0x11')]['getAccount']=function(_0x2f2a5a,_0x5c9fed){var _0x392e14={'connTimeout':_0x2f2a5a['connTimeout']?_0x2f2a5a[_0xe3e3('0x12')]*0x3e8:0x2710,'authTimeout':_0x2f2a5a[_0xe3e3('0x13')]?_0x2f2a5a[_0xe3e3('0x13')]*0x3e8:0x1388};if(_['isNil'](_0x2f2a5a['service'])){if(_0x2f2a5a['authentication']){_0x392e14['user']=_0x2f2a5a['user'];_0x392e14[_0xe3e3('0x14')]=_0x2f2a5a[_0xe3e3('0x14')];}_0x392e14[_0xe3e3('0x15')]=_0x2f2a5a[_0xe3e3('0x15')];_0x392e14[_0xe3e3('0x16')]=_0x2f2a5a['port']||0x3e1;if(_0x2f2a5a[_0xe3e3('0x17')]){_0x392e14[_0xe3e3('0x17')]=!![];}else{_0x392e14[_0xe3e3('0x17')]=![];_0x392e14['autotls']=_0xe3e3('0x18');}}else{_0x392e14[_0xe3e3('0x19')]=_0x2f2a5a[_0xe3e3('0x19')];_0x392e14[_0xe3e3('0x14')]=_0x2f2a5a[_0xe3e3('0x14')];_0x392e14['host']=utils[_0xe3e3('0x1a')](_0x2f2a5a[_0xe3e3('0x1b')]);_0x392e14[_0xe3e3('0x16')]=0x3e1;_0x392e14[_0xe3e3('0x17')]=!![];}_0x392e14[_0xe3e3('0x7')]=_0x5c9fed||_0x2f2a5a[_0xe3e3('0x19')]||'anonymous@xcally.com';return _0x392e14;};EmailImap[_0xe3e3('0x11')][_0xe3e3('0xb')]=function(){this[_0xe3e3('0x0')][_0xe3e3('0x1c')](this['mailbox'],![],this['handleOpenBox'][_0xe3e3('0xc')](this));};EmailImap[_0xe3e3('0x11')][_0xe3e3('0x1d')]=function(_0x1375db,_0x30f974){if(_0x1375db){this[_0xe3e3('0x1e')](_0x1375db,!![]);}else{this[_0xe3e3('0x1f')](_0xe3e3('0x20'),_0x30f974);this[_0xe3e3('0x21')]();}};EmailImap['prototype']['handleCloseBox']=function(_0x2838b1){if(_0x2838b1){this[_0xe3e3('0x1e')](_0x2838b1,!![]);}else{this['imap']['end']();}};EmailImap[_0xe3e3('0x11')]['readUnseen']=function(){this[_0xe3e3('0x0')][_0xe3e3('0x22')]([_0xe3e3('0x23')],this[_0xe3e3('0x24')][_0xe3e3('0xc')](this));};EmailImap['prototype'][_0xe3e3('0x24')]=function(_0x1d62e5,_0x5476a1){if(_0x1d62e5){this[_0xe3e3('0x1e')](_0x1d62e5,!![]);}else{if(_0x5476a1[_0xe3e3('0x25')]){try{var _0x771605=this[_0xe3e3('0x0')][_0xe3e3('0x26')](_0x5476a1,{'bodies':'','markSeen':!![]});_0x771605['on']('message',this['handleFetchMessage']['bind'](this));_0x771605[_0xe3e3('0xa')](_0xe3e3('0xe'),this[_0xe3e3('0x27')]['bind'](this));_0x771605[_0xe3e3('0xa')](_0xe3e3('0xd'),this['handleFetchEnd'][_0xe3e3('0xc')](this));}catch(_0xef395b){logger[_0xe3e3('0xe')](_0xef395b);}}else{this[_0xe3e3('0x0')][_0xe3e3('0x28')](!![],this[_0xe3e3('0x29')][_0xe3e3('0xc')](this));}}};EmailImap[_0xe3e3('0x11')][_0xe3e3('0x2a')]=function(_0x6fa249,_0x2aeeca){_0x6fa249['on'](_0xe3e3('0x2b'),this[_0xe3e3('0x2c')][_0xe3e3('0xc')](this));_0x6fa249[_0xe3e3('0xa')]('attributes',this[_0xe3e3('0x2d')][_0xe3e3('0xc')](this));_0x6fa249['once']('end',this[_0xe3e3('0x2e')][_0xe3e3('0xc')](this));};EmailImap[_0xe3e3('0x11')]['handleMessageBody']=function(_0x18c591,_0x2cee43){simpleParser(_0x18c591,this[_0xe3e3('0x2f')][_0xe3e3('0xc')](this));};EmailImap[_0xe3e3('0x11')][_0xe3e3('0x2d')]=function(_0x4f0bb2){};EmailImap['prototype'][_0xe3e3('0x2e')]=function(){};EmailImap['prototype'][_0xe3e3('0x2f')]=function(_0x2b39b2,_0x1fccb7){if(_0x2b39b2){logger[_0xe3e3('0xe')](_0x2b39b2);}else{var _0x39fdb0=this;utils[_0xe3e3('0x30')](this['account'],_0x1fccb7,function(_0x251cb9){_0x39fdb0[_0xe3e3('0x1f')](_0xe3e3('0x7'),_0x251cb9);});}};EmailImap['prototype'][_0xe3e3('0x31')]=function(){this['imap'][_0xe3e3('0x28')](!![],this[_0xe3e3('0x29')]['bind'](this));};EmailImap[_0xe3e3('0x11')]['handleFetchError']=function(_0x27316f){this['handleError'](_0x27316f);this[_0xe3e3('0x0')]['closeBox'](!![],this['handleCloseBox'][_0xe3e3('0xc')](this));};EmailImap['prototype'][_0xe3e3('0x32')]=function(){this[_0xe3e3('0x1f')]('end');};EmailImap['prototype'][_0xe3e3('0x1e')]=function(_0x11892b,_0x2c6cc8){logger[_0xe3e3('0xe')](_0xe3e3('0x1e'),this[_0xe3e3('0x8')]['email'],JSON[_0xe3e3('0x33')](_0x11892b));var _0xdaf27c='';if(_0x11892b){if(_0x11892b[_0xe3e3('0x34')]){_0xdaf27c=_0x11892b[_0xe3e3('0x34')];}else{for(var _0x1b783a in _0x11892b){if(_0x11892b[_0xe3e3('0x35')](_0x1b783a)){_0xdaf27c+=_['upperFirst'](_0x1b783a)+':\x20'+_0x11892b[_0x1b783a]+'\x0a';}}}}if(_0x2c6cc8){this[_0xe3e3('0x0')][_0xe3e3('0xd')]();}else{this[_0xe3e3('0x1f')](_0xe3e3('0xe'),_0xdaf27c);this[_0xe3e3('0x1f')](_0xe3e3('0xd'));}};module[_0xe3e3('0x36')]=EmailImap;
\ No newline at end of file
+var _0x0650=['body','handleMessageBody','attributes','handleMessageAttributes','handleMessageEnd','handleSimpleParser','parser','stringify','textCode','upperFirst','exports','path','imap','lodash','mailparser','simpleParser','EventEmitter','./utils','../../../config/logger','email','mailbox','INBOX','account','once','ready','bind','end','handleEnd','error','handleError','connect','inherits','getAccount','connTimeout','authTimeout','isNil','service','user','password','host','port','tls','autotls','getHost','anonymous@xcally.com','prototype','handleReady','openBox','handleOpenBox','emit','box','readUnseen','handleCloseBox','length','fetch','message','handleFetchMessage','handleFetchError','closeBox'];(function(_0x2f58a2,_0x1121bf){var _0x35b49a=function(_0x1ca061){while(--_0x1ca061){_0x2f58a2['push'](_0x2f58a2['shift']());}};_0x35b49a(++_0x1121bf);}(_0x0650,0xf7));var _0x0065=function(_0x534185,_0x1e880f){_0x534185=_0x534185-0x0;var _0xd10ee2=_0x0650[_0x534185];return _0xd10ee2;};'use strict';var fs=require('fs');var path=require(_0x0065('0x0'));var util=require('util');var Imap=require(_0x0065('0x1'));var _=require(_0x0065('0x2'));var rs=require('randomstring');var simpleParser=require(_0x0065('0x3'))[_0x0065('0x4')];var EventEmitter=require('events')[_0x0065('0x5')];var utils=require(_0x0065('0x6'));var logger=require(_0x0065('0x7'))(_0x0065('0x8'));function EmailImap(_0x4c5262,_0x4bb70c){this[_0x0065('0x9')]=_0x0065('0xa');this[_0x0065('0xb')]=this['getAccount'](_0x4c5262,_0x4bb70c);this[_0x0065('0x1')]=new Imap(this[_0x0065('0xb')]);this[_0x0065('0x1')][_0x0065('0xc')](_0x0065('0xd'),this['handleReady'][_0x0065('0xe')](this));this[_0x0065('0x1')][_0x0065('0xc')](_0x0065('0xf'),this[_0x0065('0x10')][_0x0065('0xe')](this));this[_0x0065('0x1')]['on'](_0x0065('0x11'),this[_0x0065('0x12')]['bind'](this));this[_0x0065('0x1')][_0x0065('0x13')]();}util[_0x0065('0x14')](EmailImap,EventEmitter);EmailImap['prototype'][_0x0065('0x15')]=function(_0x5106eb,_0x48d7be){var _0x5db715={'connTimeout':_0x5106eb['connTimeout']?_0x5106eb[_0x0065('0x16')]*0x3e8:0x2710,'authTimeout':_0x5106eb[_0x0065('0x17')]?_0x5106eb[_0x0065('0x17')]*0x3e8:0x1388};if(_[_0x0065('0x18')](_0x5106eb[_0x0065('0x19')])){if(_0x5106eb['authentication']){_0x5db715['user']=_0x5106eb[_0x0065('0x1a')];_0x5db715[_0x0065('0x1b')]=_0x5106eb[_0x0065('0x1b')];}_0x5db715['host']=_0x5106eb[_0x0065('0x1c')];_0x5db715[_0x0065('0x1d')]=_0x5106eb['port']||0x3e1;if(_0x5106eb[_0x0065('0x1e')]){_0x5db715[_0x0065('0x1e')]=!![];}else{_0x5db715[_0x0065('0x1e')]=![];_0x5db715[_0x0065('0x1f')]='required';}}else{_0x5db715[_0x0065('0x1a')]=_0x5106eb[_0x0065('0x1a')];_0x5db715['password']=_0x5106eb['password'];_0x5db715[_0x0065('0x1c')]=utils[_0x0065('0x20')](_0x5106eb[_0x0065('0x19')]);_0x5db715[_0x0065('0x1d')]=0x3e1;_0x5db715[_0x0065('0x1e')]=!![];}_0x5db715['email']=_0x48d7be||_0x5106eb['user']||_0x0065('0x21');return _0x5db715;};EmailImap[_0x0065('0x22')][_0x0065('0x23')]=function(){this[_0x0065('0x1')][_0x0065('0x24')](this[_0x0065('0x9')],![],this[_0x0065('0x25')][_0x0065('0xe')](this));};EmailImap['prototype']['handleOpenBox']=function(_0xc01b7b,_0x4841dc){if(_0xc01b7b){this[_0x0065('0x12')](_0xc01b7b,!![]);}else{this[_0x0065('0x26')](_0x0065('0x27'),_0x4841dc);this[_0x0065('0x28')]();}};EmailImap[_0x0065('0x22')][_0x0065('0x29')]=function(_0x360d94){if(_0x360d94){this[_0x0065('0x12')](_0x360d94,!![]);}else{this[_0x0065('0x1')]['end']();}};EmailImap[_0x0065('0x22')]['readUnseen']=function(){this['imap']['search'](['UNSEEN'],this['handleReadUnseen'][_0x0065('0xe')](this));};EmailImap[_0x0065('0x22')]['handleReadUnseen']=function(_0xe56319,_0x121059){if(_0xe56319){this[_0x0065('0x12')](_0xe56319,!![]);}else{if(_0x121059[_0x0065('0x2a')]){try{var _0x1f0493=this[_0x0065('0x1')][_0x0065('0x2b')](_0x121059,{'bodies':'','markSeen':!![]});_0x1f0493['on'](_0x0065('0x2c'),this[_0x0065('0x2d')][_0x0065('0xe')](this));_0x1f0493['once']('error',this[_0x0065('0x2e')][_0x0065('0xe')](this));_0x1f0493[_0x0065('0xc')](_0x0065('0xf'),this['handleFetchEnd'][_0x0065('0xe')](this));}catch(_0x631c56){logger[_0x0065('0x11')](_0x631c56);}}else{this['imap'][_0x0065('0x2f')](!![],this['handleCloseBox']['bind'](this));}}};EmailImap[_0x0065('0x22')][_0x0065('0x2d')]=function(_0x16d26f,_0x220979){_0x16d26f['on'](_0x0065('0x30'),this[_0x0065('0x31')]['bind'](this));_0x16d26f[_0x0065('0xc')](_0x0065('0x32'),this[_0x0065('0x33')][_0x0065('0xe')](this));_0x16d26f[_0x0065('0xc')](_0x0065('0xf'),this[_0x0065('0x34')][_0x0065('0xe')](this));};EmailImap[_0x0065('0x22')][_0x0065('0x31')]=function(_0x4ae796,_0x204728){simpleParser(_0x4ae796,this['handleSimpleParser'][_0x0065('0xe')](this));};EmailImap[_0x0065('0x22')][_0x0065('0x33')]=function(_0x47f935){};EmailImap['prototype']['handleMessageEnd']=function(){};EmailImap['prototype'][_0x0065('0x35')]=function(_0x33f366,_0x1fa7de){if(_0x33f366){logger[_0x0065('0x11')](_0x33f366);}else{var _0xa54f3d=this;utils[_0x0065('0x36')](this[_0x0065('0xb')],_0x1fa7de,function(_0x443f9f){_0xa54f3d[_0x0065('0x26')](_0x0065('0x8'),_0x443f9f);});}};EmailImap[_0x0065('0x22')]['handleFetchEnd']=function(){this[_0x0065('0x1')][_0x0065('0x2f')](!![],this[_0x0065('0x29')][_0x0065('0xe')](this));};EmailImap[_0x0065('0x22')][_0x0065('0x2e')]=function(_0x25db6a){this[_0x0065('0x12')](_0x25db6a);this[_0x0065('0x1')]['closeBox'](!![],this[_0x0065('0x29')]['bind'](this));};EmailImap[_0x0065('0x22')][_0x0065('0x10')]=function(){this[_0x0065('0x26')](_0x0065('0xf'));};EmailImap[_0x0065('0x22')][_0x0065('0x12')]=function(_0x245e16,_0x529456){logger[_0x0065('0x11')]('handleError',this['account'][_0x0065('0x8')],JSON[_0x0065('0x37')](_0x245e16));var _0x31de93='';if(_0x245e16){if(_0x245e16[_0x0065('0x38')]){_0x31de93=_0x245e16['textCode'];}else{for(var _0x5f456c in _0x245e16){if(_0x245e16['hasOwnProperty'](_0x5f456c)){_0x31de93+=_[_0x0065('0x39')](_0x5f456c)+':\x20'+_0x245e16[_0x5f456c]+'\x0a';}}}}if(_0x529456){this[_0x0065('0x1')][_0x0065('0xf')]();}else{this[_0x0065('0x26')](_0x0065('0x11'),_0x31de93);this['emit'](_0x0065('0xf'));}};module[_0x0065('0x3a')]=EmailImap;
\ No newline at end of file
index c049c66..895925a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf88c=['send','createTransport','use','compile','toString','verify','Not\x20verifired','nodemailer','bluebird','nodemailer-plugin-inline-base64','prototype'];(function(_0x387f22,_0xcc7378){var _0x20f675=function(_0x5088b){while(--_0x5088b){_0x387f22['push'](_0x387f22['shift']());}};_0x20f675(++_0xcc7378);}(_0xf88c,0x1d5));var _0xcf88=function(_0x25a4fe,_0x13d4f3){_0x25a4fe=_0x25a4fe-0x0;var _0x104a90=_0xf88c[_0x25a4fe];return _0x104a90;};'use strict';var nodemailer=require(_0xcf88('0x0'));var BPromise=require(_0xcf88('0x1'));var inlineBase64=require(_0xcf88('0x2'));function EmailSmtp(){}EmailSmtp[_0xcf88('0x3')][_0xcf88('0x4')]=function(_0x4eb1cf,_0x56148f){return new BPromise(function(_0x5c2d2b,_0x16fe0e){var _0x3e0ade=nodemailer[_0xcf88('0x5')](_0x4eb1cf);_0x3e0ade[_0xcf88('0x6')](_0xcf88('0x7'),inlineBase64());_0x3e0ade['sendMail'](_0x56148f,function(_0x4d876a,_0x54be48){if(_0x4d876a){_0x16fe0e(_0x4d876a[_0xcf88('0x8')]());}else{_0x5c2d2b(_0x54be48);}});});};EmailSmtp['prototype'][_0xcf88('0x9')]=function(_0xafa90d){return new BPromise(function(_0x173647,_0x6e708b){var _0x18d460=nodemailer[_0xcf88('0x5')](_0xafa90d);_0x18d460[_0xcf88('0x9')](function(_0x375175,_0x5e191e){if(_0x375175){_0x6e708b(_0x375175['toString']());}else{if(_0x5e191e){_0x173647(_0x5e191e);}else{_0x6e708b(_0xcf88('0xa'));}}});});};module['exports']=EmailSmtp;
\ No newline at end of file
+var _0x5f27=['use','compile','sendMail','toString','verify','Not\x20verifired','exports','nodemailer','bluebird','nodemailer-plugin-inline-base64','prototype','send','createTransport'];(function(_0x25c151,_0x5df87a){var _0x19b175=function(_0x4e5d81){while(--_0x4e5d81){_0x25c151['push'](_0x25c151['shift']());}};_0x19b175(++_0x5df87a);}(_0x5f27,0x13f));var _0x75f2=function(_0x4c8db4,_0x19650d){_0x4c8db4=_0x4c8db4-0x0;var _0x14b087=_0x5f27[_0x4c8db4];return _0x14b087;};'use strict';var nodemailer=require(_0x75f2('0x0'));var BPromise=require(_0x75f2('0x1'));var inlineBase64=require(_0x75f2('0x2'));function EmailSmtp(){}EmailSmtp[_0x75f2('0x3')][_0x75f2('0x4')]=function(_0x214e9a,_0x1c2709){return new BPromise(function(_0x497cbf,_0x3a9cac){var _0x2f1972=nodemailer[_0x75f2('0x5')](_0x214e9a);_0x2f1972[_0x75f2('0x6')](_0x75f2('0x7'),inlineBase64());_0x2f1972[_0x75f2('0x8')](_0x1c2709,function(_0x3da43c,_0x10e64f){if(_0x3da43c){_0x3a9cac(_0x3da43c[_0x75f2('0x9')]());}else{_0x497cbf(_0x10e64f);}});});};EmailSmtp[_0x75f2('0x3')][_0x75f2('0xa')]=function(_0x1f04c7){return new BPromise(function(_0x39e598,_0x3309e4){var _0x4e3532=nodemailer[_0x75f2('0x5')](_0x1f04c7);_0x4e3532[_0x75f2('0xa')](function(_0x3bd98e,_0x5368ce){if(_0x3bd98e){_0x3309e4(_0x3bd98e[_0x75f2('0x9')]());}else{if(_0x5368ce){_0x39e598(_0x5368ce);}else{_0x3309e4(_0x75f2('0xb'));}}});});};module[_0x75f2('0xc')]=EmailSmtp;
\ No newline at end of file
index ee551d2..dacf702 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x1cc6=['html','test','replace','body','textAsHtml','<a\x20target=\x22_blank\x22\x20','message','originTo','includes','bcc','attach','attachments','type','attachment','attachment-','%s-%s','now','join','root','server/files/attachments/','writeFileSync','content','contentType','parser','from','format','YYYY-MM-DD\x20HH:mm:ss','filter','application/ms-tnef','info','Email\x20message\x20%s\x20is\x20in\x20TNEF\x20format:\x20message\x20content\x20will\x20be\x20converted\x20by\x20the\x20system','messageId','parseBuffer','first','BodyHTML','<p>Empty\x20message</p>','Attachments','push','Title','getHost','gmail','imap.gmail.com','hotmail','imap-mail.outlook.com','outlook365','outlook.office365.com','127.0.0.1','lodash','randomstring','path','util','../../../config/logger','email','../../../config/environment','head','value','address','anonymous','generate','@xcally.com','name','split','length','pop','isEmpty'];(function(_0x2641f6,_0x4ffe0f){var _0x5a9e71=function(_0x2acad2){while(--_0x2acad2){_0x2641f6['push'](_0x2641f6['shift']());}};_0x5a9e71(++_0x4ffe0f);}(_0x1cc6,0x174));var _0x61cc=function(_0x35fb56,_0x5dadff){_0x35fb56=_0x35fb56-0x0;var _0x2fd52c=_0x1cc6[_0x35fb56];return _0x2fd52c;};'use strict';var _=require(_0x61cc('0x0'));var moment=require('moment');var random=require(_0x61cc('0x1'));var fs=require('fs');var path=require(_0x61cc('0x2'));var util=require(_0x61cc('0x3'));var tnef=require('node-tnef');var logger=require(_0x61cc('0x4'))(_0x61cc('0x5'));var config=require(_0x61cc('0x6'));function getAddress(_0x4adf76){var _0x1d7e04=_[_0x61cc('0x7')](_0x4adf76[_0x61cc('0x8')]);return _0x1d7e04&&_0x1d7e04[_0x61cc('0x9')]?_0x1d7e04[_0x61cc('0x9')]:_0x61cc('0xa')+random[_0x61cc('0xb')](0x6)+_0x61cc('0xc');}function getFirstName(_0x2d2d6a){var _0x5591a2=_[_0x61cc('0x7')](_0x2d2d6a[_0x61cc('0x8')]);if(_0x5591a2&&_0x5591a2[_0x61cc('0xd')]){var _0x81b566=_0x5591a2['name'][_0x61cc('0xe')](/\s+/);return _0x81b566[_0x61cc('0xf')]?_0x81b566['slice'](0x0,-0x1)['join']('\x20'):_0x5591a2[_0x61cc('0xd')];}return'Anonymous';}function getLastName(_0x5705c3){var _0x2ee22f=_[_0x61cc('0x7')](_0x5705c3[_0x61cc('0x8')]);if(_0x2ee22f&&_0x2ee22f['name']){var _0x39d987=_0x2ee22f[_0x61cc('0xd')][_0x61cc('0xe')](/\s+/);return _0x39d987[_0x61cc('0xf')]>0x1?_0x39d987[_0x61cc('0x10')]():'';}return'';}function getMails(_0xdeae5c,_0x34124b){var _0x1cfb71='';for(var _0x3a8ac5=0x0;_0x3a8ac5<_0x34124b[_0x61cc('0x8')][_0x61cc('0xf')];_0x3a8ac5+=0x1){if(_0x34124b[_0x61cc('0x8')][_0x3a8ac5][_0x61cc('0x9')]!==_0xdeae5c){if(!_[_0x61cc('0x11')](_0x1cfb71)){_0x1cfb71+=',';}_0x1cfb71+=_0x34124b[_0x61cc('0x8')][_0x3a8ac5]['name']||_0x34124b[_0x61cc('0x8')][_0x3a8ac5][_0x61cc('0x9')]||'';_0x1cfb71+='\x20<';_0x1cfb71+=_0x34124b[_0x61cc('0x8')][_0x3a8ac5][_0x61cc('0x9')]?_0x34124b[_0x61cc('0x8')][_0x3a8ac5][_0x61cc('0x9')]:_0x61cc('0xa')+random[_0x61cc('0xb')](0x6)+_0x61cc('0xc');_0x1cfb71+='>';}}return _0x1cfb71;}function parseEmail(_0x3f97e0,_0x5a795a,_0x59cd04){if(_0x5a795a[_0x61cc('0x12')]){var _0x50e79b=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x50e79b[_0x61cc('0x13')](_0x5a795a[_0x61cc('0x12')])){_0x5a795a[_0x61cc('0x12')]=_0x5a795a['html'][_0x61cc('0x14')](_0x50e79b,'');}_0x59cd04[_0x61cc('0x15')]=_0x5a795a[_0x61cc('0x12')];}else{_0x59cd04[_0x61cc('0x15')]=_0x5a795a[_0x61cc('0x16')];}if(_0x59cd04[_0x61cc('0x15')]){_0x59cd04[_0x61cc('0x15')]=_0x59cd04[_0x61cc('0x15')]['replace'](/<a\s+/gi,_0x61cc('0x17'));}if(_0x5a795a['to']){_0x59cd04[_0x61cc('0x18')][_0x61cc('0x19')]=getMails(null,_0x5a795a['to']);var _0x56ce7b=getMails(_0x3f97e0['email'],_0x5a795a['to']);if(!_[_0x61cc('0x11')](_0x56ce7b)){_0x59cd04[_0x61cc('0x18')]['cc']+=_0x56ce7b;}}if(_0x5a795a['cc']){_0x59cd04[_0x61cc('0x18')]['originCc']=getMails(null,_0x5a795a['cc']);var _0x57a0d9=getMails(_0x3f97e0[_0x61cc('0x5')],_0x5a795a['cc']);if(!_['isEmpty'](_0x57a0d9)){if(!_[_0x61cc('0x11')](_0x59cd04[_0x61cc('0x18')]['cc'])){_0x59cd04[_0x61cc('0x18')]['cc']+=',';}_0x59cd04[_0x61cc('0x18')]['cc']+=_0x57a0d9;}}if(!_[_0x61cc('0x1a')](_0x59cd04[_0x61cc('0x18')][_0x61cc('0x19')],_0x3f97e0[_0x61cc('0x5')])&&!_['includes'](_0x59cd04[_0x61cc('0x18')]['originCc'],_0x3f97e0[_0x61cc('0x5')])){_0x59cd04[_0x61cc('0x18')][_0x61cc('0x1b')]=_0x3f97e0[_0x61cc('0x5')];}if(_0x5a795a['attachments']&&_0x5a795a['attachments']['length']){_0x59cd04[_0x61cc('0x18')][_0x61cc('0x1c')]=_0x5a795a[_0x61cc('0x1d')][_0x61cc('0xf')];for(var _0x262f39=0x0,_0xc26ada,_0x55fde9,_0x294b23;_0x262f39<_0x5a795a['attachments']['length'];_0x262f39+=0x1){if(_0x5a795a[_0x61cc('0x1d')][_0x262f39][_0x61cc('0x1e')]===_0x61cc('0x1f')){_0x294b23=_0x5a795a['attachments'][_0x262f39]['filename']||_0x61cc('0x20')+_0x262f39;_0xc26ada=util['format'](_0x61cc('0x21'),Date[_0x61cc('0x22')](),_0x294b23);_0x55fde9=path[_0x61cc('0x23')](config[_0x61cc('0x24')],_0x61cc('0x25'),_0xc26ada);fs[_0x61cc('0x26')](_0x55fde9,_0x5a795a['attachments'][_0x262f39][_0x61cc('0x27')]);_0x59cd04['message'][_0x61cc('0x1d')]['push']({'name':_0x294b23,'basename':_0xc26ada,'type':_0x5a795a['attachments'][_0x262f39][_0x61cc('0x28')],'filepath':_0x55fde9});}}}return _0x59cd04;}exports[_0x61cc('0x29')]=function(_0x1416e7,_0x1392ab,_0x2fe563){var _0x518203={'from':getAddress(_0x1392ab[_0x61cc('0x2a')]),'firstName':getFirstName(_0x1392ab[_0x61cc('0x2a')]),'lastName':getLastName(_0x1392ab[_0x61cc('0x2a')]),'mapKey':_0x61cc('0x5'),'message':{'from':getMails(_0x1416e7['email'],_0x1392ab[_0x61cc('0x2a')]),'to':_0x1416e7['email'],'cc':'','subject':_0x1392ab['subject']||'','messageId':_0x1392ab['messageId'],'inReplyTo':_0x1392ab['inReplyTo'],'sentAt':moment(_0x1392ab['date'])[_0x61cc('0x2b')](_0x61cc('0x2c')),'attach':![],'attachments':[]}};if(!_0x1392ab['html']&&!_0x1392ab[_0x61cc('0x16')]){var _0xca3966=_[_0x61cc('0x2d')](_0x1392ab[_0x61cc('0x1d')],{'contentType':_0x61cc('0x2e')});if(_0xca3966[_0x61cc('0xf')]){logger[_0x61cc('0x2f')](util[_0x61cc('0x2b')](_0x61cc('0x30'),_0x1392ab[_0x61cc('0x31')]));tnef[_0x61cc('0x32')](_[_0x61cc('0x33')](_0xca3966)[_0x61cc('0x27')],function(_0x3235fe,_0x3cd9e8){if(_0x3cd9e8){_0x1392ab[_0x61cc('0x12')]=_0x3cd9e8[_0x61cc('0x34')]||_0x61cc('0x35');if(_0x3cd9e8[_0x61cc('0x36')]){for(var _0x29224e=0x0;_0x29224e<_0x3cd9e8['Attachments'][_0x61cc('0xf')];_0x29224e++){var _0xab80af=_0x3cd9e8[_0x61cc('0x36')][_0x29224e];_0x518203[_0x61cc('0x18')][_0x61cc('0x1d')][_0x61cc('0x37')]({'filename':_0xab80af[_0x61cc('0x38')],'content':new Buffer(_0xab80af['Data'])});}}}_0x2fe563(parseEmail(_0x1416e7,_0x1392ab,_0x518203));});}else{_0x1392ab[_0x61cc('0x12')]='<p>Empty\x20message</p>';_0x2fe563(parseEmail(_0x1416e7,_0x1392ab,_0x518203));}}else{_0x2fe563(parseEmail(_0x1416e7,_0x1392ab,_0x518203));}};exports[_0x61cc('0x39')]=function(_0x411215){switch(_0x411215){case _0x61cc('0x3a'):return _0x61cc('0x3b');case'yahoo':return'imap.mail.yahoo.com';case _0x61cc('0x3c'):return _0x61cc('0x3d');case _0x61cc('0x3e'):return _0x61cc('0x3f');}return _0x61cc('0x40');};
\ No newline at end of file
+var _0xbe6c=['hotmail','imap-mail.outlook.com','outlook365','outlook.office365.com','127.0.0.1','lodash','moment','randomstring','path','util','node-tnef','../../../config/logger','email','../../../config/environment','address','anonymous','generate','@xcally.com','value','name','split','slice','join','Anonymous','head','length','test','html','replace','body','textAsHtml','message','originTo','isEmpty','originCc','includes','attachments','attachment','filename','attachment-','format','%s-%s','now','root','server/files/attachments/','writeFileSync','content','parser','from','subject','inReplyTo','YYYY-MM-DD\x20HH:mm:ss','application/ms-tnef','info','Email\x20message\x20%s\x20is\x20in\x20TNEF\x20format:\x20message\x20content\x20will\x20be\x20converted\x20by\x20the\x20system','messageId','parseBuffer','first','BodyHTML','Attachments','push','Title','Data','<p>Empty\x20message</p>','getHost','gmail','imap.mail.yahoo.com'];(function(_0x485b2c,_0x314dc2){var _0x13207a=function(_0x364515){while(--_0x364515){_0x485b2c['push'](_0x485b2c['shift']());}};_0x13207a(++_0x314dc2);}(_0xbe6c,0x8b));var _0xcbe6=function(_0x3d42d8,_0x4cffaa){_0x3d42d8=_0x3d42d8-0x0;var _0x27fc41=_0xbe6c[_0x3d42d8];return _0x27fc41;};'use strict';var _=require(_0xcbe6('0x0'));var moment=require(_0xcbe6('0x1'));var random=require(_0xcbe6('0x2'));var fs=require('fs');var path=require(_0xcbe6('0x3'));var util=require(_0xcbe6('0x4'));var tnef=require(_0xcbe6('0x5'));var logger=require(_0xcbe6('0x6'))(_0xcbe6('0x7'));var config=require(_0xcbe6('0x8'));function getAddress(_0x408e39){var _0x1fbb40=_['head'](_0x408e39['value']);return _0x1fbb40&&_0x1fbb40[_0xcbe6('0x9')]?_0x1fbb40[_0xcbe6('0x9')]:_0xcbe6('0xa')+random[_0xcbe6('0xb')](0x6)+_0xcbe6('0xc');}function getFirstName(_0x2d09c8){var _0x17a61a=_['head'](_0x2d09c8[_0xcbe6('0xd')]);if(_0x17a61a&&_0x17a61a[_0xcbe6('0xe')]){var _0x4fe515=_0x17a61a[_0xcbe6('0xe')][_0xcbe6('0xf')](/\s+/);return _0x4fe515['length']?_0x4fe515[_0xcbe6('0x10')](0x0,-0x1)[_0xcbe6('0x11')]('\x20'):_0x17a61a['name'];}return _0xcbe6('0x12');}function getLastName(_0xa128b){var _0x55353d=_[_0xcbe6('0x13')](_0xa128b[_0xcbe6('0xd')]);if(_0x55353d&&_0x55353d[_0xcbe6('0xe')]){var _0x279a69=_0x55353d[_0xcbe6('0xe')]['split'](/\s+/);return _0x279a69[_0xcbe6('0x14')]>0x1?_0x279a69['pop']():'';}return'';}function getMails(_0x3bed50,_0x595a76){var _0x3815fd='';for(var _0x1e7ee1=0x0;_0x1e7ee1<_0x595a76['value']['length'];_0x1e7ee1+=0x1){if(_0x595a76[_0xcbe6('0xd')][_0x1e7ee1][_0xcbe6('0x9')]!==_0x3bed50){if(!_['isEmpty'](_0x3815fd)){_0x3815fd+=',';}_0x3815fd+=_0x595a76['value'][_0x1e7ee1][_0xcbe6('0xe')]||_0x595a76['value'][_0x1e7ee1][_0xcbe6('0x9')]||'';_0x3815fd+='\x20<';_0x3815fd+=_0x595a76[_0xcbe6('0xd')][_0x1e7ee1]['address']?_0x595a76[_0xcbe6('0xd')][_0x1e7ee1][_0xcbe6('0x9')]:_0xcbe6('0xa')+random['generate'](0x6)+_0xcbe6('0xc');_0x3815fd+='>';}}return _0x3815fd;}function parseEmail(_0x51b0c5,_0x43e693,_0x8e864d){if(_0x43e693['html']){var _0x19e788=/<script\b[^<]*(?:(?!<\/script>)<[^<]*)*<\/script>/gi;while(_0x19e788[_0xcbe6('0x15')](_0x43e693[_0xcbe6('0x16')])){_0x43e693[_0xcbe6('0x16')]=_0x43e693['html'][_0xcbe6('0x17')](_0x19e788,'');}_0x8e864d[_0xcbe6('0x18')]=_0x43e693[_0xcbe6('0x16')];}else{_0x8e864d[_0xcbe6('0x18')]=_0x43e693[_0xcbe6('0x19')];}if(_0x8e864d['body']){_0x8e864d[_0xcbe6('0x18')]=_0x8e864d[_0xcbe6('0x18')][_0xcbe6('0x17')](/<a\s+/gi,'<a\x20target=\x22_blank\x22\x20');}if(_0x43e693['to']){_0x8e864d[_0xcbe6('0x1a')][_0xcbe6('0x1b')]=getMails(null,_0x43e693['to']);var _0x7ce86f=getMails(_0x51b0c5['email'],_0x43e693['to']);if(!_[_0xcbe6('0x1c')](_0x7ce86f)){_0x8e864d[_0xcbe6('0x1a')]['cc']+=_0x7ce86f;}}if(_0x43e693['cc']){_0x8e864d[_0xcbe6('0x1a')][_0xcbe6('0x1d')]=getMails(null,_0x43e693['cc']);var _0x50c23e=getMails(_0x51b0c5[_0xcbe6('0x7')],_0x43e693['cc']);if(!_[_0xcbe6('0x1c')](_0x50c23e)){if(!_[_0xcbe6('0x1c')](_0x8e864d[_0xcbe6('0x1a')]['cc'])){_0x8e864d[_0xcbe6('0x1a')]['cc']+=',';}_0x8e864d['message']['cc']+=_0x50c23e;}}if(!_[_0xcbe6('0x1e')](_0x8e864d[_0xcbe6('0x1a')][_0xcbe6('0x1b')],_0x51b0c5[_0xcbe6('0x7')])&&!_['includes'](_0x8e864d[_0xcbe6('0x1a')][_0xcbe6('0x1d')],_0x51b0c5[_0xcbe6('0x7')])){_0x8e864d[_0xcbe6('0x1a')]['bcc']=_0x51b0c5[_0xcbe6('0x7')];}if(_0x43e693['attachments']&&_0x43e693[_0xcbe6('0x1f')][_0xcbe6('0x14')]){_0x8e864d[_0xcbe6('0x1a')]['attach']=_0x43e693[_0xcbe6('0x1f')][_0xcbe6('0x14')];for(var _0x459853=0x0,_0x564d5d,_0x5e0c88,_0x684d4e;_0x459853<_0x43e693[_0xcbe6('0x1f')][_0xcbe6('0x14')];_0x459853+=0x1){if(_0x43e693['attachments'][_0x459853]['type']===_0xcbe6('0x20')){_0x684d4e=_0x43e693[_0xcbe6('0x1f')][_0x459853][_0xcbe6('0x21')]||_0xcbe6('0x22')+_0x459853;_0x564d5d=util[_0xcbe6('0x23')](_0xcbe6('0x24'),Date[_0xcbe6('0x25')](),_0x684d4e);_0x5e0c88=path[_0xcbe6('0x11')](config[_0xcbe6('0x26')],_0xcbe6('0x27'),_0x564d5d);fs[_0xcbe6('0x28')](_0x5e0c88,_0x43e693['attachments'][_0x459853][_0xcbe6('0x29')]);_0x8e864d['message'][_0xcbe6('0x1f')]['push']({'name':_0x684d4e,'basename':_0x564d5d,'type':_0x43e693['attachments'][_0x459853]['contentType'],'filepath':_0x5e0c88});}}}return _0x8e864d;}exports[_0xcbe6('0x2a')]=function(_0x44d178,_0x51ed25,_0x408fb6){var _0x4b2db4={'from':getAddress(_0x51ed25[_0xcbe6('0x2b')]),'firstName':getFirstName(_0x51ed25['from']),'lastName':getLastName(_0x51ed25[_0xcbe6('0x2b')]),'mapKey':_0xcbe6('0x7'),'message':{'from':getMails(_0x44d178[_0xcbe6('0x7')],_0x51ed25['from']),'to':_0x44d178[_0xcbe6('0x7')],'cc':'','subject':_0x51ed25[_0xcbe6('0x2c')]||'','messageId':_0x51ed25['messageId'],'inReplyTo':_0x51ed25[_0xcbe6('0x2d')],'sentAt':moment(_0x51ed25['date'])[_0xcbe6('0x23')](_0xcbe6('0x2e')),'attach':![],'attachments':[]}};if(!_0x51ed25[_0xcbe6('0x16')]&&!_0x51ed25[_0xcbe6('0x19')]){var _0x34ecec=_['filter'](_0x51ed25[_0xcbe6('0x1f')],{'contentType':_0xcbe6('0x2f')});if(_0x34ecec[_0xcbe6('0x14')]){logger[_0xcbe6('0x30')](util['format'](_0xcbe6('0x31'),_0x51ed25[_0xcbe6('0x32')]));tnef[_0xcbe6('0x33')](_[_0xcbe6('0x34')](_0x34ecec)[_0xcbe6('0x29')],function(_0x444763,_0x18bbd7){if(_0x18bbd7){_0x51ed25[_0xcbe6('0x16')]=_0x18bbd7[_0xcbe6('0x35')]||'<p>Empty\x20message</p>';if(_0x18bbd7[_0xcbe6('0x36')]){for(var _0x56f1cf=0x0;_0x56f1cf<_0x18bbd7[_0xcbe6('0x36')]['length'];_0x56f1cf++){var _0x5389a5=_0x18bbd7['Attachments'][_0x56f1cf];_0x4b2db4[_0xcbe6('0x1a')]['attachments'][_0xcbe6('0x37')]({'filename':_0x5389a5[_0xcbe6('0x38')],'content':new Buffer(_0x5389a5[_0xcbe6('0x39')])});}}}_0x408fb6(parseEmail(_0x44d178,_0x51ed25,_0x4b2db4));});}else{_0x51ed25['html']=_0xcbe6('0x3a');_0x408fb6(parseEmail(_0x44d178,_0x51ed25,_0x4b2db4));}}else{_0x408fb6(parseEmail(_0x44d178,_0x51ed25,_0x4b2db4));}};exports[_0xcbe6('0x3b')]=function(_0x323d53){switch(_0x323d53){case _0xcbe6('0x3c'):return'imap.gmail.com';case'yahoo':return _0xcbe6('0x3d');case _0xcbe6('0x3e'):return _0xcbe6('0x3f');case _0xcbe6('0x40'):return _0xcbe6('0x41');}return _0xcbe6('0x42');};
\ No newline at end of file
index 8589f0c..6ea1dc0 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbb6f=['lodash','name','Service','key','active','Imap','Smtp'];(function(_0x53270b,_0x244a9f){var _0x1860ba=function(_0x5c5337){while(--_0x5c5337){_0x53270b['push'](_0x53270b['shift']());}};_0x1860ba(++_0x244a9f);}(_0xbb6f,0x15e));var _0xfbb6=function(_0x93968a,_0x3f3bad){_0x93968a=_0x93968a-0x0;var _0x3c565a=_0xbb6f[_0x93968a];return _0x3c565a;};'use strict';var _=require(_0xfbb6('0x0'));function MailAccount(_0xb5e45c){this['id']=_0xb5e45c['id']||0x0;this[_0xfbb6('0x1')]=_0xb5e45c[_0xfbb6('0x1')]||_0xfbb6('0x2');this[_0xfbb6('0x3')]=_0xb5e45c[_0xfbb6('0x3')]||'SERV';this[_0xfbb6('0x4')]=_0xb5e45c['active']||![];this[_0xfbb6('0x5')]=_0xb5e45c['Imap']||[];this[_0xfbb6('0x6')]=_0xb5e45c[_0xfbb6('0x6')]||[];}module['exports']=MailAccount;
\ No newline at end of file
+var _0x318e=['Smtp','exports','lodash','Service','key','Imap'];(function(_0x18e52b,_0x1fae35){var _0x3d3062=function(_0x133b14){while(--_0x133b14){_0x18e52b['push'](_0x18e52b['shift']());}};_0x3d3062(++_0x1fae35);}(_0x318e,0xc8));var _0xe318=function(_0x42f70c,_0x233249){_0x42f70c=_0x42f70c-0x0;var _0x371b97=_0x318e[_0x42f70c];return _0x371b97;};'use strict';var _=require(_0xe318('0x0'));function MailAccount(_0x4f284d){this['id']=_0x4f284d['id']||0x0;this['name']=_0x4f284d['name']||_0xe318('0x1');this[_0xe318('0x2')]=_0x4f284d['key']||'SERV';this['active']=_0x4f284d['active']||![];this[_0xe318('0x3')]=_0x4f284d[_0xe318('0x3')]||[];this['Smtp']=_0x4f284d[_0xe318('0x4')]||[];}module[_0xe318('0x5')]=MailAccount;
\ No newline at end of file
index 926dc71..45f9a53 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x68b3=['prototype','mergeFromDatabase','initMailAccounts','isUndefined','lodash','../model/mailAccount','mailAccounts','mapKeys','hasOwnProperty'];(function(_0x2a5aba,_0x31b961){var _0x3e8a70=function(_0x1f9b84){while(--_0x1f9b84){_0x2a5aba['push'](_0x2a5aba['shift']());}};_0x3e8a70(++_0x31b961);}(_0x68b3,0x1d8));var _0x368b=function(_0x338746,_0x2d292b){_0x338746=_0x338746-0x0;var _0x6e8020=_0x68b3[_0x338746];return _0x6e8020;};'use strict';var _=require(_0x368b('0x0'));var MailAccount=require(_0x368b('0x1'));var Realtime=function(){this[_0x368b('0x2')]={};};function freeIsNotKey(_0xa371c,_0x2d2762,_0x4a9da6){var _0x208c48=_[_0x368b('0x3')](_0xa371c,function(_0xc40116,_0x404282){return _0xc40116[_0x4a9da6];});for(var _0x5d68cb in _0x2d2762){if(_0x2d2762[_0x368b('0x4')](_0x5d68cb)){if(!_0x208c48[_0x5d68cb]){delete _0x2d2762[_0x5d68cb];}}}}Realtime[_0x368b('0x5')][_0x368b('0x6')]=function(_0x23584a,_0x4406c8){for(var _0x127c1e in _0x4406c8){if(_0x23584a[_0x368b('0x4')](_0x127c1e)){_0x23584a[_0x127c1e]=_0x4406c8[_0x127c1e];}}};Realtime[_0x368b('0x5')][_0x368b('0x7')]=function(){var _0x1f64d8=this;return function(_0x2a7b9f){if(_0x2a7b9f){freeIsNotKey(_0x2a7b9f,_0x1f64d8['mailAccounts'],'id');for(var _0x160e12=0x0,_0xdbd344={},_0x34a110={};_0x160e12<_0x2a7b9f['length'];_0x160e12+=0x1){_0xdbd344=_0x2a7b9f[_0x160e12];if(_[_0x368b('0x8')](_0x1f64d8[_0x368b('0x2')][_0xdbd344['id']])){_0x1f64d8[_0x368b('0x2')][_0xdbd344['id']]=new MailAccount(_0xdbd344);}else{_['merge'](_0x1f64d8[_0x368b('0x2')][_0xdbd344['id']],_0xdbd344);}}}return _0x1f64d8[_0x368b('0x2')];};};module['exports']=Realtime;
\ No newline at end of file
+var _0xdb28=['merge','exports','lodash','../model/mailAccount','mailAccounts','mapKeys','hasOwnProperty','prototype','initMailAccounts','isUndefined'];(function(_0x6c993a,_0x5ea3ab){var _0x27f547=function(_0x22df20){while(--_0x22df20){_0x6c993a['push'](_0x6c993a['shift']());}};_0x27f547(++_0x5ea3ab);}(_0xdb28,0x106));var _0x8db2=function(_0x33f58c,_0x2e9424){_0x33f58c=_0x33f58c-0x0;var _0x18a6c8=_0xdb28[_0x33f58c];return _0x18a6c8;};'use strict';var _=require(_0x8db2('0x0'));var MailAccount=require(_0x8db2('0x1'));var Realtime=function(){this[_0x8db2('0x2')]={};};function freeIsNotKey(_0xf66e59,_0x585da1,_0x1f4c45){var _0x11c26d=_[_0x8db2('0x3')](_0xf66e59,function(_0x4426fe,_0x11109e){return _0x4426fe[_0x1f4c45];});for(var _0x52bf99 in _0x585da1){if(_0x585da1[_0x8db2('0x4')](_0x52bf99)){if(!_0x11c26d[_0x52bf99]){delete _0x585da1[_0x52bf99];}}}}Realtime[_0x8db2('0x5')]['mergeFromDatabase']=function(_0x494b40,_0x477f50){for(var _0x46932f in _0x477f50){if(_0x494b40[_0x8db2('0x4')](_0x46932f)){_0x494b40[_0x46932f]=_0x477f50[_0x46932f];}}};Realtime[_0x8db2('0x5')][_0x8db2('0x6')]=function(){var _0x1ff362=this;return function(_0x126c78){if(_0x126c78){freeIsNotKey(_0x126c78,_0x1ff362['mailAccounts'],'id');for(var _0x30dc90=0x0,_0x476216={},_0x1f62af={};_0x30dc90<_0x126c78['length'];_0x30dc90+=0x1){_0x476216=_0x126c78[_0x30dc90];if(_[_0x8db2('0x7')](_0x1ff362[_0x8db2('0x2')][_0x476216['id']])){_0x1ff362['mailAccounts'][_0x476216['id']]=new MailAccount(_0x476216);}else{_[_0x8db2('0x8')](_0x1ff362[_0x8db2('0x2')][_0x476216['id']],_0x476216);}}}return _0x1ff362[_0x8db2('0x2')];};};module[_0x8db2('0x9')]=Realtime;
\ No newline at end of file
index cfbe1ca..0d2b403 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeb54=['getMailAccounts','Request','GetMailAccount','name','service','active','key','ListId','TemplateId','MailServerIn','Imap','Smtp','getMailAccount','notify','NotifyMailAccount','../client'];(function(_0x3efe0e,_0x191688){var _0x4c3fee=function(_0x5ddef6){while(--_0x5ddef6){_0x3efe0e['push'](_0x3efe0e['shift']());}};_0x4c3fee(++_0x191688);}(_0xeb54,0x13f));var _0x4eb5=function(_0x1b7721,_0x4abafe){_0x1b7721=_0x1b7721-0x0;var _0x123bc1=_0xeb54[_0x1b7721];return _0x123bc1;};'use strict';var client=require(_0x4eb5('0x0'));exports[_0x4eb5('0x1')]=function(){return function(){return client[_0x4eb5('0x2')](_0x4eb5('0x3'),{'options':{'attributes':['id',_0x4eb5('0x4'),_0x4eb5('0x5'),'email',_0x4eb5('0x6'),_0x4eb5('0x7'),_0x4eb5('0x8'),_0x4eb5('0x9')],'raw':![],'include':[{'model':_0x4eb5('0xa'),'as':_0x4eb5('0xb')},{'model':'MailServerOut','as':_0x4eb5('0xc')}]},'log':_0x4eb5('0xd')});};};exports[_0x4eb5('0xe')]=function(_0x51e016,_0xb974d3){return client[_0x4eb5('0x2')](_0x4eb5('0xf'),{'account':{'id':_0x51e016},'body':_0xb974d3,'log':_0x4eb5('0xf')});};
\ No newline at end of file
+var _0x75f3=['MailServerIn','Imap','Smtp','notify','NotifyMailAccount','getMailAccounts','Request','name','email','key','ListId','TemplateId'];(function(_0x13d2d4,_0x1d142b){var _0x3ec793=function(_0x4593f4){while(--_0x4593f4){_0x13d2d4['push'](_0x13d2d4['shift']());}};_0x3ec793(++_0x1d142b);}(_0x75f3,0xc5));var _0x375f=function(_0x4cf0b7,_0x560029){_0x4cf0b7=_0x4cf0b7-0x0;var _0x545f10=_0x75f3[_0x4cf0b7];return _0x545f10;};'use strict';var client=require('../client');exports[_0x375f('0x0')]=function(){return function(){return client[_0x375f('0x1')]('GetMailAccount',{'options':{'attributes':['id',_0x375f('0x2'),'service',_0x375f('0x3'),'active',_0x375f('0x4'),_0x375f('0x5'),_0x375f('0x6')],'raw':![],'include':[{'model':_0x375f('0x7'),'as':_0x375f('0x8')},{'model':'MailServerOut','as':_0x375f('0x9')}]},'log':'getMailAccount'});};};exports[_0x375f('0xa')]=function(_0x461250,_0x6d8109){return client['Request'](_0x375f('0xb'),{'account':{'id':_0x461250},'body':_0x6d8109,'log':_0x375f('0xb')});};
\ No newline at end of file
index 737a9be..587ed71 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f9b=['bluebird','lodash','../../../config/logger','email','listen','sendMail','account','then','catch','error','verifySmtp','values','mailAccounts','length','Imap','password','Smtp','pass','stringify','log','RPC\x20listening\x20on\x20port:','jayson/promise'];(function(_0x1e17eb,_0x2e15c5){var _0x4de4c7=function(_0x52d003){while(--_0x52d003){_0x1e17eb['push'](_0x1e17eb['shift']());}};_0x4de4c7(++_0x2e15c5);}(_0x4f9b,0x6d));var _0xb4f9=function(_0x34ac3a,_0x5ae941){_0x34ac3a=_0x34ac3a-0x0;var _0x2a21c5=_0x4f9b[_0x34ac3a];return _0x2a21c5;};'use strict';var jayson=require(_0xb4f9('0x0'));var BPromise=require(_0xb4f9('0x1'));var _=require(_0xb4f9('0x2'));var logger=require(_0xb4f9('0x3'))(_0xb4f9('0x4'));exports[_0xb4f9('0x5')]=function(_0x3ff56d,_0x2fafe5){return new BPromise(function(_0x5276a3,_0x59803f){var _0x572714={'SendMail':function(_0x25947a){var _0x38c813=this;return new Promise(function(_0x2fa71b,_0x4e8f3c){_0x2fafe5[_0xb4f9('0x6')](_0x25947a[_0xb4f9('0x7')],_0x25947a['message'])[_0xb4f9('0x8')](function(_0x439f66){_0x2fa71b({'code':0xc8,'message':_0x439f66});})[_0xb4f9('0x9')](function(_0x4a9df3){_0x4e8f3c(_0x38c813[_0xb4f9('0xa')](0x1f4,_0x4a9df3));});});},'VerifySmtp':function(_0x544209){var _0x2ee1b5=this;return new Promise(function(_0x398e64,_0xa19014){_0x2fafe5[_0xb4f9('0xb')](_0x544209[_0xb4f9('0x7')])[_0xb4f9('0x8')](function(_0x191882){_0x398e64({'code':0xc8,'message':'Verified'});})[_0xb4f9('0x9')](function(_0x4475e4){_0xa19014(_0x2ee1b5[_0xb4f9('0xa')](0x1f4,_0x4475e4));});});},'MailAccounts':function(_0x4927d9){return new Promise(function(_0x5819d5,_0x1aaff5){var _0x3d8bac=_[_0xb4f9('0xc')](_0x3ff56d[_0xb4f9('0xd')]);for(var _0x25b8d9=0x0;_0x25b8d9<_0x3d8bac[_0xb4f9('0xe')];_0x25b8d9+=0x1){if(_0x3d8bac[_0x25b8d9][_0xb4f9('0xf')]&&_0x3d8bac[_0x25b8d9][_0xb4f9('0xf')][_0xb4f9('0x10')]){delete _0x3d8bac[_0x25b8d9][_0xb4f9('0xf')][_0xb4f9('0x10')];}if(_0x3d8bac[_0x25b8d9][_0xb4f9('0x11')]&&_0x3d8bac[_0x25b8d9]['Smtp'][_0xb4f9('0x12')]){delete _0x3d8bac[_0x25b8d9][_0xb4f9('0x11')][_0xb4f9('0x12')];}}_0x5819d5({'count':_0x3d8bac[_0xb4f9('0xe')],'rows':_0x3d8bac});});}};var _0x53a012=jayson['server'](_0x572714)['http']();_0x53a012['on']('error',function(_0x468203){logger['error'](JSON[_0xb4f9('0x13')](_0x468203));return _0x59803f(_0x468203);});_0x53a012[_0xb4f9('0x5')](0x232b,'127.0.0.1',function(){console[_0xb4f9('0x14')]('Email\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!',0x232b);return _0x5276a3(_0xb4f9('0x15')+0x232b);});});};
\ No newline at end of file
+var _0x06ef=['length','Imap','password','Smtp','pass','server','http','stringify','listen','Email\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','then','catch','error','verifySmtp','account','Verified'];(function(_0x17d314,_0x4c6cc8){var _0x58e7d3=function(_0x33a2c3){while(--_0x33a2c3){_0x17d314['push'](_0x17d314['shift']());}};_0x58e7d3(++_0x4c6cc8);}(_0x06ef,0x185));var _0xf06e=function(_0x22ee03,_0x28e523){_0x22ee03=_0x22ee03-0x0;var _0x4772b7=_0x06ef[_0x22ee03];return _0x4772b7;};'use strict';var jayson=require('jayson/promise');var BPromise=require('bluebird');var _=require(_0xf06e('0x0'));var logger=require('../../../config/logger')('email');exports['listen']=function(_0x57d08f,_0x404485){return new BPromise(function(_0x1281ca,_0x16d4da){var _0x569390={'SendMail':function(_0x1ddeff){var _0x71a36=this;return new Promise(function(_0x4be428,_0x59b74b){_0x404485['sendMail'](_0x1ddeff['account'],_0x1ddeff['message'])[_0xf06e('0x1')](function(_0x3ee37d){_0x4be428({'code':0xc8,'message':_0x3ee37d});})[_0xf06e('0x2')](function(_0x2bb08c){_0x59b74b(_0x71a36[_0xf06e('0x3')](0x1f4,_0x2bb08c));});});},'VerifySmtp':function(_0x5e594e){var _0x1fe49b=this;return new Promise(function(_0x3a33c1,_0x4e3591){_0x404485[_0xf06e('0x4')](_0x5e594e[_0xf06e('0x5')])[_0xf06e('0x1')](function(_0x400af5){_0x3a33c1({'code':0xc8,'message':_0xf06e('0x6')});})[_0xf06e('0x2')](function(_0x49fe5d){_0x4e3591(_0x1fe49b[_0xf06e('0x3')](0x1f4,_0x49fe5d));});});},'MailAccounts':function(_0x2578e4){return new Promise(function(_0x5c36b3,_0x1510a0){var _0x17ea4f=_['values'](_0x57d08f['mailAccounts']);for(var _0x5c862b=0x0;_0x5c862b<_0x17ea4f[_0xf06e('0x7')];_0x5c862b+=0x1){if(_0x17ea4f[_0x5c862b][_0xf06e('0x8')]&&_0x17ea4f[_0x5c862b][_0xf06e('0x8')]['password']){delete _0x17ea4f[_0x5c862b][_0xf06e('0x8')][_0xf06e('0x9')];}if(_0x17ea4f[_0x5c862b][_0xf06e('0xa')]&&_0x17ea4f[_0x5c862b][_0xf06e('0xa')][_0xf06e('0xb')]){delete _0x17ea4f[_0x5c862b][_0xf06e('0xa')][_0xf06e('0xb')];}}_0x5c36b3({'count':_0x17ea4f['length'],'rows':_0x17ea4f});});}};var _0x380c07=jayson[_0xf06e('0xc')](_0x569390)[_0xf06e('0xd')]();_0x380c07['on'](_0xf06e('0x3'),function(_0x5c1a80){logger['error'](JSON[_0xf06e('0xe')](_0x5c1a80));return _0x16d4da(_0x5c1a80);});_0x380c07[_0xf06e('0xf')](0x232b,'127.0.0.1',function(){console['log'](_0xf06e('0x10'),0x232b);return _0x1281ca(_0xf06e('0x11')+0x232b);});});};
\ No newline at end of file
index be1cea8..cb17229 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x22fb=['../../config/express','../../routes','log','express','ioredis','../../config/environment','createServer','timeout','listen','socket.io','websocket','polling','redis','defaults','adapter','socket.io-redis','../../config/triggers','default','../../config/socketio'];(function(_0x76f666,_0x196f96){var _0x2c7920=function(_0x3ff080){while(--_0x3ff080){_0x76f666['push'](_0x76f666['shift']());}};_0x2c7920(++_0x196f96);}(_0x22fb,0x192));var _0xb22f=function(_0x4a523c,_0x523265){_0x4a523c=_0x4a523c-0x0;var _0x5307e6=_0x22fb[_0x4a523c];return _0x5307e6;};'use strict';var _=require('lodash');var http=require('http');var express=require(_0xb22f('0x0'));var sticky=require('sticky-session');var Redis=require(_0xb22f('0x1'));var config=require(_0xb22f('0x2'));var app=express();var server=http[_0xb22f('0x3')](app);server[_0xb22f('0x4')]=0xdbba0;if(sticky[_0xb22f('0x5')](server,config['port'])){var socketio=require(_0xb22f('0x6'))(server,{'transports':[_0xb22f('0x7'),_0xb22f('0x8')]});config[_0xb22f('0x9')]=_[_0xb22f('0xa')](config[_0xb22f('0x9')],{'host':'localhost','port':0x18eb});socketio[_0xb22f('0xb')](require(_0xb22f('0xc'))({'pubClient':new Redis(config[_0xb22f('0x9')]),'subClient':new Redis(config[_0xb22f('0x9')])}));require(_0xb22f('0xd'))[_0xb22f('0xe')]();require(_0xb22f('0xf'))[_0xb22f('0xe')](socketio);require(_0xb22f('0x10'))[_0xb22f('0xe')](app);require(_0xb22f('0x11'))['default'](app);}else{server['once']('listening',function(){console[_0xb22f('0x12')]('Express\x20server\x20listening\x20on\x20port\x20%d!',config['port']);});}exports=module['exports']=app;
\ No newline at end of file
+var _0xfe57=['localhost','socket.io-redis','../../config/triggers','default','../../config/express','../../routes','listening','log','Express\x20server\x20listening\x20on\x20port\x20%d!','lodash','http','ioredis','../../config/environment','createServer','timeout','listen','port','socket.io','websocket','polling','redis','defaults'];(function(_0x5ee7c7,_0x16bdf6){var _0x3326c5=function(_0x2b4b08){while(--_0x2b4b08){_0x5ee7c7['push'](_0x5ee7c7['shift']());}};_0x3326c5(++_0x16bdf6);}(_0xfe57,0x195));var _0x7fe5=function(_0x1d1779,_0x284147){_0x1d1779=_0x1d1779-0x0;var _0x2377e9=_0xfe57[_0x1d1779];return _0x2377e9;};'use strict';var _=require(_0x7fe5('0x0'));var http=require(_0x7fe5('0x1'));var express=require('express');var sticky=require('sticky-session');var Redis=require(_0x7fe5('0x2'));var config=require(_0x7fe5('0x3'));var app=express();var server=http[_0x7fe5('0x4')](app);server[_0x7fe5('0x5')]=0xdbba0;if(sticky[_0x7fe5('0x6')](server,config[_0x7fe5('0x7')])){var socketio=require(_0x7fe5('0x8'))(server,{'transports':[_0x7fe5('0x9'),_0x7fe5('0xa')]});config[_0x7fe5('0xb')]=_[_0x7fe5('0xc')](config[_0x7fe5('0xb')],{'host':_0x7fe5('0xd'),'port':0x18eb});socketio['adapter'](require(_0x7fe5('0xe'))({'pubClient':new Redis(config['redis']),'subClient':new Redis(config[_0x7fe5('0xb')])}));require(_0x7fe5('0xf'))['default']();require('../../config/socketio')[_0x7fe5('0x10')](socketio);require(_0x7fe5('0x11'))['default'](app);require(_0x7fe5('0x12'))['default'](app);}else{server['once'](_0x7fe5('0x13'),function(){console[_0x7fe5('0x14')](_0x7fe5('0x15'),config[_0x7fe5('0x7')]);});}exports=module['exports']=app;
\ No newline at end of file
index 24b0ff9..f4f515f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xcb81=['jayson/promise','bluebird','routing','request','debug','error','message','result','catch','rpc'];(function(_0x482fb5,_0x37dec5){var _0x35c82a=function(_0xd75cfa){while(--_0xd75cfa){_0x482fb5['push'](_0x482fb5['shift']());}};_0x35c82a(++_0x37dec5);}(_0xcb81,0x154));var _0x1cb8=function(_0x53bcc3,_0x364374){_0x53bcc3=_0x53bcc3-0x0;var _0x47c959=_0xcb81[_0x53bcc3];return _0x47c959;};'use strict';var jayson=require(_0x1cb8('0x0'));var BPromise=require(_0x1cb8('0x1'));var logger=require('../../config/logger')(_0x1cb8('0x2'));var client=jayson['client']['http']({'port':0x2329});client['Request']=function(_0x38c3ea,_0x33a8f2){return new BPromise(function(_0x237e94,_0x3642b9){return client[_0x1cb8('0x3')](_0x38c3ea,_0x33a8f2)['then'](function(_0x98d682){logger[_0x1cb8('0x4')]('rpc',_0x1cb8('0x2'),_0x38c3ea,_0x33a8f2,_0x98d682);if(_0x98d682[_0x1cb8('0x5')]){logger[_0x1cb8('0x5')]('rpc',_0x1cb8('0x2'),_0x38c3ea,_0x98d682['error']['message'],_0x33a8f2);return _0x3642b9(_0x98d682[_0x1cb8('0x5')][_0x1cb8('0x6')]);}else{return _0x237e94(_0x98d682[_0x1cb8('0x7')]);}})[_0x1cb8('0x8')](function(_0x267dde){logger[_0x1cb8('0x5')](_0x1cb8('0x9'),_0x1cb8('0x2'),_0x38c3ea,_0x267dde,_0x33a8f2);return _0x3642b9(_0x267dde);});});};module['exports']=client;
\ No newline at end of file
+var _0xea89=['catch','exports','jayson/promise','bluebird','../../config/logger','routing','client','Request','request','then','debug','rpc','error','message','result'];(function(_0x3978f4,_0x2362c6){var _0x553c40=function(_0x50b1fa){while(--_0x50b1fa){_0x3978f4['push'](_0x3978f4['shift']());}};_0x553c40(++_0x2362c6);}(_0xea89,0x1e2));var _0x9ea8=function(_0x5b8608,_0x527731){_0x5b8608=_0x5b8608-0x0;var _0x3f8d3d=_0xea89[_0x5b8608];return _0x3f8d3d;};'use strict';var jayson=require(_0x9ea8('0x0'));var BPromise=require(_0x9ea8('0x1'));var logger=require(_0x9ea8('0x2'))(_0x9ea8('0x3'));var client=jayson[_0x9ea8('0x4')]['http']({'port':0x2329});client[_0x9ea8('0x5')]=function(_0x520915,_0x226d05){return new BPromise(function(_0x5af295,_0x44f1cc){return client[_0x9ea8('0x6')](_0x520915,_0x226d05)[_0x9ea8('0x7')](function(_0x184f38){logger[_0x9ea8('0x8')](_0x9ea8('0x9'),_0x9ea8('0x3'),_0x520915,_0x226d05,_0x184f38);if(_0x184f38['error']){logger[_0x9ea8('0xa')](_0x9ea8('0x9'),'routing',_0x520915,_0x184f38[_0x9ea8('0xa')][_0x9ea8('0xb')],_0x226d05);return _0x44f1cc(_0x184f38[_0x9ea8('0xa')]['message']);}else{return _0x5af295(_0x184f38[_0x9ea8('0xc')]);}})[_0x9ea8('0xd')](function(_0xe888c6){logger[_0x9ea8('0xa')](_0x9ea8('0x9'),_0x9ea8('0x3'),_0x520915,_0xe888c6,_0x226d05);return _0x44f1cc(_0xe888c6);});});};module[_0x9ea8('0xe')]=client;
\ No newline at end of file
index 988002b..ffaadd3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xca0f=['./rpc/faxQueue','resolve','then','getAgents','initAgents','getIntervals','initIntervals','getOpenchannelQueues','initOpenchannelQueues','getChatQueues','initChatQueues','getSmsQueues','initSmsQueues','getMailQueues','initMailQueues','getFaxQueues','listen','catch','log','bluebird','./server','./realtime','./rpc/user','./rpc/interval','./rpc/openchannelQueue','./rpc/chatQueue','./rpc/smsQueue'];(function(_0x178e48,_0x3c9509){var _0x440d7e=function(_0xc2f8a0){while(--_0xc2f8a0){_0x178e48['push'](_0x178e48['shift']());}};_0x440d7e(++_0x3c9509);}(_0xca0f,0x13c));var _0xfca0=function(_0x5d1fb0,_0x411156){_0x5d1fb0=_0x5d1fb0-0x0;var _0x1c7da0=_0xca0f[_0x5d1fb0];return _0x1c7da0;};'use strict';var BPromise=require(_0xfca0('0x0'));var server=require(_0xfca0('0x1'));var Realtime=require(_0xfca0('0x2'));var user=require(_0xfca0('0x3'));var interval=require(_0xfca0('0x4'));var openchannelQueue=require(_0xfca0('0x5'));var chatQueue=require(_0xfca0('0x6'));var smsQueue=require(_0xfca0('0x7'));var mailQueue=require('./rpc/mailQueue');var faxQueue=require(_0xfca0('0x8'));var realtime=new Realtime();function initRealtime(){return BPromise[_0xfca0('0x9')]()[_0xfca0('0xa')](user[_0xfca0('0xb')]())['then'](realtime[_0xfca0('0xc')]())[_0xfca0('0xa')](interval[_0xfca0('0xd')]())[_0xfca0('0xa')](realtime[_0xfca0('0xe')]())['then'](openchannelQueue[_0xfca0('0xf')]())[_0xfca0('0xa')](realtime[_0xfca0('0x10')]())['then'](chatQueue[_0xfca0('0x11')]())['then'](realtime[_0xfca0('0x12')]())[_0xfca0('0xa')](smsQueue[_0xfca0('0x13')]())[_0xfca0('0xa')](realtime[_0xfca0('0x14')]())[_0xfca0('0xa')](mailQueue[_0xfca0('0x15')]())[_0xfca0('0xa')](realtime[_0xfca0('0x16')]())[_0xfca0('0xa')](faxQueue[_0xfca0('0x17')]())['then'](realtime['initFaxQueues']())['then'](function(){return realtime;});}function main(){return server[_0xfca0('0x18')](realtime)['then'](function(_0x5d8228){return initRealtime();})[_0xfca0('0xa')](function(_0x25c366){return setInterval(initRealtime,0x1388);})[_0xfca0('0x19')](function(_0x4bda9f){console[_0xfca0('0x1a')](_0x4bda9f);});}main();
\ No newline at end of file
+var _0x0202=['./rpc/openchannelQueue','./rpc/smsQueue','./rpc/faxQueue','then','getAgents','initAgents','getIntervals','initIntervals','getOpenchannelQueues','initOpenchannelQueues','initChatQueues','getSmsQueues','getMailQueues','getFaxQueues','initFaxQueues','listen','catch','log','bluebird','./server','./realtime','./rpc/interval'];(function(_0x5d9191,_0x45890e){var _0x10a219=function(_0x461a81){while(--_0x461a81){_0x5d9191['push'](_0x5d9191['shift']());}};_0x10a219(++_0x45890e);}(_0x0202,0xc2));var _0x2020=function(_0x3349c1,_0x16e74e){_0x3349c1=_0x3349c1-0x0;var _0x2fb87f=_0x0202[_0x3349c1];return _0x2fb87f;};'use strict';var BPromise=require(_0x2020('0x0'));var server=require(_0x2020('0x1'));var Realtime=require(_0x2020('0x2'));var user=require('./rpc/user');var interval=require(_0x2020('0x3'));var openchannelQueue=require(_0x2020('0x4'));var chatQueue=require('./rpc/chatQueue');var smsQueue=require(_0x2020('0x5'));var mailQueue=require('./rpc/mailQueue');var faxQueue=require(_0x2020('0x6'));var realtime=new Realtime();function initRealtime(){return BPromise['resolve']()[_0x2020('0x7')](user[_0x2020('0x8')]())[_0x2020('0x7')](realtime[_0x2020('0x9')]())[_0x2020('0x7')](interval[_0x2020('0xa')]())[_0x2020('0x7')](realtime[_0x2020('0xb')]())[_0x2020('0x7')](openchannelQueue[_0x2020('0xc')]())[_0x2020('0x7')](realtime[_0x2020('0xd')]())['then'](chatQueue['getChatQueues']())[_0x2020('0x7')](realtime[_0x2020('0xe')]())[_0x2020('0x7')](smsQueue[_0x2020('0xf')]())['then'](realtime['initSmsQueues']())[_0x2020('0x7')](mailQueue[_0x2020('0x10')]())[_0x2020('0x7')](realtime['initMailQueues']())['then'](faxQueue[_0x2020('0x11')]())[_0x2020('0x7')](realtime[_0x2020('0x12')]())[_0x2020('0x7')](function(){return realtime;});}function main(){return server[_0x2020('0x13')](realtime)[_0x2020('0x7')](function(_0xc1850){return initRealtime();})[_0x2020('0x7')](function(_0xebb349){return setInterval(initRealtime,0x1388);})[_0x2020('0x14')](function(_0x347be9){console[_0x2020('0x15')](_0x347be9);});}main();
\ No newline at end of file
index 4595f15..7c4a28a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x25d4=['map','object','exports','lodash','util','events','EventEmitter','init','isNil','register','ignoreFactChanges','inherits','rules','activeRules','prototype','concat','isObject','push','sync','filter','orderBy','asc','execute','result','consequence','ruleRef','name','index_','nextTick','call','next','isEqual','restart','length','condition','noop','findRules','turn','prioritize','priority','toJSON','toString','fromJSON','isString','parse'];(function(_0x2f71f6,_0x3a1f4d){var _0x2b23ea=function(_0x285980){while(--_0x285980){_0x2f71f6['push'](_0x2f71f6['shift']());}};_0x2b23ea(++_0x3a1f4d);}(_0x25d4,0x8a));var _0x425d=function(_0x411dac,_0x26d5a1){_0x411dac=_0x411dac-0x0;var _0x29a1a3=_0x25d4[_0x411dac];return _0x29a1a3;};'use strict';var _=require(_0x425d('0x0'));var util=require(_0x425d('0x1'));var EventEmitter=require(_0x425d('0x2'))[_0x425d('0x3')];function RuleEngine(_0x3514b5,_0xd6b130){this[_0x425d('0x4')]();if(!_[_0x425d('0x5')](_0x3514b5)){this[_0x425d('0x6')](_0x3514b5);}if(_0xd6b130){this[_0x425d('0x7')]=_0xd6b130['ignoreFactChanges'];}return this;}util[_0x425d('0x8')](RuleEngine,EventEmitter);RuleEngine['prototype'][_0x425d('0x4')]=function(_0x32671c){this[_0x425d('0x9')]=[];this[_0x425d('0xa')]=[];};RuleEngine[_0x425d('0xb')]['register']=function(_0xa702dd){if(Array['isArray'](_0xa702dd)){this[_0x425d('0x9')]=this[_0x425d('0x9')][_0x425d('0xc')](_0xa702dd);}else if(_0xa702dd!==null&&_[_0x425d('0xd')](_0xa702dd)){this[_0x425d('0x9')][_0x425d('0xe')](_0xa702dd);}this[_0x425d('0xf')]();};RuleEngine[_0x425d('0xb')][_0x425d('0xf')]=function(){this[_0x425d('0xa')]=this[_0x425d('0x9')][_0x425d('0x10')](function(_0x121232){if(_[_0x425d('0x5')](_0x121232['on'])){_0x121232['on']=!![];}if(_0x121232['on']===!![]){return _0x121232;}});this['activeRules']=_[_0x425d('0x11')](this[_0x425d('0xa')],['p'],[_0x425d('0x12')]);};RuleEngine['prototype'][_0x425d('0x13')]=function(_0x1db33c,_0x54afd6){var _0x3912d9=![];_0x1db33c[_0x425d('0x14')]=!![];var _0x4dfc53=_['clone'](_0x1db33c);var _0x355136=_['clone'](_0x1db33c);var _0x77525f=this['activeRules'];var _0x4026fd=[];var _0x406794=this[_0x425d('0x7')];(function FnRuleLoop(_0x2a0d4e){var _0x196007={'rules':function(){return _0x77525f;},'rule':function(){return _0x77525f[_0x2a0d4e];},'when':function(_0x3cc7e3){if(_0x3cc7e3){var _0x2a829d=_0x77525f[_0x2a0d4e][_0x425d('0x15')];_0x2a829d[_0x425d('0x16')]=_0x77525f[_0x2a0d4e]['id']||_0x77525f[_0x2a0d4e][_0x425d('0x17')]||_0x425d('0x18')+_0x2a0d4e;process[_0x425d('0x19')](function(){_0x4026fd[_0x425d('0xe')](_0x2a829d['ruleRef']);_0x2a829d[_0x425d('0x1a')](_0x4dfc53,_0x196007);});}else{process[_0x425d('0x19')](function(){_0x196007[_0x425d('0x1b')]();});}},'restart':function(){return FnRuleLoop(0x0);},'stop':function(){_0x3912d9=!![];return FnRuleLoop(0x0);},'next':function(_0x1af35e){if(!_0x406794&&!_[_0x425d('0x1c')](_0x355136,_0x4dfc53)){_0x355136=_['clone'](_0x4dfc53);process[_0x425d('0x19')](function(){_0x196007[_0x425d('0x1d')]();});}else{process[_0x425d('0x19')](function(){if(_[_0x425d('0x5')](_0x1af35e)){return FnRuleLoop(_0x2a0d4e+0x1);}else{return FnRuleLoop(_0x1af35e);}});}}};if(_0x2a0d4e<_0x77525f[_0x425d('0x1e')]&&_0x3912d9===![]){var _0x130230=_0x77525f[_0x2a0d4e][_0x425d('0x1f')];_0x130230['call'](_0x4dfc53,_0x196007);}else{process[_0x425d('0x19')](function(){_0x4dfc53['matchPath']=_0x4026fd;return _0x54afd6?_0x54afd6(_0x4dfc53):_[_0x425d('0x20')]();});}}(0x0));};RuleEngine[_0x425d('0xb')][_0x425d('0x21')]=function(_0x32d1b0){if(_[_0x425d('0x5')](_0x32d1b0)){return this[_0x425d('0x9')];}else{var _0x4ab564=_['matches'](_0x32d1b0);return _[_0x425d('0x10')](this[_0x425d('0x9')],_0x4ab564);}};RuleEngine['prototype'][_0x425d('0x22')]=function(_0x153297,_0x299943){var _0x153297=_0x153297==='on'||_0x153297==='ON'?!![]:![];var _0x3ebcab=this[_0x425d('0x21')](_0x299943);for(var _0x303a8e=0x0,_0x87cdb5=_0x3ebcab['length'];_0x303a8e<_0x87cdb5;_0x303a8e+=0x1){_0x3ebcab[_0x303a8e]['on']=_0x153297;}this[_0x425d('0xf')]();};RuleEngine[_0x425d('0xb')][_0x425d('0x23')]=function(_0x32f8ec,_0x5e87f5){_0x32f8ec=parseInt(_0x32f8ec,0xa);var _0x590b8e=this['findRules'](_0x5e87f5);for(var _0x38bbb7=0x0,_0x335296=_0x590b8e[_0x425d('0x1e')];_0x38bbb7<_0x335296;_0x38bbb7+=0x1){_0x590b8e[_0x38bbb7][_0x425d('0x24')]=_0x32f8ec;}this[_0x425d('0xf')]();};RuleEngine[_0x425d('0xb')][_0x425d('0x25')]=function(){var _0x5ac57c=this['rules'];if(_0x5ac57c instanceof Array){_0x5ac57c=_0x5ac57c['map'](function(_0xc18153){_0xc18153[_0x425d('0x1f')]=_0xc18153[_0x425d('0x1f')][_0x425d('0x26')]();_0xc18153[_0x425d('0x15')]=_0xc18153[_0x425d('0x15')][_0x425d('0x26')]();return _0xc18153;});}else if(!_[_0x425d('0x5')](_0x5ac57c)){_0x5ac57c[_0x425d('0x1f')]=_0x5ac57c['condition']['toString']();_0x5ac57c[_0x425d('0x15')]=_0x5ac57c[_0x425d('0x15')]['toString']();}return _0x5ac57c;};RuleEngine[_0x425d('0xb')][_0x425d('0x27')]=function(_0x3b3b61){this[_0x425d('0x4')]();if(_[_0x425d('0x28')](_0x3b3b61)){_0x3b3b61=JSON[_0x425d('0x29')](_0x3b3b61);}if(_0x3b3b61 instanceof Array){_0x3b3b61=_0x3b3b61[_0x425d('0x2a')](function(_0x36b4f7){_0x36b4f7[_0x425d('0x1f')]=eval('('+_0x36b4f7['condition']+')');_0x36b4f7[_0x425d('0x15')]=eval('('+_0x36b4f7[_0x425d('0x15')]+')');return _0x36b4f7;});}else if(_0x3b3b61!==null&&typeof _0x3b3b61==_0x425d('0x2b')){_0x3b3b61[_0x425d('0x1f')]=eval('('+_0x3b3b61[_0x425d('0x1f')]+')');_0x3b3b61[_0x425d('0x15')]=eval('('+_0x3b3b61[_0x425d('0x15')]+')');}this[_0x425d('0x6')](_0x3b3b61);};module[_0x425d('0x2c')]=RuleEngine;
\ No newline at end of file
+var _0x7acf=['concat','sync','filter','isNil','orderBy','asc','execute','result','clone','name','nextTick','push','ruleRef','isEqual','restart','length','condition','call','matchPath','noop','matches','turn','findRules','toJSON','map','toString','consequence','fromJSON','isString','parse','object','exports','util','init','register','ignoreFactChanges','inherits','prototype','rules','activeRules','isArray'];(function(_0x4ab4a2,_0x41b416){var _0x57f331=function(_0xa67444){while(--_0xa67444){_0x4ab4a2['push'](_0x4ab4a2['shift']());}};_0x57f331(++_0x41b416);}(_0x7acf,0x1ba));var _0xf7ac=function(_0x4ceec6,_0x3b7ab9){_0x4ceec6=_0x4ceec6-0x0;var _0x145ddf=_0x7acf[_0x4ceec6];return _0x145ddf;};'use strict';var _=require('lodash');var util=require(_0xf7ac('0x0'));var EventEmitter=require('events')['EventEmitter'];function RuleEngine(_0x21ee2d,_0x1590dc){this[_0xf7ac('0x1')]();if(!_['isNil'](_0x21ee2d)){this[_0xf7ac('0x2')](_0x21ee2d);}if(_0x1590dc){this[_0xf7ac('0x3')]=_0x1590dc['ignoreFactChanges'];}return this;}util[_0xf7ac('0x4')](RuleEngine,EventEmitter);RuleEngine[_0xf7ac('0x5')]['init']=function(_0x3d62c8){this[_0xf7ac('0x6')]=[];this[_0xf7ac('0x7')]=[];};RuleEngine[_0xf7ac('0x5')][_0xf7ac('0x2')]=function(_0x4fad88){if(Array[_0xf7ac('0x8')](_0x4fad88)){this[_0xf7ac('0x6')]=this[_0xf7ac('0x6')][_0xf7ac('0x9')](_0x4fad88);}else if(_0x4fad88!==null&&_['isObject'](_0x4fad88)){this[_0xf7ac('0x6')]['push'](_0x4fad88);}this[_0xf7ac('0xa')]();};RuleEngine[_0xf7ac('0x5')][_0xf7ac('0xa')]=function(){this[_0xf7ac('0x7')]=this[_0xf7ac('0x6')][_0xf7ac('0xb')](function(_0x5319a3){if(_[_0xf7ac('0xc')](_0x5319a3['on'])){_0x5319a3['on']=!![];}if(_0x5319a3['on']===!![]){return _0x5319a3;}});this['activeRules']=_[_0xf7ac('0xd')](this[_0xf7ac('0x7')],['p'],[_0xf7ac('0xe')]);};RuleEngine[_0xf7ac('0x5')][_0xf7ac('0xf')]=function(_0x5700bf,_0x203c74){var _0x64e550=![];_0x5700bf[_0xf7ac('0x10')]=!![];var _0x21b820=_[_0xf7ac('0x11')](_0x5700bf);var _0x46b9fe=_[_0xf7ac('0x11')](_0x5700bf);var _0xc78f40=this[_0xf7ac('0x7')];var _0x4b86d1=[];var _0x303f3d=this[_0xf7ac('0x3')];(function FnRuleLoop(_0x15197f){var _0x1c79fe={'rules':function(){return _0xc78f40;},'rule':function(){return _0xc78f40[_0x15197f];},'when':function(_0x2f85c9){if(_0x2f85c9){var _0x348eed=_0xc78f40[_0x15197f]['consequence'];_0x348eed['ruleRef']=_0xc78f40[_0x15197f]['id']||_0xc78f40[_0x15197f][_0xf7ac('0x12')]||'index_'+_0x15197f;process[_0xf7ac('0x13')](function(){_0x4b86d1[_0xf7ac('0x14')](_0x348eed[_0xf7ac('0x15')]);_0x348eed['call'](_0x21b820,_0x1c79fe);});}else{process['nextTick'](function(){_0x1c79fe['next']();});}},'restart':function(){return FnRuleLoop(0x0);},'stop':function(){_0x64e550=!![];return FnRuleLoop(0x0);},'next':function(_0x27f992){if(!_0x303f3d&&!_[_0xf7ac('0x16')](_0x46b9fe,_0x21b820)){_0x46b9fe=_['clone'](_0x21b820);process[_0xf7ac('0x13')](function(){_0x1c79fe[_0xf7ac('0x17')]();});}else{process[_0xf7ac('0x13')](function(){if(_[_0xf7ac('0xc')](_0x27f992)){return FnRuleLoop(_0x15197f+0x1);}else{return FnRuleLoop(_0x27f992);}});}}};if(_0x15197f<_0xc78f40[_0xf7ac('0x18')]&&_0x64e550===![]){var _0x46eac1=_0xc78f40[_0x15197f][_0xf7ac('0x19')];_0x46eac1[_0xf7ac('0x1a')](_0x21b820,_0x1c79fe);}else{process[_0xf7ac('0x13')](function(){_0x21b820[_0xf7ac('0x1b')]=_0x4b86d1;return _0x203c74?_0x203c74(_0x21b820):_[_0xf7ac('0x1c')]();});}}(0x0));};RuleEngine[_0xf7ac('0x5')]['findRules']=function(_0x256ed4){if(_['isNil'](_0x256ed4)){return this[_0xf7ac('0x6')];}else{var _0x1c6b5a=_[_0xf7ac('0x1d')](_0x256ed4);return _[_0xf7ac('0xb')](this['rules'],_0x1c6b5a);}};RuleEngine[_0xf7ac('0x5')][_0xf7ac('0x1e')]=function(_0x165be7,_0x2e7a1e){var _0x165be7=_0x165be7==='on'||_0x165be7==='ON'?!![]:![];var _0x4c874=this[_0xf7ac('0x1f')](_0x2e7a1e);for(var _0x5a27e3=0x0,_0x4743b8=_0x4c874[_0xf7ac('0x18')];_0x5a27e3<_0x4743b8;_0x5a27e3+=0x1){_0x4c874[_0x5a27e3]['on']=_0x165be7;}this[_0xf7ac('0xa')]();};RuleEngine[_0xf7ac('0x5')]['prioritize']=function(_0x42fc4e,_0x4ca0b0){_0x42fc4e=parseInt(_0x42fc4e,0xa);var _0x55555c=this[_0xf7ac('0x1f')](_0x4ca0b0);for(var _0x2302f6=0x0,_0x591c3d=_0x55555c[_0xf7ac('0x18')];_0x2302f6<_0x591c3d;_0x2302f6+=0x1){_0x55555c[_0x2302f6]['priority']=_0x42fc4e;}this[_0xf7ac('0xa')]();};RuleEngine[_0xf7ac('0x5')][_0xf7ac('0x20')]=function(){var _0x490f0b=this[_0xf7ac('0x6')];if(_0x490f0b instanceof Array){_0x490f0b=_0x490f0b[_0xf7ac('0x21')](function(_0x1bbdc0){_0x1bbdc0['condition']=_0x1bbdc0['condition'][_0xf7ac('0x22')]();_0x1bbdc0['consequence']=_0x1bbdc0[_0xf7ac('0x23')][_0xf7ac('0x22')]();return _0x1bbdc0;});}else if(!_['isNil'](_0x490f0b)){_0x490f0b[_0xf7ac('0x19')]=_0x490f0b[_0xf7ac('0x19')]['toString']();_0x490f0b['consequence']=_0x490f0b[_0xf7ac('0x23')][_0xf7ac('0x22')]();}return _0x490f0b;};RuleEngine[_0xf7ac('0x5')][_0xf7ac('0x24')]=function(_0x18a51e){this[_0xf7ac('0x1')]();if(_[_0xf7ac('0x25')](_0x18a51e)){_0x18a51e=JSON[_0xf7ac('0x26')](_0x18a51e);}if(_0x18a51e instanceof Array){_0x18a51e=_0x18a51e[_0xf7ac('0x21')](function(_0x5b580e){_0x5b580e['condition']=eval('('+_0x5b580e['condition']+')');_0x5b580e[_0xf7ac('0x23')]=eval('('+_0x5b580e['consequence']+')');return _0x5b580e;});}else if(_0x18a51e!==null&&typeof _0x18a51e==_0xf7ac('0x27')){_0x18a51e[_0xf7ac('0x19')]=eval('('+_0x18a51e[_0xf7ac('0x19')]+')');_0x18a51e[_0xf7ac('0x23')]=eval('('+_0x18a51e[_0xf7ac('0x23')]+')');}this[_0xf7ac('0x2')](_0x18a51e);};module[_0xf7ac('0x28')]=RuleEngine;
\ No newline at end of file
index 1d6589b..6ca17f5 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(_0x479be5,_0x54ee21){var _0x182c4e=function(_0x40ed8f){while(--_0x40ed8f){_0x479be5['push'](_0x479be5['shift']());}};_0x182c4e(++_0x54ee21);}(_0x814b,0x1a2));var _0xb814=function(_0x591db7,_0x150445){_0x591db7=_0x591db7-0x0;var _0x4ad760=_0x814b[_0x591db7];return _0x4ad760;};'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(_0x124b93,_0x1bf377){var _0x56e860=function(_0x7e2563){while(--_0x7e2563){_0x124b93['push'](_0x124b93['shift']());}};_0x56e860(++_0x1bf377);}(_0x9957,0x93));var _0x7995=function(_0x5ddb1c,_0x5ea4df){_0x5ddb1c=_0x5ddb1c-0x0;var _0x354adc=_0x9957[_0x5ddb1c];return _0x354adc;};'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 f390e77..51b59e9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf9c2=['openchannelStatusTime','openchannelCapacity','openchannelCurrentCapacity','busy','busyQueue','updateRealtime','CurrentCapacity','Capacity','working','idle','prototype','mail','fax','length','getChannelStatus','Status','StatusTime','toNumber','chatCapacity','mailStatusTime','smsStatus','stringify','emit','user:save','exports','moment','md5','redis','defaults','localhost','name','online','voicePause','chatPause','mailPause','faxPause','smsPause','openchannelPause','unknown','chatStatusTime','chatCurrentCapacity','mailStatus','mailCapacity','mailCurrentCapacity','faxStatus','faxStatusTime','faxCapacity','faxCurrentCapacity','smsStatusTime','smsCapacity','smsCurrentCapacity','openchannelStatus'];(function(_0x903228,_0x42c429){var _0xcec81d=function(_0x4da97a){while(--_0x4da97a){_0x903228['push'](_0x903228['shift']());}};_0xcec81d(++_0x42c429);}(_0xf9c2,0x151));var _0x2f9c=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0xf9c2[_0x2641f9];return _0x585741;};'use strict';var _=require('lodash');var moment=require(_0x2f9c('0x0'));var md5=require(_0x2f9c('0x1'));var Redis=require('ioredis');var config=require('../../../config/environment');config[_0x2f9c('0x2')]=_[_0x2f9c('0x3')](config[_0x2f9c('0x2')],{'host':_0x2f9c('0x4'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x2f9c('0x2')]));function Agent(_0x18b9c1){this['id']=_0x18b9c1['id']||0x0;this[_0x2f9c('0x5')]=_0x18b9c1[_0x2f9c('0x5')]||'';this[_0x2f9c('0x6')]=_0x18b9c1[_0x2f9c('0x6')]||!![];this['voicePause']=_0x18b9c1[_0x2f9c('0x7')]||![];this[_0x2f9c('0x8')]=_0x18b9c1[_0x2f9c('0x8')]||![];this[_0x2f9c('0x9')]=_0x18b9c1[_0x2f9c('0x9')]||![];this['faxPause']=_0x18b9c1[_0x2f9c('0xa')]||![];this['smsPause']=_0x18b9c1[_0x2f9c('0xb')]||![];this[_0x2f9c('0xc')]=_0x18b9c1[_0x2f9c('0xc')]||![];this['chatStatus']=_0x2f9c('0xd');this[_0x2f9c('0xe')]=0x0;this['chatCapacity']=_0x18b9c1['chatCapacity']||0x0;this[_0x2f9c('0xf')]=0x0;this[_0x2f9c('0x10')]=_0x2f9c('0xd');this['mailStatusTime']=0x0;this['mailCapacity']=_0x18b9c1[_0x2f9c('0x11')]||0x0;this[_0x2f9c('0x12')]=0x0;this[_0x2f9c('0x13')]=_0x2f9c('0xd');this[_0x2f9c('0x14')]=0x0;this['faxCapacity']=_0x18b9c1[_0x2f9c('0x15')]||0x0;this[_0x2f9c('0x16')]=0x0;this['smsStatus']=_0x2f9c('0xd');this[_0x2f9c('0x17')]=0x0;this[_0x2f9c('0x18')]=_0x18b9c1['smsCapacity']||0x0;this[_0x2f9c('0x19')]=0x0;this[_0x2f9c('0x1a')]=_0x2f9c('0xd');this[_0x2f9c('0x1b')]=0x0;this[_0x2f9c('0x1c')]=_0x18b9c1[_0x2f9c('0x1c')]||0x0;this[_0x2f9c('0x1d')]=0x0;this[_0x2f9c('0x1e')]=![];this[_0x2f9c('0x1f')]=undefined;this[_0x2f9c('0x1')]='';this[_0x2f9c('0x20')]();}Agent['prototype']['getChannelStatus']=function(_0x40eaea){if(this[_0x40eaea+_0x2f9c('0x21')]>0x0){if(this[_0x40eaea+'Capacity']>0x0&&this[_0x40eaea+_0x2f9c('0x21')]>=this[_0x40eaea+_0x2f9c('0x22')]){return'maxcapacity';}else{return _0x2f9c('0x23');}}else{return _0x2f9c('0x24');}};Agent[_0x2f9c('0x25')]['updateRealtime']=function(){var _0x5ede18=[_0x2f9c('0x26'),'chat','openchannel',_0x2f9c('0x27'),'sms'];for(var _0x5d9748=0x0;_0x5d9748<_0x5ede18[_0x2f9c('0x28')];_0x5d9748+=0x1){var _0x2a75df=this[_0x2f9c('0x29')](_0x5ede18[_0x5d9748]);if(this[_0x5ede18[_0x5d9748]+_0x2f9c('0x2a')]!==_0x2a75df){this[_0x5ede18[_0x5d9748]+_0x2f9c('0x2b')]=_[_0x2f9c('0x2c')](moment()['format']('x'));}this[_0x5ede18[_0x5d9748]+_0x2f9c('0x2a')]=_0x2a75df;}var _0x26b3f1={'id':this['id'],'name':this[_0x2f9c('0x5')],'online':this['online'],'voicePause':this[_0x2f9c('0x7')],'chatPause':this['chatPause'],'mailPause':this[_0x2f9c('0x9')],'smsPause':this['smsPause'],'faxPause':this[_0x2f9c('0xa')],'openchannelPause':this[_0x2f9c('0xc')],'chatStatus':this['chatStatus'],'chatStatusTime':this[_0x2f9c('0xe')],'chatCapacity':this[_0x2f9c('0x2d')],'chatCurrentCapacity':this['chatCurrentCapacity'],'mailStatus':this['mailStatus'],'mailStatusTime':this[_0x2f9c('0x2e')],'mailCapacity':this[_0x2f9c('0x11')],'mailCurrentCapacity':this[_0x2f9c('0x12')],'faxStatus':this['faxStatus'],'faxStatusTime':this[_0x2f9c('0x14')],'faxCapacity':this['faxCapacity'],'faxCurrentCapacity':this['faxCurrentCapacity'],'smsStatus':this[_0x2f9c('0x2f')],'smsStatusTime':this['smsStatusTime'],'smsCapacity':this['smsCapacity'],'smsCurrentCapacity':this[_0x2f9c('0x19')],'openchannelStatus':this[_0x2f9c('0x1a')],'openchannelStatusTime':this[_0x2f9c('0x1b')],'openchannelCapacity':this[_0x2f9c('0x1c')],'openchannelCurrentCapacity':this[_0x2f9c('0x1d')],'busy':this['busy'],'busyQueue':this[_0x2f9c('0x1f')]};var _0x2c1eee=md5(JSON[_0x2f9c('0x30')](_0x26b3f1));if(this[_0x2f9c('0x1')]!==_0x2c1eee){this[_0x2f9c('0x1')]=_0x2c1eee;io[_0x2f9c('0x31')](_0x2f9c('0x32'),_0x26b3f1);}};module[_0x2f9c('0x33')]=Agent;
\ No newline at end of file
+var _0xe013=['smsCurrentCapacity','openchannelStatusTime','openchannelCapacity','busy','busyQueue','updateRealtime','prototype','getChannelStatus','CurrentCapacity','Capacity','maxcapacity','working','mail','openchannel','fax','sms','StatusTime','toNumber','Status','chatStatus','chatStatusTime','mailCurrentCapacity','faxCapacity','faxCurrentCapacity','openchannelStatus','openchannelCurrentCapacity','stringify','user:save','exports','lodash','moment','md5','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','online','voicePause','chatPause','mailPause','faxPause','smsPause','openchannelPause','unknown','chatCapacity','chatCurrentCapacity','mailStatus','mailStatusTime','mailCapacity','faxStatus','faxStatusTime','smsStatus','smsStatusTime','smsCapacity'];(function(_0x43e413,_0x5a6b40){var _0x313971=function(_0x3e7f15){while(--_0x3e7f15){_0x43e413['push'](_0x43e413['shift']());}};_0x313971(++_0x5a6b40);}(_0xe013,0x1ac));var _0x3e01=function(_0x2f5ac5,_0x1ee939){_0x2f5ac5=_0x2f5ac5-0x0;var _0x37c9a8=_0xe013[_0x2f5ac5];return _0x37c9a8;};'use strict';var _=require(_0x3e01('0x0'));var moment=require(_0x3e01('0x1'));var md5=require(_0x3e01('0x2'));var Redis=require(_0x3e01('0x3'));var config=require(_0x3e01('0x4'));config[_0x3e01('0x5')]=_[_0x3e01('0x6')](config[_0x3e01('0x5')],{'host':_0x3e01('0x7'),'port':0x18eb});var io=require(_0x3e01('0x8'))(new Redis(config[_0x3e01('0x5')]));function Agent(_0x44d4a6){this['id']=_0x44d4a6['id']||0x0;this[_0x3e01('0x9')]=_0x44d4a6[_0x3e01('0x9')]||'';this[_0x3e01('0xa')]=_0x44d4a6[_0x3e01('0xa')]||!![];this['voicePause']=_0x44d4a6[_0x3e01('0xb')]||![];this[_0x3e01('0xc')]=_0x44d4a6['chatPause']||![];this[_0x3e01('0xd')]=_0x44d4a6[_0x3e01('0xd')]||![];this[_0x3e01('0xe')]=_0x44d4a6[_0x3e01('0xe')]||![];this[_0x3e01('0xf')]=_0x44d4a6[_0x3e01('0xf')]||![];this[_0x3e01('0x10')]=_0x44d4a6[_0x3e01('0x10')]||![];this['chatStatus']=_0x3e01('0x11');this['chatStatusTime']=0x0;this['chatCapacity']=_0x44d4a6[_0x3e01('0x12')]||0x0;this[_0x3e01('0x13')]=0x0;this[_0x3e01('0x14')]=_0x3e01('0x11');this[_0x3e01('0x15')]=0x0;this[_0x3e01('0x16')]=_0x44d4a6[_0x3e01('0x16')]||0x0;this['mailCurrentCapacity']=0x0;this[_0x3e01('0x17')]=_0x3e01('0x11');this[_0x3e01('0x18')]=0x0;this['faxCapacity']=_0x44d4a6['faxCapacity']||0x0;this['faxCurrentCapacity']=0x0;this[_0x3e01('0x19')]=_0x3e01('0x11');this[_0x3e01('0x1a')]=0x0;this[_0x3e01('0x1b')]=_0x44d4a6[_0x3e01('0x1b')]||0x0;this[_0x3e01('0x1c')]=0x0;this['openchannelStatus']='unknown';this[_0x3e01('0x1d')]=0x0;this[_0x3e01('0x1e')]=_0x44d4a6[_0x3e01('0x1e')]||0x0;this['openchannelCurrentCapacity']=0x0;this[_0x3e01('0x1f')]=![];this[_0x3e01('0x20')]=undefined;this[_0x3e01('0x2')]='';this[_0x3e01('0x21')]();}Agent[_0x3e01('0x22')][_0x3e01('0x23')]=function(_0x1dcc71){if(this[_0x1dcc71+_0x3e01('0x24')]>0x0){if(this[_0x1dcc71+_0x3e01('0x25')]>0x0&&this[_0x1dcc71+_0x3e01('0x24')]>=this[_0x1dcc71+_0x3e01('0x25')]){return _0x3e01('0x26');}else{return _0x3e01('0x27');}}else{return'idle';}};Agent[_0x3e01('0x22')][_0x3e01('0x21')]=function(){var _0x44affb=[_0x3e01('0x28'),'chat',_0x3e01('0x29'),_0x3e01('0x2a'),_0x3e01('0x2b')];for(var _0x1f760e=0x0;_0x1f760e<_0x44affb['length'];_0x1f760e+=0x1){var _0x59eee3=this[_0x3e01('0x23')](_0x44affb[_0x1f760e]);if(this[_0x44affb[_0x1f760e]+'Status']!==_0x59eee3){this[_0x44affb[_0x1f760e]+_0x3e01('0x2c')]=_[_0x3e01('0x2d')](moment()['format']('x'));}this[_0x44affb[_0x1f760e]+_0x3e01('0x2e')]=_0x59eee3;}var _0x1a712c={'id':this['id'],'name':this[_0x3e01('0x9')],'online':this[_0x3e01('0xa')],'voicePause':this[_0x3e01('0xb')],'chatPause':this[_0x3e01('0xc')],'mailPause':this[_0x3e01('0xd')],'smsPause':this[_0x3e01('0xf')],'faxPause':this['faxPause'],'openchannelPause':this[_0x3e01('0x10')],'chatStatus':this[_0x3e01('0x2f')],'chatStatusTime':this[_0x3e01('0x30')],'chatCapacity':this['chatCapacity'],'chatCurrentCapacity':this[_0x3e01('0x13')],'mailStatus':this[_0x3e01('0x14')],'mailStatusTime':this['mailStatusTime'],'mailCapacity':this['mailCapacity'],'mailCurrentCapacity':this[_0x3e01('0x31')],'faxStatus':this[_0x3e01('0x17')],'faxStatusTime':this['faxStatusTime'],'faxCapacity':this[_0x3e01('0x32')],'faxCurrentCapacity':this[_0x3e01('0x33')],'smsStatus':this[_0x3e01('0x19')],'smsStatusTime':this[_0x3e01('0x1a')],'smsCapacity':this[_0x3e01('0x1b')],'smsCurrentCapacity':this[_0x3e01('0x1c')],'openchannelStatus':this[_0x3e01('0x34')],'openchannelStatusTime':this[_0x3e01('0x1d')],'openchannelCapacity':this['openchannelCapacity'],'openchannelCurrentCapacity':this[_0x3e01('0x35')],'busy':this[_0x3e01('0x1f')],'busyQueue':this[_0x3e01('0x20')]};var _0x2542ff=md5(JSON[_0x3e01('0x36')](_0x1a712c));if(this[_0x3e01('0x2')]!==_0x2542ff){this[_0x3e01('0x2')]=_0x2542ff;io['emit'](_0x3e01('0x37'),_0x1a712c);}};module[_0x3e01('0x38')]=Agent;
\ No newline at end of file
index b03093c..eff4bc8 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa4ac=['chat_queue:save','exports','lodash','util','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','md5','updateRouting','updateRealtime','prototype','_rr','map','chatPause','paused','available','loggedIn','format','chat:queue:%s'];(function(_0x46c1d5,_0x5ca335){var _0x40fe7b=function(_0x34cb99){while(--_0x34cb99){_0x46c1d5['push'](_0x46c1d5['shift']());}};_0x40fe7b(++_0x5ca335);}(_0xa4ac,0xcd));var _0xca4a=function(_0x480bc8,_0x1fac40){_0x480bc8=_0x480bc8-0x0;var _0x28c245=_0xa4ac[_0x480bc8];return _0x28c245;};'use strict';var _=require(_0xca4a('0x0'));var md5=require('md5');var util=require(_0xca4a('0x1'));var Redis=require(_0xca4a('0x2'));var config=require(_0xca4a('0x3'));config[_0xca4a('0x4')]=_[_0xca4a('0x5')](config[_0xca4a('0x4')],{'host':_0xca4a('0x6'),'port':0x18eb});var io=require(_0xca4a('0x7'))(new Redis(config[_0xca4a('0x4')]));function ChatQueue(_0x42bcab){this['id']=_0x42bcab['id']||0x0;this[_0xca4a('0x8')]=_0x42bcab[_0xca4a('0x8')]||'';this['timeout']=_0x42bcab[_0xca4a('0x9')]||0xa;this[_0xca4a('0xa')]=_0x42bcab[_0xca4a('0xa')]||_0xca4a('0xb');this[_0xca4a('0xc')]=_0x42bcab['Agents'];this[_0xca4a('0xd')]={};this[_0xca4a('0xe')]=0x0;this[_0xca4a('0xf')]='';this[_0xca4a('0x10')]();this[_0xca4a('0x11')]();}ChatQueue[_0xca4a('0x12')]['updateRouting']=function(){var _0x5adf5d=this[_0xca4a('0xd')][_0xca4a('0x13')];this[_0xca4a('0xd')]=_[_0xca4a('0x14')](this['Agents'],'id');this[_0xca4a('0xd')][_0xca4a('0x13')]=_0x5adf5d;};ChatQueue[_0xca4a('0x12')][_0xca4a('0x11')]=function(){this['loggedIn']=0x0;this['paused']=0x0;for(var _0x5c940e=0x0;_0x5c940e<this['Agents']['length'];_0x5c940e+=0x1){if(this['Agents'][_0x5c940e]['online']){this['loggedIn']+=0x1;}if(this[_0xca4a('0xc')][_0x5c940e][_0xca4a('0x15')]){this[_0xca4a('0x16')]+=0x1;}}this[_0xca4a('0x17')]=this[_0xca4a('0x18')]-this[_0xca4a('0x16')];this['available']=this['available']>=0x0?this[_0xca4a('0x17')]:0x0;var _0x5d69a0={'id':this['id'],'available':this['available'],'loggedIn':this['loggedIn'],'name':this[_0xca4a('0x8')],'paused':this['paused'],'waiting':this['waiting']};var _0x5bf9c3=md5(JSON['stringify'](_0x5d69a0));if(this[_0xca4a('0xf')]!==_0x5bf9c3){this['md5']=_0x5bf9c3;io['to'](util[_0xca4a('0x19')](_0xca4a('0x1a'),_0x5d69a0[_0xca4a('0x8')]))['emit'](_0xca4a('0x1b'),_0x5d69a0);}};module[_0xca4a('0x1c')]=ChatQueue;
\ No newline at end of file
+var _0x4ab5=['_rr','paused','length','online','chatPause','available','format','chat:queue:%s','chat_queue:save','exports','lodash','md5','util','../../../config/environment','redis','defaults','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','updateRouting','prototype'];(function(_0x100682,_0x11afec){var _0xcb6e87=function(_0x3ef421){while(--_0x3ef421){_0x100682['push'](_0x100682['shift']());}};_0xcb6e87(++_0x11afec);}(_0x4ab5,0x1cc));var _0x54ab=function(_0x486008,_0x2b2d05){_0x486008=_0x486008-0x0;var _0x2fefc7=_0x4ab5[_0x486008];return _0x2fefc7;};'use strict';var _=require(_0x54ab('0x0'));var md5=require(_0x54ab('0x1'));var util=require(_0x54ab('0x2'));var Redis=require('ioredis');var config=require(_0x54ab('0x3'));config[_0x54ab('0x4')]=_[_0x54ab('0x5')](config[_0x54ab('0x4')],{'host':'localhost','port':0x18eb});var io=require(_0x54ab('0x6'))(new Redis(config['redis']));function ChatQueue(_0x39b57b){this['id']=_0x39b57b['id']||0x0;this[_0x54ab('0x7')]=_0x39b57b[_0x54ab('0x7')]||'';this['timeout']=_0x39b57b[_0x54ab('0x8')]||0xa;this[_0x54ab('0x9')]=_0x39b57b[_0x54ab('0x9')]||_0x54ab('0xa');this['Agents']=_0x39b57b[_0x54ab('0xb')];this[_0x54ab('0xc')]={};this['waiting']=0x0;this['md5']='';this[_0x54ab('0xd')]();this['updateRealtime']();}ChatQueue[_0x54ab('0xe')][_0x54ab('0xd')]=function(){var _0x5c2862=this['mapAgentsId'][_0x54ab('0xf')];this[_0x54ab('0xc')]=_['map'](this[_0x54ab('0xb')],'id');this[_0x54ab('0xc')][_0x54ab('0xf')]=_0x5c2862;};ChatQueue[_0x54ab('0xe')]['updateRealtime']=function(){this['loggedIn']=0x0;this[_0x54ab('0x10')]=0x0;for(var _0x32a655=0x0;_0x32a655<this['Agents'][_0x54ab('0x11')];_0x32a655+=0x1){if(this[_0x54ab('0xb')][_0x32a655][_0x54ab('0x12')]){this['loggedIn']+=0x1;}if(this[_0x54ab('0xb')][_0x32a655][_0x54ab('0x13')]){this['paused']+=0x1;}}this[_0x54ab('0x14')]=this['loggedIn']-this[_0x54ab('0x10')];this[_0x54ab('0x14')]=this['available']>=0x0?this[_0x54ab('0x14')]:0x0;var _0x335bf4={'id':this['id'],'available':this[_0x54ab('0x14')],'loggedIn':this['loggedIn'],'name':this[_0x54ab('0x7')],'paused':this['paused'],'waiting':this['waiting']};var _0x1d3120=md5(JSON['stringify'](_0x335bf4));if(this[_0x54ab('0x1')]!==_0x1d3120){this['md5']=_0x1d3120;io['to'](util[_0x54ab('0x15')](_0x54ab('0x16'),_0x335bf4['name']))['emit'](_0x54ab('0x17'),_0x335bf4);}};module[_0x54ab('0x18')]=ChatQueue;
\ No newline at end of file
index 4189163..9f24770 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb153=['updateRouting','updateRealtime','prototype','_rr','map','loggedIn','paused','online','faxPause','available','stringify','format','fax:queue:%s','emit','fax_queue:save','exports','md5','util','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting'];(function(_0x4bd950,_0x184ed5){var _0x5dc59a=function(_0x6ff30f){while(--_0x6ff30f){_0x4bd950['push'](_0x4bd950['shift']());}};_0x5dc59a(++_0x184ed5);}(_0xb153,0x1a3));var _0x3b15=function(_0x1a0066,_0x9db1f1){_0x1a0066=_0x1a0066-0x0;var _0x2bda60=_0xb153[_0x1a0066];return _0x2bda60;};'use strict';var _=require('lodash');var md5=require(_0x3b15('0x0'));var util=require(_0x3b15('0x1'));var Redis=require(_0x3b15('0x2'));var config=require(_0x3b15('0x3'));config[_0x3b15('0x4')]=_[_0x3b15('0x5')](config['redis'],{'host':_0x3b15('0x6'),'port':0x18eb});var io=require(_0x3b15('0x7'))(new Redis(config['redis']));function FaxQueue(_0x3618a8){this['id']=_0x3618a8['id']||0x0;this[_0x3b15('0x8')]=_0x3618a8['name']||'';this[_0x3b15('0x9')]=_0x3618a8[_0x3b15('0x9')]||0xa;this[_0x3b15('0xa')]=_0x3618a8['strategy']||_0x3b15('0xb');this[_0x3b15('0xc')]=_0x3618a8['Agents'];this[_0x3b15('0xd')]={};this[_0x3b15('0xe')]=0x0;this[_0x3b15('0x0')]='';this[_0x3b15('0xf')]();this[_0x3b15('0x10')]();}FaxQueue[_0x3b15('0x11')][_0x3b15('0xf')]=function(){var _0x45fee3=this[_0x3b15('0xd')][_0x3b15('0x12')];this['mapAgentsId']=_[_0x3b15('0x13')](this[_0x3b15('0xc')],'id');this['mapAgentsId']['_rr']=_0x45fee3;};FaxQueue[_0x3b15('0x11')][_0x3b15('0x10')]=function(){this[_0x3b15('0x14')]=0x0;this[_0x3b15('0x15')]=0x0;for(var _0x23060c=0x0;_0x23060c<this[_0x3b15('0xc')]['length'];_0x23060c+=0x1){if(this['Agents'][_0x23060c][_0x3b15('0x16')]){this[_0x3b15('0x14')]+=0x1;}if(this[_0x3b15('0xc')][_0x23060c][_0x3b15('0x17')]){this[_0x3b15('0x15')]+=0x1;}}this['available']=this[_0x3b15('0x14')]-this['paused'];this[_0x3b15('0x18')]=this[_0x3b15('0x18')]>=0x0?this[_0x3b15('0x18')]:0x0;var _0x38526f={'id':this['id'],'available':this[_0x3b15('0x18')],'loggedIn':this[_0x3b15('0x14')],'name':this[_0x3b15('0x8')],'paused':this[_0x3b15('0x15')],'waiting':this[_0x3b15('0xe')]};var _0x2b363a=md5(JSON[_0x3b15('0x19')](_0x38526f));if(this['md5']!==_0x2b363a){this[_0x3b15('0x0')]=_0x2b363a;io['to'](util[_0x3b15('0x1a')](_0x3b15('0x1b'),_0x38526f[_0x3b15('0x8')]))[_0x3b15('0x1c')](_0x3b15('0x1d'),_0x38526f);}};module[_0x3b15('0x1e')]=FaxQueue;
\ No newline at end of file
+var _0xa703=['timeout','strategy','beepall','Agents','mapAgentsId','waiting','md5','prototype','updateRouting','_rr','map','updateRealtime','loggedIn','paused','faxPause','available','stringify','format','fax:queue:%s','emit','fax_queue:save','exports','lodash','ioredis','../../../config/environment','defaults','redis','socket.io-emitter','name'];(function(_0x2375cd,_0x501f3d){var _0x3be308=function(_0x19d676){while(--_0x19d676){_0x2375cd['push'](_0x2375cd['shift']());}};_0x3be308(++_0x501f3d);}(_0xa703,0x155));var _0x3a70=function(_0xf50820,_0x56f041){_0xf50820=_0xf50820-0x0;var _0x2a9b10=_0xa703[_0xf50820];return _0x2a9b10;};'use strict';var _=require(_0x3a70('0x0'));var md5=require('md5');var util=require('util');var Redis=require(_0x3a70('0x1'));var config=require(_0x3a70('0x2'));config['redis']=_[_0x3a70('0x3')](config[_0x3a70('0x4')],{'host':'localhost','port':0x18eb});var io=require(_0x3a70('0x5'))(new Redis(config[_0x3a70('0x4')]));function FaxQueue(_0x4d3385){this['id']=_0x4d3385['id']||0x0;this['name']=_0x4d3385[_0x3a70('0x6')]||'';this[_0x3a70('0x7')]=_0x4d3385[_0x3a70('0x7')]||0xa;this[_0x3a70('0x8')]=_0x4d3385[_0x3a70('0x8')]||_0x3a70('0x9');this[_0x3a70('0xa')]=_0x4d3385[_0x3a70('0xa')];this[_0x3a70('0xb')]={};this[_0x3a70('0xc')]=0x0;this[_0x3a70('0xd')]='';this['updateRouting']();this['updateRealtime']();}FaxQueue[_0x3a70('0xe')][_0x3a70('0xf')]=function(){var _0x572de9=this['mapAgentsId'][_0x3a70('0x10')];this['mapAgentsId']=_[_0x3a70('0x11')](this[_0x3a70('0xa')],'id');this[_0x3a70('0xb')]['_rr']=_0x572de9;};FaxQueue[_0x3a70('0xe')][_0x3a70('0x12')]=function(){this[_0x3a70('0x13')]=0x0;this[_0x3a70('0x14')]=0x0;for(var _0x54b0ec=0x0;_0x54b0ec<this[_0x3a70('0xa')]['length'];_0x54b0ec+=0x1){if(this[_0x3a70('0xa')][_0x54b0ec]['online']){this[_0x3a70('0x13')]+=0x1;}if(this[_0x3a70('0xa')][_0x54b0ec][_0x3a70('0x15')]){this[_0x3a70('0x14')]+=0x1;}}this['available']=this[_0x3a70('0x13')]-this['paused'];this['available']=this[_0x3a70('0x16')]>=0x0?this[_0x3a70('0x16')]:0x0;var _0x3af9d1={'id':this['id'],'available':this['available'],'loggedIn':this['loggedIn'],'name':this[_0x3a70('0x6')],'paused':this[_0x3a70('0x14')],'waiting':this[_0x3a70('0xc')]};var _0x3cd888=md5(JSON[_0x3a70('0x17')](_0x3af9d1));if(this[_0x3a70('0xd')]!==_0x3cd888){this['md5']=_0x3cd888;io['to'](util[_0x3a70('0x18')](_0x3a70('0x19'),_0x3af9d1[_0x3a70('0x6')]))[_0x3a70('0x1a')](_0x3a70('0x1b'),_0x3af9d1);}};module[_0x3a70('0x1c')]=FaxQueue;
\ No newline at end of file
index 07e5c0d..a115967 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf761=['Intervals','exports','name'];(function(_0x5b644e,_0x2e5e07){var _0x49c6bf=function(_0x3032d9){while(--_0x3032d9){_0x5b644e['push'](_0x5b644e['shift']());}};_0x49c6bf(++_0x2e5e07);}(_0xf761,0x1e2));var _0x1f76=function(_0x16db8b,_0xca7d28){_0x16db8b=_0x16db8b-0x0;var _0x5ba017=_0xf761[_0x16db8b];return _0x5ba017;};'use strict';function Interval(_0x15f129){this['id']=_0x15f129['id']||0x0;this[_0x1f76('0x0')]=_0x15f129['name']||'';this['Intervals']=_0x15f129[_0x1f76('0x1')]||{};}module[_0x1f76('0x2')]=Interval;
\ No newline at end of file
+var _0xd7af=['exports'];(function(_0x24c5e1,_0x559367){var _0x22c825=function(_0x42ef86){while(--_0x42ef86){_0x24c5e1['push'](_0x24c5e1['shift']());}};_0x22c825(++_0x559367);}(_0xd7af,0xdb));var _0xfd7a=function(_0x4aff03,_0x52b496){_0x4aff03=_0x4aff03-0x0;var _0x211c3d=_0xd7af[_0x4aff03];return _0x211c3d;};'use strict';function Interval(_0x2510d3){this['id']=_0x2510d3['id']||0x0;this['name']=_0x2510d3['name']||'';this['Intervals']=_0x2510d3['Intervals']||{};}module[_0xfd7a('0x0')]=Interval;
\ No newline at end of file
index 3e179cd..5c6cbc4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xeae8=['prototype','loggedIn','Agents','length','online','mailPause','paused','available','stringify','mail:queue:%s','emit','exports','lodash','md5','util','../../../config/environment','defaults','localhost','socket.io-emitter','redis','name','timeout','strategy','beepall','mapAgentsId','waiting','updateRouting','updateRealtime','_rr','map'];(function(_0x4ddf52,_0x2e502a){var _0x183d4b=function(_0x3b87b8){while(--_0x3b87b8){_0x4ddf52['push'](_0x4ddf52['shift']());}};_0x183d4b(++_0x2e502a);}(_0xeae8,0x66));var _0x8eae=function(_0x15fc60,_0x390b55){_0x15fc60=_0x15fc60-0x0;var _0x8960c9=_0xeae8[_0x15fc60];return _0x8960c9;};'use strict';var _=require(_0x8eae('0x0'));var md5=require(_0x8eae('0x1'));var util=require(_0x8eae('0x2'));var Redis=require('ioredis');var config=require(_0x8eae('0x3'));config['redis']=_[_0x8eae('0x4')](config['redis'],{'host':_0x8eae('0x5'),'port':0x18eb});var io=require(_0x8eae('0x6'))(new Redis(config[_0x8eae('0x7')]));function MailQueue(_0x2f4010){this['id']=_0x2f4010['id']||0x0;this[_0x8eae('0x8')]=_0x2f4010[_0x8eae('0x8')]||'';this[_0x8eae('0x9')]=_0x2f4010[_0x8eae('0x9')]||0xa;this[_0x8eae('0xa')]=_0x2f4010[_0x8eae('0xa')]||_0x8eae('0xb');this['Agents']=_0x2f4010['Agents'];this[_0x8eae('0xc')]={};this[_0x8eae('0xd')]=0x0;this[_0x8eae('0x1')]='';this[_0x8eae('0xe')]();this[_0x8eae('0xf')]();}MailQueue['prototype']['updateRouting']=function(){var _0x4cf0c3=this[_0x8eae('0xc')][_0x8eae('0x10')];this['mapAgentsId']=_[_0x8eae('0x11')](this['Agents'],'id');this[_0x8eae('0xc')][_0x8eae('0x10')]=_0x4cf0c3;};MailQueue[_0x8eae('0x12')][_0x8eae('0xf')]=function(){this[_0x8eae('0x13')]=0x0;this['paused']=0x0;for(var _0x16f24a=0x0;_0x16f24a<this[_0x8eae('0x14')][_0x8eae('0x15')];_0x16f24a+=0x1){if(this[_0x8eae('0x14')][_0x16f24a][_0x8eae('0x16')]){this[_0x8eae('0x13')]+=0x1;}if(this[_0x8eae('0x14')][_0x16f24a][_0x8eae('0x17')]){this[_0x8eae('0x18')]+=0x1;}}this['available']=this['loggedIn']-this['paused'];this[_0x8eae('0x19')]=this['available']>=0x0?this[_0x8eae('0x19')]:0x0;var _0x3fe930={'id':this['id'],'available':this[_0x8eae('0x19')],'loggedIn':this[_0x8eae('0x13')],'name':this[_0x8eae('0x8')],'paused':this[_0x8eae('0x18')],'waiting':this[_0x8eae('0xd')]};var _0x42e734=md5(JSON[_0x8eae('0x1a')](_0x3fe930));if(this[_0x8eae('0x1')]!==_0x42e734){this['md5']=_0x42e734;io['to'](util['format'](_0x8eae('0x1b'),_0x3fe930[_0x8eae('0x8')]))[_0x8eae('0x1c')]('mail_queue:save',_0x3fe930);}};module[_0x8eae('0x1d')]=MailQueue;
\ No newline at end of file
+var _0x3646=['emit','mail_queue:save','exports','lodash','md5','util','ioredis','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','updateRouting','updateRealtime','prototype','mapAgentsId','_rr','map','loggedIn','paused','online','mailPause','available','waiting','mail:queue:%s'];(function(_0x4666c9,_0x1e7397){var _0x5914ca=function(_0x4fb97d){while(--_0x4fb97d){_0x4666c9['push'](_0x4666c9['shift']());}};_0x5914ca(++_0x1e7397);}(_0x3646,0x15f));var _0x6364=function(_0x41bce9,_0x421a68){_0x41bce9=_0x41bce9-0x0;var _0x38a6f6=_0x3646[_0x41bce9];return _0x38a6f6;};'use strict';var _=require(_0x6364('0x0'));var md5=require(_0x6364('0x1'));var util=require(_0x6364('0x2'));var Redis=require(_0x6364('0x3'));var config=require('../../../config/environment');config[_0x6364('0x4')]=_[_0x6364('0x5')](config[_0x6364('0x4')],{'host':_0x6364('0x6'),'port':0x18eb});var io=require(_0x6364('0x7'))(new Redis(config[_0x6364('0x4')]));function MailQueue(_0x2d9938){this['id']=_0x2d9938['id']||0x0;this[_0x6364('0x8')]=_0x2d9938[_0x6364('0x8')]||'';this[_0x6364('0x9')]=_0x2d9938[_0x6364('0x9')]||0xa;this['strategy']=_0x2d9938[_0x6364('0xa')]||_0x6364('0xb');this[_0x6364('0xc')]=_0x2d9938[_0x6364('0xc')];this['mapAgentsId']={};this['waiting']=0x0;this['md5']='';this[_0x6364('0xd')]();this[_0x6364('0xe')]();}MailQueue[_0x6364('0xf')][_0x6364('0xd')]=function(){var _0x1fc4be=this[_0x6364('0x10')][_0x6364('0x11')];this['mapAgentsId']=_[_0x6364('0x12')](this[_0x6364('0xc')],'id');this[_0x6364('0x10')]['_rr']=_0x1fc4be;};MailQueue[_0x6364('0xf')][_0x6364('0xe')]=function(){this[_0x6364('0x13')]=0x0;this[_0x6364('0x14')]=0x0;for(var _0x5d309e=0x0;_0x5d309e<this[_0x6364('0xc')]['length'];_0x5d309e+=0x1){if(this[_0x6364('0xc')][_0x5d309e][_0x6364('0x15')]){this[_0x6364('0x13')]+=0x1;}if(this['Agents'][_0x5d309e][_0x6364('0x16')]){this[_0x6364('0x14')]+=0x1;}}this[_0x6364('0x17')]=this[_0x6364('0x13')]-this[_0x6364('0x14')];this[_0x6364('0x17')]=this[_0x6364('0x17')]>=0x0?this['available']:0x0;var _0xfb0fbb={'id':this['id'],'available':this['available'],'loggedIn':this[_0x6364('0x13')],'name':this[_0x6364('0x8')],'paused':this[_0x6364('0x14')],'waiting':this[_0x6364('0x18')]};var _0x16c7ce=md5(JSON['stringify'](_0xfb0fbb));if(this[_0x6364('0x1')]!==_0x16c7ce){this[_0x6364('0x1')]=_0x16c7ce;io['to'](util['format'](_0x6364('0x19'),_0xfb0fbb['name']))[_0x6364('0x1a')](_0x6364('0x1b'),_0xfb0fbb);}};module[_0x6364('0x1c')]=MailQueue;
\ No newline at end of file
index 832da2d..0943bff 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5fdc=['online','openchannelPause','available','stringify','emit','openchannel_queue:save','exports','lodash','md5','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRouting','prototype','_rr','updateRealtime','loggedIn','paused','length'];(function(_0x7ea672,_0x11d735){var _0x153614=function(_0x17b420){while(--_0x17b420){_0x7ea672['push'](_0x7ea672['shift']());}};_0x153614(++_0x11d735);}(_0x5fdc,0x129));var _0xc5fd=function(_0x267490,_0x433d89){_0x267490=_0x267490-0x0;var _0x3b8312=_0x5fdc[_0x267490];return _0x3b8312;};'use strict';var _=require(_0xc5fd('0x0'));var md5=require(_0xc5fd('0x1'));var util=require('util');var Redis=require(_0xc5fd('0x2'));var config=require(_0xc5fd('0x3'));config[_0xc5fd('0x4')]=_[_0xc5fd('0x5')](config[_0xc5fd('0x4')],{'host':_0xc5fd('0x6'),'port':0x18eb});var io=require(_0xc5fd('0x7'))(new Redis(config['redis']));function OpenchannelQueue(_0x50f3a7){this['id']=_0x50f3a7['id']||0x0;this['name']=_0x50f3a7[_0xc5fd('0x8')]||'';this[_0xc5fd('0x9')]=_0x50f3a7[_0xc5fd('0x9')]||0xa;this[_0xc5fd('0xa')]=_0x50f3a7[_0xc5fd('0xa')]||_0xc5fd('0xb');this['Agents']=_0x50f3a7[_0xc5fd('0xc')];this[_0xc5fd('0xd')]={};this[_0xc5fd('0xe')]=0x0;this[_0xc5fd('0x1')]='';this[_0xc5fd('0xf')]();this['updateRealtime']();}OpenchannelQueue[_0xc5fd('0x10')][_0xc5fd('0xf')]=function(){var _0x2c2d1a=this[_0xc5fd('0xd')][_0xc5fd('0x11')];this['mapAgentsId']=_['map'](this[_0xc5fd('0xc')],'id');this[_0xc5fd('0xd')][_0xc5fd('0x11')]=_0x2c2d1a;};OpenchannelQueue[_0xc5fd('0x10')][_0xc5fd('0x12')]=function(){this[_0xc5fd('0x13')]=0x0;this[_0xc5fd('0x14')]=0x0;for(var _0x18d827=0x0;_0x18d827<this[_0xc5fd('0xc')][_0xc5fd('0x15')];_0x18d827+=0x1){if(this['Agents'][_0x18d827][_0xc5fd('0x16')]){this['loggedIn']+=0x1;}if(this[_0xc5fd('0xc')][_0x18d827][_0xc5fd('0x17')]){this[_0xc5fd('0x14')]+=0x1;}}this[_0xc5fd('0x18')]=this[_0xc5fd('0x13')]-this['paused'];this[_0xc5fd('0x18')]=this['available']>=0x0?this['available']:0x0;var _0x3f01d5={'id':this['id'],'available':this[_0xc5fd('0x18')],'loggedIn':this['loggedIn'],'name':this[_0xc5fd('0x8')],'paused':this['paused'],'waiting':this[_0xc5fd('0xe')]};var _0xf8ff4d=md5(JSON[_0xc5fd('0x19')](_0x3f01d5));if(this[_0xc5fd('0x1')]!==_0xf8ff4d){this[_0xc5fd('0x1')]=_0xf8ff4d;io['to'](util['format']('openchannel:queue:%s',_0x3f01d5[_0xc5fd('0x8')]))[_0xc5fd('0x1a')](_0xc5fd('0x1b'),_0x3f01d5);}};module[_0xc5fd('0x1c')]=OpenchannelQueue;
\ No newline at end of file
+var _0xac79=['strategy','beepall','Agents','mapAgentsId','waiting','updateRouting','prototype','_rr','map','updateRealtime','loggedIn','length','online','openchannelPause','paused','available','name','stringify','format','openchannel:queue:%s','openchannel_queue:save','lodash','md5','util','ioredis','../../../config/environment','redis','localhost','socket.io-emitter','timeout'];(function(_0x2c3a60,_0x26468a){var _0x161299=function(_0x3f0c40){while(--_0x3f0c40){_0x2c3a60['push'](_0x2c3a60['shift']());}};_0x161299(++_0x26468a);}(_0xac79,0xc9));var _0x9ac7=function(_0x3646e0,_0x3ad91c){_0x3646e0=_0x3646e0-0x0;var _0x5e8949=_0xac79[_0x3646e0];return _0x5e8949;};'use strict';var _=require(_0x9ac7('0x0'));var md5=require(_0x9ac7('0x1'));var util=require(_0x9ac7('0x2'));var Redis=require(_0x9ac7('0x3'));var config=require(_0x9ac7('0x4'));config[_0x9ac7('0x5')]=_['defaults'](config['redis'],{'host':_0x9ac7('0x6'),'port':0x18eb});var io=require(_0x9ac7('0x7'))(new Redis(config[_0x9ac7('0x5')]));function OpenchannelQueue(_0x3c667e){this['id']=_0x3c667e['id']||0x0;this['name']=_0x3c667e['name']||'';this[_0x9ac7('0x8')]=_0x3c667e[_0x9ac7('0x8')]||0xa;this[_0x9ac7('0x9')]=_0x3c667e['strategy']||_0x9ac7('0xa');this[_0x9ac7('0xb')]=_0x3c667e[_0x9ac7('0xb')];this[_0x9ac7('0xc')]={};this[_0x9ac7('0xd')]=0x0;this['md5']='';this[_0x9ac7('0xe')]();this['updateRealtime']();}OpenchannelQueue[_0x9ac7('0xf')]['updateRouting']=function(){var _0x255781=this[_0x9ac7('0xc')][_0x9ac7('0x10')];this[_0x9ac7('0xc')]=_[_0x9ac7('0x11')](this[_0x9ac7('0xb')],'id');this[_0x9ac7('0xc')][_0x9ac7('0x10')]=_0x255781;};OpenchannelQueue['prototype'][_0x9ac7('0x12')]=function(){this[_0x9ac7('0x13')]=0x0;this['paused']=0x0;for(var _0x39cd4c=0x0;_0x39cd4c<this[_0x9ac7('0xb')][_0x9ac7('0x14')];_0x39cd4c+=0x1){if(this[_0x9ac7('0xb')][_0x39cd4c][_0x9ac7('0x15')]){this[_0x9ac7('0x13')]+=0x1;}if(this['Agents'][_0x39cd4c][_0x9ac7('0x16')]){this[_0x9ac7('0x17')]+=0x1;}}this[_0x9ac7('0x18')]=this['loggedIn']-this[_0x9ac7('0x17')];this[_0x9ac7('0x18')]=this[_0x9ac7('0x18')]>=0x0?this[_0x9ac7('0x18')]:0x0;var _0x4b9239={'id':this['id'],'available':this[_0x9ac7('0x18')],'loggedIn':this['loggedIn'],'name':this[_0x9ac7('0x19')],'paused':this[_0x9ac7('0x17')],'waiting':this[_0x9ac7('0xd')]};var _0x9d5ad9=md5(JSON[_0x9ac7('0x1a')](_0x4b9239));if(this[_0x9ac7('0x1')]!==_0x9d5ad9){this[_0x9ac7('0x1')]=_0x9d5ad9;io['to'](util[_0x9ac7('0x1b')](_0x9ac7('0x1c'),_0x4b9239[_0x9ac7('0x19')]))['emit'](_0x9ac7('0x1d'),_0x4b9239);}};module['exports']=OpenchannelQueue;
\ No newline at end of file
index 1e6f13e..87712c7 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8a9b=['sms:queue:%s','emit','sms_queue:save','lodash','md5','../../../config/environment','redis','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRealtime','updateRouting','_rr','map','loggedIn','paused','online','smsPause','available','stringify','format'];(function(_0xdefbc3,_0x1ea49a){var _0x367798=function(_0x594678){while(--_0x594678){_0xdefbc3['push'](_0xdefbc3['shift']());}};_0x367798(++_0x1ea49a);}(_0x8a9b,0x12c));var _0xb8a9=function(_0x29b243,_0x20ae12){_0x29b243=_0x29b243-0x0;var _0xd4483b=_0x8a9b[_0x29b243];return _0xd4483b;};'use strict';var _=require(_0xb8a9('0x0'));var md5=require(_0xb8a9('0x1'));var util=require('util');var Redis=require('ioredis');var config=require(_0xb8a9('0x2'));config['redis']=_['defaults'](config[_0xb8a9('0x3')],{'host':_0xb8a9('0x4'),'port':0x18eb});var io=require(_0xb8a9('0x5'))(new Redis(config['redis']));function SmsQueue(_0x25e05f){this['id']=_0x25e05f['id']||0x0;this['name']=_0x25e05f[_0xb8a9('0x6')]||'';this[_0xb8a9('0x7')]=_0x25e05f[_0xb8a9('0x7')]||0xa;this[_0xb8a9('0x8')]=_0x25e05f['strategy']||_0xb8a9('0x9');this[_0xb8a9('0xa')]=_0x25e05f[_0xb8a9('0xa')];this[_0xb8a9('0xb')]={};this[_0xb8a9('0xc')]=0x0;this['md5']='';this['updateRouting']();this[_0xb8a9('0xd')]();}SmsQueue['prototype'][_0xb8a9('0xe')]=function(){var _0x5c1655=this['mapAgentsId'][_0xb8a9('0xf')];this[_0xb8a9('0xb')]=_[_0xb8a9('0x10')](this[_0xb8a9('0xa')],'id');this[_0xb8a9('0xb')]['_rr']=_0x5c1655;};SmsQueue['prototype']['updateRealtime']=function(){this[_0xb8a9('0x11')]=0x0;this[_0xb8a9('0x12')]=0x0;for(var _0x4c160a=0x0;_0x4c160a<this[_0xb8a9('0xa')]['length'];_0x4c160a+=0x1){if(this[_0xb8a9('0xa')][_0x4c160a][_0xb8a9('0x13')]){this['loggedIn']+=0x1;}if(this[_0xb8a9('0xa')][_0x4c160a][_0xb8a9('0x14')]){this['paused']+=0x1;}}this[_0xb8a9('0x15')]=this[_0xb8a9('0x11')]-this[_0xb8a9('0x12')];this[_0xb8a9('0x15')]=this[_0xb8a9('0x15')]>=0x0?this['available']:0x0;var _0x28d984={'id':this['id'],'available':this[_0xb8a9('0x15')],'loggedIn':this[_0xb8a9('0x11')],'name':this['name'],'paused':this[_0xb8a9('0x12')],'waiting':this[_0xb8a9('0xc')]};var _0x11334e=md5(JSON[_0xb8a9('0x16')](_0x28d984));if(this[_0xb8a9('0x1')]!==_0x11334e){this[_0xb8a9('0x1')]=_0x11334e;io['to'](util[_0xb8a9('0x17')](_0xb8a9('0x18'),_0x28d984[_0xb8a9('0x6')]))[_0xb8a9('0x19')](_0xb8a9('0x1a'),_0x28d984);}};module['exports']=SmsQueue;
\ No newline at end of file
+var _0x8435=['util','ioredis','../../../config/environment','redis','defaults','localhost','socket.io-emitter','name','timeout','strategy','beepall','Agents','mapAgentsId','waiting','updateRealtime','updateRouting','_rr','map','prototype','loggedIn','paused','smsPause','available','stringify','format','sms:queue:%s','emit','sms_queue:save','exports','lodash','md5'];(function(_0x4b6653,_0x24d3be){var _0x1b7f97=function(_0x2787ad){while(--_0x2787ad){_0x4b6653['push'](_0x4b6653['shift']());}};_0x1b7f97(++_0x24d3be);}(_0x8435,0xf6));var _0x5843=function(_0x224688,_0x5b62a8){_0x224688=_0x224688-0x0;var _0x42b597=_0x8435[_0x224688];return _0x42b597;};'use strict';var _=require(_0x5843('0x0'));var md5=require(_0x5843('0x1'));var util=require(_0x5843('0x2'));var Redis=require(_0x5843('0x3'));var config=require(_0x5843('0x4'));config[_0x5843('0x5')]=_[_0x5843('0x6')](config[_0x5843('0x5')],{'host':_0x5843('0x7'),'port':0x18eb});var io=require(_0x5843('0x8'))(new Redis(config[_0x5843('0x5')]));function SmsQueue(_0x3daaf6){this['id']=_0x3daaf6['id']||0x0;this[_0x5843('0x9')]=_0x3daaf6[_0x5843('0x9')]||'';this['timeout']=_0x3daaf6[_0x5843('0xa')]||0xa;this['strategy']=_0x3daaf6[_0x5843('0xb')]||_0x5843('0xc');this['Agents']=_0x3daaf6[_0x5843('0xd')];this[_0x5843('0xe')]={};this[_0x5843('0xf')]=0x0;this[_0x5843('0x1')]='';this['updateRouting']();this[_0x5843('0x10')]();}SmsQueue['prototype'][_0x5843('0x11')]=function(){var _0x50be30=this['mapAgentsId'][_0x5843('0x12')];this[_0x5843('0xe')]=_[_0x5843('0x13')](this[_0x5843('0xd')],'id');this[_0x5843('0xe')]['_rr']=_0x50be30;};SmsQueue[_0x5843('0x14')][_0x5843('0x10')]=function(){this[_0x5843('0x15')]=0x0;this[_0x5843('0x16')]=0x0;for(var _0x9587db=0x0;_0x9587db<this['Agents']['length'];_0x9587db+=0x1){if(this['Agents'][_0x9587db]['online']){this[_0x5843('0x15')]+=0x1;}if(this[_0x5843('0xd')][_0x9587db][_0x5843('0x17')]){this[_0x5843('0x16')]+=0x1;}}this[_0x5843('0x18')]=this['loggedIn']-this[_0x5843('0x16')];this[_0x5843('0x18')]=this[_0x5843('0x18')]>=0x0?this['available']:0x0;var _0x26765e={'id':this['id'],'available':this[_0x5843('0x18')],'loggedIn':this[_0x5843('0x15')],'name':this[_0x5843('0x9')],'paused':this[_0x5843('0x16')],'waiting':this[_0x5843('0xf')]};var _0x1b8006=md5(JSON[_0x5843('0x19')](_0x26765e));if(this[_0x5843('0x1')]!==_0x1b8006){this['md5']=_0x1b8006;io['to'](util[_0x5843('0x1a')](_0x5843('0x1b'),_0x26765e[_0x5843('0x9')]))[_0x5843('0x1c')](_0x5843('0x1d'),_0x26765e);}};module[_0x5843('0x1e')]=SmsQueue;
\ No newline at end of file
index eaab010..c083e59 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x55b8=['initIntervals','initOpenchannelQueues','updateRouting','updateRealtime','initChatQueues','initSmsQueues','initMailQueues','faxQueues','exports','bluebird','util','../model/agent','../model/interval','../model/openchannelQueue','../model/smsQueue','../model/faxQueue','agents','intervals','openchannelQueues','chatQueues','smsQueues','mailQueues','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','hasOwnProperty','mergeFromDatabase','prototype','length','isUndefined'];(function(_0x1d24eb,_0x12295b){var _0x1dc576=function(_0x4d5770){while(--_0x4d5770){_0x1d24eb['push'](_0x1d24eb['shift']());}};_0x1dc576(++_0x12295b);}(_0x55b8,0x1e9));var _0x855b=function(_0x67ea54,_0x3f5014){_0x67ea54=_0x67ea54-0x0;var _0x3fae28=_0x55b8[_0x67ea54];return _0x3fae28;};'use strict';var BPromise=require(_0x855b('0x0'));var util=require(_0x855b('0x1'));var _=require('lodash');var moment=require('moment');var Agent=require(_0x855b('0x2'));var Interval=require(_0x855b('0x3'));var OpenchannelQueue=require(_0x855b('0x4'));var ChatQueue=require('../model/chatQueue');var SmsQueue=require(_0x855b('0x5'));var MailQueue=require('../model/mailQueue');var FaxQueue=require(_0x855b('0x6'));var Realtime=function(){this[_0x855b('0x7')]={};this[_0x855b('0x8')]={};this[_0x855b('0x9')]={};this[_0x855b('0xa')]={};this[_0x855b('0xb')]={};this[_0x855b('0xc')]={};this['faxQueues']={};this[_0x855b('0xd')]={};this[_0x855b('0xe')]={};this[_0x855b('0xf')]={};this[_0x855b('0x10')]={};this[_0x855b('0x11')]={};};function freeIsNotKey(_0x565493,_0x394b7b,_0x331a3e){var _0x497891=_['mapKeys'](_0x565493,function(_0xc6e35b,_0x1061f2){return _0xc6e35b[_0x331a3e];});for(var _0x68b09 in _0x394b7b){if(_0x394b7b[_0x855b('0x12')](_0x68b09)){if(!_0x497891[_0x68b09]){delete _0x394b7b[_0x68b09];}}}}Realtime['prototype'][_0x855b('0x13')]=function(_0x5a256f,_0x599fda){for(var _0x3d3321 in _0x599fda){if(_0x5a256f[_0x855b('0x12')](_0x3d3321)){_0x5a256f[_0x3d3321]=_0x599fda[_0x3d3321];}}};Realtime[_0x855b('0x14')]['initAgents']=function(){var _0x9ae658=this;return function(_0x18a730){if(_0x18a730){freeIsNotKey(_0x18a730,_0x9ae658[_0x855b('0x7')],'id');for(var _0x5b8a9a=0x0,_0x3bc07c={},_0x266089={};_0x5b8a9a<_0x18a730[_0x855b('0x15')];_0x5b8a9a+=0x1){_0x3bc07c=_0x18a730[_0x5b8a9a];if(_[_0x855b('0x16')](_0x9ae658[_0x855b('0x7')][_0x3bc07c['id']])){_0x9ae658['agents'][_0x3bc07c['id']]=new Agent(_0x3bc07c);}else{_0x9ae658[_0x855b('0x13')](_0x9ae658['agents'][_0x3bc07c['id']],_0x3bc07c);}}}return _0x9ae658[_0x855b('0x7')];};};Realtime['prototype'][_0x855b('0x17')]=function(){var _0x1bcfe3=this;return function(_0x2f319d){if(_0x2f319d){freeIsNotKey(_0x2f319d,_0x1bcfe3[_0x855b('0x8')],'id');for(var _0x4912fd=0x0,_0x26e8c4={},_0x181b22={};_0x4912fd<_0x2f319d[_0x855b('0x15')];_0x4912fd+=0x1){_0x26e8c4=_0x2f319d[_0x4912fd];if(_[_0x855b('0x16')](_0x1bcfe3[_0x855b('0x8')][_0x26e8c4['id']])){_0x1bcfe3[_0x855b('0x8')][_0x26e8c4['id']]=new Interval(_0x26e8c4);}else{_0x1bcfe3[_0x855b('0x13')](_0x1bcfe3[_0x855b('0x8')][_0x26e8c4['id']],_0x26e8c4);}}}return _0x1bcfe3[_0x855b('0x8')];};};Realtime['prototype'][_0x855b('0x18')]=function(){var _0x2b957a=this;return function(_0x22d2d8){if(_0x22d2d8){freeIsNotKey(_0x22d2d8,_0x2b957a[_0x855b('0x9')],'id');for(var _0x371f37=0x0,_0x124f15={},_0x40f15b={};_0x371f37<_0x22d2d8[_0x855b('0x15')];_0x371f37+=0x1){_0x124f15=_0x22d2d8[_0x371f37];if(_[_0x855b('0x16')](_0x2b957a['openchannelQueues'][_0x124f15['id']])){_0x2b957a['openchannelQueues'][_0x124f15['id']]=new OpenchannelQueue(_0x124f15);}else{_0x2b957a['mergeFromDatabase'](_0x2b957a['openchannelQueues'][_0x124f15['id']],_0x124f15);}_0x2b957a[_0x855b('0x9')][_0x124f15['id']][_0x855b('0x19')]();_0x2b957a[_0x855b('0x9')][_0x124f15['id']][_0x855b('0x1a')]();}}return _0x2b957a[_0x855b('0x9')];};};Realtime[_0x855b('0x14')][_0x855b('0x1b')]=function(){var _0xe720b2=this;return function(_0x12eb72){if(_0x12eb72){freeIsNotKey(_0x12eb72,_0xe720b2[_0x855b('0xa')],'id');for(var _0x7b49e4=0x0,_0x59bf03={},_0x20fb5b={};_0x7b49e4<_0x12eb72[_0x855b('0x15')];_0x7b49e4+=0x1){_0x59bf03=_0x12eb72[_0x7b49e4];if(_[_0x855b('0x16')](_0xe720b2['chatQueues'][_0x59bf03['id']])){_0xe720b2[_0x855b('0xa')][_0x59bf03['id']]=new ChatQueue(_0x59bf03);}else{_0xe720b2[_0x855b('0x13')](_0xe720b2[_0x855b('0xa')][_0x59bf03['id']],_0x59bf03);}_0xe720b2[_0x855b('0xa')][_0x59bf03['id']][_0x855b('0x19')]();_0xe720b2['chatQueues'][_0x59bf03['id']][_0x855b('0x1a')]();}}return _0xe720b2[_0x855b('0xa')];};};Realtime['prototype'][_0x855b('0x1c')]=function(){var _0x473d6b=this;return function(_0x1899f6){if(_0x1899f6){freeIsNotKey(_0x1899f6,_0x473d6b[_0x855b('0xb')],'id');for(var _0x2e5a5d=0x0,_0x488417={},_0x4effa0={};_0x2e5a5d<_0x1899f6[_0x855b('0x15')];_0x2e5a5d+=0x1){_0x488417=_0x1899f6[_0x2e5a5d];if(_[_0x855b('0x16')](_0x473d6b[_0x855b('0xb')][_0x488417['id']])){_0x473d6b[_0x855b('0xb')][_0x488417['id']]=new SmsQueue(_0x488417);}else{_0x473d6b[_0x855b('0x13')](_0x473d6b['smsQueues'][_0x488417['id']],_0x488417);}_0x473d6b[_0x855b('0xb')][_0x488417['id']][_0x855b('0x19')]();_0x473d6b['smsQueues'][_0x488417['id']][_0x855b('0x1a')]();}}return _0x473d6b[_0x855b('0xb')];};};Realtime[_0x855b('0x14')][_0x855b('0x1d')]=function(){var _0x44170e=this;return function(_0x7e7f0c){if(_0x7e7f0c){freeIsNotKey(_0x7e7f0c,_0x44170e['mailQueues'],'id');for(var _0x2b4e7f=0x0,_0x394042={},_0x5bae7f={};_0x2b4e7f<_0x7e7f0c[_0x855b('0x15')];_0x2b4e7f+=0x1){_0x394042=_0x7e7f0c[_0x2b4e7f];if(_['isUndefined'](_0x44170e[_0x855b('0xc')][_0x394042['id']])){_0x44170e[_0x855b('0xc')][_0x394042['id']]=new MailQueue(_0x394042);}else{_0x44170e[_0x855b('0x13')](_0x44170e[_0x855b('0xc')][_0x394042['id']],_0x394042);}_0x44170e[_0x855b('0xc')][_0x394042['id']][_0x855b('0x19')]();_0x44170e[_0x855b('0xc')][_0x394042['id']]['updateRealtime']();}}return _0x44170e['mailQueues'];};};Realtime[_0x855b('0x14')]['initFaxQueues']=function(){var _0xcf81cb=this;return function(_0xeb5682){if(_0xeb5682){freeIsNotKey(_0xeb5682,_0xcf81cb[_0x855b('0x1e')],'id');for(var _0x25e15a=0x0,_0x1fd512={},_0x2e3e05={};_0x25e15a<_0xeb5682[_0x855b('0x15')];_0x25e15a+=0x1){_0x1fd512=_0xeb5682[_0x25e15a];if(_[_0x855b('0x16')](_0xcf81cb[_0x855b('0x1e')][_0x1fd512['id']])){_0xcf81cb[_0x855b('0x1e')][_0x1fd512['id']]=new FaxQueue(_0x1fd512);}else{_0xcf81cb[_0x855b('0x13')](_0xcf81cb[_0x855b('0x1e')][_0x1fd512['id']],_0x1fd512);}_0xcf81cb[_0x855b('0x1e')][_0x1fd512['id']]['updateRouting']();_0xcf81cb['faxQueues'][_0x1fd512['id']]['updateRealtime']();}}return _0xcf81cb[_0x855b('0x1e')];};};module[_0x855b('0x1f')]=Realtime;
\ No newline at end of file
+var _0x434b=['intervals','isUndefined','updateRouting','updateRealtime','initChatQueues','chatQueues','initMailQueues','initFaxQueues','exports','bluebird','util','lodash','moment','../model/interval','../model/openchannelQueue','../model/chatQueue','../model/smsQueue','../model/mailQueue','agents','openchannelQueues','smsQueues','mailQueues','faxQueues','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','mapKeys','hasOwnProperty','prototype','mergeFromDatabase','length','initIntervals'];(function(_0x2cca8b,_0x3af354){var _0x365426=function(_0x4a45b5){while(--_0x4a45b5){_0x2cca8b['push'](_0x2cca8b['shift']());}};_0x365426(++_0x3af354);}(_0x434b,0x15d));var _0xb434=function(_0x5a95fa,_0x4a2fc9){_0x5a95fa=_0x5a95fa-0x0;var _0x1a61b8=_0x434b[_0x5a95fa];return _0x1a61b8;};'use strict';var BPromise=require(_0xb434('0x0'));var util=require(_0xb434('0x1'));var _=require(_0xb434('0x2'));var moment=require(_0xb434('0x3'));var Agent=require('../model/agent');var Interval=require(_0xb434('0x4'));var OpenchannelQueue=require(_0xb434('0x5'));var ChatQueue=require(_0xb434('0x6'));var SmsQueue=require(_0xb434('0x7'));var MailQueue=require(_0xb434('0x8'));var FaxQueue=require('../model/faxQueue');var Realtime=function(){this[_0xb434('0x9')]={};this['intervals']={};this[_0xb434('0xa')]={};this['chatQueues']={};this[_0xb434('0xb')]={};this[_0xb434('0xc')]={};this[_0xb434('0xd')]={};this[_0xb434('0xe')]={};this[_0xb434('0xf')]={};this[_0xb434('0x10')]={};this[_0xb434('0x11')]={};this[_0xb434('0x12')]={};};function freeIsNotKey(_0x1a5a4a,_0x26f5bc,_0x309c38){var _0x126cc6=_[_0xb434('0x13')](_0x1a5a4a,function(_0x5cf8c5,_0x2d2cf5){return _0x5cf8c5[_0x309c38];});for(var _0x246faf in _0x26f5bc){if(_0x26f5bc[_0xb434('0x14')](_0x246faf)){if(!_0x126cc6[_0x246faf]){delete _0x26f5bc[_0x246faf];}}}}Realtime[_0xb434('0x15')][_0xb434('0x16')]=function(_0x5f093f,_0x51cea0){for(var _0x5aeb72 in _0x51cea0){if(_0x5f093f[_0xb434('0x14')](_0x5aeb72)){_0x5f093f[_0x5aeb72]=_0x51cea0[_0x5aeb72];}}};Realtime[_0xb434('0x15')]['initAgents']=function(){var _0x420063=this;return function(_0x5ac509){if(_0x5ac509){freeIsNotKey(_0x5ac509,_0x420063[_0xb434('0x9')],'id');for(var _0x1be022=0x0,_0x38d33c={},_0x1f5178={};_0x1be022<_0x5ac509[_0xb434('0x17')];_0x1be022+=0x1){_0x38d33c=_0x5ac509[_0x1be022];if(_['isUndefined'](_0x420063[_0xb434('0x9')][_0x38d33c['id']])){_0x420063[_0xb434('0x9')][_0x38d33c['id']]=new Agent(_0x38d33c);}else{_0x420063['mergeFromDatabase'](_0x420063[_0xb434('0x9')][_0x38d33c['id']],_0x38d33c);}}}return _0x420063[_0xb434('0x9')];};};Realtime[_0xb434('0x15')][_0xb434('0x18')]=function(){var _0x55b977=this;return function(_0x12bf42){if(_0x12bf42){freeIsNotKey(_0x12bf42,_0x55b977[_0xb434('0x19')],'id');for(var _0x386943=0x0,_0x367c4d={},_0xd759cc={};_0x386943<_0x12bf42[_0xb434('0x17')];_0x386943+=0x1){_0x367c4d=_0x12bf42[_0x386943];if(_[_0xb434('0x1a')](_0x55b977[_0xb434('0x19')][_0x367c4d['id']])){_0x55b977[_0xb434('0x19')][_0x367c4d['id']]=new Interval(_0x367c4d);}else{_0x55b977['mergeFromDatabase'](_0x55b977[_0xb434('0x19')][_0x367c4d['id']],_0x367c4d);}}}return _0x55b977[_0xb434('0x19')];};};Realtime[_0xb434('0x15')]['initOpenchannelQueues']=function(){var _0x4d3825=this;return function(_0x239abe){if(_0x239abe){freeIsNotKey(_0x239abe,_0x4d3825['openchannelQueues'],'id');for(var _0x591513=0x0,_0x2530a3={},_0x38df30={};_0x591513<_0x239abe[_0xb434('0x17')];_0x591513+=0x1){_0x2530a3=_0x239abe[_0x591513];if(_[_0xb434('0x1a')](_0x4d3825[_0xb434('0xa')][_0x2530a3['id']])){_0x4d3825[_0xb434('0xa')][_0x2530a3['id']]=new OpenchannelQueue(_0x2530a3);}else{_0x4d3825[_0xb434('0x16')](_0x4d3825[_0xb434('0xa')][_0x2530a3['id']],_0x2530a3);}_0x4d3825[_0xb434('0xa')][_0x2530a3['id']][_0xb434('0x1b')]();_0x4d3825[_0xb434('0xa')][_0x2530a3['id']][_0xb434('0x1c')]();}}return _0x4d3825[_0xb434('0xa')];};};Realtime[_0xb434('0x15')][_0xb434('0x1d')]=function(){var _0x2ee4ad=this;return function(_0xa67882){if(_0xa67882){freeIsNotKey(_0xa67882,_0x2ee4ad['chatQueues'],'id');for(var _0x56df18=0x0,_0x5f2539={},_0x2f59ef={};_0x56df18<_0xa67882['length'];_0x56df18+=0x1){_0x5f2539=_0xa67882[_0x56df18];if(_[_0xb434('0x1a')](_0x2ee4ad[_0xb434('0x1e')][_0x5f2539['id']])){_0x2ee4ad['chatQueues'][_0x5f2539['id']]=new ChatQueue(_0x5f2539);}else{_0x2ee4ad[_0xb434('0x16')](_0x2ee4ad[_0xb434('0x1e')][_0x5f2539['id']],_0x5f2539);}_0x2ee4ad[_0xb434('0x1e')][_0x5f2539['id']][_0xb434('0x1b')]();_0x2ee4ad[_0xb434('0x1e')][_0x5f2539['id']][_0xb434('0x1c')]();}}return _0x2ee4ad['chatQueues'];};};Realtime[_0xb434('0x15')]['initSmsQueues']=function(){var _0x583135=this;return function(_0x3698f8){if(_0x3698f8){freeIsNotKey(_0x3698f8,_0x583135[_0xb434('0xb')],'id');for(var _0x2cab7e=0x0,_0x4db66a={},_0x3b697a={};_0x2cab7e<_0x3698f8[_0xb434('0x17')];_0x2cab7e+=0x1){_0x4db66a=_0x3698f8[_0x2cab7e];if(_[_0xb434('0x1a')](_0x583135['smsQueues'][_0x4db66a['id']])){_0x583135['smsQueues'][_0x4db66a['id']]=new SmsQueue(_0x4db66a);}else{_0x583135[_0xb434('0x16')](_0x583135['smsQueues'][_0x4db66a['id']],_0x4db66a);}_0x583135['smsQueues'][_0x4db66a['id']][_0xb434('0x1b')]();_0x583135[_0xb434('0xb')][_0x4db66a['id']][_0xb434('0x1c')]();}}return _0x583135[_0xb434('0xb')];};};Realtime[_0xb434('0x15')][_0xb434('0x1f')]=function(){var _0x497102=this;return function(_0xf803f1){if(_0xf803f1){freeIsNotKey(_0xf803f1,_0x497102['mailQueues'],'id');for(var _0x57ab32=0x0,_0x1ca092={},_0x184d67={};_0x57ab32<_0xf803f1[_0xb434('0x17')];_0x57ab32+=0x1){_0x1ca092=_0xf803f1[_0x57ab32];if(_[_0xb434('0x1a')](_0x497102[_0xb434('0xc')][_0x1ca092['id']])){_0x497102[_0xb434('0xc')][_0x1ca092['id']]=new MailQueue(_0x1ca092);}else{_0x497102[_0xb434('0x16')](_0x497102[_0xb434('0xc')][_0x1ca092['id']],_0x1ca092);}_0x497102[_0xb434('0xc')][_0x1ca092['id']][_0xb434('0x1b')]();_0x497102['mailQueues'][_0x1ca092['id']][_0xb434('0x1c')]();}}return _0x497102[_0xb434('0xc')];};};Realtime[_0xb434('0x15')][_0xb434('0x20')]=function(){var _0x17712a=this;return function(_0x2d6118){if(_0x2d6118){freeIsNotKey(_0x2d6118,_0x17712a[_0xb434('0xd')],'id');for(var _0x2b0d03=0x0,_0x4dd272={},_0x45f23b={};_0x2b0d03<_0x2d6118[_0xb434('0x17')];_0x2b0d03+=0x1){_0x4dd272=_0x2d6118[_0x2b0d03];if(_['isUndefined'](_0x17712a[_0xb434('0xd')][_0x4dd272['id']])){_0x17712a[_0xb434('0xd')][_0x4dd272['id']]=new FaxQueue(_0x4dd272);}else{_0x17712a['mergeFromDatabase'](_0x17712a[_0xb434('0xd')][_0x4dd272['id']],_0x4dd272);}_0x17712a['faxQueues'][_0x4dd272['id']]['updateRouting']();_0x17712a[_0xb434('0xd')][_0x4dd272['id']][_0xb434('0x1c')]();}}return _0x17712a['faxQueues'];};};module[_0xb434('0x21')]=Realtime;
\ No newline at end of file
index 76a6a6b..72d6e05 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe75d=['addTagsToChatInteraction','update','UpdateChatInteraction','addTags','Request','AddTagsToChatInteraction'];(function(_0x2641f9,_0x26715f){var _0x585741=function(_0x2d1462){while(--_0x2d1462){_0x2641f9['push'](_0x2641f9['shift']());}};_0x585741(++_0x26715f);}(_0xe75d,0x199));var _0xde75=function(_0x53dd93,_0x265621){_0x53dd93=_0x53dd93-0x0;var _0x94dce5=_0xe75d[_0x53dd93];return _0x94dce5;};'use strict';var client=require('../client');exports[_0xde75('0x0')]=function(_0x3ac2b4,_0x8cb0ac){return client['Request'](_0xde75('0x1'),{'body':_0x8cb0ac,'options':{'where':{'id':_0x3ac2b4}},'log':'updateChatInteraction'});};exports[_0xde75('0x2')]=function(_0xcdd457,_0x201037){return client[_0xde75('0x3')](_0xde75('0x4'),{'body':_0x201037,'options':{'where':{'id':_0xcdd457}},'log':_0xde75('0x5')});};
\ No newline at end of file
+var _0xa072=['AddTagsToChatInteraction','../client','Request','updateChatInteraction','addTags'];(function(_0x32ff74,_0x5c1a7c){var _0x3a5b30=function(_0x59f5df){while(--_0x59f5df){_0x32ff74['push'](_0x32ff74['shift']());}};_0x3a5b30(++_0x5c1a7c);}(_0xa072,0xb5));var _0x2a07=function(_0x2e4cbf,_0x8763d3){_0x2e4cbf=_0x2e4cbf-0x0;var _0x52840f=_0xa072[_0x2e4cbf];return _0x52840f;};'use strict';var client=require(_0x2a07('0x0'));exports['update']=function(_0x3bffee,_0x3a2103){return client[_0x2a07('0x1')]('UpdateChatInteraction',{'body':_0x3a2103,'options':{'where':{'id':_0x3bffee}},'log':_0x2a07('0x2')});};exports[_0x2a07('0x3')]=function(_0x11a3e9,_0x6c4f87){return client['Request'](_0x2a07('0x4'),{'body':_0x6c4f87,'options':{'where':{'id':_0x11a3e9}},'log':'addTagsToChatInteraction'});};
\ No newline at end of file
index b7f99d5..dec3a69 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8417=['create','Request','CreateChatMessage','createChatMessage','../client'];(function(_0xafc9c8,_0x8faa77){var _0x58fee9=function(_0x942eac){while(--_0x942eac){_0xafc9c8['push'](_0xafc9c8['shift']());}};_0x58fee9(++_0x8faa77);}(_0x8417,0x1e4));var _0x7841=function(_0x4d72c5,_0xabc288){_0x4d72c5=_0x4d72c5-0x0;var _0x1cef65=_0x8417[_0x4d72c5];return _0x1cef65;};'use strict';var client=require(_0x7841('0x0'));exports[_0x7841('0x1')]=function(_0x2aab29){return client[_0x7841('0x2')](_0x7841('0x3'),{'body':_0x2aab29,'log':_0x7841('0x4')});};
\ No newline at end of file
+var _0x7fb2=['Request','../client'];(function(_0x4ff09b,_0x53f67d){var _0x3f5c2e=function(_0x124592){while(--_0x124592){_0x4ff09b['push'](_0x4ff09b['shift']());}};_0x3f5c2e(++_0x53f67d);}(_0x7fb2,0x18f));var _0x27fb=function(_0x1679c4,_0x30b30f){_0x1679c4=_0x1679c4-0x0;var _0x222839=_0x7fb2[_0x1679c4];return _0x222839;};'use strict';var client=require(_0x27fb('0x0'));exports['create']=function(_0x4443ad){return client[_0x27fb('0x1')]('CreateChatMessage',{'body':_0x4443ad,'log':'createChatMessage'});};
\ No newline at end of file
index c8604b2..d8e1ebd 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4aec=['timeout','strategy','User','Agents','online','chatPause','../client','getChatQueues','GetChatQueue','name'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x4aec,0x13c));var _0xc4ae=function(_0x1f741b,_0x396e39){_0x1f741b=_0x1f741b-0x0;var _0x537a58=_0x4aec[_0x1f741b];return _0x537a58;};'use strict';var client=require(_0xc4ae('0x0'));exports[_0xc4ae('0x1')]=function(){return function(){return client['Request'](_0xc4ae('0x2'),{'options':{'raw':![],'attributes':['id',_0xc4ae('0x3'),_0xc4ae('0x4'),_0xc4ae('0x5')],'include':[{'model':_0xc4ae('0x6'),'as':_0xc4ae('0x7'),'attributes':['id',_0xc4ae('0x3'),_0xc4ae('0x8'),_0xc4ae('0x9')]}]},'log':'getChatQueues'});};};
\ No newline at end of file
+var _0x782a=['Request','GetChatQueue','name','timeout','strategy','User','Agents','chatPause','../client','getChatQueues'];(function(_0x1be83f,_0x34395d){var _0x27db11=function(_0x3934e2){while(--_0x3934e2){_0x1be83f['push'](_0x1be83f['shift']());}};_0x27db11(++_0x34395d);}(_0x782a,0x1c0));var _0xa782=function(_0x2a5cb0,_0x34e467){_0x2a5cb0=_0x2a5cb0-0x0;var _0x59daea=_0x782a[_0x2a5cb0];return _0x59daea;};'use strict';var client=require(_0xa782('0x0'));exports[_0xa782('0x1')]=function(){return function(){return client[_0xa782('0x2')](_0xa782('0x3'),{'options':{'raw':![],'attributes':['id',_0xa782('0x4'),_0xa782('0x5'),_0xa782('0x6')],'include':[{'model':_0xa782('0x7'),'as':_0xa782('0x8'),'attributes':['id',_0xa782('0x4'),'online',_0xa782('0x9')]}]},'log':_0xa782('0x1')});};};
\ No newline at end of file
index 0f10d43..1b62021 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb32d=['../client','create','Request','CreateChatQueueReport','UpdateChatQueueReport','DESC'];(function(_0xd34516,_0x46b22f){var _0x18a5d0=function(_0x1737cc){while(--_0x1737cc){_0xd34516['push'](_0xd34516['shift']());}};_0x18a5d0(++_0x46b22f);}(_0xb32d,0x1da));var _0xdb32=function(_0x4f02ac,_0x5b385e){_0x4f02ac=_0x4f02ac-0x0;var _0x463598=_0xb32d[_0x4f02ac];return _0x463598;};'use strict';var client=require(_0xdb32('0x0'));exports[_0xdb32('0x1')]=function(_0x2d50e1){return client[_0xdb32('0x2')](_0xdb32('0x3'),{'body':_0x2d50e1,'log':'CreateChatQueueReport'});};exports['update']=function(_0x2fe96e,_0x2c5527){return client['Request'](_0xdb32('0x4'),{'body':_0x2c5527,'options':{'where':{'uniqueid':_0x2fe96e},'order':[['id',_0xdb32('0x5')]],'limit':0x1},'log':_0xdb32('0x4')});};
\ No newline at end of file
+var _0x04de=['create','Request','CreateChatQueueReport','update','UpdateChatQueueReport','../client'];(function(_0x4857fc,_0x4c9797){var _0x4b48c4=function(_0x594b97){while(--_0x594b97){_0x4857fc['push'](_0x4857fc['shift']());}};_0x4b48c4(++_0x4c9797);}(_0x04de,0x107));var _0xe04d=function(_0x4d0b1d,_0x2e80c9){_0x4d0b1d=_0x4d0b1d-0x0;var _0x4ef047=_0x04de[_0x4d0b1d];return _0x4ef047;};'use strict';var client=require(_0xe04d('0x0'));exports[_0xe04d('0x1')]=function(_0x398778){return client[_0xe04d('0x2')](_0xe04d('0x3'),{'body':_0x398778,'log':_0xe04d('0x3')});};exports[_0xe04d('0x4')]=function(_0x43c4b1,_0x2593a4){return client[_0xe04d('0x2')](_0xe04d('0x5'),{'body':_0x2593a4,'options':{'where':{'uniqueid':_0x43c4b1},'order':[['id','DESC']],'limit':0x1},'log':'UpdateChatQueueReport'});};
\ No newline at end of file
index 42dcab2..f12b47b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2645=['Request','UpdateFaxInteraction','updateFaxInteraction','addTags','AddTagsToFaxInteraction','addTagsToFaxInteraction','../client','update'];(function(_0x5ba559,_0x4fcff8){var _0x1b524a=function(_0x5ed034){while(--_0x5ed034){_0x5ba559['push'](_0x5ba559['shift']());}};_0x1b524a(++_0x4fcff8);}(_0x2645,0x1b6));var _0x5264=function(_0x3b6db6,_0x3b85ec){_0x3b6db6=_0x3b6db6-0x0;var _0x1854d0=_0x2645[_0x3b6db6];return _0x1854d0;};'use strict';var client=require(_0x5264('0x0'));exports[_0x5264('0x1')]=function(_0x889ced,_0x4b82d7){return client[_0x5264('0x2')](_0x5264('0x3'),{'body':_0x4b82d7,'options':{'where':{'id':_0x889ced}},'log':_0x5264('0x4')});};exports[_0x5264('0x5')]=function(_0x2742a7,_0x17cc22){return client['Request'](_0x5264('0x6'),{'body':_0x17cc22,'options':{'where':{'id':_0x2742a7}},'log':_0x5264('0x7')});};
\ No newline at end of file
+var _0x21fa=['AddTagsToFaxInteraction','../client','Request','UpdateFaxInteraction','updateFaxInteraction'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x21fa,0xfb));var _0xa21f=function(_0x8e1a1,_0x1ddf30){_0x8e1a1=_0x8e1a1-0x0;var _0xb9e3a5=_0x21fa[_0x8e1a1];return _0xb9e3a5;};'use strict';var client=require(_0xa21f('0x0'));exports['update']=function(_0xabc7b6,_0x53aee7){return client[_0xa21f('0x1')](_0xa21f('0x2'),{'body':_0x53aee7,'options':{'where':{'id':_0xabc7b6}},'log':_0xa21f('0x3')});};exports['addTags']=function(_0x19cad0,_0x5b9760){return client[_0xa21f('0x1')](_0xa21f('0x4'),{'body':_0x5b9760,'options':{'where':{'id':_0x19cad0}},'log':'addTagsToFaxInteraction'});};
\ No newline at end of file
index 52c3c78..61fd2f4 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3e34=['createFaxMessage','../client','create','Request'];(function(_0x4f73db,_0x3d86a4){var _0x20847a=function(_0x2315bb){while(--_0x2315bb){_0x4f73db['push'](_0x4f73db['shift']());}};_0x20847a(++_0x3d86a4);}(_0x3e34,0x121));var _0x43e3=function(_0x5a4b9d,_0x4af8fe){_0x5a4b9d=_0x5a4b9d-0x0;var _0xe424fc=_0x3e34[_0x5a4b9d];return _0xe424fc;};'use strict';var client=require(_0x43e3('0x0'));exports[_0x43e3('0x1')]=function(_0x55ca28){return client[_0x43e3('0x2')]('CreateFaxMessage',{'body':_0x55ca28,'log':_0x43e3('0x3')});};
\ No newline at end of file
+var _0xc3d1=['create','../client'];(function(_0xa42d2,_0x212a45){var _0x5db68b=function(_0x348dd8){while(--_0x348dd8){_0xa42d2['push'](_0xa42d2['shift']());}};_0x5db68b(++_0x212a45);}(_0xc3d1,0x151));var _0x1c3d=function(_0x5f1cf7,_0x47d9a9){_0x5f1cf7=_0x5f1cf7-0x0;var _0x2ab77b=_0xc3d1[_0x5f1cf7];return _0x2ab77b;};'use strict';var client=require(_0x1c3d('0x0'));exports[_0x1c3d('0x1')]=function(_0x15d1ad){return client['Request']('CreateFaxMessage',{'body':_0x15d1ad,'log':'createFaxMessage'});};
\ No newline at end of file
index 2c9ecb2..0d54a30 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x3409=['Request','GetFaxQueue','timeout','strategy','User','Agents','name','online','getFaxQueues'];(function(_0x870c3c,_0x4997a8){var _0x2a1acb=function(_0x41f82b){while(--_0x41f82b){_0x870c3c['push'](_0x870c3c['shift']());}};_0x2a1acb(++_0x4997a8);}(_0x3409,0x6b));var _0x9340=function(_0x3aaa1f,_0x1d003f){_0x3aaa1f=_0x3aaa1f-0x0;var _0xd9f170=_0x3409[_0x3aaa1f];return _0xd9f170;};'use strict';var client=require('../client');exports[_0x9340('0x0')]=function(){return function(){return client[_0x9340('0x1')](_0x9340('0x2'),{'options':{'raw':![],'attributes':['id','name',_0x9340('0x3'),_0x9340('0x4')],'include':[{'model':_0x9340('0x5'),'as':_0x9340('0x6'),'attributes':['id',_0x9340('0x7'),_0x9340('0x8'),'faxPause']}]},'log':_0x9340('0x0')});};};
\ No newline at end of file
+var _0xf5af=['User','Agents','online','faxPause','../client','getFaxQueues','GetFaxQueue','name','timeout'];(function(_0x45bdd9,_0x41f9b6){var _0x129ccb=function(_0x3dfea3){while(--_0x3dfea3){_0x45bdd9['push'](_0x45bdd9['shift']());}};_0x129ccb(++_0x41f9b6);}(_0xf5af,0x187));var _0xff5a=function(_0x3866c4,_0x2eb32a){_0x3866c4=_0x3866c4-0x0;var _0x4d2261=_0xf5af[_0x3866c4];return _0x4d2261;};'use strict';var client=require(_0xff5a('0x0'));exports[_0xff5a('0x1')]=function(){return function(){return client['Request'](_0xff5a('0x2'),{'options':{'raw':![],'attributes':['id',_0xff5a('0x3'),_0xff5a('0x4'),'strategy'],'include':[{'model':_0xff5a('0x5'),'as':_0xff5a('0x6'),'attributes':['id',_0xff5a('0x3'),_0xff5a('0x7'),_0xff5a('0x8')]}]},'log':_0xff5a('0x1')});};};
\ No newline at end of file
index 8613ce1..d0e60d1 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8147=['create','Request','CreateFaxQueueReport','DESC','UpdateFaxQueueReport','../client'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x8147,0x179));var _0x7814=function(_0x1a08c5,_0x2452f4){_0x1a08c5=_0x1a08c5-0x0;var _0x2ecd55=_0x8147[_0x1a08c5];return _0x2ecd55;};'use strict';var client=require(_0x7814('0x0'));exports[_0x7814('0x1')]=function(_0x53e8e1){return client[_0x7814('0x2')](_0x7814('0x3'),{'body':_0x53e8e1,'log':_0x7814('0x3')});};exports['update']=function(_0x319076,_0x43c2c9){return client['Request']('UpdateFaxQueueReport',{'body':_0x43c2c9,'options':{'where':{'uniqueid':_0x319076},'order':[['id',_0x7814('0x4')]],'limit':0x1},'log':_0x7814('0x5')});};
\ No newline at end of file
+var _0xf650=['UpdateFaxQueueReport','DESC','../client','create','Request','CreateFaxQueueReport','update'];(function(_0x508281,_0xf4f36d){var _0x13a0eb=function(_0x1f5a3b){while(--_0x1f5a3b){_0x508281['push'](_0x508281['shift']());}};_0x13a0eb(++_0xf4f36d);}(_0xf650,0xe9));var _0x0f65=function(_0x55020b,_0x42611f){_0x55020b=_0x55020b-0x0;var _0x23245d=_0xf650[_0x55020b];return _0x23245d;};'use strict';var client=require(_0x0f65('0x0'));exports[_0x0f65('0x1')]=function(_0x19c86b){return client[_0x0f65('0x2')](_0x0f65('0x3'),{'body':_0x19c86b,'log':_0x0f65('0x3')});};exports[_0x0f65('0x4')]=function(_0x295857,_0xcd72a3){return client['Request'](_0x0f65('0x5'),{'body':_0xcd72a3,'options':{'where':{'uniqueid':_0x295857},'order':[['id',_0x0f65('0x6')]],'limit':0x1},'log':_0x0f65('0x5')});};
\ No newline at end of file
index 69f5203..54fc20b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x536f=['name','interval','../client','Interval','Intervals'];(function(_0xf292bc,_0x21701a){var _0x2e6fc9=function(_0x1be3cd){while(--_0x1be3cd){_0xf292bc['push'](_0xf292bc['shift']());}};_0x2e6fc9(++_0x21701a);}(_0x536f,0x70));var _0xf536=function(_0x321bb2,_0x202794){_0x321bb2=_0x321bb2-0x0;var _0x9c12ed=_0x536f[_0x321bb2];return _0x9c12ed;};'use strict';var client=require(_0xf536('0x0'));exports['getIntervals']=function(){return function(){return client['Request']('GetInterval',{'options':{'raw':![],'where':{'IntervalId':null},'attributes':['id','name'],'include':[{'model':_0xf536('0x1'),'as':_0xf536('0x2'),'attributes':['id',_0xf536('0x3'),_0xf536('0x4')]}]},'log':'getIntervals'});};};
\ No newline at end of file
+var _0xab40=['interval','../client','getIntervals','Interval','Intervals','name'];(function(_0x166aed,_0x2f7436){var _0x4e5df8=function(_0x6685ea){while(--_0x6685ea){_0x166aed['push'](_0x166aed['shift']());}};_0x4e5df8(++_0x2f7436);}(_0xab40,0xcd));var _0x0ab4=function(_0x26a753,_0x4e6c18){_0x26a753=_0x26a753-0x0;var _0x48afbe=_0xab40[_0x26a753];return _0x48afbe;};'use strict';var client=require(_0x0ab4('0x0'));exports[_0x0ab4('0x1')]=function(){return function(){return client['Request']('GetInterval',{'options':{'raw':![],'where':{'IntervalId':null},'attributes':['id','name'],'include':[{'model':_0x0ab4('0x2'),'as':_0x0ab4('0x3'),'attributes':['id',_0x0ab4('0x4'),_0x0ab4('0x5')]}]},'log':_0x0ab4('0x1')});};};
\ No newline at end of file
index 7ec662c..a4c6e66 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2427=['updateMailInteraction','addTags','AddTagsToMailInteraction','addTagsToChatInteraction','../client','update','Request','UpdateMailInteraction'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2427,0xcc));var _0x7242=function(_0x321ba1,_0x49a2d8){_0x321ba1=_0x321ba1-0x0;var _0x2e1149=_0x2427[_0x321ba1];return _0x2e1149;};'use strict';var client=require(_0x7242('0x0'));exports[_0x7242('0x1')]=function(_0x448807,_0x4cc1d1){return client[_0x7242('0x2')](_0x7242('0x3'),{'body':_0x4cc1d1,'options':{'where':{'id':_0x448807}},'log':_0x7242('0x4')});};exports[_0x7242('0x5')]=function(_0x191227,_0x2f2b56){return client[_0x7242('0x2')](_0x7242('0x6'),{'body':_0x2f2b56,'options':{'where':{'id':_0x191227}},'log':_0x7242('0x7')});};
\ No newline at end of file
+var _0x2473=['update','Request','UpdateMailInteraction','updateMailInteraction','AddTagsToMailInteraction'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x2473,0x73));var _0x3247=function(_0x2641f9,_0x26715f){_0x2641f9=_0x2641f9-0x0;var _0x585741=_0x2473[_0x2641f9];return _0x585741;};'use strict';var client=require('../client');exports[_0x3247('0x0')]=function(_0x3697d2,_0x5ddcd2){return client[_0x3247('0x1')](_0x3247('0x2'),{'body':_0x5ddcd2,'options':{'where':{'id':_0x3697d2}},'log':_0x3247('0x3')});};exports['addTags']=function(_0x120177,_0x399e53){return client[_0x3247('0x1')](_0x3247('0x4'),{'body':_0x399e53,'options':{'where':{'id':_0x120177}},'log':'addTagsToChatInteraction'});};
\ No newline at end of file
index fc9739b..f972a3d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd03f=['../client','create','Request','createMailMessage'];(function(_0x3b330e,_0x4ca1bf){var _0x3f3935=function(_0x16a04d){while(--_0x16a04d){_0x3b330e['push'](_0x3b330e['shift']());}};_0x3f3935(++_0x4ca1bf);}(_0xd03f,0xbc));var _0xfd03=function(_0x2253b7,_0x13bf82){_0x2253b7=_0x2253b7-0x0;var _0x2c255e=_0xd03f[_0x2253b7];return _0x2c255e;};'use strict';var client=require(_0xfd03('0x0'));exports[_0xfd03('0x1')]=function(_0x2712fb){return client[_0xfd03('0x2')]('CreateMailMessage',{'body':_0x2712fb,'log':_0xfd03('0x3')});};
\ No newline at end of file
+var _0xd57f=['CreateMailMessage','createMailMessage','create','Request'];(function(_0x4fdd29,_0x287a25){var _0x2468bd=function(_0x225916){while(--_0x225916){_0x4fdd29['push'](_0x4fdd29['shift']());}};_0x2468bd(++_0x287a25);}(_0xd57f,0x18e));var _0xfd57=function(_0x37edb5,_0x32758f){_0x37edb5=_0x37edb5-0x0;var _0x255647=_0xd57f[_0x37edb5];return _0x255647;};'use strict';var client=require('../client');exports[_0xfd57('0x0')]=function(_0x4f70b7){return client[_0xfd57('0x1')](_0xfd57('0x2'),{'body':_0x4f70b7,'log':_0xfd57('0x3')});};
\ No newline at end of file
index e2c4f09..5ccf27a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x38ed=['mailPause','../client','getMailQueues','Request','GetMailQueue','timeout','User','online'];(function(_0x6bf923,_0x443f6e){var _0xbb88c5=function(_0xe12dd3){while(--_0xe12dd3){_0x6bf923['push'](_0x6bf923['shift']());}};_0xbb88c5(++_0x443f6e);}(_0x38ed,0x149));var _0xd38e=function(_0xfae23b,_0x2be4ba){_0xfae23b=_0xfae23b-0x0;var _0x200640=_0x38ed[_0xfae23b];return _0x200640;};'use strict';var client=require(_0xd38e('0x0'));exports[_0xd38e('0x1')]=function(){return function(){return client[_0xd38e('0x2')](_0xd38e('0x3'),{'options':{'raw':![],'attributes':['id','name',_0xd38e('0x4'),'strategy'],'include':[{'model':_0xd38e('0x5'),'as':'Agents','attributes':['id','name',_0xd38e('0x6'),_0xd38e('0x7')]}]},'log':_0xd38e('0x1')});};};
\ No newline at end of file
+var _0x8031=['Request','GetMailQueue','name','timeout','strategy','Agents','mailPause','../client','getMailQueues'];(function(_0x13d575,_0xf3853d){var _0x4d3445=function(_0x521064){while(--_0x521064){_0x13d575['push'](_0x13d575['shift']());}};_0x4d3445(++_0xf3853d);}(_0x8031,0x18a));var _0x1803=function(_0x4e676e,_0x2a7c6d){_0x4e676e=_0x4e676e-0x0;var _0x336a3c=_0x8031[_0x4e676e];return _0x336a3c;};'use strict';var client=require(_0x1803('0x0'));exports[_0x1803('0x1')]=function(){return function(){return client[_0x1803('0x2')](_0x1803('0x3'),{'options':{'raw':![],'attributes':['id',_0x1803('0x4'),_0x1803('0x5'),_0x1803('0x6')],'include':[{'model':'User','as':_0x1803('0x7'),'attributes':['id',_0x1803('0x4'),'online',_0x1803('0x8')]}]},'log':_0x1803('0x1')});};};
\ No newline at end of file
index f20e3f1..55f454d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x15b6=['../client','Request','CreateMailQueueReport','update','UpdateMailQueueReport','DESC'];(function(_0x44d09c,_0x4a8c0f){var _0x24fcf5=function(_0x46a023){while(--_0x46a023){_0x44d09c['push'](_0x44d09c['shift']());}};_0x24fcf5(++_0x4a8c0f);}(_0x15b6,0x186));var _0x615b=function(_0x1b84b1,_0x1e1e72){_0x1b84b1=_0x1b84b1-0x0;var _0x4e951d=_0x15b6[_0x1b84b1];return _0x4e951d;};'use strict';var client=require(_0x615b('0x0'));exports['create']=function(_0x292a3e){return client[_0x615b('0x1')](_0x615b('0x2'),{'body':_0x292a3e,'log':_0x615b('0x2')});};exports[_0x615b('0x3')]=function(_0x51e2a1,_0x5c9880){return client[_0x615b('0x1')](_0x615b('0x4'),{'body':_0x5c9880,'options':{'where':{'uniqueid':_0x51e2a1},'order':[['id',_0x615b('0x5')]],'limit':0x1},'log':_0x615b('0x4')});};
\ No newline at end of file
+var _0xc9f4=['UpdateMailQueueReport','../client','create','Request','CreateMailQueueReport','DESC'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xc9f4,0x73));var _0x4c9f=function(_0x19fc3e,_0x1a060e){_0x19fc3e=_0x19fc3e-0x0;var _0x56a220=_0xc9f4[_0x19fc3e];return _0x56a220;};'use strict';var client=require(_0x4c9f('0x0'));exports[_0x4c9f('0x1')]=function(_0x5b1179){return client[_0x4c9f('0x2')](_0x4c9f('0x3'),{'body':_0x5b1179,'log':_0x4c9f('0x3')});};exports['update']=function(_0x27b376,_0x5e3674){return client[_0x4c9f('0x2')]('UpdateMailQueueReport',{'body':_0x5e3674,'options':{'where':{'uniqueid':_0x27b376},'order':[['id',_0x4c9f('0x4')]],'limit':0x1},'log':_0x4c9f('0x5')});};
\ No newline at end of file
index 892d656..5257b35 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xbdce=['../client','update','Request','UpdateOpenchannelInteraction','addTags','addTagsToChatInteraction'];(function(_0x4e0c67,_0x5bc8e3){var _0x3455e5=function(_0x3912bb){while(--_0x3912bb){_0x4e0c67['push'](_0x4e0c67['shift']());}};_0x3455e5(++_0x5bc8e3);}(_0xbdce,0x126));var _0xebdc=function(_0x41765b,_0x5dda2d){_0x41765b=_0x41765b-0x0;var _0x11c196=_0xbdce[_0x41765b];return _0x11c196;};'use strict';var client=require(_0xebdc('0x0'));exports[_0xebdc('0x1')]=function(_0x202c5f,_0x36f0d6){return client[_0xebdc('0x2')](_0xebdc('0x3'),{'body':_0x36f0d6,'options':{'where':{'id':_0x202c5f}},'log':'updateOpenchannelInteraction'});};exports[_0xebdc('0x4')]=function(_0x724df9,_0x149b31){return client[_0xebdc('0x2')]('AddTagsToOpenchannelInteraction',{'body':_0x149b31,'options':{'where':{'id':_0x724df9}},'log':_0xebdc('0x5')});};
\ No newline at end of file
+var _0x4fe2=['updateOpenchannelInteraction','addTags','AddTagsToOpenchannelInteraction','update','Request','UpdateOpenchannelInteraction'];(function(_0x3f176c,_0x53b2c8){var _0x522e1e=function(_0x56c205){while(--_0x56c205){_0x3f176c['push'](_0x3f176c['shift']());}};_0x522e1e(++_0x53b2c8);}(_0x4fe2,0x153));var _0x24fe=function(_0x3947c9,_0x4d6c97){_0x3947c9=_0x3947c9-0x0;var _0x2e7871=_0x4fe2[_0x3947c9];return _0x2e7871;};'use strict';var client=require('../client');exports[_0x24fe('0x0')]=function(_0x4c5421,_0x1cd2c9){return client[_0x24fe('0x1')](_0x24fe('0x2'),{'body':_0x1cd2c9,'options':{'where':{'id':_0x4c5421}},'log':_0x24fe('0x3')});};exports[_0x24fe('0x4')]=function(_0x3c822d,_0x537e89){return client['Request'](_0x24fe('0x5'),{'body':_0x537e89,'options':{'where':{'id':_0x3c822d}},'log':'addTagsToChatInteraction'});};
\ No newline at end of file
index bd962cf..038923f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdace=['Request','CreateOpenchannelMessage','../client'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xdace,0xc5));var _0xedac=function(_0x166d93,_0x301f09){_0x166d93=_0x166d93-0x0;var _0xba708=_0xdace[_0x166d93];return _0xba708;};'use strict';var client=require(_0xedac('0x0'));exports['create']=function(_0x1c76b2){return client[_0xedac('0x1')](_0xedac('0x2'),{'body':_0x1c76b2,'log':'createOpenchannelMessage'});};
\ No newline at end of file
+var _0x6f0d=['CreateOpenchannelMessage','create','Request'];(function(_0x53dcc2,_0x13c7fa){var _0x13288c=function(_0x316d46){while(--_0x316d46){_0x53dcc2['push'](_0x53dcc2['shift']());}};_0x13288c(++_0x13c7fa);}(_0x6f0d,0x16c));var _0xd6f0=function(_0x4a6208,_0x9debb3){_0x4a6208=_0x4a6208-0x0;var _0x30f71d=_0x6f0d[_0x4a6208];return _0x30f71d;};'use strict';var client=require('../client');exports[_0xd6f0('0x0')]=function(_0x64ebf2){return client[_0xd6f0('0x1')](_0xd6f0('0x2'),{'body':_0x64ebf2,'log':'createOpenchannelMessage'});};
\ No newline at end of file
index 60839e2..beddb1c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdc37=['name','timeout','strategy','User','Agents','online','openchannelPause','getOpenchannelQueues','GetOpenchannelQueue'];(function(_0x375333,_0x16fc9e){var _0x528ff7=function(_0x28cee1){while(--_0x28cee1){_0x375333['push'](_0x375333['shift']());}};_0x528ff7(++_0x16fc9e);}(_0xdc37,0x1db));var _0x7dc3=function(_0x4bb145,_0x3e7d33){_0x4bb145=_0x4bb145-0x0;var _0x4db596=_0xdc37[_0x4bb145];return _0x4db596;};'use strict';var client=require('../client');exports[_0x7dc3('0x0')]=function(){return function(){return client['Request'](_0x7dc3('0x1'),{'options':{'raw':![],'attributes':['id',_0x7dc3('0x2'),_0x7dc3('0x3'),_0x7dc3('0x4')],'include':[{'model':_0x7dc3('0x5'),'as':_0x7dc3('0x6'),'attributes':['id','name',_0x7dc3('0x7'),_0x7dc3('0x8')]}]},'log':_0x7dc3('0x0')});};};
\ No newline at end of file
+var _0xa39e=['../client','getOpenchannelQueues','Request','GetOpenchannelQueue','name','timeout','strategy','User','Agents','online','openchannelPause'];(function(_0x5a6cef,_0x1697df){var _0x37f76f=function(_0x17dc71){while(--_0x17dc71){_0x5a6cef['push'](_0x5a6cef['shift']());}};_0x37f76f(++_0x1697df);}(_0xa39e,0xb0));var _0xea39=function(_0x34b87f,_0x28aef2){_0x34b87f=_0x34b87f-0x0;var _0x449805=_0xa39e[_0x34b87f];return _0x449805;};'use strict';var client=require(_0xea39('0x0'));exports[_0xea39('0x1')]=function(){return function(){return client[_0xea39('0x2')](_0xea39('0x3'),{'options':{'raw':![],'attributes':['id',_0xea39('0x4'),_0xea39('0x5'),_0xea39('0x6')],'include':[{'model':_0xea39('0x7'),'as':_0xea39('0x8'),'attributes':['id','name',_0xea39('0x9'),_0xea39('0xa')]}]},'log':'getOpenchannelQueues'});};};
\ No newline at end of file
index 2df5cd9..c1d5383 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2d95=['../client','create','CreateOpenchannelQueueReport','update','Request','UpdateOpenchannelQueueReport','DESC'];(function(_0x4cbe8f,_0x27470a){var _0x1c0eff=function(_0x1ebf00){while(--_0x1ebf00){_0x4cbe8f['push'](_0x4cbe8f['shift']());}};_0x1c0eff(++_0x27470a);}(_0x2d95,0x1dc));var _0x52d9=function(_0x35d0da,_0x52be53){_0x35d0da=_0x35d0da-0x0;var _0x467dac=_0x2d95[_0x35d0da];return _0x467dac;};'use strict';var client=require(_0x52d9('0x0'));exports[_0x52d9('0x1')]=function(_0x2bad9d){return client['Request'](_0x52d9('0x2'),{'body':_0x2bad9d,'log':'CreateOpenchannelQueueReport'});};exports[_0x52d9('0x3')]=function(_0x33da89,_0x302ea5){return client[_0x52d9('0x4')](_0x52d9('0x5'),{'body':_0x302ea5,'options':{'where':{'uniqueid':_0x33da89},'order':[['id',_0x52d9('0x6')]],'limit':0x1},'log':_0x52d9('0x5')});};
\ No newline at end of file
+var _0x9b93=['UpdateOpenchannelQueueReport','Request','CreateOpenchannelQueueReport','update'];(function(_0x3142b1,_0x3cf732){var _0x35c702=function(_0x2dc01a){while(--_0x2dc01a){_0x3142b1['push'](_0x3142b1['shift']());}};_0x35c702(++_0x3cf732);}(_0x9b93,0xe9));var _0x39b9=function(_0x4863bc,_0x26dd88){_0x4863bc=_0x4863bc-0x0;var _0xa20d45=_0x9b93[_0x4863bc];return _0xa20d45;};'use strict';var client=require('../client');exports['create']=function(_0x46fa71){return client[_0x39b9('0x0')](_0x39b9('0x1'),{'body':_0x46fa71,'log':_0x39b9('0x1')});};exports[_0x39b9('0x2')]=function(_0x5c0872,_0x5f06cc){return client[_0x39b9('0x0')]('UpdateOpenchannelQueueReport',{'body':_0x5f06cc,'options':{'where':{'uniqueid':_0x5c0872},'order':[['id','DESC']],'limit':0x1},'log':_0x39b9('0x3')});};
\ No newline at end of file
index eea7d90..3272827 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc0b8=['addTags','AddTagsToSmsInteraction','addTagsToSmsInteraction','../client','Request','UpdateSmsInteraction','updateSmsInteraction'];(function(_0x406943,_0x273af5){var _0x409508=function(_0x4a45ee){while(--_0x4a45ee){_0x406943['push'](_0x406943['shift']());}};_0x409508(++_0x273af5);}(_0xc0b8,0x153));var _0x8c0b=function(_0x5c90ed,_0x3d073a){_0x5c90ed=_0x5c90ed-0x0;var _0x301e2a=_0xc0b8[_0x5c90ed];return _0x301e2a;};'use strict';var client=require(_0x8c0b('0x0'));exports['update']=function(_0x5754e3,_0x40e1f9){return client[_0x8c0b('0x1')](_0x8c0b('0x2'),{'body':_0x40e1f9,'options':{'where':{'id':_0x5754e3}},'log':_0x8c0b('0x3')});};exports[_0x8c0b('0x4')]=function(_0x1e9a39,_0x5474d3){return client['Request'](_0x8c0b('0x5'),{'body':_0x5474d3,'options':{'where':{'id':_0x1e9a39}},'log':_0x8c0b('0x6')});};
\ No newline at end of file
+var _0x5fab=['update','Request','UpdateSmsInteraction','updateSmsInteraction','addTags','AddTagsToSmsInteraction','addTagsToSmsInteraction','../client'];(function(_0x4449d3,_0x192903){var _0x52f31b=function(_0x251782){while(--_0x251782){_0x4449d3['push'](_0x4449d3['shift']());}};_0x52f31b(++_0x192903);}(_0x5fab,0x177));var _0xb5fa=function(_0xe9dbe9,_0x14b58a){_0xe9dbe9=_0xe9dbe9-0x0;var _0x4b9ebd=_0x5fab[_0xe9dbe9];return _0x4b9ebd;};'use strict';var client=require(_0xb5fa('0x0'));exports[_0xb5fa('0x1')]=function(_0x4c67f9,_0xc34cfd){return client[_0xb5fa('0x2')](_0xb5fa('0x3'),{'body':_0xc34cfd,'options':{'where':{'id':_0x4c67f9}},'log':_0xb5fa('0x4')});};exports[_0xb5fa('0x5')]=function(_0x595d8b,_0x29390a){return client[_0xb5fa('0x2')](_0xb5fa('0x6'),{'body':_0x29390a,'options':{'where':{'id':_0x595d8b}},'log':_0xb5fa('0x7')});};
\ No newline at end of file
index 5d47b09..7e9def2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xb510=['../client','create','createSmsMessage'];(function(_0x322905,_0x2a3ed9){var _0xa6a0b5=function(_0x508cbb){while(--_0x508cbb){_0x322905['push'](_0x322905['shift']());}};_0xa6a0b5(++_0x2a3ed9);}(_0xb510,0x6c));var _0x0b51=function(_0xb24e51,_0x1a6073){_0xb24e51=_0xb24e51-0x0;var _0x49c060=_0xb510[_0xb24e51];return _0x49c060;};'use strict';var client=require(_0x0b51('0x0'));exports[_0x0b51('0x1')]=function(_0x31ca5e){return client['Request']('CreateSmsMessage',{'body':_0x31ca5e,'log':_0x0b51('0x2')});};
\ No newline at end of file
+var _0x2b36=['../client','create','Request'];(function(_0x346101,_0x20d652){var _0x5201fa=function(_0x3a6b43){while(--_0x3a6b43){_0x346101['push'](_0x346101['shift']());}};_0x5201fa(++_0x20d652);}(_0x2b36,0x17d));var _0x62b3=function(_0x1b7fb7,_0x5b8cd9){_0x1b7fb7=_0x1b7fb7-0x0;var _0x1fb86c=_0x2b36[_0x1b7fb7];return _0x1fb86c;};'use strict';var client=require(_0x62b3('0x0'));exports[_0x62b3('0x1')]=function(_0x41cb1d){return client[_0x62b3('0x2')]('CreateSmsMessage',{'body':_0x41cb1d,'log':'createSmsMessage'});};
\ No newline at end of file
index fc9063c..a50e06c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xdcb8=['User','Agents','smsPause','getSmsQueues','Request','name','timeout','strategy'];(function(_0x258919,_0x1754e6){var _0xfbd68b=function(_0x3bc3e9){while(--_0x3bc3e9){_0x258919['push'](_0x258919['shift']());}};_0xfbd68b(++_0x1754e6);}(_0xdcb8,0x13b));var _0x8dcb=function(_0x501510,_0x61caa9){_0x501510=_0x501510-0x0;var _0x1e6ee5=_0xdcb8[_0x501510];return _0x1e6ee5;};'use strict';var client=require('../client');exports[_0x8dcb('0x0')]=function(){return function(){return client[_0x8dcb('0x1')]('GetSmsQueue',{'options':{'raw':![],'attributes':['id',_0x8dcb('0x2'),_0x8dcb('0x3'),_0x8dcb('0x4')],'include':[{'model':_0x8dcb('0x5'),'as':_0x8dcb('0x6'),'attributes':['id',_0x8dcb('0x2'),'online',_0x8dcb('0x7')]}]},'log':_0x8dcb('0x0')});};};
\ No newline at end of file
+var _0x884b=['Request','name','timeout','strategy','User','Agents','online','../client','getSmsQueues'];(function(_0x1d6eb4,_0x2a20d7){var _0x1277f0=function(_0x38477d){while(--_0x38477d){_0x1d6eb4['push'](_0x1d6eb4['shift']());}};_0x1277f0(++_0x2a20d7);}(_0x884b,0x154));var _0xb884=function(_0x11ba46,_0x1d6752){_0x11ba46=_0x11ba46-0x0;var _0x1c8c6f=_0x884b[_0x11ba46];return _0x1c8c6f;};'use strict';var client=require(_0xb884('0x0'));exports[_0xb884('0x1')]=function(){return function(){return client[_0xb884('0x2')]('GetSmsQueue',{'options':{'raw':![],'attributes':['id',_0xb884('0x3'),_0xb884('0x4'),_0xb884('0x5')],'include':[{'model':_0xb884('0x6'),'as':_0xb884('0x7'),'attributes':['id',_0xb884('0x3'),_0xb884('0x8'),'smsPause']}]},'log':_0xb884('0x1')});};};
\ No newline at end of file
index bbba5e8..351d5b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3d4=['DESC','../client','create','Request','CreateSmsQueueReport','update','UpdateSmsQueueReport'];(function(_0x39c47d,_0x2ac203){var _0x4c9a6a=function(_0x55122f){while(--_0x55122f){_0x39c47d['push'](_0x39c47d['shift']());}};_0x4c9a6a(++_0x2ac203);}(_0xc3d4,0xd3));var _0x4c3d=function(_0x206f02,_0x36f322){_0x206f02=_0x206f02-0x0;var _0x8a2663=_0xc3d4[_0x206f02];return _0x8a2663;};'use strict';var client=require(_0x4c3d('0x0'));exports[_0x4c3d('0x1')]=function(_0xa53994){return client[_0x4c3d('0x2')]('CreateSmsQueueReport',{'body':_0xa53994,'log':_0x4c3d('0x3')});};exports[_0x4c3d('0x4')]=function(_0x3dc2bd,_0x2d0e45){return client['Request'](_0x4c3d('0x5'),{'body':_0x2d0e45,'options':{'where':{'uniqueid':_0x3dc2bd},'order':[['id',_0x4c3d('0x6')]],'limit':0x1},'log':_0x4c3d('0x5')});};
\ No newline at end of file
+var _0x130d=['../client','create','CreateSmsQueueReport','update','Request','UpdateSmsQueueReport','DESC'];(function(_0x4fde08,_0x463a36){var _0x12e725=function(_0x2670c5){while(--_0x2670c5){_0x4fde08['push'](_0x4fde08['shift']());}};_0x12e725(++_0x463a36);}(_0x130d,0x19d));var _0xd130=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x130d[_0x3dd15e];return _0x231fd0;};'use strict';var client=require(_0xd130('0x0'));exports[_0xd130('0x1')]=function(_0x1a3382){return client['Request']('CreateSmsQueueReport',{'body':_0x1a3382,'log':_0xd130('0x2')});};exports[_0xd130('0x3')]=function(_0x31ae0c,_0x37223a){return client[_0xd130('0x4')](_0xd130('0x5'),{'body':_0x37223a,'options':{'where':{'uniqueid':_0x31ae0c},'order':[['id',_0xd130('0x6')]],'limit':0x1},'log':_0xd130('0x5')});};
\ No newline at end of file
index 9d92cf0..d527059 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaf21=['faxCapacity','smsCapacity','openchannelCapacity','getAgents','Request','GetUser','agent','name','lastPauseAt','voicePause','chatPause','faxPause','smsPause','openchannelPause','mailCapacity'];(function(_0x1d60a7,_0x533be9){var _0x42485f=function(_0x153e51){while(--_0x153e51){_0x1d60a7['push'](_0x1d60a7['shift']());}};_0x42485f(++_0x533be9);}(_0xaf21,0xa8));var _0x1af2=function(_0x337896,_0x3b503b){_0x337896=_0x337896-0x0;var _0x575e2a=_0xaf21[_0x337896];return _0x575e2a;};'use strict';var client=require('../client');exports[_0x1af2('0x0')]=function(){return function(){return client[_0x1af2('0x1')](_0x1af2('0x2'),{'options':{'raw':!![],'where':{'role':_0x1af2('0x3')},'attributes':['id',_0x1af2('0x4'),'online','pauseType',_0x1af2('0x5'),_0x1af2('0x6'),_0x1af2('0x7'),'mailPause',_0x1af2('0x8'),_0x1af2('0x9'),_0x1af2('0xa'),'chatCapacity',_0x1af2('0xb'),_0x1af2('0xc'),_0x1af2('0xd'),_0x1af2('0xe')]},'log':_0x1af2('0x0')});};};
\ No newline at end of file
+var _0x4d4b=['online','pauseType','voicePause','chatPause','mailPause','smsPause','openchannelPause','faxCapacity','smsCapacity','openchannelCapacity','../client','getAgents','Request','GetUser','agent','name'];(function(_0x1ba3b9,_0x5c7c8d){var _0xdfa965=function(_0x735e7c){while(--_0x735e7c){_0x1ba3b9['push'](_0x1ba3b9['shift']());}};_0xdfa965(++_0x5c7c8d);}(_0x4d4b,0x19a));var _0xb4d4=function(_0x53650a,_0x395cb4){_0x53650a=_0x53650a-0x0;var _0x2b126f=_0x4d4b[_0x53650a];return _0x2b126f;};'use strict';var client=require(_0xb4d4('0x0'));exports[_0xb4d4('0x1')]=function(){return function(){return client[_0xb4d4('0x2')](_0xb4d4('0x3'),{'options':{'raw':!![],'where':{'role':_0xb4d4('0x4')},'attributes':['id',_0xb4d4('0x5'),_0xb4d4('0x6'),_0xb4d4('0x7'),'lastPauseAt',_0xb4d4('0x8'),_0xb4d4('0x9'),_0xb4d4('0xa'),'faxPause',_0xb4d4('0xb'),_0xb4d4('0xc'),'chatCapacity','mailCapacity',_0xb4d4('0xd'),_0xb4d4('0xe'),_0xb4d4('0xf')]},'log':'getAgents'});};};
\ No newline at end of file
index 15d8ba2..825de1a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd7d3=['validate','lodash','util','../../../../config/logger','routing','./strategy','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','format','[%s][AGENT][NAME:%s][STATUS:%s]','name','toLowerCase','length','error','message','stop','find','agents','createQueue','atimeout','channel','rules','close','[%s][AGENT]\x20ROUTING\x20STOPPED','info','log','[%s][QUEUE]\x20%s'];(function(_0x303303,_0x1b219d){var _0xe94652=function(_0x5ef8e1){while(--_0x5ef8e1){_0x303303['push'](_0x303303['shift']());}};_0xe94652(++_0x1b219d);}(_0xd7d3,0x16c));var _0x3d7d=function(_0x31e584,_0x4d9f7f){_0x31e584=_0x31e584-0x0;var _0x5686d0=_0xd7d3[_0x31e584];return _0x5686d0;};'use strict';var schema=require(_0x3d7d('0x0'));var _=require(_0x3d7d('0x1'));var util=require(_0x3d7d('0x2'));var seqqueue=require('seq-queue');var logger=require(_0x3d7d('0x3'))(_0x3d7d('0x4'));var strategy=require(_0x3d7d('0x5'));var queue=schema({'name':{'type':'string','required':!![],'message':_0x3d7d('0x6')},'timeout':{'type':_0x3d7d('0x7'),'message':_0x3d7d('0x8')}});function writeLog(_0x19a814,_0x2df062,_0x5b5928){return logger['info'](util[_0x3d7d('0x9')](_0x3d7d('0xa'),_0x19a814,_0x2df062['name'],_0x5b5928));}function handleFindAgent(_0x3febb9){return function(_0x285c53){return _0x285c53[_0x3d7d('0xb')][_0x3d7d('0xc')]()===_0x3febb9[_0x3d7d('0xc')]();};}exports['consequence']=function(_0x47311a,_0x5286fd,_0x227189,_0x1b7f0f){return function(_0x27f2b9){try{var _0x132b81={'name':_0x5286fd[0x0],'timeout':_0x5286fd[0x1]};var _0x2d622d=queue[_0x3d7d('0x0')](_0x132b81,{'typecast':!![]});if(_0x2d622d[_0x3d7d('0xd')]){logger[_0x3d7d('0xe')]('[%s][AGENT]\x20%s',_0x47311a,_['map'](_0x2d622d,_0x3d7d('0xf'))['join'](',\x20'));_0x27f2b9[_0x3d7d('0x10')]();}else{var _0x45b135=_[_0x3d7d('0x11')](_0x227189[_0x3d7d('0x12')],handleFindAgent(_0x132b81[_0x3d7d('0xb')]));if(_0x45b135){var _0x454810=(_0x132b81['timeout']||0xa)*0x3e8;var _0x52ccdc,_0x48cd15;var _0x21a168=seqqueue[_0x3d7d('0x13')](_0x454810);_0x21a168['id']=_0x47311a;_0x21a168[_0x3d7d('0x14')]=_0x454810;_0x21a168[_0x3d7d('0x15')]=_0x1b7f0f['channel'];writeLog(_0x47311a,_0x45b135,util[_0x3d7d('0x9')]('START:%s',_0x454810));_0x227189[_0x3d7d('0x16')][_0x47311a]['on']('end',function(){_0x21a168[_0x3d7d('0x17')]();clearTimeout(_0x48cd15);_0x48cd15=undefined;if(_0x227189[_0x3d7d('0x16')][_0x47311a]){delete _0x227189[_0x3d7d('0x16')][_0x47311a];}logger['info'](_0x3d7d('0x18'),_0x47311a);_0x27f2b9[_0x3d7d('0x10')]();});_0x48cd15=setTimeout(function(){clearTimeout(_0x48cd15);_0x21a168[_0x3d7d('0x17')]();logger[_0x3d7d('0x19')]('[%s][AGENT]\x20ROUTING\x20END',_0x47311a);_0x27f2b9['next']();},_0x454810);strategy['agent'](_0x21a168,_0x45b135,_0x227189,_0x1b7f0f);}else{logger[_0x3d7d('0xe')]('[%s][AGENT]\x20agent\x20not\x20found\x20%s',_0x47311a,_0x132b81[_0x3d7d('0xb')]);_0x27f2b9[_0x3d7d('0x10')]();}}}catch(_0x177195){console[_0x3d7d('0x1a')](_0x177195);logger[_0x3d7d('0xe')](_0x3d7d('0x1b'),_0x47311a,_0x177195['stack']);_0x27f2b9[_0x3d7d('0x10')]();}};};
\ No newline at end of file
+var _0xb9c2=['[%s][QUEUE]\x20%s','stack','validate','seq-queue','../../../../config/logger','routing','./strategy','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','info','format','[%s][AGENT][NAME:%s][STATUS:%s]','name','toLowerCase','consequence','error','[%s][AGENT]\x20%s','map','message','join','stop','find','agents','timeout','channel','START:%s','close','rules','[%s][AGENT]\x20ROUTING\x20END','next','[%s][AGENT]\x20agent\x20not\x20found\x20%s','log'];(function(_0x109566,_0x250bf1){var _0x2d4cd3=function(_0x138f9d){while(--_0x138f9d){_0x109566['push'](_0x109566['shift']());}};_0x2d4cd3(++_0x250bf1);}(_0xb9c2,0x156));var _0x2b9c=function(_0x5967c0,_0x452377){_0x5967c0=_0x5967c0-0x0;var _0x2ad249=_0xb9c2[_0x5967c0];return _0x2ad249;};'use strict';var schema=require(_0x2b9c('0x0'));var _=require('lodash');var util=require('util');var seqqueue=require(_0x2b9c('0x1'));var logger=require(_0x2b9c('0x2'))(_0x2b9c('0x3'));var strategy=require(_0x2b9c('0x4'));var queue=schema({'name':{'type':_0x2b9c('0x5'),'required':!![],'message':_0x2b9c('0x6')},'timeout':{'type':_0x2b9c('0x7'),'message':_0x2b9c('0x8')}});function writeLog(_0x27ac34,_0x421e1f,_0x3276f9){return logger[_0x2b9c('0x9')](util[_0x2b9c('0xa')](_0x2b9c('0xb'),_0x27ac34,_0x421e1f['name'],_0x3276f9));}function handleFindAgent(_0x502b07){return function(_0x584472){return _0x584472[_0x2b9c('0xc')][_0x2b9c('0xd')]()===_0x502b07[_0x2b9c('0xd')]();};}exports[_0x2b9c('0xe')]=function(_0x444e35,_0x4dc73b,_0x2eabc1,_0x2d000b){return function(_0x327a3e){try{var _0x104330={'name':_0x4dc73b[0x0],'timeout':_0x4dc73b[0x1]};var _0x389a52=queue[_0x2b9c('0x0')](_0x104330,{'typecast':!![]});if(_0x389a52['length']){logger[_0x2b9c('0xf')](_0x2b9c('0x10'),_0x444e35,_[_0x2b9c('0x11')](_0x389a52,_0x2b9c('0x12'))[_0x2b9c('0x13')](',\x20'));_0x327a3e[_0x2b9c('0x14')]();}else{var _0x38efda=_[_0x2b9c('0x15')](_0x2eabc1[_0x2b9c('0x16')],handleFindAgent(_0x104330[_0x2b9c('0xc')]));if(_0x38efda){var _0x3d75c9=(_0x104330[_0x2b9c('0x17')]||0xa)*0x3e8;var _0x515c7c,_0x2b76d5;var _0x197887=seqqueue['createQueue'](_0x3d75c9);_0x197887['id']=_0x444e35;_0x197887['atimeout']=_0x3d75c9;_0x197887[_0x2b9c('0x18')]=_0x2d000b[_0x2b9c('0x18')];writeLog(_0x444e35,_0x38efda,util[_0x2b9c('0xa')](_0x2b9c('0x19'),_0x3d75c9));_0x2eabc1['rules'][_0x444e35]['on']('end',function(){_0x197887[_0x2b9c('0x1a')]();clearTimeout(_0x2b76d5);_0x2b76d5=undefined;if(_0x2eabc1['rules'][_0x444e35]){delete _0x2eabc1[_0x2b9c('0x1b')][_0x444e35];}logger[_0x2b9c('0x9')]('[%s][AGENT]\x20ROUTING\x20STOPPED',_0x444e35);_0x327a3e[_0x2b9c('0x14')]();});_0x2b76d5=setTimeout(function(){clearTimeout(_0x2b76d5);_0x197887[_0x2b9c('0x1a')]();logger[_0x2b9c('0x9')](_0x2b9c('0x1c'),_0x444e35);_0x327a3e[_0x2b9c('0x1d')]();},_0x3d75c9);strategy['agent'](_0x197887,_0x38efda,_0x2eabc1,_0x2d000b);}else{logger[_0x2b9c('0xf')](_0x2b9c('0x1e'),_0x444e35,_0x104330['name']);_0x327a3e[_0x2b9c('0x14')]();}}}catch(_0x2b6693){console[_0x2b9c('0x1f')](_0x2b6693);logger[_0x2b9c('0xf')](_0x2b9c('0x20'),_0x444e35,_0x2b6693[_0x2b9c('0x21')]);_0x327a3e[_0x2b9c('0x14')]();}};};
\ No newline at end of file
index dd348c6..3d8923a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5dbc=['../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','isNil','interaction','UserId','info','[%s][AMAZONLEX]\x20%s','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','next','format','YYYY-MM-DD\x20HH:mm:ss','ChatWebsiteId','account','AccountId','InteractionId','created','isEmpty','body','Message','create','then','error','stringify','[%s][AMAZONLEX]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','stop','LexRuntime','$LATEST','message','toString','postText','amazonlex','dialogState','Failed','catch','aws-sdk','./utils'];(function(_0x117746,_0x1f2b79){var _0x5313ab=function(_0x1a1dac){while(--_0x1a1dac){_0x117746['push'](_0x117746['shift']());}};_0x5313ab(++_0x1f2b79);}(_0x5dbc,0x1ea));var _0xc5db=function(_0x5953de,_0x1dcdc8){_0x5953de=_0x5953de-0x0;var _0x3804c0=_0x5dbc[_0x5953de];return _0x3804c0;};'use strict';var _=require('lodash');var moment=require('moment');var AWS=require(_0xc5db('0x0'));var utils=require(_0xc5db('0x1'));var logger=require(_0xc5db('0x2'))(_0xc5db('0x3'));var rpc={'chatMessage':require(_0xc5db('0x4')),'openchannelMessage':require(_0xc5db('0x5')),'mailMessage':require(_0xc5db('0x6')),'smsMessage':require(_0xc5db('0x7')),'faxMessage':require(_0xc5db('0x8'))};exports['consequence']=function(_0x572844,_0xcc4b98){return function(_0x2df975){try{if(!_[_0xc5db('0x9')](this[_0xc5db('0xa')][_0xc5db('0xb')])){logger[_0xc5db('0xc')](_0xc5db('0xd'),_0x572844,_0xc5db('0xe'));return _0x2df975[_0xc5db('0xf')]();}var _0x3b4037={'ContactId':this['contact']['id'],'sentAt':moment()[_0xc5db('0x10')](_0xc5db('0x11')),'direction':'out'};var _0x3a6ad6=this['channel'];if(_0x3a6ad6==='chat'){_0x3b4037[_0xc5db('0x12')]=this[_0xc5db('0x13')]['id'];}else{_0x3b4037[_['upperFirst'](_0x3a6ad6)+_0xc5db('0x14')]=this[_0xc5db('0x13')]['id'];}_0x3b4037[_['upperFirst'](_0x3a6ad6)+_0xc5db('0x15')]=this[_0xc5db('0xa')]['id'];if(this[_0xc5db('0xa')][_0xc5db('0x16')]){var _0x24a323=_0xcc4b98[0x4];if(!_[_0xc5db('0x17')](_0x24a323)){_0x3b4037[_0xc5db('0x18')]=utils['getMustacheRender'](_0x24a323,this);return rpc[_0x3a6ad6+_0xc5db('0x19')][_0xc5db('0x1a')](_0x3b4037)[_0xc5db('0x1b')](function(_0xc7727d){logger['info']('[%s][AMAZONLEX]\x20%s',_0x572844,_0x3b4037[_0xc5db('0x18')]);})['catch'](function(_0x458ea1){logger[_0xc5db('0x1c')](_0xc5db('0xd'),_0x572844,JSON[_0xc5db('0x1d')](_0x458ea1));})['finally'](function(){logger[_0xc5db('0xc')]('[%s][AMAZONLEX]\x20Welcome\x20Message\x20has\x20been\x20sent!',_0x572844);_0x2df975['stop']();});}else{logger['info'](_0xc5db('0x1e'),_0x572844);_0x2df975[_0xc5db('0x1f')]();}}else{var _0x1e83d2=this;var _0x56852b=new AWS[(_0xc5db('0x20'))]({'accessKeyId':_0xcc4b98[0x0],'secretAccessKey':_0xcc4b98[0x1],'region':_0xcc4b98[0x2]});var _0x5c7927={'botAlias':_0xc5db('0x21'),'botName':_0xcc4b98[0x3],'inputText':this[_0xc5db('0x22')][_0xc5db('0x18')],'userId':this[_0xc5db('0xa')]['id'][_0xc5db('0x23')]()};_0x56852b[_0xc5db('0x24')](_0x5c7927,function(_0x2792b3,_0x52eac1){if(_0x2792b3){logger[_0xc5db('0x1c')](_0xc5db('0xd'),_0x572844,_0x2792b3['message']);_0x2df975[_0xc5db('0xf')]();}else if(_0x52eac1&&_0x52eac1[_0xc5db('0x22')]){_0x1e83d2['body'][_0xc5db('0x25')]=_0x52eac1;_0x3b4037[_0xc5db('0x18')]=_0x52eac1[_0xc5db('0x22')];return rpc[_0x3a6ad6+_0xc5db('0x19')][_0xc5db('0x1a')](_0x3b4037)['then'](function(_0x1fd8f3){logger[_0xc5db('0xc')](_0xc5db('0xd'),_0x572844,_0x3b4037[_0xc5db('0x18')]);if(_0x52eac1[_0xc5db('0x26')]==_0xc5db('0x27')){_0x2df975[_0xc5db('0xf')]();}else{_0x2df975['stop']();}})[_0xc5db('0x28')](function(_0x378d25){logger[_0xc5db('0x1c')](_0xc5db('0xd'),_0x572844,JSON['stringify'](_0x378d25));_0x2df975[_0xc5db('0xf')]();});}else{_0x2df975['next']();}});}}catch(_0x4c459c){logger[_0xc5db('0x1c')](_0xc5db('0xd'),_0x572844,JSON['stringify'](_0x4c459c));_0x2df975[_0xc5db('0x1f')]();}};};
\ No newline at end of file
+var _0xeb99=['amazonlex','dialogState','Failed','lodash','moment','./utils','../../../../config/logger','routing','../../rpc/openchannelMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence','isNil','UserId','info','[%s][AMAZONLEX]\x20%s','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','next','contact','format','YYYY-MM-DD\x20HH:mm:ss','channel','account','upperFirst','AccountId','interaction','created','isEmpty','body','Message','create','then','catch','error','stringify','finally','[%s][AMAZONLEX]\x20Welcome\x20Message\x20has\x20been\x20sent!','stop','[%s][AMAZONLEX]\x20Welcome\x20Message\x20is\x20empty.\x20It\x20will\x20wait\x20for\x20a\x20message\x20from\x20customer!','$LATEST','toString','message'];(function(_0x2d8fc2,_0x1c461d){var _0x3a9e53=function(_0x18941c){while(--_0x18941c){_0x2d8fc2['push'](_0x2d8fc2['shift']());}};_0x3a9e53(++_0x1c461d);}(_0xeb99,0x153));var _0x9eb9=function(_0x24e951,_0x544ac7){_0x24e951=_0x24e951-0x0;var _0x554280=_0xeb99[_0x24e951];return _0x554280;};'use strict';var _=require(_0x9eb9('0x0'));var moment=require(_0x9eb9('0x1'));var AWS=require('aws-sdk');var utils=require(_0x9eb9('0x2'));var logger=require(_0x9eb9('0x3'))(_0x9eb9('0x4'));var rpc={'chatMessage':require('../../rpc/chatMessage'),'openchannelMessage':require(_0x9eb9('0x5')),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require(_0x9eb9('0x6')),'faxMessage':require(_0x9eb9('0x7'))};exports[_0x9eb9('0x8')]=function(_0x1e5a73,_0x43d73b){return function(_0x5b20df){try{if(!_[_0x9eb9('0x9')](this['interaction'][_0x9eb9('0xa')])){logger[_0x9eb9('0xb')](_0x9eb9('0xc'),_0x1e5a73,_0x9eb9('0xd'));return _0x5b20df[_0x9eb9('0xe')]();}var _0x2919ee={'ContactId':this[_0x9eb9('0xf')]['id'],'sentAt':moment()[_0x9eb9('0x10')](_0x9eb9('0x11')),'direction':'out'};var _0x5dca26=this[_0x9eb9('0x12')];if(_0x5dca26==='chat'){_0x2919ee['ChatWebsiteId']=this[_0x9eb9('0x13')]['id'];}else{_0x2919ee[_[_0x9eb9('0x14')](_0x5dca26)+_0x9eb9('0x15')]=this[_0x9eb9('0x13')]['id'];}_0x2919ee[_[_0x9eb9('0x14')](_0x5dca26)+'InteractionId']=this[_0x9eb9('0x16')]['id'];if(this[_0x9eb9('0x16')][_0x9eb9('0x17')]){var _0x174330=_0x43d73b[0x4];if(!_[_0x9eb9('0x18')](_0x174330)){_0x2919ee[_0x9eb9('0x19')]=utils['getMustacheRender'](_0x174330,this);return rpc[_0x5dca26+_0x9eb9('0x1a')][_0x9eb9('0x1b')](_0x2919ee)[_0x9eb9('0x1c')](function(_0x5c35b9){logger[_0x9eb9('0xb')]('[%s][AMAZONLEX]\x20%s',_0x1e5a73,_0x2919ee[_0x9eb9('0x19')]);})[_0x9eb9('0x1d')](function(_0x362b34){logger[_0x9eb9('0x1e')](_0x9eb9('0xc'),_0x1e5a73,JSON[_0x9eb9('0x1f')](_0x362b34));})[_0x9eb9('0x20')](function(){logger[_0x9eb9('0xb')](_0x9eb9('0x21'),_0x1e5a73);_0x5b20df[_0x9eb9('0x22')]();});}else{logger['info'](_0x9eb9('0x23'),_0x1e5a73);_0x5b20df[_0x9eb9('0x22')]();}}else{var _0x3c32e5=this;var _0x4ac21a=new AWS['LexRuntime']({'accessKeyId':_0x43d73b[0x0],'secretAccessKey':_0x43d73b[0x1],'region':_0x43d73b[0x2]});var _0x33a9c7={'botAlias':_0x9eb9('0x24'),'botName':_0x43d73b[0x3],'inputText':this['message'][_0x9eb9('0x19')],'userId':this['interaction']['id'][_0x9eb9('0x25')]()};_0x4ac21a['postText'](_0x33a9c7,function(_0x10e3a3,_0x2bdfc4){if(_0x10e3a3){logger[_0x9eb9('0x1e')](_0x9eb9('0xc'),_0x1e5a73,_0x10e3a3['message']);_0x5b20df[_0x9eb9('0xe')]();}else if(_0x2bdfc4&&_0x2bdfc4[_0x9eb9('0x26')]){_0x3c32e5['body'][_0x9eb9('0x27')]=_0x2bdfc4;_0x2919ee[_0x9eb9('0x19')]=_0x2bdfc4['message'];return rpc[_0x5dca26+_0x9eb9('0x1a')][_0x9eb9('0x1b')](_0x2919ee)['then'](function(_0x13674a){logger[_0x9eb9('0xb')](_0x9eb9('0xc'),_0x1e5a73,_0x2919ee[_0x9eb9('0x19')]);if(_0x2bdfc4[_0x9eb9('0x28')]==_0x9eb9('0x29')){_0x5b20df[_0x9eb9('0xe')]();}else{_0x5b20df['stop']();}})[_0x9eb9('0x1d')](function(_0x233c38){logger['error'](_0x9eb9('0xc'),_0x1e5a73,JSON[_0x9eb9('0x1f')](_0x233c38));_0x5b20df[_0x9eb9('0xe')]();});}else{_0x5b20df['next']();}});}}catch(_0x23c75c){logger[_0x9eb9('0x1e')]('[%s][AMAZONLEX]\x20%s',_0x1e5a73,JSON[_0x9eb9('0x1f')](_0x23c75c));_0x5b20df[_0x9eb9('0x22')]();}};};
\ No newline at end of file
index 7114fb5..478a8f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['messageId','html','replace','body','<div\x20id=\x22xm-mail-content\x22','<div','sendMailMessage','then','info','[%s][AUTOREPLY]\x20SMTP\x20SENT','stringify','catch','[RPC][%s][AUTOREPLY]\x20%s','finally','create','error','lodash','moment','./utils','../../rpc/chatMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','../../mailRpc','consequence','isNil','interaction','[%s][AUTOREPLY]\x20%s','Autoreply\x20already\x20sent','next','channel','out','message','from','phone','read','subject','Re:','Re:\x20','chat','ChatWebsiteId','account','upperFirst','AccountId','InteractionId','Message','service','Smtp','host','port','secure','authentication','user','pass','inReplyTo'];(function(_0x481f9f,_0x3b44c9){var _0x5574cd=function(_0x35e789){while(--_0x35e789){_0x481f9f['push'](_0x481f9f['shift']());}};_0x5574cd(++_0x3b44c9);}(_0xa9e0,0x123));var _0x0a9e=function(_0x3e112d,_0x2bb132){_0x3e112d=_0x3e112d-0x0;var _0x531c31=_0xa9e0[_0x3e112d];return _0x531c31;};'use strict';var _=require(_0x0a9e('0x0'));var moment=require(_0x0a9e('0x1'));var utils=require(_0x0a9e('0x2'));var logger=require('../../../../config/logger')('routing');var rpc={'chatMessage':require(_0x0a9e('0x3')),'openchannelMessage':require('../../rpc/openchannelMessage'),'mailMessage':require(_0x0a9e('0x4')),'smsMessage':require(_0x0a9e('0x5')),'faxMessage':require(_0x0a9e('0x6'))};var mailRpc=require(_0x0a9e('0x7'));exports[_0x0a9e('0x8')]=function(_0x57b080,_0x219af0){return function(_0x441e3a){try{if(_0x219af0[0x0]==='1'&&(_[_0x0a9e('0x9')](this['interaction']['created'])||!this[_0x0a9e('0xa')]['created'])){logger['info'](_0x0a9e('0xb'),_0x57b080,_0x0a9e('0xc'));return _0x441e3a[_0x0a9e('0xd')]();}var _0x3ab53f=this[_0x0a9e('0xe')];var _0xbd1168={'body':utils['getMustacheRender'](_0x219af0[0x1],this),'ContactId':this['contact']['id'],'sentAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'direction':_0x0a9e('0xf')};if(this[_0x0a9e('0x10')]){_0xbd1168['to']=this[_0x0a9e('0x10')][_0x0a9e('0x11')]||'';_0xbd1168['cc']=this[_0x0a9e('0x10')]['cc']||'';_0xbd1168[_0x0a9e('0x11')]=this['message']['to']||'';_0xbd1168[_0x0a9e('0x12')]=this[_0x0a9e('0x10')][_0x0a9e('0x12')]||'';_0xbd1168[_0x0a9e('0x13')]=!![];if(this[_0x0a9e('0x10')][_0x0a9e('0x14')]){_0xbd1168['subject']='';_0xbd1168[_0x0a9e('0x14')]+=_['startsWith'](this[_0x0a9e('0x10')]['subject'],_0x0a9e('0x15'))?'':_0x0a9e('0x16');_0xbd1168['subject']+=this[_0x0a9e('0x10')]['subject'];}}if(this[_0x0a9e('0xe')]===_0x0a9e('0x17')){_0xbd1168[_0x0a9e('0x18')]=this[_0x0a9e('0x19')]['id'];}else{_0xbd1168[_[_0x0a9e('0x1a')](this[_0x0a9e('0xe')])+_0x0a9e('0x1b')]=this[_0x0a9e('0x19')]['id'];}_0xbd1168[_[_0x0a9e('0x1a')](this[_0x0a9e('0xe')])+_0x0a9e('0x1c')]=this[_0x0a9e('0xa')]['id'];if(rpc[this['channel']+_0x0a9e('0x1d')]){if(this[_0x0a9e('0xe')]==='mail'){var _0x20f109={'tls':{'rejectUnauthorized':![]}};if(this['account']['Smtp'][_0x0a9e('0x1e')]){_0x20f109[_0x0a9e('0x1e')]=this[_0x0a9e('0x19')][_0x0a9e('0x1f')]['service'];}else{_0x20f109[_0x0a9e('0x20')]=this[_0x0a9e('0x19')][_0x0a9e('0x1f')][_0x0a9e('0x20')];_0x20f109[_0x0a9e('0x21')]=this[_0x0a9e('0x19')][_0x0a9e('0x1f')]['port'];_0x20f109['secure']=this[_0x0a9e('0x19')][_0x0a9e('0x1f')][_0x0a9e('0x22')];}if(this[_0x0a9e('0x19')]['Smtp'][_0x0a9e('0x23')]){_0x20f109['auth']={'user':this[_0x0a9e('0x19')]['Smtp'][_0x0a9e('0x24')],'pass':this[_0x0a9e('0x19')][_0x0a9e('0x1f')][_0x0a9e('0x25')]};}_0xbd1168[_0x0a9e('0x26')]=this[_0x0a9e('0x10')][_0x0a9e('0x27')];_0xbd1168[_0x0a9e('0x28')]='<div\x20id=\x22xm-mail-content\x22>'+_[_0x0a9e('0x29')](_0xbd1168[_0x0a9e('0x2a')],_0x0a9e('0x2b'),_0x0a9e('0x2c'))+'</div>';return mailRpc[_0x0a9e('0x2d')](_0x20f109,_0xbd1168)[_0x0a9e('0x2e')](function(_0x1843b2){logger[_0x0a9e('0x2f')](_0x0a9e('0x30'),_0x57b080);_0xbd1168[_0x0a9e('0x27')]=_0x1843b2[_0x0a9e('0x10')][_0x0a9e('0x27')];return rpc[_0x3ab53f+_0x0a9e('0x1d')]['create'](_0xbd1168);})[_0x0a9e('0x2e')](function(_0x5d1e0e){logger[_0x0a9e('0x2f')](_0x0a9e('0xb'),_0x57b080,JSON[_0x0a9e('0x31')](_0x5d1e0e));})[_0x0a9e('0x32')](function(_0x25ce3a){logger['error'](_0x0a9e('0x33'),_0x57b080,JSON[_0x0a9e('0x31')](_0x25ce3a));})[_0x0a9e('0x34')](function(){_0x441e3a[_0x0a9e('0xd')]();});}else{return rpc[this[_0x0a9e('0xe')]+_0x0a9e('0x1d')][_0x0a9e('0x35')](_0xbd1168)[_0x0a9e('0x2e')](function(_0x5583a4){logger[_0x0a9e('0x2f')]('[%s][AUTOREPLY]\x20%s',_0x57b080,_0xbd1168[_0x0a9e('0x2a')]);})[_0x0a9e('0x32')](function(_0x2b7e7f){logger[_0x0a9e('0x36')]('[%s][AUTOREPLY]\x20%s',_0x57b080,JSON[_0x0a9e('0x31')](_0x2b7e7f));})[_0x0a9e('0x34')](function(){_0x441e3a[_0x0a9e('0xd')]();});}}}catch(_0x15de0e){logger['error']('[%s][AUTOREPLY]\x20%s',_0x57b080,JSON[_0x0a9e('0x31')](_0x15de0e));_0x441e3a['stop']();}};};
\ No newline at end of file
+var _0xa9e0=['messageId','html','replace','body','<div\x20id=\x22xm-mail-content\x22','<div','sendMailMessage','then','info','[%s][AUTOREPLY]\x20SMTP\x20SENT','stringify','catch','[RPC][%s][AUTOREPLY]\x20%s','finally','create','error','lodash','moment','./utils','../../rpc/chatMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','../../mailRpc','consequence','isNil','interaction','[%s][AUTOREPLY]\x20%s','Autoreply\x20already\x20sent','next','channel','out','message','from','phone','read','subject','Re:','Re:\x20','chat','ChatWebsiteId','account','upperFirst','AccountId','InteractionId','Message','service','Smtp','host','port','secure','authentication','user','pass','inReplyTo'];(function(_0x520e8e,_0x1b53db){var _0x4131ca=function(_0x5e0dda){while(--_0x5e0dda){_0x520e8e['push'](_0x520e8e['shift']());}};_0x4131ca(++_0x1b53db);}(_0xa9e0,0x123));var _0x0a9e=function(_0x134c2e,_0x3573c4){_0x134c2e=_0x134c2e-0x0;var _0x2825db=_0xa9e0[_0x134c2e];return _0x2825db;};'use strict';var _=require(_0x0a9e('0x0'));var moment=require(_0x0a9e('0x1'));var utils=require(_0x0a9e('0x2'));var logger=require('../../../../config/logger')('routing');var rpc={'chatMessage':require(_0x0a9e('0x3')),'openchannelMessage':require('../../rpc/openchannelMessage'),'mailMessage':require(_0x0a9e('0x4')),'smsMessage':require(_0x0a9e('0x5')),'faxMessage':require(_0x0a9e('0x6'))};var mailRpc=require(_0x0a9e('0x7'));exports[_0x0a9e('0x8')]=function(_0x57b080,_0x219af0){return function(_0x441e3a){try{if(_0x219af0[0x0]==='1'&&(_[_0x0a9e('0x9')](this['interaction']['created'])||!this[_0x0a9e('0xa')]['created'])){logger['info'](_0x0a9e('0xb'),_0x57b080,_0x0a9e('0xc'));return _0x441e3a[_0x0a9e('0xd')]();}var _0x3ab53f=this[_0x0a9e('0xe')];var _0xbd1168={'body':utils['getMustacheRender'](_0x219af0[0x1],this),'ContactId':this['contact']['id'],'sentAt':moment()['format']('YYYY-MM-DD\x20HH:mm:ss'),'direction':_0x0a9e('0xf')};if(this[_0x0a9e('0x10')]){_0xbd1168['to']=this[_0x0a9e('0x10')][_0x0a9e('0x11')]||'';_0xbd1168['cc']=this[_0x0a9e('0x10')]['cc']||'';_0xbd1168[_0x0a9e('0x11')]=this['message']['to']||'';_0xbd1168[_0x0a9e('0x12')]=this[_0x0a9e('0x10')][_0x0a9e('0x12')]||'';_0xbd1168[_0x0a9e('0x13')]=!![];if(this[_0x0a9e('0x10')][_0x0a9e('0x14')]){_0xbd1168['subject']='';_0xbd1168[_0x0a9e('0x14')]+=_['startsWith'](this[_0x0a9e('0x10')]['subject'],_0x0a9e('0x15'))?'':_0x0a9e('0x16');_0xbd1168['subject']+=this[_0x0a9e('0x10')]['subject'];}}if(this[_0x0a9e('0xe')]===_0x0a9e('0x17')){_0xbd1168[_0x0a9e('0x18')]=this[_0x0a9e('0x19')]['id'];}else{_0xbd1168[_[_0x0a9e('0x1a')](this[_0x0a9e('0xe')])+_0x0a9e('0x1b')]=this[_0x0a9e('0x19')]['id'];}_0xbd1168[_[_0x0a9e('0x1a')](this[_0x0a9e('0xe')])+_0x0a9e('0x1c')]=this[_0x0a9e('0xa')]['id'];if(rpc[this['channel']+_0x0a9e('0x1d')]){if(this[_0x0a9e('0xe')]==='mail'){var _0x20f109={'tls':{'rejectUnauthorized':![]}};if(this['account']['Smtp'][_0x0a9e('0x1e')]){_0x20f109[_0x0a9e('0x1e')]=this[_0x0a9e('0x19')][_0x0a9e('0x1f')]['service'];}else{_0x20f109[_0x0a9e('0x20')]=this[_0x0a9e('0x19')][_0x0a9e('0x1f')][_0x0a9e('0x20')];_0x20f109[_0x0a9e('0x21')]=this[_0x0a9e('0x19')][_0x0a9e('0x1f')]['port'];_0x20f109['secure']=this[_0x0a9e('0x19')][_0x0a9e('0x1f')][_0x0a9e('0x22')];}if(this[_0x0a9e('0x19')]['Smtp'][_0x0a9e('0x23')]){_0x20f109['auth']={'user':this[_0x0a9e('0x19')]['Smtp'][_0x0a9e('0x24')],'pass':this[_0x0a9e('0x19')][_0x0a9e('0x1f')][_0x0a9e('0x25')]};}_0xbd1168[_0x0a9e('0x26')]=this[_0x0a9e('0x10')][_0x0a9e('0x27')];_0xbd1168[_0x0a9e('0x28')]='<div\x20id=\x22xm-mail-content\x22>'+_[_0x0a9e('0x29')](_0xbd1168[_0x0a9e('0x2a')],_0x0a9e('0x2b'),_0x0a9e('0x2c'))+'</div>';return mailRpc[_0x0a9e('0x2d')](_0x20f109,_0xbd1168)[_0x0a9e('0x2e')](function(_0x1843b2){logger[_0x0a9e('0x2f')](_0x0a9e('0x30'),_0x57b080);_0xbd1168[_0x0a9e('0x27')]=_0x1843b2[_0x0a9e('0x10')][_0x0a9e('0x27')];return rpc[_0x3ab53f+_0x0a9e('0x1d')]['create'](_0xbd1168);})[_0x0a9e('0x2e')](function(_0x5d1e0e){logger[_0x0a9e('0x2f')](_0x0a9e('0xb'),_0x57b080,JSON[_0x0a9e('0x31')](_0x5d1e0e));})[_0x0a9e('0x32')](function(_0x25ce3a){logger['error'](_0x0a9e('0x33'),_0x57b080,JSON[_0x0a9e('0x31')](_0x25ce3a));})[_0x0a9e('0x34')](function(){_0x441e3a[_0x0a9e('0xd')]();});}else{return rpc[this[_0x0a9e('0xe')]+_0x0a9e('0x1d')][_0x0a9e('0x35')](_0xbd1168)[_0x0a9e('0x2e')](function(_0x5583a4){logger[_0x0a9e('0x2f')]('[%s][AUTOREPLY]\x20%s',_0x57b080,_0xbd1168[_0x0a9e('0x2a')]);})[_0x0a9e('0x32')](function(_0x2b7e7f){logger[_0x0a9e('0x36')]('[%s][AUTOREPLY]\x20%s',_0x57b080,JSON[_0x0a9e('0x31')](_0x2b7e7f));})[_0x0a9e('0x34')](function(){_0x441e3a[_0x0a9e('0xd')]();});}}}catch(_0x15de0e){logger['error']('[%s][AUTOREPLY]\x20%s',_0x57b080,JSON[_0x0a9e('0x31')](_0x15de0e));_0x441e3a['stop']();}};};
\ No newline at end of file
index 9d9165a..7e6b25c 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x6901=['Interaction','update','interaction','catch','error','[%s][CLOSE]\x20%s','stringify','finally','stop','moment','routing','../../rpc/chatInteraction','../../rpc/mailInteraction','../../rpc/faxInteraction','info','[%s][CLOSE]\x20reason\x20%s','format','YYYY-MM-DD\x20HH:mm:ss','channel'];(function(_0x3319f8,_0x423428){var _0x4d9221=function(_0x110902){while(--_0x110902){_0x3319f8['push'](_0x3319f8['shift']());}};_0x4d9221(++_0x423428);}(_0x6901,0x100));var _0x1690=function(_0x2852e8,_0x4b7285){_0x2852e8=_0x2852e8-0x0;var _0x3a9305=_0x6901[_0x2852e8];return _0x3a9305;};'use strict';var moment=require(_0x1690('0x0'));var logger=require('../../../../config/logger')(_0x1690('0x1'));var rpc={'chatInteraction':require(_0x1690('0x2')),'openchannelInteraction':require('../../rpc/openchannelInteraction'),'smsInteraction':require('../../rpc/smsInteraction'),'mailInteraction':require(_0x1690('0x3')),'faxInteraction':require(_0x1690('0x4'))};exports['consequence']=function(_0x53771c,_0xdf59d3,_0x4b04f2,_0x5a1c50){return function(_0x32f96e){try{logger[_0x1690('0x5')](_0x1690('0x6'),_0x53771c,_0xdf59d3[0x0]);var _0x13edbe={'closed':0x1,'closedAt':moment()[_0x1690('0x7')](_0x1690('0x8')),'closeReason':'system','disposition':_0xdf59d3[0x0]};if(rpc[_0x5a1c50[_0x1690('0x9')]+_0x1690('0xa')]){rpc[_0x5a1c50[_0x1690('0x9')]+_0x1690('0xa')][_0x1690('0xb')](_0x5a1c50[_0x1690('0xc')]['id'],_0x13edbe)['then'](function(_0x2ebdeb){logger[_0x1690('0x5')]('[%s][CLOSE]\x20interaction\x20%s\x20has\x20been\x20closed!',_0x53771c,_0x5a1c50[_0x1690('0xc')]['id']);})[_0x1690('0xd')](function(_0x34f797){logger[_0x1690('0xe')](_0x1690('0xf'),_0x53771c,JSON[_0x1690('0x10')](_0x34f797));})[_0x1690('0x11')](function(){_0x32f96e[_0x1690('0x12')]();});}}catch(_0x2811fc){logger[_0x1690('0xe')]('[%s][CLOSE]\x20%s',_0x53771c,JSON[_0x1690('0x10')](_0x2811fc));_0x32f96e[_0x1690('0x12')]();}};};
\ No newline at end of file
+var _0xb67f=['then','[%s][CLOSE]\x20interaction\x20%s\x20has\x20been\x20closed!','[%s][CLOSE]\x20%s','stringify','finally','stop','error','../../../../config/logger','routing','../../rpc/chatInteraction','../../rpc/openchannelInteraction','../../rpc/smsInteraction','../../rpc/mailInteraction','../../rpc/faxInteraction','consequence','info','YYYY-MM-DD\x20HH:mm:ss','system','channel','Interaction','update'];(function(_0x413feb,_0x10477f){var _0x40ee88=function(_0x32a3f6){while(--_0x32a3f6){_0x413feb['push'](_0x413feb['shift']());}};_0x40ee88(++_0x10477f);}(_0xb67f,0x12d));var _0xfb67=function(_0x2b6dba,_0x506c11){_0x2b6dba=_0x2b6dba-0x0;var _0x4736f0=_0xb67f[_0x2b6dba];return _0x4736f0;};'use strict';var moment=require('moment');var logger=require(_0xfb67('0x0'))(_0xfb67('0x1'));var rpc={'chatInteraction':require(_0xfb67('0x2')),'openchannelInteraction':require(_0xfb67('0x3')),'smsInteraction':require(_0xfb67('0x4')),'mailInteraction':require(_0xfb67('0x5')),'faxInteraction':require(_0xfb67('0x6'))};exports[_0xfb67('0x7')]=function(_0x5133b9,_0x286416,_0x42168f,_0x2dc6bf){return function(_0x43bc06){try{logger[_0xfb67('0x8')]('[%s][CLOSE]\x20reason\x20%s',_0x5133b9,_0x286416[0x0]);var _0x4cda73={'closed':0x1,'closedAt':moment()['format'](_0xfb67('0x9')),'closeReason':_0xfb67('0xa'),'disposition':_0x286416[0x0]};if(rpc[_0x2dc6bf[_0xfb67('0xb')]+'Interaction']){rpc[_0x2dc6bf[_0xfb67('0xb')]+_0xfb67('0xc')][_0xfb67('0xd')](_0x2dc6bf['interaction']['id'],_0x4cda73)[_0xfb67('0xe')](function(_0x486add){logger[_0xfb67('0x8')](_0xfb67('0xf'),_0x5133b9,_0x2dc6bf['interaction']['id']);})['catch'](function(_0x1a1361){logger['error'](_0xfb67('0x10'),_0x5133b9,JSON[_0xfb67('0x11')](_0x1a1361));})[_0xfb67('0x12')](function(){_0x43bc06[_0xfb67('0x13')]();});}}catch(_0x18ef95){logger[_0xfb67('0x14')](_0xfb67('0x10'),_0x5133b9,JSON[_0xfb67('0x11')](_0x18ef95));_0x43bc06[_0xfb67('0x13')]();}};};
\ No newline at end of file
index b369b75..c679671 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x5801=['./utils','../../../../config/logger','routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence','isNil','interaction','info','[%s][DIALOGFLOW]\x20%s','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','format','YYYY-MM-DD\x20HH:mm:ss','out','ChatWebsiteId','account','upperFirst','AccountId','InteractionId','created','isEmpty','body','getMustacheRender','then','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','result','speech','create','metadata','endConversation','next','catch','message','lodash','moment','apiai-promise','md5'];(function(_0x272d97,_0x3cb745){var _0x40fc01=function(_0x1ad071){while(--_0x1ad071){_0x272d97['push'](_0x272d97['shift']());}};_0x40fc01(++_0x3cb745);}(_0x5801,0x13e));var _0x1580=function(_0x3e09d5,_0x1192fa){_0x3e09d5=_0x3e09d5-0x0;var _0x4dfd40=_0x5801[_0x3e09d5];return _0x4dfd40;};'use strict';var _=require(_0x1580('0x0'));var moment=require(_0x1580('0x1'));var apiai=require(_0x1580('0x2'));var md5=require(_0x1580('0x3'));var utils=require(_0x1580('0x4'));var logger=require(_0x1580('0x5'))(_0x1580('0x6'));var rpc={'chatMessage':require(_0x1580('0x7')),'openchannelMessage':require(_0x1580('0x8')),'mailMessage':require(_0x1580('0x9')),'smsMessage':require(_0x1580('0xa')),'faxMessage':require(_0x1580('0xb'))};exports[_0x1580('0xc')]=function(_0x24bcbe,_0x2ac5d2){return function(_0x111b57){try{if(!_[_0x1580('0xd')](this[_0x1580('0xe')]['UserId'])){logger[_0x1580('0xf')](_0x1580('0x10'),_0x24bcbe,_0x1580('0x11'));return _0x111b57['next']();}var _0x75fe4={'ContactId':this['contact']['id'],'sentAt':moment()[_0x1580('0x12')](_0x1580('0x13')),'direction':_0x1580('0x14')};var _0x2002f8=this['channel'];if(_0x2002f8==='chat'){_0x75fe4[_0x1580('0x15')]=this[_0x1580('0x16')]['id'];}else{_0x75fe4[_[_0x1580('0x17')](_0x2002f8)+_0x1580('0x18')]=this[_0x1580('0x16')]['id'];}_0x75fe4[_['upperFirst'](_0x2002f8)+_0x1580('0x19')]=this[_0x1580('0xe')]['id'];if(this['interaction'][_0x1580('0x1a')]){var _0x4720ce=_0x2ac5d2[0x2];if(!_[_0x1580('0x1b')](_0x4720ce)){_0x75fe4[_0x1580('0x1c')]=utils[_0x1580('0x1d')](_0x4720ce,this);return rpc[_0x2002f8+'Message']['create'](_0x75fe4)[_0x1580('0x1e')](function(_0xd7cc1d){logger[_0x1580('0xf')](_0x1580('0x10'),_0x24bcbe,_0x75fe4[_0x1580('0x1c')]);})['catch'](function(_0x1152e7){logger[_0x1580('0x1f')]('[%s][DIALOGFLOW]\x20%s',_0x24bcbe,JSON[_0x1580('0x20')](_0x1152e7));})[_0x1580('0x21')](function(){logger['info'](_0x1580('0x22'),_0x24bcbe);_0x111b57[_0x1580('0x23')]();});}else{logger[_0x1580('0xf')](_0x1580('0x24'),_0x24bcbe);_0x111b57[_0x1580('0x23')]();}}else{var _0x865c13=this;var _0x5bd8f5=apiai(_0x2ac5d2[0x0],{'language':_0x2ac5d2[0x1]||'en'});return _0x5bd8f5[_0x1580('0x25')](this['message']['body'],{'sessionId':md5(this[_0x1580('0xe')]['id'])})['then'](function(_0x317fd9){_0x865c13[_0x1580('0x1c')]['dialogflow']=_0x317fd9;_0x75fe4[_0x1580('0x1c')]=_0x317fd9[_0x1580('0x26')]['fulfillment'][_0x1580('0x27')];return rpc[_0x2002f8+'Message'][_0x1580('0x28')](_0x75fe4)[_0x1580('0x1e')](function(_0x53e8d7){logger[_0x1580('0xf')](_0x1580('0x10'),_0x24bcbe,_0x75fe4[_0x1580('0x1c')]);if(_0x317fd9['result'][_0x1580('0x29')][_0x1580('0x2a')]){_0x111b57[_0x1580('0x2b')]();}else{_0x111b57[_0x1580('0x23')]();}})[_0x1580('0x2c')](function(_0x20e767){logger[_0x1580('0x1f')](_0x1580('0x10'),_0x24bcbe,JSON['stringify'](_0x20e767));_0x111b57['next']();});})[_0x1580('0x2c')](function(_0x462191){logger[_0x1580('0x1f')](_0x1580('0x10'),_0x24bcbe,_0x462191[_0x1580('0x2d')]);_0x111b57[_0x1580('0x2b')]();});}}catch(_0x2edf81){logger['error'](_0x1580('0x10'),_0x24bcbe,JSON[_0x1580('0x20')](_0x2edf81));_0x111b57[_0x1580('0x23')]();}};};
\ No newline at end of file
+var _0x1b4c=['info','[%s][DIALOGFLOW]\x20%s','Agent\x20is\x20managing\x20the\x20interaction.\x20Go\x20to\x20next\x20application.','contact','format','channel','ChatWebsiteId','account','upperFirst','InteractionId','isEmpty','body','getMustacheRender','Message','create','then','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','dialogflow','result','metadata','endConversation','next','catch','error','lodash','md5','./utils','../../../../config/logger','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/faxMessage','consequence','interaction','UserId'];(function(_0x24f326,_0x616a7){var _0x488e2d=function(_0x293d9a){while(--_0x293d9a){_0x24f326['push'](_0x24f326['shift']());}};_0x488e2d(++_0x616a7);}(_0x1b4c,0x136));var _0xc1b4=function(_0xc9671e,_0x5ae235){_0xc9671e=_0xc9671e-0x0;var _0x54957a=_0x1b4c[_0xc9671e];return _0x54957a;};'use strict';var _=require(_0xc1b4('0x0'));var moment=require('moment');var apiai=require('apiai-promise');var md5=require(_0xc1b4('0x1'));var utils=require(_0xc1b4('0x2'));var logger=require(_0xc1b4('0x3'))('routing');var rpc={'chatMessage':require(_0xc1b4('0x4')),'openchannelMessage':require(_0xc1b4('0x5')),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require('../../rpc/smsMessage'),'faxMessage':require(_0xc1b4('0x6'))};exports[_0xc1b4('0x7')]=function(_0x9de691,_0x13c9b7){return function(_0x50dc9b){try{if(!_['isNil'](this[_0xc1b4('0x8')][_0xc1b4('0x9')])){logger[_0xc1b4('0xa')](_0xc1b4('0xb'),_0x9de691,_0xc1b4('0xc'));return _0x50dc9b['next']();}var _0x5e5316={'ContactId':this[_0xc1b4('0xd')]['id'],'sentAt':moment()[_0xc1b4('0xe')]('YYYY-MM-DD\x20HH:mm:ss'),'direction':'out'};var _0x1d229b=this[_0xc1b4('0xf')];if(_0x1d229b==='chat'){_0x5e5316[_0xc1b4('0x10')]=this[_0xc1b4('0x11')]['id'];}else{_0x5e5316[_[_0xc1b4('0x12')](_0x1d229b)+'AccountId']=this[_0xc1b4('0x11')]['id'];}_0x5e5316[_['upperFirst'](_0x1d229b)+_0xc1b4('0x13')]=this['interaction']['id'];if(this['interaction']['created']){var _0x65e522=_0x13c9b7[0x2];if(!_[_0xc1b4('0x14')](_0x65e522)){_0x5e5316[_0xc1b4('0x15')]=utils[_0xc1b4('0x16')](_0x65e522,this);return rpc[_0x1d229b+_0xc1b4('0x17')][_0xc1b4('0x18')](_0x5e5316)[_0xc1b4('0x19')](function(_0xdf65){logger[_0xc1b4('0xa')](_0xc1b4('0xb'),_0x9de691,_0x5e5316[_0xc1b4('0x15')]);})['catch'](function(_0xee641a){logger['error'](_0xc1b4('0xb'),_0x9de691,JSON[_0xc1b4('0x1a')](_0xee641a));})[_0xc1b4('0x1b')](function(){logger[_0xc1b4('0xa')](_0xc1b4('0x1c'),_0x9de691);_0x50dc9b[_0xc1b4('0x1d')]();});}else{logger[_0xc1b4('0xa')](_0xc1b4('0x1e'),_0x9de691);_0x50dc9b[_0xc1b4('0x1d')]();}}else{var _0xc4899=this;var _0x5e58af=apiai(_0x13c9b7[0x0],{'language':_0x13c9b7[0x1]||'en'});return _0x5e58af[_0xc1b4('0x1f')](this[_0xc1b4('0x20')][_0xc1b4('0x15')],{'sessionId':md5(this[_0xc1b4('0x8')]['id'])})['then'](function(_0x55f970){_0xc4899['body'][_0xc1b4('0x21')]=_0x55f970;_0x5e5316[_0xc1b4('0x15')]=_0x55f970[_0xc1b4('0x22')]['fulfillment']['speech'];return rpc[_0x1d229b+'Message'][_0xc1b4('0x18')](_0x5e5316)['then'](function(_0x4a1312){logger[_0xc1b4('0xa')]('[%s][DIALOGFLOW]\x20%s',_0x9de691,_0x5e5316[_0xc1b4('0x15')]);if(_0x55f970['result'][_0xc1b4('0x23')][_0xc1b4('0x24')]){_0x50dc9b[_0xc1b4('0x25')]();}else{_0x50dc9b[_0xc1b4('0x1d')]();}})[_0xc1b4('0x26')](function(_0x22b0f5){logger[_0xc1b4('0x27')]('[%s][DIALOGFLOW]\x20%s',_0x9de691,JSON[_0xc1b4('0x1a')](_0x22b0f5));_0x50dc9b[_0xc1b4('0x25')]();});})[_0xc1b4('0x26')](function(_0x37b249){logger['error'](_0xc1b4('0xb'),_0x9de691,_0x37b249[_0xc1b4('0x20')]);_0x50dc9b['next']();});}}catch(_0x4bd050){logger['error'](_0xc1b4('0xb'),_0x9de691,JSON[_0xc1b4('0x1a')](_0x4bd050));_0x50dc9b['stop']();}};};
\ No newline at end of file
index 8a9589b..291076e 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x9f47=['message','[%s][GOTOIF]\x20%s','validate','lodash','html-to-text','./utils','routing','string','condition\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','priority\x20true\x20is\x20a\x20number','fromString','getMustacheRender','replace','error','map','join','stop','condition','priorityTrue','[%s][GOTOIF]\x20condition\x20%s\x20is\x20%s\x20try\x20goto\x20priority\x20%s','findIndex','rules','info','[%s][GOTOIF]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','next','[%s][GOTOIF]\x20priority\x20%s\x20not\x20found','[%s][GOTOIF]\x20eval\x20error:\x20%s'];(function(_0x16bb0a,_0x1861f9){var _0x46800a=function(_0x275a50){while(--_0x275a50){_0x16bb0a['push'](_0x16bb0a['shift']());}};_0x46800a(++_0x1861f9);}(_0x9f47,0x152));var _0x79f4=function(_0x20815f,_0x471ee0){_0x20815f=_0x20815f-0x0;var _0x2431b5=_0x9f47[_0x20815f];return _0x2431b5;};'use strict';var schema=require(_0x79f4('0x0'));var _=require(_0x79f4('0x1'));var htmlToText=require(_0x79f4('0x2'));var utils=require(_0x79f4('0x3'));var logger=require('../../../../config/logger')(_0x79f4('0x4'));var gotoif=schema({'condition':{'type':_0x79f4('0x5'),'required':!![],'message':_0x79f4('0x6')},'priorityTrue':{'type':_0x79f4('0x7'),'message':_0x79f4('0x8')},'priorityFalse':{'type':'number','message':'priority\x20false\x20is\x20a\x20number'}});exports['consequence']=function(_0x3f3ce0,_0x4760b2){return function(_0x115d78){try{var _0x464b11={'condition':htmlToText[_0x79f4('0x9')](utils[_0x79f4('0xa')](_0x4760b2[0x0],this),{'wordwrap':![]})[_0x79f4('0xb')](/<\/?[^>]+(>|$)/g,''),'priorityTrue':_0x4760b2[0x1],'priorityFalse':_0x4760b2[0x2]};var _0x195658=gotoif[_0x79f4('0x0')](_0x464b11,{'typecast':!![]});if(_0x195658['length']){logger[_0x79f4('0xc')]('[%s][GOTOIF]\x20%s',_0x3f3ce0,_[_0x79f4('0xd')](_0x195658,'message')[_0x79f4('0xe')](',\x20'));_0x115d78[_0x79f4('0xf')]();}else{try{var _0x36f61a=eval('('+_0x464b11[_0x79f4('0x10')]+')');var _0x12005e=_0x36f61a?_0x464b11[_0x79f4('0x11')]:_0x464b11['priorityFalse'];logger['info'](_0x79f4('0x12'),_0x3f3ce0,_0x464b11[_0x79f4('0x10')],_0x36f61a,_0x12005e||'next');if(_0x12005e){var _0x406a93=_[_0x79f4('0x13')](_0x115d78[_0x79f4('0x14')](),{'p':_0x12005e});if(_0x406a93>=0x0){logger[_0x79f4('0x15')](_0x79f4('0x16'),_0x3f3ce0,_0x12005e||'next',_0x406a93);_0x115d78[_0x79f4('0x17')](_0x406a93);}else{logger['info'](_0x79f4('0x18'),_0x3f3ce0,_0x12005e||'next');_0x115d78[_0x79f4('0xf')]();}}else{_0x115d78[_0x79f4('0x17')]();}}catch(_0x306ccd){logger[_0x79f4('0xc')](_0x79f4('0x19'),_0x3f3ce0,_0x306ccd[_0x79f4('0x1a')]);_0x115d78[_0x79f4('0xf')]();}}}catch(_0x1deb70){logger['error'](_0x79f4('0x1b'),_0x3f3ce0,JSON['stringify'](_0x1deb70));_0x115d78['stop']();}};};
\ No newline at end of file
+var _0x12b5=['join','stop','condition','priorityTrue','priorityFalse','info','[%s][GOTOIF]\x20condition\x20%s\x20is\x20%s\x20try\x20goto\x20priority\x20%s','findIndex','rules','[%s][GOTOIF]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','next','[%s][GOTOIF]\x20priority\x20%s\x20not\x20found','stringify','lodash','html-to-text','./utils','../../../../config/logger','routing','string','number','priority\x20true\x20is\x20a\x20number','priority\x20false\x20is\x20a\x20number','fromString','getMustacheRender','replace','validate','length','error','[%s][GOTOIF]\x20%s','map','message'];(function(_0x1274b6,_0x5c61b6){var _0x213bcb=function(_0x363ab1){while(--_0x363ab1){_0x1274b6['push'](_0x1274b6['shift']());}};_0x213bcb(++_0x5c61b6);}(_0x12b5,0x1bf));var _0x512b=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0x12b5[_0x3dd15e];return _0x231fd0;};'use strict';var schema=require('validate');var _=require(_0x512b('0x0'));var htmlToText=require(_0x512b('0x1'));var utils=require(_0x512b('0x2'));var logger=require(_0x512b('0x3'))(_0x512b('0x4'));var gotoif=schema({'condition':{'type':_0x512b('0x5'),'required':!![],'message':'condition\x20is\x20a\x20string\x20and\x20it\x20is\x20required'},'priorityTrue':{'type':_0x512b('0x6'),'message':_0x512b('0x7')},'priorityFalse':{'type':_0x512b('0x6'),'message':_0x512b('0x8')}});exports['consequence']=function(_0x528a46,_0x2957f0){return function(_0x4c8b8e){try{var _0x21e6d0={'condition':htmlToText[_0x512b('0x9')](utils[_0x512b('0xa')](_0x2957f0[0x0],this),{'wordwrap':![]})[_0x512b('0xb')](/<\/?[^>]+(>|$)/g,''),'priorityTrue':_0x2957f0[0x1],'priorityFalse':_0x2957f0[0x2]};var _0x499c97=gotoif[_0x512b('0xc')](_0x21e6d0,{'typecast':!![]});if(_0x499c97[_0x512b('0xd')]){logger[_0x512b('0xe')](_0x512b('0xf'),_0x528a46,_[_0x512b('0x10')](_0x499c97,_0x512b('0x11'))[_0x512b('0x12')](',\x20'));_0x4c8b8e[_0x512b('0x13')]();}else{try{var _0x542d9e=eval('('+_0x21e6d0[_0x512b('0x14')]+')');var _0xcecf43=_0x542d9e?_0x21e6d0[_0x512b('0x15')]:_0x21e6d0[_0x512b('0x16')];logger[_0x512b('0x17')](_0x512b('0x18'),_0x528a46,_0x21e6d0['condition'],_0x542d9e,_0xcecf43||'next');if(_0xcecf43){var _0x54f37d=_[_0x512b('0x19')](_0x4c8b8e[_0x512b('0x1a')](),{'p':_0xcecf43});if(_0x54f37d>=0x0){logger['info'](_0x512b('0x1b'),_0x528a46,_0xcecf43||_0x512b('0x1c'),_0x54f37d);_0x4c8b8e[_0x512b('0x1c')](_0x54f37d);}else{logger[_0x512b('0x17')](_0x512b('0x1d'),_0x528a46,_0xcecf43||_0x512b('0x1c'));_0x4c8b8e['stop']();}}else{_0x4c8b8e[_0x512b('0x1c')]();}}catch(_0x5adc3e){logger[_0x512b('0xe')]('[%s][GOTOIF]\x20eval\x20error:\x20%s',_0x528a46,_0x5adc3e[_0x512b('0x11')]);_0x4c8b8e['stop']();}}}catch(_0x14297b){logger['error']('[%s][GOTOIF]\x20%s',_0x528a46,JSON[_0x512b('0x1e')](_0x14297b));_0x4c8b8e['stop']();}};};
\ No newline at end of file
index 4ff80ef..bae4d40 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x8dfa=['number','consequence','length','error','[%s][GOTOP]\x20%s','message','join','stop','info','[%s][GOTOP]\x20priority\x20%s','priority','rules','next','stringify','validate','lodash','../../../../config/logger'];(function(_0x1b74d6,_0x5b7972){var _0x2e432e=function(_0xe76962){while(--_0xe76962){_0x1b74d6['push'](_0x1b74d6['shift']());}};_0x2e432e(++_0x5b7972);}(_0x8dfa,0x1a6));var _0xa8df=function(_0x5e6cb8,_0x16cf56){_0x5e6cb8=_0x5e6cb8-0x0;var _0x3faeb3=_0x8dfa[_0x5e6cb8];return _0x3faeb3;};'use strict';var schema=require(_0xa8df('0x0'));var _=require(_0xa8df('0x1'));var logger=require(_0xa8df('0x2'))('routing');var gotop=schema({'priority':{'type':_0xa8df('0x3'),'required':!![],'message':'priority\x20is\x20a\x20number\x20and\x20it\x20is\x20required'}});exports[_0xa8df('0x4')]=function(_0x1954a8,_0x2d0897){return function(_0x15e42f){try{var _0x386616={'priority':_0x2d0897[0x0]};var _0x584a93=gotop[_0xa8df('0x0')](_0x386616,{'typecast':!![]});if(_0x584a93[_0xa8df('0x5')]){logger[_0xa8df('0x6')](_0xa8df('0x7'),_0x1954a8,_['map'](_0x584a93,_0xa8df('0x8'))[_0xa8df('0x9')](',\x20'));_0x15e42f[_0xa8df('0xa')]();}else{logger[_0xa8df('0xb')](_0xa8df('0xc'),_0x1954a8,_0x386616[_0xa8df('0xd')]);if(_0x386616[_0xa8df('0xd')]){var _0x4684f6=_['findIndex'](_0x15e42f[_0xa8df('0xe')](),{'p':_0x386616[_0xa8df('0xd')]});if(_0x4684f6>=0x0){logger[_0xa8df('0xb')]('[%s][GOTOP]\x20priority\x20%s\x20found\x20at\x20index:\x20%s',_0x1954a8,_0x386616[_0xa8df('0xd')]||_0xa8df('0xf'),_0x4684f6);_0x15e42f[_0xa8df('0xf')](_0x4684f6);}else{logger[_0xa8df('0xb')]('[%s][GOTOP]\x20priority\x20%s\x20not\x20found',_0x1954a8,_0x386616['priority']||'next');_0x15e42f['stop']();}}else{_0x15e42f['next']();}}}catch(_0x14e84b){logger[_0xa8df('0x6')]('[%s][GOTOP]\x20%s',_0x1954a8,JSON[_0xa8df('0x10')](_0x14e84b));_0x15e42f[_0xa8df('0xa')]();}};};
\ No newline at end of file
+var _0x8f4a=['error','[%s][GOTOP]\x20%s','map','message','join','info','[%s][GOTOP]\x20priority\x20%s','priority','findIndex','rules','[%s][GOTOP]\x20priority\x20%s\x20found\x20at\x20index:\x20%s','next','stop','stringify','validate','../../../../config/logger','routing','priority\x20is\x20a\x20number\x20and\x20it\x20is\x20required'];(function(_0x3358ba,_0x24c5fc){var _0x296e73=function(_0x843ff3){while(--_0x843ff3){_0x3358ba['push'](_0x3358ba['shift']());}};_0x296e73(++_0x24c5fc);}(_0x8f4a,0x10a));var _0xa8f4=function(_0x5631db,_0x4f1b52){_0x5631db=_0x5631db-0x0;var _0x339a67=_0x8f4a[_0x5631db];return _0x339a67;};'use strict';var schema=require(_0xa8f4('0x0'));var _=require('lodash');var logger=require(_0xa8f4('0x1'))(_0xa8f4('0x2'));var gotop=schema({'priority':{'type':'number','required':!![],'message':_0xa8f4('0x3')}});exports['consequence']=function(_0x436619,_0x55e62d){return function(_0x5ccfec){try{var _0x5c04ca={'priority':_0x55e62d[0x0]};var _0x465d78=gotop[_0xa8f4('0x0')](_0x5c04ca,{'typecast':!![]});if(_0x465d78['length']){logger[_0xa8f4('0x4')](_0xa8f4('0x5'),_0x436619,_[_0xa8f4('0x6')](_0x465d78,_0xa8f4('0x7'))[_0xa8f4('0x8')](',\x20'));_0x5ccfec['stop']();}else{logger[_0xa8f4('0x9')](_0xa8f4('0xa'),_0x436619,_0x5c04ca[_0xa8f4('0xb')]);if(_0x5c04ca[_0xa8f4('0xb')]){var _0x324dc1=_[_0xa8f4('0xc')](_0x5ccfec[_0xa8f4('0xd')](),{'p':_0x5c04ca[_0xa8f4('0xb')]});if(_0x324dc1>=0x0){logger['info'](_0xa8f4('0xe'),_0x436619,_0x5c04ca[_0xa8f4('0xb')]||'next',_0x324dc1);_0x5ccfec[_0xa8f4('0xf')](_0x324dc1);}else{logger[_0xa8f4('0x9')]('[%s][GOTOP]\x20priority\x20%s\x20not\x20found',_0x436619,_0x5c04ca[_0xa8f4('0xb')]||'next');_0x5ccfec[_0xa8f4('0x10')]();}}else{_0x5ccfec['next']();}}}catch(_0x5c1221){logger[_0xa8f4('0x4')]('[%s][GOTOP]\x20%s',_0x436619,JSON[_0xa8f4('0x11')](_0x5c1221));_0x5ccfec[_0xa8f4('0x10')]();}};};
\ No newline at end of file
index 0eb8e82..bb1001d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xe29a=['routing','../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/mailMessage','../../rpc/smsMessage','../../rpc/faxMessage','consequence','getMustacheRender','contact','chat','ChatWebsiteId','account','upperFirst','channel','interaction','Message','create','then','info','[%s][MESSAGE]\x20%s','body','catch','error','stringify','lodash','../../../../config/logger'];(function(_0x344754,_0x5db1fb){var _0x3af10e=function(_0x2974fb){while(--_0x2974fb){_0x344754['push'](_0x344754['shift']());}};_0x3af10e(++_0x5db1fb);}(_0xe29a,0x66));var _0xae29=function(_0x1079c7,_0x50db24){_0x1079c7=_0x1079c7-0x0;var _0x5e441c=_0xe29a[_0x1079c7];return _0x5e441c;};'use strict';var _=require(_0xae29('0x0'));var utils=require('./utils');var logger=require(_0xae29('0x1'))(_0xae29('0x2'));var rpc={'chatMessage':require(_0xae29('0x3')),'openchannelMessage':require(_0xae29('0x4')),'mailMessage':require(_0xae29('0x5')),'smsMessage':require(_0xae29('0x6')),'faxMessage':require(_0xae29('0x7'))};exports[_0xae29('0x8')]=function(_0x30fa46,_0xceecc7){return function(_0x1cd3ef){try{var _0x47e2c9={'body':utils[_0xae29('0x9')](_0xceecc7[0x0],this),'ContactId':this[_0xae29('0xa')]['id']};if(this['channel']===_0xae29('0xb')){_0x47e2c9[_0xae29('0xc')]=this[_0xae29('0xd')]['id'];}else{_0x47e2c9[_[_0xae29('0xe')](this[_0xae29('0xf')])+'AccountId']=this['account']['id'];}_0x47e2c9[_[_0xae29('0xe')](this[_0xae29('0xf')])+'InteractionId']=this[_0xae29('0x10')]['id'];if(rpc[this[_0xae29('0xf')]+_0xae29('0x11')]){return rpc[this['channel']+_0xae29('0x11')][_0xae29('0x12')](_0x47e2c9)[_0xae29('0x13')](function(_0x409b1c){logger[_0xae29('0x14')](_0xae29('0x15'),_0x30fa46,_0x47e2c9[_0xae29('0x16')]);_0x1cd3ef['next']();})[_0xae29('0x17')](function(_0xd08e69){logger[_0xae29('0x18')](_0xae29('0x15'),_0x30fa46,JSON[_0xae29('0x19')](_0xd08e69));_0x1cd3ef['stop']();});}}catch(_0x4da49b){logger[_0xae29('0x18')]('[%s][MESSAGE]\x20%s',_0x30fa46,JSON[_0xae29('0x19')](_0x4da49b));_0x1cd3ef['stop']();}};};
\ No newline at end of file
+var _0x48eb=['../../rpc/chatMessage','../../rpc/openchannelMessage','../../rpc/smsMessage','../../rpc/faxMessage','getMustacheRender','contact','channel','chat','ChatWebsiteId','account','upperFirst','interaction','Message','create','then','info','[%s][MESSAGE]\x20%s','catch','error','stop','stringify','lodash','./utils','../../../../config/logger'];(function(_0x48abcb,_0x5e92b0){var _0x5b5e52=function(_0x3c0204){while(--_0x3c0204){_0x48abcb['push'](_0x48abcb['shift']());}};_0x5b5e52(++_0x5e92b0);}(_0x48eb,0x135));var _0xb48e=function(_0x49136d,_0x3f6127){_0x49136d=_0x49136d-0x0;var _0x40d292=_0x48eb[_0x49136d];return _0x40d292;};'use strict';var _=require(_0xb48e('0x0'));var utils=require(_0xb48e('0x1'));var logger=require(_0xb48e('0x2'))('routing');var rpc={'chatMessage':require(_0xb48e('0x3')),'openchannelMessage':require(_0xb48e('0x4')),'mailMessage':require('../../rpc/mailMessage'),'smsMessage':require(_0xb48e('0x5')),'faxMessage':require(_0xb48e('0x6'))};exports['consequence']=function(_0x19ea7c,_0x2e688d){return function(_0x5d9cb1){try{var _0x46b595={'body':utils[_0xb48e('0x7')](_0x2e688d[0x0],this),'ContactId':this[_0xb48e('0x8')]['id']};if(this[_0xb48e('0x9')]===_0xb48e('0xa')){_0x46b595[_0xb48e('0xb')]=this[_0xb48e('0xc')]['id'];}else{_0x46b595[_[_0xb48e('0xd')](this['channel'])+'AccountId']=this['account']['id'];}_0x46b595[_['upperFirst'](this[_0xb48e('0x9')])+'InteractionId']=this[_0xb48e('0xe')]['id'];if(rpc[this[_0xb48e('0x9')]+'Message']){return rpc[this[_0xb48e('0x9')]+_0xb48e('0xf')][_0xb48e('0x10')](_0x46b595)[_0xb48e('0x11')](function(_0x28f867){logger[_0xb48e('0x12')](_0xb48e('0x13'),_0x19ea7c,_0x46b595['body']);_0x5d9cb1['next']();})[_0xb48e('0x14')](function(_0xfe76a9){logger[_0xb48e('0x15')](_0xb48e('0x13'),_0x19ea7c,JSON['stringify'](_0xfe76a9));_0x5d9cb1[_0xb48e('0x16')]();});}}catch(_0xa58ac8){logger['error']('[%s][MESSAGE]\x20%s',_0x19ea7c,JSON[_0xb48e('0x17')](_0xa58ac8));_0x5d9cb1['stop']();}};};
\ No newline at end of file
index 49412aa..e46f355 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x65e1=['info','[%s][NOOP]\x20%s','getMustacheRender','next','error','stringify','stop','./utils','routing','consequence'];(function(_0x486369,_0x476e36){var _0xee91c5=function(_0x136752){while(--_0x136752){_0x486369['push'](_0x486369['shift']());}};_0xee91c5(++_0x476e36);}(_0x65e1,0x151));var _0x165e=function(_0x397e5f,_0x454c8f){_0x397e5f=_0x397e5f-0x0;var _0x5302b8=_0x65e1[_0x397e5f];return _0x5302b8;};'use strict';var utils=require(_0x165e('0x0'));var logger=require('../../../../config/logger')(_0x165e('0x1'));exports[_0x165e('0x2')]=function(_0x3573ff,_0x108cd4){return function(_0x20339f){try{logger[_0x165e('0x3')](_0x165e('0x4'),_0x3573ff,utils[_0x165e('0x5')](_0x108cd4[0x0],this));_0x20339f[_0x165e('0x6')]();}catch(_0x39d8a1){logger[_0x165e('0x7')](_0x165e('0x4'),_0x3573ff,JSON[_0x165e('0x8')](_0x39d8a1));_0x20339f[_0x165e('0x9')]();}};};
\ No newline at end of file
+var _0xe011=['next','error','stringify','stop','./utils','routing','consequence','[%s][NOOP]\x20%s','getMustacheRender'];(function(_0x204219,_0x4959ab){var _0x45b535=function(_0x50a582){while(--_0x50a582){_0x204219['push'](_0x204219['shift']());}};_0x45b535(++_0x4959ab);}(_0xe011,0x100));var _0x1e01=function(_0x4cb272,_0x52c0e9){_0x4cb272=_0x4cb272-0x0;var _0x57b4aa=_0xe011[_0x4cb272];return _0x57b4aa;};'use strict';var utils=require(_0x1e01('0x0'));var logger=require('../../../../config/logger')(_0x1e01('0x1'));exports[_0x1e01('0x2')]=function(_0xa4de1f,_0xef92e8){return function(_0x189263){try{logger['info'](_0x1e01('0x3'),_0xa4de1f,utils[_0x1e01('0x4')](_0xef92e8[0x0],this));_0x189263[_0x1e01('0x5')]();}catch(_0x184d1f){logger[_0x1e01('0x6')](_0x1e01('0x3'),_0xa4de1f,JSON[_0x1e01('0x7')](_0x184d1f));_0x189263[_0x1e01('0x8')]();}};};
\ No newline at end of file
index c17c714..972c78b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x7680=['validate','lodash','util','seq-queue','moment','ioredis','../../../../config/logger','routing','./strategy','redis','defaults','localhost','queue_id','account','queue','from','emit','format','pick','%sQueuesWaitingInteractions','%s:queue:%s','%s_queue_waiting_interaction:%s','remove','../../rpc/openchannelQueueReport','../../rpc/faxQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel','QueueId','InteractionId','interaction','MessageId','message','chat','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','create','error','create\x20queue\x20report','accepted','[%s][STOP:QUEUE][NAME:%s]','update','catch','update\x20queue\x20report','timeout','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','length','[%s][QUEUE]\x20%s','map','join','stop','find','createQueue','atimeout','qtimeout','rules','close','[%s][QUEUE]\x20ROUTING\x20STOPPED','[%s][QUEUE]\x20ROUTING\x20END','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','log','stack'];(function(_0x24e341,_0x24060d){var _0x568d67=function(_0x4c7ef3){while(--_0x4c7ef3){_0x24e341['push'](_0x24e341['shift']());}};_0x568d67(++_0x24060d);}(_0x7680,0x9a));var _0x0768=function(_0x1fcbb7,_0x21ff69){_0x1fcbb7=_0x1fcbb7-0x0;var _0x1a5046=_0x7680[_0x1fcbb7];return _0x1a5046;};'use strict';var schema=require(_0x0768('0x0'));var _=require(_0x0768('0x1'));var util=require(_0x0768('0x2'));var seqqueue=require(_0x0768('0x3'));var moment=require(_0x0768('0x4'));var Redis=require(_0x0768('0x5'));var config=require('../../../../config/environment');var logger=require(_0x0768('0x6'))(_0x0768('0x7'));var strategy=require(_0x0768('0x8'));config[_0x0768('0x9')]=_[_0x0768('0xa')](config[_0x0768('0x9')],{'host':_0x0768('0xb'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config[_0x0768('0x9')]));var attributes=['id',_0x0768('0xc'),_0x0768('0xd'),_0x0768('0xe'),_0x0768('0xf'),'joinAt'];function emit(_0x3f0c01,_0x2f1c10,_0x56cf5a){io['to'](_0x3f0c01)[_0x0768('0x10')](_0x2f1c10,_0x56cf5a);}function emitChannelQueueInteraction(_0x30f286,_0x4d0dd2,_0x1d2edf,_0x452138,_0x38e0be,_0x46af6c,_0x23d594,_0x3f98d4){_0x1d2edf[_0x0768('0xc')]=_0x3f98d4;_0x1d2edf[_0x0768('0xe')]=_0x4d0dd2;_0x1d2edf[_0x0768('0xd')]=_0x452138;_0x1d2edf['id']=_0x38e0be;if(_0x46af6c){_0x23d594[util[_0x0768('0x11')]('%sQueuesWaitingInteractions',_0x30f286)][_0x38e0be]=_[_0x0768('0x12')](_0x1d2edf,attributes);}else{delete _0x23d594[util[_0x0768('0x11')](_0x0768('0x13'),_0x30f286)][_0x38e0be];}emit(util[_0x0768('0x11')](_0x0768('0x14'),_0x30f286,_0x4d0dd2),util['format'](_0x0768('0x15'),_0x30f286,_0x46af6c?'save':_0x0768('0x16')),_[_0x0768('0x12')](_0x1d2edf,attributes));}var rpc={'openchannelQueueReport':require(_0x0768('0x17')),'mailQueueReport':require('../../rpc/mailQueueReport'),'chatQueueReport':require('../../rpc/chatQueueReport'),'smsQueueReport':require('../../rpc/smsQueueReport'),'faxQueueReport':require(_0x0768('0x18'))};var queue=schema({'name':{'type':_0x0768('0x19'),'required':!![],'message':_0x0768('0x1a')},'timeout':{'type':_0x0768('0x1b'),'message':'timeout\x20is\x20a\x20number'}});function startRouting(_0x3f3c11,_0x4e17c8,_0x3d179f,_0x3e2746){if(_0x3f3c11&&_0x4e17c8&&_0x3d179f){_0x4e17c8[_0x0768('0x1c')]+=0x1;var _0x259dce={'uniqueid':_0x3f3c11,'from':_0x3d179f[_0x0768('0x1d')]?_0x3d179f['body'][_0x0768('0xf')]:'','joinAt':moment()[_0x0768('0x11')](_0x0768('0x1e')),'ContactId':_0x3d179f[_0x0768('0x1f')]?_0x3d179f['contact']['id']:null,'ListId':_0x3d179f[_0x0768('0x20')]?_0x3d179f[_0x0768('0x20')]['id']:null};_0x259dce[_[_0x0768('0x21')](_0x3d179f[_0x0768('0x22')])+_0x0768('0x23')]=_0x4e17c8['id']||null;_0x259dce[_[_0x0768('0x21')](_0x3d179f[_0x0768('0x22')])+_0x0768('0x24')]=_0x3d179f[_0x0768('0x25')]?_0x3d179f['interaction']['id']:null;_0x259dce[_[_0x0768('0x21')](_0x3d179f[_0x0768('0x22')])+_0x0768('0x26')]=_0x3d179f['message']?_0x3d179f[_0x0768('0x27')]['id']:null;_0x259dce[_[_0x0768('0x21')](_0x3d179f[_0x0768('0x22')])+(_0x3d179f['channel']!==_0x0768('0x28')?'AccountId':_0x0768('0x29'))]=_0x3d179f[_0x0768('0xd')]?_0x3d179f['account']['id']:null;logger[_0x0768('0x2a')](util[_0x0768('0x11')](_0x0768('0x2b'),_0x3f3c11,_0x4e17c8['name']));emitChannelQueueInteraction(_0x3d179f['channel'],_0x4e17c8[_0x0768('0x2c')],_0x259dce,_0x3d179f[_0x0768('0xd')][_0x0768('0x2c')],_0x3d179f[_0x0768('0x27')]['id'],!![],_0x3e2746,_0x4e17c8['id']);if(rpc[_0x3d179f[_0x0768('0x22')]+_0x0768('0x2d')]){return rpc[_0x3d179f['channel']+'QueueReport'][_0x0768('0x2e')](_0x259dce)['catch'](function(_0x513e1e){logger[_0x0768('0x2f')](_0x0768('0x30'));});}}}function stopRouting(_0x514df3,_0xace494,_0x28a7b8,_0xb54391){if(_0x514df3&&_0xace494){_0xace494[_0x0768('0x1c')]-=0x1;var _0x3b35ef={'leaveAt':moment()[_0x0768('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'acceptAt':moment()[_0x0768('0x11')](_0x0768('0x1e')),'reason':_0x0768('0x31')};logger['info'](util['format'](_0x0768('0x32'),_0x514df3,_0xace494['name']));emitChannelQueueInteraction(_0x28a7b8[_0x0768('0x22')],_0xace494['name'],_0x28a7b8[_0x0768('0x1d')],_0x28a7b8['account'][_0x0768('0x2c')],_0x28a7b8[_0x0768('0x27')]['id'],![],_0xb54391,_0xace494['id']);if(rpc[_0x28a7b8['channel']+'QueueReport']){return rpc[_0x28a7b8['channel']+_0x0768('0x2d')][_0x0768('0x33')](_0x514df3,_0x3b35ef)[_0x0768('0x34')](function(_0x45e623){logger[_0x0768('0x2f')](_0x0768('0x35'));});}}}function endRouting(_0x1f4c57,_0x37901c,_0x137fa7,_0xf12697){if(_0x1f4c57&&_0x37901c){_0x37901c['waiting']-=0x1;var _0x46cd18={'leaveAt':moment()[_0x0768('0x11')](_0x0768('0x1e')),'exitAt':moment()[_0x0768('0x11')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x0768('0x36')};logger[_0x0768('0x2a')](util[_0x0768('0x11')](_0x0768('0x37'),_0x1f4c57,_0x37901c[_0x0768('0x2c')]));emitChannelQueueInteraction(_0x137fa7['channel'],_0x37901c[_0x0768('0x2c')],_0x137fa7[_0x0768('0x1d')],_0x137fa7[_0x0768('0xd')][_0x0768('0x2c')],_0x137fa7[_0x0768('0x27')]['id'],![],_0xf12697);if(rpc[_0x137fa7[_0x0768('0x22')]+_0x0768('0x2d')]){return rpc[_0x137fa7['channel']+_0x0768('0x2d')][_0x0768('0x33')](_0x1f4c57,_0x46cd18)[_0x0768('0x34')](function(_0x5b32b2){logger[_0x0768('0x2f')](_0x0768('0x35'));});}}}function handleFindQueue(_0x33977c){return function(_0x44e8ca){return _0x44e8ca[_0x0768('0x2c')][_0x0768('0x38')]()===_0x33977c[_0x0768('0x38')]();};}exports[_0x0768('0x39')]=function(_0x3501bb,_0x54b8f9,_0x437216,_0x64252b){return function(_0x3a3b55){try{var _0xdfe8ed={'name':_0x54b8f9[0x0],'timeout':_0x54b8f9[0x1]};var _0x10ceca=queue[_0x0768('0x0')](_0xdfe8ed,{'typecast':!![]});if(_0x10ceca[_0x0768('0x3a')]){logger[_0x0768('0x2f')](_0x0768('0x3b'),_0x3501bb,_[_0x0768('0x3c')](_0x10ceca,_0x0768('0x27'))[_0x0768('0x3d')](',\x20'));_0x3a3b55[_0x0768('0x3e')]();}else{var _0x1c7584=_[_0x0768('0x3f')](_0x437216[_0x64252b['channel']+'Queues'],handleFindQueue(_0xdfe8ed['name']));if(_0x1c7584){startRouting(_0x3501bb,_0x1c7584,_0x64252b,_0x437216);var _0x15ea2e=(_0x1c7584[_0x0768('0x36')]||0xa)*0x3e8;var _0x45cc52=(_0xdfe8ed['timeout']||0x14)*0x3e8;var _0x505b03,_0x29b3fc;if(_0x15ea2e>_0x45cc52){_0x45cc52=_0x15ea2e;}var _0x9e2073=seqqueue[_0x0768('0x40')](_0x15ea2e);_0x9e2073['id']=_0x3501bb;_0x9e2073[_0x0768('0x41')]=_0x15ea2e;_0x9e2073[_0x0768('0x42')]=_0x45cc52;_0x9e2073[_0x0768('0x22')]=_0x64252b[_0x0768('0x22')];_0x437216[_0x0768('0x43')][_0x3501bb]['on']('end',function(){stopRouting(_0x3501bb,_0x1c7584,_0x64252b,_0x437216);_0x9e2073[_0x0768('0x44')](!![]);clearTimeout(_0x505b03);_0x505b03=undefined;if(_0x437216['rules'][_0x3501bb]){delete _0x437216[_0x0768('0x43')][_0x3501bb];}logger[_0x0768('0x2a')](_0x0768('0x45'),_0x3501bb);_0x3a3b55[_0x0768('0x3e')]();});_0x505b03=setTimeout(function(){endRouting(_0x3501bb,_0x1c7584,_0x64252b,_0x437216);clearTimeout(_0x505b03);_0x9e2073[_0x0768('0x44')](!![]);logger[_0x0768('0x2a')](_0x0768('0x46'),_0x3501bb);_0x3a3b55['next']();},_0x45cc52);switch(_0x1c7584[_0x0768('0x47')]){case'rrmemory':strategy[_0x0768('0x48')](_0x9e2073,_0x1c7584,_0x437216,_0x64252b);break;default:strategy[_0x0768('0x49')](_0x9e2073,_0x1c7584,_0x437216,_0x64252b);}}else{logger[_0x0768('0x2f')](_0x0768('0x4a'),_0x3501bb,_0xdfe8ed['name']);_0x3a3b55[_0x0768('0x3e')]();}}}catch(_0x19a50a){console[_0x0768('0x4b')](_0x19a50a);logger['error'](_0x0768('0x3b'),_0x3501bb,_0x19a50a[_0x0768('0x4c')]);_0x3a3b55['stop']();}};};
\ No newline at end of file
+var _0x4bf5=['QueueId','InteractionId','interaction','MessageId','message','AccountId','WebsiteId','info','[%s][START:QUEUE][NAME:%s]','name','QueueReport','catch','error','create\x20queue\x20report','accepted','[%s][STOP:QUEUE][NAME:%s]','update','update\x20queue\x20report','[%s][END:QUEUE][NAME:%s]','toLowerCase','consequence','[%s][QUEUE]\x20%s','stop','find','Queues','timeout','atimeout','qtimeout','end','close','rules','[%s][QUEUE]\x20ROUTING\x20STOPPED','[%s][QUEUE]\x20ROUTING\x20END','next','strategy','rrmemory','beepall','[%s][QUEUE]\x20queue\x20not\x20found\x20%s','validate','util','seq-queue','moment','../../../../config/logger','routing','./strategy','defaults','redis','localhost','queue_id','account','queue','from','joinAt','emit','%sQueuesWaitingInteractions','pick','format','%s:queue:%s','%s_queue_waiting_interaction:%s','remove','../../rpc/mailQueueReport','../../rpc/chatQueueReport','../../rpc/smsQueueReport','string','name\x20is\x20a\x20string\x20and\x20it\x20is\x20required','number','timeout\x20is\x20a\x20number','waiting','body','YYYY-MM-DD\x20HH:mm:ss','contact','list','upperFirst','channel'];(function(_0x56c8fd,_0x395865){var _0x43d86d=function(_0x3cbd1d){while(--_0x3cbd1d){_0x56c8fd['push'](_0x56c8fd['shift']());}};_0x43d86d(++_0x395865);}(_0x4bf5,0x198));var _0x54bf=function(_0x51bfdb,_0x57f7c5){_0x51bfdb=_0x51bfdb-0x0;var _0x258642=_0x4bf5[_0x51bfdb];return _0x258642;};'use strict';var schema=require(_0x54bf('0x0'));var _=require('lodash');var util=require(_0x54bf('0x1'));var seqqueue=require(_0x54bf('0x2'));var moment=require(_0x54bf('0x3'));var Redis=require('ioredis');var config=require('../../../../config/environment');var logger=require(_0x54bf('0x4'))(_0x54bf('0x5'));var strategy=require(_0x54bf('0x6'));config['redis']=_[_0x54bf('0x7')](config[_0x54bf('0x8')],{'host':_0x54bf('0x9'),'port':0x18eb});var io=require('socket.io-emitter')(new Redis(config['redis']));var attributes=['id',_0x54bf('0xa'),_0x54bf('0xb'),_0x54bf('0xc'),_0x54bf('0xd'),_0x54bf('0xe')];function emit(_0x5a4fbc,_0x56653c,_0x234f9b){io['to'](_0x5a4fbc)[_0x54bf('0xf')](_0x56653c,_0x234f9b);}function emitChannelQueueInteraction(_0x2e55a4,_0x35d76f,_0xe297e4,_0x2ca25f,_0x41c845,_0x383279,_0x46b0f8,_0x1805c1){_0xe297e4[_0x54bf('0xa')]=_0x1805c1;_0xe297e4[_0x54bf('0xc')]=_0x35d76f;_0xe297e4[_0x54bf('0xb')]=_0x2ca25f;_0xe297e4['id']=_0x41c845;if(_0x383279){_0x46b0f8[util['format'](_0x54bf('0x10'),_0x2e55a4)][_0x41c845]=_[_0x54bf('0x11')](_0xe297e4,attributes);}else{delete _0x46b0f8[util['format'](_0x54bf('0x10'),_0x2e55a4)][_0x41c845];}emit(util[_0x54bf('0x12')](_0x54bf('0x13'),_0x2e55a4,_0x35d76f),util[_0x54bf('0x12')](_0x54bf('0x14'),_0x2e55a4,_0x383279?'save':_0x54bf('0x15')),_['pick'](_0xe297e4,attributes));}var rpc={'openchannelQueueReport':require('../../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x54bf('0x16')),'chatQueueReport':require(_0x54bf('0x17')),'smsQueueReport':require(_0x54bf('0x18')),'faxQueueReport':require('../../rpc/faxQueueReport')};var queue=schema({'name':{'type':_0x54bf('0x19'),'required':!![],'message':_0x54bf('0x1a')},'timeout':{'type':_0x54bf('0x1b'),'message':_0x54bf('0x1c')}});function startRouting(_0x5725ec,_0x1226c,_0x12ac21,_0x5a9e5c){if(_0x5725ec&&_0x1226c&&_0x12ac21){_0x1226c[_0x54bf('0x1d')]+=0x1;var _0xfef97c={'uniqueid':_0x5725ec,'from':_0x12ac21[_0x54bf('0x1e')]?_0x12ac21[_0x54bf('0x1e')]['from']:'','joinAt':moment()['format'](_0x54bf('0x1f')),'ContactId':_0x12ac21[_0x54bf('0x20')]?_0x12ac21[_0x54bf('0x20')]['id']:null,'ListId':_0x12ac21[_0x54bf('0x21')]?_0x12ac21[_0x54bf('0x21')]['id']:null};_0xfef97c[_[_0x54bf('0x22')](_0x12ac21[_0x54bf('0x23')])+_0x54bf('0x24')]=_0x1226c['id']||null;_0xfef97c[_[_0x54bf('0x22')](_0x12ac21[_0x54bf('0x23')])+_0x54bf('0x25')]=_0x12ac21[_0x54bf('0x26')]?_0x12ac21['interaction']['id']:null;_0xfef97c[_['upperFirst'](_0x12ac21['channel'])+_0x54bf('0x27')]=_0x12ac21[_0x54bf('0x28')]?_0x12ac21[_0x54bf('0x28')]['id']:null;_0xfef97c[_[_0x54bf('0x22')](_0x12ac21[_0x54bf('0x23')])+(_0x12ac21[_0x54bf('0x23')]!=='chat'?_0x54bf('0x29'):_0x54bf('0x2a'))]=_0x12ac21[_0x54bf('0xb')]?_0x12ac21[_0x54bf('0xb')]['id']:null;logger[_0x54bf('0x2b')](util[_0x54bf('0x12')](_0x54bf('0x2c'),_0x5725ec,_0x1226c[_0x54bf('0x2d')]));emitChannelQueueInteraction(_0x12ac21[_0x54bf('0x23')],_0x1226c[_0x54bf('0x2d')],_0xfef97c,_0x12ac21['account']['name'],_0x12ac21[_0x54bf('0x28')]['id'],!![],_0x5a9e5c,_0x1226c['id']);if(rpc[_0x12ac21['channel']+_0x54bf('0x2e')]){return rpc[_0x12ac21['channel']+_0x54bf('0x2e')]['create'](_0xfef97c)[_0x54bf('0x2f')](function(_0x4a2a07){logger[_0x54bf('0x30')](_0x54bf('0x31'));});}}}function stopRouting(_0x235655,_0x3b2490,_0x2cdb80,_0x127ee0){if(_0x235655&&_0x3b2490){_0x3b2490['waiting']-=0x1;var _0x573c9a={'leaveAt':moment()['format'](_0x54bf('0x1f')),'acceptAt':moment()[_0x54bf('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':_0x54bf('0x32')};logger[_0x54bf('0x2b')](util['format'](_0x54bf('0x33'),_0x235655,_0x3b2490[_0x54bf('0x2d')]));emitChannelQueueInteraction(_0x2cdb80[_0x54bf('0x23')],_0x3b2490[_0x54bf('0x2d')],_0x2cdb80[_0x54bf('0x1e')],_0x2cdb80[_0x54bf('0xb')][_0x54bf('0x2d')],_0x2cdb80[_0x54bf('0x28')]['id'],![],_0x127ee0,_0x3b2490['id']);if(rpc[_0x2cdb80[_0x54bf('0x23')]+_0x54bf('0x2e')]){return rpc[_0x2cdb80[_0x54bf('0x23')]+_0x54bf('0x2e')][_0x54bf('0x34')](_0x235655,_0x573c9a)[_0x54bf('0x2f')](function(_0x5895b6){logger[_0x54bf('0x30')](_0x54bf('0x35'));});}}}function endRouting(_0x3d7cb2,_0x505982,_0x44f96a,_0x5355cf){if(_0x3d7cb2&&_0x505982){_0x505982[_0x54bf('0x1d')]-=0x1;var _0x497973={'leaveAt':moment()[_0x54bf('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'exitAt':moment()[_0x54bf('0x12')]('YYYY-MM-DD\x20HH:mm:ss'),'reason':'timeout'};logger[_0x54bf('0x2b')](util[_0x54bf('0x12')](_0x54bf('0x36'),_0x3d7cb2,_0x505982[_0x54bf('0x2d')]));emitChannelQueueInteraction(_0x44f96a['channel'],_0x505982['name'],_0x44f96a[_0x54bf('0x1e')],_0x44f96a[_0x54bf('0xb')]['name'],_0x44f96a[_0x54bf('0x28')]['id'],![],_0x5355cf);if(rpc[_0x44f96a[_0x54bf('0x23')]+_0x54bf('0x2e')]){return rpc[_0x44f96a[_0x54bf('0x23')]+_0x54bf('0x2e')]['update'](_0x3d7cb2,_0x497973)[_0x54bf('0x2f')](function(_0x4918af){logger[_0x54bf('0x30')](_0x54bf('0x35'));});}}}function handleFindQueue(_0x5be9cf){return function(_0x26bed2){return _0x26bed2[_0x54bf('0x2d')][_0x54bf('0x37')]()===_0x5be9cf['toLowerCase']();};}exports[_0x54bf('0x38')]=function(_0x4f0d03,_0x189f35,_0x5119d7,_0x471005){return function(_0x4fabae){try{var _0x3cf7b7={'name':_0x189f35[0x0],'timeout':_0x189f35[0x1]};var _0x51f97b=queue[_0x54bf('0x0')](_0x3cf7b7,{'typecast':!![]});if(_0x51f97b['length']){logger['error'](_0x54bf('0x39'),_0x4f0d03,_['map'](_0x51f97b,_0x54bf('0x28'))['join'](',\x20'));_0x4fabae[_0x54bf('0x3a')]();}else{var _0x312fa0=_[_0x54bf('0x3b')](_0x5119d7[_0x471005[_0x54bf('0x23')]+_0x54bf('0x3c')],handleFindQueue(_0x3cf7b7[_0x54bf('0x2d')]));if(_0x312fa0){startRouting(_0x4f0d03,_0x312fa0,_0x471005,_0x5119d7);var _0x40b8d2=(_0x312fa0[_0x54bf('0x3d')]||0xa)*0x3e8;var _0x53ce7d=(_0x3cf7b7[_0x54bf('0x3d')]||0x14)*0x3e8;var _0x56215c,_0x4fc07c;if(_0x40b8d2>_0x53ce7d){_0x53ce7d=_0x40b8d2;}var _0x1a6828=seqqueue['createQueue'](_0x40b8d2);_0x1a6828['id']=_0x4f0d03;_0x1a6828[_0x54bf('0x3e')]=_0x40b8d2;_0x1a6828[_0x54bf('0x3f')]=_0x53ce7d;_0x1a6828['channel']=_0x471005[_0x54bf('0x23')];_0x5119d7['rules'][_0x4f0d03]['on'](_0x54bf('0x40'),function(){stopRouting(_0x4f0d03,_0x312fa0,_0x471005,_0x5119d7);_0x1a6828[_0x54bf('0x41')](!![]);clearTimeout(_0x56215c);_0x56215c=undefined;if(_0x5119d7[_0x54bf('0x42')][_0x4f0d03]){delete _0x5119d7[_0x54bf('0x42')][_0x4f0d03];}logger[_0x54bf('0x2b')](_0x54bf('0x43'),_0x4f0d03);_0x4fabae['stop']();});_0x56215c=setTimeout(function(){endRouting(_0x4f0d03,_0x312fa0,_0x471005,_0x5119d7);clearTimeout(_0x56215c);_0x1a6828[_0x54bf('0x41')](!![]);logger[_0x54bf('0x2b')](_0x54bf('0x44'),_0x4f0d03);_0x4fabae[_0x54bf('0x45')]();},_0x53ce7d);switch(_0x312fa0[_0x54bf('0x46')]){case _0x54bf('0x47'):strategy[_0x54bf('0x47')](_0x1a6828,_0x312fa0,_0x5119d7,_0x471005);break;default:strategy[_0x54bf('0x48')](_0x1a6828,_0x312fa0,_0x5119d7,_0x471005);}}else{logger[_0x54bf('0x30')](_0x54bf('0x49'),_0x4f0d03,_0x3cf7b7[_0x54bf('0x2d')]);_0x4fabae[_0x54bf('0x3a')]();}}}catch(_0x5afce2){console['log'](_0x5afce2);logger[_0x54bf('0x30')](_0x54bf('0x39'),_0x4f0d03,_0x5afce2['stack']);_0x4fabae[_0x54bf('0x3a')]();}};};
\ No newline at end of file
index 5310cdf..374ff4d 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x945c=['realtime','agents','[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s','forcedOwnership','isAgentAvailable','channel','busy','busyQueue','showNotification','notificationId','writeLog',':FORCED','exports','lodash','uuid','../../../../../config/logger','agent','routing','squeue','push','handleTimeout','bind','timeout','drained','handleDrained','handleRun','prototype','info','isNil'];(function(_0x437d48,_0x2d75d3){var _0x443fcd=function(_0x286bcd){while(--_0x286bcd){_0x437d48['push'](_0x437d48['shift']());}};_0x443fcd(++_0x2d75d3);}(_0x945c,0x9e));var _0xc945=function(_0x3d6084,_0x4b738b){_0x3d6084=_0x3d6084-0x0;var _0x342378=_0x945c[_0x3d6084];return _0x342378;};'use strict';var _=require(_0xc945('0x0'));var uuid=require(_0xc945('0x1'));var util=require('./util');var logger=require(_0xc945('0x2'))('routing');var Agent=function(_0x3369bd,_0x3725c6,_0x4af1a0,_0x55af92){this['notificationId']=uuid['v4']();this['squeue']=_0x3369bd;this[_0xc945('0x3')]=_0x3725c6;this['realtime']=_0x4af1a0;this[_0xc945('0x4')]=_0x55af92;this[_0xc945('0x5')][_0xc945('0x6')](this['handleRun']['bind'](this),this[_0xc945('0x7')][_0xc945('0x8')](this));this['squeue']['on'](_0xc945('0x9'),this[_0xc945('0x7')][_0xc945('0x8')](this));this[_0xc945('0x5')]['on'](_0xc945('0xa'),this[_0xc945('0xb')][_0xc945('0x8')](this));};Agent['prototype'][_0xc945('0x6')]=function(){this[_0xc945('0x5')][_0xc945('0x6')](this[_0xc945('0xc')][_0xc945('0x8')](this),this[_0xc945('0x7')][_0xc945('0x8')](this));};Agent['prototype'][_0xc945('0xb')]=function(){this[_0xc945('0x7')](!![]);};Agent[_0xc945('0xd')][_0xc945('0xc')]=function(_0x43c63f){logger[_0xc945('0xe')]('[%s][AGENT]\x20try\x20with\x20%s',this[_0xc945('0x5')]['id'],this['agent']['id']);if(_[_0xc945('0xf')](this[_0xc945('0x10')][_0xc945('0x11')][this[_0xc945('0x3')]['id']])){logger[_0xc945('0xe')](_0xc945('0x12'),this[_0xc945('0x5')]['id'],this['agent']['id']);setTimeout(this[_0xc945('0x6')][_0xc945('0x8')](this),0x3e8);}else{if(this[_0xc945('0x4')][_0xc945('0x13')]||util[_0xc945('0x14')](this[_0xc945('0x5')]['id'],this[_0xc945('0x10')][_0xc945('0x11')][this[_0xc945('0x3')]['id']],this[_0xc945('0x5')][_0xc945('0x15')],![])){this[_0xc945('0x10')][_0xc945('0x11')][this[_0xc945('0x3')]['id']][_0xc945('0x16')]=!![];this[_0xc945('0x10')][_0xc945('0x11')][this[_0xc945('0x3')]['id']][_0xc945('0x17')]=undefined;util[_0xc945('0x18')](this[_0xc945('0x19')],this[_0xc945('0x5')]['id'],this[_0xc945('0x10')][_0xc945('0x11')][this['agent']['id']],null,this['routing']);util[_0xc945('0x1a')](this[_0xc945('0x5')]['id'],this[_0xc945('0x10')]['agents'][this[_0xc945('0x3')]['id']],'RINGING'+(this[_0xc945('0x4')][_0xc945('0x13')]?_0xc945('0x1b'):''));}else{logger[_0xc945('0xe')]('[%s][AGENT]\x20agent\x20%s\x20is\x20not\x20available',this['squeue']['id'],this['agent']['id']);setTimeout(this[_0xc945('0x6')][_0xc945('0x8')](this),0x3e8);}}};Agent[_0xc945('0xd')][_0xc945('0x7')]=function(_0x4bea28){if(_[_0xc945('0xf')](this[_0xc945('0x10')]['agents'][this['agent']['id']])){return logger[_0xc945('0xe')](_0xc945('0x12'),this[_0xc945('0x5')]['id'],this[_0xc945('0x3')]['id']);}else{logger[_0xc945('0xe')]('[%s][AGENT]\x20timeout\x20with\x20%s',this[_0xc945('0x5')]['id'],this[_0xc945('0x3')]['id']);util['hideNotification'](this['notificationId'],this[_0xc945('0x5')]['id'],this['realtime']['agents'][this[_0xc945('0x3')]['id']],null,this[_0xc945('0x4')]);this[_0xc945('0x10')][_0xc945('0x11')][this['agent']['id']]['busy']=![];this[_0xc945('0x10')][_0xc945('0x11')][this['agent']['id']][_0xc945('0x17')]=undefined;util[_0xc945('0x1a')](this[_0xc945('0x5')]['id'],this['realtime'][_0xc945('0x11')][this[_0xc945('0x3')]['id']],_0x4bea28?'STOP':'TIMEOUT');}if(!_0x4bea28){setTimeout(this[_0xc945('0x6')]['bind'](this),0x3e8);}};function agent(_0x591cd4,_0x11e087,_0x347ec2,_0x496f1e){return new Agent(_0x591cd4,_0x11e087,_0x347ec2,_0x496f1e);}module[_0xc945('0x1c')]=agent;
\ No newline at end of file
+var _0xc80c=['./util','../../../../../config/logger','routing','notificationId','agent','realtime','push','handleRun','handleTimeout','bind','squeue','drained','handleDrained','prototype','[%s][AGENT]\x20try\x20with\x20%s','isNil','info','[%s][AGENT]\x20agent\x20skipped,\x20unknown\x20id\x20%s','forcedOwnership','isAgentAvailable','channel','agents','busy','busyQueue','writeLog','[%s][AGENT]\x20agent\x20%s\x20is\x20not\x20available','[%s][AGENT]\x20timeout\x20with\x20%s','hideNotification','STOP','TIMEOUT','exports','lodash','uuid'];(function(_0x147bc8,_0x3a18ce){var _0x1a39e7=function(_0x48c014){while(--_0x48c014){_0x147bc8['push'](_0x147bc8['shift']());}};_0x1a39e7(++_0x3a18ce);}(_0xc80c,0x106));var _0xcc80=function(_0x25e7cb,_0x3579b7){_0x25e7cb=_0x25e7cb-0x0;var _0x375d92=_0xc80c[_0x25e7cb];return _0x375d92;};'use strict';var _=require(_0xcc80('0x0'));var uuid=require(_0xcc80('0x1'));var util=require(_0xcc80('0x2'));var logger=require(_0xcc80('0x3'))(_0xcc80('0x4'));var Agent=function(_0x569acd,_0x27ac6e,_0x3e7bf7,_0x11ce96){this[_0xcc80('0x5')]=uuid['v4']();this['squeue']=_0x569acd;this[_0xcc80('0x6')]=_0x27ac6e;this[_0xcc80('0x7')]=_0x3e7bf7;this[_0xcc80('0x4')]=_0x11ce96;this['squeue'][_0xcc80('0x8')](this[_0xcc80('0x9')]['bind'](this),this[_0xcc80('0xa')][_0xcc80('0xb')](this));this[_0xcc80('0xc')]['on']('timeout',this[_0xcc80('0xa')]['bind'](this));this[_0xcc80('0xc')]['on'](_0xcc80('0xd'),this[_0xcc80('0xe')]['bind'](this));};Agent['prototype'][_0xcc80('0x8')]=function(){this[_0xcc80('0xc')]['push'](this['handleRun'][_0xcc80('0xb')](this),this[_0xcc80('0xa')][_0xcc80('0xb')](this));};Agent[_0xcc80('0xf')][_0xcc80('0xe')]=function(){this[_0xcc80('0xa')](!![]);};Agent['prototype']['handleRun']=function(_0x3d47b9){logger['info'](_0xcc80('0x10'),this[_0xcc80('0xc')]['id'],this[_0xcc80('0x6')]['id']);if(_[_0xcc80('0x11')](this['realtime']['agents'][this[_0xcc80('0x6')]['id']])){logger[_0xcc80('0x12')](_0xcc80('0x13'),this['squeue']['id'],this[_0xcc80('0x6')]['id']);setTimeout(this[_0xcc80('0x8')][_0xcc80('0xb')](this),0x3e8);}else{if(this[_0xcc80('0x4')][_0xcc80('0x14')]||util[_0xcc80('0x15')](this['squeue']['id'],this[_0xcc80('0x7')]['agents'][this['agent']['id']],this[_0xcc80('0xc')][_0xcc80('0x16')],![])){this['realtime'][_0xcc80('0x17')][this['agent']['id']][_0xcc80('0x18')]=!![];this['realtime'][_0xcc80('0x17')][this[_0xcc80('0x6')]['id']][_0xcc80('0x19')]=undefined;util['showNotification'](this[_0xcc80('0x5')],this['squeue']['id'],this['realtime']['agents'][this[_0xcc80('0x6')]['id']],null,this[_0xcc80('0x4')]);util[_0xcc80('0x1a')](this[_0xcc80('0xc')]['id'],this['realtime']['agents'][this['agent']['id']],'RINGING'+(this['routing'][_0xcc80('0x14')]?':FORCED':''));}else{logger['info'](_0xcc80('0x1b'),this['squeue']['id'],this['agent']['id']);setTimeout(this[_0xcc80('0x8')][_0xcc80('0xb')](this),0x3e8);}}};Agent[_0xcc80('0xf')]['handleTimeout']=function(_0xc98e51){if(_[_0xcc80('0x11')](this[_0xcc80('0x7')][_0xcc80('0x17')][this[_0xcc80('0x6')]['id']])){return logger['info'](_0xcc80('0x13'),this[_0xcc80('0xc')]['id'],this[_0xcc80('0x6')]['id']);}else{logger[_0xcc80('0x12')](_0xcc80('0x1c'),this[_0xcc80('0xc')]['id'],this[_0xcc80('0x6')]['id']);util[_0xcc80('0x1d')](this[_0xcc80('0x5')],this[_0xcc80('0xc')]['id'],this[_0xcc80('0x7')]['agents'][this[_0xcc80('0x6')]['id']],null,this[_0xcc80('0x4')]);this[_0xcc80('0x7')][_0xcc80('0x17')][this[_0xcc80('0x6')]['id']][_0xcc80('0x18')]=![];this[_0xcc80('0x7')]['agents'][this[_0xcc80('0x6')]['id']][_0xcc80('0x19')]=undefined;util[_0xcc80('0x1a')](this['squeue']['id'],this['realtime']['agents'][this[_0xcc80('0x6')]['id']],_0xc98e51?_0xcc80('0x1e'):_0xcc80('0x1f'));}if(!_0xc98e51){setTimeout(this[_0xcc80('0x8')][_0xcc80('0xb')](this),0x3e8);}};function agent(_0xb3d741,_0x59e045,_0x565e14,_0x226722){return new Agent(_0xb3d741,_0x59e045,_0x565e14,_0x226722);}module[_0xcc80('0x20')]=agent;
\ No newline at end of file
index c7406cf..a973fdb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xfabf=['STOP','TIMEOUT','exports','lodash','uuid','./util','../../../../../config/logger','routing','notificationId','squeue','queue','realtime','handleRun','handleTimeout','bind','timeout','handleDrained','prototype','push','isNil','Agents','length','agents','info','isAgentAvailable','channel','writeLog','RINGING','busy','busyQueue','name','showNotification','[%s][QUEUE]\x20ALL\x20AGENTS\x20ARE\x20BUSY','[%s][QUEUE]\x20EMPTY','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s'];(function(_0x5e2a5a,_0xc7f231){var _0x5d7a78=function(_0xb293cf){while(--_0xb293cf){_0x5e2a5a['push'](_0x5e2a5a['shift']());}};_0x5d7a78(++_0xc7f231);}(_0xfabf,0x6c));var _0xffab=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xfabf[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xffab('0x0'));var uuid=require(_0xffab('0x1'));var util=require(_0xffab('0x2'));var logger=require(_0xffab('0x3'))(_0xffab('0x4'));var Beepall=function(_0x4bb528,_0x5b24e8,_0x2d3398,_0x3a95d5){this[_0xffab('0x5')]=uuid['v4']();this[_0xffab('0x6')]=_0x4bb528;this[_0xffab('0x7')]=_0x5b24e8;this[_0xffab('0x8')]=_0x2d3398;this[_0xffab('0x4')]=_0x3a95d5;this['squeue']['push'](this[_0xffab('0x9')]['bind'](this),this[_0xffab('0xa')][_0xffab('0xb')](this));this[_0xffab('0x6')]['on'](_0xffab('0xc'),this['handleTimeout'][_0xffab('0xb')](this));this[_0xffab('0x6')]['on']('drained',this[_0xffab('0xd')][_0xffab('0xb')](this));};Beepall[_0xffab('0xe')][_0xffab('0xf')]=function(){this['squeue'][_0xffab('0xf')](this['handleRun'][_0xffab('0xb')](this),this[_0xffab('0xa')][_0xffab('0xb')](this));};Beepall[_0xffab('0xe')][_0xffab('0xd')]=function(_0xf02a50){this[_0xffab('0xa')](!![]);};Beepall['prototype'][_0xffab('0x9')]=function(_0x3ea94a){var _0x5e0057=!![];if(!_['isNil'](this[_0xffab('0x7')])&&!_[_0xffab('0x10')](this[_0xffab('0x7')][_0xffab('0x11')])&&this[_0xffab('0x7')][_0xffab('0x11')]['length']>0x0){for(var _0x58fbad=0x0,_0x4ff2fc;_0x58fbad<this['queue'][_0xffab('0x11')][_0xffab('0x12')];_0x58fbad+=0x1){_0x4ff2fc=this[_0xffab('0x7')][_0xffab('0x11')][_0x58fbad]['id'];if(_[_0xffab('0x10')](this[_0xffab('0x8')][_0xffab('0x13')][_0x4ff2fc])){logger[_0xffab('0x14')]('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0xffab('0x6')]['id'],_0x4ff2fc);}else{if(util[_0xffab('0x15')](this['squeue']['id'],this['realtime'][_0xffab('0x13')][_0x4ff2fc],this[_0xffab('0x6')][_0xffab('0x16')],!![])){_0x5e0057=![];util[_0xffab('0x17')](this[_0xffab('0x6')]['id'],this['realtime']['agents'][_0x4ff2fc],_0xffab('0x18'));this[_0xffab('0x8')][_0xffab('0x13')][_0x4ff2fc][_0xffab('0x19')]=!![];this['realtime'][_0xffab('0x13')][_0x4ff2fc][_0xffab('0x1a')]=this['queue'][_0xffab('0x1b')];util[_0xffab('0x1c')](this[_0xffab('0x5')],this[_0xffab('0x6')]['id'],this[_0xffab('0x8')]['agents'][_0x4ff2fc],this['queue'],this[_0xffab('0x4')]);}}}if(_0x5e0057){logger[_0xffab('0x14')](_0xffab('0x1d'),this[_0xffab('0x6')]['id']);setTimeout(this[_0xffab('0xf')][_0xffab('0xb')](this),0x3e8);}}else{logger['info'](_0xffab('0x1e'),this['squeue']['id']);setTimeout(this[_0xffab('0xf')]['bind'](this),0x3e8);}};Beepall[_0xffab('0xe')]['handleTimeout']=function(_0xbba8ea){if(!_[_0xffab('0x10')](this[_0xffab('0x7')])&&!_[_0xffab('0x10')](this['queue'][_0xffab('0x11')])){for(var _0x3093bf=0x0,_0x1f573a;_0x3093bf<this[_0xffab('0x7')][_0xffab('0x11')][_0xffab('0x12')];_0x3093bf+=0x1){_0x1f573a=this[_0xffab('0x7')]['Agents'][_0x3093bf]['id'];if(_[_0xffab('0x10')](this['realtime']['agents'][_0x1f573a])){logger[_0xffab('0x14')](_0xffab('0x1f'),this['squeue']['id'],_0x1f573a);}else{util['hideNotification'](this[_0xffab('0x5')],this[_0xffab('0x6')]['id'],this[_0xffab('0x8')]['agents'][_0x1f573a],this[_0xffab('0x7')],this[_0xffab('0x4')]);util['writeLog'](this[_0xffab('0x6')]['id'],this['realtime'][_0xffab('0x13')][_0x1f573a],_0xbba8ea?_0xffab('0x20'):_0xffab('0x21'));this[_0xffab('0x8')][_0xffab('0x13')][_0x1f573a]['busy']=![];this[_0xffab('0x8')]['agents'][_0x1f573a][_0xffab('0x1a')]=undefined;}}}if(!_0xbba8ea){setTimeout(this['push']['bind'](this),0x3e8);}};function beepall(_0x2371f4,_0x333e7c,_0x1d49aa,_0xc89a05){return new Beepall(_0x2371f4,_0x333e7c,_0x1d49aa,_0xc89a05);}module[_0xffab('0x22')]=beepall;
\ No newline at end of file
+var _0x95d1=['handleDrained','prototype','isNil','Agents','length','agents','info','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','isAgentAvailable','channel','writeLog','RINGING','busyQueue','name','showNotification','[%s][QUEUE]\x20ALL\x20AGENTS\x20ARE\x20BUSY','[%s][QUEUE]\x20EMPTY','hideNotification','STOP','TIMEOUT','exports','lodash','uuid','../../../../../config/logger','notificationId','squeue','queue','realtime','routing','push','handleRun','bind','handleTimeout','timeout','drained'];(function(_0x321bb2,_0x202794){var _0x9c12ed=function(_0x263dd3){while(--_0x263dd3){_0x321bb2['push'](_0x321bb2['shift']());}};_0x9c12ed(++_0x202794);}(_0x95d1,0x173));var _0x195d=function(_0x2cfb4b,_0x584ee9){_0x2cfb4b=_0x2cfb4b-0x0;var _0x23639d=_0x95d1[_0x2cfb4b];return _0x23639d;};'use strict';var _=require(_0x195d('0x0'));var uuid=require(_0x195d('0x1'));var util=require('./util');var logger=require(_0x195d('0x2'))('routing');var Beepall=function(_0x5664e8,_0x58bcc9,_0x2aca65,_0x4b08d9){this[_0x195d('0x3')]=uuid['v4']();this[_0x195d('0x4')]=_0x5664e8;this[_0x195d('0x5')]=_0x58bcc9;this[_0x195d('0x6')]=_0x2aca65;this[_0x195d('0x7')]=_0x4b08d9;this['squeue'][_0x195d('0x8')](this[_0x195d('0x9')][_0x195d('0xa')](this),this[_0x195d('0xb')][_0x195d('0xa')](this));this['squeue']['on'](_0x195d('0xc'),this[_0x195d('0xb')][_0x195d('0xa')](this));this[_0x195d('0x4')]['on'](_0x195d('0xd'),this[_0x195d('0xe')][_0x195d('0xa')](this));};Beepall[_0x195d('0xf')][_0x195d('0x8')]=function(){this['squeue'][_0x195d('0x8')](this[_0x195d('0x9')][_0x195d('0xa')](this),this[_0x195d('0xb')]['bind'](this));};Beepall[_0x195d('0xf')]['handleDrained']=function(_0x104c80){this[_0x195d('0xb')](!![]);};Beepall['prototype']['handleRun']=function(_0x3861ea){var _0x5165c3=!![];if(!_[_0x195d('0x10')](this[_0x195d('0x5')])&&!_[_0x195d('0x10')](this[_0x195d('0x5')][_0x195d('0x11')])&&this[_0x195d('0x5')]['Agents'][_0x195d('0x12')]>0x0){for(var _0x32ba8b=0x0,_0x4ccf97;_0x32ba8b<this[_0x195d('0x5')]['Agents'][_0x195d('0x12')];_0x32ba8b+=0x1){_0x4ccf97=this[_0x195d('0x5')][_0x195d('0x11')][_0x32ba8b]['id'];if(_[_0x195d('0x10')](this[_0x195d('0x6')][_0x195d('0x13')][_0x4ccf97])){logger[_0x195d('0x14')](_0x195d('0x15'),this[_0x195d('0x4')]['id'],_0x4ccf97);}else{if(util[_0x195d('0x16')](this['squeue']['id'],this[_0x195d('0x6')]['agents'][_0x4ccf97],this[_0x195d('0x4')][_0x195d('0x17')],!![])){_0x5165c3=![];util[_0x195d('0x18')](this['squeue']['id'],this[_0x195d('0x6')][_0x195d('0x13')][_0x4ccf97],_0x195d('0x19'));this[_0x195d('0x6')]['agents'][_0x4ccf97]['busy']=!![];this[_0x195d('0x6')][_0x195d('0x13')][_0x4ccf97][_0x195d('0x1a')]=this[_0x195d('0x5')][_0x195d('0x1b')];util[_0x195d('0x1c')](this[_0x195d('0x3')],this[_0x195d('0x4')]['id'],this[_0x195d('0x6')][_0x195d('0x13')][_0x4ccf97],this[_0x195d('0x5')],this[_0x195d('0x7')]);}}}if(_0x5165c3){logger[_0x195d('0x14')](_0x195d('0x1d'),this[_0x195d('0x4')]['id']);setTimeout(this[_0x195d('0x8')][_0x195d('0xa')](this),0x3e8);}}else{logger['info'](_0x195d('0x1e'),this[_0x195d('0x4')]['id']);setTimeout(this[_0x195d('0x8')][_0x195d('0xa')](this),0x3e8);}};Beepall['prototype'][_0x195d('0xb')]=function(_0x585292){if(!_[_0x195d('0x10')](this['queue'])&&!_[_0x195d('0x10')](this[_0x195d('0x5')]['Agents'])){for(var _0x444741=0x0,_0x3cf6d7;_0x444741<this[_0x195d('0x5')][_0x195d('0x11')][_0x195d('0x12')];_0x444741+=0x1){_0x3cf6d7=this['queue'][_0x195d('0x11')][_0x444741]['id'];if(_[_0x195d('0x10')](this['realtime'][_0x195d('0x13')][_0x3cf6d7])){logger[_0x195d('0x14')]('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x195d('0x4')]['id'],_0x3cf6d7);}else{util[_0x195d('0x1f')](this['notificationId'],this['squeue']['id'],this[_0x195d('0x6')][_0x195d('0x13')][_0x3cf6d7],this['queue'],this[_0x195d('0x7')]);util[_0x195d('0x18')](this[_0x195d('0x4')]['id'],this['realtime'][_0x195d('0x13')][_0x3cf6d7],_0x585292?_0x195d('0x20'):_0x195d('0x21'));this[_0x195d('0x6')][_0x195d('0x13')][_0x3cf6d7]['busy']=![];this[_0x195d('0x6')][_0x195d('0x13')][_0x3cf6d7][_0x195d('0x1a')]=undefined;}}}if(!_0x585292){setTimeout(this['push'][_0x195d('0xa')](this),0x3e8);}};function beepall(_0xc81ca4,_0x57803d,_0xb4ae7f,_0x42a413){return new Beepall(_0xc81ca4,_0x57803d,_0xb4ae7f,_0x42a413);}module[_0x195d('0x22')]=beepall;
\ No newline at end of file
index ebfec12..fa691ad 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x187d=['exports','./beepall','./agent'];(function(_0xb86dcd,_0x35a99e){var _0xe8968c=function(_0x8503d0){while(--_0x8503d0){_0xb86dcd['push'](_0xb86dcd['shift']());}};_0xe8968c(++_0x35a99e);}(_0x187d,0x93));var _0xd187=function(_0x6131cd,_0x4c26a1){_0x6131cd=_0x6131cd-0x0;var _0x47e916=_0x187d[_0x6131cd];return _0x47e916;};'use strict';module[_0xd187('0x0')]={'rrmemory':require('./rrmemory'),'beepall':require(_0xd187('0x1')),'agent':require(_0xd187('0x2'))};
\ No newline at end of file
+var _0x00b3=['./agent','exports'];(function(_0x2f4603,_0x18be8f){var _0x498c9a=function(_0x5c226c){while(--_0x5c226c){_0x2f4603['push'](_0x2f4603['shift']());}};_0x498c9a(++_0x18be8f);}(_0x00b3,0x97));var _0x300b=function(_0x450a43,_0x320945){_0x450a43=_0x450a43-0x0;var _0x1d4060=_0x00b3[_0x450a43];return _0x1d4060;};'use strict';module[_0x300b('0x0')]={'rrmemory':require('./rrmemory'),'beepall':require('./beepall'),'agent':require(_0x300b('0x1'))};
\ No newline at end of file
index f5ba301..a8fc23b 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaaa0=['handleRun','bind','handleTimeout','module','drained','handleDrained','prototype','agentId','info','[%s][QUEUE]\x20available\x20again\x20%s','intervals','queue','mapAgentsId','[%s][QUEUE]\x20try\x20with\x20%s','isNil','isAgentAvailable','agents','channel','busy','name','showNotification','RINGING','handleCheckReject','[%s][QUEUE]\x20agent\x20skipped,\x20not\x20available\x20id\x20%s','done','[%s][QUEUE]\x20timeout\x20with\x20%s','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','TIMEOUT','busyQueue','uuid','notificationId','squeue','realtime','routing','push'];(function(_0x385c76,_0xb97335){var _0x5c8367=function(_0xdfcd3){while(--_0xdfcd3){_0x385c76['push'](_0x385c76['shift']());}};_0x5c8367(++_0xb97335);}(_0xaaa0,0x1c1));var _0x0aaa=function(_0x251b80,_0x489f84){_0x251b80=_0x251b80-0x0;var _0x1eea35=_0xaaa0[_0x251b80];return _0x1eea35;};'use strict';var rr=require('rr');var _=require('lodash');var uuid=require(_0x0aaa('0x0'));var util=require('./util');var logger=require('../../../../../config/logger')('routing');var RRMemory=function(_0x16c3ed,_0x436ac5,_0x1468a3,_0x1ba0ec){this[_0x0aaa('0x1')]=uuid['v4']();this[_0x0aaa('0x2')]=_0x16c3ed;this['queue']=_0x436ac5;this[_0x0aaa('0x3')]=_0x1468a3;this[_0x0aaa('0x4')]=_0x1ba0ec;this['intervals']={};this[_0x0aaa('0x2')][_0x0aaa('0x5')](this[_0x0aaa('0x6')][_0x0aaa('0x7')](this),this[_0x0aaa('0x8')]['bind'](this),this[_0x0aaa('0x9')]);this[_0x0aaa('0x2')]['on']('timeout',this[_0x0aaa('0x8')]['bind'](this));this['squeue']['on'](_0x0aaa('0xa'),this[_0x0aaa('0xb')][_0x0aaa('0x7')](this));};RRMemory[_0x0aaa('0xc')]['push']=function(){this[_0x0aaa('0x2')][_0x0aaa('0x5')](this[_0x0aaa('0x6')][_0x0aaa('0x7')](this),this['handleTimeout']['bind'](this));};RRMemory[_0x0aaa('0xc')]['handleDrained']=function(_0x180857){this[_0x0aaa('0x8')](!![]);};RRMemory[_0x0aaa('0xc')]['handleCheckReject']=function(_0x3a2b9a){if(util['isAgentAvailable'](this[_0x0aaa('0x2')]['id'],this[_0x0aaa('0x3')]['agents'][this[_0x0aaa('0xd')]],this['squeue']['channel'],!![])){logger[_0x0aaa('0xe')](_0x0aaa('0xf'),this[_0x0aaa('0x2')]['id'],this[_0x0aaa('0xd')]);clearInterval(this[_0x0aaa('0x10')][this[_0x0aaa('0xd')]]);_0x3a2b9a['done']();setTimeout(this[_0x0aaa('0x5')][_0x0aaa('0x7')](this),0x3e8);}};RRMemory[_0x0aaa('0xc')][_0x0aaa('0x6')]=function(_0x2cd62c){this[_0x0aaa('0xd')]=rr(this[_0x0aaa('0x11')][_0x0aaa('0x12')]);logger['info'](_0x0aaa('0x13'),this[_0x0aaa('0x2')]['id'],this[_0x0aaa('0xd')]);if(_[_0x0aaa('0x14')](this['realtime']['agents'][this[_0x0aaa('0xd')]])){logger[_0x0aaa('0xe')]('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this[_0x0aaa('0x2')]['id'],this[_0x0aaa('0xd')]);_0x2cd62c['done']();setTimeout(this['push'][_0x0aaa('0x7')](this),0x3e8);}else{if(util[_0x0aaa('0x15')](this[_0x0aaa('0x2')]['id'],this[_0x0aaa('0x3')][_0x0aaa('0x16')][this[_0x0aaa('0xd')]],this[_0x0aaa('0x2')][_0x0aaa('0x17')],!![])){this[_0x0aaa('0x3')][_0x0aaa('0x16')][this[_0x0aaa('0xd')]][_0x0aaa('0x18')]=!![];this[_0x0aaa('0x3')][_0x0aaa('0x16')][this['agentId']]['busyQueue']=this[_0x0aaa('0x11')][_0x0aaa('0x19')];util[_0x0aaa('0x1a')](this[_0x0aaa('0x1')],this[_0x0aaa('0x2')]['id'],this['realtime']['agents'][this['agentId']],this[_0x0aaa('0x11')],this[_0x0aaa('0x4')]);util['writeLog'](this[_0x0aaa('0x2')]['id'],this['realtime'][_0x0aaa('0x16')][this[_0x0aaa('0xd')]],_0x0aaa('0x1b'));this[_0x0aaa('0x10')][this[_0x0aaa('0xd')]]=setInterval(this[_0x0aaa('0x1c')][_0x0aaa('0x7')](this,_0x2cd62c),0x3e8);}else{logger[_0x0aaa('0xe')](_0x0aaa('0x1d'),this['squeue']['id'],this[_0x0aaa('0xd')]);_0x2cd62c[_0x0aaa('0x1e')]();setTimeout(this[_0x0aaa('0x5')][_0x0aaa('0x7')](this),0x3e8);}}};RRMemory['prototype']['handleTimeout']=function(_0x3856e9){logger[_0x0aaa('0xe')](_0x0aaa('0x1f'),this[_0x0aaa('0x2')]['id'],this['agentId']);if(_['isNil'](this[_0x0aaa('0x3')][_0x0aaa('0x16')][this[_0x0aaa('0xd')]])){logger[_0x0aaa('0xe')](_0x0aaa('0x20'),this[_0x0aaa('0x2')]['id'],this[_0x0aaa('0xd')]);}else{clearInterval(this[_0x0aaa('0x10')][this['agentId']]);util['hideNotification'](this[_0x0aaa('0x1')],this[_0x0aaa('0x2')]['id'],this[_0x0aaa('0x3')][_0x0aaa('0x16')][this[_0x0aaa('0xd')]],this[_0x0aaa('0x11')],this[_0x0aaa('0x4')]);util['writeLog'](this[_0x0aaa('0x2')]['id'],this[_0x0aaa('0x3')][_0x0aaa('0x16')][this['agentId']],_0x0aaa('0x21'));this['realtime'][_0x0aaa('0x16')][this[_0x0aaa('0xd')]][_0x0aaa('0x18')]=![];this[_0x0aaa('0x3')]['agents'][this[_0x0aaa('0xd')]][_0x0aaa('0x22')]=undefined;}if(!_0x3856e9){setTimeout(this[_0x0aaa('0x5')][_0x0aaa('0x7')](this),0x3e8);}};function rrmemory(_0x398df2,_0x377cc5,_0x35d98a,_0x93c6f9){return new RRMemory(_0x398df2,_0x377cc5,_0x35d98a,_0x93c6f9);}module['exports']=rrmemory;
\ No newline at end of file
+var _0xaee3=['push','agents','agentId','channel','info','[%s][QUEUE]\x20available\x20again\x20%s','done','mapAgentsId','[%s][QUEUE]\x20try\x20with\x20%s','isNil','isAgentAvailable','busyQueue','name','showNotification','notificationId','writeLog','RINGING','handleCheckReject','[%s][QUEUE]\x20agent\x20skipped,\x20not\x20available\x20id\x20%s','[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s','hideNotification','TIMEOUT','exports','lodash','uuid','./util','../../../../../config/logger','routing','squeue','queue','realtime','intervals','handleRun','bind','handleTimeout','timeout','drained','handleDrained','prototype'];(function(_0x40b07f,_0x2146f2){var _0x3c8a9f=function(_0x1f3388){while(--_0x1f3388){_0x40b07f['push'](_0x40b07f['shift']());}};_0x3c8a9f(++_0x2146f2);}(_0xaee3,0x65));var _0x3aee=function(_0x1c2f29,_0x5a2668){_0x1c2f29=_0x1c2f29-0x0;var _0x258465=_0xaee3[_0x1c2f29];return _0x258465;};'use strict';var rr=require('rr');var _=require(_0x3aee('0x0'));var uuid=require(_0x3aee('0x1'));var util=require(_0x3aee('0x2'));var logger=require(_0x3aee('0x3'))(_0x3aee('0x4'));var RRMemory=function(_0x5df6fc,_0x5da7d6,_0x403ddc,_0x35f612){this['notificationId']=uuid['v4']();this[_0x3aee('0x5')]=_0x5df6fc;this[_0x3aee('0x6')]=_0x5da7d6;this[_0x3aee('0x7')]=_0x403ddc;this[_0x3aee('0x4')]=_0x35f612;this[_0x3aee('0x8')]={};this[_0x3aee('0x5')]['push'](this[_0x3aee('0x9')][_0x3aee('0xa')](this),this[_0x3aee('0xb')][_0x3aee('0xa')](this),this['module']);this['squeue']['on'](_0x3aee('0xc'),this[_0x3aee('0xb')][_0x3aee('0xa')](this));this[_0x3aee('0x5')]['on'](_0x3aee('0xd'),this[_0x3aee('0xe')][_0x3aee('0xa')](this));};RRMemory[_0x3aee('0xf')][_0x3aee('0x10')]=function(){this['squeue']['push'](this[_0x3aee('0x9')]['bind'](this),this[_0x3aee('0xb')]['bind'](this));};RRMemory[_0x3aee('0xf')][_0x3aee('0xe')]=function(_0xacbe1e){this[_0x3aee('0xb')](!![]);};RRMemory['prototype']['handleCheckReject']=function(_0x15fded){if(util['isAgentAvailable'](this[_0x3aee('0x5')]['id'],this[_0x3aee('0x7')][_0x3aee('0x11')][this[_0x3aee('0x12')]],this[_0x3aee('0x5')][_0x3aee('0x13')],!![])){logger[_0x3aee('0x14')](_0x3aee('0x15'),this['squeue']['id'],this[_0x3aee('0x12')]);clearInterval(this[_0x3aee('0x8')][this[_0x3aee('0x12')]]);_0x15fded[_0x3aee('0x16')]();setTimeout(this[_0x3aee('0x10')][_0x3aee('0xa')](this),0x3e8);}};RRMemory[_0x3aee('0xf')][_0x3aee('0x9')]=function(_0x23fca8){this[_0x3aee('0x12')]=rr(this[_0x3aee('0x6')][_0x3aee('0x17')]);logger['info'](_0x3aee('0x18'),this[_0x3aee('0x5')]['id'],this[_0x3aee('0x12')]);if(_[_0x3aee('0x19')](this[_0x3aee('0x7')][_0x3aee('0x11')][this[_0x3aee('0x12')]])){logger[_0x3aee('0x14')]('[%s][QUEUE]\x20agent\x20skipped,\x20unknown\x20id\x20%s',this['squeue']['id'],this[_0x3aee('0x12')]);_0x23fca8[_0x3aee('0x16')]();setTimeout(this['push']['bind'](this),0x3e8);}else{if(util[_0x3aee('0x1a')](this[_0x3aee('0x5')]['id'],this[_0x3aee('0x7')][_0x3aee('0x11')][this[_0x3aee('0x12')]],this[_0x3aee('0x5')][_0x3aee('0x13')],!![])){this[_0x3aee('0x7')][_0x3aee('0x11')][this['agentId']]['busy']=!![];this[_0x3aee('0x7')][_0x3aee('0x11')][this[_0x3aee('0x12')]][_0x3aee('0x1b')]=this[_0x3aee('0x6')][_0x3aee('0x1c')];util[_0x3aee('0x1d')](this[_0x3aee('0x1e')],this['squeue']['id'],this[_0x3aee('0x7')][_0x3aee('0x11')][this['agentId']],this[_0x3aee('0x6')],this['routing']);util[_0x3aee('0x1f')](this[_0x3aee('0x5')]['id'],this[_0x3aee('0x7')][_0x3aee('0x11')][this[_0x3aee('0x12')]],_0x3aee('0x20'));this[_0x3aee('0x8')][this[_0x3aee('0x12')]]=setInterval(this[_0x3aee('0x21')][_0x3aee('0xa')](this,_0x23fca8),0x3e8);}else{logger[_0x3aee('0x14')](_0x3aee('0x22'),this['squeue']['id'],this[_0x3aee('0x12')]);_0x23fca8['done']();setTimeout(this[_0x3aee('0x10')][_0x3aee('0xa')](this),0x3e8);}}};RRMemory[_0x3aee('0xf')][_0x3aee('0xb')]=function(_0x5132a3){logger[_0x3aee('0x14')]('[%s][QUEUE]\x20timeout\x20with\x20%s',this['squeue']['id'],this[_0x3aee('0x12')]);if(_[_0x3aee('0x19')](this[_0x3aee('0x7')][_0x3aee('0x11')][this['agentId']])){logger[_0x3aee('0x14')](_0x3aee('0x23'),this[_0x3aee('0x5')]['id'],this[_0x3aee('0x12')]);}else{clearInterval(this[_0x3aee('0x8')][this[_0x3aee('0x12')]]);util[_0x3aee('0x24')](this[_0x3aee('0x1e')],this['squeue']['id'],this['realtime'][_0x3aee('0x11')][this[_0x3aee('0x12')]],this[_0x3aee('0x6')],this[_0x3aee('0x4')]);util[_0x3aee('0x1f')](this[_0x3aee('0x5')]['id'],this[_0x3aee('0x7')][_0x3aee('0x11')][this[_0x3aee('0x12')]],_0x3aee('0x25'));this[_0x3aee('0x7')][_0x3aee('0x11')][this[_0x3aee('0x12')]]['busy']=![];this[_0x3aee('0x7')]['agents'][this[_0x3aee('0x12')]]['busyQueue']=undefined;}if(!_0x5132a3){setTimeout(this['push']['bind'](this),0x3e8);}};function rrmemory(_0x2ca226,_0x1d0deb,_0x2c8303,_0x264f53){return new RRMemory(_0x2ca226,_0x1d0deb,_0x2c8303,_0x264f53);}module[_0x3aee('0x26')]=rrmemory;
\ No newline at end of file
index df82a98..f6b9cb9 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x47e6=['account','notificationShake','body','queue','getMustacheRender','notificationTemplate','msg','I\x20can\x27t\x20render\x20your\x20template','error','[%s][QUEUE]\x20%s','message','notification:%s','save','info','[%s][QUEUE][AGENT:%s][STATUS:%s]','isAgentAvailable','online','OFFLINE','Pause','PAUSE','hasOwnProperty','Capacity','CurrentCapacity','toUpperCase','\x20MAXCAPACITY','hideNotification','writeLog','lodash','util','../utils','mustache','../../../../../config/environment','../../../../../config/logger','routing','redis','defaults','localhost','socket.io-emitter','emit','format','user:%s','user:save','split','\x20interaction','name'];(function(_0x220eb7,_0xb6a46d){var _0x72999a=function(_0x8c3b5b){while(--_0x8c3b5b){_0x220eb7['push'](_0x220eb7['shift']());}};_0x72999a(++_0xb6a46d);}(_0x47e6,0x156));var _0x647e=function(_0x3a3933,_0x3ed7c1){_0x3a3933=_0x3a3933-0x0;var _0x251a56=_0x47e6[_0x3a3933];return _0x251a56;};'use strict';var _=require(_0x647e('0x0'));var util=require(_0x647e('0x1'));var utils=require(_0x647e('0x2'));var Mustache=require(_0x647e('0x3'));var Redis=require('ioredis');var config=require(_0x647e('0x4'));var logger=require(_0x647e('0x5'))(_0x647e('0x6'));config[_0x647e('0x7')]=_[_0x647e('0x8')](config[_0x647e('0x7')],{'host':_0x647e('0x9'),'port':0x18eb});var io=require(_0x647e('0xa'))(new Redis(config[_0x647e('0x7')]));function emit(_0x2e72da,_0x58fd84,_0x4476be){io['to'](_0x2e72da)[_0x647e('0xb')](_0x58fd84,_0x4476be);}function sendNotification(_0x4076dc,_0x334cdb,_0x1e17a9,_0x218a77,_0x54504b,_0x48ea56){io['to'](util[_0x647e('0xc')](_0x647e('0xd'),_0x218a77['name']))[_0x647e('0xb')](_0x647e('0xe'),_0x218a77);var _0x1f4948=_0x48ea56||{};var _0x441606=_0x1e17a9[_0x647e('0xf')]('.');var _0x20f59b={'uniqueid':_0x334cdb,'channel':_0x441606[0x0],'id':_0x441606[0x1],'title':_0x441606[0x0]+_0x647e('0x10'),'interactionId':_0x441606[0x2],'queue':_0x54504b?_0x54504b[_0x647e('0x11')]:null,'sound':_0x1f4948[_0x647e('0x12')]['notificationSound'],'shake':_0x1f4948[_0x647e('0x12')][_0x647e('0x13')]};try{if(!_0x1f4948[_0x647e('0x14')]){_0x1f4948[_0x647e('0x14')]={};}if(_0x54504b){_0x1f4948['body'][_0x647e('0x15')]=_0x54504b;}else if(_0x1f4948[_0x647e('0x14')][_0x647e('0x15')]){delete _0x1f4948[_0x647e('0x14')][_0x647e('0x15')];}_0x20f59b['msg']=utils[_0x647e('0x16')](_0x1f4948[_0x647e('0x12')][_0x647e('0x17')],_0x1f4948);}catch(_0x4e1d87){_0x20f59b[_0x647e('0x18')]=_0x647e('0x19');logger[_0x647e('0x1a')](util[_0x647e('0xc')](_0x647e('0x1b'),_0x334cdb,_0x4e1d87[_0x647e('0x1c')]));}io['to'](util['format'](_0x647e('0xd'),_0x218a77['name']))[_0x647e('0xb')](util[_0x647e('0xc')](_0x647e('0x1d'),_0x4076dc?_0x647e('0x1e'):'remove'),_0x20f59b);}function writeLog(_0x30d5f3,_0x3d0b69,_0x28c34f){return logger[_0x647e('0x1f')](util[_0x647e('0xc')](_0x647e('0x20'),_0x30d5f3,_0x3d0b69[_0x647e('0x11')],_0x28c34f));}exports[_0x647e('0x21')]=function(_0x5aa526,_0x5b394b,_0x4a6a50,_0x47270a){if(_0x5b394b['busy']){writeLog(_0x5aa526,_0x5b394b,'BUSY');return![];}if(!_0x5b394b[_0x647e('0x22')]){writeLog(_0x5aa526,_0x5b394b,_0x647e('0x23'));return![];}if(_0x5b394b[_0x4a6a50+_0x647e('0x24')]){writeLog(_0x5aa526,_0x5b394b,_0x647e('0x25'));return![];}if(_0x47270a&&_0x5b394b[_0x647e('0x26')](_0x4a6a50+_0x647e('0x27'))&&_0x5b394b[_0x647e('0x26')](_0x4a6a50+_0x647e('0x28'))){if(_0x5b394b[_0x4a6a50+_0x647e('0x27')]>0x0&&_0x5b394b[_0x4a6a50+_0x647e('0x28')]>=_0x5b394b[_0x4a6a50+_0x647e('0x27')]){writeLog(_0x5aa526,_0x5b394b,_0x4a6a50[_0x647e('0x29')]()+_0x647e('0x2a'));return![];}}return!![];};exports['showNotification']=function(_0x24d07d,_0x3c0d87,_0x2037a6,_0x587c7d,_0x4e74a3){return sendNotification(!![],_0x24d07d,_0x3c0d87,_0x2037a6,_0x587c7d,_0x4e74a3);};exports[_0x647e('0x2b')]=function(_0x3a5e80,_0x2687c5,_0x11094e,_0x51855d,_0x4e397c){return sendNotification(![],_0x3a5e80,_0x2687c5,_0x11094e,_0x51855d,_0x4e397c);};exports[_0x647e('0x2c')]=writeLog;
\ No newline at end of file
+var _0x0773=['CurrentCapacity','\x20MAXCAPACITY','writeLog','../utils','mustache','../../../../../config/environment','../../../../../config/logger','routing','redis','defaults','localhost','socket.io-emitter','emit','name','user:save','\x20interaction','account','notificationSound','notificationShake','body','queue','msg','error','format','message','save','info','[%s][QUEUE][AGENT:%s][STATUS:%s]','isAgentAvailable','busy','BUSY','online','OFFLINE','Pause','PAUSE','hasOwnProperty','Capacity'];(function(_0x4a043e,_0x5eae7a){var _0x152f7c=function(_0x2b3ef4){while(--_0x2b3ef4){_0x4a043e['push'](_0x4a043e['shift']());}};_0x152f7c(++_0x5eae7a);}(_0x0773,0x150));var _0x3077=function(_0x32166a,_0x533cd8){_0x32166a=_0x32166a-0x0;var _0x1cd733=_0x0773[_0x32166a];return _0x1cd733;};'use strict';var _=require('lodash');var util=require('util');var utils=require(_0x3077('0x0'));var Mustache=require(_0x3077('0x1'));var Redis=require('ioredis');var config=require(_0x3077('0x2'));var logger=require(_0x3077('0x3'))(_0x3077('0x4'));config[_0x3077('0x5')]=_[_0x3077('0x6')](config['redis'],{'host':_0x3077('0x7'),'port':0x18eb});var io=require(_0x3077('0x8'))(new Redis(config[_0x3077('0x5')]));function emit(_0x1ec3b2,_0x350f47,_0x335fef){io['to'](_0x1ec3b2)[_0x3077('0x9')](_0x350f47,_0x335fef);}function sendNotification(_0x2efeac,_0x5a56d7,_0x20ffed,_0x21d724,_0x1572f5,_0x2e9a62){io['to'](util['format']('user:%s',_0x21d724[_0x3077('0xa')]))[_0x3077('0x9')](_0x3077('0xb'),_0x21d724);var _0x41a543=_0x2e9a62||{};var _0x38213f=_0x20ffed['split']('.');var _0x5d5e8c={'uniqueid':_0x5a56d7,'channel':_0x38213f[0x0],'id':_0x38213f[0x1],'title':_0x38213f[0x0]+_0x3077('0xc'),'interactionId':_0x38213f[0x2],'queue':_0x1572f5?_0x1572f5['name']:null,'sound':_0x41a543[_0x3077('0xd')][_0x3077('0xe')],'shake':_0x41a543[_0x3077('0xd')][_0x3077('0xf')]};try{if(!_0x41a543['body']){_0x41a543[_0x3077('0x10')]={};}if(_0x1572f5){_0x41a543[_0x3077('0x10')]['queue']=_0x1572f5;}else if(_0x41a543[_0x3077('0x10')][_0x3077('0x11')]){delete _0x41a543[_0x3077('0x10')]['queue'];}_0x5d5e8c[_0x3077('0x12')]=utils['getMustacheRender'](_0x41a543[_0x3077('0xd')]['notificationTemplate'],_0x41a543);}catch(_0x39fcc7){_0x5d5e8c[_0x3077('0x12')]='I\x20can\x27t\x20render\x20your\x20template';logger[_0x3077('0x13')](util[_0x3077('0x14')]('[%s][QUEUE]\x20%s',_0x5a56d7,_0x39fcc7[_0x3077('0x15')]));}io['to'](util[_0x3077('0x14')]('user:%s',_0x21d724['name']))[_0x3077('0x9')](util[_0x3077('0x14')]('notification:%s',_0x2efeac?_0x3077('0x16'):'remove'),_0x5d5e8c);}function writeLog(_0x51e2c0,_0x428833,_0x220de8){return logger[_0x3077('0x17')](util['format'](_0x3077('0x18'),_0x51e2c0,_0x428833[_0x3077('0xa')],_0x220de8));}exports[_0x3077('0x19')]=function(_0x1059d8,_0x472ec1,_0x11800b,_0x588747){if(_0x472ec1[_0x3077('0x1a')]){writeLog(_0x1059d8,_0x472ec1,_0x3077('0x1b'));return![];}if(!_0x472ec1[_0x3077('0x1c')]){writeLog(_0x1059d8,_0x472ec1,_0x3077('0x1d'));return![];}if(_0x472ec1[_0x11800b+_0x3077('0x1e')]){writeLog(_0x1059d8,_0x472ec1,_0x3077('0x1f'));return![];}if(_0x588747&&_0x472ec1[_0x3077('0x20')](_0x11800b+_0x3077('0x21'))&&_0x472ec1['hasOwnProperty'](_0x11800b+_0x3077('0x22'))){if(_0x472ec1[_0x11800b+_0x3077('0x21')]>0x0&&_0x472ec1[_0x11800b+'CurrentCapacity']>=_0x472ec1[_0x11800b+_0x3077('0x21')]){writeLog(_0x1059d8,_0x472ec1,_0x11800b['toUpperCase']()+_0x3077('0x23'));return![];}}return!![];};exports['showNotification']=function(_0x720a32,_0x22622d,_0x15b532,_0x559630,_0x23144d){return sendNotification(!![],_0x720a32,_0x22622d,_0x15b532,_0x559630,_0x23144d);};exports['hideNotification']=function(_0x5ba239,_0x1c051e,_0x860b90,_0x1238a0,_0x19e7be){return sendNotification(![],_0x5ba239,_0x1c051e,_0x860b90,_0x1238a0,_0x19e7be);};exports[_0x3077('0x24')]=writeLog;
\ No newline at end of file
index 3d69e11..04ac345 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x16d3=['getMustacheRender','info','[%s][SYSTEM]\x20commnad:\x20%s','exec','trim','[%s][SYSTEM]\x20result\x20code:\x20%s','replace','isNil','isEmpty','[%s][SYSTEM]\x20no\x20variable','body','isObject','stringify','validate','shelljs','./utils','string','error','[%s][SYSTEM]\x20%s','map','message','join','[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next'];(function(_0x5a7e78,_0x400b57){var _0xa8d4a1=function(_0x486659){while(--_0x486659){_0x5a7e78['push'](_0x5a7e78['shift']());}};_0xa8d4a1(++_0x400b57);}(_0x16d3,0x1d9));var _0x316d=function(_0x5554f3,_0x490882){_0x5554f3=_0x5554f3-0x0;var _0x3c4d1a=_0x16d3[_0x5554f3];return _0x3c4d1a;};'use strict';var schema=require(_0x316d('0x0'));var sh=require(_0x316d('0x1'));var _=require('lodash');var utils=require(_0x316d('0x2'));var logger=require('../../../../config/logger')('routing');var system=schema({'command':{'type':_0x316d('0x3'),'required':!![],'message':'command\x20is\x20a\x20string\x20and\x20it\x20is\x20required'}});exports['consequence']=function(_0x59d0e5,_0xbd1eab){return function(_0x2018e1){try{var _0x20d8ad={'command':_0xbd1eab[0x0]};var _0x469abe=system[_0x316d('0x0')](_0x20d8ad,{'typecast':!![]});if(_0x469abe['length']){logger[_0x316d('0x4')](_0x316d('0x5'),_0x59d0e5,_[_0x316d('0x6')](_0x469abe,_0x316d('0x7'))[_0x316d('0x8')](',\x20'));logger['info'](_0x316d('0x9'),_0x59d0e5);_0x2018e1['next']();}else{var _0x24add9=this;var _0x205412=utils[_0x316d('0xa')](_0xbd1eab[0x0],this);logger[_0x316d('0xb')](_0x316d('0xc'),_0x59d0e5,_0x205412);sh[_0x316d('0xd')](_[_0x316d('0xe')](_0x205412),function(_0xc398a8,_0x1fdf74){logger['info'](_0x316d('0xf'),_0x59d0e5,_0xc398a8);if(_0xc398a8==0x0){var _0x1aab25=_0x1fdf74[_0x316d('0x10')](/(\r\n|\n|\r)/gm,'');if(_[_0x316d('0x11')](_0xbd1eab[0x1])||_[_0x316d('0x12')](_0xbd1eab[0x1])){logger[_0x316d('0xb')](_0x316d('0x13'),_0x59d0e5);_0x24add9['body'][_0xbd1eab[0x1]]=_0x1aab25;}else{logger[_0x316d('0xb')]('[%s][SYSTEM]\x20set\x20variable\x20%s:\x20%s',_0x59d0e5,_0xbd1eab[0x1],_0x1aab25);_0x24add9[_0x316d('0x14')][_0xbd1eab[0x1]]=_0x1aab25;}}_0x2018e1['next']();});}}catch(_0x4f8f21){logger['error'](_0x316d('0x5'),_0x59d0e5,_[_0x316d('0x15')](_0x4f8f21)?JSON[_0x316d('0x16')](_0x4f8f21):_0x4f8f21);logger[_0x316d('0xb')]('[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next',_0x59d0e5);_0x2018e1['next']();}};};
\ No newline at end of file
+var _0x3e70=['[%s][SYSTEM]\x20result\x20code:\x20%s','replace','isNil','isEmpty','[%s][SYSTEM]\x20no\x20variable','[%s][SYSTEM]\x20set\x20variable\x20%s:\x20%s','[%s][SYSTEM]\x20%s','isObject','stringify','validate','shelljs','lodash','./utils','../../../../config/logger','routing','string','command\x20is\x20a\x20string\x20and\x20it\x20is\x20required','consequence','length','error','map','join','info','[%s][SYSTEM]\x20no\x20command\x20executed,\x20force\x20next','next','getMustacheRender','exec','trim'];(function(_0x1aef65,_0x521e60){var _0x4a4594=function(_0x120020){while(--_0x120020){_0x1aef65['push'](_0x1aef65['shift']());}};_0x4a4594(++_0x521e60);}(_0x3e70,0xcd));var _0x03e7=function(_0x3ede16,_0x325684){_0x3ede16=_0x3ede16-0x0;var _0x2b1e9b=_0x3e70[_0x3ede16];return _0x2b1e9b;};'use strict';var schema=require(_0x03e7('0x0'));var sh=require(_0x03e7('0x1'));var _=require(_0x03e7('0x2'));var utils=require(_0x03e7('0x3'));var logger=require(_0x03e7('0x4'))(_0x03e7('0x5'));var system=schema({'command':{'type':_0x03e7('0x6'),'required':!![],'message':_0x03e7('0x7')}});exports[_0x03e7('0x8')]=function(_0x52d0a5,_0x322aa3){return function(_0x1f8be9){try{var _0x2ff61b={'command':_0x322aa3[0x0]};var _0x42e641=system[_0x03e7('0x0')](_0x2ff61b,{'typecast':!![]});if(_0x42e641[_0x03e7('0x9')]){logger[_0x03e7('0xa')]('[%s][SYSTEM]\x20%s',_0x52d0a5,_[_0x03e7('0xb')](_0x42e641,'message')[_0x03e7('0xc')](',\x20'));logger[_0x03e7('0xd')](_0x03e7('0xe'),_0x52d0a5);_0x1f8be9[_0x03e7('0xf')]();}else{var _0x108158=this;var _0xff3684=utils[_0x03e7('0x10')](_0x322aa3[0x0],this);logger[_0x03e7('0xd')]('[%s][SYSTEM]\x20commnad:\x20%s',_0x52d0a5,_0xff3684);sh[_0x03e7('0x11')](_[_0x03e7('0x12')](_0xff3684),function(_0x457822,_0x3c21f7){logger[_0x03e7('0xd')](_0x03e7('0x13'),_0x52d0a5,_0x457822);if(_0x457822==0x0){var _0x59920f=_0x3c21f7[_0x03e7('0x14')](/(\r\n|\n|\r)/gm,'');if(_[_0x03e7('0x15')](_0x322aa3[0x1])||_[_0x03e7('0x16')](_0x322aa3[0x1])){logger['info'](_0x03e7('0x17'),_0x52d0a5);_0x108158['body'][_0x322aa3[0x1]]=_0x59920f;}else{logger[_0x03e7('0xd')](_0x03e7('0x18'),_0x52d0a5,_0x322aa3[0x1],_0x59920f);_0x108158['body'][_0x322aa3[0x1]]=_0x59920f;}}_0x1f8be9['next']();});}}catch(_0x10457d){logger[_0x03e7('0xa')](_0x03e7('0x19'),_0x52d0a5,_[_0x03e7('0x1a')](_0x10457d)?JSON[_0x03e7('0x1b')](_0x10457d):_0x10457d);logger[_0x03e7('0xd')](_0x03e7('0xe'),_0x52d0a5);_0x1f8be9[_0x03e7('0xf')]();}};};
\ No newline at end of file
index bbe212c..5305e25 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(_0x407399,_0x28a31f){var _0x5e9ae9=function(_0x3cb0a1){while(--_0x3cb0a1){_0x407399['push'](_0x407399['shift']());}};_0x5e9ae9(++_0x28a31f);}(_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(_0x1cf9c1,_0x487f27){var _0x197626=function(_0x44c524){while(--_0x44c524){_0x1cf9c1['push'](_0x1cf9c1['shift']());}};_0x197626(++_0x487f27);}(_0x9957,0x93));var _0x7995=function(_0x5b644e,_0x2e5e07){_0x5b644e=_0x5b644e-0x0;var _0x49c6bf=_0x9957[_0x5b644e];return _0x49c6bf;};'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 c90dfcf..09bb32a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc3b0=['exports','merge','body','message','account','interaction','mustache','lodash'];(function(_0x1c0f88,_0x1a73d5){var _0x3e4d96=function(_0x130f6a){while(--_0x130f6a){_0x1c0f88['push'](_0x1c0f88['shift']());}};_0x3e4d96(++_0x1a73d5);}(_0xc3b0,0x166));var _0x0c3b=function(_0x20c604,_0xf8cb56){_0x20c604=_0x20c604-0x0;var _0x576730=_0xc3b0[_0x20c604];return _0x576730;};'use strict';var Mustache=require(_0x0c3b('0x0'));var _=require(_0x0c3b('0x1'));module[_0x0c3b('0x2')]={'getMustacheRender':function(_0x391509,_0x5348c4){return Mustache['render'](_0x391509,_[_0x0c3b('0x3')](_0x5348c4[_0x0c3b('0x4')],{'contact':_0x5348c4['contact'],'message':_0x5348c4[_0x0c3b('0x5')],'account':_0x5348c4[_0x0c3b('0x6')],'interaction':_0x5348c4[_0x0c3b('0x7')],'list':_0x5348c4['list']}))||'';}};
\ No newline at end of file
+var _0xee39=['interaction','list','mustache','lodash','exports','render','merge','body','contact','message','account'];(function(_0x5d266f,_0x49e76e){var _0x1ada0c=function(_0x4037ae){while(--_0x4037ae){_0x5d266f['push'](_0x5d266f['shift']());}};_0x1ada0c(++_0x49e76e);}(_0xee39,0x1e6));var _0x9ee3=function(_0xa5f869,_0x17770c){_0xa5f869=_0xa5f869-0x0;var _0x1ab18b=_0xee39[_0xa5f869];return _0x1ab18b;};'use strict';var Mustache=require(_0x9ee3('0x0'));var _=require(_0x9ee3('0x1'));module[_0x9ee3('0x2')]={'getMustacheRender':function(_0x58cf62,_0x39e617){return Mustache[_0x9ee3('0x3')](_0x58cf62,_[_0x9ee3('0x4')](_0x39e617[_0x9ee3('0x5')],{'contact':_0x39e617[_0x9ee3('0x6')],'message':_0x39e617[_0x9ee3('0x7')],'account':_0x39e617[_0x9ee3('0x8')],'interaction':_0x39e617[_0x9ee3('0x9')],'list':_0x39e617[_0x9ee3('0xa')]}))||'';}};
\ No newline at end of file
index 54995a1..c80bf89 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x52fb=['available','loggedIn','name','waiting','mailQueues','paused','openchannelQueues','smsQueues','faxQueues','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','openchannelQueuesWaitingInteractions','smsQueuesWaitingInteractions','faxQueuesWaitingInteractions','server','http','log','Routing\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','util','path','jayson/promise','bluebird','uuid','../../../config/environment','../../../config/logger','routing','../rpc/openchannelQueueReport','../rpc/chatQueueReport','../rpc/faxQueueReport','format','%s.%s.%s','isNil','IntervalId','Intervals','interval','listen','channel','message','applications','length','app','.js','toLowerCase','autoreply','appdata','push','dialogflow','split','join','amazonlex','slice','tag','TagId','%s:%s:%s','./interval','condition','intervals','./applications/','consequence','Push\x20new\x20rule','on\x20interval','error','Please\x20create\x20a\x20new\x20file\x20under','rules','info','Applications\x20executed','stringify','matchPath','emit','end','No\x20applications\x20to\x20execute','stack','interaction','QueueReport','update','message\x20is\x20empty','agent','agents','busyQueue','hasOwnProperty','capacity','CurrentCapacity','updateRealtime','agent\x20not\x20found','values','chatQueues'];(function(_0x33ac53,_0x2a4ab5){var _0x2811b6=function(_0x4405bc){while(--_0x4405bc){_0x33ac53['push'](_0x33ac53['shift']());}};_0x2811b6(++_0x2a4ab5);}(_0x52fb,0xc3));var _0xb52f=function(_0x3d6dfe,_0x1b2ae4){_0x3d6dfe=_0x3d6dfe-0x0;var _0x55d0e0=_0x52fb[_0x3d6dfe];return _0x55d0e0;};'use strict';var _=require(_0xb52f('0x0'));var util=require(_0xb52f('0x1'));var path=require(_0xb52f('0x2'));var fs=require('fs');var jayson=require(_0xb52f('0x3'));var BPromise=require(_0xb52f('0x4'));var uuid=require(_0xb52f('0x5'));var config=require(_0xb52f('0x6'));var logger=require(_0xb52f('0x7'))(_0xb52f('0x8'));var rpc={'openchannelQueueReport':require('../rpc/openchannelQueueReport')};var rpc={'openchannelQueueReport':require(_0xb52f('0x9')),'mailQueueReport':require('../rpc/mailQueueReport'),'chatQueueReport':require(_0xb52f('0xa')),'smsQueueReport':require('../rpc/smsQueueReport'),'faxQueueReport':require(_0xb52f('0xb'))};var RuleEngine=require('../lib/rule-engine');function getId(_0x5cbe1a,_0x5da7e5,_0x1d5d2f){return util[_0xb52f('0xc')](_0xb52f('0xd'),_0x5cbe1a,_0x5da7e5||0x0,_0x1d5d2f||0x0);}function getIntervals(_0xa92df6,_0x38f6a8){var _0x2dd6a5=[];if(!_[_0xb52f('0xe')](_0x38f6a8[_0xb52f('0xf')])&&!_[_0xb52f('0xe')](_0xa92df6[_0x38f6a8[_0xb52f('0xf')]])&&!_[_0xb52f('0xe')](_0xa92df6[_0x38f6a8[_0xb52f('0xf')]][_0xb52f('0x10')])){_0x2dd6a5=_['map'](_0xa92df6[_0x38f6a8[_0xb52f('0xf')]][_0xb52f('0x10')],_0xb52f('0x11'));}else if(!_['isNil'](_0x38f6a8['interval'])){_0x2dd6a5=[_0x38f6a8[_0xb52f('0x11')]];}return _0x2dd6a5;}exports[_0xb52f('0x12')]=function(_0x27e0ce){_0x27e0ce['rules']={};return new BPromise(function(_0x63413b,_0x100b92){var _0x2ffaa9={'Start':function(_0x4cc396){var _0x39e9f4=this;return new Promise(function(_0x1ee4d0,_0x30976e){if(_0x4cc396){try{var _0x20dd0b=[];var _0x1c2d29=getId(_0x4cc396[_0xb52f('0x13')],_0x4cc396[_0xb52f('0x14')]?_0x4cc396['message']['id']:0x0,_0x4cc396['interaction']?_0x4cc396['interaction']['id']:0x0);if(_0x4cc396['applications']&&_['isArray'](_0x4cc396[_0xb52f('0x15')])&&_0x4cc396[_0xb52f('0x15')][_0xb52f('0x16')]){for(var _0x444fb5=0x0;_0x444fb5<_0x4cc396[_0xb52f('0x15')]['length'];_0x444fb5+=0x1){var _0x2f88cc=_0x4cc396[_0xb52f('0x15')][_0x444fb5];if(fs['existsSync'](path['join'](__dirname,_0xb52f('0x15'),_0x2f88cc[_0xb52f('0x17')]+_0xb52f('0x18')))){var _0x136263=[];switch(_0x2f88cc['app'][_0xb52f('0x19')]()){case _0xb52f('0x1a'):var _0x37f69e=_0x2f88cc[_0xb52f('0x1b')]['split'](',');_0x136263[_0xb52f('0x1c')](_0x37f69e[0x0]);_0x136263[_0xb52f('0x1c')](_0x37f69e['slice'](0x1,_0x37f69e[_0xb52f('0x16')])['join'](','));break;case _0xb52f('0x1d'):var _0x37f69e=_0x2f88cc['appdata'][_0xb52f('0x1e')](',');_0x136263['push'](_0x37f69e[0x0]);_0x136263['push'](_0x37f69e[0x1]);_0x136263[_0xb52f('0x1c')](_0x37f69e['slice'](0x2,_0x37f69e[_0xb52f('0x16')])[_0xb52f('0x1f')](','));break;case _0xb52f('0x20'):var _0x37f69e=_0x2f88cc[_0xb52f('0x1b')]['split'](',');_0x136263[_0xb52f('0x1c')](_0x37f69e[0x0]);_0x136263[_0xb52f('0x1c')](_0x37f69e[0x1]);_0x136263[_0xb52f('0x1c')](_0x37f69e[0x2]);_0x136263[_0xb52f('0x1c')](_0x37f69e[0x3]);_0x136263[_0xb52f('0x1c')](_0x37f69e[_0xb52f('0x21')](0x4,_0x37f69e[_0xb52f('0x16')])[_0xb52f('0x1f')](','));break;case _0xb52f('0x14'):_0x136263[_0xb52f('0x1c')](_0x2f88cc['appdata']);break;case _0xb52f('0x22'):_0x136263['push'](_0x2f88cc[_0xb52f('0x23')]);_0x136263[_0xb52f('0x1c')](_0x2f88cc[_0xb52f('0x1b')]);break;default:_0x136263=_[_0xb52f('0xe')](_0x2f88cc['appdata'])?[]:_0x2f88cc['appdata'][_0xb52f('0x1e')](',');}var _0x9be66={'id':util[_0xb52f('0xc')](_0xb52f('0x24'),_0x1c2d29,_0x2f88cc['id'],_0x2f88cc['app']),'condition':require(_0xb52f('0x25'))[_0xb52f('0x26')](_0x1c2d29,getIntervals(_0x27e0ce[_0xb52f('0x27')],_0x2f88cc),_0x27e0ce),'consequence':require(_0xb52f('0x28')+_0x2f88cc['app'])[_0xb52f('0x29')](_0x1c2d29,_0x136263,_0x27e0ce,_0x4cc396),'p':_0x2f88cc['priority']||0x0};logger['info'](_0xb52f('0x2a'),_0x9be66['id'],_0xb52f('0x2b'),getIntervals(_0x27e0ce['intervals'],_0x2f88cc)['join']('\x20|\x20'));_0x20dd0b['push'](_0x9be66);}else{logger[_0xb52f('0x2c')](_0xb52f('0x2d'),path[_0xb52f('0x1f')](__dirname,_0xb52f('0x15'),_0x2f88cc[_0xb52f('0x17')]+_0xb52f('0x18')));}}_0x27e0ce['rules'][_0x1c2d29]=new RuleEngine(_0x20dd0b);_0x27e0ce[_0xb52f('0x2e')][_0x1c2d29]['execute'](_0x4cc396,function(_0x5c95ce){logger[_0xb52f('0x2f')](_0xb52f('0x30'),JSON[_0xb52f('0x31')](_0x5c95ce[_0xb52f('0x32')]));if(_0x27e0ce[_0xb52f('0x2e')][_0x1c2d29]){_0x27e0ce[_0xb52f('0x2e')][_0x1c2d29][_0xb52f('0x33')](_0xb52f('0x34'));}});return _0x1ee4d0({'code':0xc8,'message':_0x4cc396});}else{logger['info'](_0xb52f('0x35'));return _0x1ee4d0({'code':0xc8,'message':_0x4cc396});}}catch(_0x4d68a9){logger[_0xb52f('0x2c')](_0x4d68a9[_0xb52f('0x36')]);return _0x30976e(_0x39e9f4['error'](0x1f4,_0x4d68a9));}}return _0x30976e('routing\x20is\x20empty');});},'AcceptMessage':function(_0x2a9454){var _0x48b0be=this;return new Promise(function(_0x3122de,_0x1616b9){if(_0x2a9454[_0xb52f('0x14')]&&_0x2a9454[_0xb52f('0x14')]['id']){try{var _0x1803f7=getId(_0x2a9454[_0xb52f('0x13')],_0x2a9454['message']?_0x2a9454['message']['id']:0x0,_0x2a9454[_0xb52f('0x37')]?_0x2a9454['interaction']['id']:0x0);if(_0x27e0ce[_0xb52f('0x2e')][_0x1803f7]){_0x27e0ce[_0xb52f('0x2e')][_0x1803f7][_0xb52f('0x33')]('end');if(rpc[_0x2a9454[_0xb52f('0x13')]+_0xb52f('0x38')]){rpc[_0x2a9454[_0xb52f('0x13')]+_0xb52f('0x38')][_0xb52f('0x39')](_0x1803f7,{'UserId':_0x2a9454[_0xb52f('0x14')]['UserId']})['catch'](function(_0x48e714){logger[_0xb52f('0x2c')]('error\x20update\x20queue\x20report');});}}return _0x3122de({'code':0xc8,'message':_0x2a9454});}catch(_0x87402c){logger['error'](_0x87402c['stack']);return _0x1616b9(_0x48b0be[_0xb52f('0x2c')](0x1f4,_0x87402c));}}logger['error'](_0xb52f('0x3a'));return _0x1616b9(_0x48b0be[_0xb52f('0x2c')](0x1f4,'message\x20is\x20empty'));});},'RejectMessage':function(_0x27661a){var _0x355891=this;return new Promise(function(_0xd5976b,_0x4c303e){if(_0x27661a['agent']&&_0x27661a[_0xb52f('0x3b')]['id']){try{if(_0x27e0ce['agents'][_0x27661a[_0xb52f('0x3b')]['id']]){_0x27e0ce[_0xb52f('0x3c')][_0x27661a[_0xb52f('0x3b')]['id']]['busy']=![];_0x27e0ce[_0xb52f('0x3c')][_0x27661a[_0xb52f('0x3b')]['id']][_0xb52f('0x3d')]=undefined;}return _0xd5976b({'code':0xc8,'message':_0x27661a});}catch(_0x56d65d){logger['error'](_0x56d65d[_0xb52f('0x36')]);return _0x4c303e(_0x355891[_0xb52f('0x2c')](0x1f4,_0x56d65d));}}logger[_0xb52f('0x2c')](_0xb52f('0x3a'));return _0x4c303e(_0x355891[_0xb52f('0x2c')](0x1f4,'message\x20is\x20empty'));});},'AbandonInteraction':function(_0x5c3fac){var _0x154962=this;return new Promise(function(_0x4b92da,_0x12c99f){if(_0x5c3fac[_0xb52f('0x13')]&&_0x5c3fac[_0xb52f('0x37')]&&_0x5c3fac[_0xb52f('0x37')]['id']){try{var _0x91fdb2=getId(_0x5c3fac[_0xb52f('0x13')],_0x5c3fac[_0xb52f('0x14')]?_0x5c3fac[_0xb52f('0x14')]['id']:0x0,_0x5c3fac[_0xb52f('0x37')]?_0x5c3fac[_0xb52f('0x37')]['id']:0x0);if(_0x27e0ce[_0xb52f('0x2e')][_0x91fdb2]){_0x27e0ce[_0xb52f('0x2e')][_0x91fdb2][_0xb52f('0x33')](_0xb52f('0x34'));}return _0x4b92da({'code':0xc8,'message':_0x5c3fac});}catch(_0x5a9bc0){logger['error'](_0x5a9bc0[_0xb52f('0x36')]);return _0x12c99f(_0x154962[_0xb52f('0x2c')](0x1f4,_0x5a9bc0));}}logger[_0xb52f('0x2c')]('message\x20is\x20empty');return _0x12c99f(_0x154962[_0xb52f('0x2c')](0x1f4,_0xb52f('0x3a')));});},'AgentCapacity':function(_0x5dec5b){var _0x5d0486=this;return new Promise(function(_0x36b8bf,_0x48c589){if(_0x27e0ce[_0xb52f('0x3c')][_0xb52f('0x3e')](_0x5dec5b['id'])){for(var _0x452598 in _0x5dec5b[_0xb52f('0x3f')]){if(_0x5dec5b[_0xb52f('0x3f')][_0xb52f('0x3e')](_0x452598)){if(_0x27e0ce['agents'][_0x5dec5b['id']][_0xb52f('0x3e')](_0x452598+_0xb52f('0x40'))){_0x27e0ce[_0xb52f('0x3c')][_0x5dec5b['id']][_0x452598+_0xb52f('0x40')]=parseInt(_0x5dec5b[_0xb52f('0x3f')][_0x452598],0xa);}}}_0x27e0ce[_0xb52f('0x3c')][_0x5dec5b['id']][_0xb52f('0x41')]();return _0x36b8bf({'code':0xc8,'message':_0x27e0ce[_0xb52f('0x3c')][_0x5dec5b['id']]});}else{return _0x48c589(_0x5d0486['error'](0x1f4,_0xb52f('0x42')));}});},'Agents':function(_0xe723ee){return new Promise(function(_0x3fee4e,_0x12d02f){var _0x1d1cd1=_[_0xb52f('0x43')](_0x27e0ce['agents']);_0x3fee4e({'count':_0x1d1cd1[_0xb52f('0x16')],'rows':_0x1d1cd1});});},'ChatQueues':function(_0x23de26){return new Promise(function(_0x5e04d5,_0x4b1810){var _0x55f1c8=[];for(var _0x300244 in _0x27e0ce[_0xb52f('0x44')]){if(_0x27e0ce[_0xb52f('0x44')]['hasOwnProperty'](_0x300244)){var _0x318516=_0x27e0ce['chatQueues'][_0x300244];var _0x5e1fe5={'id':_0x318516['id'],'available':_0x318516[_0xb52f('0x45')],'loggedIn':_0x318516[_0xb52f('0x46')],'name':_0x318516[_0xb52f('0x47')],'paused':_0x318516['paused'],'waiting':_0x318516[_0xb52f('0x48')]};_0x55f1c8[_0xb52f('0x1c')](_0x5e1fe5);}}_0x5e04d5({'count':_0x55f1c8['length'],'rows':_0x55f1c8});});},'MailQueues':function(_0x39411c){return new Promise(function(_0x48d7f6,_0x219178){var _0x1f321e=[];for(var _0x2af89e in _0x27e0ce[_0xb52f('0x49')]){if(_0x27e0ce['mailQueues']['hasOwnProperty'](_0x2af89e)){var _0x38d968=_0x27e0ce[_0xb52f('0x49')][_0x2af89e];var _0x301d7b={'id':_0x38d968['id'],'available':_0x38d968[_0xb52f('0x45')],'loggedIn':_0x38d968[_0xb52f('0x46')],'name':_0x38d968[_0xb52f('0x47')],'paused':_0x38d968[_0xb52f('0x4a')],'waiting':_0x38d968[_0xb52f('0x48')]};_0x1f321e[_0xb52f('0x1c')](_0x301d7b);}}_0x48d7f6({'count':_0x1f321e[_0xb52f('0x16')],'rows':_0x1f321e});});},'OpenchannelQueues':function(_0x5f2e02){return new Promise(function(_0x1ff963,_0xd62114){var _0x5e5604=[];for(var _0x15667c in _0x27e0ce[_0xb52f('0x4b')]){if(_0x27e0ce['openchannelQueues'][_0xb52f('0x3e')](_0x15667c)){var _0xba56fe=_0x27e0ce[_0xb52f('0x4b')][_0x15667c];var _0x938778={'id':_0xba56fe['id'],'available':_0xba56fe[_0xb52f('0x45')],'loggedIn':_0xba56fe['loggedIn'],'name':_0xba56fe['name'],'paused':_0xba56fe[_0xb52f('0x4a')],'waiting':_0xba56fe[_0xb52f('0x48')]};_0x5e5604[_0xb52f('0x1c')](_0x938778);}}_0x1ff963({'count':_0x5e5604[_0xb52f('0x16')],'rows':_0x5e5604});});},'SmsQueues':function(_0x151945){return new Promise(function(_0x5c520c,_0x7a4918){var _0x20d133=[];for(var _0x3e412f in _0x27e0ce['smsQueues']){if(_0x27e0ce[_0xb52f('0x4c')][_0xb52f('0x3e')](_0x3e412f)){var _0x4a813d=_0x27e0ce[_0xb52f('0x4c')][_0x3e412f];var _0x366380={'id':_0x4a813d['id'],'available':_0x4a813d[_0xb52f('0x45')],'loggedIn':_0x4a813d[_0xb52f('0x46')],'name':_0x4a813d[_0xb52f('0x47')],'paused':_0x4a813d['paused'],'waiting':_0x4a813d['waiting']};_0x20d133[_0xb52f('0x1c')](_0x366380);}}_0x5c520c({'count':_0x20d133[_0xb52f('0x16')],'rows':_0x20d133});});},'FaxQueues':function(_0x49c057){return new Promise(function(_0x597b55,_0x527816){var _0x418726=[];for(var _0x493acb in _0x27e0ce[_0xb52f('0x4d')]){if(_0x27e0ce[_0xb52f('0x4d')][_0xb52f('0x3e')](_0x493acb)){var _0xefb9e5=_0x27e0ce[_0xb52f('0x4d')][_0x493acb];var _0x1c9913={'id':_0xefb9e5['id'],'available':_0xefb9e5['available'],'loggedIn':_0xefb9e5[_0xb52f('0x46')],'name':_0xefb9e5[_0xb52f('0x47')],'paused':_0xefb9e5[_0xb52f('0x4a')],'waiting':_0xefb9e5[_0xb52f('0x48')]};_0x418726[_0xb52f('0x1c')](_0x1c9913);}}_0x597b55({'count':_0x418726[_0xb52f('0x16')],'rows':_0x418726});});},'ChatQueuesWaitingInteractions':function(_0x2ca969){return new Promise(function(_0x10ab7c,_0x2faba2){var _0x59558d=_[_0xb52f('0x43')](_0x27e0ce[_0xb52f('0x4e')]);_0x10ab7c({'count':_0x59558d[_0xb52f('0x16')],'rows':_0x59558d});});},'MailQueuesWaitingInteractions':function(_0x26bf7a){return new Promise(function(_0xd482d2,_0x31e19e){var _0x277482=_[_0xb52f('0x43')](_0x27e0ce[_0xb52f('0x4f')]);_0xd482d2({'count':_0x277482[_0xb52f('0x16')],'rows':_0x277482});});},'OpenchannelQueuesWaitingInteractions':function(_0x41c3d4){return new Promise(function(_0x38b979,_0x34e455){var _0x2e0512=_[_0xb52f('0x43')](_0x27e0ce[_0xb52f('0x50')]);_0x38b979({'count':_0x2e0512[_0xb52f('0x16')],'rows':_0x2e0512});});},'SmsQueuesWaitingInteractions':function(_0x1c9bc7){return new Promise(function(_0x1e2f51,_0x2a29aa){var _0x1dc09c=_[_0xb52f('0x43')](_0x27e0ce[_0xb52f('0x51')]);_0x1e2f51({'count':_0x1dc09c[_0xb52f('0x16')],'rows':_0x1dc09c});});},'FaxQueuesWaitingInteractions':function(_0x118e35){return new Promise(function(_0x32070a,_0x2d2bfe){var _0x5eda13=_['values'](_0x27e0ce[_0xb52f('0x52')]);_0x32070a({'count':_0x5eda13['length'],'rows':_0x5eda13});});}};var _0x27c5dc=jayson[_0xb52f('0x53')](_0x2ffaa9)[_0xb52f('0x54')]();_0x27c5dc['on']('error',function(_0x43c501){logger[_0xb52f('0x2c')](JSON[_0xb52f('0x31')](_0x43c501));return _0x100b92(_0x43c501);});_0x27c5dc[_0xb52f('0x12')](0x232c,'127.0.0.1',function(){console[_0xb52f('0x55')](_0xb52f('0x56'),0x232c);return _0x63413b(_0xb52f('0x57')+0x232c);});});};
\ No newline at end of file
+var _0x4b26=['name','openchannelQueues','smsQueues','faxQueues','values','chatQueuesWaitingInteractions','mailQueuesWaitingInteractions','faxQueuesWaitingInteractions','server','http','127.0.0.1','log','Routing\x20RPC\x20server\x20listening\x20on\x20127.0.0.1:%d!','RPC\x20listening\x20on\x20port:','lodash','util','path','jayson/promise','bluebird','uuid','../../../config/logger','../rpc/openchannelQueueReport','../rpc/mailQueueReport','../rpc/chatQueueReport','../rpc/faxQueueReport','../lib/rule-engine','format','%s.%s.%s','isNil','IntervalId','map','interval','listen','rules','channel','message','interaction','applications','isArray','length','existsSync','join','.js','app','toLowerCase','autoreply','appdata','split','push','slice','dialogflow','amazonlex','tag','%s:%s:%s','./interval','condition','intervals','./applications/','consequence','priority','info','on\x20interval','Please\x20create\x20a\x20new\x20file\x20under','execute','Applications\x20executed','stringify','error','stack','routing\x20is\x20empty','emit','end','QueueReport','update','UserId','error\x20update\x20queue\x20report','message\x20is\x20empty','agent','agents','busy','hasOwnProperty','capacity','CurrentCapacity','updateRealtime','agent\x20not\x20found','chatQueues','available','paused','waiting','mailQueues','loggedIn'];(function(_0x550f7c,_0x505788){var _0x2534e8=function(_0xa22073){while(--_0xa22073){_0x550f7c['push'](_0x550f7c['shift']());}};_0x2534e8(++_0x505788);}(_0x4b26,0x68));var _0x64b2=function(_0x4f0ac4,_0x525606){_0x4f0ac4=_0x4f0ac4-0x0;var _0x1d7a41=_0x4b26[_0x4f0ac4];return _0x1d7a41;};'use strict';var _=require(_0x64b2('0x0'));var util=require(_0x64b2('0x1'));var path=require(_0x64b2('0x2'));var fs=require('fs');var jayson=require(_0x64b2('0x3'));var BPromise=require(_0x64b2('0x4'));var uuid=require(_0x64b2('0x5'));var config=require('../../../config/environment');var logger=require(_0x64b2('0x6'))('routing');var rpc={'openchannelQueueReport':require(_0x64b2('0x7'))};var rpc={'openchannelQueueReport':require('../rpc/openchannelQueueReport'),'mailQueueReport':require(_0x64b2('0x8')),'chatQueueReport':require(_0x64b2('0x9')),'smsQueueReport':require('../rpc/smsQueueReport'),'faxQueueReport':require(_0x64b2('0xa'))};var RuleEngine=require(_0x64b2('0xb'));function getId(_0x394c42,_0x569f66,_0x3d5d2f){return util[_0x64b2('0xc')](_0x64b2('0xd'),_0x394c42,_0x569f66||0x0,_0x3d5d2f||0x0);}function getIntervals(_0x50a8d3,_0x474c3d){var _0x52ba52=[];if(!_[_0x64b2('0xe')](_0x474c3d[_0x64b2('0xf')])&&!_['isNil'](_0x50a8d3[_0x474c3d[_0x64b2('0xf')]])&&!_[_0x64b2('0xe')](_0x50a8d3[_0x474c3d[_0x64b2('0xf')]]['Intervals'])){_0x52ba52=_[_0x64b2('0x10')](_0x50a8d3[_0x474c3d[_0x64b2('0xf')]]['Intervals'],_0x64b2('0x11'));}else if(!_['isNil'](_0x474c3d[_0x64b2('0x11')])){_0x52ba52=[_0x474c3d['interval']];}return _0x52ba52;}exports[_0x64b2('0x12')]=function(_0x52f48c){_0x52f48c[_0x64b2('0x13')]={};return new BPromise(function(_0x2b6e3f,_0x9bb108){var _0x233e63={'Start':function(_0x454b0b){var _0x38a32d=this;return new Promise(function(_0x1aea8d,_0x393343){if(_0x454b0b){try{var _0x7947b0=[];var _0x1db1ca=getId(_0x454b0b[_0x64b2('0x14')],_0x454b0b[_0x64b2('0x15')]?_0x454b0b[_0x64b2('0x15')]['id']:0x0,_0x454b0b[_0x64b2('0x16')]?_0x454b0b['interaction']['id']:0x0);if(_0x454b0b[_0x64b2('0x17')]&&_[_0x64b2('0x18')](_0x454b0b[_0x64b2('0x17')])&&_0x454b0b['applications'][_0x64b2('0x19')]){for(var _0x2c1e3c=0x0;_0x2c1e3c<_0x454b0b['applications'][_0x64b2('0x19')];_0x2c1e3c+=0x1){var _0xbcd85c=_0x454b0b[_0x64b2('0x17')][_0x2c1e3c];if(fs[_0x64b2('0x1a')](path[_0x64b2('0x1b')](__dirname,_0x64b2('0x17'),_0xbcd85c['app']+_0x64b2('0x1c')))){var _0x39fe7d=[];switch(_0xbcd85c[_0x64b2('0x1d')][_0x64b2('0x1e')]()){case _0x64b2('0x1f'):var _0x5a339c=_0xbcd85c[_0x64b2('0x20')][_0x64b2('0x21')](',');_0x39fe7d[_0x64b2('0x22')](_0x5a339c[0x0]);_0x39fe7d[_0x64b2('0x22')](_0x5a339c[_0x64b2('0x23')](0x1,_0x5a339c[_0x64b2('0x19')])[_0x64b2('0x1b')](','));break;case _0x64b2('0x24'):var _0x5a339c=_0xbcd85c[_0x64b2('0x20')][_0x64b2('0x21')](',');_0x39fe7d[_0x64b2('0x22')](_0x5a339c[0x0]);_0x39fe7d['push'](_0x5a339c[0x1]);_0x39fe7d[_0x64b2('0x22')](_0x5a339c[_0x64b2('0x23')](0x2,_0x5a339c['length'])[_0x64b2('0x1b')](','));break;case _0x64b2('0x25'):var _0x5a339c=_0xbcd85c[_0x64b2('0x20')][_0x64b2('0x21')](',');_0x39fe7d[_0x64b2('0x22')](_0x5a339c[0x0]);_0x39fe7d[_0x64b2('0x22')](_0x5a339c[0x1]);_0x39fe7d[_0x64b2('0x22')](_0x5a339c[0x2]);_0x39fe7d[_0x64b2('0x22')](_0x5a339c[0x3]);_0x39fe7d[_0x64b2('0x22')](_0x5a339c[_0x64b2('0x23')](0x4,_0x5a339c['length'])[_0x64b2('0x1b')](','));break;case'message':_0x39fe7d['push'](_0xbcd85c['appdata']);break;case _0x64b2('0x26'):_0x39fe7d[_0x64b2('0x22')](_0xbcd85c['TagId']);_0x39fe7d[_0x64b2('0x22')](_0xbcd85c[_0x64b2('0x20')]);break;default:_0x39fe7d=_[_0x64b2('0xe')](_0xbcd85c[_0x64b2('0x20')])?[]:_0xbcd85c[_0x64b2('0x20')]['split'](',');}var _0x5287e7={'id':util[_0x64b2('0xc')](_0x64b2('0x27'),_0x1db1ca,_0xbcd85c['id'],_0xbcd85c[_0x64b2('0x1d')]),'condition':require(_0x64b2('0x28'))[_0x64b2('0x29')](_0x1db1ca,getIntervals(_0x52f48c[_0x64b2('0x2a')],_0xbcd85c),_0x52f48c),'consequence':require(_0x64b2('0x2b')+_0xbcd85c[_0x64b2('0x1d')])[_0x64b2('0x2c')](_0x1db1ca,_0x39fe7d,_0x52f48c,_0x454b0b),'p':_0xbcd85c[_0x64b2('0x2d')]||0x0};logger[_0x64b2('0x2e')]('Push\x20new\x20rule',_0x5287e7['id'],_0x64b2('0x2f'),getIntervals(_0x52f48c[_0x64b2('0x2a')],_0xbcd85c)[_0x64b2('0x1b')]('\x20|\x20'));_0x7947b0[_0x64b2('0x22')](_0x5287e7);}else{logger['error'](_0x64b2('0x30'),path['join'](__dirname,'applications',_0xbcd85c[_0x64b2('0x1d')]+_0x64b2('0x1c')));}}_0x52f48c[_0x64b2('0x13')][_0x1db1ca]=new RuleEngine(_0x7947b0);_0x52f48c[_0x64b2('0x13')][_0x1db1ca][_0x64b2('0x31')](_0x454b0b,function(_0x5e0d17){logger[_0x64b2('0x2e')](_0x64b2('0x32'),JSON[_0x64b2('0x33')](_0x5e0d17['matchPath']));if(_0x52f48c[_0x64b2('0x13')][_0x1db1ca]){_0x52f48c[_0x64b2('0x13')][_0x1db1ca]['emit']('end');}});return _0x1aea8d({'code':0xc8,'message':_0x454b0b});}else{logger['info']('No\x20applications\x20to\x20execute');return _0x1aea8d({'code':0xc8,'message':_0x454b0b});}}catch(_0x10226c){logger[_0x64b2('0x34')](_0x10226c[_0x64b2('0x35')]);return _0x393343(_0x38a32d[_0x64b2('0x34')](0x1f4,_0x10226c));}}return _0x393343(_0x64b2('0x36'));});},'AcceptMessage':function(_0x8cda41){var _0x1c0bc8=this;return new Promise(function(_0x2bb2f2,_0x1b6a8a){if(_0x8cda41['message']&&_0x8cda41[_0x64b2('0x15')]['id']){try{var _0x43ca80=getId(_0x8cda41['channel'],_0x8cda41[_0x64b2('0x15')]?_0x8cda41[_0x64b2('0x15')]['id']:0x0,_0x8cda41[_0x64b2('0x16')]?_0x8cda41[_0x64b2('0x16')]['id']:0x0);if(_0x52f48c[_0x64b2('0x13')][_0x43ca80]){_0x52f48c[_0x64b2('0x13')][_0x43ca80][_0x64b2('0x37')](_0x64b2('0x38'));if(rpc[_0x8cda41[_0x64b2('0x14')]+_0x64b2('0x39')]){rpc[_0x8cda41[_0x64b2('0x14')]+_0x64b2('0x39')][_0x64b2('0x3a')](_0x43ca80,{'UserId':_0x8cda41[_0x64b2('0x15')][_0x64b2('0x3b')]})['catch'](function(_0x5a2ded){logger[_0x64b2('0x34')](_0x64b2('0x3c'));});}}return _0x2bb2f2({'code':0xc8,'message':_0x8cda41});}catch(_0x436f94){logger[_0x64b2('0x34')](_0x436f94[_0x64b2('0x35')]);return _0x1b6a8a(_0x1c0bc8['error'](0x1f4,_0x436f94));}}logger['error'](_0x64b2('0x3d'));return _0x1b6a8a(_0x1c0bc8[_0x64b2('0x34')](0x1f4,_0x64b2('0x3d')));});},'RejectMessage':function(_0x5f5b1b){var _0x316c82=this;return new Promise(function(_0x3c848e,_0x27b6fa){if(_0x5f5b1b[_0x64b2('0x3e')]&&_0x5f5b1b['agent']['id']){try{if(_0x52f48c['agents'][_0x5f5b1b['agent']['id']]){_0x52f48c[_0x64b2('0x3f')][_0x5f5b1b[_0x64b2('0x3e')]['id']][_0x64b2('0x40')]=![];_0x52f48c[_0x64b2('0x3f')][_0x5f5b1b[_0x64b2('0x3e')]['id']]['busyQueue']=undefined;}return _0x3c848e({'code':0xc8,'message':_0x5f5b1b});}catch(_0x631708){logger['error'](_0x631708[_0x64b2('0x35')]);return _0x27b6fa(_0x316c82[_0x64b2('0x34')](0x1f4,_0x631708));}}logger['error'](_0x64b2('0x3d'));return _0x27b6fa(_0x316c82['error'](0x1f4,_0x64b2('0x3d')));});},'AbandonInteraction':function(_0x4226b3){var _0x17f68f=this;return new Promise(function(_0x2e6946,_0x4bc239){if(_0x4226b3[_0x64b2('0x14')]&&_0x4226b3[_0x64b2('0x16')]&&_0x4226b3[_0x64b2('0x16')]['id']){try{var _0x17c5bb=getId(_0x4226b3[_0x64b2('0x14')],_0x4226b3[_0x64b2('0x15')]?_0x4226b3[_0x64b2('0x15')]['id']:0x0,_0x4226b3[_0x64b2('0x16')]?_0x4226b3[_0x64b2('0x16')]['id']:0x0);if(_0x52f48c[_0x64b2('0x13')][_0x17c5bb]){_0x52f48c[_0x64b2('0x13')][_0x17c5bb][_0x64b2('0x37')](_0x64b2('0x38'));}return _0x2e6946({'code':0xc8,'message':_0x4226b3});}catch(_0x26fa33){logger[_0x64b2('0x34')](_0x26fa33[_0x64b2('0x35')]);return _0x4bc239(_0x17f68f['error'](0x1f4,_0x26fa33));}}logger[_0x64b2('0x34')](_0x64b2('0x3d'));return _0x4bc239(_0x17f68f[_0x64b2('0x34')](0x1f4,'message\x20is\x20empty'));});},'AgentCapacity':function(_0x4b5b74){var _0x31a5dc=this;return new Promise(function(_0x2df9e8,_0x50a24b){if(_0x52f48c[_0x64b2('0x3f')][_0x64b2('0x41')](_0x4b5b74['id'])){for(var _0x53eeb6 in _0x4b5b74[_0x64b2('0x42')]){if(_0x4b5b74[_0x64b2('0x42')][_0x64b2('0x41')](_0x53eeb6)){if(_0x52f48c[_0x64b2('0x3f')][_0x4b5b74['id']]['hasOwnProperty'](_0x53eeb6+'CurrentCapacity')){_0x52f48c[_0x64b2('0x3f')][_0x4b5b74['id']][_0x53eeb6+_0x64b2('0x43')]=parseInt(_0x4b5b74[_0x64b2('0x42')][_0x53eeb6],0xa);}}}_0x52f48c[_0x64b2('0x3f')][_0x4b5b74['id']][_0x64b2('0x44')]();return _0x2df9e8({'code':0xc8,'message':_0x52f48c['agents'][_0x4b5b74['id']]});}else{return _0x50a24b(_0x31a5dc['error'](0x1f4,_0x64b2('0x45')));}});},'Agents':function(_0x4da090){return new Promise(function(_0x11364e,_0x32a073){var _0x5df3b5=_['values'](_0x52f48c[_0x64b2('0x3f')]);_0x11364e({'count':_0x5df3b5[_0x64b2('0x19')],'rows':_0x5df3b5});});},'ChatQueues':function(_0x4e1917){return new Promise(function(_0x3f6f12,_0x329dc7){var _0xfb20ca=[];for(var _0x578f2b in _0x52f48c[_0x64b2('0x46')]){if(_0x52f48c[_0x64b2('0x46')]['hasOwnProperty'](_0x578f2b)){var _0x202afa=_0x52f48c['chatQueues'][_0x578f2b];var _0x15b133={'id':_0x202afa['id'],'available':_0x202afa[_0x64b2('0x47')],'loggedIn':_0x202afa['loggedIn'],'name':_0x202afa['name'],'paused':_0x202afa[_0x64b2('0x48')],'waiting':_0x202afa[_0x64b2('0x49')]};_0xfb20ca[_0x64b2('0x22')](_0x15b133);}}_0x3f6f12({'count':_0xfb20ca[_0x64b2('0x19')],'rows':_0xfb20ca});});},'MailQueues':function(_0x4f616e){return new Promise(function(_0x415293,_0x50c7c){var _0x1323c3=[];for(var _0x575ee3 in _0x52f48c[_0x64b2('0x4a')]){if(_0x52f48c[_0x64b2('0x4a')][_0x64b2('0x41')](_0x575ee3)){var _0x16bd57=_0x52f48c[_0x64b2('0x4a')][_0x575ee3];var _0x268024={'id':_0x16bd57['id'],'available':_0x16bd57['available'],'loggedIn':_0x16bd57[_0x64b2('0x4b')],'name':_0x16bd57[_0x64b2('0x4c')],'paused':_0x16bd57[_0x64b2('0x48')],'waiting':_0x16bd57[_0x64b2('0x49')]};_0x1323c3[_0x64b2('0x22')](_0x268024);}}_0x415293({'count':_0x1323c3['length'],'rows':_0x1323c3});});},'OpenchannelQueues':function(_0x496967){return new Promise(function(_0x4601ea,_0x124e64){var _0x3a87d8=[];for(var _0x1a7d1f in _0x52f48c['openchannelQueues']){if(_0x52f48c[_0x64b2('0x4d')][_0x64b2('0x41')](_0x1a7d1f)){var _0x1bffd5=_0x52f48c[_0x64b2('0x4d')][_0x1a7d1f];var _0x1cd67c={'id':_0x1bffd5['id'],'available':_0x1bffd5[_0x64b2('0x47')],'loggedIn':_0x1bffd5['loggedIn'],'name':_0x1bffd5[_0x64b2('0x4c')],'paused':_0x1bffd5[_0x64b2('0x48')],'waiting':_0x1bffd5[_0x64b2('0x49')]};_0x3a87d8['push'](_0x1cd67c);}}_0x4601ea({'count':_0x3a87d8[_0x64b2('0x19')],'rows':_0x3a87d8});});},'SmsQueues':function(_0x5d0bea){return new Promise(function(_0x444c6f,_0x58db0d){var _0x3571ce=[];for(var _0x49dfda in _0x52f48c[_0x64b2('0x4e')]){if(_0x52f48c[_0x64b2('0x4e')][_0x64b2('0x41')](_0x49dfda)){var _0x18abeb=_0x52f48c['smsQueues'][_0x49dfda];var _0x2d2214={'id':_0x18abeb['id'],'available':_0x18abeb[_0x64b2('0x47')],'loggedIn':_0x18abeb[_0x64b2('0x4b')],'name':_0x18abeb[_0x64b2('0x4c')],'paused':_0x18abeb[_0x64b2('0x48')],'waiting':_0x18abeb['waiting']};_0x3571ce['push'](_0x2d2214);}}_0x444c6f({'count':_0x3571ce['length'],'rows':_0x3571ce});});},'FaxQueues':function(_0x1d7d3e){return new Promise(function(_0x488cb8,_0x1d5602){var _0x1d4d15=[];for(var _0x1ad820 in _0x52f48c[_0x64b2('0x4f')]){if(_0x52f48c[_0x64b2('0x4f')]['hasOwnProperty'](_0x1ad820)){var _0x952479=_0x52f48c['faxQueues'][_0x1ad820];var _0x4c54cc={'id':_0x952479['id'],'available':_0x952479['available'],'loggedIn':_0x952479[_0x64b2('0x4b')],'name':_0x952479[_0x64b2('0x4c')],'paused':_0x952479[_0x64b2('0x48')],'waiting':_0x952479['waiting']};_0x1d4d15[_0x64b2('0x22')](_0x4c54cc);}}_0x488cb8({'count':_0x1d4d15[_0x64b2('0x19')],'rows':_0x1d4d15});});},'ChatQueuesWaitingInteractions':function(_0xe2ec60){return new Promise(function(_0x24a3e0,_0x108cb9){var _0x5064cd=_[_0x64b2('0x50')](_0x52f48c[_0x64b2('0x51')]);_0x24a3e0({'count':_0x5064cd[_0x64b2('0x19')],'rows':_0x5064cd});});},'MailQueuesWaitingInteractions':function(_0x2f6455){return new Promise(function(_0x3a4bfb,_0xe33998){var _0xb88453=_[_0x64b2('0x50')](_0x52f48c[_0x64b2('0x52')]);_0x3a4bfb({'count':_0xb88453[_0x64b2('0x19')],'rows':_0xb88453});});},'OpenchannelQueuesWaitingInteractions':function(_0x3bb5ef){return new Promise(function(_0x2d297b,_0x5f483e){var _0x5302b6=_[_0x64b2('0x50')](_0x52f48c['openchannelQueuesWaitingInteractions']);_0x2d297b({'count':_0x5302b6[_0x64b2('0x19')],'rows':_0x5302b6});});},'SmsQueuesWaitingInteractions':function(_0x4e4312){return new Promise(function(_0x24424d,_0x5d0aa3){var _0x356872=_[_0x64b2('0x50')](_0x52f48c['smsQueuesWaitingInteractions']);_0x24424d({'count':_0x356872[_0x64b2('0x19')],'rows':_0x356872});});},'FaxQueuesWaitingInteractions':function(_0x5b2094){return new Promise(function(_0x127a5b,_0x1c1a54){var _0x511e38=_[_0x64b2('0x50')](_0x52f48c[_0x64b2('0x53')]);_0x127a5b({'count':_0x511e38[_0x64b2('0x19')],'rows':_0x511e38});});}};var _0x1faa14=jayson[_0x64b2('0x54')](_0x233e63)[_0x64b2('0x55')]();_0x1faa14['on'](_0x64b2('0x34'),function(_0x3b6fa2){logger['error'](JSON[_0x64b2('0x33')](_0x3b6fa2));return _0x9bb108(_0x3b6fa2);});_0x1faa14[_0x64b2('0x12')](0x232c,_0x64b2('0x56'),function(){console[_0x64b2('0x57')](_0x64b2('0x58'),0x232c);return _0x2b6e3f(_0x64b2('0x59')+0x232c);});});};
\ No newline at end of file
index 5f8ef9f..2ea6bee 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd002=['then','[%s][INTERVAL]\x20%s\x20%s','join','\x20|\x20','when','util','bluebird','lodash','routing','client','error','message','catch','condition','rules','info','length','push','Command','format','iftime\x20%s','indexOf','true','all'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xd002,0x7d));var _0x2d00=function(_0x539611,_0x44c586){_0x539611=_0x539611-0x0;var _0x2dca51=_0xd002[_0x539611];return _0x2dca51;};'use strict';var util=require(_0x2d00('0x0'));var BPromise=require(_0x2d00('0x1'));var jayson=require('jayson/promise');var _=require(_0x2d00('0x2'));var logger=require('../../../config/logger')(_0x2d00('0x3'));var client=jayson[_0x2d00('0x4')]['http']({'port':0x232a});function request(_0x3ac516,_0x3eaf91){return new BPromise(function(_0x57fb18,_0x2bf00c){return client['request'](_0x3ac516,_0x3eaf91)['then'](function(_0x5688b6){if(_0x5688b6['error']){return _0x2bf00c(_0x5688b6[_0x2d00('0x5')][_0x2d00('0x6')]);}else{return _0x57fb18(_0x5688b6['result']);}})[_0x2d00('0x7')](function(_0x1267b3){return _0x2bf00c(_0x1267b3);});});}exports[_0x2d00('0x8')]=function(_0x4a85b5,_0xf94e9d,_0x50f5e0){return function(_0x4d18a6){if(_0x50f5e0[_0x2d00('0x9')]&&!_0x50f5e0[_0x2d00('0x9')][_0x4a85b5]){logger[_0x2d00('0xa')]('[%s][INTERVAL]\x20ROUTING\x20STOPPED',_0x4a85b5);return _0x4d18a6['stop']();}var _0x5d89e6=[];for(var _0x306ea1=0x0;_0x306ea1<_0xf94e9d[_0x2d00('0xb')];_0x306ea1+=0x1){_0x5d89e6[_0x2d00('0xc')](request(_0x2d00('0xd'),{'command':util[_0x2d00('0xe')](_0x2d00('0xf'),_0xf94e9d[_0x306ea1])})['then'](function(_0x5e4c8b){return _0x5e4c8b&&_0x5e4c8b['message']&&_0x5e4c8b[_0x2d00('0x6')][_0x2d00('0x10')](_0x2d00('0x11'))>=0x0?!![]:![];})[_0x2d00('0x7')](function(_0x5716d5){logger[_0x2d00('0x5')]('[%s][INTERVAL]\x20%s',_0x4a85b5,_0xf94e9d[_0x306ea1]);}));}BPromise[_0x2d00('0x12')](_0x5d89e6)[_0x2d00('0x13')](function(_0x8542ed){var _0x23fbe6=_['some'](_0x8542ed);logger[_0x2d00('0xa')](_0x2d00('0x14'),_0x4a85b5,_0xf94e9d[_0x2d00('0x15')](_0x2d00('0x16')),_0x23fbe6);_0x4d18a6[_0x2d00('0x17')](_0x23fbe6);})[_0x2d00('0x7')](function(_0x59396f){console['log'](_0x59396f);logger[_0x2d00('0x5')](_0x2d00('0x14'),_0x4a85b5,_0xf94e9d['join']('\x20|\x20'),_0x59396f['stack']);_0x4d18a6['stop']();});};};
\ No newline at end of file
+var _0x6e54=['info','stop','push','format','iftime\x20%s','indexOf','[%s][INTERVAL]\x20%s','some','[%s][INTERVAL]\x20%s\x20%s','join','\x20|\x20','stack','util','bluebird','lodash','../../../config/logger','routing','client','http','request','then','error','message','result','catch','rules'];(function(_0x14add3,_0x13ce8d){var _0x4a174f=function(_0x2b3ed7){while(--_0x2b3ed7){_0x14add3['push'](_0x14add3['shift']());}};_0x4a174f(++_0x13ce8d);}(_0x6e54,0x15e));var _0x46e5=function(_0x9307ea,_0x38968a){_0x9307ea=_0x9307ea-0x0;var _0x295554=_0x6e54[_0x9307ea];return _0x295554;};'use strict';var util=require(_0x46e5('0x0'));var BPromise=require(_0x46e5('0x1'));var jayson=require('jayson/promise');var _=require(_0x46e5('0x2'));var logger=require(_0x46e5('0x3'))(_0x46e5('0x4'));var client=jayson[_0x46e5('0x5')][_0x46e5('0x6')]({'port':0x232a});function request(_0x5e5f0a,_0x47074b){return new BPromise(function(_0x5a81b9,_0x124904){return client[_0x46e5('0x7')](_0x5e5f0a,_0x47074b)[_0x46e5('0x8')](function(_0x25820b){if(_0x25820b[_0x46e5('0x9')]){return _0x124904(_0x25820b[_0x46e5('0x9')][_0x46e5('0xa')]);}else{return _0x5a81b9(_0x25820b[_0x46e5('0xb')]);}})[_0x46e5('0xc')](function(_0x77394e){return _0x124904(_0x77394e);});});}exports['condition']=function(_0x5cd779,_0x5d7114,_0x1661d8){return function(_0x3bdaca){if(_0x1661d8['rules']&&!_0x1661d8[_0x46e5('0xd')][_0x5cd779]){logger[_0x46e5('0xe')]('[%s][INTERVAL]\x20ROUTING\x20STOPPED',_0x5cd779);return _0x3bdaca[_0x46e5('0xf')]();}var _0xe82c57=[];for(var _0x314cc9=0x0;_0x314cc9<_0x5d7114['length'];_0x314cc9+=0x1){_0xe82c57[_0x46e5('0x10')](request('Command',{'command':util[_0x46e5('0x11')](_0x46e5('0x12'),_0x5d7114[_0x314cc9])})[_0x46e5('0x8')](function(_0x5c17cd){return _0x5c17cd&&_0x5c17cd[_0x46e5('0xa')]&&_0x5c17cd[_0x46e5('0xa')][_0x46e5('0x13')]('true')>=0x0?!![]:![];})[_0x46e5('0xc')](function(_0x343d39){logger[_0x46e5('0x9')](_0x46e5('0x14'),_0x5cd779,_0x5d7114[_0x314cc9]);}));}BPromise['all'](_0xe82c57)[_0x46e5('0x8')](function(_0x4ed67b){var _0x2599ef=_[_0x46e5('0x15')](_0x4ed67b);logger['info'](_0x46e5('0x16'),_0x5cd779,_0x5d7114[_0x46e5('0x17')](_0x46e5('0x18')),_0x2599ef);_0x3bdaca['when'](_0x2599ef);})[_0x46e5('0xc')](function(_0x53e47b){console['log'](_0x53e47b);logger[_0x46e5('0x9')]('[%s][INTERVAL]\x20%s\x20%s',_0x5cd779,_0x5d7114[_0x46e5('0x17')](_0x46e5('0x18')),_0x53e47b[_0x46e5('0x19')]);_0x3bdaca['stop']();});};};
\ No newline at end of file
index 0216d12..2037f1f 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x2379=['connectedlinename','error','agentringnoanswer','isNil','agentringnoanswerAt','rejected','reason','holdtime','ringtime','queuecallerabandon','forIn','uniqueid','lastevent','abandoned','stack','agentconnectAt','connect','talktime','answered_elsewhere','diffTime','agentcompleteAt','blindtransfer','transfereruniqueid','transfer','transfertype','blind','transferexten','extension','transferuniqueid','attendedtransfer','origtransfereruniqueid','origtransfererlinkedid','secondtransfereruniqueid','ATTENDED','transfereeuniqueid','agententerreason','clone','calleridname','secondtransfererexten','transfertargetuniqueid','agent','complete','lodash','util','./utils','format','AGENT|%s|%s|%s|%s|%s|%s|%s|%s','channel','membername','interface','calleridnum','queue','type','agentacw','agentcomplete','acw','acwtime','acwTimeout','request','CreateVoiceAgentReport','destuniqueid','agentcalled','agentcalledAt','now','called','connectedlinenum'];(function(_0x4c3a36,_0xdba60f){var _0x40f945=function(_0x4efdb2){while(--_0x4efdb2){_0x4c3a36['push'](_0x4c3a36['shift']());}};_0x40f945(++_0xdba60f);}(_0x2379,0x6c));var _0x9237=function(_0x384986,_0x4246af){_0x384986=_0x384986-0x0;var _0x3cbf40=_0x2379[_0x384986];return _0x3cbf40;};'use strict';var _=require(_0x9237('0x0'));var util=require(_0x9237('0x1'));var utils=require(_0x9237('0x2'));var agents={};var transfers={};function writeDB(_0x4facff,_0x2faaf6){utils['info'](util[_0x9237('0x3')](_0x9237('0x4'),_0x4facff['uniqueid'],_0x4facff[_0x9237('0x5')],_0x4facff['queue'],_0x4facff[_0x9237('0x6')],_0x4facff[_0x9237('0x7')],_0x4facff[_0x9237('0x8')],_0x4facff['connectedlinenum'],_0x4facff['lastevent']));if(_0x4facff[_0x9237('0x9')]){utils['getVoiceQueueByName'](_0x4facff[_0x9237('0x9')])['then'](function(_0x1ea0fc){if(_0x1ea0fc){_0x4facff[_0x9237('0xa')]=_0x1ea0fc[_0x9237('0xa')];_0x4facff[_0x9237('0xb')]=_0x4facff[_0x9237('0xc')]?_0x1ea0fc[_0x9237('0xd')]:![];_0x4facff[_0x9237('0xe')]=_0x4facff[_0x9237('0xb')]?_0x1ea0fc[_0x9237('0xf')]:0x0;}utils[_0x9237('0x10')](_0x9237('0x11'),_0x4facff);});}else{utils[_0x9237('0x10')]('CreateVoiceAgentReport',_0x4facff);}if(_0x2faaf6){delete transfers[_0x4facff['uniqueid']];}else{delete agents[_0x4facff[_0x9237('0x12')]];}}exports[_0x9237('0x13')]=function(_0x4a2bfb){try{agents[_0x4a2bfb[_0x9237('0x12')]]=_0x4a2bfb;agents[_0x4a2bfb[_0x9237('0x12')]][_0x9237('0x14')]=utils[_0x9237('0x15')]();agents[_0x4a2bfb['destuniqueid']]['lastevent']=_0x9237('0x16');agents[_0x4a2bfb[_0x9237('0x12')]][_0x9237('0x17')]=null;agents[_0x4a2bfb[_0x9237('0x12')]][_0x9237('0x18')]=null;}catch(_0xe07ab6){utils[_0x9237('0x19')](_0xe07ab6['stack']);}};exports[_0x9237('0x1a')]=function(_0x4ac019){try{if(!_[_0x9237('0x1b')](agents[_0x4ac019[_0x9237('0x12')]])){agents[_0x4ac019['destuniqueid']]['agentringnoanswer']=!![];agents[_0x4ac019['destuniqueid']][_0x9237('0x1c')]=utils[_0x9237('0x15')]();agents[_0x4ac019[_0x9237('0x12')]]['lastevent']=_0x9237('0x1d');agents[_0x4ac019[_0x9237('0x12')]][_0x9237('0x1e')]=_0x9237('0x1d');agents[_0x4ac019[_0x9237('0x12')]][_0x9237('0x1f')]=_0x4ac019[_0x9237('0x20')]?parseInt(_0x4ac019['ringtime'])/0x3e8:0x0;agents[_0x4ac019[_0x9237('0x12')]]['talktime']=0x0;writeDB(agents[_0x4ac019[_0x9237('0x12')]]);}}catch(_0x2b70a1){utils[_0x9237('0x19')](_0x2b70a1['stack']);}};exports[_0x9237('0x21')]=function(_0x145dc8){try{_[_0x9237('0x22')](agents,function(_0xc7f162,_0x1fdb30){if(_0xc7f162[_0x9237('0x23')]==_0x145dc8['uniqueid']){_0xc7f162['agentringnoanswer']=!![];_0xc7f162['agentringnoanswerAt']=utils['now']();_0xc7f162[_0x9237('0x24')]=_0x9237('0x25');_0xc7f162[_0x9237('0x1e')]='abandoned';_0xc7f162[_0x9237('0x1f')]=_0x145dc8['holdtime'];_0xc7f162['talktime']=0x0;writeDB(_0xc7f162);}});}catch(_0x43c67d){utils[_0x9237('0x19')](_0x43c67d[_0x9237('0x26')]);}};exports['agentconnect']=function(_0x5b666e){try{if(agents[_0x5b666e[_0x9237('0x12')]]){agents[_0x5b666e[_0x9237('0x12')]][_0x9237('0x27')]=utils[_0x9237('0x15')]();agents[_0x5b666e[_0x9237('0x12')]]['connectedlinenum']=_0x5b666e[_0x9237('0x17')];agents[_0x5b666e['destuniqueid']]['connectedlinename']=_0x5b666e['connectedlinename'];agents[_0x5b666e['destuniqueid']][_0x9237('0x1f')]=_0x5b666e['ringtime'];agents[_0x5b666e[_0x9237('0x12')]][_0x9237('0x24')]=_0x9237('0x28');_['forIn'](agents,function(_0xba80d8,_0x13c9c0){if(_0xba80d8[_0x9237('0x12')]!=_0x5b666e[_0x9237('0x12')]&&_0xba80d8[_0x9237('0x23')]==_0x5b666e[_0x9237('0x23')]){_0xba80d8[_0x9237('0x29')]=0x0;_0xba80d8[_0x9237('0x1f')]=_0x5b666e[_0x9237('0x20')];_0xba80d8[_0x9237('0x1a')]=!![];_0xba80d8[_0x9237('0x1c')]=utils[_0x9237('0x15')]();_0xba80d8[_0x9237('0x24')]='answered_elsewhere';_0xba80d8[_0x9237('0x1e')]=_0x9237('0x2a');_0xba80d8['answeredelsewheredestinationuniqueid']=_0x5b666e[_0x9237('0x12')];_0xba80d8['answeredelsewheremembername']=_0x5b666e[_0x9237('0x6')];writeDB(_0xba80d8);}});}}catch(_0x1284e1){utils['error'](_0x1284e1[_0x9237('0x26')]);}};exports['agentcomplete']=function(_0x1cabe9){try{if(!_[_0x9237('0x1b')](agents[_0x1cabe9['destuniqueid']])){agents[_0x1cabe9[_0x9237('0x12')]][_0x9237('0xc')]=!![];agents[_0x1cabe9[_0x9237('0x12')]]['agentcompleteAt']=utils[_0x9237('0x15')]();agents[_0x1cabe9[_0x9237('0x12')]][_0x9237('0x29')]=utils[_0x9237('0x2b')](agents[_0x1cabe9[_0x9237('0x12')]][_0x9237('0x2c')],agents[_0x1cabe9[_0x9237('0x12')]][_0x9237('0x27')]);agents[_0x1cabe9[_0x9237('0x12')]]['reason']=_0x1cabe9[_0x9237('0x1e')];agents[_0x1cabe9[_0x9237('0x12')]]['lastevent']='complete';writeDB(agents[_0x1cabe9['destuniqueid']]);}}catch(_0x54d591){utils[_0x9237('0x19')](_0x54d591[_0x9237('0x26')]);}};exports[_0x9237('0x2d')]=function(_0x15b48d){try{if(!_[_0x9237('0x1b')](agents[_0x15b48d[_0x9237('0x2e')]])){agents[_0x15b48d[_0x9237('0x2e')]][_0x9237('0x2f')]=!![];agents[_0x15b48d[_0x9237('0x2e')]][_0x9237('0x30')]=_0x9237('0x31');agents[_0x15b48d[_0x9237('0x2e')]][_0x9237('0x32')]=_0x15b48d[_0x9237('0x33')];agents[_0x15b48d['transfereruniqueid']][_0x9237('0x34')]=agents[_0x15b48d[_0x9237('0x2e')]]['uniqueid'];}}catch(_0x30723b){utils[_0x9237('0x19')](_0x30723b['stack']);}};exports[_0x9237('0x35')]=function(_0x2772a0){try{if(_0x2772a0[_0x9237('0x36')]==_0x2772a0[_0x9237('0x37')]){if(!_[_0x9237('0x1b')](agents[_0x2772a0[_0x9237('0x38')]])){agents[_0x2772a0[_0x9237('0x38')]][_0x9237('0x2f')]=!![];agents[_0x2772a0[_0x9237('0x38')]][_0x9237('0x30')]=_0x9237('0x39');agents[_0x2772a0['secondtransfereruniqueid']]['transferexten']=_0x2772a0['origtransfererexten'];agents[_0x2772a0[_0x9237('0x38')]][_0x9237('0x34')]=_0x2772a0[_0x9237('0x36')];}if(_0x2772a0[_0x9237('0x3a')]&&agents[_0x2772a0['transfereeuniqueid']]){agents[_0x2772a0[_0x9237('0x3a')]][_0x9237('0x3b')]=0x1;transfers[_0x2772a0[_0x9237('0x3a')]]=_[_0x9237('0x3c')](agents[_0x2772a0['transfereeuniqueid']]);transfers[_0x2772a0[_0x9237('0x3a')]][_0x9237('0x8')]=agents[_0x2772a0[_0x9237('0x38')]]['calleridnum'];transfers[_0x2772a0[_0x9237('0x3a')]][_0x9237('0x3d')]=agents[_0x2772a0[_0x9237('0x38')]][_0x9237('0x3d')];transfers[_0x2772a0['transfereeuniqueid']][_0x9237('0x14')]=utils[_0x9237('0x15')]();transfers[_0x2772a0['transfereeuniqueid']][_0x9237('0x27')]=utils[_0x9237('0x15')]();transfers[_0x2772a0[_0x9237('0x3a')]][_0x9237('0x1f')]=0x0;transfers[_0x2772a0[_0x9237('0x3a')]][_0x9237('0x3b')]=0x2;}}else if(_0x2772a0[_0x9237('0x38')]==_0x2772a0['secondtransfererlinkedid']){if(!_[_0x9237('0x1b')](agents[_0x2772a0['origtransfereruniqueid']])){agents[_0x2772a0['origtransfereruniqueid']][_0x9237('0x2f')]=!![];agents[_0x2772a0[_0x9237('0x36')]][_0x9237('0x30')]=_0x9237('0x39');agents[_0x2772a0[_0x9237('0x36')]][_0x9237('0x32')]=_0x2772a0[_0x9237('0x3e')];agents[_0x2772a0['origtransfereruniqueid']][_0x9237('0x34')]=_0x2772a0[_0x9237('0x38')];}if(_0x2772a0['transfertargetuniqueid']&&agents[_0x2772a0[_0x9237('0x3f')]]){agents[_0x2772a0[_0x9237('0x3f')]]['agententerreason']=0x1;transfers[_0x2772a0[_0x9237('0x3f')]]=_[_0x9237('0x3c')](agents[_0x2772a0[_0x9237('0x3f')]]);transfers[_0x2772a0[_0x9237('0x3f')]]['calleridnum']=agents[_0x2772a0[_0x9237('0x36')]][_0x9237('0x8')];transfers[_0x2772a0[_0x9237('0x3f')]]['calleridname']=agents[_0x2772a0[_0x9237('0x36')]][_0x9237('0x3d')];transfers[_0x2772a0[_0x9237('0x3f')]][_0x9237('0x14')]=utils[_0x9237('0x15')]();transfers[_0x2772a0[_0x9237('0x3f')]][_0x9237('0x27')]=utils[_0x9237('0x15')]();transfers[_0x2772a0['transfertargetuniqueid']]['holdtime']=0x0;transfers[_0x2772a0[_0x9237('0x3f')]][_0x9237('0x3b')]=0x2;}}}catch(_0x1d320c){utils['error'](_0x1d320c[_0x9237('0x26')]);}};exports['hangup']=function(_0x3e53b3){try{if(transfers[_0x3e53b3[_0x9237('0x23')]]){transfers[_0x3e53b3[_0x9237('0x23')]][_0x9237('0xc')]=!![];transfers[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x2c')]=utils[_0x9237('0x15')]();transfers[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x29')]=utils['diffTime'](transfers[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x2c')],transfers[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x27')]);transfers[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x1e')]=_0x9237('0x40');transfers[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x24')]=_0x9237('0x41');writeDB(transfers[_0x3e53b3[_0x9237('0x23')]],!![]);}if(agents[_0x3e53b3[_0x9237('0x23')]]&&agents[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x27')]){agents[_0x3e53b3['uniqueid']]['agentcomplete']=!![];agents[_0x3e53b3['uniqueid']][_0x9237('0x2c')]=utils[_0x9237('0x15')]();agents[_0x3e53b3['uniqueid']][_0x9237('0x29')]=utils[_0x9237('0x2b')](agents[_0x3e53b3['uniqueid']][_0x9237('0x2c')],agents[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x27')]);agents[_0x3e53b3['uniqueid']][_0x9237('0x1e')]=agents[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x2f')]?_0x9237('0x2f'):_0x9237('0x40');agents[_0x3e53b3[_0x9237('0x23')]][_0x9237('0x24')]='complete';writeDB(agents[_0x3e53b3[_0x9237('0x23')]]);}}catch(_0xaff2aa){utils[_0x9237('0x19')](_0xaff2aa[_0x9237('0x26')]);}};
\ No newline at end of file
+var _0xe012=['origtransfererlinkedid','secondtransfereruniqueid','origtransfererexten','transfereeuniqueid','agententerreason','clone','calleridname','secondtransfererlinkedid','ATTENDED','secondtransfererexten','transfertargetuniqueid','hangup','diffTime','agent','lodash','util','AGENT|%s|%s|%s|%s|%s|%s|%s|%s','uniqueid','channel','queue','membername','interface','calleridnum','connectedlinenum','getVoiceQueueByName','then','type','acw','request','CreateVoiceAgentReport','destuniqueid','agentcalled','agentcalledAt','now','lastevent','called','error','stack','agentringnoanswer','isNil','agentringnoanswerAt','rejected','reason','holdtime','ringtime','talktime','forIn','abandoned','agentconnectAt','connectedlinename','connect','answered_elsewhere','answeredelsewheredestinationuniqueid','answeredelsewheremembername','agentcomplete','agentcompleteAt','complete','blindtransfer','transfereruniqueid','transfer','transfertype','blind','transferexten','extension','transferuniqueid','attendedtransfer','origtransfereruniqueid'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0xe012,0x1a0));var _0x2e01=function(_0x2620c3,_0x33dfea){_0x2620c3=_0x2620c3-0x0;var _0x51d2f4=_0xe012[_0x2620c3];return _0x51d2f4;};'use strict';var _=require(_0x2e01('0x0'));var util=require(_0x2e01('0x1'));var utils=require('./utils');var agents={};var transfers={};function writeDB(_0x56c169,_0x1214a7){utils['info'](util['format'](_0x2e01('0x2'),_0x56c169[_0x2e01('0x3')],_0x56c169[_0x2e01('0x4')],_0x56c169[_0x2e01('0x5')],_0x56c169[_0x2e01('0x6')],_0x56c169[_0x2e01('0x7')],_0x56c169[_0x2e01('0x8')],_0x56c169[_0x2e01('0x9')],_0x56c169['lastevent']));if(_0x56c169[_0x2e01('0x5')]){utils[_0x2e01('0xa')](_0x56c169['queue'])[_0x2e01('0xb')](function(_0x5e4dce){if(_0x5e4dce){_0x56c169[_0x2e01('0xc')]=_0x5e4dce[_0x2e01('0xc')];_0x56c169['agentacw']=_0x56c169['agentcomplete']?_0x5e4dce[_0x2e01('0xd')]:![];_0x56c169['acwtime']=_0x56c169['agentacw']?_0x5e4dce['acwTimeout']:0x0;}utils[_0x2e01('0xe')](_0x2e01('0xf'),_0x56c169);});}else{utils[_0x2e01('0xe')](_0x2e01('0xf'),_0x56c169);}if(_0x1214a7){delete transfers[_0x56c169[_0x2e01('0x3')]];}else{delete agents[_0x56c169[_0x2e01('0x10')]];}}exports[_0x2e01('0x11')]=function(_0x13554){try{agents[_0x13554[_0x2e01('0x10')]]=_0x13554;agents[_0x13554['destuniqueid']][_0x2e01('0x12')]=utils[_0x2e01('0x13')]();agents[_0x13554[_0x2e01('0x10')]][_0x2e01('0x14')]=_0x2e01('0x15');agents[_0x13554[_0x2e01('0x10')]][_0x2e01('0x9')]=null;agents[_0x13554[_0x2e01('0x10')]]['connectedlinename']=null;}catch(_0x5c31dc){utils[_0x2e01('0x16')](_0x5c31dc[_0x2e01('0x17')]);}};exports[_0x2e01('0x18')]=function(_0x1e1c4f){try{if(!_[_0x2e01('0x19')](agents[_0x1e1c4f[_0x2e01('0x10')]])){agents[_0x1e1c4f[_0x2e01('0x10')]]['agentringnoanswer']=!![];agents[_0x1e1c4f['destuniqueid']][_0x2e01('0x1a')]=utils[_0x2e01('0x13')]();agents[_0x1e1c4f[_0x2e01('0x10')]][_0x2e01('0x14')]=_0x2e01('0x1b');agents[_0x1e1c4f[_0x2e01('0x10')]][_0x2e01('0x1c')]=_0x2e01('0x1b');agents[_0x1e1c4f['destuniqueid']][_0x2e01('0x1d')]=_0x1e1c4f[_0x2e01('0x1e')]?parseInt(_0x1e1c4f[_0x2e01('0x1e')])/0x3e8:0x0;agents[_0x1e1c4f[_0x2e01('0x10')]][_0x2e01('0x1f')]=0x0;writeDB(agents[_0x1e1c4f[_0x2e01('0x10')]]);}}catch(_0x5222ff){utils[_0x2e01('0x16')](_0x5222ff[_0x2e01('0x17')]);}};exports['queuecallerabandon']=function(_0x2bfc38){try{_[_0x2e01('0x20')](agents,function(_0x4950f9,_0x1f2221){if(_0x4950f9[_0x2e01('0x3')]==_0x2bfc38['uniqueid']){_0x4950f9[_0x2e01('0x18')]=!![];_0x4950f9[_0x2e01('0x1a')]=utils['now']();_0x4950f9[_0x2e01('0x14')]='abandoned';_0x4950f9[_0x2e01('0x1c')]=_0x2e01('0x21');_0x4950f9[_0x2e01('0x1d')]=_0x2bfc38['holdtime'];_0x4950f9[_0x2e01('0x1f')]=0x0;writeDB(_0x4950f9);}});}catch(_0x43a5cb){utils['error'](_0x43a5cb[_0x2e01('0x17')]);}};exports['agentconnect']=function(_0x502864){try{if(agents[_0x502864[_0x2e01('0x10')]]){agents[_0x502864['destuniqueid']][_0x2e01('0x22')]=utils['now']();agents[_0x502864[_0x2e01('0x10')]]['connectedlinenum']=_0x502864[_0x2e01('0x9')];agents[_0x502864[_0x2e01('0x10')]][_0x2e01('0x23')]=_0x502864['connectedlinename'];agents[_0x502864[_0x2e01('0x10')]][_0x2e01('0x1d')]=_0x502864[_0x2e01('0x1e')];agents[_0x502864[_0x2e01('0x10')]][_0x2e01('0x14')]=_0x2e01('0x24');_[_0x2e01('0x20')](agents,function(_0xd98119,_0x4a9eed){if(_0xd98119[_0x2e01('0x10')]!=_0x502864[_0x2e01('0x10')]&&_0xd98119[_0x2e01('0x3')]==_0x502864[_0x2e01('0x3')]){_0xd98119['talktime']=0x0;_0xd98119[_0x2e01('0x1d')]=_0x502864[_0x2e01('0x1e')];_0xd98119[_0x2e01('0x18')]=!![];_0xd98119[_0x2e01('0x1a')]=utils['now']();_0xd98119[_0x2e01('0x14')]=_0x2e01('0x25');_0xd98119[_0x2e01('0x1c')]=_0x2e01('0x25');_0xd98119[_0x2e01('0x26')]=_0x502864[_0x2e01('0x10')];_0xd98119[_0x2e01('0x27')]=_0x502864[_0x2e01('0x6')];writeDB(_0xd98119);}});}}catch(_0xb0a25b){utils[_0x2e01('0x16')](_0xb0a25b['stack']);}};exports[_0x2e01('0x28')]=function(_0xafd39a){try{if(!_[_0x2e01('0x19')](agents[_0xafd39a['destuniqueid']])){agents[_0xafd39a[_0x2e01('0x10')]]['agentcomplete']=!![];agents[_0xafd39a[_0x2e01('0x10')]]['agentcompleteAt']=utils['now']();agents[_0xafd39a[_0x2e01('0x10')]][_0x2e01('0x1f')]=utils['diffTime'](agents[_0xafd39a[_0x2e01('0x10')]][_0x2e01('0x29')],agents[_0xafd39a[_0x2e01('0x10')]][_0x2e01('0x22')]);agents[_0xafd39a[_0x2e01('0x10')]][_0x2e01('0x1c')]=_0xafd39a[_0x2e01('0x1c')];agents[_0xafd39a[_0x2e01('0x10')]][_0x2e01('0x14')]=_0x2e01('0x2a');writeDB(agents[_0xafd39a[_0x2e01('0x10')]]);}}catch(_0x24ee27){utils[_0x2e01('0x16')](_0x24ee27[_0x2e01('0x17')]);}};exports[_0x2e01('0x2b')]=function(_0x5af540){try{if(!_[_0x2e01('0x19')](agents[_0x5af540[_0x2e01('0x2c')]])){agents[_0x5af540[_0x2e01('0x2c')]][_0x2e01('0x2d')]=!![];agents[_0x5af540[_0x2e01('0x2c')]][_0x2e01('0x2e')]=_0x2e01('0x2f');agents[_0x5af540[_0x2e01('0x2c')]][_0x2e01('0x30')]=_0x5af540[_0x2e01('0x31')];agents[_0x5af540[_0x2e01('0x2c')]][_0x2e01('0x32')]=agents[_0x5af540[_0x2e01('0x2c')]]['uniqueid'];}}catch(_0x45a754){utils[_0x2e01('0x16')](_0x45a754[_0x2e01('0x17')]);}};exports[_0x2e01('0x33')]=function(_0x3121dc){try{if(_0x3121dc[_0x2e01('0x34')]==_0x3121dc[_0x2e01('0x35')]){if(!_[_0x2e01('0x19')](agents[_0x3121dc['secondtransfereruniqueid']])){agents[_0x3121dc[_0x2e01('0x36')]][_0x2e01('0x2d')]=!![];agents[_0x3121dc[_0x2e01('0x36')]][_0x2e01('0x2e')]='ATTENDED';agents[_0x3121dc[_0x2e01('0x36')]][_0x2e01('0x30')]=_0x3121dc[_0x2e01('0x37')];agents[_0x3121dc[_0x2e01('0x36')]][_0x2e01('0x32')]=_0x3121dc[_0x2e01('0x34')];}if(_0x3121dc[_0x2e01('0x38')]&&agents[_0x3121dc[_0x2e01('0x38')]]){agents[_0x3121dc[_0x2e01('0x38')]][_0x2e01('0x39')]=0x1;transfers[_0x3121dc[_0x2e01('0x38')]]=_[_0x2e01('0x3a')](agents[_0x3121dc[_0x2e01('0x38')]]);transfers[_0x3121dc[_0x2e01('0x38')]][_0x2e01('0x8')]=agents[_0x3121dc[_0x2e01('0x36')]]['calleridnum'];transfers[_0x3121dc['transfereeuniqueid']][_0x2e01('0x3b')]=agents[_0x3121dc[_0x2e01('0x36')]][_0x2e01('0x3b')];transfers[_0x3121dc[_0x2e01('0x38')]]['agentcalledAt']=utils[_0x2e01('0x13')]();transfers[_0x3121dc[_0x2e01('0x38')]]['agentconnectAt']=utils[_0x2e01('0x13')]();transfers[_0x3121dc['transfereeuniqueid']]['holdtime']=0x0;transfers[_0x3121dc[_0x2e01('0x38')]][_0x2e01('0x39')]=0x2;}}else if(_0x3121dc[_0x2e01('0x36')]==_0x3121dc[_0x2e01('0x3c')]){if(!_[_0x2e01('0x19')](agents[_0x3121dc[_0x2e01('0x34')]])){agents[_0x3121dc[_0x2e01('0x34')]]['transfer']=!![];agents[_0x3121dc[_0x2e01('0x34')]][_0x2e01('0x2e')]=_0x2e01('0x3d');agents[_0x3121dc[_0x2e01('0x34')]][_0x2e01('0x30')]=_0x3121dc[_0x2e01('0x3e')];agents[_0x3121dc[_0x2e01('0x34')]][_0x2e01('0x32')]=_0x3121dc[_0x2e01('0x36')];}if(_0x3121dc[_0x2e01('0x3f')]&&agents[_0x3121dc[_0x2e01('0x3f')]]){agents[_0x3121dc[_0x2e01('0x3f')]][_0x2e01('0x39')]=0x1;transfers[_0x3121dc['transfertargetuniqueid']]=_['clone'](agents[_0x3121dc[_0x2e01('0x3f')]]);transfers[_0x3121dc[_0x2e01('0x3f')]][_0x2e01('0x8')]=agents[_0x3121dc[_0x2e01('0x34')]][_0x2e01('0x8')];transfers[_0x3121dc[_0x2e01('0x3f')]][_0x2e01('0x3b')]=agents[_0x3121dc['origtransfereruniqueid']][_0x2e01('0x3b')];transfers[_0x3121dc[_0x2e01('0x3f')]]['agentcalledAt']=utils['now']();transfers[_0x3121dc[_0x2e01('0x3f')]][_0x2e01('0x22')]=utils['now']();transfers[_0x3121dc[_0x2e01('0x3f')]][_0x2e01('0x1d')]=0x0;transfers[_0x3121dc[_0x2e01('0x3f')]]['agententerreason']=0x2;}}}catch(_0x59efa6){utils[_0x2e01('0x16')](_0x59efa6[_0x2e01('0x17')]);}};exports[_0x2e01('0x40')]=function(_0x51c61c){try{if(transfers[_0x51c61c[_0x2e01('0x3')]]){transfers[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x28')]=!![];transfers[_0x51c61c['uniqueid']]['agentcompleteAt']=utils[_0x2e01('0x13')]();transfers[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x1f')]=utils[_0x2e01('0x41')](transfers[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x29')],transfers[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x22')]);transfers[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x1c')]=_0x2e01('0x42');transfers[_0x51c61c[_0x2e01('0x3')]]['lastevent']=_0x2e01('0x2a');writeDB(transfers[_0x51c61c[_0x2e01('0x3')]],!![]);}if(agents[_0x51c61c[_0x2e01('0x3')]]&&agents[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x22')]){agents[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x28')]=!![];agents[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x29')]=utils['now']();agents[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x1f')]=utils['diffTime'](agents[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x29')],agents[_0x51c61c['uniqueid']][_0x2e01('0x22')]);agents[_0x51c61c['uniqueid']]['reason']=agents[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x2d')]?_0x2e01('0x2d'):'agent';agents[_0x51c61c[_0x2e01('0x3')]][_0x2e01('0x14')]='complete';writeDB(agents[_0x51c61c[_0x2e01('0x3')]]);}}catch(_0x126b22){utils['error'](_0x126b22[_0x2e01('0x17')]);}};
\ No newline at end of file
index fc59adb..e35f18a 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x008c=['lastIndexOf','includes','hangup','noop','execif','gotoif','lastapplication','lodash','util','./utils','NO\x20ANSWER','FAILED','ANSWERED','BUSY','format','uniqueid','accountcode','source','getUserByInternal','then','UserId','request','CreateVoiceCallReport','newchannel','linkedid','channel','now','DOCUMENTATION','isNil','channelstate','systemanswertime','transfer','destinationchannel','answertime','error','stack','callerid','calleridnum','\x22\x20<','endtime','diffTime','billableseconds','attendedtransfer','localtwolinkedid','transfereechannel','secondtransfererchannel','userfield','transfertargetchannel','origtransfererchannel','_attended','musiconholdstart','musiconholdstop','musiconholdstartAt','mohtime','varset','variable','xmd-originatecalleridnum','value','xmd-phone','destination','xmd-callerid','xmd-queue','Queue','lastdata','queue','xmd-contactid','outboundrouteid','routeid','sipcallid','application','toLowerCase','set','startsWith','appdata','cdr','split','substring'];(function(_0x440d4c,_0x5ea9e1){var _0x21fba9=function(_0x13d8ce){while(--_0x13d8ce){_0x440d4c['push'](_0x440d4c['shift']());}};_0x21fba9(++_0x5ea9e1);}(_0x008c,0x188));var _0xc008=function(_0x470ce2,_0x4b3815){_0x470ce2=_0x470ce2-0x0;var _0x739076=_0x008c[_0x470ce2];return _0x739076;};'use strict';var _=require(_0xc008('0x0'));var util=require(_0xc008('0x1'));var utils=require(_0xc008('0x2'));var dispositions=[_0xc008('0x3'),_0xc008('0x4'),'FAILED',_0xc008('0x3'),_0xc008('0x3'),_0xc008('0x3'),_0xc008('0x5'),_0xc008('0x6'),_0xc008('0x4'),_0xc008('0x4'),_0xc008('0x4')];var channels={};function writeDB(_0x9c8cb2){utils['info'](util[_0xc008('0x7')]('CALL|%s|%s|%s|%s|%s|%s|%s|%s',_0x9c8cb2[_0xc008('0x8')],_0x9c8cb2['channel'],_0x9c8cb2['type'],_0x9c8cb2[_0xc008('0x9')],_0x9c8cb2[_0xc008('0xa')],_0x9c8cb2['destination'],_0x9c8cb2['callerid'],_0x9c8cb2['disposition']));if(_0x9c8cb2[_0xc008('0x9')]){utils[_0xc008('0xb')](_0x9c8cb2['accountcode'])[_0xc008('0xc')](function(_0x332fd4){if(_0x332fd4){_0x9c8cb2[_0xc008('0xd')]=_0x332fd4['id'];}utils[_0xc008('0xe')](_0xc008('0xf'),_0x9c8cb2);});}else{utils[_0xc008('0xe')](_0xc008('0xf'),_0x9c8cb2);}if(channels[_0x9c8cb2['uniqueid']]){delete channels[_0x9c8cb2['uniqueid']];}}exports[_0xc008('0x10')]=function(_0x50c1ab){try{if(_0x50c1ab[_0xc008('0x8')]==_0x50c1ab[_0xc008('0x11')]){channels[_0x50c1ab[_0xc008('0x8')]]={'uniqueid':_0x50c1ab[_0xc008('0x8')],'accountcode':_0x50c1ab[_0xc008('0x9')],'source':_0x50c1ab['calleridnum'],'destination':_0x50c1ab['exten'],'destinationcontext':_0x50c1ab['context'],'channel':_0x50c1ab[_0xc008('0x12')],'starttime':utils[_0xc008('0x13')](),'answertime':null,'systemanswertime':null,'mohtime':0x0,'disposition':_0xc008('0x3'),'amaflags':_0xc008('0x14')};}}catch(_0x4fe771){utils['error'](_0x4fe771['stack']);}};exports['newstate']=function(_0x46042b){try{if(!_[_0xc008('0x15')](channels[_0x46042b['uniqueid']])&&_0x46042b[_0xc008('0x16')]==0x6){if(_['isNil'](channels[_0x46042b['uniqueid']]['systemanswertime'])){channels[_0x46042b['uniqueid']][_0xc008('0x17')]=utils['now']();}}else if(!_['isNil'](channels[_0x46042b['linkedid']])&&_0x46042b['channelstate']==0x6&&_0x46042b['context']!=_0xc008('0x18')){channels[_0x46042b[_0xc008('0x11')]][_0xc008('0x9')]=_0x46042b[_0xc008('0x9')];channels[_0x46042b[_0xc008('0x11')]][_0xc008('0x19')]=_0x46042b['channel'];if(_[_0xc008('0x15')](channels[_0x46042b['linkedid']]['answertime'])){channels[_0x46042b[_0xc008('0x11')]][_0xc008('0x1a')]=utils[_0xc008('0x13')]();}channels[_0x46042b[_0xc008('0x11')]]['disposition']=dispositions[_['toNumber'](_0x46042b['channelstate'])]||_0xc008('0x5');}}catch(_0x15dade){utils[_0xc008('0x1b')](_0x15dade[_0xc008('0x1c')]);}};exports['hangup']=function(_0x5e2aca){try{if(!_['isNil'](channels[_0x5e2aca['uniqueid']])){channels[_0x5e2aca['uniqueid']][_0xc008('0x1d')]='\x22'+_0x5e2aca[_0xc008('0x1e')]+_0xc008('0x1f')+_0x5e2aca['calleridname']+'>';channels[_0x5e2aca[_0xc008('0x8')]][_0xc008('0x20')]=utils[_0xc008('0x13')]();channels[_0x5e2aca[_0xc008('0x8')]]['duration']=utils[_0xc008('0x21')](channels[_0x5e2aca[_0xc008('0x8')]]['endtime'],channels[_0x5e2aca['uniqueid']]['starttime']);channels[_0x5e2aca[_0xc008('0x8')]][_0xc008('0x22')]=channels[_0x5e2aca[_0xc008('0x8')]][_0xc008('0x1a')]?utils[_0xc008('0x21')](channels[_0x5e2aca[_0xc008('0x8')]][_0xc008('0x20')],channels[_0x5e2aca[_0xc008('0x8')]][_0xc008('0x1a')]):0x0;writeDB(channels[_0x5e2aca[_0xc008('0x8')]]);}}catch(_0x2f4b6b){utils[_0xc008('0x1b')](_0x2f4b6b['stack']);}};exports[_0xc008('0x23')]=function(_0x4b7fd4){try{if(!_['isNil'](channels[_0x4b7fd4[_0xc008('0x24')]])){if(channels[_0x4b7fd4[_0xc008('0x24')]][_0xc008('0x12')]==_0x4b7fd4[_0xc008('0x25')]){channels[_0x4b7fd4[_0xc008('0x24')]][_0xc008('0x19')]=_0x4b7fd4[_0xc008('0x26')];channels[_0x4b7fd4[_0xc008('0x24')]][_0xc008('0x27')]='_attended';}else if(channels[_0x4b7fd4[_0xc008('0x24')]][_0xc008('0x12')]=_0x4b7fd4[_0xc008('0x28')]){channels[_0x4b7fd4[_0xc008('0x24')]][_0xc008('0x19')]=_0x4b7fd4[_0xc008('0x29')];channels[_0x4b7fd4[_0xc008('0x24')]]['userfield']=_0xc008('0x2a');}}}catch(_0x21763f){utils['error'](_0x21763f[_0xc008('0x1c')]);}};exports[_0xc008('0x2b')]=function(_0x5e38d5){try{if(!_[_0xc008('0x15')](channels[_0x5e38d5[_0xc008('0x8')]])){channels[_0x5e38d5[_0xc008('0x8')]]['musiconholdstartAt']=utils['now']();}}catch(_0x478810){utils[_0xc008('0x1b')](_0x478810['stack']);}};exports[_0xc008('0x2c')]=function(_0x3884dd){try{if(!_[_0xc008('0x15')](channels[_0x3884dd[_0xc008('0x8')]])){if(!_[_0xc008('0x15')](channels[_0x3884dd[_0xc008('0x8')]][_0xc008('0x2d')])){channels[_0x3884dd[_0xc008('0x8')]][_0xc008('0x2e')]+=utils[_0xc008('0x21')](utils[_0xc008('0x13')](),channels[_0x3884dd[_0xc008('0x8')]][_0xc008('0x2d')]);delete channels[_0x3884dd[_0xc008('0x8')]]['musiconholdstartAt'];}}}catch(_0x3238b4){utils[_0xc008('0x1b')](_0x3238b4[_0xc008('0x1c')]);}};exports[_0xc008('0x2f')]=function(_0x49a16d){try{if(!_[_0xc008('0x15')](channels[_0x49a16d[_0xc008('0x8')]])){if(!_[_0xc008('0x15')](_0x49a16d[_0xc008('0x30')][_0xc008('0x31')])){channels[_0x49a16d['uniqueid']][_0xc008('0xa')]=_0x49a16d[_0xc008('0x32')];}if(!_[_0xc008('0x15')](_0x49a16d[_0xc008('0x30')][_0xc008('0x33')])){channels[_0x49a16d['uniqueid']][_0xc008('0x34')]=_0x49a16d[_0xc008('0x32')];}if(!_[_0xc008('0x15')](_0x49a16d[_0xc008('0x30')]['xmd-callerid-preview'])||!_[_0xc008('0x15')](_0x49a16d[_0xc008('0x30')][_0xc008('0x35')])){channels[_0x49a16d['uniqueid']][_0xc008('0x1d')]=_0x49a16d['value'];}if(!_[_0xc008('0x15')](_0x49a16d['variable'][_0xc008('0x36')])){channels[_0x49a16d[_0xc008('0x8')]]['lastapplication']=_0xc008('0x37');channels[_0x49a16d[_0xc008('0x8')]][_0xc008('0x38')]=_0x49a16d['value'];channels[_0x49a16d[_0xc008('0x8')]][_0xc008('0x39')]=!![];}if(!_[_0xc008('0x15')](_0x49a16d[_0xc008('0x30')][_0xc008('0x3a')])){channels[_0x49a16d[_0xc008('0x8')]]['ContactId']=_0x49a16d['value'];}if(!_['isNil'](_0x49a16d[_0xc008('0x30')][_0xc008('0x3b')])){channels[_0x49a16d[_0xc008('0x8')]][_0xc008('0x3c')]=_0x49a16d[_0xc008('0x32')];}if(!_[_0xc008('0x15')](_0x49a16d[_0xc008('0x30')][_0xc008('0x3d')])){channels[_0x49a16d['uniqueid']]['sipcallid']=_0x49a16d['value'];}}}catch(_0x2d5a49){utils[_0xc008('0x1b')](_0x2d5a49[_0xc008('0x1c')]);}};exports['newexten']=function(_0x28bc33){try{if(!_[_0xc008('0x15')](channels[_0x28bc33[_0xc008('0x8')]])){if(_0x28bc33[_0xc008('0x3e')][_0xc008('0x3f')]()==_0xc008('0x40')&&_[_0xc008('0x41')](_0x28bc33[_0xc008('0x42')][_0xc008('0x3f')](),_0xc008('0x43'))){var _0x52c444=_0x28bc33['appdata'][_0xc008('0x44')]('=');var _0x51cb14=_0x52c444[0x0][_0xc008('0x45')](_0x52c444[0x0][_0xc008('0x46')]('(')+0x1,_0x52c444[0x0][_0xc008('0x46')](')'));var _0x5598fa=_0x52c444[0x1];channels[_0x28bc33[_0xc008('0x8')]][_0x51cb14]=_0x5598fa;}if(!_[_0xc008('0x47')]([_0xc008('0x48'),_0xc008('0x49'),_0xc008('0x4a'),'set',_0xc008('0x4b')],_0x28bc33[_0xc008('0x3e')]['toLowerCase']())){channels[_0x28bc33[_0xc008('0x8')]][_0xc008('0x4c')]=_0x28bc33['application'];channels[_0x28bc33['uniqueid']][_0xc008('0x38')]=_0x28bc33[_0xc008('0x42')];}}}catch(_0x20947b){utils[_0xc008('0x1b')](_0x20947b[_0xc008('0x1c')]);}};
\ No newline at end of file
+var _0xf746=['channelstate','transfer','answertime','toNumber','hangup','\x22\x20<','endtime','duration','diffTime','starttime','billableseconds','attendedtransfer','localtwolinkedid','destinationchannel','secondtransfererchannel','userfield','_attended','musiconholdstart','musiconholdstartAt','variable','xmd-originatecalleridnum','source','value','xmd-phone','xmd-callerid-preview','xmd-callerid','xmd-queue','lastapplication','Queue','lastdata','queue','xmd-contactid','ContactId','outboundrouteid','sipcallid','newexten','application','toLowerCase','set','startsWith','appdata','split','substring','lastIndexOf','includes','noop','execif','gotoif','util','./utils','NO\x20ANSWER','FAILED','ANSWERED','BUSY','info','format','channel','type','destination','callerid','disposition','accountcode','getUserByInternal','then','request','uniqueid','newchannel','linkedid','calleridnum','exten','context','error','stack','isNil','systemanswertime','now'];(function(_0x3bf83f,_0x181cac){var _0x22c4a9=function(_0xb3ff0d){while(--_0xb3ff0d){_0x3bf83f['push'](_0x3bf83f['shift']());}};_0x22c4a9(++_0x181cac);}(_0xf746,0x114));var _0x6f74=function(_0x22f8ab,_0x15d8ff){_0x22f8ab=_0x22f8ab-0x0;var _0x2a70e5=_0xf746[_0x22f8ab];return _0x2a70e5;};'use strict';var _=require('lodash');var util=require(_0x6f74('0x0'));var utils=require(_0x6f74('0x1'));var dispositions=[_0x6f74('0x2'),_0x6f74('0x3'),_0x6f74('0x3'),_0x6f74('0x2'),_0x6f74('0x2'),'NO\x20ANSWER',_0x6f74('0x4'),_0x6f74('0x5'),_0x6f74('0x3'),_0x6f74('0x3'),_0x6f74('0x3')];var channels={};function writeDB(_0x3c32b2){utils[_0x6f74('0x6')](util[_0x6f74('0x7')]('CALL|%s|%s|%s|%s|%s|%s|%s|%s',_0x3c32b2['uniqueid'],_0x3c32b2[_0x6f74('0x8')],_0x3c32b2[_0x6f74('0x9')],_0x3c32b2['accountcode'],_0x3c32b2['source'],_0x3c32b2[_0x6f74('0xa')],_0x3c32b2[_0x6f74('0xb')],_0x3c32b2[_0x6f74('0xc')]));if(_0x3c32b2[_0x6f74('0xd')]){utils[_0x6f74('0xe')](_0x3c32b2['accountcode'])[_0x6f74('0xf')](function(_0x46380d){if(_0x46380d){_0x3c32b2['UserId']=_0x46380d['id'];}utils[_0x6f74('0x10')]('CreateVoiceCallReport',_0x3c32b2);});}else{utils[_0x6f74('0x10')]('CreateVoiceCallReport',_0x3c32b2);}if(channels[_0x3c32b2[_0x6f74('0x11')]]){delete channels[_0x3c32b2[_0x6f74('0x11')]];}}exports[_0x6f74('0x12')]=function(_0x5e5231){try{if(_0x5e5231[_0x6f74('0x11')]==_0x5e5231[_0x6f74('0x13')]){channels[_0x5e5231[_0x6f74('0x11')]]={'uniqueid':_0x5e5231[_0x6f74('0x11')],'accountcode':_0x5e5231[_0x6f74('0xd')],'source':_0x5e5231[_0x6f74('0x14')],'destination':_0x5e5231[_0x6f74('0x15')],'destinationcontext':_0x5e5231[_0x6f74('0x16')],'channel':_0x5e5231[_0x6f74('0x8')],'starttime':utils['now'](),'answertime':null,'systemanswertime':null,'mohtime':0x0,'disposition':'NO\x20ANSWER','amaflags':'DOCUMENTATION'};}}catch(_0x541eed){utils[_0x6f74('0x17')](_0x541eed[_0x6f74('0x18')]);}};exports['newstate']=function(_0x3c89b0){try{if(!_[_0x6f74('0x19')](channels[_0x3c89b0[_0x6f74('0x11')]])&&_0x3c89b0['channelstate']==0x6){if(_[_0x6f74('0x19')](channels[_0x3c89b0['uniqueid']][_0x6f74('0x1a')])){channels[_0x3c89b0[_0x6f74('0x11')]][_0x6f74('0x1a')]=utils[_0x6f74('0x1b')]();}}else if(!_[_0x6f74('0x19')](channels[_0x3c89b0[_0x6f74('0x13')]])&&_0x3c89b0[_0x6f74('0x1c')]==0x6&&_0x3c89b0['context']!=_0x6f74('0x1d')){channels[_0x3c89b0[_0x6f74('0x13')]][_0x6f74('0xd')]=_0x3c89b0[_0x6f74('0xd')];channels[_0x3c89b0[_0x6f74('0x13')]]['destinationchannel']=_0x3c89b0['channel'];if(_[_0x6f74('0x19')](channels[_0x3c89b0[_0x6f74('0x13')]]['answertime'])){channels[_0x3c89b0['linkedid']][_0x6f74('0x1e')]=utils[_0x6f74('0x1b')]();}channels[_0x3c89b0[_0x6f74('0x13')]][_0x6f74('0xc')]=dispositions[_[_0x6f74('0x1f')](_0x3c89b0['channelstate'])]||_0x6f74('0x4');}}catch(_0x38d61d){utils[_0x6f74('0x17')](_0x38d61d['stack']);}};exports[_0x6f74('0x20')]=function(_0x186592){try{if(!_[_0x6f74('0x19')](channels[_0x186592['uniqueid']])){channels[_0x186592['uniqueid']][_0x6f74('0xb')]='\x22'+_0x186592[_0x6f74('0x14')]+_0x6f74('0x21')+_0x186592['calleridname']+'>';channels[_0x186592[_0x6f74('0x11')]][_0x6f74('0x22')]=utils[_0x6f74('0x1b')]();channels[_0x186592['uniqueid']][_0x6f74('0x23')]=utils[_0x6f74('0x24')](channels[_0x186592[_0x6f74('0x11')]][_0x6f74('0x22')],channels[_0x186592[_0x6f74('0x11')]][_0x6f74('0x25')]);channels[_0x186592[_0x6f74('0x11')]][_0x6f74('0x26')]=channels[_0x186592[_0x6f74('0x11')]]['answertime']?utils[_0x6f74('0x24')](channels[_0x186592[_0x6f74('0x11')]][_0x6f74('0x22')],channels[_0x186592['uniqueid']][_0x6f74('0x1e')]):0x0;writeDB(channels[_0x186592[_0x6f74('0x11')]]);}}catch(_0x487fb6){utils['error'](_0x487fb6[_0x6f74('0x18')]);}};exports[_0x6f74('0x27')]=function(_0xcc3856){try{if(!_[_0x6f74('0x19')](channels[_0xcc3856[_0x6f74('0x28')]])){if(channels[_0xcc3856['localtwolinkedid']][_0x6f74('0x8')]==_0xcc3856['transfereechannel']){channels[_0xcc3856['localtwolinkedid']][_0x6f74('0x29')]=_0xcc3856[_0x6f74('0x2a')];channels[_0xcc3856[_0x6f74('0x28')]][_0x6f74('0x2b')]=_0x6f74('0x2c');}else if(channels[_0xcc3856['localtwolinkedid']]['channel']=_0xcc3856['transfertargetchannel']){channels[_0xcc3856[_0x6f74('0x28')]]['destinationchannel']=_0xcc3856['origtransfererchannel'];channels[_0xcc3856[_0x6f74('0x28')]][_0x6f74('0x2b')]=_0x6f74('0x2c');}}}catch(_0xdc6169){utils[_0x6f74('0x17')](_0xdc6169[_0x6f74('0x18')]);}};exports[_0x6f74('0x2d')]=function(_0xe00ae5){try{if(!_['isNil'](channels[_0xe00ae5['uniqueid']])){channels[_0xe00ae5['uniqueid']][_0x6f74('0x2e')]=utils[_0x6f74('0x1b')]();}}catch(_0x117347){utils[_0x6f74('0x17')](_0x117347['stack']);}};exports['musiconholdstop']=function(_0x55bc39){try{if(!_[_0x6f74('0x19')](channels[_0x55bc39[_0x6f74('0x11')]])){if(!_[_0x6f74('0x19')](channels[_0x55bc39[_0x6f74('0x11')]][_0x6f74('0x2e')])){channels[_0x55bc39[_0x6f74('0x11')]]['mohtime']+=utils[_0x6f74('0x24')](utils[_0x6f74('0x1b')](),channels[_0x55bc39[_0x6f74('0x11')]][_0x6f74('0x2e')]);delete channels[_0x55bc39[_0x6f74('0x11')]][_0x6f74('0x2e')];}}}catch(_0x2b8c62){utils[_0x6f74('0x17')](_0x2b8c62[_0x6f74('0x18')]);}};exports['varset']=function(_0x153aaa){try{if(!_[_0x6f74('0x19')](channels[_0x153aaa[_0x6f74('0x11')]])){if(!_[_0x6f74('0x19')](_0x153aaa[_0x6f74('0x2f')][_0x6f74('0x30')])){channels[_0x153aaa['uniqueid']][_0x6f74('0x31')]=_0x153aaa[_0x6f74('0x32')];}if(!_['isNil'](_0x153aaa[_0x6f74('0x2f')][_0x6f74('0x33')])){channels[_0x153aaa['uniqueid']][_0x6f74('0xa')]=_0x153aaa[_0x6f74('0x32')];}if(!_[_0x6f74('0x19')](_0x153aaa[_0x6f74('0x2f')][_0x6f74('0x34')])||!_[_0x6f74('0x19')](_0x153aaa[_0x6f74('0x2f')][_0x6f74('0x35')])){channels[_0x153aaa[_0x6f74('0x11')]]['callerid']=_0x153aaa[_0x6f74('0x32')];}if(!_['isNil'](_0x153aaa[_0x6f74('0x2f')][_0x6f74('0x36')])){channels[_0x153aaa[_0x6f74('0x11')]][_0x6f74('0x37')]=_0x6f74('0x38');channels[_0x153aaa[_0x6f74('0x11')]][_0x6f74('0x39')]=_0x153aaa[_0x6f74('0x32')];channels[_0x153aaa[_0x6f74('0x11')]][_0x6f74('0x3a')]=!![];}if(!_[_0x6f74('0x19')](_0x153aaa[_0x6f74('0x2f')][_0x6f74('0x3b')])){channels[_0x153aaa[_0x6f74('0x11')]][_0x6f74('0x3c')]=_0x153aaa[_0x6f74('0x32')];}if(!_[_0x6f74('0x19')](_0x153aaa[_0x6f74('0x2f')][_0x6f74('0x3d')])){channels[_0x153aaa[_0x6f74('0x11')]]['routeid']=_0x153aaa[_0x6f74('0x32')];}if(!_[_0x6f74('0x19')](_0x153aaa[_0x6f74('0x2f')][_0x6f74('0x3e')])){channels[_0x153aaa['uniqueid']]['sipcallid']=_0x153aaa[_0x6f74('0x32')];}}}catch(_0x5996b5){utils[_0x6f74('0x17')](_0x5996b5[_0x6f74('0x18')]);}};exports[_0x6f74('0x3f')]=function(_0x48a46c){try{if(!_[_0x6f74('0x19')](channels[_0x48a46c['uniqueid']])){if(_0x48a46c[_0x6f74('0x40')][_0x6f74('0x41')]()==_0x6f74('0x42')&&_[_0x6f74('0x43')](_0x48a46c['appdata']['toLowerCase'](),'cdr')){var _0x24f5a8=_0x48a46c[_0x6f74('0x44')][_0x6f74('0x45')]('=');var _0x5a0c56=_0x24f5a8[0x0][_0x6f74('0x46')](_0x24f5a8[0x0][_0x6f74('0x47')]('(')+0x1,_0x24f5a8[0x0][_0x6f74('0x47')](')'));var _0x20ec3d=_0x24f5a8[0x1];channels[_0x48a46c[_0x6f74('0x11')]][_0x5a0c56]=_0x20ec3d;}if(!_[_0x6f74('0x48')]([_0x6f74('0x20'),_0x6f74('0x49'),_0x6f74('0x4a'),'set',_0x6f74('0x4b')],_0x48a46c[_0x6f74('0x40')][_0x6f74('0x41')]())){channels[_0x48a46c['uniqueid']][_0x6f74('0x37')]=_0x48a46c['application'];channels[_0x48a46c[_0x6f74('0x11')]][_0x6f74('0x39')]=_0x48a46c['appdata'];}}}catch(_0x138bf){utils[_0x6f74('0x17')](_0x138bf['stack']);}};
\ No newline at end of file
index cc8ead0..58dd4b2 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x4f0d=['shutdown','info','SHUTDOWN','close','managerevent'];(function(_0x55599e,_0x35e6bd){var _0x5b05d9=function(_0x157585){while(--_0x157585){_0x55599e['push'](_0x55599e['shift']());}};_0x5b05d9(++_0x35e6bd);}(_0x4f0d,0x1c2));var _0xd4f0=function(_0x59b533,_0x59fdcc){_0x59b533=_0x59b533-0x0;var _0x2beced=_0x4f0d[_0x59b533];return _0x2beced;};'use strict';var utils=require('./utils');var _=require('lodash');exports['connect']=function(){utils['info']('CONNECTED');};exports[_0xd4f0('0x0')]=function(){utils[_0xd4f0('0x1')](_0xd4f0('0x2'));};exports['fullybooted']=function(){utils[_0xd4f0('0x1')]('FULLYBOOTED');};exports['error']=function(_0x1809dd){utils['error'](_0x1809dd);};exports[_0xd4f0('0x3')]=function(){utils[_0xd4f0('0x1')]('CLOSE');};exports[_0xd4f0('0x4')]=function(_0x69309d){};
\ No newline at end of file
+var _0xae30=['CLOSE','managerevent','./utils','lodash','connect','CONNECTED','shutdown','info','SHUTDOWN','FULLYBOOTED','error','close'];(function(_0xa9b553,_0x19494a){var _0x5b8b62=function(_0x307894){while(--_0x307894){_0xa9b553['push'](_0xa9b553['shift']());}};_0x5b8b62(++_0x19494a);}(_0xae30,0x10a));var _0x0ae3=function(_0x5bf46c,_0x1fe508){_0x5bf46c=_0x5bf46c-0x0;var _0x5a37c4=_0xae30[_0x5bf46c];return _0x5a37c4;};'use strict';var utils=require(_0x0ae3('0x0'));var _=require(_0x0ae3('0x1'));exports[_0x0ae3('0x2')]=function(){utils['info'](_0x0ae3('0x3'));};exports[_0x0ae3('0x4')]=function(){utils[_0x0ae3('0x5')](_0x0ae3('0x6'));};exports['fullybooted']=function(){utils[_0x0ae3('0x5')](_0x0ae3('0x7'));};exports[_0x0ae3('0x8')]=function(_0x7ce33e){utils[_0x0ae3('0x8')](_0x7ce33e);};exports[_0x0ae3('0x9')]=function(){utils[_0x0ae3('0x5')](_0x0ae3('0xa'));};exports[_0x0ae3('0xb')]=function(_0x34e783){};
\ No newline at end of file
index 7164997..c980b76 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xf1d4=['starttime','now','lastevent','called','dialend','assign','answertime','connect','hangup','complete','duration','diffTime','endtime','holdtime','billableseconds','lodash','util','./utils','info','format','uniqueid','channel','dialstring','calleridnum','dialstatus','request','CreateVoiceDialReport','newexten','application','toLowerCase','set','startsWith','appdata','cdr(routeid)','error','stack','varset','isNil','variable','outboundrouteid'];(function(_0x86b219,_0x43038f){var _0x1f320c=function(_0x8cd63f){while(--_0x8cd63f){_0x86b219['push'](_0x86b219['shift']());}};_0x1f320c(++_0x43038f);}(_0xf1d4,0x177));var _0x4f1d=function(_0x220b48,_0x450c83){_0x220b48=_0x220b48-0x0;var _0x3ec899=_0xf1d4[_0x220b48];return _0x3ec899;};'use strict';var _=require(_0x4f1d('0x0'));var util=require(_0x4f1d('0x1'));var utils=require(_0x4f1d('0x2'));var dials={};function writeDB(_0x1bab2f){utils[_0x4f1d('0x3')](util[_0x4f1d('0x4')]('DIAL|%s|%s|%s|%s|%s|%s',_0x1bab2f[_0x4f1d('0x5')],_0x1bab2f[_0x4f1d('0x6')],_0x1bab2f[_0x4f1d('0x7')],_0x1bab2f[_0x4f1d('0x8')],_0x1bab2f['connectedlinenum'],_0x1bab2f[_0x4f1d('0x9')]));utils[_0x4f1d('0xa')](_0x4f1d('0xb'),_0x1bab2f);delete dials[_0x1bab2f[_0x4f1d('0x5')]];}exports[_0x4f1d('0xc')]=function(_0x3b5c6e){try{if(_0x3b5c6e[_0x4f1d('0xd')][_0x4f1d('0xe')]()==_0x4f1d('0xf')&&_[_0x4f1d('0x10')](_0x3b5c6e[_0x4f1d('0x11')]['toLowerCase'](),_0x4f1d('0x12'))){var _0x302691=_0x3b5c6e[_0x4f1d('0x11')]['split']('=');dials[_0x3b5c6e[_0x4f1d('0x5')]]={'routeId':_0x302691[0x1]};}}catch(_0xf0f674){utils[_0x4f1d('0x13')](_0xf0f674[_0x4f1d('0x14')]);}};exports[_0x4f1d('0x15')]=function(_0x56430a){try{if(!_[_0x4f1d('0x16')](_0x56430a[_0x4f1d('0x17')][_0x4f1d('0x18')])){dials[_0x56430a[_0x4f1d('0x5')]]={'routeId':_0x56430a['value']};}}catch(_0x31e8b6){utils['error'](_0x31e8b6[_0x4f1d('0x14')]);}};exports['dialbegin']=function(_0x45e413){try{if(!_[_0x4f1d('0x16')](dials[_0x45e413[_0x4f1d('0x5')]])){dials[_0x45e413[_0x4f1d('0x5')]]=_['assign'](dials[_0x45e413[_0x4f1d('0x5')]],_0x45e413);dials[_0x45e413[_0x4f1d('0x5')]][_0x4f1d('0x19')]=utils[_0x4f1d('0x1a')]();dials[_0x45e413['uniqueid']][_0x4f1d('0x1b')]=_0x4f1d('0x1c');}}catch(_0x35c41a){utils[_0x4f1d('0x13')](_0x35c41a['stack']);}};exports[_0x4f1d('0x1d')]=function(_0x15fd17){try{if(!_[_0x4f1d('0x16')](dials[_0x15fd17[_0x4f1d('0x5')]])){dials[_0x15fd17[_0x4f1d('0x5')]]['dialstatus']=_0x15fd17[_0x4f1d('0x9')];if(_0x15fd17[_0x4f1d('0x9')]=='ANSWER'){dials[_0x15fd17[_0x4f1d('0x5')]]=_[_0x4f1d('0x1e')](dials[_0x15fd17[_0x4f1d('0x5')]],_0x15fd17);dials[_0x15fd17[_0x4f1d('0x5')]][_0x4f1d('0x1f')]=utils[_0x4f1d('0x1a')]();dials[_0x15fd17['uniqueid']][_0x4f1d('0x1b')]=_0x4f1d('0x20');}}}catch(_0x321510){utils['error'](_0x321510[_0x4f1d('0x14')]);}};exports[_0x4f1d('0x21')]=function(_0x3d136a){try{if(!_['isNil'](dials[_0x3d136a['uniqueid']])){dials[_0x3d136a[_0x4f1d('0x5')]]=_[_0x4f1d('0x1e')](dials[_0x3d136a[_0x4f1d('0x5')]],{'endtime':utils[_0x4f1d('0x1a')](),'lastevent':_0x4f1d('0x22')});dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x23')]=utils[_0x4f1d('0x24')](dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x25')],dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x19')]);dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x26')]=utils[_0x4f1d('0x24')](dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x1f')]||dials[_0x3d136a['uniqueid']][_0x4f1d('0x25')],dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x19')]);dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x27')]=dials[_0x3d136a['uniqueid']][_0x4f1d('0x1f')]?utils[_0x4f1d('0x24')](dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x25')],dials[_0x3d136a[_0x4f1d('0x5')]][_0x4f1d('0x1f')]):0x0;writeDB(dials[_0x3d136a['uniqueid']]);}}catch(_0x2b2b8b){utils['error'](_0x2b2b8b[_0x4f1d('0x14')]);}};
\ No newline at end of file
+var _0xb413=['lastevent','called','ANSWER','answertime','now','connect','hangup','complete','duration','diffTime','starttime','lodash','./utils','info','format','DIAL|%s|%s|%s|%s|%s|%s','uniqueid','channel','dialstring','connectedlinenum','dialstatus','request','CreateVoiceDialReport','newexten','application','toLowerCase','set','startsWith','appdata','split','stack','variable','outboundrouteid','value','error','isNil','assign'];(function(_0x3fe393,_0x3532ea){var _0x2886a2=function(_0xcec57b){while(--_0xcec57b){_0x3fe393['push'](_0x3fe393['shift']());}};_0x2886a2(++_0x3532ea);}(_0xb413,0x158));var _0x3b41=function(_0x2da961,_0x1ab7db){_0x2da961=_0x2da961-0x0;var _0x5299d7=_0xb413[_0x2da961];return _0x5299d7;};'use strict';var _=require(_0x3b41('0x0'));var util=require('util');var utils=require(_0x3b41('0x1'));var dials={};function writeDB(_0x246ad3){utils[_0x3b41('0x2')](util[_0x3b41('0x3')](_0x3b41('0x4'),_0x246ad3[_0x3b41('0x5')],_0x246ad3[_0x3b41('0x6')],_0x246ad3[_0x3b41('0x7')],_0x246ad3['calleridnum'],_0x246ad3[_0x3b41('0x8')],_0x246ad3[_0x3b41('0x9')]));utils[_0x3b41('0xa')](_0x3b41('0xb'),_0x246ad3);delete dials[_0x246ad3['uniqueid']];}exports[_0x3b41('0xc')]=function(_0x589dab){try{if(_0x589dab[_0x3b41('0xd')][_0x3b41('0xe')]()==_0x3b41('0xf')&&_[_0x3b41('0x10')](_0x589dab[_0x3b41('0x11')][_0x3b41('0xe')](),'cdr(routeid)')){var _0x4de420=_0x589dab[_0x3b41('0x11')][_0x3b41('0x12')]('=');dials[_0x589dab[_0x3b41('0x5')]]={'routeId':_0x4de420[0x1]};}}catch(_0x4de03e){utils['error'](_0x4de03e[_0x3b41('0x13')]);}};exports['varset']=function(_0x4d3e7c){try{if(!_['isNil'](_0x4d3e7c[_0x3b41('0x14')][_0x3b41('0x15')])){dials[_0x4d3e7c[_0x3b41('0x5')]]={'routeId':_0x4d3e7c[_0x3b41('0x16')]};}}catch(_0x2bdfdf){utils[_0x3b41('0x17')](_0x2bdfdf[_0x3b41('0x13')]);}};exports['dialbegin']=function(_0x314646){try{if(!_[_0x3b41('0x18')](dials[_0x314646['uniqueid']])){dials[_0x314646[_0x3b41('0x5')]]=_[_0x3b41('0x19')](dials[_0x314646['uniqueid']],_0x314646);dials[_0x314646[_0x3b41('0x5')]]['starttime']=utils['now']();dials[_0x314646[_0x3b41('0x5')]][_0x3b41('0x1a')]=_0x3b41('0x1b');}}catch(_0x45b0fc){utils[_0x3b41('0x17')](_0x45b0fc[_0x3b41('0x13')]);}};exports['dialend']=function(_0x360e69){try{if(!_[_0x3b41('0x18')](dials[_0x360e69[_0x3b41('0x5')]])){dials[_0x360e69[_0x3b41('0x5')]][_0x3b41('0x9')]=_0x360e69['dialstatus'];if(_0x360e69[_0x3b41('0x9')]==_0x3b41('0x1c')){dials[_0x360e69[_0x3b41('0x5')]]=_[_0x3b41('0x19')](dials[_0x360e69[_0x3b41('0x5')]],_0x360e69);dials[_0x360e69['uniqueid']][_0x3b41('0x1d')]=utils[_0x3b41('0x1e')]();dials[_0x360e69[_0x3b41('0x5')]][_0x3b41('0x1a')]=_0x3b41('0x1f');}}}catch(_0x1cc63e){utils['error'](_0x1cc63e['stack']);}};exports[_0x3b41('0x20')]=function(_0x449965){try{if(!_['isNil'](dials[_0x449965[_0x3b41('0x5')]])){dials[_0x449965['uniqueid']]=_[_0x3b41('0x19')](dials[_0x449965['uniqueid']],{'endtime':utils[_0x3b41('0x1e')](),'lastevent':_0x3b41('0x21')});dials[_0x449965[_0x3b41('0x5')]][_0x3b41('0x22')]=utils[_0x3b41('0x23')](dials[_0x449965['uniqueid']]['endtime'],dials[_0x449965[_0x3b41('0x5')]]['starttime']);dials[_0x449965[_0x3b41('0x5')]]['holdtime']=utils[_0x3b41('0x23')](dials[_0x449965[_0x3b41('0x5')]][_0x3b41('0x1d')]||dials[_0x449965['uniqueid']]['endtime'],dials[_0x449965[_0x3b41('0x5')]][_0x3b41('0x24')]);dials[_0x449965[_0x3b41('0x5')]]['billableseconds']=dials[_0x449965['uniqueid']][_0x3b41('0x1d')]?utils[_0x3b41('0x23')](dials[_0x449965[_0x3b41('0x5')]]['endtime'],dials[_0x449965[_0x3b41('0x5')]][_0x3b41('0x1d')]):0x0;writeDB(dials[_0x449965['uniqueid']]);}}catch(_0x508f33){utils[_0x3b41('0x17')](_0x508f33['stack']);}};
\ No newline at end of file
index 149c107..b94bebb 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xd8b0=['newexten','newchannel','dialbegin','asterisk-manager','../../config/environment','./recordings.controller','./members.controller','./dials.controller','./transfers.controller','./core.controller','port','asterisk','password','connect','shutdown','fullybooted','error','close','managerevent','devicestatechange','agentcalled','agentringnoanswer','agentconnect','agentcomplete','queuecallerabandon','queuecallerjoin','musiconholdstart','musiconholdstop','newstate','hangup','cdr','blindtransfer','attendedtransfer','varset'];(function(_0x476bf4,_0x2a3755){var _0x788ffe=function(_0x13fa11){while(--_0x13fa11){_0x476bf4['push'](_0x476bf4['shift']());}};_0x788ffe(++_0x2a3755);}(_0xd8b0,0xad));var _0x0d8b=function(_0x20a584,_0xe384a5){_0x20a584=_0x20a584-0x0;var _0x4b41a8=_0xd8b0[_0x20a584];return _0x4b41a8;};var AsteriskManager=require(_0x0d8b('0x0'));var config=require(_0x0d8b('0x1'));var agents=require('./agents.controller');var calls=require('./calls.controller');var queues=require('./queues.controller');var recordings=require(_0x0d8b('0x2'));var members=require(_0x0d8b('0x3'));var dials=require(_0x0d8b('0x4'));var transfers=require(_0x0d8b('0x5'));var core=require(_0x0d8b('0x6'));var utils=require('./utils');var ami=new AsteriskManager(config['asterisk'][_0x0d8b('0x7')],config[_0x0d8b('0x8')]['ip'],config[_0x0d8b('0x8')]['username'],config[_0x0d8b('0x8')][_0x0d8b('0x9')],!![]);ami['keepConnected']();ami['on'](_0x0d8b('0xa'),core[_0x0d8b('0xa')]);ami['on'](_0x0d8b('0xb'),core[_0x0d8b('0xb')]);ami['on'](_0x0d8b('0xc'),core[_0x0d8b('0xc')]);ami['on'](_0x0d8b('0xd'),core[_0x0d8b('0xd')]);ami['on']('close',core[_0x0d8b('0xe')]);ami['on']('managerevent',core[_0x0d8b('0xf')]);ami['on'](_0x0d8b('0x10'),function(_0x340cc4){try{members[_0x0d8b('0x10')](_0x340cc4);}catch(_0x35a07b){utils[_0x0d8b('0xd')](_0x35a07b);}});ami['on'](_0x0d8b('0x11'),function(_0x31a8cc){try{agents[_0x0d8b('0x11')](_0x31a8cc);}catch(_0x2ce75e){utils[_0x0d8b('0xd')](_0x2ce75e);}});ami['on'](_0x0d8b('0x12'),function(_0x1567ce){try{agents[_0x0d8b('0x12')](_0x1567ce);}catch(_0x4f6f21){utils[_0x0d8b('0xd')](_0x4f6f21);}});ami['on'](_0x0d8b('0x13'),function(_0x17f7df){try{agents[_0x0d8b('0x13')](_0x17f7df);queues[_0x0d8b('0x13')](_0x17f7df);}catch(_0x5cd485){utils[_0x0d8b('0xd')](_0x5cd485);}});ami['on'](_0x0d8b('0x14'),function(_0x2fd0fc){try{agents[_0x0d8b('0x14')](_0x2fd0fc);queues[_0x0d8b('0x14')](_0x2fd0fc);members[_0x0d8b('0x14')](_0x2fd0fc);}catch(_0x264b39){utils[_0x0d8b('0xd')](_0x264b39);}});ami['on']('queuecallerabandon',function(_0x27512e){try{agents[_0x0d8b('0x15')](_0x27512e);queues[_0x0d8b('0x15')](_0x27512e);}catch(_0x143372){utils[_0x0d8b('0xd')](_0x143372);}});ami['on'](_0x0d8b('0x16'),function(_0x393beb){try{queues[_0x0d8b('0x16')](_0x393beb);recordings['queuecallerjoin'](_0x393beb);}catch(_0x4f0a1a){utils[_0x0d8b('0xd')](_0x4f0a1a);}});ami['on']('queuecallerleave',function(_0x56c729){try{queues['queuecallerleave'](_0x56c729);}catch(_0x238728){utils[_0x0d8b('0xd')](_0x238728);}});ami['on'](_0x0d8b('0x17'),function(_0x38efc8){try{queues[_0x0d8b('0x17')](_0x38efc8);calls[_0x0d8b('0x17')](_0x38efc8);}catch(_0x30980c){utils[_0x0d8b('0xd')](_0x30980c);}});ami['on'](_0x0d8b('0x18'),function(_0x5e5bc3){try{queues[_0x0d8b('0x18')](_0x5e5bc3);calls[_0x0d8b('0x18')](_0x5e5bc3);}catch(_0x5363e3){utils[_0x0d8b('0xd')](_0x5363e3);}});ami['on']('newstate',function(_0x3dd149){try{calls[_0x0d8b('0x19')](_0x3dd149);recordings[_0x0d8b('0x19')](_0x3dd149);}catch(_0x4fe6f9){utils['error'](_0x4fe6f9);}});ami['on'](_0x0d8b('0x1a'),function(_0x3ef745){try{calls['hangup'](_0x3ef745);recordings[_0x0d8b('0x1a')](_0x3ef745);dials['hangup'](_0x3ef745);agents[_0x0d8b('0x1a')](_0x3ef745);queues['hangup'](_0x3ef745);}catch(_0x97050a){utils['error'](_0x97050a);}});ami['on'](_0x0d8b('0x1b'),function(_0x546bf6){try{members[_0x0d8b('0x1b')](_0x546bf6);}catch(_0x544735){utils[_0x0d8b('0xd')](_0x544735);}});ami['on'](_0x0d8b('0x1c'),function(_0x2c058d){try{queues['blindtransfer'](_0x2c058d);agents['blindtransfer'](_0x2c058d);transfers['blindtransfer'](_0x2c058d);}catch(_0x4e8992){utils['error'](_0x4e8992);}});ami['on'](_0x0d8b('0x1d'),function(_0x54f6f3){try{queues['attendedtransfer'](_0x54f6f3);transfers[_0x0d8b('0x1d')](_0x54f6f3);agents[_0x0d8b('0x1d')](_0x54f6f3);calls[_0x0d8b('0x1d')](_0x54f6f3);}catch(_0xdeee5d){utils[_0x0d8b('0xd')](_0xdeee5d);}});ami['on'](_0x0d8b('0x1e'),function(_0x4a99d3){try{queues[_0x0d8b('0x1e')](_0x4a99d3);recordings['varset'](_0x4a99d3);calls[_0x0d8b('0x1e')](_0x4a99d3);dials[_0x0d8b('0x1e')](_0x4a99d3);}catch(_0x4b3ea0){utils[_0x0d8b('0xd')](_0x4b3ea0);}});ami['on'](_0x0d8b('0x1f'),function(_0x18a905){try{calls['newexten'](_0x18a905);recordings[_0x0d8b('0x1f')](_0x18a905);dials[_0x0d8b('0x1f')](_0x18a905);}catch(_0x206157){utils[_0x0d8b('0xd')](_0x206157);}});ami['on'](_0x0d8b('0x20'),function(_0x55d742){try{calls[_0x0d8b('0x20')](_0x55d742);recordings[_0x0d8b('0x20')](_0x55d742);}catch(_0x5ad0fe){utils[_0x0d8b('0xd')](_0x5ad0fe);}});ami['on'](_0x0d8b('0x21'),function(_0x188af2){try{dials[_0x0d8b('0x21')](_0x188af2);}catch(_0x373544){utils['error'](_0x373544);}});ami['on']('dialend',function(_0x41b4f9){try{dials['dialend'](_0x41b4f9);}catch(_0x531c55){utils[_0x0d8b('0xd')](_0x531c55);}});
\ No newline at end of file
+var _0x5f66=['./members.controller','./dials.controller','./core.controller','asterisk','port','username','password','keepConnected','connect','fullybooted','error','close','devicestatechange','agentcalled','agentringnoanswer','agentconnect','agentcomplete','queuecallerabandon','queuecallerjoin','queuecallerleave','musiconholdstart','musiconholdstop','newstate','hangup','cdr','blindtransfer','attendedtransfer','varset','newexten','newchannel','dialbegin','../../config/environment','./calls.controller','./queues.controller','./recordings.controller'];(function(_0x40b3f2,_0x2c4f5f){var _0x4ce90c=function(_0x516f31){while(--_0x516f31){_0x40b3f2['push'](_0x40b3f2['shift']());}};_0x4ce90c(++_0x2c4f5f);}(_0x5f66,0x1a0));var _0x65f6=function(_0x21a9d9,_0x4d5ac8){_0x21a9d9=_0x21a9d9-0x0;var _0x46adce=_0x5f66[_0x21a9d9];return _0x46adce;};var AsteriskManager=require('asterisk-manager');var config=require(_0x65f6('0x0'));var agents=require('./agents.controller');var calls=require(_0x65f6('0x1'));var queues=require(_0x65f6('0x2'));var recordings=require(_0x65f6('0x3'));var members=require(_0x65f6('0x4'));var dials=require(_0x65f6('0x5'));var transfers=require('./transfers.controller');var core=require(_0x65f6('0x6'));var utils=require('./utils');var ami=new AsteriskManager(config[_0x65f6('0x7')][_0x65f6('0x8')],config['asterisk']['ip'],config['asterisk'][_0x65f6('0x9')],config[_0x65f6('0x7')][_0x65f6('0xa')],!![]);ami[_0x65f6('0xb')]();ami['on'](_0x65f6('0xc'),core[_0x65f6('0xc')]);ami['on']('shutdown',core['shutdown']);ami['on'](_0x65f6('0xd'),core[_0x65f6('0xd')]);ami['on'](_0x65f6('0xe'),core[_0x65f6('0xe')]);ami['on']('close',core[_0x65f6('0xf')]);ami['on']('managerevent',core['managerevent']);ami['on'](_0x65f6('0x10'),function(_0x576875){try{members[_0x65f6('0x10')](_0x576875);}catch(_0x4862a5){utils[_0x65f6('0xe')](_0x4862a5);}});ami['on'](_0x65f6('0x11'),function(_0x2c4ee5){try{agents[_0x65f6('0x11')](_0x2c4ee5);}catch(_0x369f96){utils[_0x65f6('0xe')](_0x369f96);}});ami['on'](_0x65f6('0x12'),function(_0xb1d40a){try{agents[_0x65f6('0x12')](_0xb1d40a);}catch(_0x3440af){utils['error'](_0x3440af);}});ami['on'](_0x65f6('0x13'),function(_0x49a913){try{agents['agentconnect'](_0x49a913);queues[_0x65f6('0x13')](_0x49a913);}catch(_0x5c69f8){utils[_0x65f6('0xe')](_0x5c69f8);}});ami['on'](_0x65f6('0x14'),function(_0x1b1cbb){try{agents[_0x65f6('0x14')](_0x1b1cbb);queues[_0x65f6('0x14')](_0x1b1cbb);members[_0x65f6('0x14')](_0x1b1cbb);}catch(_0x495dd6){utils['error'](_0x495dd6);}});ami['on'](_0x65f6('0x15'),function(_0x5b4055){try{agents['queuecallerabandon'](_0x5b4055);queues['queuecallerabandon'](_0x5b4055);}catch(_0x365159){utils[_0x65f6('0xe')](_0x365159);}});ami['on']('queuecallerjoin',function(_0x39e19f){try{queues[_0x65f6('0x16')](_0x39e19f);recordings[_0x65f6('0x16')](_0x39e19f);}catch(_0x3876ed){utils[_0x65f6('0xe')](_0x3876ed);}});ami['on'](_0x65f6('0x17'),function(_0x581374){try{queues[_0x65f6('0x17')](_0x581374);}catch(_0x4bb39e){utils['error'](_0x4bb39e);}});ami['on'](_0x65f6('0x18'),function(_0xd173f4){try{queues['musiconholdstart'](_0xd173f4);calls[_0x65f6('0x18')](_0xd173f4);}catch(_0x471a33){utils[_0x65f6('0xe')](_0x471a33);}});ami['on'](_0x65f6('0x19'),function(_0x4f5a69){try{queues[_0x65f6('0x19')](_0x4f5a69);calls[_0x65f6('0x19')](_0x4f5a69);}catch(_0x20a161){utils['error'](_0x20a161);}});ami['on']('newstate',function(_0x4fde2f){try{calls[_0x65f6('0x1a')](_0x4fde2f);recordings[_0x65f6('0x1a')](_0x4fde2f);}catch(_0x4b2292){utils[_0x65f6('0xe')](_0x4b2292);}});ami['on'](_0x65f6('0x1b'),function(_0x52277c){try{calls[_0x65f6('0x1b')](_0x52277c);recordings[_0x65f6('0x1b')](_0x52277c);dials[_0x65f6('0x1b')](_0x52277c);agents['hangup'](_0x52277c);queues['hangup'](_0x52277c);}catch(_0x488d36){utils[_0x65f6('0xe')](_0x488d36);}});ami['on'](_0x65f6('0x1c'),function(_0x4344b3){try{members[_0x65f6('0x1c')](_0x4344b3);}catch(_0x518cac){utils[_0x65f6('0xe')](_0x518cac);}});ami['on'](_0x65f6('0x1d'),function(_0x4ace4c){try{queues['blindtransfer'](_0x4ace4c);agents[_0x65f6('0x1d')](_0x4ace4c);transfers[_0x65f6('0x1d')](_0x4ace4c);}catch(_0x5878bc){utils['error'](_0x5878bc);}});ami['on'](_0x65f6('0x1e'),function(_0x1ce43c){try{queues[_0x65f6('0x1e')](_0x1ce43c);transfers[_0x65f6('0x1e')](_0x1ce43c);agents[_0x65f6('0x1e')](_0x1ce43c);calls[_0x65f6('0x1e')](_0x1ce43c);}catch(_0x5792a0){utils[_0x65f6('0xe')](_0x5792a0);}});ami['on'](_0x65f6('0x1f'),function(_0x46f03c){try{queues['varset'](_0x46f03c);recordings[_0x65f6('0x1f')](_0x46f03c);calls[_0x65f6('0x1f')](_0x46f03c);dials[_0x65f6('0x1f')](_0x46f03c);}catch(_0x45510a){utils[_0x65f6('0xe')](_0x45510a);}});ami['on'](_0x65f6('0x20'),function(_0x4d4d84){try{calls[_0x65f6('0x20')](_0x4d4d84);recordings[_0x65f6('0x20')](_0x4d4d84);dials['newexten'](_0x4d4d84);}catch(_0x36dbf4){utils['error'](_0x36dbf4);}});ami['on'](_0x65f6('0x21'),function(_0x50494b){try{calls[_0x65f6('0x21')](_0x50494b);recordings[_0x65f6('0x21')](_0x50494b);}catch(_0x5ce050){utils[_0x65f6('0xe')](_0x5ce050);}});ami['on'](_0x65f6('0x22'),function(_0x3b261d){try{dials['dialbegin'](_0x3b261d);}catch(_0x582c7e){utils[_0x65f6('0xe')](_0x582c7e);}});ami['on']('dialend',function(_0x26de30){try{dials['dialend'](_0x26de30);}catch(_0x22d760){utils[_0x65f6('0xe')](_0x22d760);}});
\ No newline at end of file
index b7f4585..bed9974 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xc6d1=['CreateMemberReport','split','name','catch','devicestatechange','state','BUSY','device','voice','TALKING','now','agent','NOT_INUSE','isNil','exitAt','duration','diffTime','enterAt','agentcomplete','assign','queue','cdr','channel','source','data3','destination','destinationchannel','lodash','util','./utils','Queue:','MEMBER|%s|%s|%s|%s|%s|%s','uniqueid','interface','data2','membername','type','getUserByInterface','then','internal','request'];(function(_0x2bec94,_0x2e2a2e){var _0x3e0320=function(_0x4c43bf){while(--_0x4c43bf){_0x2bec94['push'](_0x2bec94['shift']());}};_0x3e0320(++_0x2e2a2e);}(_0xc6d1,0xbf));var _0x1c6d=function(_0x580576,_0x2f107d){_0x580576=_0x580576-0x0;var _0x3f55a0=_0xc6d1[_0x580576];return _0x3f55a0;};'use strict';var _=require(_0x1c6d('0x0'));var util=require(_0x1c6d('0x1'));var utils=require(_0x1c6d('0x2'));var members={};var exclude=['Local/_attended@transfer',_0x1c6d('0x3')];function writeDB(_0x360116){utils['info'](util['format'](_0x1c6d('0x4'),_0x360116[_0x1c6d('0x5')],_0x360116[_0x1c6d('0x6')],_0x360116['channel'],_0x360116[_0x1c6d('0x7')],_0x360116[_0x1c6d('0x8')],_0x360116[_0x1c6d('0x9')]));if(_0x360116[_0x1c6d('0x6')]){utils[_0x1c6d('0xa')](_0x360116[_0x1c6d('0x6')])[_0x1c6d('0xb')](function(_0x1681a4){if(_0x1681a4){_0x360116['membername']=_0x1681a4['name'];_0x360116[_0x1c6d('0xc')]=_0x1681a4[_0x1c6d('0xc')];utils[_0x1c6d('0xd')](_0x1c6d('0xe'),_0x360116);}else{utils['getUserByName'](_0x360116[_0x1c6d('0x6')][_0x1c6d('0xf')]('/')[0x1])[_0x1c6d('0xb')](function(_0x5a6cf6){if(_0x5a6cf6){_0x360116[_0x1c6d('0x8')]=_0x5a6cf6[_0x1c6d('0x10')];_0x360116[_0x1c6d('0xc')]=_0x5a6cf6[_0x1c6d('0xc')];utils[_0x1c6d('0xd')](_0x1c6d('0xe'),_0x360116);}});}})[_0x1c6d('0x11')](function(_0x563ade){utils['error'](_0x563ade);});}delete members[_0x360116[_0x1c6d('0x6')]];}function startsWith(_0x127580,_0x33a203){return _['some'](_0x127580,function(_0x2fdc1d){return _['startsWith'](_0x33a203,_0x2fdc1d);});}exports[_0x1c6d('0x12')]=function(_0x491e68){switch(_0x491e68[_0x1c6d('0x13')]){case'INUSE':case _0x1c6d('0x14'):if(!startsWith(exclude,_0x491e68[_0x1c6d('0x15')])){members[_0x491e68['device']]={'channel':_0x1c6d('0x16'),'interface':_0x491e68[_0x1c6d('0x15')],'type':_0x1c6d('0x17'),'enterAt':utils[_0x1c6d('0x18')](),'role':_0x1c6d('0x19')};}break;case _0x1c6d('0x1a'):if(!_[_0x1c6d('0x1b')](members[_0x491e68[_0x1c6d('0x15')]])){members[_0x491e68[_0x1c6d('0x15')]][_0x1c6d('0x1c')]=utils[_0x1c6d('0x18')]();members[_0x491e68[_0x1c6d('0x15')]][_0x1c6d('0x1d')]=utils[_0x1c6d('0x1e')](members[_0x491e68[_0x1c6d('0x15')]][_0x1c6d('0x1c')],members[_0x491e68[_0x1c6d('0x15')]][_0x1c6d('0x1f')]);if(members[_0x491e68[_0x1c6d('0x15')]][_0x1c6d('0x5')]){writeDB(members[_0x491e68[_0x1c6d('0x15')]]);}}default:break;}};exports[_0x1c6d('0x20')]=function(_0x173e2a){if(!_[_0x1c6d('0x1b')](members[_0x173e2a[_0x1c6d('0x6')]])){members[_0x173e2a[_0x1c6d('0x6')]]=_[_0x1c6d('0x21')](members[_0x173e2a['interface']],{'data4':_0x173e2a[_0x1c6d('0x22')],'uniqueid':_0x173e2a[_0x1c6d('0x5')]});}};exports[_0x1c6d('0x23')]=function(_0x1e14c1){if(_0x1e14c1[_0x1c6d('0x24')]){var _0x1ef23a=_0x1e14c1[_0x1c6d('0x24')][_0x1c6d('0xf')]('-')[0x0];if(!_['isNil'](members[_0x1ef23a])){members[_0x1ef23a]=_[_0x1c6d('0x21')](members[_0x1ef23a],{'data1':members[_0x1ef23a]['data1']||_0x1e14c1['type'],'data2':members[_0x1ef23a]['data2']||_0x1e14c1[_0x1c6d('0x25')],'data3':members[_0x1ef23a][_0x1c6d('0x26')]||_0x1e14c1[_0x1c6d('0x27')],'uniqueid':members[_0x1ef23a]['uniqueid']||_0x1e14c1[_0x1c6d('0x5')]});if(members[_0x1ef23a][_0x1c6d('0x1c')]){writeDB(members[_0x1ef23a]);}}}if(_0x1e14c1['destinationchannel']){var _0x283509=_0x1e14c1[_0x1c6d('0x28')][_0x1c6d('0xf')]('-')[0x0];if(!_[_0x1c6d('0x1b')](members[_0x283509])){members[_0x283509]=_[_0x1c6d('0x21')](members[_0x283509],{'data1':members[_0x283509]['data1']||_0x1e14c1['type'],'data2':members[_0x283509]['data2']||_0x1e14c1[_0x1c6d('0x25')],'data3':members[_0x283509]['data3']||_0x1e14c1[_0x1c6d('0x27')],'uniqueid':members[_0x283509][_0x1c6d('0x5')]||_0x1e14c1[_0x1c6d('0x5')]});if(members[_0x283509]['exitAt']){writeDB(members[_0x283509]);}}}};
\ No newline at end of file
+var _0xc23a=['lodash','util','./utils','info','format','MEMBER|%s|%s|%s|%s|%s|%s','uniqueid','interface','channel','data2','membername','then','name','internal','request','CreateMemberReport','getUserByName','split','catch','error','some','startsWith','devicestatechange','INUSE','device','voice','now','agent','isNil','exitAt','duration','diffTime','enterAt','agentcomplete','assign','queue','cdr','type','source','data3','destination','destinationchannel','data1'];(function(_0x53a8d3,_0x1a0799){var _0x15e434=function(_0x21f7ac){while(--_0x21f7ac){_0x53a8d3['push'](_0x53a8d3['shift']());}};_0x15e434(++_0x1a0799);}(_0xc23a,0xd7));var _0xac23=function(_0x46e363,_0x45d7e2){_0x46e363=_0x46e363-0x0;var _0x3fb059=_0xc23a[_0x46e363];return _0x3fb059;};'use strict';var _=require(_0xac23('0x0'));var util=require(_0xac23('0x1'));var utils=require(_0xac23('0x2'));var members={};var exclude=['Local/_attended@transfer','Queue:'];function writeDB(_0x35dfe9){utils[_0xac23('0x3')](util[_0xac23('0x4')](_0xac23('0x5'),_0x35dfe9[_0xac23('0x6')],_0x35dfe9[_0xac23('0x7')],_0x35dfe9[_0xac23('0x8')],_0x35dfe9[_0xac23('0x9')],_0x35dfe9[_0xac23('0xa')],_0x35dfe9['type']));if(_0x35dfe9[_0xac23('0x7')]){utils['getUserByInterface'](_0x35dfe9['interface'])[_0xac23('0xb')](function(_0x3a3096){if(_0x3a3096){_0x35dfe9[_0xac23('0xa')]=_0x3a3096[_0xac23('0xc')];_0x35dfe9[_0xac23('0xd')]=_0x3a3096['internal'];utils[_0xac23('0xe')](_0xac23('0xf'),_0x35dfe9);}else{utils[_0xac23('0x10')](_0x35dfe9['interface'][_0xac23('0x11')]('/')[0x1])[_0xac23('0xb')](function(_0x481251){if(_0x481251){_0x35dfe9[_0xac23('0xa')]=_0x481251[_0xac23('0xc')];_0x35dfe9['internal']=_0x481251['internal'];utils[_0xac23('0xe')]('CreateMemberReport',_0x35dfe9);}});}})[_0xac23('0x12')](function(_0x5f528e){utils[_0xac23('0x13')](_0x5f528e);});}delete members[_0x35dfe9[_0xac23('0x7')]];}function startsWith(_0xa85e27,_0x2875a6){return _[_0xac23('0x14')](_0xa85e27,function(_0x450c7c){return _[_0xac23('0x15')](_0x2875a6,_0x450c7c);});}exports[_0xac23('0x16')]=function(_0x34b983){switch(_0x34b983['state']){case _0xac23('0x17'):case'BUSY':if(!startsWith(exclude,_0x34b983[_0xac23('0x18')])){members[_0x34b983[_0xac23('0x18')]]={'channel':_0xac23('0x19'),'interface':_0x34b983[_0xac23('0x18')],'type':'TALKING','enterAt':utils[_0xac23('0x1a')](),'role':_0xac23('0x1b')};}break;case'NOT_INUSE':if(!_[_0xac23('0x1c')](members[_0x34b983[_0xac23('0x18')]])){members[_0x34b983[_0xac23('0x18')]][_0xac23('0x1d')]=utils[_0xac23('0x1a')]();members[_0x34b983[_0xac23('0x18')]][_0xac23('0x1e')]=utils[_0xac23('0x1f')](members[_0x34b983[_0xac23('0x18')]][_0xac23('0x1d')],members[_0x34b983[_0xac23('0x18')]][_0xac23('0x20')]);if(members[_0x34b983['device']][_0xac23('0x6')]){writeDB(members[_0x34b983['device']]);}}default:break;}};exports[_0xac23('0x21')]=function(_0x36de12){if(!_[_0xac23('0x1c')](members[_0x36de12[_0xac23('0x7')]])){members[_0x36de12[_0xac23('0x7')]]=_[_0xac23('0x22')](members[_0x36de12[_0xac23('0x7')]],{'data4':_0x36de12[_0xac23('0x23')],'uniqueid':_0x36de12[_0xac23('0x6')]});}};exports[_0xac23('0x24')]=function(_0x3486eb){if(_0x3486eb['channel']){var _0x11987b=_0x3486eb['channel'][_0xac23('0x11')]('-')[0x0];if(!_[_0xac23('0x1c')](members[_0x11987b])){members[_0x11987b]=_[_0xac23('0x22')](members[_0x11987b],{'data1':members[_0x11987b]['data1']||_0x3486eb[_0xac23('0x25')],'data2':members[_0x11987b][_0xac23('0x9')]||_0x3486eb[_0xac23('0x26')],'data3':members[_0x11987b][_0xac23('0x27')]||_0x3486eb[_0xac23('0x28')],'uniqueid':members[_0x11987b]['uniqueid']||_0x3486eb[_0xac23('0x6')]});if(members[_0x11987b]['exitAt']){writeDB(members[_0x11987b]);}}}if(_0x3486eb[_0xac23('0x29')]){var _0x5b1702=_0x3486eb[_0xac23('0x29')][_0xac23('0x11')]('-')[0x0];if(!_[_0xac23('0x1c')](members[_0x5b1702])){members[_0x5b1702]=_[_0xac23('0x22')](members[_0x5b1702],{'data1':members[_0x5b1702][_0xac23('0x2a')]||_0x3486eb[_0xac23('0x25')],'data2':members[_0x5b1702][_0xac23('0x9')]||_0x3486eb[_0xac23('0x26')],'data3':members[_0x5b1702][_0xac23('0x27')]||_0x3486eb[_0xac23('0x28')],'uniqueid':members[_0x5b1702][_0xac23('0x6')]||_0x3486eb[_0xac23('0x6')]});if(members[_0x5b1702]['exitAt']){writeDB(members[_0x5b1702]);}}}};
\ No newline at end of file
index 1df72bf..f920856 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0x54a5=['COMPLETEDBY','blindtransfer','transfereeuniqueid','transfertype','BLIND','extension','transferuniqueid','BLINDTRANSFER','attendedtransfer','origtransfererlinkedid','secondtransfererlinkedid','transferexten','ATTENDEDTRANSFER','transfereelinkedid','clone','calleridname','mohtime','secondtransfererexten','secondtransfereruniqueid','transfertargetlinkedid','transfertargetuniqueid','error','stack','musiconholdstartAt','lodash','util','./utils','info','format','QUEUE|%s|%s|%s|%s|%s|%s|%s','uniqueid','channel','queue','lastAssignedTo','calleridnum','getVoiceQueueByName','type','request','CreateVoiceQueueReport','transfereduniqueid','queuecallerjoin','assign','position','now','queuecallerabandon','queuecallercomplete','queuecallercompleteAt','COMPLETEDBYAGENT','queuecallerenterreason','varset','isNil','variable','queuecallerabandonAt','queuecallerexit','queuecallerexitAt','queuecallerexitreason','toUpperCase','queueposition','EXITWITHKEY','ABANDONED','queuecallerleave','queuecallerleaveAt','holdtime','diffTime','queuecallerjoinAt','count','connectedlinenum','connectedlinename','agentconnect','assigned','membername','agentcomplete','reason','transfer','TRANSFER'];(function(_0x3857b2,_0x5c0294){var _0x137759=function(_0x5d97ae){while(--_0x5d97ae){_0x3857b2['push'](_0x3857b2['shift']());}};_0x137759(++_0x5c0294);}(_0x54a5,0x18f));var _0x554a=function(_0x29a0cf,_0x241361){_0x29a0cf=_0x29a0cf-0x0;var _0x1d3e68=_0x54a5[_0x29a0cf];return _0x1d3e68;};'use strict';var _=require(_0x554a('0x0'));var util=require(_0x554a('0x1'));var utils=require(_0x554a('0x2'));var queues={};function writeDB(_0x42085d){utils[_0x554a('0x3')](util[_0x554a('0x4')](_0x554a('0x5'),_0x42085d[_0x554a('0x6')],_0x42085d[_0x554a('0x7')],_0x42085d[_0x554a('0x8')],_0x42085d[_0x554a('0x9')],_0x42085d[_0x554a('0xa')],_0x42085d['accountcode'],_0x42085d['queuecallerexitreason']));if(_0x42085d[_0x554a('0x8')]){utils[_0x554a('0xb')](_0x42085d[_0x554a('0x8')])['then'](function(_0x5bae1f){if(_0x5bae1f){_0x42085d[_0x554a('0xc')]=_0x5bae1f[_0x554a('0xc')];}utils[_0x554a('0xd')](_0x554a('0xe'),_0x42085d);});}else{utils[_0x554a('0xd')]('CreateVoiceQueueReport',_0x42085d);}if(_0x42085d[_0x554a('0xf')]){delete queues[_0x42085d[_0x554a('0xf')]];}else{delete queues[_0x42085d['uniqueid']];}}exports[_0x554a('0x10')]=function(_0x453034){queues[_0x453034[_0x554a('0x6')]]=_[_0x554a('0x11')](_0x453034,{'originalposition':_0x453034[_0x554a('0x12')],'queuecallerjoinAt':utils[_0x554a('0x13')](),'mohtime':0x0});};exports['hangup']=function(_0x471028){if(!_['isNil'](queues[_0x471028[_0x554a('0x6')]])){if(queues[_0x471028['uniqueid']]['queuecallerleaveAt']){if(!queues[_0x471028[_0x554a('0x6')]][_0x554a('0x14')]&&!queues[_0x471028[_0x554a('0x6')]]['queuecallerexit']){queues[_0x471028[_0x554a('0x6')]][_0x554a('0x15')]=!![];queues[_0x471028[_0x554a('0x6')]][_0x554a('0x16')]=utils[_0x554a('0x13')]();queues[_0x471028[_0x554a('0x6')]]['queuecallerexitreason']=_0x554a('0x17');}writeDB(queues[_0x471028[_0x554a('0x6')]]);}else{if(queues[_0x471028[_0x554a('0x6')]][_0x554a('0xf')]){queues[queues[_0x471028[_0x554a('0x6')]][_0x554a('0xf')]]=queues[_0x471028[_0x554a('0x6')]];queues[queues[_0x471028[_0x554a('0x6')]][_0x554a('0xf')]][_0x554a('0x18')]=0x2;delete queues[_0x471028[_0x554a('0x6')]];}}}};exports[_0x554a('0x19')]=function(_0x126aba){if(!_[_0x554a('0x1a')](_0x126aba[_0x554a('0x1b')]['queuestatus'])){if(!_[_0x554a('0x1a')](queues[_0x126aba[_0x554a('0x6')]])){queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x14')]=![];queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x1c')]=null;queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x1d')]=!![];queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x1e')]=utils[_0x554a('0x13')]();queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x1f')]=_0x126aba['value'][_0x554a('0x20')]();writeDB(queues[_0x126aba[_0x554a('0x6')]]);}}else if(!_['isNil'](_0x126aba[_0x554a('0x1b')][_0x554a('0x21')])){if(!_[_0x554a('0x1a')](queues[_0x126aba[_0x554a('0x6')]])&&!queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x14')]){queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x14')]=![];queues[_0x126aba['uniqueid']]['queuecallerabandonAt']=null;queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x1d')]=!![];queues[_0x126aba[_0x554a('0x6')]][_0x554a('0x1e')]=utils[_0x554a('0x13')]();queues[_0x126aba['uniqueid']][_0x554a('0x1f')]=_0x554a('0x22');}}};exports['queuecallerabandon']=function(_0x16d056){if(!_[_0x554a('0x1a')](queues[_0x16d056[_0x554a('0x6')]])){queues[_0x16d056[_0x554a('0x6')]][_0x554a('0x1d')]=![];queues[_0x16d056['uniqueid']]['queuecallerexitAt']=null;queues[_0x16d056[_0x554a('0x6')]][_0x554a('0x14')]=!![];queues[_0x16d056['uniqueid']]['queuecallerabandonAt']=utils[_0x554a('0x13')]();queues[_0x16d056[_0x554a('0x6')]]['queuecallerexitreason']=_0x554a('0x23');}};exports[_0x554a('0x24')]=function(_0x6b8f3f){if(!_[_0x554a('0x1a')](queues[_0x6b8f3f['uniqueid']])){queues[_0x6b8f3f['uniqueid']][_0x554a('0x24')]=!![];queues[_0x6b8f3f[_0x554a('0x6')]][_0x554a('0x25')]=utils[_0x554a('0x13')]();queues[_0x6b8f3f[_0x554a('0x6')]][_0x554a('0x26')]=utils[_0x554a('0x27')](queues[_0x6b8f3f[_0x554a('0x6')]][_0x554a('0x25')],queues[_0x6b8f3f['uniqueid']][_0x554a('0x28')]);queues[_0x6b8f3f[_0x554a('0x6')]][_0x554a('0x12')]=_0x6b8f3f[_0x554a('0x12')];queues[_0x6b8f3f[_0x554a('0x6')]][_0x554a('0x29')]=_0x6b8f3f['count'];queues[_0x6b8f3f[_0x554a('0x6')]][_0x554a('0x2a')]=_0x6b8f3f[_0x554a('0x2a')];queues[_0x6b8f3f['uniqueid']]['connectedlinename']=_0x6b8f3f[_0x554a('0x2b')];}};exports[_0x554a('0x2c')]=function(_0x253255){if(!_[_0x554a('0x1a')](queues[_0x253255[_0x554a('0x6')]])){queues[_0x253255[_0x554a('0x6')]][_0x554a('0x14')]=![];queues[_0x253255[_0x554a('0x6')]][_0x554a('0x14')]=![];queues[_0x253255['uniqueid']][_0x554a('0x1c')]=null;queues[_0x253255['uniqueid']][_0x554a('0x1d')]=![];queues[_0x253255[_0x554a('0x6')]][_0x554a('0x1e')]=null;queues[_0x253255['uniqueid']][_0x554a('0x2d')]=!![];queues[_0x253255[_0x554a('0x6')]][_0x554a('0x9')]=_0x253255[_0x554a('0x2e')];}};exports[_0x554a('0x2f')]=function(_0x480b07){if(!_['isNil'](queues[_0x480b07[_0x554a('0x6')]])){if(queues[_0x480b07[_0x554a('0x6')]][_0x554a('0x25')]){queues[_0x480b07[_0x554a('0x6')]][_0x554a('0x14')]=![];queues[_0x480b07[_0x554a('0x6')]]['queuecallerabandon']=![];queues[_0x480b07[_0x554a('0x6')]]['queuecallerabandonAt']=null;queues[_0x480b07[_0x554a('0x6')]]['queuecallerexit']=![];queues[_0x480b07[_0x554a('0x6')]]['queuecallerexitAt']=null;queues[_0x480b07[_0x554a('0x6')]][_0x554a('0x2d')]=!![];queues[_0x480b07[_0x554a('0x6')]][_0x554a('0x9')]=_0x480b07[_0x554a('0x2e')];queues[_0x480b07[_0x554a('0x6')]][_0x554a('0x15')]=!![];queues[_0x480b07[_0x554a('0x6')]]['queuecallercompleteAt']=utils['now']();if(_0x480b07[_0x554a('0x30')]==_0x554a('0x31')){if(!queues[_0x480b07[_0x554a('0x6')]][_0x554a('0x31')]){queues[_0x480b07['uniqueid']][_0x554a('0x1f')]=_0x554a('0x32');}}else{queues[_0x480b07[_0x554a('0x6')]]['queuecallerexitreason']=_0x554a('0x33')+_0x480b07[_0x554a('0x30')]['toUpperCase']();}writeDB(queues[_0x480b07[_0x554a('0x6')]]);}}};exports[_0x554a('0x34')]=function(_0x4e6050){if(!_[_0x554a('0x1a')](queues[_0x4e6050[_0x554a('0x35')]])){queues[_0x4e6050[_0x554a('0x35')]][_0x554a('0x31')]=!![];queues[_0x4e6050[_0x554a('0x35')]][_0x554a('0x36')]=_0x554a('0x37');queues[_0x4e6050[_0x554a('0x35')]]['transferexten']=_0x4e6050[_0x554a('0x38')];queues[_0x4e6050['transfereeuniqueid']][_0x554a('0x39')]=_0x4e6050[_0x554a('0x35')];queues[_0x4e6050['transfereeuniqueid']][_0x554a('0x1f')]=_0x554a('0x3a');}};exports[_0x554a('0x3b')]=function(_0x54d547){try{if(_0x54d547['origtransfereruniqueid']==_0x54d547[_0x554a('0x3c')]){if(!_['isNil'](queues[_0x54d547[_0x554a('0x3d')]])){queues[_0x54d547['secondtransfererlinkedid']]['transfer']=!![];queues[_0x54d547['secondtransfererlinkedid']][_0x554a('0x36')]='ATTENDED';queues[_0x54d547[_0x554a('0x3d')]][_0x554a('0x3e')]=_0x54d547['origtransfererexten'];queues[_0x54d547[_0x554a('0x3d')]][_0x554a('0x39')]=_0x54d547['origtransfereruniqueid'];queues[_0x54d547[_0x554a('0x3d')]][_0x554a('0x1f')]=_0x554a('0x3f');}if(!_[_0x554a('0x1a')](queues[_0x54d547['origtransfererlinkedid']])){if(_0x54d547[_0x554a('0x40')]&&queues[_0x54d547[_0x554a('0x40')]]){queues[_0x54d547[_0x554a('0x40')]][_0x554a('0x18')]=0x1;queues[_0x54d547[_0x554a('0x35')]]=_[_0x554a('0x41')](queues[_0x54d547[_0x554a('0x40')]]);queues[_0x54d547['transfereeuniqueid']]['transfereduniqueid']=_0x54d547['transfertargetuniqueid'];queues[_0x54d547['transfereeuniqueid']][_0x554a('0x18')]=0x2;queues[_0x54d547[_0x554a('0x35')]][_0x554a('0xa')]=queues[_0x54d547[_0x554a('0x3d')]]['calleridnum'];queues[_0x54d547[_0x554a('0x35')]]['calleridname']=queues[_0x54d547[_0x554a('0x3d')]][_0x554a('0x42')];queues[_0x54d547[_0x554a('0x35')]][_0x554a('0x28')]=utils['now']();queues[_0x54d547[_0x554a('0x35')]][_0x554a('0x25')]=utils[_0x554a('0x13')]();queues[_0x54d547[_0x554a('0x35')]]['holdtime']=0x0;queues[_0x54d547['transfereeuniqueid']][_0x554a('0x43')]=0x0;}else{queues[_0x54d547[_0x554a('0x3c')]]['transfereduniqueid']=_0x54d547[_0x554a('0x3d')];}}}else if(_0x54d547['secondtransfereruniqueid']==_0x54d547[_0x554a('0x3d')]){if(!_['isNil'](queues[_0x54d547[_0x554a('0x3c')]])){queues[_0x54d547[_0x554a('0x3c')]][_0x554a('0x31')]=!![];queues[_0x54d547['origtransfererlinkedid']][_0x554a('0x36')]='ATTENDED';queues[_0x54d547[_0x554a('0x3c')]][_0x554a('0x3e')]=_0x54d547[_0x554a('0x44')];queues[_0x54d547[_0x554a('0x3c')]][_0x554a('0x39')]=_0x54d547[_0x554a('0x45')];queues[_0x54d547[_0x554a('0x3c')]][_0x554a('0x1f')]='ATTENDEDTRANSFER';}if(!_[_0x554a('0x1a')](queues[_0x54d547['secondtransfererlinkedid']])){if(_0x54d547[_0x554a('0x46')]&&queues[_0x54d547[_0x554a('0x46')]]){queues[_0x54d547[_0x554a('0x46')]][_0x554a('0x18')]=0x1;queues[_0x54d547[_0x554a('0x47')]]=_[_0x554a('0x41')](queues[_0x54d547[_0x554a('0x46')]]);queues[_0x54d547[_0x554a('0x47')]][_0x554a('0xf')]=_0x54d547[_0x554a('0x47')];queues[_0x54d547[_0x554a('0x47')]][_0x554a('0x18')]=0x2;queues[_0x54d547['transfertargetuniqueid']]['calleridnum']=queues[_0x54d547[_0x554a('0x3c')]]['calleridnum'];queues[_0x54d547[_0x554a('0x47')]]['calleridname']=queues[_0x54d547[_0x554a('0x3c')]][_0x554a('0x42')];queues[_0x54d547[_0x554a('0x47')]][_0x554a('0x28')]=utils['now']();queues[_0x54d547[_0x554a('0x47')]]['queuecallerleaveAt']=utils['now']();queues[_0x54d547[_0x554a('0x47')]]['holdtime']=0x0;queues[_0x54d547['transfertargetuniqueid']][_0x554a('0x43')]=0x0;}else{queues[_0x54d547[_0x554a('0x3d')]]['transfereduniqueid']=_0x54d547[_0x554a('0x3c')];}}}}catch(_0x23e328){utils[_0x554a('0x48')](_0x23e328[_0x554a('0x49')]);}};exports['musiconholdstart']=function(_0x1aee3a){if(!_[_0x554a('0x1a')](queues[_0x1aee3a[_0x554a('0x6')]])){queues[_0x1aee3a[_0x554a('0x6')]]['musiconholdstartAt']=utils[_0x554a('0x13')]();}};exports['musiconholdstop']=function(_0x2597d1){if(!_['isNil'](queues[_0x2597d1[_0x554a('0x6')]])){if(!_['isNil'](queues[_0x2597d1['uniqueid']][_0x554a('0x4a')])){queues[_0x2597d1[_0x554a('0x6')]]['mohtime']+=utils[_0x554a('0x27')](utils[_0x554a('0x13')](),queues[_0x2597d1[_0x554a('0x6')]]['musiconholdstartAt']);delete queues[_0x2597d1[_0x554a('0x6')]][_0x554a('0x4a')];}}};
\ No newline at end of file
+var _0x9fbe=['transfertargetlinkedid','transfertargetuniqueid','musiconholdstart','musiconholdstartAt','musiconholdstop','diffTime','util','./utils','info','format','QUEUE|%s|%s|%s|%s|%s|%s|%s','queue','calleridnum','queuecallerexitreason','getVoiceQueueByName','type','request','CreateVoiceQueueReport','transfereduniqueid','uniqueid','queuecallerjoin','assign','position','now','queuecallerleaveAt','queuecallerabandon','queuecallerexit','queuecallercomplete','queuecallercompleteAt','COMPLETEDBYAGENT','queuecallerenterreason','isNil','variable','queuecallerexitAt','toUpperCase','queuecallerabandonAt','EXITWITHKEY','ABANDONED','queuecallerleave','holdtime','queuecallerjoinAt','count','connectedlinenum','connectedlinename','agentconnect','assigned','lastAssignedTo','membername','agentcomplete','reason','COMPLETEDBY','blindtransfer','transfereeuniqueid','transfer','transfertype','transferexten','BLINDTRANSFER','attendedtransfer','origtransfereruniqueid','origtransfererlinkedid','secondtransfererlinkedid','ATTENDED','transferuniqueid','clone','transfereelinkedid','calleridname','mohtime','secondtransfereruniqueid','secondtransfererexten','ATTENDEDTRANSFER'];(function(_0x3dd15e,_0x1f0015){var _0x231fd0=function(_0x4f680a){while(--_0x4f680a){_0x3dd15e['push'](_0x3dd15e['shift']());}};_0x231fd0(++_0x1f0015);}(_0x9fbe,0x1aa));var _0xe9fb=function(_0x11cf32,_0x560d24){_0x11cf32=_0x11cf32-0x0;var _0x163a94=_0x9fbe[_0x11cf32];return _0x163a94;};'use strict';var _=require('lodash');var util=require(_0xe9fb('0x0'));var utils=require(_0xe9fb('0x1'));var queues={};function writeDB(_0x1a3484){utils[_0xe9fb('0x2')](util[_0xe9fb('0x3')](_0xe9fb('0x4'),_0x1a3484['uniqueid'],_0x1a3484['channel'],_0x1a3484[_0xe9fb('0x5')],_0x1a3484['lastAssignedTo'],_0x1a3484[_0xe9fb('0x6')],_0x1a3484['accountcode'],_0x1a3484[_0xe9fb('0x7')]));if(_0x1a3484[_0xe9fb('0x5')]){utils[_0xe9fb('0x8')](_0x1a3484[_0xe9fb('0x5')])['then'](function(_0x50a5cf){if(_0x50a5cf){_0x1a3484[_0xe9fb('0x9')]=_0x50a5cf[_0xe9fb('0x9')];}utils[_0xe9fb('0xa')](_0xe9fb('0xb'),_0x1a3484);});}else{utils['request'](_0xe9fb('0xb'),_0x1a3484);}if(_0x1a3484[_0xe9fb('0xc')]){delete queues[_0x1a3484[_0xe9fb('0xc')]];}else{delete queues[_0x1a3484[_0xe9fb('0xd')]];}}exports[_0xe9fb('0xe')]=function(_0x2f36de){queues[_0x2f36de[_0xe9fb('0xd')]]=_[_0xe9fb('0xf')](_0x2f36de,{'originalposition':_0x2f36de[_0xe9fb('0x10')],'queuecallerjoinAt':utils[_0xe9fb('0x11')](),'mohtime':0x0});};exports['hangup']=function(_0x7ab2e4){if(!_['isNil'](queues[_0x7ab2e4[_0xe9fb('0xd')]])){if(queues[_0x7ab2e4[_0xe9fb('0xd')]][_0xe9fb('0x12')]){if(!queues[_0x7ab2e4[_0xe9fb('0xd')]][_0xe9fb('0x13')]&&!queues[_0x7ab2e4[_0xe9fb('0xd')]][_0xe9fb('0x14')]){queues[_0x7ab2e4[_0xe9fb('0xd')]][_0xe9fb('0x15')]=!![];queues[_0x7ab2e4[_0xe9fb('0xd')]][_0xe9fb('0x16')]=utils[_0xe9fb('0x11')]();queues[_0x7ab2e4[_0xe9fb('0xd')]][_0xe9fb('0x7')]=_0xe9fb('0x17');}writeDB(queues[_0x7ab2e4[_0xe9fb('0xd')]]);}else{if(queues[_0x7ab2e4['uniqueid']][_0xe9fb('0xc')]){queues[queues[_0x7ab2e4[_0xe9fb('0xd')]][_0xe9fb('0xc')]]=queues[_0x7ab2e4[_0xe9fb('0xd')]];queues[queues[_0x7ab2e4[_0xe9fb('0xd')]][_0xe9fb('0xc')]][_0xe9fb('0x18')]=0x2;delete queues[_0x7ab2e4['uniqueid']];}}}};exports['varset']=function(_0x3334b7){if(!_[_0xe9fb('0x19')](_0x3334b7[_0xe9fb('0x1a')]['queuestatus'])){if(!_[_0xe9fb('0x19')](queues[_0x3334b7[_0xe9fb('0xd')]])){queues[_0x3334b7[_0xe9fb('0xd')]]['queuecallerabandon']=![];queues[_0x3334b7[_0xe9fb('0xd')]]['queuecallerabandonAt']=null;queues[_0x3334b7['uniqueid']][_0xe9fb('0x14')]=!![];queues[_0x3334b7[_0xe9fb('0xd')]][_0xe9fb('0x1b')]=utils['now']();queues[_0x3334b7[_0xe9fb('0xd')]][_0xe9fb('0x7')]=_0x3334b7['value'][_0xe9fb('0x1c')]();writeDB(queues[_0x3334b7[_0xe9fb('0xd')]]);}}else if(!_[_0xe9fb('0x19')](_0x3334b7[_0xe9fb('0x1a')]['queueposition'])){if(!_[_0xe9fb('0x19')](queues[_0x3334b7['uniqueid']])&&!queues[_0x3334b7[_0xe9fb('0xd')]][_0xe9fb('0x13')]){queues[_0x3334b7[_0xe9fb('0xd')]][_0xe9fb('0x13')]=![];queues[_0x3334b7[_0xe9fb('0xd')]][_0xe9fb('0x1d')]=null;queues[_0x3334b7[_0xe9fb('0xd')]][_0xe9fb('0x14')]=!![];queues[_0x3334b7['uniqueid']][_0xe9fb('0x1b')]=utils[_0xe9fb('0x11')]();queues[_0x3334b7[_0xe9fb('0xd')]][_0xe9fb('0x7')]=_0xe9fb('0x1e');}}};exports[_0xe9fb('0x13')]=function(_0x3d90d8){if(!_['isNil'](queues[_0x3d90d8['uniqueid']])){queues[_0x3d90d8[_0xe9fb('0xd')]][_0xe9fb('0x14')]=![];queues[_0x3d90d8[_0xe9fb('0xd')]][_0xe9fb('0x1b')]=null;queues[_0x3d90d8[_0xe9fb('0xd')]][_0xe9fb('0x13')]=!![];queues[_0x3d90d8['uniqueid']][_0xe9fb('0x1d')]=utils[_0xe9fb('0x11')]();queues[_0x3d90d8[_0xe9fb('0xd')]][_0xe9fb('0x7')]=_0xe9fb('0x1f');}};exports[_0xe9fb('0x20')]=function(_0x1f3c5b){if(!_[_0xe9fb('0x19')](queues[_0x1f3c5b[_0xe9fb('0xd')]])){queues[_0x1f3c5b[_0xe9fb('0xd')]][_0xe9fb('0x20')]=!![];queues[_0x1f3c5b[_0xe9fb('0xd')]][_0xe9fb('0x12')]=utils[_0xe9fb('0x11')]();queues[_0x1f3c5b['uniqueid']][_0xe9fb('0x21')]=utils['diffTime'](queues[_0x1f3c5b[_0xe9fb('0xd')]]['queuecallerleaveAt'],queues[_0x1f3c5b[_0xe9fb('0xd')]][_0xe9fb('0x22')]);queues[_0x1f3c5b[_0xe9fb('0xd')]][_0xe9fb('0x10')]=_0x1f3c5b['position'];queues[_0x1f3c5b[_0xe9fb('0xd')]][_0xe9fb('0x23')]=_0x1f3c5b[_0xe9fb('0x23')];queues[_0x1f3c5b[_0xe9fb('0xd')]][_0xe9fb('0x24')]=_0x1f3c5b[_0xe9fb('0x24')];queues[_0x1f3c5b[_0xe9fb('0xd')]][_0xe9fb('0x25')]=_0x1f3c5b[_0xe9fb('0x25')];}};exports[_0xe9fb('0x26')]=function(_0x2b5a64){if(!_['isNil'](queues[_0x2b5a64[_0xe9fb('0xd')]])){queues[_0x2b5a64[_0xe9fb('0xd')]]['queuecallerabandon']=![];queues[_0x2b5a64[_0xe9fb('0xd')]][_0xe9fb('0x13')]=![];queues[_0x2b5a64['uniqueid']][_0xe9fb('0x1d')]=null;queues[_0x2b5a64[_0xe9fb('0xd')]]['queuecallerexit']=![];queues[_0x2b5a64[_0xe9fb('0xd')]][_0xe9fb('0x1b')]=null;queues[_0x2b5a64[_0xe9fb('0xd')]][_0xe9fb('0x27')]=!![];queues[_0x2b5a64[_0xe9fb('0xd')]][_0xe9fb('0x28')]=_0x2b5a64[_0xe9fb('0x29')];}};exports[_0xe9fb('0x2a')]=function(_0x53e943){if(!_[_0xe9fb('0x19')](queues[_0x53e943[_0xe9fb('0xd')]])){if(queues[_0x53e943[_0xe9fb('0xd')]][_0xe9fb('0x12')]){queues[_0x53e943['uniqueid']][_0xe9fb('0x13')]=![];queues[_0x53e943['uniqueid']]['queuecallerabandon']=![];queues[_0x53e943[_0xe9fb('0xd')]][_0xe9fb('0x1d')]=null;queues[_0x53e943['uniqueid']][_0xe9fb('0x14')]=![];queues[_0x53e943[_0xe9fb('0xd')]][_0xe9fb('0x1b')]=null;queues[_0x53e943[_0xe9fb('0xd')]]['assigned']=!![];queues[_0x53e943[_0xe9fb('0xd')]][_0xe9fb('0x28')]=_0x53e943['membername'];queues[_0x53e943['uniqueid']][_0xe9fb('0x15')]=!![];queues[_0x53e943['uniqueid']]['queuecallercompleteAt']=utils[_0xe9fb('0x11')]();if(_0x53e943[_0xe9fb('0x2b')]=='transfer'){if(!queues[_0x53e943[_0xe9fb('0xd')]]['transfer']){queues[_0x53e943['uniqueid']][_0xe9fb('0x7')]='TRANSFER';}}else{queues[_0x53e943[_0xe9fb('0xd')]][_0xe9fb('0x7')]=_0xe9fb('0x2c')+_0x53e943[_0xe9fb('0x2b')][_0xe9fb('0x1c')]();}writeDB(queues[_0x53e943[_0xe9fb('0xd')]]);}}};exports[_0xe9fb('0x2d')]=function(_0x329851){if(!_[_0xe9fb('0x19')](queues[_0x329851[_0xe9fb('0x2e')]])){queues[_0x329851[_0xe9fb('0x2e')]][_0xe9fb('0x2f')]=!![];queues[_0x329851[_0xe9fb('0x2e')]][_0xe9fb('0x30')]='BLIND';queues[_0x329851['transfereeuniqueid']][_0xe9fb('0x31')]=_0x329851['extension'];queues[_0x329851['transfereeuniqueid']]['transferuniqueid']=_0x329851[_0xe9fb('0x2e')];queues[_0x329851[_0xe9fb('0x2e')]][_0xe9fb('0x7')]=_0xe9fb('0x32');}};exports[_0xe9fb('0x33')]=function(_0x40be65){try{if(_0x40be65[_0xe9fb('0x34')]==_0x40be65[_0xe9fb('0x35')]){if(!_[_0xe9fb('0x19')](queues[_0x40be65[_0xe9fb('0x36')]])){queues[_0x40be65['secondtransfererlinkedid']][_0xe9fb('0x2f')]=!![];queues[_0x40be65[_0xe9fb('0x36')]][_0xe9fb('0x30')]=_0xe9fb('0x37');queues[_0x40be65[_0xe9fb('0x36')]][_0xe9fb('0x31')]=_0x40be65['origtransfererexten'];queues[_0x40be65['secondtransfererlinkedid']][_0xe9fb('0x38')]=_0x40be65[_0xe9fb('0x34')];queues[_0x40be65[_0xe9fb('0x36')]][_0xe9fb('0x7')]='ATTENDEDTRANSFER';}if(!_[_0xe9fb('0x19')](queues[_0x40be65[_0xe9fb('0x35')]])){if(_0x40be65['transfereelinkedid']&&queues[_0x40be65['transfereelinkedid']]){queues[_0x40be65['transfereelinkedid']]['queuecallerenterreason']=0x1;queues[_0x40be65['transfereeuniqueid']]=_[_0xe9fb('0x39')](queues[_0x40be65[_0xe9fb('0x3a')]]);queues[_0x40be65[_0xe9fb('0x2e')]][_0xe9fb('0xc')]=_0x40be65['transfertargetuniqueid'];queues[_0x40be65[_0xe9fb('0x2e')]][_0xe9fb('0x18')]=0x2;queues[_0x40be65['transfereeuniqueid']][_0xe9fb('0x6')]=queues[_0x40be65[_0xe9fb('0x36')]][_0xe9fb('0x6')];queues[_0x40be65[_0xe9fb('0x2e')]][_0xe9fb('0x3b')]=queues[_0x40be65['secondtransfererlinkedid']][_0xe9fb('0x3b')];queues[_0x40be65[_0xe9fb('0x2e')]]['queuecallerjoinAt']=utils[_0xe9fb('0x11')]();queues[_0x40be65['transfereeuniqueid']][_0xe9fb('0x12')]=utils[_0xe9fb('0x11')]();queues[_0x40be65[_0xe9fb('0x2e')]][_0xe9fb('0x21')]=0x0;queues[_0x40be65[_0xe9fb('0x2e')]][_0xe9fb('0x3c')]=0x0;}else{queues[_0x40be65[_0xe9fb('0x35')]][_0xe9fb('0xc')]=_0x40be65[_0xe9fb('0x36')];}}}else if(_0x40be65[_0xe9fb('0x3d')]==_0x40be65['secondtransfererlinkedid']){if(!_[_0xe9fb('0x19')](queues[_0x40be65[_0xe9fb('0x35')]])){queues[_0x40be65['origtransfererlinkedid']][_0xe9fb('0x2f')]=!![];queues[_0x40be65[_0xe9fb('0x35')]][_0xe9fb('0x30')]=_0xe9fb('0x37');queues[_0x40be65['origtransfererlinkedid']][_0xe9fb('0x31')]=_0x40be65[_0xe9fb('0x3e')];queues[_0x40be65[_0xe9fb('0x35')]][_0xe9fb('0x38')]=_0x40be65[_0xe9fb('0x3d')];queues[_0x40be65[_0xe9fb('0x35')]][_0xe9fb('0x7')]=_0xe9fb('0x3f');}if(!_[_0xe9fb('0x19')](queues[_0x40be65[_0xe9fb('0x36')]])){if(_0x40be65[_0xe9fb('0x40')]&&queues[_0x40be65[_0xe9fb('0x40')]]){queues[_0x40be65['transfertargetlinkedid']][_0xe9fb('0x18')]=0x1;queues[_0x40be65[_0xe9fb('0x41')]]=_['clone'](queues[_0x40be65[_0xe9fb('0x40')]]);queues[_0x40be65[_0xe9fb('0x41')]][_0xe9fb('0xc')]=_0x40be65[_0xe9fb('0x41')];queues[_0x40be65[_0xe9fb('0x41')]]['queuecallerenterreason']=0x2;queues[_0x40be65['transfertargetuniqueid']][_0xe9fb('0x6')]=queues[_0x40be65[_0xe9fb('0x35')]]['calleridnum'];queues[_0x40be65[_0xe9fb('0x41')]][_0xe9fb('0x3b')]=queues[_0x40be65['origtransfererlinkedid']]['calleridname'];queues[_0x40be65[_0xe9fb('0x41')]][_0xe9fb('0x22')]=utils[_0xe9fb('0x11')]();queues[_0x40be65[_0xe9fb('0x41')]][_0xe9fb('0x12')]=utils[_0xe9fb('0x11')]();queues[_0x40be65[_0xe9fb('0x41')]][_0xe9fb('0x21')]=0x0;queues[_0x40be65[_0xe9fb('0x41')]]['mohtime']=0x0;}else{queues[_0x40be65[_0xe9fb('0x36')]][_0xe9fb('0xc')]=_0x40be65[_0xe9fb('0x35')];}}}}catch(_0x1c9c3e){utils['error'](_0x1c9c3e['stack']);}};exports[_0xe9fb('0x42')]=function(_0x28416c){if(!_[_0xe9fb('0x19')](queues[_0x28416c[_0xe9fb('0xd')]])){queues[_0x28416c['uniqueid']][_0xe9fb('0x43')]=utils['now']();}};exports[_0xe9fb('0x44')]=function(_0x18d566){if(!_[_0xe9fb('0x19')](queues[_0x18d566[_0xe9fb('0xd')]])){if(!_['isNil'](queues[_0x18d566[_0xe9fb('0xd')]][_0xe9fb('0x43')])){queues[_0x18d566['uniqueid']][_0xe9fb('0x3c')]+=utils[_0xe9fb('0x45')](utils['now'](),queues[_0x18d566['uniqueid']][_0xe9fb('0x43')]);delete queues[_0x18d566[_0xe9fb('0xd')]][_0xe9fb('0x43')];}}};
\ No newline at end of file
index f34aa39..6e1f781 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa9e0=['application','set','appdata','toLowerCase','cdr','substring','lastIndexOf','queuecallerjoin','queue','lodash','./utils','getUserByInternal','then','membername','name','UserId','CreateVoiceRecording','request','uniqueid','accountcode','exten','context','channel','isNil','channelstate','linkedid','transfer','error','varset','variable','endsWith','.wav49','value','replace','.WAV','find','monitors','stack','hangup','calleridnum','calleridname','connectedlinename','outbound','connectedlinenum','forEach','clone','newexten'];(function(_0x2b45b5,_0x474458){var _0x1d9c06=function(_0x9a3264){while(--_0x9a3264){_0x2b45b5['push'](_0x2b45b5['shift']());}};_0x1d9c06(++_0x474458);}(_0xa9e0,0x123));var _0x0a9e=function(_0x14add3,_0x13ce8d){_0x14add3=_0x14add3-0x0;var _0x4a174f=_0xa9e0[_0x14add3];return _0x4a174f;};'use strict';var _=require(_0x0a9e('0x0'));var utils=require(_0x0a9e('0x1'));var recordings={};function writeDB(_0x29929c){utils['debug'](_0x29929c);if(_0x29929c['accountcode']){utils[_0x0a9e('0x2')](_0x29929c['accountcode'])[_0x0a9e('0x3')](function(_0x432180){if(_0x432180){_0x29929c[_0x0a9e('0x4')]=_0x432180[_0x0a9e('0x5')];_0x29929c[_0x0a9e('0x6')]=_0x432180['id'];}utils['request'](_0x0a9e('0x7'),_0x29929c);});}else{utils[_0x0a9e('0x8')](_0x0a9e('0x7'),_0x29929c);}}exports['newchannel']=function(_0x503809){try{if(_0x503809[_0x0a9e('0x9')]==_0x503809['linkedid']){recordings[_0x503809['uniqueid']]={'uniqueid':_0x503809[_0x0a9e('0x9')],'accountcode':_0x503809[_0x0a9e('0xa')],'exten':_0x503809[_0x0a9e('0xb')],'context':_0x503809[_0x0a9e('0xc')],'channel':_0x503809[_0x0a9e('0xd')],'monitors':[]};}}catch(_0xbd1168){utils['error'](_0xbd1168['stack']);}};exports['newstate']=function(_0x4cfe67){try{if(!_[_0x0a9e('0xe')](recordings[_0x4cfe67[_0x0a9e('0x9')]])&&_0x4cfe67[_0x0a9e('0xf')]==0x6){}else if(!_[_0x0a9e('0xe')](recordings[_0x4cfe67[_0x0a9e('0x10')]])&&_0x4cfe67[_0x0a9e('0xf')]==0x6&&_0x4cfe67['context']!=_0x0a9e('0x11')){recordings[_0x4cfe67[_0x0a9e('0x10')]][_0x0a9e('0xa')]=_0x4cfe67[_0x0a9e('0xa')];}}catch(_0x44dcfd){utils[_0x0a9e('0x12')](_0x44dcfd['stack']);}};exports[_0x0a9e('0x13')]=function(_0x5d0880){try{if(!_[_0x0a9e('0xe')](_0x5d0880['variable'])&&!_[_0x0a9e('0xe')](_0x5d0880[_0x0a9e('0x14')]['mixmonitor_filename'])){if(_[_0x0a9e('0x15')](_0x5d0880['value'],_0x0a9e('0x16'))){_0x5d0880[_0x0a9e('0x17')]=_0x5d0880[_0x0a9e('0x17')][_0x0a9e('0x18')](_0x0a9e('0x16'),_0x0a9e('0x19'));}if(recordings[_0x5d0880[_0x0a9e('0x10')]]){var _0x20559e=_[_0x0a9e('0x1a')](recordings[_0x5d0880[_0x0a9e('0x10')]][_0x0a9e('0x1b')],{'value':_0x5d0880[_0x0a9e('0x17')]});if(_['isNil'](_0x20559e)){recordings[_0x5d0880[_0x0a9e('0x10')]][_0x0a9e('0x1b')]['push']({'value':_0x5d0880[_0x0a9e('0x17')]});}}}}catch(_0x5a09ef){utils['error'](_0x5a09ef[_0x0a9e('0x1c')]);}};exports[_0x0a9e('0x1d')]=function(_0x38e7c4){try{if(!_[_0x0a9e('0xe')](recordings[_0x38e7c4['uniqueid']])){recordings[_0x38e7c4[_0x0a9e('0x9')]][_0x0a9e('0x1e')]=_0x38e7c4[_0x0a9e('0x1e')];recordings[_0x38e7c4[_0x0a9e('0x9')]][_0x0a9e('0x1f')]=_0x38e7c4[_0x0a9e('0x1f')];recordings[_0x38e7c4[_0x0a9e('0x9')]]['connectedlinenum']=_0x38e7c4['connectedlinenum'];recordings[_0x38e7c4[_0x0a9e('0x9')]][_0x0a9e('0x20')]=_0x38e7c4[_0x0a9e('0x20')];if(recordings[_0x38e7c4[_0x0a9e('0x9')]]['type']==_0x0a9e('0x21')&&recordings[_0x38e7c4['uniqueid']][_0x0a9e('0xa')]){recordings[_0x38e7c4['uniqueid']][_0x0a9e('0x22')]=recordings[_0x38e7c4[_0x0a9e('0x9')]][_0x0a9e('0xa')];recordings[_0x38e7c4[_0x0a9e('0x9')]][_0x0a9e('0x20')]='';}recordings[_0x38e7c4[_0x0a9e('0x9')]][_0x0a9e('0x1b')][_0x0a9e('0x23')](_0x5a101a=>{var _0x3652a7=_[_0x0a9e('0x24')](recordings[_0x38e7c4[_0x0a9e('0x9')]]);_0x3652a7[_0x0a9e('0x17')]=_0x5a101a['value'];writeDB(_0x3652a7);});delete recordings[_0x38e7c4[_0x0a9e('0x9')]];}}catch(_0x40e7a3){utils[_0x0a9e('0x12')](_0x40e7a3[_0x0a9e('0x1c')]);}};exports[_0x0a9e('0x25')]=function(_0x563b45){try{if(!_[_0x0a9e('0xe')](recordings[_0x563b45[_0x0a9e('0x9')]])){if(_0x563b45[_0x0a9e('0x26')]['toLowerCase']()==_0x0a9e('0x27')&&_['startsWith'](_0x563b45[_0x0a9e('0x28')][_0x0a9e('0x29')](),_0x0a9e('0x2a'))){var _0x33bdb7=_0x563b45[_0x0a9e('0x28')]['split']('=');var _0x66c1d2=_0x33bdb7[0x0][_0x0a9e('0x2b')](_0x33bdb7[0x0][_0x0a9e('0x2c')]('(')+0x1,_0x33bdb7[0x0][_0x0a9e('0x2c')](')'));var _0x2b45ea=_0x33bdb7[0x1];recordings[_0x563b45[_0x0a9e('0x9')]][_0x66c1d2]=_0x2b45ea;}}}catch(_0x332d35){utils[_0x0a9e('0x12')](_0x332d35['stack']);}};exports[_0x0a9e('0x2d')]=function(_0x5e7238){try{if(!_[_0x0a9e('0xe')](recordings[_0x5e7238[_0x0a9e('0x9')]])){recordings[_0x5e7238[_0x0a9e('0x9')]][_0x0a9e('0x2e')]=_0x5e7238['queue'];}}catch(_0x191e91){utils[_0x0a9e('0x12')](_0x191e91[_0x0a9e('0x1c')]);}};
\ 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(_0x6f3858,_0x36880a){var _0x296843=function(_0x3e545c){while(--_0x3e545c){_0x6f3858['push'](_0x6f3858['shift']());}};_0x296843(++_0x36880a);}(_0x70e0,0x17b));var _0x070e=function(_0xdd42c5,_0x3a1762){_0xdd42c5=_0xdd42c5-0x0;var _0x4dac07=_0x70e0[_0xdd42c5];return _0x4dac07;};'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 73628cf..36055c3 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xa96f=['error','stack','attendedtransfer','origtransfererchannel','origtransferercalleridnum','origtransferercalleridname','secondtransfererconnectedlinenum','secondtransferercontext','origtransfererlinkedid','origtransfererexten','attended','isNil','transfereechannel','assign','transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinenum','transfertargetaccountcode','transfertargetcontext','transfertargetlinkedid','lodash','util','./utils','format','TRANSFER|%s','type','request','blindtransfer','blind'];(function(_0xf74372,_0x51fe82){var _0x36bb65=function(_0x499b7a){while(--_0x499b7a){_0xf74372['push'](_0xf74372['shift']());}};_0x36bb65(++_0x51fe82);}(_0xa96f,0x1d7));var _0xfa96=function(_0x5b5eb4,_0x117c87){_0x5b5eb4=_0x5b5eb4-0x0;var _0x42af53=_0xa96f[_0x5b5eb4];return _0x42af53;};'use strict';var _=require(_0xfa96('0x0'));var util=require(_0xfa96('0x1'));var utils=require(_0xfa96('0x2'));function writeDB(_0x41e54a){utils['info'](util[_0xfa96('0x3')](_0xfa96('0x4'),_0x41e54a[_0xfa96('0x5')]));utils[_0xfa96('0x6')]('CreateVoiceTransferReport',_0x41e54a);}exports[_0xfa96('0x7')]=function(_0x406a6d){try{_0x406a6d['type']=_0xfa96('0x8');writeDB(_0x406a6d);}catch(_0x5cfc14){utils[_0xfa96('0x9')](_0x5cfc14[_0xfa96('0xa')]);}};exports[_0xfa96('0xb')]=function(_0x463339){try{_0x463339=_['assign'](_0x463339,{'transfererchannel':_0x463339[_0xfa96('0xc')],'transferercalleridnum':_0x463339[_0xfa96('0xd')],'transferercalleridname':_0x463339[_0xfa96('0xe')],'transfererconnectedlinenum':_0x463339[_0xfa96('0xf')],'transfererconnectedlinename':_0x463339['secondtransfererconnectedlinename'],'transfereraccountcode':_0x463339['origtransfereraccountcode'],'transferercontext':_0x463339[_0xfa96('0x10')],'transfererexten':_0x463339['secondtransfererexten'],'transfererlinkedid':_0x463339[_0xfa96('0x11')],'context':_0x463339['origtransferercontext'],'extension':_0x463339[_0xfa96('0x12')],'type':_0xfa96('0x13')});if(_[_0xfa96('0x14')](_0x463339[_0xfa96('0x15')])){_0x463339=_[_0xfa96('0x16')](_0x463339,{'transfereechannel':_0x463339[_0xfa96('0x17')],'transfereecalleridnum':_0x463339[_0xfa96('0x18')],'transfereecalleridname':_0x463339[_0xfa96('0x19')],'transfereeconnectedlinenum':_0x463339[_0xfa96('0x1a')],'transfereeconnectedlinename':_0x463339['transfertargetconnectedlinename'],'transfereeaccountcode':_0x463339[_0xfa96('0x1b')],'transfereecontext':_0x463339[_0xfa96('0x1c')],'transfereeexten':_0x463339['transfertargetexten'],'transfereelinkedid':_0x463339[_0xfa96('0x1d')]});}writeDB(_0x463339);}catch(_0x183da5){utils[_0xfa96('0x9')](_0x183da5[_0xfa96('0xa')]);}};
\ No newline at end of file
+var _0xfc9f=['transfertargetchannel','transfertargetcalleridnum','transfertargetcalleridname','transfertargetconnectedlinename','transfertargetaccountcode','transfertargetexten','lodash','./utils','info','format','TRANSFER|%s','type','blindtransfer','blind','error','stack','attendedtransfer','origtransferercalleridname','secondtransfererconnectedlinenum','origtransfereraccountcode','secondtransferercontext','secondtransfererexten','origtransfererlinkedid','origtransferercontext','origtransfererexten','attended','isNil','transfereechannel','assign'];(function(_0x27b28a,_0x4fba01){var _0x5acca3=function(_0x562cd0){while(--_0x562cd0){_0x27b28a['push'](_0x27b28a['shift']());}};_0x5acca3(++_0x4fba01);}(_0xfc9f,0x7a));var _0xffc9=function(_0x3dd15e,_0x1f0015){_0x3dd15e=_0x3dd15e-0x0;var _0x231fd0=_0xfc9f[_0x3dd15e];return _0x231fd0;};'use strict';var _=require(_0xffc9('0x0'));var util=require('util');var utils=require(_0xffc9('0x1'));function writeDB(_0x2a0100){utils[_0xffc9('0x2')](util[_0xffc9('0x3')](_0xffc9('0x4'),_0x2a0100[_0xffc9('0x5')]));utils['request']('CreateVoiceTransferReport',_0x2a0100);}exports[_0xffc9('0x6')]=function(_0x57c8b5){try{_0x57c8b5[_0xffc9('0x5')]=_0xffc9('0x7');writeDB(_0x57c8b5);}catch(_0x553faf){utils[_0xffc9('0x8')](_0x553faf[_0xffc9('0x9')]);}};exports[_0xffc9('0xa')]=function(_0x57900e){try{_0x57900e=_['assign'](_0x57900e,{'transfererchannel':_0x57900e['origtransfererchannel'],'transferercalleridnum':_0x57900e['origtransferercalleridnum'],'transferercalleridname':_0x57900e[_0xffc9('0xb')],'transfererconnectedlinenum':_0x57900e[_0xffc9('0xc')],'transfererconnectedlinename':_0x57900e['secondtransfererconnectedlinename'],'transfereraccountcode':_0x57900e[_0xffc9('0xd')],'transferercontext':_0x57900e[_0xffc9('0xe')],'transfererexten':_0x57900e[_0xffc9('0xf')],'transfererlinkedid':_0x57900e[_0xffc9('0x10')],'context':_0x57900e[_0xffc9('0x11')],'extension':_0x57900e[_0xffc9('0x12')],'type':_0xffc9('0x13')});if(_[_0xffc9('0x14')](_0x57900e[_0xffc9('0x15')])){_0x57900e=_[_0xffc9('0x16')](_0x57900e,{'transfereechannel':_0x57900e[_0xffc9('0x17')],'transfereecalleridnum':_0x57900e[_0xffc9('0x18')],'transfereecalleridname':_0x57900e[_0xffc9('0x19')],'transfereeconnectedlinenum':_0x57900e['transfertargetconnectedlinenum'],'transfereeconnectedlinename':_0x57900e[_0xffc9('0x1a')],'transfereeaccountcode':_0x57900e[_0xffc9('0x1b')],'transfereecontext':_0x57900e['transfertargetcontext'],'transfereeexten':_0x57900e[_0xffc9('0x1c')],'transfereelinkedid':_0x57900e['transfertargetlinkedid']});}writeDB(_0x57900e);}catch(_0x3f3317){utils[_0xffc9('0x8')](_0x3f3317['stack']);}};
\ No newline at end of file
index 64c9945..69784f6 100644 (file)
@@ -15,4 +15,4 @@
 // * treaties. The SOFTWARE PRODUCT is licensed, not sold.                        *
 // *                                                                       *
 // *************************************************************************
-var _0xaee5=['internal','name','interface','GETUSER|','result','NOTFOUND','length','getUserByInternal','getUserByInterface','getUserByName','getVoiceQueueByName','GetVoiceQueue','type','acw','FOUND','seconds','format','subtractTime','diffTime','sumTime','now','YYYY-MM-DD\x20HH:mm:ss','isAfter','isBefore','jayson/promise','moment','bluebird','client','xdr','info','debug','stringify','error','stack','request','then','catch','GetUser'];(function(_0x1ad2e8,_0x4f4a4a){var _0x2c5af7=function(_0x39c733){while(--_0x39c733){_0x1ad2e8['push'](_0x1ad2e8['shift']());}};_0x2c5af7(++_0x4f4a4a);}(_0xaee5,0x1e0));var _0x5aee=function(_0x13ca8a,_0x39928c){_0x13ca8a=_0x13ca8a-0x0;var _0x36ea9e=_0xaee5[_0x13ca8a];return _0x36ea9e;};'use strict';var jayson=require(_0x5aee('0x0'));var moment=require(_0x5aee('0x1'));var BPromise=require(_0x5aee('0x2'));var client=jayson[_0x5aee('0x3')]['http']({'port':0x2329});var logger=require('../../config/logger')(_0x5aee('0x4'));exports[_0x5aee('0x5')]=function(_0xa2fac){logger[_0x5aee('0x5')](_0xa2fac);};exports[_0x5aee('0x6')]=function(_0x484380){logger[_0x5aee('0x6')](JSON[_0x5aee('0x7')](_0x484380));};exports['error']=function(_0x583b24){logger[_0x5aee('0x8')](_0x583b24[_0x5aee('0x9')]);};exports[_0x5aee('0xa')]=function(_0x572827,_0x474202){return client[_0x5aee('0xa')](_0x572827,{'body':_0x474202})[_0x5aee('0xb')](function(_0x4c54d8){logger[_0x5aee('0x6')](JSON['stringify'](_0x4c54d8));})[_0x5aee('0xc')](function(_0x1ad5e3){logger[_0x5aee('0x8')](_0x1ad5e3[_0x5aee('0x9')]);});};function getUser(_0x50061e){return client[_0x5aee('0xa')](_0x5aee('0xd'),{'options':{'raw':!![],'attributes':['id',_0x5aee('0xe'),_0x5aee('0xf'),_0x5aee('0x10')],'where':_0x50061e,'limit':0x1}})[_0x5aee('0xb')](function(_0x4427a1){logger[_0x5aee('0x5')](_0x5aee('0x11')+JSON[_0x5aee('0x7')](_0x50061e)+'|'+(_0x4427a1[_0x5aee('0x12')]['length']?'FOUND':_0x5aee('0x13')));return _0x4427a1[_0x5aee('0x12')][_0x5aee('0x14')]?_0x4427a1[_0x5aee('0x12')][0x0]:null;});}exports[_0x5aee('0x15')]=function(_0x3e91f0){return new BPromise(function(_0x66c9a6,_0x11e4fa){if(_0x3e91f0){return getUser({'internal':_0x3e91f0})[_0x5aee('0xb')](function(_0x478cbe){return _0x66c9a6(_0x478cbe);})[_0x5aee('0xc')](function(_0xa78040){logger[_0x5aee('0x8')](_0xa78040[_0x5aee('0x9')]);return _0x66c9a6(null);});}else{return _0x66c9a6(null);}});};exports[_0x5aee('0x16')]=function(_0x239b9c){return new BPromise(function(_0x5f000a,_0x42b100){if(_0x239b9c){return getUser({'interface':_0x239b9c})[_0x5aee('0xb')](function(_0x3b617a){return _0x5f000a(_0x3b617a);})[_0x5aee('0xc')](function(_0x419f56){logger[_0x5aee('0x8')](_0x419f56[_0x5aee('0x9')]);return _0x5f000a(null);});}else{return _0x5f000a(null);}});};exports[_0x5aee('0x17')]=function(_0x25a6bb){return new BPromise(function(_0x3fc233,_0x279ab3){if(_0x25a6bb){return getUser({'name':_0x25a6bb})[_0x5aee('0xb')](function(_0x1fc486){return _0x3fc233(_0x1fc486);})[_0x5aee('0xc')](function(_0x3aff48){logger[_0x5aee('0x8')](_0x3aff48['stack']);return _0x3fc233(null);});}else{return _0x3fc233(null);}});};exports[_0x5aee('0x18')]=function(_0x1b4411){return new BPromise(function(_0x501c63,_0xe4aec9){if(_0x1b4411){return client['request'](_0x5aee('0x19'),{'options':{'raw':!![],'attributes':['id',_0x5aee('0xf'),_0x5aee('0x1a'),_0x5aee('0x1b'),'acwTimeout'],'where':{'name':_0x1b4411},'limit':0x1}})[_0x5aee('0xb')](function(_0x4e87bd){logger[_0x5aee('0x5')]('GETVOICEQUEUEBYNAME|'+_0x1b4411+'|'+(_0x4e87bd[_0x5aee('0x12')][_0x5aee('0x14')]?_0x5aee('0x1c'):_0x5aee('0x13')));return _0x501c63(_0x4e87bd['result']['length']?_0x4e87bd[_0x5aee('0x12')][0x0]:null);})[_0x5aee('0xc')](function(_0x498d38){logger[_0x5aee('0x8')](_0x498d38['stack']);return _0x501c63(null);});}else{return _0x501c63(null);}});};exports['addTime']=function(_0x181c44,_0x58b530){return moment(_0x181c44)['add'](_0x58b530,_0x5aee('0x1d'))[_0x5aee('0x1e')]('YYYY-MM-DD\x20HH:mm:ss');};exports[_0x5aee('0x1f')]=function(_0x538a21,_0x506a45){return moment(_0x538a21)['subtract'](_0x506a45,_0x5aee('0x1d'))[_0x5aee('0x1e')]('YYYY-MM-DD\x20HH:mm:ss');};exports[_0x5aee('0x20')]=function(_0x283135,_0x1ab0ea){return moment(_0x283135)['diff'](moment(_0x1ab0ea),_0x5aee('0x1d'));};exports[_0x5aee('0x21')]=function(_0x573b6b,_0x2819c6){return parseInt(_0x573b6b,0xa)+parseInt(_0x2819c6,0xa);};exports[_0x5aee('0x22')]=function(){return moment()['format'](_0x5aee('0x23'));};exports[_0x5aee('0x24')]=function(_0x6bcc00,_0x56a3bc){if(_0x56a3bc){return moment(_0x6bcc00)[_0x5aee('0x24')](_0x56a3bc);}else{return!![];}};exports[_0x5aee('0x25')]=function(_0x52a0eb,_0x469c54){if(_0x469c54){return moment(_0x52a0eb)[_0x5aee('0x25')](_0x469c54);}else if(_0x52a0eb){return!![];}else{return![];}};
\ No newline at end of file
+var _0x0bdc=['then','stringify','catch','internal','name','result','length','FOUND','NOTFOUND','getUserByInternal','getUserByName','getVoiceQueueByName','GetVoiceQueue','type','acw','GETVOICEQUEUEBYNAME|','addTime','add','seconds','format','YYYY-MM-DD\x20HH:mm:ss','subtractTime','diffTime','sumTime','now','isAfter','isBefore','jayson/promise','client','http','../../config/logger','xdr','info','debug','error','stack','request'];(function(_0x3a9da9,_0x2813a0){var _0x55d4f1=function(_0x5b8d01){while(--_0x5b8d01){_0x3a9da9['push'](_0x3a9da9['shift']());}};_0x55d4f1(++_0x2813a0);}(_0x0bdc,0x65));var _0xc0bd=function(_0x42ad39,_0x141dbe){_0x42ad39=_0x42ad39-0x0;var _0x3b9a15=_0x0bdc[_0x42ad39];return _0x3b9a15;};'use strict';var jayson=require(_0xc0bd('0x0'));var moment=require('moment');var BPromise=require('bluebird');var client=jayson[_0xc0bd('0x1')][_0xc0bd('0x2')]({'port':0x2329});var logger=require(_0xc0bd('0x3'))(_0xc0bd('0x4'));exports['info']=function(_0x4bd669){logger[_0xc0bd('0x5')](_0x4bd669);};exports[_0xc0bd('0x6')]=function(_0x3b30d1){logger[_0xc0bd('0x6')](JSON['stringify'](_0x3b30d1));};exports[_0xc0bd('0x7')]=function(_0x5c2a4c){logger['error'](_0x5c2a4c[_0xc0bd('0x8')]);};exports[_0xc0bd('0x9')]=function(_0xa27712,_0x3a50ba){return client[_0xc0bd('0x9')](_0xa27712,{'body':_0x3a50ba})[_0xc0bd('0xa')](function(_0x5d51d4){logger[_0xc0bd('0x6')](JSON[_0xc0bd('0xb')](_0x5d51d4));})[_0xc0bd('0xc')](function(_0x9f13fd){logger[_0xc0bd('0x7')](_0x9f13fd['stack']);});};function getUser(_0x5cb029){return client['request']('GetUser',{'options':{'raw':!![],'attributes':['id',_0xc0bd('0xd'),_0xc0bd('0xe'),'interface'],'where':_0x5cb029,'limit':0x1}})['then'](function(_0x5d86d8){logger['info']('GETUSER|'+JSON[_0xc0bd('0xb')](_0x5cb029)+'|'+(_0x5d86d8[_0xc0bd('0xf')][_0xc0bd('0x10')]?_0xc0bd('0x11'):_0xc0bd('0x12')));return _0x5d86d8[_0xc0bd('0xf')][_0xc0bd('0x10')]?_0x5d86d8[_0xc0bd('0xf')][0x0]:null;});}exports[_0xc0bd('0x13')]=function(_0x1ccb89){return new BPromise(function(_0x2a833f,_0x335588){if(_0x1ccb89){return getUser({'internal':_0x1ccb89})[_0xc0bd('0xa')](function(_0x2cebf5){return _0x2a833f(_0x2cebf5);})[_0xc0bd('0xc')](function(_0x2ef6e7){logger[_0xc0bd('0x7')](_0x2ef6e7[_0xc0bd('0x8')]);return _0x2a833f(null);});}else{return _0x2a833f(null);}});};exports['getUserByInterface']=function(_0x251e75){return new BPromise(function(_0x38bd74,_0x21448d){if(_0x251e75){return getUser({'interface':_0x251e75})[_0xc0bd('0xa')](function(_0xd8159){return _0x38bd74(_0xd8159);})['catch'](function(_0x5512e6){logger[_0xc0bd('0x7')](_0x5512e6[_0xc0bd('0x8')]);return _0x38bd74(null);});}else{return _0x38bd74(null);}});};exports[_0xc0bd('0x14')]=function(_0x8a06b7){return new BPromise(function(_0x1a7ec4,_0xe76584){if(_0x8a06b7){return getUser({'name':_0x8a06b7})[_0xc0bd('0xa')](function(_0x50a1ce){return _0x1a7ec4(_0x50a1ce);})[_0xc0bd('0xc')](function(_0xcdb859){logger[_0xc0bd('0x7')](_0xcdb859[_0xc0bd('0x8')]);return _0x1a7ec4(null);});}else{return _0x1a7ec4(null);}});};exports[_0xc0bd('0x15')]=function(_0x5b51e9){return new BPromise(function(_0x55019e,_0x4d03da){if(_0x5b51e9){return client[_0xc0bd('0x9')](_0xc0bd('0x16'),{'options':{'raw':!![],'attributes':['id',_0xc0bd('0xe'),_0xc0bd('0x17'),_0xc0bd('0x18'),'acwTimeout'],'where':{'name':_0x5b51e9},'limit':0x1}})[_0xc0bd('0xa')](function(_0x5ceb8a){logger[_0xc0bd('0x5')](_0xc0bd('0x19')+_0x5b51e9+'|'+(_0x5ceb8a[_0xc0bd('0xf')][_0xc0bd('0x10')]?_0xc0bd('0x11'):_0xc0bd('0x12')));return _0x55019e(_0x5ceb8a[_0xc0bd('0xf')]['length']?_0x5ceb8a[_0xc0bd('0xf')][0x0]:null);})[_0xc0bd('0xc')](function(_0x3a6562){logger['error'](_0x3a6562[_0xc0bd('0x8')]);return _0x55019e(null);});}else{return _0x55019e(null);}});};exports[_0xc0bd('0x1a')]=function(_0x1e9bf4,_0x2c0187){return moment(_0x1e9bf4)[_0xc0bd('0x1b')](_0x2c0187,_0xc0bd('0x1c'))[_0xc0bd('0x1d')](_0xc0bd('0x1e'));};exports[_0xc0bd('0x1f')]=function(_0x150432,_0x525770){return moment(_0x150432)['subtract'](_0x525770,_0xc0bd('0x1c'))[_0xc0bd('0x1d')](_0xc0bd('0x1e'));};exports[_0xc0bd('0x20')]=function(_0x190cd1,_0x9b3150){return moment(_0x190cd1)['diff'](moment(_0x9b3150),_0xc0bd('0x1c'));};exports[_0xc0bd('0x21')]=function(_0x580f97,_0x514ad0){return parseInt(_0x580f97,0xa)+parseInt(_0x514ad0,0xa);};exports[_0xc0bd('0x22')]=function(){return moment()[_0xc0bd('0x1d')]('YYYY-MM-DD\x20HH:mm:ss');};exports[_0xc0bd('0x23')]=function(_0x2f948f,_0x293cf1){if(_0x293cf1){return moment(_0x2f948f)[_0xc0bd('0x23')](_0x293cf1);}else{return!![];}};exports[_0xc0bd('0x24')]=function(_0x1856b9,_0x5ad80a){if(_0x5ad80a){return moment(_0x1856b9)[_0xc0bd('0x24')](_0x5ad80a);}else if(_0x1856b9){return!![];}else{return![];}};
\ No newline at end of file